# Business Logic — FUW00921SF01DBean.storeModelData() [37 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.FUW00921SF.FUW00921SF01DBean` |
| Layer | Controller / Screen Bean (UI model data holder in the web presentation layer) |
| Module | `FUW00921SF` (Package: `eo.web.webview.FUW00921SF`) |

## 1. Role

### FUW00921SF01DBean.storeModelData()

This method is the central dispatcher for populating UI model fields in the **customer identity verification document** screen (`FUW00921SF`). It implements a **routing/dispatch pattern**: given a `key` that identifies a logical UI item and a `subkey` that identifies which property of that item to set (value, enable flag, or display state), the method routes the incoming `in_value` to the correct typed setter. The method handles two distinct business items — the **Customer Identity Verification Document Code List** (ご本人様確認書類コードリスト) and the **Customer Identity Verification Document Name List** (ご本人様確認書類名称リスト) — each of which has value, enabled, and state properties. Its role in the larger system is that of a **data binder** between the screen's back-end data preparation logic and the front-end model state, allowing generic callers (such as `storeModelData(String, String, Object)` overloads or screen controllers) to set multiple typed properties through a single uniform interface without knowing the concrete bean type. The `isSetAsString` parameter exists to support Long-type property values as strings, though this particular method body currently defers to the no-arg overload when `isSetAsString` is `false`.

## 2. Processing Pattern (Detailed Business Logic)

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

    START --> CHECK_NULL{key == null or subkey == null?}
    CHECK_NULL -->|Yes| EARLY_RETURN(["return (abort processing)"])

    CHECK_NULL -->|No| CALC_SEP["int separaterPoint = key.indexOf('/')"]

    CALC_SEP --> BRANCH_A{key.equals('ご本人様確認書類コードリスト' 'Customer Identity Verification Document Code List')?}

    BRANCH_A -->|Yes| SUBKEY_A{subkey.equalsIgnoreCase('value')?}
    SUBKEY_A -->|Yes| SET_VAL_A["setConfirm_document_cd_list_value((String) in_value)"]
    SUBKEY_A -->|No| SUBKEY_AE{subkey.equalsIgnoreCase('enable')?}
    SUBKEY_AE -->|Yes| SET_EN_A["setConfirm_document_cd_list_enabled((Boolean) in_value)"]
    SUBKEY_AE -->|No| SUBKEY_AS{subkey.equalsIgnoreCase('state')?}
    SUBKEY_AS -->|Yes| SET_ST_A["setConfirm_document_cd_list_state((String) in_value)"]
    SUBKEY_AS -->|No| END_NODE(["End (no-op)"])

    BRANCH_A -->|No| BRANCH_B{key.equals('ご本人様確認書類名称リスト' 'Customer Identity Verification Document Name List')?}

    BRANCH_B -->|Yes| SUBKEY_B{subkey.equalsIgnoreCase('value')?}
    SUBKEY_B -->|Yes| SET_VAL_B["setConfirm_document_nm_list_value((String) in_value)"]
    SUBKEY_B -->|No| SUBKEY_BE{subkey.equalsIgnoreCase('enable')?}
    SUBKEY_BE -->|Yes| SET_EN_B["setConfirm_document_nm_list_enabled((Boolean) in_value)"]
    SUBKEY_BE -->|No| SUBKEY_BS{subkey.equalsIgnoreCase('state')?}
    SUBKEY_BS -->|Yes| SET_ST_B["setConfirm_document_nm_list_state((String) in_value)"]
    SUBKEY_BS -->|No| END_NODE

    BRANCH_B -->|No| END_NODE

    SET_VAL_A --> END_NODE
    SET_EN_A --> END_NODE
    SET_ST_A --> END_NODE
    SET_VAL_B --> END_NODE
    SET_EN_B --> END_NODE
    SET_ST_B --> END_NODE

    EARLY_RETURN --> END_NODE
