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

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKW00844SF.KKW00844SF01DBean` |
| Layer | **Controller / Data-Binding** (DBean — Data Bean used in the view layer for request/response data binding) |
| Module | `KKW00844SF` (Package: `eo.web.webview.KKW00844SF`) |

## 1. Role

### KKW00844SF01DBean.storeModelData()

This method serves as the **central data-binding router** for the KKW044SF (Service Contract Change / 申込変更) screen. It receives a key-value pair from the view layer and routes the value to the correct field on the `KKW00844SF01DBean`, an X33V data bean that implements the `X33VDataTypeBeanInterface` and `X33VListedBeanInterface` for Futurity web framework data binding. The method handles **nine distinct business data categories**: system ID, service contract number, move classification (異動区分), move reason code (異動理由コード — a dynamic list), move reason memo (異動理由メモ), optional service contract number (オプションサービス契約番号 — a dynamic list), processing classification (処理区分), application number (申込番号), and application detail number (申込明細番号). For simple scalar fields, it sets the `value` or `state` property directly via setter delegation. For list-type fields (異動理由コード and オプションサービス契約番号), it **delegates** to the `storeModelData` method of the individual `X33VDataTypeStringBean` item at the specified index in the list. This method implements the **routing/dispatch pattern** combined with the **delegation pattern**, serving as the primary entry point for inbound data population during screen display and form submission in the service contract modification workflow.

## 2. Processing Pattern (Detailed Business Logic)

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

    START --> CHECK_NULL["Check: key or subkey is null"]
    CHECK_NULL --> |Yes| RETURN["Return void (early exit)"]
    CHECK_NULL --> |No| FIND_SEP["Find separator position: separaterPoint = key.indexOf('/')"]

    FIND_SEP --> KEY_SYSID["IF key equals システムID"]
    KEY_SYSID --> |Yes| SYSID_SUBKEY{"subkey equals 'value' or 'state'?"}
    SYSID_SUBKEY --> |value| SET_SYSID_VAL["setSysid_value(in_value)"]
    SYSID_SUBKEY --> |state| SET_SYSID_ST["setSysid_state(in_value)"]
    SYSID_SUBKEY --> |No| NEXT1["Proceed to next branch"]
    SET_SYSID_ST --> NEXT1
    SET_SYSID_VAL --> NEXT1
    KEY_SYSID --> |No| NEXT1

    NEXT1 --> KEY_SVC{"IF key equals サービス契約番号"}
    KEY_SVC --> |Yes| SVC_SUBKEY{"subkey equals 'value' or 'state'?"}
    SVC_SUBKEY --> |value| SET_SVC_VAL["setSvc_kei_no_value(in_value)"]
    SVC_SUBKEY --> |state| SET_SVC_ST["setSvc_kei_no_state(in_value)"]
    SVC_SUBKEY --> |No| NEXT2["Proceed to next branch"]
    SET_SVC_ST --> NEXT2
    SET_SVC_VAL --> NEXT2
    KEY_SVC --> |No| NEXT2

    NEXT2 --> KEY_IDO_DIV{"IF key equals 異動区分"}
    KEY_IDO_DIV --> |Yes| IDO_SUBKEY{"subkey equals 'value' or 'state'?"}
    IDO_SUBKEY --> |value| SET_IDO_VAL["setIdo_div_value(in_value)"]
    IDO_SUBKEY --> |state| SET_IDO_ST["setIdo_div_state(in_value)"]
    IDO_SUBKEY --> |No| NEXT3["Proceed to next branch"]
    SET_IDO_ST --> NEXT3
    SET_IDO_VAL --> NEXT3
    KEY_IDO_DIV --> |No| NEXT3

    NEXT3 --> KEY_IDO_RSN_CD{"IF key equals 異動理由コード"}
    KEY_IDO_RSN_CD --> |Yes| EXTRACT_IDX["Extract index: key = key.substring(separaterPoint + 1)"]
    EXTRACT_IDX --> TRY_PARSE["Parse: tmpIndexInt = Integer.valueOf(key)"]
    TRY_PARSE --> |NumberFormatException| IDX_NULL["tmpIndexInt = null"]
    TRY_PARSE --> |Success| CHECK_IDX_RANGE{"tmpIndexInt != null AND
0 <= tmpIndex < ido_rsn_cd_list.size()"}
    IDX_NULL --> IDX_NULL_END["No action (skip)"]
    CHECK_IDX_RANGE --> |No| IDX_NULL_END
    CHECK_IDX_RANGE --> |Yes| DELEGATE_IDO_RSN["Get item from ido_rsn_cd_list
Cast to X33VDataTypeStringBean
Call storeModelData(subkey, in_value)"]
    DELEGATE_IDO_RSN --> NEXT4["Proceed to next branch"]
    KEY_IDO_RSN_CD --> |No| NEXT4

    NEXT4 --> KEY_IDO_RSN_MEMO{"IF key equals 異動理由メモ"}
    KEY_IDO_RSN_MEMO --> |Yes| MEMO_SUBKEY{"subkey equals 'value' or 'state'?"}
    MEMO_SUBKEY --> |value| SET_MEMO_VAL["setIdo_rsn_memo_value(in_value)"]
    MEMO_SUBKEY --> |state| SET_MEMO_ST["setIdo_rsn_memo_state(in_value)"]
    MEMO_SUBKEY --> |No| NEXT5["Proceed to next branch"]
    SET_MEMO_ST --> NEXT5
    SET_MEMO_VAL --> NEXT5
    KEY_IDO_RSN_MEMO --> |No| NEXT5

    NEXT5 --> KEY_OP_SVC{"IF key equals オプションサービス契約番号"}
    KEY_OP_SVC --> |Yes| EXTRACT_OP_IDX["Extract index: key = key.substring(separaterPoint + 1)"]
    EXTRACT_OP_IDX --> TRY_PARSE_OP["Parse: tmpIndexInt = Integer.valueOf(key)"]
    TRY_PARSE_OP --> |NumberFormatException| IDX_NULL_OP["tmpIndexInt = null"]
    TRY_PARSE_OP --> |Success| CHECK_OP_RANGE{"tmpIndexInt != null AND
0 <= tmpIndex < op_svc_kei_no_list.size()"}
    IDX_NULL_OP --> IDX_NULL_END_OP["No action (skip)"]
    CHECK_OP_RANGE --> |No| IDX_NULL_END_OP
    CHECK_OP_RANGE --> |Yes| DELEGATE_OP_SVC["Get item from op_svc_kei_no_list
Cast to X33VDataTypeStringBean
Call storeModelData(subkey, in_value)"]
    DELEGATE_OP_SVC --> NEXT6["Proceed to next branch"]
    KEY_OP_SVC --> |No| NEXT6

    NEXT6 --> KEY_TRAN_DIV{"IF key equals 処理区分"}
    KEY_TRAN_DIV --> |Yes| TRAN_SUBKEY{"subkey equals 'value' or 'state'?"}
    TRAN_SUBKEY --> |value| SET_TRAN_VAL["setTran_div_value(in_value)"]
    TRAN_SUBKEY --> |state| SET_TRAN_ST["setTran_div_state(in_value)"]
    TRAN_SUBKEY --> |No| NEXT7["Proceed to next branch"]
    SET_TRAN_ST --> NEXT7
    SET_TRAN_VAL --> NEXT7
    KEY_TRAN_DIV --> |No| NEXT7

    NEXT7 --> KEY_MSKM_NO{"IF key equals 申込番号"}
    KEY_MSKM_NO --> |Yes| MSKM_SUBKEY{"subkey equals 'value' or 'state'?"}
    MSKM_SUBKEY --> |value| SET_MSKM_VAL["setMskm_no_value(in_value)"]
    MSKM_SUBKEY --> |state| SET_MSKM_ST["setMskm_no_state(in_value)"]
    MSKM_SUBKEY --> |No| NEXT8["Proceed to next branch"]
    SET_MSKM_ST --> NEXT8
    SET_MSKM_VAL --> NEXT8
    KEY_MSKM_NO --> |No| NEXT8

    NEXT8 --> KEY_MSKM_DTL{"IF key equals 申込明細番号"}
    KEY_MSKM_DTL --> |Yes| MSKM_DTL_SUBKEY{"subkey equals 'value' or 'state'?"}
    MSKM_DTL_SUBKEY --> |value| SET_MSKM_DTL_VAL["setMskm_dtl_no_value(in_value)"]
    MSKM_DTL_SUBKEY --> |state| SET_MSKM_DTL_ST["setMskm_dtl_no_state(in_value)"]
    MSKM_DTL_SUBKEY --> |No| END_NODE(["Return / Next"])
    SET_MSKM_DTL_ST --> END_NODE
    SET_MSKM_DTL_VAL --> END_NODE
    KEY_MSKM_DTL --> |No| END_NODE

    IDX_NULL_END --> END_NODE
    IDX_NULL_END_OP --> END_NODE
```

