# Business Logic — KKW01033SF02DBean.typeModelData() [489 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKW01033SF.KKW01033SF02DBean` |
| Layer | Utility (Data Type Bean / View Layer) |
| Module | `KKW01033SF` (Package: `eo.web.webview.KKW01033SF`) |

## 1. Role

### KKW01033SF02DBean.typeModelData()

This method is a **data type router** that implements the `X33VDataTypeBeanInterface.typeModelData()` contract from the X33 Web Client framework. It resolves the Java runtime type (`Class<?>`) for any field defined by the customer (keiyaku) entity within the KKW01033SF screen context. Each of the 36 supported item names (key) maps to a triplet of sub-properties — `value` (the data value, `String.class`), `enable` (whether the field is editable, `Boolean.class`), and `state` (an auxiliary status string, `String.class`). The method follows a **routing/dispatch pattern** with no external service calls or database operations, acting as a static metadata lookup that enables the X33 framework's data-binding layer to configure form fields at runtime (e.g., setting field types, enabling/disabling UI controls). It serves as a shared utility called by the framework itself whenever it inspects the bean's field definitions — for instance, during screen initialization or AJAX partial-page updates.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["typeModelData key, subkey"])

    START --> CHECK_NULL["key == null OR subkey == null"]

    CHECK_NULL --> |"true"| RET_NULL(["return null"])

    CHECK_NULL --> |"false"| FIND_SEP["sepIdx = key.indexOf('/')"]

    FIND_SEP --> ROUTER["Branch on key (item name)"]

    ROUTER --> C1["key = Service contract status"]
    ROUTER --> C2["key = Service contract status name"]
    ROUTER --> C3["key = Division"]
    ROUTER --> C4["key = Division name"]
    ROUTER --> C5["key = Mansion ID"]
    ROUTER --> C6["key = Customer name"]
    ROUTER --> C7["key = Service contract number"]
    ROUTER --> C8["key = Price group code"]
    ROUTER --> C9["key = Family pack exist"]
    ROUTER --> C10["key = Promotion status"]
    ROUTER --> C11["key = Router exist"]
    ROUTER --> C12["key = P ID"]
    ROUTER --> C13["key = Category ID"]
    ROUTER --> C14["key = Ticket count"]
    ROUTER --> C15["key = Skill type name"]
    ROUTER --> C16["key = No match (fallback)"]

    C1 --> SUB["subkey match (equalsIgnoreCase)"]
    C2 --> SUB
    C3 --> SUB
    C4 --> SUB
    C5 --> SUB
    C6 --> SUB
    C7 --> SUB
    C8 --> SUB
    C9 --> SUB
    C10 --> SUB
    C11 --> SUB
    C12 --> SUB
    C13 --> SUB
    C14 --> SUB
    C15 --> SUB
    C16 --> RET_NULL

    SUB --> SV["subkey = value"]
    SUB --> SE["subkey = enable"]
    SUB --> SS["subkey = state"]

    SV --> RET_STR["return String.class"]
    SE --> RET_BOOL["return Boolean.class"]
    SS --> RET_STR

    RET_STR --> END_NODE(["return / Next"])
    RET_BOOL --> END_NODE
    RET_NULL --> END_NODE
```

**Processing flow:**

1. **Null guard (L2456–L2458):** If either `key` or `subkey` is null, the method returns `null` immediately.
2. **Separator scan (L2460):** Computes the index of "/" in `key` (the result is stored in a local variable `separaterPoint` but **is never used** in subsequent logic — this is dead code).
3. **Key dispatch (L2464–L2937):** A chain of 36 `if` / `else if` branches compares `key` against hardcoded Japanese item name strings. Each matching key branch then dispatches on `subkey` using `equalsIgnoreCase`:
   - `equalsIgnoreCase("value")` --> `return String.class`
   - `equalsIgnoreCase("enable")` --> `return Boolean.class`
   - `equalsIgnoreCase("state")` --> `return String.class`
4. **Fallback (L2939–L2941):** If no key branch matches, `null` is returned.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | The **item name** (display label in Japanese) identifying which entity field the caller is querying. Examples: `"サービス契約ステータス"` (Service Contract Status), `"お客様名"` (Customer Name), `"契約者電話番号"` (Subscriber Phone Number). Determines which of the 36 branches is taken. |
| 2 | `subkey` | `String` | The **sub-property** within the matched item: `"value"` (the field's data value type), `"enable"` (whether the field is currently editable), or `"state"` (an auxiliary status descriptor). Case-insensitive comparison is used. |

**Instance fields read:** None. This method is fully stateless — it reads no instance fields and performs no side effects.

## 4. CRUD Operations / Called Services

This method performs **no CRUD operations**. It is a pure metadata lookup with no calls to service components (SC), command-based services (CBS), database access, or any external methods. It simply evaluates conditional logic and returns `Class<?>` type references.

## 5. Dependency Trace

This method is a framework-level interface method (`X33VDataTypeBeanInterface.typeModelData()`). It is invoked by the X33 View framework during screen rendering and data-binding initialization, not called directly by application logic. The following screens reference the parent module:

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Screen:KKSV0229 | Framework `X33VDataTypeBeanInterface.typeModelData` -> `KKW01033SFBean` -> `KKW01033SF02DBean.typeModelData` | *(No external calls)* |
| 2 | Screen:KKSV0240 | Framework `X33VDataTypeBeanInterface.typeModelData` -> `KKW01033SFBean` -> `KKW01033SF02DBean.typeModelData` | *(No external calls)* |
| 3 | Screen:KKSV0781 | Framework `X33VDataTypeBeanInterface.typeModelData` -> `KKW01033SFBean` -> `KKW01033SF02DBean.typeModelData` | *(No external calls)* |

Note: `KKW01033SFBean` (line 1358) delegates `listKoumokuIds()` which references `KKW01033SF02DBean`, establishing the bean as the data-type source for the "Customer" item group within the KKW01033SF module.

## 6. Per-Branch Detail Blocks

**Block 1** — [IF] `key == null || subkey == null` (L2456)

> Null guard: returns null if either parameter is null.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` // key or subkey is null |

