# Business Logic — KKW02301SF01DBean.typeModelData() [296 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKW02301SF.KKW02301SF01DBean` |
| Layer | DBean (Data Bean / DataType Bean — Web presentation layer, `eo.web.webview`) |
| Module | `KKW02301SF` (Package: `eo.web.webview.KKW02301SF`) |

## 1. Role

### KKW02301SF01DBean.typeModelData()

This method serves as the **data type resolver** for the Option Service Contract screen (KKW02301SF), which manages telecom service optional add-ons. It implements a **routing/dispatch design pattern** — given a field name (key) and a property descriptor (subkey), it returns the appropriate Java `Class<?>` that represents the data type the UI framework should use when rendering that field.

The method handles **18 distinct business fields** related to optional service contracts in the K-Opticom telecom order fulfillment system. Each field supports one or more subkeys: `"value"` returns the field's primary data type, `"state"` returns a `String` representing the field's UI state (enabled/disabled/readonly), and `"enable"` returns a `Boolean` indicating whether the field is editable by the user. All return types are `String.class` or `Boolean.class` — this is a pure type-information utility with no business-side effects.

Its **role in the larger system** is foundational: it is the type model behind the X33VDataTypeBeanInterface framework used by the generic web framework to render dynamic form grids. The parent bean `KKW02301SFBean` delegates to this method when it needs to resolve types for the "Option Service Contract" (オプションサービス契約) repeating grid item, enabling a single DBean class to provide type metadata for all columns in the service contract line item grid.

The method has **no external dependencies** — no service calls, no database reads, no instance field reads. It is a pure function. Branches cover 18 top-level key conditions, each with 2-3 subkey conditions, with a final `return null` for unmatched keys.

