# Business Logic — KKW00816SFBean.storeModelData() [497 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKW00816SF.KKW00816SFBean` |
| Layer | Controller / View Bean (Web presentation layer) |
| Module | `KKW00816SF` (Package: `eo.web.webview.KKW00816SF`) |

## 1. Role

### KKW00816SFBean.storeModelData()

This method serves as a **centralized model-data binding dispatcher** for the KKW00816SF (Service Contract Details screen). It receives a key string that encodes a hierarchical field path (e.g., "Customer Contract History List/0/principal name") along with a value and optional metadata subkey ("value", "state", "enable"), then routes the data to the appropriate bean field setter.

The method handles **two distinct data categories**. First, it manages **list-type fields** — specifically "Customer Contract History List" and "Option Service Contract List" — by parsing an embedded array index from the key, locating the corresponding child bean from the list collection, and recursively delegating the `storeModelData` call to that child bean. This implements a **tree-dispatch pattern** where screen-level data is pushed into nested view-model structures. Second, it handles **scalar (single-value) fields** — over 30 distinct telecom business fields — by matching the key element against Japanese field name strings and invoking the corresponding setter method (`setValue`, `setState`, or `setEnabled`).

The method also supports a **common information routing branch**: if the key starts with `"//"`, the method delegates entirely to `super.storeCommonInfoData()`, handling shared/common data that is not screen-specific.

Additionally, it implements **type-aware value coercion** for the "Session Count" field (`session_cnt`), which is stored internally as a String but may receive a Long from the calling layer. When `isSetAsString` is true and the input is already a String, it passes through directly; otherwise it coerces the Long to String. This is the only field in the method that performs type conversion, highlighting its special role as a numeric counter in an otherwise string-typed bean model.

The method's role in the larger system is that of a **model-injection point**. Screen controllers and form-backing classes call this method (often via data-binding frameworks or manual setter orchestration) to populate the bean with data retrieved from user input, database queries, or service-layer responses. It is the primary mechanism for pushing data into the `KKW00816SFBean` view model, making it critical for screen data initialization and update operations.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["storeModelData key, subkey, in_value, isSetAsString"])
    CHECK_KEY_NULL{key == null?}
    EARLY_RETURN(["return - no processing"])
    CHECK_SUBKEY_NULL{subkey == null?}
    SET_SUBKEY_EMPTY["subkey = empty string"]
    FIND_SEPARATOR["separaterPoint = key indexOf double slash"]
    CHECK_SEPARATOR_EQ0{separaterPoint equals 0?}
    CALL_SUPER["super storeCommonInfoData"]
    FIND_SLASH["separaterPoint = key indexOf slash"]
    CHECK_SLASH_GT0{separaterPoint greater than 0?}
    EXTRACT_KEY_ELEMENT["keyElement = substring 0 to separaterPoint"]
    EXTRACT_KEY_ALL["keyElement = full key"]
    CHECK_KEY_ELEMENT["Process based on keyElement"]
    EARLY_RETURN --> END_NODE(["End"])
    SET_SUBKEY_EMPTY --> FIND_SEPARATOR
    EXTRACT_KEY_ELEMENT --> CHECK_KEY_ELEMENT
    EXTRACT_KEY_ALL --> CHECK_KEY_ELEMENT
    START --> CHECK_KEY_NULL
    CHECK_KEY_NULL --> true --> EARLY_RETURN
    CHECK_KEY_NULL --> false --> CHECK_SUBKEY_NULL
    CHECK_SUBKEY_NULL --> true --> SET_SUBKEY_EMPTY
    CHECK_SUBKEY_NULL --> false --> FIND_SEPARATOR
    CHECK_SEPARATOR_EQ0 --> true --> CALL_SUPER
    CHECK_SEPARATOR_EQ0 --> false --> FIND_SLASH
    CALL_SUPER --> END_NODE
    CHECK_SLASH_GT0 --> true --> EXTRACT_KEY_ELEMENT
    CHECK_SLASH_GT0 --> false --> EXTRACT_KEY_ALL
