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:
qiuqiuqiu
2026-07-15 20:32:51 +08:00
parent 4a244a47ce
commit 71232af484
72 changed files with 8028 additions and 20 deletions
+1 -2
View File
@@ -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
View File
@@ -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
View File
@@ -1,4 +1,4 @@
IDENTIFICATION DIVISION.
IDENTIFICATION DIVISION.
PROGRAM-ID. KYU03AGG.
*****************************************************************
* システム名 : 給与計算システム *
@@ -7,7 +7,6 @@
* 作成日 : 2026-07-01 *
* 処理概要 : JCL SORT済み欠勤データを社員単位に集約 *
* 同一社員内の欠勤時間・回数を集計 *
* プログラム分類: No.08 キーブレイク(集約) *
*****************************************************************
* 更新履歴 *
*---------------------------------------------------------------*
+1 -2
View File
@@ -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
View File
@@ -1,4 +1,4 @@
IDENTIFICATION DIVISION.
IDENTIFICATION DIVISION.
PROGRAM-ID. KYU05DED.
*****************************************************************
* システム名 : 給与計算システム *
@@ -9,7 +9,6 @@
* 社会保険料・住民税を計算しSALARY-NET出力 *
* TAX-TABLEDB2 SELECT ... BETWEEN *
* INSURANCE-TABLESEARCH ALL)を参照 *
* プログラム分類: No.23 SELECT条件 *
*****************************************************************
* 更新履歴 *
*---------------------------------------------------------------*
+1 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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(複数ファイル結合) *
*****************************************************************
* 更新履歴 *
*---------------------------------------------------------------*
+482
View File
@@ -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-DATA200B 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-LOGVB *
*****************************************************************
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.
+447
View File
@@ -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-INSURANCE200B 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-LOGVB *
*****************************************************************
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.
+409
View File
@@ -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-INSURANCE200B 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-DETAIL300B 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-LOGVB *
*****************************************************************
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.
+543
View File
@@ -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-DATA200B 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-MST80B 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-MST80B 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-LIST200B 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-LIST200B 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-LOGVB *
*****************************************************************
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.
+459
View File
@@ -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-MONTHLY200B 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-TBL80B 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-GRADE200B 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-LOGVB *
*****************************************************************
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.
+561
View File
@@ -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-INSURANCE200B 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-RULES80B 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-RESULT300B 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-LOGVB *
*****************************************************************
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.
+480
View File
@@ -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-SUMMARY200B FB *
*****************************************************************
FD W01OUTFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS F.
01 W01OUTREC.
COPY SHA07REC REPLACING ==(A)== BY ==W01==.
*
*****************************************************************
* W02: CHG-DETAIL200B FB *
*****************************************************************
FD W02OUTFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS F.
01 W02OUTREC.
COPY SHA07REC REPLACING ==(A)== BY ==W02==.
*
*****************************************************************
* W03: ERROR-LOGVB *
*****************************************************************
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.
+359
View File
@@ -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-LIST200B FB *
*****************************************************************
FD R01INNFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS F.
01 R01INNREC.
COPY SHA04REC REPLACING ==(A)== BY ==R01==.
*
*****************************************************************
* SD: SORTWORK200B 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-DATA300B FB *
*****************************************************************
FD W01OUTFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS F.
01 W01OUTREC.
COPY SHA08REC REPLACING ==(A)== BY ==W01==.
*
*****************************************************************
* W02: ERROR-LOGVB *
*****************************************************************
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.
+997
View File
@@ -0,0 +1,997 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. SHA09S25.
*****************************************************************
* システム名 : 社会保険管理システム *
* プログラムID : SHA09S25 *
* プログラム名 : 都道府県支部別分割出力処理 *
* 作成日 : 2026-07-11 *
* 処理概要 : RPT-DATAをPREF-CODE01〜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-DATA300B 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-01300B 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-02300B 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-03300B 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-04300B 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-05300B 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-06300B 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-07300B 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-08300B 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-09300B 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-10300B 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-11300B 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-12300B 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-13300B 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-14300B 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-15300B 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-16300B 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-17300B 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-18300B 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-19300B 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-20300B 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-21300B 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-22300B 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-23300B 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-24300B 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-25300B 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-LOGVB *
*****************************************************************
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.
+479
View File
@@ -0,0 +1,479 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. SHA10S10.
*****************************************************************
* システム名 : 社会保険管理システム *
* プログラムID : SHA10S10 *
* プログラム名 : 保険者別分割出力処理 *
* 作成日 : 2026-07-11 *
* 処理概要 : RPT-DATAをINSURER-CODE0199)で判定 *
* し、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.