# Business Logic — KKW05501SF03DBean.loadModelData() [244 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKW05501SF.KKW05501SF03DBean` |
| Layer | Service Component / DTO Bean (web presentation layer, data routing/dispatch) |
| Module | `KKW05501SF` (Package: `eo.web.webview.KKW05501SF`) |

## 1. Role

### KKW05501SF03DBean.loadModelData()

This method serves as the central data-access gateway for the KKW05501SF screen bean, implementing a routing/dispatch (or switchboard) pattern that maps high-level field identifiers to their underlying data values or validation states. It handles 17 distinct data types used across the telecom service migration/order screen — a system for managing customer service contract migrations, including new registrations, modifications, and cancellations. For simple (scalar) fields, the method delegates to a dedicated pair of getters (`getHktgi_*_value` and `getHktgi_*_state`), where the former returns the field's current data value and the latter returns its validation/display state. For list-based fields — specifically migration reason codes, optional service contract numbers, and simultaneous application service contract numbers — the method provides indexed list access, supporting wildcard ("*") queries for list size retrieval and integer-indexed access for individual element retrieval via delegation to nested `X33VDataTypeStringBean` instances. The method acts as a shared utility called by the screen controller during load and render phases, enabling the presentation layer to retrieve any field's data or state through a single, uniform entry point without needing to know the internal bean structure.

