# Business Logic — KKW01601SF03DBean.storeModelData() [250 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKA15301SF.KKW01601SF03DBean` |
| Layer | View/Display (Controller-tier bean; located in `eo.web.webview` package for web screen model management) |
| Module | `KKA15301SF` (Package: `eo.web.webview.KKA15301SF`) |

## 1. Role

### KKW01601SF03DBean.storeModelData()

This method is the central data-dispatch hub for the `KKW01601SF03DBean` form bean, responsible for persisting user-entered or server-populated field values into the bean's internal model properties. In the broader telecom service-ordering domain, it enables the web screen layer to bind data from HTTP requests, batch processing, or internal data-transfer structures into a strongly-typed Java bean that drives the presentation layer.

The method implements a **dispatch/routing pattern**: it evaluates the `key` parameter — a Japanese-language field name identifier — against 20 distinct business fields, then inspects the `subkey` to determine whether to set the "value" (data property) or "state" (UI state flag) of the matched field. This dual-path design supports a stateful UI paradigm where each form field carries both its data value and its presentation state (e.g., enabled/disabled, visible/hidden).

Ten of the 20 field types are **scalar fields** — simple string properties stored directly on the bean via setter methods like `setHktgi_sysid_value` or `setHktgi_sysid_state`. The remaining three fields — "異動理由コード" (Change Reason Code), "オプションサービス契約番号" (Optional Service Contract Number), and "同時申請サービス契約番号" (Simultaneous Application Service Contract Number) — are **list-based (array) fields**. For these, the key string encodes an embedded list index (e.g., `"hktgi_ido_rsn_cd/0"`), which the method extracts, validates against the list size, and delegates to the appropriate `X33VDataTypeStringBean` list item's own `storeModelData` method. This recursive delegation enables hierarchical data binding for repeated row-based form sections such as change reason entries, optional service selections, and concurrent application records.