```

After the keyElement is resolved, the method enters a long chain of `else if` branches — one per business field. Each branch performs one of three actions based on the `subkey` value:

**List-type dispatch (2 branches):** For "Customer Contract History List" and "Option Service Contract List", the key contains a path like "ListName/index/fieldName". The method extracts the index, validates it against the list size, casts the child bean to `X33VDataTypeBeanInterface`, and recursively calls `storeModelData` on the child.

**Scalar field setters (29+ branches):** For each single-value field, the subkey determines the setter:
- `subkey = "value"` → calls the `*Value` setter (e.g., `setMskm_sbt_cd_value`)
- `subkey = "state"` → calls the `*State` setter (e.g., `setMskm_sbt_cd_state`)
- `subkey = "enable"` → calls the `*Enabled` setter (e.g., `setSession_cnt_enabled`) (only for session_cnt and date fields)

**Type conversion (special case):** For "Session Count" (`session_cnt`), when setting the value, the method checks if `in_value` is null, already a String, or needs Long-to-String coercion.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | A hierarchical field path string that encodes the target field within the screen's data model. Format: `"FieldName"` for scalar fields, `"ListName/index/FieldName"` for list items, or `"//..."` for common/shared information. Examples: `"Order Content Code"`, `"Customer Contract History List/3/principal name"`, `"//common_info_key"`. The key determines which field setter is invoked. |
| 2 | `subkey` | `String` | A metadata qualifier that selects which property of the target field to update. Typically one of: `"value"` (the actual data value), `"state"` (the field's editability/validation state from the server), or `"enable"` (UI enable/disable flag). If null, it is coerced to an empty string. |
| 3 | `in_value` | `Object` | The data value to assign to the target field. Typically a `String` for most fields, but for the "Session Count" field it may be a `Long` (requiring type coercion via `toString()`). For null, the setter receives null. |
| 4 | `isSetAsString` | `boolean` | A flag controlling type coercion behavior. When true and `in_value` is already a String, the value passes through directly. When false or the input is not a String, numeric types (e.g., `Long`) are converted via `toString()`. Only affects the "Session Count" field's value setter. |

**Instance fields read by this method:**
| Field | Type | Usage |
|-------|------|-------|
| `cust_kei_hktgi_list_list` | `List` | Customer Contract History list — used for list-type data dispatch |
| `op_svc_kei_list_list` | `List` | Option Service Contract list — used for list-type data dispatch |

## 4. CRUD Operations / Called Services

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

All method calls within `storeModelData` are **U (Update)** operations — they are setter methods that update the bean's internal state. No direct database or service-component calls are made. The method is a pure view-model injection point.

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| U | `JKKAdEditCC.substring` | JKKAdEditCC | - | Calls `substring` in `JKKAdEditCC` for string manipulation |
| U | `JKKAdEdit.substring` | JKKAdEdit | - | Calls `substring` in `JKKAdEdit` for string manipulation |
| U | `JKKTelnoInfoAddMapperCC.substring` | JKKTelnoInfoAddMapperCC | - | Calls `substring` in `JKKTelnoInfoAddMapperCC` for string manipulation |
| U | `JDKejbStringEdit.substring` | JDKejbStringEdit | - | Calls `substring` in `JDKejbStringEdit` for string manipulation |
| U | `KKW00816SFBean.setCust_stat_state` | KKW00816SFBean | - | Updates customer status field state |
| U | `KKW00816SFBean.setCust_stat_value` | KKW00816SFBean | - | Updates customer status field value |
| U | `KKW00816SFBean.setIdo_dtm_state` | KKW00816SFBean | - | Updates movement date/time field state |
| U | `KKW00816SFBean.setIdo_dtm_value` | KKW00816SFBean | - | Updates movement date/time field value |
| U | `KKW00816SFBean.setIdo_dtm_state` | KKW00816SFBean | - | Updates movement date/time state property |
| U | `KKW00816SFBean.setIdo_dtm_value` | KKW00816SFBean | - | Updates movement date/time value property |
| U | `KKW00816SFBean.setJssi_op_svc_kei_stat_state` | KKW00816SFBean | - | Updates implemented option service contract status state |
| U | `KKW00816SFBean.setJssi_op_svc_kei_stat_value` | KKW00816SFBean | - | Updates implemented option service contract status value |
| U | `KKW00816SFBean.setKk0081_gene_add_dtm_state` | KKW00816SFBean | - | Updates generation management date/time (service contract) state |
| U | `KKW00816SFBean.setKk0081_gene_add_dtm_value` | KKW00816SFBean | - | Updates generation management date/time (service contract) value |
| U | `KKW00816SFBean.setKk0161_gene_add_dtm_state` | KKW00816SFBean | - | Updates generation management date/time (service contract breakdown) state |
| U | `KKW00816SFBean.setKk0161_gene_add_dtm_value` | KKW00816SFBean | - | Updates generation management date/time (service contract breakdown) value |
| U | `KKW00816SFBean.setLast_upd_dtm_state` | KKW00816SFBean | - | Updates last update date/time state |
| U | `KKW00816SFBean.setLast_upd_dtm_value` | KKW00816SFBean | - | Updates last update date/time value |
| U | `KKW00816SFBean.setMltise_ninsho_id_state` | KKW00816SFBean | - | Updates multi-session authentication ID state |
| U | `KKW00816SFBean.setMltise_ninsho_id_value` | KKW00816SFBean | - | Updates multi-session authentication ID value |
| U | `KKW00816SFBean.setMskm_sbt_cd_state` | KKW00816SFBean | - | Updates application type code state |
| U | `KKW00816SFBean.setMskm_sbt_cd_value` | KKW00816SFBean | - | Updates application type code value |
| U | `KKW00816SFBean.setOdr_hakko_joken_cd_state` | KKW00816SFBean | - | Updates order issue condition code state |
| U | `KKW00816SFBean.setOdr_hakko_joken_cd_value` | KKW00816SFBean | - | Updates order issue condition code value |
| U | `KKW00816SFBean.setOdr_naiyo_cd_state` | KKW00816SFBean | - | Updates order content code state |
| U | `KKW00816SFBean.setOdr_naiyo_cd_value` | KKW00816SFBean | - | Updates order content code value |
| U | `KKW00816SFBean.setOp_sod_add_jssi_state` | KKW00816SFBean | - | Updates option SOD registration implementation state |
| U | `KKW00816SFBean.setOp_sod_add_jssi_value` | KKW00816SFBean | - | Updates option SOD registration implementation value |
| U | `KKW00816SFBean.setOp_svc_cd_state` | KKW00816SFBean | - | Updates option service code state |
| U | `KKW00816SFBean.setOp_svc_cd_value` | KKW00816SFBean | - | Updates option service code value |
| U | `KKW00816SFBean.setOrder_sbt_cd_state` | KKW00816SFBean | - | Updates order type code state |
| U | `KKW00816SFBean.setOrder_sbt_cd_value` | KKW00816SFBean | - | Updates order type code value |
| U | `KKW00816SFBean.setSvc_kei_ucwk_stat_state` | KKW00816SFBean | - | Updates service contract breakdown status state |
| U | `KKW00816SFBean.setSvc_kei_ucwk_stat_value` | KKW00816SFBean | - | Updates service contract breakdown status value |
| U | `KKW00816SFBean.setSvc_kei_ucwk_no_state` | KKW00816SFBean | - | Updates service contract breakdown number state |
| U | `KKW00816SFBean.setSvc_kei_ucwk_no_value` | KKW00816SFBean | - | Updates service contract breakdown number value |
| U | `KKW00816SFBean.setYokyu_sbt_cd_state` | KKW00816SFBean | - | Updates request type code state |
| U | `KKW00816SFBean.setYokyu_sbt_cd_value` | KKW00816SFBean | - | Updates request type code value |

## 5. Dependency Trace

No screen/batch entry points found within 8 hops. Direct callers found: 2 methods.
Terminal operations from this method: `setSvc_kei_ucwk_stat_state`, `setSvc_kei_ucwk_stat_value`, `setIdo_dtm_state`, `setIdo_dtm_value`, `setLast_upd_dtm_state`, `setLast_upd_dtm_value`, `setKk0161_gene_add_dtm_state`, `setKk0161_gene_add_dtm_value`, `setSvc_kei_ucwk_no_state`, `setSvc_kei_ucwk_no_value`, `setKk0081_gene_add_dtm_state`, `setKk0081_gene_add_dtm_value`, `setOp_sod_add_jssi_state`, `setOp_sod_add_jssi_value`, `setOdr_naiyo_cd_state`, `setOdr_naiyo_cd_value`, `setOdr_hakko_joken_cd_state`, `setOdr_hakko_joken_cd_value`, `setYokyu_sbt_cd_state`, `setYokyu_sbt_cd_value`, plus additional setter methods listed in the pre-computed evidence.

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Screen:KKSV0004 (example) | Screen Controller -> KKW00816SFBean.storeModelData | setSvc_kei_ucwk_stat_state [-], setIdo_dtm_state [-], setLast_upd_dtm_state [-], setKk0161_gene_add_dtm_state [-], setSvc_kei_ucwk_no_state [-], setKk0081_gene_add_dtm_state [-], setOp_sod_add_jssi_state [-], setOdr_naiyo_cd_state [-], setOdr_hakko_joken_cd_state [-], setYokyu_sbt_cd_state [-] |
| 2 | KKW00816SFBean (self-call) | KKW00816SFBean.storeModelData (recursive, child bean dispatch) | setSvc_kei_ucwk_stat_state [-], setIdo_dtm_state [-], setLast_upd_dtm_state [-], setKk0161_gene_add_dtm_state [-], setSvc_kei_ucwk_no_state [-], setKk0081_gene_add_dtm_state [-], setOp_sod_add_jssi_state [-], setOdr_naiyo_cd_state [-], setOdr_hakko_joken_cd_state [-], setYokyu_sbt_cd_state [-] |

**Note:** This method is called from the screen layer to inject data into the view bean. All terminal operations are setter calls (U — Update) that modify the bean's internal state. No SC codes or database tables are directly accessed; data originates from either the calling screen layer or is passed through from service-layer calls.

## 6. Per-Branch Detail Blocks

**Block 1** — [IF] `key == null` (L1761)

> If the key is null, the method returns immediately without any processing. This is a guard clause to prevent null pointer exceptions on downstream operations.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return;` // Early exit when key is null — no processing performed |

