golden/expected_osv_parse/osv-dkb/** — 22 новых снимка (7,8 МБ); три файла Агрокомплекса (9–14 МБ) без снимков. Существующие снимки не менялись. Парный PR: RSHB/arm-tabular-parser feat/10-osv-dkb-tests (issue #10), stacked on fixtures#8. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> Claude-Session: cedd7915-2efe-41e5-988c-a9117033598b
51 lines
8.1 KiB
Markdown
51 lines
8.1 KiB
Markdown
# osv-dkb — ОСВ организаций из пакета ДКБ (06.10.2026)
|
||
|
||
Реальные ОСВ шести организаций вне группы «Русский бисквит», присланные ДКБ одним пакетом («Документы по дкб в
|
||
формате xls.zip»). Данные внутренние, наружу не выносить. Раскладка — `osv-dkb/<организация>/<период>/`, имена файлов
|
||
исходные. Период каталога — по шапке документа, не по имени файла: `2025-Q3` = «9 месяцев 2025 г.»,
|
||
`2024-10_2025-09` = «Октябрь 2024 г. – Сентябрь 2025 г.» (скользящие 12 месяцев, не с начала года).
|
||
|
||
**Почему отдельный каталог, а не `osv/`.** Тесты `tabular-parser` по `osv/**` требуют от каждого файла: один лист ОСВ с
|
||
именем `Лист_1`, статус `done`, период = каталогу `YYYY-Qn`, golden-снимок. Здесь это не так: книги с несколькими листами
|
||
ОСВ, статусы `needs_check`, листы `58`/`TDSheet`, скользящий период в каталоге `2024-10_2025-09`, файлы по 9–14 МБ. Для
|
||
пакета ДКБ тесты обобщены (`tabular-parser/api/tests/fixtures/test_osv_dkb.py`, issue #10): инварианты на каждом файле;
|
||
ожидаемые нарушения контрольных сумм — манифест `tabular-parser/api/tests/osv_dkb_expectations.yaml` (данные, не условия
|
||
по имени файла); период — по имени каталога; golden-снимки (`golden/expected_osv_parse/osv-dkb/`) — у файлов до 1 МиБ (22
|
||
из 25), у трёх файлов Агрокомплекса (9–14 МБ, ~50 тыс. строк) — только property-тесты. Прогон: `make test-fixtures`.
|
||
|
||
## Организации и статус парсера (CLI `src.parser.cli`, 06.10.2026)
|
||
|
||
| Каталог | Организация (по шапке) | Файлов | Формат | Парсер |
|
||
|---|---|---|---|---|
|
||
| `tsimlyansky/2025-Q3` | АО «Цимлянский» | 7 (58, 60, 62, 66, 67, 76, 91), xls | 1С, шапка варианта 1, outline, без валюты в шапке | `done`, кроме 91 — `needs_check` (см. ниже) |
|
||
| `nkz/2025-Q3` | ООО «Новороссийский Кислородный завод» | 2 книги по 3 листа (58+66+67, 60+62+76), xls | листы названы кодом счёта; иерархия outline и по отступам | 60+62+76 `done`; 58+66+67 `needs_check` (лист 58: «сумма детей ≠ родитель», строки 12, 24) |
|
||
| `nm/2025-Q3` | ООО «Новоросметалл» | 2 книги по 3 листа (58+66+67, 60+62+76) + ОСВ 63, xlsx | шапка варианта 2 («Период:», «Субконто»), «Выводимые данные: сумма»; на листах нет строки корневого счёта — верхний уровень сразу субсчета; «Итого» и «Итого развернутое» | `needs_check` на всех листах: «Итого ≠ корневому счёту» (несколько корней, OQ-106); 63 — шапка не разобрана (см. ниже) |
|
||
| `npz/2025-Q3`, `npz/2024-10_2025-09` | ООО «Новороссийский прокатный завод» (с обособленными подразделениями) | 2 книги (58+63+66+67 за 9 мес.; 60+62+76 за окт. 2024 – сент. 2025), xlsx | 1С, «Валюта БУ, НУ: RUB», outline | `done`; период «Октябрь 2024 г. – Сентябрь 2025 г.» разобран как `2024 Q4`, нарастающий — **неверно** (см. ниже) |
|
||
| `primanych/2025-Q3` | ООО «Приманыческий» | 7 (58, 60, 62, 66, 67, 76, 91), xls | как у Цимлянского | `done`, кроме 91 — `needs_check` |
|
||
| `agrokompleks/2025-Q3`, `agrokompleks/2024-10_2025-09` | АО фирма «Агрокомплекс» им. Н.И. Ткачева | 4, xls (9–14 МБ, лист `TDSheet`, 50 тыс. строк: субсчета → контрагенты → договоры) | шапка варианта 2, «сумма», outline | `needs_check`: «Итого ≠ корню» (несколько корней 62.01/62.04 …), нарушения тождества сальдо в блоках магазинов (строки 48201+ в 62), разбор 3–4 с |
|
||
|
||
ОСВ АО «Русский бисквит» за 3 кв. 2025 и ООО «Пекарня Счастливочная» 01/60 за 1 кв. 2025 из пакета совпали побайтно с
|
||
`osv/rb/2025-Q3` и `osv/schastl/2025-Q1` и не копировались; шесть недостающих ОСВ Счастливочной за 1 кв. 2025 (02, 58, 62,
|
||
66, 67, 76) положены в `osv/schastl/2025-Q1/` с golden-снимками.
|
||
|
||
## Что показали файлы (кандидаты на правила и доработки парсера)
|
||
|
||
1. **Скользящий период** «Октябрь 2024 г. – Сентябрь 2025 г.» (НПЗ 60/62/76, Агрокомплекс 76): парсер берёт первый месяц
|
||
и даёт `2024 Q4`, нарастающий. Нужен разбор диапазона и признак «не с начала года»; ядро должно такой документ
|
||
не привязывать к версии как нарастающий.
|
||
2. **Счёт 91** (Цимлянский, Приманыческий): строки аналитики по статьям доходов/расходов показывают только обороты,
|
||
сальдо нет (91 закрывается на 91.09) → тождество «начало + обороты = конец» нарушено на каждой строке → `needs_check`.
|
||
Вопрос к правилам §1.4: исключать ли 90/91/99 из проверки тождества по строкам.
|
||
3. **Несколько корней без строки счёта** (Новоросметалл, Агрокомплекс, вариант 2): на листе нет строки «58», верхний
|
||
уровень — 58.01, 58.03; «Итого» равно сумме корней, парсер сверяет «Итого» с первым корнем → `needs_check` (OQ-106).
|
||
Встречается массово, стоит сверять «Итого» с суммой строк уровня 0.
|
||
4. **Шапка ОСВ 63 Новоросметалл**: «Оборотно-сальдовая ведомость» / «Бухгалтерский | 9 месяцев 2025 г.» / колонки «Счет
|
||
(Код, Наименование)» двумя столбцами. Парсер не нашёл счёт, период и тип данных (`org = "Бухгалтерский"`), иерархия
|
||
по шаблону кодов. Новый формат заголовка таблицы.
|
||
5. **«Итого развернутое»** (Новоросметалл) — вторая итоговая строка после «Итого»; сейчас, видимо, попадает в OTHER.
|
||
6. **Листы названы кодом счёта** (`58`, `60`, …) и несколько ОСВ в одной книге — работает (`locator = sheet:58`).
|
||
7. **Без «Валюта» в шапке** (Цимлянский, НКЗ, НМ, Приманыческий, Агрокомплекс) — предупреждение, не ошибка.
|
||
8. **Объём**: 50 тыс. строк разбираются за 3–4 с; снимки таких файлов в golden не кладём (десятки МБ JSON).
|
||
|
||
Отчёты «Анализ счета» из того же пакета (`…ПоКомпаниямГруппы…`) — не ОСВ, лежат в `analysis-reports/`.
|