# Business Logic — KKW02701SF02DBean.typeModelData() [146 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKA16701SF.KKW02701SF02DBean` |
| Layer | UI Bean / Data Type Binding (X33V Web Framework) |
| Module | `KKA16701SF` (Package: `eo.web.webview.KKA16701SF`) |

## 1. Role

### KKW02701SF02DBean.typeModelData()

This method implements the `X33VDataTypeList` data type interface contract defined by the Fujitsu Futurity X33V web framework. It serves as a **type resolution dispatcher** — the X33V framework calls `typeModelData(key, subkey)` on each row of a `X33VDataTypeList` to determine the Java type of a UI-bound field before rendering it in the view. The `key` parameter carries the **business field name** (e.g., "サービス契約内訳番号" — Service Contract Breakdown Number), and the `subkey` parameter specifies which **meta-attribute** of that field the framework is querying: `"value"` for the actual data value type, `"state"` for the display state type, or `"enable"` for the enabled/disabled flag type.

The method implements a **routing/dispatch design pattern** — it branches on the field name (key) to reach one of 11 business field definitions, then within each field branches on the subkey to return the correct Java `Class<?>` (`String.class`, `Boolean.class`, or `null`). This is a static type map: every field's type is hardcoded, and no data is read from or written to a database, SC, or CBS.

In the larger system, this method is invoked by the **X33V framework's model loading mechanism** (via `loadModelData`) during screen rendering of the Course History List (`course_rk_list`) for the KKW02701SF screen. It enables the framework to dynamically generate the correct UI component types (text fields, boolean checkboxes, enabled/disabled toggles) based on the business field metadata — a core part of the X33V data-driven screen binding approach. The `KKA16701SF02DBean` acts as the data type bean for course history rows, and `typeModelData` is called per-row during list rendering.