**Block 2** — [SET] `separaterPoint = key.indexOf("/")` (L2460)

> Computes the position of "/" in key. This value is never used after this point (dead code).

| # | Type | Code |
|---|------|------|
| 1 | SET | `int separaterPoint = key.indexOf("/");` // dead code - result unused |

**Block 3** — [IF-ELSE IF CHAIN] key equals `"サービス契約ステータス"` (L2464)

> Business meaning: Service Contract Status — tracks the lifecycle state of a service contract (e.g., active, terminated, pending). Item ID: `svc_kei_stat`.

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

**Block 4** — [ELSE IF] key equals `"サービス契約ステータス名称"` (L2477)

> Business meaning: Service Contract Status Name — human-readable label for the service contract status. Item ID: `svc_kei_stat_nm`. Same value/enable/state pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 5** — [ELSE IF] key equals `"移動区分"` (L2490)

> Business meaning: Division — classification for service moves/transfers. Item ID: `ido_div`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 6** — [ELSE IF] key equals `"移動区分名称"` (L2503)

> Business meaning: Division Name — display name for the division classification. Item ID: `ido_div_nm`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 7** — [ELSE IF] key equals `"マンションID"` (L2516)

> Business meaning: Mansion ID — identifier for a condominium/multi-unit dwelling. Item ID: `mansion_id`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 8** — [ELSE IF] key equals `"マンション名"` (L2529)

> Business meaning: Mansion Name — display name of the condominium/multi-unit dwelling. Item ID: `mansion_nm`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 9** — [ELSE IF] key equals `"お客様名"` (L2542)

> Business meaning: Customer Name — the name of the subscriber/customer. Item ID: `cust_nm`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 10** — [ELSE IF] key equals `"契約者電話番号"` (L2555)

> Business meaning: Subscriber Phone Number — the contact phone number of the service contract holder. Item ID: `keisha_telno`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 11** — [ELSE IF] key equals `"契約者都道府県名"` (L2568)

> Business meaning: Subscriber Prefecture Name — the prefecture (prefectural-level administrative division) of the contract holder. Item ID: `keisha_state_nm`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 12** — [ELSE IF] key equals `"契約者市区町村名"` (L2581)

> Business meaning: Subscriber City/Town/Village Name — the municipal-level address of the contract holder. Item ID: `keisha_city_nm`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 13** — [ELSE IF] key equals `"契約者大字通称名"` (L2594)

> Business meaning: Subscriber Large District Name — the large district (ada) portion of the Japanese address. Item ID: `keisha_oaztsu_nm`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 14** — [ELSE IF] key equals `"契約者字丁目名"` (L2607)

> Business meaning: Subscriber Block Name — the block/chome portion of the Japanese address. Item ID: `keisha_azcho_nm`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 15** — [ELSE IF] key equals `"契約者番地号"` (L2620)

> Business meaning: Subscriber Lot Number — the lot/banchi portion of the Japanese address. Item ID: `keisha_bnchigo`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 16** — [ELSE IF] key equals `"契約者住所補記・建物名"` (L2633)

> Business meaning: Address Note — Building Name — supplementary address info identifying the specific building. Item ID: `keisha_adrttm`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 17** — [ELSE IF] key equals `"契約者住所補記・部屋番号"` (L2646)

