From a08e33ea19b3ea4354a7eaa366a0c489080523c2 Mon Sep 17 00:00:00 2001 From: qiuqiuqiu Date: Fri, 26 Jun 2026 07:50:50 +0800 Subject: [PATCH] Add Subsystem A (KIN01INP/KIN02UPD/KIN03EXP) + update SUB04CHK/ZAN01CHK --- bin/KIN01INP.exe | Bin 0 -> 162871 bytes bin/KIN02UPD.exe | Bin 0 -> 157545 bytes bin/KIN03EXP.exe | Bin 0 -> 164890 bytes bin/SUB04CHK.dll | Bin 110073 -> 116489 bytes bin/ZAN01CHK.exe | Bin 162828 -> 163870 bytes ...休暇管理システム_設計書(サブシステムA).md | 787 ++++++++++++++++++ src/KIN01INP.cbl | 594 +++++++++++++ src/KIN02UPD.cbl | 439 ++++++++++ src/KIN03EXP.cbl | 511 ++++++++++++ src/ZAN01CHK.cbl | 16 + sub/SUB04CHK.cbl | 65 +- 使用資源一覧/KIN01INP_使用資源一覧.md | 51 ++ 使用資源一覧/KIN02UPD_使用資源一覧.md | 59 ++ 使用資源一覧/KIN03EXP_使用資源一覧.md | 61 ++ 使用資源一覧/ZAN01CHK_使用資源一覧.md | 2 +- 詳細設計書/詳細設計書_KIN01INP.md | 153 ++++ 詳細設計書/詳細設計書_KIN02UPD.md | 155 ++++ 詳細設計書/詳細設計書_KIN03EXP.md | 170 ++++ 18 files changed, 3051 insertions(+), 12 deletions(-) create mode 100644 bin/KIN01INP.exe create mode 100644 bin/KIN02UPD.exe create mode 100644 bin/KIN03EXP.exe create mode 100644 design/01_勤怠休暇管理システム_設計書(サブシステムA).md create mode 100644 src/KIN01INP.cbl create mode 100644 src/KIN02UPD.cbl create mode 100644 src/KIN03EXP.cbl create mode 100644 使用資源一覧/KIN01INP_使用資源一覧.md create mode 100644 使用資源一覧/KIN02UPD_使用資源一覧.md create mode 100644 使用資源一覧/KIN03EXP_使用資源一覧.md create mode 100644 詳細設計書/詳細設計書_KIN01INP.md create mode 100644 詳細設計書/詳細設計書_KIN02UPD.md create mode 100644 詳細設計書/詳細設計書_KIN03EXP.md diff --git a/bin/KIN01INP.exe b/bin/KIN01INP.exe new file mode 100644 index 0000000000000000000000000000000000000000..2a966902a9add1cf3b1bb46336b09dc6ef8eb73d GIT binary patch literal 162871 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%0A!@8&=Zf}zSs65 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 Z>8ZW1N&#m#k5pe&ufMVtmvZs&KLF`@x*Grh literal 0 HcmV?d00001 diff --git a/bin/KIN02UPD.exe b/bin/KIN02UPD.exe new file mode 100644 index 0000000000000000000000000000000000000000..d5f9fff6da7fe038474d73306b6ab475340ad691 GIT binary patch literal 157545 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 SENsKH4d3{iMVTlrru`o#Ctc0} literal 0 HcmV?d00001 diff --git a/bin/KIN03EXP.exe b/bin/KIN03EXP.exe new file mode 100644 index 0000000000000000000000000000000000000000..9b1fc6405e71cba6284a46e1189dff7671e67bf0 GIT binary patch literal 164890 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%0A-nO`*0=%|2}BdIy(54!3+msRz_& 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഼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 literal 0 HcmV?d00001 diff --git a/bin/SUB04CHK.dll b/bin/SUB04CHK.dll index d72a42e53a6753b788f2f32cd000e202aefec9e3..bff4aaa4aa273ffbd20700f3de4997f726df641f 100644 GIT binary patch delta 29350 zcmc(I33yahw(i*#PDVm1l7f(dR7ij@#UxB&w2-M7gfIyrk^~3@2oND)M5UsDCX|JN zqZ}L>i#bXw!6-yjI*!CSt=%?_c3bv!2w-bkTQBXD_piP8IW?s3yL`TTzjr=P_TK;c z_gZVOJ)TpQ@UIWUYj#G|R?ptx7_&+#V9FL%QQDL~_85z0ppv5~N)~Pluy~|a+{$-f zF-j;8yc6YdsZ^jV2WhyXWUSeB{_25VMR5{XuPEmtC?l_O)R%mYv?xlYe)G-Dwks#1 z(+x1XE4{0F`Glg>Nip2YmDvAR)=^BPR;BqKRQ}+60#TCVh z(n?hda9@QxU;B!s<(4ByzE8y+a5D{ynOMH}9 z$_lidmZUDcf%SkQanIIHTGFDLBw?ZUR}dT^8 zYm-p2qr{uju(s22mhDoM?M-nzSE9z&R#u~a0iZDl?2;8ux8ih{M>^f93#XwM-Gj6P z+O+V#Jx8MC4&Qp&61ROZsyRKem8j&bnVXr_`py8YHhfsr2M8)E#2wJy4ez_+BuegZ znA!dz6rT-8C8f2vC$D;O3-a^&lNTFTI^DMOyk_jnNLst}kyQ7+8N(#Aw(_eh>d4O0`5jBA8)MCL{Kch^2`TU4*y zE&CLuy~XKvL^`)ORU|-A#u2yU_8PSqYA!{eRp%k4Ai33f@S!{hY>XE489G z^!0ni>G^GD6$mw+9H7pcd5uu?&}3xYiO!neT#i$e+z;K`N%&%GTHMJd*h<^_0+qjy z+t$N|&gO+L+FO~JB%pfv|FRQ^f~_<@*Iky8{2VR z$VVMmbraJw@3OO|AktaWsy!Lq?Z(Mnfz?>uY6*ns_xqc;3vt^=Lr{xK6M?%6inhMQ zY6^;+?um`g8g(2n$asDby4dNljU7da+MP-~h<|@XON+@~;-h}&)U8dOoi!6%L3(f` zktVh|JrjL`{P80^)TroD-|SD)mtgvWKs{>HX0+^C-o8c(_Gy}iqGrh>+VPmoq(Z9X zvDK1hk2-~`psq}NMEiTp=%gqiUMR%hVz7$ZuRpAf?>r*uBmo{um075JAb^-g?ed3rvf*}5xc#DoyS=LL)y`I!R3x#OC78w`k_;IiFfr7L78d&nE zX+b_*$dJK_G+{G1f6UP4$Mtc2M`OpMevafc=_d1T^(a@3%#$MHv6TqkK1w*{UW2kh zQq&!r{0~b^XcqX{~N^H!yWpHLIrkfCjv17@1m$6q za6AWB2$7y`JcD1!z^aKBDZ>Rm>*$1?l*6yxmJ8c&g zw389QJ=RPKdFJA7&xM?3H`hn&@75+`U5Oe@Cd3{SFnIIe3hn9Y2$AvF>WS!4S7Q8& zE^5DDQo0$GCj@1ZN%`o0OdGD|TS4~N9v7Splk=>hrp2Hf6%>SATH0e!o-inf1m!Qi z49W(BvcsV4=MBEmPz?Sldb+m z6Ycld9uS;tlkfdfQ#)Ubg9_@+t{ri5Kn@dga&~JAbYPX4u%VQfg7)+1) z2Mk@&aZ?RWvB-FA`GRu7r1Ui?V-3nsLD^|iIvJE?gOVpGt4+!$yD|QF_g~)4BjT}L zEjUh-b4Ezq>K_ftKtZ9YCj5Qapgd(z`U#4~q*NM|`wU7SL2-RdL!Yl*^9)Xz!O0Mu z=S@nUL78Gu?1J*3Nr^KkeGE#fplmWJU+$9KA12%Hu_X!49Fz09!SRWV$JSj?a!kq* zgYtqwNf4A+ld{#IJY-Pf1?6IzY_&@*GB~#woGyZM*5IgP49Z-C5+f*wOiGeL$u%gE zf^w%x`OjL}>@EgH9Zc(wM_p`k{$Ow}iHyf)5o$)6loJM}*`T!Np)q*+Fey6?%3*`@ zlc0P@^M!ZzYDsaacNv_23C?>a$7!f3G$`K-%5js@+n|g#DBlXoy(YzCP_afu5{atV-nQERlDDNATi-MA2QXVuY^#h}Z*#0Oe*(T+XL3z%gyeB9zCgo0pve%%zD=4k56r-J$Z|@4%n%$KMV+aI~Q|o-!`#{^lM~;!&At`cG~d zhYv)?qyA$hxjyln(|yyq-zm7x(2q;DxRYU{b2dd#GGbHg*4LPG>&tA!f4aW7#A*el zXU*joeHM0^HPyTX8s185^~HHcTLjm|w*C^ffABZfg0T zG!EM?!}#(L<41Pz5O~y|OW~D#TBP%7z{A)>oFfn98M!=&XNYb-R9D;NdHkpen}??g z$eb?zR2{kXvUOu;dcwx>`oiVEixc`>)NwnCpx=sv?j$PV{mn)3{ze^!ve-+?xEpSD z0gwx?GDUed41S_Y7#GlCKT42W--Q&#A66ha>&U0`Hm|&W$|rZtin?w zzd(3SAYMQ6m_X|Mh%S(NKeAmQO@3s<3bKE;s?iS>3sSQmnJJJKKQcxj=lsY3f%yDL z4}rA$kqAQg=6hWY_3c@;_X=u1E)2eCNXIoMpkQ{;pSt3Gr~1d`;>F;F+b^M8xTlwv z*Sgggf#W$mLLhSym7_rD4Py%O49+<}+u_br>cSt(eaTvPo-! zQG7%c6Q#6J6z#lN;;~KV<=QrKNz}jQLVG*vXUXDkL@|dK&pHaY^MZM#gj-rbqO*=7 zLvq%!EWYnhCeYH-b=ru8_g(G1qwm4%#@hDYKinG*#TBeW7^dXtp?v>2AH9qX1A^&mf54&6Oi`>5L}rfP}Z9oKJ*B`<7i22fn_ zQjR*^U6GmftOaITmy@*S{FItD5-xzSH4Hy$m)GKLHIx@Pmk#}4331-s{(aoe?qaq# zFVUXtKGs$qNrJN&p>f+jr{=rWjY~9^nAm4)6b9@3&g1xp5Kd2L3>^FZ4EeMP*} zQxb_0K5o&to5n33hmn3(9R?AjVC+Y9oqL_0PF1*HMHtYbzP8r$Xbe6;*h&#}r`}6R zzgNzxVW>uz(=#D6$62HPSft(7!(oXZpuNyz6T4Fzl2kb&vNPl(eq4WFK&Ro&T_H6s zZs#m=(mkf(PI}Rg9+rd1t?nw+K1<55loo2y$yZyne%h$yF>JJUYw|kwmUba|9^0f{ zlagkc)K@D?NgBVfFMNOE2k7#|(#yiu{m9qO6CH@RxUunzu};{w(#qgY{q!az+dr%r zjE{DjIW*>0m-co_|MXW$vh|fLS^%8wy=f&8!w%yh->vSvNlQ$1x)y;op(b*AjU%$% zc6JNtv}I9E_k>I`Hk$IZRMe>P$hO-)1n1HY{&B;l?aOOv#JbgA7V+MV&TS%#82w7k zbVSh;`!fXXwsl-@Yzqp`?XOp4yXR)+Ow4V%6uVseIJIxuNlq#PN!IrVuSUIfk=DDX z{f0trA#U5d=%Tagbtq9E^A8DNGM`LhdTsp5tq$ePicecJ(I1!oLQ8QkQF;4asNz-= zP}+K#ZKO{glttRUo;j&s-3ZUlsxKp<>#X{s%(dIb-=SUVnIHKefOgy9JG235XDr`l zYM0WgEh{s%jrJ{;3mMvX_OX`7GPI%TTP*!Dv}e-CS}yd`zDwU}xuI9X_Fh-9u7~aD zNJkj9UYe(v!1vp=$1~EcH&@VZOH8j#X+OX3Vl!=WE%SV_jC%X}6uf1$=kv zhm?415x|K0KJ6n(&YFLqUlPNC@s4)3`{L57U;xzE|45_iFN=C@D2RGBYUTALS7%|m zU3!7$UchL^KzUuI#kaP$;Zo*3%r$b8Sc?BYrLNw>urZt3dq1>MIJ85in`OF6rVC{{ zRi-0l+FzzgGL4q$4;4b+MVX$L=^H%l-`@K)&lnESD(Y}<9dmFFqFfPs4&#Gm+`zN}p7l_aJa|+~V{nXF6uxbZiA@WXAx}a9nvxms}b{(i8L@w)(RTljh z3Je29|AoA^2!^%43`y4N`&%bCMh3gz6jCl26)Z0rEy}eLFGtG1exTX2j_w|~&?UrH z>Gj+x*G;6x7*3T++>pDLkQCY2$U@ik&8LtZ(((ad`3w9 zx)AwHznt4wnnMW2qGEJGYlwW7UjffW&JB*h>=1cYh#V^?znFYLQ=B1$xh6qmN<-xH zLgdvUa_o`(G8#}9BA;)_Mf))ZLI?{Cf=pXOq(hUC=$h6BwZgtZ|GT0`XPLgbP2gCkHLBF_qu z-wZh)e})6j5W@Np1*IYK4I%RC5IK%M{4(^{g~)M+664<>G=~sydJIy~8Y0K(G)NvP z4>`tmjpK2UJS#+gt0EU;!vSXqVRMLr(h#{_8JwM`Y`}x=e+;}jGjFIpFDGx9Juh$M z(A<%E##SeF;7g8!en z(0=X4hAlbMJ9QNnd}BmfG!`iih2uL@Oeq*`17+MA>{)i^vMS2Oc)(TSTdwI{5q;!y zkY0m31$hV3>A3C47a*O5I}`aLr1#;@LY~r}a1TMA(qHnUqz7^PkgrGj5$;cs_aV)} zVXhTByHO z_28b1d@a)XqZMTV@2&*?vdlV_K4WtBP^c9 zTRP>06|R zOf4r#KgNfZXB4HEObrL}WZ5Cp88Tfc(64Vww$mtq zmt^{uOh1sR;n4p^SMhD{3j6ARqpP@m<;wc%f1|79BhD4|)&I4tw7bUjiAzwHu3J)A zylh$F%C!|(Pmhi(wl#5V<=PG9B}*#`i_6NO<`w;uBP>Cib#3=<%|YU_lHz46*RD_+ zmS4NV;-X3XKX8|=TmrWS4ar`{jVlSzc_sJqe@B`&arTUf(+B4n%CeyB|Ltyga^i4{ z%fYuVCDCj5I=l74=4u{584mrA9NgCaIolL<-w|hdk=aKHXdv`c zL-~gshZYd@Xp-b0Otnhu>iElUVaMSGhl>tZ9m=MMW0Up}lHNjzddl7GZ;WWkZ5Bb7(0j_f_+bscFu(sbn95#N!^N0g(9N9{-R zk2;PnI9hbH@@Uo3y+^%A8;>>}J$KZ1^zu=qF0syDmtW_oTToY2S6Nq8=c`j5i+s%b zSmI;$V>!nh#|n-W9VU#4m4@ddm^HCU3JB(d3ub zBkQi+Q?H5?XP9fk=(kXErdp#EoMve6`FdA+cdck@P81z)2slVU{nUbJuRQk@sZ_^4 z%^Ix?7L?rtM7i1XrH!Ld)bMzs+F z&I~eD0KhnO-Aq6g0OKW`gF6GDO1_0VOMnl6@ft3T0PA(uD0=TkO6MDA+n09FSRV$g zVdIQzt)1vVsXeziNo4-Kcq|ts6)t6z(W;92C5ZZ|IMju)*->E%uku1s7ALe8t?n!c z5m{GJjlyDkx&T%uD9S@!c`eHZ)Lme~5)rYGv%JL#Nq$x{XU$@{N<=*uzf)}I+W#Tb zgeCS=L7xLRra^HSo7HJoNr5W-)<@~E~((1+=6BgYXrew#(3+;9YB9dj{ zJ9w8bSTay#I3iDq--fsV;v_aZiOo_XrbxUVc&Q)Ho+0r^frn46q>^^qvYyHG_~f>mUTZ21KW+n+&wDHM>4phE&~wTD=N%*pi=Jw(8U@R#-F&fCpT26eBw9s zt@tp^WjrEU3MG2H|AxKR^rI3}ZU8eL+6%ykC(^6PiSyouA^c(Oc zK16~|`Oqcs%}RfXx0pCt*|?!(nKCFjvl9j`tlS{1#6s6H=o-@xcvRRqSw+B`m9YZ$ z5v-l895U2+;uN-)D$AvD> zv1j`{2BpNk_!=`^(8B)uN1bLeGIIY2-^J36)JyX)LJ%=@8Xb^6rR!2Z=0vO z32M0Qw)rf@cuFOwR~BwoqI1w^=o;?ZSGT997>~I`SPDYtHJreocC`U_XexiO)?U8j zHkGf|4db`CJNIoR@8MAN-#TMgSW{d%2M3gu>(*{i8an531)mb5;kzCCm|A`{dA;}E z-u-;CTK*dFHz@2g7D4Ppw6`1X)Zti-{?6H--@8V24Nl*E2YE8euSe2+L1` z6~8jbW?OI$j9J9F$M5T|wR;8*`Bt)GG5x@Z3Ue+L)ht*!>DbtNAnLnwB*-&b;m$E# z45*WU9^W}Qb&q6`#Xgv`hQ*_VYp~cQ4+>LBp^{5b+I^!`kt@7!aB3W3(%}ySs@pmD z_XY?bRZq4XGW_=X^k=6IfqhGv;=sGd`_sPuimNQewX3wYS#}=(0yP)xtB{ znc6WX)JZ^5y9TTKd3eU{>Z(3v2C96QI^pAhK)s5cg9j^721|)Cc4IS+J~?+3Wn?KD zoWtFCc31zTb<*Q&VoAvjmOIeoZpW!B8-Ct(A6B+(3e7HUp6cVdOWJ_d2_y!O>J(zh zrg|Gtt*6BM1CJRf3#JQ=rVCL;qzVe^LG*G3v$+C~#PGJTd4JN-*#W9933^mm zm7y+XNr0Hgp@>9U%l$pY$k)ETKiBn^oNddxC`y?aT`W(D`cT3X0lPUoD=N%ksE)cA zQ0sud)@2FDqE?fr1^;P`Vt4QMiBH2()Hwx zM;5jRd866)tyC56|IU4L$M=(}eIPB33UxbtsTA|(mCM5Kf)pxR;Xa!-^3ki*ayo2k zvmPyQJtmKxEJ9Jz&Fk#oJyD9OBq=lD`Zh&W}srflj0B~6sE}iSk!t`K#YmB zieOyqk?s__;po(%xHY?1RdcvE{k^G0L!`>#uoyl<7J8x3cbY7~KN=%S7n=mgxoF3t26HKh|}MyVkfrMdtpz|F>!}A5S|D8#QK%8cip1)!O0Y)b}UW$Xw}D8R~wH z)jl;-E#SFNpBf@_sSO!1MTC*dJ%pCU4WrbSVWeeW!x)+KHS|$^9E*8+sLHsOiBB(3 zb2xV3>2>NPp6m8ZpDv}8BYixhO?_raszXArp__k?rMw$@ZXf^bKCr^t}wKqPi@~4}I7oP2H5n1hv=hBkBa@mgGi4XRB zjTD|Rp3%~uPcKs>v;rrmL{RvIH!3M=f)r1Hc(f3+JWPS8Fh8fKMx?U~e zpV0P%u~cYy^7%ht{ozCBo-^4hfBMo+pGirLq?g`^&;$7KJ#HGwyULWv~N( zWjO;YEVb))OzpT2B=``fO9UMZd<%s;ct3PO%07hb5XceK_DhC5mC1*{XSry0*g-a1 zvDzf~9O}@YS>QUqp*qPl4C2zIoOE)1oo^)n{?^=2b&yE2zTR7%%yT1Ow~NMUg|GKf zA0cP79j_l&`BP}akT>pSs+~9U)i<*Rs9kr@wWp%AZaf9)0U>raCyW|2q@a ze4eX#XONo1b4T9Uqw=qlXye|UtGeimCE7#p_8eRxzhd$?^z0$ov-yg8zl2W!e$Iqr zUf}gEy^A>~%(skEeLPp(GSc-=%AxfdDq#SryB37!W@7g`E^)H)D9+sIdIlSRk}%mg z>4(##=~n^2FJMcgoz~=hCFa@yzl0i`mshS`S+TOXOiTKGt_()O?}wz)lU~C;U+oN& zPghCbtYPxZeebtf@*w@}x78{?TsKVmXICaqx{JR9lOJ9iTE4e+68mn$#UJ)qouL&K{1N;T$TMn^t2uw&e}y^>Rlq(?ZWF* z_eC(xLT>B5quEUnBAB`QxXvt5-yhA=B@(Bn$FYn-Ei}+V9^@u;$+@Eo_Lm_Lk(@sv zB3-ZlK8_{mgJM{+${#EB>tfh|bpCh-F&$y)nvQz`deHb->NZjBi5NCGibo0ZFnv}G zON&RpDs7+|Z*msvES@ZMW-;Q-r;q8(Mu{lucXVbOqRg#O&+Wo`>fK{my4Z;IF|jN| z?DTpGW%=<%_r#*UcnS1&EE_P?c>6ODmg&MHgK`c-lP{Ub7Z8YR0&c?jI;{`t!p6J! z(hj%^H(f?mzBQmcoTGl6Zz#ZS3&Ht@1Z-Fc&bKyTH6b|PEfq!ox(n+kM@ecN8z4u? zb#ZL493|W1*myZg-li;H>~xzI!QcyUQJf{qwlHqf$U6-FnQ{weD=9TI`zaT_Kd|Fqn{bg zdWJVaQ@zORM@F-57Ns)@dRf{8xMvLOWbsMzPz;O~nV*Jyd5k_|44Y)BmDn+0RXm?` z^bcd0#bWKeXC6yB)piY=&MXcp^y-!f(l70bvV!47^x(V^d4)OIOBH?7ICk2#v~Vc= z5n~)(t%NB{3q_~2@sdD9w_2gc;NT-ZT=XbxAoy$#S3v-hn?p!>Ad*W+tsij}=F+pD zQtyWfa|aXB5{OXr`6Mxn<#Mm-?+lp;_c|vK;a(R6BHZip0K}Ec-L4IQ^0?Rafe81y zB@p3Gw*?~HX)C-j9LnQP=L90$>4HFn{`>$!6bNyzYXcGPb$uYhoo)$026Ly|0uk=C zwUghW!QAPbKx8mI$twkc5cj$~5aC|e1|r<)`apy`-4cj!r`rM%?z9!>d3cF?Y2lC@ z{sCN0AjG{c2t>Ho<$(wfb!{NRovsf=xYI3x2zRUEKOpm(x1AP4RsC4#(XDVFm<4F zd0}2oHkOG36IoK2J3Ko#mm`Rb;0(=1gUU?~YUO65(Y1j{UN!<#Zz4+y^Rmf}Ww?bN zWE58_+VM*doMsg}RKwViY`9-)l7I}(Mia@Hs0Ji28)2vnL~`+MAEhb~K{N1;jR0gs zb`DD9qR^9FQBqma6~!XBfVB;0w=Ri_@>ix8xR_0U!oi}{M!?bfC)c6e;$YFNQjc4} zdgwV5ShV_k1bCZ%^Ll2B$pQ`I7#fD?yViqHIe}$bO0D|73D`!;Y0*#CKVHZp)N-7m zna=KEX?jXEyGn0$v-reemoY1$4FTXzAy>(HF5>+Fir!-)>)QRx4zwyx`yC*)GA9G6C8RM~ ze~6GRgj^(~DOvv~A?FC0;DqL^4w{>j^%;}E$%9zmM;vPhPD`?0N1S_!bD20lVW0$e z)462bG8vrDi8Ff&IQZ-*gyT!r7ZJw+vHn~7u?#;ft;zaHf*&Fzd@6pNA-FABw>km; zli(u235^{zUQX6m5oZR~I!zp}pR;^rSqZv&EYp2cG5C}ey{(wp(y9BEay|vb*+R^B zLMNbdL5f~9lOXn* zb7OB$u5w4$D!@864`mwB&o-~7JO%-jT zznmwo-vG7qHl^s^nJm1|IV(*%y7>nun{nhe5vuYugte*Ec$@|i$(gJdYtuiOkD@+o~5o5n0kES()iu)^oCOnt}oFgj!oOR{)VdAx)-gY@$b)>Z#q0aH7T zU+9(E#*f=;)qQhdsh+3lVdLt!h<7B9<BY|I8S@a!5XF1vv3D#*g7LNP zzFsn}$5?sEjO)7;!=8FQ&>^px=x0Dbg+Ppyiqew84fuql)kKg{{sB&TnlZW(V=xPS zL4#dFzln6sm4qA}$93qWX9^&@WrDbL`8 zuGeKV46Q&TgLpqu%}g;ke=vE;*gw3|6EUSFvPsBCWj%o!=(9cB(#kF?DTk;Z+W; z4$AWK^(7lhDiokJ17f_rh3rR*y^DY7jxEAG zU#u@Jf`xkFQb5&ri`btm1w`+~_UUgH3lg8tOSl{4%JpcrPdc~EL`#6?^bsyEH_^>N zTO?X)qB_umzJj~TM2`clm1voXz68{oCAe!%^gYrb(Q*@|4>o;SJV0^vy^R2Uj&U8O z$KS+kMoabc%Mpc7Phsq>V3w+Y@boW1mwEf?1qfvzJCz?9EWUoc69XmD`lhk$D(c9V zYcM71Met7R)0QK6;Pc+{;j6GTxWZUC?=7b2zpG{r(Mt(>`*QS>FTjnSrSR`VeS9f& zv~e9tDQh;Y;9G{5Uc-|v^MC@zzEbp9fKt6|HA@jo{lJwhQ{|QP`wDUPDPPGxvRLE% zL!x{YjQy-Xu!5=8UiQ)7i0Vq>f! zZZ-A;M}Y1>lp&tUVfqhcLMft=5#8SihQl1Xj`h&!r8yyoZq}(M*03~YDGyNAwie2+ z4b!`=gR&}kh&8U4onpbS6>!cQG`TkdX%akZFV0(EymndP2CP;C^m23%>#sLLnSQ1k ztCMp*OQQX99rnv1&=a&@mcz6!`czpt>&YzM0H>b38PO}!-@h5rD;S_#v7E61dJ5WO zu``{wtKQ!({bB_yZCZ`P0^f%pUypsbB|zO98+d1Yy#eaV2Z&+6%xvQ0Xi%+0mz(G- zK#K;7)e3d0Dp;?$95jIDMHs_5S_#wB3s^V58*J{WOBFQs6{~+7Y}&*!d(-!^`AAi= z#UBIaFDnI8JyNqAKZbAWpeFK))Ep!=1-C)Xr=(^}2Q~D4 z{r^5T>06-Y9a6IdKZaL#P?LB?Y91vu({G0wAJk0Q-9e50O4PtzRHSuOK8V%p&r;AA zL-7>)1Sfb%XZ1@(Zkk0G3u&Zu-se?}EuhRJnUcktH5xq9FT7MZYjBYh>UtFPIg%zaVN_dPA?RtR;i=>igf&L6a31*6H~q! zKc-kZsHwaXH65mWseTw<>67k)PJAF7;#$?O(z#5}xC=U8A)TLh&{_SfbQbCRN$0g& z5r7Y%czErvQnN@;+X^*JTd~vcy%G(&jl%OJnH{?gW)E~|kN1kyXryK!H0aNhn!7uw zskhEEx#`;nluynOzX%Z9G zSh{L)8VsJocqE_~MwXDJORd4u)vD;$d;Ck+KCyKD+Zq{qi;G3+Utrm^M2gj`^YBVz zJ!Y}`iDK4+HR{uL(BhXZo>cy=CVH^u4=Y94d)#oWoay#L@zU&CH_NhA%Gbd;R=w7Z z7sbZgyLf$2HDd7_1jIFbpkbL_NYQs!6|a0DMaN-9`4MYSQ4o@Z8U->sf|CctA(wiA zj0Iw}NgxY>(AkMf0x1K+%60d>Shnd8jL}J7NaznPIgq9J3#1W9mi|7dF8(Ul6nq0g zn|v88sJ{Sln$8rKty_wXND+r)yHpng&F6v)^dwuj@MSp383d#r-!~F&AvpAvX{C{V zpVaT^bdcz?Oaw_*TMWdQSi+&zK)j|yWaMrj!7+V^5a?;gXSAZ$Q$Q5h@*{5&qLc}O zAbkQzJj>W+wJ$lz9#AbDO~PagKzadb3~I&@AjW{V&_JNCU@LgHIAbU4=_-IU$BYCy zu^fo8(+W@Ul?0_ONauDS3m_zi1m|HO^qna`@>?Lmo;(kvIjGi0Em~OF0&o@?TfOq!a`CN5XK)s3P$2O zBaA^#X98&pGBy~9JqQ^OBtIz9Gl3{p^uNE)N&tNdl-g-gmg2Vw*Db|J2x{3KR1L$= z-?Dpv1V`vWAmu^EjsWqR$SvzvR+K;u9;4|GW7uVXJOxszNrGJY9T5LO!wXdW;^T7u zi{<`We*xz$EQ|gD`y-Gr2EK&JQwgi9_(EEthCn4?qr6H7&z%TCoRJ8w5^ekc*>% zR0R##DL|-2{yDV>NK;U)+ewd6i~3(tb^!8nV^kaF>2m@lC&>IEaLR*vu>pwjWGkBS z5)k?{#BcsjK!TU^&wx~$wrKNIzR_nrz---H%x)u4MTwdcsjq&3CA+$#SQTVG3rL-* zh^h<+QjHspqnfxTqLdZX`o%yTW|#4~P#ijh?*PXaRI7$gCbgz9R9i|17XLsaWBb6V z4|4H15Zagg@n{ATyjYzFLJs>mt;87^IAFh}b+RqUBQ+lVYC1$_x&txZ*^1T=22vVS zYZj0KqwlGbQV8T+kkjjcSc7Wa5s!89vI+4c%u<+_o(p5UsTvfDlLV=zUudMJ`In}r zfY^hOmw>zintuY*uOJz(HiYIcfw+9of|{~lJ6(ky3JOsdAk{&tQ-Ijbo<>zA4+vfU zP*3fE+(@;|rV{&RAOl@NEBrP<%|Suafzba{1$)xPLqO_L^0(|XkXmz+lj`$8g4dWY zf#d|4x8O@H7Q{cm>z?#I7hL{!3KItPw7$b1_RpJ|>q5eUtf znSNt&*zStVwr-NUasf9_s+X@Xq0L=MG!ZJLpjHb~(H(!+I6HUnsUIF;A9RYQ%~AZ(gH!M9XP20jfWW_apg;Erz7qQWK^DUj z0%gXZJJ4$%#+Qix^AJ9cTXdL3pZfYRTgVbut|>44cWiCuhQw2aN7+<%s;Q2JvG~G5 ogDU^@!l{=YV>2y!|KGBju7)VUAHDv!>`{$9(oMhX33ki>0b{hTivR!s delta 22776 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 bpb%W&&gTjU@W!ZDF)~|juNza$8>9XY^ra46 diff --git a/design/01_勤怠休暇管理システム_設計書(サブシステムA).md b/design/01_勤怠休暇管理システム_設計書(サブシステムA).md new file mode 100644 index 0000000..4b144bb --- /dev/null +++ b/design/01_勤怠休暇管理システム_設計書(サブシステムA).md @@ -0,0 +1,787 @@ +# 勤怠休暇管理システム 設計書(サブシステムA) + +## 概要 + +休暇申請データと打刻データを処理し、日別勤怠記録(DAILY_RECORDS)および月次統計(MONTHLY_ABSENCE)を生成する。 + +9本のCOBOLプログラムで構成される。 + +拠点間SORTやCSV変換などはCOBOLではなくJCL SORTで処理する方針とし、COBOLプログラムは純粋なビジネスロジックに専念する。 + +### 設計方針(カバレッジ拡大) + +本設計は、サブシステムBで未カバーのプログラムタイプ・ステートメントを積極的にカバーするため、以下の方針でプログラム分割・構文選定を行う。 + +| 項目 | Bの状況 | Aで狙う追加カバレッジ | +|------|---------|---------------------| +| プログラムタイプ | 6パターン◎ | 未カバー5パターン + **SYSIN(P28)** を追加 | +| ステートメント | 主要構文は網羅済 | SEARCH非ALL, DELETE, EVALUATE(4分岐), PERFORM THRU, WRITE FROM, WRITE AFTER ADVANCING, **MULTIPLY, SUBTRACT, ACCEPT, DISPLAY, INSPECT** | +| DB操作 | INSERT/UPDATE/SELECT/COMMIT/ROLLBACK | 上記に加え **DELETE FROM** を追加 | + +--- + +## システム定数 + +全てのプログラムで共通の前提値。COBOLのCNS-定数として保持する(DBは持たない)。 + +| 定数 | 値 | 説明 | +|------|-----|------| +| WORK-START | 0900 | 所定労働開始時刻 | +| WORK-END | 1800 | 所定労働終了時刻 | +| LUNCH-START | 1200 | ランチ開始時刻 | +| LUNCH-END | 1300 | ランチ終了時刻 | +| DAILY-HOURS | 8.0 | 1日の所定労働時間(9h実働 − 1hランチ) | + +--- + +## 休暇種別 + +| コード | 名称 | 給与への影響 | 備考 | +|--------|------|------------|------| +| 01 | 年休(年假) | 控除なし | 有給年次休暇 | +| 02 | 事假(事假) | 全額控除 | 私事欠勤 | +| 03 | 因公特批假(因公特批假) | 控除なし | 公務特認欠勤 | +| 04 | 病欠(病欠) | 一部控除 | 控除率はSICK_LEAVE_RATEテーブル参照 | + +**休暇種別は上記4種で固定。勤怠ルールはこの4種を基準とする。** + +--- + +## DBテーブル一覧 + +全テーブルはDB2で管理する。COBOLからは埋め込みSQL(`EXEC SQL`)で直接アクセスする。 + +### 1. EMP_MASTER(社員マスタ) + +全社員の基本情報を保持する。サブシステムAでは参照のみ。 + +| No | カラム名 | 型 | 長さ | NULL | PK | 備考 | +|----|---------|---|------|------|----|------| +| 1 | EMP_ID | CHAR | 8 | NOT NULL | ✓ | 社員番号 | +| 2 | DEPT_ID | CHAR | 4 | NOT NULL | — | 部署ID | +| 3 | EMP_NAME | VARCHAR | 50 | NOT NULL | — | 氏名 | +| 4 | STATUS | CHAR | 1 | NOT NULL | — | '1'=在籍, '9'=退職 | + +### 2. ABSENCE_SUMMARY(欠勤集計中間ファイル) + +サブシステムA→Cの連携用。KIN08DBUが月次集計後に出力する。 + +| No | カラム名 | 型 | 長さ | NULL | PK | 備考 | +|----|---------|---|------|------|----|------| +| 1 | EMP_ID | CHAR | 8 | NOT NULL | ✓ | 社員番号 | +| 2 | YEAR_MONTH | CHAR | 6 | NOT NULL | ✓ | YYYYMM | +| 3 | ANNUAL_LEAVE_H | DECIMAL | 6,1 | NOT NULL | — | 年休使用合計 | +| 4 | PERSONAL_LEAVE_H | DECIMAL | 6,1 | NOT NULL | — | 事假合計 | +| 5 | OFFICIAL_LEAVE_H | DECIMAL | 6,1 | NOT NULL | — | 因公特批假合計 | +| 6 | SICK_LEAVE_H | DECIMAL | 6,1 | NOT NULL | — | 病欠合計 | +| 7 | UNAPPROVED_ABSENT_H | DECIMAL | 6,1 | NOT NULL | — | 未申請欠勤合計 | + +### 3. HOLIDAY_CALENDAR(休日カレンダー) + +祝日(曜日判定で休日にならない日)のみを列挙する。 +土曜・日曜は曜日判定で休日とするため、このテーブルには含めない。 + +| No | カラム名 | 型 | 長さ | NULL | PK | 備考 | +|----|---------|---|------|------|----|------| +| 1 | HOLIDAY_DATE | CHAR | 8 | NOT NULL | ✓ | YYYYMMDD | +| 2 | DESCRIPTION | VARCHAR | 50 | OK | — | 任意(例:「建国記念の日」) | + +**出勤日判定ロジック(全PGM共通):** +``` +1. HOLIDAY_CALENDARに日付が存在する → 休日 +2. 曜日が土曜(6)または日曜(INTEGER-OF-DATE MOD 7 = 0) → 休日 +3. 上記以外 → 出勤日(WORK-START=0900, WORK-END=1800) +``` + +### 4. SICK_LEAVE_RATE(病欠控除率) + +全社員共通の病欠控除率を保持する。 + +| No | カラム名 | 型 | 長さ | NULL | PK | 備考 | +|----|---------|---|------|------|----|------| +| 1 | LEAVE_TYPE | CHAR | 2 | NOT NULL | ✓ | '04'固定 | +| 2 | DEDUCTION_RATE | DECIMAL | 3,2 | NOT NULL | — | 例:0.50(50%控除) | + +### 5. LEAVE_RECORDS(休暇申請記録) + +休暇申請の生データを保持する。取消は**DELETE FROM**で行い、レコードを物理削除する。 +期間は開始日〜終了日で表現され、日別展開は行わない。 + +| No | カラム名 | 型 | 長さ | NULL | PK | 備考 | +|----|---------|---|------|------|----|------| +| 1 | APPLICATION_ID | INTEGER | — | NOT NULL | ✓ | 自動採番 | +| 2 | EMP_ID | CHAR | 8 | NOT NULL | — | 社員番号 | +| 3 | LEAVE_TYPE | CHAR | 2 | NOT NULL | — | '01'〜'04' | +| 4 | START_DATE | CHAR | 8 | NOT NULL | — | YYYYMMDD(出勤日) | +| 5 | START_TIME | CHAR | 4 | NOT NULL | — | HHMM(所定労働時間内) | +| 6 | END_DATE | CHAR | 8 | NOT NULL | — | YYYYMMDD(出勤日) | +| 7 | END_TIME | CHAR | 4 | NOT NULL | — | HHMM(所定労働時間内) | +| 8 | STATUS | CHAR | 1 | NOT NULL | — | '1'=有効, '9'=取消 | + +### 6. DAILY_RECORDS(日別勤怠記録) + +1社員1日の勤怠情報。出勤日のみレコードが存在する。 +打刻がない日でも休暇または未申請欠勤の情報を持つ。 + +| No | カラム名 | 型 | 長さ | NULL | PK | 備考 | +|----|---------|---|------|------|----|------| +| 1 | EMP_ID | CHAR | 8 | NOT NULL | ✓ | | +| 2 | TARGET_DATE | CHAR | 8 | NOT NULL | ✓ | YYYYMMDD | +| 3 | TIME_IN | CHAR | 4 | NOT NULL | — | 出勤時刻、'0000'=打刻なし | +| 4 | TIME_OUT | CHAR | 4 | NOT NULL | — | 退勤時刻、'0000'=打刻なし | +| 5 | ANNUAL_LEAVE_H | DECIMAL | 6,1 | NOT NULL | — | 年休使用時間 | +| 6 | PERSONAL_LEAVE_H | DECIMAL | 6,1 | NOT NULL | — | 事假時間 | +| 7 | OFFICIAL_LEAVE_H | DECIMAL | 6,1 | NOT NULL | — | 因公特批假時間 | +| 8 | SICK_LEAVE_H | DECIMAL | 6,1 | NOT NULL | — | 病欠時間 | +| 9 | UNAPPROVED_ABSENT_H | DECIMAL | 6,1 | NOT NULL | — | 未申請欠勤時間 | +| 10 | UPDATED_AT | TIMESTAMP | — | NOT NULL | — | DEFAULT CURRENT_TIMESTAMP | + +### 7. MONTHLY_ABSENCE(月次統計) + +DAILY_RECORDSを月次で集計したサマリ。 + +| No | カラム名 | 型 | 長さ | NULL | PK | 備考 | +|----|---------|---|------|------|----|------| +| 1 | EMP_ID | CHAR | 8 | NOT NULL | ✓ | | +| 2 | YEAR_MONTH | CHAR | 6 | NOT NULL | ✓ | YYYYMM | +| 3 | ANNUAL_LEAVE_H | DECIMAL | 6,1 | NOT NULL | — | 年休使用合計 | +| 4 | PERSONAL_LEAVE_H | DECIMAL | 6,1 | NOT NULL | — | 事假合計 | +| 5 | OFFICIAL_LEAVE_H | DECIMAL | 6,1 | NOT NULL | — | 因公特批假合計 | +| 6 | SICK_LEAVE_H | DECIMAL | 6,1 | NOT NULL | — | 病欠合計 | +| 7 | UNAPPROVED_ABSENT_H | DECIMAL | 6,1 | NOT NULL | — | 未申請欠勤合計 | +| 8 | UPDATED_AT | TIMESTAMP | — | NOT NULL | — | DEFAULT CURRENT_TIMESTAMP | + +--- + +## ファイル一覧 + +| # | ファイル名 | DD名 | 編成 | RECM | サイズ | 生成元 | 消費先 | 備考 | +|---|-----------|------|------|------|--------|--------|--------|------| +| 1 | RAW-LEAVE | KIN01R01 | SEQUENTIAL | FB | 80 | 外部システム | KIN01INP | 休暇申請CSV | +| 2 | WORK-LEAVE | KIN01W01 | SEQUENTIAL | FB | 80 | KIN01INP | SORT→KIN02UPD | 検証済休暇申請(中間) | +| 3 | RAW-PUNCH | KIN04R01 | SEQUENTIAL | FB | 80 | 打刻システム | KIN04CHK | 生打刻データ | +| 4 | EDITED-PUNCH | KIN04W01 | SEQUENTIAL | FB | 80 | KIN04CHK | KIN05MAT/B-サブシステム | 項目チェック通過打刻 | +| 5 | LEAVE-DAILY | KIN02W01 | SEQUENTIAL | FB | 80 | KIN03EXP | KIN05MAT / KIN07DAI | 日別展開済休暇 | +| 6 | KIN-LEAVE | KIN05W01 | SEQUENTIAL | FB | 160 | KIN05MAT | KIN07DAI | 打刻+休暇照合結果 | +| 7 | WORK-DAY-FILE | KIN06W01 | SEQUENTIAL | FB | 80 | KIN06CLD | KIN07DAI | 出勤日カレンダー | +| 8 | DAILY-RECORD | KIN07W01 | SEQUENTIAL | FB | 200 | KIN07DAI | KIN08DBU | 日別勤怠計算結果 | +| 9 | ERROR-LOG | KIN01E01 | SEQUENTIAL | VB | 200 | KIN01INP / KIN04CHK | — | エラーレコード退避 | +| 10 | ABSENCE-SUMMARY | KIN08W01 | SEQUENTIAL | FB | 80 | KIN08DBU | C-サブシステム | 月次欠勤集計(Cへ連携) | +| 11 | CSV-OUTPUT | KIN09W01 | SEQUENTIAL | FB | 200 | KIN09CSV | — | 社員確認用CSV | + +--- + +## 処理フロー + +``` +休暇申請(RAW-LEAVE / CSV) + │ + │ [KINJ010] KIN01INP — 休暇申請CSV取込・検証処理 + │ UNSTRINGでCSV分解 → IF/ELSE chain(新規/取消/変更) + │ SEARCH(非ALL)で休暇種別テーブル検索 + │ SUB04CHKで日付/時刻/数値チェック + ├──正常 → WORK-LEAVE-file + └──異常 → ERROR-LOG + │ + │ [KINJ011] SORT(WORK-LEAVE → APPLICATION_ID昇順) + │ + │ [KINJ012] KIN02UPD — 休暇申請DB更新処理 + │ 新規: EXEC SQL INSERT + │ 取消: EXEC SQL DELETE FROM ← 新カバレッジ + │ 変更: EXEC SQL DELETE + INSERT + │ → DB:LEAVE_RECORDS + │ + │ [KINJ015] KIN03EXP — 休暇日別展開処理 + │ DB(SELECT/CURSOR) → PERFORM THRU(日付範囲) + │ キーブレイク(社員番号切替) → HEADER処理 + │ 休日除外 → CONTINUE + │ → LEAVE-DAILY-file + ▼ +LEAVE-DAILY-file(日別休暇) + │ + +打刻生データ(RAW-PUNCH / CSV) + │ + │ [KINJ020] KIN04CHK — 打刻項目チェック処理 + │ UNSTRING + SUB04CHK(日付/時刻/数値) + │ IF多重ネスト(必須→日付→時刻→数値の4段階) + ├──正常 → EDITED-PUNCH + └──異常 → ERROR-LOG + │ + │ [KINJ022] SORT(EDITED-PUNCH → 社員番号+日付昇順) + │ + │ [KINJ025] KIN05MAT — 打刻休暇照合処理 + │ マッチング(1:N) EDITED-PUNCH × LEAVE-DAILY + │ 休暇種別優先順位(01/02連動, 03/04独立) + │ → KIN-LEAVE + ▼ +KIN-LEAVE(照合結果) + │ + │ [KINJ030] KIN06CLD — 出勤日カレンダー生成処理 + │ DB SELECT(CURSOR) + PERFORM VARYING + │ SEARCH ALL(休日判定) / WRITE FROM ← 新カバレッジ + │ → WORK-DAY-FILE + ▼ +WORK-DAY-FILE(出勤日カレンダー) + │ + │ [KINJ033] KIN07DAI — 日別勤怠計算処理 + │ マッチング(1:N) + EVALUATE分岐 ← MULTIPLY/SUBTRACT新カバレッジ + │ WORK-DAY(主駆動) × KIN-LEAVE(N側) + │ 4パターン(A/B/C/D)をEVALUATE + PERFORMで分岐 + │ 休暇時間計算(ランチ除外) + SUB05TIM丸め(0.1h切上) + │ → DAILY-RECORD + ▼ +DAILY-RECORD(日別計算結果) + │ + │ [KINJ036] KIN08DBU — 勤怠DB更新処理 + │ DAILY-RECORD → DAILY_RECORDS INSERT + │ 社員別月次集計 → MONTHLY_ABSENCE UPSERT + │ ABSENCE_SUMMARYファイル出力(Cへ連携) + ▼ +DB: DAILY_RECORDS + DB: MONTHLY_ABSENCE + │ ABSENCE-SUMMARY-file + ▼ +C:給与計算システム(KYU01CAL) + │ + │ [KINJ040] KIN09CSV — 勤怠CSV出力処理 + │ DB SELECT → STRING → WRITE AFTER ADVANCING ← 新カバレッジ + ▼ +CSV(社員確認用) +``` + +--- + +## プログラム詳細 + +### STEP010: KIN01INP — 休暇申請CSV取込・検証処理 + +| 項目 | 内容 | +|------|------| +| **PGMパターン** | **振り分け** | +| **JCL前処理** | なし | +| **入力** | RAW-LEAVE(80B / CSV形式)| +| **出力** | WORK-LEAVE(80B)/ ERROR-LOG(VB)| + +**機能:** + +1. READ RAW-LEAVE → CSVレコード1行を取得 +2. **UNSTRING** でCSV分解(申請番号,社員番号,日付,開始時刻,終了時刻,休暇種別,ステータス)+ **TALLYING** でフィールド数カウント(項目数チェック) +4. **SEARCH(非ALL)** でWORKING-STORAGE上の休暇種別テーブルを線形探索 → 該当種別の存在確認 ← **新カバレッジ** +5. **IF/ELSE chain** でステータス判定(新規/取消/変更) ← **新カバレッジ(振り分けIF文)** +6. SUB04CHKで日付・時刻・数値の各項目検証 + - IF多重ネスト:必須チェック → 日付形式 → 時刻範囲 → 数値 +7. 通過 → WORK-LEAVEに出力(検証済みレコード) +8. エラー → ERROR-LOGに出力 + +**新規カバレッジ構文:** + +| 構文 | 用途 | +|------|------| +| UNSTRING | CSVレコードの項目分解 | +| INSPECT TALLYING | カンマ区切り数カウント | +| **SEARCH(非ALL)** | 休暇種別テーブル線形探索 ← 新規 | +| IF/ELSE chain | ステータス別の振り分け処理(EVALUATE不使用) | + +--- + +### STEP020: KIN02UPD — 休暇申請DB更新処理 + +| 項目 | 内容 | +|------|------| +| **PGMパターン** | **DB更新** | +| **JCL前処理** | WORK-LEAVE → APPLICATION_ID昇順SORT | +| **入力** | WORK-LEAVE(80B)| +| **出力** | LEAVE_RECORDS(DB2)| + +**機能:** + +1. READ WORK-LEAVE → 検証済みレコード1件 +2. レコード種別に応じたDB操作: + - 新規申請(ステータス='1') → **EXEC SQL INSERT** + - 取消申請(ステータス='9') → **EXEC SQL DELETE FROM** WHERE APPLICATION_ID = :id ← **新カバレッジ** + - 変更申請(ステータス='1', APPLICATION_ID指定済) → **DELETE + INSERT** +3. IF SQLCODE NOT = 0 → エラーハンドリング + +**新規カバレッジ構文:** + +| 構文 | 用途 | +|------|------| +| EXEC SQL INSERT | DB登録 | +| **EXEC SQL DELETE FROM** | DB削除(物理削除による取消)← 新規 | +| IF | SQLCODE判定 | + +--- + +### STEP030: KIN03EXP — 休暇日別展開処理 + +| 項目 | 内容 | +|------|------| +| **PGMパターン** | **キーブレイク** | +| **JCL前処理** | なし | +| **入力** | LEAVE_RECORDS(DB2 SELECT / CURSOR) | +| **出力** | LEAVE-DAILY-file(80B)| + +**機能:** + +1. LEAVE_RECORDSからSTATUS='1'(有効)の全レコードをCURSOR SELECTする(ORDER BY EMP_ID, START_DATE)。 +2. **PERFORM THRU** で処理範囲を指定 ← **新カバレッジ** + - 2100-PROCESS-EMP THRU 2100-PROCESS-EMP-EXIT:1社員分の処理 + - 2200-EXPAND-DATE THRU 2200-EXPAND-DATE-EXIT:日付展開処理 +3. キーブレイク(社員番号切替)時に社員別小計を出力 ← **キーブレイク(その他)** +4. 各申請の開始日〜終了日をループ(PERFORM VARYING): + - 休日判定:HOLIDAY_CALENDARに存在 or 土日 → **CONTINUE** でスキップ + - 出勤日 → LEAVE-DAILY-fileに出力 + +**新規カバレッジ構文:** + +| 構文 | 用途 | +|------|------| +| **PERFORM THRU** | 段落範囲指定による構造化処理 ← 新規 | +| PERFORM UNTIL | 日付ループ(開始日〜終了日)| +| CONTINUE | 休日スキップ時の空処理 | +| EXEC SQL SELECT(CURSOR) | DB読込(FETCH) | +| SET | キーブレイクフラグ操作 | + +--- + +### STEP040: KIN04CHK — 打刻項目チェック処理 + +| 項目 | 内容 | +|------|------| +| **PGMパターン** | 項目チェック(重複なし) | +| **JCL前処理** | なし | +| **入力** | RAW-PUNCH(80B / CSV形式)| +| **出力** | EDITED-PUNCH(80B)/ ERROR-LOG(VB)| + +**機能:** + +1. READ RAW-PUNCH → CSVレコード +2. **UNSTRING** で分解 +3. **IF多重ネスト** で4段階チェック: + ``` + IF 社員番号 NOT = SPACE THEN + IF 日付が有効形式 THEN + IF 時刻が有効範囲 THEN + IF 出勤 < 退勤 THEN + 正常出力 + ELSE → エラー + ELSE → エラー + ELSE → エラー + ELSE → エラー + END-IF + ``` +4. 各チェックは SUB04CHK を呼出 +5. 正常 → EDITED-PUNCHに出力(**WRITE FROM** 使用) +6. 異常 → ERROR-LOGに出力(**STRING** で編集) + +**新規カバレッジ構文:** + +| 構文 | 用途 | +|------|------| +| UNSTRING | CSV分解 | +| **IF多重ネスト(THEN句)** | 必須→日付→時刻→数値の4段階チェック ← 新規(深度) | +| WRITE FROM | 出力レコードの一括書出 | +| STRING | エラーメッセージ編集 | + +--- + +### STEP050: KIN05MAT — 打刻休暇照合処理 + +| 項目 | 内容 | +|------|------| +| **PGMパターン** | **マッチング(1:N)** | +| **JCL前処理** | EDITED-PUNCH → 社員番号+日付昇順SORT(KINJ022)| +| **入力R01** | EDITED-PUNCH(80B、打刻側)| +| **入力R02** | LEAVE-DAILY-file(80B、休暇側、N件あり得る)| +| **出力** | KIN-LEAVE(160B)| + +**機能:** + +EDITED-PUNCH(打刻)とLEAVE-DAILY-file(日別休暇)を社員番号+日付で照合する。 + +1. **マッチング制御**(EVALUATE TRUE): + - R01キー < R02キー → 打刻のみ(休暇なし)→ 休暇='99'+0hで出力 + - R01キー = R02キー → マッチ → 休暇情報マージ + - 同一キーにN件のR02がある場合は全件読み、休暇種別優先順位で1件選定 + - R01キー > R02キー → R02次へ(R01側に該当なしの休暇 → この後のR01読込で拾う) + +2. **休暇種別優先順位**: + - 01(年休)と02(事假)は連動:年休残あり→01, なし→02 + - 03(因公特批假)と04(病欠)は独立 + - 複数種別混在時はAPPLICATION_ID基準で時刻範囲判定 + +3. 出力:打刻情報(80B)+休暇情報(80B)=160BのKIN-LEAVE + +**新規カバレッジ構文:** + +| 構文 | 用途 | +|------|------| +| EVALUATE TRUE | マッチング3分岐制御 | +| STRING | 出力レコード編集 | +| CONTINUE | 空分岐処理 | + +--- + +### STEP060: KIN06CLD — 出勤日カレンダー生成処理 + +| 項目 | 内容 | +|------|------| +| **PGMパターン** | **GETPUT** | +| **JCL前処理** | なし | +| **入力** | EMP_MASTER(DB2 SELECT / CURSOR)、HOLIDAY_CALENDAR(DB2 SELECT) | +| **出力** | WORK-DAY-FILE(80B FB)| + +**PARM解析:** +- `YEARMONTH=202605` — 必須。対象年月。 + +**機能:** + +1. PARMから対象年月を取得 +2. EMP_MASTERテーブルからSTATUS='1'(在籍)の社員一覧をSELECT(CURSOR, ORDER BY EMP_ID) +3. HOLIDAY_CALENDARテーブルから該当月の祝日一覧をSELECT(WORKING-STORAGEのテーブルに格納) +4. 各社員について、当月1日〜月末日まで **PERFORM VARYING** でループ: + - **SEARCH ALL** でHOLIDAY-CALENDARテーブルを二分探索 + - 土曜(6) or 日曜(7) → 休日 + - その他 → 出勤日として **WRITE FROM** で出力 ← **新カバレッジ** +5. 出力レコードは社員番号+日付の昇順に保証(ORDER BY + ループ順) + +**新規カバレッジ構文:** + +| 構文 | 用途 | +|------|------| +| **WRITE FROM** | MOVE + WRITEを1文で記述 ← 新規 | +| PERFORM VARYING | 日付ループ | +| SEARCH ALL | 休日テーブル二分探索 | +| EXEC SQL SELECT(CURSOR) | DB読込 | + +--- + +### STEP070: KIN07DAI — 日別勤怠計算処理 + +| 項目 | 内容 | +|------|------| +| **PGMパターン** | **マッチング(1:N)** | +| **JCL前処理** | なし(WORK-DAY-FILE / KIN-LEAVE / LEAVE-DAILYともソート済み前提) | +| **入力R01** | WORK-DAY-FILE(80B、主駆動、1社員1日=1件) | +| **入力R02** | KIN-LEAVE(160B、N側、1日0〜N件) | +| **副参照** | LEAVE-DAILY-file(80B、ファイル併走読込) | +| **出力** | DAILY-RECORD(200B FB)| + +**機能:** + +WORK-DAY-FILE(出勤日カレンダー)を主駆動とし、社員番号+日付をキーにKIN-LEAVE(打刻+休暇)とLEAVE-DAILY-file(日別休暇)を照合する。 + +**EVALUATEによる4パターン分岐:** + +マッチング結果に応じてPATTERN-NUM(1〜4)を設定し、**EVALUATE** で処理分岐(実装時にGO TO DEPENDING ONのフォールスルー問題を確認したため、EVALUATE + PERFORMに変更): + +``` +01 PATTERN-NUM PIC 9(1). + 88 PATTERN-A VALUE 1. + 88 PATTERN-B VALUE 2. + 88 PATTERN-C VALUE 3. + 88 PATTERN-D VALUE 4. + + EVALUATE PATTERN-NUM + WHEN 1 PERFORM 6100-PATTERN-A + WHEN 2 PERFORM 6200-PATTERN-B + WHEN 3 PERFORM 6300-PATTERN-C + WHEN 4 PERFORM 6400-PATTERN-D + END-EVALUATE. +``` + +| パターン | R01(WORK-DAY) | R02(KIN-LEAVE) | LEAVE-DAILY | 処理 | +|---------|--------------|----------------|-------------|------| +| A=1 | あり | あり | あり | 打刻情報設定+休暇時間計算(ランチ除外、0.1h切上丸め) | +| B=2 | あり | あり | なし | 打刻情報設定のみ、休暇=0 | +| C=3 | あり | なし | あり | 打刻=0000、休暇時間計算(所定労働時間8h上限、ランチ除外) | +| D=4 | あり | なし | なし | 打刻=0000、休暇=0、未申請欠勤=8.0h | + +**休暇時間計算(ランチ考慮):** + +``` +例:終日休暇申請 0900〜1800 + 0900-1200 = 3h(午前) + 1200-1300 = ランチ(除外) + 1300-1800 = 5h(午後) + 合計休暇時間 = 8h + +例:午後休暇申請 1300〜1800 + 1300-1800 = 5h(午後、ランチ除外済み) + 合計休暇時間 = 5h +``` + +丸め:SUB05TIM(0.1h単位切上)を呼出。 + +**バリエーション構文(MULTIPLY / SUBTRACT):** + +COMPUTEのみに依存せず、MULTIPLYとSUBTRACTも併用して時間計算のバリエーションを確保する。 + +``` +* 例:時間(hhmm)を分(minutes)に変換 → ランチ除外 +MULTIPLY WRK-HOURS BY 60 GIVING WRK-MINUTES ← MULTIPLY +SUBTRACT LUNCH-MINUTES FROM WRK-MINUTES ← SUBTRACT +``` + +**新規カバレッジ構文:** + +| 構文 | 用途 | +|------|------| +| **GO TO ... DEPENDING ON** | 4パターンの処理分岐 ← 新規 | +| **PERFORM THRU** | 各パターン内の段落範囲処理 | +| COMPUTE ROUNDED ON SIZE ERROR | 時間計算のエラー処理 | +| **MULTIPLY** | 時間→分単位変換 ← 新規 | +| **SUBTRACT** | ランチ時間除外 ← 新規 | +| STRING | エラーメッセージ編集 | +| CALL 'SUB05TIM' | 時刻丸め計算 | + +--- + +### STEP080: KIN08DBU — 勤怠DB更新処理 + +| 項目 | 内容 | +|------|------| +| **PGMパターン** | DB更新 + **SYSIN読込(P28)** | +| **JCL前処理** | なし | +| **入力** | DAILY-RECORD(200B)、**SYSIN(集計対象社員指定)** | +| **出力** | DAILY_RECORDS / MONTHLY_ABSENCE(DB2)、ABSENCE_SUMMARY(80B)| + +**機能:** + +1. **SYSIN読込(パターン28)**:集計対象の社員番号一覧をSYSINから読み込む(省略時は全社員が対象)。 +2. DAILY-RECORDを1レコードずつ読込み、DAILY_RECORDSに**EXEC SQL INSERT** +3. 社員別・月別の集計値を**PERFORM VARYING**で積算(全社員ループ) +4. 全件処理後、MONTHLY_ABSENCEを**EXEC SQL UPDATE / INSERT**(UPSERT) +5. **INSPECT TALLYING**で社員番号の有効性チェック → 空または無効値は**DISPLAY**で警告表示 +6. 病欠時間はSICK_LEAVE_RATEテーブルを参照し、控除前時間として保持 +7. 集計後データをABSENCE_SUMMARYファイルに出力 + +**新規カバレッジ構文:** + +| 構文 | 用途 | +|------|------| +| **READ SYSIN**(パターン28) | 対象社員一覧の読込 ← 新規パターン | +| DISPLAY | 警告メッセージ表示 ← 新規 | +| INSPECT TALLYING | 社員番号の空チェック ← 新規 | +| PERFORM VARYING | 社員別月次集計ループ | +| EXEC SQL INSERT / UPDATE | DB更新(INSERT+UPDATEでUPSERT) | + +--- + +### STEP090: KIN09CSV — 勤怠CSV出力処理 + +| 項目 | 内容 | +|------|------| +| **PGMパターン** | GETPUT | +| **JCL前処理** | なし | +| **入力** | DAILY_RECORDS / MONTHLY_ABSENCE(DB2)、**COMMAND-LINE PARM** | +| **出力** | CSVファイル(社員確認用)| + +**PARM解析:** +- `YEARMONTH=202605` — 必須。対象年月。 +- `MODE=FULL` — オプション。`FULL`=全項目出力, `SUMMARY`=集計のみ。 + +**機能:** + +1. **ACCEPT FROM COMMAND-LINE** でPARM解析(対象年月・出力モード) +2. DAILY_RECORDSから当月の全レコードをCURSOR SELECT +3. **STRING** でCSV行を編集(DELIMITED BY SIZE) +4. **WRITE AFTER ADVANCING PAGE** でページヘッダー制御 ← **新カバレッジ** + - 100行ごとにヘッダー行を出力 + - WRITE header-record AFTER ADVANCING PAGE +5. CSVフォーマット: + +``` +社員番号,日付,出勤時刻,退勤時刻,休暇種別,年休時間,事假時間,因公特批假時間,病欠時間,未申請欠勤時間 +00000101,20260501,0900,1800,99,0.0,0.0,0.0,0.0,0.0 +00000101,20260502,0900,1300,02,0.0,4.0,0.0,0.0,4.0 +00000101,20260503,0000,0000,01,8.0,0.0,0.0,0.0,0.0 +00000101,20260504,0000,0000,99,0.0,0.0,0.0,0.0,8.0 +``` + +6. 休暇種別は該当日に休暇がある場合は最初に該当した休暇種別コード、ない場合は'99' + +**新規カバレッジ構文:** + +| 構文 | 用途 | +|------|------| +| **ACCEPT FROM COMMAND-LINE** | PARM解析(対象年月・出力モード)← 新規 | +| **WRITE AFTER ADVANCING PAGE** | ページ制御出力 ← 新規 | +| STRING | CSV行編集(DELIMITED BY SIZE) | +| EXEC SQL SELECT(CURSOR) | DB読込 | + +--- + +## 共通関数(サブプログラム) + +サブシステムAの全プログラムで使用する共通関数。SUB06DBUは使用せず、全DB操作はEXEC SQLで直接記述する。 + +| サブプログラム | I/Fコピー句 | 用途 | 使用プログラム | +|---|---|---|---| +| SUB01DAT | D01010AC | 運用日付取得 | KIN01INP, KIN04CHK, KIN08DBU, KIN09CSV | +| SUB02MSG | MSG000AC | メッセージ編集出力 | 全プログラム | +| SUB03END | MSG000AC | ABEND終了 | KIN02UPD, KIN04CHK, KIN07DAI | +| SUB04CHK | SUB04CHK | 項目チェック(日付/時刻/数値) | KIN01INP, KIN04CHK | +| SUB05TIM | TIME010AC | 時刻丸め計算(分→時間) | KIN07DAI | + +--- + +## JCL構成概要 + +9本のJOB。拠点間ソートはJCL SORTで処理し、COBOLプログラムはビジネスロジックに専念する。 + +| JOB名 | 実行PGM | 処理概要 | SORT | +|-------|--------|---------|------| +| KINJ010 | KIN01INP | 休暇申請CSV取込・検証 | 不要 | +| KINJ011 | SORT | WORK-LEAVE → APPLICATION_ID昇順 | 必須 | +| KINJ012 | KIN02UPD | 休暇申請DB更新(INSERT/DELETE) | 不要 | +| KINJ015 | KIN03EXP | 休暇日別展開(キーブレイク) | 不要 | +| KINJ020 | KIN04CHK | 打刻項目チェック | 不要 | +| KINJ022 | SORT | EDITED-PUNCH → 社員番号+日付昇順 | 必須 | +| KINJ025 | KIN05MAT | 打刻休暇照合(1:N) | 不要 | +| KINJ030 | KIN06CLD | 出勤日カレンダー生成(GETPUT) | 不要 | +| KINJ033 | KIN07DAI | 日別計算(EVALUATE / MULTIPLY / SUBTRACT) | 不要 | +| KINJ036 | KIN08DBU | 勤怠DB更新(集計) | 不要 | +| KINJ040 | KIN09CSV | 勤怠CSV出力 | 不要 | + +--- + +## 丸めルール一覧 + +| 項目 | 最小単位 | 超過後丸め | 適用プログラム | +|------|---------|-----------|--------------| +| 休暇時間(全種別) | 1.0h | 0.1h単位切上 | KIN07DAI(SUB05TIM) | +| 未申請欠勤時間 | 8.0h/日 | 切捨 | KIN07DAI | + +サブシステムB(残業計算)の丸めルールとは独立して管理する。 + +--- + +## 期待される新規カバレッジ + +### プログラムタイプ(未カバー → Aで追加) + +| No | パターン | 状態 | A該当プログラム | A状態 | +|----|----------|:----:|----------------|:-----:| +| 2 | マッチング処理(1:N) | × | KIN05MAT | ◎ | +| 11 | キーブレイク処理(その他) | × | KIN03EXP | ◎ | +| 12 | レイアウト編集のみ(GETPUT) | × | KIN06CLD | ◎ | +| 15 | 振り分け(IF文) | × | KIN01INP | ◎ | +| 17 | 内部テーブル検索 | ○ | KIN01INP(SEARCH非ALL) | ◎ | +| 19 | CSV→FB変換(改行なし) | ○ | KIN01INP | ◎ | +| **28** | **SYSIN読込・チェック** | **×** | **KIN08DBU** | **新規◎** | + +### ステートメント(未カバー → Aで追加) + +| ステートメント | 状態 | A該当プログラム | +|---------------|:----:|----------------| +| SEARCH(非ALL) | × | KIN01INP | +| DELETE FROM(DB2) | × | KIN02UPD | +| GO TO DEPENDING ON | × | — (KIN07DAIはフォールスルー問題のためEVALUATE+PERFORMに変更) | +| PERFORM THRU | × | KIN03EXP | +| WRITE FROM | × | KIN04CHK, KIN06CLD | +| WRITE AFTER ADVANCING PAGE | × | KIN09CSV | +| **MULTIPLY** | **○(ZAN06UPDのみ)** | **KIN07DAI** | +| **SUBTRACT** | **○(ZAN06UPDのみ)** | **KIN07DAI** | +| **ACCEPT FROM COMMAND-LINE** | **◎(ZAN05CAL,KIN06CLD)** | **KIN09CSV** | +| **DISPLAY** | **△(SUB02MSG,SUB03ENDのみ)** | **KIN08DBU** | +| **INSPECT** | **◎** | **KIN08DBU** | + +--- + +## レコード構成 + +EDITED-PUNCHはBサブシステムのZAN03CHKが入力として使用するため、互換性を維持する。 + +### EDITED-PUNCH(80B) + +Bサブシステムとの連携インターフェース。 + +| # | 項目 | 名称 | 属性 | 開始 | 備考 | +|---|------|------|------|------|------| +| 1 | 社員番号 | SI-EMP-ID | 9(8) | 1 | | +| 2 | 日付 | SI-DATE | 9(8) | 9 | YYYYMMDD | +| 3 | 出勤時刻 | SI-TIME-IN | 9(4) | 17 | HHMM | +| 4 | 退勤時刻 | SI-TIME-OUT | 9(4) | 21 | HHMM | +| 5 | 部署ID | SI-DEPT-ID | 9(4) | 25 | | +| 6 | 端末ID | SI-TERMINAL | X(6) | 29 | | +| 7 | 予備 | FILLER | X(46) | 35 | | + +### WORK-LEAVE(80B) — 新規(KIN01INP→KIN02UPD中間) + +| # | 項目 | 名称 | 属性 | 開始 | 備考 | +|---|------|------|------|------|------| +| 1 | 申請ID | WL-APPLICATION-ID | 9(9) | 1 | 新規=0, 取消/変更=APPLICATION_ID | +| 2 | 社員番号 | WL-EMP-ID | X(8) | 10 | | +| 3 | 休暇種別 | WL-LEAVE-TYPE | X(2) | 18 | '01'〜'04' | +| 4 | 開始日 | WL-START-DATE | 9(8) | 20 | YYYYMMDD | +| 5 | 開始時刻 | WL-START-TIME | 9(4) | 28 | HHMM | +| 6 | 終了日 | WL-END-DATE | 9(8) | 32 | YYYYMMDD | +| 7 | 終了時刻 | WL-END-TIME | 9(4) | 40 | HHMM | +| 8 | ステータス | WL-STATUS | X(1) | 44 | '1'=新規/変更, '9'=取消 | +| 9 | 予備 | FILLER | X(36) | 45 | | + +### LEAVE-DAILY(80B) + +| # | 項目 | 名称 | 属性 | 開始 | 備考 | +|---|------|------|------|------|------| +| 1 | 社員番号 | SL-EMP-ID | X(8) | 1 | | +| 2 | 日付 | SL-DATE | 9(8) | 9 | YYYYMMDD | +| 3 | 休暇種別 | SL-LEAVE-TYPE | X(2) | 17 | '01'〜'04' | +| 4 | 開始時刻 | SL-START-TIME | 9(4) | 19 | HHMM(元申請の開始時刻) | +| 5 | 終了時刻 | SL-END-TIME | 9(4) | 23 | HHMM(元申請の終了時刻) | +| 6 | 申請ID | SL-APPLICATION-ID | 9(9) | 27 | LEAVE_RECORDSのAPPLICATION_ID | +| 7 | 予備 | FILLER | X(45) | 36 | | + +### KIN-LEAVE(160B) — EDITED-PUNCH(80B)+休暇情報(80B) + +| # | 項目 | 名称 | 属性 | 開始 | 備考 | +|---|------|------|------|------|------| +| 1-7 | 打刻情報 | — | — | 1 | EDITED-PUNCHと同一 | +| 8 | 休暇種別 | SR-LEAVE-TYPE | X(2) | 81 | '01'〜'04' or '99' | +| 9 | 開始時刻 | SR-LEAVE-START-TIME | 9(4) | 83 | 該当休暇の申請開始時刻 | +| 10 | 終了時刻 | SR-LEAVE-END-TIME | 9(4) | 87 | 該当休暇の申請終了時刻 | +| 11 | 休暇時間 | SR-LEAVE-HOURS | 9(4)V9(1) | 91 | KIN07DAIが再計算(ランチ除外・丸め適用) | +| 12 | 申請ID | SR-APPLICATION-ID | 9(9) | 96 | LEAVE_RECORDSのAPPLICATION_ID | +| 13 | 予備 | FILLER | X(56) | 105 | | + +### WORK-DAY-FILE(80B) + +| # | 項目 | 名称 | 属性 | 開始 | 備考 | +|---|------|------|------|------|------| +| 1 | 社員番号 | SW-EMP-ID | 9(8) | 1 | | +| 2 | 日付 | SW-DATE | 9(8) | 9 | YYYYMMDD | +| 3 | 曜日 | SW-DAY-OF-WEEK | 9(1) | 17 | 1=月…7=日 | +| 4 | 予備 | FILLER | X(63) | 18 | | + +### DAILY-RECORD(200B) + +| # | 項目 | 名称 | 属性 | 開始 | 備考 | +|---|------|------|------|------|------| +| 1 | 社員番号 | SD-EMP-ID | 9(8) | 1 | | +| 2 | 日付 | SD-DATE | 9(8) | 9 | YYYYMMDD | +| 3 | 出勤時刻 | SD-TIME-IN | 9(4) | 17 | '0000'=打刻なし | +| 4 | 退勤時刻 | SD-TIME-OUT | 9(4) | 21 | '0000'=打刻なし | +| 5 | 年休時間 | SD-ANNUAL-H | 9(4)V9(1) | 25 | | +| 6 | 事假時間 | SD-PERSONAL-H | 9(4)V9(1) | 30 | | +| 7 | 因公特批假時間 | SD-OFFICIAL-H | 9(4)V9(1) | 35 | | +| 8 | 病欠時間 | SD-SICK-H | 9(4)V9(1) | 40 | | +| 9 | 未申請欠勤時間 | SD-ABSENT-H | 9(4)V9(1) | 45 | | +| 10 | 予備 | FILLER | X(151) | 50 | | + +### CSV-OUTPUT(200B) + +| # | 項目 | 名称 | 属性 | 開始 | 備考 | +|---|------|------|------|------|------| +| 1 | CSV行データ | SC-CSV-LINE | X(200) | 1 | STRING編集済みCSV1行 | + +### ERROR-LOG(VB 200B) + +| # | 項目 | 名称 | 属性 | 開始 | 備考 | +|---|------|------|------|------|------| +| 1 | エラー区分 | ER-CATEGORY | 9(2) | 1 | 01=休暇エラー, 02=打刻エラー | +| 2 | 発生日時 | ER-DATETIME | X(16) | 3 | | +| 3 | プログラムID | ER-PGM-ID | X(8) | 19 | | +| 4 | エラー内容 | ER-MESSAGE | X(100) | 27 | | +| 5 | 原データ | ER-RAW-DATA | X(80) | 127 | エラー原因となった入力レコード | + diff --git a/src/KIN01INP.cbl b/src/KIN01INP.cbl new file mode 100644 index 0000000..f59308e --- /dev/null +++ b/src/KIN01INP.cbl @@ -0,0 +1,594 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. KIN01INP. + ***************************************************************** + * システム名 : 勤怠休暇管理システム * + * プログラムID : KIN01INP * + * プログラム名 : 休暇申請CSV取込・検証処理 * + * 作成日 : 2026-06-17 * + * 処理概要 : CSV形式の休暇申請ファイルを読み込み、 * + * 休暇種別テーブル検索と項目チェックを行い、 * + * ステータスによってWORK-LEAVEまたは * + * ERROR-LOGへ振り分ける。 * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 26-06-17 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT R01INNFIL ASSIGN TO KIN01R01. + SELECT W01OUTFIL ASSIGN TO KIN01W01. + SELECT W02OUTFIL ASSIGN TO KIN01W02. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * ##R01## * + ***************************************************************** + FD R01INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R01INNREC. + 03 R01LINE PIC X(80). + * + ***************************************************************** + * ##W01## * + ***************************************************************** + FD W01OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W01OUTREC. + COPY KIN01REC REPLACING ==(A)== BY ==W01==. + * + ***************************************************************** + * ##W02## * + ***************************************************************** + FD W02OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS V. + 01 W02OUTREC. + COPY KIN05REC REPLACING ==(A)== BY ==W02==. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'KIN01INP'. + 03 CNS-MSGSTR PIC 9(003) VALUE 001. + 03 CNS-MSGFIN PIC 9(003) VALUE 002. + 03 CNS-MSGSUBEEK PIC 9(003) VALUE 005. + 03 CNS-MSGIINKES PIC 9(003) VALUE 006. + 03 CNS-MSGOUTKES PIC 9(003) VALUE 007. + 03 CNS-MSGKEYINF PIC 9(003) VALUE 033. + 03 CNS-KN0002 PIC 9(001) VALUE 2. + 03 CNS-ABD999 PIC 9(003) VALUE 999. + 03 CNS-STAT-1 PIC X(001) VALUE '1'. + 03 CNS-STAT-9 PIC X(001) VALUE '9'. + 03 CNS-LEAVE-01 PIC X(002) VALUE '01'. + 03 CNS-LEAVE-02 PIC X(002) VALUE '02'. + 03 CNS-LEAVE-03 PIC X(002) VALUE '03'. + 03 CNS-LEAVE-04 PIC X(002) VALUE '04'. + * + ***************************************************************** + * カウンタ領域 * + ***************************************************************** + 01 CUNARA. + 03 CUN-R01INN PIC S9(009) COMP-3 + VALUE ZERO. + 03 CUN-W01OUT PIC S9(009) COMP-3 + VALUE ZERO. + 03 CUN-W02OUT PIC S9(009) COMP-3 + VALUE ZERO. + * + ***************************************************************** + * 作業領域 * + ***************************************************************** + 01 WRKARA. + *** 運用日付 + 03 WRK-U06 PIC 9(008). + *** 読込フラグ + 03 WRK-R01EOF PIC X(001). + *** CSV分解用 + 03 WRK-COMMA-CNT PIC 9(002) COMP. + 03 WRK-COMMA-DISP PIC 9(002). + 03 WRK-LT-FOUND PIC X(001). + 03 WRK-ERR-TYPE PIC X(001). + 03 WRK-CSV-APPL-ID PIC X(009). + 03 WRK-CSV-EMP-ID PIC X(008). + 03 WRK-CSV-START-DATE PIC X(008). + 03 WRK-CSV-START-TIME PIC X(004). + 03 WRK-CSV-END-DATE PIC X(008). + 03 WRK-CSV-END-TIME PIC X(004). + 03 WRK-CSV-LEAVE-TYPE PIC X(002). + 03 WRK-CSV-STATUS PIC X(001). + *** ステータス再定義(数値+88条件) + 03 WRK-STATUS-NUM REDEFINES WRK-CSV-STATUS + PIC 9(001). + 88 WRK-STATUS-ACTIVE VALUE 1. + 88 WRK-STATUS-CANCEL VALUE 9. + *** 休暇種別内部テーブル(4件) + 03 WRK-LEAVE-TYPE-TABLE. + 05 WRK-LT-ENTRY OCCURS 4 TIMES + INDEXED BY WRK-LT-IDX. + 07 WRK-LT-CODE PIC X(002). + *** REDEFINESデモ(同一領域 複数型 来回代入) + 03 WRK-DEMO-AREA PIC 9(008). + 03 WRK-DEMO-ALPHA REDEFINES WRK-DEMO-AREA + PIC X(008). + 03 WRK-DEMO-GRP REDEFINES WRK-DEMO-AREA. + 05 WRK-DEMO-TYPE PIC 9(004). + 05 WRK-DEMO-VALUE PIC 9(004). + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + *** 運用日付取得 + COPY ZANDATAC. + *** メッセージ編集出力SR用 + COPY ZANMSGAC. + *** ABEND処理SR用 + COPY ZANENDAC. + *** 項目チェックSR用 + COPY ZANCHKAC. + * + PROCEDURE DIVISION. + ***************************************************************** + * サブモジュールNO: (0.0) * + * サブモジュール名: 制御処理 * + * 処理概要 : メインコントロール処理 * + ***************************************************************** + 0000MAJCOLSOR SECTION. + * + *** 初期処理 + PERFORM 1000ITTSOR. + * + *** メイン処理 + PERFORM 2000MAJSOR + UNTIL WRK-R01EOF = '1'. + * + *** 終了処理 + PERFORM 3000STPSOR. + * + 0000MAJCOLSOR-EXT. + GOBACK. + ***************************************************************** + * サブモジュールNO: (1.0) * + * サブモジュール名: 初期処理 * + * 処理概要 : 開始メッセージ出力・各種初期化処理 * + ***************************************************************** + 1000ITTSOR SECTION. + * + *** 開始メッセージ出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGSTR TO M00MSGCOD. + PERFORM 4000MSGOUTSOR. + * + *** コンパイル日時出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGKEYINF TO M00MSGCOD. + MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01. + MOVE 'COMPILED' TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + *** ワークエリア初期化 + INITIALIZE WRKARA. + * + *** 休暇種別テーブル設定 + MOVE '01' TO WRK-LT-CODE(1). + MOVE '02' TO WRK-LT-CODE(2). + MOVE '03' TO WRK-LT-CODE(3). + MOVE '04' TO WRK-LT-CODE(4). + * + *** 運用日付取得 + INITIALIZE D01UBSPAR. + CALL 'SUB01DAT' USING D01UBSPAR. + IF D01FKICOD = ZERO + MOVE D01UBSUDATE TO WRK-U06 + ELSE + INITIALIZE M00MHOPAR + MOVE CNS-MSGSUBEEK TO M00MSGCOD + MOVE 'SUB01DAT' TO M00UMKDATS22-01 + MOVE D01FKICOD TO M00UMKDATS22-02 + PERFORM 4000MSGOUTSOR + PERFORM 9999ABDSOR + END-IF. + * + *** 入出力ファイルOPEN + OPEN INPUT R01INNFIL + OUTPUT W01OUTFIL + W02OUTFIL. + * + *** #R01#を読み込み + PERFORM 1100R01INNSOR. + * + 1000ITTSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(1.1) * + * サブモジュール名:##R01##読込処理 * + * 処理概要 : レコード読込・EOF判定処理 * + ***************************************************************** + 1100R01INNSOR SECTION. + * + READ R01INNFIL + AT END + MOVE '1' TO WRK-R01EOF + NOT AT END + ADD 1 TO CUN-R01INN + END-READ. + * + 1100R01INNSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.0) * + * サブモジュール名: 主処理 * + * 処理概要 : CSV分解・休暇種別検索・ステータス振分 * + ***************************************************************** + 2000MAJSOR SECTION. + * + *** CSV分解 + PERFORM 2010CSVSOR. + * + *** 休暇種別テーブル検索 + PERFORM 2020LEAVSERSOR. + * + *** エラー判定(フィールド数/休暇種別) + IF WRK-COMMA-CNT NOT = 8 + MOVE 'F' TO WRK-ERR-TYPE + PERFORM 2050ERRORSOR + ELSE IF WRK-LT-FOUND NOT = '1' + MOVE 'L' TO WRK-ERR-TYPE + PERFORM 2050ERRORSOR + ELSE + *** ステータス判定(IF/ELSE連鎖) + IF WRK-STATUS-ACTIVE + PERFORM 2030VALIDATESOR + ELSE IF WRK-STATUS-CANCEL + PERFORM 2040CANCELSOR + ELSE + MOVE 'S' TO WRK-ERR-TYPE + PERFORM 2050ERRORSOR + END-IF + END-IF. + * + *** 次のレコード読込 + PERFORM 1100R01INNSOR. + * + 2000MAJSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.1) * + * サブモジュール名: CSV分解処理 * + * 処理概要 : UNSTRINGでCSVを8項目に分解する * + ***************************************************************** + 2010CSVSOR SECTION. + * + MOVE ZERO TO WRK-COMMA-CNT. + INITIALIZE WRK-CSV-APPL-ID + WRK-CSV-EMP-ID + WRK-CSV-START-DATE + WRK-CSV-START-TIME + WRK-CSV-END-DATE + WRK-CSV-END-TIME + WRK-CSV-LEAVE-TYPE + WRK-CSV-STATUS. + UNSTRING R01INNREC + DELIMITED BY ',' + INTO WRK-CSV-APPL-ID + WRK-CSV-EMP-ID + WRK-CSV-START-DATE + WRK-CSV-START-TIME + WRK-CSV-END-DATE + WRK-CSV-END-TIME + WRK-CSV-LEAVE-TYPE + WRK-CSV-STATUS + TALLYING IN WRK-COMMA-CNT + END-UNSTRING. + * + 2010CSVSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.2) * + * サブモジュール名: 休暇種別テーブル検索処理 * + * 処理概要 : SEARCH(非ALL)で休暇種別の妥当性を検証 * + ***************************************************************** + 2020LEAVSERSOR SECTION. + * + MOVE '0' TO WRK-LT-FOUND. + SET WRK-LT-IDX TO 1. + SEARCH WRK-LT-ENTRY + VARYING WRK-LT-IDX + AT END + CONTINUE + WHEN WRK-LT-CODE(WRK-LT-IDX) + = WRK-CSV-LEAVE-TYPE + MOVE '1' TO WRK-LT-FOUND + END-SEARCH. + * + 2020LEAVSERSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.3) * + * サブモジュール名: 有効申請処理 * + * 処理概要 : SUB04CHKで日付/時刻チェックしW01出力 * + ***************************************************************** + 2030VALIDATESOR SECTION. + * + *** W01レコード初期化 + INITIALIZE W01OUTREC. + * + *** SUB04CHKで社員番号チェック + INITIALIZE C01CHKPAR. + MOVE WRK-CSV-EMP-ID TO C01CHKDAT. + MOVE 'EMPID' TO C01CHKTYP. + CALL 'SUB04CHK' USING C01CHKPAR. + IF C01CHKRRC NOT = ZERO + MOVE '01' TO W02ERR-CATEGORY + STRING 'EMP-ID ERROR EMP=' + WRK-CSV-EMP-ID + DELIMITED BY SIZE + INTO W02ERR-DETAIL + WRITE W02OUTREC + ADD 1 TO CUN-W02OUT + GO TO 2030VALIDATESOR-EXT + END-IF. + * + *** SUB04CHKで開始日付チェック + INITIALIZE C01CHKPAR. + MOVE WRK-CSV-START-DATE TO C01CHKDAT. + MOVE 'DATE' TO C01CHKTYP. + CALL 'SUB04CHK' USING C01CHKPAR. + IF C01CHKRRC NOT = ZERO + MOVE '01' TO W02ERR-CATEGORY + STRING 'START-DATE ERROR EMP=' + WRK-CSV-EMP-ID + ' DATE=' + WRK-CSV-START-DATE + DELIMITED BY SIZE + INTO W02ERR-DETAIL + WRITE W02OUTREC + ADD 1 TO CUN-W02OUT + GO TO 2030VALIDATESOR-EXT + END-IF. + * + *** SUB04CHKで開始時刻チェック + INITIALIZE C01CHKPAR. + MOVE WRK-CSV-START-TIME TO C01CHKDAT. + MOVE 'TIME' TO C01CHKTYP. + CALL 'SUB04CHK' USING C01CHKPAR. + IF C01CHKRRC NOT = ZERO + MOVE '01' TO W02ERR-CATEGORY + STRING 'START-TIME ERROR EMP=' + WRK-CSV-EMP-ID + ' TIME=' + WRK-CSV-START-TIME + DELIMITED BY SIZE + INTO W02ERR-DETAIL + WRITE W02OUTREC + ADD 1 TO CUN-W02OUT + GO TO 2030VALIDATESOR-EXT + END-IF. + * + *** SUB04CHKで終了日付チェック + INITIALIZE C01CHKPAR. + MOVE WRK-CSV-END-DATE TO C01CHKDAT. + MOVE 'DATE' TO C01CHKTYP. + CALL 'SUB04CHK' USING C01CHKPAR. + IF C01CHKRRC NOT = ZERO + MOVE '01' TO W02ERR-CATEGORY + STRING 'END-DATE ERROR EMP=' + WRK-CSV-EMP-ID + ' DATE=' + WRK-CSV-END-DATE + DELIMITED BY SIZE + INTO W02ERR-DETAIL + WRITE W02OUTREC + ADD 1 TO CUN-W02OUT + GO TO 2030VALIDATESOR-EXT + END-IF. + * + *** SUB04CHKで終了時刻チェック + INITIALIZE C01CHKPAR. + MOVE WRK-CSV-END-TIME TO C01CHKDAT. + MOVE 'TIME' TO C01CHKTYP. + CALL 'SUB04CHK' USING C01CHKPAR. + IF C01CHKRRC NOT = ZERO + MOVE '01' TO W02ERR-CATEGORY + STRING 'END-TIME ERROR EMP=' + WRK-CSV-EMP-ID + ' TIME=' + WRK-CSV-END-TIME + DELIMITED BY SIZE + INTO W02ERR-DETAIL + WRITE W02OUTREC + ADD 1 TO CUN-W02OUT + GO TO 2030VALIDATESOR-EXT + END-IF. + * + *** 複合条件デモ(AND+OR+3段ネスト) + IF W01START-DATE NOT = ZERO + AND W01END-DATE NOT = ZERO + AND W01START-TIME NOT = ZERO + IF W01START-DATE > W01END-DATE + OR (W01START-DATE = W01END-DATE + AND W01START-TIME >= W01END-TIME) + MOVE 10 TO WRK-DEMO-TYPE + ELSE + MOVE 20 TO WRK-DEMO-TYPE + END-IF + END-IF. + * + *** W01出力(新規/変更: APPL-ID=CSV値, STATUS='1') + MOVE WRK-CSV-APPL-ID TO W01APPL-ID. + MOVE WRK-CSV-EMP-ID TO W01EMP-ID. + MOVE WRK-CSV-LEAVE-TYPE TO W01LEAVE-TYPE. + MOVE WRK-CSV-START-DATE TO W01START-DATE. + MOVE WRK-CSV-START-TIME TO W01START-TIME. + MOVE WRK-CSV-END-DATE TO W01END-DATE. + MOVE WRK-CSV-END-TIME TO W01END-TIME. + MOVE WRK-CSV-STATUS TO W01STATUS. + WRITE W01OUTREC. + ADD 1 TO CUN-W01OUT. + * + 2030VALIDATESOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.4) * + * サブモジュール名: 取消申請処理 * + * 処理概要 : 取消レコードをW01出力(検証は行わない) * + ***************************************************************** + 2040CANCELSOR SECTION. + * + *** W01レコード初期化 + INITIALIZE W01OUTREC. + * + *** W01出力(取消: APPL-ID=CSV値, STATUS='9') + MOVE WRK-CSV-APPL-ID TO W01APPL-ID. + MOVE WRK-CSV-EMP-ID TO W01EMP-ID. + MOVE WRK-CSV-LEAVE-TYPE TO W01LEAVE-TYPE. + MOVE WRK-CSV-START-DATE TO W01START-DATE. + MOVE WRK-CSV-START-TIME TO W01START-TIME. + MOVE WRK-CSV-END-DATE TO W01END-DATE. + MOVE WRK-CSV-END-TIME TO W01END-TIME. + MOVE WRK-CSV-STATUS TO W01STATUS. + WRITE W01OUTREC. + ADD 1 TO CUN-W01OUT. + * + 2040CANCELSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.5) * + * サブモジュール名: エラー処理 * + * 処理概要 : エラーレコードをW02出力 * + ***************************************************************** + 2050ERRORSOR SECTION. + * + *** W02レコード初期化 + INITIALIZE W02OUTREC. + MOVE '01' TO W02ERR-CATEGORY. + * + *** エラー種別判定 + EVALUATE WRK-ERR-TYPE + WHEN 'F' + MOVE 1 TO WRK-DEMO-TYPE + MOVE WRK-COMMA-CNT TO WRK-DEMO-VALUE + STRING 'FIELD COUNT ERROR CNT=' + WRK-DEMO-ALPHA + DELIMITED BY SIZE + INTO W02ERR-DETAIL + WHEN 'L' + MOVE 2 TO WRK-DEMO-TYPE + MOVE 0 TO WRK-DEMO-VALUE + STRING 'INVALID LEAVE TYPE=' + WRK-CSV-LEAVE-TYPE + ' EMP=' + WRK-CSV-EMP-ID + ' ERR=' + WRK-DEMO-ALPHA + DELIMITED BY SIZE + INTO W02ERR-DETAIL + WHEN 'S' + MOVE 3 TO WRK-DEMO-TYPE + MOVE 0 TO WRK-DEMO-VALUE + STRING 'INVALID STATUS=' + WRK-CSV-STATUS + ' EMP=' + WRK-CSV-EMP-ID + ' ERR=' + WRK-DEMO-ALPHA + DELIMITED BY SIZE + INTO W02ERR-DETAIL + WHEN OTHER + MOVE 9 TO WRK-DEMO-TYPE + MOVE 0 TO WRK-DEMO-VALUE + STRING 'UNKNOWN ERROR EMP=' + WRK-CSV-EMP-ID + ' ERR=' + WRK-DEMO-ALPHA + DELIMITED BY SIZE + INTO W02ERR-DETAIL + END-EVALUATE. + * + WRITE W02OUTREC. + ADD 1 TO CUN-W02OUT. + * + 2050ERRORSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(3.0) * + * サブモジュール名: 終了処理 * + * 処理概要 : ファイルクローズ・件数と終了メッセージ出力 * + ***************************************************************** + 3000STPSOR SECTION. + * + *** 入出力ファイルCLOSE + CLOSE R01INNFIL + W01OUTFIL + W02OUTFIL. + * + *** 入出力ファイル件数出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'KIN01R01' TO M00UMKDATS22-01. + MOVE CUN-R01INN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'KIN01W01' TO M00UMKDATS22-01. + MOVE CUN-W01OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'KIN01W02' TO M00UMKDATS22-01. + MOVE CUN-W02OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + *** 終了メッセージ出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGFIN TO M00MSGCOD. + PERFORM 4000MSGOUTSOR. + * + 3000STPSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(4.0) * + * サブモジュール名: メッセージ編集出力処理 * + * 処理概要 : メッセージ編集出力サブPGM呼出 * + ***************************************************************** + 4000MSGOUTSOR SECTION. + * + MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1). + MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1). + MOVE CNS-PRGIDX TO M00UMKDATS22-05. + CALL 'SUB02MSG' USING M00MHOPAR. + * + 4000MSGOUTSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(9.9) * + * サブモジュール名: ABEND処理 * + * 処理概要 : ABENDサブPGM呼出 * + ***************************************************************** + 9999ABDSOR SECTION. + * + MOVE CNS-ABD999 TO E01ABDCOD. + CALL 'SUB03END' USING E01ABDPAR. + * + 9999ABDSOR-EXT. + EXIT. diff --git a/src/KIN02UPD.cbl b/src/KIN02UPD.cbl new file mode 100644 index 0000000..7feb5ee --- /dev/null +++ b/src/KIN02UPD.cbl @@ -0,0 +1,439 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. KIN02UPD. + ***************************************************************** + * システム名 : 勤怠休暇管理システム * + * プログラムID : KIN02UPD * + * プログラム名 : 休暇申請DB更新処理 * + * 作成日 : 2026-06-17 * + * 処理概要 : WORK-LEAVEの各レコードをDB2テーブル * + * LEAVE_RECORDSに反映する。 * + * ステータスに応じて新規登録(INSERT)、 * + * 変更(DELETE+INSERT)、取消(DELETE)を行う。 * + * * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 26-06-17 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT R01INNFIL ASSIGN TO KIN01W01. + SELECT W01OUTFIL ASSIGN TO KIN02W01. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * R01 (WORK-LEAVE) 80B FB * + ***************************************************************** + FD R01INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R01INNREC. + COPY KIN01REC REPLACING ==(A)== BY ==R01==. + * + * + ***************************************************************** + * W01 (ERROR-LOG) 200B VB * + ***************************************************************** + FD W01OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS V. + 01 W01OUTREC. + COPY KIN05REC REPLACING ==(A)== BY ==W01==. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * SQLCA * + ***************************************************************** + EXEC SQL INCLUDE SQLCA END-EXEC. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'KIN02UPD'. + 03 CNS-MSGSTR PIC 9(003) VALUE 001. + 03 CNS-MSGFIN PIC 9(003) VALUE 002. + 03 CNS-MSGSUBEEK PIC 9(003) VALUE 005. + 03 CNS-MSGIINKES PIC 9(003) VALUE 006. + 03 CNS-MSGOUTKES PIC 9(003) VALUE 007. + 03 CNS-MSGKEYINF PIC 9(003) VALUE 033. + 03 CNS-ABD999 PIC 9(003) VALUE 999. + 03 CNS-KN0002 PIC 9(001) VALUE 2. + * + ***************************************************************** + * カウンタ領域 * + ***************************************************************** + 01 CUNARA. + 03 CUN-R01INN PIC S9(009) COMP-3 + VALUE ZERO. + 03 CUN-DBXINS PIC S9(009) COMP-3 + VALUE ZERO. + 03 CUN-DBXDEL PIC S9(009) COMP-3 + VALUE ZERO. + 03 CUN-DBXUPD PIC S9(009) COMP-3 + VALUE ZERO. + 03 CUN-W01OUT PIC S9(009) COMP-3 + VALUE ZERO. + * + ***************************************************************** + * 作業領域 * + ***************************************************************** + 01 WRKARA. + *** EOF判定 + 03 WRK-R01EOF PIC X(001). + 88 WRK-R01-EOF VALUE '1'. + *** SQL用ホスト変数 + 03 WS-APPL-ID PIC 9(009). + 03 WS-EMP-ID PIC X(008). + 03 WS-LEAVE-TYPE PIC X(002). + 03 WS-START-DATE PIC X(008). + 03 WS-START-TIME PIC X(004). + 03 WS-END-DATE PIC X(008). + 03 WS-END-TIME PIC X(004). + 03 WS-STATUS PIC X(001). + *** SQLCODE表示用 + 03 WRK-SQLCODE-DISP PIC +9(009). + *** エラーログ編集領域 + 03 WRK-ERR-CATEGORY PIC 9(002). + 03 WRK-ERR-DETAIL PIC X(198). + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + *** メッセージ編集出力SR用 + COPY ZANMSGAC. + *** ABEND処理SR用 + COPY ZANENDAC. + * + PROCEDURE DIVISION. + ***************************************************************** + * サブモジュールNO: (0.0) * + * サブモジュール名: 制御処理 * + * 処理概要 : メインコントロール処理 * + ***************************************************************** + 0000MAJCOLSOR SECTION. + * + *** 初期処理 + PERFORM 1000ITTSOR. + * + *** メイン処理 + PERFORM 2000MAJSOR + UNTIL WRK-R01-EOF. + * + *** 終了処理 + PERFORM 3000STPSOR. + * + 0000MAJCOLSOR-EXT. + GOBACK. + ***************************************************************** + * サブモジュールNO: (1.0) * + * サブモジュール名: 初期処理 * + * 処理概要 : 開始メッセージ出力・各種初期化処理 * + ***************************************************************** + 1000ITTSOR SECTION. + * + *** 開始メッセージ出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGSTR TO M00MSGCOD. + PERFORM 4000MSGOUTSOR. + * + *** コンパイル日時出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGKEYINF TO M00MSGCOD. + MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01. + MOVE 'COMPILED' TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + *** ワークエリア初期化 + INITIALIZE WRKARA. + * + *** DB接続 + EXEC SQL CONNECT TO 'data/kin.db' END-EXEC. + * + *** R01ファイルOPEN + OPEN INPUT R01INNFIL. + *** W01ファイルOPEN + OPEN OUTPUT W01OUTFIL. + * + *** R01を初回読込 + PERFORM 1100R01INNSOR. + * + 1000ITTSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(1.1) * + * サブモジュール名:R01読込処理 * + * 処理概要 : WORK-LEAVE読込 * + ***************************************************************** + 1100R01INNSOR SECTION. + * + READ R01INNFIL + AT END + MOVE '1' TO WRK-R01EOF + NOT AT END + ADD 1 TO CUN-R01INN + END-READ. + * + 1100R01INNSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.0) * + * サブモジュール名:主処理 * + * 処理概要 : R01(WORK-LEAVE)→DB更新処理 * + ***************************************************************** + 2000MAJSOR SECTION. + * + *** レコード処理 + PERFORM 2100PROCSOR. + * + *** 次レコード読込 + PERFORM 1100R01INNSOR. + * + 2000MAJSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.1) * + * サブモジュール名:レコード判定処理 * + * 処理概要 : ステータス判定→各DB更新処理分岐 * + ***************************************************************** + 2100PROCSOR SECTION. + * + MOVE R01APPL-ID TO WS-APPL-ID. + MOVE R01EMP-ID TO WS-EMP-ID. + MOVE R01LEAVE-TYPE TO WS-LEAVE-TYPE. + MOVE R01START-DATE TO WS-START-DATE. + MOVE R01START-TIME TO WS-START-TIME. + MOVE R01END-DATE TO WS-END-DATE. + MOVE R01END-TIME TO WS-END-TIME. + MOVE R01STATUS TO WS-STATUS. + * + EVALUATE TRUE + WHEN WS-STATUS = '1' + AND WS-APPL-ID = 0 + PERFORM 2110INSERTSOR + WHEN WS-STATUS = '1' + AND WS-APPL-ID > 0 + PERFORM 2120UPDATESOR + WHEN WS-STATUS = '9' + PERFORM 2130DELETESOR + WHEN OTHER + CONTINUE + END-EVALUATE. + * + 2100PROCSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.1.1) * + * サブモジュール名:INSERT処理(新規登録) * + * 処理概要 : LEAVE_RECORDSに新規レコード追加 * + ***************************************************************** + 2110INSERTSOR SECTION. + * + EXEC SQL + INSERT INTO LEAVE_RECORDS + (EMP_ID, LEAVE_TYPE, + START_DATE, START_TIME, + END_DATE, END_TIME, + STATUS) + VALUES + (:WS-EMP-ID, :WS-LEAVE-TYPE, + :WS-START-DATE, :WS-START-TIME, + :WS-END-DATE, :WS-END-TIME, + :WS-STATUS) + END-EXEC. + * + IF SQLCODE NOT = 0 + PERFORM 9100DBERRSOR + END-IF. + * + ADD 1 TO CUN-DBXINS. + * + 2110INSERTSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.1.2) * + * サブモジュール名:UPDATE処理(変更) * + * 処理概要 : DELETE(旧レコード)→INSERT(新レコード) * + ***************************************************************** + 2120UPDATESOR SECTION. + * + EXEC SQL + DELETE FROM LEAVE_RECORDS + WHERE APPLICATION_ID = :WS-APPL-ID + END-EXEC. + * + IF SQLCODE NOT = 0 + PERFORM 9100DBERRSOR + END-IF. + * + EXEC SQL + INSERT INTO LEAVE_RECORDS + (EMP_ID, LEAVE_TYPE, + START_DATE, START_TIME, + END_DATE, END_TIME, + STATUS) + VALUES + (:WS-EMP-ID, :WS-LEAVE-TYPE, + :WS-START-DATE, :WS-START-TIME, + :WS-END-DATE, :WS-END-TIME, + :WS-STATUS) + END-EXEC. + * + IF SQLCODE NOT = 0 + PERFORM 9100DBERRSOR + END-IF. + * + ADD 1 TO CUN-DBXUPD. + * + 2120UPDATESOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.1.3) * + * サブモジュール名:DELETE処理(取消) * + * 処理概要 : APPL-ID一致レコードをDELETE * + ***************************************************************** + 2130DELETESOR SECTION. + * + EXEC SQL + DELETE FROM LEAVE_RECORDS + WHERE APPLICATION_ID = :WS-APPL-ID + END-EXEC. + * + IF SQLCODE NOT = 0 + PERFORM 9100DBERRSOR + END-IF. + * + ADD 1 TO CUN-DBXDEL. + * + 2130DELETESOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(3.0) * + * サブモジュール名:終了処理 * + * 処理概要 : COMMIT・ファイルクローズ・件数出力 * + ***************************************************************** + 3000STPSOR SECTION. + * + *** COMMIT + EXEC SQL + COMMIT WORK + END-EXEC. + * + *** 入出力ファイルCLOSE + CLOSE R01INNFIL + W01OUTFIL. + * + *** 件数メッセージ出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'KIN01W01' TO M00UMKDATS22-01. + MOVE CUN-R01INN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'INS' TO M00UMKDATS22-01. + MOVE CUN-DBXINS TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'UPD' TO M00UMKDATS22-01. + MOVE CUN-DBXUPD TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'DEL' TO M00UMKDATS22-01. + MOVE CUN-DBXDEL TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'KIN02W01' TO M00UMKDATS22-01. + MOVE CUN-W01OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + *** 終了メッセージ出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGFIN TO M00MSGCOD. + PERFORM 4000MSGOUTSOR. + * + 3000STPSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(4.0) * + * サブモジュール名:メッセージ編集出力処理 * + * 処理概要 : メッセージ編集出力サブPGM呼出 * + ***************************************************************** + 4000MSGOUTSOR SECTION. + * + MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1). + MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1). + MOVE CNS-PRGIDX TO M00UMKDATS22-05. + CALL 'SUB02MSG' USING M00MHOPAR. + * + 4000MSGOUTSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(9.1) * + * サブモジュール名:DBエラー処理 * + * 処理概要 : SQLエラー→ROLLBACK+メッセージ出力+ABEND * + ***************************************************************** + 9100DBERRSOR SECTION. + * + *** ROLLBACK + EXEC SQL + ROLLBACK WORK + END-EXEC. + * + *** エラーログ出力 + INITIALIZE W01OUTREC. + MOVE '01' TO W01ERR-CATEGORY. + MOVE SQLCODE TO WRK-SQLCODE-DISP. + STRING 'KIN02UPD SQLCODE=' + WRK-SQLCODE-DISP DELIMITED BY SIZE + ' APPL-ID=' + WS-APPL-ID DELIMITED BY SIZE + INTO W01ERR-DETAIL + END-STRING. + WRITE W01OUTREC. + ADD 1 TO CUN-W01OUT. + * + *** エラーメッセージ出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGSUBEEK TO M00MSGCOD. + MOVE 'KIN02UPD SQL ERROR' TO M00UMKDATS22-01. + MOVE WRK-SQLCODE-DISP TO M00UMKDATS22-02. + MOVE WS-APPL-ID TO M00UMKDATS22-03. + PERFORM 4000MSGOUTSOR. + * + PERFORM 9999ABDSOR. + * + 9100DBERRSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(9.9) * + * サブモジュール名:ABEND処理 * + * 処理概要 : ABENDサブPGM呼出 * + ***************************************************************** + 9999ABDSOR SECTION. + * + MOVE CNS-ABD999 TO E01ABDCOD. + CALL 'SUB03END' USING E01ABDPAR. + * + 9999ABDSOR-EXT. + EXIT. diff --git a/src/KIN03EXP.cbl b/src/KIN03EXP.cbl new file mode 100644 index 0000000..8c92299 --- /dev/null +++ b/src/KIN03EXP.cbl @@ -0,0 +1,511 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. KIN03EXP. + ***************************************************************** + * システム名 : 勤怠休暇管理システム * + * プログラムID : KIN03EXP * + * プログラム名 : 休暇日別展開処理 * + * 作成日 : 2026-06-17 * + * 処理概要 : LEAVE_RECORDS(DB2)より有効申請を読込み、 * + * 開始日〜終了日の期間を日別に展開し、 * + * 休日・週末を除外してLEAVE-DAILY-fileを出力 * + * する。社員番号キーブレイクで小計出力を行う。* + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 26-06-17 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT W01OUTFIL ASSIGN TO "KIN02W01.DAT". + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * W01 (LEAVE-DAILY) 80B FB * + ***************************************************************** + FD W01OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W01OUTREC. + COPY KIN02REC REPLACING ==(A)== BY ==W01==. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * SQLCA * + ***************************************************************** + EXEC SQL INCLUDE SQLCA END-EXEC. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'KIN03EXP'. + 03 CNS-MSGSTR PIC 9(003) VALUE 001. + 03 CNS-MSGFIN PIC 9(003) VALUE 002. + 03 CNS-MSGSUBEEK PIC 9(003) VALUE 005. + 03 CNS-MSGIINKES PIC 9(003) VALUE 006. + 03 CNS-MSGOUTKES PIC 9(003) VALUE 007. + 03 CNS-MSGKEYINF PIC 9(003) VALUE 033. + 03 CNS-KN0002 PIC 9(001) VALUE 2. + 03 CNS-ABD999 PIC 9(003) VALUE 999. + * + ***************************************************************** + * カウンタ領域 * + ***************************************************************** + 01 CUNARA. + 03 CUN-R01INN PIC S9(009) COMP-3 + VALUE ZERO. + 03 CUN-W01OUT PIC S9(009) COMP-3 + VALUE ZERO. + * + ***************************************************************** + * DBホスト変数(DISPLAY形式:bridgeテキストI/F対応) * + ***************************************************************** + 01 SQL-HOST-VARS. + 03 SQL-APPL-ID PIC X(009). + 03 SQL-EMP-ID PIC X(008). + 03 SQL-LEAVE-TYPE PIC X(002). + 03 SQL-START-DATE PIC X(008). + 03 SQL-START-TIME PIC X(004). + 03 SQL-END-DATE PIC X(008). + 03 SQL-END-TIME PIC X(004). + 03 SQL-HD-DATE PIC X(008). + * + ***************************************************************** + * 作業領域 * + ***************************************************************** + 01 WRKARA. + *** EOF判定 + 03 WRK-R01EOF PIC X(001). + 88 WRK-R01-EOF VALUE '1'. + *** キーブレイク用 + 03 WRK-BFR-EMP-ID PIC X(008). + *** 社員別小計カウンタ + 03 CUN-EMP-SUB PIC S9(009) COMP-3 + VALUE ZERO. + *** 日付展開用 + 03 WRK-DATE-CURRENT PIC 9(008). + 03 WRK-DATE-ALPHA REDEFINES WRK-DATE-CURRENT + PIC X(008). + 03 WRK-DATE-NUM REDEFINES WRK-DATE-CURRENT. + 05 WRK-DATE-YEAR PIC 9(004). + 05 WRK-DATE-MONTH PIC 9(002). + 05 WRK-DATE-DAY PIC 9(002). + 03 WRK-DATE-END PIC 9(008). + *** 曜日判定用 + 03 WRK-DAY-OF-WEEK PIC 9(001). + *** 休日テーブル件数(ODO前に定義) + 03 WRK-HD-COUNT PIC 9(004) COMP + VALUE ZERO. + *** 休日テーブル存在フラグ + 03 WRK-HD-FOUND PIC X(001). + *** 休日テーブル(ODOは末尾に配置) + 03 WRK-HOLIDAY-TABLE. + 05 WRK-HD-ENTRY OCCURS 1 TO 366 TIMES + DEPENDING ON WRK-HD-COUNT + ASCENDING KEY IS WRK-HD-DATE + INDEXED BY WRK-HD-IDX. + 07 WRK-HD-DATE PIC 9(008). + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + *** 運用日付取得 + COPY ZANDATAC. + *** メッセージ編集出力SR用 + COPY ZANMSGAC. + *** ABEND処理SR用 + COPY ZANENDAC. + * + PROCEDURE DIVISION. + ***************************************************************** + * サブモジュールNO: (0.0) * + * サブモジュール名: 制御処理 * + * 処理概要 : メインコントロール処理 * + ***************************************************************** + 0000MAJCOLSOR SECTION. + * + *** 初期処理 + PERFORM 1000ITTSOR. + * + *** メイン処理 + PERFORM 2000MAJSOR + UNTIL WRK-R01EOF = '1'. + * + *** 終了処理 + PERFORM 3000STPSOR. + * + 0000MAJCOLSOR-EXT. + GOBACK. + ***************************************************************** + * サブモジュールNO: (1.0) * + * サブモジュール名: 初期処理 * + * 処理概要 : 開始メッセージ出力・各種初期化処理 * + ***************************************************************** + 1000ITTSOR SECTION. + * + *** 開始メッセージ出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGSTR TO M00MSGCOD. + PERFORM 4000MSGOUTSOR. + * + *** コンパイル日時出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGKEYINF TO M00MSGCOD. + MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01. + MOVE 'COMPILED' TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + *** ワークエリア初期化 + INITIALIZE WRKARA. + * + *** DB接続 + EXEC SQL CONNECT TO 'data/kin.db' END-EXEC. + * + *** 運用日付取得 + INITIALIZE D01UBSPAR. + CALL 'SUB01DAT' USING D01UBSPAR. + IF D01FKICOD = ZERO + MOVE D01UBSUDATE TO WRK-DATE-CURRENT + ELSE + INITIALIZE M00MHOPAR + MOVE CNS-MSGSUBEEK TO M00MSGCOD + MOVE 'SUB01DAT' TO M00UMKDATS22-01 + MOVE D01FKICOD TO M00UMKDATS22-02 + PERFORM 4000MSGOUTSOR + PERFORM 9999ABDSOR + END-IF. + * + *** 休日カレンダーテーブル読込 + PERFORM 1200HDINNSOR. + * + *** 出力ファイルOPEN + OPEN OUTPUT W01OUTFIL. + * + *** C1カーソル初回FETCH(SELECT INTO) + PERFORM 1100C1INITSOR. + * + 1000ITTSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(1.1) * + * サブモジュール名:C1初回FETCH処理 * + * 処理概要 : LEAVE_RECORDSをSELECT INTO(初回のみ) * + ***************************************************************** + 1100C1INITSOR SECTION. + * + MOVE SPACES TO SQL-APPL-ID. + EXEC SQL + SELECT APPLICATION_ID, EMP_ID, LEAVE_TYPE, + START_DATE, START_TIME, + END_DATE, END_TIME + FROM LEAVE_RECORDS + WHERE STATUS = '1' + ORDER BY EMP_ID, START_DATE + INTO :SQL-APPL-ID, :SQL-EMP-ID, :SQL-LEAVE-TYPE, + :SQL-START-DATE, :SQL-START-TIME, + :SQL-END-DATE, :SQL-END-TIME + END-EXEC. + * + IF SQLCODE = 0 + ADD 1 TO CUN-R01INN + ELSE + MOVE '1' TO WRK-R01EOF + END-IF. + * + 1100C1INITSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(1.2) * + * サブモジュール名:C1次回FETCH処理 * + * 処理概要 : br_fetch_nextで次行を読込(2回目以降) * + ***************************************************************** + 1100C1FETCHSOR SECTION. + * + CALL 'br_fetch_next' USING SQLCODE. + * + IF SQLCODE = 0 + MOVE SPACES TO SQL-APPL-ID + MOVE 0 TO WS-COL-IDX + MOVE 256 TO WS-COL-LEN + CALL 'br_get_col' USING + WS-COL-IDX, SQL-APPL-ID, WS-COL-LEN + MOVE 1 TO WS-COL-IDX + MOVE 256 TO WS-COL-LEN + CALL 'br_get_col' USING + WS-COL-IDX, SQL-EMP-ID, WS-COL-LEN + MOVE 2 TO WS-COL-IDX + MOVE 256 TO WS-COL-LEN + CALL 'br_get_col' USING + WS-COL-IDX, SQL-LEAVE-TYPE, WS-COL-LEN + MOVE 3 TO WS-COL-IDX + MOVE 256 TO WS-COL-LEN + CALL 'br_get_col' USING + WS-COL-IDX, SQL-START-DATE, WS-COL-LEN + MOVE 4 TO WS-COL-IDX + MOVE 256 TO WS-COL-LEN + CALL 'br_get_col' USING + WS-COL-IDX, SQL-START-TIME, WS-COL-LEN + MOVE 5 TO WS-COL-IDX + MOVE 256 TO WS-COL-LEN + CALL 'br_get_col' USING + WS-COL-IDX, SQL-END-DATE, WS-COL-LEN + MOVE 6 TO WS-COL-IDX + MOVE 256 TO WS-COL-LEN + CALL 'br_get_col' USING + WS-COL-IDX, SQL-END-TIME, WS-COL-LEN + ADD 1 TO CUN-R01INN + ELSE + MOVE '1' TO WRK-R01EOF + END-IF. + * + 1100C1FETCHSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(1.3) * + * サブモジュール名: 休日カレンダー読込処理 * + * 処理概要 : HOLIDAY_CALENDARをWORKING-STORAGEに格納 * + ***************************************************************** + 1200HDINNSOR SECTION. + * + *** C2初回FETCH(SELECT INTO) + EXEC SQL + SELECT HOLIDAY_DATE + FROM HOLIDAY_CALENDAR + ORDER BY HOLIDAY_DATE + INTO :SQL-HD-DATE + END-EXEC. + * + *** 休日テーブルに全件読込 + PERFORM UNTIL SQLCODE NOT = 0 + ADD 1 TO WRK-HD-COUNT + MOVE SQL-HD-DATE TO WRK-HD-DATE(WRK-HD-COUNT) + CALL 'br_fetch_next' USING SQLCODE + IF SQLCODE = 0 + MOVE 0 TO WS-COL-IDX + MOVE 256 TO WS-COL-LEN + CALL 'br_get_col' USING + WS-COL-IDX, SQL-HD-DATE, WS-COL-LEN + END-IF + END-PERFORM. + * + 1200HDINNSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO: (2.0) * + * サブモジュール名: 主処理 * + * 処理概要 : キーブレイク(社員番号)毎の処理を行う * + ***************************************************************** + 2000MAJSOR SECTION. + * + *** 社員番号キー保存 + MOVE SQL-EMP-ID TO WRK-BFR-EMP-ID. + * + *** 1社員分処理(キーブレイク範囲) + PERFORM 2100-PROCESS-EMP + THRU 2100-PROCESS-EMP-EXIT. + * + 2000MAJSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO: (2.1) * + * サブモジュール名: 社員別処理 * + * 処理概要 : 1社員の全申請を処理(PERFORM THRU対象) * + ***************************************************************** + 2100-PROCESS-EMP SECTION. + * + MOVE ZERO TO CUN-EMP-SUB. + * + PERFORM UNTIL WRK-R01EOF = '1' + OR SQL-EMP-ID NOT = WRK-BFR-EMP-ID + PERFORM 2200-EXPAND-DATE + THRU 2200-EXPAND-DATE-EXIT + PERFORM 1100C1FETCHSOR + END-PERFORM. + * + *** 社員別小計出力(キーブレイク) + INITIALIZE M00MHOPAR. + MOVE CNS-MSGKEYINF TO M00MSGCOD. + MOVE WRK-BFR-EMP-ID TO M00UMKDATS22-01. + MOVE CUN-EMP-SUB TO M00UMKDATS22-02. + MOVE 'EMP SUB' TO M00UMKDATS22-03. + PERFORM 4000MSGOUTSOR. + * + 2100-PROCESS-EMP-EXIT. + EXIT. + ***************************************************************** + * サブモジュールNO: (2.2) * + * サブモジュール名: 日付展開処理 * + * 処理概要 : 開始日〜終了日をループ(PERFORM THRU対象) * + * 休日/週末を除外してLEAVE-DAILYを出力 * + ***************************************************************** + 2200-EXPAND-DATE SECTION. + * + MOVE SQL-START-DATE TO WRK-DATE-CURRENT. + MOVE SQL-END-DATE TO WRK-DATE-END. + * + PERFORM UNTIL WRK-DATE-CURRENT > WRK-DATE-END + COMPUTE WRK-DAY-OF-WEEK = + FUNCTION MOD( + FUNCTION INTEGER-OF-DATE(WRK-DATE-CURRENT), 7) + IF WRK-DAY-OF-WEEK = 0 + OR WRK-DAY-OF-WEEK = 6 + IF WRK-HD-COUNT > 0 + AND WRK-DATE-CURRENT NOT = ZERO + CONTINUE + ELSE + CONTINUE + END-IF + ELSE + *** 休日テーブル検索 + MOVE '0' TO WRK-HD-FOUND + IF WRK-HD-COUNT > 0 + SET WRK-HD-IDX TO 1 + SEARCH ALL WRK-HD-ENTRY + AT END + CONTINUE + WHEN WRK-HD-DATE(WRK-HD-IDX) + = WRK-DATE-CURRENT + MOVE '1' TO WRK-HD-FOUND + END-SEARCH + END-IF + IF WRK-HD-FOUND = '0' + INITIALIZE W01OUTREC + MOVE FUNCTION NUMVAL(SQL-APPL-ID) + TO W01APPL-ID + MOVE WRK-BFR-EMP-ID TO W01EMP-ID + MOVE SQL-LEAVE-TYPE TO W01LEAVE-TYPE + MOVE SQL-START-TIME TO W01START-TIME + MOVE SQL-END-TIME TO W01END-TIME + MOVE WRK-DATE-ALPHA + TO W01DATE + WRITE W01OUTREC + ADD 1 TO CUN-W01OUT + ADD 1 TO CUN-EMP-SUB + END-IF + END-IF + *** 日付加算 + PERFORM 2300-DATE-ADD-1 + END-PERFORM. + * + 2200-EXPAND-DATE-EXIT. + EXIT. + ***************************************************************** + * サブモジュールNO: (2.3) * + * サブモジュール名: 日付加算処理 * + * 処理概要 : 日付を1日進める(月/年跨ぎ対応) * + ***************************************************************** + 2300-DATE-ADD-1 SECTION. + * + ADD 1 TO WRK-DATE-DAY. + * + EVALUATE WRK-DATE-MONTH + WHEN 1 WHEN 3 WHEN 5 WHEN 7 + WHEN 8 WHEN 10 WHEN 12 + IF WRK-DATE-DAY > 31 + MOVE 1 TO WRK-DATE-DAY + ADD 1 TO WRK-DATE-MONTH + IF WRK-DATE-MONTH > 12 + MOVE 1 TO WRK-DATE-MONTH + ADD 1 TO WRK-DATE-YEAR + END-IF + END-IF + WHEN 4 WHEN 6 WHEN 9 WHEN 11 + IF WRK-DATE-DAY > 30 + MOVE 1 TO WRK-DATE-DAY + ADD 1 TO WRK-DATE-MONTH + END-IF + WHEN 2 + IF (FUNCTION MOD(WRK-DATE-YEAR, 400) = 0) + OR (FUNCTION MOD(WRK-DATE-YEAR, 4) = 0 + AND FUNCTION MOD(WRK-DATE-YEAR, 100) + NOT = 0) + IF WRK-DATE-DAY > 29 + MOVE 1 TO WRK-DATE-DAY + ADD 1 TO WRK-DATE-MONTH + END-IF + ELSE + IF WRK-DATE-DAY > 28 + MOVE 1 TO WRK-DATE-DAY + ADD 1 TO WRK-DATE-MONTH + END-IF + END-IF + END-EVALUATE. + * + 2300-DATE-ADD-1-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO: (3.0) * + * サブモジュール名: 終了処理 * + * 処理概要 : ファイルクローズ・件数出力 * + ***************************************************************** + 3000STPSOR SECTION. + * + *** 出力ファイルCLOSE + CLOSE W01OUTFIL. + * + *** 入力件数出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'LEAVE_RECORDS' TO M00UMKDATS22-01. + MOVE CUN-R01INN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + *** 出力件数出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'KIN02W01' TO M00UMKDATS22-01. + MOVE CUN-W01OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + *** 休日テーブル件数出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGKEYINF TO M00MSGCOD. + MOVE 'HOLIDAYS LOADED' TO M00UMKDATS22-01. + MOVE WRK-HD-COUNT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + *** 終了メッセージ出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGFIN TO M00MSGCOD. + PERFORM 4000MSGOUTSOR. + * + 3000STPSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO: (4.0) * + * サブモジュール名: メッセージ編集出力処理 * + * 処理概要 : メッセージ編集出力サブPGM呼出 * + ***************************************************************** + 4000MSGOUTSOR SECTION. + * + MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1). + MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1). + MOVE CNS-PRGIDX TO M00UMKDATS22-05. + CALL 'SUB02MSG' USING M00MHOPAR. + * + 4000MSGOUTSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(9.9) * + * サブモジュール名: ABEND処理 * + * 処理概要 : ABENDサブPGM呼出 * + ***************************************************************** + 9999ABDSOR SECTION. + * + MOVE CNS-ABD999 TO E01ABDCOD. + CALL 'SUB03END' USING E01ABDPAR. + * + 9999ABDSOR-EXT. + EXIT. diff --git a/src/ZAN01CHK.cbl b/src/ZAN01CHK.cbl index 91b1b4c..3c93663 100644 --- a/src/ZAN01CHK.cbl +++ b/src/ZAN01CHK.cbl @@ -295,6 +295,22 @@ INITIALIZE W01OUTREC W03OUTREC. * + *** SUB04CHKで社員番号チェック + INITIALIZE C01CHKPAR. + MOVE WRK-CSV-EMP-ID TO C01CHKDAT. + MOVE 'EMPID' TO C01CHKTYP. + CALL 'SUB04CHK' USING C01CHKPAR. + IF C01CHKRRC NOT = ZERO + MOVE '01' TO W03ERR-CATEGORY + STRING 'EMP-ID ERROR:' + WRK-CSV-EMP-ID + DELIMITED BY SIZE + INTO W03ERR-DETAIL + WRITE W03OUTREC + ADD 1 TO CUN-W03OUT + GO TO 2020VALIDATESOR-EXT + END-IF. + * *** SUB04CHKで日付チェック INITIALIZE C01CHKPAR. MOVE WRK-CSV-APPL-DATE TO C01CHKDAT. diff --git a/sub/SUB04CHK.cbl b/sub/SUB04CHK.cbl index f3b1826..2fbe4b3 100644 --- a/sub/SUB04CHK.cbl +++ b/sub/SUB04CHK.cbl @@ -25,10 +25,12 @@ ***************************************************************** WORKING-STORAGE SECTION. ***************************************************************** - 01 WRKARA. - 03 WRK-RETURN-CODE PIC 9(004). - 03 WRK-SIGN PIC S9(004). - 03 WRK-NN PIC 9(004). + 01 WRKARA. + 03 WRK-RETURN-CODE PIC 9(004). + 03 WRK-SIGN PIC S9(004). + 03 WRK-NN PIC 9(004). + 03 WRK-DIGIT PIC 9(004). + 03 WRK-ALPHA PIC 9(004). * ***************************************************************** * リンケージエリア * @@ -130,11 +132,21 @@ ***************************************************************** 3000CHKNUM SECTION. * - *** 非数字文字が含まれていないかチェック + *** 空チェック(全スペース→正常=オプショナル) INSPECT C01CHKDAT TALLYING WRK-NN FOR - CHARACTERS BEFORE INITIAL SPACE. - IF WRK-NN > 0 THEN + LEADING SPACES. + IF WRK-NN = LENGTH OF C01CHKDAT + MOVE ZERO TO WRK-RETURN-CODE + GO TO 3000CHKNUM-EXT + END-IF. + *** 数字(0-9)とスペースのみをカウント + INSPECT C01CHKDAT + TALLYING WRK-NN + FOR ALL "0" "1" "2" "3" "4" + "5" "6" "7" "8" "9" + SPACE. + IF WRK-NN NOT = LENGTH OF C01CHKDAT MOVE 0003 TO WRK-RETURN-CODE GO TO 3000CHKNUM-EXT END-IF. @@ -155,11 +167,42 @@ MOVE 0004 TO WRK-RETURN-CODE GO TO 4000CHKEMP-EXT END-IF. - *** 英数字チェック + *** 空チェック(全8桁がスペース→必須エラー) + IF C01CHKDAT(1:8) = SPACES + MOVE 0004 TO WRK-RETURN-CODE + GO TO 4000CHKEMP-EXT + END-IF. + *** 数字(0-9)カウント + MOVE ZERO TO WRK-DIGIT. INSPECT C01CHKDAT(1:8) - TALLYING WRK-NN FOR - CHARACTERS BEFORE INITIAL SPACE. - IF WRK-NN > 0 THEN + TALLYING WRK-DIGIT + FOR ALL "0" "1" "2" "3" "4" + "5" "6" "7" "8" "9". + *** 英字(A-Z a-z)カウント + MOVE ZERO TO WRK-ALPHA. + INSPECT C01CHKDAT(1:8) + TALLYING WRK-ALPHA + FOR ALL "A" "B" "C" "D" "E" + "F" "G" "H" "I" "J" + "K" "L" "M" "N" "O" + "P" "Q" "R" "S" "T" + "U" "V" "W" "X" "Y" + "Z" + "a" "b" "c" "d" "e" + "f" "g" "h" "i" "j" + "k" "l" "m" "n" "o" + "p" "q" "r" "s" "t" + "u" "v" "w" "x" "y" + "z". + *** スペースカウント + MOVE ZERO TO WRK-NN. + INSPECT C01CHKDAT(1:8) + TALLYING WRK-NN + FOR ALL SPACE. + *** 英数字以外(特殊文字)がないかチェック + ADD WRK-DIGIT TO WRK-ALPHA. + ADD WRK-NN TO WRK-ALPHA. + IF WRK-ALPHA NOT = 8 MOVE 0004 TO WRK-RETURN-CODE GO TO 4000CHKEMP-EXT END-IF. diff --git a/使用資源一覧/KIN01INP_使用資源一覧.md b/使用資源一覧/KIN01INP_使用資源一覧.md new file mode 100644 index 0000000..bb60650 --- /dev/null +++ b/使用資源一覧/KIN01INP_使用資源一覧.md @@ -0,0 +1,51 @@ +# KIN01INP 使用資源一覧 + +## プログラム概要 +- **プログラムID**: KIN01INP +- **プログラム名**: 休暇申請CSV取込・検証処理 +- **処理概要**: CSV形式の休暇申請ファイルを読み込み、休暇種別テーブル検索と項目チェックを行い、ステータスによってWORK-LEAVEまたはERROR-LOGへ振り分ける。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| KIN01R01 | CSV-INPUT | 順編成 | F (固定長) | 80B | なし(自前定義) | +| KIN01W01 | WORK-LEAVE | 順編成 | F (固定長) | 80B | KIN01REC | +| KIN01W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | KIN05REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| KIN01REC | レコード定義(W01出力ファイル) | FILE SECTION | +| KIN05REC | エラーログレコード定義(W02出力ファイル) | FILE SECTION | +| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE | +| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | +| ZANCHKAC | 項目チェックサブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB01DAT | 運用日付取得 | 1000ITTSOR | +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | +| SUB04CHK | 日付/時刻/社員番号妥当性チェック | 2030VALIDATESOR | + +## 使用DB2テーブル + +なし(DB操作なし) + +## 処理フロー +1. 初期処理(開始メッセージ→休暇種別テーブル設定→運用日付取得→OPEN→初回読込) +2. CSV分解(UNSTRINGで8項目に分解) +3. 休暇種別テーブル検索(SEARCH) +4. エラー前提判定 + - フィールド数≠8 → ERROR-LOG出力(種別:F) + - 休暇種別未発見 → ERROR-LOG出力(種別:L) +5. ステータス判定 + - ステータス'1'(有効)→ 項目チェック(SUB04CHK: 開始日付/時刻、終了日付/時刻)→ WORK-LEAVE出力(APPL-ID=0) + - ステータス'9'(取消)→ WORK-LEAVE出力(APPL-ID保持、チェックなし) + - その他(エラー)→ ERROR-LOG出力(種別:S) +6. 終了処理(CLOSE→件数出力→終了メッセージ) diff --git a/使用資源一覧/KIN02UPD_使用資源一覧.md b/使用資源一覧/KIN02UPD_使用資源一覧.md new file mode 100644 index 0000000..7b20202 --- /dev/null +++ b/使用資源一覧/KIN02UPD_使用資源一覧.md @@ -0,0 +1,59 @@ +# KIN02UPD 使用資源一覧 + +## プログラム概要 +- **プログラムID**: KIN02UPD +- **プログラム名**: 休暇申請DB更新処理 +- **処理概要**: WORK-LEAVEファイルの各レコードをDB2テーブルLEAVE_RECORDSに反映する。ステータスに応じて新規登録(INSERT)、変更(DELETE+INSERT)、取消(DELETE)を行う。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| KIN01W01 | WORK-LEAVE | 順編成 | F (固定長) | 80B | KIN01REC | +| KIN02W01 | ERROR-LOG | 順編成 | V (可変長) | 200B | KIN05REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| KIN01REC | レコード定義(R01入力ファイル) | FILE SECTION | +| KIN05REC | エラーログレコード定義(W01出力) | FILE SECTION | +| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | +| SQLCA | SQL通信領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | + +## 使用DB2テーブル + +| テーブル名 | 操作 | 備考 | +|-----------|------|------| +| LEAVE_RECORDS | INSERT, DELETE | APPLICATION_ID=0→INSERT, >0→DELETE+INSERT, STATUS='9'→DELETE | + +## EXEC SQL一覧 + +| SQL種別 | 処理 | 実行条件 | 使用箇所 | +|---------|------|---------|---------| +| CONNECT | TO 'data/kin.db' | 常時 | 1000ITTSOR | +| INSERT | LEAVE_RECORDSへ追加 | STATUS='1' AND APPL-ID=0 | 2110INSERTSOR | +| DELETE | APPLICATION_ID一致削除+INSERT | STATUS='1' AND APPL-ID>0 | 2120UPDATESOR | +| INSERT | LEAVE_RECORDSへ追加(変更後) | STATUS='1' AND APPL-ID>0 | 2120UPDATESOR | +| DELETE | APPLICATION_ID一致削除 | STATUS='9' | 2130DELETESOR | +| COMMIT | WORK | 常時 | 3000STPSOR | +| ROLLBACK | WORK | SQLエラー時 | 9100DBERRSOR | + +## 処理フロー +1. 初期処理(開始メッセージ→DB接続→OPEN(R01/W01)→初回読込) +2. ホスト変数設定(R01→WS-*) +3. ロジック分岐(EVALUATE) + - STATUS='1' AND APPL-ID=0 → INSERT + - STATUS='1' AND APPL-ID>0 → DELETE + INSERT + - STATUS='9' → DELETE + - その他 → スキップ +4. SQLエラー時 → ROLLBACK + ERROR-LOG出力(W01) + エラーメッセージ + ABEND +5. 終了処理(COMMIT→CLOSE(R01/W01)→件数出力→終了メッセージ) diff --git a/使用資源一覧/KIN03EXP_使用資源一覧.md b/使用資源一覧/KIN03EXP_使用資源一覧.md new file mode 100644 index 0000000..675d953 --- /dev/null +++ b/使用資源一覧/KIN03EXP_使用資源一覧.md @@ -0,0 +1,61 @@ +# KIN03EXP 使用資源一覧 + +## プログラム概要 +- **プログラムID**: KIN03EXP +- **プログラム名**: 休暇日別展開処理 +- **処理概要**: LEAVE_RECORDS(DB2)より有効申請(STATUS='1')を読込み、開始日〜終了日の期間を日別に展開し、休日・週末を除外してLEAVE-DAILYファイルを出力する。社員番号キーブレイクで小計出力を行う。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| KIN02W01.DAT | LEAVE-DAILY | 順編成 | F (固定長) | 80B | KIN02REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| KIN02REC | レコード定義(W01出力ファイル) | FILE SECTION | +| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE | +| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | +| SQLCA | SQL通信領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB01DAT | 運用日付取得 | 1000ITTSOR | +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | +| br_fetch_next | SQLカーソル次行FETCH(bridge) | 1100C1FETCHSOR, 1200HDINNSOR | +| br_get_col | SQLカラム値取得(bridge) | 1100C1FETCHSOR, 1200HDINNSOR | + +## 使用DB2テーブル + +| テーブル名 | 操作 | 備考 | +|-----------|------|------| +| LEAVE_RECORDS | SELECT | STATUS='1'、ORDER BY EMP_ID, START_DATE | +| HOLIDAY_CALENDAR | SELECT | 休日マスタ、ORDER BY HOLIDAY_DATE | + +## EXEC SQL一覧 + +| SQL種別 | 処理 | 実行条件 | 使用箇所 | +|---------|------|---------|---------| +| CONNECT | TO 'data/kin.db' | 常時 | 1000ITTSOR | +| SELECT | HOLIDAY_DATE FROM HOLIDAY_CALENDAR | 常時(初回のみ) | 1200HDINNSOR | +| SELECT | LEAVE_RECORDS(全件) | 常時(初回のみ) | 1100C1INITSOR | + +## 処理フロー +1. 初期処理(開始メッセージ→DB接続→運用日付取得) +2. 休日カレンダー全件読込(WORKING-STORAGEに格納) +3. 出力ファイルOPEN +4. DB初回FETCH(LEAVE_RECORDS:STATUS='1'、ORDER BY EMP_ID, START_DATE) +5. 社員番号キーブレイクループ + - 社員別に期間内を日別展開 + - 週末判定(MOD(INTEGER-OF-DATE,7)=0/6)→除外 + - 休日判定(SEARCH ALL on WRK-HOLIDAY-TABLE)→除外 + - 非週末・非休日 → LEAVE-DAILY出力 + - 日付加算(月跨ぎ/閏年対応) + - キーブレイク時:社員別小計メッセージ出力 +6. 終了処理(CLOSE→件数出力→終了メッセージ) diff --git a/使用資源一覧/ZAN01CHK_使用資源一覧.md b/使用資源一覧/ZAN01CHK_使用資源一覧.md index c7f5e45..38c9983 100644 --- a/使用資源一覧/ZAN01CHK_使用資源一覧.md +++ b/使用資源一覧/ZAN01CHK_使用資源一覧.md @@ -32,7 +32,7 @@ | SUB01DAT | 運用日付取得 | 1000ITTSOR | | SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | | SUB03END | ABEND処理 | 9999ABDSOR | -| SUB04CHK | 日付妥当性チェック | 2020VALIDATESOR | +| SUB04CHK | 日付/社員番号妥当性チェック | 2020VALIDATESOR | ## 使用DB2テーブル diff --git a/詳細設計書/詳細設計書_KIN01INP.md b/詳細設計書/詳細設計書_KIN01INP.md new file mode 100644 index 0000000..2d5b054 --- /dev/null +++ b/詳細設計書/詳細設計書_KIN01INP.md @@ -0,0 +1,153 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 勤怠休暇管理システム | +| 2 | プログラムID | KIN01INP | +| 3 | プログラム名 | 休暇申請CSV取込・検証処理 | +| 4 | PGMタイプ | メイン | +| 5 | PGMパターン | 振り分け | +| 6 | 機能概要 | CSV形式の休暇申請ファイルを読み込み、休暇種別テーブル検索と項目チェックを行い、ステータスによってWORK-LEAVEまたはERROR-LOGへ振り分ける。 | +| 7 | | ステータス'1':有効申請としてWORK-LEAVEに出力(項目チェック実施) | +| 8 | | ステータス'9':取消申請としてWORK-LEAVEに出力(項目チェックなし、APPL-ID保持) | +| 9 | | その他・フィールド数異常・休暇種別異常:ERROR-LOGに出力 | + +※PGMタイプ:メイン、サブ +※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 + +### 前提条件 + +| NO | 対象ファイル | 条件 | +|----|-------------|------| +| 1 | KIN01R01(CSV) | ソート不要。CSV形式(カンマ区切り、8項目) | + +### 使用ファイル一覧 + +| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | +|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| +| 1 | CSV-INPUT | R01 | KIN01R01 | I | 自前(80B) | F | | 80 | PS | CSV形式 | +| 2 | WORK-LEAVE | W01 | KIN01W01 | O | KIN01REC | FB | | 80 | PS | | +| 3 | ERROR-LOG | W02 | KIN01W02 | O | KIN05REC | VB | | 200 | PS | | + +### キー項目一覧 + +| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | +|----|-----------|---------------------|-------------------------------------------| +| 1 | CSV-INPUT | なし | なし | + +### 使用モジュール一覧 + +| NO | 機能 | プログラムID | 使用COPY名 | +|----|------|-------------|-----------| +| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC | +| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC | +| 3 | ABEND処理SUB | SUB03END | ZANENDAC | +| 4 | 項目チェックSUB | SUB04CHK | ZANCHKAC | + +--- + +## 処理詳細 + +``` +1.初期処理(1000ITTSOR) + 1-1.開始メッセージ出力 + 【メッセージ編集】 + メッセージ番号:1(開始メッセージ) + 1-2.コンパイル日時出力 + 【メッセージ編集】 + メッセージ番号:33(コンパイル日時) + PARM1:コンパイル日時 + PARM2:'COMPILED' + 1-3.ワークエリアの初期化 + 1-4.休暇種別テーブル設定(WRK-LEAVE-TYPE-TABLE) + WRK-LT-CODE(1)='01' (年休/年假) + WRK-LT-CODE(2)='02' (事假) + WRK-LT-CODE(3)='03' (因公特批假) + WRK-LT-CODE(4)='04' (病欠) + 1-5.運用日付取得SUB(SUB01DAT)により運用日を取得する。 + 復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。 + 【メッセージ編集】 + メッセージ番号:5(サブエラー) + PARM1:'SUB01DAT' + PARM2:復帰コード + 【ABEND処理SUB】 + ABENDコード:999 + 1-6.使用ファイルのオープン(R01:入力、W01/W02:出力) + 1-7.R01を読み込む。(1100R01INNSOR)(1回目) + +2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す) + 2-1.CSVの分解(2010CSVSOR) + UNSTRINGでカンマ区切りのCSVを8項目に分解する。 + (APPL-ID, EMP-ID, START-DATE, START-TIME, END-DATE, END-TIME, LEAVE-TYPE, STATUS) + 2-2.休暇種別テーブル検索(2020LEAVSERSOR) + SEARCH(非ALL)でWRK-LEAVE-TYPE-TABLEを検索し、休暇種別の妥当性を検証する。 + 2-3.エラー判定 + 2-3-1.フィールド数≠8の場合 + ERROR-LOGに出力する。(2050ERRORSOR) + エラー種別:'F'(FIELD COUNT ERROR) + 2-3-2.休暇種別がテーブルに存在しない場合 + ERROR-LOGに出力する。(2050ERRORSOR) + エラー種別:'L'(INVALID LEAVE TYPE) + 2-3-3.ステータス'1'(有効)の場合 + 項目チェックを実施し、エラーがあればERROR-LOGに出力、なければWORK-LEAVEに出力する。(2030VALIDATESOR) + 2-3-3-1.SUB04CHKで社員番号チェック(EMPID): WRK-CSV-EMP-IDをC01CHKDATに設定し、CALL 'SUB04CHK' EMPIDタイプで社員番号フォーマットの妥当性を検証する。エラーの場合はW02ERR-CATEGORY='01'でエラーログに出力し本レコードをスキップ。 + 2-3-3-2.開始日付チェック(SUB04CHK)。エラー→W02出力 + 2-3-3-3.開始時刻チェック(SUB04CHK)。エラー→W02出力 + 2-3-3-4.終了日付チェック(SUB04CHK)。エラー→W02出力 + 2-3-3-5.終了時刻チェック(SUB04CHK)。エラー→W02出力 + 2-3-3-6.複合条件チェック(AND+OR+3段ネスト) + 開始日>0 AND 終了日>0 AND 開始時刻>0 の場合: + - 開始日>終了日 → WRK-DEMO-TYPE=10 + - 開始日=終了日 AND 開始時刻>=終了時刻 → WRK-DEMO-TYPE=10 + - 上記以外 → WRK-DEMO-TYPE=20 + 2-3-3-7.すべて通過→W01出力(APPL-ID=0, STATUS='1') + 2-3-4.ステータス'9'(取消)の場合 + WORK-LEAVEにそのまま出力する。(2040CANCELSOR) + APPL-ID=CSV値、STATUS='9'(項目チェックなし) + 2-3-5.その他のステータスの場合 + ERROR-LOGに出力する。(2050ERRORSOR) + エラー種別:'S'(INVALID STATUS) + 2-4.R01を読み込む。(1100R01INNSOR)(2件目以降) + +3.終了処理(3000STPSOR) + 3-1.入出力ファイルのクローズ + 3-2.入出力件数出力メッセージ出力 + 【入力メッセージ編集】 + メッセージ番号:6(入力件数メッセージ) + PARM1:'KIN01R01' + PARM2:当該入力ファイルの件数 + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'KIN01W01'、'KIN01W02' + PARM2:当該出力ファイルの件数 + 3-3.終了メッセージ出力 + 【メッセージ編集】 + メッセージ番号:2(終了メッセージ) +``` + +--- + +## 出力レコード定義 + +### 出力ファイル1(W01/WORK-LEAVE) KIN01REC 80B FB + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | APPL-ID | WRK-CSV-APPL-ID | 有効時=0、取消時=CSV値 | +| 2 | EMP-ID | WRK-CSV-EMP-ID | | +| 3 | LEAVE-TYPE | WRK-CSV-LEAVE-TYPE | 01/02/03/04 | +| 4 | START-DATE | WRK-CSV-START-DATE | YYYYMMDD | +| 5 | START-TIME | WRK-CSV-START-TIME | HHMM | +| 6 | END-DATE | WRK-CSV-END-DATE | YYYYMMDD | +| 7 | END-TIME | WRK-CSV-END-TIME | HHMM | +| 8 | STATUS | WRK-CSV-STATUS | '1'(有効)または'9'(取消) | +| 9 | FILLER | SPACE | 36B | + +### 出力ファイル2(W02/ERROR-LOG) KIN05REC 200B VB + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | ERR-CATEGORY | '01'固定 | | +| 2 | ERR-DETAIL | STRING編集 | エラー内容(198B) | diff --git a/詳細設計書/詳細設計書_KIN02UPD.md b/詳細設計書/詳細設計書_KIN02UPD.md new file mode 100644 index 0000000..c447fb8 --- /dev/null +++ b/詳細設計書/詳細設計書_KIN02UPD.md @@ -0,0 +1,155 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 勤怠休暇管理システム | +| 2 | プログラムID | KIN02UPD | +| 3 | プログラム名 | 休暇申請DB更新処理 | +| 4 | PGMタイプ | メイン | +| 5 | PGMパターン | DB更新 | +| 6 | 機能概要 | WORK-LEAVEファイルの各レコードをDB2テーブルLEAVE_RECORDSに反映する。 | +| 7 | | ステータスによって新規登録(INSERT)、変更(DELETE+INSERT)、取消(DELETE)を行う。 | + +※PGMタイプ:メイン、サブ +※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 + +### 前提条件 + +| NO | 対象ファイル | 条件 | +|----|-------------|------| +| 1 | KIN01W01 | KIN01INPの出力順に従う。ソート不要。 | + +### 使用ファイル一覧 + +| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | +|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| +| 1 | WORK-LEAVE | R01 | KIN01W01 | I | KIN01REC | FB | | 80 | PS | | +| 2 | ERROR-LOG | W01 | KIN02W01 | O | KIN05REC | VB | | 200 | PS | DBエラー時出力 | +| 3 | LEAVE_RECORDS | DB | — | I/U/D | — | — | — | — | DB | SQLite | + +### キー項目一覧 + +| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | +|----|-----------|---------------------|-------------------------------------------| +| 1 | WORK-LEAVE | なし | なし | + +### 使用モジュール一覧 + +| NO | 機能 | プログラムID | 使用COPY名 | +|----|------|-------------|-----------| +| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC | +| 2 | ABEND処理SUB | SUB03END | ZANENDAC | + +--- + +## 処理詳細 + +``` +1.初期処理(1000ITTSOR) + 1-1.開始メッセージ出力 + 【メッセージ編集】 + メッセージ番号:1(開始メッセージ) + 1-2.コンパイル日時出力 + 【メッセージ編集】 + メッセージ番号:33(コンパイル日時) + PARM1:コンパイル日時 + PARM2:'COMPILED' + 1-3.ワークエリアの初期化 + 1-4.DB接続 + EXEC SQL CONNECT TO 'data/kin.db' + 1-5.R01ファイルOPEN(入力)+ W01ファイルOPEN(出力) + 1-6.R01を初回読込(1100R01INNSOR) + +2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す) + 2-1.レコード処理(2100PROCSOR) + 2-1-1.R01各項目をホスト変数(WS-*)にMOVEする。 + 2-1-2.ロジック分岐判定(EVALUATE) + 2-1-2-1.STATUS='1' AND APPL-ID=0(新規)の場合 + INSERT処理(2110INSERTSOR) + 【SQL】 + INSERT INTO LEAVE_RECORDS + (EMP_ID, LEAVE_TYPE, START_DATE, START_TIME, + END_DATE, END_TIME, STATUS) + VALUES + (:WS-EMP-ID, :WS-LEAVE-TYPE, + :WS-START-DATE, :WS-START-TIME, + :WS-END-DATE, :WS-END-TIME, + :WS-STATUS) + SQLCODE≠0の場合、DBエラー処理(9100DBERRSOR)を実行する。 + CUN-DBXINSを+1する。 + 2-1-2-2.STATUS='1' AND APPL-ID>0(変更)の場合 + UPDATE処理(2120UPDATESOR) + 【SQL】 + DELETE FROM LEAVE_RECORDS + WHERE APPLICATION_ID = :WS-APPL-ID + INSERT INTO LEAVE_RECORDS + (EMP_ID, LEAVE_TYPE, START_DATE, START_TIME, + END_DATE, END_TIME, STATUS) + VALUES + (:WS-EMP-ID, :WS-LEAVE-TYPE, + :WS-START-DATE, :WS-START-TIME, + :WS-END-DATE, :WS-END-TIME, + :WS-STATUS) + 各SQLでSQLCODE≠0の場合、DBエラー処理(9100DBERRSOR)を実行する。 + CUN-DBXUPDを+1する。 + 2-1-2-3.STATUS='9'(取消)の場合 + DELETE処理(2130DELETESOR) + 【SQL】 + DELETE FROM LEAVE_RECORDS + WHERE APPLICATION_ID = :WS-APPL-ID + SQLCODE≠0の場合、DBエラー処理(9100DBERRSOR)を実行する。 + CUN-DBXDELを+1する。 + 2-1-2-4.その他 + 何も処理しない(CONTINUE) + 2-2.次レコード読込(1100R01INNSOR)(2件目以降) + +3.終了処理(3000STPSOR) + 3-1.COMMIT + EXEC SQL COMMIT WORK + 3-2.入出力ファイルのクローズ + 3-3.件数メッセージ出力 + 【メッセージ編集】 + メッセージ番号:6(入力件数) + PARM1:'KIN01W01' + PARM2:入力件数 + PARM1:'INS'、'UPD'、'DEL' + PARM2:各処理件数 + 3-4.終了メッセージ出力 + 【メッセージ編集】 + メッセージ番号:2(終了メッセージ) + +4.DBエラー処理(9100DBERRSOR) + 4-1.ROLLBACK + EXEC SQL ROLLBACK WORK + 4-2.ERROR-LOG出力(W01OUTFIL) + 【MOVE → INITIALIZE & WRITE】 + MOVE SQLCODE TO WRK-SQLCODE-DISP + W01ERR-CATEGORY = '01'(固定) + W01ERR-DETAIL = 'KIN02UPD SQLCODE=' + WRK-SQLCODE-DISP + ' APPL-ID=' + WS-APPL-ID + CUN-W01OUTを+1する。 + 4-3.エラーメッセージ出力 + 【メッセージ編集】 + メッセージ番号:5(サブエラー) + PARM1:'KIN02UPD SQL ERROR' + PARM2:SQLCODE + PARM3:WS-APPL-ID + 4-4.ABEND処理SUB呼出(9999ABDSOR) + ABENDコード:999 +``` + +--- + +## 出力レコード定義 + +### 出力ファイル1(W01/ERROR-LOG) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | ERR-CATEGORY | 01で固定 | DBエラー | + | 2 | ERR-DETAIL | STRINGで編集 | KIN02UPD SQLCODE= + WRK-SQLCODE-DISP + APPL-ID= + WS-APPL-ID | + +### DB更新結果 + +LEAVE_RECORDSテーブルに直接反映される。 diff --git a/詳細設計書/詳細設計書_KIN03EXP.md b/詳細設計書/詳細設計書_KIN03EXP.md new file mode 100644 index 0000000..853b1a3 --- /dev/null +++ b/詳細設計書/詳細設計書_KIN03EXP.md @@ -0,0 +1,170 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 勤怠休暇管理システム | +| 2 | プログラムID | KIN03EXP | +| 3 | プログラム名 | 休暇日別展開処理 | +| 4 | PGMタイプ | メイン | +| 5 | PGMパターン | キーブレイク(集計) | +| 6 | 機能概要 | LEAVE_RECORDS(DB2)より有効申請(STATUS='1')を読込み、開始日〜終了日の期間を日別に展開し、休日・週末を除外してLEAVE-DAILYファイルを出力する。 | +| 7 | | 社員番号(EMP_ID)キーブレイクで小計出力を行う。 | + +※PGMタイプ:メイン、サブ +※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 + +### 前提条件 + +| NO | 対象ファイル | 条件 | +|----|-------------|------| +| 1 | DB(LEAVE_RECORDS) | EMP_ID, START_DATE順にソート済(ORDER BYで取得) | + +### 使用ファイル一覧 + +| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | +|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| +| 1 | LEAVE-DAILY | W01 | KIN02W01.DAT | O | KIN02REC | FB | | 80 | PS | 日別展開後レコード | +| 2 | LEAVE_RECORDS | DB | — | I | — | — | — | — | DB | SQLite | +| 3 | HOLIDAY_CALENDAR | DB | — | I | — | — | — | — | DB | SQLite | + +### キー項目一覧 + +| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | +|----|-----------|---------------------|-------------------------------------------| +| 1 | DB(LEAVE_RECORDS) | EMP-ID, START_DATE(昇順) | キーブレイク: EMP-ID | + +### 使用モジュール一覧 + +| NO | 機能 | プログラムID | 使用COPY名 | +|----|------|-------------|-----------| +| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC | +| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC | +| 3 | ABEND処理SUB | SUB03END | ZANENDAC | + +--- + +## 処理詳細 + +``` +1.初期処理(1000ITTSOR) + 1-1.開始メッセージ出力 + 【メッセージ編集】 + メッセージ番号:1(開始メッセージ) + 1-2.コンパイル日時出力 + 【メッセージ編集】 + メッセージ番号:33(コンパイル日時) + PARM1:コンパイル日時 + PARM2:'COMPILED' + 1-3.ワークエリアの初期化 + 1-4.DB接続 + EXEC SQL CONNECT TO 'data/kin.db' + 1-5.運用日付取得SUB(SUB01DAT)により運用日を取得する。 + 復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。 + 【メッセージ編集】 + メッセージ番号:5(サブエラー) + PARM1:'SUB01DAT' + PARM2:復帰コード + 【ABEND処理SUB】 + ABENDコード:999 + 1-6.休日カレンダーテーブル読込(1200HDINNSOR) + 【SQL】 + SELECT HOLIDAY_DATE FROM HOLIDAY_CALENDAR ORDER BY HOLIDAY_DATE + FETCHループでWORKING-STORAGEのWRK-HOLIDAY-TABLEに全件格納する。 + WRK-HD-COUNTに件数を保持。最大366件(ODO定義)。 + 1-7.出力ファイルOPEN(W01) + 1-8.C1カーソル初回FETCH(1100C1INITSOR) + 【SQL】 + SELECT APPLICATION_ID, EMP_ID, LEAVE_TYPE, + START_DATE, START_TIME, END_DATE, END_TIME + FROM LEAVE_RECORDS + WHERE STATUS = '1' + ORDER BY EMP_ID, START_DATE + INTO :SQL-APPL-ID, :SQL-EMP-ID, :SQL-LEAVE-TYPE, + :SQL-START-DATE, :SQL-START-TIME, + :SQL-END-DATE, :SQL-END-TIME + SQLCODE=0の場合、入力件数+1 + SQLCODE≠0の場合、WRK-R01EOF='1'(EOF) + +2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す) + 2-1.社員番号キー保存 + SQL-EMP-ID → WRK-BFR-EMP-ID + 2-2.1社員分処理(2100-PROCESS-EMP)(PERFORM THRU) + 2-2-1.CUN-EMP-SUB初期化(ZERO) + 2-2-2.EOFまたはキー変化(SQL-EMP-ID≠WRK-BFR-EMP-ID)まで繰り返し + 2-2-2-1.日付展開処理(2200-EXPAND-DATE)(PERFORM THRU) + 2-2-2-1-1.開始日(SQL-START-DATE)→WRK-DATE-CURRENT + 終了日(SQL-END-DATE)→WRK-DATE-END + 2-2-2-1-2.WRK-DATE-CURRENT > WRK-DATE-END までループ + 2-2-2-1-2-1.曜日判定 + COMPUTE WRK-DAY-OF-WEEK = FUNCTION MOD( + FUNCTION INTEGER-OF-DATE(WRK-DATE-CURRENT), 7) + 0=日曜日、6=土曜日 → 週末としてスキップ + 2-2-2-1-2-2.非週末の場合、休日テーブル検索 + SEARCH ALL WRK-HD-ENTRY(昇順KEY=WRK-HD-DATE) + WRK-HD-DATE(WRK-HD-IDX) = WRK-DATE-CURRENT → 休日としてスキップ + 2-2-2-1-2-3.非週末かつ非休日の場合、W01出力 + W01レコード初期化 + APPL-ID = SQL-APPL-ID + EMP-ID = WRK-BFR-EMP-ID + LEAVE-TYPE = SQL-LEAVE-TYPE + START-TIME = SQL-START-TIME + END-TIME = SQL-END-TIME + DATE = WRK-DATE-ALPHA(現在日付) + WRITE W01OUTREC + CUN-W01OUT +1 + CUN-EMP-SUB +1 + 2-2-2-1-2-4.日付加算(2300-DATE-ADD-1) + WRK-DATE-DAY + 1 + 各月の最終日判定: + - 1/3/5/7/8/10/12月:31日超で月+1、13月→年+1 + - 4/6/9/11月:30日超で月+1 + - 2月:閏年判定(MOD年400=0 または MOD年4=0 AND MOD年100≠0) + 閏年→29日超、平年→28日超で月+1 + 2-2-3.次レコードFETCH(1100C1FETCHSOR) + CALL 'br_fetch_next' USING SQLCODE + SQLCODE=0の場合、br_get_colで各カラムを取得 + SQLCODE≠0の場合、WRK-R01EOF='1' + 2-2-4.社員別小計出力(キーブレイク) + 【メッセージ編集】 + メッセージ番号:33(情報メッセージ) + PARM1:WRK-BFR-EMP-ID + PARM2:CUN-EMP-SUB + PARM3:'EMP SUB' + +3.終了処理(3000STPSOR) + 3-1.出力ファイルのクローズ + 3-2.件数メッセージ出力 + 【メッセージ編集】 + メッセージ番号:6(入力件数) + PARM1:'LEAVE_RECORDS' + PARM2:入力件数 + 【メッセージ編集】 + メッセージ番号:7(出力件数) + PARM1:'KIN02W01' + PARM2:出力件数 + 【メッセージ編集】 + メッセージ番号:33(情報) + PARM1:'HOLIDAYS LOADED' + PARM2:休日テーブル件数 + 3-3.終了メッセージ出力 + 【メッセージ編集】 + メッセージ番号:2(終了メッセージ) +``` + +--- + +## 出力レコード定義 + +### 出力ファイル1(W01/LEAVE-DAILY) KIN02REC 80B FB + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | EMP-ID | WRK-BFR-EMP-ID | キーブレイク単位 | +| 2 | DATE | WRK-DATE-ALPHA | 展開された日付(YYYYMMDD) | +| 3 | LEAVE-TYPE | SQL-LEAVE-TYPE | 01/02/03/04 | +| 4 | START-TIME | SQL-START-TIME | 元申請の開始時刻(HHMM) | +| 5 | END-TIME | SQL-END-TIME | 元申請の終了時刻(HHMM) | +| 6 | APPL-ID | SQL-APPL-ID | APPLICATION_ID | +| 7 | FILLER | SPACE | 45B |