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

5.4 KiB
Raw Permalink Blame History

詳細設計書

基本情報

# 項目 内容
1 システム名 勤怠休暇管理システム
2 プログラムID KIN05MAT
3 プログラム名 打刻休暇照合処理
4 PGMタイプ メイン
5 PGMパターン マッチング(1:N)
6 機能概要 EDITED-PUNCH(打刻側、R01)とLEAVE-DAILY(休暇側、R02)を社員番号+日付キーで照合し、KIN-LEAVE(160B)に出力する。R01側が主駆動で、1件の打刻に対してN件の休暇レコードが存在しうる(1:N)。
7 マッチング制御はEVALUATE TRUEで3分岐:R01key<R02key(打刻のみ)、R01key=R02key(マッチ)、R01key>R02key(休暇のみスキップ)。
8 マッチ時は休暇種別優先順位(01>02>03>04)で最適な1件を選定し、KIN-LEAVEに出力する。

前提条件

NO 対象ファイル 条件
1 KIN04W01(R01) 社員番号+日付で昇順ソート済み(JCL SORT KINJ022
2 KIN02W01(R02) 社員番号+日付で昇順ソート済み(KIN03EXP出力保証)

使用ファイル一覧

NO 使用ファイル/DB名 識別子 DD名 I/O COPY群 形式 ブロック レコード長 媒体 備考
1 EDITED-PUNCH R01 KIN04W01 I KIN04REC FB 80 PS 打刻側、主駆動
2 LEAVE-DAILY R02 KIN02W01 I KIN02REC FB 80 PS 休暇側、N件あり
3 KIN-LEAVE W01 KIN05W01 O KIN03REC FB 160 PS 照合結果

ファイルステータス

ファイル DD名 ファイルステータス項目
EDITED-PUNCH(R01) KIN04W01 WS-R01-STATUS
LEAVE-DAILY(R02) KIN02W01 WS-R02-STATUS
KIN-LEAVE(W01) KIN05W01 WS-W01-STATUS

キー項目一覧

NO ファイル名 ソート条件(キー項目) キー条件(マッチング/キーブレイク)
1 EDITED-PUNCH 社員番号(1-8B)+日付(9-16B) 主キー(R01)
2 LEAVE-DAILY 社員番号(1-8B)+日付(9-16B) 従キー(R02)、N件あり

使用モジュール一覧

NO 機能 プログラムID 使用COPY名
1 メッセージ編集出力SUB SUB02MSG ZANMSGAC
2 ABEND処理SUB SUB03END ZANENDAC

処理詳細

1.初期処理(1000ITTSOR
  1-1.開始メッセージ出力
    【メッセージ編集】
    メッセージ番号:1(開始メッセージ)
  1-2.コンパイル日時出力
    【メッセージ編集】
    メッセージ番号:33(コンパイル日時)
    PARM1:コンパイル日時
    PARM2'COMPILED'
  1-3.ワークエリアの初期化
  1-4.使用ファイルのオープン(R01/R02:入力、W01:出力)
  1-4-1.OPENチェック
     各ファイルのFILE STATUS(WS-R01-STATUS/WS-R02-STATUS/WS-W01-STATUS)を確認
     ステータス≠00の場合、SUB03END(ZANENDAC)で異常終了
  1-5.R01を読み込む。(1100R01INNSOR)(1回目)
  1-6.R02を読み込む。(1200R02INNSOR)(1回目)

2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
  2-1.R02キー設定
    R02が有効な場合、R02レコードからWRK-R02KEYを設定。
  2-2.EVALUATE TRUE マッチング制御
    WHEN R01key < R02key OR R02-EOF:
      打刻のみ(休暇なし)→ KIN-LEAVE出力(LEAVE-TYPE='99', HOURS=0)
      R01を次へ読み込み
    WHEN R01key = R02key:
      マッチング処理実行(2020MATCHSOR)
      R01を次へ読み込み
      R02も次へ読み込み(N:1の場合はループ内で全R02処理)
    WHEN R01key > R02key:
      R02のみ(該当打刻なし)→ スキップ
      R02を次へ読み込み
  2-3.上記をR01終了まで繰り返す。

3.マッチング処理(2020MATCHSOR)
  R02がEOFになるか、キーが変わるまで、以下のループを実行:
  3-1.現在のR02レコードから休暇種別・時刻・申請IDを取得
  3-2.選定ロジック:
    - 初回 → ベストとして保持
    - 既にベストあり → 優先順位で比較(01>02>03>04)
    - 同種別 → 申請IDの小さい方を採用
  3-3.R02を次へ読み込み
  3-4.キーが一致しなくなるかR02-EOFまで3-1〜3-3を繰り返す
  3-5.ベストの休暇情報をKIN-LEAVEに出力
    ベストがない場合は'99'として出力

4.終了処理(3000STPSOR)
  4-1.入出力ファイルのクローズ
  4-2.入出力件数出力メッセージ出力
  4-3.終了メッセージ出力

出力レコード定義

出力ファイル(W01/KIN-LEAVE KIN03REC 160B FB

No 項目名 設定元 備考
1 EMP-ID R01EMP-ID 打刻情報(1-80BはEDITED-PUNCHと同一)
2 WORK-DATE R01WORK-DATE
3 STR-TIME R01STR-TIME
4 END-TIME R01END-TIME
5 DEPT-ID R01DEPT-ID
6 TERMINAL R01TERMINAL
7-13 休暇情報 マッチ結果 81-160B
7 LEAVE-TYPE 選定結果 '01'〜'04' or '99'
8 LEAVE-STR-TIME 選定したR02START-TIME
9 LEAVE-END-TIME 選定したR02END-TIME
10 LEAVE-HOURS ZERO KIN07DAIで後に計算
11 APPLICATION-ID 選定したR02APPL-ID 該当なしはZERO