6.1 KiB
Proposal: автоподтверждение чистых документов
Срез: доработка Срезов 2c, 3b и 4 (../docs/context/09-delivery-plan.md) — путь «загрузка → свод» без пустых кликов.
Репозиторий: arm-core. Issue: RSHB/arm-core#64. Правило и OQ — bounded-PR в ../docs (05-domain-rules.md §9.3,
§9.5; 07-open-questions.md OQ-157, пометка к OQ-05 и OQ-110; гайды dev/qa-guide.md, dev/frontend-api-guide.md).
DBML и контракты обмена не меняются.
Why
Документ без замечаний сейчас получает RECOGNIZED и попадает в консолидацию только после ручного «Подтвердить»
(CONFIRMED, §3 п. 1). Для ОСВ этот клик ничего не проверяет: строки ОСВ не правятся (OQ-114), ошибка исправляется
перезагрузкой файла. На комплекте РБ + Счастливочная за 1 кв. 2025 это 16 нажатий подряд (прогон владельца 08.10.2026).
ТЗ этого шага не требует: 03_9, п. 4 загрузки — «при отсутствии замечаний документ получает статус „Загружен“, при
замечаниях — „Требуется проверка“»; 10_10 — «Загружен» при прохождении всех проверок; «Подтвердить данные» — шаг после
исправлений. Решение владельца 08.10.2026: чистый документ сразу «Загружен».
What Changes
- Автоподтверждение при маппинге. Документ, который маппинг сделал бы
RECOGNIZED, сразу становитсяCONFIRMED:confirmed_by = NULL,confirmed_at = now, у формы ББ/ОФРreviewed_by = NULL,reviewed_at = now;audit_event(DOCUMENT_CONFIRM)сuser_id = NULLиdescription = «автоподтверждение: без замечаний». Форма подтверждается автоматически только при условиях ручного подтверждения (период определён, жёсткие проверки пройдены), иначе остаётсяRECOGNIZED.DISCLOSURE/OTHER— тоже сразуCONFIRMED. - Привязка и статус версии — как при ручном подтверждении. Документ привязывается ко всем подходящим версиям «в
работе» с заменой по ключу (R-1); версия из
INITIATED/DOCUMENTS_PROCESSINGпереходит вDATA_CORRECTIONсchanged_by = stored_file.uploaded_byи комментарием «автоподтверждение документа …». Файл безuploaded_by— привязка есть, перехода нет, запись в лог (как у хукаon_documents_mapped, design №2 Среза 4). NEEDS_CHECKи правки — вручную, как раньше. Форма, ставшая чистой после правки или акцепта, подтверждается кнопкой (ТЗ 03_9: «Подтвердить данные» после исправлений).RECOGNIZEDостаётся в модели: старые документы и формы после правок.- Удаление файла с автоподтверждёнными документами.
DELETE /files/{id}разрешён, если всеCONFIRMEDдокументы файла подтверждены автоматически (confirmed_by IS NULL) и каждая версия, к которой они привязаны, вINITIATED,DOCUMENTS_PROCESSINGилиDATA_CORRECTION; привязки снимаются, статус версии не меняется,FILE_DELETE.after_value.unbound_version_ids. Иначе — 409FILE_HAS_CONFIRMED_DOCUMENTS, как сейчас.
Таблицы DBML v5.17: document (status, confirmed_by, confirmed_at), financial_statement_meta (reviewed_by,
reviewed_at), consolidation_document, consolidation_version, consolidation_status_history, audit_event,
stored_file (uploaded_by). Новых полей нет.
Non-goals
- Признак «подтверждено автоматически» отдельным полем или в API сверх
confirmed_by = null— не вводится. - Подсказка в UI arm-web «подтверждено системой», кнопка удаления файла в UI — вне объёма (arm-web).
- Миграция данных: существующие
RECOGNIZEDдокументы не подтверждаются задним числом. - Повторный автозапуск после правки формы, межформенная проверка как условие — нет (мягкая, §7).
- Изменение правил
NEEDS_CHECK(OQ-116, предупреждения маппинга) — нет.
Impact
- Код:
services/result_mapping.py(_map_candidate),services/consolidation_documents.py(on_document_confirmedс внешнимchanged_by/comment, новыйauto_confirm),services/documents.py(общая проверка условий формы),services/primary_files.py(delete; привязки снимает существующийconsolidation_documents.unbind_documents). - Спеки (дельты):
osv-result-mapping,primary-files,audit-trail. Ручной путьPOST /documents/{id}/confirmне меняется, поэтому дельтыdocuments-apiнет. - Поведение для фронта: чистые документы приходят сразу
CONFIRMED(«Загружен»);confirmed_by = null— признак автоподтверждения.