# Business Logic — KKW00401SF02DBean.typeModelData() [738 LOC]

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

## 1. Role

### KKW00401SF02DBean.typeModelData()

This method serves as the **data type resolver** for the `KKW00401SF` screen's view layer. It is a shared utility that maps form field identifiers (called "key" and "subkey") to their corresponding Java `Class<?>` types, enabling the web framework to understand the expected data type of each UI component at render time. The method implements a **routing/dispatch design pattern** — it branches on a long series of if-else-if conditions, each matching a distinct field name to determine what data type (String, Boolean, Integer) the associated form control should use.

The method handles **four categories of fields**: (1) **Simple scalar fields** — standalone fields like "STB", "Maker Code", "HDD Capacity" where each field has three sub-keys: `value` (the actual data type), `enable` (the editable state type), and `state` (the visual state type). (2) **Legacy/short-code scalar fields** — fields with abbreviated identifiers like "R" and "STBID". (3) **Old-value fields** — historical snapshots of fields before a change operation, prefixed with "変更前" (Before Change), covering STB migration, selection type, HDD capacity, TV course, and the "R" flag. (4) **List-type (repeating) fields** — "STB Migration Classification", "Selection Type Number", "STB Division", "HDD Capacity", and "TV Course" which use a slash-delimited path format (e.g., `プランリスト/0/プラン名`) to index into dynamically-sized lists of data beans, recursively delegating type resolution to list element beans via `X33VDataTypeBeanInterface`.

