# Business Logic — KKW00846SF02DBean.typeModelData() [161 LOC]

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

## 1. Role

### KKW00846SF02DBean.typeModelData()

This method is a **data type introspection router** that maps business field names and their sub-properties to Java `Class` types. It is the core of the `X33VDataTypeBeanInterface` contract for the **Security Operation List** (`security_op_list`) item, enabling the X33 web framework to dynamically determine the type of each model property at render time. The method implements a **conditional dispatch pattern**: it receives a `key` representing the Japanese field name of a security operation list item, and a `subkey` representing a meta-property (`value`, `enable`, or `state`), then returns the corresponding `Class<?>` (e.g., `Boolean.class`, `String.class`). It handles **12 distinct business fields** — ranging from choice categories (`選択区分`), service start dates (`利用開始年月日`, `利用開始日（年/月/日`)), billing flags (`課金有無`), and option service information (`オプションサービスコード`, `表示用オプションサービスコード名称`, `オプションサービス契約ステータス`), to reservation periods (`予約可能期間`), first billing calculation dates (`初回料金計算日`), and registration/cancellation codes (`登録解約コード`). For each field, the `value` subkey always maps to `String.class` (representing the actual data value), while `enable` maps to `Boolean.class` (representing UI enabled/disabled state), and `state` maps to `String.class` (representing UI validation state — e.g., "valid", "error"). This method is **purely a type resolver** with no side effects, no CRUD operations, and no service calls — it is called by the view layer to build dynamic forms and validate input types.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["typeModelData key, subkey"])
    NPE_CHECK["Check: key == null or subkey == null"]
    NPE_RETURN(["Return null"])
    CALC_SEP["Calculate: separaterPoint = key.indexOf('/')"]
    CHOICE_DIV_BRANCH["Branch: key = '選択区分'"]
    CHOICE_VALUE["subkey = 'value'"]
    CHOICE_ENABLE["subkey = 'enable'"]
    CHOICE_STATE["subkey = 'state'"]
    USE_STAYMD_BRANCH["Branch: key = '利用開始年月日'"]
    USE_STAYMD_VALUE["subkey = 'value'"]
    USE_STAYMD_STATE["subkey = 'state'"]
    USE_STAYMD_YEAR_BRANCH["Branch: key = '利用開始日（年）'"]
    USE_STAYMD_YEAR_VALUE["subkey = 'value'"]
    USE_STAYMD_YEAR_ENABLE["subkey = 'enable'"]
    USE_STAYMD_YEAR_STATE["subkey = 'state'"]
    USE_STAYMD_MON_BRANCH["Branch: key = '利用開始日（月）'"]
    USE_STAYMD_MON_VALUE["subkey = 'value'"]
    USE_STAYMD_MON_ENABLE["subkey = 'enable'"]
    USE_STAYMD_MON_STATE["subkey = 'state'"]
    USE_STAYMD_DAY_BRANCH["Branch: key = '利用開始日（日）'"]
    USE_STAYMD_DAY_VALUE["subkey = 'value'"]
    USE_STAYMD_DAY_ENABLE["subkey = 'enable'"]
    USE_STAYMD_DAY_STATE["subkey = 'state'"]
    KAKIN_UM_BRANCH["Branch: key = '課金有無'"]
    KAKIN_VALUE["subkey = 'value'"]
    KAKIN_ENABLE["subkey = 'enable'"]
    KAKIN_STATE["subkey = 'state'"]
    OP_SVC_CD_BRANCH["Branch: key = 'オプションサービスコード'"]
    OP_SVC_VALUE["subkey = 'value'"]
    OP_SVC_STATE["subkey = 'state'"]
    DISP_OP_SVC_CD_NM_BRANCH["Branch: key = '表示用オプションサービスコード名称'"]
    DISP_OP_VALUE["subkey = 'value'"]
    DISP_OP_ENABLE["subkey = 'enable'"]
    DISP_OP_STATE["subkey = 'state'"]
    OP_SVC_KEI_STAT_BRANCH["Branch: key = 'オプションサービス契約ステータス'"]
    OP_SVC_KEI_VALUE["subkey = 'value'"]
    OP_SVC_KEI_STATE["subkey = 'state'"]
    SVC_STA_YMD_BRANCH["Branch: key = 'サービス開始年月日'"]
    SVC_STA_YMD_VALUE["subkey = 'value'"]
    SVC_STA_YMD_STATE["subkey = 'state'"]
    RSV_PSB_PRD_BRANCH["Branch: key = '予約可能期間'"]
    RSV_PSB_VALUE["subkey = 'value'"]
    RSV_PSB_STATE["subkey = 'state'"]
    FIRST_PRC_CALC_BRANCH["Branch: key = '初回料金計算日'"]
    FIRST_PRC_VALUE["subkey = 'value'"]
    FIRST_PRC_STATE["subkey = 'state'"]
    ADD_DSL_CD_BRANCH["Branch: key = '登録解約コード'"]
    ADD_DSL_VALUE["subkey = 'value'"]
    ADD_DSL_STATE["subkey = 'state'"]
    NO_MATCH_RETURN(["Return null - no matching property"])

    START --> NPE_CHECK
    NPE_CHECK -- "true" --> NPE_RETURN
    NPE_CHECK -- "false" --> CALC_SEP

    CALC_SEP --> CHOICE_DIV_BRANCH
    CHOICE_DIV_BRANCH --> CHOICE_VALUE
    CHOICE_VALUE --> CHOICE_ENABLE
    CHOICE_ENABLE --> CHOICE_STATE
    CHOICE_STATE --> USE_STAYMD_BRANCH

    USE_STAYMD_BRANCH --> USE_STAYMD_VALUE
    USE_STAYMD_VALUE --> USE_STAYMD_STATE
    USE_STAYMD_STATE --> USE_STAYMD_YEAR_BRANCH

    USE_STAYMD_YEAR_BRANCH --> USE_STAYMD_YEAR_VALUE
    USE_STAYMD_YEAR_VALUE --> USE_STAYMD_YEAR_ENABLE
    USE_STAYMD_YEAR_ENABLE --> USE_STAYMD_YEAR_STATE
    USE_STAYMD_YEAR_STATE --> USE_STAYMD_MON_BRANCH

    USE_STAYMD_MON_BRANCH --> USE_STAYMD_MON_VALUE
    USE_STAYMD_MON_VALUE --> USE_STAYMD_MON_ENABLE
    USE_STAYMD_MON_ENABLE --> USE_STAYMD_MON_STATE
    USE_STAYMD_MON_STATE --> USE_STAYMD_DAY_BRANCH

    USE_STAYMD_DAY_BRANCH --> USE_STAYMD_DAY_VALUE
    USE_STAYMD_DAY_VALUE --> USE_STAYMD_DAY_ENABLE
    USE_STAYMD_DAY_ENABLE --> USE_STAYMD_DAY_STATE
    USE_STAYMD_DAY_STATE --> KAKIN_UM_BRANCH

    KAKIN_UM_BRANCH --> KAKIN_VALUE
    KAKIN_VALUE --> KAKIN_ENABLE
    KAKIN_ENABLE --> KAKIN_STATE
    KAKIN_STATE --> OP_SVC_CD_BRANCH

    OP_SVC_CD_BRANCH --> OP_SVC_VALUE
    OP_SVC_VALUE --> OP_SVC_STATE
    OP_SVC_STATE --> DISP_OP_SVC_CD_NM_BRANCH

    DISP_OP_SVC_CD_NM_BRANCH --> DISP_OP_VALUE
    DISP_OP_VALUE --> DISP_OP_ENABLE
    DISP_OP_ENABLE --> DISP_OP_STATE
    DISP_OP_STATE --> OP_SVC_KEI_STAT_BRANCH

    OP_SVC_KEI_STAT_BRANCH --> OP_SVC_KEI_VALUE
    OP_SVC_KEI_VALUE --> OP_SVC_KEI_STATE
    OP_SVC_KEI_STATE --> SVC_STA_YMD_BRANCH

    SVC_STA_YMD_BRANCH --> SVC_STA_YMD_VALUE
    SVC_STA_YMD_VALUE --> SVC_STA_YMD_STATE
    SVC_STA_YMD_STATE --> RSV_PSB_PRD_BRANCH

    RSV_PSB_PRD_BRANCH --> RSV_PSB_VALUE
    RSV_PSB_VALUE --> RSV_PSB_STATE
    RSV_PSB_STATE --> FIRST_PRC_CALC_BRANCH

    FIRST_PRC_CALC_BRANCH --> FIRST_PRC_VALUE
    FIRST_PRC_VALUE --> FIRST_PRC_STATE
    FIRST_PRC_STATE --> ADD_DSL_CD_BRANCH

    ADD_DSL_CD_BRANCH --> ADD_DSL_VALUE
    ADD_DSL_VALUE --> ADD_DSL_STATE
    ADD_DSL_STATE --> NO_MATCH_RETURN
