# Business Logic — FUW07101SF01DBean.loadModelData() [183 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.FUW07101SF.FUW07101SF01DBean` |
| Layer | Controller / Data Binding (View Bean — implements `X33VDataTypeBeanInterface`, `X33VListedBeanInterface`) |
| Module | `FUW07101SF` (Package: `eo.web.webview.FUW07101SF`) |

## 1. Role

### FUW07101SF01DBean.loadModelData()

This method is the **central data-routing dispatcher** for the `FUW07101SF01DBean` view data bean, which powers the service contract management screen in the K-Opticom telecommunications management platform. Its purpose is to resolve a two-level lookup — a **key** (business field name in Japanese) and a **subkey** (`"value"` or `"state"`) — to the corresponding getter method on the bean.

The method handles **17 distinct data categories**, each representing a business attribute managed by the service contract screen. These categories fall into four groups:

1. **Product/Equipment attributes** (5 keys): Home terminal model code, equipment provision type code and name, sales type code and name — these describe the physical and commercial classification of the subscriber's equipment and service tier.
2. **Pricing attributes** (4 keys): Charge code and name, equipment-type applicable charge code application start date, and equipment-type applicable charge code application end date — these define the billing structure for the subscriber's plan.
3. **Audit trail fields** (6 keys): Registered date/time, registered operator account, updated date/time, updated operator account, deleted date/time, deleted operator account — these track the lifecycle of the service contract record.
4. **Lifecycle flags** (2 keys): Invalid flag and invalid flag name — these represent the soft-delete/deactivation state of the record.

For each category, the method dispatches to one of two getter methods based on the subkey: `"value"` returns the field's current data value, while `"state"` returns the field's validation/display state. This design implements the **routing/dispatch pattern** — a single public method that delegates to specialized getters based on parameterized key-based lookup, which is the standard `X33VDataTypeBeanInterface` contract for the X33 web framework.

