Add Subsystem D (SHA01-10): social insurance subsystem + design-resource consistency fixes
- Add SHA01CVT-SHA10S10: all 10 programs, COPY books (13), binaries, design docs, resource usage lists, DDL schema_sha.sql - Add KYU01REC-KYU06REC COPY books (previously missing from git) - Fix design-code inconsistencies detected in audit: - SHA07KBR: remove dead SHACHKAC COPY (SUB04CHK never called) - SHA02MNC: 2020TYPSOR paragraph -> inline EVALUATE; SUB04CHK = PARM val - SHA05TWN: REVISED-TYPE values 'C'/'N' -> 'A'(定期決定)/'B'(月変) - SHA03MNP: 2010CALCSOR/2020WRTSOR -> inline implementation - SHA04TWO: remove GRADE-HISTORY from DB table list (not accessed) - SHA06TWM: add SALARYDB.EMP-MASTER to DB table list - SHA10S10: fix error file W99OUTFIL, 10+1 file count - Fix comment column alignment (Area A col 7) in SHA07KBR, SHA08SRT - Update KYU source/design docs: BOM removal, classification comment cleanup - Update README: Subsystem D added, program count 39
This commit is contained in:
@@ -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本**
|
||||
|
||||
## ディレクトリ構成
|
||||
|
||||
```
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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).
|
||||
@@ -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).
|
||||
@@ -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).
|
||||
@@ -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).
|
||||
@@ -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).
|
||||
@@ -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).
|
||||
@@ -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).
|
||||
@@ -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).
|
||||
@@ -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).
|
||||
@@ -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).
|
||||
@@ -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).
|
||||
@@ -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).
|
||||
@@ -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).
|
||||
@@ -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).
|
||||
@@ -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).
|
||||
@@ -0,0 +1,7 @@
|
||||
*
|
||||
* SUB04CHK 連絡領域(92B)
|
||||
*
|
||||
01 C01CHKPAR.
|
||||
03 C01CHKTYP PIC X(008).
|
||||
03 C01CHKDAT PIC X(080).
|
||||
03 C01CHKRRC PIC 9(004).
|
||||
@@ -0,0 +1,6 @@
|
||||
*
|
||||
* SUB01DAT 連絡領域(10B)
|
||||
*
|
||||
01 D01UBSPAR.
|
||||
03 D01FKICOD PIC S9(004) COMP.
|
||||
03 D01UBSUDATE PIC 9(008).
|
||||
@@ -0,0 +1,5 @@
|
||||
*
|
||||
* SUB03END 連絡領域(3B)
|
||||
*
|
||||
01 E01ABDPAR.
|
||||
03 E01ABDCOD PIC 9(003).
|
||||
@@ -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).
|
||||
@@ -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")
|
||||
);
|
||||
+1
-2
@@ -1,4 +1,4 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. KYU01CVT.
|
||||
*****************************************************************
|
||||
* システム名 : 給与計算システム *
|
||||
@@ -8,7 +8,6 @@
|
||||
* 処理概要 : CSV形式の社員マスタを固定長80Bに変換する *
|
||||
* 引用符内改行をINSPECT CONVERTINGで処理 *
|
||||
* 項目チェックはSUB04CHKで実施 *
|
||||
* プログラム分類: No.21 CSV→FB変換(改行あり) *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
|
||||
+1
-2
@@ -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更新 *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
|
||||
+1
-2
@@ -1,4 +1,4 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. KYU03AGG.
|
||||
*****************************************************************
|
||||
* システム名 : 給与計算システム *
|
||||
@@ -7,7 +7,6 @@
|
||||
* 作成日 : 2026-07-01 *
|
||||
* 処理概要 : JCL SORT済み欠勤データを社員単位に集約 *
|
||||
* 同一社員内の欠勤時間・回数を集計 *
|
||||
* プログラム分類: No.08 キーブレイク(集約) *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
|
||||
+1
-2
@@ -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+キーブレイク(同キー) *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
|
||||
+1
-2
@@ -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条件 *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
|
||||
+1
-2
@@ -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更新 *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
|
||||
+1
-2
@@ -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分割 *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
|
||||
+1
-2
@@ -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 *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
|
||||
+1
-2
@@ -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(複数ファイル結合) *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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→件数出力→終了メッセージ)
|
||||
@@ -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→件数出力→終了メッセージ)
|
||||
@@ -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→件数出力→終了メッセージ)
|
||||
@@ -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→件数出力→終了メッセージ)
|
||||
@@ -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→件数出力→終了メッセージ)
|
||||
@@ -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→件数出力→終了メッセージ)
|
||||
@@ -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→件数出力→終了メッセージ)
|
||||
@@ -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→件数出力→終了メッセージ)
|
||||
@@ -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→件数出力→終了メッセージ)
|
||||
@@ -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→件数出力→終了メッセージ)
|
||||
@@ -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 |
|
||||
@@ -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で編集 | エラー内容 |
|
||||
@@ -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 + エラー詳細) |
|
||||
@@ -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で編集 | エラー内容 |
|
||||
@@ -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) |
|
||||
@@ -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 + エラー理由) |
|
||||
@@ -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 理由) |
|
||||
@@ -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で編集 | エラー内容 |
|
||||
@@ -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) | |
|
||||
@@ -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で編集 | エラー内容 |
|
||||
@@ -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で編集 | エラー内容 |
|
||||
+10
-1
@@ -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で編集 | エラー内容 |
|
||||
Reference in New Issue
Block a user