# 詳細設計書 ## 基本情報 | # | 項目 | 内容 | |---|------|------| | 1 | システム名 | 社会保険管理システム | | 2 | プログラムID | SHA07KBR | | 3 | プログラム名 | 資格異動キーブレイク処理 | | 4 | PGMタイプ | メイン | | 5 | PGMパターン | 33(1:N+異キーキーブレイク) | | 6 | 機能概要 | DB2 QUALIFICATION-CHANGESから資格異動データをFETCHし、従業員ごと(1:N)かつ保険者コード変更時(異キー)にキーブレイクしてサマリ・明細を出力する。 | | 7 | | 同一従業員内で保険者コードが変更された時点でサマリレコード(REC-TYPE=S)を出力、全レコードを明細レコード(REC-TYPE=D)として出力する。 | | 8 | | 各出力はSHA07REC書式(200B固定長)に従う。エラーはERROR-LOG(VB)に出力する。 | ※PGMタイプ:メイン、サブ ※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 ### 前提条件 | NO | 対象ファイル | 条件 | |----|-------------|------| | 1 | QUALIFICATION-CHANGES(DB2) | EMP-ID, CHG-DATE昇順にSELECTする。ソートはSQLのORDER BYで担保する。 | ### 使用ファイル一覧 | NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | |----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| | 1 | QUALIFICATION-CHANGES(DB2) | — | — | I | なし | — | — | — | DB2 | DECLARE CURSOR / FETCH | | 2 | CHG-SUMMARY | W01 | SHA07W01 | O | SHA07REC | FB | | 200 | PS | REC-TYPE='S' | | 3 | CHG-DETAIL | W02 | SHA07W02 | O | SHA07REC | FB | | 200 | PS | REC-TYPE='D' | | 4 | ERROR-LOG | W03 | SHA07W03 | O | ZAN05REC | VB | | 200 | PS | エラー退避 | ### キー項目一覧 | NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | |----|-----------|---------------------|-------------------------------------------| | 1 | QUALIFICATION-CHANGES | EMP-ID昇順, CHG-DATE昇順 | 1:Nマッチング(従業員1件に対しN件の異動) | | 2 | 同上 | INSURER-CODE(異キー) | 従業員内で保険者コード変更時にキーブレイク | ### 使用モジュール一覧 | NO | 機能 | プログラムID | 使用COPY名 | |----|------|-------------|-----------| | 1 | 運用日付取得SUB | SUB01DAT | SHADATAC | | 2 | メッセージ編集出力SUB | SUB02MSG | SHAMSGAC | | 3 | ABEND処理SUB | SUB03END | SHAENDAC | --- ## 処理詳細 ``` 1.初期処理(1000ITTSOR) 1-1.開始メッセージ出力 【メッセージ編集】 メッセージ番号:1(開始メッセージ) 1-2.コンパイル日時出力 【メッセージ編集】 メッセージ番号:33(コンパイル日時) PARM1:コンパイル日時 PARM2:'COMPILED' 1-3.ワークエリアの初期化 1-4.運用日付取得SUB(SUB01DAT)により運用日を取得する。 復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。 【メッセージ編集】 メッセージ番号:5(サブエラー) PARM1:'SUB01DAT' PARM2:復帰コード 【ABEND処理SUB】 ABENDコード:999 1-5.出力ファイルのオープン 1-6.DB接続(EXEC SQL CONNECT) 1-7.DECLARE CURSOR文でQUALIFICATION-CHANGESをSELECT SELECT対象:CHG-ID, EMP-ID, EMP-NAME(SALARYDB.EMP-MASTERとJOIN), CHG-DATE, CHG-TYPE, INSURER-CODE, PREV-INSURER, REASON ORDER BY:EMP-ID, CHG-DATE 1-8.FETCHで1件目を取得し、WS-PREV-EMP-ID・WS-PREV-INSURERを初期設定(1100FETCSOR) 2.主処理(2000MAJSOR)(FETCH終了まで繰り返す) 2-1.EMP-IDキーブレイク判定(2100KEYBRSOR) 2-1-1.WS-PREV-EMP-ID(前回従業員ID)とDBV-EMP-ID(今回従業員ID)が異なる場合、主キーブレイク発生 2-1-2.初回(WS-PREV-EMP-ID=HIGH-VALUES)はスキップ 2-1-3.主キーブレイク時はサマリレコード出力(REC-TYPE='S') 設定内容:前回従業員の最終保険者状態をサマリとして出力 PREV-INSURER=前回レコードのINSURER-CODE、INSURER-CODE=SPACE EMP-ID=前回従業員ID 2-2.INSURER-CODE異キーブレイク判定(2200DIFKBSOR) 2-2-1.WS-PREV-INSURER(前回保険者コード)とDBV-INSURER-CODE(今回保険者コード)が異なる場合、異キーブレイク発生 2-2-2.異キーブレイク時はサマリレコード出力(REC-TYPE='S') 設定内容:前回保険者→今回保険者の変遷をサマリ PREV-INSURER=WS-PREV-INSURER INSURER-CODE=DBV-INSURER-CODE EMP-ID=DBV-EMP-ID CHG-DATE=DBV-CHG-DATE REASON='INSURER CHANGED' 2-3.明細レコード出力(2300DETAILSOR) 全FETCHレコードを明細出力(REC-TYPE='D') SHA07RECの全項目をDBV-から転記 2-4.WS-PREV-EMP-ID、WS-PREV-INSURERに今回値を設定 2-5.FETCHで次件取得(1100FETCSOR) 3.最終グループ処理(2500LSTKBRSOR) 3-1.最終従業員グループのサマリレコードを出力 3-2.最終詳細レコードを出力 4.終了処理(3000STPSOR) 4-1.CLOSE CURSOR 4-2.DISCONNECT DB 4-3.出力ファイルのクローズ 4-4.出力件数メッセージ出力 【メッセージ編集】 メッセージ番号:6(入力件数メッセージ) PARM1:'DB2-QUALIFICATION-CHANGES' PARM2:FETCH件数 【メッセージ編集】 メッセージ番号:7(出力件数メッセージ) PARM1:'SHA07W01(CHG-SUMMARY)' PARM2:サマリ件数 【メッセージ編集】 メッセージ番号:7(出力件数メッセージ) PARM1:'SHA07W02(CHG-DETAIL)' PARM2:明細件数 【メッセージ編集】 メッセージ番号:7(出力件数メッセージ) PARM1:'SHA07W03(ERROR-LOG)' PARM2:エラー件数 4-5.終了メッセージ出力 【メッセージ編集】 メッセージ番号:2(終了メッセージ) ``` --- ## 出力レコード定義 ### 出力ファイル1(W01/CHG-SUMMARY) | No | 項目名 | 設定元 | 備考 | |----|--------|--------|------| | 1 | CHG-ID | DBV-CHG-ID | 最終レコードのCHG-ID | | 2 | EMP-ID | DBV-EMP-ID | 従業員ID | | 3 | EMP-NAME | DBV-EMP-NAME | 従業員名 | | 4 | CHG-DATE | DBV-CHG-DATE | 異動日 | | 5 | CHG-TYPE | '99'固定 | サマリ識別 | | 6 | INSURER-CODE | 異キー:DBV-INSURER-CODE / 主キー:SPACE | 主KB時はSPACE | | 7 | PREV-INSURER | WS-PREV-INSURER | 変更前保険者コード | | 8 | REASON | 'INSURER CHANGED' / SPACE | 異キー時のみ設定 | | 9 | REC-TYPE | 'S'固定 | サマリ識別子 | | 10 | FILLER | SPACE | | ### 出力ファイル2(W02/CHG-DETAIL) | No | 項目名 | 設定元 | 備考 | |----|--------|--------|------| | 1 | CHG-ID | DBV-CHG-ID | | | 2 | EMP-ID | DBV-EMP-ID | | | 3 | EMP-NAME | DBV-EMP-NAME | | | 4 | CHG-DATE | DBV-CHG-DATE | | | 5 | CHG-TYPE | DBV-CHG-TYPE | | | 6 | INSURER-CODE | DBV-INSURER-CODE | | | 7 | PREV-INSURER | DBV-PREV-INSURER | | | 8 | REASON | DBV-REASON | | | 9 | REC-TYPE | 'D'固定 | | | 10 | FILLER | SPACE | | ### 出力ファイル3(W03/ERROR-LOG) | No | 項目名 | 設定元 | 備考 | |----|--------|--------|------| | 1 | ERR-CATEGORY | 01で固定 | | | 2 | ERR-DETAIL | STRINGで編集 | エラー内容 |