# Business Logic — KKW22101SF01DBean.loadModelData() [277 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKW22101SF.KKW22101SF01DBean` |
| Layer | Service/View Bean (Web-tier Data Access Object pattern — bridges the view layer with domain data via getter delegation) |
| Module | `KKW22101SF` (Package: `eo.web.webview.KKW22101SF`) |

## 1. Role

### KKW22101SF01DBean.loadModelData()

This method serves as the primary data-access dispatcher for the **service contract migration/change screen** (KKW22101SF). It implements a **routing/dispatch pattern** that maps string-based item names (key) and access modes (subkey) to their corresponding getter methods. In business terms, it enables the screen to dynamically request any UI model property — such as service contract number, migration reason, pricing codes, or order content — by name rather than through strongly-typed method calls. The method handles **simple scalar properties** (via value/state subkey accessors), **list-based properties** (migration reason codes and optional service contract numbers, where the key encodes an array index and a "*" wildcard for list size queries), and **delegates into sub-beans** for complex list item properties. Its role in the larger system is that of a **unified model bridge**: the screen layer (JSP/JavaScript) invokes this method through the bean, allowing dynamic key-value data retrieval without compile-time coupling to individual properties. If no matching key is found, it returns null gracefully.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["loadModelData key, subkey"])
    NULL_CHECK["key==null or subkey==null"]
    RETURN_NULL(["Return null"])
    FIND_SLASH["separaterPoint = key.indexOf('/')"]
    SYSID["key equals SYSID"]
    SYSID_VAL["subkey value -> getSysid_value()"]
    SYSID_ST["subkey state -> getSysid_state()"]
    SVC_KEI_NO["key equals サービス契約番号"]
    SVC_KEI_NO_VAL["subkey value -> getSvc_kei_no_value()"]
    SVC_KEI_NO_ST["subkey state -> getSvc_kei_no_state()"]
    IDO_DIV["key equals 異動区分"]
    IDO_DIV_VAL["subkey value -> getIdo_div_value()"]
    IDO_DIV_ST["subkey state -> getIdo_div_state()"]
    IDO_RSN_CD["key equals 異動理由コード"]
    IDO_RSN_CD_IDX["Extract index from key, validate bounds"]
    IDO_RSN_CD_LIST["List get -> bean.loadModelData(subkey)"]
    IDO_RSN_MEMO["key equals 異動理由メモ"]
    IDO_RSN_MEMO_VAL["subkey value -> getIdo_rsn_memo_value()"]
    IDO_RSN_MEMO_ST["subkey state -> getIdo_rsn_memo_state()"]
    IDO_DIV_SENI["key equals 異動区分選択画面遷移パターン"]
    IDO_DIV_SENI_VAL["subkey value -> getHktgi_ido_div_seni_ptn_value()"]
    IDO_DIV_SENI_ST["subkey state -> getHktgi_ido_div_seni_ptn_state()"]
    OPT_SVC["key equals オプションサービス契約番号"]
    OPT_SVC_IDX["Extract index from key, validate bounds"]
    OPT_SVC_LIST["List get -> bean.loadModelData(subkey)"]
    TRAN_DIV["key equals 処理区分"]
    TRAN_DIV_VAL["subkey value -> getTran_div_value()"]
    TRAN_DIV_ST["subkey state -> getTran_div_state()"]
    MSKM_NO["key equals 申込番号"]
    MSKM_NO_VAL["subkey value -> getMskm_no_value()"]
    MSKM_NO_ST["subkey state -> getMskm_no_state()"]
    MSKM_DTL_NO["key equals 申込明細番号"]
    MSKM_DTL_NO_VAL["subkey value -> getMskm_dtl_no_value()"]
    MSKM_DTL_NO_ST["subkey state -> getMskm_dtl_no_state()"]
    TOKU_ID_NM["key equals 特定ID項目名"]
    TOKU_ID_NM_VAL["subkey value -> getTokutei_id_kmk_nm_value()"]
    TOKU_ID_NM_ST["subkey state -> getTokutei_id_kmk_nm_state()"]
    TOKU_ID_VAL["key equals 特定ID項目値"]
    TOKU_ID_VAL_VAL["subkey value -> getTokutei_id_kmk_value_value()"]
    TOKU_ID_VAL_ST["subkey state -> getTokutei_id_kmk_value_state()"]
    POPUP["key equals ポップアップモード"]
    POPUP_VAL["subkey value -> getPopup_mode_value()"]
    POPUP_ST["subkey state -> getPopup_mode_state()"]
    SVC_CD["key equals サービスコード"]
    SVC_CD_VAL["subkey value -> getSvc_cd_value()"]
    SVC_CD_ST["subkey state -> getSvc_cd_state()"]
    PRC_GRP["key equals 料金グループコード"]
    PRC_GRP_VAL["subkey value -> getPrc_grp_cd_value()"]
    PRC_GRP_ST["subkey state -> getPrc_grp_cd_state()"]
    PCRS_CD["key equals 料金コースコード"]
    PCRS_CD_VAL["subkey value -> getPcrs_cd_value()"]
    PCRS_CD_ST["subkey state -> getPcrs_cd_state()"]
    PPLAN_CD["key equals 料金プランコード"]
    PPLAN_CD_VAL["subkey value -> getPplan_cd_value()"]
    PPLAN_CD_ST["subkey state -> getPplan_cd_state()"]
    SVC_CD_BF["key equals 変更前サービスコード"]
    SVC_CD_BF_VAL["subkey value -> getSvc_cd_bf_value()"]
    SVC_CD_BF_ST["subkey state -> getSvc_cd_bf_state()"]
    PRC_GRP_BF["key equals 変更前料金グループコード"]
    PRC_GRP_BF_VAL["subkey value -> getPrc_grp_cd_bf_value()"]
    PRC_GRP_BF_ST["subkey state -> getPrc_grp_cd_bf_state()"]
    PCRS_CD_BF["key equals 変更前料金コースコード"]
    PCRS_CD_BF_VAL["subkey value -> getPcrs_cd_bf_value()"]
    PCRS_CD_BF_ST["subkey state -> getPcrs_cd_bf_state()"]
    PPLAN_CD_BF["key equals 変更前料金プランコード"]
    PPLAN_CD_BF_VAL["subkey value -> getPplan_cd_bf_value()"]
    PPLAN_CD_BF_ST["subkey state -> getPplan_cd_bf_state()"]
    WRIB_FLG["key equals 割引自動適用対象外フラグ"]
    WRIB_FLG_VAL["subkey value -> getWrib_auto_aply_tg_gai_flg_value()"]
    WRIB_FLG_ST["subkey state -> getWrib_auto_aply_tg_gai_flg_state()"]
    SYSCD["key equals 外部システムコード"]
    SYSCD_VAL["subkey value -> getSyscd_value()"]
    SYSCD_ST["subkey state -> getSyscd_state()"]
    NOT_FOUND["No matching key found"]

    START --> NULL_CHECK
    NULL_CHECK -->|true| RETURN_NULL
    NULL_CHECK -->|false| FIND_SLASH
    FIND_SLASH --> SYSID
    SYSID -->|true| SYSID_VAL
    SYSID_VAL --> SYSID_ST
    SYSID_ST --> SVC_KEI_NO
    SVC_KEI_NO -->|true| SVC_KEI_NO_VAL
    SVC_KEI_NO_VAL --> SVC_KEI_NO_ST
    SVC_KEI_NO_ST --> IDO_DIV
    IDO_DIV -->|true| IDO_DIV_VAL
    IDO_DIV_VAL --> IDO_DIV_ST
    IDO_DIV_ST --> IDO_RSN_CD
    IDO_RSN_CD -->|true| IDO_RSN_CD_IDX
    IDO_RSN_CD_IDX --> IDO_RSN_CD_LIST
    IDO_RSN_CD_LIST --> IDO_RSN_MEMO
    IDO_RSN_MEMO -->|true| IDO_RSN_MEMO_VAL
    IDO_RSN_MEMO_VAL --> IDO_RSN_MEMO_ST
    IDO_RSN_MEMO_ST --> IDO_DIV_SENI
    IDO_DIV_SENI -->|true| IDO_DIV_SENI_VAL
    IDO_DIV_SENI_VAL --> IDO_DIV_SENI_ST
    IDO_DIV_SENI_ST --> OPT_SVC
    OPT_SVC -->|true| OPT_SVC_IDX
    OPT_SVC_IDX --> OPT_SVC_LIST
    OPT_SVC_LIST --> TRAN_DIV
    TRAN_DIV -->|true| TRAN_DIV_VAL
    TRAN_DIV_VAL --> TRAN_DIV_ST
    TRAN_DIV_ST --> MSKM_NO
    MSKM_NO -->|true| MSKM_NO_VAL
    MSKM_NO_VAL --> MSKM_NO_ST
    MSKM_NO_ST --> MSKM_DTL_NO
    MSKM_DTL_NO -->|true| MSKM_DTL_NO_VAL
    MSKM_DTL_NO_VAL --> MSKM_DTL_NO_ST
    MSKM_DTL_NO_ST --> TOKU_ID_NM
    TOKU_ID_NM -->|true| TOKU_ID_NM_VAL
    TOKU_ID_NM_VAL --> TOKU_ID_NM_ST
    TOKU_ID_NM_ST --> TOKU_ID_VAL
    TOKU_ID_VAL -->|true| TOKU_ID_VAL_VAL
    TOKU_ID_VAL_VAL --> TOKU_ID_VAL_ST
    TOKU_ID_VAL_ST --> POPUP
    POPUP -->|true| POPUP_VAL
    POPUP_VAL --> POPUP_ST
    POPUP_ST --> SVC_CD
    SVC_CD -->|true| SVC_CD_VAL
    SVC_CD_VAL --> SVC_CD_ST
    SVC_CD_ST --> PRC_GRP
    PRC_GRP -->|true| PRC_GRP_VAL
    PRC_GRP_VAL --> PRC_GRP_ST
    PRC_GRP_ST --> PCRS_CD
    PCRS_CD -->|true| PCRS_CD_VAL
    PCRS_CD_VAL --> PCRS_CD_ST
    PCRS_CD_ST --> PPLAN_CD
    PPLAN_CD -->|true| PPLAN_CD_VAL
    PPLAN_CD_VAL --> PPLAN_CD_ST
    PPLAN_CD_ST --> SVC_CD_BF
    SVC_CD_BF -->|true| SVC_CD_BF_VAL
    SVC_CD_BF_VAL --> SVC_CD_BF_ST
    SVC_CD_BF_ST --> PRC_GRP_BF
    PRC_GRP_BF -->|true| PRC_GRP_BF_VAL
    PRC_GRP_BF_VAL --> PRC_GRP_BF_ST
    PRC_GRP_BF_ST --> PCRS_CD_BF
    PCRS_CD_BF -->|true| PCRS_CD_BF_VAL
    PCRS_CD_BF_VAL --> PCRS_CD_BF_ST
    PCRS_CD_BF_ST --> PPLAN_CD_BF
    PPLAN_CD_BF -->|true| PPLAN_CD_BF_VAL
    PPLAN_CD_BF_VAL --> PPLAN_CD_BF_ST
    PPLAN_CD_BF_ST --> WRIB_FLG
    WRIB_FLG -->|true| WRIB_FLG_VAL
    WRIB_FLG_VAL --> WRIB_FLG_ST
    WRIB_FLG_ST --> SYSCD
    SYSCD -->|true| SYSCD_VAL
    SYSCD_VAL --> SYSCD_ST
    SYSCD_ST --> NOT_FOUND
