## 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`