# Business Logic — KKW22101SF01DBean.storeModelData() [267 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKW22101SF.KKW22101SF01DBean` |
| Layer | View/Data Binding (Controller/Screen data transfer object) |
| Module | `KKW22101SF` (Package: `eo.web.webview.KKW22101SF`) |

## 1. Role

### KKW22101SF01DBean.storeModelData()

This method serves as a centralized **data-binding dispatcher** for the KKW22101SF screen (Service Contract Change / Plan Change screen), responsible for receiving arbitrary key-value pairs and routing them to the correct setter method on the DBean. In business terms, it deserializes user input or screen-bound data into typed model fields, supporting the telecom domain's service contract change workflow — where customers modify their FTTH (Fiber To The Home) service contracts, plans, pricing, and related options.

The method implements the **routing/dispatch pattern**: it uses a string-key lookup on the `key` parameter, then branches to one of 19 distinct business fields. Within each branch, it further dispatches based on the `subkey` ("value" or "state"), calling the corresponding `setXxx_value()` or `setXxx_state()` setter. Two fields (Displacement Reason Code and Option Service Contract Number) use **delegation**: they parse an index from the key, locate the corresponding item in a list, and recursively call `storeModelData` on a nested `X33VDataTypeStringBean` object, enabling structured list data binding.

