docs(#116): Р-5 решено — порог 100 для значений, код подтверждается структурой, наименование — вопрос ядра
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
26df4ad2d1
commit
fbc1de5910
@ -1,7 +1,7 @@
|
|||||||
# Единый алгоритм нормализации ББ/ОФР (scan-gateway и tabular-parser) — дизайн
|
# Единый алгоритм нормализации ББ/ОФР (scan-gateway и tabular-parser) — дизайн
|
||||||
|
|
||||||
Issue: arm-ka-docs#116. Статус: черновик; текущая цепочка описана, целевая картина по шагам 1–9 — предложение, ждёт
|
Issue: arm-ka-docs#116. Статус: черновик; текущая цепочка описана, целевая картина по шагам 1–9 — предложение, ждёт
|
||||||
решений владельца Р-5…Р-7; Р-1…Р-4 решены (brainstorming 17.10.2026).
|
решений владельца Р-6, Р-7; Р-1…Р-5 решены (brainstorming 17.10.2026).
|
||||||
|
|
||||||
## Цель
|
## Цель
|
||||||
|
|
||||||
@ -520,7 +520,7 @@ line_name_confidence, values}`: `line_code` — разобранный код (4
|
|||||||
статус конверта — агрегат. Предупреждение — структура `{code, severity: error | info, message, line_ref?,
|
статус конверта — агрегат. Предупреждение — структура `{code, severity: error | info, message, line_ref?,
|
||||||
column_index?}`, а не строка.
|
column_index?}`, а не строка.
|
||||||
|
|
||||||
- **1. Критерий `done`** — один критерий из самого результата: раскладка найдена ∧ (организация или ИНН) ∧ дата отчёта ∧ все строки `ok` ∧ нет значений `needs_review` (см. «Подтверждение проверкой» ниже) ∧ жёсткие проверки §7 сошлись ∧ нет предупреждений уровня `error`. `DISCLOSURE` — `done` без условий о раскладке, строках и проверках (как сейчас). Excel выполняет условия уверенности автоматически
|
- **1. Критерий `done`** — один критерий из самого результата: раскладка найдена ∧ (организация или ИНН) ∧ дата отчёта ∧ все строки `ok` ∧ нет значений и строк `needs_review` (см. «Подтверждение проверкой» ниже) ∧ жёсткие проверки §7 сошлись ∧ нет предупреждений уровня `error`. `DISCLOSURE` — `done` без условий о раскладке, строках и проверках (как сейчас). Excel выполняет условия уверенности автоматически
|
||||||
- scan-gateway: «ничего не выброшено и уверенность 100» → общий критерий
|
- scan-gateway: «ничего не выброшено и уверенность 100» → общий критерий
|
||||||
- tabular-parser: `_is_ok` → общий критерий; добавляются строки и значения
|
- tabular-parser: `_is_ok` → общий критерий; добавляются строки и значения
|
||||||
- **2. Влияние предупреждений** — по уровню: `error` → `needs_check`, `info` — не влияет; у обоих одинаково; уровень каждого предупреждения задаётся в спеке (например, «строка заголовка не найдена», «колонка без даты», «тип по кодам противоречит заголовку» — `error`; «подпись из словаря исключений пропущена», «дробные при тыс. руб.» — `info`)
|
- **2. Влияние предупреждений** — по уровню: `error` → `needs_check`, `info` — не влияет; у обоих одинаково; уровень каждого предупреждения задаётся в спеке (например, «строка заголовка не найдена», «колонка без даты», «тип по кодам противоречит заголовку» — `error`; «подпись из словаря исключений пропущена», «дробные при тыс. руб.» — `info`)
|
||||||
@ -539,7 +539,7 @@ column_index?}`, а не строка.
|
|||||||
**Подтверждение проверкой (вопрос владельца 17.10.2026).** Проверка §7 — арбитр, уверенность — подсказка там, где
|
**Подтверждение проверкой (вопрос владельца 17.10.2026).** Проверка §7 — арбитр, уверенность — подсказка там, где
|
||||||
проверки нет. По каждому значению сервис считает `needs_review`:
|
проверки нет. По каждому значению сервис считает `needs_review`:
|
||||||
|
|
||||||
- `true`, если `confidence` ниже порога (Р-5) **и** значение не покрыто сошедшимся жёстким соотношением §7 в своей
|
- `true`, если `confidence` ниже порога (Р-5: 100) **и** значение не покрыто сошедшимся жёстким соотношением §7 в своей
|
||||||
колонке (не входит ни в одно, соотношение не сошлось или оно мягкое); для `is_recognized = false` — то же правило,
|
колонке (не входит ни в одно, соотношение не сошлось или оно мягкое); для `is_recognized = false` — то же правило,
|
||||||
если Р-7 = да, иначе всегда `true`;
|
если Р-7 = да, иначе всегда `true`;
|
||||||
- `true` у всех ячеек соотношения в колонке, где оно не сошлось, независимо от уверенности;
|
- `true` у всех ячеек соотношения в колонке, где оно не сошлось, независимо от уверенности;
|
||||||
@ -552,10 +552,18 @@ column_index?}`, а не строка.
|
|||||||
ошибки в одном соотношении; принимается (перекрёстные соотношения баланса его снижают). Закрывает AURORA-1524 без
|
ошибки в одном соотношении; принимается (перекрёстные соотношения баланса его снижают). Закрывает AURORA-1524 без
|
||||||
ущерба для 1519. Распространение на `is_recognized = false` — Р-7.
|
ущерба для 1519. Распространение на `is_recognized = false` — Р-7.
|
||||||
|
|
||||||
|
**Код и наименование строки (Р-5, решение владельца 17.10.2026).** Уверенность кода подтверждается не §7 (перепутанные
|
||||||
|
соседи 1220 и 1230 дают ту же сумму раздела), а структурой: код есть в перечне кодов формы и стоит по возрастанию
|
||||||
|
внутри раздела. Подтверждён — уверенность не важна; иначе `needs_review` у строки (`StatementLine.needs_review`),
|
||||||
|
документ — `needs_check`. По `fixtures/ocr` коды часто приходят с уверенностью 50 и 25, поэтому требовать 100, как
|
||||||
|
шлюз сейчас, нельзя. Перечень кодов форм без наименований — часть общего кода (нужен и для поиска столбца кодов), не
|
||||||
|
словарь строк. Уверенность наименования на статус и подсветку в сервисах не влияет: сервисы отдают текст как есть;
|
||||||
|
сопоставление файлового наименования со справочным по коду — вопрос ядра, открыт (см. «Что уходит из ядра»).
|
||||||
|
|
||||||
### Шаг 9 — Результат
|
### Шаг 9 — Результат
|
||||||
|
|
||||||
Одинаково, как сейчас; контракт `recognition-result.schema.json` → **v1.3**: `line_status`, `line_code` nullable,
|
Одинаково, как сейчас; контракт `recognition-result.schema.json` → **v1.3**: `line_status`, `line_code` nullable,
|
||||||
`line_code_text`; `needs_review` у значения; `document.status`; `document.warnings[]` и `metrics.warnings[]`
|
`line_code_text`; `needs_review` у значения и у строки; `document.status`; `document.warnings[]` и `metrics.warnings[]`
|
||||||
структурные (уровень, привязка); `checks` обязателен для `BALANCE` / `INCOME` со строками у обоих конвейеров (у
|
структурные (уровень, привязка); `checks` обязателен для `BALANCE` / `INCOME` со строками у обоих конвейеров (у
|
||||||
документа без строк отсутствует), нарушения с кодами слагаемых, без `duplicate_line_codes`.
|
документа без строк отсутствует), нарушения с кодами слагаемых, без `duplicate_line_codes`.
|
||||||
|
|
||||||
@ -576,7 +584,10 @@ column_index?}`, а не строка.
|
|||||||
- Достройка шаблонных строк: по словарю ядра; строки `missing` / `unreadable` показываются как пришли, с
|
- Достройка шаблонных строк: по словарю ядра; строки `missing` / `unreadable` показываются как пришли, с
|
||||||
подсветкой; код, у которого есть хотя бы одна строка из файла, шаблоном не достраивается.
|
подсветкой; код, у которого есть хотя бы одна строка из файла, шаблоном не достраивается.
|
||||||
- Экран: подсветка ячеек только по `needs_review` (уверенность, `is_recognized` и нарушения §7 уже сведены сервисом);
|
- Экран: подсветка ячеек только по `needs_review` (уверенность, `is_recognized` и нарушения §7 уже сведены сервисом);
|
||||||
строк — по `line_status`; предупреждения документа — с привязкой к месту.
|
строк — по `line_status` и `needs_review` строки; предупреждения документа — с привязкой к месту.
|
||||||
|
- Открытый вопрос ядра (не сервисов): сопоставлять ли файловое наименование строки со справочным по коду и что
|
||||||
|
делать при расхождении (владелец 17.10.2026: «наверное, будем пытаться сопоставить»). В сервисах уверенность и
|
||||||
|
текст наименования на статус не влияют.
|
||||||
|
|
||||||
### Решения, которые нужны от владельца
|
### Решения, которые нужны от владельца
|
||||||
|
|
||||||
@ -598,9 +609,12 @@ column_index?}`, а не строка.
|
|||||||
- **Р-4** (шаг 3, п. 3) — **решено владельцем 17.10.2026:** повторы кодов законны; все строки сохраняются и
|
- **Р-4** (шаг 3, п. 3) — **решено владельцем 17.10.2026:** повторы кодов законны; все строки сохраняются и
|
||||||
показываются, для проверок и всех операций после подтверждения или автоподтверждения — суммой по коду. Следствие:
|
показываются, для проверок и всех операций после подтверждения или автоподтверждения — суммой по коду. Следствие:
|
||||||
снять уникальность `(meta_id, line_code)` в DBML.
|
снять уникальность `(meta_id, line_code)` в DBML.
|
||||||
- **Р-5** (шаг 8, «Подтверждение проверкой») — порог уверенности, ниже которого значение попадает в `needs_review`,
|
- **Р-5** (шаг 8, «Подтверждение проверкой») — **решено владельцем 17.10.2026:** порог для значений — 100 (у ИС
|
||||||
если не подтверждено проверкой §7 (= решение № 7 по спринту 2, AURORA-1519 / 1524); предложение — 100, как сейчас:
|
уверенность дискретная: 100, ~80, 71, 67, 60, 50, 25, 0, промежутка 90–99 нет; в группе 70–89 есть настоящие ошибки,
|
||||||
ложных подсветок станет меньше за счёт подтверждения проверкой, а не за счёт порога.
|
например «11 30» с уверенностью 80); ложных подсветок становится меньше за счёт подтверждения проверкой §7, а не
|
||||||
|
порога. Код строки подтверждается структурой (перечень кодов формы + порядок), не уверенностью. Уверенность
|
||||||
|
наименования в сервисах не используется; сопоставление со справочным — открытый вопрос ядра (= решение № 7 по
|
||||||
|
спринту 2, AURORA-1519 / 1524).
|
||||||
- **Р-6** (шаг 2, п. 6) — неизвестная числовая колонка без периода: оставлять без даты с предупреждением (`needs_check`)
|
- **Р-6** (шаг 2, п. 6) — неизвестная числовая колонка без периода: оставлять без даты с предупреждением (`needs_check`)
|
||||||
или пропускать, как парсер сейчас.
|
или пропускать, как парсер сейчас.
|
||||||
- **Р-7** (шаг 8, «Подтверждение проверкой») — снимать ли подсветку сошедшимся соотношением §7 и с `is_recognized =
|
- **Р-7** (шаг 8, «Подтверждение проверкой») — снимать ли подсветку сошедшимся соотношением §7 и с `is_recognized =
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user