AURORA-1864: у группы альтернатив одна цель — проверка в загрузчике (#3)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Andrey Epifancev 2026-11-06 22:56:37 +04:00
parent 065bcba25a
commit 19bf045af2
3 changed files with 20 additions and 1 deletions

View File

@ -4,7 +4,7 @@
- `statement_checks.yaml`: необязательный ключ `group` — группа альтернатив мягких соотношений одной цели. В колонке - `statement_checks.yaml`: необязательный ключ `group` — группа альтернатив мягких соотношений одной цели. В колонке
сошлась хоть одна — нарушений группы нет; не сошлась ни одна — одно нарушение, ближайшая к цели. `group` у жёсткого сошлась хоть одна — нарушений группы нет; не сошлась ни одна — одно нарушение, ближайшая к цели. `group` у жёсткого
соотношения — ошибка загрузки словаря. Подсветка, `needs_check` и подтверждение 2400 (Р-21) не менялись (AURORA-1864). соотношения или разные цели в одной группе — ошибка загрузки словаря. Подсветка, `needs_check` и подтверждение 2400 (Р-21) не менялись (AURORA-1864).
- Соотношения 2400 ОФР — группа `net_profit`: полная форма «2400 = 2300 − 2410 + 2420» и «2400 = 2300 + 2410 + 2460»; - Соотношения 2400 ОФР — группа `net_profit`: полная форма «2400 = 2300 − 2410 + 2420» и «2400 = 2300 + 2410 + 2460»;
в упрощённую добавлено «2400 = 2110 − 2120 − 2330 + 2340 − 2350 + 2410». Положительный 2410 (доход по налогу, в упрощённую добавлено «2400 = 2110 − 2120 − 2330 + 2340 − 2350 + 2410». Положительный 2410 (доход по налогу,
ФСБУ 4/2023) больше не даёт ложного предупреждения. ФСБУ 4/2023) больше не даёт ложного предупреждения.

View File

@ -301,6 +301,13 @@ def _load_checks(directory: Path) -> CheckRules:
group=group, group=group,
) )
) )
group_targets: dict[tuple[DocumentType, FormVariant, str], str] = {}
for i, rule in enumerate(relations):
if rule.group is None:
continue
known = group_targets.setdefault((rule.form, rule.variant, rule.group), rule.target)
if known != rule.target:
raise _fail(file, f"relations[{i}].group", f"у группы {rule.group!r} разные цели: {known} и {rule.target}")
return CheckRules( return CheckRules(
tolerance=_number(file, "tolerance", _get(file, data, "tolerance")), tolerance=_number(file, "tolerance", _get(file, data, "tolerance")),
rounding_tolerance_percent=_number( rounding_tolerance_percent=_number(

View File

@ -86,6 +86,18 @@ def test_group_on_strict_relation_rejected(tmp_path: Path) -> None:
load_rules(tmp_path) load_rules(tmp_path)
def test_group_with_different_targets_rejected(tmp_path: Path) -> None:
for path in RULES_DIR.glob("*.yaml"):
(tmp_path / path.name).write_bytes(path.read_bytes())
target = tmp_path / "statement_checks.yaml"
text = target.read_text(encoding="utf-8")
soft = 'relation: "2500 = 2400 + 2510 + 2520 + 2530", strict: false'
assert soft in text
target.write_text(text.replace(soft, soft + ", group: net_profit"), encoding="utf-8")
with pytest.raises(RulesError, match="statement_checks.*group"):
load_rules(tmp_path)
def test_code_orders_with_repeats(rules: Rules) -> None: def test_code_orders_with_repeats(rules: Rules) -> None:
fsbu = rules.code_orders.sequence(Edition.FSBU4, DocumentType.BALANCE, FormVariant.FULL) fsbu = rules.code_orders.sequence(Edition.FSBU4, DocumentType.BALANCE, FormVariant.FULL)
assert fsbu.count("1220") == len(("1220", "1220")) and "1120" not in fsbu assert fsbu.count("1220") == len(("1220", "1220")) and "1120" not in fsbu