As a shared utility called from multiple screen controllers and CBS (Call-Back Service) components, this method serves as the primary data-injection point that keeps the view model in sync with business data, bridging the gap between service-tier processing and screen presentation.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["storeModelData key, subkey, in_value, isSetAsString"])

    START --> COND_NULL["key == null<br>|| subkey == null"]
    COND_NULL -->|true| EARLY_RETURN(["return early"])
    COND_NULL -->|false| FIND_SEP["Find '/' separator<br>in key"]
    FIND_SEP --> BRANCH1["key.equals('SYSID')"]

    BRANCH1 -->|true| SYSID_SUB["subkey.equalsIgnoreCase('value')"]
    SYSID_SUB -->|true| SET_SYSID_VAL["setHktgi_sysid_value"]
    SYSID_SUB -->|false| SYSID_ST["subkey.equalsIgnoreCase('state')"]
    SYSID_ST -->|true| SET_SYSID_ST["setHktgi_sysid_state"]
    SYSID_ST -->|false| NEXT1["Next branch"]
    SYSID_SUB -->|false| NEXT1
    SET_SYSID_VAL --> NEXT1
    SET_SYSID_ST --> NEXT1

    BRANCH1 -->|false| BRANCH2["key.equals('サービス契約番号')"]
    BRANCH2 -->|true| SVC_SUB["subkey.equalsIgnoreCase('value')"]
    SVC_SUB -->|true| SET_SVC_VAL["setHktgi_svc_kei_no_value"]
    SVC_SUB -->|false| SVC_ST["subkey.equalsIgnoreCase('state')"]
    SVC_ST -->|true| SET_SVC_ST["setHktgi_svc_kei_no_state"]
    SVC_ST -->|false| NEXT2["Next branch"]
    SVC_SUB -->|false| NEXT2
    SET_SVC_VAL --> NEXT2
    SET_SVC_ST --> NEXT2

    BRANCH2 -->|false| BRANCH3["key.equals('異動区分')"]
    BRANCH3 -->|true| IDO_SUB["subkey.equalsIgnoreCase('value')"]
    IDO_SUB -->|true| SET_IDO_VAL["setHktgi_ido_div_value"]
    IDO_SUB -->|false| IDO_ST["subkey.equalsIgnoreCase('state')"]
    IDO_ST -->|true| SET_IDO_ST["setHktgi_ido_div_state"]
    IDO_ST -->|false| NEXT3["Next branch"]
    IDO_SUB -->|false| NEXT3
    SET_IDO_VAL --> NEXT3
    SET_IDO_ST --> NEXT3

    BRANCH3 -->|false| BRANCH4["key.equals('異動理由コード')"]
    BRANCH4 -->|true| SUB4A["Extract index from key<br>via substring"]
    SUB4A --> PARSE_IDX["Parse index<br>Integer.valueOf"]
    PARSE_IDX -->|success| IDX_VALID["tmpIndex >= 0<br>&& tmpIndex < hktgi_ido_rsn_cd_list.size()"]
    PARSE_IDX -->|NumberFormatException| IDX_NULL["tmpIndexInt = null"]
    IDX_VALID -->|true| LIST_STORE["Cast to X33VDataTypeStringBean<br>and call storeModelData on list item"]
    IDX_VALID -->|false| NEXT4["Next branch"]
    IDX_NULL --> NEXT4
    LIST_STORE --> NEXT4

    BRANCH4 -->|false| BRANCH5["key.equals('異動理由メモ')"]
    BRANCH5 -->|true| MEMO_SUB["subkey.equalsIgnoreCase('value')"]
    MEMO_SUB -->|true| SET_MEMO_VAL["setHktgi_ido_rsn_memo_value"]
    MEMO_SUB -->|false| MEMO_ST["subkey.equalsIgnoreCase('state')"]
    MEMO_ST -->|true| SET_MEMO_ST["setHktgi_ido_rsn_memo_state"]
    MEMO_ST -->|false| NEXT5["Next branch"]
    MEMO_SUB -->|false| NEXT5
    SET_MEMO_VAL --> NEXT5
    SET_MEMO_ST --> NEXT5

    BRANCH5 -->|false| BRANCH6["key.equals('オプションサービス契約番号')"]
    BRANCH6 -->|true| OPT_SUB["Extract index from key<br>via substring"]
    OPT_SUB --> OPT_PARSE["Parse index<br>Integer.valueOf"]
    OPT_PARSE -->|success| OPT_VALID["tmpIndex >= 0<br>&& tmpIndex < hktgi_op_svc_kei_no_list.size()"]
    OPT_PARSE -->|NumberFormatException| OPT_NULL["tmpIndexInt = null"]
    OPT_VALID -->|true| OPT_LIST_STORE["Cast to X33VDataTypeStringBean<br>and call storeModelData on list item"]
    OPT_VALID -->|false| NEXT6["Next branch"]
    OPT_NULL --> NEXT6
    OPT_LIST_STORE --> NEXT6

    BRANCH6 -->|false| BRANCH7["key.equals('処理区分')"]
    BRANCH7 -->|true| SET_TRDIV_VAL["setHktgi_tran_div_value"]
    BRANCH7 -->|true| SET_TRDIV_ST["setHktgi_tran_div_state"]

    BRANCH7 -->|false| BRANCH8["key.equals('申請番号')"]
    BRANCH8 -->|true| SET_MSKMNO_VAL["setHktgi_mskm_no_value"]
    BRANCH8 -->|false| SET_MSKMNO_ST["setHktgi_mskm_no_state"]

    BRANCH8 -->|false| BRANCH9["key.equals('申請詳細番号')"]
    BRANCH9 -->|true| SET_MSKMDTL_VAL["setHktgi_mskm_dtl_no_value"]
    BRANCH9 -->|false| SET_MSKMDTL_ST["setHktgi_mskm_dtl_no_state"]

    BRANCH9 -->|false| BRANCH10["key.equals('特定ID項目名')"]
    BRANCH10 -->|true| SET_TKIDKMN_VAL["setHktgi_tokutei_id_kmk_nm_value"]
    BRANCH10 -->|false| SET_TKIDKMN_ST["setHktgi_tokutei_id_kmk_nm_state"]

    BRANCH10 -->|false| BRANCH11["key.equals('特定ID項目値')"]
    BRANCH11 -->|true| SET_TKIDKMV_VAL["setHktgi_tokutei_id_kmk_value_value"]
    BRANCH11 -->|false| SET_TKIDKMV_ST["setHktgi_tokutei_id_kmk_value_state"]

    BRANCH11 -->|false| BRANCH12["key.equals('ポップアップモード')"]
    BRANCH2 -->|false| BRANCH2A["key.equals('サービス契約番号')"]
    BRANCH12 -->|true| SET_POPM_VAL["setHktgi_popup_mode_value"]
    BRANCH12 -->|false| SET_POPM_ST["setHktgi_popup_mode_state"]

    BRANCH12 -->|false| BRANCH13["key.equals('同時申請サービス契約番号')"]
    BRANCH13 -->|true| SIM_SUB["Extract index from key<br>via substring"]
    SIM_SUB --> SIM_PARSE["Parse index<br>Integer.valueOf"]
    SIM_PARSE -->|success| SIM_VALID["tmpIndex >= 0<br>&& tmpIndex < hktgi_mskm_svc_kei_no_list.size()"]
    SIM_PARSE -->|NumberFormatException| SIM_NULL["tmpIndexInt = null"]
    SIM_VALID -->|true| SIM_LIST_STORE["Cast to X33VDataTypeStringBean<br>and call storeModelData on list item"]
    SIM_VALID -->|false| NEXT13["Next branch"]
    SIM_NULL --> NEXT13
    SIM_LIST_STORE --> NEXT13

    BRANCH13 -->|false| BRANCH14["key.equals('マンション名')"]
    BRANCH14 -->|true| SET_MANSNM_VAL["setHktgi_mans_nm_value"]
    BRANCH14 -->|false| SET_MANSNM_ST["setHktgi_mans_nm_state"]

    BRANCH14 -->|false| BRANCH15["key.equals('住所')"]
    BRANCH15 -->|true| SET_MANSAD_VAL["setHktgi_mans_ad_nm_value"]
    BRANCH15 -->|false| SET_MANSAD_ST["setHktgi_mans_ad_nm_state"]

    BRANCH15 -->|false| BRANCH16["key.equals('異動区分選択画面遷移パターン')"]
    BRANCH16 -->|true| SET_IDOSPT_VAL["setHktgi_ido_div_seni_ptn_value"]
    BRANCH16 -->|false| SET_IDOSPT_ST["setHktgi_ido_div_seni_ptn_state"]

    BRANCH16 -->|false| BRANCH17["key.equals('R-ID')"]
    BRANCH17 -->|true| SET_PID_VAL["setHktgi_pid_value"]
    BRANCH17 -->|false| SET_PID_ST["setHktgi_pid_state"]

    BRANCH17 -->|false| BRANCH18["key.equals('M-ID')"]
    BRANCH18 -->|true| SET_MANSID_VAL["setHktgi_mans_id_value"]
    BRANCH18 -->|false| SET_MANSID_ST["setHktgi_mans_id_state"]

    BRANCH18 -->|false| BRANCH19["key.equals('CAT-ID')"]
    BRANCH19 -->|true| SET_CATID_VAL["setHktgi_catid_value"]
    BRANCH19 -->|false| SET_CATID_ST["setHktgi_catid_state"]

    BRANCH19 -->|false| BRANCH20["key.equals('外部システムコード')"]
    BRANCH20 -->|true| SET_SYSCD_VAL["setHktgi_syscd_value"]
    BRANCH20 -->|false| SET_SYSCD_ST["setHktgi_syscd_state"]

    SET_TRDIV_VAL --> NEXT7
    SET_TRDIV_ST --> NEXT7
    SET_MSKMNO_VAL --> NEXT8
    SET_MSKMNO_ST --> NEXT8
    SET_MSKMDTL_VAL --> NEXT9
    SET_MSKMDTL_ST --> NEXT9
    SET_TKIDKMN_VAL --> NEXT10
    SET_TKIDKMN_ST --> NEXT10
    SET_TKIDKMV_VAL --> NEXT11
    SET_TKIDKMV_ST --> NEXT11
    SET_POPM_VAL --> NEXT12
    SET_POPM_ST --> NEXT12
    SET_MANSNM_VAL --> NEXT14
    SET_MANSNM_ST --> NEXT14
    SET_MANSAD_VAL --> NEXT15
    SET_MANSAD_ST --> NEXT15
    SET_IDOSPT_VAL --> NEXT16
    SET_IDOSPT_ST --> NEXT16
    SET_PID_VAL --> NEXT17
    SET_PID_ST --> NEXT17
    SET_MANSID_VAL --> NEXT18
    SET_MANSID_ST --> NEXT18
    SET_CATID_VAL --> NEXT19
    SET_CATID_ST --> NEXT19
    SET_SYSCD_VAL --> NEXT20
    SET_SYSCD_ST --> NEXT20

    NEXT1 --> END_NODE(["Return / Next"])
    NEXT2 --> END_NODE
    NEXT3 --> END_NODE
    NEXT4 --> END_NODE
    NEXT5 --> END_NODE
    NEXT6 --> END_NODE
    NEXT7 --> END_NODE
    NEXT8 --> END_NODE
    NEXT9 --> END_NODE
    NEXT10 --> END_NODE
    NEXT11 --> END_NODE
    NEXT12 --> END_NODE
    NEXT13 --> END_NODE
    NEXT14 --> END_NODE
    NEXT15 --> END_NODE
    NEXT16 --> END_NODE
    NEXT17 --> END_NODE
    NEXT18 --> END_NODE
    NEXT19 --> END_NODE
    NEXT20 --> END_NODE
