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
This commit is contained in:
qiuqiuqiu
2026-07-15 20:32:51 +08:00
parent 4a244a47ce
commit 71232af484
72 changed files with 8028 additions and 20 deletions
@@ -0,0 +1,48 @@
# SHA01CVT 使用資源一覧
## プログラム概要
- **プログラムID**: SHA01CVT
- **プログラム名**: 被保険者資格データ変換処理
- **処理概要**: ASCII CSVの被保険者資格データをINSPECT CONVERTINGでEBCDIC固定長に変換する。半角桁数チェックを内部処理として実施。
## 使用ファイル
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|------|---------------|------|-------------|-----------|--------|
| SHA01R01 | INS-CSV-ASCII | 順編成 | F (固定長) | 500B | なし(自前定義) |
| SHA01W01 | INSURED-DATA | 順編成 | F (固定長) | 200B | SHA01REC |
| SHA01W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC |
## 使用COPY句
| COPY句 | 用途 | 使用箇所 |
|--------|------|---------|
| SHA01REC | INSURED-DATA レコード定義(W01出力ファイル) | FILE SECTION |
| ZAN05REC | エラーログレコード定義(W02出力ファイル) | FILE SECTION |
| SHADATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
| SHAMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
| SHAENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
| SHACHKAC | 項目チェックサブPGM連絡領域 | WORKING-STORAGE |
## 使用サブプログラム
| サブPGM | 役割 | CALL箇所 |
|---------|------|---------|
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
| SUB03END | ABEND処理 | 9999ABDSOR |
| SUB04CHK | 日付/数値妥当性チェック | 2020HALFSOR |
## 使用DB2テーブル
なし(DB操作なし)
## 処理フロー
1. 初期処理(開始メッセージ→コンパイル日時出力→ワーク初期化→SUB01DAT運用日取得→OPEN→初回読込)
2. 主処理:R01終了まで繰り返し
- CSV分解(UNSTRINGでカンマ区切り→各項目)
- 半角桁数チェック(氏名カナ20/被保険者番号10/事業所番号4/日付妥当性/数値妥当性→エラーはW02出力)
- ASCII→EBCDIC変換(変換テーブルで各バイト変換→INSURED-DATAレコードにMOVE
- W01(INSURED-DATA)出力
- R01次件READ
3. 終了処理(CLOSE→件数出力→終了メッセージ)
@@ -0,0 +1,51 @@
# SHA02MNC 使用資源一覧
## プログラム概要
- **プログラムID**: SHA02MNC
- **プログラム名**: 従業員保険情報統合処理
- **処理概要**: DB2 EMP-MASTERとINSURANCE-RATESをマッチングし、従業員単位に統合出力する(M:N→M件マッチング)。
## 使用ファイル
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|------|---------------|------|-------------|-----------|--------|
| SHA02W01 | EMP-INSURANCE | 順編成 | F (固定長) | 200B | SHA02REC |
| SHA02W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC |
## 使用COPY句
| COPY句 | 用途 | 使用箇所 |
|--------|------|---------|
| SHA02REC | EMP-INSURANCE レコード定義(W01出力ファイル) | FILE SECTION |
| ZAN05REC | エラーログレコード定義(W02出力ファイル) | FILE SECTION |
| SQLCA | SQL通信領域 | WORKING-STORAGE |
| SHADATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
| SHAMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
| SHAENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
| SHACHKAC | 項目チェックサブPGM連絡領域 | WORKING-STORAGE |
## 使用サブプログラム
| サブPGM | 役割 | CALL箇所 |
|---------|------|---------|
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
| SUB03END | ABEND処理 | 9999ABDSOR |
| SUB04CHK | PARM検証 | 1000ITTSOR |
## 使用DB2テーブル
| DB名 | テーブル名 | I/O | 備考 |
|------|-----------|:---:|------|
| SALARYDB | EMP-MASTER | I | 従業員マスタ(SELECT |
| INSURANCEDB | INSURANCE-RATES | I | 料率テーブル(内部表LOAD) |
## 処理フロー
1. 初期処理(開始メッセージ→SUB01DAT運用日取得→PARM取得→DB接続→INSURANCE-RATES内部表LOAD→EMP-MASTER CURSOR OPEN/初回FETCH→出力ファイルOPEN
2. 主処理:EMP-MASTER終了まで繰り返し
- 内部表線形探索(BASE-SALARYに合致するGRADE-CODE特定→該当なしはW02出力)
- 種別判定(DEPT-CODEでHEALTH-INS-TYPE/PENSION-TYPE判定)
- INSURER-CODE設定
- W01(EMP-INSURANCE)出力
- 次従業員FETCH
3. 終了処理(CLOSE CURSOR→ファイルCLOSE→件数出力→終了メッセージ)
@@ -0,0 +1,50 @@
# SHA03MNP 使用資源一覧
## プログラム概要
- **プログラムID**: SHA03MNP
- **プログラム名**: 保険料計算明細出力処理
- **処理概要**: EMP-INSURANCE×INSURANCE-RATESの直積組合せにより保険料計算明細を出力する(M:N→M×N件出力)。
## 使用ファイル
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|------|---------------|------|-------------|-----------|--------|
| SHA03R01 | EMP-INSURANCE | 順編成 | F (固定長) | 200B | SHA02REC |
| SHA03W01 | INS-DETAIL | 順編成 | F (固定長) | 300B | SHA03REC |
| SHA03W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC |
## 使用COPY句
| COPY句 | 用途 | 使用箇所 |
|--------|------|---------|
| SHA02REC | EMP-INSURANCE レコード定義(R01入力ファイル) | FILE SECTION |
| SHA03REC | INS-DETAIL レコード定義(W01出力ファイル) | FILE SECTION |
| ZAN05REC | エラーログレコード定義(W02出力ファイル) | FILE SECTION |
| SQLCA | SQL通信領域 | WORKING-STORAGE |
| SHADATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
| SHAMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
| SHAENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
## 使用サブプログラム
| サブPGM | 役割 | CALL箇所 |
|---------|------|---------|
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
| SUB03END | ABEND処理 | 9999ABDSOR |
## 使用DB2テーブル
| DB名 | テーブル名 | I/O | 備考 |
|------|-----------|:---:|------|
| INSURANCEDB | INSURANCE-RATES | I | 料率取得(内部表LOAD |
## 処理フロー
1. 初期処理(開始メッセージ→SUB01DAT運用日取得→PARM取得→DB接続→INSURANCE-RATES内部表LOAD→OPEN→R01初回READ
2. 主処理:R01終了まで繰り返し
- 直積組合せ生成:従業員×全RATESエントリ
- 健康保険: HEALTH-PREMIUM = MONTHLY-AMOUNT × HEALTH-RATE (ROUNDED)
- 厚生年金: PENSION-PREMIUM = MONTHLY-AMOUNT × PENSION-RATE (ROUNDED)
- W01(INS-DETAIL)出力
- R01次件READ
3. 終了処理(CLOSE→件数出力→終了メッセージ)
@@ -0,0 +1,53 @@
# SHA04TWO 使用資源一覧
## プログラム概要
- **プログラムID**: SHA04TWO
- **プログラム名**: 事業所保険者マッチング処理
- **処理概要**: INSURED-DATAをOFFICE-MST/INSURER-MSTの2段階で1:1マッチングし、GRADED-LIST/UNMATCHED-LISTを出力する。
## 使用ファイル
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|------|---------------|------|-------------|-----------|--------|
| SHA04R01 | INSURED-DATA | 順編成 | F (固定長) | 200B | SHA01REC |
| SHA04R02 | OFFICE-MST | 順編成 | F (固定長) | 80B | なし(自前定義) |
| SHA04R03 | INSURER-MST | 順編成 | F (固定長) | 80B | なし(自前定義) |
| SHA04W01 | GRADED-LIST | 順編成 | F (固定長) | 200B | SHA04REC |
| SHA04W02 | UNMATCHED-LIST | 順編成 | F (固定長) | 200B | なし(自前定義) |
| SHA04W03 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC |
## 使用COPY句
| COPY句 | 用途 | 使用箇所 |
|--------|------|---------|
| SHA01REC | INSURED-DATA レコード定義(R01入力ファイル) | FILE SECTION |
| SHA04REC | GRADED-LIST レコード定義(W01出力ファイル) | FILE SECTION |
| ZAN05REC | エラーログレコード定義(W03出力ファイル) | FILE SECTION |
| SQLCA | SQL通信領域 | WORKING-STORAGE |
| SHAMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
| SHAENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
| SHADATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
## 使用サブプログラム
| サブPGM | 役割 | CALL箇所 |
|---------|------|---------|
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
| SUB03END | ABEND処理 | 9999ABDSOR |
## 使用DB2テーブル
| DB名 | テーブル名 | I/O | 備考 |
|------|-----------|:---:|------|
| INSURANCEDB | INSURED-MASTER | I | 履歴整合性確認 |
## 処理フロー
1. 初期処理(開始メッセージ→SUB01DAT運用日取得→OPEN→R02全件読込→OFFICE-TBL格納→R03全件読込→INSURER-TBL格納→DB接続→R01初回READ
2. 主処理:R01終了まで繰り返し
- 第1段階マッチング:OFFICE-NO vs OFFICE-TBL線形探索→成功なら第2段階、失敗ならW02出力
- 第2段階マッチング:INSURER-CODE vs INSURER-TBL線形探索→成功ならW01出力、失敗ならW02出力
- DB2整合性検証:W01出力時INSURED-MASTER SELECT、異常はW03出力
- R01次件READ
3. 終了処理(CLOSE→件数出力→終了メッセージ)
@@ -0,0 +1,46 @@
# SHA05TWN 使用資源一覧
## プログラム概要
- **プログラムID**: SHA05TWN
- **プログラム名**: 標準報酬月額等級判定処理
- **処理概要**: SALARY-MONTHLYをEMP-IDでN:1キーブレイク集約し、平均標準報酬月額とGRADE-TBLをN:1マッチングして等級改定を判定する。
## 使用ファイル
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|------|---------------|------|-------------|-----------|--------|
| SHA05R01 | SALARY-MONTHLY | 順編成 | F (固定長) | 200B | なし(自前定義) |
| SHA05R02 | GRADE-TBL | 順編成 | F (固定長) | 80B | なし(自前定義) |
| SHA05W01 | REVISED-GRADE | 順編成 | F (固定長) | 200B | SHA05REC |
| SHA05W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC |
## 使用COPY句
| COPY句 | 用途 | 使用箇所 |
|--------|------|---------|
| SHA05REC | REVISED-GRADE レコード定義(W01出力ファイル) | FILE SECTION |
| ZAN05REC | エラーログレコード定義(W02出力ファイル) | FILE SECTION |
| SHAMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
| SHAENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
| SHADATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
## 使用サブプログラム
| サブPGM | 役割 | CALL箇所 |
|---------|------|---------|
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
| SUB03END | ABEND処理 | 9999ABDSOR |
## 使用DB2テーブル
なし(DB操作なし)
## 処理フロー
1. 初期処理(開始メッセージ→SUB01DAT運用日取得→PARM取得→OPEN→R02全件読込→GRADE-TBL格納→R01初回READ
2. 主処理:R01終了まで繰り返し
- 第1段階:キーブレイクN:1集約(同一EMP-ID: MONTHLY-AMOUNT累積→キー変更時: DIVIDEで平均標準報酬月額算出、TYPE='A'/'B'判定→該当なしはW02出力)
- 第2段階:等級テーブルN:1マッチング(GRADE-TBL線形探索→平均額に合致する等級コード取得→該当なしはW02出力、OLD≠NEWならW01出力)
- WRK-ACCUM INITIALIZE
- R01次件READ
3. 終了処理(最終キーグループ処理→CLOSE→件数出力→終了メッセージ)
@@ -0,0 +1,51 @@
# SHA06TWM 使用資源一覧
## プログラム概要
- **プログラムID**: SHA06TWM
- **プログラム名**: 保険料率適用・控除計算処理
- **処理概要**: EMP-INSURANCEをDB2 INSURANCE-RATESM×N)とAPPLICABLE-RULESM:N)の2段階マッチングにより保険料を算出しDEDUCTED-RESULTを出力する。
## 使用ファイル
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|------|---------------|------|-------------|-----------|--------|
| SHA06R01 | EMP-INSURANCE | 順編成 | F (固定長) | 200B | SHA02REC |
| SHA06R02 | APPLICABLE-RULES | 順編成 | F (固定長) | 80B | なし(自前定義) |
| SHA06W01 | DEDUCTED-RESULT | 順編成 | F (固定長) | 300B | SHA06REC |
| SHA06W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC |
## 使用COPY句
| COPY句 | 用途 | 使用箇所 |
|--------|------|---------|
| SHA02REC | EMP-INSURANCE レコード定義(R01入力ファイル) | FILE SECTION |
| SHA06REC | DEDUCTED-RESULT レコード定義(W01出力ファイル) | FILE SECTION |
| ZAN05REC | エラーログレコード定義(W02出力ファイル) | FILE SECTION |
| SQLCA | SQL通信領域 | WORKING-STORAGE |
| SHAMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
| SHAENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
| SHADATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
## 使用サブプログラム
| サブPGM | 役割 | CALL箇所 |
|---------|------|---------|
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
| SUB03END | ABEND処理 | 9999ABDSOR |
## 使用DB2テーブル
| DB名 | テーブル名 | I/O | 備考 |
|------|-----------|:---:|------|
| INSURANCEDB | INSURANCE-RATES | I | 料率取得(SELECT |
| SALARYDB | EMP-MASTER | I | 誕生日・扶養人数・地域コード取得(SELECT) |
## 処理フロー
1. 初期処理(開始メッセージ→SUB01DAT運用日取得→OPEN→DB接続→R02全件読込→RULE-TBL格納→R01初回READ
2. 主処理:R01終了まで繰り返し
- 第1段階:保険料率M×Nマッチング(GRADE-CODEでDB2 INSURANCE-RATES SELECT→料率取得、保険料計算)
- 第2段階:適用ルールM:Nマッチング(年齢算出→RULE-TBL線形探索→料率調整→保険料再計算)
- W01(DEDUCTED-RESULT)出力
- R01次件READ
3. 終了処理(CLOSE→件数出力→終了メッセージ)
@@ -0,0 +1,52 @@
# SHA07KBR 使用資源一覧
## プログラム概要
- **プログラムID**: SHA07KBR
- **プログラム名**: 資格異動キーブレイク処理
- **処理概要**: DB2 QUALIFICATION-CHANGESから資格異動データをFETCHし、従業員ごと(1:N)かつ保険者コード変更時(異キー)にキーブレイクしてサマリ・明細を出力する。
## 使用ファイル
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|------|---------------|------|-------------|-----------|--------|
| SHA07W01 | CHG-SUMMARY | 順編成 | F (固定長) | 200B | SHA07REC |
| SHA07W02 | CHG-DETAIL | 順編成 | F (固定長) | 200B | SHA07REC |
| SHA07W03 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC |
## 使用COPY句
| COPY句 | 用途 | 使用箇所 |
|--------|------|---------|
| SHA07REC | CHG-SUMMARY/CHG-DETAIL レコード定義(W01/W02出力ファイル) | FILE SECTION |
| ZAN05REC | エラーログレコード定義(W03出力ファイル) | FILE SECTION |
| SQLCA | SQL通信領域 | WORKING-STORAGE |
| SHADATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
| SHAMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
| SHAENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
## 使用サブプログラム
| サブPGM | 役割 | CALL箇所 |
|---------|------|---------|
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
| SUB03END | ABEND処理 | 9999ABDSOR |
## 使用DB2テーブル
| DB名 | テーブル名 | I/O | 備考 |
|------|-----------|:---:|------|
| INSURANCEDB | QUALIFICATION-CHANGES | I | DECLARE CURSOR / FETCHJOIN with EMP-MASTER |
| SALARYDB | EMP-MASTER | I | JOIN取得(従業員名) |
## 処理フロー
1. 初期処理(開始メッセージ→SUB01DAT運用日取得→OPEN→DB接続→CURSOR宣言(ORDER BY EMP-ID, CHG-DATE)→初回FETCH→WS-PREV初期設定)
2. 主処理:FETCH終了まで繰り返し
- EMP-ID主キーブレイク判定:前回≠今回→サマリレコード出力
- INSURER-CODE異キーブレイク判定:前回≠今回→サマリレコード出力
- 明細レコード出力(全FETCHレコード)
- WS-PREV更新→次件FETCH
3. 最終グループ処理(最終従業員グループのサマリ/明細出力)
4. 終了処理(CLOSE CURSOR→DISCONNECT→ファイルCLOSE→件数出力→終了メッセージ)
@@ -0,0 +1,47 @@
# SHA08SRT 使用資源一覧
## プログラム概要
- **プログラムID**: SHA08SRT
- **プログラム名**: 届出書データSORT編集処理
- **処理概要**: GRADED-LISTをINPUT PROCEDUREで全件RELEASEし、MONTHLY-AMOUNT/GRADE-CODEを保持したままPREF-CODE・OFFICE-NO・EMP-ID昇順SORT後、OUTPUT PROCEDUREでRETURNしてRPT-DATA出力する。GRADED-LISTはSHA04TWOのマッチング成功レコードであり全件有効のためSTATUSフィルタは不要。
## 使用ファイル
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|------|---------------|------|-------------|-----------|--------|
| SHA08R01 | GRADED-LIST | 順編成 | F (固定長) | 200B | SHA04REC |
| SORTWORK | SD-SORTWORK | — | — | 200B | なし(自前SD定義) |
| SHA08W01 | RPT-DATA | 順編成 | F (固定長) | 300B | SHA08REC |
| SHA08W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC |
## 使用COPY句
| COPY句 | 用途 | 使用箇所 |
|--------|------|---------|
| SHA04REC | GRADED-LIST レコード定義(R01入力ファイル) | FILE SECTION |
| SHA08REC | RPT-DATA レコード定義(W01出力ファイル) | FILE SECTION |
| ZAN05REC | エラーログレコード定義(W02出力ファイル) | FILE SECTION |
| SHADATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
| SHAMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
| SHAENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
## 使用サブプログラム
| サブPGM | 役割 | CALL箇所 |
|---------|------|---------|
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
| SUB03END | ABEND処理 | 9999ABDSOR |
## 使用DB2テーブル
なし(DB操作なし)
## 処理フロー
1. 初期処理(開始メッセージ→SUB01DAT運用日付取得→出力ファイルOPEN→入力ファイルOPEN)
2. SORT実行
- INPUT PROCEDURE: R01全件読込→MONTHLY-AMOUNT/GRADE-CODEを含め全項目をSORTRECに転記→全件RELEASE
- SORT KEY: PREF-CODE昇順、OFFICE-NO昇順、EMP-ID昇順
- OUTPUT PROCEDURE: RETURN→SHA08REC編集(MONTHLY-AMOUNT/GRADE-CODEはSR→W01転記)→REPORT-TYPE/REPORT-DATE設定→W01出力
3. SORT結果判定(RETURN-CODE≠0→ABEND
4. 終了処理(CLOSE→件数出力→終了メッセージ)
@@ -0,0 +1,46 @@
# SHA09S25 使用資源一覧
## プログラム概要
- **プログラムID**: SHA09S25
- **プログラム名**: 都道府県支部別分割出力処理
- **処理概要**: RPT-DATAをPREF-CODE0125)で判定し、25個の出力ファイルに振り分けて出力する。CLOSE WITH LOCKで各ファイルを確定する。
## 使用ファイル
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|------|---------------|------|-------------|-----------|--------|
| SHA09R01 | RPT-DATA | 順編成 | F (固定長) | 300B | SHA08REC |
| SHA09W01W25 | PREF-OUT-0125 | 順編成 | F (固定長) | 300B | SHA09REC |
| SHA09W98 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC |
## 使用COPY句
| COPY句 | 用途 | 使用箇所 |
|--------|------|---------|
| SHA08REC | RPT-DATA レコード定義(R01入力ファイル) | FILE SECTION |
| SHA09REC | PREF-OUT レコード定義(W01W25出力ファイル) | FILE SECTION |
| ZAN05REC | エラーログレコード定義(W98出力ファイル) | FILE SECTION |
| SHADATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
| SHAMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
| SHAENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
## 使用サブプログラム
| サブPGM | 役割 | CALL箇所 |
|---------|------|---------|
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
| SUB03END | ABEND処理 | 9999ABDSOR |
## 使用DB2テーブル
なし(DB操作なし)
## 処理フロー
1. 初期処理(開始メッセージ→SUB01DAT運用日付取得→OPENR01+W01W25+W98)→R01初回READ
2. 主処理:R01終了まで繰り返し
- PREF-CODE判定(EVALUATE PREF-CODE 0125)→該当ファイルにWRITE
- SHA09REC編集: PREF-CODE/INSURER-CODE/RPT-BODY設定
- R01次件READ
- PREF-CODE範囲外(0125以外)→W98(ERROR-LOG)出力
3. 終了処理(CLOSE WITH LOCK→件数出力→終了メッセージ)
@@ -0,0 +1,46 @@
# SHA10S10 使用資源一覧
## プログラム概要
- **プログラムID**: SHA10S10
- **プログラム名**: 保険者別分割出力処理
- **処理概要**: RPT-DATAをINSURER-CODE001010)で判定し、10個の出力ファイルに振り分けて出力する。CLOSE WITH LOCKで各ファイルを確定する。本実装は代表10ファイル(001-010)で定義。エラーファイルはW99DD名SHA10W98)。
## 使用ファイル
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|------|---------------|------|-------------|-----------|--------|
| SHA10R01 | RPT-DATA | 順編成 | F (固定長) | 300B | SHA08REC |
| SHA10W01W10 | INSURER-OUT-0110 | 順編成 | F (固定長) | 300B | SHA09REC |
| SHA10W98 | ERROR-LOG(識別子:W99OUTFIL | 順編成 | V (可変長) | 200B | ZAN05REC |
## 使用COPY句
| COPY句 | 用途 | 使用箇所 |
|--------|------|---------|
| SHA08REC | RPT-DATA レコード定義(R01入力ファイル) | FILE SECTION |
| SHA09REC | INSURER-OUT レコード定義(W01W10出力ファイル) | FILE SECTION |
| ZAN05REC | エラーログレコード定義(W98出力ファイル) | FILE SECTION |
| SHADATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
| SHAMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
| SHAENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
## 使用サブプログラム
| サブPGM | 役割 | CALL箇所 |
|---------|------|---------|
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
| SUB03END | ABEND処理 | 9999ABDSOR |
## 使用DB2テーブル
なし(DB操作なし)
## 処理フロー
1. 初期処理(開始メッセージ→SUB01DAT運用日付取得→OPENR01+W01W99+W98)→R01初回READ
2. 主処理:R01終了まで繰り返し
- INSURER-CODE判定(EVALUATE INSURER-CODE 001〜010)→該当ファイルにWRITE
- SHA09REC編集: PREF-CODE/INSURER-CODE/RPT-BODY設定
- R01次件READ
- INSURER-CODE範囲外(001〜010以外)→W99(ERROR-LOG/DD:SHA10W98)出力
3. 終了処理(CLOSE WITH LOCK→件数出力→終了メッセージ)