# Business Logic — DKW00301SFBean.typeModelData() [752 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.DKW00301SF.DKW00301SFBean` |
| Layer | Controller (Web View Bean) |
| Module | `DKW00301SF` (Package: `eo.web.webview.DKW00301SF`) |

## 1. Role

### DKW00301SFBean.typeModelData()

This method serves as the **central type-resolution dispatcher** for the K-Opticom service inquiry screen (DKW00301SF), which is a device contract inquiry/search screen. Given a hierarchical key path and optional subkey, it returns the Java `Class<?>` that represents the data type for the specified field — enabling the view layer to dynamically determine field types (String, Long, Boolean) and manage UI properties (value, enable state, display state) without compile-time type knowledge.

The method implements the **dispatch/routing design pattern**, branching on the first segment of the `key` parameter (the field name) to determine which of approximately 34 distinct handling branches applies. Each branch corresponds to a specific UI field on the screen, classified into one of three categories: **(a)** data type bean fields (list-based items like "Search Result List", "Receiver List", "Return Condition List") which delegate recursively to their own `typeModelData` methods; **(b)** simple scalar fields (String, Long, Boolean) which directly return the corresponding `Class` based on the `subkey` ("value", "enable", or "state"); and **(c)** common info screen fields (key starting with "//") which delegate to the parent class's `typeCommonInfoData` method.

Within the larger system, this method plays a critical role in the **view-model binding** layer. The screen's JSP pages and JavaScript reference fields using the hierarchical key format (e.g., "検索結果リスト/0/案件番号"), and this method is called at runtime to resolve the expected data type for each referenced field. This enables dynamic table rendering, validation, and property management without hardcoding field types in the presentation layer. The method is called from other `typeModelData` invocations (recursive self-calls within the same class) when traversing nested data type beans.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["typeModelData key, subkey"])
    CHECK_NULL_KEY["key == null"]
    RETURN_NULL(["Return null"])
    CHECK_NULL_SUBKEY["subkey == null"]
    SET_EMPTY_SUBKEY["subkey = empty string"]
    CHECK_COMMON["key starts with double slash"]
    DELEGATE_COMMON["super.typeCommonInfoData key"]
    EXTRACT_ELEMENT["Extract keyElement from key by first slash"]
    CHECK_BRANCHES["Check keyElement branches"]

    START --> CHECK_NULL_KEY
    CHECK_NULL_KEY -- true --> RETURN_NULL
    CHECK_NULL_KEY -- false --> CHECK_NULL_SUBKEY
    CHECK_NULL_SUBKEY -- true --> SET_EMPTY_SUBKEY --> CHECK_COMMON
    CHECK_NULL_SUBKEY -- false --> CHECK_COMMON
    CHECK_COMMON -- true --> DELEGATE_COMMON
    CHECK_COMMON -- false --> EXTRACT_ELEMENT

    EXTRACT_ELEMENT --> BRANCH_1["Return type bean: Return Condition"]
    EXTRACT_ELEMENT --> BRANCH_2["Return type bean: Receiver"]
    EXTRACT_ELEMENT --> BRANCH_3["Return type bean: Return Type"]
    EXTRACT_ELEMENT --> BRANCH_4["String field: Service Contract No"]
    EXTRACT_ELEMENT --> BRANCH_5["String field: Case No"]
    EXTRACT_ELEMENT --> BRANCH_6["Return type bean: Model No"]
    EXTRACT_ELEMENT --> BRANCH_7["String field: Serial No"]
    EXTRACT_ELEMENT --> BRANCH_8["Return type bean: Search Date Choice"]
    EXTRACT_ELEMENT --> BRANCH_9["Return type bean: Date FROM"]
    EXTRACT_ELEMENT --> BRANCH_10["Return type bean: Date TO"]
    EXTRACT_ELEMENT --> BRANCH_11["Return type bean: Approval Date FROM"]
    EXTRACT_ELEMENT --> BRANCH_12["Return type bean: Approval Date TO"]
    EXTRACT_ELEMENT --> BRANCH_13["Return type bean: Search Result List"]
    EXTRACT_ELEMENT --> BRANCH_14["Return type bean: Provision Type List"]
    EXTRACT_ELEMENT --> BRANCH_15["Return type bean: CSV Search Result List"]
    EXTRACT_ELEMENT --> BRANCH_16["String field: Search Return Condition Index"]
    EXTRACT_ELEMENT --> BRANCH_17["String field: Search Receiver Index"]
    EXTRACT_ELEMENT --> BRANCH_18["String field: Search Return Type Index"]
    EXTRACT_ELEMENT --> BRANCH_19["String field: Search Service Contract No"]
    EXTRACT_ELEMENT --> BRANCH_20["String field: Search Case No"]
    EXTRACT_ELEMENT --> BRANCH_21["String field: Search Model No Index"]
    EXTRACT_ELEMENT --> BRANCH_22["String field: Search Serial No"]
    EXTRACT_ELEMENT --> BRANCH_23["String field: Search Date Choice Index"]
    EXTRACT_ELEMENT --> BRANCH_24["String bean: Device Contract Div Code List"]
    EXTRACT_ELEMENT --> BRANCH_25["String bean: Device Contract Div Name List"]
    EXTRACT_ELEMENT --> BRANCH_26["Long field: Page Num"]
    EXTRACT_ELEMENT --> BRANCH_27["Long field: Screen Mode"]
    EXTRACT_ELEMENT --> BRANCH_28["String field: Style"]
    EXTRACT_ELEMENT --> BRANCH_29["String field: Search Date FROM"]
    EXTRACT_ELEMENT --> BRANCH_30["String field: Search Date TO"]
    EXTRACT_ELEMENT --> BRANCH_31["String field: Search Approval Date FROM"]
    EXTRACT_ELEMENT --> BRANCH_32["String field: Search Approval Date TO"]
    EXTRACT_ELEMENT --> BRANCH_33["String field: Search Return Device No"]
    EXTRACT_ELEMENT --> BRANCH_34["Return type bean: Selected Search Result List"]

    BRANCH_1 --> END_NODE(["Return or delegate"])
    BRANCH_2 --> END_NODE
    BRANCH_3 --> END_NODE
    BRANCH_4 --> END_NODE
    BRANCH_5 --> END_NODE
    BRANCH_6 --> END_NODE
    BRANCH_7 --> END_NODE
    BRANCH_8 --> END_NODE
    BRANCH_9 --> END_NODE
    BRANCH_10 --> END_NODE
    BRANCH_11 --> END_NODE
    BRANCH_12 --> END_NODE
    BRANCH_13 --> END_NODE
    BRANCH_14 --> END_NODE
    BRANCH_15 --> END_NODE
    BRANCH_16 --> END_NODE
    BRANCH_17 --> END_NODE
    BRANCH_18 --> END_NODE
    BRANCH_19 --> END_NODE
    BRANCH_20 --> END_NODE
    BRANCH_21 --> END_NODE
    BRANCH_22 --> END_NODE
    BRANCH_23 --> END_NODE
    BRANCH_24 --> END_NODE
    BRANCH_25 --> END_NODE
    BRANCH_26 --> END_NODE
    BRANCH_27 --> END_NODE
    BRANCH_28 --> END_NODE
    BRANCH_29 --> END_NODE
    BRANCH_30 --> END_NODE
    BRANCH_31 --> END_NODE
    BRANCH_32 --> END_NODE
    BRANCH_33 --> END_NODE
    BRANCH_34 --> END_NODE
