# Business Logic — KKW00130SF02DBean.typeModelData() [277 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKW00130SF.KKW00130SF02DBean` |
| Layer | Utility / Data Type Router (webview bean, sits below the screen controller layer) |
| Module | `KKW00130SF` (Package: `eo.web.webview.KKW00130SF`) |

## 1. Role

### KKW00130SF02DBean.typeModelData()

This method implements a **routing/dispatch pattern** that maps business-level field identifiers (`key`) and property sub-keys (`subkey`) to their corresponding Java data type classes (`Class<?>`). It is a shared utility within the KKW00130SF screen module — the service order detail inquiry screen — and serves as the framework-level type resolver for the X33V data binding system.

The method handles **18 distinct business fields** related to telecom service contracts, including phone number, port number (number portability), contract status, service start/end dates, VA (Voice Access) model, pricing codes, and indoor equipment information. Each field branches into one or two subkey lookups: `"value"` returns `String.class`, `"enable"` returns `Boolean.class` (for UI enable/disable flags), and `"state"` returns `String.class` (for display status indicators).

As part of the **Fujitsu X33V framework**, this method fulfills the `X33VDataTypeBeanInterface.typeModelData()` contract. The X33V framework calls `typeModelData()` during screen initialization and data binding to determine the expected Java type for each form field, enabling automatic type coercion between HTTP request parameters and the bean's model fields.

