From 8a63ce519645376b05eaa072b719f7427dae817e Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Sun, 18 Oct 2026 14:28:03 +0400 Subject: [PATCH] =?UTF-8?q?VALUE=5FOUT=5FOF=5FRANGE:=20line=5Frefs=20?= =?UTF-8?q?=E2=80=94=20ref=20=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B8,=20?= =?UTF-8?q?=D0=BD=D0=B5=20=D1=8F=D1=87=D0=B5=D0=B9=D0=BA=D0=B8=20=D0=B7?= =?UTF-8?q?=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20(I-2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Адрес ячейки остаётся в message. Добавлен инвариант-тест по golden: line_refs предупреждений документа входят в ref строк, locator нет, column_index есть среди колонок. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W --- arm_statements/lines.py | 2 +- arm_statements/tests/test_golden.py | 12 ++++++++++++ arm_statements/tests/test_lines.py | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/arm_statements/lines.py b/arm_statements/lines.py index 0702806..fc06045 100644 --- a/arm_statements/lines.py +++ b/arm_statements/lines.py @@ -42,7 +42,7 @@ def build_lines( message = f"значение ячейки {cell.ref} вне диапазона numeric(18,2)" warnings.append( make_warning( - WarningCode.VALUE_OUT_OF_RANGE, message, rules, line_refs=(cell.ref,), column_index=column_index + WarningCode.VALUE_OUT_OF_RANGE, message, rules, line_refs=(item.ref,), column_index=column_index ) ) lines.append( diff --git a/arm_statements/tests/test_golden.py b/arm_statements/tests/test_golden.py index d00c536..3058676 100644 --- a/arm_statements/tests/test_golden.py +++ b/arm_statements/tests/test_golden.py @@ -157,3 +157,15 @@ def test_npz_continuation_single_code(rules: Rules) -> None: # Review Focus 5 assert [v.amount for v in line_2400.values] == [D("264"), D("238")] assert "," in doc.locator and not [w for w in doc.warnings if w.code.startswith("SEGMENT_")] assert doc.status is DocStatus.DONE + + +@pytest.mark.parametrize("name", NAMES) +def test_document_warnings_reference_document_parts(name: str, rules: Rules) -> None: + """I-2: line_refs предупреждения — ref строк документа; locator нет; column_index — из колонок.""" + doc = run(name, rules) + line_refs = {ln.ref for ln in doc.lines} + column_indexes = {c.column_index for c in doc.columns} + for warning in doc.warnings: + assert set(warning.line_refs) <= line_refs, warning + assert warning.locator is None, warning + assert warning.column_index is None or warning.column_index in column_indexes, warning diff --git a/arm_statements/tests/test_lines.py b/arm_statements/tests/test_lines.py index 1c868e8..12484b0 100644 --- a/arm_statements/tests/test_lines.py +++ b/arm_statements/tests/test_lines.py @@ -37,7 +37,7 @@ def test_value_out_of_range_warning(rules: Rules) -> None: lines, warnings = statement_lines(cand, rules) assert lines[0].values[0].amount is None assert [(w.code, w.severity, w.line_refs, w.column_index) for w in warnings] == [ - ("VALUE_OUT_OF_RANGE", Severity.INFO, ("Баланс!C2",), 2) + ("VALUE_OUT_OF_RANGE", Severity.INFO, ("Баланс!B2",), 2) ]