---

**Block 2** — [ELSE-IF] `subkey == null` (L1765)

> When subkey is null, it is coerced to an empty string to prevent null reference errors in subsequent `equalsIgnoreCase` comparisons.

| # | Type | Code |
|---|------|------|
| 1 | SET | `subkey = new String("");` // Null subkey becomes empty string — ensures safe downstream equalsIgnoreCase comparisons |

---

**Block 3** — [ELSE → IF] `separaterPoint == 0` (common info branch, L1772)

> If the key starts with `"//"` (double slash), this indicates the data pertains to common information shared across screens. The method delegates entirely to the parent class's `storeCommonInfoData` method.

| # | Type | Code |
|---|------|------|
| 1 | SET | `int separaterPoint = key.indexOf("//");` // Check if key is a common info specification |
| 2 | EXEC | `super.storeCommonInfoData(key, in_value, isSetAsString);` // Delegate to parent class for common data processing |

---

**Block 4** — [ELSE → IF] `separaterPoint > 0` (key routing, root-level slash check, L1778)

> When the key does not start with `"//"` and contains a slash separator, extract the first path element (the field name). If no slash exists, use the entire key as the field name.

| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = key.indexOf("/");` // Search for slash separator — assumes root-level path like "FieldName/0/FieldNameB" |
| 2 | IF | `separaterPoint > 0` → Extract first path element |
| 3 | ELSE | Use full key as `keyElement` |

**Block 4.1** — [IF] `separaterPoint > 0` — Extract key element (L1779)

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyElement = key.substring(0, separaterPoint);` // Extract the first element before the first slash |

