# Business Logic — KKW01030SF02DBean.typeModelData() [287 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKA15101SF.KKW01030SF02DBean` |
| Layer | Web Bean (Data Bean / View Layer) |
| Module | `KKA15101SF` (Package: `eo.web.webview.KKA15101SF`) |

## 1. Role

### KKW01030SF02DBean.typeModelData()

This method serves as the **runtime type resolver** for the K-Opticom telecom order management web application's campaign and service data management screens. It implements a **routing/dispatch design pattern** — receiving a human-readable Japanese item name (`key`) and a sub-property name (`subkey`), it dispatches to a specific `Class<?>` return type based on the combination.

The method supports **23 distinct data fields** across four categories of business data: **campaign configuration** (campaign code, campaign name, campaign list), **service contract details** (billing flags, contract type, discount service codes, penalty codes, dates), **status/type metadata** (status, status name, type code, type code name), and **operational identifiers** (number, pre-update timestamp, immediate apply flags, same-line flag). For each item, it distinguishes three sub-property facets: the data **value** type (e.g., `String.class`, `Boolean.class`), the **enable/disable** state (always `Boolean.class`), and the **state** property (always `String.class`, used for UI state such as readonly or error).

The method is called by the parent bean `KKW01030SFBean` to resolve field types at runtime during dynamic data binding for X33 framework data-type bean views. It has **no external service calls, no database access, and no side effects** — it is a pure lookup function. When an unrecognized key/subkey combination is provided, it returns `null`, allowing the calling framework to handle the mismatch.