```

**Processing flow summary:**

1. **Null guard** — If either `key` or `subkey` is null, returns null immediately.
2. **Slash separator extraction** — Finds the `/` position in the key for later use by list-type keys.
3. **Key dispatch cascade** — A long chain of `else-if` blocks compares the key against 22 different Japanese-labeled item names. For each match, the subkey is checked: if it equals "value" (case-insensitive), the corresponding `_value()` getter is called; if it equals "state", the corresponding `_state()` getter is called.
4. **List-type special handling** — Two keys ("異動理由コード" / Migration Reason Code, and "オプションサービス契約番号" / Optional Service Contract Number) require special treatment. They extract an index from the portion of the key after the `/` separator. If the index is "*", the list size is returned as an Integer. Otherwise, the string is parsed as an integer index, validated against bounds, and the bean at that list position is queried with the original subkey.
5. **Fallback** — If no key matches, return null.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | The item name/property identifier used to look up model data. Can be a simple Japanese field name (e.g., "サービス契約番号" for Service Contract Number) or a composite key with slash-separated index syntax (e.g., "異動理由コード/2" for Migration Reason Code at index 2). For list-type keys, a wildcard "*" returns the list element count. |
| 2 | `subkey` | `String` | The access mode for the item — typically "value" to retrieve the property's data value, or "state" to retrieve its validation/state metadata. Case-insensitive comparison. For list-type keys, this is forwarded to the sub-bean's own `loadModelData()` to fetch nested properties. |
| 3 | `ido_rsn_cd_list` | `ArrayList` (instance field) | Internal list of migration reason code beans (`X33VDataTypeStringBean`) — holds the list of migration reasons for the current service contract. Used by the "異動理由コード" list-type branch. |
| 4 | `op_svc_kei_no_list` | `ArrayList` (instance field) | Internal list of optional service contract number beans (`X33VDataTypeStringBean`) — holds the list of optional service contracts associated with the current order. Used by the "オプションサービス契約番号" list-type branch. |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `JKKAdEditCC.substring` | JKKAdEditCC | - | Calls `substring` in `JKKAdEditCC` |
| - | `JKKAdEdit.substring` | JKKAdEdit | - | Calls `substring` in `JKKAdEdit` |
| - | `JKKTelnoInfoAddMapperCC.substring` | JKKTelnoInfoAddMapperCC | - | Calls `substring` in `JKKTelnoInfoAddMapperCC` |
| - | `JDKejbStringEdit.substring` | JDKejbStringEdit | - | Calls `substring` in `JDKejbStringEdit` |
| R | `KKW22101SF01DBean.getHktgi_ido_div_seni_ptn_state` | KKW22101SF01DBean | - | Calls `getHktgi_ido_div_seni_ptn_state` in `KKW22101SF01DBean` |
| R | `KKW22101SF01DBean.getHktgi_ido_div_seni_ptn_value` | KKW22101SF01DBean | - | Calls `getHktgi_ido_div_seni_ptn_value` in `KKW22101SF01DBean` |
| R | `KKW22101SF01DBean.getIdo_div_state` | KKW22101SF01DBean | - | Calls `getIdo_div_state` in `KKW22101SF01DBean` |
| R | `KKW22101SF01DBean.getIdo_div_value` | KKW22101SF01DBean | - | Calls `getIdo_div_value` in `KKW22101SF01DBean` |
| R | `KKW22101SF01DBean.getIdo_rsn_memo_state` | KKW22101SF01DBean | - | Calls `getIdo_rsn_memo_state` in `KKW22101SF01DBean` |
| R | `KKW22101SF01DBean.getIdo_rsn_memo_value` | KKW22101SF01DBean | - | Calls `getIdo_rsn_memo_value` in `KKW22101SF01DBean` |
| R | `KKW22101SF01DBean.getMskm_dtl_no_state` | KKW22101SF01DBean | - | Calls `getMskm_dtl_no_state` in `KKW22101SF01DBean` |
| R | `KKW22101SF01DBean.getMskm_dtl_no_value` | KKW22101SF01DBean | - | Calls `getMskm_dtl_no_value` in `KKW22101SF01DBean` |
| R | `KKW22101SF01DBean.getMskm_no_state` | KKW22101SF01DBean | - | Calls `getMskm_no_state` in `KKW22101SF01DBean` |
| R | `KKW22101SF01DBean.getMskm_no_value` | KKW22101SF01DBean | - | Calls `getMskm_no_value` in `KKW22101SF01DBean` |
| R | `KKW22101SF01DBean.getPcrs_cd_bf_state` | KKW22101SF01DBean | - | Calls `getPcrs_cd_bf_state` in `KKW22101SF01DBean` |
| R | `KKW22101SF01DBean.getPcrs_cd_bf_value` | KKW22101SF01DBean | - | Calls `getPcrs_cd_bf_value` in `KKW22101SF01DBean` |
| R | `KKW22101SF01DBean.getPcrs_cd_state` | KKW22101SF01DBean | - | Calls `getPcrs_cd_state` in `KKW22101SF01DBean` |
| R | `KKW22101SF01DBean.getPcrs_cd_value` | KKW22101SF01DBean | - | Calls `getPcrs_cd_value` in `KKW22101SF01DBean` |
| R | `KKW22101SF01DBean.getPopup_mode_state` | KKW22101SF01DBean | - | Calls `getPopup_mode_state` in `KKW22101SF01DBean` |
| R | `KKW22101SF01DBean.getPopup_mode_value` | KKW22101SF01DBean | - | Calls `getPopup_mode_value` in `KKW22101SF01DBean` |
| R | `KKW22101SF01DBean.getPplan_cd_bf_state` | KKW22101SF01DBean | - | Calls `getPplan_cd_bf_state` in `KKW22101SF01DBean` |
| R | `KKW22101SF01DBean.getPplan_cd_bf_value` | KKW22101SF01DBean | - | Calls `getPplan_cd_bf_value` in `KKW22101SF01DBean` |
| R | `KKW22101SF01DBean.getPplan_cd_state` | KKW22101SF01DBean | - | Calls `getPplan_cd_state` in `KKW22101SF01DBean` |
| R | `KKW22101SF01DBean.getPplan_cd_value` | KKW22101SF01DBean | - | Calls `getPplan_cd_value` in `KKW22101SF01DBean` |
| R | `KKW22101SF01DBean.getPrc_grp_cd_bf_state` | KKW22101SF01DBean | - | Calls `getPrc_grp_cd_bf_state` in `KKW22101SF01DBean` |
| R | `KKW22101SF01DBean.getPrc_grp_cd_bf_value` | KKW22101SF01DBean | - | Calls `getPrc_grp_cd_bf_value` in `KKW22101SF01DBean` |
| R | `KKW22101SF01DBean.getPrc_grp_cd_state` | KKW22101SF01DBean | - | Calls `getPrc_grp_cd_state` in `KKW22101SF01DBean` |
| R | `KKW22101SF01DBean.getPrc_grp_cd_value` | KKW22101SF01DBean | - | Calls `getPrc_grp_cd_value` in `KKW22101SF01DBean` |
| R | `KKW22101SF01DBean.getSvc_cd_bf_state` | KKW22101SF01DBean | - | Calls `getSvc_cd_bf_state` in `KKW22101SF01DBean` |
| R | `KKW22101SF01DBean.getSvc_cd_bf_value` | KKW22101SF01DBean | - | Calls `getSvc_cd_bf_value` in `KKW22101SF01DBean` |

**Notes on this method's CRUD profile:**

- This method performs **zero direct database or SC code operations**. It is a pure view-bean data dispatcher.
- All data access is through **self-referential getter delegation** — every called method is a `getXxx_value()` or `getXxx_state()` getter within the same `KKW22101SF01DBean` class. These getters read from internal field state that was previously populated during screen initialization (typically from screen input data, session state, or prior service calls).
- The **string `substring` calls** on `JKKAdEditCC`, `JKKAdEdit`, `JKKTelnoInfoAddMapperCC`, and `JDKejbStringEdit` appear in the code graph as utility string manipulation helpers used elsewhere in the bean hierarchy, not directly in this method's line range.
- For the **list-type keys** ("異動理由コード" and "オプションサービス契約番号"), data is retrieved from `ArrayList` collections of `X33VDataTypeStringBean` sub-beans, and each sub-bean's own `loadModelData()` is invoked — making those calls recursive delegates into child data beans.

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | KKW22101SF01DBean (same class) | `KKW22101SF01DBean.loadModelData()` | Self-call (overloaded variant without subkey) |

**Notes:**
- The only direct caller found is an **overloaded `loadModelData()`** method within the same class (`KKW22101SF01DBean`), which likely provides a convenience entry point when the subkey is implicit or derived from the calling context.
- This method is the **primary model data accessor** invoked by the KKW22101SF screen's JSP/view layer through the bean, enabling dynamic property-based data retrieval rather than hardcoded getter calls.
- No direct database, SC, or CBS endpoints are reachable through this method — it operates entirely on in-memory bean state.

## 6. Per-Branch Detail Blocks

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

> Null guard: Returns null immediately if either parameter is null.

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

**Block 2** — [PROCESS] `(key extraction)` (L686)

> Finds the slash separator position in the key for later use by list-type keys.

| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = key.indexOf("/")` // locate the separator position |