## 2. Processing Pattern (Detailed Business Logic)

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

    START --> CHECK_NULL["Check: key or subkey is null"]
    CHECK_NULL -->|Yes| RETURN_NULL["Return null"]
    CHECK_NULL -->|No| FIND_SEP["Find slash separator in key"]
    FIND_SEP --> BRANCH_SYSID["Check: key equals SISID"]

    BRANCH_SYSID -->|Yes| SYSID_SUB["Check: subkey equals value or state"]
    SYSID_SUB -->|value| CALL_SYSID_VAL["Call getHktgi_sysid_value"]
    SYSID_SUB -->|state| CALL_SYSID_STATE["Call getHktgi_sysid_state"]
    CALL_SYSID_VAL --> END_RET["Return result"]
    CALL_SYSID_STATE --> END_RET

    BRANCH_SYSID -->|No| BRANCH_SVC["Check: key equals Service Contract No"]
    BRANCH_SVC -->|Yes| SVC_SUB["Check: subkey equals value or state"]
    SVC_SUB -->|value| CALL_SVC_VAL["Call getHktgi_svc_kei_no_value"]
    SVC_SUB -->|state| CALL_SVC_STATE["Call getHktgi_svc_kei_no_state"]
    CALL_SVC_VAL --> END_RET
    CALL_SVC_STATE --> END_RET

    BRANCH_SVC -->|No| BRANCH_IDO["Check: key equals Migration Div"]
    BRANCH_IDO -->|Yes| IDO_SUB["Check: subkey equals value or state"]
    IDO_SUB -->|value| CALL_IDO_VAL["Call getHktgi_ido_div_value"]
    IDO_SUB -->|state| CALL_IDO_STATE["Call getHktgi_ido_div_state"]
    CALL_IDO_VAL --> END_RET
    CALL_IDO_STATE --> END_RET

    BRANCH_IDO -->|No| BRANCH_RSN["Check: key equals Migration Reason Code"]
    BRANCH_RSN -->|Yes| RS_INDEX["Check: index equals star"]
    RS_INDEX -->|Yes| CALL_RSN_SIZE["Return hktgi_ido_rsn_cd_list size"]
    RS_INDEX -->|No| RS_PARSE["Parse index as Integer"]
    RS_PARSE --> RS_VALID["Validate index bounds"]
    RS_VALID -->|Out of bounds| RETURN_NULL
    RS_VALID -->|Valid| CALL_CHILD["Get item from list, call child loadModelData"]
    CALL_CHILD --> END_RET

    BRANCH_RSN -->|No| BRANCH_MEMO["Check: key equals Migration Reason Memo"]
    BRANCH_MEMO -->|Yes| MEMO_SUB["Check: subkey equals value or state"]
    MEMO_SUB -->|value| CALL_MEMO_VAL["Call getHktgi_ido_rsn_memo_value"]
    MEMO_SUB -->|state| CALL_MEMO_STATE["Call getHktgi_ido_rsn_memo_state"]
    CALL_MEMO_VAL --> END_RET
    CALL_MEMO_STATE --> END_RET

    BRANCH_MEMO -->|No| BRANCH_OPT["Check: key equals Option Service Contract No"]
    BRANCH_OPT -->|Yes| OPT_INDEX["Check: index equals star"]
    OPT_INDEX -->|Yes| CALL_OPT_SIZE["Return hktgi_op_svc_kei_no_list size"]
    OPT_INDEX -->|No| OPT_PARSE["Parse index as Integer"]
    OPT_PARSE --> OPT_VALID["Validate index bounds"]
    OPT_VALID -->|Out of bounds| RETURN_NULL
    OPT_VALID -->|Valid| CALL_CHILD_OPT["Get item from list, call child loadModelData"]
    CALL_CHILD_OPT --> END_RET

    BRANCH_OPT -->|No| BRANCH_TRN["Check: key equals Processing Div"]
    BRANCH_TRN -->|Yes| TRN_SUB["Check: subkey equals value or state"]
    TRN_SUB -->|value| CALL_TRN_VAL["Call getHktgi_tran_div_value"]
    TRN_SUB -->|state| CALL_TRN_STATE["Call getHktgi_tran_div_state"]
    CALL_TRN_VAL --> END_RET
    CALL_TRN_STATE --> END_RET

    BRANCH_TRN -->|No| BRANCH_MSKM["Check: key equals Application No"]
    BRANCH_MSKM -->|Yes| MSK_SUB["Check: subkey equals value or state"]
    MSK_SUB -->|value| CALL_MSKM_VAL["Call getHktgi_mskm_no_value"]
    MSK_SUB -->|state| CALL_MSKM_STATE["Call getHktgi_mskm_no_state"]
    CALL_MSKM_VAL --> END_RET
    CALL_MSKM_STATE --> END_RET

    BRANCH_MSKM -->|No| BRANCH_DTL["Check: key equals Application Detail No"]
    BRANCH_DTL -->|Yes| DT_SUB["Check: subkey equals value or state"]
    DT_SUB -->|value| CALL_DTL_VAL["Call getHktgi_mskm_dtl_no_value"]
    DT_SUB -->|state| CALL_DTL_STATE["Call getHktgi_mskm_dtl_no_state"]
    CALL_DTL_VAL --> END_RET
    CALL_DTL_STATE --> END_RET

    BRANCH_DTL -->|No| BRANCH_TOK1["Check: key equals Specific ID Field Name"]
    BRANCH_TOK1 -->|Yes| TOK1_SUB["Check: subkey equals value or state"]
    TOK1_SUB -->|value| CALL_TOK1_VAL["Call getHktgi_tokutei_id_kmk_nm_value"]
    TOK1_SUB -->|state| CALL_TOK1_STATE["Call getHktgi_tokutei_id_kmk_nm_state"]
    CALL_TOK1_VAL --> END_RET
    CALL_TOK1_STATE --> END_RET

    BRANCH_TOK1 -->|No| BRANCH_TOK2["Check: key equals Specific ID Field Value"]
    BRANCH_TOK2 -->|Yes| TOK2_SUB["Check: subkey equals value or state"]
    TOK2_SUB -->|value| CALL_TOK2_VAL["Call getHktgi_tokutei_id_kmk_value_value"]
    TOK2_SUB -->|state| CALL_TOK2_STATE["Call getHktgi_tokutei_id_kmk_value_state"]
    CALL_TOK2_VAL --> END_RET
    CALL_TOK2_STATE --> END_RET

    BRANCH_TOK2 -->|No| BRANCH_POP["Check: key equals Popup Mode"]
    BRANCH_POP -->|Yes| POP_SUB["Check: subkey equals value or state"]
    POP_SUB -->|value| CALL_POP_VAL["Call getHktgi_popup_mode_value"]
    POP_SUB -->|state| CALL_POP_STATE["Call getHktgi_popup_mode_state"]
    CALL_POP_VAL --> END_RET
    CALL_POP_STATE --> END_RET

    BRANCH_POP -->|No| BRANCH_MSKM_SVC["Check: key equals Simultaneous App Service Contract No"]
    BRANCH_MSKM_SVC -->|Yes| MSKM_SVC_INDEX["Check: index equals star"]
    MSKM_SVC_INDEX -->|Yes| CALL_MSKM_SVC_SIZE["Return hktgi_mskm_svc_kei_no_list size"]
    MSKM_SVC_INDEX -->|No| MSKM_SVC_PARSE["Parse index as Integer"]
    MSKM_SVC_PARSE --> MSKM_SVC_VALID["Validate index bounds"]
    MSKM_SVC_VALID -->|Out of bounds| RETURN_NULL
    MSKM_SVC_VALID -->|Valid| CALL_CHILD_MSKM_SVC["Get item from list, call child loadModelData"]
    CALL_CHILD_MSKM_SVC --> END_RET

    BRANCH_MSKM_SVC -->|No| BRANCH_MANS["Check: key equals Mansion Name"]
    BRANCH_MANS -->|Yes| MANS_SUB["Check: subkey equals value or state"]
    MANS_SUB -->|value| CALL_MANS_VAL["Call getHktgi_mans_nm_value"]
    MANS_SUB -->|state| CALL_MANS_STATE["Call getHktgi_mans_nm_state"]
    CALL_MANS_VAL --> END_RET
    CALL_MANS_STATE --> END_RET

    BRANCH_MANS -->|No| BRANCH_AD["Check: key equals Address"]
    BRANCH_AD -->|Yes| AD_SUB["Check: subkey equals value or state"]
    AD_SUB -->|value| CALL_AD_VAL["Call getHktgi_mans_ad_nm_value"]
    AD_SUB -->|state| CALL_AD_STATE["Call getHktgi_mans_ad_nm_state"]
    CALL_AD_VAL --> END_RET
    CALL_AD_STATE --> END_RET

    BRANCH_AD -->|No| BRANCH_PID["Check: key equals H-ID"]
    BRANCH_PID -->|Yes| PID_SUB["Check: subkey equals value or state"]
    PID_SUB -->|value| CALL_PID_VAL["Call getHktgi_pid_value"]
    PID_SUB -->|state| CALL_PID_STATE["Call getHktgi_pid_state"]
    CALL_PID_VAL --> END_RET
    CALL_PID_STATE --> END_RET

    BRANCH_PID -->|No| BRANCH_MID["Check: key equals M-ID"]
    BRANCH_MID -->|Yes| MID_SUB["Check: subkey equals value or state"]
    MID_SUB -->|value| CALL_MID_VAL["Call getHktgi_mans_id_value"]
    MID_SUB -->|state| CALL_MID_STATE["Call getHktgi_mans_id_state"]
    CALL_MID_VAL --> END_RET
    CALL_MID_STATE --> END_RET

    BRANCH_MID -->|No| BRANCH_CID["Check: key equals C-T-ID"]
    BRANCH_CID -->|Yes| CID_SUB["Check: subkey equals value or state"]
    CID_SUB -->|value| CALL_CID_VAL["Call getHktgi_catid_value"]
    CID_SUB -->|state| CALL_CID_STATE["Call getHktgi_catid_state"]
    CALL_CID_VAL --> END_RET
    CALL_CID_STATE --> END_RET

    BRANCH_CID -->|No| BRANCH_NO_MATCH["No matching key found"]
    BRANCH_NO_MATCH --> RETURN_NULL
    END_RET --> FINISH(["Return data"])
