Решения владельца 27.10.2026 (docs #172): субсчёт с 3 цифрами в сегменте под счётом шапки, код контрагента + название + договоры (стратегия code_blocks), суммы субсчёта из «ИТОГ по …», «ИТОГ» — итог листа, «Поставщики» — вид субконто в таблице, метка «За период» со значением в соседней ячейке, диапазон «01.01.25..30.06.25», год из двух цифр. Синтетика s45 (период, организация) и s46 (блоки), спека osv-parsing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
50 lines
5.7 KiB
YAML
50 lines
5.7 KiB
YAML
# Текст периода -> квартал и признак нарастающего итога (05-domain-rules.md §1.5).
|
||
# Порядок важен: первый совпавший паттерн побеждает, правила идут от специфичных к общим («9 месяцев» и
|
||
# «12 месяцев» раньше «год», числовые «\b3\s*мес» с границей слова — не ловят «13 месяцев»).
|
||
# ASSUMPTION(OQ-02): is_cumulative=false для Q2–Q4 определяется по тексту «N квартал»; ядро может переопределить по
|
||
# данным (opening Q3 == opening Q1 -> нарастающая).
|
||
rules:
|
||
# Кварталы: арабские и римские номера, «1 кв.», «1-й квартал», «I кв.»
|
||
- {pattern: '\b(1|i)\s*(й|я|ый|ой)?\s*кв', quarter: Q1, is_cumulative: true}
|
||
- {pattern: '\b(2|ii)\s*(й|я|ый|ой)?\s*кв', quarter: Q2, is_cumulative: false}
|
||
- {pattern: '\b(3|iii)\s*(й|я|ый|ой)?\s*кв', quarter: Q3, is_cumulative: false}
|
||
- {pattern: '\b(4|iv)\s*(й|я|ый|ой)?\s*кв', quarter: Q4, is_cumulative: false}
|
||
# Нарастающие периоды: месяцы, диапазон месяцев, диапазон дат «01.01 - 31.03», «с 01.01.2025 по 31.03.2025»
|
||
- {pattern: '\b3\s*мес|январ\w*\s+(по\s+)?март|\b01\.01(\.\d{2,4})?(\s*г\.?)?(\s+(по\s+)?|\.\.)31\.03', quarter: Q1, is_cumulative: true}
|
||
- {pattern: 'полугоди|\b6\s*мес|январ\w*\s+(по\s+)?июн|\b01\.01(\.\d{2,4})?(\s*г\.?)?(\s+(по\s+)?|\.\.)30\.06', quarter: Q2, is_cumulative: true}
|
||
- {pattern: '\b9\s*мес|январ\w*\s+(по\s+)?сентябр|\b01\.01(\.\d{2,4})?(\s*г\.?)?(\s+(по\s+)?|\.\.)30\.09', quarter: Q3, is_cumulative: true}
|
||
- {pattern: '\b12\s*мес|январ\w*\s+(по\s+)?декабр|\b01\.01(\.\d{2,4})?(\s*г\.?)?(\s+(по\s+)?|\.\.)31\.12|годов|\bгод\b', quarter: Q4, is_cumulative: true}
|
||
# Год: «за 2024 г.», «2024 год»; год в конце даты («31.03.2025 г.») годом периода не считается
|
||
- {pattern: '(?<![\d.])(19|20)\d{2}\s*(г\b|год)', quarter: Q4, is_cumulative: true}
|
||
# В тексте периода только год: «2024», «за 2024»
|
||
- {pattern: '^\W*(за\s+)?(19|20)\d{2}\W*$', quarter: Q4, is_cumulative: true}
|
||
|
||
# Год периода: четыре цифры 19xx/20xx, не часть длинного числа (ИНН, номер)
|
||
year: '(?<!\d)(19|20)\d{2}(?!\d)'
|
||
|
||
# Год из двух цифр в дате «01.01.25..30.06.25» (группа yy): 20yy; берётся последняя дата текста — конец диапазона.
|
||
# Используется, только если года из четырёх цифр в тексте нет (§1.5, AURORA-1714)
|
||
short_year_date: '(?<!\d)\d{2}\.\d{2}\.(?P<yy>\d{2})(?![\d.]*\d)'
|
||
|
||
# Конец текста периода в строке шапки: «за 3 квартал 2024 г. (по подразделениям)» -> «3 квартал 2024 г.»;
|
||
# без совпадения период идёт до конца строки
|
||
end: '\bг\.|\bгода?\b'
|
||
|
||
# Названия месяцев в любом падеже; имя группы — номер месяца (m01 … m12): по нему код узнаёт месяц без списка слов
|
||
months: '(?P<m01>январ)|(?P<m02>феврал)|(?P<m03>март)|(?P<m04>апрел)|(?P<m05>ма[йя])|(?P<m06>июн)|(?P<m07>июл)|(?P<m08>август)|(?P<m09>сентябр)|(?P<m10>октябр)|(?P<m11>ноябр)|(?P<m12>декабр)'
|
||
|
||
# Диапазон месяцев с годом конца: «Октябрь 2024 г. - Сентябрь 2025 г.», «с октября 2024 по сентябрь 2025 г.»,
|
||
# «Апрель - Июнь 2025 г.». Группы: m1/y1 — месяц и год начала (год может отсутствовать), m2/y2 — месяц и год конца.
|
||
# Диапазон от января без года начала («январь-март 2025 г.») берут правила выше; здесь он не учитывается (код).
|
||
range: '(?P<m1>(январ|феврал|март|апрел|ма[йя]|июн|июл|август|сентябр|октябр|ноябр|декабр)\w*)\s*(?P<y1>(19|20)\d{2})?\s*(г\.?|года?)?\s*(по\s+|до\s+)?(?P<m2>(январ|феврал|март|апрел|ма[йя]|июн|июл|август|сентябр|октябр|ноябр|декабр)\w*)\s*(?P<y2>(19|20)\d{2})'
|
||
|
||
# Период отдельной ячейкой без метки «за»/«Период:» («9 месяцев 2025 г.» справа в строке «Бухгалтерский | период»):
|
||
# ячейка целиком — период с годом; ищется, только если периода по меткам нет
|
||
standalone:
|
||
- '^(\d{1,2}|[ivx]+)\s*(й|я|ый|ой)?\s*(квартал\w*|кв\b\.?|мес\w*)\s*(19|20)\d{2}\s*(г\b\.?|года?)?$'
|
||
|
||
# Один месяц с годом («Февраль 2024 г.») — период этого месяца, но не когда это дата на число («на 31 декабря 2024 г.»,
|
||
# «по состоянию на 31 марта») или названа длительность («1 квартал», «полугодие», «9 месяцев», «год»): тогда границы —
|
||
# по кварталу словаря
|
||
not_single_month: '\b\d{1,2}\s*(январ|феврал|март|апрел|ма[йя]|июн|июл|август|сентябр|октябр|ноябр|декабр)|кв\b|квартал|полугоди|\d\s*мес|\bгод\b|годов'
|