```

**Processing flow:**

1. **Null/empty guard:** If `key` is null, returns null immediately. If `subkey` is null, replaces it with an empty string.
2. **Common info check:** If `key` starts with `//`, delegates to `super.typeCommonInfoData(key)` — handling common information screen fields.
3. **Key element extraction:** Parses the first segment of the key (up to the first `/`) as `keyElement`. If no `/` is found, `keyElement` equals the full `key`.
4. **Branch dispatch:** Matches `keyElement` against 34 distinct field name literals. Each branch is described below:

| Branch No. | Japanese Key Literal | English Meaning | Handling Pattern |
|-----------|---------------------|-----------------|-----------------|
| B1 | 返品抽出条件 | Return extraction condition | Data type bean list — recursive delegation |
| B2 | 受取先 | Receiver | Data type bean list — recursive delegation |
| B3 | 返品種類 | Return type | Data type bean list — recursive delegation |
| B4 | サービス契約番号 | Service contract number | Simple String — subkey-based type resolution |
| B5 | 案件番号 | Case number | Simple String — subkey-based type resolution |
| B6 | 型番号 | Model number | Data type bean list — recursive delegation |
| B7 | 製造番号 | Serial number | Simple String — subkey-based type resolution |
| B8 | 検索日付選択 | Search date choice | Data type bean list — recursive delegation |
| B9 | 日付FROM | Date FROM | Data type bean list — recursive delegation |
| B10 | 日付TO | Date TO | Data type bean list — recursive delegation |
| B11 | 承認日FROM | Approval date FROM | Data type bean list — recursive delegation |
| B12 | 承認日TO | Approval date TO | Data type bean list — recursive delegation |
| B13 | 検索結果リスト | Search result list | Data type bean list — recursive delegation |
| B14 | 提供種類リスト | Provision type list | Data type bean list — recursive delegation |
| B15 | CSV用検索結果リスト | CSV search result list | Data type bean list — recursive delegation |
| B16 | 検索条件返品抽出条件インデックス | Search condition return condition index | Simple String — subkey-based type resolution |
| B17 | 検索条件受取先インデックス | Search condition receiver index | Simple String — subkey-based type resolution |
| B18 | 検索条件返品種類インデックス | Search condition return type index | Simple String — subkey-based type resolution |
| B19 | 検索条件サービス契約番号 | Search condition service contract number | Simple String — subkey-based type resolution |
| B20 | 検索条件案件番号 | Search condition case number | Simple String — subkey-based type resolution |
| B21 | 検索条件型番号インデックス | Search condition model number index | Simple String — subkey-based type resolution |
| B22 | 検索条件製造番号 | Search condition serial number | Simple String — subkey-based type resolution |
| B23 | 検索条件検索日付選択インデックス | Search condition search date choice index | Simple String — subkey-based type resolution |
| B24 | 機器契約区分コード一覧 | Device contract division code list | String bean list — indexed access |
| B25 | 機器契約区分名称一覧 | Device contract division name list | String bean list — indexed access |
| B26 | ページ数 | Page number | Simple Long — subkey-based type resolution |
| B27 | 画面モード | Screen mode | Simple Long — subkey-based type resolution |
| B28 | スタイル | Style | Simple String — subkey-based type resolution |
| B29 | 検索条件日付FROM | Search condition date FROM | Simple String — subkey-based type resolution |
| B30 | 検索条件日付TO | Search condition date TO | Simple String — subkey-based type resolution |
| B31 | 検索条件承認日FROM | Search condition approval date FROM | Simple String — subkey-based type resolution |
| B32 | 検索条件承認日TO | Search condition approval date TO | Simple String — subkey-based type resolution |
| B33 | 検索条件返品機器番号 | Search condition return device number | Simple String — subkey-based type resolution |
| B34 | 選択検索結果リスト | Selected search result list | Data type bean list — recursive delegation |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | Hierarchical field identifier used to look up data type information. Format: `"fieldName"` for simple fields, `"fieldName/index/propertyName"` for list elements with nested properties, or `"//commonInfoKey"` for common info screen fields. Examples: `"検索結果リスト/0/案件番号"` (search result list, element 0, case number field), `"サービス契約番号"` (service contract number), `"//共通情報キー"` (common info). |
| 2 | `subkey` | `String` | Secondary qualifier that refines the type resolution for simple scalar fields. Valid values: `"value"` (returns the data value type), `"enable"` (returns Boolean type for input enable/disable state), `"state"` (returns String type for field state/status). For list-based (data type bean) fields, this is passed through to the child bean. Null is accepted and replaced with an empty string. |