If no matching field name or subkey combination is found, the method returns `null`, signaling to the framework that the requested attribute is not defined for that field.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["typeModelData key, subkey"])
    CHECK_NULL["key or subkey is null?"]
    RETURN_NULL1(["return null"])

    START --> CHECK_NULL
    CHECK_NULL -->|Yes| RETURN_NULL1
    CHECK_NULL -->|No| BRANCH1

    subgraph Field Branches
        BRANCH1["key = サービス契約内訳番号<br/>(svc_kei_ucwk_no)"]
        SUB1A["subkey = value?"]
        SUB1A_RET1["return String.class"]
        SUB1B["subkey = state?"]
        SUB1B_RET1["return String.class"]

        BRANCH2["key = 世代登録年月日時分秒<br/>(gene_add_dtm)"]
        SUB2A["subkey = value?"]
        SUB2A_RET2["return String.class"]
        SUB2B["subkey = state?"]
        SUB2B_RET2["return String.class"]

        BRANCH3["key = 異動予約番号<br/>(ido_rsv_no)"]
        SUB3A["subkey = value?"]
        SUB3A_RET3["return String.class"]
        SUB3B["subkey = state?"]
        SUB3B_RET3["return String.class"]

        BRANCH4["key = 申込明細番号<br/>(mskm_dtl_no)"]
        SUB4A["subkey = value?"]
        SUB4A_RET4["return String.class"]
        SUB4B["subkey = state?"]
        SUB4B_RET4["return String.class"]

        BRANCH5["key = 状態<br/>(stat)"]
        SUB5A["subkey = value?"]
        SUB5A_RET5["return String.class"]
        SUB5B["subkey = enable?"]
        SUB5B_RET5["return Boolean.class"]
        SUB5C["subkey = state?"]
        SUB5C_RET5["return String.class"]

        BRANCH6["key = コース適用年月日<br/>(course_aply_ymd)"]
        SUB6A["subkey = value?"]
        SUB6A_RET6["return String.class"]
        SUB6B["subkey = enable?"]
        SUB6B_RET6["return Boolean.class"]
        SUB6C["subkey = state?"]
        SUB6C_RET6["return String.class"]

        BRANCH7["key = コース名<br/>(course_nm)"]
        SUB7A["subkey = value?"]
        SUB7A_RET7["return String.class"]
        SUB7B["subkey = enable?"]
        SUB7B_RET7["return Boolean.class"]
        SUB7C["subkey = state?"]
        SUB7C_RET7["return String.class"]

        BRANCH8["key = マンションID<br/>(mansion_id)"]
        SUB8A["subkey = value?"]
        SUB8A_RET8["return String.class"]
        SUB8B["subkey = enable?"]
        SUB8B_RET8["return Boolean.class"]
        SUB8C["subkey = state?"]
        SUB8C_RET8["return String.class"]

        BRANCH9["key = マンション名<br/>(mansion_nm)"]
        SUB9A["subkey = value?"]
        SUB9A_RET9["return String.class"]
        SUB9B["subkey = enable?"]
        SUB9B_RET9["return Boolean.class"]
        SUB9C["subkey = state?"]
        SUB9C_RET9["return String.class"]

        BRANCH10["key = 新料金コースコード<br/>(new_pcrs_cd)"]
        SUB10A["subkey = value?"]
        SUB10A_RET10["return String.class"]
        SUB10B["subkey = enable?"]
        SUB10B_RET10["return Boolean.class"]
        SUB10C["subkey = state?"]
        SUB10C_RET10["return String.class"]

        BRANCH11["key = 旧料金コースコード<br/>(old_pcrs_cd)"]
        SUB11A["subkey = value?"]
        SUB11A_RET11["return String.class"]
        SUB11B["subkey = enable?"]
        SUB11B_RET11["return Boolean.class"]
        SUB11C["subkey = state?"]
        SUB11C_RET11["return String.class"]
    end

    RETURN_NULL1 --> NO_MATCH["No matching<br/>property found"]
    BRANCH1 --> SUB1A
    SUB1A -->|Yes| SUB1A_RET1
    SUB1A -->|No| SUB1B
    SUB1B -->|Yes| SUB1B_RET1
    SUB1B -->|No| BRANCH2
    BRANCH2 --> SUB2A
    SUB2A -->|Yes| SUB2A_RET2
    SUB2A -->|No| SUB2B
    SUB2B -->|Yes| SUB2B_RET2
    SUB2B -->|No| BRANCH3
    BRANCH3 --> SUB3A
    SUB3A -->|Yes| SUB3A_RET3
    SUB3A -->|No| SUB3B
    SUB3B -->|Yes| SUB3B_RET3
    SUB3B -->|No| BRANCH4
    BRANCH4 --> SUB4A
    SUB4A -->|Yes| SUB4A_RET4
    SUB4A -->|No| SUB4B
    SUB4B -->|Yes| SUB4B_RET4
    SUB4B -->|No| BRANCH5
    BRANCH5 --> SUB5A
    SUB5A -->|Yes| SUB5A_RET5
    SUB5A -->|No| SUB5B
    SUB5B -->|Yes| SUB5B_RET5
    SUB5B -->|No| SUB5C
    SUB5C -->|Yes| SUB5C_RET5
    SUB5C -->|No| BRANCH6
    BRANCH6 --> SUB6A
    SUB6A -->|Yes| SUB6A_RET6
    SUB6A -->|No| SUB6B
    SUB6B -->|Yes| SUB6B_RET6
    SUB6B -->|No| SUB6C
    SUB6C -->|Yes| SUB6C_RET6
    SUB6C -->|No| BRANCH7
    BRANCH7 --> SUB7A
    SUB7A -->|Yes| SUB7A_RET7
    SUB7A -->|No| SUB7B
    SUB7B -->|Yes| SUB7B_RET7
    SUB7B -->|No| SUB7C
    SUB7C -->|Yes| SUB7C_RET7
    SUB7C -->|No| BRANCH8
    BRANCH8 --> SUB8A
    SUB8A -->|Yes| SUB8A_RET8
    SUB8A -->|No| SUB8B
    SUB8B -->|Yes| SUB8B_RET8
    SUB8B -->|No| SUB8C
    SUB8C -->|Yes| SUB8C_RET8
    SUB8C -->|No| BRANCH9
    BRANCH9 --> SUB9A
    SUB9A -->|Yes| SUB9A_RET9
    SUB9A -->|No| SUB9B
    SUB9B -->|Yes| SUB9B_RET9
    SUB9B -->|No| SUB9C
    SUB9C -->|Yes| SUB9C_RET9
    SUB9C -->|No| BRANCH10
    BRANCH10 --> SUB10A
    SUB10A -->|Yes| SUB10A_RET10
    SUB10A -->|No| SUB10B
    SUB10B -->|Yes| SUB10B_RET10
    SUB10B -->|No| SUB10C
    SUB10C -->|Yes| SUB10C_RET10
    SUB10C -->|No| BRANCH11
    BRANCH11 --> SUB11A
    SUB11A -->|Yes| SUB11A_RET11
    SUB11A -->|No| SUB11B
    SUB11B -->|Yes| SUB11B_RET11
    SUB11B -->|No| SUB11C
    SUB11C -->|Yes| SUB11C_RET11
    SUB11C -->|No| NO_MATCH
    NO_MATCH --> END_RETURN["return null"]
    SUB1A_RET1 --> NO_MATCH
    SUB1B_RET1 --> NO_MATCH
    SUB2A_RET2 --> NO_MATCH
    SUB2B_RET2 --> NO_MATCH
    SUB3A_RET3 --> NO_MATCH
    SUB3B_RET3 --> NO_MATCH
    SUB4A_RET4 --> NO_MATCH
    SUB4B_RET4 --> NO_MATCH
    SUB5A_RET5 --> NO_MATCH
    SUB5B_RET5 --> NO_MATCH
    SUB5C_RET5 --> NO_MATCH
    SUB6A_RET6 --> NO_MATCH
    SUB6B_RET6 --> NO_MATCH
    SUB6C_RET6 --> NO_MATCH
    SUB7A_RET7 --> NO_MATCH
    SUB7B_RET7 --> NO_MATCH
    SUB7C_RET7 --> NO_MATCH
    SUB8A_RET8 --> NO_MATCH
    SUB8B_RET8 --> NO_MATCH
    SUB8C_RET8 --> NO_MATCH
    SUB9A_RET9 --> NO_MATCH
    SUB9B_RET9 --> NO_MATCH
    SUB9C_RET9 --> NO_MATCH
    SUB10A_RET10 --> NO_MATCH
    SUB10B_RET10 --> NO_MATCH
    SUB10C_RET10 --> NO_MATCH
    SUB11A_RET11 --> NO_MATCH
    SUB11B_RET11 --> NO_MATCH
    SUB11C_RET11 --> NO_MATCH
