- 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
7.5 KiB
7.5 KiB
詳細設計書
基本情報
| # | 項目 | 内容 |
|---|---|---|
| 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で編集 | エラー内容 |