The method plays a **central role in the screen's model-binding infrastructure**: every UI element on the KKW00401SF (Machine Provision Service Contract Modification) screen calls this method to determine field types during page rendering, validation, and data binding. No database or SC calls are made — this is a pure metadata lookup utility.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["typeModelData key, subkey"])
    
    START --> CHECK_NULL["Check if key or subkey is null"]
    CHECK_NULL --> |both null| RETURN_NULL1["Return null"]
    CHECK_NULL --> |both present| FIND_SEP["Find first '/' in key"]
    
    FIND_SEP --> IS_STB["key = 'STB'?"]
    IS_STB --> |yes| STB_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    IS_STB --> |no| MAKER_CD["key = 'メーカーコード'?"]
    
    MAKER_CD --> |yes| MAKER_CD_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    MAKER_CD --> |no| MAKER_NM["key = 'メーカー名'?"]
    
    MAKER_NM --> |yes| MAKER_NM_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    MAKER_NM --> |no| HOYU_R["key = '保有ルーター種別コード'?"]
    
    HOYU_R --> |yes| HOYU_R_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    HOYU_R --> |no| VONU_BS["key = 'VONUNSパススルー可否'?"]
    
    VONU_BS --> |yes| VONU_BS_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    VONU_BS --> |no| STBID["key = 'STBID'?"]
    
    STBID --> |yes| STBID_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    STBID --> |no| TAKN_MODEL["key = '宅内機器型式コード'?"]
    
    TAKN_MODEL --> |yes| TAKN_MODEL_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    TAKN_MODEL --> |no| HDD_UM["key = 'HDD有無'?"]
    
    HDD_UM --> |yes| HDD_UM_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    HDD_UM --> |no| KEY_R["key = 'R'?"]
    
    KEY_R --> |yes| KEY_R_SUB["Check subkey: value/enable -> Boolean.class, state -> String.class"]
    KEY_R --> |no| STB_IDO["key = 'STB異動区分コード'?"]
    
    STB_IDO --> |yes| STB_IDO_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    STB_IDO --> |no| SEL_TYPE["key = '選択型番号コード'?"]
    
    SEL_TYPE --> |yes| SEL_TYPE_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    SEL_TYPE --> |no| STB_DIV["key = 'STB区分コード'?"]
    
    STB_DIV --> |yes| STB_DIV_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    STB_DIV --> |no| HDD_CAPA["key = 'HDD容量コード'?"]
    
    HDD_CAPA --> |yes| HDD_CAPA_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    HDD_CAPA --> |no| TV_COURSE["key = 'TVコースコード'?"]
    
    TV_COURSE --> |yes| TV_COURSE_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    TV_COURSE --> |no| OLD_STB_IDO["key = '変更前STB異動区分コード'?"]
    
    OLD_STB_IDO --> |yes| OLD_STB_IDO_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    OLD_STB_IDO --> |no| OLD_SEL_TYPE["key = '変更前選択型番号コード'?"]
    
    OLD_SEL_TYPE --> |yes| OLD_SEL_TYPE_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    OLD_SEL_TYPE --> |no| OLD_STB_DIV["key = '変更前STB区分コード'?"]
    
    OLD_STB_DIV --> |yes| OLD_STB_DIV_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    OLD_STB_DIV --> |no| OLD_R["key = '変更前R'?"]
    
    OLD_R --> |yes| OLD_R_SUB["Check subkey: value/enable -> Boolean.class, state -> String.class"]
    OLD_R --> |no| OLD_HDD_CAPA["key = '変更前HDD容量コード'?"]
    
    OLD_HDD_CAPA --> |yes| OLD_HDD_CAPA_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    OLD_HDD_CAPA --> |no| OLD_TV_COURSE["key = '変更前TVコースコード'?"]
    
    OLD_TV_COURSE --> |yes| OLD_TV_COURSE_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    OLD_TV_COURSE --> |no| OLD_TV_CURR["key = '変更前TVコースコード?カレント'?"]
    
    OLD_TV_CURR --> |yes| OLD_TV_CURR_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    OLD_TV_CURR --> |no| SVC_CONTRACT["key = '機器提供サービス契約番号'?"]
    
    SVC_CONTRACT --> |yes| SVC_CONTRACT_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    SVC_CONTRACT --> |no| TAKN_MODEL_N["key = '宅内機器型式'?"]
    
    TAKN_MODEL_N --> |yes| TAKN_MODEL_N_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    TAKN_MODEL_N --> |no| TAKN_SBT["key = '宅内機器種別コード'?"]
    
    TAKN_SBT --> |yes| TAKN_SBT_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    TAKN_SBT --> |no| KKT_SBT["key = '機器提供種別コード'?"]
    
    KKT_SBT --> |yes| KKT_SBT_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    KKT_SBT --> |no| KIKI_SEQ["key = '機器製造番号'?"]
    
    KIKI_SEQ --> |yes| KIKI_SEQ_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    KIKI_SEQ --> |no| HDD_CAPA_K["key = 'HDDコード'?"]
    
    HDD_CAPA_K --> |yes| HDD_CAPA_K_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    HDD_CAPA_K --> |no| SVC_KEI["key = 'サービス契約内訳番号'?"]
    
    SVC_KEI --> |yes| SVC_KEI_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    SVC_KEI --> |no| GENE_DTM["key = '世代登録年月日時分秒'?"]
    
    GENE_DTM --> |yes| GENE_DTM_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    GENE_DTM --> |no| KKT_UPD["key = '機器提供更新年月日時分秒'?"]
    
    KKT_UPD --> |yes| KKT_UPD_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    KKT_UPD --> |no| SVC_UPD["key = 'サービス契約内訳更新年月日時分秒'?"]
    
    SVC_UPD --> |yes| SVC_UPD_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    SVC_UPD --> |no| STB_HIDDEN["key = '隠しSTB異動区分コード'?"]
    
    STB_HIDDEN --> |yes| STB_HIDDEN_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    STB_HIDDEN --> |no| SEL_HIDDEN["key = '隠し選択型番号コード'?"]
    
    SEL_HIDDEN --> |yes| SEL_HIDDEN_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    SEL_HIDDEN --> |no| STB_DIV_HID["key = '隠しSTB区分コード'?"]
    
    STB_DIV_HID --> |yes| STB_DIV_HID_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    STB_DIV_HID --> |no| R_HIDDEN["key = '隠しR'?"]
    
    R_HIDDEN --> |yes| R_HIDDEN_SUB["Check subkey: value/enable -> Boolean.class, state -> String.class"]
    R_HIDDEN --> |no| HDD_CAPA_HID["key = '隠しHDD容量コード'?"]
    
    HDD_CAPA_HID --> |yes| HDD_CAPA_HID_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    HDD_CAPA_HID --> |no| TV_COURSE_HID["key = '隠しTVコースコード'?"]
    
    TV_COURSE_HID --> |yes| TV_COURSE_HID_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    TV_COURSE_HID --> |no| LIST_STYLE["key = '一覧のスタイル制御'?"]
    
    LIST_STYLE --> |yes| LIST_STYLE_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    LIST_STYLE --> |no| BCAS["key = 'BCAS ID'?"]
    
    BCAS --> |yes| BCAS_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    BCAS --> |no| CCAS["key = 'CCAS ID'?"]
    
    CCAS --> |yes| CCAS_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    CCAS --> |no| IS_STB_IDO_DIV["key = 'STB異動区分'?"]
    
    CCAS --> |no| IS_SEL_TYPE_NUMBER["key = '選択型番号'?"]
    
    IS_STB_IDO_DIV --> |yes| STB_IDO_DIV_LIST["Route to stb_ido_div_list with index from key path, recurse via X33VDataTypeBeanInterface"]
    IS_STB_IDO_DIV --> |no| IS_SEL_TYPE_NUMBER_CHECK["key = '選択型番号'?"]
    
    IS_SEL_TYPE_NUMBER_CHECK --> |yes| SEL_TYPE_NUMBER_LIST["Route to sel_type_number_list with index from key path, recurse via X33VDataTypeBeanInterface"]
    IS_SEL_TYPE_NUMBER_CHECK --> |no| IS_STB_DIV_CHECK["key = 'STB区分'?"]
    
    IS_STB_DIV_CHECK --> |yes| STB_DIV_LIST["Route to stb_div_list with index from key path, recurse via X33VDataTypeBeanInterface"]
    IS_STB_DIV_CHECK --> |no| IS_HDD_CAPA_CHECK["key = 'HDD容量'?"]
    
    IS_HDD_CAPA_CHECK --> |yes| HDD_CAPA_LIST["Route to hdd_capa_list with index from key path, recurse via X33VDataTypeBeanInterface"]
    IS_HDD_CAPA_CHECK --> |no| IS_TV_COURSE_CHECK["key = 'TVコース'?"]
    
    IS_TV_COURSE_CHECK --> |yes| TV_COURSE_LIST["Route to tv_course_list with index from key path, recurse via X33VDataTypeBeanInterface"]
    IS_TV_COURSE_CHECK --> |no| IS_RSV_TV_COURSE["key = '予約TVコースコード'?"]
    
    IS_RSV_TV_COURSE --> |yes| RSV_TV_COURSE_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    IS_RSV_TV_COURSE --> |no| IS_KIKI_MIN["key = '機器最低利用期間'?"]
    
    IS_KIKI_MIN --> |yes| KIKI_MIN_SUB["Check subkey: value/state -> String.class, enable -> Boolean.class"]
    IS_KIKI_MIN --> |no| NO_MATCH["No matching key"]
    
    STB_SUB --> RETURN_SCALAR["Return String.class or Boolean.class"]
    MAKER_CD_SUB --> RETURN_SCALAR
    MAKER_NM_SUB --> RETURN_SCALAR
    HOYU_R_SUB --> RETURN_SCALAR
    VONU_BS_SUB --> RETURN_SCALAR
    STBID_SUB --> RETURN_SCALAR
    TAKN_MODEL_SUB --> RETURN_SCALAR
    HDD_UM_SUB --> RETURN_SCALAR
    KEY_R_SUB --> RETURN_SCALAR
    STB_IDO_SUB --> RETURN_SCALAR
    SEL_TYPE_SUB --> RETURN_SCALAR
    STB_DIV_SUB --> RETURN_SCALAR
    HDD_CAPA_SUB --> RETURN_SCALAR
    TV_COURSE_SUB --> RETURN_SCALAR
    OLD_STB_IDO_SUB --> RETURN_SCALAR
    OLD_SEL_TYPE_SUB --> RETURN_SCALAR
    OLD_STB_DIV_SUB --> RETURN_SCALAR
    OLD_R_SUB --> RETURN_SCALAR
    OLD_HDD_CAPA_SUB --> RETURN_SCALAR
    OLD_TV_COURSE_SUB --> RETURN_SCALAR
    OLD_TV_CURR_SUB --> RETURN_SCALAR
    SVC_CONTRACT_SUB --> RETURN_SCALAR
    TAKN_MODEL_N_SUB --> RETURN_SCALAR
    TAKN_SBT_SUB --> RETURN_SCALAR
    KKT_SBT_SUB --> RETURN_SCALAR
    KIKI_SEQ_SUB --> RETURN_SCALAR
    HDD_CAPA_K_SUB --> RETURN_SCALAR
    SVC_KEI_SUB --> RETURN_SCALAR
    GENE_DTM_SUB --> RETURN_SCALAR
    KKT_UPD_SUB --> RETURN_SCALAR
    SVC_UPD_SUB --> RETURN_SCALAR
    STB_HIDDEN_SUB --> RETURN_SCALAR
    SEL_HIDDEN_SUB --> RETURN_SCALAR
    STB_DIV_HID_SUB --> RETURN_SCALAR
    R_HIDDEN_SUB --> RETURN_SCALAR
    HDD_CAPA_HID_SUB --> RETURN_SCALAR
    TV_COURSE_HID_SUB --> RETURN_SCALAR
    LIST_STYLE_SUB --> RETURN_SCALAR
    BCAS_SUB --> RETURN_SCALAR
    CCAS_SUB --> RETURN_SCALAR
    RSV_TV_COURSE_SUB --> RETURN_SCALAR
    KIKI_MIN_SUB --> RETURN_SCALAR
    
    RETURN_NULL1 --> END(["END"])
    RETURN_SCALAR --> END
    NO_MATCH --> END
    STB_IDO_DIV_LIST --> END
    SEL_TYPE_NUMBER_LIST --> END
    STB_DIV_LIST --> END
    HDD_CAPA_LIST --> END
    TV_COURSE_LIST --> END
