# Business Logic - KKW01601SF02DBean.storeModelData() [1105 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKA15301SF.KKW01601SF02DBean` |
| Layer | View (Web Form Backing Bean) |
| Module | `KKA15301SF` |

## 1. Role

`storeModelData` is the central dispatching and data-binding method for the `KKW01601SF02DBean` form-backing bean. It implements a **routing/dispatch pattern**: given a field key (Japanese item name), a subkey (`value`, `enable`, `state`), and a data value, it routes to the appropriate typed setter. Handles **80+ field categories** in the billing/claim-history domain.

**Subkey service types:**
- **`value`** - sets field data via `<field>_value` setter
- **`enable`** - sets UI editability via `<field>_enabled` setter
- **`state`** - sets display state via `<field>_state` setter

This is a **shared utility** called by callers within the same bean to batch-populate model data. No CBS/SC invocations, no database access. If `key` or `subkey` is null, returns immediately.

## 2. Processing Pattern

```mermaid
flowchart TD
    START(["storeModelData"])
    C1{key==null or subkey==null?}
    E1(["Return"])
    DISPATCH["Route to matching key branch"]
    S1["set <field>_value/_enabled/_state"]
    NONE(["No match: Return"])
    START --> C1
    C1 -->|Yes| E1
    C1 -->|No| DISPATCH
    DISPATCH --> S1
    DISPATCH --> NONE
```

**Branch groups (80+ total):**
- **Select** (`選択`): all 3 subkeys, enable casts to Boolean
- **Billing/Claim** (`請求契約番号`, `支払審査結果`, `適用作業年月日`, etc.): value+enable+state. Covers contract number, payment review, dates, payment method, billing recipient, financial institution, card info, address, timestamps, manual entry, forced window, corporate codes.
- **Address** (`送付先住所都道府県`/`市区町村`/`大字通称`/`字丁目`/`番地号`/`建物名`/`部屋番号`): value+state only
- **Timestamps** (`更新年月日時分秒`, `世代登録年月日時分秒`): value+state only
- **Mask-preserve** (〜`マスク保持`): value+state only
- **Code-only** (`支払方法コード`, etc.): value+state only
- **Credit card** (`クレジットカード状態`): value+state only
- **Domain-specific** (`送付先会社コード`, etc.): value+state only

## 3. Parameter Analysis

| No | Param | Type | Business Description |
|----|-------|------|---------------------|
| 1 | `key` | `String` | Item name (項目名) - Japanese field identifier. Examples: `選択` (Select), `請求契約番号` (Billing Contract No.), `支払審査結果` (Payment Review Result). Null=early return. |
| 2 | `subkey` | `String` | `value` (content), `enable` (interactivity), `state` (display). Case-insensitive. Null=early return. |
| 3 | `in_value` | `Object` | Data to store. Cast to String for value/state, Boolean for enable. |
| 4 | `isSetAsString` | `boolean` | Per Javadoc: `Long型項目ValueプロパティへString型値の設定を行う場合true`. Not used in implementation. |

No instance fields read. All data flows through parameters.

## 4. CRUD Operations / Called Services

No SC/CBS/DB operations. Only self-bean setter calls (all **U - Update**).

| CRUD | SC / CBS | SC Code | Entity / DB | Operation |
|------|----------|---------|-------------|-----------|
| U | `setL_sel_value/enabled/state` | KKW01601SF02DBean | - | Select field setters |
| U | `setL_rireki_*_value/enabled/state` | KKW01601SF02DBean | - | Claim history field setters |
| U | `setL_rireki_sofus_*_value/state` | KKW01601SF02DBean | - | Address component setters |
| U | `setL_upd_dtm_value/state` | KKW01601SF02DBean | - | Update timestamp setter |
| U | `setL_gene_add_dtm_value/state` | KKW01601SF02DBean | - | Generation timestamp setter |
| U | `setL_rireki_*_mskb_value/state` | KKW01601SF02DBean | - | Mask-preserve setters |
| U | `setCrecard_stat_value/state` | KKW01601SF02DBean | - | Credit card status setter |
| U | `setShikosaki_comp_cd_value/state` | KKW01601SF02DBean | - | Destination company code setter |
| U | `setPaywaytcml_ctl_cd_value/state` | KKW01601SF02DBean | - | Payment email control setter |

## 5. Dependency Trace

| # | Caller | Call Chain | Terminal |
|---|--------|-----------|----------|
| 1 | `KKW01601SF02DBean` (self) | Caller -> storeModelData | All setter calls in Section 4 |
| 2 | `KKW01601SF02DBean` (self) | Caller -> storeModelData | All setter calls in Section 4 |

