# Business Logic — KKW01031SF02DBean.loadModelData() [164 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKW01031SF.KKW01031SF02DBean` |
| Layer | Service (UI Data Bean — Web MVC tier, part of the X33V framework) |
| Module | `KKW01031SF` (Package: `eo.web.webview.KKW01031SF`) |

## 1. Role

### KKW01031SF02DBean.loadModelData()

This method is the **central data-access router** for a web-screen detail bean (DBean) in K-Opticom's FTTH (Fiber To The Home) subscription management application. It implements the X33V framework's `X33VDataTypeBeanInterface` contract, enabling UI components to dynamically request individual field attributes — value, editability (`enable`), and display state (`state`) — by specifying a **field label** (`key`) and an **attribute name** (`subkey`). The method uses a Japanese-language display label as the lookup key (e.g., `"番号／件数"` for "Number / Record Count", `"契約種別"` for "Contract Type") and maps it to the corresponding internal field via a long chain of if/else-if branches.

It implements the **routing/dispatch pattern**: each of the 13 key branches handles a distinct business field, and within each branch, the subkey determines whether the returned attribute is the current data value, the enabled/disabled flag, or the read-only state. Fields with `enable` support (e.g., `no_cnt`, `campaign_nm`, `stat_nm`, `type_cd_nm`, `aply_jun_nm`, `staymd`, `endymd`) expose 3 subkey branches (value/enable/state), while simpler fields expose only 2 (value/state).

The method is called exclusively by the parent screen bean `KKW01031SFBean` during model initialization (`loadModelData` delegation and `getListDataInstance` key inspection). It performs **no external calls** — all data is read from the bean's own protected instance fields, making it a pure in-memory data accessor. This method plays the role of a **presentation-tier data facade**, decoupling UI components from the internal field names by using human-readable Japanese labels as the query interface.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["loadModelData key subkey"])
    NULL_CHECK{key or subkey is null}
    SEPARATOR["int separaterPoint = key.indexOf /"]

    START --> NULL_CHECK
    NULL_CHECK -->|"Yes"| RETURN_NULL(["Return null"])
    NULL_CHECK -->|"No"| SEPARATOR
    SEPARATOR --> MAIN_CHECK{key equals<br/>番号／件数}
    MAIN_CHECK -->|"Yes"| NO_CNT_SUB{subkey equals<br/>value or enable or state}
    NO_CNT_SUB -->|"value"| NO_CNT_VAL["return getNo_cnt_value"]
    NO_CNT_SUB -->|"enable"| NO_CNT_ENA["return getNo_cnt_enabled"]
    NO_CNT_SUB -->|"state"| NO_CNT_STA["return getNo_cnt_state"]

    MAIN_CHECK -->|"No"| NO_KEY{key equals 番号}
    NO_KEY -->|"Yes"| NO_SUB{subkey equals value or state}
    NO_SUB -->|"value"| NO_VAL["return getNo_value"]
    NO_SUB -->|"state"| NO_STA["return getNo_state"]
    NO_KEY -->|"No"| KEI_KIND_KEY{key equals 契約種別}
    KEI_KIND_KEY -->|"Yes"| KEI_KIND_SUB{subkey equals value or state}
    KEI_KIND_SUB -->|"value"| KEI_KIND_VAL["return getKei_kind_value"]
    KEI_KIND_SUB -->|"state"| KEI_KIND_STA["return getKei_kind_state"]
    KEI_KIND_KEY -->|"No"| UPD_DTM_KEY{key equals<br/>更新年月日時分秒更新前}
    UPD_DTM_KEY -->|"Yes"| UPD_DTM_SUB{subkey equals value or state}
    UPD_DTM_SUB -->|"value"| UPD_DTM_VAL["return getUpd_dtm_bf_value"]
    UPD_DTM_SUB -->|"state"| UPD_DTM_STA["return getUpd_dtm_bf_state"]
    UPD_DTM_KEY -->|"No"| CAMPAIGN_KEY{key equals キャンペーン名称}
    CAMPAIGN_KEY -->|"Yes"| CAMPAIGN_SUB{subkey equals<br/>value or enable or state}
    CAMPAIGN_SUB -->|"value"| CAMPAIGN_VAL["return getCampaign_nm_value"]
    CAMPAIGN_SUB -->|"enable"| CAMPAIGN_ENA["return getCampaign_nm_enabled"]
    CAMPAIGN_SUB -->|"state"| CAMPAIGN_STA["return getCampaign_nm_state"]
    CAMPAIGN_KEY -->|"No"| STAT_KEY{key equals ステータス}
    STAT_KEY -->|"Yes"| STAT_SUB{subkey equals value or state}
    STAT_SUB -->|"value"| STAT_VAL["return getStat_value"]
    STAT_SUB -->|"state"| STAT_STA["return getStat_state"]
    STAT_KEY -->|"No"| STAT_NM_KEY{key equals ステータス名称}
    STAT_NM_KEY -->|"Yes"| STAT_NM_SUB{subkey equals<br/>value or enable or state}
    STAT_NM_SUB -->|"value"| STAT_NM_VAL["return getStat_nm_value"]
    STAT_NM_SUB -->|"enable"| STAT_NM_ENA["return getStat_nm_enabled"]
    STAT_NM_SUB -->|"state"| STAT_NM_STA["return getStat_nm_state"]
    STAT_NM_KEY -->|"No"| TYPE_CD_KEY{key equals タイプコード}
    TYPE_CD_KEY -->|"Yes"| TYPE_CD_SUB{subkey equals value or state}
    TYPE_CD_SUB -->|"value"| TYPE_CD_VAL["return getType_cd_value"]
    TYPE_CD_SUB -->|"state"| TYPE_CD_STA["return getType_cd_state"]
    TYPE_CD_KEY -->|"No"| TYPE_CD_NM_KEY{key equals タイプコード名称}
    TYPE_CD_NM_KEY -->|"Yes"| TYPE_CD_NM_SUB{subkey equals<br/>value or enable or state}
    TYPE_CD_NM_SUB -->|"value"| TYPE_CD_NM_VAL["return getType_cd_nm_value"]
    TYPE_CD_NM_SUB -->|"enable"| TYPE_CD_NM_ENA["return getType_cd_nm_enabled"]
    TYPE_CD_NM_SUB -->|"state"| TYPE_CD_NM_STA["return getType_cd_nm_state"]
    TYPE_CD_NM_KEY -->|"No"| APLY_JUN_KEY{key equals 即時適用フラグ}
    APLY_JUN_KEY -->|"Yes"| APLY_JUN_SUB{subkey equals value or state}
    APLY_JUN_SUB -->|"value"| APLY_JUN_VAL["return getAply_jun_value"]
    APLY_JUN_SUB -->|"state"| APLY_JUN_STA["return getAply_jun_state"]
    APLY_JUN_KEY -->|"No"| APLY_JUN_NM_KEY{key equals 即時適用フラグ名称}
    APLY_JUN_NM_KEY -->|"Yes"| APLY_JUN_NM_SUB{subkey equals<br/>value or enable or state}
    APLY_JUN_NM_SUB -->|"value"| APLY_JUN_NM_VAL["return getAply_jun_nm_value"]
    APLY_JUN_NM_SUB -->|"enable"| APLY_JUN_NM_ENA["return getAply_jun_nm_enabled"]
    APLY_JUN_NM_SUB -->|"state"| APLY_JUN_NM_STA["return getAply_jun_nm_state"]
    APLY_JUN_NM_KEY -->|"No"| STAYMD_KEY{key equals 開始年月日}
    STAYMD_KEY -->|"Yes"| STAYMD_SUB{subkey equals<br/>value or enable or state}
    STAYMD_SUB -->|"value"| STAYMD_VAL["return getStaymd_value"]
    STAYMD_SUB -->|"enable"| STAYMD_ENA["return getStaymd_enabled"]
    STAYMD_SUB -->|"state"| STAYMD_STA["return getStaymd_state"]
    STAYMD_KEY -->|"No"| ENDYMD_KEY{key equals 終了年月日}
    ENDYMD_KEY -->|"Yes"| ENDYMD_SUB{subkey equals<br/>value or enable or state}
    ENDYMD_SUB -->|"value"| ENDYMD_VAL["return getEndymd_value"]
    ENDYMD_SUB -->|"enable"| ENDYMD_ENA["return getEndymd_enabled"]
    ENDYMD_SUB -->|"state"| ENDYMD_STA["return getEndymd_state"]
    ENDYMD_KEY -->|"No"| FALLBACK(["Return null"])