**Block 4.2** — [ELSE] `separaterPoint <= 0` — Use full key (L1781)

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyElement = key;` // No slash found; use entire key as the field name |

---

### Block 5** — [ELSE-IF] `keyElement.equals("顧客契約履歴リスト")` (Customer Contract History List, L1786)

> Handles the "Customer Contract History List" — a list-type field where each item contains nested sub-fields. The method parses an array index from the key (format: "ListName/index/subFieldName"), validates the index, and recursively delegates to the child bean's `storeModelData` method.

| # | Type | Code |
|---|------|------|
| 1 | SET | `String keyRemain = key.substring(separaterPoint + 1);` // Extract remaining path after first slash — e.g., from "Customer Contract History List/0/principal name" extract "0/principal name" |
| 2 | SET | `separaterPoint = keyRemain.indexOf("/");` // Find the next slash separator |
| 3 | IF | `separaterPoint > 0` — Index and field name are properly specified |

**Block 5.1** — [IF] `separaterPoint > 0` within customer contract history list (L1790)

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyElement = keyRemain.substring(0, separaterPoint);` // Extract the index portion from "0/principal name" → "0" |
| 2 | SET | `Integer tmpIndexInt = null;` // Initialize index variable |
| 3 | TRY | Attempt to parse index as integer |

**Block 5.1.1** — [CATCH] `NumberFormatException` (L1796)

| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpIndexInt = null;` // Index is not a numeric string — will fall through to skip this branch |

**Block 5.1.2** — [IF] `tmpIndexInt != null` (L1799)

| # | Type | Code |
|---|------|------|
| 1 | SET | `int tmpIndex = tmpIndexInt.intValue();` // Convert Integer to primitive int |
| 2 | IF | `tmpIndex >= 0 && tmpIndex < cust_kei_hktgi_list_list.size()` — Index is within valid range |

**Block 5.1.2.1** — [IF] Index is valid (L1801)

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyElement = keyRemain.substring(separaterPoint + 1);` // Extract the sub-field name — e.g., "0/principal name" → "principal name" |
| 2 | CALL | `((X33VDataTypeBeanInterface)cust_kei_hktgi_list_list.get(tmpIndex)).storeModelData(keyElement, subkey, in_value, isSetAsString);` // Recursive dispatch to child bean — passes field name, subkey, value, and type flag |

---

### Block 6** — [ELSE-IF] `keyElement.equals("オプションサービス契約リスト")` (Option Service Contract List, L1816)

> Handles the "Option Service Contract List" — functionally identical to Block 5 but targets the `op_svc_kei_list_list` collection. Parses index from key path and recursively delegates to child bean.

