# Business Logic — JFUDslNetOpSvcKeiCC.dslSbOpSvcKeiMlad() [122 LOC]

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

## 1. Role

### JFUDslNetOpSvcKeiCC.dslSbOpSvcKeiMlad()

This method performs the core **sub-optional service contract cancellation execution processing** for the **eo Hikari Net (eo光ネット)** internet service in Japan. Specifically, it handles the cancellation (解約, *kaiyaku*) of sub-optional service contracts associated with a DSL network operation. It is the "Mail Address" (メールアドレス) variant of the broader optional service cancellation flow — the counterpart `dslOpSvcKeiMlad()` delegates to this method after resolving pre-conditions and gathering input data.

The method implements a **filter-and-dispatch routing pattern** across each sub-optional service contract record. For each contract in the list, it first validates eligibility by checking the service code against `MLAD_DSL_SBOP` (only email address, Wi-Fi Check, and My Home Page cancellation targets are processed) and then filters out any contracts with invalid statuses from `SVC_KEI_STAT_MUKO` (canceled or terminated contracts are skipped).

For eligible contracts, the method branches by service contract status into two cancellation strategies:
- **Cancellation (キヤンセル) path** — When the contract status is `CD00037_020` ("approved", 照会済), meaning the cancellation request has been reviewed and approved. This triggers a single `EKK0401C150` SC call for contract cancellation.
- **Contract termination (解約) path** — When the contract is still active (not yet approved or already in service provision). This triggers a more complex sequence: a non-fee assessment via `jdgHiChrg()`, followed by contract cancellation via `EKK0401C170`, and finally cancellation confirmation via `EKK0401C180`.

After processing the cancellation, if the sub-optional service code is `CD00137_D01` (Email Address), the method performs an additional ISP agreement inquiry (`EKK0411A010`) and triggers email aging processing via `dslAging()`, which releases or invalidates email-related resources.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["dslSbOpSvcKeiMlad(params)"])
    LOG_START["outDebugLog: Start"]
    SAVE_LAST_UPD["plastUpdDtm = lastUpdDtm"]
    GET_INMAP["inMap = param.getData(fixedText)"]
    INIT_B001["initData: EKK0401B001"]
    IGNORE_ERR["ignoreSearchError: EKK0401B001"]
    SET_MAP_B001["setInMapEKK0401B001(param, fixedText, opIspInfoMap)"]
    EXEC_B001["executeSC: EKK0401B001 Sub-Optional Svc Contract List Inquiry"]
    GET_LIST_B001["sbopSvcKeiList = getTemplateList(...)"]
    FOR_LOOP["for each sbopSvcKeiList (i)"]
    GET_SBOPI["sbopInfoMap = sbopSvcKeiList.get(i)"]
    COND_SVC_CD["SBOP_SVC_CD in MLAD_DSL_SBOP?"]
    SKIP_NOMLAD["skip (continue)"]
    COND_SVC_STAT["SBOP_SVC_KEI_STAT in SVC_KEI_STAT_MUKO?"]
    SKIP_MUKO["skip (continue)"]
    COND_CANCEL["SBOP_SVC_KEI_STAT = CD00037_020?"]
    CANCEL_BRANCH["Cancellation Path"]
    INIT_C150["initData: EKK0401C150"]
    SET_MAP_C150["setInMapEKK0401C150(...)"]
    EXEC_C150["executeSC: EKK0401C150 Contract Cancellation"]
    UPDATE_DTM_C150["plastUpdDtm = getTemplateValue(...)"]
    CHARGE_BRANCH["Non-Approved Path"]
    CHARGE_JDG["jdgHiChrg: Non-fee assessment"]
    INIT_C170["initData: EKK0401C170"]
    SET_MAP_C170["setInMapEKK0401C170(...)"]
    EXEC_C170["executeSC: EKK0401C170 Contract Cancellation"]
    UPDATE_DTM_C170["plastUpdDtm = getTemplateValue(...)"]
    INIT_C180["initData: EKK0401C180"]
    SET_MAP_C180["setInMapEKK0401C180(hiChrgMap)"]
    EXEC_C180["executeSC: EKK0401C180 Cancellation Confirmation"]
    UPDATE_DTM_C180["plastUpdDtm = getTemplateValue(...)"]
    COND_MLAD["SBOP_SVC_CD = CD00137_D01?"]
    INIT_A010["initData: EKK0411A010"]
    SET_MAP_A010["setInMapEKK0411A010(...)"]
    EXEC_A010["executeSC: EKK0411A010 ISP Agreement Inquiry"]
    GET_ISP_MAP["sbopIspInfoMap = getTemplateListMap(...)"]
    CALL_AGING["dslAging: Email Aging Processing"]
    LOG_END["outDebugLog: End"]
    RETURN["return plastUpdDtm"]
    END(["End"])

    START --> LOG_START --> SAVE_LAST_UPD --> GET_INMAP
    GET_INMAP --> INIT_B001 --> IGNORE_ERR --> SET_MAP_B001 --> EXEC_B001 --> GET_LIST_B001 --> FOR_LOOP
    FOR_LOOP --> GET_SBOPI
    GET_SBOPI --> COND_SVC_CD
    COND_SVC_CD -- No --> SKIP_NOMLAD --> FOR_LOOP
    COND_SVC_CD -- Yes --> COND_SVC_STAT
    COND_SVC_STAT -- Yes --> SKIP_MUKO --> FOR_LOOP
    COND_SVC_STAT -- No --> COND_CANCEL
    COND_CANCEL -- Yes (CD00037_020) --> CANCEL_BRANCH
    COND_CANCEL -- No --> CHARGE_BRANCH
    CANCEL_BRANCH --> INIT_C150 --> SET_MAP_C150 --> EXEC_C150 --> UPDATE_DTM_C150 --> COND_MLAD
    CHARGE_BRANCH --> CHARGE_JDG --> INIT_C170 --> SET_MAP_C170 --> EXEC_C170 --> UPDATE_DTM_C170
    UPDATE_DTM_C170 --> INIT_C180 --> SET_MAP_C180 --> EXEC_C180 --> UPDATE_DTM_C180 --> COND_MLAD
    COND_MLAD -- Yes --> INIT_A010 --> SET_MAP_A010 --> EXEC_A010 --> GET_ISP_MAP --> CALL_AGING
    COND_MLAD -- No --> LOG_END
    CALL_AGING --> LOG_END
    LOG_END --> RETURN --> END