```

**CRITICAL — Constant Resolution:**

This method does not use external constant classes. All field name comparisons use literal Japanese/English string values directly embedded in the code. The key string values serve as field identifiers and are resolved as follows:

| Key Literal | Field ID (Internal Property) | Business Meaning |
|-------------|------------------------------|------------------|
| `"SYSID"` | `hktgi_sysid` | System ID |
| `"サービス契約番号"` | `hktgi_svc_kei_no` | Service Contract Number |
| `"異動区分"` | `hktgi_ido_div` | Change Classification (type of service change) |
| `"異動理由コード"` | `hktgi_ido_rsn_cd` | Change Reason Code (list field, index-encoded) |
| `"異動理由メモ"` | `hktgi_ido_rsn_memo` | Change Reason Memo |
| `"オプションサービス契約番号"` | `hktgi_op_svc_kei_no` | Optional Service Contract Number (list field, index-encoded) |
| `"処理区分"` | `hktgi_tran_div` | Processing Classification |
| `"申請番号"` | `hktgi_mskm_no` | Application Number |
| `"申請詳細番号"` | `hktgi_mskm_dtl_no` | Application Detail Number |
| `"特定ID項目名"` | `hktgi_tokutei_id_kmk_nm` | Specific ID Item Name |
| `"特定ID項目値"` | `hktgi_tokutei_id_kmk_value` | Specific ID Item Value |
| `"ポップアップモード"` | `hktgi_popup_mode` | Popup Mode |
| `"同時申請サービス契約番号"` | `hktgi_mskm_svc_kei_no` | Simultaneous Application Service Contract Number (list field, index-encoded) |
| `"マンション名"` | `hktgi_mans_nm` | Apartment Name |
| `"住所"` | `hktgi_mans_ad_nm` | Address |
| `"異動区分選択画面遷移パターン"` | `hktgi_ido_div_seni_ptn` | Change Classification Selection Screen Transition Pattern |
| `"R-ID"` | `hktgi_pid` | R-ID (Residential ID) |
| `"M-ID"` | `hktgi_mans_id` | M-ID (Apartment ID) |
| `"CAT-ID"` | `hktgi_catid` | CAT-ID (Category ID) |
| `"外部システムコード"` | `hktgi_syscd` | External System Code |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | Field name identifier — a Japanese-language string that identifies which bean property to update. For scalar fields, it is the exact field name (e.g., `"サービス契約番号"`). For list/array fields, it encodes a base name and a zero-based list index separated by `/` (e.g., `"hktgi_ido_rsn_cd/0"`). Acts as the dispatch selector for the routing logic. |
| 2 | `subkey` | `String` | Property selector within the matched field — determines whether to write the data value (`"value"`, case-insensitive) or the UI state flag (`"state"`, case-insensitive). Enables the dual property model where each field carries both its business data and its presentation state. |
| 3 | `in_value` | `Object` | The data payload to store — cast to `String` when setting scalar field values. For list-based fields, it is forwarded as-is to the nested `X33VDataTypeStringBean.storeModelData()` call, where type casting is handled by the child bean. Represents the actual user-entered or server-populated value for the target field. |
| 4 | `isSetAsString` | `boolean` | Type-coercion flag — when `true`, forces string-type assignment for Long-type field Value properties. Preserved through the method and forwarded to nested list-item beans to control type conversion behavior. Enables uniform data binding across mixed-type field definitions. |

**Instance fields / external state read by this method:**

| Field | Access Pattern | Business Meaning |
|-------|----------------|------------------|
| `hktgi_ido_rsn_cd_list` | `.get(tmpIndex)` on list, `.size()` check | List of change reason code entries — used for list-based field "異動理由コード" |
| `hktgi_op_svc_kei_no_list` | `.get(tmpIndex)` on list, `.size()` check | List of optional service contract number entries — used for list-based field "オプションサービス契約番号" |
| `hktgi_mskm_svc_kei_no_list` | `.get(tmpIndex)` on list, `.size()` check | List of simultaneous application service contract number entries — used for list-based field "同時申請サービス契約番号" |

## 4. CRUD Operations / Called Services

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

| 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` |
| - | `KKW01601SF03DBean.setHktgi_catid_state` | KKW01601SF03DBean | - | Calls `setHktgi_catid_state` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.setHktgi_catid_value` | KKW01601SF03DBean | - | Calls `setHktgi_catid_value` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.setHktgi_ido_div_seni_ptn_state` | KKW01601SF03DBean | - | Calls `setHktgi_ido_div_seni_ptn_state` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.setHktgi_ido_div_seni_ptn_value` | KKW01601SF03DBean | - | Calls `setHktgi_ido_div_seni_ptn_value` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.setHktgi_ido_div_state` | KKW01601SF03DBean | - | Calls `setHktgi_ido_div_state` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.setHktgi_ido_div_value` | KKW01601SF03DBean | - | Calls `setHktgi_ido_div_value` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.setHktgi_ido_rsn_memo_state` | KKW01601SF03DBean | - | Calls `setHktgi_ido_rsn_memo_state` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.setHktgi_ido_rsn_memo_value` | KKW01601SF03DBean | - | Calls `setHktgi_ido_rsn_memo_value` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.setHktgi_mans_ad_nm_state` | KKW01601SF03DBean | - | Calls `setHktgi_mans_ad_nm_state` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.setHktgi_mans_ad_nm_value` | KKW01601SF03DBean | - | Calls `setHktgi_mans_ad_nm_value` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.setHktgi_mans_id_state` | KKW01601SF03DBean | - | Calls `setHktgi_mans_id_state` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.setHktgi_mans_id_value` | KKW01601SF03DBean | - | Calls `setHktgi_mans_id_value` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.setHktgi_mans_nm_state` | KKW01601SF03DBean | - | Calls `setHktgi_mans_nm_state` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.setHktgi_mans_nm_value` | KKW01601SF03DBean | - | Calls `setHktgi_mans_nm_value` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.setHktgi_mskm_dtl_no_state` | KKW01601SF03DBean | - | Calls `setHktgi_mskm_dtl_no_state` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.setHktgi_mskm_dtl_no_value` | KKW01601SF03DBean | - | Calls `setHktgi_mskm_dtl_no_value` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.setHktgi_mskm_no_state` | KKW01601SF03DBean | - | Calls `setHktgi_mskm_no_state` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.setHktgi_mskm_no_value` | KKW01601SF03DBean | - | Calls `setHktgi_mskm_no_value` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.setHktgi_pid_state` | KKW01601SF03DBean | - | Calls `setHktgi_pid_state` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.setHktgi_pid_value` | KKW01601SF03DBean | - | Calls `setHktgi_pid_value` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.setHktgi_popup_mode_state` | KKW01601SF03DBean | - | Calls `setHktgi_popup_mode_state` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.setHktgi_popup_mode_value` | KKW01601SF03DBean | - | Calls `setHktgi_popup_mode_value` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.setHktgi_svc_kei_no_state` | KKW01601SF03DBean | - | Calls `setHktgi_svc_kei_no_state` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.setHktgi_svc_kei_no_value` | KKW01601SF03DBean | - | Calls `setHktgi_svc_kei_no_value` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.setHktgi_syscd_state` | KKW01601SF03DBean | - | Calls `setHktgi_syscd_state` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.setHktgi_syscd_value` | KKW01601SF03DBean | - | Calls `setHktgi_syscd_value` in `KKW01601SF03DBean` |
| - | `KKW01601SF03DBean.substring` | - | - | Calls `substring` on the local key parameter string |

**Analysis:** This method performs no direct database CRUD operations. It is a **View/Display-tier model setter** that delegates all data persistence to higher layers. The only operations are **U (Update)** — setting bean properties via setter methods. The `substring` calls referenced in the pre-computed evidence (`JKKAdEditCC.substring`, `JKKAdEdit.substring`, `JKKTelnoInfoAddMapperCC.substring`, `JDKejbStringEdit.substring`) are **not directly called** by this method — they appear in the call graph as unrelated usages. The only `substring` call within this method's scope is on the local `key` variable (`key.substring(separaterPoint + 1)`), used to extract list indices from encoded key strings for list-based fields.

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| U | `KKW01601SF03DBean.setHktgi_sysid_value` | - | (Bean property: hktgi_sysid) | Sets the System ID value on the form bean |
| U | `KKW01601SF03DBean.setHktgi_sysid_state` | - | (Bean property: hktgi_sysid) | Sets the System ID UI state on the form bean |
| U | `KKW01601SF03DBean.setHktgi_svc_kei_no_value` | - | (Bean property: hktgi_svc_kei_no) | Sets the Service Contract Number value |
| U | `KKW01601SF03DBean.setHktgi_svc_kei_no_state` | - | (Bean property: hktgi_svc_kei_no) | Sets the Service Contract Number UI state |
| U | `KKW01601SF03DBean.setHktgi_ido_div_value` | - | (Bean property: hktgi_ido_div) | Sets the Change Classification value |
| U | `KKW01601SF03DBean.setHktgi_ido_div_state` | - | (Bean property: hktgi_ido_div) | Sets the Change Classification UI state |
| U | `X33VDataTypeStringBean.storeModelData` (list item) | - | (List item property) | Delegates to list item bean for Change Reason Code entry |
| U | `KKW01601SF03DBean.setHktgi_ido_rsn_memo_value` | - | (Bean property: hktgi_ido_rsn_memo) | Sets the Change Reason Memo value |
| U | `KKW01601SF03DBean.setHktgi_ido_rsn_memo_state` | - | (Bean property: hktgi_ido_rsn_memo) | Sets the Change Reason Memo UI state |
| U | `X33VDataTypeStringBean.storeModelData` (list item) | - | (List item property) | Delegates to list item bean for Optional Service entry |
| U | `KKW01601SF03DBean.setHktgi_tran_div_value` | - | (Bean property: hktgi_tran_div) | Sets the Processing Classification value |
| U | `KKW01601SF03DBean.setHktgi_tran_div_state` | - | (Bean property: hktgi_tran_div) | Sets the Processing Classification UI state |
| U | `KKW01601SF03DBean.setHktgi_mskm_no_value` | - | (Bean property: hktgi_mskm_no) | Sets the Application Number value |
| U | `KKW01601SF03DBean.setHktgi_mskm_no_state` | - | (Bean property: hktgi_mskm_no) | Sets the Application Number UI state |
| U | `KKW01601SF03DBean.setHktgi_mskm_dtl_no_value` | - | (Bean property: hktgi_mskm_dtl_no) | Sets the Application Detail Number value |
| U | `KKW01601SF03DBean.setHktgi_mskm_dtl_no_state` | - | (Bean property: hktgi_mskm_dtl_no) | Sets the Application Detail Number UI state |
| U | `KKW01601SF03DBean.setHktgi_tokutei_id_kmk_nm_value` | - | (Bean property: hktgi_tokutei_id_kmk_nm) | Sets the Specific ID Item Name value |
| U | `KKW01601SF03DBean.setHktgi_tokutei_id_kmk_nm_state` | - | (Bean property: hktgi_tokutei_id_kmk_nm) | Sets the Specific ID Item Name UI state |
| U | `KKW01601SF03DBean.setHktgi_tokutei_id_kmk_value_value` | - | (Bean property: hktgi_tokutei_id_kmk_value) | Sets the Specific ID Item Value value |
| U | `KKW01601SF03DBean.setHktgi_tokutei_id_kmk_value_state` | - | (Bean property: hktgi_tokutei_id_kmk_value) | Sets the Specific ID Item Value UI state |
| U | `KKW01601SF03DBean.setHktgi_popup_mode_value` | - | (Bean property: hktgi_popup_mode) | Sets the Popup Mode value |
| U | `KKW01601SF03DBean.setHktgi_popup_mode_state` | - | (Bean property: hktgi_popup_mode) | Sets the Popup Mode UI state |
| U | `X33VDataTypeStringBean.storeModelData` (list item) | - | (List item property) | Delegates to list item bean for Simultaneous Application entry |
| U | `KKW01601SF03DBean.setHktgi_mans_nm_value` | - | (Bean property: hktgi_mans_nm) | Sets the Apartment Name value |
| U | `KKW01601SF03DBean.setHktgi_mans_nm_state` | - | (Bean property: hktgi_mans_nm) | Sets the Apartment Name UI state |
| U | `KKW01601SF03DBean.setHktgi_mans_ad_nm_value` | - | (Bean property: hktgi_mans_ad_nm) | Sets the Address value |
| U | `KKW01601SF03DBean.setHktgi_mans_ad_nm_state` | - | (Bean property: hktgi_mans_ad_nm) | Sets the Address UI state |
| U | `KKW01601SF03DBean.setHktgi_ido_div_seni_ptn_value` | - | (Bean property: hktgi_ido_div_seni_ptn) | Sets the Change Classification Screen Transition Pattern value |
| U | `KKW01601SF03DBean.setHktgi_ido_div_seni_ptn_state` | - | (Bean property: hktgi_ido_div_seni_ptn) | Sets the Change Classification Screen Transition Pattern UI state |
| U | `KKW01601SF03DBean.setHktgi_pid_value` | - | (Bean property: hktgi_pid) | Sets the R-ID value |
| U | `KKW01601SF03DBean.setHktgi_pid_state` | - | (Bean property: hktgi_pid) | Sets the R-ID UI state |
| U | `KKW01601SF03DBean.setHktgi_mans_id_value` | - | (Bean property: hktgi_mans_id) | Sets the M-ID value |
| U | `KKW01601SF03DBean.setHktgi_mans_id_state` | - | (Bean property: hktgi_mans_id) | Sets the M-ID UI state |
| U | `KKW01601SF03DBean.setHktgi_catid_value` | - | (Bean property: hktgi_catid) | Sets the CAT-ID value |
| U | `KKW01601SF03DBean.setHktgi_catid_state` | - | (Bean property: hktgi_catid) | Sets the CAT-ID UI state |
| U | `KKW01601SF03DBean.setHktgi_syscd_value` | - | (Bean property: hktgi_syscd) | Sets the External System Code value |
| U | `KKW01601SF03DBean.setHktgi_syscd_state` | - | (Bean property: hktgi_syscd) | Sets the External System Code UI state |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | KKW01601SF03DBean | `KKW01601SF03DBean.storeModelData` -> `storeModelData` | `setHktgi_syscd_state [U] (Bean property)`, `setHktgi_syscd_value [U] (Bean property)`, `setHktgi_catid_state [U] (Bean property)`, `setHktgi_catid_value [U] (Bean property)`, `setHktgi_mans_id_state [U] (Bean property)`, `setHktgi_mans_id_value [U] (Bean property)`, `setHktgi_pid_state [U] (Bean property)`, `setHktgi_pid_value [U] (Bean property)`, `setHktgi_ido_div_seni_ptn_state [U] (Bean property)`, `setHktgi_ido_div_seni_ptn_value [U] (Bean property)`, `setHktgi_mans_ad_nm_state [U] (Bean property)`, `setHktgi_mans_ad_nm_value [U] (Bean property)`, `setHktgi_mans_nm_state [U] (Bean property)`, `setHktgi_mans_nm_value [U] (Bean property)`, `storeModelData [U] (X33VDataTypeStringBean)`, `substring [U] (String)` |

**Notes on callers:**
- The pre-computed code graph shows that the direct callers of this method are other `storeModelData` invocations within the same class `KKW01601SF03DBean`, indicating recursive or self-referential call patterns (likely triggered from parent bean contexts during data population).
- No screen entry points (KKSV* classes) or batch entry points were found within 8 hops.
- This method operates as a leaf-level data setter — it does not invoke any SC (Service Component) or CBS (Call-Back Service) codes, nor does it directly access database tables.

## 6. Per-Branch Detail Blocks

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

> Validates that both `key` and `subkey` are non-null before proceeding. This is an early-exit guard that prevents NullPointerExceptions when the method is called with incomplete data.

| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = key.indexOf("/")` // Find separator position for later index extraction [-> separator = "/"] (L900) |
| 2 | RETURN | `return` if `key == null || subkey == null` (L898) |

