# Business Logic — KKW01031SF01DBean.loadModelData() [100 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKW01031SF.KKW01031SF01DBean` |
| Layer | View / Data-Binding Bean (webview package — implements X33 framework bean interfaces) |
| Module | `KKW01031SF` (Package: `eo.web.webview.KKW01031SF`) |

## 1. Role

### KKW01031SF01DBean.loadModelData()

This method serves as the central data-retrieval dispatcher for the KKW01031SF screen bean. It implements the X33 framework's `X33VDataTypeBeanInterface.loadModelData` contract, enabling the framework to resolve any field value on the bean by looking up a composite key string. In business terms, it provides uniform access to all seven data elements managed by this bean: the system ID (SYSID), the service contract number (サービス契約番号 — Service Contract Number), the transfer division code (異動区分 — Transfer/Modification Division), the transfer reason code list (異動理由コード — Transfer Reason Code), the transfer reason memo (異動理由メモ — Transfer Reason Memo), the application number (申請番号 — Application Number), and the application detail number (申請明細番号 — Application Detail Number). Each data item is dispatched to a getter method based on the `key` parameter, and the `subkey` parameter (typically `"value"` or `"state"`) determines whether the raw data value or the associated update-state flag is returned. The method acts as a read-only bridge between the X33 view framework's generic data-binding mechanism and the bean's strongly-typed domain fields. Notably, the Transfer Reason Code branch (`"異動理由コード"`) is a special indexed-list case: it supports retrieving the total count of list items when `subkey` is `"*"` via the `"key/"` prefix pattern, or fetching a specific list element's subfield via integer index delegation. This makes the method both a framework adapter and a domain data accessor for a service modification (異動 — Transfer/Modification) screen.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["loadModelData key, subkey"])
    COND_NULL["key is null or subkey is null"]
    NULL_RETURN(["return null"])
    SEP["sepPoint = key indexOf slash"]
    COND_SYSID["key equals SYSID"]
    SYSID_VALUE["subkey equalsIgnoreCase value"]
    SYSID_STATE["subkey equalsIgnoreCase state"]
    SYSID_VAL_RETURN(["return getSysid_value"])
    SYSID_STATE_RETURN(["return getSysid_state"])
    COND_SVC["key equals Service Contract No"]
    SVC_VALUE["subkey equalsIgnoreCase value"]
    SVC_STATE["subkey equalsIgnoreCase state"]
    SVC_VAL_RETURN(["return getSvc_kei_no_value"])
    SVC_STATE_RETURN(["return getSvc_kei_no_state"])
    COND_IDO_DIV["key equals Transfer Division"]
    IDO_DIV_VALUE["subkey equalsIgnoreCase value"]
    IDO_DIV_STATE["subkey equalsIgnoreCase state"]
    IDO_DIV_VAL_RETURN(["return getIdo_div_value"])
    IDO_DIV_STATE_RETURN(["return getIdo_div_state"])
    COND_IDO_RSN_CD["key equals Transfer Reason Code"]
    SUBSTR["key = key substring after slash"]
    COND_STAR["key equals asterisk"]
    STAR_RETURN(["return list size as Integer"])
    TRY_PARSE["tmpIndexInt = Integer.valueOf key"]
    CATCH_PARSE(["catch NumberFormatException: return null"])
    COND_IDX_NULL["tmpIndexInt is null"]
    IDX_NULL_RETURN(["return null"])
    COND_IDX_RANGE["tmpIndex out of list range"]
    IDX_RANGE_RETURN(["return null"])
    IDX_RETURN(["return X33VDataTypeStringBean loadModelData subkey"])
    COND_IDO_RSN_MEMO["key equals Transfer Reason Memo"]
    IDO_MEMO_VALUE["subkey equalsIgnoreCase value"]
    IDO_MEMO_STATE["subkey equalsIgnoreCase state"]
    MEMO_VAL_RETURN(["return getIdo_rsn_memo_value"])
    MEMO_STATE_RETURN(["return getIdo_rsn_memo_state"])
    COND_MSKM_NO["key equals Application No"]
    MSKM_NO_VALUE["subkey equalsIgnoreCase value"]
    MSKM_NO_STATE["subkey equalsIgnoreCase state"]
    MSKM_NO_VAL_RETURN(["return getMskm_no_value"])
    MSKM_NO_STATE_RETURN(["return getMskm_no_state"])
    COND_MSKM_DTL["key equals Application Detail No"]
    MSKM_DTL_VALUE["subkey equalsIgnoreCase value"]
    MSKM_DTL_STATE["subkey equalsIgnoreCase state"]
    MSKM_DTL_VAL_RETURN(["return getMskm_dtl_no_value"])
    MSKM_DTL_STATE_RETURN(["return getMskm_dtl_no_state"])
    FINAL_RETURN(["return null"])
    START --> COND_NULL
    COND_NULL -->|true| NULL_RETURN
    COND_NULL -->|false| SEP
    SEP --> COND_SYSID
    COND_SYSID -->|true| SYSID_VALUE
    COND_SYSID -->|false| COND_SVC
    SYSID_VALUE -->|true| SYSID_VAL_RETURN
    SYSID_VALUE -->|false| SYSID_STATE
    SYSID_STATE -->|true| SYSID_STATE_RETURN
    SYSID_STATE -->|false| SYSID_STATE_RETURN
    COND_SVC -->|true| SVC_VALUE
    COND_SVC -->|false| COND_IDO_DIV
    SVC_VALUE -->|true| SVC_VAL_RETURN
    SVC_VALUE -->|false| SVC_STATE
    SVC_STATE -->|true| SVC_STATE_RETURN
    SVC_STATE -->|false| SVC_STATE_RETURN
    COND_IDO_DIV -->|true| IDO_DIV_VALUE
    COND_IDO_DIV -->|false| COND_IDO_RSN_CD
    IDO_DIV_VALUE -->|true| IDO_DIV_VAL_RETURN
    IDO_DIV_VALUE -->|false| IDO_DIV_STATE
    IDO_DIV_STATE -->|true| IDO_DIV_STATE_RETURN
    IDO_DIV_STATE -->|false| IDO_DIV_STATE_RETURN
    COND_IDO_RSN_CD -->|true| SUBSTR
    COND_IDO_RSN_CD -->|false| COND_IDO_RSN_MEMO
    SUBSTR --> COND_STAR
    COND_STAR -->|true| STAR_RETURN
    COND_STAR -->|false| TRY_PARSE
    TRY_PARSE --> CATCH_PARSE
    TRY_PARSE --> COND_IDX_NULL
    COND_IDX_NULL -->|true| IDX_NULL_RETURN
    COND_IDX_NULL -->|false| COND_IDX_RANGE
    COND_IDX_RANGE -->|true| IDX_RANGE_RETURN
    COND_IDX_RANGE -->|false| IDX_RETURN
    COND_IDO_RSN_MEMO -->|true| IDO_MEMO_VALUE
    COND_IDO_RSN_MEMO -->|false| COND_MSKM_NO
    IDO_MEMO_VALUE -->|true| MEMO_VAL_RETURN
    IDO_MEMO_VALUE -->|false| IDO_MEMO_STATE
    IDO_MEMO_STATE -->|true| MEMO_STATE_RETURN
    IDO_MEMO_STATE -->|false| MEMO_STATE_RETURN
    COND_MSKM_NO -->|true| MSKM_NO_VALUE
    COND_MSKM_NO -->|false| COND_MSKM_DTL
    MSKM_NO_VALUE -->|true| MSKM_NO_VAL_RETURN
    MSKM_NO_VALUE -->|false| MSKM_NO_STATE
    MSKM_NO_STATE -->|true| MSKM_NO_STATE_RETURN
    MSKM_NO_STATE -->|false| MSKM_NO_STATE_RETURN
    COND_MSKM_DTL -->|true| MSKM_DTL_VALUE
    COND_MSKM_DTL -->|false| FINAL_RETURN
    MSKM_DTL_VALUE -->|true| MSKM_DTL_VAL_RETURN
    MSKM_DTL_VALUE -->|false| MSKM_DTL_STATE
    MSKM_DTL_STATE -->|true| MSKM_DTL_STATE_RETURN
    MSKM_DTL_STATE -->|false| MSKM_DTL_STATE_RETURN