```

**Processing Logic Summary:**

| Step | Node | Description |
|------|------|-------------|
| 1 | NPE_CHECK | **Null guard**: If `key` or `subkey` is null, return null immediately. (L860) |
| 2 | CALC_SEP | Calculate `separaterPoint = key.indexOf("/")`. Note: This value is computed but never used in this method — it appears to be a vestige from a parameterized routing pattern. (L863) |
| 3 | CHOICE_DIV_BRANCH | If `key` = `選択区分` (Choice Category), check subkey: `value` -> `Boolean.class`, `enable` -> `Boolean.class`, `state` -> `String.class`. (L867–876) |
| 4 | USE_STAYMD_BRANCH | If `key` = `利用開始年月日` (Service Start Year-Month-Day), check subkey: `value` -> `String.class`, `state` -> `String.class`. No `enable` subkey for this compound date field. (L879–887) |
| 5 | USE_STAYMD_YEAR_BRANCH | If `key` = `利用開始日（年）` (Service Start Year), check subkey: `value` -> `String.class`, `enable` -> `Boolean.class`, `state` -> `String.class`. (L890–901) |
| 6 | USE_STAYMD_MON_BRANCH | If `key` = `利用開始日（月）` (Service Start Month), check subkey: `value` -> `String.class`, `enable` -> `Boolean.class`, `state` -> `String.class`. (L904–915) |
| 7 | USE_STAYMD_DAY_BRANCH | If `key` = `利用開始日（日）` (Service Start Day), check subkey: `value` -> `String.class`, `enable` -> `Boolean.class`, `state` -> `String.class`. (L918–929) |
| 8 | KAKIN_UM_BRANCH | If `key` = `課金有無` (Billing Existence), check subkey: `value` -> `String.class`, `enable` -> `Boolean.class`, `state` -> `String.class`. (L932–943) |
| 9 | OP_SVC_CD_BRANCH | If `key` = `オプションサービスコード` (Option Service Code), check subkey: `value` -> `String.class`, `state` -> `String.class`. No `enable` subkey for this field. (L946–954) |
| 10 | DISP_OP_SVC_CD_NM_BRANCH | If `key` = `表示用オプションサービスコード名称` (Display Option Service Code Name), check subkey: `value` -> `String.class`, `enable` -> `Boolean.class`, `state` -> `String.class`. (L957–968) |
| 11 | OP_SVC_KEI_STAT_BRANCH | If `key` = `オプションサービス契約ステータス` (Option Service Contract Status), check subkey: `value` -> `String.class`, `state` -> `String.class`. No `enable` subkey for this field. (L971–979) |
| 12 | SVC_STA_YMD_BRANCH | If `key` = `サービス開始年月日` (Service Start Year-Month-Day), check subkey: `value` -> `String.class`, `state` -> `String.class`. No `enable` subkey for this compound date field. (L982–990) |
| 13 | RSV_PSB_PRD_BRANCH | If `key` = `予約可能期間` (Reservable Period), check subkey: `value` -> `String.class`, `state` -> `String.class`. No `enable` subkey for this field. (L993–1001) |
| 14 | FIRST_PRC_CALC_BRANCH | If `key` = `初回料金計算日` (First Billing Calculation Date), check subkey: `value` -> `String.class`, `state` -> `String.class`. No `enable` subkey for this field. (L1004–1012) |
| 15 | ADD_DSL_CD_BRANCH | If `key` = `登録解約コード` (Registration/Cancellation Code), check subkey: `value` -> `String.class`, `state` -> `String.class`. No `enable` subkey for this field. (L1015–1022) |
| 16 | NO_MATCH_RETURN | If no key matches any branch, return null. (L1024) |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | **Field name (item name) — the Japanese business label of a security operation list property**. This is the primary routing key that determines which of the 12 field branches to evaluate. Valid values include: `選択区分` (Choice Category), `利用開始年月日` (Service Start Year-Month-Day), `利用開始日（年）` (Service Start Year), `利用開始日（月）` (Service Start Month), `利用開始日（日）` (Service Start Day), `課金有無` (Billing Existence), `オプションサービスコード` (Option Service Code), `表示用オプションサービスコード名称` (Display Option Service Code Name), `オプションサービス契約ステータス` (Option Service Contract Status), `サービス開始年月日` (Service Start Year-Month-Day), `予約可能期間` (Reservable Period), `初回料金計算日` (First Billing Calculation Date), `登録解約コード` (Registration/Cancellation Code). A null value causes an immediate null return. |
| 2 | `subkey` | `String` | **Sub-property name — the meta-property of the field**. Determines which aspect of the field's type to resolve. Valid values: `value` (the actual data type of the field), `enable` (whether the field is UI-enabled, applicable only to certain fields like choice categories, date component fields, and billing flags), `state` (the UI validation state of the field, universally applicable). Case-insensitive comparison (`equalsIgnoreCase`). A null value causes an immediate null return. |

**Instance/External State Read:**
- None. This method is **stateless** — it reads no instance fields, no static configuration, and has no side effects.

## 4. CRUD Operations / Called Services

This method performs **no database operations, no service calls, and no CRUD activities**. It is a pure type-resolution utility with zero external dependencies.

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| N/A | — | — | — | Pure in-memory type resolution. No SC, CBS, Entity, or DB table involved. |

## 5. Dependency Trace

This method is part of the X33 web framework's `X33VDataTypeBeanInterface` contract. It is used by the framework to resolve the data type of properties in the **Security Operation List** (`security_op_list`) item, which is a data-type-bean list item whose element class is `KKW00846SF02DBean`.

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Screen: KKA18001SF | `X33VFramework.render` -> `X33VDataTypeList.getDataType` -> `KKW00846SF02DBean.typeModelData` | Pure type resolution (no CRUD) |
| 2 | Screen: KKA18001SF | `KKW00846SFBean.typeModelData(String gamenId, key, subkey)` -> delegates to parent `KKW00846SFBean.typeModelData(key, subkey)` which dispatches to list bean's `typeModelData` | Pure type resolution (no CRUD) |
| 3 | Screen: KKA18001SF | `KKW00846SFBean.listKoumokuIds()` -> identifies `KKW00846SF02DBean` as the data-type-bean class for `security_op_list` | No method call — class identification only |

**Notes on call chain:**
- The `KKW00846SF02DBean.typeModelData()` is NOT directly invoked by a specific named screen class — rather, it is called by the **X33 web framework's generic type introspection mechanism** during form rendering, when the framework needs to know the Java type of each property in the `security_op_list` data-type-bean list.
- The `KKW00846SFBean` (parent bean for screen KKA18001SF) identifies `KKW00846SF02DBean` as the data-type-bean class for the `security_op_list` item (line 2350–2352 in `KKW00846SFBean.java`), which establishes the interface contract.

## 6. Per-Branch Detail Blocks

### Block 1 — IF (null guard) (L860)

Null check for both `key` and `subkey` parameters. If either is null, return null immediately. (key, subkey が null の場合、null を返す / Return null if key or subkey is null)

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key == null || subkey == null)` [L860] |
| 2 | RETURN | `return null;` [L861] |

