# Business Logic — FUW02301SFLogic.mskm() [184 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.FUW02301SF.FUW02301SFLogic` |
| Layer | Service / Business Logic (extends JCCWebBusinessLogic) |
| Module | `FUW02301SF` (Package: `eo.web.webview.FUW02301SF`) |

## 1. Role

### FUW02301SFLogic.mskm()

This method processes the **"Submit" (申し込む) button press on the confirmation screen for mail address change requests** (メールアドレス変更申込). It is the primary entry point for committing a customer's request to change their email address within the K-Opticom fiber internet service ecosystem.

The method performs a comprehensive service invocation pipeline: it first prepares and maps service data through a series of Service Component (SC) and Common Component (CC) mappers in the `FUSV0065` subsystem, then invokes the downstream BP (Business Process) via `invokeService()`. The SC/CC operations cover the full lifecycle of a mail address change — from request acceptance registration, sub-option contract adjustments, ISP information changes, and engining processing, to progress registration, fee determination, and service order issuance.

The method implements a **sequential routing/dispatch pattern** — it chains 15 SC operations and 9 CC operations in a fixed processing order, accumulating results in a shared `dataMap`. It then delegates to the BP layer, handles a supplementary member information update request (CKSV9001), refreshes the current customer record, populates the form bean with post-processing data, sends a completion email, and navigates to the next screen.

