# Business Logic — JKKKapKeiInfoCancelCC.updKapKeiCancel() [370 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `com.fujitsu.futurity.bp.custom.common.JKKKapKeiInfoCancelCC` |
| Layer | CC / Common Component (Controller-Component layer) |
| Module | `common` (Package: `com.fujitsu.futurity.bp.custom.common`) |

## 1. Role

### JKKKapKeiInfoCancelCC.updKapKeiCancel()

This method orchestrates the complete cancellation and dissolution workflow for subcontract agreements (subcontracted service contracts in the K-Opticom telecom billing system) and their associated equipment, delivery, option services, and smartlink premium packages. It is the primary entry point for the "Subcontract Information Update Cancel Processing" screen KKSV0663, acting as a composite service coordinator that decomposes a bulk cancellation request into a sequence of focused service component calls.

The method implements a **routing/dispatch pattern** with three distinct processing tiers: (1) Subcontract-level cancellation and progress registration (always executed), (2) Equipment-level cancellation/dissolution with delivery and device-option processing (executed only when the screen is in Check & Register mode), and (3) Smartlink premium option cancellation and old-project cancellation (executed conditionally). Each tier branches on status codes that determine whether to perform a cancellation (revoking an un-dissolved agreement) or a dissolution (completing the full cancellation lifecycle with confirmation).

In the larger system, this method sits between the BPM flow controller (KKSV0663Flow) and the service component (SC) layer, serving as the business orchestration hub that coordinates 20+ individual service interface (S-IF) calls to handle the full scope of a subcontract cancellation request.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["updKapKeiCancel Entry"])

    START --> INIT["Initialize ccMsg, messageInfo, temporaryData, workMap"]
    INIT --> SETUP["Set service contract update timestamp"]
    SETUP --> SCINV["Create ServiceComponentRequestInvoker"]
    SCINV --> PARAMS["Extract func_code, s_mode, svc_kei_no from ccMsg"]

    PARAMS --> CHK_EKK0081["searchEKK0081A010 - Service Contract Pre-check"]
    CHK_EKK0081 --> CHK_EKK0021["execEKK0021A010 - Application Details Agreement Check"]
    CHK_EKK0021 --> DEL_KAP["Iterate del_kap_list (subcontract cancellation list)"]

    DEL_KAP --> CHK_KAP_STAT{"chkKapStat Status"}
    CHK_KAP_STAT -->|"1: Accept"| EXEC_2541_170["execEKK2541C170 - Subcontract Cancel S-IF"]
    CHK_KAP_STAT -->|"2: Dissolve"| EXEC_2541_190["execEKK2541C190 - Subcontract Dissolve S-IF"]

    EXEC_2541_170 --> SET_IDO_DTM["Set idoDtm"]
    EXEC_2541_190 --> SET_IDO_DTM2["Set idoDtm"]
    SET_IDO_DTM --> PROG_REG["execEKK1091D010 - Subcontract Progress Registration"]
    SET_IDO_DTM2 --> PROG_REG

    PROG_REG --> FUNC_MODE_CHECK{Screen mode: Check and Register}
    FUNC_MODE_CHECK -->|No| RETURN(["Return param"])
    FUNC_MODE_CHECK -->|Yes| DEL_KIKI["Iterate del_kiki_list (equipment list)"]

    DEL_KIKI --> EXEC_EKK0341A010["execEKK0341A010 - Equipment Service Agreement Check"]
    EXEC_EKK0341A010 --> CHK_KIKI_STAT{"chkKikiStat Status"}
    CHK_KIKI_STAT -->|"1: Accept"| EXEC_0341_330["execEKK0341C330 - Equipment Cancel S-IF"]
    CHK_KIKI_STAT -->|"2: Dissolve"| EXEC_0341_340["execEKK0341C340 - Equipment Dissolve S-IF"]

    EXEC_0341_330 --> CHK_HAISO_STAT{"chkHaisoStat Status"}
    EXEC_0341_340 --> EXEC_0341_350["execEKK0341C350 - Equipment Dissolve Confirmation"]
    EXEC_0341_350 --> CHK_HAISO_STAT2{"chkHaisoStat Status"}

    CHK_HAISO_STAT -->|"1: Received"| HAIsoCan["Update haisoCanMap"]
    CHK_HAISO_STAT2 -->|"2: Returned"| EXEC_EDK0301D010["execEDK0301D010 - Returned Equipment Receipt"]

    HAIsoCan --> EKK1091_KIKI["execEKK1091D010 - Equipment Progress Registration"]
    EXEC_EDK0301D010 --> EKK1091_KIKI

    EKK1091_KIKI --> EXEC_EKK2811B504["execEKK2811B504 - Device Option Agreement Check"]
    EXEC_EKK2811B504 --> KKOP_CHECK{kkop_svc_cd == G03}
    KKOP_CHECK -->|No G03| CONTINUE_KIKI["Continue next"]
    KKOP_CHECK -->|G03| KKOP_STAT{"Status check"}

    KKOP_STAT -->|"910/920"| CONTINUE_KIKI
    KKOP_STAT -->|"010/020"| EXEC_2811_110["execEKK2811C110 - Device Option Cancel"]
    KKOP_STAT -->|Other| EXEC_2811_140["execEKK2811C140 - Device Option Dissolve"]

    EXEC_2811_110 --> EXEC_2811_150["execEKK2811C150 - Device Option Dissolve Confirmation"]
    EXEC_2811_140 --> EXEC_2811_150

    EXEC_2811_150 --> SMARTLINK_CHECK{"smartlink_op_kei_flg == 1"}
    CONTINUE_KIKI --> SMARTLINK_CHECK

    SMARTLINK_CHECK -->|No| HAIsoCanFinal["Check haisoCanMap"]
    SMARTLINK_CHECK -->|Yes| CHK_OPT_STAT{"chkOptStat Status"}

    CHK_OPT_STAT -->|"1: Accept"| EXEC_0351_220["execEKK0351C220 - Option Cancel"]
    CHK_OPT_STAT -->|"2: Dissolve"| EXEC_0351_240["execEKK0351C240 - Option Dissolve"]

    EXEC_0351_220 --> PROG_REG_OP["execEKK1091D010 - Option Progress Registration"]
    EXEC_0351_240 --> EXEC_0351_250["execEKK0351C250 - Option Dissolve Confirmation"]
    EXEC_0351_250 --> PROG_REG_OP

    PROG_REG_OP --> HAIsoCanFinal

    HAIsoCanFinal --> EXEC_HAIsoCan{"haisoCanMap non-empty"}
    EXEC_HAIsoCan -->|Yes| EXEC_HAIsoCanProc["execHaisoCancelCreate"]
    EXEC_HAIsoCan -->|No| INVENTORY_CHECK{"haisoCanMap non-empty"}

    EXEC_HAIsoCanProc --> INVENTORY_CHECK
    INVENTORY_CHECK -->|Yes| EXEC_EKKA0020504["execEKKA0020504 - Home Device Inventory Update"]
    INVENTORY_CHECK -->|No| SVC_STAT_CHECK["Get svcKeiStat"]

    EXEC_EKKA0020504 --> SVC_STAT_CHECK
    SVC_STAT_CHECK --> KOJI_CHECK{svcKeiStat != 010}
    KOJI_CHECK -->|Yes| EXEC_KOJI["isExecKojiAnkenCancel - Old Project Cancel"]
    KOJI_CHECK -->|No| RETURN

    EXEC_KOJI --> RETURN
