# Business Logic — KKW02516SF01DBean.loadModelData() [137 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKA16801SF.KKW02516SF01DBean` |
| Layer | Utility (Data Accessor DBean — web-layer data provider) |
| Module | `KKA16801SF` (Package: `eo.web.webview.KKA16801SF`) |

## 1. Role

### KKW02516SF01DBean.loadModelData()

This method serves as a **unified property accessor** for the KKW02516 screen ("リモートサポートプランス更新・照会" — Remote Support Plan Update/Inquiry), which is a customer-facing web page for updating and inquiring about remote support plan services. It implements a **routing/dispatch pattern** that maps a string key and optional subkey into the correct data retrieval path, enabling the JSP/view layer to read typed data fields through a single, generic interface. The method covers all displayable properties on the screen: a simple system identifier (SYSID), a service contract number (サービス契約番号), a movement/disposition classification (異動区分), a list of movement reasons with reason codes (異動理由コード), a movement reason memo (異動理由メモ), an optional service contract number (オプションサービス契約番号), a processing classification (処理区分), a subscription number (申込番号), and a subscription detail number (申込明細番号). For scalar properties, the subkey determines whether the raw value or its edit-state flag is returned; for list properties (異動理由コード and オプションサービス契約番号), the subkey enables indexed access to list elements or wildcard ("*") requests for list size. This method is called both recursively — via a no-argument overload that forwards to this keyed variant — and by nested X33VDataTypeStringBean instances within the list properties, making it a foundational access point for the screen's data model.

