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
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-снимками.
Что показали файлы (кандидаты на правила и доработки парсера)
- Скользящий период «Октябрь 2024 г. – Сентябрь 2025 г.» (НПЗ 60/62/76, Агрокомплекс 76): парсер берёт первый месяц
и даёт
2024 Q4, нарастающий. Нужен разбор диапазона и признак «не с начала года»; ядро должно такой документ не привязывать к версии как нарастающий. - Счёт 91 (Цимлянский, Приманыческий): строки аналитики по статьям доходов/расходов показывают только обороты,
сальдо нет (91 закрывается на 91.09) → тождество «начало + обороты = конец» нарушено на каждой строке →
needs_check. Вопрос к правилам §1.4: исключать ли 90/91/99 из проверки тождества по строкам. - Несколько корней без строки счёта (Новоросметалл, Агрокомплекс, вариант 2): на листе нет строки «58», верхний
уровень — 58.01, 58.03; «Итого» равно сумме корней, парсер сверяет «Итого» с первым корнем →
needs_check(OQ-106). Встречается массово, стоит сверять «Итого» с суммой строк уровня 0. - Шапка ОСВ 63 Новоросметалл: «Оборотно-сальдовая ведомость» / «Бухгалтерский | 9 месяцев 2025 г.» / колонки «Счет
(Код, Наименование)» двумя столбцами. Парсер не нашёл счёт, период и тип данных (
org = "Бухгалтерский"), иерархия по шаблону кодов. Новый формат заголовка таблицы. - «Итого развернутое» (Новоросметалл) — вторая итоговая строка после «Итого»; сейчас, видимо, попадает в OTHER.
- Листы названы кодом счёта (
58,60, …) и несколько ОСВ в одной книге — работает (locator = sheet:58). - Без «Валюта» в шапке (Цимлянский, НКЗ, НМ, Приманыческий, Агрокомплекс) — предупреждение, не ошибка.
- Объём: 50 тыс. строк разбираются за 3–4 с; снимки таких файлов в golden не кладём (десятки МБ JSON).
Отчёты «Анализ счета» из того же пакета (…ПоКомпаниямГруппы…) — не ОСВ, лежат в analysis-reports/.