```

**Branch descriptions:**
- The flow begins with initialization of error flags, message lists, and shared work area.
- The service contract pre-check (`searchEKK0081A010`) validates the overall service contract state.
- The application details agreement check (`execEKK0021A010`) verifies application details.
- The subcontract cancellation list (`del_kap_list`) is iterated, each entry routed by `kap_kei_stat` (subcontract status): status `1` triggers cancel S-IF (`execEKK2541C170`), status `2` triggers dissolve S-IF (`execEKK2541C190`).
- After each subcontract processing step, progress registration (`execEKK1091D010`) is called with `PRG_STAT = "G002"`.
- If `func_code == "1"` and `s_mode == "1"` (Check & Register mode), the equipment processing tier begins.
- Each equipment in `del_kiki_list` is checked by `execEKK0341A010`, then routed by `kiki_stat` (equipment status): status `1` triggers cancel (`execEKK0341C330`), status `2` triggers dissolve with confirmation (`execEKK0341C340` + `execEKK0341C350`).
- Delivery status (`haiso_stat`) determines delivery cancel tracking (status `1`) or returned equipment receipt (status `2`).
- Equipment progress registration (`execEKK1091D010` with `PRG_STAT = "3302"`) records equipment-level progress.
- Device option agreement check (`execEKK2811B504`) filters for device-option services (G03) and routes by option service status: `010/020` triggers cancel, `910/920` skips, other triggers dissolve with confirmation.
- If Smartlink flag is enabled, option service cancel/dissolve is executed and progress registered with `PRG_STAT = "5102"`.
- Finally, delivery cancel processing (`execHaisoCancelCreate`), home device inventory update (`execEKKA0020504`), and old-project cancellation (`isExecKojiAnkenCancel`) are conditionally executed.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `handle` | `SessionHandle` | Database session handle for the current transaction, carrying the database connection context, user session info, and transaction isolation settings. Used by all SC invocations. |
| 2 | `param` | `IRequestParameterReadWrite` | The request/response data carrier containing all screen input data, mapped work areas, and result data structures. It holds the ccMsg map (with func_code, s_mode, svc_kei_no, del_kap_list, del_kiki_list, ido_div, etc.), the mappingWorkArea for shared data across CC calls, and ultimately returns the processing result. |
| 3 | `fixedText` | `String` | The key used to retrieve the ccMsg data map from the param object (used as `dataMapKey`). Typically corresponds to a CC target name identifier that groups related request/response data. |

**Instance fields read by this method:**

| Field | Type | Business Description |
|-------|------|---------------------|
| `TEMPLATE_ID_*` | String constants | Template identifiers for each service component call (e.g., EKK0081A010, EKK0341A010, EKK1091D010, etc.) |
| `FUNC_CODE_1`, `FUNC_CODE_2` | String | Functional code discriminator — `"1"` for Check & Register, `"2"` for Check Only |
| `SVC_KEI_STAT_010` | String | Service contract status `"010"` (Completed/Received) — used in v10.00.00 to determine if old-project cancellation is needed |
| `IDO_DIV_0026`, `IDO_DIV_0031` | String | Movement division codes: `"00026"` (Equipment contract change) and `"00031"` (Option setting) — used to set progress registration movement codes |
| `KKOP_SVC_CD_G03` | String | Device-option service code `"G03"` — filters device-option service results to only process device insurance |
| `KKOP_STAT_010`, `KKOP_STAT_020`, `KKOP_STAT_910`, `KKOP_STAT_920` | String | Device-option service contract status codes: 010 (Received), 020 (Under review), 910 (Dissolved), 920 (Cancelled) |
| `ADD_CHGE_DIV_CANCEL`, `ADD_CHGE_DIV_DSL` | String | Registration/Change division: `"05"` for Cancel, `"03"` for Dissolution |
| `SVC_CANCEL_RSN_CD`, `SVC_DLRE_CD` | String | Service cancellation reason code `"01"` and service dissolution reason code `"01"` |
| `DSL_CHRG_FLG_HIKAKIN` | String | Dissolution fee flag `"0"` (No fee) |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `JBSbatDKNyukaFinAdd.getData` | JBSbatDKNyukaFinAdd | - | Calls `getData` in `JBSbatDKNyukaFinAdd` |
| R | `JBSbatFUCaseFileRnkData.getString` | JBSbatFUCaseFileRnkData | - | Calls `getString` in `JBSbatFUCaseFileRnkData` |
| R | `JBSbatFUMoveNaviData.getString` | JBSbatFUMoveNaviData | - | Calls `getString` in `JBSbatFUMoveNaviData` |
| R | `JBSbatZMAdDataSet.getString` | JBSbatZMAdDataSet | - | Calls `getString` in `JBSbatZMAdDataSet` |
| R | `JFUeoTelOpTransferCC.getData` | JFUeoTelOpTransferCC | - | Calls `getData` in `JFUeoTelOpTransferCC` |
| R | `JFUTransferCC.getData` | JFUTransferCC | - | Calls `getData` in `JFUTransferCC` |
| R | `JFUTransferListToListCC.getData` | JFUTransferListToListCC | - | Calls `getData` in `JFUTransferListToListCC` |
| R | `JKKKapKeiInfoCancelCC.searchEKK0081A010` | EKK0081A010SC | EKK0081A010 (Service Contract Agreement) | Searches and retrieves service contract pre-check data |
| C | `JKKKapKeiInfoCancelCC.execEKK0021A010` | EKK0021A010SC | EKK0021A010 (Application Details Agreement) | Executes application details agreement check for cancellation |
| C | `JKKKapKeiInfoCancelCC.execEKK2541C170` | EKK2541C170SC | EKK2541C170 (Subcontract Cancel) | Subcontract cancellation S-IF — revokes an accepted (un-dissolved) subcontract |
| C | `JKKKapKeiInfoCancelCC.execEKK2541C190` | EKK2541C190SC | EKK2541C190 (Subcontract Dissolve) | Subcontract dissolution S-IF — completes the full subcontract cancellation lifecycle |
| C | `JKKKapKeiInfoCancelCC.execEKK1091D010` | EKK1091D010SC | EKK1091D010 (Progress Registration) | Progress registration S-IF — records cancellation/dissolution progress (PRG_STAT: G002, 3302, 5102) |
| C | `JKKKapKeiInfoCancelCC.execEKK0341A010` | EKK0341A010SC | EKK0341A010 (Equipment Service Agreement) | Equipment service agreement check — queries current state of equipment being cancelled |
| C | `JKKKapKeiInfoCancelCC.execEKK0341C330` | EKK0341C330SC | EKK0341C330 (Equipment Cancel) | Equipment cancellation S-IF — revokes an accepted (un-dissolved) equipment service agreement |
| C | `JKKKapKeiInfoCancelCC.execEKK0341C340` | EKK0341C340SC | EKK0341C340 (Equipment Dissolve) | Equipment dissolution S-IF — initiates the full equipment service dissolution |
| C | `JKKKapKeiInfoCancelCC.execEKK0341C350` | EKK0341C350SC | EKK0341C350 (Equipment Dissolve Confirmation) | Equipment dissolution confirmation S-IF — confirms and finalizes the dissolution |
| C | `JKKKapKeiInfoCancelCC.execEDK0301D010` | EDK0301D010SC | EDK0301D010 (Returned Equipment Receipt) | Returned equipment receipt S-IF — processes equipment that was delivered but is being returned |
| R | `JKKKapKeiInfoCancelCC.getMskmDtlNo` | - | - | Retrieves the registered detail number for progress registration |
| C | `JKKKapKeiInfoCancelCC.execEKK2811B504` | EKK2811B504SC | EKK2811B504 (Device Option Agreement) | Device option service agreement check (combined search) — queries device option service contracts for the equipment |
| C | `JKKKapKeiInfoCancelCC.execEKK2811C110` | EKK2811C110SC | EKK2811C110 (Device Option Cancel) | Device option contract cancellation S-IF — cancels device-option contracts (received/review status) |
| C | `JKKKapKeiInfoCancelCC.execEKK2811C140` | EKK2811C140SC | EKK2811C140 (Device Option Dissolve) | Device option contract dissolution S-IF — dissolves device-option contracts (other statuses) |
| C | `JKKKapKeiInfoCancelCC.execEKK2811C150` | EKK2811C150SC | EKK2811C150 (Device Option Dissolve Confirmation) | Device option contract dissolution confirmation S-IF — confirms the dissolution |
| C | `JKKKapKeiInfoCancelCC.execEKK0351C220` | EKK0351C220SC | EKK0351C220 (Option Cancel) | Smartlink option service contract cancellation S-IF |
| C | `JKKKapKeiInfoCancelCC.execEKK0351C240` | EKK0351C240SC | EKK0351C240 (Option Dissolve) | Smartlink option service contract dissolution S-IF |
| C | `JKKKapKeiInfoCancelCC.execEKK0351C250` | EKK0351C250SC | EKK0351C250 (Option Dissolve Confirmation) | Smartlink option service contract dissolution confirmation S-IF |
| C | `JKKKapKeiInfoCancelCC.execHaisoCancelCreate` | - | - | Delivery cancel processing (wash replacement) — coordinates delivery-level cancellation when equipment is cancelled |
| C | `JKKKapKeiInfoCancelCC.execEKKA0020504` | EKKA0020504SC | EKKA0020504 (Home Device Inventory) | Home device logistics inventory update — updates warehouse/inventory when delivery cancellation occurs |
| R | `JKKKapKeiInfoCancelCC.isExecKojiAnkenCancel` | - | - | Determines whether old-project cancellation is needed based on service contract status |

**Notes:**
- Methods with `exec*` prefix and `C330/C340/C350/C110/C140/C150` suffixes are S-IF (Service Interface) calls that perform actual database writes.
- Methods with `search*` or `*A010*` suffix are typically read/query operations.
- The `del_kap_list` loop processes each subcontract cancellation entry independently, routing to cancel or dissolve S-IF based on `kap_kei_stat`.
- The `del_kiki_list` loop processes each equipment cancellation entry, each of which may invoke up to 7+ downstream S-IF calls.

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Screen:KKSV0663 | `KKSV0663Flow.invoke` -> `KKSV0663OPOperation` (CCRequestBroker target11) -> `JKKKapKeiInfoCancelCC.updKapKeiCancel` | `searchEKK0081A010 [R] EKK0081A010`, `execEKK0021A010 [C] EKK0021A010`, `execEKK2541C170 [C] EKK2541C170`, `execEKK2541C190 [C] EKK2541C190`, `execEKK1091D010 [C] EKK1091D010`, `execEKK0341A010 [R] EKK0341A010`, `execEKK0341C330 [C] EKK0341C330`, `execEKK0341C340 [C] EKK0341C340`, `execEKK0341C350 [C] EKK0341C350`, `execEDK0301D010 [C] EDK0301D010`, `execEKK2811B504 [R] EKK2811B504`, `execEKK2811C110 [C] EKK2811C110`, `execEKK2811C140 [C] EKK2811C140`, `execEKK2811C150 [C] EKK2811C150`, `execEKK0351C220 [C] EKK0351C220`, `execEKK0351C240 [C] EKK0351C240`, `execEKK0351C250 [C] EKK0351C250`, `execHaisoCancelCreate [C] -`, `execEKKA0020504 [C] EKKA0020504` |
| 2 | Screen:KKSV0663 | `KKSV0663Flow.invoke` -> `KKSV0663OPOperation` (CCRequestBroker target13) -> `JKKUpdMkmScinsprtWCC.updMkmScinsprtWk` | `JKKKapKeiInfoCancelCC.updKapKeiCancel` called as a subsequent CC in the same BPM flow (v9.00.01 addition) |

**Caller details:**
- **KKSV0663Flow** is the BPM service class (stateless session bean) for "Subcontract Information Update Cancel Processing". It serves as the entry point for the KKSV0663 screen.
- **KKSV0663OPOperation** is the BPM operation class that configures CCRequestBroker instances to call various common components. The `target11` broker is explicitly configured to call `JKKKapKeiInfoCancelCC.updKapKeiCancel` with CC target name `KKSV066304CC`.
- The v9.00.01 addition introduces `KKSV066305CC` (target13) which calls `JKKUpdMkmScinsprtWCC.updMkmScinsprtWk` as a subsequent step after the main cancellation.

## 6. Per-Branch Detail Blocks

### Block 1 — [SET/INIT] Initialization (L330)

> Initialize error flag, message infrastructure, and shared work area.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMapKey = fixedText` |
| 2 | SET | `ccMsg = (HashMap) param.getData(dataMapKey)` // Retrieve ccMsg data map |
| 3 | EXEC | `ccMsg.put("err_flg", "")` // Clear error flag — initialize with empty string |
| 4 | SET | `messageInfo = new ArrayList<HashMap<String, Object>>()` // Create message info list |
| 5 | EXEC | `ccMsg.put("message_list", messageInfo)` // Set message list in ccMsg |
| 6 | SET | `temporaryData = new HashMap<String, Object>()` // Create temporary data storage |
| 7 | SET | `workMap = (Map) param.getMappingWorkArea()` // Get common work area |
| 8 | IF (null check) | `if (workMap == null)` (L352) |