---

**Block 2** — ELSE-IF (Scalar Field: "SYSID") (L904) [key.equals("SYSID")]

> Handles the System ID field — a simple scalar string property. Sets either the data value or the UI state.

| # | Type | Code |
|---|------|------|
| 1 | SET | `key.equals("SYSID")` — field identifier for System ID [-> Field ID: hktgi_sysid] |
| 2 | IF | `subkey.equalsIgnoreCase("value")` — set the data value branch |
| 3 | CALL | `setHktgi_sysid_value((String)in_value)` — stores the System ID value |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — set the UI state branch |
| 5 | CALL | `setHktgi_sysid_state((String)in_value)` — stores the System ID UI state |

---

**Block 3** — ELSE-IF (Scalar Field: "サービス契約番号") (L914) [key.equals("サービス契約番号")]

> Handles the Service Contract Number field. Maps to internal property `hktgi_svc_kei_no`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `key.equals("サービス契約番号")` — field identifier for Service Contract Number [-> Field ID: hktgi_svc_kei_no] |
| 2 | IF | `subkey.equalsIgnoreCase("value")` — value assignment branch |
| 3 | CALL | `setHktgi_svc_kei_no_value((String)in_value)` — stores service contract number |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state assignment branch |
| 5 | CALL | `setHktgi_svc_kei_no_state((String)in_value)` — stores service contract number UI state |

