docs(COBOL): add KYU COBOL deficiencies to investigation record (Java-side excluded)

This commit is contained in:
opencode
2026-08-29 21:45:44 +08:00
parent a350754a1b
commit 1454a4a5e2
+35 -26
View File
@@ -1,16 +1,18 @@
# 既存 COBOL コード不備点 調査記録
- **作成日**: 2026-08-25
- **背景**: KIN0109 / ZAN0106 の COBOL→Java 変換後、Java↔COBOL↔設計書 の三方照合を実施。本ファイルは「既存 COBOL 側に存在する不備・設計書からの乖離」を記録し、後続調査・対応の起点とする。
- **更新日**: 2026-08-29KYU0109 追加)
- **背景**: KIN0109 / ZAN0106 / KYU0109 の COBOL→Java 変換後、Java↔COBOL↔設計書 の三方照合を実施。本ファイルは「既存 COBOL 側に存在する不備・設計書からの乖離」のみを記録する。
- **記録方針**: **Java 側の缺陷(Java 真缺陷等)は本記録の対象外**。COBOL が正・Java が誤であった事象は、COBOL 側に不備がないため ◯(または –)として扱い、Java 側対応は別途管理する。
- **関連成果物**:
- 修正済 Java: `src/Sub05TimSub.java`(丸め), `src/Kin07DaiMain.java`(未知休暇型), `src/dto/Kin03Rec.java`(数値埋込), `src/Zan03ChkMain.java`(休日フラグ互換), `src/util/ConvUtil.java`(padLeftZero 追加)
- COBOL 側マーキング: 各対象行に `COBOL-DEFICIENCY:` コメントを付与済(参照先=本ファイル)
- COBOL 側マーキング: 各対象行に `COBOL-DEFICIENCY:` コメントを付与(参照先=本ファイル)。ZAN/KIN は `cobol/KIN01INP.cbl` 等に既存、KYU は `cobol/KYU01CVT.cbl:306`追加
---
## 1. 照合結果サマリ( 30 項目)
## 1. 照合結果サマリ(照合対象 39 項目)
判定: ◯=一致(無影響) △=軽差/条件無影響 ✗=差異(有影響)
判定: ◯=一致(無影響) △=軽差/条件無影響 ✗=差異(有影響・COBOL側不備)
※ Java 側缺陷は記録対象外のため、COBOL が正しい事象は ✗/△ とせず ◯ または – とする。
| 模块 | 文件 | 判定 | COBOL 側問題? | 備考 |
|------|------|------|--------------|------|
@@ -18,7 +20,7 @@
| ZAN02 | Zan02ChkMain | ◯ | | キー比較のみ条件差 |
| **ZAN03** | Zan03ChkMain | ✗ | **C類** | 休日フラグ値('1')設計未規定/運用慣習 |
| ZAN04 | Zan04MatMain | ◯ | | |
| **ZAN05** | Zan05CalMain | | (COBOL正) | Java 側缺陷(丸め)→已修 |
| ZAN05 | Zan05CalMain | | | COBOL 正(Java 側缺陷は記録対象外) |
| ZAN06 | Zan06UpdMain | ◯ | | ADD は COBOL と一致 |
| **KIN01** | Kin01InpMain | ✗ | **A類** | フィールド数ゲート off‑by‑one |
| KIN02 | Kin02UpdMain | ◯ | | |
@@ -26,7 +28,7 @@
| **KIN04** | Kin04ChkMain | ✗ | **A類** | フィールド数ゲート off‑by‑one |
| **KIN05** | Kin05MatMain | ✗ | **A類** | WRKBEST 未リセット |
| KIN06 | Kin06CldMain | △ | **D類**(条件) | 休日全件取込≤50 件の上限リスク |
| KIN07 | Kin07DaiMain | | (COBOL正) | Java 側缺陷(未知型)→已修 |
| KIN07 | Kin07DaiMain | | | COBOL 正(Java 側缺陷は記録対象外) |
| **KIN08** | Kin08DbuMain | ✗ | **B類** | RESET で MONTHLY のみ削除/T カード 10 名上限 |
| **KIN09** | Kin09CsvMain | ✗ | **B類** | FULL/SHORT 出力範囲反転/時間欄書式 |
| SUB01 | Sub01DatSub | △ | | TZ 依存(条件) |
@@ -35,8 +37,17 @@
| SUB04 | Sub04ChkSub | △ | | parseInt vs NUMVAL(条件) |
| SUB05 | Sub05TimSub | △ | | double 精度(条件) |
| PAR DTO群 | Zan*Par/Kin*Rec 等 | ◯ | | |
| **Kin03Rec** | dto/Kin03Rec | | (copybook正) | Java 側缺陷(埋込)→已修 |
| Kin03Rec | dto/Kin03Rec | | | copybook 正(Java 側缺陷は記録対象外) |
| EmpRec | dto/EmpRec | | | COBOL 対応物なし(照合不可) |
| **KYU01** | Kyu01CvtMain | ✗ | **B類** | エラー区分リテラル設計乖離(EMPID-ERR vs EMP- ) |
| KYU02 | Kyu02RegMain | ◯ | | COBOL 側不備なし |
| KYU03 | Kyu03AggMain | ◯ | | COBOL 側不備なし(Java 側缺陷は記録対象外) |
| KYU04 | Kyu04CalMain | ◯ | | COBOL 側不備なし(Java 側缺陷は記録対象外) |
| KYU05 | Kyu05DedMain | ◯ | | COBOL 側不備なし |
| KYU06 | Kyu06UpdMain | ◯ | | COBOL 側不備なし |
| KYU07 | Kyu07DivMain | ◯ | | 三方一致(KYU07Dnn);過去の「COBOL=KYU07nn」見解は誤り |
| KYU08 | Kyu08PriMain | ◯ | | COBOL 側不備なし |
| KYU09 | Kyu09MrgMain | ◯ | | COBOL 側不備なし(Java 側缺陷は記録対象外) |
---
@@ -68,7 +79,7 @@
### B 類:COBOL が設計書から乖離(Java は設計書通り=正)
> これらは「COBOL の挙動が設計と食い違っている」点。Java を COBOL に合わせて戻すと**設計違反**になる。原則として **Java を維持**し、COBOL 側を不備として記録する。
> これらは「COBOL の挙動が設計と食い違っている」点。Java を COBOL に合わせて戻すと設計違反になる。原則として **Java を維持**し、COBOL 側を不備として記録する。
#### B1. KIN09CSV — FULL/SHORT 出力範囲が設計と逆
- **ファイル:行**: `cobol/KIN09CSV.cbl:160` `IF MODE-SHORT PERFORM 2500-SHORT-MODE`
@@ -97,6 +108,14 @@
- **Java 挙動**: 全件格納(設計通り、無制限)。
- **対応**: **Java 維持**。COBOL 側の実装上限制(設計未記載のため、COBOL の制限を「仕様」とみなすか要合意)。
#### B5. KYU01CVT — エラー区分リテラルが設計と乖離
- **ファイル:行**: `cobol/KYU01CVT.cbl:306` `MOVE 'EMP- ' TO W02ERR-CATEGORY`
- **COBOL 挙動**: 社員番号空チェック時、エラー区分に `EMP- `(末尾 2 空白、計 8 文字)を出力。
- **設計指定**: `doc/design/疑問点_KYU01CVT.md`(詳細設計書)L155「ERR-CATEGORY は 'CSV-ERR' または 'EMPID-ERR' で固定」。
- **Java 挙動**: `src/Kyu01CvtMain.java:277` にて `EMPID-ERR` を出力(設計通り)。
- **COBOL 側問題**: 設計が規定するリテラル `EMPID-ERR` を出力せず、別字面 `EMP- ` を出力(事実上の定数バグ/設計乖離)。
- **対応**: Java は設計準拠で正 → **Java 維持**。COBOL 側をレガシー不備として記録。
### C 類:設計書未規定/データ慣習
#### C1. ZAN03CHK — 休日フラグ値の指定欠落
@@ -118,34 +137,24 @@
---
## 3. Java 側真缺陷(本調査で発見・既に修正済
参考として、COBOL ではなく **Java 側にあった真の缺陷**を記録(いずれも修正完了)。
| 項目 | ファイル | 修正内容 |
|------|----------|----------|
| ZAN05 丸め | Sub05TimSub.java | `Math.round``Math.floor`(設計=0.1h 切捨) |
| KIN07 未知休暇型 | Kin07DaiMain.java | 未知型を無視(W02 非出力)に変更 |
| Kin03Rec 数値埋込 | dto/Kin03Rec.java | `padRight``padLeftZero`(前ゼロ)+ ConvUtil に `padLeftZero(String,int)` 追加 |
| ZAN03 フラグ互換 | Zan03ChkMain.java | フラグ `'1'``'H'` の両方を受容 |
---
## 4. 設計書自身の矛盾(COBOL/Java 双方に関係)
## 3. 設計書自身の矛盾(COBOL/Java 双方に関係
1. **KIN09CSV 詳細設計書**: PARM 表(L33) `FULL=日別+月次` に対し、§3 見出し「SHORT 時のみ追加処理(2500SHORT‑MODE)」が逆のニュアンス。正規定義は PARM 表。→ Java は PARM 表準拠(正)。
2. **KIN08DBU 詳細設計書**: ステップ 31 に `MONTHLY_ABSENCE` 削除のみ記載され、`DAILY_RECORDS` 削除が抜けている(使用 DB 表表・SYSIN 仕様からのみ読取可)。→ Java は両削除(正)。
3. **ZAN03CHK**: 休日フラグ値の規定なし(C‑1)。
4. **KYU07DIV 補足(設計矛盾ではない)**: 過去に「COBOL 実際は KYU07nn、設計 KYU07Dnn で乖離(B類)」と見なしたが、実 COBOL ソース(`cobol/KYU07DIV.cbl:37` 等)は `KYU07D01``KYU07D50` を使用。設計=COBOL=Java の三方一致であり、COBOL 不備・設計矛盾ともに存在しない。当該見解は誤りであった。
---
## 5. 推奨対応方針
## 4. 推奨対応方針
- **A 類 (KIN01/04/05)**: COBOL バグ。Java は設計準拠で正 → **Java 維持**。COBOL 側をレガシー不備として本ファイルに記録。業務確認の上、COBOL を「仕様通り(バグ有)」で据え置くか別途 COBOL 修正するか決定。
- **B 類 (KIN09/KIN08)**: COBOL が設計から乖離。Java は設計準拠 → **Java 維持**。COBOL 側を不備記録。**厳密な COBOL 出力パリティ(並行運用比較等)が必要な場合のみ**、Java に「COBOL 互換モード」フラグを検討(要合意)。
- **B 類 (KIN09/KIN08/KYU01)**: COBOL が設計から乖離。Java は設計準拠 → **Java 維持**。COBOL 側を不備記録。**厳密な COBOL 出力パリティ(並行運用比較等)が必要な場合のみ**、Java に「COBOL 互換モード」フラグを検討(要合意)。
- **C 類 (ZAN03)**: 設計書へフラグ値('1')を追記。Java は両対応済。
- **D 類 (KIN06)**: 本番休日マスタ件数を確認し、50 件超なら双方で上限緩和。
- **設計書矛盾**: 上記 3 点を設計書へ反映(設計側修正)。
- **設計書矛盾**: 上記を設計書へ反映(設計側修正)。
- **Java 側缺陷**: 本記録の対象外(別途チケット/PR で管理)。
---
*本ファイルは調査記録であり、コード変更は別途チケット/PR で管理すること。COBOL 側マーキング箇所は各 `.cbl` 内の `COBOL-DEFICIENCY:` コメントを参照。*