**Instance fields read by this method:**

| Field Name | Type | Business Description |
|-----------|------|---------------------|
| `i_hmpin_chsht_joken_list` | `List<X33VDataTypeBeanInterface>` | Return extraction condition (filter criteria) list — contains bean items for each search filter row |
| `i_ukeire_sk_list` | `List<X33VDataTypeBeanInterface>` | Receiver list — contains bean items for each receiver entry |
| `i_hmpin_sbt_list` | `List<X33VDataTypeBeanInterface>` | Return type list — contains bean items for each return type entry |
| `i_mdl_no_list` | `List<X33VDataTypeBeanInterface>` | Model number list — contains bean items for each model number entry |
| `i_search_ymd_choice_list` | `List<X33VDataTypeBeanInterface>` | Search date choice list — contains bean items for date selection criteria |
| `i_ymd_sta_list` | `List<X33VDataTypeBeanInterface>` | Date FROM list — contains bean items for start date entries |
| `i_ymd_end_list` | `List<X33VDataTypeBeanInterface>` | Date TO list — contains bean items for end date entries |
| `i_shonin_ymd_sta_list` | `List<X33VDataTypeBeanInterface>` | Approval date FROM list — contains bean items for approval start date entries |
| `i_shonin_ymd_end_list` | `List<X33VDataTypeBeanInterface>` | Approval date TO list — contains bean items for approval end date entries |
| `search_rslt_list_list` | `List<X33VDataTypeBeanInterface>` | Search result list — contains bean items for each search result row |
| `l_kiki_kei_div_list` | `List<X33VDataTypeBeanInterface>` | Provision type list — contains bean items for each service type/provision category |
| `search_rslt_list_csv_list` | `List<X33VDataTypeBeanInterface>` | CSV search result list — contains bean items for CSV export result rows |
| `kiki_kei_div_cd_list_list` | `List<X33VDataTypeStringBean>` | Device contract division code list — contains string beans for each device contract category code |
| `kiki_kei_div_nm_list_list` | `List<X33VDataTypeStringBean>` | Device contract division name list — contains string beans for each device contract category name |
| `SEARCH_RSLT_LIST_SELECTED_list` | `List<X33VDataTypeBeanInterface>` | Selected search result list — contains bean items for user-selected search results |

## 4. CRUD Operations / Called Services

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `JKKAdEditCC.substring` | JKKAdEditCC | - | Calls `substring` in `JKKAdEditCC` (String utility for text extraction) |
| - | `JKKAdEdit.substring` | JKKAdEdit | - | Calls `substring` in `JKKAdEdit` (String utility for text extraction) |
| - | `JKKTelnoInfoAddMapperCC.substring` | JKKTelnoInfoAddMapperCC | - | Calls `substring` in `JKKTelnoInfoAddMapperCC` (String utility for text extraction) |
| - | `JDKejbStringEdit.substring` | JDKejbStringEdit | - | Calls `substring` in `JDKejbStringEdit` (String utility for text extraction) |
| - | `DKW00301SFBean.typeModelData` | DKW00301SFBean | - | Recursive self-call — delegates type resolution to nested data type beans |
| - | `super.typeCommonInfoData` | DKW00301SFBean (super) | - | Delegates common info screen field type resolution to parent class |
| - | `X33VDataTypeBeanInterface.typeModelData` | X33VDataTypeBeanInterface | - | Invokes typeModelData on child data type bean (13 distinct list fields) |
| - | `X33VDataTypeStringBean.typeModelData` | X33VDataTypeStringBean | - | Invokes typeModelData on child string data type bean (2 device contract lists) |

