## Why Единая нормализация ББ/ОФР (RSHB/arm-ka-docs#116, change docs `unified-statement-normalization`, DBML v5.19): спека `arm-core` разбита на две части поставки. Часть А (`unified-normalization-core-a`, RSHB/arm-core#126) уже в `main` и не зависит от пакета `arm_statements`. Этот change — **часть Б** (RSHB/arm-core#131): переход ядра на пакет `arm_statements` (копия `api/arm_statements/`, раскладывается `sync-statements`), мапперы результата `2.0`, удаление временного кода и копии словаря §7 ядра. ## What Changes Колонка «Б» таблицы покрытия спеки `arm-core` (план 3): - **B1** — адаптер пакета `StatementsEngine`, вход пересчёта из БД (`StoredForm`). - **B2** — пересчёт после правки точкой входа пакета; §7, `checks` ответа и `CHECKS_NOT_PASSED` — только из `document_issue`; относительные даты колонок; сценарий «после PATCH … `RELATION_FAILED`»: `documents-api`. - **B3** — §7 и вариант формы при приёме `1.x` копией пакета (Р-30): `osv-result-mapping`. - **B4** — маппер `2.0` для форм: хранение как пришло, `document_issue` (`service` и `core`), условие `RECOGNIZED` (страховка — `engine.contract_document_status`): `osv-result-mapping`. - **B5** — маппер `2.0` для ОСВ (Р-28), выбор маппера по MAJOR, приём файла результата: `osv-result-mapping`, `recognition-job-exchange`. - **B6** — удаление копии словаря §7 ядра (`api/rules/statement_checks.yaml`, `run_checks`, `load_check_rules`), редакции — из перечня кодов пакета: `statement-checks`, `documents-api`. **Архивация (R-7 части А).** Change `unified-normalization-core-b` архивируется только вместе с `unified-normalization-core-a` и только после выкладки обеих частей: дельты части А содержат поведение части Б, дельты этой части уточняют его (порядок архивации — сначала А, затем Б). ## Capabilities ### New Capabilities ### Modified Capabilities - `osv-result-mapping`: маппер `2.0` для форм и ОСВ, §7 при приёме `1.x` копией пакета. - `documents-api`: пересчёт, `CHECKS_NOT_PASSED` и `checks` из `document_issue`, словари без копии §7. - `statement-checks`: §7 только копией пакета; копии словаря в ядре нет. - `recognition-job-exchange`: выбор маппера результата по MAJOR. ## Impact `api/src/domain/{stored_form,statement_mapping_v2,statement_checks,statement_issues,statement_mapping,statement_aggregate,statement_layout,osv_mapping}.py`, `api/src/services/{statements_engine,statement_recompute,statement_intake_v2,statement_line_edits,statements,result_mapping}.py`, `api/src/api/dependencies/files.py`, `api/src/contract/result.py`, `api/src/repositories/statements.py`, `api/src/schemas/statements.py`, `api/rules/statement_checks.yaml` (удаляется), `CLAUDE.md`, `README.md`. `import arm_statements` — только в `statements_engine.py` и `stored_form.py`. ## Non-goals Схема v5.19 и миграция (часть А), фронт (arm-web), копия `api/arm_statements/` (раскладывается `sync-statements`), docs-worktree.