# Business Logic — KKW00816SFBean.typeModelData() [513 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKW00816SF.KKW00816SFBean` |
| Layer | Service Component / Web View Bean (Web Layer — part of the Fujitsu Futurity X33 web framework) |
| Module | `KKW00816SF` (Package: `eo.web.webview.KKW00816SF`) |

## 1. Role

### KKW00816SFBean.typeModelData()

This method is a **type-dispatch routing utility** that resolves the Java class type (`Class<?>`) for any given form field identified by a composite `key` string and an optional `subkey` property specifier. It serves as the central type-resolution mechanism for the KKW00816SF web screen, enabling the X33 framework's data-binding and rendering engine to determine the correct Java type for every field rendered on the service-contract management page. It implements a **routing/dispatch design pattern**: given a key, it identifies the data type category (common-info, list-nested, or simple scalar) and dispatches to the appropriate resolution path. When the key references a nested list field — such as the customer contract succession list (`顧客契約引継リスト`) or the option service contract list (`オプションサービス契約リスト`) — it recursively delegates to the child bean's `typeModelData` method, enabling hierarchical type resolution for multi-level data structures. It also delegates common-info (shared) view fields to the parent class's `typeCommonInfoData` method. The method handles approximately **25 distinct field categories**, each with its own type mapping for the `value`, `state`, or `enable` sub-key, all within a single large conditional chain.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["typeModelData key, subkey"])
    CHECK_NULL_KEY["key == null?"]
    RETURN_NULL_1["return null"]
    CHECK_NULL_SUBKEY["subkey == null?"]
    SET_EMPTY_SUBKEY["subkey = \"\""]
    CHECK_COMMON_INFO["key starts with // (common info view)?"]
    CALL_COMMON_INFO["super.typeCommonInfoData(key)"]
    FIND_ROOT_SLASH["Find first / in key"]
    CHECK_ROOT_SLASH["separaterPoint > 0?"]
    SET_KEY_ELEMENT["keyElement = key.substring(0, separaterPoint)"]
    UNSET_KEY_ELEMENT["keyElement = key"]
    CHECK_KEY_CUSTOMER["keyElement == 顧客契約引継リスト?"]
    CHECK_KEY_OPTION["keyElement == オプションサービス契約リスト?"]
    CHECK_KEY_FIELDS["keyElement matches a simple field?"]
    DEFAULT_RETURN["return null"]

    START --> CHECK_NULL_KEY
    CHECK_NULL_KEY -->|true| RETURN_NULL_1
    CHECK_NULL_KEY -->|false| CHECK_NULL_SUBKEY
    CHECK_NULL_SUBKEY -->|true| SET_EMPTY_SUBKEY
    SET_EMPTY_SUBKEY --> CHECK_COMMON_INFO
    CHECK_NULL_SUBKEY -->|false| CHECK_COMMON_INFO
    CHECK_COMMON_INFO -->|true| CALL_COMMON_INFO
    CALL_COMMON_INFO --> END_RETURN(["Return Class"])
    CHECK_COMMON_INFO -->|false| FIND_ROOT_SLASH
    FIND_ROOT_SLASH --> CHECK_ROOT_SLASH
    CHECK_ROOT_SLASH -->|true| SET_KEY_ELEMENT
    CHECK_ROOT_SLASH -->|false| UNSET_KEY_ELEMENT
    SET_KEY_ELEMENT --> CHECK_KEY_CUSTOMER
    UNSET_KEY_ELEMENT --> CHECK_KEY_CUSTOMER
    CHECK_KEY_CUSTOMER -->|true| RETURN_CUST_LIST
    CHECK_KEY_CUSTOMER -->|false| CHECK_KEY_OPTION
    RETURN_CUST_LIST["Parse index, delegate to child bean.typeModelData"] --> END_RETURN
    CHECK_KEY_OPTION -->|true| RETURN_OPT_LIST
    CHECK_KEY_OPTION -->|false| CHECK_KEY_FIELDS
    RETURN_OPT_LIST["Parse index, delegate to child bean.typeModelData"] --> END_RETURN
    CHECK_KEY_FIELDS -->|true| RETURN_SIMPLE["Return type by subkey (value/state/enable)"]
    RETURN_SIMPLE --> END_RETURN
    CHECK_KEY_FIELDS -->|false| DEFAULT_RETURN
    DEFAULT_RETURN --> END_RETURN
    RETURN_NULL_1 --> END_RETURN
