# Business Logic — KKW02501SFLogic.actionUpdCfm() [178 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKW02501SF.KKW02501SFLogic` |
| Layer | Controller (Web Logic Layer) |
| Module | `KKW02501SF` (Package: `eo.web.webview.KKW02501SF`) |

## 1. Role

### KKW02501SFLogic.actionUpdCfm()

This method implements the **"Update Confirmation"** button processing for a service contract modification screen in the K-Opticom telecommunications customer management system. It is the central dispatch handler for the confirmation phase where a customer reviews and confirms changes to their service before final submission. The method operates as a **routing/dispatch pattern**, examining the `trans_div` (processing division) field to determine whether the operation is a service termination (DSL cancel) or a service update (modification of mail address, capacity, etc.), then delegating to specialized service processing blocks accordingly.

The method handles two distinct service type categories: **DSL termination** (processing area code `OP_TRAN_DIV_DSL`, routed to screen `KKSV0429`) and **service update** (processing area code `OP_TRAN_DIV_CHGE`, routed to screen `KKSV0428`). In the update branch, it also enforces additional business rules including mail capacity decrease validation (preventing users from reducing their mailbox capacity below the original value without the parent family package discount), and virus check error handling from the email information change confirmation service.

Its role in the larger system is that of a **web-facing logic intermediary** — it bridges the presentation layer (DataBean values from the confirmation screen) with the backend service components (SC/CBS layer), performing DataBean mapping, service invocation, result reconciliation, and navigation setup (setting next screen ID to `KKW02502` for the post-confirmation screen). If a return message ID exists in the DataBean, it means the user navigated back to the confirmation screen, and the method displays that return message rather than proceeding to the next screen. This method is called by multiple screen logic classes (KKA1xxxSFLogic variants) as a shared confirmation handler.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["actionUpdCfm()"])
    START --> INIT["Initialize: inputMap, outputMap, msgInfo, beans"]
    INIT --> GET_TRANS["Get trans_div from bean"]
    GET_TRANS --> DSL_CHECK{trans_div equals<br/>OP_TRAN_DIV_DSL?}
    DSL_CHECK -->|Yes| DSL_SET["setDslsrv(paramBean, inputMap, FUNC_CD_2)"]
    DSL_SET --> DSL_SVC["doService(KKSV0429, KKSV0429OP)"]
    DSL_SVC --> DSL_STORE["storeDataBeanDslsrv(paramBean, outputMap)"]
    DSL_STORE --> DSL_MSG["msgInfo = INFO_MSGSTRING[1]"]
    DSL_MSG --> RTN_MSG_CHECK
    DSL_CHECK -->|No| CHGE_CHECK{trans_div equals<br/>OP_TRAN_DIV_CHGE?}
    CHGE_CHECK -->|Yes| CHGE_SET["setChgesrv(paramBean, inputMap, FUNC_CD_2)"]
    CHGE_SET --> CHGE_CAPA["Get orgCapaVal, chgCapaVal from bean"]
    CHGE_CAPA --> CHGE_CAPA_CHK{chgCapaVal valid AND<br/>orgCapaVal valid AND<br/>chgCapaVal < orgCapaVal?}
    CHGE_CAPA_CHK -->|True| CHGE_CAPA_ERR["setMessageInfo(EKK0290_JW)<br/>return false"]
    CHGE_CAPA_CHK -->|False| CHGE_SVC["doService(KKSV0428, KKSV0428OP)"]
    CHGE_SVC --> CHGE_ERR_CHECK["Get errFlgChk from EmailInfoChgCfmCC"]
    CHGE_ERR_CHECK --> CHGE_ERR_CHK{errFlgChk equals<br/>ERR_FLG_CHK_YU AND<br/>pack_flg != true AND<br/>virus_chk equals 0?}
    CHGE_ERR_CHK -->|True| CHGE_ERR_MSG["setMessageInfo(EKB1650_JW)<br/>dump DataBean<br/>return false"]
    CHGE_ERR_CHK -->|False| CHGE_STORE["storeDataBeanChgesrv(paramBean, outputMap)"]
    CHGE_STORE --> CHGE_MSG["msgInfo = INFO_MSGSTRING[0]"]
    CHGE_MSG --> CHGE_MLAD_CHECK["Get mlad_chg_flg, alias_bf,<br/>op_svc_kei_stat, ml_vrsette_hktgi_flg"]
    CHGE_MLAD_CHECK --> CHGE_MLAD{mlad_chg_flg equals CHG_TYPE1<br/>AND alias_bf not empty<br/>AND ml_vrsette_hktgi_flg equals 0?}
    CHGE_MLAD -->|True| CHGE_STAT_CHECK{op_svc_kei_stat<br/>equals 010 OR 020?}
    CHGE_STAT_CHECK -->|True| CHGE_MSG_010["setMessageInfo(EKBD360__Q)<br/>Mail address changed / Cancelled"]
    CHGE_STAT_CHECK -->|False| CHGE_MSG_OTHER["setMessageInfo(EKBD360__Q)<br/>Mail address changed / Expired"]
    CHGE_MLAD -->|False| RTN_MSG_CHECK
    CHGE_MSG_010 --> RTN_MSG_CHECK
    CHGE_MSG_OTHER --> RTN_MSG_CHECK
    CHGE_CAPA_ERR --> RTN_MSG_CHECK
    CHGE_ERR_MSG --> RTN_MSG_CHECK
    RTN_MSG_CHECK{"rtn_msgId is null or empty?"}
    RTN_MSG_CHECK -->|Yes| NEXT_SCREEN["Set NEXT_SCREEN_ID to KKW02502<br/>setMessageInfo(EKB0370__I, msgInfo)"]
    RTN_MSG_CHECK -->|No| RTN_MSG_TYPE{rtn_msgId equals<br/>EKB1680--Q or EKB1660--Q?}
    RTN_MSG_TYPE -->|Yes| RTN_DSL_CHK{trans_div equals<br/>OP_TRAN_DIV_DSL?}
    RTN_DSL_CHK -->|Yes| RTN_DSL_NEXT["Set NEXT_SCREEN_ID to KKW02502<br/>setMessageInfo(rtn_msgId)"]
    RTN_DSL_CHK -->|No| RTN_MSG_NULL_CHECK{str == null?}
    RTN_MSG_TYPE -->|No| RTN_MSG_NULL_CHECK
    RTN_MSG_NULL_CHECK -->|True| RTN_MSG_ONLY["setMessageInfo(rtn_msgId)"]
    RTN_MSG_NULL_CHECK -->|False| RTN_MSG_REPLACE["setMessageInfo(rtn_msgId, str)"]
    NEXT_SCREEN --> LOG_DUMP["dumpDatabean()"]
    RTN_DSL_NEXT --> LOG_DUMP
    RTN_MSG_ONLY --> LOG_DUMP
    RTN_MSG_REPLACE --> LOG_DUMP
    LOG_DUMP --> END_RETURN(["return true"])
    CHGE_CAPA_ERR --> END_RETURN
    CHGE_ERR_MSG --> END_RETURN
