feat: サブシステムB 残業統計管理 初回production反映

- 全6プログラム(ZAN01CHK~ZAN06UPD)ソース・実行ファイル
- 5サブプログラム(SUB01DAT~SUB05TIM)ソース・DLL
- 10 COPY書式ファイル
- 詳細設計書12ファイル
- サブシステムB全体設計書
- bin/配下の実行ファイル资産
This commit is contained in:
qiuqiuqiu
2026-06-17 23:20:53 +08:00
parent c13e2407d7
commit b3e800e601
31 changed files with 3273 additions and 103 deletions
+32 -77
View File
@@ -1,99 +1,54 @@
# 勤怠管理システム - 生产环境资源
本リポジトリは勤怠管理システム(サブシステムA:勤怠休暇管理、サブシステムB:残業統計管理、サブシステムC:給与計算)の生产环境最終版リソースを管理する。
本リポジトリは勤怠管理システム(サブシステムA:勤怠休暇管理、サブシステムB:残業統計管理、サブシステムC:給与計算)の生产环境リソースを管理する。
## 目录结构
```
production/
├── src/ # 主程序源代码COBOL
├── sub/ # 共通サブプログラムSUB01DATSUB05TIM
├── cpy/ # COPY書式ファイル(レコード定義・連絡領域)
├── jcl/ # 実行スクリプト(Windows batch
── 詳細設計書/ # 詳細設計ドキュメント
├── src/ # 主プログラムソースCOBOL
├── sub/ # 共通サブプログラム
├── cpy/ # COPY書式ファイル(レコード定義・連絡領域)
├── bin/ # 実行ファイル(.exe)+サブプログラムDLL(.dll
── design/ # サブシステム全体設計書
└── 詳細設計書/ # 詳細設計ドキュメント
```
## サブシステム構成
| サブシステム | 役割 | COBOLプログラム |
|-------------|------|----------------|
| A: 勤怠休暇管理 | 休暇申請取込・打刻照合・日別計算・DB更新 | KIN01INPKIN09CSV9本) |
| B: 残業統計管理 | 加班申請取込・重複チェック・照合・集計・DB更新 | ZAN01CHKZAN06UPD6本) |
| C: 給与計算 | 欠勤統計取込・給与計算・明細出力 | 後続追加予定 |
## 构建与运行
### 编译命令
### 编译
ソースコードはCOBOL + DB2向けに実装されている。
開発環境(Windows + GnuCOBOL 3.2.0)にはDB2がないため、プリプロセッサ`convert-sql.mjs``EXEC SQL`をSQLite3用の`CALL 'br_exec'`に変換し、SQLite3で動作させる。
```batch
rem 单个程序编译
tools\build.bat <cobol>\<program>.cbl
rem 例如:
tools\build.bat cobol\ZAN01CHK.cbl
tools\build.bat cobol\ZAN02CHK.cbl
tools\build.bat cobol\ZAN03CHK.cbl
rem プロジェクトルートで実行
tools\build.bat src\<program>.cbl
```
### 运行环境设置
### 実行
```batch
set COB_CONFIG_DIR=C:\mingw64\share\gnucobol\config
set COB_LIBRARY_PATH=<path_to_cobol_directory>
set COB_LIBRARY_PATH=bin
cd <project_root>
bin\<program>.exe
```
### 输入输出 DD 名称对应关系
### サブシステムB テスト実行順序
| 程序 | DD 名称 | 说明 |
|----------|---------|----------------|
| ZAN01CHK | ZAN01R01 | OVT-APPLY.DAT |
| | ZAN01W01 | OVT-VALID.DAT |
| | ZAN01W02 | OVT-CANCEL.DAT |
| | ZAN01W03 | ERROR-LOG.DAT |
| ZAN02CHK | ZAN02R01 | OVT-VSORT.DAT |
| | ZAN02W01 | OVT-CHECKED.DAT|
| | ZAN02W02 | ERROR-LOG.DAT |
| ZAN03CHK | ZAN03R01 | OVT-NODUP.DAT |
| | ZAN03R02 | PUNCH-SORTED.DAT|
| | ZAN03R03 | HOLIDAY.DAT |
| | ZAN03W01 | OVT-MATCHED.DAT|
| | ZAN03W02 | ERROR-LOG.DAT |
```batch
ZAN01CHK → ZAN02CHK → ZAN03CHK → ZAN04MAT → ZAN05CAL → ZAN06UPD
```
## 测试结果概要
## 编码
三个主程序均已通过疏通测试,覆盖正常和异常分支:
**ZAN01CHK - 残業申請振分処理**
- ✓ CSV 格式解析正确
- ✓ status=0/1 → W01 有效申请
- ✓ status=9 → W02 取消申请
- ✓ 无效状态/DATETIME CHECK→ W03错误日志
- ✓ START TIME >= 1830验证
- ✓ START < END验证
- ✓ 时间差 >= 30min验证
- **已修复**: W01/W02/W03 FILLER 未初始化 Bug
**ZAN02CHK - 時間帯重複チェック処理**
- ✓ 同一天同一员工的时段重复检查
- ✓ 初回记录直出到 W01
- ✓ キーブレイク正确处理
- ✓ OVERLAP 判断逻辑正确(前終了 > 現開始)
- **已修复**: 主循环中首条记录与自身比较误判的 Bug
- **已修复**: NORMALOUTSOR不更新 PREV 导致后续比较基准失准
**ZAN03CHK - 打刻時間照合処理**
- ✓ R01(申请) vs R02(打刻) 匹配检查
- ✓ 时间范围包含验证(申请⊆打刻)
- ✓ NOMATCH 处理(无对应打刻)→ W02错误
- ✓ MISMATCH 处理(时间不符)→ W02错误
- ✓ HOLIDAY判定正确(OVT-TYPE="H"
- ✓ R03休日计数问题已修复
- ✓ W02 FILLER 初始化问题已修复
- **已知限制**: GnuCOBOL 读无 CRLF 的二进制文件可能多产生一条伪空记录
## 重要 Notes
1. **GnuCOBOL 文件读取特性**: 在纯二进制定长文件(无行分隔符)模式下,GnuCOBOL READ 操作可能在真正 EOF 前多产生一条记录,这是运行时环境的已知行为,非代码 Bug。
2. **COPY 文件命名**: 所有 COPY 文件均保留原始命名,无额外字符后缀。
3. **备份文件**: 生产环境只包含最新确定的版本,不包含 *.bak.**_fixed* 等中间版本。
4. **编码**: 源文件使用 ASCII/JIS 编码保存。
## 维护建议
- 每次修改后请再次进行完整疏通测试
- JCL/batch 脚本的 DD 变量名需与实际 DD 分配一致
- 确保 `COB_LIBRARY_PATH` 包含 SUB*.dll(如需要动态加载)
源文件使用 ASCII/JIS 编码保存。COPYファイルは元の命名を維持する。