The method plays a foundational role in the screen's **model-view binding** architecture — it is the primary ingestion point for all form-data binding into the DBean, supporting fields related to service contract numbers, pricing codes, migration/relocation codes, order numbers, and discount flags. It is called during screen initialization, postback processing, and popup result propagation.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["storeModelData key, subkey, in_value, isSetAsString"]) --> CHECK_NULL["Check: key==null OR subkey==null"]
    CHECK_NULL -->|Yes| RETURN["Return immediately"]
    CHECK_NULL -->|No| FIND_SEP["Find '/' separator index in key"]
    FIND_SEP --> ROUTE["Route on key value"]

    ROUTE --> SYSID["key == 'SYSTEM'"]
    SYSID -->|true| SUB_SYSID["Check subkey"]
    SUB_SYSID -->|value| SET_SYSID["setSysid_value((String)in_value)"]
    SUB_SYSID -->|state| SET_SYSID_STATE["setSysid_state((String)in_value)"]

    ROUTE --> SVC_KEI_NO["key == 'サービス契約番号'"]
    SVC_KEI_NO -->|true| SUB_SVC["Check subkey"]
    SUB_SVC -->|value| SET_SVC["setSvc_kei_no_value((String)in_value)"]
    SUB_SVC -->|state| SET_SVC_STATE["setSvc_kei_no_state((String)in_value)"]

    ROUTE --> IDO_DIV["key == '異動区分'"]
    IDO_DIV -->|true| SUB_IDO["Check subkey"]
    SUB_IDO -->|value| SET_IDO["setIdo_div_value((String)in_value)"]
    SUB_IDO -->|state| SET_IDO_STATE["setIdo_div_state((String)in_value)"]

    ROUTE --> IDO_RSN_CD["key == '異動理由コード'"]
    IDO_RSN_CD -->|true| PARSE_IDX["Parse index: substring after '/', Integer.valueOf"]
    PARSE_IDX --> TRY_IDX{"parseInt success?"}
    TRY_IDX -->|No| RETURN_NULL["tmpIndexInt = null"]
    TRY_IDX -->|Yes| CHECK_IDX["Check: tmpIndex >= 0 AND < ido_rsn_cd_list.size()"]
    CHECK_IDX -->|Valid| DELEGATE_IDO_RSN["Delegated storeModelData on X33VDataTypeStringBean in list"]
    CHECK_IDX -->|Invalid| SKIP_IDO_RSN["Skip - index out of range"]

    ROUTE --> IDO_RSN_MEMO["key == '異動理由メモ'"]
    IDO_RSN_MEMO -->|true| SUB_MEMO["Check subkey"]
    SUB_MEMO -->|value| SET_MEMO["setIdo_rsn_memo_value((String)in_value)"]
    SUB_MEMO -->|state| SET_MEMO_STATE["setIdo_rsn_memo_state((String)in_value)"]

    ROUTE --> HKTGI_IDO["key == '異動区分選択画面遷移パターン'"]
    HKTGI_IDO -->|true| SUB_HKTGI["Check subkey"]
    SUB_HKTGI -->|value| SET_HKTGI["setHktgi_ido_div_seni_ptn_value((String)in_value)"]
    SUB_HKTGI -->|state| SET_HKTGI_STATE["setHktgi_ido_div_seni_ptn_state((String)in_value)"]

    ROUTE --> OP_SVC["key == 'オプションサービス契約番号'"]
    OP_SVC -->|true| PARSE_OP_IDX["Parse index: substring after '/', Integer.valueOf"]
    PARSE_OP_IDX --> TRY_OP_IDX{"parseInt success?"}
    TRY_OP_IDX -->|No| RETURN_NULL_OP["tmpIndexInt = null"]
    TRY_OP_IDX -->|Yes| CHECK_OP_IDX["Check: tmpIndex >= 0 AND < op_svc_kei_no_list.size()"]
    CHECK_OP_IDX -->|Valid| DELEGATE_OP["Delegated storeModelData on X33VDataTypeStringBean in list"]
    CHECK_OP_IDX -->|Invalid| SKIP_OP["Skip - index out of range"]

    ROUTE --> TRAN_DIV["key == '処理区分'"]
    TRAN_DIV -->|true| SUB_TRAN["Check subkey"]
    SUB_TRAN -->|value| SET_TRAN["setTran_div_value((String)in_value)"]
    SUB_TRAN -->|state| SET_TRAN_STATE["setTran_div_state((String)in_value)"]

    ROUTE --> MSKM_NO["key == '申込番号'"]
    MSKM_NO -->|true| SUB_MSKM["Check subkey"]
    SUB_MSKM -->|value| SET_MSKM["setMskm_no_value((String)in_value)"]
    SUB_MSKM -->|state| SET_MSKM_STATE["setMskm_no_state((String)in_value)"]

    ROUTE --> MSKM_DTL["key == '申込明細番号'"]
    MSKM_DTL -->|true| SUB_MSKM_DTL["Check subkey"]
    SUB_MSKM_DTL -->|value| SET_MSKM_DTL["setMskm_dtl_no_value((String)in_value)"]
    SUB_MSKM_DTL -->|state| SET_MSKM_DTL_STATE["setMskm_dtl_no_state((String)in_value)"]

    ROUTE --> TOKU_ID_KMK_NM["key == '特定ID項目名'"]
    TOKU_ID_KMK_NM -->|true| SUB_TOKU_NM["Check subkey"]
    SUB_TOKU_NM -->|value| SET_TOKU_NM["setTokutei_id_kmk_nm_value((String)in_value)"]
    SUB_TOKU_NM -->|state| SET_TOKU_NM_STATE["setTokutei_id_kmk_nm_state((String)in_value)"]

    ROUTE --> TOKU_ID_KMK_VAL["key == '特定ID項目値'"]
    TOKU_ID_KMK_VAL -->|true| SUB_TOKU_VAL["Check subkey"]
    SUB_TOKU_VAL -->|value| SET_TOKU_VAL["setTokutei_id_kmk_value_value((String)in_value)"]
    SUB_TOKU_VAL -->|state| SET_TOKU_VAL_STATE["setTokutei_id_kmk_value_state((String)in_value)"]

    ROUTE --> POPUP["key == 'ポップアップモード'"]
    POPUP -->|true| SUB_POPUP["Check subkey"]
    SUB_POPUP -->|value| SET_POPUP["setPopup_mode_value((String)in_value)"]
    SUB_POPUP -->|state| SET_POPUP_STATE["setPopup_mode_state((String)in_value)"]

    ROUTE --> SVC_CD["key == 'サービスコード'"]
    SVC_CD -->|true| SUB_SVC_CD["Check subkey"]
    SUB_SVC_CD -->|value| SET_SVC_CD["setSvc_cd_value((String)in_value)"]
    SUB_SVC_CD -->|state| SET_SVC_CD_STATE["setSvc_cd_state((String)in_value)"]

    ROUTE --> PRC_GRP["key == '料金グループコード'"]
    PRC_GRP -->|true| SUB_PRC_GRP["Check subkey"]
    SUB_PRC_GRP -->|value| SET_PRC_GRP["setPrc_grp_cd_value((String)in_value)"]
    SUB_PRC_GRP -->|state| SET_PRC_GRP_STATE["setPrc_grp_cd_state((String)in_value)"]

    ROUTE --> PCR_CD["key == '料金コースコード'"]
    PCR_CD -->|true| SUB_PCR["Check subkey"]
    SUB_PCR -->|value| SET_PCR["setPcrs_cd_value((String)in_value)"]
    SUB_PCR -->|state| SET_PCR_STATE["setPcrs_cd_state((String)in_value)"]

    ROUTE --> PP_CD["key == '料金プランコード'"]
    PP_CD -->|true| SUB_PP["Check subkey"]
    SUB_PP -->|value| SET_PP["setPplan_cd_value((String)in_value)"]
    SUB_PP -->|state| SET_PP_STATE["setPplan_cd_state((String)in_value)"]

    ROUTE --> SVC_CD_BF["key == '変更前サービスコード'"]
    SVC_CD_BF -->|true| SUB_SVC_BF["Check subkey"]
    SUB_SVC_BF -->|value| SET_SVC_BF["setSvc_cd_bf_value((String)in_value)"]
    SUB_SVC_BF -->|state| SET_SVC_BF_STATE["setSvc_cd_bf_state((String)in_value)"]

    ROUTE --> PRC_GRP_BF["key == '変更前料金グループコード'"]
    PRC_GRP_BF -->|true| SUB_PRC_BF["Check subkey"]
    SUB_PRC_BF -->|value| SET_PRC_BF["setPrc_grp_cd_bf_value((String)in_value)"]
    SUB_PRC_BF -->|state| SET_PRC_BF_STATE["setPrc_grp_cd_bf_state((String)in_value)"]

    ROUTE --> PCR_BF["key == '変更前料金コースコード'"]
    PCR_BF -->|true| SUB_PCR_BF["Check subkey"]
    SUB_PCR_BF -->|value| SET_PCR_BF["setPcrs_cd_bf_value((String)in_value)"]
    SUB_PCR_BF -->|state| SET_PCR_BF_STATE["setPcrs_cd_bf_state((String)in_value)"]

    ROUTE --> PP_BF["key == '変更前料金プランコード'"]
    PP_BF -->|true| SUB_PP_BF["Check subkey"]
    SUB_PP_BF -->|value| SET_PP_BF["setPplan_cd_bf_value((String)in_value)"]
    SUB_PP_BF -->|state| SET_PP_BF_STATE["setPplan_cd_bf_state((String)in_value)"]

    ROUTE --> WRIB_AUTO["key == '割引自動適用対象外フラグ'"]
    WRIB_AUTO -->|true| SUB_WRIB["Check subkey"]
    SUB_WRIB -->|value| SET_WRIB["setWrib_auto_aply_tg_gai_flg_value((String)in_value)"]
    SUB_WRIB -->|state| SET_WRIB_STATE["setWrib_auto_aply_tg_gai_flg_state((String)in_value)"]

    ROUTE --> SYSCD["key == '外部システムコード'"]
    SYSCD -->|true| SUB_SYSCD["Check subkey"]
    SUB_SYSCD -->|value| SET_SYSCD["setSyscd_value((String)in_value)"]
    SUB_SYSCD -->|state| SET_SYSCD_STATE["setSyscd_state((String)in_value)"]

    SET_SYSID --> END(["Return / Next"])
    SET_SYSID_STATE --> END
    SET_SVC --> END
    SET_SVC_STATE --> END
    SET_IDO --> END
    SET_IDO_STATE --> END
    RETURN_NULL --> END
    DELEGATE_IDO_RSN --> END
    SKIP_IDO_RSN --> END
    SET_MEMO --> END
    SET_MEMO_STATE --> END
    SET_HKTGI --> END
    SET_HKTGI_STATE --> END
    RETURN_NULL_OP --> END
    DELEGATE_OP --> END
    SKIP_OP --> END
    SET_TRAN --> END
    SET_TRAN_STATE --> END
    SET_MSKM --> END
    SET_MSKM_STATE --> END
    SET_MSKM_DTL --> END
    SET_MSKM_DTL_STATE --> END
    SET_TOKU_NM --> END
    SET_TOKU_NM_STATE --> END
    SET_TOKU_VAL --> END
    SET_TOKU_VAL_STATE --> END
    SET_POPUP --> END
    SET_POPUP_STATE --> END
    SET_SVC_CD --> END
    SET_SVC_CD_STATE --> END
    SET_PRC_GRP --> END
    SET_PRC_GRP_STATE --> END
    SET_PCR --> END
    SET_PCR_STATE --> END
    SET_PP --> END
    SET_PP_STATE --> END
    SET_SVC_BF --> END
    SET_SVC_BF_STATE --> END
    SET_PRC_BF --> END
    SET_PRC_BF_STATE --> END
    SET_PCR_BF --> END
    SET_PCR_BF_STATE --> END
    SET_PP_BF --> END
    SET_PP_BF_STATE --> END
    SET_WRIB --> END
    SET_WRIB_STATE --> END
    SET_SYSCD --> END
    SET_SYSCD_STATE --> END
