# Business Logic — KKW01033SF01DBean.storeModelData() [125 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKW01033SF.KKW01033SF01DBean` |
| Layer | Component / Data Bean (X33V Framework) |
| Module | `KKW01033SF` (Package: `eo.web.webview.KKW01033SF`) |

## 1. Role

### KKW01033SF01DBean.storeModelData()

This method serves as the **central data routing and persistence dispatcher** for the `KKW01033SF01DBean` data bean, which manages screen model data for the service contract and order registration screen (screen code `KKW01033SF`). It implements a **string-key-based routing/dispatch pattern**: given a human-readable item name (`key`) and a field descriptor (`subkey`), the method resolves which internal field should receive the incoming data (`in_value`), then delegates to the appropriate typed setter.

The method handles **10 distinct business data categories**, all of which are String-type fields except for one list-based category. Nine fields follow a uniform **value/state pattern** — each field has a `"value"` subkey that stores the data and a `"state"` subkey that stores metadata (typically UI state such as read-only or required). These categories include system identifier, service contract number, service contract detail number, relocation/disposition classification, application number, application detail number, popup mode indicator, relocation classification screen transition pattern, and external system code.

The tenth category — **Relocation Reason Code** (`ido_rsn_cd`) — is fundamentally different: it is managed as a dynamically-sized list of typed beans (`X33VDataTypeStringBean`). When the key matches this category, the method parses an index from the key string (via substring), validates the index bounds, and **recursively dispatches** to `storeModelData` on the target list element's typed bean. This allows the UI framework to populate an arbitrary number of relocation reason codes without the parent bean needing to manage list internals directly.

The method is part of the **X33V data binding framework**. It is the write-side counterpart to the framework's `loadModelData` method, enabling bidirectional data flow between the web layer model and the backing bean. It is a shared utility called by many screens within the `KKW01033SF` module and by the X33V framework's automated data binding machinery.

