# Business Logic — KKW00801SF01DBean.loadModelData() [236 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKW00801SF.KKW00801SF01DBean` |
| Layer | Webview / Data Bean (Presentation tier — provides property-based data access for screen rendering) |
| Module | `KKW00801SF` (Package: `eo.web.webview.KKW00801SF`) |

## 1. Role

### KKW00801SF01DBean.loadModelData()

This method serves as the **centralized property routing engine** for the KKW00801SF screen's data bean. It retrieves values for screen-bound properties using a two-level key system: a **data type key** (e.g., "メールアカウント" — Mail Account, "ウィルスチェック" — Virus Check) and a **sub-key** (e.g., "value", "enable", "state") that determines which aspect of the property to return. This design pattern is a form of **property-based lookup** — similar to a map-based getter that substitutes runtime string resolution for compile-time type safety.

The method handles **14 distinct data types** across three categories. **Category 1 — Static Properties**: Mail account, mail address domain, mail alias, mail box capacity, virus check, POP ID, usage start date (year/month/day), display mail box capacity, display virus check, and registration mail box capacity MB value. Each static property exposes up to three accessor facets: the actual value, an enabled/disabled flag, and a UI state flag. **Category 2 — List-Based Properties**: Mail NOP capacity selection list and virus check selection list. These handle hierarchical key paths in the format "typeName/index/propertyName" (e.g., "プランリスト/0/プラン名" — Plan List/0/Plan Name) and recursively delegate to individual list items.

This method implements the **delegation and template patterns**: it delegates property access to individual getters for static data, and recursively delegates to child data beans for list items. It serves as the **shared utility entry point** for screen rendering — any screen component that needs to read a typed property value calls `loadModelData` with the appropriate key/subkey combination. The fallback path returns null when no matching type or subkey is found, enforcing a safe default behavior.

## 2. Processing Pattern (Detailed Business Logic)

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

    START --> CHK_NULL["key or subkey is null?"]
    CHK_NULL -->|Yes| RETNULL1["Return null"]
    CHK_NULL -->|No| FINDSEP["Find slash separator in key"]

    FINDSEP --> SCTYPE["Check data type (key match)"]

    SCTYPE --> SIMPLE["Simple key: static data types"]
    SCTYPE --> MLBOXLIST["key = メールNOP容量選択リスト"]
    SCTYPE --> VIRUSLIST["key = ウィルスチェック選択リスト"]

    SIMPLE --> SUBKEYCHECK["subkey check"]

    SUBKEYCHECK --> SV["subkey = value"]
    SUBKEYCHECK --> SE["subkey = enable"]
    SUBKEYCHECK --> SS["subkey = state"]

    SV --> GETVALUE["Return getter(value)"]
    SE --> GETENABLE["Return getter(enable)"]
    SS --> GETSTATE["Return getter(state)"]

    MLBOXLIST --> MLPARSE["Parse key: separate index from property key"]
    MLPARSE --> MWILDCARD{"keyRemain equals *?"}
    MWILDCARD -->|Yes| MSIZE["Return mlbox_cap_op_list_list.size()"]
    MWILDCARD -->|No| MIDX["Parse integer index from key"]
    MIDX --> MCATCH{"NumberFormatException?"}
    MCATCH -->|Yes| RETNULL2["Return null"]
    MCATCH -->|No| MBOUNDS{"Index in list bounds?"}
    MBOUNDS -->|No| RETNULL3["Return null"]
    MBOUNDS -->|Yes| MRECURSE["Recursively call loadModelData on list item"]
    MSIZE --> RETMLBOX["Return Object"]
    MRECURSE --> RETMLBOX

    VIRUSLIST --> VPARSE["Parse key: separate index from property key"]
    VPARSE --> VWILDCARD{"keyRemain equals *?"}
    VWILDCARD -->|Yes| VSIZ["Return virus_chk_op_list_list.size()"]
    VWILDCARD -->|No| VIDX["Parse integer index from key"]
    VIDX --> VCATCH{"NumberFormatException?"}
    VCATCH -->|Yes| RETNULL4["Return null"]
    VCATCH -->|No| VBOUNDS{"Index in list bounds?"}
    VBOUNDS -->|No| RETNULL5["Return null"]
    VBOUNDS -->|Yes| VRECURSE["Recursively call loadModelData on list item"]
    VSIZ --> RETVIRUS["Return Object"]
    VRECURSE --> RETVIRUS

    RETNULL1 --> RETEND(["Return Object"])
    RETNULL2 --> RETEND
    RETNULL3 --> RETEND
    RETNULL4 --> RETEND
    RETNULL5 --> RETEND
    RETMLBOX --> RETEND
    RETVIRUS --> RETEND
    GETVALUE --> RETEND
    GETENABLE --> RETEND
    GETSTATE --> RETEND
