Спеки documents-api и statement-checks обновлены дельтой change'а; change перенесён в openspec/changes/archive/2026-10-09-statement-template-lines/. Реализация — PR #81. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
7.8 KiB
Proposal: полный состав строк ББ/ОФР на экране проверки
Срез: доработка Среза 3b (../docs/context/09-delivery-plan.md) — экран проверки форм ББ/ОФР.
Репозитории: arm-core (этот change, issue RSHB/arm-core#80); arm-web — PR в test (раскладка, правка по коду строки);
../docs — bounded-PR: правило в 05-domain-rules.md §7 «Ядро» и §11/§12, OQ-150 в 07-open-questions.md, гайды
dev/frontend-api-guide.md, dev/qa-guide.md. Follow-up: словарь fsbu4 в scan-gateway (OQ-150 для нормализатора).
DBML и контракты обмена не меняются, миграций нет.
Why
Ядро хранит только строки формы, пришедшие от OCR или разбора Excel (financial_statement_line), и правит только
существующую ячейку (PATCH …/statement по line_id + column_id, иначе 422 UNKNOWN_CELL). Если источник строку
потерял — пример: «Русский бисквит», 1 кв. 2025, ИС склеила «1500\n1700» и строка 1700 пропала (до OQ-156), — аналитик
не может её заполнить, хотя форма бухгалтерской отчётности обязана её содержать. То же с ячейкой, которой нет у
существующей строки в какой-то колонке. Решение владельца 09.10.2026: на экране проверки всегда показывать все строки
формы своей редакции и давать их заполнять.
What Changes
- Справочник строк форм по редакциям —
api/rules/statement_lines.yaml(данные, не код): редакции66n(≤ 2024-12-31) иfsbu4(с 2025-01-01), для каждой — ББ и ОФР: коды в порядке формы и наименования. Источник обеих редакций — шаблоны банка../fixtures/statements-xlsx/templates/(«ББ/ОФР до 01.01.2025», «ББ/ОФР после 01.01.2025») с исправленными склейками наименований и заголовков разделов (решение владельца 09.10.2026: данные OQ-150 — из шаблонов). GET /documents/{id}/statementдостраивает форму. К строкам из БД добавляются строки справочника редакцииedition, которых в форме нет, и недостающие ячейки у существующих строк по всем колонкам формы. У достроенной строкиid = null,origin = "template", наименование — из справочника; у достроенной ячейкиid = null,amount = null,is_recognized = null,is_modified = false. Новое полеLineOut.origin:source— строка пришла из источника,template— строка из справочника (достроенная или созданная правкой аналитика). Безedition(нет даты периода) строки не достраиваются, недостающие ячейки — достраиваются.PATCH …/statementсоздаёт строку и ячейку при первой правке. Элементvalues[]адресует ячейку либоline_id+column_id(как сейчас; если у строки нет ячейки в этой колонке — ячейка создаётся), либоline_code+column_id— для строки справочника редакции, которой нет в форме: ядро создаётfinancial_statement_line(line_code_original_value = NULL— признак «не из источника», наименование из справочника) иfinancial_statement_value(original_amount = NULL,is_recognized = NULL,confidence = NULL). Дальше — как любая правка:is_modified,modified_by/at, одинaudit_event(RECOGNIZED_DATA_EDIT)сbefore = null, сброс акцепта, пересчёт статуса.- Пустая шаблонная строка не влияет на статус и проверки (решение владельца 09.10.2026). Достроенные строки в БД
не пишутся и в проверки §7,
values_ok(D-6) и автоподтверждение не попадают. Созданная правкой строка (origin = template) участвует в проверках §7, только пока у неё есть хотя бы одна непустая сумма; очищенная до пустоты — снова как будто её нет.
Таблицы DBML v5.17: financial_statement_line (line_code_original_value NULL — признак строки не из источника),
financial_statement_value, financial_statement_meta (сброс акцепта), document (статус), audit_event. Новых полей
нет.
Non-goals
- Запись достроенных строк в БД при маппинге и миграция данных — нет: БД хранит то, что пришло (первичка).
- Обязательность заполнения: пустая строка не блокирует подтверждение и автоподтверждение; полноту ловят проверки §7.
- Заполнение
fsbu4в словаре scan-gateway (нормализатор, golden-эталоны) — follow-up issue. - Строки без кода (OQ-36, OQ-141, OQ-149), пятизначные подстроки в справочнике, отдельные формы для упрощённой отчётности малых предприятий — нет.
- Порядок строк в ответе — по коду, как сейчас; раскладка по разделам — на фронте (
formLayout.ts). - Удаление созданной строки аналитиком — нет (очистка суммы до
nullвозвращает её в состояние «пустая шаблонная»). - Правка кода и наименования строки — нет (решение Среза 3b).
Impact
- Код:
domain/statement_lines.py(новый: загрузка справочника по редакциям), достройка формы —_lines_outвschemas/statements.py,api/rules/statement_lines.yaml(новый),schemas/statements.py(LineOut.id/ValueOut.idnullable,LineOut.origin,CellPatchсline_id | line_code),services/statements.py(build_out,_apply_cells),repositories/statements.py(создание строки/ячейки, исключение пустых шаблонных строк вstatement_amounts). - Спеки (дельты):
documents-api(«Форма ББ/ОФР для экрана проверки», «Правка формы»),statement-checks(«Соотношения §7 по колонкам»). - Фронт arm-web: ключ шаблонной строки, отправка
line_code, отсутствие подсветки «требует проверки» у пустых достроенных ячеек; выделение цветом строк «БАЛАНС» (1600 актив, 1700 пассив) — просьба владельца 09.10.2026.