2026-11-06 23:25:40 +04:00

3.7 KiB
Raw Blame History

ADDED Requirements

Requirement: Срез ЕХ при верификации

При переходе версии консолидации в «Верифицирован» ядро SHALL один раз записать срез по context/05-domain-rules.md §15: ex_snapshot со status = ACTUAL и номером, следующим по (ГСК, год, квартал); ex_snapshot_member по каждому ЮЛ версии; ex_snapshot_item — primary_document по каждому привязанному документу и по одному элементу summary_osv, vgo_pairs, chess, kfo_balance, kfo_income, corrections, version_card, плюс goodwill при goodwill_enabled и other_report при scenario = CONFIRM. Запись SHALL не переводить прежний срез в архив и SHALL ставить superseded_by_snapshot_id архивным срезам той же ГК и даты без ссылки. Повторная попытка по той же версии второй срез не пишет. Запись SHALL писать audit_event(EX_SNAPSHOT_WRITE).

Scenario: Первая верификация

  • WHEN версия № 1 ГСК за 01.10.2025 переходит в «Верифицирован», срезов этой ГСК и даты нет
  • THEN записан срез № 1 ACTUAL с элементами по §15 п. 3, kfo_result.is_frozen = true, событие EX_SNAPSHOT_WRITE

Scenario: Новая версия после ручного архива

  • WHEN срез № 1 той же ГК и даты заархивирован вручную, и версия № 3 переходит в «Верифицирован»
  • THEN записан срез № 2 ACTUAL, срез № 1 остаётся ARCHIVE и получает superseded_by_snapshot_id среза № 2

Scenario: Гудвилл выключен

  • WHEN у версии goodwill_enabled = false
  • THEN элемента goodwill в срезе нет

Requirement: Payload элемента среза

ex_snapshot_item.payload всех типов, кроме primary_document, SHALL проходить contracts/ex-payload-v1.schema.json: конверт {schema_version: "1.0", item_type, units, generated_at, source_version_no, data}, где item_type совпадает с колонкой, units — единица типа (rub / thousand_rub / none), data — ответ API экрана рабочей версии на момент верификации без полей редактирования; payload_schema_version = "1.0". Чтение и выгрузка среза SHALL опираться только на payload и ссылки на document, legal_entity, related_group, company_group, app_user.

Scenario: Элемент КФО

  • WHEN пишется элемент kfo_balance
  • THEN его payload — units = "thousand_rub", data с balance.lines, summary, requisites.corrections_balance и без income; схема его принимает

Scenario: Несоответствие типа

  • WHEN у элемента item_type = kfo_balance, а data — таблица гудвилла
  • THEN схема payload его отклоняет

Scenario: Чтение без таблиц консолидации

  • WHEN рабочие таблицы версии удалены по сроку
  • THEN срез открывается и выгружается: строки КФО, шахматка, агрегаты ВГО — из payload, первичка — по document_id