From 2fa60ef924fa126550d09110fe68c4cedf7debe2 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Sat, 17 Oct 2026 19:17:46 +0400 Subject: [PATCH] =?UTF-8?q?docs(#116):=20=D1=81=D1=82=D0=BE=D0=BB=D0=B1?= =?UTF-8?q?=D0=B5=D1=86=20=D0=BA=D0=BE=D0=B4=D0=BE=D0=B2=20=E2=80=94=20?= =?UTF-8?q?=D1=81=D0=BD=D0=B0=D1=87=D0=B0=D0=BB=D0=B0=20=D0=BF=D0=BE=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B3=D0=BE=D0=BB=D0=BE=D0=B2=D0=BA=D1=83=20=C2=AB?= =?UTF-8?q?=D0=9A=D0=BE=D0=B4=C2=BB=20=D0=B1=D0=B5=D0=B7=20=D0=BF=D0=BE?= =?UTF-8?q?=D1=80=D0=BE=D0=B3=D0=B0,=20=D0=BF=D0=BE=D0=B4=D1=81=D1=87?= =?UTF-8?q?=D1=91=D1=82=20=E2=89=A5=203=20=D1=82=D0=BE=D0=BB=D1=8C=D0=BA?= =?UTF-8?q?=D0=BE=20=D0=B1=D0=B5=D0=B7=20=D0=B7=D0=B0=D0=B3=D0=BE=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5.1 --- .../unified-statement-normalization/design.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/openspec/changes/unified-statement-normalization/design.md b/openspec/changes/unified-statement-normalization/design.md index b17732a..f3f86a5 100644 --- a/openspec/changes/unified-statement-normalization/design.md +++ b/openspec/changes/unified-statement-normalization/design.md @@ -392,9 +392,9 @@ sheet:,`. `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`** — пары `ключ:значение` через `;`, ключи по источнику. Цена: минимальная, формат уже такой.