# Business Logic — FUW00927SFBean.addListDataInstance() [226 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.FUW00927SF.FUW00927SFBean` |
| Layer | View Data Bean (Service/Component tier — webview bean layer) |
| Module | `FUW00927SF` (Package: `eo.web.webview.FUW00927SF`) |

## 1. Role

### FUW00927SFBean.addListDataInstance()

This method is a **factory dispatcher** that lazily initializes and populates typed list containers for recurring (repeated) view data items used by the `FUW00927SF` screen. The screen operates in the telecom service billing domain, managing fee structures displayed to customers — including monthly charges (月額料金), initial fees (初期費用), and discount wording (割引文言).

The method implements a **routing/dispatch design pattern**: it receives a string key representing a business item name (e.g., "月額料金" for Monthly Charge, "割引名" for Discount Name) and routes to the appropriate list field. For each supported item type, if the underlying list has not yet been instantiated, it creates a fresh `X33VDataTypeList`, generates a new `X33VDataTypeStringBean` instance (the value holder for String-type repeated items), appends it to the list, and returns the index of the newly added element.

It handles **three categories** of input: (1) null input (returns -1 as a sentinel), (2) common-info-view prefixes starting with "//" (delegates to the superclass `addListDataInstance`), and (3) 21 domain-specific recurring item keys that map to distinct list fields. Each of the 21 branches follows the identical lazy-initialization-then-add pattern, ensuring that the requested list is always ready to receive a new data row.

