# Business Logic — KKW01034SF03DBean.typeModelData() [344 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKW01034SF.KKW01034SF03DBean` |
| Layer | Controller (Web UI Data Binding Bean) |
| Module | `KKW01034SF` (Package: `eo.web.webview.KKW01034SF`) |

## 1. Role

### KKW01034SF03DBean.typeModelData()

This method serves as a **data type resolver** within the KKW01034SF screen module, which deals with **Fiber-to-the-Home (FTTH) service contract and campaign management** in NTT East's telecom operations system. Given a field name (`key`) and a sub-key (`subkey`), it returns the appropriate Java type (`Class<?>`) — either `String.class`, `Boolean.class`, or `null` — that the web framework uses for model binding and form rendering.

The method implements a **routing/dispatch design pattern**: it uses a cascade of 28 conditional branches, each matching a specific Japanese-named field to its corresponding data type. The fields span several business domains within FTTH service provisioning:

- **Registration selection fields** — `登録選択` (add_choice), `登録選択文字列` (add_choice_value) — Boolean and String toggles for form controls.
- **Identifiers** — `SYSID` (system ID), `サービスコード` (service code), `タイプコード` (type code), `キャンペーンコード` (campaign code) — String-typed reference keys.
- **Contract fields** — `契約種別` (contract type), `サービス契約番号` (service contract number) — String-typed identifiers.
- **Dates and application fields** — `即時適用フラグ` (immediate application flag), `適用月` (effective month), `適用月名称` (effective month name), `利用開始希望日` (desired service start date) — String values with Boolean enable flags.
- **Display condition fields** — `表示条件1`, `表示条件2`, `表示条件利用開始希望日` — Boolean visibility toggles for conditional form sections.
- **Router exchange fields** — `EO光多機能ルーター交換有無` (EO optical multi-function router exchange presence) and related radio button label/condition fields — String values with Boolean enable and display conditions.
- **Ownership fields** — `所有ルーター` (owned router) — String-typed identifier.

This method is a **shared utility** called by the parent bean `KKW01034SFBean` which aggregates type model data across multiple screen surfaces. It plays a critical role in the **form rendering pipeline**: when a JSP-based view requests the type of a model property, this method provides the meta-type information needed for dynamic form binding, validation, and UI state management.

