From 33de4bd1ed914317ae0afabb43a30e615a5a8e1d Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Mon, 19 Oct 2026 12:17:15 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BD=D0=B8=D0=BC=D0=BA=D0=B8:=20=D0=BF?= =?UTF-8?q?=D0=BB=D0=BE=D1=81=D0=BA=D0=B8=D0=B9=20=D1=81=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=BE=D0=BA=20=D0=BF=D0=BE=D0=B4=20=D1=81=D1=87=D1=91=D1=82?= =?UTF-8?q?=D0=BE=D0=BC=20=D1=88=D0=B0=D0=BF=D0=BA=D0=B8=20(tabular-parser?= =?UTF-8?q?#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