```

**Scalar field processing pattern (applies to all simple fields):** Each simple field (there are 34) follows the same internal structure:
- If `subkey.equalsIgnoreCase("value")` --> return `String.class`
- If `subkey.equalsIgnoreCase("enable")` --> return `Boolean.class`
- If `subkey.equalsIgnoreCase("state")` --> return `String.class`

Two exception patterns:
- Fields "R" (L3307) and "変更前R" (L3490) and "隠しR" (L3701): `subkey.equalsIgnoreCase("value")` --> return `Boolean.class` (the R field itself is a Boolean, not a String).

**List-type field processing pattern (applies to 5 fields):** Each list-type field ("STB異動区分", "選択型番号", "STB区分", "HDD容量", "TVコース") follows the same delegation workflow:
1. Extract the remainder after the first `/` separator in the key path.
2. If remainder equals `"*"` --> return `Integer.class` (requesting list size).
3. Find the next `/` to separate the index from the property name.
4. Parse the index segment as an `Integer` (wrapped in try/catch for `NumberFormatException`).
5. Validate index bounds against the corresponding list field's size.
6. Extract the property name after the index.
7. Cast the list element to `X33VDataTypeBeanInterface` and delegate via `typeModelData(key, subkey)`.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | The field identifier (項目名). Represents the business name of a UI form field. For simple scalar fields, it is a literal Japanese or English name (e.g., "STB", "メーカーコード", "機器提供サービス契約番号"). For list-type fields, it uses a slash-delimited path format: `"リスト名/インデックス/プロパティ名"` (e.g., "プランリスト/0/プラン名"), where the index specifies which repeating item's type to resolve. |
| 2 | `subkey` | `String` | The sub-key (サブキー) that specifies which property aspect of the field to resolve. Three standard sub-keys: `"value"` (the data type of the field's actual value), `"enable"` (the data type of the field's editable state — typically Boolean), and `"state"` (the data type of the field's visual/display state — typically String). For list-type fields, subkey remains the same while the key carries the index path. |

**Instance fields read by this method:**

| Field | Type | Business Description |
|-------|------|---------------------|
| `stb_ido_div_list` | `X33VDataTypeList` | List of STB migration classification items — dynamically-sized list of repeating form elements |
| `sel_type_number_list` | `X33VDataTypeList` | List of selection type number items — dynamically-sized list of repeating form elements |
| `stb_div_list` | `X33VDataTypeList` | List of STB division items — dynamically-sized list of repeating form elements |
| `hdd_capa_list` | `X33VDataTypeList` | List of HDD capacity items — dynamically-sized list of repeating form elements |
| `tv_course_list` | `X33VDataTypeList` | List of TV course items — dynamically-sized list of repeating form elements |

## 4. CRUD Operations / Called Services

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `X33VDataTypeBeanInterface.typeModelData` | (interface delegate) | - | Delegates type resolution to list element beans implementing `X33VDataTypeBeanInterface` for list-type fields |
| - | `X33VDataTypeList.size` | (collection method) | - | Checks the size of list-type fields for bounds validation |
| - | `X33VDataTypeList.get` | (collection method) | - | Retrieves a specific element from list-type fields by index |

**Note:** This method performs **no database or SC operations**. It is a pure metadata/type lookup utility that only reads local instance fields (list collections) and delegates to interface methods.

## 5. Dependency Trace

The method is only called from within the same class (self-reference), as determined by the code graph analysis. No external callers were found in the caller search — this method is invoked internally as part of the screen's own rendering infrastructure.

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Internal (KKW00401SF02DBean) | `KKW00401SF02DBean.typeModelData` (recursive via list elements) | No terminal CRUD or SC calls |

**Caller search results:** No external caller files were found that reference `KKW00401SF02DBean.typeModelData` directly. The method is a public utility accessed through the screen's data-binding framework, which calls it generically through the `X33VDataTypeBeanInterface` contract.

## 6. Per-Branch Detail Blocks

### Block 1 — IF `key == null || subkey == null` (L3231)

Early null check. If either parameter is null, return null immediately.

| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = key.indexOf("/")` // Find first slash separator [L3234] |
| 2 | RETURN | `return null;` |

