I-2: delta MODIFIED consolidations-api «Статусы Среза 4» (загрузка в консолидацию). T1.1: шапки моделей — DBML v5.18. T3.1: lock_versions_of_consolidation — двухшаговая блокировка (FOR UPDATE без членства, затем выборка членов); тесты гонки и выборки. M-1: тест миграции 0006 — порядок кварталов внутри года. M-2: тест 404 для ЮЛ чужого филиала на столе своей консолидации. T4.1: docstring supersede_previous — перенос строк. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2.6 KiB
MODIFIED Requirements
Requirement: Статусы Среза 4
Версия SHALL менять статус только через сервис статусов, который пишет consolidation_status_history(from, to, changed_by, changed_at, comment) и audit_event(CONSOLIDATION_STATUS_CHANGE, before = from, after = to, comment).
Автоматические переходы: загрузка в консолидацию (POST /consolidations/{id}/legal-entities/{le}/files, см. primary-files) —
INITIATED → DOCUMENTS_PROCESSING у каждой версии консолидации «в работе» с ЮЛ в периметре; маппинг документа NEEDS_CHECK, подходящего версии (см. osv-result-mapping) —
DOCUMENTS_PROCESSING → DATA_CORRECTION; подтверждение документа, привязанного к версии (см. documents-api) —
INITIATED или DOCUMENTS_PROCESSING → DATA_CORRECTION. Ручной POST /consolidations/versions/{id}/status
(CONSOLIDATION_EDIT, policy, своя блокировка) с телом {to_status, comment} SHALL допускать только: CANCELLED из
любого статуса «в работе» (comment обязателен, иначе 422 COMMENT_REQUIRED; cancelled_reason = comment,
is_in_work = false, активная блокировка снимается) и INITIATED из DOCUMENTS_PROCESSING / DATA_CORRECTION
(comment необязателен; consolidation_document сохраняются). Любой другой to_status → 409 TRANSITION_NOT_ALLOWED
с текущим и запрошенным статусами. Повтор того же статуса → 409 TRANSITION_NOT_ALLOWED. Статус «в работе» =
{INITIATED, DOCUMENTS_PROCESSING, DATA_CORRECTION}.
Scenario: Аннулирование
- WHEN владелец блокировки переводит версию
DATA_CORRECTIONвCANCELLEDс комментарием - THEN 200;
status = CANCELLED,cancelled_reason= комментарий,is_in_work = false, блокировка снята; запись историиDATA_CORRECTION → CANCELLEDс комментарием;audit_event(CONSOLIDATION_STATUS_CHANGE)
Scenario: Переход Среза 7
- WHEN запрошен
to_status = CONSOLIDATION_RF - THEN 409
TRANSITION_NOT_ALLOWED, статус не изменился
Scenario: Аннулирование без комментария
- WHEN
to_status = CANCELLED,commentпуст - THEN 422
COMMENT_REQUIRED