#### Block 1.1 — [ELSE] workMap is null (L354)

> Create a new HashMap for the work area.

| # | Type | Code |
|---|------|------|
| 1 | SET | `workMap = new HashMap()` |
| 2 | EXEC | `param.setMappingWorkArea(workMap)` |

#### Block 1.2 — [SET] Set service contract update timestamp (L359)

> Store the service contract update timestamp stamp in the common work area.

| # | Type | Code |
|---|------|------|
| 1 | SET | `setSvcUpDtm(param, (String) ccMsg.get("upd_dtm_KK0081"))` // (設置サービス契約更新タイムスタンプ) |

### Block 2 — [SET] Create SC invoker and extract parameters (L364–370)

> Create the ServiceComponentRequestInvoker instance and extract key parameters from ccMsg.

| # | Type | Code |
|---|------|------|
| 1 | SET | `scCall = new ServiceComponentRequestInvoker()` // (インスタンス生成：引数にはログに出力するクラス名を渡す) — SC call instance creation |
| 2 | SET | `func_code = (String) ccMsg.get("func_code")` // (機能コード取得) |
| 3 | SET | `s_mode = (String) ccMsg.get("s_mode")` // (画面モード: 0=Billing, 1=Equipment Provider Service List) |
| 4 | SET | `svc_kei_no = (String) ccMsg.get("svc_kei_no")` // (サービス契約番号) |

