# Proposal: Срез 2b (сквозное) — контракт результата v1.2, §12 ББ/ОФР из Excel, OQ **Срез:** 2, подсрез 2b «парсер ББ/ОФР из Excel» (решение владельца 06.10.2026: только парсер и контракт; маппинг в ядро — Срез 3). **Репозиторий:** arm-ka-docs. **Issue:** RSHB/arm-ka-docs#26. **Дочерний change:** `tabular-parser/openspec/changes/slice-2b-statement-parser` (RSHB/arm-tabular-parser#14). Golden и синтетика — arm-ka-fixtures (отдельный PR). Копии схемы v1.2 — bounded-PR в arm-core и arm-scan-gateway. ## Why §12 написан до появления реальных файлов. Пакет ДКБ 06.10.2026 принёс 15 форм в трёх раскладках (постраничные xls 1С, многолистовая книга ФСБУ 4/2023, `TDSheet`) и показал пять решений, которых в §12 нет: страницы одной формы в разных файлах, единицы «тыс. руб.» против значений с копейками, пятизначные подстроки «в том числе», соотношения §7 как данные, формы без колонки кодов. Контракту v1.1 не хватает структурного места для результатов проверок §7 и типа «расшифровка» (DBML `document_type.DISCLOSURE`), а ОСВ со скользящим периодом (OQ-131) — границ периода. Всё это MINOR. ## What Changes - **Контракт v1.2** (`docs/contracts/recognition-result.schema.json`): `statementDocument.document_type` + `DISCLOSURE`; необязательный `statementDocument.checks` {`relations_failed[]`, `soft_relations_failed[]` — объекты `{column_index, relation, expected, actual}`; `duplicate_line_codes[]`}; необязательные `osvDocument.header.period_start`, `period_end` (date|null), `is_from_year_start` (boolean|null). `title`/`description` `schema_version` — «1.2». Примеры: `result-statement-minimal.json` дополняется `checks`; новый `result-statement-excel.json` (книга с `BALANCE` из нескольких листов, `INCOME`, `DISCLOSURE`); `result-osv-minimal.json` — новые поля шапки. Сообщение и запрос не меняются. Спека `recognition-contract`: «Файл результата» — v1.2. - **`05-domain-rules.md` §12**: решения владельца 06.10.2026 (вопросы 2–6 brainstorming) и уточнения по факту файлов: классификация листов и продолжений, титул «Бухгалтерская отчетность», склейка листов внутри книги и запрет склейки между файлами (страница без шапки → `needs_check`), единицы как есть + предупреждение, пятизначные подстроки как строки, §7 по четырёхзначным с допуском ±1 и двойным расчётом знаков, соотношения — данные `statement_checks.yaml`, отказ от запасного пути по именам в первой очереди, критерий `ok` документа, порядок документов книги. §7 — пометка, какие соотношения парсер считает жёсткими, какие мягкими (`ASSUMPTION(OQ-12)`). - **`06-test-data.md`**: раздел по `statements-xlsx/**` (раскладки, манифест ожиданий, golden `expected_statement_parse/`, синтетика `st01…st05`). - **`03-architecture.md`**: версия контракта 1.2, `BookParser` как реализация по умолчанию tabular-parser, порядок раскатки MINOR (потребители раньше производителя). - **`09-delivery-plan.md`**: Срез 2b — статус и объём по решению владельца; маппинг форм — Срез 3 (без изменений). - **`07-open-questions.md`**: новые OQ — единицы «тыс. руб.» против значений с копейками в 1С-выгрузках (кто и где приводит); форма без колонки кодов (словарь имён из шаблонов); страница-продолжение в отдельном файле (склейка в ядре, признак `is_continuation` в контракте); строка без кода с суммами в ОФР ФСБУ 4/2023; образец ФСБУ с «АКТИВ» и 1110 в одной строке. Статус OQ-131: границы периода в контракте v1.2, заполнение — парсер (#11 / 2b). - **`docs/dev/qa-guide.md` §6.7**: абзац про прогон парсера на формах. ## Capabilities ### Modified Capabilities - `recognition-contract`: «Файл результата» — v1.2 с `DISCLOSURE`, `statementDocument.checks`, границами периода ОСВ; «Версионирование контракта» — без изменений (MINOR по правилу). ## Impact - Контракт: MINOR, обратно совместимо; копии обновляются в `tabular-parser` (дочерний change), `arm-core` и `scan-gateway` (bounded-PR: схема, примеры, pydantic-модели; логика не меняется — ядро по-прежнему маппит только `osvDocument`). Порядок merge: docs → arm-core, scan-gateway → tabular-parser → fixtures. - Таблицы DBML: нет (`DISCLOSURE` уже есть в `document_type`). Правила: §12 (решения владельца), §7 (пометки). ## Non-goals - Маппинг `statementDocument` в ядре и экран проверки форм — Срез 3. - Признак продолжения страницы в контракте, нормализация единиц, словарь имён строк — после появления потребителя/файла.