# Business Logic — KKW00128SF01DBean.loadModelData() [281 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKA16601SF.KKW00128SF01DBean` |
| Layer | Service Component / Data Bean (Web MVC framework — X33 view data bean) |
| Module | `KKA16601SF` (Package: `eo.web.webview.KKA16601SF`) |

## 1. Role

### KKW00128SF01DBean.loadModelData()

This method implements a **generic data retrieval dispatcher** for the KKA16601SF screen bean, which manages service contract change/transfer data in a telecom billing system (K-Opticom's FTTH/fiber-optic service platform). It follows the X33 framework's `X33VDataTypeBeanInterface` contract, enabling screen-level code to access any data field by a human-readable key/subkey pair rather than invoking individual getter methods directly.

The method handles **21 distinct data item categories**, each corresponding to a business field on the service contract change screen: system ID, service contract number, transfer classification, transfer reason code, transfer reason memo, option service contract number, processing classification, application number, application detail number, specific ID item name/value, popup mode, transfer classification screen transition pattern, service code, price group code, price course code, price plan code, and their "before-change" (pre-modification) snapshots, plus a discount auto-application exclusion flag and external system code.

The primary design pattern is **string-keyed dispatch** (a switch-on-string routed through if-else-if chains). For scalar fields, it delegates to individual `get*Value()` / `get*State()` getters. For two list-based fields (`ido_rsn_cd_list` and `op_svc_kei_no_list`), it supports index-based access by parsing the remainder of the key as an integer or returning the list count via `"*"` as a sentinel value, then recursively delegates to the sub-element's `loadModelData(subkey)`.

Its role in the larger system is as the **backing model accessor** — called by the X33 web framework and screen controllers to populate form fields, validate UI state, and synchronize view data after user interaction on the service contract change/transfer screen (KKA16601SF).

## 2. Processing Pattern (Detailed Business Logic)

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

    START --> C1{"key == null OR subkey == null"}
    C1 -->|true| RET_NULL1["Return null"]
    C1 -->|false| SEP["sep = key.indexOf('/')"]

    SEP --> C2{"key == 'SYSID'"}
    C2 -->|true| SYSID{"subkey == 'value'"}
    SYSID -->|true| SYSID_VAL["Return getSysid_value()"]
    SYSID -->|false| SYSID_ST["Return getSysid_state()"]

    C2 -->|false| C3{"key == 'サービス契約番号'"}
    C3 -->|true| SVC0{"subkey == 'value'"}
    SVC0 -->|true| SVC0_VAL["Return getSvc_kei_no_value()"]
    SVC0 -->|false| SVC0_ST["Return getSvc_kei_no_state()"]

    C3 -->|false| C4{"key == '異動区分'"}
    C4 -->|true| IDO0{"subkey == 'value'"}
    IDO0 -->|true| IDO0_VAL["Return getIdo_div_value()"]
    IDO0 -->|false| IDO0_ST["Return getIdo_div_state()"]

    C4 -->|false| C5{"key == '異動理由コード'"}
    C5 -->|true| IDO_PARSE["key = key.substring(sep + 1)"]
    IDO_PARSE --> IDO_STAR{"key == '*'"}
    IDO_STAR -->|true| IDO_STAR_RET["Return ido_rsn_cd_list.size()"]
    IDO_STAR -->|false| IDO_IDX["tmpIndex = parseInteger(key)"]
    IDO_IDX --> IDO_BOUNDS{"0 <= tmpIndex < list size"}
    IDO_BOUNDS -->|true| IDO_SUB["Return list.get(tmpIndex).loadModelData(subkey)"]
    IDO_BOUNDS -->|false| RET_NULL2["Return null"]

    C5 -->|false| C6{"key == '異動理由メモ'"}
    C6 -->|true| IRM0{"subkey == 'value'"}
    IRM0 -->|true| IRM0_VAL["Return getIdo_rsn_memo_value()"]
    IRM0 -->|false| IRM0_ST["Return getIdo_rsn_memo_state()"]

    C6 -->|false| C7{"key == 'オプションサービス契約番号'"}
    C7 -->|true| OPS_STAR{"key == '*'"}
    OPS_STAR -->|true| OPS_STAR_RET["Return op_svc_kei_no_list.size()"]
    OPS_STAR -->|false| OPS_IDX["tmpIndex = parseInteger(key)"]
    OPS_IDX --> OPS_BOUNDS{"0 <= tmpIndex < list size"}
    OPS_BOUNDS -->|true| OPS_SUB["Return list.get(tmpIndex).loadModelData(subkey)"]
    OPS_BOUNDS -->|false| RET_NULL3["Return null"]

    C7 -->|false| C8{"key == '処理区分'"}
    C8 -->|true| TD0{"subkey == 'value'"}
    TD0 -->|true| TD0_VAL["Return getTran_div_value()"]
    TD0 -->|false| TD0_ST["Return getTran_div_state()"]

    C8 -->|false| C9{"key == '申込番号'"}
    C9 -->|true| MSKN0{"subkey == 'value'"}
    MSKN0 -->|true| MSKN0_VAL["Return getMskm_no_value()"]
    MSKN0 -->|false| MSKN0_ST["Return getMskm_no_state()"]

    C9 -->|false| C10{"key == '申込明細番号'"}
    C10 -->|true| MSKD0{"subkey == 'value'"}
    MSKD0 -->|true| MSKD0_VAL["Return getMskm_dtl_no_value()"]
    MSKD0 -->|false| MSKD0_ST["Return getMskm_dtl_no_state()"]

    C10 -->|false| C11{"key == '特定ID項目名'"}
    C11 -->|true| TIKN0{"subkey == 'value'"}
    TIKN0 -->|true| TIKN0_VAL["Return getTokutei_id_kmk_nm_value()"]
    TIKN0 -->|false| TIKN0_ST["Return getTokutei_id_kmk_nm_state()"]

    C11 -->|false| C12{"key == '特定ID項目値'"}
    C12 -->|true| TIKV0{"subkey == 'value'"}
    TIKV0 -->|true| TIKV0_VAL["Return getTokutei_id_kmk_value_value()"]
    TIKV0 -->|false| TIKV0_ST["Return getTokutei_id_kmk_value_state()"]

    C12 -->|false| C13{"key == 'ポップアップモード'"}
    C13 -->|true| PM0{"subkey == 'value'"}
    PM0 -->|true| PM0_VAL["Return getPopup_mode_value()"]
    PM0 -->|false| PM0_ST["Return getPopup_mode_state()"]

    C13 -->|false| C14{"key == '異動区分選択画面遷移パターン'"}
    C14 -->|true| IDSP0{"subkey == 'value'"}
    IDSP0 -->|true| IDSP0_VAL["Return getIdo_div_seni_ptn_value()"]
    IDSP0 -->|false| IDSP0_ST["Return getIdo_div_seni_ptn_state()"]

    C14 -->|false| C15{"key == 'サービスコード'"}
    C15 -->|true| SCD0{"subkey == 'value'"}
    SCD0 -->|true| SCD0_VAL["Return getSvc_cd_value()"]
    SCD0 -->|false| SCD0_ST["Return getSvc_cd_state()"]

    C15 -->|false| C16{"key == '料金グループコード'"}
    C16 -->|true| PG0{"subkey == 'value'"}
    PG0 -->|true| PG0_VAL["Return getPrc_grp_cd_value()"]
    PG0 -->|false| PG0_ST["Return getPrc_grp_cd_state()"]

    C16 -->|false| C17{"key == '料金コースコード'"}
    C17 -->|true| PC0{"subkey == 'value'"}
    PC0 -->|true| PC0_VAL["Return getPcrs_cd_value()"]
    PC0 -->|false| PC0_ST["Return getPcrs_cd_state()"]

    C17 -->|false| C18{"key == '料金プランコード'"}
    C18 -->|true| PP0{"subkey == 'value'"}
    PP0 -->|true| PP0_VAL["Return getPplan_cd_value()"]
    PP0 -->|false| PP0_ST["Return getPplan_cd_state()"]

    C18 -->|false| C19{"key == '変更前サービスコード'"}
    C19 -->|true| SCB0{"subkey == 'value'"}
    SCB0 -->|true| SCB0_VAL["Return getSvc_cd_bf_value()"]
    SCB0 -->|false| SCB0_ST["Return getSvc_cd_bf_state()"]

    C19 -->|false| C20{"key == '変更前料金グループコード'"}
    C20 -->|true| PGB0{"subkey == 'value'"}
    PGB0 -->|true| PGB0_VAL["Return getPrc_grp_cd_bf_value()"]
    PGB0 -->|false| PGB0_ST["Return getPrc_grp_cd_bf_state()"]

    C20 -->|false| C21{"key == '変更前料金コースコード'"}
    C21 -->|true| PCB0{"subkey == 'value'"}
    PCB0 -->|true| PCB0_VAL["Return getPcrs_cd_bf_value()"]
    PCB0 -->|false| PCB0_ST["Return getPcrs_cd_bf_state()"]

    C21 -->|false| C22{"key == '変更前料金プランコード'"}
    C22 -->|true| PPB0{"subkey == 'value'"}
    PPB0 -->|true| PPB0_VAL["Return getPplan_cd_bf_value()"]
    PPB0 -->|false| PPB0_ST["Return getPplan_cd_bf_state()"]

    C22 -->|false| C23{"key == '割引自動適用対象外フラグ'"}
    C23 -->|true| WRA0{"subkey == 'value'"}
    WRA0 -->|true| WRA0_VAL["Return getWrib_auto_aply_tg_gai_flg_value()"]
    WRA0 -->|false| WRA0_ST["Return getWrib_auto_aply_tg_gai_flg_state()"]

    C23 -->|false| C24{"key == '外部システムコード'"}
    C24 -->|true| EXT0{"subkey == 'value'"}
    EXT0 -->|true| EXT0_VAL["Return getSyscd_value()"]
    EXT0 -->|false| EXT1{"subkey == 'enable'"}
    EXT1 -->|true| EXT1_VAL["Return getSyscd_enabled()"]
    EXT1 -->|false| EXT0_ST["Return getSyscd_state()"]

    C24 -->|false| RET_NULL4["Return null"]

    RET_NULL1 --> END_NODE(["Return / Next"])
    SYSID_VAL --> END_NODE
    SYSID_ST --> END_NODE
    SVC0_VAL --> END_NODE
    SVC0_ST --> END_NODE
    IDO0_VAL --> END_NODE
    IDO0_ST --> END_NODE
    IDO_STAR_RET --> END_NODE
    IDO_SUB --> END_NODE
    RET_NULL2 --> END_NODE
    IRM0_VAL --> END_NODE
    IRM0_ST --> END_NODE
    OPS_STAR_RET --> END_NODE
    OPS_SUB --> END_NODE
    RET_NULL3 --> END_NODE
    TD0_VAL --> END_NODE
    TD0_ST --> END_NODE
    MSKN0_VAL --> END_NODE
    MSKN0_ST --> END_NODE
    MSKD0_VAL --> END_NODE
    MSKD0_ST --> END_NODE
    TIKN0_VAL --> END_NODE
    TIKN0_ST --> END_NODE
    TIKV0_VAL --> END_NODE
    TIKV0_ST --> END_NODE
    PM0_VAL --> END_NODE
    PM0_ST --> END_NODE
    IDSP0_VAL --> END_NODE
    IDSP0_ST --> END_NODE
    SCD0_VAL --> END_NODE
    SCD0_ST --> END_NODE
    PG0_VAL --> END_NODE
    PG0_ST --> END_NODE
    PC0_VAL --> END_NODE
    PC0_ST --> END_NODE
    PP0_VAL --> END_NODE
    PP0_ST --> END_NODE
    SCB0_VAL --> END_NODE
    SCB0_ST --> END_NODE
    PGB0_VAL --> END_NODE
    PGB0_ST --> END_NODE
    PCB0_VAL --> END_NODE
    PCB0_ST --> END_NODE
    PPB0_VAL --> END_NODE
    PPB0_ST --> END_NODE
    WRA0_VAL --> END_NODE
    WRA0_ST --> END_NODE
    EXT0_VAL --> END_NODE
    EXT1_VAL --> END_NODE
    EXT0_ST --> END_NODE
    RET_NULL4 --> END_NODE
```

**Processing flow summary:**
1. **Null guard** (L697–L700): If either `key` or `subkey` is null, immediately return null. (key, subkey that are null return null.)
2. **Separator extraction** (L702): Compute the position of '/' in key for potential substring operations in list-type fields.
3. **Key dispatch chain** (L704–L970): A cascading if-else-if chain routes to the appropriate handler based on `key` value:
   - **Simple scalar fields** (SYSID, service contract number, transfer classification, transfer reason memo, processing classification, application number, application detail number, specific ID item name/value, popup mode, transition pattern, service code, price group/course/plan codes, before-change variants, discount flag): Each branches on `subkey` — `"value"` returns the getter for the data value, `"state"` returns the UI state flag.
   - **List field: Transfer reason code** (`ido_rsn_cd_list`, L719–L761): Extracts the portion after '/' from key; if `"*"`, returns the list size; otherwise parses the remainder as an integer index, validates bounds, then recursively delegates to the element bean's `loadModelData(subkey)`.
   - **List field: Option service contract number** (`op_svc_kei_no_list`, L769–L806): Same pattern as transfer reason code.
   - **External system code** (L965–L974, added via ANK-2693-00-00): A unique field supporting three subkey values: `"value"` returns the code, `"enable"` returns an enabled/disabled flag getter, and `"state"` returns the UI state.
4. **Fallback** (L970): If no key matches any branch, return null. (No matching property returns null.)

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | The **business field identifier** used to select which data item to retrieve. For simple fields it is a Japanese label (e.g., "サービス契約番号" for Service Contract Number, "異動区分" for Transfer Classification). For list-based fields (Transfer Reason Code, Option Service Contract Number) it uses a slash-delimited format where the part after '/' encodes either `"*"` (request list count) or an integer index into the list. |
| 2 | `subkey` | `String` | The **property accessor** within the selected field. For most fields it is `"value"` (retrieve the data value) or `"state"` (retrieve the UI state flag). The External System Code field additionally supports `"enable"` (retrieve the enabled/disabled flag). |

**Instance fields read by this method:**

| Field Name | Type | Business Description |
|-----------|------|---------------------|
| `ido_rsn_cd_list` | `X33VDataTypeList` | List of transfer reason codes — the selectable reasons a customer can transfer/change their service, stored as `X33VDataTypeStringBean` elements. |
| `op_svc_kei_no_list` | `X33VDataTypeList` | List of option service contract numbers — optional add-on services a customer may have. |

## 4. CRUD Operations / Called Services

This method is a **pure read (R) dispatcher** — it does not modify any data or invoke any service component (SC) or callable business service (CBS). It only delegates to getter methods on the same bean class, which themselves read instance fields (String values, state flags, and list data).

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `KKW00128SF01DBean.getSysid_value` | - | - | Returns system ID value for the screen session |
| R | `KKW00128SF01DBean.getSysid_state` | - | - | Returns UI state flag for system ID field |
| R | `KKW00128SF01DBean.getSvc_kei_no_value` | - | - | Returns service contract number value |
| R | `KKW00128SF01DBean.getSvc_kei_no_state` | - | - | Returns UI state flag for service contract number |
| R | `KKW00128SF01DBean.getIdo_div_value` | - | - | Returns transfer classification value |
| R | `KKW00128SF01DBean.getIdo_div_state` | - | - | Returns UI state flag for transfer classification |
| R | `KKW00128SF01DBean.getIdo_rsn_cd_list` | - | - | Accesses the transfer reason code list (index-based access via get()) |
| R | `KKW00128SF01DBean.getIdo_rsn_memo_value` | - | - | Returns transfer reason memo value |
| R | `KKW00128SF01DBean.getIdo_rsn_memo_state` | - | - | Returns UI state flag for transfer reason memo |
| R | `KKW00128SF01DBean.getOp_svc_kei_no_list` | - | - | Accesses the option service contract number list (index-based access via get()) |
| R | `KKW00128SF01DBean.getTran_div_value` | - | - | Returns processing classification value |
| R | `KKW00128SF01DBean.getTran_div_state` | - | - | Returns UI state flag for processing classification |
| R | `KKW00128SF01DBean.getMskm_no_value` | - | - | Returns application number value |
| R | `KKW00128SF01DBean.getMskm_no_state` | - | - | Returns UI state flag for application number |
| R | `KKW00128SF01DBean.getMskm_dtl_no_value` | - | - | Returns application detail number value |
| R | `KKW00128SF01DBean.getMskm_dtl_no_state` | - | - | Returns UI state flag for application detail number |
| R | `KKW00128SF01DBean.getTokutei_id_kmk_nm_value` | - | - | Returns specific ID item name value |
| R | `KKW00128SF01DBean.getTokutei_id_kmk_nm_state` | - | - | Returns UI state flag for specific ID item name |
| R | `KKW00128SF01DBean.getTokutei_id_kmk_value_value` | - | - | Returns specific ID item value value |
| R | `KKW00128SF01DBean.getTokutei_id_kmk_value_state` | - | - | Returns UI state flag for specific ID item value |
| R | `KKW00128SF01DBean.getPopup_mode_value` | - | - | Returns popup mode value |
| R | `KKW00128SF01DBean.getPopup_mode_state` | - | - | Returns UI state flag for popup mode |
| R | `KKW00128SF01DBean.getIdo_div_seni_ptn_value` | - | - | Returns transfer classification screen transition pattern value |
| R | `KKW00128SF01DBean.getIdo_div_seni_ptn_state` | - | - | Returns UI state flag for transition pattern |
| R | `KKW00128SF01DBean.getSvc_cd_value` | - | - | Returns service code value |
| R | `KKW00128SF01DBean.getSvc_cd_state` | - | - | Returns UI state flag for service code |
| R | `KKW00128SF01DBean.getPrc_grp_cd_value` | - | - | Returns price group code value |
| R | `KKW00128SF01DBean.getPrc_grp_cd_state` | - | - | Returns UI state flag for price group code |
| R | `KKW00128SF01DBean.getPcrs_cd_value` | - | - | Returns price course code value |
| R | `KKW00128SF01DBean.getPcrs_cd_state` | - | - | Returns UI state flag for price course code |
| R | `KKW00128SF01DBean.getPplan_cd_value` | - | - | Returns price plan code value |
| R | `KKW00128SF01DBean.getPplan_cd_state` | - | - | Returns UI state flag for price plan code |
| R | `KKW00128SF01DBean.getSvc_cd_bf_value` | - | - | Returns pre-change service code value |
| R | `KKW00128SF01DBean.getSvc_cd_bf_state` | - | - | Returns UI state flag for pre-change service code |
| R | `KKW00128SF01DBean.getPrc_grp_cd_bf_value` | - | - | Returns pre-change price group code value |
| R | `KKW00128SF01DBean.getPrc_grp_cd_bf_state` | - | - | Returns UI state flag for pre-change price group code |
| R | `KKW00128SF01DBean.getPcrs_cd_bf_value` | - | - | Returns pre-change price course code value |
| R | `KKW00128SF01DBean.getPcrs_cd_bf_state` | - | - | Returns UI state flag for pre-change price course code |
| R | `KKW00128SF01DBean.getPplan_cd_bf_value` | - | - | Returns pre-change price plan code value |
| R | `KKW00128SF01DBean.getPplan_cd_bf_state` | - | - | Returns UI state flag for pre-change price plan code |
| R | `KKW00128SF01DBean.getWrib_auto_aply_tg_gai_flg_value` | - | - | Returns discount auto-application exclusion flag value |
| R | `KKW00128SF01DBean.getWrib_auto_aply_tg_gai_flg_state` | - | - | Returns UI state flag for discount flag |
| R | `KKW00128SF01DBean.getSyscd_value` | - | - | Returns external system code value |
| R | `KKW00128SF01DBean.getSyscd_enabled` | - | - | Returns enabled/disabled flag for external system code |
| R | `KKW00128SF01DBean.getSyscd_state` | - | - | Returns UI state flag for external system code |
| R | `X33VDataTypeStringBean.loadModelData` | - | - | Recursive delegate called on list element beans for index-based access |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Screen:KKSV0004 (KKA16601SF) | `KKA16601SF controller/view` -> `KKW00128SF01DBean.loadModelData` | `get*Value() [R] in-memory bean state` |

Note: The method is part of the X33 framework's data binding layer. It is typically called indirectly through the framework's generic model-loading mechanism (`X33VLoadModel` / `X33VViewBaseBean`) or explicitly by the screen controller when reconstructing form data from the view state. The pre-computed code graph shows that the only direct caller within the same class is `KKW00128SF01DBean.loadModelData()` (the overloaded variant accepting `gamenId`, see `storeModelData` which delegates to the same family of methods).

## 6. Per-Branch Detail Blocks

**Block 1** — IF (null guard) (L697)

> If either `key` or `subkey` is null, return null early.
> (key, subkey that are null return null.)

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

**Block 2** — SET (separator extraction) (L702)

| # | Type | Code |
|---|------|------|
| 1 | SET | `sep = key.indexOf('/')` |

**Block 3** — IF (key == "SYSID") (L704)

> Data type is String — Field ID: sysid.
> (データタイプがStringの項目"SYSID"(項目ID:sysid))

**Block 3.1** — IF (subkey == "value") (L705)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getSysid_value();` |

**Block 3.2** — ELSE-IF (subkey == "state") (L707)

> If subkey is "state", return the state flag.
> (subkeyが"state"の場合、ステータスを返す。)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getSysid_state();` |

**Block 4** — IF (key == "サービス契約番号") (L712)

> Data type is String — Field ID: svc_kei_no.
> (データタイプがStringの項目"サービス契約番号"(項目ID:svc_kei_no))

**Block 4.1** — IF (subkey == "value") (L713)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getSvc_kei_no_value();` |

**Block 4.2** — ELSE-IF (subkey == "state") (L715)

> If subkey is "state", return the state flag.
> (subkeyが"state"の場合、ステータスを返す。)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getSvc_kei_no_state();` |

**Block 5** — IF (key == "異動区分") (L720)

> Data type is String — Field ID: ido_div.
> (データタイプがStringの項目"異動区分"(項目ID:ido_div))

**Block 5.1** — IF (subkey == "value") (L721)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getIdo_div_value();` |

**Block 5.2** — ELSE-IF (subkey == "state") (L723)

> If subkey is "state", return the state flag.
> (subkeyが"state"の場合、ステータスを返す。)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getIdo_div_state();` |

**Block 6** — IF (key == "異動理由コード") (L728)

> List field — Transfer Reason Code. String type. Field ID: ido_rsn_cd.
> (配置項目 "異動理由コード"(String型。項目ID:ido_rsn_cd))
>
> This block supports index-based access into `ido_rsn_cd_list`. The key format is `"異動理由コード/"` followed by either `"*"` (list size) or an integer index.

**Block 6.1** — SET (extract key suffix) (L731)

| # | Type | Code |
|---|------|------|
| 1 | SET | `key = key.substring(separaterPoint + 1)` |

**Block 6.2** — IF (key == "*") (L733)

> If "*" is specified instead of an index, return the list element count.
> (インデックス値の代わりに"*"が指定されていたら、リストの要素数を返す。)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return Integer.valueOf(ido_rsn_cd_list.size());` |

**Block 6.3** — TRY-CATCH (parse index) (L737–L745)

**Block 6.3.1** — TRY (Integer.parseInt) (L737)

| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpIndexInt = Integer.valueOf(key)` |

**Block 6.3.2** — CATCH (NumberFormatException) (L741)

> If the index value is not a numeric string, return null.
> (インデックス値が数値文字列でない場合は、ここでnullを返す。)

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

**Block 6.4** — IF (tmpIndexInt == null) (L745)

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

**Block 6.5** — SET (extract int) (L747)

| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpIndex = tmpIndexInt.intValue()` |

**Block 6.6** — IF (index bounds check) (L748)

> If the index value exceeds list count - 1, return null.
> (インデックス値がリスト個数-1を超える場合、ここでnullを返す。)

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

**Block 6.7** — CALL (recursive delegate to list element) (L750)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `((X33VDataTypeStringBean)ido_rsn_cd_list.get(tmpIndex)).loadModelData(subkey)` |

**Block 7** — IF (key == "異動理由メモ") (L753)

> Data type is String — Field ID: ido_rsn_memo.
> (データタイプがStringの項目"異動理由メモ"(項目ID:ido_rsn_memo))

**Block 7.1** — IF (subkey == "value") (L754)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getIdo_rsn_memo_value();` |

**Block 7.2** — ELSE-IF (subkey == "state") (L756)

> If subkey is "state", return the state flag.
> (subkeyが"state"の場合、ステータスを返す。)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getIdo_rsn_memo_state();` |

**Block 8** — IF (key == "オプションサービス契約番号") (L759)

> List field — Option Service Contract Number. String type. Field ID: op_svc_kei_no.
> (配置項目 "オプションサービス契約番号"(String型。項目ID:op_svc_kei_no))
>
> Same index-based access pattern as Block 6 (Transfer Reason Code).

**Block 8.1** — SET (extract key suffix) (L762)

| # | Type | Code |
|---|------|------|
| 1 | SET | `key = key.substring(separaterPoint + 1)` |

**Block 8.2** — IF (key == "*") (L764)

> If "*" is specified, return the list element count.
> (インデックス値の代わりに"*"が指定されていたら、リストの要素数を返す。)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return Integer.valueOf(op_svc_kei_no_list.size());` |

**Block 8.3** — TRY-CATCH (parse index) (L768–L776)

**Block 8.3.1** — TRY (Integer.parseInt) (L768)

| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpIndexInt = Integer.valueOf(key)` |

**Block 8.3.2** — CATCH (NumberFormatException) (L772)

> If the index value is not a numeric string, return null.
> (インデックス値が数値文字列でない場合は、ここでnullを返す。)

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

**Block 8.4** — IF (tmpIndexInt == null) (L776)

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

**Block 8.5** — SET (extract int) (L778)

| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpIndex = tmpIndexInt.intValue()` |

**Block 8.6** — IF (index bounds check) (L779)

> If the index value exceeds list count - 1, return null.
> (インデックス値がリスト個数-1を超える場合、ここでnullを返す。)

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

**Block 8.7** — CALL (recursive delegate to list element) (L781)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `((X33VDataTypeStringBean)op_svc_kei_no_list.get(tmpIndex)).loadModelData(subkey)` |

**Block 9** — IF (key == "処理区分") (L784)

> Data type is String — Field ID: tran_div.
> (データタイプがStringの項目"処理区分"(項目ID:tran_div))

**Block 9.1** — IF (subkey == "value") (L785)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getTran_div_value();` |

**Block 9.2** — ELSE-IF (subkey == "state") (L787)

> If subkey is "state", return the state flag.
> (subkeyが"state"の場合、ステータスを返す。)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getTran_div_state();` |

**Block 10** — IF (key == "申込番号") (L790)

> Data type is String — Field ID: mskm_no.
> (データタイプがStringの項目"申込番号"(項目ID:mskm_no))

**Block 10.1** — IF (subkey == "value") (L791)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getMskm_no_value();` |

**Block 10.2** — ELSE-IF (subkey == "state") (L793)

> If subkey is "state", return the state flag.
> (subkeyが"state"の場合、ステータスを返す。)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getMskm_no_state();` |

**Block 11** — IF (key == "申込明細番号") (L796)

> Data type is String — Field ID: mskm_dtl_no.
> (データタイプがStringの項目"申込明細番号"(項目ID:mskm_dtl_no))

**Block 11.1** — IF (subkey == "value") (L797)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getMskm_dtl_no_value();` |

**Block 11.2** — ELSE-IF (subkey == "state") (L799)

> If subkey is "state", return the state flag.
> (subkeyが"state"の場合、ステータスを返す。)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getMskm_dtl_no_state();` |

**Block 12** — IF (key == "特定ID項目名") (L802)

> Data type is String — Field ID: tokutei_id_kmk_nm.
> (データタイプがStringの項目"特定ID項目名"(項目ID:tokutei_id_kmk_nm))

**Block 12.1** — IF (subkey == "value") (L803)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getTokutei_id_kmk_nm_value();` |

**Block 12.2** — ELSE-IF (subkey == "state") (L805)

> If subkey is "state", return the state flag.
> (subkeyが"state"の場合、ステータスを返す。)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getTokutei_id_kmk_nm_state();` |

**Block 13** — IF (key == "特定ID項目値") (L808)

> Data type is String — Field ID: tokutei_id_kmk_value.
> (データタイプがStringの項目"特定ID項目値"(項目ID:tokutei_id_kmk_value))

**Block 13.1** — IF (subkey == "value") (L809)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getTokutei_id_kmk_value_value();` |

**Block 13.2** — ELSE-IF (subkey == "state") (L811)

> If subkey is "state", return the state flag.
> (subkeyが"state"の場合、ステータスを返す。)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getTokutei_id_kmk_value_state();` |

**Block 14** — IF (key == "ポップアップモード") (L814)

> Data type is String — Field ID: popup_mode.
> (データタイプがStringの項目"ポップアップモード"(項目ID:popup_mode))

**Block 14.1** — IF (subkey == "value") (L815)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getPopup_mode_value();` |

**Block 14.2** — ELSE-IF (subkey == "state") (L817)

> If subkey is "state", return the state flag.
> (subkeyが"state"の場合、ステータスを返す。)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getPopup_mode_state();` |

**Block 15** — IF (key == "異動区分選択画面遷移パターン") (L820)

> Data type is String — Field ID: ido_div_seni_ptn.
> (データタイプがStringの項目"異動区分選択画面遷移パターン"(項目ID:ido_div_seni_ptn))

**Block 15.1** — IF (subkey == "value") (L821)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getIdo_div_seni_ptn_value();` |

**Block 15.2** — ELSE-IF (subkey == "state") (L823)

> If subkey is "state", return the state flag.
> (subkeyが"state"の場合、ステータスを返す。)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getIdo_div_seni_ptn_state();` |

**Block 16** — IF (key == "サービスコード") (L826)

> Data type is String — Field ID: svc_cd.
> (データタイプがStringの項目"サービスコード"(項目ID:svc_cd))

**Block 16.1** — IF (subkey == "value") (L827)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getSvc_cd_value();` |

**Block 16.2** — ELSE-IF (subkey == "state") (L829)

> If subkey is "state", return the state flag.
> (subkeyが"state"の場合、ステータスを返す。)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getSvc_cd_state();` |

**Block 17** — IF (key == "料金グループコード") (L832)

> Data type is String — Field ID: prc_grp_cd.
> (データタイプがStringの項目"料金グループコード"(項目ID:prc_grp_cd))

**Block 17.1** — IF (subkey == "value") (L833)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getPrc_grp_cd_value();` |

**Block 17.2** — ELSE-IF (subkey == "state") (L835)

> If subkey is "state", return the state flag.
> (subkeyが"state"の場合、ステータスを返す。)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getPrc_grp_cd_state();` |

**Block 18** — IF (key == "料金コースコード") (L838)

> Data type is String — Field ID: pcrs_cd.
> (データタイプがStringの項目"料金コースコード"(項目ID:pcrs_cd))

**Block 18.1** — IF (subkey == "value") (L839)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getPcrs_cd_value();` |

**Block 18.2** — ELSE-IF (subkey == "state") (L841)

> If subkey is "state", return the state flag.
> (subkeyが"state"の場合、ステータスを返す。)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getPcrs_cd_state();` |

**Block 19** — IF (key == "料金プランコード") (L844)

> Data type is String — Field ID: pplan_cd.
> (データタイプがStringの項目"料金プランコード"(項目ID:pplan_cd))

**Block 19.1** — IF (subkey == "value") (L845)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getPplan_cd_value();` |

**Block 19.2** — ELSE-IF (subkey == "state") (L847)

> If subkey is "state", return the state flag.
> (subkeyが"state"の場合、ステータスを返す。)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getPplan_cd_state();` |

**Block 20** — IF (key == "変更前サービスコード") (L850)

> Data type is String — Field ID: svc_cd_bf (before-change snapshot).
> (データタイプがStringの項目"変更前サービスコード"(項目ID:svc_cd_bf))

**Block 20.1** — IF (subkey == "value") (L851)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getSvc_cd_bf_value();` |

**Block 20.2** — ELSE-IF (subkey == "state") (L853)

> If subkey is "state", return the state flag.
> (subkeyが"state"の場合、ステータスを返す。)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getSvc_cd_bf_state();` |

**Block 21** — IF (key == "変更前料金グループコード") (L856)

> Data type is String — Field ID: prc_grp_cd_bf (before-change snapshot).
> (データタイプがStringの項目"変更前料金グループコード"(項目ID:prc_grp_cd_bf))

**Block 21.1** — IF (subkey == "value") (L857)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getPrc_grp_cd_bf_value();` |

**Block 21.2** — ELSE-IF (subkey == "state") (L859)

> If subkey is "state", return the state flag.
> (subkeyが"state"の場合、ステータスを返す。)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getPrc_grp_cd_bf_state();` |

**Block 22** — IF (key == "変更前料金コースコード") (L862)

> Data type is String — Field ID: pcrs_cd_bf (before-change snapshot).
> (データタイプがStringの項目"変更前料金コースコード"(項目ID:pcrs_cd_bf))

**Block 22.1** — IF (subkey == "value") (L863)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getPcrs_cd_bf_value();` |

**Block 22.2** — ELSE-IF (subkey == "state") (L865)

> If subkey is "state", return the state flag.
> (subkeyが"state"の場合、ステータスを返す。)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getPcrs_cd_bf_state();` |

**Block 23** — IF (key == "変更前料金プランコード") (L868)

> Data type is String — Field ID: pplan_cd_bf (before-change snapshot).
> (データタイプがStringの項目"変更前料金プランコード"(項目ID:pplan_cd_bf))

**Block 23.1** — IF (subkey == "value") (L869)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getPplan_cd_bf_value();` |

**Block 23.2** — ELSE-IF (subkey == "state") (L871)

> If subkey is "state", return the state flag.
> (subkeyが"state"の場合、ステータスを返す。)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getPplan_cd_bf_state();` |

**Block 24** — IF (key == "割引自動適用対象外フラグ") (L874)

> Data type is String — Field ID: wrib_auto_aply_tg_gai_flg.
> (データタイプがStringの項目"割引自動適用対象外フラグ"(項目ID:wrib_auto_aply_tg_gai_flg))

**Block 24.1** — IF (subkey == "value") (L875)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getWrib_auto_aply_tg_gai_flg_value();` |

**Block 24.2** — ELSE-IF (subkey == "state") (L877)

> If subkey is "state", return the state flag.
> (subkeyが"state"の場合、ステータスを返す。)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getWrib_auto_aply_tg_gai_flg_state();` |

**Block 25** — IF (key == "外部システムコード") (L881)

> Data type is String — Field ID: hktgi_syscd.
> (データタイプがStringの項目"外部システムコード"(項目ID:hktgi_syscd))
>
> Added in ANK-2693-00-00 (2015/12/11). Supports three subkey values: "value", "enable", and "state".

**Block 25.1** — IF (subkey == "value") (L882)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getSyscd_value();` |

**Block 25.2** — ELSE-IF (subkey == "enable") (L884)

> If subkey is "enable", return the getter value of hktgi_syscd_enable.
> (subkeyが"enable"の場合、hktgi_syscd_enableのgetterの戻り値を返す。)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getSyscd_enabled();` |

**Block 25.3** — ELSE-IF (subkey == "state") (L886)

> If subkey is "state", return the state flag.
> (subkeyが"state"の場合、ステータスを返す。)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return getSyscd_state();` |

**Block 26** — RETURN (fallback) (L970)

> No matching property is found; return null.
> (条件に一致するプロパティが存在しない場合は、nullを返す。)

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

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `sysid` | Field | System ID — internal tracking identifier for the screen session / data record |
| `svc_kei_no` | Field | Service contract number — the unique identifier for a customer's service contract line item |
| `ido_div` | Field | Transfer classification — the type of service change being performed (e.g., new connection, transfer, cancellation) |
| `ido_rsn_cd` | Field | Transfer reason code — the specific code explaining why a service transfer/change is being executed; stored as a list of selectable options |
| `ido_rsn_memo` | Field | Transfer reason memo — free-text explanation accompanying the transfer reason code |
| `op_svc_kei_no` | Field | Option service contract number — tracks optional add-on services linked to the main contract; stored as a list |
| `tran_div` | Field | Processing classification — indicates the processing type or stage of the service change operation |
| `mskm_no` | Field | Application number — the unique identifier for a service change application/order |
| `mskm_dtl_no` | Field | Application detail number — the sub-item identifier within an application for line-item-level tracking |
| `tokutei_id_kmk_nm` | Field | Specific ID item name — a generic field name for custom/identifying attributes |
| `tokutei_id_kmk_value` | Field | Specific ID item value — the value associated with a specific ID item name |
| `popup_mode` | Field | Popup mode — controls whether a popup dialog is displayed on the screen |
| `ido_div_seni_ptn` | Field | Transfer classification screen transition pattern — determines which screen flow is used for the transfer classification operation |
| `svc_cd` | Field | Service code — the code identifying the type of telecom service (e.g., FTTH, Mail) |
| `prc_grp_cd` | Field | Price group code — the pricing tier/group assigned to the service |
| `pcrs_cd` | Field | Price course code — the specific pricing plan/course for the service |
| `pplan_cd` | Field | Price plan code — the billing plan identifier |
| `svc_cd_bf` | Field | Pre-change service code — the service code before the modification (audit snapshot) |
| `prc_grp_cd_bf` | Field | Pre-change price group code — the price group before modification |
| `pcrs_cd_bf` | Field | Pre-change price course code — the price course before modification |
| `pplan_cd_bf` | Field | Pre-change price plan code — the price plan before modification |
| `wrib_auto_aply_tg_gai_flg` | Field | Discount auto-application exclusion flag — indicates whether automatic discount application is excluded for this item |
| `hktgi_syscd` | Field | External system code — the code for an external system integrated with the platform (added in ANK-2693-00-00) |
| `_state` suffix | Field convention | UI state flag — a companion field to each value field that tracks the display/edit state (e.g., enabled, required, visible) in the X33 framework |
| `_value` suffix | Field convention | Data value field — the actual data stored for a screen item |
| `_bf` suffix | Field convention | Before-change snapshot — stores the original value prior to a modification for audit/difference-tracking purposes |
| X33 | Framework | Fujitsu Futurity X33 — the proprietary Java EE web application framework used for K-Opticom's web screens |
| FTTH | Business term | Fiber To The Home — fiber-optic broadband internet service |
| K-Opticom | Business entity | Japanese telecommunications provider (now SoftBank BB) offering FTTH and related services |
| ANK-2693-00-00 | Change ticket | Change request that added external system code support (hktgi_syscd) and ordering correspondence (STEP2) |
| ANK-2631-00-00 | Change ticket | Change request for the WebSocket support project (STEP1) |
| `*` (in list key) | Sentinel | Sentinel value used in list-type field keys to request the list element count instead of a specific index |
