41 KiB
06. Тестовые данные (реальная группа «Русский бисквит»)
Все файлы — реальная первичка одной группы компаний, полученная от аналитиков ДКБ. Живут в отдельном репозитории
arm-ka-fixtures (workspace: fixtures/) с исходными именами, не переименовывать: имена тоже тест.
Данные содержат наименования контрагентов и ИНН реальных организаций — репозиторий внутренний, наружу не выносить.
Фикстуры ≠ спецификация. Это выгрузки из одной конфигурации 1С у двух организаций. ОСВ других клиентов будут отличаться: другие колонки, другой порядок субконто, без outline level, другие заголовки, несколько листов, ББ/ОФР в Excel. Всё, что ниже в §3 «показали файлы», — наблюдения для регрессии и для словарей синонимов, а не правила парсера. Правила —
05-domain-rules.md§1.0 и §12.
1. Периметр
| Организация | ИНН | Роль в группе | Что есть |
|---|---|---|---|
| АО «Русский бисквит» (АО РБ) | 3528052718 | заёмщик, фактически головная | ОСВ 01, 02, 58, 60, 62, 66, 67, 76 за 1–3 кв. 2024, 2024 г., 1–3 кв. 2025; ББ/ОФР за 9 мес. 2024, 2024 г., 1 кв. 2025, 1 полуг. 2025, 9 мес. 2025; расшифровки на 01.10.24, 01.04.25, 01.07.25; анализ заёмщика |
| ООО «Пекарня «Счастливочная» | 3528… (есть в ББ) | поручитель, дочерняя/связанная | ОСВ 01, 02, 58, 60, 62, 66, 67, 76 за 1–3 кв. 2024, 2024 г., 1–3 кв. 2025; ББ/ОФР (сканы «БО …»); анализ поручителя |
| Прочие контрагенты из ОСВ | ОАО «ЧКФ» (аренда), ООО «Лидер», ООО «ОФГ» (займы), Россельхозбанк, ВТБ, Сбербанк и др. | внешние / возможно ГК | нужны для проверки признака ГК vs Внешний |
Внутригрупповые связи, видимые в ОСВ (для тестов матчинга ВГО):
- У «Счастливочной» в ОСВ 62 контрагент «Русский бисквит», ИНН 3528052718 (Дт 62.01 ≈ 106,3 млн на 30.09.2024, Кт 62.02 авансы 14,2 млн). Зеркально у АО РБ в ОСВ 60 контрагент записан как «Юг-Финанс / ПЕКАРНЯ СЧАСТЛИВОЧНАЯ» (без ИНН, иногда с пробелом в конце; Кт 60.01 на 30.09.2024 = 106 311 116,46 — совпадает копейка в копейку с Дт 62.01 у Счастливочной) — идеальный тест резолва по алиасу и точного матча 1:1 по правилу № 6.
- У АО РБ в ОСВ 66 за 3 кв. 2024: заём 42 000 000 от «Юг-Финанс / ПЕКАРНЯ СЧАСТЛИВОЧНАЯ» (66.03) и проценты (66.04) — зеркало должно быть у Счастливочной на 58.03 (правило № 4) и 76 (проценты, правило № 5).
- «ЧКФ АО» (ОАО «ЧКФ») — у АО РБ на 58.03 (заём 10 млн), 60, 76 (аренда/лизинг, крупные суммы на 76.07.x) — скорее всего третий участник ГК; есть ли он в периметре ГСК — уточнить у аналитиков. Пара 76.07.x ↔ 03/01 — тест правила № 1.
- «ОФГ ООО» (займы 66.03/66.04, 62), «Лидер ОП», «ЛИДЕР-КРЫМ ООО», «ТЕХНОЛИДЕР ООО» — кандидаты на ГК vs Внешний.
- ОСВ 58.03 АО РБ за 3 кв. 2024: займы выданные «МАЛЕЧКИНСКАЯ ПТИЦЕФАБРИКА ООО» (75 млн, ИНН 3523023093 — есть в ОСВ 62 Счастливочной) и «РБ ТК» (13,1 млн) — почти наверняка участники ГК «Русский бисквит»; ОСВ по ним в наборе нет (OQ-25). В этом файле уровень 1 — сразу контрагент (счёт в шапке уже субсчёт), уровень 2 — договор.
Эталон результата: Консолидация_Группа РБ.xlsx — ручная консолидация аналитика на 01.10.2024, 01.01.2025,
01.04.2025, 01.07.2025, 01.10.2025 (листы по датам). На листе 01.10.2024 видно ожидаемые «в т. ч. взаимные
обязательства» по статьям (напр., 1150: 51 577; 1230: 4 814 у АО РБ и 108 062 у Счастливочной; 1250: 42 000 у
Счастливочной). Это golden-данные для интеграционных тестов консолидации (с допуском на ручные правки аналитика).
2. Инвентарь ОСВ (xls/xlsx из 1С 8.3)
Формат имени в наборе аналитиков сильно варьируется — это намеренно хорошие тесты для парсера шапки, а не имени файла.
АО «Русский бисквит»
| Счёт | 1 кв. 2024 | 2 кв. 2024 | 3 кв. 2024 | 2024 г. | 1 кв. 2025 | 2 кв. 2025 | 3 кв. 2025 |
|---|---|---|---|---|---|---|---|
| 01 | — | — | сч 01.xlsx (306 стр., 24 кол.) |
ОСВ_01_ОС по субсчетам.xlsx |
ОСВ сч 01 за 1 кв 2025 год.xlsx |
— | ОСВ сч 01 за 3 кв 2025г.xlsx |
| 02 | — | — | — | ОСВ_02_ОС по субсчетам.xls |
ОСВ сч 02 за 1 кв 2025 год.xlsx |
сч 02.xlsx |
ОСВ сч 02 за 3 кв 2025г.xlsx |
| 58 | — | — | сч 583_3 кв 2024.xlsx (по субсчёту 58.03) |
ОСВ_58 за 2024.xls |
ОСВ сч 58 за 1 кв 2025 год.xlsx |
сч 58.xlsx |
ОСВ сч 58 за 3 кв 2025г.xlsx |
| 60 | сч 60_ 1 кв 2024 г.xlsx (626 стр.) |
сч 60_ 2 кв 2024 г.xlsx |
сч 60_3 кв 2024.xlsx |
ОСВ_60 за 2024.xls (1045 стр.) |
ОСВ сч 60 за 1 кв 2025 год.xlsx |
сч 60.xlsx |
ОСВ сч 60 за 3 кв 2025г.xlsx |
| 62 | сч 62_ 1 кв 2024 г.xlsx |
сч 62_ 2 кв 2024 г.xlsx |
сч 62_3 кв 2024.xlsx |
ОСВ_62_по субсчетам и поставщикам.xls |
ОСВ сч 62 за 1 кв 2025 год.xlsx |
сч 62.xlsx |
ОСВ сч 62 за 3 кв 2025г.xlsx |
| 66 | — | — | сч 66_3 кв 2024.xlsx |
ОСВ_66 за 2024.xls |
ОСВ сч 66 за 1 кв 2025 год.xlsx |
сч 66.xlsx |
ОСВ сч 66 за 3 кв 2025г.xlsx |
| 67 | — | — | сч 67_3 кв 2024.xlsx |
ОСВ_67 за 2024.xls |
ОСВ сч 67 за 1 кв 2025 год.xlsx |
сч 67.xlsx |
ОСВ сч 67 за 3 кв 2025г.xlsx |
| 76 | — | — | сч 76_3 кв 2024.xlsx |
ОСВ_76 за 2024.xls |
ОСВ сч 76 за 1 кв 2025 год.xlsx |
сч 76.xlsx |
ОСВ сч 76 за 3 кв 2025г.xlsx |
ООО «Пекарня «Счастливочная» (имена Оборотносальдовая ведомость по счету NN за … г..xlsx|xls)
| Счёт | 1 кв. 2024 | 2 кв. 2024 | 3 кв. 2024 | 2024 г. | 1 кв. 2025 | 2 кв. 2025 | 3 кв. 2025 |
|---|---|---|---|---|---|---|---|
| 01 | — | — | xls | xlsx | xlsx | xlsx | xlsx |
| 02 | — | — | xls | xlsx | xlsx | xlsx | xlsx |
| 58 | — | — | — | xlsx | xlsx | xlsx | xlsx |
| 60 | xls | xls | xls | xlsx | xlsx | xlsx | xlsx |
| 62 | xls | xls | xls | xlsx | xlsx | xlsx | xlsx |
| 66 | — | — | — | xlsx | xlsx | xlsx | xlsx |
| 67 | — | — | — | xlsx | xlsx | xlsx | xlsx |
| 76 | xls | xls | xls | — | xlsx | xlsx | — |
Набор 2025 г. неполный: во 2 кв. нет 62/67/76, в 3 кв. — 58/62/66/67/76. 1 кв. 2025 дополнен пакетом ДКБ
06.10.2026 (02, 58, 62, 66, 67, 76; имена новых файлов — с дефисом «Оборотно-сальдовая …»). Реальных ОСВ в osv/ — 72.
3. Что показали реальные файлы (требования к парсеру)
Наблюдения, которых нет в ТЗ, но которые ломают наивный парсер:
- Шапка везде вариант 1 («Оборотно-сальдовая ведомость по счету NN за <период>»), организация — в r1, параметры —
r7, таблица с r9. Но заголовок таблицы может быть 2 или 3 строки (
Счет / Контрагенты / Договоры;Счет / Подразделение / Контрагенты ИНН). - Позиции колонок сумм плавают: у АО РБ Дт-начало в E, Кт-начало в H, обороты в J/L, конец в O/Q; у Счастливочной — G/J, K/N, Q/S (2024, xls) или H/J, L/O, Q/S. Колонка ИНН — E (только у Счастливочной). Определять по тексту заголовка.
- Мусор правее таблицы: в xls Счастливочной 62 за 3 кв. 2024 в колонках T/U стоят числа; в xlsx АО РБ 62 за 2024–2025
у контрагентских строк встречаются «хвостовые» ячейки с дробями вроде
8.577e+00или8.76e-06(остатки формул аналитика). Границу таблицы задаёт заголовок; всё правее последней «Кредит» — игнорировать. - Уровни группировки (outline level): 0 — счёт верхнего уровня и «Итого»; 1 — субсчёт; дальше — субконто по схеме. У АО РБ ОСВ 60: 60 (0) → 60.01 (1) → контрагент (2); ОСВ 66: 66 → 66.01 → контрагент (2) → договор (3). У Счастливочной ОСВ 62: 62 → 62.01 → подразделение «БП Аренда» (2) → контрагент с ИНН (3).
- Строка «Итого» — последняя, level 0, равна строке счёта верхнего уровня.
- Пустые ячейки = нет значения (NULL), не ноль. Значения — числа (
#,##0.00), не текст. - ОСВ по субсчёту (
сч 583_3 кв 2024.xlsx: «по счету 58.03») —osv_account_code = '58.03',account_root = '58'; чек-лист по счёту 58 этим файлом не закрывается полностью — решить правило [открыто]. - Квартальные vs нарастающие: ОСВ «за N квартал» у обеих компаний — квартальные: у АО РБ ОСВ 60 opening 1 кв. 2024 = 260,1 млн, opening 2 кв. = 311,96 млн = closing 1 кв., opening 3 кв. = 558,8 млн ≈ closing 2 кв. (559,3 млн — расхождение 0,5 млн: исправительные проводки задним числом, тоже реальный кейс). «За 2024 г.» — годовые. Проверять по данным, не только по тексту.
- Валюта:
Валюта БУ, НУ: RUBилируб.— равнозначно. Строк Вал./Кол. в этом наборе нет, но ТЗ их описывает (ОСВ 60.32 в у. е.) — закрыто синтетикойs04(§7). - Названия субсчетов в строках счёта могут присутствовать («60.01, Расчеты с поставщиками») или нет — в этом
наборе нет; поддержаны оба, синтетика
s09(§7). - Контрагенты-физлица и ИП («Абрамова Татьяна Викторовна (Перевозчик)», «Аверина Е.И. ИП», «Ведомость в счет з/платы») — не ЮЛ; резолв даёт NULL, тип «Внешний». Суффиксы в скобках — часть имени.
- xls (BIFF8) читается
xlrd(formatting_info=Trueдля outline level черезrowinfo_map); xlsx —openpyxl(неread_only, иначе нетrow_dimensions[].outline_level). XLSB —pyxlsb(в реальном наборе нет; ТЗ требует; есть только рукописный синтетическийs13, см. §7). - Размеры: до ~1000 строк, до 330 КБ; 2280 merged-диапазонов в файле на 677 строк — не падать на merged.
- Две пустые ОСВ:
schastl/2025-Q2/…по счету 58 за 2 квартал 2025 г..xlsxи…по счету 66 за 2 квартал 2025 г..xlsx— заголовок и сразу «Итого», строк данных нет. Штатный случай:done,hierarchy=trivial,metrics.rows = 0. - Буквенные субсчета 1С «76.АВ», «76.ВА», «76.ОТ» — в 8 файлах ОСВ 76 (АО РБ: 2024 г., 3 кв. 2024, 1–3 кв. 2025; Счастливочная: 1–3 кв. 2024). Это счета (ACCOUNT), а не контрагенты; регулярка кода счёта допускает 1–3 заглавные буквы в сегменте субсчёта (§1.3 п. 1 правил).
- Сальдо родителя нетто, детей развёрнуто: 1С показывает счёт свёрнутым сальдо (62 = 16,1 млн Дт), а субсчета — развёрнутым (62.01 = 40,2 млн Дт, 62.02 = 24,1 млн Кт); без учёта этого 32 из 66 файлов не сходились бы по колонкам (§1.4 правил, R-21).
- ИНН внутри текста строки: у Счастливочной в ОСВ 76 за 1–3 кв. 2024 встречаются контрагенты вида «Полиграф, 3528315710» (20 строк) без колонки ИНН; парсер ИНН из текста не извлекает (OQ-100).
4. ББ / ОФР (PDF) и ответы ИС Сканирование
| Файл | Орг. | Период | Тип |
|---|---|---|---|
АО РБ_ф.1_ 2024 год.pdf, АО РБ_ф.2_ 2024 год.pdf |
АО РБ | 2024 г. | машиночитаемый PDF (форма 66н), 3 + 2 стр. |
Отчетность 30092024 РБ.pdf |
АО РБ | 9 мес. 2024 | скан с OCR-слоем, 5 стр. |
Бухгалтерская отчетность 1 кв.25.pdf |
АО РБ | 1 кв. 2025 | скан, 6 стр. |
Бух отчетность за 2 кв 2025г.pdf |
АО РБ | 1 полуг. 2025 | PDF с текстом, 7 стр. |
Бухгалтерская отсчетность 9 мес.25.pdf |
АО РБ | 9 мес. 2025 | скан, 8 стр. |
БО 31.12.2024.pdf |
Счастливочная (предп.) | 2024 г. | машиночитаемый, 11 стр. (полный комплект) |
БО 9 мес. 2024 год скан.PDF, БО 1 кв 2025.PDF, БО за полугодие 2025 год. скан с подписями.PDF, БО за 9 месяцев 2025.PDF |
Счастливочная (предп.) | соотв. | сканы 4–5 стр. |
aep_4.PDF, aep_5.PDF |
разные | — | выписки из ГИР БО (ресурс БФО) — другой шаблон, для теста классификации |
aep_6…9, aep_30…34 (pdf) + *_aep_N.json (в Project docs) |
разные | — | пары «вход OCR → выход OCR» от ИС Сканирование: фикстуры контракта scan-gateway |
JSON aep_*.json — реальные ответы Content AI: структура data_ocr[].table_structure.rows[].cells[], confidence в
процентах (100.0), поле организации может называться иначе, чем в ТЗ — нормализацию делать по этим файлам, а не по ТЗ.
В фикстурах встречаются файлы с ББ и ОФР в одном PDF (→ два document из одного stored_file).
4а. Пакет ДКБ 06.10.2026: организации вне группы РБ, ББ/ОФР в Excel, план счетов 1С
Один zip «Документы по дкб в формате xls» + отдельные файлы, разложены в fixtures/ (PR arm-ka-fixtures#7):
| Что | Где | Состав |
|---|---|---|
| ОСВ шести организаций (29 файлов, 34 МБ) | osv-dkb/<org>/<период>/ |
АО «Цимлянский» (7 ОСВ за 9 мес. 2025), ООО «Новороссийский Кислородный завод» (2 книги по 3 листа), ООО «Новоросметалл» (2 книги по 3 листа + ОСВ 63; вариант 2, «сумма»), ООО «Новороссийский прокатный завод» (2 книги; одна за окт. 2024 – сент. 2025), ООО «Приманыческий» (7 ОСВ), АО фирма «Агрокомплекс» им. Ткачева (4 ОСВ по 50 тыс. строк, 9–14 МБ) |
| «Анализ счета» (3 книги) | analysis-reports/<org>/2025-Q3/ |
отчёт 1С по корреспонденции счетов с отбором по контрагентам группы; не ОСВ, парсер отвечает INVALID_DOCUMENT |
| ББ/ОФР в Excel (18 файлов: 14 форм и 4 шаблона) | statements-xlsx/<org>/<период>/ |
АО «Унагранде Ко» и «Унагранде Групп» (постраничные xls из 1С, 2024 г. и 9 мес. 2025), ООО НПЗ (одна книга ФСБУ 4/2023 с подстроками «в том числе»), ООО «Агрофирма Межениновская» (TDSheet, 66н); templates/ — пустые формы 66н и ФСБУ 4/2023 |
| План счетов 1С заказчика | directories/chart-of-accounts-1c.xlsx |
488 строк: код, наименование, субконто 1–3, вид; в seed 122 кода, все есть в выгрузке; 366 кодов выгрузки в seed нет (OQ-113, arm-core#23) |
osv-dkb/ намеренно вне osv/: fixtures-тесты парсера и ядра требуют один лист Лист_1, done, период = каталогу и
golden-снимок на каждый файл, а здесь многолистовые книги, needs_check, скользящий период и файлы по 14 МБ. Обобщение
тестов — arm-tabular-parser#10. Что показали файлы (8 находок: скользящий период «Октябрь 2024 г. – Сентябрь 2025 г.»,
тождество сальдо на счёте 91, несколько корней без строки счёта, шапка ОСВ 63 с кодом и названием в двух колонках,
«Итого развернутое», листы с именем кода счёта, нет валюты в шапке, объём) — fixtures/osv-dkb/README.md,
arm-tabular-parser#11, OQ-131…OQ-135. ИНН организаций в шапках ОСВ нет (OQ-136).
4б. Формы ББ/ОФР в Excel: манифест, golden, синтетика (Срез 2b)
Раскладки реальных файлов (fixtures/statements-xlsx/, README там же; 18 файлов: 14 форм и 4 шаблона):
| Раскладка | Где | Особенности |
|---|---|---|
| 1С-xls постранично | unagrande-co/2024-FY/, unagrande-group/{2024-FY,2025-Q3}/ |
один файл = одна страница формы; на странице 1 титул (организация, ИНН, ОКПО, единица «в тыс. рублей», ОКЕИ, аудитор со своим ИНН), на странице 2 только «Форма 0710001 с.2»; пятизначные подстроки (11101…), значения в ячейке — рубли с копейками, в тысячи их переводит числовой формат (#,##0,), парсер берёт значение как показывает формат (OQ-138, #42); страниц 1 ББ в пакете нет (только актив) и ОФР Групп 2024 — только стр. 2 |
| Многолистовая xlsx ФСБУ 4/2023 | npz/2025-Q3/ |
ББ на 5 листах, ОФР на 3 (третий — одна строка 2400, присоединяется как продолжение); заголовок формы после титула; листы 2–5 без заголовка и маркера; строка 1105 «Гудвил», подстроки 12301…, строка без кода с суммами; лист ОФР с одной строкой 2400 (OQ-143) |
TDSheet 66н |
mezheninovskaya/2025-Q3/ |
вся форма на одном листе, дата тройкой «30 | 9 | 2025» числами, двухстрочные заголовки, строка нумерации колонок, значения — тысячи с дробной частью; формат #,##0 показывает их целыми, парсер берёт показанное (OQ-138, #42) |
| Шаблоны | templates/ |
66н и ФСБУ 4/2023: коды есть, сумм и шапки нет; заголовок на две строки; в шаблоне ФСБУ «АКТИВ» и код 1110 в одной строке (OQ-142) |
Манифест tabular-parser/api/tests/statements_manifest.yaml: для каждого из 18 файлов — организация, ИНН, документы по
порядку (type, status, complete, причина needs_check, failed_relations). Статусы сверены прогоном: done — полные
формы (Межениновская ББ и ОФР, книга НПЗ, ОФР стр. 1 Унагранде Компани и Групп 3 кв. 2025: расхождения итогов —
округление, мягкие, OQ-138; значения — как показывает числовой формат, #42); needs_check — по данным файла: только актив (ББ стр. 1), страница 2 без шапки, шаблон без сумм.
Таблица «файл → статус» — README tabular-parser, «Парсер форм».
Golden fixtures/golden/expected_statement_parse/<тот же путь без расширения>.json — 24 снимка (18 реальных файлов +
6 синтетических); регрессия, не оракул; обновление — make golden-update (один для ОСВ и форм), просмотр diff, отдельный
коммит в fixtures. Оракулы корректности — манифест и property-тест tests/fixtures/test_statements_property.py (манифест покрывает
каждый файл; тип, статус и видимая причина needs_check каждого документа совпадают с ожиданиями).
Синтетика fixtures/statements-xlsx/synthetic/st01…st07 (генератор tabular-parser/api/tests/synthetic/generate_statements.py,
ожидания — tests/synthetic/test_statement_synthetic_files.py, описание — README каталога):
| Файл | Что проверяет |
|---|---|
st01_both_forms_one_sheet |
ББ и ОФР на одном листе, два документа с одним locator (§12 п. 1) |
st02_csv_like |
csv-подобный лист: двухстрочный заголовок, коды без подписи «Код», отрицательное значение, единиц нет |
st03_no_codes |
форма без колонки кодов → needs_check, «колонка кодов не найдена» (OQ-139) |
st04_mixed_book |
книга: лист ОСВ + лист баланса, порядок документов ОСВ → форма |
st05_continuation_only |
одинокая страница 2 → needs_check, предупреждение о продолжении (OQ-140) |
st07_single_code_continuation |
ОФР без 2400 на первом листе и лист-продолжение с единственной кодовой строкой 2400 присоединяется (OQ-143) |
st06_header_variants |
варианты, которых нет в реальных файлах: старое название ОФР, расшифровки/ОДДС/ОИК, форма только с ОКУД 0710xxx, организация в «», «Адрес», «Пояснения», числовая дата (покрытие словарей statement_*.yaml) |
5. Прочее
Форма расшифровки к отчетности 01 10 24 / 01 04 25 / 01 07 25.xlsx— расшифровки АО РБ (кредиты и займы, дебиторы и кредиторы с ИНН, поручительства, аренда, лизинг/залог, «К балансу»). Полезны как независимый источник ИНН контрагентов и для будущегоDISCLOSURE.Копия Рекомендуемые формы расшифровок_РБ копия на 30.09.25.xlsx— рекомендуемые банком формы расшифровок по строкам ББ (1110, 1120, 1150 …) с данными на 30.06 и 30.09.2025 по участникам группы.Анализ Русский бисквит_заемщик 01102025.xlsx,Анализ Счастливочная_поручитель 01102025.xlsx— макросные книги «Альбома инструментов и стандартов кредитования» (БлокТ32): листы «Отчетность», «Экспресс-анализ», «ЗАКЛ_лимит», «ЗАКЛ_сделка», «П2_ОД-2967», «Профсуждение» — контекст для будущей формы 276-ОД, не для первых срезов.diagrams_v5.12.zip→docs/model/diagrams/(part01…09 svg/png) — исходная поставка; с v5.17 диаграммы перерисовываются из DBML (make diagramsв docs, см.04-data-model-guide.md).
6. Раскладка репозитория arm-ka-fixtures (workspace fixtures/)
fixtures/
README.md # откуда данные, ограничения доступа
osv/
rb/ 2024-Q1/ 2024-Q2/ 2024-Q3/ 2024-FY/ 2025-Q1/ 2025-Q2/ 2025-Q3/ # файлы с исходными именами
schastl/ ...
synthetic/ README.md + s01…s19 (генератор в tabular-parser, §7)
statements/
rb/ schastl/ gir-bo/ # pdf
statements-xlsx/<org>/<период>/ # ББ/ОФР в Excel (§12, §4а): unagrande-co, unagrande-group, npz,
# mezheninovskaya, templates/ (пустые формы 66н и ФСБУ 4/2023)
osv-dkb/<org>/<период>/ # ОСВ пакета ДКБ вне тестов osv/** (§4а)
analysis-reports/<org>/<период>/ # отчёты «Анализ счета» (не ОСВ)
ocr/
aep_N.pdf|PDF + aep_N.json # пары вход/выход ИС Сканирование (эмулятор ИС
# в scan-gateway находит пару по sha256 содержимого
# входного PDF; имя и регистр расширения входного
# файла, `<uuid>.<ext>`, значения не имеют; набор —
# `<основа>.json` + `<основа>_*.json`; PDF без
# JSON-набора (aep_4/7/9/30–34) — `INVALID_DOCUMENT`)
expected_normalize/ # эталоны нормализатора scan-gateway (Срез 3a)
golden/
Консолидация_Группа РБ.xlsx # эталон КФО по датам
expected_osv_parse/<зеркало osv/ без расширения>.json # golden-снимки парсера ОСВ: 113 файлов (94 реальных: 72 в osv/ + 22 в osv-dkb/; + 19 синтетических)
expected_statement_parse/<зеркало statements-xlsx/ без расширения>.json # golden-снимки парсера форм ББ/ОФР: 24 файла (18 реальных + 6 синтетических), §4б
directories/
ecp-export-russkiy-biskvit.xlsx # срез выгрузки ЕЦП CRM по ГК «Русский Бисквит» (Срез 1)
chart-of-accounts-1c.xlsx # план счетов 1С заказчика, 488 строк (пакет ДКБ, OQ-113)
directories/ содержит срез выгрузки ЕЦП CRM по группе «Русский бисквит» (Срез 1, §6.1).
6.1 directories/ecp-export-russkiy-biskvit.xlsx — фикстура импорта справочников (Срез 1)
Срез реальной выгрузки ЕЦП CRM (docs/source/biq/ecp-export-lagal-entity.xlsx, лист «Выписки_01.04.26»; формат импорта —
05-domain-rules.md §13) по одной ГК. Тот же формат колонок: ИНН, iD ГК, Базовый РФ ГК в CRM, Группа компаний,
Организация, ГСК, ГСЗ, Тип. Используется тестами импорта arm-core (tests/ Среза 1).
| Что | Значение |
|---|---|
| Строк данных | 21 (+ строка заголовков) |
| ГК | одна: «Русский Бисквит», iD ГК = 1-AZFL6BQ; базовый РФ — «Санкт-Петербургский РФ» |
| Импортируется | 20 ЮЛ/ИП: 18 ЮЛ + 2 ИП |
| Пропускается | 1 строка типа ФЛ (ИНН совпадает с ИП 352819549855) → UNSUPPORTED_TYPE (проверка типа идёт раньше проверки дубля, поэтому DUPLICATE_IN_FILE в этом файле не возникает) |
| Члены ГСК (флаг «входит в ГСК») | АО «Русский бисквит» 3528052718 и ООО «Пекарня Счастливочная» 3528104476 → одна ГСК «Русский Бисквит» |
| ГСЗ | флагов нет — ГСЗ не создаётся |
| Кандидаты OQ-25 | ЧКФ, ОФГ, Малечкинская птицефабрика, ТК РБ — в составе ГК, но без флага ГСК |
Ожидаемый отчёт на пустой БД: rows = 21, groups_created = 1, offices_created = 1, entities_created = 20,
memberships_created = 2, errors = 1. Полная выгрузка (8400 строк, 345 ГК) в fixtures/ не копируется — лежит в
docs/source/biq/ (внутренние данные) и нужна для прогона импорта целиком.
Справочники продукта — план счетов, правила элиминации, права и роли, состав обязательных документов,
региональные офисы — не фикстуры, а seed ядра: arm-core/api/seed/core/ (обязательные данные: roles.yaml,
permissions.yaml, role_permissions.yaml, regional_office.yaml, chart_of_accounts.csv, elimination_rules_v1.yaml,
required_document_rules.yaml) и arm-core/api/seed/dev/ (только python -m scripts.seed --dev: dev-пользователи и
примеры РФ). Загрузчик — python -m scripts.seed [--dev] из arm-core/api/ (идемпотентен, upsert по натуральному ключу;
в compose его выполняет одноразовый сервис arm-core-migrate). Здесь остаются только тестовые данные группы.
План счетов 1С заказчика получен 06.10.2026 (directories/chart-of-accounts-1c.xlsx, 488 строк); seed пока на Плане счетов 94н и типовых субсчетах (OQ-47, OQ-113 → arm-core#23).
Первый прогон парсера на osv/** сохранён как expected_osv_parse/*.json после ручной сверки итогов со строкой «Итого»
(§7) — дальше это regression-набор.
7. Синтетика, golden-снимки и xlsb парсера ОСВ (Срез 2a)
Реальные файлы покрывают один вариант шапки и один формат файла (xls/xlsx из 1С 8.3). Остальное — синтетика
fixtures/osv/synthetic/ (вымышленные организации и ИНН; суммы согласованы арифметически, поэтому листы ОСВ, кроме
s10, дают done; книги s12/s14 с формами — needs_check по формам). Файлы собирает детерминированный генератор tabular-parser/api/tests/synthetic/generate.py
(повторный запуск даёт те же байты), ожидания по каждому файлу — в tests/synthetic/test_synthetic_files.py, описание —
в fixtures/osv/synthetic/README.md.
| Файл | Назначение (что из §1 проверяет) |
|---|---|
s01_variant2_header |
шапка варианта 2 («Период:», «Детализация по субсчетам, субконто: …», заголовок «Субконто», данные «Сумма») |
s02_no_outline_indent |
иерархия без outline level — по отступам (hierarchy=indent); Валюта БУ, НУ: руб. |
s03_no_outline_no_indent |
ни outline, ни отступов — по кодам счетов и жирности (hierarchy=account_pattern); римский квартал |
s04_currency_quantity_rows |
строки «USD», «Вал.», «Кол.» под контрагентом (CURRENCY/QUANTITY) |
s05_text_numbers |
суммы текстом: «1 234 567,89», «(1 234,00)», «—», неразрывные и узкие пробелы |
s06_two_osv_and_other_sheet |
два листа ОСВ и посторонний лист «Справка» |
s07_no_opening_collapsed_closing |
нет группы «Сальдо на начало»; свёрнутое сальдо на конец одной колонкой (в т. ч. R-21) |
s08_extra_kpp_column |
колонка «КПП» между «ИНН» и суммами → extra |
s09_subaccount_names |
названия субсчетов в строке счёта, буквенный субсчёт |
s10_broken_sum |
испорченная сумма → needs_check с номерами строк |
s11_header_repeat |
заголовок таблицы повторяется внутри данных (печать по страницам) |
s12_statement_and_osv |
лист ББ и лист ОСВ в одной книге: с Среза 2b — два документа (ОСВ, затем ББ без колонки кодов → needs_check) |
s13_no_outline_indent (.xlsb) |
та же ведомость, что s02, в xlsb |
s14_statement_forms |
три формы ББ/ОФР, каждая опознаётся своим признаком (с 2b — документы BALANCE/INCOME без колонки кодов, needs_check) |
s15_group_title_synonyms |
названия групп сумм «Входящее/Начальное/Конечное/Исходящее сальдо» |
s16_header_synonyms |
шапка без организации, период «2024», группировки OTHER, «Детализация: …» |
s17–s19 — извлечение ИНН (из текста названия, из строки над названием, «ИНН/КПП» в одной ячейке; OQ-100, OQ-130);
s20–s27 — по одной на раскладку строки ИНН рядом с наименованием (над / под × в дереве / не в дереве × с суммами / без;
ИНН с верной контрольной суммой), s28 — строка ИНН с неверной контрольной суммой (остаётся строкой, needs_check);
правило — 05-domain-rules.md §1.3, OQ-163.
s33–s36 — строки-показатели (05-domain-rules.md §1.3, AURORA-1613, AURORA-1661, tabular-parser#58):
s33_indicator_column_bu_nu — счёт 02, колонка «Показатели» БУ/НУ, шапка без «Выводимые данные», «Итого» по БУ и НУ;
s34_indicator_column_qty_val_diff — метки «Вал.», «Кол.», «ПР», «ВР» и неизвестная «Ед.»: показатели вне сверки родителя;
s35_currency_slices — пары «Валюта USD/EUR» (рубли) и «В валюте» (показатель CURRENCY) на одном уровне;
s36_no_data_type_header — шапка без вида данных и без колонки «Показатели»: строки BU по умолчанию с предупреждением.
Формы ББ/ОФР из Excel — подраздел 4б. s14–s16 добавлены тестом покрытия словарей: каждая запись rules/*.yaml обязана сработать на реальных или
синтетических файлах.
xlsb рукописный. s13 собран не Excel и не LibreOffice (их нет на машине разработки), а минимальным писателем
BIFF12 tabular-parser/api/tests/synthetic/xlsb_writer.py: он пишет только то, что читает pyxlsb. Файл читается
парсером, но совместимость с xlsb, сохранённым Excel (стили, другая раскладка записей), не проверена; нужен реальный
файл из Excel (OQ-102). Инструкция замены — в README fixtures/osv/synthetic/.
Golden-снимки. Для каждого файла fixtures/osv/** (включая синтетику) в fixtures/golden/expected_osv_parse/ лежит
результат разбора (113 файлов: 94 реальных и 19 синтетических s01–s19): файл результата контракта v1.2 (v1.1 — до Среза 2b) без job_id, file_id,
service.version, metrics.duration_ms. Снимок — регрессия, не оракул: он фиксирует, что парсер выдаёт сейчас.
Обновление — только make golden-update в tabular-parser с просмотром diff и отдельным коммитом в fixtures;
make golden-check (код возврата 1 при расхождении) — без записи. Оракулы корректности — property-тест
(done, контрольные суммы, корень = счёт шапки, период распознан, разбор < 5 с) и ручная сверка «Итого» с ячейками
файла, прочитанными независимо от парсера (АО РБ 60 за 1 кв. 2025, Счастливочная 62 за 3 кв. 2024 xls, ОСВ по субсчёту
58.03).