### Block 2 — IF `key.equals("STB")` (L3237)

Handles the STB (Set-Top Box) scalar field. Data type is String.

**Block 2.1** — IF `subkey.equalsIgnoreCase("value")` (L3238)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` |

**Block 2.2** — ELSE-IF `subkey.equalsIgnoreCase("enable")` (L3240)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return Boolean.class;` |

**Block 2.3** — ELSE-IF `subkey.equalsIgnoreCase("state")` (L3243)
> subkeyが"state"の場合、ステータスを返す (When subkey is "state", return status)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` |

### Block 3 — IF `key.equals("メーカーコード")` (L3250)

Handles "Maker Code" (メーカーコード) scalar field. Data type is String.

**Block 3.1** — IF `subkey.equalsIgnoreCase("value")` (L3251)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` |

**Block 3.2** — ELSE-IF `subkey.equalsIgnoreCase("enable")` (L3253)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return Boolean.class;` |

**Block 3.3** — ELSE-IF `subkey.equalsIgnoreCase("state")` (L3256)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` |

### Block 4 — IF `key.equals("メーカー名")` (L3263)

Handles "Maker Name" (メーカー名) scalar field. Data type is String.

**Block 4.1** — IF `subkey.equalsIgnoreCase("value")` (L3264)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` |

**Block 4.2** — ELSE-IF `subkey.equalsIgnoreCase("enable")` (L3266)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return Boolean.class;` |

