arm-tabular-parser/api/rules/osv_headers.yaml
Andrey Epifancev 6fd7adde22 feat(osv): «Итого» сверяется с суммой строк уровня 0; «Итого развернутое» — вторая итоговая строка
- checks: «Итого» = первый корень ACCOUNT либо сумма всех строк уровня 0 (лист без строки корневого счёта,
  верхний уровень 58.01/58.03; OQ-106, OQ-133). Прежнее правило «= первому корню» остаётся достаточным;
  строки-показатели в сумму не входят; основная «Итого» — первая TOTAL листа.
- classify/hierarchy: вторые итоговые строки сразу за «Итого» (osv_headers.yaml: total_row_secondary) остаются
  в таблице как TOTAL уровня 0, а не уходят в OTHER; без обычной «Итого» вторая служит единственной итоговой.

Refs #11

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Claude-Session: cedd7915-2efe-41e5-988c-a9117033598b
2026-10-06 12:50:35 +04:00

78 lines
4.5 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Словарь заголовков ОСВ: чем помечены лист, блоки сумм, колонки и служебные строки (05-domain-rules.md §1.0–§1.2).
#
# Правила записи (проверяет загрузчик):
# - паттерн — регулярное выражение Python, ищется (`search`) в НОРМАЛИЗОВАННОМ тексте ячейки и применяется без учёта
# регистра. Нормализация: нижний регистр, «ё» -> «е», дефисы/тире/неразрывные пробелы/переносы строк -> пробел,
# пробелы схлопываются. Поэтому в паттернах нет «ё», дефисов и диапазонов [а-я]: пишите «оборотно сальдовая
# ведомость», «д т», `\w` вместо диапазона;
# - новый синоним = новая строка в нужном списке, без правки кода.
# Лист содержит ОСВ: любая ячейка (первые строки листа) матчит один из паттернов
sheet_markers:
- 'оборотно\s*сальдовая\s+ведомость'
# Листы форм ББ/ОФР (Срез 2b): ОСВ-парсер их пропускает с предупреждением
statement_markers:
- 'бухгалтерский\s+баланс'
- '0710001'
- 'отчет\s+о\s+финансовых\s+результатах'
- '0710002'
# Три группы сумм в заголовке таблицы. «Оборотно сальдовая» (название ведомости) не должно матчить 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'
# Итоговая строка таблицы (начало текста первой колонки)
total_row:
- '^итого\b'
# Вторая итоговая строка после «Итого» («Итого развернутое» в 1С): тоже TOTAL, но «Итого» листа — основная, первая из них
total_row_secondary:
- '^итого\s+развернут'
# Метки шапки документа (область выше заголовка таблицы); ключи фиксированы
header_markers:
# «по счету 60 за …»: код счёта — сразу после совпадения
account:
- '\bпо\s+счету\b'
# вариант 1: «… за 1 квартал 2025 г.», вариант 2: отдельная строка «Период: 1 квартал 2026 г.»
period:
- '\bза\s+'
- '^период\s*:\s*'
# «Выводимые данные: БУ (данные бухгалтерского учета)»
data_type:
- 'выводимые\s+данные'
# «Валюта БУ, НУ: RUB»
currency:
- '\bвалюта\b'
# «Параметры:» — блок над таблицей
org_params:
- '^параметры\b'
# вариант 2: «Детализация по субсчетам, субконто: Контрагенты, Договоры»; в первой колонке заголовка — «Субконто»
subkonto:
- '\bсубконто\b'
- '\bдетализация\b'