If null, the method short-circuits immediately. It also computes a `separaterPoint` index but does not use it further in the current implementation — the split on "/" is reserved for future multi-key routing. The method has no dependency on any external services, constants, or instance fields, making it fully deterministic and stateless.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["typeModelData key, subkey"])
    null_check["key == null OR subkey == null"]
    null_ret["return null"]
    split["separaterPoint = key.indexOf('/')"]
    
    key_branches["Route by key (item name)"]
    
    b1["Block 1: key == Number/Count"]
    b1_val["subkey == value -> return String"]
    b1_en["subkey == enable -> return Boolean"]
    b1_st["subkey == state -> return String"]
    
    b2["Block 2: key == Choice"]
    b2_val["subkey == value -> return Boolean"]
    b2_en["subkey == enable -> return Boolean"]
    b2_st["subkey == state -> return String"]
    
    b3["Block 3: key == Billing Flag"]
    b3_val["subkey == value -> return String"]
    b3_st["subkey == state -> return String"]
    
    b4["Block 4: key == Billing Flag Name"]
    b4_val["subkey == value -> return String"]
    b4_en["subkey == enable -> return Boolean"]
    b4_st["subkey == state -> return String"]
    
    b5["Block 5: key == Number"]
    b5_val["subkey == value -> return String"]
    b5_st["subkey == state -> return String"]
    
    b6["Block 6: key == Contract Type"]
    b6_val["subkey == value -> return String"]
    b6_st["subkey == state -> return String"]
    
    b7["Block 7: key == Pre-Update Timestamp"]
    b7_val["subkey == value -> return String"]
    b7_st["subkey == state -> return String"]
    
    b8["Block 8: key == Campaign Code"]
    b8_val["subkey == value -> return String"]
    b8_en["subkey == enable -> return Boolean"]
    b8_st["subkey == state -> return String"]
    
    b9["Block 9: key == Campaign Name"]
    b9_val["subkey == value -> return String"]
    b9_en["subkey == enable -> return Boolean"]
    b9_st["subkey == state -> return String"]
    
    b10["Block 10: key == Status"]
    b10_val["subkey == value -> return String"]
    b10_st["subkey == state -> return String"]
    
    b11["Block 11: key == Status Name"]
    b11_val["subkey == value -> return String"]
    b11_en["subkey == enable -> return Boolean"]
    b11_st["subkey == state -> return String"]
    
    b12["Block 12: key == Type Code"]
    b12_val["subkey == value -> return String"]
    b12_st["subkey == state -> return String"]
    
    b13["Block 13: key == Type Code Name"]
    b13_val["subkey == value -> return String"]
    b13_en["subkey == enable -> return Boolean"]
    b13_st["subkey == state -> return String"]
    
    b14["Block 14: key == Immediate Apply Flag"]
    b14_val["subkey == value -> return String"]
    b14_st["subkey == state -> return String"]
    
    b15["Block 15: key == Immediate Apply Flag Name"]
    b15_val["subkey == value -> return String"]
    b15_en["subkey == enable -> return Boolean"]
    b15_st["subkey == state -> return String"]
    
    b16["Block 16: key == Application Date"]
    b16_val["subkey == value -> return String"]
    b16_en["subkey == enable -> return Boolean"]
    b16_st["subkey == state -> return String"]
    
    b17["Block 17: key == Start Date"]
    b17_val["subkey == value -> return String"]
    b17_en["subkey == enable -> return Boolean"]
    b17_st["subkey == state -> return String"]
    
    b18["Block 18: key == End Date"]
    b18_val["subkey == value -> return String"]
    b18_en["subkey == enable -> return Boolean"]
    b18_st["subkey == state -> return String"]
    
    b19["Block 19: key == Discount Service Code"]
    b19_val["subkey == value -> return String"]
    b19_en["subkey == enable -> return Boolean"]
    b19_st["subkey == state -> return String"]
    
    b20["Block 20: key == Penalty Code"]
    b20_val["subkey == value -> return Boolean"]
    b20_en["subkey == enable -> return Boolean"]
    b20_st["subkey == state -> return String"]
    
    b21["Block 21: key == Prior Month Cancellation"]
    b21_val["subkey == value -> return Boolean"]
    b21_en["subkey == enable -> return Boolean"]
    b21_st["subkey == state -> return String"]
    
    b22["Block 22: key == Prior Month Cancellation Flag"]
    b22_val["subkey == value -> return String"]
    b22_st["subkey == state -> return String"]
    
    b23["Block 23: key == Same Line Flag"]
    b23_val["subkey == value -> return String"]
    b23_st["subkey == state -> return String"]
    
    fallback["return null"]
    
    START --> null_check
    null_check -- Yes --> null_ret
    null_check -- No --> split
    split --> key_branches
    
    key_branches --> b1
    b1 --> b1_val
    b1 --> b1_en
    b1 --> b1_st
    
    key_branches --> b2
    b2 --> b2_val
    b2 --> b2_en
    b2 --> b2_st
    
    key_branches --> b3
    b3 --> b3_val
    b3 --> b3_st
    
    key_branches --> b4
    b4 --> b4_val
    b4 --> b4_en
    b4 --> b4_st
    
    key_branches --> b5
    b5 --> b5_val
    b5 --> b5_st
    
    key_branches --> b6
    b6 --> b6_val
    b6 --> b6_st
    
    key_branches --> b7
    b7 --> b7_val
    b7 --> b7_st
    
    key_branches --> b8
    b8 --> b8_val
    b8 --> b8_en
    b8 --> b8_st
    
    key_branches --> b9
    b9 --> b9_val
    b9 --> b9_en
    b9 --> b9_st
    
    key_branches --> b10
    b10 --> b10_val
    b10 --> b10_st
    
    key_branches --> b11
    b11 --> b11_val
    b11 --> b11_en
    b11 --> b11_st
    
    key_branches --> b12
    b12 --> b12_val
    b12 --> b12_st
    
    key_branches --> b13
    b13 --> b13_val
    b13 --> b13_en
    b13 --> b13_st
    
    key_branches --> b14
    b14 --> b14_val
    b14 --> b14_st
    
    key_branches --> b15
    b15 --> b15_val
    b15 --> b15_en
    b15 --> b15_st
    
    key_branches --> b16
    b16 --> b16_val
    b16 --> b16_en
    b16 --> b16_st
    
    key_branches --> b17
    b17 --> b17_val
    b17 --> b17_en
    b17 --> b17_st
    
    key_branches --> b18
    b18 --> b18_val
    b18 --> b18_en
    b18 --> b18_st
    
    key_branches --> b19
    b19 --> b19_val
    b19 --> b19_en
    b19 --> b19_st
    
    key_branches --> b20
    b20 --> b20_val
    b20 --> b20_en
    b20 --> b20_st
    
    key_branches --> b21
    b21 --> b21_val
    b21 --> b21_en
    b21 --> b21_st
    
    key_branches --> b22
    b22 --> b22_val
    b22 --> b22_st
    
    key_branches --> b23
    b23 --> b23_val
    b23 --> b23_st
    
    END_RET(["End"])
    null_ret --> END_RET
    b1_val --> END_RET
    b1_en --> END_RET
    b1_st --> END_RET
    b2_val --> END_RET
    b2_en --> END_RET
    b2_st --> END_RET
    b3_val --> END_RET
    b3_st --> END_RET
    b4_val --> END_RET
    b4_en --> END_RET
    b4_st --> END_RET
    b5_val --> END_RET
    b5_st --> END_RET
    b6_val --> END_RET
    b6_st --> END_RET
    b7_val --> END_RET
    b7_st --> END_RET
    b8_val --> END_RET
    b8_en --> END_RET
    b8_st --> END_RET
    b9_val --> END_RET
    b9_en --> END_RET
    b9_st --> END_RET
    b10_val --> END_RET
    b10_st --> END_RET
    b11_val --> END_RET
    b11_en --> END_RET
    b11_st --> END_RET
    b12_val --> END_RET
    b12_st --> END_RET
    b13_val --> END_RET
    b13_en --> END_RET
    b13_st --> END_RET
    b14_val --> END_RET
    b14_st --> END_RET
    b15_val --> END_RET
    b15_en --> END_RET
    b15_st --> END_RET
    b16_val --> END_RET
    b16_en --> END_RET
    b16_st --> END_RET
    b17_val --> END_RET
    b17_en --> END_RET
    b17_st --> END_RET
    b18_val --> END_RET
    b18_en --> END_RET
    b18_st --> END_RET
    b19_val --> END_RET
    b19_en --> END_RET
    b19_st --> END_RET
    b20_val --> END_RET
    b20_en --> END_RET
    b20_st --> END_RET
    b21_val --> END_RET
    b21_en --> END_RET
    b21_st --> END_RET
    b22_val --> END_RET
    b22_st --> END_RET
    b23_val --> END_RET
    b23_st --> END_RET
    fallback --> END_RET