Terminal ops: `setL_rireki_koza_payway_uk_div_bk`, `setL_rireki_payway_bk`, `setL_rireki_koza_payway_uk_div_cd`, `setL_rireki_kokunai_kaigai`, `setL_rireki_card_sbt`, `setL_rireki_seiky_crecard_comp_nm`, `setL_rireki_ido_div`, `setL_rireki_aply_ymd_f`, `setShikosaki_comp_cd`

No screen/batch entry points within 8 hops. 2 direct callers.

## 6. Per-Branch Detail Blocks

**Block 1** - IF null check (L4208)

| # | Type | Code |
|---|------|------|
| 1 | IF | `key==null || subkey==null` |
| 2 | RETURN | `return;` // key,subkeyがnullの場合、処理を中止 |

**Block 2** - IF `key.equals("選択")` Select field (L4214)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | EXEC | `setL_sel_value((String)in_value);` |
| 3 | IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | EXEC | `setL_sel_enabled((Boolean)in_value);` |
| 5 | IF | `subkey.equalsIgnoreCase("state")` |
| 6 | EXEC | `setL_sel_state((String)in_value);` |

**Block 3** - IF `key.equals("請求契約番号")` (L4226)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | EXEC | `setL_rireki_seiky_kei_no_value((String)in_value);` |
| 3 | IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | EXEC | `setL_rireki_seiky_kei_no_enabled((Boolean)in_value);` |
| 5 | IF | `subkey.equalsIgnoreCase("state")` |
| 6 | EXEC | `setL_rireki_seiky_kei_no_state((String)in_value);` |

**Block 4** - IF `key.equals("支払審査結果")` (L4238)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | EXEC | `setL_rireki_pay_skekka_value((String)in_value);` |
| 3 | IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | EXEC | `setL_rireki_pay_skekka_enabled((Boolean)in_value);` |
| 5 | IF | `subkey.equalsIgnoreCase("state")` |
| 6 | EXEC | `setL_rireki_pay_skekka_state((String)in_value);` |

**Block 5** - IF `key.equals("適用作業年月日")` (L4262)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | EXEC | `setL_rireki_aply_ymd_value((String)in_value);` |
| 3 | IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | EXEC | `setL_rireki_aply_ymd_enabled((Boolean)in_value);` |
| 5 | IF | `subkey.equalsIgnoreCase("state")` |
| 6 | EXEC | `setL_rireki_aply_ymd_state((String)in_value);` |

**Block 6** - IF `key.equals("支払方法")` (L4286)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | EXEC | `setL_rireki_payway_value((String)in_value);` |
| 3 | IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | EXEC | `setL_rireki_payway_enabled((Boolean)in_value);` |
| 5 | IF | `subkey.equalsIgnoreCase("state")` |
| 6 | EXEC | `setL_rireki_payway_state((String)in_value);` |

**Block 7** - IF `key.equals("口座番号")` (L4320)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | EXEC | `setL_rireki_koza_no_value((String)in_value);` |
| 3 | IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | EXEC | `setL_rireki_koza_no_enabled((Boolean)in_value);` |
| 5 | IF | `subkey.equalsIgnoreCase("state")` |
| 6 | EXEC | `setL_rireki_koza_no_state((String)in_value);` |

**Block 8** - IF `key.equals("背景色")` (L4370)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | EXEC | `setL_color_value((String)in_value);` |
| 3 | IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | EXEC | `setL_color_enabled((Boolean)in_value);` |
| 5 | IF | `subkey.equalsIgnoreCase("state")` |
| 6 | EXEC | `setL_color_state((String)in_value);` |

**Block 9** - IF `key.equals("送付先住所都道府県")` Address pref (L4388)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | EXEC | `setL_rireki_sofus_state_value((String)in_value);` |
| 3 | IF | `subkey.equalsIgnoreCase("state")` |
| 4 | EXEC | `setL_rireki_sofus_state_state((String)in_value);` |

**Block 10** - IF `key.equals("カード予約ID")` (L4508)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | EXEC | `setL_rireki_card_azkri_id_value((String)in_value);` |
| 3 | IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | EXEC | `setL_rireki_card_azkri_id_enabled((Boolean)in_value);` |
| 5 | IF | `subkey.equalsIgnoreCase("state")` |
| 6 | EXEC | `setL_rireki_card_azkri_id_state((String)in_value);` |

**Block 11** - IF `key.equals("送付先会社コード")` (L4544)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | EXEC | `setShikosaki_comp_cd_value((String)in_value);` |
| 3 | IF | `subkey.equalsIgnoreCase("state")` |
| 4 | EXEC | `setShikosaki_comp_cd_state((String)in_value);` |