### Block 2 — EXEC (separator calculation) (L863)

Calculate the position of the "/" separator in the key. This value is computed but never used in this method — it appears to be a vestige from a parameterized key routing pattern (e.g., `key/index` format).

| # | Type | Code |
|---|------|------|
| 1 | SET | `int separaterPoint = key.indexOf("/")` [L863] |

### Block 3 — ELSE-IF [key = `選択区分`] (Choice Category) (L867)

Handle the "選択区分" (Choice Category) field. This field supports `value`, `enable`, and `state` subkeys. Both `value` and `enable` return `Boolean.class` — indicating the choice category's value and its enabled/disabled state are both Boolean. The `state` subkey returns `String.class` for UI validation state. (データ型がBooleanの項目"選択区分" (項目ID:choice_div) / Field with Boolean data type "Choice Category" (Item ID: choice_div))

**Block 3.1** — IF (subkey = `value`) (L869)

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` [L869] |
| 2 | RETURN | `return Boolean.class;` [L870] |

**Block 3.2** — ELSE-IF (subkey = `enable`) (L871)

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if (subkey.equalsIgnoreCase("enable"))` [L871] |
| 2 | RETURN | `return Boolean.class;` [L872] |

**Block 3.3** — ELSE-IF (subkey = `state`) (L873)

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if (subkey.equalsIgnoreCase("state"))` [L873] |
| 2 | RETURN | `return String.class;` [L875] // subkey が"state"の場合、ステータスを返す / If subkey is "state", return status |

### Block 4 — ELSE-IF [key = `利用開始年月日`] (Service Start Year-Month-Day) (L879)

Handle the "利用開始年月日" (Service Start Year-Month-Day) compound date field. This field only supports `value` and `state` subkeys — no `enable` subkey because it is a compound field without individual enable control. (データ型がStringの項目"利用開始年月日" (項目ID:use_staymd) / Field with String data type "Service Start Year-Month-Day" (Item ID: use_staymd))

**Block 4.1** — IF (subkey = `value`) (L881)

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` [L881] |
| 2 | RETURN | `return String.class;` [L882] |