The method has **no side effects** — it is purely a lookup function with no calls to services, databases, or external systems. It performs zero CRUD operations and reads no instance fields.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START["typeModelData key, subkey"]
    CHECK_NULL{key or subkey<br/>is null?}
    START --> CHECK_NULL
    CHECK_NULL -->|Yes| RET_NULL_1["return null"]
    CHECK_NULL -->|No| FIND_SEP["Find / separator index"]
    FIND_SEP --> B1{"key equals<br/>登録選択"}
    B1 -->|Yes| S1A{subkey check}
    S1A -->|"value"| RB1["return Boolean.class"]
    S1A -->|"enable"| RB2["return Boolean.class"]
    S1A -->|"state"| RS1["return String.class"]
    S1A -->|other| B2{"key equals<br/>登録選択文字列"}
    B1 -->|No| B2
    B2 -->|Yes| S2A{subkey check}
    S2A -->|"value"| RS2["return String.class"]
    S2A -->|"enable"| RB3["return Boolean.class"]
    S2A -->|"state"| RS3["return String.class"]
    S2A -->|other| B3{"key equals<br/>SYSID"}
    B2 -->|No| B3
    B3 -->|Yes| SS{"subkey check"}
    SS -->|"value"| RSS["return String.class"]
    SS -->|"state"| RS4["return String.class"]
    SS -->|other| B4{"key equals<br/>契約種別"}
    B3 -->|No| B4
    B4 -->|Yes| SK{"subkey check"}
    SK -->|"value"| RSK["return String.class"]
    SK -->|"state"| RS5["return String.class"]
    SK -->|other| B5{"key equals<br/>キャンペーンコード"}
    B4 -->|No| B5
    B5 -->|Yes| SC{"subkey check"}
    SC -->|"value"| RSC["return String.class"]
    SC -->|"enable"| RBC["return Boolean.class"]
    SC -->|"state"| RS6["return String.class"]
    SC -->|other| B6{"key equals<br/>キャンペーンコード名称"}
    B5 -->|No| B6
    B6 -->|Yes| SN{"subkey check"}
    SN -->|"value"| RSN["return String.class"]
    SN -->|"enable"| RBCN["return Boolean.class"]
    SN -->|"state"| RS7["return String.class"]
    SN -->|other| B7{"key equals<br/>タイプコード"}
    B6 -->|No| B7
    B7 -->|Yes| ST{"subkey check"}
    ST -->|"value"| RST["return String.class"]
    ST -->|"state"| RS8["return String.class"]
    ST -->|other| B8{"key equals<br/>タイプコード名称"}
    B7 -->|No| B8
    B8 -->|Yes| STN{"subkey check"}
    STN -->|"value"| RSTN["return String.class"]
    STN -->|"enable"| RBTN["return Boolean.class"]
    STN -->|"state"| RS9["return String.class"]
    STN -->|other| B9{"key equals<br/>サービスコード"}
    B8 -->|No| B9
    B9 -->|Yes| SSC{"subkey check"}
    SSC -->|"value"| RSSC["return String.class"]
    SSC -->|"state"| RS10["return String.class"]
    SSC -->|other| B10{"key equals<br/>サービス契約番号"}
    B9 -->|No| B10
    B10 -->|Yes| SSN{"subkey check"}
    SSN -->|"value"| RSSN["return String.class"]
    SSN -->|"enable"| RBSN["return Boolean.class"]
    SSN -->|"state"| RS11["return String.class"]
    SSN -->|other| B11{"key equals<br/>即時適用フラグ"}
    B10 -->|No| B11
    B11 -->|Yes| SAP{"subkey check"}
    SAP -->|"value"| RSAP["return String.class"]
    SAP -->|"state"| RS12["return String.class"]
    SAP -->|other| B12{"key equals<br/>適用月"}
    B11 -->|No| B12
    B12 -->|Yes| SY{"subkey check"}
    SY -->|"value"| RSY["return String.class"]
    SY -->|"enable"| RBY["return Boolean.class"]
    SY -->|"state"| RS13["return String.class"]
    SY -->|other| B13{"key equals<br/>適用月名称"}
    B12 -->|No| B13
    B13 -->|Yes| SYN{"subkey check"}
    SYN -->|"value"| RSYN["return String.class"]
    SYN -->|"enable"| RBYN["return Boolean.class"]
    SYN -->|"state"| RS14["return String.class"]
    SYN -->|other| B14{"key equals<br/>利用開始希望日"}
    B13 -->|No| B14
    B14 -->|Yes| SRL{"subkey check"}
    SRL -->|"value"| RSRL["return String.class"]
    SRL -->|"enable"| RBR["return Boolean.class"]
    SRL -->|"state"| RS15["return String.class"]
    SRL -->|other| B15{"key equals<br/>利用開始希望日_年"}
    B14 -->|No| B15
    B15 -->|Yes| SRYY{"subkey check"}
    SRYY -->|"value"| RSRY["return String.class"]
    SRYY -->|"enable"| RBYR["return Boolean.class"]
    SRYY -->|"state"| RS16["return String.class"]
    SRYY -->|other| B16{"key equals<br/>利用開始希望日_月"}
    B15 -->|No| B16
    B16 -->|Yes| SRYM{"subkey check"}
    SRYM -->|"value"| RSYM["return String.class"]
    SRYM -->|"enable"| RBYM["return Boolean.class"]
    SRYM -->|"state"| RS17["return String.class"]
    SRYM -->|other| B17{"key equals<br/>利用開始希望日_日"}
    B16 -->|No| B17
    B17 -->|Yes| SRYD{"subkey check"}
    SRYD -->|"value"| RSRYD["return String.class"]
    SRYD -->|"enable"| RBYD["return Boolean.class"]
    SRYD -->|"state"| RS18["return String.class"]
    SRYD -->|other| B18{"key equals<br/>表示条件1"}
    B17 -->|No| B18
    B18 -->|Yes| SD1{"subkey check"}
    SD1 -->|"value"| RBD1["return Boolean.class"]
    SD1 -->|"state"| RS19["return String.class"]
    SD1 -->|other| B19{"key equals<br/>表示条件2"}
    B18 -->|No| B19
    B19 -->|Yes| SD2{"subkey check"}
    SD2 -->|"value"| RBD2["return Boolean.class"]
    SD2 -->|"state"| RS20["return String.class"]
    SD2 -->|other| B20{"key equals<br/>表示条件利用開始希望日"}
    B19 -->|No| B20
    B20 -->|Yes| SDR{"subkey check"}
    SDR -->|"value"| RBRD["return Boolean.class"]
    SDR -->|"state"| RS21["return String.class"]
    SDR -->|other| B21{"key equals<br/>適用月名称ラジオボタン1"}
    B20 -->|No| B21
    B21 -->|Yes| SRB1{"subkey check"}
    SRB1 -->|"value"| RS1B["return String.class"]
    SRB1 -->|"enable"| RB1B["return Boolean.class"]
    SRB1 -->|"state"| RS22["return String.class"]
    SRB1 -->|other| B22{"key equals<br/>適用月名称ラジオボタン2"}
    B21 -->|No| B22
    B22 -->|Yes| SRB2{"subkey check"}
    SRB2 -->|"value"| RS2B["return String.class"]
    SRB2 -->|"enable"| RB2B["return Boolean.class"]
    SRB2 -->|"state"| RS23["return String.class"]
    SRB2 -->|other| B23{"key equals<br/>EO光多機能ルーター交換有無"}
    B22 -->|No| B23
    B23 -->|Yes| SRT{"subkey check"}
    SRT -->|"value"| RSRT["return String.class"]
    SRT -->|"enable"| RBRT["return Boolean.class"]
    SRT -->|"state"| RS24["return String.class"]
    SRT -->|other| B24{"key equals<br/>EO光多機能ルーター<br/>ラジオボタン1名称"}
    B23 -->|No| B24
    B24 -->|Yes| SRB1N{"subkey check"}
    SRB1N -->|"value"| RS3B["return String.class"]
    SRB1N -->|"enable"| RB3B["return Boolean.class"]
    SRB1N -->|"state"| RS25["return String.class"]
    SRB1N -->|other| B25{"key equals<br/>EO光多機能ルーター<br/>ラジオボタン2名称"}
    B24 -->|No| B25
    B25 -->|Yes| SRB2N{"subkey check"}
    SRB2N -->|"value"| RS4B["return String.class"]
    SRB2N -->|"enable"| RB4B["return Boolean.class"]
    SRB2N -->|"state"| RS26["return String.class"]
    SRB2N -->|other| B26{"key equals<br/>EO光多機能ルーター<br/>ラジオボタン表示条件"}
    B25 -->|No| B26
    B26 -->|Yes| SDU{"subkey check"}
    SDU -->|"value"| RBDU["return Boolean.class"]
    SDU -->|"state"| RS27["return String.class"]
    SDU -->|other| B27{"key equals<br/>EO光多機能ルーター<br/>ラジオボタン操作条件"}
    B26 -->|No| B27
    B27 -->|Yes| SSU{"subkey check"}
    SSU -->|"value"| RBSU["return Boolean.class"]
    SSU -->|"state"| RS28["return String.class"]
    SSU -->|other| B28{"key equals<br/>所有ルーター"}
    B27 -->|No| B28
    B28 -->|Yes| SUR{"subkey check"}
    SUR -->|"value"| RSUR["return String.class"]
    SUR -->|"state"| RS29["return String.class"]
    SUR -->|other| RET_NULL_2["return null"]
    B28 -->|No| RET_NULL_2
    RET_NULL_1 --> END["END"]
    RB1 --> END
    RB2 --> END
    RS1 --> END
    RS2 --> END
    RB3 --> END
    RS3 --> END
    RSS --> END
    RS4 --> END
    RSK --> END
    RS5 --> END
    RSC --> END
    RBC --> END
    RS6 --> END
    RSN --> END
    RBCN --> END
    RS7 --> END
    RST --> END
    RS8 --> END
    RSTN --> END
    RBTN --> END
    RS9 --> END
    RSSC --> END
    RS10 --> END
    RSSN --> END
    RBSN --> END
    RS11 --> END
    RSAP --> END
    RS12 --> END
    RSY --> END
    RBY --> END
    RS13 --> END
    RSYN --> END
    RBYN --> END
    RS14 --> END
    RSRL --> END
    RBR --> END
    RS15 --> END
    RSRY --> END
    RBYR --> END
    RS16 --> END
    RSYM --> END
    RBYM --> END
    RS17 --> END
    RSRYD --> END
    RBYD --> END
    RS18 --> END
    RBD1 --> END
    RS19 --> END
    RBD2 --> END
    RS20 --> END
    RBRD --> END
    RS21 --> END
    RS1B --> END
    RB1B --> END
    RS22 --> END
    RS2B --> END
    RB2B --> END
    RS23 --> END
    RSRT --> END
    RBRT --> END
    RS24 --> END
    RS3B --> END
    RB3B --> END
    RS25 --> END
    RS4B --> END
    RB4B --> END
    RS26 --> END
    RBDU --> END
    RS27 --> END
    RBSU --> END
    RS28 --> END
    RSUR --> END
    RS29 --> END
    RET_NULL_2 --> END