```

**Branch Summary:**

| Branch | Condition | Data Types Handled |
|--------|-----------|--------------------|
| Simple (Static) | Key matches a known static data type | Mail Account, Mail Address Domain, Mail Alias, Mail Box Capacity, Virus Check, POP ID, Usage Start Date (Year/Month/Day), Display Mail Box Capacity, Display Virus Check, Registration Mail Box Capacity MB Value |
| List (Mail NOP) | Key equals "メールNOP容量選択リスト" | Mail NOP capacity selection list — recursive delegation to list items |
| List (Virus) | Key equals "ウィルスチェック選択リスト" | Virus check selection list — recursive delegation to list items |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | The **data type identifier** that determines which property group to access. Can be a static type (e.g., "メールアカウント" — Mail Account, "POP ID", "利用開始日（年）" — Usage Start Date Year) or a list type prefix (e.g., "メールNOP容量選択リスト" — Mail NOP Capacity Selection List, "ウィルスチェック選択リスト" — Virus Check Selection List). For list types, the key follows a hierarchical path format: "typeName/index/propertyName" (e.g., "プランリスト/0/プラン名" — Plan List/0/Plan Name), where the portion after the first slash is further parsed to extract an integer index and a nested property key. |
| 2 | `subkey` | `String` | The **accessor facet** specifying which aspect of the property to retrieve. Takes one of three values: `"value"` (the actual data value), `"enable"` (the enabled/disabled flag controlling UI interactivity), or `"state"` (the UI state flag for rendering). Case-insensitive matching (`equalsIgnoreCase`). For list-based keys, the subkey follows the recursive key path and may reference nested property keys on individual list items. |

**Instance fields read by this method:**

| Field | Type | Business Description |
|-------|------|---------------------|
| `mlbox_cap_op_list_list` | `List` (of `X33VDataTypeBeanInterface`) | The mail NOP capacity selection list — a collection of selectable capacity options for mail operations |
| `virus_chk_op_list_list` | `List` (of `X33VDataTypeBeanInterface`) | The virus check selection list — a collection of selectable virus check options |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `JKKAdEdit.substring` | JKKAdEdit | - | 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 | `KKW00801SF01DBean.getMailalias_enabled` | KKW00801SF01DBean | - | Calls `getMailalias_enabled` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getMailalias_state` | KKW00801SF01DBean | - | Calls `getMailalias_state` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getMailalias_value` | KKW00801SF01DBean | - | Calls `getMailalias_value` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getMlad_account_enabled` | KKW00801SF01DBean | - | Calls `getMlad_account_enabled` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getMlad_account_state` | KKW00801SF01DBean | - | Calls `getMlad_account_state` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getMlad_account_value` | KKW00801SF01DBean | - | Calls `getMlad_account_value` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getMlad_domain_enabled` | KKW00801SF01DBean | - | Calls `getMlad_domain_enabled` in `KKW00801SF01DBean` |
| R | `KKW0080801SF01DBean.getMlad_domain_state` | KKW00801SF01DBean | - | Calls `getMlad_domain_state` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getMlad_domain_value` | KKW00801SF01DBean | - | Calls `getMlad_domain_value` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getMlbox_capa_index_enabled` | KKW00801SF01DBean | - | Calls `getMlbox_capa_index_enabled` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getMlbox_capa_index_state` | KKW00801SF01DBean | - | Calls `getMlbox_capa_index_state` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getMlbox_capa_index_value` | KKW00801SF01DBean | - | Calls `getMlbox_capa_index_value` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getMlbox_capa_mb_state` | KKW00801SF01DBean | - | Calls `getMlbox_capa_mb_state` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getMlbox_capa_mb_value` | KKW00801SF01DBean | - | Calls `getMlbox_capa_mb_value` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getMlbox_capa_value_enabled` | KKW00801SF01DBean | - | Calls `getMlbox_capa_value_enabled` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getMlbox_capa_value_state` | KKW00801SF01DBean | - | Calls `getMlbox_capa_value_state` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getMlbox_capa_value_value` | KKW00801SF01DBean | - | Calls `getMlbox_capa_value_value` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getPop_id_enabled` | KKW00801SF01DBean | - | Calls `getPop_id_enabled` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getPop_id_state` | KKW00801SF01DBean | - | Calls `getPop_id_state` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getPop_id_value` | KKW00801SF01DBean | - | Calls `getPop_id_value` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getUse_staymd_day_enabled` | KKW00801SF01DBean | - | Calls `getUse_staymd_day_enabled` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getUse_staymd_day_state` | KKW00801SF01DBean | - | Calls `getUse_staymd_day_state` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getUse_staymd_day_value` | KKW00801SF01DBean | - | Calls `getUse_staymd_day_value` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getUse_staymd_mon_enabled` | KKW00801SF01DBean | - | Calls `getUse_staymd_mon_enabled` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getUse_staymd_mon_state` | KKW00801SF01DBean | - | Calls `getUse_staymd_mon_state` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getUse_staymd_mon_value` | KKW00801SF01DBean | - | Calls `getUse_staymd_mon_value` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getUse_staymd_year_enabled` | KKW00801SF01DBean | - | Calls `getUse_staymd_year_enabled` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getUse_staymd_year_state` | KKW00801SF01DBean | - | Calls `getUse_staymd_year_state` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getUse_staymd_year_value` | KKW00801SF01DBean | - | Calls `getUse_staymd_year_value` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getVirus_chk_index_enabled` | KKW00801SF01DBean | - | Calls `getVirus_chk_index_enabled` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getVirus_chk_index_state` | KKW00801SF01DBean | - | Calls `getVirus_chk_index_state` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getVirus_chk_index_value` | KKW00801SF01DBean | - | Calls `getVirus_chk_index_value` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getVirus_chk_value_enabled` | KKW00801SF01DBean | - | Calls `getVirus_chk_value_enabled` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getVirus_chk_value_state` | KKW00801SF01DBean | - | Calls `getVirus_chk_value_state` in `KKW00801SF01DBean` |
| R | `KKW00801SF01DBean.getVirus_chk_value_value` | KKW00801SF01DBean | - | Calls `getVirus_chk_value_value` in `KKW00801SF01DBean` |

**Analysis:** This method performs **Read-only** operations (R). It does not create, update, or delete any data. All called getters (`getXxx_enabled()`, `getXxx_state()`, `getXxx_value()`) are internal bean property accessors that return pre-loaded screen state data. The `substring` calls are utility string operations (string manipulation on parameter keys). The two list-based branches delegate via `loadModelData` to child `X33VDataTypeBeanInterface` objects, which themselves perform read operations. No database or entity-level CRUD operations originate from this method.

## 5. Dependency Trace

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

No screen/batch entry points found within 8 hops. Direct callers found: 2 methods.
Terminal operations from this method: `loadModelData` [R], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `loadModelData` [R], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-]

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | `KKW00801SF01DBean.getJsflist_typelist_mlbox_cap_op_list()` | `getJsflist_typelist_mlbox_cap_op_list()` → `loadModelData(key, subkey)` | `loadModelData [R]` (recursive to list items) |
| 2 | `KKW00801SF01DBean.getJsflist_typelist_virus_chk_op_list()` | `getJsflist_typelist_virus_chk_op_list()` → `loadModelData(key, subkey)` | `loadModelData [R]` (recursive to list items) |
| 3 | `KKW00801SF01DBean.loadModelData()` (no-arg overload) | `loadModelData()` (no-arg) → `loadModelData(key, subkey)` (parameterized) | `substring [-]`, `getXxx_*() [R]` |

**Trace Notes:**
- The callers are **internal bean accessor methods** within `KKW00801SF01DBean`, not direct screen entry points. They are triggered during screen initialization or property refresh cycles.
- The no-arg overload of `loadModelData()` delegates to the parameterized version, establishing an internal delegation chain.
- No external SC (Service Component) or CBS (Common Business Service) calls are made. No database or entity operations originate from this method — it is purely a **data routing and retrieval** mechanism.
- The recursive calls to `X33VDataTypeBeanInterface.loadModelData()` on list items may reach deeper into the property hierarchy, but remain within the same bean layer.

## 6. Per-Branch Detail Blocks

### Block 1 — IF (null check) (L538)

Guard clause: if either `key` or `subkey` is null, return null immediately. This prevents NullPointerExceptions and enforces the contract that valid input is required.

| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = key.indexOf("/")` // Find the first slash separator for potential list-type parsing [-> "/"] |
| 2 | RETURN | `return null` // No matching property data found (guard clause) |

