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

177 lines
7.1 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 | KYU04CAL |
| 3 | プログラム名 | 給与計算処理 |
| 4 | PGMタイプ | メイン |
| 5 | PGMパターン | 1:N+キーブレイク(同キー) |
| 6 | 機能概要 | ABSENCE-AGGREGATEを読込み、DB2 EMP-MASTER・OVT-MONTHLYを参照し給与計算を実行する。 |
| 7 | | 欠勤控除額計算→時間外手当計算→支給総額計算→SALARY-DETAIL出力 |
| 8 | | 勤怠区分×手当種別の複合分岐はEVALUATE ALSOで実装 |
※PGMタイプ:メイン、サブ
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
### 前提条件
| NO | 対象ファイル | 条件 |
|----|-------------|------|
| 1 | ABSENCE-AGGREGATE(KYU04R02) | ソート不要。社員番号単位の1件(KYU03AGG出力) |
| 2 | PAY-PARAM(KYU04R03) | CSV形式。基本給パラメータを保持 |
### 使用ファイル一覧
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
| 1 | ABSENCE-AGGREGATE | R02 | KYU04R02 | I | KYU02REC | F | | 80 | PS | KYU03AGG出力 |
| 2 | PAY-PARAM | R03 | KYU04R03 | I | 自前(80B) | F | | 80 | PS | CSV形式 |
| 3 | SALARY-DETAIL | W03 | KYU04W03 | O | KYU03REC | FB | | 240 | PS | |
| 4 | ERROR-LOG | W04 | KYU04W04 | O | KYU99REC | VB | | 200 | PS | |
| 5 | EMP-MASTER (DB2) | — | — | I | — | — | — | — | DB2 | EXEC SQL SELECT |
| 6 | OVT-MONTHLY (DB2) | — | — | I | — | — | — | — | DB2 | EXEC SQL SELECT SUM |
### キー項目一覧
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|----|-----------|---------------------|-------------------------------------------|
| 1 | ABSENCE-AGGREGATE | なし | 社員番号(1:Nマッチングキー) |
### 使用モジュール一覧
| NO | 機能 | プログラムID | 使用COPY名 |
|----|------|-------------|-----------|
| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC |
| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
| 3 | ABEND処理SUB | SUB03END | ZANENDAC |
---
## 処理詳細
```
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.PAY-PARAM(R03)をOPEN READし、基本給パラメータを取得する。
UNSTRINGでカンマ区切りを分解し、対象年月と基本給を抽出する。
1-6.使用ファイルのOPEN
R02INNFIL / W03OUTFIL / W04OUTFIL をOPEN
1-7.DB接続(EXEC SQL CONNECT TO 'data/SALARY.db'
1-8.R02を読み込む。(1100R02INNSOR)(1回目)
2.主処理(2000MAJSOR)(R02を全て読み終えるまで下記を繰り返す)
2-1.ホスト変数セット
R02のEMP-IDをDBV-EMP-IDにMOVE
2-2.DB2 EMP-MASTER参照(EXEC SQL SELECT
【SQL】
SELECT EMP-NAME, DEPT-CODE, REGION-CODE,
CATEGORY-CODE, BASE-SALARY, HOURLY-RATE,
DEPENDENT-COUNT, STATUS
※REGION-CODE/CATEGORY-CODEはFYI用に取得するが現状未使用
FROM EMP-MASTER
WHERE EMP-ID = :DBV-EMP-ID
SQLコード≠0の場合、エラー出力(2200ERROUTSOR)し次件へ。
2-3.DB2 OVT-MONTHLY参照(EXEC SQL SELECT SUM
【SQL】
SELECT SUM(OVT-HOURS)
FROM OVT-MONTHLY
WHERE EMP-ID = :DBV-EMP-ID
AND YEAR-MONTH = :WRK-YEAR-MONTH
SQLコード≠0の場合、残業時間をZEROとする。
2-4.給与計算(2100CALCSOR
2-4-1.欠勤控除額計算
【COMPUTE】
WRK-ABSENT-DEDUCT ROUNDED =
DBV-HOURLY-RATE × WRK-ABSENT-HOURS
ON SIZE ERROR → ZERO設定
2-4-2.時間外手当計算
【COMPUTE】
WRK-OVT-AMOUNT ROUNDED =
DBV-HOURLY-RATE × DBV-OVT-HOURS × CNS-OVERTIME-RATE(1.25)
ON SIZE ERROR → ZERO設定
2-4-3.EVALUATE ALSO(勤怠区分×手当種別の複合分岐)
【EVALUATE ALSO】
WRK-ALLOWANCE-TYPE = 'OVT' AND WRK-ATTEND-TYPE = 'W'
→ WRK-AMOUNT = HOURLY-RATE × OVT-HOURS × 1.25
WRK-ALLOWANCE-TYPE = 'OVT' AND WRK-ATTEND-TYPE = 'H'
→ WRK-AMOUNT = HOURLY-RATE × OVT-HOURS × 1.35
WRK-ALLOWANCE-TYPE = 'LATE' AND WRK-ATTEND-TYPE = ANY
→ WRK-AMOUNT = HOURLY-RATE × OVT-HOURS × 0.50
WHEN OTHER → WRK-AMOUNT = ZERO
2-4-4.支給総額計算
【COMPUTE】
WRK-GROSS-PAYMENT =
DBV-BASE-SALARY + WRK-OVT-AMOUNT - WRK-ABSENT-DEDUCT
2-5.SALARY-DETAIL出力(2110WRITOUTSOR
各項目をW03OUTRECKYU03REC)にMOVEしWRITE
W03OUT件数カウンタ(CUN-W03OUT)を+1
2-6.R02を読み込む。(1100R02INNSOR)(2件目以降)
3.終了処理(3000STPSOR
3-1.入出力ファイルのクローズ
3-2.入出力件数出力メッセージ出力
【入力メッセージ編集】
メッセージ番号:6(入力件数メッセージ)
PARM1'KYU04R02'
PARM2CUN-R02INN
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'KYU04W03'
PARM2CUN-W03OUT
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'KYU04W04'
PARM2CUN-W04OUT
3-3.終了メッセージ出力
【メッセージ編集】
メッセージ番号:2(終了メッセージ)
```
---
## 出力レコード定義
### 出力ファイル1W03/SALARY-DETAIL
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | EMP-ID | R02EMP-ID | |
| 2 | EMP-NAME | DB2 EMP-MASTER EMP-NAME | |
| 3 | DEPT-CODE | DB2 EMP-MASTER DEPT-CODE | |
| 4 | BASE-SALARY | DB2 EMP-MASTER BASE-SALARY | |
| 5 | OVT-AMOUNT | 時間外手当計算結果 | |
| 6 | HOLIDAY-AMOUNT | 0で固定 | |
| 7 | ABSENT-DEDUCT | 欠勤控除額計算結果 | |
| 8 | GROSS-PAYMENT | 支給総額計算結果 | |
| 9 | OVT-HOURS | DB2 OVT-MONTHLY SUM結果 | |
| 10 | ABSENT-HOURS | R02TOTAL-HOURS | |
| 11 | ATTEND-TYPE | WRK-ATTEND-TYPE | |
| 12 | ALLOWANCE-TYPE | WRK-ALLOWANCE-TYPE | |
| 13 | FILLER | — | 131B |
### 出力ファイル2W04/ERROR-LOG
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | ERR-CATEGORY | 'DB-ERR'で固定 | |
| 2 | ERR-DETAIL | R02EMP-ID | エラー発生社員番号 |