## 2. Processing Pattern (Detailed Business Logic)

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

    START --> COND_NULL["key == null || subkey == null"]
    COND_NULL -->|True| RET_NULL_1["return null"]
    COND_NULL -->|False| FIND_SEP["sep = key.indexOf / "]

    FIND_SEP --> COND_OP_SVC["key equals オプションサービス契約番号"]
    COND_OP_SVC -->|True| SUBKEY_OP_SVC_1["subkey equalsIgnoreCase value"]
    SUBKEY_OP_SVC_1 -->|True| RET_OP_1["return String.class"]
    SUBKEY_OP_SVC_1 -->|False| SUBKEY_OP_SVC_2["subkey equalsIgnoreCase state"]
    SUBKEY_OP_SVC_2 -->|True| RET_OP_2["return String.class"]

    COND_OP_SVC -->|False| COND_OP_SVC_STAT["key equals オプションサービス契約ステータス"]
    COND_OP_SVC_STAT -->|True| SUBKEY_OP_STAT_1["subkey equalsIgnoreCase value"]
    SUBKEY_OP_STAT_1 -->|True| RET_OP_STAT_1["return String.class"]
    SUBKEY_OP_STAT_1 -->|False| SUBKEY_OP_STAT_2["subkey equalsIgnoreCase state"]
    SUBKEY_OP_STAT_2 -->|True| RET_OP_STAT_2["return String.class"]

    COND_OP_SVC_STAT -->|False| COND_OP_SVC_STAT_NM["key equals オプションサービス契約ステータス名"]
    COND_OP_SVC_STAT_NM -->|True| SUBKEY_STAT_NM_1["subkey equalsIgnoreCase value"]
    SUBKEY_STAT_NM_1 -->|True| RET_STAT_NM_1["return String.class"]
    SUBKEY_STAT_NM_1 -->|False| SUBKEY_STAT_NM_2["subkey equalsIgnoreCase enable"]
    SUBKEY_STAT_NM_2 -->|True| RET_STAT_NM_2["return Boolean.class"]
    SUBKEY_STAT_NM_2 -->|False| SUBKEY_STAT_NM_3["subkey equalsIgnoreCase state"]
    SUBKEY_STAT_NM_3 -->|True| RET_STAT_NM_3["return String.class"]

    COND_OP_SVC_STAT_NM -->|False| COND_SVC_CD["key equals オプションサービスコード"]
    COND_SVC_CD -->|True| SUBKEY_SVC_CD_1["subkey equalsIgnoreCase value"]
    SUBKEY_SVC_CD_1 -->|True| RET_SVC_CD_1["return String.class"]
    SUBKEY_SVC_CD_1 -->|False| SUBKEY_SVC_CD_2["subkey equalsIgnoreCase enable"]
    SUBKEY_SVC_CD_2 -->|True| RET_SVC_CD_2["return Boolean.class"]
    SUBKEY_SVC_CD_2 -->|False| SUBKEY_SVC_CD_3["subkey equalsIgnoreCase state"]
    SUBKEY_SVC_CD_3 -->|True| RET_SVC_CD_3["return String.class"]

    COND_SVC_CD -->|False| COND_SVC_CD_NM["key equals オプションサービスコード名"]
    COND_SVC_CD_NM -->|True| SUBKEY_SVC_CD_NM_1["subkey equalsIgnoreCase value"]
    SUBKEY_SVC_CD_NM_1 -->|True| RET_SVC_CD_NM_1["return String.class"]
    SUBKEY_SVC_CD_NM_1 -->|False| SUBKEY_SVC_CD_NM_2["subkey equalsIgnoreCase enable"]
    SUBKEY_SVC_CD_NM_2 -->|True| RET_SVC_CD_NM_2["return Boolean.class"]
    SUBKEY_SVC_CD_NM_2 -->|False| SUBKEY_SVC_CD_NM_3["subkey equalsIgnoreCase state"]
    SUBKEY_SVC_CD_NM_3 -->|True| RET_SVC_CD_NM_3["return String.class"]

    COND_SVC_CD_NM -->|False| COND_NAIYO["key equals オプション内容"]
    COND_NAIYO -->|True| SUBKEY_NAIYO_1["subkey equalsIgnoreCase value"]
    SUBKEY_NAIYO_1 -->|True| RET_NAIYO_1["return String.class"]
    SUBKEY_NAIYO_1 -->|False| SUBKEY_NAIYO_2["subkey equalsIgnoreCase enable"]
    SUBKEY_NAIYO_2 -->|True| RET_NAIYO_2["return Boolean.class"]
    SUBKEY_NAIYO_2 -->|False| SUBKEY_NAIYO_3["subkey equalsIgnoreCase state"]
    SUBKEY_NAIYO_3 -->|True| RET_NAIYO_3["return String.class"]

    COND_NAIYO -->|False| COND_SVC_STA["key equals サービス開始年月日時秒"]
    COND_SVC_STA -->|True| SUBKEY_SVC_STA_1["subkey equalsIgnoreCase value"]
    SUBKEY_SVC_STA_1 -->|True| RET_SVC_STA_1["return String.class"]
    SUBKEY_SVC_STA_1 -->|False| SUBKEY_SVC_STA_2["subkey equalsIgnoreCase state"]
    SUBKEY_SVC_STA_2 -->|True| RET_SVC_STA_2["return String.class"]

    COND_SVC_STA -->|False| COND_RSV_TSTA["key equals 予約適用開始希望年月日"]
    COND_RSV_TSTA -->|True| SUBKEY_RSV_1["subkey equalsIgnoreCase value"]
    SUBKEY_RSV_1 -->|True| RET_RSV_1["return String.class"]
    SUBKEY_RSV_1 -->|False| SUBKEY_RSV_2["subkey equalsIgnoreCase state"]
    SUBKEY_RSV_2 -->|True| RET_RSV_2["return String.class"]

    COND_RSV_TSTA -->|False| COND_RSV_TSTA2["key equals サービス利用開始希望年月日"]
    COND_RSV_TSTA2 -->|True| SUBKEY_RSV2_1["subkey equalsIgnoreCase value"]
    SUBKEY_RSV2_1 -->|True| RET_RSV2_1["return String.class"]
    SUBKEY_RSV2_1 -->|False| SUBKEY_RSV2_2["subkey equalsIgnoreCase state"]
    SUBKEY_RSV2_2 -->|True| RET_RSV2_2["return String.class"]

    COND_RSV_TSTA2 -->|False| COND_SVC_END["key equals サービス終了年月日時秒"]
    COND_SVC_END -->|True| SUBKEY_SVC_END_1["subkey equalsIgnoreCase value"]
    SUBKEY_SVC_END_1 -->|True| RET_SVC_END_1["return String.class"]
    SUBKEY_SVC_END_1 -->|False| SUBKEY_SVC_END_2["subkey equalsIgnoreCase enable"]
    SUBKEY_SVC_END_2 -->|True| RET_SVC_END_2["return Boolean.class"]
    SUBKEY_SVC_END_2 -->|False| SUBKEY_SVC_END_3["subkey equalsIgnoreCase state"]
    SUBKEY_SVC_END_3 -->|True| RET_SVC_END_3["return String.class"]

    COND_SVC_END -->|False| COND_USE_STA["key equals 利用開始日"]
    COND_USE_STA -->|True| SUBKEY_USE_1["subkey equalsIgnoreCase value"]
    SUBKEY_USE_1 -->|True| RET_USE_1["return String.class"]
    SUBKEY_USE_1 -->|False| SUBKEY_USE_2["subkey equalsIgnoreCase enable"]
    SUBKEY_USE_2 -->|True| RET_USE_2["return Boolean.class"]
    SUBKEY_USE_2 -->|False| SUBKEY_USE_3["subkey equalsIgnoreCase state"]
    SUBKEY_USE_3 -->|True| RET_USE_3["return String.class"]

    COND_USE_STA -->|False| COND_MSKM_NO["key equals 申込番号"]
    COND_MSKM_NO -->|True| SUBKEY_MSKM_1["subkey equalsIgnoreCase value"]
    SUBKEY_MSKM_1 -->|True| RET_MSKM_1["return String.class"]
    SUBKEY_MSKM_1 -->|False| SUBKEY_MSKM_2["subkey equalsIgnoreCase state"]
    SUBKEY_MSKM_2 -->|True| RET_MSKM_2["return String.class"]

    COND_MSKM_NO -->|False| COND_MSKM_DTL["key equals 申込詳細番号"]
    COND_MSKM_DTL -->|True| SUBKEY_MSKM_DTL_1["subkey equalsIgnoreCase value"]
    SUBKEY_MSKM_DTL_1 -->|True| RET_MSKM_DTL_1["return String.class"]
    SUBKEY_MSKM_DTL_1 -->|False| SUBKEY_MSKM_DTL_2["subkey equalsIgnoreCase state"]
    SUBKEY_MSKM_DTL_2 -->|True| RET_MSKM_DTL_2["return String.class"]

    COND_MSKM_DTL -->|False| COND_GYO_FLG["key equals 行表示フラグ"]
    COND_GYO_FLG -->|True| SUBKEY_GYO_1["subkey equalsIgnoreCase value"]
    SUBKEY_GYO_1 -->|True| RET_GYO_1["return String.class"]
    SUBKEY_GYO_1 -->|False| SUBKEY_GYO_2["subkey equalsIgnoreCase state"]
    SUBKEY_GYO_2 -->|True| RET_GYO_2["return String.class"]

    COND_GYO_FLG -->|False| COND_SBO_SVC_NO["key equals サブオプションサービス契約番号"]
    COND_SBO_SVC_NO -->|True| SUBKEY_SBO_1["subkey equalsIgnoreCase value"]
    SUBKEY_SBO_1 -->|True| RET_SBO_1["return String.class"]
    SUBKEY_SBO_1 -->|False| SUBKEY_SBO_2["subkey equalsIgnoreCase state"]
    SUBKEY_SBO_2 -->|True| RET_SBO_2["return String.class"]

    COND_SBO_SVC_NO -->|False| COND_SBO_SVC_CD["key equals サブオプションサービスコード"]
    COND_SBO_SVC_CD -->|True| SUBKEY_SBO_CD_1["subkey equalsIgnoreCase value"]
    SUBKEY_SBO_CD_1 -->|True| RET_SBO_CD_1["return String.class"]
    SUBKEY_SBO_CD_1 -->|False| SUBKEY_SBO_CD_2["subkey equalsIgnoreCase state"]
    SUBKEY_SBO_CD_2 -->|True| RET_SBO_CD_2["return String.class"]

    COND_SBO_SVC_CD -->|False| COND_OPEND_RSV["key equals 利用終了予定日"]
    COND_OPEND_RSV -->|True| SUBKEY_OPEND_1["subkey equalsIgnoreCase value"]
    SUBKEY_OPEND_1 -->|True| RET_OPEND_1["return String.class"]
    SUBKEY_OPEND_1 -->|False| SUBKEY_OPEND_2["subkey equalsIgnoreCase state"]
    SUBKEY_OPEND_2 -->|True| RET_OPEND_2["return String.class"]

    COND_OPEND_RSV -->|False| COND_DSP_SVCTK["key equals 表示用サービス提供開始年月日"]
    COND_DSP_SVCTK -->|True| SUBKEY_DSP_1["subkey equalsIgnoreCase value"]
    SUBKEY_DSP_1 -->|True| RET_DSP_1["return String.class"]
    SUBKEY_DSP_1 -->|False| SUBKEY_DSP_2["subkey equalsIgnoreCase state"]
    SUBKEY_DSP_2 -->|True| RET_DSP_2["return String.class"]

    COND_DSP_SVCTK -->|False| COND_FMTCEL["key equals ファクトセル事業者コード"]
    COND_FMTCEL -->|True| SUBKEY_FMTCEL_1["subkey equalsIgnoreCase value"]
    SUBKEY_FMTCEL_1 -->|True| RET_FMTCEL_1["return String.class"]
    SUBKEY_FMTCEL_1 -->|False| SUBKEY_FMTCEL_2["subkey equalsIgnoreCase state"]
    SUBKEY_FMTCEL_2 -->|True| RET_FMTCEL_2["return String.class"]

    COND_FMTCEL -->|False| COND_MAX_OP["key equals 最大オプションサービス数"]
    COND_MAX_OP -->|True| SUBKEY_MAX_1["subkey equalsIgnoreCase value"]
    SUBKEY_MAX_1 -->|True| RET_MAX_1["return String.class"]
    SUBKEY_MAX_1 -->|False| SUBKEY_MAX_2["subkey equalsIgnoreCase state"]
    SUBKEY_MAX_2 -->|True| RET_MAX_2["return String.class"]

    COND_MAX_OP -->|False| COND_IDO_RSV["key equals 異動予約存在フラグ"]
    COND_IDO_RSV -->|True| SUBKEY_IDO_1["subkey equalsIgnoreCase value"]
    SUBKEY_IDO_1 -->|True| RET_IDO_1["return String.class"]
    SUBKEY_IDO_1 -->|False| SUBKEY_IDO_2["subkey equalsIgnoreCase state"]
    SUBKEY_IDO_2 -->|True| RET_IDO_2["return String.class"]

    COND_IDO_RSV -->|False| COND_KAIHK["key equals 回復可能期間"]
    COND_KAIHK -->|True| SUBKEY_KAIHK_1["subkey equalsIgnoreCase value"]
    SUBKEY_KAIHK_1 -->|True| RET_KAIHK_1["return String.class"]
    SUBKEY_KAIHK_1 -->|False| SUBKEY_KAIHK_2["subkey equalsIgnoreCase state"]
    SUBKEY_KAIHK_2 -->|True| RET_KAIHK_2["return String.class"]

    COND_KAIHK -->|False| COND_SVC_CHRG_STAYMD["key equals サービス課金開始年月日"]
    COND_SVC_CHRG_STAYMD -->|True| SUBKEY_CHRG1_1["subkey equalsIgnoreCase value"]
    SUBKEY_CHRG1_1 -->|True| RET_CHRG1_1["return String.class"]
    SUBKEY_CHRG1_1 -->|False| SUBKEY_CHRG1_2["subkey equalsIgnoreCase state"]
    SUBKEY_CHRG1_2 -->|True| RET_CHRG1_2["return String.class"]

    COND_SVC_CHRG_STAYMD -->|False| COND_SVC_CHRG_ENDYM["key equals サービス課金終了年月日"]
    COND_SVC_CHRG_ENDYM -->|True| SUBKEY_CHRG2_1["subkey equalsIgnoreCase value"]
    SUBKEY_CHRG2_1 -->|True| RET_CHRG2_1["return String.class"]
    SUBKEY_CHRG2_1 -->|False| SUBKEY_CHRG2_2["subkey equalsIgnoreCase state"]
    SUBKEY_CHRG2_2 -->|True| RET_CHRG2_2["return String.class"]

    COND_SVC_CHRG_ENDYM -->|False| COND_PCRS_CD["key equals 料金コースコード"]
    COND_PCRS_CD -->|True| SUBKEY_PCRS_1["subkey equalsIgnoreCase value"]
    SUBKEY_PCRS_1 -->|True| RET_PCRS_1["return String.class"]
    SUBKEY_PCRS_1 -->|False| SUBKEY_PCRS_2["subkey equalsIgnoreCase state"]
    SUBKEY_PCRS_2 -->|True| RET_PCRS_2["return String.class"]

    COND_PCRS_CD -->|False| COND_PPLAN_CD["key equals 料金プランコード"]
    COND_PPLAN_CD -->|True| SUBKEY_PPLAN_1["subkey equalsIgnoreCase value"]
    SUBKEY_PPLAN_1 -->|True| RET_PPLAN_1["return String.class"]
    SUBKEY_PPLAN_1 -->|False| SUBKEY_PPLAN_2["subkey equalsIgnoreCase state"]
    SUBKEY_PPLAN_2 -->|True| RET_PPLAN_2["return String.class"]

    COND_PPLAN_CD -->|False| RET_NULL_2["return null"]

    RET_NULL_1 --> END(["End"])
    RET_OP_1 --> END
    RET_OP_2 --> END
    RET_OP_STAT_1 --> END
    RET_OP_STAT_2 --> END
    RET_STAT_NM_1 --> END
    RET_STAT_NM_2 --> END
    RET_STAT_NM_3 --> END
    RET_SVC_CD_1 --> END
    RET_SVC_CD_2 --> END
    RET_SVC_CD_3 --> END
    RET_SVC_CD_NM_1 --> END
    RET_SVC_CD_NM_2 --> END
    RET_SVC_CD_NM_3 --> END
    RET_NAIYO_1 --> END
    RET_NAIYO_2 --> END
    RET_NAIYO_3 --> END
    RET_SVC_STA_1 --> END
    RET_SVC_STA_2 --> END
    RET_RSV_1 --> END
    RET_RSV_2 --> END
    RET_RSV2_1 --> END
    RET_RSV2_2 --> END
    RET_SVC_END_1 --> END
    RET_SVC_END_2 --> END
    RET_SVC_END_3 --> END
    RET_USE_1 --> END
    RET_USE_2 --> END
    RET_USE_3 --> END
    RET_MSKM_1 --> END
    RET_MSKM_2 --> END
    RET_MSKM_DTL_1 --> END
    RET_MSKM_DTL_2 --> END
    RET_GYO_1 --> END
    RET_GYO_2 --> END
    RET_SBO_1 --> END
    RET_SBO_2 --> END
    RET_SBO_CD_1 --> END
    RET_SBO_CD_2 --> END
    RET_OPEND_1 --> END
    RET_OPEND_2 --> END
    RET_DSP_1 --> END
    RET_DSP_2 --> END
    RET_FMTCEL_1 --> END
    RET_FMTCEL_2 --> END
    RET_MAX_1 --> END
    RET_MAX_2 --> END
    RET_IDO_1 --> END
    RET_IDO_2 --> END
    RET_KAIHK_1 --> END
    RET_KAIHK_2 --> END
    RET_CHRG1_1 --> END
    RET_CHRG1_2 --> END
    RET_CHRG2_1 --> END
    RET_CHRG2_2 --> END
    RET_PCRS_1 --> END
    RET_PCRS_2 --> END
    RET_PPLAN_1 --> END
    RET_PPLAN_2 --> END
    RET_NULL_2 --> END