| # | Type | Code |
|---|------|------|
| 1 | SET | `String keyRemain = key.substring(separaterPoint + 1);` // Extract remaining path after first slash |
| 2 | SET | `separaterPoint = keyRemain.indexOf("/");` // Find next slash separator |
| 3 | IF | `separaterPoint > 0` — Index and field name properly specified |

**Block 6.1** — [IF] `separaterPoint > 0` within option service contract list (L1820)

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyElement = keyRemain.substring(0, separaterPoint);` // Extract index portion |
| 2 | SET | `Integer tmpIndexInt = null;` // Initialize index variable |
| 3 | TRY | Attempt to parse index as integer |

**Block 6.1.1** — [CATCH] `NumberFormatException` (L1826)

| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpIndexInt = null;` // Non-numeric index — skip this branch |

**Block 6.1.2** — [IF] `tmpIndexInt != null` (L1829)

| # | Type | Code |
|---|------|------|
| 1 | SET | `int tmpIndex = tmpIndexInt.intValue();` // Convert to primitive |
| 2 | IF | `tmpIndex >= 0 && tmpIndex < op_svc_kei_list_list.size()` — Valid index range |

**Block 6.1.2.1** — [IF] Index is valid (L1831)

| # | Type | Code |
|---|------|------|
| 1 | SET | `keyElement = keyRemain.substring(separaterPoint + 1);` // Extract sub-field name |
| 2 | CALL | `((X33VDataTypeBeanInterface)op_svc_kei_list_list.get(tmpIndex)).storeModelData(keyElement, subkey, in_value, isSetAsString);` // Recursive dispatch to child bean |

---

### Block 7 — [ELSE-IF] `keyElement.equals("申種別コード")` (Application Type Code, mskm_sbt_cd) (L1841)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setMskm_sbt_cd_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setMskm_sbt_cd_state((String)in_value);` |

---

### Block 8 — [ELSE-IF] `keyElement.equals("オプションサービスコード")` (Option Service Code, op_svc_cd) (L1850)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setOp_svc_cd_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setOp_svc_cd_state((String)in_value);` |

---

### Block 9 — [ELSE-IF] `keyElement.equals("親契約識別コード")` (Parent Contract Identification Code, oya_kei_skbt_cd) (L1859)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setOya_kei_skbt_cd_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setOya_kei_skbt_cd_state((String)in_value);` |

---

### Block 10 — [ELSE-IF] `keyElement.equals("業務パラメータID（セッション上限数）")` (Work Parameter ID - Session Upper Limit, work_param_id_session_uppl) (L1868)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setWork_param_id_session_uppl_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setWork_param_id_session_uppl_state((String)in_value);` |

---

### Block 11 — [ELSE-IF] `keyElement.equals("業務パラメータ設定値（セッション上限数）")` (Work Parameter Setting Value - Session Upper Limit, work_param_sette_value_rsv_uppl_prd) (L1877)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setWork_param_sette_value_rsv_uppl_prd_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setWork_param_sette_value_rsv_uppl_prd_state((String)in_value);` |

---

### Block 12 — [ELSE-IF] `keyElement.equals("業務パラメータID（予約上限日数）")` (Work Parameter ID - Reservation Upper Limit Days, work_param_id_rsv_uppl_prd) (L1886)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setWork_param_id_rsv_uppl_prd_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setWork_param_id_rsv_uppl_prd_state((String)in_value);` |

---

### Block 13 — [ELSE-IF] `keyElement.equals("業務パラメータ設定値（予約上限日数）")` (Work Parameter Setting Value - Reservation Upper Limit Days, work_param_sette_rsv_uppl_prd) (L1895)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setWork_param_sette_rsv_uppl_prd_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setWork_param_sette_rsv_uppl_prd_state((String)in_value);` |

---

### Block 14 — [ELSE-IF] `keyElement.equals("事務手数料自動適用要否")` (Transaction Fee Automatic Application Necessity, rule0059_auto_aply) (L1904)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setRule0059_auto_aply_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setRule0059_auto_aply_state((String)in_value);` |

---

### Block 15 — [ELSE-IF] `keyElement.equals("料金コースコード")` (Fee Course Code, pcrs_cd) (L1913)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setPcrs_cd_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setPcrs_cd_state((String)in_value);` |

---

### Block 16 — [ELSE-IF] `keyElement.equals("料金プランコード")` (Fee Plan Code, pplan_cd) (L1922)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setPplan_cd_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setPplan_cd_state((String)in_value);` |

---

### Block 17 — [ELSE-IF] `keyElement.equals("料金プラン固定単価番号")` (Fee Plan Fixed Unit Price Number, pplan_kotei_tanka_no) (L1931)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setPplan_kotei_tanka_no_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setPplan_kotei_tanka_no_state((String)in_value);` |