```

The processing flow can be summarized as:

1. **Null guard** — If `key` is null, immediately return null.
2. **Subkey normalization** — If `subkey` is null, normalize it to an empty string.
3. **Common-info view check** — If the key starts with `//`, delegate to `super.typeCommonInfoData(key)` and return that result. This handles shared view components (e.g., information display panes shared across screens).
4. **Root element extraction** — Search for the first `/` separator. If found, extract the root field name as the portion before the first `/`. Otherwise, use the entire key as the root element name.
5. **Field-type routing** — Match the root element name against ~25 field categories in an if-else chain:
   - **Customer contract succession list** (`顧客契約引継リスト`) — Extract index from the key path, validate it against `cust_kei_hktgi_list_list.size()`, then recursively call `typeModelData` on the child bean at that index.
   - **Option service contract list** (`オプションサービス契約リスト`) — Same pattern as customer list, using `op_svc_kei_list_list`.
   - **Simple fields** (~23 fields) — For each, return `String.class` for `value` or `state` subkeys, and `Boolean.class` for `enable` subkeys (only on fields that have an enabled/disabled state).
6. **Fallback** — If no field category matches, return null.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | A hierarchical field identifier that maps to a specific form field or nested list element. Can take several forms: (a) a simple field name (e.g., "申請種別コード" / Application Type Code), (b) a slash-separated path for nested lists (e.g., "顧客契約引継リスト/0/プランリスト" / Customer Contract Succession List, index 0, then Plan List), (c) a common-info view key starting with `//` (e.g., "//共有情報" / Shared Information), or (d) a wildcard with "*" to query the list element count type. The key drives the entire routing logic. |
| 2 | `subkey` | `String` | A sub-field property specifier that narrows which aspect of the field's type is being queried. Typical values: "value" for the data value type, "state" for the UI state/binding status type, "enable" for the enabled/disabled state type. "*" is used as a subkey when the caller wants the type for the number of elements in a list (returns `Integer.class`). |

**Instance fields read by this method:**

| Field Name | Type | Business Description |
|-----------|------|---------------------|
| `cust_kei_hktgi_list_list` | `X33VDataTypeList` | Customer contract succession list — the list of customer contract line items rendered on the screen. Used for nested type resolution of the "顧客契約引継リスト" field path. |
| `op_svc_kei_list_list` | `X33VDataTypeList` | Option service contract list — the list of option services attached to the contract. Used for nested type resolution of the "オプションサービス契約リスト" field path. |

## 4. CRUD Operations / Called Services

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

This method does **not** perform any database or CBS operations. It is a pure type-dispatch (getter) method. The table below lists the method calls it makes and their classifications:

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `JKKAdEdit.substring` | JKKAdEdit | - | Calls `substring` in `JKKAdEdit` — string utility for extracting substrings from key. |
| - | `JKKAdEdit.substring` | JKKAdEdit | - | Calls `substring` in `JKKAdEdit` — string utility for extracting substrings from key. |
| - | `JKKTelnoInfoAddMapperCC.substring` | JKKTelnoInfoAddMapperCC | - | Calls `substring` in `JKKTelnoInfoAddMapperCC` — string utility for extracting substrings from key. |
| - | `JDKejbStringEdit.substring` | JDKejbStringEdit | - | Calls `substring` in `JDKejbStringEdit` — string utility for extracting substrings from key. |
| - | `KKW00816SFBean.typeModelData` | KKW00816SFBean | - | Calls `typeModelData` in `KKW00816SFBean` — recursive delegation to child bean for nested list fields. |
| - | `KKW00816SFBean.typeModelData` | KKW00816SFBean | - | Calls `typeModelData` in `KKW00816SFBean` — recursive delegation to child bean for nested list fields. |
| - | `X33VViewBaseBean.typeCommonInfoData` | X33VViewBaseBean | - | Calls `super.typeCommonInfoData(key)` — delegates to parent class for common-info view field type resolution. |
| - | `java.lang.String.indexOf` | JDK | - | Calls `String.indexOf("/")` and `String.indexOf("//")` — finds separator positions in the key string. |
| - | `java.lang.String.substring` | JDK | - | Calls `String.substring()` — extracts field names and path segments from the key. |
| - | `java.lang.Integer.valueOf` | JDK | - | Calls `Integer.valueOf(String)` — parses index values from the key path for nested list access. |

