# Business Logic — KKW02516SF01DBean.storeModelData() [127 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKA16801SF.KKW02516SF01DBean` |
| Layer | Data / View Bean (View Layer) |
| Module | `KKA16801SF` (Package: `eo.web.webview.KKA16801SF`) |

## 1. Role

### KKW02516SF01DBean.storeModelData()

This method is the **primary data population entry point** for the `KKW02516SF01DBean` data bean, which represents a service application form in a K-Opticom telecom operations portal. It implements a **conditional routing/dispatch pattern** that receives a `key` (field name) and `subkey` (property type: "value" or "state") and routes incoming data (`in_value`) to the correct setter method. The method handles **nine distinct business fields**: a system ID, service contract number, move classification, move reason code, move reason memo, optional service contract number, processing classification, application number, and application detail number. For scalar String fields, it directly delegates to corresponding `setXxx_value()` or `setXxx_state()` methods based on the subkey. For collection-based fields (move reason codes and optional service contract numbers), it extracts an index from the key string (e.g., `"異動理由コード/0"`), validates the index against the list bounds, and **recursively delegates** to the appropriate `X33VDataTypeStringBean.storeModelData()` sub-item. This design enables a **flat key/subkey interface** to drive deeply nested bean population, supporting the X33V framework's model-binding pattern where form data from web screens is mapped into structured business data objects.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["storeModelData(key, subkey, in_value, isSetAsString)"])
    
    START --> COND_NULL["key is null or subkey is null"]
    COND_NULL -->|true| EARLY_RETURN["Return early - null guard"]
    COND_NULL -->|false| SEPARATOR["sep = key.indexOf('/')"]
    SEPARATOR --> COND_SYSID["key equals SYSID"]
    
    COND_SYSID -->|true| SYSID_BRANCH["SYSID branch"]
    COND_SYSID -->|false| COND_SVC["key equals サービス契約番号"]
    
    SYSID_BRANCH --> SYSID_SUBVAL["subkey equals value"]
    SYSID_SUBVAL -->|true| SYSID_SETVAL["setSysid_value"]
    SYSID_SUBVAL -->|false| SYSID_SUBSTATE["subkey equals state"]
    SYSID_SUBSTATE -->|true| SYSID_SETSTATE["setSysid_state"]
    SYSID_SUBSTATE -->|false| NEXT_SYSID["Proceed to next"]
    SYSID_SETVAL --> NEXT_SYSID
    SYSID_SETSTATE --> NEXT_SYSID
    
    NEXT_SYSID --> SVC_BRANCH["サービス契約番号 branch"]
    SVC_BRANCH --> SVC_SUBVAL["subkey equals value"]
    SVC_SUBVAL -->|true| SVC_SETVAL["setSvc_kei_no_value"]
    SVC_SUBVAL -->|false| SVC_SUBSTATE["subkey equals state"]
    SVC_SUBSTATE -->|true| SVC_SETSTATE["setSvc_kei_no_state"]
    SVC_SUBSTATE -->|false| NEXT_SVC["Proceed to next"]
    SVC_SETVAL --> NEXT_SVC
    SVC_SETSTATE --> NEXT_SVC
    
    NEXT_SVC --> IDO_BRANCH["異動区分 branch"]
    IDO_BRANCH --> IDO_SUBVAL["subkey equals value"]
    IDO_SUBVAL -->|true| IDO_SETVAL["setIdo_div_value"]
    IDO_SUBVAL -->|false| IDO_SUBSTATE["subkey equals state"]
    IDO_SUBSTATE -->|true| IDO_SETSTATE["setIdo_div_state"]
    IDO_SUBSTATE -->|false| NEXT_IDO["Proceed to next"]
    IDO_SETVAL --> NEXT_IDO
    IDO_SETSTATE --> NEXT_IDO
    
    NEXT_IDO --> IDO_RSN_CD_BRANCH["異動理由コード branch"]
    IDO_RSN_CD_BRANCH --> EXTRACT_IDX["Extract index from key after /"]
    EXTRACT_IDX --> PARSE_INT["tmpIndexInt = Integer.valueOf(key)"]
    PARSE_INT --> TRY_PARSE["Try parse index as integer"]
    TRY_PARSE -->|success| CHECK_IDX["tmpIndexInt != null"]
    TRY_PARSE -->|NumberFormatException| IDX_NULL["tmpIndexInt = null"]
    CHECK_IDX -->|false| NEXT_RSNCD["Proceed to next"]
    CHECK_IDX -->|true| IDX_BOUNDS["tmpIndex >= 0 and < list.size()"]
    IDX_BOUNDS -->|true| RECURSE_RSNCD["Recursive storeModelData on list item"]
    IDX_BOUNDS -->|false| NEXT_RSNCD
    RECURSE_RSNCD --> NEXT_RSNCD
    IDX_NULL --> NEXT_RSNCD
    
    NEXT_RSNCD --> IDO_RSN_MEMO_BRANCH["異動理由メモ branch"]
    IDO_RSN_MEMO_BRANCH --> MEMO_SUBVAL["subkey equals value"]
    MEMO_SUBVAL -->|true| MEMO_SETVAL["setIdo_rsn_memo_value"]
    MEMO_SUBVAL -->|false| MEMO_SUBSTATE["subkey equals state"]
    MEMO_SUBSTATE -->|true| MEMO_SETSTATE["setIdo_rsn_memo_state"]
    MEMO_SUBSTATE -->|false| NEXT_MEMO["Proceed to next"]
    MEMO_SETVAL --> NEXT_MEMO
    MEMO_SETSTATE --> NEXT_MEMO
    
    NEXT_MEMO --> OP_SVC_BRANCH["オプションサービス契約番号 branch"]
    OP_SVC_BRANCH --> OP_EXTRACT_IDX["Extract index from key after /"]
    OP_EXTRACT_IDX --> OP_PARSE_INT["tmpIndexInt = Integer.valueOf(key)"]
    OP_PARSE_INT --> OP_TRY_PARSE["Try parse index as integer"]
    OP_TRY_PARSE -->|success| OP_CHECK_IDX["tmpIndexInt != null"]
    OP_TRY_PARSE -->|NumberFormatException| OP_IDX_NULL["tmpIndexInt = null"]
    OP_CHECK_IDX -->|false| NEXT_OP["Proceed to next"]
    OP_CHECK_IDX -->|true| OP_IDX_BOUNDS["tmpIndex >= 0 and < list.size()"]
    OP_IDX_BOUNDS -->|true| OP_RECURSE["Recursive storeModelData on list item"]
    OP_IDX_BOUNDS -->|false| NEXT_OP
    OP_RECURSE --> NEXT_OP
    OP_IDX_NULL --> NEXT_OP
    
    NEXT_OP --> TRANDIV_BRANCH["処理区分 branch"]
    TRANDIV_BRANCH --> TD_SUBVAL["subkey equals value"]
    TD_SUBVAL -->|true| TD_SETVAL["setTran_div_value"]
    TD_SUBVAL -->|false| TD_SUBSTATE["subkey equals state"]
    TD_SUBSTATE -->|true| TD_SETSTATE["setTran_div_state"]
    TD_SUBSTATE -->|false| NEXT_TD["Proceed to next"]
    TD_SETVAL --> NEXT_TD
    TD_SETSTATE --> NEXT_TD
    
    NEXT_TD --> MSKM_BRANCH["申請番号 branch"]
    MSKM_BRANCH --> MSKM_SUBVAL["subkey equals value"]
    MSKM_SUBVAL -->|true| MSKM_SETVAL["setMskm_no_value"]
    MSKM_SUBVAL -->|false| MSKM_SUBSTATE["subkey equals state"]
    MSKM_SUBSTATE -->|true| MSKM_SETSTATE["setMskm_no_state"]
    MSKM_SUBSTATE -->|false| NEXT_MSKM["Proceed to next"]
    MSKM_SETVAL --> NEXT_MSKM
    MSKM_SETSTATE --> NEXT_MSKM
    
    NEXT_MSKM --> MSKM_DTL_BRANCH["申請明細番号 branch"]
    MSKM_DTL_BRANCH --> MSKM_DTL_SUBVAL["subkey equals value"]
    MSKM_DTL_SUBVAL -->|true| MSKM_DTL_SETVAL["setMskm_dtl_no_value"]
    MSKM_DTL_SUBVAL -->|false| MSKM_DTL_SUBSTATE["subkey equals state"]
    MSKM_DTL_SUBSTATE -->|true| MSKM_DTL_SETSTATE["setMskm_dtl_no_state"]
    MSKM_DTL_SUBSTATE -->|false| END_NODE["Return (fallthrough)"]
    MSKM_DTL_SETVAL --> END_NODE
    MSKM_DTL_SETSTATE --> END_NODE
