# 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`), `repositories/files.py` (снятие привязок). - Спеки: `osv-result-mapping`, `documents-api`, `primary-files`, `audit-trail`. - Поведение для фронта: чистые документы приходят сразу `CONFIRMED` («Загружен»); `confirmed_by = null` — признак автоподтверждения.