# Business Logic — KKW05501SF03DBean.storeModelData() [230 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKW05501SF.KKW05501SF03DBean` |
| Layer | Data Transfer Bean / Model Layer |
| Module | `KKW05501SF` (Package: `eo.web.webview.KKW05501SF`) |

## 1. Role

### KKW05501SF03DBean.storeModelData()

This method serves as the primary data-routing entry point for populating a service-order-detail transaction bean with form-level input data. It implements a **key-based dispatch pattern**: given a business item name (`key`) such as "System ID" (SWISSID) or "Service Contract Number" (サービス契約番号), an attribute subkey (`subkey`) of either `"value"` or `"state"`, and the data payload (`in_value`), the method dispatches the value into the appropriate field setter on the bean. This routing supports both scalar string fields (e.g., service contract number, transfer classification) and list-based array fields (e.g., move reason codes, option service contract numbers, concurrent application service contract numbers), where the list index is embedded within the `key` string after a `/` separator. The method is a shared utility invoked by many screens within the KKW05501SF module — specifically the service order detail screen — to reconstruct bean state from incoming request payloads before further validation or submission processing.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["storeModelData(key, subkey, in_value, isSetAsString)"])
    
    START --> CHECK_NULL["Check: key == null || subkey == null"]
    CHECK_NULL -->|Both non-null| FIND_SEP["Find '/' index in key (separaterPoint)"]
    CHECK_NULL -->|null| END_RETURN(["Return (no-op)"])
    FIND_SEP --> COND_SWISSID["key == 'SWISSID'"]
    
    COND_SWISSID -->|true| SWISSID_VALUE["subkey == 'value'?"]
    SWISSID_VALUE -->|yes| SET_SYSID_VAL["setHktgi_sysid_value((String)in_value)"]
    SWISSID_VALUE -->|no| SWISSID_STATE["subkey == 'state'?"]
    SWISSID_STATE -->|yes| SET_SYSID_STATE["setHktgi_sysid_state((String)in_value)"]
    SWISSID_STATE -->|no| SKIP1(["(skip)"])
    
    COND_SWISSID -->|false| COND_SVC_KENO["key == 'サービス契約番号'"]
    COND_SVC_KENO -->|true| SVC_VAL["subkey == 'value'?"]
    SVC_VAL -->|yes| SET_SVC_VAL["setHktgi_svc_kei_no_value((String)in_value)"]
    SVC_VAL -->|no| SVC_STATE["subkey == 'state'?"]
    SVC_STATE -->|yes| SET_SVC_STATE["setHktgi_svc_kei_no_state((String)in_value)"]
    SVC_STATE -->|no| SKIP2(["(skip)"])
    
    COND_SVC_KENO -->|false| COND_IIDO["key == '異動区分'"]
    COND_IIDO -->|true| IIDO_VAL["subkey == 'value'?"]
    IIDO_VAL -->|yes| SET_IIDO_VAL["setHktgi_ido_div_value((String)in_value)"]
    IIDO_VAL -->|no| IIDO_STATE["subkey == 'state'?"]
    IIDO_STATE -->|yes| SET_IIDO_STATE["setHktgi_ido_div_state((String)in_value)"]
    IIDO_STATE -->|no| SKIP3(["(skip)"])
    
    COND_IIDO -->|false| COND_RSN_CD["key == '異動理由コード'"]
    COND_RSN_CD -->|true| RSN_SUBKEY_CHECK["subkey == 'value'?"]
    RSN_SUBKEY_CHECK -->|yes| RSN_INDEX_PARSE["Parse list index from key via Integer.valueOf(key)"]
    RSN_SUBKEY_CHECK -->|no| RSN_INDEX_PARSE
    
    RSN_INDEX_PARSE --> RSN_PARSE_SUCCESS{"Parse succeeded?"}
    RSN_PARSE_SUCCESS -->|yes| RSN_BOUNDS_CHECK{"0 <= index < list.size()?"}
    RSN_PARSE_SUCCESS -->|no| RSN_SKIP(["(skip — null)"])
    RSN_BOUNDS_CHECK -->|yes| RSN_DELEGATE["((X33VDataTypeStringBean)hktgi_ido_rsn_cd_list.get(index)).storeModelData(subkey, in_value)"]
    RSN_BOUNDS_CHECK -->|no| RSN_SKIP
    RSN_DELEGATE --> SKIP_ARRAY1(["(continue)"])
    
    COND_RSN_CD -->|false| COND_RSN_MEMO["key == '異動理由メモ'"]
    COND_RSN_MEMO -->|true| MEMO_VAL["subkey == 'value'?"]
    MEMO_VAL -->|yes| SET_MEMO_VAL["setHktgi_ido_rsn_memo_value((String)in_value)"]
    MEMO_VAL -->|no| MEMO_STATE["subkey == 'state'?"]
    MEMO_STATE -->|yes| SET_MEMO_STATE["setHktgi_ido_rsn_memo_state((String)in_value)"]
    MEMO_STATE -->|no| SKIP4(["(skip)"])
    
    COND_RSN_MEMO -->|false| COND_OPT_SVC["key == 'オプションサービス契約番号'"]
    COND_OPT_SVC -->|true| OPT_INDEX_PARSE["Parse list index from key via Integer.valueOf(key)"]
    OPT_INDEX_PARSE --> OPT_PARSE_SUCCESS{"Parse succeeded?"}
    OPT_PARSE_SUCCESS -->|yes| OPT_BOUNDS_CHECK{"0 <= index < list.size()?"}
    OPT_PARSE_SUCCESS -->|no| OPT_SKIP(["(skip — null)"])
    OPT_BOUNDS_CHECK -->|yes| OPT_DELEGATE["((X33VDataTypeStringBean)hktgi_op_svc_kei_no_list.get(index)).storeModelData(subkey, in_value)"]
    OPT_BOUNDS_CHECK -->|no| OPT_SKIP
    OPT_DELEGATE --> SKIP_ARRAY2(["(continue)"])
    
    COND_OPT_SVC -->|false| COND_TRANDIV["key == '処理区分'"]
    COND_TRANDIV -->|true| TRAN_VAL["subkey == 'value'?"]
    TRAN_VAL -->|yes| SET_TRAN_VAL["setHktgi_tran_div_value((String)in_value)"]
    TRAN_VAL -->|no| TRAN_STATE["subkey == 'state'?"]
    TRAN_STATE -->|yes| SET_TRAN_STATE["setHktgi_tran_div_state((String)in_value)"]
    TRAN_STATE -->|no| SKIP5(["(skip)"])
    
    COND_TRANDIV -->|false| COND_MSKM_NO["key == '申請番号'"]
    COND_MSKM_NO -->|true| MSKM_VAL["subkey == 'value'?"]
    MSKM_VAL -->|yes| SET_MSKM_VAL["setHktgi_mskm_no_value((String)in_value)"]
    MSKM_VAL -->|no| MSKM_STATE["subkey == 'state'?"]
    MSKM_STATE -->|yes| SET_MSKM_STATE["setHktgi_mskm_no_state((String)in_value)"]
    MSKM_STATE -->|no| SKIP6(["(skip)"])
    
    COND_MSKM_NO -->|false| COND_MSKM_DTL["key == '申請詳細番号'"]
    COND_MSKM_DTL -->|true| MSKM_DTL_VAL["subkey == 'value'?"]
    MSKM_DTL_VAL -->|yes| SET_MSKM_DTL_VAL["setHktgi_mskm_dtl_no_value((String)in_value)"]
    MSKM_DTL_VAL -->|no| MSKM_DTL_STATE["subkey == 'state'?"]
    MSKM_DTL_STATE -->|yes| SET_MSKM_DTL_STATE["setHktgi_mskm_dtl_no_state((String)in_value)"]
    MSKM_DTL_STATE -->|no| SKIP7(["(skip)"])
    
    COND_MSKM_DTL -->|false| COND_SPEC_ID_NM["key == '特定ID項目名'"]
    COND_SPEC_ID_NM -->|true| SPEC_NM_VAL["subkey == 'value'?"]
    SPEC_NM_VAL -->|yes| SET_SPEC_NM_VAL["setHktgi_tokutei_id_kmk_nm_value((String)in_value)"]
    SPEC_NM_VAL -->|no| SPEC_NM_STATE["subkey == 'state'?"]
    SPEC_NM_STATE -->|yes| SET_SPEC_NM_STATE["setHktgi_tokutei_id_kmk_nm_state((String)in_value)"]
    SPEC_NM_STATE -->|no| SKIP8(["(skip)"])
    
    COND_SPEC_ID_NM -->|false| COND_SPEC_ID_VAL["key == '特定ID項目値'"]
    COND_SPEC_ID_VAL -->|true| SPEC_VAL_VAL["subkey == 'value'?"]
    SPEC_VAL_VAL -->|yes| SET_SPEC_VAL_VAL["setHktgi_tokutei_id_kmk_value_value((String)in_value)"]
    SPEC_VAL_VAL -->|no| SPEC_VAL_STATE["subkey == 'state'?"]
    SPEC_VAL_STATE -->|yes| SET_SPEC_VAL_STATE["setHktgi_tokutei_id_kmk_value_state((String)in_value)"]
    SPEC_VAL_STATE -->|no| SKIP9(["(skip)"])
    
    COND_SPEC_ID_VAL -->|false| COND_POPUP["key == 'ポップアップモード'"]
    COND_POPUP -->|true| POPUP_VAL["subkey == 'value'?"]
    POPUP_VAL -->|yes| SET_POPUP_VAL["setHktgi_popup_mode_value((String)in_value)"]
    POPUP_VAL -->|no| POPUP_STATE["subkey == 'state'?"]
    POPUP_STATE -->|yes| SET_POPUP_STATE["setHktgi_popup_mode_state((String)in_value)"]
    POPUP_STATE -->|no| SKIP10(["(skip)"])
    
    COND_POPUP -->|false| COND_CONCUR_SVC["key == '同時申請サービス契約番号'"]
    COND_CONCUR_SVC -->|true| CONCUR_INDEX_PARSE["Parse list index from key via Integer.valueOf(key)"]
    CONCUR_INDEX_PARSE --> CONCUR_PARSE_SUCCESS{"Parse succeeded?"}
    CONCUR_PARSE_SUCCESS -->|yes| CONCUR_BOUNDS_CHECK{"0 <= index < list.size()?"}
    CONCUR_PARSE_SUCCESS -->|no| CONCUR_SKIP(["(skip — null)"])
    CONCUR_BOUNDS_CHECK -->|yes| CONCUR_DELEGATE["((X33VDataTypeStringBean)hktgi_mskm_svc_kei_no_list.get(index)).storeModelData(subkey, in_value)"]
    CONCUR_BOUNDS_CHECK -->|no| CONCUR_SKIP
    CONCUR_DELEGATE --> SKIP_ARRAY3(["(continue)"])
    
    COND_CONCUR_SVC -->|false| COND_MANS_NM["key == 'マンスション名'"]
    COND_MANS_NM -->|true| MANS_NM_VAL["subkey == 'value'?"]
    MANS_NM_VAL -->|yes| SET_MANS_NM_VAL["setHktgi_mans_nm_value((String)in_value)"]
    MANS_NM_VAL -->|no| MANS_NM_STATE["subkey == 'state'?"]
    MANS_NM_STATE -->|yes| SET_MANS_NM_STATE["setHktgi_mans_nm_state((String)in_value)"]
    MANS_NM_STATE -->|no| SKIP11(["(skip)"])
    
    COND_MANS_NM -->|false| COND_ADDR["key == '住所'"]
    COND_ADDR -->|true| ADDR_VAL["subkey == 'value'?"]
    ADDR_VAL -->|yes| SET_ADDR_VAL["setHktgi_mans_ad_nm_value((String)in_value)"]
    ADDR_VAL -->|no| ADDR_STATE["subkey == 'state'?"]
    ADDR_STATE -->|yes| SET_ADDR_STATE["setHktgi_mans_ad_nm_state((String)in_value)"]
    ADDR_STATE -->|no| SKIP12(["(skip)"])
    
    COND_ADDR -->|false| COND_PID["key == 'Ｐ－ＩＤ'"]
    COND_PID -->|true| PID_VAL["subkey == 'value'?"]
    PID_VAL -->|yes| SET_PID_VAL["setHktgi_pid_value((String)in_value)"]
    PID_VAL -->|no| PID_STATE["subkey == 'state'?"]
    PID_STATE -->|yes| SET_PID_STATE["setHktgi_pid_state((String)in_value)"]
    PID_STATE -->|no| SKIP13(["(skip)"])
    
    COND_PID -->|false| COND_MANS_ID["key == 'Ｍ－ＩＤ'"]
    COND_MANS_ID -->|true| MANS_ID_VAL["subkey == 'value'?"]
    MANS_ID_VAL -->|yes| SET_MANS_ID_VAL["setHktgi_mans_id_value((String)in_value)"]
    MANS_ID_VAL -->|no| MANS_ID_STATE["subkey == 'state'?"]
    MANS_ID_STATE -->|yes| SET_MANS_ID_STATE["setHktgi_mans_id_state((String)in_value)"]
    MANS_ID_STATE -->|no| SKIP14(["(skip)"])
    
    COND_MANS_ID -->|false| COND_CATID["key == 'ＣＡＴ－ＩＤ'"]
    COND_CATID -->|true| CATID_VAL["subkey == 'value'?"]
    CATID_VAL -->|yes| SET_CATID_VAL["setHktgi_catid_value((String)in_value)"]
    CATID_VAL -->|no| CATID_STATE["subkey == 'state'?"]
    CATID_STATE -->|yes| SET_CATID_STATE["setHktgi_catid_state((String)in_value)"]
    CATID_STATE -->|no| SKIP15(["(skip)"])
    
    COND_CATID -->|false| SKIP_ALL(["(no match — end)"])
    
    SKIP1 --> SKIP_ARRAY1
    SKIP2 --> SKIP_ARRAY2
    SKIP3 --> RSN_SKIP
    SKIP4 --> SKIP_ARRAY2
    SKIP5 --> SKIP_ARRAY2
    SKIP6 --> SKIP_ARRAY2
    SKIP7 --> SKIP_ARRAY2
    SKIP8 --> SKIP_ARRAY2
    SKIP9 --> SKIP_ARRAY2
    SKIP10 --> SKIP_ARRAY3
    SKIP11 --> SKIP_ARRAY3
    SKIP12 --> SKIP_ARRAY3
    SKIP13 --> SKIP_ARRAY3
    SKIP14 --> SKIP_ARRAY3
    
    RSN_SKIP --> END_RETURN
    OPT_SKIP --> END_RETURN
    CONCUR_SKIP --> END_RETURN
    SKIP_ALL --> END_RETURN
    SKIP_ARRAY1 --> END_RETURN
    SKIP_ARRAY2 --> END_RETURN
    SKIP_ARRAY3 --> END_RETURN
    SET_SYSID_VAL --> END_RETURN
    SET_SYSID_STATE --> END_RETURN
    SET_SVC_VAL --> END_RETURN
    SET_SVC_STATE --> END_RETURN
    SET_IIDO_VAL --> END_RETURN
    SET_IIDO_STATE --> END_RETURN
    SET_MEMO_VAL --> END_RETURN
    SET_MEMO_STATE --> END_RETURN
    SET_TRAN_VAL --> END_RETURN
    SET_TRAN_STATE --> END_RETURN
    SET_MSKM_VAL --> END_RETURN
    SET_MSKM_STATE --> END_RETURN
    SET_MSKM_DTL_VAL --> END_RETURN
    SET_MSKM_DTL_STATE --> END_RETURN
    SET_SPEC_NM_VAL --> END_RETURN
    SET_SPEC_NM_STATE --> END_RETURN
    SET_SPEC_VAL_VAL --> END_RETURN
    SET_SPEC_VAL_STATE --> END_RETURN
    SET_POPUP_VAL --> END_RETURN
    SET_POPUP_STATE --> END_RETURN
    SET_MANS_NM_VAL --> END_RETURN
    SET_MANS_NM_STATE --> END_RETURN
    SET_ADDR_VAL --> END_RETURN
    SET_ADDR_STATE --> END_RETURN
    SET_PID_VAL --> END_RETURN
    SET_PID_STATE --> END_RETURN
    SET_MANS_ID_VAL --> END_RETURN
    SET_MANS_ID_STATE --> END_RETURN
    SET_CATID_VAL --> END_RETURN
    SET_CATID_STATE --> END_RETURN
