Andrey Epifancev 5bbbe1c7b3 test(osv-dkb): golden-снимки пакета ДКБ (22 файла до 1 МиБ), README
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
2026-10-06 13:23:30 +04:00

51 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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/`.