```

**Processing Summary:**

1. **Null Guard** (lines 545-548): If either `key` or `subkey` is `null`, return `null` immediately. This is a null-safety guard preventing downstream NPEs.
2. **Separator Discovery** (lines 550): Compute the position of `/` in the key string. This separator enables list-type keys (e.g., "異動理由コード/0", "異動理由コード/*") to extract the index portion after the slash.
3. **Key-Based Routing** (lines 553-780): A chain of 17 `if/else-if` branches dispatches to different data types based on the `key` value. Each branch checks `subkey` for `"value"` (data value) or `"state"` (validation/display state) and delegates to the appropriate getter.
4. **List-Type Indexed Access** (lines 591-603, 624-640, 705-727): Three keys (異動理由コード, オプションサービス契約番号, 同時申込サービス契約番号) support dynamic list access. The index after the `/` separator is either `"*"` (returns list size) or a parsed integer (returns child bean at that index, forwarding the subkey to the child's `loadModelData`).
5. **Fallback** (line 781): If no branch matches, return `null`.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | The field name (項目名) identifying which screen data element to access. Can be a simple scalar field name (e.g., "SISID", "サービス契約番号") or a list-type key with an optional index suffix separated by "/" (e.g., "異動理由コード/0" or "異動理由コード/*"). Determines which of the 17 data-type branches to take. |
| 2 | `subkey` | `String` | The accessor type specifying whether to retrieve the data `"value"` or the validation/display `"state"` of the identified field. Case-insensitive comparison. For list-type items, this is forwarded to the child bean's `loadModelData`. |

**Instance fields read by this method:**

| Field | Type | Business Description |
|-------|------|---------------------|
| `hktgi_sysid` | String | System ID field for the migration data |
| `hktgi_svc_kei_no` | String | Service contract number |
| `hktgi_ido_div` | String | Migration classification code |
| `hktgi_ido_rsn_cd_list` | List<X33VDataTypeStringBean> | List of migration reason codes (array-based item) |
| `hktgi_ido_rsn_memo` | String | Migration reason memo text |
| `hktgi_op_svc_kei_no_list` | List<X33VDataTypeStringBean> | List of optional service contract numbers |
| `hktgi_tran_div` | String | Processing classification code |
| `hktgi_mskm_no` | String | Application number |
| `hktgi_mskm_dtl_no` | String | Application detail number |
| `hktgi_tokutei_id_kmk_nm` | String | Specific ID field name |
| `hktgi_tokutei_id_kmk_value` | String | Specific ID field value |
| `hktgi_popup_mode` | String | Popup mode flag |
| `hktgi_mskm_svc_kei_no_list` | List<X33VDataTypeStringBean> | List of simultaneous application service contract numbers |
| `hktgi_mans_nm` | String | Mansion name |
| `hktgi_mans_ad_nm` | String | Address |
| `hktgi_pid` | String | H-ID (property holder ID) |
| `hktgi_mans_id` | String | M-ID (mansion ID) |
| `hktgi_catid` | String | C-T-ID (category type ID) |

## 4. CRUD Operations / Called Services

### Pre-computed evidence from code analysis graph:

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `getHktgi_sysid_value` | KKW05501SF03DBean | - | Returns the system ID data value |
| R | `getHktgi_sysid_state` | KKW05501SF03DBean | - | Returns the system ID validation/display state |
| R | `getHktgi_svc_kei_no_value` | KKW05501SF03DBean | - | Returns the service contract number data value |
| R | `getHktgi_svc_kei_no_state` | KKW05501SF03DBean | - | Returns the service contract number validation/display state |
| R | `getHktgi_ido_div_value` | KKW05501SF03DBean | - | Returns the migration classification code data value |
| R | `getHktgi_ido_div_state` | KKW05501SF03DBean | - | Returns the migration classification code validation/display state |
| R | `getHktgi_ido_rsn_memo_value` | KKW05501SF03DBean | - | Returns the migration reason memo data value |
| R | `getHktgi_ido_rsn_memo_state` | KKW05501SF03DBean | - | Returns the migration reason memo validation/display state |
| R | `getHktgi_tran_div_value` | KKW05501SF03DBean | - | Returns the processing classification code data value |
| R | `getHktgi_tran_div_state` | KKW05501SF03DBean | - | Returns the processing classification code validation/display state |
| R | `getHktgi_mskm_no_value` | KKW05501SF03DBean | - | Returns the application number data value |
| R | `getHktgi_mskm_no_state` | KKW05501SF03DBean | - | Returns the application number validation/display state |
| R | `getHktgi_mskm_dtl_no_value` | KKW05501SF03DBean | - | Returns the application detail number data value |
| R | `getHktgi_mskm_dtl_no_state` | KKW05501SF03DBean | - | Returns the application detail number validation/display state |
| R | `getHktgi_tokutei_id_kmk_nm_value` | KKW05501SF03DBean | - | Returns the specific ID field name data value |
| R | `getHktgi_tokutei_id_kmk_nm_state` | KKW05501SF03DBean | - | Returns the specific ID field name validation/display state |
| R | `getHktgi_tokutei_id_kmk_value_value` | KKW05501SF03DBean | - | Returns the specific ID field value data value |
| R | `getHktgi_tokutei_id_kmk_value_state` | KKW05501SF03DBean | - | Returns the specific ID field value validation/display state |
| R | `getHktgi_popup_mode_value` | KKW05501SF03DBean | - | Returns the popup mode data value |
| R | `getHktgi_popup_mode_state` | KKW05501SF03DBean | - | Returns the popup mode validation/display state |
| R | `getHktgi_mans_nm_value` | KKW05501SF03DBean | - | Returns the mansion name data value |
| R | `getHktgi_mans_nm_state` | KKW05501SF03DBean | - | Returns the mansion name validation/display state |
| R | `getHktgi_mans_ad_nm_value` | KKW05501SF03DBean | - | Returns the address data value |
| R | `getHktgi_mans_ad_nm_state` | KKW05501SF03DBean | - | Returns the address validation/display state |
| R | `getHktgi_pid_value` | KKW05501SF03DBean | - | Returns the H-ID data value |
| R | `getHktgi_pid_state` | KKW05501SF03DBean | - | Returns the H-ID validation/display state |
| R | `getHktgi_mans_id_value` | KKW05501SF03DBean | - | Returns the M-ID data value |
| R | `getHktgi_mans_id_state` | KKW05501SF03DBean | - | Returns the M-ID validation/display state |
| R | `getHktgi_catid_value` | KKW05501SF03DBean | - | Returns the C-T-ID data value |
| R | `getHktgi_catid_state` | KKW05501SF03DBean | - | Returns the C-T-ID validation/display state |
| R | `X33VDataTypeStringBean.loadModelData` | X33VDataTypeStringBean | - | Child bean load — forwards subkey to nested list item |

**Classification:** All operations are **R** (Read). This method is a pure data retrieval gateway — it never modifies data, performs DB queries, or invokes CBS/SC components. It reads from in-memory bean fields and delegates to other bean getters.

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | `KKW05501SF03DBean` (internal) | `KKW05501SF03DBean.loadModelData()` (no-arg overload) -> `KKW05501SF03DBean.loadModelData(String key, String subkey)` | All 29 getter methods listed in Section 4 |

**Notes:** The only documented caller is an overloaded zero-argument version of `loadModelData` within the same class, which likely iterates over known field names and delegates to this parameterized version. No external screens, batches, or CBS components call this method directly — it is an internal bean data accessor.

## 6. Per-Branch Detail Blocks

**Block 1** — IF (null guard) `(key == null || subkey == null)` (L545)

> Guard clause: if either parameter is null, return null immediately to prevent downstream NPEs.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` // key or subkey is null — return null (key, subkey がnullの場合、nullを返す) |