---

**Block 3** — [ELSE-IF] `(key.equals("SYSID"))` (L689)

> Data type String item "SYSID" (Item ID: sysid). Handles the system identifier field.

**Block 3.1** — [IF] `(subkey.equalsIgnoreCase("value"))` (L690)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getSysid_value()` // return SYSID value |

**Block 3.2** — [ELSE-IF] `(subkey.equalsIgnoreCase("state"))` (L693)

> subkey is "state" — return the state metadata (subkeyが"state"の場合、ステータスを返す)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getSysid_state()` // return SYSID state |

---

**Block 4** — [ELSE-IF] `(key.equals("サービス契約番号"))` (L698)

> Data type String item "Service Contract Number" (Item ID: svc_kei_no). Represents the main service contract line number.

**Block 4.1** — [IF] `(subkey.equalsIgnoreCase("value"))` (L699)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getSvc_kei_no_value()` |

**Block 4.2** — [ELSE-IF] `(subkey.equalsIgnoreCase("state"))` (L702)

> subkey is "state" — return state metadata (subkeyが"state"の場合、ステータスを返す)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getSvc_kei_no_state()` |

---

**Block 5** — [ELSE-IF] `(key.equals("異動区分"))` (L707)

> Data type String item "Migration Type" (Item ID: ido_div). The migration/division classification for the service contract.

