From dc3d7c8ce9ba2ad3dfb7a036d928153b6a8fc2a1 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Wed, 28 Oct 2026 21:07:08 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=A1=D0=92:=20=D0=BF=D1=80=D0=B8=D0=B7?= =?UTF-8?q?=D0=BD=D0=B0=D0=BA=20=C2=AB=D0=9E=D0=A1=D0=92=20=D0=BF=D0=BE=20?= =?UTF-8?q?=D1=81=D1=87.=C2=BB=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20?= =?UTF-8?q?=C2=AB=D0=9E=D0=A1=D0=92=E2=80=A6=C2=BB=20=E2=80=94=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D1=87=D0=B5=D0=BD=D1=8C=20=D0=B4=D0=BE=D0=BA?= =?UTF-8?q?=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=BE=D0=B2=20=D1=88=D0=B0=D0=B1?= =?UTF-8?q?=D0=BB=D0=BE=D0=BD=D0=B0=20=D0=B1=D0=B0=D0=BD=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B5=20=D0=9E=D0=A1=D0=92=20(#81)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Регрессия банка первички: «ОСВ за квартал по счетам …» на листе «Входные данные_ИП» роняла книги расшифровок. Негатив s55 дополнен листом-перечнем. Co-Authored-By: Claude Opus 5.5 --- api/rules/osv_headers.yaml | 3 ++- api/tests/synthetic/generate.py | 14 ++++++++++++-- api/tests/synthetic/test_synthetic_files.py | 7 ++++++- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/api/rules/osv_headers.yaml b/api/rules/osv_headers.yaml index a0ac2a7..27648d3 100644 --- a/api/rules/osv_headers.yaml +++ b/api/rules/osv_headers.yaml @@ -12,7 +12,8 @@ sheet_markers: - 'оборотно\s*сальдовая\s+ведомость' - '^оборотн\w*\s+ведомост' # «Оборотная ведомость по счетам …» (выгрузки КТЗ) - - '^осв\b' # «ОСВ по сч. 41 за 3 кв.» (КТЗ) + # «ОСВ по сч. 41 за 3 кв.», «ОСВ по ДЗ по сч. 62.01» (КТЗ); не «ОСВ за квартал по счетам …» в перечне документов + - '^осв\s+по\s+(\w+\s+по\s+)?сч\b' - '^оборотн\w*\s+баланс' # «Оборотный баланс» (КТЗ) - '^фин\.?\s*обороты' # «Фин. Обороты Листок» (Navision, Айсберри) - '^отчет\s+по\s+главной\s+книге' # SAP, ООО «Виола» diff --git a/api/tests/synthetic/generate.py b/api/tests/synthetic/generate.py index acf2361..327c886 100644 --- a/api/tests/synthetic/generate.py +++ b/api/tests/synthetic/generate.py @@ -1286,8 +1286,9 @@ def _s54() -> list[SheetSpec]: def _s55() -> list[SheetSpec]: - """Негатив: названия, похожие на ведомость, но не ведомость (не с начала ячейки, «Оборотный капитал»), и отчёт 1С - «Обороты счета» с колонками корр. счетов между «Оборот Дт» и «Оборот Кт» (R-1) — все три листа прочие.""" + """Негатив: названия, похожие на ведомость, но не ведомость (не с начала ячейки, «ОСВ за квартал по счетам …» в + перечне документов шаблона банка, «Оборотный капитал»), и отчёт 1С «Обороты счета» с колонками корр. счетов между + «Оборот Дт» и «Оборот Кт» (R-1) — все листы прочие.""" return [ build_osv(OsvSpec(inn_col=5, first_sum_col=7), base_tree(), "ОСВ 60"), table_sheet( @@ -1299,6 +1300,15 @@ def _s55() -> list[SheetSpec]: ["Выручка", D("100000.00")], ], ), + table_sheet( + "Входные данные", + [ + ["Перечень документов к заявке"], + ["№", "Документ", "Срок"], + [1, "Расшифровка дебиторской задолженности", "ежеквартально"], + [2, "ОСВ за квартал по счетам бухгалтерского учета 02, 58, 60, 62, 66, 67, 76", "ежеквартально"], + ], + ), table_sheet( "Капитал", [ diff --git a/api/tests/synthetic/test_synthetic_files.py b/api/tests/synthetic/test_synthetic_files.py index 7afe5ed..2dd4ed3 100644 --- a/api/tests/synthetic/test_synthetic_files.py +++ b/api/tests/synthetic/test_synthetic_files.py @@ -941,7 +941,12 @@ def test_neg_s55_titles_like_osv_are_other(fixtures_dir: Path) -> None: «Оборот Кт» (R-1, R-11) — прочие листы; ОСВ одна.""" outcome = parse_named(fixtures_dir, S55) - assert [doc.locator for doc in documents(outcome)] == ["sheet:ОСВ 60"] + # «Входные данные» (перечень документов шаблона банка, R-13) пакет форм относит к расшифровке — как реальный лист + # «Входные данные_ИП» на базе; главное — не ОСВ и книга не падает + assert [(d.document_type, d.locator) for d in outcome.documents] == [ + ("OSV", "sheet:ОСВ 60"), + ("DISCLOSURE", "sheet:Входные данные"), + ] assert sheet_other(outcome) == ["sheet:Справка", "sheet:Капитал", "sheet:Обороты счета"]