```

**Processing Description:**

1. **Null Guard (L473-L475):** If `key` or `subkey` is null, the method returns immediately without performing any operation. This is a defensive null-check pattern to prevent null pointer exceptions downstream.

2. **Separator Position Capture (L477):** The index of the first `/` character in `key` is captured via `key.indexOf("/")`. This is used by the two array-list fields (異動理由コード, オプションサービス契約番号) to extract the array index from a compound key like `"異動理由コード/0"`.

3. **SYSID Branch (L480-L487):** Handles the system ID field (`SYSID`). Delegates to `setSysid_value()` or `setSysid_state()` depending on whether `subkey` is "value" or "state".

4. **Service Contract Number Branch (L492-L499):** Handles the service contract number (`サービス契約番号`, internal ID: `svc_kei_no`). Delegates to `setSvc_kei_no_value()` or `setSvc_kei_no_state()`.

5. **Move Classification Branch (L504-L511):** Handles the move classification (`異動区分`, internal ID: `ido_div`). Delegates to `setIdo_div_value()` or `setIdo_div_state()`.

6. **Move Reason Code Branch (L516-L550):** A complex branch handling a list of move reason codes (`異動理由コード`, internal ID: `ido_rsn_cd`). Extracts an index from the key (e.g., `"異動理由コード/0"` -> index `0`), validates it against the list bounds, and recursively calls `storeModelData()` on the target `X33VDataTypeStringBean` list item.

7. **Move Reason Memo Branch (L555-L562):** Handles the move reason memo field (`異動理由メモ`, internal ID: `ido_rsn_memo`). Delegates to `setIdo_rsn_memo_value()` or `setIdo_rsn_memo_state()`.

8. **Option Service Contract Number Branch (L567-L601):** A complex branch handling a list of option service contract numbers (`オプションサービス契約番号`, internal ID: `op_svc_kei_no`). Same pattern as the move reason code branch — extracts index, validates bounds, and recursively delegates.

9. **Processing Classification Branch (L606-L613):** Handles the processing classification (`処理区分`, internal ID: `tran_div`). Delegates to `setTran_div_value()` or `setTran_div_state()`.

10. **Application Number Branch (L618-L625):** Handles the application number (`申請番号`, internal ID: `mskm_no`). Delegates to `setMskm_no_value()` or `setMskm_no_state()`.

11. **Application Detail Number Branch (L630-L637):** Handles the application detail number (`申請明細番号`, internal ID: `mskm_dtl_no`). Delegates to `setMskm_dtl_no_value()` or `setMskm_dtl_no_state()`.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | The business field identifier — represents which data field to populate. Can be a simple field name (e.g., `"SYSID"`, `"サービス契約番号"`, `"異動区分"`) or a compound key for list fields using slash-separated index notation (e.g., `"異動理由コード/0"`, `"オプションサービス契約番号/2"`). Determines which of the 9 conditional branches is taken. |
| 2 | `subkey` | `String` | The property accessor type — determines whether the value being set is the actual data value (`"value"`) or the UI state metadata (`"state"`). Case-insensitive comparison is used, so `"Value"`, `"VALUE"`, and `"value"` all resolve to the same branch. |
| 3 | `in_value` | `Object` | The data value to be assigned. Cast to `String` for all setter calls. For list fields (異動理由コード, オプションサービス契約番号), this is passed through to the nested bean's `storeModelData()` method. The Javadoc describes this as the "data" to be stored. |
| 4 | `isSetAsString` | `boolean` | A flag indicating whether to set a `Long` type property as a `String` type value. According to the Javadoc, when set to `true` for Long-type field value properties, the string representation is assigned rather than a parsed long. Note: this parameter is accepted but **not used** within the method body — it is forwarded to the recursive call for X33VDataTypeLongBean sub-items. |

**Instance fields read by this method:**

| Field | Type | Business Description |
|-------|------|---------------------|
| `ido_rsn_cd_list` | `X33VDataTypeList` | List of move reason code entries — each element is a nested bean (cast to `X33VDataTypeStringBean`) holding individual reason code data |
| `op_svc_kei_no_list` | `X33VDataTypeList` | List of optional service contract number entries — each element is a nested bean holding individual optional service data |

## 4. CRUD Operations / Called Services

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `JKKAdEditCC.substring` | JKKAdEditCC | - | Calls `substring` in `JKKAdEditCC` (utility string editing) |
| - | `JKKAdEdit.substring` | JKKAdEdit | - | Calls `substring` in `JKKAdEdit` (utility string editing) |
| - | `JKKTelnoInfoAddMapperCC.substring` | JKKTelnoInfoAddMapperCC | - | Calls `substring` in `JKKTelnoInfoAddMapperCC` (utility string editing) |
| - | `JDKejbStringEdit.substring` | JDKejbStringEdit | - | Calls `substring` in `JDKejbStringEdit` (utility string editing) |
| - | `KKW02516SF01DBean.setIdo_div_state` | KKW02516SF01DBean | - | Sets the UI state for the move classification field (異動区分) |
| - | `KKW02516SF01DBean.setIdo_div_value` | KKW02516SF01DBean | - | Sets the value for the move classification field (異動区分) |
| - | `KKW02516SF01DBean.setIdo_rsn_memo_state` | KKW02516SF01DBean | - | Sets the UI state for the move reason memo field (異動理由メモ) |
| - | `KKW02516SF01DBean.setIdo_rsn_memo_value` | KKW02516SF01DBean | - | Sets the value for the move reason memo field (異動理由メモ) |
| - | `KKW02516SF01DBean.setMskm_dtl_no_state` | KKW02516SF01DBean | - | Sets the UI state for the application detail number field (申請明細番号) |
| - | `KKW02516SF01DBean.setMskm_dtl_no_value` | KKW02516SF01DBean | - | Sets the value for the application detail number field (申請明細番号) |
| - | `KKW02516SF01DBean.setMskm_no_state` | KKW02516SF01DBean | - | Sets the UI state for the application number field (申請番号) |
| - | `KKW02516SF01DBean.setMskm_no_value` | KKW02516SF01DBean | - | Sets the value for the application number field (申請番号) |
| - | `KKW02516SF01DBean.setSvc_kei_no_state` | KKW02516SF01DBean | - | Sets the UI state for the service contract number field (サービス契約番号) |
| - | `KKW02516SF01DBean.setSvc_kei_no_value` | KKW02516SF01DBean | - | Sets the value for the service contract number field (サービス契約番号) |
| - | `KKW02516SF01DBean.setSysid_state` | KKW02516SF01DBean | - | Sets the UI state for the system ID field (SYSID) |
| - | `KKW02516SF01DBean.setSysid_value` | KKW02516SF01DBean | - | Sets the value for the system ID field (SYSID) |
| - | `KKW02516SF01DBean.setTran_div_state` | KKW02516SF01DBean | - | Sets the UI state for the processing classification field (処理区分) |
| - | `KKW02516SF01DBean.setTran_div_value` | KKW02516SF01DBean | - | Sets the value for the processing classification field (処理区分) |
| - | `KKW02516SF01DBean.storeModelData` | KKW02516SF01DBean | - | Recursive delegation to nested `X33VDataTypeStringBean` items within list fields (異動理由コード and オプションサービス契約番号) |

**Notes:**
- This method performs **no direct Create/Read/Update/Delete (CRUD) database operations**. It is purely a **data population (U — Update field values)** method operating at the view-bean layer.
- The method delegates to internal bean setters and recursive list-item population only. No external Service Components (SC) or Common Business Services (CBS) are invoked.
- The utility `substring` calls originate from the X33V framework's string edit components (JKKAdEditCC, JKKAdEdit, etc.) invoked during list element access and type casting.

## 5. Dependency Trace

No screen/batch entry points found within 8 hops. Direct callers found: 2 methods.

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | KKW02516SF01DBean | `KKW02516SF01DBean.storeModelData` | `setMskm_dtl_no_state [U] -`, `setMskm_dtl_no_value [U] -`, `setMskm_no_state [U] -`, `setMskm_no_value [U] -`, `setTran_div_state [U] -`, `setTran_div_value [U] -`, `storeModelData [recursive] -`, `substring [U] -`, `setIdo_rsn_memo_state [U] -`, `setIdo_rsn_memo_value [U] -`, `setSysid_state [U] -`, `setSysid_value [U] -`, `setSvc_kei_no_state [U] -`, `setSvc_kei_no_value [U] -`, `setIdo_div_state [U] -`, `setIdo_div_value [U] -` |

**Notes:**
- All callers reside within `KKW02516SF01DBean` itself, indicating this method is used **internally for self-population** — likely invoked by the X33V framework's view model binding mechanism during page rendering or form submission.
- The recursive nature of this method means it can be called multiple times in a single logical population cycle, once per field (scalar and list items).

## 6. Per-Branch Detail Blocks

**Block 1** — [IF] Null guard `(key == null || subkey == null)` (L473)

> Defensive null check — prevents null pointer exceptions if either the field name or property type is null. Returns immediately with no side effects.

| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = key.indexOf("/")` // Capture slash position for later use [L477] |
| 2 | RETURN | `return` — null guard: short-circuit early [L475] |

