docs(ZAN03): specify holiday-flag='1' in design; align Java to COBOL; reclassify KIN09(B-1)/KIN08(B-3) as design self-contradiction; drop false D-1/KIN06
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
# 既存 COBOL コード不備点 調査記録
|
||||
|
||||
- **作成日**: 2026-08-25
|
||||
- **更新日**: 2026-08-29(KYU01‑09 追加 / KIN01・KIN04 の「フィールド数ゲート誤り」は誤記のため削除)
|
||||
- **更新日**: 2026-08-29(KYU01‑09 追加 / KIN01・KIN04 フィールド数ゲート誤記削除 / KIN09(B‑1)・KIN08(B‑3) を設計書自己矛盾へ再分類 / ZAN03(C‑1)・KIN06(D‑1) を誤判として削除 / 詳細設計書_ZAN03CHK.md にフラグ値を追記)
|
||||
- **背景**: KIN01‑09 / ZAN01‑06 / KYU01‑09 の COBOL→Java 変換後、Java↔COBOL↔設計書 の三方照合を実施。本ファイルは「既存 COBOL 側に存在する不備・設計書からの乖離」のみを記録する。
|
||||
- **記録方針**: **Java 側の缺陷(Java 真缺陷等)は本記録の対象外**。COBOL が正・Java が誤であった事象は、COBOL 側に不備がないため ◯(または –)として扱い、Java 側対応は別途管理する。
|
||||
- **関連成果物**:
|
||||
- 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 に付与していた标记は「フィールド数ゲート誤り」が誤認であったため削除済。
|
||||
- COBOL 側マーキング: 各対象行に `COBOL-DEFICIENCY:` コメントを付与(参照先=本ファイル)。現在小計: `cobol/KIN05MAT.cbl:400`(A類)・`cobol/KIN08DBU.cbl:294`(B類:Tカード10名上限)・`cobol/KYU01CVT.cbl:306`(B類:エラー区分)。※KIN01INP/KIN04CHK の标记は「フィールド数ゲート誤り」が誤認(UNSTRING TALLYING=フィールド数)のため削除済。※KIN09CSV.cbl:160 / KIN08DBU.cbl:489 の标记は、当該事象が設計書自己矛盾(非 COBOL 缺陷)と判明したため削除済。※ZAN03CHK.cbl:385 の NOTE は「設計書にフラグ='1' を規定」に更新済。
|
||||
|
||||
---
|
||||
|
||||
@@ -18,19 +18,18 @@
|
||||
|------|------|------|--------------|------|
|
||||
| ZAN01 | Zan01ChkMain | ◯ | – | trim/再符号化のみ |
|
||||
| ZAN02 | Zan02ChkMain | ◯ | – | キー比較のみ条件差 |
|
||||
| **ZAN03** | Zan03ChkMain | ✗ | **C類** | 休日フラグ値('1')設計未規定/運用慣習 |
|
||||
| **ZAN03** | Zan03ChkMain | ◯ | – | 設計書にフラグ値='1' を追記済(2026-08-29);Java は '1' のみ→COBOL と一致、COBOL 不備なし(C‑1 誤判削除) |
|
||||
| ZAN04 | Zan04MatMain | ◯ | – | – |
|
||||
| ZAN05 | Zan05CalMain | ◯ | – | COBOL 正(Java 側缺陷は記録対象外) |
|
||||
| ZAN06 | Zan06UpdMain | ◯ | – | ADD は COBOL と一致 |
|
||||
| ZAN06 | Zan06UpdMain | ◯ | – | 設計「処理詳細 §1‑6」が HOLIDAY-COUNT<50 を明示要求、かつ月≤31日で未発動→COBOL 不備なし(D‑1 誤判削除) |
|
||||
| KIN01 | Kin01InpMain | ◯ | – | COBOL/Java ともフィールド数検証一致(WRK-COMMA-CNT=UNSTRING TALLYING のフィールド数)、COBOL 不備なし |
|
||||
| KIN02 | Kin02UpdMain | ◯ | – | – |
|
||||
| KIN03 | Kin03ExpMain | ◯ | – | – |
|
||||
| KIN04 | Kin04ChkMain | ◯ | – | 同上(フィールド数=6 で一致)、COBOL 不備なし |
|
||||
| **KIN05** | Kin05MatMain | ✗ | **A類** | WRK‑BEST 未リセット |
|
||||
| KIN06 | Kin06CldMain | △ | **D類**(条件) | 休日全件取込≤50 件の上限リスク |
|
||||
| KIN07 | Kin07DaiMain | ◯ | – | COBOL 正(Java 側缺陷は記録対象外) |
|
||||
| **KIN08** | Kin08DbuMain | ✗ | **B類** | RESET で MONTHLY のみ削除/T カード 10 名上限 |
|
||||
| **KIN09** | Kin09CsvMain | ✗ | **B類** | FULL/SHORT 出力範囲反転/時間欄書式 |
|
||||
| **KIN08** | Kin08DbuMain | ✗ | **B類** | T カード対象 10 名上限(UNSTRING INTO(1)..(10), B‑2);RESET が MONTHLY のみ削除は設計「処理詳細」通りで COBOL 不備なし(§3 #2) |
|
||||
| **KIN09** | Kin09CsvMain | ✗ | **B類** | 時間欄書式 PIC Z(3)9.9 前导空格 vs 设计'8.0'(B‑1);FULL/SHORT 逆転は設計書 PARM 表との矛盾のみ(§3 #1)、COBOL 不備なし |
|
||||
| SUB01 | Sub01DatSub | △ | – | TZ 依存(条件) |
|
||||
| SUB02 | Sub02MsgSub | ◯ | – | – |
|
||||
| SUB03 | Sub03EndSub | ◯ | – | – |
|
||||
@@ -66,34 +65,20 @@
|
||||
|
||||
> これらは「COBOL の挙動が設計と食い違っている」点。Java を COBOL に合わせて戻すと設計違反になる。原則として **Java を維持**し、COBOL 側を不備として記録する。
|
||||
|
||||
#### B‑1. KIN09CSV — FULL/SHORT 出力範囲が設計と逆
|
||||
- **ファイル:行**: `cobol/KIN09CSV.cbl:160` `IF MODE-SHORT PERFORM 2500-SHORT-MODE`
|
||||
- **COBOL 挙動**: 日別行は常時出力、`MODE-SHORT` 時にのみサマリ追加 → **FULL=日別のみ / SHORT=日別+サマリ**。
|
||||
- **設計指定**: PARM 表 `FULL=日別+月次 / SHORT=月次のみ`(詳細設計書_KIN09CSV L33)。
|
||||
- **Java 挙動**: 設計通り `FULL=日別+サマリ / SHORT=サマリのみ`。
|
||||
- **対応**: **Java 維持**。COBOL が設計と逆。※設計書 §3 見出し「SHORT 時のみ追加処理」も矛盾含み(設計書自身の不備、後述)。
|
||||
|
||||
#### B‑2. KIN09CSV — 時間欄編集書式
|
||||
#### B‑1. KIN09CSV — 時間欄編集書式
|
||||
- **COBOL 挙動**: `PIC Z(3)9.9` → 先頭空白(例 `" 8.0"`)。
|
||||
- **設計指定**: CSV 例 `8.0`(先頭空白なし)。
|
||||
- **Java 挙動**: 先頭空白なし(設計例通り)。
|
||||
- **対応**: **Java 維持**(設計例に合致)。COBOL が設計例と食い違い。
|
||||
|
||||
#### B‑3. KIN08DBU — RESET で MONTHLY のみ削除(DAILY を削除しない)
|
||||
- **ファイル:行**: `cobol/KIN08DBU.cbl:488` `DELETE FROM MONTHLY_ABSENCE`
|
||||
- **COBOL 挙動**: RESET 時に `MONTHLY_ABSENCE` のみ削除。`DAILY_RECORDS` は削除せず、再実行時に PK 衝突で ABEND リスク。
|
||||
- **設計指定**: 使用 DB 表(L45)・SYSIN 仕様(L29)「RESET=既存削除後再 INSERT」→ **DAILY_RECORDS も DELETE+INSERT**。
|
||||
- **Java 挙動**: RESET で DAILY+MONTHLY 両削除(設計通り)。
|
||||
- **対応**: **Java 維持**。COBOL が設計と乖離(設計書ステップ 3‑1 に MONTHLY 削除しか書かれておらず記述漏れ)。
|
||||
|
||||
#### B‑4. KIN08DBU — T カード対象社員 10 名上限
|
||||
#### B‑2. KIN08DBU — T カード対象社員 10 名上限
|
||||
- **ファイル:行**: `cobol/KIN08DBU.cbl:294` `UNSTRING ... INTO TARGET-EMP(1)...(10)`
|
||||
- **COBOL 挙動**: `UNSTRING` の受信側が `(1)..(10)` のみ(テーブルは OCCURS 100 だが実質 10 名まで)。11 名目以降は集計から漏れる。
|
||||
- **設計指定**: T カード上限の記載なし(無制限扱い)。
|
||||
- **Java 挙動**: 全件格納(設計通り、無制限)。
|
||||
- **対応**: **Java 維持**。COBOL 側の実装上限制(設計未記載のため、COBOL の制限を「仕様」とみなすか要合意)。
|
||||
|
||||
#### B‑5. KYU01CVT — エラー区分リテラルが設計と乖離
|
||||
#### B‑3. 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' で固定」。
|
||||
@@ -101,32 +86,13 @@
|
||||
- **COBOL 側問題**: 設計が規定するリテラル `EMPID-ERR` を出力せず、別字面 `EMP- ` を出力(事実上の定数バグ/設計乖離)。
|
||||
- **対応**: Java は設計準拠で正 → **Java 維持**。COBOL 側をレガシー不備として記録。
|
||||
|
||||
### C 類:設計書未規定/データ慣習
|
||||
|
||||
#### C‑1. ZAN03CHK — 休日フラグ値の指定欠落
|
||||
- **ファイル:行**: `cobol/ZAN03CHK.cbl:385` `IF WRK-HD-FLG(...) = '1'`
|
||||
- **COBOL 挙動**: 休日カレンダ(ZAN03R03.DAT) のフラグが `'1'` のとき `OVT-TYPE='H'`。
|
||||
- **設計指定**: 設計書は「休日→'H'/平日→'W'」の**出力セマンティクスのみ**規定し、**入力フラグ値('1'/'H'/他)を一切規定せず**。
|
||||
- **Java 挙動(修正後)**: `'1'` と `'H'` の両方を受容(運用互換)。
|
||||
- **COBOL 側問題**: COBOL が `'1'` を前提としており、設計書がフラグ値を規定していない**設計書側の欠落**。COBOL 自体は「運用慣習通り」で動く。
|
||||
- **対応**: 設計書へ「フラグ='1' で休日」と追記推奨。Java は両対応済。
|
||||
|
||||
### D 類:条件付きリスク(COBOL 側潜在不備)
|
||||
|
||||
#### D‑1. KIN06CLD — 休日取込上限 50 件
|
||||
- **ファイル:行**: `cobol/KIN06CLD.cbl` `1200HOLIDAYSOR`(SELECT 全件 ORDER BY、但し `HOLIDAY-COUNT < 50` で打切り)
|
||||
- **COBOL 挙動**: 休日を最大 50 件までしかロード。対象月の休日が 50 件目以降に位置する場合、一部が「出勤日」と判定される。
|
||||
- **Java 挙動**: 対象月のみロード(同様に 50 件上限)。
|
||||
- **影響**: 通常 <50 件で無影響。休日マスタが 50 件を超える環境では双方にリスク(COBOL 由来の制約)。
|
||||
- **対応**: 本番マスタ件数を確認;超える場合は COBOL/Java 双方で上限緩和を要検討。
|
||||
|
||||
---
|
||||
|
||||
## 3. 設計書自身の矛盾(COBOL/Java 双方に関係)
|
||||
|
||||
1. **KIN09CSV 詳細設計書**: PARM 表(L33) `FULL=日別+月次` に対し、§3 見出し「SHORT 時のみ追加処理(2500‑SHORT‑MODE)」が逆のニュアンス。正規定義は PARM 表。→ Java は PARM 表準拠(正)。
|
||||
2. **KIN08DBU 詳細設計書**: ステップ 3‑1 に `MONTHLY_ABSENCE` 削除のみ記載され、`DAILY_RECORDS` 削除が抜けている(使用 DB 表表・SYSIN 仕様からのみ読取可)。→ Java は両削除(正)。
|
||||
3. **ZAN03CHK**: 休日フラグ値の規定なし(C‑1)。
|
||||
1. **KIN09CSV 詳細設計書**: PARM 表(L33) `FULL=日別+月次` に対し、§3 見出し「SHORT 時のみ追加処理(2500‑SHORT‑MODE)」が逆のニュアンス(=COBOL は「処理詳細」通りに日別常時+SHORT時摘要を実装)。→ **COBOL は「処理詳細」に合致しており COBOL 不備ではない**;設計書内部矛盾としてのみ記録(Java が PARM 表準拠かは設計仕様の優先権による)。
|
||||
2. **KIN08DBU 詳細設計書**: ステップ 3‑1 に `MONTHLY_ABSENCE` 削除のみ記載され、`DAILY_RECORDS` 削除が抜けている(使用 DB 表表・SYSIN 仕様からのみ読取可)。→ **COBOL は「処理詳細(ステップ3‑1)」に合致しており COBOL 不備ではない**;設計書内部矛盾としてのみ記録。RESET で DAILY も削除すべきかは設計仕様の優先権(処理詳細 vs DB表/SYSIN)による。
|
||||
3. **ZAN03CHK**: 設計書に休日フラグ値を未規定だったが、**2026-08-29 に `詳細設計書_ZAN03CHK.md` へ「入力フラグ `R03HOLIDAY-FLG` は値 `'1'`=休日・それ以外=平日(運用慣習)」を追記**。これに伴い COBOL(`'1'` のみ) も Java(`'1'` のみ、'H' 入力許容を削除) も設計と一致→**本件解消**。※`'H'`/`'W'` は出力 `OVT-TYPE` であり入力フラグではない。
|
||||
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 が誤導的であったための見誤り)。
|
||||
|
||||
@@ -135,10 +101,9 @@
|
||||
## 4. 推奨対応方針
|
||||
|
||||
- **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 件超なら双方で上限緩和。
|
||||
- **設計書矛盾**: 上記を設計書へ反映(設計側修正)。
|
||||
- **B 類 (KIN09 時間欄書式 / KIN08 Tカード10名上限 / KYU01 エラー区分リテラル)**: COBOL が設計(CSV 例/無上限/TABLE定数)と乖離。Java は設計準拠 → **Java 維持**。COBOL 側を不備記録。**厳密な COBOL 出力パリティ(並行運用比較等)が必要な場合のみ**、Java に「COBOL 互換モード」フラグを検討(要合意)。
|
||||
- **設計書矛盾 (KIN09 / KIN08)**: 上記 #1/#2 を設計書へ反映(設計側修正)。COBOL は「処理詳細」通りのため COBOL 不備ではない。
|
||||
- **ZAN03**: 設計書へフラグ値('1')を追記済→COBOL/Java とも設計と一致、本件解消。
|
||||
- **Java 側缺陷**: 本記録の対象外(別途チケット/PR で管理)。
|
||||
|
||||
---
|
||||
|
||||
@@ -224,8 +224,8 @@ public class Zan03ChkMain {
|
||||
String date = r01Rec.getApplDate();
|
||||
for (String[] h : holidayTable) {
|
||||
if (h[0].equals(date)) {
|
||||
// 休日フラグ: COBOL データ慣習は '1'、設計上は 'H' も可。両方受容して運用互換を確保。
|
||||
if (OVT_H.equals(h[1]) || "1".equals(h[1])) {
|
||||
// 休日フラグ: 設計書規定値は '1'(休日)、それ以外は平日。COBOL と同一の判定。
|
||||
if ("1".equals(h[1])) {
|
||||
wrkOvtTypeSet = OVT_H;
|
||||
}
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user