```

**Processing Summary:**

The method executes a hierarchical dispatch:

1. **Null Guard (L486–490):** Immediately returns `null` if either `key` or `subkey` is null (Japanese comment: "key, subkey が null の場合、null を返す" — "If key/subkey is null, return null").
2. **Separator Scan (L492):** Scans `key` for a `/` character into `separaterPoint`. This variable is **declared but never used** — likely leftover from a prior routing variant that split composite keys.
3. **Field Routing (L495–L645):** A cascade of 13 if/else-if branches, each comparing `key` against a **literal Japanese display label**. Within each branch, the `subkey` (case-insensitive via `equalsIgnoreCase`) determines which attribute getter is invoked:
   - **3-attribute fields** (value/enable/state): `no_cnt` (番号／件数), `campaign_nm` (キャンペーン名称), `stat_nm` (ステータス名称), `type_cd_nm` (タイプコード名称), `aply_jun_nm` (即時適用フラグ名称), `staymd` (開始年月日), `endymd` (終了年月日)
   - **2-attribute fields** (value/state only): `no` (番号), `kei_kind` (契約種別), `upd_dtm_bf` (更新年月日時分秒更新前), `stat` (ステータス), `type_cd` (タイプコード), `aply_jun` (即時適用フラグ)
4. **Fallback (L647):** Returns `null` if no key matches.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | The **Japanese display label** of a form field whose data is being requested. Acts as the primary routing key — each unique value selects a different business data category (e.g., "番号／件数" selects the record count field, "契約種別" selects the contract type). Can contain a slash (`/`) for composite labels, though the separator is not currently used in routing. |
| 2 | `subkey` | `String` | The **attribute name** to retrieve for the specified field. Determines whether to return the data `value`, the `enable` flag (editability control), or the `state` (read-only/visual state). Values are case-insensitive. Not all fields support the `enable` attribute — only fields with a dedicated `*_enabled` instance field do. |

**Instance Fields Read (via getter delegation):**

| # | Field | Type | Business Meaning |
|---|-------|------|-----------------|
| 1 | `no_cnt_value` / `no_cnt_enabled` / `no_cnt_state` | `String` / `Boolean` / `String` | Record count — total number of subscription items/contracts (項目ID: no_cnt) |
| 2 | `no_value` / `no_state` | `String` / `String` | Item number/sequence — internal line item tracking ID (項目ID: no) |
| 3 | `kei_kind_value` / `kei_kind_state` | `String` / `String` | Contract type — type of service contract (項目ID: kei_kind) |
| 4 | `upd_dtm_bf_value` / `upd_dtm_bf_state` | `String` / `String` | Update date/time before — timestamp prior to the latest modification (項目ID: upd_dtm_bf) |
| 5 | `campaign_nm_value` / `campaign_nm_enabled` / `campaign_nm_state` | `String` / `Boolean` / `String` | Campaign name — promotional campaign identifier (項目ID: campaign_nm) |
| 6 | `stat_value` / `stat_state` | `String` / `String` | Status code — numeric/alpha status indicator (項目ID: stat) |
| 7 | `stat_nm_value` / `stat_nm_enabled` / `stat_nm_state` | `String` / `Boolean` / `String` | Status name — human-readable status description (項目ID: stat_nm) |
| 8 | `type_cd_value` / `type_cd_state` | `String` / `String` | Type code — service type classification code (項目ID: type_cd) |
| 9 | `type_cd_nm_value` / `type_cd_nm_enabled` / `type_cd_nm_state` | `String` / `Boolean` / `String` | Type code name — human-readable type description (項目ID: type_cd_nm) |
| 10 | `aply_jun_value` / `aply_jun_state` | `String` / `String` | Immediate apply flag — whether changes apply immediately (項目ID: aply_jun) |
| 11 | `aply_jun_nm_value` / `aply_jun_nm_enabled` / `aply_jun_nm_state` | `String` / `Boolean` / `String` | Immediate apply flag name — label text for the immediate apply flag (項目ID: aply_jun_nm) |
| 12 | `staymd_value` / `staymd_enabled` / `staymd_state` | `String` / `Boolean` / `String` | Start date — service commencement date (項目ID: staymd) |
| 13 | `endymd_value` / `endymd_enabled` / `endymd_state` | `String` / `Boolean` / `String` | End date — service termination date (項目ID: endymd) |

## 4. CRUD Operations / Called Services

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

This method performs **pure in-memory reads** — no database, no CBS, no SC calls. All operations delegate to the bean's own getter methods on its instance fields.

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `KKW01031SF02DBean.getNo_cnt_value` | KKW01031SF02DBean | — (in-memory field) | Returns the record count value (String) |
| R | `KKW01031SF02DBean.getNo_cnt_enabled` | KKW01031SF02DBean | — (in-memory field) | Returns the record count enabled flag (Boolean) |
| R | `KKW01031SF02DBean.getNo_cnt_state` | KKW01031SF02DBean | — (in-memory field) | Returns the record count state (String) |
| R | `KKW01031SF02DBean.getNo_value` | KKW01031SF02DBean | — (in-memory field) | Returns the item number value (String) |
| R | `KKW01031SF02DBean.getNo_state` | KKW01031SF02DBean | — (in-memory field) | Returns the item number state (String) |
| R | `KKW01031SF02DBean.getKei_kind_value` | KKW01031SF02DBean | — (in-memory field) | Returns the contract type value (String) |
| R | `KKW01031SF02DBean.getKei_kind_state` | KKW01031SF02DBean | — (in-memory field) | Returns the contract type state (String) |
| R | `KKW01031SF02DBean.getUpd_dtm_bf_value` | KKW01031SF02DBean | — (in-memory field) | Returns the pre-update timestamp value (String) |
| R | `KKW01031SF02DBean.getUpd_dtm_bf_state` | KKW01031SF02DBean | — (in-memory field) | Returns the pre-update timestamp state (String) |
| R | `KKW01031SF02DBean.getCampaign_nm_value` | KKW01031SF02DBean | — (in-memory field) | Returns the campaign name value (String) |
| R | `KKW01031SF02DBean.getCampaign_nm_enabled` | KKW01031SF02DBean | — (in-memory field) | Returns the campaign name enabled flag (Boolean) |
| R | `KKW01031SF02DBean.getCampaign_nm_state` | KKW01031SF02DBean | — (in-memory field) | Returns the campaign name state (String) |
| R | `KKW01031SF02DBean.getStat_value` | KKW01031SF02DBean | — (in-memory field) | Returns the status code value (String) |
| R | `KKW01031SF02DBean.getStat_state` | KKW01031SF02DBean | — (in-memory field) | Returns the status code state (String) |
| R | `KKW01031SF02DBean.getStat_nm_value` | KKW01031SF02DBean | — (in-memory field) | Returns the status name value (String) |
| R | `KKW01031SF02DBean.getStat_nm_enabled` | KKW01031SF02DBean | — (in-memory field) | Returns the status name enabled flag (Boolean) |
| R | `KKW01031SF02DBean.getStat_nm_state` | KKW01031SF02DBean | — (in-memory field) | Returns the status name state (String) |
| R | `KKW01031SF02DBean.getType_cd_value` | KKW01031SF02DBean | — (in-memory field) | Returns the type code value (String) |
| R | `KKW01031SF02DBean.getType_cd_state` | KKW01031SF02DBean | — (in-memory field) | Returns the type code state (String) |
| R | `KKW01031SF02DBean.getType_cd_nm_value` | KKW01031SF02DBean | — (in-memory field) | Returns the type code name value (String) |
| R | `KKW01031SF02DBean.getType_cd_nm_enabled` | KKW01031SF02DBean | — (in-memory field) | Returns the type code name enabled flag (Boolean) |
| R | `KKW01031SF02DBean.getType_cd_nm_state` | KKW01031SF02DBean | — (in-memory field) | Returns the type code name state (String) |
| R | `KKW01031SF02DBean.getAply_jun_value` | KKW01031SF02DBean | — (in-memory field) | Returns the immediate apply flag value (String) |
| R | `KKW01031SF02DBean.getAply_jun_state` | KKW01031SF02DBean | — (in-memory field) | Returns the immediate apply flag state (String) |
| R | `KKW01031SF02DBean.getAply_jun_nm_value` | KKW01031SF02DBean | — (in-memory field) | Returns the immediate apply flag name value (String) |
| R | `KKW01031SF02DBean.getAply_jun_nm_enabled` | KKW01031SF02DBean | — (in-memory field) | Returns the immediate apply flag name enabled flag (Boolean) |
| R | `KKW01031SF02DBean.getAply_jun_nm_state` | KKW01031SF02DBean | — (in-memory field) | Returns the immediate apply flag name state (String) |
| R | `KKW01031SF02DBean.getStaymd_value` | KKW01031SF02DBean | — (in-memory field) | Returns the start date value (String) |
| R | `KKW01031SF02DBean.getStaymd_enabled` | KKW01031SF02DBean | — (in-memory field) | Returns the start date enabled flag (Boolean) |
| R | `KKW01031SF02DBean.getStaymd_state` | KKW01031SF02DBean | — (in-memory field) | Returns the start date state (String) |
| R | `KKW01031SF02DBean.getEndymd_value` | KKW01031SF02DBean | — (in-memory field) | Returns the end date value (String) |
| R | `KKW01031SF02DBean.getEndymd_enabled` | KKW01031SF02DBean | — (in-memory field) | Returns the end date enabled flag (Boolean) |
| R | `KKW01031SF02DBean.getEndymd_state` | KKW01031SF02DBean | — (in-memory field) | Returns the end date state (String) |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Screen:KKW01031SF | `KKW01031SFBean.loadModelData` -> `KKW01031SF02DBean.loadModelData` | in-memory getter delegates (see Section 4) |
| 2 | Screen:KKW01031SF | `KKW01031SFBean.listKoumokuIds` -> `KKW01031SF02DBean.listKoumokuIds` (related) | in-memory field access |

**Caller Details:**

- **KKW01031SFBean.java (L1146):** Calls `KKW01031SF02DBean.listKoumokuIds()` (a sibling method that returns a list of all field key identifiers for the "キャンペーン一覧" / Campaign List display-type bean). This is a **sibling call**, not a call to `loadModelData` itself, but demonstrates the same delegation pattern.
- **KKW01031SFBean.java (L1218):** Creates `KKW01031SF02DBean tmpBean = new KKW01031SF02DBean()` for data-type bean-type instantiation, confirming the bean is used as a child bean for composite/dynamic data fields.

The `loadModelData` method is part of the **X33V framework's data-loading lifecycle**. In this framework, screen beans call `loadModelData()` to populate the view state. The detail bean (`KKW01031SF02DBean`) receives dynamic queries from the framework or parent bean for individual field attributes.

## 6. Per-Branch Detail Blocks

**Block 1** — [IF-NULL GUARD] `(key == null || subkey == null)` (L486–490)

> Guard clause: if either parameter is null, return null immediately. This prevents NPE on the subsequent string operations.
> (Japanese: "key, subkey が null の場合、null を返す" — "If key/subkey is null, return null")

| # | Type | Code |
|---|------|------|
| 1 | SET | `int separaterPoint = key.indexOf("/")` // Scans for '/' separator (L492) — **unused variable, declared but never read** |
| 2 | RETURN | `return null` // Guard: null parameters yield null output (L490) |

**Block 2** — [ELSE-IF: key equals "番号／件数"] (ITEM_ID: `no_cnt`) (L495–L507)

> Handles the "Number / Record Count" field. Supports 3 subkeys: value, enable, state.
> (Japanese: "データタイプがStringの項目「番号／件数」(項目ID:no_cnt)" — "Data type is a String field 'Number/Record Count' (Item ID: no_cnt)")

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("番号／件数")` [=="番号／件数"] (L495) |
| 2 | BLOCK 2.1 — [IF: subkey equals "value"] (L496–497) | |
| 2.1 | CALL | `getNo_cnt_value()` // Returns `no_cnt_value` field (String) |
| 2.2 | RETURN | `return getNo_cnt_value()` |
| 3 | BLOCK 2.2 — [ELSE-IF: subkey equals "enable"] (L498–500) | |
| 3.1 | IF | `subkey.equalsIgnoreCase("enable")` [=="enable" (case-insensitive)] |
| 3.2 | SET | (Japanese: "subkey が 'enable' の場合、no_cnt_enable の getter の戻り値を返す" — "When subkey is 'enable', return the no_cnt_enable getter value") |
| 3.3 | CALL | `getNo_cnt_enabled()` // Returns `no_cnt_enabled` field (Boolean) |
| 3.4 | RETURN | `return getNo_cnt_enabled()` |
| 4 | BLOCK 2.3 — [ELSE-IF: subkey equals "state"] (L501–504) | |
| 4.1 | IF | `subkey.equalsIgnoreCase("state")` [=="state" (case-insensitive)] |
| 4.2 | SET | (Japanese: "subkey が 'state' の場合、ステータスを返す" — "When subkey is 'state', return the status") |
| 4.3 | CALL | `getNo_cnt_state()` // Returns `no_cnt_state` field (String) |
| 4.4 | RETURN | `return getNo_cnt_state()` |