```

**CRITICAL — Constant Resolution:**
This method does **not** reference external constant classes (no `*CC*.java` or `*Const*` patterns). All branch conditions use literal Japanese strings directly. The subkey comparisons use `equalsIgnoreCase`, meaning case-insensitive matching for "value", "enable", and "state".

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | The **item name** (項目名) in Japanese — a human-readable label identifying one of 23 data fields on the campaign/service contract screen. Examples: "キャンペーンコード" (Campaign Code), "契約種別" (Contract Type), "同一回線フラグ" (Same Line Flag). Controls which of the 23 conditional branches is selected. |
| 2 | `subkey` | `String` | The **sub-property name** (サブキー) — identifies which facet of the field's type is requested. Must match "value", "enable", or "state" (case-insensitive). "value" returns the primary data type for the field; "enable" returns Boolean (for UI enable/disable state); "state" returns String (for UI state such as readonly or error status). |

**Instance fields / external state:**
- None. This method reads no instance fields or external state. It is a pure stateless function with no dependencies on bean properties or injected services.

## 4. CRUD Operations / Called Services

This method performs **no CRUD operations, no service component calls, and no database access**. It is a pure type-resolution function with zero side effects.

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| — | — | — | — | No service calls or data access. Pure type lookup. |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Bean:KKW01030SFBean (koptWebA) | `KKW01030SFBean.getTypeModelData` -> `KKW01030SF02DBean.typeModelData` | (none — pure type resolver) |
| 2 | Bean:KKW01030SFBean (koptWebB) | `KKW01030SFBean.getTypeModelData` -> `KKW01030SF02DBean.typeModelData` | (none — pure type resolver) |

**Details:**
- `KKW01030SFBean` (the parent screen bean in both koptWebA and koptWebB) contains a `getTypeModelData(String key, String subkey)` method that delegates to `KKW01030SF02DBean.typeModelData(key, subkey)` when the item is a data-type bean view item (e.g., キャンペーン一覧, キャンペーン一覧（全件）). The parent bean first checks if the key is a "data-type bean" item, instantiates the `KKW01030SF02DBean` if needed, and calls `typeModelData` to resolve the type.
- No upstream screen controllers (KKSV*) were found directly calling `typeModelData`. The method is always invoked through the parent bean's delegation pattern.

## 6. Per-Branch Detail Blocks

### Block 1 — IF (null check) (L1473)

> If key or subkey is null, return null early. This is a defensive guard.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key == null || subkey == null)` // Returns null if either param is null |
| 2 | RETURN | `return null;` |

