docs: add detailed design documents (詳細設計書)
This commit is contained in:
@@ -0,0 +1,326 @@
|
||||
# ファイル定義書
|
||||
|
||||
## 変更履歴
|
||||
|
||||
| No | 変更内容 | 担当者 | 変更日 | 承認者 | 備考 |
|
||||
|----|---------|--------|--------|--------|------|
|
||||
| 1 | 新規作成 | AI | 2026/06/15 | | COPY10部品を一括定義 |
|
||||
|
||||
---
|
||||
|
||||
# ZAN01REC — 加班申請レコード
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| OVT-VALID / OVT-CANCEL / OVT-SORTED / OVT-CSORT / OVT-VSORT / OVT-NODUP / OVT-CHECKED | ZAN01REC | PS | FB | 80 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 03 | 申請番号 | (A)APPL-ID | X(8) | 8 | | 1 | | | YYYYMMDD+SEQ |
|
||||
| 2 | 03 | 社員番号 | (A)EMP-ID | 9(8) | 8 | | 9 | | | |
|
||||
| 3 | 03 | 申請日 | (A)APPL-DATE | 9(8) | 8 | | 17 | | | YYYYMMDD |
|
||||
| 4 | 03 | 開始時刻 | (A)START-TIME | 9(4) | 4 | | 25 | | | HHMM |
|
||||
| 5 | 03 | 終了時刻 | (A)END-TIME | 9(4) | 4 | | 29 | | | HHMM |
|
||||
| 6 | 03 | ステータス | (A)STATUS | X(1) | 1 | | 33 | | | 0:有効/1:確定/9:取消 |
|
||||
| 7 | 03 | 残業種別 | (A)OVT-TYPE | X(1) | 1 | | 34 | | | W:平日/H:休日 |
|
||||
| 8 | 03 | 予約 | (A)FILLER | X(46) | 46 | | 35 | | | |
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | プレフィックス | 用途 | I/O |
|
||||
|-----------|--------------|------|-----|
|
||||
| ZAN01CHK | W01 | OVT-VALID出力(STATUS=0/1) | O |
|
||||
| ZAN01CHK | W02 | OVT-CANCEL出力(STATUS=9) | O |
|
||||
| ZAN02CHK | R01 | OVT-VSORT入力 | I |
|
||||
| ZAN02CHK | W01 | OVT-NODUP出力 | O |
|
||||
| ZAN03CHK | R01 | OVT-NODUP入力 | I |
|
||||
| ZAN03CHK | W01 | OVT-CHECKED出力 | O |
|
||||
| ZAN04MAT | R01 | OVT-SORTED入力(有効申請) | I |
|
||||
| ZAN04MAT | R02 | OVT-CSORT入力(取消申請) | I |
|
||||
|
||||
---
|
||||
|
||||
# ZAN02REC — マッチング結果レコード
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| OVT-MATCHED | ZAN02REC | PS | FB | 80 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 03 | 申請番号 | (A)APPL-ID | X(8) | 8 | | 1 | | | |
|
||||
| 2 | 03 | 社員番号 | (A)EMP-ID | 9(8) | 8 | | 9 | | | |
|
||||
| 3 | 03 | 申請日 | (A)APPL-DATE | 9(8) | 8 | | 17 | | | YYYYMMDD |
|
||||
| 4 | 03 | 開始時刻 | (A)START-TIME | 9(4) | 4 | | 25 | | | HHMM |
|
||||
| 5 | 03 | 終了時刻 | (A)END-TIME | 9(4) | 4 | | 29 | | | HHMM |
|
||||
| 6 | 03 | ステータス | (A)STATUS | X(1) | 1 | | 33 | | | |
|
||||
| 7 | 03 | 残業種別 | (A)OVT-TYPE | X(1) | 1 | | 34 | | | W:平日/H:休日 |
|
||||
| 8 | 03 | 処理番号 | (A)PROC-SEQ | 9(2) | 2 | | 35 | | | 01固定 |
|
||||
| 9 | 03 | 予約 | (A)FILLER | X(44) | 44 | | 37 | | | |
|
||||
|
||||
### ZAN01RECとの差分
|
||||
|
||||
| 項目 | ZAN01REC | ZAN02REC |
|
||||
|------|----------|----------|
|
||||
| 追加 | — | PROC-SEQ(9(2)) |
|
||||
| FILLER | X(46) | X(44) |
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | プレフィックス | 用途 | I/O |
|
||||
|-----------|--------------|------|-----|
|
||||
| ZAN04MAT | W01 | OVT-MATCHED出力 | O |
|
||||
|
||||
---
|
||||
|
||||
# ZAN03REC — 集約結果レコード
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| OVT-AGGREGATED | ZAN03REC | PS | FB | 80 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 03 | 申請番号 | (A)APPL-ID | X(8) | 8 | | 1 | | | |
|
||||
| 2 | 03 | 社員番号 | (A)EMP-ID | 9(8) | 8 | | 9 | | | |
|
||||
| 3 | 03 | 申請日 | (A)APPL-DATE | 9(8) | 8 | | 17 | | | YYYYMMDD |
|
||||
| 4 | 03 | 開始時刻 | (A)START-TIME | 9(4) | 4 | | 25 | | | HHMM |
|
||||
| 5 | 03 | 終了時刻 | (A)END-TIME | 9(4) | 4 | | 29 | | | HHMM |
|
||||
| 6 | 03 | 残業時間 | (A)OVT-HOURS | 9(4)V9(1) | 5 | | 33 | | | HH.h(0.1h単位) |
|
||||
| 7 | 03 | 残業種別 | (A)OVT-TYPE | X(1) | 1 | | 38 | | | W:平日/H:休日 |
|
||||
| 8 | 03 | 予約 | (A)FILLER | X(42) | 42 | | 39 | | | |
|
||||
|
||||
### ZAN01RECとの差分
|
||||
|
||||
| 項目 | ZAN01REC | ZAN03REC |
|
||||
|------|----------|----------|
|
||||
| 削除 | STATUS | — |
|
||||
| 追加 | — | OVT-HOURS(9(4)V9(1)) |
|
||||
| FILLER | X(46) | X(42) |
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | プレフィックス | 用途 | I/O | 備考 |
|
||||
|-----------|--------------|------|-----|------|
|
||||
| ZAN05CAL | (未定) | 集約結果出力 | O | 未実装 |
|
||||
|
||||
---
|
||||
|
||||
# ZAN04REC — DBCLEAN対象レコード
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| OVT-DBCLEAN | ZAN04REC | PS | FB | 80 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 03 | 申請番号 | (A)APPL-ID | X(8) | 8 | | 1 | | | DB削除対象申請番号 |
|
||||
| 2 | 03 | 予約 | (A)FILLER | X(72) | 72 | | 9 | | | |
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | プレフィックス | 用途 | I/O |
|
||||
|-----------|--------------|------|-----|
|
||||
| ZAN04MAT | W02 | OVT-DBCLEAN出力(APPL-IDのみ設定) | O |
|
||||
|
||||
---
|
||||
|
||||
# ZAN05REC — エラーログレコード
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| ERROR-LOG | ZAN05REC | PS | VB | 200 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 03 | エラーカテゴリ | (A)ERR-CATEGORY | 9(2) | 2 | | 1 | | | 01:項目CHK/02:重複/03:打刻不突合/03:取消監査 |
|
||||
| 2 | 03 | エラー詳細 | (A)ERR-DETAIL | X(198) | 198 | | 3 | | | STRING編集値 |
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | プレフィックス | エラーカテゴリ | I/O |
|
||||
|-----------|--------------|---------------|-----|
|
||||
| ZAN01CHK | W03 | 01(項目チェックエラー) | O |
|
||||
| ZAN02CHK | W02 | 02(時間重複エラー) | O |
|
||||
| ZAN03CHK | W02 | 03(打刻不突合エラー) | O |
|
||||
| ZAN04MAT | W03 | 03(取消マッチ監査証跡) | O |
|
||||
|
||||
---
|
||||
|
||||
# ZANDATAC — SUB01DAT 運用日付取得用連絡領域
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| SUB01DAT連絡領域 | ZANDATAC | — | — | 10 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 01 | 運用日付パラメタ | D01UBSPAR | | | | 1 | | | CALL USING対象 |
|
||||
| 2 | 03 | 復帰コード | D01FKICOD | S9(4) COMP | 2 | | 1 | | D01UBSPAR | 0000:正常 |
|
||||
| 3 | 03 | 運用日付 | D01UBSUDATE | 9(8) | 8 | | 3 | | D01UBSPAR | YYYYMMDD |
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | 呼出方法 | 備考 |
|
||||
|-----------|---------|------|
|
||||
| ZAN01CHK | CALL 'SUB01DAT' USING D01UBSPAR | 初期処理 |
|
||||
| ZAN02CHK | CALL 'SUB01DAT' USING D01UBSPAR | 初期処理 |
|
||||
| ZAN04MAT | CALL 'SUB01DAT' USING D01UBSPAR | 初期処理 |
|
||||
|
||||
※ ZAN03CHKはFUNCTION CURRENT-DATEを使用し本COPY未使用
|
||||
|
||||
---
|
||||
|
||||
# ZANMSGAC — SUB02MSG メッセージ出力用連絡領域
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| SUB02MSG連絡領域 | ZANMSGAC | — | — | 303 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 01 | メッセージパラメタ | M00MHOPAR | | | | 1 | | | CALL USING対象 |
|
||||
| 2 | 03 | メッセージ番号 | M00MSGCOD | 9(3) | 3 | | 1 | | M00MHOPAR | |
|
||||
| 3 | 03 | パラメータ1 | M00UMKDATS22-01 | X(30) | 30 | | 4 | | M00MHOPAR | |
|
||||
| 4 | 03 | パラメータ2 | M00UMKDATS22-02 | X(30) | 30 | | 34 | | M00MHOPAR | |
|
||||
| 5 | 03 | パラメータ3 | M00UMKDATS22-03 | X(30) | 30 | | 64 | | M00MHOPAR | |
|
||||
| 6 | 03 | パラメータ4 | M00UMKDATS22-04 | X(30) | 30 | | 94 | | M00MHOPAR | |
|
||||
| 7 | 03 | パラメータ5 | M00UMKDATS22-05 | X(30) | 30 | | 124 | | M00MHOPAR | |
|
||||
| 8 | 03 | パラメータ6 | M00UMKDATS22-06 | X(30) | 30 | | 154 | | M00MHOPAR | |
|
||||
| 9 | 03 | パラメータ7 | M00UMKDATS22-07 | X(30) | 30 | | 184 | | M00MHOPAR | |
|
||||
| 10 | 03 | パラメータ8 | M00UMKDATS22-08 | X(30) | 30 | | 214 | | M00MHOPAR | |
|
||||
| 11 | 03 | パラメータ9 | M00UMKDATS22-09 | X(30) | 30 | | 244 | | M00MHOPAR | |
|
||||
| 12 | 03 | パラメータ10 | M00UMKDATS22-10 | X(30) | 30 | | 274 | | M00MHOPAR | |
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | 呼出方法 | 備考 |
|
||||
|-----------|---------|------|
|
||||
| ZAN01CHK | CALL 'SUB02MSG' USING M00MHOPAR | |
|
||||
| ZAN02CHK | CALL 'SUB02MSG' USING M00MHOPAR | |
|
||||
| ZAN03CHK | CALL 'SUB02MSG' USING M00MHOPAR | |
|
||||
| ZAN04MAT | CALL 'SUB02MSG' USING M00MHOPAR | |
|
||||
|
||||
---
|
||||
|
||||
# ZANENDAC — SUB03END ABEND処理用連絡領域
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| SUB03END連絡領域 | ZANENDAC | — | — | 3 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 01 | ABENDパラメタ | E01ABDPAR | | | | 1 | | | CALL USING対象 |
|
||||
| 2 | 03 | ABENDコード | E01ABDCOD | 9(3) | 3 | | 1 | | E01ABDPAR | 999:汎用 |
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | 呼出方法 |
|
||||
|-----------|---------|
|
||||
| ZAN01CHK | CALL 'SUB03END' USING E01ABDPAR |
|
||||
| ZAN02CHK | CALL 'SUB03END' USING E01ABDPAR |
|
||||
| ZAN03CHK | CALL 'SUB03END' USING E01ABDPAR |
|
||||
| ZAN04MAT | CALL 'SUB03END' USING E01ABDPAR |
|
||||
|
||||
---
|
||||
|
||||
# ZANCHKAC — SUB04CHK 項目チェック用連絡領域
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| SUB04CHK連絡領域 | ZANCHKAC | — | — | 92 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 01 | 項目チェックパラメタ | C01CHKPAR | | | | 1 | | | CALL USING対象 |
|
||||
| 2 | 03 | チェックタイプ | C01CHKTYP | X(8) | 8 | | 1 | | C01CHKPAR | DATE/TIME/NUM/EMPID |
|
||||
| 3 | 03 | チェック対象データ | C01CHKDAT | X(80) | 80 | | 9 | | C01CHKPAR | |
|
||||
| 4 | 03 | 復帰コード | C01CHKRRC | 9(4) | 4 | | 89 | | C01CHKPAR | 0000:正常/0001:日付/0002:時刻/0003:数字/0004:社員番号/9999:不明 |
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | 呼出方法 | 備考 |
|
||||
|-----------|---------|------|
|
||||
| ZAN01CHK | CALL 'SUB04CHK' USING C01CHKPAR | 日付/時刻チェック |
|
||||
|
||||
---
|
||||
|
||||
# ZANTIMAC — SUB05TIM 時刻丸め用連絡領域
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| SUB05TIM連絡領域 | ZANTIMAC | — | — | 14 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 01 | 時刻丸めパラメタ | T01TIMPAR | | | | 1 | | | CALL USING対象 |
|
||||
| 2 | 03 | 入力時間 | T01TIMHRS | 9(4)V9(1) | 5 | | 1 | | T01TIMPAR | HH.h |
|
||||
| 3 | 03 | 出力時間 | T01TIMOUT | 9(4)V9(1) | 5 | | 6 | | T01TIMPAR | 丸め後 |
|
||||
| 4 | 03 | 丸めモード | T01TIMRRC | 9(4) | 4 | | 11 | | T01TIMPAR | 0:0.5h切上/1:0.1h切上/2:0.1h切捨/3:四捨五入 |
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | 呼出方法 | 備考 |
|
||||
|-----------|---------|------|
|
||||
| — | — | ZAN05CALで使用予定(未実装) |
|
||||
+232
@@ -0,0 +1,232 @@
|
||||
# DB定義書
|
||||
|
||||
## 変更履歴
|
||||
|
||||
| No | 変更内容 | 担当者 | 変更日 | 承認者 | 備考 |
|
||||
|----|---------|--------|--------|--------|------|
|
||||
| 1 | 新規作成(全8テーブル) | AI | 2026/06/23 | | サブシステムA(6) + B(2) |
|
||||
|
||||
---
|
||||
|
||||
# EMP_MASTER — 社員マスタ
|
||||
|
||||
## Layout(テーブル定義)
|
||||
|
||||
### DB基本情報
|
||||
|
||||
| DB名 | DB ID | COPY ID | INDEX |
|
||||
|------|-------|---------|-------|
|
||||
| 勤怠休暇管理DB | EMP_MASTER | — | PK: EMP_ID |
|
||||
|
||||
### カラム定義
|
||||
|
||||
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|
||||
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
|
||||
| 1 | 社員番号 | EMP_ID | CHAR | 8 | | 8 | NOT NULL | | ✓ | | | | |
|
||||
| 2 | 部署ID | DEPT_ID | CHAR | 4 | | 4 | NOT NULL | | | | | | |
|
||||
| 3 | 氏名 | EMP_NAME | VARCHAR | 50 | | 50 | NOT NULL | | | | | | |
|
||||
| 4 | ステータス | STATUS | CHAR | 1 | | 1 | NOT NULL | | | | | | '1'=在籍, '9'=退職 |
|
||||
|
||||
### 備考
|
||||
|
||||
- サブシステムA: 参照のみ(SELECT)
|
||||
- サブシステムB: 使用しない
|
||||
|
||||
---
|
||||
|
||||
# LEAVE_RECORDS — 休暇申請記録
|
||||
|
||||
## Layout(テーブル定義)
|
||||
|
||||
### DB基本情報
|
||||
|
||||
| DB名 | DB ID | COPY ID | INDEX |
|
||||
|------|-------|---------|-------|
|
||||
| 勤怠休暇管理DB | LEAVE_RECORDS | — | PK: APPLICATION_ID |
|
||||
|
||||
### カラム定義
|
||||
|
||||
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|
||||
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
|
||||
| 1 | 申請番号 | APPLICATION_ID | INTEGER | 10 | | 4 | NOT NULL | | ✓ | | | | 自動採番 |
|
||||
| 2 | 社員番号 | EMP_ID | CHAR | 8 | | 8 | NOT NULL | | | | | | |
|
||||
| 3 | 休暇種別 | LEAVE_TYPE | CHAR | 2 | | 2 | NOT NULL | | | | | | 01/02/03/04 |
|
||||
| 4 | 開始日 | START_DATE | CHAR | 8 | | 8 | NOT NULL | | | | | | YYYYMMDD |
|
||||
| 5 | 開始時刻 | START_TIME | CHAR | 4 | | 4 | NOT NULL | | | | | | HHMM |
|
||||
| 6 | 終了日 | END_DATE | CHAR | 8 | | 8 | NOT NULL | | | | | | YYYYMMDD |
|
||||
| 7 | 終了時刻 | END_TIME | CHAR | 4 | | 4 | NOT NULL | | | | | | HHMM |
|
||||
| 8 | ステータス | STATUS | CHAR | 1 | | 1 | NOT NULL | | | | | | '1'=有効, '9'=取消 |
|
||||
|
||||
### 備考
|
||||
|
||||
- KIN02UPDがINSERT/DELETEを実行
|
||||
- KIN03EXPがSELECT(日付展開用)
|
||||
- 取消はDELETE FROM で物理削除
|
||||
|
||||
---
|
||||
|
||||
# HOLIDAY_CALENDAR — 休日カレンダー
|
||||
|
||||
## Layout(テーブル定義)
|
||||
|
||||
### DB基本情報
|
||||
|
||||
| DB名 | DB ID | COPY ID | INDEX |
|
||||
|------|-------|---------|-------|
|
||||
| 勤怠休暇管理DB | HOLIDAY_CALENDAR | — | PK: HOLIDAY_DATE |
|
||||
|
||||
### カラム定義
|
||||
|
||||
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|
||||
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
|
||||
| 1 | 休日日付 | HOLIDAY_DATE | CHAR | 8 | | 8 | NOT NULL | | ✓ | | | | YYYYMMDD |
|
||||
| 2 | 説明 | DESCRIPTION | VARCHAR | 50 | | 50 | NULL許可 | NULL | | | | | 例:「建国記念の日」 |
|
||||
|
||||
### 備考
|
||||
|
||||
- 土日は曜日判定で処理するため、このテーブルには祝日のみ格納
|
||||
- KIN03EXP, KIN06CLDがSELECTで参照
|
||||
|
||||
---
|
||||
|
||||
# SICK_LEAVE_RATE — 病欠控除率
|
||||
|
||||
## Layout(テーブル定義)
|
||||
|
||||
### DB基本情報
|
||||
|
||||
| DB名 | DB ID | COPY ID | INDEX |
|
||||
|------|-------|---------|-------|
|
||||
| 勤怠休暇管理DB | SICK_LEAVE_RATE | — | PK: LEAVE_TYPE |
|
||||
|
||||
### カラム定義
|
||||
|
||||
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|
||||
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
|
||||
| 1 | 休暇種別 | LEAVE_TYPE | CHAR | 2 | | 2 | NOT NULL | | ✓ | | | | '04'固定 |
|
||||
| 2 | 控除率 | DEDUCTION_RATE | DECIMAL | 3 | 2 | 3 | NOT NULL | | | | | | 例:0.50(50%控除) |
|
||||
|
||||
### 備考
|
||||
|
||||
- 全社員共通の設定値
|
||||
- 現時点では参照プログラム未実装(設計上定義)
|
||||
|
||||
---
|
||||
|
||||
# DAILY_RECORDS — 日別勤怠記録
|
||||
|
||||
## Layout(テーブル定義)
|
||||
|
||||
### DB基本情報
|
||||
|
||||
| DB名 | DB ID | COPY ID | INDEX |
|
||||
|------|-------|---------|-------|
|
||||
| 勤怠休暇管理DB | DAILY_RECORDS | — | PK: (EMP_ID, TARGET_DATE) |
|
||||
|
||||
### カラム定義
|
||||
|
||||
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|
||||
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
|
||||
| 1 | 社員番号 | EMP_ID | CHAR | 8 | | 8 | NOT NULL | | ✓ | | | | |
|
||||
| 2 | 対象日 | TARGET_DATE | CHAR | 8 | | 8 | NOT NULL | | ✓ | | | | YYYYMMDD |
|
||||
| 3 | 出勤時刻 | TIME_IN | CHAR | 4 | | 4 | NOT NULL | | | | | | HHMM, '0000'=打刻なし |
|
||||
| 4 | 退勤時刻 | TIME_OUT | CHAR | 4 | | 4 | NOT NULL | | | | | | HHMM, '0000'=打刻なし |
|
||||
| 5 | 年休時間 | ANNUAL_LEAVE_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | 0.1h単位 |
|
||||
| 6 | 事假時間 | PERSONAL_LEAVE_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | 0.1h単位 |
|
||||
| 7 | 因公特批假時間 | OFFICIAL_LEAVE_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | 0.1h単位 |
|
||||
| 8 | 病欠時間 | SICK_LEAVE_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | 0.1h単位 |
|
||||
| 9 | 未申請欠勤時間 | UNAPPROVED_ABSENT_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | 0.1h単位 |
|
||||
| 10 | 更新日時 | UPDATED_AT | TIMESTAMP | — | | 10 | NOT NULL | | | | | | DEFAULT CURRENT_TIMESTAMP |
|
||||
|
||||
### 備考
|
||||
|
||||
- KIN08DBUがKIN07DAIの出力ファイルからINSERT
|
||||
- 1社員1日=1レコード。出勤日のみ存在。
|
||||
|
||||
---
|
||||
|
||||
# MONTHLY_ABSENCE — 月次統計
|
||||
|
||||
## Layout(テーブル定義)
|
||||
|
||||
### DB基本情報
|
||||
|
||||
| DB名 | DB ID | COPY ID | INDEX |
|
||||
|------|-------|---------|-------|
|
||||
| 勤怠休暇管理DB | MONTHLY_ABSENCE | — | PK: (EMP_ID, YEAR_MONTH) |
|
||||
|
||||
### カラム定義
|
||||
|
||||
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|
||||
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
|
||||
| 1 | 社員番号 | EMP_ID | CHAR | 8 | | 8 | NOT NULL | | ✓ | | | | |
|
||||
| 2 | 対象年月 | YEAR_MONTH | CHAR | 6 | | 6 | NOT NULL | | ✓ | | | | YYYYMM |
|
||||
| 3 | 年休合計 | ANNUAL_LEAVE_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | |
|
||||
| 4 | 事假合計 | PERSONAL_LEAVE_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | |
|
||||
| 5 | 因公特批假合計 | OFFICIAL_LEAVE_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | |
|
||||
| 6 | 病欠合計 | SICK_LEAVE_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | |
|
||||
| 7 | 未申請欠勤合計 | UNAPPROVED_ABSENT_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | |
|
||||
| 8 | 更新日時 | UPDATED_AT | TIMESTAMP | — | | 10 | NOT NULL | | | | | | DEFAULT CURRENT_TIMESTAMP |
|
||||
|
||||
### 備考
|
||||
|
||||
- KIN08DBUが月次集計後にUPSERT(MERGE)
|
||||
- サブシステムC(給与計算)への連携元
|
||||
|
||||
---
|
||||
|
||||
# OVT_APPLICATIONS — 個別加班申請テーブル
|
||||
|
||||
## Layout(テーブル定義)
|
||||
|
||||
### DB基本情報
|
||||
|
||||
| DB名 | DB ID | COPY ID | INDEX |
|
||||
|------|-------|---------|-------|
|
||||
| 残業統計管理DB | OVT_APPLICATIONS | — | PK: APPL_ID |
|
||||
|
||||
### カラム定義
|
||||
|
||||
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|
||||
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
|
||||
| 1 | 申請番号 | APPL_ID | CHAR | 8 | | 8 | NOT NULL | | ✓ | | | | YYYYMMDD+SEQ |
|
||||
| 2 | 社員番号 | EMP_ID | CHAR | 8 | | 8 | NOT NULL | | | | | | |
|
||||
| 3 | 申請日 | APPL_DATE | CHAR | 8 | | 8 | NOT NULL | | | | | | YYYYMMDD |
|
||||
| 4 | 残業種別 | OVT_TYPE | CHAR | 1 | | 1 | NOT NULL | | | | | | W=平日, H=休日 |
|
||||
| 5 | 開始時刻 | START_TIME | CHAR | 4 | | 4 | NOT NULL | | | | | | HHMM |
|
||||
| 6 | 終了時刻 | END_TIME | CHAR | 4 | | 4 | NOT NULL | | | | | | HHMM |
|
||||
| 7 | 加班時間 | OVT_HOURS | DECIMAL | 4 | 1 | 4 | NOT NULL | | | | | | 0.1h単位 |
|
||||
| 8 | ステータス | STATUS | CHAR | 1 | | 1 | NOT NULL | | | | | | 0=有効, 9=取消 |
|
||||
| 9 | 更新日時 | UPDATED_AT | TIMESTAMP | — | | 10 | NOT NULL | | | | | | |
|
||||
|
||||
### 備考
|
||||
|
||||
- ZAN06UPDがINSERT/UPDATEを実行
|
||||
- STATUS=9で取消(物理削除はしない)
|
||||
|
||||
---
|
||||
|
||||
# OVT_MONTHLY — 月次集計テーブル
|
||||
|
||||
## Layout(テーブル定義)
|
||||
|
||||
### DB基本情報
|
||||
|
||||
| DB名 | DB ID | COPY ID | INDEX |
|
||||
|------|-------|---------|-------|
|
||||
| 残業統計管理DB | OVT_MONTHLY | — | PK: (EMP_ID, YEAR_MONTH, OVT_TYPE) |
|
||||
|
||||
### カラム定義
|
||||
|
||||
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|
||||
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
|
||||
| 1 | 社員番号 | EMP_ID | CHAR | 8 | | 8 | NOT NULL | | ✓ | | | | |
|
||||
| 2 | 対象年月 | YEAR_MONTH | CHAR | 6 | | 6 | NOT NULL | | ✓ | | | | YYYYMM |
|
||||
| 3 | 残業種別 | OVT_TYPE | CHAR | 1 | | 1 | NOT NULL | | ✓ | | | | W=平日, H=休日 |
|
||||
| 4 | 加班時間合計 | OVT_HOURS | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | |
|
||||
| 5 | 加班回数 | OVT_COUNT | INTEGER | 10 | | 4 | NOT NULL | | | | | | |
|
||||
| 6 | 更新日時 | UPDATED_AT | TIMESTAMP | — | | 10 | NOT NULL | | | | | | |
|
||||
|
||||
### 備考
|
||||
|
||||
- ZAN06UPDが月次集計結果をUPSERT
|
||||
@@ -0,0 +1,153 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 勤怠休暇管理システム |
|
||||
| 2 | プログラムID | KIN01INP |
|
||||
| 3 | プログラム名 | 休暇申請CSV取込・検証処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | 振り分け |
|
||||
| 6 | 機能概要 | CSV形式の休暇申請ファイルを読み込み、休暇種別テーブル検索と項目チェックを行い、ステータスによってWORK-LEAVEまたはERROR-LOGへ振り分ける。 |
|
||||
| 7 | | ステータス'1':有効申請としてWORK-LEAVEに出力(項目チェック実施) |
|
||||
| 8 | | ステータス'9':取消申請としてWORK-LEAVEに出力(項目チェックなし、APPL-ID保持) |
|
||||
| 9 | | その他・フィールド数異常・休暇種別異常:ERROR-LOGに出力 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | KIN01R01(CSV) | ソート不要。CSV形式(カンマ区切り、8項目) |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | CSV-INPUT | R01 | KIN01R01 | I | 自前(80B) | F | | 80 | PS | CSV形式 |
|
||||
| 2 | WORK-LEAVE | W01 | KIN01W01 | O | KIN01REC | FB | | 80 | PS | |
|
||||
| 3 | ERROR-LOG | W02 | KIN01W02 | O | KIN05REC | VB | | 200 | PS | |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | CSV-INPUT | なし | なし |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC |
|
||||
| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 3 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
| 4 | 項目チェックSUB | SUB04CHK | ZANCHKAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
1-4.休暇種別テーブル設定(WRK-LEAVE-TYPE-TABLE)
|
||||
WRK-LT-CODE(1)='01' (年休/年假)
|
||||
WRK-LT-CODE(2)='02' (事假)
|
||||
WRK-LT-CODE(3)='03' (因公特批假)
|
||||
WRK-LT-CODE(4)='04' (病欠)
|
||||
1-5.運用日付取得SUB(SUB01DAT)により運用日を取得する。
|
||||
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
|
||||
【メッセージ編集】
|
||||
メッセージ番号:5(サブエラー)
|
||||
PARM1:'SUB01DAT'
|
||||
PARM2:復帰コード
|
||||
【ABEND処理SUB】
|
||||
ABENDコード:999
|
||||
1-6.使用ファイルのオープン(R01:入力、W01/W02:出力)
|
||||
1-7.R01を読み込む。(1100R01INNSOR)(1回目)
|
||||
|
||||
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
|
||||
2-1.CSVの分解(2010CSVSOR)
|
||||
UNSTRINGでカンマ区切りのCSVを8項目に分解する。
|
||||
(APPL-ID, EMP-ID, START-DATE, START-TIME, END-DATE, END-TIME, LEAVE-TYPE, STATUS)
|
||||
2-2.休暇種別テーブル検索(2020LEAVSERSOR)
|
||||
SEARCH(非ALL)でWRK-LEAVE-TYPE-TABLEを検索し、休暇種別の妥当性を検証する。
|
||||
2-3.エラー判定
|
||||
2-3-1.フィールド数≠8の場合
|
||||
ERROR-LOGに出力する。(2050ERRORSOR)
|
||||
エラー種別:'F'(FIELD COUNT ERROR)
|
||||
2-3-2.休暇種別がテーブルに存在しない場合
|
||||
ERROR-LOGに出力する。(2050ERRORSOR)
|
||||
エラー種別:'L'(INVALID LEAVE TYPE)
|
||||
2-3-3.ステータス'1'(有効)の場合
|
||||
項目チェックを実施し、エラーがあればERROR-LOGに出力、なければWORK-LEAVEに出力する。(2030VALIDATESOR)
|
||||
2-3-3-1.SUB04CHKで社員番号チェック(EMPID): WRK-CSV-EMP-IDをC01CHKDATに設定し、CALL 'SUB04CHK' EMPIDタイプで社員番号フォーマットの妥当性を検証する。エラーの場合はW02ERR-CATEGORY='01'でエラーログに出力し本レコードをスキップ。
|
||||
2-3-3-2.開始日付チェック(SUB04CHK)。エラー→W02出力
|
||||
2-3-3-3.開始時刻チェック(SUB04CHK)。エラー→W02出力
|
||||
2-3-3-4.終了日付チェック(SUB04CHK)。エラー→W02出力
|
||||
2-3-3-5.終了時刻チェック(SUB04CHK)。エラー→W02出力
|
||||
2-3-3-6.複合条件チェック(AND+OR+3段ネスト)
|
||||
開始日>0 AND 終了日>0 AND 開始時刻>0 の場合:
|
||||
- 開始日>終了日 → WRK-DEMO-TYPE=10
|
||||
- 開始日=終了日 AND 開始時刻>=終了時刻 → WRK-DEMO-TYPE=10
|
||||
- 上記以外 → WRK-DEMO-TYPE=20
|
||||
2-3-3-7.すべて通過→W01出力(APPL-ID=0, STATUS='1')
|
||||
2-3-4.ステータス'9'(取消)の場合
|
||||
WORK-LEAVEにそのまま出力する。(2040CANCELSOR)
|
||||
APPL-ID=CSV値、STATUS='9'(項目チェックなし)
|
||||
2-3-5.その他のステータスの場合
|
||||
ERROR-LOGに出力する。(2050ERRORSOR)
|
||||
エラー種別:'S'(INVALID STATUS)
|
||||
2-4.R01を読み込む。(1100R01INNSOR)(2件目以降)
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.入出力ファイルのクローズ
|
||||
3-2.入出力件数出力メッセージ出力
|
||||
【入力メッセージ編集】
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:'KIN01R01'
|
||||
PARM2:当該入力ファイルの件数
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KIN01W01'、'KIN01W02'
|
||||
PARM2:当該出力ファイルの件数
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/WORK-LEAVE) KIN01REC 80B FB
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | APPL-ID | WRK-CSV-APPL-ID | 有効時=0、取消時=CSV値 |
|
||||
| 2 | EMP-ID | WRK-CSV-EMP-ID | |
|
||||
| 3 | LEAVE-TYPE | WRK-CSV-LEAVE-TYPE | 01/02/03/04 |
|
||||
| 4 | START-DATE | WRK-CSV-START-DATE | YYYYMMDD |
|
||||
| 5 | START-TIME | WRK-CSV-START-TIME | HHMM |
|
||||
| 6 | END-DATE | WRK-CSV-END-DATE | YYYYMMDD |
|
||||
| 7 | END-TIME | WRK-CSV-END-TIME | HHMM |
|
||||
| 8 | STATUS | WRK-CSV-STATUS | '1'(有効)または'9'(取消) |
|
||||
| 9 | FILLER | SPACE | 36B |
|
||||
|
||||
### 出力ファイル2(W02/ERROR-LOG) KIN05REC 200B VB
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | '01'固定 | |
|
||||
| 2 | ERR-DETAIL | STRING編集 | エラー内容(198B) |
|
||||
@@ -0,0 +1,155 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 勤怠休暇管理システム |
|
||||
| 2 | プログラムID | KIN02UPD |
|
||||
| 3 | プログラム名 | 休暇申請DB更新処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | DB更新 |
|
||||
| 6 | 機能概要 | WORK-LEAVEファイルの各レコードをDB2テーブルLEAVE_RECORDSに反映する。 |
|
||||
| 7 | | ステータスによって新規登録(INSERT)、変更(DELETE+INSERT)、取消(DELETE)を行う。 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | KIN01W01 | KIN01INPの出力順に従う。ソート不要。 |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | WORK-LEAVE | R01 | KIN01W01 | I | KIN01REC | FB | | 80 | PS | |
|
||||
| 2 | ERROR-LOG | W01 | KIN02W01 | O | KIN05REC | VB | | 200 | PS | DBエラー時出力 |
|
||||
| 3 | LEAVE_RECORDS | DB | — | I/U/D | — | — | — | — | DB | SQLite |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | WORK-LEAVE | なし | なし |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| 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.DB接続
|
||||
EXEC SQL CONNECT TO 'data/kin.db'
|
||||
1-5.R01ファイルOPEN(入力)+ W01ファイルOPEN(出力)
|
||||
1-6.R01を初回読込(1100R01INNSOR)
|
||||
|
||||
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
|
||||
2-1.レコード処理(2100PROCSOR)
|
||||
2-1-1.R01各項目をホスト変数(WS-*)にMOVEする。
|
||||
2-1-2.ロジック分岐判定(EVALUATE)
|
||||
2-1-2-1.STATUS='1' AND APPL-ID=0(新規)の場合
|
||||
INSERT処理(2110INSERTSOR)
|
||||
【SQL】
|
||||
INSERT INTO LEAVE_RECORDS
|
||||
(EMP_ID, LEAVE_TYPE, START_DATE, START_TIME,
|
||||
END_DATE, END_TIME, STATUS)
|
||||
VALUES
|
||||
(:WS-EMP-ID, :WS-LEAVE-TYPE,
|
||||
:WS-START-DATE, :WS-START-TIME,
|
||||
:WS-END-DATE, :WS-END-TIME,
|
||||
:WS-STATUS)
|
||||
SQLCODE≠0の場合、DBエラー処理(9100DBERRSOR)を実行する。
|
||||
CUN-DBXINSを+1する。
|
||||
2-1-2-2.STATUS='1' AND APPL-ID>0(変更)の場合
|
||||
UPDATE処理(2120UPDATESOR)
|
||||
【SQL】
|
||||
DELETE FROM LEAVE_RECORDS
|
||||
WHERE APPLICATION_ID = :WS-APPL-ID
|
||||
INSERT INTO LEAVE_RECORDS
|
||||
(EMP_ID, LEAVE_TYPE, START_DATE, START_TIME,
|
||||
END_DATE, END_TIME, STATUS)
|
||||
VALUES
|
||||
(:WS-EMP-ID, :WS-LEAVE-TYPE,
|
||||
:WS-START-DATE, :WS-START-TIME,
|
||||
:WS-END-DATE, :WS-END-TIME,
|
||||
:WS-STATUS)
|
||||
各SQLでSQLCODE≠0の場合、DBエラー処理(9100DBERRSOR)を実行する。
|
||||
CUN-DBXUPDを+1する。
|
||||
2-1-2-3.STATUS='9'(取消)の場合
|
||||
DELETE処理(2130DELETESOR)
|
||||
【SQL】
|
||||
DELETE FROM LEAVE_RECORDS
|
||||
WHERE APPLICATION_ID = :WS-APPL-ID
|
||||
SQLCODE≠0の場合、DBエラー処理(9100DBERRSOR)を実行する。
|
||||
CUN-DBXDELを+1する。
|
||||
2-1-2-4.その他
|
||||
何も処理しない(CONTINUE)
|
||||
2-2.次レコード読込(1100R01INNSOR)(2件目以降)
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.COMMIT
|
||||
EXEC SQL COMMIT WORK
|
||||
3-2.入出力ファイルのクローズ
|
||||
3-3.件数メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:6(入力件数)
|
||||
PARM1:'KIN01W01'
|
||||
PARM2:入力件数
|
||||
PARM1:'INS'、'UPD'、'DEL'
|
||||
PARM2:各処理件数
|
||||
3-4.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
|
||||
4.DBエラー処理(9100DBERRSOR)
|
||||
4-1.ROLLBACK
|
||||
EXEC SQL ROLLBACK WORK
|
||||
4-2.ERROR-LOG出力(W01OUTFIL)
|
||||
【MOVE → INITIALIZE & WRITE】
|
||||
MOVE SQLCODE TO WRK-SQLCODE-DISP
|
||||
W01ERR-CATEGORY = '01'(固定)
|
||||
W01ERR-DETAIL = 'KIN02UPD SQLCODE=' + WRK-SQLCODE-DISP + ' APPL-ID=' + WS-APPL-ID
|
||||
CUN-W01OUTを+1する。
|
||||
4-3.エラーメッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:5(サブエラー)
|
||||
PARM1:'KIN02UPD SQL ERROR'
|
||||
PARM2:SQLCODE
|
||||
PARM3:WS-APPL-ID
|
||||
4-4.ABEND処理SUB呼出(9999ABDSOR)
|
||||
ABENDコード:999
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/ERROR-LOG)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 01で固定 | DBエラー |
|
||||
| 2 | ERR-DETAIL | STRINGで編集 | KIN02UPD SQLCODE= + WRK-SQLCODE-DISP + APPL-ID= + WS-APPL-ID |
|
||||
|
||||
### DB更新結果
|
||||
|
||||
LEAVE_RECORDSテーブルに直接反映される。
|
||||
@@ -0,0 +1,170 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 勤怠休暇管理システム |
|
||||
| 2 | プログラムID | KIN03EXP |
|
||||
| 3 | プログラム名 | 休暇日別展開処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | キーブレイク(集計) |
|
||||
| 6 | 機能概要 | LEAVE_RECORDS(DB2)より有効申請(STATUS='1')を読込み、開始日〜終了日の期間を日別に展開し、休日・週末を除外してLEAVE-DAILYファイルを出力する。 |
|
||||
| 7 | | 社員番号(EMP_ID)キーブレイクで小計出力を行う。 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | DB(LEAVE_RECORDS) | EMP_ID, START_DATE順にソート済(ORDER BYで取得) |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | LEAVE-DAILY | W01 | KIN02W01.DAT | O | KIN02REC | FB | | 80 | PS | 日別展開後レコード |
|
||||
| 2 | LEAVE_RECORDS | DB | — | I | — | — | — | — | DB | SQLite |
|
||||
| 3 | HOLIDAY_CALENDAR | DB | — | I | — | — | — | — | DB | SQLite |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | DB(LEAVE_RECORDS) | EMP-ID, START_DATE(昇順) | キーブレイク: EMP-ID |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC |
|
||||
| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 3 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
1-4.DB接続
|
||||
EXEC SQL CONNECT TO 'data/kin.db'
|
||||
1-5.運用日付取得SUB(SUB01DAT)により運用日を取得する。
|
||||
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
|
||||
【メッセージ編集】
|
||||
メッセージ番号:5(サブエラー)
|
||||
PARM1:'SUB01DAT'
|
||||
PARM2:復帰コード
|
||||
【ABEND処理SUB】
|
||||
ABENDコード:999
|
||||
1-6.休日カレンダーテーブル読込(1200HDINNSOR)
|
||||
【SQL】
|
||||
SELECT HOLIDAY_DATE FROM HOLIDAY_CALENDAR ORDER BY HOLIDAY_DATE
|
||||
FETCHループでWORKING-STORAGEのWRK-HOLIDAY-TABLEに全件格納する。
|
||||
WRK-HD-COUNTに件数を保持。最大366件(ODO定義)。
|
||||
1-7.出力ファイルOPEN(W01)
|
||||
1-8.C1カーソル初回FETCH(1100C1INITSOR)
|
||||
【SQL】
|
||||
SELECT APPLICATION_ID, EMP_ID, LEAVE_TYPE,
|
||||
START_DATE, START_TIME, END_DATE, END_TIME
|
||||
FROM LEAVE_RECORDS
|
||||
WHERE STATUS = '1'
|
||||
ORDER BY EMP_ID, START_DATE
|
||||
INTO :SQL-APPL-ID, :SQL-EMP-ID, :SQL-LEAVE-TYPE,
|
||||
:SQL-START-DATE, :SQL-START-TIME,
|
||||
:SQL-END-DATE, :SQL-END-TIME
|
||||
SQLCODE=0の場合、入力件数+1
|
||||
SQLCODE≠0の場合、WRK-R01EOF='1'(EOF)
|
||||
|
||||
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
|
||||
2-1.社員番号キー保存
|
||||
SQL-EMP-ID → WRK-BFR-EMP-ID
|
||||
2-2.1社員分処理(2100-PROCESS-EMP)(PERFORM THRU)
|
||||
2-2-1.CUN-EMP-SUB初期化(ZERO)
|
||||
2-2-2.EOFまたはキー変化(SQL-EMP-ID≠WRK-BFR-EMP-ID)まで繰り返し
|
||||
2-2-2-1.日付展開処理(2200-EXPAND-DATE)(PERFORM THRU)
|
||||
2-2-2-1-1.開始日(SQL-START-DATE)→WRK-DATE-CURRENT
|
||||
終了日(SQL-END-DATE)→WRK-DATE-END
|
||||
2-2-2-1-2.WRK-DATE-CURRENT > WRK-DATE-END までループ
|
||||
2-2-2-1-2-1.曜日判定
|
||||
COMPUTE WRK-DAY-OF-WEEK = FUNCTION MOD(
|
||||
FUNCTION INTEGER-OF-DATE(WRK-DATE-CURRENT), 7)
|
||||
0=日曜日、6=土曜日 → 週末としてスキップ
|
||||
2-2-2-1-2-2.非週末の場合、休日テーブル検索
|
||||
SEARCH ALL WRK-HD-ENTRY(昇順KEY=WRK-HD-DATE)
|
||||
WRK-HD-DATE(WRK-HD-IDX) = WRK-DATE-CURRENT → 休日としてスキップ
|
||||
2-2-2-1-2-3.非週末かつ非休日の場合、W01出力
|
||||
W01レコード初期化
|
||||
APPL-ID = SQL-APPL-ID
|
||||
EMP-ID = WRK-BFR-EMP-ID
|
||||
LEAVE-TYPE = SQL-LEAVE-TYPE
|
||||
START-TIME = SQL-START-TIME
|
||||
END-TIME = SQL-END-TIME
|
||||
DATE = WRK-DATE-ALPHA(現在日付)
|
||||
WRITE W01OUTREC
|
||||
CUN-W01OUT +1
|
||||
CUN-EMP-SUB +1
|
||||
2-2-2-1-2-4.日付加算(2300-DATE-ADD-1)
|
||||
WRK-DATE-DAY + 1
|
||||
各月の最終日判定:
|
||||
- 1/3/5/7/8/10/12月:31日超で月+1、13月→年+1
|
||||
- 4/6/9/11月:30日超で月+1
|
||||
- 2月:閏年判定(MOD年400=0 または MOD年4=0 AND MOD年100≠0)
|
||||
閏年→29日超、平年→28日超で月+1
|
||||
2-2-3.次レコードFETCH(1100C1FETCHSOR)
|
||||
CALL 'br_fetch_next' USING SQLCODE
|
||||
SQLCODE=0の場合、br_get_colで各カラムを取得
|
||||
SQLCODE≠0の場合、WRK-R01EOF='1'
|
||||
2-2-4.社員別小計出力(キーブレイク)
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(情報メッセージ)
|
||||
PARM1:WRK-BFR-EMP-ID
|
||||
PARM2:CUN-EMP-SUB
|
||||
PARM3:'EMP SUB'
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.出力ファイルのクローズ
|
||||
3-2.件数メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:6(入力件数)
|
||||
PARM1:'LEAVE_RECORDS'
|
||||
PARM2:入力件数
|
||||
【メッセージ編集】
|
||||
メッセージ番号:7(出力件数)
|
||||
PARM1:'KIN02W01'
|
||||
PARM2:出力件数
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(情報)
|
||||
PARM1:'HOLIDAYS LOADED'
|
||||
PARM2:休日テーブル件数
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/LEAVE-DAILY) KIN02REC 80B FB
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | EMP-ID | WRK-BFR-EMP-ID | キーブレイク単位 |
|
||||
| 2 | DATE | WRK-DATE-ALPHA | 展開された日付(YYYYMMDD) |
|
||||
| 3 | LEAVE-TYPE | SQL-LEAVE-TYPE | 01/02/03/04 |
|
||||
| 4 | START-TIME | SQL-START-TIME | 元申請の開始時刻(HHMM) |
|
||||
| 5 | END-TIME | SQL-END-TIME | 元申請の終了時刻(HHMM) |
|
||||
| 6 | APPL-ID | SQL-APPL-ID | APPLICATION_ID |
|
||||
| 7 | FILLER | SPACE | 45B |
|
||||
@@ -0,0 +1,155 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 勤怠休暇管理システム |
|
||||
| 2 | プログラムID | KIN04CHK |
|
||||
| 3 | プログラム名 | 打刻項目チェック処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | 項目チェック(重複なし) |
|
||||
| 6 | 機能概要 | CSV形式の打刻データファイルを読み込み、項目チェックを行い、正常レコードをEDITED-PUNCHへ、異常レコードをERROR-LOGへ振り分ける。 |
|
||||
| 7 | | チェックはIF多重ネスト(THEN句)で4段階:社員番号必須→日付妥当性→時刻妥当性→出勤<退勤 |
|
||||
| 8 | | 正常出力はWRITE FROMを使用する(新規カバレッジ) |
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | KIN04R01(CSV) | ソート不要。CSV形式(カンマ区切り、6項目) |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | RAW-PUNCH | R01 | KIN04R01 | I | 自前(80B) | F | | 80 | PS | CSV形式 |
|
||||
| 2 | EDITED-PUNCH | W01 | KIN04W01 | O | KIN04REC | FB | | 80 | PS | WRITE FROM使用 |
|
||||
| 3 | ERROR-LOG | W02 | KIN04W02 | O | KIN05REC | VB | | 200 | PS | |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | RAW-PUNCH | なし | なし |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC |
|
||||
| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 3 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
| 4 | 項目チェックSUB | SUB04CHK | ZANCHKAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
1-4.運用日付取得SUB(SUB01DAT)により運用日を取得する。
|
||||
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
|
||||
【メッセージ編集】
|
||||
メッセージ番号:5(サブエラー)
|
||||
PARM1:'SUB01DAT'
|
||||
PARM2:復帰コード
|
||||
【ABEND処理SUB】
|
||||
ABENDコード:999
|
||||
1-5.使用ファイルのオープン(R01:入力、W01/W02:出力)
|
||||
1-6.R01を読み込む。(1100R01INNSOR)(1回目)
|
||||
|
||||
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
|
||||
2-1.CSVの分解(2010CSVSOR)
|
||||
UNSTRINGでカンマ区切りのCSVを6項目に分解する。
|
||||
(EMP-ID, DATE, TIME-IN, TIME-OUT, DEPT-ID, TERMINAL)
|
||||
2.1.5.社員番号チェック(2021EMPIDSOR)
|
||||
SUB04CHK('EMPID')により社員番号のフォーマットチェックを実施する。
|
||||
SUB04CHKの復帰コードにより正常/異常を判定する。
|
||||
2-2.IF多重ネストチェック(2020VALIDATESOR)
|
||||
第1段階: フィールド数チェック + 社員番号チェック(2021EMPIDSOR)
|
||||
IF フィールド数=6 THEN
|
||||
2021EMPIDSORを実行
|
||||
IF 社員番号正常 THEN
|
||||
SUB04CHK('DATE')で日付チェック
|
||||
IF 正常 THEN
|
||||
SUB04CHK('TIME')で時刻チェック(出勤)
|
||||
IF 正常 THEN
|
||||
SUB04CHK('TIME')で時刻チェック(退勤)
|
||||
IF 正常 THEN
|
||||
IF 出勤時刻 < 退勤時刻 THEN
|
||||
WRITE FROMでW01出力(2050NORMSOR)
|
||||
ELSE
|
||||
エラー区分='02'でW02出力(2090ERRORSOR)
|
||||
END-IF
|
||||
ELSE
|
||||
エラー区分='02'でW02出力(2090ERRORSOR)
|
||||
END-IF
|
||||
ELSE
|
||||
エラー区分='02'でW02出力(2090ERRORSOR)
|
||||
END-IF
|
||||
ELSE
|
||||
エラー区分='02'でW02出力(2090ERRORSOR)
|
||||
END-IF
|
||||
ELSE
|
||||
エラー区分='02'でW02出力(2090ERRORSOR)
|
||||
END-IF
|
||||
ELSE
|
||||
エラー区分='02'でW02出力(2090ERRORSOR)
|
||||
END-IF
|
||||
|
||||
2021EMPIDSOR (社員番号チェック)
|
||||
本Paragraphは2020VALIDATESORの第1段階(フィールド数OK時)に
|
||||
PERFORMされる。
|
||||
SUB04CHK('EMPID')により社員番号のフォーマットチェックを実施する。
|
||||
復帰コード=ZEROなら正常、≠ZEROなら異常として呼び出し元に戻る。
|
||||
|
||||
2-3.R01を読み込む。(1100R01INNSOR)(2件目以降)
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.入出力ファイルのクローズ
|
||||
3-2.入出力件数出力メッセージ出力
|
||||
【入力メッセージ編集】
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:'KIN04R01'
|
||||
PARM2:当該入力ファイルの件数
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KIN04W01'、'KIN04W02'
|
||||
PARM2:当該出力ファイルの件数
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/EDITED-PUNCH) KIN04REC 80B FB
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | EMP-ID | WRK-CSV-EMP-ID | 社員番号 |
|
||||
| 2 | WORK-DATE | WRK-CSV-DATE | YYYYMMDD |
|
||||
| 3 | STR-TIME | WRK-CSV-TIME-IN | HHMM |
|
||||
| 4 | END-TIME | WRK-CSV-TIME-OUT | HHMM |
|
||||
| 5 | DEPT-ID | WRK-CSV-DEPT-ID | 部署ID |
|
||||
| 6 | TERMINAL | WRK-CSV-TERMINAL | 端末ID |
|
||||
| 7 | FILLER | SPACE | 46B |
|
||||
|
||||
### 出力ファイル2(W02/ERROR-LOG) KIN05REC 200B VB
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | '02'固定 | 打刻エラー |
|
||||
| 2 | ERR-DETAIL | STRING編集 | エラー内容(198B) |
|
||||
@@ -0,0 +1,128 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 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 |
|
||||
@@ -0,0 +1,116 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 勤怠休暇管理システム |
|
||||
| 2 | プログラムID | KIN06CLD |
|
||||
| 3 | プログラム名 | 出勤日カレンダー生成処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | レイアウト編集のみ(GETPUT) |
|
||||
| 6 | 機能概要 | PARMで指定された年月の出勤日カレンダーを生成する。在籍社員一覧をDBから取得し、各社員について当月1日〜月末日をPERFORM VARYINGでループ。休日判定(PERFORM VARYING線形探索 + 曜日判定)を行い、出勤日のみWORK-DAY-FILEに出力する。 |
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル/DB | 条件 |
|
||||
|----|----------------|------|
|
||||
| 1 | EMP_MASTER | 在籍社員(STATUS='1')が登録済みであること |
|
||||
| 2 | HOLIDAY_CALENDAR | 対象年月の休日が登録済みであること |
|
||||
|
||||
### PARM引数
|
||||
|
||||
コマンドラインで `YEARMONTH=YYYYMM` 形式で指定。必須。
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|
|
||||
| 1 | WORK-DAY-FILE | OUTREC | KIN06W01 | O | KIN06REC | FB | | 80 | PS |
|
||||
|
||||
### 使用DBテーブル
|
||||
|
||||
| NO | テーブル名 | 処理内容 |
|
||||
|----|-----------|---------|
|
||||
| 1 | EMP_MASTER | SELECT EMP_ID WHERE STATUS='1' ORDER BY EMP_ID (CURSOR) |
|
||||
| 2 | HOLIDAY_CALENDAR | SELECT HOLIDAY_DATE WHERE HOLIDAY_DATE LIKE 'YYYYMM%' → WORKING-STORAGE格納 |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| 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.PARM解析(YEARMONTH=YYYYMM から対象年月を抽出)
|
||||
必須チェック:PARMなし→ABEND
|
||||
形式チェック:YEARMONTH= から始まること
|
||||
値範囲:XXXX01〜XXXX12
|
||||
月チェック(1-12): WRK-MONTH < 1 OR > 12 → ABEND(CALL SUB03END)
|
||||
1-4.ワークエリア初期化
|
||||
1-5.DB接続(EXEC SQL CONNECT TO 'data/kin.db')
|
||||
1-6.休日データ読込(HOLIDAY_CALENDARから対象月の祝日をSELECT)
|
||||
テーブルに格納(PERFORM VARYING線形探索用)
|
||||
【ガード】HOLIDAY-COUNTが50未満の場合のみADD+参照を行う(テーブル溢れ防止)
|
||||
ループ条件で HOLIDAY-COUNT < 50 をチェック(HOLIDAY-COUNT PIC 9(2)対応)
|
||||
1-7.出力ファイルOPEN
|
||||
1-8.社員一覧取得(EMP_MASTER CURSOR OPEN→初回FETCH)
|
||||
|
||||
2.主処理(2000MAJSOR)(社員EOFまで下記を繰り返す)
|
||||
2-1.当月1日〜月末日をループ(PERFORM VARYING)
|
||||
2-1-1.日付文字列構築(YYYYMMDD)
|
||||
2-1-2.曜日計算(INTEGER-OF-DATE)
|
||||
- INTEGER-OF-DATE('YYYYMMDD') で通算日数を取得
|
||||
- MOD(通算日数, 7) で曜日:0=日, 1=月, 2=火, …, 6=土
|
||||
2-1-3.休日判定(PERFORM VARYING線形探索)
|
||||
祝日テーブルを先頭から線形探索(部分埋めテーブル対応のためSEARCH ALL不使用)
|
||||
2-1-4.曜日判定
|
||||
土曜(0) または 日曜(6)→休日としてスキップ(CONTINUE)
|
||||
2-1-5.出勤日 → WRITE FROMで出力(社員番号+日付+曜日)
|
||||
2-2.次の社員をFETCH
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.CURSOR CLOSE
|
||||
3-2.DB切断
|
||||
3-3.出力ファイルCLOSE
|
||||
3-4.出力件数メッセージ出力
|
||||
3-5.終了メッセージ出力
|
||||
```
|
||||
|
||||
### 曜日計算
|
||||
|
||||
INTEGER-OF-DATE('YYYYMMDD') は1601-01-01からの通算日数を返す。
|
||||
- 1601-01-01 = Monday → MOD(x,7):0=Sun, 1=Mon, 2=Tue, 3=Wed, 4=Thu, 5=Fri, 6=Sat
|
||||
|
||||
### 休日判定ロジック
|
||||
|
||||
1. HOLIDAY_CALENDARに日付が存在する → 休日(PERFORM VARYING線形探索)
|
||||
2. 曜日が土曜(6)または日曜(0) → 休日
|
||||
3. 上記以外 → 出勤日
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル(OUTREC/WORK-DAY-FILE)KIN06REC 80B FB
|
||||
|
||||
| No | 項目名 | 設定元 | 属性 | 備考 |
|
||||
|----|--------|--------|------|------|
|
||||
| 1 | EMP-ID | 社員マスタのEMP_ID | X(8) | 社員番号 |
|
||||
| 2 | DATE | ループ変数 | 9(8) | YYYYMMDD |
|
||||
| 3 | DAY-OF-WEEK | 曜日計算結果 | 9(1) | 1=月…7=日 |
|
||||
| 4 | FILLER | SPACE | X(63) | |
|
||||
@@ -0,0 +1,167 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 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異常時等) |
|
||||
@@ -0,0 +1,211 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 勤怠休暇管理システム |
|
||||
| 2 | プログラムID | KIN08DBU |
|
||||
| 3 | プログラム名 | 勤怠DB更新処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | DB更新 + SYSIN読込(P28) |
|
||||
| 6 | 機能概要 | DAILY-RECORDを読込み、DAILY_RECORDSにINSERT。社員別月次集計後、MONTHLY_ABSENCEにUPSERT。集計結果をABSENCE_SUMMARYファイルに出力する。SYSIN制御カード(T/P/Mの3種)をGO TO DEPENDING ONで分岐処理する。 |
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル/DB | 条件 |
|
||||
|----|----------------|------|
|
||||
| 1 | DAILY-RECORD | KIN07DAIが出力した日別勤怠計算結果が存在すること |
|
||||
| 2 | DAILY_RECORDS | 同一日付のレコードが既に存在してもMODE=NORMALではUPSERT動作 |
|
||||
| 3 | MONTHLY_ABSENCE | 集計対象月の統計レコードが未作成でもINSERTできること |
|
||||
| 4 | SYSIN | 省略時は全社員対象、NORMALモードで動作 |
|
||||
|
||||
### SYSIN制御カード仕様
|
||||
|
||||
| カード種別 | 第1桁 | フォーマット | 説明 |
|
||||
|-----------|:-----:|-------------|------|
|
||||
| TARGET | T | `T 社員番号,社員番号,...` | 集計対象社員指定。省略時=全社員 |
|
||||
| PERIOD | P | `P YEARMONTH=YYYYMM` | 処理対象年月。必須 |
|
||||
| MODE | M | `M MODE=RESET\|NORMAL` | RESET=既存削除後再INSERT、NORMAL=UPSERT |
|
||||
| コメント | * | `* 任意コメント` | 読み飛ばし |
|
||||
| 不明 | 他 | — | DISPLAYで警告表示 |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|
|
||||
| 1 | DAILY-RECORD | INREC | KIN08R01 | I | KIN07REC | FB | | 200 | PS |
|
||||
| 2 | ABSENCE-SUMMARY | OUTREC | KIN08W01 | O | KIN08REC | FB | | 80 | PS |
|
||||
| 3 | SYSIN | SYSIN | KIN08S01 | I | — | FB | | 80 | PS |
|
||||
|
||||
### 使用DBテーブル
|
||||
|
||||
| NO | テーブル名 | 処理内容 |
|
||||
|----|-----------|---------|
|
||||
| 1 | DAILY_RECORDS | INSERT(MODE=NORMAL時) / DELETE+INSERT(MODE=RESET時) |
|
||||
| 2 | MONTHLY_ABSENCE | SELECT COUNT(*) → IF >0 UPDATE ELSE INSERT(UPSERT) |
|
||||
| 3 | SICK_LEAVE_RATE | SELECT DEDUCTION_RATE WHERE LEAVE_TYPE='04' |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 2 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
| 3 | 運用日付取得SUB | SUB01DAT | ZANDATAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリア初期化
|
||||
1-4.DB接続(EXEC SQL CONNECT TO 'data/kin.db')
|
||||
1-5.SYSINファイルOPEN
|
||||
1-6.SYSIN読込ループ(EOFまで)
|
||||
READ SYSINFILE INTO WS-SYSIN-REC
|
||||
AT END SET SYSIN-EOF TO TRUE
|
||||
END-READ.
|
||||
カード種別判定(WS-SYSIN-REC(1:1)):
|
||||
'T' → MOVE 1 TO WS-DISP-IDX → GO TO DEPENDING ON WS-DISP-IDX
|
||||
2100-TARGETSOR 2200-PERIODSOR 2300-MODESOR
|
||||
'P' → MOVE 2 TO WS-DISP-IDX → GO TO DEPENDING ON WS-DISP-IDX
|
||||
2100-TARGETSOR 2200-PERIODSOR 2300-MODESOR
|
||||
'M' → MOVE 3 TO WS-DISP-IDX → GO TO DEPENDING ON WS-DISP-IDX
|
||||
2100-TARGETSOR 2200-PERIODSOR 2300-MODESOR
|
||||
'*' → コメント行としてDISPLAY表示後スキップ(CONTINUE)
|
||||
他 → DISPLAY 'WARNING: Unknown card type [x]'
|
||||
1-7.必須パラメータ未設定チェック
|
||||
Pカード未読込 → ABEND(CALL SUB03END)
|
||||
1-8.集計対象社員テーブル設定(Tカード省略時は全社員フラグON)
|
||||
1-9.入力ファイルOPEN(DAILY-RECORD)
|
||||
1-10.出力ファイルOPEN(ABSENCE-SUMMARY)
|
||||
|
||||
2.主処理(2000MAJSOR)(R01 EOFまで下記を繰り返す)
|
||||
2-1.DAILY-RECORD読込(READ INTO)
|
||||
【ガード】社員番号の有効性チェック
|
||||
INSPECT WS-EMP-ID TALLYING WS-ZERO-CNT FOR LEADING '0'
|
||||
空文字判定 → DISPLAY警告
|
||||
2-2.DAILY_RECORDS INSERT
|
||||
EXEC SQL INSERT INTO DAILY_RECORDS (...) VALUES (:WS-...)
|
||||
IF SQLCODE NOT = 0 → DISPLAY警告 + 9100DBERRSOR
|
||||
2-3.社員別月次集計(PERFORM VARYING 内部テーブル)
|
||||
該当社員の集計行を線形探索
|
||||
集計計算(COMPUTE ROUNDED ON SIZE ERROR)
|
||||
COMPUTE WS-TOTAL-HOURS ROUNDED =
|
||||
WS-ANNUAL-H + WS-PERSONAL-H + WS-OFFICIAL-H
|
||||
+ WS-SICK-H + WS-ABSENT-H
|
||||
ON SIZE ERROR
|
||||
DISPLAY 'WARNING: Total hours overflow '
|
||||
WS-EMP-ID ' date ' WS-DATE
|
||||
MOVE ZERO TO WS-TOTAL-HOURS
|
||||
END-COMPUTE
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.MODE判定
|
||||
MODE=RESETの場合:
|
||||
EXEC SQL DELETE FROM MONTHLY_ABSENCE
|
||||
WHERE YEAR_MONTH = :WS-YEAR-MONTH
|
||||
3-2.集計結果のMONTHLY_ABSENCE書出(PERFORM VARYING 集計テーブル)
|
||||
各社員・月ごとに:
|
||||
EXEC SQL SELECT COUNT(*) INTO WS-CNT
|
||||
FROM MONTHLY_ABSENCE
|
||||
WHERE EMP_ID = :WS-EMP-ID
|
||||
AND YEAR_MONTH = :WS-YEAR-MONTH
|
||||
IF WS-CNT > 0
|
||||
EXEC SQL UPDATE MONTHLY_ABSENCE SET ...
|
||||
ELSE
|
||||
EXEC SQL INSERT INTO MONTHLY_ABSENCE (...)
|
||||
END-IF
|
||||
IF SQLCODE NOT = 0 → 9100DBERRSOR
|
||||
3-3.ABSENCE_SUMMARYファイル出力
|
||||
STRINGで編集後 WRITE
|
||||
3-4.EXEC SQL COMMIT
|
||||
3-5.全CURSOR/ファイルCLOSE
|
||||
3-6.出力件数メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:6(出力件数)
|
||||
PARM1:'DAILY_RECORDS'
|
||||
PARM2:CUN-DBXINS(INSERT件数)
|
||||
3-7.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
### SYSINカード処理詳細
|
||||
|
||||
```
|
||||
2100-TARGETSOR SECTION.
|
||||
UNSTRING WS-SYSIN-REC(3:) DELIMITED BY ','
|
||||
INTO WS-TARGET-EMP(1) WS-TARGET-EMP(2) ...
|
||||
TALLYING IN WS-EMP-COUNT
|
||||
END-UNSTRING.
|
||||
DISPLAY 'TARGET EMPLOYEES: ' WS-EMP-COUNT ' persons'.
|
||||
EXIT.
|
||||
GO TO 2000-EXIT.
|
||||
|
||||
2200-PERIODSOR SECTION.
|
||||
UNSTRING WS-SYSIN-REC(3:) DELIMITED BY '='
|
||||
INTO WS-PARM-NAME WS-PARM-VALUE
|
||||
END-UNSTRING.
|
||||
MOVE WS-PARM-VALUE TO WS-YEAR-MONTH.
|
||||
DISPLAY 'PERIOD: ' WS-YEAR-MONTH.
|
||||
EXIT.
|
||||
GO TO 2000-EXIT.
|
||||
|
||||
2300-MODESOR SECTION.
|
||||
INSPECT WS-SYSIN-REC
|
||||
REPLACING ALL 'MODE=' BY SPACES.
|
||||
MOVE WS-SYSIN-REC(3:) TO WS-MODE-VALUE.
|
||||
IF WS-MODE-VALUE = 'RESET'
|
||||
SET RESET-MODE TO TRUE
|
||||
ELSE
|
||||
SET NORMAL-MODE TO TRUE
|
||||
END-IF.
|
||||
DISPLAY 'MODE: ' WS-MODE-VALUE.
|
||||
EXIT.
|
||||
GO TO 2000-EXIT.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### ABSENCE-SUMMARY(OUTREC/KIN08REC)80B FB
|
||||
|
||||
| No | 項目名 | 設定元 | 属性 | 備考 |
|
||||
|----|--------|--------|------|------|
|
||||
| 1 | EMP-ID | MONTHLY_ABSENCE.EMP_ID | X(8) | 社員番号 |
|
||||
| 2 | YEAR-MONTH | MONTHLY_ABSENCE.YEAR_MONTH | X(6) | YYYYMM |
|
||||
| 3 | ANNUAL-LEAVE-H | 集計結果 | 9(4)V9(1) | 年休使用合計 |
|
||||
| 4 | PERSONAL-LEAVE-H | 集計結果 | 9(4)V9(1) | 事假合計 |
|
||||
| 5 | OFFICIAL-LEAVE-H | 集計結果 | 9(4)V9(1) | 因公特批假合計 |
|
||||
| 6 | SICK-LEAVE-H | 集計結果 | 9(4)V9(1) | 病欠合計 |
|
||||
| 7 | UNAPPROVED-ABSENT-H | 集計結果 | 9(4)V9(1) | 未申請欠勤合計 |
|
||||
| 8 | FILLER | SPACE | X(24) | |
|
||||
|
||||
---
|
||||
|
||||
## カバレッジ構文一覧
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| READ SYSIN(パターン28) | 制御カード読込 ← 新規パターン |
|
||||
| GO TO DEPENDING ON | カード種別による3分岐 ← 新規 |
|
||||
| DISPLAY | 警告メッセージ表示 ← 新規 |
|
||||
| INSPECT TALLYING | 社員番号空チェック、カンマ区切り数検証 |
|
||||
| COMPUTE ROUNDED ON SIZE ERROR | 時間計算桁あふれ処理 ← 新規 |
|
||||
| EXEC SQL DELETE | RESETモード既存削除 ← 新規 |
|
||||
| EXEC SQL INSERT / UPDATE / SELECT | DB操作 |
|
||||
| PERFORM VARYING | 社員別集計ループ |
|
||||
| UNSTRING | SYSINカード値解析 |
|
||||
| STRING | メッセージ編集 |
|
||||
@@ -0,0 +1,207 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 勤怠休暇管理システム |
|
||||
| 2 | プログラムID | KIN09CSV |
|
||||
| 3 | プログラム名 | 勤怠CSV出力処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | GETPUT(編集出力) |
|
||||
| 6 | 機能概要 | DAILY_RECORDSをDBからSELECTし、STRING WITH POINTERでCSV行を編集、WRITE AFTER ADVANCING(PAGE/2 LINES/1 LINE)で出力する。INSPECT REPLACINGでCSV危険文字をサニタイズする。 |
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル/DB | 条件 |
|
||||
|----|----------------|------|
|
||||
| 1 | DAILY_RECORDS | KIN08DBUにより当月勤怠データが登録済みであること |
|
||||
| 2 | MONTHLY_ABSENCE | KIN08DBUにより当月集計が完了していること |
|
||||
| 3 | PARM | YEARMONTH=YYYYMM は必須。省略時はABEND |
|
||||
|
||||
### PARM引数
|
||||
|
||||
コマンドラインで以下の形式で指定。
|
||||
|
||||
```
|
||||
YEARMONTH=202605,MODE=FULL
|
||||
```
|
||||
|
||||
| パラメータ | 必須 | デフォルト | 説明 |
|
||||
|-----------|:---:|:--------:|------|
|
||||
| YEARMONTH | ○ | — | 処理対象年月(YYYYMM形式) |
|
||||
| MODE | ○ | FULL | FULL=日別+月次全項目出力, SHORT=月次集計のみ |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|
|
||||
| 1 | CSV-OUTPUT | OUTREC | KIN09W01 | O | KIN09REC | FB | | 200 | PS |
|
||||
|
||||
### 使用DBテーブル
|
||||
|
||||
| NO | テーブル名 | 処理内容 |
|
||||
|----|-----------|---------|
|
||||
| 1 | DAILY_RECORDS | SELECT WHERE TARGET_DATE LIKE 'YYYYMM%' ORDER BY EMP_ID, TARGET_DATE |
|
||||
| 2 | MONTHLY_ABSENCE | SELECT WHERE YEAR_MONTH = :WS-YEAR-MONTH ORDER BY EMP_ID |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| 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.PARM解析(ACCEPT FROM COMMAND-LINE)
|
||||
INSPECT WS-PARM TALLYING WS-COMMA-CNT FOR ALL ','
|
||||
IF WS-COMMA-CNT < 1
|
||||
DISPLAY 'WARNING: Missing MODE, using FULL'
|
||||
END-IF
|
||||
UNSTRING WS-PARM DELIMITED BY ','
|
||||
INTO WS-PARM1 WS-PARM2
|
||||
END-UNSTRING
|
||||
UNSTRING WS-PARM1 DELIMITED BY '='
|
||||
INTO WS-KEY1 WS-VALUE1
|
||||
END-UNSTRING
|
||||
UNSTRING WS-PARM2 DELIMITED BY '='
|
||||
INTO WS-KEY2 WS-VALUE2
|
||||
END-UNSTRING
|
||||
YEARMONTH設定、MODE設定(FULL/SHORT判定)
|
||||
必須チェック:YEARMONTH未設定 → ABEND(CALL SUB03END)
|
||||
1-4.ワークエリア初期化
|
||||
1-5.DB接続(EXEC SQL CONNECT TO 'data/kin.db')
|
||||
1-6.出力ファイルOPEN(KIN09W01)
|
||||
1-7.ヘッダー行書出(WRITE AFTER ADVANCING PAGE)
|
||||
社員番号,日付,出勤時刻,退勤時刻,休暇種別,
|
||||
年休時間,事假時間,因公特批假時間,病欠時間,未申請欠勤時間
|
||||
|
||||
2.主処理(2000MAJSOR)(FETCH EOFまで下記を繰り返す)
|
||||
2-1.CURSOR FETCH(DAILY_RECORDS)
|
||||
2-2.CSV危険文字サニタイズ(INSPECT REPLACING)
|
||||
MOVE 各項目を退避 → WS-SAFE-FIELD
|
||||
INSPECT WS-SAFE-FIELD REPLACING ALL ',' BY ';'
|
||||
ALL X"0D" BY SPACE
|
||||
ALL X"0A" BY SPACE
|
||||
2-3.CSV行編集(STRING WITH POINTER)
|
||||
MOVE 1 TO WS-PTR
|
||||
STRING
|
||||
WS-EMP-ID DELIMITED BY SIZE
|
||||
',' DELIMITED BY SIZE
|
||||
WS-DATE DELIMITED BY SIZE
|
||||
',' DELIMITED BY SIZE
|
||||
WS-TIME-IN DELIMITED BY SIZE
|
||||
',' DELIMITED BY SIZE
|
||||
WS-TIME-OUT DELIMITED BY SIZE
|
||||
',' DELIMITED BY SIZE
|
||||
WS-LEAVE-TYPE DELIMITED BY SIZE
|
||||
',' DELIMITED BY SIZE
|
||||
WS-ANNUAL-H DELIMITED BY SIZE
|
||||
',' DELIMITED BY SIZE
|
||||
WS-PERSONAL-H DELIMITED BY SIZE
|
||||
',' DELIMITED BY SIZE
|
||||
WS-OFFICIAL-H DELIMITED BY SIZE
|
||||
',' DELIMITED BY SIZE
|
||||
WS-SICK-H DELIMITED BY SIZE
|
||||
',' DELIMITED BY SIZE
|
||||
WS-ABSENT-H DELIMITED BY SIZE
|
||||
INTO WS-CSV-LINE WITH POINTER WS-PTR
|
||||
END-STRING
|
||||
2-4.行数カウンタ加算
|
||||
2-5.100行ごとにヘッダー再出力(WRITE AFTER ADVANCING 2 LINES + ヘッダー行)
|
||||
100件毎 → WRITE WS-SEC-REC AFTER ADVANCING 2 LINES
|
||||
WRITE WS-HDR-REC AFTER ADVANCING 1 LINE
|
||||
2-6.データ行出力(WRITE AFTER ADVANCING 1 LINE)
|
||||
WRITE WS-OUT-REC FROM WS-CSV-LINE AFTER ADVANCING 1 LINE
|
||||
|
||||
3.MODE=SHORT時のみ追加処理(2500-SHORT-MODE)
|
||||
3-1.MONTHLY_ABSENCE CURSOR OPEN
|
||||
3-2.STRINGで集計行編集
|
||||
3-3.セクション区切り出力
|
||||
WRITE WS-SEC-REC AFTER ADVANCING 2 LINES
|
||||
3-4.集計行出力
|
||||
WRITE WS-OUT-REC AFTER ADVANCING 1 LINE
|
||||
|
||||
4.終了処理(3000STPSOR)
|
||||
4-1.CURSOR CLOSE
|
||||
4-2.DB切断
|
||||
4-3.出力ファイルCLOSE
|
||||
4-4.出力件数メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:6(出力件数)
|
||||
PARM1:'CSV-OUTPUT'
|
||||
PARM2:CUN-W01OUT(出力行数)
|
||||
4-5.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
### WRITE AFTER ADVANCING 3種の使い分け
|
||||
|
||||
| タイミング | 構文 | 説明 |
|
||||
|-----------|------|------|
|
||||
| ファイル先頭 | WRITE header-rec AFTER ADVANCING PAGE | 改ページ(最初のヘッダー) |
|
||||
| 100行ごと | WRITE sep-rec AFTER ADVANCING 2 LINES | セクション区切り(空行2行) |
|
||||
| 100行ごと | WRITE header-rec AFTER ADVANCING 1 LINE | 再ヘッダー出力 |
|
||||
| データ行 | WRITE data-rec AFTER ADVANCING 1 LINE | 通常データ行 |
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### CSV-OUTPUT(OUTREC/KIN09REC)200B FB
|
||||
|
||||
| No | 項目名 | 設定元 | 属性 | 備考 |
|
||||
|----|--------|--------|------|------|
|
||||
| 1 | CSV-LINE | STRING編集結果 | X(200) | CSV1行分の文字列データ |
|
||||
|
||||
---
|
||||
|
||||
## CSVフォーマット
|
||||
|
||||
ヘッダー行(WRITE AFTER ADVANCING PAGEで出力):
|
||||
```
|
||||
社員番号,日付,出勤時刻,退勤時刻,休暇種別,年休時間,事假時間,因公特批假時間,病欠時間,未申請欠勤時間
|
||||
```
|
||||
|
||||
データ行:
|
||||
```
|
||||
00000101,20260501,0900,1800,99,0.0,0.0,0.0,0.0,0.0
|
||||
00000101,20260502,0900,1300,02,0.0,4.0,0.0,0.0,4.0
|
||||
```
|
||||
|
||||
MODE=SHORT時の集計行(WRITE AFTER ADVANCING 2 LINESで区切り):
|
||||
```
|
||||
社員番号,年月,年休計,事假計,因公特批假計,病欠計,未申請欠勤計
|
||||
00000101,202605,8.0,4.0,0.0,0.0,4.0
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## カバレッジ構文一覧
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| ACCEPT FROM COMMAND-LINE | PARM解析 |
|
||||
| INSPECT TALLYING | カンマ区切り数チェック |
|
||||
| INSPECT REPLACING | CSV危険文字置換 ← 新規 |
|
||||
| STRING WITH POINTER | 位置指定CSV行編集 ← 新規 |
|
||||
| WRITE AFTER ADVANCING PAGE | ページヘッダー制御 ← 新規 |
|
||||
| WRITE AFTER ADVANCING 2 LINES | セクション区切り ← 新規 |
|
||||
| WRITE AFTER ADVANCING 1 LINE | データ行出力 ← 新規 |
|
||||
| STRING | CSV行編集(DELIMITED BY SIZE) |
|
||||
| EXEC SQL SELECT(CURSOR) | DB読込 |
|
||||
| DISPLAY | 警告メッセージ表示 |
|
||||
@@ -0,0 +1,52 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 残業統計管理システム |
|
||||
| 2 | プログラムID | SUB01DAT |
|
||||
| 3 | プログラム名 | 運用日付取得サブ |
|
||||
| 4 | PGMタイプ | サブ |
|
||||
| 5 | PGMパターン | - |
|
||||
| 6 | 機能概要 | 現在日付を取得し、運用日付(YYYYMMDD)として返す |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 使用方法
|
||||
|
||||
```
|
||||
CALL 'SUB01DAT' USING D01UBSPAR
|
||||
```
|
||||
|
||||
### 入出力パラメータ
|
||||
|
||||
| COPY句 | ZANDATAC |
|
||||
|------------|----------|
|
||||
|
||||
| NO | 入出力区分 | 名称 | 属性 | 桁数 | 説明 |
|
||||
|----|-----------|------|------|------|------|
|
||||
| 1 | O | D01FKICOD | S9(4) COMP | 4 | 復帰コード(0000:正常) |
|
||||
| 2 | O | D01UBSUDATE | 9(8) | 8 | 運用日付(YYYYMMDD) |
|
||||
|
||||
### リターンコード一覧
|
||||
|
||||
| NO | コード | 説明 |
|
||||
|----|--------|------|
|
||||
| 1 | 0000 | 正常終了 |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.制御処理(0000MAINSOR)
|
||||
1-1.現在日時を取得する。
|
||||
MOVE FUNCTION CURRENT-DATE TO WRK-SYS-DATE.
|
||||
1-2.YYYYMMDD部分を抽出する。
|
||||
MOVE WRK-SYS-DATE(1:8) TO D01UBSUDATE.
|
||||
1-3.正常終了
|
||||
MOVE ZERO TO D01FKICOD.
|
||||
1-4.復帰(GOBACK)。
|
||||
```
|
||||
@@ -0,0 +1,72 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 残業統計管理システム |
|
||||
| 2 | プログラムID | SUB02MSG |
|
||||
| 3 | プログラム名 | メッセージ編集出力サブ |
|
||||
| 4 | PGMタイプ | サブ |
|
||||
| 5 | PGMパターン | - |
|
||||
| 6 | 機能概要 | メッセージ番号とパラメータを編集し、標準出力へ出力する。 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 使用方法
|
||||
|
||||
```
|
||||
CALL 'SUB02MSG' USING M00MHOPAR
|
||||
```
|
||||
|
||||
### 入出力パラメータ
|
||||
|
||||
| COPY句 | ZANMSGAC |
|
||||
|------------|----------|
|
||||
|
||||
| NO | 入出力区分 | 名称 | 属性 | 桁数 | 説明 |
|
||||
|----|-----------|------|------|------|------|
|
||||
| 1 | I | M00MSGCOD | 9(3) | 3 | メッセージ番号 |
|
||||
| 2 | I | M00UMKDATS22-01 | X(30) | 30 | パラメータ1 |
|
||||
| 3 | I | M00UMKDATS22-02 | X(30) | 30 | パラメータ2 |
|
||||
| 4 | I | M00UMKDATS22-03 | X(30) | 30 | パラメータ3 |
|
||||
| 5 | I | M00UMKDATS22-04 | X(30) | 30 | パラメータ4 |
|
||||
| 6 | I | M00UMKDATS22-05 | X(30) | 30 | パラメータ5 |
|
||||
| 7 | I | M00UMKDATS22-06 | X(30) | 30 | パラメータ6 |
|
||||
| 8 | I | M00UMKDATS22-07 | X(30) | 30 | パラメータ7 |
|
||||
| 9 | I | M00UMKDATS22-08 | X(30) | 30 | パラメータ8 |
|
||||
| 10 | I | M00UMKDATS22-09 | X(30) | 30 | パラメータ9 |
|
||||
| 11 | I | M00UMKDATS22-10 | X(30) | 30 | パラメータ10 |
|
||||
|
||||
### リターンコード一覧
|
||||
|
||||
| NO | コード | 説明 |
|
||||
|----|--------|------|
|
||||
| 1 | - | 復帰コードなし(GOBACKで復帰) |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.制御処理(0000MAINSOR)
|
||||
1-1.メッセージ行(WRK-MSG-LINE)を編集する。
|
||||
STRING 'MSG['
|
||||
M00MSGCOD
|
||||
'] P1='
|
||||
M00UMKDATS22-01
|
||||
' P2='
|
||||
M00UMKDATS22-02
|
||||
' P3='
|
||||
M00UMKDATS22-03
|
||||
' P4='
|
||||
M00UMKDATS22-04
|
||||
' P5='
|
||||
M00UMKDATS22-05
|
||||
INTO WRK-MSG-LINE
|
||||
END-STRING.
|
||||
1-2.標準出力へ出力する。
|
||||
DISPLAY WRK-MSG-LINE.
|
||||
1-3.復帰(GOBACK)。
|
||||
```
|
||||
@@ -0,0 +1,51 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 残業統計管理システム |
|
||||
| 2 | プログラムID | SUB03END |
|
||||
| 3 | プログラム名 | ABEND処理サブ |
|
||||
| 4 | PGMタイプ | サブ |
|
||||
| 5 | PGMパターン | - |
|
||||
| 6 | 機能概要 | ABENDコードを表示し、異常終了する。 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 使用方法
|
||||
|
||||
```
|
||||
CALL 'SUB03END' USING E01ABDPAR
|
||||
```
|
||||
|
||||
### 入出力パラメータ
|
||||
|
||||
| COPY句 | ZANENDAC |
|
||||
|------------|----------|
|
||||
|
||||
| NO | 入出力区分 | 名称 | 属性 | 桁数 | 説明 |
|
||||
|----|-----------|------|------|------|------|
|
||||
| 1 | I | E01ABDCOD | 9(3) | 3 | ABENDコード |
|
||||
|
||||
### リターンコード一覧
|
||||
|
||||
| NO | コード | 説明 |
|
||||
|----|--------|------|
|
||||
| 1 | - | ABENDするため復帰コードなし(STOP RUN実行) |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.制御処理(0000MAINSOR)
|
||||
1-1.ABENDメッセージを編集する。
|
||||
MOVE 'ABEND CODE=' TO WRK-ABEND-MSG.
|
||||
MOVE E01ABDCOD TO WRK-ABEND-MSG(12:3).
|
||||
1-2.メッセージを表示する。
|
||||
DISPLAY WRK-ABEND-MSG.
|
||||
1-3.異常終了する。
|
||||
STOP RUN.
|
||||
```
|
||||
@@ -0,0 +1,115 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 残業統計管理システム |
|
||||
| 2 | プログラムID | SUB04CHK |
|
||||
| 3 | プログラム名 | 項目チェックサブ |
|
||||
| 4 | PGMタイプ | サブ |
|
||||
| 5 | PGMパターン | 項目チェック |
|
||||
| 6 | 機能概要 | チェックタイプに応じてデータ妥当性を検証する。 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 使用方法
|
||||
|
||||
```
|
||||
CALL 'SUB04CHK' USING C01CHKPAR
|
||||
```
|
||||
|
||||
### 入出力パラメータ
|
||||
|
||||
| COPY句 | ZANCHKAC |
|
||||
|------------|----------|
|
||||
|
||||
| NO | 入出力区分 | 名称 | 属性 | 桁数 | 説明 |
|
||||
|----|-----------|------|------|------|------|
|
||||
| 1 | I | C01CHKTYP | X(8) | 8 | チェックタイプ(DATE/TIME/NUM/EMPID) |
|
||||
| 2 | I | C01CHKDAT | X(80) | 80 | チェック対象データ |
|
||||
| 3 | O | C01CHKRRC | 9(4) | 4 | 復帰コード(0000:正常,0001:日付不正,0002:時刻不正,0003:数字不正) |
|
||||
|
||||
### リターンコード一覧
|
||||
|
||||
| NO | コード | 説明 |
|
||||
|----|--------|------|
|
||||
| 1 | 0000 | 正常終了(チェックOK) |
|
||||
| 2 | 0001 | 日付不正(DATE指定時、月01〜12/日01〜31範囲外) |
|
||||
| 3 | 0002 | 時刻不正(TIME指定時、時00〜23/分00〜59範囲外) |
|
||||
| 4 | 0003 | 数字不正(NUM指定時、非数字文字を含む) |
|
||||
| 5 | 0004 | 社員番号不正(EMPID指定時、8桁以外または空欄) |
|
||||
| 6 | 9999 | チェックタイプ不明 |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.制御処理(0000MAINSOR)
|
||||
1-1.C01CHKTYPにより分岐する。
|
||||
1-1-1.C01CHKTYP = 'DATE' の場合
|
||||
1000CHKDATEへ。
|
||||
1-1-2.C01CHKTYP = 'TIME' の場合
|
||||
2000CHKTIMEへ。
|
||||
1-1-3.C01CHKTYP = 'NUM' の場合
|
||||
3000CHKNUMへ。
|
||||
1-1-4.C01CHKTYP = 'EMPID' の場合
|
||||
4000CHKEMPへ。
|
||||
1-1-5.その他の場合
|
||||
C01CHKRRC = 9999 を設定し、1-2へ。
|
||||
1-2.復帰(GOBACK)。
|
||||
|
||||
2.日付チェック(1000CHKDATE)
|
||||
2-1.C01CHKDATから年月日を抽出する。
|
||||
YYYY = C01CHKDAT(1:4)
|
||||
MM = C01CHKDAT(5:2)
|
||||
DD = C01CHKDAT(7:2)
|
||||
2-2.月チェック(MM)
|
||||
2-2-1.MM < 1 OR MM > 12
|
||||
→ C01CHKRRC = 0001 を設定し、2-5へ。
|
||||
2-3.日チェック(DD)
|
||||
2-3-1.DD < 1 OR DD > 31
|
||||
→ C01CHKRRC = 0001 を設定し、2-5へ。
|
||||
2-4.正常の場合
|
||||
C01CHKRRC = 0000 を設定する。
|
||||
2-5.復帰(0000MAINSOR-EXTへ)。
|
||||
|
||||
3.時刻チェック(2000CHKTIME)
|
||||
3-1.C01CHKDATから時分を抽出する。
|
||||
HH = C01CHKDAT(1:2)
|
||||
MM = C01CHKDAT(3:2)
|
||||
3-2.時チェック(HH)
|
||||
3-2-1.HH > 23
|
||||
→ C01CHKRRC = 0002 を設定し、3-5へ。
|
||||
3-3.分チェック(MM)
|
||||
3-3-1.MM > 59
|
||||
→ C01CHKRRC = 0002 を設定し、3-5へ。
|
||||
3-4.正常の場合
|
||||
C01CHKRRC = 0000 を設定する。
|
||||
3-5.復帰(0000MAINSOR-EXTへ)。
|
||||
|
||||
4.数字チェック(3000CHKNUM)
|
||||
4-1.C01CHKDATにSPACEより前の文字があるかチェックする。
|
||||
INSPECT C01CHKDAT TALLYING WRK-NN FOR
|
||||
CHARACTERS BEFORE INITIAL SPACE.
|
||||
4-2.WRK-NN > 0 の場合
|
||||
C01CHKRRC = 0003 を設定し、4-4へ。
|
||||
4-3.正常の場合
|
||||
C01CHKRRC = 0000 を設定する。
|
||||
4-4.復帰(0000MAINSOR-EXTへ)。
|
||||
|
||||
5.社員番号チェック(4000CHKEMP)
|
||||
5-1.桁数チェック(8桁以内)
|
||||
C01CHKDAT(9:72)にSPACES以外がある場合
|
||||
C01CHKRRC = 0004 を設定し、5-4へ。
|
||||
5-2.空欄チェック
|
||||
INSPECT C01CHKDAT(1:8) TALLYING WRK-NN FOR
|
||||
CHARACTERS BEFORE INITIAL SPACE.
|
||||
WRK-NN > 0 の場合
|
||||
C01CHKRRC = 0004 を設定し、5-4へ。
|
||||
5-3.正常の場合
|
||||
C01CHKRRC = 0000 を設定する。
|
||||
5-4.復帰(0000MAINSOR-EXTへ)。
|
||||
```
|
||||
@@ -0,0 +1,107 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 残業統計管理システム |
|
||||
| 2 | プログラムID | SUB05TIM |
|
||||
| 3 | プログラム名 | 時刻丸め計算サブ |
|
||||
| 4 | PGMタイプ | サブ |
|
||||
| 5 | PGMパターン | - |
|
||||
| 6 | 機能概要 | 時間値を指定単位で丸め計算する。 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 使用方法
|
||||
|
||||
```
|
||||
CALL 'SUB05TIM' USING T01TIMPAR
|
||||
```
|
||||
|
||||
### 入出力パラメータ
|
||||
|
||||
| COPY句 | ZANTIMAC |
|
||||
|------------|----------|
|
||||
|
||||
| NO | 入出力区分 | 名称 | 属性 | 桁数 | 説明 |
|
||||
|----|-----------|------|------|------|------|
|
||||
| 1 | I | T01TIMHRS | 9(4)V9(1) | 4.1 | 入力時間(HH.h) |
|
||||
| 2 | O | T01TIMOUT | 9(4)V9(1) | 4.1 | 出力時間(丸め後) |
|
||||
| 3 | I | T01TIMRRC | 9(4) | 4 | 丸めモード(0:0.5h切上,1:0.1h切上,2:0.1h切捨,3:単純四捨五入) |
|
||||
|
||||
### リターンコード一覧
|
||||
|
||||
| NO | コード | 説明 |
|
||||
|----|--------|------|
|
||||
| 1 | 0000 | 正常終了 |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.制御処理(0000MAINSOR)
|
||||
1-1.T01TIMRRCにより丸めモードを分岐する。
|
||||
1-1-1.T01TIMRRC = 0 の場合(0.5時間単位・切上)
|
||||
1000RNDHALFへ。
|
||||
1-1-2.T01TIMRRC = 1 の場合(0.1時間単位・切上)
|
||||
2000RNDUPへ。
|
||||
1-1-3.T01TIMRRC = 2 の場合(0.1時間単位・切捨)
|
||||
3000RNDDOWNへ。
|
||||
1-1-4.T01TIMRRC = 3 の場合(単純四捨五入・0.1h単位)
|
||||
4000RNDNORMALへ。
|
||||
1-1-5.その他の場合
|
||||
T01TIMOUT = T01TIMHRS をそのまま設定する。
|
||||
1-2.復帰(GOBACK)。
|
||||
|
||||
2.0.5時間単位・切上(1000RNDHALF)
|
||||
2-1.T01TIMHRSを分に変換する。
|
||||
WRK-MINUTES = T01TIMHRS * 60.
|
||||
2-2.30分単位で切り上げる(DIVIDE REMAINDER)。
|
||||
DIVIDE WRK-MINUTES BY 30
|
||||
GIVING WRK-HOURS
|
||||
REMAINDER WRK-REMAINDER.
|
||||
2-2-1.WRK-REMAINDER > 0 の場合
|
||||
WRK-HOURS = WRK-HOURS + 1.
|
||||
2-2-2.WRK-REMAINDER = 0 の場合
|
||||
そのまま。
|
||||
2-3.時間に戻す。
|
||||
T01TIMOUT = WRK-HOURS * 0.5.
|
||||
2-4.復帰(0000MAINSOR-EXTへ)。
|
||||
|
||||
3.0.1時間単位・切上(2000RNDUP)
|
||||
3-1.T01TIMHRSを分に変換する。
|
||||
WRK-MINUTES = T01TIMHRS * 60.
|
||||
3-2.6分単位で切り上げる(DIVIDE REMAINDER)。
|
||||
DIVIDE WRK-MINUTES BY 6
|
||||
GIVING WRK-HOURS
|
||||
REMAINDER WRK-REMAINDER.
|
||||
3-2-1.WRK-REMAINDER > 0 の場合
|
||||
WRK-HOURS = WRK-HOURS + 1.
|
||||
3-2-2.WRK-REMAINDER = 0 の場合
|
||||
そのまま。
|
||||
3-3.時間に戻す。
|
||||
T01TIMOUT = WRK-HOURS * 0.1.
|
||||
3-4.復帰(0000MAINSOR-EXTへ)。
|
||||
|
||||
4.0.1時間単位・切捨(3000RNDDOWN)
|
||||
4-1.T01TIMHRSを分に変換する。
|
||||
WRK-MINUTES = T01TIMHRS * 60.
|
||||
4-2.6分単位で切り捨てる(DIVIDE REMAINDER)。
|
||||
DIVIDE WRK-MINUTES BY 6
|
||||
GIVING WRK-HOURS
|
||||
REMAINDER WRK-REMAINDER.
|
||||
4-3.時間に戻す。
|
||||
T01TIMOUT = WRK-HOURS * 0.1.
|
||||
4-4.復帰(0000MAINSOR-EXTへ)。
|
||||
|
||||
5.単純四捨五入・0.1h単位(4000RNDNORMAL)
|
||||
5-1.T01TIMHRSに0.05を加算する。
|
||||
WRK-HOURS = T01TIMHRS + 0.05.
|
||||
5-2.小数点第2位以下を切り捨てる。
|
||||
T01TIMOUT = WRK-HOURS.
|
||||
*> 9(4)V9(1)へのMOVEにより自動で切捨
|
||||
5-3.復帰(0000MAINSOR-EXTへ)。
|
||||
```
|
||||
@@ -0,0 +1,144 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 残業統計管理システム |
|
||||
| 2 | プログラムID | ZAN01CHK |
|
||||
| 3 | プログラム名 | 残業申請振分処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | 振り分け |
|
||||
| 6 | 機能概要 | CSV形式の残業申請ファイルを読み込み、ステータスによって振り分ける。 |
|
||||
| 7 | | ステータス0/1:有効申請としてOVT-VALIDに出力 |
|
||||
| 8 | | ステータス9:取消申請としてOVT-CANCELに出力 |
|
||||
| 9 | | その他:エラーとしてERROR-LOGに出力 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | OVT-APPLY(CSV) | ソート不要。CSV形式(カンマ区切り) |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | OVT-APPLY | R01 | ZAN01R01 | I | 自前(80B) | F | | 80 | PS | CSV形式 |
|
||||
| 2 | OVT-VALID | W01 | ZAN01W01 | O | ZAN01REC | FB | | 80 | PS | |
|
||||
| 3 | OVT-CANCEL | W02 | ZAN01W02 | O | ZAN01REC | FB | | 80 | PS | |
|
||||
| 4 | ERROR-LOG | W03 | ZAN01W03 | O | ZAN05REC | VB | | 200 | PS | |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | OVT-APPLY | なし | なし |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC |
|
||||
| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 3 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
| 4 | 項目チェックSUB | SUB04CHK | ZANCHKAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
1-4.運用日付取得SUB(SUB01DAT)により運用日を取得する。
|
||||
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
|
||||
【メッセージ編集】
|
||||
メッセージ番号:5(サブエラー)
|
||||
PARM1:'SUB01DAT'
|
||||
PARM2:復帰コード
|
||||
【ABEND処理SUB】
|
||||
ABENDコード:999
|
||||
1-5.使用ファイルのオープン
|
||||
1-6.R01を読み込む。(1100R01INNSOR)(1回目)
|
||||
|
||||
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
|
||||
2-1.CSVの分解
|
||||
UNSTRINGでカンマ区切りのCSVを各項目に分解する。(2010CSVSOR)
|
||||
2-2.ステータス判定
|
||||
2-2-1.ステータスが0または1の場合
|
||||
項目チェックを実施し、エラーがあればERROR-LOGに出力、なければOVT-VALIDに出力。(2020VALIDATESOR)
|
||||
2-2-1-1.日付チェック(SUB04CHK)。エラー→W03出力
|
||||
2-2-1-2.開始時刻>=1830チェック。NG→W03出力
|
||||
2-2-1-3.開始時刻<終了時刻チェック。NG→W03出力
|
||||
2-2-1-4.時間差>=30分チェック。NG→W03出力
|
||||
2-2-1-5.すべて通過→W01出力
|
||||
2-2-2.ステータスが9の場合
|
||||
OVT-CANCELにそのまま出力する。(2030CANCELSOR)
|
||||
2-2-3.その他の場合
|
||||
ERROR-LOGに出力する。(2040ERRORSOR)
|
||||
2-3.R01を読み込む。(1100R01INNSOR)(2件目以降)
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.入出力ファイルのクローズ
|
||||
3-2.入出力件数出力メッセージ出力
|
||||
【入力メッセージ編集】
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:当該入力ファイルのDD名
|
||||
PARM2:当該入力ファイルの件数
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:当該出力ファイルのDD名
|
||||
PARM2:当該出力ファイルの件数
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/OVT-VALID)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | APPL-ID | CSV同項目を設定 | |
|
||||
| 2 | EMP-ID | CSV同項目を設定 | |
|
||||
| 3 | APPL-DATE | CSV同項目を設定 | |
|
||||
| 4 | START-TIME | CSV同項目を設定 | |
|
||||
| 5 | END-TIME | CSV同項目を設定 | |
|
||||
| 6 | STATUS | CSV同項目を設定 | 0または1 |
|
||||
| 7 | OVT-TYPE | CSV同項目を設定 | |
|
||||
| 8 | FILLER | CSV同項目を設定 | |
|
||||
|
||||
### 出力ファイル2(W02/OVT-CANCEL)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | APPL-ID | CSV同項目を設定 | |
|
||||
| 2 | EMP-ID | CSV同項目を設定 | |
|
||||
| 3 | APPL-DATE | CSV同項目を設定 | |
|
||||
| 4 | START-TIME | CSV同項目を設定 | |
|
||||
| 5 | END-TIME | CSV同項目を設定 | |
|
||||
| 6 | STATUS | CSV同項目を設定 | 9 |
|
||||
| 7 | OVT-TYPE | CSV同項目を設定 | |
|
||||
| 8 | FILLER | CSV同項目を設定 | |
|
||||
|
||||
### 出力ファイル3(W03/ERROR-LOG)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 01で固定 | |
|
||||
| 2 | ERR-DETAIL | STRINGで編集 | エラー内容 |
|
||||
@@ -0,0 +1,123 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 残業統計管理システム |
|
||||
| 2 | プログラムID | ZAN02CHK |
|
||||
| 3 | プログラム名 | 時間帯重複チェック処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | 項目チェック |
|
||||
| 6 | 機能概要 | OVT-VSORTファイルの同一社員・同一日付内の時間帯重複をチェックする。 |
|
||||
| 7 | | 重複なしのレコードはOVT-NODUPに出力 |
|
||||
| 8 | | 重複ありのレコードはERROR-LOGに出力 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | OVT-VSORT | 社員番号>日付>開始時刻で昇順ソート済み |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | OVT-VSORT | R01 | ZAN02R01 | I | ZAN01REC | FB | | 80 | PS | |
|
||||
| 2 | OVT-NODUP | W01 | ZAN02W01 | O | ZAN01REC | FB | | 80 | PS | |
|
||||
| 3 | ERROR-LOG | W02 | ZAN02W02 | O | ZAN05REC | VB | | 200 | PS | |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | OVT-VSORT | EMP-ID>APPL-DATE>START-TIME(昇順) | EMP-ID>APPL-DATE |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC |
|
||||
| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 3 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
1-4.運用日付取得SUB(SUB01DAT)により運用日を取得する。
|
||||
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
|
||||
【メッセージ編集】
|
||||
メッセージ番号:5(サブエラー)
|
||||
PARM1:'SUB01DAT'
|
||||
PARM2:復帰コード
|
||||
【ABEND処理SUB】
|
||||
ABENDコード:999
|
||||
1-5.使用ファイルのオープン
|
||||
1-6.R01を読み込む。(1100R01INNSOR)(1回目)
|
||||
1-7.1件目をW01に出力し、前レコードに保持する。
|
||||
|
||||
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
|
||||
2-1.前レコードとの比較
|
||||
2-1-1.同一社員番号かつ同一日付の場合
|
||||
2-1-1-1.前終了時刻>現開始時刻 → 重複あり(2011OVERLAPERRSOR)
|
||||
エラーカテゴリ02でERROR-LOGに出力
|
||||
2-1-1-2.前終了時刻<=現開始時刻 → 重複なし(2012NORMALOUTSOR)
|
||||
W01に出力
|
||||
2-1-2.異なる社員番号または日付の場合(キーブレイク)
|
||||
キーブレイク処理として前レコードを更新しW01に出力(2013KEYBRSOR)
|
||||
2-2.R01を読み込む。(1100R01INNSOR)(2件目以降)
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.入出力ファイルのクローズ
|
||||
3-2.入出力件数出力メッセージ出力
|
||||
【入力メッセージ編集】
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:当該入力ファイルのDD名
|
||||
PARM2:当該入力ファイルの件数
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:当該出力ファイルのDD名
|
||||
PARM2:当該出力ファイルの件数
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/OVT-NODUP)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | APPL-ID | R01.同項目を設定 | |
|
||||
| 2 | EMP-ID | R01.同項目を設定 | |
|
||||
| 3 | APPL-DATE | R01.同項目を設定 | |
|
||||
| 4 | START-TIME | R01.同項目を設定 | |
|
||||
| 5 | END-TIME | R01.同項目を設定 | |
|
||||
| 6 | STATUS | R01.同項目を設定 | |
|
||||
| 7 | OVT-TYPE | R01.同項目を設定 | |
|
||||
| 8 | FILLER | R01.同項目を設定 | |
|
||||
|
||||
### 出力ファイル2(W02/ERROR-LOG)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 02で固定 | 重複エラー |
|
||||
| 2 | ERR-DETAIL | STRINGで編集 | EMP-IDと日付を編集 |
|
||||
@@ -0,0 +1,122 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 残業統計管理システム |
|
||||
| 2 | プログラムID | ZAN03CHK |
|
||||
| 3 | プログラム名 | 打刻時間照合処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | マッチング(N:1) |
|
||||
| 6 | 機能概要 | OVT-NODUPとPUNCH-SORTEDを突合し申請時間帯の照合を行う。 |
|
||||
| 7 | | 申請時間帯が出勤〜退勤の範囲内かを確認する。 |
|
||||
| 8 | | 申請日が休日かを判定しOVT-TYPEを付加する。 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | OVT-NODUP | 社員番号>日付で昇順ソート済み |
|
||||
| 2 | PUNCH-SORTED | 社員番号>日付で昇順ソート済み |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | OVT-NODUP | R01 | ZAN03R01 | I | ZAN01REC | FB | | 80 | PS | |
|
||||
| 2 | PUNCH-SORTED | R02 | ZAN03R02 | I | 自前(80B) | FB | | 80 | PS | |
|
||||
| 3 | HOLIDAY-FILE | R03 | ZAN03R03 | I | 自前(80B) | FB | | 80 | PS | 休日カレンダー |
|
||||
| 4 | OVT-CHECKED | W01 | ZAN03W01 | O | ZAN01REC | FB | | 80 | PS | |
|
||||
| 5 | ERROR-LOG | W02 | ZAN03W02 | O | ZAN05REC | VB | | 200 | PS | |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | OVT-NODUP | EMP-ID>APPL-DATE(昇順) | EMP-ID>APPL-DATE |
|
||||
| 2 | PUNCH-SORTED | EMP-ID>DATE(昇順) | EMP-ID>DATE |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 2 | ABEND処理SUB | SUB03END | ZANENDAC |※ コード上では未使用(PERFORM元なし)|
|
||||
|
||||
※ ZAN03CHKはSUB01DATを使用しない。日付取得は不要のためFUNCTION CURRENT-DATEも使用しない。
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
1-4.使用ファイルのオープン
|
||||
1-6.HOLIDAY-FILEを全件読込しHOLIDAY-TABLEに設定する。(1300HOLIDAYSOR)
|
||||
1-7.R01を読み込む。(1100R01INNSOR)(1回目)
|
||||
1-8.R02を読み込む。(1200R02INNSOR)(1回目)
|
||||
|
||||
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
|
||||
2-1.R01キーとR02キーを比較
|
||||
2-1-1.R01キー < R02キー(打刻データなし)
|
||||
ERROR-LOGにエラー出力する(エラーカテゴリ03)。(2010NOMATCHSOR)
|
||||
2-1-2.R01キー = R02キー(マッチ)
|
||||
時間範囲チェックを実施する。(2020MATCHSOR)
|
||||
2-1-2-1.開始時刻>=出勤時刻 かつ 終了時刻<=退勤時刻 → 通過
|
||||
OVT-TYPEを設定しW01に出力する。(2200SETOVTSOR)
|
||||
2-1-2-2.範囲外 → ERROR-LOGに出力(エラーカテゴリ03)
|
||||
2-1-3.R01キー > R02キー(R02スキップ)
|
||||
R02を1件読み進める。(1200R02INNSOR)
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.入出力ファイルのクローズ
|
||||
3-2.入出力件数出力メッセージ出力
|
||||
【入力メッセージ編集】
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:当該入力ファイルのDD名
|
||||
PARM2:当該入力ファイルの件数
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:当該出力ファイルのDD名
|
||||
PARM2:当該出力ファイルの件数
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/OVT-CHECKED)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | APPL-ID | R01.同項目を設定 | |
|
||||
| 2 | EMP-ID | R01.同項目を設定 | |
|
||||
| 3 | APPL-DATE | R01.同項目を設定 | |
|
||||
| 4 | START-TIME | R01.同項目を設定 | |
|
||||
| 5 | END-TIME | R01.同項目を設定 | |
|
||||
| 6 | STATUS | R01.同項目を設定 | |
|
||||
| 7 | OVT-TYPE | 2200SETOVTSORで設定 | W:平日/H:休日 |
|
||||
| 8 | FILLER | R01.同項目を設定 | |
|
||||
|
||||
### 出力ファイル2(W02/ERROR-LOG)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 03で固定 | 打刻不突合 |
|
||||
| 2 | ERR-DETAIL | STRINGで編集 | 社員番号と日付を編集 |
|
||||
@@ -0,0 +1,144 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 残業統計管理システム |
|
||||
| 2 | プログラムID | ZAN04MAT |
|
||||
| 3 | プログラム名 | 取消マッチング処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | マッチング(1:1) |
|
||||
| 6 | 機能概要 | OVT-SORTED(有効申請)とOVT-CSORT(取消申請)を申請番号(APPL-ID)で1:1マッチングし、結果を振り分ける。 |
|
||||
| 7 | | 申請番号一致(取消済):監査証跡としてERROR-LOGに記録 |
|
||||
| 8 | | 申請のみ(取消なし):OVT-MATCHEDに出力(処理番号=1) |
|
||||
| 9 | | 取消のみ(既DB登録済):OVT-DBCLEANに出力(DB削除用) |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | ファイルR01(OVT-SORTED) | 申請番号(APPL-ID)で昇順ソート済、重複なし |
|
||||
| 2 | ファイルR02(OVT-CSORT) | 申請番号(APPL-ID)で昇順ソート済、重複なし |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | OVT-SORTED | R01 | ZAN04R01 | I | ZAN01REC | FB | | 80 | PS | 有効申請(APPL-ID昇順) |
|
||||
| 2 | OVT-CSORT | R02 | ZAN04R02 | I | ZAN01REC | FB | | 80 | PS | 取消申請(APPL-ID昇順) |
|
||||
| 3 | OVT-MATCHED | W01 | ZAN04W01 | O | ZAN02REC | FB | | 80 | PS | マッチング結果(処理番号付) |
|
||||
| 4 | OVT-DBCLEAN | W02 | ZAN04W02 | O | ZAN04REC | FB | | 80 | PS | DB削除用(APPL-IDのみ) |
|
||||
| 5 | ERROR-LOG | W03 | ZAN04W03 | O | ZAN05REC | VB | | 200 | PS | 監査証跡(取消マッチ記録) |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | ファイルR01 | APPL-ID(重複NG) | APPL-ID |
|
||||
| 2 | ファイルR02 | APPL-ID(重複NG) | APPL-ID |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC |
|
||||
| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 3 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
1-4.運用日付取得SUB(SUB01DAT)により運用日を取得する。
|
||||
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
|
||||
【メッセージ編集】
|
||||
メッセージ番号:5(サブエラー)
|
||||
PARM1:'SUB01DAT'
|
||||
PARM2:復帰コード
|
||||
【ABEND処理SUB】
|
||||
ABENDコード:999
|
||||
1-5.使用ファイルのオープン
|
||||
1-6.R01を読み込む。(1100R01INNSOR)(1回目)
|
||||
1-7.R02を読み込む。(1200R02INNSOR)(1回目)
|
||||
|
||||
2.主処理(2000MAJSOR)(R01、R02を全て読み終えるまで下記を繰り返す)
|
||||
2-1.マッチの場合(R01.APPL-ID = R02.APPL-ID)
|
||||
取消済みの申請のため、OVT-MATCHEDには出力しない。
|
||||
監査証跡としてERROR-LOGにマッチ情報を出力する。(2100MATCHSOR)
|
||||
【STRING編集】
|
||||
ERR-CATEGORY = 04
|
||||
ERR-DETAIL = 'CANCEL-MATCH: ' + 申請番号 + 社員番号 + 申請日 + 開始時刻 + 終了時刻
|
||||
R01を読み込む。(1100R01INNSOR)(2件目以降)
|
||||
R02を読み込む。(1200R02INNSOR)(2件目以降)
|
||||
2-2.R01のみの場合(R01.APPL-ID < R02.APPL-ID)
|
||||
R01をOVT-MATCHEDにSTRING編集して出力する。(2200R01OUTSOR)
|
||||
【STRING編集】
|
||||
W01 = 申請番号 + 社員番号 + 申請日 + 開始時刻 + 終了時刻 + ステータス + OVT-TYPE + 処理番号(01)
|
||||
R01を読み込む。(1100R01INNSOR)(2件目以降)
|
||||
2-3.R02のみの場合(R01.APPL-ID > R02.APPL-ID)
|
||||
R02をOVT-DBCLEANに出力する。(2300R02OUTSOR)
|
||||
W02.APPL-ID = R02.APPL-ID
|
||||
R02を読み込む。(1200R02INNSOR)(2件目以降)
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.入出力ファイルのクローズ
|
||||
3-2.入出力件数出力メッセージ出力
|
||||
【入力メッセージ編集】
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:当該入力ファイルのDD名
|
||||
PARM2:当該入力ファイルの件数
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:当該出力ファイルのDD名
|
||||
PARM2:当該出力ファイルの件数
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/OVT-MATCHED)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | APPL-ID | R01.APPL-ID | |
|
||||
| 2 | EMP-ID | R01.EMP-ID | |
|
||||
| 3 | APPL-DATE | R01.APPL-DATE | |
|
||||
| 4 | START-TIME | R01.START-TIME | |
|
||||
| 5 | END-TIME | R01.END-TIME | |
|
||||
| 6 | STATUS | R01.STATUS | |
|
||||
| 7 | OVT-TYPE | R01.OVT-TYPE | |
|
||||
| 8 | PROC-SEQ | 01固定 | 同一申請番号グループ内連番 |
|
||||
| 9 | FILLER | 初期値 | |
|
||||
|
||||
### 出力ファイル2(W02/OVT-DBCLEAN)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | APPL-ID | R02.APPL-ID | DB削除対象申請番号 |
|
||||
| 2 | FILLER | 初期値 | |
|
||||
|
||||
### 出力ファイル3(W03/ERROR-LOG)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 04で固定 | 取消マッチ監査証跡 |
|
||||
| 2 | ERR-DETAIL | STRINGで編集 | CANCEL-MATCH: + 申請番号 + 社員番号 + 申請日 + 開始時刻 + 終了時刻 |
|
||||
@@ -0,0 +1,169 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 残業統計管理システム |
|
||||
| 2 | プログラムID | ZAN05CAL |
|
||||
| 3 | プログラム名 | 残業時間集約処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | キーブレイク(集計) |
|
||||
| 6 | 機能概要 | OVT-SORTED2(申請番号+処理番号昇順)をキーブレイク集約し、 |
|
||||
| 7 | | 同一APPL-IDの全レコードの加班時間を積算し、 |
|
||||
| 8 | | OVT-SUMMARYに1レコードに集計して出力する。 |
|
||||
| 9 | | キーブレイク制御にCONTINUE/SET、時間計算にCOMPUTE ROUNDED/DIVIDEをそれぞれ使用する。 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | ファイルR01(OVT-SORTED2) | 申請番号(APPL-ID)>処理番号(PROC-SEQ)で昇順ソート済 |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | OVT-SORTED2 | R01 | ZAN05R01 | I | ZAN02REC | FB | | 80 | PS | マッチング結果(APPL-ID+PROC-SEQ昇順) |
|
||||
| 2 | OVT-SUMMARY | W01 | ZAN05W01 | O | ZAN03REC | FB | | 80 | PS | 集約結果(加班時間付加) |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | ファイルR01 | APPL-ID>PROC-SEQ(同一APPL-ID内複数明細あり) | APPL-ID(キーブレイク) |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC |
|
||||
| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 3 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
| 4 | 時刻丸め計算SUB | SUB05TIM | ZANTIMAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化(WRK-ACCUM-MIN含む)
|
||||
1-4.運用日付取得SUB(SUB01DAT)により運用日を取得する。
|
||||
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
|
||||
【メッセージ編集】
|
||||
メッセージ番号:5(サブエラー)
|
||||
PARM1:'SUB01DAT'
|
||||
PARM2:復帰コード
|
||||
【ABEND処理SUB】
|
||||
ABENDコード:999
|
||||
1-6.使用ファイルのオープン(R01入力、W01出力)
|
||||
1-7.R01の初回読込(1100R01INNSOR)
|
||||
1-8.初回読込成功時、WRK-PREV-APPL-IDに設定
|
||||
WRK-GROUP-STARTに現レコードのSTARTを保持
|
||||
WRK-LAST-RECに現レコードを保持
|
||||
SET WRK-GROUP-IS-ACTIVE TO TRUE
|
||||
(積算は主処理2000MAJSOR内の各分岐で行う)
|
||||
|
||||
2.主処理(2000MAJSOR)(R01を全て読み終え、最終グループ出力完了まで下記を繰り返す)
|
||||
2-1.EOFの場合(WRK-R01KEY = HIGH-VALUE)
|
||||
2-1-1.WRK-GROUP-IS-ACTIVEなら最終グループを出力(2100OUTSOR)
|
||||
2-1-2.SET WRK-GROUP-NOT-ACTIVE TO TRUE(ループ終了条件)
|
||||
2-2.初回設定済みの場合(WRK-PREV-APPL-ID = 初回値あり)
|
||||
2-2-1.同一APPL-IDの場合
|
||||
現レコードの時間差分を積算(2200ACCUMSOR)
|
||||
現レコードをWRK-LAST-RECに上書き保持(ENDは最終明細で上書きされる)
|
||||
グループ内最初の明細のSTARTはWRK-GROUP-STARTに保持済のため不変
|
||||
R01次回読込(1100R01INNSOR)
|
||||
2-2-2.異なるAPPL-IDの場合(キーブレイク)
|
||||
WRK-GROUP-IS-ACTIVEなら直前に保持していたグループを出力(2100OUTSOR)
|
||||
WRK-PREV-APPL-IDを現レコードのAPPL-IDで更新
|
||||
WRK-GROUP-STARTに現レコードのSTARTを保持
|
||||
現レコードをWRK-LAST-RECに設定
|
||||
2200ACCUMSORを呼出(新グループ初回レコードの時間差分を積算)
|
||||
SET WRK-GROUP-IS-ACTIVE TO TRUE
|
||||
R01次回読込(1100R01INNSOR)
|
||||
|
||||
3.積算処理(2200ACCUMSOR)
|
||||
3-1.現レコードの時刻→分変換
|
||||
DIVIDE R01START-TIME BY 100 GIVING WRK-START-HOUR REMAINDER WRK-START-MIN
|
||||
DIVIDE R01END-TIME BY 100 GIVING WRK-END-HOUR REMAINDER WRK-END-MIN
|
||||
COMPUTE WRK-START-TOTAL = WRK-START-HOUR * 60 + WRK-START-MIN
|
||||
COMPUTE WRK-END-TOTAL = WRK-END-HOUR * 60 + WRK-END-MIN
|
||||
3-2.差分計算
|
||||
COMPUTE WRK-DIFF-MIN = WRK-END-TOTAL - WRK-START-TOTAL
|
||||
3-3.WRK-ACCUM-MINに積算
|
||||
COMPUTE WRK-ACCUM-MIN = WRK-ACCUM-MIN + WRK-DIFF-MIN
|
||||
|
||||
4.計算出力処理(2100OUTSOR)
|
||||
4-1.分→時間変換(DIVIDE for coverage)
|
||||
DIVIDE WRK-ACCUM-MIN BY 60 GIVING WRK-INT-HOURS REMAINDER WRK-REMAIN-MIN
|
||||
4-2.COMPUTE ROUNDED for coverage(結果はSUB05TIMには渡さない)
|
||||
COMPUTE WRK-OVT-HOURS ROUNDED = WRK-ACCUM-MIN / 60
|
||||
ON SIZE ERROR
|
||||
CONTINUE
|
||||
MOVE ZERO TO WRK-OVT-HOURS
|
||||
END-COMPUTE
|
||||
4-3.SUB05TIM呼出(mode 2:0.1h単位切捨)
|
||||
COMPUTE WRK-TEMP-HOURS = WRK-ACCUM-MIN / 60(切捨用にそのまま)
|
||||
MOVE WRK-TEMP-HOURS TO T01TIMHRS
|
||||
MOVE 2 TO T01TIMRRC(mode 2)
|
||||
CALL 'SUB05TIM' USING T01TIMPAR
|
||||
MOVE T01TIMOUT TO WRK-OVT-HOURS
|
||||
4-4.OVT-SUMMARY出力
|
||||
【STRING編集相当(MOVE)】
|
||||
INITIALIZE W01OUTREC
|
||||
MOVE WRK-LAST-APPL-ID TO W01APPL-ID
|
||||
MOVE WRK-LAST-EMP-ID TO W01EMP-ID
|
||||
MOVE WRK-LAST-APPL-DATE TO W01APPL-DATE
|
||||
MOVE WRK-GROUP-START TO W01START-TIME
|
||||
MOVE WRK-LAST-END TO W01END-TIME
|
||||
MOVE WRK-OVT-HOURS TO W01OVT-HOURS
|
||||
MOVE WRK-LAST-OVT-TYPE TO W01OVT-TYPE
|
||||
WRITE W01OUTREC
|
||||
W01出力カウンタ加算
|
||||
4-5.WRK-ACCUM-MINをZEROに初期化(次グループ用)
|
||||
|
||||
5.終了処理(3000STPSOR)
|
||||
5-1.入出力ファイルのクローズ
|
||||
5-2.入出力件数出力メッセージ出力
|
||||
【入力メッセージ編集】
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:'ZAN05R01'
|
||||
PARM2:入力件数
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'ZAN05W01'
|
||||
PARM2:出力件数
|
||||
5-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/OVT-SUMMARY)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | APPL-ID | WRK-LAST-APPL-ID | 申請番号 |
|
||||
| 2 | EMP-ID | WRK-LAST-EMP-ID | 社員番号 |
|
||||
| 3 | APPL-DATE | WRK-LAST-APPL-DATE | 申請日 YYYYMMDD |
|
||||
| 4 | START-TIME | WRK-GROUP-START | 開始時刻 HHMM(グループ最初の明細のSTART) |
|
||||
| 5 | END-TIME | WRK-LAST-END | 終了時刻 HHMM |
|
||||
| 6 | OVT-HOURS | SUB05TIM出力(T01TIMOUT) | 加班時間(0.1h単位切捨) |
|
||||
| 7 | OVT-TYPE | WRK-LAST-OVT-TYPE | W=平日 / H=休日 |
|
||||
| 8 | FILLER | 初期値 | |
|
||||
@@ -0,0 +1,238 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 残業統計管理システム |
|
||||
| 2 | プログラムID | ZAN06UPD |
|
||||
| 3 | プログラム名 | 残業統計DB更新処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | DB更新 |
|
||||
| 6 | 機能概要 | OVT-SUMMARYの各レコードをOVT-APPLICATIONSテーブルにINSERT/UPSERTし、 |
|
||||
| 7 | | OVT-MONTHLYテーブルに月次集計を反映する。 |
|
||||
| 8 | | またOVT-DBCLEANの各レコードについて、該当申請を取消状態に更新し、 |
|
||||
| 9 | | OVT-MONTHLYから該当加班時間を減算する。 |
|
||||
| 10 | | 新規カバレッジ:EXEC SQL(INSERT/UPDATE/SELECT)、COMMIT/ROLLBACK、 |
|
||||
| 11 | | PERFORM VARYING/TEST AFTER、COBOL MULTIPLY |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | ファイルR01(OVT-SUMMARY) | ZAN05CALの出力、APPL-ID順ソート済 |
|
||||
| 2 | ファイルR02(OVT-DBCLEAN) | ZAN04MATの出力、DB上に該当APPL-IDが存在すること(孤立取消はエラー) |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | OVT-SUMMARY | R01 | ZAN06R01 | I | ZAN03REC | FB | | 80 | PS | 集約結果(加班時間付加) |
|
||||
| 2 | OVT-DBCLEAN | R02 | ZAN06R02 | I | ZAN04REC | FB | | 80 | PS | 孤立取消(DB削除対象) |
|
||||
| 3 | ERROR-LOG | W01 | ZAN06W01 | O | ZAN05REC | VB | | 200 | PS | DBエラー・データ不整合記録 |
|
||||
| 4 | OVERTIME-DB | DB | - | - | - | DB2 | - | - | DASD | EXEC SQLで直接操作 |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | キー項目 | 用途 |
|
||||
|----|-----------|---------|------|
|
||||
| 1 | ファイルR01 | APPL-ID | OVT-APPLICATIONS INSERT/UPDATEのキー |
|
||||
| 2 | ファイルR02 | APPL-ID | OVT-APPLICATIONS SELECT/UPDATEのキー |
|
||||
| 3 | DB OVT-MONTHLY | EMP-ID + YEAR-MONTH + OVT-TYPE | 月次集計UPSERTのキー |
|
||||
|
||||
### テーブル定義
|
||||
|
||||
#### OVT-APPLICATIONS(個別加班申請テーブル)
|
||||
|
||||
| カラム | 型 | 内容 |
|
||||
|--------|-----|------|
|
||||
| APPL-ID | CHAR(8) | 申請番号(PK) |
|
||||
| EMP-ID | CHAR(8) | 社員番号 |
|
||||
| APPL-DATE | CHAR(8) | 申請日 YYYYMMDD |
|
||||
| OVT-TYPE | CHAR(1) | W=平日 / H=休日 |
|
||||
| START-TIME | CHAR(4) | 開始時刻 HHMM |
|
||||
| END-TIME | CHAR(4) | 終了時刻 HHMM |
|
||||
| OVT-HOURS | DECIMAL(4,1) | 加班時間 |
|
||||
| STATUS | CHAR(1) | 0=有効 / 9=取消 |
|
||||
| UPDATED-AT | TIMESTAMP | 更新日時 |
|
||||
|
||||
#### OVT-MONTHLY(月次集計テーブル)
|
||||
|
||||
| カラム | 型 | 内容 |
|
||||
|--------|-----|------|
|
||||
| EMP-ID | CHAR(8) | 社員番号(PK) |
|
||||
| YEAR-MONTH | CHAR(6) | 対象年月 YYYYMM(PK) |
|
||||
| OVT-TYPE | CHAR(1) | W=平日 / H=休日(PK) |
|
||||
| OVT-HOURS | DECIMAL(6,1) | 加班時間合計 |
|
||||
| OVT-COUNT | INTEGER | 加班回数 |
|
||||
| UPDATED-AT | TIMESTAMP | 更新日時 |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC |
|
||||
| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 3 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
1-4.運用日付取得SUB(SUB01DAT)により運用日を取得する。
|
||||
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
|
||||
【メッセージ編集】
|
||||
メッセージ番号:5(サブエラー)
|
||||
PARM1:'SUB01DAT'
|
||||
PARM2:復帰コード
|
||||
【ABEND処理SUB】
|
||||
ABENDコード:999
|
||||
1-5.使用ファイルのオープン(R01/R02入力、W01出力)
|
||||
1-6.R01、R02の初回読込(1100R01INNSOR、1200R02INNSOR)
|
||||
|
||||
2.主処理(2000MAJSOR)
|
||||
2-1.処理フェーズ1:OVT-SUMMARY(R01)を全件処理
|
||||
R01 EOFまで以下の処理を繰り返す
|
||||
2-1-1.OVT-APPLICATIONSへのINSERTを試行
|
||||
【EXEC SQL INSERT】
|
||||
INSERT INTO OVT-APPLICATIONS (APPL-ID, EMP-ID, APPL-DATE, OVT-TYPE,
|
||||
START-TIME, END-TIME, OVT-HOURS, STATUS, UPDATED-AT)
|
||||
VALUES (:WRK-SQL-APPL-ID, :WRK-SQL-EMP-ID, :WRK-SQL-APPL-DATE,
|
||||
:WRK-SQL-OVT-TYPE, :WRK-SQL-START-TIME, :WRK-SQL-END-TIME,
|
||||
:WRK-SQL-OVT-HOURS, :WRK-SQL-STATUS, CURRENT TIMESTAMP)
|
||||
2-1-2.SQLCODE NOT = 0の場合(APPL-ID重複):
|
||||
【EXEC SQL UPDATE】
|
||||
UPDATE OVT-APPLICATIONS SET STATUS = :WRK-SQL-STATUS,
|
||||
UPDATED-AT = CURRENT TIMESTAMP
|
||||
WHERE APPL-ID = :WRK-SQL-APPL-ID
|
||||
SQLCODE異常時は9100DBERRSORへ
|
||||
2-1-3.SQLCODE = 0の場合:CUN-DBXINS加算、それ以外:CUN-DBXUPD加算
|
||||
2-1-4.OVT-MONTHLYのUPSERT(2110MONTHLYUPSOR)
|
||||
2-1-5.CUN-COMMITが閾値以上の場合、COMMIT実行(2300COMMITDBX)
|
||||
|
||||
2-2.処理フェーズ2:OVT-DBCLEAN(R02)を全件処理
|
||||
R02 EOFまで以下の処理を繰り返す
|
||||
2-2-1.SELECTでOVT-APPLICATIONSから該当レコード取得
|
||||
【EXEC SQL SELECT INTO】
|
||||
SELECT EMP-ID, APPL-DATE, OVT-TYPE, OVT-HOURS
|
||||
INTO :WRK-SQL-EMP-ID, :WRK-SQL-APPL-DATE, :WRK-SQL-OVT-TYPE,
|
||||
:WRK-SQL-OVT-HOURS
|
||||
FROM OVT-APPLICATIONS
|
||||
WHERE APPL-ID = :WRK-SQL-APPL-ID
|
||||
2-2-2.SQLCODE NOT = 0(該当なし=孤立取消):
|
||||
ERROR-LOGに出力(カテゴリ=20)、9999ABDSORで異常終了
|
||||
2-2-3.OVT-APPLICATIONSのSTATUSを'9'に更新
|
||||
【EXEC SQL UPDATE】
|
||||
UPDATE OVT-APPLICATIONS SET STATUS = '9',
|
||||
UPDATED-AT = CURRENT TIMESTAMP
|
||||
WHERE APPL-ID = :WRK-SQL-APPL-ID
|
||||
2-2-4.YEAR-MONTH抽出:APPL-DATE(1:6)
|
||||
2-2-5.OVT-MONTHLYから減算(2210MONTHLYSUBSOR)
|
||||
【EXEC SQL UPDATE(減算)】
|
||||
UPDATE OVT-MONTHLY SET
|
||||
OVT-HOURS = OVT-HOURS - :WRK-SQL-OVT-HOURS,
|
||||
OVT-COUNT = OVT-COUNT - 1,
|
||||
UPDATED-AT = CURRENT TIMESTAMP
|
||||
WHERE EMP-ID = :WRK-SQL-EMP-ID
|
||||
AND YEAR-MONTH = :WRK-SQL-YEAR-MONTH
|
||||
AND OVT-TYPE = :WRK-SQL-OVT-TYPE
|
||||
リトライ制御:PERFORM TEST AFTER VARYING(最大3回)
|
||||
SQLCODE≠0時はROLLBACKしてリトライ
|
||||
全リトライ消費後もSQLCODE≠0の場合、
|
||||
ERROR-LOG(カテゴリ=21)に出力し9999ABDSORで異常終了する
|
||||
(9100DBERRSORは通らない)
|
||||
2-2-6.CUN-COMMITが閾値以上の場合、COMMIT実行(2300COMMITDBX)
|
||||
|
||||
3.OVT-MONTHLY UPSERT処理(2110MONTHLYUPSOR)
|
||||
3-1.OVT-MONTHLYの存在確認SELECT
|
||||
【EXEC SQL SELECT INTO(DB-OVT-HOURS, DB-OVT-COUNT)】
|
||||
SELECT OVT-HOURS, OVT-COUNT
|
||||
INTO :DB-OVT-HOURS, :DB-OVT-COUNT
|
||||
FROM OVT-MONTHLY
|
||||
WHERE EMP-ID = :WRK-SQL-EMP-ID
|
||||
AND YEAR-MONTH = :WRK-SQL-YEAR-MONTH
|
||||
AND OVT-TYPE = :WRK-SQL-OVT-TYPE
|
||||
3-2.SQLCODE = 0(既存レコードあり):
|
||||
【EXEC SQL UPDATE(加算)】
|
||||
UPDATE OVT-MONTHLY SET
|
||||
OVT-HOURS = OVT-HOURS + :WRK-SQL-OVT-HOURS,
|
||||
OVT-COUNT = OVT-COUNT + 1,
|
||||
UPDATED-AT = CURRENT TIMESTAMP
|
||||
WHERE EMP-ID = :WRK-SQL-EMP-ID
|
||||
AND YEAR-MONTH = :WRK-SQL-YEAR-MONTH
|
||||
AND OVT-TYPE = :WRK-SQL-OVT-TYPE
|
||||
3-3.SQLCODE NOT = 0(新規):
|
||||
【EXEC SQL INSERT】
|
||||
INSERT INTO OVT-MONTHLY
|
||||
(EMP-ID, YEAR-MONTH, OVT-TYPE, OVT-HOURS, OVT-COUNT, UPDATED-AT)
|
||||
VALUES
|
||||
(:WRK-SQL-EMP-ID, :WRK-SQL-YEAR-MONTH, :WRK-SQL-OVT-TYPE,
|
||||
:WRK-SQL-OVT-HOURS, 1, CURRENT TIMESTAMP)
|
||||
3-4.SQLCODE異常時は9100DBERRSORへ
|
||||
|
||||
4.COMMIT処理(2300COMMITDBX)
|
||||
4-1.【EXEC SQL COMMIT】
|
||||
COMMIT WORK
|
||||
4-2.CUN-COMMITをZEROにリセット
|
||||
|
||||
5.終了処理(3000STPSOR)
|
||||
5-1.最終COMMIT(2300COMMITDBX)
|
||||
5-2.入出力ファイルのクローズ
|
||||
5-3.DB操作件数メッセージ出力
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:'ZAN06R01' / PARM2:CUN-R01INN
|
||||
PARM1:'ZAN06R02' / PARM2:CUN-R02INN
|
||||
PARM1:'INS' / PARM2:CUN-DBXINS
|
||||
PARM1:'UPD' / PARM2:CUN-DBXUPD
|
||||
PARM1:'W01' / PARM2:CUN-W01OUT
|
||||
5-4.終了メッセージ出力
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
|
||||
6.DBエラー処理(9100DBERRSOR)
|
||||
6-1.ERROR-LOGにDBエラー情報出力(カテゴリ=30)
|
||||
【COBOL STRING】
|
||||
STRING 'DB ERROR SQLCODE=' SQLCODE ' APPL-ID='
|
||||
WRK-SQL-APPL-ID INTO WRK-ERR-DETAIL
|
||||
6-2.【EXEC SQL ROLLBACK】
|
||||
ROLLBACK WORK
|
||||
6-3.9999ABDSORで異常終了
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 新規カバレッジ構文
|
||||
|
||||
| # | 構文 | 用途 |
|
||||
|---|------|------|
|
||||
| 1 | EXEC SQL INSERT | OVT-APPLICATIONSへの新規登録 |
|
||||
| 2 | EXEC SQL UPDATE | OVT-APPLICATIONSステータス更新・OVT-MONTHLY加減算 |
|
||||
| 3 | EXEC SQL SELECT INTO | OVT-MONTHLY存在確認・OVT-APPLICATIONS検索 |
|
||||
| 4 | EXEC SQL COMMIT | 定期的なCOMMIT発行 |
|
||||
| 5 | EXEC SQL ROLLBACK | DBエラー時のROLLBACK |
|
||||
| 6 | PERFORM VARYING | 月(1-12)のバリデーションループ |
|
||||
| 7 | PERFORM TEST AFTER VARYING | 月次減算のリトライ制御 |
|
||||
| 8 | COBOL MULTIPLY | 加班時間→分変換 |
|
||||
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/ERROR-LOG)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | WRK-ERR-CATEGORY | 20=孤立取消 / 30=DBエラー |
|
||||
| 2 | ERR-DETAIL | WRK-ERR-DETAIL | エラー詳細メッセージ |
|
||||
Reference in New Issue
Block a user