**Block 12** - IF `key.equals("請求カード会社名")` (L4526)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | EXEC | `setL_rireki_seiky_crecard_comp_nm_value((String)in_value);` |
| 3 | IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | EXEC | `setL_rireki_seiky_crecard_comp_nm_enabled((Boolean)in_value);` |
| 5 | IF | `subkey.equalsIgnoreCase("state")` |
| 6 | EXEC | `setL_rireki_seiky_crecard_comp_nm_state((String)in_value);` |

**Block 13** - IF `key.equals("カード種別")` (L4562)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | EXEC | `setL_rireki_card_sbt_value((String)in_value);` |
| 3 | IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | EXEC | `setL_rireki_card_sbt_enabled((Boolean)in_value);` |
| 5 | IF | `subkey.equalsIgnoreCase("state")` |
| 6 | EXEC | `setL_rireki_card_sbt_state((String)in_value);` |

**Block 14** - IF `key.equals("国内／海外")` (L4580)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | EXEC | `setL_rireki_kokunai_kaigai_value((String)in_value);` |
| 3 | IF | `subkey.equalsIgnoreCase("enable")` |
| 4 | EXEC | `setL_rireki_kokunai_kaigai_enabled((Boolean)in_value);` |
| 5 | IF | `subkey.equalsIgnoreCase("state")` |
| 6 | EXEC | `setL_rireki_kokunai_kaigai_state((String)in_value);` |

**Block 15** - IF `key.equals("口座支払方法受付区分")` (L4598)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | EXEC | `setL_rireki_koza_payway_uk_div_cd_value((String)in_value);` |
| 3 | IF | `subkey.equalsIgnoreCase("state")` |
| 4 | EXEC | `setL_rireki_koza_payway_uk_div_cd_state((String)in_value);` |

**Block 16** - IF `key.equals("支払方法退避")` (L4616)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | EXEC | `setL_rireki_payway_bk_value((String)in_value);` |
| 3 | IF | `subkey.equalsIgnoreCase("state")` |
| 4 | EXEC | `setL_rireki_payway_bk_state((String)in_value);` |

**Block 17** - IF `key.equals("口座支払方法受付区分退避")` (L4634)

| # | Type | Code |
|---|------|------|
| 1 | IF | `subkey.equalsIgnoreCase("value")` |
| 2 | EXEC | `setL_rireki_koza_payway_uk_div_bk_value((String)in_value);` |
| 3 | IF | `subkey.equalsIgnoreCase("state")` |
| 4 | EXEC | `setL_rireki_koza_payway_uk_div_bk_state((String)in_value);` |

**Note:** Remaining blocks follow the same pattern - value/enable/state for editable fields, value/state only for display-only (timestamps, codes, address components, mask-preserve).

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `key` | Parameter | Item name (項目名) - Japanese field identifier |
| `subkey` | Parameter | value/content, enable/editability, state/display |
| `in_value` | Parameter | Data to store; String or Boolean |
| `isSetAsString` | Parameter | Long型項目ValueプロパティへString型値の設定を行う場合true. Not used. |
| `選択` | Field | Select field - only field with all 3 subkeys + Boolean enable |
| `請求契約番号` | Field | Billing contract number |
| `支払審査結果` | Field | Payment review result |
| `適用作業年月日` | Field | Application effective date |
| `支払方法` | Field | Payment method |
| `口座番号` | Field | Bank account number |
| `背景色` | Field | Background color |
| `送付先住所都道府県` | Field | Delivery address prefecture |
| `送付先住所市区町村` | Field | Delivery address city/town/village |
| `更新年月日時分秒` | Field | Last update timestamp (YYYYMMDDHHmmss) |
| `世代登録年月日時分秒` | Field | Generation/registration timestamp |
| `課金先適用開始年月日` | Field | Billing start date |
| `初回支払書受領年月日` | Field | First payment document receipt date |
| `MASK保持` | Field | Mask-preserve - persists field value across screen transitions |
| `クレジットカード状態` | Field | Credit card processing status |
| `送付先会社コード` | Field | Destination company code |
| `口座支払方法受付区分` | Field | Account payment method reception division |
| `支払方法退避` | Field | Payment method reserve (rollback state) |
| `カード予約ID` | Field | Card reservation ID |
| `請求カード会社名` | Field | Billing card company name |
| `カード種別` | Field | Card subtype classification |
| `国内／海外` | Field | Domestic/overseas indicator |
| `enable` | Subkey | Sets UI editability (`<field>_enabled(Boolean)`) |
| `value` | Subkey | Sets field data (`<field>_value(String)`) |
| `state` | Subkey | Sets display state (`<field>_state(String)`) |
