Refs #26 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EAKRDNzXtRrwmWz9z6PZu3
59 lines
6.3 KiB
Markdown
59 lines
6.3 KiB
Markdown
# 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.
|
||
- Признак продолжения страницы в контракте, нормализация единиц, словарь имён строк — после появления потребителя/файла.
|