**Block 2** — SET (separator discovery) (L550)

> Locate the "/" character in the key string. Used later by list-type keys to extract the index portion after the separator.

| # | Type | Code |
|---|------|------|
| 1 | SET | `int separaterPoint = key.indexOf("/");` // find separator position (keyの次の要素を取得する) |

**Block 3** — IF/ELSE-IF chain — Key: SISID (System ID) `[項目ID:hktgi_sysid]` (L553)

> Branch for the simple scalar field "SISID" — the system identifier for migration data.

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("SISID")` // data type is SISID (データタイプがStringの項目"SISID"（項目ID:hktgi_sysid）) |

**Block 3.1** — ELSE-IF — Key: Service Contract No `[サービス契約番号:hktgi_svc_kei_no]` (L565)

> Branch for the service contract number field.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("サービス契約番号")` // data type is service contract number (データタイプがStringの項目"サービス契約番号"（項目ID:hktgi_svc_kei_no）) |

**Block 3.2** — ELSE-IF — Key: Migration Div `[異動区分:hktgi_ido_div]` (L577)

> Branch for the migration classification code field.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("異動区分")` // data type is migration div (データタイプがStringの項目"異動区分"（項目ID:hktgi_ido_div）) |

**Block 3.3** — ELSE-IF — Key: Migration Reason Code `[異動理由コード:hktgi_ido_rsn_cd]` — LIST-TYPE (L589)

> Branch for a dynamic list of migration reason codes. This is a LIST-TYPE field that supports array-based items (配列項目). The key contains a slash-separated index after the field name. Supports `"*"` for list size and integer indices for element access.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("異動理由コード")` // list item, type String (配列項目 "異動理由コード"(String型。項目ID:hktgi_ido_rsn_cd)) |
| 2 | SET | `key = key.substring(separaterPoint + 1);` // extract the next element after "/" (keyの次の要素を取得) |
| 3 | IF | `key.equals("*")` // wildcard — return list size (インデックス値の代わりに"*"が指定されていたら、リストの要素数を返す) |
| 4 | SET | `return Integer.valueOf(hktgi_ido_rsn_cd_list.size());` // list size |
| 5 | ELSE | // try to parse index as integer (次のリスト中のインデックスを見る) |
| 6 | SET | `Integer tmpIndexInt = null;` |
| 7 | TRY | `tmpIndexInt = Integer.valueOf(key);` // parse index (インデックス値が数値文字列でない場合は、ここでnullを返す) |
| 8 | CATCH | `catch(NumberFormatException e) { return null; }` // non-numeric index returns null |
| 9 | IF | `if (tmpIndexInt == null) { return null; }` |
| 10 | SET | `int tmpIndex = tmpIndexInt.intValue();` |
| 11 | IF | `if (tmpIndex < 0 || tmpIndex >= hktgi_ido_rsn_cd_list.size()) { return null; }` // index out of bounds (インデックス値がリスト個数-1を超えると、ここでnullを返す) |
| 12 | RETURN | `return ((X33VDataTypeStringBean)hktgi_ido_rsn_cd_list.get(tmpIndex)).loadModelData(subkey);` // delegate to child bean |