```

**CRITICAL — Constant Resolution:**

| Constant | Actual Value | Business Meaning |
|----------|-------------|-----------------|
| `JKKCommonConst.OP_TRAN_DIV_DSL` | `"2"` | Processing division code for termination/cancellation |
| `JKKCommonConst.OP_TRAN_DIV_CHGE` | `"1"` | Processing division code for update/modification |
| `KKW02501SFConst.TRAN_DIV` | `"処理区分"` (Processing Division) | DataBean key for the processing division field |
| `KKW02501SFConst.RTN_MSG_ID` | `"返却メッセージID"` (Return Message ID) | DataBean key for the return message identifier |
| `KKW02501SFConst.CAPA` | `"メールメールボックス容量"` (Mail Capacity) | DataBean key for original mail box capacity |
| `KKW02501SFConst.CHGAF_CAPA` | `"変更後メールメールボックス容量"` (Post-Change Mail Capacity) | DataBean key for changed mail box capacity |
| `KKW02501SFConst.FAMIPA_WRIB_UM_FLG` | `"ファミリーパック割引有無フラグ"` (Family Pack Discount Flag) | DataBean key indicating whether family package discount is applied |
| `KKW02501SFConst.CHGBF_VIRUS_CHK_FLG` | `"変更前ウイルスチェック有無フラグ"` (Pre-Change Virus Check Flag) | DataBean key for pre-change virus check flag |
| `ERR_FLG_CHK_YU` | `"1"` | Error flag value indicating an error occurred during email change confirmation |
| `KKW02501SFConst.MLAD_CHG_FLG` | `"メールアクセス変更状態"` (Mail Access Change Status) | DataBean key for mail address change flag |
| `KKW02501SFConst.ALIAS` | `"メールエイリアス"` (Mail Alias) | DataBean key for the mail alias/address |
| `CHG_TYPE1` | `"1"` | Change type indicating mail address was modified |
| `KKW02501SFConst.OP_SVC_KEI_STAT` | `"オプションサービス契約ステータス"` (Option Service Contract Status) | DataBean key for option service contract status |
| `JKKCommonConst.SVC_KEI_STAT_010` | `"010"` | Service contract status: active/providing |
| `JKKCommonConst.SVC_KEI_STAT_020` | `"020"` | Service contract status: suspended |
| `KKW02501SFConst.ML_VRSETTE_HKTGI_FLG` | `"メール各種設定引継フラグ"` (Mail Settings Inheritance Flag) | DataBean key for mail settings inheritance flag |
| `JKKCommonConst.FUNC_CD_2` | `"2"` | Function code for confirmation/display mode |
| `INFO_MSGSTRING[0]` | (Index 0) | Success message for update processing |
| `INFO_MSGSTRING[1]` | (Index 1) | Success message for termination processing |
| `JKKScreenConst.SCREEN_ID_KKW02502` | `KKW02502` | Post-confirmation screen ID |
| `JPCOnlineMessageConstant.EKK0290_JW` | (Message code) | Error: Cannot reduce mailbox capacity |
| `JPCOnlineMessageConstant.EKB1650_JW` | (Message code) | Error: Email change confirmation error |
| `JPCOnlineMessageConstant.EKB0370__I` | (Message code) | Info: Update confirmation completed |
| `JPCOnlineMessageConstant.EKBD360__Q` | (Message code) | Confirmation: Mail address changed query |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| - | (none) | - | This method takes no parameters; it reads all its data from instance-level DataBean fields and super-class shared beans |
| - | `trans_div` | String (from DataBean) | Processing division — determines whether the operation is a termination (`OP_TRAN_DIV_DSL = "2"`) or an update (`OP_TRAN_DIV_CHGE = "1"`) |
| - | `bean` (X31SDataBeanAccess) | DataBean | Service form bean containing the confirmation screen DataBean with all user-entered values |
| - | `commoninfoBean` (X31SDataBeanAccess) | DataBean | Common form bean holding shared navigation state including next screen ID |
| - | `rtn_msgId` | String | Return message ID — when present, indicates the user navigated back to the confirmation screen from a downstream screen, carrying a message to be displayed |
| - | `orgCapaVal` / `chgCapaVal` | String | Original and changed mailbox capacity values — used to validate that capacity is not being reduced without proper conditions |
| - | `pack_flg` | Boolean | Family pack discount flag — determines whether the family package discount is applied, which affects capacity decrease validation |
| - | `virus_chk_idx_bf` | String | Pre-change virus check flag — part of the email change error handling logic |
| - | `mlad_chg_flg` | String | Mail access change flag — indicates whether the mail address was modified |
| - | `alias_bf` | String | Mail alias (pre-change) — the original email address, checked for non-empty when mail change is detected |
| - | `op_svc_kei_stat` | String | Option service contract status — determines the context for mail alias cancellation vs expiration messaging |
| - | `ml_vrsette_hktgi_flg` | String | Mail settings inheritance flag — `"0"` indicates settings are NOT inherited, affecting whether the mail alias change confirmation message is shown |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `JKKBatClarisAuthCrdt.isNullBlank` | JKKBatClarisAuthCrdt | - | Calls `isNullBlank` in `JKKBatClarisAuthCrdt` |
| - | `JKKBatClearPassBase.isNullBlank` | JKKBatClearPassBase | - | Calls `isNullBlank` in `JKKBatClearPassBase` |
| - | `JKKBatClearPassCrdt.isNullBlank` | JKKBatClearPassCrdt | - | Calls `isNullBlank` in `JKKBatClearPassCrdt` |
| - | `JBSbatACEoElectPrcInfoTrkm.isNullBlank` | JBSbatACEoElectPrcInfoTrkm | - | Calls `isNullBlank` in `JBSbatACEoElectPrcInfoTrkm` |
| - | `JBSbatACTrgtSvcKeiMake.isNullBlank` | JBSbatACTrgtKeiMake | - | Calls `isNullBlank` in `JBSbatACTrgtSvcKeiMake` |
| - | `JKKAddSupportCC.setMessageInfo` | JKKAddSupportCC | - | Calls `setMessageInfo` in `JKKAddSupportCC` |
| - | `JKKCreateNhkDntIktCC.setMessageInfo` | JKKCreateNhkDntIktCC | - | Calls `setMessageInfo` in `JKKCreateNhkDntIktCC` |
| - | `JKKFumeiKktkSvcKeiUpdCC.setMessageInfo` | JKKFumeiKktkSvcKeiUpdCC | - | Calls `setMessageInfo` in `JKKFumeiKktkSvcKeiUpdCC` |
| - | `JKKGetKikiUpdCodeNameCC.setMessageInfo` | JKKGetKikiUpdCodeNameCC | - | Calls `setMessageInfo` in `JKKGetKikiUpdCodeNameCC` |
| - | `JKKGetKojiAkTaknkikiCC.setMessageInfo` | JKKGetKojiAkTaknkikiCC | - | Calls `setMessageInfo` in `JKKGetKojiAkTaknkikiCC` |
| - | `OneStopDataBeanAccess.sendMessageString` | OneStopDataBeanAccess | - | Calls `sendMessageString` in `OneStopDataBeanAccess` |
| - | `KKW02501SFLogic.doService` | KKW02501SFLogic | - | Calls `doService` in `KKW02501SFLogic` |
| R | `KKW02501SFLogic.getMsgRep` | KKW02501SFLogic | - | Calls `getMsgRep` in `KKW02501SFLogic` (reads message replacement text) |
| - | `KKW02501SFLogic.setChgesrv` | KKW02501SFLogic | - | Calls `setChgesrv` in `KKW02501SFLogic` |
| - | `KKW02501SFLogic.setDslsrv` | KKW02501SFLogic | - | Calls `setDslsrv` in `KKW02501SFLogic` |
| - | `KKW02501SFLogic.storeDataBeanChgesrv` | KKW02501SFLogic | - | Calls `storeDataBeanChgesrv` in `KKW02501SFLogic` |
| - | `KKW02501SFLogic.storeDataBeanDslsrv` | KKW02501SFLogic | - | Calls `storeDataBeanDslsrv` in `KKW02501SFLogic` |

### Service Component Calls (via doService):

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| U | `doService("KKSV0429", "KKSV0429OP")` | KKSV0429OP | Service contract termination table | Processes service contract cancellation/termination — maps DSL-specific DataBean fields to service input, then stores results back |
| U | `doService("KKSV0428", "KKSV0428OP")` | KKSV0428OP | Service contract modification table | Processes service contract update/modification — maps update-specific DataBean fields including mail address, capacity, and virus check info to service input |
| U | `setDslsrv(paramBean, inputMap, FUNC_CD_2)` | KKW02501SFLogic | - | Prepares input map for DSL termination by extracting and mapping DataBean fields (service contract info, option service info, sub-option details) |
| U | `setChgesrv(paramBean, inputMap, FUNC_CD_2)` | KKW02501SFLogic | - | Prepares input map for service update by extracting and mapping DataBean fields (service contract info, option service info, mail address/capacity changes) |
| R | `storeDataBeanDslsrv(paramBean, outputMap)` | KKW02501SFLogic | - | Stores termination service results back into DataBean for screen display |
| R | `storeDataBeanChgesrv(paramBean, outputMap)` | KKW02501SFLogic | - | Stores update service results back into DataBean for screen display |
| R | `getMsgRep(trans_div, rtn_msgId)` | KKW02501SFLogic | - | Retrieves message replacement text array based on return message ID and processing division |
| - | `JCCWebCommon.setMessageInfo(...)` | JCCWebCommon | - | Sets UI message for display (success, error, or confirmation messages) |
| - | `JSYwebLog.println(...)` | JSYwebLog | - | Logs DataBean dump for debugging/audit trail |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Screen:KKSV0004 (via KKA16601SF) | `KKA16601SFLogic.actionDisp` -> `actionUpdcfm` -> `KKW02501SFLogic.actionUpdCfm` | `KKSV0429OP [U] service_contract_term`, `KKSV0428OP [U] service_contract_upd` |
| 2 | Screen:KKSV0003 (via KKA17001SF) | `KKA17001SFLogic.actionDisp` -> `actionUpdCfm` -> `KKW02501SFLogic.actionUpdCfm` | `KKSV0429OP [U] service_contract_term`, `KKSV0428OP [U] service_contract_upd` |
| 3 | Screen:KKSV0002 (via KKA16201SF) | `KKA16201SFLogic.actionDisp` -> `actionUpdCfm` -> `KKW02501SFLogic.actionUpdCfm` | `KKSV0429OP [U] service_contract_term`, `KKSV0428OP [U] service_contract_upd` |
| 4 | Screen:KKSV0001 (via KKA15801SF) | `KKA15801SFLogic.actionDisp` -> `actionUpdCfm` -> `KKW02501SFLogic.actionUpdCfm` | `KKSV0429OP [U] service_contract_term`, `KKSV0428OP [U] service_contract_upd` |
| 5 | Screen:KKSV0005 (via KKA14401SF) | `KKA14401SFLogic.actionDisp` -> `actionUpdCfm` -> `KKW02501SFLogic.actionUpdCfm` | `KKSV0429OP [U] service_contract_term`, `KKSV0428OP [U] service_contract_upd` |

**Notes:**
- KKA16601SF calls `actionUpdcfm()` (lowercase) which delegates to `KKW02501SFLogic.actionUpdCfm()` — the registration confirmation flow.
- KKA17001SF, KKA16201SF, KKA15801SF, and KKA14401SF all call `actionUpdCfm()` directly, following the pattern: `actionDisp` (screen entry) -> checks -> `actionUpdCfm` (confirmation) -> `actionFix` (finalization, only when funcCode="1").
- The terminal services `KKSV0429OP` (termination) and `KKSV0428OP` (update) are the deepest service component calls in this method's call chain.

## 6. Per-Branch Detail Blocks

**Block 1** — [SET] Variable initialization (L336-L348)

| # | Type | Code |
|---|------|------|
| 1 | SET | `inputMap = null` // Input map for service call |
| 2 | SET | `outputMap = null` // Output map from service call |
| 3 | SET | `msgInfo = new String[1]` // Message display array |
| 4 | SET | `commoninfoBean = super.getCommonInfoBean()` // Get shared form bean |
| 5 | SET | `bean = super.getServiceFormBean()` // Get service form bean |
| 6 | SET | `paramBean = {bean}` // Wrap bean in array |
| 7 | SET | `bean.sendMessageString(RTN_MSG_ID, DATABEAN_SET_VALUE, "")` // Reset return message ID |
| 8 | SET | `inputMap = new HashMap()` // Create input map |
| 9 | SET | `outputMap = new HashMap()` // Create output map |
| 10 | SET | `trans_div = bean.sendMessageString(TRAN_DIV, DATABEAN_GET_VALUE)` // Get processing division |

**Block 2** — [IF] Processing division check: DSL Termination (L351-L362) `[OP_TRAN_DIV_DSL="2"]`

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `setDslsrv(paramBean, inputMap, JPCModelConstant.FUNC_CD_2)` // Prepare DSL termination data — [OP_TRAN_DIV_DSL="2" (Termination)] |
| 2 | CALL | `doService("KKSV0429", "KKSV0429OP", inputMap, outputMap)` // Execute termination service |
| 3 | CALL | `storeDataBeanDslsrv(paramBean, outputMap)` // Store termination results back to DataBean |
| 4 | SET | `msgInfo = new String[1]` // Reinitialize message array |
| 5 | SET | `msgInfo[0] = INFO_MSGSTRING[1]` // Set termination success message |

**Block 3** — [ELSE IF] Processing division check: Service Update (L363-L444) `[OP_TRAN_DIV_CHGE="1"]`

**Block 3.1** — [EXEC] Update data preparation (L366)

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `setChgesrv(paramBean, inputMap, JPCModelConstant.FUNC_CD_2)` // Prepare update data — [OP_TRAN_DIV_CHGE="1" (Update)] |

**Block 3.2** — [IF] Capacity decrease validation (ANK-2761) (L368-L379)

| # | Type | Code |
|---|------|------|
| 1 | SET | `orgCapaVal = bean.sendMessageString(CAPA, DATABEAN_GET_VALUE)` // Get original mail capacity |
| 2 | SET | `chgCapaVal = bean.sendMessageString(CHGAF_CAPA, DATABEAN_GET_VALUE)` // Get changed mail capacity |
| 3 | IF | `!isNullBlank(chgCapaVal) && !isNullBlank(orgCapaVal) && parseInt(chgCapaVal) < parseInt(orgCapaVal)` // Validate capacity decrease |

**Block 3.2.1** — [IF-TRUE] Capacity decrease detected — reject (L372-L376)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKK0290_JW, new String[]{"更新内容", "メールBox容量", "減少させる登録は"})` // Set error: Cannot reduce mailbox capacity |
| 2 | RETURN | `return false` // Return error — operation blocked |