## 2. Processing Pattern (Detailed Business Logic)

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

    START --> NULL_CHECK

    NULL_CHECK -- "true" --> RETURN_NIL(["return;"])
    NULL_CHECK -- "false" --> FIND_SLASH["separaterPoint = key.indexOf('/')"]

    FIND_SLASH --> SYSID["key equals 'システムID'"]
    SYSID -- "true" --> SYSID_BRANCH["Dispatch: sysid"]
    SYSID_BRANCH --> SYSID_VALUE["subkey equals 'value'"]
    SYSID_VALUE -- "true" --> SET_SYSID_VAL["setSysid_value(in_value)"]
    SYSID_VALUE -- "false" --> SYSID_STATE["subkey equals 'state'"]
    SYSID_STATE -- "true" --> SET_SYSID_ST["setSysid_state(in_value)"]
    SYSID_STATE -- "false" --> DONE_SYSID(["continue"])

    SYSID -- "false" --> SVC_KEY_NO["key equals 'サービス契約番号'"]
    SVC_KEY_NO -- "true" --> SVC_KEY_BRANCH["Dispatch: svc_kei_no"]
    SVC_KEY_BRANCH --> SVC_KEY_VALUE["subkey equals 'value'"]
    SVC_KEY_VALUE -- "true" --> SET_SVC_KEY_VAL["setSvc_kei_no_value(in_value)"]
    SVC_KEY_VALUE -- "false" --> SVC_KEY_STATE["subkey equals 'state'"]
    SVC_KEY_STATE -- "true" --> SET_SVC_KEY_ST["setSvc_kei_no_state(in_value)"]
    SVC_KEY_STATE -- "false" --> DONE_SVC_KEY(["continue"])

    SVC_KEY_NO -- "false" --> SVC_KEY_UCWK["key equals 'サービス契約内訳番号'"]
    SVC_KEY_UCWK -- "true" --> SVC_KEY_UCWK_BRANCH["Dispatch: svc_kei_ucwk_no"]
    SVC_KEY_UCWK_BRANCH --> SVC_KEY_UCWK_VALUE["subkey equals 'value'"]
    SVC_KEY_UCWK_VALUE -- "true" --> SET_SVC_KEY_UCWK_VAL["setSvc_kei_ucwk_no_value(in_value)"]
    SVC_KEY_UCWK_VALUE -- "false" --> SVC_KEY_UCWK_STATE["subkey equals 'state'"]
    SVC_KEY_UCWK_STATE -- "true" --> SET_SVC_KEY_UCWK_ST["setSvc_kei_ucwk_no_state(in_value)"]
    SVC_KEY_UCWK_STATE -- "false" --> DONE_SVC_KEY_UCWK(["continue"])

    SVC_KEY_UCWK -- "false" --> IDO_DIV["key equals '異動区分'"]
    IDO_DIV -- "true" --> IDO_DIV_BRANCH["Dispatch: ido_div"]
    IDO_DIV_BRANCH --> IDO_DIV_VALUE["subkey equals 'value'"]
    IDO_DIV_VALUE -- "true" --> SET_IDO_DIV_VAL["setIdo_div_value(in_value)"]
    IDO_DIV_VALUE -- "false" --> IDO_DIV_STATE["subkey equals 'state'"]
    IDO_DIV_STATE -- "true" --> SET_IDO_DIV_ST["setIdo_div_state(in_value)"]
    IDO_DIV_STATE -- "false" --> DONE_IDO_DIV(["continue"])

    IDO_DIV -- "false" --> IDO_RSN_CD["key equals '異動理由コード'"]
    IDO_RSN_CD -- "true" --> IDO_RSN_BRANCH["Dispatch: ido_rsn_cd (list-based)"]
    IDO_RSN_BRANCH --> KEY_SUB["key = key.substring(separaterPoint + 1)"]
    KEY_SUB --> PARSE_IDX["tmpIndexInt = Integer.valueOf(key)"]
    PARSE_IDX --> IDX_CHECK["tmpIndexInt != null"]
    IDX_CHECK -- "null" --> DONE_IDO_RSN(["continue"])
    IDX_CHECK -- "not null" --> IDX_RANGE["tmpIndex >= 0 && tmpIndex < ido_rsn_cd_list.size()"]
    IDX_RANGE -- "false" --> DONE_IDO_RSN2(["continue"])
    IDX_RANGE -- "true" --> STORE_RECURSE["X33VDataTypeStringBean.storeModelData(subkey, in_value)"]
    STORE_RECURSE --> DONE_IDO_RSN3(["continue"])

    IDO_RSN_CD -- "false" --> MSKM_NO["key equals '申込番号'"]
    MSKM_NO -- "true" --> MSKM_NO_BRANCH["Dispatch: mskm_no"]
    MSKM_NO_BRANCH --> MSKM_NO_VALUE["subkey equals 'value'"]
    MSKM_NO_VALUE -- "true" --> SET_MSKM_NO_VAL["setMskm_no_value(in_value)"]
    MSKM_NO_VALUE -- "false" --> MSKM_NO_STATE["subkey equals 'state'"]
    MSKM_NO_STATE -- "true" --> SET_MSKM_NO_ST["setMskm_no_state(in_value)"]
    MSKM_NO_STATE -- "false" --> DONE_MSKM_NO(["continue"])

    MSKM_NO -- "false" --> MSKM_DTL_NO["key equals '申込明細番号'"]
    MSKM_DTL_NO -- "true" --> MSKM_DTL_BRANCH["Dispatch: mskm_dtl_no"]
    MSKM_DTL_BRANCH --> MSKM_DTL_VALUE["subkey equals 'value'"]
    MSKM_DTL_VALUE -- "true" --> SET_MSKM_DTL_VAL["setMskm_dtl_no_value(in_value)"]
    MSKM_DTL_VALUE -- "false" --> MSKM_DTL_STATE["subkey equals 'state'"]
    MSKM_DTL_STATE -- "true" --> SET_MSKM_DTL_ST["setMskm_dtl_no_state(in_value)"]
    MSKM_DTL_STATE -- "false" --> DONE_MSKM_DTL(["continue"])

    MSKM_DTL_NO -- "false" --> POPUP_MODE["key equals 'ポップアップモード'"]
    POPUP_MODE -- "true" --> POPUP_BRANCH["Dispatch: popup_mode"]
    POPUP_BRANCH --> POPUP_VALUE["subkey equals 'value'"]
    POPUP_VALUE -- "true" --> SET_POPUP_VAL["setPopup_mode_value(in_value)"]
    POPUP_VALUE -- "false" --> POPUP_STATE["subkey equals 'state'"]
    POPUP_STATE -- "true" --> SET_POPUP_ST["setPopup_mode_state(in_value)"]
    POPUP_STATE -- "false" --> DONE_POPUP(["continue"])

    POPUP_MODE -- "false" --> IDO_DIV_SENI["key equals '異動区分選択画面遷移パターン'"]
    IDO_DIV_SENI -- "true" --> IDO_SENI_BRANCH["Dispatch: ido_div_seni_ptn"]
    IDO_SENI_BRANCH --> IDO_SENI_VALUE["subkey equals 'value'"]
    IDO_SENI_VALUE -- "true" --> SET_IDO_SENI_VAL["setIdo_div_seni_ptn_value(in_value)"]
    IDO_SENI_VALUE -- "false" --> IDO_SENI_STATE["subkey equals 'state'"]
    IDO_SENI_STATE -- "true" --> SET_IDO_SENI_ST["setIdo_div_seni_ptn_state(in_value)"]
    IDO_SENI_STATE -- "false" --> DONE_IDO_SENI(["continue"])

    IDO_DIV_SENI -- "false" --> SYSCD["key equals '外部システムコード'"]
    SYSCD -- "true" --> SYSCD_BRANCH["Dispatch: syscd (ANK-2693 STEP2)"]
    SYSCD_BRANCH --> SYSCD_VALUE["subkey equals 'value'"]
    SYSCD_VALUE -- "true" --> SET_SYSCD_VAL["setSyscd_value(in_value)"]
    SYSCD_VALUE -- "false" --> SYSCD_STATE["subkey equals 'state'"]
    SYSCD_STATE -- "true" --> SET_SYSCD_ST["setSyscd_state(in_value)"]
    SYSCD_STATE -- "false" --> DONE_SYSCD(["continue"])

    SYSCD -- "false" --> FALLTHROUGH(["end (no action)"])

    RETURN_NIL --> FALLTHROUGH
    DONE_SYSID --> FALLTHROUGH
    DONE_SVC_KEY --> FALLTHROUGH
    DONE_SVC_KEY_UCWK --> FALLTHROUGH
    DONE_IDO_DIV --> FALLTHROUGH
    DONE_IDO_RSN --> FALLTHROUGH
    DONE_IDO_RSN2 --> FALLTHROUGH
    DONE_IDO_RSN3 --> FALLTHROUGH
    DONE_MSKM_NO --> FALLTHROUGH
    DONE_MSKM_DTL --> FALLTHROUGH
    DONE_POPUP --> FALLTHROUGH
    DONE_IDO_SENI --> FALLTHROUGH
    DONE_SYSCD --> FALLTHROUGH