```

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | The business field identifier that specifies which data element to retrieve. It carries the name of one of seven managed fields: `"SYSID"` (system ID), `"サービス契約番号"` (Service Contract Number — the contracted service line identifier), `"異動区分"` (Transfer Division — the type/category of service modification), `"異動理由コード"` (Transfer Reason Code — a reason for the transfer, stored as an indexed list), `"異動理由メモ"` (Transfer Reason Memo — free-text reason description), `"申請番号"` (Application Number — the main application/requisition ID), or `"申請明細番号"` (Application Detail Number — the line-item detail ID within an application). For the Transfer Reason Code list item, the format is `"key/subkey"` with a slash separator to encode an array index. |
| 2 | `subkey` | `String` | A qualifier that determines what aspect of the identified field to return. For most fields, it is `"value"` (returns the raw string data) or `"state"` (returns the associated update-state flag). For the Transfer Reason Code list, `subkey` is ignored in the indexed-lookup branch and instead is forwarded to the individual list element's `loadModelData(subkey)` method. When `subkey` is `"*"`, the Transfer Reason Code branch returns the list size as an `Integer`. |

**Instance fields / external state read by this method:**

| Field | Type | Business Description |
|-------|------|---------------------|
| `ido_rsn_cd_list` | `X33VDataTypeList` | The list of Transfer Reason Code items (X33VDataTypeStringBean elements), representing the set of all modification reasons selected or displayed on the screen. |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `getSysid_value` | KKW01031SF01DBean | - | Returns the system ID string value |
| R | `getSysid_state` | KKW01031SF01DBean | - | Returns the system ID update-state flag |
| R | `getSvc_kei_no_value` | KKW01031SF01DBean | - | Returns the service contract number string value |
| R | `getSvc_kei_no_state` | KKW01031SF01DBean | - | Returns the service contract number update-state flag |
| R | `getIdo_div_value` | KKW01031SF01DBean | - | Returns the transfer division code string value |
| R | `getIdo_div_state` | KKW01031SF01DBean | - | Returns the transfer division update-state flag |
| R | `getIdo_rsn_memo_value` | KKW01031SF01DBean | - | Returns the transfer reason memo string value |
| R | `getIdo_rsn_memo_state` | KKW01031SF01DBean | - | Returns the transfer reason memo update-state flag |
| R | `getMskm_no_value` | KKW01031SF01DBean | - | Returns the application number string value |
| R | `getMskm_no_state` | KKW01031SF01DBean | - | Returns the application number update-state flag |
| R | `getMskm_dtl_no_value` | KKW01031SF01DBean | - | Returns the application detail number string value |
| R | `getMskm_dtl_no_state` | KKW01031SF01DBean | - | Returns the application detail number update-state flag |
| R | `KKW01031SF01DBean.loadModelData` | KKW01031SF01DBean | - | Recursive delegation to an individual list element (X33VDataTypeStringBean) for Transfer Reason Code index lookup |
| R | `ido_rsn_cd_list.size` | KKW01031SF01DBean | - | Returns the count of items in the Transfer Reason Code list |

All operations are **Read** (R). This method is purely a data accessor — it does not write, create, update, or delete any data. It reads from instance fields (String values and state flags) and from the `ido_rsn_cd_list` data structure, acting as the single public read-entry point for the bean's data model.

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Bean:KKW01031SFBean | `KKW01031SFBean` creates `KKW01031SF01DBean` instance; framework invokes `loadModelData` during X33 data-binding lifecycle | `getSysid_value [R] sysid_value field`, `getSvc_kei_no_value [R] svc_kei_no_value field`, `getIdo_div_value [R] ido_div_value field`, `getMskm_no_value [R] mskm_no_value field`, `getMskm_dtl_no_value [R] mskm_dtl_no_value field` |

**Notes:**
- The no-parameter overload `KKW01031SF01DBean.loadModelData()` (a separate method in the same class that likely delegates to the parent `X31CBaseBean.loadModelData()`) is the only direct caller referenced in the code graph. It likely serves as the framework's entry point when no key/subkey is supplied.
- The X33 framework's generic data-binding mechanism calls `loadModelData(key, subkey)` directly on this bean during view rendering and form submission processing.
- The parent bean `KKW01031SFBean` creates instances of `KKW01031SF01DBean` (see `KKW01031SFBean.java` lines 97, 1177, 1183) and the framework routes `loadModelData` calls through the list-bean interface to resolve nested element data.

## 6. Per-Branch Detail Blocks

**Block 1** — [IF-NULL] null guard (L257)

> Guard clause: if either key or subkey is null, return null immediately. (key,subkeyがnullの場合、nullを返す — If key/subkey is null, return null)

| # | Type | Code |
|---|------|------|
| 1 | COND | `if (key == null || subkey == null)` |
| 2 | RETURN | `return null;` |

---

**Block 2** — [PROCESS] Compute slash separator position (L262)

> Compute the index of the "/" character within the key. This is used later for the Transfer Reason Code branch to extract a sub-element from a slash-delimited composite key. (項目ごとに入力を入れる — Per item, input the processing)

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

---

**Block 3** — [IF-ELSEIF] SYSID (System ID) handling (L265)

> Handle the SYSID (システムID) data type — a String field identified by the literal key `"SYSID"`. (データタイプがStringの項目"SYSID" (項目ID:sysid) — Data type is String item "SYSID" (item ID: sysid))

**Block 3.1** — [IF] subkey equals "value" (L266)

| # | Type | Code |
|---|------|------|
| 1 | COND | `if (subkey.equalsIgnoreCase("value"))` |
| 2 | CALL | `return getSysid_value();` |

**Block 3.2** — [ELSEIF] subkey equals "state" (L269)

> When subkey is "state", return the update-state flag. (subkeyが"state"の場合、ステータスを返す — If subkey is "state", return the status)

| # | Type | Code |
|---|------|------|
| 1 | COND | `else if (subkey.equalsIgnoreCase("state"))` |
| 2 | CALL | `return getSysid_state();` |

---

**Block 4** — [ELSEIF] Service Contract Number handling (L275)

> Handle the Service Contract Number (サービス契約番号 — service contract number) data type, identified by the key `"サービス契約番号"`. (データタイプがStringの項目"サービス契約番号" (項目ID:svc_kei_no) — Data type is String item "Service Contract Number" (item ID: svc_kei_no))

**Block 4.1** — [IF] subkey equals "value" (L276)

| # | Type | Code |
|---|------|------|
| 1 | COND | `if (subkey.equalsIgnoreCase("value"))` |
| 2 | CALL | `return getSvc_kei_no_value();` |

**Block 4.2** — [ELSEIF] subkey equals "state" (L279)

> Return the update-state flag. (subkeyが"state"の場合、ステータスを返す — If subkey is "state", return the status)

| # | Type | Code |
|---|------|------|
| 1 | COND | `else if (subkey.equalsIgnoreCase("state"))` |
| 2 | CALL | `return getSvc_kei_no_state();` |

---

**Block 5** — [ELSEIF] Transfer Division handling (L285)

> Handle the Transfer Division (異動区分 — modification/transfers division category) data type, identified by the key `"異動区分"`. (データタイプがStringの項目"異動区分" (項目ID:ido_div) — Data type is String item "Transfer Division" (item ID: ido_div))

**Block 5.1** — [IF] subkey equals "value" (L286)

| # | Type | Code |
|---|------|------|
| 1 | COND | `if (subkey.equalsIgnoreCase("value"))` |
| 2 | CALL | `return getIdo_div_value();` |

**Block 5.2** — [ELSEIF] subkey equals "state" (L289)

> Return the update-state flag. (subkeyが"state"の場合、ステータスを返す — If subkey is "state", return the status)

| # | Type | Code |
|---|------|------|
| 1 | COND | `else if (subkey.equalsIgnoreCase("state"))` |
| 2 | CALL | `return getIdo_div_state();` |

---

**Block 6** — [ELSEIF] Transfer Reason Code list handling (L295)

> Handle the Transfer Reason Code (異動理由コード — modification reason code) data type. This is the most complex branch: the key uses a slash-delimited format `"key/index"` where the portion after "/" is either `"*"` (to get the list size) or an integer index into the `ido_rsn_cd_list`. (配列項目 "異動理由コード" (String型、項目ID:ido_rsn_cd) — Array item "Transfer Reason Code" (String type, item ID: ido_rsn_cd))

**Block 6.1** — [EXEC] Extract sub-element from key (L297)

> Extract the element after the slash. (keyの次の要素を取得 — Get the next element of key)

| # | Type | Code |
|---|------|------|
| 1 | SET | `key = key.substring(separaterPoint + 1)` // Extract sub-element after slash |

**Block 6.2** — [IF] sub-element is "*" — return list count (L299)

> When "*", return the list size as Integer. (インデックス値の代わりに"*"が指定されていたら、リストの要素数を返す — If "*" is specified instead of an index value, return the number of list elements)

| # | Type | Code |
|---|------|------|
| 1 | COND | `if (key.equals("*"))` |
| 2 | RETURN | `return Integer.valueOf(ido_rsn_cd_list.size());` |

**Block 6.3** — [TRY-CATCH] Parse index from key (L302)

**Block 6.3.1** — [TRY] Convert key to integer index (L303)

| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpIndexInt = Integer.valueOf(key)` |