```

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | The business item name (項目名) that identifies which field to populate. Can be a plain item name (e.g., `"SWISSID"`, `"サービス契約番号"`) or an indexed list key with a slash separator (e.g., `"異動理由コード/0"`) for array-type fields. |
| 2 | `subkey` | `String` | The attribute subkey identifying whether the data is a `"value"` (the actual field value) or `"state"` (a state flag). Case-insensitive matching via `equalsIgnoreCase`. |
| 3 | `in_value` | `Object` | The data payload to store. Cast to `String` by the target setter. For list-type fields, this is forwarded to a nested `X33VDataTypeStringBean.storeModelData()` call. |
| 4 | `isSetAsString` | `boolean` | Flag indicating whether to set a String-type value into a Long-type item Value property. Passed through to nested list bean calls (`X33VDataTypeLongBean` / `X33VDataTypeStringBean`). Unused by the scalar setters in this method. |

**Instance fields read:**
| Field | Type | Usage |
|-------|------|-------|
| `hktgi_ido_rsn_cd_list` | `ArrayList` | List of move reason code beans — accessed for array-type dispatch |
| `hktgi_op_svc_kei_no_list` | `ArrayList` | List of option service contract number beans — accessed for array-type dispatch |
| `hktgi_mskm_svc_kei_no_list` | `ArrayList` | List of concurrent application service contract number beans — accessed for array-type dispatch |

**Instance fields written (setters invoked):**
| Setter | Target Field | Data Type |
|--------|-------------|-----------|
| `setHktgi_sysid_state` / `setHktgi_sysid_value` | System ID (`hktgi_sysid`) | String |
| `setHktgi_svc_kei_no_state` / `setHktgi_svc_kei_no_value` | Service Contract Number (`hktgi_svc_kei_no`) | String |
| `setHktgi_ido_div_state` / `setHktgi_ido_div_value` | Transfer Classification (`hktgi_ido_div`) | String |
| `setHktgi_ido_rsn_memo_state` / `setHktgi_ido_rsn_memo_value` | Move Reason Memo (`hktgi_ido_rsn_memo`) | String |
| `setHktgi_tran_div_state` / `setHktgi_tran_div_value` | Processing Classification (`hktgi_tran_div`) | String |
| `setHktgi_mskm_no_state` / `setHktgi_mskm_no_value` | Application Number (`hktgi_mskm_no`) | String |
| `setHktgi_mskm_dtl_no_state` / `setHktgi_mskm_dtl_no_value` | Application Detail Number (`hktgi_mskm_dtl_no`) | String |
| `setHktgi_tokutei_id_kmk_nm_state` / `setHktgi_tokutei_id_kmk_nm_value` | Special ID Item Name (`hktgi_tokutei_id_kmk_nm`) | String |
| `setHktgi_tokutei_id_kmk_value_state` / `setHktgi_tokutei_id_kmk_value_value` | Special ID Item Value (`hktgi_tokutei_id_kmk_value`) | String |
| `setHktgi_popup_mode_state` / `setHktgi_popup_mode_value` | Popup Mode (`hktgi_popup_mode`) | String |
| `setHktgi_mans_nm_state` / `setHktgi_mans_nm_value` | Mansion Name (`hktgi_mans_nm`) | String |
| `setHktgi_mans_ad_nm_state` / `setHktgi_mans_ad_nm_value` | Address (`hktgi_mans_ad_nm`) | String |
| `setHktgi_pid_state` / `setHktgi_pid_value` | P-ID (`hktgi_pid`) | String |
| `setHktgi_mans_id_state` / `setHktgi_mans_id_value` | M-ID (`hktgi_mans_id`) | String |
| `setHktgi_catid_state` / `setHktgi_catid_value` | CAT-ID (`hktgi_catid`) | String |

## 4. CRUD Operations / Called Services

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `JKKAdEditCC.substring` | JKKAdEditCC | - | Calls `substring` in `JKKAdEditCC` |
| - | `JKKAdEdit.substring` | JKKAdEdit | - | Calls `substring` in `JKKAdEdit` |
| - | `JKKTelnoInfoAddMapperCC.substring` | JKKTelnoInfoAddMapperCC | - | Calls `substring` in `JKKTelnoInfoAddMapperCC` |
| - | `JDKejbStringEdit.substring` | JDKejbStringEdit | - | Calls `substring` in `JDKejbStringEdit` |
| - | `KKW05501SF03DBean.setHktgi_catid_state` | KKW05501SF03DBean | - | Calls `setHktgi_catid_state` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_catid_value` | KKW05501SF03DBean | - | Calls `setHktgi_catid_value` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_ido_div_state` | KKW05501SF03DBean | - | Calls `setHktgi_ido_div_state` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_ido_div_value` | KKW05501SF03DBean | - | Calls `setHktgi_ido_div_value` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_ido_rsn_memo_state` | KKW05501SF03DBean | - | Calls `setHktgi_ido_rsn_memo_state` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_ido_rsn_memo_value` | KKW05501SF03DBean | - | Calls `setHktgi_ido_rsn_memo_value` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_mans_ad_nm_state` | KKW05501SF03DBean | - | Calls `setHktgi_mans_ad_nm_state` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_mans_ad_nm_value` | KKW05501SF03DBean | - | Calls `setHktgi_mans_ad_nm_value` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_mans_id_state` | KKW05501SF03DBean | - | Calls `setHktgi_mans_id_state` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_mans_id_value` | KKW05501SF03DBean | - | Calls `setHktgi_mans_id_value` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_mans_nm_state` | KKW05501SF03DBean | - | Calls `setHktgi_mans_nm_state` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_mans_nm_value` | KKW05501SF03DBean | - | Calls `setHktgi_mans_nm_value` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_mskm_dtl_no_state` | KKW05501SF03DBean | - | Calls `setHktgi_mskm_dtl_no_state` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_mskm_dtl_no_value` | KKW05501SF03DBean | - | Calls `setHktgi_mskm_dtl_no_value` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_mskm_no_state` | KKW05501SF03DBean | - | Calls `setHktgi_mskm_no_state` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_mskm_no_value` | KKW05501SF03DBean | - | Calls `setHktgi_mskm_no_value` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_pid_state` | KKW05501SF03DBean | - | Calls `setHktgi_pid_state` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_pid_value` | KKW05501SF03DBean | - | Calls `setHktgi_pid_value` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_popup_mode_state` | KKW05501SF03DBean | - | Calls `setHktgi_popup_mode_state` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_popup_mode_value` | KKW05501SF03DBean | - | Calls `setHktgi_popup_mode_value` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_svc_kei_no_state` | KKW05501SF03DBean | - | Calls `setHktgi_svc_kei_no_state` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_svc_kei_no_value` | KKW05501SF03DBean | - | Calls `setHktgi_svc_kei_no_value` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_sysid_state` | KKW05501SF03DBean | - | Calls `setHktgi_sysid_state` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_sysid_value` | KKW05501SF03DBean | - | Calls `setHktgi_sysid_value` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_tokutei_id_kmk_nm_state` | KKW05501SF03DBean | - | Calls `setHktgi_tokutei_id_kmk_nm_state` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_tokutei_id_kmk_nm_value` | KKW05501SF03DBean | - | Calls `setHktgi_tokutei_id_kmk_nm_value` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_tokutei_id_kmk_value_state` | KKW05501SF03DBean | - | Calls `setHktgi_tokutei_id_kmk_value_state` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_tokutei_id_kmk_value_value` | KKW05501SF03DBean | - | Calls `setHktgi_tokutei_id_kmk_value_value` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_tran_div_state` | KKW05501SF03DBean | - | Calls `setHktgi_tran_div_state` in `KKW05501SF03DBean` |
| - | `KKW05501SF03DBean.setHktgi_tran_div_value` | KKW05501SF03DBean | - | Calls `setHktgi_tran_div_value` in `KKW05501SF03DBean` |
| - | `X33VDataTypeStringBean.storeModelData` | X33VDataTypeStringBean | - | Recursive delegate call for list-type fields |
| - | `Integer.valueOf` | java.lang | - | Parses list index string from key parameter |

This method performs **no direct database or SC/CBS operations**. It is a pure in-memory data-routing dispatch method that populates bean fields. All setters are U (Update) operations on the bean's internal state, and the three array-type fields delegate to nested `X33VDataTypeStringBean.storeModelData()` calls, which follow the same routing pattern.

## 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: `setHktgi_catid_state` [-], `setHktgi_catid_value` [-], `setHktgi_mans_id_state` [-], `setHktgi_mans_id_value` [-], `setHktgi_pid_state` [-], `setHktgi_pid_value` [-], `setHktgi_mans_ad_nm_state` [-], `setHktgi_mans_ad_nm_value` [-], `setHktgi_mans_nm_state` [-], `setHktgi_mans_nm_value` [-], `storeModelData` [-], `storeModelData` [-], `storeModelData` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `setHktgi_popup_mode_state` [-], `setHktgi_popup_mode_value` [-], `setHktgi_tokutei_id_kmk_value_state` [-]

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | `KKW05501SF03DBean.storeModelData()` | `KKW05501SF03DBean.storeModelData(key, subkey, in_value, isSetAsString)` | Scalar setters [U] (bean fields), nested `storeModelData` [U] |
| 2 | `KKW05501SF03DBean.storeModelData()` | `KKW05501SF03DBean.storeModelData(key, subkey, in_value)` (2-arg overload) | Scalar setters [U] (bean fields), nested `storeModelData` [U] |

**Summary of call chains:** The pre-computed caller data shows that `storeModelData` is invoked directly by 2 caller methods within the same bean class (`KKW05501SF03DBean`). These callers invoke the method with varying argument counts (4-arg full form and 2-arg overload). The method terminates via scalar field setters (U: bean field update) or recursive nested `storeModelData` calls for list-type fields (U: nested bean field update).

## 6. Per-Branch Detail Blocks

**Block 1** — IF (null guard) (L820)

> If key or subkey is null, terminate immediately — no processing occurs.

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key == null \|\| subkey == null` |
| 2 | RETURN | `return;` |