---

### Block 18 — [ELSE-IF] `keyElement.equals("初期マルチセッション認証IDパスワード")` (Initial Multi-Session Authentication ID Password, shk_mltise_ninsho_id_pwd) (L1940)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setShk_mltise_ninsho_id_pwd_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setShk_mltise_ninsho_id_pwd_state((String)in_value);` |

---

### Block 19 — [ELSE-IF] `keyElement.equals("マルチセッション認証ID")` (Multi-Session Authentication ID, mltise_ninsho_id) (L1949)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setMltise_ninsho_id_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setMltise_ninsho_id_state((String)in_value);` |

---

### Block 20 — [ELSE-IF] `keyElement.equals("セッション数")` (Session Count, session_cnt) (L1958)

> Special case: This is a numeric field stored as String. Implements type coercion for Long-to-String conversion. Also supports the `"enable"` subkey in addition to `"value"` and `"state"`.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` — Handle value assignment with type conversion |

**Block 20.1** — [IF] `subkey.equalsIgnoreCase("value")` within session count (L1959)

| # | Type | Code |
|---|------|------|
| 1 | IF | `in_value == null` → `setSession_cnt_value(null);` // Null input → set null |
| 2 | ELSE-IF | `isSetAsString == true && in_value instanceof String` → `setSession_cnt_value((String)in_value);` // Already a String — pass through directly |
| 3 | ELSE | `setSession_cnt_value(((Long)in_value).toString());` // Coerce Long to String |

**Block 20.2** — [ELSE-IF] `subkey.equalsIgnoreCase("enable")` within session count (L1968)

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `setSession_cnt_enabled((Boolean)in_value);` // Set UI enable/disable flag |

**Block 20.3** — [ELSE-IF] `subkey.equalsIgnoreCase("state")` within session count (L1970)

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `setSession_cnt_state((String)in_value);` // Set field state |

---

### Block 21 — [ELSE-IF] `keyElement.equals("利用開始日（年）")` (Usage Start Date - Year, use_staymd_year) (L1975)

> Supports `"value"`, `"enable"`, and `"state"` subkeys. Date components may be UI-enabled/disabled independently.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setUse_staymd_year_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` → `setUse_staymd_year_enabled((Boolean)in_value);` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setUse_staymd_year_state((String)in_value);` |

---

### Block 22 — [ELSE-IF] `keyElement.equals("利用開始日（月）")` (Usage Start Date - Month, use_staymd_mon) (L1984)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setUse_staymd_mon_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` → `setUse_staymd_mon_enabled((Boolean)in_value);` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setUse_staymd_mon_state((String)in_value);` |

---

### Block 23 — [ELSE-IF] `keyElement.equals("利用開始日（日）")` (Usage Start Date - Day, use_staymd_day) (L1993)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setUse_staymd_day_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` → `setUse_staymd_day_enabled((Boolean)in_value);` |
| 3 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setUse_staymd_day_state((String)in_value);` |

---

### Block 24 — [ELSE-IF] `keyElement.equals("利用開始日")` (Usage Start Date, use_staymd) (L2002)

> The composite usage start date field (without year/month/day component specifiers). Only supports `"value"` and `"state"` subkeys (no `"enable"`).

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setUse_staymd_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setUse_staymd_state((String)in_value);` |

---

### Block 25 — [ELSE-IF] `keyElement.equals("サービス課金開始年月日")` (Service Charge Start Date, svc_chrg_staymd) (L2011)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setSvc_chrg_staymd_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setSvc_chrg_staymd_state((String)in_value);` |

---

### Block 26 — [ELSE-IF] `keyElement.equals("運用年月日")` (Operation Date, unyo_ymd) (L2020)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setUnyo_ymd_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setUnyo_ymd_state((String)in_value);` |

---

### Block 27 — [ELSE-IF] `keyElement.equals("運用年月日時分秒")` (Operation Date and Time, unyo_dtm) (L2029)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setUnyo_dtm_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setUnyo_dtm_state((String)in_value);` |

---

### Block 28 — [ELSE-IF] `keyElement.equals("実施オプションサービス契約ステータス")` (Implemented Option Service Contract Status, jssi_op_svc_kei_stat) (L2038)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setJssi_op_svc_kei_stat_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setJssi_op_svc_kei_stat_state((String)in_value);` |

---

### Block 29 — [ELSE-IF] `keyElement.equals("サービス契約ステータス")` (Service Contract Status, svc_kei_stat) (L2047)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setSvc_kei_stat_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setSvc_kei_stat_state((String)in_value);` |

---