**Note:** No database or CBS calls are made. This method is purely a type-resolution utility with no side effects.

## 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` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `typeModelData` [-], `typeModelData` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-]

This method is called within its own class (`KKW00816SFBean`), indicating that the X33 framework invokes it during the type-resolution phase of screen rendering, and the method also calls itself recursively for nested list child beans.

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Internal — X33VViewBaseBean framework | `X33VViewBaseBean` framework -> `KKW00816SFBean.typeModelData(key, subkey)` | `typeModelData` (recursive, R) — nested bean delegation |
| 2 | Internal — self-recursion | `KKW00816SFBean.typeModelData` -> `cust_kei_hktgi_list_list.get(i).typeModelData(elem, sub)` | `typeModelData` (recursive, R) — customer list child bean |
| 3 | Internal — self-recursion | `KKW00816SFBean.typeModelData` -> `op_svc_kei_list_list.get(i).typeModelData(elem, sub)` | `typeModelData` (recursive, R) — option service list child bean |
| 4 | Internal — parent delegation | `KKW00816SFBean.typeModelData` -> `super.typeCommonInfoData(key)` | `typeCommonInfoData` (delegation, R) — common-info view type resolution |

## 6. Per-Branch Detail Blocks

**Block 1** — IF `(key == null)` (L2492)

> Guard clause: if no key is provided, return null immediately. No processing occurs.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` // key is null, cannot resolve type |

**Block 2** — ELSE-IF `(subkey == null)` (L2497)

> Normalize subkey to an empty string if null. This ensures subsequent comparisons with subkey values ("value", "state", "enable") are safe.

| # | Type | Code |
|---|------|------|
| 1 | SET | `subkey = new String("");` // Normalize null subkey to empty string (null の場合、空文字列に) |

**Block 3** — BLOCK (common-info view check) (L2503)

> Check if the key starts with "//" which indicates a shared-info (common) view field. If so, delegate to the parent class's `typeCommonInfoData` method.

| # | Type | Code |
|---|------|------|
| 1 | SET | `String keyElement;` // Local variable declaration (ローカル変数宣言) |
| 2 | SET | `int separaterPoint = key.indexOf("//");` // Check if key is for common-info view (共有情報ビューかチェック) |
| 3 | IF | `if (separaterPoint == 0)` // Key starts with "//" (key が // で始まる) |
| 3.1 | CALL | `return super.typeCommonInfoData(key);` // Delegate to parent class for common-info type resolution |

**Block 4** — BLOCK (root element extraction) (L2508)

> Find the first "/" in key to extract the root field name. If no "/" exists, the entire key is the field name.

| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = key.indexOf("/");` // Search for first separator / (最初の区切り文字「/」を検索) |
| 2 | IF | `if (separaterPoint > 0)` // "/" found — hierarchical path (ルート指定がある) |
| 2.1 | SET | `keyElement = key.substring(0, separaterPoint);` // Extract root field name (key の最初の要素を取得) |
| 3 | ELSE | `else` // No "/" — flat key (スラッシュなしで平坦なキー) |
| 3.1 | SET | `keyElement = key;` // Use entire key as root element (key 全体を要素名として使用) |

**Block 5** — ELSE-IF `(keyElement.equals("顧客契約引継リスト"))` (L2515)