**Block 2** — EXEC (separator extraction) (L824)

| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = key.indexOf("/")` |

**Block 3** — IF-ELSE-IF chain: scalar String fields

**Block 3.1** — IF [SWISSID = "SWISSID"] (L827)

> Sets the System ID (hktgi_sysid) field — the identifier for the telecom access line system.

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("SWISSID")` |
| 2 | IF | `subkey.equalsIgnoreCase("value")` [L828] |
| 3 | SET | `setHktgi_sysid_value((String)in_value)` // 項目ID:hktgi_sysid (System ID) |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` [L831] // ステータスを返す (Returns the status) |
| 5 | SET | `setHktgi_sysid_state((String)in_value)` |

**Block 3.2** — ELSE-IF [サービス契約番号 = "サービス契約番号"] (L836)

> Sets the Service Contract Number (hktgi_svc_kei_no) field — the contract number for the telecom service line.

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("サービス契約番号")` |
| 2 | IF | `subkey.equalsIgnoreCase("value")` [L837] |
| 3 | SET | `setHktgi_svc_kei_no_value((String)in_value)` // 項目ID:hktgi_svc_kei_no |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` [L840] // ステータスを返す |
| 5 | SET | `setHktgi_svc_kei_no_state((String)in_value)` |

**Block 3.3** — ELSE-IF [異動区分 = "異動区分"] (L845)