**Block 3** — [ELSE-IF: key equals "番号"] (ITEM_ID: `no`) (L507–L516)

> Handles the "Number" (sequence/item number) field. Supports 2 subkeys: value, state (no `enable` — the `no` field is read-only).
> (Japanese: "データタイプがStringの項目「番号」(項目ID:no)" — "Data type is a String field 'Number' (Item ID: no)")

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("番号")` [=="番号"] (L507) |
| 2 | BLOCK 3.1 — [IF: subkey equals "value"] (L508–509) | |
| 2.1 | CALL | `getNo_value()` // Returns `no_value` field (String) |
| 2.2 | RETURN | `return getNo_value()` |
| 3 | BLOCK 3.2 — [ELSE-IF: subkey equals "state"] (L510–513) | |
| 3.1 | IF | `subkey.equalsIgnoreCase("state")` [=="state"] |
| 3.2 | SET | (Japanese: "subkey が 'state' の場合、ステータスを返す" — "When subkey is 'state', return the status") |
| 3.3 | CALL | `getNo_state()` // Returns `no_state` field (String) |
| 3.4 | RETURN | `return getNo_state()` |

**Block 4** — [ELSE-IF: key equals "契約種別"] (ITEM_ID: `kei_kind`) (L516–L525)

> Handles the "Contract Type" field. Supports 2 subkeys: value, state.
> (Japanese: "データタイプがStringの項目「契約種別」(項目ID:kei_kind)" — "Data type is a String field 'Contract Type' (Item ID: kei_kind)")

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("契約種別")` [=="契約種別"] (L516) |
| 2 | BLOCK 4.1 — [IF: subkey equals "value"] (L517–518) | |
| 2.1 | CALL | `getKei_kind_value()` // Returns `kei_kind_value` field (String) |
| 2.2 | RETURN | `return getKei_kind_value()` |
| 3 | BLOCK 4.2 — [ELSE-IF: subkey equals "state"] (L519–522) | |
| 3.1 | IF | `subkey.equalsIgnoreCase("state")` [=="state"] |
| 3.2 | SET | (Japanese: "subkey が 'state' の場合、ステータスを返す" — "When subkey is 'state', return the status") |
| 3.3 | CALL | `getKei_kind_state()` // Returns `kei_kind_state` field (String) |
| 3.4 | RETURN | `return getKei_kind_state()` |