```

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | **Item name** — a human-readable Japanese field identifier that determines which business data category this value belongs to. Possible values: `"システムID"`, `"サービス契約番号"`, `"サービス契約内訳番号"`, `"異動区分"`, `"異動理由コード"`, `"申込番号"`, `"申込明細番号"`, `"ポップアップモード"`, `"異動区分選択画面遷移パターン"`, `"外部システムコード"`. For the relocation reason code field, the key may contain a `/` followed by a numeric index (e.g., `"異動理由コード/0"`), indicating which list element to update. |
| 2 | `subkey` | `String` | **Field descriptor** — specifies whether the data being stored is the field's `"value"` (the actual business data) or its `"state"` (UI metadata such as read-only flag, required flag, or editability). This is a uniform mechanism across all field types. |
| 3 | `in_value` | `Object` | **Incoming data** — the value to be stored. Always cast to `String` in practice, though declared as `Object` for framework flexibility. May represent a service contract number, a relocation classification code, an error reason code index entry, or any of the other String-type fields managed by this bean. |
| 4 | `isSetAsString` | `boolean` | **Type coercion flag** — when true, indicates that a Long-type field property should be set with a String value (string-to-long coercion). Not actively used in the simple String fields routed here, but present for framework compatibility. |

**Instance fields read/written:**

| Field | Access | Type | Business Meaning |
|-------|--------|------|------------------|
| `ido_rsn_cd_list` | Read (via `.get()` and `.size()`) | `X33VDataTypeList` | List of typed beans holding relocation reason codes — enables dynamic list-based data binding for multiple reason code entries |

## 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` |
| - | `KKW01033SF01DBean.setIdo_div_seni_ptn_state` | KKW01033SF01DBean | - | Calls `setIdo_div_seni_ptn_state` in `KKW01033SF01DBean` |
| - | `KKW01033SF01DBean.setIdo_div_seni_ptn_value` | KKW01033SF01DBean | - | Calls `setIdo_div_seni_ptn_value` in `KKW01033SF01DBean` |
| - | `KKW01033SF01DBean.setIdo_div_state` | KKW01033SF01DBean | - | Calls `setIdo_div_state` in `KKW01033SF01DBean` |
| - | `KKW01033SF01DBean.setIdo_div_value` | KKW01033SF01DBean | - | Calls `setIdo_div_value` in `KKW01033SF01DBean` |
| - | `KKW01033SF01DBean.setMskm_dtl_no_state` | KKW01033SF01DBean | - | Calls `setMskm_dtl_no_state` in `KKW01033SF01DBean` |
| - | `KKW01033SF01DBean.setMskm_dtl_no_value` | KKW01033SF01DBean | - | Calls `setMskm_dtl_no_value` in `KKW01033SF01DBean` |
| - | `KKW01033SF01DBean.setMskm_no_state` | KKW01033SF01DBean | - | Calls `setMskm_no_state` in `KKW01033SF01DBean` |
| - | `KKW01033SF01DBean.setMskm_no_value` | KKW01033SF01DBean | - | Calls `setMskm_no_value` in `KKW01033SF01DBean` |
| - | `KKW01033SF01DBean.setPopup_mode_state` | KKW01033SF01DBean | - | Calls `setPopup_mode_state` in `KKW01033SF01DBean` |
| - | `KKW01033SF01DBean.setPopup_mode_value` | KKW01033SF01DBean | - | Calls `setPopup_mode_value` in `KKW01033SF01DBean` |
| - | `KKW01033SF01DBean.setSvc_kei_no_state` | KKW01033SF01DBean | - | Calls `setSvc_kei_no_state` in `KKW01033SF01DBean` |
| - | `KKW01033SF01DBean.setSvc_kei_no_value` | KKW01033SF01DBean | - | Calls `setSvc_kei_no_value` in `KKW01033SF01DBean` |
| - | `KKW01033SF01DBean.setSvc_kei_ucwk_no_state` | KKW01033SF01DBean | - | Calls `setSvc_kei_ucwk_no_state` in `KKW01033SF01DBean` |
| - | `KKW01033SF01DBean.setSvc_kei_ucwk_no_value` | KKW01033SF01DBean | - | Calls `setSvc_kei_ucwk_no_value` in `KKW01033SF01DBean` |
| - | `KKW01033SF01DBean.setSyscd_state` | KKW01033SF01DBean | - | Calls `setSyscd_state` in `KKW01033SF01DBean` |
| - | `KKW01033SF01DBean.setSyscd_value` | KKW01033SF01DBean | - | Calls `setSyscd_value` in `KKW01033SF01DBean` |
| - | `KKW01033SF01DBean.setSysid_state` | KKW01033SF01DBean | - | Calls `setSysid_state` in `KKW01033SF01DBean` |
| - | `KKW01033SF01DBean.setSysid_value` | KKW01033SF01DBean | - | Calls `setSysid_value` in `KKW01033SF01DBean` |
| - | `KKW01033SF01DBean.storeModelData` | KKW01033SF01DBean | - | Calls `storeModelData` in `KKW01033SF01DBean` |