**Classification notes:** This method performs **zero direct database operations** (no C/R/U/D). It is a pure type-resolution utility. All "operations" are in-memory type dispatch and recursive delegation calls to nested bean objects. No SC (Service Component) codes are invoked, and no entity/DB table access occurs.

## 5. Dependency Trace

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

No screen/batch entry points found within 8 hops. Direct callers found: 1 methods.

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | DKW00301SFBean.typeModelData (self-recursive) | `DKW00301SFBean.typeModelData` -> `X33VDataTypeBeanInterface.typeModelData` | `typeModelData` [-] |
| 2 | DKW00301SFBean.typeModelData (self-recursive) | `DKW00301SFBean.typeModelData` -> `X33VDataTypeStringBean.typeModelData` | `typeModelData` [-] |
| 3 | DKW00301SFBean.typeModelData | `DKW00301SFBean.typeModelData` -> `super.typeCommonInfoData` | `typeCommonInfoData` [-] |

**Summary:** This method is called recursively by itself when resolving types for list elements within nested data type beans. The terminal operations are `typeModelData` (recursive) and `substring` (called by the pre-computed evidence chain). No direct screen or batch entry points route through this method — it is invoked from within the same class's type resolution logic during the traversal of nested bean structures.

## 6. Per-Branch Detail Blocks

### Block 1 — IF (null key check) (L3109)

> Checks if the key parameter is null and returns null immediately.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` // If key is null, no type info available |

### Block 2 — ELSE IF (null subkey check) (L3114)

> If subkey is null, replace with empty string to avoid null pointer issues.

| # | Type | Code |
|---|------|------|
| 1 | SET | `subkey = new String("")` // Replace null subkey with empty string |

### Block 3 — IF (common info check) (L3122)

> Checks if key starts with "//" (common info screen indicator).
> Branch: `key.startsWith("//") == true` (COMMON INFO SCREEN)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `super.typeCommonInfoData(key)` // Delegate to parent class for common info fields |

### Block 4 — ELSE (non-common info parsing) (L3127)

> For non-common-info keys: extract the first element by finding the first "/" delimiter.

| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = key.indexOf("/")` // Search for first "/" separator |
| 2 | IF | `separaterPoint > 0` // Has slash separator |
| 2.1 | SET | `keyElement = key.substring(0, separaterPoint)` // Extract first element before "/" |
| 3 | ELSE | `separaterPoint <= 0` // No slash — use entire key |
| 3.1 | SET | `keyElement = key` // No "/" found; keyElement is the full key |

### Block 5 — ELSE IF (data type bean: 返品抽出条件 / Return Condition) (L3137)

> Branch: `keyElement.equals("返品抽出条件")` — Return extraction condition (search filter criteria list).
> Handles items in `i_hmpin_chsht_joken_list`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyRemain = key.substring(separaterPoint + 1)` // Extract remainder after first "/" |
| 2 | IF | `keyRemain.equals("*")` // Wildcard index request |
| 2.1 | RETURN | `return Integer.class` // Return Integer for list element count |
| 3 | SET | `separaterPoint = keyRemain.indexOf("/")` // Search for next "/" in remainder |
| 4 | IF | `separaterPoint <= 0` // No second separator found (invalid format) |
| 4.1 | RETURN | `return null` // Malformed key path |
| 5 | SET | `keyElement = keyRemain.substring(0, separaterPoint)` // Extract index segment |
| 6 | TRY | `tmpIndexInt = Integer.valueOf(keyElement)` // Parse index as integer |
| 6.1 | CATCH | `NumberFormatException e` // Index is not a numeric string |
| 6.2 | RETURN | `return null` // Non-numeric index |
| 7 | IF | `tmpIndexInt == null` |
| 7.1 | RETURN | `return null` |
| 8 | SET | `tmpIndex = tmpIndexInt.intValue()` // Extract primitive int |
| 9 | IF | `tmpIndex < 0 \|\| tmpIndex >= i_hmpin_chsht_joken_list.size()` // Out of bounds |
| 9.1 | RETURN | `return null` // Index exceeds list size |
| 10 | SET | `keyElement = keyRemain.substring(separaterPoint + 1)` // Extract property name |
| 11 | RETURN | `return ((X33VDataTypeBeanInterface)i_hmpin_chsht_joken_list.get(tmpIndex)).typeModelData(keyElement, subkey)` // Delegate to child bean |

### Block 6 — ELSE IF (data type bean: 受取先 / Receiver) (L3169)

> Branch: `keyElement.equals("受取先")` — Receiver (recipient/delivery destination) list.
> Handles items in `i_ukeire_sk_list`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyRemain = key.substring(separaterPoint + 1)` // Extract remainder |
| 2 | IF | `keyRemain.equals("*")` // Wildcard index |
| 2.1 | RETURN | `return Integer.class` |
| 3 | SET | `separaterPoint = keyRemain.indexOf("/")` // Search for next "/" |
| 4 | IF | `separaterPoint <= 0` |
| 4.1 | RETURN | `return null` |
| 5 | SET | `keyElement = keyRemain.substring(0, separaterPoint)` |
| 6 | TRY | `tmpIndexInt = Integer.valueOf(keyElement)` |
| 6.1 | CATCH | `NumberFormatException e` |
| 6.2 | RETURN | `return null` |
| 7 | IF | `tmpIndexInt == null` |
| 7.1 | RETURN | `return null` |
| 8 | SET | `tmpIndex = tmpIndexInt.intValue()` |
| 9 | IF | `tmpIndex < 0 \|\| tmpIndex >= i_ukeire_sk_list.size()` |
| 9.1 | RETURN | `return null` |
| 10 | SET | `keyElement = keyRemain.substring(separaterPoint + 1)` |
| 11 | RETURN | `return ((X33VDataTypeBeanInterface)i_ukeire_sk_list.get(tmpIndex)).typeModelData(keyElement, subkey)` |