**Block 4.2** — ELSE-IF (subkey = `state`) (L883)

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if (subkey.equalsIgnoreCase("state"))` [L883] |
| 2 | RETURN | `return String.class;` [L885] // subkey が"state"の場合、ステータスを返す / If subkey is "state", return status |

### Block 5 — ELSE-IF [key = `利用開始日（年）`] (Service Start Year) (L888)

Handle the "利用開始日（年）" (Service Start Year) component date field. Supports all three subkeys: `value` (String), `enable` (Boolean), and `state` (String). (データ型がStringの項目"利用開始日（年）" (項目ID:use_staymd_year) / Field with String data type "Service Start Year" (Item ID: use_staymd_year))

**Block 5.1** — IF (subkey = `value`) (L890)

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` [L890] |
| 2 | RETURN | `return String.class;` [L891] |

**Block 5.2** — ELSE-IF (subkey = `enable`) (L892)

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if (subkey.equalsIgnoreCase("enable"))` [L892] |
| 2 | RETURN | `return Boolean.class;` [L893] |

**Block 5.3** — ELSE-IF (subkey = `state`) (L894)

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if (subkey.equalsIgnoreCase("state"))` [L894] |
| 2 | RETURN | `return String.class;` [L896] // subkey が"state"の場合、ステータスを返す / If subkey is "state", return status |

