From ffb0e1863510e965c5303f9f9f1058cf94f0ced9 Mon Sep 17 00:00:00 2001 From: manoraga Date: Tue, 11 Aug 2026 16:20:15 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=B2=D0=B7=D0=B0=D0=B8=D0=BC=D0=BE=D0=B4?= =?UTF-8?q?=D0=B5=D0=B9=D1=81=D1=82=D0=B2=D0=B8=D0=B5=20=D1=84=D1=83=D0=BD?= =?UTF-8?q?=D0=BA=D1=86=D0=B8=D0=BE=D0=BD=D0=B0=D0=BB=D0=B0=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D1=8B=20=D1=81=20db=5Fcli.py=20=D1=87=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B7=20=D0=B4=D0=B8=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D0=B2=D1=83=D1=8E=20=D1=81=D1=82=D1=80=D0=BE=D0=BA=D1=83.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/scud_orion_ai.db | Bin 2605056 -> 3100672 bytes project_code.md | 3963 +++++++++++++++++++++++++++++++++++++++ scripts/db_cli.py | 24 +- scud_orion_ai_v2.tar.gz | Bin 0 -> 291719 bytes 4 files changed, 3978 insertions(+), 9 deletions(-) create mode 100644 project_code.md create mode 100644 scud_orion_ai_v2.tar.gz diff --git a/data/scud_orion_ai.db b/data/scud_orion_ai.db index 6a455aec95207e4e85ce6385a1e6d07b9d745ed8..0283c273eab862e3e7cbc81188bd30134301bae0 100644 GIT binary patch delta 224636 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 aRZWS<_6rJ-(mup<`VF3g|2t;*%>E0vHy9KE delta 39765 zcmcG%d0Z9MA2&Yd%yMVFb6I4$R}=(P5D-K_#0A`UF_%nBu`-o1!7a@NE^cKmAj)wM zMC{5%MN}qRu`E+dQP4~?*VO!GVp&;g{ysC;b)Mhz=W~5IbKYm0GiT27IiHQ(;!ja- z?)xa;?v0L66rN2{)K&OT!+-yRs5TfK*_p9fKo2 z?X}F3!VRq>(73__t;5mw!W*sq`8SnNczaY>D938-a_c)*y6~IWU~GMdSS4m;;k|fa z*MPX^B@&y>*h$mrY`?;P{dkCc z%~?Mj&~RscFSxzntZxUABb@aSfL?dj+u`<-vtESTC}-Ws(hS5c=o5$~<8gm&TdLOC^@ z-GUfuc;PX3vt7eeBh{idqTJ+Bvr$3SASk%BO0T(HMSln%tO_lx7&x3~)N6VbFYc1l zPpJjz+^*}R{cCb?JE|j9PpMz4OVmNCpY@Ej*gDo4soYd{D>D^Z>4XN-UGNgQMxG-l zOMgl`rHN96__J6dz9a?;1?V=C@PD|MFj5HTf8#Yim+#GcTh3TETP9i(xo^;?R6RaG z-{Xq7SGhR$KlU)YnjOowVIDBwGHaN4D_YFFM$e#=@xSulbPPokxJ`cwC#WRI9RH*ytsxAJ$K0md(4=mVluA|xqb^$82y_9Hx1v!B=>Qk4 zDjE&U%RxP;?kJF={h8)?IUa<)Q5{-|hBB*}7u0=fp4wGqtP8C@@hSSMRZ@;BE0m#1 zfP6;YD36iDq^nZ7G*SFRtd?Twa&fUZN{ka3;d`N6m?NYMq5NO`L4G|y2?es}={bBy zUb39BlvyTQI$LD!2W|^DC4fui6!rsls`VJ%hfQT==6iGmEk->E%uFX4vvmb3RV{K8$}66W^Bni=O!P zImTUUwg;6WGFwA$lg=8n?Jo`eh{=(UQJM@*)BhVkqY_;Hj^}y(K0%)^tU=W^miUZ7WUANWYbkhORvGTsIXx(s|}q-7x!tA@aSoN{V}|ZMV+d@(k%5?wNhQL zzN4N}_p4LYsaoS2x`$fO)z=$^Jlhzqmb`P69)L5OlT%0OC^}LZLoBuQ^ZE)*DdC2nuX%$`E71(Iy;a!mYFh7h6n|{HgSw zr{3!oQ?{2)c#H{WnDA&59%aHWnedA`&Uxy+Mw&8=FyR+Wc(@5aZ^FY&c&G^v0i1)M zYQSJqhUZLpkO`-o@IVtDV8Z=PxSvYrz;g0rX!SK^=wrgYP1v*iJSp#4exBeSru^Ma zxSN`zuV+sRbTwt@V!~-AoNB_IO}LW@cQoM+<_c0w8QPn0vI)1Vu4E@4v&)rov79gG z%2{#-okeHR=}N2;OsCSZ+7c(X3z61Kxu#^<5-v_#K94)klh2oMHqv<>mrjl@;WEgi zC0x@*1D0~yfTfmQD{}B!sx1zp@DF%1eTZHqHWzLQp9qVD=lE;fJt2rMQ?@IaN^|+5 zypd0{+_&ttOtZu>?dYC(nBQphuaK;kd>793GW{MU5-E&NCSOJKNhB==LPkVE>qdHyrG@o1YmD-z@`*A}>7#hb zr{wqL*W_sFw)C;o+p>WlAgSUBajiI73=@74whL2)cKm(*3w{w0KrdT=;C;AT+{fH} zu0Q9;o?~5XHrt-1fhb+YjAB~Q4Rl{A509jMaUIsO`H&xxhr0W`FCUA`^U3D}`855~ znMi5S*_CkNT;t$tdC10w{H829nZ&on?$u)2qH<#k zWNtFm%p68yx=AzWALtM0sdO5Q+%wpPr{OMGML(jgXgac?u2OgEv|6B!P(!W1TK8Dz zT6f_stkK0;g4$5)6ay&J*B z4=&p5M#4Hw?gj|SA*RvcmHj>|R1FNpC8| zWA_K-LZFa@-CM}5{(LHSmyuguLIPL5Qoc`R!c$*k;^?uM97|@R$kZkRe5Ti7+&x9G z>vd@#dI_WOqXAbG%R%3y^LIb@hjT?5k|Tk3b$ZbF`10WjdnEdMt`deJ!OazBwvwt$Z1#>!ev1^ zCaso6OU=a_;%;%4*hLhCT7d|o_+R1pvX-ypr}9abe=VO{axGmg9Cwgg!VToS*%RzY zb~Sp54PmY_6-+jhNZ+Mvtn>o953S-+I22t&mHKx+O3u%7uq0@^Z#!~fjgUm%AVLa> zTL+w`)DDoFlryDv|QRtX6tf4gr-T$XG^<5HXFUVP2C zYu~RF!m&{+c1_dkOkmtQq4V_TX#T5(3oxsulGNvdlRSehaUBeh`gOudOs2mtbn|sr z!pWXWMI{tnPEW%B&~5Q&q*JkP@F;cx+Zzs0N0}Asm+C^bH+14r>k8{o)|@IuGqIp(Kf*wyESrjyU>yBEAvg#`fc)Eg9xe+60qxSJw64yW_ptH zH~XHYN!k{8#cG$3h{-o@=*tms(H^*kBQW%KKrKDtf=hi!&PLyk+R^R4aVST$9HF{W z$0-;TGt{=$3TuOPJn#p8RkkT_Dy`)Pd8a&Cj)!G;k2GCM68F;g=(%Da(GH95hp=-F z1HQm*{!4xZKZcLBJg{t_j$7Wa#K7valbg)Nv$xqj>~uDXxx?&b-eywhPsKap+w=gs z3BG|p!S7+O5jXPi8n55f%93H7AZ z1L{!5jYZ2T)!+Jqb**)zwXt$m*{FVN`=Ux3I5C3E zM`A9=lo=;z{j=lp%|`RI4pwm(^0atKmcE-WZ8Pr=$(theA{(=b}D0U`a z4uDJAK=E@=xivG4J81|OKd+AU^ie;G52nxI`}`owHA|)CElVd0%YDlg0@F5xy~gf< z`NGg!*p7HVY$5Ob|Mcf#rZ+uK>5CWq-};oX(J|t9+)s=W8iZZKbRn6)$A8Y};T>3+ zjeBE1bcx!JK0vQ)Ft9#(NN!dy6x(3;PsF)cf8Vo3%S709e?-jj zyNZou*ZZDi*9K2=*{en}SN2LrdJZPe_r!MO&U@lpWXV$4DD803zFI1#V9#dgoP^up zMiY%H$nGDaMYNFRlIT6*5!%g5!pT;%D=Ectiq<^I^c?qXWOVAtA2&tv` zr}%}qTzpZC5dMONIbV25h_sx-LHyq+ng5v2v8=O zQ}>wt%o1iWquS{Uw2PiZC*u2fKlLRnG;tpKct?p}8(b1VZf=Ixa$h8IABgap7syUG zj7ax+&uhBRdD2~FdV0Jk(N*e6bZsI9WqwKILWy6pHmuB##<*;}C#n29qa4ZGl6KAHReE`zJV6S}dhYjbKv0 zFTM)B`5O$q8A3+^^9T4rcp+}ghg$x$d~G3?@s?zZ$erOT;5apaYYKh30zc30BXf)W z{A@IZ58@SgBy!?#bQ683kI{vQ7$kR0xnEoC{+X0qwMOIe6QuU4H5r%JlYN`~rjtRx zSQE7JYgSm<7yr-Nnnb}x+xtK3MA+|LMkg}vOF#$cg^2e}>u;XotEU@x?d5X6DE1MF z_|(@cn^0XTqF9Ogp6Wss0?QvwAbc=t{5rb=#mFzn;Zg$}Nft_jq{iY^u}YjH_7Z)B zpMiB`Z=*3exO)p)T0{r5>F~hFuaPae0N2M@#Fi_QQ zZICjgQ1J?Ek#C5th2Moe!VLaDA%*YEf6C9cd}f(#Y0ur^s=29L8yGs<**DloW()cc zeZs`hcj$feV(7)j_-DKwzlBqwS@0vP(}QK5of->FUUVvb}K$27)FF3C?t&B(9CY}+Iz z-;xDqzjRBgCDsybu>q^0k}u}-L1L37r^~5wtQ;)cWC}*>d9{Jh;M4h3K9(mXP8>L# zxAByv!E)YGtK=)WN|utLq${a9tHn|STU4=?QW})=O080(R4T=md`qr1-I{8R1s1wZ zs)bGFJe&?{gi4@g@`YR>i>YO5m`bLY)SSmrITZCQb7#T{6RtPmIukx_!pBUw)`X8f zgL4um9C;=pal&^d{H+NeHsM1ie9(lyG2sJG3F}O$YfX5K z39mL`V!}lxyvl@EK7(P17d{h_IAMhe7npFq2`@L{WhT7TgwH;W^&$S_(-DBrnDA*6 z{=tM#neg||;!HmiZuAt^hj^y)RD_OY6P8REn=mqA^Q!gW+4KqjJ;9zKe(OnuF~l28 z_@)W}X2Lg2_>u`gqxahlV>oUm>EPe1}KfB$1=GIZx!`XT5ALQC~=6fW>D#{)AoDV*v8KkPMq*R z6TWW3znJhf6TWJ~S4{ZlXE02#%g;n4PPlKv_e}V%3IA)t|CsO{6aM>YtWU7No{j+g zrwQLS;Xh3H_h)gYXu^UC^G{)8f?1x5&?gvY!mJ51CQO^KuL=8@u=f*eOt4I^ClUGt z%e0xWYQk0%c9^i;gab`D;4zkr36<#&grLE{tniG=30oiM@XR=u34dV1TTHmjgg2XT zsR?g-2EURxq2!r}#0kYF{JsfqG~o>fuS#5eOXZ0-}WwB5p`;ZVnam<7_M~@jd_RXoJ)%Nf|2x`%C z4tZ}!_%OfVV~c9{7_tN{xc0-^Pmck!4qK~pttg{4>IIBgFN(R$Os8XTC?n8y^m=+M z@=_0~E7Xx{nDvIW+L~kSrJTlp;}Jy8^$H#!ZUc^WFR_tuQP?5O7J3VQ{3RfU=kR?j zmvI65)Uw?&!;%Ik&^m5CHvt4&FR&h#9pz6lP|AWeM#{pYbbVKB?Wn2uaT0= z)&z3(q8@$48cP0sl!0{n*;>Xh+aAd(j3+=9oXgER{*TDAH+lajkqO$O1z!1>k-VSQ zW73Q2=$=n`_F ziS%fpopM|u%8N<}NCw<;g4JKnvOY%|=L!KM`1{sRtbePE`D1(;KZEbfH?iEZ?1!^` zrlq6B#$AHr*^AcY+`H;aTr*&5ZDS_`6Zjspk6Fm{1@_bldMzD>tm;=(9Wd`c0Vd~j zI7ls0$5{V1PFKbm^3)02M9%e|RiVNlGT3vl{4Z5)L&AEhZ;@lQws@^yJ)D`y$0uz9 z;m_J&81_&@alu(~?1U{@`|G4_H?Vn6+oH)RxM)A0whhH({ZF<4BOlq`Lk%Fs=WLhDx~VBzzwT-TV$`-Ea=n$Rb|xnwl5u|p zhsLxswpQ4+*eFiM{A5ev%d239P*emoKire-KHy3I-&treykHw#zPmbIMX@>JQs6IK zpu}NfQ(>oYP4X9VfFEk-ukyQjCqIC90Jm_DCC@U@(wM8Je-kf*aPv7}p8U%0Wf!u8 z*N z$2dtjsgziiH8ZIj%^htP47L#xcrh9a!-%a57uPRay5zA^~*cU)nrC`@8PF3^zOd8V~fJ>+aMLQ z0aNS`qXc&UPHx?{rEuk!)q&JHo%2nev;({UBWmeW3D9787)C|3oe)sCbrs^ ze&o%JmON&IwD}n=VKt1U$Izr?r#+IU%BzhLOWGf|C1{(E+ftDhG`3|H&8Y1tjvTGE z0YmVhKE{(ZG@)gC4n3Avuw>Itdjx5F%r*|YmQ}FD?S2C=n8rwEVegsC3RHZqz=TLv4TzmyLc)}LssiAu;9+K!TCQ(xvtEY zCn}l}C|`j7?`%jYNRL9V_T+pspE$f~fN>{13cMbOYGXPVsq4Htk|eljJJ)%EqMu$LQ~rxS$)FHde$5c47DW5BA$g%b zX&}n+0tVI{&+`_B`NWf8{jxXAC&3dpqnXbdZuNWc_=k$0AWYGl+77$_At4*QfIIuQ zr(y2Dc6%{dbXz8tSc1hM5*aK8lXSR5>XI5|FMo&sh@S;)rg!Lpv>!f;H{;iF8}u*w z0=t}k%DwaSS}{N z(NY(3kCAw?P>?!c_YLwNBXwh#T^{zKF-PTjUNA?0C25PiV0`|Me6C1c8Ow!7y{N0t z>RCt|Rf;DMtZ*5tO6$m&b-wWgsZty{yxc3n6AD`JD70g~7cAGR6iM36^LmZp3!mEA zuxq=~FwO-sTS_6va=ijc?EJ(anhN&ynm(=Fgo7NBY zp$>|)#rC9vblEcs-kl!#7Iy6;>h#FAM42Ahj#GX&By-s@J|MumuBE*d`8FbO?MUjf zBmZLzF-pl!wjGyzE?R60AA(6-Bnz?~U?FelBiK@`Ixol2sft zstc+`=TQTua4@#vbm*{H7=2kd1J?qhyAl`Ud|jc74yJY9e*->G*U*)8F`ZB6dQ`p` zgU{(_XKgISG%)8MaTgzH*mCR1kz)bPV z9A~QSH4`3d!mpa}D<=H%GdL$PbIdaliJ2KDJlcdunea;{{GthuG~p3XW8e*CzVLJe z;Nd3xya^98;h`ox#DoW%@N-XLgEutjsR*4llWxKTO?ZF__c!5wCfwJA`#ixO-cau+ z5e9FlmkIYY;T|U3-GsZDa90!V@)+lMctdHABRn|OggcvXCll^y!W~RF#e~~G!Z{wB zmCWQv5f5=Y6HYSWL=#Rh;kG6mZ^CUJ;)sVvGnsLw46!EMTFd=0;P%s|0huwTEYT($ zWx}mYIMRe8Ot_^9w}3T7d1y)ISx%~L-b^K7GT64b?sXE^H~cyYzTzb_Bb{}bq*cH0 zS`VD)teZfj{^1u%YN;YKVB0sI-0vTLQiqZ?FUVOp4(toZj(t84#ghU){8f_ven_S4 z?Cz|4jR(WSiGzERW7ylD#O??kO8PsSbS?__@@3jO>&6lr_TEZ5u5TnWbDedsl7ra$ zkD_>0W^$Z$uMo66+?SlEz0Z@H%Z;tL?qyQTc%SyP;%#T$81fP8eUp?Q36Pl%&bkb; zm-F69+@IJaHV-ThM{93eywi|T-8g66C~}zh{;}v{V_AOAS@#k&Z05|KLxEC1=QFeD zO|~aV{n{omY0kPAfxh;xCZi5Ek>yvNbt8>e$Q~C@N=gFWAfWyH8X0}CiCA6hjnZ|d zXe#vsWoF5d^sLBWENmy4wf3MERxX^q#eTvr0zO;NvnOhL8V%(^v1LDANOH3xo59i! zT4^_cIIX~>=Ausuu0Z70&psWs)z^IfhqMo``-IS%-)}yk45%lgmE`k_J{`2bW<**o z8WZbte|Zj5Ky{!lQQ{%7KpYM%l`FzFP{~LEZIpu`6o20GGqVbKR$IZ0F_!xSxK%T` z4(tQ=3sCXw#Y)T(W{4ahone~L*XW(}+rUVX@d>;Uj{^mQf8eC|9tuK3q|MYNFsyt} zO;;OPPg~!&zG{t7ep7ZSGn9^4!EhuVL(&iUv?E^}@JS+DKpBlpf{S)`s(!@nH_I!Q zbFG#zXwzlS1x2;;FG$)fuM}_c7Ki+4eS)iLiSAdYER2UDKchm zi}yX+t6#78ZDW)pXJ>eI)`|6NI@9E`M`32zexJ70U->M?)wMpz)|yF$PN|~|o5Lsi zd5b|qPX@-%GI^kElU7KBQ6tG0lDaS|g{kBHFf0O*V510m@VCEBgK1JR< zFZ*dtV$mxoc^*B5eg*VDy3+AEQMyKpHk#PjeJ{0bh7yW)5pihbZ< z{0Fc*>(H0Fn$aOtSaXIYxj(9+R_NpV=Ik6{6cx%ffR!5vYR5 z<-W3qk5k@KcrX%aBY!I|l|!YAQkj$~wdNYc+v3OKT(PT2fmXy6FfF;vm+<4Q?Je!N zyWB2rI+w)$1&q5KwhLG#90X0W70h62A8?q?0DpTlsK=he<#>{oo9~;$=*RUx5JrKd zl9oC_SD*kxt596F4Z>F4aD>D)7u#~l8=#xk7<$uOF)&N0d4|ydx26Y#*BNR;ylWnW zDO3j9VD@;ftQf*zt(g*|4;@ra;)X)(%ApY6LTp3qDO~9r@^GqAL7ERnZ;^eafk|BH zcu4JRd}MC@bqL2BUy)nU7{Yer;K;4chp>(4=UQ&b4tU@{26KgT?S=48gVV>A=!@}9 zgR{VuWkc9)sBm$m-66cyP}t&1Qz5LkRZQX5EP^^;H`E2W(j+C#IF-g@)R7F@?~}~A z)i-Pm6G)yl?Wpz0qr1TdaCWXM#CVr#88ms*1r$owT2R_SbPJj zcgNEcFhOm7W5i^@#&3n8PtO(q4C#G!#js==;-PxGpFRZ^JhngJl4k&(Zx||YOJ0C* zW8xLY$8*cxhOm!e3!CG5QAES2MCu9#4#g&UlH385?N3UjQkK+F62)nx7L$bg z!WW=l-B0l1Px9+PUnksh9hgN^sViueB^d_Mr@$`i%u(ziu4?DxO|mipP=RE3Ev_uaDng!O={i|Qnc)Mh5eXOc&Y`|9_nFx z>~IS0a5*tblCevLb)Gub3^eYVSCD|f;+?{K^*Oi)n0@-(HwwAk)s?=2S4baV8Tg@l z=%RRB{7~G8zCqi;hWc%BzL<$JP!IKrmiwVK66r#yis~CelxFf(d7V6le^G8G{UU9a-jt%i*rAg51)Z~hL7C}Yp_icW zwW1bM>3i6M(eI?zw`mt{D~wKblI)ujl*E;+f$(;MZrbCxGGJGs`$ct4A^Ic)?-H-T z)(PC27zqDMQV%puA)o)?%OaQvq-mVEVLHU$NuVcU5^~TxmTNx(@ZaQUPSe)hip>!I zlVpr-nk+3%f$xU?Gv;_nRajfWFW&f&2v~AH@T?U@kbIVe3<^%>R(=BEGvvW(-ws^+ zZV)~VG6&zb81%))lm;csrQceY>g*;+`GJht5fsm@s)6t+vOF&+S=`VU!Y7Ot9m^J> zMS9DRk@IOmJ-Fq`5I#h9;-Ca>sRH58N$lFj$z0iK2!BM5&5war>&wDkvVEl^5k4mR zklaEMN!$jI6{2dgFVB&}t*(dg9x`x{Bc%~2ka`&}^5lYc5j4=znp-&+vQ?3S7)LU< zYB7W>iI=w{i7SJ(117Qa4|_7VqBoS&xl#!j!TddLPrxfPtIzxDq+F`y1g?)DHSdN0 z&qF3nbJn*cA1?vQE_YRktn_r&w*Xpg&YZl6!SPz>^oUk4a29&|0=-q=T&K5g>!g;< zWIOA_$$+fzD?0Tgzv!$FgHqYqPOv}Om)F>rWRxghO7)?lPDD9VoU9%@gJdm342c~Z zRir=LitC$^^eN%Tf#i~Gc}<=5AyCJ}iO!jW<71P^EiO2de16TB7|&N{I_rathB<}j z_2e;S$}PFRDbQZo+0(}9F|mCuCrQS(Fi8P76ip!Sv}sPIXFS=rDy#`G5M3~$jL8k|uX-igGHjEN^TA4)}}vL`2yhT}mB zswcsBf$YqBJA9W;14`A!jkrp})rcSB`r%~eneZJ%IiQo6AZ1_Q=m^F`e)(`c(arePMJT7c*C%L_Xg2~Z>C{6zw66@^jtRF(s&V}#R32mry zkh6ZUwyY++2Qt2%JkVMH9CX2i39t8!Cry_7Paxl3w?vcRnM@0^k%UOhY-jx-^5GZZ zw;onF$yuLH_I??D+4$T{q_cjYwrziSQ~1ih&EWyaSwDdM_*M8{q_>YG%e|cS{h|J` zV@CoZTu{-n39$Bt2JZt}k}=sCu4X zrbVAGzv=io0%25umbJvMz$b^g2d+B~P*PXK3wMNXh4+QYLU%A4`XB!pU%=;QPnFr{rF z%@w!E=hdsYe^D8=uTgPe@6S?@8TJlDq(BUMu2t$S2-f z1_qc$B1A!6-maDF50htermS(-D(9-}*#r z&wc0f1!5#$j}fX~HFp2t$?ZNxZha3%ab;tSQk-kOq*1MnCKy`bI+2UZzcMm$rS0TC z4^4fHN=g%rN|@3FC6IUx3TkfDfy)mV*~!))qk(jQH^u$*56}yHG{67)J{lym-*{{j z{7y&5S6BL>${cnQ82sc?_$}~XGu~Q@TUqDBjuHSunQ~={(m`S6BQlXQG3KL8U*5%xcvQTZ+latX3~1JrXV0fIMW@xW^geJ%zmVHESWZ?*hVTTU8RtTHbg8sg(m|I-)9Z z)%rltJiN&1AOS!q$^8`1Hma5*s@fXW7*EWY6jm%b8&$eTJ zv16gukip)skX$Y>%&1MOiiQOJf8S1RF6IpJ4$k;WkPT=VT!WIZyt}+c?Wkx_Y$%qbF zgzEyxFG}-kM2gmTy{67Of9-;`xi2D(PX|GSx3kVqOKu3VAkQ`y@2qR2rQZr_X<*nl zW1V%rWbW;tGGosl@2vBIr@Zh&wzHA`1~x9_5V5@p8@f&|z#duWO@jXlx<$?>0B0%8 zS?8sN{2dgCNQR#TTqPUnb0_FW($OwK&A{tYN#Z|27fGi8J<+PQ{5MGTJXdi7V+_c9 z_~fIXhaJ6F^J(OUn;t?s*(H$#KL|QsRBL0H0`PidY|Xlv(l~nU`J>zXnGNqxfx> zdzOBjo4w1vz*N%zfttcvbOR0X3|z(;UNwj~?}x4Re6L1T=_K;Mu*C)vBB}<$2c9;q zXVJUiGf2!l6k-fL7^eeB)`PHzD-@bI5ehxn81Opj za0rJRrC@A#ffQqG8yrZOpRI+Esx(h_o&6X{YF@>IN$j|=HYk;3zT4O{A;m6LosEWM z8?3;$Nd91?klOw%kXd4&M7ON!M9wa5yg`2>E1b9AeXp^ni^bro4p1;V8>at-Edi6r zMprQC!&n0)fv-w|lowv;NMd~hhm*>Et(xk^rJ@Eeoj9^62%q3c$ldU-4K5?|mh%Kl zcBTT=DcuV{Wl)n!rt<{jp&k{W&1x@!^^5H=ex6jG6k(D1H*`2T|Dg?>&pA)fK-7*I zqZ748z6_H3s^xv1mKE7N&UpfphO*|q#QGros=*3I5oGRqU*vO=^xq(@$qw zE|dQbdczUhSw9Pk!N~w-Jrrv=8T22ne_Ly~8Xjs)I$#pRm$G#v(-xihYSx=DjL=&>CD(o*~)q=Cf zi6E$c?ATqaA3S#JdkB=Da)#qrsGjN~2a$QU@?2-z{c=f$KG4vydUb zCFKf@<&XJ`yo;a6x3T0|cxxl&oZ?cl$vgRh zv81Lj(2gsblYIneu8MF{P-h2&^j|#Kb?CQZMmZ(i1xx>_LM-?galx@8*z%)gwPlE0izusNu_-ILQ(Q4O z4%BG>1or+swh!yYoMPUW33Wi4&Ag_J1gpHi=ug46u`lfno_C6Yi5`Rglt)p^fFk)- zX@F$4u1=f!F{_YDZSvmmA1J<*vjiRLWQ2R-}{v_H3 z29{%1+b0rNr!i+B?WidoVmg8?F7Q>w(n%szk`1)1ru%_ob;d5I)4EpeKUWL~qKlfq|8jD| zz#+pnirL7FhVi)xUqHWudGQ!JSe>J$SpTtVptKpU+){QZ6O~rfMf^Uhlz)L;(kb@? z^T~_SHfe^`RkDgdz_DWzwGC&YStHS8vL4)bkK{F7sH$?^6v zok=78;*|o>sI?-%;8bgkO6}g*sF08{_^z|I*k@w0sMH=!&Tq2wWL&vDS{q$%UxY~} zG*O$p-M$R0hV=%mXl>ld%62i`bdIh5AHF!WEvM{#5y;-o)J2Q%GT%TaqE+m5ejaGs z2I61vZqV-P!+plR%MAfN+dcFo?jMxF&SKM84wjF6W+-E)&*@H!#73YcDbbsSQ5uIEEDl8 z+=IGK?EwOOh)0jLsJlIpT<&V`%s>i5yaqrQS186&4p&H|pu0T_#VYKC4Y2@I(v8=MZ9~g8p3~={f%dkzLe`5Xc%HLlpI&KO zEJPSio}RRXaUFrmbjMFm;&54kr+U{hqjgOAUC5)q8dH*{=N@8*r-3*EuX@F}Ycsmo z-#}WU?)I0#bRF`M@8Nw&|K9eF)fsjsm@t)Lgj}j0C6KgGmp#h{E&WPV+Y~*PgE*wU)zR)}1_YBlH*ZG9F4sKX0Fk%kL93 z0v>1`4i}?ME^rb7(_7Pq+hw3jpqV*kt3>o8=p&xwXcvezm-B&^OQ3x_4SYRVU`txV zz09=&-zc9lL+Nbs3LXwZM-j%<60^4l#*c2J9K?Z20VsV21IK#1JPjlUv~)-+kcLZ5 z>9hDB>LfZ3n_-?fP;3ldS*nG3LZft$I9&&Kt@HVTXgauc>WWk(!r1CYV9Hv^k$v`9 z&MiF_cHl-kNXV&{aU|qq%XqQ~E}UCt7s8O*`4!CIiXd|A5NvG~AkR1gtkw#LF(*mO z{q`hJ4%c~44%azP4j1^50QnMjo%N)bm3q?4HhI#^N(@ZIZ|$GL@zx{CF$9{L-w`{A zb@k_vpfBxj8tr1rHp3{;Td3VQ+42GM_-vicSHyE!kE37JA`@OHD8pKB=wYyL=BGH0Sa+-~X^m&OTfElb!@ zY&i2PsEfbNq=78vDE$(e9Uu;&R?~L;JualE_8{!8U9T@d@Iv{ABB67ek$ndulW|1| z@jBfyg^W4Z64p}1lj!={NF@LJE>a@)(=EYg?j<7!=ekH2d9-k~tZyO_;>uinU-)1~ z@rtHKac$Y5NFX?xABjvMmEXZ-%#p}XJk^wK@l;b*rVM(h%xjGIuMdD~YX75=yF86r zcHi^-@E=-E_q51uE2?XmqTM~+@?FfRtBta8@ebiM+lK_CQvO1lQUd<&-OLE4{(#?Nzy2ULX$vIqL7yJ}DpkPsND$ zVTH^Whlu{dX<>tq0dw>Uzm?*hen8tPhnd%{? zfEf;sbgm#Py_?RX2ZHqa7hDYj;B*{>t|JZ2*S~@OEBwJd*|Qc+zie-VDWtZ7zS*{>{6dMFn88~I(ik1R>w zN=qdb{Y=%O4&o+o7t~$!1NH6?K{7Q$Xa$}nzT-E74gVzElKqOef${zh%Unx;unzej zY~%s&a>Kb6AY)!>U10q~dXXIg1|mN*<#WibL6VOyV&ljM*X&;8*oweLdMJr=J8;;; z5A`S+MrSlZzv@#yO78@aG(3O}NvzdZhQI95*xlHZ?6w_ce*ADDf^}Ze4Fy8~*>Asx>lcoU_Pl_+tfe5}yO0L;E z+RAoWbDkl<^wPMZwFarbW6pZR*r$w0*YC!|`7+(^1|(g^gRncuh$WkUwSSN!^7E)9 zx*f&$;uXtrFj#sKymDOOvY0T=O;6zx*?S;SUC8!jZOjQ~?Gu-T%xI~E-VQ1rk9=o$ zQfT;6OXcT)==xE5jsC^@1Kkb=>|f%iAeZbbdJ8{*!N551&G#q&38>*u2P1*skWdb8 zro*W7)OvlF0arH0th*iLfL*4Ir@Q|A!w!yteH`FS2Si=u_1hlUf~@v+%pf7ZL)WaF zYTUJ^zuV#1y5%-(eX(%SF5I@i`q;0cXGr^bJKAV}1UMASZU?M|^lMZSnoIG4pv9gI z-Z05*UBh8~7UC8iIM-M~D zr;Q77v_KO5+Y>+2y1b9Bi0?{rgB|UNZ6V8BDc8STktv5eBPo zo&>ja08tJmNKuZCWMGsd%@gCgW5i$=u*mhNxc+*&jz!HK!05W(($S5)3>PgX!chuG zhL1e{JBCF$+TqdyqXJFwb4=IG4z7VnAc>N`mfm~l{pM91g_6JrP7FwG_JO0f!9rvH zXMQ{X7ED$FhTN-YCzAqRg_?8MxUJw*s1=xSZDZeLTLU|KCo`G8jV3Fcyo?6bmM2Fh z^auFbS*8wE8(S|~vq4#BC@dLX3OME1p@6*9__=g(fZH>oieg|yfzeq>4+l`weH;mj z>n;=jr2htWb0p!_hm8+_UH=drYXiGE3Xxd$xr`pt$a+ESZm!qTQG2nc<2oiU^mQbW z-F+Z;eqYB+*reKcbq==?NFl|cP! zt91tW8}n0kql@%L>`?N+g-MWnUDo9J@*ug1^gplzSs*aVL81* zGjPTkR1@jLfil$h)E2$}%gCT1j(EHkj(o$Ri?>qb)(eg}?0R4bw?)@~_@jrNs|&kv zMT#eX*?uFxciETp(MPWCA5Iygd_@OOK6jL-UJ$<-@t^~32+iFQ?1+c^xbggoPM&-f zF!l#IlF65Y96K3aFbJ(UqbjX(u%jo&Qq!lpH*q*D7JZ+0Yz9AXUnoC6tk5t7`s)Qp zlom45kpW5j)DBO)>3O~uE(On(@IvIs0LRz*j=x{;jG7z~4+X};PKtk#53yXaxWP$H z0{1Vo9^2^`Q8#WmHyS$jKKm`Zj?H9~S)Tcx+NmC8UPr%B7m*MAd5AXFyFjunwGIPc zUe}bJKq+(u{mZtfiVnvg%cXL*+zGbIQ=oS>S?VmwaO&M6PGJzrf#v5N(Vr2%5#9rt zn-^ct6ZjJv7tsnd3{>cY`|Mta^WqQ16vsq zG6z1_R@zACwqlw*-8)6ujwoEw#gn-r%~RMN>%s7M2J~;hxudzyJw8hxnhxuQ%D(Yr zDm&nLLfO}z7LzTXxG+<&M0sWsA@eU6N|0wbCn~jq@i+s}_mrAhEhAxP_^fvzAFR2i`9c{}ulZ z_b2xuH;e1UA()kmfa|0%g_btfqi7N+ZC;_b(Nje_1$0Ue;(Xv3!&v-TKUNDQQ;2|N z2%L-NIuc0VJjZlHPlc?-5h|z7p6{9_oN4SXHo;_qRsZ zV(|2)W38DG5f8+#p0x5^<4*ow2y3qqvsEyjr@0n6S^>8NGLhH$2(YDv8cE;fkWE*R zA#0tEjyY@oC!%kGbZp?HOz{pXL?`h~sR0Z-^Tm-*99F~jdyU`4_ojzR2`F6pm~Ujc z00+#sEM359;wi3_dy`A%7^;CiDzC!bly)$`#=)QExX*mU6oLoj2>LetIlUN-;^)d4 zSXB`G&6Qtp6_BNY&zRN27E>xm$cL2E%0yVoN049H2oQ5_aD;-VS%)`Cl_NqqccQ*h z5wsT8z0wbi4wK8ilj0s5eCnD&c&ljSAQRR)Br;+(j1%w`W~8`blU@arY{>&MW(|z& z(Q9C{UModJl7A%VByp`HQtPz)c+{rs)#BmY>Vs|4m zE~_O4QbfG=iX71!bETW5QlM8MCP9B*GI%lYFh}5BfThyQ(};?moUj9xB_VbD)Mc0Z7O{K*?>6*acMU+S4J7iYJ3t zts#Ox5L_ET5ik_i(XFsGwWbbmzvIjFahw1Ie;(JHv$5Z^8^M@2iur^22-M}iWSpXp zgDZPIU!0_5=;S#SfU z%*z)X)5zhAK$LX9P^=)wQae$FmoUjU=)Kfq7gQf35r zB)<(7#mmU-+?XKZT+tYIA`sJoik()ly75Q&|Eude;G?Rx^>fag=`A6>oSX^CWC%$h zKtk`mOYbEC=`B>Ha{>q=0+F&5=?FL`Xb9yXARv~j0y1$1Py`KL<)T-4;FXKQ1Kzjy z34wRt|DWG4Gjq=FYp=C-UEk6cy_r-bk>_$0Hq9Fef#2Z zfPUB&=Ke&SYU%E(i5o53ox`1pj&E?ErN1K*aL{WlHUKiVwfAs$x5wJ9+upIwv^BRG ztzQBbI^UXM`Q028Zo%68xH}pk?ArkZk!KFW!hDmdz?21ujWfnU!ux_#{LWQrOv6<7 zIPRbA8oXGLCO)Erqgwkj5$^!-LbIm z1Uj%jskP{j9yiKtqG4M`+Mfor&FX=U}EtU?{3o0F;x2?3l{_Ky}YwwRe zvLi{zPm#=Ft;Jel?qP1P>lTg%mS7!M!}+cAE$0-+WAPJnO$u*~`*sc4$1r?E8D258 z$2Fou;$$%mi0>O<6fS8P9$ypaZfmQ(rL7fU+vd!N*{o&1Sp>kI8UwY!WJdwV(F zB)Qi=JL1pm4vHP@DlMnFuVpC)yCGov zHfQudDwrqNqs;kW$`K3X`U1M|Y7~Ii7t4k0S0gH(En{H#na6YNxhbBm9_?95qu*<4 zDr)eQ-E=i7M{_TdG5oUY+1i8|GA4qcuGUlu1qk#LU54ROqXeVJg{=Vy`>kz<&y5iKg(plo1<7@*vnakKG zp5ib#8e7t!6}Q_b+nd-;wxDeXu-%*5%+`=~r**2;Vr^!=WBJmu!7>;C4{fpQf6i2F z8emE^RvPyhCrW>aQ&7}mse@$0F7XE3)=!pTsPZ-w#doWSHDI}%OWT&o9f*qLdfHW0 z{#tLDRQf#RsrPd9fWJ0xt5njb>W%i?ayeQQ-Tn1t9bdb}tdg-h8A~Z^pzlh@@RYQ5 zg}jg2y$q2L$A>oOWf>>}F|VS-udkN#v~I7;2Sv#b8;xhyho8=r>(j~Uax=_o>@X$z zJj{06cGx!0)=H>hXo{iWb!&mOw&h=z6PD#TM2p3yq#w@6nwcfjdB;ll22Z1tAU|rxioKPHtcwvj1VEItb^)hxP#co(D)e?=n z#4CnR?dy%1@YYc-&6XNJ>uCV~FI?hQ!^^Jzu0)K`d*P2G$8pzj%(2+f9#$k@T8u(a z9A)S!jD*~$+J3Peu)PS7d6V_Lbpt&3)ij?2rtmmJwB=_k9Tu850@&IIr2h9!(M6_i z#%rc1tea~A)1(UjinVxy-eNk9j<5GQ2wI8@b|1@4^oKq7sNlTZf-M61w2-e(8-5NM z_vf;ZW}?3Vw>=R3^;t4Z_eSa|OGfD7CByabl3}Et0TulX`FmP+L0*9M+guX%$dQz@ z-JE7@+Wdb#i_wpHmXbdYJjx6l#65R;CN%j&48nQ%&~|^wv;i-9_XSom&OlhTb^|*5 zjJ%s#pefprPvmwuHQtTRc(@Y-aMRCa;J<$^zbw*E=j0YRk&+t-4t8YGn&Gx|x5Sg9 zEIEO)%91@ES1!PD&vJ{BEXO^^8SDrT!U4uD`!bB>?;D<@7ZEGmvIvHAy~B=)vBEWB zmoQGZS7GP>!vtNo^*WlIrS&+Nd`=?uNOC<|d>}cOnR2wGlw-*__BxszZ`Mp@@*}sD zZr&6|wqBkj6HJJFy2FHt0K-U@(4d+-00( z%*EpKQ)w*@Wl{{kz?^V_p#!|nTn;-YZWqVd#Ja-2g%2R}-JXu;zvX8@%odVTkkL_u zd%ZR=c+s*)XRH#mVPi5n8?*%zGQ5)3acagf=*7OCJaOX%{;l=y>xsln4Ms6qsGlcV zJaRf&=w-Hlf^)!+M2ahnNEzM8zFI1=KY~M->V^O|=@M?)kGIyd+=okx)s|#Se>l{6 z$2`rPYx)Zp0hXFN!w$E(K z%-@RjZLI|poOwR8L1`Ic-exW^raD{ zx8eceq_EuKJYpyT7ExD2d~*X8k43LXk5zC`|1w=K0B@D9oCGK_eL{iC2WQ#X{ z=y~mR>3QvS@@U%WamsH3IBuS%9Mn_15y!u2%b-kn zxdP?8gnjw{S#DzzFxT1EX?KJiTj3b2uKiCO8LzVU1q%O9ws$e#?En=1N*I05vvz`4 zk?S~snU6ESX!8#^CtYCfVs@J@nl@wmInDSp4vl9T8$&;x0e)V0DZ+3`5DbaCfj-p2 zV8glnTjF%FrDzwv7WN1;!oC!kC33E=Uq4;0U~09Nu3w63Vk%w3mk-RKkJ6Vb4YbwE zmB}JCSgEw78<*g0hQ-qE%u<|oN}H)P;K$&da7mvXgC~fNM{p*kcsg4*S%+Cuu!B%y zDYWFl%hDio%YAFluk0 zl$Y7}Yux-$+xNOsA!r9TD>DsR!8T<(lqCz^c!Pgy{*}rgb6?QEGo!!0?#Oiut}o#| zc!sN;E6Vwk^9Xit2RSnw_u=hm3ueSE9d3Iiyw%Qv9jnQ9!S=eXz*gJ(FZkD6j{Wyo zOC^r&XHf1A#Y02zAqfkGHlSleeILH#Zl$*NaEJ1hRV#j1X(@=M8!2U@lC51@uY4qG z=Qb(W(q|meKJ31PI~%uz1HvrxE%O2MEOR5%2Zke-Ow)a#kx7NeGYh;BuQB#EMoE`( zf(uVg(r|2df938Hb{~fN*Wu&n1y@_xfqw1WjcvFlPD!eTHSt!B!@uB(XS^-CzvBXs1b&9gwfWZeFb=(B*&cQZZAi7`V(k=oJ5Yv) zD%SwnA1e*Xe-4WO_Qy&Ft^Y)6K}Y|loS`9d-P-h=T-Q$XK2vIo{t;B~9AwEqoO;W3 zTk0?Ortp`Pf4(ZcxL0ApK(wn)xcg5%&ero#Uj4pQN(IcOv8x|(0R>wIV=^O>#xQ)}dMUD;*hkdi~ zQ0QYHYp;(HKw8}rAohnf%j=6mq9I1?VF{|iT> zlZ+YC9_b%KxHJXp^Zzz{1P>3r!wqq;k>87DRIcy(fAN-5k-6 zyXn=g$JiS>6kit$0PB*l4ni9V_m5Y=ZR8JPqI(3cD?N0bbG_-B=xPE-N|!O=pAAno zk&Xkx0Yet9h(y`1+4tI~*&74+@e2@jn9U2XE1I>7Fwc~YBd>4Z0Aie_4!o|MFfRql zU<6JEwwuNp{}9@^*I+|#opCr^XWWCCSz<8`1v241;}gSchLPf5Vn6FLAtbyZj1X|k z__Vl>0@p#Pl66%43nSuMD*jceE0(NbgrmWKXR2i<6(7!ksdzD`>0TfI+Wkm>>mSck zNTt}<<8SET5$wma6twp6lV5ueJ^AG+fAXv2fsFC`eJ{a{`(90_()qtDjp>CS6&%lv zUgC}_waYx<(tX|?BD$G?9jI9SEaVeKL)zx znS(6$QXBEB(j9$?d}-Q`iiJ!;rCu%n^Gpr3!YMMC@jgybmKnNWA{!K6w>7jxx<4_Q zjIz15I2`7l8Odp4qNB6JWe>ue-f(Qi{KHmio9>P>Z!)zpzAWu9?Z?$U6HP74kcIcy zv>hO{{8+LTWnvG|Pakf{1ZCf*3M~U{y^l^F%xIzo$}_eLQng9A*mN2l*qn*O$;o5|(V#pG!9AF=}Z~67Kv?57`MsT`glF zkFF(c&O9m5M+Y-<#jP*%aP7v{%s5dyb0PyCnt9e+U(vIE%S1~~Wh}#1weoP}Vo3_i zF?0QrIU~!iSEZYts+~15V;bG6_{!lt=SZ6(9ne1-i`qNeJn(Ru) z4$NjaDRkk^O_2nDg4Q`09@GCXap4p5LD+U^mZjE?R@@2H|D>+&mke&((*Q!9PC30&mR3c-) z=I*=LH+hA9)P7IiDOv7>rDG_lsi!HOTAjuaRysw0Suzw@C(D^^srn0ly=P+ibNGr@ zOWQ5KCTctO$tM8a%v{LqGB_IQ8^N!3WpJkqnh(qtgRm~+R(H{bz_^O za8AY|&ksvBcu<3b2xp~N#{-!WofE=Su?%H?0J^<|9FNk4BfhvCkWz0Z>W7FYP&?## zlJx~odE%K)z^fDV;X+r8oAn^8Z&fqtcBwb6)|1Mt(A)kW3G3KA9#8!`=nA@%?}}f{ zw%@8rpm*WnYSO4x47n85Lv>2S%tsOIs*^eELD z6OU^6Kvqrz#=nXwYRI3ey90c-Ht@cWzMp7~rfv^?KDu_r7sL4~ z^9eu@HsTu<;q0w-zbBA0hD>tH6hhd?wRQk-O71p+6~rz=?DK4_3_ z_`!4*D8vYMJaB}G8DqXOrnUGtIssj=mT?XgD`Ih-rh0fUfR8}Y)yRe^3UmMp3%t*w z2I`c9hHKF!x@vgZQp9>f6eQui(f}spLt=e%qnNyazFfOhtY&Nqz3`7%U;EhFwV^`L z@f9mseVLSaQd3i5N|Eo%PDYMU1<3aQs4O($C^gG>y*Lys*`Q7?8vUO{T^D%I6WANr z2r6#_wHclD?@~`-1AcA}><(-}@Kyw^YYMfCQox|qN~lUW#6TI>KcG9)C7esER5>cg zWF3mXN{>_#h4mT_seaG76C!z-wUudmM$h9FuW)V8lmXM7TuE_>Wjz8CK|qiVelcZ2 zhYxt8hBBFCQhA6mF^kK3j_GK;fx6l8G;{P?0~Y%j6AeCAv93a=vXmUSF*~Pmc1{yd zy~a)J=QV9mpG_222%ApVz$K$f4@@yr9=!L|<%NG!cn0ho2@^HHwR+>%(4j(>JO<|^~J3mi4i_HwlN?slg0#WXGT9z%s_7cr{o{`#Brt$ec=Z)u4~eb>nYUS)RtJ z!SusJ(w*GY*5RC~2EAwl3`>n@L-DnY%X-c8Yo<8GU>Z#m)9+H^mK28r8KolT!iDG= zh9nS4fxaM*=S+B{t0+kg)`X!kBZcbLLr1R99!-mqgjJMtJk!Fg>Fti92sOxTb;pcR z=Tey|J&`J#NXb+-An7FMh8b$mLw-~GKWLpV1uF-Ic9_$5R}pHO8ce2~0WncjGB0Wj z-F_o=a+MvkQ4Pw}$(nw@D&_z+m_)s8>1VkaG7N=rP33gjqq;dU02p%*1WbQ~bFw1< zhr2K0c(S4OWy{x=O!F$ZpiDKclJ-k+hEafhFbD$}i`NuvYDW1u{q_j$C`+3~g`y6P zz#tUH(tn-L#3B&(-Azi1N`i<#yUj+-TiC zxO^1H*ikz)pbMJkd764BZ4`a?cc3anmlx3YcdD%P9SzI#kv(7>7-tHL%)6Ndx>FcQ zBmPLMLXVKkN09w)T9rk8M)`0mz566AyL=c8{&(6g-Ecmmd??xORfWMkeh9MW=J89G z#6C~GN`y2H@?aaxi{!`;*WY$cq=k2~9JKD^xKu-K`5^l1&osYo*`HKCkPiHnR?O(& zFvOJ)px*b>Ue%vc%KOuA_tSK!2w2_s)AOV@=e?7u^3^1cGU2ew<$Vz_VL~TL*~O&3 zt5G-J2e?2V1Tb&`1VmB5mA!;D!oI0eHtjKaTa#&>`CT#e0?GgM9;dS7;SQ;r8k$2l z|LHwVW#xd30MbNgHXZ#H&UH9ODd4PN6U*R3FZ|}^@S(6(Z=;50YNu{_8#1}Uvq25b z*rX=>Nj-it;jytAnyy)j60!wu{SKgrP$2;*B3c`=v_=g<3{9h{%M!lV)56AmDh*$r z@Ss}eLsOW{N6~_p629RtooYKZG?{mOUue2AOU>tL+7@#Uu8E|XYG@K=uS~ef;yRp8 zH8fGzGz={2LwiklY2RjkiN%G^%Tz-Xv_`8EJi3b6bUGXm{gr^!361A)6a$CiVpD=l zw?|1OJp1q=YG@q9Rkfb<%~g(Jl9SSL&Xm?_>=d{Ji{jp!#q%>SO!rCOcY zC4fYYA?uoie{;M5K!H6^?zIUV3QU@#hDOtsfcKv)%sy5PG2Wg%d*EyeznAtRRo<`; zuc|YU0SXv0z&){&LnCPOMO_Cw zB%~Wot1o#!<1}@tqt(zbu3ws{nUJUEkf+Cmw$XI@S6~6OinH6LdTMB>*8OX5x~?9_ zsG%V=y%&^lN>voDsLgKPFaf@8cdU~cpviYnYH~sQ@%HxOrF@bVyLs$>8#gM z1&+{P4RxZC=e%F&90;hbj@0Blptj^M83>w*>^x-Pyyl9p6Xrj ze#}yV%W~CFJFRj@dWH^6J3|e%rTAUx44VO&w4w0b>A0;6pb{q_5?Z6BbLTeUnxhVo zJJ8Z-z+q&KrboFfdMk46N&kvP$3sg7^zeZ9*?cwBf*$Nmzs*}^R7a?x=Ja4+dXTw8G1Qo@l^{osbp~;3 zMAu5w`3Qv!8&c(d)SI!g1I(I-dKVM`V~%njr9DsIU9=poqPI;A*csPKCu7XUCweOg@Py}|KfVBDaF>LDtIq7Hqjc$pVt z$TH(qD%|gcsKl$G9BsuiFCQF%JJ&}I)n!l+0E8>b=-)sqzFR97$IeH?BaJFR&FU~v zvq*BUK({iqH)9cMn620F;R^61$BY3@va~-}dO1xT(f~D-N%mFVvy9jd@I`H12vBih zVsaF{*ETJmCVdYZpZzz%2n-%Z=d5*JPmTIvmfEHasg7-!>$u}fF*~e2{1rQwzOb|o z@<4ADSVs>vxR9)ayid^WCaS>&^z9(;_iQwANYAOk`PvtQz3urx!6s?!jyB1y(jhBkdkLqXRE;% zD1L*X424~XN zw%!n*I~swb5}ZM5JMUjy_Mp0h(`i+E;QK)o(da^LT?cPUH3s%H`miHtz(Kx|(^T5u zsX8aLXNp$b+1pZJ6LqAWtbO0b+g9MSN`1r$n4S}ZL-w_B;QXGe0kmT<^>Ehsf$H93 z0NsPAm8-_*4DiGu0hMW>E?igN0`AlHU#vDd9W?dgiojWvs0IhxWlqT(w#;~}s&#YH2KRT9XS!CsJE%((#QlpmfjnZh@Q0}R8Tb~wW-0Lx}NwoHeS~g&cb1>S#_`3m010;IHD@ivAY8Y0#C3bH+tbFBLxkOpXq^xZ>n^NiQ1Z@pu{Wy5 zsC+fpk-}3_FLF2{U}y$AASR~p5NpH~raMMa*|pS#d?{co@~Of0+P#{oNdi3t-j7oS z>{mOk0cT^yrS8o*rgy{;HQ1IOrlnqBqmDxws0Q26Rd4D!U8iD7-Y_N#)_v4qL+a^?{~KRy9`+S^(j9s{t|Di6Iz6g zdeN9;AB&ZF;@*^;1d8G3VJs38*0(o574itLRx&R^r?!hT;hTZc*CM1zy0saRt;t z4aL#oh2CR~r};!Lmbxs$M32wlN2;M1N?8o`#2+zyM6+4k6r&K2WIu;aj{Mar>y=lf3Ud7 z#?6+WKl0%%yr{VvVmk@br!#4WhL0GMm5!+c1CaxktWz5^C?>9IZdjm(9Q5ko7&ykp zc;?2OxoY1)XXgCjS>JMYVq*zzvZX(0Wykr22p3qcTh8Cvp2`iU_WQ&18ui7n@TXfW zyEl34(to^xXT5z=FJF$qWgJiDB|h0;9B(95ag1SC>aI%K_~pKRf*|aJvAdv!uk_va IJ **Архитектурный паттерн:** Гибридный ETL (Extract, Transform, Load) с хранением аналитического следа +> **Хранилище данных:** SQLite (режим WAL) +> **Интеграционный стек:** `MS SQL Server` ⟷ `1С:ЗУП (SMB/Share)` ⟷ `Ollama (Qwen 2.5)` ⟷ `SQLite` + +--- + +## 📐 Сквозной цикл работы проекта (`main.py`) + +```plaintext + [БД MS SQL 'Орион Pro'] [Сетевая шара \storage\...] + │ │ + (0. run_export) (0.5 share_copier) + ▼ ▼ + [data/scud/*.xlsx] [data/1c/*.xlsx] + │ │ + └────────────────┬───────────────┘ + ▼ + (1. data_validator) ──(Проверка фатальных ошибок) + │ + ▼ + (2. data_loader) ──(Фоллбэки по датам) + │ + ▼ + (3. ai_verifier + Qwen 2.5) ──(Исправление опечаток) + │ + ▼ + (4. Сведение данных) + ┌──────────┴──────────┐ + ▼ ▼ + [Данные за ВЧЕРА] [Данные за СЕГОДНЯ] + │ │ + ▼ ▼ + (Detailed Excel) (Summary Excel + Markdown) + │ │ + └──────────┬──────────┘ + ▼ + (5. feedback_loop) ──(Обучение ИИ) + │ + ▼ + (database.py / SQLite WAL) ──(Сохранение фактов) +``` + +--- + +## 📋 Пошаговый алгоритм по этапам + +### Этап 0: Извлечение сырых данных (Extract) + +#### 1. БД СКУД «Орион Pro» $ +ightarrow$ Excel (`scud_export.py`) +* Скрипт подключается напрямую к **MS SQL Server** системы «Орион Pro». +* Формирует агрегированные файлы `Сотрудники_DD.MM.YYYY.xlsx` в папку `data/scud/` отдельно за **Сегодня** и за **Вчера**. + +#### 2. Сетевая шара $ +ightarrow$ Папка `data/1c/` (`share_copier.py`) +* Заходит по UNC-пути `\storage\SCUD\Обмен\Штат`. +* Ищет и забирает свежие выгрузки **1С:ЗУП**: `Штат_DD_MM_YYYY.xlsx` и `Отсутствия_DD_MM_YYYY.xlsx` за Сегодня и Вчера. + +--- + +### Этап 1: Валидация и защита от сбоев (`data_validator.py`) +* Проверяет наличие файлов за **Вчера** *(они критически важны для формирования ежедневного табеля)*. +* Если файлы за **Сегодня** ещё не выложены кадровой службой на сетевую шару: + * Выдаёт мягкое предупреждение. + * Отменяет генерацию сегодняшней сводки *(чтобы не плодить ложные аномалии по понедельникам/утрам)*. + * Не останавливает работу системы, мягко переходя к формированию вчерашнего отчёта. + +--- + +### Этап 2: Нормализация и загрузка (`data_loader.py`) +* Очищает и применительно нормализует ФИО через `normalize_fio`: удаление лишних пробелов, точек, приведение к единому регистру. +* Выделяет факты физического присутствия по СКУД *(наличие первого входа / последнего выхода)*. +* Исключает из анализа подрядчиков, охрану и служебные карты *(по реестру исключений)*. + +--- + +### Этап 3: ИИ-аудит опечаток и сопоставление ФИО (`ai_verifier.py`) +* Неопознанные проходы СКУД отправляются в локальную нейросеть **Qwen 2.5** *(через Ollama)*. +* ИИ сверяет опечатки в СКУД с 100% эталонным реестром **Штатного расписания 1С**. +* Сопоставленные опечатки автоматически исправляются в датасете перед сведением. + +--- + +### Этап 4: Бизнес-логика, сведение и детекция аномалий +Система разделяет контекст на два независимых потока: + +#### 1. Поток ВЧЕРА (Детальный отчёт) +* Объединяет `СКУД (Вчера)` + `1С:Отсутствия (Вчера)`. +* Считает реальные часы нахождения в здании, обед (30 мин) и отклонение от 8-часовой нормы. +* Формирует Excel `output/[Дата] отчет.xlsx`. + +#### 2. Поток СЕГОДНЯ (Ежедневная сводка) +* Объединяет `СКУД (Сегодня)` + `1С:Отсутствия (Сегодня)` + `Реестр удалёнщиков`. +* 🔴 **Детекция аномалий:** Физический приход по СКУД при наличии любого документа отсутствия в 1С *(отпуск, больничный и т.д., кроме командировок)* помечается как **Истинная Аномалия**. +* 🟢 **Удалёнщики:** Удалёнщики, пришедшие в офис, не считаются аномалией *(правило компании)*. +* Формирует Excel `output/[Дата] сводка.xlsx` *(со свернутыми группами без номеров строк)* и текстовую Markdown-сводку. + +--- + +### Этап 5: Обучение Human-in-the-Loop (`feedback_loop.py`) +* Если ИИ находит спорные случаи, он запрашивает подтверждение оператора в консоли. +* Новые правила, введённые пользователем, мгновенно сохраняются и в `knowledge_base.json`, и в таблицу `ai_knowledge_base` в БД SQLite. + +--- + +### Этап 6: Сохранение аналитического следа в БД (`database.py`) +Вся история сохраняется в локальную **SQLite БД** (`data/scud_orion_ai.db`) в режиме высокой производительности (**WAL / executemany**): + +| Таблица | Содержимое | +| :--- | :--- | +| `scud_logs` | История всех проходов по дням | +| `zup_staff` | Срезы штатного расписания | +| `zup_absences` | Оформленные документы из 1С | +| `anomalies_history` | Найденные и подтверждённые нарушения | +| `ai_knowledge_base` | Обучающие правила для нейросети | + +``` + +# File: ./ROADMAP.md +``` +# 🗺 Реестр задач проекта: SCUD Orion AI (v2) + +## 🟢 Выполненные задачи (Completed Tasks) +* **[TASK-01]** `services/data_loader` — Исправление KeyError по ФИО в Excel экспорте 1С (переход на `.iloc`) *(03.08.2026)* — **ГОТОВО** +* **[TASK-02]** `services/zup_extractor` — Перевод подключения 1С:ЗУП на продакшн MS SQL сервер `ACCOUNT-01` + гибридный фоллбэк *(04.08.2026)* — **ГОТОВО** +* **[TASK-03]** `services/scud_export` — Инцидент Равина В.Э.: Фиксация 100% приоритета сырых логов `pLogData` СКУД над расчетом УРВ Ориона *(04.08.2026)* — **ГОТОВО** +* **[TASK-04]** `core/database` — Реализация схемы SQLite WAL, сохранение снапшотов и маппинг колонок (`department`/`position`) *(05.08.2026)* — **ГОТОВО** +* **[TASK-05]** `core/database` — Исправление бага дублирования номеров снапшотов (переход на вычисление `MAX()` по суффиксу) *(05.08.2026)* — **ГОТОВО** +* **[TASK-06]** `scripts/fix_snapshots` — Создание и выполнение скрипта сквозной переиндексации снапшотов с префиксом `Y` *(05.08.2026)* — **ГОТОВО** +* **[TASK-07]** `scripts/db_cli` — Реализация CLI-инспектора БД и выравнивание номеров срезов для идеальной верстки в терминале *(05.08.2026)* — **ГОТОВО** +* **[TASK-08]** `main.py / logic` — Двойная проверка исключений по `department_scud` и 1С, удержание 100% приоритета кадровых документов *(05.08.2026)* — **ГОТОВО** +* **[TASK-09]** `services/text_reporter` — Лаконичный вывод неразмеченных сотрудников с короткими аббревиатурами отделов СКУД (`РУК`, `ОИЗ`, `ПУ` и др.) *(05.08.2026)* — **ГОТОВО** + +--- + +## 🟡 Ближайшие планы и бэклог (In Progress & Backlog v2.1) +* **[TASK-10]** `services/scud_export` — **Внутридневной контроль:** Извлечение полных цепочек проходов `pLogData` (входы/выходы за смену) — **В ПЛАНАХ** [High] +* **[TASK-11]** `services/data_loader` — **Внутридневной контроль:** Расчет количества и суммарной длительности отлучек/перекуров сверх обеда — **В ПЛАНАХ** [High] +* **[TASK-12]** `services/text_reporter` — **Внутридневной контроль:** Вывод списка системных нарушителей внутреннего распорядка в Markdown-отчет — **В ПЛАНАХ** [Medium] +* **[TASK-13]** `automation` — Автоматизация сбора срезов по расписанию (Cron / Systemd Timers на **12:00**, **17:00**, **19:00**) — **В ПЛАНАХ** [High] +* **[TASK-14]** `services/notifications` — Интеграция Telegram-бота для алертов Администратору при массовых сбоях турникетов (>5%) — **В ПЛАНАХ** [Medium] + +--- + +## 🔵 Дорожная карта Веб-релиза (Roadmap v3.0) +* **[TASK-15]** `api / fastapi` — Создание REST API на FastAPI (`/api/v1/snapshots`, `/api/v1/scud/logs`, `/api/v1/anomalies`) — **В ПЛАНАХ** [High] +* **[TASK-16]** `frontend / chat` — Веб-интерфейс с ИИ-чатом на базе Ollama (Qwen 2.5 14B) с поддержкой Function Calling к REST API — **В ПЛАНАХ** [High] +* **[TASK-17]** `core/memory` — Создание модуля персистентной памяти проекта в SQLite и CLI-инструмента для фиксации архитектурных решений — **В ПЛАНАХ** [High] +``` + +# File: ./config.py +``` +import os +import re +from datetime import datetime, timedelta + +BASE_DIR = os.path.dirname(os.path.abspath(__file__)) +DATA_DIR = os.path.join(BASE_DIR, "data") + +SCUD_DIR = os.path.join(DATA_DIR, "scud") +ZUP_1C_DIR = os.path.join(DATA_DIR, "1c") +OUTPUT_DIR = os.path.join(BASE_DIR, "output") + +# Путь к намонтированной сетевой шаре 1С в Linux (вместо \\storage\SCUD\Обмен\Штат) +SHARE_1C_DIR = "/mnt/scud_share" + +for folder in [DATA_DIR, SCUD_DIR, ZUP_1C_DIR, OUTPUT_DIR]: + os.makedirs(folder, exist_ok=True) + +NOW = datetime.now() +DATE_TODAY = NOW.strftime("%d.%m.%Y") + +if NOW.weekday() == 0: + DATE_YESTERDAY = (NOW - timedelta(days=3)).strftime("%d.%m.%Y") +else: + DATE_YESTERDAY = (NOW - timedelta(days=1)).strftime("%d.%m.%Y") + +# --- Настройки LLM / Ollama --- +OLLAMA_URL = "http://192.168.11.3:11434/api/generate" +OLLAMA_MODEL = "qwen2.5:14b" +MODEL_NAME = OLLAMA_MODEL + +KNOWLEDGE_BASE_PATH = os.path.join(DATA_DIR, "knowledge_base.json") +EXCEPTIONS_PATH = os.path.join(BASE_DIR, "exceptions.json") + +# --- Настройки подключения к MS SQL Server (1С:ЗУП 3.1) --- +ZUP_SQL_CONFIG = { + "driver": "{ODBC Driver 18 for SQL Server}", # или "{ODBC Driver 17 for SQL Server}" + "server": os.getenv("ZUP_SQL_SERVER", "ACCOUNT-01"), + "database": os.getenv("ZUP_SQL_DB", "ZUP30"), # Замените на точное имя базы ЗУП на ACCOUNT-01 + "user": os.getenv("ZUP_SQL_USER", "scud_reader"), # Логин SQL Server + "password": os.getenv("ZUP_SQL_PASS", "Rhfcysq90"), # Пароль SQL Server + "trust_server_certificate": "yes", # Доверять сертификату сервера + "encrypt": "no" # "yes", если на MS SQL включено обязательное SSL-шифрование +} + + +def find_dated_file(prefix, date_str, search_dirs=[ZUP_1C_DIR, SCUD_DIR, DATA_DIR, "."]): + """ + Ищет файлы по префиксу и дате (поддерживает и 30.07.2026, и 30_07_2026). + """ + date_dots = date_str + date_underscores = date_str.replace('.', '_') + + for d in search_dirs: + if not os.path.exists(d): + continue + for f in os.listdir(d): + if f.endswith('.xlsx') or f.endswith('.csv'): + if f.lower().startswith(prefix.lower()): + if date_dots in f or date_underscores in f: + return os.path.join(d, f) + return None + + +def normalize_fio(fio): + if not fio or not isinstance(fio, str): + return "" + fio_clean = re.sub(r'\(.*?\)', '', fio) + fio_clean = fio_clean.replace('\xa0', ' ') + parts = fio_clean.strip().split() + return " ".join(parts).title() + + +def clean_scud_fio_light(fio_str): + return normalize_fio(fio_str) + + +def load_exceptions(): + import json + if os.path.exists(EXCEPTIONS_PATH): + try: + with open(EXCEPTIONS_PATH, "r", encoding="utf-8") as f: + return json.load(f) + except Exception: + pass + return {"fio": [], "departments": [], "positions": [], "position_keywords": []} +``` + +# File: ./exceptions.json +``` +{ + "departments": [ + "ОВК" + ], + "positions": [ + "Уборщик производственных помещений", + "Уборщик служебных помещений" + ], + "fio": [ + "Таткало Валерий Валерьевич", + "Петренюк Андрей Германович", + "Чуркина Елена Геннадьевна", + "Михалев Сергей Геннадьевич" + ], + "position_keywords": [ + "уборщик", + "клинер", + "дворник", + "гардероб", + "рабочий по обслуживанию" + ] +} +``` + +# File: ./main.py +``` +import os +import sys +import json +import argparse +import pandas as pd +from datetime import datetime + +sys.path.append(os.path.dirname(os.path.abspath(__file__))) + +from config import DATE_TODAY, DATE_YESTERDAY, OUTPUT_DIR, DATA_DIR, normalize_fio +from services.scud_export import run_export +from services.share_copier import copy_1c_files_from_share +from services.data_validator import check_file_freshness +from services.data_loader import load_all_data, load_scud_data +from services.excel_exporter import generate_summary_excel, generate_detailed_excel +from services.ai_verifier import ai_verify_scud_against_staff, analyze_scud_mass_failure_ai +from services.text_reporter import generate_markdown_report +from services.feedback_loop import review_ai_decisions +from services.knowledge_base import load_knowledge_base +from core.database import ( + init_db, + save_scud_to_db, + save_staff_to_db, + save_absences_to_db, + save_anomalies_to_db, + load_scud_from_db_by_snapshot, + get_latest_snapshot_time, + has_scud_logs_for_date +) + +from services.ai_verifier import resolve_department_exception_ai + +def apply_exceptions_from_json(df, exceptions_cfg): + """ + Размечает флаг is_excluded=True на основе правил из exceptions.json и БД SQLite. + Сверяет одновременно 1С, СКУД и использует интеллектуальный поиск отделов. + """ + if df is None or df.empty or not exceptions_cfg: + if df is not None: + df['is_excluded'] = False + return df + + deps = exceptions_cfg.get("departments", []) + exact_pos = [p.lower() for p in exceptions_cfg.get("positions", [])] + pos_kw = [k.lower() for k in exceptions_cfg.get("position_keywords", [])] + exc_fios = [normalize_fio(f) for f in exceptions_cfg.get("fio", [])] + + df['is_excluded'] = False + + for idx, row in df.iterrows(): + fio_clean = row.get('fio_clean', '') + dep_1c = row.get('Подразделение', '') + dep_scud = row.get('department_scud', row.get('department', '')) + pos = str(row.get('Должность', '')).lower() + + is_fio_exc = fio_clean in exc_fios + is_pos_exc = (pos in exact_pos) or any(k in pos for k in pos_kw) if pos else False + + # Двухуровневая интеллектуальная проверка отделов (1С + СКУД + ИИ-Кеш БД) + is_dep_exc = resolve_department_exception_ai(dep_1c, dep_scud, deps) + + if is_fio_exc or is_dep_exc or is_pos_exc: + df.at[idx, 'is_excluded'] = True + + return df + +def load_exceptions_config(): + """Загружает файл exceptions.json из корня проекта.""" + root_dir = os.path.dirname(os.path.abspath(__file__)) + json_path = os.path.join(root_dir, "exceptions.json") + if not os.path.exists(json_path): + return {} + try: + with open(json_path, 'r', encoding='utf-8') as f: + return json.load(f) + except Exception as e: + print(f"[⚠️] Ошибка чтения exceptions.json: {e}") + return {} + + +def apply_exceptions_from_json(df, exceptions_cfg): + """ + Размечает флаг is_excluded=True на основе правил из exceptions.json. + Сверяет отдел одновременно по полному имени из 1С и по короткой аббревиатуре из СКУД. + """ + if df is None or df.empty or not exceptions_cfg: + if df is not None: + df['is_excluded'] = False + return df + + deps = [d.lower() for d in exceptions_cfg.get("departments", [])] + exact_pos = [p.lower() for p in exceptions_cfg.get("positions", [])] + pos_kw = [k.lower() for k in exceptions_cfg.get("position_keywords", [])] + exc_fios = [normalize_fio(f) for f in exceptions_cfg.get("fio", [])] + + df['is_excluded'] = False + + for idx, row in df.iterrows(): + fio_clean = row.get('fio_clean', '') + dep_1c = str(row.get('Подразделение', '')).lower() + dep_scud = str(row.get('department_scud', row.get('department', ''))).lower() + pos = str(row.get('Должность', '')).lower() + + is_fio_exc = fio_clean in exc_fios + is_dep_exc = any(d in dep_1c or d == dep_scud for d in deps) if (dep_1c or dep_scud) else False + is_pos_exc = (pos in exact_pos) or any(k in pos for k in pos_kw) if pos else False + + if is_fio_exc or is_dep_exc or is_pos_exc: + df.at[idx, 'is_excluded'] = True + + return df + + +def filter_report_dataframe(merged_df): + """ + Исключает сотрудников из списка исключений и сотрудников без пропуска из детального отчета, + ЕСЛИ у них нет официального документа отсутствия из 1С:ЗУП. + """ + if merged_df is None or merged_df.empty: + return merged_df + + has_1c_reason = ( + merged_df['Вид_отсутствия'].notna() & + (merged_df['Вид_отсутствия'].astype(str).str.strip() != '') & + (~merged_df['Вид_отсутствия'].astype(str).str.startswith('Исключение')) + ) + is_not_excluded = merged_df.get('is_excluded', False) == False + is_not_no_pass = merged_df.get('no_scud_pass', False) == False + + # В отчет попадают ТОЛЬКО офисные сотрудники с пропусками ИЛИ имеющие документ из 1С + filtered_df = merged_df[(is_not_excluded & is_not_no_pass) | has_1c_reason].copy() + return filtered_df + + +def load_static_reason_workers(): + """Загружает реестр удалёнщиков и статических причин из CSV.""" + static_path = os.path.join(DATA_DIR, "static_reason_workers.csv") + if not os.path.exists(static_path): + return {} + try: + df_static = pd.read_csv(static_path, encoding='utf-8') + if 'fio' in df_static.columns and 'reason' in df_static.columns: + df_static['fio_clean'] = df_static['fio'].apply(normalize_fio) + return dict(zip(df_static['fio_clean'], df_static['reason'])) + except Exception as e: + print(f"[⚠️] Ошибка чтения static_reason_workers.csv: {e}") + return {} + + +def detect_all_anomalies(merged_df, static_reasons_dict, kb_rules, scud_fios_set=None): + """ + Автоматически выявляет истинные аномалии СКУД ⟷ 1С. + Исключения (ОВК/Клининг/Охрана) НЕ попадают в аномалии СКУД, если на них нет документа из 1С. + """ + anomalies = [] + kb_rules_text = " ".join(kb_rules).lower() if kb_rules else "" + + ALLOWED_WORK_TRIP_KEYWORDS = ['командировк', 'разъездн', 'поездк'] + + for idx, row in merged_df.iterrows(): + fio = row.get('Сотрудник', row.get('fio_clean', '')) + fio_clean = row.get('fio_clean', '') + is_present = row.get('Пришел', False) + is_exc = row.get('is_excluded', False) + reason_1c = str(row.get('Вид_отсутствия', '')).strip() + has_1c_reason = pd.notna(row.get('Вид_отсутствия')) and reason_1c != '' and not reason_1c.startswith('Исключение') + anom_flag = row.get('anomaly_flag', 'NONE') + + is_fio_whitelisted_in_kb = fio_clean.lower() in kb_rules_text + + # 🚨 АНОМАЛИЯ 1: Физическое присутствие при документе отсутствия 1С + if is_present and has_1c_reason: + reason_lower = reason_1c.lower() + is_allowed_trip = any(kw in reason_lower for kw in ALLOWED_WORK_TRIP_KEYWORDS) + + if not is_allowed_trip and not is_fio_whitelisted_in_kb: + anomalies.append({ + "type": "ФИЗИЧЕСКОЕ ПРИСУТСТВИЕ ПРИ ОФИЦИАЛЬНОМ ОТСУТСТВИИ", + "fio": fio, + "details": f"Сотрудник пришел по СКУД, но в 1С оформлен документ: '{reason_1c}'" + }) + + # ИСКЛЮЧЕНИЯ без документов 1С НЕ пропускаются дальше к аномалиям СКУД + if is_exc and not has_1c_reason: + continue + + # 🚨 АНОМАЛИЯ 2: Перемещение внутри здания без отметки утреннего входа + if anom_flag == 'ANOMALY_NO_IN_HAS_ACTIVITY': + first_act = row.get('Первая_активность', '—') + anomalies.append({ + "type": "АНОМАЛИЯ СКУД: ПЕРЕМЕЩЕНИЕ БЕЗ ВХОДА", + "fio": fio, + "details": f"Отсутствует регистрация входа на КПП при зафиксированной первой активности в {first_act}" + }) + + # 🚨 АНОМАЛИЯ 3: Сотрудник есть в Штате 1С, но ПОЛНОСТЬЮ ОТСУТСТВУЕТ в базе СКУД Орион Pro + if scud_fios_set is not None: + if fio_clean not in scud_fios_set and not has_1c_reason: + anomalies.append({ + "type": "АНОМАЛИЯ УЧЕТА: СОТРУДНИК ОТСУТСТВУЕТ В СКУД ОРИОН PRO", + "fio": fio, + "details": f"Сотрудник числится в Штатном расписании 1С ({row.get('Подразделение', '—')}), но полностью отсутствует в базе СКУД Орион Pro (профиль не создан или карта не выдана)" + }) + + return anomalies + + +def aggregate_scud_by_employee(df, debug=False): + """Агрегирует проходы СКУД по уникальным сотрудникам.""" + if df is None or df.empty or 'fio_clean' not in df.columns: + return df + + aggregated = [] + for fio_clean, group in df.groupby('fio_clean', sort=False): + is_present = group['Пришел'].any() if 'Пришел' in group.columns else False + + if is_present and 'Пришел' in group.columns: + present_rows = group[group['Пришел'] == True] + best_row = present_rows.iloc[0].to_dict() if not present_rows.empty else group.iloc[0].to_dict() + else: + best_row = group.iloc[0].to_dict() + + best_row['Пришел'] = is_present + aggregated.append(best_row) + + return pd.DataFrame(aggregated) + + +def main(): + help_text = """ +Система автоматизированного контроллинга СКУД ⟷ 1С:ЗУП (scud_orion_ai_v2) + +ПРИМЕРЫ ЗАПУСКА: + python main.py -- Обычный дневной запуск + python main.py --skip-export -- Расчет отчета по ПОСЛЕДНЕМУ имеющемуся снапшоту из SQLite + python main.py --snapshot 20260805-001 -- Расчет отчета строго по ID снапшота + python main.py -d -- Запуск в режиме расширенной отладки (DEBUG) +""" + parser = argparse.ArgumentParser( + description=help_text, + formatter_class=argparse.RawDescriptionHelpFormatter + ) + parser.add_argument('-d', '--debug', action='store_true', help="Запуск в режиме отладки с выводом подробных логов") + parser.add_argument('--skip-export', action='store_true', help="Пропустить выгрузку СКУД из MS SQL и построить отчет по последнему снапшоту") + parser.add_argument('--snapshot', type=str, default=None, help="Составной ID снапшота или время создания") + + args = parser.parse_args() + DEBUG = args.debug + + print("=" * 60) + print(f"ЗАПУСК СИСТЕМЫ МОДУЛЬНОГО КОНТРОЛЛИНГА СКУД ⟷ 1С {'[DEBUG MODE]' if DEBUG else ''}") + print("=" * 60) + + init_db() + kb_data = load_knowledge_base() + kb_rules = kb_data.get("rules", []) + exceptions_cfg = load_exceptions_config() + + if args.snapshot: + snapshot_param = args.snapshot + print(f"[📸] РЕЖИМ СНАПШОТА: Расчет отчета строго по срезу '{snapshot_param}'") + elif args.skip_export: + snapshot_param = get_latest_snapshot_time() + print(f"[📸] РЕЖИМ --skip-export: Используем последний снапшот из SQLite ('{snapshot_param}')") + else: + snapshot_param = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + print(f"[📸] СФОРМИРОВАН НОВЫЙ СНАПШОТ: '{snapshot_param}'") + + if not args.skip_export and not args.snapshot: + try: + run_export(save_xlsx=True, debug=DEBUG) + except Exception as e: + print(f"[⚠️] Ошибка автоэкспорта из БД: {e}. Переходим к записям в SQLite.") + else: + print("[0/5] Пропуск прямого экспорта из MS SQL (чтение из базы SQLite)...") + + copy_1c_files_from_share() + + print("[1/5] Проверка актуальности и свежести входных данных...") + is_valid, warnings, errors, has_today_1c = check_file_freshness() + + if warnings: + print("\n--- ⚠️ ПРЕДУПРЕЖДЕНИЯ ОБ АКТУАЛЬНОСТИ ---") + for w in warnings: + print(f" • {w}") + print("-" * 45) + + if not is_valid: + print("\n" + "!" * 60) + print("🛑 ОСТАНОВКА ВЫПОЛНЕНИЯ: Отсутствуют критически важные файлы за вчерашний день!") + for e in errors: + print(f" {e}") + print("!" * 60) + sys.exit(1) + + print("[✓] Проверка доступности данных успешно пройдена!\n") + + print("[2/5] Загрузка данных из СКУД, 1С:ЗУП, реестра причин и исключений...") + + if args.snapshot or args.skip_export: + raw_scud_today_df = load_scud_from_db_by_snapshot(DATE_TODAY, snapshot_param) + raw_scud_yesterday_df = load_scud_from_db_by_snapshot(DATE_YESTERDAY, snapshot_param) + + if raw_scud_yesterday_df.empty: + raw_scud_yesterday_df = load_scud_from_db_by_snapshot(DATE_YESTERDAY) + + ( + _, _, + df_staff_today, df_absent_today, + df_staff_yesterday, df_absent_yesterday + ) = load_all_data() + else: + ( + raw_scud_today_df, raw_scud_yesterday_df, + df_staff_today, df_absent_today, + df_staff_yesterday, df_absent_yesterday + ) = load_all_data() + + if df_staff_yesterday is not None: + save_staff_to_db(df_staff_yesterday, DATE_YESTERDAY) + if df_absent_yesterday is not None: + save_absences_to_db(df_absent_yesterday, DATE_YESTERDAY) + + if df_staff_today is not None: + save_staff_to_db(df_staff_today, DATE_TODAY) + if df_absent_today is not None: + save_absences_to_db(df_absent_today, DATE_TODAY) + + staff_fios_yesterday_clean = df_staff_yesterday['fio_clean'].dropna().tolist() if df_staff_yesterday is not None else [] + static_reasons_dict = load_static_reason_workers() + + # ============================================================ + # 🎯 ЧАСТЬ 1: ДЕТАЛЬНЫЙ ОТЧЕТ ЗА ВЧЕРА (ГАРАНТИРОВАННЫЙ РАСЧЕТ) + # ============================================================ + print(f"\n[3/5] Обработка и построение детального отчета за ВЧЕРА ({DATE_YESTERDAY})...") + + if not raw_scud_yesterday_df.empty and 'Пришел' not in raw_scud_yesterday_df.columns: + raw_scud_yesterday_df['Пришел'] = raw_scud_yesterday_df['is_present'].astype(int) == 1 if 'is_present' in raw_scud_yesterday_df.columns else False + + scud_yesterday_unrecognized = raw_scud_yesterday_df[~raw_scud_yesterday_df['fio_clean'].isin(staff_fios_yesterday_clean)]['fio_clean'].tolist() if not raw_scud_yesterday_df.empty else [] + + fio_mapping_scud_y = ai_verify_scud_against_staff(scud_yesterday_unrecognized, staff_fios_yesterday_clean) + if fio_mapping_scud_y: + raw_scud_yesterday_df['fio_clean'] = raw_scud_yesterday_df['fio_clean'].apply( + lambda x: fio_mapping_scud_y[x]['staff_fio'] if x in fio_mapping_scud_y else x + ) + + if df_absent_yesterday is not None and not df_absent_yesterday.empty: + absent_unrecognized_yesterday = df_absent_yesterday[~df_absent_yesterday['fio_clean'].isin(staff_fios_yesterday_clean)]['fio_clean'].tolist() + if absent_unrecognized_yesterday: + fio_mapping_absent_y = ai_verify_scud_against_staff(absent_unrecognized_yesterday, staff_fios_yesterday_clean) + if fio_mapping_absent_y: + df_absent_yesterday['fio_clean'] = df_absent_yesterday['fio_clean'].apply( + lambda x: fio_mapping_absent_y[x]['staff_fio'] if x in fio_mapping_absent_y else x + ) + + raw_scud_yesterday_df = aggregate_scud_by_employee(raw_scud_yesterday_df, debug=DEBUG) + + merged_yesterday = df_staff_yesterday.copy() if df_staff_yesterday is not None else pd.DataFrame() + if not merged_yesterday.empty: + if not raw_scud_yesterday_df.empty: + if 'Подразделение' in raw_scud_yesterday_df.columns: + raw_scud_yesterday_df['department_scud'] = raw_scud_yesterday_df['Подразделение'] + elif 'department' in raw_scud_yesterday_df.columns: + raw_scud_yesterday_df['department_scud'] = raw_scud_yesterday_df['department'] + else: + raw_scud_yesterday_df['department_scud'] = '' + + merged_yesterday = merged_yesterday.merge( + raw_scud_yesterday_df[['fio_clean', 'Пришел', 'Начало_дня', 'Первая_активность', 'Конец_дня', 'Находился_в_здании', 'anomaly_flag', 'department_scud']], + on='fio_clean', how='left' + ) + + if df_absent_yesterday is not None and not df_absent_yesterday.empty: + merged_yesterday = merged_yesterday.merge(df_absent_yesterday[['fio_clean', 'Вид_отсутствия']], on='fio_clean', how='left') + + if 'Пришел' not in merged_yesterday.columns: + merged_yesterday['Пришел'] = False + else: + merged_yesterday['Пришел'] = merged_yesterday['Пришел'].fillna(False) + + if 'Сотрудник' not in merged_yesterday.columns: + merged_yesterday['Сотрудник'] = merged_yesterday.get('ФИО', merged_yesterday['fio_clean']) + + if static_reasons_dict: + for fio_clean, reason_val in static_reasons_dict.items(): + mask_yesterday = ( + (merged_yesterday['Пришел'] == False) & + (merged_yesterday['Вид_отсутствия'].isna() | (merged_yesterday['Вид_отсутствия'].astype(str).str.strip() == '')) & + (merged_yesterday['fio_clean'] == fio_clean) + ) + merged_yesterday.loc[mask_yesterday, 'Вид_отсутствия'] = reason_val + + merged_yesterday = apply_exceptions_from_json(merged_yesterday, exceptions_cfg) + mask_exc_yesterday = ( + (merged_yesterday['Пришел'] == False) & + (merged_yesterday['Вид_отсутствия'].isna() | (merged_yesterday['Вид_отсутствия'].astype(str).str.strip() == '')) & + (merged_yesterday.get('is_excluded', False) == True) + ) + merged_yesterday.loc[mask_exc_yesterday, 'Вид_отсутствия'] = 'Исключение (ОВК/Подрядчики)' + + # Расчет флага no_scud_pass для вчера + scud_fios_yesterday_set = set(raw_scud_yesterday_df['fio_clean'].dropna().tolist()) if not raw_scud_yesterday_df.empty else set() + merged_yesterday['no_scud_pass'] = ( + (~merged_yesterday['fio_clean'].isin(scud_fios_yesterday_set)) & + (merged_yesterday['Вид_отсутствия'].isna() | (merged_yesterday['Вид_отсутствия'].astype(str).str.strip() == '')) & + (merged_yesterday.get('is_excluded', False) == False) + ) + + # 🚨 Рассчитываем аномалии за ВЧЕРА + anomalies_yesterday_list = detect_all_anomalies(merged_yesterday, static_reasons_dict, kb_rules, scud_fios_set=scud_fios_yesterday_set) + save_anomalies_to_db(anomalies_yesterday_list, DATE_YESTERDAY) + + # ⚡️ Фильтрация: исключения НЕ попадают в вчерашний отчет (если нет отпуска из 1С) + filtered_yesterday = filter_report_dataframe(merged_yesterday) + generate_detailed_excel(merged_df=filtered_yesterday, date_str=DATE_YESTERDAY) + + # Фиксируем вчерашний снапшот строго на 22:00:00 + yesterday_dt_obj = datetime.strptime(DATE_YESTERDAY, "%d.%m.%Y") + yesterday_22_str = yesterday_dt_obj.strftime("%Y-%m-%d 22:00:00") + save_scud_to_db(merged_yesterday, DATE_YESTERDAY, snapshot_time=yesterday_22_str, is_yesterday=True) + print(f"[✓] Детальный отчет за вчера сформирован и зафиксирован в SQLite со снапшотом на {yesterday_22_str}") + + # ============================================================ + # 🎯 ЧАСТЬ 2: ЕЖЕДНЕВНАЯ СВОДКА ЗА СЕГОДНЯ + # ============================================================ + if not args.snapshot and not args.skip_export: + save_scud_to_db(raw_scud_today_df, DATE_TODAY, snapshot_time=snapshot_param, is_yesterday=False) + + if has_today_1c and df_staff_today is not None and df_absent_today is not None: + print("\n[4/5] Обработка данных за СЕГОДНЯ...") + staff_fios_today_clean = df_staff_today['fio_clean'].dropna().tolist() + + if not raw_scud_today_df.empty and 'Пришел' not in raw_scud_today_df.columns: + raw_scud_today_df['Пришел'] = raw_scud_today_df['is_present'].astype(int) == 1 if 'is_present' in raw_scud_today_df.columns else False + + scud_unrecognized = raw_scud_today_df[~raw_scud_today_df['fio_clean'].isin(staff_fios_today_clean)]['fio_clean'].tolist() if not raw_scud_today_df.empty else [] + fio_mapping_scud = ai_verify_scud_against_staff(scud_unrecognized, staff_fios_today_clean) + if fio_mapping_scud: + raw_scud_today_df['fio_clean'] = raw_scud_today_df['fio_clean'].apply( + lambda x: fio_mapping_scud[x]['staff_fio'] if x in fio_mapping_scud else x + ) + + absent_unrecognized_today = df_absent_today[~df_absent_today['fio_clean'].isin(staff_fios_today_clean)]['fio_clean'].tolist() + if absent_unrecognized_today: + fio_mapping_absent = ai_verify_scud_against_staff(absent_unrecognized_today, staff_fios_today_clean) + if fio_mapping_absent: + df_absent_today['fio_clean'] = df_absent_today['fio_clean'].apply( + lambda x: fio_mapping_absent[x]['staff_fio'] if x in fio_mapping_absent else x + ) + + raw_scud_today_df = aggregate_scud_by_employee(raw_scud_today_df, debug=DEBUG) + + merged_today = df_staff_today.copy() + if not raw_scud_today_df.empty: + if 'Подразделение' in raw_scud_today_df.columns: + raw_scud_today_df['department_scud'] = raw_scud_today_df['Подразделение'] + elif 'department' in raw_scud_today_df.columns: + raw_scud_today_df['department_scud'] = raw_scud_today_df['department'] + else: + raw_scud_today_df['department_scud'] = '' + + merged_today = merged_today.merge( + raw_scud_today_df[['fio_clean', 'Пришел', 'Начало_дня', 'Первая_активность', 'Конец_дня', 'Находился_в_здании', 'anomaly_flag', 'department_scud']], + on='fio_clean', how='left' + ) + + if df_absent_today is not None and not df_absent_today.empty: + merged_today = merged_today.merge(df_absent_today[['fio_clean', 'Вид_отсутствия']], on='fio_clean', how='left') + + if 'Пришел' not in merged_today.columns: + merged_today['Пришел'] = False + else: + merged_today['Пришел'] = merged_today['Пришел'].fillna(False) + + if 'Сотрудник' not in merged_today.columns: + merged_today['Сотрудник'] = merged_today.get('ФИО', merged_today['fio_clean']) + + if static_reasons_dict: + for fio_clean, reason_val in static_reasons_dict.items(): + mask_today = ( + (merged_today['Пришел'] == False) & + (merged_today['Вид_отсутствия'].isna() | (merged_today['Вид_отсутствия'].astype(str).str.strip() == '')) & + (merged_today['fio_clean'] == fio_clean) + ) + merged_today.loc[mask_today, 'Вид_отсутствия'] = reason_val + + merged_today = apply_exceptions_from_json(merged_today, exceptions_cfg) + mask_exc_today = ( + (merged_today['Пришел'] == False) & + (merged_today['Вид_отсутствия'].isna() | (merged_today['Вид_отсутствия'].astype(str).str.strip() == '')) & + (merged_today.get('is_excluded', False) == True) + ) + merged_today.loc[mask_exc_today, 'Вид_отсутствия'] = 'Исключение (ОВК/Подрядчики)' + + # Расчет флага no_scud_pass для сегодня + scud_fios_today_set = set(raw_scud_today_df['fio_clean'].dropna().tolist()) if not raw_scud_today_df.empty else set() + merged_today['no_scud_pass'] = ( + (~merged_today['fio_clean'].isin(scud_fios_today_set)) & + (merged_today['Вид_отсутствия'].isna() | (merged_today['Вид_отсутствия'].astype(str).str.strip() == '')) & + (merged_today.get('is_excluded', False) == False) + ) + + scud_fios_set = set(raw_scud_today_df['fio_clean'].dropna().tolist()) if not raw_scud_today_df.empty else set() + anomalies_list = detect_all_anomalies(merged_today, static_reasons_dict, kb_rules, scud_fios_set=scud_fios_set) + + # 🚨 ОПЕРАТИВНЫЙ МОНИТОРИНГ ОБОРУДОВАНИЯ СКУД ЗА СЕГОДНЯ: + mass_failure_today = analyze_scud_mass_failure_ai(raw_scud_today_df) + if mass_failure_today and mass_failure_today.get("is_mass_failure"): + print("\n" + "!" * 60) + print(f"🚨 ВНИМАНИЕ! ИИ ОБНАРУЖИЛ ОПЕРАТИВНЫЙ СБОЙ ТУРНИКЕТОВ ВХОДА СЕГОДНЯ ({mass_failure_today['anomaly_percent']}% СМЕНЫ)") + print(mass_failure_today["alert_text"]) + print("!" * 60 + "\n") + + save_anomalies_to_db(anomalies_list, DATE_TODAY) + + # Флаги фильтрации для ИИ-репортера + is_no_pass_today = merged_today['no_scud_pass'] == True if 'no_scud_pass' in merged_today.columns else False + is_exc_today = merged_today.get('is_excluded', False) == True + + absent_explained = merged_today[ + (merged_today['Пришел'] == False) & + (merged_today['Вид_отсутствия'].notna()) & + (~merged_today['Вид_отсутствия'].astype(str).str.startswith('Исключение')) + ] + + # Истинно неизвестные случаи (исключаем тех, у кого нет пропуска, и спецотделы ОВК/Охрана) + absent_unexplained = merged_today[ + (merged_today['Пришел'] == False) & + (merged_today['Вид_отсутствия'].isna() | (merged_today['Вид_отсутствия'].astype(str).str.strip() == '')) & + (~is_no_pass_today) & + (~is_exc_today) + ] + + scud_present_but_absent_in_1c = merged_today[ + (~is_exc_today) & + (merged_today['Пришел'] == True) & + (merged_today['Вид_отсутствия'].notna()) & + (~merged_today['Вид_отсутствия'].astype(str).str.startswith('Исключение')) + ] + + print("[5/5] Запуск ИИ-аудитора и построение Ежедневной сводки...") + # Фильтруем аномалии СКУД для текстового отчета (убираем аномалии "ОТСУТСТВУЕТ В СКУД", т.к. они ушли в раздел "Нет пропуска") + filtered_anomalies_list = [ + a for a in anomalies_list + if "ОТСУТСТВУЕТ В СКУД" not in a.get('type', '') + ] + + report_text = generate_markdown_report( + merged_df=merged_today, + absent_explained=absent_explained, + absent_unexplained=absent_unexplained, + scud_present_but_absent_in_1c=scud_present_but_absent_in_1c, + anomalies_list=filtered_anomalies_list, + raw_scud_df=raw_scud_today_df, + raw_absent_df=df_absent_today, + date_str=DATE_TODAY + ) + + generate_summary_excel(merged_df=merged_today, date_str=DATE_TODAY) + + md_report_path = os.path.join(OUTPUT_DIR, f"Сводка_контроллинга_{DATE_TODAY}.md") + with open(md_report_path, "w", encoding="utf-8") as f: + f.write(report_text) + print(f"\n[✓] Текстовый отчет сохранен в: {md_report_path}") + + suspicious_cases = [] + for a in anomalies_list: + if "ОФИЦИАЛЬНОМ ОТСУТСТВИИ" not in a.get('type', ''): + suspicious_cases.append({ + 'fio_target': a['fio'], + 'reason': f"{a['type']}: {a['details']}" + }) + + if suspicious_cases: + review_ai_decisions(report_text, suspicious_cases) + + print("\n" + "=" * 60) + print("ГОТОВАЯ ТЕКСТОВАЯ СВОДКА ИИ-АУДИТОРА:") + print("=" * 60) + print(report_text) + else: + print(f"\n[ℹ️] Формирование Ежедневной сводки за {DATE_TODAY} ПРОПУЩЕНО.") + + +if __name__ == "__main__": + main() +``` + +# File: ./project_snapshot_scud_orion_ai_v2.md +``` +О’кей хорошо! Ниже представлена полностью объединенная и систематизированная история развития проекта **`scud_orion_ai_v2`**. В нее вошел весь путь: от стартовых инцидентов с файлами 1С и отладкой MS SQL Ориона до текущей архитектуры со снапшотами, двойной фильтрацией исключений и SQLite-базой знаний. + +--- + +# 🚀 ПОЛНАЯ ИСТОРИЯ РАЗВИТИЯ И СНАПШОТ ПРОЕКТА: SCUD ORION AI (v2) + +**Дата актуализации:** 05.08.2026 +**Статус проекта:** Производственный релиз (*Production-Ready*) с поддержкой снапшотов, двойной фильтрацией исключений, лаконичным форматированием и синхронизацией SQLite. +**Общий объем кода:** ~2 620 строк Python (17 модулей + CLI-инструментарий) + +--- + +## 📌 1. НАЗНАЧЕНИЕ И АРХИТЕКТУРА СИСТЕМЫ + +Проект **`scud_orion_ai_v2`** — это система автоматизированного кадрового контроллинга и аудита трудовой дисциплины. Система сопоставляет логи физических проходов СКУД «Орион Pro» (MS SQL Server) с кадровыми данными и документами отсутствия из 1С:ЗУП 3.1 (MS SQL Server / Сетевая шара), а также выполняет квалификацию отклонений с помощью локальной LLM (Ollama / Qwen 2.5 14B). + +### 💻 Ключевой стек технологий: +* **Язык разработки:** Python 3.12 (в изолированном `venv`). +* **СУБД СКУД (Источник):** MS SQL Server (`Orion-14.01.21-1` на хосте `172.16.31.221\SQL`). +* **СУБД 1С (Источник):** MS SQL Server (`ACCOUNT-01`, БД `zup_db`). +* **Фоллбэк/Обмен:** Сетевая Linux-шара (`/mnt/scud_share`). +* **Локальная СУБД (Проект):** SQLite (`data/scud_orion_ai.db` с поддержкой WAL-режима и истории снапшотов). +* **AI Engine:** Ollama API (`http://192.168.11.3:11434/api/generate`, модель `qwen2.5:14b`). +* **CLI & Репорты:** `pandas`, `openpyxl`, `pyodbc`, `sqlite3`. + +--- + +## 📜 2. ПОЛНАЯ ХРОНОЛОГИЯ ИНЦИДЕНТОВ И РЕШЕНИЙ + +### 🔹 Инцидент 1: Ошибка распарсивания Excel-файлов Штатного расписания 1С +* **Симптом:** `KeyError: 'ФИО'` при запуске `main.py` на этапе загрузки штата из `/data/1c/Штат_DD_MM_YYYY.xlsx`. +* **Причина:** Файлы экспорта 1С выгружаются со служебным заголовком. При `skiprows=7` датафрейм воспринимал строку с именами колонок как данные, присваивая столбцам имена `Unnamed: 0`, `Unnamed: 1`. +* **Решение:** Перешли от обращения по текстовым именам колонок к позиционному связыванию через `.iloc[:, [1, 5, 12]]` (индексы: `1` — ФИО, `5` — Подразделение, `12` — Должность) со сдвигом `skiprows=8`. + +### 🔹 Инцидент 2: Падение сетевого подключения к MS SQL Server 1С (`Login timeout expired`) +* **Симптом:** Соединение к MS SQL падало по таймауту (`HYT00`), приводя к отсутствию таблицы `zup_absences` в памяти и `KeyError: 'Вид_отсутствия'`. +* **Причина:** В модуле `zup_extractor.py` находились дефолтные тестовые параметры подключения (`192.168.1.10`) вместо продакшн-конфигурации. +* **Решение:** + * Перевели `zup_extractor.py` на прямой импорт параметров из `config.py` (сервер `ACCOUNT-01`). + * В `services/data_loader.py` реализован гибридный фоллбэк: при недоступности MS SQL 1С система автоматически считывает локальные файлы `Отсутствия_DD_MM_YYYY.xlsx` из папки `data/1c/` (копируемые с шары `/mnt/scud_share`). + +### 🔹 Инцидент 3: Аномалия УРВ «Орион Pro» (Случай сотрудника Равина В.Э.) +* **Симптом:** В выгрузке `scud_export.py` сотрудник числился присутствовавшим (вход в 14:11:06), а в отчете УРВ «Орион Pro» стоял статус «Нет входа» / 0:00 отработанных часов. +* **Расследование в SSMS:** Был установлен истинный системный ключ в базе Ориона: `pList.ID = 2107` (`pList.TabNumber = 13058`, а связка логов идет по `pLogData.HozOrgan = pList.ID`). Прямой запрос к сырым логам `pLogData` вернул события: `13:51:15` — Выход (Event 28/32), `14:11:06` — Вход (Event 28/32). +* **Причина расхождения:** День сотрудника начался с фиксации Выхода в 13:51 (приход утром без прикладывания карты). Модуль УРВ «Ориона» не смог корректно сопоставить смену, начинающуюся с выхода, и обнулил табель. +* **Вывод для системы:** Первичные физические логи `pLogData` (события 28/32) обладают 100% приоритетом над расчетным модулем УРВ Ориона. + +### 🔹 Инцидент 4: Ошибка нулевых показателей при `--skip-export` +* **Причина:** В запросе к SQLite использовалось жесткое равенство по метке времени `snapshot_time`. Если секунды среза отличались, запрос возвращал 0 строк. +* **Решение:** Введены составные ID снапшотов (`20260805-001`, `Y20260805-001`) и ступенчатый fallback-механизм в `core/database.py`: если точного времени нет, подтягивается самый свежий имеющийся срез за указанную дату. + +### 🔹 Инцидент 5: Потеря названий отделов и должностей (`—`, `—`) +* **Причина:** Колонки в базе SQLite назывались `department` и `position`, а отчет требовал `Подразделение` и `Должность`. +* **Решение:** В `core/database.py` добавлен автоматический маппинг колонок при считывании из SQLite, а в `main.py` — подтягивание метаданных из 1С:Штат. + +### 🔹 Инцидент 6: Раздутый список «Неизвестных случаев» (21 чел $\rightarrow$ 11 чел) +* **Причина:** В 1С отделы записаны полными именами (*«Отдел внутреннего контроля»*), а в `exceptions.json` — аббревиатурами (*«ОВК»*). Из-за этого контролеры ОВК, клининг и подрядчики не находились алгоритмом и попадали в неизвестные. +* **Решение:** Реализована двойная проверка в `main.py`: при объединении данных сохраняется родная аббревиатура из MS SQL СКУД (`department_scud`). Функция `apply_exceptions_from_json` проводит поиск и по имени 1С, и по короткой аббревиатуре СКУД. + +--- + +## 🛡️ 3. АРХИТЕКТУРА БЕЗОПАСНОСТИ И ПРИОРИТЕТОВ + +### 👥 Защита от «Полных Тёзок» (Full Name Collision) +1. **Уровень 1 (БД & SQL):** Использование строго уникальных идентификаторов (`pList.ID` в СКУД, GUID/Табельный номер в 1С). +2. **Уровень 2 (Составные ключи):** При мёрдже без прямых ID применяется контекстный ключ: + $$ ext{Composite Key} = ext{fio\_clean} + ext{"\_"} + ext{department} + ext{"\_"} + ext{position}$$ +3. **Уровень 3 (AI-Валидатор):** Системный промпт LLM запрещает объединять записи полных тёзок при разнице в отделе или должности. + +### ⚙️ Иерархия приоритетов статуса сотрудника: + +
+ +Status = + + Пришел (по СКУД), если есть вход или активность
+ Документ 1С:ЗУП (Отпуск, Больничный...), высший приоритет над исключениями
+ Причина из static_reason_workers.csv, если указан удаленщик
+ Исключение (ОВК/Подрядчики), если подпадает под exceptions.json и в 1С ПУСТО
+ Неизвестно (Истинно неотмеченный), если офисный сотрудник без проходов и без 1С +
+ +
+ +--- + +## 📁 4. СТРУКТУРА КАТАЛОГОВ И ИСПРАВЛЕННЫХ МОДУЛЕЙ + +```text +scud_orion_ai_v2/ +├── config.py # Глобальная конфигурация, пути, параметры SQL и LLM (Ollama) +├── main.py # Главный оркестратор пайплайна (СКУД ⟷ 1С, ИИ-аудит, Excel/MD) +├── exceptions.json # Исключения (подрядчики, ОВК, клининг, списки ФИО) +├── core/ +│ ├── __init__.py +│ └── database.py # Схема SQLite, таблицы scud_logs, zup_staff, ai_knowledge_base +├── services/ +│ ├── __init__.py +│ ├── scud_export.py # Выгрузка СКУД из MS SQL Орион Pro + расчет первой активности +│ ├── zup_extractor.py # Выгрузка отсутствий из MS SQL 1С:ЗУП 3.1 +│ ├── share_copier.py # Копирование XLSX файлов с шары /mnt/scud_share +│ ├── data_loader.py # Загрузка, очистка и маркировка аномалий СКУД/1С +│ ├── data_validator.py # Проверка свежести входных файлов +│ ├── excel_exporter.py # Формирование Excel-сводок и детальных отчетов (.xlsx) +│ ├── ai_verifier.py # Взаимодействие с Ollama (Qwen 2.5): сверка ФИО и сбои +│ ├── text_reporter.py # Генерация итогового Markdown-отчета (.md) +│ ├── feedback_loop.py # Контур обучения ИИ (Human-in-the-Loop) +│ └── knowledge_base.py # Загрузка и пополнение Базы Знаний ИИ через SQLite +├── scripts/ +│ ├── __init__.py +│ ├── migrate_db.py # Мигратор схемы SQLite БД +│ └── db_cli.py # CLI утилита управления БД, снапшотами и экспорта в Excel +├── data/ # Локальная SQLite БД, выгрузки 1С, СКУД +│ ├── scud_orion_ai.db +│ └── static_reason_workers.csv +└── output/ # Готовые сводки и отчеты (.xlsx, .md) +``` + +--- + +## 🛠 5. СПРАВОЧНИК КОМАНД И ЗАПУСКА + +### 1. Главный скрипт (`main.py`) + +```bash +python main.py [ФЛАГИ] +``` + +| Команда / Флаг | Описание | +| :--- | :--- | +| `python main.py` | Обычный полный дневной запуск | +| `python main.py --skip-export` | Расчет по последнему имеющемуся снапшоту из SQLite | +| `python main.py --snapshot 20260805-001` | Расчет строго по ID конкретного снапшота | +| `python main.py -d` | Режим расширенной отладки (DEBUG) | + +--- + +### 2. CLI-утилита инспекции БД (`scripts/db_cli.py`) +> Прототип Сервисного Слоя для будущего REST API. + +```bash +python scripts/db_cli.py <КОМАНДА> [ПАРАМЕТР] [ФЛАГИ] +``` + +| Команда | Описание | +| :--- | :--- | +| `python scripts/db_cli.py scud` | Просмотр логов СКУД за сегодня | +| `python scripts/db_cli.py scud --snapshot 20260805-001` | Просмотр логов конкретного снапшота | +| `python scripts/db_cli.py scud --export-xlsx debug_today` | Экспорт среза СКУД в Excel | +| `python scripts/db_cli.py snapshots` | Список всех снапшотов | +| `python scripts/db_cli.py anomalies` | История найденных аномалий | +| `python scripts/db_cli.py rules` | Правила Базы Знаний ИИ из SQLite | +| `python scripts/db_cli.py dump [output.xlsx]` | Полный дамп всех таблиц БД в Excel | + +--- + +📐 Сквозной цикл работы контроллинга SCUD Orion AI (v2) +🔄 Схема движения данных + + ┌────────────────────────────────────────┐ + │ Входные CLI-параметры main.py │ + │ (--skip-export / --snapshot / --debug) │ + └───────────────────┬────────────────────┘ + │ + ┌────────────────────────────┴───────────────────────────┐ + ▼ ▼ +┌───────────────────────────────┐ ┌───────────────────────────────────┐ +│ 0. MS SQL Орион Pro (СКУД) │ │ 0.5 Сетевая шара /mnt/scud_share │ +│ scud_export.py (Первая акт.) │ │ share_copier.py (Штат и Отсут.) │ +└──────────────┬────────────────┘ └─────────────────┬─────────────────┘ + │ │ + ▼ ▼ +┌───────────────────────────────┐ ┌───────────────────────────────────┐ +│ SQLite: scud_logs │ │ data/1c/Штат & Отсутствия │ +│ (Сохранение snapshot_id) │ │ (Файлы Excel за сегодня/вчера) │ +└──────────────┬────────────────┘ └─────────────────┬─────────────────┘ + │ │ + └───────────────────────┬───────────────────────┘ + │ + ▼ + ┌───────────────────────────────────┐ + │ 1. data_validator.py │ + │ (Проверка свежести и остановок) │ + └─────────────────┬─────────────────┘ + │ + ▼ + ┌───────────────────────────────────┐ + │ 2. data_loader.py │ + │ (Фоллбэки + Загрузка + Scud Dept) │ + └─────────────────┬─────────────────┘ + │ + ▼ + ┌───────────────────────────────────┐ + │ 3. ИИ-Арбитраж & SQLite KB │ + │ (Qwen 2.5 + ai_knowledge_base) │ + └─────────────────┬─────────────────┘ + │ + ▼ + ┌───────────────────────────────────┐ + │ 4. Иерархическое сведение │ + │ (1С -> CSV -> exceptions.json) │ + └─────────────────┬─────────────────┘ + │ + ┌───────────────────┴───────────────────┐ + ▼ ▼ + ┌──────────────────────────┐ ┌──────────────────────────┐ + │ Данные за ВЧЕРА │ │ Данные за СЕГОДНЯ │ + └────────────┬─────────────┘ └────────────┬─────────────┘ + │ │ + ▼ ▼ + ┌──────────────────────────┐ ┌──────────────────────────┐ + │ Detailed Excel (.xlsx) │ │ Summary Excel (.xlsx) │ + │ Детальный разбор вчера │ │ + Markdown сводка (.md) │ + └────────────┬─────────────┘ └────────────┬─────────────┘ + │ │ + └───────────────────┬───────────────────┘ + │ + ▼ + ┌───────────────────────────────────┐ + │ 5. feedback_loop.py │ + │ ( Human-in-the-Loop обучение ИИ ) │ + └─────────────────┬─────────────────┘ + │ + ▼ + ┌───────────────────────────────────┐ + │ SQLite: scud_orion_ai.db │ + │ (Фиксация логов, аномалий и KB) │ + └───────────────────────────────────┘ +🛠 Подробное описание каждого этапа +Этап Модуль Описание и выполняемые задачи +0. СКУД Экспорт services/scud_export.py Запрос к MS SQL «Орион Pro», вычисление утреннего входа и первой активности (first_activity), запись в SQLite с присвоением snapshot_id. +0.5. Копирование 1С services/share_copier.py Забор актуальных Excel-файлов Штатного расписания и Отсутствий из Linux-шары /mnt/scud_share. +1. Валидация services/data_validator.py Проверка наличия кадровых данных за вчерашний день. При критическом отсутствии файлов блокирует расчет. +2. Загрузка services/data_loader.py Загрузка датасетов, нормализация ФИО и проброс родных коротких аббревиатур отделов из СКУД (department_scud). +3. ИИ-Аудит services/ai_verifier.py Запрос к локальной LLM Ollama (Qwen 2.5) с подгрузкой контекста правил из SQLite-таблицы ai_knowledge_base. Исправление опечаток ФИО и отслеживание сбоев турникетов (>5%). +4. Сведение main.py Применение иерархии приоритетов: 1С:ЗУП → static_csv → exceptions.json (проверка по 1С и department_scud) → Неизвестные. +5. Отчетность & Обучение +excel_exporter.py + + +text_reporter.py + + +feedback_loop.py + +Формирование Excel-файлов, сборка текста Markdown с аббревиатурами и запись вердиктов кадровика в SQLite. + +## 🔮 6. БУДУЩИЕ ТОЧКИ РОСТА (ДОРОЖНАЯ КАРТА ВЕБ-РЕЛИЗА) + +1. **REST API на FastAPI:** Перенос функций из `db_cli.py` в эндпоинты (`/api/v1/snapshots`, `/api/v1/scud/logs`, `/api/v1/anomalies`). +2. **ИИ-Чат с поддержкой Function Calling:** Предоставление Ollama (Qwen 2.5) права прямого вызова эндпоинтов API из чата по запросу пользователя (*«Сформируй срез за 12:00 и экспортируй в Excel»*). +3. **Telegram-уведомления:** Автоматическая отправка алертов администраторам при выявлении массовых сбоев турникетов (>5%). +``` + +# File: ./test.txt +``` +122222222222222222222222222222 +``` + +# File: ./test_zup_conn.py +``` +import sys +import pyodbc +from config import ZUP_SQL_CONFIG + +def test_connection(): + print("=" * 60) + print("🧪 ПРОВЕРКА ПОДКЛЮЧЕНИЯ К MS SQL SERVER (1С:ЗУП)") + print("=" * 60) + print(f" • Сервер: {ZUP_SQL_CONFIG['server']}") + print(f" • База: {ZUP_SQL_CONFIG['database']}") + print(f" • Логин: {ZUP_SQL_CONFIG['user']}") + print(f" • Драйвер: {ZUP_SQL_CONFIG['driver']}") + print("-" * 60) + + conn_str = ( + f"DRIVER={ZUP_SQL_CONFIG['driver']};" + f"SERVER={ZUP_SQL_CONFIG['server']};" + f"DATABASE={ZUP_SQL_CONFIG['database']};" + f"UID={ZUP_SQL_CONFIG['user']};" + f"PWD={ZUP_SQL_CONFIG['password']};" + f"TrustServerCertificate={ZUP_SQL_CONFIG['trust_server_certificate']};" + f"Encrypt={ZUP_SQL_CONFIG['encrypt']};" + ) + + try: + print("⏳ Установка соединения...") + with pyodbc.connect(conn_str, timeout=10) as conn: + cursor = conn.cursor() + + # 1. Проверка версии SQL Сервера + cursor.execute("SELECT @@VERSION;") + db_version = cursor.fetchone()[0] + print("✅ Подключение успешно установлено!\n") + print(f"📋 Версия MS SQL Server:\n{db_version.splitlines()[0]}\n") + + # 2. Проверка доступа к таблице физических лиц _Reference299 + cursor.execute("SELECT COUNT(*) FROM dbo._Reference299 WITH (NOLOCK);") + count_phys = cursor.fetchone()[0] + print(f"📊 Записей в таблице физлиц (_Reference299): {count_phys} шт.") + + # 3. Проверка доступа к регистру кадровых состояний _InfoRg16921 + cursor.execute("SELECT COUNT(*) FROM dbo._InfoRg16921 WITH (NOLOCK);") + count_states = cursor.fetchone()[0] + print(f"📊 Записей в регистре состояний (_InfoRg16921): {count_states} шт.") + + print("\n🎉 Все проверки успешно пройдены!") + + except pyodbc.Error as ex: + sqlstate = ex.args[0] if ex.args else "UNKNOWN" + print("\n❌ ОШИБКА ПОДКЛЮЧЕНИЯ!") + print(f"Код ошибки: {sqlstate}") + print(f"Детали:\n{ex}") + sys.exit(1) + +if __name__ == "__main__": + test_connection() +``` + +# File: ./Анализ_аномалии_СКУД_и_техзадание.md +``` +# ТЕХНИЧЕСКИЙ РАЗБОР АНОМАЛИИ СКУД И ТЗ НА ФИКС +> **Проблема скрытого маскирования сбоев турникетов и правила их устранения в проекте `scud_orion_ai`** + +--- + +### 📋 Метаданные инцидента + +| Параметр | Значение | +| :--- | :--- | +| **Дата инцидента:** | 04 августа 2026 г. | +| **Затронуто сотрудников:** | ~119 человек (из 276) | +| **Система:** | СКУД «Орион Pro» (MSSQL) + Python ETL + SQLite | +| **Статус решения:** | Требуется фикс валидации данных (В процессе) | + +--- + +## 1. Суть проблемы («Грабли») + +При утреннем сбое турникетов или контроллеров СКУД (08:00–10:00) события первичного прохода в базу не попадают. В результате у сотрудников в итоговом отчете формируется значение `Начало_дня = «Нет входа»`. + +Однако в течение дня сотрудники перемещаются внутри здания, выходят на обед или прикладывают карты к внутренним считывателям, генерируя сырые транзакции в MSSQL (таблица `pLogData`). + +> 🚨 **Главная баг-логика текущего алгоритма:** +> Скрипт перебирает все события за день и, видя любую дневную/вечернюю активность, **автоматически присваивает сотруднику флаг `is_present = 1` (`Статус = «Присутствовал»`)**. +> +> В итоге система «тихо сглаживает» аномалию: вместо того чтобы поднять тревогу о массовом сбое турникетов (70+ человек без утреннего входа), скрипт отправил 30+ человек в «Итого на работе», искусственно уменьшив список проблемных записей до 7 «неизвестных». + +--- + +## 2. Разбор механики расхождения отчетов (17:00 vs Конец дня) + +Вопреки первоначальной гипотезе, вечерние выходы (17:42 и т.д.) у данных сотрудников не записывались в колонку `time_out` (там оставалось «Нет выхода»). Расхождение выгрузок было вызвано двумя факторами: + +1. **В 17:00** в базе SQL 1С еще отсутствовал полный пакет кадровых документов за день, либо запуск производился без сверки с реестром исключений. +2. **При повторном прогоне** (вечером/ночью) скрипт подтянул полную базу 1С, а для оставшихся «безвходных» отработал скрытый флаг `is_present = 1`, маскируя технический сбой СКУД. + +--- + +## 3. Техническое задание на исправление (Правила фикса) + +* **Строгая валидация флага присутствия (Data Sanitization):** + Если `time_in == 'Нет входа'` и сотрудник отсутствует в `static_reason_workers.csv` (статичные удалёнщики/внештатники), код **ЗАПРЕЩАЕТ** автоматически проставлять `is_present = 1`, даже если выгрузка/агрегатор передает статус «Присутствовал». + +* **Детектор аномалий и «Красный флаг» (Anomaly Detection):** + Если у человека `time_in == 'Нет входа'`, но при этом есть дневные проходы в `pLogData`, система помечает его статусом: + `🚨 АНОМАЛИЯ СКУД: Присутствие без утреннего входа (Зафиксирована активность в течение дня)`. + +* **Группировка массовых сбоев:** + Если процент людей с подобной аномалией превышает **5% от штата**, ИИ/модуль аналитики генерирует системный алерт: + `«Внимание! Зафиксирован массовый сбой регистраторов входа СКУД»`. + +* **Параметризация MSSQL СКУД по времени (`@CutoffDateTime`):** + Добавить возможность делать срезы базы СКУД на конкретный час (например, 17:00), чтобы видеть честное состояние контроллеров и транзакций на выбранный момент времени: + ```sql + DECLARE @CutoffDateTime DATETIME = '2026-08-04 17:00:00'; + SELECT * FROM pLogData WHERE TimeVal <= @CutoffDateTime; + + Хранение истории выгрузок (snapshot_time): +Запретить перезапись (REPLACE) локальной БД SQLite в рамках одного дня. Каждая выгрузка за день должна сохраняться с меткой времени snapshot_time, чтобы сохранять историю срезов (12:00, 17:00, 19:00). + +Документ зафиксирован в рамках проекта scud_orion_ai_v2. +``` + +# File: ./scripts/__init__.py +``` + +``` + +# File: ./scripts/add_rule_ai.py +``` +import sys +import os + +# Добавляем корень проекта в путь поиска модулей Python +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +from core.database import get_connection + +rule_text = ( + "Сотрудники, присутствующие в 1С:ЗУП, но отсутствующие в СКУД Орион Pro, " + "являются аномалией синхронизации профилей. ИИ должен запрашивать у СБ статус выдачи пропуска." +) + +with get_connection() as conn: + cursor = conn.cursor() + cursor.execute("INSERT OR IGNORE INTO ai_knowledge_base (rule_text) VALUES (?)", (rule_text,)) + conn.commit() + +print("✓ Правило успешно внесено в SQLite БД!") +``` + +# File: ./scripts/db_cli.py +``` +import os +import sys +import argparse +import sqlite3 +import pandas as pd +from datetime import datetime + +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +from config import DATA_DIR, DATE_TODAY, OUTPUT_DIR +from core.database import ( + get_connection, + get_available_snapshots, + get_all_rules_from_db, + load_scud_from_db_by_snapshot, + get_latest_snapshot_time +) + +DB_PATH = os.path.join(DATA_DIR, "scud_orion_ai.db") + + +def print_stats(): + """Выводит общую статистику по записям в таблицах БД.""" + print("\n" + "=" * 60) + print("📊 СТАТИСТИКА БАЗЫ ДАННЫХ SQLITE (scud_orion_ai.db):") + print("=" * 60) + with get_connection() as conn: + cursor = conn.cursor() + tables = ['scud_logs', 'zup_staff', 'zup_absences', 'anomalies_history', 'ai_knowledge_base'] + for t in tables: + cursor.execute(f"SELECT COUNT(*) FROM {t}") + cnt = cursor.fetchone()[0] + print(f" • Таблица [{t:<18}]: {cnt:>6} записей") + print("=" * 60 + "\n") + + +def print_snapshots_list(date_str=None): + """Выводит реестр снапшотов с отображением даты и точного времени среза.""" + rows = get_available_snapshots(date_str) + + print("\n" + "=" * 105) + print(f"📸 РЕЕСТР СОХРАНЕННЫХ СНАПШОТОВ (СВЕРХУ СВЕЖИЕ) {'ЗА ЛОГИ ' + date_str if date_str else ''}:") + print("=" * 105) + + header = f"{'ID снапшота':<16} | {'Дата снапшота (создания)':<24} | {'Дата и время среза':<20} | {'Записей':<8}" + print(header) + print("-" * 105) + + if not rows: + print("Снапшотов пока нет.") + print("=" * 105 + "\n") + return + + def snapshot_sort_key(row): + snap_id = row[0] or "" + snap_time = row[2] or "" + + seq_num = 0 + if "-" in snap_id: + parts = snap_id.replace("Y", "").split("-") + if len(parts) > 1 and parts[1].isdigit(): + seq_num = int(parts[1]) + + return (snap_time, seq_num) + + sorted_rows = sorted(rows, key=snapshot_sort_key, reverse=True) + + for r in sorted_rows: + snap_id = r[0] if r[0] else '----------' + log_date = r[1] if r[1] else '—' + snap_time = r[2] if r[2] else '—' + count = r[3] + + # Извлекаем время (ЧЧ:ММ:СС) из snapshot_time, если оно есть + time_part = "—" + if snap_time and " " in snap_time: + time_part = snap_time.split(" ")[1] + + slice_datetime_str = f"{log_date} {time_part}" if time_part != "—" else log_date + + if not snap_id.startswith("Y"): + formatted_snap_id = f" {snap_id}" + else: + formatted_snap_id = snap_id + + print(f"{formatted_snap_id:<16} | {snap_time:<24} | {slice_datetime_str:<20} | {count:<8}") + + print("=" * 105 + "\n") + + +def delete_snapshot_by_id(snapshot_id: str): + """Удаляет конкретный снапшот из таблицы scud_logs по его ID.""" + with get_connection() as conn: + cursor = conn.cursor() + cursor.execute("DELETE FROM scud_logs WHERE snapshot_id = ?", (snapshot_id,)) + deleted_count = cursor.rowcount + conn.commit() + print(f"\n[✓] Успешно удален снапшот [{snapshot_id}]. Удалено строк: {deleted_count}\n") + return deleted_count + + +def delete_snapshots_by_date(date_str: str): + """Удаляет все снапшоты за указанную дату (например, '04.08.2026').""" + with get_connection() as conn: + cursor = conn.cursor() + cursor.execute("DELETE FROM scud_logs WHERE log_date = ? OR snapshot_id LIKE ?", (date_str, f"%{date_str.replace('.', '')}%")) + deleted_count = cursor.rowcount + conn.commit() + print(f"\n[✓] Успешно удалены все снапшоты за дату [{date_str}]. Удалено строк: {deleted_count}\n") + return deleted_count + + +def inspect_scud(snapshot_id=None, date_str=None, export_xlsx=None): + """Инспектирует логи СКУД за выбранный снапшот или дату и опционально сохраняет XLSX.""" + target_date = date_str if date_str else DATE_TODAY + + print("\n" + "=" * 90) + if snapshot_id: + print(f"🔍 ИНСПЕКЦИЯ СКУД ПО СНАПШОТУ [{snapshot_id}] (Дата: {target_date}):") + else: + print(f"🔍 ИНСПЕКЦИЯ СКУД ЗА ТЕКУЩУЮ ДАТУ [{target_date}] (ПОСЛЕДНИЙ СРЕЗ):") + print("=" * 90) + + df = load_scud_from_db_by_snapshot(target_date, snapshot_param=snapshot_id) + + if df.empty: + print(f"Записи СКУД не найдены.") + print("=" * 90 + "\n") + return + + total = len(df) + present_cnt = len(df[df['Пришел'] == True]) if 'Пришел' in df.columns else 0 + absent_cnt = total - present_cnt + + print(f"Всего записей: {total} | Пришли: {present_cnt} | Не пришли: {absent_cnt}") + print("-" * 90) + + cols_to_show = ['fio', 'department', 'position', 'time_in', 'first_activity', 'time_out', 'is_present', 'anomaly_flag', 'snapshot_id'] + existing_cols = [c for c in cols_to_show if c in df.columns] + + print(df[existing_cols].head(30).to_string(index=False)) + if len(df) > 30: + print(f"\n... и ещё {len(df) - 30} строк.") + + if export_xlsx: + out_path = export_xlsx if export_xlsx.endswith('.xlsx') else f"{export_xlsx}.xlsx" + if not os.path.isabs(out_path): + out_path = os.path.join(OUTPUT_DIR, out_path) + + df.to_excel(out_path, index=False) + print("\n" + "*" * 90) + print(f"[✓] УСПЕШНЫЙ ЭКСПОРТ ДЕБАГ-ФАЙЛА В EXCEL: {out_path}") + print("*" * 90) + + print("=" * 90 + "\n") + + +def print_anomalies(): + """Выводит список аномалий СКУД из БД.""" + print("\n" + "=" * 80) + print("🚨 ИСТОРИЯ НАЙДЕННЫХ АНОМАЛИЙ СКУД ⟷ 1С:") + print("=" * 80) + with get_connection() as conn: + df = pd.read_sql_query("SELECT anomaly_date, fio, anomaly_type, details FROM anomalies_history ORDER BY id DESC LIMIT 50", conn) + if df.empty: + print("Аномалии не найдены.") + else: + print(df.to_string(index=False)) + print("=" * 80 + "\n") + + +def print_rules(): + """Выводит правила базы знаний ИИ.""" + rules = get_all_rules_from_db() + print("\n" + "=" * 80) + print("🧠 ПРАВИЛА БАЗЫ ЗНАНИЙ ИИ:") + print("=" * 80) + if not rules: + print("База знаний пуста.") + else: + for idx, r in enumerate(rules, 1): + print(f" {idx}. {r}") + print("=" * 80 + "\n") + + +def dump_all_to_excel(out_filename="db_dump_full.xlsx"): + """Дампит всю базу SQLite во многостраничный Excel.""" + out_path = os.path.join(OUTPUT_DIR, out_filename) + print(f"\n[🔄] Создание полного дампа БД в файл: {out_path} ...") + with get_connection() as conn, pd.ExcelWriter(out_path, engine='openpyxl') as writer: + for table in ['scud_logs', 'zup_staff', 'zup_absences', 'anomalies_history', 'ai_knowledge_base']: + df = pd.read_sql_query(f"SELECT * FROM {table}", conn) + df.to_excel(writer, sheet_name=table[:31], index=False) + print(f"[✓] Дамп успешно сохранен: {out_path}\n") + +def print_system_prompts(): + """Выводит все системные промпты из базы данных.""" + print("\n" + "=" * 80) + print("📝 СИСТЕМНЫЕ ПРОМПТЫ (system_prompts):") + print("=" * 80) + with get_connection() as conn: + cursor = conn.cursor() + cursor.execute("SELECT id, name, is_active, updated_at, prompt_text FROM system_prompts ORDER BY id DESC") + rows = cursor.fetchall() + if not rows: + print("Таблица system_prompts пуста.") + else: + for r in rows: + print(f"ID: {r[0]} | Name: {r[1]} | Active: {r[2]} | Updated: {r[3]}") + print("-" * 80) + print(f"{r[4]}\n") + print("=" * 80 + "\n") + +def print_session_states(): + """Выводит текущие активные сессии и превью (session_states).""" + print("\n" + "=" * 80) + print("🔄 АКТИВНЫЕ СЕССИИ И ПРЕВЬЮ (session_states):") + print("=" * 80) + with get_connection() as conn: + cursor = conn.cursor() + cursor.execute("SELECT session_id, state_type, updated_at, pending_data FROM session_states") + rows = cursor.fetchall() + if not rows: + print("Таблица session_states пуста (нет активных превью).") + else: + for r in rows: + print(f"Session: {r[0]} | Type: {r[1]} | Updated: {r[2]}") + print("-" * 80) + print(f"Pending Data:\n{r[3]}\n") + print("=" * 80 + "\n") + + +def main(): + help_text = """ +CLI-утилита инспекции и управления SQLite базой данных СКУД (scud_orion_ai.db) + +ДОСТУПНЫЕ КОМАНДЫ: + stats -- Общая статистика строк по всем таблицам БД + snapshots [ДД.ММ.ГГГГ] -- Посмотреть список всех снапшотов (опционально за дату) + scud [--snapshot ID] [--export-xlsx NAME] -- Инспекция логов СКУД и опциональный экспорт в Excel + anomalies -- Посмотреть все найденные аномалии СКУД ⟷ 1С + rules -- Посмотреть правила Базы Знаний ИИ из SQLite + prompts -- Посмотреть системные промпты (system_prompts) + sessions -- Посмотреть активные сессии и превью (session_states) + dump [output.xlsx] -- Полный дамп всех таблиц БД в многостраничный Excel + snapshot del [ID] или [--day ДД.ММ.ГГГГ] -- Удаление снапшотов по ID или за весь день + +ПРИМЕРЫ ЗАПУСКА: + python scripts/db_cli.py stats + python scripts/db_cli.py prompts + python scripts/db_cli.py sessions + python scripts/db_cli.py snapshots 04.08.2026 + python scripts/db_cli.py scud --snapshot Y20260805-007 --export-xlsx вчера_1 + python scripts/db_cli.py snapshot del Y20260805-007 + python scripts/db_cli.py snapshot del --day 04.08.2026 +""" + parser = argparse.ArgumentParser( + description=help_text, + formatter_class=argparse.RawDescriptionHelpFormatter, + add_help=True + ) + parser.add_argument('command', nargs='?', default=None, choices=['stats', 'snapshots', 'scud', 'anomalies', 'rules', 'prompts', 'sessions', 'dump', 'snapshot'], help="Основная команда") + parser.add_argument('action', nargs='?', default=None, help="Дополнительное действие (например, 'del')") + parser.add_argument('param', nargs='?', default=None, help="Параметр (дата, ID снапшота или имя файла)") + parser.add_argument('--snapshot', type=str, default=None, help="ID конкретного снапшота для инспекции") + parser.add_argument('--export-xlsx', type=str, default=None, help="Экспорт среза СКУД в Excel-файл") + parser.add_argument('--day', type=str, default=None, help="Удалить снапшоты за конкретный день (ДД.ММ.ГГГГ)") + + # Если аргументы вообще не переданы, выводим статистику по умолчанию (или справку) + if len(sys.argv) == 1: + print_stats() + return + + args = parser.parse_args() + + # Валидация команд + if args.command == 'stats': + print_stats() + elif args.command == 'snapshots': + print_snapshots_list(date_str=args.param) + elif args.command == 'scud': + inspect_scud(snapshot_id=args.snapshot, date_str=args.param, export_xlsx=args.export_xlsx) + elif args.command == 'anomalies': + print_anomalies() + elif args.command == 'rules': + print_rules() + elif args.command == 'prompts': + print_system_prompts() + elif args.command == 'sessions': + print_session_states() + elif args.command == 'dump': + filename = args.param if args.param else "db_dump_full.xlsx" + dump_all_to_excel(filename) + elif args.command == 'snapshot': + if args.action == 'del': + if args.day: + delete_snapshots_by_date(args.day) + elif args.param: + delete_snapshot_by_id(args.param) + else: + print("\n[❌] Ошибка: Не указан ID снапшота или параметр --day для удаления.") + print("Пример: python scripts/db_cli.py snapshot del Y20260805-007\n") + else: + print(f"\n[❌] Ошибка: Неизвестное действие '{args.action}' для команды snapshot.") + print("Используйте: python scripts/db_cli.py snapshot del [ID или --day 'ДД.ММ.ГГГГ']\n") + else: + print(f"\n[❌] Ошибка: Неизвестная команда.") + parser.print_help() + +if __name__ == "__main__": + main() +``` + +# File: ./scripts/fix_snapshots.py +``` +import sqlite3 +import os +from datetime import datetime + +DB_PATH = 'data/scud_orion_ai.db' + + +def parse_to_date(date_str): + """Надежное преобразование даты логов и времени снапшота в объект date.""" + if not date_str: + return None + date_str = str(date_str).split(" ")[0].strip() + if "." in date_str: + try: + return datetime.strptime(date_str, "%d.%m.%Y").date() + except ValueError: + return None + elif "-" in date_str: + try: + return datetime.strptime(date_str, "%Y-%m-%d").date() + except ValueError: + return None + return None + + +def fix_snapshots(): + """ + Переиндексирует снапшоты в таблице scud_logs. + Нумерация веников (001, 002, 003...) сквозная внутри каждого ДНЯ СОЗДАНИЯ. + Префикс Y выставляется только если дата логов < даты создания. + """ + if not os.path.exists(DB_PATH): + print(f"База данных {DB_PATH} не найдена.") + return + + conn = sqlite3.connect(DB_PATH) + cursor = conn.cursor() + + # Группируем по уникальным выгрузкам + cursor.execute(""" + SELECT snapshot_time, log_date + FROM scud_logs + WHERE snapshot_time IS NOT NULL + GROUP BY snapshot_time, log_date + ORDER BY snapshot_time ASC, log_date ASC + """) + rows = cursor.fetchall() + + if not rows: + print("Снапшоты не найдены.") + conn.close() + return + + print("=== ИСПРАВЛЕНИЕ СКВОЗНОЙ НУМЕРАЦИИ ВНУТРИ ДНЯ СОЗДАНИЯ ===") + + # Счетчик текущего порядкового номера strictly за ДЕНЬ СОЗДАНИЯ (YYYYMMDD) + seq_counters = {} + + for snap_time_raw, log_date_raw in rows: + d_snap = parse_to_date(snap_time_raw) + d_log = parse_to_date(log_date_raw) + + if not d_snap or not d_log: + continue + + date_prefix = d_snap.strftime("%Y%m%d") + + # Если дата логов строго раньше даты создания снапшота — ставим Y + is_yesterday = (d_log < d_snap) + prefix = "Y" if is_yesterday else "" + + # Приращиваем сквозной счетчик за ЭТОТ ДЕНЬ СОЗДАНИЯ + seq_counters[date_prefix] = seq_counters.get(date_prefix, 0) + 1 + seq_num = seq_counters[date_prefix] + + new_id = f"{prefix}{date_prefix}-{seq_num:03d}" + + cursor.execute( + "UPDATE scud_logs SET snapshot_id = ? WHERE snapshot_time = ? AND log_date = ?", + (new_id, snap_time_raw, log_date_raw) + ) + print(f" • Срез создания: {snap_time_raw} | Логи за: {log_date_raw} ===> Назначен ID: [{new_id}]") + + conn.commit() + conn.close() + print("\n[✓] Переиндексация внутри дней создания успешно выполнена!") + + +if __name__ == "__main__": + fix_snapshots() +``` + +# File: ./services/__init__.py +``` + +``` + +# File: ./services/ai_verifier.py +``` +import json +import re +import requests +import pandas as pd +from config import OLLAMA_URL, OLLAMA_MODEL +from core.database import get_all_rules_from_db +from core.database import get_department_synonyms_dict, add_department_synonym_to_db + +def resolve_department_exception_ai(dept_1c, dept_scud, exception_departments): + """ + Универсальный сопоставитель отделов. + Проверяет 1С, СКУД, локальную базу синонимов SQLite и задействует ИИ для сложных случайных аббревиатур. + """ + if not exception_departments: + return False + + d_1c = str(dept_1c).strip().lower() if dept_1c else "" + d_scud = str(dept_scud).strip().lower() if dept_scud else "" + exc_list = [d.strip().lower() for d in exception_departments] + + # 1. Прямая проверка: если точное имя или подстрока уже совпали в 1С или СКУД + for exc in exc_list: + if exc and (exc in d_1c or exc in d_scud or d_1c in exc or d_scud in exc): + return True + + # 2. Проверка по сохраненной Базе Знаний синонимов из SQLite + synonyms = get_department_synonyms_dict() + for exc in exc_list: + # Если в БД зафиксировано: 'овк' -> 'отдел внутреннего контроля' + full_from_db = synonyms.get(exc, "") + if full_from_db and (full_from_db in d_1c or full_from_db in d_scud): + return True + + # 3. Умный ИИ-арбитраж (если отдел спорный и еще не сохранен в БД) + if d_1c or d_scud: + dept_to_check = d_1c if d_1c else d_scud + prompt = f""" +Ты — кадровый аналитик. +Проверь, является ли отдел сотрудника "{dept_to_check}" тем же самым подразделением, что и один из отделов-исключений: {exception_departments}? + +Примеры: +- "Отдел внутреннего контроля" — это "ОВК" (Да) +- "Отдел технического обеспечения" — это "ОТО" (Да) + +Ответь СТРОГО в формате JSON: +{{ + "is_match": true/false, + "matched_exception": "Название из списка исключений", + "explanation": "краткое объяснение" +}} +""" + try: + raw_res = ask_ollama(prompt, system_prompt="Отвечай только валидным JSON.") + match = re.search(r'\{.*\}', raw_res, re.DOTALL) + if match: + data = json.loads(match.group(0)) + if data.get("is_match"): + matched_exc = data.get("matched_exception", "").lower() + # Запоминаем открытую ИИ связь в SQLite навсегда! + add_department_synonym_to_db(matched_exc, dept_to_check) + return True + except Exception as e: + print(f"[⚠️] Ошибка ИИ-арбитража отделов: {e}") + + return False + +def ask_ollama(prompt, system_prompt=None): + """ + Универсальная функция отправки запросов к локальной модели Ollama (Qwen 2.5). + """ + payload = { + "model": OLLAMA_MODEL, + "prompt": f"{system_prompt}\n\n{prompt}" if system_prompt else prompt, + "stream": False + } + + try: + response = requests.post(OLLAMA_URL, json=payload, timeout=120) + if response.status_code == 200: + data = response.json() + if "response" in data: + return data["response"].strip() + elif "message" in data and "content" in data["message"]: + return data["message"]["content"].strip() + else: + return f"⚠️ Неизвестная структура ответа Ollama: {data}" + else: + return f"⚠️ Ошибка Ollama (Код {response.status_code}): {response.text}" + except requests.exceptions.ConnectionError: + return "⚠️ Не удалось подключиться к Ollama. Проверьте, запущен ли сервис (ollama run qwen2.5:14b)." + except Exception as e: + return f"⚠️ Ошибка при обращении к Ollama: {e}" + + +def get_system_rules_context(): + """ + Загружает динамические системные правила компании напрямую из Базы Данных SQLite. + """ + rules = get_all_rules_from_db() + if not rules: + return "" + rules_text = "\n".join([f"- {r}" for r in rules]) + return f"\nОБЯЗАТЕЛЬНЫЕ ГЛОБАЛЬНЫЕ ПРАВИЛА И ПРИОРИТЕТЫ КОМПАНИИ (ИЗ SQLITE БД):\n{rules_text}\n" + + +def analyze_scud_mass_failure_ai(df_scud): + """ + Оценивает процент аномалий 'ANOMALY_NO_IN_HAS_ACTIVITY' в выгрузке. + Если процент аномалий превышает 5% от смены или 10 человек, вызывает ИИ для генерации критического алерта. + """ + if df_scud is None or df_scud.empty: + return None + + total_records = len(df_scud) + anomaly_rows = df_scud[df_scud.get('anomaly_flag', 'NONE') == 'ANOMALY_NO_IN_HAS_ACTIVITY'] + anomaly_count = len(anomaly_rows) + + if total_records == 0: + return None + + anomaly_percent = round((anomaly_count / total_records) * 100, 1) + + if anomaly_percent > 5.0 or anomaly_count >= 10: + rules_context = get_system_rules_context() + prompt = f""" +{rules_context} +ВНИМАНИЕ! Проведён анализ смены СКУД: +- Всего записей за смену: {total_records} +- Выявлено сотрудников без утреннего входа, но с зафиксированной дневной активностью: {anomaly_count} ({anomaly_percent}% от смены) + +Сформируй понятное предупреждение для Администратора СКУД и Руководителя. +Объясни, что это критический массовый сбой турникетов/контроллеров входа на КПП, и порекомендуй действия. +""" + alert_text = ask_ollama(prompt, system_prompt="Ты — ИИ-аналитик контроллинга СКУД. Отвечай кратко и строго по делу.") + return { + "is_mass_failure": True, + "anomaly_count": anomaly_count, + "anomaly_percent": anomaly_percent, + "alert_text": alert_text + } + + return { + "is_mass_failure": False, + "anomaly_count": anomaly_count, + "anomaly_percent": anomaly_percent, + "alert_text": "Массовых сбоев оборудования не зафиксировано." + } + + +def ai_verify_scud_against_staff(unrecognized_scud_fios, staff_fios): + if not unrecognized_scud_fios or not staff_fios: + return {} + + # 🛡 Исключаем точные совпадения (чтобы ИИ не совершал ложных замен) + staff_fios_set = set(staff_fios) + real_unrecognized = [f for f in unrecognized_scud_fios if f not in staff_fios_set] + + if not real_unrecognized: + return {} + + rules_context = get_system_rules_context() + + prompt = f""" +Ты — кадровый аудитор безопасности СКУД. +{rules_context} +В СКУД записаны неопознанные ФИО: {json.dumps(unrecognized_scud_fios, ensure_ascii=False)} +В официальном Штатном расписании 1С записаны ЭТАЛОНЫ: {json.dumps(staff_fios, ensure_ascii=False)} + +СТРОГИЕ ПРАВИЛА: +1. Запись из Штат 1С — это 100% ПРАВИЛЬНЫЙ эталон. +2. В СКУД допущена опечатка. +3. Любое присутствие сотрудника по СКУД при наличии в 1С документа отсутствия (кроме командировок) является гарантированной аномалией. +4. В поле "warning" опиши обнаруженную опечатку. +5. Запрещено выдумывать опечатки и объединять разных людей/однофамильцев! + +ОТВЕЧАЙ ТОЛЬКО ИСКЛЮЧИТЕЛЬНО В ФОРМАТЕ JSON! + +Формат ответа: +{{ + "verified_matches": [ + {{ + "scud_fio": "ФИО из СКУД", + "staff_fio": "эталон ФИО из Штат 1С", + "warning": "Описание опечатки в СКУД или 'Точное совпадение (без опечаток)'" + }} + ] +}} +""" + raw_response = ask_ollama( + prompt, + system_prompt="Ты — JSON API. Выдавай ТОЛЬКО валидный JSON без markdown-разметки." + ) + + mapping = {} + try: + match = re.search(r'\{.*\}', raw_response, re.DOTALL) + if match: + json_str = match.group(0) + json_str = re.sub(r'\}\s*[^}\]]*$', '}', json_str) + data = json.loads(json_str) + for item in data.get("verified_matches", []): + scud_f = item.get("scud_fio") + staff_f = item.get("staff_fio") + warn = item.get("warning", "Точное совпадение (без опечаток)") + if scud_f and staff_f: + mapping[scud_f] = {"staff_fio": staff_f, "warning": warn} + except Exception as e: + print(f"[!] Ошибка разбора JSON от ИИ при сверке опечаток: {e}") + + return mapping + + +def ai_verify_department_exceptions(unexplained_df, exception_departments): + """ + Локальный ИИ проверяет, не являются ли неотмеченные отделы синонимами отделов-исключений. + """ + if unexplained_df.empty or not exception_departments: + return [] + + dept_list = unexplained_df['Подразделение'].dropna().unique().tolist() + rules_context = get_system_rules_context() + + prompt = f""" +{rules_context} +Ты — кадровый аудитор. +Список отделов-исключений компании: {json.dumps(exception_departments, ensure_ascii=False)} +Список отделов сотрудников, попавших в неизвестные: {json.dumps(dept_list, ensure_ascii=False)} + +Определи, какие из отделов сотрудников являются ПОЛНЫМИ НАЗВАНИЯМИ или СИНУНИМАМИ отделов-исключений (например: 'Отдел внутреннего контроля' — это 'ОВК'). + +Выдай ответ строго в формате JSON: +{{ + "matched_departments": ["Название отдела 1", "Название отдела 2"] +}} +""" + raw_response = ask_ollama(prompt, system_prompt="Выдавай только валидный JSON.") + + try: + match = re.search(r'\{.*\}', raw_response, re.DOTALL) + if match: + data = json.loads(match.group(0)) + return data.get("matched_departments", []) + except Exception as e: + print(f"[⚠️] Ошибка ИИ-арбитража отделов: {e}") + + return [] +``` + +# File: ./services/data_loader.py +``` +import os +import pandas as pd +import warnings +from config import ( + normalize_fio, clean_scud_fio_light, load_exceptions, + DATE_TODAY, DATE_YESTERDAY, find_dated_file, ZUP_1C_DIR, SCUD_DIR +) +# Импортируем прямую SQL-выгрузку отсутствий из 1С +from services.zup_extractor import fetch_zup_absences_from_sql +from core.database import load_scud_from_db_by_snapshot + +warnings.filterwarnings('ignore', category=UserWarning, module='pandas') + + +def is_excluded(fio, dept, pos, exceptions): + """Проверяет, входит ли сотрудник или должность в список исключений.""" + fio_clean = normalize_fio(fio) + dept_str = str(dept).strip().upper() if pd.notna(dept) else "" + pos_str = str(pos).strip().lower() if pd.notna(pos) else "" + + if fio_clean in exceptions["fio"] or dept_str in exceptions["departments"] or pos_str in exceptions["positions"]: + return True + if any(keyword in pos_str for keyword in exceptions["position_keywords"]): + return True + return False + + +def load_staff_data(date_str): + """ + Загружает файл Штатного расписания 1С за конкретную дату из папки 1c. + """ + filepath = find_dated_file("Штат", date_str) + if not filepath: + fallback_path = os.path.join(ZUP_1C_DIR, "штат.xlsx") + if os.path.exists(fallback_path): + filepath = fallback_path + else: + return None + + try: + df_raw = pd.read_excel(filepath, skiprows=8) + + # Индексы столбцов в файле 1С: 1 — ФИО, 5 — Подразделение, 12 — Должность + df_staff = df_raw.iloc[:, [1, 5, 12]].copy() + df_staff.columns = ['ФИО', 'Подразделение', 'Должность'] + + df_staff = df_staff.dropna(subset=['ФИО']).reset_index(drop=True) + df_staff = df_staff[~df_staff['ФИО'].astype(str).str.contains('Всего|Организация|Сотрудник|ФИО', case=False, na=False)] + df_staff['fio_clean'] = df_staff['ФИО'].apply(normalize_fio) + return df_staff + except Exception as e: + print(f"[❌] Ошибка загрузки штата из {filepath}: {e}") + return None + + +def load_absent_data(date_str): + """ + Загружает документально подтвержденные отсутствия сотрудников + НАПРЯМУЮ из базы MS SQL 1С:ЗУП за указанную дату. + """ + try: + df_absent = fetch_zup_absences_from_sql(date_str) + + if df_absent is not None and not df_absent.empty: + df_absent = df_absent.dropna(subset=['ФИО', 'Вид_отсутствия']) + df_absent = df_absent[~df_absent['ФИО'].astype(str).str.contains('АО "ЛЕНМОРНИИПРОЕКТ"|Сотрудник', case=False, na=False)] + df_absent['fio_clean'] = df_absent['ФИО'].apply(normalize_fio) + return df_absent[['fio_clean', 'Вид_отсутствия']].dropna(subset=['fio_clean']) + else: + return None + except Exception as e: + print(f"[⚠️] Ошибка SQL-выгрузки отсутствий за {date_str}: {e}") + return None + + +def process_scud_anomalies(df_scud, exceptions=None): + """ + Вычисляет 'Первую активность' и маркирует аномалии СКУД. + Если 'Начало дня' == 'Нет входа', но есть любая физическая активность — + записывает первейшее время в 'Первая_активность', сбрасывает 'Пришел' в False и выставляет флаг аномалии. + """ + if exceptions is None: + exceptions = load_exceptions() + + start_col = 'Начало_дня' if 'Начало_дня' in df_scud.columns else ('Начало дня' if 'Начало дня' in df_scud.columns else None) + end_col = 'Конец_дня' if 'Конец_дня' in df_scud.columns else ('Конец дня' if 'Конец дня' in df_scud.columns else None) + status_col = 'Статус' if 'Статус' in df_scud.columns else None + + first_activities = [] + anomaly_flags = [] + is_present_flags = [] + + for _, row in df_scud.iterrows(): + fio = str(row.get('Сотрудник', row.get('fio_raw', ''))).strip() + fio_clean = normalize_fio(fio) + dept = str(row.get('Подразделение', '')).strip() + pos = str(row.get('Должность', '')).strip() + + val_start = str(row.get(start_col, '')).strip() if start_col else '' + val_end = str(row.get(end_col, '')).strip() if end_col else '' + val_status = str(row.get(status_col, '')).strip().lower() if status_col else '' + + # Извлечение первого зафиксированного события из сырых логов (pLogData), если передавалось + raw_first_event = row.get('raw_first_event', None) + if pd.isna(raw_first_event) or str(raw_first_event).strip() in ['', 'None', 'nan', '00:00:00']: + raw_first_event = None + + has_no_in = (val_start in ['нет входа', 'none', 'nan', '', '00:00:00', '00:00']) + has_no_out = (val_end in ['нет выхода', 'none', 'nan', '', '00:00:00', '00:00']) + + first_act = '—' + anom_flag = 'NONE' + + # Стандартная проверка присутствия + is_present = not ('отсутствовал' in val_status or has_no_in) + + # ЛОГИКА ВЫЧИСЛЕНИЯ ПЕРВОЙ АКТИВНОСТИ И ДЕТЕКТИРОВАНИЯ АНОМАЛИИ + if has_no_in: + # Если нет входа, но есть проход внутри или зафиксирован выход + if raw_first_event is not None or not has_no_out: + first_act = str(raw_first_event) if raw_first_event else val_end + anom_flag = 'ANOMALY_NO_IN_HAS_ACTIVITY' + + # ЖЕСТКАЯ ВАЛИДАЦИЯ: Если человек не исключен официально — сбрасываем фейковый Пришел = True + if not is_excluded(fio, dept, pos, exceptions): + is_present = False + else: + first_act = '—' + is_present = False + + first_activities.append(first_act) + anomaly_flags.append(anom_flag) + is_present_flags.append(is_present) + + df_scud['Первая_активность'] = first_activities + df_scud['anomaly_flag'] = anomaly_flags + df_scud['Пришел'] = is_present_flags + + return df_scud + + +def load_scud_data(target_date_type="today", snapshot_param=None): + """ + Загружает логи СКУД за 'today' или 'yesterday' НАПРЯМУЮ из локальной базы SQLite. + """ + target_date = DATE_TODAY if target_date_type == "today" else DATE_YESTERDAY + + # Загружаем данные строго из SQLite БД + df_scud = load_scud_from_db_by_snapshot(target_date, snapshot_param=snapshot_param) + + if df_scud is None or df_scud.empty: + # Fallback на случай отсутствия записей за вчера — пробуем взять за сегодня + df_scud = load_scud_from_db_by_snapshot(DATE_TODAY, snapshot_param=snapshot_param) + if df_scud is None or df_scud.empty: + raise FileNotFoundError(f"В базе SQLite не найдены логи СКУД за {target_date}!") + + exceptions = load_exceptions() + + if 'fio_clean' not in df_scud.columns: + fio_raw_col = 'fio' if 'fio' in df_scud.columns else ('Сотрудник' if 'Сотрудник' in df_scud.columns else df_scud.columns[0]) + df_scud['fio_raw'] = df_scud[fio_raw_col].astype(str) + df_scud['fio_clean'] = df_scud['fio_raw'].apply(clean_scud_fio_light) + + # Нормализация колонок под единый стандарт отчета + if 'Начало_дня' not in df_scud.columns and 'time_in' in df_scud.columns: + df_scud['Начало_дня'] = df_scud['time_in'] + if 'Конец_дня' not in df_scud.columns and 'time_out' in df_scud.columns: + df_scud['Конец_дня'] = df_scud['time_out'] + if 'Первая_активность' not in df_scud.columns and 'first_activity' in df_scud.columns: + df_scud['Первая_активность'] = df_scud['first_activity'] + if 'Пришел' not in df_scud.columns and 'is_present' in df_scud.columns: + df_scud['Пришел'] = df_scud['is_present'].astype(bool) + + df_scud['is_excluded'] = df_scud.apply( + lambda r: is_excluded(r.get('fio', r.get('Сотрудник', '')), r.get('department', r.get('Подразделение', '')), r.get('position', r.get('Должность', '')), exceptions), + axis=1 + ) + return df_scud + + +def load_all_data(): + """ + Загружает слитные датасеты за Сегодня и за Вчера напрямую из базы SQLite и 1С. + """ + df_scud_today = load_scud_data(target_date_type="today") + try: + df_scud_yesterday = load_scud_data(target_date_type="yesterday") + except FileNotFoundError: + df_scud_yesterday = df_scud_today.copy() + + df_staff_today = load_staff_data(DATE_TODAY) + df_absent_today = load_absent_data(DATE_TODAY) + + df_staff_yesterday = load_staff_data(DATE_YESTERDAY) + df_absent_yesterday = load_absent_data(DATE_YESTERDAY) + + return ( + df_scud_today, + df_scud_yesterday, + df_staff_today, + df_absent_today, + df_staff_yesterday, + df_absent_yesterday + ) +``` + +# File: ./services/data_validator.py +``` +import os +import time +from datetime import datetime +from config import DATE_TODAY, DATE_YESTERDAY, find_dated_file, ZUP_1C_DIR, SCUD_DIR + + +def check_file_freshness(max_age_hours=24): + """ + Проверяет существование входных файлов 1С и СКУД. + Возвращает флаги доступности файлов за Сегодня и Вчера. + """ + warnings = [] + errors = [] + + # 1. Проверка файлов 1С за СЕГОДНЯ + staff_today = find_dated_file("Штат", DATE_TODAY) + absent_today = find_dated_file("Отсутствия", DATE_TODAY) + has_today_1c = bool(staff_today and absent_today) + + if not has_today_1c: + warnings.append( + f"Файлы 1С за СЕГОДНЯ ({DATE_TODAY}) еще не выложены на сетевую шару. " + f"Формирование Ежедневной сводки за сегодня будет временно пропущено." + ) + + # 2. Проверка файлов 1С за ВЧЕРА (критически важны для детального отчета) + staff_yesterday = find_dated_file("Штат", DATE_YESTERDAY) + absent_yesterday = find_dated_file("Отсутствия", DATE_YESTERDAY) + + if not staff_yesterday or not absent_yesterday: + errors.append( + f"Отсутствуют файлы 1С за ВЧЕРА ({DATE_YESTERDAY}) в папке {ZUP_1C_DIR}. " + f"Невозможно построить детальный отчет за прошлую смену." + ) + + # 3. Проверка файлов СКУД + scud_today = find_dated_file("Сотрудники", DATE_TODAY, search_dirs=[SCUD_DIR]) + if not scud_today: + warnings.append(f"Сегодняшний файл СКУД за {DATE_TODAY} еще не сформирован в {SCUD_DIR}") + + is_valid = len(errors) == 0 + return is_valid, warnings, errors, has_today_1c +``` + +# File: ./services/excel_exporter.py +``` +import math +import os +import time +import openpyxl +import pandas as pd +from datetime import datetime +from openpyxl import Workbook +from openpyxl.styles import Font, Alignment, PatternFill, Border, Side +from openpyxl.utils import get_column_letter +from config import OUTPUT_DIR + +# Словарь месяцев для текстового формата в названиях файлов +MONTHS_RU = { + 1: "января", 2: "февраля", 3: "марта", 4: "апреля", + 5: "мая", 6: "июня", 7: "июля", 8: "августа", + 9: "сентября", 10: "октября", 11: "ноября", 12: "декабря" +} + + +def format_date_ru(date_str): + """Преобразует дату формата '27.07.2026' в '27 июля 2026'""" + try: + dt = datetime.strptime(date_str, "%d.%m.%Y") + return f"{dt.day} {MONTHS_RU[dt.month]} {dt.year}" + except Exception: + return date_str + + +# Границы ячеек +THIN_SIDE = Side(border_style="thin", color="D3D3D3") +THIN_BORDER = Border(left=THIN_SIDE, right=THIN_SIDE, top=THIN_SIDE, bottom=THIN_SIDE) + +# Палитра заливки для Сводки +FILL_HEADER = PatternFill(start_color="D9E1F2", end_color="D9E1F2", fill_type="solid") +FILL_TOTAL_LIST = PatternFill(start_color="F2F2F2", end_color="F2F2F2", fill_type="solid") +FILL_UNEXPLAINED = PatternFill(start_color="FCE4D6", end_color="FCE4D6", fill_type="solid") +FILL_PRESENT = PatternFill(start_color="E2EFDA", end_color="E2EFDA", fill_type="solid") +FILL_ANOMALY = PatternFill(start_color="FCE4D6", end_color="FCE4D6", fill_type="solid") +FILL_NO_PASS = PatternFill(start_color="E1F5FE", end_color="E1F5FE", fill_type="solid") # Мягкий пастельно-голубой для "Нет пропуска" + +CATEGORY_PASTEL_COLORS = ["FFF2CC", "E1D5E7", "E1F5FE", "FFF0F5", "E8F8F5", "FCF3CF"] + +# Палитра для Детального отчета +YELLOW_FILL = PatternFill(start_color="FFF2CC", end_color="FFF2CC", fill_type="solid") # Обычные отсутствия +LIGHT_RED_FILL = PatternFill(start_color="FCE4D6", end_color="FCE4D6", fill_type="solid") # Потенциальные прогулы +GREEN_FILL = PatternFill(start_color="E2EFDA", end_color="E2EFDA", fill_type="solid") # Аномалии (пришел в отпуске) +LIGHT_BLUE_FILL = PatternFill(start_color="E1F5FE", end_color="E1F5FE", fill_type="solid") # Бледно-голубой для "Нет пропуска" + + +def calculate_deviation(time_in_building_str, reason="", norm_hours=8, lunch_minutes=30): + """Рассчитывает точное отклонение от нормы с учетом обеда 30 мин и уважительных причин""" + if pd.notna(reason) and isinstance(reason, str) and reason.strip() != "": + return "0:00" + + if not isinstance(time_in_building_str, str) or time_in_building_str in ['00:00', '0', '', 'None', 'nan', 'NaN']: + return f"-{norm_hours}:00" + + try: + parts = time_in_building_str.strip().split(':') + hh = int(parts[0]) + mm = int(parts[1]) if len(parts) > 1 else 0 + total_in_building_minutes = hh * 60 + mm + + if total_in_building_minutes == 0: + return f"-{norm_hours}:00" + + work_minutes = max(0, total_in_building_minutes - lunch_minutes) + norm_minutes = norm_hours * 60 + diff = work_minutes - norm_minutes + + if diff == 0: + return "0:00" + + sign = "-" if diff < 0 else "" + abs_diff = abs(diff) + res_hh = abs_diff // 60 + res_mm = abs_diff % 60 + + return f"{sign}{res_hh}:{res_mm:02d}" + except Exception: + return f"-{norm_hours}:00" + + +def apply_borders_to_cell(cell, border=THIN_BORDER): + cell.border = border + + +def format_row_cells(ws, r_num, fill_obj, is_bold=False, align_b="right", bold_font=None, wrap_b=False): + cell_a = ws.cell(row=r_num, column=1) + cell_b = ws.cell(row=r_num, column=2) + if fill_obj: + cell_a.fill = fill_obj + cell_b.fill = fill_obj + apply_borders_to_cell(cell_a) + apply_borders_to_cell(cell_b) + if is_bold and bold_font: + cell_a.font = bold_font + cell_b.font = bold_font + if align_b: + cell_b.alignment = Alignment(horizontal=align_b, vertical="center", wrap_text=wrap_b) + + +# --- 1. СВОДКА НА СЕГОДНЯ --- +def generate_summary_excel(merged_df, date_str="27.07.2026", filename=None): + if not filename: + filename = f"{format_date_ru(date_str)} сводка.xlsx" + + output_path = os.path.join(OUTPUT_DIR, filename) + wb = Workbook() + ws = wb.active + ws.title = "Лист_1" + + ws.sheet_properties.outlinePr.summaryBelow = False + ws.sheet_properties.outlinePr.summaryRight = False + ws.sheet_properties.outlinePr.showOutlineSymbols = True + ws.sheet_view.showOutlineSymbols = True + + bold_font = Font(name="Calibri", size=11, bold=True) + + # 1. Шапка + ws.cell(row=1, column=1, value="Сводка на") + ws.cell(row=1, column=2, value=date_str) + format_row_cells(ws, 1, FILL_HEADER, is_bold=True, bold_font=bold_font) + + apply_borders_to_cell(ws.cell(row=2, column=1)) + apply_borders_to_cell(ws.cell(row=2, column=2)) + + # 2. По списку + ws.cell(row=3, column=1, value="По списку") + ws.cell(row=3, column=2, value=len(merged_df)) + format_row_cells(ws, 3, FILL_TOTAL_LIST, is_bold=True, bold_font=bold_font) + + current_row = 4 + + # Подготовка флагов для точной фильтрации + is_no_pass = merged_df['no_scud_pass'] == True if 'no_scud_pass' in merged_df.columns else False + is_exc = merged_df.get('is_excluded', False) == True + + # 3. НЕИЗВЕСТНО (Исключаем категорию "Нет пропуска" и "Исключения ОВК/Охрана") + unexplained = merged_df[ + (merged_df['Пришел'] == False) & + (merged_df['Вид_отсутствия'].isna() | (merged_df['Вид_отсутствия'].astype(str).str.strip() == '')) & + (~is_no_pass) & + (~is_exc) + ] + ws.cell(row=current_row, column=1, value="неизвестно") + ws.cell(row=current_row, column=2, value=len(unexplained)) + format_row_cells(ws, current_row, FILL_UNEXPLAINED, is_bold=True, bold_font=bold_font) + current_row += 1 + + for fio in sorted(unexplained['Сотрудник'].dropna().unique()): + ws.cell(row=current_row, column=1, value=fio) + format_row_cells(ws, current_row, FILL_UNEXPLAINED, is_bold=False) + ws.row_dimensions[current_row].outlineLevel = 1 + ws.row_dimensions[current_row].hidden = False + current_row += 1 + + # 4. РАЗДЕЛ: НЕТ ПРОПУСКА (Строго один независимый блок) + no_pass_df = merged_df[is_no_pass] if 'no_scud_pass' in merged_df.columns else pd.DataFrame() + + ws.cell(row=current_row, column=1, value="Нет пропуска") + ws.cell(row=current_row, column=2, value=len(no_pass_df)) + format_row_cells(ws, current_row, FILL_NO_PASS, is_bold=True, bold_font=bold_font) + current_row += 1 + + if not no_pass_df.empty: + for fio in sorted(no_pass_df['Сотрудник'].dropna().unique()): + ws.cell(row=current_row, column=1, value=fio) + format_row_cells(ws, current_row, FILL_NO_PASS, is_bold=False) + ws.row_dimensions[current_row].outlineLevel = 1 + ws.row_dimensions[current_row].hidden = False + current_row += 1 + + # 5. КАТЕГОРИИ ОТСУТСТВИЙ (Свернуты hidden=True) + absent_only = merged_df[ + (merged_df['Пришел'] == False) & + (merged_df['Вид_отсутствия'].notna()) & + (~merged_df['Вид_отсутствия'].astype(str).str.startswith('Исключение')) + ] + absent_groups = absent_only.groupby('Вид_отсутствия') + + for idx_cat, (cat_name, group) in enumerate(absent_groups): + hex_color = CATEGORY_PASTEL_COLORS[idx_cat % len(CATEGORY_PASTEL_COLORS)] + cat_fill = PatternFill(start_color=hex_color, end_color=hex_color, fill_type="solid") + + ws.cell(row=current_row, column=1, value=cat_name) + ws.cell(row=current_row, column=2, value=len(group)) + format_row_cells(ws, current_row, cat_fill, is_bold=True, bold_font=bold_font) + current_row += 1 + + for fio in sorted(group['Сотрудник'].dropna().unique()): + ws.cell(row=current_row, column=1, value=fio) + format_row_cells(ws, current_row, cat_fill, is_bold=False) + ws.row_dimensions[current_row].outlineLevel = 1 + ws.row_dimensions[current_row].hidden = True + current_row += 1 + + # 6. ИТОГО НА РАБОТЕ (Свернут hidden=True) + is_working_mask = (merged_df['Пришел'] == True) | ( + merged_df['Вид_отсутствия'].astype(str).str.lower().str.contains('командировк|удален|дистанцион|разъездн', regex=True, na=False) + ) + present = merged_df[is_working_mask] + + ws.cell(row=current_row, column=1, value="Итого на работе") + ws.cell(row=current_row, column=2, value=len(present)) + format_row_cells(ws, current_row, FILL_PRESENT, is_bold=True, bold_font=bold_font) + current_row += 1 + + if not present.empty: + for fio in sorted(present['Сотрудник'].dropna().unique()): + ws.cell(row=current_row, column=1, value=fio) + format_row_cells(ws, current_row, FILL_PRESENT, is_bold=False) + ws.row_dimensions[current_row].outlineLevel = 1 + ws.row_dimensions[current_row].hidden = True + current_row += 1 + + # 7. АНОМАЛИИ СКУД И 1С (ОВК и Подрядчики из исключений СУДА НЕ ПОПАДАЮТ) + anomalies = merged_df[ + (~is_exc) & ( + ((merged_df['Пришел'] == True) & (merged_df['Вид_отсутствия'].notna()) & (~merged_df['Вид_отсутствия'].astype(str).str.startswith('Исключение'))) | + (merged_df.get('anomaly_flag', 'NONE') == 'ANOMALY_NO_IN_HAS_ACTIVITY') + ) + ] + + ws.cell(row=current_row, column=1, value="Аномалии СКУД и 1С") + ws.cell(row=current_row, column=2, value=len(anomalies)) + format_row_cells(ws, current_row, FILL_ANOMALY, is_bold=True, bold_font=bold_font) + current_row += 1 + + chars_per_line_b = 30 + + if not anomalies.empty: + for _, row in anomalies.iterrows(): + fio = row.get('Сотрудник', '') + reason = row.get('Вид_отсутствия', '') + anom_flag = row.get('anomaly_flag', 'NONE') + + if anom_flag == 'ANOMALY_NO_IN_HAS_ACTIVITY': + first_act = row.get('Первая_активность', '—') + reason_text = f"🚨 АНОМАЛИЯ СКУД: Нет входа (первая активность: {first_act})" + else: + reason_text = f"В 1С: {reason}" + + cell_a = ws.cell(row=current_row, column=1, value=f"{fio}") + cell_b = ws.cell(row=current_row, column=2, value=reason_text) + + cell_a.fill = FILL_ANOMALY + cell_b.fill = FILL_ANOMALY + apply_borders_to_cell(cell_a) + apply_borders_to_cell(cell_b) + + cell_b.alignment = Alignment(horizontal="left", vertical="center", wrap_text=True) + cell_a.alignment = Alignment(horizontal="left", vertical="center") + + if len(reason_text) > chars_per_line_b: + lines_count = math.ceil(len(reason_text) / chars_per_line_b) + ws.row_dimensions[current_row].height = max(lines_count * 18, 22) + else: + ws.row_dimensions[current_row].height = 20 + + ws.row_dimensions[current_row].outlineLevel = 1 + ws.row_dimensions[current_row].hidden = True + current_row += 1 + + ws.column_dimensions['A'].width = 45.0 + ws.column_dimensions['B'].width = 38.0 + + try: + wb.save(output_path) + print(f"[✓] Ежедневная сводка сохранена: {output_path}") + except PermissionError: + alt_filename = filename.replace(".xlsx", f"_{int(time.time())}.xlsx") + alt_path = os.path.join(OUTPUT_DIR, alt_filename) + wb.save(alt_path) + print(f"[⚠️] Файл открыт в Excel! Сохранено как: {alt_path}") + + +# --- 2. ДЕТАЛЬНЫЙ ОТЧЕТ ЗА ВЧЕРА --- +def generate_detailed_excel(merged_df, date_str="26.07.2026", filename=None): + if not filename: + filename = f"{format_date_ru(date_str)} отчет.xlsx" + + output_path = os.path.join(OUTPUT_DIR, filename) + wb = Workbook() + ws = wb.active + ws.title = "Детальный_отчет" + + ws["B2"] = "Дата:" + ws["D2"] = date_str + ws["B2"].font = Font(name="Arial", size=10, bold=True) + ws["D2"].font = Font(name="Arial", size=10, bold=True) + + headers = [ + "№", "ФИО", "Подразделение", "время входа", "первая активность", "время выхода", + "находился в здании", "причина отсутствия", "норма", "отклонение от нормы" + ] + ws.append([]) + ws.append(headers) + + header_fill = PatternFill(start_color="D9E1F2", end_color="D9E1F2", fill_type="solid") + for col_idx in range(1, len(headers) + 1): + cell = ws.cell(row=4, column=col_idx) + cell.fill = header_fill + cell.font = Font(name="Arial", size=10, bold=True) + cell.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True) + apply_borders_to_cell(cell) + + start_col = 'Начало дня' if 'Начало дня' in merged_df.columns else 'Начало_дня' + end_col = 'Конец дня' if 'Конец дня' in merged_df.columns else 'Конец_дня' + hours_col = 'Часы' if 'Часы' in merged_df.columns else 'Находился_в_здании' + + chars_per_line_h = 24 + + for idx, row in merged_df.reset_index(drop=True).iterrows(): + is_present = row.get('Пришел', False) + absence_reason = row.get('Вид_отсутствия', '') + has_reason = pd.notna(absence_reason) and str(absence_reason).strip() != '' + anom_flag = row.get('anomaly_flag', 'NONE') + + in_building_str = str(row.get(hours_col, '00:00')) + first_act_val = str(row.get('Первая_активность', '—')).strip() + has_first_act = first_act_val not in ['—', '', 'None', 'nan'] + + dept_scud_val = row.get('department_scud', row.get('department', row.get('Подразделение', ''))) + deviation_val = calculate_deviation(in_building_str, reason=absence_reason if has_reason else "", norm_hours=8, lunch_minutes=30) + + ws.append([ + idx + 1, + row.get('Сотрудник', ''), + dept_scud_val, + row.get(start_col, 'Нет входа'), + first_act_val, + row.get(end_col, 'Нет выхода'), + in_building_str, + absence_reason if has_reason else '', + 8, + deviation_val + ]) + + row_num = 5 + idx + + # ЗАЛИВКА СТРОК: + if is_present and has_reason: + row_fill = GREEN_FILL + elif not is_present and has_reason: + row_fill = YELLOW_FILL + elif not is_present and not has_reason and not has_first_act: + # Розово-красный подсвечивает исключительно неизвестные случаи (потенциальные прогулы) + row_fill = LIGHT_RED_FILL + else: + row_fill = None + + val_h_str = str(absence_reason) if has_reason else "" + if len(val_h_str) > chars_per_line_h: + needed_lines = math.ceil(len(val_h_str) / chars_per_line_h) + ws.row_dimensions[row_num].height = max(needed_lines * 18, 22) + else: + ws.row_dimensions[row_num].height = 20 + + for col_idx in range(1, len(headers) + 1): + cell = ws.cell(row=row_num, column=col_idx) + apply_borders_to_cell(cell) + if row_fill: + cell.fill = row_fill + + if col_idx == 8: + cell.alignment = Alignment(horizontal="left", vertical="center", wrap_text=True) + elif col_idx in [1, 4, 5, 6, 7, 9, 10]: + cell.alignment = Alignment(horizontal="center", vertical="center") + else: + cell.alignment = Alignment(horizontal="left", vertical="center") + + # Динамический компактный автоподгон ширины колонок + for col in ws.columns: + col_letter = get_column_letter(col[0].column) + max_len = 0 + for cell in col: + if cell.value is not None: + cell_lines = str(cell.value).split("\n") + line_max = max(len(line) for line in cell_lines) + if line_max > max_len: + max_len = line_max + + optimal_width = max(max_len + 2, 8) + if optimal_width > 35: + optimal_width = 35 + ws.column_dimensions[col_letter].width = optimal_width + + try: + wb.save(output_path) + print(f"[✓] Детальный отчет сохранен: {output_path}") + except PermissionError: + alt_filename = filename.replace(".xlsx", f"_{int(time.time())}.xlsx") + alt_path = os.path.join(OUTPUT_DIR, alt_filename) + wb.save(alt_path) + print(f"[⚠️] Файл открыт в Excel! Сохранено как: {alt_path}") + + +def export_raw_scud(df_scud, filename="СКУД_Сырые_данные.xlsx"): + output_path = os.path.join(OUTPUT_DIR, filename) + df_scud.to_excel(output_path, index=False) +``` + +# File: ./services/feedback_loop.py +``` +import os +import json +from core.database import add_rule_to_db + +try: + from services.knowledge_base import save_rule +except ImportError: + try: + from services.knowledge_base import add_rule as save_rule + except ImportError: + save_rule = None + + +def review_ai_decisions(report_text, suspicious_cases): + """ + Интерактивный консольный модуль обучения (Human-in-the-Loop). + Запрашивает подтверждение оператора ТОЛЬКО по нетипичным/сложным случаям. + """ + if not suspicious_cases: + print("\n[✓] Все аномалии валидированы автоматически. Спорных вопросов для оператора нет.") + return + + print("\n" + "=" * 60) + print("РЕЖИМ ОБУЧЕНИЯ И ПРОВЕРКИ РЕШЕНИЙ ИИ (HUMAN-IN-THE-LOOP)") + print("=" * 60) + + for idx, case in enumerate(suspicious_cases, 1): + fio_target = case.get('fio_target', 'Неизвестно') + reason = case.get('reason', 'Нет описания') + + print(f"\n[?] Спорный случай {idx}/{len(suspicious_cases)}: {fio_target}") + print(f" Детали: {reason}") + + user_input = input("Подтверждаете аномалию? (д / да / н / нет / или введите текст правила): ").strip() + user_input_clean = user_input.lower() + + # Расширенный список вариантов "ДА" + if user_input_clean in ['д', 'да', 'da', 'yes', 'y', 'ок', 'ага', '+']: + print(" [✓] Решение подтверждено оператором.") + elif user_input_clean in ['н', 'нет', 'no', 'n', '-']: + print(" [ℹ️] Решение отклонено оператором.") + elif user_input: + # Если оператор обучает систему синониму отделов + if "отдел" in user_input_clean or "овк" in user_input_clean: + from core.database import add_department_synonym_to_db + add_department_synonym_to_db(user_input.strip(), "отдел внутреннего контроля") + + new_rule = f"Правило: {user_input}" + add_rule_to_db(new_rule, added_by="Human_Admin") + print(f" [✓] Новое правило записано в Базу Знаний SQLite: {new_rule}") + else: + print(" [ℹ️] Запись пропущена.") + + print("\n[✓] ЭТАП ОБУЧЕНИЯ ЗАВЕРШЕН.") +``` + +# File: ./services/knowledge_base.py +``` +import os +from core.database import get_all_rules_from_db, add_rule_to_db + + +def load_knowledge_base(): + """ + Загружает актуальные правила Базы Знаний компании напрямую из базы данных SQLite. + """ + rules = get_all_rules_from_db() + return { + "rules": rules if rules else [], + "fio_corrections": {} + } + + +def add_rule_to_kb(new_rule): + """ + Добавляет новое принятое человеком правило в SQLite таблицу ai_knowledge_base. + """ + if not new_rule or not new_rule.strip(): + return + add_rule_to_db(new_rule.strip(), added_by="Human") + print(f"[✓] База знаний SQLite успешно обновлена! Новое правило: {new_rule.strip()}") +``` + +# File: ./services/scud_export.py +``` +""" +Модуль автоматического экспорта данных СКУД (Orion) из MS SQL Server в SQLite и Excel. +Добавлена фиксация Первой Активности (без учета направления) и среза по времени. +""" + +import argparse +import logging +import os +import sys +import warnings +from datetime import datetime, timedelta + +import pandas as pd +import pyodbc +from openpyxl.utils import get_column_letter + +from config import SCUD_DIR, clean_scud_fio_light, load_exceptions +from core.database import save_scud_to_db, has_scud_logs_for_date, has_yesterday_final_snapshot + +warnings.filterwarnings("ignore", message="pandas only supports SQLAlchemy connectable") + +SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) +LOG_DIR = os.path.join(SCRIPT_DIR, "..", "logs") +os.makedirs(LOG_DIR, exist_ok=True) + +TODAY_DATE_STR = datetime.now().strftime("%d.%m.%Y") +LOG_FILE = os.path.join(LOG_DIR, f"export_{TODAY_DATE_STR}.log") + +logger = logging.getLogger("scud_export") +logger.setLevel(logging.INFO) + +if not logger.handlers: + _file_handler = logging.FileHandler(LOG_FILE, encoding="utf-8") + _console_handler = logging.StreamHandler(sys.stdout) + _formatter = logging.Formatter("[%(asctime)s] [%(levelname)s] %(message)s", datefmt="%Y-%m-%d %H:%M:%S") + _file_handler.setFormatter(_formatter) + _console_handler.setFormatter(_formatter) + logger.addHandler(_file_handler) + logger.addHandler(_console_handler) + + +def log(message: str, level: str = "INFO"): + level_map = { + "INFO": logging.INFO, + "ERROR": logging.ERROR, + "WARNING": logging.WARNING, + "SUCCESS": logging.INFO, + } + if level == "SUCCESS": + logger.info(f"[SUCCESS] {message}") + else: + logger.log(level_map.get(level, logging.INFO), message) + + +SERVER_NAME = r"172.16.31.221\SQL" +DATABASE_NAME = "Orion-14.01.21-1" +SQL_USER = "sa" +SQL_PASSWORD = "123456" +ODBC_DRIVER = "ODBC Driver 18 for SQL Server" + +SQL_QUERY_TEMPLATE = r""" +DECLARE @InputDate DATE = '{target_date}'; +DECLARE @TargetDate DATE = @InputDate; + +DECLARE @StartDate DATETIME = CAST(@TargetDate AS DATETIME); +DECLARE @EndDate DATETIME = DATEADD(SECOND, -1, DATEADD(DAY, 1, @StartDate)); + +WITH DailyLogs AS ( + SELECT + log.HozOrgan AS EmployeeID, + log.TimeVal, + log.Event, + log.Mode, + CASE + WHEN log.Mode = 2 OR log.Event IN (29, 27, 33) THEN 'OUT' + WHEN log.Mode = 1 OR log.Event IN (28, 26, 32) THEN 'IN' + ELSE 'OTHER' + END AS Direction, + ROW_NUMBER() OVER (PARTITION BY log.HozOrgan ORDER BY log.TimeVal DESC) AS RowNumDesc + FROM pLogData log WITH (NOLOCK) + WHERE log.TimeVal BETWEEN @StartDate AND @EndDate + AND log.HozOrgan IS NOT NULL + AND log.HozOrgan > 0 +), +Passages AS ( + SELECT + EmployeeID, + MIN(TimeVal) AS FirstRawEvent, + MIN(CASE WHEN Direction = 'IN' THEN TimeVal END) AS FirstIn, + MAX(CASE WHEN Direction = 'OUT' THEN TimeVal END) AS LastOut, + MAX(CASE WHEN RowNumDesc = 1 THEN Direction END) AS LastEventType + FROM DailyLogs + GROUP BY EmployeeID +) +SELECT + N'ЛЕНМОРНИИПРОЕКТ' AS [Фирма], + ISNULL(CAST(div.Name AS NVARCHAR(255)), N'Без подразделения') AS [Подразделение], + LTRIM(RTRIM( + ISNULL(CAST(p.Name AS NVARCHAR(255)), N'') + + CASE WHEN p.FirstName IS NOT NULL AND CAST(p.FirstName AS NVARCHAR(255)) <> '' + THEN N' ' + CAST(p.FirstName AS NVARCHAR(255)) ELSE N'' END + + CASE WHEN p.MidName IS NOT NULL AND CAST(p.MidName AS NVARCHAR(255)) <> '' + THEN N' ' + CAST(p.MidName AS NVARCHAR(255)) ELSE N'' END + )) AS [Сотрудник], + ISNULL(CAST(post.Name AS NVARCHAR(255)), N'—') AS [Должность], + ISNULL(CAST(p.TabNumber AS NVARCHAR(50)), N'—') AS [Таб_№], + CONVERT(VARCHAR(10), @TargetDate, 104) AS [Дата], + ISNULL(CAST(CONVERT(VARCHAR(8), pass.FirstIn, 108) AS NVARCHAR(20)), N'Нет входа') AS [Начало_дня], + CASE + WHEN pass.FirstIn IS NULL AND pass.FirstRawEvent IS NOT NULL + THEN CAST(CONVERT(VARCHAR(8), pass.FirstRawEvent, 108) AS NVARCHAR(20)) + ELSE N'—' + END AS [Первая_активность], + CASE + WHEN @TargetDate = CAST(GETDATE() AS DATE) AND (pass.LastEventType = 'IN' OR pass.LastOut IS NULL OR pass.LastOut <= pass.FirstIn) + THEN N'Нет выхода' + WHEN pass.LastOut IS NOT NULL AND pass.LastOut > pass.FirstIn + THEN CAST(CONVERT(VARCHAR(8), pass.LastOut, 108) AS NVARCHAR(20)) + ELSE N'Нет выхода' + END AS [Конец_дня], + CASE + WHEN pass.EmployeeID IS NOT NULL AND pass.FirstIn IS NOT NULL THEN + RIGHT('0' + CAST(DATEDIFF(MINUTE, + pass.FirstIn, + CASE + WHEN @TargetDate = CAST(GETDATE() AS DATE) AND (pass.LastEventType = 'IN' OR pass.LastOut IS NULL OR pass.LastOut <= pass.FirstIn) THEN GETDATE() + ELSE ISNULL(pass.LastOut, pass.FirstIn) + END) / 60 AS VARCHAR), 2) + ':' + + RIGHT('0' + CAST(DATEDIFF(MINUTE, + pass.FirstIn, + CASE + WHEN @TargetDate = CAST(GETDATE() AS DATE) AND (pass.LastEventType = 'IN' OR pass.LastOut IS NULL OR pass.LastOut <= pass.FirstIn) THEN GETDATE() + ELSE ISNULL(pass.LastOut, pass.FirstIn) + END) % 60 AS VARCHAR), 2) + ELSE N'00:00' + END AS [Находился_в_здании], + CASE + WHEN pass.EmployeeID IS NOT NULL THEN N'Присутствовал' + ELSE N'Отсутствовал (Нет событий)' + END AS [Статус] +FROM pList p WITH (NOLOCK) +LEFT JOIN PDivision div WITH (NOLOCK) ON p.Section = div.ID +LEFT JOIN PPost post WITH (NOLOCK) ON p.Post = post.ID +LEFT JOIN Passages pass ON p.ID = pass.EmployeeID +WHERE + ISNULL(p.StatusRecord, 0) = 0 + AND p.DateTimeInArchive IS NULL + AND ISNULL(CAST(div.Name AS NVARCHAR(255)), N'') NOT LIKE N'Аренд%' + AND ISNULL(CAST(div.Name AS NVARCHAR(255)), N'') NOT IN (N'Без подразделения', N'') + AND p.Name NOT LIKE N'бр.%' + AND p.Name NOT LIKE N'Гость%' + AND ISNULL(CAST(div.Name AS NVARCHAR(255)), N'') NOT IN (N'БГИ', N'КНР') + AND ISNULL(CAST(div.Name AS NVARCHAR(255)), N'') NOT LIKE N'Рабоч%' + AND ISNULL(CAST(div.Name AS NVARCHAR(255)), N'') NOT LIKE N'Врем%' + AND ISNULL(CAST(div.Name AS NVARCHAR(255)), N'') NOT LIKE N'Практика%' + AND ISNULL(CAST(div.Name AS NVARCHAR(255)), N'') NOT LIKE N'тест%' + AND ISNULL(CAST(post.Name AS NVARCHAR(255)), N'') NOT LIKE N'Практикант%' +ORDER BY p.Name ASC; +""" + + +def auto_fit_columns(file_path: str, sheet_name: str, padding: float = 2.0, min_width: float = 8.0, max_width: float = 60.0): + from openpyxl import load_workbook + + wb = load_workbook(file_path) + ws = wb[sheet_name] + + for col_cells in ws.columns: + max_len = 0 + col_letter = get_column_letter(col_cells[0].column) + for cell in col_cells: + if cell.value is not None: + cell_len = len(str(cell.value)) + if cell_len > max_len: + max_len = cell_len + width = max(min_width, min(max_len + padding, max_width)) + ws.column_dimensions[col_letter].width = width + + wb.save(file_path) + + +def get_targets(input_date: str | None): + targets = [] + if input_date: + try: + parsed = datetime.strptime(input_date, "%d.%m.%Y").date() + targets.append({"name": "Указанная дата", "date": parsed}) + except ValueError: + log(f"ОШИБКА: Неверный формат даты '{input_date}'. Используйте ДД.ММ.ГГГГ", "ERROR") + sys.exit(1) + else: + now = datetime.now() + yesterday = (now - timedelta(days=3 if now.weekday() == 0 else 1)).date() + today = now.date() + + targets.append({"name": "Вчера", "date": yesterday}) + targets.append({"name": "Сегодня", "date": today}) + + return targets + + +def run_export(input_date: str | None = None, save_xlsx: bool = True, debug: bool = False): + if debug: + logger.setLevel(logging.DEBUG) + log("=== ВКЛЮЧЕН РЕЖИМ ОТЛАДКИ (DEBUG MODE) ===", "WARNING") + + log("=== [ЭТАП 0] Выгрузка свежих данных СКУД напрямую из БД Орион ===") + os.makedirs(SCUD_DIR, exist_ok=True) + + targets = get_targets(input_date) + conn_str = ( + f"DRIVER={{{ODBC_DRIVER}}};" + f"SERVER={SERVER_NAME};" + f"DATABASE={DATABASE_NAME};" + f"UID={SQL_USER};" + f"PWD={SQL_PASSWORD};" + f"TrustServerCertificate=yes;" + f"Encrypt=no;" + ) + + success = True + for target in targets: + processing_date = target["date"] + processing_date_str = processing_date.strftime("%d.%m.%Y") + period_label = target["name"] + is_yesterday = (period_label == "Вчера") + + # ⚡️ ПРОВЕРКА НАЛИЧИЯ ВЧЕРАШНЕГО ДНЯ В SQLITE: + # Если это вчерашний день и его снапшот уже зафиксирован в SQLite — пропускаем тяжелый запрос к MS SQL + if is_yesterday and has_yesterday_final_snapshot(processing_date_str): + log(f"[ℹ️] Вчерашний день ({processing_date_str}) уже зафиксирован финишным снапшотом Y. Пропускаем запрос к MS SQL.") + continue + + if is_yesterday: + snapshot_time = f"{processing_date.strftime('%Y-%m-%d')} 22:00:00" + else: + snapshot_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + + log(f"--- Обработка периода: {period_label} ({processing_date_str}) --- [Снапшот: {snapshot_time}]") + sql_query = SQL_QUERY_TEMPLATE.format(target_date=processing_date.strftime("%Y-%m-%d")) + + connection = None + try: + connection = pyodbc.connect(conn_str, timeout=120) + df = pd.read_sql(sql_query, connection) + + log(f"База вернула {len(df)} строк за {processing_date_str}") + + if len(df) > 0: + df['fio_clean'] = df['Сотрудник'].apply(clean_scud_fio_light) + + df['anomaly_flag'] = 'NONE' + mask_anomaly = (df['Начало_дня'] == 'Нет входа') & (df['Первая_активность'] != '—') + df.loc[mask_anomaly, 'anomaly_flag'] = 'ANOMALY_NO_IN_HAS_ACTIVITY' + + df['Пришел'] = df['Статус'].str.contains('Присутствовал', case=False, na=False) & (~mask_anomaly) + + save_scud_to_db(df, processing_date_str, snapshot_time=snapshot_time, is_yesterday=is_yesterday) + log(f"[✓] Записи за {processing_date_str} успешно сохранены в SQLite!", "SUCCESS") + + if save_xlsx: + file_name = f"Сотрудники_{processing_date_str}.xlsx" + file_path = os.path.join(SCUD_DIR, file_name) + + if os.path.exists(file_path): + try: + os.remove(file_path) + except OSError as e: + log(f"ОШИБКА при удалении старого файла {file_name}: {e}", "ERROR") + + df.to_excel(file_path, sheet_name="Отчет", index=False, engine="openpyxl") + auto_fit_columns(file_path, sheet_name="Отчет") + log(f"[✓] Успешно экспортирован файл: data/scud/{file_name}", "SUCCESS") + else: + log(f"Запрос за {processing_date_str} вернул 0 строк.", "WARNING") + + except Exception as e: + log(f"🛑 ОШИБКА выгрузки СКУД за {processing_date_str}: {e}", "ERROR") + success = False + finally: + if connection is not None: + connection.close() + + log("=== Выгрузка СКУД завершена ===\n") + return success + + +if __name__ == "__main__": + help_text = """ +Модуль прямого экспорта данных СКУД Орион Pro (MS SQL Server) в SQLite и Excel. + +ПРИМЕРЫ ЗАПУСКА: + python services/scud_export.py -- Автоматическая выгрузка за Сегодня и Вчера + python services/scud_export.py --date 05.08.2026 -- Точечная выгрузка СКУД за конкретную дату + python services/scud_export.py --no-xlsx -- Сохранение логов СКУД ТОЛЬКО в SQLite без дублирования в XLSX + python services/scud_export.py -d -- Запуск в режиме отладки MS SQL запросов (DEBUG) +""" + parser = argparse.ArgumentParser( + description=help_text, + formatter_class=argparse.RawDescriptionHelpFormatter + ) + parser.add_argument("--date", dest="input_date", default=None, help="Дата выгрузки в формате ДД.ММ.ГГГГ (по умолчанию выгружаются Вчера и Сегодня)") + parser.add_argument("-d", "--debug", action="store_true", help="Включить подробные логи отладки подключения и запросов к MS SQL") + parser.add_argument("--no-xlsx", dest="save_xlsx", action="store_false", default=True, help="Отключить генерирование промежуточных XLSX-файлов в папке data/scud/") + args = parser.parse_args() + + run_export(args.input_date, save_xlsx=args.save_xlsx, debug=args.debug) +``` + +# File: ./services/share_copier.py +``` +import os +import shutil +from config import DATE_TODAY, DATE_YESTERDAY, ZUP_1C_DIR, SHARE_1C_DIR + + +def find_file_strictly_on_share(prefix, date_str): + """ + Ищет файл со строгой привязкой ТОЛЬКО к сетевой шаре SHARE_1C_DIR, + не обращаясь к локальным папкам. + """ + if not os.path.exists(SHARE_1C_DIR): + return None + + date_dots = date_str + date_underscores = date_str.replace('.', '_') + + try: + for f in os.listdir(SHARE_1C_DIR): + if f.endswith('.xlsx') or f.endswith('.csv'): + if f.lower().startswith(prefix.lower()): + if date_dots in f or date_underscores in f: + return os.path.join(SHARE_1C_DIR, f) + except Exception as e: + print(f" [⚠️] Ошибка чтения сетевой шары: {e}") + return None + + +def copy_1c_files_from_share(): + r""" + Копирует свежие файлы 1С (Штат и Отсутствия) за Сегодня и Вчера + из сетевой шары \\storage\SCUD\Обмен\Штат в локальную папку data/1c/ + """ + print(f"[0.5/5] Проверка и копирование файлов 1С с шары: {SHARE_1C_DIR}...") + + if not os.path.exists(SHARE_1C_DIR): + print(f"[⚠️] Сетевой шар недоступен или путь не найден: {SHARE_1C_DIR}") + print(" Используем ранее сохраненные локальные файлы из data/1c/\n") + return False + + dates_to_copy = [DATE_TODAY, DATE_YESTERDAY] + prefixes = ["Штат", "Отсутствия"] + copied_count = 0 + + os.makedirs(ZUP_1C_DIR, exist_ok=True) + + for d_str in dates_to_copy: + for prefix in prefixes: + remote_file = find_file_strictly_on_share(prefix, d_str) + + if remote_file and os.path.exists(remote_file): + filename = os.path.basename(remote_file) + local_target_path = os.path.join(ZUP_1C_DIR, filename) + + try: + shutil.copy2(remote_file, local_target_path) + print(f" [✓] Успешно скопирован с шары: {filename} -> data/1c/") + copied_count += 1 + except Exception as e: + print(f" [⚠️] Ошибка копирования {filename}: {e}") + else: + d_fmt = d_str.replace('.', '_') + print(f" [ℹ️] На сетевой шаре отсутствует {prefix} за {d_str} ({prefix}_{d_fmt}.xlsx)") + + if copied_count > 0: + print(f"[✓] Успешно скопировано файлов с сетевой шары: {copied_count} шт.\n") + else: + print("[ℹ️] Новых файлов за указанные даты на сетевой шаре не обнаружено.\n") + + return True +``` + +# File: ./services/text_reporter.py +``` +import json +import difflib +import re +from services.ai_verifier import ask_ollama +from services.knowledge_base import load_knowledge_base + + +def find_python_fuzzy_matches(unexplained_df, raw_absent_df): + """ + Точный поиск совпадений ФИО силами Python (без галлюцинаций ИИ). + Сравнивает фамилию и полное имя с порогом сходства >= 0.75. + """ + if unexplained_df.empty or raw_absent_df is None or raw_absent_df.empty: + return [] + + absent_dict = {} + for idx, r in raw_absent_df.iterrows(): + raw_fio = str(r.get('ФИО', '')) + clean_fio = str(r.get('fio_clean', '')) + reason = str(r.get('Вид_отсутствия', '')) + if clean_fio and clean_fio not in ['Ао "Ленморниипроект"', 'Сотрудник', 'Nan', 'None']: + absent_dict[clean_fio] = {'raw_fio': raw_fio, 'reason': reason} + + matches = [] + unexplained_fios = unexplained_df['fio_clean'].unique() if 'fio_clean' in unexplained_df.columns else [] + + for fio in unexplained_fios: + fio_parts = fio.split() + if not fio_parts: + continue + surname = fio_parts[0].lower() + + for abs_clean, abs_info in absent_dict.items(): + abs_parts = abs_clean.split() + if not abs_parts: + continue + abs_surname = abs_parts[0].lower() + + if surname == abs_surname: + ratio = difflib.SequenceMatcher(None, fio.lower(), abs_clean.lower()).ratio() + if ratio >= 0.75: + matches.append({ + "target_fio": fio, + "found_in_1c_raw": abs_info['raw_fio'], + "reason_1c": abs_info['reason'] + }) + break + + return matches + + +def generate_markdown_report(merged_df, absent_explained, absent_unexplained, scud_present_but_absent_in_1c, anomalies_list=None, raw_scud_df=None, raw_staff_df=None, raw_absent_df=None, date_str="05.08.2026"): + # 1. Загрузка Базы Знаний + kb = load_knowledge_base() + custom_rules = kb.get("rules", []) + custom_rules_str = "\n".join([f"- {r}" for r in custom_rules]) if custom_rules else "Специфических правил компании пока нет." + + # 2. Предварительный расчет ключевых метрик (РЕШАЕТ NameError: total_staff) + total_staff = len(merged_df) + is_working_mask = (merged_df['Пришел'] == True) | ( + merged_df['Вид_отсутствия'].astype(str).str.lower().str.contains('командировк|удален|дистанцион|разъездн', regex=True, na=False) + ) + present_cnt = len(merged_df[is_working_mask]) + explained_cnt = len(absent_explained) + unexplained_cnt = len(absent_unexplained) + anomalies_cnt = len(anomalies_list) if anomalies_list else 0 + + # 3. Точный расчет неточных совпадений через Python + fio_mismatches_python = find_python_fuzzy_matches(absent_unexplained, raw_absent_df) + + # 4. Формирование списка неизвестных с приоритетом аббревиатуры СКУД + unexplained_list = [] + if not absent_unexplained.empty: + for idx, r in absent_unexplained.iterrows(): + fio = r.get('Сотрудник', r.get('fio_clean', '')) + + dept_scud = str(r.get('department_scud', '')).strip() + dept_1c = str(r.get('Подразделение', '')).strip() + dept = dept_scud if (dept_scud and dept_scud.lower() != 'nan' and dept_scud != '—') else dept_1c + if not dept: + dept = '—' + + pos = r.get('Должность', '—') + unexplained_list.append(f"{fio} — {dept}, {pos}") + + # 5. Сборка промпта для Ollama + prompt = f""" +Ты — старший аудитор кадровой безопасности и контроллинга СКУД. +Сформируй итоговую сводку кадрового контроля на {date_str}. + +📌 БАЗА ЗНАНИЙ И ПРАВИЛА ПРЕДПРИЯТИЯ: +{custom_rules_str} + +🚨 ВХОДНЫЕ МЕТРИКИ: +- Всего сотрудников: {total_staff} +- Работают (офис / удаленка / командировки): {present_cnt} +- Официально отсутствуют: {explained_cnt} +- Неизвестно (истинно неотмеченные): {unexplained_cnt} +- Выявлено аномалий/конфликтов реестров: {anomalies_cnt} + +--- +🚨 ПОДТВЕРЖДЁННЫЕ АНОМАЛИИ ({anomalies_cnt} шт): +{json.dumps(anomalies_list, ensure_ascii=False, indent=2)} + +--- +⚠️ ПОДТВЕРЖДЁННЫЕ PYTHON ОШИБКИ СОПОСТАВЛЕНИЯ ФИО В 1С ({len(fio_mismatches_python)} шт): +{json.dumps(fio_mismatches_python, ensure_ascii=False, indent=2)} + +--- +📊 СПИСОК НЕИЗВЕСТНЫХ СЛУЧАЕВ ({unexplained_cnt} чел): +{json.dumps(unexplained_list, ensure_ascii=False, indent=2)} + +СТРОГИЕ ИНСТРУКЦИИ ДЛЯ ИИ: +1. КАТЕГОРИЧЕСКИ ЗАПРЕЩЕНО придумывать несуществующие совпадения ФИО или приписывать суффиксы "(осн.)". Используй ТОЛЬКО массив `ПОДТВЕРЖДЁННЫЕ PYTHON ОШИБКИ СОПОСТАВЛЕНИЯ ФИО`. Если этот массив пуст, напиши в этом разделе: "Ошибок сопоставления ФИО и неточностей в 1С не обнаружено." +2. В разделе "Неизвестные случаи" выведи НУМЕРОВАННЫЙ СПИСОК всех {unexplained_cnt} человек ровно в том виде, в котором они переданы выше. +3. В разделе "Рекомендации" дай 2-3 конкретные системные рекомендации для кадровой службы. НЕ ПЕРЕЧИСЛЯЙ конкретные ФИО в тексте рекомендаций. + +СТРОГИЙ ШАБЛОН ОТВЕТА: + +**Сводка контроллинга СКУД и 1С:ЗУП на {date_str}** + +- Всего офисных сотрудников: **{total_staff}** +- Работают (офис / удаленка / командировки): **{present_cnt}** +- Официально отсутствуют: **{explained_cnt}** +- Неизвестно (истинно неотмеченные): **{unexplained_cnt}** чел. +- Выявлено аномалий/конфликтов реестров: **{anomalies_cnt}** шт. + +#### 🚨 Выявленные ИИ аномалии и конфликты источников ({anomalies_cnt}): +(Описание аномалий из anomalies_list. Если их нет — "Аномалий не обнаружено.") + +#### ⚠️ Подозрения на ошибки сопоставления ФИО и несоответствия 1С: +(Выведи данные ИСКЛЮЧИТЕЛЬНО из массива fio_mismatches_python. Если он пуст — "Ошибок сопоставления ФИО и неточностей в 1С не обнаружено.") + +#### Неизвестные случаи: {unexplained_cnt} +(Выведи нумерованный список всех {unexplained_cnt} человек) + +### Точечные рекомендации: +(2-3 системные рекомендации без указания ФИО сотрудников) +""" + + sys_prompt = "Ты — эксперт кадрового аудита. Будь точен, не придумывай непереданные данные." + return ask_ollama(prompt, system_prompt=sys_prompt) +``` + +# File: ./services/zup_extractor.py +``` +import os +import logging +from datetime import date, datetime +import pyodbc +import pandas as pd +from config import DATA_DIR, normalize_fio, ZUP_SQL_CONFIG + +logger = logging.getLogger(__name__) + + +def get_zup_connection_string() -> str: + """Формирует строку подключения pyodbc к MS SQL Server из config.py.""" + return ( + f"DRIVER={ZUP_SQL_CONFIG['driver']};" + f"SERVER={ZUP_SQL_CONFIG['server']};" + f"DATABASE={ZUP_SQL_CONFIG['database']};" + f"UID={ZUP_SQL_CONFIG['user']};" + f"PWD={ZUP_SQL_CONFIG['password']};" + f"TrustServerCertificate={ZUP_SQL_CONFIG.get('trust_server_certificate', 'yes')};" + f"Encrypt={ZUP_SQL_CONFIG.get('encrypt', 'no')};" + ) + + +def fetch_zup_absences_from_sql(target_date) -> pd.DataFrame: + """ + Извлекает оперативные отсутствия и действующие декреты из MS SQL 1С:ЗУП 3.1 + на указанную дату (принимает как datetime.date, так и строку 'DD.MM.YYYY' / 'DD_MM_YYYY'). + """ + if isinstance(target_date, str): + clean_date_str = target_date.replace('_', '.') + try: + target_date = datetime.strptime(clean_date_str, "%d.%m.%Y").date() + except ValueError: + logger.error(f"[❌] Неверный формат даты для SQL-запроса: {target_date}. Ожидался DD.MM.YYYY") + return pd.DataFrame() + + query = """ + DECLARE @TargetDate DATE = ?; + + -- 1. Оперативные отсутствия (Отпуска, Командировки, Больничные, Отгулы) + SELECT + LTRIM(RTRIM(ref_emp._Description)) AS [ФИО], + CASE state._Fld16925RRef + WHEN 0x9C10B2452D414FDF4A90E2B2AB81D3F7 THEN N'Отпуск основной' + WHEN 0xBA63FCF94B4AD0664ED369D2E6505D67 THEN N'Командировка' + WHEN 0x8C3B61F23954155A40EB0108FC0932DB THEN N'Болезнь' + WHEN 0x853001C18D0965EE4B2702405C94054A THEN N'Отпуск неоплачиваемый по разрешению работодателя' + WHEN 0xB7335AEFD8708C3E462861FC59489A38 THEN N'Отпуск по беременности и родам' + ELSE N'Другое отсутствие' + END AS [Вид_отсутствия] + + FROM dbo._InfoRg16921 state WITH (NOLOCK) + INNER JOIN dbo._Reference299 ref_emp WITH (NOLOCK) + ON state._Fld16922RRef = ref_emp._IDRRef + + WHERE @TargetDate BETWEEN CAST(CASE WHEN YEAR(state._Fld16926) > 3000 THEN DATEADD(YEAR, -2000, state._Fld16926) ELSE state._Fld16926 END AS DATE) + AND CAST(CASE WHEN YEAR(state._Fld16927) > 3000 THEN DATEADD(YEAR, -2000, state._Fld16927) ELSE state._Fld16927 END AS DATE) + + UNION ALL + + -- 2. Динамический выбор ДЕЙСТВУЮЩИХ декретниц по уходу за ребенком + SELECT + active_state.fio AS [ФИО], + N'Отпуск по уходу за ребенком' AS [Вид_отсутствия] + + FROM ( + SELECT + LTRIM(RTRIM(ref_emp._Description)) AS fio, + all_states._Fld16925RRef AS state_guid, + CAST(CASE WHEN YEAR(all_states._Fld16926) > 3000 THEN DATEADD(YEAR, -2000, all_states._Fld16926) ELSE all_states._Fld16926 END AS DATE) AS date_start, + ROW_NUMBER() OVER ( + PARTITION BY all_states._Fld16922RRef + ORDER BY all_states._Fld16926 DESC + ) AS rn + FROM dbo._InfoRg16921 all_states WITH (NOLOCK) + INNER JOIN dbo._Reference299 ref_emp WITH (NOLOCK) + ON all_states._Fld16922RRef = ref_emp._IDRRef + WHERE CAST(CASE WHEN YEAR(all_states._Fld16926) > 3000 THEN DATEADD(YEAR, -2000, all_states._Fld16926) ELSE all_states._Fld16926 END AS DATE) <= @TargetDate + ) active_state + + WHERE active_state.rn = 1 + AND active_state.state_guid = 0xA4FBA038663B3C2A48DA151C262855E1 + AND active_state.date_start >= DATEADD(YEAR, -3, @TargetDate) + + ORDER BY [ФИО] ASC; + """ + + try: + conn_str = get_zup_connection_string() + with pyodbc.connect(conn_str, timeout=5) as conn: + df = pd.read_sql(query, conn, params=[target_date]) + + if not df.empty: + df['fio_clean'] = df['ФИО'].apply(normalize_fio) + return df + except Exception as e: + logger.error(f"[❌] Ошибка SQL-выгрузки отсутствий за {target_date}: {e}") + return pd.DataFrame() + + +def fetch_zup_staff_from_sql() -> pd.DataFrame: + """Резервная выгрузка штата из MS SQL.""" + query = """ + SELECT DISTINCT + LTRIM(RTRIM(ref_emp._Description)) AS [ФИО], + N'Организация' AS [Подразделение], + N'Сотрудник' AS [Должность] + FROM dbo._Reference299 ref_emp WITH (NOLOCK) + WHERE ref_emp._Description <> '' + AND ref_emp._Marked = 0x00 + ORDER BY [ФИО] ASC; + """ + try: + conn_str = get_zup_connection_string() + with pyodbc.connect(conn_str, timeout=5) as conn: + df = pd.read_sql(query, conn) + + if not df.empty: + df['fio_clean'] = df['ФИО'].apply(normalize_fio) + return df + except Exception as e: + logger.error(f"[❌] Ошибка выгрузки штата из MS SQL: {e}") + return pd.DataFrame() + + +def sync_zup_to_excel(target_date) -> bool: + """Создает дамп в Excel при необходимости.""" + try: + if isinstance(target_date, str): + clean_date_str = target_date.replace('_', '.') + target_date_obj = datetime.strptime(clean_date_str, "%d.%m.%Y").date() + else: + target_date_obj = target_date + + date_str_file = target_date_obj.strftime("%d_%m_%Y") + c_1c_dir = os.path.join(DATA_DIR, "1c") + os.makedirs(c_1c_dir, exist_ok=True) + + df_staff = fetch_zup_staff_from_sql() + df_absences = fetch_zup_absences_from_sql(target_date_obj) + + staff_excel_path = os.path.join(c_1c_dir, f"Штат_{date_str_file}.xlsx") + absences_excel_path = os.path.join(c_1c_dir, f"Отсутствия_{date_str_file}.xlsx") + + with pd.ExcelWriter(staff_excel_path, engine='openpyxl') as writer: + dummy_headers = pd.DataFrame([[""] * 13] * 8) + dummy_headers.to_excel(writer, index=False, header=False) + df_staff[['ФИО', 'Подразделение', 'Должность']].to_excel(writer, startrow=8, index=False) + + with pd.ExcelWriter(absences_excel_path, engine='openpyxl') as writer: + dummy_headers = pd.DataFrame([[""] * 3] * 3) + dummy_headers.to_excel(writer, index=False, header=False) + df_absences[['ФИО', 'Вид_отсутствия']].to_excel(writer, startrow=3, index=False) + + return True + + except Exception as e: + logger.error(f"[❌] Ошибка прямого импорта из MS SQL 1С: {e}") + return False +``` + +# File: ./api/__init__.py +``` + +``` + +# File: ./core/__init__.py +``` + +``` + +# File: ./core/database.py +``` +import os +import sqlite3 +import json +import pandas as pd +from datetime import datetime +from config import DATA_DIR + +DB_PATH = os.path.join(DATA_DIR, "scud_orion_ai.db") + + +def get_connection(): + """Создает подключение к базе данных SQLite с оптимизированными настройками.""" + conn = sqlite3.connect(DB_PATH) + conn.execute("PRAGMA foreign_keys = ON;") + conn.execute("PRAGMA journal_mode = WAL;") + return conn + + +def init_db(): + """Создает структуру таблиц и индексов в базе данных.""" + with get_connection() as conn: + cursor = conn.cursor() + + cursor.execute(""" + CREATE TABLE IF NOT EXISTS scud_logs ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + log_date TEXT NOT NULL, + fio TEXT NOT NULL, + fio_clean TEXT NOT NULL, + department TEXT, + position TEXT, + time_in TEXT, + first_activity TEXT DEFAULT '—', + time_out TEXT, + time_in_building TEXT, + is_present INTEGER NOT NULL, + anomaly_flag TEXT DEFAULT 'NONE', + snapshot_time TEXT DEFAULT NULL, + snapshot_id TEXT DEFAULT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ); + """) + + cursor.execute("PRAGMA table_info(scud_logs);") + cols = [col[1] for col in cursor.fetchall()] + if 'snapshot_id' not in cols: + cursor.execute("ALTER TABLE scud_logs ADD COLUMN snapshot_id TEXT DEFAULT NULL;") + + cursor.execute(""" + CREATE TABLE IF NOT EXISTS zup_staff ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + snapshot_date TEXT NOT NULL, + fio TEXT NOT NULL, + fio_clean TEXT NOT NULL, + department TEXT, + position TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ); + """) + + cursor.execute(""" + CREATE TABLE IF NOT EXISTS zup_absences ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + absence_date TEXT NOT NULL, + fio TEXT NOT NULL, + fio_clean TEXT NOT NULL, + absence_type TEXT NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ); + """) + + cursor.execute(""" + CREATE TABLE IF NOT EXISTS anomalies_history ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + anomaly_date TEXT NOT NULL, + fio TEXT NOT NULL, + anomaly_type TEXT NOT NULL, + details TEXT NOT NULL, + human_status TEXT DEFAULT 'Pending', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ); + """) + + cursor.execute(""" + CREATE TABLE IF NOT EXISTS ai_knowledge_base ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + rule_text TEXT UNIQUE NOT NULL, + added_by TEXT DEFAULT 'Human', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ); + """) + + cursor.execute("CREATE INDEX IF NOT EXISTS idx_scud_date ON scud_logs(log_date);") + cursor.execute("CREATE INDEX IF NOT EXISTS idx_scud_fio ON scud_logs(fio_clean);") + cursor.execute("CREATE INDEX IF NOT EXISTS idx_scud_snapshot ON scud_logs(snapshot_time);") + + conn.commit() + + sync_knowledge_base_to_db() + +def has_scud_logs_for_date(date_str): + """Проверяет, есть ли в базе данные СКУД за указанную дату.""" + with get_connection() as conn: + cursor = conn.cursor() + cursor.execute("SELECT 1 FROM scud_logs WHERE log_date = ? LIMIT 1", (date_str,)) + return cursor.fetchone() is not None + +def has_yesterday_final_snapshot(date_str): + """Проверяет, зафиксирован ли уже ИТОГОВЫЙ вчерашний снапшот с индексом Y/22:00.""" + with get_connection() as conn: + cursor = conn.cursor() + cursor.execute( + "SELECT 1 FROM scud_logs WHERE log_date = ? AND (snapshot_id LIKE 'Y%' OR snapshot_time LIKE '%22:00:00') LIMIT 1", + (date_str,) + ) + return cursor.fetchone() is not None + + +def get_or_create_snapshot_id(snapshot_time, date_str=None, is_yesterday=False): + """ + Генерирует датированный составной ID снапшота (YYYYMMDD-NNN или YYYYMMDD-NNN). + Префикс 'Y' присваивается автоматически, если дата логов (date_str) предшествует дате снятия (snapshot_time). + """ + try: + dt_snap = datetime.strptime(snapshot_time, "%Y-%m-%d %H:%M:%S").date() + date_prefix = dt_snap.strftime("%Y%m%d") + except (ValueError, TypeError): + dt_snap = datetime.now().date() + date_prefix = dt_snap.strftime("%Y%m%d") + + # Автоматическая проверка: если дата логов раньше даты выгрузки — проставляем Y + if date_str: + try: + dt_log = datetime.strptime(date_str, "%d.%m.%Y").date() + if dt_log < dt_snap: + is_yesterday = True + except Exception: + pass + + prefix = "Y" if is_yesterday else "" + + with get_connection() as conn: + cursor = conn.cursor() + + if date_str: + cursor.execute( + "SELECT snapshot_id FROM scud_logs WHERE log_date = ? AND snapshot_time = ? AND snapshot_id IS NOT NULL LIMIT 1", + (date_str, snapshot_time) + ) + else: + cursor.execute( + "SELECT snapshot_id FROM scud_logs WHERE snapshot_time = ? AND snapshot_id IS NOT NULL LIMIT 1", + (snapshot_time,) + ) + + row = cursor.fetchone() + if row and row[0]: + return row[0] + + cursor.execute(""" + SELECT snapshot_id + FROM scud_logs + WHERE snapshot_id LIKE ? OR snapshot_id LIKE ? + ORDER BY snapshot_id DESC LIMIT 1 + """, (f"{date_prefix}-%", f"Y{date_prefix}-%")) + + last_row = cursor.fetchone() + next_seq = 1 + + if last_row and last_row[0]: + parts = last_row[0].replace("Y", "").split("-") + if len(parts) > 1 and parts[1].isdigit(): + next_seq = int(parts[1]) + 1 + + return f"{prefix}{date_prefix}-{next_seq:03d}" + + +def save_scud_to_db(df_scud, date_str, snapshot_time=None, is_yesterday=False): + """Сохраняет логи СКУД с автоматическим присвоением составного snapshot_id.""" + if df_scud is None or df_scud.empty: + return + + if not snapshot_time: + snapshot_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + + # Передаем date_str в генератор snapshot_id + snapshot_id = get_or_create_snapshot_id(snapshot_time, date_str=date_str, is_yesterday=is_yesterday) + + data_to_insert = [] + for _, r in df_scud.iterrows(): + data_to_insert.append(( + date_str, + r.get('Сотрудник', r.get('fio_raw', '')), + r.get('fio_clean', ''), + r.get('Подразделение', ''), + r.get('Должность', ''), + r.get('Начало_дня', 'Нет входа'), + r.get('Первая_активность', '—'), + r.get('Конец_дня', 'Нет выхода'), + r.get('Находился_в_здании', '00:00'), + 1 if r.get('Пришел', False) else 0, + r.get('anomaly_flag', 'NONE'), + snapshot_time, + snapshot_id + )) + + with get_connection() as conn: + cursor = conn.cursor() + cursor.execute("DELETE FROM scud_logs WHERE log_date = ? AND snapshot_time = ?", (date_str, snapshot_time)) + cursor.executemany(""" + INSERT INTO scud_logs ( + log_date, fio, fio_clean, department, position, + time_in, first_activity, time_out, time_in_building, + is_present, anomaly_flag, snapshot_time, snapshot_id + ) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + """, data_to_insert) + conn.commit() + + +def get_latest_snapshot_time(date_str=None): + with get_connection() as conn: + cursor = conn.cursor() + if date_str: + cursor.execute("SELECT snapshot_time FROM scud_logs WHERE log_date = ? AND snapshot_time IS NOT NULL ORDER BY snapshot_time DESC LIMIT 1", (date_str,)) + else: + cursor.execute("SELECT snapshot_time FROM scud_logs WHERE snapshot_time IS NOT NULL ORDER BY snapshot_time DESC LIMIT 1") + row = cursor.fetchone() + return row[0] if row else None + + +def load_scud_from_db_by_snapshot(date_str, snapshot_param=None): + """ + Загружает логи СКУД по ID снапшота ('20260805-001', 'Y20260805-001') или по штампу времени. + С автоматическим маппингом полей Подразделения и Должности. + """ + with get_connection() as conn: + df = pd.DataFrame() + + if snapshot_param: + if "-" in str(snapshot_param) or str(snapshot_param).startswith('Y'): + df = pd.read_sql_query( + "SELECT * FROM scud_logs WHERE log_date = ? AND snapshot_id = ?", + conn, params=(date_str, str(snapshot_param)) + ) + if df.empty: + df = pd.read_sql_query( + "SELECT * FROM scud_logs WHERE snapshot_id = ?", + conn, params=(str(snapshot_param),) + ) + + if df.empty: + df = pd.read_sql_query( + "SELECT * FROM scud_logs WHERE log_date = ? AND snapshot_time = ?", + conn, params=(date_str, str(snapshot_param)) + ) + + if df.empty: + latest_time = get_latest_snapshot_time(date_str) + if latest_time: + df = pd.read_sql_query( + "SELECT * FROM scud_logs WHERE log_date = ? AND snapshot_time = ?", + conn, params=(date_str, latest_time) + ) + + if not df.empty: + df['Сотрудник'] = df['fio'] + df['Пришел'] = df['is_present'].astype(int) == 1 if 'is_present' in df.columns else False + df['Начало_дня'] = df['time_in'] + df['Первая_активность'] = df['first_activity'] + df['Конец_дня'] = df['time_out'] + df['Находился_в_здании'] = df['time_in_building'] + + # 💡 Маппинг колонок БД в стандартные русские наименования + if 'department' in df.columns and 'Подразделение' not in df.columns: + df['Подразделение'] = df['department'] + if 'position' in df.columns and 'Должность' not in df.columns: + df['Должность'] = df['position'] + else: + df = pd.DataFrame(columns=[ + 'Сотрудник', 'fio_clean', 'Подразделение', 'Должность', + 'Начало_дня', 'Первая_активность', 'Конец_дня', + 'Находился_в_здании', 'Пришел', 'anomaly_flag' + ]) + + return df + +def get_available_snapshots(date_str=None): + """ + Возвращает список снапшотов. + Сортировка по времени snapshot_time DESC. + """ + with get_connection() as conn: + cursor = conn.cursor() + if date_str: + cursor.execute(""" + SELECT + snapshot_id, + log_date, + snapshot_time, + COUNT(*) as cnt + FROM scud_logs + WHERE log_date = ? AND snapshot_time IS NOT NULL + GROUP BY snapshot_id, log_date, snapshot_time + ORDER BY snapshot_time DESC + """, (date_str,)) + else: + cursor.execute(""" + SELECT + snapshot_id, + log_date, + snapshot_time, + COUNT(*) as cnt + FROM scud_logs + WHERE snapshot_time IS NOT NULL + GROUP BY snapshot_id, log_date, snapshot_time + ORDER BY snapshot_time DESC + """) + return cursor.fetchall() + + +def save_staff_to_db(df_staff, date_str): + if df_staff is None or df_staff.empty: + return + data_to_insert = [ + (date_str, r.get('ФИО', ''), r.get('fio_clean', ''), r.get('Подразделение', ''), r.get('Должность', '')) + for _, r in df_staff.iterrows() + ] + with get_connection() as conn: + cursor = conn.cursor() + cursor.execute("DELETE FROM zup_staff WHERE snapshot_date = ?", (date_str,)) + cursor.executemany("INSERT INTO zup_staff (snapshot_date, fio, fio_clean, department, position) VALUES (?, ?, ?, ?, ?)", data_to_insert) + conn.commit() + + +def save_absences_to_db(df_absent, date_str): + if df_absent is None or df_absent.empty: + return + data_to_insert = [ + (date_str, r.get('ФИО', r.get('fio_clean', '')), r.get('fio_clean', ''), r.get('Вид_отсутствия', '')) + for _, r in df_absent.iterrows() + ] + with get_connection() as conn: + cursor = conn.cursor() + cursor.execute("DELETE FROM zup_absences WHERE absence_date = ?", (date_str,)) + cursor.executemany("INSERT INTO zup_absences (absence_date, fio, fio_clean, absence_type) VALUES (?, ?, ?, ?)", data_to_insert) + conn.commit() + + +def save_anomalies_to_db(anomalies_list, date_str): + if not anomalies_list: + return + data_to_insert = [ + (date_str, a.get('fio', ''), a.get('type', ''), a.get('details', '')) + for a in anomalies_list + ] + with get_connection() as conn: + cursor = conn.cursor() + cursor.execute("DELETE FROM anomalies_history WHERE anomaly_date = ?", (date_str,)) + cursor.executemany("INSERT INTO anomalies_history (anomaly_date, fio, anomaly_type, details) VALUES (?, ?, ?, ?)", data_to_insert) + conn.commit() + + +def get_all_rules_from_db(): + with get_connection() as conn: + cursor = conn.cursor() + cursor.execute("SELECT rule_text FROM ai_knowledge_base") + return [r[0] for r in cursor.fetchall()] + + +def add_rule_to_db(rule_text, added_by="Human"): + if not rule_text or not rule_text.strip(): + return + with get_connection() as conn: + cursor = conn.cursor() + try: + cursor.execute("INSERT OR IGNORE INTO ai_knowledge_base (rule_text, added_by) VALUES (?, ?)", (rule_text.strip(), added_by)) + conn.commit() + except Exception as e: + print(f"[⚠️] Ошибка записи правила в БД: {e}") + + +def sync_knowledge_base_to_db(): + pass + +def delete_snapshot_by_id(snapshot_id: str): + """Удаляет конкретный снапшот из таблицы scud_logs по его ID.""" + with get_connection() as conn: + cursor = conn.cursor() + cursor.execute("DELETE FROM scud_logs WHERE snapshot_id = ?", (snapshot_id,)) + deleted_count = cursor.rowcount + conn.commit() + print(f"[✓] Удален снапшот [{snapshot_id}]. Удалено строк: {deleted_count}") + return deleted_count + +def delete_snapshots_by_date(date_str: str): + """Удаляет все снапшоты за указанную дату (например, '04.08.2026').""" + with get_connection() as conn: + cursor = conn.cursor() + # Удаляем по log_date или по дате внутри snapshot_id + cursor.execute("DELETE FROM scud_logs WHERE log_date = ? OR snapshot_id LIKE ?", (date_str, f"%{date_str.replace('.', '')}%")) + deleted_count = cursor.rowcount + conn.commit() + print(f"[✓] Удалены все снапшоты за дату [{date_str}]. Удалено строк: {deleted_count}") + return deleted_count +def init_department_synonyms_db(): + """Создает таблицу синонимов отделов в БД SQLite.""" + with get_connection() as conn: + cursor = conn.cursor() + cursor.execute(""" + CREATE TABLE IF NOT EXISTS department_synonyms ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + short_name TEXT UNIQUE NOT NULL, + full_name TEXT NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ); + """) + # По умолчанию добавляем ОВК -> Отдел внутреннего контроля + cursor.execute(""" + INSERT OR IGNORE INTO department_synonyms (short_name, full_name) + VALUES ('овк', 'отдел внутреннего контроля') + """) + conn.commit() + + +def get_department_synonyms_dict(): + """Возвращает словарь всех изученных синонимов {short_name: full_name}.""" + init_department_synonyms_db() + with get_connection() as conn: + cursor = conn.cursor() + cursor.execute("SELECT LOWER(short_name), LOWER(full_name) FROM department_synonyms") + return {row[0]: row[1] for row in cursor.fetchall()} + + +def add_department_synonym_to_db(short_name, full_name): + """Сохраняет новую пару синонимов отдела в базу SQLite.""" + init_department_synonyms_db() + with get_connection() as conn: + cursor = conn.cursor() + cursor.execute( + "INSERT OR REPLACE INTO department_synonyms (short_name, full_name) VALUES (?, ?)", + (short_name.strip().lower(), full_name.strip().lower()) + ) + conn.commit() + print(f"[✓] В базу SQLite добавлен новый синоним отдела: '{short_name}' ⟷ '{full_name}'") + +``` + +# File: ./modules/__init__.py +``` + +``` + +# File: ./HOWTO/работа с кодом.md +``` +# 🛠 HOWTO: Правила внесения изменений и передачи кода в проекте + +## 📌 Зачем это нужно +Проект `scud_orion_ai_v2` активно растет (17+ модулей, СУБД SQLite, ИИ-контур). Передача полных файлов кода при каждой мелкой правке сжигает окно контекста LLM, замедляет диалог и приводит к потере ранее внесенных архитектурных фич. + +--- + +## 🎯 Правила для разработчика и ИИ + +### 1. Формат передачи изменений +При запросах и ответах используются **точечные фрагменты кода** (Diff-стиль) с указанием привязок. + +Любой фрагмент должен содержать: +1. **Точный путь к файлу** (`services/excel_exporter.py`). +2. **Имя целевой функции/класса** (`generate_summary_excel`). +3. **Зацепку (Context Anchor)** — уникальную соседнюю строку или блок `try/except`. + +--- + +## 📐 Шаблоны фрагментов + +### Вариант А: Замена существующей логики + +> **Файл:** `services/excel_exporter.py` +> **Функция:** `generate_summary_excel()` +> **Место:** Строка ~150, блок фильтрации `no_pass_df` +> +> ❌ **Удалить:** +> ```python +> no_pass_df = merged_df[merged_df.get('no_scud_pass', False) == True] +> ``` +> +> ✅ **Вставить:** +> ```python +> if 'no_scud_pass' in merged_df.columns: +> no_pass_df = merged_df[merged_df['no_scud_pass'] == True] +> else: +> no_pass_df = pd.DataFrame() +> ``` + +--- + +### Вариант Б: Вставка нового условия/блока + +> **Файл:** `main.py` +> **Функция:** `detect_all_anomalies()` +> **Место:** После цикла `for idx, row in merged_df.iterrows():` +> +> ➕ **Вставить код:** +> ```python +> # ИСКЛЮЧЕНИЯ без документов 1С НЕ пропускаются дальше к аномалиям СКУД +> if is_exc and not has_1c_reason: +> continue +> ``` + +--- + +### Вариант В: Git Unified Diff Format + +> **Файл:** `services/data_loader.py` +> ```diff +> @@ def process_scud_anomalies(df_scud, exceptions=None): @@ +> - first_act = '—' +> + # Сохраняем вычисленную ранее активность из БД/файла +> + first_act = existing_fa if existing_fa not in ['—', '', 'None'] else '—' +> ``` + +--- + +## 🚀 Чек-лист перед запуском +1. Проверить синтаксис через `python -m py_compile <файл.py>`. +2. Запустить скрипт с флагом отладки `python main.py -d`. +3. Убедиться, что снапшот записан в SQLite (`python scripts/db_cli.py snapshots`). +``` + diff --git a/scripts/db_cli.py b/scripts/db_cli.py index 3b86fff..055ed4f 100644 --- a/scripts/db_cli.py +++ b/scripts/db_cli.py @@ -236,28 +236,34 @@ CLI-утилита инспекции и управления SQLite базой ДОСТУПНЫЕ КОМАНДЫ: stats -- Общая статистика строк по всем таблицам БД - snapshots [ДД.ММ.ГГГГ] -- Посмотреть список всех снапшотов (опционально за дату) - scud [--snapshot ID] [--export-xlsx NAME] -- Инспекция логов СКУД и опциональный экспорт в Excel - anomalies -- Посмотреть все найденные аномалии СКУД ⟷ 1С + snapshots [ДД.ММ.ГГГГ] -- Посмотреть реестр снапшотов (опционально за конкретную дату) + scud [ДД.ММ.ГГГГ] [--snapshot ID] [--export-xlsx NAME] -- Инспекция логов СКУД по дате/снапшоту и экспорт в Excel + anomalies -- Посмотреть историю найденных аномалий СКУД ⟷ 1С rules -- Посмотреть правила Базы Знаний ИИ из SQLite prompts -- Посмотреть системные промпты (system_prompts) sessions -- Посмотреть активные сессии и превью (session_states) dump [output.xlsx] -- Полный дамп всех таблиц БД в многостраничный Excel - snapshot del [ID] или [--day ДД.ММ.ГГГГ] -- Удаление снапшотов по ID или за весь день + snapshot del [ID] или [--day ДД.ММ.ГГГГ] -- Удаление снапшота по ID или всех за выбранный день ПРИМЕРЫ ЗАПУСКА: python scripts/db_cli.py stats + python scripts/db_cli.py snapshots 06.08.2026 + python scripts/db_cli.py scud 06.08.2026 --export-xlsx срез_четверг + python scripts/db_cli.py scud --snapshot Y20260805-007 python scripts/db_cli.py prompts python scripts/db_cli.py sessions - python scripts/db_cli.py snapshots 04.08.2026 - python scripts/db_cli.py scud --snapshot Y20260805-007 --export-xlsx вчера_1 python scripts/db_cli.py snapshot del Y20260805-007 python scripts/db_cli.py snapshot del --day 04.08.2026 + python scripts/db_cli.py dump my_dump.xlsx """ + if any(arg in sys.argv for arg in ['-h', '--help']): + print(help_text) + sys.exit(0) + parser = argparse.ArgumentParser( description=help_text, formatter_class=argparse.RawDescriptionHelpFormatter, - add_help=True + add_help=False # Отключаем стандартный вывод справки argparse ) parser.add_argument('command', nargs='?', default=None, choices=['stats', 'snapshots', 'scud', 'anomalies', 'rules', 'prompts', 'sessions', 'dump', 'snapshot'], help="Основная команда") parser.add_argument('action', nargs='?', default=None, help="Дополнительное действие (например, 'del')") @@ -266,7 +272,6 @@ CLI-утилита инспекции и управления SQLite базой parser.add_argument('--export-xlsx', type=str, default=None, help="Экспорт среза СКУД в Excel-файл") parser.add_argument('--day', type=str, default=None, help="Удалить снапшоты за конкретный день (ДД.ММ.ГГГГ)") - # Если аргументы вообще не переданы, выводим статистику по умолчанию (или справку) if len(sys.argv) == 1: print_stats() return @@ -277,7 +282,8 @@ CLI-утилита инспекции и управления SQLite базой if args.command == 'stats': print_stats() elif args.command == 'snapshots': - print_snapshots_list(date_str=args.param) + date_val = args.param or args.action + print_snapshots_list(date_str=date_val) elif args.command == 'scud': inspect_scud(snapshot_id=args.snapshot, date_str=args.param, export_xlsx=args.export_xlsx) elif args.command == 'anomalies': diff --git a/scud_orion_ai_v2.tar.gz b/scud_orion_ai_v2.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..475b46ec51dc53087d4583a2f6eb13573c139aee GIT binary patch literal 291719 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�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�q0K;u>(v47uhC`C7P4)shQRv&`c>*57tM=55wZ6 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 literal 0 HcmV?d00001