Files
cobol-tna-system/詳細設計書/詳細設計書_SHA02MNC.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

168 lines
7.0 KiB
Markdown
Raw Permalink 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.
# 詳細設計書
## 基本情報
| # | 項目 | 内容 |
|---|------|------|
| 1 | システム名 | 社会保険管理システム |
| 2 | プログラムID | SHA02MNC |
| 3 | プログラム名 | 従業員保険情報統合処理 |
| 4 | PGMタイプ | メイン |
| 5 | PGMパターン | 18M:N→M件マッチング) |
| 6 | 機能概要 | DB2 EMP-MASTERSALARYDB)の従業員情報とINSURANCE-RATESの標準報酬等級テーブルをマッチングし、 |
| 7 | | 従業員単位(M件)に統合したEMP-INSURANCEレコードを出力する。 |
| 8 | | SEARCH/内部表を用いた等級判定により、標準報酬月額・等級コードを付与する。 |
※PGMタイプ:メイン、サブ
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
### 前提条件
| NO | 対象ファイル/DB | 条件 |
|----|---------------|------|
| 1 | DB2 INSURANCE-RATES | EFFECTIVE-FROMEFFECTIVE-TOに該当月が含まれること |
| 2 | DB2 EMP-MASTER (SALARYDB) | 社員番号(EMP-ID)昇順ソート(DB2 ORDER BY |
### 使用ファイル一覧
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
| 1 | EMP-INSURANCE | W01 | SHA02W01 | O | SHA02REC | FB | | 200 | PS | 従業員保険情報(M件) |
| 2 | ERROR-LOG | W02 | SHA02W02 | O | ZAN05REC | VB | | 200 | PS | エラー退避 |
| 3 | INSURANCEDB | DB | — | I | — | DB2 | — | — | DASD | DB2: INSURANCE-RATES |
| 4 | SALARYDB (参照) | DB | — | I | — | DB2 | — | — | DASD | DB2: EMP-MASTER(クロススキーマ) |
### キー項目一覧
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|----|-----------|---------------------|-------------------------------------------|
| 1 | EMP-MASTER | EMP-ID | なし(主処理は1件ずつFETCH) |
| 2 | INSURANCE-RATES | GRADE-CODE | MONTHLY-FROMMONTHLY-TOにBASE-SALARYが含まれること(範囲検索) |
### 使用モジュール一覧
| NO | 機能 | プログラムID | 使用COPY名 |
|----|------|-------------|-----------|
| 1 | 運用日付取得SUB | SUB01DAT | SHADATAC |
| 2 | メッセージ編集出力SUB | SUB02MSG | SHAMSGAC |
| 3 | ABEND処理SUB | SUB03END | SHAENDAC |
| 4 | PARM検証SUB | SUB04CHK | SHACHKAC |
---
## 処理詳細
```
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.PARM取得(YEARMONTH
1-6.DB接続
EXEC SQL CONNECT TO 'data/INSURANCE.db'
1-7.INSURANCE-RATES内部表LOAD1200RATELDASOR
DECLARE C1 CURSOR FOR
SELECT GRADE-CODE, MONTHLY-FROM, MONTHLY-TO,
HEALTH-RATE, PENSION-RATE
FROM INSURANCE-RATES
WHERE EFFECTIVE-FROM <= :WRK-YEAR-MONTH
AND EFFECTIVE-TO >= :WRK-YEAR-MONTH
ORDER BY GRADE-CODE
OPEN C1
PERFORM UNTIL SQLCODE≠0
FETCH C1 INTO :DBV-xxx
MOVE TO WRK-INS-RATES(WS-COUNT)
ADD 1 TO WS-COUNT
END-PERFORM
CLOSE C1
1-8.EMP-MASTERカーソル宣言・OPEN・初回FETCH
DECLARE C2 CURSOR FOR
SELECT EMP-ID, EMP-NAME, DEPT-CODE, BASE-SALARY
FROM SALARYDB.EMP-MASTER
ORDER BY EMP-ID
OPEN C2
FETCH C2 INTO :DBV-xxx1300EMPFETCSOR
1-9.出力ファイルのオープン
2.主処理(2000MAJSOR)(EMP-MASTERを全て読み終えるまで下記を繰り返す)
2-1.内部表検索(2010SRCHSOR
SEARCH(線形探索)でWRK-INS-RATESから
WRK-MONTHLY-FROM <= DBV-BASE-SALARY
かつ WRK-MONTHLY-TO >= DBV-BASE-SALARY
を満たすGRADE-CODEを特定する。
該当なし→ERROR-LOG出力(W02)→次従業員へ
2-2.種別判定(2000MAJSOR内でインライン実装)
DEPT-CODEによりEVALUATEでHEALTH-INS-TYPE/PENSION-TYPEを判定
DEPT-CODE 01-10HEALTH-INS-TYPE='1' PENSION-TYPE='1'
DEPT-CODE 11-20HEALTH-INS-TYPE='2' PENSION-TYPE='1'
DEPT-CODE 21-30HEALTH-INS-TYPE='1' PENSION-TYPE='2'
上記以外:HEALTH-INS-TYPE='9' PENSION-TYPE='9'
2-3.INSURER-CODE設定
簡易判定:DEPT-CODEにより設定(01台→'0001', 11台→'0002', 21台→'0003'
2-4.W01出力
MOVE DBV-xxx + 検索結果 + 種別判定結果 → W01OUTREC
WRITE W01OUTREC
2-5.次従業員FETCH1300EMPFETCSOR)(2件目以降)
3.終了処理(3000STPSOR
3-1.カーソルクローズ
CLOSE C2
3-2.出力ファイルのクローズ
3-3.入出力件数出力メッセージ出力
【入力メッセージ編集】
メッセージ番号:6(入力件数メッセージ)
PARM1'EMP-MASTER'
PARM2CUN-DB-EMP
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'SHA02W01'
PARM2CUN-W01OUT
PARM1'SHA02W02'
PARM2CUN-W02OUT
3-4.終了メッセージ出力
【メッセージ編集】
メッセージ番号:2(終了メッセージ)
```
---
## 出力レコード定義
### 出力ファイル1W01/EMP-INSURANCE
SHA02REC.cpyに従う。200B固定長。
| No | 項目名 | 属性 | 設定元 | 備考 |
|----|--------|------|--------|------|
| 1 | EMP-ID | 9(8) | DBV-EMP-IDEMP-MASTER | |
| 2 | EMP-NAME | X(40) | DBV-EMP-NAMEEMP-MASTER | |
| 3 | DEPT-CODE | 9(2) | DBV-DEPT-CODEEMP-MASTER | |
| 4 | BASE-SALARY | 9(9) | DBV-BASE-SALARYEMP-MASTER | |
| 5 | MONTHLY-AMOUNT | 9(9) | INSURANCE-RATES該当レコードの範囲中央値 | 標準報酬月額 |
| 6 | GRADE-CODE | 9(2) | INSURANCE-RATES該当レコードの等級コード | SEARCH結果 |
| 7 | HEALTH-INS-TYPE | X(1) | DEPT-CODEによる判定結果 | '1'=協会けんぽ / '2'=組合健保 / '9'=その他 |
| 8 | PENSION-TYPE | X(1) | DEPT-CODEによる判定結果 | '1'=厚生年金 / '2'=共済 / '9'=その他 |
| 9 | INSURER-CODE | X(4) | DEPT-CODEによる簡易設定 | 事業所所属保険者 |
| 10 | FILLER | X(124) | LOW-VALUES固定 | |
### 出力ファイル2W02/ERROR-LOG
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | ERR-CATEGORY | 01で固定 | |
| 2 | ERR-DETAIL | STRINGで編集 | エラー内容(EMP-ID + エラー詳細) |