**Block 5** — [ELSE-IF: key equals "更新年月日時分秒更新前"] (ITEM_ID: `upd_dtm_bf`) (L525–L534)

> Handles the "Update Date/Time Before" field (the timestamp prior to the latest modification). Supports 2 subkeys: value, state.
> (Japanese: "データタイプがStringの項目「更新年月日時分秒更新前」(項目ID:upd_dtm_bf)" — "Data type is a String field 'Update Year/Month/Day/Time/Min/Sec Before Update' (Item ID: upd_dtm_bf)")

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("更新年月日時分秒更新前")` [=="更新年月日時分秒更新前"] (L525) |
| 2 | BLOCK 5.1 — [IF: subkey equals "value"] (L526–527) | |
| 2.1 | CALL | `getUpd_dtm_bf_value()` // Returns `upd_dtm_bf_value` field (String) |
| 2.2 | RETURN | `return getUpd_dtm_bf_value()` |
| 3 | BLOCK 5.2 — [ELSE-IF: subkey equals "state"] (L528–531) | |
| 3.1 | IF | `subkey.equalsIgnoreCase("state")` [=="state"] |
| 3.2 | SET | (Japanese: "subkey が 'state' の場合、ステータスを返す" — "When subkey is 'state', return the status") |
| 3.3 | CALL | `getUpd_dtm_bf_state()` // Returns `upd_dtm_bf_state` field (String) |
| 3.4 | RETURN | `return getUpd_dtm_bf_state()` |

**Block 6** — [ELSE-IF: key equals "キャンペーン名称"] (ITEM_ID: `campaign_nm`) (L534–L546)

> Handles the "Campaign Name" field. Supports 3 subkeys: value, enable, state. This field is **editable** (has an `enabled` flag).
> (Japanese: "データタイプがStringの項目「キャンペーン名称」(項目ID:campaign_nm)" — "Data type is a String field 'Campaign Name' (Item ID: campaign_nm)")

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("キャンペーン名称")` [=="キャンペーン名称"] (L534) |
| 2 | BLOCK 6.1 — [IF: subkey equals "value"] (L535–536) | |
| 2.1 | CALL | `getCampaign_nm_value()` // Returns `campaign_nm_value` field (String) |
| 2.2 | RETURN | `return getCampaign_nm_value()` |
| 3 | BLOCK 6.2 — [ELSE-IF: subkey equals "enable"] (L537–539) | |
| 3.1 | IF | `subkey.equalsIgnoreCase("enable")` [=="enable"] |
| 3.2 | SET | (Japanese: "subkey が 'enable' の場合、campaign_nm_enable の getter の戻り値を返す" — "When subkey is 'enable', return the campaign_nm_enable getter value") |
| 3.3 | CALL | `getCampaign_nm_enabled()` // Returns `campaign_nm_enabled` field (Boolean) |
| 3.4 | RETURN | `return getCampaign_nm_enabled()` |
| 4 | BLOCK 6.3 — [ELSE-IF: subkey equals "state"] (L540–543) | |
| 4.1 | IF | `subkey.equalsIgnoreCase("state")` [=="state"] |
| 4.2 | SET | (Japanese: "subkey が 'state' の場合、ステータスを返す" — "When subkey is 'state', return the status") |
| 4.3 | CALL | `getCampaign_nm_state()` // Returns `campaign_nm_state` field (String) |
| 4.4 | RETURN | `return getCampaign_nm_state()` |