```

### Processing summary:

1. **Null guard**: If `key` or `subkey` is null, the method returns immediately — no-op (silently ignores the input).
2. **Separator detection**: Finds the position of "/" in `key` (used later for index-parsing branches).
3. **Key-based routing**: The method dispatches on 19 distinct key values (Japanese field name strings). Each key maps to a specific business attribute of the service contract change domain.
4. **Subkey dispatch**: Within each key branch, `subkey` is checked (case-insensitive) for "value" or "state", routing to the appropriate setter.
5. **List delegation**: Two keys (`"異動理由コード"` for Displacement Reason Code, and `"オプションサービス契約番号"` for Option Service Contract Number) are **compound keys** — the key contains a "/" followed by an array index. The method parses the index, validates bounds, then recursively delegates to the corresponding element's `storeModelData`, supporting list-style form data binding.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | The Japanese-labeled field identifier used to route data to the correct model property. Examples: "システム" (System ID), "サービス契約番号" (Service Contract Number), "異動区分" (Displacement Type), "サービスコード" (Service Code). For list fields (Displacement Reason Code, Option Service Contract Number), this key is compound — format: `fieldName/index` (e.g., "異動理由コード/0") — and the index portion is parsed into an array/list position. |
| 2 | `subkey` | `String` | The property accessor type within the matched field. Takes the value "value" to set the actual data value, or "state" to set metadata/state information. Comparison is case-insensitive. |
| 3 | `in_value` | `Object` | The actual data to be stored. Cast to `String` in all setter calls. For the two list-delegation branches, this is forwarded recursively to the nested `X33VDataTypeStringBean.storeModelData()` call. |
| 4 | `isSetAsString` | `boolean` | Flag indicating whether the value should be set as a string type for `Long`-type item properties. Currently only passed through to delegated list items; not used in the top-level setters. |

**Instance fields read by this method:**

| Field | Type | Usage |
|-------|------|-------|
| `ido_rsn_cd_list` | `List<X33VDataTypeStringBean>` | Used in the "Displacement Reason Code" delegation branch — stores a list of typed beans, each of which receives delegated data binding |
| `op_svc_kei_no_list` | `List<X33VDataTypeStringBean>` | Used in the "Option Service Contract Number" delegation branch — similar purpose for option service line items |

## 4. CRUD Operations / Called Services

This method does not perform direct database CRUD operations. All called methods are **setter methods** (updates to internal model state) and **delegate calls** to nested beans.

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| U | `setSysid_value` | N/A | DBean model field | Sets the System ID value (screen binding data) |
| U | `setSysid_state` | N/A | DBean model field | Sets the System ID state/metadata |
| U | `setSvc_kei_no_value` | N/A | DBean model field | Sets the Service Contract Number value |
| U | `setSvc_kei_no_state` | N/A | DBean model field | Sets the Service Contract Number state |
| U | `setIdo_div_value` | N/A | DBean model field | Sets the Displacement/Change Type value |
| U | `setIdo_div_state` | N/A | DBean model field | Sets the Displacement/Change Type state |
| U | `setIdo_rsn_cd_list` element | N/A | DBean model field | Delegates data binding into a list element of Displacement Reason Codes |
| U | `setIdo_rsn_memo_value` | N/A | DBean model field | Sets the Displacement Reason Memo value |
| U | `setIdo_rsn_memo_state` | N/A | DBean model field | Sets the Displacement Reason Memo state |
| U | `setHktgi_ido_div_seni_ptn_value` | N/A | DBean model field | Sets the Displacement Type Selection Screen Navigation Pattern value |
| U | `setHktgi_ido_div_seni_ptn_state` | N/A | DBean model field | Sets the Displacement Type Selection Screen Navigation Pattern state |
| U | `setOp_svc_kei_no_list` element | N/A | DBean model field | Delegates data binding into a list element of Option Service Contract Numbers |
| U | `setTran_div_value` | N/A | DBean model field | Sets the Processing Type value |
| U | `setTran_div_state` | N/A | DBean model field | Sets the Processing Type state |
| U | `setMskm_no_value` | N/A | DBean model field | Sets the Application Number (Order Number) value |
| U | `setMskm_no_state` | N/A | DBean model field | Sets the Application Number state |
| U | `setMskm_dtl_no_value` | N/A | DBean model field | Sets the Application Detail Number value |
| U | `setMskm_dtl_no_state` | N/A | DBean model field | Sets the Application Detail Number state |
| U | `setTokutei_id_kmk_nm_value` | N/A | DBean model field | Sets the Specific ID Item Name value |
| U | `setTokutei_id_kmk_nm_state` | N/A | DBean model field | Sets the Specific ID Item Name state |
| U | `setTokutei_id_kmk_value_value` | N/A | DBean model field | Sets the Specific ID Item Value value |
| U | `setTokutei_id_kmk_value_state` | N/A | DBean model field | Sets the Specific ID Item Value state |
| U | `setPopup_mode_value` | N/A | DBean model field | Sets the Popup Mode value |
| U | `setPopup_mode_state` | N/A | DBean model field | Sets the Popup Mode state |
| U | `setSvc_cd_value` | N/A | DBean model field | Sets the Service Code value |
| U | `setSvc_cd_state` | N/A | DBean model field | Sets the Service Code state |
| U | `setPrc_grp_cd_value` | N/A | DBean model field | Sets the Pricing Group Code value |
| U | `setPrc_grp_cd_state` | N/A | DBean model field | Sets the Pricing Group Code state |
| U | `setPcrs_cd_value` | N/A | DBean model field | Sets the Pricing Course Code value |
| U | `setPcrs_cd_state` | N/A | DBean model field | Sets the Pricing Course Code state |
| U | `setPplan_cd_value` | N/A | DBean model field | Sets the Pricing Plan Code value |
| U | `setPplan_cd_state` | N/A | DBean model field | Sets the Pricing Plan Code state |
| U | `setSvc_cd_bf_value` | N/A | DBean model field | Sets the Pre-Change Service Code value |
| U | `setSvc_cd_bf_state` | N/A | DBean model field | Sets the Pre-Change Service Code state |
| U | `setPrc_grp_cd_bf_value` | N/A | DBean model field | Sets the Pre-Change Pricing Group Code value |
| U | `setPrc_grp_cd_bf_state` | N/A | DBean model field | Sets the Pre-Change Pricing Group Code state |
| U | `setPcrs_cd_bf_value` | N/A | DBean model field | Sets the Pre-Change Pricing Course Code value |
| U | `setPcrs_cd_bf_state` | N/A | DBean model field | Sets the Pre-Change Pricing Course Code state |
| U | `setPplan_cd_bf_value` | N/A | DBean model field | Sets the Pre-Change Pricing Plan Code value |
| U | `setPplan_cd_bf_state` | N/A | DBean model field | Sets the Pre-Change Pricing Plan Code state |
| U | `setWrib_auto_aply_tg_gai_flg_value` | N/A | DBean model field | Sets the Discount Auto-Application Exclusion Flag value |
| U | `setWrib_auto_aply_tg_gai_flg_state` | N/A | DBean model field | Sets the Discount Auto-Application Exclusion Flag state |
| U | `setSyscd_value` | N/A | DBean model field | Sets the External System Code value |
| U | `setSyscd_state` | N/A | DBean model field | Sets the External System Code state |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Screen:KKSV0004 (implied) | `KKW22101SF01DBean` (self-call / recursive) -> `storeModelData` | 42 setter calls — all U (update DBean fields) |
| 2 | `KKW22101SF01DBean` | Direct self-reference / internal binding | `setSyscd_state [U]`, `setSyscd_value [U]`, `setWrib_auto_aply_tg_gai_flg_state [U]`, `setWrib_auto_aply_tg_gai_flg_value [U]`, `setPplan_cd_bf_state [U]`, `setPplan_cd_bf_value [U]`, `setPcrs_cd_bf_state [U]`, `setPcrs_cd_bf_value [U]`, `setPrc_grp_cd_bf_state [U]`, `setPrc_grp_cd_bf_value [U]`, `setSvc_cd_bf_state [U]`, `setSvc_cd_bf_value [U]`, `setPplan_cd_state [U]`, `setPplan_cd_value [U]`, `setPcrs_cd_state [U]`, `setPcrs_cd_value [U]`, `setPrc_grp_cd_state [U]`, `setPrc_grp_cd_value [U]`, `setSvc_cd_state [U]`, `setSvc_cd_value [U]`, `setPopup_mode_state [U]`, `setPopup_mode_value [U]`, `setMskm_no_state [U]`, `setMskm_no_value [U]`, `setMskm_dtl_no_state [U]`, `setMskm_dtl_no_value [U]`, `setIdo_div_state [U]`, `setIdo_div_value [U]`, `setIdo_rsn_memo_state [U]`, `setIdo_rsn_memo_value [U]`, `setHktgi_ido_div_seni_ptn_state [U]`, `setHktgi_ido_div_seni_ptn_value [U]`, `setTran_div_state [U]`, `setTran_div_value [U]`, `setTokutei_id_kmk_nm_state [U]`, `setTokutei_id_kmk_nm_value [U]`, `setTokutei_id_kmk_value_state [U]`, `setTokutei_id_kmk_value_value [U]`, `setSysid_state [U]`, `setSysid_value [U]`, `setSvc_kei_no_state [U]`, `setSvc_kei_no_value [U]` |

**Notes:** The callers are all internal to `KKW22101SF01DBean` — this method is called by other methods within the same class (e.g., during screen initialization or postback processing), and also called recursively for list element delegation. The terminal operations are exclusively U (update) operations that set DBean model fields.

## 6. Per-Branch Detail Blocks

### Block 1 — IF (null guard) (L991)

Null parameter guard — silently exits if either key or subkey is null.

| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = key.indexOf("/")` // Locate first '/' separator position [L993] |
| 2 | IF | `if (key == null || subkey == null)` // null guard [L991] |
| 2.1 | RETURN | `return;` // Abort — no processing when parameters are null |