### Block 6 — ELSE-IF [key = `利用開始日（月）`] (Service Start Month) (L899)

Handle the "利用開始日（月）" (Service Start Month) component date field. Same subkey structure as the year field: `value` -> `String`, `enable` -> `Boolean`, `state` -> `String`. (データ型がStringの項目"利用開始日（月）" (項目ID:use_staymd_mon) / Field with String data type "Service Start Month" (Item ID: use_staymd_mon))

**Block 6.1** — IF (subkey = `value`) (L901)

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` [L901] |
| 2 | RETURN | `return String.class;` [L902] |

**Block 6.2** — ELSE-IF (subkey = `enable`) (L903)

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if (subkey.equalsIgnoreCase("enable"))` [L903] |
| 2 | RETURN | `return Boolean.class;` [L904] |

**Block 6.3** — ELSE-IF (subkey = `state`) (L905)

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if (subkey.equalsIgnoreCase("state"))` [L905] |
| 2 | RETURN | `return String.class;` [L907] // subkey が"state"の場合、ステータスを返す / If subkey is "state", return status |

### Block 7 — ELSE-IF [key = `利用開始日（日）`] (Service Start Day) (L910)

Handle the "利用開始日（日）" (Service Start Day) component date field. Same subkey structure as year and month: `value` -> `String`, `enable` -> `Boolean`, `state` -> `String`. (データ型がStringの項目"利用開始日（日）" (項目ID:use_staymd_day) / Field with String data type "Service Start Day" (Item ID: use_staymd_day))

**Block 7.1** — IF (subkey = `value`) (L912)

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` [L912] |
| 2 | RETURN | `return String.class;` [L913] |