### Block 30 — [ELSE-IF] `keyElement.equals("お客様ステータス")` (Customer Status, cust_stat) (L2056)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setCust_stat_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setCust_stat_state((String)in_value);` |

---

### Block 31 — [ELSE-IF] `keyElement.equals("請求契約番号")` (Billing Contract Number, seiky_kei_no) (L2065)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setSeiky_kei_no_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setSeiky_kei_no_state((String)in_value);` |

---

### Block 32 — [ELSE-IF] `keyElement.equals("進捗ステータス")` (Progress Status, prg_stat) (L2074)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setPrg_stat_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setPrg_stat_state((String)in_value);` |

---

### Block 33 — [ELSE-IF] `keyElement.equals("進捗特記事項1")` (Progress Special Item 1, prg_tkjk_1) (L2083)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setPrg_tkjk_1_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setPrg_tkjk_1_state((String)in_value);` |

---

### Block 34 — [ELSE-IF] `keyElement.equals("オーダ種別コード")` (Order Type Code, order_sbt_cd) (L2092)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setOrder_sbt_cd_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setOrder_sbt_cd_state((String)in_value);` |

---

### Block 35 — [ELSE-IF] `keyElement.equals("サービスオーダコード")` (Service Order Code, svc_order_cd) (L2101)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setSvc_order_cd_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setSvc_order_cd_state((String)in_value);` |

---

### Block 36 — [ELSE-IF] `keyElement.equals("要求種別コード")` (Request Type Code, yokyu_sbt_cd) (L2110)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setYokyu_sbt_cd_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setYokyu_sbt_cd_state((String)in_value);` |

---

### Block 37 — [ELSE-IF] `keyElement.equals("オーダ発行条件コード")` (Order Issue Condition Code, odr_hakko_joken_cd) (L2119)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setOdr_hakko_joken_cd_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setOdr_hakko_joken_cd_state((String)in_value);` |

---

### Block 38 — [ELSE-IF] `keyElement.equals("オーダ内容コード")` (Order Content Code, odr_naiyo_cd) (L2128)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setOdr_naiyo_cd_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setOdr_naiyo_cd_state((String)in_value);` |

---

### Block 39 — [ELSE-IF] `keyElement.equals("オプションSOD登録実施")` (Option SOD Registration Implementation, op_sod_add_jssi) (L2137)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setOp_sod_add_jssi_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setOp_sod_add_jssi_state((String)in_value);` |

---

### Block 40 — [ELSE-IF] `keyElement.equals("世代管理年月日時分秒（サービス契約）")` (Generation Management Date Time — Service Contract, kk0081_gene_add_dtm) (L2146)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setKk0081_gene_add_dtm_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setKk0081_gene_add_dtm_state((String)in_value);` |

---

### Block 41 — [ELSE-IF] `keyElement.equals("サービス契約内訳番号")` (Service Contract Breakdown Number, svc_kei_ucwk_no) (L2155)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setSvc_kei_ucwk_no_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setSvc_kei_ucwk_no_state((String)in_value);` |

---

### Block 42 — [ELSE-IF] `keyElement.equals("世代管理年月日時分秒（サービス契約内訳）")` (Generation Management Date Time — Service Contract Breakdown, kk0161_gene_add_dtm) (L2164)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setKk0161_gene_add_dtm_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setKk0161_gene_add_dtm_state((String)in_value);` |

---

### Block 43 — [ELSE-IF] `keyElement.equals("最終更新年月日時分秒")` (Last Update Date Time, last_upd_dtm) (L2173)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setLast_upd_dtm_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setLast_upd_dtm_state((String)in_value);` |

---

### Block 44 — [ELSE-IF] `keyElement.equals("異動年月日時分秒")` (Movement Date Time, ido_dtm) (L2182)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setIdo_dtm_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setIdo_dtm_state((String)in_value);` |

---

### Block 45 — [ELSE-IF] `keyElement.equals("サービス契約内訳ステータス")` (Service Contract Breakdown Status, svc_kei_ucwk_stat) (L2191)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` → `setSvc_kei_ucwk_stat_value((String)in_value);` |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("state")` → `setSvc_kei_ucwk_stat_state((String)in_value);` |

