# 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 = []`