**Block 7** — [ELSE-IF: key equals "ステータス"] (ITEM_ID: `stat`) (L546–L555)

> Handles the "Status" field (raw status code). Supports 2 subkeys: value, state.
> (Japanese: "データタイプがStringの項目「ステータス」(項目ID:stat)" — "Data type is a String field 'Status' (Item ID: stat)")

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("ステータス")` [=="ステータス"] (L546) |
| 2 | BLOCK 7.1 — [IF: subkey equals "value"] (L547–548) | |
| 2.1 | CALL | `getStat_value()` // Returns `stat_value` field (String) |
| 2.2 | RETURN | `return getStat_value()` |
| 3 | BLOCK 7.2 — [ELSE-IF: subkey equals "state"] (L549–552) | |
| 3.1 | IF | `subkey.equalsIgnoreCase("state")` [=="state"] |
| 3.2 | SET | (Japanese: "subkey が 'state' の場合、ステータスを返す" — "When subkey is 'state', return the status") |
| 3.3 | CALL | `getStat_state()` // Returns `stat_state` field (String) |
| 3.4 | RETURN | `return getStat_state()` |

**Block 8** — [ELSE-IF: key equals "ステータス名称"] (ITEM_ID: `stat_nm`) (L555–L567)

> Handles the "Status Name" field (human-readable status description). Supports 3 subkeys: value, enable, state. Editable field.
> (Japanese: "データタイプがStringの項目「ステータス名称」(項目ID:stat_nm)" — "Data type is a String field 'Status Name' (Item ID: stat_nm)")

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("ステータス名称")` [=="ステータス名称"] (L555) |
| 2 | BLOCK 8.1 — [IF: subkey equals "value"] (L556–557) | |
| 2.1 | CALL | `getStat_nm_value()` // Returns `stat_nm_value` field (String) |
| 2.2 | RETURN | `return getStat_nm_value()` |
| 3 | BLOCK 8.2 — [ELSE-IF: subkey equals "enable"] (L558–560) | |
| 3.1 | IF | `subkey.equalsIgnoreCase("enable")` [=="enable"] |
| 3.2 | SET | (Japanese: "subkey が 'enable' の場合、stat_nm_enable の getter の戻り値を返す" — "When subkey is 'enable', return the stat_nm_enable getter value") |
| 3.3 | CALL | `getStat_nm_enabled()` // Returns `stat_nm_enabled` field (Boolean) |
| 3.4 | RETURN | `return getStat_nm_enabled()` |
| 4 | BLOCK 8.3 — [ELSE-IF: subkey equals "state"] (L561–564) | |
| 4.1 | IF | `subkey.equalsIgnoreCase("state")` [=="state"] |
| 4.2 | SET | (Japanese: "subkey が 'state' の場合、ステータスを返す" — "When subkey is 'state', return the status") |
| 4.3 | CALL | `getStat_nm_state()` // Returns `stat_nm_state` field (String) |
| 4.4 | RETURN | `return getStat_nm_state()` |