**Block 3.2.2** — [IF-FALSE] Capacity valid — proceed to service call (L383)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `doService("KKSV0428", "KKSV0428OP", inputMap, outputMap)` // Execute update service |

**Block 3.3** — [IF] Email change confirmation error check (TAI-2012-0000101) (L386-L411)

| # | Type | Code |
|---|------|------|
| 1 | SET | `errFlgMap = (HashMap) outputMap.get("EmailInfoChgCfmCC")` // Get email change confirmation results |
| 2 | SET | `errFlgChk = (String) errFlgMap.get("err_flg")` // Extract error flag |
| 3 | SET | `pack_flg = paramBean[0].sendMessageBoolean(FAMIPA_WRIB_UM_FLG, DATABEAN_GET_VALUE)` // Get family pack discount flag |
| 4 | SET | `virus_chk_idx_bf = paramBean[0].sendMessageString(CHGBF_VIRUS_CHK_FLG, DATABEAN_GET_VALUE)` // Get pre-change virus check flag |
| 5 | IF | `ERR_FLG_CHK_YU.equals(errFlgChk) && ((pack_flg != true) && ("0".equals(virus_chk_idx_bf)))` // Error occurred AND no family pack AND no pre-change virus check |

**Block 3.3.1** — [IF-TRUE] Email change error — reject (L393-L401)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB1650_JW)` // Set error message for email change confirmation |
| 2 | CALL | `JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null)` // Log DataBean state |
| 3 | RETURN | `return false` // Return error — email change failed |

**Block 3.3.2** — [IF-FALSE] No email error — continue (L404)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `storeDataBeanChgesrv(paramBean, outputMap)` // Store update results back to DataBean |

**Block 3.4** — [EXEC] Set success message and check mail address change (L407-L443)

| # | Type | Code |
|---|------|------|
| 1 | SET | `msgInfo = new String[1]` // Reinitialize message array |
| 2 | SET | `msgInfo[0] = INFO_MSGSTRING[0]` // Set update success message |
| 3 | SET | `mlad_chg_flg = paramBean[0].sendMessageString(MLAD_CHG_FLG, DATABEAN_GET_VALUE)` // Get mail address change flag |
| 4 | SET | `alias_bf = paramBean[0].sendMessageString(ALIAS, DATABEAN_GET_VALUE)` // Get pre-change alias |
| 5 | SET | `op_svc_kei_stat = bean.sendMessageString(OP_SVC_KEI_STAT, DATABEAN_GET_VALUE)` // Get option service contract status |
| 6 | SET | `ml_vrsette_hktgi_flg = bean.sendMessageString(ML_VRSETTE_HKTGI_FLG, DATABEAN_GET_VALUE)` // Get mail settings inheritance flag |

**Block 3.4.1** — [IF] Mail address changed and settings not inherited (IT1-2013-0001584, IT1-2013-0001655) (L417-L438) `[CHG_TYPE1="1"]`

| # | Type | Code |
|---|------|------|
| 1 | IF | `CHG_TYPE1.equals(mlad_chg_flg) && (null != alias_bf && !("".equals(alias_bf))) && "0".equals(ml_vrsette_hktgi_flg)` // Mail changed AND alias exists AND settings not inherited |

**Block 3.4.1.1** — [IF-TRUE] Service status is 010 or 020 (active/suspended) (L420-L424) `[SVC_KEI_STAT_010="010", SVC_KEI_STAT_020="020"]`

| # | Type | Code |
|---|------|------|
| 1 | SET | `str = {"メールアドレスが変更された","メールエイリアスがキャンセルされ"}` // "Mail address changed / Mail alias cancelled" |
| 2 | CALL | `JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKBD360__Q, str)` // Display confirmation message |

**Block 3.4.1.2** — [ELSE] Service status is other (e.g., expired) (L425-L429)

| # | Type | Code |
|---|------|------|
| 1 | SET | `str = {"メールアドレスが変更された","メールエイリアスが解約され"}` // "Mail address changed / Mail alias terminated" |
| 2 | CALL | `JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKBD360__Q, str)` // Display confirmation message |

**Block 4** — [IF] Return message ID check — navigation decision (L448-L485)

| # | Type | Code |
|---|------|------|
| 1 | SET | `rtn_msgId = bean.sendMessageString(RTN_MSG_ID, DATABEAN_GET_VALUE)` // Get return message ID |
| 2 | IF | `rtn_msgId == null || "".equals(rtn_msgId)` // No return message — proceed to next screen |

**Block 4.1** — [IF-TRUE] No return message — proceed to next screen (L452-L461)

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `commoninfoBean.sendMessageString(NEXT_SCREEN_ID, DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02502)` // Set next screen to KKW02502 |
| 2 | EXEC | `commoninfoBean.sendMessageString(NEXT_SCREEN_NAME, DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02502)` // Set next screen name |
| 3 | CALL | `JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0370__I, msgInfo)` // Display completion message with msgInfo |

**Block 4.2** — [IF-FALSE] Return message exists — display it instead (L464-L484)

| # | Type | Code |
|---|------|------|
| 1 | SET | `str = getMsgRep(trans_div, rtn_msgId)` // Get message replacement text |
| 2 | IF | `"EKB1680--Q".equals(rtn_msgId) || "EKB1660--Q".equals(rtn_msgId)` // Specific confirmation message IDs |

**Block 4.2.1** — [IF-TRUE] Confirmation message for DSL termination (L467-L478)

| # | Type | Code |
|---|------|------|
| 1 | IF | `JKKCommonConst.OP_TRAN_DIV_DSL.equals(trans_div)` // If in DSL termination mode |
| 2 | EXEC | `commoninfoBean.sendMessageString(NEXT_SCREEN_ID, DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02502)` // Set next screen |
| 3 | EXEC | `commoninfoBean.sendMessageString(NEXT_SCREEN_NAME, DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02502)` // Set next screen name |
| 4 | CALL | `JCCWebCommon.setMessageInfo(this, rtn_msgId)` // Display message ID only (warning-level) |

**Block 4.2.2** — [ELSE IF] `str == null` — display message ID only (L480-L482)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JCCWebCommon.setMessageInfo(this, rtn_msgId)` // Display message ID only |