**Branch summary:**

| Branch | Condition | Business Meaning |
|--------|-----------|-----------------|
| Null guard | `key == null || subkey == null` | Reject empty keys — defensive early exit |
| Branch 1 | `key.equals("システムID")` | System ID — core identifier for the system session |
| Branch 2 | `key.equals("サービス契約番号")` | Service contract number — primary contract identifier |
| Branch 3 | `key.equals("異動区分")` | Move classification — type of contract change (add/remove/modify) |
| Branch 4 | `key.equals("異動理由コード")` | Move reason code — indexed list of reason codes for contract changes |
| Branch 5 | `key.equals("異動理由メモ")` | Move reason memo — free-text justification for the change |
| Branch 6 | `key.equals("オプションサービス契約番号")` | Optional service contract number — indexed list of optional add-on services |
| Branch 7 | `key.equals("処理区分")` | Processing classification — distinguishes screen types (e.g., display vs. input) |
| Branch 8 | `key.equals("申込番号")` | Application number — unique ID for the change application |
| Branch 9 | `key.equals("申込明細番号")` | Application detail number — line-level ID within an application |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | The **business field identifier** that determines which bean property the value should be routed to. Takes values like "システムID" (system ID), "サービス契約番号" (service contract number), "異動区分" (move classification), "異動理由コード" (move reason code — may include index suffix like "異動理由コード/0"), "異動理由メモ" (move reason memo), "オプションサービス契約番号" (optional service contract number — may include index suffix like "オプションサービス契約番号/0"), "処理区分" (processing classification), "申込番号" (application number), or "申込明細番号" (application detail number). Determines the routing branch taken. |
| 2 | `subkey` | `String` | The **property type sub-identifier** within the key. Typically takes values `"value"` (to set the data field) or `"state"` (to set the field's UI state — e.g., read-only, visible, mandatory). Comparison is case-insensitive (`equalsIgnoreCase`). |
| 3 | `in_value` | `Object` | The **business data value** to store. For scalar fields, cast to `String` and assigned to the appropriate `*_value` or `*_state` field. For list fields (異動理由コード, オプションサービス契約番号), passed to the delegated `storeModelData` on the individual list item bean. |
| 4 | `isSetAsString` | `boolean` | Flag indicating whether to set a `Long`-type field's value property as a `String`. The Javadoc states: "Long型項目ValueプロパティへString型値の設定を行う場合true" (true when setting a String-type value to a Long-type item's Value property). Note: this parameter is **declared but not used** in the current method body — it is passed to the delegated `storeModelData` calls on list items (X33VDataTypeStringBean, X33VDataTypeLongBean, X33VDataTypeBooleanBean). |