## 2. Processing Pattern (Detailed Business Logic)

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

    START --> CHECK_NULL["key == null || subkey == null"]
    CHECK_NULL -->|Yes| RET_NULL_1["Return null"]
    CHECK_NULL -->|No| FIND_SEP["Find '/' separator: separaterPoint = key.indexOf('/')"]

    FIND_SEP --> BRANCH_SYSID["key equals 'SYSID'"]
    BRANCH_SYSID -->|Yes| SYSID_CHECK{"subkey.equalsIgnoreCase('value' | 'state')"}
    SYSID_CHECK -->|value| RET_SYSID_VAL["Return getSysid_value()"]
    SYSID_CHECK -->|state| RET_SYSID_STATE["Return getSysid_state()"]

    BRANCH_SYSID -->|No| BRANCH_SVC["key equals 'サービス契約番号'"]
    BRANCH_SVC -->|Yes| SVC_CHECK{"subkey.equalsIgnoreCase('value' | 'state')"}
    SVC_CHECK -->|value| RET_SVC_VAL["Return getSvc_kei_no_value()"]
    SVC_CHECK -->|state| RET_SVC_STATE["Return getSvc_kei_no_state()"]

    BRANCH_SVC -->|No| BRANCH_IDODIV["key equals '異動区分'"]
    BRANCH_IDODIV -->|Yes| IDODIV_CHECK{"subkey.equalsIgnoreCase('value' | 'state')"}
    IDODIV_CHECK -->|value| RET_IDO_VAL["Return getIdo_div_value()"]
    IDODIV_CHECK -->|state| RET_IDO_STATE["Return getIdo_div_state()"]

    BRANCH_IDODIV -->|No| BRANCH_IDORSNCD["key equals '異動理由コード'"]
    BRANCH_IDORSNCD -->|Yes| IDORSNCD_SPLIT["key = key.substring(separaterPoint + 1)"]
    IDORSNCD_SPLIT --> IDORSNCD_STAR{"key equals '*'"}
    IDORSNCD_STAR -->|Yes| RET_IDORSNCD_COUNT["Return Integer.valueOf(ido_rsn_cd_list.size())"]
    IDORSNCD_STAR -->|No| IDORSNCD_PARSE["Parse key as Integer: tmpIndexInt"]
    IDORSNCD_PARSE --> IDORSNCD_PARSE_OK{NumberFormatException?}
    IDORSNCD_PARSE_OK -->|Yes| RET_NULL_2["Return null"]
    IDORSNCD_PARSE_OK -->|No| IDORSNCD_IDX_CHECK{"tmpIndex valid range?"}
    IDORSNCD_IDX_CHECK -->|No| RET_NULL_3["Return null"]
    IDORSNCD_IDX_CHECK -->|Yes| RET_IDORSNCD_VAL["Get list element, loadModelData(subkey)"]

    BRANCH_IDORSNCD -->|No| BRANCH_IDORSNMEMO["key equals '異動理由メモ'"]
    BRANCH_IDORSNMEMO -->|Yes| IDORSNMEMO_CHECK{"subkey.equalsIgnoreCase('value' | 'state')"}
    IDORSNMEMO_CHECK -->|value| RET_MEMO_VAL["Return getIdo_rsn_memo_value()"]
    IDORSNMEMO_CHECK -->|state| RET_MEMO_STATE["Return getIdo_rsn_memo_state()"]

    IDORSNMEMO_CHECK -->|No| BRANCH_OPSVC["key equals 'オプションサービス契約番号'"]
    BRANCH_OPSVC -->|Yes| OPSVC_SPLIT["key = key.substring(separaterPoint + 1)"]
    OPSVC_SPLIT --> OPSVC_STAR{"key equals '*'"}
    OPSVC_STAR -->|Yes| RET_OPSVC_COUNT["Return Integer.valueOf(op_svc_kei_no_list.size())"]
    OPSVC_STAR -->|No| OPSVC_PARSE["Parse key as Integer: tmpIndexInt"]
    OPSVC_PARSE --> OPSVC_PARSE_OK{NumberFormatException?}
    OPSVC_PARSE_OK -->|Yes| RET_NULL_4["Return null"]
    OPSVC_PARSE_OK -->|No| OPSVC_IDX_CHECK{"tmpIndex valid range?"}
    OPSVC_IDX_CHECK -->|No| RET_NULL_5["Return null"]
    OPSVC_IDX_CHECK -->|Yes| RET_OPSVC_VAL["Get list element, loadModelData(subkey)"]

    BRANCH_OPSVC -->|No| BRANCH_TRANDIV["key equals '処理区分'"]
    BRANCH_TRANDIV -->|Yes| TRANDIV_CHECK{"subkey.equalsIgnoreCase('value' | 'state')"}
    TRANDIV_CHECK -->|value| RET_TRAN_VAL["Return getTran_div_value()"]
    TRANDIV_CHECK -->|state| RET_TRAN_STATE["Return getTran_div_state()"]

    TRANDIV_CHECK -->|No| BRANCH_MSKMNO["key equals '申込番号'"]
    BRANCH_MSKMNO -->|Yes| MSKMNO_CHECK{"subkey.equalsIgnoreCase('value' | 'state')"}
    MSKMNO_CHECK -->|value| RET_MSKM_VAL["Return getMskm_no_value()"]
    MSKMNO_CHECK -->|state| RET_MSKM_STATE["Return getMskm_no_state()"]

    BRANCH_MSKMNO -->|No| BRANCH_MSKMDTL["key equals '申込明細番号'"]
    BRANCH_MSKMDTL -->|Yes| MSKMDTL_CHECK{"subkey.equalsIgnoreCase('value' | 'state')"}
    MSKMDTL_CHECK -->|value| RET_MSKMDTL_VAL["Return getMskm_dtl_no_value()"]
    MSKMDTL_CHECK -->|state| RET_MSKMDTL_STATE["Return getMskm_dtl_no_state()"]

    MSKMDTL_CHECK -->|No| RET_NULL_6["Return null (no matching property)"]

    RET_NULL_1 --> END(["End"])
    RET_SYSID_VAL --> END
    RET_SYSID_STATE --> END
    RET_SVC_VAL --> END
    RET_SVC_STATE --> END
    RET_IDO_VAL --> END
    RET_IDO_STATE --> END
    RET_IDORSNCD_COUNT --> END
    RET_IDORSNCD_VAL --> END
    RET_NULL_2 --> END
    RET_NULL_3 --> END
    RET_MEMO_VAL --> END
    RET_MEMO_STATE --> END
    RET_OPSVC_COUNT --> END
    RET_OPSVC_VAL --> END
    RET_NULL_4 --> END
    RET_NULL_5 --> END
    RET_TRAN_VAL --> END
    RET_TRAN_STATE --> END
    RET_MSKM_VAL --> END
    RET_MSKM_STATE --> END
    RET_MSKMDTL_VAL --> END
    RET_MSKMDTL_STATE --> END
    RET_NULL_6 --> END