This bean serves as the **shared data coordination layer** between the view (JSP/screen) and downstream processing. It enables the screen to dynamically grow repeated-item tables (e.g., adding rows to a charge breakdown table) by key name, making the screen responsive to user interactions like "add row" buttons on fee item tables.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["addListDataInstance(String key)"])

    START --> CHECK_NULL["Check if key is null"]

    CHECK_NULL -->|key == null| RETURN_NEG1_1["Return -1"]
    CHECK_NULL -->|key != null| CHECK_PREFIX["Check if key starts with '//'"]

    CHECK_PREFIX -->|starts with '//'| CALL_SUPER["Call super.addListDataInstance(key)"]
    CALL_SUPER --> RETURN_SUPER["Return result from super"]

    CHECK_PREFIX -->|does not start with '//'| CHECK_BRANCHES["Check key against item name branches"]

    CHECK_BRANCHES --> B1["Branch: '項目コード' (koumoku_code)"]
    B1 --> B1_INIT["Initialize koumoku_code_list if null"]
    B1_INIT --> B1_CREATE["Create X33VDataTypeStringBean instance"]
    B1_CREATE --> B1_ADD["Add to koumoku_code_list"]
    B1_ADD --> B1_RET["Return index (size-1)"]

    CHECK_BRANCHES --> B2["Branch: '値' (koumoku_value)"]
    B2 --> B2_INIT["Initialize koumoku_value_list if null"]
    B2_INIT --> B2_CREATE["Create X33VDataTypeStringBean instance"]
    B2_CREATE --> B2_ADD["Add to koumoku_value_list"]
    B2_ADD --> B2_RET["Return index (size-1)"]

    CHECK_BRANCHES --> B3["Branch: '月額料金項目' (getsu_ryokin_kmk)"]
    B3 --> B3_INIT["Initialize getsu_ryokin_kmk_list if null"]
    B3_INIT --> B3_CREATE["Create X33VDataTypeStringBean instance"]
    B3_CREATE --> B3_ADD["Add to getsu_ryokin_kmk_list"]
    B3_ADD --> B3_RET["Return index (size-1)"]

    CHECK_BRANCHES --> B4["Branch: '月額料金' (getsu_ryokin)"]
    B4 --> B4_INIT["Initialize getsu_ryokin_list if null"]
    B4_INIT --> B4_CREATE["Create X33VDataTypeStringBean instance"]
    B4_CREATE --> B4_ADD["Add to getsu_ryokin_list"]
    B4_ADD --> B4_RET["Return index (size-1)"]

    CHECK_BRANCHES --> B5["Branch: '初期費用項目' (shoki_hiyo_kmk)"]
    B5 --> B5_INIT["Initialize shoki_hiyo_kmk_list if null"]
    B5_INIT --> B5_CREATE["Create X33VDataTypeStringBean instance"]
    B5_CREATE --> B5_ADD["Add to shoki_hiyo_kmk_list"]
    B5_ADD --> B5_RET["Return index (size-1)"]

    CHECK_BRANCHES --> B6["Branch: '初期費用' (shoki_hiyo)"]
    B6 --> B6_INIT["Initialize shoki_hiyo_list if null"]
    B6_INIT --> B6_CREATE["Create X33VDataTypeStringBean instance"]
    B6_CREATE --> B6_ADD["Add to shoki_hiyo_list"]
    B6_ADD --> B6_RET["Return index (size-1)"]

    CHECK_BRANCHES --> B7["Branch: '月額料金計' (getsu_ryokin_kei)"]
    B7 --> B7_INIT["Initialize getsu_ryokin_kei_list if null"]
    B7_INIT --> B7_CREATE["Create X33VDataTypeStringBean instance"]
    B7_CREATE --> B7_ADD["Add to getsu_ryokin_kei_list"]
    B7_ADD --> B7_RET["Return index (size-1)"]

    CHECK_BRANCHES --> B8["Branch: '月額料金計（税抜）' (getsu_ryokin_kei_zei)"]
    B8 --> B8_INIT["Initialize getsu_ryokin_kei_zei_list if null"]
    B8_INIT --> B8_CREATE["Create X33VDataTypeStringBean instance"]
    B8_CREATE --> B8_ADD["Add to getsu_ryokin_kei_zei_list"]
    B8_ADD --> B8_RET["Return index (size-1)"]

    CHECK_BRANCHES --> B9["Branch: '月額料金項目（スマートリンク）' (getsu_ryokin_kmk_sml)"]
    B9 --> B9_INIT["Initialize getsu_ryokin_kmk_sml_list if null"]
    B9_INIT --> B9_CREATE["Create X33VDataTypeStringBean instance"]
    B9_CREATE --> B9_ADD["Add to getsu_ryokin_kmk_sml_list"]
    B9_ADD --> B9_RET["Return index (size-1)"]

    CHECK_BRANCHES --> B10["Branch: '月額料金（スマートリンク）' (getsu_ryokin_sml)"]
    B10 --> B10_INIT["Initialize getsu_ryokin_sml_list if null"]
    B10_INIT --> B10_CREATE["Create X33VDataTypeStringBean instance"]
    B10_CREATE --> B10_ADD["Add to getsu_ryokin_sml_list"]
    B10_ADD --> B10_RET["Return index (size-1)"]

    CHECK_BRANCHES --> B11["Branch: '初期費用項目（スマートリンク）' (shoki_hiyo_kmk_sml)"]
    B11 --> B11_INIT["Initialize shoki_hiyo_kmk_sml_list if null"]
    B11_INIT --> B11_CREATE["Create X33VDataTypeStringBean instance"]
    B11_CREATE --> B11_ADD["Add to shoki_hiyo_kmk_sml_list"]
    B11_ADD --> B11_RET["Return index (size-1)"]

    CHECK_BRANCHES --> B12["Branch: '初期費用（スマートリンク）' (shoki_hiyo_sml)"]
    B12 --> B12_INIT["Initialize shoki_hiyo_sml_list if null"]
    B12_INIT --> B12_CREATE["Create X33VDataTypeStringBean instance"]
    B12_CREATE --> B12_ADD["Add to shoki_hiyo_sml_list"]
    B12_ADD --> B12_RET["Return index (size-1)"]

    CHECK_BRANCHES --> B13["Branch: '月額料金割引文言適用期間' (gtgk_wrib_mngn_tk_kikan)"]
    B13 --> B13_INIT["Initialize gtgk_wrib_mngn_tk_kikan_list if null"]
    B13_INIT --> B13_CREATE["Create X33VDataTypeStringBean instance"]
    B13_CREATE --> B13_ADD["Add to gtgk_wrib_mngn_tk_kikan_list"]
    B13_ADD --> B13_RET["Return index (size-1)"]

    CHECK_BRANCHES --> B14["Branch: '月額料金割引文言割引名' (gtgk_wrib_mngn_wrib_nm)"]
    B14 --> B14_INIT["Initialize gtgk_wrib_mngn_wrib_nm_list if null"]
    B14_INIT --> B14_CREATE["Create X33VDataTypeStringBean instance"]
    B14_CREATE --> B14_ADD["Add to gtgk_wrib_mngn_wrib_nm_list"]
    B14_ADD --> B14_RET["Return index (size-1)"]

    CHECK_BRANCHES --> B15["Branch: '月額料金割引文言割引額' (gtgk_wrib_mngn_wrib_amnt)"]
    B15 --> B15_INIT["Initialize gtgk_wrib_mngn_wrib_amnt_list if null"]
    B15_INIT --> B15_CREATE["Create X33VDataTypeStringBean instance"]
    B15_CREATE --> B15_ADD["Add to gtgk_wrib_mngn_wrib_amnt_list"]
    B15_ADD --> B15_RET["Return index (size-1)"]

    CHECK_BRANCHES --> B16["Branch: '月額料金割引文言備考' (gtgk_wrib_mngn_biko)"]
    B16 --> B16_INIT["Initialize gtgk_wrib_mngn_biko_list if null"]
    B16_INIT --> B16_CREATE["Create X33VDataTypeStringBean instance"]
    B16_CREATE --> B16_ADD["Add to gtgk_wrib_mngn_biko_list"]
    B16_ADD --> B16_RET["Return index (size-1)"]

    CHECK_BRANCHES --> B17["Branch: '月額料金表示項目' (getsu_ryokin_kei_title)"]
    B17 --> B17_INIT["Initialize getsu_ryokin_kei_title_list if null"]
    B17_INIT --> B17_CREATE["Create X33VDataTypeStringBean instance"]
    B17_CREATE --> B17_ADD["Add to getsu_ryokin_kei_title_list"]
    B17_ADD --> B17_RET["Return index (size-1)"]

    CHECK_BRANCHES --> B18["Branch: '月額料金項目（GH）' (getsu_ryokin_kmk_gh)"]
    B18 --> B18_INIT["Initialize getsu_ryokin_kmk_gh_list if null"]
    B18_INIT --> B18_CREATE["Create X33VDataTypeStringBean instance"]
    B18_CREATE --> B18_ADD["Add to getsu_ryokin_kmk_gh_list"]
    B18_ADD --> B18_RET["Return index (size-1)"]

    CHECK_BRANCHES --> B19["Branch: '月額料金（GH）' (getsu_ryokin_gh)"]
    B19 --> B19_INIT["Initialize getsu_ryokin_gh_list if null"]
    B19_INIT --> B19_CREATE["Create X33VDataTypeStringBean instance"]
    B19_CREATE --> B19_ADD["Add to getsu_ryokin_gh_list"]
    B19_ADD --> B19_RET["Return index (size-1)"]

    CHECK_BRANCHES --> B20["Branch: '初期費用項目（GH）' (shoki_hiyo_kmk_gh)"]
    B20 --> B20_INIT["Initialize shoki_hiyo_kmk_gh_list if null"]
    B20_INIT --> B20_CREATE["Create X33VDataTypeStringBean instance"]
    B20_CREATE --> B20_ADD["Add to shoki_hiyo_kmk_gh_list"]
    B20_ADD --> B20_RET["Return index (size-1)"]

    CHECK_BRANCHES --> B21["Branch: '初期費用（GH）' (shoki_hiyo_gh)"]
    B21 --> B21_INIT["Initialize shoki_hiyo_gh_list if null"]
    B21_INIT --> B21_CREATE["Create X33VDataTypeStringBean instance"]
    B21_CREATE --> B21_ADD["Add to shoki_hiyo_gh_list"]
    B21_ADD --> B21_RET["Return index (size-1)"]

    CHECK_BRANCHES --> NO_MATCH["No matching item name"]
    NO_MATCH --> RETURN_NEG1["Return -1"]

    RETURN_NEG1_1(["Return -1"]) --> END(["END"])
    RETURN_SUPER(["Return super result"]) --> END
    B1_RET --> END
    B2_RET --> END
    B3_RET --> END
    B4_RET --> END
    B5_RET --> END
    B6_RET --> END
    B7_RET --> END
    B8_RET --> END
    B9_RET --> END
    B10_RET --> END
    B11_RET --> END
    B12_RET --> END
    B13_RET --> END
    B14_RET --> END
    B15_RET --> END
    B16_RET --> END
    B17_RET --> END
    B18_RET --> END
    B19_RET --> END
    B20_RET --> END
    B21_RET --> END
    RETURN_NEG1(["Return -1"]) --> END
