Files
cobol-java-v3/detailed-design-docs/design_KIN05MAT.md
T
hangshuo652 b94757d9df feat: V3系统评审问题修复
1. 场景价值与技术合理性修复:
   - 补充docs/SCENE_VALUE.md(业务背景、痛点分析、用户场景、竞品对比、价值量化)
   - 添加用户操作流程图(Mermaid)
   - 添加3个真实业务案例量化数据

2. 演示与文档修复:
   - 创建docs/API.md(完整API文档)
   - 创建docs/QUICKSTART.md(5分钟快速入门指南)

3. AI使用日志修复:
   - 更新AGENTS.md,添加强制自动执行的AI使用日志记录指令
   - 在_AI_USAGE_LOG.md末尾添加范式执行统计

4. 安全性修复:
   - 在agents/llm.py中添加输入过滤(防Prompt注入)
   - 添加输出验证、速率限制、详细日志

5. 架构设计修复:
   - 创建tools/registry.py工具注册表
   - 修改orchestrator.py和orchestrator_db.py使用注册表动态获取运行器

6. 开发范式修复:
   - 在_AI_USAGE_LOG.md末尾添加范式执行统计
2026-08-29 13:23:28 +08:00

129 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 詳細設計書
## 基本情報
| # | 項目 | 内容 |
|---|------|------|
| 1 | システム名 | 勤怠休暇管理システム |
| 2 | プログラムID | KIN05MAT |
| 3 | プログラム名 | 打刻休暇照合処理 |
| 4 | PGMタイプ | メイン |
| 5 | PGMパターン | マッチング(1:N) |
| 6 | 機能概要 | EDITED-PUNCH(打刻側、R01)とLEAVE-DAILY(休暇側、R02)を社員番号+日付キーで照合し、KIN-LEAVE(160B)に出力する。R01側が主駆動で、1件の打刻に対してN件の休暇レコードが存在しうる(1:N)。 |
| 7 | | マッチング制御はEVALUATE TRUEで3分岐:R01key<R02key(打刻のみ)、R01key=R02key(マッチ)、R01key>R02key(休暇のみスキップ)。 |
| 8 | | マッチ時は休暇種別優先順位(01>02>03>04)で最適な1件を選定し、KIN-LEAVEに出力する。 |
### 前提条件
| NO | 対象ファイル | 条件 |
|----|-------------|------|
| 1 | KIN04W01(R01) | 社員番号+日付で昇順ソート済み(JCL SORT KINJ022 |
| 2 | KIN02W01(R02) | 社員番号+日付で昇順ソート済み(KIN03EXP出力保証) |
### 使用ファイル一覧
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
| 1 | EDITED-PUNCH | R01 | KIN04W01 | I | KIN04REC | FB | | 80 | PS | 打刻側、主駆動 |
| 2 | LEAVE-DAILY | R02 | KIN02W01 | I | KIN02REC | FB | | 80 | PS | 休暇側、N件あり |
| 3 | KIN-LEAVE | W01 | KIN05W01 | O | KIN03REC | FB | | 160 | PS | 照合結果 |
### ファイルステータス
| ファイル | DD名 | ファイルステータス項目 |
|---------|------|---------------------|
| EDITED-PUNCH(R01) | KIN04W01 | WS-R01-STATUS |
| LEAVE-DAILY(R02) | KIN02W01 | WS-R02-STATUS |
| KIN-LEAVE(W01) | KIN05W01 | WS-W01-STATUS |
### キー項目一覧
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|----|-----------|---------------------|-------------------------------------------|
| 1 | EDITED-PUNCH | 社員番号(1-8B)+日付(9-16B) | 主キー(R01) |
| 2 | LEAVE-DAILY | 社員番号(1-8B)+日付(9-16B) | 従キー(R02)、N件あり |
### 使用モジュール一覧
| NO | 機能 | プログラムID | 使用COPY名 |
|----|------|-------------|-----------|
| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
| 2 | ABEND処理SUB | SUB03END | ZANENDAC |
---
## 処理詳細
```
1.初期処理(1000ITTSOR
1-1.開始メッセージ出力
【メッセージ編集】
メッセージ番号:1(開始メッセージ)
1-2.コンパイル日時出力
【メッセージ編集】
メッセージ番号:33(コンパイル日時)
PARM1:コンパイル日時
PARM2'COMPILED'
1-3.ワークエリアの初期化
1-4.使用ファイルのオープン(R01/R02:入力、W01:出力)
1-4-1.OPENチェック
各ファイルのFILE STATUS(WS-R01-STATUS/WS-R02-STATUS/WS-W01-STATUS)を確認
ステータス≠00の場合、SUB03END(ZANENDAC)で異常終了
1-5.R01を読み込む。(1100R01INNSOR)(1回目)
1-6.R02を読み込む。(1200R02INNSOR)(1回目)
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
2-1.R02キー設定
R02が有効な場合、R02レコードからWRK-R02KEYを設定。
2-2.EVALUATE TRUE マッチング制御
WHEN R01key < R02key OR R02-EOF:
打刻のみ(休暇なし)→ KIN-LEAVE出力(LEAVE-TYPE='99', HOURS=0)
R01を次へ読み込み
WHEN R01key = R02key:
マッチング処理実行(2020MATCHSOR)
R01を次へ読み込み
R02も次へ読み込み(N:1の場合はループ内で全R02処理)
WHEN R01key > R02key:
R02のみ(該当打刻なし)→ スキップ
R02を次へ読み込み
2-3.上記をR01終了まで繰り返す。
3.マッチング処理(2020MATCHSOR
R02がEOFになるか、キーが変わるまで、以下のループを実行:
3-1.現在のR02レコードから休暇種別・時刻・申請IDを取得
3-2.選定ロジック:
- 初回 → ベストとして保持
- 既にベストあり → 優先順位で比較(01>02>03>04)
- 同種別 → 申請IDの小さい方を採用
3-3.R02を次へ読み込み
3-4.キーが一致しなくなるかR02-EOFまで3-1〜3-3を繰り返す
3-5.ベストの休暇情報をKIN-LEAVEに出力
ベストがない場合は'99'として出力
4.終了処理(3000STPSOR
4-1.入出力ファイルのクローズ
4-2.入出力件数出力メッセージ出力
4-3.終了メッセージ出力
```
---
## 出力レコード定義
### 出力ファイル(W01/KIN-LEAVE KIN03REC 160B FB
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | EMP-ID | R01EMP-ID | 打刻情報(1-80BはEDITED-PUNCHと同一) |
| 2 | WORK-DATE | R01WORK-DATE | |
| 3 | STR-TIME | R01STR-TIME | |
| 4 | END-TIME | R01END-TIME | |
| 5 | DEPT-ID | R01DEPT-ID | |
| 6 | TERMINAL | R01TERMINAL | |
| 7-13 | 休暇情報 | マッチ結果 | 81-160B |
| 7 | LEAVE-TYPE | 選定結果 | '01'〜'04' or '99' |
| 8 | LEAVE-STR-TIME | 選定したR02START-TIME | |
| 9 | LEAVE-END-TIME | 選定したR02END-TIME | |
| 10 | LEAVE-HOURS | ZERO | KIN07DAIで後に計算 |
| 11 | APPLICATION-ID | 選定したR02APPL-ID | 該当なしはZERO |