From 556bb110b67b1b5061eaee3ae706fd0e87a28e92 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Mon, 19 Oct 2026 11:40:38 +0400 Subject: [PATCH 1/9] =?UTF-8?q?=D0=A1=D0=B8=D0=BD=D1=82=D0=B5=D1=82=D0=B8?= =?UTF-8?q?=D0=BA=D0=B0=20s40=E2=80=93s44:=20=D0=BF=D0=BB=D0=BE=D1=81?= =?UTF-8?q?=D0=BA=D0=B0=D1=8F=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=20=D0=9E?= =?UTF-8?q?=D0=A1=D0=92=201=D0=A1,=20=D1=81=D0=BD=D0=B8=D0=BC=D0=BA=D0=B8?= =?UTF-8?q?=20=D1=82=D0=B5=D0=BA=D1=83=D1=89=D0=B5=D0=B3=D0=BE=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F=20(tabular-par?= =?UTF-8?q?ser#59)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 5.5 --- .../synthetic/s40_flat_header_account.json | 8 + .../synthetic/s41_flat_chart_of_accounts.json | 8 + .../s42_subaccounts_totals_reversed.json | 204 ++++++++++++++++++ .../synthetic/s43_subkonto_unnamed_60.json | 166 ++++++++++++++ .../synthetic/s44_subkonto_unnamed_10.json | 166 ++++++++++++++ osv/synthetic/s40_flat_header_account.xlsx | Bin 0 -> 5483 bytes osv/synthetic/s41_flat_chart_of_accounts.xlsx | Bin 0 -> 5420 bytes .../s42_subaccounts_totals_reversed.xlsx | Bin 0 -> 5424 bytes osv/synthetic/s43_subkonto_unnamed_60.xlsx | Bin 0 -> 5422 bytes osv/synthetic/s44_subkonto_unnamed_10.xlsx | Bin 0 -> 5410 bytes 10 files changed, 552 insertions(+) create mode 100644 golden/expected_osv_parse/synthetic/s40_flat_header_account.json create mode 100644 golden/expected_osv_parse/synthetic/s41_flat_chart_of_accounts.json create mode 100644 golden/expected_osv_parse/synthetic/s42_subaccounts_totals_reversed.json create mode 100644 golden/expected_osv_parse/synthetic/s43_subkonto_unnamed_60.json create mode 100644 golden/expected_osv_parse/synthetic/s44_subkonto_unnamed_10.json create mode 100644 osv/synthetic/s40_flat_header_account.xlsx create mode 100644 osv/synthetic/s41_flat_chart_of_accounts.xlsx create mode 100644 osv/synthetic/s42_subaccounts_totals_reversed.xlsx create mode 100644 osv/synthetic/s43_subkonto_unnamed_60.xlsx create mode 100644 osv/synthetic/s44_subkonto_unnamed_10.xlsx diff --git a/golden/expected_osv_parse/synthetic/s40_flat_header_account.json b/golden/expected_osv_parse/synthetic/s40_flat_header_account.json new file mode 100644 index 0000000..aaa1295 --- /dev/null +++ b/golden/expected_osv_parse/synthetic/s40_flat_header_account.json @@ -0,0 +1,8 @@ +{ + "status": "error", + "error": { + "code": "INVALID_FORMAT", + "message": "лист «Лист_1», шаг «иерархия строк»: иерархия строк не определена" + }, + "metrics": {} +} diff --git a/golden/expected_osv_parse/synthetic/s41_flat_chart_of_accounts.json b/golden/expected_osv_parse/synthetic/s41_flat_chart_of_accounts.json new file mode 100644 index 0000000..aaa1295 --- /dev/null +++ b/golden/expected_osv_parse/synthetic/s41_flat_chart_of_accounts.json @@ -0,0 +1,8 @@ +{ + "status": "error", + "error": { + "code": "INVALID_FORMAT", + "message": "лист «Лист_1», шаг «иерархия строк»: иерархия строк не определена" + }, + "metrics": {} +} diff --git a/golden/expected_osv_parse/synthetic/s42_subaccounts_totals_reversed.json b/golden/expected_osv_parse/synthetic/s42_subaccounts_totals_reversed.json new file mode 100644 index 0000000..ad11ab2 --- /dev/null +++ b/golden/expected_osv_parse/synthetic/s42_subaccounts_totals_reversed.json @@ -0,0 +1,204 @@ +{ + "schema_version": "2.0", + "service": { + "name": "tabular-parser" + }, + "status": "needs_check", + "metrics": { + "rows": 5, + "warnings": [] + }, + "documents": [ + { + "document_type": "OSV", + "locator": "sheet:Лист_1", + "status": "needs_check", + "warnings": [ + { + "code": "OSV_HIERARCHY_BY_ACCOUNT_PATTERN", + "severity": "info", + "message": "иерархия строк — по кодам счетов (account_pattern)" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "тип выводимых данных (БУ/НУ/сумма) в шапке не найден" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "валюта в шапке не найдена" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "код счёта «76.2» взят из первой строки-счёта таблицы: в шапке «по счету …» нет" + }, + { + "code": "OSV_BALANCE_IDENTITY", + "severity": "info", + "message": "§1.4: сальдо на начало + обороты ≠ сальдо на конец (±0.01): строки 14" + }, + { + "code": "OSV_PARENT_SUM", + "severity": "info", + "message": "§1.4: суммы родителя ≠ сумме детей (±0.01): строки 13" + } + ], + "header": { + "organization_name": "ООО \"Товарное хозяйство\"", + "organization_inn": null, + "account_code_raw": "76.2", + "period_text": "2025 г.", + "period_year": 2025, + "period_quarter": "Q4", + "is_cumulative": true, + "period_start": "2025-01-01", + "period_end": "2025-12-31", + "is_from_year_start": true, + "data_type": null, + "currency": null, + "header_variant": 1 + }, + "group_schema": [ + { + "type": "ACCOUNT", + "name": "Субконто" + } + ], + "columns": { + "opening_debit": "B", + "opening_credit": "C", + "turnover_debit": "D", + "turnover_credit": "E", + "closing_debit": "F", + "closing_credit": "G" + }, + "rows": [ + { + "row_number": 10, + "level": 0, + "parent_row_number": null, + "row_value": "76.2", + "group_type": "ACCOUNT", + "group_name": "Субконто", + "account_code_raw": "76.2", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": null, + "opening_debit": "1000.00", + "opening_credit": null, + "turnover_debit": null, + "turnover_credit": "1000.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 11, + "level": 0, + "parent_row_number": null, + "row_value": "76.5", + "group_type": "ACCOUNT", + "group_name": "Субконто", + "account_code_raw": "76.5", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": null, + "opening_debit": null, + "opening_credit": "300.00", + "turnover_debit": "700.00", + "turnover_credit": "600.00", + "closing_debit": null, + "closing_credit": "200.00", + "extra": null + }, + { + "row_number": 12, + "level": 0, + "parent_row_number": null, + "row_value": "76.Н", + "group_type": "ACCOUNT", + "group_name": "Субконто", + "account_code_raw": "76.Н", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": null, + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "5000.00", + "turnover_credit": "5000.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 13, + "level": 1, + "parent_row_number": 12, + "row_value": "76.Н.1", + "group_type": "ACCOUNT", + "group_name": "Субконто", + "account_code_raw": "76.Н.1", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": null, + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "5000.00", + "turnover_credit": "5000.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 14, + "level": 2, + "parent_row_number": 13, + "row_value": "Итого развернутое", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "76.Н.1", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": null, + "opening_debit": "1000.00", + "opening_credit": "300.00", + "turnover_debit": null, + "turnover_credit": null, + "closing_debit": null, + "closing_credit": "200.00", + "extra": null + }, + { + "row_number": 15, + "level": 0, + "parent_row_number": null, + "row_value": "Итого", + "group_type": "TOTAL", + "group_name": null, + "account_code_raw": null, + "counterparty_name": null, + "counterparty_inn": null, + "data_type": null, + "opening_debit": "700.00", + "opening_credit": null, + "turnover_debit": "5700.00", + "turnover_credit": "6600.00", + "closing_debit": null, + "closing_credit": "200.00", + "extra": null + } + ], + "checks": { + "total_row_matches_root": true, + "balance_identity_violations": [ + 14 + ], + "parent_sum_violations": [ + 13 + ] + } + } + ] +} diff --git a/golden/expected_osv_parse/synthetic/s43_subkonto_unnamed_60.json b/golden/expected_osv_parse/synthetic/s43_subkonto_unnamed_60.json new file mode 100644 index 0000000..1413728 --- /dev/null +++ b/golden/expected_osv_parse/synthetic/s43_subkonto_unnamed_60.json @@ -0,0 +1,166 @@ +{ + "schema_version": "2.0", + "service": { + "name": "tabular-parser" + }, + "status": "done", + "metrics": { + "rows": 3, + "warnings": [] + }, + "documents": [ + { + "document_type": "OSV", + "locator": "sheet:Лист_1", + "status": "done", + "warnings": [ + { + "code": "OSV_HIERARCHY_BY_INDENT", + "severity": "info", + "message": "иерархия строк — по отступам (indent)" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "тип выводимых данных (БУ/НУ/сумма) в шапке не найден" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "валюта в шапке не найдена" + } + ], + "header": { + "organization_name": "ООО \"Октябрьское\"", + "organization_inn": null, + "account_code_raw": "60", + "period_text": "9 месяцев 2024 г.", + "period_year": 2024, + "period_quarter": "Q3", + "is_cumulative": true, + "period_start": "2024-01-01", + "period_end": "2024-09-30", + "is_from_year_start": true, + "data_type": null, + "currency": null, + "header_variant": 1 + }, + "group_schema": [ + { + "type": "ACCOUNT", + "name": "Субконто" + } + ], + "columns": { + "opening_debit": "B", + "opening_credit": "C", + "turnover_debit": "D", + "turnover_credit": "E", + "closing_debit": "F", + "closing_credit": "G" + }, + "rows": [ + { + "row_number": 7, + "level": 0, + "parent_row_number": null, + "row_value": "60.01", + "group_type": "ACCOUNT", + "group_name": "Субконто", + "account_code_raw": "60.01", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": null, + "opening_debit": "34618000.00", + "opening_credit": null, + "turnover_debit": "4236500.00", + "turnover_credit": "38854500.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 8, + "level": 1, + "parent_row_number": 7, + "row_value": "ИП Знаменских А.И.", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "60.01", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": null, + "opening_debit": "34618000.00", + "opening_credit": null, + "turnover_debit": null, + "turnover_credit": "34618000.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 9, + "level": 1, + "parent_row_number": 7, + "row_value": "ООО \"ЭСТЕТ ОМСК\"", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "60.01", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": null, + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "4236500.00", + "turnover_credit": "4236500.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 10, + "level": 0, + "parent_row_number": null, + "row_value": "Итого", + "group_type": "TOTAL", + "group_name": null, + "account_code_raw": null, + "counterparty_name": null, + "counterparty_inn": null, + "data_type": null, + "opening_debit": "34618000.00", + "opening_credit": null, + "turnover_debit": "4236500.00", + "turnover_credit": "38854500.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 11, + "level": 0, + "parent_row_number": null, + "row_value": "Итого развернутое", + "group_type": "TOTAL", + "group_name": null, + "account_code_raw": null, + "counterparty_name": null, + "counterparty_inn": null, + "data_type": null, + "opening_debit": "34618000.00", + "opening_credit": null, + "turnover_debit": "4236500.00", + "turnover_credit": "38854500.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + } + ], + "checks": { + "total_row_matches_root": true, + "balance_identity_violations": [], + "parent_sum_violations": [] + } + } + ] +} diff --git a/golden/expected_osv_parse/synthetic/s44_subkonto_unnamed_10.json b/golden/expected_osv_parse/synthetic/s44_subkonto_unnamed_10.json new file mode 100644 index 0000000..ef89306 --- /dev/null +++ b/golden/expected_osv_parse/synthetic/s44_subkonto_unnamed_10.json @@ -0,0 +1,166 @@ +{ + "schema_version": "2.0", + "service": { + "name": "tabular-parser" + }, + "status": "done", + "metrics": { + "rows": 3, + "warnings": [] + }, + "documents": [ + { + "document_type": "OSV", + "locator": "sheet:Лист_1", + "status": "done", + "warnings": [ + { + "code": "OSV_HIERARCHY_BY_INDENT", + "severity": "info", + "message": "иерархия строк — по отступам (indent)" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "тип выводимых данных (БУ/НУ/сумма) в шапке не найден" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "валюта в шапке не найдена" + } + ], + "header": { + "organization_name": "ООО \"Октябрьское\"", + "organization_inn": null, + "account_code_raw": "10", + "period_text": "9 месяцев 2024 г.", + "period_year": 2024, + "period_quarter": "Q3", + "is_cumulative": true, + "period_start": "2024-01-01", + "period_end": "2024-09-30", + "is_from_year_start": true, + "data_type": null, + "currency": null, + "header_variant": 1 + }, + "group_schema": [ + { + "type": "ACCOUNT", + "name": "Субконто" + } + ], + "columns": { + "opening_debit": "B", + "opening_credit": "C", + "turnover_debit": "D", + "turnover_credit": "E", + "closing_debit": "F", + "closing_credit": "G" + }, + "rows": [ + { + "row_number": 7, + "level": 0, + "parent_row_number": null, + "row_value": "10.01", + "group_type": "ACCOUNT", + "group_name": "Субконто", + "account_code_raw": "10.01", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": null, + "opening_debit": "34618000.00", + "opening_credit": null, + "turnover_debit": "4236500.00", + "turnover_credit": "38854500.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 8, + "level": 1, + "parent_row_number": 7, + "row_value": "Мука пшеничная", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "10.01", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": null, + "opening_debit": "34618000.00", + "opening_credit": null, + "turnover_debit": null, + "turnover_credit": "34618000.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 9, + "level": 1, + "parent_row_number": 7, + "row_value": "Сахар-песок", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "10.01", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": null, + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "4236500.00", + "turnover_credit": "4236500.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 10, + "level": 0, + "parent_row_number": null, + "row_value": "Итого", + "group_type": "TOTAL", + "group_name": null, + "account_code_raw": null, + "counterparty_name": null, + "counterparty_inn": null, + "data_type": null, + "opening_debit": "34618000.00", + "opening_credit": null, + "turnover_debit": "4236500.00", + "turnover_credit": "38854500.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 11, + "level": 0, + "parent_row_number": null, + "row_value": "Итого развернутое", + "group_type": "TOTAL", + "group_name": null, + "account_code_raw": null, + "counterparty_name": null, + "counterparty_inn": null, + "data_type": null, + "opening_debit": "34618000.00", + "opening_credit": null, + "turnover_debit": "4236500.00", + "turnover_credit": "38854500.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + } + ], + "checks": { + "total_row_matches_root": true, + "balance_identity_violations": [], + "parent_sum_violations": [] + } + } + ] +} diff --git a/osv/synthetic/s40_flat_header_account.xlsx b/osv/synthetic/s40_flat_header_account.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..5f201a3e9ab4dc4a7f312effe33d54a809ae9ef2 GIT binary patch literal 5483 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

)DrJiDHyRp*4NfIYf+l z7AsT&(R~ zdANUFGvieqkojft@K{JyhAT%fcKCFffb+*OOD|W4!(@Y+>-Dn} zthnta*IH{2ERs{C^YV@~CKY+Z8RtL&)w{uY7}j`NW<}}Fb)nEf!NBn;eQd6hf)nRS z97HYBJ+VS6YoP^loNsAS>$$XfcRXA~B6-o8$(tWOI;DWg>R5S!_GhBe6in^1NB{sA zB2oO`D*H7_EgT)~e(5YaR#u~fmq4L{=mNm3pc!7g6@pa+2560Qxx_ycDBca4d?;KEwMm`RN^7b{;#$D0GrulnEn&Hu z<9wxJUD)R2oo3xJ9vmNKW&Ey;SaMgIbILF_$qrypLYvP*$@h>hLvor~axW|g zM;cA&5jHsb$^-*ctr&{-cx}qKvjI8IMzF{kTbG+Zt}*0^u$8lFNPb#Ma$;ZCCpyk= z{K)}pUX>Tj*yN9knyvel?W{5n><;!f2Tll|eJlQ?h%%8G3gtcct`ab* z$+&g0P(ic~peP#8K`!7fB_$6Fz90;GT2<1%OVtKYrfK4R2}^GMX$9mFjPMcHni3~E zwqfnF?%AOQK*Xs@6(*NSSffw#R_Oh(HMV5yFl?!p+UOou_r|DcapB!D%oc13NtOA3 z5IMx>^)00WqPeS)zW+E`bAOs_e>8-K`(Op4i*o!)s2P^(iUxLS;$j{MEDKEV1f(-Y#tYI{c zd6+GI#0CR3g?v>&U1-z@B}@3~3j7pbC;$Tvm8Z7{dw2vd+18U}98= zJqPhu%~C_^H`|z z+BgV{aHbA5U?bCht0b~lF1FWLbPa5^JHrNEbjH2Z6M25l1aUt=?W!E0JNC$CyD_5l z!q2(c_nEB7Pw0M*8@4Q2A&ppck&sDH{(oZ(LFnJFKm^18*CxA#sUC=NFD!) z{+B~_AAaAc`3Js>`1}82+uRRue^LK;fFN#!?}rHRU)T2gQSPq-|Bix0g!6Zle-?xL z(EE-2ALs|XKic|z;Qhw<56~0QC;#`(|J5e%gYWD7AMg)^xrqS(KdQeU=f0HwiPMj8 b82^i~G*!_Mz8V04iFivPS~~eJ0RsL9Nz;tY literal 0 HcmV?d00001 diff --git a/osv/synthetic/s41_flat_chart_of_accounts.xlsx b/osv/synthetic/s41_flat_chart_of_accounts.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..258c5f42f0493e2c0b3f2cf28290dc938f0f3ef0 GIT binary patch literal 5420 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 WXcAz}F#v!Vd&ps1`aJ08w|@aJJXeGO literal 0 HcmV?d00001 diff --git a/osv/synthetic/s43_subkonto_unnamed_60.xlsx b/osv/synthetic/s43_subkonto_unnamed_60.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..43114b8730a7b7412027223362de3c6f9389a4fb GIT binary patch literal 5422 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 XBYh&AH3k5X;SLpCOP`_p_3eKEfInLX literal 0 HcmV?d00001 diff --git a/osv/synthetic/s44_subkonto_unnamed_10.xlsx b/osv/synthetic/s44_subkonto_unnamed_10.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..46da380999ef5c1ddedb7cb835297e1a1865533c GIT binary patch literal 5410 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 BTWbIS literal 0 HcmV?d00001 From a3ebbaa9d7a8d867900a469696c1ddd5a8bc5548 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Mon, 19 Oct 2026 11:47:53 +0400 Subject: [PATCH 2/9] =?UTF-8?q?=D0=A1=D0=BD=D0=B8=D0=BC=D0=BA=D0=B8=20s40?= =?UTF-8?q?=E2=80=93s42:=20=D1=88=D0=B0=D0=BF=D0=BA=D0=B0=20=D0=BF=D0=BB?= =?UTF-8?q?=D0=BE=D1=81=D0=BA=D0=BE=D0=B9=20=D1=84=D0=BE=D1=80=D0=BC=D1=8B?= =?UTF-8?q?=20(tabular-parser#59)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 5.5 --- .../synthetic/s42_subaccounts_totals_reversed.json | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/golden/expected_osv_parse/synthetic/s42_subaccounts_totals_reversed.json b/golden/expected_osv_parse/synthetic/s42_subaccounts_totals_reversed.json index ad11ab2..0d4008a 100644 --- a/golden/expected_osv_parse/synthetic/s42_subaccounts_totals_reversed.json +++ b/golden/expected_osv_parse/synthetic/s42_subaccounts_totals_reversed.json @@ -29,11 +29,6 @@ "severity": "info", "message": "валюта в шапке не найдена" }, - { - "code": "OSV_HEADER", - "severity": "info", - "message": "код счёта «76.2» взят из первой строки-счёта таблицы: в шапке «по счету …» нет" - }, { "code": "OSV_BALANCE_IDENTITY", "severity": "info", @@ -48,7 +43,7 @@ "header": { "organization_name": "ООО \"Товарное хозяйство\"", "organization_inn": null, - "account_code_raw": "76.2", + "account_code_raw": "76", "period_text": "2025 г.", "period_year": 2025, "period_quarter": "Q4", From 63ad3795db7c1f6d57bcc797cade88d8031ea59c Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Mon, 19 Oct 2026 12:08:59 +0400 Subject: [PATCH 3/9] =?UTF-8?q?=D0=A1=D0=BD=D0=B8=D0=BC=D0=BE=D0=BA=20s42:?= =?UTF-8?q?=20=C2=AB=D0=98=D1=82=D0=BE=D0=B3=D0=BE=20=D1=80=D0=B0=D0=B7?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=BD=D1=83=D1=82=D0=BE=D0=B5=C2=BB=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B4=20=C2=AB=D0=98=D1=82=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=C2=BB=20(tabular-parser#59)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 5.5 --- .../s42_subaccounts_totals_reversed.json | 36 ++++++------------ .../s42_subaccounts_totals_reversed.xlsx | Bin 5424 -> 5430 bytes 2 files changed, 11 insertions(+), 25 deletions(-) diff --git a/golden/expected_osv_parse/synthetic/s42_subaccounts_totals_reversed.json b/golden/expected_osv_parse/synthetic/s42_subaccounts_totals_reversed.json index 0d4008a..3f0da6a 100644 --- a/golden/expected_osv_parse/synthetic/s42_subaccounts_totals_reversed.json +++ b/golden/expected_osv_parse/synthetic/s42_subaccounts_totals_reversed.json @@ -3,16 +3,16 @@ "service": { "name": "tabular-parser" }, - "status": "needs_check", + "status": "done", "metrics": { - "rows": 5, + "rows": 4, "warnings": [] }, "documents": [ { "document_type": "OSV", "locator": "sheet:Лист_1", - "status": "needs_check", + "status": "done", "warnings": [ { "code": "OSV_HIERARCHY_BY_ACCOUNT_PATTERN", @@ -28,16 +28,6 @@ "code": "OSV_HEADER", "severity": "info", "message": "валюта в шапке не найдена" - }, - { - "code": "OSV_BALANCE_IDENTITY", - "severity": "info", - "message": "§1.4: сальдо на начало + обороты ≠ сальдо на конец (±0.01): строки 14" - }, - { - "code": "OSV_PARENT_SUM", - "severity": "info", - "message": "§1.4: суммы родителя ≠ сумме детей (±0.01): строки 13" } ], "header": { @@ -148,19 +138,19 @@ }, { "row_number": 14, - "level": 2, - "parent_row_number": 13, + "level": 0, + "parent_row_number": null, "row_value": "Итого развернутое", - "group_type": "OTHER", + "group_type": "TOTAL", "group_name": null, - "account_code_raw": "76.Н.1", + "account_code_raw": null, "counterparty_name": null, "counterparty_inn": null, "data_type": null, "opening_debit": "1000.00", "opening_credit": "300.00", - "turnover_debit": null, - "turnover_credit": null, + "turnover_debit": "5700.00", + "turnover_credit": "6600.00", "closing_debit": null, "closing_credit": "200.00", "extra": null @@ -187,12 +177,8 @@ ], "checks": { "total_row_matches_root": true, - "balance_identity_violations": [ - 14 - ], - "parent_sum_violations": [ - 13 - ] + "balance_identity_violations": [], + "parent_sum_violations": [] } } ] diff --git a/osv/synthetic/s42_subaccounts_totals_reversed.xlsx b/osv/synthetic/s42_subaccounts_totals_reversed.xlsx index e6dc7f52a86ec432396ba937d7d2526db4006416..510a9d4ad77a29f726215ac6f6a1e59410316d7b 100644 GIT binary patch delta 973 zcmV;;12X)uDz+-HJO~N6j6eo?0{{T@lSK$Fe@qAhqyS0UL!~HD+p_};Sh2m-UP5}y zkD4ADDVJ7?BDGTc1f&Tf{Rw%6^&53|4aQE_q=}I6?tVM-eKR{+PkBJR9lwh)MSG6z z`W2;1X|JTJezS`m)6b9|b^&P<&oL=Xy^iYlJZ!dvkz=b_O)IF5X}L!>YMJz@ ze{H#V!$W@GaZK-B4clZ;QFLXtuxWL=R4k~~a?kAGElgkazyPLdR8(eWIZ$q!42sLsO zAJ5#ci3EVYZPUkfV!yFkv|CY%3TolDf7!R`CK)`()1X3$O=A1v9}U9IdDz|T`;<6S zYan(kH+-9WvuvoLp`dM;)U1|0GC*EM$wD+uK3K^r2zV@)CwYr{ux^0`t+KD|f=z;b zcn;YOn>-5+*pU4WPS_Qjupev~oFaIQ#PkpBItUJf6U1)W1i|XRR2B?i;Yn59$w?%l>Ou} z05nk+5EUY#LK@L$$jLQ0zYdN;JPgN>pb_wm#NufQ1^dAfq!+S@p0Hm)e-$PU6rO|m z8OjxNPZx+NMk0!7BEAU*?)wIUf0`tn3ENt_?fj$>NFItmI8s>UE4Lz;Yc87&C5{`Z zj$<_yd_>}G+HxAtCpfkXUd#6tq8NcV)CI9~H!`(3EUnhRa2S)-JNeeB%u+ZuWTv7#b z*pQS#94|=fApc)=V9cX8f9{Q58m6(RS{n&i7KU+87{ z5UqyIS)*85Es6%_4p1wW>QZ2>SXvJObD@%4S=@^q0xjhM2&9sFHlPZ1QY-O00;m803lq`v*ruL2MM^0Kn8gO v008upvlCYV-IEIxIssafMie*!Lz90LJOQzjyc9ZRV_L3KDT%cWuTmm?YFjSe@Q~kk9Mk(y#Wop~6$?D`gQk%!x5Wi?%F=!P&6Ti#lD;4h33k7k>Y9X@&0Dk~Zng>BrV z+=mITU0lPq4X(J9_o3HNgc`Y79N)TM7YP7;+kd8yYs7wMwP?4j6cp6LZL@FFO)_|i zXF-J$o5c3TKN^Iav#`6__bG8^)$N+g|B@NLu`Cv7z zAmFiFp5!g+!MX(&w8Fl#b2bfz@EovfHhmH7vl06n9J5O{Wxv=cI6?3li|IeuwI3V= z$A5_3uqlG^CpL!pVG-qXC6$5_?p1BV0}3J;nMg)PCS$@zD6ORp#4b`xJY^$KS$RP4 zLkjyj(?8^4u`voh!fO(ou-`lefTqe4qFh9jlM#J|oLqtPtKbO4!*Bu#8Ux>0ES?lm zFbobMy^u}xjQs)n%P?`E@C?jPQKpc2zJEkSAreuLiTEKHxbJHSY8rPYY^!qH`AH*? zJQ9C!q_E0YZbUFwTs9jeIIc?_FVs}<8Hux9^p@aj{ShKXu;A@zsl-?!S8fwoU6Jv8 zfnz)8)tsQNCbc>f#|?FmXjgv{+u9S^)}O@IcsyGywYnA+DGZZc<#VZYQf1Bz_ z4-WP^qVMrhlk{C0e#4{Hu(_%iifaYYfZPG9g<>rcST7VCA)w9~!fx)h>2)mEM>cK) zo0iIhSTF33!U-ik(eG>%3jL56cA=}p9^U|Xn-CgJI78H^R{jG}O9KQH0JGx@%?Ak^ zt4UjP0{{TDlerUD0oRie6gmM^lS~vi0X>t26g&c}5R=Ui9FyM^Dgls_3Kb>>+!6o) F007YV#xwu` From 33de4bd1ed914317ae0afabb43a30e615a5a8e1d Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Mon, 19 Oct 2026 12:17:15 +0400 Subject: [PATCH 4/9] =?UTF-8?q?=D0=A1=D0=BD=D0=B8=D0=BC=D0=BA=D0=B8:=20?= =?UTF-8?q?=D0=BF=D0=BB=D0=BE=D1=81=D0=BA=D0=B8=D0=B9=20=D1=81=D0=BF=D0=B8?= =?UTF-8?q?=D1=81=D0=BE=D0=BA=20=D0=BF=D0=BE=D0=B4=20=D1=81=D1=87=D1=91?= =?UTF-8?q?=D1=82=D0=BE=D0=BC=20=D1=88=D0=B0=D0=BF=D0=BA=D0=B8=20(tabular-?= =?UTF-8?q?parser#59)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Синтетика s40/s41: обороты в «Итого развернутое». Co-Authored-By: Claude Sonnet 5.5 --- .../synthetic/s40_flat_header_account.json | 172 +++++++++++++++++- .../synthetic/s41_flat_chart_of_accounts.json | 153 +++++++++++++++- osv/synthetic/s40_flat_header_account.xlsx | Bin 5483 -> 5489 bytes osv/synthetic/s41_flat_chart_of_accounts.xlsx | Bin 5420 -> 5428 bytes 4 files changed, 315 insertions(+), 10 deletions(-) diff --git a/golden/expected_osv_parse/synthetic/s40_flat_header_account.json b/golden/expected_osv_parse/synthetic/s40_flat_header_account.json index aaa1295..2110597 100644 --- a/golden/expected_osv_parse/synthetic/s40_flat_header_account.json +++ b/golden/expected_osv_parse/synthetic/s40_flat_header_account.json @@ -1,8 +1,170 @@ { - "status": "error", - "error": { - "code": "INVALID_FORMAT", - "message": "лист «Лист_1», шаг «иерархия строк»: иерархия строк не определена" + "schema_version": "2.0", + "service": { + "name": "tabular-parser" }, - "metrics": {} + "status": "done", + "metrics": { + "rows": 3, + "warnings": [] + }, + "documents": [ + { + "document_type": "OSV", + "locator": "sheet:Лист_1", + "status": "done", + "warnings": [ + { + "code": "OSV_HIERARCHY_BY_HEADER_ACCOUNT", + "severity": "info", + "message": "иерархия строк — плоский список под счётом шапки (header_account)" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "тип выводимых данных (БУ/НУ/сумма) в шапке не найден" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "валюта в шапке не найдена" + } + ], + "header": { + "organization_name": "ООО \"Товарное хозяйство\"", + "organization_inn": null, + "account_code_raw": "76.Н.1", + "period_text": "2025 г.", + "period_year": 2025, + "period_quarter": "Q4", + "is_cumulative": true, + "period_start": "2025-01-01", + "period_end": "2025-12-31", + "is_from_year_start": true, + "data_type": null, + "currency": null, + "header_variant": 1 + }, + "group_schema": [ + { + "type": "ACCOUNT", + "name": "Субконто" + }, + { + "type": "COUNTERPARTY", + "name": "Контрагенты" + } + ], + "columns": { + "opening_debit": "B", + "opening_credit": "C", + "turnover_debit": "D", + "turnover_credit": "E", + "closing_debit": "F", + "closing_credit": "G" + }, + "rows": [ + { + "row_number": 11, + "level": 0, + "parent_row_number": null, + "row_value": "Август - Агро ООО", + "group_type": "COUNTERPARTY", + "group_name": "Контрагенты", + "account_code_raw": "76.Н.1", + "counterparty_name": "Август - Агро ООО", + "counterparty_inn": null, + "data_type": null, + "opening_debit": "1000.00", + "opening_credit": null, + "turnover_debit": "500.00", + "turnover_credit": "300.00", + "closing_debit": "1200.00", + "closing_credit": null, + "extra": null + }, + { + "row_number": 12, + "level": 0, + "parent_row_number": null, + "row_value": "АВИС ООО", + "group_type": "COUNTERPARTY", + "group_name": "Контрагенты", + "account_code_raw": "76.Н.1", + "counterparty_name": "АВИС ООО", + "counterparty_inn": null, + "data_type": null, + "opening_debit": null, + "opening_credit": "200.00", + "turnover_debit": "100.00", + "turnover_credit": "400.00", + "closing_debit": null, + "closing_credit": "500.00", + "extra": null + }, + { + "row_number": 13, + "level": 0, + "parent_row_number": null, + "row_value": "Агроаспект ООО", + "group_type": "COUNTERPARTY", + "group_name": "Контрагенты", + "account_code_raw": "76.Н.1", + "counterparty_name": "Агроаспект ООО", + "counterparty_inn": null, + "data_type": null, + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "50.00", + "turnover_credit": "50.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 14, + "level": 0, + "parent_row_number": null, + "row_value": "Итого развернутое", + "group_type": "TOTAL", + "group_name": null, + "account_code_raw": null, + "counterparty_name": null, + "counterparty_inn": null, + "data_type": null, + "opening_debit": "1000.00", + "opening_credit": "200.00", + "turnover_debit": "650.00", + "turnover_credit": "750.00", + "closing_debit": "1200.00", + "closing_credit": "500.00", + "extra": null + }, + { + "row_number": 15, + "level": 0, + "parent_row_number": null, + "row_value": "Итого", + "group_type": "TOTAL", + "group_name": null, + "account_code_raw": null, + "counterparty_name": null, + "counterparty_inn": null, + "data_type": null, + "opening_debit": "800.00", + "opening_credit": null, + "turnover_debit": "650.00", + "turnover_credit": "750.00", + "closing_debit": "700.00", + "closing_credit": null, + "extra": null + } + ], + "checks": { + "total_row_matches_root": true, + "balance_identity_violations": [], + "parent_sum_violations": [] + } + } + ] } diff --git a/golden/expected_osv_parse/synthetic/s41_flat_chart_of_accounts.json b/golden/expected_osv_parse/synthetic/s41_flat_chart_of_accounts.json index aaa1295..d8667f5 100644 --- a/golden/expected_osv_parse/synthetic/s41_flat_chart_of_accounts.json +++ b/golden/expected_osv_parse/synthetic/s41_flat_chart_of_accounts.json @@ -1,8 +1,151 @@ { - "status": "error", - "error": { - "code": "INVALID_FORMAT", - "message": "лист «Лист_1», шаг «иерархия строк»: иерархия строк не определена" + "schema_version": "2.0", + "service": { + "name": "tabular-parser" }, - "metrics": {} + "status": "done", + "metrics": { + "rows": 2, + "warnings": [] + }, + "documents": [ + { + "document_type": "OSV", + "locator": "sheet:Лист_1", + "status": "done", + "warnings": [ + { + "code": "OSV_HIERARCHY_BY_HEADER_ACCOUNT", + "severity": "info", + "message": "иерархия строк — плоский список под счётом шапки (header_account)" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "тип выводимых данных (БУ/НУ/сумма) в шапке не найден" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "валюта в шапке не найдена" + } + ], + "header": { + "organization_name": "ООО Хреновская Нива", + "organization_inn": null, + "account_code_raw": "60", + "period_text": "2 Квартал 2026 г.", + "period_year": 2026, + "period_quarter": "Q2", + "is_cumulative": false, + "period_start": "2026-04-01", + "period_end": "2026-06-30", + "is_from_year_start": false, + "data_type": null, + "currency": null, + "header_variant": 1 + }, + "group_schema": [ + { + "type": "ACCOUNT", + "name": "Субконто" + }, + { + "type": "COUNTERPARTY", + "name": "Организации" + } + ], + "columns": { + "opening_debit": "B", + "opening_credit": "C", + "turnover_debit": "D", + "turnover_credit": "E", + "closing_debit": "F", + "closing_credit": "G" + }, + "rows": [ + { + "row_number": 7, + "level": 0, + "parent_row_number": null, + "row_value": "Автодор-Платные Дороги ООО", + "group_type": "COUNTERPARTY", + "group_name": "Организации", + "account_code_raw": "60", + "counterparty_name": "Автодор-Платные Дороги ООО", + "counterparty_inn": null, + "data_type": null, + "opening_debit": "820.21", + "opening_credit": null, + "turnover_debit": "5000.00", + "turnover_credit": "4991.00", + "closing_debit": "829.21", + "closing_credit": null, + "extra": null + }, + { + "row_number": 8, + "level": 0, + "parent_row_number": null, + "row_value": "АГРОПРОФИ ООО", + "group_type": "COUNTERPARTY", + "group_name": "Организации", + "account_code_raw": "60", + "counterparty_name": "АГРОПРОФИ ООО", + "counterparty_inn": null, + "data_type": null, + "opening_debit": null, + "opening_credit": "2763.79", + "turnover_debit": null, + "turnover_credit": null, + "closing_debit": null, + "closing_credit": "2763.79", + "extra": null + }, + { + "row_number": 9, + "level": 0, + "parent_row_number": null, + "row_value": "Итого развернутое", + "group_type": "TOTAL", + "group_name": null, + "account_code_raw": null, + "counterparty_name": null, + "counterparty_inn": null, + "data_type": null, + "opening_debit": "820.21", + "opening_credit": "2763.79", + "turnover_debit": "5000.00", + "turnover_credit": "4991.00", + "closing_debit": "829.21", + "closing_credit": "2763.79", + "extra": null + }, + { + "row_number": 10, + "level": 0, + "parent_row_number": null, + "row_value": "Итого", + "group_type": "TOTAL", + "group_name": null, + "account_code_raw": null, + "counterparty_name": null, + "counterparty_inn": null, + "data_type": null, + "opening_debit": null, + "opening_credit": "1943.58", + "turnover_debit": "5000.00", + "turnover_credit": "4991.00", + "closing_debit": null, + "closing_credit": "1934.58", + "extra": null + } + ], + "checks": { + "total_row_matches_root": true, + "balance_identity_violations": [], + "parent_sum_violations": [] + } + } + ] } diff --git a/osv/synthetic/s40_flat_header_account.xlsx b/osv/synthetic/s40_flat_header_account.xlsx index 5f201a3e9ab4dc4a7f312effe33d54a809ae9ef2..f16d040540e8f0c7aa9e04769c1f55a284da033b 100644 GIT binary patch delta 1037 zcmV+o1oHdqD)B0?JO~cWW%Tv50{{SC3jhEZ0Fwa}8h@Qu-EPw`6n+&eS8%cBr_H)n zZKbVU3l~TT1YBpW+eS;`lDI3}?MJ``NJ9vuX%a~A1cgy;3|3yjc_WUUHci^N64TVh z_R0Ca@0{b7cBtLA#G#E69-n_Q295zH3pK`aLxm_}Jk<3hdv61u50-(cd$c7RYh0k3y|Z7vSyoFrdVpc>}R)d(qQ+G0%n?ISSf_MXg%JCnMxn6$7Ga^TD>E zAmFh*p5({Whjkk~XpMbg-`O-ggx@i{VbhK9h>h9r@E!ZfrtAkBho=Z06EXb*Zykll z;eR{C{<0~8@f$XQ`AHcSH*@TBPOqpG>B8QMg;+d=iq*Z@>}`4 zYebY{5ha<3uY%z^DhQjV!G!OQ+;_2q5J(=2f3Q_xm9P92!CZ0KY@7kykOC+6YWNn3 z+9uI5u$uoNQUnWVuh&XUB~sVsncRV)gy|y`?mPcZGW6BuZs(%nuoW^L8@J=zy?-rV z^LBi#TkxebtjBv5h7zdv@YP*}C;agh_%b_IAg=KRqWj3Xe zEY5aadbrQ30w=){|GwBY6iXUaV}FJ-Ctg-9v8Gimt_NLuKb-N?4K5qF&G@Zz$?rOT zw8L)VhDqk`DXiT+^^`rMB1!Y+YHUe!aoOBVldqt+Qg(U878jl_z47AQWG2B(@NBIH zX|4~_Tpwi0yb^?(=yY7{_e6&lpf(wLG-@>B)u;{JDV6Ib(JCz&8m01XraGZnDz_qo zx?qU<&Igv?v%LU0xC?Art_WiNsE>;#lng{?wnr#*ZerMn{ulfF1+aGsq49(>#4UC0 zvk?r`2MNt(^!2m@003T-?h{u57?Va6IsuiFffP6aev`TsJOS*J_Y_9~(UU(FCI%f7 H00000I3)5J delta 1022 zcmVl6$`O=6aq(%tn(>n=8_)3ixdrA^wNfUZUDx|P0y^F}*%AS8g1R#h~%znt%U=O?y{ zed6u;9gHbDaBSBvDIH3?1y%JM9qgEXigd9HNQ-!mNnz@>Rlnb_vf$tC`T!BwM{;-5H6H#Vlls9aE z49&*boKp;Bgb2vEMv50F9I-j&hNsoXpWz$n`Cd z-v*~39)>rN_#yZkip8@63J!x4e<&MN2|ZzV;Ql%+2q?S&^K+D5OFvyAA|Hv!%S8MT z9`3?|uu+ms*lx&eryYbq@<9B9R)JN%@*sk_<+9me0dZAI9P8EK0}{23vn}AN{f9^q zEU=v}m6%ARu1zwz0YizWFHpEk{+%q)SCN}th>AliEHtb>&fn%^{nZ}lf3N-sf5{B% zQLn;KLiGv0x~t%Xe}8BN!SsqZ2?{^iMXfug;wR94S=ThJsO~3{8^^P=@MZ!|&%(7N zyAi{ap-p#ZUAjGgVxQSL`yr2|GPVu98S|kS$xvrQiNl#$xSoKs(nzLzyDr__$5nxy z;D~=;><)@0jjB54nK+(Re=R|is;0+-Ea9B*gcu0 z-BU^6a}}v2&FAoX0+;7}dSvO+Gb@U2VHnw%pSAhMiNmY&C5XehS-6&j=YmjUcNGVF zZE?r)QG@hc8eSEm)$k&>kuOy8;<7UXRP%++g+MJ|sE2?$^$^}1FkhHn+j4zm;}&?+ zQaKRog*UNqLP=NLt#%28yO$Vt;0B95{sQ1FLTEJM9->Qe`Lh=c)CUR6&zRt@0{{RZ slk^i;0TPo;6gmNqlZO;I0eF+Z6g&aull>G&0n3v`6($B36951J0JVYlUH||9 diff --git a/osv/synthetic/s41_flat_chart_of_accounts.xlsx b/osv/synthetic/s41_flat_chart_of_accounts.xlsx index 258c5f42f0493e2c0b3f2cf28290dc938f0f3ef0..275736463ef2561b6c3ca04062ea741b2cd17bc8 100644 GIT binary patch delta 987 zcmV<110?*cDzqxFJO~Q%;EJPn0{{RG3X?_%Ab(3w+dvThD=XiL9p~vNi3ABrd#Hp! zZO|xUSIWx9yYro$gx#j(~7EN zT7RxmuZp!LuU;i1YFjQ|@{m7r9Mk)_fNe6aDOu%yVcF^rs8~?z)uGwPE113=LI6zF z5T|Q7*!3;qA`ka!%Di4_XEhNbT;5rD>_^6kt63#vjZa>8Yl_B6VH9n_Svg1We8j%>P2#;@?5sDc3O5Zf15 zG?vbJ@a~L!N}RiBNbFdyyqg>M)lg-iNZT~2S+9CzjJ%qngPIN>%3}oN9<6j z*aUf?3+b9(MC>es*b%$t`9c+3E`oBv53xT$XTs~jPN5)IvJBsW6JX6?RR~!X(pdcp zcA(-{fPBMq#=%7FLVD~&YY>n-7JnCD5379T7G!J!$0;}*Cjd87fg_tB*h8XnQM3fC z)-y;7v4FNalVYrp#rr}o6w~s2g9e@O#wD<8q(&Wz#-6jw#JJ{*vMs(aTkA#H+Rx7x zD{U#(Nq29SWMJ#m$RRbKWo>MYrPcMif4#wj8Q0r>p(Seu9i6asAB>(p5Fek+gcLn9G!m zII;FDj~Fu}WM-r>I}lws8Qh&Sd!ep+jkPZAW#&0miNBp&Dfsm zhAp`8fOqY0$NulfYRDa-Mvm=rmTh%qKs5++Q zDu4B=7+d!0RWhWu<>F-z`9sGsy^jmnCZn2?Rqh8?tX`jr0kvKom_59T>DvJ$KvxZM zI+lZ7-y$yZaJQz+>y=hk6DcC(orOn!q>Z?nHA2>T=XIy1Xj~Mwahq}s6K)&0fo&V0 zxRehPRfVMFFO(`p=gS+O?rYmIh3g4M32*5V6eQ`x2 z8Jvgc_Ry!qxyuG($8zP}+`O-bDia0mqDjqq)gvS1)f64vw0UD*R}k=6E-&&b^J@$iGNL? zzgs~?t*TN`!co;W{6Rq|BNxiZrOE&aXTW^JF4+aJ?!own34(njDi=jdz-m52 zq%aF;dov}*3R%1_@qQL@kMM)FJx=Jh^_T}wpeLP z;T|oe0eyj8za!QNHpQHLQuym3*k=<2;>1>g$My2=c}d#D5}d!|H|k|w%YW$Es=5&^ zbu^%$X(jdFxmFBNl{k`Wiy zniUaKW`xR&G-Zck70&ppb_<@W3;rU8)=jW0CMHRBH=d|_!+6R<(@3wa^f(J5<}s^< zCiz$R371I)ze|%`StFmz6o1N(Hc~7kVJF4r|KCcjM-;hyltS83BcE0Wdp&U^@KKu# zT`E6s;ix=!EEFmY`AvT`(JWM2i4%*3%95N=9~k68=Z)$0EZ0Xi?gE>ZDM6ek4-T?J z$v_+h)(C~8f@t>Pz=b^?0P|f!XxQNl;Tf*}4^T@31QY-O00;m80JG-{#|H|r(9X+m z0{{Te36r=JRsqwK4-`59P?Jg&H~~46gA_agr<1@GM*@ryldusLlO7ci2G|k+00013 CcDV=u From 88bc10bbe54348c5f384089ddc553ca97a910f64 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Mon, 19 Oct 2026 12:27:00 +0400 Subject: [PATCH 5/9] =?UTF-8?q?=D0=A1=D0=BD=D0=B8=D0=BC=D0=BA=D0=B8:=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=B0=D0=B3=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D1=8B=20=D1=80=D0=B0=D1=81=D1=87=D1=91=D1=82=D0=BD=D1=8B=D1=85?= =?UTF-8?q?=20=D1=81=D1=87=D0=B5=D1=82=D0=BE=D0=B2=20=D0=BF=D0=BE=20=D0=BF?= =?UTF-8?q?=D0=BB=D0=B0=D0=BD=D1=83=20=D1=81=D1=87=D0=B5=D1=82=D0=BE=D0=B2?= =?UTF-8?q?=20(tabular-parser#59)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 5.5 --- .../synthetic/s43_subkonto_unnamed_60.json | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/golden/expected_osv_parse/synthetic/s43_subkonto_unnamed_60.json b/golden/expected_osv_parse/synthetic/s43_subkonto_unnamed_60.json index 1413728..9853fe9 100644 --- a/golden/expected_osv_parse/synthetic/s43_subkonto_unnamed_60.json +++ b/golden/expected_osv_parse/synthetic/s43_subkonto_unnamed_60.json @@ -28,6 +28,11 @@ "code": "OSV_HEADER", "severity": "info", "message": "валюта в шапке не найдена" + }, + { + "code": "OSV_ROWS", + "severity": "info", + "message": "вид субконто в шапке не назван: строки аналитики счёта 60.01 приняты за контрагентов по плану счетов — проверьте" } ], "header": { @@ -84,10 +89,10 @@ "level": 1, "parent_row_number": 7, "row_value": "ИП Знаменских А.И.", - "group_type": "OTHER", + "group_type": "COUNTERPARTY", "group_name": null, "account_code_raw": "60.01", - "counterparty_name": null, + "counterparty_name": "ИП Знаменских А.И.", "counterparty_inn": null, "data_type": null, "opening_debit": "34618000.00", @@ -103,10 +108,10 @@ "level": 1, "parent_row_number": 7, "row_value": "ООО \"ЭСТЕТ ОМСК\"", - "group_type": "OTHER", + "group_type": "COUNTERPARTY", "group_name": null, "account_code_raw": "60.01", - "counterparty_name": null, + "counterparty_name": "ООО \"ЭСТЕТ ОМСК\"", "counterparty_inn": null, "data_type": null, "opening_debit": null, From f7c84c9ad5a5c5568b1238399c6aeee80bf47dff Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Mon, 19 Oct 2026 12:33:04 +0400 Subject: [PATCH 6/9] =?UTF-8?q?=D0=A1=D0=B8=D0=BD=D1=82=D0=B5=D1=82=D0=B8?= =?UTF-8?q?=D0=BA=D0=B0=20s40=E2=80=93s44:=20=D0=BE=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B2=20README=20=D0=BD=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=80=D0=B0=20(tabular-parser#59)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 5.5 --- osv/synthetic/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/osv/synthetic/README.md b/osv/synthetic/README.md index 96289ea..b527857 100644 --- a/osv/synthetic/README.md +++ b/osv/synthetic/README.md @@ -57,6 +57,11 @@ cd tabular-parser/api | `s30_val_kol_vo_materials.xlsx` | счёт 10 (вариант 2, номенклатура): материал «Вал» без точки, под материалами строки «Кол-во» (AURORA-1663) | «Вал» — обычная строка (`data_type` шапки, `OTHER`), «Кол-во» — `QUANTITY`, `done` | | `s31_rows_below_total.xlsx` | под «Итого» дописаны «Ответственный:», блок «ООО Альфа (ГК)» с числами и строка «Итого по ГК» (AURORA-1664) | таблица кончается на первой «Итого», хвост вне документа, предупреждение «ниже таблицы … есть числа», `done` | | `s32_total_with_suffix.xlsx` | итоговая строка подписана «Итого по счету 60», точного «Итого» нет (I-1: правило `total_row` — запасное после `total_row_exact`) | `TOTAL` — последняя строка, `done` | +| `s40_flat_header_account.xlsx` | плоская форма 1С (#59, AURORA-1661): «по счету: 76.Н.1» с двоеточием, вид аналитики «Контрагенты» строкой между названием и периодом, организация ниже периода; строк-счетов нет, без outline и отступов; «Итого развернутое» перед «Итого» | `account_code_raw=76.Н.1`, `hierarchy=header_account`, строки `COUNTERPARTY`, «Итого развернутое» и «Итого» — `TOTAL`, `done` | +| `s41_flat_chart_of_accounts.xlsx` | плоская форма: вид аналитики «Организации», период «за 2 Квартал 2026 г. План счетов ООО Хреновская Нива» одной строкой, «Итого развернутое» перед «Итого» | организация из хвоста «План счетов», `account_code_raw=60`, `Q2`/2026, `hierarchy=header_account`, строки `COUNTERPARTY` без предупреждения о виде субконто, `done` | +| `s42_subaccounts_totals_reversed.xlsx` | под счётом 76 в шапке идут строки-субсчета «76.2», «76.5», «76.Н», «76.Н.1» (корня «76» нет), «Итого развернутое» перед «Итого» | `account_code_raw=76`, «Итого развернутое» — `TOTAL`, сверка по основной «Итого», `done` | +| `s43_subkonto_unnamed_60.xlsx` | счёт 60: корень «60.01» и два элемента аналитики с отступом, вид субконто в шапке не назван; «Итого» перед «Итого развернутое» | `hierarchy=indent`, подстроки — `COUNTERPARTY` по плану счетов с предупреждением `OSV_ROWS`, `done` | +| `s44_subkonto_unnamed_10.xlsx` | то же, что `s43`, но счёт 10 (материалы «Мука пшеничная», «Сахар-песок») | счёт 10 не расчётный: подстроки остаются `OTHER` без имени, предупреждения нет, `done` | `s17`–`s19` — регрессия извлечения ИНН из текста (issue #9). `s14`–`s16` добавлены тестом покрытия словарей `tabular-parser` (`rules/*.yaml`, решение R-22): каждая запись словаря должна сработать на реальных или синтетических файлах; эти файлы закрывают записи, которых нет в реальных ОСВ. From 027651c9f675dd7dd5fd946b332f5315e3953021 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Mon, 19 Oct 2026 12:43:06 +0400 Subject: [PATCH 7/9] =?UTF-8?q?=D0=A1=D0=B8=D0=BD=D1=82=D0=B5=D1=82=D0=B8?= =?UTF-8?q?=D0=BA=D0=B0=20s40=E2=80=93s42=20=D0=B8=20=D1=81=D0=BD=D0=B8?= =?UTF-8?q?=D0=BC=D0=BA=D0=B8:=20=C2=AB=D0=98=D1=82=D0=BE=D0=B3=D0=BE=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=B2=D0=B5=D1=80=D0=BD=D1=83=D1=82=D0=BE?= =?UTF-8?q?=D0=B5=C2=BB=20=D0=B1=D0=B5=D0=B7=20=D0=BE=D0=B1=D0=BE=D1=80?= =?UTF-8?q?=D0=BE=D1=82=D0=BE=D0=B2,=20=D0=BA=D0=B0=D0=BA=20=D0=B2=201?= =?UTF-8?q?=D0=A1=20(tabular-parser#59)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 5.5 --- .../synthetic/s40_flat_header_account.json | 4 ++-- .../synthetic/s41_flat_chart_of_accounts.json | 4 ++-- .../s42_subaccounts_totals_reversed.json | 4 ++-- osv/synthetic/s40_flat_header_account.xlsx | Bin 5489 -> 5483 bytes osv/synthetic/s41_flat_chart_of_accounts.xlsx | Bin 5428 -> 5420 bytes .../s42_subaccounts_totals_reversed.xlsx | Bin 5430 -> 5424 bytes 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/golden/expected_osv_parse/synthetic/s40_flat_header_account.json b/golden/expected_osv_parse/synthetic/s40_flat_header_account.json index 2110597..bd2b6f3 100644 --- a/golden/expected_osv_parse/synthetic/s40_flat_header_account.json +++ b/golden/expected_osv_parse/synthetic/s40_flat_header_account.json @@ -134,8 +134,8 @@ "data_type": null, "opening_debit": "1000.00", "opening_credit": "200.00", - "turnover_debit": "650.00", - "turnover_credit": "750.00", + "turnover_debit": null, + "turnover_credit": null, "closing_debit": "1200.00", "closing_credit": "500.00", "extra": null diff --git a/golden/expected_osv_parse/synthetic/s41_flat_chart_of_accounts.json b/golden/expected_osv_parse/synthetic/s41_flat_chart_of_accounts.json index d8667f5..feee383 100644 --- a/golden/expected_osv_parse/synthetic/s41_flat_chart_of_accounts.json +++ b/golden/expected_osv_parse/synthetic/s41_flat_chart_of_accounts.json @@ -115,8 +115,8 @@ "data_type": null, "opening_debit": "820.21", "opening_credit": "2763.79", - "turnover_debit": "5000.00", - "turnover_credit": "4991.00", + "turnover_debit": null, + "turnover_credit": null, "closing_debit": "829.21", "closing_credit": "2763.79", "extra": null diff --git a/golden/expected_osv_parse/synthetic/s42_subaccounts_totals_reversed.json b/golden/expected_osv_parse/synthetic/s42_subaccounts_totals_reversed.json index 3f0da6a..5923127 100644 --- a/golden/expected_osv_parse/synthetic/s42_subaccounts_totals_reversed.json +++ b/golden/expected_osv_parse/synthetic/s42_subaccounts_totals_reversed.json @@ -149,8 +149,8 @@ "data_type": null, "opening_debit": "1000.00", "opening_credit": "300.00", - "turnover_debit": "5700.00", - "turnover_credit": "6600.00", + "turnover_debit": null, + "turnover_credit": null, "closing_debit": null, "closing_credit": "200.00", "extra": null diff --git a/osv/synthetic/s40_flat_header_account.xlsx b/osv/synthetic/s40_flat_header_account.xlsx index f16d040540e8f0c7aa9e04769c1f55a284da033b..5f201a3e9ab4dc4a7f312effe33d54a809ae9ef2 100644 GIT binary patch delta 1022 zcmVl6$`O=6aq(%tn(>n=8_)3ixdrA^wNfUZUDx|P0y^F}*%AS8g1R#h~%znt%U=O?y{ zed6u;9gHbDaBSBvDIH3?1y%JM9qgEXigd9HNQ-!mNnz@>Rlnb_vf$tC`T!BwM{;-5H6H#Vlls9aE z49&*boKp;Bgb2vEMv50F9I-j&hNsoXpWz$n`Cd z-v*~39)>rN_#yZkip8@63J!x4e<&MN2|ZzV;Ql%+2q?S&^K+D5OFvyAA|Hv!%S8MT z9`3?|uu+ms*lx&eryYbq@<9B9R)JN%@*sk_<+9me0dZAI9P8EK0}{23vn}AN{f9^q zEU=v}m6%ARu1zwz0YizWFHpEk{+%q)SCN}th>AliEHtb>&fn%^{nZ}lf3N-sf5{B% zQLn;KLiGv0x~t%Xe}8BN!SsqZ2?{^iMXfug;wR94S=ThJsO~3{8^^P=@MZ!|&%(7N zyAi{ap-p#ZUAjGgVxQSL`yr2|GPVu98S|kS$xvrQiNl#$xSoKs(nzLzyDr__$5nxy z;D~=;><)@0jjB54nK+(Re=R|is;0+-Ea9B*gcu0 z-BU^6a}}v2&FAoX0+;7}dSvO+Gb@U2VHnw%pSAhMiNmY&C5XehS-6&j=YmjUcNGVF zZE?r)QG@hc8eSEm)$k&>kuOy8;<7UXRP%++g+MJ|sE2?$^$^}1FkhHn+j4zm;}&?+ zQaKRog*UNqLP=NLt#%28yO$Vt;0B95{sQ1FLTEJM9->Qe`Lh=c)CUR6&zRt@0{{RZ slk^i;0TPo;6gmNqlZO;I0eF+Z6g&aull>G&0n3v`6($B36951J0JVYlUH||9 delta 1037 zcmV+o1oHdqD)B0?JO~cWW%Tv50{{SC3jhEZ0Fwa}8h@Qu-EPw`6n+&eS8%cBr_H)n zZKbVU3l~TT1YBpW+eS;`lDI3}?MJ``NJ9vuX%a~A1cgy;3|3yjc_WUUHci^N64TVh z_R0Ca@0{b7cBtLA#G#E69-n_Q295zH3pK`aLxm_}Jk<3hdv61u50-(cd$c7RYh0k3y|Z7vSyoFrdVpc>}R)d(qQ+G0%n?ISSf_MXg%JCnMxn6$7Ga^TD>E zAmFh*p5({Whjkk~XpMbg-`O-ggx@i{VbhK9h>h9r@E!ZfrtAkBho=Z06EXb*Zykll z;eR{C{<0~8@f$XQ`AHcSH*@TBPOqpG>B8QMg;+d=iq*Z@>}`4 zYebY{5ha<3uY%z^DhQjV!G!OQ+;_2q5J(=2f3Q_xm9P92!CZ0KY@7kykOC+6YWNn3 z+9uI5u$uoNQUnWVuh&XUB~sVsncRV)gy|y`?mPcZGW6BuZs(%nuoW^L8@J=zy?-rV z^LBi#TkxebtjBv5h7zdv@YP*}C;agh_%b_IAg=KRqWj3Xe zEY5aadbrQ30w=){|GwBY6iXUaV}FJ-Ctg-9v8Gimt_NLuKb-N?4K5qF&G@Zz$?rOT zw8L)VhDqk`DXiT+^^`rMB1!Y+YHUe!aoOBVldqt+Qg(U878jl_z47AQWG2B(@NBIH zX|4~_Tpwi0yb^?(=yY7{_e6&lpf(wLG-@>B)u;{JDV6Ib(JCz&8m01XraGZnDz_qo zx?qU<&Igv?v%LU0xC?Art_WiNsE>;#lng{?wnr#*ZerMn{ulfF1+aGsq49(>#4UC0 zvk?r`2MNt(^!2m@003T-?h{u57?Va6IsuiFffP6aev`TsJOS*J_Y_9~(UU(FCI%f7 H00000I3)5J diff --git a/osv/synthetic/s41_flat_chart_of_accounts.xlsx b/osv/synthetic/s41_flat_chart_of_accounts.xlsx index 275736463ef2561b6c3ca04062ea741b2cd17bc8..258c5f42f0493e2c0b3f2cf28290dc938f0f3ef0 100644 GIT binary patch delta 980 zcmV;_11tQrDy%B7JO~Q0(9X+m0{{Te36n+$Ab&|u+dvflDPZAW#&0miNBp&Dfsm zhAp`8fOqY0$NulfYRDa-Mvm=rmTh%qKs5++Q zDu4B=7+d!0RWhWu<>F-z`9sGsy^jmnCZn2?Rqh8?tX`jr0kvKom_59T>DvJ$KvxZM zI+lZ7-y$yZaJQz+>y=hk6DcC(orOn!q>Z?nHA2>T=XIy1Xj~Mwahq}s6K)&0fo&V0 zxRehPRfVMFFO(`p=gS+O?rYmIh3g4M32*5V6eQ`x2 z8Jvgc_Ry!qxyuG($8zP}+`O-bDia0mqDjqq)gvS1)f64vw0UD*R}k=6E-&&b^J@$iGNL? zzgs~?t*TN`!co;W{6Rq|BNxiZrOE&aXTW^JF4+aJ?!own34(njDi=jdz-m52 zq%aF;dov}*3R%1_@qQL@kMM)FJx=Jh^_T}wpeLP z;T|oe0eyj8za!QNHpQHLQuym3*k=<2;>1>g$My2=c}d#D5}d!|H|k|w%YW$Es=5&^ zbu^%$X(jdFxmFBNl{k`Wiy zniUaKW`xR&G-Zck70&ppb_<@W3;rU8)=jW0CMHRBH=d|_!+6R<(@3wa^f(J5<}s^< zCiz$R371I)ze|%`StFmz6o1N(Hc~7kVJF4r|KCcjM-;hyltS83BcE0Wdp&U^@KKu# zT`E6s;ix=!EEFmY`AvT`(JWM2i4%*3%95N=9~k68=Z)$0EZ0Xi?gE>ZDM6ek4-T?J z$v_+h)(C~8f@t>Pz=b^?0P|f!XxQNl;Tf*}4^T@31QY-O00;m80JG-{#|H|r(9X+m z0{{Te36r=JRsqwK4-`59P?Jg&H~~46gA_agr<1@GM*@ryldusLlO7ci2G|k+00013 CcDV=u delta 987 zcmV<110?*cDzqxFJO~Q%;EJPn0{{RG3X?_%Ab(3w+dvThD=XiL9p~vNi3ABrd#Hp! zZO|xUSIWx9yYro$gx#j(~7EN zT7RxmuZp!LuU;i1YFjQ|@{m7r9Mk)_fNe6aDOu%yVcF^rs8~?z)uGwPE113=LI6zF z5T|Q7*!3;qA`ka!%Di4_XEhNbT;5rD>_^6kt63#vjZa>8Yl_B6VH9n_Svg1We8j%>P2#;@?5sDc3O5Zf15 zG?vbJ@a~L!N}RiBNbFdyyqg>M)lg-iNZT~2S+9CzjJ%qngPIN>%3}oN9<6j z*aUf?3+b9(MC>es*b%$t`9c+3E`oBv53xT$XTs~jPN5)IvJBsW6JX6?RR~!X(pdcp zcA(-{fPBMq#=%7FLVD~&YY>n-7JnCD5379T7G!J!$0;}*Cjd87fg_tB*h8XnQM3fC z)-y;7v4FNalVYrp#rr}o6w~s2g9e@O#wD<8q(&Wz#-6jw#JJ{*vMs(aTkA#H+Rx7x zD{U#(Nq29SWMJ#m$RRbKWo>MYrPcMif4#wj8Q0r>p(Seu9i6asAB>(p5Fek+gcLn9G!m zII;FDj~Fu}WM-r>I}lws8Qh&Sd!ep+jkZRV_L3KDT%cWuTmm?YFjSe@Q~kk9Mk(y#Wop~6$?D`gQk%!x5Wi?%F=!P&6Ti#lD;4h33k7k>Y9X@&0Dk~Zng>BrV z+=mITU0lPq4X(J9_o3HNgc`Y79N)TM7YP7;+kd8yYs7wMwP?4j6cp6LZL@FFO)_|i zXF-J$o5c3TKN^Iav#`6__bG8^)$N+g|B@NLu`Cv7z zAmFiFp5!g+!MX(&w8Fl#b2bfz@EovfHhmH7vl06n9J5O{Wxv=cI6?3li|IeuwI3V= z$A5_3uqlG^CpL!pVG-qXC6$5_?p1BV0}3J;nMg)PCS$@zD6ORp#4b`xJY^$KS$RP4 zLkjyj(?8^4u`voh!fO(ou-`lefTqe4qFh9jlM#J|oLqtPtKbO4!*Bu#8Ux>0ES?lm zFbobMy^u}xjQs)n%P?`E@C?jPQKpc2zJEkSAreuLiTEKHxbJHSY8rPYY^!qH`AH*? zJQ9C!q_E0YZbUFwTs9jeIIc?_FVs}<8Hux9^p@aj{ShKXu;A@zsl-?!S8fwoU6Jv8 zfnz)8)tsQNCbc>f#|?FmXjgv{+u9S^)}O@IcsyGywYnA+DGZZc<#VZYQf1Bz_ z4-WP^qVMrhlk{C0e#4{Hu(_%iifaYYfZPG9g<>rcST7VCA)w9~!fx)h>2)mEM>cK) zo0iIhSTF33!U-ik(eG>%3jL56cA=}p9^U|Xn-CgJI78H^R{jG}O9KQH0JGx@%?Ak^ zt4UjP0{{TDlerUD0oRie6gmM^lS~vi0X>t26g&c}5R=Ui9FyM^Dgls_3Kb>>+!6o) F007YV#xwu` delta 973 zcmV;;12X)uDz+-HJO~N6j6eo?0{{T@lSK$Fe@qAhqyS0UL!~HD+p_};Sh2m-UP5}y zkD4ADDVJ7?BDGTc1f&Tf{Rw%6^&53|4aQE_q=}I6?tVM-eKR{+PkBJR9lwh)MSG6z z`W2;1X|JTJezS`m)6b9|b^&P<&oL=Xy^iYlJZ!dvkz=b_O)IF5X}L!>YMJz@ ze{H#V!$W@GaZK-B4clZ;QFLXtuxWL=R4k~~a?kAGElgkazyPLdR8(eWIZ$q!42sLsO zAJ5#ci3EVYZPUkfV!yFkv|CY%3TolDf7!R`CK)`()1X3$O=A1v9}U9IdDz|T`;<6S zYan(kH+-9WvuvoLp`dM;)U1|0GC*EM$wD+uK3K^r2zV@)CwYr{ux^0`t+KD|f=z;b zcn;YOn>-5+*pU4WPS_Qjupev~oFaIQ#PkpBItUJf6U1)W1i|XRR2B?i;Yn59$w?%l>Ou} z05nk+5EUY#LK@L$$jLQ0zYdN;JPgN>pb_wm#NufQ1^dAfq!+S@p0Hm)e-$PU6rO|m z8OjxNPZx+NMk0!7BEAU*?)wIUf0`tn3ENt_?fj$>NFItmI8s>UE4Lz;Yc87&C5{`Z zj$<_yd_>}G+HxAtCpfkXUd#6tq8NcV)CI9~H!`(3EUnhRa2S)-JNeeB%u+ZuWTv7#b z*pQS#94|=fApc)=V9cX8f9{Q58m6(RS{n&i7KU+87{ z5UqyIS)*85Es6%_4p1wW>QZ2>SXvJObD@%4S=@^q0xjhM2&9sFHlPZ1QY-O00;m803lq`v*ruL2MM^0Kn8gO v008upvlCYV-IEIxIssafMie*!Lz90LJOQzjyc9 Date: Mon, 19 Oct 2026 13:14:32 +0400 Subject: [PATCH 8/9] =?UTF-8?q?test(osv):=20s43=20=D1=81=20=D0=B2=D1=8B?= =?UTF-8?q?=D0=BC=D1=8B=D1=88=D0=BB=D0=B5=D0=BD=D0=BD=D1=8B=D0=BC=20=D0=A4?= =?UTF-8?q?=D0=98=D0=9E=20=D0=98=D0=9F,=20=D1=81=D0=BD=D0=B8=D0=BC=D0=BE?= =?UTF-8?q?=D0=BA=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D1=91=D0=BD=20(ta?= =?UTF-8?q?bular-parser#59)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 5.5 --- .../synthetic/s43_subkonto_unnamed_60.json | 4 ++-- osv/synthetic/s43_subkonto_unnamed_60.xlsx | Bin 5422 -> 5414 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/golden/expected_osv_parse/synthetic/s43_subkonto_unnamed_60.json b/golden/expected_osv_parse/synthetic/s43_subkonto_unnamed_60.json index 9853fe9..a5f6f51 100644 --- a/golden/expected_osv_parse/synthetic/s43_subkonto_unnamed_60.json +++ b/golden/expected_osv_parse/synthetic/s43_subkonto_unnamed_60.json @@ -88,11 +88,11 @@ "row_number": 8, "level": 1, "parent_row_number": 7, - "row_value": "ИП Знаменских А.И.", + "row_value": "ИП Иванов А.А.", "group_type": "COUNTERPARTY", "group_name": null, "account_code_raw": "60.01", - "counterparty_name": "ИП Знаменских А.И.", + "counterparty_name": "ИП Иванов А.А.", "counterparty_inn": null, "data_type": null, "opening_debit": "34618000.00", diff --git a/osv/synthetic/s43_subkonto_unnamed_60.xlsx b/osv/synthetic/s43_subkonto_unnamed_60.xlsx index 43114b8730a7b7412027223362de3c6f9389a4fb..3901ebae2f5ae8f11c505b47f3e43b97d42a2323 100644 GIT binary patch delta 886 zcmV-+1Bv{uDyAy1JO~Lz1dH590{{TmlSK$M7SyQi+JOPA*dA&RA>HL6rHe*N7p+v2 zkO&li+cXi_p2xlCoO@?{J(V$Ww%q~76zy83?N+4$rNgo;yPW~HbT>nW*oK)NaV(ue z*Xhgd(7}3FI9aBgRg{8k>4q)UDq?KIsa42`nud)x9ORBHOLsohu}Q{NNtG4@uZ{kI ziUGM+8R~t!iRqgmI6zkpaJq(tZPy?+a&WJIDm_=r>#FY}Ox_xJ?1tKiN3%u9Ht)Rb zRwadt!Y1xej-kV22RE>3aww4UevT?FS-EGpy?}3v1c1IR-Ng-JzB9UXP?d@j>f)Y0 zGU;nFeu3vfX#%iAOjq2|*f-9Db!X&KV$HpQ*fMPYsqZebA^VPkwy9ISR&mG}IeZ#_ z;CO>81|GxaN#3Lmj2qxVYwQRAAqnoc-hp?*F1$VO*xP5fY{sTiMWz7HP2~<;02^Ru z1MF-v_63`HdvG1FJ2ra;uoL#jJ7(7ae#s`@34+H|bpL|YJ}5Xw?4HdKv_G;b^bb)% zNl}ptROFIWoB_@ry8({tGAbcpngaTNiFX9dmnf@b^N3w#QaH4LLrdcL=^a9>JZEnsW;eCx@+%cLMk(?r}LdKl#+_e=R~5(C^!1P-O&`-IqU4jn>^!D>H3qzD$!j#4E? z5?NRzvR+8y`2ve_!52P8T_e%!6zKUjx{38`K8daMM7H*m*w!D<7D??|ut(Q_5`YRy zMp5H7rtiS3@lGw5FQ`RDfj4d^oWQV2KAS6O4=q{|kYZ8GhfN|%i-A%oZmuX{@qvG1 zX9#XkCwTFISCxIvz&|d8;>r+OsU{JDr9faQUErd0{(`sToPA~I2nN1G=TwT@g{75A zOtXkcRF!36R}%BbD-pYjuSRo!x71aS*u*Q2!lbUd8u}O|ulYhVf?Yp>l65Ic%bj;9 zCZ@5WsQ(d)x;hkfbtrP^6Ki3oFOCK->X4C5{clk)>YqRATDjqW+aFA{weouGL{lrb z{0Vu<;2(Hi=}zCUU1Z`Ouql}}uygzagx{fLD7Nbsp>Sjn%>f*|u)_@vV7^BP4LY15 zILp=k0kg9U^#=(>1dH590{{Tmld%(50jrY<6gmM)lSC9a0W*_*6g&Z;le!c~0fv(T M6($DK5&!@I0HuqZuK)l5 delta 908 zcmV;719SYQDy}N9JO~c7D|y0C0{{Tu2><{X0F%5E8k1xQ78aDK?b?9>tk@oE4aZ0UwARZ3!P&8d{gfSQJl*Bs;yEK7IZSFuTk zWl5E01M5b&N5z0#DfRU(-oW&A9~_`72RLoR!nSJ=8#%aBf0mxB#Z}dJ5hia8Jaj{C z#G~0HWQ%uRw#$;jMPU=SD96y@wT)}oG&vMVc{fFs=B(T^+@8TVMFK$IrtabzG2a?( z+AB+W3AJ%YADDEV3}4`BP?`X25z`emRYih;+ld6GA%1LFpG&OXj$q(BbWWwX-B?(f%taOviK;R$@JeDHe|be>SMgP8>b7w8BR27hqc98CUk!bf zlGlEw8Nu!!LFu{_CFagM5EJ9rP}KhjMO_|>x;zv)^r^M5(-l_)7q!U1rv5i681?TV zRjpX_zwr+ynp$x+cA~Bo8~%hmXYemRuXLwt*e)`02iTO<3fMXRMZ)h;(ihuxlTf%i z6^LdJE@0T<1~A_tga#eX5Zvi1{{XYA3-t#Hv@3bSPXhn|-;=2mR{^t=0Tem`Qj Date: Mon, 19 Oct 2026 13:25:07 +0400 Subject: [PATCH 9/9] =?UTF-8?q?test(golden):=20s40=E2=80=93s44=20=E2=80=94?= =?UTF-8?q?=20=D0=B2=D0=B8=D0=B4=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20?= =?UTF-8?q?BU=20=D0=BF=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB=D1=87=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8E=20=D0=B8=20=D0=BF=D1=80=D0=B5=D0=B4=D1=83=D0=BF?= =?UTF-8?q?=D1=80=D0=B5=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE?= =?UTF-8?q?=D1=81=D0=BB=D0=B5=20=D1=81=D0=BB=D0=B8=D1=8F=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D1=82=D1=80=D0=B5=D0=BA=D0=B0=20A=20(#59)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 5.5 --- .../synthetic/s40_flat_header_account.json | 15 ++++++++++----- .../synthetic/s41_flat_chart_of_accounts.json | 13 +++++++++---- .../s42_subaccounts_totals_reversed.json | 17 +++++++++++------ .../synthetic/s43_subkonto_unnamed_60.json | 15 ++++++++++----- .../synthetic/s44_subkonto_unnamed_10.json | 15 ++++++++++----- 5 files changed, 50 insertions(+), 25 deletions(-) diff --git a/golden/expected_osv_parse/synthetic/s40_flat_header_account.json b/golden/expected_osv_parse/synthetic/s40_flat_header_account.json index bd2b6f3..1c6ec33 100644 --- a/golden/expected_osv_parse/synthetic/s40_flat_header_account.json +++ b/golden/expected_osv_parse/synthetic/s40_flat_header_account.json @@ -28,6 +28,11 @@ "code": "OSV_HEADER", "severity": "info", "message": "валюта в шапке не найдена" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "вид данных в шапке не указан — строки без метки приняты как БУ" } ], "header": { @@ -74,7 +79,7 @@ "account_code_raw": "76.Н.1", "counterparty_name": "Август - Агро ООО", "counterparty_inn": null, - "data_type": null, + "data_type": "BU", "opening_debit": "1000.00", "opening_credit": null, "turnover_debit": "500.00", @@ -93,7 +98,7 @@ "account_code_raw": "76.Н.1", "counterparty_name": "АВИС ООО", "counterparty_inn": null, - "data_type": null, + "data_type": "BU", "opening_debit": null, "opening_credit": "200.00", "turnover_debit": "100.00", @@ -112,7 +117,7 @@ "account_code_raw": "76.Н.1", "counterparty_name": "Агроаспект ООО", "counterparty_inn": null, - "data_type": null, + "data_type": "BU", "opening_debit": null, "opening_credit": null, "turnover_debit": "50.00", @@ -131,7 +136,7 @@ "account_code_raw": null, "counterparty_name": null, "counterparty_inn": null, - "data_type": null, + "data_type": "BU", "opening_debit": "1000.00", "opening_credit": "200.00", "turnover_debit": null, @@ -150,7 +155,7 @@ "account_code_raw": null, "counterparty_name": null, "counterparty_inn": null, - "data_type": null, + "data_type": "BU", "opening_debit": "800.00", "opening_credit": null, "turnover_debit": "650.00", diff --git a/golden/expected_osv_parse/synthetic/s41_flat_chart_of_accounts.json b/golden/expected_osv_parse/synthetic/s41_flat_chart_of_accounts.json index feee383..7791aff 100644 --- a/golden/expected_osv_parse/synthetic/s41_flat_chart_of_accounts.json +++ b/golden/expected_osv_parse/synthetic/s41_flat_chart_of_accounts.json @@ -28,6 +28,11 @@ "code": "OSV_HEADER", "severity": "info", "message": "валюта в шапке не найдена" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "вид данных в шапке не указан — строки без метки приняты как БУ" } ], "header": { @@ -74,7 +79,7 @@ "account_code_raw": "60", "counterparty_name": "Автодор-Платные Дороги ООО", "counterparty_inn": null, - "data_type": null, + "data_type": "BU", "opening_debit": "820.21", "opening_credit": null, "turnover_debit": "5000.00", @@ -93,7 +98,7 @@ "account_code_raw": "60", "counterparty_name": "АГРОПРОФИ ООО", "counterparty_inn": null, - "data_type": null, + "data_type": "BU", "opening_debit": null, "opening_credit": "2763.79", "turnover_debit": null, @@ -112,7 +117,7 @@ "account_code_raw": null, "counterparty_name": null, "counterparty_inn": null, - "data_type": null, + "data_type": "BU", "opening_debit": "820.21", "opening_credit": "2763.79", "turnover_debit": null, @@ -131,7 +136,7 @@ "account_code_raw": null, "counterparty_name": null, "counterparty_inn": null, - "data_type": null, + "data_type": "BU", "opening_debit": null, "opening_credit": "1943.58", "turnover_debit": "5000.00", diff --git a/golden/expected_osv_parse/synthetic/s42_subaccounts_totals_reversed.json b/golden/expected_osv_parse/synthetic/s42_subaccounts_totals_reversed.json index 5923127..40043bd 100644 --- a/golden/expected_osv_parse/synthetic/s42_subaccounts_totals_reversed.json +++ b/golden/expected_osv_parse/synthetic/s42_subaccounts_totals_reversed.json @@ -28,6 +28,11 @@ "code": "OSV_HEADER", "severity": "info", "message": "валюта в шапке не найдена" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "вид данных в шапке не указан — строки без метки приняты как БУ" } ], "header": { @@ -70,7 +75,7 @@ "account_code_raw": "76.2", "counterparty_name": null, "counterparty_inn": null, - "data_type": null, + "data_type": "BU", "opening_debit": "1000.00", "opening_credit": null, "turnover_debit": null, @@ -89,7 +94,7 @@ "account_code_raw": "76.5", "counterparty_name": null, "counterparty_inn": null, - "data_type": null, + "data_type": "BU", "opening_debit": null, "opening_credit": "300.00", "turnover_debit": "700.00", @@ -108,7 +113,7 @@ "account_code_raw": "76.Н", "counterparty_name": null, "counterparty_inn": null, - "data_type": null, + "data_type": "BU", "opening_debit": null, "opening_credit": null, "turnover_debit": "5000.00", @@ -127,7 +132,7 @@ "account_code_raw": "76.Н.1", "counterparty_name": null, "counterparty_inn": null, - "data_type": null, + "data_type": "BU", "opening_debit": null, "opening_credit": null, "turnover_debit": "5000.00", @@ -146,7 +151,7 @@ "account_code_raw": null, "counterparty_name": null, "counterparty_inn": null, - "data_type": null, + "data_type": "BU", "opening_debit": "1000.00", "opening_credit": "300.00", "turnover_debit": null, @@ -165,7 +170,7 @@ "account_code_raw": null, "counterparty_name": null, "counterparty_inn": null, - "data_type": null, + "data_type": "BU", "opening_debit": "700.00", "opening_credit": null, "turnover_debit": "5700.00", diff --git a/golden/expected_osv_parse/synthetic/s43_subkonto_unnamed_60.json b/golden/expected_osv_parse/synthetic/s43_subkonto_unnamed_60.json index a5f6f51..a88bc8f 100644 --- a/golden/expected_osv_parse/synthetic/s43_subkonto_unnamed_60.json +++ b/golden/expected_osv_parse/synthetic/s43_subkonto_unnamed_60.json @@ -29,6 +29,11 @@ "severity": "info", "message": "валюта в шапке не найдена" }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "вид данных в шапке не указан — строки без метки приняты как БУ" + }, { "code": "OSV_ROWS", "severity": "info", @@ -75,7 +80,7 @@ "account_code_raw": "60.01", "counterparty_name": null, "counterparty_inn": null, - "data_type": null, + "data_type": "BU", "opening_debit": "34618000.00", "opening_credit": null, "turnover_debit": "4236500.00", @@ -94,7 +99,7 @@ "account_code_raw": "60.01", "counterparty_name": "ИП Иванов А.А.", "counterparty_inn": null, - "data_type": null, + "data_type": "BU", "opening_debit": "34618000.00", "opening_credit": null, "turnover_debit": null, @@ -113,7 +118,7 @@ "account_code_raw": "60.01", "counterparty_name": "ООО \"ЭСТЕТ ОМСК\"", "counterparty_inn": null, - "data_type": null, + "data_type": "BU", "opening_debit": null, "opening_credit": null, "turnover_debit": "4236500.00", @@ -132,7 +137,7 @@ "account_code_raw": null, "counterparty_name": null, "counterparty_inn": null, - "data_type": null, + "data_type": "BU", "opening_debit": "34618000.00", "opening_credit": null, "turnover_debit": "4236500.00", @@ -151,7 +156,7 @@ "account_code_raw": null, "counterparty_name": null, "counterparty_inn": null, - "data_type": null, + "data_type": "BU", "opening_debit": "34618000.00", "opening_credit": null, "turnover_debit": "4236500.00", diff --git a/golden/expected_osv_parse/synthetic/s44_subkonto_unnamed_10.json b/golden/expected_osv_parse/synthetic/s44_subkonto_unnamed_10.json index ef89306..4f0de92 100644 --- a/golden/expected_osv_parse/synthetic/s44_subkonto_unnamed_10.json +++ b/golden/expected_osv_parse/synthetic/s44_subkonto_unnamed_10.json @@ -28,6 +28,11 @@ "code": "OSV_HEADER", "severity": "info", "message": "валюта в шапке не найдена" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "вид данных в шапке не указан — строки без метки приняты как БУ" } ], "header": { @@ -70,7 +75,7 @@ "account_code_raw": "10.01", "counterparty_name": null, "counterparty_inn": null, - "data_type": null, + "data_type": "BU", "opening_debit": "34618000.00", "opening_credit": null, "turnover_debit": "4236500.00", @@ -89,7 +94,7 @@ "account_code_raw": "10.01", "counterparty_name": null, "counterparty_inn": null, - "data_type": null, + "data_type": "BU", "opening_debit": "34618000.00", "opening_credit": null, "turnover_debit": null, @@ -108,7 +113,7 @@ "account_code_raw": "10.01", "counterparty_name": null, "counterparty_inn": null, - "data_type": null, + "data_type": "BU", "opening_debit": null, "opening_credit": null, "turnover_debit": "4236500.00", @@ -127,7 +132,7 @@ "account_code_raw": null, "counterparty_name": null, "counterparty_inn": null, - "data_type": null, + "data_type": "BU", "opening_debit": "34618000.00", "opening_credit": null, "turnover_debit": "4236500.00", @@ -146,7 +151,7 @@ "account_code_raw": null, "counterparty_name": null, "counterparty_inn": null, - "data_type": null, + "data_type": "BU", "opening_debit": "34618000.00", "opening_credit": null, "turnover_debit": "4236500.00",