> Sets the Transfer Classification (hktgi_ido_div) field — the classification code for account transfer/move operations.

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("異動区分")` |
| 2 | IF | `subkey.equalsIgnoreCase("value")` [L846] |
| 3 | SET | `setHktgi_ido_div_value((String)in_value)` // 項目ID:hktgi_ido_div |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` [L849] // ステータスを返す |
| 5 | SET | `setHktgi_ido_div_state((String)in_value)` |

**Block 4** — ELSE-IF: List field — 異動理由コード (Move Reason Code) (L855)

> Handles the Move Reason Code list field (hktgi_ido_rsn_cd). The key contains a slash-separated index (e.g., "異動理由コード/0"). Parses the index, bounds-checks against the list size, and delegates to the nested bean's `storeModelData` method.

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("異動理由コード")` |
| 2 | SET | `key = key.substring(separaterPoint + 1)` // 最初の"/"より後を取得 (Extracts after the first "/") |
| 3 | SET | `tmpIndexInt = null` |
| 4 | TRY-CATCH (NumberFormatException) [L860] (L860) |
| 4.1 | EXEC | `tmpIndexInt = Integer.valueOf(key)` |
| 4.2 | CATCH | `catch(NumberFormatException e) { tmpIndexInt = null; }` // インデックス値が数値文字列でない場合はnullを返す (Returns null if index value is not numeric) |
| 5 | IF | `tmpIndexInt != null` [L866] // インデックス値が数値文字列の場合 (Index value is numeric) |
| 5.1 | SET | `tmpIndex = tmpIndexInt.intValue()` |
| 5.2 | IF | `tmpIndex >= 0 && tmpIndex < hktgi_ido_rsn_cd_list.size()` [L868] // リスト個数-1以下 (Index within list bounds) |
| 5.2.1 | EXEC | `((X33VDataTypeStringBean)hktgi_ido_rsn_cd_list.get(tmpIndex)).storeModelData(subkey, in_value)` |
| 5.2.2 | COMMENT | キャスト: X33VDataTypeStringBean / X33VDataTypeLongBean / X33VDataTypeBooleanBean (Cast to data type bean based on field definition) |

**Block 5** — ELSE-IF [異動理由メモ = "異動理由メモ"] (L884)

> Sets the Move Reason Memo (hktgi_ido_rsn_memo) field — free-text memo for the account transfer reason.

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("異動理由メモ")` |
| 2 | IF | `subkey.equalsIgnoreCase("value")` [L885] |
| 3 | SET | `setHktgi_ido_rsn_memo_value((String)in_value)` // 項目ID:hktgi_ido_rsn_memo |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` [L888] // ステータスを返す |
| 5 | SET | `setHktgi_ido_rsn_memo_state((String)in_value)` |