---

### Block 2 — SET (separator preparation) (L1477)

> Computes the index of "/" in the key. This value is stored but not used in the current implementation — reserved for future multi-key routing.

| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = key.indexOf("/")` // Reserved for future split-based routing |

---

### Block 3 — ELSE-IF (key == "番号／件数") (L1480)

> Data type is **String** for the field "番号／件数" (Number / Count). Internal item ID: `no_cnt`. This is a count field shown on campaign screens.

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `if (key.equals("番号／件数"))` [番号／件数 = "Number / Count"] |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("value"))` -> `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` -> `return Boolean.class;` |
| 4 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkeyが"state"の場合、ステータスを返す -> `return String.class;` |

---

### Block 4 — ELSE-IF (key == "選択") (L1492)

> Data type is **Boolean** for the field "選択" (Choice/Selection). Internal item ID: `choice`. This represents a checkbox or selection flag on the screen.

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if (key.equals("選択"))` [選択 = "Choice"] |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("value"))` -> `return Boolean.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` -> `return Boolean.class;` |
| 4 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkeyが"state"の場合、ステータスを返す -> `return String.class;` |

---

### Block 5 — ELSE-IF (key == "課金要否フラグ") (L1504)

> Data type is **String** for the field "課金要否フラグ" (Billing Necessity Flag). Internal item ID: `kakin_yohi`. Indicates whether billing applies. Note: no "enable" subkey — only "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if (key.equals("課金要否フラグ"))` [課金要否フラグ = "Billing Necessity Flag"] |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("value"))` -> `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkeyが"state"の場合、ステータスを返す -> `return String.class;` |

---

### Block 6 — ELSE-IF (key == "課金要否フラグ名称") (L1515)

> Data type is **String** for "課金要否フラグ名称" (Billing Necessity Flag Name). Internal item ID: `kakin_yohi_nm`. Human-readable label for the billing flag. Has "value", "enable", and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if (key.equals("課金要否フラグ名称"))` [課金要否フラグ名称 = "Billing Necessity Flag Name"] |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("value"))` -> `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` -> `return Boolean.class;` |
| 4 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkeyが"state"の場合、ステータスを返す -> `return String.class;` |

---

### Block 7 — ELSE-IF (key == "番号") (L1527)

> Data type is **String** for "番号" (Number/ID). Internal item ID: `no`. An identifier number field. Has "value" and "state" subkeys only.

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if (key.equals("番号"))` [番号 = "Number"] |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("value"))` -> `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkeyが"state"の場合、ステータスを返す -> `return String.class;` |

---

### Block 8 — ELSE-IF (key == "契約種別") (L1537)

> Data type is **String** for "契約種別" (Contract Type). Internal item ID: `kei_kind`. Classifies the type of service contract. Has "value" and "state" subkeys only.

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if (key.equals("契約種別"))` [契約種別 = "Contract Type"] |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("value"))` -> `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkeyが"state"の場合、ステータスを返す -> `return String.class;` |

---

### Block 9 — ELSE-IF (key == "更新年月日時刻更新前") (L1547)