> Data-type view field: Customer Contract Succession List (`cust_kei_hktgi_list`). Handles nested list type resolution: checks for "*" wildcard (returns Integer.class for element count), extracts the index, validates bounds, and delegates to the child bean at that index.

| # | Type | Code |
|---|------|------|
| 1 | SET | `String keyRemain = key.substring(separaterPoint + 1);` // Extract portion after first "/" (最初の "/" より後を取得) |
| 2 | IF | `if (keyRemain.equals("*"))` // Wildcard: return list element count type |
| 2.1 | RETURN | `return Integer.class;` // List element count is Integer |
| 3 | SET | `separaterPoint = keyRemain.indexOf("/");` // Find next separator |
| 4 | IF | `if (separaterPoint <= 0)` // No separator found or invalid |
| 4.1 | RETURN | `return null;` // Invalid format (区切り文字が見つからない) |
| 5 | SET | `keyElement = keyRemain.substring(0, separaterPoint);` // Extract index portion |
| 6 | SET | `Integer tmpIndexInt = null;` // Initialize index variable |
| 7 | TRY | `tmpIndexInt = Integer.valueOf(keyElement);` // Parse index (インデックス値をパース) |
| 7.1 | CATCH | `catch (NumberFormatException e) { return null; }` // Not a valid integer |
| 8 | IF | `if (tmpIndexInt == null)` // Index parsing failed |
| 8.1 | RETURN | `return null;` |
| 9 | SET | `int tmpIndex = tmpIndexInt.intValue();` |
| 10 | IF | `if (tmpIndex < 0 \|\| tmpIndex >= cust_kei_hktgi_list_list.size())` // Index out of bounds |
| 10.1 | RETURN | `return null;` // Index exceeds list size (インデックス値がリスト個数-1 を超える) |
| 11 | SET | `keyElement = keyRemain.substring(separaterPoint + 1);` // Extract field name within the list item |
| 12 | CALL | `return ((X33VDataTypeBeanInterface)cust_kei_hktgi_list_list.get(tmpIndex)).typeModelData(keyElement, subkey);` // Delegate to child bean (子ビーンに委譲) |

**Block 6** — ELSE-IF `(keyElement.equals("オプションサービス契約リスト"))` (L2546)

> Data-type view field: Option Service Contract List (`op_svc_kei_list`). Same nested list resolution pattern as Block 5, but uses `op_svc_kei_list_list`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `String keyRemain = key.substring(separaterPoint + 1);` // Extract portion after first "/" |
| 2 | IF | `if (keyRemain.equals("*"))` |
| 2.1 | RETURN | `return Integer.class;` |
| 3 | SET | `separaterPoint = keyRemain.indexOf("/");` |
| 4 | IF | `if (separaterPoint <= 0)` |
| 4.1 | RETURN | `return null;` |
| 5 | SET | `keyElement = keyRemain.substring(0, separaterPoint);` // Extract index |
| 6 | SET | `Integer tmpIndexInt = null;` |
| 7 | TRY | `tmpIndexInt = Integer.valueOf(keyElement);` |
| 7.1 | CATCH | `catch (NumberFormatException e) { return null; }` |
| 8 | IF | `if (tmpIndexInt == null)` |
| 8.1 | RETURN | `return null;` |
| 9 | SET | `int tmpIndex = tmpIndexInt.intValue();` |
| 10 | IF | `if (tmpIndex < 0 \|\| tmpIndex >= op_svc_kei_list_list.size())` // Index out of bounds |
| 10.1 | RETURN | `return null;` |
| 11 | SET | `keyElement = keyRemain.substring(separaterPoint + 1);` |
| 12 | CALL | `return ((X33VDataTypeBeanInterface)op_svc_kei_list_list.get(tmpIndex)).typeModelData(keyElement, subkey);` // Delegate to option service child bean |

**Block 7** — ELSE-IF `(keyElement.equals("申請種別コード"))` (L2578)