**Block 6** — ELSE-IF: List field — オプションサービス契約番号 (Option Service Contract Number) (L893)

> Handles the Option Service Contract Number list field (hktgi_op_svc_kei_no). Same pattern as Block 4: index extraction, parse, bounds check, nested delegation.

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("オプションサービス契約番号")` |
| 2 | SET | `key = key.substring(separaterPoint + 1)` |
| 3 | SET | `tmpIndexInt = null` |
| 4 | TRY-CATCH [L898] |
| 4.1 | EXEC | `tmpIndexInt = Integer.valueOf(key)` |
| 4.2 | CATCH | `catch(NumberFormatException e) { tmpIndexInt = null; }` |
| 5 | IF | `tmpIndexInt != null` [L904] |
| 5.1 | SET | `tmpIndex = tmpIndexInt.intValue()` |
| 5.2 | IF | `tmpIndex >= 0 && tmpIndex < hktgi_op_svc_kei_no_list.size()` [L906] |
| 5.2.1 | EXEC | `((X33VDataTypeStringBean)hktgi_op_svc_kei_no_list.get(tmpIndex)).storeModelData(subkey, in_value)` |

**Block 7** — ELSE-IF [処理区分 = "処理区分"] (L911)

> Sets the Processing Classification (hktgi_tran_div) field — the code classifying the type of processing (e.g., new registration, modification, cancellation).

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("処理区分")` |
| 2 | IF | `subkey.equalsIgnoreCase("value")` [L912] |
| 3 | SET | `setHktgi_tran_div_value((String)in_value)` // 項目ID:hktgi_tran_div |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` [L915] // ステータスを返す |
| 5 | SET | `setHktgi_tran_div_state((String)in_value)` |