---

### Block 2 — ELSE-IF (System ID) (L997)

Handle the "SYSTEM" field — maps to `sysid` (システム / system identifier).

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key.equals("システム"))` // key == "SYSTEM" [L997] |
| 1.1 | ELSE-IF | `if (subkey.equalsIgnoreCase("value"))` // property accessor = value [L998] |
| 1.1.1 | EXEC | `setSysid_value((String)in_value)` // Set System ID value |
| 1.2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // property accessor = state [L999] |
| 1.2.1 | EXEC | `setSysid_state((String)in_value)` // Set System ID state |

---

### Block 3 — ELSE-IF (Service Contract Number) (L1005)

Handle "サービス契約番号" — the service contract number (svc_kei_no).

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key.equals("サービス契約番号"))` // key == "Service Contract Number" [L1005] |
| 1.1 | ELSE-IF | `if (subkey.equalsIgnoreCase("value"))` // property accessor = value [L1006] |
| 1.1.1 | EXEC | `setSvc_kei_no_value((String)in_value)` // Set Service Contract Number value |
| 1.2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // property accessor = state [L1007] |
| 1.2.1 | EXEC | `setSvc_kei_no_state((String)in_value)` // Set Service Contract Number state |

---

### Block 4 — ELSE-IF (Displacement Type) (L1013)

