detect.py: classify_sheet (ОСВ / форма ББ-ОФР / прочее по словарю), find_table_header (строка с ≥ 2 группами сумм, «Дебет/Кредит» под группой в пределах merged-диапазона или до следующей группы, заголовок в 1–4 строки, в т.ч. «Нач. сальдо Дт» в одной ячейке; без «начала»; свёрнутое сальдо в *_debit + collapsed; свёрнутые «Обороты» и половинчатая пара Дт/Кт — InvalidFormatError с названием группы), text_col, inn_col (заголовок «ИНН» или ≥ 80 % значений из 10/12 цифр), right_edge, extra_cols, group_label_rows, first_data_row, is_header_repeat (две группы или копия строки блока). Pattern.search_normalized — ячейка нормализуется один раз (T3.6). osv_groups: известные группировки OTHER перечислены явно, чтобы строка-метка «Основные средства» в неслитом заголовке была частью блока. Хелпер тестов gridbuilder (Sheet из «картинки»). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
18 lines
1.3 KiB
YAML
18 lines
1.3 KiB
YAML
# Названия группировок ОСВ -> тип группировки `group_type` (05-domain-rules.md §1.1).
|
||
# Паттерны ищутся в нормализованном тексте (см. osv_headers.yaml), первый совпавший побеждает.
|
||
mapping:
|
||
- ['^(счета?|субконто):?$', ACCOUNT]
|
||
- ['^подразделени', DEPARTMENT]
|
||
- ['^контрагент', COUNTERPARTY]
|
||
- ['^договор', CONTRACT]
|
||
# Известные группировки OTHER перечислены явно: по ним детектор узнаёт строку-метку в блоке заголовка таблицы
|
||
# (строка «Основные средства» под «Счет / Подразделение» — часть заголовка, а не первая строка данных)
|
||
- ['^основн\w*\s+средств', OTHER]
|
||
- ['^нематериальн\w*\s+актив', OTHER]
|
||
- ['^номенклатур', OTHER]
|
||
- ['^стать(и|я)\b', OTHER]
|
||
- ['^валют', OTHER]
|
||
|
||
# Всё прочее (не перечисленное выше); такая группировка в отдельной строке блока заголовка не будет узнана как метка
|
||
default: OTHER
|