**Block 8** — ELSE-IF [申請番号 = "申請番号"] (L920)

> Sets the Application Number (hktgi_mskm_no) field — the master application/tracking number for the service request.

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("申請番号")` |
| 2 | IF | `subkey.equalsIgnoreCase("value")` [L921] |
| 3 | SET | `setHktgi_mskm_no_value((String)in_value)` // 項目ID:hktgi_mskm_no |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` [L924] // ステータスを返す |
| 5 | SET | `setHktgi_mskm_no_state((String)in_value)` |

**Block 9** — ELSE-IF [申請詳細番号 = "申請詳細番号"] (L929)

> Sets the Application Detail Number (hktgi_mskm_dtl_no) field — the detail-level line number within an application.

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("申請詳細番号")` |
| 2 | IF | `subkey.equalsIgnoreCase("value")` [L930] |
| 3 | SET | `setHktgi_mskm_dtl_no_value((String)in_value)` // 項目ID:hktgi_mskm_dtl_no |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` [L933] // ステータスを返す |
| 5 | SET | `setHktgi_mskm_dtl_no_state((String)in_value)` |

**Block 10** — ELSE-IF [特定ID項目名 = "特定ID項目名"] (L938)

> Sets the Special ID Item Name (hktgi_tokutei_id_kmk_nm) field — the field name for a designated/specified ID item used in special identification scenarios.

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("特定ID項目名")` |
| 2 | IF | `subkey.equalsIgnoreCase("value")` [L939] |
| 3 | SET | `setHktgi_tokutei_id_kmk_nm_value((String)in_value)` // 項目ID:hktgi_tokutei_id_kmk_nm |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` [L942] // ステータスを返す |
| 5 | SET | `setHktgi_tokutei_id_kmk_nm_state((String)in_value)` |

