Files
cobol-tna-system/詳細設計書/詳細設計書_SHA07KBR.md
qiuqiuqiu 71232af484 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
2026-07-15 20:32:51 +08:00

7.5 KiB
Raw Permalink Blame History

詳細設計書

基本情報

# 項目 内容
1 システム名 社会保険管理システム
2 プログラムID SHA07KBR
3 プログラム名 資格異動キーブレイク処理
4 PGMタイプ メイン
5 PGMパターン 331: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-NAMESALARYDB.EMP-MASTERとJOIN, CHG-DATE, CHG-TYPE, INSURER-CODE, PREV-INSURER, REASON
    ORDER BYEMP-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-IDHIGH-VALUES)はスキップ
    2-1-3.主キーブレイク時はサマリレコード出力(REC-TYPE='S'
      設定内容:前回従業員の最終保険者状態をサマリとして出力
      PREV-INSURER=前回レコードのINSURER-CODE、INSURER-CODESPACE
      EMP-ID=前回従業員ID
  2-2.INSURER-CODE異キーブレイク判定(2200DIFKBSOR
    2-2-1.WS-PREV-INSURER(前回保険者コード)とDBV-INSURER-CODE(今回保険者コード)が異なる場合、異キーブレイク発生
    2-2-2.異キーブレイク時はサマリレコード出力(REC-TYPE='S'
      設定内容:前回保険者→今回保険者の変遷をサマリ
      PREV-INSURERWS-PREV-INSURER
      INSURER-CODEDBV-INSURER-CODE
      EMP-IDDBV-EMP-ID
      CHG-DATEDBV-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'
    PARM2FETCH件数
    【メッセージ編集】
    メッセージ番号:7(出力件数メッセージ)
    PARM1'SHA07W01(CHG-SUMMARY)'
    PARM2:サマリ件数
    【メッセージ編集】
    メッセージ番号:7(出力件数メッセージ)
    PARM1'SHA07W02(CHG-DETAIL)'
    PARM2:明細件数
    【メッセージ編集】
    メッセージ番号:7(出力件数メッセージ)
    PARM1'SHA07W03(ERROR-LOG)'
    PARM2:エラー件数
  4-5.終了メッセージ出力
    【メッセージ編集】
    メッセージ番号:2(終了メッセージ)

出力レコード定義

出力ファイル1W01/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

出力ファイル2W02/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

出力ファイル3W03/ERROR-LOG

No 項目名 設定元 備考
1 ERR-CATEGORY 01で固定
2 ERR-DETAIL STRINGで編集 エラー内容