```

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | The business item name (項目名) used to identify which recurring (repeated) data list should receive a new element. It acts as a routing key — each recognized string value corresponds to a specific fee/charge sub-item in the telecom billing display. Values include Japanese strings such as "項目コード" (Item Code), "月額料金" (Monthly Charge), "初期費用" (Initial Fee), "月額料金割引文言割引名" (Discount Wording - Discount Name), and their variants suffixed with "（スマートリンク）" (Smart Link) or "（GH）" (GH = Gross Handling/Global Hosting). |

**Instance fields read by this method:**

| Field | Type | Business Description |
|-------|------|---------------------|
| `koumoku_code_list` | `X33VDataTypeList` | List container for item code recurring entries |
| `koumoku_value_list` | `X33VDataTypeList` | List container for item value recurring entries |
| `getsu_ryokin_kmk_list` | `X33VDataTypeList` | List container for monthly charge item entries |
| `getsu_ryokin_list` | `X33VDataTypeList` | List container for monthly charge value entries |
| `shoki_hiyo_kmk_list` | `X33VDataTypeList` | List container for initial fee item entries |
| `shoki_hiyo_list` | `X33VDataTypeList` | List container for initial fee value entries |
| `getsu_ryokin_kei_list` | `X33VDataTypeList` | List container for monthly charge total entries |
| `getsu_ryokin_kei_zei_list` | `X33VDataTypeList` | List container for monthly charge total (tax-excluded) entries |
| `getsu_ryokin_kmk_sml_list` | `X33VDataTypeList` | List container for Smart Link monthly charge item entries |
| `getsu_ryokin_sml_list` | `X33VDataTypeList` | List container for Smart Link monthly charge entries |
| `shoki_hiyo_kmk_sml_list` | `X33VDataTypeList` | List container for Smart Link initial fee item entries |
| `shoki_hiyo_sml_list` | `X33VDataTypeList` | List container for Smart Link initial fee entries |
| `gtgk_wrib_mngn_tk_kikan_list` | `X33VDataTypeList` | List container for discount wording application period entries |
| `gtgk_wrib_mngn_wrib_nm_list` | `X33VDataTypeList` | List container for discount wording discount name entries |
| `gtgk_wrib_mngn_wrib_amnt_list` | `X33VDataTypeList` | List container for discount wording discount amount entries |
| `gtgk_wrib_mngn_biko_list` | `X33VDataTypeList` | List container for discount wording remarks entries |
| `getsu_ryokin_kei_title_list` | `X33VDataTypeList` | List container for monthly charge display title entries |
| `getsu_ryokin_kmk_gh_list` | `X33VDataTypeList` | List container for GH monthly charge item entries |
| `getsu_ryokin_gh_list` | `X33VDataTypeList` | List container for GH monthly charge entries |
| `shoki_hiyo_kmk_gh_list` | `X33VDataTypeList` | List container for GH initial fee item entries |
| `shoki_hiyo_gh_list` | `X33VDataTypeList` | List container for GH initial fee entries |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| D (Delegate) | `super.addListDataInstance` | (inherited from `X33VDataTypeList` base class) | - | Delegates to superclass for common-info-view keys starting with "//" — handles standard view data initialization |

This method is a **pure factory/bean operation** — it does not invoke any external SC (Service Component) or CBS (Business Service). All called operations are intra-bean: it initializes `X33VDataTypeList` containers, instantiates `X33VDataTypeStringBean` value objects, and performs list `add()` operations. The sole external call is the delegation to `super.addListDataInstance(key)` for common-info-view processing.

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| C (Internal) | `X33VDataTypeList.<init>()` | (framework) | - | Creates a new empty X33VDataTypeList (lazy initialization) |
| C (Internal) | `X33VDataTypeStringBean.<init>()` | (framework) | - | Creates a new String-type value holder bean for repeated item data |
| C (Internal) | `X33VDataTypeList.add(bean)` | (framework) | - | Appends the new bean instance to the list, creating a new row |
| D (Delegate) | `super.addListDataInstance(key)` | (inherited) | - | Falls through to parent class handling for common-info-view "//" prefixed keys |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Bean: `FUW00927SFBean.addListDataInstance()` (no-arg overload) | `FUW00927SFBean.addListDataInstance()` -> `FUW00927SFBean.addListDataInstance(key)` | Internal factory — no external SC/DB |

**Note:** The only direct caller found is a no-arg overload of `addListDataInstance()` within the same `FUW00927SFBean` class, which routes to this key-based overload with a specific item name string. This is an internal bean-level routing pattern.

## 6. Per-Branch Detail Blocks

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

> Null guard: returns -1 immediately when the key is null. The Japanese comment reads "nullの場合、-1で返す。" (If null, return -1.)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return -1;` // null guard — no item created |