**Instance fields read by this method:**

| Field | Type | How It Is Read |
|-------|------|---------------|
| `ido_rsn_cd_list` | `X33VDataTypeList` | Accessed for bounds checking and item delegation in the 異動理由コード branch (line 533) |
| `op_svc_kei_no_list` | `X33VDataTypeList` | Accessed for bounds checking and item delegation in the オプションサービス契約番号 branch (line 573) |

## 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` — utility string slicing |
| - | `JKKAdEdit.substring` | JKKAdEdit | - | Calls `substring` in `JKKAdEdit` — utility string slicing |
| - | `JKKTelnoInfoAddMapperCC.substring` | JKKTelnoInfoAddMapperCC | - | Calls `substring` in `JKKTelnoInfoAddMapperCC` — utility string slicing |
| - | `JDKejbStringEdit.substring` | JDKejbStringEdit | - | Calls `substring` in `JDKejbStringEdit` — utility string slicing |
| - | `KKW00844SF01DBean.setIdo_div_state` | KKW00844SF01DBean | - | Calls `setIdo_div_state` in `KKW00844SF01DBean` — sets UI state of move classification |
| - | `KKW00844SF01DBean.setIdo_div_value` | KKW00844SF01DBean | - | Calls `setIdo_div_value` in `KKW00844SF01DBean` — sets value of move classification |
| - | `KKW00844SF01DBean.setIdo_rsn_memo_state` | KKW00844SF01DBean | - | Calls `setIdo_rsn_memo_state` in `KKW00844SF01DBean` — sets UI state of move reason memo |
| - | `KKW00844SF01DBean.setIdo_rsn_memo_value` | KKW00844SF01DBean | - | Calls `setIdo_rsn_memo_value` in `KKW00844SF01DBean` — sets value of move reason memo |
| - | `KKW00844SF01DBean.setMskm_dtl_no_state` | KKW00844SF01DBean | - | Calls `setMskm_dtl_no_state` in `KKW00844SF01DBean` — sets UI state of application detail number |
| - | `KKW00844SF01DBean.setMskm_dtl_no_value` | KKW00844SF01DBean | - | Calls `setMskm_dtl_no_value` in `KKW00844SF01DBean` — sets value of application detail number |
| - | `KKW00844SF01DBean.setMskm_no_state` | KKW00844SF01DBean | - | Calls `setMskm_no_state` in `KKW00844SF01DBean` — sets UI state of application number |
| - | `KKW00844SF01DBean.setMskm_no_value` | KKW00844SF01DBean | - | Calls `setMskm_no_value` in `KKW00844SF01DBean` — sets value of application number |
| - | `KKW00844SF01DBean.setSvc_kei_no_state` | KKW00844SF01DBean | - | Calls `setSvc_kei_no_state` in `KKW00844SF01DBean` — sets UI state of service contract number |
| - | `KKW00844SF01DBean.setSvc_kei_no_value` | KKW00844SF01DBean | - | Calls `setSvc_kei_no_value` in `KKW00844SF01DBean` — sets value of service contract number |
| - | `KKW00844SF01DBean.setSysid_state` | KKW00844SF01DBean | - | Calls `setSysid_state` in `KKW00844SF01DBean` — sets UI state of system ID |
| - | `KKW00844SF01DBean.setSysid_value` | KKW00844SF01DBean | - | Calls `setSysid_value` in `KKW00844SF01DBean` — sets value of system ID |
| - | `KKW00844SF01DBean.setTran_div_state` | KKW00844SF01DBean | - | Calls `setTran_div_state` in `KKW00844SF01DBean` — sets UI state of processing classification |
| - | `KKW00844SF01DBean.setTran_div_value` | KKW00844SF01DBean | - | Calls `setTran_div_value` in `KKW00844SF01DBean` — sets value of processing classification |
| - | `KKW00844SF01DBean.storeModelData` | KKW00844SF01DBean | - | Recursively calls `storeModelData` on individual list item beans (X33VDataTypeStringBean) for 異動理由コード and オプションサービス契約番号 |
| - | `JKKAdEdit.substring` | JKKAdEdit | - | Calls `substring` on String objects for index extraction in list-type field branches |
| - | `Integer.valueOf` | Java Core | - | Parses extracted key suffix as integer for list index lookup |
| - | `X33VDataTypeList.get` | X33V Framework | - | Retrieves an item from the list at the computed index |
| - | `X33VDataTypeList.size` | X33V Framework | - | Returns the current number of items in the list |