**Block 11** — ELSE-IF [特定ID項目値 = "特定ID項目値"] (L947)

> Sets the Special ID Item Value (hktgi_tokutei_id_kmk_value) field — the actual value for the designated ID item.

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("特定ID項目値")` |
| 2 | IF | `subkey.equalsIgnoreCase("value")` [L948] |
| 3 | SET | `setHktgi_tokutei_id_kmk_value_value((String)in_value)` // 項目ID:hktgi_tokutei_id_kmk_value |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` [L951] // ステータスを返す |
| 5 | SET | `setHktgi_tokutei_id_kmk_value_state((String)in_value)` |

**Block 12** — ELSE-IF [ポップアップモード = "ポップアップモード"] (L956)

> Sets the Popup Mode (hktgi_popup_mode) field — the mode flag controlling popup window behavior on the screen.

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("ポップアップモード")` |
| 2 | IF | `subkey.equalsIgnoreCase("value")` [L957] |
| 3 | SET | `setHktgi_popup_mode_value((String)in_value)` // 項目ID:hktgi_popup_mode |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` [L960] // ステータスを返す |
| 5 | SET | `setHktgi_popup_mode_state((String)in_value)` |

**Block 13** — ELSE-IF: List field — 同時申請サービス契約番号 (Concurrent Application Service Contract Number) (L965)

> Handles the Concurrent Application Service Contract Number list field (hktgi_mskm_svc_kei_no). Same list-based dispatch pattern as Blocks 4 and 6: index extraction, parse, bounds check, nested delegation.

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("同時申請サービス契約番号")` |
| 2 | SET | `key = key.substring(separaterPoint + 1)` |
| 3 | SET | `tmpIndexInt = null` |
| 4 | TRY-CATCH [L970] |
| 4.1 | EXEC | `tmpIndexInt = Integer.valueOf(key)` |
| 4.2 | CATCH | `catch(NumberFormatException e) { tmpIndexInt = null; }` |
| 5 | IF | `tmpIndexInt != null` [L976] |
| 5.1 | SET | `tmpIndex = tmpIndexInt.intValue()` |
| 5.2 | IF | `tmpIndex >= 0 && tmpIndex < hktgi_mskm_svc_kei_no_list.size()` [L978] |
| 5.2.1 | EXEC | `((X33VDataTypeStringBean)hktgi_mskm_svc_kei_no_list.get(tmpIndex)).storeModelData(subkey, in_value)` |

**Block 14** — ELSE-IF [マンスション名 = "マンスション名"] (L983)

> Sets the Mansion Name (hktgi_mans_nm) field — the name of the condominium/apartment building where the service will be provisioned.

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("マンスション名")` |
| 2 | IF | `subkey.equalsIgnoreCase("value")` [L984] |
| 3 | SET | `setHktgi_mans_nm_value((String)in_value)` // 項目ID:hktgi_mans_nm |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` [L987] // ステータスを返す |
| 5 | SET | `setHktgi_mans_nm_state((String)in_value)` |

**Block 15** — ELSE-IF [住所 = "住所"] (L992)

> Sets the Address (hktgi_mans_ad_nm) field — the street address of the service location.

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("住所")` |
| 2 | IF | `subkey.equalsIgnoreCase("value")` [L993] |
| 3 | SET | `setHktgi_mans_ad_nm_value((String)in_value)` // 項目ID:hktgi_mans_ad_nm |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` [L996] // ステータスを返す |
| 5 | SET | `setHktgi_mans_ad_nm_state((String)in_value)` |

**Block 16** — ELSE-IF [Ｐ－ＩＤ = "Ｐ－ＩＤ"] (L1001)

