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

168 lines
7.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 | 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異常時等) |