```

**Processing summary:**

1. **Null guard** — If `key` or `subkey` is `null`, processing aborts immediately (no side effects).
2. **Separator scan** — `key.indexOf("/")` is computed but the result (`separaterPoint`) is never used in the current body; it appears reserved for future key-routing logic.
3. **Branch A** — When `key` matches the document **code list** item ("ご本人様確認書類コードリスト"), subkey-routing dispatches to the three setters for `value` (String), `enable` (Boolean), and `state` (String).
4. **Branch B** — When `key` matches the document **name list** item ("ご本人様確認書類名称リスト"), subkey-routing dispatches to the three setters for `value` (String), `enable` (Boolean), and `state` (String).
5. **No-match** — If `key` matches neither item, the method returns silently (no-op).

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | The logical UI item name that identifies which bean property group to populate. Currently supports two values: `"ご本人様確認書類コードリスト"` (Customer Identity Verification Document Code List) and `"ご本人様確認書類名称リスト"` (Customer Identity Verification Document Name List). These are the two document-list items presented on the customer identity confirmation screen. |
| 2 | `subkey` | `String` | The property selector within the identified item. Accepts case-insensitive values `"value"`, `"enable"`, or `"state"` to determine which typed setter is invoked. `"value"` sets the data content, `"enable"` controls whether the UI control is interactive, and `"state"` sets the visual/display state (e.g., read-only, disabled styling). |
| 3 | `in_value` | `Object` | The data payload to assign. Its runtime type depends on `subkey`: `String` for value and state properties, `Boolean` for the enable property. The method performs an unchecked cast, so the caller must supply a value matching the expected type. |
| 4 | `isSetAsString` | `boolean` | Flag indicating whether to set a Long-type property as a String value. In this overload's body, `true` is passed to the no-arg-boolean variant `storeModelData(key, subkey, in_value)`. The current source body does not use `isSetAsString` directly — it delegates when the 4-arg form is called with `false` from the 3-arg wrapper. |

**Instance fields / external state accessed:**

| Field | Source Location | Usage |
|-------|----------------|-------|
| `confirm_document_cd_list_value` | `FUW00921SF01DBean` | Written via `setConfirm_document_cd_list_value(String)` |
| `confirm_document_cd_list_enabled` | `FUW00921SF01DBean` | Written via `setConfirm_document_cd_list_enabled(Boolean)` |
| `confirm_document_cd_list_state` | `FUW00921SF01DBean` | Written via `setConfirm_document_cd_list_state(String)` |
| `confirm_document_nm_list_value` | `FUW00921SF01DBean` | Written via `setConfirm_document_nm_list_value(String)` |
| `confirm_document_nm_list_enabled` | `FUW00921SF01DBean` | Written via `setConfirm_document_nm_list_enabled(Boolean)` |
| `confirm_document_nm_list_state` | `FUW00921SF01DBean` | Written via `setConfirm_document_nm_list_state(String)` |

## 4. CRUD Operations / Called Services

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

This method performs **UI model state mutations only** — no SC/CBS layer calls, no database operations, and no entity reads/writes. All called methods are intra-bean setter delegations.

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| U | `FUW00921SF01DBean.setConfirm_document_cd_list_value(String)` | FUW00921SF01DBean | - | Updates the document code list value property in the screen bean model |
| U | `FUW00921SF01DBean.setConfirm_document_cd_list_enabled(Boolean)` | FUW00921SF01DBean | - | Updates the document code list enabled (interactive) flag |
| U | `FUW00921SF01DBean.setConfirm_document_cd_list_state(String)` | FUW00921SF01DBean | - | Updates the document code list display state (e.g., read-only) |
| U | `FUW00921SF01DBean.setConfirm_document_nm_list_value(String)` | FUW00921SF01DBean | - | Updates the document name list value property in the screen bean model |
| U | `FUW00921SF01DBean.setConfirm_document_nm_list_enabled(Boolean)` | FUW00921SF01DBean | - | Updates the document name list enabled (interactive) flag |
| U | `FUW00921SF01DBean.setConfirm_document_nm_list_state(String)` | FUW00921SF01DBean | - | Updates the document name list display state (e.g., read-only) |

## 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 | `FUW00921SF01DBean` | `storeModelData(String, String, Object)` (3-arg overload) -> `storeModelData(String, String, Object, boolean)` | `setConfirm_document_cd_list_state [U] -`, `setConfirm_document_cd_list_enabled [U] -`, `setConfirm_document_cd_list_value [U] -`, `setConfirm_document_nm_list_state [U] -`, `setConfirm_document_nm_list_enabled [U] -`, `setConfirm_document_nm_list_value [U] -` |
| 2 | `FUW00921SF01DBean` | `storeModelData(String, String, Object, boolean)` (self-call / direct caller) | `setConfirm_document_cd_list_state [U] -`, `setConfirm_document_cd_list_enabled [U] -`, `setConfirm_document_cd_list_value [U] -`, `setConfirm_document_nm_list_state [U] -`, `setConfirm_document_nm_list_enabled [U] -`, `setConfirm_document_nm_list_value [U] -` |

**Note:** All terminal operations are intra-bean property setters — no SC/CBS or database endpoints are reached from this method. This method operates entirely in the presentation layer as a pure model-data binder.

## 6. Per-Branch Detail Blocks

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

> Null guard: aborts processing immediately if either the item key or subkey is `null`. This prevents `NullPointerException` on downstream operations.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return;` // 処理を中止 (abort processing) |

**Block 2** — [SET] `separaterPoint` calculation (L226)

> Scans for a "/" character in `key`. The result is stored in `separaterPoint` but is **never used** in the current body. This appears to be reserved infrastructure for future key-routing logic (e.g., hierarchical keys like `"parent/child"`).

| # | Type | Code |
|---|------|------|
| 1 | SET | `int separaterPoint = key.indexOf("/");` // スプリキー区切り位置を取得 (obtain subkey separator position) — unused in current logic |

**Block 3** — [IF] `key.equals("ご本人様確認書類コードリスト")` (L230) [CONSTANT: item ID="ご本人様確認書類コードリスト" (Customer Identity Verification Document Code List)]