**Block 3.4** — ELSE-IF — Key: Migration Reason Memo `[異動理由メモ:hktgi_ido_rsn_memo]` (L607)

> Branch for the free-text migration reason memo field.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("異動理由メモ")` // data type is migration reason memo (データタイプがStringの項目"異動理由メモ"（項目ID:hktgi_ido_rsn_memo）) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` -> `return getHktgi_ido_rsn_memo_value();` |
| 3 | ELSE_IF | `subkey.equalsIgnoreCase("state")` -> `return getHktgi_ido_rsn_memo_state();` // subkey is "state" — return state (subkeyが"state"の場合、ステータスを返す) |

**Block 3.5** — ELSE-IF — Key: Option Service Contract No `[オプションサービス契約番号:hktgi_op_svc_kei_no]` — LIST-TYPE (L619)

> Branch for a dynamic list of optional service contract numbers. Same indexed-access pattern as Block 3.3.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("オプションサービス契約番号")` // list item, type String (配列項目 "オプションサービス契約番号"(String型。項目ID:hktgi_op_svc_kei_no)) |
| 2 | SET | `key = key.substring(separaterPoint + 1);` // extract element after "/" |
| 3 | IF | `key.equals("*")` -> `return Integer.valueOf(hktgi_op_svc_kei_no_list.size());` // list size |
| 4 | ELSE | // parse index as integer |
| 5 | TRY | `tmpIndexInt = Integer.valueOf(key);` |
| 6 | CATCH | `catch(NumberFormatException e) { return null; }` |
| 7 | IF | `if (tmpIndexInt == null) { return null; }` |
| 8 | SET | `int tmpIndex = tmpIndexInt.intValue();` |
| 9 | IF | `if (tmpIndex < 0 || tmpIndex >= hktgi_op_svc_kei_no_list.size()) { return null; }` // out of bounds |
| 10 | RETURN | `return ((X33VDataTypeStringBean)hktgi_op_svc_kei_no_list.get(tmpIndex)).loadModelData(subkey);` // delegate to child bean |

**Block 3.6** — ELSE-IF — Key: Processing Div `[処理区分:hktgi_tran_div]` (L645)

> Branch for the processing classification code field.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("処理区分")` // data type is processing div (データタイプがStringの項目"処理区分"（項目ID:hktgi_tran_div）) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` -> `return getHktgi_tran_div_value();` |
| 3 | ELSE_IF | `subkey.equalsIgnoreCase("state")` -> `return getHktgi_tran_div_state();` // subkey is "state" (subkeyが"state"の場合、ステータスを返す) |