As a shared utility, this method is the canonical entry point for the X33 framework's data-loading mechanism (`X31CBaseBean.loadModelData`). Any screen component that uses this DBean as its data model will call this method to fetch field values and states by name. If no matching key is found, or if either parameter is `null`, the method returns `null` gracefully.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["loadModelData key, subkey"])
    START --> CHECK_NULL{"key == null or subkey == null?"}
    CHECK_NULL -->|Yes| RETURN_NULL(["return null"])
    CHECK_NULL -->|No| COMPUTE_SEP["separaterPoint = key.indexOf('/')"]

    COMPUTE_SEP --> KEY_CHECK1{"key equals '宅内機器型式コード'?"}
    KEY_CHECK1 -->|Yes| SUB1_CHECK{"subkey.equalsIgnoreCase('value')?"}
    SUB1_CHECK -->|Yes| CALL_TAKNKIKI_V["return getTaknkiki_model_cd_value()"]
    SUB1_CHECK -->|No| CALL_TAKNKIKI_S["return getTaknkiki_model_cd_state()"]

    KEY_CHECK1 -->|No| KEY_CHECK2{"key equals '機器提供種類コード'?"}
    KEY_CHECK2 -->|Yes| SUB2_CHECK{"subkey.equalsIgnoreCase('value')?"}
    SUB2_CHECK -->|Yes| CALL_KKTK_V["return getKktk_sbt_cd_value()"]
    SUB2_CHECK -->|No| CALL_KKTK_S["return getKktk_sbt_cd_state()"]

    KEY_CHECK2 -->|No| KEY_CHECK3{"key equals '機器提供種類コード名称'?"}
    KEY_CHECK3 -->|Yes| SUB3_CHECK{"subkey.equalsIgnoreCase('value')?"}
    SUB3_CHECK -->|Yes| CALL_KKTK_NM_V["return getKktk_sbt_cd_nm_value()"]
    SUB3_CHECK -->|No| CALL_KKTK_NM_S["return getKktk_sbt_cd_nm_state()"]

    KEY_CHECK3 -->|No| KEY_CHECK4{"key equals '販売種類コード'?"}
    KEY_CHECK4 -->|Yes| SUB4_CHECK{"subkey.equalsIgnoreCase('value')?"}
    SUB4_CHECK -->|Yes| CALL_HAMB_V["return getHambai_sbt_cd_value()"]
    SUB4_CHECK -->|No| CALL_HAMB_S["return getHambai_sbt_cd_state()"]

    KEY_CHECK4 -->|No| KEY_CHECK5{"key equals '販売種類コード名称'?"}
    KEY_CHECK5 -->|Yes| SUB5_CHECK{"subkey.equalsIgnoreCase('value')?"}
    SUB5_CHECK -->|Yes| CALL_HAMB_NM_V["return getHambai_sbt_cd_nm_value()"]
    SUB5_CHECK -->|No| CALL_HAMB_NM_S["return getHambai_sbt_cd_nm_state()"]

    KEY_CHECK5 -->|No| KEY_CHECK6{"key equals '料金コード'?"}
    KEY_CHECK6 -->|Yes| SUB6_CHECK{"subkey.equalsIgnoreCase('value')?"}
    SUB6_CHECK -->|Yes| CALL_PCRS_V["return getPcrs_cd_value()"]
    SUB6_CHECK -->|No| CALL_PCRS_S["return getPcrs_cd_state()"]

    KEY_CHECK6 -->|No| KEY_CHECK7{"key equals '料金コード名称'?"}
    KEY_CHECK7 -->|Yes| SUB7_CHECK{"subkey.equalsIgnoreCase('value')?"}
    SUB7_CHECK -->|Yes| CALL_PCRS_NM_V["return getPcrs_cd_nm_value()"]
    SUB7_CHECK -->|No| CALL_PCRS_NM_S["return getPcrs_cd_nm_state()"]

    KEY_CHECK7 -->|No| KEY_CHECK8{"key equals '機器型式対象料金コード適用開始年月日'?"}
    KEY_CHECK8 -->|Yes| SUB8_CHECK{"subkey.equalsIgnoreCase('value')?"}
    SUB8_CHECK -->|Yes| CALL_TSTAY_V["return getKkmdl_tg_pcrs_tstaymd_value()"]
    SUB8_CHECK -->|No| CALL_TSTAY_S["return getKkmdl_tg_pcrs_tstaymd_state()"]

    KEY_CHECK8 -->|No| KEY_CHECK9{"key equals '機器型式対象料金コード適用終了年月日'?"}
    KEY_CHECK9 -->|Yes| SUB9_CHECK{"subkey.equalsIgnoreCase('value')?"}
    SUB9_CHECK -->|Yes| CALL_TEND_V["return getKkmdl_tg_pcrs_tendymd_value()"]
    SUB9_CHECK -->|No| CALL_TEND_S["return getKkmdl_tg_pcrs_tendymd_state()"]

    KEY_CHECK9 -->|No| KEY_CHECK10{"key equals '登録年月日時分秒'?"}
    KEY_CHECK10 -->|Yes| SUB10_CHECK{"subkey.equalsIgnoreCase('value')?"}
    SUB10_CHECK -->|Yes| CALL_ADD_V["return getAdd_dtm_value()"]
    SUB10_CHECK -->|No| CALL_ADD_S["return getAdd_dtm_state()"]

    KEY_CHECK10 -->|No| KEY_CHECK11{"key equals '登録オペレータアカウント'?"}
    KEY_CHECK11 -->|Yes| SUB11_CHECK{"subkey.equalsIgnoreCase('value')?"}
    SUB11_CHECK -->|Yes| CALL_ADDOP_V["return getAdd_opeacnt_value()"]
    SUB11_CHECK -->|No| CALL_ADDOP_S["return getAdd_opeacnt_state()"]

    KEY_CHECK11 -->|No| KEY_CHECK12{"key equals '更新年月日時分秒'?"}
    KEY_CHECK12 -->|Yes| SUB12_CHECK{"subkey.equalsIgnoreCase('value')?"}
    SUB12_CHECK -->|Yes| CALL_UPD_V["return getUpd_dtm_value()"]
    SUB12_CHECK -->|No| CALL_UPD_S["return getUpd_dtm_state()"]

    KEY_CHECK12 -->|No| KEY_CHECK13{"key equals '更新オペレータアカウント'?"}
    KEY_CHECK13 -->|Yes| SUB13_CHECK{"subkey.equalsIgnoreCase('value')?"}
    SUB13_CHECK -->|Yes| CALL_UPDOP_V["return getUpd_opeacnt_value()"]
    SUB13_CHECK -->|No| CALL_UPDOP_S["return getUpd_opeacnt_state()"]

    KEY_CHECK13 -->|No| KEY_CHECK14{"key equals '削除年月日時分秒'?"}
    KEY_CHECK14 -->|Yes| SUB14_CHECK{"subkey.equalsIgnoreCase('value')?"}
    SUB14_CHECK -->|Yes| CALL_DEL_V["return getDel_dtm_value()"]
    SUB14_CHECK -->|No| CALL_DEL_S["return getDel_dtm_state()"]

    KEY_CHECK14 -->|No| KEY_CHECK15{"key equals '削除オペレータアカウント'?"}
    KEY_CHECK15 -->|Yes| SUB15_CHECK{"subkey.equalsIgnoreCase('value')?"}
    SUB15_CHECK -->|Yes| CALL_DELOP_V["return getDel_opeacnt_value()"]
    SUB15_CHECK -->|No| CALL_DELOP_S["return getDel_opeacnt_state()"]

    KEY_CHECK15 -->|No| KEY_CHECK16{"key equals '無効フラグ'?"}
    KEY_CHECK16 -->|Yes| SUB16_CHECK{"subkey.equalsIgnoreCase('value')?"}
    SUB16_CHECK -->|Yes| CALL_MK_V["return getMk_flg_value()"]
    SUB16_CHECK -->|No| CALL_MK_S["return getMk_flg_state()"]

    KEY_CHECK16 -->|No| KEY_CHECK17{"key equals '無効フラグ名称'?"}
    KEY_CHECK17 -->|Yes| SUB17_CHECK{"subkey.equalsIgnoreCase('value')?"}
    SUB17_CHECK -->|Yes| CALL_MKNM_V["return getMk_flg_nm_value()"]
    SUB17_CHECK -->|No| CALL_MKNM_S["return getMk_flg_nm_state()"]

    KEY_CHECK17 -->|No| ELSE_BLOCK["else: no matching key"]
    ELSE_BLOCK --> RETURN_NULL

    CALL_TAKNKIKI_V --> END_NODE(["Return / Next"])
    CALL_TAKNKIKI_S --> END_NODE
    CALL_KKTK_V --> END_NODE
    CALL_KKTK_S --> END_NODE
    CALL_KKTK_NM_V --> END_NODE
    CALL_KKTK_NM_S --> END_NODE
    CALL_HAMB_V --> END_NODE
    CALL_HAMB_S --> END_NODE
    CALL_HAMB_NM_V --> END_NODE
    CALL_HAMB_NM_S --> END_NODE
    CALL_PCRS_V --> END_NODE
    CALL_PCRS_S --> END_NODE
    CALL_PCRS_NM_V --> END_NODE
    CALL_PCRS_NM_S --> END_NODE
    CALL_TSTAY_V --> END_NODE
    CALL_TSTAY_S --> END_NODE
    CALL_TEND_V --> END_NODE
    CALL_TEND_S --> END_NODE
    CALL_ADD_V --> END_NODE
    CALL_ADD_S --> END_NODE
    CALL_ADDOP_V --> END_NODE
    CALL_ADDOP_S --> END_NODE
    CALL_UPD_V --> END_NODE
    CALL_UPD_S --> END_NODE
    CALL_UPDOP_V --> END_NODE
    CALL_UPDOP_S --> END_NODE
    CALL_DEL_V --> END_NODE
    CALL_DEL_S --> END_NODE
    CALL_DELOP_V --> END_NODE
    CALL_DELOP_S --> END_NODE
    CALL_MK_V --> END_NODE
    CALL_MK_S --> END_NODE
    CALL_MKNM_V --> END_NODE
    CALL_MKNM_S --> END_NODE
    RETURN_NULL --> END_NODE