**Block 5.1** — [IF] `(subkey.equalsIgnoreCase("value"))` (L708)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getIdo_div_value()` |

**Block 5.2** — [ELSE-IF] `(subkey.equalsIgnoreCase("state"))` (L711)

> subkey is "state" — return state metadata (subkeyが"state"の場合、ステータスを返す)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getIdo_div_state()` |

---

**Block 6** — [ELSE-IF] `(key.equals("異動理由コード"))` (L716)

> List item "Migration Reason Code" (String type, Item ID: ido_rsn_cd). This key has special index-based list access behavior.

**Block 6.1** — [PROCESS] `(key slicing)` (L718)

| # | Type | Code |
|---|------|------|
| 1 | SET | `key = key.substring(separaterPoint + 1)` // extract the index portion after the "/" |

**Block 6.2** — [IF] `(key.equals("*"))` (L720)

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

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

**Block 6.3** — [TRY-CATCH] `(parseInt key)` (L724-L732)

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

| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpIndexInt = Integer.valueOf(key)` |
| 2 | CATCH | `catch(NumberFormatException e) { return null; }` // return null if not a numeric string |

**Block 6.4** — [IF] `(tmpIndexInt == null)` (L733)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null` // null index check |

**Block 6.5** — [PROCESS] `(bounds check)` (L735)

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

