# Business Logic — FUW00927SFBean.typeModelData() [1221 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.FUW00927SF.FUW00927SFBean` |
| Layer | Service / WebView Bean (Package: `eo.web.webview.FUW00927SF`) |
| Module | `FUW00927SF` (Package: `eo.web.webview.FUW00927SF`) |

## 1. Role

### FUW00927SFBean.typeModelData()

The `typeModelData` method serves as a **centralized type resolution dispatcher** for the FTTH (Fiber To The Home) service contract data entry screen system. Its business purpose is to determine the Java data type of any given UI field based on a key-based addressing scheme, enabling the framework to know whether a field should be rendered as text input, numeric input, boolean checkbox, or dynamic list row.

The method handles three distinct **service types**:

1. **Simple (single-value) fields**: Scalar fields with two standard subkey accessors — `value` returns the actual data type, and `state` returns the UI state descriptor (e.g., enabled, disabled, required). These include String fields such as function code (機能コード), screen mode (画面モード), monthly charge descriptions (月額料金文言), and Boolean fields like service area display flag (契約中サービスエリア表示フラグ).

2. **List (repeatable) fields**: Variable-length collection fields where data items are accessed by index. Examples include item code (項目コード), item value (値), monthly charge items (月額料金項目), monthly charges (月額料金), initial charge items (初期費用項目), initial charges (初期費用), and their smart phone (スマートフォン) and GH variants. When the wildcard `*` is passed as the index, the method returns `Integer.class` to indicate the size of the list. Index validation ensures bounds checking against the list size.

3. **Common info (共有情報) fields**: Fields prefixed with `//` in the key are delegated to the parent class `super.typeCommonInfoData()`, which handles shared system-level data types (e.g., customer information, operator details) not specific to the FTTH screen.

**Design pattern**: The method implements a **routing/dispatch pattern** — it parses the incoming key string, extracts the first segment (keyElement), and dispatches to one of 46+ type-specific handlers. For list-type fields, it further delegates to individual `X33VDataTypeStringBean.typeModelData()` instances, each responsible for resolving the type of a subkey within that list element.

**Role in the larger system**: This method is a **shared utility** called by multiple screen beans across the webview layer. It acts as the type introspection backbone for the generic screen rendering framework, allowing form fields to be dynamically typed without hardcoding type information into the UI layer. It is called via nested key paths such as `"項目コード/0/value"` to resolve the type of the first item's value field.