```

**Processing flow summary:**

1. **Null guard (L533–L536):** If either `key` or `subkey` is `null`, immediately return `null`. This prevents `NullPointerException` when the key comparison logic runs.
2. **Separator computation (L538):** Compute `separaterPoint = key.indexOf("/")` — although this value is declared, it is never used in the method body. It appears to be residual/unused code.
3. **17-key routing chain (L541–L708):** A cascading `if`/`else if` chain checks `key` against 17 Japanese string literals, each representing a distinct business field. For each match, a nested check on `subkey.equalsIgnoreCase("value")` dispatches to either the `_value` or `_state` getter. This creates 34 unique return paths.
4. **Fallback (L711):** If no key matches any branch, the method returns `null`.

**No constants from `JZEStrConst` are used in this method.** The key literals are hardcoded Japanese strings directly in the conditional logic.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | **Business field name** — a Japanese-language string identifying which data attribute to retrieve. Must match one of 17 hardcoded literals such as `"宅内機器型式コード"` (Home Terminal Model Code) or `"登録年月日時分秒"` (Registered Date/Time). Controls the routing branch that determines which getter is invoked. |
| 2 | `subkey` | `String` | **Accessor type selector** — determines the data access mode. `"value"` (case-insensitive) returns the actual data value of the field (e.g., the current model code string). `"state"` (case-insensitive) returns the validation/display state string for UI rendering (e.g., whether the field is editable, required, or has validation errors). |

**Instance fields read by the method (via getter delegation):**

| Field | Type | Business Description |
|-------|------|---------------------|
| `taknkiki_model_cd_value` | `String` | Home terminal model code — the model identifier for the subscriber's internal wiring equipment |
| `taknkiki_model_cd_state` | `String` | Validation/display state for the home terminal model code field |
| `kktk_sbt_cd_value` | `String` | Equipment provision type code — classifies the type of equipment provision (e.g., rental, purchase) |
| `kktk_sbt_cd_nm_value` | `String` | Equipment provision type code name — human-readable name for the equipment provision type |
| `hambai_sbt_cd_value` | `String` | Sales type code — the commercial sales classification for this service contract |
| `hambai_sbt_cd_nm_value` | `String` | Sales type code name — human-readable name for the sales type |
| `pcrs_cd_value` | `String` | Charge code — the billing/charging classification code for this service |
| `pcrs_cd_nm_value` | `String` | Charge code name — human-readable name for the charge code |
| `kkmdl_tg_pcrs_tstaymd_value` | `String` | Equipment-type applicable charge code application start date — when the equipment-type charge plan begins |
| `kkmdl_tg_pcrs_tendymd_value` | `String` | Equipment-type applicable charge code application end date — when the equipment-type charge plan ends |
| `add_dtm_value` | `String` | Registered date/time (creation timestamp) — when this record was first inserted |
| `add_opeacnt_value` | `String` | Registered operator account — the user ID of the operator who created this record |
| `upd_dtm_value` | `String` | Updated date/time (modification timestamp) — when this record was last modified |
| `upd_opeacnt_value` | `String` | Updated operator account — the user ID of the operator who last modified this record |
| `del_dtm_value` | `String` | Deleted date/time (deletion timestamp) — when this record was soft-deleted |
| `del_opeacnt_value` | `String` | Deleted operator account — the user ID of the operator who deleted this record |
| `mk_flg_value` | `String` | Invalid flag — soft-delete/deactivation indicator |
| `mk_flg_nm_value` | `String` | Invalid flag name — human-readable label for the invalid flag state |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `FUW07101SF01DBean.getAdd_dtm_state` | FUW07101SF01DBean | - | Calls `getAdd_dtm_state` — returns validation state for registered date/time |
| R | `FUW07101SF01DBean.getAdd_dtm_value` | FUW07101SF01DBean | - | Calls `getAdd_dtm_value` — returns registered date/time value |
| R | `FUW07101SF01DBean.getAdd_opeacnt_state` | FUW07101SF01DBean | - | Calls `getAdd_opeacnt_state` — returns validation state for registered operator account |
| R | `FUW07101SF01DBean.getAdd_opeacnt_value` | FUW07101SF01DBean | - | Calls `getAdd_opeacnt_value` — returns registered operator account value |
| R | `FUW07101SF01DBean.getDel_dtm_state` | FUW07101SF01DBean | - | Calls `getDel_dtm_state` — returns validation state for deleted date/time |
| R | `FUW07101SF01DBean.getDel_dtm_value` | FUW07101SF01DBean | - | Calls `getDel_dtm_value` — returns deleted date/time value |
| R | `FUW07101SF01DBean.getDel_opeacnt_state` | FUW07101SF01DBean | - | Calls `getDel_opeacnt_state` — returns validation state for deleted operator account |
| R | `FUW07101SF01DBean.getDel_opeacnt_value` | FUW07101SF01DBean | - | Calls `getDel_opeacnt_value` — returns deleted operator account value |
| R | `FUW07101SF01DBean.getHambai_sbt_cd_nm_state` | FUW07101SF01DBean | - | Calls `getHambai_sbt_cd_nm_state` — returns validation state for sales type code name |
| R | `FUW07101SF01DBean.getHambai_sbt_cd_nm_value` | FUW07101SF01DBean | - | Calls `getHambai_sbt_cd_nm_value` — returns sales type code name value |
| R | `FUW07101SF01DBean.getHambai_sbt_cd_state` | FUW07101SF01DBean | - | Calls `getHambai_sbt_cd_state` — returns validation state for sales type code |
| R | `FUW07101SF01DBean.getHambai_sbt_cd_value` | FUW07101SF01DBean | - | Calls `getHambai_sbt_cd_value` — returns sales type code value |
| R | `FUW07101SF01DBean.getKkmdl_tg_pcrs_tendymd_state` | FUW07101SF01DBean | - | Calls `getKkmdl_tg_pcrs_tendymd_state` — returns validation state for equipment-type charge end date |
| R | `FUW07101SF01DBean.getKkmdl_tg_pcrs_tendymd_value` | FUW07101SF01DBean | - | Calls `getKkmdl_tg_pcrs_tendymd_value` — returns equipment-type charge end date value |
| R | `FUW07101SF01DBean.getKkmdl_tg_pcrs_tstaymd_state` | FUW07101SF01DBean | - | Calls `getKkmdl_tg_pcrs_tstaymd_state` — returns validation state for equipment-type charge start date |
| R | `FUW07101SF01DBean.getKkmdl_tg_pcrs_tstaymd_value` | FUW07101SF01DBean | - | Calls `getKkmdl_tg_pcrs_tstaymd_value` — returns equipment-type charge start date value |
| R | `FUW07101SF01DBean.getKktk_sbt_cd_nm_state` | FUW07101SF01DBean | - | Calls `getKktk_sbt_cd_nm_state` — returns validation state for equipment provision type code name |
| R | `FUW07101SF01DBean.getKktk_sbt_cd_nm_value` | FUW07101SF01DBean | - | Calls `getKktk_sbt_cd_nm_value` — returns equipment provision type code name value |
| R | `FUW07101SF01DBean.getKktk_sbt_cd_state` | FUW07101SF01DBean | - | Calls `getKktk_sbt_cd_state` — returns validation state for equipment provision type code |
| R | `FUW07101SF01DBean.getKktk_sbt_cd_value` | FUW07101SF01DBean | - | Calls `getKktk_sbt_cd_value` — returns equipment provision type code value |
| R | `FUW07101SF01DBean.getMk_flg_nm_state` | FUW07101SF01DBean | - | Calls `getMk_flg_nm_state` — returns validation state for invalid flag name |
| R | `FUW07101SF01DBean.getMk_flg_nm_value` | FUW07101SF01DBean | - | Calls `getMk_flg_nm_value` — returns invalid flag name value |
| R | `FUW07101SF01DBean.getMk_flg_state` | FUW07101SF01DBean | - | Calls `getMk_flg_state` — returns validation state for invalid flag |
| R | `FUW07101SF01DBean.getMk_flg_value` | FUW07101SF01DBean | - | Calls `getMk_flg_value` — returns invalid flag value |
| R | `FUW07101SF01DBean.getPcrs_cd_nm_state` | FUW07101SF01DBean | - | Calls `getPcrs_cd_nm_state` — returns validation state for charge code name |
| R | `FUW07101SF01DBean.getPcrs_cd_nm_value` | FUW07101SF01DBean | - | Calls `getPcrs_cd_nm_value` — returns charge code name value |
| R | `FUW07101SF01DBean.getPcrs_cd_state` | FUW07101SF01DBean | - | Calls `getPcrs_cd_state` — returns validation state for charge code |
| R | `FUW07101SF01DBean.getPcrs_cd_value` | FUW07101SF01DBean | - | Calls `getPcrs_cd_value` — returns charge code value |
| R | `FUW07101SF01DBean.getTaknkiki_model_cd_state` | FUW07101SF01DBean | - | Calls `getTaknkiki_model_cd_state` — returns validation state for home terminal model code |
| R | `FUW07101SF01DBean.getTaknkiki_model_cd_value` | FUW07101SF01DBean | - | Calls `getTaknkiki_model_cd_value` — returns home terminal model code value |
| R | `FUW07101SF01DBean.getUpd_dtm_state` | FUW07101SF01DBean | - | Calls `getUpd_dtm_state` — returns validation state for updated date/time |
| R | `FUW07101SF01DBean.getUpd_dtm_value` | FUW07101SF01DBean | - | Calls `getUpd_dtm_value` — returns updated date/time value |
| R | `FUW07101SF01DBean.getUpd_opeacnt_state` | FUW07101SF01DBean | - | Calls `getUpd_opeacnt_state` — returns validation state for updated operator account |
| R | `FUW07101SF01DBean.getUpd_opeacnt_value` | FUW07101SF01DBean | - | Calls `getUpd_opeacnt_value` — returns updated operator account value |

**Analysis:** This method performs **exclusively read (R) operations**. It contains no database access, no SC/CBS calls, no entity manipulation, and no write operations. All 34 method calls (17 keys x 2 subkey types) delegate to simple getter methods on the same bean class. The method is a **pure data-routing layer** with no side effects — it simply resolves a key/subkey pair to the appropriate getter and returns its result.

## 5. Dependency Trace

No external callers of `FUW07101SF01DBean.loadModelData(String, String)` were found in the codebase. This method is invoked through the **X33 framework's data loading mechanism** — when the framework's `X31CBaseBean` initialization process (or a listed-bean component) calls `loadModelData()` as part of the standard data-loading contract. Other `DBean` classes in the FUW009xxSF modules implement similar `loadModelData` patterns for their own field routing, but they are independent implementations, not callers.

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Screen:FUW07101SF (framework-generated) | `X31CBaseBean.loadData` -> `FUW07101SF01DBean.loadModelData` | `getTaknkiki_model_cd_value [R] in-memory` |
| 2 | Screen:FUW07101SF (framework-generated) | `X31CBaseBean.loadData` -> `FUW07101SF01DBean.loadModelData` | `getKktk_sbt_cd_value [R] in-memory` |
| 3 | Screen:FUW07101SF (framework-generated) | `X31CBaseBean.loadData` -> `FUW07101SF01DBean.loadModelData` | `getHambai_sbt_cd_value [R] in-memory` |
| 4 | Screen:FUW07101SF (framework-generated) | `X31CBaseBean.loadData` -> `FUW07101SF01DBean.loadModelData` | `getPcrs_cd_value [R] in-memory` |
| 5 | Screen:FUW07101SF (framework-generated) | `X31CBaseBean.loadData` -> `FUW07101SF01DBean.loadModelData` | `getAdd_dtm_value [R] in-memory` |
| 6 | Screen:FUW07101SF (framework-generated) | `X31CBaseBean.loadData` -> `FUW07101SF01DBean.loadModelData` | `getUpd_dtm_value [R] in-memory` |
| 7 | Screen:FUW07101SF (framework-generated) | `X31CBaseBean.loadData` -> `FUW07101SF01DBean.loadModelData` | `getDel_dtm_value [R] in-memory` |
| 8 | Screen:FUW07101SF (framework-generated) | `X31CBaseBean.loadData` -> `FUW07101SF01DBean.loadModelData` | `getMk_flg_value [R] in-memory` |

**Notes:** The X33 framework's `X31CBaseBean.loadData()` iterates over the DBean's registered fields and calls `loadModelData()` for each field by its name key. The above rows represent the primary entry points through which the framework invokes this method during screen initialization — one per unique getter endpoint.

## 6. Per-Branch Detail Blocks

**Block 1** — IF `(null check)` (L533)

> Guard clause: returns null if either parameter is null to prevent NullPointerException during key comparison.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if(key == null || subkey == null)` // Japanese comment: key, subkeyがnullの場合、nullを返す (Returns null if key/subkey is null) |
| 2 | RETURN | `return null;` |

