Словари 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
80 lines
4.0 KiB
YAML
80 lines
4.0 KiB
YAML
# Словарь заголовков ОСВ: чем помечены лист, блоки сумм, колонки и служебные строки (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'
|