---

**Block 2** — [IF] SYSID field handling `(key.equals("SYSID"))` (L480)

> Handles the system ID scalar field. The `key` is the literal `"SYSID"`, and `subkey` determines which property is set: `"value"` for the data or `"state"` for UI state.

**Block 2.1** — [IF-ELSE] subkey check — SYSID (L481)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` [L481] |
| 2 | EXEC | `setSysid_value((String)in_value)` — cast and store the data value [-> sysid_value field] [L482] |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — subkey is "state", stores the UI state [-> sysid_state field] [L485] |
| 4 | EXEC | `setSysid_state((String)in_value)` — cast and store the state value [L486] |

---

**Block 3** — [ELSE-IF] Service Contract Number `(key.equals("サービス契約番号"))` (L492)

> Handles the service contract number scalar field (internal ID: `svc_kei_no`). Branches on subkey to set either the value or the state.

**Block 3.1** — [IF-ELSE] subkey check — Service Contract Number (L493)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` [L493] |
| 2 | EXEC | `setSvc_kei_no_value((String)in_value)` — cast and store the service contract number [L494] |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — subkey is "state", stores the UI state [L497] |
| 4 | EXEC | `setSvc_kei_no_state((String)in_value)` — cast and store the state value [L498] |

---

**Block 4** — [ELSE-IF] Move Classification `(key.equals("異動区分"))` (L504)