**Block 2** — [ELSE-IF] `(key.startsWith("//"))` (L4677)

> Common info view handling: the Japanese comment reads "共通情報ビューの場合" (In case of common info view). Delegated to the superclass. The comment "共通情報ビューんリストは基底クラスで処理" (Common info view list is processed in the base class) indicates this is inherited framework behavior.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `super.addListDataInstance(key);` // delegate to superclass for "//"-prefixed common info keys |
| 2 | RETURN | `return super.addListDataInstance(key);` |

**Block 3** — [ELSE-IF] `(key.equals("項目コード"))` (L4682)

> Item code recurring item: data type is String. The Japanese comment reads "データタイプが String の繰り返し指定項目「項目コード」(項目ID:koumoku_code)" (Recurring item with String data type — "Item Code" (item ID: koumoku_code)).

| # | Type | Code |
|---|------|------|
| 1 | IF-Nested | `if (koumoku_code_list == null)` — list is null, new empty instance must be generated [-> "リストがnullの場合、新しい空のインスタンスを生成する" (If list is null, generate a new empty instance)] |
| 2 | SET | `koumoku_code_list = new X33VDataTypeList();` // create new list |
| 3 | IF-END | |
| 4 | SET | `X33VDataTypeStringBean tmpBean = new X33VDataTypeStringBean();` // String型繰り返し項目には、X33VDataTypeStringBeanのインスタンスを生成する (For String-type recurring items, generate X33VDataTypeStringBean instance) |
| 5 | CALL | `koumoku_code_list.add(tmpBean);` // append to list |
| 6 | RETURN | `return koumoku_code_list.size() - 1;` |

**Block 4** — [ELSE-IF] `(key.equals("値"))` (L4691)

> Item value recurring item: String data type. Comment: "データタイプが String の繰り返し指定項目「値」(項目ID:koumoku_value)" (Recurring item with String data type — "Value" (item ID: koumoku_value)).

| # | Type | Code |
|---|------|------|
| 1 | IF-Nested | `if (koumoku_value_list == null)` |
| 2 | SET | `koumoku_value_list = new X33VDataTypeList();` |
| 3 | IF-END | |
| 4 | SET | `X33VDataTypeStringBean tmpBean = new X33VDataTypeStringBean();` |
| 5 | CALL | `koumoku_value_list.add(tmpBean);` |
| 6 | RETURN | `return koumoku_value_list.size() - 1;` |

**Block 5** — [ELSE-IF] `(key.equals("月額料金項目"))` (L4700)

> Monthly charge item recurring item. Comment: "データタイプが String の繰り返し指定項目「月額料金項目」(項目ID:getsu_ryokin_kmk)" (Recurring item — "Monthly Charge Item" (item ID: getsu_ryokin_kmk)).