### Block 3 — [CALL] Service Contract Pre-check (L373–375)

> Execute the service contract pre-check (predecessor) — searches EKK0081A010 and stores result.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `ekk0081a010CBSMsg = searchEKK0081A010(handle, scCall, param, dataMapKey, svc_kei_no, (String) ccMsg.get("unyo_ymd"))` |
| 2 | SET | `temporaryData.put("EKK0081A010_WORK", ekk0081a010CBSMsg)` |

### Block 4 — [CALL] Application Details Agreement Check (L378–380)

> Execute the application details agreement check (申込明细同意照会).

| # | Type | Code |
|---|------|------|
| 1 | CALL | `ekk0021a010cbsMsg = execEKK0021A010(handle, scCall, param, dataMapKey, temporaryData)` |
| 2 | SET | `temporaryData.put(TEMPLATE_ID_EKK0021A010, ekk0021a010cbsMsg)` // (結果を格納) |

### Block 5 — [FOR] Iterate del_kap_list (Subcontract Cancellation List) (L398–422)

> For each subcontract in the deletion list, determine its status and execute the appropriate S-IF.
> (削除対象の割賦契約)

| # | Type | Code |
|---|------|------|
| 1 | SET | `delKapList = (ArrayList) ccMsg.get("del_kap_list")` |
| 2 | FOR | `for (HashMap<String, Object> childMap : delKapList)` (L399) |

#### Block 5.1 — [CALL] chkKapStat (L402)

> Determine the subcontract status.

| # | Type | Code |
|---|------|------|
| 1 | SET | `jikou1 = chkKapStat((String) childMap.get("kap_kei_stat"))` // (割賦契約ステータスの判定) |

#### Block 5.2 — [IF] kap_kei_stat == "1" — Accept → Cancel (L403)

> Subcontract status is "1" (Accepted). Execute the subcontract cancellation S-IF.
> (割賦契約キャンセルS-IFを実行する)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `execEKK2541C170(handle, scCall, param, dataMapKey, temporaryData, childMap)` |

#### Block 5.3 — [ELSE IF] kap_kei_stat == "2" — Dissolve (L407)

> Subcontract status is "2" (Under dissolution). Execute the subcontract dissolution S-IF.
> (割賦契約解約S-IFを実行する)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `execEKK2541C190(handle, scCall, param, dataMapKey, temporaryData, childMap)` |

### Block 6 — [SET] Set idoDtm for Subcontract Progress Registration (L414–420)

> Set the movement timestamp — if ido_div is "00001" (New Contract) or "00002" (Service Addition), use the originally acquired timestamp; otherwise use the system date stamp.
> (異動区分が"00001"（新規契約）か"00002"（サービス追加）の場合、初期処理で取得した異動年月日时分秒を設定する)

| # | Type | Code |
|---|------|------|
| 1 | SET | `idoDtm = (String) ccMsg.get("sysdate_stp")` |
| 2 | IF (OR condition) | `if ("00001".equals(ccMsg.get("ido_div")) || "00002".equals(ccMsg.get("ido_div")))` (L420) |

