Сквозной тест на фикстурах РБ показал: парсер помечает ОСВ за Q1 нарастающей, а привязка (`fits`) брала нарастающий только за квартал версии, `select_sources` не считал его квартальным Q1 — для версии Q3 привязано 17 из 22, пары 60/62(/76) в пробеле [Q1], свод пуст. - consolidation_periods.effective_cumulative: для Q1 — квартальный при любом флаге; одна функция для `fits`, ключа замены `_key`, `select_sources` (версии Q2+) и адаптера чек-листа; для версии Q1 поведение прежнее (№50) - тесты: таблица effective_cumulative, select_sources/build/чек-лист с нарастающим Q1, fits любой версии года, подтверждение и подхват (нарастающий и квартальный Q1 — один слот, побеждает поздний) - test_consolidation_fixtures: xfail снят, сценарий зелёный (22 привязки, 1385 строк) - спеки documents-api и consolidated-osv: фраза о равнозначности Q1; design #81; план Task 13 Step 2–4 и tasks.md 5.1 отмечены Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
5.8 KiB
Spec Delta: documents-api
MODIFIED Requirements
Requirement: Подтверждение документа
POST /api/v1/documents/{document_id}/confirm (DOCUMENT_EDIT, policy) SHALL переводить документ из RECOGNIZED
или NEEDS_CHECK в CONFIRMED (confirmed_by, confirmed_at) с audit_event(DOCUMENT_CONFIRM, PRIMARY_DOCUMENTS);
из CONFIRMED повторно — 409 ALREADY_CONFIRMED; документ файла SUPERSEDED — 409 FILE_SUPERSEDED; документ в любом
другом статусе (например, ERROR) — 409 DOCUMENT_NOT_CONFIRMABLE. Если совпали несколько условий, приоритет у
FILE_SUPERSEDED. Подтверждение берёт блокировки в порядке «файл → документ → версии консолидации (по возрастанию
id)» и перечитывает их под FOR UPDATE; документ или файл, исчезнувшие за время ожидания блокировки, — 404 NOT_FOUND.
В той же транзакции документ SHALL привязываться (consolidation_document) ко всем версиям «в работе» (INITIATED,
DOCUMENTS_PROCESSING, DATA_CORRECTION), которым он подходит: ЮЛ документа ∈ consolidation_member версии,
period_year = год версии, period_quarter не NULL и (is_cumulative true или NULL → period_quarter = квартал
версии; false → period_quarter ≤ квартала версии). Документ за Q1 равнозначен нарастающему и квартальному (R-14):
он подходит любой версии года при любом is_cumulative, а нарастающий и квартальный Q1 одной пары (ЮЛ, счёт) —
одна привязка (подтверждённый позже вытесняет прежний). Привязанный ранее документ того же ЮЛ с той же тройкой
(document_type, osv_account_code, period_quarter) в той же версии SHALL отвязываться. Каждая версия, получившая
привязку, из INITIATED или DOCUMENTS_PROCESSING SHALL переходить в DATA_CORRECTION (changed_by =
подтвердивший). Блокировка версии (consolidation_lock) для подтверждения MUST NOT требоваться.
Scenario: Причина ошибки маппинга в карточке файла
- WHEN файл в
ERRORпосле неудачного маппинга (заданиеdone,error_codeпуст) - THEN
job.mapping_errorсодержит причину,job.error_codeпуст
Scenario: Документ не подтверждается
- WHEN подтверждается документ в статусе
ERROR - THEN 409
DOCUMENT_NOT_CONFIRMABLE, статус не изменился
Scenario: Подтверждение
- WHEN
ka_rfподтверждает документNEEDS_CHECKсвоего филиала - THEN
status = CONFIRMED,confirmed_by= пользователь,audit_event(DOCUMENT_CONFIRM)сbefore_value.status = NEEDS_CHECK
Scenario: Привязка к версии и переход статуса
- WHEN версия ГК 2024 Q3 в
INITIATEDс ЮЛ в периметре; подтверждается квартальная ОСВ 60 этого ЮЛ за 2024 Q2 - THEN
consolidation_document(version, document)создан; версия вDATA_CORRECTION; запись историиINITIATED → DATA_CORRECTIONсchanged_by= пользователь
Scenario: Не подходит по периоду
- WHEN подтверждается нарастающая ОСВ 60 за 2024 Q2 при версии за 2024 Q3
- THEN привязки нет, статус версии не изменился
Scenario: Версия в CANCELLED
- WHEN подходящий документ подтверждается при версии
CANCELLED - THEN привязки нет
ADDED Requirements
Requirement: Подхват документов при создании версии и расширении периметра
При создании версии и при добавлении ЮЛ в периметр ядро SHALL привязать уже подтверждённые документы этого ЮЛ из
незаменённых файлов, подходящие версии (условия — как при подтверждении); на одну тройку (document_type,
osv_account_code, period_quarter) — документ с самым поздним confirmed_at. Удаление ЮЛ из периметра SHALL
снимать привязку всех его документов в этой версии. Подхват и отвязка статус версии MUST NOT менять.
Scenario: Фикстуры, подтверждённые до консолидации
- WHEN ОСВ 60 РБ за Q1, Q2, Q3 2024 подтверждены, затем создана консолидация ГК за 2024 Q3
- THEN три
consolidation_documentна эти документы; в чек-листе ячейка ОСВ 60 РБ —CONFIRMED; версия вINITIATED
Scenario: Две подтверждённые версии одного документа
- WHEN у ЮЛ два незаменённых файла с
CONFIRMEDОСВ 62 за 2024 Q3 (разныеlocator), создана версия 2024 Q3 - THEN привязан документ с более поздним
confirmed_at