**Block 6.6** — [IF] `(tmpIndex < 0 || tmpIndex >= ido_rsn_cd_list.size())` (L737)

> If the index exceeds list count minus 1, return null here (インデックス値がリスト個数-1を超えたら、ここでnullを返す)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null` // out of bounds check |

**Block 6.7** — [PROCESS] (L739)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return ((X33VDataTypeStringBean)ido_rsn_cd_list.get(tmpIndex)).loadModelData(subkey)` // delegate to sub-bean |

---

**Block 7** — [ELSE-IF] `(key.equals("異動理由メモ"))` (L743)

> Data type String item "Migration Reason Memo" (Item ID: ido_rsn_memo). Free-text memo explaining the migration reason.

**Block 7.1** — [IF] `(subkey.equalsIgnoreCase("value"))` (L744)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getIdo_rsn_memo_value()` |

**Block 7.2** — [ELSE-IF] `(subkey.equalsIgnoreCase("state"))` (L747)

> subkey is "state" — return state metadata (subkeyが"state"の場合、ステータスを返す)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getIdo_rsn_memo_state()` |

---

**Block 8** — [ELSE-IF] `(key.equals("異動区分選択画面遷移パターン"))` (L752)

> Data type String item "Migration Type Selection Screen Transition Pattern" (Item ID: hktgi_ido_div_seni_ptn). Defines the screen transition pattern for migration type selection.

**Block 8.1** — [IF] `(subkey.equalsIgnoreCase("value"))` (L753)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getHktgi_ido_div_seni_ptn_value()` |

**Block 8.2** — [ELSE-IF] `(subkey.equalsIgnoreCase("state"))` (L756)

> subkey is "state" — return state metadata (subkeyが"state"の場合、ステータスを返す)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getHktgi_ido_div_seni_ptn_state()` |