> Business meaning: Address Note — Room Number — the specific room/suite within a building. Item ID: `keisha_adrrm`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 18** — [ELSE IF] key equals `"サービス契約番号"` (L2659)

> Business meaning: Service Contract Number — the unique identifier for a service contract. Item ID: `svc_kei_no`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 19** — [ELSE IF] key equals `"請求契約番号"` (L2672)

> Business meaning: Billing Contract Number — the contract number used for billing/invoicing purposes. Item ID: `seiky_kei_no`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 20** — [ELSE IF] key equals `"ＳＳＩＤ"` (L2685)

> Business meaning: SSID — the Wi-Fi network identifier (full-width characters in source). Item ID: `sysid`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 21** — [ELSE IF] key equals `"ＥＯＩＤ"` (L2698)

> Business meaning: EO ID — the K-Opticom internal device/account identifier (full-width characters in source). Item ID: `eoid`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 22** — [ELSE IF] key equals `"料金グループコード"` (L2711)

> Business meaning: Price Group Code — the pricing tier classification for a service. Item ID: `prc_grp_cd`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 23** — [ELSE IF] key equals `"料金グループ名"` (L2724)

> Business meaning: Price Group Name — the human-readable name of a pricing tier. Item ID: `prc_grp_nm`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 24** — [ELSE IF] key equals `"料金コースコード"` (L2737)

> Business meaning: Price Cost Code — the specific pricing plan/course identifier. Item ID: `pcrs_cd`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 25** — [ELSE IF] key equals `"料金コース名"` (L2750)

> Business meaning: Price Cost Name — the human-readable name of a pricing plan/course. Item ID: `pcrs_nm`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 26** — [ELSE IF] key equals `"機器提供サービス契約番号"` (L2763)

> Business meaning: Device Provider Service Contract Number — the contract number for leased/provided equipment. Item ID: `kktk_svc_kei_no`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 27** — [ELSE IF] key equals `"ファミリーパック有無"` (L2776)

> Business meaning: Family Pack Exist — whether a family discount pack is attached to the service. Item ID: `family_pack_um`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 28** — [ELSE IF] key equals `"促進状態"` (L2789)

> Business meaning: Promotion Status — whether a promotional rate or incentive is currently applied. Item ID: `tokuSokuStatus`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 29** — [ELSE IF] key equals `"ルータ有無"` (L2802)

> Business meaning: Router Exist — whether a router is provisioned with the service. Item ID: `router_sbt`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 30** — [ELSE IF] key equals `"ＰＩＤ"` (L2815)

> Business meaning: P ID — the subscriber/user identifier (full-width characters in source). Item ID: `p_id`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 31** — [ELSE IF] key equals `"カテゴリーＩＤ"` (L2828)

> Business meaning: Category ID — the classification category of the service (full-width characters in source). Item ID: `cat_id`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 32** — [ELSE IF] key equals `"予約状況"` (L2841)

> Business meaning: Reservation Status — the current booking/reservation state. Item ID: `rsv_jokyo`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 33** — [ELSE IF] key equals `"ランク名称"` (L2854)

> Business meaning: Rank Name — version v26.00.00 addition. The ranking display name for service tiers. Item ID: `rank_nm`. Same triplet pattern. Added via `v26.00.00` change marker.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 34** — [ELSE IF] key equals `"チケット残数"` (L2867)

> Business meaning: Ticket Count — version ANK-3034-00-00 addition. The remaining number of coupons/tickets. Item ID: `tic_num`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 35** — [ELSE IF] key equals `"卸先事業者名"` (L2880)

> Business meaning: Deregistered Contractor Name — version ANK-3366-00-00 addition. The name of a deregistered/deleted contractor. Item ID: `orsjgs_nm`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 36** — [ELSE IF] key equals `"定額サービス契約有無"` (L2893)

> Business meaning: Flat-Rate Service Contract Exist — version ANK-3840-00-00 addition. Whether a flat-rate (te-gakuri) service contract is active. Item ID: `tegak_svc_um`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 37** — [ELSE IF] key equals `"スキルタイプ名"` (L2906)

> Business meaning: Skill Type Name — version ANK-4075-00-00 addition (mansion deregistration/WI-FI skill). The type name of a WI-FI skill. Item ID: `scm_type_nm`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 38** — [ELSE IF] key equals `"スキル事業者名"` (L2919)

> Business meaning: Skill Contractor Name — version ANK-4075-00-00 addition. The contractor name for a WI-FI skill service. Item ID: `scm_jgs_nm`. Same triplet pattern.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | RETURN | `return String.class;` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | RETURN | `return Boolean.class;` |
| 5 | ELSE IF | `subkey.equalsIgnoreCase("state")` |
| 6 | RETURN | `return String.class;` |

**Block 39** — [RETURN] Fallback (L2939)

