# Business Logic — JKKSvkeiShosaClCC.editMapShosaClHTel() [206 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `com.fujitsu.futurity.bp.custom.common.JKKSvkeiShosaClCC` |
| Layer | CC/Common Component — `com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent` |
| Module | `common` (Package: `com.fujitsu.futurity.bp.custom.common`) |

## 1. Role

### JKKSvkeiShosaClCC.editMapShosaClHTel()

This method is the dedicated mapping handler for **review cancellation** (照査取消) of **eo Hikari Denwa** (eo Fiber Phone) service contracts within the K-Opticom customer infrastructure system. When a user initiates a review cancellation screen, this method is responsible for assembling structured cancellation-mapping result data across all six business entity types associated with the eo Fiber Phone subscription: the service contract itself, service contract details, optional service contracts (telephone), sub-optional service contracts (telephone), device option service contracts, and the service contract work project list (for VLAN data reception). It operates as a **routing/dispatcher pattern**: it extracts pre-loaded inquiry data from the `rsltShokai` result map, iterates over each entity's row set, extracts child CAANMsg templates via `getWorkData`, delegates per-row template mapping to the appropriate `shosaClMapper` method (e.g. `editInMsgEKK0111C070`), normalizes the result through `editInMsgCmn`, and collects all processed rows into a `HashMap<String, Object>` result keyed by the corresponding cancellation map key. It is called from the CBS layer method `runSvkeiShosaCl()` and acts as a shared component for the review cancellation screen flow, producing the data structure that the presentation layer uses to render the cancellation summary. The method processes all six entity types **unconditionally** (each branch is optional — if the entity array is null, an empty list is stored) except for the device option service contract (Block 5), which applies additional filtering on service status and service code, and the work project list (Block 6), which applies null/empty checks on the work project number and VLAN target service detail number.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["editMapShosaClHTel params"])
    
    START --> R1["R1: Retrieve work arrays from rsltShokai"]
    
    R1 --> R1A["Get workEKK0111A010Array"]
    R1 --> R1B["Get workEKK0191A010Array"]
    R1 --> R1C["Get workEKK0371A010Array"]
    R1 --> R1D["Get workEKK0431A010Array"]
    R1 --> R1E["Get workEKU0081B020Array"]
    R1 --> R1F["Get workEKK2811A010Array"]
    
    R1A --> PROC1["Block 1: Service Contract eo Fiber Phone Review Cancellation"]
    R1B --> PROC2["Block 2: Service Contract Details eo Fiber Phone Review Cancellation"]
    R1C --> PROC3["Block 3: Optional Service Contract Telephone Review Cancellation"]
    R1D --> PROC4["Block 4: Sub-Optional Service Contract Telephone Review Cancellation"]
    R1F --> PROC5["Block 5: Device Option Service Contract Review Cancellation"]
    R1E --> PROC6["Block 6: Service Contract Work Project List Review Cancellation"]
    
    PROC1 --> LOOP1{"workEKK0111A010Array != null?"}
    LOOP1 -->|Yes| INNER1["For each row in workEKK0111A010Array"]
    INNER1 --> EXTRACT1["getWorkData EKK0111A010CBSMSG1LIST"]
    EXTRACT1 --> INNERLOOP1["For each childTemplate"]
    INNERLOOP1 --> MAP1["shosaClMapper.editInMsgEKK0111C070"]
    MAP1 --> EDIT1["editInMsgCmn param wkCaanMsgList.get(0)"]
    EDIT1 --> ADD1["wkMapArray.add rslt"]
    ADD1 --> STORE1["rsltShosaMap.put EKK0111C070 wkMapArray"]
    LOOP1 -->|No| STORE1
    
    PROC2 --> LOOP2{"workEKK0191A010Array != null?"}
    LOOP2 -->|Yes| INNER2["For each row in workEKK0191A010Array"]
    INNER2 --> EXTRACT2["getWorkData EKK0191A010CBSMSG1LIST"]
    EXTRACT2 --> INNERLOOP2["For each childTemplate"]
    INNERLOOP2 --> MAP2["shosaClMapper.editInMsgEKK0191C120"]
    MAP2 --> EDIT2["editInMsgCmn param wkCaanMsgList.get(0)"]
    EDIT2 --> ADD2["wkMapArray.add rslt"]
    ADD2 --> STORE2["rsltShosaMap.put EKK0191C120 wkMapArray"]
    LOOP2 -->|No| STORE2
    
    PROC3 --> LOOP3{"workEKK0371A010Array != null?"}
    LOOP3 -->|Yes| INNER3["For each row in workEKK0371A010Array"]
    INNER3 --> EXTRACT3["getWorkData EKK0371A010CBSMSG1LIST"]
    EXTRACT3 --> INNERLOOP3["For each childTemplate"]
    INNERLOOP3 --> MAP3["shosaClMapper.editInMsgEKK0371C120"]
    MAP3 --> EDIT3["editInMsgCmn param wkCaanMsgList.get(0)"]
    EDIT3 --> ADD3["wkMapArray.add rslt"]
    ADD3 --> STORE3["rsltShosaMap.put EKK0371C120 wkMapArray"]
    LOOP3 -->|No| STORE3
    
    PROC4 --> LOOP4{"workEKK0431A010Array != null?"}
    LOOP4 -->|Yes| INNER4["For each row in workEKK0431A010Array"]
    INNER4 --> EXTRACT4["getWorkData EKK0431A010CBSMSG1LIST"]
    EXTRACT4 --> INNERLOOP4["For each childTemplate"]
    INNERLOOP4 --> MAP4["shosaClMapper.editInMsgEKK0431C080"]
    MAP4 --> EDIT4["editInMsgCmn param wkCaanMsgList.get(0)"]
    EDIT4 --> ADD4["wkMapArray.add rslt"]
    ADD4 --> STORE4["rsltShosaMap.put EKK0431C080 wkMapArray"]
    LOOP4 -->|No| STORE4
    
    PROC5 --> LOOP5{"workEKK2811A010Array != null?"}
    LOOP5 -->|Yes| INNER5["For each row in workEKK2811A010Array"]
    INNER5 --> EXTRACT5["getWorkData EKK2811A010CBSMSG1LIST"]
    EXTRACT5 --> INNERLOOP5["For each childTemplate"]
    INNERLOOP5 --> STATUSCHK{"isChkSvcKeiStat KKOP_SVC_KEI_STAT?"}
    STATUSCHK -->|Yes| SVCCHK{"svcCd == SVC_CD_NET 01 AND KKOP_SVC_CD == G01
OR svcCd == SVC_CD_TEL 02 AND KKOP_SVC_CD == G02?"}
    SVCCHK -->|Yes| MAP5["shosaClMapper.editInMsgEKK2811C060"]
    SVCCHK -->|No| ENDINNER5["End inner loop j"]
    MAP5 --> EDIT5["editInMsgCmn param wkCaanMsgList.get(0)"]
    EDIT5 --> ADD5["wkMapArray.add rslt"]
    ADD5 --> ENDINNER5
    STATUSCHK -->|No| ENDINNER5
    ENDINNER5 --> ENDLOOP5["End loops"]
    ENDLOOP5 --> STORE5["rsltShosaMap.put EKK2811C060 wkMapArray"]
    LOOP5 -->|No| STORE5
    
    PROC6 --> LOOP6{"workEKU0081B020Array != null?"}
    LOOP6 -->|Yes| INNER6["For each row in workEKU0081B020Array"]
    INNER6 --> EXTRACT6["getWorkData EKU0081B020CBSMSG1LIST"]
    EXTRACT6 --> INNERLOOP6["For each childTemplate"]
    INNERLOOP6 --> KOJIAK["kojiakNo = childTemplate.getString KOJIAK_NO"]
    KOJIAK --> COND6{"kojiakNo not null AND NOT empty
AND telVlanTgSvcKeiNo not null AND NOT empty?"}
    COND6 -->|Yes| MAP6["shosaClMapper.editInMsgESC0021D010 param ... telVlanTgSvcKeiNo"]
    COND6 -->|No| ENDINNER6["End inner loop j"]
    MAP6 --> EDIT6["editInMsgCmn param wkCaanMsgList.get(0)"]
    EDIT6 --> ADD6["wkMapArray.add rslt"]
    ADD6 --> ENDINNER6
    ENDINNER6 --> ENDLOOP6["End loops"]
    ENDLOOP6 --> STORE6["rsltShosaMap.put ESC0021D010 wkMapArray"]
    LOOP6 -->|No| STORE6
    
    STORE1 --> STORE2
    STORE2 --> STORE3
    STORE3 --> STORE4
    STORE4 --> STORE5
    STORE5 --> STORE6
    STORE6 --> RETURN1["Return rsltShosaMap"]
    
    RETURN1 --> END(["End"])
```

**Constant Resolution Reference:**

| Constant | Resolved Value | Business Meaning |
|----------|---------------|-----------------|
| `SVC_CD_NET` | `"01"` | Service Code: Internet |
| `SVC_CD_TEL` | `"02"` | Service Code: Telephone |
| `SVC_KEI_STAT_SHOSA_ZUMI` | `"020"` | Service contract status: Review completed |
| `MAP_KEY_EKK0111C070` | `"EKK0111C070"` | Service Contract (eo Fiber Phone) Review Cancellation map key |
| `MAP_KEY_EKK0191C120` | `"EKK0191C120"` | Service Contract Details (eo Fiber Phone) Review Cancellation map key |
| `MAP_KEY_EKK0371C120` | `"EKK0371C120"` | Optional Service Contract (Telephone) Review Cancellation map key |
| `MAP_KEY_EKK0431C080` | `"EKK0431C080"` | Sub-Optional Service Contract (Telephone) Review Cancellation map key |
| `MAP_KEY_EKK2811C060` | `"EKK2811C060"` | Device Option Service Contract Review Cancellation map key |
| `MAP_KEY_ESC0021D010` | `"ESC0021D010"` | Telephone VLAN Data Reception Review Cancellation map key |

Each of the six blocks follows an identical processing pattern:
1. Initialize a new `ArrayList` as `wkMapArray`
2. If the entity's work array from `rsltShokai` is not null, iterate over each row
3. For each row, call `getWorkData()` to extract child `CAANMsg` templates from the CBS message list
4. For each child template, delegate to the appropriate `shosaClMapper.editInMsg*` method to produce a mapped message list
5. Pass the first message from that list to `editInMsgCmn()` to normalize and enrich it
6. Add the result to `wkMapArray`
7. After loops, store `wkMapArray` into the result map under the corresponding cancellation map key

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `param` | `IRequestParameterReadWrite` | The request parameter object carrying the model group and control map. Contains form data submitted from the review cancellation screen and mutable state used by `editInMsgCmn` and the mapper to populate field mappings and error messages. |
| 2 | `fixedText` | `String` | User-defined arbitrary string, typically used as a stable identifier or label that propagates through mapping operations (e.g., traceability tag for audit or logging). |
| 3 | `userDataIndex` | `int` | Index within the `param` object that identifies which business data row to operate on. Allows this method to handle multi-row data sets where each row is addressed by its position. |
| 4 | `rsltShokai` | `HashMap<String, Object>` | Pre-populated result data from uniqueness inquiry and list inquiry operations. Contains typed `ArrayList<HashMap>` entries keyed by map keys (e.g., `MAP_KEY_EKK0111A010`). Each entry holds the rows of data retrieved from the database that this method will transform into cancellation mapping results. |
| 5 | `handle` | `SessionHandle` | The session handle carrying session context and database connection information. Although declared as a parameter, this method does **not** directly use `handle` — it is passed for compatibility with the CBS caller's signature but is only used transitively by downstream methods like `runShokai`. |
| 6 | `telVlanTgSvcKeiNo` | `String` | Telephone VLAN target service detail number. Represents the VLAN-assigned service detail line number for the telephone service. Used exclusively in Block 6 (work project list mapping) where it is passed as an additional argument to `editInMsgESC0021D010` to correlate VLAN data with the work project. Must be non-null and non-empty for mapping to proceed. |
| 7 | `svcCd` | `String` | Service code that determines which service type is being processed. In Block 5 (device option service contract), this value is compared against `SVC_CD_NET` ("01" — Internet) and `SVC_CD_TEL` ("02" — Telephone) to select the correct `KKOP_SVC_CD` value ("G01" or "G02") for filtering rows. |

**Instance fields / external state read:**

| Field | Usage |
|-------|-------|
| `shosaClMapper` | The mapper component injected into `JKKSvkeiShosaClCC`. All `editInMsg*` calls on `shosaClMapper` delegate template mapping logic to this field. |

## 4. CRUD Operations / Called Services

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `JBSbatFUCaseFileRnkData.getString` | JBSbatFUCaseFileRnkData | - | Reads field from case file ranking data (transitive via mapper) |
| R | `JBSbatFUMoveNaviData.getString` | JBSbatFUMoveNaviData | - | Reads field from move navigation data (transitive via mapper) |
| R | `JBSbatZMAdDataSet.getString` | JBSbatZMAdDataSet | - | Reads field from ZM address data set (transitive via mapper) |
| U | `JKKSvkeiShosaClCC.editInMsgCmn` | JKKSvkeiShosaClCC | - | Normalizes/cleans a CAANMsg — sets default values, fills in message labels |
| R | `JKKSvkeiShosaClCC.getWorkData` | JKKSvkeiShosaClCC | - | Extracts child `CAANMsg[]` templates from a CBS message list using a given list key |
| R | `JKKSvkeiShosaClCC.isChkSvcKeiStat` | JKKSvkeiShosaClCC | - | Checks if the service contract status is review-completed ("020") |
| U | `JKKSvkeiShosaShosaClMapperCC.editInMsgEKK0111C070` | EKK0111C070 | Service Contract (eo Fiber Phone) | Maps service contract data for eo Fiber Phone cancellation — produces CAANMsg fields for the review cancellation screen |
| U | `JKKSvkeiShosaShosaClMapperCC.editInMsgEKK0191C120` | EKK0191C120 | Service Contract Details (eo Fiber Phone) | Maps service contract detail data for eo Fiber Phone cancellation |
| U | `JKKSvkeiShosaShosaClMapperCC.editInMsgEKK0371C120` | EKK0371C120 | Optional Service Contract (Telephone) | Maps optional service contract data for telephone cancellation |
| U | `JKKSvkeiShosaShosaClMapperCC.editInMsgEKK0431C080` | EKK0431C080 | Sub-Optional Service Contract (Telephone) | Maps sub-optional service contract data for telephone cancellation |
| U | `JKKSvkeiShosaShosaClMapperCC.editInMsgEKK2811C060` | EKK2811C060 | Device Option Service Contract | Maps device option service contract data for cancellation (conditional on status + service code) |
| U | `JKKSvkeiShosaShosaClMapperCC.editInMsgESC0021D010` | ESC0021D010 | Telephone VLAN Data Reception | Maps VLAN target data for telephone service (requires work project number + VLAN number) |
| R | `JESC0101B010TPMA.getString` | JESC0101B010TPMA | - | Reads field from ESC0101 TPMA data (transitive via mapper) |
| R | `JESC0101B020TPMA.getString` | JESC0101B020TPMA | - | Reads field from ESC0101 TPMA data (transitive via mapper) |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | `runSvkeiShosaCl()` (CBS) | `JKKSvkeiShosaClCC.runSvkeiShosaCl()` → `editMapShosaClHTel()` | `editInMsgCmn` [U], `editInMsgESC0021D010` [U], `getString` [R], `getWorkData` [R], `editInMsgEKK2811C060` [U] |

**Description:** The sole direct caller is `runSvkeiShosaCl()`, which is a CBS (Business Component Service) method within `JKKSvkeiShosaClCC`. This CBS method orchestrates the full review cancellation processing flow and delegates to `editMapShosaClHTel()` to produce the cancellation mapping results for eo Fiber Phone services. The method ultimately reaches terminal operations that update internal message mappings (`editInMsgCmn`, `editInMsg*` mapper methods) and read field values from CBS message objects (`getString`, `getWorkData`).

## 6. Per-Branch Detail Blocks

### Block 1 — [IF] `(workEKK0111A010Array != null)` (L5208)

> Service Contract (eo Fiber Phone) Review Cancellation. Iterates over all rows in the service contract inquiry result, extracts child templates, and maps them through the EKK0111C070 mapper.

| # | Type | Code |
|---|------|------|
| 1 | SET | `wkMapArray = new ArrayList()` [Initialize per-block result array] |
| 2 | IF | `if (workEKK0111A010Array != null)` [Guard: skip if no inquiry results] |
| 3 | FOR | `for (int i = 0; i < workEKK0111A010Array.size(); i++)` [Outer loop: iterate service contract rows] |
| 4 | SET | `wkTenplates = getWorkData(EKK0111A010CBSMsg.EKK0111A010CBSMSG1LIST, (Map)workEKK0111A010Array.get(i))` [Extract child CAANMsg[] templates from CBS message list] |
| 5 | FOR | `for (int j = 0; j < wkTenplates.length; j++)` [Inner loop: iterate child templates] |
| 6 | SET | `childTemplate = wkTenplates[j]` [Current child template] |
| 7 | CALL | `wkCaanMsgList = shosaClMapper.editInMsgEKK0111C070(param, fixedText, userDataIndex, childTemplate)` [Map the service contract row for cancellation] |
| 8 | SET | `rslt = editInMsgCmn(param, wkCaanMsgList.get(0))` [Normalize the first mapped message] |
| 9 | EXEC | `wkMapArray.add(rslt)` [Accumulate result] |
| 10 | SET | `rsltShosaMap.put(MAP_KEY_EKK0111C070, wkMapArray)` [STORE: Key "EKK0111C070" → Service Contract (eo Fiber Phone) Review Cancellation result] |

### Block 2 — [IF] `(workEKK0191A010Array != null)` (L5229)

> Service Contract Details (eo Fiber Phone) Review Cancellation. Same pattern as Block 1 but uses the EKK0191C120 mapper for contract detail rows.

| # | Type | Code |
|---|------|------|
| 1 | SET | `wkMapArray = new ArrayList()` |
| 2 | IF | `if (workEKK0191A010Array != null)` |
| 3 | FOR | `for (int i = 0; i < workEKK0191A010Array.size(); i++)` |
| 4 | SET | `wkTenplates = getWorkData(EKK0191A010CBSMsg.EKK0191A010CBSMSG1LIST, (Map)workEKK0191A010Array.get(i))` |
| 5 | FOR | `for (int j = 0; j < wkTenplates.length; j++)` |
| 6 | SET | `childTemplate = wkTenplates[j]` |
| 7 | CALL | `wkCaanMsgList = shosaClMapper.editInMsgEKK0191C120(param, fixedText, userDataIndex, childTemplate)` [Map service contract details for cancellation] |
| 8 | SET | `rslt = editInMsgCmn(param, wkCaanMsgList.get(0))` |
| 9 | EXEC | `wkMapArray.add(rslt)` |
| 10 | SET | `rsltShosaMap.put(MAP_KEY_EKK0191C120, wkMapArray)` [STORE: Key "EKK0191C120" → Service Contract Details (eo Fiber Phone) Review Cancellation result] |

### Block 3 — [IF] `(workEKK0371A010Array != null)` (L5250)

> Optional Service Contract (Telephone) Review Cancellation. Uses the EKK0371C120 mapper for optional telephone service contract rows.

| # | Type | Code |
|---|------|------|
| 1 | SET | `wkMapArray = new ArrayList()` |
| 2 | IF | `if (workEKK0371A010Array != null)` |
| 3 | FOR | `for (int i = 0; i < workEKK0371A010Array.size(); i++)` |
| 4 | SET | `wkTenplates = getWorkData(EKK0371A010CBSMsg.EKK0371A010CBSMSG1LIST, (Map)workEKK0371A010Array.get(i))` |
| 5 | FOR | `for (int j = 0; j < wkTenplates.length; j++)` |
| 6 | SET | `childTemplate = wkTenplates[j]` |
| 7 | CALL | `wkCaanMsgList = shosaClMapper.editInMsgEKK0371C120(param, fixedText, userDataIndex, childTemplate)` [Map optional service contract (telephone) for cancellation] |
| 8 | SET | `rslt = editInMsgCmn(param, wkCaanMsgList.get(0))` |
| 9 | EXEC | `wkMapArray.add(rslt)` |
| 10 | SET | `rsltShosaMap.put(MAP_KEY_EKK0371C120, wkMapArray)` [STORE: Key "EKK0371C120" → Optional Service Contract (Telephone) Review Cancellation result] |

### Block 4 — [IF] `(workEKK0431A010Array != null)` (L5271)

> Sub-Optional Service Contract (Telephone) Review Cancellation. Uses the EKK0431C080 mapper for sub-optional telephone service contract rows.

| # | Type | Code |
|---|------|------|
| 1 | SET | `wkMapArray = new ArrayList()` |
| 2 | IF | `if (workEKK0431A010Array != null)` |
| 3 | FOR | `for (int i = 0; i < workEKK0431A010Array.size(); i++)` |
| 4 | SET | `wkTenplates = getWorkData(EKK0431A010CBSMsg.EKK0431A010CBSMSG1LIST, (Map)workEKK0431A010Array.get(i))` |
| 5 | FOR | `for (int j = 0; j < wkTenplates.length; j++)` |
| 6 | SET | `childTemplate = wkTenplates[j]` |
| 7 | CALL | `wkCaanMsgList = shosaClMapper.editInMsgEKK0431C080(param, fixedText, userDataIndex, childTemplate)` [Map sub-optional service contract (telephone) for cancellation] |
| 8 | SET | `rslt = editInMsgCmn(param, wkCaanMsgList.get(0))` |
| 9 | EXEC | `wkMapArray.add(rslt)` |
| 10 | SET | `rsltShosaMap.put(MAP_KEY_EKK0431C080, wkMapArray)` [STORE: Key "EKK0431C080" → Sub-Optional Service Contract (Telephone) Review Cancellation result] |

### Block 5 — [IF] `(workEKK2811A010Array != null)` + [IF-IF] (Status + Service Code Filter) (L5294)

> Device Option Service Contract Review Cancellation. This block has **two additional conditional filters** beyond the basic pattern:
> 1. The service contract status must pass `isChkSvcKeiStat()` (i.e., status is review-completed "020").
> 2. The `svcCd` parameter must match the row's `KKOP_SVC_CD` value: "01" (Internet) with "G01", or "02" (Telephone) with "G02".
> Only if both conditions are satisfied does the mapping proceed.

| # | Type | Code |
|---|------|------|
| 1 | SET | `wkMapArray = new ArrayList()` |
| 2 | IF | `if (workEKK2811A010Array != null)` [AMK-1578-00-00 ADD 2013-12-03] |
| 3 | FOR | `for (int i = 0; i < workEKK2811A010Array.size(); i++)` |
| 4 | SET | `wkTenplates = getWorkData(EKK2811A010CBSMsg.EKK2811A010CBSMSG1LIST, (Map)workEKK2811A010Array.get(i))` |
| 5 | FOR | `for (int j = 0; j < wkTenplates.length; j++)` |
| 6 | SET | `childTemplate = wkTenplates[j]` |
| 7 | IF | `isChkSvcKeiStat(childTemplate.getString(EKK2811A010CBSMsg1List.KKOP_SVC_KEI_STAT))` [Check: service status is review-completed "020"] |
| 8 | IF-IF | `(SVC_CD_NET.equals(svcCd) && "G01".equals(childTemplate.getString(EKK2811A010CBSMsg1List.KKOP_SVC_CD))) \|\| (SVC_CD_TEL.equals(svcCd) && "G02".equals(childTemplate.getString(EKK2811A010CBSMsg1List.KKOP_SVC_CD)))` [SVC_CD_NET="01" (Internet), SVC_CD_TEL="02" (Telephone); KKOP_SVC_CD "G01"=Internet device, "G02"=Telephone device] |
| 9 | CALL | `wkCaanMsgList = shosaClMapper.editInMsgEKK2811C060(param, fixedText, userDataIndex, childTemplate)` [Map device option service contract for cancellation] |
| 10 | SET | `rslt = editInMsgCmn(param, wkCaanMsgList.get(0))` |
| 11 | EXEC | `wkMapArray.add(rslt)` |
| 12 | SET | `rsltShosaMap.put(MAP_KEY_EKK2811C060, wkMapArray)` [STORE: Key "EKK2811C060" → Device Option Service Contract Review Cancellation result] |

### Block 6 — [IF] `(workEKU0081B020Array != null)` + [IF] (kojiakNo + telVlanTgSvcKeiNo null/empty Check) (L5345)

> Service Contract Work Project List (Basic Work Project Acquisition) Review Cancellation. This block handles the VLAN data reception mapping. It only processes rows where **both** the work project number (`kojiakNo`) and the VLAN target service detail number (`telVlanTgSvcKeiNo`) are present (non-null and non-empty). The `telVlanTgSvcKeiNo` parameter is passed as an additional argument to the mapper method.

| # | Type | Code |
|---|------|------|
| 1 | SET | `wkMapArray = new ArrayList()` |
| 2 | IF | `if (workEKU0081B020Array != null)` |
| 3 | FOR | `for (int i = 0; i < workEKU0081B020Array.size(); i++)` |
| 4 | SET | `wkTenplates = getWorkData(EKU0081B020CBSMsg.EKU0081B020CBSMSG1LIST, (Map)workEKU0081B020Array.get(i))` |
| 5 | FOR | `for (int j = 0; j < wkTenplates.length; j++)` |
| 6 | SET | `childTemplate = wkTenplates[j]` |
| 7 | SET | `kojiakNo = childTemplate.getString(EKU0081B020CBSMsg1List.KOJIAK_NO)` [Extract work project number] |
| 8 | IF | `kojiakNo != null && !"".equals(kojiakNo) && telVlanTgSvcKeiNo != null && !"".equals(telVlanTgSvcKeiNo)` [Only map if both work project number and VLAN target number are available] |
| 9 | CALL | `wkCaanMsgList = shosaClMapper.editInMsgESC0021D010(param, fixedText, userDataIndex, childTemplate, telVlanTgSvcKeiNo)` [Map telephone VLAN data reception — note extra `telVlanTgSvcKeiNo` parameter] |
| 10 | SET | `rslt = editInMsgCmn(param, wkCaanMsgList.get(0))` |
| 11 | EXEC | `wkMapArray.add(rslt)` |
| 12 | SET | `rsltShosaMap.put(MAP_KEY_ESC0021D010, wkMapArray)` [STORE: Key "ESC0021D010" → Telephone VLAN Data Reception Review Cancellation result] |

### RETURN (L5369)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return rsltShosaMap` [Returns the assembled cancellation mapping result containing all 6 entity types] |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `rsltShokai` | Field | Inquiry result data — pre-loaded HashMap containing rows from uniqueness and list inquiries for all relevant service contract entities. Serves as the input data source for this method. |
| `svcCd` | Field | Service Code — identifies the service type being processed: "01" (Internet), "02" (Telephone), "03" (Television). Used to filter device option service contract rows by their associated service type. |
| `telVlanTgSvcKeiNo` | Field | Telephone VLAN Target Service Detail Number — the VLAN-assigned service detail line number used to correlate telephone VLAN configuration with work project data. |
| `userDataIndex` | Field | Business data index — identifies which row within the param object's data collection to operate on, enabling multi-row processing. |
| `fixedText` | Field | User arbitrary string — a stable label/identifier passed through mapping operations, typically used for audit trail or traceability tagging. |
| `kojiakNo` | Field | Work Project Number — the internal identifier for a construction/work project associated with the service contract. Must be present for VLAN data reception mapping. |
| `KKOP_SVC_KEI_STAT` | Field | Service contract status field in the EKK2811 (Device Option Service Contract) CBS message — "020" means review completed. |
| `KKOP_SVC_CD` | Field | Service code field within the EKK2811 CBS message row — "G01" indicates Internet, "G02" indicates Telephone for device option filtering. |
| `KOJIAK_NO` | Field | Work project number field in the EKU0081B020 CBS message — identifies the construction work project tied to a service contract. |
| `EKK0111A010` | Entity | Service Contract (eo Fiber Phone) inquiry — master contract data for the fiber phone service. |
| `EKK0191A010` | Entity | Service Contract Details (eo Fiber Phone) inquiry — detailed line-item data for the fiber phone contract. |
| `EKK0371A010` | Entity | Optional Service Contract (Telephone) inquiry — optional telephone service add-on contract data. |
| `EKK0431A010` | Entity | Sub-Optional Service Contract (Telephone) inquiry — sub-optional telephone service add-on contract data. |
| `EKK2811A010` | Entity | Device Option Service Contract inquiry — data for device-based optional services (Internet/Telephone) provided via customer-owned equipment. |
| `EKU0081B020` | Entity | Service Contract Work Project List (Basic Work Project Acquisition) inquiry — construction/work project rows associated with the service contract. |
| `EKK0111C070` | SC Code | Service Contract (eo Fiber Phone) Review Cancellation — mapper component for producing cancellation screen data for the master service contract. |
| `EKK0191C120` | SC Code | Service Contract Details (eo Fiber Phone) Review Cancellation — mapper for contract detail cancellation data. |
| `EKK0371C120` | SC Code | Optional Service Contract (Telephone) Review Cancellation — mapper for optional telephone service contract cancellation data. |
| `EKK0431C080` | SC Code | Sub-Optional Service Contract (Telephone) Review Cancellation — mapper for sub-optional telephone service contract cancellation data. |
| `EKK2811C060` | SC Code | Device Option Service Contract Review Cancellation — mapper for device option service contract cancellation data. |
| `ESC0021D010` | SC Code | Telephone VLAN Data Reception — mapper for VLAN target data reception fields associated with telephone services. |
| `editInMsgCmn` | Method | Common message editor — normalizes a CAANMsg by setting default values, labels, and standard fields. Called after each mapper produces its result. |
| `getWorkData` | Method | Extracts child CAANMsg[] templates from a CBS message list given a list key. Transforms flat inquiry data into template objects for per-row processing. |
| `isChkSvcKeiStat` | Method | Service contract status checker — returns true if the given status code is "020" (review completed). |
| shosaClMapper | Field | The `JKKSvkeiShosaShosaClMapperCC` mapper component injected into this class. Responsible for all `editInMsg*` mapping calls. |
| eo Hikari Denwa | Business term | eo Fiber Phone — NTT East's fiber-optic telephone service offered under the eo brand. The subject of this entire cancellation mapping method. |
| 照査取消 (Shousa Torikeshi) | Business term | Review Cancellation — the business operation of canceling a service contract after a review/inquiry step has been completed. |
| CAANMsg | Technical type | Contract Administration ANswer Message — the canonical message object used throughout the K-Opticom system for carrying field-level data in mapping, inquiry, and registration operations. |
| CBS | Acronym | Component Business Service — a business component layer class that encapsulates database query logic and data retrieval operations. |
| SC | Acronym | Service Component — a sub-component within the CBS layer that handles specific CRUD operations, typically named with an EKKnnnCAAAASC pattern. |
| MAP_KEY_* | Constant | Static String keys used to index into the `rsltShokai` HashMap. Each maps to a 7-character SC code string (e.g., "EKK0111C070") identifying a specific entity's data. |