### Block 7 — ELSE IF (data type bean: 返品種類 / Return Type) (L3201)

> Branch: `keyElement.equals("返品種類")` — Return type list.
> Handles items in `i_hmpin_sbt_list`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyRemain = key.substring(separaterPoint + 1)` |
| 2 | IF | `keyRemain.equals("*")` |
| 2.1 | RETURN | `return Integer.class` |
| 3 | SET | `separaterPoint = keyRemain.indexOf("/")` |
| 4 | IF | `separaterPoint <= 0` |
| 4.1 | RETURN | `return null` |
| 5 | SET | `keyElement = keyRemain.substring(0, separaterPoint)` |
| 6 | TRY | `tmpIndexInt = Integer.valueOf(keyElement)` |
| 6.1 | CATCH | `NumberFormatException e` → `return null` |
| 7 | IF | `tmpIndexInt == null` → `return null` |
| 8 | SET | `tmpIndex = tmpIndexInt.intValue()` |
| 9 | IF | `tmpIndex < 0 \|\| tmpIndex >= i_hmpin_sbt_list.size()` → `return null` |
| 10 | SET | `keyElement = keyRemain.substring(separaterPoint + 1)` |
| 11 | RETURN | `return ((X33VDataTypeBeanInterface)i_hmpin_sbt_list.get(tmpIndex)).typeModelData(keyElement, subkey)` |

### Block 8 — ELSE IF (String field: サービス契約番号 / Service Contract Number) (L3233)

> Branch: `keyElement.equals("サービス契約番号")` — Service contract number field.
> Simple field: type depends on subkey value.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` // Subkey is "value" |
| 1.1 | RETURN | `return String.class` // Data value is String |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("enable")` // Subkey is "enable" |
| 2.1 | RETURN | `return Boolean.class` // Enable/disable flag is Boolean |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("state")` // Subkey is "state" |
| 3.1 | RETURN | `return String.class` // Display state is String |

### Block 9 — ELSE IF (String field: 案件番号 / Case Number) (L3243)

> Branch: `keyElement.equals("案件番号")` — Case number field.
> Same subkey-based pattern as Block 8.

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

### Block 10 — ELSE IF (data type bean: 型番号 / Model Number) (L3255)

> Branch: `keyElement.equals("型番号")` — Model number list.
> Handles items in `i_mdl_no_list`. Same pattern as Blocks 5-7.

| # | Type | Code |
|---|------|------|
| 1-11 | SAME | Identical pattern: extract keyRemain, check wildcard "*", parse index, bounds-check `i_mdl_no_list`, delegate to child bean |
| 11 | RETURN | `return ((X33VDataTypeBeanInterface)i_mdl_no_list.get(tmpIndex)).typeModelData(keyElement, subkey)` |

### Block 11 — ELSE IF (String field: 製造番号 / Serial Number) (L3287)

> Branch: `keyElement.equals("製造番号")` — Serial number field.
> Same subkey-based pattern as Block 8.

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

### Block 12 — ELSE IF (data type bean: 検索日付選択 / Search Date Choice) (L3299)

> Branch: `keyElement.equals("検索日付選択")` — Search date choice list.
> Handles items in `i_search_ymd_choice_list`. Same pattern as Block 5.

| # | Type | Code |
|---|------|------|
| 1-11 | SAME | Extract keyRemain, wildcard check, parse index, bounds-check `i_search_ymd_choice_list`, delegate |
| 11 | RETURN | `return ((X33VDataTypeBeanInterface)i_search_ymd_choice_list.get(tmpIndex)).typeModelData(keyElement, subkey)` |

### Block 13 — ELSE IF (data type bean: 日付FROM / Date FROM) (L3331)

> Branch: `keyElement.equals("日付FROM")` — Date FROM (start date) list.
> Handles items in `i_ymd_sta_list`. Same pattern.

| # | Type | Code |
|---|------|------|
| 1-11 | SAME | Extract, wildcard, parse, bounds-check `i_ymd_sta_list`, delegate |
| 11 | RETURN | `return ((X33VDataTypeBeanInterface)i_ymd_sta_list.get(tmpIndex)).typeModelData(keyElement, subkey)` |