**Block 6.3.2** — [CATCH] NumberFormatException (L306)

> Non-numeric sub-element returns null. (インデックス値が数値文字列でない場合は、ここでnullを返す — If the index value is not a numeric string, return null here)

| # | Type | Code |
|---|------|------|
| 1 | CATCH | `catch (NumberFormatException e) { return null; }` |

**Block 6.3.3** — [IF] tmpIndexInt is null (L310)

| # | Type | Code |
|---|------|------|
| 1 | COND | `if (tmpIndexInt == null)` |
| 2 | RETURN | `return null;` |

**Block 6.3.4** — [IF] Index out of range (L313)

> Validate the integer index is within list bounds. (インデックス値がリスト個数-1を超える場合、ここでnullを返す — If the index value exceeds the list count minus 1, return null here)

| # | Type | Code |
|---|------|------|
| 1 | SET | `int tmpIndex = tmpIndexInt.intValue()` |
| 2 | COND | `if (tmpIndex < 0 || tmpIndex >= ido_rsn_cd_list.size())` |
| 3 | RETURN | `return null;` |

**Block 6.3.5** — [RETURN] Delegate to list element (L315)

> Cast the list element at the index to `X33VDataTypeStringBean` and call its `loadModelData(subkey)` to get the subfield.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `return ((X33VDataTypeStringBean)ido_rsn_cd_list.get(tmpIndex)).loadModelData(subkey);` |

