diff --git a/openspec/changes/unified-statement-normalization/design.md b/openspec/changes/unified-statement-normalization/design.md index 63aa105..03d8c40 100644 --- a/openspec/changes/unified-statement-normalization/design.md +++ b/openspec/changes/unified-statement-normalization/design.md @@ -513,7 +513,7 @@ line_name_confidence, values}`: `line_code` — разобранный код (4 статус конверта — агрегат. Предупреждение — структура `{code, severity: error | info, message, line_ref?, column_index?}`, а не строка. -- **1. Критерий `done`** — один критерий из самого результата: раскладка найдена ∧ (организация или ИНН) ∧ дата отчёта ∧ все строки `ok` ∧ все значения `is_recognized` ∧ `confidence` всех ячеек ≥ порога (Р-5) ∧ жёсткие проверки §7 сошлись ∧ нет предупреждений уровня `error`. Excel выполняет условия уверенности автоматически +- **1. Критерий `done`** — один критерий из самого результата: раскладка найдена ∧ (организация или ИНН) ∧ дата отчёта ∧ все строки `ok` ∧ нет значений `needs_review` (см. «Подтверждение проверкой» ниже) ∧ жёсткие проверки §7 сошлись ∧ нет предупреждений уровня `error`. Excel выполняет условия уверенности автоматически - scan-gateway: «ничего не выброшено и уверенность 100» → общий критерий - tabular-parser: `_is_ok` → общий критерий; добавляются строки и значения - **2. Влияние предупреждений** — по уровню: `error` → `needs_check`, `info` — не влияет; у обоих одинаково @@ -529,6 +529,21 @@ column_index?}`, а не строка. - scan-gateway: меняет - tabular-parser: меняет +**Подтверждение проверкой (вопрос владельца 17.10.2026).** Проверка §7 — арбитр, уверенность — подсказка там, где +проверки нет. По каждому значению сервис считает `needs_review`: + +- `true`, если `is_recognized = false` или `confidence` ниже порога (Р-5) **и** значение не покрыто сошедшимся жёстким + соотношением §7 в своей колонке (не входит ни в одно, соотношение не сошлось или оно мягкое); +- `true` у всех ячеек соотношения в колонке, где оно не сошлось, независимо от уверенности; +- иначе `false`: значение подтверждено проверкой, не подсвечивается и статус не трогает; сырой текст и уверенность + остаются в подсказке ячейки. + +Экран подсвечивает ячейки только по `needs_review`; после PATCH ядро пересчитывает `checks` и `needs_review` общим +кодом. Не покрыто проверками и остаётся на уверенности: поля шапки, справочные строки ОФР 25xx / 29xx, детализация +без проверки родителя, `DISCLOSURE`, колонки, где есть только мягкие соотношения. Риск — две взаимно компенсирующие +ошибки в одном соотношении; принимается (перекрёстные соотношения баланса его снижают). Закрывает AURORA-1524 без +ущерба для 1519. Распространение на `is_recognized = false` — Р-7. + ### Шаг 9 — Результат Одинаково, как сейчас; контракт `recognition-result.schema.json` → **v1.3**: `line_status`, `line_code` nullable, @@ -545,8 +560,8 @@ column_index?}`, а не строка. - Словарь строк и словарь §7: единственный экземпляр в общем коде (Р-1); копии ядра и шлюза удаляются. - Достройка шаблонных строк: по тому же словарю; строки `missing` / `unreadable` / `duplicate` показываются как пришли, с подсветкой. -- Экран: подсветка ячеек по `confidence`, `is_recognized` и нарушениям §7 (по кодам слагаемых и колонке); строк — по - `line_status`; предупреждения документа — с привязкой к месту. +- Экран: подсветка ячеек только по `needs_review` (уверенность, `is_recognized` и нарушения §7 уже сведены сервисом); + строк — по `line_status`; предупреждения документа — с привязкой к месту. ### Решения, которые нужны от владельца @@ -563,3 +578,6 @@ column_index?}`, а не строка. 100, как сейчас. - **Р-6** (шаг 2, п. 6) — неизвестная числовая колонка без периода: оставлять без даты с предупреждением (`needs_check`) или пропускать, как парсер сейчас. +- **Р-7** (шаг 8, «Подтверждение проверкой») — снимать ли подсветку сошедшимся соотношением §7 и с `is_recognized = + false` (число собрано из грязного текста), а не только с низкой уверенности; предложение — да: сошедшаяся проверка + сильнее догадки о мусоре.