---

**Block 2** — SET (L538)

> Computes index of "/" in key. Value is declared but never used — appears to be residual code.

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

---

**Block 3** — IF-ELSE-IF CHAIN — `"宅内機器型式コード"` (Home Terminal Model Code) (L541)

> First data category: resolves to home terminal equipment model code fields.
> Japanese comment: データタイプがStringの項目"宅内機器型式コード"(項目ID:taknkiki_model_cd) (Data type is String field "Home Terminal Model Code" (Field ID: taknkiki_model_cd))

| # | Type | Code |
|---|------|------|
| 1 | IF | `if(key.equals("宅内機器型式コード"))` |
| 2 | IF | `if(subkey.equalsIgnoreCase("value"))` // Gets the field value |
| 3 | CALL | `return getTaknkiki_model_cd_value();` |
| 4 | ELSE-IF | `else if(subkey.equalsIgnoreCase("state"))` // Japanese comment: subkeyが"state"の場合、ステータスを返す (Returns state when subkey is "state") |
| 5 | CALL | `return getTaknkiki_model_cd_state();` |

---

**Block 4** — ELSE-IF — `"機器提供種類コード"` (Equipment Provision Type Code) (L552)

> Second data category: equipment provision type code.
> Japanese comment: データタイプがStringの項目"機器提供種類コード"(項目ID:kktk_sbt_cd)

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if(key.equals("機器提供種類コード"))` |
| 2 | IF | `if(subkey.equalsIgnoreCase("value"))` |
| 3 | CALL | `return getKktk_sbt_cd_value();` |
| 4 | ELSE-IF | `else if(subkey.equalsIgnoreCase("state"))` |
| 5 | CALL | `return getKktk_sbt_cd_state();` |

---

**Block 5** — ELSE-IF — `"機器提供種類コード名称"` (Equipment Provision Type Code Name) (L562)

> Third data category: equipment provision type code human-readable name.
> Japanese comment: データタイプがStringの項目"機器提供種類コード名称"(項目ID:kktk_sbt_cd_nm)

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if(key.equals("機器提供種類コード名称"))` |
| 2 | IF | `if(subkey.equalsIgnoreCase("value"))` |
| 3 | CALL | `return getKktk_sbt_cd_nm_value();` |
| 4 | ELSE-IF | `else if(subkey.equalsIgnoreCase("state"))` |
| 5 | CALL | `return getKktk_sbt_cd_nm_state();` |