### Block 14 — ELSE IF (data type bean: 日付TO / Date TO) (L3363)

> Branch: `keyElement.equals("日付TO")` — Date TO (end date) list.
> Handles items in `i_ymd_end_list`. Same pattern.

| # | Type | Code |
|---|------|------|
| 1-11 | SAME | Extract, wildcard, parse, bounds-check `i_ymd_end_list`, delegate |
| 11 | RETURN | `return ((X33VDataTypeBeanInterface)i_ymd_end_list.get(tmpIndex)).typeModelData(keyElement, subkey)` |

### Block 15 — ELSE IF (data type bean: 承認日FROM / Approval Date FROM) (L3395)

> Branch: `keyElement.equals("承認日FROM")` — Approval date FROM list.
> Handles items in `i_shonin_ymd_sta_list`. Same pattern.

| # | Type | Code |
|---|------|------|
| 1-11 | SAME | Extract, wildcard, parse, bounds-check `i_shonin_ymd_sta_list`, delegate |
| 11 | RETURN | `return ((X33VDataTypeBeanInterface)i_shonin_ymd_sta_list.get(tmpIndex)).typeModelData(keyElement, subkey)` |

### Block 16 — ELSE IF (data type bean: 承認日TO / Approval Date TO) (L3427)

> Branch: `keyElement.equals("承認日TO")` — Approval date TO list.
> Handles items in `i_shonin_ymd_end_list`. Same pattern.

| # | Type | Code |
|---|------|------|
| 1-11 | SAME | Extract, wildcard, parse, bounds-check `i_shonin_ymd_end_list`, delegate |
| 11 | RETURN | `return ((X33VDataTypeBeanInterface)i_shonin_ymd_end_list.get(tmpIndex)).typeModelData(keyElement, subkey)` |

### Block 17 — ELSE IF (data type bean: 検索結果リスト / Search Result List) (L3459)

> Branch: `keyElement.equals("検索結果リスト")` — Search result list (main results grid).
> Handles items in `search_rslt_list_list`. Same pattern.

| # | Type | Code |
|---|------|------|
| 1-11 | SAME | Extract, wildcard, parse, bounds-check `search_rslt_list_list`, delegate |
| 11 | RETURN | `return ((X33VDataTypeBeanInterface)search_rslt_list_list.get(tmpIndex)).typeModelData(keyElement, subkey)` |

### Block 18 — ELSE IF (data type bean: 提供種類リスト / Provision Type List) (L3491)

> Branch: `keyElement.equals("提供種類リスト")` — Provision type list (service type/provision category).
> Handles items in `l_kiki_kei_div_list`. Same pattern.

| # | Type | Code |
|---|------|------|
| 1-11 | SAME | Extract, wildcard, parse, bounds-check `l_kiki_kei_div_list`, delegate |
| 11 | RETURN | `return ((X33VDataTypeBeanInterface)l_kiki_kei_div_list.get(tmpIndex)).typeModelData(keyElement, subkey)` |

### Block 19 — ELSE IF (data type bean: CSV用検索結果リスト / CSV Search Result List) (L3523)

> Branch: `keyElement.equals("CSV用検索結果リスト")` — CSV search result list (export format).
> Handles items in `search_rslt_list_csv_list`. Same pattern.

| # | Type | Code |
|---|------|------|
| 1-11 | SAME | Extract, wildcard, parse, bounds-check `search_rslt_list_csv_list`, delegate |
| 11 | RETURN | `return ((X33VDataTypeBeanInterface)search_rslt_list_csv_list.get(tmpIndex)).typeModelData(keyElement, subkey)` |

### Block 20 — ELSE IF (String field: 検索条件返品抽出条件インデックス / Search Condition Return Condition Index) (L3555)

> Branch: `keyElement.equals("検索条件返品抽出条件インデックス")` — Search filter return condition index field.
> Same subkey-based pattern as Block 8.

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

### Block 21 — ELSE IF (String field: 検索条件受取先インデックス / Search Condition Receiver Index) (L3565)

> Branch: `keyElement.equals("検索条件受取先インデックス")` — Search filter receiver index field.

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

### Block 22 — ELSE IF (String field: 検索条件返品種類インデックス / Search Condition Return Type Index) (L3575)

> Branch: `keyElement.equals("検索条件返品種類インデックス")` — Search filter return type index field.

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

### Block 23 — ELSE IF (String field: 検索条件サービス契約番号 / Search Condition Service Contract Number) (L3585)

> Branch: `keyElement.equals("検索条件サービス契約番号")` — Search filter service contract number field.

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

### Block 24 — ELSE IF (String field: 検索条件案件番号 / Search Condition Case Number) (L3595)

> Branch: `keyElement.equals("検索条件案件番号")` — Search filter case number field.

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

### Block 25 — ELSE IF (String field: 検索条件型番号インデックス / Search Condition Model Number Index) (L3605)

> Branch: `keyElement.equals("検索条件型番号インデックス")` — Search filter model number index field.

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