**Analysis:** This method performs **no direct database or SC (Service Component) operations**. It is a pure **data-routing utility** within the X33V data binding layer. All operations are **U** (Update) — setting local bean fields via setter methods (`setXxx_value`, `setXxx_state`). The recursive call to `storeModelData` on a child `X33VDataTypeStringBean` also performs the same routing pattern at the list element level. No external services, entities, or database tables are touched.

## 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: `setSyscd_state` [-], `setSyscd_value` [-], `setIdo_div_seni_ptn_state` [-], `setIdo_div_seni_ptn_value` [-], `setPopup_mode_state` [-], `setPopup_mode_value` [-], `setMskm_dtl_no_state` [-], `setMskm_dtl_no_value` [-], `setMskm_no_state` [-], `setMskm_no_value` [-], `storeModelData` [-], `storeModelData` [-], `storeModelData` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `setIdo_div_state` [-], `setIdo_div_value` [-], `setSvc_kei_ucwk_no_state` [-]  # NOSONAR

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | (Pre-computed) `KKW01033SF01DBean.storeModelData()` | `KKW01033SF01DBean.storeModelData` | All setter U-operations on local String fields (sysid, svc_kei_no, svc_kei_ucwk_no, ido_div, ido_rsn_cd list, mskm_no, mskm_dtl_no, popup_mode, ido_div_seni_ptn, syscd) |
| 2 | (Pre-computed) `KKW01033SF01DBean.storeModelData()` | `KKW01033SF01DBean.storeModelData` | Same — recursive dispatch to X33VDataTypeStringBean.storeModelData on list elements |

