Andrey Epifancev 90ea429642 docs(#116): proposal и дельты спек единой нормализации ББ/ОФР
- proposal: зачем, что меняется, порядок выкладки «сначала ядро», non-goals
- statement-normalization: шаги 1–8 общего кода arm_statements (кандидат, раскладка, статусы строк,
  значения, §7, needs_review, структурная проверка кода, уровни предупреждений, статус)
- recognition-contract: файл результата и конверт v2.0, переход 1.x → 2.0
- tabular-recognition-service, scan-gateway: адаптеры шага 1 и что уходит из сервисов
- arm-core: хранение v2.0, агрегат по коду, document_issue, RECOGNIZED, PATCH lines/columns/confirmed,
  порядок 409, миграция v5.19, crm_id ГСК/ГСЗ
- arm-web: экран проверки формы по новым полям
- design.md: автозамена между файлами — §9.5 п. 3, а не §12 п. 3

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 00:40:50 +04:00

5.0 KiB
Raw Blame History

ADDED Requirements

Requirement: Адаптер Excel шага 1

tabular-parser SHALL оставить у себя чтение книги (лимиты PARSE_MAX_BYTES, PARSE_TIMEOUT_SECONDS, формат по сигнатуре, лимиты zip и объединённых ячеек, UNREADABLE), классификацию листов (ОСВ — отдельный путь; форма; продолжение; прочее) и адаптер «блок формы на листе → FormCandidate» общего кода; шаги 2–8 по формам SHALL выполняться копией пакета arm_statements. Адаптер SHALL: выделять блоки форм на листе по заголовку или ОКУД (без кодов между ними блоки сливаются, заголовок после кодов — новая форма); собирать шапку каждого блока в его границах (организация, ИНН без ИНН аудитора, ОКПО, ОКОПФ, ОКФС, единицы, дата, адрес) как Cell с confidence = 100; заполнять у каждой ячейки text по числовому формату (tp#42) и value, ref = <лист>!<A1>; дописывать листы-продолжения в сетку открытой формы до раскладки (маркер «Форма … с.2» или позиция листа; проверки типа, диапазона кодов и, при трёх и более кодах, числа колонок — как join_blocker), записывая границы листов в segment_breaks. Несовпадение формата с file_type — предупреждение файла FILE_TYPE_MISMATCH (info).

Scenario: Книга ББ + ОФР

  • WHEN книга содержит лист «Баланс» (ОКУД 0710001), лист «Баланс (2)» с маркером «Форма 0710001 с.2» и лист «ОФР»
  • THEN адаптер выдаёт два кандидата: BALANCE с locator = sheet:Баланс,Баланс (2) и одной сеткой из двух листов (segment_breaks — первая строка второго листа) и INCOME с locator = sheet:ОФР

Scenario: Ссылки ячеек

  • WHEN код строки стоит в ячейке C27 листа «Баланс»
  • THEN ref строки — Баланс!C27

Requirement: Строки без кода и неизвестные колонки в Excel

tabular-parser SHALL отдавать строки без кода с содержимым со статусами detail / missing / unreadable (Р-8; ранее не отдавались, OQ-36 / OQ-141), числовые колонки с нераспознанной подписью — колонкой без даты и error (ранее пропускались), повторы кодов — всеми строками без duplicate_line_codes.

Scenario: НПЗ «Реализация иного имущества»

  • WHEN в ОФР ФСБУ 4/2023 строка «Реализация иного имущества…» без кода с суммами стоит под строкой 2340
  • THEN в результате строка detail с parent_ref строки 2340; ранее она отбрасывалась со счётчиком

Requirement: Путь ОСВ в контракте v2.0

У osvDocument tabular-parser SHALL выдавать status (done, когда ведомость разобрана, иначе needs_check — по прежним условиям §1.6 листа) и warnings[] — прежние предупреждения листа структурами с severity = info и кодом с префиксом OSV_; строк вида sheet=<имя> <текст> в metrics.warnings больше нет. Остальной разбор ОСВ не меняется.

Scenario: Предупреждение ОСВ

  • WHEN на листе ОСВ есть строка без родителя
  • THEN у документа ОСВ предупреждение {code: "OSV_…", severity: "info", message}, статус документа по §1.6

Requirement: Статус книги

Статус конверта tabular-parser SHALL вычисляться по общему правилу: done ⇔ все документы done ∧ нет предупреждений файла уровня error; книга без листов ОСВ и форм — error INVALID_DOCUMENT. Порядок документов — сначала ОСВ в порядке листов, затем формы.

Scenario: Книга только из пояснений

  • WHEN книга содержит только листы пояснений (0710003, «Пояснения»)
  • THEN документы DISCLOSURE со статусом done, конверт done