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

7.1 KiB
Raw Blame History

詳細設計書

基本情報

# 項目 内容
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 エラー発生社員番号