arm-tabular-parser/api/rules/statement_headers.yaml
Andrey Epifancev 1abe212524 fix(statements): финальная волна ревью — I-1 (O-9), M-10, I-2, I-3, M-5, M-8, M-11, T13.5, M-6, M-7, T15.1, T15.2
I-1: лист с 1–2 кодами после листа формы — продолжение (min_codes_continuation в словаре).
M-10: тип формы маркера продолжения запрещает присоединение к документу иного типа.
I-2: одиночный месяц не задаёт границы при дате на число/квартале (not_single_month).
I-3: название строки из ближайшей текстовой ячейки левее кодов, пустое имя без confidence.
M-5: units_thousands и okud_code в словаре, без type: ignore в detect.py.
M-8: строка нумерации и нули не считаются строкой без кода с суммами.
M-11: предупреждение о дробных значениях — одно на документ.
T13.5: _upper_header_row возвращает верхнюю строку при склейке хотя бы одной колонки.
M-6/M-7/T15.1/T15.2: остатки statement_markers, описание fractional_share_percent, README, тест воркера.

Refs #14

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EAKRDNzXtRrwmWz9z6PZu3
2026-10-06 21:58:24 +04:00

96 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 §12): заголовки форм и ОКУД, маркер продолжения, подписи колонок, метки шапки.
# Правила записи — как в osv_headers.yaml: паттерн ищется в НОРМАЛИЗОВАННОМ тексте (нижний регистр, «е» вместо «ё»,
# дефисы/тире/переносы -> пробел), без учёта регистра; новый синоним = строка в YAML.
# Заголовок формы -> тип документа. Титул «Бухгалтерская отчетность» (НПЗ) типом не является и здесь не перечислен.
form_titles:
BALANCE:
- 'бухгалтерский\s+баланс'
INCOME:
- 'отчет\s+о\s+финансовых\s+результатах'
- 'отчет\s+о\s+прибылях\s+и\s+убытках'
DISCLOSURE:
- 'пояснени\w*\s+к\s+бухгалтерскому\s+балансу'
- '^расшифровк'
- 'отчет\s+об\s+изменениях\s+капитала'
- 'отчет\s+о\s+движении\s+денежных\s+средств'
- 'отчет\s+о\s+целевом\s+использовании'
# Код ОКУД -> тип (ячейка «Форма по ОКУД 0710001» или сам код). Прочие формы 0710xxx — расшифровки (design D-3, решение №2)
okud:
BALANCE:
- '\b0710001\b'
INCOME:
- '\b0710002\b'
DISCLOSURE:
- '\b07100(0(3|4|5|6|7|8|9)|(1|2|3|4|5|6|7|8|9)\d)\b'
# Сам код ОКУД формы внутри ячейки («Форма по ОКУД 0710001» -> «0710001»)
okud_code: '0710\d{3}'
# Единицы измерения в тысячах: «тыс. руб.», «в тыс. рублей» (для предупреждения о дробных значениях)
units_thousands: 'тыс'
# Маркер страницы-продолжения в 1С-выгрузке: «Форма 0710001 с.2»
continuation:
- '\bформа\s+0710\d{3}\s+с\.?\s*\d+'
# Подписи колонок заголовка таблицы: ячейка целиком
code_caption:
- '^код(ы)?$'
explanations_caption:
- '^пояснени'
# Строка нумерации колонок под шапкой («1 | 2 | 3 | 4 | 5»): каждая непустая ячейка — одно-двузначное число
column_numbering: '^\d{1,2}$'
# Метки шапки документа (значение — правее в той же строке либо в следующей строке)
labels:
organization:
- '^организация\b'
inn:
- '^инн\b'
- 'идентификационный\s+номер\s+налогоплательщика'
okpo:
- 'по\s+окпо'
okopf:
- 'по\s+окопф\b(?!\s*/)'
okfs:
- 'по\s+окфс'
okopf_okfs:
- 'по\s+окопф\s*/\s*окфс'
okei:
- 'по\s+океи'
units:
- 'единица\s+измерения'
address:
- 'местонахождение\s*\(адрес\)'
- 'адрес\s+в\s+пределах\s+места\s+нахождения'
- '^адрес\b'
date:
- '^(отчетная\s+)?дата\b'
# Строки блока аудитора: ИНН ниже этой метки — ИНН аудитора, не организации
auditor:
- 'аудитор'
# Признак, что строка содержит название организации (для имени над меткой «Организация», НПЗ)
legal_form:
- '\b(ооо|ао|пао|зао|оао|нао|ип|гуп|муп|фгуп)\b'
- '"'
- '«'
# Коды строк форм: диапазоны четырёхзначных кодов (пятизначные — по первым четырём цифрам), доля кодов в колонке,
# минимум кодов, чтобы колонка считалась колонкой кодов
line_codes:
ranges:
BALANCE: [1100, 1799]
INCOME: [2100, 2999]
DISCLOSURE: [5000, 5999]
min_share: 0.6
min_codes: 3
# лист, идущий после листа формы: хватает одного кода (лист-продолжение с единственной строкой, напр. 2400 у НПЗ)
min_codes_continuation: 1
# Порог для предупреждения о дробных значениях при единицах в тыс. руб. (процент; 1..100)
fractional_share_percent: 10