# 詳細設計書 ## 基本情報 | # | 項目 | 内容 | |---|------|------| | 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) 各項目をW03OUTREC(KYU03REC)にMOVEしWRITE W03OUT件数カウンタ(CUN-W03OUT)を+1 2-6.R02を読み込む。(1100R02INNSOR)(2件目以降) 3.終了処理(3000STPSOR) 3-1.入出力ファイルのクローズ 3-2.入出力件数出力メッセージ出力 【入力メッセージ編集】 メッセージ番号:6(入力件数メッセージ) PARM1:'KYU04R02' PARM2:CUN-R02INN 【出力メッセージ編集】 メッセージ番号:7(出力件数メッセージ) PARM1:'KYU04W03' PARM2:CUN-W03OUT 【出力メッセージ編集】 メッセージ番号:7(出力件数メッセージ) PARM1:'KYU04W04' PARM2:CUN-W04OUT 3-3.終了メッセージ出力 【メッセージ編集】 メッセージ番号:2(終了メッセージ) ``` --- ## 出力レコード定義 ### 出力ファイル1(W03/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 | ### 出力ファイル2(W04/ERROR-LOG) | No | 項目名 | 設定元 | 備考 | |----|--------|--------|------| | 1 | ERR-CATEGORY | 'DB-ERR'で固定 | | | 2 | ERR-DETAIL | R02EMP-ID | エラー発生社員番号 |