---

**Block 4** — ELSE-IF (Scalar Field: "異動区分") (L924) [key.equals("異動区分")]

> Handles the Change Classification field. Maps to internal property `hktgi_ido_div`. This field indicates the type of service change being processed (e.g., transfer, cancellation, suspension).

| # | Type | Code |
|---|------|------|
| 1 | SET | `key.equals("異動区分")` — field identifier for Change Classification [-> Field ID: hktgi_ido_div] |
| 2 | IF | `subkey.equalsIgnoreCase("value")` — value branch |
| 3 | CALL | `setHktgi_ido_div_value((String)in_value)` — stores change classification code |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state branch |
| 5 | CALL | `setHktgi_ido_div_state((String)in_value)` — stores change classification UI state |

---

**Block 5** — ELSE-IF (List Field: "異動理由コード") (L934) [key.equals("異動理由コード")]

> Handles the Change Reason Code list field. Maps to internal property `hktgi_ido_rsn_cd`. This is a **list-based field** where the `key` parameter encodes a list index using the `/` separator pattern (e.g., `"hktgi_ido_rsn_cd/0"`). The method extracts the index, validates it, and delegates to the appropriate list item's `storeModelData` method.

| # | Type | Code |
|---|------|------|
| 1 | SET | `key.equals("異動理由コード")` — field identifier for Change Reason Code [-> Field ID: hktgi_ido_rsn_cd] |
| 2 | SET | `key = key.substring(separaterPoint + 1)` // Extract substring after first "/" to get index portion, e.g., from "hktgi_ido_rsn_cd/0" to "0" |
| 3 | SET | `tmpIndexInt = null` // Initialize index variable |
| 4 | TRY | `tmpIndexInt = Integer.valueOf(key)` — attempt to parse the extracted substring as an integer index |
| 5 | CATCH | `NumberFormatException e` — if the extracted substring is not a valid integer, `tmpIndexInt = null` |
| 6 | IF | `tmpIndexInt != null` — proceed only if index parsing succeeded |
| 7 | SET | `tmpIndex = tmpIndexInt.intValue()` — convert Integer to int primitive |
| 8 | IF | `tmpIndex >= 0 && tmpIndex < hktgi_ido_rsn_cd_list.size()` — validate index is within list bounds [-> checks against hktgi_ido_rsn_cd_list size] |
| 9 | CALL | `((X33VDataTypeStringBean)hktgi_ido_rsn_cd_list.get(tmpIndex)).storeModelData(subkey, in_value)` — cast list item to X33VDataTypeStringBean and delegate. Comment: "The cast portion specifies one of X33VDataTypeStringBean, X33VDataTypeLongBean, X33VDataTypeBooleanBean depending on the field definition type. For X33VDataTypeLongBean, specify subkey, input value, and isSetAsString flag as parameters." (リスト中のインデックスを見て、X33VDataTypeStringBean/LongBean/BooleanBeanのいずれかを指定して再帰的にデータを設定する) |

