Решения владельца 27.10.2026 (docs #172): субсчёт с 3 цифрами в сегменте под счётом шапки, код контрагента + название + договоры (стратегия code_blocks), суммы субсчёта из «ИТОГ по …», «ИТОГ» — итог листа, «Поставщики» — вид субконто в таблице, метка «За период» со значением в соседней ячейке, диапазон «01.01.25..30.06.25», год из двух цифр. Синтетика s45 (период, организация) и s46 (блоки), спека osv-parsing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
114 lines
7.8 KiB
YAML
114 lines
7.8 KiB
YAML
# Словарь заголовков ОСВ: чем помечены лист, блоки сумм, колонки и служебные строки (05-domain-rules.md §1.0–§1.2).
|
||
#
|
||
# Правила записи (проверяет загрузчик):
|
||
# - паттерн — регулярное выражение Python, ищется (`search`) в НОРМАЛИЗОВАННОМ тексте ячейки и применяется без учёта
|
||
# регистра. Нормализация: нижний регистр, «ё» -> «е», дефисы/тире/неразрывные пробелы/переносы строк -> пробел,
|
||
# пробелы схлопываются. Поэтому в паттернах нет «ё», дефисов и диапазонов [а-я]: пишите «оборотно сальдовая
|
||
# ведомость», «д т», `\w` вместо диапазона;
|
||
# - новый синоним = новая строка в нужном списке, без правки кода.
|
||
|
||
# Лист содержит ОСВ: любая ячейка (первые строки листа) матчит один из паттернов
|
||
sheet_markers:
|
||
- 'оборотно\s*сальдовая\s+ведомость'
|
||
|
||
# Три группы сумм в заголовке таблицы. «Оборотно сальдовая» (название ведомости) не должно матчить turnover:
|
||
# отсюда границы слова `\bоборот(ы)?\b`.
|
||
groups:
|
||
opening:
|
||
- 'сальдо\s+на\s+начало'
|
||
- '\bнач(альн\w*)?\.?\s*сальдо'
|
||
- 'входящ\w*\s+сальдо'
|
||
turnover:
|
||
- '\bоборот(ы)?\b'
|
||
closing:
|
||
- 'сальдо\s+на\s+конец'
|
||
- '\bкон(ечн\w*)?\.?\s*сальдо'
|
||
- 'исходящ\w*\s+сальдо'
|
||
|
||
# Подзаголовки сумм под группой («Дебет»/«Кредит», «Дт»/«Кт», «Д-т»/«К-т»): ячейка начинается с синонима
|
||
debit:
|
||
- '^(дебет|дт|д т)\b'
|
||
credit:
|
||
- '^(кредит|кт|к т)\b'
|
||
|
||
# Служебные колонки таблицы по тексту заголовка. Код знает колонки ИНН и «Показатели»; прочие колонки таблицы (КПП, код,
|
||
# количество, валюта и т. п.) попадают в `rows[].extra` под текстом своего заголовка и словаря не требуют.
|
||
# (Записи kpp/code/quantity/currency удалены: код их не читал, тест покрытия словарей R-22 их не находил.)
|
||
service_columns:
|
||
inn:
|
||
- '\bинн\b'
|
||
# Колонка вида суммы строки 1С («Показатели», в шапке часто с переносом «Показа-тели»): метки БУ/НУ/Кол./Вал./ПР/ВР
|
||
# (§1.3, AURORA-1613). Метки читает `data_types.yaml` — `indicator_column`
|
||
indicator:
|
||
- '^показа\s?тели$'
|
||
|
||
# Итоговая строка таблицы (начало текста первой колонки)
|
||
total_row:
|
||
- '^итого\b'
|
||
|
||
# Итоговая строка, чей текст — ровно «Итого»: ищется первой, чтобы контрагент «Итого-Сервис» на плоском листе (без outline
|
||
# и отступов) не обрезал таблицу; нет такой — действует `total_row` (начало текста)
|
||
total_row_exact:
|
||
- '^итого$'
|
||
# выгрузка 1С «по контрагентам»: итог листа — «ИТОГ» (без «О»); «ИТОГ по 60.111» — итог субсчёта (subaccount_sums)
|
||
- '^итог$'
|
||
|
||
# Итог субсчёта в выгрузке 1С «по контрагентам»: «ИТОГ по 60.111» — суммы строки-счёта с тем же кодом (группа account);
|
||
# отдельной строкой в результат не попадает (05-domain-rules.md §1.3, AURORA-1714)
|
||
subaccount_sums:
|
||
- '^итог\s+по\s+(?P<account>\S+)$'
|
||
|
||
# Вторая итоговая строка («Итого развернутое» в 1С): тоже TOTAL, но «Итого» листа — основная. Стоит сразу после основной
|
||
# «Итого» или ПЕРЕД ней (плоская форма 1С, #59); сверяется основная
|
||
total_row_secondary:
|
||
- '^итого\s+развернут'
|
||
|
||
# Подписи колонок под названием группировки («Счет» -> «Код» | «Наименование»): это не группировки блока заголовка
|
||
column_captions:
|
||
- '^(код|наименование)$'
|
||
|
||
# ИНН в тексте строки контрагента (OQ-100): в конце текста, 10 или 12 цифр после запятой, скобки, «/», пробела или
|
||
# метки «ИНН» (дефисы нормализация превращает в пробелы), необязательный «/КПП» из 9 цифр. Группы: tail — отрезаемый хвост
|
||
# (разделитель, метка, ИНН), inn — цифры ИНН; название контрагента — текст до tail
|
||
counterparty_inn_suffix:
|
||
- '(?P<tail>[\s,;(/]+(инн\s*[:№]?\s*)?\(?(?P<inn>\d{12}|\d{10})(\s*/\s*\d{9})?\)?)\s*$'
|
||
|
||
# Строка, где есть только ИНН («7701234567», «ИНН 7701234567 / 770101001»): ИНН строкой выше названия контрагента (OQ-130)
|
||
inn_only_row:
|
||
- '^(инн\s*[:№]?\s*)?\(?(?P<inn>\d{12}|\d{10})(\s*/\s*\d{9})?\)?$'
|
||
|
||
# Ячейка колонки ИНН со склеенным «ИНН/КПП»: «7701234567 / 770101001»
|
||
inn_kpp_cell:
|
||
- '^(?P<inn>\d{12}|\d{10})\s*/\s*\d{9}$'
|
||
|
||
# Метки шапки документа (область выше заголовка таблицы); ключи фиксированы
|
||
header_markers:
|
||
# «по счету 60 за …»: код счёта — сразу после совпадения
|
||
# выгрузка 1С «ОСВ по счёту 60 по контрагентам»: «Счет Поставщика» | «60*» — метка и код в соседних ячейках строки
|
||
account:
|
||
- '\bпо\s+счету\b'
|
||
- '\bсчет\s+(поставщика|клиента)\b'
|
||
# вариант 1: «… за 1 квартал 2025 г.», вариант 2: отдельная строка «Период: 1 квартал 2026 г.»
|
||
period:
|
||
# выгрузка 1С «по контрагентам»: «За период» | «01.01.25..30.06.25» — значение в соседней ячейке строки; запись
|
||
# стоит первой: «\bза\s+» ниже совпала бы с «За период» и оставила бы хвостом слово «период»
|
||
- '^за\s+период\b\s*:?\s*'
|
||
- '\bза\s+'
|
||
- '^период\s*:\s*'
|
||
# «Выводимые данные: БУ (данные бухгалтерского учета)»
|
||
data_type:
|
||
- 'выводимые\s+данные'
|
||
# «Валюта БУ, НУ: RUB»
|
||
currency:
|
||
- '\bвалюта\b'
|
||
# «Параметры:» — блок над таблицей
|
||
org_params:
|
||
- '^параметры\b'
|
||
# вариант 2: «Детализация по субсчетам, субконто: Контрагенты, Договоры»; в первой колонке заголовка — «Субконто»
|
||
subkonto:
|
||
- '\bсубконто\b'
|
||
- '\bдетализация\b'
|
||
# плоская форма 1С: «за 2 Квартал 2026 г. План счетов ООО Хреновская Нива» — организация после метки
|
||
chart_of_accounts:
|
||
- '\bплан\s+счетов\b'
|