Files
cobol-tna-system/基本設計書/04_社会保険管理システム_設計書(サブシステムD).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

457 lines
23 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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.
# 社会保険管理システム 設計書(サブシステムD)
## システム概要
本サブシステムは、日本年金機構・健康保険組合からの被保険者資格データを起点に、
標準報酬月額の算定・変更(定時決定・月変・随時改定)、社会保険料の計算、
資格異動管理、届出書類の作成・出力を行う。
給与計算サブシステム(C)と連携し、給与データを基にした月変・随時改定処理を実現する。
### サブシステム情報
| 項目 | 内容 |
|------|------|
| サブシステムID | SHA(社会保険→SHAkai Hoken |
| COBOLプログラム数 | 10 |
| JCL数 | 9 |
| DB | 1INSURANCEDB / DB2、5テーブル) |
### システム定数
| 定数 | 値 | 説明 |
|------|-----|------|
| HEALTH-INS-SPLIT | 0.50 | 健康保険料折半率(50%事業主負担) |
| PENSION-SPLIT | 0.50 | 厚生年金保険料折半率(50%事業主負担) |
| PREFECTURE-COUNT | 25 | 都道府県グループ数(協会けんぽ支部) |
| INSURER-MAX | 100 | 最大保険者数 |
| HALF-WIDTH-LIMIT | 20 | 氏名カナ最大桁数(半角) |
| TEISI-TEIJI-MONTHS | 3 | 定時決定対象月数(4-6月の3ヶ月) |
| GETSUHEN-GRADE-DIFF | 2 | 月変該当等級差(2等級以上変動) |
### サブシステム間連携
| 連携データ | 出力元 | 入力先 | 方式 | 備考 |
|-----------|--------|--------|------|------|
| INSURED-CSV-ASCII(被保険者資格データ) | 外部(年金機構・健保組合) | SHAJ010 | ファイル連携 | ASCII CSV、外部システムから受信 |
| SALARY-MONTHLY(給与月額データ) | C-サブシステム KYU06UPD | SHAJ050 | ファイル連携 | 月変・定時決定用給与明細(200B) |
| INS-DETAIL(標準報酬月額明細) | SHA03MNP | C-サブシステム KYU05DED | ファイル連携 | 控除計算用保険料明細(300B) |
| RPT-DATA(届出書データ) | SHA08SRT | 外部(年金事務所) | ファイル連携 | 算定基礎届・月変届・資格喪失届 |
---
## ファイル一覧
| # | ファイル名 | 編成 | RECM | サイズ | 用途 | 区分 |
|---|-----------|------|------|-------|------|------|
| 1 | INS-CSV-ASCII | SEQUENTIAL | FB | 可変 | 被保険者資格データ(ASCII CSV、外部受信) | 新規 |
| 2 | INSURED-DATA | SEQUENTIAL | FB | 200 | 被保険者EBCDIC固定長 | 新規 |
| 3 | EMP-INSURANCE | SEQUENTIAL | FB | 200 | 従業員×保険種別統合データ | 新規 |
| 4 | OFFICE-MST | SEQUENTIAL | FB | 80 | 事業所マスタ(事業所番号→都道府県・事業所名称) | 新規 |
| 5 | INSURER-MST | SEQUENTIAL | FB | 80 | 保険者マスタ(保険者コード→保険者名称・支部番号) | 新規 |
| 6 | GRADE-TBL | SEQUENTIAL | FB | 80 | 標準報酬等級テーブル | 新規 |
| 7 | GRADED-LIST | SEQUENTIAL | FB | 200 | 事業所・保険者情報付与被保険者一覧 | 新規 |
| 8 | UNMATCHED-LIST | SEQUENTIAL | FB | 200 | マッチング不一致データ | 新規 |
| 9 | SALARY-MONTHLY | SEQUENTIAL | FB | 200 | 給与月額データ(Cサブシステム出力) | C連携 |
| 10 | REVISED-GRADE | SEQUENTIAL | FB | 200 | 月変・随時改定結果 | 新規 |
| 11 | INS-DETAIL | SEQUENTIAL | FB | 300 | 保険料計算詳細(従業員×保険種別 M×N件) | 新規 |
| 12 | GRADE-INSURED | SEQUENTIAL | FB | 300 | 等級×従業員×料率組合せ(M:N→M:N中間結果) | 新規 |
| 13 | DEDUCTED-RESULT | SEQUENTIAL | FB | 300 | 保険料確定結果(M:N→M:N最終出力) | 新規 |
| 14 | CHG-SUMMARY | SEQUENTIAL | FB | 200 | 資格異動サマリ(キーブレイク後) | 新規 |
| 15 | CHG-DETAIL | SEQUENTIAL | FB | 200 | 資格異動明細 | 新規 |
| 16 | RPT-DATA | SEQUENTIAL | FB | 300 | 届出書データ(SORT後) | 新規 |
| 17 | PREF-OUT-01〜25 | SEQUENTIAL | FB | 300 | 都道府県支部別出力(25分割) | 新規 |
| 18 | INSURER-OUT-01〜99 | SEQUENTIAL | FB | 300 | 保険者別出力(100分割) | 新規 |
| 19 | APPLICABLE-RULES | SEQUENTIAL | FB | 80 | 適用条件テーブル(年齢・扶養・地域別) | 新規 |
| 20 | SD-SORTWORK | — | — | — | SORT作業用ファイル(I-O-CONTROL SAME SORT AREA指定) | 新規 |
| 21 | ERROR-LOG | SEQUENTIAL | VB | 最大200 | エラーレコード退避 | A・B・C共用 |
### DB二重対応
本サブシステムのDB操作はDB2の埋め込みSQL(`EXEC SQL`)で直接記述する。
5テーブルは同一DB2インスタンス内の別スキーマ(INSURANCEDB)で管理する。
CサブシステムのSALARYDBEMP-MASTER)は`SALARYDB.EMP-MASTER`でクロススキーマ参照する。
### 共通関数利用方針
既存のサブプログラム(SUB01DAT〜SUB05TIM)は本サブシステムでも利用する。
連絡領域のCOPY書式はサブシステム別に`SHADATAC``SHAMSGAC``SHAENDAC``SHACHKAC`を新規作成する。
---
## DB構成(INSURANCEDB
### DB名称:社会保険管理データベース(INSURANCEDB
#### テーブル1INSURED-MASTER(被保険者マスタ)
| カラム | 型 | 内容 |
|--------|---|------|
| EMP-ID | CHAR(8) | 社員番号(PK |
| INSURED-NO | CHAR(10) | 被保険者番号(番号体系:健康保険+厚生年金で共通) |
| OFFICE-NO | CHAR(4) | 事業所番号 |
| INSURER-CODE | CHAR(4) | 保険者コード |
| HEALTH-INS-TYPE | CHAR(1) | 健康保険種別(1=協会けんぽ / 2=組合健保) |
| PENSION-TYPE | CHAR(1) | 年金種別(1=厚生年金 / 2=共済) |
| BASE-MONTHLY | DECIMAL(9,0) | 現行標準報酬月額 |
| GRADE-CODE | CHAR(2) | 現行等級コード |
| STATUS | CHAR(1) | 状態(0=在籍 / 9=喪失) |
| UPDATED-AT | TIMESTAMP | 更新日時 |
#### テーブル2INSURANCE-RATES(保険料率テーブル)
| カラム | 型 | 内容 |
|--------|---|------|
| GRADE-CODE | CHAR(2) | 標準報酬等級コード(PK) |
| MONTHLY-FROM | DECIMAL(9,0) | 標準報酬月額下限 |
| MONTHLY-TO | DECIMAL(9,0) | 標準報酬月額上限 |
| HEALTH-RATE | DECIMAL(7,6) | 健康保険料率(折半後従業員負担率) |
| PENSION-RATE | DECIMAL(7,6) | 厚生年金保険料率(折半後従業員負担率) |
| EFFECTIVE-FROM | CHAR(6) | 適用開始年月 YYYYMMPK |
| EFFECTIVE-TO | CHAR(6) | 適用終了年月 YYYYMMPK、999999=無期限) |
| UPDATED-AT | TIMESTAMP | 更新日時 |
#### テーブル3GRADE-HISTORY(標準報酬等級履歴)
| カラム | 型 | 内容 |
|--------|---|------|
| EMP-ID | CHAR(8) | 社員番号(PK |
| YEAR-MONTH | CHAR(6) | 対象年月 YYYYMMPK |
| GRADE-CODE | CHAR(2) | 等級コード |
| MONTHLY-AMOUNT | DECIMAL(9,0) | 標準報酬月額 |
| CHANGE-TYPE | CHAR(1) | 変更要因(1=定時決定 / 2=月変 / 3=随時改定) |
| PREV-GRADE | CHAR(2) | 変更前等級コード |
| UPDATED-AT | TIMESTAMP | 更新日時 |
#### テーブル4QUALIFICATION-CHANGES(資格異動テーブル)
| カラム | 型 | 内容 |
|--------|---|------|
| CHG-ID | INTEGER | 異動IDPK、自動採番) |
| EMP-ID | CHAR(8) | 社員番号 |
| CHG-DATE | CHAR(8) | 異動日 YYYYMMDD |
| CHG-TYPE | CHAR(2) | 異動種別(01=取得 / 02=喪失 / 03=種別変更 / 04=住所変更) |
| INSURER-CODE | CHAR(4) | 異動先保険者コード |
| PREV-INSURER | CHAR(4) | 異動元保険者コード |
| REASON | VARCHAR(100) | 異動理由 |
| UPDATED-AT | TIMESTAMP | 更新日時 |
#### テーブル5INSURER-MASTER(保険者マスタ)
| カラム | 型 | 内容 |
|--------|---|------|
| INSURER-CODE | CHAR(4) | 保険者コード(PK |
| INSURER-NAME | VARCHAR(60) | 保険者名称 |
| PREF-CODE | CHAR(2) | 都道府県支部コード(01〜25) |
| INSURER-TYPE | CHAR(1) | 保険者種別(1=協会けんぽ / 2=組合健保 / 3=共済) |
| UPDATED-AT | TIMESTAMP | 更新日時 |
---
## 処理フロー
```
╞══ SHAJ010 ═══════════════════════════════════╡
│ SHA01CVTASCII→EBCDIC変換) PGMパターン: 29
│ INSPECT CONVERTING X"00"..."FF" TO X"00"..."FF" で変換
│ 被保険者番号・事業所番号の桁数チェック(内部処理)
│ SUB04CHK で数値妥当性チェック
├── 正常 → INSURED-DATA200B EBCDIC固定長)
└── 異常 → ERROR-LOG
╞══ SHAJ020 ═══════════════════════════════════╡
│ SHA02MNCM:N→M件マッチング) PGMパターン: 18
│ EMP-MASTERDB2 SALARYDB.EMP-MASTER SELECT)×
│ INSURANCE-RATESDB2 INSURANCEDB.INSURANCE-RATES SELECT
│ M件の従業員 × N件の保険種別料率 → 従業員単位に統合
│ SEARCH ALL で該当GRADE-CODEを内部表検索
│ 社員番号昇順に出力
├── → EMP-INSURANCE200B 従業員単位1件)
└── 異常 → ERROR-LOG
╞══ SHAJ030 ═══════════════════════════════════╡
│ SHA03MNPM:N→M×N件直積出力) PGMパターン: 20
│ EMP-INSURANCE × INSURANCE-RATES(内部表LOAD
│ 全従業員 × 全保険種別の直積出力(M×N件)
│ 従業員ごとに健康保険・厚生年金・雇用保険の保険料明細を生成
├── → INS-DETAIL300B 全組合せ明細)
└── 異常 → ERROR-LOG
╞══ SHAJ040 ═══════════════════════════════════╡
│ SHA04TWO2段階1:1→1:1マッチング) PGMパターン: 16
│ 第1段階: INSURED-DATA × OFFICE-MST(事業所マスタ)
│  事業所番号一致→事業所名称・都道府県コード付加
│ 第2段階: 中間結果 × INSURER-MST(保険者マスタ)
│  保険者コード一致→保険者名称・支部コード付加
│ DB2参照: INSURED-MASTER(履歴整合性確認)
│ PROGRAM-ID IS INITIAL 指定
│ USAGE PACKED-DECIMAL で金額項目定義
├── → GRADED-LIST(200B 事業所・保険者情報付き)
├── → UNMATCHED-LIST200B 不一致データ)
└── 異常 → ERROR-LOG
╞══ SHAJ050 ═══════════════════════════════════╡
│ SHA05TWN2段階N:1→N:1マッチング) PGMパターン: 17
│ 第1段階: SALARY-MONTHLY(複数月N件→社員別平均N:1)
│  同一社員の複数月給与(定時決定:4-6月、月変:直近3月)を平均
 ADD TO + END-ADD で累積、DIVIDE GIVING REMAINDER で平均
│ 第2段階: 平均値×GRADE-TBLN:1で等級判定)
│  平均標準報酬月額が該当する等級コードを特定
│  現行等級と比較し2等級以上変動→月変該当
├── → REVISED-GRADE200B 改定結果)
└── 異常 → ERROR-LOG
╞══ SHAJ060 ═══════════════════════════════════╡
│ SHA06TWM2段階M:N→M:Nマッチング) PGMパターン: 22
│ 第1段階: EMP-INSURANCE(M) × INSURANCE-RATES(N)
│  全従業員×全料率の組合せから該当する等級料率を特定
│  → GRADE-INSUREDM:N 中間ファイル)
│ 第2段階: GRADE-INSURED(M:N) × APPLICABLE-RULES(N)
│  年齢・扶養人数・地域コード等の条件で正しい料率を確定
│  通常MOVEで構造体転記(MOVE CORRは不使用)
├── → DEDUCTED-RESULT300B 保険料確定結果)
└── 異常 → ERROR-LOG
╞══ SHAJ070 ═══════════════════════════════════╡
│ SHA07KBR1:N+異キーキーブレイク) PGMパターン: 33
│ DB2 QUALIFICATION-CHANGES からEXEC SQL SELECT
│ 同一従業員内(1:N)で保険者コード(異キー)変更時キーブレイク
│ 保険者変更を検出した時点でサマリ出力、それ以外は明細出力
│ SUB04CHKSUB02MSG でCALL(通常CALL、CANCEL不使用)
├── → CHG-SUMMARY200B 保険者別異動サマリ)
├── → CHG-DETAIL200B 全異動明細)
└── 異常 → ERROR-LOG
╞══ SHAJ080 ═══════════════════════════════════╡
│ SHA08SRTSORT INPUT/OUTPUT PROCEDURE PGMパターン: 34
│ SD-SORTWORK + SORT文
│ I-O-CONTROL. SAME SORT AREA FOR SD-SORTWORK
│ INPUT PROCEDURE: GRADED-LIST読込+届出対象抽出(STATUS=0)
│ OUTPUT PROCEDURE: 届出書形式に編集 + 集計
│ RETURN-CODE でSORT結果判定
│ RELEASE + RETURN 文でSORTデータ引渡し・受取
├── → RPT-DATA300B 届出書データ)
└── 異常 → ERROR-LOG
╞══ SHAJ090 ═══════════════════════════════════╡
│ SHA09S2525分割) PGMパターン: 11
│ RPT-DATA を都道府県支部コード(PREF-CODE 01〜25)で分割
│ SELECT ... ORGANIZATION IS SEQUENTIAL(明示的宣言)
│ CLOSE WITH LOCK で出力ファイル確定
├── → PREF-OUT-01〜25
└── 異常 → ERROR-LOG
╞══ SHAJ100 ═══════════════════════════════════╡
│ SHA10S10100分割) PGMパターン: 12
│ RPT-DATA を保険者コード(INSURER-CODE 001〜099)で分割
│ CLOSE WITH LOCK で出力ファイル確定
├── → INSURER-OUT-01〜99
└── 異常 → ERROR-LOG
```
---
## JCL
### SHAJ010 — 被保険者データ受信変換
```jcl
//SHAJ010 JOB (ACCT),'被保険者データ変換',CLASS=A
//*
//*--- パラメータ定義 ---
//SETPARM SET YEARMONTH=202605
//*=====================================================================
//* STEP010: ASCII→EBCDIC変換(Type 29
//*=====================================================================
//STEP010 EXEC PGM=SHA01CVT,PARM='YEARMONTH=&YEARMONTH'
//SHA01R01 DD DSN=INS-CSV-ASCII.DAT,DISP=SHR
//SHA01W01 DD DSN=INSURED-DATA.DAT,DISP=(NEW,CATLG)
//SHA01W02 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
```
### SHAJ020 — 保険マッチングM件
```jcl
//SHAJ020 JOB (ACCT),'保険マッチングM件',CLASS=A
//*
//SETPARM SET YEARMONTH=202605
//*=====================================================================
//* STEP010: M:N→M件(Type 18
//*=====================================================================
//STEP010 EXEC PGM=SHA02MNC,PARM='YEARMONTH=&YEARMONTH'
//SHA02W01 DD DSN=EMP-INSURANCE.DAT,DISP=(NEW,CATLG)
//SHA02W02 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
//* DB2参照(EMP-MASTERINSURANCE-RATES)のためDD不要
```
### SHAJ030 — M:N直積出力
```jcl
//SHAJ030 JOB (ACCT),'M:N直積出力',CLASS=A
//*
//SETPARM SET YEARMONTH=202605
//*=====================================================================
//* STEP010: M:N→M×N件(Type 20
//*=====================================================================
//STEP010 EXEC PGM=SHA03MNP,PARM='YEARMONTH=&YEARMONTH'
//SHA03R01 DD DSN=EMP-INSURANCE.DAT,DISP=(OLD,DELETE)
//SHA03W01 DD DSN=INS-DETAIL.DAT,DISP=(NEW,CATLG)
//SHA03W02 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
//* INSURANCE-RATESは内部表LOADのためDB2参照(DD不要)
```
### SHAJ040 — 2段階1:1事業所・保険者判定
```jcl
//SHAJ040 JOB (ACCT),'事業所・保険者判定',CLASS=A
//*
//SETPARM SET YEARMONTH=202605
//*=====================================================================
//* STEP010: 2段階1:1→1:1Type 16
//*=====================================================================
//STEP010 EXEC PGM=SHA04TWO,PARM='YEARMONTH=&YEARMONTH'
//SHA04R01 DD DSN=INSURED-DATA.DAT,DISP=(OLD,DELETE)
//SHA04R02 DD DSN=OFFICE-MST.DAT,DISP=SHR
//SHA04R03 DD DSN=INSURER-MST.DAT,DISP=SHR
//SHA04W01 DD DSN=GRADED-LIST.DAT,DISP=(NEW,CATLG)
//SHA04W02 DD DSN=UNMATCHED-LIST.DAT,DISP=(NEW,PASS)
//SHA04W03 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
```
### SHAJ050 — 定時決定・月変改定
```jcl
//SHAJ050 JOB (ACCT),'定時決定・月変改定',CLASS=A
//*
//SETPARM SET YEARMONTH=202605
//*=====================================================================
//* STEP010: 2段階N:1→N:1Type 17
//*=====================================================================
//STEP010 EXEC PGM=SHA05TWN,PARM='YEARMONTH=&YEARMONTH'
//SHA05R01 DD DSN=SALARY-MONTHLY.DAT,DISP=SHR
//SHA05R02 DD DSN=GRADE-TBL.DAT,DISP=SHR
//SHA05W01 DD DSN=REVISED-GRADE.DAT,DISP=(NEW,CATLG)
//SHA05W02 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
```
### SHAJ060 — 保険料確定(2段階M:N)
```jcl
//SHAJ060 JOB (ACCT),'保険料確定',CLASS=A
//*
//SETPARM SET YEARMONTH=202605
//*=====================================================================
//* STEP010: 2段階M:N→M:NType 22
//*=====================================================================
//STEP010 EXEC PGM=SHA06TWM,PARM='YEARMONTH=&YEARMONTH'
//SHA06R01 DD DSN=EMP-INSURANCE.DAT,DISP=SHR
//SHA06R02 DD DSN=APPLICABLE-RULES.DAT,DISP=SHR
//SHA06W01 DD DSN=DEDUCTED-RESULT.DAT,DISP=(NEW,CATLG)
//SHA06W02 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
//* INSURANCE-RATESはDB2参照
```
### SHAJ070 — 資格異動処理
```jcl
//SHAJ070 JOB (ACCT),'資格異動処理',CLASS=A
//*
//SETPARM SET YEARMONTH=202605
//*=====================================================================
//* STEP010: 1:N+異キーキーブレイク(Type 33)
//*=====================================================================
//STEP010 EXEC PGM=SHA07KBR,PARM='YEARMONTH=&YEARMONTH'
//SHA07W01 DD DSN=CHG-SUMMARY.DAT,DISP=(NEW,CATLG)
//SHA07W02 DD DSN=CHG-DETAIL.DAT,DISP=(NEW,PASS)
//SHA07W03 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
//* QUALIFICATION-CHANGESはDB2 SELECTDD不要)
```
### SHAJ080 — 届出書作成(SORT
```jcl
//SHAJ080 JOB (ACCT),'届出書作成',CLASS=A
//*
//SETPARM SET YEARMONTH=202605
//*=====================================================================
//* STEP010: SORT INPUT/OUTPUT PROCEDUREType 34
//*=====================================================================
//STEP010 EXEC PGM=SHA08SRT,PARM='YEARMONTH=&YEARMONTH'
//SHA08R01 DD DSN=GRADED-LIST.DAT,DISP=SHR
//SHA08W01 DD DSN=RPT-DATA.DAT,DISP=(NEW,CATLG)
//SHA08W02 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
//* SD-SORTWORKはプログラム内SORT作業ファイル(JCL DD不要)
```
### SHAJ090 — 都道府県支部別分割出力(25分割)
```jcl
//SHAJ090 JOB (ACCT),'支部別分割出力',CLASS=A
//*
//SETPARM SET YEARMONTH=202605
//*=====================================================================
//* STEP010: 25分割(Type 11
//*=====================================================================
//STEP010 EXEC PGM=SHA09S25,PARM='YEARMONTH=&YEARMONTH'
//SHA09R01 DD DSN=RPT-DATA.DAT,DISP=(OLD,DELETE)
//SHA09W01 DD DSN=PREF-OUT-01.DAT,DISP=(NEW,CATLG)
//SHA09W02 DD DSN=PREF-OUT-02.DAT,DISP=(NEW,CATLG)
// ...
//SHA09W25 DD DSN=PREF-OUT-25.DAT,DISP=(NEW,CATLG)
//SHA09W98 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
```
### SHAJ100 — 保険者別分割出力(100分割)
```jcl
//SHAJ100 JOB (ACCT),'保険者別分割出力',CLASS=A
//*
//SETPARM SET YEARMONTH=202605
//*=====================================================================
//* STEP010: 100分割(Type 12
//*=====================================================================
//STEP010 EXEC PGM=SHA10S10,PARM='YEARMONTH=&YEARMONTH'
//SHA10R01 DD DSN=RPT-DATA.DAT,DISP=(OLD,DELETE)
//SHA10W01 DD DSN=INSURER-OUT-01.DAT,DISP=(NEW,CATLG)
//SHA10W02 DD DSN=INSURER-OUT-02.DAT,DISP=(NEW,CATLG)
// ...
//SHA10W99 DD DSN=INSURER-OUT-99.DAT,DISP=(NEW,CATLG)
//SHA10W98 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
```
---
## プログラム一覧
| # | PGM-ID | PGMパターン | 機能概要 | 使用COPY | DBアクセス | CALL先 |
|:-:|:------:|:----------:|---------|:--------:|:---------:|:------:|
| 1 | SHA01CVT | 29 ASCII→EBCDIC変換 | ASCII CSVをINSPECT CONVERTINGでEBCDIC固定長に変換 | SHA01REC, SHADATAC, SHAMSGAC, SHAENDAC, SHACHKAC | なし | SUB01DAT, SUB02MSG, SUB03END, SUB04CHK |
| 2 | SHA02MNC | 18 M:N→M件 | 従業員×保険種別→従業員単位統合 | SHA02REC, SHADATAC, SHAMSGAC, SHAENDAC, SHACHKAC | あり(EMP-MASTER SELECT, INSURANCE-RATES SELECT | SUB01DAT, SUB02MSG, SUB03END, SUB04CHK |
| 3 | SHA03MNP | 20 M:N→M×N件 | 従業員×保険種別→全組合せ明細 | SHA03REC, SHADATAC, SHAMSGAC, SHAENDAC | あり(INSURANCE-RATES SELECT→内部表LOAD | SUB01DAT, SUB02MSG, SUB03END |
| 4 | SHA04TWO | 16 2段階1:1→1:1 | 事業所マッチング→保険者マッチング | SHA04REC, SHADATAC, SHAMSGAC, SHAENDAC | あり(INSURED-MASTER SELECT, GRADE-HISTORY SELECT | SUB01DAT, SUB02MSG, SUB03END |
| 5 | SHA05TWN | 17 2段階N:1→N:1 | 定時決定・月変改定(複数月平均→等級判定) | SHA05REC, SHADATAC, SHAMSGAC, SHAENDAC | なし | SUB01DAT, SUB02MSG, SUB03END |
| 6 | SHA06TWM | 22 2段階M:N→M:N | M従業員×N料率→適用条件で確定 | SHA06REC, SHADATAC, SHAMSGAC, SHAENDAC | あり(INSURANCE-RATES SELECT | SUB01DAT, SUB02MSG, SUB03END |
| 7 | SHA07KBR | 33 1:N+異キーKB | 資格異動処理、保険者コード変更時KB | SHA07REC, SHADATAC, SHAMSGAC, SHAENDAC | あり(QUALIFICATION-CHANGES SELECT | SUB01DAT, SUB02MSG, SUB03END, SUB04CHK |
| 8 | SHA08SRT | 34 SORT IP/OP | SORT + INPUT/OUTPUT PROCEDURE | SHA08REC, SHADATAC, SHAMSGAC, SHAENDAC | なし(SORT文、I-O-CONTROL SAME SORT AREA | SUB01DAT, SUB02MSG, SUB03END |
| 9 | SHA09S25 | 11 25分割 | 都道府県支部別分割出力 | SHA09REC, SHADATAC, SHAMSGAC, SHAENDAC | なし | SUB01DAT, SUB02MSG, SUB03END |
| 10 | SHA10S10 | 12 100分割 | 保険者別分割出力 | SHA09REC, SHADATAC, SHAMSGAC, SHAENDAC | なし | SUB01DAT, SUB02MSG, SUB03END |
---
## COPY書式一覧
| # | COPY ID | 用途 | サイズ | 備考 |
|:-:|:--------|:----:|:------:|------|
| 1 | SHA01REC | INSURED-DATA レコード | 200 | SHA01CVT出力、SHA04TWO入力 |
| 2 | SHA02REC | EMP-INSURANCE レコード | 200 | SHA02MNC出力、SHA03MNP/SHA06TWM入力 |
| 3 | SHA03REC | INS-DETAIL レコード | 300 | SHA03MNP出力 |
| 4 | SHA04REC | GRADED-LIST レコード | 200 | SHA04TWO出力、SHA08SRT入力 |
| 5 | SHA05REC | REVISED-GRADE レコード | 200 | SHA05TWN出力 |
| 6 | SHA06REC | DEDUCTED-RESULT レコード | 300 | SHA06TWM出力 |
| 7 | SHA07REC | CHG-SUMMARY/CHG-DETAIL レコード | 200 | SHA07KBR出力 |
| 8 | SHA08REC | RPT-DATA レコード | 300 | SHA08SRT出力、SHA09S25/SHA10S10入力 |
| 9 | SHA09REC | PREF-OUT/INSURER-OUT レコード | 300 | SHA09S25/SHA10S10出力 |
| 10 | SHADATAC | SUB01DAT連絡領域 | — | CALL I/F |
| 11 | SHAMSGAC | SUB02MSG連絡領域 | — | CALL I/F |
| 12 | SHAENDAC | SUB03END連絡領域 | — | CALL I/F |
| 13 | SHACHKAC | SUB04CHK連絡領域 | — | CALL I/F |