```

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | The business property name used to identify which data field to retrieve. For simple scalar properties, the key is a literal Japanese label (e.g., `"SYSID"`, `"サービス契約番号"`, `"異動区分"`, `"異動理由コード"`, `"異動理由メモ"`, `"オプションサービス契約番号"`, `"処理区分"`, `"申込番号"`, `"申込明細番号"`). For list-based properties (異動理由コード, オプションサービス契約番号), the key may contain a `"/"`-prefixed suffix: the part after the separator is either `"*"` to request the list size, or a numeric string representing a zero-based list index. |
| 2 | `subkey` | `String` | Controls what aspect of the property is returned. For scalar fields, the subkey is `"value"` (returns the data value) or `"state"` (returns the edit-state flag indicating whether the field has been modified). For list elements, the subkey is forwarded to the nested X33VDataTypeStringBean's `loadModelData` to request a sub-field of the list element. |

**Instance fields read by this method:**

| Field Name | Type | Business Description |
|------------|------|---------------------|
| `ido_rsn_cd_list` | `X33VDataTypeList` | List of movement/disposition reason code beans — dynamically populated list of reason codes the customer provided for changing their service status. |
| `op_svc_kei_no_list` | `X33VDataTypeList` | List of optional service contract number beans — dynamically populated list of optional service contracts associated with this service. |

## 4. CRUD Operations / Called Services

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

The method is a pure **data retrieval** layer — it performs **no writes, no creates, no deletes, and no database operations**. Every called method is a local getter or a recursive invocation on a list element.

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `KKW02516SF01DBean.getSysid_value` | KKW02516SF01DBean | - | Returns the system identifier value (`sysid_value`) for the screen's primary record. |
| R | `KKW02516SF01DBean.getSysid_state` | KKW02516SF01DBean | - | Returns the edit-state flag (`sysid_state`) indicating whether the SYSID field was modified by the user. |
| R | `KKW02516SF01DBean.getSvc_kei_no_value` | KKW02516SF01DBean | - | Returns the service contract number (`svc_kei_no_value`) — the main service line item identifier. |
| R | `KKW02516SF01DBean.getSvc_kei_no_state` | KKW02516SF01DBean | - | Returns the edit-state flag (`svc_kei_no_state`) for the service contract number field. |
| R | `KKW02516SF01DBean.getIdo_div_value` | KKW02516SF01DBean | - | Returns the movement/disposition classification (`ido_div_value`) — how the service is being changed (add, cancel, modify, etc.). |
| R | `KKW02516SF01DBean.getIdo_div_state` | KKW02516SF01DBean | - | Returns the edit-state flag (`ido_div_state`) for the movement classification field. |
| R | `KKW02516SF01DBean.getIdo_rsn_memo_value` | KKW02516SF01DBean | - | Returns the movement reason memo (`ido_rsn_memo_value`) — free-text explanation for the service change. |
| R | `KKW02516SF01DBean.getIdo_rsn_memo_state` | KKW02516SF01DBean | - | Returns the edit-state flag (`ido_rsn_memo_state`) for the movement reason memo field. |
| R | `KKW02516SF01DBean.getTran_div_value` | KKW02516SF01DBean | - | Returns the processing classification (`tran_div_value`) — distinguishes between different processing types (e.g., update, registration). |
| R | `KKW02516SF01DBean.getTran_div_state` | KKW02516SF01DBean | - | Returns the edit-state flag (`tran_div_state`) for the processing classification field. |
| R | `KKW02516SF01DBean.getMskm_no_value` | KKW02516SF01DBean | - | Returns the subscription number (`mskm_no_value`) — the application/order number for this subscription. |
| R | `KKW02516SF01DBean.getMskm_no_state` | KKW02516SF01DBean | - | Returns the edit-state flag (`mskm_no_state`) for the subscription number field. |
| R | `KKW02516SF01DBean.getMskm_dtl_no_value` | KKW02516SF01DBean | - | Returns the subscription detail number (`mskm_dtl_no_value`) — line-level detail identifier within a subscription. |
| R | `KKW02516SF01DBean.getMskm_dtl_no_state` | KKW02516SF01DBean | - | Returns the edit-state flag (`mskm_dtl_no_state`) for the subscription detail number field. |
| R | `KKW02516SF01DBean.loadModelData` | KKW02516SF01DBean | - | Recursive call on a nested list element (`X33VDataTypeStringBean`) to retrieve a sub-property of a list item. |
| - | `String.indexOf` | JDK | - | Locates the position of the `"/"` separator in list-property keys. |
| - | `String.substring` | JDK | - | Extracts the suffix after `"/"` in list-property keys (e.g., index or `"*"`). |
| - | `Integer.valueOf` | JDK | - | Parses a key suffix to a numeric index for list element access. |
| - | `X33VDataTypeList.size` | X33V | - | Returns the count of elements in the movement reason code list or optional service contract list. |
| - | `X33VDataTypeList.get` | X33V | - | Retrieves the element at a given index from the movement reason code list or optional service contract list. |
| - | `X33VDataTypeList` type cast | Java | - | Casts a list element to `X33VDataTypeStringBean` to access its sub-properties. |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Screen:KKW02516 | `KKW02516SF01DBean.loadModelData()` (no-arg overload) -> `loadModelData(key, subkey)` | All getter methods listed in Section 4 (pure R — data retrieval only) |

**Notes:**
- The sole known caller is `KKW02516SF01DBean.loadModelData()` (the no-argument overload), which forwards parameter resolution to this keyed variant.
- The screen `KKW02516` (remote support plan update/inquiry screen) uses this method through the JSP/view binding, which calls `loadModelData` with property key/subkey pairs to populate form fields at page render time.

## 6. Per-Branch Detail Blocks

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

Guard clause: returns null when either parameter is missing, preventing downstream NullPointerException.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` // key or subkey is null — no data to retrieve |

