Subsystem B cleanup: dead code removal, sort-key fix, ZAN04MAT/ZAN05CAL/ZAN06UPD updates, resource lists added

This commit is contained in:
qiuqiuqiu
2026-06-19 12:39:49 +08:00
parent a74a5aaa04
commit 164451dda5
19 changed files with 353 additions and 67 deletions
@@ -0,0 +1,48 @@
# ZAN01CHK 使用資源一覧
## プログラム概要
- **プログラムID**: ZAN01CHK
- **プログラム名**: 残業申請振分処理
- **処理概要**: CSV形式の残業申請ファイルを読み込み、ステータスによって適切に振り分ける。
## 使用ファイル
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|------|---------------|------|-------------|-----------|--------|
| ZAN01R01 | 入力CSV | 順編成 | F (固定長) | 80B | なし(自前定義) |
| ZAN01W01 | OVT-APPLY | 順編成 | F (固定長) | 80B | ZAN01REC |
| ZAN01W02 | OVT-CANCEL | 順編成 | F (固定長) | 80B | ZAN01REC |
| ZAN01W03 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC |
## 使用COPY句
| COPY句 | 用途 | 使用箇所 |
|--------|------|---------|
| ZAN01REC | レコード定義(W01/W02出力ファイル) | FILE SECTION |
| ZAN05REC | エラーログレコード定義(W03出力ファイル) | FILE SECTION |
| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
| ZANCHKAC | 項目チェックサブPGM連絡領域 | WORKING-STORAGE |
## 使用サブプログラム
| サブPGM | 役割 | CALL箇所 |
|---------|------|---------|
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
| SUB03END | ABEND処理 | 9999ABDSOR |
| SUB04CHK | 日付妥当性チェック | 2020VALIDATESOR |
## 使用DB2テーブル
なし(DB操作なし)
## 処理フロー
1. 初期処理(開始メッセージ→運用日付取得→OPEN→初回読込)
2. CSV分解(UNSTRING
3. ステータス判定
- ステータス'0'/'1'(有効)→ 項目チェック(SUB04CHK)→ W01出力
- ステータス'9'(取消)→ W02出力
- その他(エラー)→ W03出力
4. 終了処理(CLOSE→件数出力→終了メッセージ)
@@ -0,0 +1,45 @@
# ZAN02CHK 使用資源一覧
## プログラム概要
- **プログラムID**: ZAN02CHK
- **プログラム名**: 時間帯重複チェック処理
- **処理概要**: OVT-APPLYファイルの同一社員・同一日付内の開始時刻と終了時刻の重複をチェックする。
## 使用ファイル
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|------|---------------|------|-------------|-----------|--------|
| ZAN02R01 | OVT-APPLY | 順編成 | F (固定長) | 80B | ZAN01REC |
| ZAN02W01 | OVT-NODUP | 順編成 | F (固定長) | 80B | ZAN01REC |
| ZAN02W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC |
## 使用COPY句
| COPY句 | 用途 | 使用箇所 |
|--------|------|---------|
| ZAN01REC | レコード定義(R01入力/W01出力) | FILE SECTION |
| ZAN05REC | エラーログレコード定義(W02出力) | FILE SECTION |
| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
## 使用サブプログラム
| サブPGM | 役割 | CALL箇所 |
|---------|------|---------|
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
| SUB03END | ABEND処理 | 9999ABDSOR |
## 使用DB2テーブル
なし(DB操作なし)
## 処理フロー
1. 初期処理(開始メッセージ→運用日付取得→OPEN→初回読込)
2. 1件目をそのままW01出力+前レコード保持
3. メイン処理:キー比較
- 同一社員+同一日付 かつ 前終了時刻>現開始時刻 → 重複エラー(W02出力)
- 同一社員+同一日付 かつ 重複なし → W01出力+前レコード更新
- キーブレイク → 前レコード更新+W01出力
4. 終了処理(CLOSE→件数出力→終了メッセージ)
@@ -0,0 +1,49 @@
# ZAN03CHK 使用資源一覧
## プログラム概要
- **プログラムID**: ZAN03CHK
- **プログラム名**: 打刻時間照合処理
- **処理概要**: OVT-NODUPとPUNCH-SORTEDを突合し申請時間帯の照合を行う。申請時間帯が出勤〜退勤の範囲内かを確認する。申請日が休日かを判定しOVT-TYPEを付加する。
## 使用ファイル
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|------|---------------|------|-------------|-----------|--------|
| ZAN03R01 | OVT-NODUP | 順編成 | F (固定長) | 80B | ZAN01REC |
| ZAN03R02 | PUNCH-SORTED | 順編成 | F (固定長) | 80B | なし(自前定義:20B+56B |
| ZAN03R03 | HOLIDAY | 順編成 | F (固定長) | 80B | なし(自前定義:9B+71B |
| ZAN03W01 | OVT-CHECKED | 順編成 | F (固定長) | 80B | ZAN01REC |
| ZAN03W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC |
## 使用COPY句
| COPY句 | 用途 | 使用箇所 |
|--------|------|---------|
| ZAN01REC | レコード定義(R01入力/W01出力) | FILE SECTION |
| ZAN05REC | エラーログレコード定義(W02出力) | FILE SECTION |
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
## 使用サブプログラム
| サブPGM | 役割 | CALL箇所 |
|---------|------|---------|
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
## 使用DB2テーブル
なし(DB操作なし)
## 処理フロー
1. 初期処理(開始メッセージ→OPEN)
2. 休日ファイル(R03)全件読込→HOLIDAY-TABLE設定(OCCURS 1366
3. メイン処理:R01とR02のキー比較(社員番号+日付)
- R01 < R02 → 打刻データなしエラー(W02出力)
- R01 = R02 → 時間範囲チェック
- 申請時間帯が出勤〜退勤の範囲内 → OVT-TYPE設定(SEARCH ALL休日判定)→ W01出力
- 範囲外 → エラー(W02出力)
- R01 > R02 → R02読み飛ばし
4. 終了処理(CLOSE→件数出力→終了メッセージ)
## 備考
- SUB01DAT不使用:日付取得不要のためFUNCTION CURRENT-DATEも使用しない
- R02FILLER = 56BPUNCH-SORTEDのフォーマット:社員番号8B+日付8B+出勤4B+退勤4B+予備56B
@@ -0,0 +1,48 @@
# ZAN04MAT 使用資源一覧
## プログラム概要
- **プログラムID**: ZAN04MAT
- **プログラム名**: 取消マッチング処理
- **処理概要**: OVT-SORTED(有効申請)とOVT-CSORT(取消申請)を申請番号で1:1マッチングし、結果を振り分ける。
## 使用ファイル
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|------|---------------|------|-------------|-----------|--------|
| ZAN04R01 | OVT-SORTED | 順編成 | F (固定長) | 80B | ZAN01REC |
| ZAN04R02 | OVT-CSORT | 順編成 | F (固定長) | 80B | ZAN01REC |
| ZAN04W01 | OVT-MATCHED | 順編成 | F (固定長) | 80B | ZAN02REC |
| ZAN04W02 | OVT-DBCLEAN | 順編成 | F (固定長) | 80B | ZAN04REC |
| ZAN04W03 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC |
## 使用COPY句
| COPY句 | 用途 | 使用箇所 |
|--------|------|---------|
| ZAN01REC | レコード定義(R01/R02入力ファイル) | FILE SECTION |
| ZAN02REC | OVT-MATCHEDレコード定義(W01出力) | FILE SECTION |
| ZAN04REC | OVT-DBCLEANレコード定義(W02出力) | FILE SECTION |
| ZAN05REC | エラーログレコード定義(W03出力) | FILE SECTION |
| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
## 使用サブプログラム
| サブPGM | 役割 | CALL箇所 |
|---------|------|---------|
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
| SUB03END | ABEND処理 | 9999ABDSOR |
## 使用DB2テーブル
なし(DB操作なし)
## 処理フロー
1. 初期処理(開始メッセージ→運用日付取得→OPEN→R01/R02初回読込)
2. メイン処理:マッチング(申請番号APPL-IDで1:1突合)
- R01キー = R02キー(マッチ) → 取消済み申請をERROR-LOG(W03)に出力
- R01キー < R02キー(R01のみ) → 有効申請をOVT-MATCHED(W01)に出力(STRING編集でPROC-SEQ=01付加)
- R01キー > R02キー(R02のみ) → 取消申請をOVT-DBCLEAN(W02)に出力
3. 終了処理(CLOSE→件数出力→終了メッセージ)
@@ -0,0 +1,50 @@
# ZAN05CAL 使用資源一覧
## プログラム概要
- **プログラムID**: ZAN05CAL
- **プログラム名**: 残業時間集計処理
- **処理概要**: OVT-SORTED2(申請番号+処理番号昇順)をキーブレイク集計し、同一APPL-ID内の全明細の加班時間を積算してOVT-SUMMARYに1レコード出力。
## 使用ファイル
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|------|---------------|------|-------------|-----------|--------|
| ZAN05R01 | OVT-SORTED2 | 順編成 | F (固定長) | 80B | ZAN02REC |
| ZAN05W01 | OVT-SUMMARY | 順編成 | F (固定長) | 80B | ZAN03REC |
## 使用COPY句
| COPY句 | 用途 | 使用箇所 |
|--------|------|---------|
| ZAN02REC | OVT-MATCHEDレコード定義(R01入力) | FILE SECTION |
| ZAN03REC | OVT-SUMMARYレコード定義(W01出力) | FILE SECTION |
| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
| ZANTIMAC | 時刻丸めサブPGM連絡領域 | WORKING-STORAGE |
## 使用サブプログラム
| サブPGM | 役割 | CALL箇所 |
|---------|------|---------|
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
| SUB03END | ABEND処理 | 9999ABDSOR |
| SUB05TIM | 時刻丸め(0.1h単位切捨) | 2100OUTSOR |
## 使用DB2テーブル
なし(DB操作なし)
## 処理フロー
1. 初期処理(開始メッセージ→ACCEPT FROM DATE→運用日付取得→OPEN→初回読込)
2. キーブレイク集計ループ
- キー変わり(APPL-ID) → 前グループ集計出力+累積リセット+新グループ開始
- 同一グループ → 現レコード時間差分をWRK-ACCUM-MINに積算+最新レコード上書き保持
- EOF → 最終グループを出力
3. 集計出力処理(2100OUTSOR
- DIVIDE REMAINDERで時→分変換
- COMPUTE ROUNDED ON SIZE ERROR
- SUB05TIM呼出(0.1h単位切捨て丸め)
- OVT-SUMMARY出力(グループ先頭START・最新END・積算OVT-HOURS
4. 終了処理(CLOSE→件数出力→終了メッセージ)
@@ -0,0 +1,72 @@
# ZAN06UPD 使用資源一覧
## プログラム概要
- **プログラムID**: ZAN06UPD
- **プログラム名**: 残業統計DB更新処理
- **処理概要**: OVT-SUMMARYの各レコードをDBにINSERT/UPSERTし、OVT-DBCLEANの各レコードについて該当申請を取消状態に更新する。DB2テーブル操作を含む全サブシステムB唯一のDB更新プログラム。
## 使用ファイル
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|------|---------------|------|-------------|-----------|--------|
| ZAN06R01 | OVT-SUMMARY | 順編成 | F (固定長) | 80B | ZAN03REC |
| ZAN06R02 | OVT-DBCLEAN | 順編成 | F (固定長) | 80B | ZAN04REC |
| ZAN06W01 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC |
## 使用COPY句
| COPY句 | 用途 | 使用箇所 |
|--------|------|---------|
| ZAN03REC | OVT-SUMMARYレコード定義(R01入力) | FILE SECTION |
| ZAN04REC | OVT-DBCLEANレコード定義(R02入力) | FILE SECTION |
| ZAN05REC | エラーログレコード定義(W01出力) | FILE SECTION |
| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
## 使用サブプログラム
| サブPGM | 役割 | CALL箇所 |
|---------|------|---------|
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
| SUB03END | ABEND処理 | 9999ABDSOR |
## 使用DB2テーブル
| テーブル名 | 操作種別 | 説明 |
|------------|---------|------|
| OVT_APPLICATIONS | INSERT / UPDATE | 申請データ登録・更新(取消) |
| OVT_MONTHLY | SELECT / INSERT / UPDATE | 月次集計テーブル(加算・減算) |
## 実行SQL一覧
| SQL種別 | 内容 | 該当箇所 |
|---------|------|---------|
| CONNECT TO | DB接続(data\OVERTIME.DB | 1000ITTSOR |
| INSERT INTO ... OVT_APPLICATIONS | 申請データ新規登録 | 2100SUMMARYSOR |
| UPDATE ... OVT_APPLICATIONS | 重複時更新(STATUS | 2100SUMMARYSOR |
| SELECT ... OVT_MONTHLY | 月次集計存在確認 | 2110MONTHLYUPSOR |
| UPDATE ... OVT_MONTHLY (+加算) | 月次集計加算 | 2110MONTHLYUPSOR |
| INSERT INTO ... OVT_MONTHLY | 月次集計新規作成 | 2110MONTHLYUPSOR |
| SELECT ... OVT_APPLICATIONS | 取消データ取得 | 2200DBCLEANSOR |
| UPDATE ... OVT_APPLICATIONS (取消) | 申請ステータス取消 | 2200DBCLEANSOR |
| UPDATE ... OVT_MONTHLY (-減算) | 月次集計減算(リトライ3回) | 2210MONTHLYSUBSOR |
| COMMIT WORK | 50件毎/最終コミット | 2300COMMITDBX |
| ROLLBACK WORK | DBエラー時ロールバック | 9100DBERRSOR |
## 処理フロー
1. 初期処理(開始メッセージ→運用日付取得→OPEN→DB CONNECT→R01/R02初回読込)
2. フェーズ1OVT-SUMMARY処理):
- SQLホスト変数設定(年月抽出・時刻変換・時間→分変換)
- OVT_APPLICATIONSにINSERT
- 成功 → INSERTカウンタ+1
- 重複エラー(SQLCODE≠0) → UPDATESTATUS更新)
- OVT_MONTHLY UPSERT(存在確認SELECT→UPDATE/INSERT
- 50件毎にCOMMIT
3. フェーズ2OVT-DBCLEAN処理):
- OVT_APPLICATIONSから既存データSELECT
- 該当なし(孤立取消) → ERROR-LOG出力+ABEND(999)
- OVT_APPLICATIONSステータス更新('9'=取消)
- OVT_MONTHLY減算(3回リトライ付きUPDATE)
4. 終了処理(最終COMMIT→CLOSE→件数出力→終了メッセージ)