**Classification rationale:**

This method performs **pure in-memory data binding** — no database or service component calls. All operations are:
- **U (Update)**: setter calls that update bean property values (`setSysid_value`, `setSvc_kei_no_state`, etc.)
- **EXEC**: method invocations on local variables and parameters (substring, Integer.valueOf, list.get, list.size)
- **CALL**: recursive delegation to `storeModelData` on child `X33VDataTypeStringBean` items

No SC Codes, CBS identifiers, or database tables are involved.

## 5. Dependency Trace

No screen/batch entry points found within 8 hops. Direct callers found: 2 methods.
Terminal operations from this method: `setMskm_dtl_no_state` [-], `setMskm_dtl_no_value` [-], `setMskm_no_state` [-], `setMskm_no_value` [-], `setTran_div_state` [-], `setTran_div_value` [-], `storeModelData` [-], `storeModelData` [-], `storeModelData` [-], `substring` [-], `substring` [-], `substring` [-], `substring` [-], `setIdo_rsn_memo_state` [-], `setIdo_rsn_memo_value` [-], `storeModelData` [-], `storeModelData` [-], `storeModelData` [-], `substring` [-], `substring` [-]

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | `KKW00844SF01DBean` (self-call via list delegation) | `KKW00844SF01DBean.storeModelData` → `X33VDataTypeStringBean.storeModelData` | `storeModelData [U] in-memory bean field` |