#### Block 6.1 — [SET] Use originally acquired timestamp (L421)

| # | Type | Code |
|---|------|------|
| 1 | SET | `idoDtm = (String) ccMsg.get("ido_dtm")` |

### Block 7 — [CALL] Subcontract Progress Registration (L422–440)

> Register subcontract cancellation progress with PRG_STAT = "G002".
> (割賦契約用進捗登録)

| # | Type | Code |
|---|------|------|
| 1 | SET | `ekk1091d010_KAP = {TEMPLATEID -> TEMPLATE_ID_EKK1091D010, FUNC_CODE -> func_code, MSKM_DTL_NO -> getMskmDtlNo(param, temporaryData), SVC_KEI_NO -> svc_kei_no, IDO_DIV -> ccMsg.get("ido_div"), IDO_DTM -> idoDtm, PRG_STAT -> "G002", PRG_MEMO -> "", PRG_TKJK_1 -> "処理区分：キャンセル・解約", PRG_TKJK_2 -> ""}` |
| 2 | CALL | `execEKK1091D010(handle, scCall, param, dataMapKey, ekk1091d010_KAP)` // (割賦契約用進捗登録S-IFを実行する) |

### Block 8 — [IF] Screen Mode Check — Check & Register (L444)

> Only when func_code == "1" (Check & Register) AND s_mode == "1" (Equipment Provider Service List), execute the equipment processing tier.
> (チェック＆登録の場合、かつ画面モードが機器提供サービス一覧の場合、実行します。)

| # | Type | Code |
|---|------|------|
| 1 | IF (AND condition) | `if (FUNC_CODE_1.equals(func_code) && "1".equals(s_mode))` (L444) |

#### Block 8.1 — [SET] Extract equipment list (L448–455)

> Prepare the equipment deletion list and delivery cancel tracking structures.

| # | Type | Code |
|---|------|------|
| 1 | SET | `delKikiList = (ArrayList) ccMsg.get("del_kiki_list")` // (削除対象の機器) |
| 2 | SET | `bk_haisoNo = ""` |
| 3 | SET | `haisoCanMap = new HashMap<String, Object>()` // v5.00.07: Delivery cancel map |
| 4 | SET | `haisoMap = null` |
| 5 | SET | `canKikiChgNoList = null` |

#### Block 8.2 — [FOR] Iterate del_kiki_list (Equipment List) (L456)

> Process each piece of equipment scheduled for deletion.

| # | Type | Code |
|---|------|------|
| 1 | FOR | `for (HashMap<String, Object> childMap : delKikiList)` (L457) |

#### Block 8.3 — [CALL] Equipment Service Agreement Check (L460–462)

> Query the current state of the equipment service agreement.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `ekk0341a010cbsMsg = execEKK0341A010(handle, scCall, param, dataMapKey, childMap)` |
| 2 | SET | `temporaryData.put(TEMPLATE_ID_EKK0341A010, ekk0341a010cbsMsg)` // (結果を格納) |

#### Block 8.4 — [CALL] chkKikiStat (L465)

> Determine the equipment service contract status.
> (機器提供サービス契約ステータスの判定を行う)

| # | Type | Code |
|---|------|------|
| 1 | SET | `jikou2 = chkKikiStat((String) childMap.get("kiki_stat"))` |

#### Block 8.5 — [IF] kiki_stat == "1" — Accept → Cancel (L466)

> Equipment status is "1" (Accepted). Execute equipment cancellation S-IF.
> (機器提供サービス契約キャンセルS-IFを実行する)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `execEKK0341C330(handle, scCall, param, dataMapKey, temporaryData, childMap)` |

#### Block 8.6 — [ELSE IF] kiki_stat == "2" — Dissolve (L471)

> Equipment status is "2" (Under dissolution). Execute equipment dissolution S-IF and dissolution confirmation S-IF.
> (機器提供サービス契約解約S-IFを実行する / 機器提供サービス契約解約確定S-IFを実行する)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `execEKK0341C340(handle, scCall, param, dataMapKey, temporaryData, childMap)` |
| 2 | CALL | `execEKK0341C350(handle, scCall, param, dataMapKey, temporaryData, childMap)` |

#### Block 8.7 — [CALL] chkHaisoStat (L481)

> Determine the delivery status.
> (配送ステータスの判定を行う)

| # | Type | Code |
|---|------|------|
| 1 | SET | `jikou3 = chkHaisoStat((String) childMap.get("haiso_stat"))` |

#### Block 8.8 — [IF] haiso_stat == "1" — Received (L482)

> Delivery status is "1" (Received). Track the delivery cancel and update the haisoCanMap for later delivery cancel processing.
> (配送機器キャンセル再作成のデータを保持します。（1配送データに複数の機器が紐付いている）)

| # | Type | Code |
|---|------|------|
| 1 | SET | `bk_haisoNo = (String) childMap.get(HAISO_NO)` |
| 2 | IF (containsKey) | `if (haisoCanMap.containsKey(bk_haisoNo))` (L493) |

##### Block 8.8.1 — [ELSE] haisoCanMap already contains this delivery (L495)

> Same delivery number already exists — append the equipment change number to the existing list.

| # | Type | Code |
|---|------|------|
| 1 | SET | `haisoMap = (HashMap) haisoCanMap.get(bk_haisoNo)` |
| 2 | SET | `canKikiChgNoList = (ArrayList<String>) haisoMap.get(CAN_HAISO_KIKI_CHG_NO_LIST)` |
| 3 | SET | `canKikiChgNoList.add(getNullToStr(ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.KIKI_CHG_NO)))` |

##### Block 8.8.2 — [ELSE] New delivery number (L502)

> New delivery number — create a new entry in the haisoCanMap.

| # | Type | Code |
|---|------|------|
| 1 | SET | `haisoMap = new HashMap<String, Object>()` |
| 2 | SET | `canKikiChgNoList = new ArrayList<String>()` |
| 3 | SET | `canKikiChgNoList.add(getNullToStr(ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.KIKI_CHG_NO)))` |
| 4 | EXEC | `haisoMap.put(CAN_HAISO_KIKI_CHG_NO_LIST, canKikiChgNoList)` |
| 5 | EXEC | `haisoMap.put(CAN_HAISO_TIME_STMP, childMap.get("haiso_upd_dtm"))` |
| 6 | EXEC | `haisoCanMap.put(bk_haisoNo, haisoMap)` |

