# Словарь заголовков ОСВ: чем помечены лист, блоки сумм, колонки и служебные строки (05-domain-rules.md §1.0–§1.2). # # Правила записи (проверяет загрузчик): # - паттерн — регулярное выражение Python, ищется (`search`) в НОРМАЛИЗОВАННОМ тексте ячейки и применяется без учёта # регистра. Нормализация: нижний регистр, «ё» -> «е», дефисы/тире/неразрывные пробелы/переносы строк -> пробел, # пробелы схлопываются. Поэтому в паттернах нет «ё», дефисов и диапазонов [а-я]: пишите «оборотно сальдовая # ведомость», «д т», `\w` вместо диапазона; # - новый синоним = новая строка в нужном списке, без правки кода. # Лист содержит ОСВ: любая ячейка (первые строки листа) матчит один из паттернов. Названия других учётных систем и # отчётов 1С (AURORA-1717) — только с начала ячейки: «… см. оборотную ведомость» в примечании формы листом ОСВ не делает sheet_markers: - 'оборотно\s*сальдовая\s+ведомость' - '^оборотн\w*\s+ведомост' # «Оборотная ведомость по счетам …» (выгрузки КТЗ) # «ОСВ по сч. 41 за 3 кв.», «ОСВ по ДЗ по сч. 62.01» (КТЗ); не «ОСВ за квартал по счетам …» в перечне документов - '^осв\s+по\s+(\w+\s+по\s+)?сч\b' - '^оборотн\w*\s+баланс' # «Оборотный баланс» (КТЗ) - '^фин\.?\s*обороты' # «Фин. Обороты Листок» (Navision, Айсберри) - '^отчет\s+по\s+главной\s+книге' # SAP, ООО «Виола» # Три группы сумм в заголовке таблицы. «Оборотно сальдовая» (название ведомости) не должно матчить turnover: # отсюда границы слова `\bоборот(ы)?\b`. Сторона может стоять в ячейке группы после названия — в том числе вплотную # («НачалоДт», «ОборотыДтВВ»): паттерн группы тогда заканчивается перед стороной (опережающая проверка), остаток ячейки # разбирают `debit`/`credit` (AURORA-1719) groups: opening: - 'сальдо\s+на\s+начало' - '\bнач(альн\w*)?\.?\s*сальдо' - 'входящ\w*\s+сальдо' - 'остат\w*\s+на\s+начало' # «Остаток на начало (периода)» (КТЗ) - 'остат\w*(?=\s+по\s+(дебету|кредиту)\s+на\s+начало)' # «Остаток по дебету на начало» (КТЗ, ЧАЗ) - 'сальдо\s+начальное' # «Сальдо НачальноеДТВВ» (SAP, НМЖК) - 'сальдо\s+вх\b' # «Сальдо вх Дт» (SAP, Виола) - '^начало(?=\s*(дт|кт)\b)' # «НачалоДт» (Navision без названия ведомости, Айсберри) turnover: - '\bоборот(ы)?\b' - '^оборот(ы)?(?=\s*(дт|кт))' # «ОборотДт» (Navision), «ОборотыДтВВ» (SAP, НМЖК) closing: - 'сальдо\s+на\s+конец' - '\bкон(ечн\w*)?\.?\s*сальдо' - 'исходящ\w*\s+сальдо' - 'остат\w*\s+на\s+конец' # «Остаток на конец (периода)» (КТЗ) - 'остат\w*(?=\s+по\s+(дебету|кредиту)\s+на\s+конец)' # «Остаток по кредиту на конец» (КТЗ, ЧАЗ) - 'сальдо\s+конечное' # «Сальдо КонечноеКТВВ» (SAP, НМЖК) - 'сальдо\s+исх\b' # «Сальдо исх Кт» (SAP, Виола) - '^конец(?=\s*(дт|кт)\b)' # «КонецКт» (Navision без названия ведомости, Айсберри) # Подзаголовки сумм под группой («Дебет»/«Кредит», «Дт»/«Кт», «Д-т»/«К-т») или сторона в остатке ячейки группы: # ячейка (остаток) начинается с синонима debit: - '^(дебет|дт|д т)\b' - '^по\s+дебету\b' # «Оборот по дебету», «Остаток по дебету на начало» (КТЗ) - '^дт\s*вв\b' # «Сальдо НачальноеДТВВ» (SAP, НМЖК) credit: - '^(кредит|кт|к т)\b' - '^по\s+кредиту\b' # «Оборот по кредиту» (КТЗ) - '^кт\s*вв\b' # «Сальдо НачальноеКТВВ» (SAP, НМЖК) # Служебные колонки таблицы по тексту заголовка. Код знает колонки ИНН и «Показатели»; прочие колонки таблицы (КПП, код, # количество, валюта и т. п.) попадают в `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) - '^итог$' # «ВСЕГО» — итог листа ведомостей ГК КТЗ по счёту 009 (AURORA-1732) - '^всего$' # Итог субсчёта в выгрузке 1С «по контрагентам»: «ИТОГ по 60.111» — суммы строки-счёта с тем же кодом (группа account); # отдельной строкой в результат не попадает (05-domain-rules.md §1.3, AURORA-1714) subaccount_sums: - '^итог\s+по\s+(?P\S+)$' # Вторая итоговая строка («Итого развернутое» в 1С): тоже TOTAL, но «Итого» листа — основная. Стоит сразу после основной # «Итого» или ПЕРЕД ней (плоская форма 1С, #59); сверяется основная total_row_secondary: - '^итого\s+развернут' # Подписи колонок под названием группировки («Счет» -> «Код» | «Наименование»): это не группировки блока заголовка column_captions: - '^(код|наименование)$' # ИНН в тексте строки контрагента (OQ-100): в конце текста, 10 или 12 цифр после запятой, скобки, «/», пробела или # метки «ИНН» (дефисы нормализация превращает в пробелы), необязательный «/КПП» из 9 цифр. Группы: tail — отрезаемый хвост # (разделитель, метка, ИНН), inn — цифры ИНН; название контрагента — текст до tail counterparty_inn_suffix: - '(?P[\s,;(/]+(инн\s*[:№]?\s*)?\(?(?P\d{12}|\d{10})(\s*/\s*\d{9})?\)?)\s*$' # Строка, где есть только ИНН («7701234567», «ИНН 7701234567 / 770101001»): ИНН строкой выше названия контрагента (OQ-130) inn_only_row: - '^(инн\s*[:№]?\s*)?\(?(?P\d{12}|\d{10})(\s*/\s*\d{9})?\)?$' # Ячейка колонки ИНН со склеенным «ИНН/КПП»: «7701234567 / 770101001» inn_kpp_cell: - '^(?P\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'