**Block 9** — [ELSE-IF: key equals "タイプコード"] (ITEM_ID: `type_cd`) (L567–L576)

> Handles the "Type Code" field (service type classification code). Supports 2 subkeys: value, state.
> (Japanese: "データタイプがStringの項目「タイプコード」(項目ID:type_cd)" — "Data type is a String field 'Type Code' (Item ID: type_cd)")

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("タイプコード")` [=="タイプコード"] (L567) |
| 2 | BLOCK 9.1 — [IF: subkey equals "value"] (L568–569) | |
| 2.1 | CALL | `getType_cd_value()` // Returns `type_cd_value` field (String) |
| 2.2 | RETURN | `return getType_cd_value()` |
| 3 | BLOCK 9.2 — [ELSE-IF: subkey equals "state"] (L570–573) | |
| 3.1 | IF | `subkey.equalsIgnoreCase("state")` [=="state"] |
| 3.2 | SET | (Japanese: "subkey が 'state' の場合、ステータスを返す" — "When subkey is 'state', return the status") |
| 3.3 | CALL | `getType_cd_state()` // Returns `type_cd_state` field (String) |
| 3.4 | RETURN | `return getType_cd_state()` |

**Block 10** — [ELSE-IF: key equals "タイプコード名称"] (ITEM_ID: `type_cd_nm`) (L576–L588)

> Handles the "Type Code Name" field. Supports 3 subkeys: value, enable, state. Editable field.
> (Japanese: "データタイプがStringの項目「タイプコード名称」(項目ID:type_cd_nm)" — "Data type is a String field 'Type Code Name' (Item ID: type_cd_nm)")

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("タイプコード名称")` [=="タイプコード名称"] (L576) |
| 2 | BLOCK 10.1 — [IF: subkey equals "value"] (L577–578) | |
| 2.1 | CALL | `getType_cd_nm_value()` // Returns `type_cd_nm_value` field (String) |
| 2.2 | RETURN | `return getType_cd_nm_value()` |
| 3 | BLOCK 10.2 — [ELSE-IF: subkey equals "enable"] (L579–581) | |
| 3.1 | IF | `subkey.equalsIgnoreCase("enable")` [=="enable"] |
| 3.2 | SET | (Japanese: "subkey が 'enable' の場合、type_cd_nm_enable の getter の戻り値を返す" — "When subkey is 'enable', return the type_cd_nm_enable getter value") |
| 3.3 | CALL | `getType_cd_nm_enabled()` // Returns `type_cd_nm_enabled` field (Boolean) |
| 3.4 | RETURN | `return getType_cd_nm_enabled()` |
| 4 | BLOCK 10.3 — [ELSE-IF: subkey equals "state"] (L582–585) | |
| 4.1 | IF | `subkey.equalsIgnoreCase("state")` [=="state"] |
| 4.2 | SET | (Japanese: "subkey が 'state' の場合、ステータスを返す" — "When subkey is 'state', return the status") |
| 4.3 | CALL | `getType_cd_nm_state()` // Returns `type_cd_nm_state` field (String) |
| 4.4 | RETURN | `return getType_cd_nm_state()` |

