Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
39 lines
3.4 KiB
Markdown
39 lines
3.4 KiB
Markdown
## Why
|
||
|
||
Единая нормализация ББ/ОФР (docs change `unified-statement-normalization`, RSHB/arm-ka-docs#116): шаги 2–8 разбора
|
||
вынесены в общий пакет `arm_statements`, контракт результата распознавания поднят до 2.0. Шлюз оставляет у себя обмен с ИС
|
||
Сканирование и адаптер «таблица json ИС → `FormCandidate`», а собственный нормализатор и справочники удаляет. Требования —
|
||
спека docs `specs/scan-gateway/spec.md` (требования «Адаптер json ИС шага 1», «Ошибки набора json», «Что уходит из
|
||
шлюза») и `specs/recognition-contract/spec.md`.
|
||
|
||
## What Changes
|
||
|
||
- Адаптер `normalizer/ocr/adapter.py`: каждая таблица каждого успешного json — один `FormCandidate` (шапка json копируется
|
||
в шапку каждой таблицы, `label` — заголовок в `evidence`, плотная сетка, `Cell.ref = row:<row_index>`, `locator =
|
||
file:<имя json>;table:<i>`).
|
||
- Обход набора json (`normalizer/ocr/answer_set.py`, `normalizer/files.py`): предупреждения файла `JSON_FAILED`,
|
||
`TABLE_PARSE_ERROR`; `TABLE_LOST` / `TABLE_SKIPPED` — от пакета; статус — `envelope_status` пакета.
|
||
- Контракт результата 2.0: `schema_version = "2.0"` у файла и конверта (включая ack), структурные `metrics.warnings`,
|
||
`service.statements_version` в файле результата; перевод в контракт — `to_contract` / `warning_to_contract` пакета.
|
||
- Удаление собственного нормализатора шагов 2–8 (`normalizer/ocr/text|dates|amounts|layout|rows|header|document`),
|
||
`normalizer/rules.py`, `api/rules/*.yaml` и `SCAN_RULES_DIR`; словари — `default_rules()` пакета.
|
||
- Golden `fixtures/ocr/expected_normalize/*` пересобираются (отдельная ветка и PR в fixtures).
|
||
|
||
## Порядок выкладки
|
||
|
||
Шаг 5 выкладки «сначала ядро» (docs `proposal.md`): слияние PR шлюза — только по команде человека и только после
|
||
выкладки на контур arm-core, принимающего `2.0`. Golden в fixtures сливается первым, PR scan-gateway — сразу за ним
|
||
(окно, в котором golden в `main` красный, держать минимальным). Запрос `recognition-request` остаётся `1.x`.
|
||
|
||
## Non-goals
|
||
|
||
- Горячие папки, опрос, settle, склейка `raw/{job_id}.json`, очистка, таймауты, эмулятор не меняются.
|
||
- Копия `api/arm_statements/` не правится (её раскладывает `sync-statements`); тест идентичности контракта не меняется.
|
||
|
||
## Impact
|
||
|
||
- `api/src/normalizer/**`, `api/src/contract/**`, `api/src/core/worker`, настройки (`SCAN_RULES_DIR` удалён), `api/rules/`
|
||
(удалён), `api/contracts/` (копия схем 2.0), тесты, `CLAUDE.md`/README.
|
||
- Issue: RSHB/arm-scan-gateway#46; план —
|
||
`docs/openspec/changes/unified-statement-normalization/plans/2026-10-18-plan-5-scan-gateway.md`.
|