Handle "異動区分" — the displacement/change type code (ido_div).

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key.equals("異動区分"))` // key == "Displacement Type" [L1013] |
| 1.1 | ELSE-IF | `if (subkey.equalsIgnoreCase("value"))` // property accessor = value [L1014] |
| 1.1.1 | EXEC | `setIdo_div_value((String)in_value)` // Set Displacement Type value |
| 1.2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // property accessor = state [L1015] |
| 1.2.1 | EXEC | `setIdo_div_state((String)in_value)` // Set Displacement Type state |

---

### Block 5 — ELSE-IF (Displacement Reason Code) — List Delegation (L1021)

Handle "異動理由コード" — Displacement Reason Code as a **repeating list**. The key is compound: `"異動理由コード/index"` where the index selects which list element receives the data. This supports multiple displacement reason entries on the same screen.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key.equals("異動理由コード"))` // key == "Displacement Reason Code" [L1021] |
| 1.1 | SET | `key = key.substring(separaterPoint + 1)` // Extract portion after '/' (e.g., "0" from "異動理由コード/0") [L1023] |
| 1.2 | SET | `tmpIndexInt = null` // Initialize parser result to null [L1025] |
| 1.3 | TRY | `tmpIndexInt = Integer.valueOf(key)` // Parse extracted substring as integer [L1027] |
| 1.4 | CATCH | `catch (NumberFormatException e) { tmpIndexInt = null; }` // On parse failure, return null [L1031] |
| 1.5 | IF | `if (tmpIndexInt != null)` // Index was a valid number [L1033] |
| 1.5.1 | SET | `tmpIndex = tmpIndexInt.intValue()` // Convert Integer to int [L1034] |
| 1.5.2 | IF | `if (tmpIndex >= 0 && tmpIndex < ido_rsn_cd_list.size())` // Index within bounds [L1035] |
| 1.5.2.1 | EXEC | `((X33VDataTypeStringBean)ido_rsn_cd_list.get(tmpIndex)).storeModelData(subkey, in_value)` // Delegate to list element — casts list item to typed bean and recursively calls its storeModelData, passing subkey and in_value; comment: "The cast portion specifies one of X33VDataTypeStringBean, X33VDataTypeLongBean, X33VDataTypeBooleanBean depending on the item definition type. For X33VDataTypeLongBean, subkey, input value, and isSetAsString flag are specified as parameters." |

---

### Block 6 — ELSE-IF (Displacement Reason Memo) (L1041)

Handle "異動理由メモ" — the Displacement Reason memo/free-text field (ido_rsn_memo).

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key.equals("異動理由メモ"))` // key == "Displacement Reason Memo" [L1041] |
| 1.1 | ELSE-IF | `if (subkey.equalsIgnoreCase("value"))` // property accessor = value [L1042] |
| 1.1.1 | EXEC | `setIdo_rsn_memo_value((String)in_value)` // Set Displacement Reason Memo value |
| 1.2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // property accessor = state [L1043] |
| 1.2.1 | EXEC | `setIdo_rsn_memo_state((String)in_value)` // Set Displacement Reason Memo state |

---

### Block 7 — ELSE-IF (Displacement Screen Navigation Pattern) (L1049)

Handle "異動区分選択画面遷移パターン" — the Displacement Type Selection Screen Navigation Pattern (hktgi_ido_div_seni_ptn).

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key.equals("異動区分選択画面遷移パターン"))` // key == "Displacement Type Selection Screen Navigation Pattern" [L1049] |
| 1.1 | ELSE-IF | `if (subkey.equalsIgnoreCase("value"))` // property accessor = value [L1050] |
| 1.1.1 | EXEC | `setHktgi_ido_div_seni_ptn_value((String)in_value)` // Set the navigation pattern value |
| 1.2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // property accessor = state [L1051] |
| 1.2.1 | EXEC | `setHktgi_ido_div_seni_ptn_state((String)in_value)` // Set the navigation pattern state |

---

### Block 8 — ELSE-IF (Option Service Contract Number) — List Delegation (L1057)