---

### Block 2 — ELSE-IF (メールアカウント / Mail Account) (L543)

Data type: メールアカウント (Mail Account). Retrieves mail account configuration properties.

#### Block 2.1 — IF (subkey = "value") (L544)

> subkeyが"value"の場合、mlad_account_valueのgetterの値を返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getMlad_account_value()` // Returns the actual mail account value |

#### Block 2.2 — ELSE-IF (subkey = "enable") (L547)

> subkeyが"enable"の場合、mlad_account_enableのgetterの値を返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getMlad_account_enabled()` // Returns the enabled/disabled flag for the mail account |

#### Block 2.3 — ELSE-IF (subkey = "state") (L550)

> subkeyが"state"の場合、ステータスを返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getMlad_account_state()` // Returns the UI state flag for the mail account |

---

### Block 3 — ELSE-IF (メールアドレスメイン / Mail Address Domain) (L556)

Data type: メールアドレスメイン (Mail Address Domain). Retrieves mail address domain properties.

#### Block 3.1 — IF (subkey = "value") (L557)

> subkeyが"value"の場合、mlad_domain_valueのgetterの値を返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getMlad_domain_value()` // Returns the actual mail address domain value |

#### Block 3.2 — ELSE-IF (subkey = "enable") (L560)

> subkeyが"enable"の場合、mlad_domain_enableのgetterの値を返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getMlad_domain_enabled()` // Returns the enabled/disabled flag for the mail address domain |

#### Block 3.3 — ELSE-IF (subkey = "state") (L563)

> subkeyが"state"の場合、ステータスを返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getMlad_domain_state()` // Returns the UI state flag for the mail address domain |