**Block 4.3** — ELSE-IF `subkey.equalsIgnoreCase("state")` (L3269)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` |

### Block 5 — IF `key.equals("保有ルーター種別コード")` (L3276)

Handles "Owned Router Type Code" (保有ルーター種別コード) scalar field. Data type is String.

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

### Block 6 — IF `key.equals("VONUNSパススルー可否")` (L3283)

Handles "VONUNS Passthrough Availability" (VONUNSパススルー可否) scalar field. Data type is String.

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

### Block 7 — IF `key.equals("STBID")` (L3290)

Handles "STB ID" (STBID) scalar field. Data type is String.

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

### Block 8 — IF `key.equals("宅内機器型式コード")` (L3297)

Handles "Indoor Equipment Model Code" (宅内機器型式コード) scalar field. Data type is String.

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

### Block 9 — IF `key.equals("HDD有無")` (L3304)

Handles "HDD Presence/Absence" (HDD有無) scalar field. Data type is String.

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

### Block 10 — IF `key.equals("R")` (L3311)

Handles "R" scalar field. **Exception pattern** — the R field itself is Boolean, not String.

**Block 10.1** — IF `subkey.equalsIgnoreCase("value")` (L3312)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return Boolean.class;` |

**Block 10.2** — ELSE-IF `subkey.equalsIgnoreCase("enable")` (L3314)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return Boolean.class;` |

**Block 10.3** — ELSE-IF `subkey.equalsIgnoreCase("state")` (L3317)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` |

### Block 11 — IF `key.equals("STB異動区分コード")` (L3324)

Handles "STB Migration Classification Code" (STB異動区分コード) scalar field. Data type is String.

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

### Block 12 — IF `key.equals("選択型番号コード")` (L3331)

Handles "Selection Type Number Code" (選択型番号コード) scalar field. Data type is String.

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

### Block 13 — IF `key.equals("STB区分コード")` (L3338)

Handles "STB Division Code" (STB区分コード) scalar field. Data type is String.

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

### Block 14 — IF `key.equals("HDD容量コード")` (L3345)

Handles "HDD Capacity Code" (HDD容量コード) scalar field. Data type is String.

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

### Block 15 — IF `key.equals("TVコースコード")` (L3352)

Handles "TV Course Code" (TVコースコード) scalar field. Data type is String.

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

### Block 16 — IF `key.equals("変更前STB異動区分コード")` (L3359)

Handles "Before-Change STB Migration Classification Code" (変更前STB異動区分コード) scalar field. Data type is String.

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

### Block 17 — IF `key.equals("変更前選択型番号コード")` (L3366)

Handles "Before-Change Selection Type Number Code" (変更前選択型番号コード) scalar field. Data type is String.

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

### Block 18 — IF `key.equals("変更前STB区分コード")` (L3373)

Handles "Before-Change STB Division Code" (変更前STB区分コード) scalar field. Data type is String.

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

### Block 19 — IF `key.equals("変更前R")` (L3380)

Handles "Before-Change R" (変更前R) scalar field. **Exception pattern** — R field itself is Boolean.

**Block 19.1** — IF `subkey.equalsIgnoreCase("value")` (L3381)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return Boolean.class;` |

**Block 19.2** — ELSE-IF `subkey.equalsIgnoreCase("enable")` (L3383)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return Boolean.class;` |