```

### Processing Summary

The method executes in three phases:

1. **Null guard (L1493–L1495):** If either `key` or `subkey` is `null`, return `null` immediately. The original comment reads: `key, subkey がnull の場合、null を返す` (If key and subkey are null, return null).

2. **Separator scan (L1497):** Compute `sep = key.indexOf("/")`. This value is computed but never used within this method — it is a vestigial variable, likely inherited from the parent interface contract where nested key paths (e.g., `"item/0/subitem"`) are parsed. The computed value is discarded.

3. **Field dispatch (L1500–L1780):** A 18-branch if/else-if ladder. Each branch matches a Japanese field name literal and checks the `subkey` against `"value"`, `"state"`, or `"enable"` using `equalsIgnoreCase`. Returns the appropriate `Class<?>` (`String.class` or `Boolean.class`).

4. **Fallback (L1784):** Return `null` if no key matches. The comment reads: `条件に一致するプロパティが存在しない場合は、null を返す。` (If no property matches the condition, return null.)

### Subkey Semantics

| Subkey | Returned Type | Business Meaning |
|--------|--------------|------------------|
| `"value"` | `String.class` or `Boolean.class` | The primary data type of the field value. Most fields return `String.class`; `"enable"` subkeys on specific fields return `Boolean.class`. |
| `"state"` | `String.class` | The UI display state of the field — whether it is active, disabled, or readonly. The original comment reads: `subkey が "state" の場合、ステータスを返す。` (When subkey is "state", return the status.) |
| `"enable"` | `Boolean.class` | Whether the field is editable/enabled in the UI. Only applies to specific fields. |

### Fields with Boolean enable subkey

The following 5 fields support `subkey = "enable"` returning `Boolean.class`:
- オプションサービス契約ステータス名 (`op_svc_kei_stat_nm`)
- オプションサービスコード (`op_svc_cd`)
- オプションサービスコード名 (`op_svc_cd_nm`)
- オプション内容 (`op_naiyo`)
- サービス終了年月日時秒 (`svc_end_dtm`)
- 利用開始日 (`use_sta_ymd`)

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | The display field name in Japanese — represents the column identifier of the Option Service Contract grid. Each value corresponds to a specific field in the optional service contract line item (e.g., "オプションサービス契約番号" is the Option Service Contract Number, "サービス開始年月日時秒" is the Service Start Date and Time). The field name determines which branch of the 18-way dispatch is taken. Valid values are the 18 Japanese field names listed in the flowchart. |
| 2 | `subkey` | `String` | The property descriptor within the field — specifies which aspect of the field's type metadata is requested. Valid values are `"value"` (primary data type), `"state"` (UI state/visibility status), or `"enable"` (editability flag). Case-insensitive comparison via `equalsIgnoreCase`. |

**No instance fields or external state are read by this method.** It is a pure function of its two parameters.

## 4. CRUD Operations / Called Services

This method performs **no CRUD operations** and calls **no services**. It is a pure in-memory type lookup with no database, entity, or service component interactions.

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| (N/A) | (none) | (none) | (none) | This method has no CRUD operations. It is a pure type-resolving utility with zero external side effects. |

## 5. Dependency Trace

### Callers of `typeModelData(String key, String subkey)`

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Screen:KKW02301SF | `KKW02301SFBean.typeModelData(key, subkey)` → `KKW02301SF01DBean.typeModelData(key, subkey)` | N/A (pure type lookup, no CRUD) |

### Who this method ultimately calls

This method calls **no other methods**. It is a leaf node in the call graph.

**Call context:** The method is invoked through the `KKW02301SFBean` (the main DBean for the Option Service Contract screen), which delegates to `KKW02301SF01DBean.typeModelData()` when the web framework needs type information for fields within the "Option Service Contract" (オプションサービス契約) repeating grid. The parent bean also references this DBean class in:
- `KKW02301SFBean.listKoumokuIds()` — returns `KKW02301SF01DBean.listKoumokuIds()` (line 3793)
- Grid instantiation — creates `new KKW02301SF01DBean()` as the datatype bean for the option service contract list (line 3945)

The framework accesses this via the `X33VDataTypeBeanInterface` contract, where the key format follows patterns like `"オプションサービス契約番号"` for simple fields, `"オプションサービス契約/0/オプションサービスコード"` for nested grid items, or `"オプションサービス契約/*"` for list-wide type resolution.

## 6. Per-Branch Detail Blocks

### Block 1 — IF (null guard) `(key == null || subkey == null)` (L1493)

> If either parameter is null, return null immediately. This is an early-exit guard clause.

| # | Type | Code |
|---|------|------|
| 1 | IF | `key == null || subkey == null` // `key, subkey がnull の場合` (If key, subkey are null) |
| 2 | RETURN | `return null;` |

### Block 2 — EXEC (separator scan) (L1497)

> Compute the position of the "/" separator in `key`. This value is never used within this method — vestigial code inherited from the parent interface pattern.

| # | Type | Code |
|---|------|------|
| 1 | SET | `int separaterPoint = key.indexOf("/");` // separator position scan (unused) |

### Block 3 — ELSE-IF (オプションサービス契約番号) `(key.equals("オプションサービス契約番号"))` (L1502) [ITEM ID: op_svc_kei_no]

> Option Service Contract Number — the main contract identifier for the option service line item. Supports "value" and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("オプションサービス契約番号")` // データタイプがStringの項目"オプションサービス契約番号" (Field with String data type: Option Service Contract Number) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("state")` // `subkey が"state" の場合、ステータスを返す。` (When subkey is "state", return status) |
| 5 | RETURN | `return String.class;` |

