"""Строки ИНН на уровне листа ОСВ: страховка после классификации (R-8, design №24; change osv-inn-rows-layouts, #35).""" import pytest from gridbuilder import L, M, sheet_from_rows from src.parser.deadline import Deadline from src.parser.osv import OsvParser from src.parser.rules import Rules, load_rules TIMEOUT_SECONDS = 60 DETAIL = "Детализация по субсчетам, субконто: Подразделения, Контрагенты" A = (None, None, 760000, 760000, None, None) INN_A = 7701234560 @pytest.fixture(scope="module") def rules() -> Rules: return load_rules() def test_inn_glued_to_row_that_is_not_a_counterparty_needs_check(rules: Rules) -> None: head: list[list[object]] = [ ["ООО Зерновая"], ["Оборотно-сальдовая ведомость по счету 60"], ["Период: 9 месяцев 2025 г."], [DETAIL], ["Выводимые данные: сумма"], [], ["Субконто", M("Сальдо на начало периода", 2), M("Оборот за период", 2), M("Сальдо на конец периода", 2)], [None, "Дебет", "Кредит", "Дебет", "Кредит", "Дебет", "Кредит"], ] sheet = sheet_from_rows( [ *head, [L(0), "60.01", *A], # 9 [L(1), INN_A, *A], # 10 [L(1), "ООО Альфа", *A], # 11 [L(0), "Итого", *A], ] ) result = OsvParser(rules).parse_sheet(sheet, Deadline(TIMEOUT_SECONDS)) document, ok = result.document, result.ok warnings = [note.message for note in result.notes] assert [(row.row_value, row.group_type) for row in document.rows][1:2] == [("ООО Альфа", "DEPARTMENT")] assert not ok expected = f"строка 10: ИНН {INN_A} отнесён к строке 11, но она не контрагент — проверьте" assert expected in warnings, warnings