Andrey Epifancev a9aa6f60b0 Архив change statement-checks-alternatives (AURORA-1864, #209)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 23:00:11 +04:00

7.2 KiB
Raw Blame History

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 (actual 120 ближе к 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, на статус и подсветку не влияет