> Handles the move classification scalar field (internal ID: `ido_div`). Represents a change/disposition type for service lines (e.g., new activation, suspension, transfer).

**Block 4.1** — [IF-ELSE] subkey check — Move Classification (L505)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` [L505] |
| 2 | EXEC | `setIdo_div_value((String)in_value)` — cast and store the classification value [L506] |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — subkey is "state", stores the UI state [L509] |
| 4 | EXEC | `setIdo_div_state((String)in_value)` — cast and store the state value [L510] |

---

**Block 5** — [ELSE-IF] Move Reason Code `(key.equals("異動理由コード"))` (L516)

> Handles the **list/array** of move reason codes (internal ID: `ido_rsn_cd`). This is a compound field where the key includes a slash-separated index (e.g., `"異動理由コード/0"`). Extracts the index, validates it against the list size, and recursively delegates to the nested bean.

**Block 5.1** — [SET] Extract index from key (L520-L521)

| # | Type | Code |
|---|------|------|
| 1 | SET | `key = key.substring(separaterPoint + 1)` // Extract the part after the first "/" — e.g., "異動理由コード/0" -> "0" [L521] |
| 2 | SET | `tmpIndexInt = null` // Initialize index variable [L524] |

**Block 5.2** — [TRY-CATCH] Parse index as integer (L525-L532)

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `tmpIndexInt = Integer.valueOf(key)` — attempt to parse the extracted key string as an integer [L527] |
| 2 | CATCH | `catch (NumberFormatException e)` — index value is not a numeric string, return null [L530] |
| 3 | SET | `tmpIndexInt = null` — invalid index, guard against further processing [L531] |

**Block 5.3** — [IF] Index validation (L532)

| # | Type | Code |
|---|------|------|
| 1 | IF | `tmpIndexInt != null` — index was successfully parsed as a number [L532] |
| 2 | SET | `int tmpIndex = tmpIndexInt.intValue()` — unbox Integer to primitive int [L534] |
| 3 | ELSE-IF | `tmpIndex >= 0 && tmpIndex < ido_rsn_cd_list.size()` — index is within valid bounds of the list [L534] |
| 4 | CALL | `((X33VDataTypeStringBean)ido_rsn_cd_list.get(tmpIndex)).storeModelData(subkey, in_value)` — recursive delegation to the nested bean at the given index. The cast targets `X33VDataTypeStringBean` as the list element type. [L535] |

---

**Block 6** — [ELSE-IF] Move Reason Memo `(key.equals("異動理由メモ"))` (L555)

> Handles the move reason memo scalar field (internal ID: `ido_rsn_memo`). Stores free-text explanations for move reason codes.

**Block 6.1** — [IF-ELSE] subkey check — Move Reason Memo (L556)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` [L557] |
| 2 | EXEC | `setIdo_rsn_memo_value((String)in_value)` — cast and store the memo text [L558] |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — subkey is "state", stores the UI state [L561] |
| 4 | EXEC | `setIdo_rsn_memo_state((String)in_value)` — cast and store the state value [L562] |

