§7: правило group в statement_checks.yaml, соотношения 2400 полного и упрощённого наборов — альтернативы; OQ-12 закрыт в части 2410. Change statement-checks-alternatives: требование «Шаг 7» спеки statement-normalization. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
7.2 KiB
7.2 KiB
MODIFIED Requirements
Requirement: Шаг 7 — самопроверки §7
Шаг 7 SHALL считаться у обоих источников одним словарём statement_checks.yaml и выдавать StatementChecks {relations_failed[], soft_relations_failed[]}; каждое нарушение — {column_index, relation, codes, expected, actual}, где codes — коды цели и членов соотношения. Правила:
- значение кода в колонке — сумма по всем строкам
okс этим кодом; строкиdetail,unreadable,missingв соотношения не входят; нарушение относится ко всем строкам его кодов; - соотношение посчитано, если непуста цель или хотя бы один член (есть строка
okс кодом иamountнеnull); пусто всё — соотношение пропускается; пустая цель при непустых членах и непустая цель при пустых членах — нарушение; - жёсткое соотношение не сошлось, если расхождение больше допуска ±1 в единицах формы и больше 0,001 % наибольшего
по модулю числа соотношения — тогда оно в
relations_failed; расхождение в пределах округления и мягкие соотношения — вsoft_relations_failed; - члены
abs_terms(2120, 2210, 2220, 2330, 2350, 2410) сравниваются и как записаны, и по модулю; такое соотношение подтверждает величину, но не знак (шаг 8); - набор соотношений — по
form_variant(полный или упрощённый);form_variant = null— полный. В упрощённом наборе соотношения ББ жёсткие, а2400 = 2110 − 2120 − 2330 + 2340 − 2350 − 2410и2400 = 2110 − 2120 − 2330 + 2340 − 2350 + 2410ОФР — мягкие, как2400полного набора; - группа альтернатив (
groupв словаре, только у мягких соотношений одной формы и варианта): в колонке сошлась хоть одна альтернатива — ни одна не попадает вsoft_relations_failed; не сошлась ни одна — вsoft_relations_failedодно нарушение, ближайшая к цели альтернатива (меньшее расхождение; при пустой цели или пустых членах — первая по словарю).groupу жёсткого соотношения и разные цели в одной группе — ошибка загрузки словаря. Соотношения 2400 каждого набора — одна группа: полный —2400 = 2300 − 2410 + 2420и2400 = 2300 + 2410 + 2460, упрощённый — два варианта выше. Знак 2410 (расход или доход по налогу, ФСБУ 4/2023) не определяется — принимается любая альтернатива (OQ-12). Группа не меняет жёстких проверок, подсветки,needs_checkи подтверждения значений (шаг 8, Р-21); - родитель пятизначной подстроки — ближайшая четырёхзначная строка выше с теми же первыми тремя цифрами, иначе код из первых четырёх цифр; «сумма подстрок = родитель» (мягкое) — только если хотя бы одна подстрока в колонке непуста.
checks SHALL быть у каждого BALANCE / INCOME со строками и отсутствовать у документа без строк.
duplicate_line_codes MUST NOT выдаваться.
Scenario: «БАЛАНС» без кода
- WHEN строка «БАЛАНС» ушла в
detail(код потерян), в колонке есть 1100 и 1200 - THEN соотношение
1600 = 1100 + 1200посчитано и нарушено (пустая цель при непустых членах), вrelations_failed
Scenario: Лист только с активом
- WHEN в ББ заполнены 1100, 1200, 1600, а 1300–1700 отсутствуют
- THEN
1600 = 1700нарушено (непустая цель при пустых членах), документneeds_check
Scenario: Повтор кода в соотношении
- WHEN две строки 2410 с суммами 100 и 649
- THEN в соотношениях код 2410 равен 749
Scenario: Упрощённый ОФР с доходом по налогу
- WHEN у упрощённого ОФР 2410 записан со знаком дохода, 2400 с ним сходится только по
2400 = 2110 − 2120 − 2330 + 2340 − 2350 + 2410 - THEN нарушений по 2400 в
soft_relations_failedнет
Scenario: Доход по налогу в полной форме (AURORA-1864)
- WHEN в колонке ОФР 2300 = 100, 2410 = 20 (без минуса и скобок), 2400 = 120
- THEN
2400 = 2300 − 2410 + 2420не сошлось, но сошлось2400 = 2300 + 2410 + 2460из той же группы — нарушений по 2400 вsoft_relations_failedнет
Scenario: Расход по налогу в полной форме
- WHEN 2300 = 100, 2410 = −20 или (20) или 20, 2400 = 80
- THEN сходится
2400 = 2300 − 2410 + 2420— нарушений по 2400 вsoft_relations_failedнет
Scenario: Неверная чистая прибыль — одно нарушение
- WHEN 2300 = 100, 2410 = 20, 2400 = 150 — не сходится ни одна альтернатива группы
- THEN в
soft_relations_failedодно нарушение по 2400 —2400 = 2300 + 2410 + 2460(actual120 ближе к 150, чем 80); документ из-за него неneeds_check
Scenario: Группа считается по колонке
- WHEN в первой колонке 2400 сходится с одной из альтернатив, во второй — ни с одной
- THEN нарушение по 2400 одно и только у второй колонки
Scenario: Группа у жёсткого соотношения
- WHEN в
statement_checks.yamlу соотношения соstrict: trueуказанgroup - THEN словарь не загружается (ошибка загрузки
statement_checks.yaml)
Scenario: Округление итогов
- WHEN
1600 = 1700расходится на 9,02 при итогах ~17 млрд - THEN нарушение в
soft_relations_failed, на статус и подсветку не влияет