**Block 7.2** — ELSE-IF (subkey = `enable`) (L914)

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if (subkey.equalsIgnoreCase("enable"))` [L914] |
| 2 | RETURN | `return Boolean.class;` [L915] |

**Block 7.3** — ELSE-IF (subkey = `state`) (L916)

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if (subkey.equalsIgnoreCase("state"))` [L916] |
| 2 | RETURN | `return String.class;` [L918] // subkey が"state"の場合、ステータスを返す / If subkey is "state", return status |

### Block 8 — ELSE-IF [key = `課金有無`] (Billing Existence) (L921)

Handle the "課金有無" (Billing Existence) field. Supports `value` (String), `enable` (Boolean), and `state` (String). (データ型がStringの項目"課金有無" (項目ID:kakin_um) / Field with String data type "Billing Existence" (Item ID: kakin_um))

**Block 8.1** — IF (subkey = `value`) (L923)

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` [L923] |
| 2 | RETURN | `return String.class;` [L924] |

**Block 8.2** — ELSE-IF (subkey = `enable`) (L925)

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if (subkey.equalsIgnoreCase("enable"))` [L925] |
| 2 | RETURN | `return Boolean.class;` [L926] |

**Block 8.3** — ELSE-IF (subkey = `state`) (L927)

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if (subkey.equalsIgnoreCase("state"))` [L927] |
| 2 | RETURN | `return String.class;` [L929] // subkey が"state"の場合、ステータスを返す / If subkey is "state", return status |

### Block 9 — ELSE-IF [key = `オプションサービスコード`] (Option Service Code) (L932)

Handle the "オプションサービスコード" (Option Service Code) field. Only supports `value` (String) and `state` (String) — no `enable` subkey. (データ型がStringの項目"オプションサービスコード" (項目ID:op_svc_cd) / Field with String data type "Option Service Code" (Item ID: op_svc_cd))

**Block 9.1** — IF (subkey = `value`) (L934)

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` [L934] |
| 2 | RETURN | `return String.class;` [L935] |

**Block 9.2** — ELSE-IF (subkey = `state`) (L936)

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if (subkey.equalsIgnoreCase("state"))` [L936] |
| 2 | RETURN | `return String.class;` [L938] // subkey が"state"の場合、ステータスを返す / If subkey is "state", return status |

### Block 10 — ELSE-IF [key = `表示用オプションサービスコード名称`] (Display Option Service Code Name) (L941)

Handle the "表示用オプションサービスコード名称" (Display Option Service Code Name) field. Supports all three subkeys: `value` (String), `enable` (Boolean), `state` (String). (データ型がStringの項目"表示用オプションサービスコード名称" (項目ID:disp_op_svc_cd_nm) / Field with String data type "Display Option Service Code Name" (Item ID: disp_op_svc_cd_nm))

**Block 10.1** — IF (subkey = `value`) (L943)

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` [L943] |
| 2 | RETURN | `return String.class;` [L944] |

**Block 10.2** — ELSE-IF (subkey = `enable`) (L945)

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if (subkey.equalsIgnoreCase("enable"))` [L945] |
| 2 | RETURN | `return Boolean.class;` [L946] |

**Block 10.3** — ELSE-IF (subkey = `state`) (L947)

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if (subkey.equalsIgnoreCase("state"))` [L947] |
| 2 | RETURN | `return String.class;` [L949] // subkey が"state"の場合、ステータスを返す / If subkey is "state", return status |

### Block 11 — ELSE-IF [key = `オプションサービス契約ステータス`] (Option Service Contract Status) (L952)