#### Block 8.9 — [ELSE IF] haiso_stat == "2" — Returned (L512)

> Delivery status is "2" (Returned). Execute returned equipment receipt S-IF.
> (返品機器受取S-IFを実行する)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `execEDK0301D010(handle, scCall, param, dataMapKey, temporaryData, childMap)` |

#### Block 8.10 — [SET] Equipment Progress Registration Fields (L518–538)

> Prepare the fields for equipment progress registration (機器用進捗登録).

| # | Type | Code |
|---|------|------|
| 1 | SET | `prg_tkjk1 = ""` |
| 2 | SET | `ido_div = ""` |
| 3 | IF (jikou2 == "1") | `if ("1".equals(jikou2))` (L520) |

##### Block 8.10.1 — [SET] jikou2 == "1" — Cancel (L521)

> Set progress description: "接続機器キャンセル" (Connection device cancel) + model code.

| # | Type | Code |
|---|------|------|
| 1 | SET | `prg_tkjk1 = "接続機器キャンセル: " + (String) childMap.get("taknkiki_model_cd")` |
| 2 | SET | `ido_div = (String) ccMsg.get("ido_div")` |

##### Block 8.10.2 — [ELSE IF] jikou2 == "2" — Dissolve (L524)

> Set progress description: "接続機器解約" (Connection device dissolution) + model code.

| # | Type | Code |
|---|------|------|
| 1 | SET | `prg_tkjk1 = "接続機器解約: " + (String) childMap.get("taknkiki_model_cd")` |
| 2 | SET | `ido_div = IDO_DIV_0026` // (異動区分（機器契約変更）= "00026") |

#### Block 8.11 — [SET] Set idoDtm for Equipment Progress (L529–533)

> Same logic as Block 6: use original timestamp for new contracts or service additions.

| # | Type | Code |
|---|------|------|
| 1 | SET | `idoDtm = (String) ccMsg.get("sysdate_stp")` |
| 2 | IF (OR condition) | `if ("00001".equals(ido_div) || "00002".equals(ido_div))` (L532) |

##### Block 8.11.1 — [SET] Use originally acquired timestamp (L533)

| # | Type | Code |
|---|------|------|
| 1 | SET | `idoDtm = (String) ccMsg.get("ido_dtm")` |

#### Block 8.12 — [CALL] Equipment Progress Registration (L537–549)

> Register equipment cancellation progress with PRG_STAT = "3302".
> (機器用進捗登録)

| # | Type | Code |
|---|------|------|
| 1 | SET | `ekk1091d010_KIKI = {TEMPLATEID -> TEMPLATE_ID_EKK1091D010, FUNC_CODE -> func_code, MSKM_DTL_NO -> getMskmDtlNo(param, temporaryData), SVC_KEI_NO -> svc_kei_no, IDO_DIV -> ido_div, IDO_DTM -> idoDtm, PRG_STAT -> "3302", PRG_MEMO -> "", PRG_TKJK_1 -> prg_tkjk1, PRG_TKJK_2 -> ""}` |
| 2 | CALL | `execEKK1091D010(handle, scCall, param, dataMapKey, ekk1091d010_KIKI)` // (機器用進捗登録S-IFを実行する) |

#### Block 8.13 — [CALL] Device Option Agreement Check (L556–558)

> Check device-option service agreements (combined search).
> (機器オプションサービス契約照会（複合検索）)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `ekk2811b504cbsMsg1list = execEKK2811B504(handle, scCall, param, dataMapKey, childMap)` |

#### Block 8.14 — [IF] Device Option Results Not Null (L560)

> Process each device-option service agreement result.

| # | Type | Code |
|---|------|------|
| 1 | IF (null check) | `if (ekk2811b504cbsMsg1list != null)` (L560) |

##### Block 8.14.1 — [FOR] Iterate device-option results (L562)

| # | Type | Code |
|---|------|------|
| 1 | FOR | `for (CAANMsg ekk2811b504Msg : ekk2811b504cbsMsg1list)` (L563) |

##### Block 8.14.2 — [SET] Extract device-option service code and status (L567, 573)

| # | Type | Code |
|---|------|------|
| 1 | SET | `kkop_svc_cd = ekk2811b504Msg.getString(EKK2811A010CBSMsg1List.KKOP_SVC_CD)` // (機器オプションサービスコード) |
| 2 | IF (equals NOT G03) | `if (!KKOP_SVC_CD_G03.equals(kkop_svc_cd))` (L570) |

###### Block 8.14.2.1 — [IF] Not G03 (device insurance) — Skip (L570)

> Device-option service code is NOT "G03" (Device Insurance). Skip this record.
> (機器オプションサービスコードが"端末保障"以外の場合、処理しない)

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `continue` |

###### Block 8.14.2.2 — [SET] Extract status (L576)

> Device-option service contract status.
> (機器オプションサービス契約ステータスを取得)

| # | Type | Code |
|---|------|------|
| 1 | SET | `kkop_stat = ekk2811b504Msg.getString(EKK2811A010CBSMsg1List.KKOP_SVC_KEI_STAT)` |
| 2 | IF (OR condition — skip dissolved/cancelled) | `if (KKOP_STAT_910.equals(kkop_stat) || KKOP_STAT_920.equals(kkop_stat))` (L579) |

####### Block 8.14.2.2.1 — [IF] Already dissolved/cancelled (L579)

> Status is 910 (Dissolved) or 920 (Cancelled). Skip.
> (機器オプションサービス契約ステータスが"解約済"または"キャンセル済"の場合、処理しない)

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `continue` |

####### Block 8.14.2.2.2 — [ELSE IF] Status 010/020 — Cancel (L582)

> Status is 010 (Received) or 020 (Under review). Execute cancel S-IF.
> (機器オプションサービス契約ステータスが"受取済"または"照会済"の場合、キャンセル)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `execEKK2811C110(handle, scCall, param, dataMapKey, temporaryData, ekk2811b504Msg)` // (機器オプションサービス契約キャンセルS-IFを実行する) |

####### Block 8.14.2.2.3 — [ELSE] Other — Dissolve (L585)