---

**Block 9** — [ELSE-IF] `(key.equals("オプションサービス契約番号"))` (L761)

> List item "Optional Service Contract Number" (String type, Item ID: op_svc_kei_no). Array of optional service contracts.

**Block 9.1** — [PROCESS] `(key slicing)` (L763)

| # | Type | Code |
|---|------|------|
| 1 | SET | `key = key.substring(separaterPoint + 1)` // extract the index portion after the "/" |

**Block 9.2** — [IF] `(key.equals("*"))` (L765)

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

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

**Block 9.3** — [TRY-CATCH] `(parseInt key)` (L769-L777)

> Parse the key as integer index. Return null if not numeric (インデックス値が数値文字列でない場合は、ここでnullを返す)

| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpIndexInt = Integer.valueOf(key)` |
| 2 | CATCH | `catch(NumberFormatException e) { return null; }` |

**Block 9.4** — [IF] `(tmpIndexInt == null)` (L778)

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

**Block 9.5** — [PROCESS] (L780)

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

**Block 9.6** — [IF] `(tmpIndex < 0 || tmpIndex >= op_svc_kei_no_list.size())` (L782)

> If index exceeds list count minus 1, return null (インデックス値がリスト個数-1を超えたら、ここでnullを返す)

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

**Block 9.7** — [PROCESS] (L784)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return ((X33VDataTypeStringBean)op_svc_kei_no_list.get(tmpIndex)).loadModelData(subkey)` // delegate to sub-bean |

---

**Block 10** — [ELSE-IF] `(key.equals("処理区分"))` (L789)

> Data type String item "Processing Classification" (Item ID: tran_div). The type of processing operation being performed.

**Block 10.1** — [IF] `(subkey.equalsIgnoreCase("value"))` (L790)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getTran_div_value()` |

**Block 10.2** — [ELSE-IF] `(subkey.equalsIgnoreCase("state"))` (L793)

> subkey is "state" — return state metadata (subkeyが"state"の場合、ステータスを返す)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getTran_div_state()` |

---

**Block 11** — [ELSE-IF] `(key.equals("申込番号"))` (L798)

> Data type String item "Order Number" (Item ID: mskm_no). The main order/application number identifier.

**Block 11.1** — [IF] `(subkey.equalsIgnoreCase("value"))` (L799)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getMskm_no_value()` |

**Block 11.2** — [ELSE-IF] `(subkey.equalsIgnoreCase("state"))` (L802)

> subkey is "state" — return state metadata (subkeyが"state"の場合、ステータスを返す)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getMskm_no_state()` |

---

**Block 12** — [ELSE-IF] `(key.equals("申込明細番号"))` (L807)

> Data type String item "Order Detail Number" (Item ID: mskm_dtl_no). The detailed line number within an order.

**Block 12.1** — [IF] `(subkey.equalsIgnoreCase("value"))` (L808)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getMskm_dtl_no_value()` |

**Block 12.2** — [ELSE-IF] `(subkey.equalsIgnoreCase("state"))` (L811)

> subkey is "state" — return state metadata (subkeyが"state"の場合、ステータスを返す)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getMskm_dtl_no_state()` |

---

**Block 13** — [ELSE-IF] `(key.equals("特定ID項目名"))` (L816)

> Data type String item "Specific ID Item Name" (Item ID: tokutei_id_kmk_nm). Name of a custom/specific identifier field.

**Block 13.1** — [IF] `(subkey.equalsIgnoreCase("value"))` (L817)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getTokutei_id_kmk_nm_value()` |

**Block 13.2** — [ELSE-IF] `(subkey.equalsIgnoreCase("state"))` (L820)

> subkey is "state" — return state metadata (subkeyが"state"の場合、ステータスを返す)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getTokutei_id_kmk_nm_state()` |

---

**Block 14** — [ELSE-IF] `(key.equals("特定ID項目値"))` (L825)

> Data type String item "Specific ID Item Value" (Item ID: tokutei_id_kmk_value). The value of a custom/specific identifier field.

**Block 14.1** — [IF] `(subkey.equalsIgnoreCase("value"))` (L826)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getTokutei_id_kmk_value_value()` |

**Block 14.2** — [ELSE-IF] `(subkey.equalsIgnoreCase("state"))` (L829)

> subkey is "state" — return state metadata (subkeyが"state"の場合、ステータスを返す)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getTokutei_id_kmk_value_state()` |

---

**Block 15** — [ELSE-IF] `(key.equals("ポップアップモード"))` (L834)

> Data type String item "Popup Mode" (Item ID: popup_mode). Controls whether a popup window/modal is active.

**Block 15.1** — [IF] `(subkey.equalsIgnoreCase("value"))` (L835)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getPopup_mode_value()` |

**Block 15.2** — [ELSE-IF] `(subkey.equalsIgnoreCase("state"))` (L838)

> subkey is "state" — return state metadata (subkeyが"state"の場合、ステータスを返す)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getPopup_mode_state()` |

---

**Block 16** — [ELSE-IF] `(key.equals("サービスコード"))` (L843)

