status_input: пустая строка организации/ИНН — «нет» (M-1)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
This commit is contained in:
Andrey Epifancev 2026-10-18 14:28:38 +04:00
parent 598ac83855
commit 5cc4522e4a
2 changed files with 12 additions and 1 deletions

View File

@ -86,7 +86,7 @@ def status_input(document: StatementDocument) -> StatusInput:
return StatusInput( return StatusInput(
document_type=document.document_type, document_type=document.document_type,
layout_found=document.lines != (), layout_found=document.lines != (),
has_organization_or_inn=header.organization_name.value is not None or header.inn.value is not None, has_organization_or_inn=bool(header.organization_name.value or header.inn.value),
period_known=period_known, period_known=period_known,
needs_review_fields=header.needs_review_fields, needs_review_fields=header.needs_review_fields,
lines=tuple(StatusLine(line.line_status, line.needs_review) for line in document.lines), lines=tuple(StatusLine(line.line_status, line.needs_review) for line in document.lines),

View File

@ -2,6 +2,7 @@ from dataclasses import replace
from datetime import date from datetime import date
from decimal import Decimal as D from decimal import Decimal as D
from arm_statements import status_input_from_contract, to_contract
from arm_statements.header import parse_header from arm_statements.header import parse_header
from arm_statements.issues import make_warning from arm_statements.issues import make_warning
from arm_statements.loader import Rules from arm_statements.loader import Rules
@ -10,6 +11,7 @@ from arm_statements.model import (
DocumentType, DocumentType,
EnvelopeStatus, EnvelopeStatus,
FormVariant, FormVariant,
HeaderField,
LineStatus, LineStatus,
PeriodKind, PeriodKind,
Severity, Severity,
@ -115,3 +117,12 @@ def test_status_input_from_document(rules: Rules) -> None:
assert document_status(data) is DONE assert document_status(data) is DONE
empty = replace(doc, columns=(), lines=(), checks=None) empty = replace(doc, columns=(), lines=(), checks=None)
assert (status_input(empty).layout_found, status_input(empty).period_known) == (False, False) assert (status_input(empty).layout_found, status_input(empty).period_known) == (False, False)
def test_empty_string_organization_and_inn_mean_absent(rules: Rules) -> None:
"""M-1: пустая строка в шапке — «нет»; совпадает с расчётом по контракту."""
empty = HeaderField("", 100.0, "")
head = replace(parse_header(hdr(), rules), organization_name=empty, inn=empty)
doc = StatementDocument(DocumentType.BALANCE, None, "l", head, (), (), None, DONE, ())
assert status_input(doc).has_organization_or_inn is False
assert status_input_from_contract(to_contract(doc)).has_organization_or_inn is False