---

**Block 7** — [ELSE-IF] Optional Service Contract Number `(key.equals("オプションサービス契約番号"))` (L567)

> Handles the **list/array** of optional service contract numbers (internal ID: `op_svc_kei_no`). Same compound-key pattern as Block 5 — key contains a slash-separated index (e.g., `"オプションサービス契約番号/1"`).

**Block 7.1** — [SET] Extract index from key (L571-L572)

| # | Type | Code |
|---|------|------|
| 1 | SET | `key = key.substring(separaterPoint + 1)` // Extract the part after the first "/" — e.g., "オプションサービス契約番号/1" -> "1" [L572] |
| 2 | SET | `tmpIndexInt = null` // Initialize index variable [L575] |

**Block 7.2** — [TRY-CATCH] Parse index as integer (L576-L583)

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `tmpIndexInt = Integer.valueOf(key)` — attempt to parse the extracted key string as an integer [L578] |
| 2 | CATCH | `catch (NumberFormatException e)` — index value is not a numeric string, return null [L581] |
| 3 | SET | `tmpIndexInt = null` — invalid index, guard against further processing [L582] |

**Block 7.3** — [IF] Index validation (L583)

| # | Type | Code |
|---|------|------|
| 1 | IF | `tmpIndexInt != null` — index was successfully parsed as a number [L583] |
| 2 | SET | `int tmpIndex = tmpIndexInt.intValue()` — unbox Integer to primitive int [L585] |
| 3 | ELSE-IF | `tmpIndex >= 0 && tmpIndex < op_svc_kei_no_list.size()` — index is within valid bounds of the list [L585] |
| 4 | CALL | `((X33VDataTypeStringBean)op_svc_kei_no_list.get(tmpIndex)).storeModelData(subkey, in_value)` — recursive delegation to the nested bean at the given index [L586] |