| # | Type | Code |
|---|------|------|
| 1 | IF-Nested | `if (getsu_ryokin_kmk_list == null)` |
| 2 | SET | `getsu_ryokin_kmk_list = new X33VDataTypeList();` |
| 3 | IF-END | |
| 4 | SET | `X33VDataTypeStringBean tmpBean = new X33VDataTypeStringBean();` |
| 5 | CALL | `getsu_ryokin_kmk_list.add(tmpBean);` |
| 6 | RETURN | `return getsu_ryokin_kmk_list.size() - 1;` |

**Block 6** — [ELSE-IF] `(key.equals("月額料金"))` (L4709)

> Monthly charge recurring item. Comment: "データタイプが String の繰り返し指定項目「月額料金」(項目ID:getsu_ryokin)" (Recurring item — "Monthly Charge" (item ID: getsu_ryokin)).

| # | Type | Code |
|---|------|------|
| 1 | IF-Nested | `if (getsu_ryokin_list == null)` |
| 2 | SET | `getsu_ryokin_list = new X33VDataTypeList();` |
| 3 | IF-END | |
| 4 | SET | `X33VDataTypeStringBean tmpBean = new X33VDataTypeStringBean();` |
| 5 | CALL | `getsu_ryokin_list.add(tmpBean);` |
| 6 | RETURN | `return getsu_ryokin_list.size() - 1;` |

**Block 7** — [ELSE-IF] `(key.equals("初期費用項目"))` (L4718)

> Initial fee item recurring item. Comment: "データタイプが String の繰り返し指定項目「初期費用項目」(項目ID:shoki_hiyo_kmk)" (Recurring item — "Initial Fee Item" (item ID: shoki_hiyo_kmk)).

| # | Type | Code |
|---|------|------|
| 1 | IF-Nested | `if (shoki_hiyo_kmk_list == null)` |
| 2 | SET | `shoki_hiyo_kmk_list = new X33VDataTypeList();` |
| 3 | IF-END | |
| 4 | SET | `X33VDataTypeStringBean tmpBean = new X33VDataTypeStringBean();` |
| 5 | CALL | `shoki_hiyo_kmk_list.add(tmpBean);` |
| 6 | RETURN | `return shoki_hiyo_kmk_list.size() - 1;` |

**Block 8** — [ELSE-IF] `(key.equals("初期費用"))` (L4727)

> Initial fee recurring item. Comment: "データタイプが String の繰り返し指定項目「初期費用」(項目ID:shoki_hiyo)" (Recurring item — "Initial Fee" (item ID: shoki_hiyo)).

| # | Type | Code |
|---|------|------|
| 1 | IF-Nested | `if (shoki_hiyo_list == null)` |
| 2 | SET | `shoki_hiyo_list = new X33VDataTypeList();` |
| 3 | IF-END | |
| 4 | SET | `X33VDataTypeStringBean tmpBean = new X33VDataTypeStringBean();` |
| 5 | CALL | `shoki_hiyo_list.add(tmpBean);` |
| 6 | RETURN | `return shoki_hiyo_list.size() - 1;` |

**Block 9** — [ELSE-IF] `(key.equals("月額料金計"))` (L4736)

> Monthly charge total recurring item. Comment: "データタイプが String の繰り返し指定項目「月額料金計」(項目ID:getsu_ryokin_kei)" (Recurring item — "Monthly Charge Total" (item ID: getsu_ryokin_kei)).

| # | Type | Code |
|---|------|------|
| 1 | IF-Nested | `if (getsu_ryokin_kei_list == null)` |
| 2 | SET | `getsu_ryokin_kei_list = new X33VDataTypeList();` |
| 3 | IF-END | |
| 4 | SET | `X33VDataTypeStringBean tmpBean = new X33VDataTypeStringBean();` |
| 5 | CALL | `getsu_ryokin_kei_list.add(tmpBean);` |
| 6 | RETURN | `return getsu_ryokin_kei_list.size() - 1;` |

**Block 10** — [ELSE-IF] `(key.equals("月額料金計（税抜）"))` (L4745)

> Monthly charge total (tax-excluded) recurring item. Comment: "データタイプが String の繰り返し指定項目「月額料金計（税抜）」(項目ID:getsu_ryokin_kei_zei)" (Recurring item — "Monthly Charge Total (tax-excluded)" (item ID: getsu_ryokin_kei_zei)).

| # | Type | Code |
|---|------|------|
| 1 | IF-Nested | `if (getsu_ryokin_kei_zei_list == null)` |
| 2 | SET | `getsu_ryokin_kei_zei_list = new X33VDataTypeList();` |
| 3 | IF-END | |
| 4 | SET | `X33VDataTypeStringBean tmpBean = new X33VDataTypeStringBean();` |
| 5 | CALL | `getsu_ryokin_kei_zei_list.add(tmpBean);` |
| 6 | RETURN | `return getsu_ryokin_kei_zei_list.size() - 1;` |

**Block 11** — [ELSE-IF] `(key.equals("月額料金項目（スマートリンク）"))` (L4754)

