7.4 KiB
7.4 KiB
詳細設計書
基本情報
| # | 項目 | 内容 |
|---|---|---|
| 1 | システム名 | 勤怠休暇管理システム |
| 2 | プログラムID | KIN07DAI |
| 3 | プログラム名 | 日別勤怠計算処理 |
| 4 | PGMタイプ | メイン |
| 5 | PGMパターン | マッチング(1:N) + EVALUATE 4パターン分岐 |
| 6 | 機能概要 | WORK-DAY-FILE(主駆動)とKIN-LEAVE/LEAVE-DAILYを社員番号+日付で照合し、 |
| 7 | 4パターンに分岐して日別勤怠記録(DAILY-RECORD)を出力する。 | |
| 8 | パターンA: 打刻+休暇あり / B: 打刻のみ / C: 休暇のみ / D: 欠勤 | |
| 9 | 休暇時間はランチ除外+0.1h切上丸め。MULTIPLY/SUBTRACT時間計算。 |
前提条件
| NO | 対象ファイル | 条件 |
|---|---|---|
| 1 | R01(WORK-DAY-FILE) | 社員番号+日付の昇順でソートされていること |
| 2 | R02(KIN-LEAVE) | 社員番号+日付の昇順でソートされていること |
| 3 | R03(LEAVE-DAILY) | 社員番号+日付の昇順でソートされていること |
使用ファイル一覧
| NO | 使用ファイル名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | WORK-DAY-FILE | R01 | KIN07R01 | I | KIN06REC | FB | 80 | PS | 出勤日カレンダー(COPY句定義書.md参照) | |
| 2 | KIN-LEAVE | R02 | KIN07R02 | I | KIN03REC | FB | 160 | PS | 打刻+休暇照合結果(COPY句定義書.md参照) | |
| 3 | LEAVE-DAILY | R03 | KIN07R03 | I | KIN02REC | FB | 80 | PS | 日別展開休暇(COPY句定義書.md参照) | |
| 4 | DAILY-RECORD | W01 | KIN07W01 | O | KIN07REC | FB | 200 | PS | 日別勤怠計算結果(COPY句定義書.md参照) | |
| 5 | ERROR-LOG | W02 | KIN07E01 | O | KIN05REC | VB | 200 | PS | エラーログ(COPY句定義書.md参照) |
キー項目一覧
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|---|---|---|---|
| 1 | ファイルR01 | 社員番号>日付(昇順) | 社員番号+日付(マッチングキー) |
| 2 | ファイルR02 | 社員番号>日付(昇順) | 社員番号+日付(マッチングキー) |
| 3 | ファイルR03 | 社員番号>日付(昇順) | 社員番号+日付(マッチングキー) |
使用モジュール一覧
| NO | 機能 | プログラムID | 使用COPY名 |
|---|---|---|---|
| 1 | メッセージ編集出力 | SUB02MSG | ZANMSGAC |
| 2 | ABEND処理 | SUB03END | ZANENDAC |
| 3 | 時刻丸め計算(0.1h切上) | SUB05TIM | ZANTIMAC |
処理詳細
1.初期処理 (1000ITTSOR)
1-1.開始メッセージ出力
【メッセージ編集】
メッセージ番号:1(開始メッセージ)
1-2.コンパイル日時出力
【メッセージ編集】
メッセージ番号:33(コンパイル日時)
PARM1:コンパイル日時
PARM2:'COMPILED'
1-3.ワークエリアの初期化(INITIALIZE WRKARA)
1-4.入出力ファイルOPEN
INPUT: R01INNFIL, R02INNFIL, R03INNFIL
OUTPUT: W01OUTFIL, W02OUTFIL
1-5.R01を読み込む。(1100R01INNSOR)(1回目)
1-6.R02を読み込む。(1200R02INNSOR)(1回目)
1-7.R03を読み込む。(1300R03INNSOR)(1回目)
2.主処理 (2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
2-1.キー比較:R01とR02/R03のキーを比較し、PATTERN-NUMを設定
【MULTIPLY使用】時間→分換算時にMULTIPLY文を使用
【SUBTRACT使用】ランチ除外時にSUBTRACT文を使用
2-2.パターン判定(EVALUATE)
EVALUATE PATTERN-NUM
WHEN 1 → PERFORM 6100PATTERNASOR (打刻+休暇)
WHEN 2 → PERFORM 6200PATTERNSOR (打刻のみ)
WHEN 3 → PERFORM 6300PATTERNSOR (休暇のみ)
WHEN 4 → PERFORM 6400PATTERNSOR (欠勤)
END-EVALUATE
2-3.【パターンA(6100PATTERNASOR)】:R01+R02+R03(打刻+休暇)
2-3-1.打刻情報設定:R02の出勤時刻/退勤時刻をDAILY-RECORDに設定
2-3-2.休暇時間計算:R03の開始時刻/終了時刻からランチ除外+丸め計算
MULTIPLY: WRK-START-HOUR × 60 GIVING WRK-START-MIN(時→分変換)
SUBTRACT: ランチ時間(60分)をWRK-START-MINから除外
2-3-3.SUB05TIM呼出(モード1:0.1h切上)
【CALL 'SUB05TIM'】
CALL 'SUB05TIM' USING T01TIMPAR
T01TIMHRS=WRK-LEAVE-HOURS, T01TIMRRC=1(0.1h切上モード)
T01TIMOUTをWRK-LEAVE-HOURSに退避
2-3-4.DAILY-RECORD出力
2-3-5.R01/R02/R03次読込
2-4.【パターンB(6200PATTERNSOR)】:R01+R02のみ(打刻のみ)
2-4-1.打刻情報設定:R02の出勤時刻/退勤時刻をDAILY-RECORDに設定
2-4-2.休暇時間=0, 欠勤=0
2-4-3.DAILY-RECORD出力
2-4-4.R01/R02次読込(R03はキー不一致のため読込済み)
2-5.【パターンC(6300PATTERNSOR)】:R01+R03のみ(休暇のみ)
2-5-1.打刻情報=0000
2-5-2.休暇時間計算:ランチ除外+丸め(所定労働時間8h上限)
MULTIPLY/SUBTRACT使用(パターンAと同様)
WRK-LEAVE-HOURS > 8.0 → 8.0に制限
2-5-3.SUB05TIM呼出(モード1:0.1h切上)
2-5-4.DAILY-RECORD出力
2-5-5.R01/R03次読込(R02はキー不一致のため読込済み)
2-6.【パターンD(6400PATTERNSOR)】:R01のみ(欠勤)
2-6-1.打刻情報=0000, 休暇=0
2-6-2.未申請欠勤=8.0h
2-6-3.DAILY-RECORD出力
2-6-4.R01次読込(R02/R03はキー不一致のため読込済み)
2-7.各パターンセクションはPERFORMで呼び出され、EXITで自動復帰
主処理ループ(2000MAJSOR)に戻り、次のR01レコードを処理する。
3.終了処理(3000STPSOR)
3-1.入出力ファイルのクローズ
3-2.入出力件数出力
【メッセージ編集】
メッセージ番号:6(入力件数)
PARM1:該当ファイルDD名
PARM2:該当ファイル件数
メッセージ番号:7(出力件数)
PARM1:該当ファイルDD名
PARM2:該当ファイル件数
3-3.終了メッセージ出力
【メッセージ編集】
メッセージ番号:2(終了メッセージ)
4.メッセージ出力(4000MSGOUTSOR)
SUB02MSG呼出し
9.ABEND処理(9999ABDSOR)
SUB03END呼出し
出力レコード定義
出力ファイル1(W01: DAILY-RECORD)
| No | 項目名 | 設定元 | 備考 |
|---|---|---|---|
| 1 | SD-EMP-ID | SW-EMP-ID(R01) | 社員番号 |
| 2 | SD-DATE | SW-DATE(R01) | YYYYMMDD |
| 3 | SD-TIME-IN | SR-STR-TIME(R02) or '0000' | 出勤時刻(パターンC/Dは0000) |
| 4 | SD-TIME-OUT | SR-END-TIME(R02) or '0000' | 退勤時刻(パターンC/Dは0000) |
| 5 | SD-ANNUAL-H | R03(LEAVE-TYPE='01')より計算 | 年休使用時間(ランチ除外+丸め) |
| 6 | SD-PERSONAL-H | R03(LEAVE-TYPE='02')より計算 | 事假時間 |
| 7 | SD-OFFICIAL-H | R03(LEAVE-TYPE='03')より計算 | 因公特批假時間 |
| 8 | SD-SICK-H | R03(LEAVE-TYPE='04')より計算 | 病欠時間 |
| 9 | SD-ABSENT-H | パターンDのみ8.0固定 | 未申請欠勤時間 |
| 10 | SD-FILLER | SPACE | 予備領域 |
出力ファイル2(W02: ERROR-LOG)
| No | 項目名 | 設定元 | 備考 |
|---|---|---|---|
| 1 | WEERR-CATEGORY | '99'固定 | エラー区分(未使用だが予約) |
| 2 | WEERR-DETAIL | STRING編集 | エラー詳細(SUB05TIM異常時等) |