Issue: RSHB/arm-ka-docs#9 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
47 lines
4.0 KiB
Markdown
47 lines
4.0 KiB
Markdown
# Proposal: Срез 2a (сквозное) — контракт результата v1.1, уточнения §1, фикстуры, OQ
|
||
|
||
**Срез:** 2, подсрез 2a «парсер ОСВ» (решение владельца 05.10.2026: сначала только парсер, без ББ/ОФР из Excel, ядра и UI).
|
||
**Репозиторий:** arm-ka-docs. **Issue:** RSHB/arm-ka-docs#9. **Дочерний change:** `tabular-parser/openspec/changes/slice-2a-osv-parser`
|
||
(RSHB/arm-tabular-parser#5). Фикстуры: RSHB/arm-ka-fixtures#4.
|
||
|
||
## Why
|
||
|
||
§1.2 требует «неизвестные колонки сохранять в `extra`, не терять», а в контракте v1.0 у строки ОСВ такого поля нет —
|
||
парсер не может выполнить правило без MINOR-версии контракта. Кроме того, после реального прогона на 66 файлах §1 и
|
||
06-test-data нужно привести к факту, а план срезов — к принятой декомпозиции Среза 2.
|
||
|
||
## What Changes
|
||
|
||
- **Контракт v1.1** (`docs/contracts/recognition-result.schema.json`): `osvDocument.rows[].extra` — объект
|
||
«заголовок колонки → текст ячейки или null» для колонок внутри таблицы, не сопоставленных с суммами и ИНН; `title`
|
||
и `description` `schema_version` — «1.1»; пример `examples/result-osv-minimal.json` дополняется `extra`; новый пример
|
||
`examples/result-osv-needs-check.json` (нарушение §1.4). Сообщение и запрос не меняются. Спека `recognition-contract`:
|
||
требование «Файл результата» — v1.1.
|
||
- **`05-domain-rules.md` §1**: уточнения по факту реализации (статусы и коды D-6, формула «стратегия иерархии в
|
||
`metrics.warnings` как `hierarchy=<имя>`», TOTAL в `rows`, лимиты парсера, словари по именам файлов), §1.5 — пометка
|
||
`ASSUMPTION(OQ-02)`.
|
||
- **`06-test-data.md`**: синтетика `osv/synthetic/` (перечень файлов и что проверяет каждый), golden `expected_osv_parse/`
|
||
(формат снимка, процесс обновления), xlsb вручную.
|
||
- **`09-delivery-plan.md`**: Срез 2 разбит на 2a (парсер ОСВ), 2b (ББ/ОФР из Excel), 2c (загрузка и маппинг в ядре),
|
||
2d (UI «Первичные документы»); `08-source-docs-index.md`/README без изменений.
|
||
- **`07-open-questions.md`**: новые OQ (коды валют для строк CURRENCY; поведение при нескольких ОСВ одного счёта в одной
|
||
книге), статус OQ-81 (закрыт хелпером), OQ-45/OQ-01/OQ-02 — пометка «допущение парсера, решение в 2c».
|
||
|
||
## Capabilities
|
||
|
||
### Modified Capabilities
|
||
- `recognition-contract`: «Файл результата» — v1.1 с `rows[].extra`; «Версионирование контракта» — без изменений
|
||
(MINOR по правилу).
|
||
|
||
## Impact
|
||
|
||
- Контракт: MINOR, обратно совместимо; копии обновляются в `tabular-parser` (в дочернем change) и `arm-core` (отдельный
|
||
bounded-PR: только файл схемы и `OsvRow.extra`, логики нет). Порядок merge: docs → tabular-parser → arm-core.
|
||
- Таблицы DBML: нет. Правила: §1 (уточнения без смены смысла), §1.5 (допущение).
|
||
|
||
## Non-goals
|
||
|
||
- §12 (ББ/ОФР из Excel) и `statementDocument` — не трогаются.
|
||
- Изменение семантики `is_cumulative`, `TOTAL`, `NU` в ядре — подсрез 2c (OQ-02, OQ-01, OQ-45).
|
||
- `audit_action` для статусов задания (OQ-55), дедуп по attempt (OQ-73).
|