**Notes:** The pre-computed callers list shows the method only calls itself (recursive delegation to list item beans). No external screen/batch entry points were identified within 8 hops. The method is called by the X33V framework's data-binding mechanism during screen initialization and form submission. The X33V framework calls this method via its `loadModel` / `storeModel` lifecycle when populating the bean from the view or saving it back.

## 6. Per-Branch Detail Blocks

**Block 1** — [IF] `(key == null || subkey == null)` (L474)

> Null guard: early exit if either the key or subkey parameter is null. Prevents NullPointerException on subsequent string operations.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return;` // key,subkeyがnullの場合、処理を中止 — stop processing when key and subkey are null |

**Block 2** — [EXEC] `int separaterPoint = key.indexOf("/")` (L476)

> Locate the position of the "/" separator character in the key. Used later for extracting index from list-type keys like "異動理由コード/0".

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

**Block 3** — [IF] `key.equals("システムID")` `[システムID="SYSID equivalent (kanji)]` (L479)

> Branch for the system ID field. Sets either the `sysid_value` or `sysid_state` property based on the subkey.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` // checks if subkey is 'value' |
| 2 | EXEC | `setSysid_value((String)in_value)` // sets the system ID value — システムIDの値を設定 |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` // checks if subkey is 'state' |
| 4 | EXEC | `setSysid_state((String)in_value)` // subkeyが"state"の場合、ステータスを返す — returns the state when subkey is 'state' |

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

> Branch for the service contract number field. Sets either `svc_kei_no_value` or `svc_kei_no_state`.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | EXEC | `setSvc_kei_no_value((String)in_value)` // sets the service contract number value |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` |
| 4 | EXEC | `setSvc_kei_no_state((String)in_value)` // subkeyが"state"の場合、ステータスを返す — returns the state when subkey is 'state' |

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

> Branch for the move classification field. Sets either `ido_div_value` or `ido_div_state`. The move classification indicates the type of contract change (add/remove/modify).

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | EXEC | `setIdo_div_value((String)in_value)` // sets the move classification value |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` |
| 4 | EXEC | `setIdo_div_state((String)in_value)` // subkeyが"state"の場合、ステータスを返す — returns the state when subkey is 'state' |

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

> Branch for the move reason code — a dynamic list field. The key may contain an index suffix (e.g., "異動理由コード/0"). Extracts the index, validates it against the list size, and delegates to the individual list item bean's `storeModelData`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `key = key.substring(separaterPoint + 1)` // keyの次の要素を取得 — extracts the part after the first "/" (e.g., "0" from "異動理由コード/0") |
| 2 | SET | `Integer tmpIndexInt = null` // リスト中のインデックスを保持 — holds the index into the list |
| 3 | TRY | `tmpIndexInt = Integer.valueOf(key)` // attempts to parse the extracted suffix as an integer |
| 4 | CATCH | `NumberFormatException e` → `tmpIndexInt = null` // インデックス値が数値文字列でない場合はnullを返す — returns null if index value is not a numeric string |
| 5 | IF | `tmpIndexInt != null` `[インデックスが数値文字列]` — index value is a numeric string |
| 5.1 | SET | `int tmpIndex = tmpIndexInt.intValue()` // converts Integer to int |
| 5.2 | IF | `tmpIndex >= 0 && tmpIndex < ido_rsn_cd_list.size()` `[インデックスがリスト個数-1以下]` — index is within valid list bounds |
| 5.2.1 | CAST | `X33VDataTypeStringBean item = (X33VDataTypeStringBean)ido_rsn_cd_list.get(tmpIndex)` // キャスト部分は、項目定義型に合わせてX33VDataTypeStringBean, X33VDataTypeLongBean, X33VDataTypeBooleanBeanのいずれかを指定 — cast to the appropriate data type bean based on the field definition type |
| 5.2.2 | CALL | `item.storeModelData(subkey, in_value)` // recursively delegates to the list item bean |
| 5.3 | ELSE | (implicit) — index out of bounds, skip |
| 6 | ELSE | `tmpIndexInt == null` — index was not parseable as integer, skip |

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

> Branch for the move reason memo — free-text justification for the contract change. Sets either `ido_rsn_memo_value` or `ido_rsn_memo_state`.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | EXEC | `setIdo_rsn_memo_value((String)in_value)` // sets the move reason memo value |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` |
| 4 | EXEC | `setIdo_rsn_memo_state((String)in_value)` // subkeyが"state"の場合、ステータスを返す — returns the state when subkey is 'state' |

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

> Branch for optional service contract numbers — a dynamic list field similar to 異動理由コード. The key may contain an index suffix (e.g., "オプションサービス契約番号/0"). Extracts the index, validates bounds, and delegates to individual list item beans.

| # | Type | Code |
|---|------|------|
| 1 | SET | `key = key.substring(separaterPoint + 1)` // keyの次の要素を取得 — extracts the part after the first "/" |
| 2 | SET | `Integer tmpIndexInt = null` // リスト中のインデックスを保持 — holds the index into the list |
| 3 | TRY | `tmpIndexInt = Integer.valueOf(key)` // attempts to parse the extracted suffix as an integer |
| 4 | CATCH | `NumberFormatException e` → `tmpIndexInt = null` // インデックス値が数値文字列でない場合はnullを返す — returns null if index is not numeric |
| 5 | IF | `tmpIndexInt != null` `[インデックスが数値文字列]` |
| 5.1 | SET | `int tmpIndex = tmpIndexInt.intValue()` |
| 5.2 | IF | `tmpIndex >= 0 && tmpIndex < op_svc_kei_no_list.size()` `[インデックスがリスト個数-1以下]` |
| 5.2.1 | CAST | `X33VDataTypeStringBean item = (X33VDataTypeStringBean)op_svc_kei_no_list.get(tmpIndex)` // キャスト部分は、項目定義型に合わせてX33VDataTypeStringBean, X33VDataTypeLongBean, X33VDataTypeBooleanBeanのいずれかを指定 |
| 5.2.2 | CALL | `item.storeModelData(subkey, in_value)` // recursively delegates to the list item bean |
| 5.3 | ELSE | (implicit) — index out of bounds, skip |
| 6 | ELSE | `tmpIndexInt == null` — index was not parseable, skip |

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

> Branch for the processing classification. Determines the type of processing (e.g., display, input, confirmation). Sets either `tran_div_value` or `tran_div_state`.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | EXEC | `setTran_div_value((String)in_value)` // sets the processing classification value |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` |
| 4 | EXEC | `setTran_div_state((String)in_value)` // subkeyが"state"の場合、ステータスを返す — returns the state when subkey is 'state' |

**Block 10** — [ELSE-IF] `key.equals("申込番号")` `[申込番号="Application Number"]` (L593)

> Branch for the application number — the unique identifier for a service contract change application. Sets either `mskm_no_value` or `mskm_no_state`.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | EXEC | `setMskm_no_value((String)in_value)` // sets the application number value |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` |
| 4 | EXEC | `setMskm_no_state((String)in_value)` // subkeyが"state"の場合、ステータスを返す — returns the state when subkey is 'state' |

**Block 11** — [ELSE-IF] `key.equals("申込明細番号")` `[申込明細番号="Application Detail Number"]` (L605)

> Branch for the application detail number — line-level identifier within an application. Sets either `mskm_dtl_no_value` or `mskm_dtl_no_state`. This is the last branch in the method; after this the method returns.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | EXEC | `setMskm_dtl_no_value((String)in_value)` // sets the application detail number value |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` |
| 4 | EXEC | `setMskm_dtl_no_state((String)in_value)` // subkeyが"state"の場合、ステータスを返す — returns the state when subkey is 'state' |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `システムID` (sysid) | Field | System ID — core identifier for the system session, used for system-level tracking |
| `サービス契約番号` (svc_kei_no) | Field | Service Contract Number — primary identifier for a telecom service contract line |
| `異動区分` (ido_div) | Field | Move Classification — indicates the type of contract change operation (e.g., 追加=add, 削除=delete, 変更=modify). "異動" in telecom context means contract modification/transfer |
| `異動理由コード` (ido_rsn_cd) | Field | Move Reason Code — a coded reason for the contract change, stored as a dynamic list of reason code items |
| `異動理由メモ` (ido_rsn_memo) | Field | Move Reason Memo — free-text memo field providing additional justification for the contract change |
| `オプションサービス契約番号` (op_svc_kei_no) | Field | Optional Service Contract Number — identifier for add-on/optional services attached to the main contract, stored as a dynamic list |
| `処理区分` (tran_div) | Field | Processing Classification — distinguishes the type of processing (e.g., 表示=display, 入力=input, 確認=confirmation) for screen routing |
| `申込番号` (mskm_no) | Field | Application Number — unique identifier for a service contract change application (申込=application/subscription request) |
| `申込明細番号` (mskm_dtl_no) | Field | Application Detail Number — line-level identifier within an application for tracking individual items |
| `value` | Subkey | Property type — indicates the data value of a field |
| `state` | Subkey | Property type — indicates the UI state of a field (read-only, visible, mandatory, etc.) |
| X33V | Framework | Fujitsu Futurity X33V — the web application framework providing the data bean infrastructure, including `X33VDataTypeBeanInterface`, `X33VDataTypeList`, `X33VDataTypeStringBean`, `X33VDataTypeLongBean`, `X33VDataTypeBooleanBean` |
| DBean | Pattern | Data Bean — presentation-layer bean for data binding between the view (JSP/Facelets) and the business layer |
| 異動 (Idou) | Japanese term | Contract modification/change — in telecom business, refers to any modification of a service contract including additions, deletions, or changes to service items |
| 申込 (Shiyou) | Japanese term | Application/subscription — a request to add or modify a telecom service |
| オプション (Option) | Japanese term | Optional service — add-on services (e.g., security, extra features) bundled with a primary telecom service |
| 処理区分 (Shori Kubun) | Japanese term | Processing classification — categorizes the screen's processing type for routing and display logic |
| isSetAsString | Parameter | Flag for type conversion — when true, allows setting a String value to a Long-type field's value property during data binding |
