# Business Logic — KKW02516SFBean.storeModelData() [399 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKA16801SF.KKW02516SFBean` |
| Layer | View Bean (Web Controller / Presentation Layer — package `eo.web.webview`) |
| Module | `KKA16801SF` (Package: `eo.web.webview.KKA16801SF`) |

## 1. Role

### KKW02516SFBean.storeModelData()

This method is the central **model-to-bean data binding dispatcher** for the **Remote Support Plus Update/Inquiry** screen (KKW02516 — Remote Support Plus Update/Inquiry). Its business role is to ingest raw model data and route it to the appropriate bean property based on a structured key path. The method implements a **routing/dispatch pattern** with three major branches: (1) delegation to common info data processing when the key starts with `//`, (2) recursive dispatch for **list-type properties** (Customer Contract Transfer List and Move Reason List) where the key encodes a list index and nested field name, and (3) direct property setter invocation for **simple scalar fields** that represent service contract, pricing, scheduling, and audit metadata attributes. The subkey parameter determines which aspect of the property is being set — `value`, `enable` (enabled/disabled flag), or `state` (read-only/UI state string). This method serves as a **shared view-bean utility** called throughout the screen's data population and form-update lifecycle, enabling a unified key-path convention that decouples the service layer's data format from the view bean's property structure. It supports 24+ distinct business fields covering service lifecycle dates (start date, end date, recovery date), contract identifiers (service contract number, option service codes), pricing data (price course code, price plan code), and audit timestamps (generation register timestamp, last update timestamp).

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["storeModelData params"])
    START --> CHECK_NULL_KEY["key is null?"]
    CHECK_NULL_KEY -- yes --> EARLY_RETURN["return early - no processing"]
    CHECK_NULL_KEY -- no --> CHECK_NULL_SUBKEY["subkey is null?"]
    CHECK_NULL_SUBKEY -- yes --> INIT_SUBKEY["subkey = empty string"]
    INIT_SUBKEY --> FIND_SEP["Find separator position in key"]
    CHECK_NULL_SUBKEY -- no --> FIND_SEP
    FIND_SEP --> CHECK_COMMON["key starts with // ?"]
    CHECK_COMMON -- yes --> CALL_SUPER["storeCommonInfoData"]
    CALL_SUPER --> PARSE_KEY["Parse keyElement from key"]
    CHECK_COMMON -- no --> PARSE_KEY
    PARSE_KEY --> DISPATCH["Dispatch by keyElement"]

    DISPATCH --> IS_CUSTOMER_LIST["keyElement == Customer Contract Transfer List?"]
    IS_CUSTOMER_LIST -- yes --> RECURSE_LIST["Recursive dispatch on list item"]
    IS_CUSTOMER_LIST -- no --> IS_RSN_LIST["keyElement == Move Reason List?"]
    IS_RSN_LIST -- yes --> RECURSE_RSN["Recursive dispatch on list item"]
    IS_RSN_LIST -- no --> SIMPLE["Simple property handlers"]

    SIMPLE --> P_USE_STAYMD["Start Date -> setUse_staymd_*"]
    P_USE_STAYMD --> P_END_Y["End Date Year -> setUse_endymd_year_*"]
    P_END_Y --> P_END_MON["End Date Month -> setUse_endymd_mon_*"]
    P_END_MON --> P_END_DAY["End Date Day -> setUse_endymd_day_*"]
    P_END_DAY --> P_END_FULL["End Date -> setUse_endymd_*"]
    P_END_FULL --> P_SYSID["SYSID -> setSysid_*"]
    P_SYSID --> P_SVC_NO["Service Contract No -> setSvc_kei_no_*"]
    P_SVC_NO --> P_IDO["Move Division -> setIdo_div_*"]
    P_IDO --> P_OP_NO["Option Service Contract No -> setOp_svc_kei_no_*"]
    P_OP_NO --> P_TRAN["Process Division -> setTran_div_*"]
    P_TRAN --> P_MSKM["Application No -> setMskm_no_*"]
    P_MSKM --> P_MSKM_DTL["Application Detail No -> setMskm_dtl_no_*"]
    P_MSKM_DTL --> P_UNYO_YMD["Operation Date -> setUnyo_ymd_*"]
    P_UNYO_YMD --> P_UNYO_DTM["Operation Timestamp -> setUnyo_dtm_*"]
    P_UNYO_DTM --> P_RSV["Reservation Apply Date -> setRsv_aply_ymd_*"]
    P_RSV --> P_GENE["Generation Register Timestamp -> setGene_add_dtm_*"]
    P_GENE --> P_OP_STAT["Option Service Contract Status -> setOp_svc_kei_stat_*"]
    P_OP_STAT --> P_OP_CD["Option Service Code -> setOp_svc_cd_*"]
    P_OP_CD --> P_PCRS["Price Course Code -> setPcrs_cd_*"]
    P_PCRS --> P_PPLAN["Price Plan Code -> setPplan_cd_*"]
    P_PPLAN --> P_SVC_STAY["Service Start Date -> setSvc_staymd_*"]
    P_SVC_STAY --> P_SVC_END["Service End Date -> setSvc_endymd_*"]
    P_SVC_END --> P_SVC_CHRG["Service Billing End Date -> setSvc_chrg_endymd_*"]
    P_SVC_CHRG --> P_KAIHK["Recovery Date -> setKaihk_ymd_*"]
    P_KAIHK --> P_LASTUPD["Last Update Timestamp -> setLast_upd_dtm_*"]
    P_LASTUPD --> P_RTMSG["Return Message ID -> setRtn_msg_id_*"]
    P_RTMSG --> P_CHGFLG["Update Status Flag -> setChg_kahi_flg_*"]
    P_CHGFLG --> P_PRG["Progress Notes 1 -> setPrg_tkjk_1_*"]
    P_PRG --> P_RETURN["Return Data -> setReturnData_*"]
    P_RETURN --> END_NODE(["End"])
    RECURSE_LIST --> END_NODE
    RECURSE_RSN --> END_NODE