### Block 4 — ELSE-IF (オプションサービス契約ステータス) `(key.equals("オプションサービス契約ステータス"))` (L1516) [ITEM ID: op_svc_kei_stat]

> Option Service Contract Status — the status indicator of the option service contract (e.g., active, cancelled). Supports "value" and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("オプションサービス契約ステータス")` // データタイプがStringの項目"オプションサービス契約ステータス" (Field with String data type: Option Service Contract Status) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("state")` |
| 5 | RETURN | `return String.class;` |

### Block 5 — ELSE-IF (オプションサービス契約ステータス名) `(key.equals("オプションサービス契約ステータス名"))` (L1530) [ITEM ID: op_svc_kei_stat_nm]

> Option Service Contract Status Name — the human-readable label for the contract status. Supports "value", "enable", and "state" subkeys. The "enable" subkey returns `Boolean.class`.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("オプションサービス契約ステータス名")` // データタイプがStringの項目"オプションサービス契約ステータス名" (Field with String data type: Option Service Contract Status Name) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("enable")` |
| 5 | RETURN | `return Boolean.class;` |
| 6 | ELSE_IF | `subkey.equalsIgnoreCase("state")` |
| 7 | RETURN | `return String.class;` |

### Block 6 — ELSE-IF (オプションサービスコード) `(key.equals("オプションサービスコード"))` (L1547) [ITEM ID: op_svc_cd]

