diff --git a/context/03-architecture.md b/context/03-architecture.md index 9f3954a..b3e1c34 100644 --- a/context/03-architecture.md +++ b/context/03-architecture.md @@ -169,8 +169,10 @@ advisory-lock по `(ЮЛ, sha256)` (двойной клик не проскак Шаги 2–8 нормализации форм (раскладка, статусы строк, значения, код и наименование, сборка документа, проверки §7, `needs_review`, статус и предупреждения) и их словари живут в отдельном репозитории `arm-statements` пакетом `arm_statements/` (Р-1: платформа не собирает Python-пакеты). В tabular-parser, scan-gateway и arm-core пакет лежит -**копией** с тестами, импортируется по имени `arm_statements`; копию раскладывает и проверяет `sync-statements` в docs -(`--check`, код 20 при прямой правке; вызывается из `make check-full`, не из `make check`). Сервисы держат только адаптер +**копией** (`api/arm_statements/`, маркер версии — `api/arm_statements/VERSION`) с тестами, импортируется по имени +`arm_statements`; копию раскладывает и проверяет `sync-statements` в docs (`--check`: 0 — синхронно, 10 — отстала, 20 — +прямая правка, 2 — нет checkout; вызывается из `make check-full`, не из `make check`; механика — `dev/checks.md`). +Упорядоченные перечни кодов форм — данные `contracts/statement-code-orders.yaml`, в пакете — их байтовая копия. Сервисы держат только адаптер шага 1 (json ИС / лист Excel → `FormCandidate`); ядро считает тем же кодом после правок аналитика и не держит своих копий словаря §7. Словарь «код → наименование» — только в ядре. Правила — `05-domain-rules.md` §11; маркер версии копии — `service.statements_version` результата → `recognition_job.statements_version`. Порядок выкладки — «сначала diff --git a/context/05-domain-rules.md b/context/05-domain-rules.md index 87f0384..ac529c9 100644 --- a/context/05-domain-rules.md +++ b/context/05-domain-rules.md @@ -766,8 +766,9 @@ replay: dlq → queued (`attempt + 1`). `max_attempts`: OCR 1, парсер 3; ` (родитель `detail`), `needs_review`; повтор кода — законный случай, хранятся все строки (Р-4; строки без кода хранятся — Р-8, отменяет OQ-36 / OQ-141). Значения — с `source_text` (`values[].text`) и `needs_review`; колонки — с `period_kind` и `label_confidence`; шапка — с `form_variant`, `needs_review_fields` и - `header_source` (`<поле>_text` и `<поле>_confidence` всех полей; `*_original_value` = разобранное значение, - `inn_confidence` = `inn_confidence` результата, `organization_name_original_value` = `organization_name`); `checks` + `header_source` (`<поле>_text` и `<поле>_confidence` всех полей; `*_original_value` — как прежде: `inn`, + `report_date_text`, `units_text`; `inn_confidence` результата, `organization_name_original_value` = + `organization_name`); `checks` и предупреждения документа — в `document_issue` (источник `service`; нарушение — `kind = relation`, `code = RELATION_FAILED`, `error` или `kind = soft`, `code = RELATION_SOFT`, `info`, с `codes`, `relation`, `expected`, `actual`, `column_id`; предупреждение о столбце вне колонок формы — с `column_index`) вместе с проверками ядра уровня diff --git a/model/data-model-v5.19.dbml b/model/data-model-v5.19.dbml index 20d5ed1..e39fbd8 100644 --- a/model/data-model-v5.19.dbml +++ b/model/data-model-v5.19.dbml @@ -980,7 +980,7 @@ Table financial_statement_meta { checks_accepted_comment text form_variant statement_form_variant [note: 'v5.19: full | simplified — по структуре кодов (§11.7); выбирает набор соотношений §7; NULL — документ до v5.19 или результат 1.x: набор полный'] needs_review_fields jsonb [note: 'v5.19: имена полей шапки, требующих проверки (["report_date"]), как пришло от сервиса; правка поля или подтверждение тем же значением убирает его из списка'] - header_source jsonb [note: 'v5.19: шапка результата как пришла — {"<поле>": {"text": <поле>_text, "confidence": <поле>_confidence}} для organization_name, inn, report_date, units, okud, okpo, okopf, okfs, okei, address; не меняется. *_original_value — разобранное значение из результата (inn_original_value = inn и т. д.), inn_confidence = header_source.inn.confidence'] + header_source jsonb [note: 'v5.19: шапка результата как пришла — {"<поле>": {"text": <поле>_text, "confidence": <поле>_confidence}} для organization_name, inn, report_date, units, okud, okpo, okopf, okfs, okei, address; не меняется. *_original_value — как прежде: inn_original_value = inn, report_date_original_value = report_date_text, units_original_value = units_text; inn_confidence = header_source.inn.confidence'] organization_name_original_value varchar [note: 'v5.19: наименование организации из результата; правками не меняется'] organization_name_modified boolean [note: 'v5.19: наименование правилось аналитиком (PATCH шапки)'] Note: 'Шапка распознанной формы ББ/ОФР. v5.19: результат проверок §7 и предупреждения хранятся в document_issue как пришли от сервиса и пересчитываются ядром только после правок (пересматривает «не хранятся — считаются на лету»)'