From c3932e6404cab93efa8a8522f976531934741aac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D1=82=D0=BA=D0=BE=D0=B2=D1=81=D0=BA=D0=B8?= =?UTF-8?q?=D1=85=20=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9?= Date: Tue, 8 Sep 2026 18:09:01 +0500 Subject: [PATCH] =?UTF-8?q?Init:=20DB=20layer=20chk=20=E2=80=94=20tables,?= =?UTF-8?q?=20init=20scripts,=20docs,=20PlantUML=20schema?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DB/chk/chk_schema.png | Bin 0 -> 23836 bytes DB/chk/functions.md | 16 +++++++ DB/chk/init/init.sql | 28 +++++++++++++ DB/chk/schema.puml | 57 +++++++++++++++++++++++++ DB/chk/tables.md | 72 +++++++++++++++++++++++++++++++ DB/chk/tables/chk_check.sql | 17 ++++++++ DB/chk/tables/chk_status.sql | 6 +++ DB/chk/tables/chk_type.sql | 6 +++ DB/readme.md | 31 ++++++++++++++ DB/task.md | 79 +++++++++++++++++++++++++++++++++++ 10 files changed, 312 insertions(+) create mode 100644 DB/chk/chk_schema.png create mode 100644 DB/chk/functions.md create mode 100644 DB/chk/init/init.sql create mode 100644 DB/chk/schema.puml create mode 100644 DB/chk/tables.md create mode 100644 DB/chk/tables/chk_check.sql create mode 100644 DB/chk/tables/chk_status.sql create mode 100644 DB/chk/tables/chk_type.sql create mode 100644 DB/readme.md create mode 100644 DB/task.md diff --git a/DB/chk/chk_schema.png b/DB/chk/chk_schema.png new file mode 100644 index 0000000000000000000000000000000000000000..a356161ad2bbd5f92789af15b939e70a8aae69e6 GIT binary patch literal 23836 zcmZ^JWmKF^(2`DK^fIxBv25M$zT6T6u9v&8cetrP~c5!h&adB}8 z34R$FVJRso1qE>>B}oMZ1q}^39UTRAb#(&+WfK!MBO@bAOKlq)T{AN?2M0r2TU!@b zb1yGTcMm&PS63fj8~*_Nz##XaprDXY=a5jZ&@h*XNRPQM)YRB)@FyoCFF&fNI5sCIrLeHDxFoK)B(0({xw0yyq$Ibrw6v-^ zwYny?wl1%_y0o^owy8P0wJoo$y{x&py1BWz3slqvD(eE(fPNQu_muVz)PO*({r&v| zgB3%=RpS$N!y_#tBmE;IBNLPL(=$zT^DQ$o6H`-D3yW_}rDtTYfczY`n7z|$tlxzOT1;DjC) z8bkes=r?o}wuH3e#j0g&@U-MBg2TIiSFgi;28j>qpj ztM4u9z{lM(z2haARwsUjqb<&+2ksEEqm|vP#W?KYE8MlBHk6O;8mz;t{BRuS5UUV7 z@|K%6P; zR7{$ z##|eCiaqCYFo&8>2z?{k-l0`b;t>iIhKURK=3QR?*xnXLBXqfQ0!o}xn0t$m%2VK^ z*4Wy~a>g0t&NurRF+AQPxUsau$0I0AcE0gOu#x0!JH$?0Q>!R>BB{uh=xU9}_nM+A z+Q_g#%#rxn2yS|WypTa*Ryo8pz0wtvRYuqn{TLtz9W7>U<&LDakkjoRqTkA|@du@ndUON}hSH0>oABzR@s%BpLI){0^2u_~ohegTL5(tz-hP9SxCC?*f0J!6sONTI-CAoU}xA*)i0(ajxEXHNx2 zMcqTlVS!m)5A2-j*GP(<|9rg+#OviTx|!LR*`8trh#oeX4#xOGK&S#GL!}X^Dz`p+iFjVQ9h=DpXO!VQOZb4H~?xd^+xKwV&k{7dr2D zC+@`E=ola&MFj)d8kuNH>izA}A#px25&>eM?TOTYU*d=#$C$52?Z%|%nV9SBedq_% z++?qL>h@X|GCJ=wud;oK;Pr*eX7B}2dv|jZ!QTY+=7&=)K+ zXA=gyR*RoetBzQRLHJ*ra}qCj{8)-THaMQNe7VWiauRL%S&Lg!?4kh(A>)OzX$*xh zG?b%BNyyM`E}(}eC9?PV>EZ6m2*#jKWt?{09)e*rUUDakxo&vLIm_WsQDS!l}fM+$HA^+Ra69@c1r(y}0{ zlF{m-Nw#w*%YvOCUqSXU-%>CeYWlnpRae+O9podeNZ%nf9fHvHD`p{HSlLgkPlCG`#jwlB+<|hZJRh}c|`!!C&*n<5K`J+m7c$6yZowjDP(z8R=G?}!w8WG~h*GbF&2 z>DUxna4+xi+#=p!FHI&3=6$gGwM^{?4Av2+@@#Gu_gYML4tc?M>Fkj^Q;IvZrBhOE zH*tPgwgp1{%*^D^UVgd!Xom$2X%Uet@rM}E%@}9&`!EOZXNG`%bn6g0z9s1PwQHfn zAN#;WOdkz_6x8ch`UnCHuAjokf0#f&xztf66_5W}%RJ5|I@H%fEl{`G##`k{%!|bb zj!*J`wX%<1X|l`BjooSMPjA)De14YbgHO2HR%&Ba)Ai7gSIc(vpvSi_;k*0n%$S(nnHBj_3 zI}&A;v?Yz^T0#~Bg)MunJ*^KkGOe?FyWW}KhyFDjTKz=KvtZ*OP0!tsB)eMzTc9ib z=7$%k<p3InbKX-KRRAND>)j7qa&#Us=5(3?*SoKiCMU1z3Y0cvMW96rcM2}|#*L{RiYt8k*8kJu*E$^8m0G6hc()Lj zcn19EiF~PoEKkWHql*Zt%)4w+IKZ6XGBZu?r7c%Cj0Qkb{NWXKcs!!98*&74*9*_g zI-TS6_W-#~N;aoAZ0@E&mkp_*$h6%{71B&h-2d|7UV$11<91ciXe^`*SUQss2)eC_ zjQgRs2!yT6^)oj`%OZY<4i{$)1w7L;P|uNhApGs&!mujiK&t5FaGp`6z7xpovz>rv z%0mqEw+q>w7m~+>R0Oa7(%FbytiWdvdJqAM*yV5D4IWcT zv5gMCjk0rv_UeX<`w!JUyL0HPyd2~yQQhgCSd9-p6rL4Y=TO`Relc;WPmiwC>SlLu z;YQEAsCyspeU}A*n{2Xo0H3E$`Lo4)f!2!!l1S$R7z1t6WS{u!i2F0Ll>Met&!5t9 zVuKZMC=b59yc=v6oq@~Wu-=~%Zb^uer$0PPD&*jFUlCe*IF7Pu**Rz0r~pB^6DnTs zyEG^~$bWl)H6EpA=+1~jb8LCJkB7IhGq)s@Awfks=w?klnyG6VFCACt zt$GH?o@s_#ffYNoLty*vvBSY**BixTVT;m?+3s=p;ezbTy>I>oCfxr<^8c4Z;oG)F z^1&O8O6*^QKJz1nQU@$t4C`8tCQea-NBQ*s0p&k#=wDcylE=lYDs2{1P&UJDee7h2 z4TPTVmXndSMd`(?M?Vw$De3SpyT=7qMwB`XmsJ+1#5BQK$gYfQ3-EFdZ(5o{S%vl=`3Y;w6ki5I{UCM;jwr~K!lDpFa=Y2HMm<-d&}ooXu_2-M#nXrgsELdO$m6d zYwcQIMb#QET0lxy=eS}VyYlkUPdl#wZRzQktyr&i z$VP)*p$ixSpLaOBZLIf}#-)qlu7_rIBC{MTy_Nz2qWP5g1m{@j-rg#QVVzDcGJN9+ z7m4@0-&qc)$#L}ZT*6(`&0NPW2E+s6Sl?C_Dw5|7!%Bxs^Ktj#&ptHytKeC0e+nxY z!_SmcF;h$fg|NH%_UlvsrhL)!JhjcVDc#9^Zd6pn8W$VWSGMBgU62y|t7@crbnASn z7u*DuL*bIlLx(FbZg*25n%5;TEU`7wFRXyPUZcz~?Hae;NdYvV=cC?j-^{wA%h4+{0jzqAdk zpx(6n293*FUgj{T;M_!C8Px_hQML=sZl}>~hx}010w!izpE>qN?KMT2^9@s#49Uz0oKR7}qcp zwFIm=w=&{796>1F*+y=xR zigxd(+^x0Z+zJJc4%z8(NWbMte_8f2aC}b@XH1j@4Q{ouy^NRoL&EOMPe4g%b?*>t49w#1|yB8_3M-*Q6<>4%MXUYR@01Jk6xJvM9`|~ zO*b#*-tYo5MFgT}70p@>1&cBG0YS`#zUHyOPLPc8!e~fY-Opo=GqF_ke5_xWmxLYB za1cz`S_Q{@LMqXAf`-enAC{?eeml6qRq4{Y+pxhNqqXP}34?>jvu;WqyLz3EF(}$k zsIke-os|#+VS8jC2OgK7#+n@kZzK#Pu~f|tr^rY>MfXB`E#=eL-;N56-9!|^Am}#Y z{D`1Eg_pJDfm5Azl)#5Y#}e*g$3%ut@y&ES3*U^&nr-O!qPU;9efQ|PmJ^nb5Ttcz z75^j+JJO}eF8|^2BG7cFjCbjU`(<^mXQ82NkXYq~cJ3?#1i zKsb!HV~+qT04%ZpTJj?GC{Z4X%`=k2RSw6*Qd5+g>x)zE)!pqUMA3t_iuAWx@55eV2;&9jUN#@I2xvT zO7*^)B5=hKLEsDWEA`qTdwHg-OFEAD`3U&{M1hPn(EIgHR_`*}?%t47B|$g2(g3}I z1_!IR{yf@Q=Da&FEkm<1s@?W zdgKGg&{$jZ{1IiUIY!)4f}$`24l-Yn93SPf6i1k;n?x9 zgRRbO+S7+`MvZ%!9tNxop8Hv5&|a6vRW{csT6}R~{lDp2GO(kSls?30i#cTYKp>2F zwc68y2u)O2_NB-l=kZ=e0im3-4`sEdUfdO_ z?Ks-6zp(Uj5HR<_z0dFmC&8wj4v$3mg}+Pi3At zqM(v}0?(1he@B5zb_PCl#o^5c_9LnT$cBEy^(OhTP8&4?SJOO62x12%xgl2dq?zP8_kQD9)XNt;Nq=Ul}Ph*MQ>-=Bx$}; z?To1~8@bXbZ+g>ApQjW3GkWgqZdwz^0(D6Sj-5#!q&LG!mr7cS_IJKiY>8WlDay2l z7JLb%1T!Crzki~xNB%EMcUkW$$K%Q;?c$KnKnZ44Ie+DD(VLiO^rrk@(&IxqtXc64 z?R6cgHf!Dk*K(-we<}G~syTE#wi{ENXn6QbMP9yH59i|q%Gvq&x8McDJi>pht|Bmk z2>CR{G}~@P3MAbAMfPzjuW+GNUaATrhzP&KUH^js>&!Jd(m(q?V(hH-n_Ve$1-lq833$8r$Y&>=L9sjNY4!nl1(|Oqd1f4)EVfvN( zJ>fU)VmM3`u+Ja>`-~CYypAo#eZ%9As#EUMhu=2^c#yzhI$Cd&$gJ{~(qlB6qxkdY z{uf$iMp*DIXrgm9y(gK65?EOe}{!XBETqXI=X=={H{t45I7D`aYbTlXNoBm)!d*DFT0a!T%ean=2!l^#asbohyl{d3doJ5psw^ikQ z#U6O9dPoH&D~Hw;45s8f!=2)?LsLRC-R4rM)L&6Mib%7rAOn@sK zm_kr`bMgI~QU3nwp!e+m?obx-MO@pR$C2J?+LM}2o>Q-pNoTzB-y}g}US~VhUm3s{ z=S2;1rr(|v=R_!Sf=57789wKtF9oJIJ{aR%@16+5iPK}h$#xWhdtm&hhgI_-?xviK zCJo)=JY>6FQhSc$CLu<0;LeQY+w9Fij^jeH#awvnRVcgN3{x2Dv{u1L>-dPthoEjB zegORJ--EmGwb`9hXJK5(*>c*yEho^zzA@6*qT>xVNhSbi6q}9WvT3S{nGhpy4r$hK zT)9Kr?EbbXXdTS-1ZYyTkzw*_uGaO^bU~k`S`AJninjy6IKkz^QUf$Tm||RDIhqy9 zWmeS>n~39Az?qiK8Jmufu0eyHNc>V?Rh8MU2{!(F(3Hi@@?p2-S?>mlgaoFHk$d9XD3NRr# z>eSj+nLm7pOvV6)Db8dr{+0sRYGB#9>V;9k^OI;EOd<=y|3zH*joz05`C*JFJ0{wje%k&()w zM!D1jIhwPs+~bcB(tXN3rhaDGb$17?MJxo$9UP=ExL0RfdN0hrUVmrh+X3$ZL5kA% zl&}tb2pJ!xj)}&9PTz;>fY)7y!4=LjN0R*DIX}o2p?~sO`R3$nHyzb|@64N^19!s3 zF9?ANqq7qO`v}>Ef1ZI!r*P4!fJh7+<_EG_QO5E+@uQOPE{Qj`G63(E7t%H<@?KD_ z!0mB`zAAnaKIeCbdjpf@jN+^hQJTC}@gwI%(E<+IZbq*LJ0^i@`^$f5tSFlZt}@qT z(Ed6BF!(6I3W#+5TEa<63wfn2{0(^W;>6H1K=x}K{X-PgnZU--*Vl^RUH-+pgA}XQ z&x=l-TK=gVH;-lKU7A7c6v23ZBl;a<{}p!M!y_(@7fv`hj#lM133c-dVm=qsWl4#<@uJj|D?E%4cx|&FpKJr8&B0c6id!;kcIGk#ZF7(&Mq=K zL680Ggcj*YgfEbdvR(q3d)n`qZTXtdG`v2$ZPp_XG?#}0JMFKa6nxz zI06?cJtxCvTv3Tlgk>6Yxxr3h5>c1F--P~oH$67JOU8+eq#qBe{$vvPs%4ux+`rwX z+x#-`FNKP|?zw+w(M(NOnmPq5ELgBKAe zQea9N3atmJi@+a7$}FZj#DNPZ@;`;6_C-rPT4-vB3lFAxvivOtDrVHmt99S+ZUg>C0>PXb*G_T+!f7L0#X-9jO2c&JyezWix+pEY}zUk}QJ0pici6`%hX}c(_ zej;`8wN^EvMcA&BZFJ-(f8l_Jvf8q#EsH?s{(!{FN*WYBwD4HOO)Au8vFbHeyz)+e z7@}R_5b}1lZfQEj=`X+VdL^s-;;luy`o!Pv?pZXM3o?m{(;Fm$t;B#jAYKDqIIvmc z+2YEsps3&km7D0jBAuQ6x><&Z_IBqq9yChJUw`X+#_2l?;Bc->*JLq_m^53|BHEK8oW@3o3FLGW z9MOyb?6Wcbnoj=`I1x8~y{zFq0qTSRA?m4H2BB4_$;zgopz>T}Tz!|%Xw>f98q7gi zk9Z1L4wCYwKJPsMRWQ}$fYDP3&WBb8K8r`{i zAO8vt!;a5@+2-#W1(XTqnF6T_O;^?ZlA*`(r@?@pGv$vy&aRyomu{`LN)F^jDw*%t zQo98^Yo;`tbVPIw{Av1Wm38QT@hD8T7kAP!)>3xMM(+9&iczWyspm-4e+t%UtnZw{CfX#mF!a`)B%~&l$zDd^Ez(vdXJhoiL@E=>~fd6*?&XH^`kANZzjkNOjthB2r=NoOO3GN5t8rGAq-I1$k zqI$gnksen84*e{iuMA(zHb@31`_C3Lc|k_;^pgX=g=i@H_H4OL=wk!RUMT8MB=+Ct zd8x|ICJ-n-M)`1B;nC%OcSIqF+!TEdE2}U6Qp<-S4bO_<4y@^5?7FT9*-um1Ly4j} z;?l&Jqm2q8JlmC0RJ!;2-oSK>@#K`*A+u(5l$*_yaZ25Od%NG|TNmV?_@FV#{&SDz zGOHf_pKI8i%Yj^n()ht=4VIVSG~&_IVLxW1_mg9cMvE4ddkW zQnxi(hQ%BQ{_@Vj?6dTwwdZ+*qZDv+cIPX3uk=AhuZ^m&i>#U|Kxy8p^awf8$wOk! zYm2RX#}b;s{@|e*ZYivMC0O_Ic3ZSi@&SolcrmC=oVsd^x`x|S{-*@i3?)KHpr#Zp zX~+#cHKKxN@CYfVw|j|_1)n{^F>-0=3_qGP)I^v%5Vn3)GugM%)64t4;9_1~_ggnM|YTuM{YOR4v>?tFy9l1xJ`JS>aHok}$ zW$LcE??;R*xINPP;pM$qlY`Yg1wJ^I#Y?j~htN}n;M4~Yf!AGL?ZR}QnxjdCm^Kj@ zGi0>Q>_<^L&}Jt@6E#-q%kR^!nM!G#Uqf23k7{>%;|}OE{K zRF+MywZdVbB5vE1ZJovgb-{J7Ba1V3MX&SEPGifwqa>r%&t=w($xa?3b4YO0dm*=0 ztq9ufdVE;C43n=-rS(R z>Aj$ike~_ZAtOk{tbf#a$}A}Ru>svtsO$|ZFigO3&@n3|s{eC9;^Ne$lsmF+Gu?mJ+1a5sSe=rkWYhWb##ra*5u;p%VopappZZQU*>iez&A2b9VKzTGjD1k7U&!XmWHn{Ac8etzB7#3U=4kYWtg>9B*2ynQ**Ikq&7>_(K%I`o|C$s zm5bOZ%Bk#{%#Z~N|FG2o@J3^a!S~iA`dw|_s_=*n%mt!ztM@%IWO7ukug3@1+K_E* zlS!1GXj@98ZaE{BN!>Q4%#yR*f8LVKPJRv$bbjyss6z6nFVm7VxYD8=WOg`5jK;Sj zYK0vww7ShqY-s=IK{_U0C`V~l5RZ>m8rmrfTby|^)>{7OGU-Swozf~>t+h=_t5YCV zD;$F2PjO+(VY`I~X-4aXc@zH(=+8=#QEHJCH{agnO;AamkYbEhlgg}d)tcB9SGnSp zr|@%<@qi@ZtSKwa{U$;Ovo)8gy00^omq_P`w^LhCyTe-69}_W@VqWC;1te|Kr+wz@(*o))LS z$D+0Eb1VA=QH&5F8-%ss5h|a^y-0rI!QDX(z7NK+;$imSr$?;j@Y<9mT-7F~} zra_FThEJ_ZnXX$GYkbNs(dHWG2?5pyO6b?7hG4&VT? zm;$4hUECx}C2BQlu2WInH?Ri9NfLE|OI8p{S9F9!idCzwFHPN|i|JLqh1jbd*qz<2 z46SX+YM(lg;|IkB%`-`qSj#ko6UtB*Nw5K02li#eD9k0zd%~K}4_7tKzjXd;{%zxPtrkl&nb}8YNa5CF1G^-*&X(_#R0ddxXc9??mMc z6zmA|A1^>A9l|t~_m{#D>yuvywt`@9v`xq;ng3hLr1gOJWBztmlbQc(*~pigHIY;8 z0xPK~iNf_G?fU$Xi~*;13eUPObUyCAh_t#d=Poj<{OhiZb4Bh+ z%j+vHiq3=R-m+se&)xx{m9$@f@Ds|(+Dg{ltI#f^XftBW^I?o4dmesMBwx%eX|*m} z@b<)T8KuN~WYc$SLU-?EhV?hh4m8)e4#p?t#}XgybdV^+$x{qsny~iq$Rze}E+O9U zMxe1qogN-biwSLBBM@->@KMl=ycZ$r_i?1ipDw=ixkmVc!wgx)@LX?0#boB(z)t=6 zg~8qRPr}^A)30MZT~_-JhAn9J$G`tD5Vv#Wvi;vOjgP(We6=e#r4w_Zd#ZW~v|W6q z>sZV?5mxyLF^i9HL9N6}r37>4m)%G>MXg#IydvpsjXD_o`M4lk`J*jU<-JR{JpI^* zvrOklzb;C}jqf1CxGv6VNq{EP9u_@cepnwJSE`@gKL2fe9TbUrdlC)pTAhdhB_R-! z#1PRJU%?>ozge#76Rvgo+*jf3s;9RRrSY|t5~SjoiV5gzsID1B`AQ76(Jk zzQArM_PF)5_HWWF)8`oGebb3xGU3m&G$ZH5VJtQcl}fI7ZP^0-^A7!~b);hFDG}Jg zxfFNsG``CEsnwDwH7Jys&y)u9jOJ`5Evab0{yaW4CQvr1N#T}dTO^3k8iPN_Jo5FF$wYrt0nvamnZ7I^( za`xJ`BHsOi_6dz<2I|f*^X1tqY~HuJ+7@Iid(C}*HVjnk2d$3_Nl{Iu$7RB^%A8rT zdOCluv|wod6$>sd`xvIyQW1qZSYFcxoLevq#li{rM=6fcNzQamz#g2J!Cz2OBVYWt zLXGiFm&Q?UGpp5~hu(${wJ^kKQ9QW?Ti(dZ?nL%n+gj=QM7FQ%*^rkmp+_d-m0_$w z{1=B_$A6I3oEWkJ)f6ts;c%AlVWIh*bB&LG8yk>s5h;m2x@}E*WV*H4G@5?+iruCl z0qr&Too`&mtk4yMr)q0Kvwam?`g`>-wvVmIb&(F~&xUcK%g$rr|#GERzzx z2Ay@C-`dNjn-@|YxXaOx%udWx#VowUJ_f;uk->2xmxXv?kcGt0>xW$-vO&auY#mW+ zjXtSPJrGak>>Am-r_)_u_{~eEd3r98wUG}4kMja0%gvSoSJ0h=NjVd8TNV{MHPT2*L2W-KR_UvCwtt+cdbA_03pDb5;^qf)vA8h+|l zndD)Y;a7yaFz4Ca;^yV=wJzvcpQY5ax*LQk=HAfO?w>-Fe`vzIRa@%&erVdxeVx2ifySKy~V5u_IlP~8mA*)#kSSt|FIRJJy2s} z-{>^um$@m_8FaO>lG z+nj6=B95f9UO-FuL}l{39$7DUQ}R)3pwPriM#HmKA>rSGSlKHh>8w%B!AzC4R(t_< zi*}kFoh}-z@9LJ;WStaenb%4PG91_JvSVgE#8%?w0ZEJZtS7v3js4eKe=fiUePLC^ z=PeK(N53l!AM4y{KN0Q?U(V#&xBr_?E3%awV%oqZfOv#RVxs;?*6k)N%s&XnD-oL< z@;e$L$yTPng}m6}IFyQ6)SS8UKw86U`Bxf|=Qe5lSoyGBbU$)*+I&+RQOGbY>=nZl z_^LuKFe=XkK8|bmwn#rJ8(szt>HAX}V{4jiOBDbYj0@_4Qi1lli@m~@K~3~1i-3@k zksg7E-^M@G!;u`MWKAMJ46r&doC!I;0_6MA4gzd`e8Xn0q8Z@D;pQ>Fa|U48W#1^T z3%rqk{Oa^%{op9(B9FGrlfR`qT z9h{*#9pQ`Ktj{x!Kv;S9olv3ndfy?PUt5qz_;1CpV0%9CQ<&~xFY+FhD2vP|!4Ad- zsKyzMZHqkf+r$_&S>j%yiGxq;^FctGPai5C(#~xLv)AMJ4V1%b&l45* zUvbs_Jkg6wfl99~XXoU*&6Ni>a};7PV$;h{3lYPYiR!x#HnWw#*lB+)RJ^IHk-WAa z1`XIweLbzeF!@=}6XO#$?`|K#`{M@jH|UT4**Tfg4MwaF-3I@s!SCUwp??;jSurZ_ zST8le^wAHc!-@Xd6*ITa01R@|M#L6H(cOJWiZDmkC;!2B0JyTht7(~>t8XpVph zv|Ht8IppQHyrgHDq+Nn9`^v!*nUiCE*Cp((xnXfl#UYr+biZZDkkH(6r$`@@s|#3F z3-F{?qDW5d<|J*tm_`hmddf6o0U1~t1CN6!JR6_h=qiPNm{0^)V5LzB?lx;+gStdI zjT><@BzMw3#o8T?L93wK_%-8F1bgTN3vY?-WRb?rFF>OsxdXpncU+hhH82(*9<&QO zF2_QYKsLu!iaGo|5+u3Di~ZF}aZ(LV-BjU4tBstJ#5PmA123JVI-kV+0q5-N+JH6D z?+^&W?WqckhWepmXPo-*PifVcsf@n%JjQfQ=^|T2*p(dNmPl9&JdY$)?zW=*m8M2U ziA|pj)o2$8My$9_ z$W%PRQ4`R+&45_1cv7kSOSa2+UB}2AUV?ngFd%N8{!O64qL__VR+PbWkD8QD1$F%G zMy>I!h8nQEq`i=6WINFQLb)ftP^_Yv)++J(Ki4m>uxi4 z$c4+lb4`jCf7DgM%?UDvvggW|{%AxPfm<8lN}zM2EOa3LWZ>Zu)=H_!iTo~I1^MmO zvE~l3yoK~*4(5*2W_9oXI$;&B^d5Q4+T&c zx4q!Gi=fZ;Zg)5Wp%)V7x?=R@|JN!CE}BtvAf^=k;tKrUYw7SVaPei@ufj=Gvsn`8j3 z@WrTHuN*=}bA}H1&Lm6Qt^`M2f`kFoc!GY$UUWXb5!$x zs#adbr8bTUqWENg9DQg(waSyQ4s*|?YF6dbp%OnUnetB?OXJRo@sy?7O>S>_&cZ#$ z?qEl_2WMG-A2sKSE7#;*vR%jLc(Mybo7}oaDwEOM4AO78c>=;X2{<@bx@WTwJgn!+ zl*-$VO9?bZr-z4^lvoF^{(Rq=iYrvk*b`ng5?v}f(j)Jnm1+FNt-G8C!wh3$oS#m_aTDW>vD3MEyh-tFd0`ds1ILx)M+s*oOJRagJ)p1<)G348By1qHZkVgd zR#IWc$dRL3#_OGMHCi@4gVK7(YvYj(_)L#+5L;;8F8oSXLN!q5&LajyPi8ly6pLnX zkGQCc{=&CFBdaFEM4b`qfn7qNITTx8TkEWZRJ-zy_=uZ_$xm`}-6?m~Kjrz>@zDv6 z%3ZZAIT3y?HRMmDf;^exhYZa;`@Nw2L05w;iQ_8YN3wtUHY@0qFUt|3JF$oF70K~atQqv!mz^eug^&zU;4Y}R$v3T zPprO_HzP$OP)6fkA@MVi32;*FKC%;6ZNhXVq@kjh-PJ~N(hIS!4I?A+szwbki+=Wz zLZS*vfZYj3ni|3U3)4XDQzKip9YVCA*pgMzhT30!(&HmYW8*_LrekvV;^CD*Wf}4L z#tVm{_u6@xhfMBSA4J0fv6SC#?S0fvOU=J323e z5xkLgDKZpI=fjTOLkt~II0Qo&V;xTR9+Y{YozAQp_Ef5QO?4dqt?D`1)HSA=)<7+) z$Cog}qy7ELvA7EZE5|h+z%877s6@zuU|^#UpHqkaa%zzt>@-oo;xM$SBec(`JJp}2 z;f0X#_F2<+OGYf zoiLv%1J~{un6}3^Rc1U82xd7D7jf`1rRClbSbP9^0oX;=0TeXjhC~;eGMn8MHL8xH z+viCm=N2A6m9C}Lr?6DMf`QPwP!ooNL(pmiRcC&E*iv~b7=Y-zd16yhNC*e^vZ9%uC>Y-iq+ z#yJ=vH@A((gK#MT>wDbScBg>O^C2JwEZYPvJKd6lLVBlDYxC#D+O>ySF0E^oUzBUb zm^LWI0rNVDxAX?K__haE!=5r(5OBW6*T*)^;V}k{@z6g z)>x`{z`RD*DQ7L)(N4E@9s_ij<-A|xUJf5#mCn9QGMS@!QYLilE>vFO2cg2Fo`3D1 zZU9%O6+@b9FX7K9N2ZrxeTC}BfT^(ttO!@BIh*X`V{faZi?oZFpU8lw>P=syR;<$T z(|y9)3`+2@II_wyy@Z{!Y?2l@eS^8QH4k6ui9Byy%F7$hiiUgPY4 zD66TGjT%)pvPODW_YFYV76^A@<#5I4t{FM9C?&`Fn`fOc^-qS|VW2(aT$W*^5zF$N zu@7*6=Kc*stZ48XwGhCz&-&cjKP@kver;0#XF~UDtMip!#T(derD9`z5yHH2Wk)Pk zjkK(gS}8h{>t!ORe8F_-{I$ubS=06U#_bfB`7w`?tJZSixKy4?P&+Ymh-%HK-g8Dp z1DFw7p>ib>%|uaw&4%WOf`gqWYs!P{o+|;5dlsW2zOWzn4X6>q5Q6mjKHmLKO_7_T zt;bf-KA7=v!@nVy2K>p7<}sB{ZzQ8pds(?_yVtYMgnJcenC17L#&5KYy*oFJG_(IY z(Og)af2g9@?ly^oXBKl4Hg3qWW+cQogkUBbf$KRbau@^)fb(?D#J>5S20>AsCNCY2 zopNUU#&kuD8o1Zc_w|1FdE;Lp23&a)EnSajTrQ?B-pQ;0Wv9aEL7&gunbtK(C z&K@bD-MI?&@kTIy=YMr^)?rb0TOX#oK|;D)x=~s>96A*QrG`dInn6lBha4mX=@`0E z8j+A!Y5?hO1_b#Y^jzn9&-dqCv-e(WcRcI<0TI;%*Ie4YezNw8LUzfwOP~0ccn}Q_ z>aXWR+OeeCOI2Gk0^WbSIwnl^F#yxS&7`7*q*J2F&J;u%3XIS&8;&7&>F8T(^9bS3 zKJRv~P>_exF#MRPfL(m5!C`vjKZpQzzvBY@i`c5_;)-b&6V~xAl)=|@54^L3%d!^y zx@#xwI|6w*g+6~5@?=E~oFL%;nC8m|HzGl&YGpXim;FWFtS3}>>vW;&W^IGnoiCI3 zYI%Xe9dfsGyzt3X4#blvn|G>diVtud73?aXb(u}MYBu(@1wM8yv~+e=FUvJ81%>7I z7Z5{Xm{#s=k8g=uVUTjO zmp9gBFxJ0F7#z_yzlu0KYFB4c!oQ9~j}{2dvHZrT;;`Bv5cChkW>r$|CCEU7=)9q; zz|NOt{L;s^qGp`pLud=-+b>CiM;0v4)T-lm5HxnqYo(D*n(Ku|0=dG`e%mj=d)iFu z*k;iYf-DQhs_5CD6NFZ7)QBz8C6hw9PZfSX3G+=$ob8{Pma;Q6p5)c|4<#;2#O{sH zEFG69qLrgTmk3pjq_k%zQ~ako{yLaFDB@g)m$DCSfu;KbMIbzRP8)b z^b&(rgu05Q-U`()l(JkIoCA)+f8LRTE6s7Bf6^~)TeE~~%8J6GoS5?HCPTw>!Jc{kk%MC@#^l3L zq<5)CN{%0lPw%!hx+e8irc_#D_Ma*y;|Xt97hj`?a*j;bqu)Z&WP%q*j)Y9?D0+Ne zc=0G?`}n60GKCwllx;~8RlXjeUQo@HP6_$`u<&?1)rg{r#4$2UA9qexxW8L-w8&=q zxbN+F3f3iQ$v7Jma!9o^uUBOTa3$}|&oqRSr^!ZMTQ10<6;+GM#@*w2FJ%DGaC+tO5gD)w21$xH zWM;Pnl%%Z%EQ%6F=5 z@SIgnLs$DFQ3aLr==P5{@qk!J@f~yS1P4nvx>+={IurkOt5e^I@Vs(7nfOB>o_nCV z*9x^#S=f5zIojV_ZlQmSB+1?q>d2ZzrIU`g(9gkNRPR30;hHDPgt~EOFdEe5hZ73B}ew%=tVfn6PCFXl$ zNaLkD+w8Nxvih~#x>vrO zSW;($n#lU9oT2b?uN=pYi}2AVge66MQmoPwuU`Ae)mvchn~09dj<5Df@zggV#L=js zyS25v_j}ke7)D_K<(H-Y_J_&5g>YUDkdL$eyPB*3NRR4XH99vXwY36u&FS0Nbd1?v|L{BkQ zGj15?9+eO>zA06b&2AdJ#Y|5)LORd^0&zH}?A**bf~h*uDdt4s1B7}r{i zciEE7&>u#qPr zGhS>5#<=xishBaSGfZd@7-r%iRAL%rlVz7v^js$aE;x}H1HhAnTRBK8Pbf#MLQX#~ zVc8H_x%;M^XkxD->~$BpPQJh7C$;pppxvx>xHJLwm<>RtgzM!1N5Qug)eL-W<$aqK zEt@IU_2{jOVr4H{bwS_Hp&wH>rv`FsB;=T%qQy%;R=!t!V0viOkVhe>3$Kc*WyeRW zl?Ww}29#0=M|b-6djY6x2Dg=BKc)lMb^=(r?1uvFsfcf?-g%Hu2jx$pD;J_vVibli zK-H$TaYJ0vV>?J~Yk+iHrr+?QTe(rYufA#ck^oRJ!z;`RwSP{J3*@%Wkcopp5^5kK zIVz%YF=>9~>?m=tr>UIeF}A>)*9&ce3h#X$tSAu?hi#HY#a9|<+`jrTQ;F;NSdy$- zQWnPyS9zqTVN+F*HBVP2GjpTO&+w zvt`NOyKetL&P;@?F*K-DHA>uBmMuCQ<-=q>=R(X0D(8@2@bv8h`+L z4D?61Diu1xQpXv?zx8V3`)J#Dys%fXh86FN)jj&vvtY7n<5vhd;s839`dDTWwcidf z{x1m~8d2X>Z4vb1pLyt&7{c~$g=zBJ&6_||5Ij^cLW&SP?>qx|k3Ro=TA&0m9DHBqe|3YNlD~=HVJ=BZ zO=xTYKIr1E@6=P1i2)WR2g!AOx@jl@<~_>?5r8+QED7jE2-^<%Z*+uA1s-7l1;X&d zU$FpbnUttS$*u2Q9WKbi!3JDS#2Qnk25KECZqI=QkXWa0gRGEKdZtwRtmX;o`3p{z zI#%NO)4|ZqISy>Bw@s}p?`31YPGI`J7g?^ya@CS(%#Z3&|ECHv662>m|S!KDPcKRN~7c2;8zG ztA}x%WCXS8*zPXcbykhgIZK*x-1yZ3Y0$eX2@d{93H@N5>=N(gljE~xzT*y67pL)u zN+mhGu6pXT6jk@vI-k8`1m5@MG2_htARiipy(?i9_4}rc%n~psB?*cU(&rrG8XpBh zjRq!$NdWJ7C8sa@pIRzj#2#_3y!^U20^3+NSTVib^hA7o?S{*6zHNC|~g{Wx3- z6g1vv=^kqvg}+|J0;4s6w<6I5uPdeygkhKL7O26FC0>d_^)OhdeRpfo%*A+JWMo*U zQ&`eJW=z!4@Z~8*M``X^7WL1Rokj4;g$|5mYipS8+){OVy{KWCNOY(}U@s;ztM5>W|cV6P;5&J;a89 zAJHNPM?({}pz|6MAB&vuHDx=aWj0tPxG`f<_V^oPjs6-_oSPshmct||1voP_|3_ax zXs!kIF-Ck%KVIFzG0`qv$b8+@)uCf@IGR3U$RKVOUHGIYQ8cBP-lvfvRiHIZTA0|v z|0h+2N=bW!PUqg7Zvk~P!vnrYgqR= z>9qn2QOG9Qqk_YC*XK~;WpC#5e~#*A+Mb`D*R5*eY{xDMj9J!en%q6(rjtre=C;}m zeqLR6c_veRj+nx0^!_UHljFcIE2znXKJ7Ka?g z|4pRAlnOvMyauZL0}HG;8|lJ@A`ygkwCG*h1!LA34whaFhiRU(#1dTlda61|p&+0i zWXw0i`oMevo>r~uZj6oKLG1_veTLyn+v|Ash9r65{<5N|QS5nG`qGiDM&+hCz>lKkja|aE zQEWb>g+s-2R(UcKhFkxnk}a5Wpn)~C6Z2e<|}V)R+zq zfU=XlUlM5pf0)cg4ZHy^KDvszuLYG66uB<*pnh=ST|BH&AtQ|S_VdtN49X0Tv-SM?-g}a%9 z!;9uA$Bm`Grp!JpPGjOGO~j8Hymp<}#xLGCn-VRhWzyPzKbC;CiUP=1`C%!X5zf!m z`A^Npw(g4sw`6@Ay9rA(5`X**FZ6wN4G6Wi0`l8@3Oa28^L8q5a3LvPRG)}bt)^s<->RKeHEN18G=JUFk z_TcFb9zlbHr9=I9MW_;Y^ZmrcBYSlHh#!K^_?4t<{~{eBQls0+p2cAj@+J^f|F+5M zH-8%3MSDKSI)n@Jk^wkz;F0lPA2_2^V<)?0hf>u_A*C1f=jeK&e#tXhTuFoQGK%fv=vrC1cS$9jw~uo*EWF(!T0OX! z#4~^`Zy0Qx_SA~AjscdlAag&Idi3HwWsT?6DcN$Hn#Z{fC9RypGhMqpnw5KVSpPfx(v^+}xtAD5w38Om#5&BY$7;LE z4Bd3=YYeD>ERVu!A7tuiDP~*-yMcKu4Y@4MQbF#H;+dKffC13tOvfv|#Yap2xjyz4 zt~4wR2@N`HsH4wx4oHC}dB7%XAxU^xxz+A%NKq8B%oIJqT1oDZ5a;31-?-cYxaigF zCe_|lar)gjDG4nM{lQ=FLKSr4n<=N=B?n&c45Zzc-lSgPiu0 z!02pB+;UqHZEs>usFj?_=>M5C6Wsuy&0PcPJB|R(o`}IUpv@XFFTdo5)25>w<}ot3 z8s&7qE*uqj$TFC_f5@Y&mUMQX@qy@Be4@w|CVWk>5Lc1J_ zj}x`tKN*T*S^BJZyEPU6WL^&>TfODZ{S1=F1R8J<=pnCalFebNwEJH|AS5Vz3{ zll>UuS^Ls5X*>l)nx z(5J<-xd7gZvWP#j{)P5J_%`q>Wy;z7o@dK2T=8Ut7tJ-!k_Qfp1$>+^^!qe(g0!z+ zEm7AMm$P`}s<_r)YPx+ip1V8>u_gZ#*>O^0pW-2G;$`}yy1@@hG0&u@?icdWFeg52~7`LToC1N)gLhv-@nlGGYvlL zUH3*O#&HPNqeaO1v$uC#&Z2noEPrJbnB^KEydwEW@qNS-M=5@Jq3Hi(4eM;n7xwcTMHfzmCGoho<*>e@mIbf*% zkuD?$M20`awVd`aE6_={_MmR>-fo|HT=6uYd=UMxmQa9xeRiqNf!N^kp1 zje79EOm!3TsZ*&o8%)uZYq(OcJ!=!47v9JR&RC+lQg$7Z{BD?MAW$(msNO?YUeXvO z!R)60oBrkC`>61;)2LWW2mNwTE{D07X+8I(Y=Pe6d$9);atPe2ivMNY8o%N6$CeDG zQ+SrM%Wuw%A&5_i)m*rnf|Z{MoQzpJwk3t%-w*?}OOWvtCF0ZFaG*dLU_HU_&9C|0 zB0ezC1}|=eaw{zMBc>}R$yaPtIduf~KIpefP%-&F1wquaL8&_)b$%Ja<<5?j9qEcN z{|MlKg)jKbes_J2LMpk5tj@d~7!iIehuSvC*ZI2^C~w7{my~^aJM~K22TF$x`srty zhGO_*vSELkXW;$SWw-8pnH>1ua)Gh{@2q#BewTHwWMF?y!ip#zB;_^*WjwysTq{+) zm}_#~_ViJ992I0I33x<#)U6ELpB-srUsGE`%du;{kAvH#xw8TQnKaH%- zqo~Fg+4A@tDnh@nN1i#Z=NVi7<7j<*WL=wCNGGv@UL@e(W$@PQ&(zqmTX*ENuQ&5r zJsbGcIS% -f init.sql. Скрипт идемпотентен +-- (CREATE SCHEMA/TABLE IF NOT EXISTS, сидирование через ON CONFLICT DO NOTHING). +\set ON_ERROR_STOP on + +CREATE SCHEMA IF NOT EXISTS chk; + +\ir ../tables/chk_type.sql +\ir ../tables/chk_status.sql +\ir ../tables/chk_check.sql + +-- Сидирование справочника типов проверок (значения — из DB/task.md). +INSERT INTO chk.chk_type (id, name) VALUES + (1, 'Запрос изменений (дельты) ЕГРЮЛ'), + (2, 'Запрос изменений (дельты) ЕГРИП'), + (3, 'Отправка запроса в ЕГРЮЛ'), + (4, 'Отправка запроса в ЕГРИП'), + (5, 'Актуализация организации ОТ'), + (6, 'Актуализация организации СОУТ') +ON CONFLICT (id) DO NOTHING; + +-- Сидирование справочника статусов проверок (значения — из DB/task.md). +INSERT INTO chk.chk_status (id, name) VALUES + (1, 'Запрос отправлен'), + (2, 'Ответ получен'), + (3, 'Ответ успешно обработан'), + (4, 'Ошибка при обработке') +ON CONFLICT (id) DO NOTHING; diff --git a/DB/chk/schema.puml b/DB/chk/schema.puml new file mode 100644 index 0000000..eda69f1 --- /dev/null +++ b/DB/chk/schema.puml @@ -0,0 +1,57 @@ +@startuml chk_schema +' ER-схема слоя chk (БД MT.Сhecks) +' Источник требований: DB/task.md; документация: DB/chk/tables.md +hide circle +skinparam linetype ortho + +entity "chk_type" as chk_type { + * id : int <> + -- + * name : text +} + +entity "chk_status" as chk_status { + * id : int <> + -- + * name : text +} + +entity "chk_check" as chk_check { + * id : serial <> + -- + * check_date : date + * chk_type_id : int <> + * chk_status_id : int <> + smev_message_id : text + rr_organization_id : text + params : jsonb + parent_check_id : int <> +} + +chk_type ||--o{ chk_check : "chk_type_id" +chk_status ||--o{ chk_check : "chk_status_id" +chk_check |o--o{ chk_check : "parent_check_id" + +note bottom of chk_check + Индексы: idx_chk_check_type (chk_type_id), + idx_chk_check_status (chk_status_id), + idx_chk_check_parent (parent_check_id) + params: результаты проверок (состав не фиксирован) +end note + +note bottom of chk_type + Значения (id): 1 — Запрос изменений (дельты) ЕГРЮЛ, + 2 — Запрос изменений (дельты) ЕГРИП, + 3 — Отправка запроса в ЕГРЮЛ, + 4 — Отправка запроса в ЕГРИП, + 5 — Актуализация организации ОТ, + 6 — Актуализация организации СОУТ +end note + +note bottom of chk_status + Значения (id): 1 — Запрос отправлен, + 2 — Ответ получен, + 3 — Ответ успешно обработан, + 4 — Ошибка при обработке +end note +@enduml diff --git a/DB/chk/tables.md b/DB/chk/tables.md new file mode 100644 index 0000000..133b056 --- /dev/null +++ b/DB/chk/tables.md @@ -0,0 +1,72 @@ +# Слой `chk` — таблицы + +Слой проверок организаций. Источник требований: `DB/task.md`. + +## Список таблиц + +| Таблица | Тип | Набор функций | Функции | Комментарий | +|---|---|---|---|---| +| `chk_type` | системный справочник | chk_type_select | SELECT | функции запланированы, статус PLAN (functions.md) | +| `chk_status` | системный справочник | chk_status_select | SELECT | функции запланированы, статус PLAN (functions.md) | +| `chk_check` | сущность | chk_check_insert, chk_check_update, chk_check_delete, chk_check_select, chk_check_get | CRUD | функции запланированы, статус PLAN (functions.md) | + +## chk_type — типы проверок + +Справочник типов проверок. Файл DDL: `tables/chk_type.sql`. + +| Поле | Тип | Ограничения | Описание | +|---|---|---|---| +| `id` | int | PK | идентификатор типа | +| `name` | text | NOT NULL | наименование типа | + +Значения: + +| id | name | +|---|---| +| 1 | Запрос изменений (дельты) ЕГРЮЛ | +| 2 | Запрос изменений (дельты) ЕГРИП | +| 3 | Отправка запроса в ЕГРЮЛ | +| 4 | Отправка запроса в ЕГРИП | +| 5 | Актуализация организации ОТ | +| 6 | Актуализация организации СОУТ | + +## chk_status — статусы проверок + +Справочник статусов проверок. Файл DDL: `tables/chk_status.sql`. + +| Поле | Тип | Ограничения | Описание | +|---|---|---|---| +| `id` | int | PK | идентификатор статуса | +| `name` | text | NOT NULL | наименование статуса | + +Значения: + +| id | name | +|---|---| +| 1 | Запрос отправлен | +| 2 | Ответ получен | +| 3 | Ответ успешно обработан | +| 4 | Ошибка при обработке | + +## chk_check — проверки + +Основная таблица проверок. Файл DDL: `tables/chk_check.sql`. + +| Поле | Тип | Ограничения | Описание | +|---|---|---|---| +| `id` | serial | PK | идентификатор проверки | +| `check_date` | date | NOT NULL | день (дата) проверки | +| `chk_type_id` | int | NOT NULL, FK → `chk.chk_type(id)` | тип проверки | +| `chk_status_id` | int | NOT NULL, FK → `chk.chk_status(id)` | статус проверки | +| `smev_message_id` | text | — | идентификатор сообщения СМЭВ | +| `rr_organization_id` | text | — | идентификатор организации РР | +| `params` | jsonb | — | параметры: результаты проверок (например, сколько организаций получено из дельты ЕГРЮЛ и сколько сформировано запросов); состав не фиксирован | +| `parent_check_id` | int | nullable, FK → `chk.chk_check(id)` | идентификатор родительской проверки; в задаче помечен «не уверен что нужно» — включён nullable | + +Индексы (FK в PostgreSQL автоматически не индексируются): + +| Индекс | Колонки | +|---|---| +| `idx_chk_check_type` | `chk_type_id` | +| `idx_chk_check_status` | `chk_status_id` | +| `idx_chk_check_parent` | `parent_check_id` | diff --git a/DB/chk/tables/chk_check.sql b/DB/chk/tables/chk_check.sql new file mode 100644 index 0000000..c38b9bc --- /dev/null +++ b/DB/chk/tables/chk_check.sql @@ -0,0 +1,17 @@ +-- chk.chk_check: проверки организаций. +-- Поля — из задачи (DB/task.md); parent_check_id включён как nullable +-- (в задаче помечен «не уверен что нужно»). +CREATE TABLE IF NOT EXISTS chk.chk_check ( + id serial PRIMARY KEY, + check_date date NOT NULL, + chk_type_id int NOT NULL REFERENCES chk.chk_type (id), + chk_status_id int NOT NULL REFERENCES chk.chk_status (id), + smev_message_id text, + rr_organization_id text, + params jsonb, + parent_check_id int REFERENCES chk.chk_check (id) +); + +CREATE INDEX IF NOT EXISTS idx_chk_check_type ON chk.chk_check (chk_type_id); +CREATE INDEX IF NOT EXISTS idx_chk_check_status ON chk.chk_check (chk_status_id); +CREATE INDEX IF NOT EXISTS idx_chk_check_parent ON chk.chk_check (parent_check_id); diff --git a/DB/chk/tables/chk_status.sql b/DB/chk/tables/chk_status.sql new file mode 100644 index 0000000..b5a9f08 --- /dev/null +++ b/DB/chk/tables/chk_status.sql @@ -0,0 +1,6 @@ +-- chk.chk_status: справочник статусов проверок. +-- Значения — из задачи (DB/task.md), идентификаторы фиксированные. +CREATE TABLE IF NOT EXISTS chk.chk_status ( + id int PRIMARY KEY, + name text NOT NULL +); diff --git a/DB/chk/tables/chk_type.sql b/DB/chk/tables/chk_type.sql new file mode 100644 index 0000000..767095f --- /dev/null +++ b/DB/chk/tables/chk_type.sql @@ -0,0 +1,6 @@ +-- chk.chk_type: справочник типов проверок. +-- Значения — из задачи (DB/task.md), идентификаторы фиксированные. +CREATE TABLE IF NOT EXISTS chk.chk_type ( + id int PRIMARY KEY, + name text NOT NULL +); diff --git a/DB/readme.md b/DB/readme.md new file mode 100644 index 0000000..1473204 --- /dev/null +++ b/DB/readme.md @@ -0,0 +1,31 @@ +# БД MT.Сhecks + +## Общая информация + +| Параметр | Значение | +|---|---| +| СУБД | PostgreSQL (PL/pgSQL) | +| Схемы-слои | `chk` — проверки организаций | +| Источник требований | `DB/task.md` | +| Инициализация | `chk/init/init.sql` (psql, идемпотентно) | + +## Конвенции + +- Имя таблицы: `{слой}_{сущность}` (`chk.chk_check`); функции: `{слой}.{сущность}_{действие}` (db-func-3). +- Один файл — одна таблица (`chk/tables/*.sql`, по образцу db-func-4). +- PK сущности — `serial` (d-db-3); справочники — фиксированные `id`. +- JSON-параметры: в таблице — `jsonb`; в функции передаются как `text` с кастом внутри (db-m-5). +- Документация слоя: `chk/tables.md` (d-db-2), `chk/functions.md` (d-db-7), ER-схема: `chk/schema.puml` (PlantUML, c-skl-8). + +## Перечень таблиц + +| Таблица | Тип | Описание | +|---|---|---| +| `chk.chk_type` | системный справочник | типы проверок (6 значений) | +| `chk.chk_status` | системный справочник | статусы проверок (4 значения) | +| `chk.chk_check` | сущность | проверки организаций | + +## План миграции + +1. `psql -d <база> -f chk/init/init.sql` — создание схемы, таблиц, сидирование справочников. +2. Функции слоя — по `chk/functions.md` (все в статусе `PLAN`), реализация — отдельными задачами. diff --git a/DB/task.md b/DB/task.md new file mode 100644 index 0000000..c1e0327 --- /dev/null +++ b/DB/task.md @@ -0,0 +1,79 @@ +Задача сформировать файлы таблиц и скрипты инициализации + + + +Структура: + +  + +\[Таблица с проверками] + +  + +1\. Id + +2\. День (дата) проверки + +3\. Тип проверки + +4\. Статус проверки + +5\. Идентификатор сообщения СМЭВ + +6\. Идентификатор организации РР + +7\. Параметры + +8\. Идентификатор родительской проверки? (не уверен что нужно) + +  + +По поводу 7 поля с параметрами - тут можно сделать JSON в котором хранить различные результаты проверок, чтобы их явно потом использовать позже (например, хранить сколько организаций было получено из дельты ЕГРЮЛ и сколько было сформировано запросов) + +  + +\[Таблица с типами проверок] + +  + +1\. Id + +2\. Наименование + +  + +Значения: + +1\. Запрос изменений (дельты) ЕГРЮЛ + +2\. Запрос изменений (дельты) ЕГРИП + +3\. Отправка запроса в ЕГРЮЛ + +4\. Отправка запроса в ЕГРИП + +5\. Актуализация организации ОТ + +6\. Актуализация организации СОУТ + +  + +  + +\[Таблица со статусами проверок] + +1\. Id + +2\. Наименование + +  + +Значения: + +1\. Запрос отправлен + +2\. Ответ получен + +3\. Ответ успешно обработан + +4\. Ошибка при обработке