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

6.6 KiB
Raw Blame History

詳細設計書

基本情報

# 項目 内容
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で編集 エラー内容