---

**Block 8** — [ELSE-IF] Processing Classification `(key.equals("処理区分"))` (L606)

> Handles the processing classification scalar field (internal ID: `tran_div`). Represents the type of processing operation (e.g., new registration, modification, cancellation).

**Block 8.1** — [IF-ELSE] subkey check — Processing Classification (L607)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` [L607] |
| 2 | EXEC | `setTran_div_value((String)in_value)` — cast and store the classification value [L608] |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — subkey is "state", stores the UI state [L611] |
| 4 | EXEC | `setTran_div_state((String)in_value)` — cast and store the state value [L612] |

---

**Block 9** — [ELSE-IF] Application Number `(key.equals("申請番号"))` (L618)

> Handles the application number scalar field (internal ID: `mskm_no`). Represents the main application identifier for a service request.

**Block 9.1** — [IF-ELSE] subkey check — Application Number (L619)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` [L619] |
| 2 | EXEC | `setMskm_no_value((String)in_value)` — cast and store the application number [L620] |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — subkey is "state", stores the UI state [L623] |
| 4 | EXEC | `setMskm_no_state((String)in_value)` — cast and store the state value [L624] |

---

**Block 10** — [ELSE-IF] Application Detail Number `(key.equals("申請明細番号"))` (L630)

> Handles the application detail number scalar field (internal ID: `mskm_dtl_no`). Represents the line-item identifier within an application, used when multiple service lines are part of a single application.

**Block 10.1** — [IF-ELSE] subkey check — Application Detail Number (L631)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` [L631] |
| 2 | EXEC | `setMskm_dtl_no_value((String)in_value)` — cast and store the detail number [L632] |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` — subkey is "state", stores the UI state [L635] |
| 4 | EXEC | `setMskm_dtl_no_state((String)in_value)` — cast and store the state value [L636] |

---