> Data type String item "Service Code" (Item ID: svc_cd). The code identifying the type of telecom service.

**Block 16.1** — [IF] `(subkey.equalsIgnoreCase("value"))` (L844)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getSvc_cd_value()` |

**Block 16.2** — [ELSE-IF] `(subkey.equalsIgnoreCase("state"))` (L847)

> subkey is "state" — return state metadata (subkeyが"state"の場合、ステータスを返す)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getSvc_cd_state()` |

---

**Block 17** — [ELSE-IF] `(key.equals("料金グループコード"))` (L852)

> Data type String item "Price Group Code" (Item ID: prc_grp_cd). The pricing group classification for the service.

**Block 17.1** — [IF] `(subkey.equalsIgnoreCase("value"))` (L853)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getPrc_grp_cd_value()` |

**Block 17.2** — [ELSE-IF] `(subkey.equalsIgnoreCase("state"))` (L856)

> subkey is "state" — return state metadata (subkeyが"state"の場合、ステータスを返す)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getPrc_grp_cd_state()` |

---

**Block 18** — [ELSE-IF] `(key.equals("料金コースコード"))` (L861)

> Data type String item "Price Course Code" (Item ID: pcrs_cd). The specific pricing course plan code.

**Block 18.1** — [IF] `(subkey.equalsIgnoreCase("value"))` (L862)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getPcrs_cd_value()` |

**Block 18.2** — [ELSE-IF] `(subkey.equalsIgnoreCase("state"))` (L865)

> subkey is "state" — return state metadata (subkeyが"state"の場合、ステータスを返す)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getPcrs_cd_state()` |

---

**Block 19** — [ELSE-IF] `(key.equals("料金プランコード"))` (L870)

> Data type String item "Price Plan Code" (Item ID: pplan_cd). The specific pricing plan code for the service.

**Block 19.1** — [IF] `(subkey.equalsIgnoreCase("value"))` (L871)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getPplan_cd_value()` |

**Block 19.2** — [ELSE-IF] `(subkey.equalsIgnoreCase("state"))` (L874)

> subkey is "state" — return state metadata (subkeyが"state"の場合、ステータスを返す)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getPplan_cd_state()` |

---

**Block 20** — [ELSE-IF] `(key.equals("変更前サービスコード"))` (L879)

> Data type String item "Pre-Change Service Code" (Item ID: svc_cd_bf). The service code before the migration/change was applied.

**Block 20.1** — [IF] `(subkey.equalsIgnoreCase("value"))` (L880)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getSvc_cd_bf_value()` |

**Block 20.2** — [ELSE-IF] `(subkey.equalsIgnoreCase("state"))` (L883)

> subkey is "state" — return state metadata (subkeyが"state"の場合、ステータスを返す)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getSvc_cd_bf_state()` |

---

**Block 21** — [ELSE-IF] `(key.equals("変更前料金グループコード"))` (L888)

> Data type String item "Pre-Change Price Group Code" (Item ID: prc_grp_cd_bf). The pricing group code before the migration/change.

**Block 21.1** — [IF] `(subkey.equalsIgnoreCase("value"))` (L889)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getPrc_grp_cd_bf_value()` |

**Block 21.2** — [ELSE-IF] `(subkey.equalsIgnoreCase("state"))` (L892)

> subkey is "state" — return state metadata (subkeyが"state"の場合、ステータスを返す)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getPrc_grp_cd_bf_state()` |

---

**Block 22** — [ELSE-IF] `(key.equals("変更前料金コースコード"))` (L897)

> Data type String item "Pre-Change Price Course Code" (Item ID: pcrs_cd_bf). The pricing course code before the migration/change.

**Block 22.1** — [IF] `(subkey.equalsIgnoreCase("value"))` (L898)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getPcrs_cd_bf_value()` |

**Block 22.2** — [ELSE-IF] `(subkey.equalsIgnoreCase("state"))` (L901)

> subkey is "state" — return state metadata (subkeyが"state"の場合、ステータスを返す)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getPcrs_cd_bf_state()` |

---

**Block 23** — [ELSE-IF] `(key.equals("変更前料金プランコード"))` (L906)

> Data type String item "Pre-Change Price Plan Code" (Item ID: pplan_cd_bf). The pricing plan code before the migration/change.

**Block 23.1** — [IF] `(subkey.equalsIgnoreCase("value"))` (L907)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getPplan_cd_bf_value()` |

**Block 23.2** — [ELSE-IF] `(subkey.equalsIgnoreCase("state"))` (L910)

> subkey is "state" — return state metadata (subkeyが"state"の場合、ステータスを返す)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getPplan_cd_bf_state()` |

---

**Block 24** — [ELSE-IF] `(key.equals("割引自動適用対象外フラグ"))` (L915)

> Data type String item "Discount Automatic Application Exclusion Flag" (Item ID: wrib_auto_aply_tg_gai_flg). Flag indicating whether automatic discount application is excluded.

**Block 24.1** — [IF] `(subkey.equalsIgnoreCase("value"))` (L916)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getWrib_auto_aply_tg_gai_flg_value()` |

**Block 24.2** — [ELSE-IF] `(subkey.equalsIgnoreCase("state"))` (L919)

> subkey is "state" — return state metadata (subkeyが"state"の場合、ステータスを返す)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getWrib_auto_aply_tg_gai_flg_state()` |