**Block 19.3** — ELSE-IF `subkey.equalsIgnoreCase("state")` (L3386)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` |

### Block 20 — IF `key.equals("変更前HDD容量コード")` (L3393)

Handles "Before-Change HDD Capacity Code" (変更前HDD容量コード) scalar field. Data type is String.

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

### Block 21 — IF `key.equals("変更前TVコースコード")` (L3400)

Handles "Before-Change TV Course Code" (変更前TVコースコード) scalar field. Data type is String.

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

### Block 22 — IF `key.equals("変更前TVコースコード?カレント")` (L3407)

Handles "Before-Change TV Course Code? Current" (変更前TVコースコード?カレント) scalar field. Added per ANK-2530-00-00 (L3406, L3423). Data type is String.

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

### Block 23 — IF `key.equals("機器提供サービス契約番号")` (L3428)

Handles "Machine Provision Service Contract Number" (機器提供サービス契約番号) scalar field. Data type is String.

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

### Block 24 — IF `key.equals("宅内機器型式")` (L3435)

Handles "Indoor Equipment Model" (宅内機器型式) scalar field. Data type is String.

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

### Block 25 — IF `key.equals("宅内機器種別コード")` (L3442)

Handles "Indoor Equipment Type Code" (宅内機器種別コード) scalar field. Data type is String.

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

### Block 26 — IF `key.equals("機器提供種別コード")` (L3449)

Handles "Machine Provision Type Code" (機器提供種別コード) scalar field. Data type is String.

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

### Block 27 — IF `key.equals("機器製造番号")` (L3456)

Handles "Machine Serial Number" (機器製造番号) scalar field. Data type is String.

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

### Block 28 — IF `key.equals("HDDコード")` (L3463)

Handles "HDD Code" (HDDコード) scalar field. Data type is String.

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

### Block 29 — IF `key.equals("サービス契約内訳番号")` (L3470)

Handles "Service Contract Breakdown Number" (サービス契約内訳番号) scalar field. Data type is String.

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

### Block 30 — IF `key.equals("世代登録年月日時分秒")` (L3477)

Handles "Generation Registration DateTime" (世代登録年月日時分秒) scalar field. Data type is String.

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

### Block 31 — IF `key.equals("機器提供更新年月日時分秒")` (L3484)

Handles "Machine Provision Update DateTime" (機器提供更新年月日時分秒) scalar field. Data type is String.

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

### Block 32 — IF `key.equals("サービス契約内訳更新年月日時分秒")` (L3491)

Handles "Service Contract Breakdown Update DateTime" (サービス契約内訳更新年月日時分秒) scalar field. Data type is String.

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

### Block 33 — IF `key.equals("隠しSTB異動区分コード")` (L3498)

Handles "Hidden STB Migration Classification Code" (隠しSTB異動区分コード) scalar field. Data type is String. "隠し" means hidden fields — UI elements that are present in the model but not rendered to the user (e.g., hidden form inputs for state tracking).

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

### Block 34 — IF `key.equals("隠し選択型番号コード")` (L3505)

Handles "Hidden Selection Type Number Code" (隠し選択型番号コード) scalar field. Data type is String.

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

### Block 35 — IF `key.equals("隠しSTB区分コード")` (L3512)

Handles "Hidden STB Division Code" (隠しSTB区分コード) scalar field. Data type is String.

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

### Block 36 — IF `key.equals("隠しR")` (L3519)

Handles "Hidden R" (隠しR) scalar field. **Exception pattern** — R field itself is Boolean.

**Block 36.1** — IF `subkey.equalsIgnoreCase("value")` (L3520)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return Boolean.class;` |

**Block 36.2** — ELSE-IF `subkey.equalsIgnoreCase("enable")` (L3522)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return Boolean.class;` |

**Block 36.3** — ELSE-IF `subkey.equalsIgnoreCase("state")` (L3525)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` |

### Block 37 — IF `key.equals("隠しHDD容量コード")` (L3532)

Handles "Hidden HDD Capacity Code" (隠しHDD容量コード) scalar field. Data type is String.

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

### Block 38 — IF `key.equals("隠しTVコースコード")` (L3539)

Handles "Hidden TV Course Code" (隠しTVコースコード) scalar field. Data type is String.

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

### Block 39 — IF `key.equals("一覧のスタイル制御")` (L3546)

Handles "List Style Control" (一覧のスタイル制御) scalar field. Data type is String.

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

### Block 40 — IF `key.equals("BCAS ID")` (L3553)

Handles "BCAS ID" scalar field. Data type is String. BCAS is the Broadband Content Protection System used for encrypted broadcasting.

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

### Block 41 — IF `key.equals("CCAS ID")` (L3560)

Handles "CCAS ID" scalar field. Data type is String. CCAS is the CableCard Access System used for conditional access.

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

### Block 42 — IF `key.equals("STB異動区分")` (L3568)

List-type field: "STB Migration Classification" (STB異動区分). This is a repeating list of STB migration items. The key carries a slash-delimited path for index-based access.

**Block 42.1** — SET `keyRemain = key.substring(separaterPoint + 1)` (L3571)
> keyの次の要素を取得 (Get the next element after the first "/")
| # | Type | Code |
|---|------|------|
| 1 | SET | `keyRemain = key.substring(separaterPoint + 1);` // Extract remainder after first slash |

**Block 42.2** — IF `keyRemain.equals("*")` (L3573)
> インデックス値の代わりに"*"が指定されていたら、リストの要素数を返す (If "*" is specified instead of an index value, return the number of list elements)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return Integer.class;` |

**Block 42.3** — SET `separaterPoint = keyRemain.indexOf("/")` (L3575)
> 次の区切り記号を検索する (Search for the next separator)
| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = keyRemain.indexOf("/");` |