### Block 26 — ELSE IF (String field: 検索条件製造番号 / Search Condition Serial Number) (L3615)

> Branch: `keyElement.equals("検索条件製造番号")` — Search filter serial number field.

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

### Block 27 — ELSE IF (String field: 検索条件検索日付選択インデックス / Search Condition Search Date Choice Index) (L3625)

> Branch: `keyElement.equals("検索条件検索日付選択インデックス")` — Search filter date choice index field.

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

### Block 28 — ELSE IF (String bean: 機器契約区分コード一覧 / Device Contract Division Code List) (L3635)

> Branch: `keyElement.equals("機器契約区分コード一覧")` — Device contract division code list (String-type, variable count).
> Handles items in `kiki_kei_div_cd_list_list` (List of `X33VDataTypeStringBean`).
> Pattern: extract after first `/`, check wildcard, parse index, bounds-check, delegate to String bean.

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyElement = key.substring(separaterPoint + 1)` // Extract after first "/" |
| 2 | IF | `keyElement.equals("*")` // Wildcard index |
| 2.1 | RETURN | `return Integer.class` // Return Integer for list element count |
| 3 | TRY | `tmpIndexInt = Integer.valueOf(keyElement)` // Parse index |
| 3.1 | CATCH | `NumberFormatException e` → `return null` |
| 4 | IF | `tmpIndexInt == null` → `return null` |
| 5 | SET | `tmpIndex = tmpIndexInt.intValue()` |
| 6 | IF | `tmpIndex < 0 \|\| tmpIndex >= kiki_kei_div_cd_list_list.size()` |
| 6.1 | RETURN | `return null` // Out of bounds |
| 7 | RETURN | `return ((X33VDataTypeStringBean)kiki_kei_div_cd_list_list.get(tmpIndex)).typeModelData(subkey)` // Delegate to String bean |

### Block 29 — ELSE IF (String bean: 機器契約区分名称一覧 / Device Contract Division Name List) (L3668)

> Branch: `keyElement.equals("機器契約区分名称一覧")` — Device contract division name list (String-type, variable count).
> Handles items in `kiki_kei_div_nm_list_list` (List of `X33VDataTypeStringBean`).
> Same pattern as Block 28.

| # | Type | Code |
|---|------|------|
| 1-7 | SAME | Extract, wildcard check, parse index, bounds-check `kiki_kei_div_nm_list_list`, delegate to String bean |
| 7 | RETURN | `return ((X33VDataTypeStringBean)kiki_kei_div_nm_list_list.get(tmpIndex)).typeModelData(subkey)` |

### Block 30 — ELSE IF (Long field: ページ数 / Page Number) (L3700)

> Branch: `keyElement.equals("ページ数")` — Page number field (Long type).

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` // Subkey is "value" |
| 1.1 | RETURN | `return Long.class` // Data value is Long |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("state")` // Subkey is "state" |
| 2.1 | RETURN | `return String.class` // Display state is String |

### Block 31 — ELSE IF (Long field: 画面モード / Screen Mode) (L3710)

> Branch: `keyElement.equals("画面モード")` — Screen mode field (Long type).
> Same pattern as Block 30.

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

### Block 32 — ELSE IF (String field: スタイル / Style) (L3720)

> Branch: `keyElement.equals("スタイル")` — Style field (String type).

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

### Block 33 — ELSE IF (String field: 検索条件日付FROM / Search Condition Date FROM) (L3730)

> Branch: `keyElement.equals("検索条件日付FROM")` — Search filter date FROM field.

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

### Block 34 — ELSE IF (String field: 検索条件日付TO / Search Condition Date TO) (L3740)

> Branch: `keyElement.equals("検索条件日付TO")` — Search filter date TO field.

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

### Block 35 — ELSE IF (String field: 検索条件承認日FROM / Search Condition Approval Date FROM) (L3750)

> Branch: `keyElement.equals("検索条件承認日FROM")` — Search filter approval date FROM field.

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

### Block 36 — ELSE IF (String field: 検索条件承認日TO / Search Condition Approval Date TO) (L3760)

> Branch: `keyElement.equals("検索条件承認日TO")` — Search filter approval date TO field.

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

### Block 37 — ELSE IF (String field: 検索条件返品機器番号 / Search Condition Return Device Number) (L3770)

> Branch: `keyElement.equals("検索条件返品機器番号")` — Search filter return device number field.

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

### Block 38 — ELSE IF (data type bean: 選択検索結果リスト / Selected Search Result List) (L3780)