Handle "オプションサービス契約番号" — Option Service Contract Number as a **repeating list**. Similar pattern to Block 5: compound key with index, bounds-checked list element delegation.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key.equals("オプションサービス契約番号"))` // key == "Option Service Contract Number" [L1057] |
| 1.1 | SET | `key = key.substring(separaterPoint + 1)` // Extract portion after '/' (e.g., "0" from "オプションサービス契約番号/0") [L1059] |
| 1.2 | SET | `tmpIndexInt = null` // Initialize parser result to null [L1061] |
| 1.3 | TRY | `tmpIndexInt = Integer.valueOf(key)` // Parse extracted substring as integer [L1063] |
| 1.4 | CATCH | `catch (NumberFormatException e) { tmpIndexInt = null; }` // On parse failure, return null [L1067] |
| 1.5 | IF | `if (tmpIndexInt != null)` // Index was a valid number [L1069] |
| 1.5.1 | SET | `tmpIndex = tmpIndexInt.intValue()` // Convert Integer to int [L1070] |
| 1.5.2 | IF | `if (tmpIndex >= 0 && tmpIndex < op_svc_kei_no_list.size())` // Index within bounds [L1071] |
| 1.5.2.1 | EXEC | `((X33VDataTypeStringBean)op_svc_kei_no_list.get(tmpIndex)).storeModelData(subkey, in_value)` // Delegate to list element — casts list item to typed bean and recursively calls its storeModelData |

---

### Block 9 — ELSE-IF (Processing Type) (L1077)

Handle "処理区分" — the Processing Type (tran_div).

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key.equals("処理区分"))` // key == "Processing Type" [L1077] |
| 1.1 | ELSE-IF | `if (subkey.equalsIgnoreCase("value"))` // property accessor = value [L1078] |
| 1.1.1 | EXEC | `setTran_div_value((String)in_value)` // Set Processing Type value |
| 1.2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // property accessor = state [L1079] |
| 1.2.1 | EXEC | `setTran_div_state((String)in_value)` // Set Processing Type state |

---

### Block 10 — ELSE-IF (Application Number) (L1085)

Handle "申込番号" — the Application Number (mskm_no).

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key.equals("申込番号"))` // key == "Application Number" [L1085] |
| 1.1 | ELSE-IF | `if (subkey.equalsIgnoreCase("value"))` // property accessor = value [L1086] |
| 1.1.1 | EXEC | `setMskm_no_value((String)in_value)` // Set Application Number value |
| 1.2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // property accessor = state [L1087] |
| 1.2.1 | EXEC | `setMskm_no_state((String)in_value)` // Set Application Number state |

---

### Block 11 — ELSE-IF (Application Detail Number) (L1093)

Handle "申込明細番号" — the Application Detail Number (mskm_dtl_no).

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key.equals("申込明細番号"))` // key == "Application Detail Number" [L1093] |
| 1.1 | ELSE-IF | `if (subkey.equalsIgnoreCase("value"))` // property accessor = value [L1094] |
| 1.1.1 | EXEC | `setMskm_dtl_no_value((String)in_value)` // Set Application Detail Number value |
| 1.2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // property accessor = state [L1095] |
| 1.2.1 | EXEC | `setMskm_dtl_no_state((String)in_value)` // Set Application Detail Number state |

---

### Block 12 — ELSE-IF (Specific ID Item Name) (L1101)

Handle "特定ID項目名" — the Specific ID Item Name (tokutei_id_kmk_nm).

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key.equals("特定ID項目名"))` // key == "Specific ID Item Name" [L1101] |
| 1.1 | ELSE-IF | `if (subkey.equalsIgnoreCase("value"))` // property accessor = value [L1102] |
| 1.1.1 | EXEC | `setTokutei_id_kmk_nm_value((String)in_value)` // Set Specific ID Item Name value |
| 1.2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // property accessor = state [L1103] |
| 1.2.1 | EXEC | `setTokutei_id_kmk_nm_state((String)in_value)` // Set Specific ID Item Name state |

---

### Block 13 — ELSE-IF (Specific ID Item Value) (L1109)

Handle "特定ID項目値" — the Specific ID Item Value (tokutei_id_kmk_value).

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key.equals("特定ID項目値"))` // key == "Specific ID Item Value" [L1109] |
| 1.1 | ELSE-IF | `if (subkey.equalsIgnoreCase("value"))` // property accessor = value [L1110] |
| 1.1.1 | EXEC | `setTokutei_id_kmk_value_value((String)in_value)` // Set Specific ID Item Value value |
| 1.2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // property accessor = state [L1111] |
| 1.2.1 | EXEC | `setTokutei_id_kmk_value_state((String)in_value)` // Set Specific ID Item Value state |

---

### Block 14 — ELSE-IF (Popup Mode) (L1117)

Handle "ポップアップモード" — the Popup Mode (popup_mode).

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key.equals("ポップアップモード"))` // key == "Popup Mode" [L1117] |
| 1.1 | ELSE-IF | `if (subkey.equalsIgnoreCase("value"))` // property accessor = value [L1118] |
| 1.1.1 | EXEC | `setPopup_mode_value((String)in_value)` // Set Popup Mode value |
| 1.2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // property accessor = state [L1119] |
| 1.2.1 | EXEC | `setPopup_mode_state((String)in_value)` // Set Popup Mode state |

---

### Block 15 — ELSE-IF (Service Code) (L1125)

Handle "サービスコード" — the Service Code (svc_cd).

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key.equals("サービスコード"))` // key == "Service Code" [L1125] |
| 1.1 | ELSE-IF | `if (subkey.equalsIgnoreCase("value"))` // property accessor = value [L1126] |
| 1.1.1 | EXEC | `setSvc_cd_value((String)in_value)` // Set Service Code value |
| 1.2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // property accessor = state [L1127] |
| 1.2.1 | EXEC | `setSvc_cd_state((String)in_value)` // Set Service Code state |

---

### Block 16 — ELSE-IF (Pricing Group Code) (L1133)

