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

163 lines
6.6 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 | 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で編集 | エラー内容 |