```

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | The **business field name** (display label) of a course history list item. It identifies which field's type is being queried. Valid values are Japanese field labels corresponding to service contract, course, mansion, and pricing data fields. Examples: `"サービス契約内訳番号"` (Service Contract Breakdown Number), `"コース名"` (Course Name), `"マンションID"` (Mansion ID). Case-sensitive exact match. |
| 2 | `subkey` | `String` | The **meta-attribute subkey** specifying which aspect of the field's type the framework needs. Valid values: `"value"` — return the data value type; `"state"` — return the display state type; `"enable"` — return the enabled/disabled flag type. Checked using case-insensitive `equalsIgnoreCase`, so `"VALUE"`, `"Value"`, `"value"` are all accepted. |

**External/Instance State:**
This method is **stateless** — it does not read any instance fields or external state. It operates purely on the two input parameters and returns a `Class<?>` constant.

## 4. CRUD Operations / Called Services

This method performs **no database operations, no service calls, and no CRUD operations**. It is a pure in-memory type lookup with no I/O.

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| (None) | — | — | — | Pure type resolution — no data access. Returns Java `Class<?>` constants based on hardcoded field name routing. |

## 5. Dependency Trace

This method is a **framework callback** implemented to satisfy the `X33VDataTypeBeanInterface` contract. It is invoked by the X33V framework's model loading mechanism (`X33VDataTypeList.loadModelData`) when rendering the Course History List component on the KKW02701SF screen.

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Screen:KKW02701SF | `KKW02701SFBean` -> `X33VDataTypeList` -> `KKW02701SF02DBean.typeModelData(key, subkey)` | — (pure type lookup, no CRUD) |

**Notes on dependency:**
- The `KKW02701SFBean` (parent bean) creates a `X33VDataTypeList` of `KKW02701SF02DBean` instances for the `course_rk_list` data type list.
- When the framework needs to render a field in the course history list, it calls `loadModelData(fieldName, subkey)` on the `X33VDataTypeList` row, which delegates to `KKW02701SF02DBean.typeModelData(fieldName, subkey)`.
- No direct callers were found in the codebase that invoke this method programmatically — it is exclusively called by the X33V framework's reflection-based model loading.

## 6. Per-Branch Detail Blocks

**Block 1** — IF (null guard) `(key == null || subkey == null)` (L789)

> If either parameter is null, return null immediately. No further processing occurs.

| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = key.indexOf("/")` // Reserved character position check (value unused) |
| 2 | RETURN | `return null;` // Fields are null — no type info available |