> Monthly charge item for Smart Link recurring. Comment: "データタイプが String の繰り返し指定項目「月額料金項目（スマートリンク）」(項目ID:getsu_ryokin_kmk_sml)" (Recurring item — "Monthly Charge Item (Smart Link)" (item ID: getsu_ryokin_kmk_sml)).

| # | Type | Code |
|---|------|------|
| 1 | IF-Nested | `if (getsu_ryokin_kmk_sml_list == null)` |
| 2 | SET | `getsu_ryokin_kmk_sml_list = new X33VDataTypeList();` |
| 3 | IF-END | |
| 4 | SET | `X33VDataTypeStringBean tmpBean = new X33VDataTypeStringBean();` |
| 5 | CALL | `getsu_ryokin_kmk_sml_list.add(tmpBean);` |
| 6 | RETURN | `return getsu_ryokin_kmk_sml_list.size() - 1;` |

**Block 12** — [ELSE-IF] `(key.equals("月額料金（スマートリンク）"))` (L4763)

> Monthly charge for Smart Link recurring. Comment: "データタイプが String の繰り返し指定項目「月額料金（スマートリンク）」(項目ID:getsu_ryokin_sml)" (Recurring item — "Monthly Charge (Smart Link)" (item ID: getsu_ryokin_sml)).

| # | Type | Code |
|---|------|------|
| 1 | IF-Nested | `if (getsu_ryokin_sml_list == null)` |
| 2 | SET | `getsu_ryokin_sml_list = new X33VDataTypeList();` |
| 3 | IF-END | |
| 4 | SET | `X33VDataTypeStringBean tmpBean = new X33VDataTypeStringBean();` |
| 5 | CALL | `getsu_ryokin_sml_list.add(tmpBean);` |
| 6 | RETURN | `return getsu_ryokin_sml_list.size() - 1;` |

**Block 13** — [ELSE-IF] `(key.equals("初期費用項目（スマートリンク）"))` (L4772)

> Initial fee item for Smart Link recurring. Comment: "データタイプが String の繰り返し指定項目「初期費用項目（スマートリンク）」(項目ID:shoki_hiyo_kmk_sml)" (Recurring item — "Initial Fee Item (Smart Link)" (item ID: shoki_hiyo_kmk_sml)).

| # | Type | Code |
|---|------|------|
| 1 | IF-Nested | `if (shoki_hiyo_kmk_sml_list == null)` |
| 2 | SET | `shoki_hiyo_kmk_sml_list = new X33VDataTypeList();` |
| 3 | IF-END | |
| 4 | SET | `X33VDataTypeStringBean tmpBean = new X33VDataTypeStringBean();` |
| 5 | CALL | `shoki_hiyo_kmk_sml_list.add(tmpBean);` |
| 6 | RETURN | `return shoki_hiyo_kmk_sml_list.size() - 1;` |

**Block 14** — [ELSE-IF] `(key.equals("初期費用（スマートリンク）"))` (L4781)

> Initial fee for Smart Link recurring. Comment: "データタイプが String の繰り返し指定項目「初期費用（スマートリンク）」(項目ID:shoki_hiyo_sml)" (Recurring item — "Initial Fee (Smart Link)" (item ID: shoki_hiyo_sml)).

| # | Type | Code |
|---|------|------|
| 1 | IF-Nested | `if (shoki_hiyo_sml_list == null)` |
| 2 | SET | `shoki_hiyo_sml_list = new X33VDataTypeList();` |
| 3 | IF-END | |
| 4 | SET | `X33VDataTypeStringBean tmpBean = new X33VDataTypeStringBean();` |
| 5 | CALL | `shoki_hiyo_sml_list.add(tmpBean);` |
| 6 | RETURN | `return shoki_hiyo_sml_list.size() - 1;` |

**Block 15** — [ELSE-IF] `(key.equals("月額料金割引文言適用期間"))` (L4790)

> Discount wording application period recurring item. Comment: "データタイプが String の繰り返し指定項目「月額料金割引文言適用期間」(項目ID:gtgk_wrib_mngn_tk_kikan)" (Recurring item — "Monthly Charge Discount Wording Application Period" (item ID: gtgk_wrib_mngn_tk_kikan)).

| # | Type | Code |
|---|------|------|
| 1 | IF-Nested | `if (gtgk_wrib_mngn_tk_kikan_list == null)` |
| 2 | SET | `gtgk_wrib_mngn_tk_kikan_list = new X33VDataTypeList();` |
| 3 | IF-END | |
| 4 | SET | `X33VDataTypeStringBean tmpBean = new X33VDataTypeStringBean();` |
| 5 | CALL | `gtgk_wrib_mngn_tk_kikan_list.add(tmpBean);` |
| 6 | RETURN | `return gtgk_wrib_mngn_tk_kikan_list.size() - 1;` |

**Block 16** — [ELSE-IF] `(key.equals("月額料金割引文言割引名"))` (L4799)

> Discount wording discount name recurring item. Comment: "データタイプが String の繰り返し指定項目「月額料金割引文言割引名」(項目ID:gtgk_wrib_mngn_wrib_nm)" (Recurring item — "Monthly Charge Discount Wording Discount Name" (item ID: gtgk_wrib_mngn_wrib_nm)).