> Option Service Code — the coded identifier for the type of optional service (e.g., FTTH add-on, security service). Supports "value", "enable", and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("オプションサービスコード")` // データタイプがStringの項目"オプションサービスコード" (Field with String data type: Option Service Code) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("enable")` |
| 5 | RETURN | `return Boolean.class;` |
| 6 | ELSE_IF | `subkey.equalsIgnoreCase("state")` |
| 7 | RETURN | `return String.class;` |

### Block 7 — ELSE-IF (オプションサービスコード名) `(key.equals("オプションサービスコード名"))` (L1564) [ITEM ID: op_svc_cd_nm]

> Option Service Code Name — the display name for the option service code. Supports "value", "enable", and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("オプションサービスコード名")` // データタイプがStringの項目"オプションサービスコード名" (Field with String data type: Option Service Code Name) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("enable")` |
| 5 | RETURN | `return Boolean.class;` |
| 6 | ELSE_IF | `subkey.equalsIgnoreCase("state")` |
| 7 | RETURN | `return String.class;` |

### Block 8 — ELSE-IF (オプション内容) `(key.equals("オプション内容"))` (L1581) [ITEM ID: op_naiyo]

> Option Content — description of what the option service includes. Supports "value", "enable", and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("オプション内容")` // データタイプがStringの項目"オプション内容" (Field with String data type: Option Content) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("enable")` |
| 5 | RETURN | `return Boolean.class;` |
| 6 | ELSE_IF | `subkey.equalsIgnoreCase("state")` |
| 7 | RETURN | `return String.class;` |

