ОСВ: строка ИНН рядом с контрагентом — 8 раскладок по содержимому (над/под × в дереве/нет × с суммами/без) #35

Closed
opened 2026-10-13 11:03:52 +03:00 by aep · 1 comment
Owner

Требование (владелец, 13.10.2026)

Разбирать строку ИНН рядом с наименованием контрагента во всех комбинациях:
(ИНН над / под контрагентом) × (в дереве / не в дереве) × (с суммами / без сумм) — по содержимому, без
подсказки в шапке. Подсказка «Контрагенты.ИНН» в шапке (#32, PR #33) — частный случай.

Что сейчас (синтетика на ветке #32, шапка «субконто: Контрагенты»)

ИНН Дерево Суммы Сейчас
над нет без ✅ OQ-130
над нет с ❌ 4 контрагента вместо 2, ИНН нет, needs_check
над да с ❌ контрагенты = ИНН без наименований, done
над да без ❌ то же, needs_check
под да с ❌ ИНН теряются, done (с подсказкой в шапке — #32)
под да без ❌ ИНН теряются, needs_check
под нет с ❌ 4 контрагента вместо 2, needs_check
под нет без ⚠️ ИНН первого контрагента достаётся второму, последний ИНН — контрагент, done

Последняя строка — дефект в main: _glue_inn_rows (OQ-130) всегда отдаёт ИНН следующей строке; при ИНН «под»
сопоставление ГК/ГСК идёт не с тем ЮЛ. Приоритет.

Предлагаемый алгоритм (согласовать в brainstorming)

  1. Строка ИНН — строка, где только ИНН (10/12 цифр числом или текстом, «ИНН …», «ИНН/КПП»), не счёт; без
    подсказки в шапке — только если ИНН проходит контрольную сумму
    (решение владельца 13.10.2026: так номер
    договора из 10 цифр не принимается за ИНН).
  2. В дереве: строка ИНН и наименование — родитель и единственный ребёнок (ИНН сверху или снизу).
  3. Не в дереве: соседняя строка того же уровня; направление — по блоку под одним родителем (начинается строкой ИНН →
    «над», заканчивается → «под»); неоднозначно → не склеивать, needs_check.
  4. Строка ИНН с суммами — суммы равны суммам наименования, иначе не склеивать, needs_check; без сумм — склеивать.
  5. Итог один: контрагент с наименованием и ИНН, строка ИНН из rows убирается, её дети поднимаются.

Заменяет механизм OQ-130 (_glue_inn_rows); включает #34 (ведущий ноль у числовой ячейки).

Состав

  • правило в 05-domain-rules.md §1.3 + OQ (arm-ka-docs);
  • синтетика на 8 раскладок (+ договор с числовым номером, неоднозначное направление);
  • реализация, golden; прогон по всем фикстурам osv/**, osv-dkb/** — без регрессий.

Источник: обсуждение #32 (H-2 в PR #33).

## Требование (владелец, 13.10.2026) Разбирать строку ИНН рядом с наименованием контрагента во всех комбинациях: **(ИНН над / под контрагентом) × (в дереве / не в дереве) × (с суммами / без сумм)** — по содержимому, без подсказки в шапке. Подсказка «Контрагенты.ИНН» в шапке (#32, PR #33) — частный случай. ## Что сейчас (синтетика на ветке #32, шапка «субконто: Контрагенты») | ИНН | Дерево | Суммы | Сейчас | |---|---|---|---| | над | нет | без | ✅ OQ-130 | | над | нет | с | ❌ 4 контрагента вместо 2, ИНН нет, needs_check | | над | да | с | ❌ контрагенты = ИНН без наименований, **done** | | над | да | без | ❌ то же, needs_check | | под | да | с | ❌ ИНН теряются, **done** (с подсказкой в шапке — #32) | | под | да | без | ❌ ИНН теряются, needs_check | | под | нет | с | ❌ 4 контрагента вместо 2, needs_check | | под | нет | без | ⚠️ **ИНН первого контрагента достаётся второму**, последний ИНН — контрагент, **done** | Последняя строка — дефект в main: `_glue_inn_rows` (OQ-130) всегда отдаёт ИНН **следующей** строке; при ИНН «под» сопоставление ГК/ГСК идёт не с тем ЮЛ. Приоритет. ## Предлагаемый алгоритм (согласовать в brainstorming) 1. Строка ИНН — строка, где только ИНН (10/12 цифр числом или текстом, «ИНН …», «ИНН/КПП»), не счёт; **без подсказки в шапке — только если ИНН проходит контрольную сумму** (решение владельца 13.10.2026: так номер договора из 10 цифр не принимается за ИНН). 2. В дереве: строка ИНН и наименование — родитель и единственный ребёнок (ИНН сверху или снизу). 3. Не в дереве: соседняя строка того же уровня; направление — по блоку под одним родителем (начинается строкой ИНН → «над», заканчивается → «под»); неоднозначно → не склеивать, needs_check. 4. Строка ИНН с суммами — суммы равны суммам наименования, иначе не склеивать, needs_check; без сумм — склеивать. 5. Итог один: контрагент с наименованием и ИНН, строка ИНН из `rows` убирается, её дети поднимаются. Заменяет механизм OQ-130 (`_glue_inn_rows`); включает #34 (ведущий ноль у числовой ячейки). ## Состав - правило в `05-domain-rules.md` §1.3 + OQ (arm-ka-docs); - синтетика на 8 раскладок (+ договор с числовым номером, неоднозначное направление); - реализация, golden; прогон по всем фикстурам `osv/**`, `osv-dkb/**` — без регрессий. Источник: обсуждение #32 (H-2 в PR #33).
aep closed this issue 2026-10-13 16:24:47 +03:00
Author
Owner

Закрыто PR #39 (merge 32090f4), docs RSHB/arm-ka-docs#102 (161f0d4), fixtures RSHB/arm-ka-fixtures#19 (09abe3a). Архив спеки — PR #40.

Закрыто PR #39 (merge 32090f4), docs RSHB/arm-ka-docs#102 (161f0d4), fixtures RSHB/arm-ka-fixtures#19 (09abe3a). Архив спеки — PR #40.
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RSHB/arm-tabular-parser#35
No description provided.