**Block 42.4** — IF `separaterPoint <= 0` (L3576)
> 区切り記号が見つからない、または不正な場合はnullを返す (If no separator is found or it is invalid, return null)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` |

**Block 42.5** — SET `key = keyRemain.substring(0, separaterPoint)` (L3578)
> keyにインデックス文字列を代入 (Assign index string to key)
| # | Type | Code |
|---|------|------|
| 1 | SET | `key = keyRemain.substring(0, separaterPoint);` |

**Block 42.6** — TRY: `Integer tmpIndexInt = Integer.valueOf(key)` (L3582)
> リスト中のインデックスを見る (Examine the index in the list)
| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpIndexInt = Integer.valueOf(key);` |

**Block 42.7** — CATCH `NumberFormatException e` (L3586)
> インデックス値が数値文字列でない場合はnullを返す (If the index value is not a numeric string, return null)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` |

**Block 42.8** — IF `tmpIndexInt == null` (L3588)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` |

**Block 42.9** — SET `tmpIndex = tmpIndexInt.intValue()` (L3591)
| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpIndex = tmpIndexInt.intValue();` |

**Block 42.10** — IF `tmpIndex < 0 || tmpIndex >= stb_ido_div_list.size()` (L3592)
> インデックス値がリスト個数-1を超えたらnullを返す (If the index value exceeds list count - 1, return null)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` |

**Block 42.11** — SET `key = keyRemain.substring(separaterPoint + 1)` (L3595)
> 項目名を生成 (Generate the property name)
| # | Type | Code |
|---|------|------|
| 1 | SET | `key = keyRemain.substring(separaterPoint + 1);` |
| 2 | CALL | `((X33VDataTypeBeanInterface)stb_ido_div_list.get(tmpIndex)).typeModelData(key, subkey);` // Delegate to list element |

### Block 43 — IF `key.equals("選択型番号")` (L3603)

List-type field: "Selection Type Number" (選択型番号). Same pattern as Block 42 but delegates to `sel_type_number_list`.

**Block 43.1** — SET `keyRemain = key.substring(separaterPoint + 1)` (L3605)
| # | Type | Code |
|---|------|------|
| 1 | SET | `keyRemain = key.substring(separaterPoint + 1);` |

**Block 43.2** — IF `keyRemain.equals("*")` (L3607)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return Integer.class;` |

**Block 43.3** — SET `separaterPoint = keyRemain.indexOf("/")` (L3609)
| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = keyRemain.indexOf("/");` |

**Block 43.4** — IF `separaterPoint <= 0` (L3610)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` |

**Block 43.5** — SET `key = keyRemain.substring(0, separaterPoint)` (L3612)
| # | Type | Code |
|---|------|------|
| 1 | SET | `key = keyRemain.substring(0, separaterPoint);` |

**Block 43.6** — TRY: `Integer tmpIndexInt = Integer.valueOf(key)` (L3615)
| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpIndexInt = Integer.valueOf(key);` |

**Block 43.7** — CATCH `NumberFormatException e` (L3619)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` |

**Block 43.8** — IF `tmpIndexInt == null` (L3621)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` |

**Block 43.9** — SET `tmpIndex = tmpIndexInt.intValue()` (L3624)
| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpIndex = tmpIndexInt.intValue();` |

**Block 43.10** — IF `tmpIndex < 0 || tmpIndex >= sel_type_number_list.size()` (L3625)
| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` |

**Block 43.11** — SET `key = keyRemain.substring(separaterPoint + 1)` (L3628)
| # | Type | Code |
|---|------|------|
| 1 | SET | `key = keyRemain.substring(separaterPoint + 1);` |
| 2 | CALL | `((X33VDataTypeBeanInterface)sel_type_number_list.get(tmpIndex)).typeModelData(key, subkey);` |

### Block 44 — IF `key.equals("STB区分")` (L3635)

List-type field: "STB Division" (STB区分). Delegates to `stb_div_list`.

| # | Type | Code |
|---|------|------|
| 1-7 | (Same pattern as Block 42.1 - 42.10) | Index parsing, bounds check, property name extraction |
| 8 | CALL | `((X33VDataTypeBeanInterface)stb_div_list.get(tmpIndex)).typeModelData(key, subkey);` |

### Block 45 — IF `key.equals("HDD容量")` (L3651)

List-type field: "HDD Capacity" (HDD容量). Delegates to `hdd_capa_list`.

| # | Type | Code |
|---|------|------|
| 1-7 | (Same pattern as Block 42.1 - 42.10) | Index parsing, bounds check, property name extraction |
| 8 | CALL | `((X33VDataTypeBeanInterface)hdd_capa_list.get(tmpIndex)).typeModelData(key, subkey);` |

### Block 46 — IF `key.equals("TVコース")` (L3667)

List-type field: "TV Course" (TVコース). Delegates to `tv_course_list`.