**Block 11** — [ELSE-IF: key equals "即時適用フラグ"] (ITEM_ID: `aply_jun`) (L588–L597)

> Handles the "Immediate Apply Flag" field. Supports 2 subkeys: value, state.
> (Japanese: "データタイプがStringの項目「即時適用フラグ」(項目ID:aply_jun)" — "Data type is a String field 'Immediate Apply Flag' (Item ID: aply_jun)")

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("即時適用フラグ")` [=="即時適用フラグ"] (L588) |
| 2 | BLOCK 11.1 — [IF: subkey equals "value"] (L589–590) | |
| 2.1 | CALL | `getAply_jun_value()` // Returns `aply_jun_value` field (String) |
| 2.2 | RETURN | `return getAply_jun_value()` |
| 3 | BLOCK 11.2 — [ELSE-IF: subkey equals "state"] (L591–594) | |
| 3.1 | IF | `subkey.equalsIgnoreCase("state")` [=="state"] |
| 3.2 | SET | (Japanese: "subkey が 'state' の場合、ステータスを返す" — "When subkey is 'state', return the status") |
| 3.3 | CALL | `getAply_jun_state()` // Returns `aply_jun_state` field (String) |
| 3.4 | RETURN | `return getAply_jun_state()` |

**Block 12** — [ELSE-IF: key equals "即時適用フラグ名称"] (ITEM_ID: `aply_jun_nm`) (L597–L609)

> Handles the "Immediate Apply Flag Name" field. Supports 3 subkeys: value, enable, state. Editable field.
> (Japanese: "データタイプがStringの項目「即時適用フラグ名称」(項目ID:aply_jun_nm)" — "Data type is a String field 'Immediate Apply Flag Name' (Item ID: aply_jun_nm)")

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("即時適用フラグ名称")` [=="即時適用フラグ名称"] (L597) |
| 2 | BLOCK 12.1 — [IF: subkey equals "value"] (L598–599) | |
| 2.1 | CALL | `getAply_jun_nm_value()` // Returns `aply_jun_nm_value` field (String) |
| 2.2 | RETURN | `return getAply_jun_nm_value()` |
| 3 | BLOCK 12.2 — [ELSE-IF: subkey equals "enable"] (L600–602) | |
| 3.1 | IF | `subkey.equalsIgnoreCase("enable")` [=="enable"] |
| 3.2 | SET | (Japanese: "subkey が 'enable' の場合、aply_jun_nm_enable の getter の戻り値を返す" — "When subkey is 'enable', return the aply_jun_nm_enable getter value") |
| 3.3 | CALL | `getAply_jun_nm_enabled()` // Returns `aply_jun_nm_enabled` field (Boolean) |
| 3.4 | RETURN | `return getAply_jun_nm_enabled()` |
| 4 | BLOCK 12.3 — [ELSE-IF: subkey equals "state"] (L603–606) | |
| 4.1 | IF | `subkey.equalsIgnoreCase("state")` [=="state"] |
| 4.2 | SET | (Japanese: "subkey が 'state' の場合、ステータスを返す" — "When subkey is 'state', return the status") |
| 4.3 | CALL | `getAply_jun_nm_state()` // Returns `aply_jun_nm_state` field (String) |
| 4.4 | RETURN | `return getAply_jun_nm_state()` |

**Block 13** — [ELSE-IF: key equals "開始年月日"] (ITEM_ID: `staymd`) (L609–L621)