> Other status. Execute dissolution S-IF and dissolution confirmation S-IF.
> (機器オプションサービス契約解約S-IFを実行する / 機器オプションサービス契約解約確定S-IFを実行する)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `execEKK2811C140(handle, scCall, param, dataMapKey, temporaryData, ekk2811b504Msg)` |
| 2 | CALL | `execEKK2811C150(handle, scCall, param, dataMapKey, temporaryData, ekk2811b504Msg)` |

### Block 9 — [IF] Smartlink Option Processing (L594)

> If smartlink_op_kei_flg is "1" (Checkbox ON), execute option service cancellation processing.
> (スマートリンクオプションがフラグが"1"（チェックボックスがON）の場合)

| # | Type | Code |
|---|------|------|
| 1 | IF | `if ("1".equals((String) ccMsg.get("smartlink_op_kei_flg")))` (L594) |

#### Block 9.1 — [CALL] chkOptStat (L599)

> Determine the option contract status.
> (オプション契約ステータスの判定を行う)

| # | Type | Code |
|---|------|------|
| 1 | SET | `jikou4 = chkOptStat((String) ccMsg.get("opt_stat"))` |

#### Block 9.2 — [IF] opt_stat == "1" — Accept → Cancel (L601)

> Option status is "1" (Accepted). Execute option cancel.
> (オプションサービス契約キャンセル)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `execEKK0351C220(handle, scCall, param, dataMapKey, temporaryData)` |

#### Block 9.3 — [ELSE IF] opt_stat == "2" — Dissolve (L604)

> Option status is "2" (Under dissolution). Execute dissolve S-IF and dissolve confirmation S-IF.
> (オプションサービス契約解約 / オプションサービス契約解約確定)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `execEKK0351C240(handle, scCall, param, dataMapKey, temporaryData)` |
| 2 | CALL | `execEKK0351C250(handle, scCall, param, dataMapKey, temporaryData)` |

#### Block 9.4 — [SET] Option Progress Registration Fields (L608–617)

> Prepare progress registration fields for option processing.

| # | Type | Code |
|---|------|------|
| 1 | SET | `prg_tkjk1 = ""` |
| 2 | SET | `ido_div = ""` |
| 3 | IF (jikou4 == "1") | `if ("1".equals(jikou4))` (L610) |

##### Block 9.4.1 — [SET] jikou4 == "1" — Cancel (L611)

> Progress description: "スマートリンクプレミアム情報キャンセル" (Smartlink Premium Information Cancel).

| # | Type | Code |
|---|------|------|
| 1 | SET | `prg_tkjk1 = "スマートリンクプレミアム情報キャンセル"` |
| 2 | SET | `ido_div = (String) ccMsg.get("ido_div")` |

##### Block 9.4.2 — [ELSE IF] jikou4 == "2" — Dissolve (L614)

> Progress description: "スマートリンクプレミアム情報解約" (Smartlink Premium Information Dissolution).

| # | Type | Code |
|---|------|------|
| 1 | SET | `prg_tkjk1 = "スマートリンクプレミアム情報解約"` |
| 2 | SET | `ido_div = IDO_DIV_0031` // (異動区分（オプション設定）= "00031") |

#### Block 9.5 — [SET] Set idoDtm for Option Progress (L618–623)

> Same timestamp logic as Block 6 and 8.11.

| # | Type | Code |
|---|------|------|
| 1 | SET | `idoDtm = (String) ccMsg.get("sysdate_stp")` |
| 2 | IF (OR condition) | `if ("00001".equals(ido_div) || "00002".equals(ido_div))` (L622) |

##### Block 9.5.1 — [SET] Use originally acquired timestamp (L623)

| # | Type | Code |
|---|------|------|
| 1 | SET | `idoDtm = (String) ccMsg.get("ido_dtm")` |

#### Block 9.6 — [CALL] Option Progress Registration (L625–639)

> Register option cancellation progress with PRG_STAT = "5102".
> (オプション用進捗登録)

| # | Type | Code |
|---|------|------|
| 1 | SET | `ekk1091d010_OP = {TEMPLATEID -> TEMPLATE_ID_EKK1091D010, FUNC_CODE -> func_code, MSKM_DTL_NO -> getMskmDtlNo(param, temporaryData), SVC_KEI_NO -> svc_kei_no, IDO_DIV -> ido_div, IDO_DTM -> idoDtm, PRG_STAT -> "5102", PRG_MEMO -> "", PRG_TKJK_1 -> prg_tkjk1, PRG_TKJK_2 -> ""}` |
| 2 | CALL | `execEKK1091D010(handle, scCall, param, dataMapKey, ekk1091d010_OP)` // (オプション用進捗登録S-IFを実行する) |

### Block 10 — [IF] Delivery Cancel Processing (L644–647)

> If delivery cancel data is stored, execute delivery cancel processing (wash replacement).
> (配送のキャンセル処理を行った場合、配送キャンセル処理（洗い替え）を行います。)

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (!haisoCanMap.isEmpty())` (L645) |

#### Block 10.1 — [CALL] Delivery Cancel Processing (L646)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `execHaisoCancelCreate(handle, scCall, param, dataMapKey, haisoCanMap)` |

### Block 11 — [IF] Home Device Inventory Update (v9.00.02) (L652–657)

> If delivery cancel processing was executed, update the home device logistics inventory.
> (配送のキャンセル処理を行った場合、宅内機器物流在庫を更新します。)

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (!haisoCanMap.isEmpty())` (L654) |

#### Block 11.1 — [CALL] Inventory Update (L656)

> Update inventory (Home device logistics inventory — EKKA0020504).
> (宅内機器物流在庫更新)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `execEKKA0020504(handle, scCall, param, dataMapKey, delKikiList)` |

### Block 12 — [IF] Old Project Cancellation (v10.00.00) (L660–669)

> Based on the service contract status from the pre-check, determine if old-project cancellation is needed.
> (サービス契約ステータス / キャンセル処理)

| # | Type | Code |
|---|------|------|
| 1 | SET | `svcKeiStat = ekk0081a010CBSMsg.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT)` // (サービス契約ステータス) |
| 2 | IF (NOT EQUALS) | `if (!SVC_KEI_STAT_010.equals(svcKeiStat))` (L662) |

#### Block 12.1 — [CALL] Old Project Cancellation (L664)

> Execute old-project cancellation processing.
> (キャンセル処理)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `isExecKojiAnkenCancel(handle, scCall, param, dataMapKey, temporaryData)` |

### Block 13 — [RETURN] (L673)