| # | Type | Code |
|---|------|------|
| 1-7 | (Same pattern as Block 42.1 - 42.10) | Index parsing, bounds check, property name extraction |
| 8 | CALL | `((X33VDataTypeBeanInterface)tv_course_list.get(tmpIndex)).typeModelData(key, subkey);` |

### Block 47 — IF `key.equals("予約TVコースコード")` (L3684)

Handles "Reserved TV Course Code" (予約TVコースコード) scalar field. Data type is String.

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

### Block 48 — IF `key.equals("機器最低利用期間")` (L3692)

Handles "Machine Minimum Usage Period" (機器最低利用期間) scalar field. Added per ANK-2198-00-00 (L3691, L3702). Data type is String.

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

### Block 49 — ELSE (No Match) (L3705)

No matching key found in any of the conditional branches.
> 条件に一致するプロパティが存在しない場合は、nullを返す (If no matching property exists, return null)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| STB | Business term | Set-Top Box — a device that receives and decodes television signals for display |
| STBID | Field | STB ID — unique identifier assigned to a specific Set-Top Box unit |
| STB異動区分 (stb_ido_div) | Field | STB Migration Classification — classifies the type of STB change (e.g., replacement, upgrade, transfer) |
| STB区分 (stb_div) | Field | STB Division — categorizes the STB by type or function |
| 選択型番号コード (sel_type_number_cd) | Field | Selection Type Number Code — code identifying a selectable equipment model variant |
| VONUNS | Business term | Voice Over New Universal Service — VoIP service over fiber network |
| VONUNSパススルー可否 | Field | VONUNS Passthrough Availability — whether the STB supports passthrough of VONUNS traffic |
| HDD有無 (hdd_um) | Field | HDD Presence/Absence — boolean indicator of whether the device has an HDD |
| HDD容量コード (hdd_capa_cd) | Field | HDD Capacity Code — code representing the hard disk drive storage capacity tier |
| TVコースコード (tv_course_cd) | Field | TV Course Code — code for the television channel package/course subscription |
| R | Field | R — a boolean flag field (likely representing a retention, reservation, or rating indicator) |
| 変更前 (before_change) | Domain prefix | Japanese for "before change" — prefix used for snapshot fields that capture the pre-modification state of an item during a contract change operation |
| 隠し (hidden) | Domain prefix | Japanese for "hidden" — prefix used for UI fields that exist in the model but are rendered as hidden inputs (not visible to the user) |
| 機器提供サービス契約番号 (kktk_svc_kei_no) | Field | Machine Provision Service Contract Number — the contract number for equipment provision services |
| 宅内機器型式 (taknkiki_model) | Field | Indoor Equipment Model — the model type of indoor customer premises equipment |
| 宅内機器種別コード (taknkiki_sbt_cd) | Field | Indoor Equipment Type Code — code classifying the type of indoor equipment |
| 機器提供種別コード (kktk_sbt_cd) | Field | Machine Provision Type Code — code classifying the type of machine/service provision |
| 機器製造番号 (kiki_seizo_no) | Field | Machine Serial Number — manufacturing serial number of the equipment |
| サービス契約内訳番号 (svc_kei_ucwk_no) | Field | Service Contract Breakdown Number — internal tracking ID for service contract line items |
| 世代登録年月日時分秒 (gene_add_dtm) | Field | Generation Registration DateTime — timestamp when a new generation/version of data was registered |
| 機器提供更新年月日時分秒 (kktk_upd_dtm) | Field | Machine Provision Update DateTime — timestamp when equipment provision data was last updated |
| サービス契約内訳更新年月日時分秒 (svc_kei_ucwk_upd_dtm) | Field | Service Contract Breakdown Update DateTime — timestamp when contract line item data was last updated |
| 一覧のスタイル制御 (list_style) | Field | List Style Control — controls the visual rendering style of list/table displays |
| BCAS ID | Field | BCAS ID — Broadband Content Protection System identifier for encrypted content access |
| CCAS ID | Field | CCAS ID — CableCard Access System identifier for conditional access module |
| 予約TVコースコード (rsv_tv_course_cd) | Field | Reserved TV Course Code — code for a reserved/pending TV course subscription |
| 機器最低利用期間 (kiki_min_use_prd) | Field | Machine Minimum Usage Period — minimum contract/usage period required for the equipment |
| X33VDataTypeBeanInterface | Technical interface | Interface contract that list element beans implement, exposing `typeModelData` for recursive type resolution |
| X33VDataTypeList | Technical class | Collection class holding dynamically-sized list of data type beans for repeating form fields |
| X33SException | Technical class | Custom exception class used for screen-level exception handling |
| ANK-2530-00-00 | Change ticket | Change request ticket number for the "変更前TVコースコード?カレント" field addition |
| ANK-2198-00-00 | Change ticket | Change request ticket number for the "機器最低利用期間" field addition |