Handle "料金グループコード" — the Pricing Group Code (prc_grp_cd).

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key.equals("料金グループコード"))` // key == "Pricing Group Code" [L1133] |
| 1.1 | ELSE-IF | `if (subkey.equalsIgnoreCase("value"))` // property accessor = value [L1134] |
| 1.1.1 | EXEC | `setPrc_grp_cd_value((String)in_value)` // Set Pricing Group Code value |
| 1.2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // property accessor = state [L1135] |
| 1.2.1 | EXEC | `setPrc_grp_cd_state((String)in_value)` // Set Pricing Group Code state |

---

### Block 17 — ELSE-IF (Pricing Course Code) (L1141)

Handle "料金コースコード" — the Pricing Course Code (pcrs_cd).

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key.equals("料金コースコード"))` // key == "Pricing Course Code" [L1141] |
| 1.1 | ELSE-IF | `if (subkey.equalsIgnoreCase("value"))` // property accessor = value [L1142] |
| 1.1.1 | EXEC | `setPcrs_cd_value((String)in_value)` // Set Pricing Course Code value |
| 1.2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // property accessor = state [L1143] |
| 1.2.1 | EXEC | `setPcrs_cd_state((String)in_value)` // Set Pricing Course Code state |

---

### Block 18 — ELSE-IF (Pricing Plan Code) (L1149)

Handle "料金プランコード" — the Pricing Plan Code (pplan_cd).

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key.equals("料金プランコード"))` // key == "Pricing Plan Code" [L1149] |
| 1.1 | ELSE-IF | `if (subkey.equalsIgnoreCase("value"))` // property accessor = value [L1150] |
| 1.1.1 | EXEC | `setPplan_cd_value((String)in_value)` // Set Pricing Plan Code value |
| 1.2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // property accessor = state [L1151] |
| 1.2.1 | EXEC | `setPplan_cd_state((String)in_value)` // Set Pricing Plan Code state |

---

### Block 19 — ELSE-IF (Pre-Change Service Code) (L1157)

Handle "変更前サービスコード" — the Pre-Change Service Code (svc_cd_bf). Stores the service code value before the change.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key.equals("変更前サービスコード"))` // key == "Pre-Change Service Code" [L1157] |
| 1.1 | ELSE-IF | `if (subkey.equalsIgnoreCase("value"))` // property accessor = value [L1158] |
| 1.1.1 | EXEC | `setSvc_cd_bf_value((String)in_value)` // Set Pre-Change Service Code value |
| 1.2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // property accessor = state [L1159] |
| 1.2.1 | EXEC | `setSvc_cd_bf_state((String)in_value)` // Set Pre-Change Service Code state |

---

### Block 20 — ELSE-IF (Pre-Change Pricing Group Code) (L1165)

Handle "変更前料金グループコード" — the Pre-Change Pricing Group Code (prc_grp_cd_bf).

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key.equals("変更前料金グループコード"))` // key == "Pre-Change Pricing Group Code" [L1165] |
| 1.1 | ELSE-IF | `if (subkey.equalsIgnoreCase("value"))` // property accessor = value [L1166] |
| 1.1.1 | EXEC | `setPrc_grp_cd_bf_value((String)in_value)` // Set Pre-Change Pricing Group Code value |
| 1.2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // property accessor = state [L1167] |
| 1.2.1 | EXEC | `setPrc_grp_cd_bf_state((String)in_value)` // Set Pre-Change Pricing Group Code state |

---

### Block 21 — ELSE-IF (Pre-Change Pricing Course Code) (L1173)

Handle "変更前料金コースコード" — the Pre-Change Pricing Course Code (pcrs_cd_bf).

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key.equals("変更前料金コースコード"))` // key == "Pre-Change Pricing Course Code" [L1173] |
| 1.1 | ELSE-IF | `if (subkey.equalsIgnoreCase("value"))` // property accessor = value [L1174] |
| 1.1.1 | EXEC | `setPcrs_cd_bf_value((String)in_value)` // Set Pre-Change Pricing Course Code value |
| 1.2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // property accessor = state [L1175] |
| 1.2.1 | EXEC | `setPcrs_cd_bf_state((String)in_value)` // Set Pre-Change Pricing Course Code state |

---

### Block 22 — ELSE-IF (Pre-Change Pricing Plan Code) (L1181)

Handle "変更前料金プランコード" — the Pre-Change Pricing Plan Code (pplan_cd_bf).

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key.equals("変更前料金プランコード"))` // key == "Pre-Change Pricing Plan Code" [L1181] |
| 1.1 | ELSE-IF | `if (subkey.equalsIgnoreCase("value"))` // property accessor = value [L1182] |
| 1.1.1 | EXEC | `setPplan_cd_bf_value((String)in_value)` // Set Pre-Change Pricing Plan Code value |
| 1.2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // property accessor = state [L1183] |
| 1.2.1 | EXEC | `setPplan_cd_bf_state((String)in_value)` // Set Pre-Change Pricing Plan Code state |

---

### Block 23 — ELSE-IF (Discount Auto-Application Exclusion Flag) (L1189)

Handle "割引自動適用対象外フラグ" — the Discount Auto-Application Exclusion Flag (wrib_auto_aply_tg_gai_flg). Indicates whether discounts should be excluded from auto-application.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key.equals("割引自動適用対象外フラグ"))` // key == "Discount Auto-Application Exclusion Flag" [L1189] |
| 1.1 | ELSE-IF | `if (subkey.equalsIgnoreCase("value"))` // property accessor = value [L1190] |
| 1.1.1 | EXEC | `setWrib_auto_aply_tg_gai_flg_value((String)in_value)` // Set the exclusion flag value |
| 1.2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // property accessor = state [L1191] |
| 1.2.1 | EXEC | `setWrib_auto_aply_tg_gai_flg_state((String)in_value)` // Set the exclusion flag state |

---

### Block 24 — ELSE-IF (External System Code) (L1197)