---

### Block 4 — ELSE-IF (メールエイリアス / Mail Alias) (L569)

Data type: メールエイリアス (Mail Alias). Retrieves mail alias configuration properties.

#### Block 4.1 — IF (subkey = "value") (L570)

> subkeyが"value"の場合、mailalias_enableのgetterの値を返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getMailalias_value()` // Returns the actual mail alias value |

#### Block 4.2 — ELSE-IF (subkey = "enable") (L573)

> subkeyが"enable"の場合、mailalias_enableのgetterの値を返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getMailalias_enabled()` // Returns the enabled/disabled flag for the mail alias |

#### Block 4.3 — ELSE-IF (subkey = "state") (L576)

> subkeyが"state"の場合、ステータスを返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getMailalias_state()` // Returns the UI state flag for the mail alias |

---

### Block 5 — ELSE-IF (メールボックス容量 / Mail Box Capacity) (L582)

Data type: メールボックス容量 (Mail Box Capacity). Retrieves mail storage capacity properties.

#### Block 5.1 — IF (subkey = "value") (L583)

> subkeyが"value"の場合、mlbox_capa_index_enableのgetterの値を返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getMlbox_capa_index_value()` // Returns the actual mail box capacity index value |

#### Block 5.2 — ELSE-IF (subkey = "enable") (L586)

> subkeyが"enable"の場合、mlbox_capa_index_enableのgetterの値を返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getMlbox_capa_index_enabled()` // Returns the enabled/disabled flag for mail box capacity |

#### Block 5.3 — ELSE-IF (subkey = "state") (L589)

> subkeyが"state"の場合、ステータスを返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getMlbox_capa_index_state()` // Returns the UI state flag for mail box capacity |

