Files
cobol-tna-system/src/SHA07KBR.cbl
T

490 lines
22 KiB
COBOL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
SELECT W02OUTFIL ASSIGN TO EXTERNAL SHA07W02
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
SELECT W03OUTFIL ASSIGN TO EXTERNAL SHA07W03
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
*
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).
03 WS-PAD-CHAR PIC X(001) VALUE SPACE.
03 WS-FILE-STATUS PIC X(002).
*
*****************************************************************
* 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.