---

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `mskm_sbt_cd` | Field | Application Type Code — classifies the type of application/request being processed |
| `op_svc_cd` | Field | Option Service Code — identifies optional telecommunication services attached to the main service contract |
| `oya_kei_skbt_cd` | Field | Parent Contract Identification Code — identifies the parent/master contract to which this contract is subordinate |
| `work_param_id_session_uppl` | Field | Work Parameter ID (Session Upper Limit Count) — parameter controlling maximum concurrent sessions for a work item |
| `work_param_sette_value_rsv_uppl_prd` | Field | Work Parameter Setting Value (Session Upper Limit Count) — the configured value for session limit |
| `work_param_id_rsv_uppl_prd` | Field | Work Parameter ID (Reservation Upper Limit Days) — parameter controlling maximum reservation period in days |
| `work_param_sette_rsv_uppl_prd` | Field | Work Parameter Setting Value (Reservation Upper Limit Days) — the configured value for reservation period limit |
| `rule0059_auto_aply` | Field | Transaction Fee Automatic Application Necessity — flag determining whether transaction fees are auto-applied |
| `pcrs_cd` | Field | Fee Course Code — identifies the pricing/course tier for billing |
| `pplan_cd` | Field | Fee Plan Code — identifies the specific fee plan within a course |
| `pplan_kotei_tanka_no` | Field | Fee Plan Fixed Unit Price Number — the fixed unit price identifier for the fee plan |
| `shk_mltise_ninsho_id_pwd` | Field | Initial Multi-Session Authentication ID Password — password for initial multi-session authentication |
| `mltise_ninsho_id` | Field | Multi-Session Authentication ID — identifier for multi-session authentication |
| `session_cnt` | Field | Session Count — numeric counter of active sessions, stored as String in the bean |
| `use_staymd_year` | Field | Usage Start Date (Year) — year component of the service start date |
| `use_staymd_mon` | Field | Usage Start Date (Month) — month component of the service start date |
| `use_staymd_day` | Field | Usage Start Date (Day) — day component of the service start date |
| `use_staymd` | Field | Usage Start Date — composite service start date field |
| `svc_chrg_staymd` | Field | Service Charge Start Date — date when billing starts for the service |
| `unyo_ymd` | Field | Operation Date — date of the system operation |
| `unyo_dtm` | Field | Operation Date and Time — date and time of the system operation |
| `jssi_op_svc_kei_stat` | Field | Implemented Option Service Contract Status — status of option services that have been provisioned |
| `svc_kei_stat` | Field | Service Contract Status — overall status of the service contract (active, suspended, terminated, etc.) |
| `cust_stat` | Field | Customer Status — overall status of the customer account |
| `seiky_kei_no` | Field | Billing Contract Number — the contract number associated with billing |
| `prg_stat` | Field | Progress Status — current progress status of the order/contract processing |
| `prg_tkjk_1` | Field | Progress Special Item 1 — supplementary progress information field 1 |
| `order_sbt_cd` | Field | Order Type Code — classifies the type of order (new, change, renewal, cancellation, etc.) |
| `svc_order_cd` | Field | Service Order Code — identifies the specific service order |
| `yokyu_sbt_cd` | Field | Request Type Code — classifies the type of request (new service, modification, etc.) |
| `odr_hakko_joken_cd` | Field | Order Issue Condition Code — conditions under which the order is issued |
| `odr_naiyo_cd` | Field | Order Content Code — classifies the content/nature of the order (FTTH registration, Mail change, etc.) |
| `op_sod_add_jssi` | Field | Option SOD Registration Implementation — flag indicating whether option SOD registration has been executed |
| `kk0081_gene_add_dtm` | Field | Generation Management Date Time (Service Contract) — timestamp for contract-level generation management |
| `svc_kei_ucwk_no` | Field | Service Contract Breakdown Number — internal tracking ID for service contract line items |
| `kk0161_gene_add_dtm` | Field | Generation Management Date Time (Service Contract Breakdown) — timestamp for breakdown-level generation management |
| `last_upd_dtm` | Field | Last Update Date Time — timestamp of the most recent update to the record |
| `ido_dtm` | Field | Movement Date Time — timestamp of a status change or movement event |
| `svc_kei_ucwk_stat` | Field | Service Contract Breakdown Status — status of the contract breakdown/line item |
| `cust_kei_hktgi_list_list` | Instance Field | Customer Contract History List — a list of child beans representing individual customer contract history records |
| `op_svc_kei_list_list` | Instance Field | Option Service Contract List — a list of child beans representing individual option service contract records |
| `X33VDataTypeBeanInterface` | Interface | Data type bean interface — the contract that child list items must implement, providing the `storeModelData` method for recursive data binding |
| SOD | Acronym | Service Order Data — telecom order fulfillment entity representing the order data structure |
| FTTH | Business term | Fiber To The Home — fiber-optic internet service (one of the order content types classified by `odr_naiyo_cd`) |
| keyElement | Technical term | The parsed first element of the hierarchical key path — maps to a specific field name in the bean |
| subkey | Technical term | A metadata qualifier ("value", "state", "enable") that determines which property of a field is being set |
| isSetAsString | Technical term | A boolean flag controlling type coercion — when true, String values pass through directly without conversion |
