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
This commit is contained in:
qiuqiuqiu
2026-07-09 08:09:59 +08:00
parent 02dd36e094
commit 75475b3fa1
43 changed files with 7212 additions and 41 deletions
+162
View File
@@ -0,0 +1,162 @@
# 詳細設計書
## 基本情報
| # | 項目 | 内容 |
|---|------|------|
| 1 | システム名 | 給与計算システム |
| 2 | プログラムID | KYU09MRG |
| 3 | プログラム名 | 支給データ結合処理 |
| 4 | PGMタイプ | メイン |
| 5 | PGMパターン | MERGE(複数ファイル結合) |
| 6 | 機能概要 | SALARY-NETとBONUS-DATAをMERGE文で社員番号昇順に結合する。 |
| 7 | | OUTPUT PROCEDURE内で同一社員の給与(TYPE=S)と賞与(TYPE=B)を統合し、 |
| 8 | | 支給データ(PAYMENT-DATA)として出力する。 |
※PGMタイプ:メイン、サブ
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
### 前提条件
| NO | 対象ファイル | 条件 |
|----|-------------|------|
| 1 | SALARY-NET(KYU09M01) | 社員番号(EMP-ID)昇順であること(MERGE文で内部ソート) |
| 2 | BONUS-DATA(KYU09M02) | 社員番号(EMP-ID)昇順であること(MERGE文で内部ソート) |
| 3 | MERGE作業ファイル | ソート前処理不要。MERGE文が自ら2ファイルを結合する。 |
### 使用ファイル一覧
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
| 1 | SALARY-NET | M01 | KYU09M01 | I | KYU04REC | F | | 200 | PS | REC-TYPE='S' |
| 2 | BONUS-DATA | M02 | KYU09M02 | I | KYU04REC | F | | 200 | PS | REC-TYPE='B' |
| 3 | WORK-FILE | M99 | KYU09M99 | I | 自前(200B) | F | | 200 | PS | MERGE作業用SD |
| 4 | PAYMENT-DATA | W01 | KYU09W01 | O | KYU06REC | F | | 200 | PS | |
| 5 | ERROR-LOG | W02 | KYU09W02 | O | KYU99REC | VB | | 200 | PS | |
### キー項目一覧
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|----|-----------|---------------------|-------------------------------------------|
| 1 | SALARY-NET | 社員番号(昇順) | MERGEキー(社員番号) |
| 2 | BONUS-DATA | 社員番号(昇順) | MERGEキー(社員番号) |
### 使用モジュール一覧
| 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.出力ファイルのオープン
W01OUTFIL(OUTPUT)、W02OUTFIL(OUTPUT)をOPEN
(入力ファイルはMERGE文が自動OPENするため明示OPEN不要)
2.MERGE出力処理(2000MRGOUTSOR
2-1.MERGE文実行(0000MAJCOLSOR内)
MERGE MERGE-FILE
ON ASCENDING KEY MERGE-EMP-ID
USING SALARY-FILE BONUS-FILE
OUTPUT PROCEDURE 2000MRGOUTSOR
給与(SALARY-NET)と賞与(BONUS-DATA)を社員番号昇順で結合。
結合結果はOUTPUT PROCEDUREに渡される。
2-2.RETURNでMERGE結果取得ループ
PERFORM WITH TEST AFTER UNTIL WRK-MERGE-EOF-Y
RETURN MERGE-FILE INTO MERGE-REC
AT END SET WRK-MERGE-EOF-Y TO TRUE
2-2-1.現社員番号をWRK-CURRENT-EMPに設定
2-2-2.WRK-SALARY-AMOUNTWRK-BONUS-AMOUNTをZERO初期化
2-2-3.同一社員内ループ(WRK-CURRENT-EMP ≠ MERGE-EMP-IDまで)
2-2-3-1.MERGE-REC-TYPE = 'S'(給与)の場合
MERGE-PAY-AMOUNT → WRK-SALARY-AMOUNT
MERGE-GROSS-PAYMENT → WRK-BANK-CODE
MERGE-EMP-ID(1:4) → WRK-ACCOUNT-NO
2-2-3-2.上記以外(賞与)の場合
MERGE-PAY-AMOUNT → WRK-BONUS-AMOUNT
2-2-3-3.RETURNで次レコード取得
AT END → HIGH-VALUES設定、EXIT PERFORM
2-2-4.給与+賞与合算
ADD WRK-SALARY-AMOUNT TO WRK-BONUS-AMOUNT
GIVING WRK-TOTAL-PAYMENT
2-2-5.2100PAYOUTSORでPAYMENT-DATA出力
2-2-5-1.W01OUTREC初期化
2-2-5-2.WRK-CURRENT-EMP → W01EMP-ID
2-2-5-3.'T' → W01PAY-TYPE(支給合算)
2-2-5-4.WRK-TOTAL-PAYMENT → W01AMOUNT
2-2-5-5.WRK-BANK-CODE → W01BANK-CODE
2-2-5-6.WRK-ACCOUNT-NO → W01ACCOUNT-NO
2-2-5-7.W01OUTRECをWRITE
2-2-5-8.CUN-W01OUTを+1
3.ENTRY代替エントリポイント(0010DIRECTSOR
3-1.'KYU09ENT'で直接呼出し可能
3-2.直接結合モードで簡易エラーログ出力
【エラー出力】
ERR-DETAIL'DIRECT ENTRY'
4.終了処理(3000STPSOR
4-1.出力ファイルのクローズ
W01OUTFIL、W02OUTFILをCLOSE
4-2.入出力件数出力メッセージ出力
【入力メッセージ編集】
メッセージ番号:6(入力件数メッセージ)
PARM1'MERGE-FILE'
PARM2CUN-W01OUT
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'KYU09W01'
PARM2CUN-W01OUT
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'KYU09W02'
PARM2CUN-W02OUT
4-3.終了メッセージ出力
【メッセージ編集】
メッセージ番号:2(終了メッセージ)
```
---
## 出力レコード定義
### 出力ファイル1W01/PAYMENT-DATA
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | EMP-ID | WRK-CURRENT-EMPを設定 | X(008) |
| 2 | PAY-TYPE | 'T'(支給合算)固定 | X(001) |
| 3 | AMOUNT | WRK-TOTAL-PAYMENT(給与+賞与)を設定 | 9(009) |
| 4 | BANK-CODE | WRK-BANK-CODE(給与レコードのGROSS-PAYMENT)を設定 | X(004) |
| 5 | ACCOUNT-NO | WRK-ACCOUNT-NOEMP-ID(1:4))を設定 | 9(008) |
| 6 | FILLER | SPACE | X(170) |
### 出力ファイル2W02/ERROR-LOG
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | ERR-CATEGORY | 該当エラー種別 | X(008) |
| 2 | ERR-DETAIL | STRINGで編集 | エラー内容 |