| # | Type | Code |
|---|------|------|
| 1 | IF-Nested | `if (gtgk_wrib_mngn_wrib_nm_list == null)` |
| 2 | SET | `gtgk_wrib_mngn_wrib_nm_list = new X33VDataTypeList();` |
| 3 | IF-END | |
| 4 | SET | `X33VDataTypeStringBean tmpBean = new X33VDataTypeStringBean();` |
| 5 | CALL | `gtgk_wrib_mngn_wrib_nm_list.add(tmpBean);` |
| 6 | RETURN | `return gtgk_wrib_mngn_wrib_nm_list.size() - 1;` |

**Block 17** — [ELSE-IF] `(key.equals("月額料金割引文言割引額"))` (L4808)

> Discount wording discount amount recurring item. Comment: "データタイプが String の繰り返し指定項目「月額料金割引文言割引額」(項目ID:gtgk_wrib_mngn_wrib_amnt)" (Recurring item — "Monthly Charge Discount Wording Discount Amount" (item ID: gtgk_wrib_mngn_wrib_amnt)).

| # | Type | Code |
|---|------|------|
| 1 | IF-Nested | `if (gtgk_wrib_mngn_wrib_amnt_list == null)` |
| 2 | SET | `gtgk_wrib_mngn_wrib_amnt_list = new X33VDataTypeList();` |
| 3 | IF-END | |
| 4 | SET | `X33VDataTypeStringBean tmpBean = new X33VDataTypeStringBean();` |
| 5 | CALL | `gtgk_wrib_mngn_wrib_amnt_list.add(tmpBean);` |
| 6 | RETURN | `return gtgk_wrib_mngn_wrib_amnt_list.size() - 1;` |

**Block 18** — [ELSE-IF] `(key.equals("月額料金割引文言備考"))` (L4817)

> Discount wording remarks recurring item. Comment: "データタイプが String の繰り返し指定項目「月額料金割引文言備考」(項目ID:gtgk_wrib_mngn_biko)" (Recurring item — "Monthly Charge Discount Wording Remarks" (item ID: gtgk_wrib_mngn_biko)).

| # | Type | Code |
|---|------|------|
| 1 | IF-Nested | `if (gtgk_wrib_mngn_biko_list == null)` |
| 2 | SET | `gtgk_wrib_mngn_biko_list = new X33VDataTypeList();` |
| 3 | IF-END | |
| 4 | SET | `X33VDataTypeStringBean tmpBean = new X33VDataTypeStringBean();` |
| 5 | CALL | `gtgk_wrib_mngn_biko_list.add(tmpBean);` |
| 6 | RETURN | `return gtgk_wrib_mngn_biko_list.size() - 1;` |

**Block 19** — [ELSE-IF] `(key.equals("月額料金表示項目"))` (L4826)

> Monthly charge display title recurring item. Comment: "データタイプが String の繰り返し指定項目「月額料金表示項目」(項目ID:getsu_ryokin_kei_title)" (Recurring item — "Monthly Charge Display Item" (item ID: getsu_ryokin_kei_title)).

| # | Type | Code |
|---|------|------|
| 1 | IF-Nested | `if (getsu_ryokin_kei_title_list == null)` |
| 2 | SET | `getsu_ryokin_kei_title_list = new X33VDataTypeList();` |
| 3 | IF-END | |
| 4 | SET | `X33VDataTypeStringBean tmpBean = new X33VDataTypeStringBean();` |
| 5 | CALL | `getsu_ryokin_kei_title_list.add(tmpBean);` |
| 6 | RETURN | `return getsu_ryokin_kei_title_list.size() - 1;` |

**Block 20** — [ELSE-IF] `(key.equals("月額料金項目（GH）"))` (L4835)

> Monthly charge item for GH (Gross Handling/Global Hosting) recurring. Comment: "データタイプが String の繰り返し指定項目「月額料金項目（GH）」(項目ID:getsu_ryokin_kmk_gh)" (Recurring item — "Monthly Charge Item (GH)" (item ID: getsu_ryokin_kmk_gh)).

| # | Type | Code |
|---|------|------|
| 1 | IF-Nested | `if (getsu_ryokin_kmk_gh_list == null)` |
| 2 | SET | `getsu_ryokin_kmk_gh_list = new X33VDataTypeList();` |
| 3 | IF-END | |
| 4 | SET | `X33VDataTypeStringBean tmpBean = new X33VDataTypeStringBean();` |
| 5 | CALL | `getsu_ryokin_kmk_gh_list.add(tmpBean);` |
| 6 | RETURN | `return getsu_ryokin_kmk_gh_list.size() - 1;` |

**Block 21** — [ELSE-IF] `(key.equals("月額料金（GH）"))` (L4844)

> Monthly charge for GH recurring. Comment: "データタイプが String の繰り返し指定項目「月額料金（GH）」(項目ID:getsu_ryokin_gh)" (Recurring item — "Monthly Charge (GH)" (item ID: getsu_ryokin_gh)).

