From 26f0160ce3bdfd8cc9e8a6bae611fbe261df6f38 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Sat, 7 Nov 2026 21:56:45 +0400 Subject: [PATCH] =?UTF-8?q?=D0=90=D1=80=D1=85=D0=B8=D0=B2=20change=20ex-pa?= =?UTF-8?q?yload-schema=20(AURORA-1560,=20#208)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- .../.openspec.yaml | 0 .../2026-11-07-ex-payload-schema}/design.md | 0 .../plans/2026-11-06-ex-payload.md | 0 .../2026-11-07-ex-payload-schema}/proposal.md | 0 .../specs/arm-core/spec.md | 0 .../2026-11-07-ex-payload-schema}/tasks.md | 0 openspec/specs/arm-core/spec.md | 41 +++++++++++++++++++ 7 files changed, 41 insertions(+) rename openspec/changes/{ex-payload-schema => archive/2026-11-07-ex-payload-schema}/.openspec.yaml (100%) rename openspec/changes/{ex-payload-schema => archive/2026-11-07-ex-payload-schema}/design.md (100%) rename openspec/changes/{ex-payload-schema => archive/2026-11-07-ex-payload-schema}/plans/2026-11-06-ex-payload.md (100%) rename openspec/changes/{ex-payload-schema => archive/2026-11-07-ex-payload-schema}/proposal.md (100%) rename openspec/changes/{ex-payload-schema => archive/2026-11-07-ex-payload-schema}/specs/arm-core/spec.md (100%) rename openspec/changes/{ex-payload-schema => archive/2026-11-07-ex-payload-schema}/tasks.md (100%) diff --git a/openspec/changes/ex-payload-schema/.openspec.yaml b/openspec/changes/archive/2026-11-07-ex-payload-schema/.openspec.yaml similarity index 100% rename from openspec/changes/ex-payload-schema/.openspec.yaml rename to openspec/changes/archive/2026-11-07-ex-payload-schema/.openspec.yaml diff --git a/openspec/changes/ex-payload-schema/design.md b/openspec/changes/archive/2026-11-07-ex-payload-schema/design.md similarity index 100% rename from openspec/changes/ex-payload-schema/design.md rename to openspec/changes/archive/2026-11-07-ex-payload-schema/design.md diff --git a/openspec/changes/ex-payload-schema/plans/2026-11-06-ex-payload.md b/openspec/changes/archive/2026-11-07-ex-payload-schema/plans/2026-11-06-ex-payload.md similarity index 100% rename from openspec/changes/ex-payload-schema/plans/2026-11-06-ex-payload.md rename to openspec/changes/archive/2026-11-07-ex-payload-schema/plans/2026-11-06-ex-payload.md diff --git a/openspec/changes/ex-payload-schema/proposal.md b/openspec/changes/archive/2026-11-07-ex-payload-schema/proposal.md similarity index 100% rename from openspec/changes/ex-payload-schema/proposal.md rename to openspec/changes/archive/2026-11-07-ex-payload-schema/proposal.md diff --git a/openspec/changes/ex-payload-schema/specs/arm-core/spec.md b/openspec/changes/archive/2026-11-07-ex-payload-schema/specs/arm-core/spec.md similarity index 100% rename from openspec/changes/ex-payload-schema/specs/arm-core/spec.md rename to openspec/changes/archive/2026-11-07-ex-payload-schema/specs/arm-core/spec.md diff --git a/openspec/changes/ex-payload-schema/tasks.md b/openspec/changes/archive/2026-11-07-ex-payload-schema/tasks.md similarity index 100% rename from openspec/changes/ex-payload-schema/tasks.md rename to openspec/changes/archive/2026-11-07-ex-payload-schema/tasks.md diff --git a/openspec/specs/arm-core/spec.md b/openspec/specs/arm-core/spec.md index 03ef7a6..8fb794c 100644 --- a/openspec/specs/arm-core/spec.md +++ b/openspec/specs/arm-core/spec.md @@ -617,3 +617,44 @@ SHALL сохранять одной транзакцией комментари #### Scenario: Сохранение обоснования - **WHEN** у версии превышение порога ББ и аналитик с блокировкой сохраняет `threshold_justification` - **THEN** ответ — `KfoResultOut` с этим обоснованием, в журнале одно событие `KFO_EDIT` + +### 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`