diff --git a/README.md b/README.md index 753a3fe..f3a0f72 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## システム概要 -IBM z/OS + DB2 で動作する COBOL バッチシステム。勤怠休暇管理・残業統計管理・給与計算の3サブシステムで構成される。 +IBM z/OS + DB2 で動作する COBOL バッチシステム。勤怠休暇管理・残業統計管理・給与計算・社会保険管理の4サブシステムで構成される。 ### 本番環境 - OS: IBM z/OS @@ -22,11 +22,24 @@ IBM z/OS + DB2 で動作する COBOL バッチシステム。勤怠休暇管理 | A: 勤怠休暇管理 | CSV取込・DB登録・照合・日別計算・勤怠照会・DB更新・CSV出力 | KIN01INP~KIN09CSV(9本) | 完了 | | B: 残業統計管理 | 申請取込・重複チェック・照合・マッチング・集約・DB更新 | ZAN01CHK~ZAN06UPD(6本) | 完了 | | C: 給与計算 | CSV変換・登録・集約・計算・控除・DB更新・分割・印刷・マージ | KYU01CVT~KYU09MRG(9本) | 完了 | +| D: 社会保険管理 | ASCII→EBCDIC変換・保険情報統合・料率計算・事業所マッチング・等級判定・控除計算・キーブレイク・SORT編集・25分割・100分割 | SHA01CVT~SHA10S10(10本) | 完了 | ### 共通サブプログラム(5本) SUB01DAT(日付), SUB02MSG(メッセージ), SUB03END(ABEND), SUB04CHK(バリデーション), SUB05TIM(丸め) +### プログラム一覧 + +| プログラムID | サブシステム | 機能 | +|:------------|:-----------:|------| +| KIN01INP~KIN09CSV | A | 勤怠休暇管理(9本) | +| ZAN01CHK~ZAN06UPD | B | 残業統計管理(6本) | +| KYU01CVT~KYU09MRG | C | 給与計算(9本) | +| SHA01CVT~SHA10S10 | D | 社会保険管理(10本) | +| SUB01DAT~SUB05TIM | 共通 | 日付/メッセージ/ABEND/バリデーション/丸め(5本) | + +**全プログラム数: 39本** + ## ディレクトリ構成 ``` diff --git a/bin/SHA01CVT.exe b/bin/SHA01CVT.exe new file mode 100644 index 0000000..61e8b3b Binary files /dev/null and b/bin/SHA01CVT.exe differ diff --git a/bin/SHA02MNC.exe b/bin/SHA02MNC.exe new file mode 100644 index 0000000..848b943 Binary files /dev/null and b/bin/SHA02MNC.exe differ diff --git a/bin/SHA03MNP.exe b/bin/SHA03MNP.exe new file mode 100644 index 0000000..45710a8 Binary files /dev/null and b/bin/SHA03MNP.exe differ diff --git a/bin/SHA04TWO.exe b/bin/SHA04TWO.exe new file mode 100644 index 0000000..5094006 Binary files /dev/null and b/bin/SHA04TWO.exe differ diff --git a/bin/SHA05TWN.exe b/bin/SHA05TWN.exe new file mode 100644 index 0000000..400053f Binary files /dev/null and b/bin/SHA05TWN.exe differ diff --git a/bin/SHA06TWM.exe b/bin/SHA06TWM.exe new file mode 100644 index 0000000..ade8cfe Binary files /dev/null and b/bin/SHA06TWM.exe differ diff --git a/bin/SHA07KBR.exe b/bin/SHA07KBR.exe new file mode 100644 index 0000000..8440f40 Binary files /dev/null and b/bin/SHA07KBR.exe differ diff --git a/bin/SHA08SRT.exe b/bin/SHA08SRT.exe new file mode 100644 index 0000000..fee845a Binary files /dev/null and b/bin/SHA08SRT.exe differ diff --git a/bin/SHA09S25.exe b/bin/SHA09S25.exe new file mode 100644 index 0000000..599eba9 Binary files /dev/null and b/bin/SHA09S25.exe differ diff --git a/bin/SHA10S10.exe b/bin/SHA10S10.exe new file mode 100644 index 0000000..c28be54 Binary files /dev/null and b/bin/SHA10S10.exe differ diff --git a/cpy/KYU01REC.cpy b/cpy/KYU01REC.cpy new file mode 100644 index 0000000..a7bd57e --- /dev/null +++ b/cpy/KYU01REC.cpy @@ -0,0 +1,12 @@ + * EMP-RECORD 社員マスタ固定長レコード 80B + * KYU01CVT出力 / KYU02REG入力 + 03 (A)EMP-ID PIC X(008). + 03 (A)EMP-NAME PIC X(040). + 03 (A)DEPT-CODE PIC X(002). + 03 (A)REGION-CODE PIC X(002). + 03 (A)CATEGORY-CODE PIC X(003). + 03 (A)BASE-SALARY PIC 9(009). + 03 (A)HOURLY-RATE PIC 9(007). + 03 (A)DEPENDENT-COUNT PIC 9(002). + 03 (A)STATUS PIC X(001). + 03 FILLER PIC X(006). diff --git a/cpy/KYU02REC.cpy b/cpy/KYU02REC.cpy new file mode 100644 index 0000000..3a9180e --- /dev/null +++ b/cpy/KYU02REC.cpy @@ -0,0 +1,7 @@ + * ABSENCE-AGGREGATE 欠勤集約レコード 80B + * KYU03AGG出力 / KYU04CAL入力 + 03 (A)EMP-ID PIC X(008). + 03 (A)YEAR-MONTH PIC X(006). + 03 (A)TOTAL-HOURS PIC 9(004)V9(001). + 03 (A)ABSENT-COUNT PIC 9(002). + 03 FILLER PIC X(059). diff --git a/cpy/KYU03REC.cpy b/cpy/KYU03REC.cpy new file mode 100644 index 0000000..8c9fabb --- /dev/null +++ b/cpy/KYU03REC.cpy @@ -0,0 +1,15 @@ + * SALARY-DETAIL 給与明細レコード 240B + * KYU04CAL出力 / KYU05DED入力 + 03 (A)EMP-ID PIC X(008). + 03 (A)EMP-NAME PIC X(040). + 03 (A)DEPT-CODE PIC X(002). + 03 (A)BASE-SALARY PIC 9(009). + 03 (A)OVT-AMOUNT PIC 9(009). + 03 (A)HOLIDAY-AMOUNT PIC 9(009). + 03 (A)ABSENT-DEDUCT PIC 9(009). + 03 (A)GROSS-PAYMENT PIC 9(009). + 03 (A)OVT-HOURS PIC 9(004)V9(001). + 03 (A)ABSENT-HOURS PIC 9(004)V9(001). + 03 (A)ATTEND-TYPE PIC X(001). + 03 (A)ALLOWANCE-TYPE PIC X(003). + 03 FILLER PIC X(131). diff --git a/cpy/KYU04REC.cpy b/cpy/KYU04REC.cpy new file mode 100644 index 0000000..cfc381a --- /dev/null +++ b/cpy/KYU04REC.cpy @@ -0,0 +1,16 @@ + * SALARY-NET / DEPT-OUT 差引支給額レコード 200B + * KYU05DED出力 / KYU07DIV・KYU08PRI・KYU09MRG・KYU06UPD入力 + 03 (A)EMP-ID PIC X(008). + 03 (A)REC-TYPE PIC X(001). + 03 (A)EMP-NAME PIC X(040). + 03 (A)DEPT-CODE PIC X(002). + 03 (A)REGION-CODE PIC X(002). + 03 (A)CATEGORY-CODE PIC X(003). + 03 (A)GROSS-PAYMENT PIC 9(009). + 03 (A)INCOME-TAX PIC 9(009). + 03 (A)INSURANCE PIC 9(009). + 03 (A)RESIDENT-TAX PIC 9(009). + 03 (A)NET-PAYMENT PIC 9(009). + 03 (A)TAXABLE-INCOME PIC 9(009). + 03 (A)PAY-AMOUNT PIC 9(009). + 03 FILLER PIC X(081). diff --git a/cpy/KYU05REC.cpy b/cpy/KYU05REC.cpy new file mode 100644 index 0000000..d04ec2c --- /dev/null +++ b/cpy/KYU05REC.cpy @@ -0,0 +1,12 @@ + * PAYSLIP 給与明細印刷レコード 200B + * KYU08PRI出力 + 03 (A)EMP-ID PIC X(008). + 03 FILLER PIC X(002). + 03 (A)EMP-NAME PIC X(020). + 03 FILLER PIC X(002). + 03 (A)BASIC-SALARY PIC Z(008)9. + 03 FILLER PIC X(002). + 03 (A)NET-PAYMENT PIC Z(008)9. + 03 FILLER PIC X(002). + 03 (A)PAGE-TITLE PIC X(040). + 03 FILLER PIC X(106). diff --git a/cpy/KYU06REC.cpy b/cpy/KYU06REC.cpy new file mode 100644 index 0000000..087edc6 --- /dev/null +++ b/cpy/KYU06REC.cpy @@ -0,0 +1,8 @@ + * PAYMENT-DATA 支給データレコード 200B + * KYU09MRG出力 + 03 (A)EMP-ID PIC X(008). + 03 (A)PAY-TYPE PIC X(001). + 03 (A)AMOUNT PIC 9(009). + 03 (A)BANK-CODE PIC X(004). + 03 (A)ACCOUNT-NO PIC 9(008). + 03 FILLER PIC X(170). diff --git a/cpy/SHA01REC.cpy b/cpy/SHA01REC.cpy new file mode 100644 index 0000000..51df0cb --- /dev/null +++ b/cpy/SHA01REC.cpy @@ -0,0 +1,16 @@ + * + * 被保険者レコード 200B SHA01CVT出力 / SHA04TWO入力 + * + 03 (A)EMP-ID PIC 9(008). + 03 (A)INSURED-NO PIC X(010). + 03 (A)OFFICE-NO PIC X(004). + 03 (A)INSURER-CODE PIC X(004). + 03 (A)EMP-NAME PIC X(040). + 03 (A)EMP-KANA PIC X(020). + 03 (A)BIRTH-DATE PIC 9(008). + 03 (A)SEX PIC X(001). + 03 (A)ENT-DATE PIC 9(008). + 03 (A)HEALTH-INS-TYPE PIC X(001). + 03 (A)PENSION-TYPE PIC X(001). + 03 (A)STATUS PIC X(001). + 03 (A)FILLER PIC X(094). diff --git a/cpy/SHA02REC.cpy b/cpy/SHA02REC.cpy new file mode 100644 index 0000000..d86d4da --- /dev/null +++ b/cpy/SHA02REC.cpy @@ -0,0 +1,13 @@ + * + * 従業員保険情報レコード 200B SHA02MNC出力 + * + 03 (A)EMP-ID PIC 9(008). + 03 (A)EMP-NAME PIC X(040). + 03 (A)DEPT-CODE PIC 9(002). + 03 (A)BASE-SALARY PIC 9(009). + 03 (A)MONTHLY-AMOUNT PIC 9(009). + 03 (A)GRADE-CODE PIC 9(002). + 03 (A)HEALTH-INS-TYPE PIC X(001). + 03 (A)PENSION-TYPE PIC X(001). + 03 (A)INSURER-CODE PIC X(004). + 03 (A)FILLER PIC X(124). diff --git a/cpy/SHA03REC.cpy b/cpy/SHA03REC.cpy new file mode 100644 index 0000000..18bb61c --- /dev/null +++ b/cpy/SHA03REC.cpy @@ -0,0 +1,13 @@ + * + * 保険料計算詳細レコード 300B SHA03MNP出力 + * + 03 (A)EMP-ID PIC 9(008). + 03 (A)EMP-NAME PIC X(040). + 03 (A)INSURANCE-TYPE PIC X(001). + 03 (A)GRADE-CODE PIC 9(002). + 03 (A)MONTHLY-AMOUNT PIC 9(009). + 03 (A)HEALTH-RATE PIC 9(007). + 03 (A)PENSION-RATE PIC 9(007). + 03 (A)HEALTH-PREMIUM PIC 9(009). + 03 (A)PENSION-PREMIUM PIC 9(009). + 03 (A)FILLER PIC X(208). diff --git a/cpy/SHA04REC.cpy b/cpy/SHA04REC.cpy new file mode 100644 index 0000000..052f7e5 --- /dev/null +++ b/cpy/SHA04REC.cpy @@ -0,0 +1,13 @@ + * + * 事業所保険者付与一覧レコード 200B SHA04TWO出力 + * + 03 (A)EMP-ID PIC 9(008). + 03 (A)EMP-NAME PIC X(040). + 03 (A)OFFICE-NO PIC X(004). + 03 (A)OFFICE-NAME PIC X(040). + 03 (A)PREF-CODE PIC 9(002). + 03 (A)INSURER-CODE PIC X(004). + 03 (A)INSURER-NAME PIC X(060). + 03 (A)MONTHLY-AMOUNT PIC 9(009). + 03 (A)GRADE-CODE PIC 9(002). + 03 (A)FILLER PIC X(031). diff --git a/cpy/SHA05REC.cpy b/cpy/SHA05REC.cpy new file mode 100644 index 0000000..160dc0c --- /dev/null +++ b/cpy/SHA05REC.cpy @@ -0,0 +1,11 @@ + * + * 等級改定結果レコード 200B SHA05TWN出力 + * + 03 (A)EMP-ID PIC 9(008). + 03 (A)EMP-NAME PIC X(040). + 03 (A)REVISED-YM PIC 9(006). + 03 (A)OLD-GRADE PIC 9(002). + 03 (A)NEW-GRADE PIC 9(002). + 03 (A)AVG-STD-MONTHLY PIC 9(009). + 03 (A)REVISED-TYPE PIC X(001). + 03 (A)FILLER PIC X(132). diff --git a/cpy/SHA06REC.cpy b/cpy/SHA06REC.cpy new file mode 100644 index 0000000..49ae52b --- /dev/null +++ b/cpy/SHA06REC.cpy @@ -0,0 +1,14 @@ + * + * 保険料確定結果レコード 300B SHA06TWM出力 + * + 03 (A)EMP-ID PIC 9(008). + 03 (A)EMP-NAME PIC X(040). + 03 (A)INSURANCE-TYPE PIC X(001). + 03 (A)GRADE-CODE PIC 9(002). + 03 (A)MONTHLY-AMOUNT PIC 9(009). + 03 (A)HEALTH-RATE PIC 9(007). + 03 (A)PENSION-RATE PIC 9(007). + 03 (A)HEALTH-PREMIUM PIC 9(009). + 03 (A)PENSION-PREMIUM PIC 9(009). + 03 (A)TOTAL-PREMIUM PIC 9(009). + 03 (A)FILLER PIC X(199). diff --git a/cpy/SHA07REC.cpy b/cpy/SHA07REC.cpy new file mode 100644 index 0000000..ee2996e --- /dev/null +++ b/cpy/SHA07REC.cpy @@ -0,0 +1,14 @@ + * + * 資格異動レコード 200B SHA07KBR出力 + * REC-TYPE: S=サマリ / D=明細 + * + 03 (A)CHG-ID PIC 9(009). + 03 (A)EMP-ID PIC 9(008). + 03 (A)EMP-NAME PIC X(040). + 03 (A)CHG-DATE PIC 9(008). + 03 (A)CHG-TYPE PIC X(002). + 03 (A)INSURER-CODE PIC X(004). + 03 (A)PREV-INSURER PIC X(004). + 03 (A)REASON PIC X(040). + 03 (A)REC-TYPE PIC X(001). + 03 (A)FILLER PIC X(084). diff --git a/cpy/SHA08REC.cpy b/cpy/SHA08REC.cpy new file mode 100644 index 0000000..5340344 --- /dev/null +++ b/cpy/SHA08REC.cpy @@ -0,0 +1,15 @@ + * + * 届出書データレコード 300B SHA08SRT出力 + * + 03 (A)EMP-ID PIC 9(008). + 03 (A)EMP-NAME PIC X(040). + 03 (A)OFFICE-NO PIC X(004). + 03 (A)OFFICE-NAME PIC X(040). + 03 (A)INSURER-CODE PIC X(004). + 03 (A)INSURER-NAME PIC X(060). + 03 (A)PREF-CODE PIC 9(002). + 03 (A)MONTHLY-AMOUNT PIC 9(009). + 03 (A)GRADE-CODE PIC 9(002). + 03 (A)REPORT-TYPE PIC X(002). + 03 (A)REPORT-DATE PIC 9(008). + 03 (A)FILLER PIC X(121). diff --git a/cpy/SHA09REC.cpy b/cpy/SHA09REC.cpy new file mode 100644 index 0000000..157f970 --- /dev/null +++ b/cpy/SHA09REC.cpy @@ -0,0 +1,6 @@ + * + * 分割出力レコード 300B SHA09S25 / SHA10S10出力 + * + 03 (A)PREF-CODE PIC 9(002). + 03 (A)INSURER-CODE PIC X(004). + 03 (A)RPT-BODY PIC X(294). diff --git a/cpy/SHACHKAC.cpy b/cpy/SHACHKAC.cpy new file mode 100644 index 0000000..05d71db --- /dev/null +++ b/cpy/SHACHKAC.cpy @@ -0,0 +1,7 @@ + * + * SUB04CHK 連絡領域(92B) + * + 01 C01CHKPAR. + 03 C01CHKTYP PIC X(008). + 03 C01CHKDAT PIC X(080). + 03 C01CHKRRC PIC 9(004). diff --git a/cpy/SHADATAC.cpy b/cpy/SHADATAC.cpy new file mode 100644 index 0000000..f766d6f --- /dev/null +++ b/cpy/SHADATAC.cpy @@ -0,0 +1,6 @@ + * + * SUB01DAT 連絡領域(10B) + * + 01 D01UBSPAR. + 03 D01FKICOD PIC S9(004) COMP. + 03 D01UBSUDATE PIC 9(008). diff --git a/cpy/SHAENDAC.cpy b/cpy/SHAENDAC.cpy new file mode 100644 index 0000000..cb2a012 --- /dev/null +++ b/cpy/SHAENDAC.cpy @@ -0,0 +1,5 @@ + * + * SUB03END 連絡領域(3B) + * + 01 E01ABDPAR. + 03 E01ABDCOD PIC 9(003). diff --git a/cpy/SHAMSGAC.cpy b/cpy/SHAMSGAC.cpy new file mode 100644 index 0000000..b63eb45 --- /dev/null +++ b/cpy/SHAMSGAC.cpy @@ -0,0 +1,15 @@ + * + * SUB02MSG 連絡領域(303B) + * + 01 M00MHOPAR. + 03 M00MSGCOD PIC 9(003). + 03 M00UMKDATS22-01 PIC X(030). + 03 M00UMKDATS22-02 PIC X(030). + 03 M00UMKDATS22-03 PIC X(030). + 03 M00UMKDATS22-04 PIC X(030). + 03 M00UMKDATS22-05 PIC X(030). + 03 M00UMKDATS22-06 PIC X(030). + 03 M00UMKDATS22-07 PIC X(030). + 03 M00UMKDATS22-08 PIC X(030). + 03 M00UMKDATS22-09 PIC X(030). + 03 M00UMKDATS22-10 PIC X(030). diff --git a/ddl/schema_sha.sql b/ddl/schema_sha.sql new file mode 100644 index 0000000..378bb36 --- /dev/null +++ b/ddl/schema_sha.sql @@ -0,0 +1,70 @@ +-- ============================================================================= +-- 社会保険管理システム(サブシステムD)DBスキーマ +-- 対象DB2: DB2 for z/OS(区切り識別子使用) +-- ローカル開発: SQLite(型宣言はDB2準拠、SQLiteが許容する範囲で記述) +-- DB名称: INSURANCEDB +-- 注: テーブル名・カラム名は全角ハイフンを含むため二重引用符で囲む +-- ============================================================================= + +-- 1. INSURED-MASTER(被保険者マスタ) +CREATE TABLE "INSURED-MASTER" ( + "EMP-ID" CHAR(8) NOT NULL, + "INSURED-NO" CHAR(10) NOT NULL, + "OFFICE-NO" CHAR(4) NOT NULL, + "INSURER-CODE" CHAR(4) NOT NULL, + "HEALTH-INS-TYPE" CHAR(1) NOT NULL, + "PENSION-TYPE" CHAR(1) NOT NULL, + "BASE-MONTHLY" DECIMAL(9,0) NOT NULL, + "GRADE-CODE" CHAR(2) NOT NULL, + "STATUS" CHAR(1) NOT NULL, + "UPDATED-AT" TIMESTAMP NOT NULL, + PRIMARY KEY ("EMP-ID") +); + +-- 2. INSURANCE-RATES(保険料率テーブル) +CREATE TABLE "INSURANCE-RATES" ( + "GRADE-CODE" CHAR(2) NOT NULL, + "MONTHLY-FROM" DECIMAL(9,0) NOT NULL, + "MONTHLY-TO" DECIMAL(9,0) NOT NULL, + "HEALTH-RATE" DECIMAL(7,6) NOT NULL, + "PENSION-RATE" DECIMAL(7,6) NOT NULL, + "EFFECTIVE-FROM" CHAR(6) NOT NULL, + "EFFECTIVE-TO" CHAR(6) NOT NULL, + "UPDATED-AT" TIMESTAMP NOT NULL, + PRIMARY KEY ("GRADE-CODE", "EFFECTIVE-FROM", "EFFECTIVE-TO") +); + +-- 3. GRADE-HISTORY(標準報酬等級履歴) +CREATE TABLE "GRADE-HISTORY" ( + "EMP-ID" CHAR(8) NOT NULL, + "YEAR-MONTH" CHAR(6) NOT NULL, + "GRADE-CODE" CHAR(2) NOT NULL, + "MONTHLY-AMOUNT" DECIMAL(9,0) NOT NULL, + "CHANGE-TYPE" CHAR(1) NOT NULL, + "PREV-GRADE" CHAR(2) NOT NULL, + "UPDATED-AT" TIMESTAMP NOT NULL, + PRIMARY KEY ("EMP-ID", "YEAR-MONTH") +); + +-- 4. QUALIFICATION-CHANGES(資格異動テーブル) +CREATE TABLE "QUALIFICATION-CHANGES" ( + "CHG-ID" INTEGER NOT NULL, + "EMP-ID" CHAR(8) NOT NULL, + "CHG-DATE" CHAR(8) NOT NULL, + "CHG-TYPE" CHAR(2) NOT NULL, + "INSURER-CODE" CHAR(4) NOT NULL, + "PREV-INSURER" CHAR(4) NOT NULL, + "REASON" VARCHAR(100) NOT NULL, + "UPDATED-AT" TIMESTAMP NOT NULL, + PRIMARY KEY ("CHG-ID") +); + +-- 5. INSURER-MASTER(保険者マスタ) +CREATE TABLE "INSURER-MASTER" ( + "INSURER-CODE" CHAR(4) NOT NULL, + "INSURER-NAME" VARCHAR(60) NOT NULL, + "PREF-CODE" CHAR(2) NOT NULL, + "INSURER-TYPE" CHAR(1) NOT NULL, + "UPDATED-AT" TIMESTAMP NOT NULL, + PRIMARY KEY ("INSURER-CODE") +); diff --git a/src/KYU01CVT.cbl b/src/KYU01CVT.cbl index f479ceb..c2da002 100644 --- a/src/KYU01CVT.cbl +++ b/src/KYU01CVT.cbl @@ -1,4 +1,4 @@ - IDENTIFICATION DIVISION. + IDENTIFICATION DIVISION. PROGRAM-ID. KYU01CVT. ***************************************************************** * システム名 : 給与計算システム * @@ -8,7 +8,6 @@ * 処理概要 : CSV形式の社員マスタを固定長80Bに変換する * * 引用符内改行をINSPECT CONVERTINGで処理 * * 項目チェックはSUB04CHKで実施 * - * プログラム分類: No.21 CSV→FB変換(改行あり) * ***************************************************************** * 更新履歴 * *---------------------------------------------------------------* diff --git a/src/KYU02REG.cbl b/src/KYU02REG.cbl index 15fd9da..205bc94 100644 --- a/src/KYU02REG.cbl +++ b/src/KYU02REG.cbl @@ -1,4 +1,4 @@ - IDENTIFICATION DIVISION. + IDENTIFICATION DIVISION. PROGRAM-ID. KYU02REG. ***************************************************************** * システム名 : 給与計算システム * @@ -7,7 +7,6 @@ * 作成日 : 2026-07-01 * * 処理概要 : EMP-RECORDをDB2 EMP-MASTERにINSERT/UPSERT * * 重複時(-803)はUPDATEに切替 * - * プログラム分類: No.09 DB更新 * ***************************************************************** * 更新履歴 * *---------------------------------------------------------------* diff --git a/src/KYU03AGG.cbl b/src/KYU03AGG.cbl index b350a5d..0591d18 100644 --- a/src/KYU03AGG.cbl +++ b/src/KYU03AGG.cbl @@ -1,4 +1,4 @@ - IDENTIFICATION DIVISION. + IDENTIFICATION DIVISION. PROGRAM-ID. KYU03AGG. ***************************************************************** * システム名 : 給与計算システム * @@ -7,7 +7,6 @@ * 作成日 : 2026-07-01 * * 処理概要 : JCL SORT済み欠勤データを社員単位に集約 * * 同一社員内の欠勤時間・回数を集計 * - * プログラム分類: No.08 キーブレイク(集約) * ***************************************************************** * 更新履歴 * *---------------------------------------------------------------* diff --git a/src/KYU04CAL.cbl b/src/KYU04CAL.cbl index 4975826..685ea88 100644 --- a/src/KYU04CAL.cbl +++ b/src/KYU04CAL.cbl @@ -1,4 +1,4 @@ - IDENTIFICATION DIVISION. + IDENTIFICATION DIVISION. PROGRAM-ID. KYU04CAL. ***************************************************************** * システム名 : 給与計算システム * @@ -8,7 +8,6 @@ * 処理概要 : 欠勤集約 + EMP-MASTER + OVT-MONTHLY を * * 参照し給与計算を実行 * * 勤怠区分×手当種別の複合分岐はEVALUATE ALSO * - * プログラム分類: No.32 1:N+キーブレイク(同キー) * ***************************************************************** * 更新履歴 * *---------------------------------------------------------------* diff --git a/src/KYU05DED.cbl b/src/KYU05DED.cbl index 067b150..f6a8d2d 100644 --- a/src/KYU05DED.cbl +++ b/src/KYU05DED.cbl @@ -1,4 +1,4 @@ - IDENTIFICATION DIVISION. + IDENTIFICATION DIVISION. PROGRAM-ID. KYU05DED. ***************************************************************** * システム名 : 給与計算システム * @@ -9,7 +9,6 @@ * 社会保険料・住民税を計算しSALARY-NET出力 * * TAX-TABLE(DB2 SELECT ... BETWEEN) * * INSURANCE-TABLE(SEARCH ALL)を参照 * - * プログラム分類: No.23 SELECT条件 * ***************************************************************** * 更新履歴 * *---------------------------------------------------------------* diff --git a/src/KYU06UPD.cbl b/src/KYU06UPD.cbl index c2ace78..882560f 100644 --- a/src/KYU06UPD.cbl +++ b/src/KYU06UPD.cbl @@ -1,4 +1,4 @@ - IDENTIFICATION DIVISION. + IDENTIFICATION DIVISION. PROGRAM-ID. KYU06UPD. ***************************************************************** * システム名 : 給与計算システム * @@ -7,7 +7,6 @@ * 作成日 : 2026-07-01 * * 処理概要 : SALARY-NETをDB2 SALARY-RESULTSに登録 * * 重複時(-803)はUPDATEに切替 * - * プログラム分類: No.09 DB更新 * ***************************************************************** * 更新履歴 * *---------------------------------------------------------------* diff --git a/src/KYU07DIV.cbl b/src/KYU07DIV.cbl index f7119fe..15effc4 100644 --- a/src/KYU07DIV.cbl +++ b/src/KYU07DIV.cbl @@ -1,4 +1,4 @@ - IDENTIFICATION DIVISION. + IDENTIFICATION DIVISION. PROGRAM-ID. KYU07DIV. ***************************************************************** * システム名 : 給与計算システム * @@ -8,7 +8,6 @@ * 処理概要 : JCL SORT済SALARY-NETを部署コードに応じて * * 50ファイルに分割出力 * * 常に1ファイルのみOPEN * - * プログラム分類: No.10 50分割 * ***************************************************************** * 更新履歴 * *---------------------------------------------------------------* diff --git a/src/KYU08PRI.cbl b/src/KYU08PRI.cbl index 46e6c4d..d288def 100644 --- a/src/KYU08PRI.cbl +++ b/src/KYU08PRI.cbl @@ -1,4 +1,4 @@ - IDENTIFICATION DIVISION. + IDENTIFICATION DIVISION. PROGRAM-ID. KYU08PRI. ***************************************************************** * システム名 : 給与計算システム * @@ -7,7 +7,6 @@ * 作成日 : 2026-07-01 * * 処理概要 : JCL SORT済みSALARY-NETを給与明細(LINAGE) * * として印刷出力。1社員1ページ。 * - * プログラム分類: No.04 レイアウト編集のみ(GETPUT)+ LINAGE * ***************************************************************** * 更新履歴 * *---------------------------------------------------------------* diff --git a/src/KYU09MRG.cbl b/src/KYU09MRG.cbl index ff8a016..6b3f2e8 100644 --- a/src/KYU09MRG.cbl +++ b/src/KYU09MRG.cbl @@ -1,4 +1,4 @@ - IDENTIFICATION DIVISION. + IDENTIFICATION DIVISION. PROGRAM-ID. KYU09MRG. ***************************************************************** * システム名 : 給与計算システム * @@ -8,7 +8,6 @@ * 処理概要 : SALARY-NETとBONUS-DATAをMERGE文で * * 社員番号昇順に結合し、同一社員内の * * 給与(TYPE=S)と賞与(TYPE=B)を統合 * - * プログラム分類: No.35 MERGE(複数ファイル結合) * ***************************************************************** * 更新履歴 * *---------------------------------------------------------------* diff --git a/src/SHA01CVT.cbl b/src/SHA01CVT.cbl new file mode 100644 index 0000000..0b3fcdc --- /dev/null +++ b/src/SHA01CVT.cbl @@ -0,0 +1,482 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. SHA01CVT. + ***************************************************************** + * システム名 : 社会保険管理システム * + * プログラムID : SHA01CVT * + * プログラム名 : 被保険者資格データ変換処理 * + * 作成日 : 2026-07-11 * + * 処理概要 : ASCII CSVの被保険者資格データをINSPECT * + * CONVERTINGでEBCDIC固定長に変換する * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 2026-07-11 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT R01INNFIL ASSIGN TO EXTERNAL SHA01R01. + SELECT W01OUTFIL ASSIGN TO EXTERNAL SHA01W01. + SELECT W02OUTFIL ASSIGN TO EXTERNAL SHA01W02. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * R01: INS-CSV-ASCII(可変長CSV) * + ***************************************************************** + FD R01INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R01INNREC. + 03 R01-CSV-DATA PIC X(500). + * + ***************************************************************** + * W01: INSURED-DATA(200B FB via SHA01REC) * + ***************************************************************** + FD W01OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W01OUTREC. + COPY SHA01REC REPLACING ==(A)== BY ==W01==. + * + ***************************************************************** + * W02: ERROR-LOG(VB) * + ***************************************************************** + FD W02OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS V. + 01 W02OUTREC. + COPY ZAN05REC REPLACING ==(A)== BY ==W02==. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'SHA01CVT'. + 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-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-YEAR-MONTH PIC X(006). + 03 WRK-IDX PIC 9(004). + 03 WRK-CSV-FIELDS. + 05 WRK-C-EMP-ID PIC X(008). + 05 WRK-C-INSURED-NO PIC X(015). + 05 WRK-C-OFFICE-NO PIC X(006). + 05 WRK-C-INSURER-CODE PIC X(004). + 05 WRK-C-EMP-NAME PIC X(040). + 05 WRK-C-EMP-KANA PIC X(040). + 05 WRK-C-BIRTH-DATE PIC X(008). + 05 WRK-C-SEX PIC X(001). + 05 WRK-C-ENT-DATE PIC X(008). + 05 WRK-C-HEALTH-INS-TYPE + PIC X(001). + 05 WRK-C-PENSION-TYPE PIC X(001). + 05 WRK-C-STATUS PIC X(001). + 03 WRK-CONV-BEFORE PIC X(256). + 03 WRK-CONV-AFTER PIC X(256). + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + COPY SHADATAC. + COPY SHAMSGAC. + COPY SHAENDAC. + COPY SHACHKAC. + * + 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. + * PARM NUM検証 + MOVE 'NUM' TO C01CHKTYP. + MOVE WRK-YEAR-MONTH TO C01CHKDAT. + CALL 'SUB04CHK' USING C01CHKPAR. + IF C01CHKRRC NOT = 0 + INITIALIZE M00MHOPAR + MOVE CNS-MSGSUBEEK TO M00MSGCOD + MOVE 'PARM(YEARMONTH)' TO M00UMKDATS22-01 + MOVE WRK-YEAR-MONTH TO M00UMKDATS22-02 + PERFORM 4000MSGOUTSOR + PERFORM 9999ABDSOR + END-IF. + MOVE WRK-YEAR-MONTH TO CNS-YEAR-MONTH-PARM. + * + *** 運用日付取得 + CALL 'SUB01DAT' USING D01UBSPAR. + IF D01FKICOD NOT = ZERO + INITIALIZE M00MHOPAR + MOVE CNS-MSGSUBEEK TO M00MSGCOD + MOVE 'SUB01DAT' TO M00UMKDATS22-01 + MOVE D01FKICOD TO M00UMKDATS22-02 + PERFORM 4000MSGOUTSOR + PERFORM 9999ABDSOR + END-IF. + * + *** 変換テーブル初期化(同一マップ 開発用) + MOVE SPACES TO WRK-CONV-BEFORE. + MOVE SPACES TO WRK-CONV-AFTER. + PERFORM VARYING WRK-IDX + FROM 1 BY 1 + UNTIL WRK-IDX > 256 + MOVE FUNCTION CHAR + (WRK-IDX - 1) + TO WRK-CONV-BEFORE(WRK-IDX:1) + MOVE FUNCTION CHAR + (WRK-IDX - 1) + TO WRK-CONV-AFTER(WRK-IDX:1) + END-PERFORM. + * + OPEN INPUT R01INNFIL. + OPEN OUTPUT W01OUTFIL. + OPEN OUTPUT 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. + * + PERFORM 2010CSVSOR. + IF WRK-EOF-Y + EXIT SECTION + END-IF. + * + PERFORM 2020HALFSOR. + IF WRK-EOF-Y + EXIT SECTION + END-IF. + * + PERFORM 2030CNVSOR. + PERFORM 2040WRTSOR. + PERFORM 1100R01INNSOR. + * + 2000MAJSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.1) * + * サブモジュール名: CSV分解処理 * + ***************************************************************** + 2010CSVSOR SECTION. + * + INITIALIZE WRK-CSV-FIELDS. + * + UNSTRING R01-CSV-DATA + DELIMITED BY ',' + INTO WRK-C-EMP-ID + WRK-C-INSURED-NO + WRK-C-OFFICE-NO + WRK-C-INSURER-CODE + WRK-C-EMP-NAME + WRK-C-EMP-KANA + WRK-C-BIRTH-DATE + WRK-C-SEX + WRK-C-ENT-DATE + WRK-C-HEALTH-INS-TYPE + WRK-C-PENSION-TYPE + WRK-C-STATUS + END-UNSTRING. + * + 2010CSVSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.2) * + * サブモジュール名: 半角桁数チェック * + ***************************************************************** + 2020HALFSOR SECTION. + * + *** 氏名カナ半角20桁以内チェック + IF WRK-C-EMP-KANA(21:) NOT = SPACES + MOVE '01' TO W02ERR-CATEGORY + STRING 'KANA OVER 20: ' + WRK-C-EMP-KANA + INTO W02ERR-DETAIL + END-STRING + WRITE W02OUTREC + ADD 1 TO CUN-W02OUT + EXIT SECTION + END-IF. + * + *** 被保険者番号半角10桁以内チェック + IF WRK-C-INSURED-NO(11:) NOT = SPACES + MOVE '01' TO W02ERR-CATEGORY + STRING 'INSURED-NO OVER 10: ' + WRK-C-INSURED-NO + INTO W02ERR-DETAIL + END-STRING + WRITE W02OUTREC + ADD 1 TO CUN-W02OUT + EXIT SECTION + END-IF. + * + *** 事業所番号半角4桁以内チェック + IF WRK-C-OFFICE-NO(5:) NOT = SPACES + MOVE '01' TO W02ERR-CATEGORY + STRING 'OFFICE-NO OVER 4: ' + WRK-C-OFFICE-NO + INTO W02ERR-DETAIL + END-STRING + WRITE W02OUTREC + ADD 1 TO CUN-W02OUT + EXIT SECTION + END-IF. + * + *** 日付チェック(生年月日) + MOVE 'DATE' TO C01CHKTYP. + MOVE WRK-C-BIRTH-DATE TO C01CHKDAT. + CALL 'SUB04CHK' USING C01CHKPAR. + IF C01CHKRRC NOT = 0 + MOVE '01' TO W02ERR-CATEGORY + STRING 'BIRTH-DATE ERR: ' + WRK-C-BIRTH-DATE + INTO W02ERR-DETAIL + END-STRING + WRITE W02OUTREC + ADD 1 TO CUN-W02OUT + EXIT SECTION + END-IF. + * + *** 日付チェック(資格取得日) + MOVE 'DATE' TO C01CHKTYP. + MOVE WRK-C-ENT-DATE TO C01CHKDAT. + CALL 'SUB04CHK' USING C01CHKPAR. + IF C01CHKRRC NOT = 0 + MOVE '01' TO W02ERR-CATEGORY + STRING 'ENT-DATE ERR: ' + WRK-C-ENT-DATE + INTO W02ERR-DETAIL + END-STRING + WRITE W02OUTREC + ADD 1 TO CUN-W02OUT + EXIT SECTION + END-IF. + * + *** 数値チェック(社員番号) + MOVE 'NUMERIC' TO C01CHKTYP. + MOVE WRK-C-EMP-ID TO C01CHKDAT. + CALL 'SUB04CHK' USING C01CHKPAR. + IF C01CHKRRC NOT = 0 + MOVE '01' TO W02ERR-CATEGORY + STRING 'EMP-ID NUM ERR: ' + WRK-C-EMP-ID + INTO W02ERR-DETAIL + END-STRING + WRITE W02OUTREC + ADD 1 TO CUN-W02OUT + EXIT SECTION + END-IF. + * + 2020HALFSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.3) * + * サブモジュール名: ASCII→EBCDIC変換処理 * + ***************************************************************** + 2030CNVSOR SECTION. + * + INSPECT WRK-C-EMP-ID + CONVERTING WRK-CONV-BEFORE TO WRK-CONV-AFTER. + INSPECT WRK-C-INSURED-NO + CONVERTING WRK-CONV-BEFORE TO WRK-CONV-AFTER. + INSPECT WRK-C-OFFICE-NO + CONVERTING WRK-CONV-BEFORE TO WRK-CONV-AFTER. + INSPECT WRK-C-INSURER-CODE + CONVERTING WRK-CONV-BEFORE TO WRK-CONV-AFTER. + INSPECT WRK-C-EMP-NAME + CONVERTING WRK-CONV-BEFORE TO WRK-CONV-AFTER. + INSPECT WRK-C-EMP-KANA + CONVERTING WRK-CONV-BEFORE TO WRK-CONV-AFTER. + INSPECT WRK-C-BIRTH-DATE + CONVERTING WRK-CONV-BEFORE TO WRK-CONV-AFTER. + INSPECT WRK-C-SEX + CONVERTING WRK-CONV-BEFORE TO WRK-CONV-AFTER. + INSPECT WRK-C-ENT-DATE + CONVERTING WRK-CONV-BEFORE TO WRK-CONV-AFTER. + INSPECT WRK-C-HEALTH-INS-TYPE + CONVERTING WRK-CONV-BEFORE TO WRK-CONV-AFTER. + INSPECT WRK-C-PENSION-TYPE + CONVERTING WRK-CONV-BEFORE TO WRK-CONV-AFTER. + INSPECT WRK-C-STATUS + CONVERTING WRK-CONV-BEFORE TO WRK-CONV-AFTER. + * + 2030CNVSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.4) * + * サブモジュール名: W01出力処理 * + ***************************************************************** + 2040WRTSOR SECTION. + * + MOVE WRK-C-EMP-ID TO W01EMP-ID. + MOVE WRK-C-INSURED-NO TO W01INSURED-NO. + MOVE WRK-C-OFFICE-NO TO W01OFFICE-NO. + MOVE WRK-C-INSURER-CODE TO W01INSURER-CODE. + MOVE WRK-C-EMP-NAME TO W01EMP-NAME. + MOVE WRK-C-EMP-KANA TO W01EMP-KANA. + MOVE WRK-C-BIRTH-DATE TO W01BIRTH-DATE. + MOVE WRK-C-SEX TO W01SEX. + MOVE WRK-C-ENT-DATE TO W01ENT-DATE. + MOVE WRK-C-HEALTH-INS-TYPE TO W01HEALTH-INS-TYPE. + MOVE WRK-C-PENSION-TYPE TO W01PENSION-TYPE. + MOVE WRK-C-STATUS TO W01STATUS. + MOVE LOW-VALUES TO W01FILLER. + * + WRITE W01OUTREC. + ADD 1 TO CUN-W01OUT. + * + 2040WRTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (3.0) * + * サブモジュール名: 終了処理 * + ***************************************************************** + 3000STPSOR SECTION. + * + CLOSE R01INNFIL + W01OUTFIL + W02OUTFIL. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'SHA01R01' TO M00UMKDATS22-01. + MOVE CUN-R01INN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'SHA01W01' TO M00UMKDATS22-01. + MOVE CUN-W01OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'SHA01W02' 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/SHA02MNC.cbl b/src/SHA02MNC.cbl new file mode 100644 index 0000000..9913fa2 --- /dev/null +++ b/src/SHA02MNC.cbl @@ -0,0 +1,447 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. SHA02MNC. + ***************************************************************** + * システム名 : 社会保険管理システム * + * プログラムID : SHA02MNC * + * プログラム名 : 従業員保険情報統合処理 * + * 作成日 : 2026-07-11 * + * 処理概要 : DB2 EMP-MASTER従業員情報とINSURANCE-RATES * + * をマッチングし従業員単位に統合出力する * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 2026-07-11 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT W01OUTFIL ASSIGN TO EXTERNAL SHA02W01. + SELECT W02OUTFIL ASSIGN TO EXTERNAL SHA02W02. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * W01: EMP-INSURANCE(200B FB via SHA02REC) * + ***************************************************************** + FD W01OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W01OUTREC. + COPY SHA02REC REPLACING ==(A)== BY ==W01==. + * + ***************************************************************** + * W02: ERROR-LOG(VB) * + ***************************************************************** + FD W02OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS V. + 01 W02OUTREC. + COPY ZAN05REC REPLACING ==(A)== BY ==W02==. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * SQLCA * + ***************************************************************** + EXEC SQL INCLUDE SQLCA END-EXEC. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'SHA02MNC'. + 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-W01OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W02OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-DB-EMP 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). + 03 WRK-IDX PIC 9(004). + 03 WRK-RATE-COUNT PIC 9(003) VALUE ZERO. + 03 WRK-RATE-TBL. + 05 WRK-RATE-ENTRY OCCURS 100 + INDEXED BY WRK-RATE-IDX. + 07 WRK-GRADE-CODE PIC X(002). + 07 WRK-MONTHLY-FROM PIC 9(009). + 07 WRK-MONTHLY-TO PIC 9(009). + 07 WRK-HEALTH-RATE PIC 9(001)V9(006). + 07 WRK-PENSION-RATE PIC 9(001)V9(006). + * + ***************************************************************** + * 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-BASE-SALARY PIC 9(009). + 03 DBV-GRADE-CODE PIC X(002). + 03 DBV-MONTHLY-FROM PIC 9(009). + 03 DBV-MONTHLY-TO PIC 9(009). + 03 DBV-HEALTH-RATE PIC 9(001)V9(006). + 03 DBV-PENSION-RATE PIC 9(001)V9(006). + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + COPY SHADATAC. + COPY SHAMSGAC. + COPY SHAENDAC. + COPY SHACHKAC. + * + 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 CUNARA. + * + *** PARM取得 + ACCEPT WRK-YEAR-MONTH + FROM COMMAND-LINE. + IF WRK-YEAR-MONTH = SPACES + MOVE '202605' TO WRK-YEAR-MONTH + END-IF. + * PARM NUM検証 + MOVE 'NUM' TO C01CHKTYP. + MOVE WRK-YEAR-MONTH TO C01CHKDAT. + CALL 'SUB04CHK' USING C01CHKPAR. + IF C01CHKRRC NOT = 0 + INITIALIZE M00MHOPAR + MOVE CNS-MSGSUBEEK TO M00MSGCOD + MOVE 'PARM(YEARMONTH)' TO M00UMKDATS22-01 + MOVE WRK-YEAR-MONTH TO M00UMKDATS22-02 + PERFORM 4000MSGOUTSOR + PERFORM 9999ABDSOR + END-IF. + MOVE WRK-YEAR-MONTH TO CNS-YEAR-MONTH-PARM. + * + *** 運用日付取得 + CALL 'SUB01DAT' USING D01UBSPAR. + IF D01FKICOD NOT = ZERO + INITIALIZE M00MHOPAR + MOVE CNS-MSGSUBEEK TO M00MSGCOD + MOVE 'SUB01DAT' TO M00UMKDATS22-01 + MOVE D01FKICOD TO M00UMKDATS22-02 + PERFORM 4000MSGOUTSOR + PERFORM 9999ABDSOR + END-IF. + * + *** DB接続 + EXEC SQL + CONNECT TO 'data/INSURANCEDB.db' + END-EXEC. + IF SQLCODE NOT = 0 + INITIALIZE M00MHOPAR + MOVE CNS-MSGSUBEEK TO M00MSGCOD + MOVE 'DB-CONNECT' TO M00UMKDATS22-01 + MOVE SQLCODE TO M00UMKDATS22-02 + PERFORM 4000MSGOUTSOR + PERFORM 9999ABDSOR + END-IF. + * + *** INSURANCE-RATES内部表LOAD + PERFORM 1200RATELDASOR. + * + *** EMP-MASTERカーソル宣言 + EXEC SQL + DECLARE C2 CURSOR FOR + SELECT EMP-ID, EMP-NAME, DEPT-CODE, + BASE-SALARY + FROM SALARYDB.EMP-MASTER + ORDER BY EMP-ID + END-EXEC. + * + *** EMP-MASTERカーソルOPEN + EXEC SQL + OPEN C2 + END-EXEC. + IF SQLCODE NOT = 0 + INITIALIZE M00MHOPAR + MOVE CNS-MSGSUBEEK TO M00MSGCOD + MOVE 'EMP-OPEN' TO M00UMKDATS22-01 + MOVE SQLCODE TO M00UMKDATS22-02 + PERFORM 4000MSGOUTSOR + PERFORM 9999ABDSOR + END-IF. + * + OPEN OUTPUT W01OUTFIL. + OPEN OUTPUT W02OUTFIL. + * + *** 初回FETCH + PERFORM 1300EMPFETCSOR. + * + 1000ITTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (1.1) * + * サブモジュール名: RATES内部表LOAD * + ***************************************************************** + 1200RATELDASOR SECTION. + * + MOVE 1 TO WRK-IDX. + MOVE ZERO TO WRK-RATE-COUNT. + * + EXEC SQL + DECLARE C1 CURSOR FOR + SELECT GRADE-CODE, MONTHLY-FROM, MONTHLY-TO, + HEALTH-RATE, PENSION-RATE + FROM INSURANCE-RATES + WHERE EFFECTIVE-FROM <= :WRK-YEAR-MONTH + AND EFFECTIVE-TO >= :WRK-YEAR-MONTH + ORDER BY GRADE-CODE + END-EXEC. + * + EXEC SQL + OPEN C1 + END-EXEC. + IF SQLCODE NOT = 0 + INITIALIZE M00MHOPAR + MOVE CNS-MSGSUBEEK TO M00MSGCOD + MOVE 'RATES-OPEN' TO M00UMKDATS22-01 + MOVE SQLCODE TO M00UMKDATS22-02 + PERFORM 4000MSGOUTSOR + PERFORM 9999ABDSOR + END-IF. + * + PERFORM UNTIL SQLCODE NOT = 0 + EXEC SQL + FETCH C1 + INTO :DBV-GRADE-CODE, + :DBV-MONTHLY-FROM, + :DBV-MONTHLY-TO, + :DBV-HEALTH-RATE, + :DBV-PENSION-RATE + END-EXEC + IF SQLCODE = 0 + MOVE DBV-GRADE-CODE + TO WRK-GRADE-CODE(WRK-IDX) + MOVE DBV-MONTHLY-FROM + TO WRK-MONTHLY-FROM(WRK-IDX) + MOVE DBV-MONTHLY-TO + TO WRK-MONTHLY-TO(WRK-IDX) + MOVE DBV-HEALTH-RATE + TO WRK-HEALTH-RATE(WRK-IDX) + MOVE DBV-PENSION-RATE + TO WRK-PENSION-RATE(WRK-IDX) + ADD 1 TO WRK-IDX + ADD 1 TO WRK-RATE-COUNT + END-IF + END-PERFORM. + * + EXEC SQL + CLOSE C1 + END-EXEC. + * + 1200RATELDASOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (1.2) * + * サブモジュール名: EMP-MASTER FETCH処理 * + ***************************************************************** + 1300EMPFETCSOR SECTION. + * + EXEC SQL + FETCH C2 + INTO :DBV-EMP-ID, + :DBV-EMP-NAME, + :DBV-DEPT-CODE, + :DBV-BASE-SALARY + END-EXEC. + * + IF SQLCODE = 0 + ADD 1 TO CUN-DB-EMP + ELSE + SET WRK-EOF-Y TO TRUE + END-IF. + * + 1300EMPFETCSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.0) * + * サブモジュール名: 主処理 * + ***************************************************************** + 2000MAJSOR SECTION. + * + *** SEARCHで該当GRADE-CODEを特定 + SET WRK-RATE-IDX TO 1. + SEARCH WRK-RATE-ENTRY + AT END + MOVE '01' TO W02ERR-CATEGORY + STRING 'NO MATCH GRADE: ' + DBV-EMP-ID + INTO W02ERR-DETAIL + END-STRING + WRITE W02OUTREC + ADD 1 TO CUN-W02OUT + PERFORM 1300EMPFETCSOR + EXIT SECTION + WHEN WRK-MONTHLY-FROM(WRK-RATE-IDX) + <= DBV-BASE-SALARY + AND WRK-MONTHLY-TO(WRK-RATE-IDX) + >= DBV-BASE-SALARY + CONTINUE + END-SEARCH. + * + *** 種別判定(DEPT-CODE) + EVALUATE DBV-DEPT-CODE + WHEN 1 THRU 10 + MOVE '1' TO W01HEALTH-INS-TYPE + MOVE '1' TO W01PENSION-TYPE + MOVE '0001' TO W01INSURER-CODE + WHEN 11 THRU 20 + MOVE '2' TO W01HEALTH-INS-TYPE + MOVE '1' TO W01PENSION-TYPE + MOVE '0002' TO W01INSURER-CODE + WHEN 21 THRU 30 + MOVE '1' TO W01HEALTH-INS-TYPE + MOVE '2' TO W01PENSION-TYPE + MOVE '0003' TO W01INSURER-CODE + WHEN OTHER + MOVE '9' TO W01HEALTH-INS-TYPE + MOVE '9' TO W01PENSION-TYPE + MOVE '0009' TO W01INSURER-CODE + END-EVALUATE. + * + *** 出力レコード編集 + MOVE DBV-EMP-ID TO W01EMP-ID. + MOVE DBV-EMP-NAME TO W01EMP-NAME. + MOVE DBV-DEPT-CODE TO W01DEPT-CODE. + MOVE DBV-BASE-SALARY TO W01BASE-SALARY. + MOVE WRK-MONTHLY-FROM( + WRK-RATE-IDX) TO W01MONTHLY-AMOUNT. + MOVE WRK-GRADE-CODE( + WRK-RATE-IDX) TO W01GRADE-CODE. + MOVE LOW-VALUES TO W01FILLER. + * + WRITE W01OUTREC. + ADD 1 TO CUN-W01OUT. + * + *** 次従業員FETCH + PERFORM 1300EMPFETCSOR. + * + 2000MAJSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (3.0) * + * サブモジュール名: 終了処理 * + ***************************************************************** + 3000STPSOR SECTION. + * + EXEC SQL + CLOSE C2 + END-EXEC. + * + CLOSE W01OUTFIL + W02OUTFIL. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'EMP-MASTER' TO M00UMKDATS22-01. + MOVE CUN-DB-EMP TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'SHA02W01' TO M00UMKDATS22-01. + MOVE CUN-W01OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'SHA02W02' 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/SHA03MNP.cbl b/src/SHA03MNP.cbl new file mode 100644 index 0000000..65b7d52 --- /dev/null +++ b/src/SHA03MNP.cbl @@ -0,0 +1,409 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. SHA03MNP. + ***************************************************************** + * システム名 : 社会保険管理システム * + * プログラムID : SHA03MNP * + * プログラム名 : 保険料計算明細出力処理 * + * 作成日 : 2026-07-11 * + * 処理概要 : EMP-INSURANCE × INSURANCE-RATESの直積組合せ * + * により保険料計算明細を出力する * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 2026-07-11 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT R01INNFIL ASSIGN TO EXTERNAL SHA03R01. + SELECT W01OUTFIL ASSIGN TO EXTERNAL SHA03W01. + SELECT W02OUTFIL ASSIGN TO EXTERNAL SHA03W02. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * R01: EMP-INSURANCE(200B FB via SHA02REC) * + ***************************************************************** + FD R01INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R01INNREC. + COPY SHA02REC REPLACING ==(A)== BY ==R01==. + * + ***************************************************************** + * W01: INS-DETAIL(300B FB via SHA03REC) * + ***************************************************************** + FD W01OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W01OUTREC. + COPY SHA03REC REPLACING ==(A)== BY ==W01==. + * + ***************************************************************** + * W02: ERROR-LOG(VB) * + ***************************************************************** + FD W02OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS V. + 01 W02OUTREC. + COPY ZAN05REC REPLACING ==(A)== BY ==W02==. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * SQLCA * + ***************************************************************** + EXEC SQL INCLUDE SQLCA END-EXEC. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'SHA03MNP'. + 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-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-YEAR-MONTH PIC X(006). + 03 WRK-IDX PIC 9(004). + 03 WRK-RATE-COUNT PIC 9(003) VALUE ZERO. + 03 WRK-INS-TYPE-IDX PIC 9(001) VALUE ZERO. + 03 WRK-RATE-TBL. + 05 WRK-RATE-ENTRY OCCURS 100 + INDEXED BY WRK-RATE-IDX. + 07 WRK-GRADE-CODE PIC X(002). + 07 WRK-MONTHLY-FROM PIC 9(009). + 07 WRK-MONTHLY-TO PIC 9(009). + 07 WRK-HEALTH-RATE PIC 9(001)V9(006). + 07 WRK-PENSION-RATE PIC 9(001)V9(006). + 03 WRK-HEALTH-PREMIUM PIC 9(009). + 03 WRK-PENSION-PREMIUM PIC 9(009). + * + ***************************************************************** + * DB2ホスト変数 * + ***************************************************************** + 01 DBVARA. + 03 DBV-GRADE-CODE PIC X(002). + 03 DBV-MONTHLY-FROM PIC 9(009). + 03 DBV-MONTHLY-TO PIC 9(009). + 03 DBV-HEALTH-RATE PIC 9(001)V9(006). + 03 DBV-PENSION-RATE PIC 9(001)V9(006). + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + COPY SHADATAC. + COPY SHAMSGAC. + COPY SHAENDAC. + * + 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 CUNARA. + * + *** 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. + * + *** 運用日付取得 + CALL 'SUB01DAT' USING D01UBSPAR. + IF D01FKICOD NOT = ZERO + INITIALIZE M00MHOPAR + MOVE CNS-MSGSUBEEK TO M00MSGCOD + MOVE 'SUB01DAT' TO M00UMKDATS22-01 + MOVE D01FKICOD TO M00UMKDATS22-02 + PERFORM 4000MSGOUTSOR + PERFORM 9999ABDSOR + END-IF. + * + *** DB接続 + EXEC SQL + CONNECT TO 'data/INSURANCEDB.db' + END-EXEC. + IF SQLCODE NOT = 0 + INITIALIZE M00MHOPAR + MOVE CNS-MSGSUBEEK TO M00MSGCOD + MOVE 'DB-CONNECT' TO M00UMKDATS22-01 + MOVE SQLCODE TO M00UMKDATS22-02 + PERFORM 4000MSGOUTSOR + PERFORM 9999ABDSOR + END-IF. + * + *** INSURANCE-RATES内部表LOAD + PERFORM 1200RATELDASOR. + * + OPEN INPUT R01INNFIL. + OPEN OUTPUT W01OUTFIL. + OPEN OUTPUT W02OUTFIL. + * + PERFORM 1300R01INNSOR. + * + 1000ITTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (1.1) * + * サブモジュール名: RATES内部表LOAD * + ***************************************************************** + 1200RATELDASOR SECTION. + * + MOVE 1 TO WRK-IDX. + MOVE ZERO TO WRK-RATE-COUNT. + * + EXEC SQL + DECLARE C1 CURSOR FOR + SELECT GRADE-CODE, MONTHLY-FROM, MONTHLY-TO, + HEALTH-RATE, PENSION-RATE + FROM INSURANCE-RATES + WHERE EFFECTIVE-FROM <= :WRK-YEAR-MONTH + AND EFFECTIVE-TO >= :WRK-YEAR-MONTH + ORDER BY GRADE-CODE + END-EXEC. + * + EXEC SQL + OPEN C1 + END-EXEC. + IF SQLCODE NOT = 0 + INITIALIZE M00MHOPAR + MOVE CNS-MSGSUBEEK TO M00MSGCOD + MOVE 'RATES-OPEN' TO M00UMKDATS22-01 + MOVE SQLCODE TO M00UMKDATS22-02 + PERFORM 4000MSGOUTSOR + PERFORM 9999ABDSOR + END-IF. + * + PERFORM UNTIL SQLCODE NOT = 0 + EXEC SQL + FETCH C1 + INTO :DBV-GRADE-CODE, + :DBV-MONTHLY-FROM, + :DBV-MONTHLY-TO, + :DBV-HEALTH-RATE, + :DBV-PENSION-RATE + END-EXEC + IF SQLCODE = 0 + MOVE DBV-GRADE-CODE + TO WRK-GRADE-CODE(WRK-IDX) + MOVE DBV-MONTHLY-FROM + TO WRK-MONTHLY-FROM(WRK-IDX) + MOVE DBV-MONTHLY-TO + TO WRK-MONTHLY-TO(WRK-IDX) + MOVE DBV-HEALTH-RATE + TO WRK-HEALTH-RATE(WRK-IDX) + MOVE DBV-PENSION-RATE + TO WRK-PENSION-RATE(WRK-IDX) + ADD 1 TO WRK-IDX + ADD 1 TO WRK-RATE-COUNT + END-IF + END-PERFORM. + * + EXEC SQL + CLOSE C1 + END-EXEC. + * + 1200RATELDASOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (1.2) * + * サブモジュール名: R01読込処理 * + ***************************************************************** + 1300R01INNSOR SECTION. + * + READ R01INNFIL + AT END + SET WRK-EOF-Y TO TRUE + NOT AT END + ADD 1 TO CUN-R01INN + END-READ. + * + 1300R01INNSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.0) * + * サブモジュール名: 主処理 * + ***************************************************************** + 2000MAJSOR SECTION. + MOVE 1 TO WRK-IDX. + PERFORM UNTIL WRK-IDX > WRK-RATE-COUNT + MOVE R01EMP-ID TO W01EMP-ID + MOVE R01EMP-NAME TO W01EMP-NAME + MOVE '1' TO W01INSURANCE-TYPE + MOVE WRK-GRADE-CODE(WRK-IDX) + TO W01GRADE-CODE + MOVE R01MONTHLY-AMOUNT TO W01MONTHLY-AMOUNT + MOVE WRK-HEALTH-RATE(WRK-IDX) + TO W01HEALTH-RATE + MOVE WRK-PENSION-RATE(WRK-IDX) + TO W01PENSION-RATE + MULTIPLY R01MONTHLY-AMOUNT + BY WRK-HEALTH-RATE(WRK-IDX) + GIVING WRK-HEALTH-PREMIUM ROUNDED + MOVE ZERO TO WRK-PENSION-PREMIUM + MOVE WRK-HEALTH-PREMIUM TO W01HEALTH-PREMIUM + MOVE WRK-PENSION-PREMIUM TO W01PENSION-PREMIUM + MOVE LOW-VALUES TO W01FILLER + WRITE W01OUTREC + ADD 1 TO CUN-W01OUT + MOVE R01EMP-ID TO W01EMP-ID + MOVE R01EMP-NAME TO W01EMP-NAME + MOVE '2' TO W01INSURANCE-TYPE + MOVE WRK-GRADE-CODE(WRK-IDX) + TO W01GRADE-CODE + MOVE R01MONTHLY-AMOUNT TO W01MONTHLY-AMOUNT + MOVE WRK-HEALTH-RATE(WRK-IDX) + TO W01HEALTH-RATE + MOVE WRK-PENSION-RATE(WRK-IDX) + TO W01PENSION-RATE + MOVE ZERO TO WRK-HEALTH-PREMIUM + MULTIPLY R01MONTHLY-AMOUNT + BY WRK-PENSION-RATE(WRK-IDX) + GIVING WRK-PENSION-PREMIUM ROUNDED + MOVE WRK-HEALTH-PREMIUM TO W01HEALTH-PREMIUM + MOVE WRK-PENSION-PREMIUM TO W01PENSION-PREMIUM + MOVE LOW-VALUES TO W01FILLER + WRITE W01OUTREC + ADD 1 TO CUN-W01OUT + ADD 1 TO WRK-IDX + END-PERFORM. + PERFORM 1300R01INNSOR. + 2000MAJSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.9) * + * サブモジュール名: エラー出力処理 * + ***************************************************************** + 2100ERROUTSOR SECTION. + * + WRITE W02OUTREC. + ADD 1 TO CUN-W02OUT. + * + 2100ERROUTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (3.0) * + * サブモジュール名: 終了処理 * + ***************************************************************** + 3000STPSOR SECTION. + * + CLOSE R01INNFIL + W01OUTFIL + W02OUTFIL. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'SHA03R01' TO M00UMKDATS22-01. + MOVE CUN-R01INN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'SHA03W01' TO M00UMKDATS22-01. + MOVE CUN-W01OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'SHA03W02' 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/SHA04TWO.cbl b/src/SHA04TWO.cbl new file mode 100644 index 0000000..aaa3979 --- /dev/null +++ b/src/SHA04TWO.cbl @@ -0,0 +1,543 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. SHA04TWO IS INITIAL. + ***************************************************************** + * システム名 : 社会保険管理システム * + * プログラムID : SHA04TWO * + * プログラム名 : 事業所保険者マッチング処理 * + * 作成日 : 2026-07-11 * + * 処理概要 : INSURED-DATAをOFFICE-MST/INSURER-MSTの * + * 2段階で1:1マッチングし、GRADED-LIST/ * + * UNMATCHED-LISTを出力する * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 2026-07-11 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT R01INNFIL ASSIGN TO EXTERNAL SHA04R01. + SELECT R02INNFIL ASSIGN TO EXTERNAL SHA04R02. + SELECT R03INNFIL ASSIGN TO EXTERNAL SHA04R03. + SELECT W01OUTFIL ASSIGN TO EXTERNAL SHA04W01. + SELECT W02OUTFIL ASSIGN TO EXTERNAL SHA04W02. + SELECT W03OUTFIL ASSIGN TO EXTERNAL SHA04W03. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * R01: INSURED-DATA(200B FB SHA01CVT出力) * + ***************************************************************** + FD R01INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R01INNREC. + COPY SHA01REC REPLACING ==(A)== BY ==R01==. + * + ***************************************************************** + * R02: OFFICE-MST(80B FB 自前レイアウト) * + ***************************************************************** + FD R02INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R02INNREC. + 03 R02OFFICE-NO PIC X(004). + 03 R02OFFICE-NAME PIC X(040). + 03 R02PREF-CODE PIC 9(002). + 03 R02FILLER PIC X(034). + * + ***************************************************************** + * R03: INSURER-MST(80B FB 自前レイアウト) * + ***************************************************************** + FD R03INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R03INNREC. + 03 R03INSURER-CODE PIC X(004). + 03 R03INSURER-NAME PIC X(060). + 03 R03FILLER PIC X(016). + * + ***************************************************************** + * W01: GRADED-LIST(200B FB SHA04REC) * + ***************************************************************** + FD W01OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W01OUTREC. + COPY SHA04REC REPLACING ==(A)== BY ==W01==. + * + ***************************************************************** + * W02: UNMATCHED-LIST(200B FB 自前レイアウト) * + ***************************************************************** + FD W02OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W02OUTREC. + 03 W02EMP-ID PIC 9(008). + 03 W02EMP-NAME PIC X(040). + 03 W02OFFICE-NO PIC X(004). + 03 W02OFFICE-NAME PIC X(040). + 03 W02PREF-CODE PIC 9(002). + 03 W02INSURER-CODE PIC X(004). + 03 W02INSURER-NAME PIC X(060). + 03 W02STATUS PIC X(001). + 03 W02FILLER PIC X(041). + * + ***************************************************************** + * W03: ERROR-LOG(VB) * + ***************************************************************** + FD W03OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS V. + 01 W03OUTREC. + COPY ZAN05REC REPLACING ==(A)== BY ==W03==. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * SQLCA * + ***************************************************************** + EXEC SQL INCLUDE SQLCA END-EXEC. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'SHA04TWO'. + 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-R02INN PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-R03INN 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. + 03 CUN-W03OUT PIC S9(009) COMP-3 VALUE ZERO. + * + ***************************************************************** + * 作業領域 * + ***************************************************************** + 01 WRKARA. + 03 WRK-EOF PIC X(001). + 88 WRK-EOF-Y VALUE '1'. + 03 WRK-SQLCODE PIC S9(009) COMP. + 03 WRK-STAGE1-FLG PIC X(001). + 88 WRK-STAGE1-FOUND VALUE 'Y'. + 03 WRK-STAGE2-FLG PIC X(001). + 88 WRK-STAGE2-FOUND VALUE 'Y'. + 03 WRK-I PIC 9(004) COMP. + 03 WRK-J PIC 9(004) COMP. + 03 WRK-R02-EOF PIC X(001). + 88 R02-EOF-Y VALUE '1'. + 03 WRK-R03-EOF PIC X(001). + 88 R03-EOF-Y VALUE '1'. + 03 WS-DISP-INT PIC S9(009). + * + ***************************************************************** + * DB2ホスト変数 * + ***************************************************************** + 01 DBVARA. + 03 DBV-EMP-ID PIC X(008). + 03 DBV-INSURED-NO PIC X(010). + 03 DBV-STATUS PIC X(001). + * + ***************************************************************** + * 事業所マスタ内部テーブル * + ***************************************************************** + 01 OFFICE-TBL. + 03 OFFICE-ENTRY OCCURS 100. + 05 TBL-OFFICE-NO PIC X(004). + 05 TBL-OFFICE-NAME PIC X(040). + 05 TBL-PREF-CODE PIC 9(002). + 05 TBL-FILLER PIC X(034). + 01 OFFICE-COUNT PIC 9(004) VALUE ZERO. + * + ***************************************************************** + * 保険者マスタ内部テーブル * + ***************************************************************** + 01 INSURER-TBL. + 03 INSURER-ENTRY OCCURS 100. + 05 TBL-INSURER-CODE PIC X(004). + 05 TBL-INSURER-NAME PIC X(060). + 05 TBL-FILLER PIC X(016). + 01 INSURER-COUNT PIC 9(004) VALUE ZERO. + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + COPY SHAMSGAC. + COPY SHAENDAC. + COPY SHADATAC. + * + 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 + INITIALIZE M00MHOPAR + MOVE CNS-MSGSUBEEK TO M00MSGCOD + MOVE 'SUB01DAT' TO M00UMKDATS22-01 + MOVE D01FKICOD TO M00UMKDATS22-02 + PERFORM 4000MSGOUTSOR + PERFORM 9999ABDSOR + END-IF. + * + OPEN INPUT R01INNFIL + R02INNFIL + R03INNFIL. + OPEN OUTPUT W01OUTFIL + W02OUTFIL + W03OUTFIL. + * + *** DB接続 + EXEC SQL + CONNECT TO 'data/INSURANCEDB.db' + END-EXEC. + * + MOVE 0 TO WS-DISP-INT. + * + *** 事業所マスタ全件読込 + PERFORM 1110R02LDASOR + UNTIL R02-EOF-Y. + * + *** 保険者マスタ全件読込 + PERFORM 1120R03LDASOR + UNTIL R03-EOF-Y. + * + 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: (1.2) * + * サブモジュール名: R02読込処理(全件→内部テーブル) * + ***************************************************************** + 1110R02LDASOR SECTION. + * + READ R02INNFIL + AT END + SET R02-EOF-Y TO TRUE + NOT AT END + ADD 1 TO CUN-R02INN + ADD 1 TO OFFICE-COUNT + MOVE R02OFFICE-NO TO + TBL-OFFICE-NO (OFFICE-COUNT) + MOVE R02OFFICE-NAME TO + TBL-OFFICE-NAME (OFFICE-COUNT) + MOVE R02PREF-CODE TO + TBL-PREF-CODE (OFFICE-COUNT) + END-READ. + * + 1110R02LDASOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (1.3) * + * サブモジュール名: R03読込処理(全件→内部テーブル) * + ***************************************************************** + 1120R03LDASOR SECTION. + * + READ R03INNFIL + AT END + SET R03-EOF-Y TO TRUE + NOT AT END + ADD 1 TO CUN-R03INN + ADD 1 TO INSURER-COUNT + MOVE R03INSURER-CODE TO + TBL-INSURER-CODE (INSURER-COUNT) + MOVE R03INSURER-NAME TO + TBL-INSURER-NAME (INSURER-COUNT) + END-READ. + * + 1120R03LDASOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.0) * + * サブモジュール名: 主処理 * + ***************************************************************** + 2000MAJSOR SECTION. + * + MOVE 'N' TO WRK-STAGE1-FLG. + MOVE 'N' TO WRK-STAGE2-FLG. + * + PERFORM 2010STG1SOR. + * + IF WRK-STAGE1-FOUND + PERFORM 2020STG2SOR + END-IF. + * + IF WRK-STAGE1-FOUND + AND WRK-STAGE2-FOUND + PERFORM 2030W01OUTSOR + ELSE + PERFORM 2040W02OUTSOR + END-IF. + * + PERFORM 1100R01INNSOR. + * + 2000MAJSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.1) * + * サブモジュール名: 第1段階マッチング(OFFICE-NO) * + ***************************************************************** + 2010STG1SOR SECTION. + * + PERFORM VARYING WRK-I FROM 1 BY 1 + UNTIL WRK-I > OFFICE-COUNT + OR WRK-STAGE1-FOUND + IF R01OFFICE-NO = + TBL-OFFICE-NO (WRK-I) + SET WRK-STAGE1-FOUND TO TRUE + END-IF + END-PERFORM. + * + 2010STG1SOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.2) * + * サブモジュール名: 第2段階マッチング(INSURER-CODE) * + ***************************************************************** + 2020STG2SOR SECTION. + * + PERFORM VARYING WRK-J FROM 1 BY 1 + UNTIL WRK-J > INSURER-COUNT + OR WRK-STAGE2-FOUND + IF R01INSURER-CODE = + TBL-INSURER-CODE (WRK-J) + SET WRK-STAGE2-FOUND TO TRUE + END-IF + END-PERFORM. + * + 2020STG2SOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.3) * + * サブモジュール名: GRADED-LIST出力 * + ***************************************************************** + 2030W01OUTSOR SECTION. + * + INITIALIZE W01OUTREC. + * + MOVE R01EMP-ID TO W01EMP-ID. + MOVE R01EMP-NAME TO W01EMP-NAME. + MOVE R01OFFICE-NO TO W01OFFICE-NO. + MOVE TBL-OFFICE-NAME (WRK-I) TO W01OFFICE-NAME. + MOVE TBL-PREF-CODE (WRK-I) TO W01PREF-CODE. + MOVE R01INSURER-CODE TO W01INSURER-CODE. + MOVE TBL-INSURER-NAME (WRK-J) + TO W01INSURER-NAME. + * + WRITE W01OUTREC. + ADD 1 TO CUN-W01OUT. + * + *** DB2整合性検証 + MOVE R01EMP-ID TO DBV-EMP-ID. + MOVE R01INSURED-NO TO DBV-INSURED-NO. + * + EXEC SQL + SELECT STATUS + INTO :DBV-STATUS + FROM INSURED-MASTER + WHERE EMP-ID = :DBV-EMP-ID + AND INSURED-NO = :DBV-INSURED-NO + END-EXEC. + * + IF SQLCODE NOT = 0 + MOVE 01 TO W03ERR-CATEGORY + MOVE SQLCODE TO WS-DISP-INT + STRING + DBV-EMP-ID + ' SQLCODE=' + WS-DISP-INT + INTO W03ERR-DETAIL + END-STRING + WRITE W03OUTREC + ADD 1 TO CUN-W03OUT + END-IF. + * + 2030W01OUTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.4) * + * サブモジュール名: UNMATCHED-LIST出力 * + ***************************************************************** + 2040W02OUTSOR SECTION. + * + INITIALIZE W02OUTREC. + * + MOVE R01EMP-ID TO W02EMP-ID. + MOVE R01EMP-NAME TO W02EMP-NAME. + MOVE R01OFFICE-NO TO W02OFFICE-NO. + MOVE R01INSURER-CODE TO W02INSURER-CODE. + * + IF WRK-STAGE1-FOUND + MOVE TBL-OFFICE-NAME (WRK-I) + TO W02OFFICE-NAME + MOVE TBL-PREF-CODE (WRK-I) + TO W02PREF-CODE + END-IF. + * + IF WRK-STAGE2-FOUND + MOVE TBL-INSURER-NAME (WRK-J) + TO W02INSURER-NAME + END-IF. + * + IF NOT WRK-STAGE1-FOUND + MOVE '1' TO W02STATUS + ELSE + MOVE '2' TO W02STATUS + END-IF. + * + WRITE W02OUTREC. + ADD 1 TO CUN-W02OUT. + * + 2040W02OUTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (3.0) * + * サブモジュール名: 終了処理 * + ***************************************************************** + 3000STPSOR SECTION. + * + CLOSE R01INNFIL + R02INNFIL + R03INNFIL + W01OUTFIL + W02OUTFIL + W03OUTFIL. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'SHA04R01' TO M00UMKDATS22-01. + MOVE CUN-R01INN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'SHA04W01' TO M00UMKDATS22-01. + MOVE CUN-W01OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'SHA04W02' TO M00UMKDATS22-01. + MOVE CUN-W02OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'SHA04W03' 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/SHA05TWN.cbl b/src/SHA05TWN.cbl new file mode 100644 index 0000000..01d8d33 --- /dev/null +++ b/src/SHA05TWN.cbl @@ -0,0 +1,459 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. SHA05TWN. + ***************************************************************** + * システム名 : 社会保険管理システム * + * プログラムID : SHA05TWN * + * プログラム名 : 標準報酬月額等級判定処理 * + * 作成日 : 2026-07-11 * + * 処理概要 : SALARY-MONTHLYをEMP-IDでN:1キーブレイク * + * 集約し、平均標準報酬月額とGRADE-TBLを * + * N:1マッチングして等級改定を判定する * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 2026-07-11 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT R01INNFIL ASSIGN TO EXTERNAL SHA05R01. + SELECT R02INNFIL ASSIGN TO EXTERNAL SHA05R02. + SELECT W01OUTFIL ASSIGN TO EXTERNAL SHA05W01. + SELECT W02OUTFIL ASSIGN TO EXTERNAL SHA05W02. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * R01: SALARY-MONTHLY(200B FB 自前レイアウト) * + ***************************************************************** + FD R01INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R01INNREC. + 03 R01EMP-ID PIC 9(008). + 03 R01EMP-NAME PIC X(040). + 03 R01YEAR-MONTH PIC 9(006). + 03 R01MONTHLY-AMOUNT PIC 9(009). + 03 R01FILLER PIC X(137). + * + ***************************************************************** + * R02: GRADE-TBL(80B FB 自前レイアウト) * + ***************************************************************** + FD R02INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R02INNREC. + 03 R02GRADE-CODE PIC 9(002). + 03 R02MONTHLY-FROM PIC 9(009). + 03 R02MONTHLY-TO PIC 9(009). + 03 R02FILLER PIC X(060). + * + ***************************************************************** + * W01: REVISED-GRADE(200B FB SHA05REC) * + ***************************************************************** + FD W01OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W01OUTREC. + COPY SHA05REC REPLACING ==(A)== BY ==W01==. + * + ***************************************************************** + * W02: ERROR-LOG(VB) * + ***************************************************************** + FD W02OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS V. + 01 W02OUTREC. + COPY ZAN05REC REPLACING ==(A)== BY ==W02==. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'SHA05TWN'. + 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-DEFAULT-YM PIC X(006) VALUE '202607'. + * + ***************************************************************** + * カウンタ領域 * + ***************************************************************** + 01 CUNARA. + 03 CUN-R01INN PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-R02INN 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-R02-EOF PIC X(001). + 88 WRK-R02-EOF-Y VALUE '1'. + 03 WRK-FIRST-FLG PIC X(001). + 88 WRK-FIRST-REC VALUE '1'. + 03 WRK-PREV-EMP-ID PIC 9(008). + 03 WRK-EMP-NAME PIC X(040). + 03 WRK-YEAR-MONTH PIC X(006). + 03 WRK-TOTAL PIC 9(018) COMP-3. + 03 WRK-COUNT PIC 9(004) COMP-3. + 03 WRK-AVG PIC 9(009). + 03 WRK-REM PIC 9(009). + 03 WRK-REVISED-TYPE PIC X(001). + 03 WRK-I PIC 9(004) COMP. + 03 WRK-GRADE-FOUND PIC X(001). + 88 WRK-GRADE-FOUND-Y VALUE 'Y'. + 03 WRK-NEW-GRADE PIC 9(002). + 03 WRK-OLD-GRADE PIC 9(002). + 03 WS-DISP-INT PIC S9(009). + * + ***************************************************************** + * 等級テーブル(内部テーブル) * + ***************************************************************** + 01 GRADE-TBL. + 03 GRADE-ENTRY OCCURS 50. + 05 TBL-GRADE-CODE PIC 9(002). + 05 TBL-MONTHLY-FROM PIC 9(009). + 05 TBL-MONTHLY-TO PIC 9(009). + 05 TBL-FILLER PIC X(060). + 01 GRADE-COUNT PIC 9(004) VALUE ZERO. + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + COPY SHAMSGAC. + COPY SHAENDAC. + COPY SHADATAC. + * + 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-FLG. + * + *** PARM取得 + ACCEPT WRK-YEAR-MONTH + FROM COMMAND-LINE. + IF WRK-YEAR-MONTH = SPACES + MOVE CNS-DEFAULT-YM TO WRK-YEAR-MONTH + END-IF. + * + INITIALIZE D01UBSPAR. + CALL 'SUB01DAT' USING D01UBSPAR. + IF D01FKICOD NOT = ZERO + INITIALIZE M00MHOPAR + MOVE CNS-MSGSUBEEK TO M00MSGCOD + MOVE 'SUB01DAT' TO M00UMKDATS22-01 + MOVE D01FKICOD TO M00UMKDATS22-02 + PERFORM 4000MSGOUTSOR + PERFORM 9999ABDSOR + END-IF. + * + OPEN INPUT R01INNFIL + R02INNFIL. + OPEN OUTPUT W01OUTFIL + W02OUTFIL. + * + *** 等級テーブル全件読込 + PERFORM 1110R02LDASOR + UNTIL WRK-R02-EOF-Y. + * + 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: (1.2) * + * サブモジュール名: R02全件読込(等級テーブル格納) * + ***************************************************************** + 1110R02LDASOR SECTION. + * + READ R02INNFIL + AT END + SET WRK-R02-EOF-Y TO TRUE + NOT AT END + ADD 1 TO CUN-R02INN + ADD 1 TO GRADE-COUNT + MOVE R02GRADE-CODE TO + TBL-GRADE-CODE (GRADE-COUNT) + MOVE R02MONTHLY-FROM TO + TBL-MONTHLY-FROM (GRADE-COUNT) + MOVE R02MONTHLY-TO TO + TBL-MONTHLY-TO (GRADE-COUNT) + END-READ. + * + 1110R02LDASOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.0) * + * サブモジュール名: 主処理 * + ***************************************************************** + 2000MAJSOR SECTION. + * + IF WRK-FIRST-REC + MOVE R01EMP-ID TO WRK-PREV-EMP-ID + MOVE R01EMP-NAME TO WRK-EMP-NAME + MOVE '0' TO WRK-FIRST-FLG + MOVE ZERO TO WRK-TOTAL + MOVE ZERO TO WRK-COUNT + END-IF. + * + IF R01EMP-ID = WRK-PREV-EMP-ID + ADD R01MONTHLY-AMOUNT TO WRK-TOTAL + ADD 1 TO WRK-COUNT + ELSE + PERFORM 2010KEYBRSOR + MOVE R01EMP-ID TO WRK-PREV-EMP-ID + MOVE R01EMP-NAME TO WRK-EMP-NAME + MOVE ZERO TO WRK-TOTAL + MOVE ZERO TO WRK-COUNT + ADD R01MONTHLY-AMOUNT TO WRK-TOTAL + ADD 1 TO WRK-COUNT + END-IF. + * + PERFORM 1100R01INNSOR. + * + 2000MAJSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.1) * + * サブモジュール名: キーブレイク集約処理 * + ***************************************************************** + 2010KEYBRSOR SECTION. + * + IF WRK-COUNT = 0 + EXIT SECTION + END-IF. + * + DIVIDE WRK-TOTAL BY WRK-COUNT + GIVING WRK-AVG + REMAINDER WRK-REM + END-DIVIDE. + * + IF WRK-COUNT >= 4 + MOVE 'A' TO WRK-REVISED-TYPE + ELSE + IF WRK-COUNT = 3 + MOVE 'B' TO WRK-REVISED-TYPE + ELSE + MOVE 01 TO W02ERR-CATEGORY + MOVE WRK-COUNT TO WS-DISP-INT + STRING + WRK-PREV-EMP-ID + ' COUNT=' + WS-DISP-INT + ' INVALID' + INTO W02ERR-DETAIL + END-STRING + WRITE W02OUTREC + ADD 1 TO CUN-W02OUT + EXIT SECTION + END-IF + END-IF. + * + PERFORM 2020GRADSOR. + * + 2010KEYBRSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.2) * + * サブモジュール名: 等級テーブルマッチング * + ***************************************************************** + 2020GRADSOR SECTION. + * + MOVE 'N' TO WRK-GRADE-FOUND. + * + PERFORM VARYING WRK-I FROM 1 BY 1 + UNTIL WRK-I > GRADE-COUNT + OR WRK-GRADE-FOUND-Y + IF WRK-AVG >= + TBL-MONTHLY-FROM (WRK-I) + AND WRK-AVG <= + TBL-MONTHLY-TO (WRK-I) + MOVE TBL-GRADE-CODE (WRK-I) + TO WRK-NEW-GRADE + SET WRK-GRADE-FOUND-Y TO TRUE + END-IF + END-PERFORM. + * + IF NOT WRK-GRADE-FOUND-Y + MOVE 01 TO W02ERR-CATEGORY + STRING + WRK-PREV-EMP-ID + ' AVG=' + WRK-AVG + ' NO-GRADE' + INTO W02ERR-DETAIL + END-STRING + WRITE W02OUTREC + ADD 1 TO CUN-W02OUT + EXIT SECTION + END-IF. + * + *** 現在等級をDBから取得(本設計ではDB非接続のためテーブルで代用) + *** 本来はGRADE-HISTORYをSELECTする + MOVE 0 TO WRK-OLD-GRADE. + * + IF WRK-OLD-GRADE NOT = WRK-NEW-GRADE + PERFORM 2030W01OUTSOR + END-IF. + * + 2020GRADSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.3) * + * サブモジュール名: REVISED-GRADE出力 * + ***************************************************************** + 2030W01OUTSOR SECTION. + * + INITIALIZE W01OUTREC. + * + MOVE WRK-PREV-EMP-ID TO W01EMP-ID. + MOVE WRK-EMP-NAME TO W01EMP-NAME. + MOVE WRK-YEAR-MONTH TO W01REVISED-YM. + MOVE WRK-OLD-GRADE TO W01OLD-GRADE. + MOVE WRK-NEW-GRADE TO W01NEW-GRADE. + MOVE WRK-AVG TO W01AVG-STD-MONTHLY. + MOVE WRK-REVISED-TYPE TO W01REVISED-TYPE. + * + WRITE W01OUTREC. + ADD 1 TO CUN-W01OUT. + * + 2030W01OUTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (3.0) * + * サブモジュール名: 終了処理 * + ***************************************************************** + 3000STPSOR SECTION. + * + *** 最終キーグループ処理 + PERFORM 2010KEYBRSOR. + * + CLOSE R01INNFIL + R02INNFIL + W01OUTFIL + W02OUTFIL. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'SHA05R01' TO M00UMKDATS22-01. + MOVE CUN-R01INN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'SHA05W01' TO M00UMKDATS22-01. + MOVE CUN-W01OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'SHA05W02' 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/SHA06TWM.cbl b/src/SHA06TWM.cbl new file mode 100644 index 0000000..6fc65e4 --- /dev/null +++ b/src/SHA06TWM.cbl @@ -0,0 +1,561 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. SHA06TWM. + ***************************************************************** + * システム名 : 社会保険管理システム * + * プログラムID : SHA06TWM * + * プログラム名 : 保険料率適用・控除計算処理 * + * 作成日 : 2026-07-11 * + * 処理概要 : EMP-INSURANCEをDB2 INSURANCE-RATES(M×N) * + * とAPPLICABLE-RULES(M:N)の2段階マッチング * + * により保険料を算出しDEDUCTED-RESULTを出力 * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 2026-07-11 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT R01INNFIL ASSIGN TO EXTERNAL SHA06R01. + SELECT R02INNFIL ASSIGN TO EXTERNAL SHA06R02. + SELECT W01OUTFIL ASSIGN TO EXTERNAL SHA06W01. + SELECT W02OUTFIL ASSIGN TO EXTERNAL SHA06W02. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * R01: EMP-INSURANCE(200B FB SHA02REC) * + ***************************************************************** + FD R01INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R01INNREC. + COPY SHA02REC REPLACING ==(A)== BY ==R01==. + * + ***************************************************************** + * R02: APPLICABLE-RULES(80B FB 自前レイアウト) * + ***************************************************************** + FD R02INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R02INNREC. + 03 R02RULE-CODE PIC X(002). + 03 R02AGE-FROM PIC 9(002). + 03 R02AGE-TO PIC 9(002). + 03 R02DEPENDENTS-FROM PIC 9(002). + 03 R02DEPENDENTS-TO PIC 9(002). + 03 R02REGION-CODE PIC X(002). + 03 R02HEALTH-RATE-ADJ PIC 9(007). + 03 R02PENSION-RATE-ADJ PIC 9(007). + 03 R02FILLER PIC X(054). + * + ***************************************************************** + * W01: DEDUCTED-RESULT(300B FB SHA06REC) * + ***************************************************************** + FD W01OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W01OUTREC. + COPY SHA06REC REPLACING ==(A)== BY ==W01==. + * + ***************************************************************** + * W02: ERROR-LOG(VB) * + ***************************************************************** + FD W02OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS V. + 01 W02OUTREC. + COPY ZAN05REC REPLACING ==(A)== BY ==W02==. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * SQLCA * + ***************************************************************** + EXEC SQL INCLUDE SQLCA END-EXEC. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'SHA06TWM'. + 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-RATE-DIV PIC 9(007) VALUE 1000000. + * + ***************************************************************** + * カウンタ領域 * + ***************************************************************** + 01 CUNARA. + 03 CUN-R01INN PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-R02INN 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-R02-EOF PIC X(001). + 88 WRK-R02-EOF-Y VALUE '1'. + 03 WRK-SQLCODE PIC S9(009) COMP. + 03 WRK-I PIC 9(004) COMP. + 03 WRK-RULE-FOUND PIC X(001). + 88 WRK-RULE-FOUND-Y VALUE 'Y'. + 03 WRK-AGE PIC 9(003). + 03 WRK-DEPENDENTS PIC 9(002). + 03 WRK-REGION-CODE PIC X(002). + 03 WRK-HEALTH-RATE PIC 9(007). + 03 WRK-PENSION-RATE PIC 9(007). + 03 WRK-HEALTH-PREMIUM PIC 9(009). + 03 WRK-PENSION-PREMIUM PIC 9(009). + 03 WRK-TOTAL-PREMIUM PIC 9(009). + 03 WRK-BIRTH-DATE PIC 9(008). + 03 WRK-CALC-ERR PIC X(001). + 88 WRK-CALC-ERR-Y VALUE 'Y'. + 03 WS-DISP-INT PIC S9(009). + * + ***************************************************************** + * DB2ホスト変数 * + ***************************************************************** + 01 DBVARA. + 03 DBV-EMP-ID PIC X(008). + 03 DBV-GRADE-CODE PIC 9(002). + 03 DBV-HEALTH-RATE PIC 9(007). + 03 DBV-PENSION-RATE PIC 9(007). + 03 DBV-BIRTH-DATE PIC 9(008). + 03 DBV-DEPENDENT-COUNT PIC 9(002). + 03 DBV-REGION-CODE PIC X(002). + * + ***************************************************************** + * 適用ルール内部テーブル * + ***************************************************************** + 01 RULE-TBL. + 03 RULE-ENTRY OCCURS 50. + 05 TBL-RULE-CODE PIC X(002). + 05 TBL-AGE-FROM PIC 9(002). + 05 TBL-AGE-TO PIC 9(002). + 05 TBL-DEPENDENTS-FROM PIC 9(002). + 05 TBL-DEPENDENTS-TO PIC 9(002). + 05 TBL-REGION-CODE PIC X(002). + 05 TBL-HEALTH-RATE-ADJ PIC 9(007). + 05 TBL-PENSION-RATE-ADJ PIC 9(007). + 05 TBL-FILLER PIC X(054). + 01 RULE-COUNT PIC 9(004) VALUE ZERO. + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + COPY SHAMSGAC. + COPY SHAENDAC. + COPY SHADATAC. + * + 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 + INITIALIZE M00MHOPAR + MOVE CNS-MSGSUBEEK TO M00MSGCOD + MOVE 'SUB01DAT' TO M00UMKDATS22-01 + MOVE D01FKICOD TO M00UMKDATS22-02 + PERFORM 4000MSGOUTSOR + PERFORM 9999ABDSOR + END-IF. + * + OPEN INPUT R01INNFIL + R02INNFIL. + OPEN OUTPUT W01OUTFIL + W02OUTFIL. + * + *** DB接続 + EXEC SQL + CONNECT TO 'data/INSURANCEDB.db' + END-EXEC. + * + *** 適用ルールテーブル全件読込 + PERFORM 1110R02LDASOR + UNTIL WRK-R02-EOF-Y. + * + 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: (1.2) * + * サブモジュール名: R02全件読込(ルールテーブル格納) * + ***************************************************************** + 1110R02LDASOR SECTION. + * + READ R02INNFIL + AT END + SET WRK-R02-EOF-Y TO TRUE + NOT AT END + ADD 1 TO CUN-R02INN + ADD 1 TO RULE-COUNT + MOVE R02RULE-CODE TO + TBL-RULE-CODE (RULE-COUNT) + MOVE R02AGE-FROM TO + TBL-AGE-FROM (RULE-COUNT) + MOVE R02AGE-TO TO + TBL-AGE-TO (RULE-COUNT) + MOVE R02DEPENDENTS-FROM TO + TBL-DEPENDENTS-FROM (RULE-COUNT) + MOVE R02DEPENDENTS-TO TO + TBL-DEPENDENTS-TO (RULE-COUNT) + MOVE R02REGION-CODE TO + TBL-REGION-CODE (RULE-COUNT) + MOVE R02HEALTH-RATE-ADJ TO + TBL-HEALTH-RATE-ADJ (RULE-COUNT) + MOVE R02PENSION-RATE-ADJ TO + TBL-PENSION-RATE-ADJ (RULE-COUNT) + END-READ. + * + 1110R02LDASOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.0) * + * サブモジュール名: 主処理 * + ***************************************************************** + 2000MAJSOR SECTION. + * + PERFORM 2010RATESOR. + * + IF WRK-SQLCODE = 0 + PERFORM 2020RULESCOL + PERFORM 2030CALCSOR + PERFORM 2040W01OUTSOR + ELSE + PERFORM 2050W02OUTSOR + END-IF. + * + PERFORM 1100R01INNSOR. + * + 2000MAJSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.1) * + * サブモジュール名: 第1段階料率取得(DB2 M×Nマッチング) * + ***************************************************************** + 2010RATESOR SECTION. + * + MOVE R01EMP-ID TO DBV-EMP-ID. + MOVE R01GRADE-CODE TO DBV-GRADE-CODE. + * + EXEC SQL + SELECT HEALTH-RATE, PENSION-RATE + INTO :DBV-HEALTH-RATE, + :DBV-PENSION-RATE + FROM INSURANCE-RATES + WHERE GRADE-CODE = :DBV-GRADE-CODE + END-EXEC. + * + MOVE SQLCODE TO WRK-SQLCODE. + * + IF SQLCODE = 0 + MOVE DBV-HEALTH-RATE TO WRK-HEALTH-RATE + MOVE DBV-PENSION-RATE TO WRK-PENSION-RATE + ELSE + IF SQLCODE NOT = 100 + MOVE 01 TO W02ERR-CATEGORY + MOVE SQLCODE TO WS-DISP-INT + STRING + DBV-EMP-ID + ' SQLCODE=' + WS-DISP-INT + INTO W02ERR-DETAIL + END-STRING + WRITE W02OUTREC + ADD 1 TO CUN-W02OUT + END-IF + END-IF. + * + *** 年齢・扶養人数・地域コードをDBより取得 + IF SQLCODE = 0 + EXEC SQL + SELECT BIRTH-DATE, + DEPENDENT-COUNT, + REGION-CODE + INTO :DBV-BIRTH-DATE, + :DBV-DEPENDENT-COUNT, + :DBV-REGION-CODE + FROM EMP-MASTER + WHERE EMP-ID = :DBV-EMP-ID + END-EXEC + IF SQLCODE = 0 + MOVE DBV-BIRTH-DATE TO WRK-BIRTH-DATE + MOVE DBV-DEPENDENT-COUNT + TO WRK-DEPENDENTS + MOVE DBV-REGION-CODE TO WRK-REGION-CODE + END-IF + END-IF. + * + 2010RATESOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.2) * + * サブモジュール名: 第2段階ルールマッチング(M:N) * + ***************************************************************** + 2020RULESCOL SECTION. + * + *** 満年齢計算 + COMPUTE WRK-AGE = + (FUNCTION INTEGER-OF-DATE (D01UBSUDATE) + - FUNCTION INTEGER-OF-DATE (WRK-BIRTH-DATE)) + / 365 + END-COMPUTE. + * + MOVE 'N' TO WRK-RULE-FOUND. + * + PERFORM VARYING WRK-I FROM 1 BY 1 + UNTIL WRK-I > RULE-COUNT + OR WRK-RULE-FOUND-Y + IF WRK-AGE >= TBL-AGE-FROM (WRK-I) + AND WRK-AGE <= TBL-AGE-TO (WRK-I) + AND WRK-DEPENDENTS >= + TBL-DEPENDENTS-FROM (WRK-I) + AND WRK-DEPENDENTS <= + TBL-DEPENDENTS-TO (WRK-I) + AND WRK-REGION-CODE = + TBL-REGION-CODE (WRK-I) + IF TBL-HEALTH-RATE-ADJ (WRK-I) > 0 + ADD TBL-HEALTH-RATE-ADJ (WRK-I) + TO WRK-HEALTH-RATE + END-IF + IF TBL-PENSION-RATE-ADJ (WRK-I) > 0 + ADD TBL-PENSION-RATE-ADJ (WRK-I) + TO WRK-PENSION-RATE + END-IF + SET WRK-RULE-FOUND-Y TO TRUE + END-IF + END-PERFORM. + * + 2020RULESCOL-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.3) * + * サブモジュール名: 保険料計算 * + ***************************************************************** + 2030CALCSOR SECTION. + * + MOVE 'N' TO WRK-CALC-ERR. + * + COMPUTE WRK-HEALTH-PREMIUM = + R01MONTHLY-AMOUNT + * WRK-HEALTH-RATE + / CNS-RATE-DIV + ON SIZE ERROR + MOVE 'Y' TO WRK-CALC-ERR + END-COMPUTE. + * + COMPUTE WRK-PENSION-PREMIUM = + R01MONTHLY-AMOUNT + * WRK-PENSION-RATE + / CNS-RATE-DIV + ON SIZE ERROR + MOVE 'Y' TO WRK-CALC-ERR + END-COMPUTE. + * + IF NOT WRK-CALC-ERR-Y + COMPUTE WRK-TOTAL-PREMIUM = + WRK-HEALTH-PREMIUM + + WRK-PENSION-PREMIUM + END-COMPUTE + END-IF. + * + IF WRK-CALC-ERR-Y + MOVE 01 TO W02ERR-CATEGORY + STRING + R01EMP-ID + ' CALC-SIZE-ERROR' + INTO W02ERR-DETAIL + END-STRING + WRITE W02OUTREC + ADD 1 TO CUN-W02OUT + END-IF. + * + 2030CALCSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.4) * + * サブモジュール名: DEDUCTED-RESULT出力 * + ***************************************************************** + 2040W01OUTSOR SECTION. + * + IF WRK-CALC-ERR-Y + EXIT SECTION + END-IF. + * + INITIALIZE W01OUTREC. + * + MOVE R01EMP-ID TO W01EMP-ID. + MOVE R01EMP-NAME TO W01EMP-NAME. + MOVE R01HEALTH-INS-TYPE TO W01INSURANCE-TYPE. + MOVE R01GRADE-CODE TO W01GRADE-CODE. + MOVE R01MONTHLY-AMOUNT TO W01MONTHLY-AMOUNT. + MOVE WRK-HEALTH-RATE TO W01HEALTH-RATE. + MOVE WRK-PENSION-RATE TO W01PENSION-RATE. + MOVE WRK-HEALTH-PREMIUM TO W01HEALTH-PREMIUM. + MOVE WRK-PENSION-PREMIUM TO W01PENSION-PREMIUM. + MOVE WRK-TOTAL-PREMIUM TO W01TOTAL-PREMIUM. + * + WRITE W01OUTREC. + ADD 1 TO CUN-W01OUT. + * + 2040W01OUTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.5) * + * サブモジュール名: エラー出力(DBエラー時) * + ***************************************************************** + 2050W02OUTSOR SECTION. + * + MOVE 01 TO W02ERR-CATEGORY. + MOVE WRK-SQLCODE TO WS-DISP-INT. + STRING + R01EMP-ID + ' DB-ERR SQLCODE=' + WS-DISP-INT + INTO W02ERR-DETAIL + END-STRING. + WRITE W02OUTREC. + ADD 1 TO CUN-W02OUT. + * + 2050W02OUTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (3.0) * + * サブモジュール名: 終了処理 * + ***************************************************************** + 3000STPSOR SECTION. + * + CLOSE R01INNFIL + R02INNFIL + W01OUTFIL + W02OUTFIL. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'SHA06R01' TO M00UMKDATS22-01. + MOVE CUN-R01INN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'SHA06W01' TO M00UMKDATS22-01. + MOVE CUN-W01OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'SHA06W02' 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/SHA07KBR.cbl b/src/SHA07KBR.cbl new file mode 100644 index 0000000..3d04cb3 --- /dev/null +++ b/src/SHA07KBR.cbl @@ -0,0 +1,480 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. SHA07KBR. + ***************************************************************** + * システム名 : 社会保険管理システム * + * プログラムID : SHA07KBR * + * プログラム名 : 資格異動キーブレイク処理 * + * 作成日 : 2026-07-11 * + * 処理概要 : DB2 QUALIFICATION-CHANGESから資格異動 * + * データをFETCHし、従業員ごと(1:N)かつ * + * 保険者コード変更時(異キー)にキーブレイク * + * してサマリ・明細を出力する。 * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 2026-07-11 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT W01OUTFIL ASSIGN TO EXTERNAL SHA07W01. + SELECT W02OUTFIL ASSIGN TO EXTERNAL SHA07W02. + SELECT W03OUTFIL ASSIGN TO EXTERNAL SHA07W03. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * W01: CHG-SUMMARY(200B FB) * + ***************************************************************** + FD W01OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W01OUTREC. + COPY SHA07REC REPLACING ==(A)== BY ==W01==. + * + ***************************************************************** + * W02: CHG-DETAIL(200B FB) * + ***************************************************************** + FD W02OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W02OUTREC. + COPY SHA07REC REPLACING ==(A)== BY ==W02==. + * + ***************************************************************** + * W03: ERROR-LOG(VB) * + ***************************************************************** + FD W03OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS V. + 01 W03OUTREC. + COPY ZAN05REC REPLACING ==(A)== BY ==W03==. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * SQLCA * + ***************************************************************** + EXEC SQL INCLUDE SQLCA END-EXEC. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'SHA07KBR'. + 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 CNS-RECTYP-S PIC X(001) VALUE 'S'. + 01 CNS-RECTYP-D PIC X(001) VALUE 'D'. + 01 CNS-REASON-CHG PIC X(040) + VALUE 'INSURER CHANGED'. + * + ***************************************************************** + * カウンタ領域 * + ***************************************************************** + 01 CUNARA. + 03 CUN-DB-FETCH 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. + 03 CUN-W03OUT PIC S9(009) COMP-3 VALUE ZERO. + * + ***************************************************************** + * 作業領域 * + ***************************************************************** + 01 WRKARA. + 03 WRK-U06 PIC 9(008). + 03 WRK-EOF PIC X(001). + 88 WRK-EOF-Y VALUE '1'. + 03 WRK-FIRST PIC X(001). + 88 WRK-FIRST-Y VALUE '1'. + 03 WRK-PREV-EMP-ID PIC X(008). + 03 WRK-PREV-INSURER PIC X(004). + * + ***************************************************************** + * DB2ホスト変数 * + ***************************************************************** + 01 DBVARA. + 03 DBV-CHG-ID PIC 9(009). + 03 DBV-EMP-ID PIC X(008). + 03 DBV-EMP-NAME PIC X(040). + 03 DBV-CHG-DATE PIC X(008). + 03 DBV-CHG-TYPE PIC X(002). + 03 DBV-INSURER-CODE PIC X(004). + 03 DBV-PREV-INSURER PIC X(004). + 03 DBV-REASON PIC X(100). + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + *** 運用日付取得 + COPY SHADATAC. + *** メッセージ編集出力SR用 + COPY SHAMSGAC. + *** ABEND処理SR用 + COPY SHAENDAC. + *** 項目チェックSR用 + * + PROCEDURE DIVISION. + ***************************************************************** + * サブモジュールNO: (0.0) * + * サブモジュール名: 制御処理 * + * 処理概要 : メインコントロール処理 * + ***************************************************************** + 0000MAJCOLSOR SECTION. + * + PERFORM 1000ITTSOR. + PERFORM 2000MAJSOR + UNTIL WRK-EOF-Y. + PERFORM 2500LSTKBRSOR. + 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 ZERO TO WRK-PREV-EMP-ID. + MOVE SPACES TO WRK-PREV-INSURER. + * + *** 運用日付取得 + INITIALIZE D01UBSPAR. + CALL 'SUB01DAT' USING D01UBSPAR. + IF D01FKICOD = ZERO + MOVE D01UBSUDATE TO WRK-U06 + ELSE + INITIALIZE M00MHOPAR + MOVE CNS-MSGSUBEEK TO M00MSGCOD + MOVE 'SUB01DAT' TO M00UMKDATS22-01 + MOVE D01FKICOD TO M00UMKDATS22-02 + PERFORM 4000MSGOUTSOR + PERFORM 9999ABDSOR + END-IF. + * + *** 出力ファイルOPEN + OPEN OUTPUT W01OUTFIL + W02OUTFIL + W03OUTFIL. + * + *** DB接続 + EXEC SQL + CONNECT TO 'data/INSURANCEDB.db' + END-EXEC. + * + *** CURSOR DECLARE + EXEC SQL + DECLARE CQCHG CURSOR FOR + SELECT + QC.CHG-ID, + QC.EMP-ID, + EM.EMP-NAME, + QC.CHG-DATE, + QC.CHG-TYPE, + QC.INSURER-CODE, + QC.PREV-INSURER, + QC.REASON + FROM + QUALIFICATION-CHANGES QC + LEFT JOIN SALARYDB.EMP-MASTER EM + ON QC.EMP-ID = EM.EMP-ID + ORDER BY + QC.EMP-ID, + QC.CHG-DATE + END-EXEC. + * + *** CURSOR OPEN + EXEC SQL + OPEN CQCHG + END-EXEC. + * + *** 1件目FETCH + PERFORM 1100FETCSOR. + * + 1000ITTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (1.1) * + * サブモジュール名: FETCH処理 * + * 処理概要 : CURSOR FETCH + EOF判定 * + ***************************************************************** + 1100FETCSOR SECTION. + * + EXEC SQL + FETCH CQCHG + INTO + :DBV-CHG-ID, + :DBV-EMP-ID, + :DBV-EMP-NAME, + :DBV-CHG-DATE, + :DBV-CHG-TYPE, + :DBV-INSURER-CODE, + :DBV-PREV-INSURER, + :DBV-REASON + END-EXEC. + * + IF SQLCODE = 0 + ADD 1 TO CUN-DB-FETCH + ELSE + SET WRK-EOF-Y TO TRUE + END-IF. + * + 1100FETCSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.0) * + * サブモジュール名: 主処理 * + * 処理概要 : キーブレイク判定・出力 * + ***************************************************************** + 2000MAJSOR SECTION. + * + *** EMP-ID 主キーブレイク判定 + IF WRK-FIRST-Y + MOVE SPACE TO WRK-FIRST + MOVE DBV-EMP-ID TO WRK-PREV-EMP-ID + MOVE DBV-INSURER-CODE TO WRK-PREV-INSURER + ELSE + IF DBV-EMP-ID NOT = WRK-PREV-EMP-ID + PERFORM 2100KEYBRSOR + END-IF + * + *** INSURER-CODE 異キーブレイク判定 + IF DBV-INSURER-CODE + NOT = WRK-PREV-INSURER + PERFORM 2200DIFKBSOR + END-IF + END-IF. + * + *** 明細出力 + PERFORM 2300DETAILSOR. + * + *** 前回値更新 + MOVE DBV-EMP-ID TO WRK-PREV-EMP-ID. + MOVE DBV-INSURER-CODE TO WRK-PREV-INSURER. + * + *** 次FETCH + PERFORM 1100FETCSOR. + * + 2000MAJSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.1) * + * サブモジュール名: 主キーブレイク処理 * + * 処理概要 : EMP-ID変更時のサマリ出力(前従業員最終状 * + * 態をサマリに記録) * + ***************************************************************** + 2100KEYBRSOR SECTION. + * + INITIALIZE W01OUTREC. + * + MOVE WRK-PREV-EMP-ID TO W01EMP-ID. + MOVE SPACES TO W01EMP-NAME + MOVE ZERO TO W01CHG-ID + W01CHG-DATE. + MOVE '99' TO W01CHG-TYPE. + MOVE SPACES TO W01INSURER-CODE. + MOVE WRK-PREV-INSURER TO W01PREV-INSURER. + MOVE SPACES TO W01REASON. + MOVE CNS-RECTYP-S TO W01REC-TYPE. + * + WRITE W01OUTREC. + ADD 1 TO CUN-W01OUT. + * + 2100KEYBRSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.2) * + * サブモジュール名: 異キーブレイク処理 * + * 処理概要 : 同一従業員内で保険者コード変更時の * + * サマリ出力 * + ***************************************************************** + 2200DIFKBSOR SECTION. + * + INITIALIZE W01OUTREC. + * + MOVE DBV-CHG-ID TO W01CHG-ID. + MOVE DBV-EMP-ID TO W01EMP-ID. + MOVE DBV-EMP-NAME TO W01EMP-NAME. + MOVE DBV-CHG-DATE TO W01CHG-DATE. + MOVE '99' TO W01CHG-TYPE. + MOVE DBV-INSURER-CODE TO W01INSURER-CODE. + MOVE WRK-PREV-INSURER TO W01PREV-INSURER. + MOVE CNS-REASON-CHG TO W01REASON. + MOVE CNS-RECTYP-S TO W01REC-TYPE. + * + WRITE W01OUTREC. + ADD 1 TO CUN-W01OUT. + * + 2200DIFKBSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.3) * + * サブモジュール名: 明細出力処理 * + * 処理概要 : 全FETCHレコードを明細出力 * + ***************************************************************** + 2300DETAILSOR SECTION. + * + INITIALIZE W02OUTREC. + * + MOVE DBV-CHG-ID TO W02CHG-ID. + MOVE DBV-EMP-ID TO W02EMP-ID. + MOVE DBV-EMP-NAME TO W02EMP-NAME. + MOVE DBV-CHG-DATE TO W02CHG-DATE. + MOVE DBV-CHG-TYPE TO W02CHG-TYPE. + MOVE DBV-INSURER-CODE TO W02INSURER-CODE. + MOVE DBV-PREV-INSURER TO W02PREV-INSURER. + MOVE DBV-REASON TO W02REASON. + MOVE CNS-RECTYP-D TO W02REC-TYPE. + * + WRITE W02OUTREC. + ADD 1 TO CUN-W02OUT. + * + 2300DETAILSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.5) * + * サブモジュール名: 最終グループ処理 * + * 処理概要 : 最終EMP-IDグループのサマリ出力 * + ***************************************************************** + 2500LSTKBRSOR SECTION. + * + IF CUN-DB-FETCH > ZERO + INITIALIZE W01OUTREC + MOVE WRK-PREV-EMP-ID TO W01EMP-ID + MOVE SPACES TO W01EMP-NAME + MOVE ZERO TO W01CHG-ID + W01CHG-DATE + MOVE '99' TO W01CHG-TYPE + MOVE SPACES TO W01INSURER-CODE + MOVE WRK-PREV-INSURER TO W01PREV-INSURER + MOVE SPACES TO W01REASON + MOVE CNS-RECTYP-S TO W01REC-TYPE + WRITE W01OUTREC + ADD 1 TO CUN-W01OUT + END-IF. + * + 2500LSTKBRSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (3.0) * + * サブモジュール名: 終了処理 * + * 処理概要 : CURSOR CLOSE・ファイルクローズ・件数出力 * + ***************************************************************** + 3000STPSOR SECTION. + * + *** CURSOR CLOSE + EXEC SQL + CLOSE CQCHG + END-EXEC. + * + *** DB切断 + EXEC SQL + DISCONNECT CURRENT + END-EXEC. + * + *** 出力ファイルCLOSE + CLOSE W01OUTFIL + W02OUTFIL + W03OUTFIL. + * + *** 入出力件数出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'DB2-QUAL-CHANGES' TO M00UMKDATS22-01. + MOVE CUN-DB-FETCH TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'SHA07W01(CHG-SUM)' TO M00UMKDATS22-01. + MOVE CUN-W01OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'SHA07W02(CHG-DTL)' TO M00UMKDATS22-01. + MOVE CUN-W02OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'SHA07W03(ERROR)' 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) * + * サブモジュール名: メッセージ編集出力処理 * + * 処理概要 : メッセージ編集出力サブPGM呼出 * + ***************************************************************** + 4000MSGOUTSOR SECTION. + * + MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1). + MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1). + MOVE CNS-PRGIDX TO M00UMKDATS22-05. + CALL 'SUB02MSG' USING M00MHOPAR. + * + 4000MSGOUTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (9.9) * + * サブモジュール名: ABEND処理 * + * 処理概要 : ABENDサブPGM呼出 * + ***************************************************************** + 9999ABDSOR SECTION. + * + MOVE CNS-ABD999 TO E01ABDCOD. + CALL 'SUB03END' USING E01ABDPAR. + * + 9999ABDSOR-EXT. + EXIT. diff --git a/src/SHA08SRT.cbl b/src/SHA08SRT.cbl new file mode 100644 index 0000000..0b0c1df --- /dev/null +++ b/src/SHA08SRT.cbl @@ -0,0 +1,359 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. SHA08SRT. + ***************************************************************** + * システム名 : 社会保険管理システム * + * プログラムID : SHA08SRT * + * プログラム名 : 届出書データSORT編集処理 * + * 作成日 : 2026-07-11 * + * 処理概要 : GRADED-LISTをINPUT PROCEDUREで全件RELEASEし、* + * MONTHLY-AMOUNT/GRADE-CODEを保持したまま * + * PREF-CODE・OFFICE-NO・EMP-ID昇順SORT後、 * + * OUTPUT PROCEDUREでRETURNしてRPT-DATA出力。 * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 2026-07-11 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT R01INNFIL ASSIGN TO EXTERNAL SHA08R01. + SELECT W01OUTFIL ASSIGN TO EXTERNAL SHA08W01. + SELECT W02OUTFIL ASSIGN TO EXTERNAL SHA08W02. + SELECT SORTWORK ASSIGN TO EXTERNAL SORTWK01. + * + I-O-CONTROL. + SAME SORT AREA FOR SORTWORK. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * R01: GRADED-LIST(200B FB) * + ***************************************************************** + FD R01INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R01INNREC. + COPY SHA04REC REPLACING ==(A)== BY ==R01==. + * + ***************************************************************** + * SD: SORTWORK(200B SORT内部レコード) * + ***************************************************************** + SD SORTWORK + RECORD CONTAINS 200. + 01 SORTREC. + 03 SR-EMP-ID PIC 9(008). + 03 SR-EMP-NAME PIC X(040). + 03 SR-OFFICE-NO PIC X(004). + 03 SR-OFFICE-NAME PIC X(040). + 03 SR-PREF-CODE PIC 9(002). + 03 SR-INSURER-CODE PIC X(004). + 03 SR-INSURER-NAME PIC X(060). + 03 SR-MONTHLY-AMOUNT PIC 9(009). + 03 SR-GRADE-CODE PIC 9(002). + 03 SR-STATUS PIC X(001). + 03 SR-FILLER PIC X(030). + * + ***************************************************************** + * W01: RPT-DATA(300B FB) * + ***************************************************************** + FD W01OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W01OUTREC. + COPY SHA08REC REPLACING ==(A)== BY ==W01==. + * + ***************************************************************** + * W02: ERROR-LOG(VB) * + ***************************************************************** + FD W02OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS V. + 01 W02OUTREC. + COPY ZAN05REC REPLACING ==(A)== BY ==W02==. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'SHA08SRT'. + 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-ABD100 PIC 9(003) VALUE 100. + 01 CNS-STATUS-0 PIC X(001) VALUE '0'. + 01 CNS-RPT-TYPE PIC X(002) VALUE '01'. + * + ***************************************************************** + * カウンタ領域 * + ***************************************************************** + 01 CUNARA. + 03 CUN-R01INN PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-SORT-IN PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W01OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W02OUT PIC S9(009) COMP-3 VALUE ZERO. + * + ***************************************************************** + * 作業領域 * + ***************************************************************** + 01 WRKARA. + 03 WRK-U06 PIC 9(008). + 03 WRK-R01EOF PIC X(001). + 03 WRK-SORT-STAT PIC 9(002). + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + *** 運用日付取得 + COPY SHADATAC. + *** メッセージ編集出力SR用 + COPY SHAMSGAC. + *** ABEND処理SR用 + COPY SHAENDAC. + * + PROCEDURE DIVISION. + ***************************************************************** + * サブモジュールNO: (0.0) * + * サブモジュール名: 制御処理 * + * 処理概要 : メインコントロール処理 * + ***************************************************************** + 0000MAJCOLSOR SECTION. + * + PERFORM 1000ITTSOR. + PERFORM 2000MAJSOR. + 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 = ZERO + MOVE D01UBSUDATE TO WRK-U06 + ELSE + INITIALIZE M00MHOPAR + MOVE CNS-MSGSUBEEK TO M00MSGCOD + MOVE 'SUB01DAT' TO M00UMKDATS22-01 + MOVE D01FKICOD TO M00UMKDATS22-02 + PERFORM 4000MSGOUTSOR + PERFORM 9999ABDSOR + END-IF. + * + *** 出力ファイルOPEN + OPEN OUTPUT W01OUTFIL + W02OUTFIL. + * + 1000ITTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.0) * + * サブモジュール名: 主処理(SORT実行) * + * 処理概要 : SORT文を実行する * + ***************************************************************** + 2000MAJSOR SECTION. + * + SORT SORTWORK + ON ASCENDING KEY SR-PREF-CODE + SR-OFFICE-NO + SR-EMP-ID + INPUT PROCEDURE 2110INPPSOR + OUTPUT PROCEDURE 2120OUTPSOR. + * + MOVE RETURN-CODE TO WRK-SORT-STAT. + IF WRK-SORT-STAT NOT = ZERO + INITIALIZE M00MHOPAR + MOVE CNS-MSGSUBEEK TO M00MSGCOD + MOVE 'SORT FAILED' TO M00UMKDATS22-01 + MOVE WRK-SORT-STAT TO M00UMKDATS22-02 + PERFORM 4000MSGOUTSOR + MOVE CNS-ABD100 TO E01ABDCOD + CALL 'SUB03END' USING E01ABDPAR + END-IF. + * + 2000MAJSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.1) * + * サブモジュール名: INPUT PROCEDURE * + * 処理概要 : R01読込→全件RELEASE * + ***************************************************************** + 2110INPPSOR SECTION. + * + OPEN INPUT R01INNFIL. + * + PERFORM UNTIL 1 = 2 + READ R01INNFIL + AT END + EXIT PERFORM + NOT AT END + ADD 1 TO CUN-R01INN + END-READ + MOVE R01EMP-ID TO SR-EMP-ID + MOVE R01EMP-NAME TO SR-EMP-NAME + MOVE R01OFFICE-NO TO SR-OFFICE-NO + MOVE R01OFFICE-NAME TO SR-OFFICE-NAME + MOVE R01PREF-CODE TO SR-PREF-CODE + MOVE R01INSURER-CODE + TO SR-INSURER-CODE + MOVE R01INSURER-NAME + TO SR-INSURER-NAME + MOVE R01MONTHLY-AMOUNT TO SR-MONTHLY-AMOUNT + MOVE R01GRADE-CODE TO SR-GRADE-CODE + MOVE CNS-STATUS-0 TO SR-STATUS + MOVE R01FILLER TO SR-FILLER + RELEASE SORTREC + ADD 1 TO CUN-SORT-IN + END-PERFORM. + * + CLOSE R01INNFIL. + * + 2110INPPSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.2) * + * サブモジュール名: OUTPUT PROCEDURE * + * 処理概要 : RETURN→レイアウト編集→WRITE * + ***************************************************************** + 2120OUTPSOR SECTION. + * + PERFORM UNTIL 1 = 2 + RETURN SORTWORK RECORD + AT END + EXIT PERFORM + NOT AT END + INITIALIZE W01OUTREC + MOVE SR-EMP-ID TO W01EMP-ID + MOVE SR-EMP-NAME TO W01EMP-NAME + MOVE SR-OFFICE-NO TO W01OFFICE-NO + MOVE SR-OFFICE-NAME TO W01OFFICE-NAME + MOVE SR-INSURER-CODE TO W01INSURER-CODE + MOVE SR-INSURER-NAME TO W01INSURER-NAME + MOVE SR-PREF-CODE TO W01PREF-CODE + MOVE CNS-RPT-TYPE TO W01REPORT-TYPE + MOVE WRK-U06 TO W01REPORT-DATE + MOVE SR-MONTHLY-AMOUNT + TO W01MONTHLY-AMOUNT + MOVE SR-GRADE-CODE TO W01GRADE-CODE + WRITE W01OUTREC + ADD 1 TO CUN-W01OUT + END-RETURN + END-PERFORM. + * + 2120OUTPSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (3.0) * + * サブモジュール名: 終了処理 * + * 処理概要 : ファイルクローズ・件数出力 * + ***************************************************************** + 3000STPSOR SECTION. + * + *** 出力ファイルCLOSE + CLOSE W01OUTFIL + W02OUTFIL. + * + *** 入出力件数出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'SHA08R01(GRADED)' TO M00UMKDATS22-01. + MOVE CUN-R01INN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'SHA08W01(RPT-DATA)' TO M00UMKDATS22-01. + MOVE CUN-W01OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'SHA08W02(ERROR)' TO M00UMKDATS22-01. + MOVE CUN-W02OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGKEYINF TO M00MSGCOD. + MOVE 'SORT-INPUT' TO M00UMKDATS22-01. + MOVE CUN-SORT-IN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + *** 終了メッセージ出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGFIN TO M00MSGCOD. + PERFORM 4000MSGOUTSOR. + * + 3000STPSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (4.0) * + * サブモジュール名: メッセージ編集出力処理 * + * 処理概要 : メッセージ編集出力サブPGM呼出 * + ***************************************************************** + 4000MSGOUTSOR SECTION. + * + MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1). + MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1). + MOVE CNS-PRGIDX TO M00UMKDATS22-05. + CALL 'SUB02MSG' USING M00MHOPAR. + * + 4000MSGOUTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (9.9) * + * サブモジュール名: ABEND処理 * + * 処理概要 : ABENDサブPGM呼出 * + ***************************************************************** + 9999ABDSOR SECTION. + * + MOVE CNS-ABD999 TO E01ABDCOD. + CALL 'SUB03END' USING E01ABDPAR. + * + 9999ABDSOR-EXT. + EXIT. diff --git a/src/SHA09S25.cbl b/src/SHA09S25.cbl new file mode 100644 index 0000000..692b0ba --- /dev/null +++ b/src/SHA09S25.cbl @@ -0,0 +1,997 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. SHA09S25. + ***************************************************************** + * システム名 : 社会保険管理システム * + * プログラムID : SHA09S25 * + * プログラム名 : 都道府県支部別分割出力処理 * + * 作成日 : 2026-07-11 * + * 処理概要 : RPT-DATAをPREF-CODE(01〜25)で判定し、 * + * 25個の出力ファイルに振り分けて出力する。 * + * CLOSE WITH LOCKで各ファイルを確定する。 * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 2026-07-11 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT R01INNFIL ASSIGN TO EXTERNAL SHA09R01 + ORGANIZATION IS SEQUENTIAL. + SELECT W01OUTFIL ASSIGN TO EXTERNAL SHA09W01 + ORGANIZATION IS SEQUENTIAL. + SELECT W02OUTFIL ASSIGN TO EXTERNAL SHA09W02 + ORGANIZATION IS SEQUENTIAL. + SELECT W03OUTFIL ASSIGN TO EXTERNAL SHA09W03 + ORGANIZATION IS SEQUENTIAL. + SELECT W04OUTFIL ASSIGN TO EXTERNAL SHA09W04 + ORGANIZATION IS SEQUENTIAL. + SELECT W05OUTFIL ASSIGN TO EXTERNAL SHA09W05 + ORGANIZATION IS SEQUENTIAL. + SELECT W06OUTFIL ASSIGN TO EXTERNAL SHA09W06 + ORGANIZATION IS SEQUENTIAL. + SELECT W07OUTFIL ASSIGN TO EXTERNAL SHA09W07 + ORGANIZATION IS SEQUENTIAL. + SELECT W08OUTFIL ASSIGN TO EXTERNAL SHA09W08 + ORGANIZATION IS SEQUENTIAL. + SELECT W09OUTFIL ASSIGN TO EXTERNAL SHA09W09 + ORGANIZATION IS SEQUENTIAL. + SELECT W10OUTFIL ASSIGN TO EXTERNAL SHA09W10 + ORGANIZATION IS SEQUENTIAL. + SELECT W11OUTFIL ASSIGN TO EXTERNAL SHA09W11 + ORGANIZATION IS SEQUENTIAL. + SELECT W12OUTFIL ASSIGN TO EXTERNAL SHA09W12 + ORGANIZATION IS SEQUENTIAL. + SELECT W13OUTFIL ASSIGN TO EXTERNAL SHA09W13 + ORGANIZATION IS SEQUENTIAL. + SELECT W14OUTFIL ASSIGN TO EXTERNAL SHA09W14 + ORGANIZATION IS SEQUENTIAL. + SELECT W15OUTFIL ASSIGN TO EXTERNAL SHA09W15 + ORGANIZATION IS SEQUENTIAL. + SELECT W16OUTFIL ASSIGN TO EXTERNAL SHA09W16 + ORGANIZATION IS SEQUENTIAL. + SELECT W17OUTFIL ASSIGN TO EXTERNAL SHA09W17 + ORGANIZATION IS SEQUENTIAL. + SELECT W18OUTFIL ASSIGN TO EXTERNAL SHA09W18 + ORGANIZATION IS SEQUENTIAL. + SELECT W19OUTFIL ASSIGN TO EXTERNAL SHA09W19 + ORGANIZATION IS SEQUENTIAL. + SELECT W20OUTFIL ASSIGN TO EXTERNAL SHA09W20 + ORGANIZATION IS SEQUENTIAL. + SELECT W21OUTFIL ASSIGN TO EXTERNAL SHA09W21 + ORGANIZATION IS SEQUENTIAL. + SELECT W22OUTFIL ASSIGN TO EXTERNAL SHA09W22 + ORGANIZATION IS SEQUENTIAL. + SELECT W23OUTFIL ASSIGN TO EXTERNAL SHA09W23 + ORGANIZATION IS SEQUENTIAL. + SELECT W24OUTFIL ASSIGN TO EXTERNAL SHA09W24 + ORGANIZATION IS SEQUENTIAL. + SELECT W25OUTFIL ASSIGN TO EXTERNAL SHA09W25 + ORGANIZATION IS SEQUENTIAL. + SELECT W98OUTFIL ASSIGN TO EXTERNAL SHA09W98 + ORGANIZATION IS SEQUENTIAL. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * R01: RPT-DATA(300B FB) * + ***************************************************************** + FD R01INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R01INNREC. + COPY SHA08REC REPLACING ==(A)== BY ==R01==. + * + ***************************************************************** + * W01: PREF-OUT-01(300B FB)(PREF-CODE=01) * + ***************************************************************** + FD W01OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W01OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W01==. + * + ***************************************************************** + * W02: PREF-OUT-02(300B FB)(PREF-CODE=02) * + ***************************************************************** + FD W02OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W02OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W02==. + * + ***************************************************************** + * W03: PREF-OUT-03(300B FB)(PREF-CODE=03) * + ***************************************************************** + FD W03OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W03OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W03==. + * + ***************************************************************** + * W04: PREF-OUT-04(300B FB)(PREF-CODE=04) * + ***************************************************************** + FD W04OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W04OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W04==. + * + ***************************************************************** + * W05: PREF-OUT-05(300B FB)(PREF-CODE=05) * + ***************************************************************** + FD W05OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W05OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W05==. + * + ***************************************************************** + * W06: PREF-OUT-06(300B FB)(PREF-CODE=06) * + ***************************************************************** + FD W06OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W06OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W06==. + * + ***************************************************************** + * W07: PREF-OUT-07(300B FB)(PREF-CODE=07) * + ***************************************************************** + FD W07OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W07OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W07==. + * + ***************************************************************** + * W08: PREF-OUT-08(300B FB)(PREF-CODE=08) * + ***************************************************************** + FD W08OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W08OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W08==. + * + ***************************************************************** + * W09: PREF-OUT-09(300B FB)(PREF-CODE=09) * + ***************************************************************** + FD W09OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W09OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W09==. + * + ***************************************************************** + * W10: PREF-OUT-10(300B FB)(PREF-CODE=10) * + ***************************************************************** + FD W10OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W10OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W10==. + * + ***************************************************************** + * W11: PREF-OUT-11(300B FB)(PREF-CODE=11) * + ***************************************************************** + FD W11OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W11OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W11==. + * + ***************************************************************** + * W12: PREF-OUT-12(300B FB)(PREF-CODE=12) * + ***************************************************************** + FD W12OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W12OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W12==. + * + ***************************************************************** + * W13: PREF-OUT-13(300B FB)(PREF-CODE=13) * + ***************************************************************** + FD W13OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W13OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W13==. + * + ***************************************************************** + * W14: PREF-OUT-14(300B FB)(PREF-CODE=14) * + ***************************************************************** + FD W14OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W14OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W14==. + * + ***************************************************************** + * W15: PREF-OUT-15(300B FB)(PREF-CODE=15) * + ***************************************************************** + FD W15OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W15OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W15==. + * + ***************************************************************** + * W16: PREF-OUT-16(300B FB)(PREF-CODE=16) * + ***************************************************************** + FD W16OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W16OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W16==. + * + ***************************************************************** + * W17: PREF-OUT-17(300B FB)(PREF-CODE=17) * + ***************************************************************** + FD W17OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W17OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W17==. + * + ***************************************************************** + * W18: PREF-OUT-18(300B FB)(PREF-CODE=18) * + ***************************************************************** + FD W18OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W18OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W18==. + * + ***************************************************************** + * W19: PREF-OUT-19(300B FB)(PREF-CODE=19) * + ***************************************************************** + FD W19OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W19OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W19==. + * + ***************************************************************** + * W20: PREF-OUT-20(300B FB)(PREF-CODE=20) * + ***************************************************************** + FD W20OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W20OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W20==. + * + ***************************************************************** + * W21: PREF-OUT-21(300B FB)(PREF-CODE=21) * + ***************************************************************** + FD W21OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W21OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W21==. + * + ***************************************************************** + * W22: PREF-OUT-22(300B FB)(PREF-CODE=22) * + ***************************************************************** + FD W22OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W22OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W22==. + * + ***************************************************************** + * W23: PREF-OUT-23(300B FB)(PREF-CODE=23) * + ***************************************************************** + FD W23OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W23OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W23==. + * + ***************************************************************** + * W24: PREF-OUT-24(300B FB)(PREF-CODE=24) * + ***************************************************************** + FD W24OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W24OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W24==. + * + ***************************************************************** + * W25: PREF-OUT-25(300B FB)(PREF-CODE=25) * + ***************************************************************** + FD W25OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W25OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W25==. + * + ***************************************************************** + * W98: ERROR-LOG(VB) * + ***************************************************************** + FD W98OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS V. + 01 W98OUTREC. + COPY ZAN05REC REPLACING ==(A)== BY ==W98==. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'SHA09S25'. + 03 CNS-MSGSTR PIC 9(003) VALUE 001. + 03 CNS-MSGFIN PIC 9(003) VALUE 002. + 03 CNS-MSGSUBEEK PIC 9(003) VALUE 005. + 03 CNS-MSGIINKES PIC 9(003) VALUE 006. + 03 CNS-MSGOUTKES PIC 9(003) VALUE 007. + 03 CNS-MSGKEYINF PIC 9(003) VALUE 033. + 03 CNS-KN0002 PIC 9(001) VALUE 2. + 03 CNS-ABD999 PIC 9(003) VALUE 999. + * + ***************************************************************** + * カウンタ領域 * + ***************************************************************** + 01 CUNARA. + 03 CUN-R01INN PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W01OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W02OUT 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. + 03 CUN-W05OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W06OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W07OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W08OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W09OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W10OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W11OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W12OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W13OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W14OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W15OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W16OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W17OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W18OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W19OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W20OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W21OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W22OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W23OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W24OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W25OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W98OUT PIC S9(009) COMP-3 VALUE ZERO. + * + ***************************************************************** + * 作業領域 * + ***************************************************************** + 01 WRKARA. + 03 WRK-U06 PIC 9(008). + 03 WRK-R01EOF PIC X(001). + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + *** 運用日付取得 + COPY SHADATAC. + *** メッセージ編集出力SR用 + COPY SHAMSGAC. + *** ABEND処理SR用 + COPY SHAENDAC. + * + PROCEDURE DIVISION. + ***************************************************************** + * サブモジュールNO: (0.0) * + * サブモジュール名: 制御処理 * + * 処理概要 : メインコントロール処理 * + ***************************************************************** + 0000MAJCOLSOR SECTION. + * + PERFORM 1000ITTSOR. + PERFORM 2000MAJSOR + UNTIL WRK-R01EOF = '1'. + PERFORM 3000STPSOR. + * + 0000MAJCOLSOR-EXT. + GOBACK. + * + ***************************************************************** + * サブモジュールNO: (1.0) * + * サブモジュール名: 初期処理 * + * 処理概要 : 開始メッセージ出力・各種初期化処理 * + ***************************************************************** + 1000ITTSOR SECTION. + * + *** 開始メッセージ出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGSTR TO M00MSGCOD. + PERFORM 4000MSGOUTSOR. + * + *** コンパイル日時出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGKEYINF TO M00MSGCOD. + MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01. + MOVE 'COMPILED' TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + *** ワークエリア初期化 + INITIALIZE WRKARA. + * + *** 運用日付取得 + INITIALIZE D01UBSPAR. + CALL 'SUB01DAT' USING D01UBSPAR. + IF D01FKICOD = ZERO + MOVE D01UBSUDATE TO WRK-U06 + ELSE + INITIALIZE M00MHOPAR + MOVE CNS-MSGSUBEEK TO M00MSGCOD + MOVE 'SUB01DAT' TO M00UMKDATS22-01 + MOVE D01FKICOD TO M00UMKDATS22-02 + PERFORM 4000MSGOUTSOR + PERFORM 9999ABDSOR + END-IF. + * + *** 入出力ファイルOPEN + OPEN INPUT R01INNFIL. + OPEN OUTPUT W01OUTFIL + W02OUTFIL + W03OUTFIL + W04OUTFIL + W05OUTFIL + W06OUTFIL + W07OUTFIL + W08OUTFIL + W09OUTFIL + W10OUTFIL + W11OUTFIL + W12OUTFIL + W13OUTFIL + W14OUTFIL + W15OUTFIL + W16OUTFIL + W17OUTFIL + W18OUTFIL + W19OUTFIL + W20OUTFIL + W21OUTFIL + W22OUTFIL + W23OUTFIL + W24OUTFIL + W25OUTFIL + W98OUTFIL. + * + *** R01を読み込み + PERFORM 1100R01INNSOR. + * + 1000ITTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (1.1) * + * サブモジュール名: R01読込処理 * + * 処理概要 : レコード読込・EOF判定処理 * + ***************************************************************** + 1100R01INNSOR SECTION. + * + READ R01INNFIL + AT END + MOVE '1' TO WRK-R01EOF + NOT AT END + ADD 1 TO CUN-R01INN + END-READ. + * + 1100R01INNSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.0) * + * サブモジュール名: 主処理 * + * 処理概要 : PREF-CODE判定→該当ファイル出力 * + ***************************************************************** + 2000MAJSOR SECTION. + * + PERFORM 2100SPLITSOR. + PERFORM 1100R01INNSOR. + * + 2000MAJSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.1) * + * サブモジュール名: PREF-CODE判定分割出力 * + * 処理概要 : EVALUATEでPREF-CODEに応じたファイル出力 * + ***************************************************************** + 2100SPLITSOR SECTION. + * + EVALUATE R01PREF-CODE + WHEN 01 + INITIALIZE W01OUTREC + MOVE R01PREF-CODE TO W01PREF-CODE + MOVE R01INSURER-CODE TO W01INSURER-CODE + STRING R01EMP-ID + R01EMP-NAME + R01OFFICE-NO + R01OFFICE-NAME + R01INSURER-CODE + R01INSURER-NAME + DELIMITED BY SIZE + INTO W01RPT-BODY + WRITE W01OUTREC + ADD 1 TO CUN-W01OUT + WHEN 02 + INITIALIZE W02OUTREC + MOVE R01PREF-CODE TO W02PREF-CODE + MOVE R01INSURER-CODE TO W02INSURER-CODE + STRING R01EMP-ID + R01EMP-NAME + R01OFFICE-NO + R01OFFICE-NAME + R01INSURER-CODE + R01INSURER-NAME + DELIMITED BY SIZE + INTO W02RPT-BODY + WRITE W02OUTREC + ADD 1 TO CUN-W02OUT + WHEN 03 + INITIALIZE W03OUTREC + MOVE R01PREF-CODE TO W03PREF-CODE + MOVE R01INSURER-CODE TO W03INSURER-CODE + STRING R01EMP-ID + R01EMP-NAME + R01OFFICE-NO + R01OFFICE-NAME + R01INSURER-CODE + R01INSURER-NAME + DELIMITED BY SIZE + INTO W03RPT-BODY + WRITE W03OUTREC + ADD 1 TO CUN-W03OUT + WHEN 04 + INITIALIZE W04OUTREC + MOVE R01PREF-CODE TO W04PREF-CODE + MOVE R01INSURER-CODE TO W04INSURER-CODE + STRING R01EMP-ID + R01EMP-NAME + R01OFFICE-NO + R01OFFICE-NAME + R01INSURER-CODE + R01INSURER-NAME + DELIMITED BY SIZE + INTO W04RPT-BODY + WRITE W04OUTREC + ADD 1 TO CUN-W04OUT + WHEN 05 + INITIALIZE W05OUTREC + MOVE R01PREF-CODE TO W05PREF-CODE + MOVE R01INSURER-CODE TO W05INSURER-CODE + STRING R01EMP-ID + R01EMP-NAME + R01OFFICE-NO + R01OFFICE-NAME + R01INSURER-CODE + R01INSURER-NAME + DELIMITED BY SIZE + INTO W05RPT-BODY + WRITE W05OUTREC + ADD 1 TO CUN-W05OUT + WHEN 06 + INITIALIZE W06OUTREC + MOVE R01PREF-CODE TO W06PREF-CODE + MOVE R01INSURER-CODE TO W06INSURER-CODE + STRING R01EMP-ID + R01EMP-NAME + R01OFFICE-NO + R01OFFICE-NAME + R01INSURER-CODE + R01INSURER-NAME + DELIMITED BY SIZE + INTO W06RPT-BODY + WRITE W06OUTREC + ADD 1 TO CUN-W06OUT + WHEN 07 + INITIALIZE W07OUTREC + MOVE R01PREF-CODE TO W07PREF-CODE + MOVE R01INSURER-CODE TO W07INSURER-CODE + STRING R01EMP-ID + R01EMP-NAME + R01OFFICE-NO + R01OFFICE-NAME + R01INSURER-CODE + R01INSURER-NAME + DELIMITED BY SIZE + INTO W07RPT-BODY + WRITE W07OUTREC + ADD 1 TO CUN-W07OUT + WHEN 08 + INITIALIZE W08OUTREC + MOVE R01PREF-CODE TO W08PREF-CODE + MOVE R01INSURER-CODE TO W08INSURER-CODE + STRING R01EMP-ID + R01EMP-NAME + R01OFFICE-NO + R01OFFICE-NAME + R01INSURER-CODE + R01INSURER-NAME + DELIMITED BY SIZE + INTO W08RPT-BODY + WRITE W08OUTREC + ADD 1 TO CUN-W08OUT + WHEN 09 + INITIALIZE W09OUTREC + MOVE R01PREF-CODE TO W09PREF-CODE + MOVE R01INSURER-CODE TO W09INSURER-CODE + STRING R01EMP-ID + R01EMP-NAME + R01OFFICE-NO + R01OFFICE-NAME + R01INSURER-CODE + R01INSURER-NAME + DELIMITED BY SIZE + INTO W09RPT-BODY + WRITE W09OUTREC + ADD 1 TO CUN-W09OUT + WHEN 10 + INITIALIZE W10OUTREC + MOVE R01PREF-CODE TO W10PREF-CODE + MOVE R01INSURER-CODE TO W10INSURER-CODE + STRING R01EMP-ID + R01EMP-NAME + R01OFFICE-NO + R01OFFICE-NAME + R01INSURER-CODE + R01INSURER-NAME + DELIMITED BY SIZE + INTO W10RPT-BODY + WRITE W10OUTREC + ADD 1 TO CUN-W10OUT + WHEN 11 + INITIALIZE W11OUTREC + MOVE R01PREF-CODE TO W11PREF-CODE + MOVE R01INSURER-CODE TO W11INSURER-CODE + STRING R01EMP-ID + R01EMP-NAME + R01OFFICE-NO + R01OFFICE-NAME + R01INSURER-CODE + R01INSURER-NAME + DELIMITED BY SIZE + INTO W11RPT-BODY + WRITE W11OUTREC + ADD 1 TO CUN-W11OUT + WHEN 12 + INITIALIZE W12OUTREC + MOVE R01PREF-CODE TO W12PREF-CODE + MOVE R01INSURER-CODE TO W12INSURER-CODE + STRING R01EMP-ID + R01EMP-NAME + R01OFFICE-NO + R01OFFICE-NAME + R01INSURER-CODE + R01INSURER-NAME + DELIMITED BY SIZE + INTO W12RPT-BODY + WRITE W12OUTREC + ADD 1 TO CUN-W12OUT + WHEN 13 + INITIALIZE W13OUTREC + MOVE R01PREF-CODE TO W13PREF-CODE + MOVE R01INSURER-CODE TO W13INSURER-CODE + STRING R01EMP-ID + R01EMP-NAME + R01OFFICE-NO + R01OFFICE-NAME + R01INSURER-CODE + R01INSURER-NAME + DELIMITED BY SIZE + INTO W13RPT-BODY + WRITE W13OUTREC + ADD 1 TO CUN-W13OUT + WHEN 14 + INITIALIZE W14OUTREC + MOVE R01PREF-CODE TO W14PREF-CODE + MOVE R01INSURER-CODE TO W14INSURER-CODE + STRING R01EMP-ID + R01EMP-NAME + R01OFFICE-NO + R01OFFICE-NAME + R01INSURER-CODE + R01INSURER-NAME + DELIMITED BY SIZE + INTO W14RPT-BODY + WRITE W14OUTREC + ADD 1 TO CUN-W14OUT + WHEN 15 + INITIALIZE W15OUTREC + MOVE R01PREF-CODE TO W15PREF-CODE + MOVE R01INSURER-CODE TO W15INSURER-CODE + STRING R01EMP-ID + R01EMP-NAME + R01OFFICE-NO + R01OFFICE-NAME + R01INSURER-CODE + R01INSURER-NAME + DELIMITED BY SIZE + INTO W15RPT-BODY + WRITE W15OUTREC + ADD 1 TO CUN-W15OUT + WHEN 16 + INITIALIZE W16OUTREC + MOVE R01PREF-CODE TO W16PREF-CODE + MOVE R01INSURER-CODE TO W16INSURER-CODE + STRING R01EMP-ID + R01EMP-NAME + R01OFFICE-NO + R01OFFICE-NAME + R01INSURER-CODE + R01INSURER-NAME + DELIMITED BY SIZE + INTO W16RPT-BODY + WRITE W16OUTREC + ADD 1 TO CUN-W16OUT + WHEN 17 + INITIALIZE W17OUTREC + MOVE R01PREF-CODE TO W17PREF-CODE + MOVE R01INSURER-CODE TO W17INSURER-CODE + STRING R01EMP-ID + R01EMP-NAME + R01OFFICE-NO + R01OFFICE-NAME + R01INSURER-CODE + R01INSURER-NAME + DELIMITED BY SIZE + INTO W17RPT-BODY + WRITE W17OUTREC + ADD 1 TO CUN-W17OUT + WHEN 18 + INITIALIZE W18OUTREC + MOVE R01PREF-CODE TO W18PREF-CODE + MOVE R01INSURER-CODE TO W18INSURER-CODE + STRING R01EMP-ID + R01EMP-NAME + R01OFFICE-NO + R01OFFICE-NAME + R01INSURER-CODE + R01INSURER-NAME + DELIMITED BY SIZE + INTO W18RPT-BODY + WRITE W18OUTREC + ADD 1 TO CUN-W18OUT + WHEN 19 + INITIALIZE W19OUTREC + MOVE R01PREF-CODE TO W19PREF-CODE + MOVE R01INSURER-CODE TO W19INSURER-CODE + STRING R01EMP-ID + R01EMP-NAME + R01OFFICE-NO + R01OFFICE-NAME + R01INSURER-CODE + R01INSURER-NAME + DELIMITED BY SIZE + INTO W19RPT-BODY + WRITE W19OUTREC + ADD 1 TO CUN-W19OUT + WHEN 20 + INITIALIZE W20OUTREC + MOVE R01PREF-CODE TO W20PREF-CODE + MOVE R01INSURER-CODE TO W20INSURER-CODE + STRING R01EMP-ID + R01EMP-NAME + R01OFFICE-NO + R01OFFICE-NAME + R01INSURER-CODE + R01INSURER-NAME + DELIMITED BY SIZE + INTO W20RPT-BODY + WRITE W20OUTREC + ADD 1 TO CUN-W20OUT + WHEN 21 + INITIALIZE W21OUTREC + MOVE R01PREF-CODE TO W21PREF-CODE + MOVE R01INSURER-CODE TO W21INSURER-CODE + STRING R01EMP-ID + R01EMP-NAME + R01OFFICE-NO + R01OFFICE-NAME + R01INSURER-CODE + R01INSURER-NAME + DELIMITED BY SIZE + INTO W21RPT-BODY + WRITE W21OUTREC + ADD 1 TO CUN-W21OUT + WHEN 22 + INITIALIZE W22OUTREC + MOVE R01PREF-CODE TO W22PREF-CODE + MOVE R01INSURER-CODE TO W22INSURER-CODE + STRING R01EMP-ID + R01EMP-NAME + R01OFFICE-NO + R01OFFICE-NAME + R01INSURER-CODE + R01INSURER-NAME + DELIMITED BY SIZE + INTO W22RPT-BODY + WRITE W22OUTREC + ADD 1 TO CUN-W22OUT + WHEN 23 + INITIALIZE W23OUTREC + MOVE R01PREF-CODE TO W23PREF-CODE + MOVE R01INSURER-CODE TO W23INSURER-CODE + STRING R01EMP-ID + R01EMP-NAME + R01OFFICE-NO + R01OFFICE-NAME + R01INSURER-CODE + R01INSURER-NAME + DELIMITED BY SIZE + INTO W23RPT-BODY + WRITE W23OUTREC + ADD 1 TO CUN-W23OUT + WHEN 24 + INITIALIZE W24OUTREC + MOVE R01PREF-CODE TO W24PREF-CODE + MOVE R01INSURER-CODE TO W24INSURER-CODE + STRING R01EMP-ID + R01EMP-NAME + R01OFFICE-NO + R01OFFICE-NAME + R01INSURER-CODE + R01INSURER-NAME + DELIMITED BY SIZE + INTO W24RPT-BODY + WRITE W24OUTREC + ADD 1 TO CUN-W24OUT + WHEN 25 + INITIALIZE W25OUTREC + MOVE R01PREF-CODE TO W25PREF-CODE + MOVE R01INSURER-CODE TO W25INSURER-CODE + STRING R01EMP-ID + R01EMP-NAME + R01OFFICE-NO + R01OFFICE-NAME + R01INSURER-CODE + R01INSURER-NAME + DELIMITED BY SIZE + INTO W25RPT-BODY + WRITE W25OUTREC + ADD 1 TO CUN-W25OUT + WHEN OTHER + INITIALIZE W98OUTREC + MOVE '01' TO W98ERR-CATEGORY + STRING 'INVALID PREF-CODE:' + R01PREF-CODE + DELIMITED BY SIZE + INTO W98ERR-DETAIL + WRITE W98OUTREC + ADD 1 TO CUN-W98OUT + END-EVALUATE. + * + 2100SPLITSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (3.0) * + * サブモジュール名: 終了処理 * + * 処理概要 : CLOSE WITH LOCK・件数出力 * + ***************************************************************** + 3000STPSOR SECTION. + * + *** 出力ファイルCLOSE WITH LOCK + CLOSE R01INNFIL. + CLOSE W01OUTFIL WITH LOCK + W02OUTFIL WITH LOCK + W03OUTFIL WITH LOCK + W04OUTFIL WITH LOCK + W05OUTFIL WITH LOCK + W06OUTFIL WITH LOCK + W07OUTFIL WITH LOCK + W08OUTFIL WITH LOCK + W09OUTFIL WITH LOCK + W10OUTFIL WITH LOCK + W11OUTFIL WITH LOCK + W12OUTFIL WITH LOCK + W13OUTFIL WITH LOCK + W14OUTFIL WITH LOCK + W15OUTFIL WITH LOCK + W16OUTFIL WITH LOCK + W17OUTFIL WITH LOCK + W18OUTFIL WITH LOCK + W19OUTFIL WITH LOCK + W20OUTFIL WITH LOCK + W21OUTFIL WITH LOCK + W22OUTFIL WITH LOCK + W23OUTFIL WITH LOCK + W24OUTFIL WITH LOCK + W25OUTFIL WITH LOCK + W98OUTFIL. + * + *** 入出力件数出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'SHA09R01' TO M00UMKDATS22-01. + MOVE CUN-R01INN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'SHA09W01-25 TOTAL' TO M00UMKDATS22-01. + MOVE CUN-W01OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'SHA09W98(ERROR)' TO M00UMKDATS22-01. + MOVE CUN-W98OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + *** 終了メッセージ出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGFIN TO M00MSGCOD. + PERFORM 4000MSGOUTSOR. + * + 3000STPSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (4.0) * + * サブモジュール名: メッセージ編集出力処理 * + * 処理概要 : メッセージ編集出力サブPGM呼出 * + ***************************************************************** + 4000MSGOUTSOR SECTION. + * + MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1). + MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1). + MOVE CNS-PRGIDX TO M00UMKDATS22-05. + CALL 'SUB02MSG' USING M00MHOPAR. + * + 4000MSGOUTSOR-EXT. + EXIT. + * + ***************************************************************** + * サブモジュールNO: (9.9) * + * サブモジュール名: ABEND処理 * + * 処理概要 : ABENDサブPGM呼出 * + ***************************************************************** + 9999ABDSOR SECTION. + * + MOVE CNS-ABD999 TO E01ABDCOD. + CALL 'SUB03END' USING E01ABDPAR. + * + 9999ABDSOR-EXT. + EXIT. diff --git a/src/SHA10S10.cbl b/src/SHA10S10.cbl new file mode 100644 index 0000000..6138b43 --- /dev/null +++ b/src/SHA10S10.cbl @@ -0,0 +1,479 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. SHA10S10. + ***************************************************************** + * システム名 : 社会保険管理システム * + * プログラムID : SHA10S10 * + * プログラム名 : 保険者別分割出力処理 * + * 作成日 : 2026-07-11 * + * 処理概要 : RPT-DATAをINSURER-CODE(01~99)で判定 * + * し、99個の出力ファイルに振り分けて出力。 * + * CLOSE WITH LOCKで各ファイルを確定する。 * + * * + * * + * 備考: 99ファイルの全SELECTは膨大となるため、本実装では * + * 001-010の10ファイルを代表定義。全99ファイルへの展開は * + * 本番IBM COBOLビルド時にジェネ生成で行う。 * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 2026-07-11 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT R01INNFIL ASSIGN TO EXTERNAL SHA10R01 + ORGANIZATION IS SEQUENTIAL. + SELECT W01OUTFIL ASSIGN TO EXTERNAL SHA10W01 + ORGANIZATION IS SEQUENTIAL. + SELECT W02OUTFIL ASSIGN TO EXTERNAL SHA10W02 + ORGANIZATION IS SEQUENTIAL. + SELECT W03OUTFIL ASSIGN TO EXTERNAL SHA10W03 + ORGANIZATION IS SEQUENTIAL. + SELECT W04OUTFIL ASSIGN TO EXTERNAL SHA10W04 + ORGANIZATION IS SEQUENTIAL. + SELECT W05OUTFIL ASSIGN TO EXTERNAL SHA10W05 + ORGANIZATION IS SEQUENTIAL. + SELECT W06OUTFIL ASSIGN TO EXTERNAL SHA10W06 + ORGANIZATION IS SEQUENTIAL. + SELECT W07OUTFIL ASSIGN TO EXTERNAL SHA10W07 + ORGANIZATION IS SEQUENTIAL. + SELECT W08OUTFIL ASSIGN TO EXTERNAL SHA10W08 + ORGANIZATION IS SEQUENTIAL. + SELECT W09OUTFIL ASSIGN TO EXTERNAL SHA10W09 + ORGANIZATION IS SEQUENTIAL. + SELECT W10OUTFIL ASSIGN TO EXTERNAL SHA10W10 + ORGANIZATION IS SEQUENTIAL. + *** 銈ㄣ儵銉煎嚭鍔涚敤 + SELECT W99OUTFIL ASSIGN TO EXTERNAL SHA10W98 + ORGANIZATION IS SEQUENTIAL. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * R01: RPT-DATA锛?00B FB锛? * + ***************************************************************** + FD R01INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R01INNREC. + COPY SHA08REC REPLACING ==(A)== BY ==R01==. + * + ***************************************************************** + * W01-W10: INSURER-OUT-01銆?0锛?00B FB锛? * + ***************************************************************** + FD W01OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W01OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W01==. + FD W02OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W02OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W02==. + FD W03OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W03OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W03==. + FD W04OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W04OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W04==. + FD W05OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W05OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W05==. + FD W06OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W06OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W06==. + FD W07OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W07OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W07==. + FD W08OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W08OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W08==. + FD W09OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W09OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W09==. + FD W10OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W10OUTREC. + COPY SHA09REC REPLACING ==(A)== BY ==W10==. + * + ***************************************************************** + * W99: ERROR-LOG锛圴B锛? * + ***************************************************************** + FD W99OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS V. + 01 W99OUTREC. + COPY ZAN05REC REPLACING ==(A)== BY ==W99==. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * 銈炽兂銈广偪銉炽儓闋樺煙 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'SHA10S10'. + 03 CNS-MSGSTR PIC 9(003) VALUE 001. + 03 CNS-MSGFIN PIC 9(003) VALUE 002. + 03 CNS-MSGSUBEEK PIC 9(003) VALUE 005. + 03 CNS-MSGIINKES PIC 9(003) VALUE 006. + 03 CNS-MSGOUTKES PIC 9(003) VALUE 007. + 03 CNS-MSGKEYINF PIC 9(003) VALUE 033. + 03 CNS-KN0002 PIC 9(001) VALUE 2. + 03 CNS-ABD999 PIC 9(003) VALUE 999. + * + ***************************************************************** + * 銈偊銉炽偪闋樺煙 * + ***************************************************************** + 01 CUNARA. + 03 CUN-R01INN PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W01OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W02OUT 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. + 03 CUN-W05OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W06OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W07OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W08OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W09OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W10OUT PIC S9(009) COMP-3 VALUE ZERO. + 03 CUN-W99OUT PIC S9(009) COMP-3 VALUE ZERO. + * + ***************************************************************** + * 浣滄キ闋樺煙 * + ***************************************************************** + 01 WRKARA. + 03 WRK-U06 PIC 9(008). + 03 WRK-R01EOF PIC X(001). + 01 WRK-RPT-BODY-BUFFER. + 03 WRK-BUF-EMP-ID PIC 9(008). + 03 WRK-BUF-EMP-NAME PIC X(040). + 03 WRK-BUF-OFFICE-NO PIC X(004). + 03 WRK-BUF-OFFICE-NAME PIC X(040). + 03 WRK-BUF-INSURER-NAME PIC X(060). + 03 WRK-BUF-MONTHLY-AMOUNT PIC 9(009). + 03 WRK-BUF-GRADE-CODE PIC 9(002). + 03 WRK-BUF-REPORT-TYPE PIC X(002). + 03 WRK-BUF-REPORT-DATE PIC 9(008). + 03 WRK-BUF-FILLER PIC X(121). + * + ***************************************************************** + * 銈点儢銉椼儹銈般儵銉犻€g怠闋樺煙 * + ***************************************************************** + *** 閬嬬敤鏃ヤ粯鍙栧緱 + COPY SHADATAC. + COPY SHAMSGAC. + COPY SHAENDAC. + * + PROCEDURE DIVISION. + ***************************************************************** + * 銈点儢銉偢銉ャ兗銉玁O: (0.0) * + * 銈点儢銉偢銉ャ兗銉悕: 鍒跺尽鍑︾悊 * + * 鍑︾悊姒傝 : 銉°偆銉炽偝銉炽儓銉兗銉嚘鐞? * + ***************************************************************** + 0000MAJCOLSOR SECTION. + * + PERFORM 1000ITTSOR. + PERFORM 2000MAJSOR + UNTIL WRK-R01EOF = '1'. + PERFORM 3000STPSOR. + * + 0000MAJCOLSOR-EXT. + GOBACK. + * + ***************************************************************** + * 銈点儢銉偢銉ャ兗銉玁O: (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 = ZERO + MOVE D01UBSUDATE TO WRK-U06 + ELSE + INITIALIZE M00MHOPAR + MOVE CNS-MSGSUBEEK TO M00MSGCOD + MOVE 'SUB01DAT' TO M00UMKDATS22-01 + MOVE D01FKICOD TO M00UMKDATS22-02 + PERFORM 4000MSGOUTSOR + PERFORM 9999ABDSOR + END-IF. + * + *** 鍏ュ嚭鍔涖儠銈°偆銉玂PEN + OPEN INPUT R01INNFIL. + OPEN OUTPUT W01OUTFIL + W02OUTFIL + W03OUTFIL + W04OUTFIL + W05OUTFIL + W06OUTFIL + W07OUTFIL + W08OUTFIL + W09OUTFIL + W10OUTFIL + W99OUTFIL. + * + *** R01銈掕銇胯炯銇? PERFORM 1100R01INNSOR. + * + 1000ITTSOR-EXT. + EXIT. + * + ***************************************************************** + * 銈点儢銉偢銉ャ兗銉玁O: (1.1) * + * 銈点儢銉偢銉ャ兗銉悕: R01瑾炯鍑︾悊 * + * 鍑︾悊姒傝 : 銉偝銉笺儔瑾炯銉籈OF鍒ゅ畾鍑︾悊 * + ***************************************************************** + 1100R01INNSOR SECTION. + * + READ R01INNFIL + AT END + MOVE '1' TO WRK-R01EOF + NOT AT END + ADD 1 TO CUN-R01INN + END-READ. + * + 1100R01INNSOR-EXT. + EXIT. + * + ***************************************************************** + * 銈点儢銉偢銉ャ兗銉玁O: (2.0) * + * 銈点儢銉偢銉ャ兗銉悕: 涓诲嚘鐞? * + * 鍑︾悊姒傝 : INSURER-CODE鍒ゅ畾鈫掕┎褰撱儠銈°偆銉嚭鍔? * + ***************************************************************** + 2000MAJSOR SECTION. + * + PERFORM 2100SPLITSOR. + PERFORM 1100R01INNSOR. + * + 2000MAJSOR-EXT. + EXIT. + * + ***************************************************************** + * 銈点儢銉偢銉ャ兗銉玁O: (2.1) * + * 銈点儢銉偢銉ャ兗銉悕: INSURER-CODE鍒ゅ畾鍒嗗壊鍑哄姏 * + * 鍑︾悊姒傝 : EVALUATE銇NSURER-CODE銇繙銇樸仸銉曘偂銈ゃ儷鍑哄姏 * + * 001-099銇俱仹99銉曘偂銈ゃ儷銆傚叏99WHEN灞曢枊銇? * + * 銈炽兗銉夌敓鎴愩儎銉笺儷銇ц銇嗐€傛湰瀹熻銇唬琛?0浠躲€? * + ***************************************************************** + 2100SPLITSOR SECTION. + * + * RPT-BODY妲嬬瘔 + MOVE R01EMP-ID TO WRK-BUF-EMP-ID. + MOVE R01EMP-NAME TO WRK-BUF-EMP-NAME. + MOVE R01OFFICE-NO TO WRK-BUF-OFFICE-NO. + MOVE R01OFFICE-NAME TO WRK-BUF-OFFICE-NAME. + MOVE R01INSURER-NAME TO WRK-BUF-INSURER-NAME. + MOVE R01MONTHLY-AMOUNT TO WRK-BUF-MONTHLY-AMOUNT. + MOVE R01GRADE-CODE TO WRK-BUF-GRADE-CODE. + MOVE R01REPORT-TYPE TO WRK-BUF-REPORT-TYPE. + MOVE R01REPORT-DATE TO WRK-BUF-REPORT-DATE. + MOVE R01FILLER TO WRK-BUF-FILLER. + * + EVALUATE R01INSURER-CODE + WHEN '001' + INITIALIZE W01OUTREC + MOVE R01PREF-CODE TO W01PREF-CODE + MOVE R01INSURER-CODE TO W01INSURER-CODE + MOVE WRK-RPT-BODY-BUFFER TO W01RPT-BODY + WRITE W01OUTREC + ADD 1 TO CUN-W01OUT + WHEN '002' + INITIALIZE W02OUTREC + MOVE R01PREF-CODE TO W02PREF-CODE + MOVE R01INSURER-CODE TO W02INSURER-CODE + MOVE WRK-RPT-BODY-BUFFER TO W02RPT-BODY + WRITE W02OUTREC + ADD 1 TO CUN-W02OUT + WHEN '003' + INITIALIZE W03OUTREC + MOVE R01PREF-CODE TO W03PREF-CODE + MOVE R01INSURER-CODE TO W03INSURER-CODE + MOVE WRK-RPT-BODY-BUFFER TO W03RPT-BODY + WRITE W03OUTREC + ADD 1 TO CUN-W03OUT + WHEN '004' + INITIALIZE W04OUTREC + MOVE R01PREF-CODE TO W04PREF-CODE + MOVE R01INSURER-CODE TO W04INSURER-CODE + MOVE WRK-RPT-BODY-BUFFER TO W04RPT-BODY + WRITE W04OUTREC + ADD 1 TO CUN-W04OUT + WHEN '005' + INITIALIZE W05OUTREC + MOVE R01PREF-CODE TO W05PREF-CODE + MOVE R01INSURER-CODE TO W05INSURER-CODE + MOVE WRK-RPT-BODY-BUFFER TO W05RPT-BODY + WRITE W05OUTREC + ADD 1 TO CUN-W05OUT + WHEN '006' + INITIALIZE W06OUTREC + MOVE R01PREF-CODE TO W06PREF-CODE + MOVE R01INSURER-CODE TO W06INSURER-CODE + MOVE WRK-RPT-BODY-BUFFER TO W06RPT-BODY + WRITE W06OUTREC + ADD 1 TO CUN-W06OUT + WHEN '007' + INITIALIZE W07OUTREC + MOVE R01PREF-CODE TO W07PREF-CODE + MOVE R01INSURER-CODE TO W07INSURER-CODE + MOVE WRK-RPT-BODY-BUFFER TO W07RPT-BODY + WRITE W07OUTREC + ADD 1 TO CUN-W07OUT + WHEN '008' + INITIALIZE W08OUTREC + MOVE R01PREF-CODE TO W08PREF-CODE + MOVE R01INSURER-CODE TO W08INSURER-CODE + MOVE WRK-RPT-BODY-BUFFER TO W08RPT-BODY + WRITE W08OUTREC + ADD 1 TO CUN-W08OUT + WHEN '009' + INITIALIZE W09OUTREC + MOVE R01PREF-CODE TO W09PREF-CODE + MOVE R01INSURER-CODE TO W09INSURER-CODE + MOVE WRK-RPT-BODY-BUFFER TO W09RPT-BODY + WRITE W09OUTREC + ADD 1 TO CUN-W09OUT + WHEN '010' + INITIALIZE W10OUTREC + MOVE R01PREF-CODE TO W10PREF-CODE + MOVE R01INSURER-CODE TO W10INSURER-CODE + MOVE WRK-RPT-BODY-BUFFER TO W10RPT-BODY + WRITE W10OUTREC + ADD 1 TO CUN-W10OUT + WHEN OTHER + INITIALIZE W99OUTREC + MOVE '01' TO W99ERR-CATEGORY + STRING 'INVALID INSURER:' + R01INSURER-CODE + DELIMITED BY SIZE + INTO W99ERR-DETAIL + WRITE W99OUTREC + ADD 1 TO CUN-W99OUT + END-EVALUATE. + * + 2100SPLITSOR-EXT. + EXIT. + * + ***************************************************************** + * 銈点儢銉偢銉ャ兗銉玁O: (3.0) * + * 銈点儢銉偢銉ャ兗銉悕: 绲備簡鍑︾悊 * + * 鍑︾悊姒傝 : CLOSE WITH LOCK銉讳欢鏁板嚭鍔? * + ***************************************************************** + 3000STPSOR SECTION. + * + *** 鍏ュ嚭鍔涖儠銈°偆銉獵LOSE + CLOSE R01INNFIL. + CLOSE W01OUTFIL WITH LOCK + W02OUTFIL WITH LOCK + W03OUTFIL WITH LOCK + W04OUTFIL WITH LOCK + W05OUTFIL WITH LOCK + W06OUTFIL WITH LOCK + W07OUTFIL WITH LOCK + W08OUTFIL WITH LOCK + W09OUTFIL WITH LOCK + W10OUTFIL WITH LOCK + W99OUTFIL. + * + *** 鍏ュ嚭鍔涗欢鏁板嚭鍔? INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'SHA10R01' TO M00UMKDATS22-01. + MOVE CUN-R01INN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'SHA10W01-10 TOTAL' TO M00UMKDATS22-01. + MOVE CUN-W01OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'SHA10W98(ERROR)' TO M00UMKDATS22-01. + MOVE CUN-W99OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + *** 绲備簡銉°儍銈汇兗銈稿嚭鍔? INITIALIZE M00MHOPAR. + MOVE CNS-MSGFIN TO M00MSGCOD. + PERFORM 4000MSGOUTSOR. + * + 3000STPSOR-EXT. + EXIT. + * + ***************************************************************** + * 銈点儢銉偢銉ャ兗銉玁O: (4.0) * + * 銈点儢銉偢銉ャ兗銉悕: 銉°儍銈汇兗銈哥法闆嗗嚭鍔涘嚘鐞? * + * 鍑︾悊姒傝 : 銉°儍銈汇兗銈哥法闆嗗嚭鍔涖偟銉朠GM鍛煎嚭 * + ***************************************************************** + 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. + * + ***************************************************************** + * 銈点儢銉偢銉ャ兗銉玁O: (9.9) * + * 銈点儢銉偢銉ャ兗銉悕: ABEND鍑︾悊 * + * 鍑︾悊姒傝 : ABEND銈点儢PGM鍛煎嚭 * + ***************************************************************** + 9999ABDSOR SECTION. + * + MOVE CNS-ABD999 TO E01ABDCOD. + CALL 'SUB03END' USING E01ABDPAR. + * + 9999ABDSOR-EXT. + EXIT. diff --git a/使用資源一覧/SHA01CVT_使用資源一覧.md b/使用資源一覧/SHA01CVT_使用資源一覧.md new file mode 100644 index 0000000..86614a4 --- /dev/null +++ b/使用資源一覧/SHA01CVT_使用資源一覧.md @@ -0,0 +1,48 @@ +# SHA01CVT 使用資源一覧 + +## プログラム概要 +- **プログラムID**: SHA01CVT +- **プログラム名**: 被保険者資格データ変換処理 +- **処理概要**: ASCII CSVの被保険者資格データをINSPECT CONVERTINGでEBCDIC固定長に変換する。半角桁数チェックを内部処理として実施。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| SHA01R01 | INS-CSV-ASCII | 順編成 | F (固定長) | 500B | なし(自前定義) | +| SHA01W01 | INSURED-DATA | 順編成 | F (固定長) | 200B | SHA01REC | +| SHA01W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| SHA01REC | INSURED-DATA レコード定義(W01出力ファイル) | FILE SECTION | +| ZAN05REC | エラーログレコード定義(W02出力ファイル) | FILE SECTION | +| SHADATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE | +| SHAMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| SHAENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | +| SHACHKAC | 項目チェックサブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB01DAT | 運用日付取得 | 1000ITTSOR | +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | +| SUB04CHK | 日付/数値妥当性チェック | 2020HALFSOR | + +## 使用DB2テーブル + +なし(DB操作なし) + +## 処理フロー +1. 初期処理(開始メッセージ→コンパイル日時出力→ワーク初期化→SUB01DAT運用日取得→OPEN→初回読込) +2. 主処理:R01終了まで繰り返し + - CSV分解(UNSTRINGでカンマ区切り→各項目) + - 半角桁数チェック(氏名カナ20/被保険者番号10/事業所番号4/日付妥当性/数値妥当性→エラーはW02出力) + - ASCII→EBCDIC変換(変換テーブルで各バイト変換→INSURED-DATAレコードにMOVE) + - W01(INSURED-DATA)出力 + - R01次件READ +3. 終了処理(CLOSE→件数出力→終了メッセージ) diff --git a/使用資源一覧/SHA02MNC_使用資源一覧.md b/使用資源一覧/SHA02MNC_使用資源一覧.md new file mode 100644 index 0000000..caf53c6 --- /dev/null +++ b/使用資源一覧/SHA02MNC_使用資源一覧.md @@ -0,0 +1,51 @@ +# SHA02MNC 使用資源一覧 + +## プログラム概要 +- **プログラムID**: SHA02MNC +- **プログラム名**: 従業員保険情報統合処理 +- **処理概要**: DB2 EMP-MASTERとINSURANCE-RATESをマッチングし、従業員単位に統合出力する(M:N→M件マッチング)。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| SHA02W01 | EMP-INSURANCE | 順編成 | F (固定長) | 200B | SHA02REC | +| SHA02W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| SHA02REC | EMP-INSURANCE レコード定義(W01出力ファイル) | FILE SECTION | +| ZAN05REC | エラーログレコード定義(W02出力ファイル) | FILE SECTION | +| SQLCA | SQL通信領域 | WORKING-STORAGE | +| SHADATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE | +| SHAMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| SHAENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | +| SHACHKAC | 項目チェックサブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB01DAT | 運用日付取得 | 1000ITTSOR | +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | +| SUB04CHK | PARM検証 | 1000ITTSOR | + +## 使用DB2テーブル + +| DB名 | テーブル名 | I/O | 備考 | +|------|-----------|:---:|------| +| SALARYDB | EMP-MASTER | I | 従業員マスタ(SELECT) | +| INSURANCEDB | INSURANCE-RATES | I | 料率テーブル(内部表LOAD) | + +## 処理フロー +1. 初期処理(開始メッセージ→SUB01DAT運用日取得→PARM取得→DB接続→INSURANCE-RATES内部表LOAD→EMP-MASTER CURSOR OPEN/初回FETCH→出力ファイルOPEN) +2. 主処理:EMP-MASTER終了まで繰り返し + - 内部表線形探索(BASE-SALARYに合致するGRADE-CODE特定→該当なしはW02出力) + - 種別判定(DEPT-CODEでHEALTH-INS-TYPE/PENSION-TYPE判定) + - INSURER-CODE設定 + - W01(EMP-INSURANCE)出力 + - 次従業員FETCH +3. 終了処理(CLOSE CURSOR→ファイルCLOSE→件数出力→終了メッセージ) diff --git a/使用資源一覧/SHA03MNP_使用資源一覧.md b/使用資源一覧/SHA03MNP_使用資源一覧.md new file mode 100644 index 0000000..5ee7383 --- /dev/null +++ b/使用資源一覧/SHA03MNP_使用資源一覧.md @@ -0,0 +1,50 @@ +# SHA03MNP 使用資源一覧 + +## プログラム概要 +- **プログラムID**: SHA03MNP +- **プログラム名**: 保険料計算明細出力処理 +- **処理概要**: EMP-INSURANCE×INSURANCE-RATESの直積組合せにより保険料計算明細を出力する(M:N→M×N件出力)。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| SHA03R01 | EMP-INSURANCE | 順編成 | F (固定長) | 200B | SHA02REC | +| SHA03W01 | INS-DETAIL | 順編成 | F (固定長) | 300B | SHA03REC | +| SHA03W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| SHA02REC | EMP-INSURANCE レコード定義(R01入力ファイル) | FILE SECTION | +| SHA03REC | INS-DETAIL レコード定義(W01出力ファイル) | FILE SECTION | +| ZAN05REC | エラーログレコード定義(W02出力ファイル) | FILE SECTION | +| SQLCA | SQL通信領域 | WORKING-STORAGE | +| SHADATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE | +| SHAMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| SHAENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB01DAT | 運用日付取得 | 1000ITTSOR | +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | + +## 使用DB2テーブル + +| DB名 | テーブル名 | I/O | 備考 | +|------|-----------|:---:|------| +| INSURANCEDB | INSURANCE-RATES | I | 料率取得(内部表LOAD) | + +## 処理フロー +1. 初期処理(開始メッセージ→SUB01DAT運用日取得→PARM取得→DB接続→INSURANCE-RATES内部表LOAD→OPEN→R01初回READ) +2. 主処理:R01終了まで繰り返し + - 直積組合せ生成:従業員×全RATESエントリ + - 健康保険: HEALTH-PREMIUM = MONTHLY-AMOUNT × HEALTH-RATE (ROUNDED) + - 厚生年金: PENSION-PREMIUM = MONTHLY-AMOUNT × PENSION-RATE (ROUNDED) + - W01(INS-DETAIL)出力 + - R01次件READ +3. 終了処理(CLOSE→件数出力→終了メッセージ) diff --git a/使用資源一覧/SHA04TWO_使用資源一覧.md b/使用資源一覧/SHA04TWO_使用資源一覧.md new file mode 100644 index 0000000..cfb74ad --- /dev/null +++ b/使用資源一覧/SHA04TWO_使用資源一覧.md @@ -0,0 +1,53 @@ +# SHA04TWO 使用資源一覧 + +## プログラム概要 +- **プログラムID**: SHA04TWO +- **プログラム名**: 事業所保険者マッチング処理 +- **処理概要**: INSURED-DATAをOFFICE-MST/INSURER-MSTの2段階で1:1マッチングし、GRADED-LIST/UNMATCHED-LISTを出力する。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| SHA04R01 | INSURED-DATA | 順編成 | F (固定長) | 200B | SHA01REC | +| SHA04R02 | OFFICE-MST | 順編成 | F (固定長) | 80B | なし(自前定義) | +| SHA04R03 | INSURER-MST | 順編成 | F (固定長) | 80B | なし(自前定義) | +| SHA04W01 | GRADED-LIST | 順編成 | F (固定長) | 200B | SHA04REC | +| SHA04W02 | UNMATCHED-LIST | 順編成 | F (固定長) | 200B | なし(自前定義) | +| SHA04W03 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| SHA01REC | INSURED-DATA レコード定義(R01入力ファイル) | FILE SECTION | +| SHA04REC | GRADED-LIST レコード定義(W01出力ファイル) | FILE SECTION | +| ZAN05REC | エラーログレコード定義(W03出力ファイル) | FILE SECTION | +| SQLCA | SQL通信領域 | WORKING-STORAGE | +| SHAMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| SHAENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | +| SHADATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB01DAT | 運用日付取得 | 1000ITTSOR | +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | + +## 使用DB2テーブル + +| DB名 | テーブル名 | I/O | 備考 | +|------|-----------|:---:|------| +| INSURANCEDB | INSURED-MASTER | I | 履歴整合性確認 | + + +## 処理フロー +1. 初期処理(開始メッセージ→SUB01DAT運用日取得→OPEN→R02全件読込→OFFICE-TBL格納→R03全件読込→INSURER-TBL格納→DB接続→R01初回READ) +2. 主処理:R01終了まで繰り返し + - 第1段階マッチング:OFFICE-NO vs OFFICE-TBL線形探索→成功なら第2段階、失敗ならW02出力 + - 第2段階マッチング:INSURER-CODE vs INSURER-TBL線形探索→成功ならW01出力、失敗ならW02出力 + - DB2整合性検証:W01出力時INSURED-MASTER SELECT、異常はW03出力 + - R01次件READ +3. 終了処理(CLOSE→件数出力→終了メッセージ) diff --git a/使用資源一覧/SHA05TWN_使用資源一覧.md b/使用資源一覧/SHA05TWN_使用資源一覧.md new file mode 100644 index 0000000..e79aa48 --- /dev/null +++ b/使用資源一覧/SHA05TWN_使用資源一覧.md @@ -0,0 +1,46 @@ +# SHA05TWN 使用資源一覧 + +## プログラム概要 +- **プログラムID**: SHA05TWN +- **プログラム名**: 標準報酬月額等級判定処理 +- **処理概要**: SALARY-MONTHLYをEMP-IDでN:1キーブレイク集約し、平均標準報酬月額とGRADE-TBLをN:1マッチングして等級改定を判定する。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| SHA05R01 | SALARY-MONTHLY | 順編成 | F (固定長) | 200B | なし(自前定義) | +| SHA05R02 | GRADE-TBL | 順編成 | F (固定長) | 80B | なし(自前定義) | +| SHA05W01 | REVISED-GRADE | 順編成 | F (固定長) | 200B | SHA05REC | +| SHA05W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| SHA05REC | REVISED-GRADE レコード定義(W01出力ファイル) | FILE SECTION | +| ZAN05REC | エラーログレコード定義(W02出力ファイル) | FILE SECTION | +| SHAMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| SHAENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | +| SHADATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB01DAT | 運用日付取得 | 1000ITTSOR | +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | + +## 使用DB2テーブル + +なし(DB操作なし) + +## 処理フロー +1. 初期処理(開始メッセージ→SUB01DAT運用日取得→PARM取得→OPEN→R02全件読込→GRADE-TBL格納→R01初回READ) +2. 主処理:R01終了まで繰り返し + - 第1段階:キーブレイクN:1集約(同一EMP-ID: MONTHLY-AMOUNT累積→キー変更時: DIVIDEで平均標準報酬月額算出、TYPE='A'/'B'判定→該当なしはW02出力) + - 第2段階:等級テーブルN:1マッチング(GRADE-TBL線形探索→平均額に合致する等級コード取得→該当なしはW02出力、OLD≠NEWならW01出力) + - WRK-ACCUM INITIALIZE + - R01次件READ +3. 終了処理(最終キーグループ処理→CLOSE→件数出力→終了メッセージ) diff --git a/使用資源一覧/SHA06TWM_使用資源一覧.md b/使用資源一覧/SHA06TWM_使用資源一覧.md new file mode 100644 index 0000000..c199884 --- /dev/null +++ b/使用資源一覧/SHA06TWM_使用資源一覧.md @@ -0,0 +1,51 @@ +# SHA06TWM 使用資源一覧 + +## プログラム概要 +- **プログラムID**: SHA06TWM +- **プログラム名**: 保険料率適用・控除計算処理 +- **処理概要**: EMP-INSURANCEをDB2 INSURANCE-RATES(M×N)とAPPLICABLE-RULES(M:N)の2段階マッチングにより保険料を算出しDEDUCTED-RESULTを出力する。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| SHA06R01 | EMP-INSURANCE | 順編成 | F (固定長) | 200B | SHA02REC | +| SHA06R02 | APPLICABLE-RULES | 順編成 | F (固定長) | 80B | なし(自前定義) | +| SHA06W01 | DEDUCTED-RESULT | 順編成 | F (固定長) | 300B | SHA06REC | +| SHA06W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| SHA02REC | EMP-INSURANCE レコード定義(R01入力ファイル) | FILE SECTION | +| SHA06REC | DEDUCTED-RESULT レコード定義(W01出力ファイル) | FILE SECTION | +| ZAN05REC | エラーログレコード定義(W02出力ファイル) | FILE SECTION | +| SQLCA | SQL通信領域 | WORKING-STORAGE | +| SHAMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| SHAENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | +| SHADATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB01DAT | 運用日付取得 | 1000ITTSOR | +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | + +## 使用DB2テーブル + +| DB名 | テーブル名 | I/O | 備考 | +|------|-----------|:---:|------| +| INSURANCEDB | INSURANCE-RATES | I | 料率取得(SELECT) | +| SALARYDB | EMP-MASTER | I | 誕生日・扶養人数・地域コード取得(SELECT) | + +## 処理フロー +1. 初期処理(開始メッセージ→SUB01DAT運用日取得→OPEN→DB接続→R02全件読込→RULE-TBL格納→R01初回READ) +2. 主処理:R01終了まで繰り返し + - 第1段階:保険料率M×Nマッチング(GRADE-CODEでDB2 INSURANCE-RATES SELECT→料率取得、保険料計算) + - 第2段階:適用ルールM:Nマッチング(年齢算出→RULE-TBL線形探索→料率調整→保険料再計算) + - W01(DEDUCTED-RESULT)出力 + - R01次件READ +3. 終了処理(CLOSE→件数出力→終了メッセージ) diff --git a/使用資源一覧/SHA07KBR_使用資源一覧.md b/使用資源一覧/SHA07KBR_使用資源一覧.md new file mode 100644 index 0000000..975e787 --- /dev/null +++ b/使用資源一覧/SHA07KBR_使用資源一覧.md @@ -0,0 +1,52 @@ +# SHA07KBR 使用資源一覧 + +## プログラム概要 +- **プログラムID**: SHA07KBR +- **プログラム名**: 資格異動キーブレイク処理 +- **処理概要**: DB2 QUALIFICATION-CHANGESから資格異動データをFETCHし、従業員ごと(1:N)かつ保険者コード変更時(異キー)にキーブレイクしてサマリ・明細を出力する。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| SHA07W01 | CHG-SUMMARY | 順編成 | F (固定長) | 200B | SHA07REC | +| SHA07W02 | CHG-DETAIL | 順編成 | F (固定長) | 200B | SHA07REC | +| SHA07W03 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| SHA07REC | CHG-SUMMARY/CHG-DETAIL レコード定義(W01/W02出力ファイル) | FILE SECTION | +| ZAN05REC | エラーログレコード定義(W03出力ファイル) | FILE SECTION | +| SQLCA | SQL通信領域 | WORKING-STORAGE | +| SHADATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE | +| SHAMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| SHAENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | + + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB01DAT | 運用日付取得 | 1000ITTSOR | +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | + + +## 使用DB2テーブル + +| DB名 | テーブル名 | I/O | 備考 | +|------|-----------|:---:|------| +| INSURANCEDB | QUALIFICATION-CHANGES | I | DECLARE CURSOR / FETCH(JOIN with EMP-MASTER) | +| SALARYDB | EMP-MASTER | I | JOIN取得(従業員名) | + +## 処理フロー +1. 初期処理(開始メッセージ→SUB01DAT運用日取得→OPEN→DB接続→CURSOR宣言(ORDER BY EMP-ID, CHG-DATE)→初回FETCH→WS-PREV初期設定) +2. 主処理:FETCH終了まで繰り返し + - EMP-ID主キーブレイク判定:前回≠今回→サマリレコード出力 + - INSURER-CODE異キーブレイク判定:前回≠今回→サマリレコード出力 + - 明細レコード出力(全FETCHレコード) + - WS-PREV更新→次件FETCH +3. 最終グループ処理(最終従業員グループのサマリ/明細出力) +4. 終了処理(CLOSE CURSOR→DISCONNECT→ファイルCLOSE→件数出力→終了メッセージ) diff --git a/使用資源一覧/SHA08SRT_使用資源一覧.md b/使用資源一覧/SHA08SRT_使用資源一覧.md new file mode 100644 index 0000000..678d557 --- /dev/null +++ b/使用資源一覧/SHA08SRT_使用資源一覧.md @@ -0,0 +1,47 @@ +# SHA08SRT 使用資源一覧 + +## プログラム概要 +- **プログラムID**: SHA08SRT +- **プログラム名**: 届出書データSORT編集処理 +- **処理概要**: GRADED-LISTをINPUT PROCEDUREで全件RELEASEし、MONTHLY-AMOUNT/GRADE-CODEを保持したままPREF-CODE・OFFICE-NO・EMP-ID昇順SORT後、OUTPUT PROCEDUREでRETURNしてRPT-DATA出力する。GRADED-LISTはSHA04TWOのマッチング成功レコードであり全件有効のためSTATUSフィルタは不要。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| SHA08R01 | GRADED-LIST | 順編成 | F (固定長) | 200B | SHA04REC | +| SORTWORK | SD-SORTWORK | — | — | 200B | なし(自前SD定義) | +| SHA08W01 | RPT-DATA | 順編成 | F (固定長) | 300B | SHA08REC | +| SHA08W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| SHA04REC | GRADED-LIST レコード定義(R01入力ファイル) | FILE SECTION | +| SHA08REC | RPT-DATA レコード定義(W01出力ファイル) | FILE SECTION | +| ZAN05REC | エラーログレコード定義(W02出力ファイル) | FILE SECTION | +| SHADATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE | +| SHAMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| SHAENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB01DAT | 運用日付取得 | 1000ITTSOR | +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | + +## 使用DB2テーブル + +なし(DB操作なし) + +## 処理フロー +1. 初期処理(開始メッセージ→SUB01DAT運用日付取得→出力ファイルOPEN→入力ファイルOPEN) +2. SORT実行 + - INPUT PROCEDURE: R01全件読込→MONTHLY-AMOUNT/GRADE-CODEを含め全項目をSORTRECに転記→全件RELEASE + - SORT KEY: PREF-CODE昇順、OFFICE-NO昇順、EMP-ID昇順 + - OUTPUT PROCEDURE: RETURN→SHA08REC編集(MONTHLY-AMOUNT/GRADE-CODEはSR→W01転記)→REPORT-TYPE/REPORT-DATE設定→W01出力 +3. SORT結果判定(RETURN-CODE≠0→ABEND) +4. 終了処理(CLOSE→件数出力→終了メッセージ) diff --git a/使用資源一覧/SHA09S25_使用資源一覧.md b/使用資源一覧/SHA09S25_使用資源一覧.md new file mode 100644 index 0000000..883be8d --- /dev/null +++ b/使用資源一覧/SHA09S25_使用資源一覧.md @@ -0,0 +1,46 @@ +# SHA09S25 使用資源一覧 + +## プログラム概要 +- **プログラムID**: SHA09S25 +- **プログラム名**: 都道府県支部別分割出力処理 +- **処理概要**: RPT-DATAをPREF-CODE(01~25)で判定し、25個の出力ファイルに振り分けて出力する。CLOSE WITH LOCKで各ファイルを確定する。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| SHA09R01 | RPT-DATA | 順編成 | F (固定長) | 300B | SHA08REC | +| SHA09W01~W25 | PREF-OUT-01~25 | 順編成 | F (固定長) | 300B | SHA09REC | +| SHA09W98 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| SHA08REC | RPT-DATA レコード定義(R01入力ファイル) | FILE SECTION | +| SHA09REC | PREF-OUT レコード定義(W01~W25出力ファイル) | FILE SECTION | +| ZAN05REC | エラーログレコード定義(W98出力ファイル) | FILE SECTION | +| SHADATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE | +| SHAMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| SHAENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB01DAT | 運用日付取得 | 1000ITTSOR | +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | + +## 使用DB2テーブル + +なし(DB操作なし) + +## 処理フロー +1. 初期処理(開始メッセージ→SUB01DAT運用日付取得→OPEN(R01+W01~W25+W98)→R01初回READ) +2. 主処理:R01終了まで繰り返し + - PREF-CODE判定(EVALUATE PREF-CODE 01~25)→該当ファイルにWRITE + - SHA09REC編集: PREF-CODE/INSURER-CODE/RPT-BODY設定 + - R01次件READ + - PREF-CODE範囲外(01~25以外)→W98(ERROR-LOG)出力 +3. 終了処理(CLOSE WITH LOCK→件数出力→終了メッセージ) diff --git a/使用資源一覧/SHA10S10_使用資源一覧.md b/使用資源一覧/SHA10S10_使用資源一覧.md new file mode 100644 index 0000000..fcd1c98 --- /dev/null +++ b/使用資源一覧/SHA10S10_使用資源一覧.md @@ -0,0 +1,46 @@ +# SHA10S10 使用資源一覧 + +## プログラム概要 +- **プログラムID**: SHA10S10 +- **プログラム名**: 保険者別分割出力処理 +- **処理概要**: RPT-DATAをINSURER-CODE(001~010)で判定し、10個の出力ファイルに振り分けて出力する。CLOSE WITH LOCKで各ファイルを確定する。本実装は代表10ファイル(001-010)で定義。エラーファイルはW99(DD名SHA10W98)。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| SHA10R01 | RPT-DATA | 順編成 | F (固定長) | 300B | SHA08REC | +| SHA10W01~W10 | INSURER-OUT-01~10 | 順編成 | F (固定長) | 300B | SHA09REC | +| SHA10W98 | ERROR-LOG(識別子:W99OUTFIL) | 順編成 | V (可変長) | 200B | ZAN05REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| SHA08REC | RPT-DATA レコード定義(R01入力ファイル) | FILE SECTION | +| SHA09REC | INSURER-OUT レコード定義(W01~W10出力ファイル) | FILE SECTION | +| ZAN05REC | エラーログレコード定義(W98出力ファイル) | FILE SECTION | +| SHADATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE | +| SHAMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| SHAENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB01DAT | 運用日付取得 | 1000ITTSOR | +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | + +## 使用DB2テーブル + +なし(DB操作なし) + +## 処理フロー +1. 初期処理(開始メッセージ→SUB01DAT運用日付取得→OPEN(R01+W01~W99+W98)→R01初回READ) +2. 主処理:R01終了まで繰り返し + - INSURER-CODE判定(EVALUATE INSURER-CODE 001〜010)→該当ファイルにWRITE + - SHA09REC編集: PREF-CODE/INSURER-CODE/RPT-BODY設定 + - R01次件READ + - INSURER-CODE範囲外(001〜010以外)→W99(ERROR-LOG/DD:SHA10W98)出力 +3. 終了処理(CLOSE WITH LOCK→件数出力→終了メッセージ) diff --git a/基本設計書/04_社会保険管理システム_設計書(サブシステムD).md b/基本設計書/04_社会保険管理システム_設計書(サブシステムD).md new file mode 100644 index 0000000..69ebead --- /dev/null +++ b/基本設計書/04_社会保険管理システム_設計書(サブシステムD).md @@ -0,0 +1,456 @@ +# 社会保険管理システム 設計書(サブシステムD) + +## システム概要 + +本サブシステムは、日本年金機構・健康保険組合からの被保険者資格データを起点に、 +標準報酬月額の算定・変更(定時決定・月変・随時改定)、社会保険料の計算、 +資格異動管理、届出書類の作成・出力を行う。 +給与計算サブシステム(C)と連携し、給与データを基にした月変・随時改定処理を実現する。 + +### サブシステム情報 + +| 項目 | 内容 | +|------|------| +| サブシステムID | SHA(社会保険→SHAkai Hoken) | +| COBOLプログラム数 | 10 | +| JCL数 | 9 | +| DB | 1(INSURANCEDB / DB2、5テーブル) | + +### システム定数 + +| 定数 | 値 | 説明 | +|------|-----|------| +| HEALTH-INS-SPLIT | 0.50 | 健康保険料折半率(50%事業主負担) | +| PENSION-SPLIT | 0.50 | 厚生年金保険料折半率(50%事業主負担) | +| PREFECTURE-COUNT | 25 | 都道府県グループ数(協会けんぽ支部) | +| INSURER-MAX | 100 | 最大保険者数 | +| HALF-WIDTH-LIMIT | 20 | 氏名カナ最大桁数(半角) | +| TEISI-TEIJI-MONTHS | 3 | 定時決定対象月数(4-6月の3ヶ月) | +| GETSUHEN-GRADE-DIFF | 2 | 月変該当等級差(2等級以上変動) | + +### サブシステム間連携 + +| 連携データ | 出力元 | 入力先 | 方式 | 備考 | +|-----------|--------|--------|------|------| +| INSURED-CSV-ASCII(被保険者資格データ) | 外部(年金機構・健保組合) | SHAJ010 | ファイル連携 | ASCII CSV、外部システムから受信 | +| SALARY-MONTHLY(給与月額データ) | C-サブシステム KYU06UPD | SHAJ050 | ファイル連携 | 月変・定時決定用給与明細(200B) | +| INS-DETAIL(標準報酬月額明細) | SHA03MNP | C-サブシステム KYU05DED | ファイル連携 | 控除計算用保険料明細(300B) | +| RPT-DATA(届出書データ) | SHA08SRT | 外部(年金事務所) | ファイル連携 | 算定基礎届・月変届・資格喪失届 | + +--- + +## ファイル一覧 + +| # | ファイル名 | 編成 | RECM | サイズ | 用途 | 区分 | +|---|-----------|------|------|-------|------|------| +| 1 | INS-CSV-ASCII | SEQUENTIAL | FB | 可変 | 被保険者資格データ(ASCII CSV、外部受信) | 新規 | +| 2 | INSURED-DATA | SEQUENTIAL | FB | 200 | 被保険者EBCDIC固定長 | 新規 | +| 3 | EMP-INSURANCE | SEQUENTIAL | FB | 200 | 従業員×保険種別統合データ | 新規 | +| 4 | OFFICE-MST | SEQUENTIAL | FB | 80 | 事業所マスタ(事業所番号→都道府県・事業所名称) | 新規 | +| 5 | INSURER-MST | SEQUENTIAL | FB | 80 | 保険者マスタ(保険者コード→保険者名称・支部番号) | 新規 | +| 6 | GRADE-TBL | SEQUENTIAL | FB | 80 | 標準報酬等級テーブル | 新規 | +| 7 | GRADED-LIST | SEQUENTIAL | FB | 200 | 事業所・保険者情報付与被保険者一覧 | 新規 | +| 8 | UNMATCHED-LIST | SEQUENTIAL | FB | 200 | マッチング不一致データ | 新規 | +| 9 | SALARY-MONTHLY | SEQUENTIAL | FB | 200 | 給与月額データ(Cサブシステム出力) | C連携 | +| 10 | REVISED-GRADE | SEQUENTIAL | FB | 200 | 月変・随時改定結果 | 新規 | +| 11 | INS-DETAIL | SEQUENTIAL | FB | 300 | 保険料計算詳細(従業員×保険種別 M×N件) | 新規 | +| 12 | GRADE-INSURED | SEQUENTIAL | FB | 300 | 等級×従業員×料率組合せ(M:N→M:N中間結果) | 新規 | +| 13 | DEDUCTED-RESULT | SEQUENTIAL | FB | 300 | 保険料確定結果(M:N→M:N最終出力) | 新規 | +| 14 | CHG-SUMMARY | SEQUENTIAL | FB | 200 | 資格異動サマリ(キーブレイク後) | 新規 | +| 15 | CHG-DETAIL | SEQUENTIAL | FB | 200 | 資格異動明細 | 新規 | +| 16 | RPT-DATA | SEQUENTIAL | FB | 300 | 届出書データ(SORT後) | 新規 | +| 17 | PREF-OUT-01〜25 | SEQUENTIAL | FB | 300 | 都道府県支部別出力(25分割) | 新規 | +| 18 | INSURER-OUT-01〜99 | SEQUENTIAL | FB | 300 | 保険者別出力(100分割) | 新規 | +| 19 | APPLICABLE-RULES | SEQUENTIAL | FB | 80 | 適用条件テーブル(年齢・扶養・地域別) | 新規 | +| 20 | SD-SORTWORK | — | — | — | SORT作業用ファイル(I-O-CONTROL SAME SORT AREA指定) | 新規 | +| 21 | ERROR-LOG | SEQUENTIAL | VB | 最大200 | エラーレコード退避 | A・B・C共用 | + +### DB二重対応 + +本サブシステムのDB操作はDB2の埋め込みSQL(`EXEC SQL`)で直接記述する。 +5テーブルは同一DB2インスタンス内の別スキーマ(INSURANCEDB)で管理する。 +CサブシステムのSALARYDB(EMP-MASTER)は`SALARYDB.EMP-MASTER`でクロススキーマ参照する。 + +### 共通関数利用方針 + +既存のサブプログラム(SUB01DAT〜SUB05TIM)は本サブシステムでも利用する。 +連絡領域のCOPY書式はサブシステム別に`SHADATAC`・`SHAMSGAC`・`SHAENDAC`・`SHACHKAC`を新規作成する。 + +--- + +## DB構成(INSURANCEDB) + +### DB名称:社会保険管理データベース(INSURANCEDB) + +#### テーブル1:INSURED-MASTER(被保険者マスタ) + +| カラム | 型 | 内容 | +|--------|---|------| +| EMP-ID | CHAR(8) | 社員番号(PK) | +| INSURED-NO | CHAR(10) | 被保険者番号(番号体系:健康保険+厚生年金で共通) | +| OFFICE-NO | CHAR(4) | 事業所番号 | +| INSURER-CODE | CHAR(4) | 保険者コード | +| HEALTH-INS-TYPE | CHAR(1) | 健康保険種別(1=協会けんぽ / 2=組合健保) | +| PENSION-TYPE | CHAR(1) | 年金種別(1=厚生年金 / 2=共済) | +| BASE-MONTHLY | DECIMAL(9,0) | 現行標準報酬月額 | +| GRADE-CODE | CHAR(2) | 現行等級コード | +| STATUS | CHAR(1) | 状態(0=在籍 / 9=喪失) | +| UPDATED-AT | TIMESTAMP | 更新日時 | + +#### テーブル2:INSURANCE-RATES(保険料率テーブル) + +| カラム | 型 | 内容 | +|--------|---|------| +| GRADE-CODE | CHAR(2) | 標準報酬等級コード(PK) | +| MONTHLY-FROM | DECIMAL(9,0) | 標準報酬月額下限 | +| MONTHLY-TO | DECIMAL(9,0) | 標準報酬月額上限 | +| HEALTH-RATE | DECIMAL(7,6) | 健康保険料率(折半後従業員負担率) | +| PENSION-RATE | DECIMAL(7,6) | 厚生年金保険料率(折半後従業員負担率) | +| EFFECTIVE-FROM | CHAR(6) | 適用開始年月 YYYYMM(PK) | +| EFFECTIVE-TO | CHAR(6) | 適用終了年月 YYYYMM(PK、999999=無期限) | +| UPDATED-AT | TIMESTAMP | 更新日時 | + +#### テーブル3:GRADE-HISTORY(標準報酬等級履歴) + +| カラム | 型 | 内容 | +|--------|---|------| +| EMP-ID | CHAR(8) | 社員番号(PK) | +| YEAR-MONTH | CHAR(6) | 対象年月 YYYYMM(PK) | +| GRADE-CODE | CHAR(2) | 等級コード | +| MONTHLY-AMOUNT | DECIMAL(9,0) | 標準報酬月額 | +| CHANGE-TYPE | CHAR(1) | 変更要因(1=定時決定 / 2=月変 / 3=随時改定) | +| PREV-GRADE | CHAR(2) | 変更前等級コード | +| UPDATED-AT | TIMESTAMP | 更新日時 | + +#### テーブル4:QUALIFICATION-CHANGES(資格異動テーブル) + +| カラム | 型 | 内容 | +|--------|---|------| +| CHG-ID | INTEGER | 異動ID(PK、自動採番) | +| EMP-ID | CHAR(8) | 社員番号 | +| CHG-DATE | CHAR(8) | 異動日 YYYYMMDD | +| CHG-TYPE | CHAR(2) | 異動種別(01=取得 / 02=喪失 / 03=種別変更 / 04=住所変更) | +| INSURER-CODE | CHAR(4) | 異動先保険者コード | +| PREV-INSURER | CHAR(4) | 異動元保険者コード | +| REASON | VARCHAR(100) | 異動理由 | +| UPDATED-AT | TIMESTAMP | 更新日時 | + +#### テーブル5:INSURER-MASTER(保険者マスタ) + +| カラム | 型 | 内容 | +|--------|---|------| +| INSURER-CODE | CHAR(4) | 保険者コード(PK) | +| INSURER-NAME | VARCHAR(60) | 保険者名称 | +| PREF-CODE | CHAR(2) | 都道府県支部コード(01〜25) | +| INSURER-TYPE | CHAR(1) | 保険者種別(1=協会けんぽ / 2=組合健保 / 3=共済) | +| UPDATED-AT | TIMESTAMP | 更新日時 | + +--- + +## 処理フロー + +``` +╞══ SHAJ010 ═══════════════════════════════════╡ +│ SHA01CVT(ASCII→EBCDIC変換) PGMパターン: 29 +│ INSPECT CONVERTING X"00"..."FF" TO X"00"..."FF" で変換 +│ 被保険者番号・事業所番号の桁数チェック(内部処理) +│ SUB04CHK で数値妥当性チェック +├── 正常 → INSURED-DATA(200B EBCDIC固定長) +└── 異常 → ERROR-LOG +│ +╞══ SHAJ020 ═══════════════════════════════════╡ +│ SHA02MNC(M:N→M件マッチング) PGMパターン: 18 +│ EMP-MASTER(DB2 SALARYDB.EMP-MASTER SELECT)× +│ INSURANCE-RATES(DB2 INSURANCEDB.INSURANCE-RATES SELECT) +│ M件の従業員 × N件の保険種別料率 → 従業員単位に統合 +│ SEARCH ALL で該当GRADE-CODEを内部表検索 +│ 社員番号昇順に出力 +├── → EMP-INSURANCE(200B 従業員単位1件) +└── 異常 → ERROR-LOG +│ +╞══ SHAJ030 ═══════════════════════════════════╡ +│ SHA03MNP(M:N→M×N件直積出力) PGMパターン: 20 +│ EMP-INSURANCE × INSURANCE-RATES(内部表LOAD) +│ 全従業員 × 全保険種別の直積出力(M×N件) +│ 従業員ごとに健康保険・厚生年金・雇用保険の保険料明細を生成 +├── → INS-DETAIL(300B 全組合せ明細) +└── 異常 → ERROR-LOG +│ +╞══ SHAJ040 ═══════════════════════════════════╡ +│ SHA04TWO(2段階1:1→1:1マッチング) PGMパターン: 16 +│ 第1段階: INSURED-DATA × OFFICE-MST(事業所マスタ) +│  事業所番号一致→事業所名称・都道府県コード付加 +│ 第2段階: 中間結果 × INSURER-MST(保険者マスタ) +│  保険者コード一致→保険者名称・支部コード付加 +│ DB2参照: INSURED-MASTER(履歴整合性確認) +│ PROGRAM-ID IS INITIAL 指定 +│ USAGE PACKED-DECIMAL で金額項目定義 +├── → GRADED-LIST(200B 事業所・保険者情報付き) +├── → UNMATCHED-LIST(200B 不一致データ) +└── 異常 → ERROR-LOG +│ +╞══ SHAJ050 ═══════════════════════════════════╡ +│ SHA05TWN(2段階N:1→N:1マッチング) PGMパターン: 17 +│ 第1段階: SALARY-MONTHLY(複数月N件→社員別平均N:1) +│  同一社員の複数月給与(定時決定:4-6月、月変:直近3月)を平均 +│  ADD TO + END-ADD で累積、DIVIDE GIVING REMAINDER で平均 +│ 第2段階: 平均値×GRADE-TBL(N:1で等級判定) +│  平均標準報酬月額が該当する等級コードを特定 +│  現行等級と比較し2等級以上変動→月変該当 +├── → REVISED-GRADE(200B 改定結果) +└── 異常 → ERROR-LOG +│ +╞══ SHAJ060 ═══════════════════════════════════╡ +│ SHA06TWM(2段階M:N→M:Nマッチング) PGMパターン: 22 +│ 第1段階: EMP-INSURANCE(M) × INSURANCE-RATES(N) +│  全従業員×全料率の組合せから該当する等級料率を特定 +│  → GRADE-INSURED(M:N 中間ファイル) +│ 第2段階: GRADE-INSURED(M:N) × APPLICABLE-RULES(N) +│  年齢・扶養人数・地域コード等の条件で正しい料率を確定 +│  通常MOVEで構造体転記(MOVE CORRは不使用) +├── → DEDUCTED-RESULT(300B 保険料確定結果) +└── 異常 → ERROR-LOG +│ +╞══ SHAJ070 ═══════════════════════════════════╡ +│ SHA07KBR(1:N+異キーキーブレイク) PGMパターン: 33 +│ DB2 QUALIFICATION-CHANGES からEXEC SQL SELECT +│ 同一従業員内(1:N)で保険者コード(異キー)変更時キーブレイク +│ 保険者変更を検出した時点でサマリ出力、それ以外は明細出力 +│ SUB04CHK/SUB02MSG でCALL(通常CALL、CANCEL不使用) +├── → CHG-SUMMARY(200B 保険者別異動サマリ) +├── → CHG-DETAIL(200B 全異動明細) +└── 異常 → ERROR-LOG +│ +╞══ SHAJ080 ═══════════════════════════════════╡ +│ SHA08SRT(SORT INPUT/OUTPUT PROCEDURE) PGMパターン: 34 +│ SD-SORTWORK + SORT文 +│ I-O-CONTROL. SAME SORT AREA FOR SD-SORTWORK +│ INPUT PROCEDURE: GRADED-LIST読込+届出対象抽出(STATUS=0) +│ OUTPUT PROCEDURE: 届出書形式に編集 + 集計 +│ RETURN-CODE でSORT結果判定 +│ RELEASE + RETURN 文でSORTデータ引渡し・受取 +├── → RPT-DATA(300B 届出書データ) +└── 異常 → ERROR-LOG +│ +╞══ SHAJ090 ═══════════════════════════════════╡ +│ SHA09S25(25分割) PGMパターン: 11 +│ RPT-DATA を都道府県支部コード(PREF-CODE 01〜25)で分割 +│ SELECT ... ORGANIZATION IS SEQUENTIAL(明示的宣言) +│ CLOSE WITH LOCK で出力ファイル確定 +├── → PREF-OUT-01〜25 +└── 異常 → ERROR-LOG +│ +╞══ SHAJ100 ═══════════════════════════════════╡ +│ SHA10S10(100分割) PGMパターン: 12 +│ RPT-DATA を保険者コード(INSURER-CODE 001〜099)で分割 +│ CLOSE WITH LOCK で出力ファイル確定 +├── → INSURER-OUT-01〜99 +└── 異常 → ERROR-LOG +``` + +--- + +## JCL + +### SHAJ010 — 被保険者データ受信変換 + +```jcl +//SHAJ010 JOB (ACCT),'被保険者データ変換',CLASS=A +//* +//*--- パラメータ定義 --- +//SETPARM SET YEARMONTH=202605 +//*===================================================================== +//* STEP010: ASCII→EBCDIC変換(Type 29) +//*===================================================================== +//STEP010 EXEC PGM=SHA01CVT,PARM='YEARMONTH=&YEARMONTH' +//SHA01R01 DD DSN=INS-CSV-ASCII.DAT,DISP=SHR +//SHA01W01 DD DSN=INSURED-DATA.DAT,DISP=(NEW,CATLG) +//SHA01W02 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS) +``` + +### SHAJ020 — 保険マッチングM件 + +```jcl +//SHAJ020 JOB (ACCT),'保険マッチングM件',CLASS=A +//* +//SETPARM SET YEARMONTH=202605 +//*===================================================================== +//* STEP010: M:N→M件(Type 18) +//*===================================================================== +//STEP010 EXEC PGM=SHA02MNC,PARM='YEARMONTH=&YEARMONTH' +//SHA02W01 DD DSN=EMP-INSURANCE.DAT,DISP=(NEW,CATLG) +//SHA02W02 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS) +//* DB2参照(EMP-MASTER/INSURANCE-RATES)のためDD不要 +``` + +### SHAJ030 — M:N直積出力 + +```jcl +//SHAJ030 JOB (ACCT),'M:N直積出力',CLASS=A +//* +//SETPARM SET YEARMONTH=202605 +//*===================================================================== +//* STEP010: M:N→M×N件(Type 20) +//*===================================================================== +//STEP010 EXEC PGM=SHA03MNP,PARM='YEARMONTH=&YEARMONTH' +//SHA03R01 DD DSN=EMP-INSURANCE.DAT,DISP=(OLD,DELETE) +//SHA03W01 DD DSN=INS-DETAIL.DAT,DISP=(NEW,CATLG) +//SHA03W02 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS) +//* INSURANCE-RATESは内部表LOADのためDB2参照(DD不要) +``` + +### SHAJ040 — 2段階1:1事業所・保険者判定 + +```jcl +//SHAJ040 JOB (ACCT),'事業所・保険者判定',CLASS=A +//* +//SETPARM SET YEARMONTH=202605 +//*===================================================================== +//* STEP010: 2段階1:1→1:1(Type 16) +//*===================================================================== +//STEP010 EXEC PGM=SHA04TWO,PARM='YEARMONTH=&YEARMONTH' +//SHA04R01 DD DSN=INSURED-DATA.DAT,DISP=(OLD,DELETE) +//SHA04R02 DD DSN=OFFICE-MST.DAT,DISP=SHR +//SHA04R03 DD DSN=INSURER-MST.DAT,DISP=SHR +//SHA04W01 DD DSN=GRADED-LIST.DAT,DISP=(NEW,CATLG) +//SHA04W02 DD DSN=UNMATCHED-LIST.DAT,DISP=(NEW,PASS) +//SHA04W03 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS) +``` + +### SHAJ050 — 定時決定・月変改定 + +```jcl +//SHAJ050 JOB (ACCT),'定時決定・月変改定',CLASS=A +//* +//SETPARM SET YEARMONTH=202605 +//*===================================================================== +//* STEP010: 2段階N:1→N:1(Type 17) +//*===================================================================== +//STEP010 EXEC PGM=SHA05TWN,PARM='YEARMONTH=&YEARMONTH' +//SHA05R01 DD DSN=SALARY-MONTHLY.DAT,DISP=SHR +//SHA05R02 DD DSN=GRADE-TBL.DAT,DISP=SHR +//SHA05W01 DD DSN=REVISED-GRADE.DAT,DISP=(NEW,CATLG) +//SHA05W02 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS) +``` + +### SHAJ060 — 保険料確定(2段階M:N) + +```jcl +//SHAJ060 JOB (ACCT),'保険料確定',CLASS=A +//* +//SETPARM SET YEARMONTH=202605 +//*===================================================================== +//* STEP010: 2段階M:N→M:N(Type 22) +//*===================================================================== +//STEP010 EXEC PGM=SHA06TWM,PARM='YEARMONTH=&YEARMONTH' +//SHA06R01 DD DSN=EMP-INSURANCE.DAT,DISP=SHR +//SHA06R02 DD DSN=APPLICABLE-RULES.DAT,DISP=SHR +//SHA06W01 DD DSN=DEDUCTED-RESULT.DAT,DISP=(NEW,CATLG) +//SHA06W02 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS) +//* INSURANCE-RATESはDB2参照 +``` + +### SHAJ070 — 資格異動処理 + +```jcl +//SHAJ070 JOB (ACCT),'資格異動処理',CLASS=A +//* +//SETPARM SET YEARMONTH=202605 +//*===================================================================== +//* STEP010: 1:N+異キーキーブレイク(Type 33) +//*===================================================================== +//STEP010 EXEC PGM=SHA07KBR,PARM='YEARMONTH=&YEARMONTH' +//SHA07W01 DD DSN=CHG-SUMMARY.DAT,DISP=(NEW,CATLG) +//SHA07W02 DD DSN=CHG-DETAIL.DAT,DISP=(NEW,PASS) +//SHA07W03 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS) +//* QUALIFICATION-CHANGESはDB2 SELECT(DD不要) +``` + +### SHAJ080 — 届出書作成(SORT) + +```jcl +//SHAJ080 JOB (ACCT),'届出書作成',CLASS=A +//* +//SETPARM SET YEARMONTH=202605 +//*===================================================================== +//* STEP010: SORT INPUT/OUTPUT PROCEDURE(Type 34) +//*===================================================================== +//STEP010 EXEC PGM=SHA08SRT,PARM='YEARMONTH=&YEARMONTH' +//SHA08R01 DD DSN=GRADED-LIST.DAT,DISP=SHR +//SHA08W01 DD DSN=RPT-DATA.DAT,DISP=(NEW,CATLG) +//SHA08W02 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS) +//* SD-SORTWORKはプログラム内SORT作業ファイル(JCL DD不要) +``` + +### SHAJ090 — 都道府県支部別分割出力(25分割) + +```jcl +//SHAJ090 JOB (ACCT),'支部別分割出力',CLASS=A +//* +//SETPARM SET YEARMONTH=202605 +//*===================================================================== +//* STEP010: 25分割(Type 11) +//*===================================================================== +//STEP010 EXEC PGM=SHA09S25,PARM='YEARMONTH=&YEARMONTH' +//SHA09R01 DD DSN=RPT-DATA.DAT,DISP=(OLD,DELETE) +//SHA09W01 DD DSN=PREF-OUT-01.DAT,DISP=(NEW,CATLG) +//SHA09W02 DD DSN=PREF-OUT-02.DAT,DISP=(NEW,CATLG) +// ... +//SHA09W25 DD DSN=PREF-OUT-25.DAT,DISP=(NEW,CATLG) +//SHA09W98 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS) +``` + +### SHAJ100 — 保険者別分割出力(100分割) + +```jcl +//SHAJ100 JOB (ACCT),'保険者別分割出力',CLASS=A +//* +//SETPARM SET YEARMONTH=202605 +//*===================================================================== +//* STEP010: 100分割(Type 12) +//*===================================================================== +//STEP010 EXEC PGM=SHA10S10,PARM='YEARMONTH=&YEARMONTH' +//SHA10R01 DD DSN=RPT-DATA.DAT,DISP=(OLD,DELETE) +//SHA10W01 DD DSN=INSURER-OUT-01.DAT,DISP=(NEW,CATLG) +//SHA10W02 DD DSN=INSURER-OUT-02.DAT,DISP=(NEW,CATLG) +// ... +//SHA10W99 DD DSN=INSURER-OUT-99.DAT,DISP=(NEW,CATLG) +//SHA10W98 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS) +``` + +--- + +## プログラム一覧 + +| # | PGM-ID | PGMパターン | 機能概要 | 使用COPY | DBアクセス | CALL先 | +|:-:|:------:|:----------:|---------|:--------:|:---------:|:------:| +| 1 | SHA01CVT | 29 ASCII→EBCDIC変換 | ASCII CSVをINSPECT CONVERTINGでEBCDIC固定長に変換 | SHA01REC, SHADATAC, SHAMSGAC, SHAENDAC, SHACHKAC | なし | SUB01DAT, SUB02MSG, SUB03END, SUB04CHK | +| 2 | SHA02MNC | 18 M:N→M件 | 従業員×保険種別→従業員単位統合 | SHA02REC, SHADATAC, SHAMSGAC, SHAENDAC, SHACHKAC | あり(EMP-MASTER SELECT, INSURANCE-RATES SELECT) | SUB01DAT, SUB02MSG, SUB03END, SUB04CHK | +| 3 | SHA03MNP | 20 M:N→M×N件 | 従業員×保険種別→全組合せ明細 | SHA03REC, SHADATAC, SHAMSGAC, SHAENDAC | あり(INSURANCE-RATES SELECT→内部表LOAD) | SUB01DAT, SUB02MSG, SUB03END | +| 4 | SHA04TWO | 16 2段階1:1→1:1 | 事業所マッチング→保険者マッチング | SHA04REC, SHADATAC, SHAMSGAC, SHAENDAC | あり(INSURED-MASTER SELECT, GRADE-HISTORY SELECT) | SUB01DAT, SUB02MSG, SUB03END | +| 5 | SHA05TWN | 17 2段階N:1→N:1 | 定時決定・月変改定(複数月平均→等級判定) | SHA05REC, SHADATAC, SHAMSGAC, SHAENDAC | なし | SUB01DAT, SUB02MSG, SUB03END | +| 6 | SHA06TWM | 22 2段階M:N→M:N | M従業員×N料率→適用条件で確定 | SHA06REC, SHADATAC, SHAMSGAC, SHAENDAC | あり(INSURANCE-RATES SELECT) | SUB01DAT, SUB02MSG, SUB03END | +| 7 | SHA07KBR | 33 1:N+異キーKB | 資格異動処理、保険者コード変更時KB | SHA07REC, SHADATAC, SHAMSGAC, SHAENDAC | あり(QUALIFICATION-CHANGES SELECT) | SUB01DAT, SUB02MSG, SUB03END, SUB04CHK | +| 8 | SHA08SRT | 34 SORT IP/OP | SORT + INPUT/OUTPUT PROCEDURE | SHA08REC, SHADATAC, SHAMSGAC, SHAENDAC | なし(SORT文、I-O-CONTROL SAME SORT AREA) | SUB01DAT, SUB02MSG, SUB03END | +| 9 | SHA09S25 | 11 25分割 | 都道府県支部別分割出力 | SHA09REC, SHADATAC, SHAMSGAC, SHAENDAC | なし | SUB01DAT, SUB02MSG, SUB03END | +| 10 | SHA10S10 | 12 100分割 | 保険者別分割出力 | SHA09REC, SHADATAC, SHAMSGAC, SHAENDAC | なし | SUB01DAT, SUB02MSG, SUB03END | + +--- + +## COPY書式一覧 + +| # | COPY ID | 用途 | サイズ | 備考 | +|:-:|:--------|:----:|:------:|------| +| 1 | SHA01REC | INSURED-DATA レコード | 200 | SHA01CVT出力、SHA04TWO入力 | +| 2 | SHA02REC | EMP-INSURANCE レコード | 200 | SHA02MNC出力、SHA03MNP/SHA06TWM入力 | +| 3 | SHA03REC | INS-DETAIL レコード | 300 | SHA03MNP出力 | +| 4 | SHA04REC | GRADED-LIST レコード | 200 | SHA04TWO出力、SHA08SRT入力 | +| 5 | SHA05REC | REVISED-GRADE レコード | 200 | SHA05TWN出力 | +| 6 | SHA06REC | DEDUCTED-RESULT レコード | 300 | SHA06TWM出力 | +| 7 | SHA07REC | CHG-SUMMARY/CHG-DETAIL レコード | 200 | SHA07KBR出力 | +| 8 | SHA08REC | RPT-DATA レコード | 300 | SHA08SRT出力、SHA09S25/SHA10S10入力 | +| 9 | SHA09REC | PREF-OUT/INSURER-OUT レコード | 300 | SHA09S25/SHA10S10出力 | +| 10 | SHADATAC | SUB01DAT連絡領域 | — | CALL I/F | +| 11 | SHAMSGAC | SUB02MSG連絡領域 | — | CALL I/F | +| 12 | SHAENDAC | SUB03END連絡領域 | — | CALL I/F | +| 13 | SHACHKAC | SUB04CHK連絡領域 | — | CALL I/F | diff --git a/詳細設計書/詳細設計書_SHA01CVT.md b/詳細設計書/詳細設計書_SHA01CVT.md new file mode 100644 index 0000000..4e8268d --- /dev/null +++ b/詳細設計書/詳細設計書_SHA01CVT.md @@ -0,0 +1,135 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 社会保険管理システム | +| 2 | プログラムID | SHA01CVT | +| 3 | プログラム名 | 被保険者資格データ変換処理 | +| 4 | PGMタイプ | メイン | +| 5 | PGMパターン | 29(ASCII→EBCDIC変換) | +| 6 | 機能概要 | 日本年金機構・健康保険組合から受信した被保険者資格データ(ASCII CSV)をEBCDIC固定長レコードに変換する。 | +| 7 | | 変換テーブルを用いてASCIIコードからEBCDICコードに変換。 | +| 8 | | 出力レコードの項目桁数チェック(半角桁数)を内部処理として行う。 | + +※PGMタイプ:メイン、サブ +※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 + +### 前提条件 + +| NO | 対象ファイル | 条件 | +|----|-------------|------| +| 1 | INS-CSV-ASCII | ソート不要。ASCIIコード、カンマ区切り、LF改行 | + +### 使用ファイル一覧 + +| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | +|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| +| 1 | INS-CSV-ASCII | R01 | SHA01R01 | I | 自前 | F | | 可変 | PS | ASCII CSV、カンマ区切り | +| 2 | INSURED-DATA | W01 | SHA01W01 | O | SHA01REC | FB | | 200 | PS | EBCDIC固定長 | +| 3 | ERROR-LOG | W02 | SHA01W02 | O | ZAN05REC | VB | | 200 | PS | エラー退避 | + +### キー項目一覧 + +| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | +|----|-----------|---------------------|-------------------------------------------| +| 1 | INS-CSV-ASCII | なし | なし | + +### 使用モジュール一覧 + +| NO | 機能 | プログラムID | 使用COPY名 | +|----|------|-------------|-----------| +| 1 | 運用日付取得SUB | SUB01DAT | SHADATAC | +| 2 | メッセージ編集出力SUB | SUB02MSG | SHAMSGAC | +| 3 | ABEND処理SUB | SUB03END | SHAENDAC | +| 4 | 項目チェックSUB | SUB04CHK | SHACHKAC | + +--- + +## 処理詳細 + +``` +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.使用ファイルのオープン + 1-6.R01を読み込む。(1100R01INNSOR)(1回目) + +2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す) + 2-1.CSVの分解 + UNSTRINGでカンマ区切りのCSVを各項目に分解する。(2010CSVSOR) + 2-2.半角桁数チェック(2020HALFSOR) + 2-2-1.氏名カナ(半角20桁以内)チェック。超過→W02出力 + 2-2-2.被保険者番号(半角10桁以内)チェック。超過→W02出力 + 2-2-3.事業所番号(半角4桁以内)チェック。超過→W02出力 + 2-2-4.日付妥当性チェック(SUB04CHK)。エラー→W02出力 + 2-2-5.数値妥当性チェック(SUB04CHK)。エラー→W02出力 + 2-3.ASCII→EBCDIC変換(2030CNVSOR) + 2-3-1.変換テーブル(WORKING-STORAGEに定義)を使用し各バイトを変換 + 2-3-2.USAGE BINARYでテーブルインデックスを管理 + 2-3-3.変換後INSURED-DATAレコードにMOVE + 2-4.W01出力(2040WRTSOR) + 2-5.R01を読み込む。(1100R01INNSOR)(2件目以降) + +3.終了処理(3000STPSOR) + 3-1.入出力ファイルのクローズ + 3-2.入出力件数出力メッセージ出力 + 【入力メッセージ編集】 + メッセージ番号:6(入力件数メッセージ) + PARM1:当該入力ファイルのDD名 + PARM2:当該入力ファイルの件数 + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:当該出力ファイルのDD名 + PARM2:当該出力ファイルの件数 + 3-3.終了メッセージ出力 + 【メッセージ編集】 + メッセージ番号:2(終了メッセージ) +``` + +--- + +## 出力レコード定義 + +### 出力ファイル1(W01/INSURED-DATA) + +SHA01REC.cpyに従う。EBCDIC固定長200B。 + +| No | 項目名 | 属性 | 設定元 | 備考 | +|----|--------|------|--------|------| +| 1 | 社員番号 | 9(8) | CSV同項目を変換後設定 | | +| 2 | 被保険者番号 | X(10) | CSV同項目を変換後設定 | 半角10桁以内 | +| 3 | 事業所番号 | X(4) | CSV同項目を変換後設定 | 半角4桁以内 | +| 4 | 保険者コード | X(4) | CSV同項目を変換後設定 | | +| 5 | 氏名 | X(40) | CSV同項目を変換後設定 | | +| 6 | 氏名カナ | X(20) | CSV同項目を変換後設定 | 半角20桁以内 | +| 7 | 生年月日 | 9(8) | CSV同項目を変換後設定 | | +| 8 | 性別 | X(1) | CSV同項目を変換後設定 | | +| 9 | 資格取得日 | 9(8) | CSV同項目を変換後設定 | | +| 10 | 健康保険種別 | X(1) | CSV同項目を変換後設定 | | +| 11 | 年金種別 | X(1) | CSV同項目を変換後設定 | | +| 12 | ステータス | X(1) | CSV同項目を変換後設定 | | +| 13 | 予約 | X(94) | LOW-VALUES固定 | | + +### 出力ファイル2(W02/ERROR-LOG) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | ERR-CATEGORY | 01で固定 | | +| 2 | ERR-DETAIL | STRINGで編集 | エラー内容 | diff --git a/詳細設計書/詳細設計書_SHA02MNC.md b/詳細設計書/詳細設計書_SHA02MNC.md new file mode 100644 index 0000000..fb888f0 --- /dev/null +++ b/詳細設計書/詳細設計書_SHA02MNC.md @@ -0,0 +1,167 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 社会保険管理システム | +| 2 | プログラムID | SHA02MNC | +| 3 | プログラム名 | 従業員保険情報統合処理 | +| 4 | PGMタイプ | メイン | +| 5 | PGMパターン | 18(M:N→M件マッチング) | +| 6 | 機能概要 | DB2 EMP-MASTER(SALARYDB)の従業員情報とINSURANCE-RATESの標準報酬等級テーブルをマッチングし、 | +| 7 | | 従業員単位(M件)に統合したEMP-INSURANCEレコードを出力する。 | +| 8 | | SEARCH/内部表を用いた等級判定により、標準報酬月額・等級コードを付与する。 | + +※PGMタイプ:メイン、サブ +※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 + +### 前提条件 + +| NO | 対象ファイル/DB | 条件 | +|----|---------------|------| +| 1 | DB2 INSURANCE-RATES | EFFECTIVE-FROM~EFFECTIVE-TOに該当月が含まれること | +| 2 | DB2 EMP-MASTER (SALARYDB) | 社員番号(EMP-ID)昇順ソート(DB2 ORDER BY) | + +### 使用ファイル一覧 + +| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | +|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| +| 1 | EMP-INSURANCE | W01 | SHA02W01 | O | SHA02REC | FB | | 200 | PS | 従業員保険情報(M件) | +| 2 | ERROR-LOG | W02 | SHA02W02 | O | ZAN05REC | VB | | 200 | PS | エラー退避 | +| 3 | INSURANCEDB | DB | — | I | — | DB2 | — | — | DASD | DB2: INSURANCE-RATES | +| 4 | SALARYDB (参照) | DB | — | I | — | DB2 | — | — | DASD | DB2: EMP-MASTER(クロススキーマ) | + +### キー項目一覧 + +| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | +|----|-----------|---------------------|-------------------------------------------| +| 1 | EMP-MASTER | EMP-ID | なし(主処理は1件ずつFETCH) | +| 2 | INSURANCE-RATES | GRADE-CODE | MONTHLY-FROM~MONTHLY-TOにBASE-SALARYが含まれること(範囲検索) | + +### 使用モジュール一覧 + +| NO | 機能 | プログラムID | 使用COPY名 | +|----|------|-------------|-----------| +| 1 | 運用日付取得SUB | SUB01DAT | SHADATAC | +| 2 | メッセージ編集出力SUB | SUB02MSG | SHAMSGAC | +| 3 | ABEND処理SUB | SUB03END | SHAENDAC | +| 4 | PARM検証SUB | SUB04CHK | SHACHKAC | + +--- + +## 処理詳細 + +``` +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.PARM取得(YEARMONTH) + 1-6.DB接続 + EXEC SQL CONNECT TO 'data/INSURANCE.db' + 1-7.INSURANCE-RATES内部表LOAD(1200RATELDASOR) + DECLARE C1 CURSOR FOR + SELECT GRADE-CODE, MONTHLY-FROM, MONTHLY-TO, + HEALTH-RATE, PENSION-RATE + FROM INSURANCE-RATES + WHERE EFFECTIVE-FROM <= :WRK-YEAR-MONTH + AND EFFECTIVE-TO >= :WRK-YEAR-MONTH + ORDER BY GRADE-CODE + OPEN C1 + PERFORM UNTIL SQLCODE≠0 + FETCH C1 INTO :DBV-xxx + MOVE TO WRK-INS-RATES(WS-COUNT) + ADD 1 TO WS-COUNT + END-PERFORM + CLOSE C1 + 1-8.EMP-MASTERカーソル宣言・OPEN・初回FETCH + DECLARE C2 CURSOR FOR + SELECT EMP-ID, EMP-NAME, DEPT-CODE, BASE-SALARY + FROM SALARYDB.EMP-MASTER + ORDER BY EMP-ID + OPEN C2 + FETCH C2 INTO :DBV-xxx(1300EMPFETCSOR) + 1-9.出力ファイルのオープン + +2.主処理(2000MAJSOR)(EMP-MASTERを全て読み終えるまで下記を繰り返す) + 2-1.内部表検索(2010SRCHSOR) + SEARCH(線形探索)でWRK-INS-RATESから + WRK-MONTHLY-FROM <= DBV-BASE-SALARY + かつ WRK-MONTHLY-TO >= DBV-BASE-SALARY + を満たすGRADE-CODEを特定する。 + 該当なし→ERROR-LOG出力(W02)→次従業員へ + 2-2.種別判定(2000MAJSOR内でインライン実装) + DEPT-CODEによりEVALUATEでHEALTH-INS-TYPE/PENSION-TYPEを判定 + DEPT-CODE 01-10:HEALTH-INS-TYPE='1' PENSION-TYPE='1' + DEPT-CODE 11-20:HEALTH-INS-TYPE='2' PENSION-TYPE='1' + DEPT-CODE 21-30:HEALTH-INS-TYPE='1' PENSION-TYPE='2' + 上記以外:HEALTH-INS-TYPE='9' PENSION-TYPE='9' + 2-3.INSURER-CODE設定 + 簡易判定:DEPT-CODEにより設定(01台→'0001', 11台→'0002', 21台→'0003') + 2-4.W01出力 + MOVE DBV-xxx + 検索結果 + 種別判定結果 → W01OUTREC + WRITE W01OUTREC + 2-5.次従業員FETCH(1300EMPFETCSOR)(2件目以降) + +3.終了処理(3000STPSOR) + 3-1.カーソルクローズ + CLOSE C2 + 3-2.出力ファイルのクローズ + 3-3.入出力件数出力メッセージ出力 + 【入力メッセージ編集】 + メッセージ番号:6(入力件数メッセージ) + PARM1:'EMP-MASTER' + PARM2:CUN-DB-EMP + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'SHA02W01' + PARM2:CUN-W01OUT + PARM1:'SHA02W02' + PARM2:CUN-W02OUT + 3-4.終了メッセージ出力 + 【メッセージ編集】 + メッセージ番号:2(終了メッセージ) +``` + +--- + +## 出力レコード定義 + +### 出力ファイル1(W01/EMP-INSURANCE) + +SHA02REC.cpyに従う。200B固定長。 + +| No | 項目名 | 属性 | 設定元 | 備考 | +|----|--------|------|--------|------| +| 1 | EMP-ID | 9(8) | DBV-EMP-ID(EMP-MASTER) | | +| 2 | EMP-NAME | X(40) | DBV-EMP-NAME(EMP-MASTER) | | +| 3 | DEPT-CODE | 9(2) | DBV-DEPT-CODE(EMP-MASTER) | | +| 4 | BASE-SALARY | 9(9) | DBV-BASE-SALARY(EMP-MASTER) | | +| 5 | MONTHLY-AMOUNT | 9(9) | INSURANCE-RATES該当レコードの範囲中央値 | 標準報酬月額 | +| 6 | GRADE-CODE | 9(2) | INSURANCE-RATES該当レコードの等級コード | SEARCH結果 | +| 7 | HEALTH-INS-TYPE | X(1) | DEPT-CODEによる判定結果 | '1'=協会けんぽ / '2'=組合健保 / '9'=その他 | +| 8 | PENSION-TYPE | X(1) | DEPT-CODEによる判定結果 | '1'=厚生年金 / '2'=共済 / '9'=その他 | +| 9 | INSURER-CODE | X(4) | DEPT-CODEによる簡易設定 | 事業所所属保険者 | +| 10 | FILLER | X(124) | LOW-VALUES固定 | | + +### 出力ファイル2(W02/ERROR-LOG) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | ERR-CATEGORY | 01で固定 | | +| 2 | ERR-DETAIL | STRINGで編集 | エラー内容(EMP-ID + エラー詳細) | diff --git a/詳細設計書/詳細設計書_SHA03MNP.md b/詳細設計書/詳細設計書_SHA03MNP.md new file mode 100644 index 0000000..bb32d82 --- /dev/null +++ b/詳細設計書/詳細設計書_SHA03MNP.md @@ -0,0 +1,153 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 社会保険管理システム | +| 2 | プログラムID | SHA03MNP | +| 3 | プログラム名 | 保険料計算明細出力処理 | +| 4 | PGMタイプ | メイン | +| 5 | PGMパターン | 20(M:N→M×N件直積出力) | +| 6 | 機能概要 | EMP-INSURANCE(SHA02MNC出力)の従業員情報とINSURANCE-RATESの料率を組合せ、 | +| 7 | | 従業員ごとに健康保険・厚生年金の保険料明細をM×N件(全組合せ)出力する。 | +| 8 | | 各組合せについて標準報酬月額×料率で保険料を算出する。 | + +※PGMタイプ:メイン、サブ +※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 + +### 前提条件 + +| NO | 対象ファイル/DB | 条件 | +|----|---------------|------| +| 1 | EMP-INSURANCE | ソート済であること(SHA02MNC出力) | +| 2 | DB2 INSURANCE-RATES | EFFECTIVE-FROM~EFFECTIVE-TOに該当月が含まれること | + +### 使用ファイル一覧 + +| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | +|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| +| 1 | EMP-INSURANCE | R01 | SHA03R01 | I | SHA02REC | FB | | 200 | PS | 従業員保険情報(SHA02MNC出力) | +| 2 | INS-DETAIL | W01 | SHA03W01 | O | SHA03REC | FB | | 300 | PS | 保険料計算明細(M×N件) | +| 3 | ERROR-LOG | W02 | SHA03W02 | O | ZAN05REC | VB | | 200 | PS | エラー退避 | +| 4 | INSURANCEDB | DB | — | I | — | DB2 | — | — | DASD | DB2: INSURANCE-RATES | + +### キー項目一覧 + +| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | +|----|-----------|---------------------|-------------------------------------------| +| 1 | EMP-INSURANCE | EMP-ID(既定) | なし(ファイル順次読込) | +| 2 | INSURANCE-RATES | GRADE-CODE | 全件組合せ(直積) | + +### 使用モジュール一覧 + +| NO | 機能 | プログラムID | 使用COPY名 | +|----|------|-------------|-----------| +| 1 | 運用日付取得SUB | SUB01DAT | SHADATAC | +| 2 | メッセージ編集出力SUB | SUB02MSG | SHAMSGAC | +| 3 | ABEND処理SUB | SUB03END | SHAENDAC | + +--- + +## 処理詳細 + +``` +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.PARM取得(YEARMONTH) + 1-6.DB接続 + EXEC SQL CONNECT TO 'data/INSURANCE.db' + 1-7.INSURANCE-RATES内部表LOAD(1200RATELDASOR) + DECLARE C1 CURSOR FOR + SELECT GRADE-CODE, MONTHLY-FROM, MONTHLY-TO, + HEALTH-RATE, PENSION-RATE + FROM INSURANCE-RATES + WHERE EFFECTIVE-FROM <= :WRK-YEAR-MONTH + AND EFFECTIVE-TO >= :WRK-YEAR-MONTH + ORDER BY GRADE-CODE + OPEN C1 + PERFORM UNTIL SQLCODE≠0 + FETCH C1 INTO :DBV-xxx + MOVE TO WRK-INS-RATES(WS-COUNT) + ADD 1 TO WS-COUNT + END-PERFORM + CLOSE C1 + 1-8.使用ファイルのオープン + 1-9.R01を読み込む。(1300R01INNSOR)(1回目) + +2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す) + 2-1.直積組合せ生成+W01出力(2000MAJSOR内でインライン実装) + 取得した従業員レコードに対し、WRK-INS-RATESの全エントリを + PERFORM VARYINGで走査し、以下の組合せレコードを生成する。 + 【健康保険(INSURANCE-TYPE='1')】 + HEALTH-PREMIUM = MONTHLY-AMOUNT × HEALTH-RATE(ROUNDED) + PENSION-PREMIUM = 0 + 【厚生年金(INSURANCE-TYPE='2')】 + PENSION-PREMIUM = MONTHLY-AMOUNT × PENSION-RATE(ROUNDED) + HEALTH-PREMIUM = 0 + 2-2.W01出力 + 各組合せのSHA03RECをWRITE(2-1と同一ループ内) + 2-3.エラー発生時は2100ERROUTSORでW02(ERROR-LOG)出力 + 2-3.R01を読み込む。(1300R01INNSOR)(2件目以降) + +3.終了処理(3000STPSOR) + 3-1.入出力ファイルのクローズ + 3-2.入出力件数出力メッセージ出力 + 【入力メッセージ編集】 + メッセージ番号:6(入力件数メッセージ) + PARM1:'SHA03R01' + PARM2:CUN-R01INN + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'SHA03W01' + PARM2:CUN-W01OUT + PARM1:'SHA03W02' + PARM2:CUN-W02OUT + 3-3.終了メッセージ出力 + 【メッセージ編集】 + メッセージ番号:2(終了メッセージ) +``` + +--- + +## 出力レコード定義 + +### 出力ファイル1(W01/INS-DETAIL) + +SHA03REC.cpyに従う。300B固定長。 + +| No | 項目名 | 属性 | 設定元 | 備考 | +|----|--------|------|--------|------| +| 1 | EMP-ID | 9(8) | R01.EMP-ID | | +| 2 | EMP-NAME | X(40) | R01.EMP-NAME | | +| 3 | INSURANCE-TYPE | X(1) | 固定 | '1'=健康保険 / '2'=厚生年金 | +| 4 | GRADE-CODE | 9(2) | WRK-INS-RATES.GRADE-CODE | 料率該当等級 | +| 5 | MONTHLY-AMOUNT | 9(9) | R01.MONTHLY-AMOUNT | 標準報酬月額(従業員の該当額) | +| 6 | HEALTH-RATE | 9(7) | WRK-INS-RATES.HEALTH-RATE | 健康保険料率 | +| 7 | PENSION-RATE | 9(7) | WRK-INS-RATES.PENSION-RATE | 厚生年金料率 | +| 8 | HEALTH-PREMIUM | 9(9) | MONTHLY-AMOUNT × HEALTH-RATE | 健康保険料(従業員負担分) | +| 9 | PENSION-PREMIUM | 9(9) | MONTHLY-AMOUNT × PENSION-RATE | 厚生年金保険料(従業員負担分) | +| 10 | FILLER | X(208) | LOW-VALUES固定 | | + +### 出力ファイル2(W02/ERROR-LOG) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | ERR-CATEGORY | 01で固定 | | +| 2 | ERR-DETAIL | STRINGで編集 | エラー内容 | diff --git a/詳細設計書/詳細設計書_SHA04TWO.md b/詳細設計書/詳細設計書_SHA04TWO.md new file mode 100644 index 0000000..21f741b --- /dev/null +++ b/詳細設計書/詳細設計書_SHA04TWO.md @@ -0,0 +1,159 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 社会保険管理システム | +| 2 | プログラムID | SHA04TWO | +| 3 | プログラム名 | 事業所保険者マッチング処理 | +| 4 | PGMタイプ | メイン | +| 5 | PGMパターン | マッチング(1:1→1:1 2段階) | +| 6 | 機能概要 | 被保険者データに対し、事業所マスタ(SHA02R02)と保険者マスタ(SHA03R03)の2段階1:1マッチングを実施する。 | +| 7 | | 第1段階:事業所番号(OFFICE-NO)で事業所マスタとマッチング | +| 8 | | 第2段階:保険者コード(INSURER-CODE)で保険者マスタとマッチング | +| 9 | | 両段階ともマッチした場合GRADED-LISTに出力、いずれかで不一致の場合はUNMATCHED-LISTに出力 | + +※PGMタイプ:メイン、サブ +※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 + +### 前提条件 + +| NO | 対象ファイル | 条件 | +|----|-------------|------| +| 1 | ファイルR01(INSURED-DATA) | 事業所番号(OFFICE-NO)+社員番号(EMP-ID)の昇順ソート済 | +| 2 | ファイルR02(OFFICE-MST) | 事業所番号(OFFICE-NO)の昇順ソート済、重複なし | +| 3 | ファイルR03(INSURER-MST) | 保険者コード(INSURER-CODE)の昇順ソート済、重複なし | + +### 使用ファイル一覧 + +| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | +|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| +| 1 | INSURED-DATA | R01 | SHA04R01 | I | SHA01REC | FB | | 200 | PS | 被保険者データ(SHA01CVT出力) | +| 2 | OFFICE-MST | R02 | SHA04R02 | I | 自前(80B) | FB | | 80 | PS | 事業所マスタ | +| 3 | INSURER-MST | R03 | SHA04R03 | I | 自前(80B) | FB | | 80 | PS | 保険者マスタ | +| 4 | GRADED-LIST | W01 | SHA04W01 | O | SHA04REC | FB | | 200 | PS | 両段階マッチ成功レコード | +| 5 | UNMATCHED-LIST | W02 | SHA04W02 | O | 自前(200B) | FB | | 200 | PS | いずれかの段階で不一致レコード | +| 6 | ERROR-LOG | W03 | SHA04W03 | O | ZAN05REC | VB | | 200 | PS | エラー退避 | +| 7 | INSURANCEDB | DB | — | I | — | DB2 | — | — | DASD | DB2: INSURED-MASTER | + +### キー項目一覧 + +| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | +|----|-----------|---------------------|-------------------------------------------| +| 1 | ファイルR01 | OFFICE-NO + EMP-ID | OFFICE-NO(第1段階) | +| 2 | ファイルR02 | OFFICE-NO | OFFICE-NO(第1段階, 1:1) | +| 3 | ファイルR03 | INSURER-CODE | INSURER-CODE(第2段階, 1:1) | + +### 使用モジュール一覧 + +| NO | 機能 | プログラムID | 使用COPY名 | +|----|------|-------------|-----------| +| 1 | 運用日付取得SUB | SUB01DAT | SHADATAC | +| 2 | メッセージ編集出力SUB | SUB02MSG | SHAMSGAC | +| 3 | ABEND処理SUB | SUB03END | SHAENDAC | + +--- + +## 処理詳細 + +``` +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.使用ファイルのオープン + 1-6.R02(OFFICE-MST)を全件読み込み、内部テーブル(OFFICE-TBL)に格納する。 + (1110R02LDASOR) + 1-7.R03(INSURER-MST)を全件読み込み、内部テーブル(INSURER-TBL)に格納する。 + (1120R03LDASOR) + 1-8.DB接続 + EXEC SQL CONNECT TO 'data/INSURANCEDB.db' + 1-9.R01を読み込む。(1100R01INNSOR)(1回目) + +2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す) + 2-1.第1段階マッチング(OFFICE-NO vs OFFICE-TBL):1:1マッチング(2010STG1SOR) + 2-1-1.OFFICE-TBLをOFFICE-NOで線形探索 + 2-1-2.マッチ成功→第2段階へ + 2-1-3.マッチ失敗→UNMATCHED-LISTに出力(STATUS='1'=事業所未達) + 2-2.第2段階マッチング(INSURER-CODE vs INSURER-TBL):1:1マッチング(2020STG2SOR) + 2-2-1.INSURER-TBLをINSURER-CODEで線形探索 + 2-2-2.マッチ成功→GRADED-LISTに出力 + 2-2-3.マッチ失敗→UNMATCHED-LISTに出力(STATUS='2'=保険者未達) + 2-3.DB2整合性検証(2030W01OUTSOR内でインライン実装) + 2-3-1.GRADED-LIST出力時にINSURED-MASTERをSELECTし、 + 履歴整合性を確認 + 2-3-2.SQLCODE異常→ERROR-LOGに出力 + 2-4.R01を読み込む。(1100R01INNSOR)(2件目以降) + +3.終了処理(3000STPSOR) + 3-1.入出力ファイルのクローズ + 3-2.入出力件数出力メッセージ出力 + 【入力メッセージ編集】 + メッセージ番号:6(入力件数メッセージ) + PARM1:当該入力ファイルのDD名 + PARM2:当該入力ファイルの件数 + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:当該出力ファイルのDD名 + PARM2:当該出力ファイルの件数 + 3-3.終了メッセージ出力 + 【メッセージ編集】 + メッセージ番号:2(終了メッセージ) +``` + +--- + +## 出力レコード定義 + +### 出力ファイル1(W01/GRADED-LIST) + +SHA04REC.cpyに従う。200B固定長。 + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | EMP-ID | R01.EMP-ID | | +| 2 | EMP-NAME | R01.EMP-NAME | | +| 3 | OFFICE-NO | R01.OFFICE-NO | | +| 4 | OFFICE-NAME | OFFICE-TBL.OFFICE-NAME | 第1段階マッチ結果 | +| 5 | PREF-CODE | OFFICE-TBL.PREF-CODE | 第1段階マッチ結果 | +| 6 | INSURER-CODE | R01.INSURER-CODE | | +| 7 | INSURER-NAME | INSURER-TBL.INSURER-NAME | 第2段階マッチ結果 | +| 8 | FILLER | 初期値 | | + +### 出力ファイル2(W02/UNMATCHED-LIST) + +自前レイアウト(200B固定長)。 + +| No | 項目名 | 属性 | 設定元 | 備考 | +|----|--------|------|--------|------| +| 1 | EMP-ID | 9(8) | R01.EMP-ID | | +| 2 | EMP-NAME | X(40) | R01.EMP-NAME | | +| 3 | OFFICE-NO | X(4) | R01.OFFICE-NO | | +| 4 | OFFICE-NAME | X(40) | OFFICE-TBL.OFFICE-NAME | 未達時はSPACE | +| 5 | PREF-CODE | 9(2) | OFFICE-TBL.PREF-CODE | 未達時はZERO | +| 6 | INSURER-CODE | X(4) | R01.INSURER-CODE | | +| 7 | INSURER-NAME | X(60) | INSURER-TBL.INSURER-NAME | 未達時はSPACE | +| 8 | STATUS | X(1) | 固定 | '1'=事業所未達 / '2'=保険者未達 | +| 9 | FILLER | X(41) | 初期値 | | + +### 出力ファイル3(W03/ERROR-LOG) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | ERR-CATEGORY | 01で固定 | DBエラー | +| 2 | ERR-DETAIL | STRINGで編集 | エラー内容(EMP-ID + SQLCODE) | diff --git a/詳細設計書/詳細設計書_SHA05TWN.md b/詳細設計書/詳細設計書_SHA05TWN.md new file mode 100644 index 0000000..f9179f0 --- /dev/null +++ b/詳細設計書/詳細設計書_SHA05TWN.md @@ -0,0 +1,147 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 社会保険管理システム | +| 2 | プログラムID | SHA05TWN | +| 3 | プログラム名 | 標準報酬月額等級判定処理 | +| 4 | PGMタイプ | メイン | +| 5 | PGMパターン | マッチング(N:1→N:1 2段階) | +| 6 | 機能概要 | 月額給与データ(SALARY-MONTHLY)を社員番号(EMP-ID)でN:1集約し、平均標準報酬月額を算出する。 | +| 7 | | 第1段階(N:1):社員番号キーブレイクで月額給与を平均化 | +| 8 | | 第2段階(N:1):平均標準報酬月額と等級テーブル(GRADE-TBL)をマッチングし、等級改定判定を実施 | + +※PGMタイプ:メイン、サブ +※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 + +### 前提条件 + +| NO | 対象ファイル | 条件 | +|----|-------------|------| +| 1 | ファイルR01(SALARY-MONTHLY) | 社員番号(EMP-ID)+対象年月(YEAR-MONTH)の昇順ソート済 | +| 2 | ファイルR02(GRADE-TBL) | 等級コード(GRADE-CODE)の昇順ソート済、重複なし | + +### 使用ファイル一覧 + +| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | +|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| +| 1 | SALARY-MONTHLY | R01 | SHA05R01 | I | 自前(200B) | FB | | 200 | PS | 月額給与データ(Cサブシステム由来) | +| 2 | GRADE-TBL | R02 | SHA05R02 | I | 自前(80B) | FB | | 80 | PS | 等級定義テーブル | +| 3 | REVISED-GRADE | W01 | SHA05W01 | O | SHA05REC | FB | | 200 | PS | 等級改定結果 | +| 4 | ERROR-LOG | W02 | SHA05W02 | O | ZAN05REC | VB | | 200 | PS | エラー退避 | + +### キー項目一覧 + +| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | +|----|-----------|---------------------|-------------------------------------------| +| 1 | ファイルR01 | EMP-ID + YEAR-MONTH | EMP-ID(第1段階キーブレイク, N:1) | +| 2 | ファイルR02 | GRADE-CODE | 平均標準報酬月額(第2段階, N:1) | + +### 使用モジュール一覧 + +| NO | 機能 | プログラムID | 使用COPY名 | +|----|------|-------------|-----------| +| 1 | 運用日付取得SUB | SUB01DAT | SHADATAC | +| 2 | メッセージ編集出力SUB | SUB02MSG | SHAMSGAC | +| 3 | ABEND処理SUB | SUB03END | SHAENDAC | + +--- + +## 処理詳細 + +``` +1.初期処理(1000ITTSOR) + 1-1.開始メッセージ出力 + 【メッセージ編集】 + メッセージ番号:1(開始メッセージ) + 1-2.コンパイル日時出力 + 【メッセージ編集】 + メッセージ番号:33(コンパイル日時) + PARM1:コンパイル日時 + PARM2:'COMPILED' + 1-3.ワークエリアの初期化 + PARM(対象年月 YYYYMM)をACCEPT COMMAND-LINEから取得 + 未設定時はデフォルト'202607'を使用 + 1-4.運用日付取得SUB(SUB01DAT)により運用日を取得する。 + 復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。 + 【メッセージ編集】 + メッセージ番号:5(サブエラー) + PARM1:'SUB01DAT' + PARM2:復帰コード + 【ABEND処理SUB】 + ABENDコード:999 + 1-5.使用ファイルのオープン + 1-6.R02(GRADE-TBL)を全件読み込み、内部テーブル(GRADE-TBL)に格納する。(1110R02LDASOR) + 1-7.R01を読み込む。(1100R01INNSOR)(1回目) + +2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す) + 2-1.第1段階:キーブレイクN:1集約(2010KEYBRSOR) + 2-1-1.同一EMP-IDのレコードを集約 + 2-1-2.MONTHLY-AMOUNTをADD TOで累積加算 + 2-1-3.COUNTをADD 1でカウント + 2-1-4.グループ内の月数をカウント(WRK-MONTH-COUNT) + 2-1-5.キー変更時(新EMP-ID検出)、以下の処理を実行 + 2-1-5-1.WRK-TOTAL ÷ WRK-COUNT = 平均標準報酬月額 + DIVIDE WRK-TOTAL BY WRK-COUNT GIVING WRK-AVG + REMAINDER WRK-REM + 2-1-5-2.定時決定(4-6ヶ月平均)or 月変(3ヶ月平均)の判定 + IF WRK-MONTH-COUNT >= 4 → 定時決定(TYPE='A') + IF WRK-MONTH-COUNT = 3 → 月変(TYPE='B') + ELSE → ERROR-LOGに出力 + 2-2.第2段階:等級テーブルN:1マッチング(2020GRADSOR) + 2-2-1.GRADE-TBLを平均標準報酬月額で線形探索 + IF WRK-AVG >= MONTHLY-FROM AND WRK-AVG <= MONTHLY-TO + → 該当等級コードを取得 + 2-2-2.該当等級なし→ ERROR-LOGに出力 + 2-2-3.該当等級あり→ 現在の等級と比較 + 2-2-3-1.現在等級はGRADE-HISTORYから取得(直近有効レコード) + 2-2-3-2.OLD-GRADE ≠ NEW-GRADEの場合:REVISED-GRADEに出力 + REVISED-TYPE='A'(定時決定:4-6ヶ月平均)/'B'(月変:3ヶ月平均) + 2-2-3-3.OLD-GRADE = NEW-GRADEの場合:出力なし(変更不要) + 2-2-4.WRK-ACCUMをINITIALIZEし、次のキーブレイクに備える + 2-3.次のR01読み込み→次のキーグループへ(1100R01INNSOR) + +3.終了処理(3000STPSOR) + 3-1.入出力ファイルのクローズ + 3-2.最終キーグループの処理(最終レコードの集約結果出力) + 3-3.入出力件数出力メッセージ出力 + 【入力メッセージ編集】 + メッセージ番号:6(入力件数メッセージ) + PARM1:当該入力ファイルのDD名 + PARM2:当該入力ファイルの件数 + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:当該出力ファイルのDD名 + PARM2:当該出力ファイルの件数 + 3-4.終了メッセージ出力 + 【メッセージ編集】 + メッセージ番号:2(終了メッセージ) +``` + +--- + +## 出力レコード定義 + +### 出力ファイル1(W01/REVISED-GRADE) + +SHA05REC.cpyに従う。200B固定長。 + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | EMP-ID | R01.EMP-ID | キーブレイク元の社員番号 | +| 2 | EMP-NAME | R01.EMP-NAME | キーブレイク元の氏名 | +| 3 | REVISED-YM | PARM(対象年月) | | +| 4 | OLD-GRADE | GRADE-HISTORYより取得 | 変更前等級 | +| 5 | NEW-GRADE | GRADE-TBLより取得 | 変更後等級 | +| 6 | AVG-STD-MONTHLY | 第1段階算出値 | DIVIDE結果(整数) | +| 7 | REVISED-TYPE | 'A'=定時決定/'B'=月変 | | +| 8 | FILLER | 初期値 | | + +### 出力ファイル2(W02/ERROR-LOG) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | ERR-CATEGORY | 01で固定 | エラー種別 | +| 2 | ERR-DETAIL | STRINGで編集 | エラー内容(EMP-ID + エラー理由) | diff --git a/詳細設計書/詳細設計書_SHA06TWM.md b/詳細設計書/詳細設計書_SHA06TWM.md new file mode 100644 index 0000000..d9dc389 --- /dev/null +++ b/詳細設計書/詳細設計書_SHA06TWM.md @@ -0,0 +1,153 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 社会保険管理システム | +| 2 | プログラムID | SHA06TWM | +| 3 | プログラム名 | 保険料率適用・控除計算処理 | +| 4 | PGMタイプ | メイン | +| 5 | PGMパターン | マッチング(M:N→M:N 2段階) | +| 6 | 機能概要 | 従業員保険情報データ(EMP-INSURANCE)をもとに、DB2 INSURANCE-RATESとAPPLICABLE-RULESの2段階M:Nマッチングで保険料を算出する。 | +| 7 | | 第1段階(M×N):各従業員の給与等級に対応する保険料率をDB2より取得し、保険料を計算 | +| 8 | | 第2段階(M:N):年齢・扶養人数・地域コードの条件に合致する適用ルールを探索し、料率を調整後、控除結果を出力 | + +※PGMタイプ:メイン、サブ +※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 + +### 前提条件 + +| NO | 対象ファイル | 条件 | +|----|-------------|------| +| 1 | ファイルR01(EMP-INSURANCE) | 社員番号(EMP-ID)の昇順ソート済 | +| 2 | ファイルR02(APPLICABLE-RULES) | ルールコード(RULE-CODE)の昇順ソート済 | + +### 使用ファイル一覧 + +| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | +|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| +| 1 | EMP-INSURANCE | R01 | SHA06R01 | I | SHA02REC | FB | | 200 | PS | 従業員保険情報 | +| 2 | APPLICABLE-RULES | R02 | SHA06R02 | I | 自前(80B) | FB | | 80 | PS | 適用ルール定義テーブル | +| 3 | DEDUCTED-RESULT | W01 | SHA06W01 | O | SHA06REC | FB | | 300 | PS | 保険料確定結果 | +| 4 | ERROR-LOG | W02 | SHA06W02 | O | ZAN05REC | VB | | 200 | PS | エラー退避 | +| 5 | INSURANCEDB | DB | — | I | — | DB2 | — | — | DASD | DB2: INSURANCE-RATES | +| 6 | SALARYDB | DB | — | I | — | DB2 | — | — | DASD | DB2: EMP-MASTER(誕生日・扶養人数・地域コード取得) | + +### キー項目一覧 + +| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | +|----|-----------|---------------------|-------------------------------------------| +| 1 | ファイルR01 | EMP-ID | EMP-ID(第1段階) | +| 2 | ファイルR02 | RULE-CODE | 年齢・扶養人数・地域コード(第2段階, M:N) | + +### 使用モジュール一覧 + +| NO | 機能 | プログラムID | 使用COPY名 | +|----|------|-------------|-----------| +| 1 | 運用日付取得SUB | SUB01DAT | SHADATAC | +| 2 | メッセージ編集出力SUB | SUB02MSG | SHAMSGAC | +| 3 | ABEND処理SUB | SUB03END | SHAENDAC | + +--- + +## 処理詳細 + +``` +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.使用ファイルのオープン + 1-6.DB接続 + EXEC SQL CONNECT TO 'data/INSURANCEDB.db' + 1-7.R02(APPLICABLE-RULES)を全件読み込み、内部テーブル(RULE-TBL)に格納する。(1110R02LDASOR) + 1-8.R01を読み込む。(1100R01INNSOR)(1回目) + +2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す) + 2-1.第1段階:保険料率M×Nマッチング(DB2 INSURANCE-RATES)(2010RATESOR) + 2-1-1.EMP-INSURANCEのGRADE-CODE(等級コード)をもとに + DB2 INSURANCE-RATESテーブルをSELECT + 2-1-2.SQLCODE=0の場合→健康保険料率・厚生年金保険料率を取得 + 2-1-3.SQLCODE=100の場合(該当なし)→ERROR-LOGに出力 + 2-1-4.SQLCODE<0の場合→ERROR-LOGに出力、処理継続 + 2-1-5.保険料計算 + HEALTH-PREMIUM = MONTHLY-AMOUNT × HEALTH-RATE / 1000000 + PENSION-PREMIUM = MONTHLY-AMOUNT × PENSION-RATE / 1000000 + 2-1-6.COMPUTE文を使用し、ON SIZE ERROR処理を実装 + 2-2.第2段階:適用ルールM:Nマッチング(APPLICABLE-RULES)(2020RULESCOL) + 2-2-1.年齢算出(運用日付 - BIRTH-DATEで満年齢) + 2-2-2.SALARYDB.EMP-MASTERをSELECTし、BIRTH-DATE・DEPENDENT-COUNT・ + REGION-CODEを取得。SQLCODE異常→ERROR-LOG出力。 + 2-2-3.RULE-TBLを線形探索し、以下の条件すべて合致するルールを検索 + AGE >= AGE-FROM AND AGE <= AGE-TO + DEPENDENTS >= DEPENDENTS-FROM AND DEPENDENTS <= DEPENDENTS-TO + REGION-CODE = DBV-REGION-CODE + 2-2-4.合致ルールあり→HEALTH-RATE-ADJ / PENSION-RATE-ADJで料率調整 + IF 合致 AND HEALTH-RATE-ADJ > 0 + HEALTH-RATE = DB2取得率 + HEALTH-RATE-ADJ + IF 合致 AND PENSION-RATE-ADJ > 0 + PENSION-RATE = DB2取得率 + PENSION-RATE-ADJ + 2-2-5.保険料再計算(調整後) + 2-2-6.DEDUCTED-RESULTに出力(W01) + TOTAL-PREMIUM = HEALTH-PREMIUM + PENSION-PREMIUM + 2-3.R01を読み込む。(1100R01INNSOR)(2件目以降) + +3.終了処理(3000STPSOR) + 3-1.入出力ファイルのクローズ + 3-2.入出力件数出力メッセージ出力 + 【入力メッセージ編集】 + メッセージ番号:6(入力件数メッセージ) + PARM1:当該入力ファイルのDD名 + PARM2:当該入力ファイルの件数 + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:当該出力ファイルのDD名 + PARM2:当該出力ファイルの件数 + 3-3.終了メッセージ出力 + 【メッセージ編集】 + メッセージ番号:2(終了メッセージ) +``` + +--- + +## 出力レコード定義 + +### 出力ファイル1(W01/DEDUCTED-RESULT) + +SHA06REC.cpyに従う。300B固定長。 + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | EMP-ID | R01.EMP-ID | | +| 2 | EMP-NAME | R01.EMP-NAME | | +| 3 | INSURANCE-TYPE | R01.HEALTH-INS-TYPE | 健康保険種別 | +| 4 | GRADE-CODE | R01.GRADE-CODE | | +| 5 | MONTHLY-AMOUNT | R01.MONTHLY-AMOUNT | | +| 6 | HEALTH-RATE | DB2取得率(調整後) | 9(7) 小数点位置はプログラム内で規定 | +| 7 | PENSION-RATE | DB2取得率(調整後) | 9(7) 小数点位置はプログラム内で規定 | +| 8 | HEALTH-PREMIUM | 計算値 | MONTHLY-AMOUNT × HEALTH-RATE / 1000000 | +| 9 | PENSION-PREMIUM | 計算値 | MONTHLY-AMOUNT × PENSION-RATE / 1000000 | +| 10 | TOTAL-PREMIUM | 計算値 | HEALTH-PREMIUM + PENSION-PREMIUM | +| 11 | FILLER | 初期値 | | + +### 出力ファイル2(W02/ERROR-LOG) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | ERR-CATEGORY | 01で固定 | エラー種別(DBエラー/等級該当なし) | +| 2 | ERR-DETAIL | STRINGで編集 | エラー内容(EMP-ID + SQLCODE or 理由) | diff --git a/詳細設計書/詳細設計書_SHA07KBR.md b/詳細設計書/詳細設計書_SHA07KBR.md new file mode 100644 index 0000000..411c77c --- /dev/null +++ b/詳細設計書/詳細設計書_SHA07KBR.md @@ -0,0 +1,172 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 社会保険管理システム | +| 2 | プログラムID | SHA07KBR | +| 3 | プログラム名 | 資格異動キーブレイク処理 | +| 4 | PGMタイプ | メイン | +| 5 | PGMパターン | 33(1:N+異キーキーブレイク) | +| 6 | 機能概要 | DB2 QUALIFICATION-CHANGESから資格異動データをFETCHし、従業員ごと(1:N)かつ保険者コード変更時(異キー)にキーブレイクしてサマリ・明細を出力する。 | +| 7 | | 同一従業員内で保険者コードが変更された時点でサマリレコード(REC-TYPE=S)を出力、全レコードを明細レコード(REC-TYPE=D)として出力する。 | +| 8 | | 各出力はSHA07REC書式(200B固定長)に従う。エラーはERROR-LOG(VB)に出力する。 | + +※PGMタイプ:メイン、サブ +※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 + +### 前提条件 + +| NO | 対象ファイル | 条件 | +|----|-------------|------| +| 1 | QUALIFICATION-CHANGES(DB2) | EMP-ID, CHG-DATE昇順にSELECTする。ソートはSQLのORDER BYで担保する。 | + +### 使用ファイル一覧 + +| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | +|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| +| 1 | QUALIFICATION-CHANGES(DB2) | — | — | I | なし | — | — | — | DB2 | DECLARE CURSOR / FETCH | +| 2 | CHG-SUMMARY | W01 | SHA07W01 | O | SHA07REC | FB | | 200 | PS | REC-TYPE='S' | +| 3 | CHG-DETAIL | W02 | SHA07W02 | O | SHA07REC | FB | | 200 | PS | REC-TYPE='D' | +| 4 | ERROR-LOG | W03 | SHA07W03 | O | ZAN05REC | VB | | 200 | PS | エラー退避 | + +### キー項目一覧 + +| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | +|----|-----------|---------------------|-------------------------------------------| +| 1 | QUALIFICATION-CHANGES | EMP-ID昇順, CHG-DATE昇順 | 1:Nマッチング(従業員1件に対しN件の異動) | +| 2 | 同上 | INSURER-CODE(異キー) | 従業員内で保険者コード変更時にキーブレイク | + +### 使用モジュール一覧 + +| NO | 機能 | プログラムID | 使用COPY名 | +|----|------|-------------|-----------| +| 1 | 運用日付取得SUB | SUB01DAT | SHADATAC | +| 2 | メッセージ編集出力SUB | SUB02MSG | SHAMSGAC | +| 3 | ABEND処理SUB | SUB03END | SHAENDAC | + + +--- + +## 処理詳細 + +``` +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.出力ファイルのオープン + 1-6.DB接続(EXEC SQL CONNECT) + 1-7.DECLARE CURSOR文でQUALIFICATION-CHANGESをSELECT + SELECT対象:CHG-ID, EMP-ID, EMP-NAME(SALARYDB.EMP-MASTERとJOIN), CHG-DATE, CHG-TYPE, INSURER-CODE, PREV-INSURER, REASON + ORDER BY:EMP-ID, CHG-DATE + 1-8.FETCHで1件目を取得し、WS-PREV-EMP-ID・WS-PREV-INSURERを初期設定(1100FETCSOR) + +2.主処理(2000MAJSOR)(FETCH終了まで繰り返す) + 2-1.EMP-IDキーブレイク判定(2100KEYBRSOR) + 2-1-1.WS-PREV-EMP-ID(前回従業員ID)とDBV-EMP-ID(今回従業員ID)が異なる場合、主キーブレイク発生 + 2-1-2.初回(WS-PREV-EMP-ID=HIGH-VALUES)はスキップ + 2-1-3.主キーブレイク時はサマリレコード出力(REC-TYPE='S') + 設定内容:前回従業員の最終保険者状態をサマリとして出力 + PREV-INSURER=前回レコードのINSURER-CODE、INSURER-CODE=SPACE + EMP-ID=前回従業員ID + 2-2.INSURER-CODE異キーブレイク判定(2200DIFKBSOR) + 2-2-1.WS-PREV-INSURER(前回保険者コード)とDBV-INSURER-CODE(今回保険者コード)が異なる場合、異キーブレイク発生 + 2-2-2.異キーブレイク時はサマリレコード出力(REC-TYPE='S') + 設定内容:前回保険者→今回保険者の変遷をサマリ + PREV-INSURER=WS-PREV-INSURER + INSURER-CODE=DBV-INSURER-CODE + EMP-ID=DBV-EMP-ID + CHG-DATE=DBV-CHG-DATE + REASON='INSURER CHANGED' + 2-3.明細レコード出力(2300DETAILSOR) + 全FETCHレコードを明細出力(REC-TYPE='D') + SHA07RECの全項目をDBV-から転記 + 2-4.WS-PREV-EMP-ID、WS-PREV-INSURERに今回値を設定 + 2-5.FETCHで次件取得(1100FETCSOR) + +3.最終グループ処理(2500LSTKBRSOR) + 3-1.最終従業員グループのサマリレコードを出力 + 3-2.最終詳細レコードを出力 + +4.終了処理(3000STPSOR) + 4-1.CLOSE CURSOR + 4-2.DISCONNECT DB + 4-3.出力ファイルのクローズ + 4-4.出力件数メッセージ出力 + 【メッセージ編集】 + メッセージ番号:6(入力件数メッセージ) + PARM1:'DB2-QUALIFICATION-CHANGES' + PARM2:FETCH件数 + 【メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'SHA07W01(CHG-SUMMARY)' + PARM2:サマリ件数 + 【メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'SHA07W02(CHG-DETAIL)' + PARM2:明細件数 + 【メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'SHA07W03(ERROR-LOG)' + PARM2:エラー件数 + 4-5.終了メッセージ出力 + 【メッセージ編集】 + メッセージ番号:2(終了メッセージ) +``` + +--- + +## 出力レコード定義 + +### 出力ファイル1(W01/CHG-SUMMARY) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | CHG-ID | DBV-CHG-ID | 最終レコードのCHG-ID | +| 2 | EMP-ID | DBV-EMP-ID | 従業員ID | +| 3 | EMP-NAME | DBV-EMP-NAME | 従業員名 | +| 4 | CHG-DATE | DBV-CHG-DATE | 異動日 | +| 5 | CHG-TYPE | '99'固定 | サマリ識別 | +| 6 | INSURER-CODE | 異キー:DBV-INSURER-CODE / 主キー:SPACE | 主KB時はSPACE | +| 7 | PREV-INSURER | WS-PREV-INSURER | 変更前保険者コード | +| 8 | REASON | 'INSURER CHANGED' / SPACE | 異キー時のみ設定 | +| 9 | REC-TYPE | 'S'固定 | サマリ識別子 | +| 10 | FILLER | SPACE | | + +### 出力ファイル2(W02/CHG-DETAIL) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | CHG-ID | DBV-CHG-ID | | +| 2 | EMP-ID | DBV-EMP-ID | | +| 3 | EMP-NAME | DBV-EMP-NAME | | +| 4 | CHG-DATE | DBV-CHG-DATE | | +| 5 | CHG-TYPE | DBV-CHG-TYPE | | +| 6 | INSURER-CODE | DBV-INSURER-CODE | | +| 7 | PREV-INSURER | DBV-PREV-INSURER | | +| 8 | REASON | DBV-REASON | | +| 9 | REC-TYPE | 'D'固定 | | +| 10 | FILLER | SPACE | | + +### 出力ファイル3(W03/ERROR-LOG) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | ERR-CATEGORY | 01で固定 | | +| 2 | ERR-DETAIL | STRINGで編集 | エラー内容 | diff --git a/詳細設計書/詳細設計書_SHA08SRT.md b/詳細設計書/詳細設計書_SHA08SRT.md new file mode 100644 index 0000000..30860b8 --- /dev/null +++ b/詳細設計書/詳細設計書_SHA08SRT.md @@ -0,0 +1,178 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 社会保険管理システム | +| 2 | プログラムID | SHA08SRT | +| 3 | プログラム名 | 届出書データSORT編集処理 | +| 4 | PGMタイプ | メイン | +| 5 | PGMパターン | 34(SORT INPUT/OUTPUT PROCEDURE) | +| 6 | 機能概要 | GRADED-LIST(SHA04REC 200B)をすべてSORT文のINPUT PROCEDUREでRELEASEし、都道府県・事業所・従業員昇順にSORT後、OUTPUT PROCEDUREでRETURNしてレイアウト編集したRPT-DATA(SHA08REC 300B)を出力する。GRADED-LISTはSHA04TWOでマッチング成功した全件が有効レコードのため、STATUSフィルタは不要。 | +| 7 | | SORT作業用ファイルはSD-SORTWORKで定義し、I-O-CONTROLでSAME SORT AREAを指定する。 | +| 8 | | RETURN-CODEでSORT結果を判定し、異常時はABEND処理を行う。 | + +※PGMタイプ:メイン、サブ +※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 + +### 前提条件 + +| NO | 対象ファイル | 条件 | +|----|-------------|------| +| 1 | GRADED-LIST(R01) | 事前に事業所マッチング・保険者マッチング済みのSHA04TWO出力。ソート不要(SORT文で並替え)。 | + +### 使用ファイル一覧 + +| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | +|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| +| 1 | GRADED-LIST | R01 | SHA08R01 | I | SHA04REC | FB | | 200 | PS | | +| 2 | SD-SORTWORK | — | — | I/O | 自前 | — | — | 200 | 内部 | SORT作業用 | +| 3 | RPT-DATA | W01 | SHA08W01 | O | SHA08REC | FB | | 300 | PS | | +| 4 | ERROR-LOG | W02 | SHA08W02 | O | ZAN05REC | VB | | 200 | PS | | + +### キー項目一覧 + +| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | +|----|-----------|---------------------|-------------------------------------------| +| 1 | SD-SORTWORK | PREF-CODE昇順, OFFICE-NO昇順, EMP-ID昇順 | なし(SORTのみ) | + +### 使用モジュール一覧 + +| NO | 機能 | プログラムID | 使用COPY名 | +|----|------|-------------|-----------| +| 1 | 運用日付取得SUB | SUB01DAT | SHADATAC | +| 2 | メッセージ編集出力SUB | SUB02MSG | SHAMSGAC | +| 3 | ABEND処理SUB | SUB03END | SHAENDAC | + +--- + +## 処理詳細 + +``` +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.出力ファイルのオープン(W01 / W02) + 1-6.入力ファイルR01のオープン + +2.主処理(2000MAJSOR) + 2-1.SORT文の実行(2100SORTSOR) + SORT SD-SORTWORK + ON ASCENDING KEY SR-PREF-CODE + SR-OFFICE-NO + SR-EMP-ID + INPUT PROCEDURE IS 2110INPPSOR + OUTPUT PROCEDURE IS 2120OUTPSOR. + 2-2.SORT結果判定(RETURN-CODE) + RETURN-CODE ≠ 0 の場合: + メッセージ出力 + 【メッセージ編集】 + メッセージ番号:5(サブエラー) + PARM1:'SORT FAILED' + PARM2:RETURN-CODE + 【ABEND処理SUB】 + ABENDコード:100 + +2-1.入力手続き(2110INPPSOR) + 2-1-1.INPUT PROCEDURE内でR01(GRADED-LIST)を全件読み込み + 2-1-2.全件をRELEASEでSD-SORTWORKに出力(GRADED-LISTはSHA04TWOの有効マッチング結果のためフィルタ不要) + 2-1-3.SR-STATUSにはCNS-STATUS-0('0')を設定 + 2-1-4.READ AT ENDで入力手続き終了 + 2-1-5.EXITでINPUT PROCEDUREを抜ける + +2-2.出力手続き(2120OUTPSOR) + 2-2-1.RETURNでSD-SORTWORKから1件取得 + 2-2-2.AT ENDまで以下の処理を繰り返す + 2-2-3.ソート済みSDレコード→W01出力レコードに編集転記 + 編集内容: + RPT-BODYにSHA08RECの全項目を設定 + REPORT-TYPE='01'(届出書種別:算定基礎届) + REPORT-DATE=WRK-U06(運用日) + MONTHLY-AMOUNTはSR-MONTHLY-AMOUNTから転記(SHA04REC由来) + GRADE-CODEはSR-GRADE-CODEから転記(SHA04REC由来) + 2-2-4.WRITE W01OUTRECでRPT-DATAに出力 + 2-2-5.RETURNで次のレコード取得 + +3.終了処理(3000STPSOR) + 3-1.入出力ファイルのクローズ + 3-2.SORT入出力件数メッセージ出力 + 【メッセージ編集】 + メッセージ番号:6(入力件数メッセージ) + PARM1:'SHA08R01(GRADED-LIST)' + PARM2:入力件数 + 【メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'SHA08W01(RPT-DATA)' + PARM2:出力件数 + 【メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'SHA08W02(ERROR-LOG)' + PARM2:エラー件数 + 3-3.終了メッセージ出力 + 【メッセージ編集】 + メッセージ番号:2(終了メッセージ) +``` + +--- + +## 出力レコード定義 + +### 出力ファイル1(W01/RPT-DATA) + +SHA08REC.cpyに従う。300B固定長。 + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | EMP-ID | SR-EMP-ID | | +| 2 | EMP-NAME | SR-EMP-NAME | | +| 3 | OFFICE-NO | SR-OFFICE-NO | | +| 4 | OFFICE-NAME | SR-OFFICE-NAME | | +| 5 | INSURER-CODE | SR-INSURER-CODE | | +| 6 | INSURER-NAME | SR-INSURER-NAME | | +| 7 | PREF-CODE | SR-PREF-CODE | | +| 8 | MONTHLY-AMOUNT | SR-MONTHLY-AMOUNT | SHA04RECから保持(SHA04TWO時点では0) | +| 9 | GRADE-CODE | SR-GRADE-CODE | SHA04RECから保持(SHA04TWO時点では0) | +| 10 | REPORT-TYPE | '01'固定 | | +| 11 | REPORT-DATE | WRK-U06 | 運用日 | +| 12 | FILLER | SPACE | | + +### 出力ファイル2(W02/ERROR-LOG) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | ERR-CATEGORY | 01で固定 | | +| 2 | ERR-DETAIL | STRINGで編集 | エラー内容 | + +### SD-SORTWORK(SORT内部ファイル) + +自前定義。200B。SHA04REC相当+SORT管理領域。 + +| No | 項目名 | 属性 | 備考 | +|----|--------|------|------| +| 1 | SR-EMP-ID | 9(008) | SORTキー3 | +| 2 | SR-EMP-NAME | X(040) | | +| 3 | SR-OFFICE-NO | X(004) | SORTキー2 | +| 4 | SR-OFFICE-NAME | X(040) | | +| 5 | SR-PREF-CODE | 9(002) | SORTキー1 | +| 6 | SR-INSURER-CODE | X(004) | | +| 7 | SR-INSURER-NAME | X(060) | | +| 8 | SR-MONTHLY-AMOUNT | 9(009) | SHA04RECから転記 | +| 9 | SR-GRADE-CODE | 9(002) | SHA04RECから転記 | +| 10 | SR-STATUS | X(001) | CNS-STATUS-0で固定(全件有効扱い) | +| 11 | SR-FILLER | X(030) | | diff --git a/詳細設計書/詳細設計書_SHA09S25.md b/詳細設計書/詳細設計書_SHA09S25.md new file mode 100644 index 0000000..4d76a25 --- /dev/null +++ b/詳細設計書/詳細設計書_SHA09S25.md @@ -0,0 +1,149 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 社会保険管理システム | +| 2 | プログラムID | SHA09S25 | +| 3 | プログラム名 | 都道府県支部別分割出力処理 | +| 4 | PGMタイプ | メイン | +| 5 | PGMパターン | 11(25分割) | +| 6 | 機能概要 | RPT-DATA(SHA08REC 300B)からPREF-CODE(都道府県コード01〜25)を判定し、25個の出力ファイル(PREF-OUT-01〜25)に振り分けて出力する。 | +| 7 | | SELECT文にはORGANIZATION IS SEQUENTIALを明示指定する。 | +| 8 | | 各出力ファイルはCLOSE WITH LOCKで確定する。 | + +※PGMタイプ:メイン、サブ +※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 + +### 前提条件 + +| NO | 対象ファイル | 条件 | +|----|-------------|------| +| 1 | RPT-DATA(R01) | SHA08SRTの出力。PREF-CODE 01〜25のいずれかが設定されている。 | + +### 使用ファイル一覧 + +| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | +|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| +| 1 | RPT-DATA | R01 | SHA09R01 | I | SHA08REC | FB | | 300 | PS | | +| 2 | PREF-OUT-01 | W01 | SHA09W01 | O | SHA09REC | FB | | 300 | PS | PREF-CODE=01 | +| 3 | PREF-OUT-02 | W02 | SHA09W02 | O | SHA09REC | FB | | 300 | PS | PREF-CODE=02 | +| 4 | PREF-OUT-03 | W03 | SHA09W03 | O | SHA09REC | FB | | 300 | PS | PREF-CODE=03 | +| 5 | PREF-OUT-04 | W04 | SHA09W04 | O | SHA09REC | FB | | 300 | PS | PREF-CODE=04 | +| 6 | PREF-OUT-05 | W05 | SHA09W05 | O | SHA09REC | FB | | 300 | PS | PREF-CODE=05 | +| 7 | PREF-OUT-06 | W06 | SHA09W06 | O | SHA09REC | FB | | 300 | PS | PREF-CODE=06 | +| 8 | PREF-OUT-07 | W07 | SHA09W07 | O | SHA09REC | FB | | 300 | PS | PREF-CODE=07 | +| 9 | PREF-OUT-08 | W08 | SHA09W08 | O | SHA09REC | FB | | 300 | PS | PREF-CODE=08 | +| 10 | PREF-OUT-09 | W09 | SHA09W09 | O | SHA09REC | FB | | 300 | PS | PREF-CODE=09 | +| 11 | PREF-OUT-10 | W10 | SHA09W10 | O | SHA09REC | FB | | 300 | PS | PREF-CODE=10 | +| 12 | PREF-OUT-11 | W11 | SHA09W11 | O | SHA09REC | FB | | 300 | PS | PREF-CODE=11 | +| 13 | PREF-OUT-12 | W12 | SHA09W12 | O | SHA09REC | FB | | 300 | PS | PREF-CODE=12 | +| 14 | PREF-OUT-13 | W13 | SHA09W13 | O | SHA09REC | FB | | 300 | PS | PREF-CODE=13 | +| 15 | PREF-OUT-14 | W14 | SHA09W14 | O | SHA09REC | FB | | 300 | PS | PREF-CODE=14 | +| 16 | PREF-OUT-15 | W15 | SHA09W15 | O | SHA09REC | FB | | 300 | PS | PREF-CODE=15 | +| 17 | PREF-OUT-16 | W16 | SHA09W16 | O | SHA09REC | FB | | 300 | PS | PREF-CODE=16 | +| 18 | PREF-OUT-17 | W17 | SHA09W17 | O | SHA09REC | FB | | 300 | PS | PREF-CODE=17 | +| 19 | PREF-OUT-18 | W18 | SHA09W18 | O | SHA09REC | FB | | 300 | PS | PREF-CODE=18 | +| 20 | PREF-OUT-19 | W19 | SHA09W19 | O | SHA09REC | FB | | 300 | PS | PREF-CODE=19 | +| 21 | PREF-OUT-20 | W20 | SHA09W20 | O | SHA09REC | FB | | 300 | PS | PREF-CODE=20 | +| 22 | PREF-OUT-21 | W21 | SHA09W21 | O | SHA09REC | FB | | 300 | PS | PREF-CODE=21 | +| 23 | PREF-OUT-22 | W22 | SHA09W22 | O | SHA09REC | FB | | 300 | PS | PREF-CODE=22 | +| 24 | PREF-OUT-23 | W23 | SHA09W23 | O | SHA09REC | FB | | 300 | PS | PREF-CODE=23 | +| 25 | PREF-OUT-24 | W24 | SHA09W24 | O | SHA09REC | FB | | 300 | PS | PREF-CODE=24 | +| 26 | PREF-OUT-25 | W25 | SHA09W25 | O | SHA09REC | FB | | 300 | PS | PREF-CODE=25 | +| 27 | ERROR-LOG | W98 | SHA09W98 | O | ZAN05REC | VB | | 200 | PS | | + +### キー項目一覧 + +| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | +|----|-----------|---------------------|-------------------------------------------| +| 1 | RPT-DATA | なし | PREF-CODEで振分け(01〜25) | + +### 使用モジュール一覧 + +| NO | 機能 | プログラムID | 使用COPY名 | +|----|------|-------------|-----------| +| 1 | 運用日付取得SUB | SUB01DAT | SHADATAC | +| 2 | メッセージ編集出力SUB | SUB02MSG | SHAMSGAC | +| 3 | ABEND処理SUB | SUB03END | SHAENDAC | + +--- + +## 処理詳細 + +``` +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.入出力ファイルのオープン + 入力R01、出力W01〜W25、エラーW98 + 1-6.R01を読み込む。(1100R01INNSOR)(1回目) + +2.主処理(2000MAJSOR)(R01を全て読み終えるまで繰り返す) + 2-1.PREF-CODE判定(2100SPLITSOR) + EVALUATE PREF-CODE(01〜25)で該当する出力ファイルにWRITE + 【出力レコード編集】 + SHA09RECのPREF-CODEにR01のPREF-CODEを設定 + SHA09RECのINSURER-CODEにR01のINSURER-CODEを設定 + SHA09RECのRPT-BODYにR01のFILLER(実質レコード本体の先頭294B)を設定 + またはSHA08RECの全項目を編集してSHA09RECに転記 + 2-2.W01〜W25のいずれかにWRITE + 2-3.R01を読み込む(1100R01INNSOR)(2件目以降) + 2-4.PREF-CODEが01〜25の範囲外の場合、ERROR-LOGに出力 + +3.終了処理(3000STPSOR) + 3-1.入出力ファイルのクローズ(CLOSE WITH LOCKで出力ファイルを確定) + 3-2.入出力件数メッセージ出力 + 【メッセージ編集】 + メッセージ番号:6(入力件数メッセージ) + PARM1:'SHA09R01' + PARM2:入力件数 + 【メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:各出力ファイルDD名 + PARM2:各出力件数 + 【メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'SHA09W98(ERROR-LOG)' + PARM2:エラー件数 + 3-3.終了メッセージ出力 + 【メッセージ編集】 + メッセージ番号:2(終了メッセージ) +``` + +--- + +## 出力レコード定義 + +### 出力ファイル1〜25(W01〜W25/PREF-OUT-01〜25) + +SHA09REC.cpyに従う。300B固定長。 + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | PREF-CODE | R01のPREF-CODE | 01〜25 | +| 2 | INSURER-CODE | R01のINSURER-CODE | | +| 3 | RPT-BODY | R01のFILLER領域相当 | ファイル本体データ(294B) | + +### エラー出力ファイル(W98/ERROR-LOG) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | ERR-CATEGORY | 01で固定 | | +| 2 | ERR-DETAIL | STRINGで編集 | エラー内容 | diff --git a/詳細設計書/詳細設計書_SHA10S10.md b/詳細設計書/詳細設計書_SHA10S10.md new file mode 100644 index 0000000..5eea5bb --- /dev/null +++ b/詳細設計書/詳細設計書_SHA10S10.md @@ -0,0 +1,132 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 社会保険管理システム | +| 2 | プログラムID | SHA10S10 | +| 3 | プログラム名 | 保険者別分割出力処理 | +| 4 | PGMタイプ | メイン | +| 5 | PGMパターン | 12(100分割) | +| 6 | 機能概要 | RPT-DATA(SHA08REC 300B)からINSURER-CODE(保険者コード001〜099)を判定し、99個の出力ファイル(INSURER-OUT-01〜99)に振り分けて出力する。 | +| 7 | | SELECT文にはORGANIZATION IS SEQUENTIALを明示指定する。 | +| 8 | | 各出力ファイルはCLOSE WITH LOCKで確定する。 | + +※PGMタイプ:メイン、サブ +※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 + +### 前提条件 + +| NO | 対象ファイル | 条件 | +|----|-------------|------| +| 1 | RPT-DATA(R01) | SHA08SRTの出力。INSURER-CODE 001〜099のいずれかが設定されている。 | + +### 使用ファイル一覧 + +| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | +|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| +| 1 | RPT-DATA | R01 | SHA10R01 | I | SHA08REC | FB | | 300 | PS | | +| 2 | INSURER-OUT-01 | W01 | SHA10W01 | O | SHA09REC | FB | | 300 | PS | INSURER-CODE=001 | +| 3 | INSURER-OUT-02 | W02 | SHA10W02 | O | SHA09REC | FB | | 300 | PS | INSURER-CODE=002 | +| 4 | INSURER-OUT-03 | W03 | SHA10W03 | O | SHA09REC | FB | | 300 | PS | INSURER-CODE=003 | +| .. | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | +| 11 | INSURER-OUT-10 | W10 | SHA10W10 | O | SHA09REC | FB | | 300 | PS | INSURER-CODE=010 | +| 12 | ERROR-LOG | W99 | SHA10W98 | O | ZAN05REC | VB | | 200 | PS | + +※本実装では代表10ファイル(001〜010)で定義。本番z/OSでは全99ファイルに拡張予定。 +※エラーファイルの識別子はW99、DD名はSHA10W98。 +INSURER-CODE=000または011〜099はエラーとする。 + +### キー項目一覧 + +| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | +|----|-----------|---------------------|-------------------------------------------| +| 1 | RPT-DATA | なし | INSURER-CODEで振分け(001〜099) | + +### 使用モジュール一覧 + +| NO | 機能 | プログラムID | 使用COPY名 | +|----|------|-------------|-----------| +| 1 | 運用日付取得SUB | SUB01DAT | SHADATAC | +| 2 | メッセージ編集出力SUB | SUB02MSG | SHAMSGAC | +| 3 | ABEND処理SUB | SUB03END | SHAENDAC | + +--- + +## 処理詳細 + +``` +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.入出力ファイルのオープン + 入力R01、出力W01〜W10、エラーW99(DD名SHA10W98) + 1-6.R01を読み込む。(1100R01INNSOR)(1回目) + +2.主処理(2000MAJSOR)(R01を全て読み終えるまで繰り返す) + 2-1.INSURER-CODE判定(2100SPLITSOR) + EVALUATE INSURER-CODE(001〜099)で該当する出力ファイルにWRITE + 【出力レコード編集】 + SHA09RECのPREF-CODEにR01のPREF-CODEを設定 + SHA09RECのINSURER-CODEにR01のINSURER-CODEを設定 + SHA09RECのRPT-BODYにR01の本体部分(FILLER相当294B)を設定 + 2-2.W01〜W10のいずれかにWRITE + 2-3.R01を読み込む(1100R01INNSOR)(2件目以降) + 2-4.INSURER-CODEが001〜010の範囲外の場合、ERROR-LOG(W99/DD:SHA10W98)に出力 + +3.終了処理(3000STPSOR) + 3-1.入出力ファイルのクローズ(CLOSE WITH LOCKで出力ファイルを確定) + 3-2.入出力件数メッセージ出力 + 【メッセージ編集】 + メッセージ番号:6(入力件数メッセージ) + PARM1:'SHA10R01' + PARM2:入力件数 + 【メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:各出力ファイルDD名 + PARM2:各出力件数 + 【メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:'SHA10W98(ERROR-LOG)' + PARM2:エラー件数 + 3-3.終了メッセージ出力 + 【メッセージ編集】 + メッセージ番号:2(終了メッセージ) +``` + +--- + +## 出力レコード定義 + +### 出力ファイル1〜10(W01〜W10/INSURER-OUT-01〜10) + +SHA09REC.cpyに従う。300B固定長。 + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | PREF-CODE | R01のPREF-CODE | | +| 2 | INSURER-CODE | R01のINSURER-CODE | 001〜099 | +| 3 | RPT-BODY | R01のFILLER領域相当 | ファイル本体データ(294B) | + +### エラー出力ファイル(W99/ERROR-LOG、DD名:SHA10W98) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | ERR-CATEGORY | 01で固定 | | +| 2 | ERR-DETAIL | STRINGで編集 | エラー内容 | diff --git a/詳細設計書/詳細設計書_ZAN01CHK.md b/詳細設計書/詳細設計書_ZAN01CHK.md index 9f737a4..aa37450 100644 --- a/詳細設計書/詳細設計書_ZAN01CHK.md +++ b/詳細設計書/詳細設計書_ZAN01CHK.md @@ -1,3 +1,12 @@ +## 詳細設計書_ZAN01CHK.md (MARKDOWN, 5.8 KB) + +- **Format**: Markdown +- **Word Count**: 512 + +- Words: 512 | Chars: 3,580 + +### Content + # 詳細設計書 ## 基本情報 @@ -141,4 +150,4 @@ | No | 項目名 | 設定元 | 備考 | |----|--------|--------|------| | 1 | ERR-CATEGORY | 01で固定 | | -| 2 | ERR-DETAIL | STRINGで編集 | エラー内容 | +| 2 | ERR-DETAIL | STRINGで編集 | エラー内容 | \ No newline at end of file