```

**Processing overview (constant resolution):**
- `MLAD_DSL_SBOP` = `[CD00137_D01, CD00137_D02, CD00137_D03]` — sub-optional service codes eligible for cancellation processing (see Glossary for descriptions)
- `SVC_KEI_STAT_MUKO` = `[CD00037_910, CD00037_920]` — invalid contract statuses to skip (see Glossary)
- `CD00037_020` = "Approved" (照会済) — indicates the contract cancellation request has been reviewed and approved
- `CD00137_D01` = "Email Address" — the email address service type, which triggers additional aging processing

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `handle` | `SessionHandle` | Database session handle used to execute service component (SC) calls. Provides the transactional context for database operations. |
| 2 | `param` | `IRequestParameterReadWrite` | Request parameter management object. Holds input/output data maps keyed by `fixedText` (service message key). Used to initialize, populate, and retrieve template data for SC calls. |
| 3 | `fixedText` | `String` | Service message identifier / key used to correlate request parameters with the correct data map. Acts as a namespace for template data within `param`. |
| 4 | `opInfoMap` | `HashMap` | Optional service contract information map (before-change state). Contains the parent optional service contract details, including the contract status (`OP_SVC_KEI_STAT`) used for cancellation vs. termination branching. |
| 5 | `opIspInfoMap` | `HashMap` | Optional <ISP> service contract information map. Contains ISP-level service details used when initializing the sub-optional service contract list inquiry (`EKK0401B001`). |
| 6 | `mskmNaiyoMap` | `HashMap` | Application content information map (申込内容, *moushikomi naiyo*). Contains subscriber application details including SYSID, application date, and other registration context data. |
| 7 | `lastUpdDtm` | `String` | Last update date-time stamp (最終更新年月日時分秒). Tracked across loop iterations to maintain a running audit trail of the most recent update timestamp for the current batch of cancellation operations. |

**Instance fields / external state read by this method:**
- None directly. All configuration constants are resolved via the pre-extracted list (`MLAD_DSL_SBOP`, `SVC_KEI_STAT_MUKO`) and the CBS message classes.

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `JFUBaseCC.getMaxTempTempleteKey` | JFUBaseCC | - | Retrieves the maximum temporary template key for the given template ID |
| R | `JFUBaseCC.getTemplateList` | JFUBaseCC | - | Returns the list of sub-optional service contract records from the current template |
| R | `JFUBaseCC.getTemplateListMap` | JFUBaseCC | - | Returns a single template map entry from the result set |
| R | `JFUBaseCC.getTemplateValue` | JFUBaseCC | - | Retrieves a specific field value from a template result map |
| - | `JFUBaseCC.ignoreSearchError` | JFUBaseCC | - | Configures the request parameter to suppress search errors during the EKK0401B001 inquiry |
| - | `JFUBaseCC.initData` | JFUBaseCC | - | Initializes the request parameter data map with empty/default values for the given column list |
| R | `JFUBaseUtil.getMaxTempTempleteKey` | JFUBase | - | Utility equivalent: retrieves the maximum temporary template key |
| R | `JFUBaseUtil.getTemplateList` | JFUBase | - | Utility equivalent: returns template list data |
| R | `JFUBaseUtil.getTemplateListMap` | JFUBase | - | Utility equivalent: returns a single template map entry |
| R | `JFUBaseUtil.getTemplateValue` | JFUBase | - | Utility equivalent: retrieves a specific field value from a template result |
| - | `JFUBaseUtil.ignoreSearchError` | JFUBase | - | Utility equivalent: suppresses search errors |
| - | `JFUBaseUtil.initData` | JFUBase | - | Utility equivalent: initializes request parameter data |
| - | `JFUBPCommon.executeSC` | JFUBPCommon | - | Standard SC execution wrapper |
| R | `JFUBPCommon.getMaxTempTempleteKey` | JFUBPCommon | - | BP-common utility for template key retrieval |
| R | `JFUBPCommon.getTemplateList` | JFUBPCommon | - | BP-common utility for template list retrieval |
| R | `JFUBPCommon.getTemplateListMap` | JFUBPCommon | - | BP-common utility for template map retrieval |
| R | `JFUBPCommon.getTemplateValue` | JFUBPCommon | - | BP-common utility for template value retrieval |
| - | `JFUBPCommon.ignoreSearchError` | JFUBPCommon | - | BP-common utility for error suppression |
| - | `JFUBPCommon.initData` | JFUBPCommon | - | BP-common utility for initialization |
| - | `JFUDslNetOpSvcKeiCC.dslAging` | JFUDslNetOpSvcKeiCC | - | Triggers aging (resource release/invalidation) processing for email-related resources |
| R | `JFUDslNetOpSvcKeiCC.getAliasAddress` | JFUDslNetOpSvcKeiCC | - | Extracts and combines alias email addresses from ISP and sub-optional ISP info maps |
| - | `JFUDslNetOpSvcKeiCC.jdgHiChrg` | JFUDslNetOpSvcKeiCC | - | Performs non-fee (penalty) assessment to determine if a penalty applies to the cancellation |
| - | `JFUDslNetOpSvcKeiCC.outDebugLog` | JFUDslNetOpSvcKeiCC | - | Writes debug log entries |
| - | `JFUDslNetOpSvcKeiCC.setInMapEKK0401B001` | JFUDslNetOpSvcKeiCC | - | Maps input parameters for the EKK0401B001 SC call |
| - | `JFUBaseCC.executeSC` | JFUBaseCC | - | Core SC execution method |

### Inferred SC-level operations (derived from CBS class names and SC Code patterns):

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `EKK0401B001CBSMsg` | EKK0401B001 | `KK_T_SBOP_SVC_KEI` (sub-optional service contract) | Sub-Optional Service Contract List Inquiry — retrieves all sub-optional service contracts for the given optional service contract number |
| C | `EKK0401C150CBSMsg` | EKK0401C150 | `KK_T_SBOP_SVC_KEI` (sub-optional service contract) | Sub-Optional Service Contract Cancellation — cancels an approved sub-optional service contract (status = approved/照会済) |
| C | `EKK0401C170CBSMsg` | EKK0401C170 | `KK_T_SBOP_SVC_KEI` (sub-optional service contract) | Sub-Optional Service Contract Cancellation — terminates a non-approved sub-optional service contract (active or in-service) |
| C | `EKK0401C180CBSMsg` | EKK0401C180 | `KK_T_SBOP_SVC_KEI` (sub-optional service contract) | Sub-Optional Service Contract Cancellation Confirmation — confirms the cancellation with penalty assessment results |
| R | `EKK0411A010CBSMsg` | EKK0411A010 | `KK_T_SBOP_SVC_KEI_ISP` (sub-optional ISP contract) | Sub-Optional Service Contract <ISP> Agreement Inquiry — retrieves ISP-level agreement details for email address services |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | `JFUDslNetOpSvcKeiCC.dslOpSvcKeiMlad()` | `dslOpSvcKeiMlad()` -> `dslSbOpSvcKeiMlad()` | `executeSC[EKK0401B001] [R] KK_T_SBOP_SVC_KEI`; `executeSC[EKK0401C150] [C] KK_T_SBOP_SVC_KEI`; `executeSC[EKK0401C170] [C] KK_T_SBOP_SVC_KEI`; `executeSC[EKK0401C180] [C] KK_T_SBOP_SVC_KEI`; `executeSC[EKK0411A010] [R] KK_T_SBOP_SVC_KEI_ISP`; `dslAging [-] EZM0111C010`; `jdgHiChrg [-]` |

## 6. Per-Branch Detail Blocks

**Block 1** — [SET/EXEC] `(setup & data retrieval) (L1491)`

> Initialization and data retrieval: logs start, saves last update timestamp, and retrieves the input data map.

| # | Type | Code |
|---|------|------|
| 1 | LOG | `outDebugLog("----- dslSbOpSvcKeiMlad Start -----")` |
| 2 | SET | `String plastUpdDtm = lastUpdDtm` |
| 3 | EXEC | `HashMap inMap = (HashMap)param.getData(fixedText)` |

**Block 2** — [EXEC] `(EKK0401B001: Sub-Optional Service Contract List Inquiry) (L1499)`

> Initializes the request for the sub-optional service contract list inquiry, suppresses search errors, maps ISP info, executes the SC, and retrieves the resulting contract list.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `initData(param, fixedText, IN_COL_LIST_EKK0401B001)` |
| 2 | EXEC | `ignoreSearchError(param, fixedText)` // Suppress search errors |
| 3 | EXEC | `setInMapEKK0401B001(param, fixedText, opIspInfoMap)` |
| 4 | CALL | `executeSC(handle, param, fixedText, TEMP_ID_EKK0401B001, TEMP_ID_DTL_EKK0401B001, IN_COL_LIST_EKK0401B001, ERR_COL_EKK0401B001)` |
| 5 | SET | `List<HashMap> sbopSvcKeiList = getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0401B001), TEMP_ID_DTL_EKK0401B001)` |

**Block 3** — [FOR] `(iterate over sub-optional service contracts) (L1515)`

> Iterates over each sub-optional service contract record from the list retrieved above.

| # | Type | Code |
|---|------|------|
| 1 | FOR | `for (int i = 0; i < sbopSvcKeiList.size(); i++)` |
| 2 | SET | `HashMap sbopInfoMap = (HashMap)sbopSvcKeiList.get(i)` |

**Block 3.1** — [IF] `(MLAD_DSL_SBOP.contains(SBOP_SVC_CD)) (L1521)`

> Skip logic: if the sub-optional service code is NOT in the list of cancellation-eligible services, skip this record. `MLAD_DSL_SBOP = [CD00137_D01, CD00137_D02, CD00137_D03]` -> Email Address / Wi-Fi Check / My Home Page. [-> MLAD_DSL_SBOP=[CD00137_D01, CD00137_D02, CD00137_D03] (JFUDslNetOpSvcKeiCC.java:L530)]

| # | Type | Code |
|---|------|------|
| 1 | IF | `!MLAD_DSL_SBOP.contains(sbopInfoMap.get(EKK0401B001CBSMsg1List.SBOP_SVC_CD))` [-> MLAD_DSL_SBOP=[CD00137_D01, CD00137_D02, CD00137_D03] (JFUDslNetOpSvcKeiCC.java:L530)] |
| 2 | EXEC | `continue` // Skip this record |

**Block 3.2** — [IF] `(SVC_KEI_STAT_MUKO.contains(SBOP_SVC_KEI_STAT)) (L1529)`

> Skip logic: if the sub-optional service contract status is in the list of invalid statuses, skip this record. `SVC_KEI_STAT_MUKO = [CD00037_910, CD00037_920]`. [-> SVC_KEI_STAT_MUKO=[CD00037_910, CD00037_920] (JFUDslNetOpSvcKeiCC.java:L533)]

| # | Type | Code |
|---|------|------|
| 1 | IF | `SVC_KEI_STAT_MUKO.contains(sbopInfoMap.get(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_STAT))` [-> SVC_KEI_STAT_MUKO=[CD00037_910, CD00037_920] (JFUDslNetOpSvcKeiCC.java:L533)] |
| 2 | EXEC | `continue` // Skip this record |

**Block 3.3** — [IF/ELSE] `(SBOP_SVC_KEI_STAT = CD00037_020 — Cancellation vs. Termination) (L1548)`

> Branch on the sub-optional service contract status. If the status equals `CD00037_020` (Approved/照会済), the cancellation has already been reviewed and a simple cancellation call is sufficient. Otherwise, the contract is still active and requires a full termination flow including penalty assessment. [-> CD00037_020 = "Approved" (JFUDslNetOpSvcKeiCC.java:L1548)]

**Block 3.3.1** — [IF-TRUE] `(CD00037_020 — Approved: Cancellation Path) (L1554)`

> EKK0401C150: Sub-Optional Service Contract Cancellation. When the contract status is "Approved" (照会済), the cancellation request has already been reviewed. This path performs a direct cancellation.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `initData(param, fixedText, IN_COL_LIST_EKK0401C150)` |
| 2 | EXEC | `setInMapEKK0401C150(param, fixedText, sbopInfoMap, mskmNaiyoMap, plastUpdDtm)` |
| 3 | CALL | `executeSC(handle, param, fixedText, TEMP_ID_EKK0401C150, TEMP_ID_DTL_EKK0401C150, IN_COL_LIST_EKK0401C150, ERR_COL_EKK0401C150)` |
| 4 | SET | `plastUpdDtm = getTemplateValue(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0401C150), EKK0401C150CBSMsg.UPD_DTM)` |

**Block 3.3.2** — [IF-FALSE] `(not CD00037_020 — Active: Non-Approved / Termination Path) (L1561)`

> EKK0401C170 + EKK0401C180: Full termination flow. When the contract is not yet approved (e.g., "completed" 締結済 or "in-service" サービス提供中), this path performs a non-fee assessment and then a full cancellation and confirmation sequence.

**Block 3.3.2.1** — [EXEC] `(jdgHiChrg: Non-fee Assessment) (L1564)`

> Determines whether a penalty/non-fee applies to this cancellation. Returns a map with penalty flags and end dates. The third argument `"2"` indicates this is a sub-optional service (vs. `"1"` for optional service).

| # | Type | Code |
|---|------|------|
| 1 | SET | `HashMap hiChrgMap = jdgHiChrg(handle, param, fixedText, opInfoMap, sbopInfoMap, "2")` |

**Block 3.3.2.2** — [EXEC] `(EKK0401C170: Contract Cancellation) (L1567)`

> Sub-Optional Service Contract Cancellation for active contracts. Sets the cancellation effective date, service end date, penalty code, and other termination parameters.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `initData(param, fixedText, IN_COL_LIST_EKK0401C170)` |
| 2 | EXEC | `setInMapEKK0401C170(param, fixedText, sbopInfoMap, mskmNaiyoMap, plastUpdDtm)` |
| 3 | CALL | `executeSC(handle, param, fixedText, TEMP_ID_EKK0401C170, TEMP_ID_DTL_EKK0401C170, IN_COL_LIST_EKK0401C170, ERR_COL_EKK0401C170)` |
| 4 | SET | `plastUpdDtm = getTemplateValue(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0401C170), EKK0401C170CBSMsg.UPD_DTM)` |

**Block 3.3.2.3** — [EXEC] `(EKK0401C180: Cancellation Confirmation) (L1575)`

> Sub-Optional Service Contract Cancellation Confirmation. Finalizes the cancellation with the penalty assessment results from `hiChrgMap`. This is the last step that modifies the contract data.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `initData(param, fixedText, IN_COL_LIST_EKK0401C180)` |
| 2 | EXEC | `setInMapEKK0401C180(param, fixedText, sbopInfoMap, hiChrgMap, plastUpdDtm)` |
| 3 | CALL | `executeSC(handle, param, fixedText, TEMP_ID_EKK0401C180, TEMP_ID_DTL_EKK0401C180, IN_COL_LIST_EKK0401C180, ERR_COL_EKK0401C180)` |
| 4 | SET | `plastUpdDtm = getTemplateValue(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0401C180), EKK0401C180CBSMsg.UPD_DTM)` |

**Block 3.4** — [IF] `(SBOP_SVC_CD = CD00137_D01 — Email Address Branch) (L1586)`

> If the sub-optional service code is `CD00137_D01` (Email Address), perform an ISP agreement inquiry and then email aging processing. This additional step is needed because email address services have their own ISP-level agreement management. [-> CD00137_D01 = Email Address (JFUDslNetOpSvcKeiCC.java:L529)]

| # | Type | Code |
|---|------|------|
| 1 | IF | `JFUStrConst.CD00137_D01.equals(sbopInfoMap.get(EKK0401B001CBSMsg1List.SBOP_SVC_CD))` [-> CD00137_D01 = Email Address (JFUDslNetOpSvcKeiCC.java:L529)] |

**Block 3.4.1** — [EXEC] `(EKK0411A010: ISP Agreement Inquiry) (L1593)`

> Sub-Optional Service Contract <ISP> Agreement Inquiry. Retrieves ISP-level agreement details for the email address service.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `initData(param, fixedText, IN_COL_LIST_EKK0411A010)` |
| 2 | EXEC | `setInMapEKK0411A010(param, fixedText, sbopInfoMap)` |
| 3 | CALL | `executeSC(handle, param, fixedText, TEMP_ID_EKK0411A010, TEMP_ID_DTL_EKK0411A010, IN_COL_LIST_EKK0411A010, ERR_COL_EKK0411A010)` |
| 4 | SET | `sbopIspInfoMap = getTemplateListMap(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0411A010), TEMP_ID_DTL_EKK0411A010, 0)` |

**Block 3.4.2** — [EXEC] `(dslAging: Email Aging Processing) (L1603)`

> Email address aging processing. Calls `dslAging` with the aging subject type code `CD00412_008` and the combined alias email addresses from ISP info. This triggers resource release/invalidation for email-related aging items. [-> CD00412_008 = Email Aging Subject (JFUDslNetOpSvcKeiCC.java:L1603)]

| # | Type | Code |
|---|------|------|
| 1 | CALL | `dslAging(handle, param, fixedText, JFUStrConst.CD00412_008, getAliasAddress(opIspInfoMap, sbopIspInfoMap))` |

**Block 4** — [SET/RETURN] `(end of method) (L1607)`

> Final debug log and return the last update timestamp.

| # | Type | Code |
|---|------|------|
| 1 | LOG | `outDebugLog("----- dslSbOpSvcKeiMlad Start -----")` // Note: source says "Start" but is at end of method |
| 2 | RETURN | `return plastUpdDtm` |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `sbop_svc_kei_no` | Field | Sub-Optional Service Contract Number — the unique identifier for a sub-optional service contract line item |
| `sbop_svc_kei_stat` | Field | Sub-Optional Service Contract Status — indicates the current state of a sub-optional service contract (approved, completed, in-service, terminated, etc.) |
| `op_svc_kei_no` | Field | Optional Service Contract Number — the parent optional service contract identifier |
| `op_svc_kei_stat` | Field | Optional Service Contract Status — the status of the parent optional service contract |
| `sbop_svc_cd` | Field | Sub-Optional Service Code — classifies the type of sub-optional service (e.g., email address, Wi-Fi Check, My Home Page) |
| `last_upd_dtm` | Field | Last Update Date-Time — timestamp of the most recent update to a record |
| `mskm_naiyo_map` | Field | Application Content Map — carries subscriber application details (application date, temporary registration flag, etc.) |
| `dsl` | Business term | DSL (Digital Subscriber Line) — broadband internet access technology; here refers to the eo Hikari Net DSL service line |
| `eo光ネット` | Business term | eo Hikari Net — K-Opticom's fiber-optic internet service brand |
| `解約` (kaiyaku) | Business term | Contract cancellation/termination — the business process of ending a service contract |
| `照会済` (shoukai-zumi) | Business term | Approved / Inquiry Completed — the status indicating a contract change or cancellation request has been reviewed |
| `締結済` (tekketsu-zumi) | Business term | Completed / Concluded — the status indicating a contract has been finalized |
| `サービス提供中` | Business term | In Service / Service Provision Active — the contract is actively providing the service |
| `CD00037_020` | Code | Status code: "Approved" (照会済) — cancellation request reviewed and approved |
| `CD00037_910` | Code | Status code: Invalid/Cancelled status — used as a filter to skip already-cancelled contracts |
| `CD00037_920` | Code | Status code: Invalid/Terminated status — used as a filter to skip terminated contracts |
| `CD00137_D01` | Code | Sub-Optional Service Code: Email Address — the email address optional service |
| `CD00137_D02` | Code | Sub-Optional Service Code: Wi-Fi Check — the Wi-Fi Check optional service |
| `CD00137_D03` | Code | Sub-Optional Service Code: My Home Page — the My Home Page optional service |
| `CD00412_008` | Code | Aging Subject Type Code: Email Address — identifies email-related aging items for resource release |
| `EKK0401B001` | SC Code | Sub-Optional Service Contract List Inquiry — retrieves all sub-optional service contracts for an optional service contract |
| `EKK0401C150` | SC Code | Sub-Optional Service Contract Cancellation — cancels an approved (照会済) sub-optional service contract |
| `EKK0401C170` | SC Code | Sub-Optional Service Contract Cancellation (termination) — terminates a non-approved (active) sub-optional service contract |
| `EKK0401C180` | SC Code | Sub-Optional Service Contract Cancellation Confirmation — confirms cancellation with penalty assessment results |
| `EKK0411A010` | SC Code | Sub-Optional Service Contract <ISP> Agreement Inquiry — retrieves ISP-level agreement details |
| `MLAD_DSL_SBOP` | Constant | List of cancellation-eligible sub-optional service codes: [Email Address, Wi-Fi Check, My Home Page] |
| `SVC_KEI_STAT_MUKO` | Constant | List of invalid contract statuses to skip: [Cancelled, Terminated] |
| `jdgHiChrg` | Method | Non-fee (penalty) assessment — determines if a cancellation penalty applies to the contract |
| `dslAging` | Method | Aging processing — releases or invalidates aging-related resources (e.g., email addresses, IPs) |
| `inMap` | Field | Input HashMap — request parameter data map keyed by the service message (fixedText) |
| `plastUpdDtm` | Field | Previous Last Update Date-Time — running timestamp maintained across loop iterations for audit tracking |
| `SC` | Acronym | Service Component — the layer responsible for database CRUD operations |
| `SOD` | Acronym | Service Order Data — telecom order fulfillment data entity |
| `ISP` | Acronym | Internet Service Provider — the network service provider layer |
| `temp` | Field | Template — temporary data structure used between SC calls for input/output mapping |