---

**Block 2** — IF `[key.equals("サービス契約内訳番号")]` (L796) `(svc_kei_ucwk_no = Service Contract Breakdown Number)`

> The service contract breakdown number field. Both value and state attributes return String type.

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("サービス契約内訳番号")` — matches the service contract breakdown field |
| 2 | Block 2.1 | See below |

**Block 2.1** — IF `[subkey.equalsIgnoreCase("value")]` (L797)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` // The value of this field is a string |

**Block 2.2** — ELSE-IF `[subkey.equalsIgnoreCase("state")]` (L800) `(subkey == "state" の場合、ステータスを返す。)`

> When subkey is "state", return the status type.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` // The display state is a string |

---

**Block 3** — ELSE-IF `[key.equals("世代登録年月日時分秒")]` (L805) `(gene_add_dtm = Registration Timestamp)`

> The generation registration date-time field. Both value and state attributes return String type.

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("世代登録年月日時分秒")` — matches the registration timestamp field |
| 2 | Block 3.1 | See below |

**Block 3.1** — IF `[subkey.equalsIgnoreCase("value")]` (L806)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` // The value is a string (date-time formatted) |

**Block 3.2** — ELSE-IF `[subkey.equalsIgnoreCase("state")]` (L809)

> When subkey is "state", return the status type.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` // The display state is a string |

---

**Block 4** — ELSE-IF `[key.equals("異動予約番号")]` (L814) `(ido_rsv_no = Migration Reservation Number)`

> The migration reservation number field. Both value and state attributes return String type.

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("異動予約番号")` — matches the migration reservation number field |
| 2 | Block 4.1 | See below |

**Block 4.1** — IF `[subkey.equalsIgnoreCase("value")]` (L815)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` // The value is a string |

**Block 4.2** — ELSE-IF `[subkey.equalsIgnoreCase("state")]` (L818)

> When subkey is "state", return the status type.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` // The display state is a string |

---

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

> The application detail number field. Both value and state attributes return String type.

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("申込明細番号")` — matches the application detail number field |
| 2 | Block 5.1 | See below |

**Block 5.1** — IF `[subkey.equalsIgnoreCase("value")]` (L824)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` // The value is a string |

**Block 5.2** — ELSE-IF `[subkey.equalsIgnoreCase("state")]` (L827)

> When subkey is "state", return the status type.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` // The display state is a string |

---

**Block 6** — ELSE-IF `[key.equals("状態")]` (L832) `(stat = Status)`

> The status field. This field has three subkey variants: `"value"` (String), `"enable"` (Boolean — controls whether the field is enabled/disabled), and `"state"` (String).

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("状態")` — matches the status field (has enable control) |
| 2 | Block 6.1 | See below |

**Block 6.1** — IF `[subkey.equalsIgnoreCase("value")]` (L833)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` // The status value is a string |

**Block 6.2** — ELSE-IF `[subkey.equalsIgnoreCase("enable")]` (L836)

> When subkey is "enable", return Boolean — the status field has an enable/disable toggle.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return Boolean.class;` // The enabled state is a boolean |

**Block 6.3** — ELSE-IF `[subkey.equalsIgnoreCase("state")]` (L839) `(subkeyが"state"の場合、ステータスを返す。)`

> When subkey is "state", return the status type.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` // The display state is a string |

---

**Block 7** — ELSE-IF `[key.equals("コース適用年月日")]` (L844) `(course_aply_ymd = Course Application Date)`