---

**Block 6** — ELSE-IF (Scalar Field: "異動理由メモ") (L954) [key.equals("異動理由メモ")]

> Handles the Change Reason Memo field — a free-text comment associated with a change reason code entry. Maps to internal property `hktgi_ido_rsn_memo`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `key.equals("異動理由メモ")` — field identifier for Change Reason Memo [-> Field ID: hktgi_ido_rsn_memo] |
| 2 | IF | `subkey.equalsIgnoreCase("value")` — value branch |
| 3 | CALL | `setHktgi_ido_rsn_memo_value((String)in_value)` — stores change reason memo text |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state branch |
| 5 | CALL | `setHktgi_ido_rsn_memo_state((String)in_value)` — stores change reason memo UI state |

---

**Block 7** — ELSE-IF (List Field: "オプションサービス契約番号") (L966) [key.equals("オプションサービス契約番号")]

> Handles the Optional Service Contract Number list field. Maps to internal property `hktgi_op_svc_kei_no`. Follows the same list-index pattern as Block 5 — extracts index from key, validates bounds, and delegates to child bean.

| # | Type | Code |
|---|------|------|
| 1 | SET | `key.equals("オプションサービス契約番号")` — field identifier for Optional Service Contract Number [-> Field ID: hktgi_op_svc_kei_no] |
| 2 | SET | `key = key.substring(separaterPoint + 1)` — extract index substring after "/" |
| 3 | SET | `tmpIndexInt = null` — initialize index |
| 4 | TRY | `tmpIndexInt = Integer.valueOf(key)` — parse extracted substring as integer |
| 5 | CATCH | `NumberFormatException e` — if not a valid integer, `tmpIndexInt = null` |
| 6 | IF | `tmpIndexInt != null` — proceed if parsing succeeded |
| 7 | SET | `tmpIndex = tmpIndexInt.intValue()` — get int primitive |
| 8 | IF | `tmpIndex >= 0 && tmpIndex < hktgi_op_svc_kei_no_list.size()` — validate index bounds [-> checks against hktgi_op_svc_kei_no_list size] |
| 9 | CALL | `((X33VDataTypeStringBean)hktgi_op_svc_kei_no_list.get(tmpIndex)).storeModelData(subkey, in_value)` — delegate to list item bean |

---

**Block 8** — ELSE-IF (Scalar Field: "処理区分") (L988) [key.equals("処理区分")]

> Handles the Processing Classification field — indicates the type of processing operation (e.g., new registration, modification, cancellation). Maps to internal property `hktgi_tran_div`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `key.equals("処理区分")` — field identifier for Processing Classification [-> Field ID: hktgi_tran_div] |
| 2 | IF | `subkey.equalsIgnoreCase("value")` — value branch |
| 3 | CALL | `setHktgi_tran_div_value((String)in_value)` — stores processing classification |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state branch |
| 5 | CALL | `setHktgi_tran_div_state((String)in_value)` — stores processing classification UI state |

---

**Block 9** — ELSE-IF (Scalar Field: "申請番号") (L998) [key.equals("申請番号")]

> Handles the Application Number field — the primary identifier for a service application. Maps to internal property `hktgi_mskm_no`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `key.equals("申請番号")` — field identifier for Application Number [-> Field ID: hktgi_mskm_no] |
| 2 | IF | `subkey.equalsIgnoreCase("value")` — value branch |
| 3 | CALL | `setHktgi_mskm_no_value((String)in_value)` — stores application number |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state branch |
| 5 | CALL | `setHktgi_mskm_no_state((String)in_value)` — stores application number UI state |

---

**Block 10** — ELSE-IF (Scalar Field: "申請詳細番号") (L1008) [key.equals("申請詳細番号")]

> Handles the Application Detail Number field — a sub-identifier for detailed application line items. Maps to internal property `hktgi_mskm_dtl_no`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `key.equals("申請詳細番号")` — field identifier for Application Detail Number [-> Field ID: hktgi_mskm_dtl_no] |
| 2 | IF | `subkey.equalsIgnoreCase("value")` — value branch |
| 3 | CALL | `setHktgi_mskm_dtl_no_value((String)in_value)` — stores application detail number |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state branch |
| 5 | CALL | `setHktgi_mskm_dtl_no_state((String)in_value)` — stores application detail number UI state |