---

**Block 7** — [ELSEIF] Transfer Reason Memo handling (L319)

> Handle the Transfer Reason Memo (異動理由メモ — modification reason free-text memo) data type, identified by the key `"異動理由メモ"`. (データタイプがStringの項目"異動理由メモ" (項目ID:ido_rsn_memo) — Data type is String item "Transfer Reason Memo" (item ID: ido_rsn_memo))

**Block 7.1** — [IF] subkey equals "value" (L320)

| # | Type | Code |
|---|------|------|
| 1 | COND | `if (subkey.equalsIgnoreCase("value"))` |
| 2 | CALL | `return getIdo_rsn_memo_value();` |

**Block 7.2** — [ELSEIF] subkey equals "state" (L323)

> Return the update-state flag. (subkeyが"state"の場合、ステータスを返す — If subkey is "state", return the status)

| # | Type | Code |
|---|------|------|
| 1 | COND | `else if (subkey.equalsIgnoreCase("state"))` |
| 2 | CALL | `return getIdo_rsn_memo_state();` |

---

**Block 8** — [ELSEIF] Application Number handling (L329)

> Handle the Application Number (申請番号 — application/requisition number) data type, identified by the key `"申請番号"`. (データタイプがStringの項目"申請番号" (項目ID:mskm_no) — Data type is String item "Application Number" (item ID: mskm_no))