> The course application date field. Three subkey variants: `"value"` (String), `"enable"` (Boolean), `"state"` (String).

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("コース適用年月日")` — matches the course application date field (has enable control) |
| 2 | Block 7.1 | See below |

**Block 7.1** — IF `[subkey.equalsIgnoreCase("value")]` (L845)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` // The value is a string (date formatted) |

**Block 7.2** — ELSE-IF `[subkey.equalsIgnoreCase("enable")]` (L848)

> When subkey is "enable", return Boolean — the course application date field has an enable/disable toggle.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return Boolean.class;` // The enabled state is a boolean |

**Block 7.3** — ELSE-IF `[subkey.equalsIgnoreCase("state")]` (L851) `(subkeyが"state"の場合、ステータスを返す。)`

> When subkey is "state", return the status type.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` // The display state is a string |

---

**Block 8** — ELSE-IF `[key.equals("コース名")]` (L856) `(course_nm = Course Name)`

> The course name field. Three subkey variants: `"value"` (String), `"enable"` (Boolean), `"state"` (String).

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("コース名")` — matches the course name field (has enable control) |
| 2 | Block 8.1 | See below |

**Block 8.1** — IF `[subkey.equalsIgnoreCase("value")]` (L857)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` // The course name is a string |

**Block 8.2** — ELSE-IF `[subkey.equalsIgnoreCase("enable")]` (L860)

> When subkey is "enable", return Boolean.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return Boolean.class;` // The enabled state is a boolean |

**Block 8.3** — ELSE-IF `[subkey.equalsIgnoreCase("state")]` (L863) `(subkeyが"state"の場合、ステータスを返す。)`

> When subkey is "state", return the status type.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` // The display state is a string |

---

**Block 9** — ELSE-IF `[key.equals("マンションID")]` (L868) `(mansion_id = Mansion ID)`

> The mansion ID field. Three subkey variants: `"value"` (String), `"enable"` (Boolean), `"state"` (String).

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("マンションID")` — matches the mansion ID field (has enable control) |
| 2 | Block 9.1 | See below |

**Block 9.1** — IF `[subkey.equalsIgnoreCase("value")]` (L869)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` // The mansion ID is a string |

**Block 9.2** — ELSE-IF `[subkey.equalsIgnoreCase("enable")]` (L872)

> When subkey is "enable", return Boolean.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return Boolean.class;` // The enabled state is a boolean |

**Block 9.3** — ELSE-IF `[subkey.equalsIgnoreCase("state")]` (L875) `(subkeyが"state"の場合、ステータスを返す。)`

> When subkey is "state", return the status type.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` // The display state is a string |

---

**Block 10** — ELSE-IF `[key.equals("マンション名")]` (L880) `(mansion_nm = Mansion Name)`

> The mansion name field. Three subkey variants: `"value"` (String), `"enable"` (Boolean), `"state"` (String).

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("マンション名")` — matches the mansion name field (has enable control) |
| 2 | Block 10.1 | See below |

**Block 10.1** — IF `[subkey.equalsIgnoreCase("value")]` (L881)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` // The mansion name is a string |

**Block 10.2** — ELSE-IF `[subkey.equalsIgnoreCase("enable")]` (L884)

> When subkey is "enable", return Boolean.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return Boolean.class;` // The enabled state is a boolean |

**Block 10.3** — ELSE-IF `[subkey.equalsIgnoreCase("state")]` (L887) `(subkeyが"state"の場合、ステータスを返す。)`

> When subkey is "state", return the status type.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` // The display state is a string |

---

**Block 11** — ELSE-IF `[key.equals("新料金コースコード")]` (L892) `(new_pcrs_cd = New Pricing Course Code)` — ANK-4592-00-00 ADD START

> The new pricing course code field. Part of the TV course (スカパー用 — Skiper usage) feature introduced in change request ANK-4592-00-00. Three subkey variants: `"value"` (String), `"enable"` (Boolean), `"state"` (String).

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("新料金コースコード")` — matches the new pricing course code field (has enable control) |
| 2 | Block 11.1 | See below |

**Block 11.1** — IF `[subkey.equalsIgnoreCase("value")]` (L893)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` // The new pricing course code is a string |

**Block 11.2** — ELSE-IF `[subkey.equalsIgnoreCase("enable")]` (L896)