---

**Block 11** — ELSE-IF (Scalar Field: "特定ID項目名") (L1018) [key.equals("特定ID項目名")]

> Handles the Specific ID Item Name field — the name/label of a custom or specific identifier field. Maps to internal property `hktgi_tokutei_id_kmk_nm`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `key.equals("特定ID項目名")` — field identifier for Specific ID Item Name [-> Field ID: hktgi_tokutei_id_kmk_nm] |
| 2 | IF | `subkey.equalsIgnoreCase("value")` — value branch |
| 3 | CALL | `setHktgi_tokutei_id_kmk_nm_value((String)in_value)` — stores specific ID item name |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state branch |
| 5 | CALL | `setHktgi_tokutei_id_kmk_nm_state((String)in_value)` — stores specific ID item name UI state |

---

**Block 12** — ELSE-IF (Scalar Field: "特定ID項目値") (L1028) [key.equals("特定ID項目値")]

> Handles the Specific ID Item Value field — the actual value assigned to a specific identifier field. Maps to internal property `hktgi_tokutei_id_kmk_value`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `key.equals("特定ID項目値")` — field identifier for Specific ID Item Value [-> Field ID: hktgi_tokutei_id_kmk_value] |
| 2 | IF | `subkey.equalsIgnoreCase("value")` — value branch |
| 3 | CALL | `setHktgi_tokutei_id_kmk_value_value((String)in_value)` — stores specific ID item value |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state branch |
| 5 | CALL | `setHktgi_tokutei_id_kmk_value_state((String)in_value)` — stores specific ID item value UI state |

---

**Block 13** — ELSE-IF (Scalar Field: "ポップアップモード") (L1038) [key.equals("ポップアップモード")]

> Handles the Popup Mode field — controls whether certain UI elements should appear in popup mode. Maps to internal property `hktgi_popup_mode`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `key.equals("ポップアップモード")` — field identifier for Popup Mode [-> Field ID: hktgi_popup_mode] |
| 2 | IF | `subkey.equalsIgnoreCase("value")` — value branch |
| 3 | CALL | `setHktgi_popup_mode_value((String)in_value)` — stores popup mode setting |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state branch |
| 5 | CALL | `setHktgi_popup_mode_state((String)in_value)` — stores popup mode UI state |

---

**Block 14** — ELSE-IF (List Field: "同時申請サービス契約番号") (L1048) [key.equals("同時申請サービス契約番号")]

> Handles the Simultaneous Application Service Contract Number list field. Maps to internal property `hktgi_mskm_svc_kei_no`. This list represents service contract numbers that are being applied for simultaneously (concurrently) with the primary application. Follows the same index-extraction and delegation pattern as Blocks 5 and 7.

| # | Type | Code |
|---|------|------|
| 1 | SET | `key.equals("同時申請サービス契約番号")` — field identifier for Simultaneous Application Service Contract Number [-> Field ID: hktgi_mskm_svc_kei_no] |
| 2 | SET | `key = key.substring(separaterPoint + 1)` — extract index substring |
| 3 | SET | `tmpIndexInt = null` — initialize index |
| 4 | TRY | `tmpIndexInt = Integer.valueOf(key)` — parse as integer |
| 5 | CATCH | `NumberFormatException e` — if not valid, `tmpIndexInt = null` |
| 6 | IF | `tmpIndexInt != null` — proceed if parsing succeeded |
| 7 | SET | `tmpIndex = tmpIndexInt.intValue()` — get int primitive |
| 8 | IF | `tmpIndex >= 0 && tmpIndex < hktgi_mskm_svc_kei_no_list.size()` — validate index bounds [-> checks against hktgi_mskm_svc_kei_no_list size] |
| 9 | CALL | `((X33VDataTypeStringBean)hktgi_mskm_svc_kei_no_list.get(tmpIndex)).storeModelData(subkey, in_value)` — delegate to list item bean |

---

**Block 15** — ELSE-IF (Scalar Field: "マンション名") (L1072) [key.equals("マンション名")]

> Handles the Apartment Name field — the name of an apartment building associated with the service. Maps to internal property `hktgi_mans_nm`. Common in multi-unit residential FTTH installations.

| # | Type | Code |
|---|------|------|
| 1 | SET | `key.equals("マンション名")` — field identifier for Apartment Name [-> Field ID: hktgi_mans_nm] |
| 2 | IF | `subkey.equalsIgnoreCase("value")` — value branch |
| 3 | CALL | `setHktgi_mans_nm_value((String)in_value)` — stores apartment name |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state branch |
| 5 | CALL | `setHktgi_mans_nm_state((String)in_value)` — stores apartment name UI state |

---

**Block 16** — ELSE-IF (Scalar Field: "住所") (L1082) [key.equals("住所")]

> Handles the Address field — the physical address of the service location. Maps to internal property `hktgi_mans_ad_nm`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `key.equals("住所")` — field identifier for Address [-> Field ID: hktgi_mans_ad_nm] |
| 2 | IF | `subkey.equalsIgnoreCase("value")` — value branch |
| 3 | CALL | `setHktgi_mans_ad_nm_value((String)in_value)` — stores address |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state branch |
| 5 | CALL | `setHktgi_mans_ad_nm_state((String)in_value)` — stores address UI state |

---

**Block 17** — ELSE-IF (Scalar Field: "異動区分選択画面遷移パターン") (L1092) [key.equals("異動区分選択画面遷移パターン")]

> Handles the Change Classification Selection Screen Transition Pattern field — determines which screen path to navigate to when the user selects a change classification option. Maps to internal property `hktgi_ido_div_seni_ptn`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `key.equals("異動区分選択画面遷移パターン")` — field identifier for Change Classification Screen Transition Pattern [-> Field ID: hktgi_ido_div_seni_ptn] |
| 2 | IF | `subkey.equalsIgnoreCase("value")` — value branch |
| 3 | CALL | `setHktgi_ido_div_seni_ptn_value((String)in_value)` — stores transition pattern |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state branch |
| 5 | CALL | `setHktgi_ido_div_seni_ptn_state((String)in_value)` — stores transition pattern UI state |

---