## 2. Processing Pattern (Detailed Business Logic)

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

    NULL_CHK[key == null]
    SUB_CHK[subkey == null]
    EMPTY_SUBKEY[subkey = empty string]
    COMMON_CHK[key starts with //]
    ROOT_CHK[key contains /]
    KEY_ELEM[Extract keyElement = first segment before /]
    SIMPLE_LIST[Check keyElement against 46 simple/list types]

    SIMPLE_TYPES[simple type: value->String, state->String]
    LIST_TYPES[list type: index parse -> get list -> call typeModelData]
    SPECIAL_BOOL[契約中サービスエリア表示フラグ: value->Boolean]
    SPECIAL_TAKCHO[宅内調査のアポ架電希望: value->String, enable->Boolean]
    NOT_FOUND[No match return null]
    END_RETURN([Return Class])

    START --> NULL_CHK
    NULL_CHK -- yes --> END_RETURN
    NULL_CHK -- no --> SUB_CHK
    SUB_CHK -- yes --> EMPTY_SUBKEY --> COMMON_CHK
    SUB_CHK -- no --> COMMON_CHK
    COMMON_CHK -- starts with // --> SUPER[super.typeCommonInfoData key] --> END_RETURN
    COMMON_CHK -- no --> ROOT_CHK
    ROOT_CHK -- has / --> KEY_ELEM
    ROOT_CHK -- no --> SIMPLE_LIST
    KEY_ELEM --> SIMPLE_LIST
    SIMPLE_LIST --> SIMPLE_TYPES
    SIMPLE_TYPES --> LIST_TYPES
    SIMPLE_TYPES --> SPECIAL_BOOL
    SIMPLE_TYPES --> SPECIAL_TAKCHO
    SIMPLE_TYPES --> NOT_FOUND --> END_RETURN
    LIST_TYPES --> NOT_FOUND
```

**CRITICAL — Constant Resolution:**

This method does not reference external constant classes (e.g., `SomeConstCC`). Instead, it uses **direct string literal comparisons** against Japanese field labels and special tokens:

| Constant String | Business Meaning |
|-----------------|------------------|
| `"機能コード"` | Function Code (item ID: fnc_mode) |
| `"画面モード"` | Screen Mode (item ID: screen_mode) |
| `"項目コード"` | Item Code — list type (item ID: koumoku_code) |
| `"値"` | Value — list type (item ID: koumoku_value) |
| `"月額料金項目"` | Monthly Charge Items — list type (item ID: getsu_ryokin_kmk) |
| `"月額料金"` | Monthly Charge — list type (item ID: getsu_ryokin) |
| `"初期費用項目"` | Initial Charge Items — list type (item ID: shoki_hiyo_kmk) |
| `"初期費用"` | Initial Charge — list type (item ID: shoki_hiyo) |
| `"月額料金計"` | Monthly Charge Total (item ID: getsu_ryokin_kei) |
| `"月額料金計（税抜）"` | Monthly Charge Total (Tax Excluded) (item ID: getsu_ryokin_kei_zei) |
| `"初期費用計"` | Initial Charge Total (item ID: shoki_hiyo_kei) |
| `"初期費用計（税抜）"` | Initial Charge Total (Tax Excluded) (item ID: shoki_hiyo_kei_zei) |
| `"モバイル月額料金計"` | Mobile Monthly Charge Total (item ID: mobile_month) |
| `"モバイル初期費用計"` | Mobile Initial Charge Total (item ID: mobile_init) |
| `"月額料金文言"` | Monthly Charge Description Text (item ID: getsu_ryokin_mongon) |
| `"初期費用文言"` | Initial Charge Description Text (item ID: shoki_hiyo_mongon) |
| `"モバイル月額料金文言"` | Mobile Monthly Charge Description Text (item ID: mobile_month_mongon) |
| `"モバイル初期費用文言"` | Mobile Initial Charge Description Text (item ID: mobile_init_mongon) |
| `"月額料金合計"` | Monthly Charge Grand Total (item ID: gtgk_prc_gokei) |
| `"月額料金合計（税抜）"` | Monthly Charge Grand Total (Tax Excluded) (item ID: gtgk_prc_gokei_zei) |
| `"初期費用合計"` | Initial Charge Grand Total (item ID: shkh_gokei) |
| `"初期費用合計（税抜）"` | Initial Charge Grand Total (Tax Excluded) (item ID: shkh_gokei_zei) |
| `"月額料金合計文言"` | Monthly Charge Grand Total Description Text (item ID: gtgk_prc_gokei_mongon) |
| `"初期費用合計文言"` | Initial Charge Grand Total Description Text (item ID: shkh_gokei_mongon) |
| `"契約種別"` | Contract Type (item ID: kei_sbt) |
| `"ご契約者情報（個人）・性別"` | Subscriber Info (Individual) · Gender (item ID: sex) |
| `"ご本人様確認書類"` | Identity Verification Documents (item ID: hnin_cfm_aticle) |
| `"ご利用場所設置位置・ご利用場所の形態"` | Installation Location / Premises Type (item ID: setplace_form) |
| `"ご利用場所設置位置・お住まいの階数"` | Installation Location · Floor Number (item ID: setplace_flr) |
| `"ご利用場所設置位置・住所番地"` | Installation Location · Address Number (item ID: setplace_bnchi) |
| `"ご利用場所設置位置・利用中の回線"` | Installation Location · Current Line (item ID: use_net_ksn) |
| `"ご利用場所設置位置・利用中の機器の設置場所変更予定"` | Installation Location · Equipment Relocation Plan (item ID: kiki_place_chg) |
| `"ご利用場所設置位置・宅内調査と工事の同日実施"` | Installation Location · Same-Day Survey and Work (item ID: tkc_koji_same) |
| `"連絡先選択"` | Contact Selection (item ID: rrks_choice) |
| `"FAX連絡ご希望"` | Fax Contact Request (item ID: fax_kibo) |
| `"同一利用者場所警告表示制御フラグ"` | Same Location Warning Display Control Flag (item ID: dsp_same_use_place_kkoku_flg) |
| `"郵便番号表示制御フラグ"` | Postal Code Display Control Flag (item ID: dsp_pcd_flg) |
| `"閉じるボタン表示制御フラグ"` | Close Button Display Control Flag (item ID: dsp_close_btn_flg) |
| `"登録して次へボタン表示フラグ"` | Register and Next Button Display Flag (item ID: dsp_add_btn_flg) |
| `"次へボタン表示フラグ"` | Next Button Display Flag (item ID: dsp_next_btn_flg) |
| `"電話料指定額到達通知指定金額"` | Phone Charge Notification Amount (item ID: twryo_stiam_ttu_tchi_stiam) |
| `"月額料金割引文言適用期間"` | Monthly Charge Discount Text Application Period (item ID: gtgk_wrib_mngn_tk_kikan) |
| `"月額料金割引文言割引名"` | Monthly Charge Discount Text Discount Name (item ID: gtgk_wrib_mngn_wrib_nm) |
| `"月額料金割引文言割引額"` | Monthly Charge Discount Text Discount Amount (item ID: gtgk_wrib_mngn_wrib_amnt) |
| `"月額料金割引文言備考"` | Monthly Charge Discount Text Notes (item ID: gtgk_wrib_mngn_biko) |
| `"月額料金表示項目"` | Monthly Charge Display Items — list type (item ID: getsu_ryokin_kei_title) |
| `"契約中サービスエリア表示フラグ"` | Active Service Area Display Flag (Boolean, item ID: kei_svc_area_dsp_flg) |
| `"CX案件開始フラグ"` | CX Project Start Flag (item ID: cx_start_flg) |
| `"宅内調査のアポ架電希望表示フラグ"` | Home Survey Appointment Call Request Display Flag (item ID: takcho_apo_kaden_kibo_um_disp_flg) |
| `"宅内調査のアポ架電希望"` | Home Survey Appointment Call Request (item ID: takcho_apo_kaden_kibo_um_screen) |

Wildcard and subkey constants:
| Constant String | Business Meaning |
|-----------------|------------------|
| `"*"` | Wildcard — indicates "return the list size type" rather than an indexed element |
| `"value"` | Subkey for accessing the field value's type |
| `"state"` | Subkey for accessing the field's UI state type (always `String`) |
| `"enable"` | Subkey for accessing the field's enable/disable type |
| `"//"` | Common info prefix — triggers delegation to parent class |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | A hierarchical field identifier that specifies which UI field's type to resolve. Format: `FieldName[/Index][/Subkey]`. Examples: `"機能コード/value"` returns `String.class`; `"項目コード/0/value"` returns the type of the first item code in the list; `"月額料金/*"` returns `Integer.class` (list size type); `"//customerInfo"` delegates to shared info handling. |
| 2 | `subkey` | `String` | A sub-field specifier within a keyElement, typically `"value"` (the data type), `"state"` (the UI state type), or `"enable"` (the enabled/disabled type). For list-type fields, this is passed through to the individual element's `typeModelData()` call. Can be `null` (treated as empty string). |

**Instance fields read by this method:**

| Field | Type | Business Description |
|-------|------|---------------------|
| `koumoku_code_list` | `X33VDataTypeList` | List of item code entries (項目コード) — variable-length collection of String beans |
| `koumoku_value_list` | `X33VDataTypeList` | List of item value entries (値) — variable-length collection of String beans |
| `getsu_ryokin_kmk_list` | `X33VDataTypeList` | List of monthly charge item entries (月額料金項目) |
| `getsu_ryokin_list` | `X33VDataTypeList` | List of monthly charge entries (月額料金) |
| `shoki_hiyo_kmk_list` | `X33VDataTypeList` | List of initial charge item entries (初期費用項目) |
| `shoki_hiyo_list` | `X33VDataTypeList` | List of initial charge entries (初期費用) |
| `getsu_ryokin_kei_list` | `X33VDataTypeList` | List of monthly charge total entries (月額料金計) |
| `getsu_ryokin_kei_zei_list` | `X33VDataTypeList` | List of monthly charge total (tax excluded) entries (月額料金計（税抜）) |
| `getsu_ryokin_kmk_sml_list` | `X33VDataTypeList` | List of monthly charge item entries for Smart Phone (月額料金項目（スマートフォン）) |
| `getsu_ryokin_sml_list` | `X33VDataTypeList` | List of monthly charge entries for Smart Phone (月額料金（スマートフォン）) |
| `shoki_hiyo_kmk_sml_list` | `X33VDataTypeList` | List of initial charge item entries for Smart Phone (初期費用項目（スマートフォン）) |
| `shoki_hiyo_sml_list` | `X33VDataTypeList` | List of initial charge entries for Smart Phone (初期費用（スマートフォン）) |
| `getsu_ryokin_kei_sml_list` | `X33VDataTypeList` | List of mobile monthly charge total entries (月額料金計（スマートフォン）) |
| `getsu_ryokin_kei_sml_zei_list` | `X33VDataTypeList` | List of mobile monthly charge total (tax excluded) entries |
| `shoki_hiyo_kei_sml_list` | `X33VDataTypeList` | List of mobile initial charge total entries (初期費用計（スマートフォン）) |
| `shoki_hiyo_kei_sml_zei_list` | `X33VDataTypeList` | List of mobile initial charge total (tax excluded) entries |
| `getsu_ryokin_mongon_sml_list` | `X33VDataTypeList` | List of mobile monthly charge description text entries (月額料金文言（スマートフォン）) |
| `shoki_hiyo_mongon_sml_list` | `X33VDataTypeList` | List of mobile initial charge description text entries (初期費用文言（スマートフォン）) |
| `gtgk_prc_gokei_sml_list` | `X33VDataTypeList` | List of mobile monthly charge grand total entries (月額料金合計（スマートフォン）) |
| `gtgk_prc_gokei_sml_zei_list` | `X33VDataTypeList` | List of mobile monthly charge grand total (tax excluded) entries |
| `shkh_gokei_sml_list` | `X33VDataTypeList` | List of mobile initial charge grand total entries (初期費用合計（スマートフォン）) |
| `shkh_gokei_sml_zei_list` | `X33VDataTypeList` | List of mobile initial charge grand total (tax excluded) entries |
| `gtgk_prc_gokei_mongon_sml_list` | `X33VDataTypeList` | List of mobile monthly charge grand total description text entries |
| `shkh_gokei_mongon_sml_list` | `X33VDataTypeList` | List of mobile initial charge grand total description text entries |
| `gtgk_wrib_mngn_tk_kikan_list` | `X33VDataTypeList` | List of monthly charge discount text application period entries (月額料金割引文言適用期間) |
| `gtgk_wrib_mngn_wrib_nm_list` | `X33VDataTypeList` | List of monthly charge discount text discount name entries (月額料金割引文言割引名) |
| `gtgk_wrib_mngn_wrib_amnt_list` | `X33VDataTypeList` | List of monthly charge discount text discount amount entries (月額料金割引文言割引額) |
| `gtgk_wrib_mngn_biko_list` | `X33VDataTypeList` | List of monthly charge discount text notes entries (月額料金割引文言備考) |
| `getsu_ryokin_kei_title_list` | `X33VDataTypeList` | List of monthly charge display item entries (月額料金表示項目) |
| `getsu_ryokin_kmk_gh_list` | `X33VDataTypeList` | List of monthly charge item entries for GH (月額料金項目（GH）) |
| `getsu_ryokin_gh_list` | `X33VDataTypeList` | List of monthly charge entries for GH (月額料金（GH）) |
| `shoki_hiyo_kmk_gh_list` | `X33VDataTypeList` | List of initial charge item entries for GH (初期費用項目（GH）) |
| `shoki_hiyo_gh_list` | `X33VDataTypeList` | List of initial charge entries for GH (初期費用（GH）) |
| `getsu_ryokin_kei_gh_list` | `X33VDataTypeList` | List of monthly charge total entries for GH (月額料金計（GH）) |
| `getsu_ryokin_kei_gh_zei_list` | `X33VDataTypeList` | List of monthly charge total (tax excluded) entries for GH |
| `shoki_hiyo_kei_gh_list` | `X33VDataTypeList` | List of initial charge total entries for GH (初期費用計（GH）) |
| `shoki_hiyo_kei_gh_zei_list` | `X33VDataTypeList` | List of initial charge total (tax excluded) entries for GH |
| `gtgk_prc_gokei_gh_list` | `X33VDataTypeList` | List of monthly charge grand total entries for GH (月額料金合計（GH）) |
| `gtgk_prc_gokei_gh_zei_list` | `X33VDataTypeList` | List of monthly charge grand total (tax excluded) entries for GH |
| `shkh_gokei_gh_list` | `X33VDataTypeList` | List of initial charge grand total entries for GH (初期費用合計（GH）) |
| `shkh_gokei_gh_zei_list` | `X33VDataTypeList` | List of initial charge grand total (tax excluded) entries for GH |
| `gtgk_prc_gokei_mongon_gh_list` | `X33VDataTypeList` | List of monthly charge grand total description text entries for GH |
| `shkh_gokei_mongon_gh_list` | `X33VDataTypeList` | List of initial charge grand total description text entries for GH |

## 4. CRUD Operations / Called Services

This method is a **pure type resolver** — it performs no data persistence operations. It delegates type queries to the parent class and to child bean instances, but does not invoke any SC/CBS or database operations.

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `JKKAdEdit.substring` | JKKAdEdit | - | Calls `substring` in `JKKAdEdit` |
| - | `JKKAdEditCC.substring` | JKKAdEditCC | - | Calls `substring` in `JKKAdEditCC` |
| - | `JKKTelnoInfoAddMapperCC.substring` | JKKTelnoInfoAddMapperCC | - | Calls `substring` in `JKKTelnoInfoAddMapperCC` |
| - | `JDKejbStringEdit.substring` | JDKejbStringEdit | - | Calls `substring` in `JDKejbStringEdit` |
| - | `FUW00927SFBean.typeModelData` | FUW00927SFBean | - | Calls `typeModelData` in `FUW00927SFBean` |

**Analysis:**

The method makes no direct CRUD operations. Its calls are all:

| Call | Type | Description |
|------|------|-------------|
| `super.typeCommonInfoData(key)` | CALL (parent delegation) | Delegates common/shared info type resolution to the parent class |
| `((X33VDataTypeStringBean)list.get(i)).typeModelData(subkey)` | CALL (child delegation) | For list-type fields, retrieves the element at index `i` from the appropriate `X33VDataTypeList` and delegates to that element's `typeModelData(subkey)` method |
| `key.substring(start, end)` / `key.substring(start)` | EXEC | Extracts the first segment or remaining portion of the key path |
| `key.indexOf("/")` / `key.indexOf("//")` | EXEC | Scans key for path separators to determine the addressing format |
| `key.equalsIgnoreCase("value")` etc. | EXEC | Case-insensitive comparison against known subkey names |
| `list.size()` | EXEC | Bounds-check against list sizes |

## 5. Dependency Trace

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

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

This method is a **pure utility dispatcher** — it does not invoke any SC codes, CBS services, or database operations. Its callers are other beans within the `FUW00927SF` module that need to determine the type of a field for rendering or data binding purposes.

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | FUW00927SFBean (self-calls) | `FUW00927SFBean.typeModelData(key, subkey)` | `typeModelData` (delegated to parent / child beans) |

**Note**: This method is self-referential — it is called recursively via nested key paths where a parent `typeModelData` dispatches to a child `X33VDataTypeStringBean.typeModelData(subkey)`. No external screens, batches, or SC codes are in the call chain.

## 6. Per-Branch Detail Blocks

**Block 1** — [IF] `key == null` (L5222)

> Null guard: returns null immediately if no key is provided.

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

**Block 2** — [ELSE-IF] `subkey == null` (L5227)

> Normalize null subkey to empty string for consistent downstream handling.

| # | Type | Code |
|---|------|------|
| 1 | SET | `subkey = new String("");` |

**Block 3** — [DECLARE] `keyElement` and `separaterPoint` (L5232–5233)

> Declares local variables. First `separaterPoint` checks for `//` (common info prefix).

| # | Type | Code |
|---|------|------|
| 1 | SET | `String keyElement;` |
| 2 | SET | `int separaterPoint = key.indexOf("//");` // Check if key is a common info specification |

**Block 4** — [IF] `separaterPoint == 0` (L5234) — Common Info Delegation

> The key starts with `//`, indicating it references a shared/common info view field. Delegates to parent class for type resolution.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return super.typeCommonInfoData(key);` |

**Block 5** — [ELSE-IF branch, implicit] Root-level key extraction (L5237–5245)

> For non-common-info keys, extracts the first segment (before the first `/`) as the keyElement.

| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = key.indexOf("/");` // Search for root path separator |
| 2 | IF | `separaterPoint > 0` (has path separator) |
| 2.1 | SET | `keyElement = key.substring(0, separaterPoint);` // Extract first segment |
| 3 | ELSE | |
| 3.1 | SET | `keyElement = key;` // No separator, entire key is the element |

**Block 6** — [IF-ELSE chain] Simple type field handlers

> Each branch checks `keyElement` against a known simple (scalar) field name. If matched, checks the `subkey` and returns the appropriate `Class<?>`.

**Block 6.1** — [IF] `keyElement.equals("機能コード")` — Function Code (L5249)

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

**Block 6.2** — [ELSE-IF] `keyElement.equals("画面モード")` — Screen Mode (L5257)

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

**Block 6.3** — [ELSE-IF] `keyElement.equals("初期費用計")` — Initial Charge Total (L5342)

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

**Block 6.4** — [ELSE-IF] `keyElement.equals("初期費用計（税抜）")` — Initial Charge Total Tax Excluded (L5352)

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

**Block 6.5** — [ELSE-IF] `keyElement.equals("モバイル月額料金計")` — Mobile Monthly Charge Total (L5362)

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

**Block 6.6** — [ELSE-IF] `keyElement.equals("モバイル初期費用計")` — Mobile Initial Charge Total (L5372)

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

**Block 6.7–6.18** — [ELSE-IF] Remaining simple type fields (all follow the same pattern)

The following keyElements are handled with the identical `value`/`state` subkey pattern returning `String.class`:

| Block | keyElement (Japanese) | Item ID |
|-------|----------------------|---------|
| 6.7 | `"月額料金文言"` | getsu_ryokin_mongon |
| 6.8 | `"初期費用文言"` | shoki_hiyo_mongon |
| 6.9 | `"モバイル月額料金文言"` | mobile_month_mongon |
| 6.10 | `"モバイル初期費用文言"` | mobile_init_mongon |
| 6.11 | `"月額料金合計"` | gtgk_prc_gokei |
| 6.12 | `"月額料金合計（税抜）"` | gtgk_prc_gokei_zei |
| 6.13 | `"初期費用合計"` | shkh_gokei |
| 6.14 | `"初期費用合計（税抜）"` | shkh_gokei_zei |
| 6.15 | `"月額料金合計文言"` | gtgk_prc_gokei_mongon |
| 6.16 | `"初期費用合計文言"` | shkh_gokei_mongon |
| 6.17 | `"契約種別"` | kei_sbt |
| 6.18 | `"ご契約者情報（個人）・性別"` | sex |
| 6.19 | `"ご本人様確認書類"` | hnin_cfm_aticle |
| 6.20 | `"ご利用場所設置位置・ご利用場所の形態"` | setplace_form |
| 6.21 | `"ご利用場所設置位置・お住まいの階数"` | setplace_flr |
| 6.22 | `"ご利用場所設置位置・住所番地"` | setplace_bnchi |
| 6.23 | `"ご利用場所設置位置・利用中の回線"` | use_net_ksn |
| 6.24 | `"ご利用場所設置位置・利用中の機器の設置場所変更予定"` | kiki_place_chg |
| 6.25 | `"ご利用場所設置位置・宅内調査と工事の同日実施"` | tkc_koji_same |
| 6.26 | `"連絡先選択"` | rrks_choice |
| 6.27 | `"FAX連絡ご希望"` | fax_kibo |
| 6.28 | `"同一利用者場所警告表示制御フラグ"` | dsp_same_use_place_kkoku_flg |
| 6.29 | `"郵便番号表示制御フラグ"` | dsp_pcd_flg |
| 6.30 | `"閉じるボタン表示制御フラグ"` | dsp_close_btn_flg |
| 6.31 | `"登録して次へボタン表示フラグ"` | dsp_add_btn_flg |
| 6.32 | `"次へボタン表示フラグ"` | dsp_next_btn_flg |
| 6.33 | `"電話料指定額到達通知指定金額"` | twryo_stiam_ttu_tchi_stiam |
| 6.34 | `"月額料金計（スマートフォン）"` | getsu_ryokin_kei_sml |
| 6.35 | `"月額料金計（スマートフォン）（税抜）"` | getsu_ryokin_kei_sml_zei |
| 6.36 | `"初期費用計（スマートフォン）"` | shoki_hiyo_kei_sml |
| 6.37 | `"初期費用計（スマートフォン）（税抜）"` | shoki_hiyo_kei_sml_zei |
| 6.38 | `"月額料金文言（スマートフォン）"` | getsu_ryokin_mongon_sml |
| 6.39 | `"初期費用文言（スマートフォン）"` | shoki_hiyo_mongon_sml |
| 6.40 | `"月額料金合計（スマートフォン）"` | gtgk_prc_gokei_sml |
| 6.41 | `"月額料金合計（スマートフォン）（税抜）"` | gtgk_prc_gokei_sml_zei |
| 6.42 | `"初期費用合計（スマートフォン）"` | shkh_gokei_sml |
| 6.43 | `"初期費用合計（スマートフォン）（税抜）"` | shkh_gokei_sml_zei |
| 6.44 | `"月額料金合計文言（スマートフォン）"` | gtgk_prc_gokei_mongon_sml |
| 6.45 | `"初期費用合計文言（スマートフォン）"` | shkh_gokei_mongon_sml |
| 6.46 | `"月額料金計（GH）"` | getsu_ryokin_kei_gh |
| 6.47 | `"月額料金計（GH）（税抜）"` | getsu_ryokin_kei_gh_zei |
| 6.48 | `"初期費用計（GH）"` | shoki_hiyo_kei_gh |
| 6.49 | `"初期費用計（GH）（税抜）"` | shoki_hiyo_kei_gh_zei |
| 6.50 | `"月額料金文言（GH）"` | getsu_ryokin_mongon_gh |
| 6.51 | `"初期費用文言（GH）"` | shoki_hiyo_mongon_gh |
| 6.52 | `"月額料金合計（GH）"` | gtgk_prc_gokei_gh |
| 6.53 | `"月額料金合計（GH）（税抜）"` | gtgk_prc_gokei_gh_zei |
| 6.54 | `"初期費用合計（GH）"` | shkh_gokei_gh |
| 6.55 | `"初期費用合計（GH）（税抜）"` | shkh_gokei_gh_zei |
| 6.56 | `"月額料金合計文言（GH）"` | gtgk_prc_gokei_mongon_gh |
| 6.57 | `"初期費用合計文言（GH）"` | shkh_gokei_mongon_gh |
| 6.58 | `"CX案件開始フラグ"` | cx_start_flg |
| 6.59 | `"宅内調査のアポ架電希望表示フラグ"` | takcho_apo_kaden_kibo_um_disp_flg |

All of the above blocks share this structure:
| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `return String.class;` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `return String.class;` |

**Block 7** — [ELSE-IF] `keyElement.equals("契約中サービスエリア表示フラグ")` — Boolean special case (L6401)

> This field is the only Boolean-typed field. `value` returns `Boolean.class`; `state` returns `String.class`.

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

**Block 8** — [ELSE-IF] `keyElement.equals("宅内調査のアポ架電希望")` — Triple subkey special case (L6414)

> This field supports three subkeys: `value` → `String.class`, `enable` → `Boolean.class`, `state` → `String.class`.

| # | 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 9** — [ELSE-IF] `keyElement.equals("項目コード")` — List type: Item Code (L5265)

> Variable-length list of item codes (項目コード). Extracts index from key, validates bounds, delegates to child bean.

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyElement = key.substring(separaterPoint + 1);` // Get portion after first / |
| 2 | IF | `keyElement.equals("*")` → `return Integer.class;` // Wildcard: return list size type |
| 3 | TRY | `tmpIndexInt = Integer.valueOf(keyElement);` // Parse index |
| 4 | CATCH | `NumberFormatException` → `return null;` // Non-numeric index |
| 5 | IF | `tmpIndexInt == null` → `return null;` |
| 6 | SET | `int tmpIndex = tmpIndexInt.intValue();` |
| 7 | IF | `tmpIndex < 0 || tmpIndex >= koumoku_code_list.size()` → `return null;` // Bounds check |
| 8 | CALL | `return ((X33VDataTypeStringBean)koumoku_code_list.get(tmpIndex)).typeModelData(subkey);` |

**Block 10** — [ELSE-IF] `keyElement.equals("値")` — List type: Item Value (L5298)

> Same structure as Block 9, delegates to `koumoku_value_list`.

| # | Type | Code |
|---|------|------|
| 1–7 | Same as Block 9 pattern | |
| 8 | CALL | `return ((X33VDataTypeStringBean)koumoku_value_list.get(tmpIndex)).typeModelData(subkey);` |

**Block 11** — [ELSE-IF] `keyElement.equals("月額料金項目")` — List type: Monthly Charge Items (L5331)

> Same structure, delegates to `getsu_ryokin_kmk_list`.

| # | Type | Code |
|---|------|------|
| 8 | CALL | `return ((X33VDataTypeStringBean)getsu_ryokin_kmk_list.get(tmpIndex)).typeModelData(subkey);` |

**Block 12** — [ELSE-IF] `keyElement.equals("月額料金")` — List type: Monthly Charge (L5364)

> Same structure, delegates to `getsu_ryokin_list`.

| # | Type | Code |
|---|------|------|
| 8 | CALL | `return ((X33VDataTypeStringBean)getsu_ryokin_list.get(tmpIndex)).typeModelData(subkey);` |

**Block 13** — [ELSE-IF] `keyElement.equals("初期費用項目")` — List type: Initial Charge Items (L5397)

> Same structure, delegates to `shoki_hiyo_kmk_list`.

| # | Type | Code |
|---|------|------|
| 8 | CALL | `return ((X33VDataTypeStringBean)shoki_hiyo_kmk_list.get(tmpIndex)).typeModelData(subkey);` |

**Block 14** — [ELSE-IF] `keyElement.equals("初期費用")` — List type: Initial Charge (L5430)

> Same structure, delegates to `shoki_hiyo_list`.

| # | Type | Code |
|---|------|------|
| 8 | CALL | `return ((X33VDataTypeStringBean)shoki_hiyo_list.get(tmpIndex)).typeModelData(subkey);` |

**Block 15** — [ELSE-IF] `keyElement.equals("月額料金計")` — List type: Monthly Charge Total (L5463)

> Same structure, delegates to `getsu_ryokin_kei_list`.

| # | Type | Code |
|---|------|------|
| 8 | CALL | `return ((X33VDataTypeStringBean)getsu_ryokin_kei_list.get(tmpIndex)).typeModelData(subkey);` |

**Block 16** — [ELSE-IF] `keyElement.equals("月額料金計（税抜）")` — List type: Monthly Charge Total Tax Excluded (L5496)

> Same structure, delegates to `getsu_ryokin_kei_zei_list`.

| # | Type | Code |
|---|------|------|
| 8 | CALL | `return ((X33VDataTypeStringBean)getsu_ryokin_kei_zei_list.get(tmpIndex)).typeModelData(subkey);` |

**Block 17–20** — [ELSE-IF] Smart Phone (スマートフォン) list-type fields

| Block | keyElement | List Field |
|-------|-----------|------------|
| 17 | `"月額料金項目（スマートフォン）"` | `getsu_ryokin_kmk_sml_list` |
| 18 | `"月額料金（スマートフォン）"` | `getsu_ryokin_sml_list` |
| 19 | `"初期費用項目（スマートフォン）"` | `shoki_hiyo_kmk_sml_list` |
| 20 | `"初期費用（スマートフォン）"` | `shoki_hiyo_sml_list` |

Each follows the identical Block 9 structure, delegating to the respective list.

**Block 21** — [ELSE-IF] `keyElement.equals("月額料金割引文言適用期間")` — List type: Discount Text Application Period (L6213)

> Same structure, delegates to `gtgk_wrib_mngn_tk_kikan_list`.

| # | Type | Code |
|---|------|------|
| 8 | CALL | `return ((X33VDataTypeStringBean)gtgk_wrib_mngn_tk_kikan_list.get(tmpIndex)).typeModelData(subkey);` |

**Block 22** — [ELSE-IF] `keyElement.equals("月額料金割引文言割引名")` — List type: Discount Text Discount Name (L6247)

> Same structure, delegates to `gtgk_wrib_mngn_wrib_nm_list`.

| # | Type | Code |
|---|------|------|
| 8 | CALL | `return ((X33VDataTypeStringBean)gtgk_wrib_mngn_wrib_nm_list.get(tmpIndex)).typeModelData(subkey);` |

**Block 23** — [ELSE-IF] `keyElement.equals("月額料金割引文言割引額")` — List type: Discount Text Discount Amount (L6281)

> Same structure, delegates to `gtgk_wrib_mngn_wrib_amnt_list`.

| # | Type | Code |
|---|------|------|
| 8 | CALL | `return ((X33VDataTypeStringBean)gtgk_wrib_mngn_wrib_amnt_list.get(tmpIndex)).typeModelData(subkey);` |

**Block 24** — [ELSE-IF] `keyElement.equals("月額料金割引文言備考")` — List type: Discount Text Notes (L6315)

> Same structure, delegates to `gtgk_wrib_mngn_biko_list`.

| # | Type | Code |
|---|------|------|
| 8 | CALL | `return ((X33VDataTypeStringBean)gtgk_wrib_mngn_biko_list.get(tmpIndex)).typeModelData(subkey);` |

**Block 25** — [ELSE-IF] `keyElement.equals("月額料金表示項目")` — List type: Monthly Charge Display Items (L6349)

> Same structure, delegates to `getsu_ryokin_kei_title_list`.

| # | Type | Code |
|---|------|------|
| 8 | CALL | `return ((X33VDataTypeStringBean)getsu_ryokin_kei_title_list.get(tmpIndex)).typeModelData(subkey);` |

**Block 26–29** — [ELSE-IF] GH variant list-type fields

| Block | keyElement | List Field |
|-------|-----------|------------|
| 26 | `"月額料金項目（GH）"` | `getsu_ryokin_kmk_gh_list` |
| 27 | `"月額料金（GH）"` | `getsu_ryokin_gh_list` |
| 28 | `"初期費用項目（GH）"` | `shoki_hiyo_kmk_gh_list` |
| 29 | `"初期費用（GH）"` | `shoki_hiyo_gh_list` |

Each follows the identical Block 9 structure, delegating to the respective list.

**Block 30** — [DEFAULT] No match (L6420)

> No keyElement matched any of the 46+ registered field types. Returns null.

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

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `key` | Parameter | Field identifier — hierarchical path specifying which UI field to resolve. Format: `FieldName[/Index][/Subkey]` |
| `subkey` | Parameter | Sub-field specifier within a key element. Typically `"value"` (data type), `"state"` (UI state type), or `"enable"` (enabled type) |
| `keyElement` | Variable | First segment of the key path before the first `/` — identifies the field category |
| `separaterPoint` | Variable | Index of the first path separator character in the key string |
| FTTH | Business term | Fiber To The Home — fiber-optic broadband internet service; this screen handles FTTH contract data entry |
| 機能コード (fnc_mode) | Field | Function Code — identifies the screen function being displayed |
| 画面モード (screen_mode) | Field | Screen Mode — indicates the current screen display mode |
| 項目コード (koumoku_code) | Field | Item Code — list-type field containing configurable item identifiers for the contract |
| 値 (koumoku_value) | Field | Value — list-type field containing the actual values for each item |
| 月額料金 (getsu_ryokin) | Field | Monthly Charge — list-type field with recurring monthly service charges |
| 月額料金項目 (getsu_ryokin_kmk) | Field | Monthly Charge Items — list-type field listing the individual charge items |
| 月額料金計 (getsu_ryokin_kei) | Field | Monthly Charge Total — scalar field for the total monthly charge amount |
| 月額料金計（税抜）(getsu_ryokin_kei_zei) | Field | Monthly Charge Total (Tax Excluded) — total with consumption tax removed |
| 月額料金合計 (gtgk_prc_gokei) | Field | Monthly Charge Grand Total — aggregated total across all charge components |
| 月額料金合計（税抜）(gtgk_prc_gokei_zei) | Field | Monthly Charge Grand Total (Tax Excluded) — grand total with consumption tax removed |
| 月額料金文言 (getsu_ryokin_mongon) | Field | Monthly Charge Description Text — localized/display label for monthly charge |
| 月額料金割引文言 (gtgk_wrib_mngn) | Field | Monthly Charge Discount Text — labels and descriptions for discount promotions |
| 月額料金割引文言適用期間 (gtgk_wrib_mngn_tk_kikan) | Field | Monthly Charge Discount Text Application Period — list of valid periods for discounts |
| 月額料金割引文言割引名 (gtgk_wrib_mngn_wrib_nm) | Field | Monthly Charge Discount Text Discount Name — list of discount names |
| 月額料金割引文言割引額 (gtgk_wrib_mngn_wrib_amnt) | Field | Monthly Charge Discount Text Discount Amount — list of discount amounts |
| 月額料金割引文言備考 (gtgk_wrib_mngn_biko) | Field | Monthly Charge Discount Text Notes — list of discount-related notes |
| 月額料金表示項目 (getsu_ryokin_kei_title) | Field | Monthly Charge Display Items — list of items to display in the charge summary |
| 初期費用 (shoki_hiyo) | Field | Initial Charge — list-type field with one-time setup/initial charges |
| 初期費用項目 (shoki_hiyo_kmk) | Field | Initial Charge Items — list-type field listing individual initial charge items |
| 初期費用計 (shoki_hiyo_kei) | Field | Initial Charge Total — scalar field for total initial charge |
| 初期費用計（税抜）(shoki_hiyo_kei_zei) | Field | Initial Charge Total (Tax Excluded) — initial charge total with consumption tax removed |
| 初期費用合計 (shkh_gokei) | Field | Initial Charge Grand Total — aggregated total across all initial charge components |
| 初期費用合計（税抜）(shkh_gokei_zei) | Field | Initial Charge Grand Total (Tax Excluded) — grand total with consumption tax removed |
| 初期費用文言 (shoki_hiyo_mongon) | Field | Initial Charge Description Text — localized/display label for initial charges |
| モバイル月額料金計 (mobile_month) | Field | Mobile Monthly Charge Total — total for mobile service charges |
| モバイル初期費用計 (mobile_init) | Field | Mobile Initial Charge Total — total for mobile initial/setup charges |
| モバイル月額料金文言 (mobile_month_mongon) | Field | Mobile Monthly Charge Description Text — label for mobile monthly charges |
| モバイル初期費用文言 (mobile_init_mongon) | Field | Mobile Initial Charge Description Text — label for mobile initial charges |
| （スマートフォン）(sml) | Variant | Smart Phone variant — fields specific to smartphone service plans, as opposed to standard plans |
| （GH）(gh) | Variant | GH variant — fields specific to a particular service tier or contract category (GH) |
| 税抜 (zei) | Variant | Tax Excluded — suffix indicating the amount excludes consumption tax |
| 契約中サービスエリア表示フラグ (kei_svc_area_dsp_flg) | Field | Active Service Area Display Flag — Boolean flag controlling display of service areas during active contract |
| 契約種別 (kei_sbt) | Field | Contract Type — classifies the type of service contract |
| ご契約者情報（個人）・性別 (sex) | Field | Subscriber Info (Individual) · Gender — personal data field for individual subscriber's gender |
| ご本人様確認書類 (hnin_cfm_aticle) | Field | Identity Verification Documents — required ID documents for contract verification |
| ご利用場所設置位置 (setplace) | Field | Installation Location — address/location where the FTTH service is installed |
| ご利用場所の形態 (setplace_form) | Field | Premises Type — classification of the installation premises (apartment, house, etc.) |
| お住まいの階数 (setplace_flr) | Field | Floor Number — which floor the installation is located on |
| 住所番地 (setplace_bnchi) | Field | Address Number — specific address number for the installation location |
| 利用中の回線 (use_net_ksn) | Field | Current Line — the existing line being used at the installation location |
| 機器の設置場所変更予定 (kiki_place_chg) | Field | Equipment Relocation Plan — whether the equipment installation location is planned to change |
| 宅内調査と工事の同日実施 (tkc_koji_same) | Field | Same-Day Survey and Work — flag for whether home survey and installation work are performed on the same day |
| 連絡先選択 (rrks_choice) | Field | Contact Selection — how the customer should be contacted |
| FAX連絡ご希望 (fax_kibo) | Field | Fax Contact Request — whether the customer requests fax communication |
| 同一利用者場所警告表示制御フラグ (dsp_same_use_place_kkoku_flg) | Field | Same Location Warning Display Control Flag — controls warning display for same location as another user |
| 郵便番号表示制御フラグ (dsp_pcd_flg) | Field | Postal Code Display Control Flag — controls postal code field display |
| 閉じるボタン表示制御フラグ (dsp_close_btn_flg) | Field | Close Button Display Control Flag — controls close button visibility |
| 登録して次へボタン表示フラグ (dsp_add_btn_flg) | Field | Register and Next Button Display Flag — controls display of the register-and-proceed button |
| 次へボタン表示フラグ (dsp_next_btn_flg) | Field | Next Button Display Flag — controls display of the next button |
| 電話料指定額到達通知指定金額 (twryo_stiam_ttu_tchi_stiam) | Field | Phone Charge Notification Amount — threshold amount for phone charge usage notifications |
| CX案件開始フラグ (cx_start_flg) | Field | CX Project Start Flag — flag indicating a customer experience project has started |
| 宅内調査のアポ架電希望表示フラグ (takcho_apo_kaden_kibo_um_disp_flg) | Field | Home Survey Appointment Call Request Display Flag — controls display of appointment call request |
| 宅内調査のアポ架電希望 (takcho_apo_kaden_kibo_um_screen) | Field | Home Survey Appointment Call Request — customer's preference for appointment call before home survey |
| 共有情報 (kyoyou jouhou) | Concept | Shared Information — system-level data (customer info, operator details) not specific to the FTTH screen, accessed via `//` prefix in key |
| X33VDataTypeList | Type | Variable-length list container holding `X33VDataTypeStringBean` elements — used for repeatable/radio-button fields |
| X33VDataTypeStringBean | Type | A single element within an `X33VDataTypeList`, with its own `typeModelData(subkey)` method for nested type resolution |
| typeCommonInfoData | Method | Parent class method that resolves types for common/shared information fields (delegated when key starts with `//`) |

---