---

**Block 6** — ELSE-IF — `"販売種類コード"` (Sales Type Code) (L572)

> Fourth data category: sales/commercial classification type code.
> Japanese comment: データタイプがStringの項目"販売種類コード"(項目ID:hambai_sbt_cd)

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if(key.equals("販売種類コード"))` |
| 2 | IF | `if(subkey.equalsIgnoreCase("value"))` |
| 3 | CALL | `return getHambai_sbt_cd_value();` |
| 4 | ELSE-IF | `else if(subkey.equalsIgnoreCase("state"))` |
| 5 | CALL | `return getHambai_sbt_cd_state();` |

---

**Block 7** — ELSE-IF — `"販売種類コード名称"` (Sales Type Code Name) (L582)

> Fifth data category: sales type code human-readable name.
> Japanese comment: データタイプがStringの項目"販売種類コード名称"(項目ID:hambai_sbt_cd_nm)

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if(key.equals("販売種類コード名称"))` |
| 2 | IF | `if(subkey.equalsIgnoreCase("value"))` |
| 3 | CALL | `return getHambai_sbt_cd_nm_value();` |
| 4 | ELSE-IF | `else if(subkey.equalsIgnoreCase("state"))` |
| 5 | CALL | `return getHambai_sbt_cd_nm_state();` |