```

**Flow description:**

The method begins by checking for null parameters, then performs a cascading comparison of the `key` parameter against 28 Japanese field names. Each field branch checks the `subkey` parameter (case-insensitive) against the values `"value"`, `"enable"`, or `"state"`, and returns the corresponding type. Fields that support `"enable"` are Boolean-typed form controls (checkboxes/toggles); fields without `"enable"` are String-typed controls (text fields, radio buttons, select menus). The `"state"` sub-key always returns `String.class` for status metadata. If no branch matches, the method returns `null`.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | **Field name (項目名)** — the Japanese-displayed name of a form field within the FTTH service contract management screen. This key identifies one of 28 supported UI fields such as `登録選択` (Registration Selection), `キャンペーンコード` (Campaign Code), `適用月` (Effective Month), `EO光多機能ルーター交換有無` (Router Exchange Presence), etc. The value must match one of these 28 exact Japanese strings; otherwise, `null` is returned. |
| 2 | `subkey` | `String` | **Sub-key (サブキー)** — identifies which property of the field is being queried: `"value"` for the data value type, `"enable"` for the form enable/disable state type (Boolean toggle availability), or `"state"` for the UI state/status type (always `String`). Comparison is case-insensitive (`equalsIgnoreCase`). |

**No instance fields or external state** are read by this method. It is a pure stateless lookup function.

## 4. CRUD Operations / Called Services

This method performs **no CRUD operations** and calls **no services, CBS components, or database methods**. It is a pure type-resolver that performs only in-memory string comparisons and returns Java `Class<?>` references.

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| — | — | — | — | No database or service interactions. Pure in-memory type lookup. |

## 5. Dependency Trace

This method is called by the parent bean `KKW01034SFBean` (same module, same screen package `KKW01034SF`). The parent bean delegates its `typeModelData(String key, String subkey)` call directly to this method via `return typeModelData(key, subkey);`.

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Screen:KKW01034SF | `KKW01034SFBean.typeModelData(key, subkey)` -> `KKW01034SF03DBean.typeModelData(key, subkey)` | None — pure lookup |

**Note:** The parent bean `KKW01034SFBean` also has overloaded variants:
- `typeModelData(String gamenId, String key, String subkey)` — delegates to `typeModelData(key, subkey)` (screen ID parameter, reserved for future use).
- Additional type model data for list-type fields (`campaign_icrn`, `campaign_icrn_2`) delegates to `KKW01034SF03DBean.listKoumokuIds()` for column metadata, but not to `typeModelData` itself.

The screen module `KKW01034SF` handles FTTH service contract and campaign operations (contract registration, modification, and campaign management for NTT East optical services).

## 6. Per-Branch Detail Blocks

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

Guard clause: if either parameter is null, return null immediately.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key == null || subkey == null)` // key and subkey are null checks |
| 2 | RETURN | `return null;` // key and subkey are null (key,subkeyがnullの場合、nullを返す) |

