From bcb6b0b5275b735456dc83924d98aff5ee9c9c4e Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Sat, 17 Oct 2026 19:11:22 +0400 Subject: [PATCH] =?UTF-8?q?docs(#116):=20=D0=A0-6=20=D1=80=D0=B5=D1=88?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=E2=80=94=20=D0=BA=D0=BE=D0=BB=D0=BE=D0=BD?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B1=D0=B5=D0=B7=20=D0=B4=D0=B0=D1=82=D1=8B=20?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B0=D1=91=D1=82=D1=81=D1=8F=20=D1=81=20err?= =?UTF-8?q?or,=20=D0=BE=D1=82=D0=BD=D0=BE=D1=81=D0=B8=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D1=8B=D0=B5=20=D0=BF=D0=B5=D1=80=D0=B8=D0=BE=D0=B4?= =?UTF-8?q?=D1=8B=20=D0=B2=20=D1=81=D0=BB=D0=BE=D0=B2=D0=B0=D1=80=D1=8C?= 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 | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/openspec/changes/unified-statement-normalization/design.md b/openspec/changes/unified-statement-normalization/design.md index 1ba1359..e0b2270 100644 --- a/openspec/changes/unified-statement-normalization/design.md +++ b/openspec/changes/unified-statement-normalization/design.md @@ -1,7 +1,7 @@ # Единый алгоритм нормализации ББ/ОФР (scan-gateway и tabular-parser) — дизайн Issue: arm-ka-docs#116. Статус: черновик; текущая цепочка описана, целевая картина по шагам 1–9 — предложение, ждёт -решений владельца Р-6, Р-7; Р-1…Р-5 решены (brainstorming 17.10.2026). +решения владельца Р-7; Р-1…Р-6 решены (brainstorming 17.10.2026). ## Цель @@ -399,7 +399,7 @@ sheet:,`. `DISCLOSURE` и форма без колонки кодов — - **2. Повторная шапка внутри таблицы** — одно правило: строка внутри сетки с признаком шапки («Код» / та же сигнатура) открывает новый сегмент; у сегмента своя раскладка (позиции колонок могут сдвинуться); колонки значений сегментов сопоставляются по порядку; число не совпало — предупреждение, значения по позиции - scan-gateway: как сейчас, через общее правило - tabular-parser: добавляет: бывший «лист-продолжение со своей раскладкой» становится сегментом -- **3. Дата колонки** — один словарь периодов (`statement_periods.yaml`) → `period_end`; перед разбором — очистка двойников OCR (общий шаг, у Excel не срабатывает) +- **3. Дата колонки** — один словарь периодов (`statement_periods.yaml`) → `period_end`: абсолютные подписи («На 31 марта 2025 г.», «За январь – март 2025 г.», «31.12.2024», «За 9 месяцев 2025 г.», «2024») и относительные («На отчётную дату», «На 31 декабря предыдущего года», «На 31 декабря года, предшествующего предыдущему», «За отчётный период», «За аналогичный период прошлого года» — дата считается от даты отчёта из шапки; даты отчёта нет → колонка без даты). Перед разбором — очистка двойников OCR (общий шаг, у Excel не срабатывает). Относительные подписи — решение владельца 17.10.2026 (Р-6): это бланки по приказу 66н без впечатанных дат, у шлюза сейчас «колонка 0 без даты: На отчетную дату» - scan-gateway: `parse_date` «размером с дату» → словарь - tabular-parser: добавляет очистку двойников (no-op) - **4. Без шапки** — одно правило: строка заголовка не найдена → колонки значений = столбцы правее кода, где в строках с кодами стоят числа; `label` пустая, `period_end` `null`; одно предупреждение «строка заголовка не найдена» @@ -408,9 +408,9 @@ sheet:,`. `DISCLOSURE` и форма без колонки кодов — - **5. Строка нумерации «1 2 3 4 5»** — одно правило `is_numbering_row` → роль `numbering`, в данные не попадает - scan-gateway: добавляет (AURORA-1517) - tabular-parser: как сейчас -- **6. Подпись без периода** — одно правило: подпись — период по словарю → колонка с датой; подпись из словаря исключений («Изменение», «Отклонение», «%», «Темп», «Доля») → пропуск с предупреждением info; иначе, если в столбце есть числа в строках с кодами — колонка без даты + предупреждение (Р-6); иначе пропуск - - scan-gateway: добавляет словарь исключений - - tabular-parser: перестаёт молча пропускать неизвестные числовые колонки +- **6. Подпись без периода** — **решение владельца (17.10.2026, Р-6):** подпись — период по словарю (абсолютный или относительный, п. 3) → колонка с датой; подпись из словаря исключений («Изменение», «Отклонение», «%», «Темп», «Доля», «Примечание») → пропуск с предупреждением `info`; иначе, если в столбце есть числа в строках с кодами (OCR-мусор вроде «| | г» с уверенностью 17 в aep_3, обрезанная или самодельная подпись) — колонка остаётся с подписью как есть и `period_end = null`, предупреждение `error` с привязкой к колонке, документ `needs_check`, аналитик подтверждает после сверки с источником; иначе пропуск. Ядру колонка без даты не мешает: период формы берётся из даты отчёта, без неё — из самой поздней даты остальных колонок (`statement_period`). Пропуск числовой колонки с нераспознанной подписью отвергнут: для OCR это тихая потеря периода с возможным автоподтверждением + - scan-gateway: добавляет словарь исключений и относительные периоды + - tabular-parser: перестаёт молча пропускать неизвестные числовые колонки; добавляет относительные периоды ### Шаг 3 — Отбор строк данных @@ -615,8 +615,10 @@ column_index?}`, а не строка. порога. Код строки подтверждается структурой (перечень кодов формы + порядок), не уверенностью. Уверенность наименования в сервисах не используется; сопоставление со справочным — открытый вопрос ядра (= решение № 7 по спринту 2, AURORA-1519 / 1524). -- **Р-6** (шаг 2, п. 6) — неизвестная числовая колонка без периода: оставлять без даты с предупреждением (`needs_check`) - или пропускать, как парсер сейчас. +- **Р-6** (шаг 2, п. 6) — **решено владельцем 17.10.2026:** числовая колонка с нераспознанной подписью остаётся в + документе без даты с предупреждением `error` (`needs_check`, подтверждение руками); пропуск отвергнут как тихая + потеря периода. Относительные подписи бланка 66н («На отчётную дату», «На 31 декабря предыдущего года», …) + добавляются в словарь периодов и считаются от даты отчёта. - **Р-7** (шаг 8, «Подтверждение проверкой») — снимать ли подсветку сошедшимся соотношением §7 и с `is_recognized = false` (число собрано из грязного текста), а не только с низкой уверенности; предложение — да: сошедшаяся проверка сильнее догадки о мусоре.