---

### Block 6 — ELSE-IF (ウィルスチェック / Virus Check) (L595)

Data type: ウィルスチェック (Virus Check). Retrieves virus check configuration properties.

#### Block 6.1 — IF (subkey = "value") (L596)

> subkeyが"value"の場合、virus_chk_index_enableのgetterの値を返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getVirus_chk_index_value()` // Returns the actual virus check index value |

#### Block 6.2 — ELSE-IF (subkey = "enable") (L599)

> subkeyが"enable"の場合、virus_chk_index_enableのgetterの値を返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getVirus_chk_index_enabled()` // Returns the enabled/disabled flag for virus check |

#### Block 6.3 — ELSE-IF (subkey = "state") (L602)

> subkeyが"state"の場合、ステータスを返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getVirus_chk_index_state()` // Returns the UI state flag for virus check |

---

### Block 7 — ELSE-IF (POP ID) (L608)

Data type: POP ID (pop_id). Retrieves POP mail retrieval configuration properties.

#### Block 7.1 — IF (subkey = "value") (L609)

> subkeyが"value"の場合、pop_id_enableのgetterの値を返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getPop_id_value()` // Returns the actual POP ID value |

#### Block 7.2 — ELSE-IF (subkey = "enable") (L612)

> subkeyが"enable"の場合、pop_id_enableのgetterの値を返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getPop_id_enabled()` // Returns the enabled/disabled flag for POP ID |

#### Block 7.3 — ELSE-IF (subkey = "state") (L615)

> subkeyが"state"の場合、ステータスを返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getPop_id_state()` // Returns the UI state flag for POP ID |

---

### Block 8 — ELSE-IF (利用開始日（年）/ Usage Start Date Year) (L621)

Data type: 利用開始日（年）(Usage Start Date — Year). Retrieves the service start year properties.

#### Block 8.1 — IF (subkey = "value") (L622)

> subkeyが"value"の場合、use_staymd_year_enableのgetterの値を返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getUse_staymd_year_value()` // Returns the actual usage start date year |

#### Block 8.2 — ELSE-IF (subkey = "enable") (L625)

> subkeyが"enable"の場合、use_staymd_year_enableのgetterの値を返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getUse_staymd_year_enabled()` // Returns the enabled/disabled flag for usage start date year |

#### Block 8.3 — ELSE-IF (subkey = "state") (L628)

> subkeyが"state"の場合、ステータスを返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getUse_staymd_year_state()` // Returns the UI state flag for usage start date year |

---

### Block 9 — ELSE-IF (利用開始日（月）/ Usage Start Date Month) (L634)

Data type: 利用開始日（月）(Usage Start Date — Month). Retrieves the service start month properties.

#### Block 9.1 — IF (subkey = "value") (L635)

> subkeyが"value"の場合、use_staymd_mon_enableのgetterの値を返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getUse_staymd_mon_value()` // Returns the actual usage start date month |

#### Block 9.2 — ELSE-IF (subkey = "enable") (L638)

> subkeyが"enable"の場合、use_staymd_mon_enableのgetterの値を返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getUse_staymd_mon_enabled()` // Returns the enabled/disabled flag for usage start date month |

#### Block 9.3 — ELSE-IF (subkey = "state") (L641)

> subkeyが"state"の場合、ステータスを返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getUse_staymd_mon_state()` // Returns the UI state flag for usage start date month |

---

### Block 10 — ELSE-IF (利用開始日（日）/ Usage Start Date Day) (L647)

Data type: 利用開始日（日）(Usage Start Date — Day). Retrieves the service start day properties.

#### Block 10.1 — IF (subkey = "value") (L648)

> subkeyが"value"の場合、use_staymd_day_enableのgetterの値を返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getUse_staymd_day_value()` // Returns the actual usage start date day |

#### Block 10.2 — ELSE-IF (subkey = "enable") (L651)

> subkeyが"enable"の場合、use_staymd_day_enableのgetterの値を返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getUse_staymd_day_enabled()` // Returns the enabled/disabled flag for usage start date day |

#### Block 10.3 — ELSE-IF (subkey = "state") (L654)