> Branch A: handles the document code list item. When `key` matches this exact string, the method dispatches to the three code-list-specific setters based on `subkey`.

| # | Type | Code |
|---|------|------|
| 1 | IF | `key.equals("ご本人様確認書類コードリスト")` // データタイプがStringの項目"ご本人様確認書類コードリスト" (item whose data type is String: "Customer Identity Verification Document Code List") |

**Block 3.1** — [IF] [nested inside Block 3] `subkey.equalsIgnoreCase("value")` (L231)

> Sets the document code list value when the subkey is "value". The incoming `in_value` is cast to `String`.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `setConfirm_document_cd_list_value((String) in_value);` // valueサブキーの場合、コードリストの値を設定 (for value subkey, set the code list value) |

**Block 3.2** — [ELSE-IF] `subkey.equalsIgnoreCase("enable")` (L234)

> Sets the document code list enabled flag when the subkey is "enable". The incoming `in_value` is cast to `Boolean`.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `setConfirm_document_cd_list_enabled((Boolean) in_value);` // subkeyが"enable"の場合、confirm_document_cd_list_enabledのsetterを実行する (when subkey is "enable", execute the setter for confirm_document_cd_list_enabled) |

**Block 3.3** — [ELSE-IF] `subkey.equalsIgnoreCase("state")` (L237)

> Sets the document code list display state when the subkey is "state". The incoming `in_value` is cast to `String`.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `setConfirm_document_cd_list_state((String) in_value);` // subkeyが"state"の場合、ステータスを返す (when subkey is "state", return the status) |

**Block 4** — [ELSE-IF] `key.equals("ご本人様確認書類名称リスト")` (L242) [CONSTANT: item ID="ご本人様確認書類名称リスト" (Customer Identity Verification Document Name List)]

> Branch B: handles the document name list item. When `key` matches this exact string, the method dispatches to the three name-list-specific setters based on `subkey`.

| # | Type | Code |
|---|------|------|
| 1 | IF | `else if (key.equals("ご本人様確認書類名称リスト"))` // データタイプがStringの項目"ご本人様確認書類名称リスト" (item whose data type is String: "Customer Identity Verification Document Name List") |

**Block 4.1** — [IF] [nested inside Block 4] `subkey.equalsIgnoreCase("value")` (L243)

> Sets the document name list value when the subkey is "value". The incoming `in_value` is cast to `String`.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `setConfirm_document_nm_list_value((String) in_value);` // valueサブキーの場合、名称リストの値を設定 (for value subkey, set the name list value) |

**Block 4.2** — [ELSE-IF] `subkey.equalsIgnoreCase("enable")` (L246)

> Sets the document name list enabled flag when the subkey is "enable". The incoming `in_value` is cast to `Boolean`.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `setConfirm_document_nm_list_enabled((Boolean) in_value);` // subkeyが"enable"の場合、confirm_document_nm_list_enabledのsetterを実行する (when subkey is "enable", execute the setter for confirm_document_nm_list_enabled) |

**Block 4.3** — [ELSE-IF] `subkey.equalsIgnoreCase("state")` (L249)

> Sets the document name list display state when the subkey is "state". The incoming `in_value` is cast to `String`.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `setConfirm_document_nm_list_state((String) in_value);` // subkeyが"state"の場合、ステータスを返す (when subkey is "state", return the status) |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `confirm_document_cd_list` | Field | Customer Identity Verification Document Code List — a list of document type codes (e.g., passport, driver's license) that the customer can present to verify their identity |
| `confirm_document_nm_list` | Field | Customer Identity Verification Document Name List — a list of human-readable document names corresponding to the code list entries |
| `key` | Parameter | UI item identifier that selects which bean property group to populate; acts as a routing key in the dispatcher pattern |
| `subkey` | Parameter | Property selector within the selected item; "value" sets the data, "enable" sets interactivity, "state" sets display state |
| `in_value` | Parameter | The data payload bound to the target property; type depends on subkey (String for value/state, Boolean for enable) |
| `isSetAsString` | Parameter | Flag for Long-to-String type conversion support on Long-type item value properties |
| ご本人様確認書類コードリスト | Japanese field | Customer Identity Verification Document Code List — the primary key string for the code-list branch in `storeModelData` |
| ご本人様確認書類名称リスト | Japanese field | Customer Identity Verification Document Name List — the primary key string for the name-list branch in `storeModelData` |
| `FUW00921SF` | Module code | Screen module for the customer identity verification document confirmation screen (web presentation layer) |
| `DBean` | Suffix | Data Bean — a screen-level model holder that contains typed properties and data-binding methods for a single web page |
| `separaterPoint` | Field | Reserved index variable for hierarchical key routing (e.g., "parent/child" format); unused in current implementation |
| SC | Acronym | Service Component — a layer of business logic services in the enterprise architecture |
| CBS | Acronym | Common Business Service — shared reusable business logic components |
| setter | Technical term | JavaBean property accessor method that assigns a value to a private field (e.g., `setConfirm_document_cd_list_value(String)`) |