| # | Type | Code |
|---|------|------|
| 1 | IF-Nested | `if (getsu_ryokin_gh_list == null)` |
| 2 | SET | `getsu_ryokin_gh_list = new X33VDataTypeList();` |
| 3 | IF-END | |
| 4 | SET | `X33VDataTypeStringBean tmpBean = new X33VDataTypeStringBean();` |
| 5 | CALL | `getsu_ryokin_gh_list.add(tmpBean);` |
| 6 | RETURN | `return getsu_ryokin_gh_list.size() - 1;` |

**Block 22** — [ELSE-IF] `(key.equals("初期費用項目（GH）"))` (L4853)

> Initial fee item for GH recurring. Comment: "データタイプが String の繰り返し指定項目「初期費用項目（GH）」(項目ID:shoki_hiyo_kmk_gh)" (Recurring item — "Initial Fee Item (GH)" (item ID: shoki_hiyo_kmk_gh)).

| # | Type | Code |
|---|------|------|
| 1 | IF-Nested | `if (shoki_hiyo_kmk_gh_list == null)` |
| 2 | SET | `shoki_hiyo_kmk_gh_list = new X33VDataTypeList();` |
| 3 | IF-END | |
| 4 | SET | `X33VDataTypeStringBean tmpBean = new X33VDataTypeStringBean();` |
| 5 | CALL | `shoki_hiyo_kmk_gh_list.add(tmpBean);` |
| 6 | RETURN | `return shoki_hiyo_kmk_gh_list.size() - 1;` |

**Block 23** — [ELSE-IF] `(key.equals("初期費用（GH）"))` (L4862)

> Initial fee for GH recurring. Comment: "データタイプが String の繰り返し指定項目「初期費用（GH）」(項目ID:shoki_hiyo_gh)" (Recurring item — "Initial Fee (GH)" (item ID: shoki_hiyo_gh)).

| # | Type | Code |
|---|------|------|
| 1 | IF-Nested | `if (shoki_hiyo_gh_list == null)` |
| 2 | SET | `shoki_hiyo_gh_list = new X33VDataTypeList();` |
| 3 | IF-END | |
| 4 | SET | `X33VDataTypeStringBean tmpBean = new X33VDataTypeStringBean();` |
| 5 | CALL | `shoki_hiyo_gh_list.add(tmpBean);` |
| 6 | RETURN | `return shoki_hiyo_gh_list.size() - 1;` |

**Block 24** — [ELSE / DEFAULT — implicit fallthrough] (L4871)

> No matching item name: the Japanese comment reads "該当する項目がない場合、-1を返す" (If no matching item, return -1).

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return -1;` // No matching item name found — return sentinel value |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `koumoku_code` | Field | Item code — identifier for a repeated item entry in the charge breakdown |
| `koumoku_value` | Field | Item value — the String value associated with a repeated item |
| `getsu_ryokin` | Field | Monthly charge (月額料金) — the recurring monthly service fee amount |
| `getsu_ryokin_kmk` | Field | Monthly charge item (月額料金項目) — label/description field for a monthly charge row |
| `getsu_ryokin_kei` | Field | Monthly charge total (月額料金計) — sum total of monthly charges |
| `getsu_ryokin_kei_zei` | Field | Monthly charge total tax-excluded (月額料金計（税抜）) — total excluding consumption tax |
| `getsu_ryokin_kei_title` | Field | Monthly charge display title (月額料金表示項目) — header/title for the monthly charge section |
| `shoki_hiyo` | Field | Initial fee (初期費用) — one-time setup/registration fee |
| `shoki_hiyo_kmk` | Field | Initial fee item (初期費用項目) — label/description field for an initial fee row |
| `gtgk_wrib_mngn_tk_kikan` | Field | Discount wording application period (月額料金割引文言適用期間) — time range during which a discount description is valid |
| `gtgk_wrib_mngn_wrib_nm` | Field | Discount wording discount name (月額料金割引文言割引名) — display name of a discount (e.g., "Member Discount") |
| `gtgk_wrib_mngn_wrib_amnt` | Field | Discount wording discount amount (月額料金割引文言割引額) — monetary value of a discount |
| `gtgk_wrib_mngn_biko` | Field | Discount wording remarks (月額料金割引文言備考) — additional notes about a discount |
| SMART LINK | Business term | Smart Link — a bundled telecom service offering (likely NTT's bundled mobile/broadband plan) |
| GH | Business term | Gross Handling / Global Hosting — a service tier or partner category for enterprise/hosting plans |
| X33VDataTypeList | Framework class | A typed list container for repeated (recurring) view data in the X33 framework |
| X33VDataTypeStringBean | Framework class | A value-holding bean for String-type repeated data items in the X33 view framework |
| 繰り返し指定項目 | Business term | Repeated/recursive specified item — a field that can appear multiple times in a table (e.g., multiple line items in an invoice) |
| 共通情報ビュー | Business term | Common info view — shared view data for cross-screen common information, handled by the base class |
| 税抜 | Business term | Tax-excluded — amounts excluding consumption tax (Japanese consumption tax is typically 10%) |
| 項目コード | Business term | Item code — the key identifier for each row in a repeated item table |
| 項目名 | Business term | Item name — the business label used to identify a data field (the `key` parameter) |