**Notes:** This method is primarily invoked by the **X33V framework's automated data binding mechanism** during screen initialization (load) and form submission (save). It may also be called directly by other methods within `KKW01033SF01DBean` for internal data coordination. It is not a screen entry point itself; rather, it is a low-level utility accessed during screen lifecycle callbacks.

## 6. Per-Branch Detail Blocks

**Block 1** — [IF] Null guard check (L504)

> Early exit: if either `key` or `subkey` is null, terminate processing immediately. This prevents NPE when looking up the key category.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if(key == null || subkey == null)` [guard against null input] |
| 2 | RETURN | `return;` // 項目名とサブキーがnullの場合、処理を中止 (If item name and subkey are null, abort processing) |

---

**Block 2** — [SET] Separator index extraction (L508)

> Before any dispatch, capture the position of the first `/` character in the key. This is used later only by the relocation reason code block to extract a numeric index from keys like `"異動理由コード/0"`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `int separaterPoint = key.indexOf("/");` // Find the first slash position |

---

**Block 3** — [IF/ELSE-IF chain] Key-based dispatch

> Each block in this chain dispatches data to the correct field based on the Japanese `key` string. All fields follow the value/state pattern except Block 3.5 (異動理由コード).

**Block 3.1** — [IF] `"システムID"` (System ID) (L511)

> Dispatches to the `sysid` fields. The comment explains: データタイプがStringの項目"システムID" (項目ID:sysid) — String-type field "System ID" (item ID: sysid).

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("システムID")` [key equals "System ID"] |
| 2 | IF-ELSE | `subkey.equalsIgnoreCase("value")` |
| 3 | EXEC | `setSysid_value((String)in_value);` |
| 4 | IF-ELSE | `subkey.equalsIgnoreCase("state")` [subkey is "state"] |
| 5 | EXEC | `setSysid_state((String)in_value);` // subkeyが"state"の場合、ステータスを返す (If subkey is "state", return the status) |

---

**Block 3.2** — [IF] `"サービス契約番号"` (Service Contract Number) (L520)

> Dispatches to the `svc_kei_no` fields. The comment explains: データタイプがStringの項目"サービス契約番号" (項目ID:svc_kei_no) — String-type field "Service Contract Number" (item ID: svc_kei_no).