> subkeyが"state"の場合、ステータスを返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getUse_staymd_day_state()` // Returns the UI state flag for usage start date day |

---

### Block 11 — ELSE-IF (表示用メールボックス容量 / Display Mail Box Capacity) (L660)

Data type: 表示用メールボックス容量 (Display Mail Box Capacity). Retrieves the display-oriented mail capacity properties.

#### Block 11.1 — IF (subkey = "value") (L661)

> subkeyが"value"の場合、mlbox_capa_value_enableのgetterの値を返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getMlbox_capa_value_value()` // Returns the actual display mail box capacity value |

#### Block 11.2 — ELSE-IF (subkey = "enable") (L664)

> subkeyが"enable"の場合、mlbox_capa_value_enableのgetterの値を返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getMlbox_capa_value_enabled()` // Returns the enabled/disabled flag for display mail box capacity |

#### Block 11.3 — ELSE-IF (subkey = "state") (L667)

> subkeyが"state"の場合、ステータスを返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getMlbox_capa_value_state()` // Returns the UI state flag for display mail box capacity |

---

### Block 12 — ELSE-IF (表示用ウィルスチェック / Display Virus Check) (L673)

Data type: 表示用ウィルスチェック (Display Virus Check). Retrieves the display-oriented virus check properties.

#### Block 12.1 — IF (subkey = "value") (L674)

> subkeyが"value"の場合、virus_chk_value_enableのgetterの値を返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getVirus_chk_value_value()` // Returns the actual display virus check value |

#### Block 12.2 — ELSE-IF (subkey = "enable") (L677)

> subkeyが"enable"の場合、virus_chk_value_enableのgetterの値を返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getVirus_chk_value_enabled()` // Returns the enabled/disabled flag for display virus check |

#### Block 12.3 — ELSE-IF (subkey = "state") (L680)

> subkeyが"state"の場合、ステータスを返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getVirus_chk_value_state()` // Returns the UI state flag for display virus check |

---

### Block 13 — ELSE-IF (登録用メールボックス容量MB値 / Registration Mail Box Capacity MB Value) (L686)

Data type: 登録用メールボックス容量MB値 (Registration Mail Box Capacity — MB Value). This is the only data type that does NOT have an "enable" subkey — it only supports "value" and "state".

#### Block 13.1 — IF (subkey = "value") (L687)

> subkeyが"value"の場合、getterの値を返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getMlbox_capa_mb_value()` // Returns the actual registration mail box capacity in MB |

#### Block 13.2 — ELSE-IF (subkey = "state") (L690)

> subkeyが"state"の場合、ステータスを返す。

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getMlbox_capa_mb_state()` // Returns the UI state flag for registration mail box capacity MB value |

---

### Block 14 — ELSE-IF (メールNOP容量選択リスト / Mail NOP Capacity Selection List) (L696)

> データタイプ項目 "メールNOP容量選択リスト" (Item ID: mlbox_cap_op_list)

This block handles **list-type property access** for the mail NOP (Network Operations Platform) capacity selection list. The key follows a hierarchical path format: "プランリスト/0/プラン名" (Plan List/0/Plan Name), where the portion after the first slash is parsed to extract an integer index and a nested property key. This is the first list-based branch and supports recursive property access on individual list items.

#### Block 14.1 — SET (keyRemain extraction) (L699)

> keyの次の要素を取得 ("プランリスト/0/プラン名"のようなパス形式から最初の"/"より後を取得)

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyRemain = key.substring(separaterPoint + 1)` // Extract the portion of key after the first slash (e.g., "0/プラン名" from "プランリスト/0/プラン名") [-> "/"] |

#### Block 14.2 — IF (wildcard check: keyRemain equals "*") (L701)

> インデックス値の代わりに"*"が指定されていたり、リストの要素数を返す。

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return Integer.valueOf(mlbox_cap_op_list_list.size())` // Returns the total count of items in the mail NOP capacity selection list |

#### Block 14.3 — SET (second separator search) (L704)

> 次の区切り符号（ここでは"/"）を検索する。

| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = keyRemain.indexOf("/")` // Search for the next slash separator within keyRemain |

#### Block 14.4 — IF (separaterPoint check) (L706)