**Block 8.1** — [IF] subkey equals "value" (L330)

| # | Type | Code |
|---|------|------|
| 1 | COND | `if (subkey.equalsIgnoreCase("value"))` |
| 2 | CALL | `return getMskm_no_value();` |

**Block 8.2** — [ELSEIF] subkey equals "state" (L333)

> Return the update-state flag. (subkeyが"state"の場合、ステータスを返す — If subkey is "state", return the status)

| # | Type | Code |
|---|------|------|
| 1 | COND | `else if (subkey.equalsIgnoreCase("state"))` |
| 2 | CALL | `return getMskm_no_state();` |

---

**Block 9** — [ELSEIF] Application Detail Number handling (L339)

> Handle the Application Detail Number (申請明細番号 — application line-item detail number) data type, identified by the key `"申請明細番号"`. (データタイプがStringの項目"申請明細番号" (項目ID:mskm_dtl_no) — Data type is String item "Application Detail Number" (item ID: mskm_dtl_no))

**Block 9.1** — [IF] subkey equals "value" (L340)

| # | Type | Code |
|---|------|------|
| 1 | COND | `if (subkey.equalsIgnoreCase("value"))` |
| 2 | CALL | `return getMskm_dtl_no_value();` |

**Block 9.2** — [ELSEIF] subkey equals "state" (L343)