---

**Block 8** — ELSE-IF — `"料金コード"` (Charge Code) (L592)

> Sixth data category: billing/charging classification code.
> Japanese comment: データタイプがStringの項目"料金コード"(項目ID:pcrs_cd)

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if(key.equals("料金コード"))` |
| 2 | IF | `if(subkey.equalsIgnoreCase("value"))` |
| 3 | CALL | `return getPcrs_cd_value();` |
| 4 | ELSE-IF | `else if(subkey.equalsIgnoreCase("state"))` |
| 5 | CALL | `return getPcrs_cd_state();` |

---

**Block 9** — ELSE-IF — `"料金コード名称"` (Charge Code Name) (L602)

> Seventh data category: charge code human-readable name.
> Japanese comment: データタイプがStringの項目"料金コード名称"(項目ID:pcrs_cd_nm)

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if(key.equals("料金コード名称"))` |
| 2 | IF | `if(subkey.equalsIgnoreCase("value"))` |
| 3 | CALL | `return getPcrs_cd_nm_value();` |
| 4 | ELSE-IF | `else if(subkey.equalsIgnoreCase("state"))` |
| 5 | CALL | `return getPcrs_cd_nm_state();` |

---

**Block 10** — ELSE-IF — `"機器型式対象料金コード適用開始年月日"` (Equipment-Type Applicable Charge Code Application Start Date) (L612)

