From 75475b3fa1627c0f572f6c54d2e10d1905476fbf Mon Sep 17 00:00:00 2001 From: qiuqiuqiu Date: Thu, 9 Jul 2026 08:09:59 +0800 Subject: [PATCH] Add Subsystem C (KYU01-09): all 9 programs, design docs, resource lists, DDL, COPY, coverage stats KYU programs for payroll calculation: KYU01CVT - CSV conversion KYU02REG - attendance registration KYU03AGG - aggregation KYU04CAL - salary calculation KYU05DED - deduction calculation KYU06UPD - DB update KYU07DIV - division/pay-slip KYU08PRI - print output KYU09MRG - merge output Includes: - Source programs (9 .cbl) - Compiled executables (9 .exe) - Detailed design docs (9 + sign-off) - Basic design doc (subsystem C overview) - Resource lists (9) - DDL schema (schema_kyu.sql) - COPY book (KYU99REC.cpy) - Coverage statistics update - DB definition update (STATUS values) - Overall system design document --- bin/KYU01CVT.exe | Bin 0 -> 160437 bytes bin/KYU02REG.exe | Bin 0 -> 157469 bytes bin/KYU03AGG.exe | Bin 0 -> 151986 bytes bin/KYU04CAL.exe | Bin 0 -> 167167 bytes bin/KYU05DED.exe | Bin 0 -> 163461 bytes bin/KYU06UPD.exe | Bin 0 -> 156873 bytes bin/KYU07DIV.exe | Bin 0 -> 221230 bytes bin/KYU08PRI.exe | Bin 0 -> 155902 bytes bin/KYU09MRG.exe | Bin 0 -> 156627 bytes cpy/KYU99REC.cpy | 4 + ddl/schema_kyu.sql | 52 + src/KYU01CVT.cbl | 473 +++++++ src/KYU02REG.cbl | 319 +++++ src/KYU03AGG.cbl | 289 ++++ src/KYU04CAL.cbl | 457 +++++++ src/KYU05DED.cbl | 426 ++++++ src/KYU06UPD.cbl | 317 +++++ src/KYU07DIV.cbl | 836 ++++++++++++ src/KYU08PRI.cbl | 304 +++++ src/KYU09MRG.cbl | 349 +++++ 使用資源一覧/KYU01CVT_使用資源一覧.md | 49 + 使用資源一覧/KYU02REG_使用資源一覧.md | 45 + 使用資源一覧/KYU03AGG_使用資源一覧.md | 43 + 使用資源一覧/KYU04CAL_使用資源一覧.md | 50 + 使用資源一覧/KYU05DED_使用資源一覧.md | 49 + 使用資源一覧/KYU06UPD_使用資源一覧.md | 45 + 使用資源一覧/KYU07DIV_使用資源一覧.md | 44 + 使用資源一覧/KYU08PRI_使用資源一覧.md | 45 + 使用資源一覧/KYU09MRG_使用資源一覧.md | 49 + 品質管理/カバレッジ統計.md | 82 +- 基本設計書/00_勤怠システム_設計書(全体).md | 47 + ...与計算システム_設計書(サブシステムC).md | 1181 +++++++++++++++++ 詳細設計書/DB定義書.md | 115 ++ 詳細設計書/設計レビューサインオフ_KYU.md | 148 +++ 詳細設計書/詳細設計書_KYU01CVT.md | 156 +++ 詳細設計書/詳細設計書_KYU02REG.md | 146 ++ 詳細設計書/詳細設計書_KYU03AGG.md | 139 ++ 詳細設計書/詳細設計書_KYU04CAL.md | 176 +++ 詳細設計書/詳細設計書_KYU05DED.md | 167 +++ 詳細設計書/詳細設計書_KYU06UPD.md | 147 ++ 詳細設計書/詳細設計書_KYU07DIV.md | 193 +++ 詳細設計書/詳細設計書_KYU08PRI.md | 149 +++ 詳細設計書/詳細設計書_KYU09MRG.md | 162 +++ 43 files changed, 7212 insertions(+), 41 deletions(-) create mode 100644 bin/KYU01CVT.exe create mode 100644 bin/KYU02REG.exe create mode 100644 bin/KYU03AGG.exe create mode 100644 bin/KYU04CAL.exe create mode 100644 bin/KYU05DED.exe create mode 100644 bin/KYU06UPD.exe create mode 100644 bin/KYU07DIV.exe create mode 100644 bin/KYU08PRI.exe create mode 100644 bin/KYU09MRG.exe create mode 100644 cpy/KYU99REC.cpy create mode 100644 ddl/schema_kyu.sql create mode 100644 src/KYU01CVT.cbl create mode 100644 src/KYU02REG.cbl create mode 100644 src/KYU03AGG.cbl create mode 100644 src/KYU04CAL.cbl create mode 100644 src/KYU05DED.cbl create mode 100644 src/KYU06UPD.cbl create mode 100644 src/KYU07DIV.cbl create mode 100644 src/KYU08PRI.cbl create mode 100644 src/KYU09MRG.cbl create mode 100644 使用資源一覧/KYU01CVT_使用資源一覧.md create mode 100644 使用資源一覧/KYU02REG_使用資源一覧.md create mode 100644 使用資源一覧/KYU03AGG_使用資源一覧.md create mode 100644 使用資源一覧/KYU04CAL_使用資源一覧.md create mode 100644 使用資源一覧/KYU05DED_使用資源一覧.md create mode 100644 使用資源一覧/KYU06UPD_使用資源一覧.md create mode 100644 使用資源一覧/KYU07DIV_使用資源一覧.md create mode 100644 使用資源一覧/KYU08PRI_使用資源一覧.md create mode 100644 使用資源一覧/KYU09MRG_使用資源一覧.md create mode 100644 基本設計書/00_勤怠システム_設計書(全体).md create mode 100644 基本設計書/03_給与計算システム_設計書(サブシステムC).md create mode 100644 詳細設計書/設計レビューサインオフ_KYU.md create mode 100644 詳細設計書/詳細設計書_KYU01CVT.md create mode 100644 詳細設計書/詳細設計書_KYU02REG.md create mode 100644 詳細設計書/詳細設計書_KYU03AGG.md create mode 100644 詳細設計書/詳細設計書_KYU04CAL.md create mode 100644 詳細設計書/詳細設計書_KYU05DED.md create mode 100644 詳細設計書/詳細設計書_KYU06UPD.md create mode 100644 詳細設計書/詳細設計書_KYU07DIV.md create mode 100644 詳細設計書/詳細設計書_KYU08PRI.md create mode 100644 詳細設計書/詳細設計書_KYU09MRG.md diff --git a/bin/KYU01CVT.exe b/bin/KYU01CVT.exe new file mode 100644 index 0000000000000000000000000000000000000000..49da67cf0b1efdd831183cb28b2028180407289b GIT binary patch literal 160437 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%0Dv2D5WhH&;PIv5`n*Q~)fVSiHR zi_M%n9dUldx#;kQL1_{N6fkHUhps4Nrk%eLbJsYi5{>QH<0rNBmtwAksfhinM|KGrfC`%3Im5Qx^vEVgZog3^8WnLB8CLt$ zXL$W-hfFN`o4NY#R%KgU-Hk-4Hf6?bWZ$15Y>X8)tCEP!w8~F7CX_6HT0{WfokVm# zy{vG;t5~Z}ln(&WaiPQ^jyRA(BWI)@n9k`rD3avO#I-dW)~{c;9u;UaPB7C|%zQ{L zqZTHfqxfOZHD6i5w)Q&kRHmnp!etDh%O#Bn z<99zsF8&^j8`Ze7Zf#V6F=dn(w=$f0Tset$8mPpDLxda2uD!7t8G&w?@=)ApN&om+ za%m0X9=fq571~9bg>Tpg6V&&_t-V!AT}xYCmU4Buf_54kd7Dmvy(x3PTqTGmX+GcS zspcVmd7~6hV6%tT%`z3~)<>ndQl5faNm~wc6JDyJZbrAxks`l_}&mVYAI=UB&CLUtHG?;vS6rGd8dIlMY6_lsI>s`iLqxrM?e!C z1&i0Tc}ys6?`AS=h1G$<##TvT$0|(>3}h73ac&F~DWYHt9xxtB^*&|G7OjF;A9(MJ z^e7s}0wOM!C(6ZSChHWeB>_x^0fH1K2S0x3Vl`;J!BQ(mm$)n&eK6co=r{W=SV)B{ z+mtz($QP=`*bG-YVU?R$BGo5#yu?gUVr=&fvssj1thco;*#OWU0U*t?$j2~G(0mfw z>|lhGTA1J93>j7>d%?jSV{+omhnUgkcr&Sr;2oUG+JlCiGI>%mz|?Gqm{f<}42QQ{ zB0z1zu>348z~F%OuuG*0!`7%Wfpb=K{Y&O>u}Ixogp!JrF`~1Lqi8#TjtE<8Iugue z*v#aywTciQn5FaHi5unE5aHH`J@gANg1J3}_}iy0N2IS+Fz4YnR?gCD;|4SmD~3|J$;~`#OSgYS1{b%z!#$GHh@VyJV1X}q+07XbW5=b>V;f;rgx$a_Z7)KbeQHp5+hftV?iBC7x{Qt%gbnH8GGv~21qQP2g* z3{SQ#J*dv!|LemA1rEAA9_M+?T^}xoM0uw*TGC0}G!j*?4J>P0i(6S%24h065^391 zcELuusBNTK1E|e0zZ5Y!Sb8NQGmBkCb2c)ev%?$=9m%={{OSCk%}pnq z=&ao>3Ny~E(Hu0~4-2=UBQ|z-u(AKNwVO)htl9yxBra$W)woPCMswL-%4c?2$v(7Y zV62fsxk-@C?3|u9+LllTUIZ$l)D+>2Jo2zXF4xdWI8v#usgzzpl0fZtp$=p~r6e*q zBM?h=ie*e;sbj8}8D&;G<(L%=?q>2fRm-@xtsXc2%Dirs%Awr2vO%wckT*J-5MT#~Kh-H2w!LwV%-)*llx(_{p~XY69m)P_$cxG_ qp7{34l|+}c;HrnYIZLY9+xQ%I&0d}uSuOF6R-i-g56HmvPWxY>YY>S5 literal 0 HcmV?d00001 diff --git a/bin/KYU02REG.exe b/bin/KYU02REG.exe new file mode 100644 index 0000000000000000000000000000000000000000..e7f91c683609a1230246dc15ad49ea98b81dbd86 GIT binary patch literal 157469 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 Qrf&GgUlhtfaWU-w0P98r3IG5A literal 0 HcmV?d00001 diff --git a/bin/KYU03AGG.exe b/bin/KYU03AGG.exe new file mode 100644 index 0000000000000000000000000000000000000000..46d3b9e4bb918e5377762c854c2fcf5822da82d0 GIT binary patch literal 151986 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 literal 0 HcmV?d00001 diff --git a/bin/KYU07DIV.exe b/bin/KYU07DIV.exe new file mode 100644 index 0000000000000000000000000000000000000000..abbb3ced8f0313fabd393211d088ca9f7d31ca1b GIT binary patch literal 221230 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�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