---

### Block 2 — SET (separator index) (L1764)

Compute the position of the first `/` character in the key for potential nested key parsing.

| # | Type | Code |
|---|------|------|
| 1 | SET | `int separaterPoint = key.indexOf("/");` // Find separator position for nested key parsing |

---

### Block 3 — IF-ELSE chain: 28 field name branches

Each block is an `else if` branch matching one of the 28 Japanese field names. The full cascade is documented below by field groups.

#### Block 3.1 — ELSE-IF `登録選択` (Registration Selection) (L1769)

Field ID: `add_choice`. Boolean-type form toggle field.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return Boolean.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` // subkey is "enable" |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type (subkeyが"state"の場合、ステータスを返す) |
| 6 | RETURN | `return String.class;` |

#### Block 3.2 — ELSE-IF `登録選択文字列` (Registration Selection String) (L1779)

Field ID: `add_choice_value`. String-type field with Boolean enable toggle.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` // subkey is "enable" |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 6 | RETURN | `return String.class;` |

#### Block 3.3 — ELSE-IF `SYSID` (System ID) (L1789)

Field ID: `sysid`. String-type identifier field, no enable toggle.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 4 | RETURN | `return String.class;` |

#### Block 3.4 — ELSE-IF `契約種別` (Contract Type) (L1799)