The method also includes a **delegation branch** for dynamically configured "Port Number Cancellation Request Control Code" entries, which are stored in a runtime list (`bmp_haishi_req_ctrl_cd_list`). When the incoming key follows a structured path pattern (e.g., `"portal/0/planName"`), the method parses the index, bounds-checks against the list size, and delegates to each entry's own `typeModelData()` method — implementing a composite pattern for variable-length sub-fields.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START["typeModelData key subkey"]
    START --> CHECK_NULL{key or subkey is null}
    CHECK_NULL -- Yes --> RETURN_NULL["return null"]
    CHECK_NULL -- No --> FIND_SEP["int separaterPoint equals key indexOf slash"]
    FIND_SEP --> KEY1{key equals Phone Number}
    KEY1 -- Yes --> SUB1A{subkey equals value}
    SUB1A -- Yes --> RET1A["return String.class"]
    SUB1A -- No --> SUB1B{subkey equals enable}
    SUB1B -- Yes --> RET1B["return Boolean.class"]
    SUB1B -- No --> SUB1C{subkey equals state}
    SUB1C -- Yes --> RET1C["return String.class"]
    SUB1C -- No --> KEY2
    KEY1 -- No --> KEY2{key equals Port Number}
    KEY2 -- Yes --> SUB2A{subkey equals value}
    SUB2A -- Yes --> RET2A["return String.class"]
    SUB2A -- No --> SUB2B{subkey equals enable}
    SUB2B -- Yes --> RET2B["return Boolean.class"]
    SUB2B -- No --> SUB2C{subkey equals state}
    SUB2C -- Yes --> RET2C["return String.class"]
    SUB2C -- No --> KEY3
    KEY2 -- No --> KEY3{key equals Contract Status}
    KEY3 -- Yes --> SUB3A{subkey equals value}
    SUB3A -- Yes --> RET3A["return String.class"]
    SUB3A -- No --> SUB3B{subkey equals enable}
    SUB3B -- Yes --> RET3B["return Boolean.class"]
    SUB3B -- No --> SUB3C{subkey equals state}
    SUB3C -- Yes --> RET3C["return String.class"]
    SUB3C -- No --> KEY4
    KEY3 -- No --> KEY4{key equals Service Start Date}
    KEY4 -- Yes --> SUB4A{subkey equals value}
    SUB4A -- Yes --> RET4A["return String.class"]
    SUB4A -- No --> SUB4B{subkey equals enable}
    SUB4B -- Yes --> RET4B["return Boolean.class"]
    SUB4B -- No --> SUB4C{subkey equals state}
    SUB4C -- Yes --> RET4C["return String.class"]
    SUB4C -- No --> KEY5
    KEY4 -- No --> KEY5{key equals Service End Date}
    KEY5 -- Yes --> SUB5A{subkey equals value}
    SUB5A -- Yes --> RET5A["return String.class"]
    SUB5A -- No --> SUB5B{subkey equals enable}
    SUB5B -- Yes --> RET5B["return Boolean.class"]
    SUB5B -- No --> SUB5C{subkey equals state}
    SUB5C -- Yes --> RET5C["return String.class"]
    SUB5C -- No --> KEY6
    KEY5 -- No --> KEY6{key equals VA Model}
    KEY6 -- Yes --> SUB6A{subkey equals value}
    SUB6A -- Yes --> RET6A["return String.class"]
    SUB6A -- No --> SUB6B{subkey equals enable}
    SUB6B -- Yes --> RET6B["return Boolean.class"]
    SUB6B -- No --> SUB6C{subkey equals state}
    SUB6C -- Yes --> RET6C["return String.class"]
    SUB6C -- No --> KEY7
    KEY6 -- No --> KEY7{key equals Port No}
    KEY7 -- Yes --> SUB7A{subkey equals value}
    SUB7A -- Yes --> RET7A["return String.class"]
    SUB7A -- No --> SUB7B{subkey equals enable}
    SUB7B -- Yes --> RET7B["return Boolean.class"]
    SUB7B -- No --> SUB7C{subkey equals state}
    SUB7C -- Yes --> RET7C["return String.class"]
    SUB7C -- No --> KEY8
    KEY7 -- No --> KEY8{key equals Number Guidance}
    KEY8 -- Yes --> SUB8A{subkey equals value}
    SUB8A -- Yes --> RET8A["return String.class"]
    SUB8A -- No --> SUB8B{subkey equals enable}
    SUB8B -- Yes --> RET8B["return Boolean.class"]
    SUB8B -- No --> SUB8C{subkey equals state}
    SUB8C -- Yes --> RET8C["return String.class"]
    SUB8C -- No --> KEY9
    KEY8 -- No --> KEY9{key equals Token Presence}
    KEY9 -- Yes --> SUB9A{subkey equals value}
    SUB9A -- Yes --> RET9A["return String.class"]
    SUB9A -- No --> SUB9B{subkey equals enable}
    SUB9B -- Yes --> RET9B["return Boolean.class"]
    SUB9B -- No --> SUB9C{subkey equals state}
    SUB9C -- Yes --> RET9C["return String.class"]
    SUB9C -- No --> KEY10
    KEY9 -- No --> KEY10{key equals Service Contract Detail No}
    KEY10 -- Yes --> SUB10A{subkey equals value}
    SUB10A -- Yes --> RET10A["return String.class"]
    SUB10A -- No --> SUB10B{subkey equals state}
    SUB10B -- Yes --> RET10B["return String.class"]
    SUB10B -- No --> KEY11
    KEY10 -- No --> KEY11{key equals Service Contract Detail Status}
    KEY11 -- Yes --> SUB11A{subkey equals value}
    SUB11A -- Yes --> RET11A["return String.class"]
    SUB11A -- No --> SUB11B{subkey equals state}
    SUB11B -- Yes --> RET11B["return String.class"]
    SUB11B -- No --> KEY12
    KEY11 -- No --> KEY12{key equals Application Detail No}
    KEY12 -- Yes --> SUB12A{subkey equals value}
    SUB12A -- Yes --> RET12A["return String.class"]
    SUB12A -- No --> SUB12B{subkey equals state}
    SUB12B -- Yes --> RET12B["return String.class"]
    SUB12B -- No --> KEY13
    KEY12 -- No --> KEY13{key equals Price Code}
    KEY13 -- Yes --> SUB13A{subkey equals value}
    SUB13A -- Yes --> RET13A["return String.class"]
    SUB13A -- No --> SUB13B{subkey equals state}
    SUB13B -- Yes --> RET13B["return String.class"]
    SUB13B -- No --> KEY14
    KEY13 -- No --> KEY14{key equals Price Plan Code}
    KEY14 -- Yes --> SUB14A{subkey equals value}
    SUB14A -- Yes --> RET14A["return String.class"]
    SUB14A -- No --> SUB14B{subkey equals state}
    SUB14B -- Yes --> RET14B["return String.class"]
    SUB14B -- No --> KEY15
    KEY14 -- No --> KEY15{key equals Display Service Contract Status}
    KEY15 -- Yes --> SUB15A{subkey equals value}
    SUB15A -- Yes --> RET15A["return String.class"]
    SUB15A -- No --> SUB15B{subkey equals state}
    SUB15B -- Yes --> RET15B["return String.class"]
    SUB15B -- No --> KEY16
    KEY15 -- No --> KEY16{key equals Display Service Contract Status Name}
    KEY16 -- Yes --> SUB16A{subkey equals value}
    SUB16A -- Yes --> RET16A["return String.class"]
    SUB16A -- No --> SUB16B{subkey equals state}
    SUB16B -- Yes --> RET16B["return String.class"]
    SUB16B -- No --> KEY17
    KEY16 -- No --> KEY17{key equals Indoor Equipment Type Code}
    KEY17 -- Yes --> SUB17A{subkey equals value}
    SUB17A -- Yes --> RET17A["return String.class"]
    SUB17A -- No --> SUB17B{subkey equals state}
    SUB17B -- Yes --> RET17B["return String.class"]
    SUB17B -- No --> KEY18
    KEY17 -- No --> KEY18{key equals Equipment Provision Service Name}
    KEY18 -- Yes --> SUB18A{subkey equals value}
    SUB18A -- Yes --> RET18A["return String.class"]
    SUB18A -- No --> SUB18B{subkey equals state}
    SUB18B -- Yes --> RET18B["return String.class"]
    SUB18B -- No --> KEY19
    KEY18 -- No --> KEY19{key equals Port Number Cancellation Request Control Code}
    KEY19 -- Yes --> DELEGATE["Delegate to bmp_haishi_req_ctrl_cd_list"]
    KEY19 -- No --> KEY20{No match}
    KEY20 -- Yes --> RETURN_FALL["return null"]
    RETURN_FALL --> END["Return or Next"]
    RETURN_NULL --> END
    RET1A --> END
    RET1B --> END
    RET1C --> END
    RET2A --> END
    RET2B --> END
    RET2C --> END
    RET3A --> END
    RET3B --> END
    RET3C --> END
    RET4A --> END
    RET4B --> END
    RET4C --> END
    RET5A --> END
    RET5B --> END
    RET5C --> END
    RET6A --> END
    RET6B --> END
    RET6C --> END
    RET7A --> END
    RET7B --> END
    RET7C --> END
    RET8A --> END
    RET8B --> END
    RET8C --> END
    RET9A --> END
    RET9B --> END
    RET9C --> END
    RET10A --> END
    RET10B --> END
    RET11A --> END
    RET11B --> END
    RET12A --> END
    RET12B --> END
    RET13A --> END
    RET13B --> END
    RET14A --> END
    RET14B --> END
    RET15A --> END
    RET15B --> END
    RET16A --> END
    RET16B --> END
    RET17A --> END
    RET17B --> END
    RET18A --> END
    RET18B --> END
    DELEGATE --> RET19["return delegated typeModelData result"]
    RET19 --> END
    SUB1C -- No --> KEY2
    SUB2C -- No --> KEY3
    SUB3C -- No --> KEY4
    SUB4C -- No --> KEY5
    SUB5C -- No --> KEY6
    SUB6C -- No --> KEY7
    SUB7C -- No --> KEY8
    SUB8C -- No --> KEY9