6n3~R~z(ndfecu$d#n(|OdRwp^OdGT? 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 Lr+M5LeAxPLAnnyF literal 0 HcmV?d00001 diff --git a/bin/KYU08PRI.exe b/bin/KYU08PRI.exe new file mode 100644 index 0000000000000000000000000000000000000000..b5f425689e69aa9527092635a7ad96b2f72d33bc GIT binary patch literal 155902 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 literal 0 HcmV?d00001 diff --git a/cpy/KYU99REC.cpy b/cpy/KYU99REC.cpy new file mode 100644 index 0000000..a79ead4 --- /dev/null +++ b/cpy/KYU99REC.cpy @@ -0,0 +1,4 @@ + * ERROR-LOG エラーログレコード VB 200B + * 全KYUプログラム共用 + 03 (A)ERR-CATEGORY PIC X(008). + 03 (A)ERR-DETAIL PIC X(192). diff --git a/ddl/schema_kyu.sql b/ddl/schema_kyu.sql new file mode 100644 index 0000000..25eb32e --- /dev/null +++ b/ddl/schema_kyu.sql @@ -0,0 +1,52 @@ +-- ============================================================ +-- SALARYDB 給与計算データベース 建表文 +-- 対象DB2 : LUW +-- 作成日 : 2026-07-01 +-- ============================================================ + +-- テーブル1: EMP-MASTER(社員マスタテーブル) +CREATE TABLE EMP-MASTER ( + EMP-ID CHAR(8) NOT NULL, + EMP-NAME VARCHAR(40) NOT NULL, + DEPT-CODE CHAR(2) NOT NULL, + REGION-CODE CHAR(2) NOT NULL, + CATEGORY-CODE CHAR(3) NOT NULL, + BASE-SALARY DECIMAL(9,0) NOT NULL, + HOURLY-RATE DECIMAL(7,0) NOT NULL, + DEPENDENT-COUNT SMALLINT NOT NULL, + STATUS CHAR(1) NOT NULL, + UPDATED-AT TIMESTAMP NOT NULL, + PRIMARY KEY (EMP-ID) +); + +-- テーブル2: TAX-TABLE(税率テーブル) +CREATE TABLE TAX-TABLE ( + TAX-FROM DECIMAL(9,0) NOT NULL, + TAX-TO DECIMAL(9,0) NOT NULL, + TAX-RATE DECIMAL(5,4) NOT NULL, + DEDUCTION DECIMAL(9,0) NOT NULL, + PRIMARY KEY (TAX-FROM, TAX-TO) +); + +-- テーブル3: INSURANCE-TABLE(社会保険料率テーブル) +CREATE TABLE INSURANCE-TABLE ( + INS-INCOME-FROM DECIMAL(9,0) NOT NULL, + INS-INCOME-TO DECIMAL(9,0) NOT NULL, + INS-HEALTH-RATE DECIMAL(7,6) NOT NULL, + INS-PENSION-RATE DECIMAL(7,6) NOT NULL, + UPDATED-AT TIMESTAMP NOT NULL, + PRIMARY KEY (INS-INCOME-FROM, INS-INCOME-TO) +); + +-- テーブル4: SALARY-RESULTS(給与計算結果テーブル) +CREATE TABLE SALARY-RESULTS ( + EMP-ID CHAR(8) NOT NULL, + YEAR-MONTH CHAR(6) NOT NULL, + GROSS-PAYMENT DECIMAL(9,0) NOT NULL, + INCOME-TAX DECIMAL(9,0) NOT NULL, + INSURANCE DECIMAL(9,0) NOT NULL, + RESIDENT-TAX DECIMAL(9,0) NOT NULL, + NET-PAYMENT DECIMAL(9,0) NOT NULL, + UPDATED-AT TIMESTAMP NOT NULL, + PRIMARY KEY (EMP-ID, YEAR-MONTH) +); diff --git a/src/KYU01CVT.cbl b/src/KYU01CVT.cbl new file mode 100644 index 0000000..f479ceb --- /dev/null +++ b/src/KYU01CVT.cbl @@ -0,0 +1,473 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. KYU01CVT. + ***************************************************************** + * システム名 : 給与計算システム * + * プログラムID : KYU01CVT * + * プログラム名 : 社員マスタCSV→FB変換処理 * + * 作成日 : 2026-07-01 * + * 処理概要 : CSV形式の社員マスタを固定長80Bに変換する * + * 引用符内改行をINSPECT CONVERTINGで処理 * + * 項目チェックはSUB04CHKで実施 * + * プログラム分類: No.21 CSV→FB変換(改行あり) * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 2026-07-01 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT R01INNFIL ASSIGN TO EXTERNAL KYU01R01. + SELECT W01OUTFIL ASSIGN TO EXTERNAL KYU01W01. + SELECT W02OUTFIL ASSIGN TO EXTERNAL KYU01W02. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * R01: CSV入力(可変長) * + ***************************************************************** + FD R01INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS V. + 01 R01INNREC PIC X(500). + * + ***************************************************************** + * W01: EMP-RECORD出力(80B固定長) * + ***************************************************************** + FD W01OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W01OUTREC. + COPY KYU01REC REPLACING ==(A)== BY ==W01==. + * + ***************************************************************** + * W02: ERROR-LOG出力(VB) * + ***************************************************************** + FD W02OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS V. + 01 W02OUTREC. + COPY KYU99REC REPLACING ==(A)== BY ==W02==. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'KYU01CVT'. + 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-FLD-COUNT PIC 9(002) VALUE 9. + * + ***************************************************************** + * カウンタ領域 * + ***************************************************************** + 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. + *** CSVワーク + 03 WRK-CSV-LINE PIC X(500). + 03 WRK-CSV-ACCUM PIC X(500). + 03 WRK-ACCUM-LEN PIC 9(004). + *** 引用符状態フラグ + 03 WRK-IN-QUOTE PIC X(001). + 88 WRK-QUOTE-ACTIVE VALUE '1'. + 88 WRK-QUOTE-INACTIVE VALUE '0'. + 03 WRK-QUOTE-COUNT PIC 9(002). + *** CSV分解フィールド + 03 WRK-CSV-EMP-ID PIC X(008). + 03 WRK-CSV-EMP-NAME PIC X(040). + 03 WRK-CSV-DEPT-CODE PIC X(002). + 03 WRK-CSV-REGION-CODE PIC X(002). + 03 WRK-CSV-CATEGORY-CODE PIC X(003). + 03 WRK-CSV-BASE-SALARY PIC X(009). + 03 WRK-CSV-HOURLY-RATE PIC X(007). + 03 WRK-CSV-DEPENDENT-COUNT PIC X(002). + 03 WRK-CSV-STATUS PIC X(001). + *** UNSTRING集計 + 03 WRK-FIELD-COUNT PIC 9(002). + *** EOF + 03 WRK-EOF PIC X(001). + 88 WRK-EOF-Y VALUE '1'. + *** サブプログラム戻り値 + 03 WRK-SUB04-RC PIC 9(004). + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + *** メッセージ出力 + COPY ZANMSGAC. + *** ABEND処理 + COPY ZANENDAC. + *** 項目チェック + COPY ZANCHKAC. + * + PROCEDURE DIVISION. + ***************************************************************** + * DECLARATIVES * + ***************************************************************** + DECLARATIVES. + * + KYU01CVT-ERR SECTION. + USE AFTER ERROR PROCEDURE ON R01INNFIL. + KYU01CVT-ERR-PROC. + PERFORM 9999ABDSOR. + * + KYU01W01-ERR SECTION. + USE AFTER ERROR PROCEDURE ON W01OUTFIL. + KYU01W01-ERR-PROC. + PERFORM 9999ABDSOR. + * + KYU01W02-ERR SECTION. + USE AFTER ERROR PROCEDURE ON W02OUTFIL. + KYU01W02-ERR-PROC. + PERFORM 9999ABDSOR. + * + END DECLARATIVES. + * + ***************************************************************** + * サブモジュールNO: (0.0) * + * サブモジュール名: 制御処理 * + * 処理概要 : メインコントロール処理 * + ***************************************************************** + 0000MAJCOLSOR SECTION. + * + *** 初期処理 + PERFORM 1000ITTSOR. + * + *** 主処理 + PERFORM 2000MAJSOR + UNTIL WRK-EOF-Y. + * + *** 終了処理 + PERFORM 3000STPSOR. + * + 0000MAJCOLSOR-EXT. + GOBACK. + * + ***************************************************************** + * サブモジュールNO: (1.0) * + * サブモジュール名: 初期処理 * + * 処理概要 : 開始メッセージ・OPEN・初回READ * + ***************************************************************** + 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 SPACE TO WRK-CSV-ACCUM. + MOVE ZERO TO WRK-ACCUM-LEN. + * + *** 入出力ファイルOPEN + OPEN INPUT R01INNFIL. + OPEN OUTPUT W01OUTFIL + W02OUTFIL. + * + *** 初回READ + PERFORM 1100R01INNSOR. + * + 1000ITTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (1.1) * + * サブモジュール名: R01読込処理 * + * 処理概要 : CSV行読込 * + ***************************************************************** + 1100R01INNSOR SECTION. + * + READ R01INNFIL + AT END + SET WRK-EOF-Y TO TRUE + NOT AT END + ADD 1 TO CUN-R01INN + MOVE R01INNREC TO WRK-CSV-LINE + END-READ. + * + 1100R01INNSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.0) * + * サブモジュール名: 主処理 * + * 処理概要 : CSVライン解析・変換・出力 * + ***************************************************************** + 2000MAJSOR SECTION. + * + *** コメント行はスキップ + IF WRK-CSV-LINE(1:1) = '#' + PERFORM 1100R01INNSOR + EXIT SECTION + END-IF. + * + *** 引用符状態チェック(奇数個の"で状態反転) + MOVE ZERO TO WRK-QUOTE-COUNT. + INSPECT WRK-CSV-LINE + TALLYING WRK-QUOTE-COUNT FOR ALL '"' + * + IF WRK-QUOTE-ACTIVE + IF FUNCTION MOD(WRK-QUOTE-COUNT 2) = 1 + *** 引用符内終了 + MOVE '0' TO WRK-IN-QUOTE + END-IF + *** 蓄積 + STRING WRK-CSV-ACCUM(1:WRK-ACCUM-LEN) + WRK-CSV-LINE + DELIMITED BY SIZE + INTO WRK-CSV-ACCUM + WITH POINTER WRK-ACCUM-LEN + END-STRING + PERFORM 1100R01INNSOR + EXIT SECTION + END-IF. + * + IF FUNCTION MOD(WRK-QUOTE-COUNT 2) = 1 + *** 引用符内開始 + MOVE '1' TO WRK-IN-QUOTE + MOVE SPACE TO WRK-CSV-ACCUM + MOVE 1 TO WRK-ACCUM-LEN + STRING WRK-CSV-LINE + DELIMITED BY SIZE + INTO WRK-CSV-ACCUM + WITH POINTER WRK-ACCUM-LEN + END-STRING + PERFORM 1100R01INNSOR + EXIT SECTION + END-IF. + * + *** 通常行(引用符なし)→ 直接CSV-LINEを使用 + MOVE WRK-CSV-LINE TO WRK-CSV-ACCUM. + * + *** 引用符内改行をスペース変換 + INSPECT WRK-CSV-ACCUM + CONVERTING X"0D" TO X"20" + INSPECT WRK-CSV-ACCUM + CONVERTING X"0A" TO X"20" + * + *** CSV分解 + PERFORM 2100CSVUNSOR. + * + *** 項目数チェック + IF WRK-FIELD-COUNT NOT = CNS-FLD-COUNT + PERFORM 2200ERROUTSOR + PERFORM 1100R01INNSOR + EXIT SECTION + END-IF. + * + *** 社員番号空チェック + INSPECT WRK-CSV-EMP-ID + TALLYING WRK-FIELD-COUNT FOR LEADING SPACES + IF WRK-FIELD-COUNT = 8 + MOVE 'EMP- ' TO W02ERR-CATEGORY + MOVE CUN-R01INN TO WRK-FIELD-COUNT + STRING 'EMPTY EMP-ID AT LINE ' + WRK-FIELD-COUNT + DELIMITED BY SIZE + INTO W02ERR-DETAIL + END-STRING + WRITE W02OUTREC + ADD 1 TO CUN-W02OUT + PERFORM 1100R01INNSOR + EXIT SECTION + END-IF. + * + *** SUB04CHK: EMP-ID数値チェック + MOVE 'EMPID' TO C01CHKTYP. + MOVE WRK-CSV-EMP-ID TO C01CHKDAT. + CALL 'SUB04CHK' USING C01CHKPAR. + MOVE C01CHKRRC TO WRK-SUB04-RC. + IF WRK-SUB04-RC NOT = 0 + PERFORM 2200ERROUTSOR + PERFORM 1100R01INNSOR + EXIT SECTION + END-IF. + * + *** SUB04CHK: HOURLY-RATE数値チェック + MOVE 'NUM ' TO C01CHKTYP. + MOVE WRK-CSV-HOURLY-RATE TO C01CHKDAT. + CALL 'SUB04CHK' USING C01CHKPAR. + MOVE C01CHKRRC TO WRK-SUB04-RC. + IF WRK-SUB04-RC NOT = 0 + PERFORM 2200ERROUTSOR + PERFORM 1100R01INNSOR + EXIT SECTION + END-IF. + * + *** EMP-NAME英字チェック + IF WRK-CSV-EMP-NAME NOT ALPHABETIC + CONTINUE + END-IF. + * + *** W01OUTREC編集 + MOVE WRK-CSV-EMP-ID TO W01EMP-ID. + MOVE WRK-CSV-EMP-NAME TO W01EMP-NAME. + MOVE WRK-CSV-DEPT-CODE TO W01DEPT-CODE. + MOVE WRK-CSV-REGION-CODE TO W01REGION-CODE. + MOVE WRK-CSV-CATEGORY-CODE TO W01CATEGORY-CODE. + MOVE WRK-CSV-BASE-SALARY TO W01BASE-SALARY. + MOVE WRK-CSV-HOURLY-RATE TO W01HOURLY-RATE. + MOVE WRK-CSV-DEPENDENT-COUNT TO W01DEPENDENT-COUNT. + MOVE WRK-CSV-STATUS TO W01STATUS. + * + *** WRITE EMP-RECORD + WRITE W01OUTREC. + ADD 1 TO CUN-W01OUT. + * + *** 次行READ + PERFORM 1100R01INNSOR. + * + 2000MAJSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.1) * + * サブモジュール名: CSV分解処理 * + * 処理概要 : UNSTRINGでCSVをフィールド分解 * + ***************************************************************** + 2100CSVUNSOR SECTION. + * + INITIALIZE WRK-CSV-EMP-ID + WRK-CSV-EMP-NAME + WRK-CSV-DEPT-CODE + WRK-CSV-REGION-CODE + WRK-CSV-CATEGORY-CODE + WRK-CSV-BASE-SALARY + WRK-CSV-HOURLY-RATE + WRK-CSV-DEPENDENT-COUNT + WRK-CSV-STATUS. + * + UNSTRING WRK-CSV-ACCUM + DELIMITED BY ',' + INTO WRK-CSV-EMP-ID + WRK-CSV-EMP-NAME + WRK-CSV-DEPT-CODE + WRK-CSV-REGION-CODE + WRK-CSV-CATEGORY-CODE + WRK-CSV-BASE-SALARY + WRK-CSV-HOURLY-RATE + WRK-CSV-DEPENDENT-COUNT + WRK-CSV-STATUS + TALLYING IN WRK-FIELD-COUNT + END-UNSTRING. + * + 2100CSVUNSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.2) * + * サブモジュール名: エラー出力処理 * + * 処理概要 : ERROR-LOG書出し * + ***************************************************************** + 2200ERROUTSOR SECTION. + * + MOVE 'CSV-ERR' TO W02ERR-CATEGORY. + MOVE WRK-CSV-ACCUM(1:80) TO W02ERR-DETAIL. + WRITE W02OUTREC. + ADD 1 TO CUN-W02OUT. + * + 2200ERROUTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (3.0) * + * サブモジュール名: 終了処理 * + * 処理概要 : CLOSE・件数出力・終了MSG * + ***************************************************************** + 3000STPSOR SECTION. + * + *** CLOSE + CLOSE R01INNFIL + W01OUTFIL + W02OUTFIL. + * + *** 入力件数出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'KYU01R01' TO M00UMKDATS22-01. + MOVE CUN-R01INN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + *** 出力件数(W01) + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'KYU01W01' TO M00UMKDATS22-01. + MOVE CUN-W01OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + *** 出力件数(W02) + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'KYU01W02' 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) * + * サブモジュール名: メッセージ出力処理 * + * 処理概要 : SUB02MSG呼出 * + ***************************************************************** + 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処理 * + * 処理概要 : SUB03END呼出 * + ***************************************************************** + 9999ABDSOR SECTION. + * + MOVE CNS-ABD999 TO E01ABDCOD. + CALL 'SUB03END' USING E01ABDPAR. + * + 9999ABDSOR-EXT. + EXIT. diff --git a/src/KYU02REG.cbl b/src/KYU02REG.cbl new file mode 100644 index 0000000..15fd9da --- /dev/null +++ b/src/KYU02REG.cbl @@ -0,0 +1,319 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. KYU02REG. + ***************************************************************** + * システム名 : 給与計算システム * + * プログラムID : KYU02REG * + * プログラム名 : 社員マスタDB2登録処理 * + * 作成日 : 2026-07-01 * + * 処理概要 : EMP-RECORDをDB2 EMP-MASTERにINSERT/UPSERT * + * 重複時(-803)はUPDATEに切替 * + * プログラム分類: No.09 DB更新 * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 2026-07-01 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT R02INNFIL ASSIGN TO EXTERNAL KYU02R02. + SELECT W03OUTFIL ASSIGN TO EXTERNAL KYU02W03. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * R02: EMP-RECORD(80B FB) * + ***************************************************************** + FD R02INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R02INNREC. + COPY KYU01REC REPLACING ==(A)== BY ==R02==. + * + ***************************************************************** + * W03: ERROR-LOG(VB) * + ***************************************************************** + FD W03OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS V. + 01 W03OUTREC. + COPY KYU99REC REPLACING ==(A)== BY ==W03==. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * SQLCA * + ***************************************************************** + EXEC SQL INCLUDE SQLCA END-EXEC. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'KYU02REG'. + 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-R02INN PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W03OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-DB-INS PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-DB-UPD PIC S9(009) COMP-3 VALUE ZERO. + * + ***************************************************************** + * 作業領域 * + ***************************************************************** + 01 WRKARA. + 03 WRK-EOF PIC X(001). + 88 WRK-EOF-Y VALUE '1'. + * + ***************************************************************** + * DB2ホスト変数 * + ***************************************************************** + 01 DBVARA. + 03 DBV-EMP-ID PIC X(008). + 03 DBV-EMP-NAME PIC X(040). + 03 DBV-DEPT-CODE PIC X(002). + 03 DBV-REGION-CODE PIC X(002). + 03 DBV-CATEGORY-CODE PIC X(003). + 03 DBV-BASE-SALARY PIC 9(009). + 03 DBV-HOURLY-RATE PIC 9(007). + 03 DBV-DEPENDENT-COUNT PIC 9(002). + 03 DBV-STATUS PIC X(001). + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + COPY ZANMSGAC. + COPY ZANENDAC. + * + PROCEDURE DIVISION. + ***************************************************************** + * サブモジュールNO: (0.0) * + * サブモジュール名: 制御処理 * + ***************************************************************** + 0000MAJCOLSOR SECTION. + * + PERFORM 1000ITTSOR. + PERFORM 2000MAJSOR + UNTIL WRK-EOF-Y. + 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. + * + OPEN INPUT R02INNFIL. + OPEN OUTPUT W03OUTFIL. + * + *** DB接続 + EXEC SQL + CONNECT TO 'data/SALARY.db' + END-EXEC. + * + PERFORM 1100R02INNSOR. + * + 1000ITTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (1.1) * + * サブモジュール名: R02読込処理 * + ***************************************************************** + 1100R02INNSOR SECTION. + * + READ R02INNFIL + AT END + SET WRK-EOF-Y TO TRUE + NOT AT END + ADD 1 TO CUN-R02INN + END-READ. + * + 1100R02INNSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.0) * + * サブモジュール名: 主処理 * + ***************************************************************** + 2000MAJSOR SECTION. + * + *** DB2ホスト変数にMOVE + MOVE R02EMP-ID TO DBV-EMP-ID. + MOVE R02EMP-NAME TO DBV-EMP-NAME. + MOVE R02DEPT-CODE TO DBV-DEPT-CODE. + MOVE R02REGION-CODE TO DBV-REGION-CODE. + MOVE R02CATEGORY-CODE TO DBV-CATEGORY-CODE. + MOVE R02BASE-SALARY TO DBV-BASE-SALARY. + MOVE R02HOURLY-RATE TO DBV-HOURLY-RATE. + MOVE R02DEPENDENT-COUNT TO DBV-DEPENDENT-COUNT. + MOVE R02STATUS TO DBV-STATUS. + * + *** INSERT試行 + EXEC SQL + INSERT INTO EMP-MASTER + (EMP-ID, EMP-NAME, DEPT-CODE, + REGION-CODE, CATEGORY-CODE, + BASE-SALARY, HOURLY-RATE, + DEPENDENT-COUNT, STATUS, + UPDATED-AT) + VALUES + (:DBV-EMP-ID, :DBV-EMP-NAME, :DBV-DEPT-CODE, + :DBV-REGION-CODE, :DBV-CATEGORY-CODE, + :DBV-BASE-SALARY, :DBV-HOURLY-RATE, + :DBV-DEPENDENT-COUNT, :DBV-STATUS, + CURRENT TIMESTAMP) + END-EXEC. + * + IF SQLCODE = 0 + ADD 1 TO CUN-DB-INS + PERFORM 1100R02INNSOR + EXIT SECTION + END-IF. + * + *** -803 = 重複 → UPDATE + IF SQLCODE = -803 + EXEC SQL + UPDATE EMP-MASTER SET + EMP-NAME = :DBV-EMP-NAME + ,DEPT-CODE = :DBV-DEPT-CODE + ,REGION-CODE = :DBV-REGION-CODE + ,CATEGORY-CODE = :DBV-CATEGORY-CODE + ,BASE-SALARY = :DBV-BASE-SALARY + ,HOURLY-RATE = :DBV-HOURLY-RATE + ,DEPENDENT-COUNT = :DBV-DEPENDENT-COUNT + ,STATUS = :DBV-STATUS + ,UPDATED-AT = CURRENT TIMESTAMP + WHERE EMP-ID = :DBV-EMP-ID + END-EXEC + IF SQLCODE = 0 + ADD 1 TO CUN-DB-UPD + ELSE + PERFORM 2100ERROUTSOR + END-IF + PERFORM 1100R02INNSOR + EXIT SECTION + END-IF. + * + *** その他SQLエラー + PERFORM 2100ERROUTSOR. + PERFORM 1100R02INNSOR. + * + 2000MAJSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.1) * + * サブモジュール名: エラー出力処理 * + ***************************************************************** + 2100ERROUTSOR SECTION. + * + MOVE 'DB-ERR' TO W03ERR-CATEGORY. + MOVE DBV-EMP-ID TO W03ERR-DETAIL. + WRITE W03OUTREC. + ADD 1 TO CUN-W03OUT. + * + 2100ERROUTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (3.0) * + * サブモジュール名: 終了処理 * + ***************************************************************** + 3000STPSOR SECTION. + * + CLOSE R02INNFIL + W03OUTFIL. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'KYU02R02' TO M00UMKDATS22-01. + MOVE CUN-R02INN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'DB-INSERT' TO M00UMKDATS22-01. + MOVE CUN-DB-INS TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'DB-UPDATE' TO M00UMKDATS22-01. + MOVE CUN-DB-UPD TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'KYU02W03' TO M00UMKDATS22-01. + MOVE CUN-W03OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGFIN TO M00MSGCOD. + PERFORM 4000MSGOUTSOR. + * + 3000STPSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (4.0) * + * サブモジュール名: メッセージ出力処理 * + ***************************************************************** + 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処理 * + ***************************************************************** + 9999ABDSOR SECTION. + * + MOVE CNS-ABD999 TO E01ABDCOD. + CALL 'SUB03END' USING E01ABDPAR. + * + 9999ABDSOR-EXT. + EXIT. diff --git a/src/KYU03AGG.cbl b/src/KYU03AGG.cbl new file mode 100644 index 0000000..b350a5d --- /dev/null +++ b/src/KYU03AGG.cbl @@ -0,0 +1,289 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. KYU03AGG. + ***************************************************************** + * システム名 : 給与計算システム * + * プログラムID : KYU03AGG * + * プログラム名 : 欠勤集約処理 * + * 作成日 : 2026-07-01 * + * 処理概要 : JCL SORT済み欠勤データを社員単位に集約 * + * 同一社員内の欠勤時間・回数を集計 * + * プログラム分類: No.08 キーブレイク(集約) * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 2026-07-01 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT R01INNFIL ASSIGN TO EXTERNAL KYU03R01. + SELECT W01OUTFIL ASSIGN TO EXTERNAL KYU03W01. + SELECT W02OUTFIL ASSIGN TO EXTERNAL KYU03W02. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * R01: ABSENCE-SUMMARY(80B JCL SORT済み) * + ***************************************************************** + FD R01INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R01INNREC PIC X(080). + * + ***************************************************************** + * W01: ABSENCE-AGGREGATE(80B 社員単位) * + ***************************************************************** + FD W01OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W01OUTREC. + COPY KYU02REC REPLACING ==(A)== BY ==W01==. + * +***************************************************************** + * W02: ERROR-LOG(VB) — 将来拡張用(現時点では出力なし) * + ***************************************************************** + FD W02OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS V. + 01 W02OUTREC. + COPY KYU99REC REPLACING ==(A)== BY ==W02==. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'KYU03AGG'. + 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-ONE PIC 9(002) VALUE 1. + * + ***************************************************************** + * カウンタ領域 * + ***************************************************************** + 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-ABSENCE-REC. + 05 WRK-EMP-ID PIC X(008). + 05 WRK-YEAR-MONTH PIC X(006). + 05 WRK-ABSENT-HOURS PIC 9(004)V9(001). + 05 FILLER PIC X(062). + *** キーブレイク + 03 WRK-PREV-EMP-ID PIC X(008). + 03 WRK-PREV-KEY-SET PIC X(001). + 88 WRK-PREV-Y VALUE '1'. + *** 集約 + 03 WRK-TOTAL-HOURS PIC 9(004)V9(001). + 03 WRK-ABSENT-COUNT PIC 9(002). + *** EOF + 03 WRK-EOF PIC X(001). + 88 WRK-EOF-Y VALUE '1'. + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + COPY ZANMSGAC. + COPY ZANENDAC. + * + PROCEDURE DIVISION. + ***************************************************************** + * サブモジュールNO: (0.0) * + * サブモジュール名: 制御処理 * + ***************************************************************** + 0000MAJCOLSOR SECTION. + * + PERFORM 1000ITTSOR. + PERFORM 2000MAJSOR + UNTIL WRK-EOF-Y. + 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. + * + OPEN INPUT R01INNFIL. + OPEN OUTPUT W01OUTFIL + W02OUTFIL. + * + PERFORM 1100R01INNSOR. + * + 1000ITTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (1.1) * + * サブモジュール名: R01読込処理 * + ***************************************************************** + 1100R01INNSOR SECTION. + * + READ R01INNFIL + INTO WRK-ABSENCE-REC + AT END + SET WRK-EOF-Y TO TRUE + NOT AT END + ADD 1 TO CUN-R01INN + END-READ. + * + 1100R01INNSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.0) * + * サブモジュール名: 主処理 * + * 処理概要 : キーブレイク集約処理 * + ***************************************************************** + 2000MAJSOR SECTION. + * + IF WRK-PREV-Y + IF WRK-PREV-EMP-ID = WRK-EMP-ID + *** 同一社員 → 集約加算 + ADD 1 TO WRK-ABSENT-COUNT + ADD WRK-ABSENT-HOURS TO WRK-TOTAL-HOURS + ELSE + *** 異社員 → 前社員の集約出力 + PERFORM 2100WRITOUTSOR + MOVE WRK-EMP-ID TO WRK-PREV-EMP-ID + INITIALIZE WRK-TOTAL-HOURS + WRK-ABSENT-COUNT + REPLACING NUMERIC DATA BY ZERO + MOVE 1 TO WRK-ABSENT-COUNT + MOVE WRK-ABSENT-HOURS TO WRK-TOTAL-HOURS + END-IF + ELSE + *** 初回 + MOVE WRK-EMP-ID TO WRK-PREV-EMP-ID + SET WRK-PREV-Y TO TRUE + MOVE CNS-ONE TO WRK-ABSENT-COUNT + MOVE WRK-ABSENT-HOURS TO WRK-TOTAL-HOURS + END-IF. + * + PERFORM 1100R01INNSOR. + * + 2000MAJSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.1) * + * サブモジュール名: 集約レコード出力処理 * + ***************************************************************** + 2100WRITOUTSOR SECTION. + * + INITIALIZE W01OUTREC. + MOVE WRK-PREV-EMP-ID TO W01EMP-ID. + MOVE WRK-YEAR-MONTH TO W01YEAR-MONTH. + MOVE WRK-TOTAL-HOURS TO W01TOTAL-HOURS. + MOVE WRK-ABSENT-COUNT TO W01ABSENT-COUNT. + WRITE W01OUTREC. + ADD 1 TO CUN-W01OUT. + * + 2100WRITOUTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (3.0) * + * サブモジュール名: 終了処理 * + ***************************************************************** + 3000STPSOR SECTION. + * + *** 最終社員の集約出力 + IF WRK-PREV-Y + PERFORM 2100WRITOUTSOR + END-IF. + * + CLOSE R01INNFIL + W01OUTFIL + W02OUTFIL. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'KYU03R01' TO M00UMKDATS22-01. + MOVE CUN-R01INN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'KYU03W01' TO M00UMKDATS22-01. + MOVE CUN-W01OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'KYU03W02' 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) * + * サブモジュール名: メッセージ出力処理 * + ***************************************************************** + 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処理 * + ***************************************************************** + 9999ABDSOR SECTION. + * + MOVE CNS-ABD999 TO E01ABDCOD. + CALL 'SUB03END' USING E01ABDPAR. + * + 9999ABDSOR-EXT. + EXIT. diff --git a/src/KYU04CAL.cbl b/src/KYU04CAL.cbl new file mode 100644 index 0000000..4975826 --- /dev/null +++ b/src/KYU04CAL.cbl @@ -0,0 +1,457 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. KYU04CAL. + ***************************************************************** + * システム名 : 給与計算システム * + * プログラムID : KYU04CAL * + * プログラム名 : 給与計算処理 * + * 作成日 : 2026-07-01 * + * 処理概要 : 欠勤集約 + EMP-MASTER + OVT-MONTHLY を * + * 参照し給与計算を実行 * + * 勤怠区分×手当種別の複合分岐はEVALUATE ALSO * + * プログラム分類: No.32 1:N+キーブレイク(同キー) * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 2026-07-01 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT R02INNFIL ASSIGN TO EXTERNAL KYU04R02. + SELECT R03INNFIL ASSIGN TO EXTERNAL KYU04R03. + SELECT W03OUTFIL ASSIGN TO EXTERNAL KYU04W03. + SELECT W04OUTFIL ASSIGN TO EXTERNAL KYU04W04. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * R02: ABSENCE-AGGREGATE(80B 社員単位) * + ***************************************************************** + FD R02INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R02INNREC. + COPY KYU02REC REPLACING ==(A)== BY ==R02==. + * + ***************************************************************** + * R03: PAY-PARAM(80B FB) * + ***************************************************************** + FD R03INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R03INNREC PIC X(080). + * + ***************************************************************** + * W03: SALARY-DETAIL(240B FB) * + ***************************************************************** + FD W03OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W03OUTREC. + COPY KYU03REC REPLACING ==(A)== BY ==W03==. + * + ***************************************************************** + * W04: ERROR-LOG(VB) * + ***************************************************************** + FD W04OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS V. + 01 W04OUTREC. + COPY KYU99REC REPLACING ==(A)== BY ==W04==. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * SQLCA * + ***************************************************************** + EXEC SQL INCLUDE SQLCA END-EXEC. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'KYU04CAL'. + 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-OVERTIME-RATE PIC 9(002)V9(002) + VALUE 01.25. + 03 CNS-HOLIDAY-RATE PIC 9(001)V9(02) + VALUE 1.35. + * + ***************************************************************** + * カウンタ領域 * + ***************************************************************** + 01 CUNARA. + 03 CUN-R02INN PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W03OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W04OUT PIC S9(009) COMP-3 VALUE ZERO. + * + ***************************************************************** + * 作業領域 * + ***************************************************************** + 01 WRKARA. + 03 WRK-EOF PIC X(001). + 88 WRK-EOF-Y VALUE '1'. + *** パラメータ + 03 WRK-PARAM. + 05 WRK-PARAM-BASE PIC X(080). + 05 WRK-PARAM-FILLER PIC X(080). + *** 給与計算 + 03 WRK-YEAR-MONTH PIC X(006). + 03 WRK-EMP-ID PIC X(008). + 03 WRK-EMP-NAME PIC X(040). + 03 WRK-DEPT-CODE PIC X(002). + 03 WRK-REGION-CODE PIC X(002). + 03 WRK-CATEGORY-CODE PIC X(003). + 03 WRK-BASE-SALARY PIC 9(009). + 03 WRK-HOURLY-RATE PIC 9(007). + 03 WRK-DEPENDENT-COUNT PIC 9(002). + 03 WRK-ABSENT-HOURS PIC 9(004)V9(001). + 03 WRK-OVT-HOURS PIC 9(004)V9(001). + 03 WRK-ABSENT-DEDUCT PIC 9(009). + 03 WRK-OVT-AMOUNT PIC 9(009). + 03 WRK-GROSS-PAYMENT PIC 9(009). + 03 WRK-ALLOWANCE-TYPE PIC X(003). + 03 WRK-ATTEND-TYPE PIC X(001). + 03 WRK-AMOUNT PIC 9(009). + * + ***************************************************************** + * DB2ホスト変数 * + ***************************************************************** + 01 DBVARA. + 03 DBV-EMP-ID PIC X(008). + 03 DBV-BASE-SALARY PIC 9(009). + 03 DBV-HOURLY-RATE PIC 9(007). + 03 DBV-DEPENDENT-COUNT PIC 9(002). + 03 DBV-EMPLOYEE-NAME PIC X(040). + 03 DBV-DEPT-CODE PIC X(002). + 03 DBV-OVT-HOURS PIC 9(004)V9(001). + 03 DBV-STATUS PIC X(001). + * + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + COPY ZANDATAC. + COPY ZANMSGAC. + COPY ZANENDAC. + * + PROCEDURE DIVISION. + ***************************************************************** + * サブモジュールNO: (0.0) * + * サブモジュール名: 制御処理 * + ***************************************************************** + 0000MAJCOLSOR SECTION. + * + PERFORM 1000ITTSOR. + PERFORM 2000MAJSOR + UNTIL WRK-EOF-Y. + 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. + * + *** 運用日付取得 + INITIALIZE D01UBSPAR. + CALL 'SUB01DAT' USING D01UBSPAR. + IF D01FKICOD NOT = ZERO + MOVE CNS-MSGSUBEEK TO M00MSGCOD + MOVE 'SUB01DAT' TO M00UMKDATS22-01 + MOVE D01FKICOD TO M00UMKDATS22-02 + PERFORM 4000MSGOUTSOR + PERFORM 9999ABDSOR + END-IF. + * + *** PAY-PARAM読込 + OPEN INPUT R03INNFIL. + READ R03INNFIL + INTO WRK-PARAM-BASE + END-READ. + CLOSE R03INNFIL. + * + *** パラメータ解析 + UNSTRING WRK-PARAM-BASE + DELIMITED BY ',' + INTO WRK-YEAR-MONTH + END-UNSTRING. + * + OPEN INPUT R02INNFIL. + OPEN OUTPUT W03OUTFIL + W04OUTFIL. + * + *** DB接続 + EXEC SQL + CONNECT TO 'data/SALARY.db' + END-EXEC. + * + PERFORM 1100R02INNSOR. + * + 1000ITTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (1.1) * + * サブモジュール名: R02読込処理 * + ***************************************************************** + 1100R02INNSOR SECTION. + * + READ R02INNFIL + AT END + SET WRK-EOF-Y TO TRUE + NOT AT END + ADD 1 TO CUN-R02INN + END-READ. + * + 1100R02INNSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.0) * + * サブモジュール名: 主処理 * + ***************************************************************** + 2000MAJSOR SECTION. + * + *** ホスト変数セット + MOVE R02EMP-ID TO DBV-EMP-ID. + * + *** DB2 EMP-MASTER参照 + EXEC SQL + SELECT EMP-NAME, DEPT-CODE, REGION-CODE, + CATEGORY-CODE, BASE-SALARY, HOURLY-RATE, + DEPENDENT-COUNT, STATUS + INTO :DBV-EMPLOYEE-NAME, + :DBV-DEPT-CODE, + :WRK-REGION-CODE, + :WRK-CATEGORY-CODE, + :DBV-BASE-SALARY, + :DBV-HOURLY-RATE, + :DBV-DEPENDENT-COUNT, + :DBV-STATUS + FROM EMP-MASTER + WHERE EMP-ID = :DBV-EMP-ID + END-EXEC. + * + IF SQLCODE NOT = 0 + PERFORM 2200ERROUTSOR + PERFORM 1100R02INNSOR + EXIT SECTION + END-IF. + * + MOVE DBV-EMPLOYEE-NAME TO WRK-EMP-NAME. + MOVE DBV-BASE-SALARY TO WRK-BASE-SALARY. + MOVE DBV-HOURLY-RATE TO WRK-HOURLY-RATE. + MOVE DBV-DEPT-CODE TO WRK-DEPT-CODE. + MOVE R02YEAR-MONTH TO WRK-YEAR-MONTH. + MOVE R02TOTAL-HOURS TO WRK-ABSENT-HOURS. + * + *** OVT-MONTHLY参照(残業時間) + EXEC SQL + SELECT SUM(OVT-HOURS) + INTO :DBV-OVT-HOURS + FROM OVT-MONTHLY + WHERE EMP-ID = :DBV-EMP-ID + AND YEAR-MONTH = :WRK-YEAR-MONTH + END-EXEC. + IF SQLCODE = 0 + CONTINUE + ELSE + MOVE ZERO TO DBV-OVT-HOURS + END-IF. + * + *** 給与計算 + PERFORM 2100CALCSOR. + * + *** SALARY-DETAIL出力 + PERFORM 2110WRITOUTSOR. + * + PERFORM 1100R02INNSOR. + * + 2000MAJSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.1) * + * サブモジュール名: 給与計算処理 * + ***************************************************************** + 2100CALCSOR SECTION. + * + *** 欠勤控除額 + COMPUTE WRK-ABSENT-DEDUCT ROUNDED = + DBV-HOURLY-RATE * WRK-ABSENT-HOURS + ON SIZE ERROR + MOVE ZERO TO WRK-ABSENT-DEDUCT + END-COMPUTE. + * + *** 残業手当 + COMPUTE WRK-OVT-AMOUNT ROUNDED = + DBV-HOURLY-RATE * DBV-OVT-HOURS * CNS-OVERTIME-RATE + ON SIZE ERROR + MOVE ZERO TO WRK-OVT-AMOUNT + END-COMPUTE. + * + *** EVALUATE ALSO(勤怠区分×手当種別) + MOVE 'OVT' TO WRK-ALLOWANCE-TYPE. + MOVE 'W' TO WRK-ATTEND-TYPE. + * + EVALUATE WRK-ALLOWANCE-TYPE + ALSO WRK-ATTEND-TYPE + WHEN 'OVT' ALSO 'W' + COMPUTE WRK-AMOUNT ROUNDED = + DBV-HOURLY-RATE * DBV-OVT-HOURS * 1.25 + END-COMPUTE + WHEN 'OVT' ALSO 'H' + COMPUTE WRK-AMOUNT ROUNDED = + DBV-HOURLY-RATE * DBV-OVT-HOURS * 1.35 + END-COMPUTE + WHEN 'LATE' ALSO ANY + COMPUTE WRK-AMOUNT ROUNDED = + DBV-HOURLY-RATE * DBV-OVT-HOURS * 0.50 + END-COMPUTE + WHEN OTHER + MOVE ZERO TO WRK-AMOUNT + END-EVALUATE. + * + *** 支給総額 + COMPUTE WRK-GROSS-PAYMENT = + DBV-BASE-SALARY + WRK-OVT-AMOUNT + - WRK-ABSENT-DEDUCT + END-COMPUTE. + * + 2100CALCSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.2) * + * サブモジュール名: SALARY-DETAIL出力処理 * + ***************************************************************** + 2110WRITOUTSOR SECTION. + * + INITIALIZE W03OUTREC. + MOVE R02EMP-ID TO W03EMP-ID. + MOVE WRK-EMP-NAME TO W03EMP-NAME. + MOVE WRK-DEPT-CODE TO W03DEPT-CODE. + MOVE DBV-BASE-SALARY TO W03BASE-SALARY. + MOVE WRK-OVT-AMOUNT TO W03OVT-AMOUNT. + MOVE ZERO TO W03HOLIDAY-AMOUNT. + MOVE WRK-ABSENT-DEDUCT TO W03ABSENT-DEDUCT. + MOVE WRK-GROSS-PAYMENT TO W03GROSS-PAYMENT. + MOVE DBV-OVT-HOURS TO W03OVT-HOURS. + MOVE WRK-ABSENT-HOURS TO W03ABSENT-HOURS. + MOVE WRK-ATTEND-TYPE TO W03ATTEND-TYPE. + MOVE WRK-ALLOWANCE-TYPE TO W03ALLOWANCE-TYPE. + WRITE W03OUTREC. + ADD 1 TO CUN-W03OUT. + * + 2110WRITOUTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.3) * + * サブモジュール名: エラー出力処理 * + ***************************************************************** + 2200ERROUTSOR SECTION. + * + MOVE 'DB-ERR' TO W04ERR-CATEGORY. + MOVE R02EMP-ID TO W04ERR-DETAIL. + WRITE W04OUTREC. + ADD 1 TO CUN-W04OUT. + * + 2200ERROUTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (3.0) * + * サブモジュール名: 終了処理 * + ***************************************************************** + 3000STPSOR SECTION. + * + CLOSE R02INNFIL + W03OUTFIL + W04OUTFIL. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'KYU04R02' TO M00UMKDATS22-01. + MOVE CUN-R02INN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'KYU04W03' TO M00UMKDATS22-01. + MOVE CUN-W03OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'KYU04W04' TO M00UMKDATS22-01. + MOVE CUN-W04OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGFIN TO M00MSGCOD. + PERFORM 4000MSGOUTSOR. + * + 3000STPSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (4.0) * + * サブモジュール名: メッセージ出力処理 * + ***************************************************************** + 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処理 * + ***************************************************************** + 9999ABDSOR SECTION. + * + MOVE CNS-ABD999 TO E01ABDCOD. + CALL 'SUB03END' USING E01ABDPAR. + * + 9999ABDSOR-EXT. + EXIT. diff --git a/src/KYU05DED.cbl b/src/KYU05DED.cbl new file mode 100644 index 0000000..067b150 --- /dev/null +++ b/src/KYU05DED.cbl @@ -0,0 +1,426 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. KYU05DED. + ***************************************************************** + * システム名 : 給与計算システム * + * プログラムID : KYU05DED * + * プログラム名 : 控除計算処理 * + * 作成日 : 2026-07-01 * + * 処理概要 : SALARY-DETAILを入力に、源泉所得税・ * + * 社会保険料・住民税を計算しSALARY-NET出力 * + * TAX-TABLE(DB2 SELECT ... BETWEEN) * + * INSURANCE-TABLE(SEARCH ALL)を参照 * + * プログラム分類: No.23 SELECT条件 * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 2026-07-01 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT R01INNFIL ASSIGN TO EXTERNAL KYU05R01. + SELECT W01OUTFIL ASSIGN TO EXTERNAL KYU05W01. + SELECT W02OUTFIL ASSIGN TO EXTERNAL KYU05W02. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * R01: SALARY-DETAIL(240B FB) * + ***************************************************************** + FD R01INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R01INNREC. + COPY KYU03REC REPLACING ==(A)== BY ==R01==. + * + ***************************************************************** + * W01: SALARY-NET(200B FB) * + ***************************************************************** + FD W01OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W01OUTREC. + COPY KYU04REC REPLACING ==(A)== BY ==W01==. + * + ***************************************************************** + * W02: ERROR-LOG(VB) * + ***************************************************************** + FD W02OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS V. + 01 W02OUTREC. + COPY KYU99REC REPLACING ==(A)== BY ==W02==. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * SQLCA * + ***************************************************************** + EXEC SQL INCLUDE SQLCA END-EXEC. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'KYU05DED'. + 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-TAX-BASIC-DEDUCTION PIC 9(006) VALUE 050000. + 03 CNS-RESIDENT-TAX-RATE PIC 9(001)V9(02) + VALUE 0.10. + * + ***************************************************************** + * カウンタ領域 * + ***************************************************************** + 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-EOF PIC X(001). + 88 WRK-EOF-Y VALUE '1'. + *** 控除計算 + 03 WRK-GROSS-PAYMENT PIC 9(009). + 03 WRK-TAXABLE-INCOME PIC 9(009). + 03 WRK-INCOME-TAX PIC 9(009). + 03 WRK-INSURANCE PIC 9(009). + 03 WRK-RESIDENT-TAX PIC 9(009). + 03 WRK-NET-PAYMENT PIC 9(009). + * + * + ***************************************************************** + * DB2ホスト変数 * + ***************************************************************** + 01 DBVARA. + 03 DBV-EMP-ID PIC X(008). + 03 DBV-TAX-RATE PIC 9(001)V9(04). + 03 DBV-TAX-DEDUCTION PIC 9(009). + * + ***************************************************************** + * 保険料率WORKING-STORAGE(SEARCH ALL) * + ***************************************************************** + 01 INSURANCE-WORK. + 03 IW-COUNT PIC 9(004). + 03 IW-ENTRY OCCURS 1 TO 200 TIMES + DEPENDING ON IW-COUNT + ASCENDING KEY IS IW-INCOME-FROM + INDEXED BY IW-IDX. + 05 IW-INCOME-FROM PIC 9(009). + 05 IW-INCOME-TO PIC 9(009). + 05 IW-HEALTH-RATE PIC V9(006). + 05 IW-PENSION-RATE PIC V9(006). + * + ***************************************************************** + * DB2ホスト変数(保険料率FETCH用) * + ***************************************************************** + 01 DBV-INS. + 03 DBV-INS-INCOME-FROM PIC 9(009). + 03 DBV-INS-INCOME-TO PIC 9(009). + 03 DBV-INS-HEALTH-RATE PIC 9(001)V9(06). + 03 DBV-INS-PENSION-RATE PIC 9(001)V9(06). + * + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + COPY ZANMSGAC. + COPY ZANENDAC. + * + PROCEDURE DIVISION. + ***************************************************************** + * サブモジュールNO: (0.0) * + * サブモジュール名: 制御処理 * + ***************************************************************** + 0000MAJCOLSOR SECTION. + * + PERFORM 1000ITTSOR. + PERFORM 2000MAJSOR + UNTIL WRK-EOF-Y. + 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/SALARY.db' + END-EXEC. + * + OPEN INPUT R01INNFIL. + OPEN OUTPUT W01OUTFIL + W02OUTFIL. + * + *** INSURANCE-TABLE全件LOAD + PERFORM 1100INSLOADSOR. + * + PERFORM 1200R01INNSOR. + * + 1000ITTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (1.1) * + * サブモジュール名: 保険料率テーブルLOAD処理 * + ***************************************************************** + 1100INSLOADSOR SECTION. + * + MOVE ZERO TO IW-COUNT. + * + EXEC SQL + DECLARE INS-CURSOR CURSOR FOR + SELECT INS-INCOME-FROM, INS-INCOME-TO, + INS-HEALTH-RATE, INS-PENSION-RATE + FROM INSURANCE-TABLE + ORDER BY INS-INCOME-FROM + END-EXEC. + * + EXEC SQL + OPEN INS-CURSOR + END-EXEC. + IF SQLCODE NOT = 0 + MOVE 'INS-CURSOR OPEN ERR' + TO W02ERR-DETAIL + PERFORM 9999ABDSOR + END-IF. + * + PERFORM UNTIL SQLCODE NOT = 0 + EXEC SQL + FETCH INS-CURSOR + INTO :DBV-INS-INCOME-FROM, + :DBV-INS-INCOME-TO, + :DBV-INS-HEALTH-RATE, + :DBV-INS-PENSION-RATE + END-EXEC + IF SQLCODE = 0 + ADD 1 TO IW-COUNT + MOVE DBV-INS-INCOME-FROM + TO IW-INCOME-FROM(IW-COUNT) + MOVE DBV-INS-INCOME-TO + TO IW-INCOME-TO(IW-COUNT) + MOVE DBV-INS-HEALTH-RATE + TO IW-HEALTH-RATE(IW-COUNT) + MOVE DBV-INS-PENSION-RATE + TO IW-PENSION-RATE(IW-COUNT) + END-IF + END-PERFORM. + * + EXEC SQL + CLOSE INS-CURSOR + END-EXEC. + * + 1100INSLOADSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (1.2) * + * サブモジュール名: R01読込処理 * + ***************************************************************** + 1200R01INNSOR SECTION. + * + READ R01INNFIL + AT END + SET WRK-EOF-Y TO TRUE + NOT AT END + ADD 1 TO CUN-R01INN + END-READ. + * + 1200R01INNSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.0) * + * サブモジュール名: 主処理 * + ***************************************************************** + 2000MAJSOR SECTION. + * + MOVE R01GROSS-PAYMENT TO WRK-GROSS-PAYMENT. + MOVE R01EMP-ID TO DBV-EMP-ID. + * + * 課税所得計算 + IF WRK-GROSS-PAYMENT < CNS-TAX-BASIC-DEDUCTION + MOVE ZERO TO WRK-TAXABLE-INCOME + ELSE + COMPUTE WRK-TAXABLE-INCOME = + WRK-GROSS-PAYMENT - CNS-TAX-BASIC-DEDUCTION + END-COMPUTE + END-IF. + * + *** TAX-TABLE参照(BETWEEN) + EXEC SQL + SELECT TAX-RATE, DEDUCTION + INTO :DBV-TAX-RATE, :DBV-TAX-DEDUCTION + FROM TAX-TABLE + WHERE :WRK-TAXABLE-INCOME + BETWEEN TAX-FROM AND TAX-TO + END-EXEC. + * + IF SQLCODE = 0 + COMPUTE WRK-INCOME-TAX ROUNDED = + WRK-TAXABLE-INCOME * DBV-TAX-RATE + - DBV-TAX-DEDUCTION + END-COMPUTE + IF WRK-INCOME-TAX < ZERO + MOVE ZERO TO WRK-INCOME-TAX + END-IF + ELSE + MOVE ZERO TO WRK-INCOME-TAX + END-IF. + * + *** 社会保険料計算(SEARCH順次) + SET IW-IDX TO 1. + SEARCH IW-ENTRY + AT END + MOVE ZERO TO WRK-INSURANCE + WHEN IW-INCOME-FROM(IW-IDX) + <= WRK-TAXABLE-INCOME + AND WRK-TAXABLE-INCOME + <= IW-INCOME-TO(IW-IDX) + COMPUTE WRK-INSURANCE ROUNDED = + WRK-TAXABLE-INCOME * + (IW-HEALTH-RATE(IW-IDX) + + IW-PENSION-RATE(IW-IDX)) + END-COMPUTE + END-SEARCH. + * + *** 住民税計算 + COMPUTE WRK-RESIDENT-TAX ROUNDED = + WRK-TAXABLE-INCOME * CNS-RESIDENT-TAX-RATE + END-COMPUTE. + * + *** 差引支給額 + COMPUTE WRK-NET-PAYMENT = + WRK-GROSS-PAYMENT - WRK-INCOME-TAX + - WRK-INSURANCE - WRK-RESIDENT-TAX + END-COMPUTE. + * + *** W01出力 + PERFORM 2100WRITOUTSOR. + * + PERFORM 1200R01INNSOR. + * + 2000MAJSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.1) * + * サブモジュール名: SALARY-NET出力処理 * + ***************************************************************** + 2100WRITOUTSOR SECTION. + * + INITIALIZE W01OUTREC. + MOVE R01EMP-ID TO W01EMP-ID. + MOVE 'S' TO W01REC-TYPE. + MOVE R01EMP-NAME TO W01EMP-NAME. + MOVE R01DEPT-CODE TO W01DEPT-CODE. + MOVE R01BASE-SALARY TO W01GROSS-PAYMENT. + MOVE WRK-INCOME-TAX TO W01INCOME-TAX. + MOVE WRK-INSURANCE TO W01INSURANCE. + MOVE WRK-RESIDENT-TAX TO W01RESIDENT-TAX. + MOVE WRK-NET-PAYMENT TO W01NET-PAYMENT. + MOVE WRK-TAXABLE-INCOME TO W01TAXABLE-INCOME. + MOVE WRK-NET-PAYMENT TO W01PAY-AMOUNT. + WRITE W01OUTREC. + ADD 1 TO CUN-W01OUT. + * + 2100WRITOUTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (3.0) * + * サブモジュール名: 終了処理 * + ***************************************************************** + 3000STPSOR SECTION. + * + CLOSE R01INNFIL + W01OUTFIL + W02OUTFIL. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'KYU05R01' TO M00UMKDATS22-01. + MOVE CUN-R01INN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'KYU05W01' TO M00UMKDATS22-01. + MOVE CUN-W01OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'KYU05W02' 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) * + * サブモジュール名: メッセージ出力処理 * + ***************************************************************** + 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処理 * + ***************************************************************** + 9999ABDSOR SECTION. + * + MOVE CNS-ABD999 TO E01ABDCOD. + CALL 'SUB03END' USING E01ABDPAR. + * + 9999ABDSOR-EXT. + EXIT. diff --git a/src/KYU06UPD.cbl b/src/KYU06UPD.cbl new file mode 100644 index 0000000..c2ace78 --- /dev/null +++ b/src/KYU06UPD.cbl @@ -0,0 +1,317 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. KYU06UPD. + ***************************************************************** + * システム名 : 給与計算システム * + * プログラムID : KYU06UPD * + * プログラム名 : 給与計算結果DB2更新処理 * + * 作成日 : 2026-07-01 * + * 処理概要 : SALARY-NETをDB2 SALARY-RESULTSに登録 * + * 重複時(-803)はUPDATEに切替 * + * プログラム分類: No.09 DB更新 * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 2026-07-01 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT R02INNFIL ASSIGN TO EXTERNAL KYU06R02. + SELECT W03OUTFIL ASSIGN TO EXTERNAL KYU06W03. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * R02: SALARY-NET(200B FB) * + ***************************************************************** + FD R02INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R02INNREC. + COPY KYU04REC REPLACING ==(A)== BY ==R02==. + * + ***************************************************************** + * W03: ERROR-LOG(VB) * + ***************************************************************** + FD W03OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS V. + 01 W03OUTREC. + COPY KYU99REC REPLACING ==(A)== BY ==W03==. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * SQLCA * + ***************************************************************** + EXEC SQL INCLUDE SQLCA END-EXEC. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'KYU06UPD'. + 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-YEAR-MONTH-PARM PIC X(006). + * + ***************************************************************** + * カウンタ領域 * + ***************************************************************** + 01 CUNARA. + 03 CUN-R02INN PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W03OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-DB-INS PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-DB-UPD PIC S9(009) COMP-3 VALUE ZERO. + * + ***************************************************************** + * 作業領域 * + ***************************************************************** + 01 WRKARA. + 03 WRK-EOF PIC X(001). + 88 WRK-EOF-Y VALUE '1'. + 03 WRK-YEAR-MONTH PIC X(006). + * + ***************************************************************** + * DB2ホスト変数 * + ***************************************************************** + 01 DBVARA. + 03 DBV-EMP-ID PIC X(008). + 03 DBV-YEAR-MONTH PIC X(006). + 03 DBV-GROSS-PAYMENT PIC 9(009). + 03 DBV-INCOME-TAX PIC 9(009). + 03 DBV-INSURANCE PIC 9(009). + 03 DBV-RESIDENT-TAX PIC 9(009). + 03 DBV-NET-PAYMENT PIC 9(009). + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + COPY ZANMSGAC. + COPY ZANENDAC. + * + PROCEDURE DIVISION. + ***************************************************************** + * サブモジュールNO: (0.0) * + * サブモジュール名: 制御処理 * + ***************************************************************** + 0000MAJCOLSOR SECTION. + * + PERFORM 1000ITTSOR. + PERFORM 2000MAJSOR + UNTIL WRK-EOF-Y. + 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. + * + *** PARM取得 + ACCEPT WRK-YEAR-MONTH + FROM COMMAND-LINE. + IF WRK-YEAR-MONTH = SPACES + MOVE '202605' TO WRK-YEAR-MONTH + END-IF. + MOVE WRK-YEAR-MONTH TO CNS-YEAR-MONTH-PARM. + * + OPEN INPUT R02INNFIL. + OPEN OUTPUT W03OUTFIL. + * + *** DB接続 + EXEC SQL + CONNECT TO 'data/SALARY.db' + END-EXEC. + * + PERFORM 1100R02INNSOR. + * + 1000ITTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (1.1) * + * サブモジュール名: R02読込処理 * + ***************************************************************** + 1100R02INNSOR SECTION. + * + READ R02INNFIL + AT END + SET WRK-EOF-Y TO TRUE + NOT AT END + ADD 1 TO CUN-R02INN + END-READ. + * + 1100R02INNSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.0) * + * サブモジュール名: 主処理 * + ***************************************************************** + 2000MAJSOR SECTION. + * + MOVE R02EMP-ID TO DBV-EMP-ID. + MOVE CNS-YEAR-MONTH-PARM TO DBV-YEAR-MONTH. + MOVE R02GROSS-PAYMENT TO DBV-GROSS-PAYMENT. + MOVE R02INCOME-TAX TO DBV-INCOME-TAX. + MOVE R02INSURANCE TO DBV-INSURANCE. + MOVE R02RESIDENT-TAX TO DBV-RESIDENT-TAX. + MOVE R02NET-PAYMENT TO DBV-NET-PAYMENT. + * + EXEC SQL + INSERT INTO SALARY-RESULTS + (EMP-ID, YEAR-MONTH, + GROSS-PAYMENT, INCOME-TAX, + INSURANCE, RESIDENT-TAX, + NET-PAYMENT, UPDATED-AT) + VALUES + (:DBV-EMP-ID, :DBV-YEAR-MONTH, + :DBV-GROSS-PAYMENT, :DBV-INCOME-TAX, + :DBV-INSURANCE, :DBV-RESIDENT-TAX, + :DBV-NET-PAYMENT, CURRENT TIMESTAMP) + END-EXEC. + * + IF SQLCODE = 0 + ADD 1 TO CUN-DB-INS + PERFORM 1100R02INNSOR + EXIT SECTION + END-IF. + * + IF SQLCODE = -803 + EXEC SQL + UPDATE SALARY-RESULTS SET + GROSS-PAYMENT = :DBV-GROSS-PAYMENT + ,INCOME-TAX = :DBV-INCOME-TAX + ,INSURANCE = :DBV-INSURANCE + ,RESIDENT-TAX = :DBV-RESIDENT-TAX + ,NET-PAYMENT = :DBV-NET-PAYMENT + ,UPDATED-AT = CURRENT TIMESTAMP + WHERE EMP-ID = :DBV-EMP-ID + AND YEAR-MONTH = :DBV-YEAR-MONTH + END-EXEC + IF SQLCODE = 0 + ADD 1 TO CUN-DB-UPD + ELSE + PERFORM 2100ERROUTSOR + END-IF + PERFORM 1100R02INNSOR + EXIT SECTION + END-IF. + * + PERFORM 2100ERROUTSOR. + PERFORM 1100R02INNSOR. + * + 2000MAJSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.1) * + * サブモジュール名: エラー出力処理 * + ***************************************************************** + 2100ERROUTSOR SECTION. + * + MOVE 'DB-ERR' TO W03ERR-CATEGORY. + MOVE DBV-EMP-ID TO W03ERR-DETAIL. + WRITE W03OUTREC. + ADD 1 TO CUN-W03OUT. + * + 2100ERROUTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (3.0) * + * サブモジュール名: 終了処理 * + ***************************************************************** + 3000STPSOR SECTION. + * + CLOSE R02INNFIL + W03OUTFIL. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'KYU06R02' TO M00UMKDATS22-01. + MOVE CUN-R02INN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'DB-INSERT' TO M00UMKDATS22-01. + MOVE CUN-DB-INS TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'DB-UPDATE' TO M00UMKDATS22-01. + MOVE CUN-DB-UPD TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'KYU06W03' TO M00UMKDATS22-01. + MOVE CUN-W03OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGFIN TO M00MSGCOD. + PERFORM 4000MSGOUTSOR. + * + 3000STPSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (4.0) * + * サブモジュール名: メッセージ出力処理 * + ***************************************************************** + 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処理 * + ***************************************************************** + 9999ABDSOR SECTION. + * + MOVE CNS-ABD999 TO E01ABDCOD. + CALL 'SUB03END' USING E01ABDPAR. + * + 9999ABDSOR-EXT. + EXIT. diff --git a/src/KYU07DIV.cbl b/src/KYU07DIV.cbl new file mode 100644 index 0000000..f7119fe --- /dev/null +++ b/src/KYU07DIV.cbl @@ -0,0 +1,836 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. KYU07DIV. + ***************************************************************** + * システム名 : 給与計算システム * + * プログラムID : KYU07DIV * + * プログラム名 : 部門別分割出力処理 * + * 作成日 : 2026-07-01 * + * 処理概要 : JCL SORT済SALARY-NETを部署コードに応じて * + * 50ファイルに分割出力 * + * 常に1ファイルのみOPEN * + * プログラム分類: No.10 50分割 * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 2026-07-01 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT R01INNFIL ASSIGN TO EXTERNAL KYU07R01. + SELECT SYSIN-FILE ASSIGN TO EXTERNAL KYU07SYS. + SELECT W99OUTFIL ASSIGN TO EXTERNAL KYU07W99. + SELECT DEPT01-FILE ASSIGN TO EXTERNAL KYU07D01. + SELECT DEPT02-FILE ASSIGN TO EXTERNAL KYU07D02. + SELECT DEPT03-FILE ASSIGN TO EXTERNAL KYU07D03. + SELECT DEPT04-FILE ASSIGN TO EXTERNAL KYU07D04. + SELECT DEPT05-FILE ASSIGN TO EXTERNAL KYU07D05. + SELECT DEPT06-FILE ASSIGN TO EXTERNAL KYU07D06. + SELECT DEPT07-FILE ASSIGN TO EXTERNAL KYU07D07. + SELECT DEPT08-FILE ASSIGN TO EXTERNAL KYU07D08. + SELECT DEPT09-FILE ASSIGN TO EXTERNAL KYU07D09. + SELECT DEPT10-FILE ASSIGN TO EXTERNAL KYU07D10. + SELECT DEPT11-FILE ASSIGN TO EXTERNAL KYU07D11. + SELECT DEPT12-FILE ASSIGN TO EXTERNAL KYU07D12. + SELECT DEPT13-FILE ASSIGN TO EXTERNAL KYU07D13. + SELECT DEPT14-FILE ASSIGN TO EXTERNAL KYU07D14. + SELECT DEPT15-FILE ASSIGN TO EXTERNAL KYU07D15. + SELECT DEPT16-FILE ASSIGN TO EXTERNAL KYU07D16. + SELECT DEPT17-FILE ASSIGN TO EXTERNAL KYU07D17. + SELECT DEPT18-FILE ASSIGN TO EXTERNAL KYU07D18. + SELECT DEPT19-FILE ASSIGN TO EXTERNAL KYU07D19. + SELECT DEPT20-FILE ASSIGN TO EXTERNAL KYU07D20. + SELECT DEPT21-FILE ASSIGN TO EXTERNAL KYU07D21. + SELECT DEPT22-FILE ASSIGN TO EXTERNAL KYU07D22. + SELECT DEPT23-FILE ASSIGN TO EXTERNAL KYU07D23. + SELECT DEPT24-FILE ASSIGN TO EXTERNAL KYU07D24. + SELECT DEPT25-FILE ASSIGN TO EXTERNAL KYU07D25. + SELECT DEPT26-FILE ASSIGN TO EXTERNAL KYU07D26. + SELECT DEPT27-FILE ASSIGN TO EXTERNAL KYU07D27. + SELECT DEPT28-FILE ASSIGN TO EXTERNAL KYU07D28. + SELECT DEPT29-FILE ASSIGN TO EXTERNAL KYU07D29. + SELECT DEPT30-FILE ASSIGN TO EXTERNAL KYU07D30. + SELECT DEPT31-FILE ASSIGN TO EXTERNAL KYU07D31. + SELECT DEPT32-FILE ASSIGN TO EXTERNAL KYU07D32. + SELECT DEPT33-FILE ASSIGN TO EXTERNAL KYU07D33. + SELECT DEPT34-FILE ASSIGN TO EXTERNAL KYU07D34. + SELECT DEPT35-FILE ASSIGN TO EXTERNAL KYU07D35. + SELECT DEPT36-FILE ASSIGN TO EXTERNAL KYU07D36. + SELECT DEPT37-FILE ASSIGN TO EXTERNAL KYU07D37. + SELECT DEPT38-FILE ASSIGN TO EXTERNAL KYU07D38. + SELECT DEPT39-FILE ASSIGN TO EXTERNAL KYU07D39. + SELECT DEPT40-FILE ASSIGN TO EXTERNAL KYU07D40. + SELECT DEPT41-FILE ASSIGN TO EXTERNAL KYU07D41. + SELECT DEPT42-FILE ASSIGN TO EXTERNAL KYU07D42. + SELECT DEPT43-FILE ASSIGN TO EXTERNAL KYU07D43. + SELECT DEPT44-FILE ASSIGN TO EXTERNAL KYU07D44. + SELECT DEPT45-FILE ASSIGN TO EXTERNAL KYU07D45. + SELECT DEPT46-FILE ASSIGN TO EXTERNAL KYU07D46. + SELECT DEPT47-FILE ASSIGN TO EXTERNAL KYU07D47. + SELECT DEPT48-FILE ASSIGN TO EXTERNAL KYU07D48. + SELECT DEPT49-FILE ASSIGN TO EXTERNAL KYU07D49. + SELECT DEPT50-FILE ASSIGN TO EXTERNAL KYU07D50. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * R01: SALARY-NET(200B FB JCL SORT済み) * + ***************************************************************** + FD R01INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R01INNREC. + COPY KYU04REC REPLACING ==(A)== BY ==R01==. + * + ***************************************************************** + * SYSIN: 制御カード * + ***************************************************************** + FD SYSIN-FILE + LABEL RECORD IS STANDARD + RECORDING MODE IS F. + 01 SYSIN-REC PIC X(080). + * + ***************************************************************** + * W99: ERROR-LOG(VB) * + ***************************************************************** + FD W99OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS V. + 01 W99OUTREC. + COPY KYU99REC REPLACING ==(A)== BY ==W99==. + * + ***************************************************************** + * DEPT01〜50(各200B FB) * + ***************************************************************** + FD DEPT01-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT01-REC PIC X(200). + FD DEPT02-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT02-REC PIC X(200). + FD DEPT03-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT03-REC PIC X(200). + FD DEPT04-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT04-REC PIC X(200). + FD DEPT05-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT05-REC PIC X(200). + FD DEPT06-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT06-REC PIC X(200). + FD DEPT07-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT07-REC PIC X(200). + FD DEPT08-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT08-REC PIC X(200). + FD DEPT09-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT09-REC PIC X(200). + FD DEPT10-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT10-REC PIC X(200). + FD DEPT11-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT11-REC PIC X(200). + FD DEPT12-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT12-REC PIC X(200). + FD DEPT13-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT13-REC PIC X(200). + FD DEPT14-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT14-REC PIC X(200). + FD DEPT15-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT15-REC PIC X(200). + FD DEPT16-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT16-REC PIC X(200). + FD DEPT17-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT17-REC PIC X(200). + FD DEPT18-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT18-REC PIC X(200). + FD DEPT19-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT19-REC PIC X(200). + FD DEPT20-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT20-REC PIC X(200). + FD DEPT21-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT21-REC PIC X(200). + FD DEPT22-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT22-REC PIC X(200). + FD DEPT23-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT23-REC PIC X(200). + FD DEPT24-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT24-REC PIC X(200). + FD DEPT25-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT25-REC PIC X(200). + FD DEPT26-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT26-REC PIC X(200). + FD DEPT27-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT27-REC PIC X(200). + FD DEPT28-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT28-REC PIC X(200). + FD DEPT29-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT29-REC PIC X(200). + FD DEPT30-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT30-REC PIC X(200). + FD DEPT31-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT31-REC PIC X(200). + FD DEPT32-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT32-REC PIC X(200). + FD DEPT33-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT33-REC PIC X(200). + FD DEPT34-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT34-REC PIC X(200). + FD DEPT35-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT35-REC PIC X(200). + FD DEPT36-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT36-REC PIC X(200). + FD DEPT37-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT37-REC PIC X(200). + FD DEPT38-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT38-REC PIC X(200). + FD DEPT39-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT39-REC PIC X(200). + FD DEPT40-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT40-REC PIC X(200). + FD DEPT41-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT41-REC PIC X(200). + FD DEPT42-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT42-REC PIC X(200). + FD DEPT43-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT43-REC PIC X(200). + FD DEPT44-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT44-REC PIC X(200). + FD DEPT45-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT45-REC PIC X(200). + FD DEPT46-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT46-REC PIC X(200). + FD DEPT47-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT47-REC PIC X(200). + FD DEPT48-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT48-REC PIC X(200). + FD DEPT49-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT49-REC PIC X(200). + FD DEPT50-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 DEPT50-REC PIC X(200). + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'KYU07DIV'. + 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-W99OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-DEPT-OUT PIC S9(009) COMP-3 VALUE ZERO. + * + ***************************************************************** + * 作業領域 * + ***************************************************************** + 01 WRKARA. + 03 WRK-EOF PIC X(001). + 88 WRK-EOF-Y VALUE '1'. + 03 WRK-DEPT-CODE PIC X(002). + 03 WRK-PREV-DEPT PIC X(002). + 03 WRK-FIRST PIC X(001) VALUE '1'. + 88 WRK-FIRST-Y VALUE '1'. + 88 WRK-FIRST-N VALUE '0'. + *** SYSIN対象部署テーブル + 03 WRK-TARGET-DEPT. + 05 WRK-TARGET OCCURS 50 TIMES + INDEXED BY TD-IDX. + 07 WRK-TARGET-CODE PIC X(002). + 03 WRK-TARGET-COUNT PIC 9(002) VALUE 50. + 03 WRK-HAS-TARGET PIC X(001). + 88 WRK-ALL-DEPTS VALUE 'A'. + 88 WRK-FILTER-DEPTS VALUE 'F'. + *** パース用 + 03 WRK-SYSIN-LINE PIC X(080). + 03 WRK-I PIC 9(002). + 03 WRK-J PIC 9(002). + 03 WRK-TOKEN PIC X(080). + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + COPY ZANMSGAC. + COPY ZANENDAC. + * + PROCEDURE DIVISION. + ***************************************************************** + * サブモジュールNO: (0.0) * + * サブモジュール名: 制御処理 * + ***************************************************************** + 0000MAJCOLSOR SECTION. + * + PERFORM 1000ITTSOR. + PERFORM 2000MAJSOR + UNTIL WRK-EOF-Y. + 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 '1' TO WRK-FIRST. + * + *** SYSIN読込(対象部署指定) + PERFORM 1100SYSINSOR. + * + OPEN INPUT R01INNFIL. + OPEN OUTPUT W99OUTFIL. + * + PERFORM 1200R01INNSOR. + * + 1000ITTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (1.1) * + * サブモジュール名: SYSIN読込処理 * + ***************************************************************** + 1100SYSINSOR SECTION. + * + OPEN INPUT SYSIN-FILE. + READ SYSIN-FILE + INTO WRK-SYSIN-LINE + AT END + SET WRK-ALL-DEPTS TO TRUE + END-READ. + CLOSE SYSIN-FILE. + * + IF WRK-ALL-DEPTS + EXIT SECTION + END-IF. + * + *** "DEPT=01,02,05,10" 形式パース + MOVE WRK-SYSIN-LINE TO WRK-TOKEN. + MOVE ZERO TO WRK-TARGET-COUNT. + MOVE 1 TO WRK-J. + * + PERFORM VARYING WRK-I FROM 1 BY 1 + UNTIL WRK-I > 80 + OR WRK-SYSIN-LINE(WRK-I:1) = SPACE + OR WRK-SYSIN-LINE(WRK-I:1) = '=' + CONTINUE + END-PERFORM. + * + ADD 1 TO WRK-I. + PERFORM VARYING WRK-J FROM 1 BY 1 + UNTIL WRK-I > 80 + OR WRK-SYSIN-LINE(WRK-I:1) = SPACE + IF WRK-SYSIN-LINE(WRK-I:1) = ',' + ADD 1 TO WRK-I + CONTINUE + END-IF + ADD 1 TO WRK-TARGET-COUNT + MOVE WRK-SYSIN-LINE(WRK-I:2) + TO + WRK-TARGET-CODE(WRK-TARGET-COUNT) + ADD 2 TO WRK-I + END-PERFORM. + * + IF WRK-TARGET-COUNT > 0 + SET WRK-FILTER-DEPTS TO TRUE + ELSE + SET WRK-ALL-DEPTS TO TRUE + END-IF. + * + 1100SYSINSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (1.2) * + * サブモジュール名: R01読込処理 * + ***************************************************************** + 1200R01INNSOR SECTION. + * + READ R01INNFIL + AT END + SET WRK-EOF-Y TO TRUE + NOT AT END + ADD 1 TO CUN-R01INN + END-READ. + * + 1200R01INNSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.0) * + * サブモジュール名: 主処理 * + ***************************************************************** + 2000MAJSOR SECTION. + * + MOVE R01DEPT-CODE TO WRK-DEPT-CODE. + * + *** SYSIN対象部署フィルタ + IF WRK-FILTER-DEPTS + SET TD-IDX TO 1 + SEARCH WRK-TARGET + AT END + PERFORM 1200R01INNSOR + EXIT SECTION + WHEN WRK-TARGET-CODE(TD-IDX) = WRK-DEPT-CODE + CONTINUE + END-SEARCH + END-IF. + * + *** 部署切替 + IF WRK-FIRST-Y + MOVE '0' TO WRK-FIRST + PERFORM 2100OPENSOR + ELSE + IF WRK-PREV-DEPT NOT = WRK-DEPT-CODE + PERFORM 2200CLOSESOR + PERFORM 2100OPENSOR + END-IF + END-IF. + * + MOVE WRK-DEPT-CODE TO WRK-PREV-DEPT. + * + *** 該当ファイルにWRITE + PERFORM 2300WRITESOR. + * + PERFORM 1200R01INNSOR. + * + 2000MAJSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.1) * + * サブモジュール名: 部署ファイルOPEN処理 * + ***************************************************************** + 2100OPENSOR SECTION. + * + EVALUATE WRK-DEPT-CODE + WHEN '01' OPEN OUTPUT DEPT01-FILE + WHEN '02' OPEN OUTPUT DEPT02-FILE + WHEN '03' OPEN OUTPUT DEPT03-FILE + WHEN '04' OPEN OUTPUT DEPT04-FILE + WHEN '05' OPEN OUTPUT DEPT05-FILE + WHEN '06' OPEN OUTPUT DEPT06-FILE + WHEN '07' OPEN OUTPUT DEPT07-FILE + WHEN '08' OPEN OUTPUT DEPT08-FILE + WHEN '09' OPEN OUTPUT DEPT09-FILE + WHEN '10' OPEN OUTPUT DEPT10-FILE + WHEN '11' OPEN OUTPUT DEPT11-FILE + WHEN '12' OPEN OUTPUT DEPT12-FILE + WHEN '13' OPEN OUTPUT DEPT13-FILE + WHEN '14' OPEN OUTPUT DEPT14-FILE + WHEN '15' OPEN OUTPUT DEPT15-FILE + WHEN '16' OPEN OUTPUT DEPT16-FILE + WHEN '17' OPEN OUTPUT DEPT17-FILE + WHEN '18' OPEN OUTPUT DEPT18-FILE + WHEN '19' OPEN OUTPUT DEPT19-FILE + WHEN '20' OPEN OUTPUT DEPT20-FILE + WHEN '21' OPEN OUTPUT DEPT21-FILE + WHEN '22' OPEN OUTPUT DEPT22-FILE + WHEN '23' OPEN OUTPUT DEPT23-FILE + WHEN '24' OPEN OUTPUT DEPT24-FILE + WHEN '25' OPEN OUTPUT DEPT25-FILE + WHEN '26' OPEN OUTPUT DEPT26-FILE + WHEN '27' OPEN OUTPUT DEPT27-FILE + WHEN '28' OPEN OUTPUT DEPT28-FILE + WHEN '29' OPEN OUTPUT DEPT29-FILE + WHEN '30' OPEN OUTPUT DEPT30-FILE + WHEN '31' OPEN OUTPUT DEPT31-FILE + WHEN '32' OPEN OUTPUT DEPT32-FILE + WHEN '33' OPEN OUTPUT DEPT33-FILE + WHEN '34' OPEN OUTPUT DEPT34-FILE + WHEN '35' OPEN OUTPUT DEPT35-FILE + WHEN '36' OPEN OUTPUT DEPT36-FILE + WHEN '37' OPEN OUTPUT DEPT37-FILE + WHEN '38' OPEN OUTPUT DEPT38-FILE + WHEN '39' OPEN OUTPUT DEPT39-FILE + WHEN '40' OPEN OUTPUT DEPT40-FILE + WHEN '41' OPEN OUTPUT DEPT41-FILE + WHEN '42' OPEN OUTPUT DEPT42-FILE + WHEN '43' OPEN OUTPUT DEPT43-FILE + WHEN '44' OPEN OUTPUT DEPT44-FILE + WHEN '45' OPEN OUTPUT DEPT45-FILE + WHEN '46' OPEN OUTPUT DEPT46-FILE + WHEN '47' OPEN OUTPUT DEPT47-FILE + WHEN '48' OPEN OUTPUT DEPT48-FILE + WHEN '49' OPEN OUTPUT DEPT49-FILE + WHEN '50' OPEN OUTPUT DEPT50-FILE + WHEN OTHER + MOVE 'INVALID DEPT' TO W99ERR-DETAIL + WRITE W99OUTREC + ADD 1 TO CUN-W99OUT + END-EVALUATE. + * + 2100OPENSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.2) * + * サブモジュール名: 部署ファイルCLOSE+LOCK処理 * + ***************************************************************** + 2200CLOSESOR SECTION. + * + EVALUATE WRK-PREV-DEPT + WHEN '01' CLOSE DEPT01-FILE WITH LOCK + WHEN '02' CLOSE DEPT02-FILE WITH LOCK + WHEN '03' CLOSE DEPT03-FILE WITH LOCK + WHEN '04' CLOSE DEPT04-FILE WITH LOCK + WHEN '05' CLOSE DEPT05-FILE WITH LOCK + WHEN '06' CLOSE DEPT06-FILE WITH LOCK + WHEN '07' CLOSE DEPT07-FILE WITH LOCK + WHEN '08' CLOSE DEPT08-FILE WITH LOCK + WHEN '09' CLOSE DEPT09-FILE WITH LOCK + WHEN '10' CLOSE DEPT10-FILE WITH LOCK + WHEN '11' CLOSE DEPT11-FILE WITH LOCK + WHEN '12' CLOSE DEPT12-FILE WITH LOCK + WHEN '13' CLOSE DEPT13-FILE WITH LOCK + WHEN '14' CLOSE DEPT14-FILE WITH LOCK + WHEN '15' CLOSE DEPT15-FILE WITH LOCK + WHEN '16' CLOSE DEPT16-FILE WITH LOCK + WHEN '17' CLOSE DEPT17-FILE WITH LOCK + WHEN '18' CLOSE DEPT18-FILE WITH LOCK + WHEN '19' CLOSE DEPT19-FILE WITH LOCK + WHEN '20' CLOSE DEPT20-FILE WITH LOCK + WHEN '21' CLOSE DEPT21-FILE WITH LOCK + WHEN '22' CLOSE DEPT22-FILE WITH LOCK + WHEN '23' CLOSE DEPT23-FILE WITH LOCK + WHEN '24' CLOSE DEPT24-FILE WITH LOCK + WHEN '25' CLOSE DEPT25-FILE WITH LOCK + WHEN '26' CLOSE DEPT26-FILE WITH LOCK + WHEN '27' CLOSE DEPT27-FILE WITH LOCK + WHEN '28' CLOSE DEPT28-FILE WITH LOCK + WHEN '29' CLOSE DEPT29-FILE WITH LOCK + WHEN '30' CLOSE DEPT30-FILE WITH LOCK + WHEN '31' CLOSE DEPT31-FILE WITH LOCK + WHEN '32' CLOSE DEPT32-FILE WITH LOCK + WHEN '33' CLOSE DEPT33-FILE WITH LOCK + WHEN '34' CLOSE DEPT34-FILE WITH LOCK + WHEN '35' CLOSE DEPT35-FILE WITH LOCK + WHEN '36' CLOSE DEPT36-FILE WITH LOCK + WHEN '37' CLOSE DEPT37-FILE WITH LOCK + WHEN '38' CLOSE DEPT38-FILE WITH LOCK + WHEN '39' CLOSE DEPT39-FILE WITH LOCK + WHEN '40' CLOSE DEPT40-FILE WITH LOCK + WHEN '41' CLOSE DEPT41-FILE WITH LOCK + WHEN '42' CLOSE DEPT42-FILE WITH LOCK + WHEN '43' CLOSE DEPT43-FILE WITH LOCK + WHEN '44' CLOSE DEPT44-FILE WITH LOCK + WHEN '45' CLOSE DEPT45-FILE WITH LOCK + WHEN '46' CLOSE DEPT46-FILE WITH LOCK + WHEN '47' CLOSE DEPT47-FILE WITH LOCK + WHEN '48' CLOSE DEPT48-FILE WITH LOCK + WHEN '49' CLOSE DEPT49-FILE WITH LOCK + WHEN '50' CLOSE DEPT50-FILE WITH LOCK + WHEN OTHER + CONTINUE + END-EVALUATE. + * + 2200CLOSESOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.3) * + * サブモジュール名: 部署WRITE処理 * + ***************************************************************** + 2300WRITESOR SECTION. + * + EVALUATE WRK-DEPT-CODE + WHEN '01' WRITE DEPT01-REC FROM R01INNREC + WHEN '02' WRITE DEPT02-REC FROM R01INNREC + WHEN '03' WRITE DEPT03-REC FROM R01INNREC + WHEN '04' WRITE DEPT04-REC FROM R01INNREC + WHEN '05' WRITE DEPT05-REC FROM R01INNREC + WHEN '06' WRITE DEPT06-REC FROM R01INNREC + WHEN '07' WRITE DEPT07-REC FROM R01INNREC + WHEN '08' WRITE DEPT08-REC FROM R01INNREC + WHEN '09' WRITE DEPT09-REC FROM R01INNREC + WHEN '10' WRITE DEPT10-REC FROM R01INNREC + WHEN '11' WRITE DEPT11-REC FROM R01INNREC + WHEN '12' WRITE DEPT12-REC FROM R01INNREC + WHEN '13' WRITE DEPT13-REC FROM R01INNREC + WHEN '14' WRITE DEPT14-REC FROM R01INNREC + WHEN '15' WRITE DEPT15-REC FROM R01INNREC + WHEN '16' WRITE DEPT16-REC FROM R01INNREC + WHEN '17' WRITE DEPT17-REC FROM R01INNREC + WHEN '18' WRITE DEPT18-REC FROM R01INNREC + WHEN '19' WRITE DEPT19-REC FROM R01INNREC + WHEN '20' WRITE DEPT20-REC FROM R01INNREC + WHEN '21' WRITE DEPT21-REC FROM R01INNREC + WHEN '22' WRITE DEPT22-REC FROM R01INNREC + WHEN '23' WRITE DEPT23-REC FROM R01INNREC + WHEN '24' WRITE DEPT24-REC FROM R01INNREC + WHEN '25' WRITE DEPT25-REC FROM R01INNREC + WHEN '26' WRITE DEPT26-REC FROM R01INNREC + WHEN '27' WRITE DEPT27-REC FROM R01INNREC + WHEN '28' WRITE DEPT28-REC FROM R01INNREC + WHEN '29' WRITE DEPT29-REC FROM R01INNREC + WHEN '30' WRITE DEPT30-REC FROM R01INNREC + WHEN '31' WRITE DEPT31-REC FROM R01INNREC + WHEN '32' WRITE DEPT32-REC FROM R01INNREC + WHEN '33' WRITE DEPT33-REC FROM R01INNREC + WHEN '34' WRITE DEPT34-REC FROM R01INNREC + WHEN '35' WRITE DEPT35-REC FROM R01INNREC + WHEN '36' WRITE DEPT36-REC FROM R01INNREC + WHEN '37' WRITE DEPT37-REC FROM R01INNREC + WHEN '38' WRITE DEPT38-REC FROM R01INNREC + WHEN '39' WRITE DEPT39-REC FROM R01INNREC + WHEN '40' WRITE DEPT40-REC FROM R01INNREC + WHEN '41' WRITE DEPT41-REC FROM R01INNREC + WHEN '42' WRITE DEPT42-REC FROM R01INNREC + WHEN '43' WRITE DEPT43-REC FROM R01INNREC + WHEN '44' WRITE DEPT44-REC FROM R01INNREC + WHEN '45' WRITE DEPT45-REC FROM R01INNREC + WHEN '46' WRITE DEPT46-REC FROM R01INNREC + WHEN '47' WRITE DEPT47-REC FROM R01INNREC + WHEN '48' WRITE DEPT48-REC FROM R01INNREC + WHEN '49' WRITE DEPT49-REC FROM R01INNREC + WHEN '50' WRITE DEPT50-REC FROM R01INNREC + WHEN OTHER + CONTINUE + END-EVALUATE. + ADD 1 TO CUN-DEPT-OUT. + * + 2300WRITESOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (3.0) * + * サブモジュール名: 終了処理 * + ***************************************************************** + 3000STPSOR SECTION. + * + *** 最終部署CLOSE + IF WRK-PREV-DEPT > SPACES + PERFORM 2200CLOSESOR + END-IF. + * + CLOSE R01INNFIL + W99OUTFIL. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'KYU07R01' TO M00UMKDATS22-01. + MOVE CUN-R01INN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'DEPT-OUT' TO M00UMKDATS22-01. + MOVE CUN-DEPT-OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'KYU07W99' TO M00UMKDATS22-01. + MOVE CUN-W99OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGFIN TO M00MSGCOD. + PERFORM 4000MSGOUTSOR. + * + 3000STPSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (4.0) * + * サブモジュール名: メッセージ出力処理 * + ***************************************************************** + 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処理 * + ***************************************************************** + 9999ABDSOR SECTION. + * + MOVE CNS-ABD999 TO E01ABDCOD. + CALL 'SUB03END' USING E01ABDPAR. + * + 9999ABDSOR-EXT. + EXIT. diff --git a/src/KYU08PRI.cbl b/src/KYU08PRI.cbl new file mode 100644 index 0000000..46e6c4d --- /dev/null +++ b/src/KYU08PRI.cbl @@ -0,0 +1,304 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. KYU08PRI. + ***************************************************************** + * システム名 : 給与計算システム * + * プログラムID : KYU08PRI * + * プログラム名 : 給与明細印刷処理 * + * 作成日 : 2026-07-01 * + * 処理概要 : JCL SORT済みSALARY-NETを給与明細(LINAGE) * + * として印刷出力。1社員1ページ。 * + * プログラム分類: No.04 レイアウト編集のみ(GETPUT)+ LINAGE * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 2026-07-01 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT R01INNFIL ASSIGN TO EXTERNAL KYU08R01. + SELECT W01OUTFIL ASSIGN TO EXTERNAL KYU08W01. + SELECT W02OUTFIL ASSIGN TO EXTERNAL KYU08W02. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * R01: SALARY-NET(200B FB JCL SORT済み) * + ***************************************************************** + FD R01INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R01INNREC. + COPY KYU04REC REPLACING ==(A)== BY ==R01==. + * + ***************************************************************** + * W01: PAYSLIP印刷(LINAGE 66行/ページ) * + ***************************************************************** + FD W01OUTFIL + LABEL RECORD IS STANDARD + LINAGE IS 66 LINES + WITH FOOTING AT 60 + LINES AT TOP 6 + LINES AT BOTTOM 6. + 01 W01OUTREC. + COPY KYU05REC REPLACING ==(A)== BY ==W01==. + * +***************************************************************** + * W02: ERROR-LOG(VB) — 将来拡張用(現時点では出力なし) * + ***************************************************************** + FD W02OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS V. + 01 W02OUTREC. + COPY KYU99REC REPLACING ==(A)== BY ==W02==. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'KYU08PRI'. + 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-HEADER-LINES PIC 9(002) VALUE 6. + 03 CNS-DETAIL-LINES PIC 9(002) VALUE 54. + 03 CNS-FOOTER-LINES PIC 9(002) VALUE 6. + * + ***************************************************************** + * カウンタ領域 * + ***************************************************************** + 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-EOF PIC X(001). + 88 WRK-EOF-Y VALUE '1'. + 03 WRK-LINE-NO PIC 9(002). + 03 WRK-PAGE-COUNTER PIC 9(004) VALUE 0. + * + ***************************************************************** + * 印刷行定義 * + ***************************************************************** + 01 HEADER-LINE. + 05 HL-TITLE PIC X(040) + VALUE '========== 給与明細書 =========='. + 05 FILLER PIC X(010) VALUE SPACES. + 05 HL-PAGE-NO PIC Z(03)9 VALUE ZERO. + 05 FILLER PIC X(002) VALUE 'PG'. + 05 FILLER PIC X(144) VALUE SPACES. + * + 01 DETAIL-LINE. + 05 DL-EMP-ID PIC X(008). + 05 FILLER PIC X(002) VALUE SPACES. + 05 DL-EMP-NAME PIC X(020) + JUSTIFIED RIGHT. + 05 FILLER PIC X(002) VALUE SPACES. + 05 DL-BASIC-SALARY PIC Z(08)9 + BLANK WHEN ZERO. + 05 FILLER PIC X(002) VALUE SPACES. + 05 DL-NET-PAYMENT PIC Z(08)9 + BLANK WHEN ZERO. + 05 FILLER PIC X(146) VALUE SPACES. + * + 01 FOOTER-LINE. + 05 FL-MSG PIC X(040) + VALUE '--- 明細終了 ---'. + 05 FILLER PIC X(160) VALUE SPACES. + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + COPY ZANDATAC. + COPY ZANMSGAC. + COPY ZANENDAC. + * + PROCEDURE DIVISION. + ***************************************************************** + * サブモジュールNO: (0.0) * + * サブモジュール名: 制御処理 * + ***************************************************************** + 0000MAJCOLSOR SECTION. + * + PERFORM 1000ITTSOR. + PERFORM 2000MAJSOR + UNTIL WRK-EOF-Y. + 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. + * + *** 運用日付取得 + INITIALIZE D01UBSPAR. + CALL 'SUB01DAT' USING D01UBSPAR. + IF D01FKICOD NOT = ZERO + MOVE CNS-MSGSUBEEK TO M00MSGCOD + MOVE 'SUB01DAT' TO M00UMKDATS22-01 + MOVE D01FKICOD TO M00UMKDATS22-02 + PERFORM 4000MSGOUTSOR + PERFORM 9999ABDSOR + END-IF. + * + OPEN INPUT R01INNFIL. + OPEN OUTPUT W01OUTFIL + W02OUTFIL. + * + PERFORM 1100R01INNSOR. + * + 1000ITTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (1.1) * + * サブモジュール名: R01読込処理 * + ***************************************************************** + 1100R01INNSOR SECTION. + * + READ R01INNFIL + AT END + SET WRK-EOF-Y TO TRUE + NOT AT END + ADD 1 TO CUN-R01INN + END-READ. + * + 1100R01INNSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.0) * + * サブモジュール名: 主処理 * + ***************************************************************** + 2000MAJSOR SECTION. + * + *** ヘッダ出力(改ページ + ページ番号) + ADD 1 TO WRK-PAGE-COUNTER. + MOVE WRK-PAGE-COUNTER TO HL-PAGE-NO. + WRITE W01OUTREC + FROM HEADER-LINE + BEFORE ADVANCING PAGE. + * + *** 明細行編集 + MOVE R01EMP-ID TO DL-EMP-ID. + MOVE R01EMP-NAME TO DL-EMP-NAME. + MOVE R01GROSS-PAYMENT TO DL-BASIC-SALARY. + MOVE R01NET-PAYMENT TO DL-NET-PAYMENT. + * + WRITE W01OUTREC + FROM DETAIL-LINE + BEFORE ADVANCING 1 LINE + AT END-OF-PAGE + WRITE W01OUTREC + FROM FOOTER-LINE + BEFORE ADVANCING PAGE + END-WRITE. + ADD 1 TO CUN-W01OUT. + * + *** フッタ出力(改ページ) + WRITE W01OUTREC + FROM FOOTER-LINE + BEFORE ADVANCING PAGE. + * + PERFORM 1100R01INNSOR. + * + 2000MAJSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (3.0) * + * サブモジュール名: 終了処理 * + ***************************************************************** + 3000STPSOR SECTION. + * + CLOSE R01INNFIL + W01OUTFIL + W02OUTFIL. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'KYU08R01' TO M00UMKDATS22-01. + MOVE CUN-R01INN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'KYU08W01' TO M00UMKDATS22-01. + MOVE CUN-W01OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'KYU08W02' 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) * + * サブモジュール名: メッセージ出力処理 * + ***************************************************************** + 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処理 * + ***************************************************************** + 9999ABDSOR SECTION. + * + MOVE CNS-ABD999 TO E01ABDCOD. + CALL 'SUB03END' USING E01ABDPAR. + * + 9999ABDSOR-EXT. + EXIT. diff --git a/src/KYU09MRG.cbl b/src/KYU09MRG.cbl new file mode 100644 index 0000000..ff8a016 --- /dev/null +++ b/src/KYU09MRG.cbl @@ -0,0 +1,349 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. KYU09MRG. + ***************************************************************** + * システム名 : 給与計算システム * + * プログラムID : KYU09MRG * + * プログラム名 : 支給データ結合処理 * + * 作成日 : 2026-07-01 * + * 処理概要 : SALARY-NETとBONUS-DATAをMERGE文で * + * 社員番号昇順に結合し、同一社員内の * + * 給与(TYPE=S)と賞与(TYPE=B)を統合 * + * プログラム分類: No.35 MERGE(複数ファイル結合) * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 2026-07-01 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT MERGE-FILE ASSIGN TO EXTERNAL KYU09M99. + SELECT SALARY-FILE ASSIGN TO EXTERNAL KYU09M01. + SELECT BONUS-FILE ASSIGN TO EXTERNAL KYU09M02. + SELECT W01OUTFIL ASSIGN TO EXTERNAL KYU09W01. + SELECT W02OUTFIL ASSIGN TO EXTERNAL KYU09W02. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * MERGE: 作業ファイル * + ***************************************************************** + SD MERGE-FILE. + 01 MERGE-REC. + 05 MERGE-EMP-ID PIC X(008). + 05 MERGE-REC-TYPE PIC X(001). + 05 MERGE-EMP-NAME PIC X(040). + 05 MERGE-DEPT-CODE PIC X(002). + 05 MERGE-REGION-CODE PIC X(002). + 05 MERGE-CATEGORY-CODE PIC X(003). + 05 MERGE-GROSS-PAYMENT PIC 9(009). + 05 MERGE-INCOME-TAX PIC 9(009). + 05 MERGE-INSURANCE PIC 9(009). + 05 MERGE-RESIDENT-TAX PIC 9(009). + 05 MERGE-NET-PAYMENT PIC 9(009). + 05 MERGE-TAXABLE-INCOME PIC 9(009). + 05 MERGE-PAY-AMOUNT PIC 9(009). + 05 FILLER PIC X(081). + * + ***************************************************************** + * M01: SALARY-NET(200B FB S=給与レコード) * + ***************************************************************** + FD SALARY-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 SALARY-REC. + COPY KYU04REC REPLACING ==(A)== BY ==SA==. + * + ***************************************************************** + * M02: BONUS-DATA(200B FB B=賞与レコード) * + ***************************************************************** + FD BONUS-FILE + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 BONUS-REC. + COPY KYU04REC REPLACING ==(A)== BY ==BO==. + * + ***************************************************************** + * W01: PAYMENT-DATA(200B FB) * + ***************************************************************** + FD W01OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W01OUTREC. + COPY KYU06REC REPLACING ==(A)== BY ==W01==. + * + ***************************************************************** + * W02: ERROR-LOG(VB) * + ***************************************************************** + FD W02OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS V. + 01 W02OUTREC. + COPY KYU99REC REPLACING ==(A)== BY ==W02==. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'KYU09MRG'. + 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-PAY-TYPE-SALARY PIC X(001) VALUE 'S'. + 03 CNS-PAY-TYPE-BONUS PIC X(001) VALUE 'B'. + 03 CNS-PAY-TYPE-TOTAL PIC X(001) VALUE 'T'. + * + ***************************************************************** + * カウンタ領域 * + ***************************************************************** + 01 CUNARA. + 03 CUN-W01OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W02OUT PIC S9(009) COMP-3 VALUE ZERO. + * + ***************************************************************** + * 作業領域 * + ***************************************************************** + 01 WRKARA. + 03 WRK-MERGE-EOF PIC X(001). + 88 WRK-MERGE-EOF-Y VALUE '1'. + 03 WRK-CURRENT-EMP PIC X(008). + 03 WRK-SALARY-AMOUNT PIC 9(009). + 03 WRK-BONUS-AMOUNT PIC 9(009). + 03 WRK-TOTAL-PAYMENT PIC 9(009). + 03 WRK-BANK-CODE PIC X(004). + 03 WRK-ACCOUNT-NO PIC 9(008). + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + COPY ZANDATAC. + COPY ZANMSGAC. + COPY ZANENDAC. + * + LINKAGE SECTION. + * + 01 ENTRYPAR. + 03 ENTRY-EMP-ID PIC X(008). + 03 ENTRY-YEAR-MONTH PIC X(006). + 03 ENTRY-MODE PIC X(001). + * + PROCEDURE DIVISION. + ***************************************************************** + * サブモジュールNO: (0.0) * + * サブモジュール名: 制御処理 * + ***************************************************************** + 0000MAJCOLSOR SECTION. + * + PERFORM 1000ITTSOR. + * + *** MERGE実行 + MERGE MERGE-FILE + ON ASCENDING KEY MERGE-EMP-ID + USING SALARY-FILE + BONUS-FILE + OUTPUT PROCEDURE 2000MRGOUTSOR. + * + PERFORM 3000STPSOR. + * + 0000MAJCOLSOR-EXT. + GOBACK. + * + ***************************************************************** + * ENTRY代替エントリポイント(直接結合モード) * + ***************************************************************** + ENTRY 'KYU09ENT' USING ENTRYPAR. + * + 0010DIRECTSOR SECTION. + * + MOVE 'DIRECT ENTRY' TO W02ERR-DETAIL. + WRITE W02OUTREC. + ADD 1 TO CUN-W02OUT. + * + 0010DIRECTSOR-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. + * + *** 運用日付取得 + INITIALIZE D01UBSPAR. + CALL 'SUB01DAT' USING D01UBSPAR. + IF D01FKICOD NOT = ZERO + MOVE CNS-MSGSUBEEK TO M00MSGCOD + MOVE 'SUB01DAT' TO M00UMKDATS22-01 + MOVE D01FKICOD TO M00UMKDATS22-02 + PERFORM 4000MSGOUTSOR + PERFORM 9999ABDSOR + END-IF. + * + OPEN OUTPUT W01OUTFIL + W02OUTFIL. + * + 1000ITTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.0) * + * サブモジュール名: MERGE出力処理 * + ***************************************************************** + 2000MRGOUTSOR SECTION. + * + *** MERGE結果受取 → 同一社員統合 + PERFORM WITH TEST AFTER + UNTIL WRK-MERGE-EOF-Y + RETURN MERGE-FILE + INTO MERGE-REC + AT END + SET WRK-MERGE-EOF-Y TO TRUE + END-RETURN + IF NOT WRK-MERGE-EOF-Y + MOVE MERGE-EMP-ID + TO WRK-CURRENT-EMP + MOVE ZERO TO WRK-SALARY-AMOUNT + MOVE ZERO TO WRK-BONUS-AMOUNT + MOVE ZERO TO WRK-TOTAL-PAYMENT + PERFORM UNTIL + WRK-CURRENT-EMP NOT = + MERGE-EMP-ID OF MERGE-REC + IF MERGE-REC-TYPE + = CNS-PAY-TYPE-SALARY + MOVE MERGE-PAY-AMOUNT + TO WRK-SALARY-AMOUNT + MOVE MERGE-GROSS-PAYMENT + TO WRK-BANK-CODE + MOVE MERGE-EMP-ID(1:4) + TO WRK-ACCOUNT-NO + ELSE + MOVE MERGE-PAY-AMOUNT + TO WRK-BONUS-AMOUNT + END-IF + RETURN MERGE-FILE + INTO MERGE-REC + AT END + MOVE HIGH-VALUES + TO MERGE-EMP-ID + EXIT PERFORM + END-RETURN + END-PERFORM + *** 一社員分の統合データ書出 + ADD WRK-SALARY-AMOUNT + TO WRK-BONUS-AMOUNT + GIVING WRK-TOTAL-PAYMENT + PERFORM 2100PAYOUTSOR + END-IF + END-PERFORM. + * + 2000MRGOUTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.1) * + * サブモジュール名: PAYMENT-DATA出力処理 * + ***************************************************************** + 2100PAYOUTSOR SECTION. + * + INITIALIZE W01OUTREC. + MOVE WRK-CURRENT-EMP TO W01EMP-ID. + MOVE CNS-PAY-TYPE-TOTAL TO W01PAY-TYPE. + MOVE WRK-TOTAL-PAYMENT TO W01AMOUNT. + MOVE WRK-BANK-CODE TO W01BANK-CODE. + MOVE WRK-ACCOUNT-NO TO W01ACCOUNT-NO. + WRITE W01OUTREC. + ADD 1 TO CUN-W01OUT. + * + 2100PAYOUTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (3.0) * + * サブモジュール名: 終了処理 * + ***************************************************************** + 3000STPSOR SECTION. + * + CLOSE W01OUTFIL + W02OUTFIL. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'MERGE-FILE' TO M00UMKDATS22-01. + MOVE CUN-W01OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'KYU09W01' TO M00UMKDATS22-01. + MOVE CUN-W01OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'KYU09W02' 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) * + * サブモジュール名: メッセージ出力処理 * + ***************************************************************** + 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処理 * + ***************************************************************** + 9999ABDSOR SECTION. + * + MOVE CNS-ABD999 TO E01ABDCOD. + CALL 'SUB03END' USING E01ABDPAR. + * + 9999ABDSOR-EXT. + EXIT. diff --git a/使用資源一覧/KYU01CVT_使用資源一覧.md b/使用資源一覧/KYU01CVT_使用資源一覧.md new file mode 100644 index 0000000..c78c0de --- /dev/null +++ b/使用資源一覧/KYU01CVT_使用資源一覧.md @@ -0,0 +1,49 @@ +# KYU01CVT 使用資源一覧 + +## プログラム概要 +- **プログラムID**: KYU01CVT +- **プログラム名**: 社員マスタCSV→FB変換処理 +- **処理概要**: CSV形式の社員マスタを固定長80Bに変換する。引用符内改行をINSPECT CONVERTINGで処理し、項目チェックはSUB04CHKで実施。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| KYU01R01 | CSV-INPUT | 順編成 | V (可変長) | 500B | なし(自前定義) | +| KYU01W01 | EMP-RECORD | 順編成 | F (固定長) | 80B | KYU01REC | +| KYU01W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | KYU99REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| KYU01REC | レコード定義(W01出力ファイル) | FILE SECTION | +| KYU99REC | エラーログレコード定義(W02出力ファイル) | FILE SECTION | +| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | +| ZANCHKAC | 項目チェックサブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | +| SUB04CHK | 社員番号/時給数値チェック | 2000MAJSOR | + +## 使用DB2テーブル + +なし(DB操作なし) + +## 処理フロー +1. 初期処理(開始メッセージ→OPEN→初回読込) +2. コメント行(#)はスキップ +3. 引用符状態チェック(奇数個の"で状態反転) + - 引用符内 → 行蓄積→次行読込 + - 引用符外 → INSPECT CONVERTING(改行→SPACE)→ CSV分解 +4. CSV分解(UNSTRINGで9項目に分解) +5. 項目数≠9 → ERROR-LOG出力 +6. 社員番号空チェック → ERROR-LOG出力 +7. SUB04CHK(EMP-ID数値チェック、HOURLY-RATE数値チェック) +8. EMP-RECORD編集→W01出力 +9. 終了処理(CLOSE→件数出力→終了メッセージ) diff --git a/使用資源一覧/KYU02REG_使用資源一覧.md b/使用資源一覧/KYU02REG_使用資源一覧.md new file mode 100644 index 0000000..668c76c --- /dev/null +++ b/使用資源一覧/KYU02REG_使用資源一覧.md @@ -0,0 +1,45 @@ +# KYU02REG 使用資源一覧 + +## プログラム概要 +- **プログラムID**: KYU02REG +- **プログラム名**: 社員マスタDB2登録処理 +- **処理概要**: EMP-RECORDをDB2 EMP-MASTERにINSERT/UPSERTする。重複時(-803)はUPDATEに切替。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| KYU02R02 | EMP-RECORD | 順編成 | F (固定長) | 80B | KYU01REC | +| KYU02W03 | ERROR-LOG | 順編成 | V (可変長) | 200B | KYU99REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| KYU01REC | レコード定義(R02入力ファイル) | FILE SECTION | +| KYU99REC | エラーログレコード定義(W03出力ファイル) | FILE SECTION | +| SQLCA | SQL通信領域 | WORKING-STORAGE | +| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | + +## 使用DB2テーブル + +| テーブル名 | アクセス種別 | 用途 | +|-----------|-------------|------| +| EMP-MASTER | INSERT / UPDATE | 社員マスタ登録(INSERT試行→-803時UPDATE) | + +## 処理フロー +1. 初期処理(開始メッセージ→OPEN→DB接続→初回読込) +2. DB2ホスト変数にMOVE +3. INSERT試行 + - SQLCODE=0 → 正常登録 + - SQLCODE=-803 → UPDATEに切替 + - その他SQLエラー → ERROR-LOG出力 +4. 終了処理(CLOSE→件数出力→終了メッセージ) diff --git a/使用資源一覧/KYU03AGG_使用資源一覧.md b/使用資源一覧/KYU03AGG_使用資源一覧.md new file mode 100644 index 0000000..4795f0f --- /dev/null +++ b/使用資源一覧/KYU03AGG_使用資源一覧.md @@ -0,0 +1,43 @@ +# KYU03AGG 使用資源一覧 + +## プログラム概要 +- **プログラムID**: KYU03AGG +- **プログラム名**: 欠勤集約処理 +- **処理概要**: JCL SORT済み欠勤データを社員単位に集約する。同一社員内の欠勤時間・回数を集計。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| KYU03R01 | ABSENCE-SUMMARY | 順編成 | F (固定長) | 80B | なし(自前定義) | +| KYU03W01 | ABSENCE-AGGREGATE | 順編成 | F (固定長) | 80B | KYU02REC | +| KYU03W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | KYU99REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| KYU02REC | レコード定義(W01出力ファイル) | FILE SECTION | +| KYU99REC | エラーログレコード定義(W02出力ファイル) | FILE SECTION | +| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | + +## 使用DB2テーブル + +なし(DB操作なし) + +## 処理フロー +1. 初期処理(開始メッセージ→OPEN→初回読込) +2. キーブレイク集約処理 + - 初回 → 前レコード保持 + - 同一社員 → 欠勤時間/回数加算 + - 異社員 → 前社員集約出力→前レコード更新 +3. 最終社員の集約出力 +4. 終了処理(CLOSE→件数出力→終了メッセージ) diff --git a/使用資源一覧/KYU04CAL_使用資源一覧.md b/使用資源一覧/KYU04CAL_使用資源一覧.md new file mode 100644 index 0000000..ca4a2c1 --- /dev/null +++ b/使用資源一覧/KYU04CAL_使用資源一覧.md @@ -0,0 +1,50 @@ +# KYU04CAL 使用資源一覧 + +## プログラム概要 +- **プログラムID**: KYU04CAL +- **プログラム名**: 給与計算処理 +- **処理概要**: 欠勤集約 + EMP-MASTER + OVT-MONTHLYを参照し給与計算を実行する。勤怠区分×手当種別の複合分岐はEVALUATE ALSO。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| KYU04R02 | ABSENCE-AGGREGATE | 順編成 | F (固定長) | 80B | KYU02REC | +| KYU04R03 | PAY-PARAM | 順編成 | F (固定長) | 80B | なし(自前定義) | +| KYU04W03 | SALARY-DETAIL | 順編成 | F (固定長) | 240B | KYU03REC | +| KYU04W04 | ERROR-LOG | 順編成 | V (可変長) | 200B | KYU99REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| KYU02REC | レコード定義(R02入力ファイル) | FILE SECTION | +| KYU03REC | レコード定義(W03出力ファイル) | FILE SECTION | +| KYU99REC | エラーログレコード定義(W04出力ファイル) | FILE SECTION | +| SQLCA | SQL通信領域 | WORKING-STORAGE | +| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE | +| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB01DAT | 運用日付取得 | 1000ITTSOR | +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | + +## 使用DB2テーブル + +| テーブル名 | アクセス種別 | 用途 | +|-----------|-------------|------| +| EMP-MASTER | SELECT | 社員情報(氏名・部署・給与関連項目)参照 | +| OVT-MONTHLY | SELECT | 残業時間合計(SUM(OVT-HOURS))参照 | + +## 処理フロー +1. 初期処理(開始メッセージ→運用日付取得→PAY-PARAM読込→OPEN→DB接続→初回読込) +2. DB2 EMP-MASTER参照(社員情報取得) +3. DB2 OVT-MONTHLY参照(残業時間合計取得) +4. 給与計算(欠勤控除額→残業手当→EVALUATE ALSO(勤怠×手当)→支給総額) +5. SALARY-DETAIL出力 +6. 終了処理(CLOSE→件数出力→終了メッセージ) diff --git a/使用資源一覧/KYU05DED_使用資源一覧.md b/使用資源一覧/KYU05DED_使用資源一覧.md new file mode 100644 index 0000000..410f5ff --- /dev/null +++ b/使用資源一覧/KYU05DED_使用資源一覧.md @@ -0,0 +1,49 @@ +# KYU05DED 使用資源一覧 + +## プログラム概要 +- **プログラムID**: KYU05DED +- **プログラム名**: 控除計算処理 +- **処理概要**: SALARY-DETAILを入力に、源泉所得税・社会保険料・住民税を計算しSALARY-NETを出力する。TAX-TABLE(DB2 SELECT ... BETWEEN)とINSURANCE-TABLE(SEARCH ALL)を参照。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| KYU05R01 | SALARY-DETAIL | 順編成 | F (固定長) | 240B | KYU03REC | +| KYU05W01 | SALARY-NET | 順編成 | F (固定長) | 200B | KYU04REC | +| KYU05W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | KYU99REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| KYU03REC | レコード定義(R01入力ファイル) | FILE SECTION | +| KYU04REC | レコード定義(W01出力ファイル) | FILE SECTION | +| KYU99REC | エラーログレコード定義(W02出力ファイル) | FILE SECTION | +| SQLCA | SQL通信領域 | WORKING-STORAGE | +| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 1100INSLOADSOR / 9999ABDSOR | + +## 使用DB2テーブル + +| テーブル名 | アクセス種別 | 用途 | +|-----------|-------------|------| +| TAX-TABLE | SELECT | 課税所得に対する税率・控除額(BETWEEN検索) | +| INSURANCE-TABLE | SELECT(DECLARE/FETCH) | 社会保険料率取得(全件LOAD→SEARCH ALL) | + +## 処理フロー +1. 初期処理(開始メッセージ→DB接続→INSURANCE-TABLE全件LOAD→OPEN→初回読込) +2. 課税所得計算(基本控除差引) +3. DB2 TAX-TABLE参照(BETWEEN条件で税率・控除額取得) +4. 社会保険料計算(SEARCH ALL:所得範囲一致) +5. 住民税計算(定率計算) +6. 差引支給額計算 +7. SALARY-NET出力 +8. 終了処理(CLOSE→件数出力→終了メッセージ) diff --git a/使用資源一覧/KYU06UPD_使用資源一覧.md b/使用資源一覧/KYU06UPD_使用資源一覧.md new file mode 100644 index 0000000..09b8c2f --- /dev/null +++ b/使用資源一覧/KYU06UPD_使用資源一覧.md @@ -0,0 +1,45 @@ +# KYU06UPD 使用資源一覧 + +## プログラム概要 +- **プログラムID**: KYU06UPD +- **プログラム名**: 給与計算結果DB2更新処理 +- **処理概要**: SALARY-NETをDB2 SALARY-RESULTSに登録する。重複時(-803)はUPDATEに切替。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| KYU06R02 | SALARY-NET | 順編成 | F (固定長) | 200B | KYU04REC | +| KYU06W03 | ERROR-LOG | 順編成 | V (可変長) | 200B | KYU99REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| KYU04REC | レコード定義(R02入力ファイル) | FILE SECTION | +| KYU99REC | エラーログレコード定義(W03出力ファイル) | FILE SECTION | +| SQLCA | SQL通信領域 | WORKING-STORAGE | +| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | + +## 使用DB2テーブル + +| テーブル名 | アクセス種別 | 用途 | +|-----------|-------------|------| +| SALARY-RESULTS | INSERT / UPDATE | 給与計算結果登録(INSERT試行→-803時UPDATE) | + +## 処理フロー +1. 初期処理(開始メッセージ→PARM取得→OPEN→DB接続→初回読込) +2. DB2ホスト変数にMOVE +3. INSERT試行 + - SQLCODE=0 → 正常登録 + - SQLCODE=-803 → UPDATEに切替 + - その他SQLエラー → ERROR-LOG出力 +4. 終了処理(CLOSE→件数出力→終了メッセージ) diff --git a/使用資源一覧/KYU07DIV_使用資源一覧.md b/使用資源一覧/KYU07DIV_使用資源一覧.md new file mode 100644 index 0000000..3e5451a --- /dev/null +++ b/使用資源一覧/KYU07DIV_使用資源一覧.md @@ -0,0 +1,44 @@ +# KYU07DIV 使用資源一覧 + +## プログラム概要 +- **プログラムID**: KYU07DIV +- **プログラム名**: 部門別分割出力処理 +- **処理概要**: JCL SORT済SALARY-NETを部署コードに応じて50ファイルに分割出力する。常に1ファイルのみOPEN。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| KYU07R01 | SALARY-NET(SORT済) | 順編成 | F (固定長) | 200B | KYU04REC | +| KYU07SYS | 制御カード(SYSIN) | 順編成 | F (固定長) | 80B | なし(自前定義) | +| KYU07D01〜D50 | 部署別出力(50ファイル) | 順編成 | F (固定長) | 200B | なし(自前定義 PIC X(200)) | +| KYU07W99 | ERROR-LOG | 順編成 | V (可変長) | 200B | KYU99REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| KYU04REC | レコード定義(R01入力ファイル) | FILE SECTION | +| KYU99REC | エラーログレコード定義(W99出力ファイル) | FILE SECTION | +| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | + +## 使用DB2テーブル + +なし(DB操作なし) + +## 処理フロー +1. 初期処理(開始メッセージ→SYSIN読込(対象部署)→OPEN→初回読込) +2. SYSINパース("DEPT=01,02,05,10"形式、複数部署指定可) +3. 主処理 + - SYSIN対象部署フィルタ(SEARCH) + - 部署切替検出 → 前ファイルCLOSE WITH LOCK→新ファイルOPEN + - EVALUATEで該当部署ファイルにWRITE +4. 終了処理(最終部署CLOSE→CLOSE→件数出力→終了メッセージ) diff --git a/使用資源一覧/KYU08PRI_使用資源一覧.md b/使用資源一覧/KYU08PRI_使用資源一覧.md new file mode 100644 index 0000000..498054e --- /dev/null +++ b/使用資源一覧/KYU08PRI_使用資源一覧.md @@ -0,0 +1,45 @@ +# KYU08PRI 使用資源一覧 + +## プログラム概要 +- **プログラムID**: KYU08PRI +- **プログラム名**: 給与明細印刷処理 +- **処理概要**: JCL SORT済みSALARY-NETを給与明細(LINAGE)として印刷出力する。1社員1ページ。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| KYU08R01 | SALARY-NET(SORT済) | 順編成 | F (固定長) | 200B | KYU04REC | +| KYU08W01 | PAYSLIP印刷(LINAGE) | 順編成 | F (固定長) | 200B | KYU05REC | +| KYU08W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | KYU99REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| KYU04REC | レコード定義(R01入力ファイル) | FILE SECTION | +| KYU05REC | レコード定義(W01印刷出力ファイル) | FILE SECTION | +| KYU99REC | エラーログレコード定義(W02出力ファイル) | FILE SECTION | +| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE | +| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB01DAT | 運用日付取得 | 1000ITTSOR | +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | + +## 使用DB2テーブル + +なし(DB操作なし) + +## 処理フロー +1. 初期処理(開始メッセージ→運用日付取得→OPEN→初回読込) +2. ヘッダ出力(BEFORE ADVANCING PAGE + ページ番号) +3. 明細行編集(社員番号・氏名・基本給・差引支給額) +4. 明細WRITE(AT END-OF-PAGEでフッタ→改ページ) +5. フッタ出力(BEFORE ADVANCING PAGE) +6. 終了処理(CLOSE→件数出力→終了メッセージ) diff --git a/使用資源一覧/KYU09MRG_使用資源一覧.md b/使用資源一覧/KYU09MRG_使用資源一覧.md new file mode 100644 index 0000000..bb99da3 --- /dev/null +++ b/使用資源一覧/KYU09MRG_使用資源一覧.md @@ -0,0 +1,49 @@ +# KYU09MRG 使用資源一覧 + +## プログラム概要 +- **プログラムID**: KYU09MRG +- **プログラム名**: 支給データ結合処理 +- **処理概要**: SALARY-NETとBONUS-DATAをMERGE文で社員番号昇順に結合し、同一社員内の給与(TYPE=S)と賞与(TYPE=B)を統合する。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| KYU09M99 | MERGE-FILE(作業) | 順編成 | - | 200B | なし(自前定義 SD) | +| KYU09M01 | SALARY-NET(S=給与) | 順編成 | F (固定長) | 200B | KYU04REC | +| KYU09M02 | BONUS-DATA(B=賞与) | 順編成 | F (固定長) | 200B | KYU04REC | +| KYU09W01 | PAYMENT-DATA | 順編成 | F (固定長) | 200B | KYU06REC | +| KYU09W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | KYU99REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| KYU04REC | レコード定義(M01/M02入力ファイル) | FILE SECTION | +| KYU06REC | レコード定義(W01出力ファイル) | FILE SECTION | +| KYU99REC | エラーログレコード定義(W02出力ファイル) | FILE SECTION | +| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE | +| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB01DAT | 運用日付取得 | 1000ITTSOR | +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | + +## 使用DB2テーブル + +なし(DB操作なし) + +## 処理フロー +1. 初期処理(開始メッセージ→運用日付取得→OPEN) +2. MERGE実行(ON ASCENDING KEY MERGE-EMP-ID, USING SALARY-FILE BONUS-FILE) +3. OUTPUT PROCEDURE(2000MRGOUTSOR) + - RETURN MERGE-FILE で受取 + - 同一社員内でTYPE=S(給与)とTYPE=B(賞与)を統合 + - 給与+賞与=支給総額算定 + - PAYMENT-DATA出力 +4. 終了処理(CLOSE→件数出力→終了メッセージ) diff --git a/品質管理/カバレッジ統計.md b/品質管理/カバレッジ統計.md index 84021b8..75f2677 100644 --- a/品質管理/カバレッジ統計.md +++ b/品質管理/カバレッジ統計.md @@ -1,6 +1,6 @@ # カバレッジ統計 -> 本ファイルは全コードベース(KIN + ZAN + SUB)を統合したカバレッジ状況を集計する。 +> 本ファイルは全コードベース(KIN + ZAN + KYU + SUB)を統合したカバレッジ状況を集計する。 > 定義ファイル(COBOLキーワード網羅定義書.md)の ## 1.(予約語一覧)・## 2.(TYPE定義)を参照して集計する。 > 凡例:◎=完全使用(全構文形式を使用)、△=一部使用(一部の構文形式のみを使用)、×=未使用 @@ -15,13 +15,13 @@ | 01 | マッチング(1:1) | 匹配 | ZAN04MAT | ◎ | | 02 | マッチング(1:N) | 匹配 | KIN05MAT, KIN03EXP | ◎ | | 03 | マッチング(N:1) | 匹配 | ZAN03CHK | ◎ | -| 04 | レイアウト編集のみ(GETPUT) | 编辑 | KIN06CLD | ◎ | -| 05 | 振り分け(IF文) | 分支 | 全メインプログラム(12本) | ◎ | -| 06 | 振り分け(EVALUATE文) | 分支 | 12本中11本(KIN04/KIN06以外) | ◎ | +| 04 | レイアウト編集のみ(GETPUT) | 编辑 | KIN06CLD, KYU08PRI | ◎ | +| 05 | 振り分け(IF文) | 分支 | 全メインプログラム(24本) | ◎ | +| 06 | 振り分け(EVALUATE文) | 分支 | 24本中23本(KIN04/KIN06以外) | ◎ | | 07 | キーブレイク(集計) | key切 | ZAN05CAL | ◎ | -| 08 | キーブレイク(集約) | key切 | — | × | -| 09 | DB更新 | 数据库 | KIN02UPD, ZAN06UPD | ◎ | -| 10 | 50分割 | 分割 | — | × | +| 08 | キーブレイク(集約) | key切 | KYU03AGG | ◎ | +| 09 | DB更新 | 数据库 | KIN02UPD, ZAN06UPD, KYU02REG, KYU06UPD | ◎ | +| 10 | 50分割 | 分割 | KYU07DIV | ◎ | | 11 | 25分割 | 分割 | — | × | | 12 | 100分割 | 分割 | — | × | | 13 | 項目チェック(重複含まず) | 校验 | ZAN01CHK, ZAN03CHK, KIN01INP, KIN04CHK, SUB04CHK | ◎ | @@ -32,30 +32,30 @@ | 18 | マッチングM:N⇒出力M件 | 匹配 | — | × | | 19 | マッチングM:N⇒出力N件 | 匹配 | — | × | | 20 | マッチングM:N⇒出力M×N件 | 匹配 | — | × | -| 21 | CSV→FB変換(改行あり) | 文件转换 | — | × | +| 21 | CSV→FB変換(改行あり) | 文件转换 | KYU01CVT | ◎ | | 22 | 2段階マッチング(M:N⇒M:N) | 匹配 | — | × | -| 23 | SELECT条件 | 数据库 | — | × | -| 24 | 内部テーブル検索 | 内部处理 | KIN01INP(SEARCH), KIN03EXP(SEARCH ALL), ZAN03CHK(SEARCH ALL) | ◎ | +| 23 | SELECT条件 | 数据库 | KYU05DED | ◎ | +| 24 | 内部テーブル検索 | 内部处理 | KIN01INP(SEARCH), KIN03EXP(SEARCH ALL), ZAN03CHK(SEARCH ALL), KYU05DED(SEARCH ALL) | ◎ | | 25 | サブプログラム使用 | 内部处理 | SUB01DAT~SUB05TIM | ◎ | -| 26 | DB検索 | 数据库 | KIN03EXP, KIN06CLD | ◎ | +| 26 | DB検索 | 数据库 | KIN03EXP, KIN06CLD, KYU04CAL, KYU05DED | ◎ | | 27 | 項目チェック(半角20桁/4桁) | 校验 | — | × | -| 28 | SYSIN読込 | 内部处理 | KIN08DBU | ◎ | +| 28 | SYSIN読込 | 内部处理 | KIN08DBU, KYU07DIV | ◎ | | 29 | ASCII→EBCDIC変換 | 文件转换 | — | × | -| 30 | キーブレイク(集計集約以外) | key切 | KIN03EXP(社員小計), ZAN02CHK(重複検出), KIN05MAT(N:1ループ) | ◎ | +| 30 | キーブレイク(集計集約以外) | key切 | KIN03EXP(社員小計), ZAN02CHK(重複検出), KIN05MAT(N:1ループ), KYU03AGG(集約), KYU04CAL(同キー) | ◎ | | 31 | 項目チェック(重複含む) | 校验 | ZAN02CHK(時間帯重複) | ◎ | -| 32 | 1:N+キーブレイク(同キー) | 混合 | — | × | +| 32 | 1:N+キーブレイク(同キー) | 混合 | KYU04CAL | ◎ | | 33 | 1:N+キーブレイク(異キー) | 混合 | — | × | | 34 | SORT(INPUT/OUTPUT PROCEDURE) | 排序 | — | × | -| 35 | MERGE(複数ファイル結合) | 排序 | — | × | +| 35 | MERGE(複数ファイル結合) | 排序 | KYU09MRG | ◎ | ### 1.2 集計 | 指標 | 値 | |------|:----:| | 全タイプ数 | 35 | -| ◎(使用) | 16 | -| ×(未使用) | 19 | -| カバレッジ率(◎/35) | 45.7% | +| ◎(使用) | 22 | +| ×(未使用) | 13 | +| カバレッジ率(◎/35) | 62.9% | --- @@ -115,9 +115,9 @@ | 3 | ADD | ◎ | ADD TO/GIVING/CORRESPONDING/ROUNDED 全メインプログラム | | 4 | AFTER | △ | WRITE AFTER ADVANCING(KIN09CSV)、PERFORM TEST AFTER(ZAN06UPD)のみ。INSPECT AFTER未使用 | | 5 | ALL | △ | SEARCH ALL(KIN03EXP,ZAN03CHK)、INSPECT REPLACING ALL(KIN08DBU,KIN09CSV)。FIGURATIVE CONSTANT(VALUE ALL)未使用 | -| 6 | ALPHABETIC | × | 未使用 | +| 6 | ALPHABETIC | △ | IF NOT ALPHABETIC(KYU01CVT, KYU04CHK) | | 7 | ALPHABETIC-UPPER | × | 未使用 | -| 8 | ALSO | × | EVALUATE ALSO未使用(全EVALUATEは単一条件式のみ) | +| 8 | ALSO | ◎ | EVALUATE ALSO(KYU04CAL: 勤怠区分×手当種別の複合分岐) | | 9 | AND | ◎ | 条件式AND 全プログラム | | 10 | ANY | × | SEARCH ANY未使用 | | 11 | APPLY | × | I-O-CONTROL段落未使用 | @@ -140,16 +140,16 @@ | 28 | CONFIGURATION | ◎ | CONFIGURATION SECTION 全プログラム | | 29 | CONTAINS | ◎ | FD BLOCK CONTAINS / RECORD CONTAINS | | 30 | CONTINUE | ◎ | SEARCH AT END、EVALUATE WHEN OTHER(全プログラム) | -| 31 | CONVERTING | × | INSPECT CONVERTING未使用 | +| 31 | CONVERTING | ◎ | INSPECT CONVERTING X"0D"/X"0A" TO SPACE(KYU01CVT: 引用符内改行→SPACE変換) | | 32 | COPY | ◎ | COPY 全プログラム(C書式取込み、REPLACING含む) | | 33 | CORR | × | MOVE CORR/ADD CORR/SUBTRACT CORR未使用 | -| 34 | COUNT | × | UNSTRING COUNT IN未使用(INSPECT TALLYINGは別キーワード) | +| 34 | COUNT | ◎ | UNSTRING COUNT IN(KYU01CVT: CSV分解の項目数カウント) | | 35 | CURSOR | ◎ | DECLARE/OPEN/FETCH/CLOSE CURSOR(KIN02UPD,KIN03EXP,KIN06CLD,KIN09CSV) | | 36 | DATA | ◎ | DATA DIVISION 全プログラム | | 37 | DATE | × | ACCEPT FROM DATE未使用(SUB01DATはFUNCTION CURRENT-DATE使用) | | 38 | DATE-COMPILED | ◎ | IDENTIFICATION DIVISION 全プログラム | | 39 | DATE-WRITTEN | ◎ | IDENTIFICATION DIVISION 全プログラム | -| 40 | DECLARATIVES | × | 未使用 | +| 40 | DECLARATIVES | ◎ | USE AFTER ERROR PROCEDURE(KYU01CVT: R01/W01/W02ファイルエラー時ABEND) | | 41 | DELETE | △ | EXEC SQL DELETE(KIN02UPD,KIN08DBU)。COBOL DELETE文(SEQ FILE)未使用 | | 42 | DELIMITED | ◎ | STRING/UNSTRING DELIMITED BY | | 43 | DELIMITER | × | UNSTRING DELIMITER IN未使用 | @@ -179,7 +179,7 @@ | 67 | END-UNSTRING | ◎ | END-UNSTRING(UNSTRING使用PGM) | | 68 | ENVIRONMENT | ◎ | ENVIRONMENT DIVISION 全プログラム | | 69 | ERROR | ◎ | ON SIZE ERROR(COMPUTE:ZAN01,ZAN03,ZAN05) | -| 70 | EVALUATE | △ | EVALUATE TRUE/WHEN/WHEN OTHER使用。ALSO未使用。構文形式一覧のALSO形式が未使用のため△ | +| 70 | EVALUATE | ◎ | EVALUATE ALSO/WHEN/WHEN OTHER(KYU04CAL: 勤怠区分×手当種別) | | 71 | EXEC | △ | EXEC SQL使用。EXEC CICS未使用 | | 72 | EXCEPTION | × | CALL ON EXCEPTION未使用 | | 73 | EXECUTE | × | 未使用 | @@ -237,8 +237,8 @@ | 125 | OTHER | ◎ | EVALUATE WHEN OTHER | | 126 | OUTPUT | ◎ | OPEN OUTPUT | | 127 | PACKED-DECIMAL | × | COMP-3使用、PACKED-DECIMAL表記不使用 | -| 128 | PAGE | △ | WRITE AFTER ADVANCING PAGE(KIN09CSV)。FD LINAGE句未使用 | -| 129 | PAGE-COUNTER | × | 未使用(LINAGE不使用のため) | +| 128 | PAGE | ◎ | FD LINAGE IS(KYU08PRI: 66行ページ制御)、WRITE BEFORE/AFTER ADVANCING PAGE | +| 129 | PAGE-COUNTER | × | 未使用(KYU08PRIはWORKING-STORAGEのWRK-PAGE-COUNTERで代替。特殊レジスタPAGE-COUNTERは不使用) | | 130 | PERFORM | △ | PERFORM(外部段落)/UNTIL/VARYING/THRU/TEST AFTER使用。TIMES/TEST BEFORE/VARYING AFTER未使用 | | 131 | PIC | ◎ | PICTURE句 全プログラム | | 132 | POINTER | ◎ | STRING WITH POINTER(KIN09CSV) | @@ -289,7 +289,7 @@ | 177 | UP | × | SET UP未使用 | | 178 | UPON | × | DISPLAY UPON未使用 | | 179 | USAGE | ◎ | USAGE COMP/COMP-3 | -| 180 | USE | × | USE文未使用 | +| 180 | USE | ◎ | USE AFTER ERROR PROCEDURE(KYU01CVT: DECLARATIVESでファイルエラー捕捉) | | 181 | USING | ◎ | PROCEDURE DIVISION USING、CALL USING 全プログラム | | 182 | VALUE | ◎ | VALUE 全プログラム(88条件名、初期値) | | 183 | VALUES | × | 88条件値VALUES(VALUE句複数値)未使用。SQLのVALUES句は別コンテキスト | @@ -298,22 +298,22 @@ | 186 | WHEN-COMPILED | ◎ | FUNCTION WHEN-COMPILED 全15プログラム | | 187 | WITH | ◎ | STRING WITH POINTER、WRITE WITH ADVANCING、INITIALIZE WITH FILLERは未使用だが他で◎ | | 188 | WORKING-STORAGE | ◎ | WORKING-STORAGE SECTION 全プログラム | -| 189 | WRITE | △ | WRITE FROM/AFTER ADVANCING使用。BEFORE ADVANCING/END-OF-PAGE未使用 | +| 189 | WRITE | ◎ | WRITE FROM/BEFORE ADVANCING/AFTER ADVANCING/END-OF-PAGE(KYU08PRI: 給与明細印刷のLINAGE制御) | | 190 | WRITE-ONLY | × | I-O-CONTROL段落未使用 | | 191 | ZERO | ◎ | ZERO/ZEROS VALUE、MOVE ZERO 全プログラム | | 192 | ZEROS | ◎ | ZEROS(ZEROと同義、KIN08DBU LOW-VALUES) | | 193 | ALTER | × | 非推奨 | | 194 | CANCEL | × | 未使用 | | 195 | ENTRY | × | 未使用 | -| 196 | MERGE | × | JCL PGM=SORTに委譲 | +| 196 | MERGE | ◎ | COBOL MERGE文(KYU09MRG: SALARY-NET + BONUS-DATA を社員番号昇順結合) | | 197 | RELEASE | × | COBOL SORT未使用 | -| 198 | RETURN | × | COBOL RETURN文未使用(RETURN-CODEは特殊レジスタ、WRK-RETURN-CODEは変数名) | +| 198 | RETURN | ◎ | COBOL RETURN文(KYU09MRG: MERGE OUTPUT PROCEDUREでMERGE結果受取) | | 199 | REWRITE | × | VSAM非対応 | | 200 | SORT | × | JCL PGM=SORTに委譲 | | 201 | START | × | 順次読込のみ | | 202 | SAME | × | SAME RECORD/SORT AREA未使用 | | 203 | FUNCTION | ◎ | FUNCTION MOD/WHEN-COMPILED/NUMVAL/INTEGER-OF-DATE/MIN/MAX/TRIM(KIN03EXP,KIN06CLD,KIN08DBU,KIN09CSV) | -| 204 | BEFORE | × | INSPECT BEFORE/WRITE BEFORE ADVANCING/PERFORM TEST BEFORE未使用 | +| 204 | BEFORE | ◎ | WRITE BEFORE ADVANCING PAGE/1 LINE(KYU08PRI: 給与明細印刷の改ページ制御) | | 205 | ADDRESS | × | ADDRESS OF未使用(SET ADDRESS OF未使用) | --- @@ -323,10 +323,10 @@ | 指標 | 値 | |------|:----:| | **プログラムタイプカバレッジ(35タイプ)** | | -| ◎(使用) | 16 / 35 | -| ×(未使用) | 19 / 35 | -| カバレッジ率(◎/35) | 45.7% | -| 実装対象限定(1-9,13-15,24-26,28,30-31)= 20種中 | 16件 = 80.0% | +| ◎(使用) | 22 / 35 | +| ×(未使用) | 13 / 35 | +| カバレッジ率(◎/35) | 62.9% | +| 実装対象限定(1-9,13-15,24-26,28,30-31)= 20種中 | 20件 = 100.0% | | **PICTURE記号カバレッジ(Section 2.1)** | | | 全記号数(11種) | 11 | | 使用済記号(◎+△) | 7 | @@ -334,11 +334,11 @@ | カバレッジ率 | 63.6% | | **予約語カバレッジ(Section 3)** | | | 全予約語数 | 205 | -| ◎(全構文形式使用) | 101 | -| △(一部構文形式使用) | 24 | -| ×(未使用) | 80 | -| カバレッジ率(◎/205) | 49.3% | -| カバレッジ率(◎+△/205) | 61.0% | +| ◎(全構文形式使用) | 112 | +| △(一部構文形式使用) | 22 | +| ×(未使用) | 71 | +| カバレッジ率(◎/205) | 54.6% | +| カバレッジ率(◎+△/205) | 65.4% | | **TYPE定義カバレッジ(11種)** | | | 全TYPE定義数 | 11 | | 使用済TYPE | 7(X, 9, 9V9, S9V9, S9V9 COMP-3, S9 COMP-3, S9 COMP) | @@ -346,5 +346,5 @@ | 未使用TYPE | 4(G, N, BINARY, ZZZ9) | | TYPEカバレッジ率 | 63.6%(特殊含め90.9%) | -> 本ファイルは全コードベース(KIN01-09 + ZAN01-06 + SUB01-05 = 20プログラム)を統合したカバレッジ状況。 +> 本ファイルは全コードベース(KIN01-09 + ZAN01-06 + KYU01-09 + SUB01-05 = 29プログラム)を統合したカバレッジ状況。 > 定義ファイル(COBOLキーワード網羅定義書.md)と合わせて参照すること。 diff --git a/基本設計書/00_勤怠システム_設計書(全体).md b/基本設計書/00_勤怠システム_設計書(全体).md new file mode 100644 index 0000000..f33f471 --- /dev/null +++ b/基本設計書/00_勤怠システム_設計書(全体).md @@ -0,0 +1,47 @@ +# 勤怠システム 設計書 + +## システム概要 + +本システムは三つのサブシステムで構成される。 + +| サブシステム | 役割 | COBOLプログラム数 | 設計書 | +|---|---|---|---|---| +| **A: 勤怠休暇管理** | 休暇申請取込・打刻データ照合・日別勤怠計算・月次統計DB更新・CSV出力 | 7 | 01_勤怠休暇管理システム_設計書(サブシステムA).md | +| **B: 残業統計管理** | 加班申請データ取込・振り分け・重複チェック・打刻照合・マッチング・集約・DB更新 | 6 | 02_残業統計管理システム_設計書(サブシステムB).md | +| **C: 給与計算** | 欠勤統計取込・給与計算・給与明細出力 | 2 | 03_給与計算システム_設計書(サブシステムC).md | + +## アーキテクチャ + +- 全JCLステップは、前提条件(ソート)をJCLのSORTユーティリティ(`PGM=SORT`)で実行した後、COBOLプログラム(`EXEC PGM=SSSnnFFF`)を実行する。COBOLプログラム内でソートは行わない。 +- DB: DB2 for LUW。COBOLからは埋め込みSQL(`EXEC SQL`)で直接アクセスする。 +- COBOL対象: GnuCOBOL 3.x(IBM互換モード、`SOURCE-COMPUTER. IBM-ZSERIES.`)。 +- 全パラメータは JCL PARM → `ACCEPT FROM COMMAND-LINE` + `UNSTRING` で解析。 + +## サブシステム間連携 + +| 連携データ | 出力元 | 入力先 | 方式 | 備考 | +|---|---|---|---|---| +| EDITED-PUNCH(打刻データ) | A-サブシステム KIN03PCK | B-サブシステム ZANJ013 | ファイル連携 | 打刻データ(出勤/退勤時刻) | +| OVT-APPLY(加班申請CSV) | 外部システム | B-サブシステム ZANJ010 | ファイル連携 | 加班申請入力CSV | +| ABSENCE-SUMMARY(欠勤統計) | A-サブシステム KIN06DBU | C-サブシステム KYUJ001 | ファイル連携 | 月次欠勤集計(A→C) | +| SALARY-DETAIL(給与明細) | C-サブシステム KYU01CAL | C-サブシステム KYU02PRI | ファイル連携 | 社内連携(C内) | + +## 共通関数(サブプログラム) + +| サブプログラム | I/Fコピー句 | 用途 | +|---|---|---| +| SUB01DAT | D01010AC | 運用日付取得 | +| SUB02MSG | MSG000AC | メッセージ編集出力 | +| SUB03END | MSG000AC | ABEND終了 | +| SUB04CHK | SUB04CHK | 項目チェック(日付/時刻/数値) | +| SUB05TIM | TIME010AC | 時刻丸め計算(分→時間) | +| SUB06DBU | SUB06DBU | DB更新処理(DB2埋め込みSQL) | + +### SUB05TIM I/F(TIME010AC) + +| パラメータ | 入出力 | 説明 | +|-----------|--------|------| +| TI-MINUTES | I | 入力分数(PIC 9(6)) | +| TI-ROUND-TYPE | I | 丸め種別('MIN30'=0.5h単位, 'MIN6'=0.1h単位) | +| TI-RESULT-HOURS | O | 丸め結果時間(PIC 9(4)V9(1)) | +| TI-RETURN-CODE | O | 0=正常, 1=入力エラー | diff --git a/基本設計書/03_給与計算システム_設計書(サブシステムC).md b/基本設計書/03_給与計算システム_設計書(サブシステムC).md new file mode 100644 index 0000000..27c43a3 --- /dev/null +++ b/基本設計書/03_給与計算システム_設計書(サブシステムC).md @@ -0,0 +1,1181 @@ +# 給与計算システム 設計書(サブシステムC) + +## システム概要 + +本サブシステムは、社員マスタ・勤怠集計データ(サブシステムA・Bの出力)を基に給与計算を行い、 +部門別分割出力・給与明細印刷・支給データ結合を実行する。 +各COBOLプログラムは1プログラム=1パターンを原則とし、内部処理(Type 24/25/28)との併用のみ許容する。 + +### サブシステム情報 + +| 項目 | 内容 | +|------|------| +| サブシステムID | KYU(給与→KYUryo) | +| COBOLプログラム数 | 9 | +| JCL数 | 6 | + +### システム定数 + +| 定数 | 値 | 説明 | +|------|-----|------| +| BASE-HOURS | 160 | 月所定労働時間(20日×8h)(参考値、コード未使用) | +| INSURANCE-RATE | 0.12345 | 社会保険料率(12.345%)(参考値、コード未使用) | +| TAX-BASIC-DEDUCTION | 50000 | 基礎控除(月額50,000円) | +| OVERTIME-RATE | 1.25 | 時間外労働割増率(25%増) | +| HOLIDAY-RATE | 1.35 | 休日労働割増率(35%増) | +| MIDNIGHT-RATE | 1.50 | 深夜労働割増率(50%増) | + +### サブシステム間連携 + +| 連携データ | 出力元 | 入力先 | 方式 | 備考 | +|-----------|--------|--------|------|------| +| ABSENCE-SUMMARY(欠勤統計) | A-サブシステム KIN08DBU | KYUJ020 | ファイル連携 | 月次欠勤集計(80B / 社員番号昇順) | +| OVT-MONTHLY(残業統計) | B-サブシステム ZAN06UPD | KYUJ020 | DB参照(同一DB2インスタンス) | 残業時間(DB2同一インスタンス内別スキーマ) | +| EMP-RECORD(社員固定長) | KYU01CVT | KYU02REG | ファイル連携 | CSV変換後(80B) | +| ABSENCE-AGGREGATE(欠勤集約) | KYU03AGG | KYU04CAL | ファイル連携 | 社員別集約後(80B) | +| SALARY-DETAIL(給与明細) | KYU04CAL | KYU05DED / KYU06UPD | ファイル連携 | 計算後給与(240B) | +| SALARY-NET(差引支給) | KYU05DED | KYU06UPD / KYU07DIV / KYU08PRI / KYU09MRG | ファイル連携 | 控除後支給額(200B) | +| PAYMENT-DATA(支給データ) | KYU09MRG | 外部銀行システム | ファイル連携 | 振込データ(200B) | + +--- + +## ファイル一覧 + +| # | ファイル名 | 編成 | RECM | サイズ | 用途 | 区分 | +|---|-----------|------|------|-------|------|------| +| 1 | ABSENCE-SUMMARY | SEQUENTIAL | FB | 80 | 欠勤統計(Aシステム出力) | A連携 | +| 2 | PAY-PARAM | SEQUENTIAL | FB | 80 | 給与パラメータ(単価・控除率) | 新規 | +| 3 | EMP-RECORD | SEQUENTIAL | FB | 80 | 社員マスタ固定長(CSV変換後) | 新規 | +| 4 | ABSENCE-AGGREGATE | SEQUENTIAL | FB | 80 | 欠勤集約後(社員単位) | 新規 | +| 5 | SALARY-DETAIL | SEQUENTIAL | FB | 240 | 給与明細(計算後) | 新規 | +| 6 | SALARY-NET | SEQUENTIAL | FB | 200 | 差引支給額(控除後) | 新規 | +| 7 | PAYSLIP | SEQUENTIAL | FB | 200 | 給与明細印刷イメージ | 新規 | +| 8 | BONUS-DATA | SEQUENTIAL | FB | 200 | 賞与データ | 新規 | +| 9 | PAYMENT-DATA | SEQUENTIAL | FB | 200 | 支給データ(銀行振込用) | 新規 | +| 10 | DEPT-OUT-01〜50 | SEQUENTIAL | FB | 200 | 部門別分割出力(最大50ファイル) | 新規 | +| 11 | ERROR-LOG | SEQUENTIAL | VB | 最大200 | エラーレコード退避 | A・B共用 | + +### DB二重対応 + +本サブシステムのDB操作はDB2の埋め込みSQL(`EXEC SQL`)で直接記述する。 +社員マスタ(EMP-MASTER)と税率テーブル(TAX-TABLE)は同一DB2インスタンス内の別スキーマ(SALARYDB)で管理する。 +BサブシステムのOVERTIME.DBも同一DB2インスタンスに存在するため、`スキーマ名.テーブル名` でクロススキーマ参照可能。 + +### 共通関数利用方針 + +既存のサブプログラム(SUB01DAT~SUB05TIM)は本サブシステムでも利用する。 +新たな共通関数は追加せず、各プログラム内でロジックを完結させる。 + +--- + +## DB構成(SALARYDB) + +### DB名称:給与計算データベース(SALARYDB) + +#### テーブル1:EMP-MASTER(社員マスタテーブル) + +| カラム | 型 | 内容 | +|--------|---|------| +| EMP-ID | CHAR(8) | 社員番号(PK) | +| EMP-NAME | VARCHAR(40) | 社員名 | +| DEPT-CODE | CHAR(2) | 部署コード(01~50) | +| REGION-CODE | CHAR(2) | 地域コード(01~25、FYI用) | +| CATEGORY-CODE | CHAR(3) | 社員区分コード(001~100、FYI用) | +| BASE-SALARY | DECIMAL(9,0) | 基本給 | +| HOURLY-RATE | DECIMAL(7,0) | 時給 | +| DEPENDENT-COUNT | SMALLINT | 扶養人数 | +| STATUS | CHAR(1) | 0=在籍 / 9=退職 | +| UPDATED-AT | TIMESTAMP | 更新日時 | + +#### テーブル2:TAX-TABLE(税率テーブル) + +| カラム | 型 | 内容 | +|--------|---|------| +| TAX-FROM | DECIMAL(9,0) | 課税所得下限(PK) | +| TAX-TO | DECIMAL(9,0) | 課税所得上限(PK) | +| TAX-RATE | DECIMAL(5,4) | 税率(0.0500=5%) | +| DEDUCTION | DECIMAL(9,0) | 控除額 | + +#### テーブル3:INSURANCE-TABLE(社会保険料率テーブル) + +| カラム | 型 | 内容 | +|--------|---|------| +| INS-INCOME-FROM | DECIMAL(9,0) | 対象所得下限(PK) | +| INS-INCOME-TO | DECIMAL(9,0) | 対象所得上限(PK) | +| INS-HEALTH-RATE | DECIMAL(7,6) | 健康保険料率 | +| INS-PENSION-RATE | DECIMAL(7,6) | 厚生年金保険料率 | +| UPDATED-AT | TIMESTAMP | 更新日時 | + +#### テーブル4:SALARY-RESULTS(給与計算結果テーブル) + +| カラム | 型 | 内容 | +|--------|---|------| +| EMP-ID | CHAR(8) | 社員番号(PK) | +| YEAR-MONTH | CHAR(6) | 対象年月 YYYYMM(PK) | +| GROSS-PAYMENT | DECIMAL(9,0) | 支給総額 | +| INCOME-TAX | DECIMAL(9,0) | 源泉所得税 | +| INSURANCE | DECIMAL(9,0) | 社会保険料 | +| RESIDENT-TAX | DECIMAL(9,0) | 住民税 | +| NET-PAYMENT | DECIMAL(9,0) | 差引支給額 | +| UPDATED-AT | TIMESTAMP | 更新日時 | + +--- + +## 処理フロー + +``` + ╞══ KYUJ010 ═══════════════════════════════════╡ + │ KYU01CVT(CSV→FB変換) PGMパターン: 21 + │ INSPECT CONVERTING(引用符内改行→SPACE) + │ UNSTRING COUNT IN(項目数カウント) + │ SUB04CHK で数値妥当性チェック(内部処理25) + │ コメント行(先頭#)は読み飛ばし + ├── 正常 → EMP-RECORD(80B 固定長) + └── 異常 → ERROR-LOG + │ + │ KYU02REG(DB2登録) PGMパターン: 09 + │ EXEC SQL INSERT(新規) + │ SQLCODE=-803 → EXEC SQL UPDATE(重複更新) + ├── → DB2 EMP-MASTER + └── 異常 → ERROR-LOG + │ + ╞══ KYUJ020 ═══════════════════════════════════╡ + │ STEP020S: JCL SORT(ABSENCE-SUMMARY → 社員番号昇順) + │ + │ KYU03AGG(欠勤集約) PGMパターン: 08 + │ 同一社員内の複数欠勤レコードを読込 → 集約 + │ INITIALIZE REPLACING NUMERIC DATA BY ZERO + ├── → ABSENCE-AGGREGATE(80B 社員単位1件) + └── 異常 → ERROR-LOG + │ + │ KYU04CAL(給与計算) PGMパターン: 32 + │ ABSENCE-AGGREGATE + EMP-MASTER(DB2参照) + │ OVT-MONTHLY(DB2 Bサブシステム参照) + │ EVALUATE ALSO(勤怠区分×手当種別の複合分岐) + │ COMPUTE ROUNDED ON SIZE ERROR + ├── → SALARY-DETAIL(240B) + └── 異常 → ERROR-LOG + │ + ╞══ KYUJ030 ═══════════════════════════════════╡ + │ KYU05DED(控除計算) PGMパターン: 23 + │ TAX-TABLE → EXEC SQL SELECT ... BETWEEN + │ INSURANCE-TABLE → SEARCH ALL(内部表LOAD後) + │ 課税所得計算・源泉所得税・社会保険料・住民税を算出 + ├── → SALARY-NET(200B) + └── 異常 → ERROR-LOG + │ + │ KYU06UPD(DB2更新) PGMパターン: 09 + │ EXEC SQL INSERT(新規) + │ SQLCODE=-803 → EXEC SQL UPDATE(再計算更新) + ├── → DB2 SALARY-RESULTS + └── 異常 → ERROR-LOG + │ + ╞══ KYUJ040 ═══════════════════════════════════╡ + │ STEP040S: JCL SORT(SALARY-NET → 部署コード昇順) + │ + │ KYU07DIV(部門分割出力) PGMパターン: 10 + │ SYSIN制御カードで出力対象部署の絞込可能 + │ EVALUATE DEPT-CODE で該当ファイルへSELECT WRITE + │ 部署別ファイルを順次OPEN/CLOSE(常時1 OPEN) + │ CLOSE WITH LOCK で出力ファイル確定 + ├── 部署別 → DEPT-OUT-01〜50 + └── 異常 → ERROR-LOG + │ + ╞══ KYUJ050 ═══════════════════════════════════╡ + │ STEP050S: JCL SORT(SALARY-NET → 社員番号昇順) + │ + │ KYU08PRI(給与明細印刷) PGMパターン: 04 + │ FD LINAGE IS 66 LINES / TOP 6 / BOTTOM 6 / FOOTING 60 + │ WRITE BEFORE ADVANCING PAGE(1社員1ページ) + │ BLANK WHEN ZERO / JUSTIFIED RIGHT + │ AT END-OF-PAGE / PAGE-COUNTER / SET UP BY + ├── → PAYSLIP(SYSOUT) + └── 異常 → ERROR-LOG + │ + ╞══ KYUJ060 ═══════════════════════════════════╡ + │ KYU09MRG(支給データ結合) PGMパターン: 35 + │ COBOL MERGE文(SALARY-NET + BONUS-DATA) + │ ON ASCENDING KEY MERGE-EMP-ID + │ OUTPUT PROCEDURE で社員単位に統合 + │ RETURN ... AT END でMERGE結果受取 + ├── → PAYMENT-DATA(200B) + └── 異常 → ERROR-LOG +``` + +--- + +## JCL + +### KYUJ010 — 社員マスタ取込(2ステップ) + +```jcl +//KYUJ010 JOB (ACCT),'社員マスタ取込',CLASS=A +//* +//*--- パラメータ定義 --- +//SETPARM SET YEARMONTH=202605 +//* ※PARM値は本番z/OSでJCLから指定。ローカルGnuCOBOLでは環境変数で代替。 +//*===================================================================== +//* STEP010: CSV→FB変換(Type 21) +//*===================================================================== +//STEP010 EXEC PGM=KYU01CVT,PARM='YEARMONTH=&YEARMONTH' +//KYU01R01 DD DSN=EMP-MASTER.CSV,DISP=SHR +//KYU01W01 DD DSN=EMP-RECORD.DAT,DISP=(NEW,PASS) +//KYU01W02 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS) +//* +//*===================================================================== +//* STEP020: DB2登録(Type 09) +//*===================================================================== +//STEP020 EXEC PGM=KYU02REG,PARM='YEARMONTH=&YEARMONTH' +//KYU02R02 DD DSN=EMP-RECORD.DAT,DISP=(OLD,DELETE) +//KYU02W03 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS) +``` + +### KYUJ020 — 給与計算(3ステップ) + +```jcl +//KYUJ020 JOB (ACCT),'給与計算',CLASS=A +//* +//*--- パラメータ定義 --- +//SETPARM SET YEARMONTH=202605 +//* +//*===================================================================== +//* STEP020S: 欠勤統計 SORT(社員番号昇順) +//*===================================================================== +//STEP020S EXEC PGM=SORT +//SORTIN DD DSN=ABSENCE-SUMMARY.DAT,DISP=SHR +//SORTOUT DD DSN=KYU02S01.DAT,DISP=(NEW,PASS) +//SYSIN DD * + SORT FIELDS=(1,8,CH,A),EQUALS +/* +//* +//*===================================================================== +//* STEP021: 欠勤集約(Type 08) +//*===================================================================== +//STEP021 EXEC PGM=KYU03AGG,PARM='YEARMONTH=&YEARMONTH' +//KYU03R01 DD DSN=KYU02S01.DAT,DISP=(OLD,DELETE) +//KYU03W01 DD DSN=ABSENCE-AGGREGATE.DAT,DISP=(NEW,PASS) +//KYU03W02 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS) +//* +//*===================================================================== +//* STEP022: 給与計算(Type 32) +//* EMP-MASTER / OVT-MONTHLY はDB2(EXEC SQL)参照のためDD不要 +//*===================================================================== +//STEP022 EXEC PGM=KYU04CAL,PARM='YEARMONTH=&YEARMONTH' +//KYU04R02 DD DSN=ABSENCE-AGGREGATE.DAT,DISP=(OLD,DELETE) +//KYU04R03 DD DSN=PAY-PARAM.DAT,DISP=SHR +//KYU04W03 DD DSN=SALARY-DETAIL.DAT,DISP=(NEW,CATLG,DELETE) +//KYU04W04 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS) +``` + +### KYUJ030 — 控除計算(2ステップ) + +```jcl +//KYUJ030 JOB (ACCT),'控除計算',CLASS=A +//* +//*--- パラメータ定義 --- +//SETPARM SET YEARMONTH=202605 +//* +//*===================================================================== +//* STEP030: 控除計算(Type 23) +//* TAX-TABLE / INSURANCE-TABLE はDB2(EXEC SQL)参照のためDD不要 +//*===================================================================== +//STEP030 EXEC PGM=KYU05DED,PARM='YEARMONTH=&YEARMONTH' +//KYU05R01 DD DSN=SALARY-DETAIL.DAT,DISP=(OLD,DELETE) +//KYU05W01 DD DSN=SALARY-NET.DAT,DISP=(NEW,PASS) +//KYU05W02 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS) +//* +//*===================================================================== +//* STEP031: DB2 SALARY-RESULTS 更新(Type 09) +//*===================================================================== +//STEP031 EXEC PGM=KYU06UPD,PARM='YEARMONTH=&YEARMONTH' +//KYU06R02 DD DSN=SALARY-NET.DAT,DISP=(OLD,DELETE) +//KYU06W03 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS) +``` + +### KYUJ040 — 部門別分割出力 + +```jcl +//KYUJ040 JOB (ACCT),'部門別分割出力',CLASS=A +//* +//*--- パラメータ定義 --- +//SETPARM SET YEARMONTH=202605 +//* +//*===================================================================== +//* STEP040S: SALARY-NET SORT(部署コード昇順) +//*===================================================================== +//STEP040S EXEC PGM=SORT +//SORTIN DD DSN=SALARY-NET.DAT,DISP=SHR +//SORTOUT DD DSN=KYU04S01.DAT,DISP=(NEW,PASS) +//SYSIN DD * + SORT FIELDS=(50,2,CH,A),EQUALS +/* +//* +//*===================================================================== +//* STEP040: 50分割出力(Type 10) +//* SYSINで出力対象部署絞込可 +//*===================================================================== +//STEP040 EXEC PGM=KYU07DIV,PARM='YEARMONTH=&YEARMONTH' +//KYU07R01 DD DSN=KYU04S01.DAT,DISP=(OLD,DELETE) +//KYU07D01 DD DSN=DEPT-OUT-01.DAT,DISP=(NEW,CATLG,DELETE) +// ...(全50部署) +//KYU07D50 DD DSN=DEPT-OUT-50.DAT,DISP=(NEW,CATLG,DELETE) +//KYU07SYS DD * + DEPT=01,02,05,10 +/* +//KYU07W99 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS) +``` + +### KYUJ050 — 給与明細印刷 + +```jcl +//KYUJ050 JOB (ACCT),'給与明細印刷',CLASS=A +//* +//*--- パラメータ定義 --- +//SETPARM SET YEARMONTH=202605 +//* +//*===================================================================== +//* STEP050S: 給与データ SORT(社員番号昇順) +//*===================================================================== +//STEP050S EXEC PGM=SORT +//SORTIN DD DSN=SALARY-NET.DAT,DISP=SHR +//SORTOUT DD DSN=KYU05S01.DAT,DISP=(NEW,PASS) +//SYSIN DD * + SORT FIELDS=(1,8,CH,A),EQUALS +/* +//* +//*===================================================================== +//* STEP050: 給与明細印刷(Type 04 LINAGEページ制御) +//*===================================================================== +//STEP050 EXEC PGM=KYU08PRI,PARM='YEARMONTH=&YEARMONTH' +//KYU08R01 DD DSN=KYU05S01.DAT,DISP=(OLD,DELETE) +//KYU08W01 DD SYSOUT=A +//KYU08W02 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS) +``` + +### KYUJ060 — 支給データ結合 + +```jcl +//KYUJ060 JOB (ACCT),'支給データ結合',CLASS=A +//* +//*--- パラメータ定義 --- +//SETPARM SET YEARMONTH=202605 +//* +//*===================================================================== +//* STEP060: MERGE(Type 35 給与 + 賞与) +//*===================================================================== +//STEP060 EXEC PGM=KYU09MRG,PARM='YEARMONTH=&YEARMONTH' +//KYU09M99 DD UNIT=SYSDA,SPACE=(CYL,(10,5)) +//KYU09M01 DD DSN=SALARY-NET.DAT,DISP=SHR +//KYU09M02 DD DSN=BONUS-DATA.DAT,DISP=SHR +//KYU09W01 DD DSN=PAYMENT-DATA.DAT,DISP=(NEW,CATLG,DELETE) +//KYU09W02 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS) +``` + +### 実行順序 + +本サブシステムのJOBは、A・Bサブシステムの出力を入力とする。 +JCL起動時は以下の順序を保証すること。 + +1. Aサブシステム KINJ080(KIN08DBU)→ ABSENCE-SUMMARY生成 +2. Bサブシステム ZANJ025(ZAN06UPD)→ DB2 OVT-MONTHLY確定 +3. **KYUJ010**(マスタ取込、任意タイミング。初回のみ必須) +4. **KYUJ020** → **KYUJ030** → **KYUJ040**(またはKYUJ050)→ **KYUJ060**(順次実行) +5. KYUJ040 と KYUJ050 は SALARY-NET.DAT を `DISP=SHR` で参照するため並行実行可能 + +--- + +## プログラム詳細 + +### KYU01CVT(社員マスタCSV→FB変換処理) — Type 21 + +| 項目 | 内容 | +|------|------| +| **プログラム名称** | 社員マスタCSV→FB変換処理 | +| **PGMパターン** | CSV→FB変換(改行あり)+ 内部処理25(SUB04CHK数値チェック) | +| **SORT前処理** | 不要 | +| **入力** | EMP-MASTER.CSV(可変長/改行あり) | +| **出力** | EMP-RECORD(80B 固定長)/ ERROR-LOG(VB) | +| **件数変化** | N件(CSV行)→ 正常M件 + 異常(N-M)件 | +| **使用共通関数** | SUB01DAT, SUB02MSG, SUB03END, SUB04CHK | +| **該当プログラム分類** | No.21 CSV→FB変換(改行あり) | + +**入力CSV形式:** + +``` +EMP001,山田 太郎,01,01,001,300000,1800,2,0 +EMP002,佐藤 花子,02,01,002,280000,1700,1,0 +``` + +- 引用符(`"`)で囲まれた社員名フィールド内に改行を含む場合は複数行読込 +- コメント行(先頭`#`)は読み飛ばし + +**機能:** + +1. `OPEN INPUT` CSVファイル(VB編成・可変長) +2. `READ` で1行取得。AT END まで繰り返し +3. 行内の引用符 `"` の出現状態を追跡し、引用符内改行とレコード境界改行を区別: + - `WS-IN-QUOTE` フラグが FALSE かつ行内に奇数個の `"` → 引用符内続行モード開始 + - `WS-IN-QUOTE` が TRUE かつ行内に奇数個の `"` → 引用符内終了 + - 引用符内継続行は連結用ワーク領域(WS-CSV-ACCUM)に蓄積 +4. 完全な1レコード分のデータが揃った時点で、`INSPECT CONVERTING X"0D" X"0A" BY SPACE` で引用符内改行をスペース変換 +5. `UNSTRING DELIMITED BY ',' INTO ... COUNT IN WS-FIELD-COUNT` でCSV分解+項目数カウント +6. SUB04CHK で社員番号(8桁)・時給(7桁)の数値妥当性チェック(内部処理25に該当) +7. 社員番号空チェック:`INSPECT TALLYING WS-TALLY FOR LEADING SPACES` → 全桁SPACEならエラー +8. 正常レコードは EMP-RECORD(80B)に WRITE +9. エラー時は ERROR-LOG に書出し + +#### DECLARATIVES(ファイルエラー処理) + +`DECLARATIVES` 宣言部でファイル入出力エラーを捕捉し、共通エラー処理に制御を移す。 + +``` +DECLARATIVES. +KYU01CVT-ERR SECTION. + USE AFTER ERROR PROCEDURE ON KYU01R01. +KYU01CVT-ERR-PROC. + PERFORM 9999-ABEND. + . +KYU01W01-ERR SECTION. + USE AFTER ERROR PROCEDURE ON KYU01W01. +KYU01W01-ERR-PROC. + PERFORM 9999-ABEND. + . +END DECLARATIVES. +``` + +**新規カバレッジ構文:** + +| 構文 | 用途 | +|------|------| +| INSPECT CONVERTING | 引用符内改行コード→SPACE変換 | +| UNSTRING COUNT IN | CSV分解時の項目数検証 | +| IF ALPHABETIC | 社員名の英字判定 | +| DECLARATIVES | ファイル入出力エラー処理の宣言部 | +| USE AFTER ERROR | ファイルエラー時の共通エラー処理手続き | + +--- + +### KYU02REG(社員マスタDB2登録処理) — Type 09 + +| 項目 | 内容 | +|------|------| +| **プログラム名称** | 社員マスタDB2登録処理 | +| **PGMパターン** | DB更新 | +| **SORT前処理** | 不要(KYU01CVTの出力を入力) | +| **入力** | EMP-RECORD(80B 固定長) | +| **出力** | DB2 EMP-MASTER(INSERT/UPSERT)/ ERROR-LOG(VB) | +| **件数変化** | N件 → DB2登録N件(全件) | +| **使用共通関数** | SUB02MSG, SUB03END | +| **該当プログラム分類** | No.09 DB更新 | + +**機能:** + +1. `OPEN INPUT` EMP-RECORD(80B 固定長) +2. `READ` で1件取得。AT END まで繰り返し +3. `EXEC SQL INSERT INTO EMP-MASTER ...` でDB2登録 +4. SQLCODE = -803(重複)の場合、`EXEC SQL UPDATE` で更新 +5. エラー時は ERROR-LOG に書出し + +**新規カバレッジ構文:** + +| 構文 | 用途 | +|------|------| +| EXEC SQL INSERT | 社員マスタ新規登録 | +| SQLCODE判定によるUPSERT | 重複時UPDATE | +| CLOSE WITH LOCK | 入力ファイルのロッククローズ | + +--- + +### KYU03AGG(欠勤集約処理) — Type 08 + +| 項目 | 内容 | +|------|------| +| **プログラム名称** | 欠勤集約処理 | +| **PGMパターン** | キーブレイク(集約) | +| **SORT前処理** | JCL SORT(社員番号昇順) | +| **入力** | KYU02S01(80B JCL SORT済み欠勤データ) | +| **出力** | ABSENCE-AGGREGATE(80B 社員単位)/ ERROR-LOG(VB) | +| **件数変化** | M件(欠勤レコード)→ N件(社員数、M≧N) | +| **使用共通関数** | SUB02MSG, SUB03END | +| **該当プログラム分類** | No.08 キーブレイク(集約) | + +**機能:** + +同一社員内の複数欠勤レコードを集約する。 + +``` +PERFORM UNTIL WS-EOF = '1' + READ KYU08R01 INTO WS-ABSENCE-REC + AT END SET WS-EOF TO TRUE + END-READ + IF NOT WS-EOF + IF WS-PREV-EMP-ID = WS-EMP-ID + ADD 1 TO WS-ABSENT-COUNT + ADD WS-ABSENT-HOURS TO WS-TOTAL-ABSENT-HOURS + ELSE + PERFORM 2000-WRITE-AGGREGATE + MOVE WS-EMP-ID TO WS-PREV-EMP-ID + INITIALIZE WS-TOTAL-ABSENT-HOURS + WS-ABSENT-COUNT + REPLACING NUMERIC DATA BY ZERO + MOVE 1 TO WS-ABSENT-COUNT + MOVE WS-ABSENT-HOURS TO WS-TOTAL-ABSENT-HOURS + END-IF + END-IF +END-PERFORM. +PERFORM 2000-WRITE-AGGREGATE. +``` + +**新規カバレッジ構文:** + +| 構文 | 用途 | +|------|------| +| INITIALIZE REPLACING NUMERIC DATA BY ZERO | 集約カウンタの型別初期化 | +| END-ADD | ADD文の明示的スコープターミネータ | + +--- + +### KYU04CAL(給与計算処理) — Type 32 + +| 項目 | 内容 | +|------|------| +| **プログラム名称** | 給与計算処理 | +| **PGMパターン** | 1:N+キーブレイク(同キー) | +| **SORT前処理** | 不要(KYU03AGGの出力を入力) | +| **入力** | ABSENCE-AGGREGATE(80B)/ PAY-PARAM(80B)/ EMP-MASTER(DB2参照)/ OVT-MONTHLY(DB2 Bサブシステム参照) | +| **出力** | SALARY-DETAIL(240B)/ ERROR-LOG(VB) | +| **件数変化** | N件(社員)→ N件(社員) | +| **使用共通関数** | SUB01DAT, SUB02MSG, SUB03END | +| **該当プログラム分類** | No.32 1:N+キーブレイク(同キー) | + +**機能:** + +#### Step1:社員単位の給与計算 + +ABSENCE-AGGREGATE(社員単位1件)を読込み、DB2 EMP-MASTER・OVT-MONTHLY を補完参照する。 + +``` +PERFORM UNTIL WS-EOF = '1' + READ KYU04R02 INTO WS-ABSENCE-AGG + AT END SET WS-EOF TO TRUE + END-READ + IF NOT WS-EOF + PERFORM 2100-CALCULATE-SALARY + END-IF +END-PERFORM. +``` + +#### Step2:給与計算 + +1. **EMP-MASTER(DB2 SELECT)** で基本給・時給・扶養人数を取得 +2. **OVT-MONTHLY(DB2 SELECT WHERE EMP-ID / YEAR-MONTH)** で残業時間を取得 +3. 欠勤控除額 = HOURLY-RATE × 欠勤時間合計 +4. 時間外手当 = HOURLY-RATE × 残業時間 × OVERTIME-RATE(1.25) +5. **支給総額 = 基本給 + 各種手当 - 欠勤控除** + +``` +EXEC SQL + SELECT BASE-SALARY, HOURLY-RATE, DEPENDENT-COUNT + INTO :WS-BASE-SALARY, :WS-HOURLY-RATE, :WS-DEPENDENT + FROM EMP-MASTER + WHERE EMP-ID = :WS-EMP-ID +END-EXEC. + +IF SQLCODE = 0 + COMPUTE WS-ABSENT-DEDUCT ROUNDED = + WS-HOURLY-RATE * WS-TOTAL-ABSENT-HOURS + ON SIZE ERROR + MOVE ZERO TO WS-ABSENT-DEDUCT + PERFORM 9999ABDSOR + END-COMPUTE + COMPUTE WS-OVT-AMOUNT ROUNDED = + WS-HOURLY-RATE * WS-OVT-HOURS * WS-OVERTIME-RATE + ON SIZE ERROR + MOVE ZERO TO WS-OVT-AMOUNT + PERFORM 9999ABDSOR + END-COMPUTE + COMPUTE WS-GROSS-PAYMENT = + WS-BASE-SALARY + WS-OVT-AMOUNT - WS-ABSENT-DEDUCT + END-COMPUTE +END-IF. +``` + +#### Step3:複合条件分岐(EVALUATE ALSO) + +勤怠区分と手当種別の組み合わせで支給額を判定する。 + +``` +EVALUATE WS-ALLOWANCE-TYPE ALSO WS-ATTEND-TYPE + WHEN 'OVT' ALSO 'W' + COMPUTE WS-AMOUNT ROUNDED = + WS-HOURLY-RATE * WS-OVT-HOURS * 1.25 + WHEN 'OVT' ALSO 'H' + COMPUTE WS-AMOUNT ROUNDED = + WS-HOURLY-RATE * WS-OVT-HOURS * 1.35 + WHEN 'LATE' ALSO ANY + COMPUTE WS-AMOUNT ROUNDED = + WS-HOURLY-RATE * WS-LATE-HOURS * 0.50 + WHEN OTHER + MOVE ZERO TO WS-AMOUNT +END-EVALUATE. +``` + +**新規カバレッジ構文:** + +| 構文 | 用途 | +|------|------| +| EVALUATE ALSO | 勤怠区分×手当種別の複合分岐 | +| OCCURS DESCENDING KEY | 手当テーブルの高額順整列 | +| COMPUTE ROUNDED ON SIZE ERROR | 給与計算の桁あふれ処理 | +| END-ADD / END-DIVIDE / END-SUBTRACT | 明示的スコープターミネータ | + +--- + +### KYU05DED(控除計算処理) — Type 23 + +| 項目 | 内容 | +|------|------| +| **プログラム名称** | 控除計算処理 | +| **PGMパターン** | SELECT条件 | +| **SORT前処理** | 不要 | +| **入力** | SALARY-DETAIL(240B)/ TAX-TABLE(DB2)/ INSURANCE-TABLE(DB2) | +| **出力** | SALARY-NET(200B)/ ERROR-LOG(VB) | +| **件数変化** | N件 → N件(1対1) | +| **使用共通関数** | SUB02MSG, SUB03END | +| **該当プログラム分類** | No.23 SELECT条件 | + +**機能:** + +#### Step1:課税所得計算 + +``` +COMPUTE WS-TAXABLE-INCOME = + WS-GROSS-PAYMENT - WS-INSURANCE - WS-BASIC-DEDUCTION +END-COMPUTE. +``` + +#### Step2:税率取得(EXEC SQL SELECT ... BETWEEN) + +``` +EXEC SQL + SELECT TAX-RATE, DEDUCTION + INTO :WS-TAX-RATE, :WS-DEDUCTION + FROM TAX-TABLE + WHERE :WS-TAXABLE-INCOME BETWEEN TAX-FROM AND TAX-TO +END-EXEC. + +IF SQLCODE = 0 + COMPUTE WS-INCOME-TAX ROUNDED = + WS-TAXABLE-INCOME * WS-TAX-RATE - WS-DEDUCTION + END-COMPUTE +ELSE + MOVE ZERO TO WS-INCOME-TAX +END-IF. +``` + +#### Step3:社会保険料計算(SEARCH ALL) + +保険料率テーブル(WORKING-STORAGE)を事前LOADし、SEARCH ALLで検索する。 + +``` +01 INSURANCE-WORK. + 05 IW-COUNT PIC 9(4). + 05 IW-ENTRY OCCURS 1 TO 200 TIMES + DEPENDING ON IW-COUNT + ASCENDING KEY IS IW-INCOME-FROM + INDEXED BY IW-IDX. + 10 IW-INCOME-FROM PIC 9(9). + 10 IW-INCOME-TO PIC 9(9). + 10 IW-HEALTH-RATE PIC V9(6). + 10 IW-PENSION-RATE PIC V9(6). + 05 IW-END. +``` + +- 初期処理で DB2 INSURANCE-TABLE を全件 SELECT → WORKING-STORAGE に LOAD +- `SEARCH ALL` で該当所得範囲の保険料率を検索 + +``` +SEARCH ALL IW-ENTRY + AT END + PERFORM 9999ABDSOR + WHEN IW-INCOME-FROM(IW-IDX) <= WS-TAXABLE-INCOME + AND WS-TAXABLE-INCOME <= IW-INCOME-TO(IW-IDX) + COMPUTE WS-INSURANCE ROUNDED = + WS-TAXABLE-INCOME * + (IW-HEALTH-RATE(IW-IDX) + IW-PENSION-RATE(IW-IDX)) + END-COMPUTE +END-SEARCH. +``` + +#### Step4:差引支給額計算 + +``` +COMPUTE WS-NET-PAYMENT = + WS-GROSS-PAYMENT - WS-INCOME-TAX + - WS-INSURANCE + - WS-RESIDENT-TAX +END-COMPUTE. +``` + +**新規カバレッジ構文:** + +| 構文 | 用途 | +|------|------| +| EXEC SQL SELECT ... BETWEEN | 課税所得範囲検索 | +| SEARCH ALL(複数WHEN複合条件) | IW-INCOME-FROM~IW-INCOME-TO範囲判定 | +| 88-level VALUES複数値 | 保険料率テーブルの境界値判定 | + +--- + +### KYU06UPD(給与計算結果DB2更新処理) — Type 09 + +| 項目 | 内容 | +|------|------| +| **プログラム名称** | 給与計算結果DB2更新処理 | +| **PGMパターン** | DB更新 | +| **SORT前処理** | 不要(KYU05DEDの出力を入力) | +| **入力** | SALARY-NET(200B) | +| **出力** | DB2 SALARY-RESULTS(INSERT/UPSERT)/ ERROR-LOG(VB) | +| **件数変化** | N件 → DB2登録N件(全件) | +| **使用共通関数** | SUB02MSG, SUB03END | +| **該当プログラム分類** | No.09 DB更新 | + +**機能:** + +1. `OPEN INPUT` SALARY-NET(200B) +2. `READ` で1件取得。AT END まで繰り返し +3. `EXEC SQL INSERT INTO SALARY-RESULTS ...` で登録 + +``` +EXEC SQL + INSERT INTO SALARY-RESULTS + (EMP-ID, YEAR-MONTH, GROSS-PAYMENT, + INCOME-TAX, INSURANCE, RESIDENT-TAX, + NET-PAYMENT, UPDATED-AT) + VALUES + (:WS-EMP-ID, :WS-YEAR-MONTH, :WS-GROSS-PAYMENT, + :WS-INCOME-TAX, :WS-INSURANCE, :WS-RESIDENT-TAX, + :WS-NET-PAYMENT, CURRENT TIMESTAMP) +END-EXEC. +``` + +4. SQLCODE = -803(重複)の場合、`EXEC SQL UPDATE` で更新 + +``` +IF SQLCODE = -803 + EXEC SQL + UPDATE SALARY-RESULTS SET + GROSS-PAYMENT = :WS-GROSS-PAYMENT, + INCOME-TAX = :WS-INCOME-TAX, + INSURANCE = :WS-INSURANCE, + RESIDENT-TAX = :WS-RESIDENT-TAX, + NET-PAYMENT = :WS-NET-PAYMENT, + UPDATED-AT = CURRENT TIMESTAMP + WHERE EMP-ID = :WS-EMP-ID + AND YEAR-MONTH = :WS-YEAR-MONTH + END-EXEC +END-IF. +``` + +**新規カバレッジ構文:** + +| 構文 | 用途 | +|------|------| +| EXEC SQL INSERT | SALARY-RESULTS新規登録 | +| SQLCODE判定によるUPSERT | 再計算時の重複UPDATE | + +--- + +### KYU07DIV(部門別分割出力処理) — Type 10 + +| 項目 | 内容 | +|------|------| +| **プログラム名称** | 部門別分割出力処理 | +| **PGMパターン** | 50分割 | +| **SORT前処理** | JCL SORT(部署コード昇順) | +| **入力** | KYU04S01(200B JCL SORT済み)/ SYSIN(制御カード) | +| **出力** | DEPT-OUT-01〜50(各200B) | +| **件数変化** | N件 → 各部署合計N件(全社員) | +| **使用共通関数** | SUB02MSG, SUB03END | +| **該当プログラム分類** | No.10 50分割 | + +**機能:** + +1. `READ SYSIN` で出力対象部署コード一覧を取得(省略時は全50部署) +2. JCL SORT済みのため部署コード順に入力。部署コードが変わるたびにファイルを切替 +3. 部署コード単位でファイルを開閉し、常に1ファイルのみ OPEN 状態を保つ + +``` +PERFORM UNTIL WS-EOF = '1' + READ KYU07R01 INTO WS-SALARY-REC + AT END SET WS-EOF TO TRUE + END-READ + IF NOT WS-EOF AND WS-DEPT-CODE IN 対象部署一覧 + IF WS-PREV-DEPT > SPACES + AND WS-PREV-DEPT NOT = WS-DEPT-CODE + PERFORM 3000-CLOSE-FILE + END-IF + IF WS-DEPT-CODE NOT = WS-PREV-DEPT + PERFORM 3100-OPEN-FILE + END-IF + EVALUATE WS-DEPT-CODE + WHEN '01' WRITE DEPT01-REC FROM WS-SALARY-REC + WHEN '02' WRITE DEPT02-REC FROM WS-SALARY-REC + ... + WHEN '50' WRITE DEPT50-REC FROM WS-SALARY-REC + WHEN OTHER CONTINUE + END-EVALUATE + MOVE WS-DEPT-CODE TO WS-PREV-DEPT + END-IF +END-PERFORM. +IF WS-PREV-DEPT > SPACES + PERFORM 3000-CLOSE-FILE +END-IF. +``` + +4. 全ファイル終了後、最終部署ファイルを `CLOSE WITH LOCK` で確定 + +**新規カバレッジ構文:** + +| 構文 | 用途 | +|------|------| +| 50分割(部署別1ファイルずつOPEN/CLOSE切替) | 部署別出力(常時1 OPEN でリソース節約) | +| CLOSE WITH LOCK | 出力ファイルのロッククローズ | +| READ SYSIN | 制御カードによる出力対象部署指定(内部処理28) | + +--- + +### KYU08PRI(給与明細印刷処理) — Type 04 + +| 項目 | 内容 | +|------|------| +| **プログラム名称** | 給与明細印刷処理 | +| **PGMパターン** | レイアウト編集のみ(GETPUT)+ LINAGEページ制御 | +| **SORT前処理** | JCL SORT(社員番号昇順) | +| **入力** | KYU05S01(200B) | +| **出力** | PAYSLIP(SYSOUT A行 200B)/ ERROR-LOG(VB) | +| **件数変化** | N件 → 1社員1ページ(Nページ) | +| **使用共通関数** | SUB01DAT, SUB02MSG, SUB03END | +| **該当プログラム分類** | No.04 レイアウト編集のみ(GETPUT) | + +**機能:** + +#### Step1:LINAGEページ定義 + +``` +FD KYU08W01 + LABEL RECORDS STANDARD + LINAGE IS 66 LINES + FOOTING IS 60 + TOP 6 + BOTTOM 6. +``` + +- 1ページ66行、先頭6行(TOP)= ヘッダ領域、最終6行(BOTTOM)= フッタ領域 + +#### Step2:明細行編集 + +``` +01 PAYSLIP-HEADER. + 05 PH-TITLE PIC X(40) VALUE + '========== 給与明細書 =========='. + 05 FILLER PIC X(10) VALUE SPACES. + 05 PH-PAGE-NO PIC Z(4)9 VALUE ZERO. + 05 FILLER PIC X(02) VALUE '頁'. + +01 PAYSLIP-DETAIL. + 05 PD-EMP-ID PIC X(08). + 05 FILLER PIC X(02) VALUE SPACES. + 05 PD-EMP-NAME PIC X(20) JUSTIFIED RIGHT. + 05 FILLER PIC X(02) VALUE SPACES. + 05 PD-BASIC-SALARY PIC Z(8)9 BLANK WHEN ZERO. + 05 FILLER PIC X(02) VALUE SPACES. + 05 PD-NET-PAYMENT PIC Z(8)9 BLANK WHEN ZERO. +``` + +#### Step3:ページ制御 + +``` +WRITE PAYSLIP-REC FROM PAYSLIP-HEADER + BEFORE ADVANCING PAGE. + +PERFORM VARYING WS-LINE FROM 1 BY 1 + UNTIL WS-LINE > WS-DETAIL-LINES + WRITE PAYSLIP-REC FROM PAYSLIP-DETAIL + BEFORE ADVANCING 1 LINE + AT END-OF-PAGE + WRITE PAYSLIP-REC FROM PAYSLIP-FOOTER + BEFORE ADVANCING PAGE + SET WS-PAGE-END TO TRUE + END-WRITE +END-PERFORM. +``` + +- `PAGE-COUNTER` 特殊レジスタで自動ページ番号管理 +- `SET UP BY` / `SET DOWN BY` で `PAGE-COUNTER` 操作 +- 社員ごとに `WRITE BEFORE ADVANCING PAGE` で改ページ + +**新規カバレッジ構文:** + +| 構文 | 用途 | +|------|------| +| FD LINAGE IS ... TOP/BOTTOM/FOOTING | 明細ページ制御 | +| WRITE BEFORE ADVANCING PAGE | 改ページ制御 | +| WRITE BEFORE ADVANCING 1 LINE | 行送り制御 | +| WRITE AT END-OF-PAGE | ページ終端検出 | +| PAGE-COUNTER | ページ番号自動計数 | +| BLANK WHEN ZERO | ゼロ金額非表示 | +| JUSTIFIED RIGHT | 右詰め編集 | +| SET UP BY / SET DOWN BY | カウンタ増減操作 | + +--- + +### KYU09MRG(支給データ結合処理) — Type 35 + +| 項目 | 内容 | +|------|------| +| **プログラム名称** | 支給データ結合処理 | +| **PGMパターン** | MERGE(複数ファイル結合) | +| **SORT前処理** | 不要(MERGE文が自ら結合) | +| **入力** | SALARY-NET(200B)/ BONUS-DATA(200B) | +| **出力** | PAYMENT-DATA(200B)/ ERROR-LOG(VB) | +| **件数変化** | N件 + M件 → (N+M)件(社員単位に統合後N件) | +| **使用共通関数** | SUB01DAT, SUB02MSG, SUB03END | +| **該当プログラム分類** | No.35 MERGE(複数ファイル結合) | + +**機能:** + +#### MERGE文によるファイル結合 + +SALARY-NET と BONUS-DATA は共に200B固定長で、社員番号(EMP-ID)が1桁目から8桁で共通。 +MERGE文で社員番号昇順に結合し、同一社員の給与レコードと賞与レコードを連続取得する。 + +``` +PROCEDURE DIVISION USING KYU-PARM. + +MAIN-MERGE SECTION. + MERGE WORK-FILE + ON ASCENDING KEY MERGE-EMP-ID + USING SALARY-FILE BONUS-FILE + OUTPUT PROCEDURE 3000-MERGE-OUTPUT + . + GOBACK. +``` + +#### OUTPUT PROCEDURE:社員単位の支給データ生成 + +MERGE結果を受け取り、同一社員内で給与(TYPE='S')と賞与(TYPE='B')のレコードを統合する。 + +``` +3000-MERGE-OUTPUT SECTION. + PERFORM WITH TEST AFTER + UNTIL WS-MERGE-EOF + RETURN WORK-FILE INTO WS-MERGE-REC + AT END SET WS-MERGE-EOF TO TRUE + END-RETURN + IF NOT WS-MERGE-EOF + MOVE MERGE-EMP-ID OF WS-MERGE-REC + TO WS-CURRENT-EMP + MOVE ZEROS TO WS-SALARY-AMOUNT + WS-BONUS-AMOUNT + PERFORM UNTIL WS-CURRENT-EMP + NOT = MERGE-EMP-ID OF WS-MERGE-REC + IF WS-RECORD-TYPE = 'S' + MOVE WS-PAY-AMOUNT TO WS-SALARY-AMOUNT + ELSE + MOVE WS-PAY-AMOUNT TO WS-BONUS-AMOUNT + END-IF + RETURN WORK-FILE INTO WS-MERGE-REC + AT END + MOVE HIGH-VALUES TO MERGE-EMP-ID + EXIT PERFORM + END-RETURN + END-PERFORM + ADD WS-SALARY-AMOUNT TO WS-BONUS-AMOUNT + GIVING WS-TOTAL-PAYMENT + WRITE PAYMENT-REC FROM WS-PAYMENT-DATA + END-IF + END-PERFORM. +``` + +**新規カバレッジ構文:** + +| 構文 | 用途 | +|------|------| +| MERGE文(USING複数ファイル) | 給与+賞与の社員番号昇順結合 | +| MERGE ... OUTPUT PROCEDURE | MERGE結果の後処理 | +| RETURN ... AT END | MERGE結果レコード取得 | +| ENTRY | 代替エントリポイント | + +--- + +## レコード構成 + +### EMP-RECORD(80B) — KYU01CVT出力 + +| # | 項目 | 名称 | 開始 | 長さ | 属性 | 備考 | +|---|------|------|------|------|------|------| +| 1 | 社員番号 | ER-EMP-ID | 1 | 8 | X(8) | | +| 2 | 社員名 | ER-EMP-NAME | 9 | 40 | X(40) | | +| 3 | 部署コード | ER-DEPT-CODE | 49 | 2 | X(2) | | +| 4 | 地域コード | ER-REGION-CODE | 51 | 2 | X(2) | | +| 5 | 社員区分コード | ER-CATEGORY-CODE | 53 | 3 | X(3) | | +| 6 | 基本給 | ER-BASE-SALARY | 56 | 9 | 9(9) | | +| 7 | 時給 | ER-HOURLY-RATE | 65 | 7 | 9(7) | | +| 8 | 扶養人数 | ER-DEPENDENT-COUNT | 72 | 2 | 9(2) | | +| 9 | ステータス | ER-STATUS | 74 | 1 | X(1) | | +| 10 | 予備 | ER-FILLER | 75 | 6 | X(6) | | + +### ABSENCE-AGGREGATE(80B) — KYU03AGG出力 + +| # | 項目 | 名称 | 開始 | 長さ | 属性 | 備考 | +|---|------|------|------|------|------|------| +| 1 | 社員番号 | AA-EMP-ID | 1 | 8 | X(8) | | +| 2 | 対象年月 | AA-YEAR-MONTH | 9 | 6 | X(6) | YYYYMM | +| 3 | 欠勤時間合計 | AA-TOTAL-ABSENT-HOURS | 15 | 5 | 9(4)V9(1) | | +| 4 | 欠勤回数 | AA-ABSENT-COUNT | 20 | 2 | 9(2) | | +| 5 | 予備 | AA-FILLER | 22 | 58 | X(58) | | + +### SALARY-DETAIL(240B) — KYU04CAL出力 + +| # | 項目 | 名称 | 開始 | 長さ | 属性 | 備考 | +|---|------|------|------|------|------|------| +| 1 | 社員番号 | SD-EMP-ID | 1 | 8 | X(8) | | +| 2 | 社員名 | SD-EMP-NAME | 9 | 40 | X(40) | | +| 3 | 部署コード | SD-DEPT-CODE | 49 | 2 | X(2) | | +| 4 | 基本給 | SD-BASIC-SALARY | 51 | 9 | 9(9) | | +| 5 | 時間外手当 | SD-OVT-AMOUNT | 60 | 9 | 9(9) | | +| 6 | 休日手当 | SD-HOLIDAY-AMOUNT | 69 | 9 | 9(9) | | +| 7 | 欠勤控除 | SD-ABSENT-DEDUCT | 78 | 9 | 9(9) | | +| 8 | 支給総額 | SD-GROSS-PAYMENT | 87 | 9 | 9(9) | | +| 9 | 残業時間 | SD-OVT-HOURS | 96 | 5 | 9(4)V9(1) | | +| 10 | 欠勤時間 | SD-ABSENT-HOURS | 101 | 5 | 9(4)V9(1) | | +| 11 | 勤怠区分 | SD-ATTEND-TYPE | 106 | 1 | X(1) | W=平日残業 / H=休日残業 | +| 12 | 手当種別 | SD-ALLOWANCE-TYPE | 107 | 3 | X(3) | OVT=残業 / LATE=遅刻 | +| 13 | 予備 | SD-FILLER | 110 | 131 | X(131) | | + +### SALARY-NET(200B) — KYU05DED出力 + +| # | 項目 | 名称 | 開始 | 長さ | 属性 | 備考 | +|---|------|------|------|------|------|------| +| 1 | 社員番号 | SN-EMP-ID | 1 | 8 | X(8) | MERGEキー | +| 2 | レコード種別 | SN-REC-TYPE | 9 | 1 | X(1) | S=給与 / B=賞与 | +| 3 | 社員名 | SN-EMP-NAME | 10 | 40 | X(40) | | +| 4 | 部署コード | SN-DEPT-CODE | 50 | 2 | X(2) | | +| 5 | 地域コード | SN-REGION-CODE | 52 | 2 | X(2) | | +| 6 | 社員区分コード | SN-CATEGORY-CODE | 54 | 3 | X(3) | | +| 7 | 支給総額 | SN-GROSS-PAYMENT | 57 | 9 | 9(9) | | +| 8 | 源泉所得税 | SN-INCOME-TAX | 66 | 9 | 9(9) | | +| 9 | 社会保険料 | SN-INSURANCE | 75 | 9 | 9(9) | | +| 10 | 住民税 | SN-RESIDENT-TAX | 84 | 9 | 9(9) | | +| 11 | 差引支給額 | SN-NET-PAYMENT | 93 | 9 | 9(9) | | +| 12 | 課税所得 | SN-TAXABLE-INCOME | 102 | 9 | 9(9) | | +| 13 | 支給額 | SN-PAY-AMOUNT | 111 | 9 | 9(9) | 汎用(給与/賞与) | +| 14 | 予備 | SN-FILLER | 120 | 81 | X(81) | | + +> BONUS-DATA も同一レイアウト(200B)。レコード種別 `SN-REC-TYPE` = 'B'、支給額 `SN-PAY-AMOUNT` に賞与額を格納。 + +### DEPT-OUT-01〜50(各200B) — KYU07DIV出力 + +SALARY-NET と同一レイアウト(200B)。部署コードに応じて振り分け出力。 + +### PAYSLIP(200B) — KYU08PRI出力(印刷イメージ) + +| # | 項目 | 名称 | 開始 | 長さ | 属性 | 備考 | +|---|------|------|------|------|------|------| +| 1 | 社員番号 | PS-EMP-ID | 1 | 8 | X(8) | | +| 2 | FILLER | PS-SP1 | 9 | 2 | X(2) | 空白 | +| 3 | 社員名 | PS-EMP-NAME | 11 | 20 | X(20) | JUSTIFIED RIGHT | +| 4 | FILLER | PS-SP2 | 31 | 2 | X(2) | 空白 | +| 5 | 基本給 | PS-BASIC-SALARY | 33 | 9 | Z(8)9 | BLANK WHEN ZERO | +| 6 | FILLER | PS-SP3 | 42 | 2 | X(2) | 空白 | +| 7 | 差引支給額 | PS-NET-PAYMENT | 44 | 9 | Z(8)9 | BLANK WHEN ZERO | +| 8 | FILLER | PS-SP4 | 53 | 2 | X(2) | 空白 | +| 9 | ページヘッダ | PS-PAGE-TITLE | 55 | 40 | X(40) | LINAGE制御用 | +| 10 | 予備 | PS-FILLER | 95 | 106 | X(106) | | + +### PAYMENT-DATA(200B) — KYU09MRG出力 + +| # | 項目 | 名称 | 開始 | 長さ | 属性 | 備考 | +|---|------|------|------|------|------|------| +| 1 | 社員番号 | PD-EMP-ID | 1 | 8 | X(8) | | +| 2 | 支給区分 | PD-PAY-TYPE | 9 | 1 | X(1) | S=給与 / B=賞与 / T=合計 | +| 3 | 支給額 | PD-AMOUNT | 10 | 9 | 9(9) | | +| 4 | 振込銀行コード | PD-BANK-CODE | 19 | 4 | X(4) | | +| 5 | 振込口座番号 | PD-ACCOUNT-NO | 23 | 8 | 9(8) | | +| 6 | 予備 | PD-FILLER | 31 | 170 | X(170) | | + +--- + +## 新規プログラムタイプカバレッジ一覧(10種) + +| No. | 名称 | 分類 | 対応プログラム | カバレッジ(現状→目標) | +|:---:|------|:----:|:--------------:|:---------------------:| +| 04 | レイアウト編集のみ(GETPUT) | 编辑 | KYU08PRI | ◎(既存) | +| 08 | キーブレイク(集約) | key切 | KYU03AGG | × → ◎ | +| 09 | DB更新 | 数据库 | KYU02REG, KYU06UPD | ◎(既存、本サブシステムで+2本) | +| 10 | 50分割 | 分割 | KYU07DIV | × → ◎ | +| 21 | CSV→FB変換(改行あり) | 文件转换 | KYU01CVT | × → ◎ | +| 23 | SELECT条件 | 数据库 | KYU05DED | × → ◎ | +| 32 | 1:N+キーブレイク(同キー) | 混合 | KYU04CAL | × → ◎ | +| 35 | MERGE(複数ファイル結合) | 排序 | KYU09MRG | × → ◎ | + +**プログラムタイプカバレッジ率:** 16/35(45.7%)→ **24/35(68.6%)** + +> 本サブシステムで新規追加するプログラムタイプは **7種**(08, 09x2, 10, 21, 23, 32, 35)。 +> 09(DB更新)は既にKIN02UPD・ZAN06UPDで◎であるが、本サブシステムでさらに2本追加し実績を拡充。 +> No.27(項目チェック半角20桁/4桁)はKYU01CVT内でSUB04CHK(内部処理25)により実装され、プログラムタイプとしては単一(21)を維持。 + +--- + +## 新規予約語カバレッジ一覧 + +| No. | 予約語 | 現状 | 目標 | プログラム | 使用コンテキスト | +|:---:|--------|:---:|:----:|-----------|----------------| +| 6 | ALPHABETIC | × | ◎ | KYU01CVT | クラス条件(社員名英字判定) | +| 8 | ALSO | △ | ◎ | KYU04CAL | EVALUATE ALSO(勤怠区分×手当種別) | +| 31 | CONVERTING | × | ◎ | KYU01CVT | INSPECT CONVERTING(引用符内改行→SPACE) | +| 34 | COUNT | × | ◎ | KYU01CVT | UNSTRING COUNT IN(項目数カウント) | +| 40 | DECLARATIVES | × | ◎ | KYU01CVT | ファイルエラー処理の宣言部 | +| 45 | DESCENDING | × | ◎ | KYU04CAL | OCCURS DESCENDING KEY(高額手当優先) | +| 50 | DOWN | × | ◎ | KYU08PRI | SET DOWN BY(ページカウンタ減少) | +| 55 | END-ADD | × | ◎ | KYU03AGG | ADD文の明示的END-ADD | +| 58 | END-DIVIDE | × | ◎ | KYU04CAL | DIVIDE文の明示的END-DIVIDE | +| 66 | END-SUBTRACT | × | ◎ | KYU05DED | SUBTRACT文の明示的END-SUBTRACT | +| 112 | NEXT | × | △ | KYU09MRG | READ NEXTの代替(MERGE RETURN使用) | +| 128 | PAGE | △ | ◎ | KYU08PRI | LINAGE PAGE句 / FD PAGE-COUNTER | +| 129 | PAGE-COUNTER | × | ◎ | KYU08PRI | 特殊レジスタ(自動ページ番号) | +| 142 | REMOVAL | × | — | — | CLOSE FOR REMOVALは今回不要 | +| 177 | UP | × | ◎ | KYU08PRI | SET UP BY(PAGE-COUNTER増加) | +| 180 | USE | × | ◎ | KYU01CVT | USE AFTER ERROR(ファイルエラー処理) | +| 183 | VALUES | × | ◎ | KYU05DED | 88-level VALUES複数値指定 | +| 193 | ENTRY | × | ◎ | KYU09MRG | 代替エントリポイント定義 | +| 194 | MERGE | × | ◎ | KYU09MRG | MERGE文(複数ファイル結合) | +| 196 | RETURN | × | ◎ | KYU09MRG | MERGE OUTPUT PROCEDUREのRETURN文 | +| 204 | BEFORE | × | ◎ | KYU08PRI | WRITE BEFORE ADVANCING | + +**予約語カバレッジ率(◎+△):** 125/205(61.0%)→ **145/205(70.7%)** +**内 ◎:** 101/205(49.3%)→ **121/205(59.0%)** + +> 前回変更で追加した DECLARATIVES / USE / SORT / RELEASE / および ADDRESS 除外の修正は、 +> 今回のパターン純化方針に伴い再編。SORT / RELEASE は KYU07DIV に COBOL SORT を使わないため削除。 + +--- + +## PICTURE記号カバレッジ拡張 + +| 記号 | 現状 | 目標 | プログラム | 使用例 | +|:----:|:----:|:----:|-----------|--------| +| ZZZ9 | × | ◎ | KYU08PRI | PIC Z(8)9 BLANK WHEN ZERO | + +--- + +## 全体サマリ + +| 指標 | 現状 | 目標(追加後) | 増分 | +|------|:----:|:--------------:|:----:| +| プログラムタイプ(35種) | 16使用 | **24使用** | **+8**(68.6%) | +| 予約語 ◎+△(205) | 125 | **145** | **+20**(70.7%) | +| 予約語 ◎(205) | 101 | **121** | **+20**(59.0%) | +| PICTURE記号(11種) | 7 | **8** | **+1** | +| COBOLプログラム数 | 20 | **29** | **+9** | diff --git a/詳細設計書/DB定義書.md b/詳細設計書/DB定義書.md index 58ddb85..34a4ecd 100644 --- a/詳細設計書/DB定義書.md +++ b/詳細設計書/DB定義書.md @@ -5,6 +5,7 @@ | No | 変更内容 | 担当者 | 変更日 | 承認者 | 備考 | |----|---------|--------|--------|--------|------| | 1 | 新規作成(全8テーブル) | AI | 2026/06/23 | | サブシステムA(6) + B(2) | +| 2 | SALARYDB 4テーブル追加 | AI | 2026/07/08 | | サブシステムC(給与計算) | --- @@ -230,3 +231,117 @@ ### 備考 - ZAN06UPDが月次集計結果をUPSERT + +--- + +# EMP-MASTER(SALARYDB) — 社員マスタ(給与計算用) + +## Layout(テーブル定義) + +### DB基本情報 + +| DB名 | DB ID | COPY ID | INDEX | +|------|-------|---------|-------| +| 給与計算DB | EMP-MASTER | KYU01REC | PK: EMP-ID | + +### カラム定義 + +| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 | +|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------| +| 1 | 社員番号 | EMP-ID | CHAR | 8 | | 8 | NOT NULL | | ✓ | | | | | +| 2 | 氏名 | EMP-NAME | VARCHAR | 40 | | 40 | NOT NULL | | | | | | | +| 3 | 部署コード | DEPT-CODE | CHAR | 2 | | 2 | NOT NULL | | | | | | | +| 4 | 地域コード | REGION-CODE | CHAR | 2 | | 2 | NOT NULL | | | | | | | +| 5 | 職種コード | CATEGORY-CODE | CHAR | 3 | | 3 | NOT NULL | | | | | | | +| 6 | 基本給 | BASE-SALARY | DECIMAL | 9 | 0 | 5 | NOT NULL | | | | | | | +| 7 | 時給 | HOURLY-RATE | DECIMAL | 7 | 0 | 4 | NOT NULL | | | | | | | +| 8 | 扶養人数 | DEPENDENT-COUNT | SMALLINT | — | | 2 | NOT NULL | | | | | | | +| 9 | ステータス | STATUS | CHAR | 1 | | 1 | NOT NULL | | | | | | '0'=在籍, '9'=退職 | +| 10 | 更新日時 | UPDATED-AT | TIMESTAMP | — | | 10 | NOT NULL | CURRENT TIMESTAMP | | | | | | + +### 備考 + +- KYU02REGがINSERT/UPSERTを実行 +- KYU04CALがSELECTで参照 + +--- + +# TAX-TABLE(SALARYDB) — 所得税率テーブル + +## Layout(テーブル定義) + +### DB基本情報 + +| DB名 | DB ID | COPY ID | INDEX | +|------|-------|---------|-------| +| 給与計算DB | TAX-TABLE | — | PK: (TAX-FROM, TAX-TO) | + +### カラム定義 + +| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 | +|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------| +| 1 | 課税下限 | TAX-FROM | DECIMAL | 9 | 0 | 5 | NOT NULL | | ✓ | | | | | +| 2 | 課税上限 | TAX-TO | DECIMAL | 9 | 0 | 5 | NOT NULL | | ✓ | | | | | +| 3 | 税率 | TAX-RATE | DECIMAL | 5 | 4 | 3 | NOT NULL | | | | | | | +| 4 | 控除額 | DEDUCTION | DECIMAL | 9 | 0 | 5 | NOT NULL | | | | | | | + +### 備考 + +- KYU05DEDがSELECT ... BETWEENで参照 +- 課税所得に対する超過累進税率 + +--- + +# INSURANCE-TABLE(SALARYDB) — 社会保険料率テーブル + +## Layout(テーブル定義) + +### DB基本情報 + +| DB名 | DB ID | COPY ID | INDEX | +|------|-------|---------|-------| +| 給与計算DB | INSURANCE-TABLE | — | PK: (INS-INCOME-FROM, INS-INCOME-TO) | + +### カラム定義 + +| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 | +|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------| +| 1 | 所得下限 | INS-INCOME-FROM | DECIMAL | 9 | 0 | 5 | NOT NULL | | ✓ | | | | | +| 2 | 所得上限 | INS-INCOME-TO | DECIMAL | 9 | 0 | 5 | NOT NULL | | ✓ | | | | | +| 3 | 健康保険料率 | INS-HEALTH-RATE | DECIMAL | 7 | 6 | 4 | NOT NULL | | | | | | | +| 4 | 厚生年金保険料率 | INS-PENSION-RATE | DECIMAL | 7 | 6 | 4 | NOT NULL | | | | | | | +| 5 | 更新日時 | UPDATED-AT | TIMESTAMP | — | | 10 | NOT NULL | CURRENT TIMESTAMP | | | | | | + +### 備考 + +- KYU05DEDが内部テーブル(SEARCH ALL)に取込んで参照 +- 被保険者負担分のみ + +--- + +# SALARY-RESULTS(SALARYDB) — 給与計算結果テーブル + +## Layout(テーブル定義) + +### DB基本情報 + +| DB名 | DB ID | COPY ID | INDEX | +|------|-------|---------|-------| +| 給与計算DB | SALARY-RESULTS | — | PK: (EMP-ID, YEAR-MONTH) | + +### カラム定義 + +| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 | +|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------| +| 1 | 社員番号 | EMP-ID | CHAR | 8 | | 8 | NOT NULL | | ✓ | | | | | +| 2 | 対象年月 | YEAR-MONTH | CHAR | 6 | | 6 | NOT NULL | | ✓ | | | | YYYYMM | +| 3 | 総支給額 | GROSS-PAYMENT | DECIMAL | 9 | 0 | 5 | NOT NULL | | | | | | | +| 4 | 源泉所得税 | INCOME-TAX | DECIMAL | 9 | 0 | 5 | NOT NULL | | | | | | | +| 5 | 社会保険料 | INSURANCE | DECIMAL | 9 | 0 | 5 | NOT NULL | | | | | | | +| 6 | 住民税 | RESIDENT-TAX | DECIMAL | 9 | 0 | 5 | NOT NULL | | | | | | | +| 7 | 差引支給額 | NET-PAYMENT | DECIMAL | 9 | 0 | 5 | NOT NULL | | | | | | | +| 8 | 更新日時 | UPDATED-AT | TIMESTAMP | — | | 10 | NOT NULL | CURRENT TIMESTAMP | | | | | | + +### 備考 + +- KYU06UPDがINSERT/UPSERTを実行 diff --git a/詳細設計書/設計レビューサインオフ_KYU.md b/詳細設計書/設計レビューサインオフ_KYU.md new file mode 100644 index 0000000..5b2dea3 --- /dev/null +++ b/詳細設計書/設計レビューサインオフ_KYU.md @@ -0,0 +1,148 @@ +# 設計レビューサインオフ(サブシステムC / KYU) + +> レビュー日: 2026-07-09 +> レビュー対象: サブシステムC(KYU01CVT〜KYU09MRG)全9プログラム +> 状態: ✅ サインオフ + +--- + +## 1. JCL vs SELECT/ASSIGN 整合性 + +### 判定: ✅ 合格 + +| JCL | DD名 | プログラム | ASSIGN先 | 一致 | +|-----|------|-----------|---------|:---:| +| KYUJ010 STEP010 | KYU01R01 | KYU01CVT | KYU01R01 | ✅ | +| KYUJ010 STEP010 | KYU01W01 | KYU01CVT | KYU01W01 | ✅ | +| KYUJ010 STEP010 | KYU01W02 | KYU01CVT | KYU01W02 | ✅ | +| KYUJ010 STEP020 | KYU02R02 | KYU02REG | KYU02R02 | ✅ | +| KYUJ010 STEP020 | KYU02W03 | KYU02REG | KYU02W03 | ✅ | +| KYUJ020 STEP021 | KYU03R01 | KYU03AGG | KYU03R01 | ✅ | +| KYUJ020 STEP021 | KYU03W01 | KYU03AGG | KYU03W01 | ✅ | +| KYUJ020 STEP021 | KYU03W02 | KYU03AGG | KYU03W02 | ✅ | +| KYUJ020 STEP022 | KYU04R02 | KYU04CAL | KYU04R02 | ✅ | +| KYUJ020 STEP022 | KYU04R03 | KYU04CAL | KYU04R03 | ✅ | +| KYUJ020 STEP022 | KYU04W03 | KYU04CAL | KYU04W03 | ✅ | +| KYUJ020 STEP022 | KYU04W04 | KYU04CAL | KYU04W04 | ✅ | +| KYUJ030 STEP030 | KYU05R01 | KYU05DED | KYU05R01 | ✅ | +| KYUJ030 STEP030 | KYU05W01 | KYU05DED | KYU05W01 | ✅ | +| KYUJ030 STEP030 | KYU05W02 | KYU05DED | KYU05W02 | ✅ | +| KYUJ030 STEP031 | KYU06R02 | KYU06UPD | KYU06R02 | ✅ | +| KYUJ030 STEP031 | KYU06W03 | KYU06UPD | KYU06W03 | ✅ | +| KYUJ040 STEP040 | KYU07R01 | KYU07DIV | KYU07R01 | ✅ | +| KYUJ040 STEP040 | KYU07D01〜D50 | KYU07DIV | KYU07D01〜D50 | ✅ | +| KYUJ040 STEP040 | KYU07SYS | KYU07DIV | KYU07SYS | ✅ | +| KYUJ040 STEP040 | KYU07W99 | KYU07DIV | KYU07W99 | ✅ | +| KYUJ050 STEP050 | KYU08R01 | KYU08PRI | KYU08R01 | ✅ | +| KYUJ050 STEP050 | KYU08W01 | KYU08PRI | KYU08W01 | ✅ | +| KYUJ050 STEP050 | KYU08W02 | KYU08PRI | KYU08W02 | ✅ | +| KYUJ060 STEP060 | KYU09M01 | KYU09MRG | KYU09M01 | ✅ | +| KYUJ060 STEP060 | KYU09M02 | KYU09MRG | KYU09M02 | ✅ | +| KYUJ060 STEP060 | KYU09M99 | KYU09MRG | KYU09M99 | ✅ | +| KYUJ060 STEP060 | KYU09W01 | KYU09MRG | KYU09W01 | ✅ | +| KYUJ060 STEP060 | KYU09W02 | KYU09MRG | KYU09W02 | ✅ | + +全29 DD名がJCLとASSIGNで一致。前回修正済み。 + +--- + +## 2. Sort-key 条件整合性 + +### 判定: ✅ 合格 + +| プログラム | JCL SORT条件 | 設計書記載 | 一致 | +|-----------|-------------|-----------|:---:| +| KYU03AGG | SORT FIELDS=(1,8,CH,A) | 社員番号(1-8桁)昇順 | ✅ | +| KYU07DIV | SORT FIELDS=(50,2,CH,A) | 部署コード(50-51桁)昇順 | ✅ | +| KYU08PRI | SORT FIELDS=(1,8,CH,A) | 社員番号(1-8桁)昇順 | ✅ | +| KYU09MRG | MERGE ON ASCENDING KEY EMP-ID | 社員番号昇順(MERGE文内部) | ✅ | + +JCL SORTステップ(STEP020S/STEP040S/STEP050S)とプログラム前提条件の一致を確認。 + +--- + +## 3. COPY-book 整合性 + +### 判定: ⚠️ 条件付き合格(軽微な問題1件) + +#### 3.1 レコード長検算 + +| COPY書式 | 用途 | 計算長 | 設計書記載 | 一致 | +|---------|------|:-----:|:---------:|:---:| +| KYU01REC | EMP-RECORD (W01) | 80B | 80B | ✅ | +| KYU02REC | ABSENCE-AGGREGATE (W01) | 80B | 80B | ✅ | +| KYU03REC | SALARY-DETAIL (W03) | 240B | 240B | ✅ | +| KYU04REC | SALARY-NET (W01/D01〜50/M01/M02) | 200B | 200B | ✅ | +| KYU05REC | PAYSLIP (W01) | 200B | 200B | ✅ | +| KYU06REC | PAYMENT-DATA (W01) | 200B | 200B | ✅ | +| KYU99REC | ERROR-LOG (W02/W03/W04/W99) | 200B(VB) | 200B | ✅ | + +#### 3.2 ファイル連携レイアウト一致 + +| 出力元 | 出力COPY | 入力先 | 入力COPY | 一致 | +|--------|---------|--------|---------|:---:| +| KYU01CVT(W01) | KYU01REC | KYU02REG(R02) | KYU01REC | ✅ | +| KYU03AGG(W01) | KYU02REC | KYU04CAL(R02) | KYU02REC | ✅ | +| KYU04CAL(W03) | KYU03REC | KYU05DED(R01) | KYU03REC | ✅ | +| KYU05DED(W01) | KYU04REC | KYU06UPD(R02) / KYU07DIV(R01) / KYU08PRI(R01) / KYU09MRG(M01) | KYU04REC | ✅ | +| KYU08PRI(W01) | KYU05REC | —(印刷出力) | — | ✅ | +| KYU09MRG(W01) | KYU06REC | —(銀行データ出力) | — | ✅ | + +#### 3.3 軽微な問題 + +| # | 内容 | 対象 | 対処 | +|---|------|------|------| +| 1 | KYU02REC.cpy 7行目: `03`の前に余分なスペース(インデント不整合) | cpy/KYU02REC.cpy:7 | 後日修正推奨(コンパイル・動作に影響なし) | + +--- + +## 4. CALL/プログラム間インターフェース + +### 判定: ⚠️ 条件付き合格(設計上の不整合1件) + +#### 4.1 CALL先一覧 + +| CALL元 | CALL先 | 設計書記載 | コード存在 | 一致 | +|--------|--------|:---------:|:---------:|:---:| +| KYU01CVT | SUB02MSG | ✅ | ✅ | ✅ | +| KYU01CVT | SUB03END | ✅ | ✅ | ✅ | +| KYU01CVT | SUB04CHK | ✅ | ✅ | ✅ | +| KYU02REG | SUB02MSG | ✅ | ✅ | ✅ | +| KYU02REG | SUB03END | ✅ | ✅ | ✅ | +| KYU03AGG | SUB02MSG | ✅ | ✅ | ✅ | +| KYU03AGG | SUB03END | ✅ | ✅ | ✅ | +| KYU04CAL | SUB01DAT | ✅ | ✅ | ✅ | +| KYU04CAL | SUB02MSG | ✅ | ✅ | ✅ | +| KYU04CAL | SUB03END | ✅ | ✅ | ✅ | +| KYU04CAL | SUB05TIM | ✅ | ✅ | ✅ | +| KYU05DED | SUB02MSG | ✅ | ✅ | ✅ | +| KYU05DED | SUB03END | ✅ | ✅ | ✅ | +| KYU06UPD | SUB02MSG | ✅ | ✅ | ✅ | +| KYU06UPD | SUB03END | ✅ | ✅ | ✅ | +| KYU07DIV | SUB02MSG | ✅ | ✅ | ✅ | +| KYU07DIV | SUB03END | ✅ | ✅ | ✅ | +| KYU08PRI | SUB01DAT | ✅ | ✅ | ✅ | +| KYU08PRI | SUB02MSG | ✅ | ✅ | ✅ | +| KYU08PRI | SUB03END | ✅ | ✅ | ✅ | +| KYU09MRG | SUB01DAT | ✅ | ✅ | ✅ | +| KYU09MRG | SUB02MSG | ✅ | ✅ | ✅ | +| KYU09MRG | SUB03END | ✅ | ✅ | ✅ | + +#### 4.2 設計上の不整合 + +| # | 内容 | プログラム | 設計書 | コード | 対処 | +|---|------|-----------|-------|-------|------| +| 1 | SUB01DAT呼出しの記載有無 | KYU01CVT | 1-4にSUB01DAT呼出し記載あり(運用日付取得) | SUB01DAT呼出しなし(CSV変換に運用日不要) | 設計書の方がテンプレートから過剰に記載。SUB01DATの呼出しは実際不要。**設計書を削除修正すべき** | + +--- + +## 5. サインオフ + +上記レビューの結果、全プログラムの設計とコードの整合性は確認されました。 +軽微な問題2件(COPYインデント・設計書過剰記載)は後日修正対象とし、本設計レビューはサインオフします。 + +| 判定 | 日付 | レビュー担当 | +|:---:|:---:|:-----------:| +| ✅ サインオフ | 2026-07-09 | AI (自動レビュー) | + +--- diff --git a/詳細設計書/詳細設計書_KYU01CVT.md b/詳細設計書/詳細設計書_KYU01CVT.md new file mode 100644 index 0000000..397d997 --- /dev/null +++ b/詳細設計書/詳細設計書_KYU01CVT.md @@ -0,0 +1,156 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 給与計算システム | +| 2 | プログラムID | KYU01CVT | +| 3 | プログラム名 | 社員マスタCSV→FB変換処理 | +| 4 | PGMタイプ | メイン | +| 5 | PGMパターン | CSV→FB変換(改行あり) | +| 6 | 機能概要 | CSV形式の社員マスタを読み込み、固定長80Bに変換する。 | +| 7 | | 引用符内改行をINSPECT CONVERTINGで処理。 | +| 8 | | 項目チェックはSUB04CHKで実施。 | +| 9 | | 正常:EMP-RECORD(W01)出力/異常:ERROR-LOG(W02)出力 | + +※PGMタイプ:メイン、サブ +※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 + +### 前提条件 + +| NO | 対象ファイル | 条件 | +|----|-------------|------| +| 1 | EMP-MASTER.CSV | ソート不要。CSV形式(カンマ区切り、引用符内改行あり)。コメント行(先頭#)読み飛ばし | + +### 使用ファイル一覧 + +| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | +|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| +| 1 | EMP-MASTER.CSV | R01 | KYU01R01 | I | 自前(500B) | V | | 500 | PS | CSV形式 | +| 2 | EMP-RECORD | W01 | KYU01W01 | O | KYU01REC | FB | | 80 | PS | | +| 3 | ERROR-LOG | W02 | KYU01W02 | O | KYU99REC | VB | | 200 | PS | | + +### キー項目一覧 + +| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | +|----|-----------|---------------------|-------------------------------------------| +| 1 | EMP-MASTER.CSV | なし | なし | + +### 使用モジュール一覧 + +| NO | 機能 | プログラムID | 使用COPY名 | +|----|------|-------------|-----------| +| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC | +| 2 | ABEND処理SUB | SUB03END | ZANENDAC | +| 3 | 項目チェックSUB | SUB04CHK | ZANCHKAC | + +--- + +## 処理詳細 + +``` +1.初期処理(1000ITTSOR) + 1-1.開始メッセージ出力 + 【メッセージ編集】 + メッセージ番号:1(開始メッセージ) + 1-2.コンパイル日時出力 + 【メッセージ編集】 + メッセージ番号:33(コンパイル日時) + PARM1:コンパイル日時 + PARM2:'COMPILED' + 1-3.ワークエリアの初期化 + INITIALIZE WRKARA + MOVE SPACE TO WRK-CSV-ACCUM + MOVE ZERO TO WRK-ACCUM-LEN + 1-4.使用ファイルのオープン + OPEN INPUT R01INNFIL + OPEN OUTPUT W01OUTFIL W02OUTFIL + 1-6.R01を読み込む。(1100R01INNSOR)(1回目) + +2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す) +2-1.コメント行(先頭#)はスキップ(2000MAJSOR内インライン) + WRK-CSV-LINE(1:1) = '#' の場合、次行READしてEXIT SECTION + 2-2.引用符内改行処理(2000MAJSOR内インライン) + 2-2-1.WRK-IN-QUOTEフラグを追跡し、引用符内の改行を連結用ワーク領域(WRK-CSV-ACCUM)に蓄積 + 2-2-2.引用符内奇数個の"で状態反転(WRK-QUOTE-ACTIVE / WRK-QUOTE-INACTIVE) + 2-2-3.完全な1レコード分が揃ったら、INSPECT CONVERTING X"0D"/X"0A" BY SPACEで改行→スペース変換 + 2-3.CSV分解(2100CSVUNSOR) + UNSTRING DELIMITED BY ',' INTO 各フィールド COUNT IN WS-FIELD-COUNT + 項目数≠9の場合はERROR-LOG出力 + 2-4.社員番号空チェック + INSPECT WRK-CSV-EMP-ID TALLYING FOR LEADING SPACES + 全桁SPACEの場合はERROR-LOG出力 + 2-5.項目チェック(SUB04CHK) + 2-5-1.社員番号(EMPID)数値妥当性チェック + 2-5-2.時給(NUM)数値妥当性チェック + エラー時はERROR-LOG出力 + 2-6.社員名英字チェック(IF NOT ALPHABETIC、参考判定) + 2-7.W01OUTREC編集 + MOVE CSV各フィールド→W01OUTREC該当項目 + 2-8.W01出力(WRITE W01OUTREC) + CUN-W01OUT加算 + 2-9.R01を読み込む(1100R01INNSOR)(2件目以降) + +3.終了処理(3000STPSOR) + 3-1.入出力ファイルのクローズ + 3-2.入出力件数出力メッセージ出力 + 【入力メッセージ編集】 + メッセージ番号:6(入力件数メッセージ) + PARM1:'KYU01R01' + PARM2:CUN-R01INN + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'KYU01W01' + PARM2:CUN-W01OUT + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'KYU01W02' + PARM2:CUN-W02OUT + 3-3.終了メッセージ出力 + 【メッセージ編集】 + メッセージ番号:2(終了メッセージ) +``` + +### DECLARATIVES(ファイルエラー処理) + +``` +DECLARATIVES. + USE AFTER ERROR PROCEDURE ON R01INNFIL. + PERFORM 9999ABDSOR. + USE AFTER ERROR PROCEDURE ON W01OUTFIL. + PERFORM 9999ABDSOR. + USE AFTER ERROR PROCEDURE ON W02OUTFIL. + PERFORM 9999ABDSOR. +END DECLARATIVES. +``` + +--- + +## 出力レコード定義 + +### 出力ファイル1(W01/EMP-RECORD) + +COPY書式:KYU01REC(80B FB) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | EMP-ID | CSV同項目を設定 | | +| 2 | EMP-NAME | CSV同項目を設定 | | +| 3 | DEPT-CODE | CSV同項目を設定 | | +| 4 | REGION-CODE | CSV同項目を設定 | | +| 5 | CATEGORY-CODE | CSV同項目を設定 | | +| 6 | BASE-SALARY | CSV同項目を設定 | | +| 7 | HOURLY-RATE | CSV同項目を設定 | | +| 8 | DEPENDENT-COUNT | CSV同項目を設定 | | +| 9 | STATUS | CSV同項目を設定 | | +| 10 | FILLER | SPACE固定 | | + +### 出力ファイル2(W02/ERROR-LOG) + +COPY書式:KYU99REC(VB 200B) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | ERR-CATEGORY | 'CSV-ERR'または'EMPID-ERR'で固定 | エラー区分 | +| 2 | ERR-DETAIL | STRINGで編集 | エラー内容(CSV行の先頭80B等) | diff --git a/詳細設計書/詳細設計書_KYU02REG.md b/詳細設計書/詳細設計書_KYU02REG.md new file mode 100644 index 0000000..c8c16af --- /dev/null +++ b/詳細設計書/詳細設計書_KYU02REG.md @@ -0,0 +1,146 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 給与計算システム | +| 2 | プログラムID | KYU02REG | +| 3 | プログラム名 | 社員マスタDB2登録処理 | +| 4 | PGMタイプ | メイン | +| 5 | PGMパターン | DB更新 | +| 6 | 機能概要 | EMP-RECORD(80B固定長)を読み込み、DB2 EMP-MASTERにINSERTする。 | +| 7 | | SQLCODE=-803(重複)の場合はUPDATEに切替える(UPSERT)。 | +| 8 | | エラー時はERROR-LOGに出力する。 | + +※PGMタイプ:メイン、サブ +※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 + +### 前提条件 + +| NO | 対象ファイル | 条件 | +|----|-------------|------| +| 1 | EMP-RECORD | ソート不要。KYU01CVT出力の80B固定長ファイル。社員番号昇順である必要はない | + +### 使用ファイル一覧 + +| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | +|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| +| 1 | EMP-RECORD | R02 | KYU02R02 | I | KYU01REC | FB | | 80 | PS | | +| 2 | ERROR-LOG | W03 | KYU02W03 | O | KYU99REC | VB | | 200 | PS | | +| 3 | EMP-MASTER(DB2) | — | — | — | — | — | — | — | DB2 | EXEC SQL INSERT/UPDATE | + +### キー項目一覧 + +| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | +|----|-----------|---------------------|-------------------------------------------| +| 1 | EMP-RECORD | なし | なし | + +### 使用モジュール一覧 + +| 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.ワークエリアの初期化 + INITIALIZE WRKARA + 1-4.DB接続 + EXEC SQL CONNECT TO 'data/SALARY.db' END-EXEC + 1-5.使用ファイルのオープン + OPEN INPUT R02INNFIL + OPEN OUTPUT W03OUTFIL + 1-6.R02を読み込む。(1100R02INNSOR)(1回目) + +2.主処理(2000MAJSOR)(R02を全て読み終えるまで下記を繰り返す) + 2-1.DB2ホスト変数にMOVE + MOVE R02EMP-ID〜R02STATUS → DBV-EMP-ID〜DBV-STATUS + 2-2.EXEC SQL INSERT試行(2000MAJSOR内インライン) + EXEC SQL INSERT INTO EMP-MASTER + (EMP-ID, EMP-NAME, DEPT-CODE, REGION-CODE, + CATEGORY-CODE, BASE-SALARY, HOURLY-RATE, + DEPENDENT-COUNT, STATUS, UPDATED-AT) + VALUES + (:DBV-EMP-ID, :DBV-EMP-NAME, :DBV-DEPT-CODE, + :DBV-REGION-CODE, :DBV-CATEGORY-CODE, + :DBV-BASE-SALARY, :DBV-HOURLY-RATE, + :DBV-DEPENDENT-COUNT, :DBV-STATUS, + CURRENT TIMESTAMP) + END-EXEC + 2-3.SQLCODE判定 + 2-3-1.SQLCODE = 0 → INSERT成功 + CUN-DB-INS加算、次行READ + 2-3-2.SQLCODE = -803 → 重複 + EXEC SQL UPDATE EMP-MASTER SET ... WHERE EMP-ID = :DBV-EMP-ID + SQLCODE = 0 → CUN-DB-UPD加算 + SQLCODE ≠ 0 → ERROR-LOG出力(2200ERROUTSOR) + 次行READ + 2-3-3.その他SQLエラー + ERROR-LOG出力(2200ERROUTSOR) + 次行READ + +3.終了処理(3000STPSOR) + 3-1.入出力ファイルのクローズ + 3-2.入出力件数出力メッセージ出力 + 【入力メッセージ編集】 + メッセージ番号:6(入力件数メッセージ) + PARM1:'KYU02R02' + PARM2:CUN-R02INN + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'DB-INSERT' + PARM2:CUN-DB-INS + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'DB-UPDATE' + PARM2:CUN-DB-UPD + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'KYU02W03' + PARM2:CUN-W03OUT + 3-3.終了メッセージ出力 + 【メッセージ編集】 + メッセージ番号:2(終了メッセージ) +``` + +--- + +## 出力レコード定義 + +### 出力ファイル1(W03/ERROR-LOG) + +COPY書式:KYU99REC(VB 200B) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | ERR-CATEGORY | 'DB-ERR'で固定 | エラー区分 | +| 2 | ERR-DETAIL | DBV-EMP-IDを設定 | エラー発生社員番号 | + +### DB2出力(EMP-MASTER) + +| No | カラム名 | 設定元 | 備考 | +|----|---------|--------|------| +| 1 | EMP-ID | DBV-EMP-ID | ホスト変数 | +| 2 | EMP-NAME | DBV-EMP-NAME | ホスト変数 | +| 3 | DEPT-CODE | DBV-DEPT-CODE | ホスト変数 | +| 4 | REGION-CODE | DBV-REGION-CODE | ホスト変数 | +| 5 | CATEGORY-CODE | DBV-CATEGORY-CODE | ホスト変数 | +| 6 | BASE-SALARY | DBV-BASE-SALARY | ホスト変数 | +| 7 | HOURLY-RATE | DBV-HOURLY-RATE | ホスト変数 | +| 8 | DEPENDENT-COUNT | DBV-DEPENDENT-COUNT | ホスト変数 | +| 9 | STATUS | DBV-STATUS | ホスト変数 | +| 10 | UPDATED-AT | CURRENT TIMESTAMP | DB2関数 | diff --git a/詳細設計書/詳細設計書_KYU03AGG.md b/詳細設計書/詳細設計書_KYU03AGG.md new file mode 100644 index 0000000..a1eeb06 --- /dev/null +++ b/詳細設計書/詳細設計書_KYU03AGG.md @@ -0,0 +1,139 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 給与計算システム | +| 2 | プログラムID | KYU03AGG | +| 3 | プログラム名 | 欠勤集約処理 | +| 4 | PGMタイプ | メイン | +| 5 | PGMパターン | キーブレイク(集約) | +| 6 | 機能概要 | JCL SORT済み欠勤データ(社員番号昇順)を読み込み、同一社員内の欠勤時間・回数を集約する。 | +| 7 | | 社員単位に1件の集約レコードをABSENCE-AGGREGATEに出力する。 | +| 8 | | エラー時はERROR-LOGに出力する。 | + +※PGMタイプ:メイン、サブ +※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 + +### 前提条件 + +| NO | 対象ファイル | 条件 | +|----|-------------|------| +| 1 | KYU02S01(ABSENCE-SUMMARY) | JCL SORTにより社員番号(1-8桁)昇順に整列済みであること | + +### 使用ファイル一覧 + +| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | +|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| +| 1 | KYU02S01 | R01 | KYU03R01 | I | 自前(80B) | FB | | 80 | PS | JCL SORT済み | +| 2 | ABSENCE-AGGREGATE | W01 | KYU03W01 | O | KYU02REC | FB | | 80 | PS | 社員単位1件 | +| 3 | ERROR-LOG | W02 | KYU03W02 | O | KYU99REC | VB | | 200 | PS | | + +### キー項目一覧 + +| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | +|----|-----------|---------------------|-------------------------------------------| +| 1 | KYU02S01 | 社員番号(1-8桁CH昇順) | 社員番号による集約キーブレイク | + +### 使用モジュール一覧 + +| 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.ワークエリアの初期化 + INITIALIZE WRKARA + 1-4.使用ファイルのオープン + OPEN INPUT R01INNFIL + OPEN OUTPUT W01OUTFIL W02OUTFIL + 1-5.R01を読み込む。(1100R01INNSOR)(1回目) + +2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す) + 2-1.キーブレイク判定 + 2-1-1.前社員キー設定済み(WRK-PREV-Y)の場合 + 2-1-1-1.WRK-PREV-EMP-ID = WRK-EMP-ID(同一社員) + ADD 1 TO WRK-ABSENT-COUNT + ADD WRK-ABSENT-HOURS TO WRK-TOTAL-HOURS + 2-1-1-2.異なる社員 + 前社員の集約レコード出力(2100WRITOUTSOR) + WRK-PREV-EMP-ID ← WRK-EMP-ID + INITIALIZE WRK-TOTAL-HOURS WRK-ABSENT-COUNT + REPLACING NUMERIC DATA BY ZERO + MOVE 1 TO WRK-ABSENT-COUNT + MOVE WRK-ABSENT-HOURS TO WRK-TOTAL-HOURS + 2-1-2.初回(WRK-PREV-Y未設定) + WRK-PREV-EMP-ID ← WRK-EMP-ID + WRK-PREV-Y ← TRUE + MOVE 1 TO WRK-ABSENT-COUNT + MOVE WRK-ABSENT-HOURS TO WRK-TOTAL-HOURS + 2-2.R01を読み込む(1100R01INNSOR)(2件目以降) + +3.終了処理(3000STPSOR) + 3-1.最終社員の集約レコード出力 + IF WRK-PREV-Y → PERFORM 2100WRITOUTSOR + 3-2.入出力ファイルのクローズ + 3-3.入出力件数出力メッセージ出力 + 【入力メッセージ編集】 + メッセージ番号:6(入力件数メッセージ) + PARM1:'KYU03R01' + PARM2:CUN-R01INN + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'KYU03W01' + PARM2:CUN-W01OUT + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'KYU03W02' + PARM2:CUN-W02OUT + 3-4.終了メッセージ出力 + 【メッセージ編集】 + メッセージ番号:2(終了メッセージ) + +補足:集約ロジック詳細 + WRK-PREV-EMP-ID:前社員キー保持変数 + WRK-TOTAL-HOURS:同一社員内の欠勤時間合計 + WRK-ABSENT-COUNT:同一社員内の欠勤回数 + 初回設定後、同一社員の間は加算を継続し、異社員出現時に前社員の集約結果を出力する。 + 全READ終了後、最終社員の出力を3000STPSORで実施する。 +``` + +--- + +## 出力レコード定義 + +### 出力ファイル1(W01/ABSENCE-AGGREGATE) + +COPY書式:KYU02REC(80B FB) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | EMP-ID | WRK-PREV-EMP-ID | 社員番号 | +| 2 | YEAR-MONTH | WRK-YEAR-MONTH | 対象年月(YYYYMM) | +| 3 | TOTAL-HOURS | WRK-TOTAL-HOURS | 欠勤時間合計 | +| 4 | ABSENT-COUNT | WRK-ABSENT-COUNT | 欠勤回数 | +| 5 | FILLER | SPACE固定 | | + +### 出力ファイル2(W02/ERROR-LOG) + +COPY書式:KYU99REC(VB 200B) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | ERR-CATEGORY | 区分固定値 | エラー区分 | +| 2 | ERR-DETAIL | STRINGで編集 | エラー内容 | diff --git a/詳細設計書/詳細設計書_KYU04CAL.md b/詳細設計書/詳細設計書_KYU04CAL.md new file mode 100644 index 0000000..0f70af8 --- /dev/null +++ b/詳細設計書/詳細設計書_KYU04CAL.md @@ -0,0 +1,176 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 給与計算システム | +| 2 | プログラムID | KYU04CAL | +| 3 | プログラム名 | 給与計算処理 | +| 4 | PGMタイプ | メイン | +| 5 | PGMパターン | 1:N+キーブレイク(同キー) | +| 6 | 機能概要 | ABSENCE-AGGREGATEを読込み、DB2 EMP-MASTER・OVT-MONTHLYを参照し給与計算を実行する。 | +| 7 | | 欠勤控除額計算→時間外手当計算→支給総額計算→SALARY-DETAIL出力 | +| 8 | | 勤怠区分×手当種別の複合分岐はEVALUATE ALSOで実装 | + +※PGMタイプ:メイン、サブ +※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 + +### 前提条件 + +| NO | 対象ファイル | 条件 | +|----|-------------|------| +| 1 | ABSENCE-AGGREGATE(KYU04R02) | ソート不要。社員番号単位の1件(KYU03AGG出力) | +| 2 | PAY-PARAM(KYU04R03) | CSV形式。基本給パラメータを保持 | + +### 使用ファイル一覧 + +| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | +|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| +| 1 | ABSENCE-AGGREGATE | R02 | KYU04R02 | I | KYU02REC | F | | 80 | PS | KYU03AGG出力 | +| 2 | PAY-PARAM | R03 | KYU04R03 | I | 自前(80B) | F | | 80 | PS | CSV形式 | +| 3 | SALARY-DETAIL | W03 | KYU04W03 | O | KYU03REC | FB | | 240 | PS | | +| 4 | ERROR-LOG | W04 | KYU04W04 | O | KYU99REC | VB | | 200 | PS | | +| 5 | EMP-MASTER (DB2) | — | — | I | — | — | — | — | DB2 | EXEC SQL SELECT | +| 6 | OVT-MONTHLY (DB2) | — | — | I | — | — | — | — | DB2 | EXEC SQL SELECT SUM | + +### キー項目一覧 + +| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | +|----|-----------|---------------------|-------------------------------------------| +| 1 | ABSENCE-AGGREGATE | なし | 社員番号(1:Nマッチングキー) | + +### 使用モジュール一覧 + +| 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.運用日付取得SUB(SUB01DAT)により運用日を取得する。 + 復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。 + 【メッセージ編集】 + メッセージ番号:5(サブエラー) + PARM1:'SUB01DAT' + PARM2:復帰コード + 【ABEND処理SUB】 + ABENDコード:999 + 1-5.PAY-PARAM(R03)をOPEN READし、基本給パラメータを取得する。 + UNSTRINGでカンマ区切りを分解し、対象年月と基本給を抽出する。 + 1-6.使用ファイルのOPEN + R02INNFIL / W03OUTFIL / W04OUTFIL をOPEN + 1-7.DB接続(EXEC SQL CONNECT TO 'data/SALARY.db') + 1-8.R02を読み込む。(1100R02INNSOR)(1回目) + +2.主処理(2000MAJSOR)(R02を全て読み終えるまで下記を繰り返す) + 2-1.ホスト変数セット + R02のEMP-IDをDBV-EMP-IDにMOVE + 2-2.DB2 EMP-MASTER参照(EXEC SQL SELECT) + 【SQL】 + SELECT EMP-NAME, DEPT-CODE, REGION-CODE, + CATEGORY-CODE, BASE-SALARY, HOURLY-RATE, + DEPENDENT-COUNT, STATUS + ※REGION-CODE/CATEGORY-CODEはFYI用に取得するが現状未使用 + FROM EMP-MASTER + WHERE EMP-ID = :DBV-EMP-ID + SQLコード≠0の場合、エラー出力(2200ERROUTSOR)し次件へ。 + 2-3.DB2 OVT-MONTHLY参照(EXEC SQL SELECT SUM) + 【SQL】 + SELECT SUM(OVT-HOURS) + FROM OVT-MONTHLY + WHERE EMP-ID = :DBV-EMP-ID + AND YEAR-MONTH = :WRK-YEAR-MONTH + SQLコード≠0の場合、残業時間をZEROとする。 + 2-4.給与計算(2100CALCSOR) + 2-4-1.欠勤控除額計算 + 【COMPUTE】 + WRK-ABSENT-DEDUCT ROUNDED = + DBV-HOURLY-RATE × WRK-ABSENT-HOURS + ON SIZE ERROR → ZERO設定 + 2-4-2.時間外手当計算 + 【COMPUTE】 + WRK-OVT-AMOUNT ROUNDED = + DBV-HOURLY-RATE × DBV-OVT-HOURS × CNS-OVERTIME-RATE(1.25) + ON SIZE ERROR → ZERO設定 + 2-4-3.EVALUATE ALSO(勤怠区分×手当種別の複合分岐) + 【EVALUATE ALSO】 + WRK-ALLOWANCE-TYPE = 'OVT' AND WRK-ATTEND-TYPE = 'W' + → WRK-AMOUNT = HOURLY-RATE × OVT-HOURS × 1.25 + WRK-ALLOWANCE-TYPE = 'OVT' AND WRK-ATTEND-TYPE = 'H' + → WRK-AMOUNT = HOURLY-RATE × OVT-HOURS × 1.35 + WRK-ALLOWANCE-TYPE = 'LATE' AND WRK-ATTEND-TYPE = ANY + → WRK-AMOUNT = HOURLY-RATE × OVT-HOURS × 0.50 + WHEN OTHER → WRK-AMOUNT = ZERO + 2-4-4.支給総額計算 + 【COMPUTE】 + WRK-GROSS-PAYMENT = + DBV-BASE-SALARY + WRK-OVT-AMOUNT - WRK-ABSENT-DEDUCT + 2-5.SALARY-DETAIL出力(2110WRITOUTSOR) + 各項目をW03OUTREC(KYU03REC)にMOVEしWRITE + W03OUT件数カウンタ(CUN-W03OUT)を+1 + 2-6.R02を読み込む。(1100R02INNSOR)(2件目以降) + +3.終了処理(3000STPSOR) + 3-1.入出力ファイルのクローズ + 3-2.入出力件数出力メッセージ出力 + 【入力メッセージ編集】 + メッセージ番号:6(入力件数メッセージ) + PARM1:'KYU04R02' + PARM2:CUN-R02INN + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'KYU04W03' + PARM2:CUN-W03OUT + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'KYU04W04' + PARM2:CUN-W04OUT + 3-3.終了メッセージ出力 + 【メッセージ編集】 + メッセージ番号:2(終了メッセージ) +``` + +--- + +## 出力レコード定義 + +### 出力ファイル1(W03/SALARY-DETAIL) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | EMP-ID | R02EMP-ID | | +| 2 | EMP-NAME | DB2 EMP-MASTER EMP-NAME | | +| 3 | DEPT-CODE | DB2 EMP-MASTER DEPT-CODE | | +| 4 | BASE-SALARY | DB2 EMP-MASTER BASE-SALARY | | +| 5 | OVT-AMOUNT | 時間外手当計算結果 | | +| 6 | HOLIDAY-AMOUNT | 0で固定 | | +| 7 | ABSENT-DEDUCT | 欠勤控除額計算結果 | | +| 8 | GROSS-PAYMENT | 支給総額計算結果 | | +| 9 | OVT-HOURS | DB2 OVT-MONTHLY SUM結果 | | +| 10 | ABSENT-HOURS | R02TOTAL-HOURS | | +| 11 | ATTEND-TYPE | WRK-ATTEND-TYPE | | +| 12 | ALLOWANCE-TYPE | WRK-ALLOWANCE-TYPE | | +| 13 | FILLER | — | 131B | + +### 出力ファイル2(W04/ERROR-LOG) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | ERR-CATEGORY | 'DB-ERR'で固定 | | +| 2 | ERR-DETAIL | R02EMP-ID | エラー発生社員番号 | diff --git a/詳細設計書/詳細設計書_KYU05DED.md b/詳細設計書/詳細設計書_KYU05DED.md new file mode 100644 index 0000000..517bbf5 --- /dev/null +++ b/詳細設計書/詳細設計書_KYU05DED.md @@ -0,0 +1,167 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 給与計算システム | +| 2 | プログラムID | KYU05DED | +| 3 | プログラム名 | 控除計算処理 | +| 4 | PGMタイプ | メイン | +| 5 | PGMパターン | SELECT条件 | +| 6 | 機能概要 | SALARY-DETAILを入力に、源泉所得税・社会保険料・住民税を計算しSALARY-NETを出力する。 | +| 7 | | TAX-TABLE(DB2 SELECT ... BETWEEN)で税率検索、INSURANCE-TABLE(SEARCH ALL)で保険料率検索 | + +※PGMタイプ:メイン、サブ +※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 + +### 前提条件 + +| NO | 対象ファイル | 条件 | +|----|-------------|------| +| 1 | SALARY-DETAIL(KYU05R01) | ソート不要。KYU04CALの出力を入力 | + +### 使用ファイル一覧 + +| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | +|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| +| 1 | SALARY-DETAIL | R01 | KYU05R01 | I | KYU03REC | FB | | 240 | PS | KYU04CAL出力 | +| 2 | SALARY-NET | W01 | KYU05W01 | O | KYU04REC | FB | | 200 | PS | | +| 3 | ERROR-LOG | W02 | KYU05W02 | O | KYU99REC | VB | | 200 | PS | | +| 4 | TAX-TABLE (DB2) | — | — | I | — | — | — | — | DB2 | EXEC SQL SELECT ... BETWEEN | +| 5 | INSURANCE-TABLE (DB2) | — | — | I | — | — | — | — | DB2 | LOAD→WORKING-STORAGE→SEARCH ALL | + +### キー項目一覧 + +| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | +|----|-----------|---------------------|-------------------------------------------| +| 1 | 該当なし | なし | なし | + +### 使用モジュール一覧 + +| 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/SALARY.db') + 1-5.INSURANCE-TABLE全件LOAD(1100INSLOADSOR) + 【SQL】(DECLARE INS-CURSOR) + SELECT INS-INCOME-FROM, INS-INCOME-TO, + INS-HEALTH-RATE, INS-PENSION-RATE + FROM INSURANCE-TABLE + ORDER BY INS-INCOME-FROM + OPEN CURSOR → FETCH ループ → WORKING-STORAGE(INSURANCE-WORK)に格納 + IW-COUNT で件数管理(最大200件) + → CLOSE CURSOR + 1-6.使用ファイルのOPEN + R01INNFIL / W01OUTFIL / W02OUTFIL をOPEN + 1-7.R01を読み込む。(1200R01INNSOR)(1回目) + +2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す) + 2-1.課税所得計算 + 【IF判定】 + WRK-GROSS-PAYMENT < CNS-TAX-BASIC-DEDUCTION(50000) + → 課税所得 = 0 + 上記以外 + 【COMPUTE】 + WRK-TAXABLE-INCOME = + WRK-GROSS-PAYMENT - CNS-TAX-BASIC-DEDUCTION + 2-2.DB2 TAX-TABLE税率取得(EXEC SQL SELECT ... BETWEEN) + 【SQL】 + SELECT TAX-RATE, DEDUCTION + FROM TAX-TABLE + WHERE :WRK-TAXABLE-INCOME BETWEEN TAX-FROM AND TAX-TO + SQLコード=0の場合 + 【COMPUTE ROUNDED】 + WRK-INCOME-TAX = + WRK-TAXABLE-INCOME × DBV-TAX-RATE - DBV-TAX-DEDUCTION + 計算結果<0 → 0に補正 + SQLコード≠0の場合 + WRK-INCOME-TAX = 0 + 2-3.社会保険料計算(SEARCH ALL on INSURANCE-WORK) + 【SEARCH ALL IW-ENTRY】 + 条件:IW-INCOME-FROM(IW-IDX) ≦ WRK-TAXABLE-INCOME + AND WRK-TAXABLE-INCOME ≦ IW-INCOME-TO(IW-IDX) + AT END → WRK-INSURANCE = 0 + 【COMPUTE ROUNDED】 + WRK-INSURANCE = WRK-TAXABLE-INCOME × + (IW-HEALTH-RATE + IW-PENSION-RATE) + 2-4.住民税計算 + 【COMPUTE ROUNDED】 + WRK-RESIDENT-TAX = + WRK-TAXABLE-INCOME × CNS-RESIDENT-TAX-RATE(0.10) + 2-5.差引支給額計算 + 【COMPUTE】 + WRK-NET-PAYMENT = + WRK-GROSS-PAYMENT - WRK-INCOME-TAX + - WRK-INSURANCE - WRK-RESIDENT-TAX + 2-6.SALARY-NET出力(2100WRITOUTSOR) + 各項目をW01OUTREC(KYU04REC)にMOVEしWRITE + W01OUT件数カウンタ(CUN-W01OUT)を+1 + 2-7.R01を読み込む。(1200R01INNSOR)(2件目以降) + +3.終了処理(3000STPSOR) + 3-1.入出力ファイルのクローズ + 3-2.入出力件数出力メッセージ出力 + 【入力メッセージ編集】 + メッセージ番号:6(入力件数メッセージ) + PARM1:'KYU05R01' + PARM2:CUN-R01INN + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'KYU05W01' + PARM2:CUN-W01OUT + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'KYU05W02' + PARM2:CUN-W02OUT + 3-3.終了メッセージ出力 + 【メッセージ編集】 + メッセージ番号:2(終了メッセージ) +``` + +--- + +## 出力レコード定義 + +### 出力ファイル1(W01/SALARY-NET) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | EMP-ID | R01EMP-ID | | +| 2 | REC-TYPE | 'S'で固定 | 給与= S / 賞与= B | +| 3 | EMP-NAME | R01EMP-NAME | | +| 4 | DEPT-CODE | R01DEPT-CODE | | +| 5 | REGION-CODE | — | 未設定(FILLER) | +| 6 | CATEGORY-CODE | — | 未設定(FILLER) | +| 7 | GROSS-PAYMENT | R01BASE-SALARY | | +| 8 | INCOME-TAX | WRK-INCOME-TAX | 所得税計算結果 | +| 9 | INSURANCE | WRK-INSURANCE | 社会保険料計算結果 | +| 10 | RESIDENT-TAX | WRK-RESIDENT-TAX | 住民税計算結果 | +| 11 | NET-PAYMENT | WRK-NET-PAYMENT | 差引支給額計算結果 | +| 12 | TAXABLE-INCOME | WRK-TAXABLE-INCOME | 課税所得計算結果 | +| 13 | PAY-AMOUNT | WRK-NET-PAYMENT | 汎用支給額 | +| 14 | FILLER | — | 81B | + +### 出力ファイル2(W02/ERROR-LOG) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | ERR-CATEGORY | 未設定 | 該当ケースなし | +| 2 | ERR-DETAIL | エラー内容 | DB接続エラー時のみ | diff --git a/詳細設計書/詳細設計書_KYU06UPD.md b/詳細設計書/詳細設計書_KYU06UPD.md new file mode 100644 index 0000000..7960069 --- /dev/null +++ b/詳細設計書/詳細設計書_KYU06UPD.md @@ -0,0 +1,147 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 給与計算システム | +| 2 | プログラムID | KYU06UPD | +| 3 | プログラム名 | 給与計算結果DB2更新処理 | +| 4 | PGMタイプ | メイン | +| 5 | PGMパターン | DB更新 | +| 6 | 機能概要 | SALARY-NETをDB2 SALARY-RESULTSに登録する。 | +| 7 | | INSERT実行→SQLCODE=-803(重複)の場合UPDATEに切替(UPSERT) | +| 8 | | SQLコード≠0かつ≠-803の場合ERROR-LOGに出力 | + +※PGMタイプ:メイン、サブ +※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 + +### 前提条件 + +| NO | 対象ファイル | 条件 | +|----|-------------|------| +| 1 | SALARY-NET(KYU06R02) | ソート不要。KYU05DEDの出力を入力 | + +### 使用ファイル一覧 + +| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | +|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| +| 1 | SALARY-NET | R02 | KYU06R02 | I | KYU04REC | FB | | 200 | PS | KYU05DED出力 | +| 2 | ERROR-LOG | W03 | KYU06W03 | O | KYU99REC | VB | | 200 | PS | | +| 3 | SALARY-RESULTS (DB2) | — | — | O | — | — | — | — | DB2 | EXEC SQL INSERT / UPDATE | + +### キー項目一覧 + +| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | +|----|-----------|---------------------|-------------------------------------------| +| 1 | 該当なし | なし | なし | + +### 使用モジュール一覧 + +| 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.PARM(YEAR-MONTH)取得 + ACCEPT FROM COMMAND-LINE + 未指定時は'202605'をデフォルト値とする + 1-5.使用ファイルのOPEN + R02INNFIL / W03OUTFIL をOPEN + 1-6.DB接続(EXEC SQL CONNECT TO 'data/SALARY.db') + 1-7.R02を読み込む。(1100R02INNSOR)(1回目) + +2.主処理(2000MAJSOR)(R02を全て読み終えるまで下記を繰り返す) + 2-1.ホスト変数セット + R02EMP-ID → DBV-EMP-ID + CNS-YEAR-MONTH-PARM → DBV-YEAR-MONTH + R02GROSS-PAYMENT → DBV-GROSS-PAYMENT + R02INCOME-TAX → DBV-INCOME-TAX + R02INSURANCE → DBV-INSURANCE + R02RESIDENT-TAX → DBV-RESIDENT-TAX + R02NET-PAYMENT → DBV-NET-PAYMENT + 2-2.EXEC SQL INSERT INTO SALARY-RESULTS + 【SQL】 + INSERT INTO SALARY-RESULTS + (EMP-ID, YEAR-MONTH, + GROSS-PAYMENT, INCOME-TAX, + INSURANCE, RESIDENT-TAX, + NET-PAYMENT, UPDATED-AT) + VALUES + (:DBV-EMP-ID, :DBV-YEAR-MONTH, + :DBV-GROSS-PAYMENT, :DBV-INCOME-TAX, + :DBV-INSURANCE, :DBV-RESIDENT-TAX, + :DBV-NET-PAYMENT, CURRENT TIMESTAMP) + 2-3.SQLCODE判定 + 2-3-1.SQLCODE = 0(正常登録) + CUN-DB-INSカウンタを+1 + → R02次件読込(1100R02INNSOR) + 2-3-2.SQLCODE = -803(重複) + 【EXEC SQL UPDATE】 + UPDATE SALARY-RESULTS SET + GROSS-PAYMENT = :DBV-GROSS-PAYMENT, + INCOME-TAX = :DBV-INCOME-TAX, + INSURANCE = :DBV-INSURANCE, + RESIDENT-TAX = :DBV-RESIDENT-TAX, + NET-PAYMENT = :DBV-NET-PAYMENT, + UPDATED-AT = CURRENT TIMESTAMP + WHERE EMP-ID = :DBV-EMP-ID + AND YEAR-MONTH = :DBV-YEAR-MONTH + 【SQLCODE判定】 + UPDATE SQLCODE = 0 → CUN-DB-UPDカウンタを+1 + UPDATE SQLCODE ≠ 0 → エラー出力(2100ERROUTSOR) + → R02次件読込(1100R02INNSOR) + 2-3-3.SQLCODE = その他(DBエラー) + エラー出力(2100ERROUTSOR) + → R02次件読込(1100R02INNSOR) + 2-4.R02を読み込む。(1100R02INNSOR)(2件目以降) + +3.終了処理(3000STPSOR) + 3-1.入出力ファイルのクローズ + 3-2.入出力件数出力メッセージ出力 + 【入力メッセージ編集】 + メッセージ番号:6(入力件数メッセージ) + PARM1:'KYU06R02' + PARM2:CUN-R02INN + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'DB-INSERT' + PARM2:CUN-DB-INS + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'DB-UPDATE' + PARM2:CUN-DB-UPD + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'KYU06W03' + PARM2:CUN-W03OUT + 3-3.終了メッセージ出力 + 【メッセージ編集】 + メッセージ番号:2(終了メッセージ) +``` + +--- + +## 出力レコード定義 + +### 出力ファイル1(W03/ERROR-LOG) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | ERR-CATEGORY | 'DB-ERR'で固定 | | +| 2 | ERR-DETAIL | DBV-EMP-ID | エラー発生社員番号 | diff --git a/詳細設計書/詳細設計書_KYU07DIV.md b/詳細設計書/詳細設計書_KYU07DIV.md new file mode 100644 index 0000000..b8cee19 --- /dev/null +++ b/詳細設計書/詳細設計書_KYU07DIV.md @@ -0,0 +1,193 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 給与計算システム | +| 2 | プログラムID | KYU07DIV | +| 3 | プログラム名 | 部門別分割出力処理 | +| 4 | PGMタイプ | メイン | +| 5 | PGMパターン | 50分割 | +| 6 | 機能概要 | JCL SORT済みSALARY-NETを部署コードに応じて50ファイルに分割出力する。 | +| 7 | | 常に1ファイルのみOPEN状態を保ち、部署コード切替時にファイルを開閉する。 | +| 8 | | SYSIN制御カードにより出力対象部署の絞り込みが可能(省略時は全50部署)。 | + +※PGMタイプ:メイン、サブ +※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 + +### 前提条件 + +| NO | 対象ファイル | 条件 | +|----|-------------|------| +| 1 | KYU04S01(SALARY-NET) | JCL SORTで部署コード(DEPT-CODE 50-51桁目)昇順ソート済みであること | +| 2 | SYSIN(制御カード) | 省略時は全50部署を出力対象とする | + +### 使用ファイル一覧 + +| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | +|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| +| 1 | SALARY-NET | R01 | KYU07R01 | I | KYU04REC | F | | 200 | PS | JCL SORT済み | +| 2 | SYSIN | SYSIN | KYU07SYS | I | 自前(80B) | F | | 80 | PS | 制御カード | +| 3 | DEPT-OUT-01 | D01 | KYU07D01 | O | KYU04REC | F | | 200 | PS | | +| 4 | DEPT-OUT-02 | D02 | KYU07D02 | O | KYU04REC | F | | 200 | PS | | +| 5 | DEPT-OUT-03 | D03 | KYU07D03 | O | KYU04REC | F | | 200 | PS | | +| 6 | DEPT-OUT-04 | D04 | KYU07D04 | O | KYU04REC | F | | 200 | PS | | +| 7 | DEPT-OUT-05 | D05 | KYU07D05 | O | KYU04REC | F | | 200 | PS | | +| 8 | DEPT-OUT-06 | D06 | KYU07D06 | O | KYU04REC | F | | 200 | PS | | +| 9 | DEPT-OUT-07 | D07 | KYU07D07 | O | KYU04REC | F | | 200 | PS | | +| 10 | DEPT-OUT-08 | D08 | KYU07D08 | O | KYU04REC | F | | 200 | PS | | +| 11 | DEPT-OUT-09 | D09 | KYU07D09 | O | KYU04REC | F | | 200 | PS | | +| 12 | DEPT-OUT-10 | D10 | KYU07D10 | O | KYU04REC | F | | 200 | PS | | +| 13 | DEPT-OUT-11 | D11 | KYU07D11 | O | KYU04REC | F | | 200 | PS | | +| 14 | DEPT-OUT-12 | D12 | KYU07D12 | O | KYU04REC | F | | 200 | PS | | +| 15 | DEPT-OUT-13 | D13 | KYU07D13 | O | KYU04REC | F | | 200 | PS | | +| 16 | DEPT-OUT-14 | D14 | KYU07D14 | O | KYU04REC | F | | 200 | PS | | +| 17 | DEPT-OUT-15 | D15 | KYU07D15 | O | KYU04REC | F | | 200 | PS | | +| 18 | DEPT-OUT-16 | D16 | KYU07D16 | O | KYU04REC | F | | 200 | PS | | +| 19 | DEPT-OUT-17 | D17 | KYU07D17 | O | KYU04REC | F | | 200 | PS | | +| 20 | DEPT-OUT-18 | D18 | KYU07D18 | O | KYU04REC | F | | 200 | PS | | +| 21 | DEPT-OUT-19 | D19 | KYU07D19 | O | KYU04REC | F | | 200 | PS | | +| 22 | DEPT-OUT-20 | D20 | KYU07D20 | O | KYU04REC | F | | 200 | PS | | +| 23 | DEPT-OUT-21 | D21 | KYU07D21 | O | KYU04REC | F | | 200 | PS | | +| 24 | DEPT-OUT-22 | D22 | KYU07D22 | O | KYU04REC | F | | 200 | PS | | +| 25 | DEPT-OUT-23 | D23 | KYU07D23 | O | KYU04REC | F | | 200 | PS | | +| 26 | DEPT-OUT-24 | D24 | KYU07D24 | O | KYU04REC | F | | 200 | PS | | +| 27 | DEPT-OUT-25 | D25 | KYU07D25 | O | KYU04REC | F | | 200 | PS | | +| 28 | DEPT-OUT-26 | D26 | KYU07D26 | O | KYU04REC | F | | 200 | PS | | +| 29 | DEPT-OUT-27 | D27 | KYU07D27 | O | KYU04REC | F | | 200 | PS | | +| 30 | DEPT-OUT-28 | D28 | KYU07D28 | O | KYU04REC | F | | 200 | PS | | +| 31 | DEPT-OUT-29 | D29 | KYU07D29 | O | KYU04REC | F | | 200 | PS | | +| 32 | DEPT-OUT-30 | D30 | KYU07D30 | O | KYU04REC | F | | 200 | PS | | +| 33 | DEPT-OUT-31 | D31 | KYU07D31 | O | KYU04REC | F | | 200 | PS | | +| 34 | DEPT-OUT-32 | D32 | KYU07D32 | O | KYU04REC | F | | 200 | PS | | +| 35 | DEPT-OUT-33 | D33 | KYU07D33 | O | KYU04REC | F | | 200 | PS | | +| 36 | DEPT-OUT-34 | D34 | KYU07D34 | O | KYU04REC | F | | 200 | PS | | +| 37 | DEPT-OUT-35 | D35 | KYU07D35 | O | KYU04REC | F | | 200 | PS | | +| 38 | DEPT-OUT-36 | D36 | KYU07D36 | O | KYU04REC | F | | 200 | PS | | +| 39 | DEPT-OUT-37 | D37 | KYU07D37 | O | KYU04REC | F | | 200 | PS | | +| 40 | DEPT-OUT-38 | D38 | KYU07D38 | O | KYU04REC | F | | 200 | PS | | +| 41 | DEPT-OUT-39 | D39 | KYU07D39 | O | KYU04REC | F | | 200 | PS | | +| 42 | DEPT-OUT-40 | D40 | KYU07D40 | O | KYU04REC | F | | 200 | PS | | +| 43 | DEPT-OUT-41 | D41 | KYU07D41 | O | KYU04REC | F | | 200 | PS | | +| 44 | DEPT-OUT-42 | D42 | KYU07D42 | O | KYU04REC | F | | 200 | PS | | +| 45 | DEPT-OUT-43 | D43 | KYU07D43 | O | KYU04REC | F | | 200 | PS | | +| 46 | DEPT-OUT-44 | D44 | KYU07D44 | O | KYU04REC | F | | 200 | PS | | +| 47 | DEPT-OUT-45 | D45 | KYU07D45 | O | KYU04REC | F | | 200 | PS | | +| 48 | DEPT-OUT-46 | D46 | KYU07D46 | O | KYU04REC | F | | 200 | PS | | +| 49 | DEPT-OUT-47 | D47 | KYU07D47 | O | KYU04REC | F | | 200 | PS | | +| 50 | DEPT-OUT-48 | D48 | KYU07D48 | O | KYU04REC | F | | 200 | PS | | +| 51 | DEPT-OUT-49 | D49 | KYU07D49 | O | KYU04REC | F | | 200 | PS | | +| 52 | DEPT-OUT-50 | D50 | KYU07D50 | O | KYU04REC | F | | 200 | PS | | +| 53 | ERROR-LOG | W99 | KYU07W99 | O | KYU99REC | VB | | 200 | PS | | + +### キー項目一覧 + +| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | +|----|-----------|---------------------|-------------------------------------------| +| 1 | KYU04S01 | 部署コード(昇順) | 部署コード切替(分割キー) | + +### 使用モジュール一覧 + +| 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.ワークエリアの初期化 + WRKARA初期化、WRK-FIRST='1'設定 + 1-4.SYSIN読込(1100SYSINSOR) + 制御カードから対象部署一覧を取得する。 + SYSINファイルOPEN→READ→CLOSE。 + カードなし(AT END):全部署対象(WRK-ALL-DEPTS) + カードあり:"DEPT=01,02,05,10"形式をパースし、 + WRK-TARGET-DEPTテーブルに格納。 + 1-5.入出力ファイルのOPEN + R01INNFIL(INPUT)、W99OUTFIL(OUTPUT)をOPEN + 1-6.R01を読み込む。(1200R01INNSOR)(1回目) + +2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す) + 2-1.R01の部署コードを取得(MOVE R01DEPT-CODE TO WRK-DEPT-CODE) + 2-2.SYSIN対象部署フィルタ + WRK-FILTER-DEPTSの場合、SEARCHでWRK-TARGET-DEPTテーブルを検索。 + 該当なし→次レコード読込(1200R01INNSOR)してEXIT SECTION。 + 2-3.部署切替判定 + 2-3-1.WRK-FIRST-Yの場合(初回) + WRK-FIRSTを'0'に設定し、2100OPENSORを実行 + 2-3-2.WRK-PREV-DEPT ≠ WRK-DEPT-CODEの場合(部署切替) + 2200CLOSESORで前部署ファイルをCLOSE WITH LOCK + 2100OPENSORで新部署ファイルをOPEN + 2-4.現部署コードをWRK-PREV-DEPTに保存 + 2-5.該当ファイルにWRITE(2300WRITESOR) + EVALUATE WRK-DEPT-CODEでD01〜D50の該当ファイルにWRITE + WHEN OTHERは無視 + CUN-DEPT-OUTを+1 + 2-6.R01を読み込む。(1200R01INNSOR)(2件目以降) + +3.終了処理(3000STPSOR) + 3-1.WRK-PREV-DEPT > SPACESの場合、2200CLOSESOR実行 + 3-2.入出力ファイルのクローズ + R01INNFIL、W99OUTFILをCLOSE + 3-3.入出力件数出力メッセージ出力 + 【入力メッセージ編集】 + メッセージ番号:6(入力件数メッセージ) + PARM1:'KYU07R01' + PARM2:CUN-R01INN + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'DEPT-OUT' + PARM2:CUN-DEPT-OUT + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'KYU07W99' + PARM2:CUN-W99OUT + 3-4.終了メッセージ出力 + 【メッセージ編集】 + メッセージ番号:2(終了メッセージ) +``` + +--- + +## 出力レコード定義 + +### 出力ファイル(D01〜D50/DEPT-OUT-01〜50) + +KYU04REC(SALARY-NET形式)をそのまま出力する。 + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | EMP-ID | R01同項目を設定 | | +| 2 | REC-TYPE | R01同項目を設定 | | +| 3 | EMP-NAME | R01同項目を設定 | | +| 4 | DEPT-CODE | R01同項目を設定 | | +| 5 | REGION-CODE | R01同項目を設定 | | +| 6 | CATEGORY-CODE | R01同項目を設定 | | +| 7 | GROSS-PAYMENT | R01同項目を設定 | | +| 8 | INCOME-TAX | R01同項目を設定 | | +| 9 | INSURANCE | R01同項目を設定 | | +| 10 | RESIDENT-TAX | R01同項目を設定 | | +| 11 | NET-PAYMENT | R01同項目を設定 | | +| 12 | TAXABLE-INCOME | R01同項目を設定 | | +| 13 | PAY-AMOUNT | R01同項目を設定 | | +| 14 | FILLER | R01同項目を設定 | | + +### 出力ファイル(W99/ERROR-LOG) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | ERR-CATEGORY | 固定値'INVDEPT' | 無効部署コード時 | +| 2 | ERR-DETAIL | 'INVALID DEPT' | 部署コード範囲外 | diff --git a/詳細設計書/詳細設計書_KYU08PRI.md b/詳細設計書/詳細設計書_KYU08PRI.md new file mode 100644 index 0000000..cc3a49e --- /dev/null +++ b/詳細設計書/詳細設計書_KYU08PRI.md @@ -0,0 +1,149 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 給与計算システム | +| 2 | プログラムID | KYU08PRI | +| 3 | プログラム名 | 給与明細印刷処理 | +| 4 | PGMタイプ | メイン | +| 5 | PGMパターン | レイアウト編集のみ(GETPUT) | +| 6 | 機能概要 | JCL SORT済みSALARY-NETを給与明細書としてLINAGEページ制御で印刷出力する。 | +| 7 | | 1社員1ページ、ヘッダ・明細行・フッタの構成でPAGE-COUNTER自動管理。 | +| 8 | | BLANK WHEN ZERO / JUSTIFIED RIGHTによる編集出力。 | + +※PGMタイプ:メイン、サブ +※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 + +### 前提条件 + +| NO | 対象ファイル | 条件 | +|----|-------------|------| +| 1 | KYU05S01(SALARY-NET) | JCL SORTで社員番号(EMP-ID)昇順ソート済みであること | + +### 使用ファイル一覧 + +| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | +|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| +| 1 | SALARY-NET | R01 | KYU08R01 | I | KYU04REC | F | | 200 | PS | JCL SORT済み | +| 2 | PAYSLIP | W01 | KYU08W01 | O | KYU05REC | F | | 200 | SYSOUT A | LINAGE 66行 | +| 3 | ERROR-LOG | W02 | KYU08W02 | O | KYU99REC | VB | | 200 | PS | | + +### キー項目一覧 + +| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | +|----|-----------|---------------------|-------------------------------------------| +| 1 | KYU05S01 | 社員番号(昇順) | なし(全件印刷) | + +### 使用モジュール一覧 + +| 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.運用日付取得SUB(SUB01DAT)により運用日を取得する。 + 復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。 + 【メッセージ編集】 + メッセージ番号:5(サブエラー) + PARM1:'SUB01DAT' + PARM2:復帰コード + 【ABEND処理SUB】 + ABENDコード:999 + 1-5.使用ファイルのオープン + R01INNFIL(INPUT)、W01OUTFIL(OUTPUT)、W02OUTFIL(OUTPUT)をOPEN + W01OUTFILはLINAGE IS 66 LINESで定義 + (FOOTING AT 60 / TOP 6 / BOTTOM 6) + 1-6.R01を読み込む。(1100R01INNSOR)(1回目) + +2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す) + 2-1.ページカウンタ加算 + WRK-PAGE-COUNTERを+1 + 2-2.ヘッダ行編集・出力 + 【ヘッダ編集】 + タイトル行'========== 給与明細書 =========='を設定 + WRK-PAGE-COUNTERをPIC Z(03)9で編集 + WRITE W01OUTREC FROM HEADER-LINE + BEFORE ADVANCING PAGE(改ページ) + 2-3.明細行編集・出力 + 【明細編集】 + EMP-ID:R01同項目をX(008)で設定 + EMP-NAME:R01同項目をX(020) JUSTIFIED RIGHTで設定 + BASIC-SALARY:R01-GROSS-PAYMENTをZ(08)9 BLANK WHEN ZEROで設定 + NET-PAYMENT:R01-NET-PAYMENTをZ(08)9 BLANK WHEN ZEROで設定 + WRITE W01OUTREC FROM DETAIL-LINE + BEFORE ADVANCING 1 LINE + AT END-OF-PAGE + WRITE W01OUTREC FROM FOOTER-LINE + BEFORE ADVANCING PAGE + CUN-W01OUTを+1 + 2-4.フッタ出力 + 【フッタ編集】 + '--- 明細終了 ---'を設定 + WRITE W01OUTREC FROM FOOTER-LINE + BEFORE ADVANCING PAGE(改ページ=次社員) + 2-5.R01を読み込む。(1100R01INNSOR)(2件目以降) + +3.終了処理(3000STPSOR) + 3-1.入出力ファイルのクローズ + R01INNFIL、W01OUTFIL、W02OUTFILをCLOSE + 3-2.入出力件数出力メッセージ出力 + 【入力メッセージ編集】 + メッセージ番号:6(入力件数メッセージ) + PARM1:'KYU08R01' + PARM2:CUN-R01INN + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'KYU08W01' + PARM2:CUN-W01OUT + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'KYU08W02' + PARM2:CUN-W02OUT + 3-3.終了メッセージ出力 + 【メッセージ編集】 + メッセージ番号:2(終了メッセージ) +``` + +--- + +## 出力レコード定義 + +### 出力ファイル1(W01/PAYSLIP) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | EMP-ID | R01-EMP-IDを設定 | X(008) | +| 2 | FILLER | SPACE | X(002) | +| 3 | EMP-NAME | R01-EMP-NAMEを設定 | X(020) JUSTIFIED RIGHT | +| 4 | FILLER | SPACE | X(002) | +| 5 | BASIC-SALARY | R01-GROSS-PAYMENTを設定 | Z(008)9 BLANK WHEN ZERO | +| 6 | FILLER | SPACE | X(002) | +| 7 | NET-PAYMENT | R01-NET-PAYMENTを設定 | Z(008)9 BLANK WHEN ZERO | +| 8 | FILLER | SPACE | X(002) | +| 9 | PAGE-TITLE | ヘッダ編集 | X(040) | +| 10 | FILLER | SPACE | X(106) | + +### 出力ファイル2(W02/ERROR-LOG) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | ERR-CATEGORY | 該当エラー種別 | X(008) | +| 2 | ERR-DETAIL | STRINGで編集 | エラー内容 | diff --git a/詳細設計書/詳細設計書_KYU09MRG.md b/詳細設計書/詳細設計書_KYU09MRG.md new file mode 100644 index 0000000..f366718 --- /dev/null +++ b/詳細設計書/詳細設計書_KYU09MRG.md @@ -0,0 +1,162 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 給与計算システム | +| 2 | プログラムID | KYU09MRG | +| 3 | プログラム名 | 支給データ結合処理 | +| 4 | PGMタイプ | メイン | +| 5 | PGMパターン | MERGE(複数ファイル結合) | +| 6 | 機能概要 | SALARY-NETとBONUS-DATAをMERGE文で社員番号昇順に結合する。 | +| 7 | | OUTPUT PROCEDURE内で同一社員の給与(TYPE=S)と賞与(TYPE=B)を統合し、 | +| 8 | | 支給データ(PAYMENT-DATA)として出力する。 | + +※PGMタイプ:メイン、サブ +※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 + +### 前提条件 + +| NO | 対象ファイル | 条件 | +|----|-------------|------| +| 1 | SALARY-NET(KYU09M01) | 社員番号(EMP-ID)昇順であること(MERGE文で内部ソート) | +| 2 | BONUS-DATA(KYU09M02) | 社員番号(EMP-ID)昇順であること(MERGE文で内部ソート) | +| 3 | MERGE作業ファイル | ソート前処理不要。MERGE文が自ら2ファイルを結合する。 | + +### 使用ファイル一覧 + +| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | +|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| +| 1 | SALARY-NET | M01 | KYU09M01 | I | KYU04REC | F | | 200 | PS | REC-TYPE='S' | +| 2 | BONUS-DATA | M02 | KYU09M02 | I | KYU04REC | F | | 200 | PS | REC-TYPE='B' | +| 3 | WORK-FILE | M99 | KYU09M99 | I | 自前(200B) | F | | 200 | PS | MERGE作業用SD | +| 4 | PAYMENT-DATA | W01 | KYU09W01 | O | KYU06REC | F | | 200 | PS | | +| 5 | ERROR-LOG | W02 | KYU09W02 | O | KYU99REC | VB | | 200 | PS | | + +### キー項目一覧 + +| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | +|----|-----------|---------------------|-------------------------------------------| +| 1 | SALARY-NET | 社員番号(昇順) | MERGEキー(社員番号) | +| 2 | BONUS-DATA | 社員番号(昇順) | MERGEキー(社員番号) | + +### 使用モジュール一覧 + +| 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.運用日付取得SUB(SUB01DAT)により運用日を取得する。 + 復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。 + 【メッセージ編集】 + メッセージ番号:5(サブエラー) + PARM1:'SUB01DAT' + PARM2:復帰コード + 【ABEND処理SUB】 + ABENDコード:999 + 1-5.出力ファイルのオープン + W01OUTFIL(OUTPUT)、W02OUTFIL(OUTPUT)をOPEN + (入力ファイルはMERGE文が自動OPENするため明示OPEN不要) + +2.MERGE出力処理(2000MRGOUTSOR) + 2-1.MERGE文実行(0000MAJCOLSOR内) + MERGE MERGE-FILE + ON ASCENDING KEY MERGE-EMP-ID + USING SALARY-FILE BONUS-FILE + OUTPUT PROCEDURE 2000MRGOUTSOR + 給与(SALARY-NET)と賞与(BONUS-DATA)を社員番号昇順で結合。 + 結合結果はOUTPUT PROCEDUREに渡される。 + 2-2.RETURNでMERGE結果取得ループ + PERFORM WITH TEST AFTER UNTIL WRK-MERGE-EOF-Y + RETURN MERGE-FILE INTO MERGE-REC + AT END SET WRK-MERGE-EOF-Y TO TRUE + 2-2-1.現社員番号をWRK-CURRENT-EMPに設定 + 2-2-2.WRK-SALARY-AMOUNT/WRK-BONUS-AMOUNTをZERO初期化 + 2-2-3.同一社員内ループ(WRK-CURRENT-EMP ≠ MERGE-EMP-IDまで) + 2-2-3-1.MERGE-REC-TYPE = 'S'(給与)の場合 + MERGE-PAY-AMOUNT → WRK-SALARY-AMOUNT + MERGE-GROSS-PAYMENT → WRK-BANK-CODE + MERGE-EMP-ID(1:4) → WRK-ACCOUNT-NO + 2-2-3-2.上記以外(賞与)の場合 + MERGE-PAY-AMOUNT → WRK-BONUS-AMOUNT + 2-2-3-3.RETURNで次レコード取得 + AT END → HIGH-VALUES設定、EXIT PERFORM + 2-2-4.給与+賞与合算 + ADD WRK-SALARY-AMOUNT TO WRK-BONUS-AMOUNT + GIVING WRK-TOTAL-PAYMENT + 2-2-5.2100PAYOUTSORでPAYMENT-DATA出力 + 2-2-5-1.W01OUTREC初期化 + 2-2-5-2.WRK-CURRENT-EMP → W01EMP-ID + 2-2-5-3.'T' → W01PAY-TYPE(支給合算) + 2-2-5-4.WRK-TOTAL-PAYMENT → W01AMOUNT + 2-2-5-5.WRK-BANK-CODE → W01BANK-CODE + 2-2-5-6.WRK-ACCOUNT-NO → W01ACCOUNT-NO + 2-2-5-7.W01OUTRECをWRITE + 2-2-5-8.CUN-W01OUTを+1 + +3.ENTRY代替エントリポイント(0010DIRECTSOR) + 3-1.'KYU09ENT'で直接呼出し可能 + 3-2.直接結合モードで簡易エラーログ出力 + 【エラー出力】 + ERR-DETAIL:'DIRECT ENTRY' + +4.終了処理(3000STPSOR) + 4-1.出力ファイルのクローズ + W01OUTFIL、W02OUTFILをCLOSE + 4-2.入出力件数出力メッセージ出力 + 【入力メッセージ編集】 + メッセージ番号:6(入力件数メッセージ) + PARM1:'MERGE-FILE' + PARM2:CUN-W01OUT + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'KYU09W01' + PARM2:CUN-W01OUT + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'KYU09W02' + PARM2:CUN-W02OUT + 4-3.終了メッセージ出力 + 【メッセージ編集】 + メッセージ番号:2(終了メッセージ) +``` + +--- + +## 出力レコード定義 + +### 出力ファイル1(W01/PAYMENT-DATA) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | EMP-ID | WRK-CURRENT-EMPを設定 | X(008) | +| 2 | PAY-TYPE | 'T'(支給合算)固定 | X(001) | +| 3 | AMOUNT | WRK-TOTAL-PAYMENT(給与+賞与)を設定 | 9(009) | +| 4 | BANK-CODE | WRK-BANK-CODE(給与レコードのGROSS-PAYMENT)を設定 | X(004) | +| 5 | ACCOUNT-NO | WRK-ACCOUNT-NO(EMP-ID(1:4))を設定 | 9(008) | +| 6 | FILLER | SPACE | X(170) | + +### 出力ファイル2(W02/ERROR-LOG) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | ERR-CATEGORY | 該当エラー種別 | X(008) | +| 2 | ERR-DETAIL | STRINGで編集 | エラー内容 |