**Block 3.7** — ELSE-IF — Key: Application No `[申込番号:hktgi_mskm_no]` (L657)

> Branch for the application number field.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("申込番号")` // data type is application no (データタイプがStringの項目"申込番号"（項目ID:hktgi_mskm_no）) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` -> `return getHktgi_mskm_no_value();` |
| 3 | ELSE_IF | `subkey.equalsIgnoreCase("state")` -> `return getHktgi_mskm_no_state();` // subkey is "state" |

**Block 3.8** — ELSE-IF — Key: Application Detail No `[申込明細番号:hktgi_mskm_dtl_no]` (L669)

> Branch for the application detail number field.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("申込明細番号")` // data type is application detail no (データタイプがStringの項目"申込明細番号"（項目ID:hktgi_mskm_dtl_no）) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` -> `return getHktgi_mskm_dtl_no_value();` |
| 3 | ELSE_IF | `subkey.equalsIgnoreCase("state")` -> `return getHktgi_mskm_dtl_no_state();` // subkey is "state" |

**Block 3.9** — ELSE-IF — Key: Specific ID Field Name `[特定ID項目名:hktgi_tokutei_id_kmk_nm]` (L681)

> Branch for the specific ID field name (used in telecom service identification).

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("特定ID項目名")` // data type is specific ID field name (データタイプがStringの項目"特定ID項目名"（項目ID:hktgi_tokutei_id_kmk_nm）) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` -> `return getHktgi_tokutei_id_kmk_nm_value();` |
| 3 | ELSE_IF | `subkey.equalsIgnoreCase("state")` -> `return getHktgi_tokutei_id_kmk_nm_state();` // subkey is "state" |

**Block 3.10** — ELSE-IF — Key: Specific ID Field Value `[特定ID項目値:hktgi_tokutei_id_kmk_value]` (L693)