```

**Processing flow summary:**

1. **Null guard**: If either `key` or `subkey` is null, return `null` immediately (Lines 1348-1351).
2. **Separator detection**: Compute `separaterPoint` as the index of the first `/` in `key` — this is cached for use only in the delegation branch (Lines 1353-1354).
3. **Field routing**: A chain of 18 `else-if` blocks checks `key` against hardcoded Japanese field names. Each field branches on `subkey`:
   - Fields supporting UI controls (Phone Number, Port Number, Contract Status, Service Start Date, Service End Date, VA Model, Port No, Number Guidance, Token Presence): subkey `value` → `String.class`, `enable` → `Boolean.class`, `state` → `String.class`.
   - Fields that are read-only (no enable/disable toggle): subkey `value` → `String.class`, `state` → `String.class`.
4. **Delegation branch** (Lines 1561-1618): When `key` equals "Port Number Cancellation Request Control Code" (番ポ廃止依頼制御コード):
   - Parse remaining path after the first `/`.
   - If remaining equals `"*"`, return `Integer.class` (requesting list count).
   - Otherwise, parse an integer index from the path, validate bounds against `bmp_haishi_req_ctrl_cd_list`, then delegate `typeModelData(key, subkey)` to the indexed entry's own implementation.
5. **Fallback**: If no branch matches, return `null` (Line 1620).

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | The business field identifier used to select which data type to resolve. Takes Japanese field names such as "電話番号" (Phone Number), "契約状態" (Contract Status), or the special key "番ポ廃止依頼制御コード" (Port Number Cancellation Request Control Code). For the delegation branch, it can also accept a slash-delimited path like "portal/0/planName" that encodes a list index and a sub-field key. |
| 2 | `subkey` | `String` | The property name within the matched field. Standard subkeys are `"value"` (returns the field's data type), `"enable"` (returns the UI enabled/disabled flag type), and `"state"` (returns the field's display status type). Used by the X33V framework during screen binding to determine Java type coercion. |

**Instance fields read:**

| Field | Type | Business Description |
|-------|------|---------------------|
| `bmp_haishi_req_ctrl_cd_list` | `X33VDataTypeList` | Runtime list of dynamic "Port Number Cancellation Request Control Code" entries. Each element is an `X33VDataTypeBeanInterface` that implements its own `typeModelData()` delegation, supporting variable-length sub-fields defined at screen initialization time. |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `KKW00130SF02DBean.typeModelData` | KKW00130SF02DBean | - | Recursive delegation: calls `typeModelData()` on an entry within `bmp_haishi_req_ctrl_cd_list` (an `X33VDataTypeBeanInterface`). This is a framework-level type resolution call, not a data access operation. |

**Analysis:** This method performs **no direct database or service component calls**. It is a pure type-routing utility that:
- Evaluates string equality conditions against hardcoded field name constants.
- Performs string manipulation (`indexOf`, `substring`) for the delegation path parsing.
- Performs an integer parse (`Integer.valueOf`) with `NumberFormatException` handling for list index extraction.
- Delegates to another bean's `typeModelData()` through the `X33VDataTypeBeanInterface` contract.

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Bean: KKW00130SF02DBean | Self-invocation (delegation branch) | `typeModelData on X33VDataTypeBeanInterface entry` |

**Notes:** This method is part of the X33V framework's data binding interface. It is called internally by the X33V framework infrastructure when initializing form fields on the KKW00130SF screen. The framework resolves the Java type for each field by iterating over the bean's properties and invoking `typeModelData()` for each. The pre-computed caller graph shows only self-referencing (delegation), confirming this method is primarily invoked by the framework, not by explicit application code.

## 6. Per-Branch Detail Blocks

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

> Null guard: if either parameter is null, return null immediately.

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

**Block 2** — [SET] Compute separator index (L1353)

| # | Type | Code |
|---|------|------|
| 1 | SET | `int separaterPoint = key.indexOf("/");` // Find first slash separator (used later in delegation branch) |

**Block 3** — [IF-ELSEIF-ELSEIF chain] Field routing — First group (fields with value/enable/state subkeys) (L1357-L1448)

> These 9 fields support UI enable/disable toggles, so each provides three subkey branches.

**Block 3.1** — [IF] `key.equals("電話番号")` [Phone Number] (L1357)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `return String.class;` // Field value type (データタイプがStringの項目「電話番号」) |
| 2 | IF | `subkey.equalsIgnoreCase("enable")` → `return Boolean.class;` // UI enable flag |
| 3 | IF | `subkey.equalsIgnoreCase("state")` → `return String.class;` // Status text (subkeyが"state"の場合、ステータスを返す) |

**Block 3.2** — [ELSE-IF] `key.equals("番ポ")` [Port Number / Number Portability] (L1372)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `return String.class;` |
| 2 | IF | `subkey.equalsIgnoreCase("enable")` → `return Boolean.class;` |
| 3 | IF | `subkey.equalsIgnoreCase("state")` → `return String.class;` |

**Block 3.3** — [ELSE-IF] `key.equals("契約状態")` [Contract Status] (L1386)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `return String.class;` |
| 2 | IF | `subkey.equalsIgnoreCase("enable")` → `return Boolean.class;` |
| 3 | IF | `subkey.equalsIgnoreCase("state")` → `return String.class;` |

**Block 3.4** — [ELSE-IF] `key.equals("サービス開始年月日")` [Service Start Date (Year-Month-Day)] (L1400)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `return String.class;` |
| 2 | IF | `subkey.equalsIgnoreCase("enable")` → `return Boolean.class;` |
| 3 | IF | `subkey.equalsIgnoreCase("state")` → `return String.class;` |

**Block 3.5** — [ELSE-IF] `key.equals("サービス終了年月日")` [Service End Date (Year-Month-Day)] (L1414)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `return String.class;` |
| 2 | IF | `subkey.equalsIgnoreCase("enable")` → `return Boolean.class;` |
| 3 | IF | `subkey.equalsIgnoreCase("state")` → `return String.class;` |

**Block 3.6** — [ELSE-IF] `key.equals("VA型式")` [VA Model (Voice Access Equipment Model)] (L1428)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `return String.class;` |
| 2 | IF | `subkey.equalsIgnoreCase("enable")` → `return Boolean.class;` |
| 3 | IF | `subkey.equalsIgnoreCase("state")` → `return String.class;` |

**Block 3.7** — [ELSE-IF] `key.equals("ポート番号")` [Port Number] (L1442)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `return String.class;` |
| 2 | IF | `subkey.equalsIgnoreCase("enable")` → `return Boolean.class;` |
| 3 | IF | `subkey.equalsIgnoreCase("state")` → `return String.class;` |

**Block 3.8** — [ELSE-IF] `key.equals("番号案内")` [Number Guidance] (L1456)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `return String.class;` |
| 2 | IF | `subkey.equalsIgnoreCase("enable")` → `return Boolean.class;` |
| 3 | IF | `subkey.equalsIgnoreCase("state")` → `return String.class;` |

**Block 3.9** — [ELSE-IF] `key.equals("トーク有無")` [Token Presence (Whether Token Exists)] (L1470)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `return String.class;` |
| 2 | IF | `subkey.equalsIgnoreCase("enable")` → `return Boolean.class;` |
| 3 | IF | `subkey.equalsIgnoreCase("state")` → `return String.class;` |

**Block 4** — [ELSE-IF chain] Field routing — Second group (fields with value/state only, no enable) (L1495-L1552)

> These 6 fields are read-only (no UI enable/disable control). Each provides two subkey branches: `value` and `state`.

**Block 4.1** — [ELSE-IF] `key.equals("サービス契約内訳番号")` [Service Contract Detail Number] (L1495)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `return String.class;` |
| 2 | IF | `subkey.equalsIgnoreCase("state")` → `return String.class;` // subkeyが"state"の場合、ステータスを返す |

**Block 4.2** — [ELSE-IF] `key.equals("サービス契約内訳ステータス")` [Service Contract Detail Status] (L1505)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `return String.class;` |
| 2 | IF | `subkey.equalsIgnoreCase("state")` → `return String.class;` |

**Block 4.3** — [ELSE-IF] `key.equals("申込明細番号")` [Application Detail Number] (L1515)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `return String.class;` |
| 2 | IF | `subkey.equalsIgnoreCase("state")` → `return String.class;` |

**Block 4.4** — [ELSE-IF] `key.equals("料金コードコード")` [Price Code] (L1525)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `return String.class;` |
| 2 | IF | `subkey.equalsIgnoreCase("state")` → `return String.class;` |

**Block 4.5** — [ELSE-IF] `key.equals("料金プランコード")` [Price Plan Code] (L1535)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `return String.class;` |
| 2 | IF | `subkey.equalsIgnoreCase("state")` → `return String.class;` |

**Block 5** — [ELSE-IF chain] OT-2013-0000311 added fields (Display-mode variants) (L1548-L1552)

> Added per OT-2013-0000311 (20130326). These are display-only variants of service contract detail status fields.

**Block 5.1** — [ELSE-IF] `key.equals("表示用サービス契約内訳ステータス")` [Display Service Contract Detail Status] (L1548)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `return String.class;` |
| 2 | IF | `subkey.equalsIgnoreCase("state")` → `return String.class;` |

**Block 5.2** — [ELSE-IF] `key.equals("表示用サービス契約内訳ステータス名称")` [Display Service Contract Detail Status Name] (L1556)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `return String.class;` |
| 2 | IF | `subkey.equalsIgnoreCase("state")` → `return String.class;` |

**Block 6** — [ELSE-IF chain] ANK-1587-00-00 added fields (Indoor equipment) (L1561-L1565)

> Added per ANK-1587-00-00. Fields for indoor equipment type and equipment provision service name.

**Block 6.1** — [ELSE-IF] `key.equals("宅内機器種別コード")` [Indoor Equipment Type Code] (L1561)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `return String.class;` |
| 2 | IF | `subkey.equalsIgnoreCase("state")` → `return String.class;` |

**Block 6.2** — [ELSE-IF] `key.equals("機器提供サービス名")` [Equipment Provision Service Name] (L1571)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `return String.class;` |
| 2 | IF | `subkey.equalsIgnoreCase("state")` → `return String.class;` |

**Block 7** — [ELSE-IF] ANK-2288-00-00 Delegation branch: Port Number Cancellation Request Control Code (L1581-L1618)

> Added per ANK-2288-00-00 (20150313). Handles dynamic "Port Number Cancellation Request Control Code" (番ポ廃止依頼制御コード) with slash-delimited path encoding a list index and sub-field key. This is the only branch that performs I/O on external state (`bmp_haishi_req_ctrl_cd_list`).

| # | Type | Code |
|---|------|------|
| 1 | SET | `String keyRemain = key.substring(separaterPoint + 1);` // Extract remaining elements after first "/" (keyの次の要素を取得) |
| 2 | IF | `keyRemain.equals("*")` → `return Integer.class;` // Wildcard means return list count (インデックス値の代わりに"*"が指定されていたら、リストの要素数を返す) |
| 3 | SET | `separaterPoint = keyRemain.indexOf("/");` // Find next slash (次の切り切り記号(ここでは"/")を検索する) |
| 4 | IF | `separaterPoint <= 0` → `return null;` // No slash found or invalid — return null (切り切り記号が見つからない、または不正の場合は、ここでnullを返す) |
| 5 | SET | `key = keyRemain.substring(0, separaterPoint);` // Extract index portion (extract index portion from the slash-delimited path) |
| 6 | SET | `Integer tmpIndexInt = null;` // Initialize index holder |
| 7 | TRY | `tmpIndexInt = Integer.valueOf(key);` // Parse index as integer |
| 7.1 | CATCH | `NumberFormatException e` → `return null;` // Index is not a numeric string (インデックス値が数値文字列でない場合は、ここでnullを返す) |
| 8 | IF | `tmpIndexInt == null` → `return null;` |
| 9 | SET | `int tmpIndex = tmpIndexInt.intValue();` |
| 10 | IF | `tmpIndex < 0 || tmpIndex >= bmp_haishi_req_ctrl_cd_list.size()` → `return null;` // Index out of bounds (インデックス値がリスト個数-1を超えると場合、ここでnullを返す) |
| 11 | SET | `key = keyRemain.substring(separaterPoint + 1);` // Extract sub-field key (extract the sub-field name after the index segment) |
| 12 | CALL | `((X33VDataTypeBeanInterface) bmp_haishi_req_ctrl_cd_list.get(tmpIndex)).typeModelData(key, subkey)` // Delegate to the indexed entry (項目名とsubkeyのみ引数に指定) |

**Block 8** — [ELSE] No matching key found (L1620)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` // No matching property found (条件に一致するプロパティが存在しない場合は、nullを返す) |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `rslt_telno` | Field | Result phone number — the customer's telephone number for the service line |
| `rslt_bmp` | Field | Result port number — port number (number portability) data |
| `rslt_kei_stat` | Field | Result contract status — current status of the service contract |
| `rslt_svc_staymd` | Field | Result service start year-month-day — the date when service begins |
| `rslt_svc_endymd` | Field | Result service end year-month-day — the date when service terminates |
| `rslt_va_model` | Field | Result VA model — Voice Access equipment model identifier |
| `rslt_port_no` | Field | Result port number — physical port number assignment |
| `rslt_no_guide` | Field | Result number guidance — guidance information about number changes |
| `rslt_toki_um` | Field | Result token presence — whether a token exists for the service line (toki = 転送トークン) |
| `rslt_svc_kei_ucwk_no` | Field | Result service contract detail number — internal tracking ID for service contract line items |
| `rslt_svc_kei_ucwk_stat` | Field | Result service contract detail status — status of a service contract line item |
| `rslt_mskm_dtl_no` | Field | Result application detail number — detail number of the service application |
| `rslt_pcrs_cd` | Field | Result price code — billing/price code for the service line item |
| `rslt_pplan_cd` | Field | Result price plan code — pricing plan identifier code |
| `dsp_svc_kei_ucwk_stat` | Field | Display service contract detail status — display-mode variant of the contract detail status |
| `dsp_svc_kei_ucwk_stat_nm` | Field | Display service contract detail status name — human-readable name for the display status |
| `taknkiki_sbt_cd` | Field | Indoor equipment sub-type code — type code for customer-provided indoor equipment |
| `kktk_svc_nm` | Field | Equipment provision service name — name of the equipment provisioning service |
| `bmp_haishi_req_ctrl_cd` | Field | Port number cancellation request control code — code controlling number portability cancellation requests |
| `bmp_haishi_req_ctrl_cd_list` | Field | Runtime list of port number cancellation request control code entries — dynamically populated list of X33VDataTypeBeanInterface entries for variable-length sub-fields |
| 電話番号 | Field | Phone number — the customer's telephone number |
| 番ポ | Field | Port number (number portability) — "banpo" is shorthand for number portability (番号ポータビリティ) |
| 契約状態 | Field | Contract status — the current state of the service contract |
| サービス開始年月日 | Field | Service start date — year-month-day when the service begins |
| サービス終了年月日 | Field | Service end date — year-month-day when the service ends |
| VA型式 | Field | VA model — Voice Access equipment type/model |
| ポート番号 | Field | Port number — the physical port assignment |
| 番号案内 | Field | Number guidance — information about phone number changes or porting |
| トーク有無 | Field | Token presence — whether a forwarding token exists (toki = 転送) |
| サービス契約内訳番号 | Field | Service contract detail number — internal tracking ID for service contract sub-items |
| サービス契約内訳ステータス | Field | Service contract detail status — status of a service contract detail line |
| 申込明細番号 | Field | Application detail number — detail number from the service application |
| 料金コードコード | Field | Price code — billing code for the service |
| 料金プランコード | Field | Price plan code — pricing plan identifier |
| 表示用サービス契約内訳ステータス | Field | Display service contract detail status — display-mode variant for UI rendering |
| 表示用サービス契約内訳ステータス名称 | Field | Display service contract detail status name — human-readable name for the display status |
| 宅内機器種別コード | Field | Indoor equipment type code — type code for customer-side equipment |
| 機器提供サービス名 | Field | Equipment provision service name — name of the equipment provisioning service |
| 番ポ廃止依頼制御コード | Field | Port number cancellation request control code — controls number portability cancellation requests |
| X33V | Acronym | Fujitsu X33V — enterprise web application framework used for screen development |
| X33VDataTypeBeanInterface | Interface | Framework interface for data type resolution — defines the `typeModelData()` contract |
| X33VDataTypeList | Class | Framework class for typed data lists — container for `X33VDataTypeBeanInterface` entries |
| KKW00130SF | Screen ID | Service order detail inquiry screen — the screen module this bean belongs to |
| ANK-1587-00-00 | Change ID | JIRA/change ticket for indoor equipment type fields |
| ANK-2288-00-00 | Change ID | JIRA/change ticket for port number cancellation return-judge flag support |
| OT-2013-0000311 | Change ID | JIRA/change ticket for display-mode service contract status fields |
| FTTH | Business term | Fiber To The Home — fiber-optic broadband internet service |
| ENUM | Business term | NTT's integrated digital network service (Electric Communication Business) |