| # | Type | Code |
|---|------|------|
| 1 | IF-ELSE-IF | `key.equals("サービス契約番号")` [key equals "Service Contract Number"] |
| 2 | IF-ELSE | `subkey.equalsIgnoreCase("value")` |
| 3 | EXEC | `setSvc_kei_no_value((String)in_value);` |
| 4 | IF-ELSE | `subkey.equalsIgnoreCase("state")` |
| 5 | EXEC | `setSvc_kei_no_state((String)in_value);` // subkeyが"state"の場合、ステータスを返す (If subkey is "state", return the status) |

---

**Block 3.3** — [IF] `"サービス契約内訳番号"` (Service Contract Detail Number) (L529)

> Dispatches to the `svc_kei_ucwk_no` fields. The comment explains: データタイプがStringの項目"サービス契約内訳番号" (項目ID:svc_kei_ucwk_no) — String-type field "Service Contract Detail Number" (item ID: svc_kei_ucwk_no).

| # | Type | Code |
|---|------|------|
| 1 | IF-ELSE-IF | `key.equals("サービス契約内訳番号")` [key equals "Service Contract Detail Number"] |
| 2 | IF-ELSE | `subkey.equalsIgnoreCase("value")` |
| 3 | EXEC | `setSvc_kei_ucwk_no_value((String)in_value);` |
| 4 | IF-ELSE | `subkey.equalsIgnoreCase("state")` |
| 5 | EXEC | `setSvc_kei_ucwk_no_state((String)in_value);` // subkeyが"state"の場合、ステータスを返す (If subkey is "state", return the status) |

---

**Block 3.4** — [IF] `"異動区分"` (Relocation Classification) (L538)

> Dispatches to the `ido_div` fields. The comment explains: データタイプがStringの項目"異動区分" (項目ID:ido_div) — String-type field "Relocation Classification" (item ID: ido_div). This field determines the type of account/service change operation (e.g., new connection, transfer, suspension).

| # | Type | Code |
|---|------|------|
| 1 | IF-ELSE-IF | `key.equals("異動区分")` [key equals "Relocation Classification"] |
| 2 | IF-ELSE | `subkey.equalsIgnoreCase("value")` |
| 3 | EXEC | `setIdo_div_value((String)in_value);` |
| 4 | IF-ELSE | `subkey.equalsIgnoreCase("state")` |
| 5 | EXEC | `setIdo_div_state((String)in_value);` // subkeyが"state"の場合、ステータスを返す (If subkey is "state", return the status) |

---

**Block 3.5** — [IF] `"異動理由コード"` (Relocation Reason Code) — List-based dispatch (L547)

> **Unique branch**: This handles a dynamically-sized list of reason codes rather than a single field. The comment explains: 項目ごとに処理を入れる。This block parses a numeric index from the key (e.g., `"異動理由コード/2"` → index 2), validates it, and recursively calls `storeModelData` on the target list element.

> The casting comment explains: キャスト部分は、項目定義型に応じてX33VDataTypeStringBean, X33VDataTypeLongBean, X33VDataTypeBooleanBeanのうち1つを指定。X33VDataTypeLongBeanではsubkeyと入力値およびisSetAsStringフラグを引数に指定 (The cast section specifies one of X33VDataTypeStringBean, X33VDataTypeLongBean, or X33VDataTypeBooleanBean depending on the field definition type. For X33VDataTypeLongBean, specify subkey, input value, and isSetAsString flag as arguments).

