Ссылки README и CLAUDE.md переведены на архив. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
8.0 KiB
Proposal: Срез 3b — формы ББ/ОФР в ядре и API до сводной ОСВ
Срез: 3b — вторая половина Среза 3 «ББ/ОФР: scan-gateway, маппинг форм, логические проверки, подтверждение
документа» (../docs/context/09-delivery-plan.md). Репозиторий: arm-core. Issue: RSHB/arm-core#36.
Соседние: Срез 3a (scan-gateway, statementDocument из OCR, закрыт 07.10.2026), Срез 2b (tabular-parser, формы из
Excel, контракт v1.2). Документация — bounded-PR в docs (§7, §9.5, OQ, 03-architecture.md, 09-delivery-plan.md), без
сквозного change: контракт и DBML не меняются. Объём по решению владельца 07.10.2026: весь API пути пользователя до
сводной ОСВ включительно; UI делает другой разработчик по этим спекам.
Why
Оба сервиса распознавания отдают формы ББ/ОФР (statementDocument контракта v1.2), а ядро их игнорирует: документы
BALANCE/INCOME не создаются, financial_statement_* пусты, а файл, где есть только формы (выгрузка ББ/ОФР из 1С,
скан PDF), падает в ERROR с «в результате нет документов ОСВ». Поэтому столбцы «Бух. баланс» и «ОФР» чек-листа никогда
не закрываются, экрана «Проверка распознавания» нечем кормить, а консолидация не может стартовать по правилам
required_document_rule. Сверка пользовательского пути (10-user-journey.md, пути 1–2 и шаг 3.1) с API нашла и
мелкие дыры: нет отдачи исходного файла, комментариев к документу, имён пользователей для не-админов, числа документов
у ЮЛ и CSV чек-листа.
What Changes
- Маппинг форм (
osv-result-mapping): в той же транзакцииmap_fileпосле листов ОСВ каждыйstatementDocumentBALANCE/INCOMEстановитсяdocument+financial_statement_meta+financial_statement_column+financial_statement_line+financial_statement_value(значение на каждую пару «строка × колонка»); период — по дате отчёта, без неё — по самой поздней дате колонок;counterparty_check— как у ОСВ;DISCLOSURE/OTHER— один документ на тип на файл без данных. Файл без ОСВ, но с формами — не ошибка; ошибка — только пустой результат. - Проверки §7 (новая спека
statement-checks): чистые функцииdomain/statement_checks.py— перенос проверок tabular-parser (допуск ±1, округление 0,001 %,abs_terms, подстроки) со словарёмapi/rules/statement_checks.yaml; межформенная1370 − 1370(начало года) = 2400— мягкая. Результат не хранится; акцепт непройденных жёстких проверок с комментарием —checks_accepted_*. - API формы (
documents-api):GET /documents/{id}/statement(шапка с исходниками и признаками правки, редакция формы, колонки, строки со значениями, проверки),PATCH /documents/{id}/statement(значения и ИНН / дата отчёта / единицы; исходники сохраняются,audit_event(RECOGNIZED_DATA_EDIT), пересчёт проверок и статуса, сброс акцепта),POST /documents/{id}/statement/checks/accept. Подтверждённая форма — только для чтения (решение владельца). - Подтверждение ББ/ОФР: дополнительно требует пройденных или акцептованных жёстких проверок и определённого периода;
пишет
financial_statement_meta.reviewed_by/at. Привязка к версиям и переходы статуса версии — без изменений. - Мелкие дыры:
GET /files/{id}/content(поток исходного файла из S3 через ядро), комментарииPOST/GET /documents/{id}/comments(таблицаcomment) иcomments_countв карточке документа,GET /users/brief?ids=для любого аутентифицированного пользователя,documents_countв списке ЮЛ,GET …/checklist?format=csv.
Таблицы DBML v5.16
Пишутся: document (типы BALANCE, INCOME, DISCLOSURE, OTHER), financial_statement_meta,
financial_statement_column, financial_statement_line, financial_statement_value, comment, audit_event.
Читаются: stored_file, s3_object, recognition_job, legal_entity, legal_entity_alias, app_user,
consolidation_*, required_document_rule. Новых таблиц, колонок и значений enum нет; миграции нет.
Параграфы 05-domain-rules.md
§7 (логические проверки, акцепт), §9.3 (статус документа), §9.5 (маппинг, подтверждение), §11 и §11.1 (форма из OCR),
§12 (форма из Excel; п. 5 — повтор кода, п. 7 — самопроверка), §2 и §3 п. 1 (период и привязка к версии). Правила,
которых в 05 нет и которые вводит этот change (будут дописаны в §7 и §9.5 bounded-PR docs): период ББ/ОФР по самой
поздней дате колонок при пустой дате отчёта; межформенная проверка мягкая; правка формы только до подтверждения;
условия подтверждения ББ/ОФР.
Допущения по открытым вопросам
- ASSUMPTION(OQ-12, OQ-146): формулы §7 одни для редакций
66nиfsbu4; варианты ФСБУ 4/2023 для 2400 — мягкие. - ASSUMPTION(OQ-23):
DISCLOSUREтолько хранится — документ без данных. - ASSUMPTION(OQ-36, OQ-141, OQ-149): строки без кода не хранятся (их нет в результате).
- ASSUMPTION(OQ-77): вторая форма того же типа в файле не создаётся; первая —
NEEDS_CHECKс предупреждением. - ASSUMPTION(OQ-140): страницы формы из разных файлов не склеиваются.
- ASSUMPTION(OQ-145): редакцию формы ядро определяет само по дате отчёта; контракт не меняется.
Non-goals
- UI (экраны делает другой разработчик).
- Правка строк ОСВ, добавление и удаление строк формы, правка кода и названия строки.
- Отмена подтверждения документа (исправление — новым файлом через автозамену).
- Шахматка, корректировки, КФО, ЕХ, журнал действий, «Добавить версию» (Срезы 5–7).
- Изменение контракта и DBML; хранение результатов проверок; разбор расшифровок.
- Заполнение редакции
fsbu4и словарей по редакциям (OQ-146).