> Handles the "Start Date" field (service commencement date). Supports 3 subkeys: value, enable, state. Editable field.
> (Japanese: "データタイプがStringの項目「開始年月日」(項目ID:staymd)" — "Data type is a String field 'Start Year/Month/Day' (Item ID: staymd)")

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("開始年月日")` [=="開始年月日"] (L609) |
| 2 | BLOCK 13.1 — [IF: subkey equals "value"] (L610–611) | |
| 2.1 | CALL | `getStaymd_value()` // Returns `staymd_value` field (String) |
| 2.2 | RETURN | `return getStaymd_value()` |
| 3 | BLOCK 13.2 — [ELSE-IF: subkey equals "enable"] (L612–614) | |
| 3.1 | IF | `subkey.equalsIgnoreCase("enable")` [=="enable"] |
| 3.2 | SET | (Japanese: "subkey が 'enable' の場合、staymd_enable の getter の戻り値を返す" — "When subkey is 'enable', return the staymd_enable getter value") |
| 3.3 | CALL | `getStaymd_enabled()` // Returns `staymd_enabled` field (Boolean) |
| 3.4 | RETURN | `return getStaymd_enabled()` |
| 4 | BLOCK 13.3 — [ELSE-IF: subkey equals "state"] (L615–618) | |
| 4.1 | IF | `subkey.equalsIgnoreCase("state")` [=="state"] |
| 4.2 | SET | (Japanese: "subkey が 'state' の場合、ステータスを返す" — "When subkey is 'state', return the status") |
| 4.3 | CALL | `getStaymd_state()` // Returns `staymd_state` field (String) |
| 4.4 | RETURN | `return getStaymd_state()` |

**Block 14** — [ELSE-IF: key equals "終了年月日"] (ITEM_ID: `endymd`) (L621–L633)

> Handles the "End Date" field (service termination date). Supports 3 subkeys: value, enable, state. Editable field.
> (Japanese: "データタイプがStringの項目「終了年月日」(項目ID:endymd)" — "Data type is a String field 'End Year/Month/Day' (Item ID: endymd)")

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("終了年月日")` [=="終了年月日"] (L621) |
| 2 | BLOCK 14.1 — [IF: subkey equals "value"] (L622–623) | |
| 2.1 | CALL | `getEndymd_value()` // Returns `endymd_value` field (String) |
| 2.2 | RETURN | `return getEndymd_value()` |
| 3 | BLOCK 14.2 — [ELSE-IF: subkey equals "enable"] (L624–626) | |
| 3.1 | IF | `subkey.equalsIgnoreCase("enable")` [=="enable"] |
| 3.2 | SET | (Japanese: "subkey が 'enable' の場合、endymd_enable の getter の戻り値を返す" — "When subkey is 'enable', return the endymd_enable getter value") |
| 3.3 | CALL | `getEndymd_enabled()` // Returns `endymd_enabled` field (Boolean) |
| 3.4 | RETURN | `return getEndymd_enabled()` |
| 4 | BLOCK 14.3 — [ELSE-IF: subkey equals "state"] (L627–630) | |
| 4.1 | IF | `subkey.equalsIgnoreCase("state")` [=="state"] |
| 4.2 | SET | (Japanese: "subkey が 'state' の場合、ステータスを返す" — "When subkey is 'state', return the status") |
| 4.3 | CALL | `getEndymd_state()` // Returns `endymd_state` field (String) |
| 4.4 | RETURN | `return getEndymd_state()` |

**Block 15** — [FALLBACK ELSE] (L636–L637)

> (Japanese: "条件に一致するプロパティが存在しない場合は、null を返す" — "If no property matches the condition, return null")

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null` // No matching key was found in the 13-field dispatch chain |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `no_cnt` | Field | Record count — total number of subscription line items/contracts (項目ID: no_cnt, display: 番号／件数) |
| `no` | Field | Item number — internal sequence number / line item tracking ID (項目ID: no, display: 番号) |
| `kei_kind` | Field | Contract type — classification of the service contract type (項目ID: kei_kind, display: 契約種別) |
| `upd_dtm_bf` | Field | Update date/time before — timestamp prior to the latest modification (項目ID: upd_dtm_bf, display: 更新年月日時分秒更新前) |
| `campaign_nm` | Field | Campaign name — promotional campaign identifier (項目ID: campaign_nm, display: キャンペーン名称) |
| `stat` | Field | Status code — numeric/alpha status indicator (項目ID: stat, display: ステータス) |
| `stat_nm` | Field | Status name — human-readable status description (項目ID: stat_nm, display: ステータス名称) |
| `type_cd` | Field | Type code — service type classification code (項目ID: type_cd, display: タイプコード) |
| `type_cd_nm` | Field | Type code name — human-readable type description (項目ID: type_cd_nm, display: タイプコード名称) |
| `aply_jun` | Field | Immediate apply flag — boolean indicator whether changes take effect immediately (項目ID: aply_jun, display: 即時適用フラグ) |
| `aply_jun_nm` | Field | Immediate apply flag name — label text displayed for the immediate apply flag (項目ID: aply_jun_nm, display: 即時適用フラグ名称) |
| `staymd` | Field | Start date — service commencement date (項目ID: staymd, display: 開始年月日) |
| `endymd` | Field | End date — service termination/expiration date (項目ID: endymd, display: 終了年月日) |
| DBean | Acronym | Detail Bean — a presentation-tier data bean that holds form field values for a specific screen view in the X33V framework |
| X33V | Framework | Fujitsu Futurity X33V Web Application Framework — a model-view framework providing data bean interfaces for view state management |
| X33VDataTypeBeanInterface | Interface | Framework interface that data beans must implement to support dynamic attribute access (value/enable/state) via `loadModelData` |
| X33VListedBeanInterface | Interface | Framework interface for beans that manage repeatable list data |
| enable | Attribute | Editability flag — determines whether a field is editable (true) or read-only (false) in the UI |
| state | Attribute | Display state — determines the visual/interactive state of a field (e.g., normal, disabled, error) |
| FTTH | Business term | Fiber To The Home — fiber-optic broadband internet service, the primary service managed by this application |
| K-Opticom | Company | Japanese telecommunications company providing fiber-optic internet services |
