Files
cobol-tna-system/詳細設計書/詳細設計書_KYU05DED.md
qiuqiuqiu 75475b3fa1 Add Subsystem C (KYU01-09): all 9 programs, design docs, resource lists, DDL, COPY, coverage stats
KYU programs for payroll calculation:
  KYU01CVT - CSV conversion
  KYU02REG - attendance registration
  KYU03AGG - aggregation
  KYU04CAL - salary calculation
  KYU05DED - deduction calculation
  KYU06UPD - DB update
  KYU07DIV - division/pay-slip
  KYU08PRI - print output
  KYU09MRG - merge output

Includes:
  - Source programs (9 .cbl)
  - Compiled executables (9 .exe)
  - Detailed design docs (9 + sign-off)
  - Basic design doc (subsystem C overview)
  - Resource lists (9)
  - DDL schema (schema_kyu.sql)
  - COPY book (KYU99REC.cpy)
  - Coverage statistics update
  - DB definition update (STATUS values)
  - Overall system design document
2026-07-09 08:09:59 +08:00

168 lines
6.4 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 | KYU05DED |
| 3 | プログラム名 | 控除計算処理 |
| 4 | PGMタイプ | メイン |
| 5 | PGMパターン | SELECT条件 |
| 6 | 機能概要 | SALARY-DETAILを入力に、源泉所得税・社会保険料・住民税を計算しSALARY-NETを出力する。 |
| 7 | | TAX-TABLEDB2 SELECT ... BETWEEN)で税率検索、INSURANCE-TABLESEARCH ALL)で保険料率検索 |
※PGMタイプ:メイン、サブ
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
### 前提条件
| NO | 対象ファイル | 条件 |
|----|-------------|------|
| 1 | SALARY-DETAIL(KYU05R01) | ソート不要。KYU04CALの出力を入力 |
### 使用ファイル一覧
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
| 1 | SALARY-DETAIL | R01 | KYU05R01 | I | KYU03REC | FB | | 240 | PS | KYU04CAL出力 |
| 2 | SALARY-NET | W01 | KYU05W01 | O | KYU04REC | FB | | 200 | PS | |
| 3 | ERROR-LOG | W02 | KYU05W02 | O | KYU99REC | VB | | 200 | PS | |
| 4 | TAX-TABLE (DB2) | — | — | I | — | — | — | — | DB2 | EXEC SQL SELECT ... BETWEEN |
| 5 | INSURANCE-TABLE (DB2) | — | — | I | — | — | — | — | DB2 | LOAD→WORKING-STORAGE→SEARCH ALL |
### キー項目一覧
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|----|-----------|---------------------|-------------------------------------------|
| 1 | 該当なし | なし | なし |
### 使用モジュール一覧
| NO | 機能 | プログラムID | 使用COPY名 |
|----|------|-------------|-----------|
| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
| 2 | ABEND処理SUB | SUB03END | ZANENDAC |
---
## 処理詳細
```
1.初期処理(1000ITTSOR
1-1.開始メッセージ出力
【メッセージ編集】
メッセージ番号:1(開始メッセージ)
1-2.コンパイル日時出力
【メッセージ編集】
メッセージ番号:33(コンパイル日時)
PARM1:コンパイル日時
PARM2'COMPILED'
1-3.ワークエリアの初期化
1-4.DB接続(EXEC SQL CONNECT TO 'data/SALARY.db'
1-5.INSURANCE-TABLE全件LOAD1100INSLOADSOR
【SQL】(DECLARE INS-CURSOR
SELECT INS-INCOME-FROM, INS-INCOME-TO,
INS-HEALTH-RATE, INS-PENSION-RATE
FROM INSURANCE-TABLE
ORDER BY INS-INCOME-FROM
OPEN CURSOR → FETCH ループ → WORKING-STORAGE(INSURANCE-WORK)に格納
IW-COUNT で件数管理(最大200件)
→ CLOSE CURSOR
1-6.使用ファイルのOPEN
R01INNFIL / W01OUTFIL / W02OUTFIL をOPEN
1-7.R01を読み込む。(1200R01INNSOR)(1回目)
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
2-1.課税所得計算
【IF判定】
WRK-GROSS-PAYMENT < CNS-TAX-BASIC-DEDUCTION(50000)
→ 課税所得 = 0
上記以外
【COMPUTE】
WRK-TAXABLE-INCOME =
WRK-GROSS-PAYMENT - CNS-TAX-BASIC-DEDUCTION
2-2.DB2 TAX-TABLE税率取得(EXEC SQL SELECT ... BETWEEN
【SQL】
SELECT TAX-RATE, DEDUCTION
FROM TAX-TABLE
WHERE :WRK-TAXABLE-INCOME BETWEEN TAX-FROM AND TAX-TO
SQLコード=0の場合
【COMPUTE ROUNDED】
WRK-INCOME-TAX =
WRK-TAXABLE-INCOME × DBV-TAX-RATE - DBV-TAX-DEDUCTION
計算結果<0 → 0に補正
SQLコード≠0の場合
WRK-INCOME-TAX = 0
2-3.社会保険料計算(SEARCH ALL on INSURANCE-WORK
【SEARCH ALL IW-ENTRY】
条件:IW-INCOME-FROM(IW-IDX) ≦ WRK-TAXABLE-INCOME
AND WRK-TAXABLE-INCOME ≦ IW-INCOME-TO(IW-IDX)
AT END → WRK-INSURANCE = 0
【COMPUTE ROUNDED】
WRK-INSURANCE = WRK-TAXABLE-INCOME ×
(IW-HEALTH-RATE + IW-PENSION-RATE)
2-4.住民税計算
【COMPUTE ROUNDED】
WRK-RESIDENT-TAX =
WRK-TAXABLE-INCOME × CNS-RESIDENT-TAX-RATE(0.10)
2-5.差引支給額計算
【COMPUTE】
WRK-NET-PAYMENT =
WRK-GROSS-PAYMENT - WRK-INCOME-TAX
- WRK-INSURANCE - WRK-RESIDENT-TAX
2-6.SALARY-NET出力(2100WRITOUTSOR
各項目をW01OUTRECKYU04REC)にMOVEしWRITE
W01OUT件数カウンタ(CUN-W01OUT)を+1
2-7.R01を読み込む。(1200R01INNSOR)(2件目以降)
3.終了処理(3000STPSOR
3-1.入出力ファイルのクローズ
3-2.入出力件数出力メッセージ出力
【入力メッセージ編集】
メッセージ番号:6(入力件数メッセージ)
PARM1'KYU05R01'
PARM2CUN-R01INN
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'KYU05W01'
PARM2CUN-W01OUT
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'KYU05W02'
PARM2CUN-W02OUT
3-3.終了メッセージ出力
【メッセージ編集】
メッセージ番号:2(終了メッセージ)
```
---
## 出力レコード定義
### 出力ファイル1W01/SALARY-NET
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | EMP-ID | R01EMP-ID | |
| 2 | REC-TYPE | 'S'で固定 | 給与= S / 賞与= B |
| 3 | EMP-NAME | R01EMP-NAME | |
| 4 | DEPT-CODE | R01DEPT-CODE | |
| 5 | REGION-CODE | — | 未設定(FILLER |
| 6 | CATEGORY-CODE | — | 未設定(FILLER |
| 7 | GROSS-PAYMENT | R01BASE-SALARY | |
| 8 | INCOME-TAX | WRK-INCOME-TAX | 所得税計算結果 |
| 9 | INSURANCE | WRK-INSURANCE | 社会保険料計算結果 |
| 10 | RESIDENT-TAX | WRK-RESIDENT-TAX | 住民税計算結果 |
| 11 | NET-PAYMENT | WRK-NET-PAYMENT | 差引支給額計算結果 |
| 12 | TAXABLE-INCOME | WRK-TAXABLE-INCOME | 課税所得計算結果 |
| 13 | PAY-AMOUNT | WRK-NET-PAYMENT | 汎用支給額 |
| 14 | FILLER | — | 81B |
### 出力ファイル2W02/ERROR-LOG
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | ERR-CATEGORY | 未設定 | 該当ケースなし |
| 2 | ERR-DETAIL | エラー内容 | DB接続エラー時のみ |