Field ID: `kei_kind`. String-type contract classification field, no enable toggle.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 4 | RETURN | `return String.class;` |

#### Block 3.5 — ELSE-IF `キャンペーンコード` (Campaign Code) (L1809)

Field ID: `campaign_cd`. String-type campaign reference code with Boolean enable toggle.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` // subkey is "enable" |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 6 | RETURN | `return String.class;` |

#### Block 3.6 — ELSE-IF `キャンペーンコード名称` (Campaign Code Name) (L1821)

Field ID: `campaign_cd_nm`. String-type campaign display name with Boolean enable toggle.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` // subkey is "enable" |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 6 | RETURN | `return String.class;` |

#### Block 3.7 — ELSE-IF `タイプコード` (Type Code) (L1833)

Field ID: `type_cd`. String-type code classification field, no enable toggle.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 4 | RETURN | `return String.class;` |

#### Block 3.8 — ELSE-IF `タイプコード名称` (Type Code Name) (L1843)

Field ID: `type_cd_nm`. String-type type display name with Boolean enable toggle.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` // subkey is "enable" |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 6 | RETURN | `return String.class;` |

#### Block 3.9 — ELSE-IF `サービスコード` (Service Code) (L1855)

Field ID: `svc_cd`. String-type service reference code, no enable toggle.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 4 | RETURN | `return String.class;` |

#### Block 3.10 — ELSE-IF `サービス契約番号` (Service Contract Number) (L1865)

Field ID: `svc_kei_no`. String-type contract number with Boolean enable toggle.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` // subkey is "enable" |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 6 | RETURN | `return String.class;` |

#### Block 3.11 — ELSE-IF `即時適用フラグ` (Immediate Application Flag) (L1877)

Field ID: `aply_jun`. String-type flag field, no enable toggle.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 4 | RETURN | `return String.class;` |

#### Block 3.12 — ELSE-IF `適用月` (Effective Month) (L1887)

Field ID: `tekiyo_ymd`. String-type effective month value with Boolean enable toggle.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` // subkey is "enable" |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 6 | RETURN | `return String.class;` |

#### Block 3.13 — ELSE-IF `適用月名称` (Effective Month Name) (L1899)

Field ID: `tekiyo_ymd_nm`. String-type effective month display name with Boolean enable toggle.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` // subkey is "enable" |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 6 | RETURN | `return String.class;` |

#### Block 3.14 — ELSE-IF `利用開始希望日` (Desired Service Start Date) (L1911)

Field ID: `riyo_sta_ymd`. String-type desired start date with Boolean enable toggle.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` // subkey is "enable" |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 6 | RETURN | `return String.class;` |

#### Block 3.15 — ELSE-IF `利用開始希望日_年` (Desired Start Date_Year) (L1923)

Field ID: `riyo_sta_ymd_year`. String-type year component with Boolean enable toggle.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` // subkey is "enable" |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 6 | RETURN | `return String.class;` |

#### Block 3.16 — ELSE-IF `利用開始希望日_月` (Desired Start Date_Month) (L1935)

Field ID: `riyo_sta_ymd_mon`. String-type month component with Boolean enable toggle.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` // subkey is "enable" |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 6 | RETURN | `return String.class;` |

#### Block 3.17 — ELSE-IF `利用開始希望日_日` (Desired Start Date_Day) (L1947)

Field ID: `riyo_sta_ymd_day`. String-type day component with Boolean enable toggle.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` // subkey is "enable" |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 6 | RETURN | `return String.class;` |

#### Block 3.18 — ELSE-IF `表示条件1` (Display Condition 1) (L1959)

Field ID: `disp_jkn_1`. Boolean-type conditional visibility toggle.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return Boolean.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 4 | RETURN | `return String.class;` |

#### Block 3.19 — ELSE-IF `表示条件2` (Display Condition 2) (L1970)

Field ID: `disp_jkn_2`. Boolean-type conditional visibility toggle.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return Boolean.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 4 | RETURN | `return String.class;` |

#### Block 3.20 — ELSE-IF `表示条件利用開始希望日` (Display Condition Desired Start Date) (L1981)