> Sets the P-ID (hktgi_pid) field — the postal/property ID in half-width Katakana format, used for customer identification.

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("Ｐ－ＩＤ")` |
| 2 | IF | `subkey.equalsIgnoreCase("value")` [L1002] |
| 3 | SET | `setHktgi_pid_value((String)in_value)` // 項目ID:hktgi_pid |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` [L1005] // ステータスを返す |
| 5 | SET | `setHktgi_pid_state((String)in_value)` |

**Block 17** — ELSE-IF [Ｍ－ＩＤ = "Ｍ－ＩＤ"] (L1010)

> Sets the M-ID (hktgi_mans_id) field — the mansion/property manager ID in half-width Katakana format.

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("Ｍ－ＩＤ")` |
| 2 | IF | `subkey.equalsIgnoreCase("value")` [L1011] |
| 3 | SET | `setHktgi_mans_id_value((String)in_value)` // 項目ID:hktgi_mans_id |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` [L1014] // ステータスを返す |
| 5 | SET | `setHktgi_mans_id_state((String)in_value)` |

**Block 18** — ELSE-IF [ＣＡＴ－ＩＤ = "ＣＡＴ－ＩＤ"] (L1019)

> Sets the CAT-ID (hktgi_catid) field — the category ID in half-width Katakana format, used for grouping or classification of service types.

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("ＣＡＴ－ＩＤ")` |
| 2 | IF | `subkey.equalsIgnoreCase("value")` [L1020] |
| 3 | SET | `setHktgi_catid_value((String)in_value)` // 項目ID:hktgi_catid |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` [L1023] // ステータスを返す |
| 5 | SET | `setHktgi_catid_state((String)in_value)` |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `hktgi_sysid` | Field | System ID — the unique identifier for the telecom access line system assigned to a customer service line |
| `hktgi_svc_kei_no` | Field | Service Contract Number — the contract number for the primary telecom service line |
| `hktgi_ido_div` | Field | Transfer Classification (異動区分) — the classification code for account transfer/move operations (e.g., new activation, port-in, reassignment) |
| `hktgi_ido_rsn_cd` | Field | Move Reason Code (異動理由コード) — a list/array of codes describing the reason for account transfer/move |
| `hktgi_ido_rsn_memo` | Field | Move Reason Memo (異動理由メモ) — free-text memo field for additional details on the transfer reason |
| `hktgi_op_svc_kei_no` | Field | Option Service Contract Number (オプションサービス契約番号) — a list/array of optional/add-on service contract numbers associated with the primary line |
| `hktgi_tran_div` | Field | Processing Classification (処理区分) — the code classifying the type of processing (new registration, modification, cancellation, etc.) |
| `hktgi_mskm_no` | Field | Application Number (申請番号) — the master application/tracking number for the service request |
| `hktgi_mskm_dtl_no` | Field | Application Detail Number (申請詳細番号) — the line-level item number within an application |
| `hktgi_tokutei_id_kmk_nm` | Field | Special ID Item Name (特定ID項目名) — the field name for a designated/specified identification item used in special scenarios |
| `hktgi_tokutei_id_kmk_value` | Field | Special ID Item Value (特定ID項目値) — the actual value for the designated ID item |
| `hktgi_popup_mode` | Field | Popup Mode (ポップアップモード) — the flag controlling popup window behavior on the service order screen |
| `hktgi_mans_nm` | Field | Mansion Name (マンスション名) — the name of the condominium/apartment building where service is provisioned |
| `hktgi_mans_ad_nm` | Field | Address (住所) — the street address of the service location |
| `hktgi_pid` | Field | P-ID (Ｐ－ＩＤ) — postal/property ID in half-width Katakana format for customer identification |
| `hktgi_mans_id` | Field | M-ID (Ｍ－ＩＤ) — mansion/property manager ID in half-width Katakana format |
| `hktgi_catid` | Field | CAT-ID (ＣＡＴ－ＩＤ) — category ID in half-width Katakana format for service type grouping |
| `hktgi_mskm_svc_kei_no` | Field | Concurrent Application Service Contract Number (同時申請サービス契約番号) — a list/array of service contract numbers applied simultaneously with the primary request |
| key | Parameter | Business item name that identifies which bean field to route the data to |
| subkey | Parameter | Attribute subkey — `"value"` for the actual field value, `"state"` for the state flag |
| in_value | Parameter | The data payload to store in the target field |
| isSetAsString | Parameter | Flag indicating whether to set a String-type value into a Long-type item Value property |
| X33VDataTypeStringBean | Class | Generic data-type bean for String values, used for list-based item delegation |
| X33VDataTypeLongBean | Class | Generic data-type bean for Long values, used for list-based item delegation |
| X33VDataTypeBooleanBean | Class | Generic data-type bean for Boolean values, used for list-based item delegation |
| 異動 (Idou) | Japanese term | Transfer/Move — refers to account transfer operations in telecom services (e.g., porting, reassignment) |
| 申請 (Shinsei) | Japanese term | Application — refers to the formal service request/application process |
| 処理区分 (Shori Kubun) | Japanese term | Processing Classification — codes that determine how a request is processed (new, modify, cancel) |
| 特定ID (Tokutei ID) | Japanese term | Designated/Special ID — identification fields used for specific regulatory or business identification requirements |
| 同時申請 (Doushin Shinsei) | Japanese term | Concurrent Application — multiple service contracts applied simultaneously in a single request |