| # | Type | Code |
|---|------|------|
| 1 | IF-ELSE-IF | `key.equals("異動理由コード")` [key equals "Relocation Reason Code"] |
| 2 | SET | `key = key.substring(separaterPoint + 1);` // keyの次の要素を取得 ("異動理由コード/0"から最初の"/"より後を後を取取得) — Get the next element of key (after the first "/" from "ido_rsn_cd/0") |
| 3 | SET | `Integer tmpIndexInt = null;` // Initialize index parser variable |
| 4 | TRY | `tmpIndexInt = Integer.valueOf(key);` // Parse index from string |
| 5 | CATCH | `NumberFormatException e` { `tmpIndexInt = null;` } // インデックス値が数値文字列でない場合は、ここでnullを返す (If the index value is not a numeric string, return null here) |
| 6 | IF | `tmpIndexInt != null` [Index parsing succeeded] |
| 7 | SET | `int tmpIndex = tmpIndexInt.intValue();` |
| 8 | IF | `tmpIndex >= 0 && tmpIndex < ido_rsn_cd_list.size()` [Index within valid bounds] |
| 9 | EXEC | `((X33VDataTypeStringBean)ido_rsn_cd_list.get(tmpIndex)).storeModelData(subkey, in_value);` // Recursive dispatch to list element |

---

**Block 3.6** — [IF] `"申込番号"` (Application Number) (L574)

> Dispatches to the `mskm_no` fields. The comment explains: データタイプがStringの項目"申込番号" (項目ID:mskm_no) — String-type field "Application Number" (item ID: mskm_no).

| # | Type | Code |
|---|------|------|
| 1 | IF-ELSE-IF | `key.equals("申込番号")` [key equals "Application Number"] |
| 2 | IF-ELSE | `subkey.equalsIgnoreCase("value")` |
| 3 | EXEC | `setMskm_no_value((String)in_value);` |
| 4 | IF-ELSE | `subkey.equalsIgnoreCase("state")` |
| 5 | EXEC | `setMskm_no_state((String)in_value);` // subkeyが"state"の場合、ステータスを返す (If subkey is "state", return the status) |

---

**Block 3.7** — [IF] `"申込明細番号"` (Application Detail Number) (L583)

> Dispatches to the `mskm_dtl_no` fields. The comment explains: データタイプがStringの項目"申込明細番号" (項目ID:mskm_dtl_no) — String-type field "Application Detail Number" (item ID: mskm_dtl_no).

| # | Type | Code |
|---|------|------|
| 1 | IF-ELSE-IF | `key.equals("申込明細番号")` [key equals "Application Detail Number"] |
| 2 | IF-ELSE | `subkey.equalsIgnoreCase("value")` |
| 3 | EXEC | `setMskm_dtl_no_value((String)in_value);` |
| 4 | IF-ELSE | `subkey.equalsIgnoreCase("state")` |
| 5 | EXEC | `setMskm_dtl_no_state((String)in_value);` // subkeyが"state"の場合、ステータスを返す (If subkey is "state", return the status) |

---

**Block 3.8** — [IF] `"ポップアップモード"` (Popup Mode) (L592)

> Dispatches to the `popup_mode` fields. The comment explains: データタイプがStringの項目"ポップアップモード" (項目ID:popup_mode) — String-type field "Popup Mode" (item ID: popup_mode). Controls UI popup behavior state.

| # | Type | Code |
|---|------|------|
| 1 | IF-ELSE-IF | `key.equals("ポップアップモード")` [key equals "Popup Mode"] |
| 2 | IF-ELSE | `subkey.equalsIgnoreCase("value")` |
| 3 | EXEC | `setPopup_mode_value((String)in_value);` |
| 4 | IF-ELSE | `subkey.equalsIgnoreCase("state")` |
| 5 | EXEC | `setPopup_mode_state((String)in_value);` // subkeyが"state"の場合、ステータスを返す (If subkey is "state", return the status) |

---

**Block 3.9** — [IF] `"異動区分選択画面遷移パターン"` (Relocation Classification Selection Screen Transition Pattern) (L601)

> Dispatches to the `ido_div_seni_ptn` fields. The comment explains: データタイプがStringの項目"異動区分選択画面遷移パターン" (項目ID:ido_div_seni_ptn) — String-type field "Relocation Classification Selection Screen Transition Pattern" (item ID: ido_div_seni_ptn). Determines which screen to navigate to based on relocation classification.