> Business meaning: No matching item name was found for the provided `key`. The method returns `null` to indicate the field is not recognized.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` // プロパティが存在しない場合は、nullを返す (If no matching property exists, return null) |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `svc_kei_stat` | Field ID | Service Contract Status — tracks the lifecycle state of a service contract (e.g., active, terminated, pending) |
| `svc_kei_stat_nm` | Field ID | Service Contract Status Name — human-readable label for the service contract status |
| `ido_div` | Field ID | Division — classification code for service moves/transfers |
| `ido_div_nm` | Field ID | Division Name — display name for the division classification |
| `mansion_id` | Field ID | Mansion ID — identifier for a condominium or multi-unit dwelling |
| `mansion_nm` | Field ID | Mansion Name — display name of the condominium or multi-unit dwelling |
| `cust_nm` | Field ID | Customer Name — the name of the subscriber/customer |
| `keisha_telno` | Field ID | Subscriber Phone Number — the contact phone number of the service contract holder |
| `keisha_state_nm` | Field ID | Subscriber Prefecture Name — the prefecture-level administrative division of the contract holder's address |
| `keisha_city_nm` | Field ID | Subscriber City/Town/Village Name — the municipal-level address of the contract holder |
| `keisha_oaztsu_nm` | Field ID | Subscriber Large District Name — the ada (大字) portion of the Japanese address |
| `keisha_azcho_nm` | Field ID | Subscriber Block Name — the block/chome portion of the Japanese address |
| `keisha_bnchigo` | Field ID | Subscriber Lot Number — the banchi (番地) portion of the Japanese address |
| `keisha_adrttm` | Field ID | Address Note — Building Name — supplementary address info identifying the specific building |
| `keisha_adrrm` | Field ID | Address Note — Room Number — the specific room or suite within a building |
| `svc_kei_no` | Field ID | Service Contract Number — unique identifier for a service contract |
| `seiky_kei_no` | Field ID | Billing Contract Number — the contract number used for billing/invoicing |
| `sysid` | Field ID | SSID — the Wi-Fi network identifier (full-width characters: ＳＳＩＤ) |
| `eoid` | Field ID | EO ID — K-Opticom internal device/account identifier (full-width characters: ＥＯＩＤ) |
| `prc_grp_cd` | Field ID | Price Group Code — the pricing tier classification for a service |
| `prc_grp_nm` | Field ID | Price Group Name — human-readable name of a pricing tier |
| `pcrs_cd` | Field ID | Price Cost Code — the specific pricing plan/course identifier |
| `pcrs_nm` | Field ID | Price Cost Name — human-readable name of a pricing plan/course |
| `kktk_svc_kei_no` | Field ID | Device Provider Service Contract Number — contract number for leased or provided equipment |
| `family_pack_um` | Field ID | Family Pack Exist — whether a family discount pack is attached to the service |
| `tokuSokuStatus` | Field ID | Promotion Status — whether a promotional rate or incentive is currently applied |
| `router_sbt` | Field ID | Router Exist — whether a router is provisioned with the service |
| `p_id` | Field ID | P ID — subscriber/user identifier (full-width characters: ＰＩＤ) |
| `cat_id` | Field ID | Category ID — classification category of the service (full-width characters: カテゴリーＩＤ) |
| `rsv_jokyo` | Field ID | Reservation Status — the current booking/reservation state |
| `rank_nm` | Field ID | Rank Name — ranking display name for service tiers (added in v26.00.00) |
| `tic_num` | Field ID | Ticket Count — remaining number of coupons/tickets (added in ANK-3034-00-00) |
| `orsjgs_nm` | Field ID | Deregistered Contractor Name — name of a deregistered contractor (added in ANK-3366-00-00) |
| `tegak_svc_um` | Field ID | Flat-Rate Service Contract Exist — whether a flat-rate pricing service contract is active (added in ANK-3840-00-00) |
| `scm_type_nm` | Field ID | Skill Type Name — WI-FI skill type name for mansion deregistration (added in ANK-4075-00-00) |
| `scm_jgs_nm` | Field ID | Skill Contractor Name — WI-FI skill contractor name for mansion deregistration (added in ANK-4075-00-00) |
| X33VDataTypeBeanInterface | Interface | X33 Framework interface for beans that provide data type information for dynamic form fields |
| X33VListedBeanInterface | Interface | X33 Framework interface for beans that manage list-type data fields |
| KKW01033SF | Module | K-Opticom Web service — a screen module for managing customer service contracts (ftth/service registration) |
| ftth | Business term | Fiber To The Home — fiber-optic broadband internet service offered by K-Opticom |
| ANK | Project code | Internal project/change ticket prefix (e.g., ANK-3034, ANK-3366, ANK-3840, ANK-4075) |
