From b845eece0f05389252509ae60d7bcbfc2d8519b0 Mon Sep 17 00:00:00 2001 From: Abdelkouddous LHACHIMI Date: Fri, 27 Mar 2026 23:59:16 +0100 Subject: [PATCH] Initial Implementation --- Endolife - Demandes 20261603.xlsx | Bin 0 -> 12040 bytes Endolife_Reporting - 261303.xlsx | Bin 0 -> 449894 bytes config/DO_Dashboard_Config.xlsx | Bin 0 -> 81027 bytes config/Endobest_Dashboard_Config.xlsx | Bin 79106 -> 0 bytes config/do_dashboard_extended_template.xlsx | Bin 0 -> 41864 bytes ... => do_dashboard_monitoring_template.xlsx} | Bin config/eb_dashboard_extended_template.xlsx | Bin 41198 -> 0 bytes do_dashboard.bat | 4 + do_dashboard.py | 1475 ++++++++++++ do_dashboard_check_only-exe.bat | 3 + do_dashboard_check_only.bat | 4 + do_dashboard_check_only_debug-exe.bat | 3 + do_dashboard_check_only_debug.bat | 4 + do_dashboard_constants.py | 135 ++ do_dashboard_debug-exe.bat | 3 + do_dashboard_debug.bat | 4 + do_dashboard_excel_export.py | 2094 +++++++++++++++++ do_dashboard_excel_only-exe.bat | 3 + do_dashboard_excel_only.bat | 4 + do_dashboard_quality_checks.py | 786 +++++++ do_dashboard_utils.py | 221 ++ 21 files changed, 4743 insertions(+) create mode 100644 Endolife - Demandes 20261603.xlsx create mode 100644 Endolife_Reporting - 261303.xlsx create mode 100644 config/DO_Dashboard_Config.xlsx delete mode 100644 config/Endobest_Dashboard_Config.xlsx create mode 100644 config/do_dashboard_extended_template.xlsx rename config/{eb_dashboard_monitoring_template.xlsx => do_dashboard_monitoring_template.xlsx} (100%) delete mode 100644 config/eb_dashboard_extended_template.xlsx create mode 100644 do_dashboard.bat create mode 100644 do_dashboard.py create mode 100644 do_dashboard_check_only-exe.bat create mode 100644 do_dashboard_check_only.bat create mode 100644 do_dashboard_check_only_debug-exe.bat create mode 100644 do_dashboard_check_only_debug.bat create mode 100644 do_dashboard_constants.py create mode 100644 do_dashboard_debug-exe.bat create mode 100644 do_dashboard_debug.bat create mode 100644 do_dashboard_excel_export.py create mode 100644 do_dashboard_excel_only-exe.bat create mode 100644 do_dashboard_excel_only.bat create mode 100644 do_dashboard_quality_checks.py create mode 100644 do_dashboard_utils.py diff --git a/Endolife - Demandes 20261603.xlsx b/Endolife - Demandes 20261603.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..312bacb87bd96259aee173786d1e790993fc7f0a GIT binary patch literal 12040 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 L)%Y9zuhRbklwlRV literal 0 HcmV?d00001 diff --git a/Endolife_Reporting - 261303.xlsx b/Endolife_Reporting - 261303.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ee6a199adba15757ff63319fb063dc34f14564a9 GIT binary patch literal 449894 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 z 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 literal 0 HcmV?d00001 diff --git a/config/DO_Dashboard_Config.xlsx b/config/DO_Dashboard_Config.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6f2632df27ae6d0a62cfa84091bc944980853c69 GIT binary patch literal 81027 zcmeFXXH*nx*Cq@iprT+#K){Sh6cCWqs3-ygDp4dUl5>ttiztX7S&-NuB9cLJMv)vE zk(`6%9GcM3-QQi+a2}s`o_E&F`quoKIcptHmsPdz9j|@uUFV@3#r~6IRAdLp$jHu< z*)R{b|0X9R>pen7c7p7{zNdFAE$s9y>~xf!t@LfRxSh<+&VAay?`j;`KJfhi`{(~+ z4>X1MDU9(R^;!&a@~$iRYE9AjNWSRhK%>^BVRAol^E8qC@#~4m?U*y~j?Uatxi}If z$;J)IKH2%fR)j5;Dw zN%-YVogU|O^gQ7dmpQl28N$Smx$2@PMOrV0$`lPB=HKq?s4-hs3<*kl+QEOHUg!8= z$e6$h|C|TH?)pEhV-MEey>d1@!b%fd#2l2q(L{ME+)raX_;ISHjmZbO$La3ZQtw@3 z_DGr?K^q76EJxKA3cN(pi^|xA+g{xFwf6qq>0HN`nZ2UIpG`|N7`7E?I0m%Vf7F$D z&HRYPNM_g-Y$+uy9gUWrxw~(UF6-J(Ne6}E?W3Q(Fl{KUH`~+q-#2|fcBhM-{h?{8 z^Gs6>5mY>pNI~}S->@K0h4N0k{pDWp+l?mG>A17h!I z>dvo^3Z(fSKPh@K-!a`Q9A|A$eeH@(*gfmCk)OvLIBuY6g*4*tg?89uGu@(kReq#+|?Bs)OvWX40P z6GuxM)903!rcle=s~K|8H^H<2cmGow)@V}2d-U$c8-nMr@~{uyA)&%ga!-CU|4nyv zW%HI8Im;Y_(G0xx(m!Yt$UZ=TWwuh5_`q5{%zn$z^)ne9h`12Vc^Y zDRcgd)>l4wF7$88JrjOdp_hU(V#@WiYcPwh*c=}H#JWOYuammHNO#EK@p+;CLU!YO zuT}3*Bq6aPb#zK=8nbk9|C0#XGhZ5K8P0;AtEzFj{ZojbUE|sp#S`2nYjDh z+D_vI|Icba_#&^EGsGBwlRAz#V#H_MSb?BDDILb=A3`Q=e7kprss0a73>qbZPMXsX z{lasc?9!8`v^UYkDUn;}eXJeA6lC^^kA+r$yb~hdZq{&s_FLdl7U`4><9tTF$U4eb zjsD;7*Xqrj;K3SRmvJKhasTzrLi8KENUmSciDwGWjSm**Kd5duG!FCMVvtOI^ZV)YMftl%T$H}^XU}@S zNbxIu{HUsd!vNLFQS#%Pn(qDWX9D}%8;VA6uSmQ#P${3bnRI(_aV0M<<8{(+rnA1X zcfXw+@zdEK8WP7P6d%!2-%BAFwQeBrO1o@)syNNzn#j;~Bgy%aV{Dw?qt|}Frs$CE zLWQc{bU-}t_}M1D<$907BahjYtshPTE~?_A3uw*}%)I z6;m|$=3(a^9p-En#wI>JeRTco=PEM8k*n35PV2v4JYd7zNEw~CUuLa)hYaF4wW9R% z;m%;wsnd8QlGSD^7&`jl<-A*nj&RBll<0;^H&+`M*Q0_{? z+wB_to(--2oOTNwmsicIPy7l!ttfD??dBO?u2#gczLAPrk~HDxQV3OSkbL;DL}uJ$Z3o~AOo z`L?iCE6BnswCD$8$>G4a84`aKr>}z(lFV4-FIFws;rYpR}-1hRq2X6A*NWEts zn{AAJJ`!TIsl0GCZsbGGR|!nN_~I?8e8KuOh8#gQyx_&Tbc=mPN|%2Qp4FOA{B>jC zHY4Au&&Is*Hb)Fb{>SbTPqI_t1iD{rXu*P91T z0wt?9&ON0*AC%BFaN=3TiEBpNR6&9(23N_blrx`m`JWP9^~zT-qBu6n1y;@jjoPU^e9gGuc9YXZl{mPzj)$ozm@6JQt=;QvNdGrm_I!kSx5jG z*_nUAq^*&@zMU-({GaPkE05MPwe1rL+bLJsX4S+MpL*Kfm(i`{^CIH2p~K>!Xutse zOSj#p;`~2BQ(^`tgzZ=7UQ)zb_#Coq{wY&}A#XqON_hCrB5?^nzBOl>-IrMqHLGni zxEOOP%6opyWp%4~BOJjq)a+uoZIkD$DQ+oLZNDg;y@(%~7$VN&3+5L#@Zq1XVjg%k z6N)zyIdw9*x!37*-i3D%+_p8$nk-}UOTtx*2}Rp(*{Fe2snSeqD{j}PHrVKSQn6pu z3=4Z>g7vo7a^0_ zVrEyo<$Fb4oeLWzEb~h`k_=aiD%cV_s(LnJwuUNqP*YLa!nteT+`G*;`jS@qUzC5{ z_G2ZkjIKP#9_1UEM6k>A6?dP~>H6RiY|@%8S1JHriqcosEeJ$5d|{ zeBNfYl;(znd85tt^KIjRq&8i}l6l0t_wxbf`7_2Jh{cAFZ<@qZjSIY=BU&ID#hyL0 zzo^3IHfBFe{hNW_h@gRV@6b+gv<~t8u74n%z_OMuu&hygn|pr5A`O?@OTRk5I@B33 zPM`2)c_!OQqf9*fn6NNwfOJTY-C6go+4ZLy?FLuIR%htxEL|^Zk~Isb(Ed!VW%Yed z)HNW}YuwV+w4ZynZ8j%>iY-e^O>R2-J#{fJDC5LM<4lEF*U2BVk{82{2p}ptJgOR3 zKcjAjF0=~s*O*6dO^;IHS9{F(k`^~&?x(w zn$V(SpQWL}M5e#F?NZdLkEy36Fwf?%&;Ryzzn=~~M0yhi%_|0v?{P<067S2q5tCu-w*l%gWS0fV{ z-EZx;d8=yVe$WEDack3BZKOah{{wvtT3`vyxXE*5=aUDqvoe!$Q=S6VS*atiq;_OS zo`RU*LF}j`8V`Fiy+50tID z%Cc`}yh7`Zw@cSNs+G4_^%k2ce8TH5Vqw7`%`DVdncQOD(ON`tiSiP~CC9f~*Sp0w zuD1ntMHh?IKdsKIZxl9R{K)Sg7H*we>X+~(M1Od{Gr0_TJy|{T@p`6G`~;0vJ~C$^r{ zLctye>4Vn|&!&rv8Fd^q{G?#fSb6XhMex30@?g6&I}Y!mCxj!^@BB!xccN@!pm9?M4#i?ee{B}-skg{dC9GJNj64I z*?WzBw122htI%F#^L^!O1U}5_i_1OQzh9wv{K3iRf$x#zRE@%rPQli<=BoVP3{>@& zE?$(!?nlagp}agj@*wKBZEoPJ(F2JG^bd@)Fm~wMY&{8QbUN z*mTAE+_+1DkvEdq%<3;a_7)CejPtX9mNHS(AM$)z>l*T;0CGx0>`I2V$O6TAd3)z7 zKKYL5GTqM+k-3)aGR>xP=Y8nnqedwt8K@>$-l;fxoHmgi$P0X+S!Abaayv3v#=#vj z;(MTBb8@{IdxX@?QMShvq1oI`?foBIA9I$=-Tk?!p>QSRl?b=Q`S?wLJ3IW3$S9A^ zw3{C-_sRUEzWQNZjN{H#$5uOC#jgz$uB?*EiyHb@G9pDXM9w#_eG1b5(epsFt^T>>h}USk-pY!K%N>&<@KZXL6w^thyLrm+3B-N8nwdu@pZKkoB}^B%v? zeE-4?$>dyM1jk02x=HPY$F(;m6=mid(jeK1kc}! z?{Y09o8?|uPj4w{gz#CW(GbYbUq)&z^LJi;EB`pYJ6Bvh^}g!`!PDrvhNBJQCw=E_ zf;^b%(TL0I?A4Pm1A`?rLq2mpjQXZ)rgT~};&t1KLNR056*!UJjnj^QsqZ-3XZ?Ol z$p-yckM;oj^sN3l!|8!LEp6N0(UdlKD4p3nE(mo-)B)Lz$gGyLKkX+J>yffC#yP3= zf->!5B1vfyb@Ge?1!l>jkJK~dki92^n=Y%HT;NFP!5aS#d5)(Gi|lAdJfmMuT0k@~Pa7&% zX~qqTtO}J*M~lY4Dh*M1+plhTfn(z#=f-yt+t$36T#t0$+m8*e9E=t{NOMTOb1;!x zfc;=@&26PoDN|j2NOM!>L(Mbq0;Bt)CR;OZOb&-eh6DvmaowAUwYQ`2O?q{TW?Ch< zlKo_(f(*|O3XVIf3-Rik4;@s0$c@R5l&Hq7v&?laE4<6UeZ!cdvfqdu>Bk{lhyr=eTx@P;*Idu`0R)Sy+7b^}Dy=m~eEgy|PoREY0GR39-}M zO|*9Qd7+xOoL)bE4ZV2xhfv&?UaeWo2s@VT;;}rflrfW>Ha_w^2GckmN|^#Fb52RP zfUl~Go{a0@4fiZ&ck9xybCTt1xL+^Hqa!w3xRh2WH3B_<7(DO9_*LN+JCy-|ig#rP zI*iBPG&#!i6rWD1QaYq^PnHUol55Dk@v5VAic;^$nv81kW$jkUrG0?uesI0IKB_w{ zGN)18D{1@fMq?*$$rTEF7JS_koQr_o_fr?|y_)@1Dvqp8&-zKGrm65F{UkeVz5FrFmnfb|v zglI&qp?KPLJ@iJK>ryCX zLTt|3*GW$C#seJp10KG6Sc3?3Fa4eKi6Wl-1{LwE=`B-=J}#>~t+AuGXcUr-j6Hcb z*-bweTzhkw_I0e6Gd1KN@8?BY+yj^7MiL4l!U%RcU&a z)6Qwz_#~_IVA*kc5b^NBN{Kaf=CUF>zxUQ2gCDccTx5+me$e&YQMt=DWV4w@wkg0b zfkvz5(QWQCYz$RmcU?mLp2Z&GyiOUXtZ`E5QwW(Oonoe?2U(}QNceUF1FDcu< z)@I5h2RBT&JCnD6Nu3q3dg9ogCzkKgRW?T3q4L}_K~67>`s@Ygw|7D*GwBa-S|5m0 zcDYO&v{vOIa$`b*SFpLGL07{(#JEz-%XxTo@vAANIYr-G@@%u0IIe-Gkzzei>?cc2 zo8mZ6qIfpj{)Q*aafc~v>8iC0k8gjar{)e-$@G}Ed-~ys+43vvH3h0MBc3zVWpQaf z5*Qi|Cl8P_UJn=IH=B>hilpv zOVwpvpWi!hlAo-Bmv`f#nHR@IK&18XU1jl8SI`;zR#WG&5p zDdQ-)3!)Pj$xei+pTwOzO%5B1%ggUbB`z@A^#@Q?Zx@;_1Hy#2qO`2aWpC2)qjYao z#!Vada^P_xiCI7CBDIJ7UVFf$=-Zz-n_%1PF*9&_n}EEISe^1XVwP8@QY!D;zJ9U! zGdd^!5?&(oY0E362U8z}_k+ZT=nC*p?ZFNgJDR7qRI?iCQDdvG8T^9QT-7HyKa|TB z#LZ7{eCoFe8+>>yZ1b4QHU2Xs{)D#z{OPM!x|;}>y}54RaMC5D=RowgwNyQ)Yh@cP zPl~V5t3G6kKN){GzW+{8?~$*`4qfkDM;qD`3=L)5gv^_nQ?EtPR=j+l)aE)Dow(8c z=CX-*z=;|`Qj0Pv(Hz6c);gWeH%$Jki#Zq~^*}glOJG_YPISsxxc=cP*)PgF>yr%f|ZwFl;OR~ha^em&hPym7(DX*yL7Yrb_Tuuzw4&)}7 z_K4q1oHMwD7ij4Z(rB4YyNOrGf7;8AU;hN6PMcOtYP0!O<02-t9_A@BT`7H3`LUYn zT&b-4qH~mm)3d?9zo?$YoKhd9mQ1#jqoso|ZhJ&s8ZT^RS^s&K(uS#fhMGN_+NCd0 z|F)=lw!Z^!nEP1!W5$!BSwHWo!uHXI&wgd57EHXNC1=LeZ2}%2A-@@Ra9+1sr1!h} zlF2dShjW#Om`Ft}di#y}Lcu%C(sKP+B~^Q_=@AQnH@cVbo5Rt;cH+0AC`7N$J{}so zn5Ij8oBcMFv=>D8i#)IO=)2n_L}B;zL|>(<=>5x?tk%&v53KB3Ct7LqZR3Vo^FuYC zQ+H00Xk*{8t|@PSe+oyx?l;!q^G{&4rm1nU#~{6;D2%90>9lp(j=W=5PrpdYZ)weR z)^B5y0~Qu}3r=>0rj--YYcu$VH`J0c(PO>YcyUHZ_qbUOa>ZO1)Q z%MxrM`Tkuz&c9IML%|W{<42Txut7n?&X1%`e*etVSZzEgT@r;xI31@ub6z0b6H+u|}EQyDlsT)AIgE-zeB zvPe{P_D#`Ym}p>raoR@$UnZHyWAoc_ty0-`-=fBE1+8(1e)@Z_?7@J*^IFR7Jm;vK zt`Cnu*^Kcu^vyXDUIr?hxJ!}VjkJ`f0uRkQ1kA$j4IS^zO))JKwO1LiPCX+tbm9)b zhsvcB+3&KB7y3M4Jehhs?tyvQU8JdzSCI|%4Yy?5j`HCv8*3{w?y4Q+20|Tf6yNd6 z-0gS6JDJLxi%-`GW|`0EU2+l$HfSrqejHb$J{6Vq%JM*B?p-9kv6n}Y=kuZc7xKR0 z8&+z<&j>NkXmIoewax@`FpX6yqE0MD>%VfnafaOk{9ziWbE5cUnD9vvMt{y1fS%Es zbU&K>QT0{A>H$TKKLwL(PKH{(xo#?RhMC{|nMzY}WXf3TGh^N~uVWe)?7T^xF3zhR zOPvxwQTRn=VNyEY=Qc7%pmO}B(06(RPjZIcj;sfy--}{FN!(m(q3$QhAXLrLA5K=+^d7r z{G)sQyx;FiUfDZUPJ+Bm$XDIGFCTa1$vx9AEx2P}-iUlL_px!2#Wbe=)Z8x*^G*h? z{*s%jYI)}V9h~zY%OAej*5}?#xp?esLQm`U!LQ}lf8JnpwuTI;aTQgr;@t?!)>Fu( z2>9MoV^E~pp=nTLpzY^?2w|&}rgktfw4;fSO0YjQIAPS>rkc#?Xt8boDnWorq`??R zX`k`SD`DYIJ$d*Aj1OIApkuZ@b9ukx8>4aTi>pLS^+DVZB6P36D}E}Dd`DU3BUu1Ildc{aqY&y^ZcUUMO}}>*_Qg1ZKnx z3Vy@yTl|FNF1eg9{N7>Ks3z3tdi-o&V%7`m1qmfHW>P0IxAFKOKf$$V)7s@5(rif7b%*eRX)2~{p|fwG zc<0f;j$J;I%OTaql*PNptg)}6B0V;Bfc|%7-|EblF8;;S)+iL}QPPbemetDQ=MpV5 zw#!K!3#%?U2v_ddrok6O8L5ugSH%SBB4pmYdvDnIdNlznm+iv&fEqVB(S*$%VAP*Q zDIbrBt~fQ`H`_DYu(no!MfeGPQMk?;*BzQF8!$UK>!7xvI@?w{J(6Oh8!q14SIk{* z?pX13(t^PHpFVZQ)}^DpDagpe5B|41d_HK0pQidWpjY?|QpcEhC)Ck~jdH(oe+siP zhsuB)T7LB94VmcPiB1#ZHj8NZ!B$lxfi_;5IZW-On~*Dxp!ugW=uo}W%^YNH4wuFi zG5v811LEq2_xHN|&lmJ%ZM54WknwHq2qL~<+Q-+hC`tK=ho8b_y> z-i3XvFTDEpM^bmux8tFo4ITxRcuZDX+)_90I&fn702PKWto4Q>EhU%Akqbr&CpR0# zQ(yS1UJ9r@B_+n1a_fihp`%a3`0cO9<*Qr@Nz$sP?3rjqu3rpRH}t3=tH>It@f(^~ z&XTgK=N~8QNxwPN$XcQoeu=rQjNq-iQ+H~u&W=nc?p4>L6>nzMrG2N%k8>_m=9c{Y zQ`r`Q7uWO)D`!oorm-w#kc#3x!`aD%;yueHhKw@ zE0|ND$*w)+9I|xiPQ>t#k@5QHn{T)Zjhaly7(bK0&)zg`?h3RQ&0n2vbZy-6WcOG6 z(R*A*O^o>CaUQkG$!D_sHgz3_?l{kH1KKnPn3+$+c!#Wg`@(mNT=MIQ!#Ap5Prj^1 zrRo+32UY$ti%nv@aYoeotn>Az^grj$=MQ8&(dPNdVsJio{zv!0s!AGU+2a&nZtttO z%LhiyC6~-@eUiS_ui<0eA9XYLmib|Ul)2KB z{X5y^V`&ZfmZSLd??!f2<<}V*%z0k>?Q|$!$?P^s+Ss>bk}tnhgA{TRvd|Q~cQGVd zcvT$`;u#5_WLSy^&_4Ow|~`sL5*D{r>( zD^wnLj-3yVBcC$xCYIPb&XYSBWW289nG%*5exlS9QkN2=q%=T-uO(s^(e9-y7~g_L z?TW3f#?%4Bt_&8?28MQ!3v0Z*ocdoE#QZsvpIq7GqappkWG$8CAMgQ!_rf~zRU zp^0MwM3>d|#YOkRLMK#p#?opDPbOiBfalS1BW#tZAvAZ^Rt5|$-HSGR%2)7F1&A^? zOX6f-1(L83UO>-N(dX%oTV5sf=54K_waW=xCM7@UEm6%k2HlAGSv7i{3TJEpn%mud zh_n2z+;J2VKQ_BT?BQ|2HYjG6 zZ?0P+Dx9}hG7-H)+d~7JD;*zD6?w$zc_Ll-kiq1%D1Hss(I>PBP9yM_tW0uE?sQcU zwy+qTa-3D-&IVB>e7XiRq`k9>eYOvwoznGq<_lfd3_{!ND32hjusdGUvSPD#cCow^ zhstCo4zbQ*7M3b9@FS7wZ}1h|73;(dcWf;(rr&kD1GsJsACQSEFWgvfC_(MKII)gK zXzgrH=;&zYCA#dV(uo<7P-q6u5`-QX~yJt8w!fV31 z_6J*CF&MM6@u4b`FdHR=Lb#1QZNx?7l)r5S!60lH!iF_jYaK* zt)p3IoWIuTn=3ZvFR)rhMOKu%IWA8MAtaFafo;~bfbM>9jc-KlY!ddbqvd}Kqq%;2 z^GG`z68kE2O6K$(YL`wMCH7LxWAt<#@j1>cna%4+|1I4( zE-&#`f*94hA=!Nv%2|n5dqe#*ieQm5S~5TH|*#|+)^2O4{`yWKcmA;jh_~-BgnFOUO`M@gpJlc=YG3wIwT+;C}iYr z-rAPFene!|Q?Q`GKW>C;&-H|W_@S>=CcWc-KBgtMD~PL>(S1B>sCM07UcDe zB08O&tcl}W6Za(?@+_HdYT5eqKlr11q2NSONZo+c!etvo5VeokgFlZh1e|aVuKO(& zdwE4Hh~B5a(E43}WKKF}F?WJi?b{8lRW0~c-5ZS?#f|u~y69X0qU$3~|JXHOw&4$Y>eH|AN8y6wiK6g2ycEl&72Y6e zA2EeLG8Yt2IEU4(N@-uR8LMHpF>P^YkTbQ&SJ>h}t(Nr@Hh@~!PM zf0#YoPoLC!TCJFX-JGrSmW#Ha`N1PNbe6hDbz*Gr*};k&w?3*E?vDQ*TasDar~NDZ z{koQg%q6}QX{OB=Z2U&INv}*-zw`WYe6#q-wbQBFqgGrQsyHgck*=8esv8n{8UdaX zWf}qAXV@z0F8yzqn2NPZ8r|3$-?F+)^lb`KS0Z-%d1XZs{5*erS)3g^N4Q&qyw1}_ zrz256%4udU#3=Ck240>?pgSNYWP)+MVkrMsQuB?VD4%}WKMofhj~7MNl}RnIt(*(; z_7Ri)V|_vKxN~G(j#Mn$%7q{%A%&o)8J#%yq;Z$RV4VzL)A&2j(ZzwsDM zHqPcGk2P2(eXN2cDjg4#zG?5vA+ZvD%H zO$iqIcA^QQ3^hq`LXD)2`8{Ih&N9?xrgC*2@2vG|ILW|;wC&nj0v+T z(X+xaX*fy|_1UYwy1y-XJC>J{*q>p&W703}=7;}tn_%@`5g+E@%vBLMraCIz!1c#Y zdfb4;o+F`;VW57>;@$>dG5VLMAB(}-)r49G@%ky_dl){K*k8VWX6MnJtvr9K-oGjg zoHVT%_XwohSnd<2E(i>ms^ENari0Gd_18TWnjYjSmlf|!lnwjuucc+e{x))3E}IN1 z=HUwsJC_rp7zP@q9PT;t6-WIl^II@nJD1?iAl@)#eNU0kCGuB}U##KUg^N!c#$(bK ztTNAI|L~8WCb%bODOou3(PAi~qwjoXduXNHt9@4bl&JoOih2WUxqETwouMIa;vt70 zPQjMF+PS9q@ZZ36O*MrL7mJBU1$@OZzhe9r4D5Ikwi(3hrk>pk;B$%o72+3bu*R7% z$xv2T7iQyZ+jI?I!Zq$7^k?nYOZ-fJF|qNn1QqU)v8(l26;Az)j@+`%r4B{z7mOcV zZJ17-w&~T59%SrYTp^6B`-S8o`4gTp475xs+;ikF4*!MsV|lU0n;^{~-ZCX~Pm$jx z?ANNF_KO!ZTe)fOuGWR$mrY$)ES+9t4G1wP#5zv<11FlC{gBUC`>6VpgU%bm&d4lU zvs2(2&+OP$QD?+WE(JD*>6SJf|M9GdqEe#U|Jrel#igQ#bkDT8XP0TV7ptmX4J<{N zA3!+sFU*R!c(t$^jEg1QNN7G!JSZA%Q=r&wDL3vU;vOk`dv+vwsH&=hRoa|(OPSX2 zqwKZX9L#U!;~FKe1-*BEN3+t&qm)$UlAD({#4$$AMz(cHE6eS(1&KCdZo53W69M(hYXIGNl`Zw_4ImAmvB^e`ev&|pgJ?GI4wdno|t`B;@#pEx?=P5$RUU2A>vmFum zFvc|(VAPxd$$MUqcPFS_&8A@Qa^AL}8CEjUMtEA4k;pQMI%|+?kbCow(y@~Hz!LL& zruTqur?UHKi~9a`W2B3H=z0sk27fQm=j}k}I*$EAzxnFd=JV)x-R9o?=KtJss2dQ3 z9SPrP*TDR9XMH%hT0g49oF(ty599veS^UMWPrSvk&#%*uq&4%NnvhY~{}10tM zN-UoUT?`(76m^ID!`-=j*XYH3hI9rf(SKT${IQ7o1?MifBe(FsaKm-8_WKXEtN%nl z{BJMT|K-L1cq6Um$QoHq+ z*^0N*nW+1(}oo>6pal#KMBjxkZ*UEIut}=0oSi zeCBH2xc!Xn(`uBb|2Q5}V;&1GYrtg;eECEoiSy4zhoJ=xi;7B4v_Q+sP5tw%*_4i5 zHgr@5Tc54NFzhs2Z;^#1VNBO~8`<9HxG6lTlQydv$m@Ua@kGKndfc|*w#0Mkg^cmA z!%ZtPW1MKE(<{gNY#g~Z^mW4&84b6hzXb+#N6oWlD|##Mogsn7>x@6__iIG8j48L& zna%U%phia9zZ}^5ir-opdSSKoS=($&66L`8Ct-b3E^lx=#3g&20^gGz7|@I6!5f7u z&Qyodtr^zdmM}q;hiYm`B-1~YXhk#AKoZ(i?EYOqebc`Qka=`b`u(LmMRk*s8&|Nb zQc&1(%ZU@pX#27&_R?)T^Xm?HeBiy zIoc%#op$r7@uZf4Dv**_-Z?K4q0HKiFw|;Z@gQi5nhh+3%4}5-&aqxOfzqK$PS@geAACmCbTuDXh>*d0 z5TeBeQy~!+vkpB#1de~xe4gp`>g!&sS>@_*5fQ}4i1+;eHQW066O=I*J8Hey(?etiic=9!%7)7<1-e^W?fKA2-Ih>MD0bb1- z5@{V0qrpDf!01-m$5oQ&;MymdN77!^@@XX+7;@H|aDHizy`0kR*-C)0hkW-hb_Sx}5v%#RGEi$-{!>+(21 z8KHwI`3C%oXW%TN6}X9kqDrNdL7_tXu~}^Z?dS~4UK$rUIsvJ*%`a@reBZV*O~M{E zctbE5MC^O?tYi$N)jUQQV;_fsRmPOG0+n(6!gkE}?P9lZUm3NiS(vjxAVCs~qo^V> zD57XTjw@|U4p=Hp(D)V8hKc|um7xYN3$cTM4tLm}>vTRnAvcd1?zBJG1qsDFcMW_7 z$wF0?K~de3^N=+U;i=!{VL;t91LSDAh0FjeG)rh-h+=Ld+X;uuwWxnE^QI~SD<~CU z=Prn}E{LsSA61voHi_zTWHskNNqwtgwz7i4U<(`|G#a|Kk2;g$ARVlmmTw41ro&gX zsjtNvJ}U<@1+}R~SV%H&!7{B@L;_bxo^f(!e(Ox~jLJ>eGcB`{m|f3I*~d+hj0m5A zjA(fri@j5bP>*tnNtwy3v??e6#^RTQvdfhi>c-wolsGqMuRBMc<2FMm6}5XT0q*x| zQxC=(x{EJfhzSLmVznU>xB-^|!%i9PehFPc9T1WaBJjbZvyx-G2d~)2t?V8=3wsZp zNfD1BdGB|ZNBge#a$xT@mD9FMVBC<(MVS;ObRY3|nx=KGv9k=<|SjasODMYO( z#37VmSgWMnk)b&H-GeSbuXV$tl%l+p9#4?K&n2#Kd2)Aq@IdE+ z#9)}KWY`bNb9>cd8A5`?qq@`+afb0wjW}mfxE=-8&SA=C=<+2|<>XD;Jwe+!h8Yt0 zjE#e<9sBeodK5jZ*J*=ni2aM#(4mS8nEB^~NlM;pMb9NUfd;ZcdKm&$L^n`dK*yQb&wYB524_1@w_eh~HXedO_fV?5Z%BN$@G0LUIfi;Psmx7A4xrA zQn7SV0jTFP#$2}IKj^&S6F!(s&_$P3+Ul-nEq1%1AfEj2frdZNDZjX8L0rsOt zKR5xce#8^V{p2A?CuHv-DK}v(p zMcpT4wQ7Q8M-NS@pt2}yumG@jZm}|T2Dp@y6Lg^%rYdgj+{?sya`AQogPtN<(X&F+ zSm5?_5Ka&W_X;vpYXHq^VytB)4b}yUtXsz<1}IeZ6#KHr^yP?K!aB8U2dkOKGyF@$ zfiXeMjvFwKZn2BP0PC^(9(T$Wj)6L8mY#?yy*tSERiGK1BW@k|Cm9lbEH^GALyPb+B7C87pvQKqm~5AZO`NIVquv5x|d- zQLaKFYm+z?H#`XDDkVX;L|q-TBqD)m!Gr@>L0JwE5y~FO&j9@CeiSy75DL-li8#=- zlDrN3^c941z$1=putyAqQBYaK3Bfd0EaBXyCsYS!c+f#1 z|Hy5>?7?}gPU6atum^Z`mS!Z*6gW>znyPJuVh@vaZA@}^zeB2-bWlS$H|WACh?Tby zbl@4sE$HNC`e@6Si0<-RQwUHbP_p>VGJyWfx|aP+Jav+3m}C@I32pfmNafj}Fqnnj z-q?oqhCL77)Ch#){K#T=ah>0(s0M3%3v(p8i zx=INhhU@0lnISOjzz>6<5a1vlJVy%RBKh3Ef;dDyqV*C28>}0JHZ|ewNWw6$K?1PS7W-e~#|Q-?v`? zsC^;i`6CwnrN2@r0SCx z0%AzI{UwwGQ9(WiF=0@r^yx zZnq%VhbtnQ2MmMkx!_?#pzb$%CtBdnZNu6hlUiWh*^BN!fly@?9{Rfbsyb*;pkweO zbV#8GBh|mocmflZy)@Vb>GF0weK$mcnOj+6|o?@;F{ZQU$8(xKlY@w(650QA>@a{qXuSq)hp4`NXYpcv{#?Tf5u+cyBU64n8%WDztX2p<1c^9iw_ zVeKXmoUi9gUQGf<4UssKZ#wBf-nY!aEo(TiOfr>Dtb&{n$4cJ`7&sLvLm&nYTB-00 zo>pkq+PQ_`hQ_}C!C5^dwn)-`xAr>Wf&xx`>H)1nz$`@=4vZM5*r49iV1foBSlHx6 zx)f3kq|)`XrtQW!4S)jVEp>zm$_wBW6rHUUh!)WH(1=kRtWsjSZo-WIpS&mR*3aKo zcJZ%G&YjdiHcSfLgMdk552fL&>u3^8^&BF!2zLiOEOW=% zj&?Ye!?L2(g%&gr48j#A^a-|PJgeZUO86;eoZt*#_VgKd_nSOcm|vvCmEOhZq)Opb z#Ud07OiuR@euH}Vb}7mWIHL?gyJHY50o{$b^_X-4?N|V`bU-P{s{<+k2qHa6!bOPO zz+$oieSv!_77SlY)R3Kkz(RmP`UwNVBdA3}fbbW$fsTYm+}+a!bpQ_Hzr#;{1oOc& zuz*4H0OSB1JRf+O1Z5B*2TP#6!>!AQ-6#eD>8)~0hUmDo6A?mMnBmm!q4JShusv7> zoCH$n3CNULI5++w130jFa`k}D2X+L22@?WRe^NfeDEJC-z>G5Ad15vJ=Lts@@I6rU zU!m@j22LeWrBqS^q|(6+rC&v2yp(?DyF<3sU{ozMj)LTcUfxY!IA&dn?(P&d@T{8Z z*5;O|?Ir=v0`P(n0<{k11%QHoj%tBP>XaT5>Z`i}1BAi_Dm*y#0AKreCE!E$aA1ga z_cegD|9CnL+8aUsb5Y&EfVyKHfqTV2+Jd%0(4D9AFKI~HDJ6rZ%pErj)S$M!W=K8) z{plWf04lF47b?I4%wxB(ySA#rn*{)yaEil(7|t0uY<~eDY^mBmiMX2z)_~&?0LLp) zpF%hTHVQ*26eP4gZ9Z8@6!F?K|nXrf{4a^Cle7y)Fx-CPd!>Ur2!n)-IJ-hnpCX1EtXE zl}8vbRX{nt+tEll2{#c^KEacAM-to@p&&zj(TWp{KM<=XJv}qImmVE}iCe*&y4{Qg zOSRp~+wE_#Q1^1Mr36vNgTWC>mEE-+1oR|V!12~|pu~Xs_*)lHPB7huWJ09{ITwfb zOu!KU;>=P^k{bMfIkGU-t-+aQ({uj$Na^JOh^_wzl`;So1z@1wMaT9p*oOBYY?EYy z6=VQp(ExM*T*R>}xn}}O*T@C~E8y1ON!)si#Gh;SlK_(d@#lVoBE;~*6d}C+b8(P0 zn#8sDZvKteTg3+dEMZoy70q`*@(}pOPya>+*a{zdurBE!~!apjKxHQm?)P=To7ywxw$A6b0jSdLn zVX*CoUMDg0ZP2*EmSpJTE;A>vp*}AvB50liC23DVsDo|FBhoC(YQkQrbA~)~` z4rSG_$GGROp{)k{;QP@rx1VBQLd-@=L6{sx!=BySc~s%xx`LyC zUk2L-joG^%hxz4RLxbWDe{w(w!|sRHf`qt$BeO6OQi#~C2$FljfKmz#kYJ$3ED^p# z@8-wOLWG=jHsvHVV8L?!t^Pg!RsX;rq^yLAG5nLnr?iJ*@JfR};S_B^ty8#D$0 z(uA48-&%t00zrWY_U`czRfpvOioZ94z_Zjpo`vKb#*&kO8uyhjydS~?Xgj_qg|zsC zQ!|;S={Qh`)Cq-=sW_ps)?Pf05mC=k#l2~bZ! zVE&#Dp+TSI92IDJ1DOlPLwMHMGZ9$UT8o324fuG^Wb~LOM_Ydmx~`i_&Un0O3#LFx0yX zhxJJ?EBphqICd~_g4J3-8tmuaV!E11FuTe`T62>gCBf{ZkO71<5~NMV9OmyAxA%mi z)&X|!9kB<`Bq`;HDVR=!Du8zk@YgMr72q8pgBQ?XEIr|_V*$1u(9jQIXlB$d_ub-$ z77h4SKusXxkIwW2+}D{P2Cv<={@|h8vIu>^Mo*tvt)B!S3M26D+av_us@Z*e5ng_* zDH)J>Hi<|(qpaY!S9XgFVtkN&|FEEzMMf~#kmxHYHZu=v(3h*W;gQiE6wh#UL=AF-Bwml?qw1DSG(&$(tdeDZUAA()7r@o%~1HlKPcdJjOz8 z83+PQ4F(cG;V1vuasXZ7EeGD#;ZQn>thPW&3CJqIk`@?CkYIEG9CWq|NQQ3ij;>M-_Q5F?>_dQ{cry;F4ttvF-M$p zjB^gJrBuiL@DfxsSdH8ay@tzc)Bh)2LfIqik|Qz zTLriX0TY93D2HhZykCGR4F=HANZ<_m2cW_A{{_(Ck9EUxW$=kStT2OidxMCObHE-# zpbyOnlsy1_0+l`e%m6)R2{au5MG-*5fsywKN?r@}B7jlDf0eg!BkzSJkjQ|(zH{!S z&4u@mhM>#IbC`~R8&x0)0Zjnhn&0>wtU$Uh24TJp9a#`;tl!)nl|on#bBIJpBVdNR z4|f6bcQ>B>H||z|GPfT}QrMUGl)x0?^z;_Yms>7tVf^t5h{XIZW&kkVkQW1ZD*r)4 zx7`6%3CpqP_n!h90Ph>?=O9uV_Nf-aDr?{!1VzD1A@&QIU0rpv&>jcIHU+ky+Cq&m?6VMPu1Jyeg40JzT!jk5j$1Cd~ zKmB($dnl(Klz>zMu-h>FKXdnka%hkn12|#Ozd=1f1Oteh&`x1q1WEA^7(xII?jW`h za#QH9;GNp#um7i!fIpeNs0Yokj0oa*6|@<^n1D;-t*?k4K8V~vNVt0qK48iwdgFJ{ zv^@$pv_0%6fzZEB$j*SVpt!(w7+7FogZK)gUj_b?Z2|7KVWz)kMmyD#4xt;X-|g4b zC}=03P6P8um^QAX9S%I?p=eiua?}5ac2EJi0DW+yfS)%=bOGeXzaZNKgdW6XfPQz) zWL)d&I{d)9M_?%6z7WDewz)YsoWQCb_(@pGkqRc2Fqef=<0??4Flrhm8|*3p$eRJ) z`uZWnL;|1%D^)@2sVHIO%>5tPzz~JW2Jw>DdV^h~Ue`S^wL&TO|DYO(>Va0cVOgNs zqZ7P?0EwXI(7o>GYk^=??6uxNWPy}X02KJpZQ6-6$PGYy+=u0=H$KLG&4Yr%T%!kQ z`J1#E+Ai26b?x0dCqSMK(Ms1Iea$(I1Dw<)GFX^{*!GX?D}ZNSYX`!%Na!4&Q|y2$ zAjmlmRc=D%Iz5C;RpoqrhJtHVv(kSWB}5_axTPy0g8j2p#24VGynwC?i1EGr^#sCNSn_=H35L8JE?hth!wqEbo&?ZCiOC6ctvHt0 z|DOo{?|J%7i}2GB?AVG zvl&fB`Jl}kV zCES01JQ2EW1j`q@2-PM_h>V^E;u9tpBP*jrz~d9(;GY0umj7!Pn}-&Vy2}vDYCaIYux+^g*GNzQ+elj|FtLvRd3Ju|rYEi^*J_Ce!T}5f znYyD3AmTv(%T_Cz9lJKBLlfw%VEi3FZM=T^SM{K;I5?}o^tju2GyAjS6&*Ote;n2S zK|&#WH1EiV?Z2+{#%1QlTYx+XRFIR+Ou3O=VDyhCf*5f86du47-<2s-E8`aJqm_GrIa)2Z{^Qw3zv|Q7sD4u-FiaCH8wScz zgT@olp;>_Tu~7#OD()x%d~958Y=KF(m|+XBa)Y1trtM4IB(B3d3Pi2lD}jYOF3!h? zUygl&4!S;+3<&dpMd#wS`cKa-VLMtmM*?e+@&s$=cOVM*uY9UU20vcK zfiphoXXXCR+FHt`9tr#S&Be>o7Y1X%)*(f0e}M^^0rO#S(zkW6fIhv@xL(8gE;wmJ zFc?=Ccfh#9N?n5kaT$_v`5Nc8O4+#+Res4N0Kv0wIdqL2cYt8pg5e{mZ@}9CPaXo1 zV;iVme?6$F9PM6u0IH4Z#};6TDbO1|jseiNgS>FL6M@SWj8wp1K@(ql6d34HfIzDN z)c^bvaQP_#@Y)jqzYT(ng@@-}yI6w^?y8YF_Ivi}^aQ8HDQi09_oK$Czu2-vrUgc{B_n8 zk0%EDQXX&;fQO?L_3;_cFG#Dhg-%!3dixvgPze3YHV^*ruw;v!zTN(oEYmLDS zabdm!@KYL~mz)J$T)3|SypR74IKFkBx&Uwov`uyYnKN+0fcBK7{Ct2 zYycn}Kn@xS@m&Z^z?}v<+y-JlED?gx|FX~ZLD0Slcn>INwi;|L;GP^fnIW-G-kikE zO1R?Xp*%es*^k>RJ-*SB^IyBHIC()xbaeJFy$EucfWknU+4yTrXN`aS>RL(v!?U;( zS8)5&>|3QZ;GqQh%LItpFjF;w$1db!|8kvw8S>h7z)S`@#UT`XunhP(WYj9|e`PWf zuuSIf!ye%91kDjx|tUtCxQj-FNmkEdx;-imK6x z#H-x_xQACZM@YeT!FDLcAqR7lk&%&=E?fDJ#hI z%d93~%6?1HB7RrFizT}twZ$PPELb{`)lv83_^ld`y)fl>S*~XMiuVa6;X){IugZyo zDKl|*b2$rTyKVYj%y$!U@_cwILERG0x%$WLkLo8liF8S=+-X^igh!ioT`i&}R#>Zq zyoeOD$RoE}Fk6i6`VP}0MB@nJ>o-L3S4rLq^zn$vtWfTv&oi&ViOo7XaOlL?h;7rK zJQjcK81np^Vg4(*KbA^JUe6Wmi2a;HJ`M**TXn9w>Raw@53z{}=I+}4`m!+h@&$Ff zyH1$c{caYq5V@+jKN9O#9a<6Q2MJP3LKX3$x-_b9Ti*Aq^x=>Sx`uJN0Nd`*hxNfVgZ!UbY2@6Albg(;?OT1g`6ZiWWD-N8Dd3^I}58#6H zW7~RgKi4odPT=sPGY7hl;WahsNBmHEuVqa6mXLWT)ZqM^>eQH~F{f9e!$DpfTl%Y< zRV|X%&Zcr#MbBmpj{8HXM~b0LILlZgZw&z^k+~p-#z^ybC(z6IhmMOWzq@?PwM+0U2bS)EhDOCx_e*Us8F(0 zxlzhz#_A%HGmjUzj2LkV4ES{&a7k@(pFS?Jhie^(Z$sg+^-)xkbW6|Nr9%CH=(}0I zmdj*Ypm5PI%dMu%=ZiFzHZ8G5_v3Sq!KyNT{RdA6qR*>XR_eOlVN;*oUUkTiBco5A zU``ivXHD%&v$A?cJh`VmFU0<8jk8Vl0t>F>d%n}e!rABKa3^e&O5Wc`x3yb#>gk-a zXjUmm)K5_S*~^N*K3mARycHEHBJ`TPJuOUzerQP)D@rq@^tm{7Z^Oa5lA=WOmWhs3kd!%91p;EEtvR!Qc5GPDe;gxt>3oF;`%EJD*-sLK%Xt_djm&bClNr1R2p}p9# zurtyjxASb^C)HQEWV3I{dxf)HzDi$}{W-}zd8$jjFP@waN*s=C%V7dF82iqZQ)EA9o?L$X6eo%^ zFzXjaOq)u~DXUHM)Vl9t^?{%Uzxns!#4A;Xhz~S-F*|Uz(&Mv{A&iDq8?U1G<8{>d z+Lp9RElW@iU6?LymTK0QI`*FFFHX2}D?7{>EmBva$WRwCH(Bi$)<Mn$TDMD&LwiA@5xsrFq*VKPp3ZrLh3==B+1V@z?FbVNs*WT0rNFiC|@~&Ap(~e zjc@K^_@~>H!?tBP25m0bUWGrbH4a{N3W$ZEX#^v#Y`A?0iLv5r{na2)Z^vIE7;1cW z5^^Gs(T<(5nG%v`aH>#J_)Z8@po;X%?>PB}fl75D3yxiQ7VUbHsV}7$?J;4r2)EFm zPolpd&mcG0RqsYq>!dL|pqgOrTni*cAKlMHSM}>BCUJx({W5wNl@E#E@yYLi=j}|- z5nW9JS_u4t4VHvZh?sf5S=>@)ZLDaIc*1fON-+4?^+%U^pU%eF%rIK$WN^tu7jXmX zbSR|(ad*p^4Hjip2VB06IqB{7q;n%3at`6L>kGRy$>ZYgyDBMX)^kx?Q+A%}+VILE zkEIRX*wAdc$-BR7KvYI?bE7h#zh%)Qj9vEpp1tZ1?MDcb68Yn*=*%x|Q(0>#eySL( z@6NAvv#WSu3$vmUwN{t8QSed{KiqgNY%DN%`>S@eZyMiA1^CL~ml9!Y>VJ%fhPnnV zFfNF)X1XS{lH26mn|aGoFx^vL6dX?N{WeCm|162}W9qS#8=FW?4)p_`2!i>SLWk-1 zMkezg7q1%nWf@$N@r>yg$P^b$JxAA~;BNDXBOA_)Ps%Xjg>Ob4qD!849l6y}j1fHQ z{<5|2Dg0g`$;Kf^SHhcT3C8Wo($4;Laao!ECBvfdYZR#wE5J}${gIaqs=wbAay*C* zQ?+}=6Q5tLP>eP_it?_iL94;Oe_^A}LQWt&X>y6}p>&u!ircV7c#`}#CeF$(Ikzne z1!tzpzSZ~oZ5MAXoPM26^NEf~yZy;OvM`x+Rj$69$epZ z(aQRZpUklYY$57|He!3yqUPPp%nJS*hfDGt3(iyyb91Lm&L=j_9|)V0bpwkdUy$Wf zshe#t)%K^cVOPaqdvKDfn{&5|dzRcg*4|aaS%cHX^g~nG9QSYVD9WrO9{f0?g?;ru zzGN>vEfK*NcnhTi-2Vz-OiBEEq5xEVgAlBB&Bme?rQlWm zEMxnSJu)w+V=0?Wy$>h?t}G!Rci&zLi}<0eR1>_VkzXar;=ygoi=t0gCgy|7Gh4Tx@$hO}R@)Zz;*?sTloz?0BsWo~GnJcFF|g~s zznk*gf6Z4wlSQ{&^3f)IwEZK#$n=n+fjvpS1qW|e5f=a1Ex8X5lwYg6=X!qQE>Lh}7qCEi->(g_AKP~RDTNm^aXMlH3k|v?1)*NM>7B>+6f?RU^pg+<8ZK zhPS(r@5)LWZF<4|9I|Y1V=v=>>KVSZl^jEd$D+#wA!j1atswdV@{~4QX;;lX1TEEzuw{&1JIYt?+`&}|yBZS9v zHo5t|eSM~%J6}!A5xafpbk3%3k~?j*&UCf-czT`ta&9E@VyX;f4CgqvIf^)-RhTj;9f% zo2pZ$YB515XWvi1_q{kCHK>|V`NTPPrFC|dltU7f8?#jz`~9-2fn9Z?M?oO=aIU{V zPhmZvJ1wX|F2=ylT8P`U6h%_Hb%l`}_nS&F(bKr-j~gMnRmjwd6_ulPR|nnd)EoU| zXZcqt+#SyQ&KEO|7Zls1+sK9Ln~CpgHu+As%*;PkSK^ITR<4>{EmiB+7(KCTxcIXg z23MfgP;IefQd!}rqez9kI&Hlzez4c8g{vE*ve(UYVR3NzDfsX=%GrhKI5*DZV7+n6 z!YO{;pVNiZP3%!lzs2__?OC?w6Wq>;Gx5u-CbrYDlP>Q~-%a+fvcI3NKGt+$+uYu_ zSz1`p(YF0^(J=I-_R=a+x!71K0(hg8O!y$d+vp*Ai*tpUBm04mWb(2hj43&_WPjS2 zGAIqMqMlQ~?#KxXIr4ti>n|kmv%RA0LFI)8S6GJVVcP7VP_ar5abG|n1LMh_eBdYd=Ww#26 z6}Zj*5{+l-$oI`%9y7|aQi@I_>UK8$pV*=cHJK!$P1&z1N|s=R zR2!>}jYI`Qmk2pzA=9G82l&JSv!pI$T89>qDo9x!*6lJ>wBeXH36*QB_Kb zygQj%f_iynjXud;!f#q4cJjOYNuZ6Si!F(# zdeOKzXz>0ktidn&2zb2s@02#@gs^zw2+?TNzG?h%6nitIN6!*`?uJyZgJe1X?=e(E z&uM$;7-@z>XnU3{L*SmE!P608Hr1Bo5C!7jM?=D)eoRvq8vvWgs1s*}?`8~7gdDLs z675%wMmyKf$~|mCAHYCq=B?ZbC(PA--l@dH;yllV`0^ zKqfl!hPIGuSjCd|R??Fu#C59=xI6WA^?rp9Bs8!3gcIP!{18*3n`^6d zaHBNj-w}Sw#X?Z`$7zriDrMJ3$2_}qh*75Zj5eMj=yx-eH6^xg;wZJS_t29QG0+z|Eo>OWLe(l64VEMg)(Wt%jsO&DWb@q7D;6rtPqJjbu?QPHfK9d%!?lX&PC za+jfp-Ux5959&fBg5haIhe>&YxzRToq(ho=y$mKP{#5YSeYOFzsBl3IEg~Npt#hG= zL&t*s?n*3Q9HNxz-J?IgKn-vcWIslE@dzLXHw_9ytW-o{y`{y+~s;}~g*{Qk3mLX@rObt8Pf4` zlC^~~+i=!6ijXYtT|)eKvu`+2^bxNxK8O!1C{RWT?dlM~h4~CyBU*_u7lfPWN~12k z<<(>wgIAgP5jR%WSfzMB;Z!r@Qn}}l2}U-#9H}pZ zCW*91^utlIQ4*fKxX?iyZZsRESyoOI1H^@}>D)V+w^JWFaiJR~5ruA*h^5JsGYB#l z+@^a#w!ioR5YQeJa0U>NOgc9Vi+rCSt@j59Z9s}o+wZn;w3sfAlbEl1`pe`dnhD+{ zz8b8Fktq{HL=3^od)9s_Liv(i+~1~}Wll)d(f2lbxLaSJqYv-{5B>NLIjnW1((LF^ z6DZ8ZLsn&!$kJ(@i5ADBHGSXXkfit!Sc#=)C6Jo)#gL-58nN=aTP@&{U!XI#jo#xZ zb=;m32+{9Nu+O;P&Cd{{PoA?RjIMd5lY%3$z#hDwcx{FLK8~RzPkn+IvbLovs)vuB{9OZkh2eF%A} z*NUOFlzYw(4Er>aR77agWTmj5iX)#^DeEzMybnj}7#xj3lE1?kDjxGzM^Yr@5AhA&{Xr z5!G9azz^g^SxG@LTSiaHNVXw(SBe1lS2=owFuHCuh7?J2sSNNkGi6Nl6dYRT?5_s; zYDSWZU+<^zGf0*iAkw!Q4V9ARioX^O7y7J4WM1Bxbj*PNqpxQ;$?VyqH$Dd5D-ud1 z(*nX7u4^e`Y4@Fo(Nb`PRYE<;*wK_w?sREnB0m>mys3UOq=o zL2BVIM(-ILtXi7YgZ6qY;AD z5?~($bE}4ct)Ap)YVzUQ8KEXrXxR(Wpi^Z%6g&pdnD7^WbE#44frLL!jB=ZtcNM)~ zIA^+X;o7*kcP!>kus#8gqX5w@T^^zVq27npjNtF#LOY-yg>4TR@VonZMv8Xu$|=k5 z1z>ijD6Ua@5Thp}nuWu616Gss#~EztaC}48G8sLDi#3yqRT%M$_*IC&+=$XcHG*bR za)koAruUfWwUFg>^+`S`Rs||YD7yuQ>qt>rV>O3(w;6@!@He9o`h56`PW9V%CRwFN=Dv;Z0=5M(;z(E+%a%c%wGXg<}Jz6Ka#s_3r5 z{Mu8yHC^}g1xsU+s752)gvC~nl>5Vpe~hkvy;eq2JKIYB6JccbZm-6|%F3wgOR0>`&QqAidLUfXbcW`tP z6AmKjkI%tAJM}>)-q|~IW)v~=@N5OV+k_NNzb9Ve$aUO+c-maA%& z^>CX#Dl%sReV+q8A!31ogPN4$t<)E^=X5+|X&rGAPklZ443dQS?a)^~_3;1b#uCF2 z*X(<5fvM($9WH5QZ001DEA|+HoUVJwOH1<}E*aebhJ>y^@Mhf|6&lngp;s-@QWo%n z3X(KAU*QqFaH7Wz-HVHEJ;I58h$j#g% zK7AE7_tVZ0@8S4L26QS`*|dmf2?&wTq~H}tC07$6UANLZ^;HG*Yo_2NW{?XUzCzCJ zJ)`(~{+=|lO#DyTrHJeushVf`z*ao$GP<8snzPD!pgif17D2I)PkgZm*qX91jkoDH zf{3~-J~{>xZGxd;n=$1h^f}`-OA2X3=0i@SIX#N=3iohXGK}){0Sa`$9{S2L=1)bx z^RL<1Q%GYdSyxljg*%AJQ(*W`3>bvN^WwMCKkuyyNYy0xgrxCKz?a}qFo#;&)ML~v zoi{n_QGk5(OAN`lI75Ry3vn+mpPg}cR!n>W<@hx}Sx@z%VzltoEIuD(V30J&&=0W* z99$A#b5d}g+;=i*_Yo3Fzan_1Ffl0W0#39m#z#+Hab|;WNou7%wpd4u`-xvm&8WoG zJCy&ACjnw)HrrOZZ=UR;AS~$aS!M`CV>q5V&?u+A$RpclaLuNJ$MMfo@k<*@B9Q`5 z3>tklf8pZWg%460?VcXg_6*(2=pxdfDY1BsMw2BBrXY`dqBHOv1q6>o9-bw4#EaVv z`1oj@Q^m20d(L8fmzfJ#RPj^@6Cg&Ko~ybjkbjb(*5~f2({F_qYLRHnEr;(H8K3pg z)H;QLWwuNsr7CC=Im37OkOMHREyJCNXBz(Mw%Tqg_+#{St!YyMqwcx{ z^k|QHQz zcHa{4b?vi@Q4_}p2h{n0Od2Z1$uC0!5RXkdMy~)a?!TFik-W;SaDeF`HveCl4wnCB zI?jad3Av?o?}hcY{?;Ke*Aw3pl=<3=D-p|``x zj$H3_*v?&hUdw%Ma~`Fei5NRKXGj0Xj*YXvs+!G&OYeAnVd;|AvFOU8l6$I9;;8To zib8ukUq$_Egz4>q`8k?z)#|2r_jSFnzfiFr+1gHuSB#k^Y?XeIiC+A=`IB_=a-n^5 zp}5bcVKrpS+3C;b>TYcB<>f$zUBk4ogt}jvyWd$a;{Kebi(e`4ZXq+aI`UD& z*d=#PF8O>;#@Xg_5%<>iyGW*expBRVU44bp+`~5A!Ndlc7=usN9bCry)G)3irV8Xb z;-e|eJ1tbcU`tF+#x}WljTD*!T*sC1pI)=LtL2MRr=2z30g0LCYIRfG@ivoRHm2w1 z|5%we6cw75OkeKzHrk9(?0i4^-Y)Z^%HeRYE4*fUf+|G&8;g!Dv-{|P->Ba@uZ)oM zxL#tA9OFqM_1=pM=Z34-SANB>pHB#K6yTNk0r$=m&gS$*LiO@4{`avnFBWXarwtP} zZJ6D^T~r<}mtBO_l@goW-#*S9x~w-)pml!7WMeya#qQWKY1d;DjX4>ybYgm+Nsjon zr7Wv4ak~qqapK!NMJ3@G@9MphUmqr;a*{3xv#AYKCDX&o5<3QZe1>(LKIUqfO;Q6} zjOsnEQLn7b46?y0p6xNVsdS!*uhsa(8tostzS?rJfO6JvDDP}Nut<0HrFUpR%aUjE z!=C2x{LwlAyUB)KrFxexN9WUu@$HRBeV2x+*=6*|=Y{Lkt^NISgdyF#EVwA>xrKW_ zdvm)Yi8o29L?#mDIy-;U2~QwSaH(RHap$_3e`3XL{Vp{uy;MbE=ps-2wo{iOF5up6 z{M3RKZu37}A*)NO*4*Dv4Z@()i0%T2SA=c!@ z$AcD{{^4fer{hrmj!}~T*E~mAg`{5g8CYJ*A&r@dp_Cn8g}&lvKO7BHp2yL8+4_0+ z&h77?u+tK)Sz+_2$cXqnXEd>v(D+Ms`0i`I2H6uWh&?I4$4T2mKaB*C9okQS^O%*yQB<0XBZle`M?nTFCHW5fdy`|Ql%t7p8QGYjk$P|oOJ--%TTW8^+kfH zUo8KOCP&c$?Ra6tsr}&_15z)*cHEa4=O6&maUgF`kvi)x z2k8#$P1Go&QZamdwb|F4D5k5#F}p^+Vga90r0jeI=SE@-yd%hS1e&o4v%ykp@W5$k z-@s-^JoqO+-;^)`0q21=Kmv7A$Y`sNlPc8pq;WfZE) zUTlz6F&-^sTt*)}VN@tk;8HEmmP7$EEyI;!07=nA3y>6#c8h#`&0IWu&Axc}Vn`kc znX1y>_QhQQ>4Xmeoq(JH(g|+l#(n&JaA7*Q6iLbq-{HDONS@1{kfhV51(aSDziF*E zb$Bs{T#=piI*v5uVWup}pog{bQORwV?_%_GxJ&$Qib|wlnX*w*Zw*e`2TsbH+7DEg zooTLgs0GpmY`1f!Aj0F$;q=h{XB!%clS7IkOdJ6tfJt6T5K4JcO`0LaFz}?#I$cLl zZmVua_NIi4m$9igp(!Pt-OxX<$eMgziTQ3jd4%M z2LoU-wielg7li$qh!S(O+JZd19WA9&k*RzQHUx6bnzV_H1jRO@1jYDisiX>o-J&pM zyu%Ck&^^5!_vKOt1INf`<39&#DFy?t2~C(HBq(o^U|3sxk&m=|5Drw(r|wls^0198 zrwFDW8_ad``|5uglE`D4))zJ=RH;xQxvh+io&=Vrj}1(zjAR{xumFC7SG|iaK!Z+A z6168;l%QIE|Kl{#ZQtPGrEEq(#y6mhgCEOo5vQQO_){u|OV*wCnGRKK{*^-f<9t71 z>{jnxQBQtHOX<`>ld{Las04P+Xa=bWVN_j$sd$j?sE&GkJ!l^o`D}KK&6W;YmFGDbW!Qi$CP~dXwMq6PMM+@fo(FNlklnZ$Skt2?l zvJu+h@R)b2S2I9Fd+<)QH^U+_mfuK*YOYD%F2T41S2j0DdnANet`q&K-aZ z>YnM5a}KTGOdjo!7X6_ZOzE56$E!$(T763)x+u?2SfSM$U);ae@szi=jy2zWl@oW@ z2tJ{NKnX)F-t!kRLG6j@5(Rp#HEok0h>l7}dL?b?>jpa6#J?4Vv0A0|@hN@Cq;h3n zqeb8dtGerqImUd|HB~cGISmkuP)^w@A34YWs5+<{)I zuUIcYc4WQE^uDiI!eGRym2xlWPkcv{EX*F7M|#O5>AMDNQT!=XApmg7jHWq~sB%MnTdWIeb3u0NXP&p%|sCf%J=< zKdI4c`deZm3c<6uWGVv-GE#2qs0vM~wg3g72e1ihocI*@>s*0f<)BiSE_N7Bdlgfe z1}NzBS3I)KDm{D|1eNhkehX7I2_eq2Ize?hCB3+6M}%66Cnfrv`MHPB&b$FdvtxFo zN;-**Lh@(1WLb-Ed_RC%R%a#)v2~EHOj0K$yIDw9n`4M0Is4X8NbV1FUlE$>1G*lN zo#6BD!Ln{rba2P=7xPeX>me2MJoc9!U^E#w4|kaG%LQlz;N`<<%%?ez2`%|mX(9xZ z;Rw;^!XNGnXB$oB6f$U9&(uw{y5~ixc(Plkp!pUg4?clt4`29w-sfakOBI@DY~l}Y z`^#qhuoeVag_e#D32gs#a)YK0eml!%4t$D$;PgS9Xpv2HVNbW<3Jfp)9K@KH7$Lf9 zS%~9ZPZ&@v38Y8oNhtp>I^+I7bjG{E))g8l|Km{r^fABu%#eSU(|mTUkb>qtu>_F| zE%d6um?cTn85<6L3eFBCCx@@}m^0sNLlEFnUy(UUd5THWwAf{&3s)31G(w_FQ3${tRNQa}qM=sB3}R_iNtpx!!E%{r1TxuA^+A&2IYd$b{KEi|>N9{2 z3Ahc=AsE@r(oVq+gdDlAFcAcd4a&Lzo@PGUi)2;HAnM_^V3bTSz_kabbjbec2!IHa zWRNhq<2ywENL;F*_Xn`AxAU?d7>3qH{6n&9N(3nu7}jJX_z|J-cOHU_3^?ZyI#cFN^uny$)K9Z88X`9!cpMx}VVpBPl}O zxyQ(Y2S!ueDow`HZ996L{3gWI6}bc^8f%iBDB%i?l(o|R^KB%iTt*(u~ANl>3@;E&VC^IzT%I1fOr5a7j< zV3$HwJLeZD0%;68Z$uIqfwfNwS@-hJ02<>{BM#o@8ycgG4c8R7BQScTO8^(){ZKK5 zKqFqHaq!^Bpe&cA>JJ*E;^UUDUk{^^b(Ei%GMDNRa9E4blm8?_*A$lxX6vWMMEIZ} z$wr%tN*zzjQ}B2rIs+Kk#_Uc^U`@>3o7Na2c0-NGk?HpO?$Y5BQpAFEheWje+oN6$ z9|Qm6*b=cd%9rQ@e|{|z%e2}(=>gcWpNz5&c_4fEW}se2jGHR?d*DZ@0^?n+6h+Rw zOnF8;9Z@RV9+1j#$mPohI4M~)irGH-`W3?qtBJyj8W|fiYJ*q4KbTv4bC_E(3;nuh zG4$1+L|&b8x-bqbobnxAobG6z0nHxcqsdE!@ZFJ(e1~dP^VCPgA6iAzyCM@YUCs^E z-$so`_9ER-8CM}eh{tZ<75--`qlabNwE*atv^4x*sSMWtrZRx0jh8%9y7pZp0?DD# zExR9uXABTZ6#0A*gzbfmE*){-&u&>tyy18IAXrxTZq~$kV^afP&E@#e*>aC{c5`&{ zOE-@d+q1Yul-$kU)48FgUn_}Ng?$f5&%W=?>3tjLT8wlzJ#pTdjs@B_4kI_WDlb$M z@ZNp&`f{=KYs<{8mW6$?aBJ^u>C);fihFE!%Eb1#+x=o?YiRt^Jd)b9i}yIT)Q&~0 ze=BnR3s3l*)+llN(UDDE*UIF`kkh4ER>;O)@16$m!q@lQTd^OHbE#IhB5S~|jr=gbZxi{%F49Ki65_znAFV9ym)84 zT$3tT*Xb3u^o(nST$gkrXVs8r1hGw5LZy<)i5v3vsU5esNdR0bYI-0wL(|mvfEW$PBizK^}F|-m+HEc`lzqu<)j%> zvTG^+{A9|YGPqK%RnNL6GPXMgD7_f~BE!$ZY!YR8!6LE0B36Br`3pO{-N0R_u$gCnZu8nsK<^x3| zHrhbf#{QzSs+fvREmcEAq57I&T4t&g18#=A`igOkLS&)Hgsnd0e?n zw;Tl#3``QpusRrf)jc0hob?YG)lW1IQX2`e<)=d+wt1LCxgbeL8p05!g4#(GM(MrC z5vGFP$q=TaO!vYIjgLr*>_moGxC>RL=$!t3eLF~8Al|?9bv?%U^YlKK#;>wUx?Ge4a={f1TB{f0Ty{o}?jx7eI$ua1UR{lp^gvbR>f z;|@$7LI-FIEv4_2G*rs~p)v0Zv~W=33e%QjKi|Z?`vj`pC*Z%4dI@9@BKh2F+xG`3 z1F&twRY`L|2B<#D7e>3J~cS^;pTVu_t5VTD*UTa&FCY(xdNwkPaC?NYqT~w8z@804kjBvbOJh*dsUlzZ zY}f)l8^xbEy5nFy8yv2D`K+gsXdM{2p{m@GxdF()gOmi|hA{p>T zG^W+2o-{~_)%_>e6T{wnf}8$^8e@Gv%g@?2F^3wxH0Bt1OAR&AJ3-d}tDeg;an8}v zCPVr1GaG_ZWcy{Y)Kijd#EekSZbF7wXe8x|MnD7ki5q#_TS3na8 z3${}4Sh2`RhJ8{L^fodM5JytExP{kQ!AN(lq_VrqO%!Z!r{#z^!IhC1Ulw0-H zb4l=4^xoRjw8-0=zk;-YDXWZA2sn;-1ndsn0Sd#4f3zU#mO#KRBfjJ;VI7je13#d# z1EVR7NjoL^jtJc&Ov%?V^LLhvLXmS+LI!aL+g7g>leA`;>-^0gOv?Vm>O+_EkfA^~ zY_4W<6uuS5nGtOkU_ro>mv_^T!3Ivc0#2HouTStOOlR;-^g{)5h4@=?Tf$&Y<$Aic zs{4jLDsx^LgQW-iFNHyVO<}0kNYkZK90NTYG4+lPPkND;K|ZAUm4K1dx;aE)R9CP_ zy$aitpsL*A2Y1pxb1pO0#EmMBkxkqnGTbMlfF&vc4l7i2X%fHFt^L&t_ob27Nq4!lJ z@Df%+(IDltLrIlyx$;Jh!6hO(&<^PD&{CQCAoWTjLTHyL#m-}rnAC#9kWe$EUzQe# zj+VM_S-|B0(2>DIq0*!1Hvx5Ie30U3Mi&Q}jKx6A>z<66Pjb@ZsO(KOq1{qQA6nQc znq}`CT2FGfl{evMx9OcJ#(2nAAnjS*y>d!4u@lPi}E%jeM4lI*%&9sB)Bgj@cS}e zsQTm3Euex2N@)9|<${o|uxE4G0!I5Hd;XeM{Ytua1H-_S!sXfT?6in1ebQV?1iPS8 zzbd3Fb1czBzVXb=n?GNf4e?EMDCK}+??W~T26=j3LbO_(P8DOf(V=^kZ|kD->4uh) z0*HfuWgEiU2c%I=q~d`V`(QBvB+*UPa=iJ?UV{LN^#NZ6(Va%1t6^u2@*Xwn+|mW2 zLi8_V-*3@!pvx*9EoTXaqZ;Z0WqyXxO_|>+*Cj_n8LI_!EC2<3$wseu07d&im$c~c zG=p-Aq7l5NFuz@QOEaUAB2%jeG1w)eGaeg^E2owko*t34pGgGta1CZ1dN2A&*M?2` z+|vtvuK^h?s?I)3N|#<))5wQSPGpcQiYUMfn2WHhS&oDzR_hJ~lFb{vT$sm-la@C5 zH0Av9B*caoVj+UxiBd2m_`U(%4>DpmlRZh7S|ag{z18ABUmxmgw$jOu0CdTq>r&Kq z>f;~6%P2@D<$O)vZmZ!TBbtu&#FZ;Zsp5Gfl)9doBAYKsiHYkHgRrepJx{^G|C&N` zbK+$lRAv{|J;{_>A`Sekn*u)}6C>i9p1sp-2@EY!_67?Ry90G>1|BjE&aGa>@aPR@ z@iH4Nisor<%sEdvpi!V|nIg_jU`cXaGJ}ugp{I(YrR+kN|FgL+ess8qEI~Vh&p*FZ zzE?HJWK#gI>+dtOLbdDI%*II79{$@#px??cWlZj2*>Q$XI-+NYWfCT*@Z5zACRg&D!IupyK%!PJmcNl`s7})K8!iy)E)?GqbfJ zHTz^Q-h4?gP?88}zq(%}Mte}hn!oj|!ShS*&Vg^1N6LpRN$8TFobLOGr)-H~#P(JFC?UeX7QzYjD#QRK{(I{*pu|@V0{al8bqX>OTd7`<5~tww+erfj{50B@ zvtmw1&Fk#*7d4)M-YQt2PJ>{jI6!=ym@x01)AlErW1&|uKW)RehsOVS)Ew$_$EG>JTqv2`>{h@dvx zev6KA`%FXti^3wGAler|Y&ZK10pVOuCw82CDTVHz_JOX3V8a3>tYJY0YFOyE!Z9qL zGyxkHPL}feERn=Qg&Q?==9GyvBtyvqfZn<&{TQ#Z8U4u<$%5QwbQLiSl--S6;-0p- z`?7YoUn$I;e3XLcJGP0D%#icSjNG&mI*NWrkk33~6Nph_$Lr@iT;ZIlytf9(tThyY}uDcH20#1Xp{{Tyub^Wz+lQe2UvaE+jw2-?l#UpuHWJ(E? z*S%Ie-x0g$a7vsr?nVzg9@+d9^B~nVBx#M&A;|NgkRHVl0$UZV;-eT}wRKy8y$WYy zGIZIMyPFz54^4Su2gDF4JNX;YFmJER-jVmD`WR_YHX zdm^jCqFK%(N54*1B0!Prd4=EM^4IOD1+^}MgKzXhr{Cz8zU%w0^o>3Ef#Kpz{laRe z>OAbKXv#^MdqaZhXpW+l@2xMX<;GfO5Ae@HAIb5gq&P*=&)4Ifs-#RBs-5kOS}P~> zjYSTFv{b6viR(_N|HuCs>Go&=CI7m{e*%oK`$%nTYVpC+Kv&nwk{bGhmgfI2^8ddt z@-tddw)?l;nG3s}_neQH506%hl(-kSZAs5E9nV~y93xFD)Ttg+H-8wzNVutS+m!l&X{sOaznijtgoUX8Jc+D3J`PQJ>oR5H^2%BBqv)3k)S&J! z=Zot>K^5vM$dndQmHjrLU6Uzn30n%7s!^GuX9ycvRUelnM*;AJ0PnDH0nK-!7g)o zJwrW=T}G894b<6-23Y*KC0rE(tW}#2_RYWb>reI;uE&0lj~Cb=wG5r5N@RLKjguJI zo_g?!&ZgnK=ptlkdoy|Al_uB5}g>WUSwevA6kGjPNYHvK50Bl zBoXEiOCgjCTnjlWr}{tay=7FC@80*V5|Yv&sSG`YbcX^%cXxM6qo5*^Lr8abH%Li$ zNlOSwOG!!#&pE@t_I2<5+|TpkdbeM|a?~s%gP3@!v31~aIegP1%Kdu0x zdYlt|BAzsfOj(c_t_-2LGlfi9uo;OAJ2NqsSTJQ2eav-X6!m%#gVqf(!jkFthZxsL z2=BVvyfCgY5uUIfP$9qVX#4W`90{S-Ia1r_S zr~q@~cP-&Ga|P-dENKXD9O>VuhiWuJ@Z<|uT9v>tQXmje7W=3G_E7WS7v}h&kNbgSCCvH2t&Br)l>rjGd;vkD z=g+d$l=I2zIZwha*pD!uVC$Xw9H>w3bjB*N11hT-S; zbRe2B8D&UgvsuU(0_s)`SrG@48KMmmXn)!nSi8wFfMf;^f1b|dNOV2rFt7&kqfi5F z|85}@d`JO!9@x9dnefK2)6}!v)4Cp6r|IC+9c(cJNdP+j961>Ac@oA?H@G}~mLxJL zCn*T*$HuZ>TM$bpo8yTKu=`#V9$#8bBx}FrUF>2}Pi?#%f)n=nDFKT`31lxQn0z9r zmY!lcnD#663pwXrw8|s(w^`UujxFHA-JsO(3;pZ#0bDEO1j~hjAeD#b!4jzh*|Ezd z-^G3FUr{+sslZM&jeK*JCE|9A7qM~d|~(ONf@5PU;U%N@l{@Z zqxWln&K;J^XXwk~Yn5&25*2g!e2i>Y{u~4S->D5Pa<~J3K#@zJCHCdGu8T4P=lJyO_r0G{y7Pd3ImtJCjl3#@EpP9 zYw;s-1_PO&K>Dwr`A-2}aI&C^7!L2?Kj9tJjAOnG#!HZAdw-WnIJHQJdX?<)HEAU1 zWGO^P0hur9Y-3zyXnrP4&1d+BnqT0I*DZg~M8auF8d84@OKDBz1+x<@u2n}|`V}(L zE2;O5daN!0Qu5DX(J-*4^0%i?bH;wDDi>+c$DxIZ04&1_;5J1TVQhuFJ@z!*9Y3=e zI#FAN><8^);W zj0iXf`g62Xi+;H>0>Ez3%~;lv?VE*L21xhD@L@&SkOxiv>BP#?*rfNxNWC+aBt5Qj zC>?@U-s8)K6b+B?rH)Q@&({z&(J?MH`a9G~T;3L~tfG_z@(6qsQp9+%JyNO+p=!An ziut&q;27y@vxqCeLr|@w&#HmEh9UtN0w{sMY2%Nz!3(5`GUU;KoK9uWfDtSQn}bjf zdTSC@)uLN3apOcbURn;Z7ea!9Pe9_Tg^)g&dE9)QX)C=2oYN<$4iGolWI~WhbJi!q z+H&3!?$0Z%1dD9-5fZ54d+G371UgpKf9mceYf9Tenrb1J`;bo-_$pOm{`SWNLfY^| z{eDl3cJ`ykgU-F7*m%osdK};m|74APdKH32rv_|TNFWg&5-^hhj1??(bbuDzPXTaw z3BP<~;bbYlN~Y3endDtK_r*-Y8Po!EN1-t?Bivn5FqxjQFE4FIXIE#~l9*Ie3Z*oEC1PvO% zFb^ix3r=L^Or^DuhfWt1o9_trws9sRVn`5{LB_5BB6$ALnmPMVAI3jAbNqVhnAOiT85bLS6#4 z!1$_)GulL+9cNmcpwJdAN7Q%^tx;hpiD1>7pSF*{_YDw8n4CX%uMqe9lrd~Yixg)D zG75(JxPk8%ixS&vgvReaR-Og25I`V7`g678Ls@ap)!9&U6-%^4de}E`kE{b>7I2!G zo z*Die?Kb@YL<6M4AwEq1q@o1T&+r@Gh!3rwUN`%GlsrPo^oz_p`(kG{Mq*pIvS2C%( zqxsx_sag!Yn~|)G`B+duk*jj^Yee`P{U<|x5y9G(`MqiG+)GI|mT#+3i`W0Qe1Y1d z%(((!d{;on|4)q1_Fu;T-)DRU=zoR${|fp474jedFA4c>ah`}&zhrD_c`3PZAL88E z2cGIEj^cHJCf3{BJ!ii?CwiSvgGV;hTRjwvC;%!%dFb-D=x@ASdQ}C16j9+1Zi@~h z_HvAcIz8vW^fhx^j&LUlRDrO=bmJWD-Aym{#8@t?z39kkIY7lvKz0{%$>Ixi^6KWS zpwi+E8@1D!5x>)|XVblci-z9_$d~d3qB=}deo3)bTcUPrcddE}v?{2=S{2~IfQy8J zxeb8dN#v`?Yghzw%3L7PlerSFvvHCDtxiAe&K3|(Tf}`0w*`EC8D*Iz!QY=P!9SM4 z)HP+QR4e>p2`WwiHBS4a04uQk(*BJ7Bzichrb7lf(B)tZPKJnQ z8{xu=6}G=SW#c3Or{{%8+s~vb74-F!=(A4U3qSW}9S(J>bSr!VAdgT>OOiznC5b%f zmdb-065c4DuqTlVD(3(iKNcQNB*i8FnA);gY++@2No28sg^GE&x4aL>>B3mZOF%qM zpaQ}O+bE6h+G9%OVwNB`e1PCV{s80XYvmGP%TGY3!b6b)6xwiL zVDo$oN59GB0X|S80MPbF*eWI!!0V5wIu{xofJWcXsrJ0q3W^?6EYDxyEG=UyMVfzW z`X2gb>4d$5+)h?)8*@11E0uK<> zr3G^;MFHwDNH15D8+gJ5ST`#Qo=G4me92|XY$FNFB$Pl7Q4~2FXi-g~ z1T_9mB}kh~?jr6hut>6%;OrNmD6Zo~^0xu01T`R)V2MPB+ciw;R2&EM69D4~2uI0YF6sS>?7esv1lmCk~qSb`deYi^h{uDU=fEO8H$4C7M7#1)AfCs!4 z8!7(93PFIv4DVr}o=Xms0e^DxqsLh`@a|!^&SHuN4T#sPyZ!4ZKt+0;XIEH}b`0kv z&_mp>H_wWK^|=f9ff``=Da$Y)4oEzmGso?cucS5chI#fqV$}%OP)tA_srMqkmp*XO zn0-7fLXdgo0dx<@Blyw5)NQ~$(If*_b@t0AEF5O+=Li@RvW#7Zr~+HkPUZ1011=hx zsGEKghE=fmx8!9RaJtF6M(z8KU6i=BHd{>h%oVD{O}VIk2*L#YFqmuKr54oyRs`_N zqHaJg{sVWMxNm-5FrqeYum!-l5I0y60Pw4esn%omZO|v4Y_6gbNk#+ab_7l8kdESN z>}GMluV>Hn%zZyGY*=W(93FrIpG~4Jkpn338OeaHUpCdh0+7rBgGyqB9TZg-_IswU ziid}*h)j}EmRb4JgjKLfA&nmm&ax05`d2gKS$w>>y9xtG2^+OnVH$v~eyAF z%(R~rlcUTkO@bL6q#}q3j353v4TzD5O{RBvfXxBDQUG_P(%~@xkqr5m!UL9c|4BMI z{TJ_xL<3q#_a9|OxH=Nrs5L-WkndB5m8C;fYDFv6tgfxW%^$X)#Ru561%9=*A1X9p zPW|>%ixi32blwMX!L(M2)?lQ#ybkm)z|uh*O7MNziPf=pFsHuHuX-L+b&D!PuCck` zLKKf%H9sPaLpjftq~e!ogt20!cR1<1H>@1S$l>hAh$oM)mDS-zx>+OKys!-|9&Lci zv^8?q_rHKqAaK<3o>(kC;HU?36QOw>UMdAY$gq%|V;j}Kamls;Qgs6fOwgWLY@V)X zr-5t!a!FH#I*Omhw?~XMngL4!m>#^mO#&v@fO*!}2D~+$ZA6%FXyk`K?T0e*IQxMB zshr)%9GbZ_Z0)vr&LyblpRXxSgRd{%F)=^i>HuG&7X%GnSq+goVj6&fA08afRfo53YA#L<2oYxTweeq zj;bLKH%i^6h*Nt!oWkOFJxtL$ehE^~L^)%1{8D6K*EAe;vsDaKGN`&`&UC*B3#RX3 zd~K_I1?{w%V0@&yO#T7gI_CN0jWp~QQL^7oBAF0<;u<|1kCgrv15Ym}g(W32q&D zEv|~-AI~rAFRDyR0!u&SoXd$tYj}Azy>|C&mLW2a8$V6> zv6r$7ezwaOs{)D#tUnjlx#UE2n076*NanF~T36enR)wXVo=HhKj#59Fbf7%0WHNBrU-@5@=N z{sgn@GsymB*Kf>w4#uA@%h>4x3Iz=E;1K}Jq$ugnVQ_j!p9{56F_NZz5LbYrm5*Bi zj;XZh_UsSGi5-TG0~8Y{1+HM@0G_mAEn2s{h+q)#4QL%$vjE=BJ0xHs_?rc|_vt3- zZYp}>u4dshSz2#|o<|qGiDo8f6pDVt?D|6o?f@wOsR`}ozP9T++N#hm;R*EKOgmE{ z%*0AdoW@FHNEcQW^y~pXb>RHi>oDg-?|S}q;QG&rOXGJ{m5Q1SY5XdJNv4`27J1i! zZ!BalLZRE*;B~|O-H9;gtA$^ks*EiQ4)&@=@9UoV{4^qwW|3B`#b%bP{;P%Luk-nx7QZ7}mr{4rf9^dz-P3QGecM1bQ>OD!xI|=u z9NIRU{MEAT+wh!w;qq;p2R#v6o?8F`39i z(xwIb+fv)9ZqBsq{?UcHx->n06UqBiqMLAaDs;|@!O6}$JM{jC9 zTa^q)8#81Wtd}CQwXv=HE@ueWzt=q(>RlI3x94dsbA03h6c3~i$-iy#o+AT_2ly#I zjvx2W{66YDm5tMUqR%PJ{I>G-oUR>91{S%bsX_=;dczgbk8M5i?f#Y%OLl)<*9TwYc3L9K}-dY)T*u-ap{Y*WkIDw!)C zO}?srouZ^^q}}40%DoS~#lrp0QX}z!>&ai6_TupbhzS3v9UuzcQ|?B&y=@HMdjiS& z1j%zgnZxiBC=h8SrYZj-JWuhth-N>?3}0p!TTQzs(@cTdn!W)PB~7o5-T#Wdfi}vT zzQ4vy5Q8Q_Dog1oUnVMsD$nS`62trBdqBM>!nh_t*k?Q7!SHTt`}p`A6+y)GJMcs3 z`&QHMPadDsAump+%A$NOy^10#YzikT^pYXwtNy*06mp?%S$ky&qr_{G(V)=AH zv0`^sfVPny0JS~c1hDD>&L|U`XZ&+qf9mvj&VQQmLpT4>>0up<|MbwGCf|ASsc{pA zEr5bWz>04pjpnlQ&owL)e@XB|>wo#|fsVz0>ix-Kf0_FK*|7-uo3w$B#a~?&eXf3) zaXAM+EveDrH3;AiuH3)X`3hdN@h^>fccy+lRq$QyfH7CX4$~ou#CGho+)GhA>PMiv zD|}v)mO&Q;GdS!WR5iS3IZ=?MceunynoDX1m-0Mh`D?oyn74t3kRp#go;oq=F4GV-T2 zU?N|toG&0E<0%X zJZmkAB!q$HM8LFfBhM)=fX@Y54vB<6Jy>6+{Qy|jGfT=gi;{x&u5+O9u5&<}3f?(D z2Jakb$|hQ7;vi>}6vxAy!g1ZJ%F5&q7!lv52VDEBKf?NcDSnlCc$c)kM230d&$9tM zrgTUyK*4&egd;}=fRj%aRiiu5v1bE_t?w@>V5_upU=W>GLyQNw^`oo{d~C+>iRd+x zU6t0OVtOLD6>fVU5L~rvnfnRMnzc&Y!-148YgV3i$dnO^YCa9iJ3#$3K{fwv8G} z8(@dqGQTV`0gKpiFqgFfSAg_x#6}^+=|TEp2bZ*Gme>I78htFC>{A6E9%Ws?@)I1u zeyc|YAv&+B#GybVBh@z+KA?KQWfjT&e~9@Yg0lZp%pY=Q>>AL#2nL+}7ezT$RPMeW zbn)4br-M9z!pox|De~_?i6Z!;MnJVMP(82_Rrs!`Z$L74WYo>w#`=;bqE)4xguiW;~5tW@QK;G?&!&)S7KN2KoQbkRRhE;|K49j2DSDvM4zuRV6ul{_sxARz%TIe_oz&WLO{%L+bH2O97BitR!-(xIcj1tMK% z^X_-RedoZu0`T=S@O7w$Om4)k5qJJbs~$MWDg?HSwoy$z00J<$(zj+|F-`FZzq#4-{emhk+4y zHzF-;JmNQ-{08h$RkyhdH}=c_W$b523viA_9m-4ib2AQ^>;ZXvp8G+>-EZg!mPh_h z=Er{#{VSQj6y_1AB-O}+&Q+ubar)pBA@NlaQmB)u1?IfrBv@>B?N;{;(oyS}t9_wW z3@gqv^5Rg)9#AB^KPZk@lg}CZKvs3xe-l`0UW*;;le=YHW8Rp7Dtdp%$+4$s$gI^S zs}@fc=jTl!%CnM{#Dgv_&1HNhaNr#m(67w_lN3#hH55(SB>D<*|1<6p>o=ZFQv{ls zE(EbYZuT#uKfvtafJSc+#`pxT(I@5+%ln_@C;@sp#v0hIxZXAni1*7ma{(D|(TdNn zN}T|ch>tl)Fp;xZwKmNmcPh2B#1ps%L*E#H1|eX7(H;Tf(9@^a;09LG^7kSzz*Kr` zuzzIHw@dsTP{5sAL-DFazaATfTq= z-7Il`TeQxda&Mj%q@sBns!dyq!WL=ZX9ccB;fsY`QxeVZ2~B_e#C*U*5b}Wp=wQ`6 zna(;T2%O5(B+Kg%KqeZee_!xB8g`3B&29?OyI35ohr~UzCqfHPo>~H5`2gIEAbh0| z15TmrDFEhXQ`S(qT!*PhAhqu^-4^QU9$MHsK)+FPv z)9p9K8p_ZVU$Q9+c2y$)ulCXr)n%j-J^#&WSiRu9wP+%&Ua)S0a@LYRxMoppo=>H3 z1(g}BGXE$JHJoQyJI}L#P%a9rviXQ6-p36IiK(ApmH7;i-hEO9Cv;=hOFmg4$wKM_ zRB(LFL6~ucoLb6!6@o%FoD)cx&*%q@`YwS`zRLdWyfz0;T1;*tzHL-+1#OX(zUot0 zD1X$=1m?t_fT!{~{kuYBb|$|VUy+=FVz{#S2?y|F;p$v(3CJ&|*rRff z(=CaH-#;&x3kjBhqJ4%b5vbF0TKvgI>%TSZN68!p^JCn*S0(qK#e5Dp<)`Sotn?8C z>;oUA@Z3qnN9O@){9)X~h^c-D_Qc;Z&b>ynd4v%}Ylm_wS4$J6ABDGF79k^9h5Dwg zZ?94|l#6vGYutVh$1l{K@d=Uf%)Xt*Le75sY@xjRYWT)!`t~sJe8IfcV@UJrYKnV4 zzxw9u$;|D>#+P@EZ-*bXlBJJx?kA#Lt(M%zY<|(~Tz2{$^HZbu#c9gVVMmIpPKVg! zCs-dlSC1+67l^{#=QBydXge2ds`uk@${sleM+ynrO>cp8TX)Cb7$EcI%&R+GzVn_F ze6nNJ^h>v6Pb1LKAZ@9%dZ8Ni(7JkI%`hb6_oBm_+$U$V#=op>7ti9K>XdpJKH3m5 zzrot!^k-q;xhOY-YItZ$`tFVzskE3+4h-k z6?~@a5AC!p3Egh>uV=q~xx6J;zg6edlu<$ zc~8Qh3AnViv?zX>-6?Slu%Yq(CMdkF@pw@WOTXzVj2J{HyB{Gubor@$YR`mBOVRkk zI=Y2|bm?q2=qARzb;i(YVj^;@>)0m!w8i_@uBW@iF~YmF1@rQ=pw|ueo4(C0cY&QR z!}}UL-p72ujdX@C)2jr(xI1a@%UqR;Ct2$74FmTNVXu=w7`w7K@3}Ndo-&Iv}oD+PZq)hT-=YHT-$Uc2~z6 z!tdCtgZS9bwmP@XlX=9s9)Ha4U+)H(-t;snXFU_W2jME@*Wj3uOBONLX-!k(ZKKpj zTbGvP59~^&^ObIOTo1o^@9lBBudr|KY|9>A>bRK*24y`Zkq>Q!>Uxyh7}jy_*IQW| z6vwT;WKFE$;WTZuvN9+RkiqOw3hT(AF;}bQELR_V$&Mm15rN%Smc*lC##!#BN#(0k z^#PMky%SyLadTLB;_r}{janJvL?b#C`C{aa*h|mt=NN-j+9^>X>Me~8!e-?{97JYo#80?KOT*MsKGSxLrA($fW*xjfpAG%tX8sC`DbkTG|LMmp z&jh5S3SQYY;;ROe(Nx(b=Z8$HOHopTo@=_C6^JeC&vI#)6i7mj%k|FV(3hN+9rexy zh=gA*KhZny^WSecKp=X%)}g3(o``JY2L8G%UQ!P6`Q_VD2DZrwy z$;mPQyF<_CFwULiqzVuk9+vam>+?Na9OOdWAp5=inUt=I&7$Fjbh^%MB3l`o5m6btH1WeNv20 zBg?wNL38vnd^{WE{-#FUX~qxtD@AW4Ix3N?*a7d{JoQ4!9JdO(q&2F99a^&NN9asq z>phCM{`KMwyuEX)ynh^4QkBQG3pngDJ@bpUypo0!sqi)`UYRd3<@~kX#%rP-NSIkS zBSoemM`ha#q(w;fkt1h__tV+mOLstMUl8Tu6@TR5YZI0B%Swjws3GX0x~gTyLAv{8 ze}Ty91~dZrSnp@CCr63rGCV%?@5`mia;w&n_LJlxNVoE+RaDYIwn%d7R>ZDkzY=0C ztbCkfPJP^>N8L?yixk>r#hhAbfrq}XKp(8+s(N_grg@5Jt~}bIm~?)Ex?1te^uC5$E8bBr9bj|Ex+lj}5c;xx`r+-0@kUN~eFFToC z$-A}V>N@U13&opTe5Lnf#f%Q0lfRA0?(;p z7)b*1I0k`DYw=@Z{TdElPGr_6f|*w=ifUM0(Ice7F7#=P(0WW%3Ziig%cxnfF=qmL z17}MTF#>lBq+Q^Dax zAr)f8!0eL?EUZ+RqBZG{?Q#oJxC-bsElfh1)Mg5is=i@}YXkipj91s6l8S4? zmz#;95QsKqh!Ll6EIemQ&YgJ0H28XzTGkpzy(Nm`zN*eWxd_`1!qyoYssuLDcxy=qA7%8}eYJV067r6fKg0(W0=nby2m28GY z&izoIoloI41l8^!R1!v=l3a?_YxAW(tSh0@X#-98C*VcM`XJHXBc#P2Y<0oWnu$oY z55~o;rMoB*U@TG7eqU1|LHqU>7FFfo91=T&K>&+!0XiE}lL3wmB@O9{nMr=IiJ~TU-B2JfCCQz^ZMl z`#=xKb$GET%T50i_Cg7W!EUQ|hf=)Be7LNXk$;R56G^3f{KM&=XFJGtIKky=-h3bO zWGe&nnd*nOmkE1%ob|AEze{oLg3nQrG*s`Y@Jko?Cu{Edjxnywb}a zfmVQ2ba4XYpi5jnv?BybUDs#=-8{X$YtDMPF;dcAuvY?z>9s6u$yYS^HqOl*N+!=} z8-j|NI&x(HSOJ#BueKVG6LBBApzstmnA4zWGTiT4d_h!5TZu2j6eEyHEjlLOEjgvF zO%UtWXRS7lccdSup2Dr>MlISMJM$|DnedFdBRd)Tv8cL;9=sDYQIJEo#-&VqE2{!~4 zq3@UV<;t!exOQ(;|17zzd^c);+c!t{%4B#yLNxmPN)SJ|^gBAf^x*)_B-%i=ZA zWEqwpiL2~kYy6l2(-Sw#UrK7~*!jv-(OTt^(izCKJ|y+`Y&JoY^w&YZI5W@mcqUOk zkc>Upnb8ZJrXx2W-_;X3(3k|xx?jvOn4JnBF zmJSor8WZh1est7CAZ()XZf~r*4Zh5%d-nS^gSN z+bk-*Pn2kB4nKM@Gfo9WvnMV5b;O48I49%O94Aq&&9QE}Y{L9rx3i|53N+W1E>~P; zE?UN79cY~hEGscMVp_C2KKY&&r^fmIqkWRbM|*JEg4vUKv$Q3%+us&XaF3c_%eCr~ zQ}A4wI@+emo2Ad1KCyEtpcq%XHcInU6I{;q_ESFGi+;teWs`QvO7i$vEH1GuMr6jN zSIB;M$hC;vEUU~|Pm7}$%-FAD*TUPYsw9CIc?3?eez~#qq-^#ol-b=rAJ&xOZ$0wL?y~u&%9%y~b_rWWo6?BlNt4Gb4ctM)K7!6F2Vyr&>KWxGD?-_5(alWmlIRf6phIqZ*NpVv0b-~Om3J%9T-Z~WH z+I1JNen*HTYj-tsU~R1)xkdAcyRnf#R*MHCuhx5k4<#M^#PV2w#<0Wy3pp8YxS%p0 z(8RyKdaVU~s$w$(k&T%^-2nH-Fo&Vnd~Is|&_(05N^^^P>SKLzWo*pe9>ea^Ce7Ms zx=BxV$v*wBY3KTF>qGJ%dk1<{mQHQ%i?Pb?wZx5l&2Q< zsAXatdAoc!x0v`GqIMYqq=mfiUpWT)Hy^G+Wjwv}jvsBICwJKUo=}dJh`P$ZDl<6K)zd9555LtadEbA9%2MfA0{f zKZrzMa#?=Ja^2^jUVp$rbkpzu&S`l`ufDj42&b_)Kvk?zLQ$-+M*=Vu_CNJyB{Q*i!fuFo`GN-#D@!|*-`9$&_IXSk zDyb-k(K2=}L=@5Z@n(G;ZxC#&7ivjWLM0X#KT(RqCVka)Xs;0;5{9emP-|?V2H0f< z*?wFd@b^P+r1Zoeu9?PxkQVx9)gX%1DU9S;cCg8WbOos#x-_5ihTff5;Fun+yC1*? z?EsQQe2MAnE zCje@kR>*+E_T3$pOnzY$M-n(}b`9eF$ZDGyW&23S!S{6Joyi>;R1&Z^vUeV{~K&PiYmlOHYWW43>z*0Y@EYjL*hTfhVuV_ zjiCPl8*KlC4d}nZhUtHTjTks=5dH-lrvCvpCT`gN57-Eu{kO0||F5ty^q*h@?O$Mn z|C$vhG z=<&;cE7NnWJn`=Ei@)9u*6W)4^nwWk zr*=s0z<9PlBfCCYMH@lodtu27{Bmic3eEUtXBwjSZf`RBUr5c_{`gQ^EBYI??Nzjx zwp)!4B#-fJuR0~s?HX31S~lp}=@OGs0b`|oFAa5ts0=+}*i7Cag6-Lr8$w-BmnOI+ z<;6toOs6WLp2e@1=%%K8EJ4Fg)GbKZP3N)94P=@OG%9yb)<4k(q3h=W8FcqDa#qH^ zc_e@Rv;TqnHqW|5U!bX-T?mXR}w~LSie%xgL{7H+xoGu*=3I3M2Ogl{z zW-*qQTdq6>91ZP6>G)IXC$^Tc+MY7z$nxHSOBfAnlRjV$zRfHH`7VfW$xs0n=jH(W zkjsUU0Apu|>Hw>m%5@ngXK*b>4uUGnHvW<=nW`vBMHNOg3;Zc_pyD8g9U~E+RG7mG zSMLRX8-bh5u2Z&Om%4`WAKXPin5N=S8NHI;FB<(FZTx;&McQh*ld9+nI0Q~CPGS6v z9Z)HI$YXYfw_ooi@oHM(9y9LZFOfZo9(0QR^LZ9p@goKV9I2cjL;5As)|#h(W|x7S zGmfUVAMCQyZ7m^MYH{=yV>!(4cC(I!4*Z&HN(J3p7b8D^U{R4bp^VX@Kf4>&03cBX z2Jb|y!a$;lshHQkU|Y%$%2>IBgUR$0KB9S|ZmF)UHjUG(EUnmQn*~-NE#k+`T#?y* zEnZMh2migQmP){{tWKK16YidP`0*-2`jB~mta}y|@ zC9HFTAo)vU^>**gi%-9)Y>!9qY~KdrCv`1tW=h#1rDsb)_j$CRYCaX#r6J06fAe%Q zLl=7cIrP-zqClWHFssOyH=HD~>vfpi11{G4lWj;!0z{b-%Yh~NsN^mSN>ms&Qs^a$ zt<^;gMcbjPCy~MLDln-~FQ4LOVClV|iGP6_++r(*KyJRKn_5FOD7m0bNuZwF>onPh zA1q6c|4)Dsl^MMcZo!d>9_%_&`p92g3jEhh@UTO!aWRt4>8kpuMI!xKT51_+LT;;o4r|1xrJr zyu$N#!Q%qY4%rLr?3H=TW7mpF!C%In#zP;qEgDsBjJ}YcHCN96`;R%da5AZYqTRda zEb^bl4KBF2kv#9bT8{%0H$0RM-%{gDwmWMtR?&=!S0&3?C`$k2Ww$Su!2OK>M#g4I z2$Nz|+=D2$gtu1U==x^to(T7SP6mTFXD#!m2GP3}(q}GT_OU)2R2k-3@X;IYsFZ_NR{}fukI9@k;sU z9xZgeK{@R1^yqeo;$h$>Q}BL>MAP1L%)sb&mc`xA>>cLrGNC8S#?=aOTbJhXyT|NO zadxX@J?}gLU1J;2H5iuNolf`GFDCdGgv5f%llN$E>3v^+Ubs{d`8mOK)9AnY_Du4y z@hq+V9oh}nwgXz~ubTOi>XQiJwKqY6^u0q^@3<2%S8Bt$KHlcA-dIJ@l#{wVV2iml z6+7zXj_WXLe}chX*^W`Rdt~k+a&{w7a^vl*xOB~R&DqTLj_c<7r@kS54rI)ST6fLt$Ei96Njc>hk){QN**TJ@=o? z-#rfbmzrtQGrPZCC2hQFWb9Gb6XCPM(!NYLGdxMR!(;92le=zsmSE_(WaTqT+qk+NINC`8aK2z-ao}Y$TotR5`qb+1^O!CH z@_pzV9oFF>w_{L|2*pQQqKV4i>+vVdG6SlcAFnoucH$9?szGL94ZAG+B60o3m|q1_ zVp>R&-rwE=meVR`QMlbt%{`uUy7&-GYy5EZTz866qh5l5t9m+#JPQNcj%e=gW zlsT?r*usF6@$18LOoUsh`0OGYZw=-Tc)A^#_-{Hag=TP6n3sbk`3gxCDrH+mNG^IW z+D;5zQPb7qsZgfJr%G(@rStaGl_9SeGL`k4r}Tc+)V`el&_9|ZqW7et<~;s>PE14B zZL8pWM7H-1ayctU{wNRYiww&p+o!%0sJzzKc0d~Jt8L?w%BCl=V0a~!0@zQQ-uQRC zWYHT;HA-xV3)1Zo`$x<#@Ec(f3 zH$i4|%x48`{r9Tt6N@WwBr$_68M>7nXiIHACbr7c`m5Dvi;5#HV3XOfVtI%Ui}Oo_ zdG-0%Mr6t9QON#O#^cwOa_UpVmZ4xL`Zkr8^aj4RszSj{d>UA*aS-uJ>*c7meZP>6 zDEm8_Zc1X(>9nLdasm(-5Fm{FAWc-EwBu}{-^3o-Q;HKut2;4>Cq_^kNIU&-*6?DI z0E?@Qs%Y)bQKFMZh4&=^XI;nQ-jQ>K_%mZ3@#j;{xNn)Xs_g2{A4T%w-|SVY6=Ev` zaPyGT4nsf`h+|Q$J&IC6|Cxc(@PTTL;+>pDcg3lepIT5shJOWK$~Ae>#-cP2V?*$y zLacz440HVlmGwsov0m4xv*>=cy(+nPm+tqH+1(FteM$C_uR(QRK7{mk zQiMdH;Sjiry~Iv(ZY~xb@UscjI@!?agM7kf!p}BZCPRuAp~Q2yl8>WS1?2%G(81Ys z8(uVC6=9`o@9l87C82u2nj{$dT=hrDPYJPk;_;H?*)W=8VCDF3+4SLHM@B5|r}LUg zoQ}ViJ-=Hqy;ebs}`mt-f9bw zQ8Fgx+37^+g_aoM_Cd+3DK*Aj_H1TIXjD)@n`i-4 zp4r1sQF=EqaYa8wE4T%H&7<5&8jX^trd}BhuB@VH^}Dv8R!4=jX_) zk7JAnu~4NB%IOO*}WD z4a^E5Zp5x7N7!JEu9+BJpDP&|S$!?zWYHpIn#Rqu%vcu}n|E3(x4q|EY93`PfsR53 zd|Yxau?KKPmE5w`#}#QRi46Um*=I!5MCl|s1EGqTCV_U*ZHydb2pfzp*1hY#dnFjE z`7y>((rjg-)FbNbPG#d67Bv{1%Elc>?4eCHR1JE-Q|%;!d4ib=^&7&h;60o!aOfL8 z2+3rqeT&u`w?NZ2?{)QrRcGJ{-oH?_h_yfG2cFhgS3MN+cojVDa-z-c9&|Af!V0^2 zFS(Y8Yd+eHBpHQB^+I7w^%2Iz8wMijHJy|=8uKCX>jSw#vU8DoWvK+l?Fo3Z`2vc<{R#?j=Wr;&+rbHd3`wMJ>93$Ph5T~mAldBXeY%;7n1n1E zq%K~TZ8FBSK1zVP5_o;93m`XjF0(KP_L3(L0uQis1vUu0$9+k{hj{X?6I4lkXe}{v zHUllSj2Hu!ikfVMS#_8=wb-(l{q;3?gOCMnA$&CgaRHnDu4&u;E+ur@`?cS3m2`=+ z;ySSUrKkiq8Z+Zq3n*DCSbmQbcpMvVJhy5Uw;~b-_iV7BqB+x&Zm#1uGvSESf!QKaZC3U_$`XTcLdwNLGM_a?w z{AyQ=gaS1J+${cjjjJkMG<#As)ko?}N2%@SG>Vu#cP|F<-aXR0I!!ZYV-ITwOP6Qv_IBcT z|7K$W{vE0&?>Ntj@fmC89d?Zvi?nI}QjvYe&geY95otxI5GZE@yGHze$N>7WkrhRXMF<+Mq~;gnz}cKom!~3MSfEQ zF*;qn%W}6*EL{z42GJYo5SAHdtr$O5yqHE^FdeC7=gkpYEYRV0WS5hU;SJ1koy%=NbQI$O)5lUMG*G-`MDIX26_DSQmKn*JO`3 zsja>D$!oiChYrFtPA|k&K?ml{X=FE20n*_M46oW@i@rh0{XCU$n{?*}etq;1&#JM%e6|t3di0Jks zVY=;>+QOx}GrZkz4XMvkAcZ|>4;54eKR=nwqZBBwM25)pVRjfS-IL*{T2BV<@PC2D_)DcITG-qNR`uWOsF#ROjnq_n2i||78>06?5Qv9`BnT! z+zE?A?yuMMGZ4_Afp_302sN={2FbC{xRx3GN;o0tA;J!QC~%Ex61{zI!Y8W>{^|c99Xe z4eL8UbPIcf;n1fj4#AC{?>VA=Eu!BdMd)BeVaRG9yhDWP^2ympAbTh*?m4__PY|5F zZWS1hqhV81ytbjBj8^k_s5di;Xr8XBMpBxOB}Lt2)CYfj_06B)=e@cA@qzZO7~Ec` z2Yrh1wwcu1p>YW@{nuyN<&+^$@k;0-on;c@pNOy48ujzKPuq!g^%RWxjH#DaT;QN`SYyzjo+i#jD9To+BJ2;byeQ$Kv!Y z(&6f_Hp8L})@f3Fl8EQYb(@IK_*CIxe39PMVKR8;1}0VxP1t;?@)n0@hWwp<32{>& zTET5XnRR*`Y&_-~VoAA9(L|XPOb9SGg5uQAUijE>t=qSQ59P-<@cKBuc$5!OiyK`E z=i;E4O$b!;iV}n>TtZl&${P{JiY2AT_sITc+6)P4l*w6OCKe6*;4Dy|dm zvSd#QoDRkbvsnIknRuht&D%H=QJIg(`!Rfn)rmEF=UCB-?iKe!M^goQq~{flFB{By z3v!(0HU)9oiMq-dcYIO1xH{}rm;{XDnqDq#QtY1pz%UuUXn(O_91S&3G8T7GsqS5jNg|sD0Ne%x~u5rxaY9Fr#0uuwI);czHDFL1=5LF|Z;>0)w;Yf7NG4 za{~txV`V3YUoV|szLF{JW!p`$*X1J61?Ld4wOO$srxSV}{ zo-N)L6fK`JI)FWi9JiY9<6c#CxIFZRJsMp0VgJxXXIVAXT{}nf9wB{LRC~IYXUL@QoxKsgV4E(3+Uce*ox4i!p%(!i5z##{yd4n{;Pk9p)XIS~j-&}LOB^?* zz8GdEJP5ze5)g=xP;Jpw->Vwd-`a~wsc$jGYVx%LyWbET${Z>z7!5eU|Fhl=j|Swa z4RXyL7#(7~=ZK~j;kzdR0JQ39%ez(fwZ&KK3!><5QDki=1cZH+$Whc<;YN6cb@arK z?O77ToIgo)W;O#x9@IDNEfgH*P`PWi+FLdk8AD%1`v!VJ2<7hw=D;(55TD~CL$#Ur z`gG}Mwgv&Wy>&Hg#Maas&oQ>N&3u}*W!_k8bu0)ztAu|X?pIXD6v!bgER7PQJp67| zP&0By*N?v{uPJm)WF+z)z05qyDov;g>h^KtAlK*O!sBxJ?%e}Nm}DvOjskiQ_)&m) z>`!iXW8LmIv^5IcM(w@bw>G9E0je58Eu~85thr45h0<_Ta}cq?cn$DgJBO?|iP6HQ zr%4LI_4qC7H4sn;rRtdwPVLxOEGK0~o1Vb|lK$K<)|4)Xr^jhm6!eAWW1t%t#r+&X z^{ML1)B!&d5JBT!S?`bXuGCDj2U1+oC98)qEFZfb`Nu}q2fE>}SyT)0P}DnpfH0UK z9xzMUbj3=UHA_*$GP2>~yR+r#{j%WZ;B(`{lWtfnxb@X_wZ*xcOq;SQW7FXq8t~MjW zJ|4E+Oft?f)~29O?t%+*&H}g?Cqwp~UMZOe9sMdAPg=S{!Sc=>Kdm5bozz(XH!0}( zR{Q)av&okkl%aZlf-jbUzz-S+RuavETCG zm8>2+k?bSvXfTQz(w~N`Ch&#J*0|ndCqu``C@H~WxaaMn4}D5__uk*1Ep)`HrY3*H z*6DrWsgpXeqePs9d9F>eqd#Q2)YoL`sf|pZ3SL)*ZNFLH`hCZY7ZT@UGs~G`D&}WT zWAi4c_d^PpjyAGa&+4`X;`uAx4~(3P2H~dWleIJ!uXM&hDRGpXg%HJCaBQ70x&(>a z4l2xev|AJ=m`U}OAai;$6>fft$$#00N^6G=;CR1mWQ&cm?sz9Kd6D)p-OVd1gf?z! zGzw7d57sUu&af+@mD(#sqN3=PYFd`hgl}B&psIbXHOtD_cqD57JB+iRWKBPE zLe;sIjk}s{gy@Z@&qUl$O|_JlZIkS^r%n_Hs#`=y?^jB|q9yx>2NhSoWqA9(NrutmK*FB%M+ZNl zHvoe|@wHusr01dN%_%M2S~7v-4>e?d9f7(Kw|zznVzbVIRph*FAsV`cP@4P`J-0P3 z`0HuW=H&j+pektM2anXI&y1`T*YmDL35}cQeY`77A_8m=jcQlgu<5N%Dhy zRrByI(hYo&;OCrH-2#GfKC{w}FV`g7HA3E4NYWn#9+4gxu0(_8XXv2w8zdYw8G zcjO{P8KN}|X9cZ{lXx?s)@-6eu8~D#!Ez-VoYFhm>--oMRhoFjTSBsJyG%p0V6rhF z$3pAeVYNGu^c-1-5g~U!s;bbx(l2+ZELu-G)p-=cSMBYN;F(Up|2%$pzg{=YWmOG; zFjd@;M5hz%Z0k-8cBCR8q>KYCsZlnS2)N51+GADWyFvBy-EnuOsJJEsZg><-xd0m? zbLVX0zK%{xqPx}aMW9$KzQewWK3jDxNrk}^D zPpEKJdN@&!vb$)T$K~Y$j~K$R0#9kaVhPA^R5^06+7GhAVxX9ua7EyQ-qa=nawIJ+ zX|zKZ9)uoAU&V6Zx@2tFL7=r84U>Jd3Jki1NEUtX$7<&p}j(PwR4AGMXK- zEG3^9^||^Jv||jtOInKKkRM7AjichgS`xr}0Fs&*-BzxT418Z2F!3#E+upTwfs%Jj znNX20`i#~)DEM};CyJA2>tQ_98UC}GbL3+vCnVk|2^QipM?h!s;_e9hYgbY(>Le9= z_E?p`4PUS9DI?O=CZs+YP<)x5^4ETP$9mz-vxDIw&>JnoLs&L^adk6y9}RCfcgwt% z-(quwzDY?=Os&@NHx93$Y8Vxah0}@%4kwV>EpH4e<@_nmJ-UC)actl3{_DybEhY-P zz7aO0S~k!=F(BlJFK^pQ5B0iHLA(l#mFbg4rfz7g=|&NJ>TU7{SJH&DF`Qi&^-m4r zcMyj@yVaY+Hb%x;V_!e=5z_6zN0LS$&E>qQYg+b#kWS~Vl6+0Gfs25Rx4@|v3a(l- zofNM_t|*GW)+sdJt;c%G82T1=qVQHQBgz%zwrD1^^xPvQ%zsE$s4Zck@5V)5ta=mgHl#(j&B*&4YI!Z{0~&O?DHlb>tK6vtkY zB2F#z4>)JD?qEB}B(W1NjvipMCi)4_S92(AHuWi_+aON?1CBVd4j{A=PM?p_;-fht zz|hHDmQMV!W5^xx}qu74CQlYCrMH=OXYpWi@4}%)~OD-y^W=jb}&P-gM)1PL1|>n zOLU4xuNcz68BJ7|gbKCe>^;3CMjQ=pyDeRqIEcsm!uK)6}aG0?5L;; zKo0bb`Ei!h@R)io8x|E2{o8s6Q!XklnOprXrv!?QfXQYRrCH9FFyiCs`aYe@X%c7x zejH17AwVOrSZW#?1$*v6_s)KWX(uuPnnU;lH@>ZSN+;qTqDEDfy--!H6u!OyAD5JZ zLIi0oLA0=qVr=;b>OQ@S$+%nMq)uoM zYS}qeX*(Gki;BBoH{~-}1!EQKx4ga4=L%<1OeCZJpv|vgt4P#4oT|#ieaKI;D%EQX zA_;3O+vSr2TeO!x6*tT*vWi}k){LcYdeE0?ypzpGO9NYKnfi_PVvsV-?vyMWQL&UH zdp}f)q{=6FE_tGRqCoM zbHYSbkTyT*kd(!@{wqrJ93i_XSWStlumzlT%se^qjl^6LnhBV%?Y$M38`W^4g(ceglv^UrGb*2qx^u?gs-?^*ztWZ4dbRNoa!a;CWNdg(PxYBjgzEJ?CBK#$lK=!7^~c8U zW?$hI8QH_&y*FXu&1zKOavCWbnd2&%l5)6C(`FY=DyjAL>SAfx!;f~RRIuoBC6$62 zstVc#;96RE60!swD54Y+f>!Ap6031igjX^o`ty8D-n5GpufCW~VGdma_biy_i^I;{ zA{DP4}pB8 z4vb3^*gApeMf~CpE1NgBp3am06mUR6IfLo&1i_)#emUe)(RnREWB4H@u5}KbJo~*M zzXa(`E~5cEtLTAJW||AS2xE?@TC{N-x}xG0Osm^%`IAClo2{U#`08*P-DlpU!s7XvnR5JyD94*o)PuLuuc1{U>;wU9;zTOX8e!H+DKS zPFeBmu$;-wQ^7Hhm+hJuObGc1p4bn4g44T%m6wwZ3Ig_yBGUOuvXN8y68gHE;<7=W zjR32w+ALd)q5BGnlC_P3kPrjz&-aS*$Y}!w<_dD8NmX0pv>|`@~q6iww>V-;%k~wu>|3pWYCm z;EAR4FSTVkQfT5cxTGvOjlr2N6Y|$;eM_z|TebSu&h2ygh!upQke9DgME)>-e`4lD z!h%5Ji;7GhHIXY#APenZm)aW;+mIFCV$8Qbm~H#rX>0H7*3jkj9j&e{N~7z9-{AG3 z1s|gz4SXOU-VI~(hiu+$ORmh1?LHw%ZlF3Ie3V%+_~gJw(rf9BVWmXy{S)mZ)s$XA zkYvRq4-9i>R*?FGz;t>%agwkQ=T!3d@;Lvn+#Ct8&eMG~#Z3kjGKq+_2SIujPqj*z zNxFB;+4C01LfsO?a+3+2kP^A!7mJ~U34FaB|Jjt6Y@o2QNH-scbS)YyTjH9EqBNM- z2fx6*s5$0F;}zzGIz1bzgxTu5kCbfqsOKwb^mQnRi7fuO@He$= z&2)5z15HYL^y5jT-NHxj@8^+9^N(459E5rxwjC6D5yNYSK2?4CaEbiElwEErQ8hkU z>E>$30h59n?wUGiGwEw@gZ8jwT02_+Ewr4P!bK!6pIgkA6_{EODojkMApnErttU`ZeJhldt5GyTsx*W;xA?gw_=BX|ccZ|{+)}p;f zPRg0F4ftC-5B!ggS7-`|ZKkfJhx0ZO3tk*XZGO%iHBqA|QVqAlYyzgOvrLE@o*dPO zqxyXD=j&erimA>9>)R>~uCIxhY<({GdA^S>$;l+MZEQ$Drc_(Jpp&uQ`2&+$V*Hg*@NjPpwI2; z2@Ieh4F--5fCNAT?@0jMHq6qUz$+o(I&GxD&%bY~rsrT{{m-q{e);FrE3oEm~YI?g1W_Y^*xtJ1rh5q1Ki*M4gy>0((n=Sp0rv%RwF^+bs z1vF^O2+O?s#B+h}i{K}Yy(M%QI-XdAN&5CQFgZD?u>M$e47g80iewMi-9A0@pQ2$( zV)=IFCBxhq2X7+q#>z`AZO-(d>KNqek7>8O)dIM9l{6j?qP>ZDZ1cX1N}PQQl;n)n z=gXDg91uM`dv7SX?|PYO<&6klXfr%?ehKqZ2|UD+o16l3t^I#8k(U9`$qVy+-p^FQ<(|HJ)>fNOriglw(>qT-Z(anz0hu*Ux zSwnHE#Wjqn8c@NNz|mX5&c&UZBNP$(1y>K)O!Nb)?wYnXjn=VzINz^%Q5uZBW)MbH zr!Y+EaT%k`B4-&FB%C@;GGJmh4IaeSrF$TgRA37@%H`Y;7R$>4a|fjIk68q_E4Z2v z=j#J0aHM14uA$5<&bY;tv1g4M(k>9K<>T7QM!SV?C$d^MQzfn@huns(29LjF>{)U3 z8hhtlNEKAidI_81WKKtUH9iuD)#jOhd2#hV)*P7luKz@5evg0qr_NY*Ga`!|``ri3 zd6H2CDfw?}3lYz;q>+=e4D0`(@%FdU5JegAZycx>MXC(Oem%(VLzQuP zJOWJayY!owvEwFd2%f>2qpYB=nGVu{=h-$@`CrfbCza&EJY3@&EE7Sh*hjxCJa6LoEOR;jfm% z(aGJ~iR|5ITXYc_j@E8$E&?MK^E6%#cwb^(#{w_RJDmersW4dkWseQT? zM=<|Tto2Q5q?6HfRat4-=du>h`ya+y!=Kl03ioBy*MrP(y2qEJejL0$ShcgX>tXiE z=ENIuATa96M96wzeRyd6M3h0dxxc~)3Ms+y7`P18xt_G?q}5*h5KrBNaoQ36dmJip$X(}EauSM?f&k^ zO^<~I&|(U~38x)0c%C>;cbJ6g3;!6Kz0Cd3i)#?y9gbYA_WH=RgOoXBzfppi@JRU& zpBm;IQXnP7_qg|c4x8$i>(`ov@e*^5kpq0i2PlyR%-TiYEh{P#B=%Lw_CF%+=+tHh znl=AWccq&(YF+l|Dy1g!QTUWMFLtpo%<={fBM3Gc&IYX~3YN2n3sgal6Ho>yfSwbX z4RwYwt_c+OilZeAax0rJbdCQeT36-6?W(-#O)wd%{*QOMm z;tio=(&d)?SxOCl_K#8TnAy-=E^>t1Ej(vu#v-r|shv(+{Us)3J+BKUB&|pc-n`n3 z2M&;cs}@LjTWmr!Wv8jil^E*HYAG=21Rr3l?-mVluD4De>U#BCY6&E&VSb&@7bYM3T$ zsjA3Zg%?;8_8Pwg7gl4D=nm~9Atc+vx^K!O7hhEXv9IYw-cnm=sS3_GhD9jRC{8!| zmuAUO;0II>lDYNP%7vMLqE)zFV`=!w`{u)on2?=JP~z*x6UrlXp1gyexUuhT5;4hF zSXW-4DTzc+S{jH(|MaFajq_6>ANHg|vUp8)DC&I>%LLLU)O`B_ayK0&ft;&8SEEZC zf{44rC%=4au7*e(fHLm4rNi;34&H2-XgqLa*wkqD!Ujiz5uu3tP^r@tWI}(5vB3JM zDEB&pV9W}WI-|9|A#X&c&>s|b$8RQSyxB!i{G0q31!QAqP@{33JUyvV9*?zvYwv#? zM|@*drgDe2pt-v^F)%?mktR1ckAX~ZYANeK=LifL`8m z(H^J1h3Y$0Fv`|jnHSM|Xcl?XivVil`$>ev@4VF+@B|Sx%KsRDc1zv~em=`NeFc3x~Q{;=M>&+%=33 zT9s@mC0KKyLl&+H@(IER!7lbXqAp^x#jFI{^~+t#p()00=FE6j;yK|k=7YLy5se%% zoJ+(pP`dXy3h_{6W5sbkb&a7sOT)~r(KaG-c3d;@;&sy$jLvn3!XcVq4ZU7hb=~Rj zV3$c9c8U&V9}B}aXvPn8zTJaVa)uNkf)2318x|p6qCjR9Nsfsig3OjeVMXD03pKU* z!tAsK+2p_Jr<(%bIvYG%Y)dGHQR|l!KmXPs=u8jaN)oE2HbQL>_jY-50Cz`7J^*7! z;0wphr8TxqXe1VJz>kfP0pjXAQhNWxCX7aq2GI?ktto0$5nCYmSqG zh!k$~tQ^W%@F4I`0VK|VqZnWP!1oH*(dzhtHBxqaj0jVah|X`K!{gaLXUy!M^rR-^ zf{Wyf;7^O1R|~qKQxFJi$~McuL2!sTxtOJe<@U6!tsKiF)sO$^ARw=7GD6+=&l{$S z1;wA>MW(2i`~;=+URcwRgGwtLH4hL{*JH0Vj!rHHf@l$DP%uXo9tlaf!Q4I1Eud`5 zfrpq0kMxdU;~+nqiUrm!bm#y^46qL4RT)}aQ4;mTg5u@dhx{% zV-usa)}+FVAPW*_23i_09pdS!_CFr9{8dtsENIlUiux?y(`}obf;1#f^c`VG- z2ks0qvjkCi5-cRD(E%{?)yS{8&EP7FsYei#5GF`CyE&mS$g%K8m?ESOBe%hmNF%sb zv-`%axu!je{2-2Ub~C3*k*X+%HtaX@Sv1p>i-M~?;)mpA$blgAy#a0Q2B#p*Txba} zCyaM)V{A5jl*UHZ^}wh^K@u9<-J`f$45CxYb;XxqS9WMgnYn{IEGG>l>-P7Uo%0n8 zd`neePpNrka&x|F=Q%anC5CoA-^6)K>;`y6GZ{Q<>OL@}ly*hjZ+uw_8gSJP!CzU0 zPo|WpYKKU9?fK5g=tQr!1}5DzbSNdU$&iR6ICR*TkP*ZSS9|W1jY8i_0x4Ai9RFp7;RjmHfteqw)M)JPEj`F`7 z5^(Ou^o_u705PzWP4QQEz#bUacQSEMHgR(LJ*w>4Jrlj5h3%O>w7!DAy}=1+d>=ff zfHlAvgC(CCoyiz<&=B(eeOyrLAz}br$hnW$YcWWvOR#SkA05ZKe2{j z{sEY=7xKB%>f|T#5+J0l$wt|@Oil;RMb|W%YjA% zJaFI^GVmurbJEDp#>T|f$?>mkyOcU@^ME6^s-}Fay(oh7)0Mzg$d-#GDi(zAK%#N{ z-&&I{RvW9`9djqW=+AmMnsuRt)7 zk2>m{&X^B;N5O9!WN0twqJ&uB_6J`usXJ|##&*mF>0Rz}%0891Dc>Me_SCPe?VyK>WUJe)>FppwU*Wk+q_VMaw?%J3{8^+>^5 zWt2RChJ7fpqFM|1@;zPydus|Ot*G@X>eCVaR&Tri<@Ci{6A$sD4iW8&=-51}O6^*Q2R$4$=f~nb z@1x}Nd!tsvJNn%LbPg}?>05e2Vh(+Jp!|YfIX9ie1{b}3d6O{W0RY|gs~#X zHvl9Crbbjo$8u1}eN?%)C{|=e0?|H=9NEAqhllTMC($M51PR6wSfRv5@Eb?|>m)<6 z25^eBtCj|*GU2Yd1FG%|^?Rn?GI$pF6)VPn+P1O&%KL$etn{V=IQCB$6t( z+xxw*mhR+i-9oM^BcMGc;`9aXg5e#_nWB+*IgC`zXsr$AD7_f_o^s9yDY3G5w~dwd z#(hPK)bo$g5h@YU%S_74)GMOi?}H{Qc2difvv3vC<%wD6N_llOb6mvex83D<#}z)% z^{1FBJUpS5HBV;tbINpQJf5?w`xa4#@)b%Z{8 z0+yw?JF=WxWxp(f!!}dhrJZVeYC9XcH$0bNa%MR^J6M_1X&z)JD9*1j-Uv4IZY(-a z1%cJl`HmVP_ZT*sAh-dE0l2oAb1h}q_}Tr~s&(+mH1RzDuw$UEULGv&pig{@r2KN; zdJ#*J-*V|TpQSz5d{!3u&v4T*TUgx^k9S*-?U~nHjt#fcS*z}I!ate|clO+Vbnd$a zG?Z;pDTD+*?8H`SZ4(rZwCBxXX?{mVux#`VI(!F@_Q;-ilIE&Av5 zBf!NTuj;_H_TF)x^DvAex;s^Ze?yWbbuUIJw(@Mi_TYpyOvnLa(o+nrYQ7)cXW@5* zIQx1(y(|CF?LuFAq1rYV(28n1vl?&@eKvi?UIb_dy@p+*0r>)ck9s2A!SIiZ9;C~H zj&}5uw;gIAau6ICYbx)R!Q>D)-hB81c|NQEi0k&lSJ&&IcllRm;NQCo%o8gII>2JH z19m1*0MH=Dc18*gcJ_|I*M)=0uW}>K1qY$b1^|EZ|MuY(uV@AIwg#<2-64@5+bp!~ zLEH3liWqe1M@O}p48D!9L5=4){Gzu|T4sH~bd}-7xf}1~RW5Z5S4WjUpnx7Y0M<#y z(DPcjsw~wvhR3L6tu7IiStUSl^ZxR+NjPK4x`s5w0;WEXIBGCsQcgvExW4rqCbcE# zF0!1qw2tC_v_}Aj33m$!e#knqnm$!g@&@GhGB}ivu^BqCmQ_QT9XP?L)W|byl%Xdv zv;LLCSy-9{yXCN2G_ya@8^7(8qcI%iQPKBxuOs6_+Q6sqcO4HEr8Jc4g_^3tD`Yx| zeSowq7)^gH*F#4qY$$xg=Xi4qhc*vR$^ex}P%> zdU(!B*&+48Rs{P@y=sRF-xn$VIp(V^eR{<2IMTlV!&tRXzT+ra zWGsg+lZ9V!5u67UExS!$;3uZ#&z*!#lYO-t5H|a_D=f9KLpZmdrr^qmCfn6#3O&rV zqdjPIFjV8S;5@Vgu9PT#CNM@noR#$5nH-h1-sdi3c2(!4}^UR2)~PdG}ezN7t}h*yVtK2*+Zdk zCg3F{8dt&R1<&Lt)UzF9S?`GV8u64!QCIsd7|Xuv7=0w(6F&?d&@Dot5FFhfC`eA> zCX`P>BO$PDMcUNmQO93$&AZhpj`AMH^cco(ZM#30=8{kK15XjH$0>#L2#Hx4$S_W1 zt`FWqIA@AGE-7-r=~t{0Y10|BK2j`{v)%*laZWoi=GurC1J z#=mBE{Qb}pwgXy?woZB~?)D~*I=?EOg7n`3^=}zTFMv`qz{(2uH)(j_TllY_)$g#w zbHO!C-BAPJlOcdoxPKF50(!E6#>!u^u67PqhIV#Vzn=Xf=in0a$1U(tE5J8Ca2un4 zIVOPS?>}N_|0Fz5#8|>AN;GiyEF^q zX!|1NcPQ;S1)B~XCIVQfu)q@idyb~xy-4{TUV2VR%Flug2kM0fuo3?|CE4Xg%I^rx zb4q>X*RDF?KUd%3IYrg|MGE^%dOBU+c$5UBkOR~I_p}IvzewSDi89P_>{kga6Gw~Z z6u9&kDV#4+{1G;hD*i$FwX^o0mjwBP@jibU^P&bnpP2av!}s_b^IuKV ze6GaLXVCottpNMgz=r1ee7fg==Tmn604l+M1O9CS&vU}_;RSyPBG|tPzna?Ljhy2@ z+TK4c-is~o^Jx7apcu}71N;-af1bkU!R$XkH{AaQ_$Rde9QZsm{0HcX_ul~j1d5*n zp9fn10DbU(1OJ3wpNl?s%Kj0JBKs}+%q7e4?Ebfl_Br&qxAPA)jQl@={`P%7hdy^4 z{(&aE{tf+`8}YgHbLZ3_X&cJ_BuT$rRnMW%y*_`S7F7QU^tTV_IrO=^;14v2=C6GI ztMlNw^xv)KKe9lZg%$+xZ#MLE@xL25|0=G)@Gs*3Fn1KBAs~PKh7|bM2z;|QF#j^f F{}*3-hrj>; literal 0 HcmV?d00001 diff --git a/config/Endobest_Dashboard_Config.xlsx b/config/Endobest_Dashboard_Config.xlsx deleted file mode 100644 index c7ec03a260404ea0b27ecdd7b312ac8a05eb33b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79106 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 diff --git a/config/do_dashboard_extended_template.xlsx b/config/do_dashboard_extended_template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e5451ec946ae434f77af576c3a8e18b1f7f8620d GIT binary patch literal 41864 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 QI|f-GWCD(V6wC(k0Qf0ADgXcg literal 0 HcmV?d00001 diff --git a/config/eb_dashboard_monitoring_template.xlsx b/config/do_dashboard_monitoring_template.xlsx similarity index 100% rename from config/eb_dashboard_monitoring_template.xlsx rename to config/do_dashboard_monitoring_template.xlsx diff --git a/config/eb_dashboard_extended_template.xlsx b/config/eb_dashboard_extended_template.xlsx deleted file mode 100644 index 8274c393f8bf590d7d7b0b13b59431f40d0801eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41198 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 V@E`JQK)8T^Ab_VIv&lcc{eSXDG|T`1 diff --git a/do_dashboard.bat b/do_dashboard.bat new file mode 100644 index 0000000..79e59ec --- /dev/null +++ b/do_dashboard.bat @@ -0,0 +1,4 @@ +@echo off +call C:\PythonProjects\.rcvenv\Scripts\activate.bat +python do_dashboard.py %* + diff --git a/do_dashboard.py b/do_dashboard.py new file mode 100644 index 0000000..f39542d --- /dev/null +++ b/do_dashboard.py @@ -0,0 +1,1475 @@ + +# DO (Diagnostic Order) Dashboard Generator +# This script automates the collection and processing of diagnostic order requests from the Ziwig GDD platform. +# It authenticates with Ziwig's IAM and GDD APIs to gather all worklist requests, their details, and +# associated professional (prescriber/requester) information. The script generates a comprehensive JSON +# report containing all request data, with 100% configurable fields defined in an Excel configuration file. +# All fields are externalized and can be configured without any code modification. The configuration +# supports multiple data sources, custom functions for business logic, field dependencies and conditions, +# value transformations, and multi-line field definitions for complex calculations. Organization counters +# are computed directly from request details (no separate statistics API). It employs multithreading with +# configurable worker pools to parallelize request processing across the thread pool, significantly reducing +# execution time. Results are exported as structured JSON files for easy integration with downstream analytics +# tools. Built-in quality assurance includes comprehensive non-regression testing with configurable +# Warning/Critical thresholds, and user confirmation prompts when critical issues are detected. Excel export +# functionality enables generation of configurable Excel workbooks with data filtering, sorting, value +# replacement, and formula recalculation. Key features include automatic token refresh handling, retry +# mechanisms for transient API failures, progress tracking with real-time visual feedback, and support for +# complex data extraction using JSON path expressions. +import json +import logging +import msvcrt +import os +import re +import sys +import threading +import traceback +from collections import defaultdict +from concurrent.futures import ThreadPoolExecutor, as_completed +from datetime import timedelta, datetime +from time import perf_counter, sleep +import functools + +import httpx +import openpyxl +import questionary +from tqdm import tqdm +from rich.console import Console + +# Import centralized constants (SINGLE SOURCE OF TRUTH) +from do_dashboard_constants import ( + REQUESTS_FILE_NAME, + ORGANIZATIONS_FILE_NAME, + OLD_FILE_SUFFIX, + DASHBOARD_CONFIG_FILE_NAME, + REQUESTS_MAPPING_TABLE_NAME, + ORGANIZATIONS_MAPPING_TABLE_NAME, + ORG_CENTER_MAPPING_FILE_NAME, + ORG_CENTER_MAPPING_TABLE_NAME, + DEFAULT_USER_NAME, + DEFAULT_PASSWORD, + IAM_URL, + GDD_URL, + GDD_APP_ID, + ERROR_MAX_RETRY, + WAIT_BEFORE_RETRY, + WAIT_BEFORE_NEW_BATCH_OF_RETRIES, + MAX_BATCHS_OF_RETRIES, + MAX_THREADS, + DO_FILTERS, + DO_WORKLIST_PAGE_SIZE, + BAR_N_FMT_WIDTH, + BAR_TOTAL_FMT_WIDTH, + BAR_TIME_WIDTH, + BAR_RATE_WIDTH, + LOG_FILE_NAME, + API_TIMEOUT, + API_AUTH_LOGIN_ENDPOINT, + API_AUTH_CONFIG_TOKEN_ENDPOINT, + API_AUTH_REFRESH_TOKEN_ENDPOINT, + API_DO_WORKLIST_ENDPOINT, + API_DO_REQUEST_DETAIL_ENDPOINT, + API_DO_PROFESSIONALS_ENDPOINT +) + +# Import refactored modules +from do_dashboard_utils import ( + get_nested_value, + get_httpx_client, + clear_httpx_client, + get_thread_position, + get_config_path, + thread_local_storage, + run_with_context +) +from do_dashboard_quality_checks import ( + backup_output_files, + run_quality_checks, + run_check_only_mode, + set_dependencies as quality_set_dependencies, + enable_debug_mode +) +from do_dashboard_excel_export import ( + prepare_excel_export, + export_excel_only, + run_normal_mode_export, + set_dependencies as excel_set_dependencies +) + +logging.basicConfig(level=logging.WARNING, format='%(asctime)s - %(levelname)s - %(message)s', filename=LOG_FILE_NAME, + filemode='w') + + +# ============================================================================ +# BLOCK 1: CONFIGURATION & BASE INFRASTRUCTURE +# ============================================================================ + +# NOTE: All constants are imported from do_dashboard_constants.py (SINGLE SOURCE OF TRUTH) + +# --- Global Variables --- +access_token = "" +refresh_token = "" +threads_list = [] +_token_refresh_lock = threading.Lock() +on_retry_exhausted = "ask" # "ask" | "ignore" | "abort" — set at startup +_stored_username = "" # Credentials stored at login for automatic re-login +_stored_password = "" +_threads_list_lock = threading.Lock() +global_pbar = None +_global_pbar_lock = threading.Lock() +_user_interaction_lock = threading.Lock() + +# Global variables (mutable, set at runtime - not constants) +requests_mapping_config = [] +organizations_mapping_config = [] +excel_export_config = None +excel_export_enabled = False + +subtasks_thread_pool = ThreadPoolExecutor(40) +httpx_clients = {} +console = Console() + +# Share global variables with utility modules (required for thread-safe operations) +import do_dashboard_utils +do_dashboard_utils.httpx_clients = httpx_clients +do_dashboard_utils.threads_list = threads_list +do_dashboard_utils._threads_list_lock = _threads_list_lock + +# Inject console instance to modules +quality_set_dependencies(console) +excel_set_dependencies(console) + +# Detect and enable debug mode if --debug flag is present (and remove it from argv) +if "--debug" in sys.argv: + sys.argv.remove("--debug") + enable_debug_mode() + +# --- Progress Bar Configuration --- +custom_bar_format = ("{l_bar}{bar}" + f" {{n_fmt:>{BAR_N_FMT_WIDTH}}}/{{total_fmt:<{BAR_TOTAL_FMT_WIDTH}}} " + f"[{{elapsed:<{BAR_TIME_WIDTH}}}<{{remaining:>{BAR_TIME_WIDTH}}}, " + f"{{rate_fmt:>{BAR_RATE_WIDTH}}}]{{postfix}}") + + +# ============================================================================ +# BLOCK 2: DECORATORS & RESILIENCE +# ============================================================================ + +def new_token(): + """Refresh access token using the refresh token""" + global access_token, refresh_token + with _token_refresh_lock: + for attempt in range(ERROR_MAX_RETRY): + try: + client = get_httpx_client() + client.base_url = GDD_URL + response = client.post(API_AUTH_REFRESH_TOKEN_ENDPOINT, + headers={"Authorization": f"Bearer {access_token}"}, + json={"refresh_token": refresh_token}, timeout=20) + response.raise_for_status() + access_token = response.json()["access_token"] + refresh_token = response.json()["refresh_token"] + return + except httpx.RequestError as exc: + logging.warning(f"Refresh Token Error (Attempt {attempt + 1}) : {exc}") + clear_httpx_client() + except httpx.HTTPStatusError as exc: + logging.warning( + f"Refresh Token Error (Attempt {attempt + 1}) : {exc.response.status_code} for Url {exc.request.url}") + clear_httpx_client() + finally: + if attempt < ERROR_MAX_RETRY - 1: + sleep(WAIT_BEFORE_RETRY) + # Refresh token exhausted — attempt full re-login with stored credentials + logging.warning("Refresh token exhausted. Attempting re-login with stored credentials.") + _do_login(_stored_username, _stored_password) + logging.info("Re-login successful. New tokens acquired.") + + +def api_call_with_retry(func): + """Decorator for API calls with automatic retry and token refresh on 401 errors""" + @functools.wraps(func) + def wrapper(*args, **kwargs): + func_name = func.__name__ + total_attempts = 0 + batch_count = 1 + + while True: + for attempt in range(ERROR_MAX_RETRY): + total_attempts += 1 + try: + return func(*args, **kwargs) + except (httpx.RequestError, httpx.HTTPStatusError) as exc: + logging.warning(f"Error in {func_name} (Attempt {total_attempts}): {exc}") + + clear_httpx_client() + + if isinstance(exc, httpx.HTTPStatusError) and exc.response.status_code == 401: + logging.info(f"Token expired for {func_name}. Refreshing token.") + try: + new_token() + except (httpx.RequestError, httpx.HTTPStatusError) as token_exc: + logging.warning(f"Token refresh/re-login failed for {func_name}: {token_exc}") + + if attempt < ERROR_MAX_RETRY - 1: + sleep(WAIT_BEFORE_RETRY) + else: + if batch_count < MAX_BATCHS_OF_RETRIES: + logging.warning(f"Batch {batch_count}/{MAX_BATCHS_OF_RETRIES} failed for {func_name}. " + f"Waiting {WAIT_BEFORE_NEW_BATCH_OF_RETRIES}s before automatic retry batch.") + batch_count += 1 + sleep(WAIT_BEFORE_NEW_BATCH_OF_RETRIES) + break + else: + with _user_interaction_lock: + if on_retry_exhausted == "ignore": + ctx = getattr(thread_local_storage, "current_request_context", {"id": "Unknown"}) + logging.warning(f"[AUTO-IGNORE] Skipping {func_name} for Request {ctx['id']}. Error: {exc}") + return None + + elif on_retry_exhausted == "abort": + logging.critical(f"[AUTO-ABORT] Stopping script after persistent error in {func_name}. Error: {exc}") + raise httpx.RequestError(message=f"Persistent error in {func_name} (auto-aborted)") + + else: # "ask" — display error then interactive prompt + console.print(f"\n[bold red]Persistent error in {func_name} after {batch_count} batches ({total_attempts} attempts).[/bold red]") + console.print(f"[red]Exception: {exc}[/red]") + + choice = questionary.select( + f"What would you like to do for {func_name}?", + choices=[ + "Retry (try another batch of retries)", + "Ignore (return None and continue)", + "Stop script (critical error)" + ] + ).ask() + + if choice == "Retry (try another batch of retries)": + logging.info(f"User chose to retry {func_name}. Restarting batch sequence.") + batch_count = 1 + break + elif choice == "Ignore (return None and continue)": + ctx = getattr(thread_local_storage, "current_request_context", {"id": "Unknown"}) + logging.warning(f"[IGNORE] User opted to skip {func_name} for Request {ctx['id']}. Error: {exc}") + return None + else: + logging.critical(f"User chose to stop script after persistent error in {func_name}.") + raise httpx.RequestError(message=f"Persistent error in {func_name} (stopped by user)") + + return wrapper + + +# ============================================================================ +# BLOCK 3: AUTHENTICATION +# ============================================================================ + +def _do_login(username, password): + """Performs the two-step authentication (IAM → GDD) with the given credentials. + Updates global access_token and refresh_token on success. + Raises httpx.RequestError or httpx.HTTPStatusError on failure. + Must NOT acquire _token_refresh_lock (caller's responsibility). + """ + global access_token, refresh_token + + # Step 1: IAM login + client = get_httpx_client() + client.base_url = IAM_URL + response = client.post(API_AUTH_LOGIN_ENDPOINT, + json={"username": username, "password": password}, + timeout=20) + response.raise_for_status() + master_token = response.json()["access_token"] + user_id = response.json()["userId"] + + # Step 2: GDD config-token + client = get_httpx_client() + client.base_url = GDD_URL + response = client.post(API_AUTH_CONFIG_TOKEN_ENDPOINT, + headers={"Authorization": f"Bearer {master_token}"}, + json={"userId": user_id, "clientId": GDD_APP_ID, + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36"}, + timeout=20) + response.raise_for_status() + access_token = response.json()["access_token"] + refresh_token = response.json()["refresh_token"] + + +def login(): + global _stored_username, _stored_password + + user_name = (questionary.text("login :", default=DEFAULT_USER_NAME).ask()) + password = (questionary.password("password :", default=DEFAULT_PASSWORD).ask()) + if not (user_name and password): + return "Exit" + + try: + _do_login(user_name, password) + except httpx.RequestError as exc: + print(f"Login Error : {exc}") + logging.warning(f"Login Error : {exc}") + return "Error" + except httpx.HTTPStatusError as exc: + print(f"Login Error : {exc.response.status_code} for Url {exc.request.url}") + logging.warning(f"Login Error : {exc.response.status_code} for Url {exc.request.url}") + return "Error" + + _stored_username = user_name + _stored_password = password + print() + print("Login Success") + return "Success" + + +# ============================================================================ +# BLOCK 3B: STARTUP PARAMETERS & FILE UTILITIES +# ============================================================================ + +def ask_on_retry_exhausted(): + """Asks the user what to do when all API retry batches are exhausted.""" + global on_retry_exhausted + choice = questionary.select( + "On retry exhausted :", + choices=[ + "Ask (interactive prompt)", + "Ignore (return None and continue)", + "Abort (stop script)" + ] + ).ask() + + if choice is None or choice == "Ask (interactive prompt)": + on_retry_exhausted = "ask" + elif choice == "Ignore (return None and continue)": + on_retry_exhausted = "ignore" + else: + on_retry_exhausted = "abort" + + +def wait_for_scheduled_launch(): + """Asks the user when to start the processing and waits if needed. + Options: Immediately / In X minutes / At HH:MM + """ + choice = questionary.select( + "When to start processing ?", + choices=["Immediately", "In X minutes", "At HH:MM"] + ).ask() + + if choice is None or choice == "Immediately": + return + + if choice == "In X minutes": + minutes_str = questionary.text( + "Number of minutes :", + validate=lambda x: x.isdigit() and int(x) > 0 + ).ask() + if not minutes_str: + return + target_time = datetime.now() + timedelta(minutes=int(minutes_str)) + + else: # "At HH:MM" + time_str = questionary.text( + "Start time (HH:MM) :", + validate=lambda x: bool(re.match(r'^\d{2}:\d{2}$', x)) and + 0 <= int(x.split(':')[0]) <= 23 and + 0 <= int(x.split(':')[1]) <= 59 + ).ask() + if not time_str: + return + now = datetime.now() + h, m = int(time_str.split(':')[0]), int(time_str.split(':')[1]) + target_time = now.replace(hour=h, minute=m, second=0, microsecond=0) + if target_time <= now: + console.print("[yellow]⚠ Specified time is already past. Starting immediately.[/yellow]") + return + + print() + try: + while True: + remaining = target_time - datetime.now() + if remaining.total_seconds() <= 0: + break + total_secs = int(remaining.total_seconds()) + h = total_secs // 3600 + m = (total_secs % 3600) // 60 + s = total_secs % 60 + target_str = target_time.strftime('%H:%M:%S') + print(f"\r Starting in {h:02d}:{m:02d}:{s:02d}... (at {target_str}) — Ctrl+C to cancel ", + end="", flush=True) + sleep(1) + while msvcrt.kbhit(): + msvcrt.getwch() + print() + console.print("[green]✓ Starting processing.[/green]") + except KeyboardInterrupt: + print() + console.print("[bold red]Launch cancelled by user.[/bold red]") + raise SystemExit(0) + + +def load_json_file(filename): + """Load a JSON file from disk. Returns parsed data or None on error.""" + if os.path.exists(filename): + try: + with open(filename, 'r', encoding='utf-8') as f: + return json.load(f) + except Exception as e: + logging.warning(f"Could not load JSON file '{filename}': {e}") + console.print(f"[yellow]⚠ Warning: Could not load JSON file '{filename}': {e}[/yellow]") + return None + + +# ============================================================================ +# BLOCK 4: CONFIGURATION LOADING +# ============================================================================ + +def load_requests_mapping_config(): + """Loads and validates the requests mapping configuration from the Excel file.""" + global requests_mapping_config + config_path = os.path.join(get_config_path(), DASHBOARD_CONFIG_FILE_NAME) + + try: + workbook = openpyxl.load_workbook(config_path, data_only=True) + except FileNotFoundError: + error_msg = f"Error: Configuration file not found at: {config_path}" + logging.critical(error_msg) + console.print(f"[bold red]{error_msg}[/bold red]") + raise Exception(error_msg) + + if REQUESTS_MAPPING_TABLE_NAME not in workbook.sheetnames: + error_msg = f"Error: Sheet '{REQUESTS_MAPPING_TABLE_NAME}' not found in the configuration file." + logging.critical(error_msg) + console.print(f"[bold red]{error_msg}[/bold red]") + raise Exception(error_msg) + + sheet = workbook[REQUESTS_MAPPING_TABLE_NAME] + headers = [cell.value for cell in sheet[1]] + + temp_config = [] + + for row_index, row in enumerate(sheet.iter_rows(min_row=2, values_only=True), start=2): + field_config = dict(zip(headers, row)) + + if field_config.get("source_name") == "Not Specified": + continue + + field_name = field_config.get("field_name") + if not field_name or not isinstance(field_name, str): + error_msg = f"Error in config file, row {row_index}: 'field_name' is mandatory." + logging.critical(error_msg) + console.print(f"[bold red]{error_msg}[/bold red]") + raise Exception(error_msg) + field_config["field_name"] = re.sub(r'\s*\([^)]*\)$', '', field_name).strip() + + # Parse source_id prefix + source_id_raw = field_config.get("source_id", "") + if source_id_raw and isinstance(source_id_raw, str): + if source_id_raw.startswith("q_id="): + field_config["source_type"] = "q_id" + field_config["source_value"] = source_id_raw[5:] + elif source_id_raw.startswith("q_name="): + field_config["source_type"] = "q_name" + field_config["source_value"] = source_id_raw[7:] + elif source_id_raw.startswith("q_category="): + field_config["source_type"] = "q_category" + field_config["source_value"] = source_id_raw[11:] + elif source_id_raw == "record": + field_config["source_type"] = "record" + field_config["source_value"] = None + elif source_id_raw == "request": + field_config["source_type"] = "request" + field_config["source_value"] = None + else: + field_config["source_type"] = None + field_config["source_value"] = source_id_raw + else: + field_config["source_type"] = None + field_config["source_value"] = None + + for json_field in ["field_path", "field_condition", "true_if_any", "value_labels"]: + value = field_config.get(json_field) + if value: + if not isinstance(value, str): + error_msg = f"Error in config file, row {row_index}, field '{json_field}': Invalid value, must be a JSON string." + logging.critical(error_msg) + console.print(f"[bold red]{error_msg}[/bold red]") + raise Exception(error_msg) + try: + field_config[json_field] = json.loads(value) + except json.JSONDecodeError: + error_msg = f"Error in config file, row {row_index}, field '{json_field}': Invalid JSON format." + logging.critical(error_msg) + console.print(f"[bold red]{error_msg}[/bold red]") + raise Exception(error_msg) + else: + field_config[json_field] = None + + if not field_config.get("field_path"): + error_msg = f"Error in config file, row {row_index}: 'field_path' is mandatory when a field is specified." + logging.critical(error_msg) + console.print(f"[bold red]{error_msg}[/bold red]") + raise Exception(error_msg) + + temp_config.append(field_config) + + requests_mapping_config = temp_config + console.print(f"Loaded {len(requests_mapping_config)} fields from requests mapping configuration.", style="green") + + +def load_organizations_mapping_config(): + """Loads and validates the organizations mapping configuration from the Excel file.""" + global organizations_mapping_config + config_path = os.path.join(get_config_path(), DASHBOARD_CONFIG_FILE_NAME) + + try: + workbook = openpyxl.load_workbook(config_path, data_only=True) + except FileNotFoundError: + error_msg = f"Error: Configuration file not found at: {config_path}" + logging.critical(error_msg) + console.print(f"[bold red]{error_msg}[/bold red]") + raise Exception(error_msg) + + if ORGANIZATIONS_MAPPING_TABLE_NAME not in workbook.sheetnames: + logging.info(f"Sheet '{ORGANIZATIONS_MAPPING_TABLE_NAME}' not found. Organizations mapping is optional.") + organizations_mapping_config = [] + return + + sheet = workbook[ORGANIZATIONS_MAPPING_TABLE_NAME] + headers = [cell.value for cell in sheet[1]] + headers_filtered = [h for h in headers if h is not None] + + mapping_config = [] + try: + for row in sheet.iter_rows(min_row=2, values_only=True): + if all(cell is None for cell in row): + break + row_filtered = row[:len(headers_filtered)] + config_dict = dict(zip(headers_filtered, row_filtered)) + mapping_config.append(config_dict) + except Exception as e: + error_msg = f"Error parsing organizations mapping: {e}" + logging.critical(error_msg) + console.print(f"[bold red]{error_msg}[/bold red]") + raise Exception(error_msg) + finally: + workbook.close() + + organizations_mapping_config = mapping_config + if mapping_config: + console.print(f"Loaded {len(organizations_mapping_config)} organizations from organizations mapping configuration.", style="green") + else: + console.print("No organizations mapping found (this is optional).", style="yellow") + + +def load_do_filters_config(): + """ + Loads the DO filters from the Named Range 'DO_Filters' in the config Excel file. + The Named Range contains a JSON string representing the filters object for the worklist API. + + Returns: + dict: Filters object (e.g. {"status": "all-admin", "study": "ENDOLIFE"}) + + Raises: + Exception: If the Named Range is not found or the value is not valid JSON. + """ + config_path = os.path.join(get_config_path(), DASHBOARD_CONFIG_FILE_NAME) + + try: + workbook = openpyxl.load_workbook(config_path, data_only=True) + except FileNotFoundError: + error_msg = f"Error: Configuration file not found at: {config_path}" + logging.critical(error_msg) + console.print(f"[bold red]{error_msg}[/bold red]") + raise Exception(error_msg) + + if DO_FILTERS not in workbook.defined_names: + error_msg = f"Error: Named range '{DO_FILTERS}' not found in configuration file." + logging.critical(error_msg) + console.print(f"[bold red]{error_msg}[/bold red]") + raise Exception(error_msg) + + try: + named_range = workbook.defined_names[DO_FILTERS] + destinations = list(named_range.destinations) + if not destinations: + raise ValueError("Named range has no destinations") + sheet_name, cell_ref = destinations[0] + # Remove absolute reference markers ($) for cell access + cell_ref_clean = cell_ref.replace('$', '') + sheet = workbook[sheet_name] + cell_value = sheet[cell_ref_clean].value + except Exception as e: + error_msg = f"Error reading Named Range '{DO_FILTERS}': {e}" + logging.critical(error_msg) + console.print(f"[bold red]{error_msg}[/bold red]") + raise Exception(error_msg) + finally: + workbook.close() + + if not cell_value or not isinstance(cell_value, str): + error_msg = f"Error: Named range '{DO_FILTERS}' is empty or not a string." + logging.critical(error_msg) + console.print(f"[bold red]{error_msg}[/bold red]") + raise Exception(error_msg) + + try: + filters = json.loads(cell_value) + except json.JSONDecodeError as e: + error_msg = f"Error: Named range '{DO_FILTERS}' does not contain valid JSON: {e}" + logging.critical(error_msg) + console.print(f"[bold red]{error_msg}[/bold red]") + raise Exception(error_msg) + + console.print(f"Loaded DO filters: {filters}", style="green") + return filters + + +# ============================================================================ +# BLOCK 5: DATA SEARCH & EXTRACTION +# ============================================================================ + +def get_value_from_request(output_request, key): + """Helper to find a key in the nested output_request structure (groups → fields).""" + for group in output_request.values(): + if isinstance(group, dict) and key in group: + return group[key] + return None + + +# ============================================================================ +# BLOCK 6: CUSTOM FUNCTIONS & FIELD PROCESSING +# ============================================================================ + +def _execute_custom_function(function_name, args, output_request): + """Executes a custom function for a calculated field.""" + if function_name == "search_in_fields_using_regex": + if not args or len(args) < 2: + return "$$$$ Argument Error: search_in_fields_using_regex requires at least 2 arguments" + + regex_pattern = args[0] + field_names = args[1:] + + field_values = [] + all_undefined = True + + for field_name in field_names: + value = get_value_from_request(output_request, field_name) + field_values.append(value) + if value is not None and value != "undefined": + all_undefined = False + + if all_undefined: + return "undefined" + + try: + for value in field_values: + if isinstance(value, str) and re.search(regex_pattern, value, re.IGNORECASE): + return True + except re.error as e: + return f"$$$$ Regex Error: {e}" + + return False + + elif function_name == "extract_parentheses_content": + if not args or len(args) != 1: + return "$$$$ Argument Error: extract_parentheses_content requires 1 argument" + + field_name = args[0] + value = get_value_from_request(output_request, field_name) + + if value is None or value == "undefined": + return "undefined" + + match = re.search(r'\((.*?)\)', str(value)) + return match.group(1) if match else "undefined" + + elif function_name == "append_terminated_suffix": + if not args or len(args) != 2: + return "$$$$ Argument Error: append_terminated_suffix requires 2 arguments" + + status = get_value_from_request(output_request, args[0]) + is_terminated = get_value_from_request(output_request, args[1]) + + if status is None or status == "undefined": + return "undefined" + + if not isinstance(is_terminated, bool) or not is_terminated: + return status + + return f"{status} - AP" + + elif function_name == "if_then_else": + if not args or len(args) < 4: + return "$$$$ Argument Error: if_then_else requires at least 4 arguments" + + operator = args[0] + + def resolve_value(arg): + if isinstance(arg, bool): + return arg + if isinstance(arg, (int, float)): + return arg + if isinstance(arg, str) and arg.startswith("$"): + return arg[1:] + return get_value_from_request(output_request, arg) + + if operator == "is_true": + if len(args) != 4: + return "$$$$ Argument Error: is_true requires 4 arguments" + value = resolve_value(args[1]) + if value is None or value == "undefined": + return "undefined" + condition = (value is True) + result_if_true = resolve_value(args[2]) + result_if_false = resolve_value(args[3]) + + elif operator == "is_false": + if len(args) != 4: + return "$$$$ Argument Error: is_false requires 4 arguments" + value = resolve_value(args[1]) + if value is None or value == "undefined": + return "undefined" + condition = (value is False) + result_if_true = resolve_value(args[2]) + result_if_false = resolve_value(args[3]) + + elif operator == "all_true": + if len(args) != 4: + return "$$$$ Argument Error: all_true requires 4 arguments" + fields_arg = args[1] + if not isinstance(fields_arg, list): + return "$$$$ Argument Error: all_true requires arg1 to be a list of field names" + + conditions = [] + for field_name in fields_arg: + field_value = get_value_from_request(output_request, field_name) + if field_value is None or field_value == "undefined": + return "undefined" + conditions.append(field_value) + + condition = all(conditions) + result_if_true = resolve_value(args[2]) + result_if_false = resolve_value(args[3]) + + elif operator == "is_defined": + if len(args) != 4: + return "$$$$ Argument Error: is_defined requires 4 arguments" + value = resolve_value(args[1]) + condition = (value is not None and value != "undefined") + result_if_true = resolve_value(args[2]) + result_if_false = resolve_value(args[3]) + + elif operator == "is_undefined": + if len(args) != 4: + return "$$$$ Argument Error: is_undefined requires 4 arguments" + value = resolve_value(args[1]) + condition = (value is None or value == "undefined") + result_if_true = resolve_value(args[2]) + result_if_false = resolve_value(args[3]) + + elif operator == "all_defined": + if len(args) != 4: + return "$$$$ Argument Error: all_defined requires 4 arguments" + fields_arg = args[1] + if not isinstance(fields_arg, list): + return "$$$$ Argument Error: all_defined requires arg1 to be a list of field names" + + for field_name in fields_arg: + field_value = get_value_from_request(output_request, field_name) + if field_value is None or field_value == "undefined": + condition = False + break + else: + condition = True + + result_if_true = resolve_value(args[2]) + result_if_false = resolve_value(args[3]) + + elif operator == "==": + if len(args) != 5: + return "$$$$ Argument Error: == requires 5 arguments" + value1 = resolve_value(args[1]) + value2 = resolve_value(args[2]) + + if value1 is None or value1 == "undefined" or value2 is None or value2 == "undefined": + return "undefined" + + condition = (value1 == value2) + result_if_true = resolve_value(args[3]) + result_if_false = resolve_value(args[4]) + + elif operator == "!=": + if len(args) != 5: + return "$$$$ Argument Error: != requires 5 arguments" + value1 = resolve_value(args[1]) + value2 = resolve_value(args[2]) + + if value1 is None or value1 == "undefined" or value2 is None or value2 == "undefined": + return "undefined" + + condition = (value1 != value2) + result_if_true = resolve_value(args[3]) + result_if_false = resolve_value(args[4]) + + else: + return f"$$$$ Unknown Operator: {operator}" + + return result_if_true if condition else result_if_false + + elif function_name == "extract_value_from_array": + # Args: [array_field_name, key_path, search_value, value_path] + # array_field_name : name of an already-computed field in output_request containing the array + # key_path : relative path (list) to the key attribute within each array item + # search_value : JSON value to match against (string, number, bool, object...) + # value_path : relative path (list) to the value to extract from the matched item + if not args or len(args) != 4: + return "$$$$ Argument Error: extract_value_from_array requires 4 arguments" + + array_field_name, key_path, search_value, value_path = args + + if not isinstance(key_path, list): + return "$$$$ Argument Error: extract_value_from_array key_path (arg2) must be a list" + if not isinstance(value_path, list): + return "$$$$ Argument Error: extract_value_from_array value_path (arg4) must be a list" + + array = get_value_from_request(output_request, array_field_name) + + if array is None or array == "undefined": + return "undefined" + if not isinstance(array, list): + return "$$$$ Format Error : Array expected" + + for item in array: + if get_nested_value(item, key_path) == search_value: + return get_nested_value(item, value_path, default="undefined") + + return "undefined" + + return f"$$$$ Unknown Custom Function: {function_name}" + + +def process_requests_mapping(output_request, request_data): + """Processes and adds the requests mapping fields to the output request dictionary.""" + for field in requests_mapping_config: + field_name = field["field_name"] + field_group = field.get("field_group", "Extended_Fields") + final_value = "undefined" + + # Check condition + condition_field_name = field.get("field_condition") + if condition_field_name: + condition_value = get_value_from_request(output_request, condition_field_name) + + if condition_value is None or condition_value == "undefined": + final_value = "undefined" + elif not isinstance(condition_value, bool): + final_value = "$$$$ Condition Field Error" + elif not condition_value: + final_value = "N/A" + + # If condition allows, process the field + if final_value == "undefined": + source_name = field.get("source_name") + source_type = field.get("source_type") + field_path = field.get("field_path") + + # Get raw value from appropriate source + if source_name == "Calculated": + function_name = field.get("source_id") + args = field_path + final_value = _execute_custom_function(function_name, args, output_request) + elif source_type == "request": + final_value = get_nested_value(request_data, field_path, default="undefined") + else: + # source types not used in DO (q_id, q_name, q_category, record, etc.) + # return undefined to allow future extensibility + final_value = "undefined" + + # If the source data itself is missing, log a warning but continue + if final_value == "$$$$ No Data": + request_id = request_data.get("id", "Unknown") if isinstance(request_data, dict) else "Unknown" + logging.warning(f"No '{source_type}' data source found for Request {request_id} (Field: {field_name})") + final_value = "undefined" + + # Post-processing: Apply true_if_any and value_labels transformations + if final_value not in ["undefined", "$$$$ No Data"]: + check_values = field.get("true_if_any") + if check_values: + raw_value_set = set(final_value if isinstance(final_value, list) else [final_value]) + check_values_set = set(check_values if isinstance(check_values, list) else [check_values]) + final_value = not raw_value_set.isdisjoint(check_values_set) + + value_labels = field.get("value_labels") + if value_labels and final_value not in ["$$$$ Format Error : Array expected"]: + found = False + for label_map in value_labels: + if label_map.get("value") == final_value: + final_value = get_nested_value(label_map, ["text", "fr"], default=f"$$$$ Value Error : {final_value}") + found = True + break + if not found: + final_value = f"$$$$ Value Error : {final_value}" + + # Post-processing: If the value is a list, join it with a pipe + if isinstance(final_value, list): + final_value = "|".join(map(str, final_value)) + + # Post-processing: Format score dictionaries + if isinstance(final_value, dict) and 'total' in final_value and 'max' in final_value: + final_value = f"{final_value['total']}/{final_value['max']}" + + # Post-processing: Apply field template + field_template = field.get("field_template") + if field_template and final_value not in ["undefined", "N/A"] and isinstance(final_value, (str, int, float, bool)): + final_value = field_template.replace("$value", str(final_value)) + + if field_group not in output_request: + output_request[field_group] = {} + output_request[field_group][field_name] = final_value + + +# ============================================================================ +# BLOCK 7: BUSINESS API CALLS +# ============================================================================ + +@api_call_with_retry +def get_worklist_page(filters, page, page_size): + """Fetches one page of the diagnostic order worklist.""" + client = get_httpx_client() + client.base_url = GDD_URL + response = client.post( + API_DO_WORKLIST_ENDPOINT, + headers={"Authorization": f"Bearer {access_token}"}, + json={ + "lang": "fr-FR", + "filters": filters, + "limit": page_size, + "page": page, + "sort": [] + }, + timeout=API_TIMEOUT + ) + response.raise_for_status() + return response.json() + + +@api_call_with_retry +def get_request_detail_by_id(request_id): + """Fetches the full validation detail for a single request.""" + client = get_httpx_client() + client.base_url = GDD_URL + response = client.get( + f"{API_DO_REQUEST_DETAIL_ENDPOINT}/{request_id}/validation", + headers={"Authorization": f"Bearer {access_token}"}, + timeout=API_TIMEOUT + ) + response.raise_for_status() + return response.json() + + +@api_call_with_retry +def get_professionals(ids): + """ + Fetches professional display names for a list of IDs (prescriber / requester). + IDs are deduplicated before the call. Results are matched by ID for robustness. + + Returns: + dict: {professional_id: display_name} + """ + if not ids: + return {} + client = get_httpx_client() + client.base_url = GDD_URL + response = client.post( + API_DO_PROFESSIONALS_ENDPOINT, + headers={"Authorization": f"Bearer {access_token}"}, + json={"ids": ids}, + timeout=API_TIMEOUT + ) + response.raise_for_status() + data = response.json().get("data", []) + + result = {} + for pro in data: + pro_id = get_nested_value(pro, ["metadata", "id"]) + display = pro.get("display") + if pro_id: + result[pro_id] = display + return result + + +# ============================================================================ +# BLOCK 7b: ORGANIZATION CENTER MAPPING +# ============================================================================ + +def load_organization_center_mapping(): + """ + Loads organization ↔ center mapping from Excel file in script directory. + + Returns: + dict: {organization_name_normalized: center_name} or {} if error/skip + """ + mapping_file = ORG_CENTER_MAPPING_FILE_NAME + + if not os.path.exists(mapping_file): + console.print(f"[yellow]⚠ Mapping file not found at: {mapping_file}. Skipping center mapping.[/yellow]") + return {} + + try: + workbook = openpyxl.load_workbook(mapping_file) + except Exception as e: + console.print(f"[yellow]⚠ Error loading mapping file: {e}. Skipping center mapping.[/yellow]") + logging.warning(f"Error loading mapping file: {e}") + return {} + + if ORG_CENTER_MAPPING_TABLE_NAME not in workbook.sheetnames: + console.print(f"[yellow]⚠ Sheet '{ORG_CENTER_MAPPING_TABLE_NAME}' not found in mapping file. Skipping center mapping.[/yellow]") + return {} + + sheet = workbook[ORG_CENTER_MAPPING_TABLE_NAME] + headers = [cell.value for cell in sheet[1]] + + if "Organization_Name" not in headers or "Center_Name" not in headers: + console.print(f"[yellow]⚠ Required columns 'Organization_Name' or 'Center_Name' not found in mapping file. Skipping center mapping.[/yellow]") + return {} + + mapping_rows = [] + try: + for row in sheet.iter_rows(min_row=2, values_only=True): + if all(cell is None for cell in row): + continue + row_dict = dict(zip(headers, row)) + org_name = row_dict.get("Organization_Name") + center_name = row_dict.get("Center_Name") + if org_name and center_name: + mapping_rows.append({"Organization_Name": org_name, "Center_Name": center_name}) + except Exception as e: + console.print(f"[yellow]⚠ Error reading mapping file rows: {e}. Skipping center mapping.[/yellow]") + logging.warning(f"Error reading mapping file rows: {e}") + return {} + + # Validate: check for duplicates on normalized versions + org_names_normalized = {} + center_names_normalized = {} + + for row in mapping_rows: + org_name_raw = row["Organization_Name"] + center_name_raw = row["Center_Name"] + + org_normalized = org_name_raw.strip().lower() if isinstance(org_name_raw, str) else str(org_name_raw).strip().lower() + center_normalized = center_name_raw.strip().lower() if isinstance(center_name_raw, str) else str(center_name_raw).strip().lower() + + if org_normalized in org_names_normalized: + console.print(f"[yellow]⚠ Duplicate found in Organization_Name: '{org_name_raw}'. Skipping center mapping.[/yellow]") + return {} + + if center_normalized in center_names_normalized: + console.print(f"[yellow]⚠ Duplicate found in Center_Name: '{center_name_raw}'. Skipping center mapping.[/yellow]") + return {} + + org_names_normalized[org_normalized] = org_name_raw + center_names_normalized[center_normalized] = center_name_raw + + # Build mapping dict + mapping_dict = {} + for row in mapping_rows: + org_name_raw = row["Organization_Name"] + center_name_raw = row["Center_Name"] + org_normalized = org_name_raw.strip().lower() if isinstance(org_name_raw, str) else str(org_name_raw).strip().lower() + center_clean = center_name_raw.strip() if isinstance(center_name_raw, str) else str(center_name_raw).strip() + mapping_dict[org_normalized] = center_clean + + return mapping_dict + + +# ============================================================================ +# BLOCK 8: REQUEST PROCESSING +# ============================================================================ + +def _process_single_request(worklist_request, mapping_dict): + """ + Processes a single request from the worklist: + 1. Fetches full request detail + 2. Fetches prescriber and requester names (deduplicated single API call) + 3. Injects enrichment data (names, identity fields, center name, status override) + 4. Applies requests mapping to produce the output object + + Args: + worklist_request: Request object from the worklist (root-level fields available) + mapping_dict: Organization → center name mapping dict + + Returns: + Tuple of (output_request, request_meta) where request_meta contains + raw fields needed for organization building and sorting. + """ + request_id = worklist_request.get("id") + + # Set thread-local context for detailed error logging in decorators + ctx = {"id": request_id} + thread_local_storage.current_request_context = ctx + + # --- 1. Fetch request detail --- + request_detail = get_request_detail_by_id(request_id) + if request_detail is None: + request_detail = {} + + # --- 2. Fetch professional names (prescriber + requester, deduplicated) --- + prescriber_id = worklist_request.get("prescriber") + requester_id = worklist_request.get("requester") + + # Deduplicate IDs before API call + unique_ids = list({pid for pid in [prescriber_id, requester_id] if pid}) + professionals = get_professionals(unique_ids) if unique_ids else {} + + # Inject professional names (None if not found) + request_detail["prescriberName"] = professionals.get(prescriber_id) if prescriber_id else None + request_detail["requesterName"] = professionals.get(requester_id) if requester_id else None + + # --- 3. Inject patient identity fields from worklist --- + identity = worklist_request.get("identity") or {} + request_detail["lastname"] = identity.get("lastname") + request_detail["firstname"] = identity.get("firstname") + request_detail["birthday"] = identity.get("birthday") + + # --- 4. Status override: diagnostic_status takes precedence if defined --- + diagnostic_status = request_detail.get("diagnostic_status") + if diagnostic_status is not None and diagnostic_status != "": + request_detail["status"] = diagnostic_status + + # --- 5. Center mapping: inject Center_Name from labeledOrganization --- + labeled_org = worklist_request.get("labeledOrganization") + if labeled_org: + org_normalized = labeled_org.strip().lower() + request_detail["Center_Name"] = mapping_dict.get(org_normalized, labeled_org) + else: + request_detail["Center_Name"] = None + + # Also inject organization and labeledOrganization for mapping access + request_detail["organization"] = worklist_request.get("organization") + request_detail["labeledOrganization"] = labeled_org + + # --- 6. Apply requests mapping to produce output object --- + output_request = {} + process_requests_mapping(output_request, request_detail) + + # --- 7. Build meta for organization building and sorting --- + request_meta = { + "org_id": worklist_request.get("organization"), + "org_name": labeled_org, + "center_name": request_detail.get("Center_Name"), + "status": request_detail.get("status"), + "diagnostic_result": request_detail.get("diagnostic_result"), + "lastname": request_detail.get("lastname"), + "firstname": request_detail.get("firstname"), + "id": request_id + } + + return output_request, request_meta + + +# ============================================================================ +# BLOCK 9: ORGANIZATIONS BUILDING +# ============================================================================ + +def build_organizations(request_metas): + """ + Builds the organizations summary list from collected request metadata. + + Each organization entry contains the organization identity and counters + derived from the status and diagnostic_result of its requests. + + Args: + request_metas: List of request_meta dicts (from _process_single_request) + + Returns: + List of organization dicts, sorted by center_name then id + """ + org_map = {} + + for meta in request_metas: + org_id = meta.get("org_id") + if not org_id: + continue + + if org_id not in org_map: + org_map[org_id] = { + "id": org_id, + "name": meta.get("org_name"), + "center_name": meta.get("center_name"), + "total_count": 0, + "sent_count": 0, # status == "active" + "accepted_count": 0, # status == "accepted" + "rejected_count": 0, # status == "rejected" + "sequencing_count": 0, # status == "waiting" + "ai_count": 0, # status == "in progress" + "result_available_count": 0, # status == "finished" + "report_available_count": 0, # status == "signed" + "positive_count": 0, # diagnostic_result == "POSITIVE" + "negative_count": 0, # diagnostic_result == "NEGATIVE" + "uninterpretable_count": 0 # diagnostic_result == "UNINTERPRETABLE" + } + + org = org_map[org_id] + org["total_count"] += 1 + + status = meta.get("status") + if status == "active": + org["sent_count"] += 1 + elif status == "accepted": + org["accepted_count"] += 1 + elif status == "rejected": + org["rejected_count"] += 1 + elif status == "waiting": + org["sequencing_count"] += 1 + elif status == "in progress": + org["ai_count"] += 1 + elif status == "finished": + org["result_available_count"] += 1 + elif status == "signed": + org["report_available_count"] += 1 + + diagnostic_result = meta.get("diagnostic_result") + if diagnostic_result == "POSITIVE": + org["positive_count"] += 1 + elif diagnostic_result == "NEGATIVE": + org["negative_count"] += 1 + elif diagnostic_result == "UNINTERPRETABLE": + org["uninterpretable_count"] += 1 + + organizations = list(org_map.values()) + organizations.sort(key=lambda o: (o.get("center_name") or "", o.get("id") or "")) + return organizations + + +# ============================================================================ +# BLOCK 10: MAIN EXECUTION +# ============================================================================ + +def main(): + global global_pbar, excel_export_config, excel_export_enabled + + # --- Check for CLI Check_Only mode --- + check_only_mode = "--check-only" in sys.argv + + if check_only_mode: + run_check_only_mode(sys.argv) + return + + # --- Check for CLI Excel_Only mode --- + excel_only_mode = "--excel-only" in sys.argv + + if excel_only_mode: + print() + load_requests_mapping_config() + load_organizations_mapping_config() + + export_excel_only(sys.argv, REQUESTS_FILE_NAME, ORGANIZATIONS_FILE_NAME, + requests_mapping_config, organizations_mapping_config) + return + + # === NORMAL MODE: Full data collection === + + print() + login_status = login() + + while login_status == "Error": + login_status = login() + if login_status == "Exit": + return + + print() + number_of_threads = int((questionary.text("Number of threads :", default="12", + validate=lambda x: x.isdigit() and 0 < int(x) <= MAX_THREADS).ask())) + + print() + ask_on_retry_exhausted() + + print() + wait_for_scheduled_launch() + + print() + load_requests_mapping_config() + load_organizations_mapping_config() + + # Load DO filters from config + print() + do_filters = load_do_filters_config() + + # Load and validate Excel export configuration + print() + console.print("[bold cyan]Loading Excel export configuration...[/bold cyan]") + + excel_export_config, has_config_critical, _ = \ + prepare_excel_export(requests_mapping_config, organizations_mapping_config) + + if has_config_critical: + print() + answer = questionary.confirm( + "⚠ Critical configuration errors detected. Continue anyway?", + default=False + ).ask() + if not answer: + console.print("[bold red]Aborted by user[/bold red]") + return + else: + excel_export_enabled = False + else: + excel_export_enabled = True if excel_export_config else False + + # Load center mapping + print() + print("Loading organization center mapping...") + mapping_dict = load_organization_center_mapping() + + # === FETCH WORKLIST (paginated) === + print() + start_time = perf_counter() + + with console.status("[bold green]Fetching worklist (page 1)...", spinner="dots"): + first_page = get_worklist_page(do_filters, 1, DO_WORKLIST_PAGE_SIZE) + + metadata = first_page.get("metadata", {}) + total_requests = metadata.get("total", 0) + total_pages = metadata.get("pages", 1) + + print(f"{total_requests} requests across {total_pages} pages...") + print() + + # === SUBMIT ALL REQUESTS TO THREAD POOL AS PAGES ARRIVE === + all_futures = [] + + with ThreadPoolExecutor(max_workers=number_of_threads) as thread_pool: + + # Progress bar 1: page fetching + with tqdm(total=total_pages, unit="page", + desc=f"{'Fetching pages':<52}", + position=0, leave=True, + bar_format=custom_bar_format) as pages_pbar: + + # Submit first page requests + for worklist_request in first_page.get("data", []): + f = thread_pool.submit(run_with_context, _process_single_request, + {"id": worklist_request.get("id")}, + worklist_request, mapping_dict) + all_futures.append(f) + pages_pbar.update(1) + + # Fetch and submit remaining pages + for page_num in range(2, total_pages + 1): + page_data = get_worklist_page(do_filters, page_num, DO_WORKLIST_PAGE_SIZE) + for worklist_request in page_data.get("data", []): + f = thread_pool.submit(run_with_context, _process_single_request, + {"id": worklist_request.get("id")}, + worklist_request, mapping_dict) + all_futures.append(f) + pages_pbar.update(1) + + print() + + # Progress bar 2: request processing + all_results = [] # list of (output_request, request_meta) + + with tqdm(total=total_requests, unit="req.", + desc=f"{'Processing requests':<52}", + position=0, leave=True, + bar_format=custom_bar_format) as processing_pbar: + + global_pbar = processing_pbar + + for future in as_completed(all_futures): + try: + result = future.result() + all_results.append(result) + except Exception as exc: + logging.critical(f"Critical exception in request worker: {exc}", exc_info=True) + print(f"\nCRITICAL ERROR in request processing thread:") + print(f"Exception: {exc}") + traceback.print_exc() + thread_pool.shutdown(wait=False, cancel_futures=True) + raise + finally: + with _global_pbar_lock: + if global_pbar: + global_pbar.update(1) + + # === SORT RESULTS === + print() + print() + print("Sorting results...") + + all_results.sort(key=lambda x: ( + x[1].get("lastname") or "", + x[1].get("firstname") or "", + x[1].get("id") or "" + )) + + output_requests = [r[0] for r in all_results] + request_metas = [r[1] for r in all_results] + + # === BUILD ORGANIZATIONS === + print("Building organizations summary...") + organizations_list = build_organizations(request_metas) + + try: + # === QUALITY CHECKS === + print() + has_regression_critical = run_quality_checks( + current_requests=output_requests, + old_requests_filename=REQUESTS_FILE_NAME + ) + + # === CHECK FOR CRITICAL ISSUES AND ASK USER CONFIRMATION === + if has_regression_critical: + print() + console.print("[bold red]⚠ CRITICAL issues detected in quality checks![/bold red]") + confirm_write = questionary.confirm( + "Do you want to write the results anyway?", + default=True + ).ask() + + if not confirm_write: + console.print("[yellow]✗ Output writing cancelled by user. Files were not modified.[/yellow]") + console.print("[yellow] You can re-run the script to try again.[/yellow]") + print() + print(f"Elapsed time : {str(timedelta(seconds=perf_counter() - start_time))}") + return + + # === BACKUP OLD FILES === + backup_output_files() + + # === WRITE NEW FILES === + print("Writing files...") + + with open(REQUESTS_FILE_NAME, 'w', encoding='utf-8') as f_json: + json.dump(output_requests, f_json, indent=4, ensure_ascii=False) + with open(ORGANIZATIONS_FILE_NAME, 'w', encoding='utf-8') as f_json: + json.dump(organizations_list, f_json, indent=4, ensure_ascii=False) + + console.print("[green]✓ Data saved to JSON files[/green]") + print() + + # === EXCEL EXPORT === (temporarily disabled for JSON generation testing) + # run_normal_mode_export(excel_export_enabled, excel_export_config, + # requests_mapping_config, organizations_mapping_config) + + except IOError as io_err: + logging.critical(f"Error while writing JSON file : {io_err}") + print(f"Error while writing JSON file : {io_err}") + except Exception as exc: + logging.critical(f"Error during final processing : {exc}") + print(f"Error during final processing : {exc}") + + print() + print(f"Elapsed time : {str(timedelta(seconds=perf_counter() - start_time))}") + + +if __name__ == '__main__': + + try: + main() + except Exception as e: + logging.critical(f"Script terminated prematurely due to an exception: {e}", exc_info=True) + print(f"Script stopped due to an error : {e}") + finally: + if 'subtasks_thread_pool' in globals() and subtasks_thread_pool: + subtasks_thread_pool.shutdown(wait=False, cancel_futures=True) + print('\n') + input("Press Enter to exit...") diff --git a/do_dashboard_check_only-exe.bat b/do_dashboard_check_only-exe.bat new file mode 100644 index 0000000..d11833c --- /dev/null +++ b/do_dashboard_check_only-exe.bat @@ -0,0 +1,3 @@ +@echo off +do_dashboard.exe --check-only %* + diff --git a/do_dashboard_check_only.bat b/do_dashboard_check_only.bat new file mode 100644 index 0000000..a0d15f2 --- /dev/null +++ b/do_dashboard_check_only.bat @@ -0,0 +1,4 @@ +@echo off +call C:\PythonProjects\.rcvenv\Scripts\activate.bat +python do_dashboard.py --check-only %* + diff --git a/do_dashboard_check_only_debug-exe.bat b/do_dashboard_check_only_debug-exe.bat new file mode 100644 index 0000000..1a49332 --- /dev/null +++ b/do_dashboard_check_only_debug-exe.bat @@ -0,0 +1,3 @@ +@echo off +do_dashboard.exe --check-only --debug %* + diff --git a/do_dashboard_check_only_debug.bat b/do_dashboard_check_only_debug.bat new file mode 100644 index 0000000..e21b536 --- /dev/null +++ b/do_dashboard_check_only_debug.bat @@ -0,0 +1,4 @@ +@echo off +call C:\PythonProjects\.rcvenv\Scripts\activate.bat +python do_dashboard.py --check-only --debug %* + diff --git a/do_dashboard_constants.py b/do_dashboard_constants.py new file mode 100644 index 0000000..c245a98 --- /dev/null +++ b/do_dashboard_constants.py @@ -0,0 +1,135 @@ +""" +DO Dashboard - Centralized Constants Module + +This module defines ALL constants used across the DO (Diagnostic Order) Dashboard application. +It serves as the single source of truth for all configuration values. + +All other modules MUST import constants from this module, NOT define them locally. + +Structure: +- File names & paths +- Table names (Excel sheets) +- API endpoints +- Authentication credentials +- Threading & retry parameters +- DO filters config +- UI formatting constants +""" + +# ============================================================================ +# FILE NAMES & PATHS +# ============================================================================ + +REQUESTS_FILE_NAME = "do_requests.json" +ORGANIZATIONS_FILE_NAME = "do_organizations.json" +OLD_FILE_SUFFIX = "_old" +CONFIG_FOLDER_NAME = "config" + +# ============================================================================ +# EXCEL CONFIGURATION FILES +# ============================================================================ + +DASHBOARD_CONFIG_FILE_NAME = "DO_Dashboard_Config.xlsx" +ORG_CENTER_MAPPING_FILE_NAME = "do_org_center_mapping.xlsx" + +# ============================================================================ +# TABLE NAMES (Excel sheets in DASHBOARD_CONFIG_FILE_NAME) +# ============================================================================ + +REQUESTS_MAPPING_TABLE_NAME = "Requests_Mapping" +ORGANIZATIONS_MAPPING_TABLE_NAME = "Organizations_Mapping" +EXCEL_WORKBOOKS_TABLE_NAME = "Excel_Workbooks" +EXCEL_SHEETS_TABLE_NAME = "Excel_Sheets" +REGRESSION_CHECK_TABLE_NAME = "Regression_Check" +ORG_CENTER_MAPPING_TABLE_NAME = "Org_Center_Mapping" + +# ============================================================================ +# DO FILTERS CONFIGURATION +# ============================================================================ + +# Named range in DASHBOARD_CONFIG_FILE_NAME containing the JSON filters object +# for the worklist API call (e.g. {"status": "all-admin", "study": "ENDOLIFE"}) +DO_FILTERS = "DO_Filters" + +# Number of requests per page for worklist pagination +DO_WORKLIST_PAGE_SIZE = 50 + +# ============================================================================ +# API ENDPOINTS & AUTHENTICATION +# ============================================================================ + +IAM_URL = "https://api-auth.ziwig-connect.com" +GDD_URL = "https://api-lab.ziwig-connect.com" +GDD_APP_ID = "4f5ac063-6a22-4e2c-bda5-b50c0dddab79" + +DEFAULT_USER_NAME = "ziwig-invest2@yopmail.com" +DEFAULT_PASSWORD = "pbrrA765$bP3beiuyuiyhiuy!agxagx" + +# ============================================================================ +# API ENDPOINTS +# ============================================================================ + +# Authentication endpoints +API_AUTH_LOGIN_ENDPOINT = "/api/auth/ziwig-pro/login" +API_AUTH_CONFIG_TOKEN_ENDPOINT = "/api/auth/config-token" +API_AUTH_REFRESH_TOKEN_ENDPOINT = "/api/auth/refreshToken" + +# GDD (Diagnostic Order) endpoints +API_DO_WORKLIST_ENDPOINT = "/api/requests/worklist-filter" +API_DO_REQUEST_DETAIL_ENDPOINT = "/api/requests" # + /{id}/validation +API_DO_PROFESSIONALS_ENDPOINT = "/api/entity-manager/meta/modele_fr/data/nodes/pro/nodes" + +# ============================================================================ +# THREADING & RETRY PARAMETERS +# ============================================================================ + +ERROR_MAX_RETRY = 10 +WAIT_BEFORE_RETRY = 1 +WAIT_BEFORE_NEW_BATCH_OF_RETRIES = 20 +MAX_BATCHS_OF_RETRIES = 3 +MAX_THREADS = 40 + +# Excel operation retry parameters (for handling transient xlwings/Excel failures) +EXCEL_COM_MAX_RETRIES = 3 +EXCEL_COM_RETRY_DELAY = 0.5 + +# ============================================================================ +# LOGGING CONFIGURATION +# ============================================================================ + +LOG_FILE_NAME = "dashboard.log" + +# ============================================================================ +# API CONFIGURATION +# ============================================================================ + +API_TIMEOUT = 60 # seconds - timeout for all API calls + +# ============================================================================ +# EXCEL EXPORT CONFIGURATION +# ============================================================================ + +# Output file conflict handling actions +OUTPUT_ACTION_OVERWRITE = "Overwrite" +OUTPUT_ACTION_INCREMENT = "Increment" +OUTPUT_ACTION_BACKUP = "Backup" +OUTPUT_ACTIONS = [OUTPUT_ACTION_OVERWRITE, OUTPUT_ACTION_INCREMENT, OUTPUT_ACTION_BACKUP] + +# Excel export data source types +SOURCE_TYPE_REQUESTS = "Requests" +SOURCE_TYPE_ORGANIZATIONS = "Organizations" +SOURCE_TYPE_VARIABLE = "Variable" +SOURCE_TYPES = [SOURCE_TYPE_REQUESTS, SOURCE_TYPE_ORGANIZATIONS, SOURCE_TYPE_VARIABLE] + +# Excel export target types (for data filling) +TARGET_TYPE_TABLE = "Table" # Excel structured table (ListObject) - has headers, supports Resize() +TARGET_TYPE_NAMED_RANGE = "NamedRange" # Simple named range - no headers, resize via Name.RefersTo + +# ============================================================================ +# UI FORMATTING (Progress bars) +# ============================================================================ + +BAR_N_FMT_WIDTH = 4 +BAR_TOTAL_FMT_WIDTH = 4 +BAR_TIME_WIDTH = 8 +BAR_RATE_WIDTH = 10 diff --git a/do_dashboard_debug-exe.bat b/do_dashboard_debug-exe.bat new file mode 100644 index 0000000..d73da04 --- /dev/null +++ b/do_dashboard_debug-exe.bat @@ -0,0 +1,3 @@ +@echo off +do_dashboard.exe --debug %* + diff --git a/do_dashboard_debug.bat b/do_dashboard_debug.bat new file mode 100644 index 0000000..f695341 --- /dev/null +++ b/do_dashboard_debug.bat @@ -0,0 +1,4 @@ +@echo off +call C:\PythonProjects\.rcvenv\Scripts\activate.bat +python do_dashboard.py --debug %* + diff --git a/do_dashboard_excel_export.py b/do_dashboard_excel_export.py new file mode 100644 index 0000000..3e76578 --- /dev/null +++ b/do_dashboard_excel_export.py @@ -0,0 +1,2094 @@ +""" +DO Dashboard - Excel Export Module + +This module handles generation of Excel workbooks from Requests and Organizations data. +Fully configurable via external Excel configuration file (DO_Dashboard_Config.xlsx). + +Features: +- Config-driven workbook generation (no code changes needed) +- Support for Variable templates and Table data fills +- Configurable filtering, sorting, and value replacement +- xlwings-based data processing with automatic formula recalculation +- Robust error handling and logging +""" + +import functools +import json +import logging +import os +import re +import shutil +import tempfile +import traceback +import zipfile +from datetime import datetime, timedelta, timezone +from time import perf_counter +from zoneinfo import ZoneInfo + +import openpyxl +from openpyxl.utils import get_column_letter +from rich.console import Console + +try: + import xlwings as xw +except ImportError: + xw = None + +from do_dashboard_utils import get_nested_value, get_config_path +from do_dashboard_constants import ( + REQUESTS_FILE_NAME, + ORGANIZATIONS_FILE_NAME, + DASHBOARD_CONFIG_FILE_NAME, + EXCEL_WORKBOOKS_TABLE_NAME, + EXCEL_SHEETS_TABLE_NAME, + OUTPUT_ACTION_OVERWRITE, + OUTPUT_ACTION_INCREMENT, + OUTPUT_ACTION_BACKUP, + OUTPUT_ACTIONS, + SOURCE_TYPE_REQUESTS, + SOURCE_TYPE_ORGANIZATIONS, + SOURCE_TYPE_VARIABLE, + SOURCE_TYPES, + TARGET_TYPE_TABLE, + TARGET_TYPE_NAMED_RANGE, + EXCEL_COM_MAX_RETRIES, + EXCEL_COM_RETRY_DELAY +) + +# ============================================================================ +# CONSTANTS +# ============================================================================ + +EXCEL_OUTPUT_FOLDER = os.getcwd() # Current working directory + +# ============================================================================ +# MODULE DEPENDENCIES (injected from main module) +# ============================================================================ + +console = None + +# NOTE: Constants imported from do_dashboard_constants.py (SINGLE SOURCE OF TRUTH): +# Configuration Files: +# - REQUESTS_FILE_NAME, ORGANIZATIONS_FILE_NAME, DASHBOARD_CONFIG_FILE_NAME +# - EXCEL_WORKBOOKS_TABLE_NAME, EXCEL_SHEETS_TABLE_NAME +# Output Handling: +# - OUTPUT_ACTION_OVERWRITE, OUTPUT_ACTION_INCREMENT, OUTPUT_ACTION_BACKUP, OUTPUT_ACTIONS +# Data Sources: +# - SOURCE_TYPE_REQUESTS, SOURCE_TYPE_ORGANIZATIONS, SOURCE_TYPE_VARIABLE, SOURCE_TYPES +# +# NOTE: Mapping table names (INCLUSIONS_MAPPING_TABLE_NAME, ORGANIZATIONS_MAPPING_TABLE_NAME) +# are defined in constants but loaded/used in main script (do_dashboard.py) + + +def set_dependencies(console_instance): + """ + Inject console instance from main module. + + Args: + console_instance: Rich Console instance for formatted output + + Note: + File and table names are imported directly from do_dashboard_constants.py + (SINGLE SOURCE OF TRUTH) + """ + global console + console = console_instance + + +# ============================================================================ +# PUBLIC FUNCTIONS +# ============================================================================ + +def load_excel_export_config(console_instance=None): + """ + Load and validate Excel export configuration from config file. + + Args: + console_instance: Optional Rich Console instance + + Returns: + Tuple of (excel_workbooks_config, excel_sheets_config, has_error, error_messages) + - excel_workbooks_config: List of workbook definitions + - excel_sheets_config: List of sheet fill definitions + - has_error: Boolean flag if critical errors found + - error_messages: List of error message strings + """ + global console + if console_instance: + console = console_instance + + config_path = os.path.join(get_config_path(), DASHBOARD_CONFIG_FILE_NAME) + error_messages = [] + + try: + workbook = openpyxl.load_workbook(config_path) + except FileNotFoundError: + error_msg = f"Error: Configuration file not found at: {config_path}" + logging.critical(error_msg) + console.print(f"[bold red]{error_msg}[/bold red]") + return None, None, True, [error_msg] + + # Load Excel_Workbooks sheet + if EXCEL_WORKBOOKS_TABLE_NAME not in workbook.sheetnames: + error_msg = f"Error: Sheet '{EXCEL_WORKBOOKS_TABLE_NAME}' not found in configuration file." + error_messages.append(error_msg) + return None, None, True, error_messages + + excel_workbooks_sheet = workbook[EXCEL_WORKBOOKS_TABLE_NAME] + excel_workbooks_config = [] + + try: + headers = [cell.value for cell in excel_workbooks_sheet[1]] + for row_index, row in enumerate(excel_workbooks_sheet.iter_rows(min_row=2, values_only=True), start=2): + if all(cell is None for cell in row): + continue # Skip empty rows + + workbook_config = dict(zip(headers, row)) + + # Validate required fields + if not workbook_config.get("workbook_id"): + error_msg = f"Row {row_index}: 'workbook_id' is mandatory" + error_messages.append(error_msg) + continue + + if not workbook_config.get("workbook_template_name"): + error_msg = f"Row {row_index}: 'workbook_template_name' is mandatory" + error_messages.append(error_msg) + continue + + if not workbook_config.get("output_file_name_template"): + error_msg = f"Row {row_index}: 'output_file_name_template' is mandatory" + error_messages.append(error_msg) + continue + + if_output_exists = workbook_config.get("if_output_exists", OUTPUT_ACTION_OVERWRITE) + if if_output_exists not in OUTPUT_ACTIONS: + error_msg = f"Row {row_index}: 'if_output_exists' must be one of {OUTPUT_ACTIONS}" + error_messages.append(error_msg) + continue + + excel_workbooks_config.append(workbook_config) + except Exception as e: + error_msg = f"Error loading Excel_Workbooks sheet: {e}" + error_messages.append(error_msg) + return None, None, True, error_messages + + # Load Excel_Sheets sheet + if EXCEL_SHEETS_TABLE_NAME not in workbook.sheetnames: + error_msg = f"Error: Sheet '{EXCEL_SHEETS_TABLE_NAME}' not found in configuration file." + error_messages.append(error_msg) + return excel_workbooks_config, None, True, error_messages + + excel_sheets_sheet = workbook[EXCEL_SHEETS_TABLE_NAME] + excel_sheets_config = [] + + try: + headers = [cell.value for cell in excel_sheets_sheet[1]] + for row_index, row in enumerate(excel_sheets_sheet.iter_rows(min_row=2, values_only=True), start=2): + if all(cell is None for cell in row): + continue + + sheet_config = dict(zip(headers, row)) + + # Validate required fields + if not sheet_config.get("workbook_id"): + continue # Skip rows without workbook_id + + if not sheet_config.get("source_type"): + error_msg = f"Row {row_index}: 'source_type' is mandatory" + error_messages.append(error_msg) + continue + + source_type = sheet_config["source_type"] + if source_type not in SOURCE_TYPES: + error_msg = f"Row {row_index}: 'source_type' must be one of {SOURCE_TYPES}" + error_messages.append(error_msg) + continue + + if not sheet_config.get("source"): + error_msg = f"Row {row_index}: 'source' is mandatory" + error_messages.append(error_msg) + continue + + if not sheet_config.get("target_name"): + error_msg = f"Row {row_index}: 'target_name' is mandatory" + error_messages.append(error_msg) + continue + + # Parse JSON fields + has_json_error = False + for json_field in ["filter_condition", "sort_keys", "value_replacement"]: + value = sheet_config.get(json_field) + if value: + if isinstance(value, str): + try: + sheet_config[json_field] = json.loads(value) + except json.JSONDecodeError: + error_msg = f"Row {row_index}, field '{json_field}': Invalid JSON format" + error_messages.append(error_msg) + has_json_error = True + break # ← Skip this row entirely + # else: value is already parsed (dict/list), keep as-is + else: + # Empty/None value - leave as None or empty + sheet_config[json_field] = None + + if not has_json_error: + excel_sheets_config.append(sheet_config) + except Exception as e: + error_msg = f"Error loading Excel_Sheets sheet: {e}" + error_messages.append(error_msg) + return excel_workbooks_config, excel_sheets_config, True, error_messages + + workbook.close() + + has_error = len(error_messages) > 0 + return excel_workbooks_config, excel_sheets_config, has_error, error_messages + + +def validate_excel_config(excel_config, console_instance, requests_mapping_config=None, organizations_mapping_config=None): + """ + Validate Excel export configuration against templates. + + Args: + excel_config: Tuple of (workbooks_config, sheets_config) from load_excel_export_config() + console_instance: Rich Console instance + requests_mapping_config: Loaded requests mapping config (optional, for future use) + organizations_mapping_config: Loaded organizations mapping config (optional, for future use) + + Returns: + Tuple of (has_critical_error, error_messages) + """ + global console + if console_instance: + console = console_instance + + if not excel_config or not excel_config[0] or not excel_config[1]: + return False, [] # No config to validate + + excel_workbooks_config, excel_sheets_config = excel_config[0], excel_config[1] + error_messages = [] + + # Validate each workbook + for workbook_config in excel_workbooks_config: + workbook_id = workbook_config.get("workbook_id") + template_name = workbook_config.get("workbook_template_name") + + # Check template exists + template_path = os.path.join(get_config_path(), template_name) + if not os.path.exists(template_path): + error_msg = f"Template '{template_name}' (workbook_id: {workbook_id}) not found in config/" + error_messages.append(error_msg) + continue + + # Check template is valid Excel + try: + template_wb = openpyxl.load_workbook(template_path) + except Exception as e: + error_msg = f"Template '{template_name}' (workbook_id: {workbook_id}) is not a valid Excel file: {e}" + error_messages.append(error_msg) + continue + + # Validate sheets for this workbook + workbook_sheets = [s for s in excel_sheets_config if s.get("workbook_id") == workbook_id] + + for sheet_config in workbook_sheets: + target_name = sheet_config.get("target_name") + source_type = sheet_config.get("source_type") + + # Find the target in the template (check both named ranges AND tables) + target_found = False + if target_name in template_wb.defined_names: + target_found = True + else: + # Check if it's a table in any sheet + for sheet in template_wb.sheetnames: + sheet_obj = template_wb[sheet] + if hasattr(sheet_obj, 'tables') and target_name in sheet_obj.tables: + target_found = True + break + + # If target was found, validate based on source type + if target_found: + # For Variable sources, ensure it's a single cell + if source_type == SOURCE_TYPE_VARIABLE: + # Check if the defined name references a single cell + # NOTE: We still use openpyxl here because template_wb is already open from config loading + table_dims = _get_named_range_dimensions(template_wb, target_name) + if table_dims: + _, _, height, width = table_dims + if height != 1 or width != 1: + error_msg = f"Target '{target_name}' (template: {template_name}) for Variable source must reference a single cell (found {height}x{width})" + error_messages.append(error_msg) + + # For Table sources (Requests/Organizations), validate dimensions + elif source_type in [SOURCE_TYPE_REQUESTS, SOURCE_TYPE_ORGANIZATIONS]: + # Get the dimensions of the named range + # NOTE: We still use openpyxl here because template_wb is already open from config loading + table_dims = _get_named_range_dimensions(template_wb, target_name) + if table_dims: + _, _, height, width = table_dims + + # CRITICAL: Table height MUST be exactly 1 (template row only) + if height != 1: + error_msg = f"Target '{target_name}' (template: {template_name}, source_type: {source_type}) must have height=1 (found height={height}). " \ + f"Template row must be a single row." + error_messages.append(error_msg) + + # CRITICAL: Table width must be >= max(mapping_indices) + # Get the mapping column to validate indices + source = sheet_config.get("source") + if source: + mapping_config = requests_mapping_config if source_type == SOURCE_TYPE_REQUESTS else organizations_mapping_config + if mapping_config: + column_mapping = _get_column_mapping(mapping_config, source, source_type) + if column_mapping: + max_col_index = max(column_mapping.keys()) # 0-based index + if max_col_index >= width: + error_msg = f"Target '{target_name}' (template: {template_name}) width={width} is insufficient. " \ + f"Maximum column index from mapping is {max_col_index} (0-based). " \ + f"Width must be > {max_col_index}." + error_messages.append(error_msg) + else: + error_msg = f"Named range '{target_name}' (template: {template_name}, workbook_id: {workbook_id}) not found in template" + error_messages.append(error_msg) + + template_wb.close() + + return len(error_messages) > 0, error_messages + + +def export_to_excel(requests_data, organizations_data, excel_config, + requests_mapping_config=None, organizations_mapping_config=None): + """ + Main export function - orchestrates Excel workbook generation. + + Args: + requests_data: List of request dictionaries + organizations_data: List of organization dictionaries + excel_config: Tuple of (workbooks_config, sheets_config) + requests_mapping_config: Requests field mapping configuration + organizations_mapping_config: Organizations field mapping configuration + + Returns: + Tuple of (success, error_count) + + Note: + Uses global console instance (injected from main script) + """ + if not excel_config or not excel_config[0] or not excel_config[1]: + console.print("[yellow]⚠ No Excel export configuration found, skipping[/yellow]") + return True, 0 + + excel_workbooks_config, excel_sheets_config = excel_config[0], excel_config[1] + + # Prepare template variables + template_vars = _prepare_template_variables() + + error_count = 0 + success_count = 0 + + # Track overall export duration + export_start_time = perf_counter() + + # Process each workbook + for workbook_config in excel_workbooks_config: + try: + workbook_id = workbook_config.get("workbook_id") + template_name = workbook_config.get("workbook_template_name") + output_template = workbook_config.get("output_file_name_template") + if_output_exists = workbook_config.get("if_output_exists", OUTPUT_ACTION_OVERWRITE) + + # Resolve output filename + try: + output_filename = output_template.format(**template_vars) + except KeyError as e: + console.print(f"[bold red]✗ Unknown variable in template: {e}[/bold red]") + error_count += 1 + continue + + output_path = os.path.join(EXCEL_OUTPUT_FOLDER, output_filename) + + # Log workbook processing start + logging.info(f"Processing workbook: {workbook_id} (template: {template_name}, output: {output_filename})") + + # PHASE PRÉPARATION: Handle existing file according to action + output_path = _handle_output_exists(output_path, if_output_exists) + + # XLWINGS PHASE: Open template, fill, save as output + template_path = os.path.join(get_config_path(), template_name) + + # Track workbook processing duration with spinning status + workbook_start_time = perf_counter() + + try: + if xw is None: + raise ImportError("xlwings is not installed. Install with: pip install xlwings") + + # Use status with spinner while processing the workbook + with console.status(f"[bold cyan]Exporting {output_filename}...", spinner="dots"): + # PERFORMANCE: Make Excel invisible BEFORE opening the workbook + app_xw = None + screen_updating_original = None + visible_original = None + try: + # Get or create Excel app in invisible mode + if xw.apps: + app_xw = xw.apps.active + visible_original = app_xw.visible + screen_updating_original = app_xw.screen_updating + else: + # Create new app in invisible mode + app_xw = xw.App(visible=False) + visible_original = False + screen_updating_original = True + + app_xw.visible = False # Make Excel invisible + app_xw.screen_updating = False # Disable screen updates + + except Exception as e: + logging.warning(f"Failed to manage Excel visibility: {e}") + app_xw = None + + # Open TEMPLATE directly (not a copy) + wb_xw = xw.Book(template_path, update_links=False) + + try: + # CAPTURE TEMPLATE STATE: Save initial state for restoration before save + template_state = _capture_workbook_state(wb_xw, workbook_context=f"{workbook_id} ({output_filename})") + logging.info(f"Captured template state: active_sheet='{template_state['active_sheet']}', {len(template_state['sheets'])} sheet(s)") + + # Get sheets for this workbook + workbook_sheets = [s for s in excel_sheets_config if s.get("workbook_id") == workbook_id] + + # Process each sheet with xlwings + for sheet_config in workbook_sheets: + _process_sheet_xlwings( + wb_xw, + sheet_config, + requests_data, + organizations_data, + requests_mapping_config=requests_mapping_config, + organizations_mapping_config=organizations_mapping_config, + template_vars=template_vars, + workbook_context=f"{workbook_id} ({output_filename})" + ) + + # RESTORE TEMPLATE STATE: Restore initial state before saving + _restore_workbook_state(wb_xw, template_state, workbook_context=f"{workbook_id} ({output_filename})") + logging.info(f"Restored template state before save") + + # Save as output file with forced overwrite (with retry mechanism) + # This preserves filesystem versioning for cloud storage + # Disable alerts to force silent overwrite + abs_output_path = os.path.abspath(output_path) + if app_xw: + display_alerts_original = app_xw.api.DisplayAlerts + app_xw.api.DisplayAlerts = False + try: + _save_workbook_with_retry(wb_xw, abs_output_path) + logging.info(f"Saved workbook to: {abs_output_path}") + finally: + if app_xw: + app_xw.api.DisplayAlerts = display_alerts_original + # Excel automatically recalculates formulas on save + # No need for separate recalculation step + + finally: + # Always close the workbook and restore visibility/screen updates + wb_xw.close() + if app_xw is not None: + try: + if screen_updating_original is not None: + app_xw.screen_updating = screen_updating_original + if visible_original is not None: + app_xw.visible = visible_original + except: + pass + + # Calculate duration and display success message + workbook_duration = perf_counter() - workbook_start_time + console.print(f"[green]✓ Created: {output_filename} ({workbook_duration:.2f}s)[/green]") + success_count += 1 + + except Exception as e: + console.print(f"[bold red]✗ Error processing {output_filename}: {e}[/bold red]") + logging.error(f"Excel export error for {output_filename}: {e}", exc_info=True) + error_count += 1 + continue + + except Exception as e: + console.print(f"[bold red]✗ Error processing workbook {workbook_id}: {e}[/bold red]") + logging.error(f"Excel workbook processing error: {e}", exc_info=True) + error_count += 1 + + # Summary with total duration + total_workbooks = success_count + error_count + export_duration = perf_counter() - export_start_time + + if error_count == 0: + # Success: all workbooks processed + console.print(f"\n[green]✓ Excel export completed successfully: {success_count}/{total_workbooks} workbooks generated ({export_duration:.2f}s)[/green]") + else: + # Failure: some or all workbooks failed + if success_count > 0: + # Partial success + console.print(f"\n[yellow]⚠ Excel export completed with errors ({export_duration:.2f}s)[/yellow]") + console.print(f"[green] {success_count} workbook(s) generated successfully[/green]") + console.print(f"[bold red] {error_count} workbook(s) failed[/bold red]") + else: + # Complete failure + console.print(f"\n[bold red]✗ Excel export failed: all {error_count} workbook(s) failed ({export_duration:.2f}s)[/bold red]") + + return error_count == 0, error_count + + +# ============================================================================ +# INTERNAL FUNCTIONS +# ============================================================================ + +def _prepare_template_variables(): + """ + Prepare variables available for Template String evaluation. + + Returns: + Dictionary of variables available to .format(**locals()) + """ + # Get UTC timestamp from requests file + # Use constant from do_dashboard_constants (SINGLE SOURCE OF TRUTH) + requests_file = REQUESTS_FILE_NAME + if os.path.exists(requests_file): + file_mtime = os.path.getmtime(requests_file) + extract_date_time_utc = datetime.fromtimestamp(file_mtime, tz=timezone.utc) + else: + extract_date_time_utc = datetime.now(tz=timezone.utc) + + # Convert to Paris timezone + extract_date_time_french = extract_date_time_utc.astimezone( + ZoneInfo('Europe/Paris') + ) + + return { + 'extract_date_time_utc': extract_date_time_utc, + 'extract_date_time_french': extract_date_time_french, + } + + +def _apply_filter(item, filter_condition): + """ + Apply filter condition to item (AND logic for all conditions). + + Args: + item: Dictionary to filter + filter_condition: List of [field_name, operator, value] conditions + + Returns: + Boolean True if item passes all filters + """ + if not filter_condition: + return True # Empty filter = accept all + + for field_path, operator, expected_value in filter_condition: + actual_value = get_nested_value(item, field_path.split(".")) + + if actual_value is None: + return False # Missing field = filter out + + # Apply operator + if operator == "==": + if actual_value != expected_value: + return False + elif operator == "<>": + if actual_value == expected_value: + return False + elif operator == ">": + if not (actual_value > expected_value): + return False + elif operator == ">=": + if not (actual_value >= expected_value): + return False + elif operator == "<": + if not (actual_value < expected_value): + return False + elif operator == "<=": + if not (actual_value <= expected_value): + return False + + return True # All conditions passed + + +def _apply_sort(items, sort_keys): + """ + Apply multi-key sort to items with support for mixed asc/desc ordering. + + Args: + items: List of dictionaries to sort + sort_keys: List of [field_name, order] or [field_name, order, option] + where: + - order is "asc" or "desc" + - option (optional) can be: + * datetime format string (e.g., "%Y-%m-%d") for date parsing + * "*natsort" for natural alphanumeric sorting + Supports MIXED asc/desc on different columns! + + Returns: + Sorted list + """ + if not sort_keys: + return items + + def natural_sort_key(text): + """ + Helper for natural alphanumeric sorting. + Converts "ENDOBEST-003-920-BA" to ["endobest", "-", 3, "-", 920, "-", "ba"] + Python's native list comparison handles the rest element by element. + """ + def convert(segment): + return int(segment) if segment.isdigit() else segment.lower() + return [convert(s) for s in re.split(r'(\d+)', str(text)) if s] + + def compare_items(item1, item2): + """ + Comparator function for multi-key sorting with mixed asc/desc support. + Returns: -1 if item1 < item2, 0 if equal, 1 if item1 > item2 + """ + for sort_spec in sort_keys: + field_name = sort_spec[0] + order = sort_spec[1] if len(sort_spec) > 1 else "asc" + sort_option = sort_spec[2] if len(sort_spec) > 2 else None + + # Get values from both items + val1 = get_nested_value(item1, field_name.split(".")) + val2 = get_nested_value(item2, field_name.split(".")) + + # Handle undefined/None - place at end + is_undef1 = val1 in [None, "", "undefined"] + is_undef2 = val2 in [None, "", "undefined"] + + # Both undefined: equal + if is_undef1 and is_undef2: + continue + + # Only one undefined: undefined goes last + if is_undef1: + return 1 # item1 > item2 (undefined last) + if is_undef2: + return -1 # item1 < item2 (item2 is undefined) + + # Check if natural sort requested + is_natural_sort = (sort_option == "*natsort") + + # Parse datetime if option is a datetime format (not *natsort) + if sort_option and not is_natural_sort: + datetime_format = sort_option + try: + val1 = datetime.strptime(str(val1), datetime_format).timestamp() + except (ValueError, TypeError): + val1 = None + return 1 # Invalid datetime goes last + + try: + val2 = datetime.strptime(str(val2), datetime_format).timestamp() + except (ValueError, TypeError): + val2 = None + return -1 # Invalid datetime goes last + + # Apply natural sort transformation if requested + if is_natural_sort: + val1 = natural_sort_key(val1) + val2 = natural_sort_key(val2) + + # Compare values + # For strings (non-natsort), use case-insensitive comparison for natural alphabetical ordering + if isinstance(val1, str) and isinstance(val2, str): + val1_lower = val1.lower() + val2_lower = val2.lower() + if val1_lower < val2_lower: + cmp_result = -1 + elif val1_lower > val2_lower: + cmp_result = 1 + else: + # Case-insensitive equal, use case-sensitive as tiebreaker + if val1 < val2: + cmp_result = -1 + elif val1 > val2: + cmp_result = 1 + else: + cmp_result = 0 + else: + # Non-string comparison (numbers, dates, natsort lists, etc.) + if val1 < val2: + cmp_result = -1 + elif val1 > val2: + cmp_result = 1 + else: + cmp_result = 0 # Equal, continue to next sort key + + # Apply asc/desc ordering + if cmp_result != 0: + is_desc = isinstance(order, str) and order.lower() == "desc" + return cmp_result if not is_desc else -cmp_result + + # All keys are equal + return 0 + + # Use functools.cmp_to_key to convert comparator to key function + return sorted(items, key=functools.cmp_to_key(compare_items)) + + +def _apply_value_replacement(value, replacements): + """ + Apply value replacement rules (first-match-wins, strict type matching). + + Args: + value: Value to potentially replace + replacements: List of [value_before, value_after] pairs + + Returns: + Replaced value or original + + Note: + This function is currently prepared for future use in table data filling. + """ + if not replacements: + return value + + for value_before, value_after in replacements: + if value == value_before: # Strict equality + return value_after + + return value # No match, return original + + +# OBSOLETE: _preserve_media_in_workbook() removed - xlwings handles media preservation automatically +# When using xlwings, Excel natively preserves all media, images, and relationships + + +def _save_workbook_with_retry(wb_xw, output_path): + """ + Save workbook with retry mechanism for transient xlwings/Excel failures. + + Excel's SaveAs can fail randomly on some environments (especially Excel 2013). + This function retries the save operation with configurable retry count and delay. + + Args: + wb_xw: xlwings Book object + output_path: Absolute path where workbook should be saved + + Raises: + Exception: If SaveAs fails after all retry attempts + """ + from time import sleep + + for attempt in range(1, EXCEL_COM_MAX_RETRIES + 1): + try: + logging.info(f"SaveAs attempt {attempt}/{EXCEL_COM_MAX_RETRIES}: {output_path}") + wb_xw.api.SaveAs(output_path) + logging.info(f"SaveAs succeeded on attempt {attempt}") + return # Success + + except Exception as e: + error_msg = f"SaveAs failed on attempt {attempt}: {type(e).__name__}: {str(e)}" + + if attempt < EXCEL_COM_MAX_RETRIES: + # Intermediate retry - log as warning and sleep before retry + logging.warning(f"{error_msg} - Retrying in {EXCEL_COM_RETRY_DELAY}s...") + sleep(EXCEL_COM_RETRY_DELAY) + else: + # Final attempt failed - log as critical error and raise + logging.error(f"{error_msg} - All {EXCEL_COM_MAX_RETRIES} retry attempts exhausted") + raise + + +def _capture_workbook_state(wb_xw, workbook_context=""): + """ + Capture the visual state of the workbook (active sheet, selections, scroll positions). + + This allows restoration of the template's visual state after data processing, + ensuring recipients see the workbook exactly as designed in the template. + + Args: + wb_xw: xlwings Book object + workbook_context: String identifier for logging (workbook_id and filename) + + Returns: + dict: State dictionary with 'active_sheet' and 'sheets' state per sheet + """ + ctx = f"[{workbook_context}]" if workbook_context else "" + logging.info(f"{ctx} [CAPTURE_STATE] Starting workbook state capture") + logging.info(f"{ctx} [CAPTURE_STATE] Total sheets: {len(wb_xw.sheets)}") + + state = { + 'active_sheet': None, + 'sheets': {} + } + + try: + # Capture active sheet name + state['active_sheet'] = wb_xw.api.ActiveSheet.Name + logging.info(f"{ctx} [CAPTURE_STATE] Active sheet captured: '{state['active_sheet']}'") + except Exception as e: + logging.warning(f"{ctx} [CAPTURE_STATE] Could not capture active sheet: {type(e).__name__}: {str(e)}") + + # Capture state for each sheet + for idx, sheet in enumerate(wb_xw.sheets, 1): + logging.info(f"{ctx} [CAPTURE_STATE] Processing sheet {idx}/{len(wb_xw.sheets)}: '{sheet.name}'") + try: + # Activate sheet to get its state + sheet.activate() + logging.info(f"{ctx} [CAPTURE_STATE] Sheet '{sheet.name}' activated successfully") + sheet_api = sheet.api + + sheet_state = { + 'selection': None, + 'scroll_row': 1, + 'scroll_col': 1 + } + + # Capture selection address + try: + selection_address = sheet_api.Application.Selection.Address + sheet_state['selection'] = selection_address + logging.info(f"{ctx} [CAPTURE_STATE] Sheet '{sheet.name}' selection captured: {selection_address}") + except Exception as e: + sheet_state['selection'] = "A1" # Default + logging.warning(f"{ctx} [CAPTURE_STATE] Could not capture selection for sheet '{sheet.name}': {type(e).__name__}, defaulting to A1") + + # Capture scroll position + try: + scroll_row = sheet_api.Application.ActiveWindow.ScrollRow + scroll_col = sheet_api.Application.ActiveWindow.ScrollColumn + sheet_state['scroll_row'] = scroll_row + sheet_state['scroll_col'] = scroll_col + logging.info(f"{ctx} [CAPTURE_STATE] Sheet '{sheet.name}' scroll position captured: Row={scroll_row}, Col={scroll_col}") + except Exception as e: + logging.warning(f"{ctx} [CAPTURE_STATE] Could not capture scroll position for sheet '{sheet.name}': {type(e).__name__}, keeping defaults") + + state['sheets'][sheet.name] = sheet_state + logging.info(f"{ctx} [CAPTURE_STATE] Sheet '{sheet.name}' state complete: {sheet_state}") + + except Exception as e: + logging.error(f"{ctx} [CAPTURE_STATE] ERROR capturing state for sheet '{sheet.name}': {type(e).__name__}: {str(e)}") + + logging.info(f"{ctx} [CAPTURE_STATE] Workbook state capture complete. Captured {len(state['sheets'])} sheet(s)") + return state + + +def _restore_workbook_state(wb_xw, state, workbook_context=""): + """ + Restore the visual state of the workbook (active sheet, selections, scroll positions). + + Args: + wb_xw: xlwings Book object + state: State dictionary from _capture_workbook_state() + workbook_context: String identifier for logging (workbook_id and filename) + """ + if not state: + logging.warning("[RESTORE_STATE] Empty state provided, skipping restoration") + return + + from time import sleep + + ctx = f"[{workbook_context}]" if workbook_context else "" + logging.info(f"{ctx} [RESTORE_STATE] Starting workbook state restoration") + logging.info(f"{ctx} [RESTORE_STATE] Restoring {len(state.get('sheets', {}))} sheet(s)") + + # NOTE: Screen updating is already disabled at the global level (in export_to_excel) + # for the entire workbook processing cycle (from open to save). + # We do NOT re-disable it here to avoid state conflicts. + # The global setting ensures all operations (capture, process, restore, save) run efficiently. + + # CRITICAL: Excel 2013 COM layer lock recovery + # After bulk paste operations, Excel's COM layer can enter a "locked" state where Range.Select() + # fails persistently. This appears to be a fundamental limitation/bug in Excel 2013. + # To work around this, we need to: + # 1. Give Excel time to recover with a large delay + # 2. Then make a "dummy" Range.Select() to wake up the COM layer + # 3. Then proceed with real restorations + logging.info(f"{ctx} [RESTORE_STATE] Waiting for Excel COM layer to stabilize after bulk operations (2 seconds)...") + sleep(2.0) # Large delay to allow COM layer to recover + + # Track original visibility state (used for temporary visibility during retries) + original_app_visible = None + try: + if wb_xw.app: + original_app_visible = wb_xw.app.visible + + if not original_app_visible: + # Make Excel visible during restoration so user sees what's happening + # (important for selection restore retries which may take 2+ seconds) + wb_xw.app.visible = True + logging.info(f"{ctx} [RESTORE_STATE] Excel app temporarily made visible for restoration operations") + except Exception as e: + logging.warning(f"{ctx} [RESTORE_STATE] Could not manage Excel visibility during restoration: {type(e).__name__}: {str(e)}") + + # Wake up the COM layer with a dummy selection attempt on the first sheet + # This "primes" the COM layer so subsequent Range.Select() calls work reliably + try: + if len(wb_xw.sheets) > 0: + first_sheet = wb_xw.sheets[0] + first_sheet.activate() + logging.info(f"{ctx} [RESTORE_STATE] Priming COM layer by activating first sheet...") + first_sheet.api.Range("$A$1").Select() + logging.info(f"{ctx} [RESTORE_STATE] COM layer priming successful") + except Exception as e: + # This is not critical - if it fails, retries will handle it + logging.info(f"{ctx} [RESTORE_STATE] COM layer priming attempt completed (may have failed, retries will handle it)") + + # Restore state for each sheet + for idx, (sheet_name, sheet_state) in enumerate(state.get('sheets', {}).items(), 1): + logging.info(f"{ctx} [RESTORE_STATE] Processing sheet {idx}: '{sheet_name}'") + try: + sheet = wb_xw.sheets[sheet_name] + sheet.activate() + logging.info(f"{ctx} [RESTORE_STATE] Sheet '{sheet_name}' activated successfully") + + # Small delay after activation to ensure Excel has completed the sheet switch + sleep(0.3) + + sheet_api = sheet.api + + # Restore selection with retry mechanism for transient Excel COM failures + if sheet_state.get('selection'): + selection = sheet_state['selection'] + selection_restored = False + + # Try to restore original selection with retry + for attempt in range(1, EXCEL_COM_MAX_RETRIES + 1): + try: + logging.info(f"{ctx} [RESTORE_STATE] Selection restore attempt {attempt}/{EXCEL_COM_MAX_RETRIES} for '{selection}' on sheet '{sheet_name}'") + sheet_api.Range(selection).Select() + logging.info(f"{ctx} [RESTORE_STATE] Sheet '{sheet_name}' selection restored to: {selection}") + selection_restored = True + break # Success + except Exception as e: + error_msg = f"Selection restore failed on attempt {attempt}: {type(e).__name__}: {str(e)}" + + if attempt < EXCEL_COM_MAX_RETRIES: + # Intermediate retry - log as warning and sleep before retry + logging.warning(f"{ctx} [RESTORE_STATE] {error_msg} - Retrying in {EXCEL_COM_RETRY_DELAY}s...") + sleep(EXCEL_COM_RETRY_DELAY) + else: + # Final attempt failed - log as error, will default to A1 + logging.error(f"{ctx} [RESTORE_STATE] {error_msg} - All {EXCEL_COM_MAX_RETRIES} retry attempts exhausted") + + # If selection restore failed after all retries, default to A1 + if not selection_restored: + logging.warning(f"{ctx} [RESTORE_STATE] Could not restore selection '{selection}' for sheet '{sheet_name}' after {EXCEL_COM_MAX_RETRIES} attempts, defaulting to A1") + + # Try to set default A1 selection (using absolute reference: $A$1) + for attempt in range(1, EXCEL_COM_MAX_RETRIES + 1): + try: + logging.info(f"{ctx} [RESTORE_STATE] A1 default attempt {attempt}/{EXCEL_COM_MAX_RETRIES} for sheet '{sheet_name}'") + sheet_api.Range("$A$1").Select() + logging.info(f"{ctx} [RESTORE_STATE] Sheet '{sheet_name}' selection defaulted to A1") + break # Success + except Exception as e2: + error_msg = f"A1 default failed on attempt {attempt}: {type(e2).__name__}: {str(e2)}" + + if attempt < EXCEL_COM_MAX_RETRIES: + logging.warning(f"{ctx} [RESTORE_STATE] {error_msg} - Retrying in {EXCEL_COM_RETRY_DELAY}s...") + sleep(EXCEL_COM_RETRY_DELAY) + else: + logging.error(f"{ctx} [RESTORE_STATE] {error_msg} - All {EXCEL_COM_MAX_RETRIES} retry attempts exhausted") + + # Restore scroll position + try: + scroll_row = sheet_state.get('scroll_row', 1) + scroll_col = sheet_state.get('scroll_col', 1) + sheet_api.Application.ActiveWindow.ScrollRow = scroll_row + sheet_api.Application.ActiveWindow.ScrollColumn = scroll_col + logging.info(f"{ctx} [RESTORE_STATE] Sheet '{sheet_name}' scroll position restored: Row={scroll_row}, Col={scroll_col}") + except Exception as e: + logging.warning(f"{ctx} [RESTORE_STATE] Could not restore scroll position for sheet '{sheet_name}': {type(e).__name__}") + + except Exception as e: + logging.error(f"{ctx} [RESTORE_STATE] ERROR restoring state for sheet '{sheet_name}': {type(e).__name__}: {str(e)}") + + # Restore active sheet + if state.get('active_sheet'): + try: + from time import sleep + + active_sheet_name = state['active_sheet'] + wb_xw.sheets[active_sheet_name].activate() + + # Wait for sheet activation to complete on Excel 2013's COM layer + sleep(0.3) + + logging.info(f"{ctx} [RESTORE_STATE] Active sheet restored to: '{active_sheet_name}'") + except Exception as e: + logging.error(f"{ctx} [RESTORE_STATE] Could not restore active sheet '{state.get('active_sheet')}': {type(e).__name__}: {str(e)}") + + # Force sheet tabs to scroll to show the first sheet + # This ensures the tab bar starts from the first sheet, regardless of which sheet is active + # NOTE: ScrollWorkbookTabs only works when Excel is visible + try: + if len(wb_xw.sheets) > 0 and wb_xw.app: + logging.info(f"{ctx} [RESTORE_STATE] Attempting to scroll sheet tabs to first sheet") + + try: + # ScrollWorkbookTabs with negative number scrolls tabs LEFT (toward first sheet) + # Use large negative number (-100) to guarantee we reach the beginning + # Excel visibility is already managed at the beginning of this function + wb_xw.api.Application.ActiveWindow.ScrollWorkbookTabs(-100) + logging.info(f"{ctx} [RESTORE_STATE] Sheet tabs scrolled to beginning") + except Exception as e: + logging.warning(f"{ctx} [RESTORE_STATE] Could not scroll sheet tabs to beginning: {type(e).__name__}: {str(e)}") + except Exception as e: + logging.error(f"{ctx} [RESTORE_STATE] ERROR during sheet tabs scroll operation: {type(e).__name__}: {str(e)}") + + # Restore original visibility state (if we temporarily made it visible) + # NOTE: Screen updating restoration is handled at the global level (in export_to_excel) + # after the workbook is saved and closed + try: + if original_app_visible is not None and wb_xw.app: + if not original_app_visible and wb_xw.app.visible: + # Restore to hidden state if it was originally hidden + wb_xw.app.visible = False + logging.info(f"{ctx} [RESTORE_STATE] Excel app visibility restored to original state: False") + except Exception as e: + logging.warning(f"{ctx} [RESTORE_STATE] Could not restore Excel app visibility: {type(e).__name__}: {str(e)}") + + logging.info(f"{ctx} [RESTORE_STATE] Workbook state restoration complete") + + +def _handle_output_exists(output_path, action): + """ + Handle existing output file (Overwrite/Increment/Backup). + + Args: + output_path: Full path to output file + action: "Overwrite", "Increment", or "Backup" + + Returns: + Actual path to use (may be different if Increment/Backup) + """ + if not os.path.exists(output_path): + logging.info(f"Output file doesn't exist yet: {output_path}") + return output_path + + logging.info(f"Output file exists, applying '{action}' rule: {output_path}") + + if action == OUTPUT_ACTION_OVERWRITE: + logging.info(f"Overwriting existing file: {output_path}") + return output_path + + elif action == OUTPUT_ACTION_INCREMENT: + base, ext = os.path.splitext(output_path) + counter = 1 + while os.path.exists(f"{base}_{counter}{ext}"): + counter += 1 + new_path = f"{base}_{counter}{ext}" + logging.info(f"Using incremented filename: {new_path}") + return new_path + + elif action == OUTPUT_ACTION_BACKUP: + base, ext = os.path.splitext(output_path) + counter = 1 + backup_path = f"{base}_backup_{counter}{ext}" + while os.path.exists(backup_path): + counter += 1 + backup_path = f"{base}_backup_{counter}{ext}" + + try: + logging.info(f"Backing up existing file to: {backup_path}") + shutil.copy2(output_path, backup_path) + logging.info(f"Backup successful: {output_path} -> {backup_path}") + except Exception as e: + logging.error(f"Backup failed: {e}") + raise + + # Return original path - the existing file will be overwritten by SaveAs + return output_path + + return output_path + + +def _get_column_mapping(mapping_config, mapping_column_name, source_type): + """ + Extract column mapping from Requests_Mapping or Organizations_Mapping. + + The mapping column contains user-friendly 1-based indices (1, 2, 3, ...) + indicating which column in the Excel table each field should be placed. + These are converted to 0-based indices for internal use. + + Args: + mapping_config: List of mapping config rows (dicts with field_name, etc.) + mapping_column_name: Name of the mapping column to extract (e.g., "MainReport_PatientsList") + source_type: "Requests" or "Organizations" + + Returns: + Dictionary: {excel_column_index: source_field_name} + Example: {0: "Patient_Identification.Patient_Id", 1: "Request.Status", ...} + Indices are 0-based (converted from 1-based user input) + or None if mapping_column not found + """ + if not mapping_config: + return None + + column_mapping = {} + + for row in mapping_config: + # Get the field name (source field in the JSON) + field_name = row.get("field_name") + if not field_name: + continue + + # Get the mapping value from the specified column + mapping_value = row.get(mapping_column_name) + if mapping_value is None or mapping_value == "": + continue # Skip empty mappings + + # Convert mapping_value to integer (1-based user-friendly index) + try: + user_col_index = int(mapping_value) + except (ValueError, TypeError): + logging.warning(f"Invalid column index '{mapping_value}' for field '{field_name}'") + continue + + # Convert 1-based to 0-based index + excel_col_index = user_col_index - 1 + + if excel_col_index < 0: + logging.warning(f"Column index '{user_col_index}' for field '{field_name}' must be >= 1") + continue + + # Store: excel_column_index -> field_name + # Field name needs to be qualified with group for Requests + # (extracted from the row's field_group if available) + if source_type == "Requests": + field_group = row.get("field_group", "") + if field_group: + full_field_name = f"{field_group}.{field_name}" + else: + full_field_name = field_name + else: + # For Organizations, field_name might already be qualified or standalone + full_field_name = field_name + + column_mapping[excel_col_index] = full_field_name + + return column_mapping if column_mapping else None + + +def _parse_range_dimensions(start_row, start_col, end_row, end_col, header_row_count=0): + """ + Shared utility: Calculate dimensions from cell coordinates. + + Args: + start_row, start_col: Starting cell (1-based, after headers) + end_row, end_col: Ending cell (1-based) + header_row_count: Number of header rows (0 if none) + + Returns: + Tuple of (width, total_height, data_height) + """ + width = end_col - start_col + 1 + total_height = end_row - start_row + 1 + data_height = total_height - header_row_count + return width, total_height, data_height + + +def _get_named_range_dimensions(workbook, range_name): + """ + Get dimensions of named range or table in workbook. + + Args: + workbook: openpyxl Workbook object + range_name: Name of the named range or table + + Returns: + Tuple of (sheet_name, start_cell, height, width) or None if not found + """ + # First check for defined named ranges (in openpyxl 3.x) + if range_name in workbook.defined_names: + defined_name = workbook.defined_names[range_name] + # Get the range reference from attr_text (e.g., "Sheet!$A$1:$B$10") + range_ref = defined_name.attr_text + + # Parse: "SheetName!$A$1:$B$10" + if '!' in range_ref: + sheet_name, cell_range = range_ref.split('!') + # Remove quotes if present + sheet_name = sheet_name.strip("'\"") + # Remove $ signs for parsing + cell_range = cell_range.replace('$', '') + + if sheet_name in workbook.sheetnames: + sheet = workbook[sheet_name] + + # Parse cell range (e.g., "A1:B10" or single "A1") + if ':' in cell_range: + start_cell_str, end_cell_str = cell_range.split(':') + start_cell = sheet[start_cell_str] + end_cell = sheet[end_cell_str] + width = end_cell.column - start_cell.column + 1 + height = end_cell.row - start_cell.row + 1 + else: + start_cell = sheet[cell_range] + width = 1 + height = 1 + + return sheet_name, start_cell, height, width + + # Check if it's a Table (Excel table object, not just a named range) + for sheet_name in workbook.sheetnames: + sheet = workbook[sheet_name] + if hasattr(sheet, 'tables') and range_name in sheet.tables: + table = sheet.tables[range_name] + # Table has a 'ref' property with the range (e.g., "A4:F5") + # Excel tables can have header rows (default 1, but can be 0) + table_ref = table.ref + header_row_count = getattr(table, 'headerRowCount', 1) or 0 # 0 if None or False + + # Parse cell range (e.g., "A4:F5") + if ':' in table_ref: + start_cell_str, end_cell_str = table_ref.split(':') + start_cell_temp = sheet[start_cell_str] + end_cell = sheet[end_cell_str] + width = end_cell.column - start_cell_temp.column + 1 + total_height = end_cell.row - start_cell_temp.row + 1 + + # Skip header rows: point to first DATA row + if header_row_count > 0: + data_start_row = start_cell_temp.row + header_row_count + start_cell = sheet.cell(row=data_start_row, column=start_cell_temp.column) + else: + start_cell = start_cell_temp + + # Calculate data row count (total - headers) + height = total_height - header_row_count + else: + start_cell = sheet[table_ref] + width = 1 + height = 1 + + return sheet_name, start_cell, height, width + + return None + +# OBSOLETE: _update_named_range_height() removed +# This function was only called by the old openpyxl-based _process_sheet() implementation +# xlwings uses table.Resize() via COM API instead, which is more reliable +# See PHASE 2 migration notes for details + + +# OBSOLETE: _recalculate_workbook() removed - xlwings handles formula recalculation automatically +# When using xlwings with wb.save(), Excel automatically recalculates all formulas + +# OBSOLETE: _process_sheet() removed - openpyxl implementation migrated to xlwings +# All sheet processing is now handled by _process_sheet_xlwings() using xlwings library +# This eliminates code duplication and provides better preservation of workbook structure + + +def _get_table_dimensions_xlwings(workbook_xw, range_name): + """ + Get dimensions of an Excel table OR named range using xlwings COM API. + + First searches for ListObjects (structured tables), then falls back to + simple named ranges if no table is found. + + Args: + workbook_xw: xlwings Book object (already open) + range_name: Name of the Excel table (ListObject) or named range + + Returns: + Tuple (sheet_name, start_cell, height, width, header_row_count, target_type) or None if not found + - start_cell: Points to FIRST DATA ROW (after headers for tables, first row for named ranges) + - height: Number of DATA ROWS (excluding headers for tables) + - header_row_count: Number of header rows (0 for named ranges, 0 or 1 for tables) + - target_type: TARGET_TYPE_TABLE or TARGET_TYPE_NAMED_RANGE + + Note: + - For tables with headers: start_cell points to first data row (after header) + - For tables without headers: start_cell points to first row of table + - For named ranges: start_cell points to first row (no headers assumed) + """ + # Helper class to mimic openpyxl Cell behavior + class CellRef: + def __init__(self, row, column): + self.row = row + self.column = column + @property + def coordinate(self): + col_letter = get_column_letter(self.column) + return f"{col_letter}{self.row}" + + # === PRIORITY 1: Check if it's a table (ListObject) === + # Excel tables are more reliable than plain named ranges with xlwings + for sheet in workbook_xw.sheets: + sheet_api = sheet.api + + # Try to get the table count - if this fails, the sheet has no ListObjects property + try: + table_count = sheet_api.ListObjects.Count + except: + # Sheet doesn't support ListObjects or has none + continue + + # If no tables in this sheet, skip + if table_count == 0: + continue + + # Iterate through tables by index + for i in range(1, table_count + 1): # COM indexing starts at 1 + try: + xl_table = sheet_api.ListObjects.Item(i) + table_name = xl_table.Name + if table_name == range_name: + # Found a table - get its range + xl_range = xl_table.Range + sheet_name = sheet.name + total_rows = xl_range.Rows.Count + total_cols = xl_range.Columns.Count + start_row = xl_range.Row + start_col = xl_range.Column + + # Get header row count from the table + # In COM API, ListObject has ShowHeaders property (boolean) and HeaderRowRange + # ShowHeaders: True if table has header row, False if not + try: + has_headers = xl_table.ShowHeaders + header_row_count = 1 if has_headers else 0 + except: + # If ShowHeaders not accessible, try HeaderRowRange + try: + header_range = xl_table.HeaderRowRange + header_row_count = 1 if header_range is not None else 0 + except: + # Fallback: assume headers exist (most common case) + header_row_count = 1 + + # Data height = total height - header rows + data_height = total_rows - header_row_count + + # start_cell points to the FIRST DATA ROW (after headers) + # If table has headers: skip them. If no headers: start at table start + if header_row_count > 0: + data_start_row = start_row + header_row_count + else: + data_start_row = start_row + start_cell = CellRef(data_start_row, start_col) + + logging.info(f"[TABLE FOUND] Located table '{range_name}' at {sheet_name}!{start_cell.coordinate} " + f"(data rows: {data_height}, headers: {header_row_count}, total width: {total_cols})") + return sheet_name, start_cell, data_height, total_cols, header_row_count, TARGET_TYPE_TABLE + except Exception as e: + # Error accessing this specific table, skip it + logging.warning(f"Error accessing table {i} in '{sheet.name}': {type(e).__name__}") + + # === PRIORITY 2: Check if it's a named range === + # Named ranges don't have headers - data starts at first row + try: + if range_name in workbook_xw.names: + named_range = workbook_xw.names[range_name] + target_range = named_range.refers_to_range + + sheet_name = target_range.sheet.name + start_row = target_range.row + start_col = target_range.column + total_rows = target_range.rows.count + total_cols = target_range.columns.count + + # Named ranges have no headers - all rows are data rows + header_row_count = 0 + data_height = total_rows + + start_cell = CellRef(start_row, start_col) + + logging.info(f"[NAMED RANGE FOUND] Located named range '{range_name}' at {sheet_name}!{start_cell.coordinate} " + f"(data rows: {data_height}, no headers, total width: {total_cols})") + return sheet_name, start_cell, data_height, total_cols, header_row_count, TARGET_TYPE_NAMED_RANGE + except Exception as e: + logging.warning(f"Error accessing named range '{range_name}': {type(e).__name__}: {str(e)}") + + # Range/table not found + logging.warning(f"Named range or table '{range_name}' not found in workbook") + return None + + +# ============================================================================ +# HELPER FUNCTIONS FOR SHEET PROCESSING (extracted from _process_sheet_xlwings) +# ============================================================================ + +def _fill_variable_in_sheet(workbook_xw, target_name, source_template, template_vars, workbook_context=""): + """ + Fill a single variable cell with evaluated template value. + + Args: + workbook_xw: xlwings Book object + target_name: Name of the target named range (single cell) + source_template: Template string with {variables} + template_vars: Dictionary of variable values + workbook_context: Context string for logging + + Returns: + Boolean True if successful + """ + try: + # Evaluate template string + cell_value = source_template.format(**template_vars) + except KeyError as e: + logging.warning(f"Unknown variable in template: {e}") + return False + + # Write to named cell using xlwings + try: + named_range = workbook_xw.names[target_name] + target_range = named_range.refers_to_range + target_range.value = cell_value + logging.info(f"Set variable '{target_name}' to '{cell_value}'") + return True + except KeyError: + logging.warning(f"Named range '{target_name}' not found in {workbook_context}") + return False + except Exception as e: + logging.warning(f"Error setting variable '{target_name}' in {workbook_context}: {e}") + return False + + +def _prepare_table_data(source_type, source, sheet_config, requests_data, organizations_data, + requests_mapping_config, organizations_mapping_config, target_name): + """ + Prepare table data: select source, apply filter/sort, get column mapping. + + Args: + source_type: Type of source (Requests or Organizations) + source: Source identifier (mapping name) + sheet_config: Sheet configuration dictionary + requests_data: Requests data list + organizations_data: Organizations data list + requests_mapping_config: Requests mapping config + organizations_mapping_config: Organizations mapping config + target_name: Target range name (for logging) + + Returns: + Tuple of (sorted_data, column_mapping) or (None, None) if error + """ + # Select source data and mapping config + if source_type == SOURCE_TYPE_REQUESTS: + source_data = requests_data + mapping_config = requests_mapping_config + else: + source_data = organizations_data + mapping_config = organizations_mapping_config + + # Apply filter and sort + filter_condition = sheet_config.get("filter_condition") + sort_keys = sheet_config.get("sort_keys") + + filtered_data = [item for item in source_data if _apply_filter(item, filter_condition)] + sorted_data = _apply_sort(filtered_data, sort_keys) + + # Get column mapping + column_mapping = _get_column_mapping(mapping_config, source, source_type) + if not column_mapping: + logging.warning(f"Column mapping '{source}' not found or empty for {target_name}") + return None, None + + return sorted_data, column_mapping + + +def _resize_table_range(workbook_xw, sheet_xw, target_name, start_cell, max_col, start_row, num_data_rows, header_row_count=0, target_type=TARGET_TYPE_TABLE): + """ + Resize Excel table (ListObject) or named range to match data dimensions. + + For Tables (ListObjects): Uses ListObject.Resize() COM API + For Named Ranges: Redefines the named range via Name.RefersTo property + + Args: + workbook_xw: xlwings Book object (needed for named range resize) + sheet_xw: xlwings Sheet object + target_name: Name of the table/named range + start_cell: Starting cell (CellRef) - points to FIRST DATA ROW (after headers for tables) + max_col: Maximum column (1-based) + start_row: Starting row (1-based, first data row) + num_data_rows: Number of data rows + header_row_count: Number of header rows in the table (0 for named ranges) + target_type: TARGET_TYPE_TABLE or TARGET_TYPE_NAMED_RANGE + + Returns: + None (logging handles errors) + """ + if num_data_rows <= 1: + return + + try: + # Calculate the last data row + last_data_row = start_row + num_data_rows - 1 + + if target_type == TARGET_TYPE_TABLE: + # === TABLE (ListObject) RESIZE === + excel_sheet = sheet_xw.api + + # Find the ListObject (Table) by name + for list_obj in excel_sheet.ListObjects: + if list_obj.Name == target_name: + # If header_row_count not provided (legacy fallback), get it from the table + if header_row_count == 0: + try: + has_headers = list_obj.ShowHeaders + header_row_count = 1 if has_headers else 0 + except: + header_row_count = 1 + + # For resize, include header rows if they exist + if header_row_count > 0: + first_row = start_row - header_row_count + else: + first_row = start_row + + resize_range_str = f"{get_column_letter(start_cell.column)}{first_row}:{get_column_letter(max_col)}{last_data_row}" + + # Perform resize via ListObject.Resize() + new_range = excel_sheet.Range(resize_range_str) + list_obj.Resize(new_range) + logging.info(f"Resized table '{target_name}' to {resize_range_str} (header_rows={header_row_count})") + break + + elif target_type == TARGET_TYPE_NAMED_RANGE: + # === NAMED RANGE RESIZE === + # Redefine the named range to cover all data rows + # Named ranges have no headers, so start_row is the first row + first_col_letter = get_column_letter(start_cell.column) + last_col_letter = get_column_letter(max_col) + + # Build the range address in A1 style + range_address = f"${first_col_letter}${start_row}:${last_col_letter}${last_data_row}" + + # Get the actual Range object from the sheet and assign it to the Name + # This avoids R1C1/A1 format issues by using the Range object directly + new_range = sheet_xw.range(range_address) + workbook_xw.api.Names(target_name).RefersTo = new_range.api + logging.info(f"Resized named range '{target_name}' to {sheet_xw.name}!{range_address}") + + except Exception as e: + logging.warning(f"Resize skipped for {target_name} ({target_type}): {e}") + + +def _duplicate_template_row(sheet_xw, start_cell, max_col, start_row, num_data_rows, target_name, workbook_context=""): + """ + Duplicate template row to all data rows via copy-paste. + + Args: + sheet_xw: xlwings Sheet object + start_cell: Starting cell (CellRef) + max_col: Maximum column (1-based) + start_row: Starting row (1-based) + num_data_rows: Number of data rows + target_name: Target range name (for logging) + workbook_context: Context string for logging + + Returns: + None (logging handles errors) + """ + if num_data_rows <= 1: + return + + try: + # Replicate template row to all data rows in a single operation + template_range_str = f"{get_column_letter(start_cell.column)}{start_row}:{get_column_letter(max_col)}{start_row}" + last_data_row = start_row + num_data_rows - 1 + full_target_range_str = f"{get_column_letter(start_cell.column)}{start_row}:{get_column_letter(max_col)}{last_data_row}" + + # Copy template row + sheet_xw.range(template_range_str).copy() + # Paste to entire range - Excel automatically replicates the template row + sheet_xw.range(full_target_range_str).paste() + + # CRITICAL: Deselect after paste to avoid COM layer lock + # After bulk paste on large ranges (85k+ cells), Excel's COM layer becomes saturated + # and leaves a massive selection active. This prevents subsequent Range.Select() calls. + # Solution: Reset Excel's selection state by switching sheets and back, then select A1. + try: + from time import sleep + logging.info(f"Deselecting range after bulk paste for {target_name}...") + + # Switch to another sheet to force Excel to reset selection state + other_sheets = [s for s in sheet_xw.book.sheets if s.name != sheet_xw.name] + if other_sheets: + other_sheets[0].activate() + sleep(0.1) + + # Reactivate our sheet - Excel resets selection management when returning + sheet_xw.activate() + + # Select A1 - COM should manage this easily now + sheet_xw.api.Range("$A$1").Select() + logging.info(f"Successfully deselected after bulk paste for {target_name} (sheet reactivation)") + + except Exception as e: + # Deselection is non-critical, log and continue if it fails + logging.warning(f"Deselection after paste failed for {target_name}: {type(e).__name__}: {str(e)}") + + except Exception as e: + logging.warning(f"Template duplication failed for {target_name} in {workbook_context}: {e}") + + +def _fill_table_with_data(sheet_xw, start_cell, start_row, start_col, sorted_data, column_mapping, + value_replacement, target_name, sheet_name): + """ + Fill table with data: group contiguous columns and transfer via bulk 2D arrays. + + Args: + sheet_xw: xlwings Sheet object + start_cell: Starting cell (CellRef) + start_row: Starting row (1-based) + start_col: Starting column (1-based) + sorted_data: Sorted list of data items + column_mapping: Dict mapping Excel column indices to source field paths + value_replacement: Value replacement configuration (or None) + target_name: Target range name (for logging) + sheet_name: Sheet name (for logging) + + Returns: + None (logging handles errors and success) + """ + try: + # === Prepare column mapping and group contiguous columns === + col_order = sorted(column_mapping.keys()) + + # Group contiguous columns for optimal bulk update + contiguous_groups = [] + if col_order: + current_group = [col_order[0]] + for i in range(1, len(col_order)): + if col_order[i] == col_order[i-1] + 1: + current_group.append(col_order[i]) + else: + contiguous_groups.append(current_group) + current_group = [col_order[i]] + contiguous_groups.append(current_group) + + # === Update contiguous column groups (bulk 2D transfer) === + for col_group in contiguous_groups: + # Build 2D array for this group: rows × columns + data_2d = [] + for item in sorted_data: + row_values = [] + for excel_col_index in col_group: + source_field_path = column_mapping[excel_col_index] + # Get value from source item + value = get_nested_value(item, source_field_path.split(".")) + + # Apply value replacement + if value_replacement: + value = _apply_value_replacement(value, value_replacement) + + row_values.append(value) + data_2d.append(row_values) + + # Transfer entire group to Excel in ONE operation + first_col_in_group = start_col + col_group[0] + first_col_letter = get_column_letter(first_col_in_group) + target_range_start = f"{first_col_letter}{start_row}" + + # Write 2D array at once (xlwings automatically maps rows × columns) + sheet_xw.range(target_range_start).value = data_2d + + # Logging + num_data_rows = len(sorted_data) + logging.info(f"Filled table {target_name} with {num_data_rows} rows " + f"at {sheet_name}!{start_cell.coordinate} " + f"(bulk duplication + {len(contiguous_groups)} contiguous group(s))") + except Exception as e: + logging.error(f"Error filling table data for {target_name}: {e}") + logging.error(f"Traceback: {traceback.format_exc()}") + + +def _process_sheet_xlwings(workbook_xw, sheet_config, requests_data, organizations_data, + requests_mapping_config, organizations_mapping_config, template_vars, + workbook_context=""): + """ + Process a single sheet using xlwings (hybrid approach). + + Delegates to specialized helpers to maintain clarity and testability. + + Args: + workbook_xw: xlwings Book object + sheet_config: Sheet configuration dict + requests_data: List of request dictionaries + organizations_data: List of organization dictionaries + requests_mapping_config: Requests mapping config (for column mapping) + organizations_mapping_config: Organizations mapping config + template_vars: Dictionary of variables for template evaluation + workbook_context: Context string identifying the workbook (for logging) + + Returns: + Boolean True if successful + """ + source_type = sheet_config.get("source_type") + source = sheet_config.get("source") + target_name = sheet_config.get("target_name") + value_replacement = sheet_config.get("value_replacement") + + # === Variable sources: single cell fill === + if source_type == SOURCE_TYPE_VARIABLE: + return _fill_variable_in_sheet(workbook_xw, target_name, source, template_vars, workbook_context) + + # === Table sources: bulk data filling === + if source_type not in [SOURCE_TYPE_REQUESTS, SOURCE_TYPE_ORGANIZATIONS]: + return False + + # Prepare data: filter, sort, get column mapping + sorted_data, column_mapping = _prepare_table_data( + source_type, source, sheet_config, requests_data, organizations_data, + requests_mapping_config, organizations_mapping_config, target_name + ) + if sorted_data is None or column_mapping is None: + return False + + # Get table/named range dimensions from xlwings + try: + table_dims = _get_table_dimensions_xlwings(workbook_xw, target_name) + if not table_dims: + logging.warning(f"Target '{target_name}' not found (neither table nor named range)") + return False + + sheet_name, start_cell, table_height, table_width, header_row_count, target_type = table_dims + sheet_xw = workbook_xw.sheets[sheet_name] + start_row = start_cell.row + start_col = start_cell.column + max_col = start_col + table_width - 1 + num_data_rows = len(sorted_data) + + # === Bulk operations for data filling === + if sorted_data: + # STEP 0: Resize table/named range to match data dimensions + _resize_table_range(workbook_xw, sheet_xw, target_name, start_cell, max_col, start_row, num_data_rows, header_row_count, target_type) + + # STEP 1: Duplicate template row to all data rows + _duplicate_template_row(sheet_xw, start_cell, max_col, start_row, num_data_rows, target_name, workbook_context) + + # STEP 2-3: Fill with data (grouped contiguous columns) + _fill_table_with_data(sheet_xw, start_cell, start_row, start_col, sorted_data, + column_mapping, value_replacement, target_name, sheet_name) + else: + # No data - template row stays empty + logging.info(f"No data for target '{target_name}' ({target_type}), leaving template row empty") + + return True + + except Exception as e: + logging.warning(f"Error processing target '{target_name}': {e}") + logging.error(f"Traceback: {traceback.format_exc()}") + return False + + +# ============================================================================ +# COMPREHENSIVE EXCEL EXPORT ORCHESTRATION (for main script) +# ============================================================================ + +def prepare_excel_export(requests_mapping_config, organizations_mapping_config): + """ + Validate Excel export configuration (no data loading). + + This function has a SINGLE responsibility: validate the Excel export CONFIG. + It does NOT load production data (JSONs) - that is the responsibility of + the execution functions (run_normal_mode_export, export_excel_only). + + IMPORTANT: Mapping configs MUST be provided by the caller. The caller is responsible for: + 1. Loading mapping configs from Excel (e.g., via load_requests_mapping_config()) + 2. Passing them to this function for config validation + + This follows the dependency injection pattern: the caller provides dependencies, + this function validates config. This ensures: + - Clear responsibility separation: validation ≠ data loading + - Early CONFIG validation (BEFORE data collection in NORMAL MODE) + - Late DATA loading (AFTER collection, only when needed for execution) + + Args: + requests_mapping_config: Loaded requests mapping (required, non-empty list/dict) + organizations_mapping_config: Loaded organizations mapping (required, non-empty list/dict) + + Returns: + Tuple of (excel_config, has_critical_errors, error_messages) + - excel_config: Tuple of (workbooks_config, sheets_config) or None if errors + - has_critical_errors: Boolean True if validation found critical errors + - error_messages: List of error message strings + + Note: + JSONs are loaded separately by execution functions: + - NORMAL MODE: run_normal_mode_export() loads JSONs AFTER data collection + - --EXCEL-ONLY: export_excel_only() loads JSONs before execution + """ + + error_messages = [] + excel_config = None + has_critical_errors = False + + # === STEP 1: Validate mapping configurations are provided === + # Caller is responsible for loading these configs before calling this function + if not requests_mapping_config or (isinstance(requests_mapping_config, (list, dict)) and len(requests_mapping_config) == 0): + error_msg = "Requests mapping configuration must be provided and non-empty" + error_messages.append(error_msg) + logging.error(error_msg) + if console: + console.print(f"[bold red]✗ {error_msg}[/bold red]") + has_critical_errors = True + return excel_config, has_critical_errors, error_messages + + if not organizations_mapping_config or (isinstance(organizations_mapping_config, (list, dict)) and len(organizations_mapping_config) == 0): + error_msg = "Organizations mapping configuration must be provided and non-empty" + error_messages.append(error_msg) + logging.error(error_msg) + if console: + console.print(f"[bold red]✗ {error_msg}[/bold red]") + has_critical_errors = True + return excel_config, has_critical_errors, error_messages + + # === STEP 2: Load Excel config === + logging.info("Loading Excel export configuration...") + + excel_workbooks_config, excel_sheets_config, has_config_error, config_error_messages = load_excel_export_config(console) + if has_config_error: + error_msg = "Critical errors in Excel Export Config" + error_messages.append(error_msg) + error_messages.extend(config_error_messages) + has_critical_errors = True + logging.warning(error_msg) + if console: + console.print(f"[bold red]✗ {error_msg}[/bold red]") + excel_config = (excel_workbooks_config, excel_sheets_config) + return excel_config, has_critical_errors, error_messages + + if not excel_workbooks_config or not excel_sheets_config: + error_msg = "Excel export configuration is empty" + error_messages.append(error_msg) + logging.warning(error_msg) + if console: + console.print(f"[bold red]✗ {error_msg}[/bold red]") + excel_config = (excel_workbooks_config, excel_sheets_config) + return excel_config, has_critical_errors, error_messages + + # Package config into tuple for downstream functions + excel_config = (excel_workbooks_config, excel_sheets_config) + + # === STEP 3: Validate Excel config === + logging.info("Validating Excel export configuration...") + + has_critical_errors, validation_errors = validate_excel_config( + excel_config, + console, + requests_mapping_config or [], + organizations_mapping_config or {} + ) + + if validation_errors: + error_messages.extend(validation_errors) + if has_critical_errors and console: + console.print("[bold red]✗ Critical validation errors found[/bold red]") + else: + logging.info("✓ Excel export configuration validated successfully") + + return excel_config, has_critical_errors, error_messages + + +# ============================================================================ +# HIGH-LEVEL ORCHESTRATION FUNCTIONS (for main script integration) +# ============================================================================ + +def export_excel_only(sys_argv, + requests_filename=None, organizations_filename=None, + requests_mapping_config=None, organizations_mapping_config=None): + """ + Orchestrates EXCEL_ONLY mode - complete end-to-end Excel export workflow. + + This function completely encapsulates the --excel_only mode: + 1. Validates Excel configuration + 2. Loads JSON data files (must exist) + 3. Executes Excel export with error handling + 4. Displays user-friendly messages and confirmations + + IMPORTANT: The caller (main script) is responsible for loading mapping configs + before calling this function. This ensures consistent config instances across + the application and follows the dependency injection pattern. + + This follows the same pattern as run_check_only_mode() from quality_checks module. + + Args: + sys_argv: sys.argv from main script (for potential future CLI arg parsing) + requests_filename: Name of requests JSON file (e.g., "do_requests.json") + organizations_filename: Name of organizations JSON file (e.g., "do_organizations.json") + requests_mapping_config: Loaded requests mapping configuration (REQUIRED - caller must load) + organizations_mapping_config: Loaded organizations mapping configuration (REQUIRED - caller must load) + """ + global console + + if not requests_filename: + requests_filename = REQUESTS_FILE_NAME + if not organizations_filename: + organizations_filename = ORGANIZATIONS_FILE_NAME + + print() + console.print("[bold cyan]═══ EXCEL ONLY MODE ═══[/bold cyan]\n") + + # Step 1: Validate Excel configuration (no data loading) + logging.info("EXCEL ONLY MODE: Validating Excel configuration") + excel_config, has_config_critical, error_messages = \ + prepare_excel_export(requests_mapping_config, organizations_mapping_config) + + # Step 2: Handle critical configuration errors + if has_config_critical: + print() + console.print("[bold red]⚠ CRITICAL CONFIGURATION ERROR(S) DETECTED[/bold red]") + console.print("[bold red]────────────────────────────────────[/bold red]") + for idx, error_msg in enumerate(error_messages, 1): + console.print(f"[bold red]Error {idx}: {error_msg}[/bold red]") + console.print("[bold red]────────────────────────────────────[/bold red]") + print() + try: + import questionary + answer = questionary.confirm( + "⚠ Continue anyway?", + default=False + ).ask() + if not answer: + console.print("[bold red]Aborted by user[/bold red]") + logging.warning("EXCEL ONLY MODE: Aborted by user due to critical errors") + return + except ImportError: + console.print("[bold yellow]⚠ questionary not available for confirmation[/bold yellow]") + console.print("[bold yellow]Proceeding with export despite critical errors[/bold yellow]") + + # Step 3: Load JSON data files (must exist in --excel-only mode) + logging.info("EXCEL ONLY MODE: Loading data files") + requests_data = _load_json_file_internal(requests_filename) + organizations_data = _load_json_file_internal(organizations_filename) + + if requests_data is None or organizations_data is None: + console.print("[bold red]✗ Error: Could not load data files for Excel export[/bold red]") + logging.error("EXCEL ONLY MODE: Data file loading failed") + return + + # Step 4: Execute Excel export (direct call to export_to_excel, console is global) + print() + console.print("[bold cyan]═══ Excel Export ═══[/bold cyan]\n") + logging.info("EXCEL ONLY MODE: Executing export") + + if excel_config: + try: + logging.info(f"Starting Excel export: {len(requests_data)} requests, {len(organizations_data)} organizations") + + success, error_count = export_to_excel( + requests_data, + organizations_data, + excel_config, + requests_mapping_config=requests_mapping_config, + organizations_mapping_config=organizations_mapping_config + ) + + if success: + logging.info("EXCEL ONLY MODE: Export completed successfully") + else: + logging.warning(f"EXCEL ONLY MODE: Export completed with {error_count} error(s)") + except Exception as e: + error_msg = f"Excel export failed: {str(e)}" + logging.error(f"EXCEL ONLY MODE: {error_msg}\n{traceback.format_exc()}") + console.print(f"[bold red]✗ {error_msg}[/bold red]\n") + else: + console.print("[bold red]✗ Could not load Excel configuration[/bold red]\n") + logging.error("EXCEL ONLY MODE: Excel config missing") + + +def run_normal_mode_export(excel_enabled, excel_config, + requests_mapping_config=None, organizations_mapping_config=None): + """ + Orchestrates Excel export during normal mode execution. + + This function encapsulates the Excel export step that runs after requests and organizations + have been collected and written to JSON files. It handles: + - Loading JSONs from filesystem (ensures fresh data consistency) + - Executing Excel export with comprehensive error handling + - Displaying results to user + + This is called from the normal workflow after data collection completes. + + Args: + excel_enabled: Boolean indicating if Excel export is enabled + excel_config: Tuple of (workbooks_config, sheets_config) or None + requests_mapping_config: Loaded requests mapping configuration (optional) + organizations_mapping_config: Loaded organizations mapping configuration (optional) + + Note: + This function loads JSON files from the filesystem (which were written + during the data collection phase) to ensure consistency. + + Returns: + Tuple of (export_succeeded, error_message) + - export_succeeded: Boolean True if export completed successfully (or skipped) + - error_message: String with error details (empty if success=True or skipped) + """ + global console + + # Only proceed if export is enabled and config is available + if not excel_enabled or not excel_config: + logging.info("Excel export not enabled or config missing, skipping") + return True, "" # FIX BUG #3: Return True when export is intentionally skipped (not an error) + + print() + console.print("[bold cyan]═══ Excel Export ═══[/bold cyan]\n") + logging.info("NORMAL MODE: Starting Excel export") + + try: + # Load JSONs from filesystem to ensure data consistency with what was written + # Use constants imported from do_dashboard_constants.py (SINGLE SOURCE OF TRUTH) + requests_from_fs = _load_json_file_internal(REQUESTS_FILE_NAME) + organizations_from_fs = _load_json_file_internal(ORGANIZATIONS_FILE_NAME) + + if requests_from_fs is None or organizations_from_fs is None: + error_msg = "Could not load data files for Excel export" + logging.error(f"NORMAL MODE: {error_msg}") + console.print(f"[bold red]✗ {error_msg}[/bold red]\n") + return False, error_msg + + # Execute the export (direct call to export_to_excel, console is global) + logging.info(f"Starting Excel export: {len(requests_from_fs)} requests, {len(organizations_from_fs)} organizations") + + success, error_count = export_to_excel( + requests_from_fs, + organizations_from_fs, + excel_config, + requests_mapping_config=requests_mapping_config, + organizations_mapping_config=organizations_mapping_config + ) + + if success: + logging.info("NORMAL MODE: Excel export completed successfully") + return True, "" + else: + error_msg = f"Excel export completed with {error_count} error(s)" + logging.warning(f"NORMAL MODE: {error_msg}") + return False, error_msg + + except Exception as e: + error_msg = f"Unexpected error during Excel export: {str(e)}" + logging.error(f"NORMAL MODE: {error_msg}\n{traceback.format_exc()}") + console.print(f"[bold red]✗ {error_msg}[/bold red]\n") + return False, error_msg + + +def _load_json_file_internal(filename): + """ + Internal helper to load JSON file. + + Args: + filename: Path to JSON file + + Returns: + Parsed JSON data or None if file doesn't exist or can't be parsed + """ + try: + if not os.path.exists(filename): + logging.warning(f"JSON file not found: {filename}") + return None + + with open(filename, 'r', encoding='utf-8') as f: + data = json.load(f) + logging.info(f"Loaded {filename}: {len(data) if isinstance(data, list) else 'data'}") + return data + + except Exception as e: + logging.error(f"Error loading {filename}: {str(e)}") + return None diff --git a/do_dashboard_excel_only-exe.bat b/do_dashboard_excel_only-exe.bat new file mode 100644 index 0000000..7fc15ae --- /dev/null +++ b/do_dashboard_excel_only-exe.bat @@ -0,0 +1,3 @@ +@echo off +do_dashboard.exe --excel-only %* + diff --git a/do_dashboard_excel_only.bat b/do_dashboard_excel_only.bat new file mode 100644 index 0000000..92b927a --- /dev/null +++ b/do_dashboard_excel_only.bat @@ -0,0 +1,4 @@ +@echo off +call C:\PythonProjects\.rcvenv\Scripts\activate.bat +python do_dashboard.py --excel-only %* + diff --git a/do_dashboard_quality_checks.py b/do_dashboard_quality_checks.py new file mode 100644 index 0000000..62227b3 --- /dev/null +++ b/do_dashboard_quality_checks.py @@ -0,0 +1,786 @@ +""" +DO Dashboard - Quality Checks Module + +This module contains all quality assurance functions: +- JSON file loading and backup utilities +- Comprehensive non-regression checks with configurable rules +- Config-driven validation with Warning/Critical thresholds +- Support for special rules (New/Deleted Requests, New/Deleted Fields) +- 4-step logic for normal rules (field selection, transition matching, exception application, bloc_scope) + +Note: Coherence check is not applicable for DO Dashboard since organization +counters are computed directly from request details (not from a separate API). +""" + +import json +import logging +import os +import shutil + +import openpyxl +from rich.console import Console +from do_dashboard_utils import get_nested_value, get_old_filename as _get_old_filename, get_config_path +from do_dashboard_constants import ( + REQUESTS_FILE_NAME, + ORGANIZATIONS_FILE_NAME, + OLD_FILE_SUFFIX, + DASHBOARD_CONFIG_FILE_NAME, + REGRESSION_CHECK_TABLE_NAME +) + + +# ============================================================================ +# MODULE CONFIGURATION +# ============================================================================ + +# Debug mode: Set to True to display detailed changes for each regression check rule +debug_mode = False + + +def enable_debug_mode(): + """Enable debug mode to display detailed changes for each regression check rule.""" + global debug_mode + debug_mode = True + if console: + console.print("[dim]DEBUG MODE enabled - detailed changes will be displayed[/dim]") + + +# ============================================================================ +# MODULE DEPENDENCIES (injected from main module) +# ============================================================================ + +# Will be injected by the main module +console = None + +# Regression check config is loaded on-demand via load_regression_check_config() +regression_check_config = [] + +# NOTE: File names and table names are imported from do_dashboard_constants.py (SINGLE SOURCE OF TRUTH): +# - REQUESTS_FILE_NAME +# - ORGANIZATIONS_FILE_NAME +# - OLD_FILE_SUFFIX +# - DASHBOARD_CONFIG_FILE_NAME +# - REGRESSION_CHECK_TABLE_NAME + + +def set_dependencies(console_instance): + """ + Inject console instance from main module. + + Args: + console_instance: Rich Console instance for formatted output + """ + global console + console = console_instance + + +# ============================================================================ +# CONFIGURATION LOADING +# ============================================================================ + +def load_regression_check_config(console_instance=None): + """Loads and validates the regression check configuration from the Excel file. + + Args: + console_instance: Optional Rich Console instance. If not provided, uses global console. + """ + global regression_check_config, console + + if console_instance: + console = console_instance + + config_path = os.path.join(get_config_path(), DASHBOARD_CONFIG_FILE_NAME) + + try: + workbook = openpyxl.load_workbook(config_path) + except FileNotFoundError: + error_msg = f"Error: Configuration file not found at: {config_path}" + logging.critical(error_msg) + console.print(f"[bold red]{error_msg}[/bold red]") + raise Exception(error_msg) + + if REGRESSION_CHECK_TABLE_NAME not in workbook.sheetnames: + error_msg = f"Error: Sheet '{REGRESSION_CHECK_TABLE_NAME}' not found in the configuration file." + logging.critical(error_msg) + console.print(f"[bold red]{error_msg}[/bold red]") + raise Exception(error_msg) + + sheet = workbook[REGRESSION_CHECK_TABLE_NAME] + headers = [cell.value for cell in sheet[1]] + + temp_config = [] + + for row_index, row in enumerate(sheet.iter_rows(min_row=2, values_only=True), start=2): + rule_config = dict(zip(headers, row)) + + # Skip if ignore column contains "ignore" (case insensitive) + ignore_value = rule_config.get("ignore") + if ignore_value and isinstance(ignore_value, str) and "ignore" in ignore_value.lower(): + continue + + # Skip if all columns are None (empty row) + if all(value is None for value in row): + continue + + # Validate bloc_title and line_label + bloc_title = rule_config.get("bloc_title") + line_label = rule_config.get("line_label") + + if not bloc_title or not isinstance(bloc_title, str): + continue # Skip rows without bloc_title (header separators, etc.) + + if not line_label or not isinstance(line_label, str): + error_msg = f"Error in Regression_Check config, row {row_index}: 'line_label' is mandatory when 'bloc_title' is specified." + logging.critical(error_msg) + console.print(f"[bold red]{error_msg}[/bold red]") + raise Exception(error_msg) + + # Validate thresholds + warning_threshold = rule_config.get("warning_threshold") + critical_threshold = rule_config.get("critical_threshold") + + if warning_threshold is None or not isinstance(warning_threshold, (int, float)) or warning_threshold < 0: + error_msg = f"Error in Regression_Check config, row {row_index}: 'warning_threshold' must be a number >= 0." + logging.critical(error_msg) + console.print(f"[bold red]{error_msg}[/bold red]") + raise Exception(error_msg) + + if critical_threshold is None or not isinstance(critical_threshold, (int, float)) or critical_threshold < 0: + error_msg = f"Error in Regression_Check config, row {row_index}: 'critical_threshold' must be a number >= 0." + logging.critical(error_msg) + console.print(f"[bold red]{error_msg}[/bold red]") + raise Exception(error_msg) + + # Parse JSON fields + for json_field in ["field_selection", "transitions"]: + value = rule_config.get(json_field) + if value and isinstance(value, str): + try: + rule_config[json_field] = json.loads(value) + except json.JSONDecodeError: + error_msg = f"Error in Regression_Check config, row {row_index}, field '{json_field}': Invalid JSON format." + logging.critical(error_msg) + console.print(f"[bold red]{error_msg}[/bold red]") + raise Exception(error_msg) + elif value is None: + rule_config[json_field] = None + + # Validate field_selection format + field_selection = rule_config.get("field_selection") + + # Special rules that don't use field_selection + special_rules_no_selection = ["New Fields", "Deleted Fields", "Deleted Requests"] + + if line_label not in special_rules_no_selection: + # Standard rules and "New Requests" MUST have field_selection + if field_selection is None: + error_msg = f"Error in Regression_Check config, row {row_index}: 'field_selection' is mandatory for rule '{line_label}'." + logging.critical(error_msg) + console.print(f"[bold red]{error_msg}[/bold red]") + raise Exception(error_msg) + + if not isinstance(field_selection, list): + console.print(f"[yellow]⚠ Row {row_index}: 'field_selection' must be a JSON array of [action, selector] pairs, skipping rule[/yellow]") + rule_config["_config_error"] = True + else: + for step_idx, step in enumerate(field_selection): + if not isinstance(step, list) or len(step) != 2: + console.print(f"[yellow]⚠ Row {row_index}: field_selection[{step_idx}] must be array of 2 elements [action, selector], skipping rule[/yellow]") + rule_config["_config_error"] = True + break + + action, field_selector = step + + if action not in ["include", "exclude"]: + console.print(f"[yellow]⚠ Row {row_index}: field_selection[{step_idx}] action must be 'include' or 'exclude', got '{action}', skipping rule[/yellow]") + rule_config["_config_error"] = True + break + + if not isinstance(field_selector, str) or "." not in field_selector: + console.print(f"[yellow]⚠ Row {row_index}: field_selection[{step_idx}] selector must be string with dot notation (e.g., '*.*', 'group.*', 'group.field'), got '{field_selector}', skipping rule[/yellow]") + rule_config["_config_error"] = True + break + else: + if field_selection is not None and field_selection != [] and field_selection != "": + console.print(f"[yellow]⚠ Row {row_index}: Special rule '{line_label}' should have empty field_selection, got {field_selection}[/yellow]") + rule_config["_config_error"] = True + + # Validate bloc_scope + bloc_scope = rule_config.get("bloc_scope") + if bloc_scope is not None and bloc_scope not in ["all", "any"]: + error_msg = f"Error in Regression_Check config, row {row_index}: 'bloc_scope' must be 'all' or 'any'." + logging.critical(error_msg) + console.print(f"[bold red]{error_msg}[/bold red]") + raise Exception(error_msg) + + # Validate transitions format + transitions = rule_config.get("transitions") + config_error = False + + if transitions is not None: + if not isinstance(transitions, list): + console.print(f"[yellow]⚠ Row {row_index}: 'transitions' must be a JSON array, skipping this rule[/yellow]") + config_error = True + else: + for step_idx, transition_step in enumerate(transitions): + if not isinstance(transition_step, list) or len(transition_step) != 4: + console.print(f"[yellow]⚠ Row {row_index}: transitions[{step_idx}] must be array of 4 elements [action, field_selector, from, to], skipping[/yellow]") + config_error = True + break + + action, field_selector, from_val, to_val = transition_step + + if action not in ["include", "exclude"]: + console.print(f"[yellow]⚠ Row {row_index}: transitions[{step_idx}] action must be 'include' or 'exclude', got '{action}', skipping[/yellow]") + config_error = True + break + + if not isinstance(field_selector, str) or "." not in field_selector: + console.print(f"[yellow]⚠ Row {row_index}: transitions[{step_idx}] field_selector must be string with dot notation, got '{field_selector}', skipping[/yellow]") + config_error = True + break + + if config_error: + rule_config["_config_error"] = True + + temp_config.append(rule_config) + + regression_check_config = temp_config + console.print(f"Loaded {len(regression_check_config)} regression check rules.", style="green") + + +def run_check_only_mode(sys_argv): + """ + Orchestrates CHECK_ONLY and CHECK_ONLY_COMPARE modes. + + - CHECK_ONLY: Full non-regression validation on existing files + - CHECK_ONLY_COMPARE: Regression-only comparison of two specific files + + Args: + sys_argv: sys.argv from main script (to parse command-line arguments) + """ + global console + + if console is None: + console = Console() + + print() + + # Detect CHECK_ONLY_COMPARE mode: --check-only + if len(sys_argv) >= 4: + current_file = sys_argv[2] + old_file = sys_argv[3] + + console.print("[bold cyan]═══ CHECK ONLY COMPARE MODE ═══[/bold cyan]") + console.print(f"Comparing two specific files:\n") + console.print(f" Current: [bold]{current_file}[/bold]") + console.print(f" Old: [bold]{old_file}[/bold]\n") + + print() + load_regression_check_config(console) + + print() + has_regression_critical = run_quality_checks( + current_requests=current_file, + old_requests_filename=old_file + ) + + if has_regression_critical: + console.print("[bold red]✗ CRITICAL issues detected![/bold red]") + else: + console.print("[bold green]✓ All checks passed successfully![/bold green]") + + else: + console.print("[bold cyan]═══ CHECK ONLY MODE ═══[/bold cyan]") + console.print("Running quality checks on existing data files without collecting new data.\n") + + print() + load_regression_check_config(console) + + print() + old_requests_file = _get_old_filename(REQUESTS_FILE_NAME, OLD_FILE_SUFFIX) + has_regression_critical = run_quality_checks( + current_requests=REQUESTS_FILE_NAME, + old_requests_filename=old_requests_file + ) + + if has_regression_critical: + console.print("[bold red]✗ CRITICAL issues detected![/bold red]") + else: + console.print("[bold green]✓ All checks passed successfully![/bold green]") + + +# ============================================================================ +# FILE UTILITIES +# ============================================================================ + +def load_json_file(filename): + """ + Loads a JSON file (requests, organizations, or any JSON data). + Returns the parsed JSON data or None if file doesn't exist or error occurred. + """ + if os.path.exists(filename): + try: + with open(filename, 'r', encoding='utf-8') as f: + return json.load(f) + except Exception as e: + logging.warning(f"Could not load JSON file '{filename}': {e}") + console.print(f"[yellow]⚠ Warning: Could not load JSON file '{filename}': {e}[/yellow]") + return None + + +def backup_output_files(): + """ + Silently backups current output files before writing new versions. + Called AFTER all checks pass to avoid losing history on crash. + """ + def _backup_file_silent(source, destination): + if os.path.exists(source): + try: + shutil.copy2(source, destination) + except Exception as e: + logging.warning(f"Could not backup {source}: {e}") + + _backup_file_silent(REQUESTS_FILE_NAME, _get_old_filename(REQUESTS_FILE_NAME, OLD_FILE_SUFFIX)) + _backup_file_silent(ORGANIZATIONS_FILE_NAME, _get_old_filename(ORGANIZATIONS_FILE_NAME, OLD_FILE_SUFFIX)) + + +# ============================================================================ +# QUALITY CHECKS ORCHESTRATION +# ============================================================================ + +def run_quality_checks(current_requests, old_requests_filename): + """ + Runs non-regression quality checks on requests data. + + Note: Coherence check is not applicable for DO Dashboard since organization + counters are computed from request details, not from a separate API. + + Args: + current_requests: Either a filename (str) to load requests from, + or a list of request dictionaries (already in memory) + old_requests_filename: Filename of old requests for regression comparison (str) + + Returns: + has_regression_critical (bool) + + Usage: + - Normal mode: + run_quality_checks( + current_requests=output_requests, # list (in memory) + old_requests_filename=REQUESTS_FILE_NAME # str (current file on disk) + ) + + - Check-only mode: + run_quality_checks( + current_requests=REQUESTS_FILE_NAME, # str (current file) + old_requests_filename=get_old_filename(REQUESTS_FILE_NAME) # str (old file) + ) + """ + global console, regression_check_config + + if not regression_check_config: + if console is None: + console = Console() + load_regression_check_config(console) + + console.print("[bold cyan]══════════════════════════════════════════════════[/bold cyan]") + + # Load current_requests if it's a filename + if isinstance(current_requests, str): + current_requests_data = load_json_file(current_requests) + if current_requests_data is None: + console.print(f"[bold red]Error: Could not load current requests from '{current_requests}'[/bold red]") + return True + elif isinstance(current_requests, list): + current_requests_data = current_requests + else: + console.print(f"[bold red]Error: current_requests must be either a filename (str) or a list of requests[/bold red]") + return True + + # Run non-regression check + has_regression_critical = non_regression_check(current_requests_data, old_requests_filename) + + console.print("[bold cyan]══════════════════════════════════════════════════[/bold cyan]") + print() + + return has_regression_critical + + +# ============================================================================ +# NON-REGRESSION CHECK +# ============================================================================ + +def non_regression_check(output_requests, old_requests_filename): + """ + Comprehensive config-driven non-regression check comparing current vs old requests. + Uses rules from regression_check_config loaded from Excel. + Returns True if any critical issue was found, False otherwise. + + Args: + output_requests: Current requests data (list) + old_requests_filename: Filename of old requests JSON file to load + """ + console.print("\n[bold]═══ Non Regression Check ═══[/bold]\n") + + console.print(f"[dim]Loading old requests from: {old_requests_filename}[/dim]") + old_requests = load_json_file(old_requests_filename) + + if old_requests is None: + console.print(f"[yellow]⚠ No old requests file found at '{old_requests_filename}', skipping non-regression check[/yellow]") + return False + + has_critical = False + + # ========== INTERNAL UTILITY FUNCTIONS ========== + + def _is_undefined(value): + return value in [None, "", "undefined"] + + def _values_are_equal(val1, val2): + if _is_undefined(val1) and _is_undefined(val2): + return True + return val1 == val2 + + def _apply_pipeline_step(checked_fields, action, field_selector, from_pattern, to_pattern): + for i, field_record in enumerate(checked_fields): + group_name, field_name, old_val, new_val, is_checked = field_record + if not _field_selector_matches_pattern(field_selector, group_name, field_name): + continue + if _transition_matches(old_val, new_val, from_pattern, to_pattern): + if action == "include": + checked_fields[i][4] = True + elif action == "exclude": + checked_fields[i][4] = False + + def _transition_matches(old_val, new_val, expected_old, expected_new): + if expected_old == "*undefined": + old_matches = old_val in [None, "", "undefined"] + elif expected_old == "*defined": + old_matches = old_val not in [None, "", "undefined"] + elif expected_old == "*": + old_matches = True + else: + old_matches = (old_val == expected_old) + + if expected_new == "*undefined": + new_matches = new_val in [None, "", "undefined"] + elif expected_new == "*defined": + new_matches = new_val not in [None, "", "undefined"] + elif expected_new == "*": + new_matches = True + else: + new_matches = (new_val == expected_new) + + return old_matches and new_matches + + def _get_status_and_style(count, warning_threshold, critical_threshold): + nonlocal has_critical + if count > critical_threshold: + has_critical = True + return "CRITICAL", "red", "✗" + elif count > warning_threshold: + return "WARNING", "yellow", "⚠" + else: + return "OK", "green", "✓" + + def _print_block_header(title, status_tuple, indent=0): + indent_str = " " * indent + status, color, emoji = status_tuple + console.print(f"{indent_str}{emoji} [{color}][bold]{title}[/bold][/{color}]") + + def _print_check_line(message, count, status_tuple, indent=1): + indent_str = " " * indent + status, color, emoji = status_tuple + console.print(f"{indent_str}{emoji} [{color}]{message}: {count}[/{color}]") + + def _calculate_block_status(line_statuses): + if any(s[0] == "CRITICAL" for s in line_statuses): + return ("CRITICAL", "red", "✗") + elif any(s[0] == "WARNING" for s in line_statuses): + return ("WARNING", "yellow", "⚠") + else: + return ("OK", "green", "✓") + + def _field_selector_matches_pattern(selector, group_name, field_name): + if selector == "*.*": + return True + sel_group, sel_field = selector.split(".", 1) + if sel_group != "*" and sel_group != group_name: + return False + if sel_field == "*": + return True + return sel_field == field_name + + def _apply_field_selection_pipeline(all_fields, field_selection_config): + candidate_fields = set() + if not field_selection_config: + return candidate_fields + for action, field_selector in field_selection_config: + for group_name, field_name in all_fields: + if _field_selector_matches_pattern(field_selector, group_name, field_name): + if action == "include": + candidate_fields.add((group_name, field_name)) + elif action == "exclude": + candidate_fields.discard((group_name, field_name)) + return candidate_fields + + def _get_key_field_from_new_requests_rule(rule, new_requests_list, old_requests_list): + if not new_requests_list or not old_requests_list: + raise ValueError("Cannot determine key field: empty request lists") + + new_req = new_requests_list[0] + old_req = old_requests_list[0] + + candidate_fields = _build_candidate_fields(new_req, old_req, rule.get("field_selection")) + + if not candidate_fields: + raise ValueError( + f"field_selection produced no candidate fields. " + f"Config: {rule.get('field_selection')}" + ) + + for group_name, field_name in sorted(candidate_fields): + new_val = get_nested_value(new_req, [group_name, field_name]) + old_val = get_nested_value(old_req, [group_name, field_name]) + if new_val is not None and old_val is not None: + return field_name, group_name + + raise ValueError( + f"No field in field_selection has values in both first new and old request. " + f"Candidates from pipeline: {candidate_fields}. " + f"Verify field_selection config or data has proper values." + ) + + def _build_requests_dict(requests_list, key_field, field_group): + result = {} + for request in requests_list: + key = get_nested_value(request, [field_group, key_field]) + if key: + result[key] = request + return result + + def _matches_transition(old_val, new_val, transitions_config): + if transitions_config is None: + return False + for transition in transitions_config: + expected_old, expected_new = transition + if _transition_matches(old_val, new_val, expected_old, expected_new): + return True + return False + + def _process_special_rule(rule, line_label, new_dict, old_dict): + if line_label == "New Requests": + return len(set(new_dict.keys()) - set(old_dict.keys())) + elif line_label == "Deleted Requests": + return len(set(old_dict.keys()) - set(new_dict.keys())) + else: + return 0 + + def _process_new_deleted_fields(line_label, new_dict, old_dict): + field_counts = {} + common_keys = sorted(set(new_dict.keys()) & set(old_dict.keys())) + + for key in common_keys: + new_req = new_dict[key] + old_req = old_dict[key] + + all_groups = sorted(set(new_req.keys()) | set(old_req.keys())) + + for group_name in all_groups: + new_group = new_req.get(group_name, {}) + old_group = old_req.get(group_name, {}) + + if not isinstance(new_group, dict): + new_group = {} + if not isinstance(old_group, dict): + old_group = {} + + new_fields = set(new_group.keys()) + old_fields = set(old_group.keys()) + + if line_label == "New Fields": + changed_fields = sorted(new_fields - old_fields) + elif line_label == "Deleted Fields": + changed_fields = sorted(old_fields - new_fields) + else: + changed_fields = [] + + for field_name in changed_fields: + qualified_name = f"{group_name}.{field_name}" + field_counts[qualified_name] = field_counts.get(qualified_name, 0) + 1 + + return sorted(field_counts.items(), key=lambda x: (-x[1], x[0])) + + def _build_candidate_fields(new_req, old_req, field_selection_config): + common_groups = sorted(set(new_req.keys()) & set(old_req.keys())) + all_available_fields = [] + + for group_name in common_groups: + new_group = new_req.get(group_name, {}) + old_group = old_req.get(group_name, {}) + + if not isinstance(new_group, dict): + new_group = {} + if not isinstance(old_group, dict): + old_group = {} + + common_field_names = sorted(set(new_group.keys()) & set(old_group.keys())) + for field_name in common_field_names: + all_available_fields.append((group_name, field_name)) + + if not field_selection_config: + return [] + + candidate_fields = _apply_field_selection_pipeline(all_available_fields, field_selection_config) + return sorted(candidate_fields, key=lambda x: (x[0], x[1])) + + def _process_rule(rule, new_dict, old_dict): + if rule.get("_config_error"): + return 0, [] + + field_selection_config = rule.get("field_selection") + bloc_scope = rule.get("bloc_scope") or "any" + + common_keys = sorted(set(new_dict.keys()) & set(old_dict.keys())) + matching_requests_count = 0 + details_list = [] + + for key in common_keys: + new_req = new_dict[key] + old_req = old_dict[key] + + candidate_fields = _build_candidate_fields(new_req, old_req, field_selection_config) + + if not candidate_fields: + continue + + all_fields_list = [] + changed_fields = [] + + for group_name, field_name in candidate_fields: + new_val = get_nested_value(new_req, [group_name, field_name]) + old_val = get_nested_value(old_req, [group_name, field_name]) + + field_has_changed = not _values_are_equal(old_val, new_val) + if field_has_changed: + changed_fields.append((group_name, field_name)) + all_fields_list.append([group_name, field_name, old_val, new_val, False]) + + transitions_config = rule.get("transitions", []) + if transitions_config and isinstance(transitions_config, list): + for action, field_selector, from_val, to_val in transitions_config: + _apply_pipeline_step(all_fields_list, action, field_selector, from_val, to_val) + + checked_fields = [(f[0], f[1], f[2], f[3]) for f in all_fields_list if f[4]] + + inclusion_matches = False + if bloc_scope == "all": + if len(changed_fields) > 0 and len(checked_fields) == len(changed_fields): + inclusion_matches = True + else: # bloc_scope == "any" + if len(checked_fields) > 0: + inclusion_matches = True + + if inclusion_matches: + matching_requests_count += 1 + if debug_mode and checked_fields: + field_changes = [(f"{gn}.{fn}", ov, nv) for gn, fn, ov, nv in checked_fields] + details_list.append((key, field_changes)) + + return matching_requests_count, details_list + + # ========== MAIN LOGIC ========== + + key_field = None + field_group = None + + for rule in regression_check_config: + if rule.get("line_label") == "New Requests": + try: + key_field, field_group = _get_key_field_from_new_requests_rule( + rule, + output_requests, + old_requests + ) + break + except ValueError as e: + console.print(f"[bold red]Error determining key field: {e}[/bold red]") + return True + + if not key_field: + console.print("[bold red]Error: 'New Requests' rule not found or has no valid field_selection[/bold red]") + return True + + console.print(f"[dim]Using key field: {field_group}.{key_field}[/dim]\n") + + new_dict = _build_requests_dict(output_requests, key_field, field_group) + old_dict = _build_requests_dict(old_requests, key_field, field_group) + + # Group rules by bloc_title, preserving order of first appearance + blocs = {} + bloc_order = [] + for rule in regression_check_config: + bloc_title = rule["bloc_title"] + if bloc_title not in blocs: + blocs[bloc_title] = [] + bloc_order.append(bloc_title) + blocs[bloc_title].append(rule) + + for bloc_title in bloc_order: + rules = blocs[bloc_title] + line_results = [] + + for rule in rules: + line_label = rule["line_label"] + + if line_label in ["New Requests", "Deleted Requests"]: + count = _process_special_rule(rule, line_label, new_dict, old_dict) + line_results.append((line_label, count, None, "simple")) + + elif line_label in ["New Fields", "Deleted Fields"]: + field_list = _process_new_deleted_fields(line_label, new_dict, old_dict) + count = len(field_list) + line_results.append((line_label, count, field_list, "fields")) + + else: + count, details = _process_rule(rule, new_dict, old_dict) + line_results.append((line_label, count, details, "details")) + + # Calculate status for each line + line_results_with_status = [] + for line_label, count, data, result_type in line_results: + rule = next(r for r in rules if r["line_label"] == line_label) + warning_threshold = rule["warning_threshold"] + critical_threshold = rule["critical_threshold"] + status_tuple = _get_status_and_style(count, warning_threshold, critical_threshold) + line_results_with_status.append((line_label, count, data, result_type, status_tuple)) + + bloc_status = _calculate_block_status([result[4] for result in line_results_with_status]) + _print_block_header(bloc_title, bloc_status, indent=0) + + for line_label, count, data, result_type, status_tuple in line_results_with_status: + should_display = (bloc_title == "Structure") or (status_tuple[0] != "OK") + + if should_display: + if result_type == "fields": + _print_check_line(line_label, count, status_tuple, indent=1) + for field_name, request_count in data: + console.print(f" {field_name} ({request_count} requests)") + + elif result_type == "details": + _print_check_line(line_label, count, status_tuple, indent=1) + if debug_mode and data and len(data) > 0: + for request_key, field_changes in data: + console.print(f" [dim]{key_field}: {request_key}[/dim]") + for qualified_field, old_val, new_val in field_changes: + old_display = f"'{old_val}'" if isinstance(old_val, str) else str(old_val) + new_display = f"'{new_val}'" if isinstance(new_val, str) else str(new_val) + console.print(f" - {qualified_field}: {old_display} → {new_display}") + + else: + _print_check_line(line_label, count, status_tuple, indent=1) + + console.print() + + return has_critical diff --git a/do_dashboard_utils.py b/do_dashboard_utils.py new file mode 100644 index 0000000..85b9129 --- /dev/null +++ b/do_dashboard_utils.py @@ -0,0 +1,221 @@ +""" +DO Dashboard - Utility Functions Module + +This module contains generic utility functions used throughout the DO Dashboard: +- HTTP client management (thread-safe) +- Nested data structure navigation with wildcard support +- Configuration path resolution (script vs PyInstaller) +- Thread position management for progress bars +- Filename generation utilities +""" + +import os +import sys +import threading + +import httpx + +from do_dashboard_constants import CONFIG_FOLDER_NAME + + +# ============================================================================ +# GLOBAL VARIABLES (managed by main module) +# ============================================================================ +thread_local_storage = threading.local() + + +def run_with_context(func, context, *args, **kwargs): + """ + Wrapper to set thread-local context before running a function in a new thread. + Useful for ThreadPoolExecutor where context is lost. + """ + thread_local_storage.current_request_context = context + return func(*args, **kwargs) + + +# These will be set/accessed from the main module +httpx_clients = {} +_clients_lock = threading.Lock() +threads_list = [] +_threads_list_lock = threading.Lock() + + +# ============================================================================ +# HTTP CLIENT MANAGEMENT +# ============================================================================ + +def get_httpx_client() -> httpx.Client: + """ + Get or create thread-local HTTP client. + Keep-alive is disabled to avoid stale connections with load balancers. + """ + global httpx_clients + thread_id = threading.get_ident() + + with _clients_lock: + if thread_id not in httpx_clients: + # Create client with keep-alive disabled + httpx_clients[thread_id] = httpx.Client( + headers={"Connection": "close"}, # Explicitly request closing + limits=httpx.Limits(max_keepalive_connections=0, max_connections=100) + ) + return httpx_clients[thread_id] + + +def clear_httpx_client(): + """ + Removes the current thread's client from the cache. + Ensures a fresh client (and socket pool) will be created on the next call. + """ + global httpx_clients + thread_id = threading.get_ident() + with _clients_lock: + if thread_id in httpx_clients: + try: + httpx_clients[thread_id].close() + except: + pass + del httpx_clients[thread_id] + + +def get_thread_position(): + """ + Get the position of the current thread in the threads list. + Used for managing progress bar positions in multithreaded environment. + """ + global threads_list + thread_id = threading.get_ident() + with _threads_list_lock: + if thread_id not in threads_list: + threads_list.append(thread_id) + return len(threads_list) - 1 + else: + return threads_list.index(thread_id) + + +# ============================================================================ +# NESTED DATA NAVIGATION +# ============================================================================ + +def get_nested_value(data_structure, path, default=None): + """ + Extracts a value from a nested structure of dictionaries and lists. + Supports a wildcard '*' in the path to retrieve all elements from a list. + + Args: + data_structure: The nested dict/list structure to navigate + path: List of keys/indices to follow. Use '*' for list wildcard. + default: Value to return if path not found + + Returns: + The value at the end of the path, or default if not found + + Examples: + get_nested_value({"a": {"b": 1}}, ["a", "b"]) -> 1 + get_nested_value({"items": [{"x": 1}, {"x": 2}]}, ["items", "*", "x"]) -> [1, 2] + """ + if data_structure is None: + return "$$$$ No Data" + if not path: + return default + + if "*" in path: + wildcard_index = path.index("*") + path_before = path[:wildcard_index] + path_after = path[wildcard_index + 1:] + + def _get_simple_nested_value(ds, p, d): + cl = ds + for k in p: + if isinstance(cl, dict): + cl = cl.get(k) + elif isinstance(cl, list): + try: + if isinstance(k, int) and -len(cl) <= k < len(cl): + cl = cl[k] + else: + return d + except (IndexError, TypeError): + return d + else: + return d + if cl is None: + return d + return cl + + base_level = _get_simple_nested_value(data_structure, path_before, default) + + if not isinstance(base_level, list): + return default + + results = [] + for item in base_level: + value = get_nested_value(item, path_after, default) + if value is not default and value != "$$$$ No Data": + results.append(value) + + # Flatten the results by one level to handle multiple wildcards + final_results = [] + for res in results: + if isinstance(res, list): + final_results.extend(res) + else: + final_results.append(res) + + return final_results + + # No wildcard, original logic (iterative) + current_level = data_structure + for key_or_index in path: + if isinstance(current_level, dict): + current_level = current_level.get(key_or_index) + if current_level is None: + return default + elif isinstance(current_level, list): + try: + if isinstance(key_or_index, int) and -len(current_level) <= key_or_index < len(current_level): + current_level = current_level[key_or_index] + else: + return default + except (IndexError, TypeError): + return default + else: + return default + return current_level + + +# ============================================================================ +# CONFIGURATION UTILITIES +# ============================================================================ + +def get_config_path(): + """ + Gets the correct path to the config folder. + Works for both script execution and PyInstaller executable. + + Returns: + Path to config folder + """ + if getattr(sys, 'frozen', False): + # Running as a PyInstaller bundle + config_folder = CONFIG_FOLDER_NAME + return os.path.join(sys._MEIPASS, config_folder) + else: + # Running as a script + return CONFIG_FOLDER_NAME + + +def get_old_filename(current_filename, old_suffix="_old"): + """Generate old backup filename from current filename. + + Example: "do_requests.json" -> "do_requests_old.json" + + Args: + current_filename: Current file name (e.g., "do_requests.json") + old_suffix: Suffix to append before file extension (default: "_old") + + Returns: + Old backup filename with suffix before extension + """ + name, ext = os.path.splitext(current_filename) + return f"{name}{old_suffix}{ext}"