Handle the "オプションサービス契約ステータス" (Option Service Contract Status) field. Only supports `value` (String) and `state` (String) — no `enable` subkey. (データ型がStringの項目"オプションサービス契約ステータス" (項目ID:op_svc_kei_stat) / Field with String data type "Option Service Contract Status" (Item ID: op_svc_kei_stat))

**Block 11.1** — IF (subkey = `value`) (L954)

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` [L954] |
| 2 | RETURN | `return String.class;` [L955] |

**Block 11.2** — ELSE-IF (subkey = `state`) (L956)

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if (subkey.equalsIgnoreCase("state"))` [L956] |
| 2 | RETURN | `return String.class;` [L958] // subkey が"state"の場合、ステータスを返す / If subkey is "state", return status |

### Block 12 — ELSE-IF [key = `サービス開始年月日`] (Service Start Year-Month-Day) (L961)

Handle the "サービス開始年月日" (Service Start Year-Month-Day) field. Only supports `value` (String) and `state` (String) — no `enable` subkey. (データ型がStringの項目"サービス開始年月日" (項目ID:svc_sta_ymd) / Field with String data type "Service Start Year-Month-Day" (Item ID: svc_sta_ymd))

**Block 12.1** — IF (subkey = `value`) (L963)

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` [L963] |
| 2 | RETURN | `return String.class;` [L964] |

**Block 12.2** — ELSE-IF (subkey = `state`) (L965)

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if (subkey.equalsIgnoreCase("state"))` [L965] |
| 2 | RETURN | `return String.class;` [L967] // subkey が"state"の場合、ステータスを返す / If subkey is "state", return status |

### Block 13 — ELSE-IF [key = `予約可能期間`] (Reservable Period) (L970)

Handle the "予約可能期間" (Reservable Period) field. Only supports `value` (String) and `state` (String) — no `enable` subkey. (データ型がStringの項目"予約可能期間" (項目ID:rsv_psb_prd) / Field with String data type "Reservable Period" (Item ID: rsv_psb_prd))

**Block 13.1** — IF (subkey = `value`) (L972)

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` [L972] |
| 2 | RETURN | `return String.class;` [L973] |

**Block 13.2** — ELSE-IF (subkey = `state`) (L974)

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if (subkey.equalsIgnoreCase("state"))` [L974] |
| 2 | RETURN | `return String.class;` [L976] // subkey が"state"の場合、ステータスを返す / If subkey is "state", return status |

### Block 14 — ELSE-IF [key = `初回料金計算日`] (First Billing Calculation Date) (L979)

Handle the "初回料金計算日" (First Billing Calculation Date) field. Only supports `value` (String) and `state` (String) — no `enable` subkey. (データ型がStringの項目"初回料金計算日" (項目ID:first_prc_calc_ymd) / Field with String data type "First Billing Calculation Date" (Item ID: first_prc_calc_ymd))

**Block 14.1** — IF (subkey = `value`) (L981)

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` [L981] |
| 2 | RETURN | `return String.class;` [L982] |

**Block 14.2** — ELSE-IF (subkey = `state`) (L983)

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if (subkey.equalsIgnoreCase("state"))` [L983] |
| 2 | RETURN | `return String.class;` [L985] // subkey が"state"の場合、ステータスを返す / If subkey is "state", return status |

### Block 15 — ELSE-IF [key = `登録解約コード`] (Registration/Cancellation Code) (L988)

Handle the "登録解約コード" (Registration/Cancellation Code) field. Only supports `value` (String) and `state` (String) — no `enable` subkey. (データ型がStringの項目"登録解約コード" (項目ID:add_dsl_cd) / Field with String data type "Registration/Cancellation Code" (Item ID: add_dsl_cd))

**Block 15.1** — IF (subkey = `value`) (L990)

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` [L990] |
| 2 | RETURN | `return String.class;` [L991] |

**Block 15.2** — ELSE-IF (subkey = `state`) (L992)

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if (subkey.equalsIgnoreCase("state"))` [L992] |
| 2 | RETURN | `return String.class;` [L994] // subkey が"state"の場合、ステータスを返す / If subkey is "state", return status |

