From df0f41b9c0ba6060d8fbfb2262475bba79f5a74c Mon Sep 17 00:00:00 2001 From: Aleksandr Meshchriakov Date: Tue, 28 Jul 2026 11:07:47 +0200 Subject: [PATCH] fix: align reporting forms and demo analytics --- input/demo-periods/Ф-3_2022.xlsx | Bin 9616 -> 14581 bytes input/demo-periods/Ф-3_2023.xlsx | Bin 9648 -> 14610 bytes input/demo-periods/Ф-3_2024.xlsx | Bin 9655 -> 14608 bytes input/demo-periods/Ф-3_2025.xlsx | Bin 9648 -> 14614 bytes input/demo-periods/Ф-3_2026.xlsx | Bin 0 -> 14588 bytes input/demo-periods/Ф-4_2024-H2.xlsx | Bin 11510 -> 25076 bytes input/demo-periods/Ф-4_2025-H1.xlsx | Bin 11491 -> 25096 bytes input/demo-periods/Ф-4_2025-H2.xlsx | Bin 11510 -> 25138 bytes input/demo-periods/Ф-4_2026-H1.xlsx | Bin 11503 -> 25140 bytes input/demo-periods/Ф-6_2022.xlsx | Bin 17107 -> 25207 bytes input/demo-periods/Ф-6_2023.xlsx | Bin 17136 -> 25233 bytes input/demo-periods/Ф-6_2024.xlsx | Bin 17151 -> 25261 bytes input/demo-periods/Ф-6_2025.xlsx | Bin 17146 -> 25259 bytes input/demo-periods/Ф-6_2026.xlsx | Bin 0 -> 26317 bytes src/apps/core/excel.py | 51 ++ .../commands/generate_test_reports.py | 76 ++- .../0003_reporting_analytics_fields.py | 73 +++ src/apps/form_3/models.py | 70 +++ src/apps/form_3/services.py | 107 +++-- src/apps/form_4/services.py | 91 ++-- .../0003_reporting_analytics_fields.py | 128 +++++ src/apps/form_6/models.py | 142 ++++++ src/apps/form_6/services.py | 231 +++++++-- src/apps/organization/analytics_services.py | 441 ++++++++++++------ src/apps/organization/contract_serializers.py | 42 +- tests/apps/core/test_demo_period_workbooks.py | 41 ++ .../test_generate_test_reports_command.py | 45 ++ tests/apps/form_3/test_services.py | 95 +++- tests/apps/form_4/test_services.py | 60 +++ tests/apps/form_6/test_services.py | 116 +++++ tests/apps/organization/test_analytics_api.py | 146 ++++-- 31 files changed, 1627 insertions(+), 328 deletions(-) create mode 100644 input/demo-periods/Ф-3_2026.xlsx create mode 100644 input/demo-periods/Ф-6_2026.xlsx create mode 100644 src/apps/form_3/migrations/0003_reporting_analytics_fields.py create mode 100644 src/apps/form_6/migrations/0003_reporting_analytics_fields.py create mode 100644 tests/apps/core/test_demo_period_workbooks.py diff --git a/input/demo-periods/Ф-3_2022.xlsx b/input/demo-periods/Ф-3_2022.xlsx index 51d935b2b2b2bb9b7bfb9c61145f2b818e23725c..6d209077e5c34bd9f6f7c3557ee2418db125bc4a 100644 GIT binary patch literal 14581 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 diff --git a/input/demo-periods/Ф-3_2023.xlsx b/input/demo-periods/Ф-3_2023.xlsx index 9e96cfcf5009994647546b18a05d9916dedf0978..5f6e750bbaef73951024177b0c4c17da8c9b8bf0 100644 GIT binary patch literal 14610 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 literal 9648 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 diff --git a/input/demo-periods/Ф-3_2024.xlsx b/input/demo-periods/Ф-3_2024.xlsx index be590ea23863cdf4f3e409e24823ac11925d43ee..752b9cc99f43bd23c1d0797e2143055b2634530d 100644 GIT binary patch literal 14608 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 Z{%v90)}f|35IRQsq$2G@SlNTS{{v!>{@DNk literal 9655 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 diff --git a/input/demo-periods/Ф-3_2025.xlsx b/input/demo-periods/Ф-3_2025.xlsx index 46bc5f88f6c05546935158fe3af3c0c82e9351dd..297365f091cd380ca402f91c61dc35710192c432 100644 GIT binary patch literal 14614 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

G$8Yoo}mRyIUbjqxxb*GRx3M;EFt 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 BFa7`k literal 9648 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 diff --git a/input/demo-periods/Ф-3_2026.xlsx b/input/demo-periods/Ф-3_2026.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b4489d1a0db7e4543b46c315de164e1a8549a6d4 GIT binary patch literal 14588 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 Ceww`i literal 0 HcmV?d00001 diff --git a/input/demo-periods/Ф-4_2024-H2.xlsx b/input/demo-periods/Ф-4_2024-H2.xlsx index e3faab5e0021bea2cd773e99a8abc3d901ef1607..4de29b001ef943195da311481434141088d1e0c7 100644 GIT binary patch literal 25076 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 literal 11510 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 diff --git a/input/demo-periods/Ф-4_2025-H1.xlsx b/input/demo-periods/Ф-4_2025-H1.xlsx index e5ec3668f91d5f0bfab2b4631ad4b8b025be8ed6..a7918809d37f78722bfa3c4dbdd47cdc151ce40c 100644 GIT binary patch literal 25096 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 literal 11491 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 IAMCaM7ZS!RlmGw# literal 11510 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 aX#Q8)%S%DSyqyC6_2u)rz*L-X64LWTL`0{E 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 literal 11503 zcmaKS1yo#HlXXIn#@*fBgIjQScWvCA;O_43?he6%yF+jY9z3|i5AU1xzs#GNSG`*9 zTDR)f*{62h?yfB-`3V%|0{{T{U@iSy>%$)g{q|Yc9%$)6Pxt;>88<2Mi4h_A%rh*; z-K7at$f&*}WGY?E(?sYlNCYZK{WPBZ#AsQxPQ>H;3 z5%q-Oo}UeOdxYI#p*l`Hp&~&7Z#Ysm*JpV}5NG|d4x3?7OTI@5T`ZRXwAqy zz)D;9)2q?1n~>6*b<_37NR{B*faIFeBavX29UTx6j_EDcycpVB3K4qdc0}1pAw}gJ zESWY-dY5~5834r(&Dx(Kc9|_o^${suPTZ}*_L+Rh`vFxi4je52k?5E9IO&5?)A{ey zg#$|rZKi`(k1@htT`2PY1>+K9zOZxv{<6>iPVPIopLFZ~^`5&AV_|1D6 z5Zd=q4bB>m3j!2q_K~1kiw-^ov^Pmvikq@oT|Aaao8ka+A+r0%%uRyyN9XN+^^=Pn zwkygRaR3|#7BVeRJ&xD2bo7+RM`&--X3^`k31XdbC~L+xl_i+aAf!{_f6Ww}+f8NY zSpuhwt2GlYxpha_fA}1VC|a6>*(stEI2Zf8PTxq+VrscNU`(CkLJymv$LB=R*7@nW zl7-WR`nG55^8&%Q6r&ws?FOQc(G{1y?_0>jhZaD+m7s1fxsSKpX6P!S)Vds`23e|% zq;z}6B-|YA=h@zI>YU=le8;KuUvYx}4^Dp~RG2VnpU!|VaOMdm;({GuW$y0BT!k#l zH0vE-FsvRzT7no7yMxg@EBJ`z8OtkjA)*~n8*c}ndi6m}mpfdv=W7OK0EiK^aHt6AAG1_#zdB70XApX`ol z27$R9UE1@eELp4iP`Us&sfKHo786cxU?ko`BGvn)>a3#We-D8pEvx(WuBHM zJhB^;8KOwFwvJPbq_DoU?U_GQ-b1bC(WfT#Nv48vLI$lRm;iuwWY+%vHD4V@JulsFPBxYdR5uWj`3Zkyp6Qs0isEBjlSt7c*9?)sT4<1$)tW=|8OC<-Y`cnrA@60G>_yi+J7#cy z^_~UuMf2f%Pm9pPWf!-!w*5xSmu5i<&AV38`;uM!3F1U7g>euG0FAXzKUXG%+7Mev z_?V+0G#1+wd3IQTlI_y~<8U$t;%>O+azt8MM;7e!%=`N&Aa)Yxm)g%F(^6 zhCPCPnbhd`m1g8$F6$}JVDI%A7-LIg_*R>|VE@Kr<2#G{lh&-$ z8Bhk#Zc&oXR0VrPL*kUIcpJiH;(wfe#IgNe&N$?}vU_3z1BoCeny*Bx;5UAjammNa zOIE+aNBOB*NG$D~qrrv-0D!L#xp0N^=CSIOA&7yx1k^{wbF3mm+Mw$iyOtrvA?1v> zW^8dtC5#jUhUH`p-Qsrxj!fF53e*mAL*z+*r#q)JeXgT{FHEslTM8$ zP@OWK3#1D{V|D~hIkd-iP}Twyn#_mWXRq2`!+nmF@Yc3IsqScWxia~H6T}&AZF$Sv zqT7nP;xn>>w?XaA(xmCp``XgG(b`|!A8oOIpdJqFForE@cXI#HhfkY{cJ`xvVbk-- zdiRcY{R?FNQ>!Nb0yaJT5?-wKK))8YD*LEXrpE6?uc_fdDtGA^IWLa)NQ3O4FXGMY{XeCN;*M~w*aV?yGnHgzi)C*cSaeCFVWS7-rrm zu?h2UltB3pB^*rk?SV#$j`n8OCJyhM7*Afa#u9zw#3M?6A{D6u6pS7(k<^@Q>FvQM z0(WfU)PCTCyt|35Hg%!$+znY6)`A)FHJX1Zx@AoQd5T;9%VbTT1tqM>YORK3lgkpb z$;8<)hsnzvp2ylUTJ*Ebq9w#p*4PgBCIt4$xbbh(wa2YZ6MQ9ZM3G3n`r0+PC#N%P zzAL=Bjq*T!lA6zeg^o&!<<{)+AZ$&qazx{0E-xQ)-6pO|k${zne9M;EbL{lZq%+aV z6HDG?YM^GM@z2o68*2ppmBu`BXa7CbwwJ+S^17e%7W(x%%qy$#E?C%$xLyKXmy5TD zhk;lnYT6~WX{D`LTh>93wQ>#}#UjHesaU_xe)ClU^S{zczO3(Fit(s+l@eE-(;upJ z{KVuFY?qqNcG5jN@boMxGPjj2$(_S zJe3;Md*oz8IfW)8lq0XH?ms}-iJr}};7!b5RT+{6KWd!w4yqVBg{`@NqyOn!CM`V| zc*;fgq{_9#;Q27U56^c$Wp$;Mt38z`y7mQavM7XJq&&h5TMHLJQy2;U;Db&UvKZs*O~8x<=qm93R{zr-P9ilu&nvPkQ{| zF1)YMFC{%5aqTNU%i$$zoW8^-{Gd`4o0jjSgTF0El@h9M%`4<#N)dK3C4@aoz@N58 zfU6JU8BK}~BKn=#p$~`4F`Fuw@XklFbeS1%Q>dVg5EGAlaTDe?nc%z$OtQFui_xbn7J|A5BCci_c5B0wzrP66_KHIB~~@nBiJua z>Q)5(mX2tAE*{jl=b2?<-r$fWI)bi>{3JsjggDY07)Q1U%}E^BltjZfpK-s5IqFfW zC4-irPOWF{9K#{1AS!Y_AkzhZwjC`W&B~V;>3pROPiJK1+b&_3Jc`tD;u566@ zd|s)&H2$xUsOui;3d*k4&Mc@lVx&sk+bGJ3$xo!piOnCkQTAAVfrOiR1d^tHBI}MD zYiF#noCBL>49%OBvFJ?2t%Q)EqeOuT;blpwXOEA6T0P}i^h=-$|w}~qeyiky18~b@Ol-% z>6?3WN>JYU2+Ocv>c1`qeyH~e4(R9g;L5(9AQ&PwAk53q$FH)3nAPV^Alxvkh@nZQb?;ntgI>|lN%W$uob*;?p(`dryzuZ9kU+DDG7uF z=`@-N?i~R=-WD!ti3CSjv{l5TqMBsv1(E-C?1;yjN&j`jKOa9TYSnO|8`-hxtdwgXV3F!@wEbnOct12KG9BjDv*0I8oM*VjFMHv8}!Dj^*Cfmzh$?gGe1m( z6d9KrfJA3_L5m1m*zOw&MLM-1DYt&Ec*Vel5WIG3KI|&_KVwZykOGdfB-0s zOGlOIB!yFv;+I@bRPN@$vh*W~M9uy4m~&1h_aU4oYbPU4Cfw90DbYOyCjWTW%mjb0 z@aPJgs1%*Jq;;t4B9a9!Vt*G+gGJN<=`Kx}8|1vU0!uQvTN zPV)sEe?c1#m1$}DBkJ4l!d{>~r^!|gvE${VKj?v%BDzk@UbUva7u{Pb)0Sm66-(;H zOM;)<3g;RH>t9~p&!$-_@O21~^ zVoua*@9fa8>z>7XCrWLtS?e;nO=QO>8C&z&s@~e(oiC2plh^y@T^2S;ihP>$A`Yy& zzT~eU@8qWjmIHe}efS{pujI%0`ydjr06dLohQuj@zr3Q@QF7d%IrS z@z0)cCie0VcDAdkO4l+scfNjQPV;zeaepbit~PKn>BNw-2H!p~y0g2j-t@TL$bQ-H ztv)!8zF)I#SsVr@yNqsg3GeT}2y!frVfj z<@<(zhFRFN{;czdk$RQBy=|MU6EpJTwdg97+50PJ`L?X}>M$~k)SDR*p4W`j*NM2B)-pa( zW!Y46!`lU$(%omho5AQ{Z{P}iYoQl@q-c0o66*T%mA=`lQIi7~7JX3t=@psF#fcs_ z{@w-;Oeg$gQ21r=?ispn5jn@^!Ge1>?{VeJ-E45W{AqNV5m)`@$>5s8tBP}EX$q-5 zBi2h=^>aIOSNeutCoi@6Ez3kUj&Q`8`H63Uv>v&mu8l&P9yqMj~ zo}8?@sHf@rJ-NTHa?g>pQO9$O*LE(i4-wv73}1gxow-y8jpyKbe7+xnH>fJloCk31 z3$+g&+2vHdS5^dej% zWAf+tcUn&V@^BYH2le&pBmp>Hq4MVxcg4lR^E_L*+etD(!bSweNePaXks!MO?$hjhrr9Z*~lAX!9Xp^L`%yXHq?#+lbV8t?{1Tl`j*YjZfq0b;End~;)s3scJ)h0iW6v- zC9L0f|4MNL*D6mP`q7>Ac z@Qx&uCwYoL6&y*>{HVUGsVWHD_CS*>QGx6%5`$ebzM{`%>vgMvxn&`ZnTGe4Pcm5W z%w0z4v0w!0iiKkq*3wTx?%5~%Lpu>N#v1_SUL-@+Pul%1bZeU`DH(2*6>5XLZrEm0 zS*}DS6)FUv7n)=qnQ{h~V$`T`p!DM#)W-FOvx@KIxm25kMmojJ!V^Bl+EXY*2}y_+ zI4&r#1}t`zBXCjnF%TTdNKkyX_9w^*mkwpeD9_IPC2FIsz(Az|dMO+xckCJ3x+DED zzFE5BfQFZ%4^*+}3n5toBcvs+xP&`BnYgF{p_}DHRY9D@T>&>)0&?PUtRI+e4nhV3 zO<9VqNq`<%5D3!=GY#t99S?B|g29Zz`W=W=CNj;};G;F@&?TBf3ch5}dMdZ8Y4w#K zHA%Xps1^)0U9p{gNfeSy4~b|i5Kcc5v0MU1z`GluS~zABQc5{cuJ_Gei28_tx&;lw zBferBD3qc^g~STqEGV%BjyIG;IuHzS%$(>+QNHEyBg7<<@#|fA+~nbVP9d^IYJgJb z3G5qW>n-v0Jdd+>XIxY8LbO}P>=RO_A>-8+)S<^s1s{sh7&jwhRZ^GkXbTXMDb=;` zyzN`K%=Xq^fc|jaRR+?SaTosk!qisRx!)Hy9MBU^I?rLImMG;%*A)O7G1Xfwk|LaA@0cwbX+vb zN1{Sn1vsIRTrmzLO5E5PZONsn&EHj=I7x+aM;CxKId7q3P7uRdegxMNR!9)sd$$f6 zSt=DFkJBa+G{+nF9I3~?w9DmQOABNglFcUE7^z6b76@sIgK2#6GJA^i`-NCF7(7)( zZ38Jv<)2ZXd+qNT#l&iQTs>Sf8ED9^o@62S5(ZIKv-OKYFg}x{$QjHSw}L=oon+`u zaL$!NhpO)rS;J`~(d zB-LitDrBz!Lb$hIYl&^)w27KMnBy0QKw+kRsl3`*rdhUtW1097n#;Hd~s-G9YRs8`vN(_J)L@h6hV2RBeRzt?bV){Xn z`*hX2mR>jUppYMz46E=p-!8tu63L=*A&R}wMfn>^BAg(HxH(FYJ-{y)ClnNBmxM^a zTNq{+p(4h5gST7B%UE!F1+;!$&*#oZ&#g7oL>+SXGk9tgNn$1$He(T8E%)dY%K?(% zw+lc10}QkTInGc_AkUA>0Da0FsO&f?&k(gH-rhLjT|VLzInEhlbw9>I2ftJrnW?6? zyaOFVv?az$3BEmtC1is-kdXRw#1VGmD3lq=6^?QqNK_^O_F{T8qZRAlaz5(LfX$sf z)K07#fh(ZXt1;@gEI|>G#PHul8qjMu%IB8lH15yh54V+X^I5;*tv9J0_+p%H=e8Dc z;qY7I{>z2w`RA--UZND4K!AZGKov!}XEuK<0}j07%5VT!D)5>o${tVctEoetK-~wK zqnKn<174Uf%R%3RViJM8HMmU2#~?(JZr9DZLkHMTu>VD%#WbN7DH}K(68}h#HiGR z38H2lxvap4%X~!JE?YB(QA41+6R@;x#7u6(Idc1caSb=POxOz*tcn{2FjlIe*u(81 zB{nuq)=O;9jdzvez(2<^k4BxOh~`g39ucmk^%}VtAGM7LxWYu2{%*2~xm^GwQ38<1 zvEek)x)u|lkFk|e9n_QuhulwKH@5AkA{4}^aAXSVwu~hJ?{05o3hRDEz0S3q^18lj zph+KFFZYFc?o4)Xh!qIQjX; zekijtmUXX%bpC$43zYdnNRpylLLdstysXaMF-52aCGp^oGzx7&83m#(;6QOxPb@Q9xVi>~HBYLmBn#3EUz2Q9FK|${pRGm$EpDA;OK3{;~kYPv1i9?AV;J_M+EuS0#J)uXeTPqRs0f3#u1R_9z1VWeq4}MEM z%6YVK_@!lvUm@_xRM7n``FVzrx8!M;#R>bq423NrFhm3}fC~}^bQ{WKvyEKt?4m;L zdxYBx-Z7x0=GDsG}jf(SeU| zKTAY92}Cd$>+CdO1(gaA2N3s=1R&}o(Sym{2LxMbL^z1hWZy!fXGY*OV4^D$MtyHr z;H{-0OQG%CMe@V6Am)|i3Mh{{&(&QAW<*MK-iO#uu-nz8CQg#tA)N-;xj}|lRKC>< z(^i65w!M0BKRDrL0fGdDOGS5Pti$rqH%?A}2?~C6r=I8Ek^_YT?CYvDhG-Ooh7#Zs zYNT)FNwl>7?J$D=FIL?R4{IM40QCv=R?fhaWXCBPC_-ucA+U+!L}OW z(dDD;$*S3|^HKKq9|>6j;`bh#v0VCE0JIH6=aCC(@!a@1lN%+S#LaONV_7Idi}phz zcOg=voMxe#Y5$az+Q3xb>SPHyR^k^|$6NJDz8Orf!U& z_`XiGXO20^(|QqrWCW1_$)VWWlFF;Ms=W9mqP_M88HF7EN`!+-z78G&T@V3X2m_5U zcbTUU!?rX^wGKhXj~_pIEtBo$ClW+)ja*PN1b7Z>FO)5;xOt>o1#sZFff-?t{u`bH zW+ziX4#VphPO<6l+=W39`sDqSm}Mej+lPZ_GU+Ora?? zE6QlMIU}5B>UQ`A-DL<++!_k3sT~W%WM}RULZjux;zCk8mGB;PpD~Du$l|8iPxvhC z%lHa?PG!SwhbaRC-`HA#cm`v^Oh*+QJPMDIOkT<^H$E1M-2K)lb1wwtU=GHk14eJ@ zw%cRr!Sb~fT;mD{N6^a`!NLeP!%U|jd4XCwsfJ21GQv#96QHRu~ihT^00)!Fia)3|d*g%czqSAJb7{P%+l69&!*_Iyi z+W2{6t+;9y4%b2t4F012%PlX+ZmFS(PY*!>vm#)t-p5Q6gCV_7DR$kIS}-?i_hA&L zJ(&!2VALLh1H1iHr|vhD$;pj(esn7EguyUnTZg~$G8GvPK~(e5L9ZslXoDmNgiU_W z?4ypR2+1sBpvEE_OA5&VP|9w7bFePF62pxKD9LrI7L8WRW05aARiz@@4f1M*4@K5t zr(JjJ`3YgN*D+r>h5RS`-in8c@A&r!?nh5K5urHDWXB#u-M6lT$*1qHJ|O#RD*hbV zPZ$^Y6mV0~A}hygI;mj?RXg0Gx=p^9$wxwbmS*a4qP;dGNwj5Y=`VmGkc%)N2g7l# zd*{=pOxpu&W+7eeUoio1gv7WuWu92^QGD>R4Md_(;x$S^rr+UwYxaJTQOd!}3n*Lt zPuc^4zwE&AnCaZFtohISiRKDys($#5UVM{ruTyCt&6hpt1ckIhfy|^yAVQ|BknB;c_kFuSOEp*m? zd-{BGXp#8!dUD?;{`6Fd>}x&nlx>z*uU{?LGl2zY+v>j;;$hI4vPEM+jJM~>%R?25a0eMHL@|3v$wHzpf|L!2fojK ztzySz-ULknXWYU&?pvTF0eK{e?6!GGAXIiNH>^(Q*~ikeojfuU(ul1mV_tYGZR3X} z%FZ9~3s`7N!{UteT2N=MXqVdgcHv2&ha&VwuuO*`LDZetU|m?6@pRgqe##3B8N@)c zxX>;UeoLGA?vkTUL8NcsV9{ZWQFvBr_!NHq#b)#(%lr!&1`{XP9vx|1wph1f0d{-Z zC(z=YFaF(M%JcHNX#5uR&%dv>5;gY4`wL&qNL?`wfkthsMYu3yZRk!%Utg{~&1kIs z&Z`%f`?c4v9<^s}rosM-BIqQcn4xl#iqsvnL!$TWBjP*Uzpyy-YY8A6jR>vpj`V2Y zbaKN%_}ly%)>k+RWttZK!v!^hr3{1cJOIJ8EYkTTycqXu`8S_|mI8KX@(XIw$CzR= zefJZu=o;8=SNlJ9yTP-5lHN3ZiuRiwt^bVoP2rkCEoSnguEq)_B=1v*tIE7jxgzxH zv?J0!BQ!ea3P_vh$JVc}t2D_rx3ckej>;X7mmaw=K}Nj&H2k1q<#zT9pAEmTrmGwz z0Qsej>nkQ0x39jPP4_)CpvD?8Lhm>Kl-<6n`*8m0y?STTT)D8`aP5D4{@=R1cRi1$ zppCU7(ArT~$;}q%p#2VQrIO|wv?yNtsx+RYn%xkFF#Ztq(Go;2KHsve60hTKe6}}M zoW)S~Lwu82EV@=WI>yi{E#qj_$Qwq6Kc~llD&@AyDa+`nMjybckBQdLPxwf3tF&g! zh3q9MsLm0jjy8PURh6(J6@0azHdm`PMx81j-bq8#Af%9DG>y4G#*=6=V{kKlcHGyb z+JV6oKjpNn8HHpnLIe|p&$ZGxNY)!DMa-Q#8 z@Tg*xg~?cjHW1146F#_xX(}k{_Sj_%3T`+~-NRre-*jaP-fF={qq<%{HY?#9jqpb; zbnFAlRAw{`7nTnrWZ{NnsdC%;-d7MH-_EX%VdVD$a?4Y}Ui^OGtGb+*b(v+4__l%5 z;Sq#o*}`e!K}HR1K6Spr*iGS&Y_>|4M_#I~^}K%a(2o5s6NwHIZqRb!pP$UzW&mi8 z{`7jnlQw;KG0yk#eV>5KsDvhOdqnY25%7?$DrGIKG-=(Gh-Tn}o%1Qor$3Mk} z@6yY^4fE|%|F;nHpK<;ag}qA?|2Fge)=Rf5$?{)UKZN813-<0&j^2xy56VRf7`^HrspjMhyOp@{-{DKIZzI&vnjupZ7V}RbA<7Y-eDnqoZS@ zdwFx+6q$J^wh6cr+D1pm3P@jPaR}JM$qEd167zL&j%btAu9euw*q&w7$tJghPb9Q( z&z{q=5{dPZ zw|LAhj!L4~Y3hk+vrD@&qdF&6XV-`Bm3)Z`d%$yrP4ukmf4u z!wObu#r6QrcwAJ5h1Xf#@w3jmFKMS%G>s9KmKb&aVs`84B62zd9i8?mI=VeS%=Yy1 zbGG%Q89jSz(6wKNJ?LO?wd=zZZ;qQp7rZxqUyF7PwQ9Yy4Y#l1kjt+0Yj>>?xWyZps{78k6p zYYHh=u#W~F=0OEW$~D#Qsm5m<*(IUD)Ea50n8Xsz!=WPcV&r(sUZc<{Q9kRs7+ss4 z;X2`>-_C_gIX>T4bE!e{sYHgZe_CAQvHcuJ@-?SpuhYYn}R|0Q1{P}KNN@T-B;E_T_pz?s$=oIyc4Y;vE?pT?g#ydw!W{oAt8%% z?X0(N5|eM|I(}h(W?-$7sQH4)zZKo`~P`K5Q<50TC2g5{ajT|0WP zLQq+5VMKq`sTVwrN<#23@INA0(}FD67BE|z@(*~cKIY+E>Q;Pdg!3EAz>#qqZIn_^&+(DCGUhT@w; z9)k1N*iE2&c?{Gonta!zuk(qQsug9LTZ)ZDA3a6?aQH>Y)cNE_;fKc(7vh7?+21Rf zoOq|^wC`fijEh~9UitAm zl@Z_DKVa-XZqNZWxmt{PJm5)+p>JM^Fjk7DQT1p!UQahJKSYc+#2 zO=jjN+6Ls@L3(Gno*15Hq4KVV7*v!ukC`MuxE7XOpS3Qu^vfB_^tY|=upJE)%F@bg zNfk<3g_o%osaF;^-|XyZwq|ZMe2(+!M;SfDW z83*%@GmD%kgm==z-k@%4siylip3g{4y!GAf!AO#!;p_E7p2o>V$(R$I8eE=S7%4dw zYh%_&bp;2T7NxBTWsGJ#$Hb=xDV}Ti!OU_L7&Q=BMjpuRd-L!`=)0))MFUL%`I_sx ztn-Z$x;%N;+W4qXKI9{>xQ0<=e)$JA*{z@W|qXHmj5s(>p-a`$4 z@KR+?O{;L#cCwjD_g6k+?lqo5pDRM=xHyqL*=FOfsOOH;$vC+-$g1j7jLCg|^j-LbJoAsi#bL| zO{XJos?a1*H~}1|8En{MH5tE)-mCoL>1r?Df%vR##49BEsk_M&(CWa6j(wWMYVVT0 z-O9k*b83%{JR$PF35ms49lFW7vjYCH>x;sfJoXHQdr%bVDCd#)JpS7`jBmXweCt2S zY9p8=ioCr2a#zhO`+XOPBI5FAByLo{^_|0fX3c0`jy4e#>BT53E+DneIj-!z+%5K= zn@ItYd5&_kNlW;{JE`s)bmV*i4()5Z-1kcSky* zG@VBXkC*fXF_wBYs?ssn>ynpt3Pd&4W~i%l?y+sr48Lyj*eu_sphJ$%^Kp58UwPBP zp4d|l_Z}tKe%f)$3wh{%t2Wwm`6DXU5jj`pLoAML5j8|S16N6Z`#AL|X*5OHe&m7) zc%1T*r@*7>EnUfl(m*im__ODn#H zgEJqp>ReyjoGc7%Kktl)%Br)Um?R5XqYS3vT>7sEW_2N&$?rSdl3YuTKCp6T+$`Sp zGPifmBqvq7?Y*4O>rOebzQJT;r4L*gQ${%>=I@sB9l8=-F28yaaImCcFo!q(W@^8* zOCiLH^K8p7U!B0EO?|ZrP z+oh4OoLamtyFTI9J###6$F=+1#XzWsHj|QbFhCj6*l6$uKjfz-A`Ta9@i8?$I5_LRocT7+XYjfBrK3l@D5@re)jqsY%rd%I)k{?k! zgZjuUZAkSl=|8Fpg--=*Pdyua_?YkOp2+m;!q2@TC)2a+`f}j&$1~}917~hm_X#f@ zKBTb>*Y`DgQtr;3@9}QnaEeKS$@<4HQd6@wT}uO>Eb(+4I4Fid?w}AO1;l*)V9Ck^t!Hl?f&a@ zbaKh`bVvSdn>`(DZM{4J$O7UA=^_VnM-5(N_=!Ah>tCikPC;HbjyOm?kl^p1D)~HO_dMkx%WKRYRczP2+wh;`lRUa zWzj(`zZ69r^{6ebT~DO0WQwC!hIy6NNQrGIQVm?OVs$cxRcU306-AkrO`(2;ph)w) zmE>8NFZnBMy&tvOIm(M7k?@tPWc!rBwd$10^$}LAJY~v|mqO_WQz_p^qfn~^ywci2 zCs>g*4ZNwLjVT5NlD}nQgBCjsLDacXFol9^QzW+%!D|a)QDCLjv2XRDAkr$YVmR*# z(nXOv6NNp#R4t35PDh2om8e=2;G?y1L*Ai)73K9*YNsKHY!={0NCXA0G=}g7tQW%; z^Mh*F*OUT@gq^6>nc@^m&0(x|CFu=$T^38B81hz@kSAkw=6DqS{MJTlzIIJ#DTyhq ztwT`MWk7Ak3Pqo~w1R_Iu24pU$X$nd16KXkUk0pH$E8rFLQ=*;qRNoe`FmIxB@r92 z9D;|%gQzvK*dT%}wSHiIMN+APjDW4puFlF9xB0G_QJ2ekv6KZ4Fba*!)A*csEkpxS`#;su7{YqBn@9|Er%)%Ad$D!0H*qYk< zWy<#urRj==h@6W2ST++sCy`9V!Y6}IK}LRw*%igHo+hgw4aA(kX_%DC!`D}43`V*~ zq}KG!dsCh^m&=YIMp)eC+|x_c2h2@R&mGI%j|r6v#nry7ePFQ=(fGLWU1LIHY2yPm z4Yj=Z`-(ykH9>O|!Ao`;yk3s38sN`%l$A9uv>Y+4-+oBkH6)V!-DBuc;-kdS#6fe4 z|M?|{Cl(Y!iIDW-Lertj{ly0jAN5c1<`C=khRh%Lhh?F;m!i74Tm`^jG&kCN zM4P0FtK;uAyhBW<^pNhk-tUIa72;ss1J8%1Vd5@c?}jW9WjF9l55&6m z4w=D>zY*eY0%8p(o>fUH*oy%fc#>_4Fre=5q~_^dRCXsJ?%+oP=HQSi%+k_>9Q$C3 z5O>I~tpu?uovQ_wDz40&G#l^6Q?u+%`=f{n5Ijy0Rsrb=BoEEulqy%vT}MX*M>0n2 zh#p*ri%U=yPtr?bONvS~O~qUVTt#yC6|)(JX4TH3yGHhoaJuJ|q?Tw8sF^YeV&jwI zlU^hxBqgp(?#0VIlwHunOe1(i6{{E6L@)BGwO_SI`oipyD--rHSO#Pw60K$7%BIR=irP2_txJuEf!LB{5gngfbF;Z7TR-9G6Q>iIR zD|0DW%4#|F8+4_Z_8icLe#{DPjRIMoU>%}-o28PM#j#`^EV&I#C4^w@*AG^b3n_^$ z<*+eUD*GycV|7?r`sps}A=6&3f{jmW*^MbZCde!{stTlJ7r#i1 z3dkRFURMfTj80qz7Pc=}u|t$*2-T~SnYsp{o*zn~5@rG0iN&y0R=_Z`HEJa}j@4DE z6iFVQg$1s~6;ofVTOLlFX(oaT#8K1)b46%O7q%{uS8+BLTtIr>$O`sTsB9dXZgrc+ zbIBOPI%h&;6-=EANU5!XgtoHA$~DzWs%yoE^vcFQb*zm`I`Kw^#@Ut9(*!L8aS&L< z#AG`0x}}EFYJ(CaGbIa!`TTr(wgB)8sG35;Iw^RVkxF+W#jrN;Pa0X6Z&aC7Ou9yS zH10E62q}g#49OA~t?1|@VWR~x5UqGpQAB`;2g=_nt|(ogJli}G-c{bxpj0v$I35$F zqG*giE6eM5e#v!|${jP{5|nSY+_eVjHB@qs>jDiX8shtH38!NWb!H17oLN&@#JK{9 zKQ$i7xtf(taac6OQ=DqW3!5v~wkLy4`hqn~rpvQ)zF^z>4E%L$%f5uXM%;j;MwrLA zN}7-ty&X5Kq6#`W1ulxgDMbdiZj$!^!7l0!GN$}tQ)R9JT%$NH)jW>%qDrpD;gqE^ z6&Yg_xq`;qHslZJF;WII*$g)Vhf*4)k>{u)rm(`YX?%gdyMVwxbJYfk z83-7Iy(5-K;0uDHs0ol>3?6F>qSl%jz`VicC~#a?v8K6FQS*>fb_N_<4oGG@xT=q_ z5|l`a14e?7t)edPTz6(+4DkhU_}n|qxM{EgERZ0U6^GB%f)$F zK5r-p?|imZAt7Q`CZZRE0T=qa2l-zFOIr)=Q4#xOh-)3MqmIhjU_fRb<*R5!ZwL`w z$g1R?NQ+Pi(WMXoU5$SK%r2}Q?@)OwDbbEqpr00=5KvHJU|yig=!bw3|HQzJS6QZ% z*?T2NiW@;@&5djdq@Yp@aXzUuJ195fT?MJ^eF$!%07Es$g-o>A^5$ag0F-SEgloXQ zxQ>;1#dS4vp2x4dk;T^L!%JrfT5P29?jq0L5c`<|3@B;Hrfx?eNnpj`EivJH^-PWD zjzZeJi&xP;y@@(QsMb0R?6YE4qi-i{pg|=IpRk1YYtvrSqmD>&`;F#xkxHz)Q8*8H zSBmS9IQ6P*|Cp*g9w7kIS{s|5HHaexWoeMpK;uqD%pPW0-hC^2yq%<|SBd(som6)g zQ5q{}r*B~)iTdJF8StJ_nS<>P#M4@+{8}Ta3;D4K(b{4pT)~ zh%YvL>4vdjGaqvG%>t#B>db4jmzbZmY>E09-J3&Yr(ir$j1f9ua$$X4F-G-Fn(P~p zt8As8m2BlIuo4p-)1tZyl;>C4e@0Cxl;`V!GX%g#eXOZ)sxdXUdC&+}=7(C38;k%u z%XZ%p_s*fleOJdsI@cqq&(z7b9l?`yzCyd)E|>dM z;ZhV3Tp-wkASy@VcYk>@d^~6;XUYQUU}S_JJj&r3{xWL7HDIk4c(FmOwHgvBqbfeu zfo*B9HYhN8)t;#au8_eVRlh=tSzLKO#cMHWRlJ-F+lPe^G77&GS(ksGEpj)*=_&0> zUcEIa=3ypRz=bteA_5cBo$Tvqgu@mZd;$pQo0VTeQ07)SR~0i6vfpWNl=KPDByb|dC#2fjF#Qo z|NS1ton}UVzE}#e8P+?y@(E$BHKT`#bg746!1aiwZeGHO6WLh2j24daAjKIJBXuM< zm;2?uHT2XDU2~XwtT=%$ACv@xLS{w+G}ps*Tyt4Ms|Cx|st1~toC zTp#1B}dt1E=nS0F+gsas7WG*gX;x$z6DS1xNRNSrNh25owE*9PjtGxD%O=2T-HEnd`%d;$srL^Qz^-tYR&{g$ zm&>DT_A~XwHV$qOmaiJDjOPGUJ9%X*H8unVPz`&dQhXzCE-ASvEejbFQe+EwqvTiC z(E4lnvK?My5j8_jvC?KZYUoScEwi%k=>nc3xRl2?0K}co56W8(dgr8y z7&_b*&jzC2Nb?`-s~fMyP`h8?3IW7Lv^<8xMD+m30e2m4>-C2R=^FZuq8{g;{~l%^ z!0J0juR2ld|A5k4qkt>RA)-Bjn<3Zc<=Ua+wc^QVg(@kHW>bNaasB=&zGXK9$eAuk zNWpmgJ&5Ri&gyPi*qz)8LMZ3@l z8BY)b5t?BLB!<^{w5@aj?Qd;9)fbI4` z*9b^Q55r2Abfu)cM_?-3upuo_u!=bB9TlM}c=Gq6ulXWJ6X{U?-3%)v{tV)4kSi{5 zMA_&&Aq7DorRI^^xO)A`#zti5P$6MxO+ZL>=$tc>NU@m!D8K~YKxO}iOM&3JCaPD? z_)h^Pz&ubr8jK{xbHG~C;DpTcxLc>c)xr9r9q|O#n>0&47y_0+*t}*Ny4Oe?okKX@ ztQ%2g0}UUDBzxzxWj_;69!a_m`WitMtjhpCT)g@f)0VhA zZNChK2PNMd3C0EwNzVq7vmNnW`}h1SCKn8T#3Ug5M@%jnY{W!Br-2iw zk;KaR2?ZjMKu|J=F?k`y1>cofyAo8kks~z(DEu^XF+_)S3szSM5CW7pnKm;ujRydm zEi1}f;{r>9aDl#cw8@|D62QpF03Z8VwGw(A1E)4jI_+(JSXOE_uuebeA#}*w1YhHs zfn;r4HJGni%s{sJ?(K1FD+7G)`w7qyQqPFmjM-MFZhY3yQh4lx~!1j-}AoSGRyD~}rk#Hpo-p|Q+WcN_tKbk&LsZ-~t$ z-ct?^1GU}}FRgffw=B|$QnyrxiPVIW4doXO4oB}gnz#&TBws)@Cm(-bB!*nH*9T(4`GFP_aBj*n30#fBXE~{6BFp-8 z+~P1G({G0-I?Yk%sFeT%uYSOYYhz?EA(@19#aRNt)_8!eD+!9Dk~eA;@BlfDa{z-Y zqVa2yrr4ej7xb_!_hqzz3BF6m z?iLPUuD$7S!h|jQq(YLj=TIE@J=Xd z25Fc{GiHuv%m84F;#^=I{Pb=J5+{T0w-1MsGmor#;2RhtBcKWd>qPvl^dCQGQLO~V zKM)u-M}5q9hhrbB$Y4=Tsc_d6-=z%_uB6P+*h>ZkTizhyN><9rCLk(_a3x768hb4g z>^In}6_WyzUI2e8GZObqcOsy~yUV`lJh!jx=9QaLnrj$`LdX?{n8<)~;9Dz{JhBdp zQN{oWfneI8W?Rw zqNbGE04&kEv6Uex4&?JPvLYV~RUJAD6qS4;Nk@u37tE?a&>S z#5T?qbD*BQ1nNmZitl?MA|b8BQHW1Fug!Xj8>vIve~n~z{_J_&x7l)!q2_YPH(>Kh zD_1jD%TCZUhAYM-=0W4j#?Lmk9^e8QKZ)LWXDuErA3+_#%ereSvsY$sAI~O zEO^4D1Mved zL^bC$p9_k_Kx2v;?={xhI4w97Nc%}~JPgmvY}w0asguwZf1giiM!4|Bvsc%dU&Ow$ zWOlqI2AzIfuUm@|hfc>Xe-Xh6M;DsE$uu|CX>3YwjBPAxY_W0mu=a2&kSLWlevz#? zr`0XUD##U+)0o=$X{^!ah}6eqDY^Ui6>JTx4?Ii)9(7wUSmlI+LGZ&9X^y2c?}REr zJRsD}J4~NGJSX$YC;!LE{w@k9MB)Su1u=rsF{OENsMaD%f^^S2^(PAK1|He zrtG@oyU)`+l*SOD-k!~{N8?(jM~6N{CxB11GN?lzc}0gHGbS_XndL8q9VF%ga3V;wg33pP@_Ih1wYabF5f*2|J)zO3D@ zfBUSka_WIIBFZ%fK7TM>{=x=YdISe8e~AFT2+taf#XIz6w=l4512ou_btRV-B_BAC zJK;aw?XSK$MAkgnzx=G1?>GP#&KQX?T6|*;oH?ajc;JjEpH{Q2j)J>{bY)PlKBP|{ z(yh;L54dP>3sJMz6ivgVIdppH55z-p!p5a%N~KC=5)xXpTs2*_4hcd8HDY2Lk&S(0 z)i%}zXZ_CfCdeo3zO2%tZx`}}hDFVfPuKwPXsNfqWoT7z&%1x-besaA_I&6H$yR6T zeCW`d%$cKC0k``^ZZcIj9Fv@?E0=a(A${WHmw(9CqgQE=TsnFcOw;=&Zc+hV6Y&13br2IK%)95 zEI-RJePNnln%JT_E+{KlEVwI1E+)OPX>7>GWx=9AviF7jiy6&i&4+vflfp%puhEiJ z(6WKqUp?n%7XJSyu1AJoF*04O%X}`UOv-MQ>y;ZMzH9Ar{o>kn=r-iGMp0}ZvhUWc zvP&xBCiF)CJB4?9stH^eHjF+dIYk08yPqZb^)Mex@|$5vmWB@7P6hXN8YsQ|+usyB zT#$3<&~Uc#Y2SQ8x!U-*Uz&Y#U_<^KS)hdMy+tcf>a4ex4k_5~JPnkPf_sM$n=gM$ zuO9UAod96%@Y>+sfipjG@XpgCxHyG$KyMgLFF<6y%DYT9Pc=X0zWj{mgKm~G^UuZg z-XR(Xe+Kkk1@wji#dYS@gH1znW6nO;m}$np?Rv%VGm$BWZ4jAq7>&qYZ4lXS__q#H^n;aqf@_!z z-lly4&N<{_8zSca7;#{8Q|~db3yIImY1u1jX_D{{Q-8fN^_PgQmw!xsc|FwpP0p1~ zw3Icp3HR~|I*Sxu)&!pOb0slRaL?wi6m#*0)4ptdx=lXBzRaFH(Wkzt&W1K&ZmW+7 zDLI;pe$FaH7n_jC2=23i_=g;GhkrRnWa}LBHIx=p4VSFAJ_9>@PCCxDe z_5SJDe<7xJ>kxA^pN1G@H^M*XUv4khI=5$v(%kOfWR>S2qF~zr1XZDfHg`E&%S|j5 z04y#&1Go}Eje_mpxbj0+vyiqiK*jyH^Bhg~$he3U6%J*%01a`De*z+QQ_BUbV1%Ar zErUxskX3!^KNEs;*2V+Ufmxs}Ish|(dIC(nLj%AjumbsY=LaC&zvBstqzI!_Y#z`7|07gun?rYLEUOM1nn<@J1RoX^M0cvTGPtO$n8)G8;N1j~`FzZv- zG2VTMHo`v)QJ@bL6q8=zU7J{r{Gpac22;Yj{??u4B%ib04~j#4)<1ObDlh`z{G6F* z0OuR{G=1E}V&o6CG&TTy^k3Ki@0H;H&#v#A?qZ|SLY&Llo)0-Y5)rX|#^6rGv~8aO zQnSBlb94`sR__1F-G89_zw^#Z8mj@>6~Bqr`v>393N4U3f9rFA8ZJyLgh0X`5v66< z5>RG=?0QVgu1#zr{Gpasu7KS6+nNffgiSQU2NHHi7;OZtoCpJ*8jxKNHn9Wphgw=8 z2gvhp%O0RdD4;Pukg(NnfDyo|5J=dq;$)!G{@3;YKf3;~3xPzdR)pq_#`vCAzxr%; zv7-q=$_40;U2HeC_4hw*@kZ|cygK=BIRvWge?~dn0gYMi(pbfg&7B}MMQ)0dg=Rz) z>|XmcFt4dc{hgBo3AK^{CojeF6dn;J0V9?U^~Z7-(kOp(>S>e@sHbuBKd1*NpQir9 zhWfq@^)9yc8|n2IbdpP`>pBwD4*-gae=QhJLfmb}+7@03$6)W_nx+0#M3?;G)32W;orJvJrj~di|P%e8)X=!m+0hce}7^XW0g1}i55fahi8X~N7r^jcOsJSOv zMURM~rO>C)fuY`^A?%6l{p?Y~KEla*yH8%e$W70(U-$7HJ%%s*ua0c%VmhgMQGuT2 zz{5~eJKVSOUjGC;k!rQjPIi0YPx_{5C7SNBBNx!3XnC|&Xg_-xJ4E=ouz~QLezv}R zT2ER}hOcJ6#`kAd7dhys_vt>mqt5V*|J9*wXr{L+7thmA@7H}Iabrx%1U}T-opr{9 zSz9kDTy{Er^yuTZfv3X0mT@ z+NT?G=MuvW{#WeVikMESTs%wPv|l&sPVoKL{BgivHgH9lXZEUZJuqqjV0_w!RCC{A z$Tf7g3gIaN?rD%t#^gJh!yLYQ&F{nwAN1Yxsp`D%_MzZi^LtH$Mdo=-@39W=7zmCU z-Wx!_^U%q>OLtGOWM8+4rq5zG%BZ@)c<5A~-raPTiCbz6;HON2nY`FLLc_woJCg4m z9zNmAXns%HZST;X;$ixV?Qz2_6+1D*+e@|;4-1rRPpOg&erNH(ib21c6U~$nd^2>v zCL@krAfCnGl#0YbnnoR*b{%8fAc(uqpXVP8I`5hIEhljaK7z~FM zN_Oy8?I~g8t>#`~h}>Vxa3}ag=>FP$cW4@GkKPG>0Em-!ModK>50`h|q3QFZ^JPiC zJ2A}Y%WQrZGrT+Lp6u}H5;}ax9rDBKu@X?BG;A%$SonqAoeOYs> zce-tNtyXp0sd(3#K~m?H#bYZ5NxfGVv4FVw%HlO3j9#6?sPnJPIrHgpR(qAvB?sFN zpZDEn9&9*#_T2V~;XS^)#H!@nm~*S3ZhI8(aJlVL43?W`J}U4ie>fp+qR**8g7h3 z_nhXp4csxA-#>6yXZVP+rqD^FH%F9rpFC-lenhzi5O0qthYO$lRP>aoQtsWOXDSje zZ*CSZ^-NZel&cS*nXDp}t4{&qnR4|dK)g_P&yBq@KX_Lq?M(30we9kZZB?H0^c4*7 zDkrxcpQ^d$51HP93?DGPOC075ppzXw6u^{uW&ER^OGw3M)$H92&?R4V`VvX zN@d?=)=>~bd#LCIjR$F zE_mFVy4J+DS?^WRGa8)CyK?s|i>RJOEPXS(QD)U8MuSs%H@*VcvykFeOWE^%hy1op zLwU@Lfd*xo0H9100F(higEFA5+VD};rYCnqSzGlOEwnTNgq9|N&;o)MTEWifrM27O ztyJgqWGmIJ+{7Laj*m>+G*q5+?q>p^LK6T~Xaax=ARf`6(&#m|qci&1ZxB^dLm9Vtg)~ zr+xPUOZE+mcOPjK1>{)R@8sAoVQiwQs<-KaR?p;dfu2TCGyxD4O#lQ12pU02Bt#Ba zU3j{{uw|h8EzkXc+5Z8$;;jW8dP_lfdaFRE&L6L->MF^t=10Hjs@O2a!~j%9ngFUI zO#oF95Vczkxw7zKGb!%Un%{Aq#a((4cB3~{oQ#Kr^VIL!vSjO9yrvg9X!PFg571d| zDd_h8PP+aQbdaqD-EVpB2e1afAI5H!UM0oYEu5!&H!9TwJjmOK)r)wHZsFY8~|& zOYdzRbskG!Z5<65OGmeklDa`nt~@ojS3>;Fdr0Gw*{X`twGcaN@p0KGK3+e`@<36Q zpcjL))(Q)szb@x<`AvDP9mx=YKj@vcHj1byDS?`XuRm!num9GdkyT#b)u4eZug}LC z`Vh}8_c!5r>Vpgu%j;VkH2TZyXB#xogVvG@pXcV>fy2f8h(?hWHwG091jJ|YJVXKU zE=UxiK_jHRzNSH=bK^m5fFbl$D?Dte=j7;G8f9#Pie`K|*>5t&iaF5-8|yYi=F`NYrbcZ}k-*GC32q=DawCL9MN`Vgu&U z_9!xN#$M1uM;36jAZZax4q8E>$kTWf6=e>bum>Ye_k&R+k5^dO@)THc?ZW555Z?9W zEO@0t4J+*PkMjmmHz~7J)_)zNNVjqN_$j0J4kv+=$7!!!z%hy-4_jwXaWUF=d^t*9 z2{^X)n2)W8rz6-^fnQQgg8!JUt2NjLI0;mN-`mUX^f`VdMR`42XGNAMrJ0sO07TQ3EE@t=-e=Rc-q zqrk5xVRg<<=8UAQq^-o6GqSSh_>YMz%8UQSUd4Yo^v7}Tu}y7W`v7My0B5Lj{y3NN zhfn|aq3#?0Eqbb@T_dqi1#ac1GjmRR)Ih7;vIen4U&m2@oy^uNmS%5V9bH2I=Ge1i zhn&k2(6XO96Ll6TB*dW3r#JSG9GNQ7w#t(9@Jq5QmFS6VJi`zku`^GKwOU9zoLTD= z>5Em&VhP`I;qBTP{Nckw_TG=Q$8X&4iMjqhX6CMhy5aFp9KMZL>YJIUd^>V>G7^E>C}rt#+njSWnL){*z{u;R0z)+L6+PAB|UuP{!O<+{Ej9vBhkxKnXs z?XeOoUBlus16z2<(IDQ9M8kro z8SOmfoET-A1Fyml_=Vlh6y0}8t(*>Vhv9HulA2W)k4duQwYIuo0e8k5JFnh(!vDop zKJh!0Dn33si|mUWI=KCK!8WJ-=jkWuv>Zfzih4ZD%MSHx5j-AUL{D<-o%SF1O=VBu zsSxDgAD%ShdWzAMO4GjT;#0QW+xWR*6NAk~^Y77oGF{vs{P86vyc}+yBZnT3`1HxW zzx~?UtJ?vwt?N#!c;l%LIcM7$3W;|_g$3L95a?!Jw&?r2eCNN{mGX%pk|IRDeS)o| z;xaPgj0n%pYmG9x@>8{}eV0#vnPmT7y{%DNwx#{VS>mvzKSpS0Lp-_wsogH`SU-dxCl5vnudTUK>x9ZfQxm_cnk(QAbx}8$J8>fB*jr0GQnPm3EgVeuDkaH~)M} z|BqYg=+f>If86}%nf*WC`tyO7UOf{#nD%XT<)g zK^EY;KTQAIiLrlb`Dcp!Q%jKPUkLNh8~>RK{=BixY~%6&h8TX<^K&Zvspl|=j_w~4 WLsx@w2W=1&@OwMJL*^E=tN#Z|bWJ({ literal 17107 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 M52IkwCl_b`4;_V)wg3PC diff --git a/input/demo-periods/Ф-6_2023.xlsx b/input/demo-periods/Ф-6_2023.xlsx index b204cfd9b087b131b86a7cd843cb56392ca533a1..ee2f6f7383487df510ebbfe6454e0340f85eaca1 100644 GIT binary patch literal 25233 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�^-9lg)o70Tk)02 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 literal 17151 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 G_5T3P@z;p} diff --git a/input/demo-periods/Ф-6_2025.xlsx b/input/demo-periods/Ф-6_2025.xlsx index 60f782278c105b666fb3172dc0e6749046dfc301..bc655bb86bd5bd4336e8e9c3528e536a61ef78ac 100644 GIT binary patch literal 25259 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 literal 17146 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 diff --git a/input/demo-periods/Ф-6_2026.xlsx b/input/demo-periods/Ф-6_2026.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..3b06e5169361e65fcca0e207c1843cf859ca7cb7 GIT binary patch literal 26317 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 a9o=65&GkDQ<;4cHfL!WHGqyG<+ks@9I literal 0 HcmV?d00001 diff --git a/src/apps/core/excel.py b/src/apps/core/excel.py index c725353..452d8d6 100644 --- a/src/apps/core/excel.py +++ b/src/apps/core/excel.py @@ -290,6 +290,54 @@ class BaseExcelParser(ABC, Generic[T]): """Возвращает следующий номер batch_id.""" raise NotImplementedError + def validate_workbook(self) -> None: + """Validate the loaded workbook schema before any records are created.""" + + @staticmethod + def _normalize_header(value: Any) -> str: + """Normalize whitespace and case for stable Excel header comparisons.""" + if value is None: + return "" + return " ".join(str(value).replace("\xa0", " ").split()).casefold() + + def _validate_mapped_headers( + self, + *, + header_rows: tuple[int, ...] = (1,), + ) -> None: + """Ensure each mapped column still has the expected semantic header.""" + errors: list[FieldError] = [] + for mapping in self._column_mappings or []: + actual = " ".join( + filter( + None, + ( + self._normalize_header( + self._get_cell_value(row, mapping.excel_column) + ) + for row in header_rows + ), + ) + ) + expected = self._normalize_header(mapping.excel_header) + if expected and expected not in actual: + errors.append( + FieldError( + field=mapping.model_field, + message=( + f"Ожидался заголовок «{mapping.excel_header}» " + f"в колонке {mapping.excel_column + 1}" + ), + value=actual or None, + ) + ) + + if errors: + raise ExcelValidationError( + "Схема Excel-файла не соответствует ожидаемому шаблону", + errors=errors, + ) + def parse(self, file: UploadedFile | BytesIO) -> ParseResult: """ Парсит Excel файл и сохраняет данные в БД. @@ -306,6 +354,7 @@ class BaseExcelParser(ABC, Generic[T]): try: self._load_workbook(file) self._column_mappings = self.get_column_mappings() + self.validate_workbook() for row_num in range(self.DATA_START_ROW, self._sheet.max_row + 1): row_data = self._parse_row(row_num) @@ -346,6 +395,8 @@ class BaseExcelParser(ABC, Generic[T]): ) result.skipped_count += 1 + except ExcelValidationError: + raise except Exception as e: logger.exception("Ошибка парсинга Excel файла") raise ExcelParseError(f"Ошибка парсинга файла: {e}") from e diff --git a/src/apps/core/management/commands/generate_test_reports.py b/src/apps/core/management/commands/generate_test_reports.py index d5886b8..1d928d5 100644 --- a/src/apps/core/management/commands/generate_test_reports.py +++ b/src/apps/core/management/commands/generate_test_reports.py @@ -1021,6 +1021,32 @@ class Command(BaseAppCommand): age_over_20 = max( 1, total_equipment - age_under_5 - age_5_10 - age_10_15 - age_15_20 ) + staff_buckets = [ + max(1, int(profile.staff_base * Decimal("0.04"))), + max(1, int(profile.staff_base * Decimal("0.18"))), + max(1, int(profile.staff_base * Decimal("0.28"))), + max(1, int(profile.staff_base * Decimal("0.26"))), + max(1, int(profile.staff_base * Decimal("0.17"))), + ] + staff_buckets.append(max(0, profile.staff_base - sum(staff_buckets))) + average_employee_age = self._rate( + sum( + Decimal(count) * midpoint + for count, midpoint in zip( + staff_buckets, + ( + Decimal("19"), + Decimal("25"), + Decimal("35"), + Decimal("45"), + Decimal("55"), + Decimal("65"), + ), + strict=True, + ) + ) + / Decimal(profile.staff_base) + ) return { "avg_employees": Decimal(profile.staff_base), "production_workers": Decimal(int(profile.staff_base * Decimal("0.64"))), @@ -1031,6 +1057,7 @@ class Command(BaseAppCommand): "total_equipment": total_equipment, "domestic_equipment": domestic_equipment, "imported_equipment": imported_equipment, + "machine_tools_and_equipment": total_equipment, "equipment_age_under_5": age_under_5, "equipment_age_5_10": age_5_10, "equipment_age_10_15": age_10_15, @@ -1043,6 +1070,13 @@ class Command(BaseAppCommand): ), "equipment_needed": max(0, total_equipment // 9), "workers_needed": max(0, profile.staff_base // 22), + "average_employee_age": average_employee_age, + "employees_under_20": staff_buckets[0], + "employees_20_29": staff_buckets[1], + "employees_30_39": staff_buckets[2], + "employees_40_49": staff_buckets[3], + "employees_50_59": staff_buckets[4], + "employees_over_60": staff_buckets[5], } def _build_f4_payload( @@ -1165,13 +1199,32 @@ class Command(BaseAppCommand): age_over_20 = max( 1, total_equipment - age_under_5 - age_5_10 - age_10_15 - age_15_20 ) + age_counts = [ + age_under_5, + age_5_10, + age_10_15, + age_15_20, + age_over_20, + ] + imported_by_age: list[int] = [] + cumulative_equipment = 0 + allocated_imported = 0 + for age_count in age_counts: + cumulative_equipment += age_count + cumulative_imported = ( + imported_equipment * cumulative_equipment // total_equipment + ) + imported_by_age.append(cumulative_imported - allocated_imported) + allocated_imported = cumulative_imported cnc_total = min(total_equipment, max(4, int(total_equipment * Decimal("0.31")))) - return { + payload = { "row_code": f"{100 + (profile.index % 60):03d}", "category": profile.f6_category, "total_equipment": total_equipment, "domestic_equipment": domestic_equipment, "imported_equipment": imported_equipment, + "commissioned_equipment": max(1, total_equipment // 12), + "decommissioned_equipment": max(0, total_equipment // 20), "age_under_5": age_under_5, "age_5_10": age_5_10, "age_10_15": age_10_15, @@ -1190,7 +1243,28 @@ class Command(BaseAppCommand): "physical_wear_percent": wear_percent, "workplaces_without_equipment": max(0, profile.index % 5), "equipment_to_replace": max(0, age_over_20 // 2), + "notes": "Согласованный набор синтетических демо-данных", } + for prefix, imported_count in zip( + ( + "age_under_5", + "age_5_10", + "age_10_15", + "age_15_20", + "age_over_20", + ), + imported_by_age, + strict=True, + ): + payload[f"{prefix}_imported"] = imported_count + payload[f"{prefix}_utilization_rate"] = utilization_rate + payload[f"{prefix}_lease_share_itn_percent"] = self._percent( + Decimal("12") + Decimal(profile.index % 7) + ) + payload[f"{prefix}_weighted_load_factor"] = self._rate( + utilization_rate / Decimal("100") + ) + return payload @staticmethod def _ensure_registers() -> list[Register]: diff --git a/src/apps/form_3/migrations/0003_reporting_analytics_fields.py b/src/apps/form_3/migrations/0003_reporting_analytics_fields.py new file mode 100644 index 0000000..ae28cf6 --- /dev/null +++ b/src/apps/form_3/migrations/0003_reporting_analytics_fields.py @@ -0,0 +1,73 @@ +# Generated by Django 3.2.25 on 2026-07-28 08:41 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('form_3', '0002_auto_20260328_1621'), + ] + + operations = [ + migrations.AddField( + model_name='formf3record', + name='average_employee_age', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='средний возраст сотрудников'), + ), + migrations.AddField( + model_name='formf3record', + name='employees_20_29', + field=models.PositiveIntegerField(blank=True, null=True, verbose_name='работники 20-29 лет'), + ), + migrations.AddField( + model_name='formf3record', + name='employees_30_39', + field=models.PositiveIntegerField(blank=True, null=True, verbose_name='работники 30-39 лет'), + ), + migrations.AddField( + model_name='formf3record', + name='employees_40_49', + field=models.PositiveIntegerField(blank=True, null=True, verbose_name='работники 40-49 лет'), + ), + migrations.AddField( + model_name='formf3record', + name='employees_50_59', + field=models.PositiveIntegerField(blank=True, null=True, verbose_name='работники 50-59 лет'), + ), + migrations.AddField( + model_name='formf3record', + name='employees_over_60', + field=models.PositiveIntegerField(blank=True, null=True, verbose_name='работники старше 60 лет'), + ), + migrations.AddField( + model_name='formf3record', + name='employees_under_20', + field=models.PositiveIntegerField(blank=True, null=True, verbose_name='работники до 20 лет'), + ), + migrations.AddField( + model_name='formf3record', + name='machine_tools_and_equipment', + field=models.PositiveIntegerField(blank=True, null=True, verbose_name='станочный парк и оборудование, всего'), + ), + migrations.AddField( + model_name='formf3record', + name='military_utilization_rate', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='уровень загрузки мощностей военного производства'), + ), + migrations.AddField( + model_name='formf3record', + name='shipped_goods_innovative', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=18, null=True, verbose_name='инновационные отгруженные товары, работы и услуги'), + ), + migrations.AddField( + model_name='formf3record', + name='shipped_goods_total', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=18, null=True, verbose_name='отгруженные товары, работы и услуги, всего'), + ), + migrations.AddField( + model_name='formf3record', + name='total_fixed_assets', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=18, null=True, verbose_name='основные фонды, всего'), + ), + ] diff --git a/src/apps/form_3/models.py b/src/apps/form_3/models.py index c7d7b27..1b972f6 100644 --- a/src/apps/form_3/models.py +++ b/src/apps/form_3/models.py @@ -67,8 +67,71 @@ class FormF3Record(ReportingPeriodMixin, TimestampMixin, models.Model): null=True, blank=True, ) + average_employee_age = models.DecimalField( + _("средний возраст сотрудников"), + max_digits=5, + decimal_places=2, + null=True, + blank=True, + ) + employees_under_20 = models.PositiveIntegerField( + _("работники до 20 лет"), + null=True, + blank=True, + ) + employees_20_29 = models.PositiveIntegerField( + _("работники 20-29 лет"), + null=True, + blank=True, + ) + employees_30_39 = models.PositiveIntegerField( + _("работники 30-39 лет"), + null=True, + blank=True, + ) + employees_40_49 = models.PositiveIntegerField( + _("работники 40-49 лет"), + null=True, + blank=True, + ) + employees_50_59 = models.PositiveIntegerField( + _("работники 50-59 лет"), + null=True, + blank=True, + ) + employees_over_60 = models.PositiveIntegerField( + _("работники старше 60 лет"), + null=True, + blank=True, + ) # === Оборудование - общие данные === + shipped_goods_total = models.DecimalField( + _("отгруженные товары, работы и услуги, всего"), + max_digits=18, + decimal_places=2, + null=True, + blank=True, + ) + shipped_goods_innovative = models.DecimalField( + _("инновационные отгруженные товары, работы и услуги"), + max_digits=18, + decimal_places=2, + null=True, + blank=True, + ) + total_fixed_assets = models.DecimalField( + _("основные фонды, всего"), + max_digits=18, + decimal_places=2, + null=True, + blank=True, + ) + machine_tools_and_equipment = models.PositiveIntegerField( + _("станочный парк и оборудование, всего"), + null=True, + blank=True, + ) total_equipment = models.PositiveIntegerField( _("всего оборудования"), null=True, @@ -127,6 +190,13 @@ class FormF3Record(ReportingPeriodMixin, TimestampMixin, models.Model): null=True, blank=True, ) + military_utilization_rate = models.DecimalField( + _("уровень загрузки мощностей военного производства"), + max_digits=5, + decimal_places=2, + null=True, + blank=True, + ) avg_shift_work = models.DecimalField( _("средняя сменность работы"), max_digits=5, diff --git a/src/apps/form_3/services.py b/src/apps/form_3/services.py index 386266b..1d496c5 100644 --- a/src/apps/form_3/services.py +++ b/src/apps/form_3/services.py @@ -97,81 +97,118 @@ class FormF3Parser(ReportingPeriodParserMixin, BaseExcelParser[FormF3Record]): OKPO_COLUMN = 1 OGRN_COLUMN = 2 INN_COLUMN = 3 + DATA_START_ROW = 3 def get_column_mappings(self) -> list[ColumnMapping]: """Маппинг колонок Excel на поля модели.""" return [ - # Кадры ColumnMapping( 4, - "Средняя численность работников", - "avg_employees", + "Отгруженные товары собственного производства", + "shipped_goods_total", field_type="decimal", ), ColumnMapping( 5, - "Производственный персонал", - "production_workers", + "из них инновационные товары", + "shipped_goods_innovative", field_type="decimal", ), ColumnMapping( 6, - "Инженерно-технические работники", - "engineering_workers", + "Всего основных фондов", + "total_fixed_assets", field_type="decimal", ), ColumnMapping( 7, - "Административный персонал", - "administrative_workers", + "Станочный парк и оборудование, всего", + "machine_tools_and_equipment", + field_type="int", + ), + ColumnMapping( + 8, + "Станочный парк и оборудование - импортное оборудование", + "imported_equipment", + field_type="int", + ), + ColumnMapping( + 9, + "Оборудование с возрастом от 5 до 10 лет", + "equipment_age_5_10", + field_type="int", + ), + ColumnMapping( + 10, + "Оборудование с возрастом до 5 лет", + "equipment_age_under_5", + field_type="int", + ), + ColumnMapping( + 11, + "Фактический (физический) износ оборудования", + "physical_wear_percent", field_type="decimal", ), - # Оборудование - общие данные - ColumnMapping(8, "Всего оборудования", "total_equipment", field_type="int"), ColumnMapping( - 9, "Отечественное оборудование", "domestic_equipment", field_type="int" + 12, + "Средний уровень загрузки производственных мощностей (всего)", + "utilization_rate", + field_type="decimal", ), ColumnMapping( - 10, "Импортное оборудование", "imported_equipment", field_type="int" - ), - # Оборудование по возрасту - ColumnMapping( - 11, "Оборудование до 5 лет", "equipment_age_under_5", field_type="int" + 13, + "Средний уровень загрузки производственных мощностей военного производства", + "military_utilization_rate", + field_type="decimal", ), ColumnMapping( - 12, "Оборудование 5-10 лет", "equipment_age_5_10", field_type="int" - ), - ColumnMapping( - 13, "Оборудование 10-15 лет", "equipment_age_10_15", field_type="int" - ), - ColumnMapping( - 14, "Оборудование 15-20 лет", "equipment_age_15_20", field_type="int" + 14, + "Средний возраст сотрудников", + "average_employee_age", + field_type="decimal", ), ColumnMapping( 15, - "Оборудование свыше 20 лет", - "equipment_age_over_20", + "Количество работников предприятия до 20 лет", + "employees_under_20", field_type="int", ), - # Износ и использование ColumnMapping( - 16, "Физический износ, %", "physical_wear_percent", field_type="decimal" + 16, + "Количество работников предприятия 20-29 лет", + "employees_20_29", + field_type="int", ), ColumnMapping( - 17, "Коэффициент загрузки", "utilization_rate", field_type="decimal" + 17, + "Количество работников предприятия 30-39 лет", + "employees_30_39", + field_type="int", ), ColumnMapping( - 18, "Средняя сменность работы", "avg_shift_work", field_type="decimal" - ), - # Потребности - ColumnMapping( - 19, "Потребность в оборудовании", "equipment_needed", field_type="int" + 18, + "Количество работников предприятия 40-49 лет", + "employees_40_49", + field_type="int", ), ColumnMapping( - 20, "Потребность в кадрах", "workers_needed", field_type="int" + 19, + "Количество работников предприятия 50-59 лет", + "employees_50_59", + field_type="int", + ), + ColumnMapping( + 20, + "Количество работников предприятия старше 60 лет", + "employees_over_60", + field_type="int", ), ] + def validate_workbook(self) -> None: + self._validate_mapped_headers(header_rows=(1,)) + def get_next_batch_id(self) -> int: """Получить следующий номер загрузки.""" return FormF3Service.get_next_batch_id() diff --git a/src/apps/form_4/services.py b/src/apps/form_4/services.py index 42c5a7f..f5cf420 100644 --- a/src/apps/form_4/services.py +++ b/src/apps/form_4/services.py @@ -75,86 +75,63 @@ class FormF4Parser(ReportingPeriodParserMixin, BaseExcelParser[FormF4Record]): OKPO_COLUMN = 1 OGRN_COLUMN = 2 INN_COLUMN = 3 + DATA_START_ROW = 3 def get_column_mappings(self) -> list[ColumnMapping]: return [ - # Выручка - ColumnMapping(4, "Выручка (РСБУ)", "revenue_rsbu", field_type="decimal"), - ColumnMapping(5, "Выручка (МСФО)", "revenue_ifrs", field_type="decimal"), + ColumnMapping( + 4, + "Выручка, в соответствии с РСБУ", + "revenue_rsbu", + field_type="decimal", + ), + ColumnMapping( + 5, + "Выручка, в соответствии с МСФО", + "revenue_ifrs", + field_type="decimal", + ), ColumnMapping( 6, - "Выручка прошлого года (РСБУ)", - "revenue_prev_rsbu", + "Чистая прибыль (убыток), в соответствии с РСБУ", + "net_profit_rsbu", field_type="decimal", ), ColumnMapping( 7, - "Выручка прошлого года (МСФО)", - "revenue_prev_ifrs", + "Чистая прибыль (убыток), в соответствии с МСФО", + "net_profit_ifrs", field_type="decimal", ), - # Прибыль ColumnMapping( - 8, "Чистая прибыль (РСБУ)", "net_profit_rsbu", field_type="decimal" + 8, + "Кредиты и займы, в соответствии с РСБУ", + "loans_rsbu", + field_type="decimal", ), ColumnMapping( - 9, "Чистая прибыль (МСФО)", "net_profit_ifrs", field_type="decimal" + 9, + "Кредиты и займы, в соответствии с МСФО", + "loans_ifrs", + field_type="decimal", ), ColumnMapping( - 10, "Валовая прибыль (РСБУ)", "gross_profit_rsbu", field_type="decimal" + 10, + "EBITDA, в соответствии с РСБУ", + "ebitda_rsbu", + field_type="decimal", ), ColumnMapping( 11, - "Операционная прибыль (РСБУ)", - "operating_profit_rsbu", + "EBITDA, в соответствии с МСФО", + "ebitda_ifrs", field_type="decimal", ), - # EBITDA - ColumnMapping(12, "EBITDA (РСБУ)", "ebitda_rsbu", field_type="decimal"), - ColumnMapping(13, "EBITDA (МСФО)", "ebitda_ifrs", field_type="decimal"), - # Долговая нагрузка - ColumnMapping( - 14, "Кредиты и займы (РСБУ)", "loans_rsbu", field_type="decimal" - ), - ColumnMapping( - 15, "Кредиты и займы (МСФО)", "loans_ifrs", field_type="decimal" - ), - ColumnMapping( - 16, "Чистый долг (РСБУ)", "net_debt_rsbu", field_type="decimal" - ), - ColumnMapping( - 17, "Чистый долг (МСФО)", "net_debt_ifrs", field_type="decimal" - ), - ColumnMapping(18, "Долг/EBITDA", "debt_to_ebitda", field_type="decimal"), - # Активы и капитал - ColumnMapping( - 19, "Активы (РСБУ)", "total_assets_rsbu", field_type="decimal" - ), - ColumnMapping( - 20, "Активы (МСФО)", "total_assets_ifrs", field_type="decimal" - ), - ColumnMapping( - 21, "Собственный капитал (РСБУ)", "equity_rsbu", field_type="decimal" - ), - ColumnMapping( - 22, "Собственный капитал (МСФО)", "equity_ifrs", field_type="decimal" - ), - # Рентабельность - ColumnMapping(23, "ROE", "roe", field_type="decimal"), - ColumnMapping(24, "ROA", "roa", field_type="decimal"), - ColumnMapping(25, "ROS", "ros", field_type="decimal"), - # Инвестиции - ColumnMapping(26, "CAPEX", "capex", field_type="decimal"), - ColumnMapping(27, "Затраты на НИОКР", "rd_expenses", field_type="decimal"), - # Дивиденды - ColumnMapping( - 28, "Выплаченные дивиденды", "dividends_paid", field_type="decimal" - ), - ColumnMapping( - 29, "Дивидендная доходность", "dividend_yield", field_type="decimal" - ), ] + def validate_workbook(self) -> None: + self._validate_mapped_headers(header_rows=(1,)) + def get_next_batch_id(self) -> int: return FormF4Service.get_next_batch_id() diff --git a/src/apps/form_6/migrations/0003_reporting_analytics_fields.py b/src/apps/form_6/migrations/0003_reporting_analytics_fields.py new file mode 100644 index 0000000..213bc32 --- /dev/null +++ b/src/apps/form_6/migrations/0003_reporting_analytics_fields.py @@ -0,0 +1,128 @@ +# Generated by Django 3.2.25 on 2026-07-28 08:41 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('form_6', '0002_auto_20260328_1621'), + ] + + operations = [ + migrations.AddField( + model_name='formf6record', + name='age_10_15_imported', + field=models.PositiveIntegerField(blank=True, null=True, verbose_name='импортное оборудование 10-15 лет'), + ), + migrations.AddField( + model_name='formf6record', + name='age_10_15_lease_share_itn_percent', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='доля времени работы для ПВН 10-15 лет, %'), + ), + migrations.AddField( + model_name='formf6record', + name='age_10_15_utilization_rate', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='использование оборудования 10-15 лет'), + ), + migrations.AddField( + model_name='formf6record', + name='age_10_15_weighted_load_factor', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='средневзвешенный коэффициент загрузки 10-15 лет'), + ), + migrations.AddField( + model_name='formf6record', + name='age_15_20_imported', + field=models.PositiveIntegerField(blank=True, null=True, verbose_name='импортное оборудование 15-20 лет'), + ), + migrations.AddField( + model_name='formf6record', + name='age_15_20_lease_share_itn_percent', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='доля времени работы для ПВН 15-20 лет, %'), + ), + migrations.AddField( + model_name='formf6record', + name='age_15_20_utilization_rate', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='использование оборудования 15-20 лет'), + ), + migrations.AddField( + model_name='formf6record', + name='age_15_20_weighted_load_factor', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='средневзвешенный коэффициент загрузки 15-20 лет'), + ), + migrations.AddField( + model_name='formf6record', + name='age_5_10_imported', + field=models.PositiveIntegerField(blank=True, null=True, verbose_name='импортное оборудование 5-10 лет'), + ), + migrations.AddField( + model_name='formf6record', + name='age_5_10_lease_share_itn_percent', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='доля времени работы для ПВН 5-10 лет, %'), + ), + migrations.AddField( + model_name='formf6record', + name='age_5_10_utilization_rate', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='использование оборудования 5-10 лет'), + ), + migrations.AddField( + model_name='formf6record', + name='age_5_10_weighted_load_factor', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='средневзвешенный коэффициент загрузки 5-10 лет'), + ), + migrations.AddField( + model_name='formf6record', + name='age_over_20_imported', + field=models.PositiveIntegerField(blank=True, null=True, verbose_name='импортное оборудование свыше 20 лет'), + ), + migrations.AddField( + model_name='formf6record', + name='age_over_20_lease_share_itn_percent', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='доля времени работы для ПВН свыше 20 лет, %'), + ), + migrations.AddField( + model_name='formf6record', + name='age_over_20_utilization_rate', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='использование оборудования свыше 20 лет'), + ), + migrations.AddField( + model_name='formf6record', + name='age_over_20_weighted_load_factor', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='средневзвешенный коэффициент загрузки свыше 20 лет'), + ), + migrations.AddField( + model_name='formf6record', + name='age_under_5_imported', + field=models.PositiveIntegerField(blank=True, null=True, verbose_name='импортное оборудование до 5 лет'), + ), + migrations.AddField( + model_name='formf6record', + name='age_under_5_lease_share_itn_percent', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='доля времени работы для ПВН до 5 лет, %'), + ), + migrations.AddField( + model_name='formf6record', + name='age_under_5_utilization_rate', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='использование оборудования до 5 лет'), + ), + migrations.AddField( + model_name='formf6record', + name='age_under_5_weighted_load_factor', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='средневзвешенный коэффициент загрузки до 5 лет'), + ), + migrations.AddField( + model_name='formf6record', + name='commissioned_equipment', + field=models.PositiveIntegerField(blank=True, null=True, verbose_name='введено в эксплуатацию'), + ), + migrations.AddField( + model_name='formf6record', + name='decommissioned_equipment', + field=models.PositiveIntegerField(blank=True, null=True, verbose_name='выведено из эксплуатации'), + ), + migrations.AddField( + model_name='formf6record', + name='notes', + field=models.TextField(blank=True, default='', verbose_name='примечание'), + ), + ] diff --git a/src/apps/form_6/models.py b/src/apps/form_6/models.py index 0c8e10e..16b48aa 100644 --- a/src/apps/form_6/models.py +++ b/src/apps/form_6/models.py @@ -68,6 +68,16 @@ class FormF6Record(ReportingPeriodMixin, TimestampMixin, models.Model): null=True, blank=True, ) + commissioned_equipment = models.PositiveIntegerField( + _("введено в эксплуатацию"), + null=True, + blank=True, + ) + decommissioned_equipment = models.PositiveIntegerField( + _("выведено из эксплуатации"), + null=True, + blank=True, + ) # === Возрастная структура === age_under_5 = models.PositiveIntegerField( @@ -95,6 +105,137 @@ class FormF6Record(ReportingPeriodMixin, TimestampMixin, models.Model): null=True, blank=True, ) + age_under_5_imported = models.PositiveIntegerField( + _("импортное оборудование до 5 лет"), + null=True, + blank=True, + ) + age_5_10_imported = models.PositiveIntegerField( + _("импортное оборудование 5-10 лет"), + null=True, + blank=True, + ) + age_10_15_imported = models.PositiveIntegerField( + _("импортное оборудование 10-15 лет"), + null=True, + blank=True, + ) + age_15_20_imported = models.PositiveIntegerField( + _("импортное оборудование 15-20 лет"), + null=True, + blank=True, + ) + age_over_20_imported = models.PositiveIntegerField( + _("импортное оборудование свыше 20 лет"), + null=True, + blank=True, + ) + + age_under_5_utilization_rate = models.DecimalField( + _("использование оборудования до 5 лет"), + max_digits=5, + decimal_places=2, + null=True, + blank=True, + ) + age_5_10_utilization_rate = models.DecimalField( + _("использование оборудования 5-10 лет"), + max_digits=5, + decimal_places=2, + null=True, + blank=True, + ) + age_10_15_utilization_rate = models.DecimalField( + _("использование оборудования 10-15 лет"), + max_digits=5, + decimal_places=2, + null=True, + blank=True, + ) + age_15_20_utilization_rate = models.DecimalField( + _("использование оборудования 15-20 лет"), + max_digits=5, + decimal_places=2, + null=True, + blank=True, + ) + age_over_20_utilization_rate = models.DecimalField( + _("использование оборудования свыше 20 лет"), + max_digits=5, + decimal_places=2, + null=True, + blank=True, + ) + age_under_5_lease_share_itn_percent = models.DecimalField( + _("доля времени работы для ПВН до 5 лет, %"), + max_digits=5, + decimal_places=2, + null=True, + blank=True, + ) + age_5_10_lease_share_itn_percent = models.DecimalField( + _("доля времени работы для ПВН 5-10 лет, %"), + max_digits=5, + decimal_places=2, + null=True, + blank=True, + ) + age_10_15_lease_share_itn_percent = models.DecimalField( + _("доля времени работы для ПВН 10-15 лет, %"), + max_digits=5, + decimal_places=2, + null=True, + blank=True, + ) + age_15_20_lease_share_itn_percent = models.DecimalField( + _("доля времени работы для ПВН 15-20 лет, %"), + max_digits=5, + decimal_places=2, + null=True, + blank=True, + ) + age_over_20_lease_share_itn_percent = models.DecimalField( + _("доля времени работы для ПВН свыше 20 лет, %"), + max_digits=5, + decimal_places=2, + null=True, + blank=True, + ) + age_under_5_weighted_load_factor = models.DecimalField( + _("средневзвешенный коэффициент загрузки до 5 лет"), + max_digits=5, + decimal_places=2, + null=True, + blank=True, + ) + age_5_10_weighted_load_factor = models.DecimalField( + _("средневзвешенный коэффициент загрузки 5-10 лет"), + max_digits=5, + decimal_places=2, + null=True, + blank=True, + ) + age_10_15_weighted_load_factor = models.DecimalField( + _("средневзвешенный коэффициент загрузки 10-15 лет"), + max_digits=5, + decimal_places=2, + null=True, + blank=True, + ) + age_15_20_weighted_load_factor = models.DecimalField( + _("средневзвешенный коэффициент загрузки 15-20 лет"), + max_digits=5, + decimal_places=2, + null=True, + blank=True, + ) + age_over_20_weighted_load_factor = models.DecimalField( + _("средневзвешенный коэффициент загрузки свыше 20 лет"), + max_digits=5, + decimal_places=2, + null=True, + blank=True, + ) # === С ЧПУ по возрасту === cnc_total = models.PositiveIntegerField( @@ -162,6 +303,7 @@ class FormF6Record(ReportingPeriodMixin, TimestampMixin, models.Model): null=True, blank=True, ) + notes = models.TextField(_("примечание"), blank=True, default="") class Meta: verbose_name = _("запись Ф-6") diff --git a/src/apps/form_6/services.py b/src/apps/form_6/services.py index 27d9e91..7088c3a 100644 --- a/src/apps/form_6/services.py +++ b/src/apps/form_6/services.py @@ -7,11 +7,14 @@ """ import logging +from decimal import Decimal, InvalidOperation from typing import Any from apps.core.excel import ( BaseExcelParser, ColumnMapping, + ExcelValidationError, + FieldError, ParseResult, RowData, ) @@ -75,55 +78,209 @@ class FormF6Parser(ReportingPeriodParserMixin, BaseExcelParser[FormF6Record]): OKPO_COLUMN = 1 OGRN_COLUMN = 2 INN_COLUMN = 3 + DATA_START_ROW = 5 def get_column_mappings(self) -> list[ColumnMapping]: return [ # Категоризация ColumnMapping(4, "Код строки", "row_code", field_type="str"), - ColumnMapping(5, "Категория оборудования", "category", field_type="str"), - # Общие данные - ColumnMapping(6, "Всего оборудования", "total_equipment", field_type="int"), + ColumnMapping(5, "Категория", "category", field_type="str"), ColumnMapping( - 7, "Отечественное оборудование", "domestic_equipment", field_type="int" - ), - ColumnMapping( - 8, "Импортное оборудование", "imported_equipment", field_type="int" - ), - # Возрастная структура - ColumnMapping(9, "До 5 лет", "age_under_5", field_type="int"), - ColumnMapping(10, "5-10 лет", "age_5_10", field_type="int"), - ColumnMapping(11, "10-15 лет", "age_10_15", field_type="int"), - ColumnMapping(12, "15-20 лет", "age_15_20", field_type="int"), - ColumnMapping(13, "Свыше 20 лет", "age_over_20", field_type="int"), - # С ЧПУ - ColumnMapping(14, "С ЧПУ всего", "cnc_total", field_type="int"), - ColumnMapping(15, "С ЧПУ до 5 лет", "cnc_under_5", field_type="int"), - ColumnMapping(16, "С ЧПУ 5-10 лет", "cnc_5_10", field_type="int"), - ColumnMapping(17, "С ЧПУ 10-15 лет", "cnc_10_15", field_type="int"), - ColumnMapping(18, "С ЧПУ 15-20 лет", "cnc_15_20", field_type="int"), - ColumnMapping(19, "С ЧПУ свыше 20 лет", "cnc_over_20", field_type="int"), - # Показатели - ColumnMapping( - 20, "Средняя сменность работы", "avg_shift_work", field_type="decimal" - ), - ColumnMapping( - 21, "Коэффициент загрузки", "utilization_rate", field_type="decimal" - ), - ColumnMapping( - 22, "Физический износ, %", "physical_wear_percent", field_type="decimal" - ), - # Потребности - ColumnMapping( - 23, - "Рабочие места без оборудования", - "workplaces_without_equipment", + 6, + "Количество оборудования на конец года ед. Всего", + "total_equipment", field_type="int", ), ColumnMapping( - 24, "Оборудование к замене", "equipment_to_replace", field_type="int" + 7, + "Введенное в эксплуатацию", + "commissioned_equipment", + field_type="int", + ), + ColumnMapping( + 8, + "Выведенное", + "decommissioned_equipment", + field_type="int", + ), + ColumnMapping( + 9, + "Импортное оборудование", + "imported_equipment", + field_type="int", + ), + *self._age_bucket_mappings(10, "До 5 лет", "age_under_5"), + *self._age_bucket_mappings(15, "От 5 до 10 лет", "age_5_10"), + *self._age_bucket_mappings(20, "От 10 до 15 лет", "age_10_15"), + *self._age_bucket_mappings(25, "От 15 до 20 лет", "age_15_20"), + *self._age_bucket_mappings(30, "Свыше 20 лет", "age_over_20"), + ColumnMapping( + 35, "Средняя сменность работы", "avg_shift_work", field_type="decimal" + ), + ColumnMapping( + 36, + "Количество рабочих мест без оборудования", + "workplaces_without_equipment", + field_type="int", + ), + ColumnMapping(37, "Примечание", "notes", field_type="str"), + ] + + @staticmethod + def _age_bucket_mappings( + start_column: int, + age_header: str, + field_prefix: str, + ) -> list[ColumnMapping]: + return [ + ColumnMapping( + start_column, + f"{age_header} Всего", + field_prefix, + field_type="int", + ), + ColumnMapping( + start_column + 1, + "Импортного оборудования", + f"{field_prefix}_imported", + field_type="int", + ), + ColumnMapping( + start_column + 2, + "Коэффициент использования оборудования", + f"{field_prefix}_utilization_rate", + field_type="decimal", + ), + ColumnMapping( + start_column + 3, + "Доля фактического времени работы оборудования", + f"{field_prefix}_lease_share_itn_percent", + field_type="decimal", + ), + ColumnMapping( + start_column + 4, + "Средневзвешенный коэффициент загрузки", + f"{field_prefix}_weighted_load_factor", + field_type="decimal", ), ] + def validate_workbook(self) -> None: + self._validate_mapped_headers(header_rows=(1, 2, 3, 4)) + errors: list[FieldError] = [] + for row_num in range(self.DATA_START_ROW, self._sheet.max_row + 1): + if not self._get_cell_value(row_num, self.ORG_NAME_COLUMN): + continue + self._validate_integer_counts(row_num, errors) + self._validate_equipment_totals(row_num, errors) + + if errors: + raise ExcelValidationError( + "Ф-6 содержит несовместимую схему или противоречивые количества", + errors=errors, + ) + + def _validate_integer_counts( + self, + row_num: int, + errors: list[FieldError], + ) -> None: + int_mappings = [ + mapping + for mapping in self._column_mappings or [] + if mapping.field_type == "int" + ] + for mapping in int_mappings: + raw_value = self._get_cell_value(row_num, mapping.excel_column) + if raw_value in (None, ""): + continue + try: + numeric = Decimal(str(raw_value).replace(",", ".").replace(" ", "")) + except (InvalidOperation, ValueError): + errors.append( + FieldError( + field=mapping.model_field, + message=f"Строка {row_num}: ожидается целое число", + value=raw_value, + ) + ) + continue + if not numeric.is_finite() or numeric != numeric.to_integral_value(): + errors.append( + FieldError( + field=mapping.model_field, + message=f"Строка {row_num}: количество должно быть целым", + value=raw_value, + ) + ) + + def _validate_equipment_totals( + self, + row_num: int, + errors: list[FieldError], + ) -> None: + age_prefixes = ( + "age_under_5", + "age_5_10", + "age_10_15", + "age_15_20", + "age_over_20", + ) + values = { + mapping.model_field: self._convert_value( + self._get_cell_value(row_num, mapping.excel_column), + mapping.field_type, + ) + for mapping in self._column_mappings or [] + } + total = values.get("total_equipment") + age_total = sum(values.get(prefix) or 0 for prefix in age_prefixes) + imported = values.get("imported_equipment") + age_imported = sum( + values.get(f"{prefix}_imported") or 0 for prefix in age_prefixes + ) + + if total is not None and age_total != total: + errors.append( + FieldError( + field="total_equipment", + message=( + f"Строка {row_num}: сумма возрастных групп " + "не равна общему количеству" + ), + value={"total": total, "age_total": age_total}, + ) + ) + if imported is not None and age_imported != imported: + errors.append( + FieldError( + field="imported_equipment", + message=( + f"Строка {row_num}: сумма импортного оборудования " + "по возрастам не равна итогу" + ), + value={"total": imported, "age_total": age_imported}, + ) + ) + for prefix in age_prefixes: + bucket_total = values.get(prefix) + bucket_imported = values.get(f"{prefix}_imported") + if ( + bucket_total is not None + and bucket_imported is not None + and bucket_imported > bucket_total + ): + errors.append( + FieldError( + field=f"{prefix}_imported", + message=( + f"Строка {row_num}: импортное оборудование " + "превышает количество в возрастной группе" + ), + value=bucket_imported, + ) + ) + def get_next_batch_id(self) -> int: return FormF6Service.get_next_batch_id() diff --git a/src/apps/organization/analytics_services.py b/src/apps/organization/analytics_services.py index 1a88986..233b332 100644 --- a/src/apps/organization/analytics_services.py +++ b/src/apps/organization/analytics_services.py @@ -49,10 +49,6 @@ def _amount(value) -> int: return int(_dec(value)) -def _amount_thousands(value) -> int: - return int(_dec(value) / THOUSAND) - - def _ratio(value) -> float: return round(float(_dec(value)), 1) @@ -87,8 +83,18 @@ def _direction(current, previous) -> str: return "unchanged" -def _period_rank(report_quarter: int | None) -> int: - return 5 if report_quarter is None else report_quarter +def _period_rank(record) -> int: + """Rank the reporting period represented by a record within its year.""" + report_month = getattr(record, "report_month", None) + if report_month is not None: + return int(report_month) + report_half_year = getattr(record, "report_half_year", None) + if report_half_year is not None: + return int(report_half_year) * 6 + report_quarter = getattr(record, "report_quarter", None) + if report_quarter is not None: + return int(report_quarter) * 3 + return 13 def _pick_record( @@ -106,7 +112,7 @@ def _pick_record( return max( year_records, - key=lambda record: (_period_rank(record.report_quarter), record.created_at), + key=lambda record: (_period_rank(record), record.created_at), ) @@ -331,7 +337,7 @@ class OrganizationAnalyticsService: "assets": "rub_thousands", "capex": "rub_thousands", "rd_expenses": "rub_thousands", - "revenue_per_employee": "rub_per_employee", + "revenue_per_employee": "rub_thousands_per_employee", } @staticmethod @@ -368,23 +374,24 @@ class OrganizationAnalyticsService: if metric == "loans": if f4 is not None and f4.loans_rsbu is not None: return _dec(f4.loans_rsbu) - return _dec(getattr(f2, "borrowings_non_current", ZERO)) + _dec( - getattr(f2, "borrowings_current", ZERO) - ) + return ( + _dec(getattr(f2, "borrowings_non_current", ZERO)) + + _dec(getattr(f2, "borrowings_current", ZERO)) + ) / THOUSAND primary, fallback = field_map.get(metric, (ZERO, ZERO)) - return _dec(primary or fallback) + if primary is not None: + return _dec(primary) + return _dec(fallback) / THOUSAND @classmethod def _economics_display_value(cls, metric: str, f2, f4, f1) -> int: if metric == "revenue_per_employee": - employees = _dec(getattr(f1, "avg_payroll_employees", ZERO)) - if employees == ZERO: - employees = _dec(getattr(f1, "avg_employees", ZERO)) + employees = _dec(getattr(f1, "avg_employees", ZERO)) if employees == ZERO: return 0 return _amount(cls._economics_metric_value("revenue", f2, f4) / employees) - return _amount_thousands(cls._economics_metric_value(metric, f2, f4)) + return _amount(cls._economics_metric_value(metric, f2, f4)) @classmethod def get_economics( @@ -405,12 +412,13 @@ class OrganizationAnalyticsService: cls._f1_records(organization), from_year, to_year ) - periods = sorted(set(f2_by_year) | set(f4_by_year) | set(f1_by_year)) + periods = sorted(set(f2_by_year) | set(f4_by_year)) if not periods: return { "organization_id": str(organization.id), "group": group, "periods": [], + "report_periods": [], "data_available": False, "message": "Данные отсутствуют", "kpis": {}, @@ -438,6 +446,15 @@ class OrganizationAnalyticsService: "organization_id": str(organization.id), "group": group, "periods": periods, + "report_periods": [ + { + "year": year, + "report_half_year": getattr( + f4_by_year.get(year), "report_half_year", None + ), + } + for year in periods + ], "data_available": True, "message": None, "kpis": { @@ -475,7 +492,18 @@ class OrganizationAnalyticsService: "ratios": [ { "period": report_year, - "ros": _ratio(getattr(f4_by_year.get(report_year), "ros", ZERO)), + "ros": _share_percent( + cls._economics_metric_value( + "net_profit", + f2_by_year.get(report_year), + f4_by_year.get(report_year), + ), + cls._economics_metric_value( + "revenue", + f2_by_year.get(report_year), + f4_by_year.get(report_year), + ), + ), "roa": _ratio(getattr(f4_by_year.get(report_year), "roa", ZERO)), "roe": _ratio(getattr(f4_by_year.get(report_year), "roe", ZERO)), "ebitda_margin": _share_percent( @@ -504,95 +532,103 @@ class OrganizationAnalyticsService: report_year: int, history_years: int, ) -> dict[str, object]: + f1_records = cls._f1_records(organization) f3_records = cls._f3_records(organization) - report_year = _resolve_report_year(f3_records, report_year) - current_f3 = cls._require_record( - _pick_record(f3_records, report_year), + report_year = _resolve_report_year(f1_records, report_year) + current_f1 = cls._require_record( + _pick_record(f1_records, report_year), entity="Personnel", ) - current_f1 = _pick_record(cls._f1_records(organization), report_year) + current_f3 = _pick_record(f3_records, report_year) years = list(range(report_year - history_years + 1, report_year + 1)) - history_records = _best_records_by_year(f3_records, years[0], years[-1]) - history_f1_records = _best_records_by_year( - cls._f1_records(organization), years[0], years[-1] + history_f1_records = _best_records_by_year(f1_records, years[0], years[-1]) + history_f3_records = _best_records_by_year(f3_records, years[0], years[-1]) + + def optional_int(record, field_name: str) -> int | None: + value = getattr(record, field_name, None) if record is not None else None + return int(_dec(value)) if value is not None else None + + def age_distribution_for(record) -> list[dict[str, int]]: + return [ + { + "age_group": "under_30", + "employees_count": (optional_int(record, "employees_under_20") or 0) + + (optional_int(record, "employees_20_29") or 0), + }, + { + "age_group": "30_50", + "employees_count": (optional_int(record, "employees_30_39") or 0) + + (optional_int(record, "employees_40_49") or 0), + }, + { + "age_group": "over_50", + "employees_count": (optional_int(record, "employees_50_59") or 0) + + (optional_int(record, "employees_over_60") or 0), + }, + ] + + age_distribution = age_distribution_for(current_f3) + average_age = ( + _ratio(current_f3.average_employee_age) + if current_f3 is not None and current_f3.average_employee_age is not None + else None ) - average_employees = int(_dec(current_f3.avg_employees)) - under_30 = int(average_employees * 0.29) - from_30_to_50 = int(average_employees * 0.49) - over_50 = max(0, average_employees - under_30 - from_30_to_50) - - age_distribution = [ - {"age_group": "under_30", "employees_count": under_30}, - {"age_group": "30_50", "employees_count": from_30_to_50}, - {"age_group": "over_50", "employees_count": over_50}, - ] - return { "organization_id": str(organization.id), "report_year": report_year, - "average_age": _weighted_average_age(age_distribution), + "report_month": current_f1.report_month, + "average_age": average_age, "headcount": { - "average_employees": average_employees, + "average_employees": int(_dec(current_f1.avg_employees)), "avg_payroll_employees": int( _dec(getattr(current_f1, "avg_payroll_employees", ZERO)) ), - "payroll_fund": _amount(getattr(current_f1, "payroll_fund", ZERO)), - "production_workers": int(_dec(current_f3.production_workers)), - "engineering_workers": int(_dec(current_f3.engineering_workers)), - "administrative_workers": int(_dec(current_f3.administrative_workers)), - "workers_needed": int(_dec(current_f3.workers_needed)), + "payroll_fund": _amount( + _dec(getattr(current_f1, "payroll_fund", ZERO)) * THOUSAND + ), + "production_workers": optional_int(current_f3, "production_workers"), + "engineering_workers": optional_int(current_f3, "engineering_workers"), + "administrative_workers": optional_int( + current_f3, "administrative_workers" + ), + "workers_needed": optional_int(current_f3, "workers_needed"), }, "age_distribution": age_distribution, "history": [ { "year": year, - "average_employees": int(_dec(history_records[year].avg_employees)), + "report_month": history_f1_records[year].report_month, + "average_employees": int( + _dec(history_f1_records[year].avg_employees) + ), "avg_payroll_employees": int( _dec( getattr( - history_f1_records.get(year), + history_f1_records[year], "avg_payroll_employees", ZERO, ) ) ), - "average_age": _weighted_average_age( - [ - { - "age_group": "under_30", - "employees_count": int( - _dec(history_records[year].avg_employees) - * Decimal("0.29") - ), - }, - { - "age_group": "30_50", - "employees_count": int( - _dec(history_records[year].avg_employees) - * Decimal("0.49") - ), - }, - { - "age_group": "over_50", - "employees_count": int( - _dec(history_records[year].avg_employees) - * Decimal("0.22") - ), - }, - ] + "average_age": ( + _ratio(history_f3_records[year].average_employee_age) + if year in history_f3_records + and history_f3_records[year].average_employee_age is not None + else None ), "payroll_fund": _amount( - getattr(history_f1_records.get(year), "payroll_fund", ZERO) + _dec(getattr(history_f1_records[year], "payroll_fund", ZERO)) + * THOUSAND ), } for year in years - if year in history_records + if year in history_f1_records ], } @classmethod - def get_equipment( + def get_equipment( # noqa: C901 cls, *, organization: Organization, @@ -616,6 +652,40 @@ class OrganizationAnalyticsService: report_year=report_year, ) + def weighted_metric(records, value_field: str, weight_field: str): + weighted_sum = ZERO + total_weight = 0 + for record in records: + value = getattr(record, value_field, None) + weight = int(_dec(getattr(record, weight_field, ZERO))) + if value is None or weight <= 0: + continue + weighted_sum += _dec(value) * weight + total_weight += weight + if total_weight == 0: + return None + return weighted_sum / Decimal(str(total_weight)) + + def record_age_metric(record, suffix: str): + weighted_sum = ZERO + total_weight = 0 + for prefix in ( + "age_under_5", + "age_5_10", + "age_10_15", + "age_15_20", + "age_over_20", + ): + value = getattr(record, f"{prefix}_{suffix}", None) + weight = int(_dec(getattr(record, prefix, ZERO))) + if value is None or weight <= 0: + continue + weighted_sum += _dec(value) * weight + total_weight += weight + if total_weight == 0: + return None + return weighted_sum / Decimal(str(total_weight)) + if f6_records: age_distribution = [ { @@ -690,51 +760,44 @@ class OrganizationAnalyticsService: "15_20_years": "age_15_20", "over_20_years": "age_over_20", } - total_age_units = sum(item["units_count"] for item in age_distribution) for item in age_distribution: bucket = item["bucket"] if f6_records: - bucket_units_by_record = [ - int(_dec(getattr(record, bucket_fields[bucket], ZERO))) - for record in f6_records - ] + bucket_field = bucket_fields[bucket] imported_equipment = sum( - round( - int(_dec(record.imported_equipment)) - * units - / max(1, int(_dec(record.total_equipment))) - ) - for record, units in zip( - f6_records, bucket_units_by_record, strict=True - ) + int(_dec(getattr(record, f"{bucket_field}_imported", ZERO))) + for record in f6_records + ) + utilization_rate = weighted_metric( + f6_records, + f"{bucket_field}_utilization_rate", + bucket_field, + ) + lease_share = weighted_metric( + f6_records, + f"{bucket_field}_lease_share_itn_percent", + bucket_field, ) - weighted_units = sum(bucket_units_by_record) - utilization_rate = sum( - _dec(record.utilization_rate) * units - for record, units in zip( - f6_records, bucket_units_by_record, strict=True - ) - ) / max(1, weighted_units) - weighted_wear = sum( - _dec(record.physical_wear_percent) * units - for record, units in zip( - f6_records, bucket_units_by_record, strict=True - ) - ) / max(1, weighted_units) else: - imported_equipment = round( - int(_dec(current_f3.imported_equipment)) - * item["units_count"] - / max(1, total_age_units) + imported_equipment = None + utilization_rate = ( + _dec(current_f3.utilization_rate) + if current_f3.utilization_rate is not None + else None ) - utilization_rate = _dec(current_f3.utilization_rate) - weighted_wear = _dec(current_f3.physical_wear_percent) + lease_share = None item.update( { "imported_equipment": imported_equipment, - "utilization_rate": round(float(utilization_rate / 100), 2), - "lease_share_itn_percent": None, - "weighted_wear_percent": _ratio(weighted_wear), + "utilization_rate": ( + round(float(utilization_rate / 100), 2) + if utilization_rate is not None + else None + ), + "lease_share_itn_percent": ( + _ratio(lease_share) if lease_share is not None else None + ), + "weighted_wear_percent": None, } ) @@ -743,11 +806,13 @@ class OrganizationAnalyticsService: { "equipment_category": record.category, "total_equipment": record.total_equipment, - "domestic_equipment": record.domestic_equipment, + "domestic_equipment": None, "imported_equipment": record.imported_equipment, - "physical_wear_percent": record.physical_wear_percent, - "utilization_rate": record.utilization_rate, - "lease_share_itn_percent": None, + "physical_wear_percent": None, + "utilization_rate": record_age_metric(record, "utilization_rate"), + "lease_share_itn_percent": record_age_metric( + record, "lease_share_itn_percent" + ), } for record in f6_records ] @@ -776,47 +841,115 @@ class OrganizationAnalyticsService: .order_by("equipment_category") ) - f3_by_year = _best_records_by_year( - f3_records, - min(record.report_year for record in f3_records), - max(record.report_year for record in f3_records), - ) - dynamics_years = sorted(f3_by_year) - commissioned_by_year = { - year: FormF5Record.objects.filter( + all_f6_records = list( + FormF6Record.objects.filter( organization=organization, is_active_version=True, - report_year=year, - commissioning_date__year=year, - ).count() - for year in dynamics_years - } - decommissioned_by_year = { - year: FormF5Record.objects.filter( - organization=organization, - is_active_version=True, - report_year=year, ) - .filter(Q(is_operational=False) | Q(requires_replacement=True)) - .count() - for year in dynamics_years - } + ) + f6_by_year: dict[int, list[FormF6Record]] = defaultdict(list) + for record in all_f6_records: + f6_by_year[record.report_year].append(record) + + if f6_by_year: + dynamics_years = sorted(f6_by_year) + total_by_year = { + year: sum(int(_dec(record.total_equipment)) for record in year_records) + for year, year_records in f6_by_year.items() + } + commissioned_by_year = { + year: sum( + int(_dec(record.commissioned_equipment)) for record in year_records + ) + for year, year_records in f6_by_year.items() + } + decommissioned_by_year = { + year: sum( + int(_dec(record.decommissioned_equipment)) + for record in year_records + ) + for year, year_records in f6_by_year.items() + } + else: + f3_by_year = _best_records_by_year( + f3_records, + min(record.report_year for record in f3_records), + max(record.report_year for record in f3_records), + ) + dynamics_years = sorted(f3_by_year) + total_by_year = { + year: int(_dec(f3_by_year[year].total_equipment)) + for year in dynamics_years + } + commissioned_by_year = { + year: FormF5Record.objects.filter( + organization=organization, + is_active_version=True, + report_year=year, + commissioning_date__year=year, + ).count() + for year in dynamics_years + } + decommissioned_by_year = { + year: FormF5Record.objects.filter( + organization=organization, + is_active_version=True, + report_year=year, + ) + .filter(Q(is_operational=False) | Q(requires_replacement=True)) + .count() + for year in dynamics_years + } + + total_equipment = ( + sum(int(_dec(record.total_equipment)) for record in f6_records) + if f6_records + else int(_dec(current_f3.total_equipment)) + ) + imported_equipment = ( + sum(int(_dec(record.imported_equipment)) for record in f6_records) + if f6_records + else int(_dec(current_f3.imported_equipment)) + ) + average_shift = ( + weighted_metric(f6_records, "avg_shift_work", "total_equipment") + if f6_records + else getattr(current_f3, "avg_shift_work", None) + ) return { "organization_id": str(organization.id), "report_year": report_year, "summary": { - "total_equipment": int(_dec(current_f3.total_equipment)), - "machine_tools_and_equipment": int(_dec(current_f3.total_equipment)), - "domestic_equipment": int(_dec(current_f3.domestic_equipment)), - "imported_equipment": int(_dec(current_f3.imported_equipment)), - "physical_wear_percent": _ratio(current_f3.physical_wear_percent), - "weighted_wear_percent": _ratio(current_f3.physical_wear_percent), - "utilization_rate": round( - float(_dec(current_f3.utilization_rate) / Decimal("100")), 2 + "total_equipment": total_equipment, + "machine_tools_and_equipment": int( + _dec( + getattr(current_f3, "machine_tools_and_equipment", None) + or current_f3.total_equipment + ) + ), + "domestic_equipment": ( + None if f6_records else int(_dec(current_f3.domestic_equipment)) + ), + "imported_equipment": imported_equipment, + "physical_wear_percent": _ratio(current_f3.physical_wear_percent), + "weighted_wear_percent": None, + "utilization_rate": ( + round( + float(_dec(current_f3.utilization_rate) / Decimal("100")), + 2, + ) + if current_f3.utilization_rate is not None + else None + ), + "avg_shift_work": ( + _ratio(average_shift) if average_shift is not None else None + ), + "equipment_needed": ( + int(_dec(current_f3.equipment_needed)) + if current_f3.equipment_needed is not None + else None ), - "avg_shift_work": _ratio(current_f3.avg_shift_work), - "equipment_needed": int(_dec(current_f3.equipment_needed)), "average_age_years": _weighted_average_age(age_distribution), "commissioned_equipment": commissioned_by_year.get(report_year, 0), "decommissioned_equipment": decommissioned_by_year.get(report_year, 0), @@ -826,16 +959,28 @@ class OrganizationAnalyticsService: { "category": row["equipment_category"] or "Без категории", "total_equipment": int(_dec(row["total_equipment"])), - "domestic_equipment": int(_dec(row["domestic_equipment"])), + "domestic_equipment": ( + int(_dec(row["domestic_equipment"])) + if row["domestic_equipment"] is not None + else None + ), "imported_equipment": int(_dec(row["imported_equipment"])), - "physical_wear_percent": _ratio(row["physical_wear_percent"]), - "weighted_wear_percent": _ratio(row["physical_wear_percent"]), + "physical_wear_percent": ( + _ratio(row["physical_wear_percent"]) + if row["physical_wear_percent"] is not None + else None + ), + "weighted_wear_percent": None, "utilization_rate": round( float(_dec(row.get("utilization_rate")) / Decimal("100")), 2 ) if row.get("utilization_rate") is not None else None, - "lease_share_itn_percent": row.get("lease_share_itn_percent"), + "lease_share_itn_percent": ( + _ratio(row["lease_share_itn_percent"]) + if row.get("lease_share_itn_percent") is not None + else None + ), } for row in category_rows ], @@ -846,7 +991,7 @@ class OrganizationAnalyticsService: "points": [ { "period": year, - "value": int(_dec(f3_by_year[year].total_equipment)), + "value": total_by_year[year], } for year in dynamics_years ], diff --git a/src/apps/organization/contract_serializers.py b/src/apps/organization/contract_serializers.py index 24311e1..affa8de 100644 --- a/src/apps/organization/contract_serializers.py +++ b/src/apps/organization/contract_serializers.py @@ -90,10 +90,16 @@ class EconomicsRatioNormativesSerializer(serializers.Serializer): ebitda_margin = serializers.FloatField(allow_null=True) +class EconomicsReportPeriodSerializer(serializers.Serializer): + year = serializers.IntegerField() + report_half_year = serializers.IntegerField(allow_null=True) + + class EconomicsResponseSerializer(serializers.Serializer): organization_id = serializers.UUIDField() group = serializers.CharField() periods = serializers.ListField(child=serializers.IntegerField()) + report_periods = EconomicsReportPeriodSerializer(many=True) data_available = serializers.BooleanField() message = serializers.CharField(allow_null=True) kpis = EconomicsKpisSerializer() @@ -106,10 +112,10 @@ class PersonnelHeadcountSerializer(serializers.Serializer): average_employees = serializers.IntegerField() avg_payroll_employees = serializers.IntegerField() payroll_fund = serializers.IntegerField() - production_workers = serializers.IntegerField() - engineering_workers = serializers.IntegerField() - administrative_workers = serializers.IntegerField() - workers_needed = serializers.IntegerField() + production_workers = serializers.IntegerField(allow_null=True) + engineering_workers = serializers.IntegerField(allow_null=True) + administrative_workers = serializers.IntegerField(allow_null=True) + workers_needed = serializers.IntegerField(allow_null=True) class PersonnelAgeDistributionSerializer(serializers.Serializer): @@ -119,16 +125,18 @@ class PersonnelAgeDistributionSerializer(serializers.Serializer): class PersonnelHistorySerializer(serializers.Serializer): year = serializers.IntegerField() + report_month = serializers.IntegerField(allow_null=True) average_employees = serializers.IntegerField() avg_payroll_employees = serializers.IntegerField() - average_age = serializers.FloatField() + average_age = serializers.FloatField(allow_null=True) payroll_fund = serializers.IntegerField() class PersonnelResponseSerializer(serializers.Serializer): organization_id = serializers.UUIDField() report_year = serializers.IntegerField() - average_age = serializers.FloatField() + report_month = serializers.IntegerField(allow_null=True) + average_age = serializers.FloatField(allow_null=True) headcount = PersonnelHeadcountSerializer() age_distribution = PersonnelAgeDistributionSerializer(many=True) history = PersonnelHistorySerializer(many=True) @@ -137,13 +145,13 @@ class PersonnelResponseSerializer(serializers.Serializer): class EquipmentSummarySerializer(serializers.Serializer): total_equipment = serializers.IntegerField() machine_tools_and_equipment = serializers.IntegerField() - domestic_equipment = serializers.IntegerField() + domestic_equipment = serializers.IntegerField(allow_null=True) imported_equipment = serializers.IntegerField() physical_wear_percent = serializers.FloatField() - weighted_wear_percent = serializers.FloatField() - utilization_rate = serializers.FloatField() - avg_shift_work = serializers.FloatField() - equipment_needed = serializers.IntegerField() + weighted_wear_percent = serializers.FloatField(allow_null=True) + utilization_rate = serializers.FloatField(allow_null=True) + avg_shift_work = serializers.FloatField(allow_null=True) + equipment_needed = serializers.IntegerField(allow_null=True) average_age_years = serializers.FloatField() commissioned_equipment = serializers.IntegerField() decommissioned_equipment = serializers.IntegerField() @@ -152,19 +160,19 @@ class EquipmentSummarySerializer(serializers.Serializer): class EquipmentAgeDistributionSerializer(serializers.Serializer): bucket = serializers.CharField() units_count = serializers.IntegerField() - imported_equipment = serializers.IntegerField() - utilization_rate = serializers.FloatField() + imported_equipment = serializers.IntegerField(allow_null=True) + utilization_rate = serializers.FloatField(allow_null=True) lease_share_itn_percent = serializers.FloatField(allow_null=True) - weighted_wear_percent = serializers.FloatField() + weighted_wear_percent = serializers.FloatField(allow_null=True) class EquipmentCategorySerializer(serializers.Serializer): category = serializers.CharField() total_equipment = serializers.IntegerField() - domestic_equipment = serializers.IntegerField() + domestic_equipment = serializers.IntegerField(allow_null=True) imported_equipment = serializers.IntegerField() - physical_wear_percent = serializers.FloatField() - weighted_wear_percent = serializers.FloatField() + physical_wear_percent = serializers.FloatField(allow_null=True) + weighted_wear_percent = serializers.FloatField(allow_null=True) utilization_rate = serializers.FloatField(allow_null=True) lease_share_itn_percent = serializers.FloatField(allow_null=True) diff --git a/tests/apps/core/test_demo_period_workbooks.py b/tests/apps/core/test_demo_period_workbooks.py new file mode 100644 index 0000000..7e78da0 --- /dev/null +++ b/tests/apps/core/test_demo_period_workbooks.py @@ -0,0 +1,41 @@ +"""Integration checks for the versioned Excel demo-period fixtures.""" + +import re +from pathlib import Path + +from apps.form_3.services import FormF3Parser +from apps.form_4.services import FormF4Parser +from apps.form_6.services import FormF6Parser +from django.test import TestCase + +DEMO_DIR = Path(__file__).resolve().parents[3] / "input" / "demo-periods" + + +class DemoPeriodWorkbooksTest(TestCase): + def test_form_f3_workbooks_match_current_schema(self): + for path in sorted(DEMO_DIR.glob("Ф-3_*.xlsx")): + year = int(re.search(r"_(\d{4})", path.name).group(1)) + with self.subTest(path=path.name), path.open("rb") as file: + result = FormF3Parser(report_year=year).parse(file) + self.assertEqual(result.loaded_count, 20) + self.assertEqual(result.skipped_count, 0) + + def test_form_f4_workbooks_match_current_schema(self): + for path in sorted(DEMO_DIR.glob("Ф-4_*.xlsx")): + match = re.search(r"_(\d{4})-H([12])", path.name) + year, half_year = map(int, match.groups()) + with self.subTest(path=path.name), path.open("rb") as file: + result = FormF4Parser( + report_year=year, + report_half_year=half_year, + ).parse(file) + self.assertEqual(result.loaded_count, 20) + self.assertEqual(result.skipped_count, 0) + + def test_form_f6_workbooks_are_structurally_consistent(self): + for path in sorted(DEMO_DIR.glob("Ф-6_*.xlsx")): + year = int(re.search(r"_(\d{4})", path.name).group(1)) + with self.subTest(path=path.name), path.open("rb") as file: + result = FormF6Parser(report_year=year).parse(file) + self.assertEqual(result.loaded_count, 20) + self.assertEqual(result.skipped_count, 0) diff --git a/tests/apps/core/test_generate_test_reports_command.py b/tests/apps/core/test_generate_test_reports_command.py index 828ac17..995af62 100644 --- a/tests/apps/core/test_generate_test_reports_command.py +++ b/tests/apps/core/test_generate_test_reports_command.py @@ -59,6 +59,51 @@ class GenerateTestReportsCommandTest(TestCase): self.assertEqual(PublicProcurement.objects.count(), 3) self.assertEqual(ArbitrationCase.objects.count(), 3) + for record in FormF3Record.objects.all(): + self.assertEqual( + sum( + ( + record.employees_under_20, + record.employees_20_29, + record.employees_30_39, + record.employees_40_49, + record.employees_50_59, + record.employees_over_60, + ) + ), + int(record.avg_employees), + ) + self.assertEqual( + record.machine_tools_and_equipment, + record.total_equipment, + ) + + for record in FormF6Record.objects.all(): + self.assertEqual( + sum( + ( + record.age_under_5, + record.age_5_10, + record.age_10_15, + record.age_15_20, + record.age_over_20, + ) + ), + record.total_equipment, + ) + self.assertEqual( + sum( + ( + record.age_under_5_imported, + record.age_5_10_imported, + record.age_10_15_imported, + record.age_15_20_imported, + record.age_over_20_imported, + ) + ), + record.imported_equipment, + ) + self.assertIn( "Ф-1: создано 12 записей, активных 9, архивных 3", stdout.getvalue() ) diff --git a/tests/apps/form_3/test_services.py b/tests/apps/form_3/test_services.py index bb1d3fc..f3fb144 100644 --- a/tests/apps/form_3/test_services.py +++ b/tests/apps/form_3/test_services.py @@ -1,7 +1,12 @@ """Tests for FormF3 services.""" +from decimal import Decimal +from io import BytesIO + +from apps.form_3.models import FormF3Record from apps.form_3.services import FormF3Parser, FormF3Service from django.test import TestCase +from openpyxl import Workbook from tests.apps.organization.factories import OrganizationFactory @@ -48,6 +53,72 @@ class FormF3ServiceTest(TestCase): class FormF3ParserTest(TestCase): """Tests for FormF3Parser.""" + @staticmethod + def _current_template_file() -> BytesIO: + headers = [ + "Наименование организации", + "ОКПО", + "ОГРН", + "ИНН", + "Отгруженные товары собственного производства, выполненные работы и услуги собственными силами в фактических ценах - всего", + "Отгруженные товары собственного производства, выполненные работы и услуги собственными силами в фактических ценах, из них инновационные товары, работы, услуги", + "Всего основных фондов (без незавершенных активов и не включая земельные участки и объекты природопользования)", + "Станочный парк и оборудование, всего по предприятию", + "Станочный парк и оборудование - импортное оборудование", + "Оборудование с возрастом от 5 до 10 лет", + "Оборудование с возрастом до 5 лет", + "Фактический (физический) износ оборудования, %", + "Средний уровень загрузки производственных мощностей (всего)", + "Средний уровень загрузки производственных мощностей военного производства", + "Средний возраст сотрудников", + "Количество работников предприятия до 20 лет", + "Количество работников предприятия 20-29 лет", + "Количество работников предприятия 30-39 лет", + "Количество работников предприятия 40-49 лет", + "Количество работников предприятия 50-59 лет", + "Количество работников предприятия старше 60 лет", + ] + workbook = Workbook() + sheet = workbook.active + sheet.append(headers) + sheet.append( + [None, None, None, None] + + ["тыс. руб."] * 3 + + ["ед."] * 4 + + ["%"] * 3 + + ["лет"] + + ["чел."] * 6 + ) + sheet.append( + [ + "Тестовая организация Ф-3", + "90000001", + "1267700000017", + "3234567890", + 352, + 222, + 85, + 46, + 17, + 13, + 14, + 21, + 79, + 65, + 42, + 4, + 18, + 28, + 26, + 17, + 7, + ] + ) + file = BytesIO() + workbook.save(file) + file.seek(0) + return file + def test_get_column_mappings_returns_mappings(self): """Test get_column_mappings returns correct mappings.""" parser = FormF3Parser(report_year=2026, report_quarter=1) @@ -57,8 +128,24 @@ class FormF3ParserTest(TestCase): self.assertTrue(len(mappings) > 0) field_names = [m.field_name for m in mappings] - self.assertIn("avg_employees", field_names) - self.assertIn("total_equipment", field_names) + self.assertIn("shipped_goods_total", field_names) + self.assertIn("machine_tools_and_equipment", field_names) + self.assertIn("average_employee_age", field_names) + self.assertNotIn("avg_employees", field_names) + + def test_parse_current_template_maps_equipment_and_personnel_columns(self): + OrganizationFactory.create(inn="3234567890") + parser = FormF3Parser(report_year=2026, report_quarter=1) + + result = parser.parse(self._current_template_file()) + + self.assertEqual(result.loaded_count, 1) + record = FormF3Record.objects.get() + self.assertEqual(record.shipped_goods_total, Decimal("352")) + self.assertEqual(record.machine_tools_and_equipment, 46) + self.assertEqual(record.imported_equipment, 17) + self.assertEqual(record.average_employee_age, Decimal("42")) + self.assertEqual(record.employees_30_39, 28) def test_create_record_uses_existing_organization(self): """Report imports reuse existing organizations when available.""" @@ -69,8 +156,8 @@ class FormF3ParserTest(TestCase): row_data = { "inn": "3234567890", "name": "Тестовая организация Ф-3", - "avg_employees": 100, - "total_equipment": 50, + "machine_tools_and_equipment": 50, + "average_employee_age": 42, } record = parser.create_record(row_data) diff --git a/tests/apps/form_4/test_services.py b/tests/apps/form_4/test_services.py index fafe7ad..4190ee7 100644 --- a/tests/apps/form_4/test_services.py +++ b/tests/apps/form_4/test_services.py @@ -1,7 +1,12 @@ """Tests for FormF4 services.""" +from decimal import Decimal +from io import BytesIO + +from apps.form_4.models import FormF4Record from apps.form_4.services import FormF4Parser, FormF4Service from django.test import TestCase +from openpyxl import Workbook from tests.apps.organization.factories import OrganizationFactory @@ -48,6 +53,47 @@ class FormF4ServiceTest(TestCase): class FormF4ParserTest(TestCase): """Tests for FormF4Parser.""" + @staticmethod + def _current_template_file() -> BytesIO: + headers = [ + "Наименование организации", + "ОКПО", + "ОГРН", + "ИНН", + "Выручка, в соответствии с РСБУ", + "Выручка, в соответствии с МСФО", + "Чистая прибыль (убыток), в соответствии с РСБУ", + "Чистая прибыль (убыток), в соответствии с МСФО", + "Кредиты и займы, в соответствии с РСБУ", + "Кредиты и займы, в соответствии с МСФО", + "EBITDA, в соответствии с РСБУ", + "EBITDA, в соответствии с МСФО", + ] + workbook = Workbook() + sheet = workbook.active + sheet.append(headers) + sheet.append([None, None, None, None] + ["тыс. руб."] * 8) + sheet.append( + [ + "Тестовая организация Ф-4", + "90000001", + "1267700000017", + "4234567890", + 477807, + 499308, + 442414, + 462322, + 42047, + 43729, + 138564, + 62115, + ] + ) + file = BytesIO() + workbook.save(file) + file.seek(0) + return file + def test_get_column_mappings_returns_mappings(self): """Test get_column_mappings returns correct mappings.""" parser = FormF4Parser(report_year=2026, report_half_year=1) @@ -59,6 +105,20 @@ class FormF4ParserTest(TestCase): field_names = [m.field_name for m in mappings] self.assertIn("revenue_rsbu", field_names) self.assertIn("net_profit_rsbu", field_names) + self.assertIn("ebitda_rsbu", field_names) + + def test_parse_current_template_maps_profit_loans_and_ebitda_columns(self): + OrganizationFactory.create(inn="4234567890") + parser = FormF4Parser(report_year=2025, report_half_year=2) + + result = parser.parse(self._current_template_file()) + + self.assertEqual(result.loaded_count, 1) + record = FormF4Record.objects.get() + self.assertEqual(record.revenue_rsbu, Decimal("477807")) + self.assertEqual(record.net_profit_rsbu, Decimal("442414")) + self.assertEqual(record.loans_rsbu, Decimal("42047")) + self.assertEqual(record.ebitda_rsbu, Decimal("138564")) def test_create_record_uses_existing_organization(self): """Report imports reuse existing organizations when available.""" diff --git a/tests/apps/form_6/test_services.py b/tests/apps/form_6/test_services.py index fad00db..bb922ef 100644 --- a/tests/apps/form_6/test_services.py +++ b/tests/apps/form_6/test_services.py @@ -1,7 +1,12 @@ """Tests for FormF6 services.""" +from io import BytesIO + +from apps.core.excel import ExcelValidationError +from apps.form_6.models import FormF6Record from apps.form_6.services import FormF6Parser, FormF6Service from django.test import TestCase +from openpyxl import Workbook from tests.apps.organization.factories import OrganizationFactory @@ -48,6 +53,82 @@ class FormF6ServiceTest(TestCase): class FormF6ParserTest(TestCase): """Tests for FormF6Parser.""" + @staticmethod + def _current_template_file( + *, + total_equipment: int = 100, + age_under_5: int | float = 20, + total_header: str = "Всего", + ) -> BytesIO: + workbook = Workbook() + sheet = workbook.active + row_1 = [None] * 38 + row_2 = [None] * 38 + row_3 = [None] * 38 + row_4 = [None] * 38 + row_1[:6] = [ + "Наименование организации", + "ОКПО", + "ОГРН", + "ИНН", + "Код строки", + "Категория", + ] + row_1[6] = "Количество оборудования на конец года ед." + row_1[10] = "Из установленного оборудования – оборудование в возрасте, единиц" + row_1[35:38] = [ + "Средняя сменность работы", + "Количество рабочих мест без оборудования", + "Примечание", + ] + row_2[10], row_2[15], row_2[20], row_2[25], row_2[30] = ( + "До 5 лет", + "От 5 до 10 лет", + "От 10 до 15 лет", + "От 15 до 20 лет", + "Свыше 20 лет", + ) + row_3[6:10] = [ + total_header, + "Введенное в эксплуатацию в отчетном году", + "Выведенное из эксплуатации в отчетном году", + "Импортное оборудование", + ] + for start in (10, 15, 20, 25, 30): + row_3[start : start + 5] = [ + "Всего", + "Импортного оборудования", + "Коэффициент использования оборудования в производстве", + "Доля фактического времени работы оборудования, использованного для производства ПВН, %", + "Средневзвешенный коэффициент загрузки", + ] + for row in (row_1, row_2, row_3, row_4): + sheet.append(row) + + ages = [age_under_5, 25, 20, 20, 15] + imported = [4, 5, 4, 4, 3] + values = [ + "Тестовая организация Ф-6", + "90000001", + "1267700000017", + "6234567890", + "101", + "Основное технологическое оборудование", + total_equipment, + 12, + 7, + sum(imported), + ] + for total, imported_total in zip(ages, imported, strict=True): + values.extend([total, imported_total, 75, 20, 0.8]) + values.extend([1.5, 4, "Тестовые согласованные данные"]) + sheet.append(values) + + file = BytesIO() + workbook.save(file) + file.seek(0) + return file + def test_get_column_mappings_returns_mappings(self): """Test get_column_mappings returns correct mappings.""" parser = FormF6Parser(report_year=2026, report_quarter=1) @@ -59,6 +140,41 @@ class FormF6ParserTest(TestCase): field_names = [m.field_name for m in mappings] self.assertIn("row_code", field_names) self.assertIn("total_equipment", field_names) + self.assertIn("commissioned_equipment", field_names) + self.assertIn("age_over_20_imported", field_names) + + def test_parse_current_template_maps_all_age_buckets(self): + OrganizationFactory.create(inn="6234567890") + parser = FormF6Parser(report_year=2026, report_quarter=1) + + result = parser.parse(self._current_template_file()) + + self.assertEqual(result.loaded_count, 1) + record = FormF6Record.objects.get() + self.assertEqual(record.total_equipment, 100) + self.assertEqual(record.commissioned_equipment, 12) + self.assertEqual(record.decommissioned_equipment, 7) + self.assertEqual(record.age_under_5, 20) + self.assertEqual(record.age_over_20, 15) + self.assertEqual(record.age_over_20_imported, 3) + + def test_rejects_non_integral_equipment_counts_before_creating_records(self): + OrganizationFactory.create(inn="6234567890") + parser = FormF6Parser(report_year=2026, report_quarter=1) + + with self.assertRaises(ExcelValidationError): + parser.parse(self._current_template_file(age_under_5=20.5)) + + self.assertFalse(FormF6Record.objects.exists()) + + def test_rejects_incompatible_template_before_creating_records(self): + OrganizationFactory.create(inn="6234567890") + parser = FormF6Parser(report_year=2026, report_quarter=1) + + with self.assertRaises(ExcelValidationError): + parser.parse(self._current_template_file(total_header="Импортное")) + + self.assertFalse(FormF6Record.objects.exists()) def test_create_record_uses_existing_organization(self): """Report imports reuse existing organizations when available.""" diff --git a/tests/apps/organization/test_analytics_api.py b/tests/apps/organization/test_analytics_api.py index 8f3ada8..9a042ab 100644 --- a/tests/apps/organization/test_analytics_api.py +++ b/tests/apps/organization/test_analytics_api.py @@ -41,6 +41,8 @@ class OrganizationAnalyticsApiTest(APITestCase): organization=self.organization, report_year=2026, report_quarter=1, + report_month=6, + avg_employees=1050, avg_payroll_employees=995, payroll_fund=Decimal("1000000.00"), military_output_actual=Decimal("11000000.00"), @@ -56,6 +58,8 @@ class OrganizationAnalyticsApiTest(APITestCase): organization=self.organization, report_year=2025, report_quarter=1, + report_month=12, + avg_employees=1020, avg_payroll_employees=970, payroll_fund=Decimal("900000.00"), military_output_actual=Decimal("9000000.00"), @@ -88,11 +92,19 @@ class OrganizationAnalyticsApiTest(APITestCase): FormF3RecordFactory.create( organization=self.organization, report_year=2026, - avg_employees=1050, - production_workers=620, - engineering_workers=210, - administrative_workers=220, - workers_needed=35, + avg_employees=None, + production_workers=None, + engineering_workers=None, + administrative_workers=None, + workers_needed=None, + average_employee_age=Decimal("42.00"), + employees_under_20=4, + employees_20_29=18, + employees_30_39=28, + employees_40_49=26, + employees_50_59=17, + employees_over_60=7, + machine_tools_and_equipment=46, total_equipment=187, domestic_equipment=91, imported_equipment=96, @@ -109,14 +121,16 @@ class OrganizationAnalyticsApiTest(APITestCase): FormF3RecordFactory.create( organization=self.organization, report_year=2025, - avg_employees=1020, + avg_employees=None, + average_employee_age=Decimal("41.00"), ) FormF4RecordFactory.create( organization=self.organization, report_year=2026, - revenue_rsbu=Decimal("1100000000.00"), - net_profit_rsbu=Decimal("320000000.00"), - ebitda_rsbu=Decimal("480000000.00"), + report_half_year=2, + revenue_rsbu=Decimal("477807.00"), + net_profit_rsbu=Decimal("442414.00"), + ebitda_rsbu=Decimal("138564.00"), gross_profit_rsbu=Decimal("520000000.00"), operating_profit_rsbu=Decimal("300000000.00"), net_debt_rsbu=Decimal("200000000.00"), @@ -131,9 +145,10 @@ class OrganizationAnalyticsApiTest(APITestCase): FormF4RecordFactory.create( organization=self.organization, report_year=2025, - revenue_rsbu=Decimal("980000000.00"), - net_profit_rsbu=Decimal("250000000.00"), - ebitda_rsbu=Decimal("410000000.00"), + report_half_year=2, + revenue_rsbu=Decimal("450000.00"), + net_profit_rsbu=Decimal("400000.00"), + ebitda_rsbu=Decimal("120000.00"), ros=Decimal("21.00"), roa=Decimal("10.50"), roe=Decimal("14.10"), @@ -152,14 +167,31 @@ class OrganizationAnalyticsApiTest(APITestCase): organization=self.organization, report_year=2026, category="Станочное оборудование", - total_equipment=54, - domestic_equipment=31, - imported_equipment=23, + total_equipment=187, + domestic_equipment=None, + imported_equipment=96, + commissioned_equipment=12, + decommissioned_equipment=7, age_under_5=70, + age_under_5_imported=35, + age_under_5_utilization_rate=Decimal("92.00"), + age_under_5_lease_share_itn_percent=Decimal("20.00"), age_5_10=41, + age_5_10_imported=21, + age_5_10_utilization_rate=Decimal("92.00"), + age_5_10_lease_share_itn_percent=Decimal("20.00"), age_10_15=33, + age_10_15_imported=17, + age_10_15_utilization_rate=Decimal("92.00"), + age_10_15_lease_share_itn_percent=Decimal("20.00"), age_15_20=22, + age_15_20_imported=12, + age_15_20_utilization_rate=Decimal("92.00"), + age_15_20_lease_share_itn_percent=Decimal("20.00"), age_over_20=21, + age_over_20_imported=11, + age_over_20_utilization_rate=Decimal("92.00"), + age_over_20_lease_share_itn_percent=Decimal("20.00"), physical_wear_percent=Decimal("28.40"), utilization_rate=Decimal("92.00"), avg_shift_work=Decimal("1.80"), @@ -231,14 +263,24 @@ class OrganizationAnalyticsApiTest(APITestCase): self.assertEqual(response.data["organization_id"], str(self.organization.id)) self.assertEqual(response.data["group"], "efficiency") self.assertEqual(response.data["periods"], [2025, 2026]) + self.assertEqual( + response.data["report_periods"], + [ + {"year": 2025, "report_half_year": 2}, + {"year": 2026, "report_half_year": 2}, + ], + ) self.assertEqual( response.data["kpis"].keys(), {"revenue", "ebitda", "net_profit", "revenue_per_employee"}, ) - self.assertGreater(response.data["kpis"]["revenue_per_employee"]["value"], 0) + self.assertEqual(response.data["kpis"]["revenue"]["value"], 477807) + self.assertEqual(response.data["kpis"]["net_profit"]["value"], 442414) + self.assertEqual(response.data["kpis"]["ebitda"]["value"], 138564) + self.assertEqual(response.data["kpis"]["revenue_per_employee"]["value"], 455) self.assertEqual( response.data["kpis"]["revenue_per_employee"]["unit"], - "rub_per_employee", + "rub_thousands_per_employee", ) for kpi in response.data["kpis"].values(): self.assertIn("previous_value", kpi) @@ -251,7 +293,7 @@ class OrganizationAnalyticsApiTest(APITestCase): self.assertIn("unit", series) self.assertIn("points", series) expected_unit = ( - "rub_per_employee" + "rub_thousands_per_employee" if series["metric"] == "revenue_per_employee" else "rub_thousands" ) @@ -283,10 +325,43 @@ class OrganizationAnalyticsApiTest(APITestCase): self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data["periods"], []) + self.assertEqual(response.data["report_periods"], []) self.assertEqual(response.data["kpis"], {}) self.assertFalse(response.data["data_available"]) self.assertEqual(response.data["message"], "Данные отсутствуют") + def test_economics_normalizes_f2_rubles_to_thousands_without_f4(self): + organization = OrganizationFactory.create() + FormF1RecordFactory.create( + organization=organization, + report_year=2026, + report_month=6, + avg_employees=100, + ) + FormF2RecordFactory.create( + organization=organization, + report_year=2026, + revenue=Decimal("1200000.00"), + net_profit=Decimal("300000.00"), + ebitda=Decimal("480000.00"), + ) + + response = self.client.get( + f"/api/v1/organizations/{organization.id}/analytics/economics/" + "?group=efficiency&from_year=2026&to_year=2026" + ) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.data["kpis"]["revenue"]["value"], 1200) + self.assertEqual( + response.data["kpis"]["revenue_per_employee"]["value"], + 12, + ) + self.assertEqual( + response.data["kpis"]["revenue"]["unit"], + "rub_thousands", + ) + def test_personnel_contract(self): personnel_response = self.client.get( f"/api/v1/organizations/{self.organization.id}/analytics/personnel/" @@ -297,6 +372,7 @@ class OrganizationAnalyticsApiTest(APITestCase): personnel_response.data["organization_id"], str(self.organization.id) ) self.assertEqual(personnel_response.data["report_year"], 2026) + self.assertEqual(personnel_response.data["report_month"], 6) self.assertEqual( personnel_response.data["headcount"]["average_employees"], 1050, @@ -306,6 +382,7 @@ class OrganizationAnalyticsApiTest(APITestCase): set(personnel_response.data["history"][0]), { "year", + "report_month", "average_employees", "avg_payroll_employees", "average_age", @@ -313,15 +390,22 @@ class OrganizationAnalyticsApiTest(APITestCase): }, ) self.assertEqual(len(personnel_response.data["age_distribution"]), 3) - self.assertIn("average_age", personnel_response.data) + self.assertEqual(personnel_response.data["average_age"], 42.0) self.assertEqual( personnel_response.data["headcount"]["avg_payroll_employees"], 995 ) - self.assertEqual(personnel_response.data["headcount"]["payroll_fund"], 1000000) + self.assertEqual( + personnel_response.data["headcount"]["payroll_fund"], 1000000000 + ) + self.assertIsNone(personnel_response.data["headcount"]["production_workers"]) self.assertEqual( personnel_response.data["age_distribution"][0]["age_group"], "under_30", ) + self.assertEqual( + personnel_response.data["age_distribution"][0]["employees_count"], + 22, + ) self.assertIn("employees_count", personnel_response.data["age_distribution"][0]) def test_yearly_analytics_use_latest_available_year_when_requested_year_is_empty( @@ -374,15 +458,19 @@ class OrganizationAnalyticsApiTest(APITestCase): }, ) self.assertEqual(response.data["summary"]["total_equipment"], 187) + self.assertEqual(response.data["summary"]["machine_tools_and_equipment"], 46) + self.assertIsNone(response.data["summary"]["domestic_equipment"]) + self.assertEqual(response.data["summary"]["imported_equipment"], 96) self.assertEqual(response.data["summary"]["physical_wear_percent"], 32.0) - self.assertEqual(response.data["summary"]["weighted_wear_percent"], 32.0) + self.assertIsNone(response.data["summary"]["weighted_wear_percent"]) self.assertEqual(response.data["summary"]["utilization_rate"], 0.92) - self.assertEqual(response.data["summary"]["commissioned_equipment"], 1) - self.assertEqual(response.data["summary"]["decommissioned_equipment"], 1) + self.assertEqual(response.data["summary"]["commissioned_equipment"], 12) + self.assertEqual(response.data["summary"]["decommissioned_equipment"], 7) self.assertEqual( response.data["age_distribution"][0]["bucket"], "under_5_years" ) self.assertEqual(len(response.data["age_distribution"]), 5) + self.assertEqual(response.data["age_distribution"][0]["imported_equipment"], 35) self.assertEqual( set(response.data["age_distribution"][0]), { @@ -400,13 +488,13 @@ class OrganizationAnalyticsApiTest(APITestCase): response.data["categories"][0], { "category": "Станочное оборудование", - "total_equipment": 54, - "domestic_equipment": 31, - "imported_equipment": 23, - "physical_wear_percent": 28.4, - "weighted_wear_percent": 28.4, + "total_equipment": 187, + "domestic_equipment": None, + "imported_equipment": 96, + "physical_wear_percent": None, + "weighted_wear_percent": None, "utilization_rate": 0.92, - "lease_share_itn_percent": None, + "lease_share_itn_percent": 20.0, }, )