> Return the update-state flag. (subkeyが"state"の場合、ステータスを返す — If subkey is "state", return the status)

| # | Type | Code |
|---|------|------|
| 1 | COND | `else if (subkey.equalsIgnoreCase("state"))` |
| 2 | CALL | `return getMskm_dtl_no_state();` |

---

**Block 10** — [ELSE] No matching key found (L348)

> A matching property does not exist. Return null. (条件に一致するプロパティが存在しない場合は、nullを返す — If no property matches the condition, return null)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null;` |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `sysid` | Field | System ID — the unique identifier for the system or session context in the modification workflow |
| `svc_kei_no` | Field | Service Contract Number — the contracted service line identifier that tracks which service package is being modified |
| `ido_div` | Field | Transfer Division (異動区分) — the category/type of service modification (e.g., add, cancel, change) being performed |
| `ido_rsn_cd` | Field | Transfer Reason Code (異動理由コード) — a code specifying why the modification is being made; stored as a list of X33VDataTypeStringBean elements |
| `ido_rsn_memo` | Field | Transfer Reason Memo (異動理由メモ) — free-text description of the modification reason |
| `mskm_no` | Field | Application Number (申請番号) — the main application/requisition ID for the service modification request |
| `mskm_dtl_no` | Field | Application Detail Number (申請明細番号) — the line-item detail ID within an application, used when a single application contains multiple service lines |
| `ido_rsn_cd_list` | Field | Transfer Reason Code List — an `X33VDataTypeList` containing the list of modification reason code beans |
| `_update` suffix | Field | Update-state flag — each data field has a corresponding `_update` field (e.g., `sysid_update`) that tracks whether the value has been modified by the user |
| `_state` suffix | Field | Update-state flag (state variant) — each data field has a `_state` field that indicates the current UI/data state of the field |
| `_value` suffix | Field | Data value field — contains the actual string data for the corresponding field |
| `X33` | Acronym | Fujitsu's Web Client Framework (X33) — an enterprise Java web application framework for building screen-based applications |
| `X33VDataTypeBeanInterface` | Interface | X33 framework interface that requires `loadModelData` implementation for data binding |
| `X33VListedBeanInterface` | Interface | X33 framework interface for beans that can be used as list elements |
| `X33VDataTypeList` | Class | X33 framework class representing a typed list data structure for collection fields |
| `X33VDataTypeStringBean` | Class | X33 framework bean wrapper for String-typed data elements within lists |
| FTTH | Business term | Fiber To The Home — fiber-optic internet service; context from module naming (K-Opticom is a telecom ISP) |
| 異動 (Ido) | Japanese term | Transfer/Modification — refers to service contract changes (add, cancel, switch) in telecom service management |
| KKW01031SF | Module | A screen module within the K-Opticom web application for handling service modification (異動) operations |