---

### Block 2 — PROCESSING: Find separator position (L310)

Pre-computes the position of the `"/"` character in `key` for later use by list-property branches.

| # | Type | Code |
|---|------|------|
| 1 | SET | `int separaterPoint = key.indexOf("/");` // Find position of "/" for list-property key parsing |

---

### Block 3 — ELSE-IF `(key.equals("SYSID"))` [SYSID: System Identifier] (L313)

Handles the SYSID property — the system identifier used to track the primary record on the screen.

**Block 3.1 — IF `(subkey.equalsIgnoreCase("value"))` (L314)**

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getSysid_value();` // Return the SYSID system identifier value |

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

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getSysid_state();` // Return the SYSID edit-state flag |

---

### Block 4 — ELSE-IF `(key.equals("サービス契約番号"))` [Subkey: svc_kei_no] (L323)

Handles the service contract number property — the main service line item number for the customer's subscription.

**Block 4.1 — IF `(subkey.equalsIgnoreCase("value"))` (L324)**

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getSvc_kei_no_value();` // Return the service contract number value |

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

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getSvc_kei_no_state();` // Return the service contract number edit-state flag |

---

### Block 5 — ELSE-IF `(key.equals("異動区分"))` [Subkey: ido_div] (L333)

Handles the movement/disposition classification — indicates how the service status is changing (e.g., add, cancel, modify).

**Block 5.1 — IF `(subkey.equalsIgnoreCase("value"))` (L334)**

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getIdo_div_value();` // Return the movement classification value |

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

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getIdo_div_state();` // Return the movement classification edit-state flag |

---

### Block 6 — ELSE-IF `(key.equals("異動理由コード"))` [List Property: ido_rsn_cd] (L343)

Handles the movement reason code list — a dynamic list of codes explaining why a service change is occurring. This is a **list property** that supports indexed access and wildcard ("*") size queries.

**Block 6.1 — PROCESSING: Extract list key suffix (L345)**

| # | Type | Code |
|---|------|------|
| 1 | SET | `key = key.substring(separaterPoint + 1);` // Extract the element after "/" — either index or "*" |