> Eighth data category: when the equipment-type charge plan begins.
> Japanese comment: データタイプがStringの項目"機器型式対象料金コード適用開始年月日"(項目ID:kkmdl_tg_pcrs_tstaymd)

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if(key.equals("機器型式対象料金コード適用開始年月日"))` |
| 2 | IF | `if(subkey.equalsIgnoreCase("value"))` |
| 3 | CALL | `return getKkmdl_tg_pcrs_tstaymd_value();` |
| 4 | ELSE-IF | `else if(subkey.equalsIgnoreCase("state"))` |
| 5 | CALL | `return getKkmdl_tg_pcrs_tstaymd_state();` |

---

**Block 11** — ELSE-IF — `"機器型式対象料金コード適用終了年月日"` (Equipment-Type Applicable Charge Code Application End Date) (L622)

> Ninth data category: when the equipment-type charge plan ends.
> Japanese comment: データタイプがStringの項目"機器型式対象料金コード適用終了年月日"(項目ID:kkmdl_tg_pcrs_tendymd)

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if(key.equals("機器型式対象料金コード適用終了年月日"))` |
| 2 | IF | `if(subkey.equalsIgnoreCase("value"))` |
| 3 | CALL | `return getKkmdl_tg_pcrs_tendymd_value();` |
| 4 | ELSE-IF | `else if(subkey.equalsIgnoreCase("state"))` |
| 5 | CALL | `return getKkmdl_tg_pcrs_tendymd_state();` |

---

**Block 12** — ELSE-IF — `"登録年月日時分秒"` (Registered Date/Time) (L632)

> Tenth data category: creation timestamp.
> Japanese comment: データタイプがStringの項目"登録年月日時分秒"(項目ID:add_dtm)

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if(key.equals("登録年月日時分秒"))` |
| 2 | IF | `if(subkey.equalsIgnoreCase("value"))` |
| 3 | CALL | `return getAdd_dtm_value();` |
| 4 | ELSE-IF | `else if(subkey.equalsIgnoreCase("state"))` |
| 5 | CALL | `return getAdd_dtm_state();` |

---

**Block 13** — ELSE-IF — `"登録オペレータアカウント"` (Registered Operator Account) (L642)

> Eleventh data category: creator's user account.
> Japanese comment: データタイプがStringの項目"登録オペレータアカウント"(項目ID:add_opeacnt)

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if(key.equals("登録オペレータアカウント"))` |
| 2 | IF | `if(subkey.equalsIgnoreCase("value"))` |
| 3 | CALL | `return getAdd_opeacnt_value();` |
| 4 | ELSE-IF | `else if(subkey.equalsIgnoreCase("state"))` |
| 5 | CALL | `return getAdd_opeacnt_state();` |

---

**Block 14** — ELSE-IF — `"更新年月日時分秒"` (Updated Date/Time) (L652)

> Twelfth data category: last modification timestamp.
> Japanese comment: データタイプがStringの項目"更新年月日時分秒"(項目ID:upd_dtm)

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if(key.equals("更新年月日時分秒"))` |
| 2 | IF | `if(subkey.equalsIgnoreCase("value"))` |
| 3 | CALL | `return getUpd_dtm_value();` |
| 4 | ELSE-IF | `else if(subkey.equalsIgnoreCase("state"))` |
| 5 | CALL | `return getUpd_dtm_state();` |

---

**Block 15** — ELSE-IF — `"更新オペレータアカウント"` (Updated Operator Account) (L662)

> Thirteenth data category: modifier's user account.
> Japanese comment: データタイプがStringの項目"更新オペレータアカウント"(項目ID:upd_opeacnt)

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if(key.equals("更新オペレータアカウント"))` |
| 2 | IF | `if(subkey.equalsIgnoreCase("value"))` |
| 3 | CALL | `return getUpd_opeacnt_value();` |
| 4 | ELSE-IF | `else if(subkey.equalsIgnoreCase("state"))` |
| 5 | CALL | `return getUpd_opeacnt_state();` |

---

**Block 16** — ELSE-IF — `"削除年月日時分秒"` (Deleted Date/Time) (L672)

> Fourteenth data category: soft-delete timestamp.
> Japanese comment: データタイプがStringの項目"削除年月日時分秒"(項目ID:del_dtm)

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if(key.equals("削除年月日時分秒"))` |
| 2 | IF | `if(subkey.equalsIgnoreCase("value"))` |
| 3 | CALL | `return getDel_dtm_value();` |
| 4 | ELSE-IF | `else if(subkey.equalsIgnoreCase("state"))` |
| 5 | CALL | `return getDel_dtm_state();` |

---

**Block 17** — ELSE-IF — `"削除オペレータアカウント"` (Deleted Operator Account) (L682)

> Fifteenth data category: deleter's user account.
> Japanese comment: データタイプがStringの項目"削除オペレータアカウント"(項目ID:del_opeacnt)

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if(key.equals("削除オペレータアカウント"))` |
| 2 | IF | `if(subkey.equalsIgnoreCase("value"))` |
| 3 | CALL | `return getDel_opeacnt_value();` |
| 4 | ELSE-IF | `else if(subkey.equalsIgnoreCase("state"))` |
| 5 | CALL | `return getDel_opeacnt_state();` |