Field ID: `disp_riyo_sta_ymd`. Boolean-type visibility control tied to start date conditions.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return Boolean.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 4 | RETURN | `return String.class;` |

#### Block 3.21 — ELSE-IF `適用月名称ラジオボタン1` (Effective Month Name Radio Button 1) (L1992)

Field ID: `tekiyo_ymd_nm_1`. String-type radio button label with Boolean enable toggle.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` // subkey is "enable" |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 6 | RETURN | `return String.class;` |

#### Block 3.22 — ELSE-IF `適用月名称ラジオボタン2` (Effective Month Name Radio Button 2) (L2004)

Field ID: `tekiyo_ymd_nm_2`. String-type radio button label with Boolean enable toggle.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` // subkey is "enable" |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 6 | RETURN | `return String.class;` |

#### Block 3.23 — ELSE-IF `EO光多機能ルーター交換有無` (EO Optical Multi-Function Router Exchange Presence) (L2016)

Field ID: `takinou_rtr_chg_umu`. String-type flag indicating whether a router exchange is required with Boolean enable toggle.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` // subkey is "enable" |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 6 | RETURN | `return String.class;` |

#### Block 3.24 — ELSE-IF `EO光多機能ルーター交換有無ラジオボタン1名称` (Router Exchange Radio Button 1 Name) (L2028)

Field ID: `takinou_rtr_chg_nm_1`. String-type radio button label with Boolean enable toggle.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` // subkey is "enable" |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 6 | RETURN | `return String.class;` |

#### Block 3.25 — ELSE-IF `EO光多機能ルーター交換有無ラジオボタン2名称` (Router Exchange Radio Button 2 Name) (L2040)