**Block 6.2 — ELSE-IF `(key.equals("*"))` [Request list size] (L348)**

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return Integer.valueOf(ido_rsn_cd_list.size());` // Return the count of movement reason codes in the list |

**Block 6.3 — ELSE: Parse numeric index (L351)**

| # | Type | Code |
|---|------|------|
| 1 | SET | `Integer tmpIndexInt = null;` // Initialize index holder |
| 2 | TRY | `tmpIndexInt = Integer.valueOf(key);` // Attempt to parse key as integer index |

**Block 6.3.1 — CATCH `(NumberFormatException e)` [Key is not a numeric string] (L358)**

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` // Key suffix is not a valid number — return null |

**Block 6.3.2 — ELSE-IF `(tmpIndexInt == null)` (L361)**

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` // Index parsed to null — return null |

**Block 6.3.3 — ELSE: Validate range (L364)**

| # | Type | Code |
|---|------|------|
| 1 | SET | `int tmpIndex = tmpIndexInt.intValue();` // Convert Integer to int |
| 2 | IF | `if (tmpIndex < 0 || tmpIndex >= ido_rsn_cd_list.size())` // Check index is within valid range |

**Block 6.3.3.1 — IF branch (out of range)**

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` // Index out of bounds — return null |

**Block 6.3.3.2 — ELSE-IF branch (valid index)**

| # | Type | Code |
|---|------|------|
| 1 | CAST | `(X33VDataTypeStringBean)ido_rsn_cd_list.get(tmpIndex)` // Get the list element at the given index, cast to bean type |
| 2 | CALL | `return loadModelData(subkey);` // Delegate to the nested bean's loadModelData to retrieve the sub-property |

---

### Block 7 — ELSE-IF `(key.equals("異動理由メモ"))` [Subkey: ido_rsn_memo] (L373)

Handles the movement reason memo — a free-text field where the customer provides an explanation for the service change.

**Block 7.1 — IF `(subkey.equalsIgnoreCase("value"))` (L374)**

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getIdo_rsn_memo_value();` // Return the movement reason memo text value |

**Block 7.2 — ELSE-IF `(subkey.equalsIgnoreCase("state"))` [subkey is "state"] (L377)**

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getIdo_rsn_memo_state();` // Return the movement reason memo edit-state flag |

---

### Block 8 — ELSE-IF `(key.equals("オプションサービス契約番号"))` [List Property: op_svc_kei_no] (L383)

Handles the optional service contract number list — a dynamic list of optional service contracts associated with the main service. This is a **list property** following the same indexed access pattern as the movement reason code list.

**Block 8.1 — PROCESSING: Extract list key suffix (L385)**

| # | Type | Code |
|---|------|------|
| 1 | SET | `key = key.substring(separaterPoint + 1);` // Extract the element after "/" — either index or "*" |

**Block 8.2 — ELSE-IF `(key.equals("*"))` [Request list size] (L388)**

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return Integer.valueOf(op_svc_kei_no_list.size());` // Return the count of optional service contract numbers in the list |

**Block 8.3 — ELSE: Parse numeric index (L391)**

| # | Type | Code |
|---|------|------|
| 1 | SET | `Integer tmpIndexInt = null;` // Initialize index holder |
| 2 | TRY | `tmpIndexInt = Integer.valueOf(key);` // Attempt to parse key as integer index |

**Block 8.3.1 — CATCH `(NumberFormatException e)` [Key is not a numeric string] (L398)**

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` // Key suffix is not a valid number — return null |

**Block 8.3.2 — ELSE-IF `(tmpIndexInt == null)` (L401)**

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` // Index parsed to null — return null |

**Block 8.3.3 — ELSE: Validate range (L404)**

| # | Type | Code |
|---|------|------|
| 1 | SET | `int tmpIndex = tmpIndexInt.intValue();` // Convert Integer to int |
| 2 | IF | `if (tmpIndex < 0 || tmpIndex >= op_svc_kei_no_list.size())` // Check index is within valid range |

**Block 8.3.3.1 — IF branch (out of range)**

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` // Index out of bounds — return null |

**Block 8.3.3.2 — ELSE-IF branch (valid index)**