### Block 9 — ELSE-IF (サービス開始年月日時秒) `(key.equals("サービス開始年月日時秒"))` (L1598) [ITEM ID: svc_sta_dtm]

> Service Start Date/Time — the datetime when the option service begins activation. Supports "value" and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("サービス開始年月日時秒")` // データタイプがStringの項目"サービス開始年月日時秒" (Field with String data type: Service Start Year/Month/Day/Hour/Minute/Second) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("state")` |
| 5 | RETURN | `return String.class;` |

### Block 10 — ELSE-IF (予約適用開始希望年月日) `(key.equals("予約適用開始希望年月日"))` (L1612) [ITEM ID: rsv_tsta_kibo_ymd]

> Desired Reservation Application Start Date — the customer's preferred date for the reservation to take effect. Supports "value" and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("予約適用開始希望年月日")` // データタイプがStringの項目"予約適用開始希望年月日" (Field with String data type: Desired Reservation Application Start Date) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("state")` |
| 5 | RETURN | `return String.class;` |

### Block 11 — ELSE-IF (サービス利用開始希望年月日) `(key.equals("サービス利用開始希望年月日"))` (L1627) [ITEM ID: rsv_tsta_kibo_ymd — OM-2014-0001976]

> Desired Service Usage Start Date — added in change request OM-2014-0001976 (Tanaka, 2014/06/05). The comment notes it shares the same item ID as Block 10 (`rsv_tsta_kibo_ymd`). Supports "value" and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("サービス利用開始希望年月日")` // OM-2014-0001976 Tanaka ADD — データタイプがStringの項目"サービス利用開始希望年月日" (Field with String data type: Desired Service Usage Start Date) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("state")` |
| 5 | RETURN | `return String.class;` |

### Block 12 — ELSE-IF (サービス終了年月日時秒) `(key.equals("サービス終了年月日時秒"))` (L1641) [ITEM ID: svc_end_dtm]

> Service End Date/Time — the datetime when the option service terminates. Supports "value", "enable", and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("サービス終了年月日時秒")` // データタイプがStringの項目"サービス終了年月日時秒" (Field with String data type: Service End Year/Month/Day/Hour/Minute/Second) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("enable")` |
| 5 | RETURN | `return Boolean.class;` |
| 6 | ELSE_IF | `subkey.equalsIgnoreCase("state")` |
| 7 | RETURN | `return String.class;` |

### Block 13 — ELSE-IF (利用開始日) `(key.equals("利用開始日"))` (L1658) [ITEM ID: use_sta_ymd]

> Service Start Date — the date when the service begins actual usage. Supports "value", "enable", and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("利用開始日")` // データタイプがStringの項目"利用開始日" (Field with String data type: Usage Start Date) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("enable")` |
| 5 | RETURN | `return Boolean.class;` |
| 6 | ELSE_IF | `subkey.equalsIgnoreCase("state")` |
| 7 | RETURN | `return String.class;` |

### Block 14 — ELSE-IF (申込番号) `(key.equals("申込番号"))` (L1675) [ITEM ID: mskm_no]

> Application Number — the unique identifier for the service application/order. Supports "value" and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("申込番号")` // データタイプがStringの項目"申込番号" (Field with String data type: Application Number) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("state")` |
| 5 | RETURN | `return String.class;` |

### Block 15 — ELSE-IF (申込詳細番号) `(key.equals("申込詳細番号"))` (L1689) [ITEM ID: mskm_dtl_no]

