arm-tabular-parser/api/rules/osv_headers.yaml
Andrey Epifancev fcd609c633 feat(rules): словари ОСВ (заголовки, группировки, периоды, типы данных) и загрузчик
Словари api/rules/{osv_headers,osv_groups,periods,data_types}.yaml и src/parser/rules.py
(normalize_text, Pattern, load_rules, pydantic-валидация с RuntimeError по файлу и ключу,
currency_aliases по R-6). AST-линтер координат tests/unit/parser/test_no_coordinates.py
перенесён из Task 12 (R-7, правила R-4/R-5). Тест формулировок реальных ОСВ.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-05 12:28:46 +04:00

80 lines
4.0 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'
# Служебные колонки таблицы по тексту заголовка: ИНН, КПП, код, количество, валюта. Ключ — имя колонки в `extra`
service_columns:
inn:
- '\bинн\b'
kpp:
- '\bкпп\b'
code:
- '^код\b'
quantity:
- '^(количество|кол)\b'
currency:
- '^валюта\b'
# Итоговая строка таблицы (начало текста первой колонки)
total_row:
- '^итого\b'
# Метки шапки документа (область выше заголовка таблицы); ключи фиксированы
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'