Files
cobol-tna-system/詳細設計書/詳細設計書_SHA04TWO.md
T
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.2 KiB
Raw Blame History

詳細設計書

基本情報

# 項目 内容
1 システム名 社会保険管理システム
2 プログラムID SHA04TWO
3 プログラム名 事業所保険者マッチング処理
4 PGMタイプ メイン
5 PGMパターン マッチング(1:1→1:1 2段階)
6 機能概要 被保険者データに対し、事業所マスタ(SHA02R02)と保険者マスタ(SHA03R03)の2段階1:1マッチングを実施する。
7 第1段階:事業所番号(OFFICE-NO)で事業所マスタとマッチング
8 第2段階:保険者コード(INSURER-CODE)で保険者マスタとマッチング
9 両段階ともマッチした場合GRADED-LISTに出力、いずれかで不一致の場合はUNMATCHED-LISTに出力

※PGMタイプ:メイン、サブ ※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新

前提条件

NO 対象ファイル 条件
1 ファイルR01INSURED-DATA 事業所番号(OFFICE-NO)+社員番号(EMP-ID)の昇順ソート済
2 ファイルR02OFFICE-MST 事業所番号(OFFICE-NO)の昇順ソート済、重複なし
3 ファイルR03INSURER-MST 保険者コード(INSURER-CODE)の昇順ソート済、重複なし

使用ファイル一覧

NO 使用ファイル/DB名 識別子 DD名 I/O COPY群 形式 ブロック レコード長 媒体 備考
1 INSURED-DATA R01 SHA04R01 I SHA01REC FB 200 PS 被保険者データ(SHA01CVT出力)
2 OFFICE-MST R02 SHA04R02 I 自前(80B) FB 80 PS 事業所マスタ
3 INSURER-MST R03 SHA04R03 I 自前(80B) FB 80 PS 保険者マスタ
4 GRADED-LIST W01 SHA04W01 O SHA04REC FB 200 PS 両段階マッチ成功レコード
5 UNMATCHED-LIST W02 SHA04W02 O 自前(200B) FB 200 PS いずれかの段階で不一致レコード
6 ERROR-LOG W03 SHA04W03 O ZAN05REC VB 200 PS エラー退避
7 INSURANCEDB DB I DB2 DASD DB2: INSURED-MASTER

キー項目一覧

NO ファイル名 ソート条件(キー項目) キー条件(マッチング/キーブレイク)
1 ファイルR01 OFFICE-NO + EMP-ID OFFICE-NO(第1段階)
2 ファイルR02 OFFICE-NO OFFICE-NO(第1段階, 1:1
3 ファイルR03 INSURER-CODE INSURER-CODE(第2段階, 1:1

使用モジュール一覧

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.R02(OFFICE-MST)を全件読み込み、内部テーブル(OFFICE-TBL)に格納する。
    (1110R02LDASOR)
  1-7.R03INSURER-MST)を全件読み込み、内部テーブル(INSURER-TBL)に格納する。
    (1120R03LDASOR)
  1-8.DB接続
    EXEC SQL CONNECT TO 'data/INSURANCEDB.db'
  1-9.R01を読み込む。(1100R01INNSOR)(1回目)

2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
  2-1.第1段階マッチング(OFFICE-NO vs OFFICE-TBL):1:1マッチング(2010STG1SOR
    2-1-1.OFFICE-TBLをOFFICE-NOで線形探索
    2-1-2.マッチ成功→第2段階へ
    2-1-3.マッチ失敗→UNMATCHED-LISTに出力(STATUS='1'=事業所未達)
  2-2.第2段階マッチング(INSURER-CODE vs INSURER-TBL):1:1マッチング(2020STG2SOR
    2-2-1.INSURER-TBLをINSURER-CODEで線形探索
    2-2-2.マッチ成功→GRADED-LISTに出力
    2-2-3.マッチ失敗→UNMATCHED-LISTに出力(STATUS='2'=保険者未達)
   2-3.DB2整合性検証(2030W01OUTSOR内でインライン実装)
     2-3-1.GRADED-LIST出力時にINSURED-MASTERをSELECTし、
          履歴整合性を確認
     2-3-2.SQLCODE異常→ERROR-LOGに出力
  2-4.R01を読み込む。(1100R01INNSOR)(2件目以降)

3.終了処理(3000STPSOR)
  3-1.入出力ファイルのクローズ
  3-2.入出力件数出力メッセージ出力
    【入力メッセージ編集】
    メッセージ番号:6(入力件数メッセージ)
    PARM1:当該入力ファイルのDD名
    PARM2:当該入力ファイルの件数
    【出力メッセージ編集】
    メッセージ番号:7(出力件数メッセージ)
    PARM1:当該出力ファイルのDD名
    PARM2:当該出力ファイルの件数
  3-3.終了メッセージ出力
    【メッセージ編集】
    メッセージ番号:2(終了メッセージ)

出力レコード定義

出力ファイル1W01/GRADED-LIST

SHA04REC.cpyに従う。200B固定長。

No 項目名 設定元 備考
1 EMP-ID R01.EMP-ID
2 EMP-NAME R01.EMP-NAME
3 OFFICE-NO R01.OFFICE-NO
4 OFFICE-NAME OFFICE-TBL.OFFICE-NAME 第1段階マッチ結果
5 PREF-CODE OFFICE-TBL.PREF-CODE 第1段階マッチ結果
6 INSURER-CODE R01.INSURER-CODE
7 INSURER-NAME INSURER-TBL.INSURER-NAME 第2段階マッチ結果
8 FILLER 初期値

出力ファイル2W02/UNMATCHED-LIST

自前レイアウト(200B固定長)。

No 項目名 属性 設定元 備考
1 EMP-ID 9(8) R01.EMP-ID
2 EMP-NAME X(40) R01.EMP-NAME
3 OFFICE-NO X(4) R01.OFFICE-NO
4 OFFICE-NAME X(40) OFFICE-TBL.OFFICE-NAME 未達時はSPACE
5 PREF-CODE 9(2) OFFICE-TBL.PREF-CODE 未達時はZERO
6 INSURER-CODE X(4) R01.INSURER-CODE
7 INSURER-NAME X(60) INSURER-TBL.INSURER-NAME 未達時はSPACE
8 STATUS X(1) 固定 '1'=事業所未達 / '2'=保険者未達
9 FILLER X(41) 初期値

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

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