If the customer is a premium member (membership subtype code 11 or 21), the method adjusts the opt-in function code to use the premium variant (FUNC_CD_4 instead of the standard FUNC_CD_2), affecting the opt-in email reception registration behavior. The method always returns `true`, signaling successful completion of the submission flow.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["Start: mskm()"])
    CHECK_REL["JFUCommonRelationCheck.checkCommonRelation(this, FUSV0065)"]
    GET_COMMON["getCommonInfoBean()"]
    GET_COMMON_INFO["getCommoninfoBeanInfo(commoninfoBean)"]
    EXTRACT_BEANS["Extract beans:
SSO_INFO, SVC_KEI_INFO,
OP_SVC_KEI_INFO,
SBOP_SVC_KEI_INFO,
GEN_CUST_KEI_INFO"]
    GET_MEMBER_CD["Get MEMBER_SBT_CD from genCustKeiInfoBean"]
    CHECK_MEMBER{"memberSbtCd ==
CD00039_11 or
CD00039_21?"}
    SET_OPTIN["optinFuncCd = FUNC_CD_4
(Premium)"]
    GET_CHG_MLAD["Get chgBfMlad from opSvcKeiInfoBean"]
    GET_SVC_FORM["getServiceFormBean()"]
    GET_DISP["getDispInfo(commoninfoBean, bean)"]
    MAKE_PARAM["Create paramMap:
USECASE_ID = FUSV0065"]
    MAKE_MAPPER["new FUSV0065_FUSV0065OPDBMapper()"]
    MAKE_PARAMBEAN["Create paramBean[] =
{bean, ssoInfoBean,
svcKeiInfoBean,
opSvcKeiInfoBean,
sbopSvcKeiInfoBean}"]

    SC1["setFUSV006501SC
(1: Request Acceptance
Registration)"]
    SC2["setFUSV006502SC
(2: Sub-option Contract
Cancellation)"]
    SC3["setFUSV006511SC
(11: Sub-option Cancellation
Confirmation)"]
    SC4["setFUSV006512SC
(12: Sub-option Contract
Cancel)"]
    SC5["setFUSV006503SC
(3: Option Service
Contract <ISP> Info Change)"]
    SC6["setFUSV006504SC
(4: Engining Target
Usage End)"]
    SC7["setFUSV006505SC
(5: Engining Target
Usage End)"]
    SC8["setFUSV006506SC
(6: Engining Target
Usage End)"]
    SC9["setFUSV006507SC
(7: Engining Target
Registration)"]
    SC10["setFUSV006508SC
(8: Engining Target
Registration)"]
    SC11["setFUSV006509SC
(9: Progress Registration)"]
    SC12["setFUSV006510SC
(10: Request Detail Check /
Post Processing)"]
    SC13["setFUSV006513SC
(13: Option Contract
Agreement SC)"]
    SC14["setFUSV006514SC
(14: Option <ISP> Agreement SC)"]
    SC15["setFUSV006515SC
(15: Instruction Registration)"]

    CC1["setFUSV006501CC
(1: Option <ISP> Agreement CC)"]
    CC2["setFUSV006502CC
(2: Service IF Result
Data Transfer)"]
    CC3["setFUSV006503CC
(3: Engining List CC)"]
    CC4["setFUSV006504CC
(4: Engining List CC)"]
    CC5["setFUSV006505CC
(5: Engining List CC)"]
    CC6["setFUSV006506CC
(6: Mail Addr SOD Mapping)"]
    CC7["setFUSV006507CC
(7: Service Order Issuance CC)"]
    CC8["setFUSV006508CC
(8: Fee Determination CC)"]
    CC9["setFUSV006509CC
(9: Opt-in Mail Reception
Registration)"]

    SET_SBOP["JFUWebCommon.setSbopSvcKeiStatRsv1
Set SBOP status to RSV1"]
    INVOKE_SVC["invokeService(paramMap, dataMap, outputMap)"]
    CATCH_SVC["catch JCCWebServiceException
checkException(se, mskm)"]

    CKMAPPER["Create ckParamMap:
USECASE_ID = CKSV9001"]
    CKINPUT["Create ckInputMap"]
    CKCC["setCKSV900101CC
(Member Info Update CC)"]
    INVOKE_CK["invokeService(CKSV9001)"]
    CATCH_CK["catch Throwable
- ignore error, continue"]

    SET_POP["Set POP password:
POP_ID + subdomain
(replace @ with %)"]
    REFRESH_CUST["JFUWebCommon.refreshGenCustKei(this)"]
    REGET_INFO["getCommoninfoBeanInfo() - re-fetch"]

    SET_POP_PWD["Set POP password on form"]
    SET_FIX_MLAD["Set confirmed mail addr on form"]

    GET_IGNORE["Get ignoreOpSvcKeiNo
(Excluded option contract No)"]
    SEND_MAIL["JFUWebCommon.sendMskmFinMail()
(FUW023_1, chgBfMlad, null, ignoreOpSvcKeiNo)"]

    SET_NEXT["Set next screen:
FUW02303 - Submission Complete"]
    RETURN_TRUE["return true"]
    END_NODE(["End"])

    START --> CHECK_REL
    CHECK_REL --> GET_COMMON
    GET_COMMON --> GET_COMMON_INFO
    GET_COMMON_INFO --> EXTRACT_BEANS
    EXTRACT_BEANS --> GET_MEMBER_CD
    GET_MEMBER_CD --> CHECK_MEMBER

    CHECK_MEMBER -- "Yes: Member 11 or 21" --> SET_OPTIN
    CHECK_MEMBER -- "No: Standard" --> GET_CHG_MLAD
    SET_OPTIN --> GET_CHG_MLAD

    GET_CHG_MLAD --> GET_SVC_FORM
    GET_SVC_FORM --> GET_DISP
    GET_DISP --> MAKE_PARAM
    MAKE_PARAM --> MAKE_MAPPER
    MAKE_MAPPER --> MAKE_PARAMBEAN
    MAKE_PARAMBEAN --> SC1
    SC1 --> SC2
    SC2 --> SC3
    SC3 --> SC4
    SC4 --> SC5
    SC5 --> SC6
    SC6 --> SC7
    SC7 --> SC8
    SC8 --> SC9
    SC9 --> SC10
    SC10 --> SC11
    SC11 --> SC12
    SC12 --> SC13
    SC13 --> SC14
    SC14 --> SC15
    SC15 --> CC1
    CC1 --> CC2
    CC2 --> CC3
    CC3 --> CC4
    CC4 --> CC5
    CC5 --> CC6
    CC6 --> CC7
    CC7 --> CC8
    CC8 --> CC9
    CC9 --> SET_SBOP
    SET_SBOP --> INVOKE_SVC
    INVOKE_SVC --> CATCH_SVC

    CATCH_SVC --> CKMAPPER
    CKMAPPER --> CKINPUT
    CKINPUT --> CKCC
    CKCC --> INVOKE_CK
    INVOKE_CK --> CATCH_CK
    CATCH_CK --> SET_POP
    SET_POP --> REFRESH_CUST
    REFRESH_CUST --> REGET_INFO
    REGET_INFO --> SET_POP_PWD
    SET_POP_PWD --> SET_FIX_MLAD
    SET_FIX_MLAD --> GET_IGNORE
    GET_IGNORE --> SEND_MAIL
    SEND_MAIL --> SET_NEXT
    SET_NEXT --> RETURN_TRUE
    RETURN_TRUE --> END_NODE
```

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| - | (none) | - | This method takes no parameters. All input data is obtained from shared form beans (common info bean, service form bean) populated during the preceding screen flow. |
| - | `this` (instance) | FUW02301SFLogic | The logic class itself, extended from JCCWebBusinessLogic, providing access to shared methods (getCommonInfoBean, getServiceFormBean, invokeService, checkException, getCommoninfoBeanInfo, getDispInfo). |

## 4. CRUD Operations / Called Services

### Pre-computed evidence from code analysis:

The method calls 15 SC (Service Component) operations and 9 CC (Common Component) operations through the `FUSV0065_FUSV0065OPDBMapper`, then invokes them as remote service calls via `invokeService()`. It also calls a CKSV9001 member info update service and several utility/helper methods.

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| C | `setFUSV006501SC` | FUSV006501SC | (BP: Mail Addr Change Request Registration) | Request acceptance registration — registers the mail address change request as a new order entry |
| C | `setFUSV006502SC` | FUSV006502SC | (BP: Sub-option Contract) | Sub-option service contract cancellation preparation |
| U | `setFUSV006511SC` | FUSV006511SC | (BP: Sub-option Contract) | Sub-option contract cancellation confirmation |
| D | `setFUSV006512SC` | FUSV006512SC | (BP: Sub-option Contract) | Sub-option contract cancel execution |
| U | `setFUSV006503SC` | FUSV006503SC | (BP: Option Service Contract ISP) | Option service contract ISP information change |
| D | `setFUSV006504SC` | FUSV006504SC | (BP: Engining) | Engining target usage end — deactivates certain engine services |
| D | `setFUSV006505SC` | FUSV006505SC | (BP: Engining) | Engining target usage end |
| D | `setFUSV006506SC` | FUSV006506SC | (BP: Engining) | Engining target usage end |
| C | `setFUSV006507SC` | FUSV006507SC | (BP: Engining) | Engining target registration — registers new engining targets |
| C | `setFUSV006508SC` | FUSV006508SC | (BP: Engining) | Engining target registration |
| C | `setFUSV006509SC` | FUSV006509SC | (BP: Progress) | Progress registration — records the order progress status |
| R | `setFUSV006510SC` | FUSV006510SC | (BP: Post Processing) | Request detail check and post processing delegation |
| R | `setFUSV006513SC` | FUSV006513SC | (BP: Option Agreement) | Option service contract agreement check (uses FUNC_CD_2) |
| R | `setFUSV006514SC` | FUSV006514SC | (BP: Option ISP Agreement) | Option service contract <ISP> agreement check (uses FUNC_CD_2) |
| C | `setFUSV006515SC` | FUSV006515SC | (BP: Instruction Registration) | Instruction registration for service setup |
| R | `setFUSV006501CC` | FUSV006501CC | - | Option <ISP> agreement common processing |
| R | `setFUSV006502CC` | FUSV006502CC | - | Service IF result data transfer / comment consolidation |
| R | `setFUSV006503CC` | FUSV006503CC | - | Engining list agreement check (engining target values) |
| R | `setFUSV006504CC` | FUSV006504CC | - | Engining list agreement check (engining target values) |
| R | `setFUSV006505CC` | FUSV006505CC | - | Engining list agreement check (engining target values) |
| R | `setFUSV006506CC` | FUSV006506CC | - | Mail address SOD (Service Order Data) mapping |
| R | `setFUSV006507CC` | FUSV006507CC | - | Service order issuance common processing |
| R | `setFUSV006508CC` | FUSV006508CC | - | Fee determination common processing |
| R | `setFUSV006509CC` | FUSV006509CC | - | Opt-in mail reception registration |
| R | `setCKSV900101CC` | CKSV9001 | - | Member information update common processing |

Additional utility calls (no CRUD):
- `JFUCommonRelationCheck.checkCommonRelation()` — validates common business relation for usecase FUSV0065
- `JFUWebCommon.setSbopSvcKeiStatRsv1()` — sets sub-option service contract status to reservation (CD00136_B001, CD00137_D01)
- `JFUWebCommon.sendMskmFinMail()` — sends mail address change completion email
- `JFUWebCommon.refreshGenCustKei()` — refreshes current customer contract data
- `JFUWebCommon.setDataBeanItemByPath()` — sets POP password data on shared bean

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Screen:KKSV0004 | KKSV0004 screen action -> FUW02301SFLogic.mskm() | setFUSV006501SC [C] BP_MailAddrChange, setCKSV900101CC [R] MemberInfo |

**Note:** The `mskm()` method is invoked when the user presses the "Apply/Submit" (申し込む) button on the confirmation screen (FUW02301SF). The screen flow is: initial display (FUW02301SF.mtsc) -> detail check -> confirmation screen (FUW02301SF.mskm) -> completion screen (FUW02303). The screen controller (KKSV0004) handles screen routing and delegates business logic to FUW02301SFLogic.

## 6. Per-Branch Detail Blocks

**Block 1** — [EXEC] Common relation check (L413)

> Executes the common relation check for the FUSV0065 usecase to validate business constraints.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JFUCommonRelationCheck.checkCommonRelation(this, USECASE_ID_FUSV0065)` |

**Block 2** — [EXEC] Extract common info beans (L417-L429)

> Retrieves the shared common info bean and extracts 5 sub-beans: SSO info, service contract info, option service contract info, sub-option service contract info, and general customer contract info.

| # | Type | Code |
|---|------|------|
| 1 | SET | `commoninfoBean = super.getCommonInfoBean()` |
| 2 | SET | `resultMap = getCommoninfoBeanInfo(commoninfoBean)` |
| 3 | SET | `ssoInfoBean = (X31SDataBeanAccess)resultMap.get(SSO_INFO)` |
| 4 | SET | `svcKeiInfoBean = (X31SDataBeanAccess)resultMap.get(SVC_KEI_INFO)` |
| 5 | SET | `opSvcKeiInfoBean = (X31SDataBeanAccess)resultMap.get(OP_SVC_KEI_INFO)` |
| 6 | SET | `sbopSvcKeiInfoBean = (X31SDataBeanAccess)resultMap.get(SBOP_SVC_KEI_INFO)` |
| 7 | SET | `genCustKeiInfoBean = (X31SDataBeanAccess)resultMap.get(GEN_CUST_KEI_INFO)` |

**Block 3** — [EXEC] Get member subtype code (L431)

> Retrieves the customer's membership subtype code from the general customer contract info bean.

| # | Type | Code |
|---|------|------|
| 1 | SET | `menberSbtCd = genCustKeiInfoBean.sendMessageString(MEMBER_SBT_CD_22, GET_VALUE)` |

**Block 4** — [EXEC] Initialize opt-in function code (L433)

> Sets the default opt-in function code to standard (FUNC_CD_2).

| # | Type | Code |
|---|------|------|
| 1 | SET | `optinFuncCd = JPCModelConstant.FUNC_CD_2` |

**Block 5** — [IF] Membership subtype check [MEMBER_SBT_CD_11 or MEMBER_SBT_CD_21] (L435)

> If the customer is a premium member (subtype 11 or 21), the opt-in function code is changed to the premium variant (FUNC_CD_4).

| # | Type | Code |
|---|------|------|
| 1 | SET | `optinFuncCd = JPCModelConstant.FUNC_CD_4` |

**Condition:** `menberSbtCd == CD00039_11 || menberSbtCd == CD00039_21`
- CD00039_11 = Premium member code 11
- CD00039_21 = Premium member code 21
- If true: optinFuncCd = FUNC_CD_4 (Premium opt-in)
- If false: optinFuncCd remains FUNC_CD_2 (Standard opt-in)

**Block 6** — [EXEC] Get changed mail address (pre-change) (L438)

> Retrieves the pre-change email address from the option service contract info bean for later email notification.

| # | Type | Code |
|---|------|------|
| 1 | SET | `chgBfMlad = opSvcKeiInfoBean.sendMessageString(MLAD_28, GET_VALUE)` |

**Block 7** — [EXEC] Get service form bean and display info (L441-L444)

> Retrieves the service form bean and populates display information.

| # | Type | Code |
|---|------|------|
| 1 | SET | `bean = super.getServiceFormBean()` |
| 2 | CALL | `getDispInfo(commoninfoBean, bean)` |

**Block 8** — [EXEC] Prepare service invocation parameters (L447-L458)

> Creates the service parameter map, mapper instance, data map, and parameter bean array for the SC/CC chain.

| # | Type | Code |
|---|------|------|
| 1 | SET | `paramMap = new HashMap<String, String>(16)` |
| 2 | SET | `paramMap.put(TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0065)` |
| 3 | SET | `mapper = new FUSV0065_FUSV0065OPDBMapper()` |
| 4 | SET | `dataMap = new HashMap<String, Object>()` |
| 5 | SET | `paramBean = {bean, ssoInfoBean, svcKeiInfoBean, opSvcKeiInfoBean, sbopSvcKeiInfoBean}` |

**Block 9** — [EXEC] SC operations chain (L462-L498)

> Executes 15 SC operations sequentially, passing accumulated data through the shared dataMap. Each SC prepares data for a specific service component.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap = mapper.setFUSV006501SC(paramBean, dataMap, FUNC_CD_1)` — Request Acceptance Registration |
| 2 | SET | `dataMap = mapper.setFUSV006502SC(paramBean, dataMap, FUNC_CD_1)` — Sub-option Contract Cancellation |
| 3 | SET | `dataMap = mapper.setFUSV006511SC(paramBean, dataMap, FUNC_CD_1)` — Sub-option Cancellation Confirmation |
| 4 | SET | `dataMap = mapper.setFUSV006512SC(paramBean, dataMap, FUNC_CD_1)` — Sub-option Contract Cancel |
| 5 | SET | `dataMap = mapper.setFUSV006503SC(paramBean, dataMap, FUNC_CD_1)` — ISP Info Change |
| 6 | SET | `dataMap = mapper.setFUSV006504SC(paramBean, dataMap, FUNC_CD_1)` — Engining Target End |
| 7 | SET | `dataMap = mapper.setFUSV006505SC(paramBean, dataMap, FUNC_CD_1)` — Engining Target End |
| 8 | SET | `dataMap = mapper.setFUSV006506SC(paramBean, dataMap, FUNC_CD_1)` — Engining Target End |
| 9 | SET | `dataMap = mapper.setFUSV006507SC(paramBean, dataMap, FUNC_CD_1)` — Engining Target Registration |
| 10 | SET | `dataMap = mapper.setFUSV006508SC(paramBean, dataMap, FUNC_CD_1)` — Engining Target Registration |
| 11 | SET | `dataMap = mapper.setFUSV006509SC(paramBean, dataMap, FUNC_CD_1)` — Progress Registration |
| 12 | SET | `dataMap = mapper.setFUSV006510SC(paramBean, dataMap, FUNC_CD_1)` — Detail Check / Post Processing |
| 13 | SET | `dataMap = mapper.setFUSV006513SC(paramBean, dataMap, FUNC_CD_2)` — Option Agreement SC |
| 14 | SET | `dataMap = mapper.setFUSV006514SC(paramBean, dataMap, FUNC_CD_2)` — Option <ISP> Agreement SC |
| 15 | SET | `dataMap = mapper.setFUSV006515SC(paramBean, dataMap, FUNC_CD_1)` — Instruction Registration |

**Block 10** — [EXEC] CC operations chain (L502-L524)

> Executes 9 CC (Common Component) operations for post-SC processing: agreement checks, data transfer, engining list checks, mail address SOD mapping, service order issuance, fee determination, and opt-in registration.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap = mapper.setFUSV006501CC(paramBean, dataMap)` — Option <ISP> Agreement CC |
| 2 | SET | `dataMap = mapper.setFUSV006502CC(paramBean, dataMap)` — Service IF Result Data Transfer |
| 3 | SET | `dataMap = mapper.setFUSV006503CC(paramBean, dataMap)` — Engining List CC |
| 4 | SET | `dataMap = mapper.setFUSV006504CC(paramBean, dataMap)` — Engining List CC |
| 5 | SET | `dataMap = mapper.setFUSV006505CC(paramBean, dataMap)` — Engining List CC |
| 6 | SET | `dataMap = mapper.setFUSV006506CC(paramBean, dataMap, FUNC_CD_1)` — Mail Addr SOD Mapping |
| 7 | SET | `dataMap = mapper.setFUSV006507CC(paramBean, dataMap, FUNC_CD_1)` — Service Order Issuance CC |
| 8 | SET | `dataMap = mapper.setFUSV006508CC(paramBean, dataMap, FUNC_CD_1)` — Fee Determination CC |
| 9 | SET | `dataMap = mapper.setFUSV006509CC(paramBean, dataMap, optinFuncCd)` — Opt-in Mail Reception Registration |

**Block 11** — [IF] Sub-option service contract info present [SBOP present] (L527)

> If sub-option service contract info exists in the resultMap, set its status to reservation (RSV1).

| # | Type | Code |
|---|------|------|
| 1 | SET | `JFUWebCommon.setSbopSvcKeiStatRsv1(this, dataMap, CD00136_B001, CD00137_D01)` |

**Condition:** `!JFUWebCommon.isNull(resultMap.get(SBOP_SVC_KEI_INFO))`

**Block 12** — [TRY-CATCH] Service invocation (L530-L535)

> Invokes the downstream BP (Business Process) with all prepared data.

| # | Type | Code |
|---|------|------|
| 1 | SET | `outputMap = new HashMap<Object, Object>()` |
| 2 | CALL | `invokeService(paramMap, dataMap, outputMap)` |
| 3 | CATCH | `checkException(se, CALL_METHOD_MSKM)` — JCCWebServiceException |

**Block 13** — [EXEC] CKSV9001 member info update (L537-L556)

> Prepares and invokes the CKSV9001 member information update service. Errors are silently ignored to ensure processing continues even if this step fails.

| # | Type | Code |
|---|------|------|
| 1 | SET | `ckParamMap.put(TELEGRAM_INFO_USECASE_ID, CC_TITLE_CKSV9001)` |
| 2 | SET | `ckInputMap = new HashMap<String, Map<String, String>>()` |
| 3 | SET | `ckOutputMap = new HashMap<String, String>()` |
| 4 | CALL | `mapper.setCKSV900101CC(paramBean, ckInputMap)` |
| 5 | CALL | `invokeService(ckParamMap, ckInputMap, ckOutputMap)` |
| 6 | CATCH | `DEBUG_LOG.debug("CKSV9001: error in member info update, continue")` — Throwable |

**Block 14** — [EXEC] POP password and customer refresh (L559-L563)

> Constructs the POP password from the change mail address and subdomain, replaces "@" with "%", sets it in the common info bean, and refreshes the general customer contract data.

| # | Type | Code |
|---|------|------|
| 1 | SET | `commoninfoBean.setDataBeanItemByPath(SSO_INFO + SEP_0 + POP_ID_21, (chgMlad + subDomain).replace(@, %))` |
| 2 | CALL | `JFUWebCommon.refreshGenCustKei(this)` |

**Block 15** — [EXEC] Re-fetch common info and update form (L566-L582)

> Re-reads the common info bean to get updated option service contract data, then sets the POP password and confirmed mail address on the form bean.

| # | Type | Code |
|---|------|------|
| 1 | SET | `resultMap = getCommoninfoBeanInfo(commoninfoBean)` |
| 2 | SET | `opSvcKeiInfoBean = (X31SDataBeanAccess)resultMap.get(OP_SVC_KEI_INFO)` |
| 3 | SET | `bean.set(POP_PWD, opSvcKeiInfoBean.get(SHK_POP_ID_PWD_28))` |
| 4 | SET | `bean.set(FIX_MLAD, opSvcKeiInfoBean.get(MLAD_28))` |
| 5 | SET | `ignoreOpSvcKeiNo = opSvcKeiInfoBean.get(OP_SVC_KEI_NO_28)` |

**Block 16** — [EXEC] Send completion email (L585)

> Sends the mail address change completion email to the customer.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JFUWebCommon.sendMskmFinMail(this, MSKM_FIN_MAIL_FUW023_1, chgBfMlad, null, ignoreOpSvcKeiNo)` |

**Block 17** — [EXEC] Set next screen and return (L588-L591)

> Sets the next screen ID and name to the completion screen (FUW02303) in the common info bean, then returns true.

| # | Type | Code |
|---|------|------|
| 1 | SET | `commoninfoBean.set(NEXT_SCREEN_ID, SCREEN_ID_FUW02303)` |
| 2 | SET | `commoninfoBean.set(NEXT_SCREEN_NAME, SCREEN_NAME_FUW02303)` |
| 3 | RETURN | `return true` |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `mskm` | Method name | Short for "Mokunin" (確認) — confirmation/submit button processing for mail address change |
| FUW02301SF | Module | Mail Address Change Request — web front-end module for mail address change requests |
| FUSV0065 | Service ID | Mail Address Change Request (Apply) — the SC/CBS usecase ID for the submission process |
| FUSV0064 | Service ID | Mail Address Change Request (New Display) — the usecase for the initial display screen |
| CKSV9001 | Service ID | Member Information Update — supplementary service for updating member data |
| JCCWebBusinessLogic | Parent class | Common web business logic base class providing shared service invocation |
| `USECASE_ID_FUSV0065` | Constant | "FUSV0065" — service usecase identifier for mail address change submission |
| `FUNC_CD_1` | Constant | Function code 1 — standard processing mode for SC operations |
| `FUNC_CD_2` | Constant | Function code 2 — agreement/confirmation processing mode |
| `FUNC_CD_4` | Constant | Function code 4 — premium member processing mode (opt-in) |
| MEMBER_SBT_CD_22 | Constant | Membership subtype code field index 22 |
| CD00039_11 | Constant | Premium membership subtype code 11 |
| CD00039_21 | Constant | Premium membership subtype code 21 |
| CD00136_B001 | Constant | Sub-option service contract status code for reservation |
| CD00137_D01 | Constant | Sub-option service contract status detail code |
| POP_ID_21 | Constant | POP account ID field index 21 |
| SHK_POP_ID_PWD_28 | Constant | Shared POP ID password field index 28 |
| MLAD_28 | Constant | Mail address field index 28 |
| OP_SVC_KEI_NO_28 | Constant | Option service contract number field index 28 |
| POP password | Business term | Password for POP3 email account access, derived from mail address + subdomain with @ replaced by % |
| SSO info | Business term | Single Sign-On customer authentication information |
| Service contract (svc_kei_info) | Business term | Customer's service contract details |
| Option service contract (op_svc_kei_info) | Business term | Option/add-on service contract (e.g., ISP, security services) |
| Sub-option service contract (sbop_svc_kei_info) | Business term | Sub-option services under an option service contract |
| General customer contract (gen_cust_kei_info) | Business term | Primary customer account and membership information |
| SOD | Acronym | Service Order Data — telecom order fulfillment entity |
| ISP | Business term | Internet Service Provider — included as an option service |
| Engining | Business term | Internal system for managing service provisioning and configuration |
| BP | Acronym | Business Process — the backend EJB/enterprise service layer |
| SC | Acronym | Service Component — backend service methods invoked via BP |
| CC | Acronym | Common Component — shared utility/common processing components |
| Mlad | Field | Mail address — the customer's email address (from `mlad`) |
| ChgBfMlad | Field | Changed-before mail address — the email address before the change |
| FIX_MLAD | Constant | Confirmed mail address — the final email address after change |
| CHG_MLAD | Constant | Changed mail address — the new email address being requested |
| POP_PWD | Constant | POP password — derived from POP ID and mail address |
| Sub domain | Field | The domain portion of the email address after @ |
| SOD | Acronym | Service Order Data — the order document generated for service fulfillment |
| OPT_IN_MAIL | Business term | Opt-in email for promotional/service notifications |
| FUW02303 | Screen ID | Completion notification screen displayed after successful submission |
| CKSV900101CC | Constant | "CKSV9001" — member information update common component |
| MSKM_FIN_MAIL_FUW023_1 | Constant | "FUW023_1" — completion email template identifier |
| ignoreOpSvcKeiNo | Local variable | Excluded option service contract number — contracts to exclude from the completion email |
