From c7a573c2a25d99c9639449fa367f69f15331f0fc Mon Sep 17 00:00:00 2001 From: opencode Date: Sat, 29 Aug 2026 22:02:37 +0800 Subject: [PATCH] docs(COBOL): fix KIN01/KIN04 field-count gate misrecord (UNSTRING TALLYING=fields, not delimiters) --- JavaSrc/doc/COBOL不备点_调查记录.md | 28 +++++++--------------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/JavaSrc/doc/COBOL不备点_调查记录.md b/JavaSrc/doc/COBOL不备点_调查记录.md index 802af87..e2d90fb 100644 --- a/JavaSrc/doc/COBOL不备点_调查记录.md +++ b/JavaSrc/doc/COBOL不备点_调查记录.md @@ -1,11 +1,11 @@ # 既存 COBOL コード不備点 調査記録 - **作成日**: 2026-08-25 -- **更新日**: 2026-08-29(KYU01‑09 追加) +- **更新日**: 2026-08-29(KYU01‑09 追加 / KIN01・KIN04 の「フィールド数ゲート誤り」は誤記のため削除) - **背景**: KIN01‑09 / ZAN01‑06 / KYU01‑09 の COBOL→Java 変換後、Java↔COBOL↔設計書 の三方照合を実施。本ファイルは「既存 COBOL 側に存在する不備・設計書からの乖離」のみを記録する。 - **記録方針**: **Java 側の缺陷(Java 真缺陷等)は本記録の対象外**。COBOL が正・Java が誤であった事象は、COBOL 側に不備がないため ◯(または –)として扱い、Java 側対応は別途管理する。 - **関連成果物**: - - COBOL 側マーキング: 各対象行に `COBOL-DEFICIENCY:` コメントを付与(参照先=本ファイル)。ZAN/KIN は `cobol/KIN01INP.cbl` 等に既存、KYU は `cobol/KYU01CVT.cbl:306` に追加。 + - COBOL 側マーキング: 各対象行に `COBOL-DEFICIENCY:` コメントを付与(参照先=本ファイル)。現在小計: `cobol/KIN05MAT.cbl:400`(A類)・`cobol/KIN08DBU.cbl:294,489`(B類)・`cobol/KIN09CSV.cbl:160`(B類)・`cobol/KYU01CVT.cbl:306`(B類)。※KIN01INP/KIN04CHK に付与していた标记は「フィールド数ゲート誤り」が誤認であったため削除済。 --- @@ -22,10 +22,10 @@ | ZAN04 | Zan04MatMain | ◯ | – | – | | ZAN05 | Zan05CalMain | ◯ | – | COBOL 正(Java 側缺陷は記録対象外) | | ZAN06 | Zan06UpdMain | ◯ | – | ADD は COBOL と一致 | -| **KIN01** | Kin01InpMain | ✗ | **A類** | フィールド数ゲート off‑by‑one | +| KIN01 | Kin01InpMain | ◯ | – | COBOL/Java ともフィールド数検証一致(WRK-COMMA-CNT=UNSTRING TALLYING のフィールド数)、COBOL 不備なし | | KIN02 | Kin02UpdMain | ◯ | – | – | | KIN03 | Kin03ExpMain | ◯ | – | – | -| **KIN04** | Kin04ChkMain | ✗ | **A類** | フィールド数ゲート off‑by‑one | +| KIN04 | Kin04ChkMain | ◯ | – | 同上(フィールド数=6 で一致)、COBOL 不備なし | | **KIN05** | Kin05MatMain | ✗ | **A類** | WRK‑BEST 未リセット | | KIN06 | Kin06CldMain | △ | **D類**(条件) | 休日全件取込≤50 件の上限リスク | | KIN07 | Kin07DaiMain | ◯ | – | COBOL 正(Java 側缺陷は記録対象外) | @@ -55,22 +55,7 @@ ### A 類:COBOL 自身のバグ(Java は設計書通りに修正済) -#### A‑1. KIN01INP — フィールド数ゲート誤り -- **ファイル:行**: `cobol/KIN01INP.cbl:250` `IF WRK-COMMA-CNT NOT = 8` -- **COBOL 挙動**: `WRK-COMMA-CNT` は `UNSTRING ... TALLYING` の**区切り数**(8 フィールド→7)。`7 ≠ 8` が常真となり、形式正しい 8 フィールド行も全て `F` エラー(W02) へ振分け。 -- **設計指定**: 設計書は「フィールド数=8」で判定。 -- **Java 挙動**: `tokens.length == 8` で判定(設計通り)。→ COBOL と W01/W02 が逆転。 -- **COBOL 側問題**: 明確な off‑by‑one バグ。 -- **対応**: Java は設計準拠で正。COBOL 側はレガシー不備。修正不要(Java 維持)。 - -#### A‑2. KIN04CHK — フィールド数ゲート誤り(同上) -- **ファイル:行**: `cobol/KIN04CHK.cbl:271,293` `IF WRK-COMMA-CNT = CNS-FIELD-COUNT-6(=6)` -- **COBOL 挙動**: 区切り数は 5。`5 = 6` は常偽 → 以降の 4 段検証が実行されず、正しい 6 フィールド行も W02 へ。 -- **設計指定**: フィールド数=6。 -- **Java 挙動**: `tokens.length == 6`(設計通り)。 -- **対応**: Java 維持。COBOL 側バグ。 - -#### A‑3. KIN05MAT — WRK‑BEST 未リセット(情報リーク) +#### A‑1. KIN05MAT — WRK‑BEST 未リセット(情報リーク) - **ファイル:行**: `cobol/KIN05MAT.cbl:400` `2100R01ONLYSOR SECTION.`(R01 単独出力) - **COBOL 挙動**: `1000ITTSOR`/`2020MATCHSOR` のみ `WRK-BEST-*` を初期化。`2100R01ONLYSOR`(マッチ直後の「休暇なし R01」) ではリセットせず、**直前のマッチの休暇情報(LEAVE‑TYPE/APPL‑ID)がそのまま出力**される。 - **設計指定**: R01 単独 → '99' 初期化(設計書「R01 単独は '99'」)。 @@ -143,12 +128,13 @@ 2. **KIN08DBU 詳細設計書**: ステップ 3‑1 に `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. **KIN01INP / KIN04CHK 補足(COBOL 不備なし・記録訂正)**: 過去に「UNSTRING TALLYING の WRK-COMMA-CNT は区切り数(7/5)で、フィールド数ゲート(`NOT = 8` / `= 6`)が off‑by‑one バグ」と記録したが、**COBOL の UNSTRING TALLYING は受信フィールド数(8/6)を返す**。したがってゲートはフィールド数を正しく検証しており COBOL に不備はない。当該 A‑1/A‑2 記録は誤りとして削除(変数名 WRK-COMMA-CNT が誤導的であったための見誤り)。 --- ## 4. 推奨対応方針 -- **A 類 (KIN01/04/05)**: COBOL バグ。Java は設計準拠で正 → **Java 維持**。COBOL 側をレガシー不備として本ファイルに記録。業務確認の上、COBOL を「仕様通り(バグ有)」で据え置くか別途 COBOL 修正するか決定。 +- **A 類 (KIN05)**: COBOL バグ。Java は設計準拠で正 → **Java 維持**。COBOL 側をレガシー不備として本ファイルに記録。業務確認の上、COBOL を「仕様通り(バグ有)」で据え置くか別途 COBOL 修正するか決定。 - **B 類 (KIN09/KIN08/KYU01)**: COBOL が設計から乖離。Java は設計準拠 → **Java 維持**。COBOL 側を不備記録。**厳密な COBOL 出力パリティ(並行運用比較等)が必要な場合のみ**、Java に「COBOL 互換モード」フラグを検討(要合意)。 - **C 類 (ZAN03)**: 設計書へフラグ値('1')を追記。Java は両対応済。 - **D 類 (KIN06)**: 本番休日マスタ件数を確認し、50 件超なら双方で上限緩和。