Handle "外部システムコード" — the External System Code (syscd).

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (key.equals("外部システムコード"))` // key == "External System Code" [L1197] |
| 1.1 | ELSE-IF | `if (subkey.equalsIgnoreCase("value"))` // property accessor = value [L1198] |
| 1.1.1 | EXEC | `setSyscd_value((String)in_value)` // Set External System Code value |
| 1.2 | ELSE-IF | `else if (subkey.equalsIgnoreCase("state"))` // property accessor = state [L1199] |
| 1.2.1 | EXEC | `setSyscd_state((String)in_value)` // Set External System Code state |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `sysid` | Field | System ID — internal system identifier for the screen/module instance |
| `svc_kei_no` | Field | Service Contract Number — the unique identifier for a customer's service contract line |
| `ido_div` | Field | Displacement/Change Type — classifies the type of service change (e.g., new connection, transfer, cancellation) |
| `ido_rsn_cd` | Field | Displacement Reason Code — the reason code for the service change, stored as a repeating list to support multiple reasons |
| `ido_rsn_memo` | Field | Displacement Reason Memo — free-text field for additional reason details |
| `hktgi_ido_div_seni_ptn` | Field | Displacement Type Selection Screen Navigation Pattern — determines which navigation pattern/screen flow is used for displacement type selection |
| `op_svc_kei_no` | Field | Option Service Contract Number — option/add-on service line items associated with the main contract, stored as a repeating list |
| `tran_div` | Field | Processing Type — classifies the processing category (e.g., new, change, cancel) |
| `mskm_no` | Field | Application Number — the order/application tracking number (申込番号) |
| `mskm_dtl_no` | Field | Application Detail Number — the detailed line item number within an application (申込明細番号) |
| `tokutei_id_kmk_nm` | Field | Specific ID Item Name — identifies a specific/custom identifier field name |
| `tokutei_id_kmk_value` | Field | Specific ID Item Value — the value assigned to the specific ID item |
| `popup_mode` | Field | Popup Mode — flag indicating whether the screen is rendered in popup mode |
| `svc_cd` | Field | Service Code — identifies the service type (e.g., FTTH, Mail, ENUM) |
| `prc_grp_cd` | Field | Pricing Group Code — classifies the pricing group for the service |
| `pcrs_cd` | Field | Pricing Course Code — identifies the specific pricing course/tier |
| `pplan_cd` | Field | Pricing Plan Code — identifies the pricing plan/product bundle |
| `svc_cd_bf` | Field | Pre-Change Service Code — the service code value BEFORE the change (for audit/comparison) |
| `prc_grp_cd_bf` | Field | Pre-Change Pricing Group Code — the pricing group code value before change |
| `pcrs_cd_bf` | Field | Pre-Change Pricing Course Code — the pricing course code value before change |
| `pplan_cd_bf` | Field | Pre-Change Pricing Plan Code — the pricing plan code value before change |
| `wrib_auto_aply_tg_gai_flg` | Field | Discount Auto-Application Exclusion Flag — when true, discounts are excluded from automatic application |
| `syscd` | Field | External System Code — identifies the external system involved in the transaction |
| `"システム"` | Key | Japanese literal key "SYSTEM" — routes to sysid field |
| `"サービス契約番号"` | Key | Japanese literal key "Service Contract Number" — routes to svc_kei_no field |
| `"異動区分"` | Key | Japanese literal key "Displacement Type" — routes to ido_div field |
| `"異動理由コード"` | Key | Japanese literal key "Displacement Reason Code" — compound key with index for list delegation |
| `"異動理由メモ"` | Key | Japanese literal key "Displacement Reason Memo" — routes to ido_rsn_memo field |
| `"異動区分選択画面遷移パターン"` | Key | Japanese literal key "Displacement Type Selection Screen Navigation Pattern" — routes to hktgi_ido_div_seni_ptn field |
| `"オプションサービス契約番号"` | Key | Japanese literal key "Option Service Contract Number" — compound key with index for list delegation |
| `"処理区分"` | Key | Japanese literal key "Processing Type" — routes to tran_div field |
| `"申込番号"` | Key | Japanese literal key "Application Number" — routes to mskm_no field |
| `"申込明細番号"` | Key | Japanese literal key "Application Detail Number" — routes to mskm_dtl_no field |
| `"特定ID項目名"` | Key | Japanese literal key "Specific ID Item Name" — routes to tokutei_id_kmk_nm field |
| `"特定ID項目値"` | Key | Japanese literal key "Specific ID Item Value" — routes to tokutei_id_kmk_value field |
| `"ポップアップモード"` | Key | Japanese literal key "Popup Mode" — routes to popup_mode field |
| `"サービスコード"` | Key | Japanese literal key "Service Code" — routes to svc_cd field |
| `"料金グループコード"` | Key | Japanese literal key "Pricing Group Code" — routes to prc_grp_cd field |
| `"料金コースコード"` | Key | Japanese literal key "Pricing Course Code" — routes to pcrs_cd field |
| `"料金プランコード"` | Key | Japanese literal key "Pricing Plan Code" — routes to pplan_cd field |
| `"変更前サービスコード"` | Key | Japanese literal key "Pre-Change Service Code" — routes to svc_cd_bf field |
| `"変更前料金グループコード"` | Key | Japanese literal key "Pre-Change Pricing Group Code" — routes to prc_grp_cd_bf field |
| `"変更前料金コースコード"` | Key | Japanese literal key "Pre-Change Pricing Course Code" — routes to pcrs_cd_bf field |
| `"変更前料金プランコード"` | Key | Japanese literal key "Pre-Change Pricing Plan Code" — routes to pplan_cd_bf field |
| `"割引自動適用対象外フラグ"` | Key | Japanese literal key "Discount Auto-Application Exclusion Flag" — routes to wrib_auto_aply_tg_gai_flg field |
| `"外部システムコード"` | Key | Japanese literal key "External System Code" — routes to syscd field |
| FTTH | Business term | Fiber To The Home — fiber-optic broadband internet service offered by K-Opticom |
| DBean | Technical | Data Bean — a view-tier data transfer object that holds screen form data for binding |
| X33VDataTypeStringBean | Technical | A typed data bean for string-type list items, with its own storeModelData for nested binding |
| "value" | Subkey | Subkey literal — indicates the data value property of a field |
| "state" | Subkey | Subkey literal — indicates the metadata/state property of a field (e.g., read-only flag, required flag) |
| `_bf` | Suffix | Suffix meaning "before" — used to distinguish pre-change values from current values in contract change operations |