I-1: лист с 1–2 кодами после листа формы — продолжение (min_codes_continuation в словаре). M-10: тип формы маркера продолжения запрещает присоединение к документу иного типа. I-2: одиночный месяц не задаёт границы при дате на число/квартале (not_single_month). I-3: название строки из ближайшей текстовой ячейки левее кодов, пустое имя без confidence. M-5: units_thousands и okud_code в словаре, без type: ignore в detect.py. M-8: строка нумерации и нули не считаются строкой без кода с суммами. M-11: предупреждение о дробных значениях — одно на документ. T13.5: _upper_header_row возвращает верхнюю строку при склейке хотя бы одной колонки. M-6/M-7/T15.1/T15.2: остатки statement_markers, описание fractional_share_percent, README, тест воркера. Refs #14 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EAKRDNzXtRrwmWz9z6PZu3
21 lines
663 B
Python
21 lines
663 B
Python
from pathlib import Path
|
|
|
|
from tests.synthetic.generate_statements import FILE_NAMES, generate_all
|
|
|
|
EXPECTED = (
|
|
"st01_both_forms_one_sheet.xlsx",
|
|
"st02_csv_like.xlsx",
|
|
"st03_no_codes.xlsx",
|
|
"st04_mixed_book.xlsx",
|
|
"st05_continuation_only.xlsx",
|
|
"st06_header_variants.xlsx",
|
|
"st07_single_code_continuation.xlsx",
|
|
)
|
|
|
|
|
|
def test_names_and_determinism(tmp_path: Path) -> None:
|
|
assert FILE_NAMES == EXPECTED
|
|
first = {path.name: path.read_bytes() for path in generate_all(tmp_path / "a")}
|
|
second = {path.name: path.read_bytes() for path in generate_all(tmp_path / "b")}
|
|
assert first == second and set(first) == set(EXPECTED)
|