**Block 4.2.3** — [ELSE] `str != null` — display message with replacement text (L484-L486)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JCCWebCommon.setMessageInfo(this, rtn_msgId, str)` // Display message with replacement text |

**Block 5** — [EXEC] Log and return (L490-L493)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null)` // Log DataBean dump |
| 2 | RETURN | `return true` // Normal completion |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `trans_div` | Field | Processing division — classifies the operation as either termination (`"2"`) or update (`"1"`) of a service contract |
| `rtn_msgId` | Field | Return message ID — message identifier returned when user navigates back from a downstream screen; enables error/warning display |
| `CAPA` | Field | Mail mailbox capacity — the current allocated size of the user's email box in MB |
| `CHGAF_CAPA` | Field | Post-change mail mailbox capacity — the new capacity value the user is requesting |
| `FAMIPA_WRIB_UM_FLG` | Field | Family Pack discount flag — indicates whether the user's account has the family package discount applied, affecting validation rules |
| `CHGBF_VIRUS_CHK_FLG` | Field | Pre-change virus check flag — indicates whether virus checking was performed before the change; `"0"` means no virus check |
| `MLAD_CHG_FLG` | Field | Mail access change status — flag indicating whether the user's mail address was changed on this screen |
| `ALIAS` | Field | Mail alias — the email alias address associated with the user's service account |
| `OP_SVC_KEI_STAT` | Field | Option service contract status — the current status of the option service contract (e.g., `010`=providing, `020`=suspended) |
| `ML_VRSETTE_HKTGI_FLG` | Field | Mail settings inheritance flag — indicates whether mail settings are inherited when the mail address is changed; `"0"` means NOT inherited |
| `ERR_FLG_CHK_YU` | Constant | Error flag present — value `"1"` indicating an error occurred during email change confirmation processing |
| `CHG_TYPE1` | Constant | Change type 1 — value `"1"` indicating a mail address change operation |
| `OP_TRAN_DIV_DSL` | Constant | Processing division: Termination — value `"2"` indicating a service contract cancellation/termination operation |
| `OP_TRAN_DIV_CHGE` | Constant | Processing division: Update — value `"1"` indicating a service contract modification/update operation |
| `FUNC_CD_2` | Constant | Function code 2 — represents confirmation/display mode (vs. func code `"1"` for finalization mode) |
| `KKSV0428OP` | Service | Service component for service contract update processing — handles mail address, capacity, and virus check modifications |
| `KKSV0429OP` | Service | Service component for service contract termination processing — handles service cancellation |
| `KKW02502` | Screen | Post-confirmation screen ID — the screen displayed after successful update confirmation |
| `INFO_MSGSTRING[0]` | Constant | Index 0 of info message string array — success message for update processing |
| `INFO_MSGSTRING[1]` | Constant | Index 1 of info message string array — success message for termination processing |
| `EKK0290_JW` | Message | Error message: Cannot reduce mailbox capacity (EN: "You cannot register a reduction in mailbox capacity") |
| `EKB1650_JW` | Message | Error message: Email change confirmation error occurred |
| `EKB0370__I` | Message | Information: Update confirmation completed successfully |
| `EKBD360__Q` | Message | Confirmation: Mail address change — prompts user to confirm alias cancellation or expiration |
| `EKB1680--Q` | Message | Confirmation message ID — displayed when user navigates back from confirmation screen |
| `EKB1660--Q` | Message | Confirmation message ID — displayed when user navigates back from confirmation screen |
| SOD | Acronym | Service Order Data — telecom order fulfillment entity |
| FTTH | Business term | Fiber To The Home — fiber-optic internet service (context: K-Opticom's primary broadband offering) |
| DataBean | Technical | Data transfer object holding screen input/output values; accessed via `sendMessageString` / `sendMessageBoolean` methods |
| SC | Acronym | Service Component — backend service layer component that performs business logic and database operations |
| CBS | Acronym | Core Business System — Fujitsu's enterprise integration platform for connecting backend systems |
| OneStop | Technical | K-Opticom's integrated customer portal platform wrapping multiple screen flows |
| DSP | Acronym | Data Service Platform — K-Opticom's service management platform |
