Proposal, design (D-1…D-6, решения без обсуждения №1–7) и дельты osv-result-mapping, primary-files, audit-trail: чистый документ при маппинге сразу CONFIRMED (система, confirmed_by NULL; переход версии — от загрузившего), удаление автоподтверждённых файлов до DATA_CORRECTION включительно. Решение владельца 08.10.2026, ТЗ 03_9 п. 4. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3.3 KiB
Spec Delta: primary-files
MODIFIED Requirements
Requirement: Удаление файла
DELETE /api/v1/files/{file_id} (DOCUMENT_EDIT, policy) SHALL удалить строки ОСВ, документы, задания и stored_file,
проставить s3_object.expires_at = now() (объект физически не удаляется, OQ-22) и записать audit_event(FILE_DELETE, before_value = карточка файла, after_value = {unbound_version_ids}). Удаление MUST быть отклонено 409
FILE_HAS_CONFIRMED_DOCUMENTS, если у файла есть документ CONFIRMED, подтверждённый пользователем (confirmed_by не
NULL), или если автоподтверждённый документ файла (confirmed_by NULL) привязан к версии в статусе, отличном от
INITIATED, DOCUMENTS_PROCESSING, DATA_CORRECTION (OQ-157, уточняет OQ-110); и 409 FILE_SUPERSEDES_OTHERS, если на
файл ссылаются superseded_by_file_id. При удалении файла с автоподтверждёнными документами их привязки
consolidation_document SHALL сниматься, статус версий MUST NOT меняться, after_value.unbound_version_ids — id версий,
где привязки сняты (по возрастанию; пустой список, если привязок не было). Блокировки: задания → файл → документы →
advisory-блокировка привязок ГК → версии по id. Файл SUPERSEDED удалить можно.
Scenario: Удаление ошибочного файла
- WHEN файл в
ERRORудаляется владельцем - THEN 204;
stored_file,recognition_jobотсутствуют;s3_object.expires_atзаполнен;audit_event(FILE_DELETE)сafter_value.unbound_version_ids = []
Scenario: Подтверждённый документ
- WHEN удаляется файл с документом
CONFIRMED, у которогоconfirmed_by= пользователь - THEN 409
FILE_HAS_CONFIRMED_DOCUMENTS, ничего не изменилось
Scenario: Автоподтверждённый документ в корректировке
- WHEN версия 2025 Q1 в
DATA_CORRECTION, к ней привязан автоподтверждённый документ ОСВ 60 РБ; файл удаляется - THEN 204; привязка снята, версия осталась в
DATA_CORRECTION;FILE_DELETE.after_value.unbound_version_ids= [id версии]
Scenario: Версия ушла на согласование
- WHEN автоподтверждённый документ файла привязан к версии в
CONSOLIDATION_RF - THEN 409
FILE_HAS_CONFIRMED_DOCUMENTS, привязка и файл на месте
Scenario: Автоподтверждённый без привязок
- WHEN удаляется файл, все документы которого автоподтверждены и ни к одной версии не привязаны
- THEN 204;
after_value.unbound_version_ids = []