Andrey Epifancev 0bfe9eea5f fix(consolidation): равнозначность Q1 — только для ОСВ, ББ/ОФР за Q1 к версиям Q2–Q4 не привязываются (R-14a)
ББ/ОФР за Q1 — отчёт на конец квартала, не источник версий Q2–Q4. В
`consolidation_documents._cumulative` равнозначность Q1 (`effective_cumulative`)
применяется только к `document_type = OSV`; для ББ/ОФР — прежнее правило D-5 (NULL —
нарастающий, только квартал версии), ключ замены не меняется.

- тесты: ББ/ОФР за Q1 подходят только версии Q1; ключ замены ББ/ОФР всегда с
  признаком нарастающего, ОСВ за Q1 — без различия флага; подтверждение ББ/ОФР за Q1
  при версии Q3 — без привязки и перехода; ячейка ББ чек-листа Q3 не закрывается ББ Q1
- спека documents-api: ключ замены R-1 с признаком нарастающего (вместо устаревшей
  «тройки»), равнозначность Q1 — только для ОСВ; consolidated-osv — «ОСВ за Q1»
- design #81: R-14 + R-14a

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-06 07:44:18 +04:00

5.9 KiB
Raw Blame History

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 — отчёт на конец квартала и подходят только версии за Q1 (R-14a). Привязанный ранее документ того же ЮЛ с тем же ключом (document_type, osv_account_code, period_quarter, признак нарастающего: is_cumulative true или NULL; для ОСВ за Q1 признак не различается) в той же версии SHALL отвязываться (R-1). Каждая версия, получившая привязку, из 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