> Application Detail Number — the line-item identifier within an application. Supports "value" and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("申込詳細番号")` // データタイプがStringの項目"申込詳細番号" (Field with String data type: Application Detail Number) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("state")` |
| 5 | RETURN | `return String.class;` |

### Block 16 — ELSE-IF (行表示フラグ) `(key.equals("行表示フラグ"))` (L1703) [ITEM ID: gyo_disp_flg]

> Row Display Flag — controls whether a grid row is visible in the UI. Supports "value" and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("行表示フラグ")` // データタイプがStringの項目"行表示フラグ" (Field with String data type: Row Display Flag) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("state")` |
| 5 | RETURN | `return String.class;` |

### Block 17 — ELSE-IF (サブオプションサービス契約番号) `(key.equals("サブオプションサービス契約番号"))` (L1717) [ITEM ID: sbop_svc_kei_no]

> Sub-Option Service Contract Number — identifies sub-option service contracts nested under the main option. Supports "value" and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("サブオプションサービス契約番号")` // データタイプがStringの項目"サブオプションサービス契約番号" (Field with String data type: Sub-Option Service Contract Number) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("state")` |
| 5 | RETURN | `return String.class;` |

### Block 18 — ELSE-IF (サブオプションサービスコード) `(key.equals("サブオプションサービスコード"))` (L1731) [ITEM ID: sbop_svc_cd]

> Sub-Option Service Code — the code identifying a sub-option service type. Supports "value" and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("サブオプションサービスコード")` // データタイプがStringの項目"サブオプションサービスコード" (Field with String data type: Sub-Option Service Code) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("state")` |
| 5 | RETURN | `return String.class;` |

### Block 19 — ELSE-IF (利用終了予定日) `(key.equals("利用終了予定日"))` (L1745) [ITEM ID: opsvc_end_rsv_ymd]

> Scheduled Service End Date — the planned end date of service usage. Supports "value" and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("利用終了予定日")` // データタイプがStringの項目"利用終了予定日" (Field with String data type: Scheduled Service End Date) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("state")` |
| 5 | RETURN | `return String.class;` |

### Block 20 — ELSE-IF (表示用サービス提供開始年月日) `(key.equals("表示用サービス提供開始年月日"))` (L1759) [ITEM ID: dsp_svctk_staymd]

> Display Service Provision Start Date — the start date for display purposes (may differ from actual activation). Supports "value" and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("表示用サービス提供開始年月日")` // データタイプがStringの項目"表示用サービス提供開始年月日" (Field with String data type: Display Service Provision Start Date) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("state")` |
| 5 | RETURN | `return String.class;` |

### Block 21 — ELSE-IF (ファクトセル事業者コード) `(key.equals("ファクトセル事業者コード"))` (L1773) [ITEM ID: fmtcel_jgs_cd]

> Fiber Cell Provider Code — the code for the fiber-cell service provider (FACTSEL). Supports "value" and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("ファクトセル事業者コード")` // データタイプがStringの項目"ファクトセル事業者コード" (Field with String data type: Fiber Cell Provider Code) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("state")` |
| 5 | RETURN | `return String.class;` |

### Block 22 — ELSE-IF (最大オプションサービス数) `(key.equals("最大オプションサービス数"))` (L1787) [ITEM ID: max_op_svc_cnt]

> Maximum Option Service Count — the maximum number of optional services allowed. Supports "value" and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("最大オプションサービス数")` // データタイプがStringの項目"最大オプションサービス数" (Field with String data type: Maximum Option Service Count) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("state")` |
| 5 | RETURN | `return String.class;` |

### Block 23 — ELSE-IF (異動予約存在フラグ) `(key.equals("異動予約存在フラグ"))` (L1801) [ITEM ID: ido_rsv_flg]

> Migration Reservation Existence Flag — indicates whether a migration reservation exists for the service line. Supports "value" and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("異動予約存在フラグ")` // データタイプがStringの項目"異動予約存在フラグ" (Field with String data type: Migration Reservation Existence Flag) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("state")` |
| 5 | RETURN | `return String.class;` |

### Block 24 — ELSE-IF (回復可能期間) `(key.equals("回復可能期間"))` (L1815) [ITEM ID: kaihk_psb_prd]

> Recovery Possible Period — the window during which the service can be restored after cancellation. Supports "value" and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("回復可能期間")` // データタイプがStringの項目"回復可能期間" (Field with String data type: Recovery Possible Period) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("state")` |
| 5 | RETURN | `return String.class;` |

### Block 25 — ELSE-IF (サービス課金開始年月日) `(key.equals("サービス課金開始年月日"))` (L1829) [ITEM ID: svc_chrg_staymd]

> Service Billing Start Date — the date when billing for the service commences. Supports "value" and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("サービス課金開始年月日")` // データタイプがStringの項目"サービス課金開始年月日" (Field with String data type: Service Billing Start Date) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("state")` |
| 5 | RETURN | `return String.class;` |

### Block 26 — ELSE-IF (サービス課金終了年月日) `(key.equals("サービス課金終了年月日"))` (L1843) [ITEM ID: svc_chrg_endym]

> Service Billing End Date — the date when billing for the service ends. Supports "value" and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("サービス課金終了年月日")` // データタイプがStringの項目"サービス課金終了年月日" (Field with String data type: Service Billing End Date) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("state")` |
| 5 | RETURN | `return String.class;` |

### Block 27 — ELSE-IF (料金コースコード) `(key.equals("料金コースコード"))` (L1855) [ITEM ID: pcrs_cd]

