Шаг 2: числа правее таблицы формы — не колонки сумм (#5) #6

Merged
aep merged 2 commits from feat/5-amount-columns-right-of-table into main 2026-10-18 20:29:05 +03:00
Owner

Closes #5. Часть arm-ka-docs#116 (единая нормализация ББ/ОФР). Решение владельца 18.10.2026 (ответ на Р-31 дорожки плана 4).

Что

Шаг 2: если среди колонок значений сегмента есть хотя бы одна с подписью периода, то столбец без текста подписи правее последней такой колонки колонкой сумм не считается. Его числа в значения не попадают, COLUMN_WITHOUT_DATE нет; вместо этого одно предупреждение NUMBERS_OUTSIDE_TABLE (info, документ) с адресами ячеек, собранными по всем сегментам формы. На статус не влияет. Публичный API не менялся (добавлены WarningCode.NUMBERS_OUTSIDE_TABLE и функции модуля columns).

Не меняется: подписанных колонок нет; столбец без подписи между подписанными; столбец правее с нечитаемой подписью (OCR-мусор).

Проверки

  • make check зелёный (278 тестов): красные тесты (а)–(в) на синтетических кандидатах, сегменты, пайплайн (статус done).
  • Реальный файл Межениновская 2025-Q3 1_Форма1_бух_09.xlsx через адаптер tabular-parser (ветка feat/54-statements-v2, пакет подложен в копию вне её дерева): ББ done, колонки M/Q/S, нарушений §7 нет, без COLUMN_WITHOUT_DATE / SEGMENT_COLUMNS_MISMATCH; предупреждение: числа правее таблицы формы не учитываются: TDSheet!V45, TDSheet!W57, TDSheet!U58, TDSheet!V58, TDSheet!V72, TDSheet!W72.
  • Прочие тесты на фикстурах в копии хоста падают одинаково с этим пакетом и с исходным (45 из 348 по выборке -k statement, тот же набор): устаревшие ожидания ветки плана 4, не эта правка.

Rulings I made

  • R-1: код NUMBERS_OUTSIDE_TABLE, info, область document (по образцу ROW_SPLIT, COLUMN_SKIPPED).
  • R-2: «без подписи» = в строках заголовка над столбцом нет текста. Столбец с нечитаемой подписью ("| | г") остаётся колонкой с COLUMN_WITHOUT_DATE: подпись есть, но не разобрана, это решает аналитик.
  • R-3: «последняя подписанная» считается внутри сегмента с заголовком; у сегмента без заголовка правило не применяется (границы нет).
  • R-4: адреса — в тексте (первые 10, дальше «и ещё N») и в locator модели (через перевод строки); контракт отдаёт locator только предупреждениям файла, поэтому у документа адреса видны через message.
  • R-5: предупреждения сегментов сливаются в одно (адреса без повторов): формулы аналитика стоят на любой странице формы.
  • R-6: тест test_empty_label_over_numbers_is_kept переписан: пустая подпись правее единственной датированной колонки теперь вне таблицы (следствие правила, для OCR тоже).

🤖 Generated with Claude Code

Ревью (opus) и правки

  • I-1 fixed 06257a2: лист-продолжение без шапки — столбцы без подписи сверх колонок документа тоже «правее таблицы», адреса в общем предупреждении, без SEGMENT_COLUMNS_MISMATCH.
  • I-2 fixed 06257a2 (частично): подписанный столбец без чисел (потерянная подпись объединённой ячейки) границей таблицы не служит. Остаток: плотная колонка OCR с потерянной подписью справа от подписанных отбрасывается с info — по решению владельца, deferred (вопрос владельцу о пороге плотности).
  • I-3 fixed (docs): Р-44 в design.md, ссылки на него.
  • M-1 fixed 06257a2: адреса в locator разделены переводом строки (имя листа с запятой).
  • M-2 rejected: row:<n> для OCR — сознательно, зафиксировано в спеке.
  • M-3 deferred: формулировка сценария «Неуверенная подпись…» не менялась.
  • M-4 fixed (docs): исключение описано как «любой текст подписи, не разобранный как период/исключение».
  • M-5 fixed 06257a2: тесты на лист-продолжение, подписанный столбец без чисел, ровно 10 адресов, имя листа с запятой.
Closes #5. Часть arm-ka-docs#116 (единая нормализация ББ/ОФР). Решение владельца 18.10.2026 (ответ на Р-31 дорожки плана 4). ## Что Шаг 2: если среди колонок значений сегмента есть хотя бы одна с подписью периода, то столбец без текста подписи правее последней такой колонки колонкой сумм не считается. Его числа в значения не попадают, `COLUMN_WITHOUT_DATE` нет; вместо этого одно предупреждение `NUMBERS_OUTSIDE_TABLE` (`info`, документ) с адресами ячеек, собранными по всем сегментам формы. На статус не влияет. Публичный API не менялся (добавлены `WarningCode.NUMBERS_OUTSIDE_TABLE` и функции модуля `columns`). Не меняется: подписанных колонок нет; столбец без подписи между подписанными; столбец правее с нечитаемой подписью (OCR-мусор). ## Проверки - `make check` зелёный (278 тестов): красные тесты (а)–(в) на синтетических кандидатах, сегменты, пайплайн (статус `done`). - Реальный файл Межениновская 2025-Q3 `1_Форма1_бух_09.xlsx` через адаптер tabular-parser (ветка feat/54-statements-v2, пакет подложен в копию вне её дерева): ББ `done`, колонки M/Q/S, нарушений §7 нет, без `COLUMN_WITHOUT_DATE` / `SEGMENT_COLUMNS_MISMATCH`; предупреждение: `числа правее таблицы формы не учитываются: TDSheet!V45, TDSheet!W57, TDSheet!U58, TDSheet!V58, TDSheet!V72, TDSheet!W72`. - Прочие тесты на фикстурах в копии хоста падают одинаково с этим пакетом и с исходным (45 из 348 по выборке `-k statement`, тот же набор): устаревшие ожидания ветки плана 4, не эта правка. ## Rulings I made - R-1: код `NUMBERS_OUTSIDE_TABLE`, `info`, область `document` (по образцу `ROW_SPLIT`, `COLUMN_SKIPPED`). - R-2: «без подписи» = в строках заголовка над столбцом нет текста. Столбец с нечитаемой подписью (`"| | г"`) остаётся колонкой с `COLUMN_WITHOUT_DATE`: подпись есть, но не разобрана, это решает аналитик. - R-3: «последняя подписанная» считается внутри сегмента с заголовком; у сегмента без заголовка правило не применяется (границы нет). - R-4: адреса — в тексте (первые 10, дальше «и ещё N») и в `locator` модели (через перевод строки); контракт отдаёт `locator` только предупреждениям файла, поэтому у документа адреса видны через `message`. - R-5: предупреждения сегментов сливаются в одно (адреса без повторов): формулы аналитика стоят на любой странице формы. - R-6: тест `test_empty_label_over_numbers_is_kept` переписан: пустая подпись правее единственной датированной колонки теперь вне таблицы (следствие правила, для OCR тоже). 🤖 Generated with [Claude Code](https://claude.com/claude-code) ## Ревью (opus) и правки - I-1 fixed 06257a2: лист-продолжение без шапки — столбцы без подписи сверх колонок документа тоже «правее таблицы», адреса в общем предупреждении, без SEGMENT_COLUMNS_MISMATCH. - I-2 fixed 06257a2 (частично): подписанный столбец без чисел (потерянная подпись объединённой ячейки) границей таблицы не служит. Остаток: плотная колонка OCR с потерянной подписью справа от подписанных отбрасывается с info — по решению владельца, deferred (вопрос владельцу о пороге плотности). - I-3 fixed (docs): Р-44 в design.md, ссылки на него. - M-1 fixed 06257a2: адреса в locator разделены переводом строки (имя листа с запятой). - M-2 rejected: `row:<n>` для OCR — сознательно, зафиксировано в спеке. - M-3 deferred: формулировка сценария «Неуверенная подпись…» не менялась. - M-4 fixed (docs): исключение описано как «любой текст подписи, не разобранный как период/исключение». - M-5 fixed 06257a2: тесты на лист-продолжение, подписанный столбец без чисел, ровно 10 адресов, имя листа с запятой.
aep added 1 commit 2026-10-18 20:20:57 +03:00
Столбец без подписи правее последней колонки с подписью периода колонкой сумм
не считается; вместо COLUMN_WITHOUT_DATE — info NUMBERS_OUTSIDE_TABLE с адресами
ячеек. Решение владельца 18.10.2026 (arm-ka-docs#116, Р-31).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
aep added 1 commit 2026-10-18 20:28:00 +03:00
aep merged commit 3390f92dad into main 2026-10-18 20:29:05 +03:00
This repo is archived. You cannot comment on pull requests.
No Reviewers
No Label
1 Participants
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RSHB/arm-statements#6
No description provided.