arm-ka-docs/context/06-test-data.md
Andrey Epifancev 0c04127aec docs: OpenSpec change slice-0-skeleton — сквозной скелет Среза 0
openspec init (config с контекстом docs-репозитория) и change slice-0-skeleton: proposal, design
(11 решений без обсуждения, открытые вопросы к человеку), спеки recognition-contract,
dev-environment, ci-template, tasks в порядке зависимостей между репозиториями. 06-test-data.md §6:
справочники продукта — seed arm-core, не фикстуры. 09-delivery-plan.md: Срез 0 по факту (change'и,
compose в docs/dev, контракт копией без общего пакета, seed).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 02:44:14 +04:00

161 lines
19 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.

# 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 | — |
(17 файлов Счастливочной за 2025 и 2024 г. — 62/67/66/58/76 — лежат в Project claude.ai, но в эту сессию не попали
из-за лимита доставки; они есть у пользователя.)
## 3. Что показали реальные файлы (требования к парсеру)
Наблюдения, которых **нет в ТЗ**, но которые ломают наивный парсер:
1. **Шапка везде вариант 1** («Оборотно-сальдовая ведомость по счету NN за <период>»), организация — в r1, параметры —
r7, таблица с r9. Но заголовок таблицы может быть 2 или 3 строки (`Счет / Контрагенты / Договоры`; `Счет /
Подразделение / Контрагенты ИНН`).
2. **Позиции колонок сумм плавают**: у АО РБ Дт-начало в E, Кт-начало в H, обороты в J/L, конец в O/Q; у Счастливочной
— G/J, K/N, Q/S (2024, xls) или H/J, L/O, Q/S. Колонка ИНН — E (только у Счастливочной). Определять по тексту заголовка.
3. **Мусор правее таблицы**: в xls Счастливочной 62 за 3 кв. 2024 в колонках T/U стоят числа; в xlsx АО РБ 62 за 2024–2025
у контрагентских строк встречаются «хвостовые» ячейки с дробями вроде `8.577e+00` или `8.76e-06` (остатки формул
аналитика). Границу таблицы задаёт заголовок; всё правее последней «Кредит» — игнорировать.
4. **Уровни группировки** (outline level): 0 — счёт верхнего уровня и «Итого»; 1 — субсчёт; дальше — субконто по
схеме. У АО РБ ОСВ 60: 60 (0) → 60.01 (1) → контрагент (2); ОСВ 66: 66 → 66.01 → контрагент (2) → договор (3).
У Счастливочной ОСВ 62: 62 → 62.01 → подразделение «БП Аренда» (2) → контрагент с ИНН (3).
5. **Строка «Итого»** — последняя, level 0, равна строке счёта верхнего уровня.
6. **Пустые ячейки** = нет значения (NULL), не ноль. Значения — числа (`#,##0.00`), не текст.
7. **ОСВ по субсчёту** (`сч 583_3 кв 2024.xlsx`: «по счету 58.03») — `osv_account_code = '58.03'`, `account_root = '58'`;
чек-лист по счёту 58 этим файлом не закрывается полностью — решить правило [открыто].
8. **Квартальные 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 г.» — годовые.
Проверять по данным, не только по тексту.
9. **Валюта**: `Валюта БУ, НУ: RUB` или `руб.` — равнозначно. Строк Вал./Кол. в этом наборе нет, но ТЗ их описывает
(ОСВ 60.32 в у. е.) — нужен синтетический тест.
10. **Названия субсчетов** в строках счёта могут присутствовать («60.01, Расчеты с поставщиками») или нет — в этом
наборе нет; поддержать оба.
11. **Контрагенты-физлица** и ИП («Абрамова Татьяна Викторовна (Перевозчик)», «Аверина Е.И. ИП», «Ведомость в счет
з/платы») — не ЮЛ; резолв даёт NULL, тип «Внешний». Суффиксы в скобках — часть имени.
12. **xls (BIFF8)** читается `xlrd` (`formatting_info=True` для outline level через `rowinfo_map`); **xlsx** — `openpyxl`
(не `read_only`, иначе нет `row_dimensions[].outline_level`). XLSB — `pyxlsb` (в наборе нет; ТЗ требует).
13. Размеры: до ~1000 строк, до 330 КБ; 2280 merged-диапазонов в файле на 677 строк — не падать на merged.
## 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`).
## 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).
## 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/ header-variant-2.xlsx, currency-rows.xlsx, xlsb-sample.xlsb, broken-header.xlsx
statements/
rb/ schastl/ gir-bo/ # pdf
statements-xlsx/ # ББ/ОФР в Excel (§12): лист «Отчетность» из Анализ*.xlsx,
# рекомендуемые формы банка, выгрузки 1С — собрать у аналитиков
ocr/
aep_N.pdf + aep_N.json # пары вход/выход ИС Сканирование
golden/
Консолидация_Группа РБ.xlsx # эталон КФО по датам
expected_osv_parse/*.json # ожидаемый результат парсера (зафиксировать после ревью)
directories/
legal_entities.csv, company_groups.csv # тестовые справочники группы «Русский бисквит» (Срез 1)
```
Справочники **продукта** — план счетов, правила элиминации, права и роли, состав обязательных документов — не фикстуры,
а seed ядра: `arm-core/api/seed/` (Срез 0, change `slice-0-skeleton`). Здесь остаются только тестовые данные группы.
Полный план счетов 1С из бандла макета не передан — seed строится на Плане счетов 94н и типовых субсчетах 1С (OQ-47).
Первый прогон парсера на `osv/**` сохранить как `expected_osv_parse/*.json` после ручной сверки итогов со строкой «Итого»
— дальше это regression-набор.