2026-10-08 18:11:56 +04:00

6.1 KiB
Raw Permalink Blame History

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. Иначе — 409 FILE_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 — признак автоподтверждения.