> Fee Course Code — added in change request [ANK-2056-00-00] for the Telephone Selection Option Pack. The code identifying the pricing course/plan for the option service. Supports "value" and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("料金コースコード")` // 【ANK-2056-00-00】光電話セレクトオプションパック ADD — データタイプがStringの項目"料金コースコード" (Field with String data type: Fee Course Code) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("state")` |
| 5 | RETURN | `return String.class;` |

### Block 28 — ELSE-IF (料金プランコード) `(key.equals("料金プランコード"))` (L1867) [ITEM ID: pplan_cd]

> Fee Plan Code — added in change request [IT1-2014-0000122] as part of the Telephone Selection Option Pack addition. The code identifying the specific pricing plan. Supports "value" and "state" subkeys.

| # | Type | Code |
|---|------|------|
| 1 | ELSE_IF | `key.equals("料金プランコード")` // 【IT1-2014-0000122】光電話セレクトオプション PACK ADD END — データタイプがStringの項目"料金プランコード" (Field with String data type: Fee Plan Code) |
| 2 | IF | `subkey.equalsIgnoreCase("value")` |
| 3 | RETURN | `return String.class;` |
| 4 | ELSE_IF | `subkey.equalsIgnoreCase("state")` |
| 5 | RETURN | `return String.class;` |

### Block 29 — ELSE (no match) (L1876)

> If no field name matches any of the 18 branches, return null. The comment reads: `条件に一致するプロパティが存在しない場合は、null を返す。` (If no property matches the condition, return null.)

| # | Type | Code |
|---|------|------|
| 1 | ELSE | (implicit fall-through — no property matches) |
| 2 | RETURN | `return null;` |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `op_svc_kei_no` | Field | Option Service Contract Number — the unique identifier for an option service contract line item within a main service contract |
| `op_svc_kei_stat` | Field | Option Service Contract Status — the current state of an option service contract (e.g., active, terminated, pending) |
| `op_svc_kei_stat_nm` | Field | Option Service Contract Status Name — human-readable label for the contract status |
| `op_svc_cd` | Field | Option Service Code — codes the type of optional service (e.g., FTTH add-on, security, IPTV) |
| `op_svc_cd_nm` | Field | Option Service Code Name — display name for the option service code |
| `op_naiyo` | Field | Option Content — description of what the option service includes |
| `svc_sta_dtm` | Field | Service Start Date/Time — datetime when the option service begins (年/月/日/時/分/秒 = year/month/day/hour/minute/second) |
| `svc_end_dtm` | Field | Service End Date/Time — datetime when the option service terminates |
| `svc_chrg_staymd` | Field | Service Billing Start Date — date when billing commences for the service |
| `svc_chrg_endym` | Field | Service Billing End Date — date when billing ends for the service |
| `rsv_tsta_kibo_ymd` | Field | Desired Reservation Application Start Date — customer's preferred start date for reservation application |
| `use_sta_ymd` | Field | Usage Start Date — date when the service is actually put into use |
| `mskm_no` | Field | Application Number — unique identifier for a service application/order |
| `mskm_dtl_no` | Field | Application Detail Number — line-item identifier within a service application |
| `gyo_disp_flg` | Field | Row Display Flag — UI flag controlling whether a grid row is rendered |
| `sbop_svc_kei_no` | Field | Sub-Option Service Contract Number — contract number for sub-option services nested under a main option |
| `sbop_svc_cd` | Field | Sub-Option Service Code — code for a sub-option service type |
| `opsvc_end_rsv_ymd` | Field | Scheduled Service End Date — planned date when service usage ends |
| `dsp_svctk_staymd` | Field | Display Service Provision Start Date — start date shown to the user (may differ from actual activation) |
| `fmtcel_jgs_cd` | Field | Fiber Cell Provider Code — code for the fiber-cell (FACTSEL) network service provider |
| `max_op_svc_cnt` | Field | Maximum Option Service Count — maximum number of optional services allowed on a contract |
| `ido_rsv_flg` | Field | Migration Reservation Existence Flag — indicates whether a service migration reservation is in place |
| `kaihk_psb_prd` | Field | Recovery Possible Period — the time window during which a terminated service can be restored |
| `pcrs_cd` | Field | Fee Course Code — pricing course identifier for the option service (added in ANK-2056-00-00) |
| `pplan_cd` | Field | Fee Plan Code — specific pricing plan identifier (added in IT1-2014-0000122) |
| X33VDataTypeBeanInterface | Technical | Interface contract in the web framework for providing type metadata to dynamic form rendering |
| DBean | Technical | Data Bean — a Java class in the `eo.web.webview` package that holds field type metadata for web screens |
| KKW02301SF | Module | Option Service Contract screen module — manages optional add-on services on top of base telecommunications contracts |
| ANK-2056-00-00 | Change request | Telephone Selection Option Pack — added fee course and plan code fields for fiber phone selection |
| IT1-2014-0000122 | Change request | Telephone Selection Option Pack ADD END — continuation of the fiber phone selection option feature |
| OM-2014-0001976 | Change request | Added "Desired Service Usage Start Date" (サービス利用開始希望年月日) field |
| FTTH | Business term | Fiber To The Home — fiber-optic broadband internet service offered by K-Opticom |
| K-Opticom | Business term | Japanese telecommunications provider offering broadband, IPTV, and optional add-on services |