> Simple field: Application Type Code (`mskm_sbt_cd`). Returns `String.class` for "value" and "state" subkeys.

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

**Block 8** — ELSE-IF `(keyElement.equals("オプションサービスコード"))` (L2585)

> Simple field: Option Service Code (`op_svc_cd`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 9** — ELSE-IF `(keyElement.equals("親契約識別コード"))` (L2592)

> Simple field: Parent Contract Identifier Code (`oya_kei_skbt_cd`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 10** — ELSE-IF `(keyElement.equals("業務パラメータID（セッション上限数）"))` (L2599)

> Simple field: Work Parameter ID (Session Upper Limit Count) (`work_param_id_session_uppl`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 11** — ELSE-IF `(keyElement.equals("業務パラメータ設定値（セッション上限数）"))` (L2606)

> Simple field: Work Parameter Setting Value (Session Upper Limit Count) (`work_param_sette_value_rsv_uppl_prd`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 12** — ELSE-IF `(keyElement.equals("業務パラメータID（予約上限日数）"))` (L2613)

> Simple field: Work Parameter ID (Reservation Upper Limit Days) (`work_param_id_rsv_uppl_prd`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 13** — ELSE-IF `(keyElement.equals("業務パラメータ設定値（予約上限日数）"))` (L2620)

> Simple field: Work Parameter Setting Value (Reservation Upper Limit Days) (`work_param_sette_rsv_uppl_prd`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 14** — ELSE-IF `(keyElement.equals("事務手数料自動適用要否"))` (L2627)

> Simple field: Auto-Apply Task Fee Flag (`rule0059_auto_aply`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 15** — ELSE-IF `(keyElement.equals("料金コースコード"))` (L2634)

> Simple field: Fee Course Code (`pcrs_cd`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 16** — ELSE-IF `(keyElement.equals("料金プランコード"))` (L2641)

> Simple field: Fee Plan Code (`pplan_cd`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 17** — ELSE-IF `(keyElement.equals("料金プラン固定単価番号"))` (L2648)

> Simple field: Fee Plan Fixed Unit Price Number (`pplan_kotei_tanka_no`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 18** — ELSE-IF `(keyElement.equals("初期マルチセッション認証IDパスワード"))` (L2655)

> Simple field: Initial Multi-Session Authentication ID Password (`shk_mltise_ninsho_id_pwd`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 19** — ELSE-IF `(keyElement.equals("マルチセッション認証ID"))` (L2662)

> Simple field: Multi-Session Authentication ID (`mltise_ninsho_id`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 20** — ELSE-IF `(keyElement.equals("セッション数"))` (L2669)

> Simple field: Session Count (`session_cnt`). Returns `Long.class` for "value", `Boolean.class` for "enable", and `String.class` for "state". This is one of the few fields that supports the `enable` subkey.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` // Long に変換してから返す |
| 1.1 | RETURN | `return Long.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` |
| 2.1 | RETURN | `return Boolean.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // subkey が "state" の場合、ステータスを返す |
| 3.1 | RETURN | `return String.class;` |

**Block 21** — ELSE-IF `(keyElement.equals("利用開始日（年）"))` (L2676)

> Simple field: Utilization Start Date (Year) (`use_staymd_year`). Returns `String.class` for "value", `Boolean.class` for "enable", `String.class` for "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` |
| 2.1 | RETURN | `return Boolean.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 3.1 | RETURN | `return String.class;` |

**Block 22** — ELSE-IF `(keyElement.equals("利用開始日（月）"))` (L2683)

> Simple field: Utilization Start Date (Month) (`use_staymd_mon`). Returns `String.class` for "value", `Boolean.class` for "enable", `String.class` for "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` |
| 2.1 | RETURN | `return Boolean.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 3.1 | RETURN | `return String.class;` |

**Block 23** — ELSE-IF `(keyElement.equals("利用開始日（日）"))` (L2690)

> Simple field: Utilization Start Date (Day) (`use_staymd_day`). Returns `String.class` for "value", `Boolean.class` for "enable", `String.class` for "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("enable"))` |
| 2.1 | RETURN | `return Boolean.class;` |
| 3 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 3.1 | RETURN | `return String.class;` |

**Block 24** — ELSE-IF `(keyElement.equals("利用開始日"))` (L2697)

> Simple field: Utilization Start Date (full date, non-extended) (`use_staymd`). Returns `String.class` for "value" and "state" only — no "enable" variant.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 25** — ELSE-IF `(keyElement.equals("サービス課金開始年月日"))` (L2704)

> Simple field: Service Charge Start Date (`svc_chrg_staymd`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 26** — ELSE-IF `(keyElement.equals("運用年月日"))` (L2711)

> Simple field: Operation Date (`unyo_ymd`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 27** — ELSE-IF `(keyElement.equals("運用年月日時分秒"))` (L2718)

> Simple field: Operation Date-Time (`unyo_dtm`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 28** — ELSE-IF `(keyElement.equals("実施オプションサービス契約ステータス"))` (L2725)

> Simple field: Implemented Option Service Contract Status (`jssi_op_svc_kei_stat`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 29** — ELSE-IF `(keyElement.equals("サービス契約ステータス"))` (L2732)

> Simple field: Service Contract Status (`svc_kei_stat`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 30** — ELSE-IF `(keyElement.equals("お客様ステータス"))` (L2739)

> Simple field: Customer Status (`cust_stat`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 31** — ELSE-IF `(keyElement.equals("請求契約番号"))` (L2746)

> Simple field: Billing Contract Number (`seiky_kei_no`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 32** — ELSE-IF `(keyElement.equals("進捗ステータス"))` (L2753)

> Simple field: Progress Status (`prg_stat`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 33** — ELSE-IF `(keyElement.equals("進捗特記事項1"))` (L2760)

> Simple field: Progress Remark 1 (`prg_tkjk_1`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 34** — ELSE-IF `(keyElement.equals("オーダ種別コード"))` (L2767)

> Simple field: Order Type Code (`order_sbt_cd`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 35** — ELSE-IF `(keyElement.equals("サービスオーダコード"))` (L2774)

> Simple field: Service Order Code (`svc_order_cd`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 36** — ELSE-IF `(keyElement.equals("要求種別コード"))` (L2781)

> Simple field: Request Type Code (`yokyu_sbt_cd`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 37** — ELSE-IF `(keyElement.equals("オーダ発行条件コード"))` (L2788)

> Simple field: Order Issuance Condition Code (`odr_hakko_joken_cd`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 38** — ELSE-IF `(keyElement.equals("オーダ内容コード"))` (L2795)

> Simple field: Order Content Code (`odr_naiyo_cd`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 39** — ELSE-IF `(keyElement.equals("オプションS/O登録実施"))` (L2802)

> Simple field: Option S/O (Service/Order) Registration Implementation (`op_sod_add_jssi`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 40** — ELSE-IF `(keyElement.equals("世代管理年月日時分秒（サービス契約）"))` (L2809)

> Simple field: Generation Management Date-Time (Service Contract) (`kk0081_gene_add_dtm`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 41** — ELSE-IF `(keyElement.equals("サービス契約内訳番号"))` (L2816)

> Simple field: Service Contract Detail Number (`svc_kei_ucwk_no`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 42** — ELSE-IF `(keyElement.equals("世代管理年月日時分秒（サービス契約内訳）"))` (L2823)

> Simple field: Generation Management Date-Time (Service Contract Detail) (`kk0161_gene_add_dtm`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 43** — ELSE-IF `(keyElement.equals("最終更新年月日時分秒"))` (L2830)

> Simple field: Last Updated Date-Time (`last_upd_dtm`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 44** — ELSE-IF `(keyElement.equals("異動年月日時分秒"))` (L2837)

> Simple field: Movement (Audit) Date-Time (`ido_dtm`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 45** — ELSE-IF `(keyElement.equals("サブ契約内訳ステータス"))` (L2844)

> Simple field: Sub-Contract Detail Status (`svc_kei_ucwk_stat`). Returns `String.class` for "value" and "state".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (subkey.equalsIgnoreCase("value"))` |
| 1.1 | RETURN | `return String.class;` |
| 2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` |
| 2.1 | RETURN | `return String.class;` |

**Block 46** — ELSE (default) (L2850)

> Default fallback: if no field category matches, return null. This indicates the key is unrecognized or does not map to any known field.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` // Unrecognized field name (認識されない項目名) |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `typeModelData` | Method | Type model data resolution — returns the Java class type for a given field identifier. Core part of the X33 view framework's data-binding mechanism. |
| `key` | Parameter | Field identifier — a hierarchical string that specifies which form field's type is being queried. Can be a simple name, a nested list path, or a common-info view marker. |
| `subkey` | Parameter | Sub-field property specifier — indicates which attribute of the field (value, state, enable) the caller is interested in. |
| 顧客契約引継リスト | Field Label | Customer Contract Succession List — the list of customer contract records being carried over/updated. Internal field ID: `cust_kei_hktgi_list`. This is a nested data-type view field. |
| オプションサービス契約リスト | Field Label | Option Service Contract List — the list of option services attached to the main contract. Internal field ID: `op_svc_kei_list`. Also a nested data-type view field. |
| 申請種別コード | Field Label | Application Type Code — classifies the type of application request. Internal field ID: `mskm_sbt_cd`. Default value: "00026". |
| オプションサービスコード | Field Label | Option Service Code — identifies the specific option service. Internal field ID: `op_svc_cd`. Default value: "B015". |
| 親契約識別コード | Field Label | Parent Contract Identifier Code — distinguishes the type of parent contract. Internal field ID: `oya_kei_skbt_cd`. Default value: "01". |
| 業務パラメータID（セッション上限数） | Field Label | Work Parameter ID (Session Upper Limit) — the work parameter identifier for session count limits. Internal field ID: `work_param_id_session_uppl`. |
| 業務パラメータID（予約上限日数） | Field Label | Work Parameter ID (Reservation Upper Limit Days) — the work parameter identifier for reservation day limits. Internal field ID: `work_param_id_rsv_uppl_prd`. |
| 事務手数料自動適用要否 | Field Label | Auto-Apply Task Fee Flag — indicates whether task fees are automatically applied. Internal field ID: `rule0059_auto_aply`. Default: "0" (not auto-applied). |
| 料金コースコード | Field Label | Fee Course Code — identifies the fee course for billing. Internal field ID: `pcrs_cd`. |
| 料金プランコード | Field Label | Fee Plan Code — identifies the billing plan. Internal field ID: `pplan_cd`. |
| 料金プラン固定単価番号 | Field Label | Fee Plan Fixed Unit Price Number — the fixed unit price number for the billing plan. Internal field ID: `pplan_kotei_tanka_no`. |
| 初期マルチセッション認証IDパスワード | Field Label | Initial Multi-Session Authentication ID Password — the initial authentication credentials. Internal field ID: `shk_mltise_ninsho_id_pwd`. |
| マルチセッション認証ID | Field Label | Multi-Session Authentication ID — the user's multi-session authentication identifier. Internal field ID: `mltise_ninsho_id`. |
| セッション数 | Field Label | Session Count — the number of concurrent sessions. Internal field ID: `session_cnt`. Type: Long. |
| 利用開始日（年/月/日） | Field Label | Utilization Start Date (Year/Month/Day) — the start date of service usage, broken into year, month, and day components. Internal field IDs: `use_staymd_year`, `use_staymd_mon`, `use_staymd_day`. |
| 利用開始日 | Field Label | Utilization Start Date — the full start date of service usage. Internal field ID: `use_staymd`. |
| サービス課金開始年月日 | Field Label | Service Charge Start Date — the date from which service charges begin. Internal field ID: `svc_chrg_staymd`. |
| 運用年月日 / 運用年月日時分秒 | Field Label | Operation Date / Operation Date-Time — the operational date or date-time stamp. Internal field IDs: `unyo_ymd`, `unyo_dtm`. |
| 実施オプションサービス契約ステータス | Field Label | Implemented Option Service Contract Status — the status of the implemented option service contract. Internal field ID: `jssi_op_svc_kei_stat`. |
| サービス契約ステータス | Field Label | Service Contract Status — the current status of the service contract. Internal field ID: `svc_kei_stat`. |
| お客様ステータス | Field Label | Customer Status — the current status of the customer. Internal field ID: `cust_stat`. |
| 請求契約番号 | Field Label | Billing Contract Number — the contract number for billing purposes. Internal field ID: `seiky_kei_no`. |
| 進捗ステータス | Field Label | Progress Status — the current progress status of the process. Internal field ID: `prg_stat`. |
| 進捗特記事項1 | Field Label | Progress Remark 1 — a free-text field for progress notes. Internal field ID: `prg_tkjk_1`. |
| オーダ種別コード | Field Label | Order Type Code — classifies the order type. Internal field ID: `order_sbt_cd`. |
| サービスオーダコード | Field Label | Service Order Code — the order code for the service. Internal field ID: `svc_order_cd`. |
| 要求種別コード | Field Label | Request Type Code — classifies the request type. Internal field ID: `yokyu_sbt_cd`. |
| オーダ発行条件コード | Field Label | Order Issuance Condition Code — the condition code for order issuance. Internal field ID: `odr_hakko_joken_cd`. |
| オーダ内容コード | Field Label | Order Content Code — the content code describing what is ordered. Internal field ID: `odr_naiyo_cd`. |
| オプションS/O登録実施 | Field Label | Option S/O (Service/Order) Registration Implementation — flag indicating whether option S/O registration is performed. Internal field ID: `op_sod_add_jssi`. |
| 世代管理年月日時分秒（サービス契約） | Field Label | Generation Management Date-Time (Service Contract) — audit timestamp for the service contract record. Internal field ID: `kk0081_gene_add_dtm`. |
| サービス契約内訳番号 | Field Label | Service Contract Detail Number — internal tracking ID for service contract line items. Internal field ID: `svc_kei_ucwk_no`. |
| 世代管理年月日時分秒（サービス契約内訳） | Field Label | Generation Management Date-Time (Service Contract Detail) — audit timestamp for the contract detail. Internal field ID: `kk0161_gene_add_dtm`. |
| 最終更新年月日時分秒 | Field Label | Last Updated Date-Time — the most recent update timestamp for the record. Internal field ID: `last_upd_dtm`. |
| 異動年月日時分秒 | Field Label | Movement (Audit) Date-Time — the timestamp of the last status change/movement. Internal field ID: `ido_dtm`. |
| サブ契約内訳ステータス | Field Label | Sub-Contract Detail Status — the status of the sub-contract detail. Internal field ID: `svc_kei_ucwk_stat`. |
| `//` prefix | Convention | Common-info view field marker — keys starting with "//" reference shared information view components that are rendered across multiple screens. |
| `*` subkey | Convention | Wildcard — when used as a subkey or path element, it indicates the caller wants the type for the list element count rather than a specific element's field type. |
| X33VDataTypeList | Framework Type | A list container from the Fujitsu Futurity X33 framework that holds typed data beans. Each element implements `X33VDataTypeBeanInterface`. |
| X33VDataTypeBeanInterface | Framework Interface | Interface that all typed data beans must implement, providing `typeModelData` for recursive type resolution. |
| X33VViewBaseBean | Framework Class | Parent class of KKW00816SFBean, providing common view bean functionality including `typeCommonInfoData` for shared-info view fields. |
| X33VListedBeanInterface | Framework Interface | Interface for beans that contain list data, requiring `cust_kei_hktgi_list_list` and `op_svc_kei_list_list` fields. |
| SOD | Acronym | Service Order Data — refers to the option service/order data registration process in the telecom order fulfillment domain. |
| S/O | Acronym | Service/Order — abbreviation for Service Order in the telecom services context. |