> Data type is **String** for "更新年月日時刻更新前" (Pre-Update Timestamp). Internal item ID: `upd_dtm_bf`. Stores the timestamp before a record was updated, for audit/change tracking. Has "value" and "state" subkeys only.

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if (key.equals("更新年月日時刻更新前"))` [更新年月日時刻更新前 = "Pre-Update Timestamp"] |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("value"))` -> `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkeyが"state"の場合、ステータスを返す -> `return String.class;` |

---

### Block 10 — ELSE-IF (key == "キャンペーンコード") (L1557)

> Data type is **String** for "キャンペーンコード" (Campaign Code). Internal item ID: `campaign_cd`. Identifies a promotional campaign. Has "value", "enable", and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if (key.equals("キャンペーンコード"))` [キャンペーンコード = "Campaign Code"] |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("value"))` -> `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` -> `return Boolean.class;` |
| 4 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkeyが"state"の場合、ステータスを返す -> `return String.class;` |

---

### Block 11 — ELSE-IF (key == "キャンペーン名") (L1569)

> Data type is **String** for "キャンペーン名" (Campaign Name). Internal item ID: `campaign_nm`. Human-readable campaign title. Has "value", "enable", and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if (key.equals("キャンペーン名"))` [キャンペーン名 = "Campaign Name"] |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("value"))` -> `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` -> `return Boolean.class;` |
| 4 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkeyが"state"の場合、ステータスを返す -> `return String.class;` |

---

### Block 12 — ELSE-IF (key == "ステータス") (L1581)

> Data type is **String** for "ステータス" (Status). Internal item ID: `stat`. The current status code of a record. Has "value" and "state" subkeys only.

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if (key.equals("ステータス"))` [ステータス = "Status"] |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("value"))` -> `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkeyが"state"の場合、ステータスを返す -> `return String.class;` |

---

### Block 13 — ELSE-IF (key == "ステータス名称") (L1591)

> Data type is **String** for "ステータス名称" (Status Name). Internal item ID: `stat_nm`. Human-readable status label. Has "value", "enable", and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if (key.equals("ステータス名称"))` [ステータス名称 = "Status Name"] |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("value"))` -> `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` -> `return Boolean.class;` |
| 4 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkeyが"state"の場合、ステータスを返す -> `return String.class;` |

---

### Block 14 — ELSE-IF (key == "タイプコード") (L1603)

> Data type is **String** for "タイプコード" (Type Code). Internal item ID: `type_cd`. Classification code for the record type. Has "value" and "state" subkeys only.

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if (key.equals("タイプコード"))` [タイプコード = "Type Code"] |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("value"))` -> `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkeyが"state"の場合、ステータスを返す -> `return String.class;` |

---

### Block 15 — ELSE-IF (key == "タイプコード名称") (L1613)

> Data type is **String** for "タイプコード名称" (Type Code Name). Internal item ID: `type_cd_nm`. Human-readable label for the type code. Has "value", "enable", and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if (key.equals("タイプコード名称"))` [タイプコード名称 = "Type Code Name"] |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("value"))` -> `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` -> `return Boolean.class;` |
| 4 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkeyが"state"の場合、ステータスを返す -> `return String.class;` |

---

### Block 16 — ELSE-IF (key == "即時適用フラグ") (L1625)

> Data type is **String** for "即時適用フラグ" (Immediate Apply Flag). Internal item ID: `aply_jun`. Flag indicating whether changes apply immediately. Has "value" and "state" subkeys only.

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if (key.equals("即時適用フラグ"))` [即時適用フラグ = "Immediate Apply Flag"] |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("value"))` -> `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkeyが"state"の場合、ステータスを返す -> `return String.class;` |

---

### Block 17 — ELSE-IF (key == "即時適用フラグ名称") (L1635)

> Data type is **String** for "即時適用フラグ名称" (Immediate Apply Flag Name). Internal item ID: `aply_jun_nm`. Human-readable label for the immediate apply flag. Has "value", "enable", and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if (key.equals("即時適用フラグ名称"))` [即時適用フラグ名称 = "Immediate Apply Flag Name"] |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("value"))` -> `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` -> `return Boolean.class;` |
| 4 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkeyが"state"の場合、ステータスを返す -> `return String.class;` |

