docs(#116): столбец кодов — сначала по заголовку «Код» без порога, подсчёт ≥ 3 только без заголовка

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Andrey Epifancev 2026-10-17 19:17:46 +04:00
parent d2572d2a6b
commit 2fa60ef924

View File

@ -392,9 +392,9 @@ sheet:<A>,<B>`. `DISCLOSURE` и форма без колонки кодов —
роль каждой строки сетки (`header` | `numbering` | `data`), сегменты (участки сетки между повторными шапками, у
каждого своя раскладка колонок).
- **1. Что считается кодом при поиске столбца** — одно правило: 4–5 цифр (допускается `.0`), первые четыре — в диапазонах словаря кодов всех форм (`type_hint` неизвестен — объединение диапазонов); столбец с наибольшим числом кодов, кодов ≥ 3, доля среди непустых ≥ порога; нет — «колонка кодов не найдена»
- scan-gateway: `int(text)` → правило словаря (закрывает AURORA-1517 вместе с п. 5)
- tabular-parser: диапазон формы → объединение; `relaxed` для одиноких продолжений не нужен (они склеены в шаге 1)
- **1. Что считается кодом при поиске столбца** — одно правило в два прохода (уточнено по вопросу владельца 17.10.2026): (1) есть строка заголовка с ячейкой «Код» / «Код строки» → столбец кодов под ней, без порога по числу кодов — документ из двух строк остаётся документом, нечитаемые коды становятся строками `unreadable` (так шлюз сейчас); (2) заголовка нет → столбец с наибольшим числом ячеек-кодов, кодов ≥ 3, доля среди непустых ≥ порога (так парсер сейчас); нет — «колонка кодов не найдена». Код — 4–5 цифр (допускается `.0`), первые четыре в диапазонах словаря кодов всех форм (`type_hint` неизвестен — объединение диапазонов)
- scan-gateway: проход по заголовку — как сейчас; в запасном подсчёте `int(text)` → правило словаря (закрывает AURORA-1517 вместе с п. 5)
- tabular-parser: добавляет проход по заголовку до подсчёта; диапазон формы → объединение; `relaxed` для одиноких продолжений не нужен (они склеены в шаге 1)
- **2. Повторная шапка внутри таблицы** — одно правило: строка внутри сетки с признаком шапки («Код» / та же сигнатура) открывает новый сегмент; у сегмента своя раскладка (позиции колонок могут сдвинуться); колонки значений сегментов сопоставляются по порядку; число не совпало — предупреждение, значения по позиции
- scan-gateway: как сейчас, через общее правило
- tabular-parser: добавляет: бывший «лист-продолжение со своей раскладкой» становится сегментом
@ -636,9 +636,10 @@ column_index?}`, а не строка.
правится таблицей уровней в спеке.
2. **`DISCLOSURE` всегда `done`** без условий о раскладке, строках и проверках — сохранено текущее поведение парсера.
Цена: пояснения не проверяются; так и сейчас.
3. **Порог столбца кодов** — «кодов ≥ 3 и доля среди непустых ≥ порога» взят у парсера как есть; `relaxed` для одиноких
продолжений снят, потому что продолжения склеиваются в шаге 1. Цена: таблица с одним-двумя кодами без столбца кодов
→ документ без строк с `needs_check`.
3. **Порог столбца кодов** — «кодов ≥ 3 и доля среди непустых ≥ порога» взят у парсера и действует только в запасном
проходе без заголовка «Код»; по заголовку порога нет (уточнено с владельцем 17.10.2026, шаг 2 п. 1). `relaxed` для
одиноких продолжений снят, потому что продолжения склеиваются в шаге 1. Цена: таблица без заголовка и с одним-двумя
кодами → документ без строк с `needs_check`.
4. **Начальный словарь исключений подписей** («Изменение», «Отклонение», «%», «Темп», «Доля», «Примечание») — по тестам
парсера; пополняется словарём, не кодом.
5. **Грамматика `locator`** — пары `ключ:значение` через `;`, ключи по источнику. Цена: минимальная, формат уже такой.