> Branch: `keyElement.equals("選択検索結果リスト")` — Selected search result list.
> Handles items in `SEARCH_RSLT_LIST_SELECTED_list`. Same data type bean list pattern.

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyRemain = key.substring(separaterPoint + 1)` |
| 2 | IF | `keyRemain.equals("*")` → `return Integer.class` |
| 3 | SET | `separaterPoint = keyRemain.indexOf("/")` |
| 4 | IF | `separaterPoint <= 0` → `return null` |
| 5 | SET | `keyElement = keyRemain.substring(0, separaterPoint)` |
| 6 | TRY | `tmpIndexInt = Integer.valueOf(keyElement)` |
| 6.1 | CATCH | `NumberFormatException e` → `return null` |
| 7 | IF | `tmpIndexInt == null` → `return null` |
| 8 | SET | `tmpIndex = tmpIndexInt.intValue()` |
| 9 | IF | `tmpIndex < 0 \|\| tmpIndex >= SEARCH_RSLT_LIST_SELECTED_list.size()` → `return null` |
| 10 | SET | `keyElement = keyRemain.substring(separaterPoint + 1)` |
| 11 | RETURN | `return ((X33VDataTypeBeanInterface)SEARCH_RSLT_LIST_SELECTED_list.get(tmpIndex)).typeModelData(keyElement, subkey)` |

### Block 39 — ELSE (default: unmatched keyElement) (L3839)

> No matching keyElement was found.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null` // Unrecognized field name |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `返品抽出条件` | Field | Return extraction condition — search filter criteria for filtering returned (canceled/refunded) items |
| `受取先` | Field | Receiver — delivery destination / recipient information for service contract |
| `返品種類` | Field | Return type — classification of return/cancellation type (e.g., full return, partial return) |
| `サービス契約番号` | Field | Service contract number — unique identifier for a telecom service contract line |
| `案件番号` | Field | Case number — unique identifier for a service request case/ticket |
| `型番号` | Field | Model number — product model identifier for devices |
| `製造番号` | Field | Serial number — unique manufacturing serial number for a device |
| `検索日付選択` | Field | Search date choice — date selection mode/criteria for search operations |
| `日付FROM` | Field | Date FROM — start date for a date range query |
| `日付TO` | Field | Date TO — end date for a date range query |
| `承認日FROM` | Field | Approval date FROM — start date for approval date range |
| `承認日TO` | Field | Approval date TO — end date for approval date range |
| `検索結果リスト` | Field | Search result list — main grid displaying search result rows |
| `提供種類リスト` | Field | Provision type list — list of service types/provision categories (e.g., FTTH, Mail, ENUM) |
| `CSV用検索結果リスト` | Field | CSV search result list — search results formatted for CSV export |
| `機器契約区分コード一覧` | Field | Device contract division code list — list of device contract category codes (String type, variable count) |
| `機器契約区分名称一覧` | Field | Device contract division name list — list of device contract category names (String type, variable count) |
| `ページ数` | Field | Page number — pagination control value (Long type) |
| `画面モード` | Field | Screen mode — display mode identifier for the screen (Long type) |
| `スタイル` | Field | Style — CSS/display style attribute for UI rendering (String type) |
| `選択検索結果リスト` | Field | Selected search result list — list of user-selected search result entries |
| `X33VDataTypeBeanInterface` | Interface | Data type bean interface — contract for nested list items that each expose their own typeModelData for property-level type resolution |
| `X33VDataTypeStringBean` | Class | Data type string bean — bean wrapper for String-type list items with variable element counts |
| `//` prefix | Convention | Common info screen prefix — indicates the key refers to a shared/common information screen field, triggering delegation to the parent class |
| `*` wildcard | Convention | Element count wildcard — when used as an index, returns Integer.class to indicate the caller should request list element count rather than a specific property type |
| `value` subkey | Convention | Data value accessor — requests the type of the actual data value |
| `enable` subkey | Convention | Enable state accessor — requests the type of the input enable/disable state (returns Boolean) |
| `state` subkey | Convention | Display state accessor — requests the type of the field display/state information (returns String) |
| DKW00301SF | Screen | Device contract inquiry screen — a K-Opticom web screen for searching and inquiring about device/service contracts |
| `i_hmpin_chsht_joken_list` | Field | Return extraction condition (filter criteria) list instance — internal field holding data type bean items for search filter rows |
| `i_ukeire_sk_list` | Field | Receiver list instance — internal field holding data type bean items for receiver entries |
| `i_hmpin_sbt_list` | Field | Return type list instance — internal field holding data type bean items for return type entries |
| `i_mdl_no_list` | Field | Model number list instance — internal field holding data type bean items for model number entries |
| `i_search_ymd_choice_list` | Field | Search date choice list instance |
| `i_ymd_sta_list` | Field | Date FROM list instance — internal field holding data type bean items for start date entries |
| `i_ymd_end_list` | Field | Date TO list instance — internal field holding data type bean items for end date entries |
| `i_shonin_ymd_sta_list` | Field | Approval date FROM list instance |
| `i_shonin_ymd_end_list` | Field | Approval date TO list instance |
| `search_rslt_list_list` | Field | Search result list instance — internal field holding data type bean items for search result grid rows |
| `l_kiki_kei_div_list` | Field | Provision type list instance — internal field holding data type bean items for service type/provision category entries |
| `search_rslt_list_csv_list` | Field | CSV search result list instance |
| `kiki_kei_div_cd_list_list` | Field | Device contract division code list instance — holds String-type beans for device contract categories |
| `kiki_kei_div_nm_list_list` | Field | Device contract division name list instance — holds String-type beans for device contract category names |
| `SEARCH_RSLT_LIST_SELECTED_list` | Field | Selected search result list instance |
