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

129 lines
5.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 詳細設計書
## 基本情報
| # | 項目 | 内容 |
|---|------|------|
| 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 |