---

### Block 18 — ELSE-IF (key == "申請年月日") (L1647)

> Data type is **String** for "申請年月日" (Application Date). Internal item ID: `mskm_ymd`. Date when the service request/application was submitted. Has "value", "enable", and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if (key.equals("申請年月日"))` [申請年月日 = "Application Date"] |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("value"))` -> `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` -> `return Boolean.class;` |
| 4 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkeyが"state"の場合、ステータスを返す -> `return String.class;` |

---

### Block 19 — ELSE-IF (key == "開始年月日") (L1659)

> Data type is **String** for "開始年月日" (Start Date). Internal item ID: `staymd`. Service start date. Has "value", "enable", and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if (key.equals("開始年月日"))` [開始年月日 = "Start Date"] |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("value"))` -> `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` -> `return Boolean.class;` |
| 4 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkeyが"state"の場合、ステータスを返す -> `return String.class;` |

---

### Block 20 — ELSE-IF (key == "終了年月日") (L1671)

> Data type is **String** for "終了年月日" (End Date). Internal item ID: `endymd`. Service end/expiration date. Has "value", "enable", and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if (key.equals("終了年月日"))` [終了年月日 = "End Date"] |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("value"))` -> `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` -> `return Boolean.class;` |
| 4 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkeyが"state"の場合、ステータスを返す -> `return String.class;` |

---

### Block 21 — ELSE-IF (key == "割引サービスコード") (L1683)

> Data type is **String** for "割引サービスコード" (Discount Service Code). Internal item ID: `wrib_svc_cd`. Code identifying a discount or promotional service. Has "value", "enable", and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if (key.equals("割引サービスコード"))` [割引サービスコード = "Discount Service Code"] |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("value"))` -> `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` -> `return Boolean.class;` |
| 4 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkeyが"state"の場合、ステータスを返す -> `return String.class;` |

---

### Block 22 — ELSE-IF (key == "違約金コード") (L1695)

> Data type is **Boolean** for "違約金コード" (Penalty Code). Internal item ID: `pnlty_cd**. This is unique: its **value** type is `Boolean.class` (not `String.class`), indicating it stores a penalty flag rather than a code string. Has "value", "enable", and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if (key.equals("違約金コード"))` [違約金コード = "Penalty Code"] |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("value"))` -> `return Boolean.class;` // unique: Boolean value type |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` -> `return Boolean.class;` |
| 4 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkeyが"state"の場合、ステータスを返す -> `return String.class;` |

---

### Block 23 — ELSE-IF (key == "前月解約") (L1707)

> Data type is **Boolean** for "前月解約" (Prior Month Cancellation). Internal item ID: `wrib_svc_kei_zengetu_kaiyaku`. Indicates whether the service was cancelled in the prior month. **Value** type is `Boolean.class`. Has "value", "enable", and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if (key.equals("前月解約"))` [前月解約 = "Prior Month Cancellation"] |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("value"))` -> `return Boolean.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` -> `return Boolean.class;` |
| 4 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkeyが"state"の場合、ステータスを返す -> `return String.class;` |

---

### Block 24 — ELSE-IF (key == "前月解約フラグ") (L1719)

> Data type is **String** for "前月解約フラグ" (Prior Month Cancellation Flag). Internal item ID: `wrib_svc_kei_zengetu_kaiyaku_flg`. Flag field related to prior month cancellation. Has "value" and "state" subkeys only (no "enable").

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if (key.equals("前月解約フラグ"))` [前月解約フラグ = "Prior Month Cancellation Flag"] |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("value"))` -> `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkeyが"state"の場合、ステータスを返す -> `return String.class;` |

---

### Block 25 — ELSE-IF (key == "同一回線フラグ") (L1729) [IT1-2018-0000125 ADD]

> Data type is **String** for "同一回線フラグ" (Same Line Flag). Internal item ID: `same_kaisen_flg`. Added in IT1-2018-0000125 patch. Indicates whether the service is on the same line as an existing service. Has "value" and "state" subkeys only.

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if (key.equals("同一回線フラグ"))` [同一回線フラグ = "Same Line Flag"] |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("value"))` -> `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkeyが"state"の場合、ステータスを返す -> `return String.class;` |