**Block 11** — [ELSE] No matching key (implicit fallthrough) (L637)

> If the `key` does not match any of the nine known field names, the method falls through to the closing brace with no action — effectively a no-op. This is a silent pass-through that ignores unrecognized keys rather than throwing an exception.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | Implicit return — no side effects for unrecognized keys [L637] |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `SYSID` | Field | System ID — internal system identifier for the current session or process instance |
| `sysid_value` | Field | System ID data value — stores the actual SYSID string |
| `sysid_state` | Field | System ID UI state — stores metadata about the SYSID field's UI state (e.g., enabled/disabled, visible/hidden) |
| `sysid_update` | Field | System ID update flag — tracks whether the SYSID field has been modified |
| `サービス契約番号` | Field | Service Contract Number — the primary Japanese field name; internal ID `svc_kei_no`. Represents a telecom service contract line item number |
| `svc_kei_no_value` | Field | Service contract number data value |
| `svc_kei_no_state` | Field | Service contract number UI state |
| `svc_kei_no_update` | Field | Service contract number update flag |
| `異動区分` | Field | Move Classification — the Japanese field name; internal ID `ido_div`. Indicates the type of service line change (e.g., new activation, suspension, transfer, cancellation) |
| `ido_div_value` | Field | Move classification data value |
| `ido_div_state` | Field | Move classification UI state |
| `ido_div_update` | Field | Move classification update flag |
| `異動理由コード` | Field | Move Reason Code — the Japanese field name; internal ID `ido_rsn_cd`. A **list/array** field storing the reason codes explaining why a service line was moved/changed. Each list element is an `X33VDataTypeStringBean` |
| `ido_rsn_cd_list` | Field | The X33VDataTypeList containing individual move reason code entries |
| `異動理由メモ` | Field | Move Reason Memo — the Japanese field name; internal ID `ido_rsn_memo`. Free-text memo explaining the move reason code |
| `ido_rsn_memo_value` | Field | Move reason memo data value |
| `ido_rsn_memo_state` | Field | Move reason memo UI state |
| `ido_rsn_memo_update` | Field | Move reason memo update flag |
| `オプションサービス契約番号` | Field | Optional Service Contract Number — the Japanese field name; internal ID `op_svc_kei_no`. A **list/array** field storing optional/add-on service contract numbers |
| `op_svc_kei_no_list` | Field | The X33VDataTypeList containing individual optional service contract number entries |
| `処理区分` | Field | Processing Classification — the Japanese field name; internal ID `tran_div`. Indicates the processing type (e.g., new registration, modification, cancellation) |
| `tran_div_value` | Field | Processing classification data value |
| `tran_div_state` | Field | Processing classification UI state |
| `tran_div_update` | Field | Processing classification update flag |
| `申請番号` | Field | Application Number — the Japanese field name; internal ID `mskm_no`. The main application identifier for a service request |
| `mskm_no_value` | Field | Application number data value |
| `mskm_no_state` | Field | Application number UI state |
| `mskm_no_update` | Field | Application number update flag |
| `申請明細番号` | Field | Application Detail Number — the Japanese field name; internal ID `mskm_dtl_no`. The line-item identifier within an application, used when multiple service lines belong to a single application |
| `mskm_dtl_no_value` | Field | Application detail number data value |
| `mskm_dtl_no_state` | Field | Application detail number UI state |
| `mskm_dtl_no_update` | Field | Application detail number update flag |
| `X33VDataTypeStringBean` | Class | Fujitsu X33V framework data type bean for String-valued form fields. Each list element is cast to this type |
| `X33VDataTypeList` | Class | Fujitsu X33V framework list container for array/collection form fields |
| `X33VDataTypeBeanInterface` | Interface | X33V framework interface that `KKW02516SF01DBean` implements, enabling it to act as a typed data binding bean |
| `X33VListedBeanInterface` | Interface | X33V framework interface for beans containing list/array fields |
| value | subkey | Property type indicating the data value being stored (as opposed to UI state) |
| state | subkey | Property type indicating the UI state metadata being stored (e.g., enabled, visible, validated) |
| X33V | Framework | Fujitsu Futurity X33V — a Java web application framework for building enterprise form-based applications |
| FTTH | Business term | Fiber To The Home — fiber-optic broadband internet service (common service type in K-Opticom's portfolio) |
| K-Opticom | Business term | Japanese telecommunications carrier; the domain context for this application |