> When subkey is "enable", return Boolean.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return Boolean.class;` // The enabled state is a boolean |

**Block 11.3** — ELSE-IF `[subkey.equalsIgnoreCase("state")]` (L899) `(subkeyが"state"の場合、ステータスを返す。)`

> When subkey is "state", return the status type.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` // The display state is a string |

---

**Block 12** — ELSE-IF `[key.equals("旧料金コースコード")]` (L904) `(old_pcrs_cd = Old Pricing Course Code)` — ANK-4592-00-00 ADD END

> The old pricing course code field. Part of the TV course (スカパー用) feature introduced in change request ANK-4592-00-00 for backward pricing comparison. Three subkey variants: `"value"` (String), `"enable"` (Boolean), `"state"` (String).

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("旧料金コースコード")` — matches the old pricing course code field (has enable control) |
| 2 | Block 12.1 | See below |

**Block 12.1** — IF `[subkey.equalsIgnoreCase("value")]` (L905)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` // The old pricing course code is a string |

**Block 12.2** — ELSE-IF `[subkey.equalsIgnoreCase("enable")]` (L908)

> When subkey is "enable", return Boolean.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return Boolean.class;` // The enabled state is a boolean |

**Block 12.3** — ELSE-IF `[subkey.equalsIgnoreCase("state")]` (L911) `(subkeyが"state"の場合、ステータスを返す。)`

> When subkey is "state", return the status type.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return String.class;` // The display state is a string |

---

**Block 13** — ELSE (L916)

> No matching property found — return null.

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

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `svc_kei_ucwk_no` | Field | Service contract breakdown number — internal tracking ID for service contract line items. Displayed as "サービス契約内訳番号". |
| `gene_add_dtm` | Field | Generation registration date-time — timestamp when a course data generation was registered. Displayed as "世代登録年月日時分秒". |
| `ido_rsv_no` | Field | Migration reservation number — ID for migration-related reservation records. Displayed as "異動予約番号". |
| `mskm_dtl_no` | Field | Application detail number — ID for application record details. Displayed as "申込明細番号". |
| `stat` | Field | Status — the current status of a record (e.g., active, cancelled). Displayed as "状態". Has an enable/disable toggle. |
| `course_aply_ymd` | Field | Course application date — the date a course was applied to a service contract. Displayed as "コース適用年月日". Has an enable/disable toggle. |
| `course_nm` | Field | Course name — the name/title of a service course. Displayed as "コース名". Has an enable/disable toggle. |
| `mansion_id` | Field | Mansion ID — unique identifier for a multi-unit dwelling (マンション/condominium) in the service area. Displayed as "マンションID". Has an enable/disable toggle. |
| `mansion_nm` | Field | Mansion name — the name/title of a multi-unit dwelling. Displayed as "マンション名". Has an enable/disable toggle. |
| `new_pcrs_cd` | Field | New pricing course code — the course code for the new pricing plan (post-change). Part of the TV course feature for Skiper (スカパー) comparison. Introduced in ANK-4592-00-00. Displayed as "新料金コースコード". |
| `old_pcrs_cd` | Field | Old pricing course code — the course code for the previous pricing plan (pre-change). Used for backward pricing comparison. Introduced in ANK-4592-00-00. Displayed as "旧料金コースコード". |
| X33V | Framework | Fujitsu Futurity X33V — a web client definition framework for Java EE applications. Provides data-driven screen generation with automatic type binding. |
| `X33VDataTypeList` | Component | A framework component that holds a list of data type beans. Used for rendering tabular data (e.g., course history list) on screen. |
| `X33VDataTypeBeanInterface` | Interface | The interface that `KKW02701SF02DBean` implements. Defines the `typeModelData()` contract for the framework to resolve field types. |
| KKW02701SF | Screen | Course history screen — displays and manages course (pricing plan) history for service contracts. |
| KKW02701SF02DBean | Bean | Data type bean for course history list rows. Holds individual fields of a course history record and provides type metadata via `typeModelData()`. |
| ANK-4592-00-00 | Change Request | Change request introducing TV course (Skiper) support — added new/old pricing course code fields. |
| `loadModelData` | Framework Method | Framework method that calls `typeModelData()` to resolve the type of a field for rendering. Part of the X33V data binding pipeline. |