---

**Block 25** — [ELSE-IF] `(key.equals("外部システムコード"))` (L924)

> Data type String item "External System Code" (Item ID: syscd). The code identifying an external system integration point.

**Block 25.1** — [IF] `(subkey.equalsIgnoreCase("value"))` (L925)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getSyscd_value()` |

**Block 25.2** — [ELSE-IF] `(subkey.equalsIgnoreCase("state"))` (L928)

> subkey is "state" — return state metadata (subkeyが"state"の場合、ステータスを返す)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getSyscd_state()` |

---

**Block 26** — [ELSE] `(no matching key)` (L932)

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

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null` // property not found fallback |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `sysid` | Field | System ID — the internal system identifier for the service contract record |
| `svc_kei_no` | Field | Service Contract Number — the main contract line number for a telecom service |
| `ido_div` | Field | Migration Type / Division — classifies the type of service migration (e.g., change, addition, cancellation) |
| `ido_rsn_cd` | Field | Migration Reason Code — a list of codes explaining why a migration was performed |
| `ido_rsn_memo` | Field | Migration Reason Memo — free-text notes explaining the migration reason |
| `hktgi_ido_div_seni_ptn` | Field | Migration Type Selection Screen Transition Pattern — defines how the UI navigates to the migration type selection screen |
| `op_svc_kei_no` | Field | Optional Service Contract Number — a list of optional/add-on service contract numbers associated with the main order |
| `tran_div` | Field | Processing Classification — indicates the type of processing (e.g., new registration, change, cancellation) |
| `mskm_no` | Field | Order Number (Application Number) — the unique identifier for a customer order/application |
| `mskm_dtl_no` | Field | Order Detail Number — the line-item number within an order for specific service details |
| `tokutei_id_kmk_nm` | Field | Specific ID Item Name — name of a custom identifier field for special identification |
| `tokutei_id_kmk_value` | Field | Specific ID Item Value — the actual value of a custom identifier field |
| `popup_mode` | Field | Popup Mode — indicates whether a popup/modal dialog is active on the screen |
| `svc_cd` | Field | Service Code — the code identifying the telecom service type (e.g., FTTH, DSL, Mobile) |
| `svc_cd_bf` | Field | Pre-Change Service Code — the service code before the migration/change operation |
| `prc_grp_cd` | Field | Price Group Code — the pricing group classification for the service plan |
| `prc_grp_cd_bf` | Field | Pre-Change Price Group Code — the pricing group code before the migration/change |
| `pcrs_cd` | Field | Price Course Code — the specific pricing course/plan code for the service |
| `pcrs_cd_bf` | Field | Pre-Change Price Course Code — the pricing course code before the migration/change |
| `pplan_cd` | Field | Price Plan Code — the specific pricing plan code for the service |
| `pplan_cd_bf` | Field | Pre-Change Price Plan Code — the pricing plan code before the migration/change |
| `wrib_auto_aply_tg_gai_flg` | Field | Discount Automatic Application Exclusion Flag — flag that disables automatic discount application |
| `syscd` | Field | External System Code — code identifying an external system integration point |
| SYSID | Field | System ID — system-level identifier for the data record |
| フラグ | Japanese term | Flag — a boolean-style indicator (commonly used in field names to denote true/false states) |
| 異動 | Japanese term | Migration — refers to service contract changes (change of plan, type, or terms) |
| 申込 | Japanese term | Application / Order — refers to a customer's order or application for a telecom service |
| 料金 | Japanese term | Pricing / Charge — relates to billing, pricing groups, courses, and plans |
| 割引 | Japanese term | Discount — relates to price reductions or promotional pricing |
| 外部システム | Japanese term | External System — refers to third-party or external system integration points |
| ポップアップ | Japanese term | Popup — a modal dialog window overlaid on the main screen |
| 処理区分 | Japanese term | Processing Classification — the type of operation (registration, change, cancellation) |
| サービス契約番号 | Japanese term | Service Contract Number — the primary contract identifier for a telecom service line |
| 異動理由コード | Japanese term | Migration Reason Code — the categorized reason for a service contract migration |
| 異動理由メモ | Japanese term | Migration Reason Memo — free-text explanation for the migration reason |
| 異動区分選択画面遷移パターン | Japanese term | Migration Type Selection Screen Transition Pattern — UI navigation configuration for migration selection screens |
| オプションサービス契約番号 | Japanese term | Optional Service Contract Number — add-on/optional service contract entries |
| 特定ID項目 | Japanese term | Specific ID Item — custom identifier fields with user-defined names and values |
| 変更前 | Japanese term | Pre-Change — the "before" state of a field prior to a migration/change operation |
| X33VDataTypeStringBean | Class | A sub-bean class used for list-type data items — holds string-typed data properties with value/state accessors |
| value | Access mode | Requests the actual data value of a property |
| state | Access mode | Requests the validation/state metadata of a property (e.g., required, error, enabled) |
