Files
cobol-tna-system/詳細設計書/詳細設計書_KIN07DAI.md

7.4 KiB
Raw Permalink Blame History

詳細設計書

基本情報

# 項目 内容
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呼出し

出力レコード定義

出力ファイル1W01: 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 予備領域

出力ファイル2W02: ERROR-LOG

No 項目名 設定元 備考
1 WEERR-CATEGORY '99'固定 エラー区分(未使用だが予約)
2 WEERR-DETAIL STRING編集 エラー詳細(SUB05TIM異常時等)