> Branch for the specific ID field value.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("特定ID項目値")` // data type is specific ID field value (データタイプがStringの項目"特定ID項目値"（項目ID:hktgi_tokutei_id_kmk_value）) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` -> `return getHktgi_tokutei_id_kmk_value_value();` |
| 3 | ELSE_IF | `subkey.equalsIgnoreCase("state")` -> `return getHktgi_tokutei_id_kmk_value_state();` // subkey is "state" |

**Block 3.11** — ELSE-IF — Key: Popup Mode `[ポップアップモード:hktgi_popup_mode]` (L705)

> Branch for the popup mode flag controlling UI behavior.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("ポップアップモード")` // data type is popup mode (データタイプがStringの項目"ポップアップモード"（項目ID:hktgi_popup_mode）) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` -> `return getHktgi_popup_mode_value();` |
| 3 | ELSE_IF | `subkey.equalsIgnoreCase("state")` -> `return getHktgi_popup_mode_state();` // subkey is "state" |

**Block 3.12** — ELSE-IF — Key: Simultaneous App Service Contract No `[同時申込サービス契約番号:hktgi_mskm_svc_kei_no]` — LIST-TYPE (L717)

> Branch for a dynamic list of simultaneous application service contract numbers. Same indexed-access pattern as Block 3.3 and 3.5.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("同時申込サービス契約番号")` // list item, type String (配列項目 "同時申込サービス契約番号"(String型。項目ID:hktgi_mskm_svc_kei_no)) |
| 2 | SET | `key = key.substring(separaterPoint + 1);` // extract element after "/" |
| 3 | IF | `key.equals("*")` -> `return Integer.valueOf(hktgi_mskm_svc_kei_no_list.size());` // list size |
| 4 | ELSE | // parse index as integer |
| 5 | TRY | `tmpIndexInt = Integer.valueOf(key);` |
| 6 | CATCH | `catch(NumberFormatException e) { return null; }` |
| 7 | IF | `if (tmpIndexInt == null) { return null; }` |
| 8 | SET | `int tmpIndex = tmpIndexInt.intValue();` |
| 9 | IF | `if (tmpIndex < 0 || tmpIndex >= hktgi_mskm_svc_kei_no_list.size()) { return null; }` // out of bounds |
| 10 | RETURN | `return ((X33VDataTypeStringBean)hktgi_mskm_svc_kei_no_list.get(tmpIndex)).loadModelData(subkey);` // delegate to child bean |

**Block 3.13** — ELSE-IF — Key: Mansion Name `[マンション名:hktgi_mans_nm]` (L733)

> Branch for the mansion/apartment name field.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("マンション名")` // data type is mansion name (データタイプがStringの項目"マンション名"（項目ID:hktgi_mans_nm）) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` -> `return getHktgi_mans_nm_value();` |
| 3 | ELSE_IF | `subkey.equalsIgnoreCase("state")` -> `return getHktgi_mans_nm_state();` // subkey is "state" |

**Block 3.14** — ELSE-IF — Key: Address `[住所:hktgi_mans_ad_nm]` (L745)

> Branch for the address field.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("住所")` // data type is address (データタイプがStringの項目"住所"（項目ID:hktgi_mans_ad_nm）) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` -> `return getHktgi_mans_ad_nm_value();` |
| 3 | ELSE_IF | `subkey.equalsIgnoreCase("state")` -> `return getHktgi_mans_ad_nm_state();` // subkey is "state" |

**Block 3.15** — ELSE-IF — Key: H-ID `[H-ID:hktgi_pid]` (L757)

> Branch for the H-ID (property holder ID) field.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("H-ID")` // data type is H-ID (データタイプがStringの項目"H-ID"（項目ID:hktgi_pid）) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` -> `return getHktgi_pid_value();` |
| 3 | ELSE_IF | `subkey.equalsIgnoreCase("state")` -> `return getHktgi_pid_state();` // subkey is "state" |

**Block 3.16** — ELSE-IF — Key: M-ID `[M-ID:hktgi_mans_id]` (L769)

> Branch for the M-ID (mansion ID) field.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("M-ID")` // data type is M-ID (データタイプがStringの項目"M-ID"（項目ID:hktgi_mans_id）) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` -> `return getHktgi_mans_id_value();` |
| 3 | ELSE_IF | `subkey.equalsIgnoreCase("state")` -> `return getHktgi_mans_id_state();` // subkey is "state" |

**Block 3.17** — ELSE-IF — Key: C-T-ID `[C-T-ID:hktgi_catid]` (L781)

> Branch for the C-T-ID (category type ID) field.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("C-T-ID")` // data type is C-T-ID (データタイプがStringの項目"C-T-ID"（項目ID:hktgi_catid）) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` -> `return getHktgi_catid_value();` |
| 3 | ELSE_IF | `subkey.equalsIgnoreCase("state")` -> `return getHktgi_catid_state();` // subkey is "state" |

