Andrey Epifancev 248f8b0c74 openspec(#116): спека по ревью K-1…K-25 и решениям владельца Р-20…Р-22; решения S-26…S-52
- design.md: Р-20 (законные повторы кода в перечне, синонимы в словаре имён), Р-21 (мягкое соотношение, сошедшееся
  точно, подтверждает неуверенное значение), Р-22 (S-1…S-25 приняты с оговорками; отмечены утверждённые владельцем);
  решения при доработке S-26…S-52 с ценой ошибки
- statement-normalization: отдельное требование sync-statements (пути, VERSION, коды 0 / 10 / 20 / 2), словарь
  единиц и ОКЕИ, ref Excel с кавычками, нумерация с двойниками и пропуском, номер колонки, содержимое строки, столбец
  кодов у DISCLOSURE, упрощённый 2400 мягкий, Р-20 / Р-21 со сценариями, обе редакции перечня, интерфейс функции
  статуса, TABLE_PARSE_ERROR / SHEET_OTHER уровня файла
- arm-core: признак строки правки row_index IS NULL, header_source, формы без checks (1.x и миграция) — §7 ядром в
  document_issue, codes / column_index, RESULT_STATUS_INCONSISTENT, синонимы и «итого по разделу», PATCH
  organization_name / confirmed: false / подтверждение даты, LINE_CODE_TAKEN, акцепт и подтверждения, LINES_UNRESOLVED
  с текстом, «того же периода», откат миграции
- recognition-contract: MODIFIED «Копия контракта … идентична» — сверка по MAJOR копии, *.v1.schema.json на окне;
  1.x — MAPPING_WARNING / LEGACY_WARNING; okei, column_index, пустые массивы DISCLOSURE, статус ОСВ одной формулировкой
- quality-checks (новая дельта): make check охватывает копию arm_statements, make check-full — statements-check
- tabular-recognition-service: манифест statements_manifest.yaml — failed_relations страниц 2 баланса (K-25)
- scan-gateway, arm-web: TABLE_PARSE_ERROR файла; подсказки шапки, снятие подтверждений, LINE_CODE_TAKEN
- proposal: шаг 0 выкладки, перечни кодов, ожидания на реальных сканах, Impact

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

5.8 KiB
Raw Blame History

ADDED Requirements

Requirement: Раскладка строк формы со статусами

Экран проверки формы ББ/ОФР ([41]) SHALL сохранять раскладку «как на бумаге» (Р-14): разделы, внутри — строки ok по возрастанию кода, несколько строк одного кода — в порядке файла (row_index), шаблонные строки на своих местах, пятизначные подстроки под родителем. Строка unreadable / missing SHALL стоять под ближайшей предыдущей по row_index строкой, размещённой по коду, а без такой — в начале первого раздела; она подсвечена целиком, в ячейке кода серым — сырой текст line_code_text с подсказкой. Строки detail SHALL быть скрыты под переключателем «Показать расшифровки (N)» и показываться под родителем (parent_row_index) с отступом. Экран показывает справочное имя строки (reference_name), файловое (line_name) — рядом, если отличается. Переключателя «как в файле» нет.

Scenario: Код-мусор на своём месте

  • WHEN строка unreadable «ИЧ,250» в файле стоит после строки 1240
  • THEN на экране она стоит сразу под 1240, подсвечена, в ячейке кода серым «ИЧ,250»

Scenario: Расшифровки скрыты

  • WHEN у формы три строки detail
  • THEN по умолчанию их не видно, переключатель «Показать расшифровки (3)»; включённый показывает их под родителями

Requirement: Подсветка и предупреждения у места

Экран SHALL подсвечивать ячейки только по needs_review (в подсказке — text и уверенность), строки — по needs_review строки, поля шапки — по needs_review_fields (в подсказке у поля — header.source.<поле>: сырой текст и уверенность). Предупреждения и нарушения (issues, checks) SHALL показываться у места: у строк (line_ids), ячеек (line_ids + column_id), полей шапки (field) или у документа (в том числе запись с column_index без column_id — столбец вне колонок формы); уровень error отличается от info. Подсветки по confidence < 100 и is_recognized = false напрямую нет.

Scenario: Догадка подтверждена проверкой

  • WHEN значение is_recognized = false, needs_review = false
  • THEN ячейка не подсвечена; в подсказке сырой текст и уверенность

Requirement: Правка строк, колонок и подтверждение в режиме «Редактировать»

В режиме «Редактировать» экран SHALL давать: у unreadable / missing — поле ввода кода с подсказкой из справочника (код → справочное имя) и пункт меню строки «Это расшифровка»; у detail — «Назначить код»; у строки ok — «Сделать расшифровкой», смену кода и «Подтвердить код» у строки с needs_review; подтверждение ячейки без правки; ввод даты у колонки без даты (period_kind = none) или с предупреждением о дате; снятие подтверждения ячейки и кода (confirmed: false); правка наименования организации в шапке; подтверждение даты отчёта из needs_review_fields без изменения (тем же значением). «Сохранить» отправляет один PATCH …/statement (header, values, columns, lines). Кнопка «Подтвердить данные» при строках unreadable / missing с суммами SHALL быть отключена с подсказкой «Разберите строки без кода: N» и переходом к первой такой строке; ответ сервера 409 LINES_UNRESOLVED показывается тем же текстом, 409 DUPLICATE_FORM — со ссылкой на подтверждённую форму, 409 LINE_CODE_TAKEN — у поля кода. Кнопка «Подтвердить данные» учитывает строки unreadable / missing с суммой или нераспознанным текстом в ячейках.

Scenario: Назначить код

  • WHEN аналитик вводит 1250 в ячейку кода строки unreadable и сохраняет
  • THEN уходит PATCH с lines: [{line_id, line_code: "1250"}]; после ответа строка встаёт на место 1250

Scenario: Подтверждение заблокировано

  • WHEN у формы две строки missing с суммами
  • THEN «Подтвердить данные» отключена, подсказка «Разберите строки без кода: 2», клик по подсказке ведёт к первой