---

### Block 26 — ELSE (fallback) (L1743)

> No matching key/subkey was found. Returns `null` to signal that the data type is unknown for this item.

| # | Type | Code |
|---|------|------|
| 1 | ELSE | `return null;` // 条件に合致するプロパティが存在しない場合 (No matching property found) |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `key` | Parameter | Item name (項目名) — Japanese label identifying a screen field |
| `subkey` | Parameter | Sub-property name — "value", "enable", or "state" identifying the type facet |
| `no_cnt` | Field | Number/count — item ID for "番号／件数" (Number / Count) field |
| `choice` | Field | Choice/selection — item ID for "選択" (checkbox selection) field |
| `kakin_yohi` | Field | Billing necessity flag (課金要否フラグ) — whether billing is required |
| `kakin_yohi_nm` | Field | Billing necessity flag name (課金要否フラグ名称) — human-readable billing flag label |
| `no` | Field | Number/ID (番号) — record identifier number |
| `kei_kind` | Field | Contract type (契約種別) — type of service contract (e.g., FTTH, Mobile, DSL) |
| `upd_dtm_bf` | Field | Pre-update timestamp (更新年月日時刻更新前) — timestamp before last modification |
| `campaign_cd` | Field | Campaign code (キャンペーンコード) — identifier for a promotional campaign |
| `campaign_nm` | Field | Campaign name (キャンペーン名) — human-readable campaign title |
| `stat` | Field | Status (ステータス) — current status code of a record |
| `stat_nm` | Field | Status name (ステータス名称) — human-readable status label |
| `type_cd` | Field | Type code (タイプコード) — classification code for record type |
| `type_cd_nm` | Field | Type code name (タイプコード名称) — human-readable type code label |
| `aply_jun` | Field | Immediate apply flag (即時適用フラグ) — whether changes take effect immediately |
| `aply_jun_nm` | Field | Immediate apply flag name (即時適用フラグ名称) — human-readable immediate apply label |
| `mskm_ymd` | Field | Application date (申請年月日) — date the service request was submitted |
| `staymd` | Field | Start date (開始年月日) — service start/activation date |
| `endymd` | Field | End date (終了年月日) — service end/expiration date |
| `wrib_svc_cd` | Field | Discount service code (割引サービスコード) — code for a discount/promotional service |
| `pnlty_cd` | Field | Penalty code (違約金コード) — flag indicating early termination penalty applies |
| `wrib_svc_kei_zengetu_kaiyaku` | Field | Prior month cancellation (前月解約) — boolean flag for prior-month service cancellation |
| `wrib_svc_kei_zengetu_kaiyaku_flg` | Field | Prior month cancellation flag (前月解約フラグ) — related cancellation flag string |
| `same_kaisen_flg` | Field | Same line flag (同一回線フラグ) — indicates service is on the same physical line as existing service |
| KKW01030SF02DBean | Class | Data-type bean for campaign/service contract line item screens in module KKA15101SF |
| X33VDataTypeBeanInterface | Interface | Fujitsu X33 framework interface marking this bean as a data-type provider |
| X33VListedBeanInterface | Interface | Fujitsu X33 framework interface marking this bean as a list-data provider |
| X33 | Acronym | Web Client Framework 3.3 — Fujitsu's enterprise web application framework |
| FTTH | Business term | Fiber To The Home — fiber-optic broadband service (one of the contract types) |
| キャンペーン | Term | Campaign — promotional marketing campaign for telecom services |
| 課金 | Term | Billing/Kakin — charge/billing-related |
| 違約金 | Term | Penalty/Penalty Fee (违约罚金) — early termination contract penalty |
| 契約種別 | Term | Contract Type (契約種類) — classification of service contract (FTTH, Mail, etc.) |