**Block 4** — ELSE (no match) `(no matching key found)` (L782)

> Fallback: if no branch condition matches, return null. The property does not exist in this bean (条件に一致するプロパティが存在しない場合は、nullを返す).

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` // no matching property found |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `key` | Parameter | Field name (項目名) — the business identifier for a screen data element, used to route to the correct data getter |
| `subkey` | Parameter | Sub-key (サブキー) — accessor type, either "value" for data or "state" for validation/display state |
| `hktgi_sysid` | Field | System ID — internal system identifier for the migration record |
| `hktgi_svc_kei_no` | Field | Service contract number (サービス契約番号) — unique identifier for a telecom service contract line item |
| `hktgi_ido_div` | Field | Migration classification (異動区分) — code indicating the type of service migration (e.g., transfer, termination, addition) |
| `hktgi_ido_rsn_cd_list` | Field | Migration reason code list (異動理由コードリスト) — array of reason codes for service migration events, each item is an `X33VDataTypeStringBean` |
| `hktgi_ido_rsn_memo` | Field | Migration reason memo (異動理由メモ) — free-text description of why a service migration occurred |
| `hktgi_op_svc_kei_no_list` | Field | Optional service contract number list (オプションサービス契約番号リスト) — array of optional/add-on service contract numbers attached to the main service |
| `hktgi_tran_div` | Field | Processing classification (処理区分) — code indicating the processing type (e.g., new registration, modification, cancellation) |
| `hktgi_mskm_no` | Field | Application number (申込番号) — unique identifier for a service application/order |
| `hktgi_mskm_dtl_no` | Field | Application detail number (申込明細番号) — sub-identifier for a specific line item within an application |
| `hktgi_tokutei_id_kmk_nm` | Field | Specific ID field name (特定ID項目名) — name of a government-identified (特定個人情報) field used in telecom subscriber registration |
| `hktgi_tokutei_id_kmk_value` | Field | Specific ID field value (特定ID項目値) — value of a government-identified field for subscriber registration |
| `hktgi_popup_mode` | Field | Popup mode (ポップアップモード) — flag controlling whether popup dialogs are enabled on the screen |
| `hktgi_mskm_svc_kei_no_list` | Field | Simultaneous application service contract number list (同時申込サービス契約番号リスト) — array of service contracts applied for simultaneously in a single application batch |
| `hktgi_mans_nm` | Field | Mansion name (マンション名) — name of the apartment/building where the service is delivered (common in Japanese telecom) |
| `hktgi_mans_ad_nm` | Field | Address (住所) — delivery address for the telecom service |
| `hktgi_pid` | Field | H-ID (戸-ID) — property/household identifier for the service delivery location |
| `hktgi_mans_id` | Field | M-ID (マンション-ID) — unique identifier for a mansion/building in the telecom system |
| `hktgi_catid` | Field | C-T-ID (カテゴリー-ID) — category type ID for classifying service types or customer categories |
| SISID | Field | System ID (項目ID) — internal system identifier displayed on the migration screen |
| LIST-TYPE | Concept | Array-based item (配列項目) — a field that holds a dynamic list of sub-items, each with its own `loadModelData` interface. Accessed via slash-separated index (e.g., "フィールド名/0") or wildcard "*" for count |
| X33VDataTypeStringBean | Class | Child data bean — nested bean type that represents a single item within a list-type field, providing its own `loadModelData` method for sub-key access |
| value | subkey | Data value accessor — retrieves the current data value of the field |
| state | subkey | Validation/display state accessor — retrieves the UI/validation state (e.g., enabled, read-only, error) of the field |
| `*` | Value | Wildcard index — when used as the index in a list-type key, returns the total number of items in the list instead of a specific item |
| KKW05501SF | Module | Telecom service migration/order screen module — handles customer service contract changes including migration, registration, and cancellation |
| FTTH | Business term | Fiber To The Home — fiber-optic broadband internet service (context: this module handles FTTH-related service migrations) |
| 異動 (ido) | Japanese term | Migration — in telecom context, refers to transferring or modifying a service contract (e.g., changing provider, moving service location) |
| 申込 (moshikomi) | Japanese term | Application — service order or contract application |
| 特定個人情報 (tokutei kojin jooho) | Japanese term | Specified Personal Information — Japanese regulatory term for sensitive personal data requiring special handling under the Act on Protection of Specifically Designated Personal Information |