```

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | The structured field path that identifies **which business property** to set. It uses a convention where the first segment (before the first `/`) is the field name, and subsequent segments encode nested structure (e.g., list index + nested field). If the key starts with `//`, it is treated as a common info key delegated to the parent class. |
| 2 | `subkey` | `String` | The **aspect** of the property being set. Accepts `value` (to set the field's data value), `enable` (to set the enabled/disabled UI flag), or `state` (to set the read-only UI state string). When null, it is initialized to an empty string. |
| 3 | `in_value` | `Object` | The raw data value to store. It is cast to `String` for value/state operations, or `Boolean` for enable operations. For list-type fields, it is forwarded to the recursive `storeModelData` on the list item. |
| 4 | `isSetAsString` | `boolean` | Flag indicating whether to set a Long-type property's value as a String. Used by the parent class's `storeCommonInfoData` for type conversion. |

**Instance fields read by this method:**

| Field | Type | Business Description |
|-------|------|---------------------|
| `cust_kei_hktgi_list_list` | `List` | Customer Contract Transfer List — list of contract transfer records (each item implements `X33VDataTypeBeanInterface`) |
| `ido_rsn_list_list` | `List` | Move Reason List — list of relocation/migration reason records (each item implements `X33VDataTypeBeanInterface`) |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `super.storeCommonInfoData` | X33VViewBaseBean | - | Delegates common info key to parent class for shared data binding |
| - | `JKKAdEdit.substring` | JKKAdEdit | - | Calls `substring` utility for string extraction |
| - | `JKKAdEditCC.substring` | JKKAdEditCC | - | Calls `substring` utility for string extraction |
| - | `JKKTelnoInfoAddMapperCC.substring` | JKKTelnoInfoAddMapperCC | - | Calls `substring` utility for string extraction |
| - | `JDKejbStringEdit.substring` | JDKejbStringEdit | - | Calls `substring` utility for string extraction |
| - | `X33VDataTypeBeanInterface.storeModelData` | X33VDataTypeBeanInterface | - | Recursive dispatch on list item for Customer Contract Transfer List |
| - | `X33VDataTypeBeanInterface.storeModelData` | X33VDataTypeBeanInterface | - | Recursive dispatch on list item for Move Reason List |
| - | `KKW02516SFBean.setUse_staymd_value` | KKW02516SFBean | - | Sets Start Date value |
| - | `KKW02516SFBean.setUse_staymd_enabled` | KKW02516SFBean | - | Sets Start Date enabled flag |
| - | `KKW02516SFBean.setUse_staymd_state` | KKW02516SFBean | - | Sets Start Date state |
| - | `KKW02516SFBean.setUse_endymd_year_value` | KKW02516SFBean | - | Sets End Date (Year) value |
| - | `KKW02516SFBean.setUse_endymd_year_enabled` | KKW02516SFBean | - | Sets End Date (Year) enabled flag |
| - | `KKW02516SFBean.setUse_endymd_year_state` | KKW02516SFBean | - | Sets End Date (Year) state |
| - | `KKW02516SFBean.setUse_endymd_mon_value` | KKW02516SFBean | - | Sets End Date (Month) value |
| - | `KKW02516SFBean.setUse_endymd_mon_enabled` | KKW02516SFBean | - | Sets End Date (Month) enabled flag |
| - | `KKW02516SFBean.setUse_endymd_mon_state` | KKW02516SFBean | - | Sets End Date (Month) state |
| - | `KKW02516SFBean.setUse_endymd_day_value` | KKW02516SFBean | - | Sets End Date (Day) value |
| - | `KKW02516SFBean.setUse_endymd_day_enabled` | KKW02516SFBean | - | Sets End Date (Day) enabled flag |
| - | `KKW02516SFBean.setUse_endymd_day_state` | KKW02516SFBean | - | Sets End Date (Day) state |
| - | `KKW02516SFBean.setUse_endymd_value` | KKW02516SFBean | - | Sets End Date value |
| - | `KKW02516SFBean.setUse_endymd_enabled` | KKW02516SFBean | - | Sets End Date enabled flag |
| - | `KKW02516SFBean.setUse_endymd_state` | KKW02516SFBean | - | Sets End Date state |
| - | `KKW02516SFBean.setSysid_value` | KKW02516SFBean | - | Sets SYSID value |
| - | `KKW02516SFBean.setSysid_state` | KKW02516SFBean | - | Sets SYSID state |
| - | `KKW02516SFBean.setSvc_kei_no_value` | KKW02516SFBean | - | Sets Service Contract No value |
| - | `KKW02516SFBean.setSvc_kei_no_state` | KKW02516SFBean | - | Sets Service Contract No state |
| - | `KKW02516SFBean.setIdo_div_value` | KKW02516SFBean | - | Sets Move Division value |
| - | `KKW02516SFBean.setIdo_div_state` | KKW02516SFBean | - | Sets Move Division state |
| - | `KKW02516SFBean.setOp_svc_kei_no_value` | KKW02516SFBean | - | Sets Option Service Contract No value |
| - | `KKW02516SFBean.setOp_svc_kei_no_state` | KKW02516SFBean | - | Sets Option Service Contract No state |
| - | `KKW02516SFBean.setTran_div_value` | KKW02516SFBean | - | Sets Process Division value |
| - | `KKW02516SFBean.setTran_div_state` | KKW02516SFBean | - | Sets Process Division state |
| - | `KKW02516SFBean.setMskm_no_value` | KKW02516SFBean | - | Sets Application No value |
| - | `KKW02516SFBean.setMskm_no_state` | KKW02516SFBean | - | Sets Application No state |
| - | `KKW02516SFBean.setMskm_dtl_no_value` | KKW02516SFBean | - | Sets Application Detail No value |
| - | `KKW02516SFBean.setMskm_dtl_no_state` | KKW02516SFBean | - | Sets Application Detail No state |
| - | `KKW02516SFBean.setUnyo_ymd_value` | KKW02516SFBean | - | Sets Operation Date value |
| - | `KKW02516SFBean.setUnyo_ymd_state` | KKW02516SFBean | - | Sets Operation Date state |
| - | `KKW02516SFBean.setUnyo_dtm_value` | KKW02516SFBean | - | Sets Operation Timestamp value |
| - | `KKW02516SFBean.setUnyo_dtm_state` | KKW02516SFBean | - | Sets Operation Timestamp state |
| - | `KKW02516SFBean.setRsv_aply_ymd_value` | KKW02516SFBean | - | Sets Reservation Apply Date value |
| - | `KKW02516SFBean.setRsv_aply_ymd_state` | KKW02516SFBean | - | Sets Reservation Apply Date state |
| - | `KKW02516SFBean.setGene_add_dtm_value` | KKW02516SFBean | - | Sets Generation Register Timestamp value |
| - | `KKW02516SFBean.setGene_add_dtm_state` | KKW02516SFBean | - | Sets Generation Register Timestamp state |
| - | `KKW02516SFBean.setOp_svc_kei_stat_value` | KKW02516SFBean | - | Sets Option Service Contract Status value |
| - | `KKW02516SFBean.setOp_svc_kei_stat_state` | KKW02516SFBean | - | Sets Option Service Contract Status state |
| - | `KKW02516SFBean.setOp_svc_cd_value` | KKW02516SFBean | - | Sets Option Service Code value |
| - | `KKW02516SFBean.setOp_svc_cd_state` | KKW02516SFBean | - | Sets Option Service Code state |
| - | `KKW02516SFBean.setPcrs_cd_value` | KKW02516SFBean | - | Sets Price Course Code value |
| - | `KKW02516SFBean.setPcrs_cd_state` | KKW02516SFBean | - | Sets Price Course Code state |
| - | `KKW02516SFBean.setPplan_cd_value` | KKW02516SFBean | - | Sets Price Plan Code value |
| - | `KKW02516SFBean.setPplan_cd_state` | KKW02516SFBean | - | Sets Price Plan Code state |
| - | `KKW02516SFBean.setSvc_staymd_value` | KKW02516SFBean | - | Sets Service Start Date value |
| - | `KKW02516SFBean.setSvc_staymd_state` | KKW02516SFBean | - | Sets Service Start Date state |
| - | `KKW02516SFBean.setSvc_endymd_value` | KKW02516SFBean | - | Sets Service End Date value |
| - | `KKW02516SFBean.setSvc_endymd_state` | KKW02516SFBean | - | Sets Service End Date state |
| - | `KKW02516SFBean.setSvc_chrg_endymd_value` | KKW02516SFBean | - | Sets Service Billing End Date value |
| - | `KKW02516SFBean.setSvc_chrg_endymd_state` | KKW02516SFBean | - | Sets Service Billing End Date state |
| - | `KKW02516SFBean.setKaihk_ymd_value` | KKW02516SFBean | - | Sets Recovery Date value |
| - | `KKW02516SFBean.setKaihk_ymd_state` | KKW02516SFBean | - | Sets Recovery Date state |
| - | `KKW02516SFBean.setLast_upd_dtm_value` | KKW02516SFBean | - | Sets Last Update Timestamp value |
| - | `KKW02516SFBean.setLast_upd_dtm_state` | KKW02516SFBean | - | Sets Last Update Timestamp state |
| - | `KKW02516SFBean.setRtn_msg_id_value` | KKW02516SFBean | - | Sets Return Message ID value |
| - | `KKW02516SFBean.setRtn_msg_id_state` | KKW02516SFBean | - | Sets Return Message ID state |
| - | `KKW02516SFBean.setChg_kahi_flg_value` | KKW02516SFBean | - | Sets Update Status Flag value |
| - | `KKW02516SFBean.setChg_kahi_flg_state` | KKW02516SFBean | - | Sets Update Status Flag state |
| - | `KKW02516SFBean.setPrg_tkjk_1_value` | KKW02516SFBean | - | Sets Progress Notes 1 value |
| - | `KKW02516SFBean.setPrg_tkjk_1_enabled` | KKW02516SFBean | - | Sets Progress Notes 1 enabled flag |
| - | `KKW02516SFBean.setPrg_tkjk_1_state` | KKW02516SFBean | - | Sets Progress Notes 1 state |
| - | `KKW02516SFBean.setReturnData_value` | KKW02516SFBean | - | Sets Return Data value (ANK-2694-00-00 ADD) |
| - | `KKW02516SFBean.setReturnData_enabled` | KKW02516SFBean | - | Sets Return Data enabled flag (ANK-2694-00-00 ADD) |
| - | `KKW02516SFBean.setReturnData_state` | KKW02516SFBean | - | Sets Return Data state (ANK-2694-00-00 ADD) |

## 5. Dependency Trace

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

No screen/batch entry points found within 8 hops. Direct callers found: 2 methods.
Terminal operations from this method: `setReturnData_state` [-], `setReturnData_enabled` [-], `setReturnData_value` [-], `setPrg_tkjk_1_state` [-], `setPrg_tkjk_1_enabled` [-], `setPrg_tkjk_1_value` [-], `setChg_kahi_flg_state` [-], `setChg_kahi_flg_value` [-], `setRtn_msg_id_state` [-], `setRtn_msg_id_value` [-], `setLast_upd_dtm_state` [-], `setLast_upd_dtm_value` [-], `setKaihk_ymd_state` [-], `setKaihk_ymd_value` [-], `setSvc_chrg_endymd_state` [-], `setSvc_chrg_endymd_value` [-], `setSvc_endymd_state` [-], `setSvc_endymd_value` [-], `setSvc_staymd_state` [-], `setSvc_staymd_value` [-]

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | KKW02516SFBean (self-recursive) | `KKW02516SFBean.storeModelData` (internal dispatch within the same bean, invoked recursively for list items) | All `set*` setters as listed above (U — bean property assignment, no DB) |
| 2 | KKW02516SFBean (self-recursive) | `KKW02516SFBean.storeModelData` (internal dispatch, top-level caller from screen) | All `set*` setters as listed above (U — bean property assignment, no DB) |

**Notes:** This method is exclusively called from within `KKW02516SFBean` itself — both as the entry point from the screen layer and recursively for list items. No external screens or batch processes call this method directly within 8 hops. The method is a pure **bean property setter dispatcher** — it does not perform any database CRUD operations. All operations are internal state mutations of the view bean itself (U — Update bean properties).

## 6. Per-Branch Detail Blocks

**Block 1** — IF `key == null` (L1430)
> Early exit: If key is null, processing is aborted immediately. This prevents NullPointerException in downstream parsing.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return;` // key is null, stop processing |

**Block 2** — ELSE IF `subkey == null` (L1435)
> If subkey is null, initialize it to an empty string to ensure safe downstream usage.

| # | Type | Code |
|---|------|------|
| 1 | SET | `subkey = new String("")` // Initialize null subkey to empty string |

**Block 3** — IF `separaterPoint == 0` (key starts with `//`) (L1442)
> Common info check: When the key starts with `//`, the field relates to common information (共通情報). Delegates to parent class for handling.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `super.storeCommonInfoData(key, in_value, isSetAsString)` // Delegate common info to parent class |

**Block 4** — ELSE (key does not start with `//`) (L1444)
> Parse the key to extract the first element (the field name). Determines if it is a root-level key or a nested key path (e.g., "FieldA/0/FieldB").

| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = key.indexOf("/")` // Search for `/` separator (after null-check of `//`) |
| 2 | IF | `separaterPoint > 0` (key has slash-separated structure) |

**Block 4.1** — IF `separaterPoint > 0` (nested key path) (L1449)

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyElement = key.substring(0, separaterPoint)` // Extract first segment (field name) |

**Block 4.2** — ELSE (no slash — flat key) (L1451)

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyElement = key` // Entire key is the field name |

**Block 5** — IF `keyElement.equals("顧客契約引継リスト")` (Customer Contract Transfer List) (L1457)
> Handles the list-type field for customer contract transfer records. Parses a nested key path to extract a list index, validates bounds, and recursively dispatches to the list item's `storeModelData`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyRemain = key.substring(separaterPoint + 1)` // Extract remainder after first `/` |
| 2 | SET | `separaterPoint = keyRemain.indexOf("/")` // Search for next `/` separator |
| 3 | IF | `separaterPoint > 0` (valid nested structure) |

**Block 5.1** — IF `separaterPoint > 0` (L1462)

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyElement = keyRemain.substring(0, separaterPoint)` // Extract list index string |
| 2 | TRY | `tmpIndexInt = Integer.valueOf(keyElement)` // Attempt to parse index as integer |
| 3 | CATCH | `NumberFormatException` — sets `tmpIndexInt = null` |
| 4 | IF | `tmpIndexInt != null` (successfully parsed index) |

**Block 5.2** — IF `tmpIndexInt != null` (L1469)

| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpIndex = tmpIndexInt.intValue()` // Convert to primitive int |
| 2 | IF | `tmpIndex >= 0 && tmpIndex < cust_kei_hktgi_list_list.size()` (valid index range) |

**Block 5.3** — IF `tmpIndex >= 0 && tmpIndex < cust_kei_hktgi_list_list.size()` (L1470)

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyElement = keyRemain.substring(separaterPoint + 1)` // Extract nested field name |
| 2 | CALL | `cust_kei_hktgi_list_list.get(tmpIndex).storeModelData(keyElement, subkey, in_value, isSetAsString)` // Recursive dispatch to list item |

**Block 6** — ELSE IF `keyElement.equals("利用開始日")` (Start Date) (L1484)
> Sets Start Date property based on subkey. Supports value, enable, and state aspects.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setUse_staymd_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("enable")` -> `setUse_staymd_enabled((Boolean)in_value)` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setUse_staymd_state((String)in_value)` |

**Block 7** — ELSE IF `keyElement.equals("利用終了日（年）")` (End Date Year) (L1493)
> Sets End Date (Year) property. Supports value, enable, and state aspects.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setUse_endymd_year_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("enable")` -> `setUse_endymd_year_enabled((Boolean)in_value)` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setUse_endymd_year_state((String)in_value)` |

**Block 8** — ELSE IF `keyElement.equals("利用終了日（月）")` (End Date Month) (L1502)
> Sets End Date (Month) property. Supports value, enable, and state aspects.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setUse_endymd_mon_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("enable")` -> `setUse_endymd_mon_enabled((Boolean)in_value)` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setUse_endymd_mon_state((String)in_value)` |

**Block 9** — ELSE IF `keyElement.equals("利用終了日（日）")` (End Date Day) (L1511)
> Sets End Date (Day) property. Supports value, enable, and state aspects.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setUse_endymd_day_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("enable")` -> `setUse_endymd_day_enabled((Boolean)in_value)` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setUse_endymd_day_state((String)in_value)` |

**Block 10** — ELSE IF `keyElement.equals("利用終了日")` (End Date) (L1520)
> Sets full End Date property. Supports value, enable, and state aspects.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setUse_endymd_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("enable")` -> `setUse_endymd_enabled((Boolean)in_value)` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setUse_endymd_state((String)in_value)` |

**Block 11** — ELSE IF `keyElement.equals("SYSID")` (L1529)
> Sets SYSID property. Supports value and state aspects (no enable variant for this field).

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setSysid_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setSysid_state((String)in_value)` |

**Block 12** — ELSE IF `keyElement.equals("サービス契約番号")` (Service Contract Number) (L1538)
> Sets Service Contract Number property. Supports value and state aspects.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setSvc_kei_no_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setSvc_kei_no_state((String)in_value)` |

**Block 13** — ELSE IF `keyElement.equals("異動区分")` (Move Division) (L1547)
> Sets Move Division property. Supports value and state aspects. Move division indicates the type of service change (new, modify, cancel, etc.).

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setIdo_div_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setIdo_div_state((String)in_value)` |

**Block 14** — ELSE IF `keyElement.equals("異動理由リスト")` (Move Reason List) (L1556)
> Handles the list-type field for move/relocation reasons. Same pattern as Block 5 — parses list index, validates bounds, recursively dispatches.

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyRemain = key.substring(separaterPoint + 1)` // Extract remainder |
| 2 | SET | `separaterPoint = keyRemain.indexOf("/")` // Search for next separator |
| 3 | IF | `separaterPoint > 0` (valid nested structure) |

**Block 14.1** — IF `separaterPoint > 0` (L1561)

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyElement = keyRemain.substring(0, separaterPoint)` // Extract list index string |
| 2 | TRY | `tmpIndexInt = Integer.valueOf(keyElement)` |
| 3 | CATCH | `NumberFormatException` — sets `tmpIndexInt = null` |
| 4 | IF | `tmpIndexInt != null` (successfully parsed index) |

**Block 14.2** — IF `tmpIndexInt != null` (L1569)

| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpIndex = tmpIndexInt.intValue()` |
| 2 | IF | `tmpIndex >= 0 && tmpIndex < ido_rsn_list_list.size()` (valid index) |

**Block 14.3** — IF valid index (L1570)

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyElement = keyRemain.substring(separaterPoint + 1)` // Extract nested field name |
| 2 | CALL | `ido_rsn_list_list.get(tmpIndex).storeModelData(keyElement, subkey, in_value, isSetAsString)` // Recursive dispatch to list item |

**Block 15** — ELSE IF `keyElement.equals("オプションサービス契約番号")` (Option Service Contract Number) (L1580)
> Sets Option Service Contract Number property. Supports value and state aspects.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setOp_svc_kei_no_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setOp_svc_kei_no_state((String)in_value)` |

**Block 16** — ELSE IF `keyElement.equals("処理区分")` (Process Division) (L1589)
> Sets Process Division property. Supports value and state aspects. Indicates the type of processing (new contract, modification, cancellation, etc.).

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setTran_div_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setTran_div_state((String)in_value)` |

**Block 17** — ELSE IF `keyElement.equals("申込番号")` (Application Number) (L1598)
> Sets Application Number property. Supports value and state aspects. This is the unique identifier for a service application/order.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setMskm_no_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setMskm_no_state((String)in_value)` |

**Block 18** — ELSE IF `keyElement.equals("申込明細番号")` (Application Detail Number) (L1607)
> Sets Application Detail Number property. Supports value and state aspects. Identifies a specific line item within a service application.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setMskm_dtl_no_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setMskm_dtl_no_state((String)in_value)` |

**Block 19** — ELSE IF `keyElement.equals("運用年月日")` (Operation Date) (L1616)
> Sets Operation Date (YYYYMMDD format) property. Supports value and state aspects.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setUnyo_ymd_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setUnyo_ymd_state((String)in_value)` |

**Block 20** — ELSE IF `keyElement.equals("運用年月日時分秒")` (Operation Timestamp) (L1625)
> Sets Operation Timestamp (including time) property. Supports value and state aspects.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setUnyo_dtm_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setUnyo_dtm_state((String)in_value)` |

**Block 21** — ELSE IF `keyElement.equals("予約適用年月日")` (Reservation Apply Date) (L1634)
> Sets Reservation Apply Date property. Supports value and state aspects. The date when a reservation takes effect.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setRsv_aply_ymd_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setRsv_aply_ymd_state((String)in_value)` |

**Block 22** — ELSE IF `keyElement.equals("世代登録年月日時分秒")` (Generation Register Timestamp) (L1643)
> Sets Generation Register Timestamp property. Supports value and state aspects. Records when this record version was registered in the system.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setGene_add_dtm_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setGene_add_dtm_state((String)in_value)` |

**Block 23** — ELSE IF `keyElement.equals("オプションサービス契約ステータス")` (Option Service Contract Status) (L1652)
> Sets Option Service Contract Status property. Supports value and state aspects. Indicates the current status of an optional service (e.g., active, suspended).

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setOp_svc_kei_stat_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setOp_svc_kei_stat_state((String)in_value)` |

**Block 24** — ELSE IF `keyElement.equals("オプションサービスコード")` (Option Service Code) (L1661)
> Sets Option Service Code property. Supports value and state aspects. The code identifying which optional service is active.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setOp_svc_cd_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setOp_svc_cd_state((String)in_value)` |

**Block 25** — ELSE IF `keyElement.equals("料金コースコード")` (Price Course Code) (L1670)
> Sets Price Course Code property. Supports value and state aspects. The code for the pricing tier/course selected.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setPcrs_cd_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setPcrs_cd_state((String)in_value)` |

**Block 26** — ELSE IF `keyElement.equals("料金プランコード")` (Price Plan Code) (L1679)
> Sets Price Plan Code property. Supports value and state aspects. The code for the specific price plan.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setPplan_cd_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setPplan_cd_state((String)in_value)` |

**Block 27** — ELSE IF `keyElement.equals("サービス開始年月日")` (Service Start Date) (L1688)
> Sets Service Start Date property. Supports value and state aspects. The date when the service becomes active.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setSvc_staymd_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setSvc_staymd_state((String)in_value)` |

**Block 28** — ELSE IF `keyElement.equals("サービス終了年月日")` (Service End Date) (L1697)
> Sets Service End Date property. Supports value and state aspects. The date when the service terminates.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setSvc_endymd_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setSvc_endymd_state((String)in_value)` |

**Block 29** — ELSE IF `keyElement.equals("サービス課金終了年月日")` (Service Billing End Date) (L1706)
> Sets Service Billing End Date property. Supports value and state aspects. The date when billing for the service ceases (may differ from service end date).

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setSvc_chrg_endymd_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setSvc_chrg_endymd_state((String)in_value)` |

**Block 30** — ELSE IF `keyElement.equals("回復年月日")` (Recovery Date) (L1715)
> Sets Recovery Date property. Supports value and state aspects. The date when a suspended/recovered service is restored.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setKaihk_ymd_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setKaihk_ymd_state((String)in_value)` |

**Block 31** — ELSE IF `keyElement.equals("最終更新年月日時分秒")` (Last Update Timestamp) (L1724)
> Sets Last Update Timestamp property. Supports value and state aspects. Audit field tracking the most recent modification.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setLast_upd_dtm_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setLast_upd_dtm_state((String)in_value)` |

**Block 32** — ELSE IF `keyElement.equals("返却メッセージID")` (Return Message ID) (L1733)
> Sets Return Message ID property. Supports value and state aspects. The ID of a message returned from a previous service call.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setRtn_msg_id_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setRtn_msg_id_state((String)in_value)` |

**Block 33** — ELSE IF `keyElement.equals("更新状態可否フラグ")` (Update Status Flag) (L1742)
> Sets Update Status Flag property. This is a **Boolean** field (not String). Supports value (Boolean cast) and state (String cast) aspects. Controls whether the record can be modified.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setChg_kahi_flg_value((Boolean)in_value)` // Note: Boolean cast |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setChg_kahi_flg_state((String)in_value)` |

**Block 34** — ELSE IF `keyElement.equals("進捗特記事項1")` (Progress Notes 1) (L1751)
> Sets Progress Notes 1 property. Supports value, enable, and state aspects. Free-text field for tracking progress notes.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setPrg_tkjk_1_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("enable")` -> `setPrg_tkjk_1_enabled((Boolean)in_value)` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setPrg_tkjk_1_state((String)in_value)` |

**Block 35** — IF `keyElement.equals("返却データ")` (Return Data) (L1761, ANK-2694-00-00 ADD)
> Sets Return Data property. Supports value, enable, and state aspects. This field was added in ANK-2694-00-00 (worktop update) to handle returned data from service calls. Note: this block uses `if` (not `else if`) to coexist with the preceding if-else chain.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` -> `setReturnData_value((String)in_value)` |
| 2 | ELSE IF | `subkey.equalsIgnoreCase("enable")` -> `setReturnData_enabled((Boolean)in_value)` |
| 3 | ELSE IF | `subkey.equalsIgnoreCase("state")` -> `setReturnData_state((String)in_value)` |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `use_staymd` | Field | Start Date — when the service begins (利用開始日) |
| `use_endymd_year` | Field | End Date Year — year component of service end date (利用終了日（年）) |
| `use_endymd_mon` | Field | End Date Month — month component of service end date (利用終了日（月）) |
| `use_endymd_day` | Field | End Date Day — day component of service end date (利用終了日（日）) |
| `use_endymd` | Field | End Date — full service end date (利用終了日) |
| `sysid` | Field | SYSID — system identifier (SYSID) |
| `svc_kei_no` | Field | Service Contract Number — the unique contract identifier for a service (サービス契約番号) |
| `ido_div` | Field | Move Division — indicates the type of service change (new/modification/cancellation) (異動区分) |
| `ido_rsn_list` | Field | Move Reason List — list of relocation/migration reasons (異動理由リスト) |
| `op_svc_kei_no` | Field | Option Service Contract Number — identifier for optional service contract (オプションサービス契約番号) |
| `tran_div` | Field | Process Division — type of processing operation (処理区分) |
| `mskm_no` | Field | Application Number — unique identifier for a service application/order (申込番号) |
| `mskm_dtl_no` | Field | Application Detail Number — line item ID within an application (申込明細番号) |
| `unyo_ymd` | Field | Operation Date — YYYYMMDD format date of the operation (運用年月日) |
| `unyo_dtm` | Field | Operation Timestamp — full timestamp of the operation (運用年月日时分秒) |
| `rsv_aply_ymd` | Field | Reservation Apply Date — date when a reservation takes effect (予約適用年月日) |
| `gene_add_dtm` | Field | Generation Register Timestamp — when this record version was registered (世代登録年月日時分秒) |
| `op_svc_kei_stat` | Field | Option Service Contract Status — current status of optional service (オプションサービス契約ステータス) |
| `op_svc_cd` | Field | Option Service Code — code identifying the optional service (オプションサービスコード) |
| `pcrs_cd` | Field | Price Course Code — pricing tier/course code (料金コースコード) |
| `pplan_cd` | Field | Price Plan Code — specific price plan code (料金プランコード) |
| `svc_staymd` | Field | Service Start Date — when service becomes active (サービス開始年月日) |
| `svc_endymd` | Field | Service End Date — when service terminates (サービス終了年月日) |
| `svc_chrg_endymd` | Field | Service Billing End Date — when billing ceases (サービス課金終了年月日) |
| `kaihk_ymd` | Field | Recovery Date — when a suspended service is restored (回復年月日) |
| `last_upd_dtm` | Field | Last Update Timestamp — most recent modification timestamp (最終更新年月日時分秒) |
| `rtn_msg_id` | Field | Return Message ID — ID of returned message from service call (返却メッセージID) |
| `chg_kahi_flg` | Field | Update Status Flag — Boolean flag controlling whether record can be modified (更新状態可否フラグ) |
| `prg_tkjk_1` | Field | Progress Notes 1 — free-text progress tracking field (進捗特記事項1) |
| `returnData` | Field | Return Data — data returned from service call (ANK-2694 addition) (返却データ) |
| `cust_kei_hktgi_list` | Field | Customer Contract Transfer List — list of contract transfer records (顧客契約引継リスト) |
| `X33VDataTypeBeanInterface` | Interface | Base interface for data-type view beans supporting recursive `storeModelData` |
| `storeCommonInfoData` | Method | Parent class method handling common/shared info fields (共通情報) |
| remote support plus | Business term | Remote Support Plus — the service product name (リモートサポートプラス) |
| KKW02516 | Screen ID | Remote Support Plus Update/Inquiry screen (リモートサポートプラス更新・照会) |
| ANK-2694-00-00 | Change ID | Worktop (WANSTOPP) change request adding return data field |
| `key` | Parameter | Structured field path — uses `/` as separator for nested fields, `//` prefix for common info |
| `subkey` | Parameter | Property aspect: `value` (data), `enable` (enabled flag), or `state` (read-only UI state) |