> Return the param object with all processing results.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return param` |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `updKapKeiCancel` | Method | Subcontract Information Cancel Update — cancels subcontracted service contract lines and associated equipment, delivery, and option services |
| `kap_kei_stat` | Field | Subcontract status code — determines if a subcontract is in which state: 010 (Received), 020 (Under review), 030 (Closed), 100 (Completed) |
| `kiki_stat` | Field | Equipment service contract status code — same convention as kap_kei_stat for equipment-level agreements |
| `haiso_stat` | Field | Delivery status code — 001 (Received), 002 (Designated), 003 (Shipped), 004 (Completed) |
| `opt_stat` | Field | Option contract status code — same convention as kap_kei_stat for option service agreements |
| `func_code` | Field | Function code — "1" for Check & Register mode, "2" for Check Only mode |
| `s_mode` | Field | Screen mode — "0" for Billing System, "1" for Equipment Provider Service List screen |
| `svc_kei_no` | Field | Service contract number — the unique identifier for a service contract line item |
| `svc_kei_stat` | Field | Service contract status — 010 (Received/Completed), 020 (Under review), 030 (Closed), 100 (Service providing) |
| `ido_div` | Field | Movement division code — classifies the type of contract change: 00001 (New contract), 00002 (Service addition), 00026 (Equipment contract change), 00031 (Option setting) |
| `ido_dtm` | Field | Movement datetime — the timestamp recorded during initial processing, preserved for new contract/addition cases |
| `sysdate_stp` | Field | System date stamp — the current processing timestamp used for non-new-contract cases |
| `del_kap_list` | Field | Subcontract cancellation list — ArrayList of subcontract details to be cancelled |
| `del_kiki_list` | Field | Equipment deletion list — ArrayList of equipment details to be cancelled |
| `haisoCanMap` | Field | Delivery cancel map — tracks delivery numbers associated with cancelled equipment for batch delivery cancel processing |
| `kkop_svc_cd` | Field | Device-option service code — identifies the type of device-option service; "G03" specifically means "Device Insurance" (端末保障) |
| `kkop_stat` | Field | Device-option service contract status — 010 (Received), 020 (Under review), 910 (Dissolved), 920 (Cancelled) |
| `prg_tkjk_1` | Field | Process division description — human-readable description of the cancellation type, set per progress registration |
| `PRG_STAT` | Field | Progress registration status code — "G002" (Subcontract), "3302" (Equipment), "5102" (Option) |
| `SAKI_COM_SVC_UP_DTM` | Constant | Subsequent service contract update timestamp key — stored in the work area for follow-up CCs |
| `MOTO_COM_SVC_UP_DTM` | Constant | Original service contract update timestamp key |
| `KKTK_SVC_KEI_NO` | Constant | Equipment provider service contract number key (for deletion) |
| `HAISO_NO` | Constant | Delivery number key |
| `TAKNKIKIKI_IDO_CD_03` | Constant | Connected device movement code "03" (Partial removal) |
| `ADD_CHGE_DIV_CANCEL` | Constant | Registration/Change division "05" (Cancel) |
| `ADD_CHGE_DIV_DSL` | Constant | Registration/Change division "03" (Dissolution) |
| `SVC_CANCEL_RSN_CD` | Constant | Service cancellation reason code "01" |
| `SVC_DLRE_CD` | Constant | Service dissolution reason code "01" |
| `DSL_CHRG_FLG_HIKAKIN` | Constant | Dissolution fee flag "0" (No fee) |
| `ERR_FLG_ERR` | Constant | Error flag "E" (Error) |
| `ERR_FLG_WARNING` | Constant | Error flag "W" (Warning) |
| `CAN_HAISO_KIKI_CHG_NO_LIST` | Constant | Delivery cancel equipment change number list key |
| `CAN_HAISO_TIME_STMP` | Constant | Delivery cancel timestamp key |
| `TEMPLATE_ID_EKK1091D010` | Constant | Progress registration template ID |
| `TEMPLATE_ID_EKK0081A010` | Constant | Service contract agreement template ID |
| `TEMPLATE_ID_EKK0021A010` | Constant | Application details agreement template ID |
| `TEMPLATE_ID_EKK0341A010` | Constant | Equipment service agreement template ID |
| `TEMPLATE_ID_EKK0341C330` | Constant | Equipment cancel template ID |
| `TEMPLATE_ID_EKK0341C340` | Constant | Equipment dissolve template ID |
| `TEMPLATE_ID_EKK0341C350` | Constant | Equipment dissolve confirmation template ID |
| `TEMPLATE_ID_EKK0351C220` | Constant | Option cancel template ID |
| `TEMPLATE_ID_EKK0351C240` | Constant | Option dissolve template ID |
| `TEMPLATE_ID_EKK0351C250` | Constant | Option dissolve confirmation template ID |
| `TEMPLATE_ID_EKK2541C170` | Constant | Subcontract cancel template ID |
| `TEMPLATE_ID_EKK2541C190` | Constant | Subcontract dissolve template ID |
| `TEMPLATE_ID_EKK2811B504` | Constant | Device option agreement check template ID |
| `TEMPLATE_ID_EKK2811C110` | Constant | Device option cancel template ID |
| `TEMPLATE_ID_EKK2811C140` | Constant | Device option dissolve template ID |
| `TEMPLATE_ID_EKK2811C150` | Constant | Device option dissolve confirmation template ID |
| `TEMPLATE_ID_EDK0301D010` | Constant | Returned equipment receipt template ID |
| `TEMPLATE_ID_EKKA0020504` | Constant | Home device inventory update template ID |
| CC | Acronym | Common Component — a shared business logic component in the K-Opticom x21 framework |
| SC | Acronym | Service Component — a data access/business logic layer component that wraps database operations |
| S-IF | Acronym | Service Interface — a service component method that performs a specific business operation |
| BPM | Acronym | Business Process Management — the workflow engine (KKSV0663Flow) that orchestrates CC calls |
| KKSV0663 | Screen | Subcontract Information Update Cancel Processing screen |
| G03 | Code | Device Insurance (端末保障) — a device-option service category |
| FTTH | Business term | Fiber To The Home — fiber-optic broadband service (domain context) |
| smartlink_op_kei_flg | Field | Smartlink option contract flag — "1" indicates the Smartlink premium option checkbox is ON on the screen |