---

**Block 18** — ELSE-IF — `"無効フラグ"` (Invalid Flag) (L692)

> Sixteenth data category: soft-delete/deactivation indicator.
> Japanese comment: データタイプがStringの項目"無効フラグ"(項目ID:mk_flg)

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if(key.equals("無効フラグ"))` |
| 2 | IF | `if(subkey.equalsIgnoreCase("value"))` |
| 3 | CALL | `return getMk_flg_value();` |
| 4 | ELSE-IF | `else if(subkey.equalsIgnoreCase("state"))` |
| 5 | CALL | `return getMk_flg_state();` |

---

**Block 19** — ELSE-IF — `"無効フラグ名称"` (Invalid Flag Name) (L702)

> Seventeenth data category: human-readable invalid flag label.
> Japanese comment: データタイプがStringの項目"無効フラグ名称"(項目ID:mk_flg_nm)

| # | Type | Code |
|---|------|------|
| 1 | ELSE-IF | `else if(key.equals("無効フラグ名称"))` |
| 2 | IF | `if(subkey.equalsIgnoreCase("value"))` |
| 3 | CALL | `return getMk_flg_nm_value();` |
| 4 | ELSE-IF | `else if(subkey.equalsIgnoreCase("state"))` |
| 5 | CALL | `return getMk_flg_nm_state();` |

---

**Block 20** — ELSE (Fallback) (L711)

> Final catch-all: returns null when no key matches any of the 17 expected Japanese field names.
> Japanese comment: 条件に合致するプロパティが存在しない場合は、nullを返す。 (If no matching property exists, returns null.)

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

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `taknkiki_model_cd` | Field | Home terminal model code — identifies the model type of the subscriber's internal wiring equipment (宅内機器) |
| `kktk_sbt_cd` | Field | Equipment provision type code — classifies how equipment is provided (e.g., rental, purchase, bundled with service) (機器提供種類) |
| `kktk_sbt_cd_nm` | Field | Equipment provision type code name — human-readable label for the equipment provision type |
| `hambai_sbt_cd` | Field | Sales type code — commercial sales classification for this service contract (販売種類) |
| `hambai_sbt_cd_nm` | Field | Sales type code name — human-readable label for the sales type |
| `pcrs_cd` | Field | Charge code — billing/charging classification code for the subscriber's plan (料金) |
| `pcrs_cd_nm` | Field | Charge code name — human-readable label for the charge code |
| `kkmdl_tg_pcrs_tstaymd` | Field | Equipment-type applicable charge code application start date — effective start date for the equipment-type charge plan (機器型式対象料金コード適用開始年月日) |
| `kkmdl_tg_pcrs_tendymd` | Field | Equipment-type applicable charge code application end date — effective end date for the equipment-type charge plan (機器型式対象料金コード適用終了年月日) |
| `add_dtm` | Field | Registered date/time — timestamp when the service contract record was first created (登録年月日時分秒) |
| `add_opeacnt` | Field | Registered operator account — user ID of the operator who created the record (登録オペレータアカウント) |
| `upd_dtm` | Field | Updated date/time — timestamp when the record was last modified (更新年月日時分秒) |
| `upd_opeacnt` | Field | Updated operator account — user ID of the operator who last modified the record (更新オペレータアカウント) |
| `del_dtm` | Field | Deleted date/time — timestamp when the record was soft-deleted (削除年月日時分秒) |
| `del_opeacnt` | Field | Deleted operator account — user ID of the operator who deleted the record (削除オペレータアカウント) |
| `mk_flg` | Field | Invalid flag — soft-delete/deactivation indicator; non-empty/non-zero means the record is deactivated (無効フラグ) |
| `mk_flg_nm` | Field | Invalid flag name — human-readable label for the invalid flag state (無効フラグ名称) |
| X33VDataTypeBeanInterface | Interface | X33 framework interface for data type beans; `loadModelData()` is the standard method for dynamic field access |
| X33VListedBeanInterface | Interface | X33 framework interface for beans that can be displayed in lists/tables |
| X31CBaseBean | Base class | X31 framework base bean class providing `loadModelData()` as a contract method for screen data initialization |
| `key` | Parameter | Business field name in Japanese; used as a string-based lookup key for routing to the correct getter |
| `subkey` | Parameter | Accessor mode selector — `"value"` returns the field's data value, `"state"` returns its UI validation state |
| 宅内機器 | Japanese term | Home terminal — internal customer premises equipment (CPE) for telecommunications service delivery |
| 機器提供 | Japanese term | Equipment provision — the manner in which customer equipment is provided to the subscriber |
| 販売種類 | Japanese term | Sales type — the commercial classification of a service contract (e.g., new, renewal, transfer) |
| 料金 | Japanese term | Charge/fee — the billing/charging classification for the service |
| 無効 | Japanese term | Invalid/deactivated — indicates a soft-delete or deactivation state for a service contract record |
| FUW07101SF | Module | Screen module for service contract detail management (FUW = FUiwara/Web screen module convention) |