**Block 18** — ELSE-IF (Scalar Field: "R-ID") (L1102) [key.equals("R-ID")]

> Handles the R-ID field — Residential ID, a unique identifier for a residential service unit (e.g., individual apartment unit). Maps to internal property `hktgi_pid`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `key.equals("R-ID")` — field identifier for Residential ID [-> Field ID: hktgi_pid] |
| 2 | IF | `subkey.equalsIgnoreCase("value")` — value branch |
| 3 | CALL | `setHktgi_pid_value((String)in_value)` — stores R-ID |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state branch |
| 5 | CALL | `setHktgi_pid_state((String)in_value)` — stores R-ID UI state |

---

**Block 19** — ELSE-IF (Scalar Field: "M-ID") (L1112) [key.equals("M-ID")]

> Handles the M-ID field — Apartment ID, a unique identifier for a multi-unit building. Maps to internal property `hktgi_mans_id`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `key.equals("M-ID")` — field identifier for Apartment ID [-> Field ID: hktgi_mans_id] |
| 2 | IF | `subkey.equalsIgnoreCase("value")` — value branch |
| 3 | CALL | `setHktgi_mans_id_value((String)in_value)` — stores M-ID |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state branch |
| 5 | CALL | `setHktgi_mans_id_state((String)in_value)` — stores M-ID UI state |

---

**Block 20** — ELSE-IF (Scalar Field: "CAT-ID") (L1122) [key.equals("CAT-ID")]

> Handles the CAT-ID field — Category ID, used for categorizing service types or account categories. Maps to internal property `hktgi_catid`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `key.equals("CAT-ID")` — field identifier for Category ID [-> Field ID: hktgi_catid] |
| 2 | IF | `subkey.equalsIgnoreCase("value")` — value branch |
| 3 | CALL | `setHktgi_catid_value((String)in_value)` — stores CAT-ID |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state branch |
| 5 | CALL | `setHktgi_catid_state((String)in_value)` — stores CAT-ID UI state |

---

**Block 21** — ELSE-IF (Scalar Field: "外部システムコード") (L1132) [key.equals("外部システムコード")]

> Handles the External System Code field — identifies an external system (e.g., CRM, billing system, provisioning system) that is associated with the service record. Maps to internal property `hktgi_syscd`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `key.equals("外部システムコード")` — field identifier for External System Code [-> Field ID: hktgi_syscd] |
| 2 | IF | `subkey.equalsIgnoreCase("value")` — value branch |
| 3 | CALL | `setHktgi_syscd_value((String)in_value)` — stores external system code |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — state branch |
| 5 | CALL | `setHktgi_syscd_state((String)in_value)` — stores external system code UI state |

---

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `hktgi_sysid` | Field | System ID — internal system identifier for the service record |
| `hktgi_svc_kei_no` | Field | Service Contract Number (サービス契約番号) — unique identifier for a service contract line item |
| `hktgi_ido_div` | Field | Change Classification (異動区分) — type of service change (transfer, cancellation, suspension, etc.) |
| `hktgi_ido_rsn_cd` | Field | Change Reason Code (異動理由コード) — code indicating the reason for a service change. List-based field supporting multiple entries. |
| `hktgi_ido_rsn_memo` | Field | Change Reason Memo (異動理由メモ) — free-text memo/comment associated with a change reason code entry |
| `hktgi_op_svc_kei_no` | Field | Optional Service Contract Number (オプションサービス契約番号) — contract number for optional/add-on services. List-based field. |
| `hktgi_tran_div` | Field | Processing Classification (処理区分) — type of processing operation (new registration, modification, cancellation) |
| `hktgi_mskm_no` | Field | Application Number (申請番号) — primary identifier for a service application |
| `hktgi_mskm_dtl_no` | Field | Application Detail Number (申請詳細番号) — sub-identifier for detailed application line items |
| `hktgi_tokutei_id_kmk_nm` | Field | Specific ID Item Name (特定ID項目名) — name/label of a custom identifier field |
| `hktgi_tokutei_id_kmk_value` | Field | Specific ID Item Value (特定ID項目値) — actual value of a custom identifier field |
| `hktgi_popup_mode` | Field | Popup Mode (ポップアップモード) — UI control flag for popup-style screen elements |
| `hktgi_mskm_svc_kei_no` | Field | Simultaneous Application Service Contract Number (同時申請サービス契約番号) — contract numbers being applied for concurrently. List-based field. |
| `hktgi_mans_nm` | Field | Apartment Name (マンション名) — name of the apartment/multi-unit building |
| `hktgi_mans_ad_nm` | Field | Address (住所) — physical service location address |
| `hktgi_ido_div_seni_ptn` | Field | Change Classification Selection Screen Transition Pattern (異動区分選択画面遷移パターン) — determines navigation flow based on change classification selection |
| `hktgi_pid` | Field | R-ID (Residential ID) — unique identifier for a residential service unit within a building |
| `hktgi_mans_id` | Field | M-ID (Apartment ID) — unique identifier for a multi-unit apartment building |
| `hktgi_catid` | Field | CAT-ID (Category ID) — category classification identifier for service/account categorization |
| `hktgi_syscd` | Field | External System Code (外部システムコード) — code identifying an external system (CRM, billing, provisioning) associated with the service |
| X33VDataTypeStringBean | Class | Data type bean for String-type list items — used in list-based fields. Stores value and state properties. |
| X33VDataTypeLongBean | Class | Data type bean for Long-type list items — supports numeric list entries. Accepts subkey, input value, and isSetAsString parameters. |
| X33VDataTypeBooleanBean | Class | Data type bean for Boolean-type list items — supports boolean flag list entries. |
| "value" | Subkey | Property selector — indicates the data/value property of a field (as opposed to UI state) |
| "state" | Subkey | Property selector — indicates the UI state property of a field (e.g., enabled/disabled, visible/hidden) |
| `isSetAsString` | Parameter | Type-coercion flag — when true, forces string-type assignment for Long-type field Value properties, enabling uniform data binding |
| "SYSID" | Key literal | Field identifier string for System ID |
| "R-ID" | Key literal | Field identifier string for Residential ID |
| "M-ID" | Key literal | Field identifier string for Apartment ID |
| "CAT-ID" | Key literal | Field identifier string for Category ID |
| Index-encoded key | Pattern | Key format `"baseName/index"` for list fields, e.g., `"hktgi_ido_rsn_cd/0"`. The index after "/" identifies the list row. |