> 区切り符号が見つからない、または不正の場合は、ここでnullを返す。

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null` // Return null if no valid separator is found (malformed key path) |

#### Block 14.5 — SET (index string extraction) (L709)

| # | Type | Code |
|---|------|------|
| 1 | SET | `key = keyRemain.substring(0, separaterPoint)` // Extract the index string (the portion between first and second slash) |

#### Block 14.6 — TRY-CATCH (Integer parsing) (L710-717)

> インデックス値が数値文字列でない場合は、ここでnullを返す。

| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpIndexInt = Integer.valueOf(key)` // Attempt to parse the index string as an integer |
| 2 | CATCH | `catch (NumberFormatException e)` // Caught when key is not a valid integer string |

#### Block 14.6.1 — CATCH body (null return) (L716)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null` // Return null when index parsing fails (invalid format) |

#### Block 14.7 — IF (null check on parsed index) (L718)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null` // Return null if tmpIndexInt is unexpectedly null |

#### Block 14.8 — SET (index conversion) (L720)

| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpIndex = tmpIndexInt.intValue()` // Convert Integer to primitive int |

#### Block 14.9 — IF (bounds check) (L722)

> インデックス値がリスト個数-1を超えれば、ここでnullを返す。

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null` // Return null if tmpIndex is out of bounds (< 0 or >= list size) |

#### Block 14.10 — SET (recursive key extraction) (L726)

> 項目名を生成し、データタイプビューンloadModelDataの値を返す

| # | Type | Code |
|---|------|------|
| 1 | SET | `key = keyRemain.substring(separaterPoint + 1)` // Extract the property key portion after the index (e.g., "プラン名" from "0/プラン名") [-> "/"] |
| 2 | RETURN | `return ((X33VDataTypeBeanInterface) mlbox_cap_op_list_list.get(tmpIndex)).loadModelData(key, subkey)` // Recursively delegate to the list item at the parsed index, passing the remaining key and subkey for property resolution [-> Data Type Bean] |

---

### Block 15 — ELSE-IF (ウィルスチェック選択リスト / Virus Check Selection List) (L733)

> データタイプ項目 "ウィルスチェック選択リスト" (Item ID: virus_chk_op_list)

This block mirrors the structure of Block 14 (Mail NOP Capacity Selection List) but operates on the virus check selection list. Same hierarchical key path parsing, index extraction, bounds checking, and recursive delegation pattern.

#### Block 15.1 — SET (keyRemain extraction) (L736)

> keyの次の要素を取得 ("プランリスト/0/プラン名"のようなパス形式から最初の"/"より後を取得)

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyRemain = key.substring(separaterPoint + 1)` // Extract the portion of key after the first slash |

#### Block 15.2 — IF (wildcard check: keyRemain equals "*") (L738)

> インデックス値の代わりに"*"が指定されていたり、リストの要素数を返す。

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return Integer.valueOf(virus_chk_op_list_list.size())` // Returns the total count of items in the virus check selection list |

#### Block 15.3 — SET (second separator search) (L741)

> 次の区切り符号（ここでは"/"）を検索する。

| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = keyRemain.indexOf("/")` // Search for the next slash separator within keyRemain |

#### Block 15.4 — IF (separaterPoint check) (L743)

> 区切り符号が見つからない、または不正の場合は、ここでnullを返す。

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null` // Return null if no valid separator is found |

#### Block 15.5 — SET (index string extraction) (L746)

| # | Type | Code |
|---|------|------|
| 1 | SET | `key = keyRemain.substring(0, separaterPoint)` // Extract the index string |

#### Block 15.6 — TRY-CATCH (Integer parsing) (L748-755)

> インデックス値が数値文字列でない場合は、ここでnullを返す。

| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpIndexInt = Integer.valueOf(key)` // Attempt to parse the index string as an integer |
| 2 | CATCH | `catch (NumberFormatException e)` // Caught when key is not a valid integer string |

#### Block 15.6.1 — CATCH body (null return) (L754)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null` // Return null when index parsing fails |

#### Block 15.7 — IF (null check on parsed index) (L756)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null` // Return null if tmpIndexInt is null |

#### Block 15.8 — SET (index conversion) (L758)

| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpIndex = tmpIndexInt.intValue()` // Convert Integer to primitive int |

#### Block 15.9 — IF (bounds check) (L760)

> インデックス値がリスト個数-1を超えれば、ここでnullを返す。

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null` // Return null if tmpIndex is out of bounds |

#### Block 15.10 — SET (recursive key extraction) (L764)

> 項目名を生成し、データタイプビューンloadModelDataの値を返す
> データタイプビューン型では項目名とsubkeyのみ引数に指定

| # | Type | Code |
|---|------|------|
| 1 | SET | `key = keyRemain.substring(separaterPoint + 1)` // Extract the property key after the index |
| 2 | RETURN | `return ((X33VDataTypeBeanInterface) virus_chk_op_list_list.get(tmpIndex)).loadModelData(key, subkey)` // Recursively delegate to the list item at the parsed index for property resolution |

---

### Block 16 — ELSE (no matching condition) (L768)

> 条件に合致するプロパティが存在しない場合は、nullを返す。

This is the fallback branch — executed when the key does not match any of the 14 defined data types. It returns null as a safe default.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null` // No matching property found for the given key; return null |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| メールアカウント | Field (Japanese) | Mail Account — the primary email address associated with a service contract line item |
| メールアドレスメイン | Field (Japanese) | Mail Address Domain — the mail domain for the user's primary email address |
| メールエイリアス | Field (Japanese) | Mail Alias — alias email addresses configured for a user (multiple aliases per account) |
| メールボックス容量 | Field (Japanese) | Mail Box Capacity — the storage capacity assigned to a user's mailbox (index-based) |
| メールボックス容量MB値 | Field (Japanese) | Mail Box Capacity MB Value — the registration-oriented mailbox capacity in megabytes |
| メールNOP容量選択リスト | Field (Japanese) | Mail NOP Capacity Selection List — a selectable list of mail capacity options for the Network Operations Platform (NOP) |
| ウィルスチェック | Field (Japanese) | Virus Check — the virus scanning configuration for mail (index-based) |
| 表示用ウィルスチェック | Field (Japanese) | Display Virus Check — the display-oriented virus check setting for presentation purposes |
| ウィルスチェック選択リスト | Field (Japanese) | Virus Check Selection List — a selectable list of virus check options |
| POP ID | Field | POP ID — the POP (Post Office Protocol) mail retrieval account identifier |
| 利用開始日（年） | Field (Japanese) | Usage Start Date (Year) — the year component of the service activation/starting date |
| 利用開始日（月） | Field (Japanese) | Usage Start Date (Month) — the month component of the service activation/starting date |
| 利用開始日（日） | Field (Japanese) | Usage Start Date (Day) — the day component of the service activation/starting date |
| 表示用メールボックス容量 | Field (Japanese) | Display Mail Box Capacity — the display-oriented mail capacity setting for UI presentation |
| X33VDataTypeBeanInterface | Interface | A data type bean interface that defines the `loadModelData` contract for recursive property access on list items |
| key | Parameter | The data type identifier string that routes to a specific property group; for list types, follows the path format "typeName/index/propertyName" |
| subkey | Parameter | The accessor facet ("value", "enable", "state") that determines which aspect of a property to return |
| enable | Subkey value | Returns the enabled/disabled flag controlling UI interactivity for the property |
| state | Subkey value | Returns the UI state flag for rendering purposes (e.g., visible, hidden, disabled) |
| value | Subkey value | Returns the actual data value of the property |
| NOP | Acronym | Network Operations Platform — K-Opticom's telecom network management system; mail NOP refers to mail capacity management within NOP |
| KKW00801SF | Module | A K-Opticom web screen module for service contract detail view/edit (KKW prefix = K-Opticom Web) |
| KKW00801SFConst | Class | Constants class for the KKW00801SF module; defines string constants for field names and data type keys |
| X31CBaseBean | Parent Class | The base bean class from which KKW00801SF01DBean inherits; provides common data bean functionality |
| MLAD | Acronym (field prefix) | Mail Address — internal field naming convention for mail account properties (e.g., `mlad_account`) |
| MLBOX | Acronym (field prefix) | Mail Box — internal field naming convention for mailbox capacity properties |
| VIRUS | Acronym (field prefix) | Virus Check — internal field naming convention for virus scanning properties |