| # | Type | Code |
|---|------|------|
| 1 | IF-ELSE-IF | `key.equals("異動区分選択画面遷移パターン")` [key equals "Relocation Classification Selection Screen Transition Pattern"] |
| 2 | IF-ELSE | `subkey.equalsIgnoreCase("value")` |
| 3 | EXEC | `setIdo_div_seni_ptn_value((String)in_value);` |
| 4 | IF-ELSE | `subkey.equalsIgnoreCase("state")` |
| 5 | EXEC | `setIdo_div_seni_ptn_state((String)in_value);` // subkeyが"state"の場合、ステータスを返す (If subkey is "state", return the status) |

---

**Block 3.10** — [IF] `"外部システムコード"` (External System Code) (L611–618)

> Dispatches to the `syscd` fields. Added under **ANK-2693-00-00 Auditing case (STEP2)**. The comment explains: データタイプがStringの項目"外部システムコード" (項目ID:syscd) — String-type field "External System Code" (item ID: syscd). This field identifies external system integration targets.

| # | Type | Code |
|---|------|------|
| 1 | IF-ELSE-IF | `key.equals("外部システムコード")` [key equals "External System Code"] |
| 2 | IF-ELSE | `subkey.equalsIgnoreCase("value")` |
| 3 | EXEC | `setSyscd_value((String)in_value);` |
| 4 | IF-ELSE | `subkey.equalsIgnoreCase("state")` |
| 5 | EXEC | `setSyscd_state((String)in_value);` // subkeyが"state"の場合、ステータスを返す (If subkey is "state", return the status) |

---

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `sysid` | Field | System ID — the internal identifier for the system or session processing the request |
| `svc_kei_no` | Field | Service Contract Number (サービス契約番号) — unique identifier for a customer's service contract line |
| `svc_kei_ucwk_no` | Field | Service Contract Detail Number (サービス契約内訳番号) — sub-identifier for individual line items within a service contract |
| `ido_div` | Field | Relocation Classification (異動区分) — classifies the type of account/service change: new connection, transfer, suspension, etc. |
| `ido_rsn_cd` | Field | Relocation Reason Code (異動理由コード) — the specific reason code for a relocation/disposition change, stored as a dynamic list |
| `mskm_no` | Field | Application Number (申込番号) — unique identifier for a service application/order |
| `mskm_dtl_no` | Field | Application Detail Number (申込明細番号) — sub-identifier for details within an application |
| `popup_mode` | Field | Popup Mode (ポップアップモード) — controls whether UI popups should be displayed |
| `ido_div_seni_ptn` | Field | Relocation Classification Selection Screen Transition Pattern (異動区分選択画面遷移パターン) — determines which screen to navigate to when selecting a relocation classification |
| `syscd` | Field | External System Code (外部システムコード) — identifies the target external system for integration, added in ANK-2693 auditing enhancement (STEP2) |
| `key` | Parameter | Item name — the Japanese field identifier that routes data to the correct setter |
| `subkey` | Parameter | Field descriptor — `"value"` for data, `"state"` for UI state metadata |
| `in_value` | Parameter | Incoming data value to be stored in the target field |
| `isSetAsString` | Parameter | Type coercion flag — forces String-to-Long type coercion for Long-type fields |
| `ido_rsn_cd_list` | Field | List of typed beans (X33VDataTypeList) holding dynamic relocation reason code entries |
| X33V | Framework | Fujitsu Futurity X33V — the web client framework providing data binding, bean types (StringBean, LongBean, BooleanBean), and listing support |
| DBean | Type | Data Bean — a framework-managed bean that holds screen model data and implements X33V data binding interfaces |
| ANK-2693 | Project | Auditing enhancement project code (STEP2) — added external system code support for audit trail purposes |
| value/state | Pattern | A dual-field pattern where `"value"` stores business data and `"state"` stores UI metadata (e.g., editability, visibility, required-flag) |
| X33VDataTypeStringBean | Type | Typed bean for String-type data fields within a list — used for each entry in the relocation reason code list |
| X33VDataTypeLongBean | Type | Typed bean for Long-type data fields within a list |
| X33VDataTypeBooleanBean | Type | Typed bean for Boolean-type data fields within a list |
