Andrey Epifancev c2005a4699 docs: финальное ревью Среза 2a — §1 (лимиты чтения, ИНН, ACCOUNT_RE, риски R-21), OQ-106…OQ-109
- 05-domain-rules §1.0 п. 1: признак ОСВ в первых 30 строках листа; п. 4, §1.3: ИНН по значениям без дополнения
  нулём, дополнение при извлечении (R-24); ACCOUNT_RE с re.ASCII | re.DOTALL (M-1); §1.4: остаточные риски R-21
  (RR-1…RR-4, слепые зоны); §1.6: лимиты чтения (R-23), логирование.
- 06-test-data §3 п. 17: ИНН в тексте строки — ОСВ 76 Счастливочной за 1–3 кв. 2024 (6 + 7 + 7 строк).
- 07-open-questions: OQ-106 (Итого = первый корень), OQ-107 (hierarchy=sums), OQ-108 (defusedxml, лимиты чтения),
  OQ-109 (размер объекта S3 до скачивания); OQ-105 ссылается на риски §1.4.
- OQ-81 «частично закрыт» в 09-delivery-plan, tasks.md и proposal.md change.
- contracts/examples/result-osv-needs-check.json — как пишет парсер (копия tabular-parser байт в байт).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-05 16:32:52 +04:00

4.1 KiB
Raw Blame History

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 (частично закрыт: в tabular-parser ARM_KA_FIXTURES поддержан хелпером, scan-gateway — follow-up), 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).