| # | Type | Code |
|---|------|------|
| 1 | CAST | `(X33VDataTypeStringBean)op_svc_kei_no_list.get(tmpIndex)` // Get the list element at the given index, cast to bean type |
| 2 | CALL | `return loadModelData(subkey);` // Delegate to the nested bean's loadModelData to retrieve the sub-property |

---

### Block 9 — ELSE-IF `(key.equals("処理区分"))` [Subkey: tran_div] (L410)

Handles the processing classification — distinguishes between different processing types (e.g., update vs. registration operation).

**Block 9.1 — IF `(subkey.equalsIgnoreCase("value"))` (L411)**

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getTran_div_value();` // Return the processing classification value |

**Block 9.2 — ELSE-IF `(subkey.equalsIgnoreCase("state"))` [subkey is "state"] (L414)**

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getTran_div_state();` // Return the processing classification edit-state flag |

---

### Block 10 — ELSE-IF `(key.equals("申込番号"))` [Subkey: mskm_no] (L420)

Handles the subscription number — the application/order number identifying a customer's subscription request.

**Block 10.1 — IF `(subkey.equalsIgnoreCase("value"))` (L421)**

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getMskm_no_value();` // Return the subscription number value |

**Block 10.2 — ELSE-IF `(subkey.equalsIgnoreCase("state"))` [subkey is "state"] (L424)**

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getMskm_no_state();` // Return the subscription number edit-state flag |

---

### Block 11 — ELSE-IF `(key.equals("申込明細番号"))` [Subkey: mskm_dtl_no] (L430)

Handles the subscription detail number — the line-level detail identifier within a subscription, used for multi-line service orders.

**Block 11.1 — IF `(subkey.equalsIgnoreCase("value"))` (L431)**

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getMskm_dtl_no_value();` // Return the subscription detail number value |

**Block 11.2 — ELSE-IF `(subkey.equalsIgnoreCase("state"))` [subkey is "state"] (L434)**

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return getMskm_dtl_no_state();` // Return the subscription detail number edit-state flag |

---

### Block 12 — ELSE (no matching property) (L438)

No property matched any of the defined keys. Returns null as a safe default.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` // No matching property found — return null |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `sysid` | Field | System ID — internal system identifier for the primary record being displayed/updated on the screen. |
| `svc_kei_no` | Field | Service Contract Number — the main service line item number that identifies a customer's subscribed service. |
| `ido_div` | Field | Movement Classification (異動区分) — indicates the type of service change being performed (e.g., add, cancel, modify, transfer). |
| `ido_rsn_cd` | Field | Movement Reason Code (異動理由コード) — a code specifying why a service change is occurring; stored as a list of beans. |
| `ido_rsn_memo` | Field | Movement Reason Memo (異動理由メモ) — free-text explanation field where the customer describes the reason for the service change. |
| `op_svc_kei_no` | Field | Optional Service Contract Number (オプションサービス契約番号) — identifies an optional/add-on service contract associated with the main service; stored as a list of beans. |
| `tran_div` | Field | Processing Classification (処理区分) — distinguishes the type of processing operation (e.g., update, registration, inquiry). |
| `mskm_no` | Field | Subscription Number (申込番号) — the application/order number identifying a customer's service subscription request. |
| `mskm_dtl_no` | Field | Subscription Detail Number (申込明細番号) — the line-level detail identifier within a subscription, used for multi-line service orders. |
| リモートサポートプラン | Business term | Remote Support Plan — a managed service offering where K-Opticom provides remote technical support for customer equipment. |
| KKW02516 | Screen ID | Remote Support Plan Update/Inquiry screen (リモートサポートプランス更新・照会) — the web screen that uses this DBean. |
| `X33VDataTypeStringBean` | Class | Fujitsu Futurity X33 framework bean type — a typed data container for string properties that can be nested within lists, supporting recursive `loadModelData` delegation. |
| `X33VDataTypeList` | Class | Fujitsu Futurity X33 framework list type — a dynamically sized list container that holds typed data beans. |
| `state` | Subkey | Edit-state flag — indicates whether a form field has been modified by the user since the page was loaded. Used for change tracking and optimistic locking. |
| `value` | Subkey | Data value — the actual content of a form field. |
| `*` | Special value | Wildcard — when used as the key suffix for list properties, requests the total count of items in the list instead of a specific element. |