Field ID: `takinou_rtr_chg_nm_2`. String-type radio button label with Boolean enable toggle.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` // subkey is "enable" |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 6 | RETURN | `return String.class;` |

#### Block 3.26 — ELSE-IF `EO光多機能ルーター交換有無ラジオボタン表示条件` (Router Exchange Radio Button Display Condition) (L2052)

Field ID: `disp_jkn_umu`. Boolean-type visibility condition for the router exchange radio button section.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return Boolean.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 4 | RETURN | `return String.class;` |

#### Block 3.27 — ELSE-IF `EO光多機能ルーター交換有無ラジオボタン操作条件` (Router Exchange Radio Button Operation Condition) (L2063)

Field ID: `sosa_jkn_umu`. Boolean-type operation condition (determines if radio buttons are actionable).

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return Boolean.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 4 | RETURN | `return String.class;` |

#### Block 3.28 — ELSE-IF `所有ルーター` (Owned Router) (L2074)

Field ID: `use_rtr`. String-type field indicating which router the customer owns.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // subkey is "value" |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey is "state" — returns status text type |
| 4 | RETURN | `return String.class;` |

---

### Block 4 — ELSE (no match fallback) (L2086)

Default case: no field name matched. Return null.

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

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `登録選択` | Field | Registration Selection — Boolean toggle for whether an item is selected for registration |
| `add_choice` | Field ID | Internal identifier for the registration selection toggle field |
| `登録選択文字列` | Field | Registration Selection String — String value corresponding to the registration selection toggle |
| `add_choice_value` | Field ID | Internal identifier for the registration selection string field |
| `SYSID` | Field | System ID — unique system-assigned identifier for a record |
| `sysid` | Field ID | Internal identifier for the system ID field |
| `契約種別` | Field | Contract Type — classification of the type of service contract (e.g., new, renewal, modification) |
| `kei_kind` | Field ID | Internal identifier for the contract type field |
| `キャンペーンコード` | Field | Campaign Code — reference code for a promotional or bundled service campaign |
| `campaign_cd` | Field ID | Internal identifier for the campaign code field |
| `キャンペーンコード名称` | Field | Campaign Code Name — human-readable display name for a campaign code |
| `campaign_cd_nm` | Field ID | Internal identifier for the campaign code name field |
| `タイプコード` | Field | Type Code — classification code for a service or feature type |
| `type_cd` | Field ID | Internal identifier for the type code field |
| `タイプコード名称` | Field | Type Code Name — human-readable display name for a type code |
| `type_cd_nm` | Field ID | Internal identifier for the type code name field |
| `サービスコード` | Field | Service Code — reference code identifying a specific service offering |
| `svc_cd` | Field ID | Internal identifier for the service code field |
| `サービス契約番号` | Field | Service Contract Number — unique number assigned to a service contract |
| `svc_kei_no` | Field ID | Internal identifier for the service contract number field |
| `即時適用フラグ` | Field | Immediate Application Flag — flag indicating whether changes take effect immediately |
| `aply_jun` | Field ID | Internal identifier for the immediate application flag field |
| `適用月` | Field | Effective Month — the month from which a service change or price change takes effect |
| `tekiyo_ymd` | Field ID | Internal identifier for the effective month field |
| `適用月名称` | Field | Effective Month Name — human-readable name of the effective month |
| `tekiyo_ymd_nm` | Field ID | Internal identifier for the effective month name field |
| `利用開始希望日` | Field | Desired Service Start Date — customer-requested date for service activation |
| `riyo_sta_ymd` | Field ID | Internal identifier for the desired service start date field |
| `利用開始希望日_年` | Field | Desired Service Start Date — Year | Component of the desired start date, year portion |
| `riyo_sta_ymd_year` | Field ID | Internal identifier for the year component field |
| `利用開始希望日_月` | Field | Desired Service Start Date — Month | Component of the desired start date, month portion |
| `riyo_sta_ymd_mon` | Field ID | Internal identifier for the month component field |
| `利用開始希望日_日` | Field | Desired Service Start Date — Day | Component of the desired start date, day portion |
| `riyo_sta_ymd_day` | Field ID | Internal identifier for the day component field |
| `表示条件1` | Field | Display Condition 1 — Boolean visibility toggle for a conditional UI section |
| `disp_jkn_1` | Field ID | Internal identifier for display condition 1 |
| `表示条件2` | Field | Display Condition 2 — Boolean visibility toggle for a second conditional UI section |
| `disp_jkn_2` | Field ID | Internal identifier for display condition 2 |
| `表示条件利用開始希望日` | Field | Display Condition Desired Start Date — Boolean visibility toggle for start date-related fields |
| `disp_riyo_sta_ymd` | Field ID | Internal identifier for the display condition start date field |
| `適用月名称ラジオボタン1` | Field | Effective Month Name Radio Button 1 — label for the first radio button option |
| `tekiyo_ymd_nm_1` | Field ID | Internal identifier for radio button 1 label |
| `適用月名称ラジオボタン2` | Field | Effective Month Name Radio Button 2 — label for the second radio button option |
| `tekiyo_ymd_nm_2` | Field ID | Internal identifier for radio button 2 label |
| `EO光多機能ルーター交換有無` | Field | EO Optical Multi-Function Router Exchange Presence — indicates whether an NTT East optical multi-function router exchange is required |
| `takinou_rtr_chg_umu` | Field ID | Internal identifier for the router exchange presence field |
| `EO光` | Business term | NTT East Optical — "EO" is the brand identifier for NTT East's optical fiber services |
| `多機能ルーター` | Business term | Multi-function Router — a combined modem/router device provided by NTT East for optical broadband |
| `交換有無` | Business term | Exchange Presence — whether a device exchange/swap is required |
| `ラジオボタン1名称` | Field | Radio Button 1 Name — display label for the first radio button option |
| `ラジオボタン2名称` | Field | Radio Button 2 Name — display label for the second radio button option |
| `ラジオボタン表示条件` | Field | Radio Button Display Condition — Boolean flag controlling whether the radio button group is visible |
| `disp_jkn_umu` | Field ID | Internal identifier for the radio button display condition |
| `ラジオボタン操作条件` | Field | Radio Button Operation Condition — Boolean flag controlling whether the radio button group is actionable (enabled/disabled) |
| `sosa_jkn_umu` | Field ID | Internal identifier for the radio button operation condition |
| `所有ルーター` | Field | Owned Router — indicates which router model the customer currently possesses |
| `use_rtr` | Field ID | Internal identifier for the owned router field |
| `FTTH` | Business term | Fiber To The Home — fiber-optic broadband service delivered directly to the customer premises |
| `KKW01034SF` | Module | Service Contract and Campaign Management Screen — NTT East web screen for managing FTTH service contracts and promotional campaigns |
| `DD` | Acronym | Detailed Design — enterprise documentation standard for method-level specifications |
| `Bean` | Pattern | JavaBean — reusable Java component following conventions for property getters/setters, used as a data holder in web UI frameworks |