### Block 16 — ELSE (fallback / no match) (L997)

If no key matches any of the 12 defined fields, return null. 条件に合致するプロパティが存在しない場合は、null を返す / Return null if no matching property exists. (L997–998)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` [L998] |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `選択区分` | Field | Choice Category — a UI field that presents a list of selectable options. Its value and enable state are both Boolean; its validation state is a String. |
| `choice_div` | Field | Choice Division — the internal item ID corresponding to `選択区分`. |
| `利用開始年月日` | Field | Service Start Year-Month-Day — the compound date when the service begins. Stored as String. |
| `use_staymd` | Field | Use Start MD — the internal item ID for the compound start date. |
| `利用開始日（年）` | Field | Service Start Year — the year component of the service start date. Stored as String, has Boolean enable control. |
| `use_staymd_year` | Field | Use Start Year — the internal item ID for the year component. |
| `利用開始日（月）` | Field | Service Start Month — the month component of the service start date. Stored as String, has Boolean enable control. |
| `use_staymd_mon` | Field | Use Start Month — the internal item ID for the month component. |
| `利用開始日（日）` | Field | Service Start Day — the day component of the service start date. Stored as String, has Boolean enable control. |
| `use_staymd_day` | Field | Use Start Day — the internal item ID for the day component. |
| `課金有無` | Field | Billing Existence — indicates whether billing is applicable to this line item. Stored as String, has Boolean enable control. |
| `kakin_um` | Field | Billing Existence/Non-existence — the internal item ID. `kakin` = billing/charge, `um` = yes/no (有无). |
| `オプションサービスコード` | Field | Option Service Code — the code identifying an optional add-on service. Stored as String. |
| `op_svc_cd` | Field | Option Service Code — the internal item ID. |
| `表示用オプションサービスコード名称` | Field | Display Option Service Code Name — the human-readable name of the option service code, used for UI display. Stored as String, has Boolean enable control. |
| `disp_op_svc_cd_nm` | Field | Display Option Service Code Name — the internal item ID. `disp` = display. |
| `オプションサービス契約ステータス` | Field | Option Service Contract Status — the current status of the option service contract (e.g., active, canceled). Stored as String. |
| `op_svc_kei_stat` | Field | Option Service Keiyaku (Contract) Status — the internal item ID. |
| `サービス開始年月日` | Field | Service Start Year-Month-Day — the date when the service officially begins (can differ from the customer-facing start date). Stored as String. |
| `svc_sta_ymd` | Field | Service Start YMD — the internal item ID. |
| `予約可能期間` | Field | Reservable Period — the time window during which reservations can be made for the service. Stored as String. |
| `rsv_psb_prd` | Field | Reservation Possible Period — the internal item ID. |
| `初回料金計算日` | Field | First Billing Calculation Date — the date when the first billing cycle's charges are calculated. Stored as String. |
| `first_prc_calc_ymd` | Field | First Price Calculation YMD — the internal item ID. |
| `登録解約コード` | Field | Registration/Cancellation Code — a code indicating whether this line item is registered or canceled. Stored as String. |
| `add_dsl_cd` | Field | Add/Dissolve Code — the internal item ID. `dsl` = dissolve/cancel. |
| `value` | Subkey | The primary data value of the field. Always returns `String.class` in this method. |
| `enable` | Subkey | The UI enabled/disabled state of the field. Returns `Boolean.class` for fields that support enable control. |
| `state` | Subkey | The UI validation state of the field (e.g., "valid", "error", "warning"). Always returns `String.class`. |
| `security_op_list` | Item ID | The item identifier for the Security Operation List — a data-type-bean list whose element class is `KKW00846SF02DBean`. |
| `X33VDataTypeBeanInterface` | Interface | The X33 framework interface that `KKW00846SF02DBean` implements, requiring a `typeModelData` method for runtime type introspection. |
| `KKA18001SF` | Module | The telecom service management module (likely "K-Opticom FTTH Service Management") handling service registration, option configuration, and billing. |
| `KKW00846SF02DBean` | Class | The data-type-bean class for the Security Operation List within the KKA18001SF module. |
