# Business Logic — FUW01901SFLogic.mskm() [152 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.FUW01901SF.FUW01901SFLogic` |
| Layer | Web Business Logic (Controller tier — `eo.web.webview` package) |
| Module | `FUW01901SF` (Package: `eo.web.webview.FUW01901SF`) |

## 1. Role

### FUW01901SFLogic.mskm()

This method is the **"Apply" (confirm submit) handler for the Email Address Addition Confirmation screen** (`FUW01901SF`). When a customer reviews their email address addition request and presses the "Apply" button on the confirmation screen, this method orchestrates the entire end-to-end submission process. It reads form data and existing customer contract information from shared and service-specific form beans, maps all data through a comprehensive set of Service Component (SC) and Common Component (CC) mappers under the **FUSV0054** service ID, invokes the backend service chain as a single batch transaction, then performs a secondary membership information update request via the **CKSV9001** service. After successful completion, it retrieves the confirmed mailing address and POPID password, refreshes the current customer contract data, sends a completion notification email (mail ID `FUW019_1`), and navigates to the next screen (`FUW01903`).

The method implements a **batch-routing delegation pattern**: rather than branching by service type, it routes all data through a pre-configured series of mapper methods that each populate the shared `dataMap` with inputs for a specific service component. The single `invokeService` call then dispatches all SCs in one transaction. The method also implements **error-tolerant secondary processing**: the CKSV9001 membership update call is wrapped in a catch-all `Throwable` handler that logs errors and continues, ensuring the main flow always completes.

This is a **single-screen entry-point method** — it is the sole business logic handler for the FUW01901SF confirmation screen's submit action, and its role within the larger system is to finalize a customer-initiated email address addition request in the K-Opticom customer foundation system.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["mskm()"])
    CHECK_RELATION["JFUCommonRelationCheck.checkCommonRelation(this, FUSV0054)"]
    GET_COMMON_BEAN["getCommonInfoBean()"]
    GET_COMMON_INFO["getCommoninfoBeanInfo(commoninfoBean, null)"]
    EXTRACT_SYSID["Extract ssoInfoSysid from resultMap (SYSID_21)"]
    EXTRACT_BEANS["Extract ssoInfoBean, opSvcKeiInfoBean, seikyKeiInfoBean, svcKeiInfoBean"]
    GET_SERVICE_BEAN["getServiceFormBean()"]
    CREATE_BEAN_ARRAY["Create beanArray = { bean, opSvcKeiInfoBean, seikyKeiInfoBean, ssoInfoBean, svcKeiInfoBean }"]
    CREATE_PARAM_MAP["Create paramMap with USECASE_ID_FUSV0054"]
    CREATE_Mapper["Create FUSV0054_FUSV0054OPDBMapper mapper"]
    CREATE_DATA_MAP["Create dataMap HashMap"]
    SET_SVC_CONTRACT["mapper.setFUSV005401SC
Service contract registration"]
    SET_OPT_SVC_REG["mapper.setFUSV005402SC
Optional service <ISP> registration"]
    SET_OPT_SVC_REF["mapper.setFUSV005409SC
Optional service <ISP> reference"]
    SET_OPT_SVC_LINK["mapper.setFUSV005403SC
Optional service <ISP> link"]
    SET_OPT_SVC_START["mapper.setFUSV005404SC
Optional service <ISP> start"]
    SET_ENROLL_REG1["mapper.setFUSV005405SC
Enrollment target registration"]
    SET_ENROLL_REG2["mapper.setFUSV005406SC
Enrollment target registration"]
    SET_PROGRESS_REG["mapper.setFUSV005407SC
Progress registration"]
    SET_DETAIL_REF["mapper.setFUSV005408SC
Application detail reference / follow-up request"]
    SET_SVC_AGREE["mapper.setFUSV005410SC
Optional service contract agreement meeting"]
    SET_OPT_SVC_AGREE["mapper.setFUSV005411SC
Optional service <ISP> agreement meeting"]
    SET_INSTRUCTION_REG["mapper.setFUSV005412SC
Instruction book registration"]
    SET_SVC_IF_RESULT1["mapper.setFUSV005401CC
Service IF result data transfer"]
    SET_ORDER_COND["mapper.setFUSV005402CC
Order issuance condition registration"]
    SET_SVC_IF_RESULT2["mapper.setFUSV005403CC
Service IF result data transfer"]
    SET_OPT_MAIL_SET["mapper.setFUSV005404CC
Optional email reception setting registration"]
    SET_MAIL_ADD_CHECK["mapper.setFUSV005405CC
Mail address addition application (enrollment check)"]
    SET_MAIL_ADD_POPID["mapper.setFUSV005406CC
Mail address addition (initial POPID password)"]
    SET_FAMILY_PACK["mapper.setFUSV005413CC
Family pack guidance decision CC"]
    CREATE_OUTPUT_MAP["Create outputMap HashMap"]
    SET_SVC_STAT["JFUWebCommon.setSvcKeiStat(this, dataMap)"]
    INVOKE_SERVICE1["invokeService(paramMap, dataMap, outputMap)"]
    CHK_SVC_ERR{"Service error?"}
    CHK_SVC_ERROR_HANDLE["chkRelationServiceError(se)"]
    CREATE_CK_PARAM["Create ckParamMap (CKSV9001)"]
    CREATE_CK_INPUT["Create ckInputMap"]
    CREATE_CK_OUTPUT["Create ckOutputMap"]
    SET_CKSV9001["mapper.setCKSV900101CC
Member info update request"]
    INVOKE_SERVICE2["invokeService(ckParamMap, ckInputMap, ckOutputMap)"]
    CHK_CKSV_ERR{"CKSV9001 error?"}
    IGNORE_CKSV_ERR["Log debug and continue"]
    GET_SVC_RESULT1["mapper.getFUSV005403SC(bean, outputMap)"]
    GET_SVC_RESULT2["mapper.getFUSV005409SC(bean, outputMap)"]
    REFRESH_CUST["JFUWebCommon.refreshGenCustKei(this)"]
    GET_FIX_MLAD["bean.sendMessageString(FIX_MLAD)"]
    REFRESH_COMMON["getCommoninfoBeanInfo(commoninfoBean, fixMlad)"]
    GET_FIX_POPID["resultMap.get(POP_PWD)"]
    SET_POPID_BEAN["bean.sendMessageString(POP_PWD, SET_VALUE, fixPopidPwd)"]
    GET_IGNORE_OP["outputMap.get(FUSV005402SC).get(OP_SVC_KEI_NO)"]
    SEND_COMPLETION_MAIL["JFUWebCommon.sendMskmFinMail(this, FUW019_1, ignoreOpSvcKeiNo)"]
    SET_NEXT_SCREEN_ID["commoninfoBean.sendMessageString(NEXT_SCREEN_ID, FUW01903)"]
    SET_NEXT_SCREEN_NAME["commoninfoBean.sendMessageString(NEXT_SCREEN_NAME, FUW01903 name)"]
    RETURN_TRUE["return true"]

    START --> CHECK_RELATION
    CHECK_RELATION --> GET_COMMON_BEAN
    GET_COMMON_BEAN --> GET_COMMON_INFO
    GET_COMMON_INFO --> EXTRACT_SYSID
    EXTRACT_SYSID --> EXTRACT_BEANS
    EXTRACT_BEANS --> GET_SERVICE_BEAN
    GET_SERVICE_BEAN --> CREATE_BEAN_ARRAY
    CREATE_BEAN_ARRAY --> CREATE_PARAM_MAP
    CREATE_PARAM_MAP --> CREATE_Mapper
    CREATE_Mapper --> CREATE_DATA_MAP
    CREATE_DATA_MAP --> SET_SVC_CONTRACT
    SET_SVC_CONTRACT --> SET_OPT_SVC_REG
    SET_OPT_SVC_REG --> SET_OPT_SVC_REF
    SET_OPT_SVC_REF --> SET_OPT_SVC_LINK
    SET_OPT_SVC_LINK --> SET_OPT_SVC_START
    SET_OPT_SVC_START --> SET_ENROLL_REG1
    SET_ENROLL_REG1 --> SET_ENROLL_REG2
    SET_ENROLL_REG2 --> SET_PROGRESS_REG
    SET_PROGRESS_REG --> SET_DETAIL_REF
    SET_DETAIL_REF --> SET_SVC_AGREE
    SET_SVC_AGREE --> SET_OPT_SVC_AGREE
    SET_OPT_SVC_AGREE --> SET_INSTRUCTION_REG
    SET_INSTRUCTION_REG --> SET_SVC_IF_RESULT1
    SET_SVC_IF_RESULT1 --> SET_ORDER_COND
    SET_ORDER_COND --> SET_SVC_IF_RESULT2
    SET_SVC_IF_RESULT2 --> SET_OPT_MAIL_SET
    SET_OPT_MAIL_SET --> SET_MAIL_ADD_CHECK
    SET_MAIL_ADD_CHECK --> SET_MAIL_ADD_POPID
    SET_MAIL_ADD_POPID --> SET_FAMILY_PACK
    SET_FAMILY_PACK --> CREATE_OUTPUT_MAP
    CREATE_OUTPUT_MAP --> SET_SVC_STAT
    SET_SVC_STAT --> INVOKE_SERVICE1
    INVOKE_SERVICE1 --> CHK_SVC_ERR
    CHK_SVC_ERR -- true --> CHK_SVC_ERROR_HANDLE
    CHK_SVC_ERR -- false --> CREATE_CK_PARAM
    CHK_SVC_ERROR_HANDLE --> CREATE_CK_PARAM
    CREATE_CK_PARAM --> CREATE_CK_INPUT
    CREATE_CK_INPUT --> CREATE_CK_OUTPUT
    CREATE_CK_OUTPUT --> SET_CKSV9001
    SET_CKSV9001 --> INVOKE_SERVICE2
    INVOKE_SERVICE2 --> CHK_CKSV_ERR
    CHK_CKSV_ERR -- true --> IGNORE_CKSV_ERR
    CHK_CKSV_ERR -- false --> GET_SVC_RESULT1
    IGNORE_CKSV_ERR --> GET_SVC_RESULT1
    GET_SVC_RESULT1 --> GET_SVC_RESULT2
    GET_SVC_RESULT2 --> REFRESH_CUST
    REFRESH_CUST --> GET_FIX_MLAD
    GET_FIX_MLAD --> REFRESH_COMMON
    REFRESH_COMMON --> GET_FIX_POPID
    GET_FIX_POPID --> SET_POPID_BEAN
    SET_POPID_BEAN --> GET_IGNORE_OP
    GET_IGNORE_OP --> SEND_COMPLETION_MAIL
    SEND_COMPLETION_MAIL --> SET_NEXT_SCREEN_ID
    SET_NEXT_SCREEN_ID --> SET_NEXT_SCREEN_NAME
    SET_NEXT_SCREEN_NAME --> RETURN_TRUE
```

**Processing flow summary:**

1. **Common relation check** — Validates shared form data consistency for the FUSV0054 use case.
2. **Data extraction** — Retrieves customer contract information from the common info bean (SSO sysid, optional service info, billing info, service detail info) and the service form bean. Assembles all 5 beans into a shared array.
3. **Upper mapping** — Populates `dataMap` with input data for 15 service components (12 SCs + 3 CCs) by calling the corresponding `mapper.setFUSVxxxxSC/CC` methods. Each mapper populates the data map for a specific business sub-process.
4. **Service invocation** — Executes all SCs in a single batch transaction via `invokeService` with the FUSV0054 use case ID. If a `JCCWebServiceException` occurs, it is delegated to `chkRelationServiceError`.
5. **CKSV9001 membership update** — Independently invokes a secondary service for member information updates. Errors are caught and logged but do not halt processing.
6. **Lower mapping** — Retrieves processed results from the SC output into the service form bean via `mapper.getFUSVxxxxSC` methods.
7. **Post-processing** — Refreshes the current customer contract, extracts the confirmed mailing address and POPID password, and updates the bean with final values.
8. **Completion** — Sends the application completion notification email with the optional service contract number (if any), sets the next screen ID to `FUW01903`, and returns `true`.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| - | (none) | - | This method takes no parameters. It operates entirely on instance state (form beans, shared info beans) and class-level constants. |

**Instance fields / external state read by this method:**

| Source | Field / State | Business Description |
|--------|--------------|---------------------|
| `super.getCommonInfoBean()` | CommonInfoBean | Shared session bean containing cross-screen customer data including SSO system ID and current customer contract information |
| `super.getServiceFormBean()` | ServiceFormBean | Screen-specific form bean for FUW01901SF containing the user-input email address and other application details |
| `this` (instance) | Business logic context | Passed to `JFUCommonRelationCheck`, `JFUWebCommon.setSvcKeiStat`, `JFUWebCommon.refreshGenCustKei`, `JFUWebCommon.sendMskmFinMail` — provides access to request context, session data, and configuration |

## 4. CRUD Operations / Called Services

### Service Components invoked via `invokeService` (FUSV0054 use case)

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| C | `setFUSV005401SC` | FUSV005401SC | Service contract record | Registers the main service contract from the application data |
| C | `setFUSV005402SC` | FUSV005402SC | Optional service contract <ISP> record | Registers optional ISP service contract |
| R | `setFUSV005409SC` | FUSV005409SC | Optional service contract <ISP> record | References (reads) optional ISP service contract data for validation |
| U | `setFUSV005403SC` | FUSV005403SC | Optional service contract <ISP> link record | Links optional ISP service contract |
| U | `setFUSV005404SC` | FUSV005404SC | Optional service contract <ISP> start record | Starts optional ISP service contract |
| C | `setFUSV005405SC` | FUSV005405SC | Enrollment target record | Registers enrollment target data |
| C | `setFUSV005406SC` | FUSV005406SC | Enrollment target record | Registers additional enrollment target data |
| C | `setFUSV005407SC` | FUSV005407SC | Progress record | Registers progress / advancement data |
| R | `setFUSV005408SC` | FUSV005408SC | Application detail / follow-up record | References application details and registers follow-up work requests |
| R | `setFUSV005410SC` | FUSV005410SC | Optional service contract agreement record | Retrieves optional service contract agreement meeting data for confirmation |
| R | `setFUSV005411SC` | FUSV005411SC | Optional service contract <ISP> agreement record | Retrieves optional ISP service contract agreement meeting data |
| C | `setFUSV005412SC` | FUSV005412SC | Instruction book record | Registers instruction book data |
| U | `setFUSV005401CC` | FUSV005401CC | - | Transfers service IF result data |
| C | `setFUSV005402CC` | FUSV005402CC | Order issuance condition record | Registers order issuance conditions |
| U | `setFUSV005403CC` | FUSV005403CC | - | Transfers service IF result data |
| C | `setFUSV005404CC` | FUSV005404CC | Optional email reception setting record | Registers optional email reception settings |
| U | `setFUSV005405CC` | FUSV005405CC | Mail address / enrollment target record | Validates and processes mail address addition application (enrollment check) |
| U | `setFUSV005406CC` | FUSV005406CC | POPID credential record | Acquires initial POPID password for mail address addition |
| R | `setFUSV005413CC` | FUSV005413CC | Family pack / security pack record | Determines family pack guidance decision (security pack introduction check) |

### Membership update service (CKSV9001 use case)

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| U | `setCKSV900101CC` | CKSV900101CC | Member information record | Requests member information update |

### Downstream service (sendMskmFinMail)

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `JFUWebCommon.sendMskmFinMail` | - | - | Sends application completion notification email (mail ID `FUW019_1`) |

### Pre-computed evidence from code analysis graph

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `FUSV0054_FUSV0054OPDBMapper.getFUSV005403SC` | FUSV005403SC | - | Retrieves optional service contract <ISP> link result into form bean |
| R | `FUSV0054_FUSV0054OPDBMapper.getFUSV005409SC` | FUSV005409SC | - | Retrieves optional service contract <ISP> reference result into form bean |
| - | `JFUWebCommon.setSvcKeiStat` | - | - | Sets service contract status in data map |
| - | `JFUWebCommon.refreshGenCustKei` | - | - | Refreshes current customer contract data from database |
| - | `OneStopDataBeanAccess.sendMessageString` | - | - | Gets/sets data bean values (fixed mail address, POPID password) |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Screen:KKSV01901 (FUW01901SF) | KKSV01901Logic -> FUW01901SFLogic.mskm | `invokeService [C/U/R] FUSV005401SC, FUSV005402SC, FUSV005409SC, FUSV005403SC, FUSV005404SC, FUSV005405SC, FUSV005406SC, FUSV005407SC, FUSV005408SC, FUSV005410SC, FUSV005411SC, FUSV005412SC, FUSV005401CC, FUSV005402CC, FUSV005403CC, FUSV005404CC, FUSV005405CC, FUSV005406CC, FUSV005413CC, CKSV900101CC` |

**Notes:** The FUW01901SF module is the business logic class for the FUW01901 screen (Email Address Addition Confirmation). The screen logic class (conventionally named `KKSV01901Logic`) instantiates this logic class and delegates the "Apply" button processing to `mskm()`. The screen identifier `KKSV01901` follows the pattern of other K-Opticom screen classes.

## 6. Per-Branch Detail Blocks

**Block 1** — COMMON RELATION CHECK (L406)

> Validates shared form data consistency before processing. Uses the `FUSV0054` use case ID.

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

**Block 2** — DATA EXTRACTION FROM COMMON INFO BEAN (L409–419)

> Retrieves customer contract information from the shared common info bean, extracting the SSO system ID and five bean references.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean()` |
| 2 | CALL | `Map<String, Object> resultMap = getCommoninfoBeanInfo(commoninfoBean, null)` |
| 3 | SET | `String ssoInfoSysid = (String)resultMap.get(CommonInfoCFConst.SYSID_21)` [-> `SYSID_21`] |
| 4 | SET | `X31SDataBeanAccess ssoInfoBean = (X31SDataBeanAccess)resultMap.get(CommonInfoCFConst.SSO_INFO)` [-> `SSO_INFO`] |
| 5 | SET | `X31SDataBeanAccess opSvcKeiInfoBean = (X31SDataBeanAccess)resultMap.get(CommonInfoCFConst.OP_SVC_KEI_INFO)` [-> `OP_SVC_KEI_INFO`] |
| 6 | SET | `X31SDataBeanAccess seikyKeiInfoBean = (X31SDataBeanAccess)resultMap.get(CommonInfoCFConst.SEIKY_KEI_INFO)` [-> `SEIKY_KEI_INFO`] |
| 7 | SET | `X31SDataBeanAccess svcKeiInfoBean = (X31SDataBeanAccess)resultMap.get(CommonInfoCFConst.SVC_KEI_INFO)` [-> `SVC_KEI_INFO`] |

**Block 3** — SERVICE FORM BEAN ACQUISITION (L423–429)

> Obtains the screen-specific form bean and assembles all 5 beans into an array for passing to mapper methods.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `X31SDataBeanAccess bean = super.getServiceFormBean()` |
| 2 | SET | `X31SDataBeanAccess[] beanArray = { bean, opSvcKeiInfoBean, seikyKeiInfoBean, ssoInfoBean, svcKeiInfoBean }` |
| 3 | SET | `HashMap<String, String> paramMap = new HashMap<String, String>(16)` |
| 4 | EXEC | `paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0054)` [-> `FUSV0054`] |

**Block 4** — UPPER MAPPING (SC/CC DATA POPULATION) (L431–472)

> Sequentially populates the `dataMap` with input data for all service components. Each mapper call prepares the data map for a specific sub-process of the email address addition workflow.

| # | Type | Code |
|---|------|------|
| 1 | SET | `FUSV0054_FUSV0054OPDBMapper mapper = new FUSV0054_FUSV0054OPDBMapper()` |
| 2 | SET | `HashMap<String, Object> dataMap = new HashMap<String, Object>()` |
| 3 | CALL | `mapper.setFUSV005401SC(bean, dataMap, JPCModelConstant.FUNC_CD_1, ssoInfoSysid)` — Service contract registration |
| 4 | CALL | `mapper.setFUSV005402SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1, ssoInfoSysid)` — Optional service <ISP> registration |
| 5 | CALL | `mapper.setFUSV005409SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1)` — Optional service <ISP> reference |
| 6 | CALL | `mapper.setFUSV005403SC(bean, dataMap, JPCModelConstant.FUNC_CD_1)` — Optional service <ISP> link |
| 7 | CALL | `mapper.setFUSV005404SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1)` — Optional service <ISP> start |
| 8 | CALL | `mapper.setFUSV005405SC(bean, dataMap, JPCModelConstant.FUNC_CD_1)` — Enrollment target registration |
| 9 | CALL | `mapper.setFUSV005406SC(bean, dataMap, JPCModelConstant.FUNC_CD_1)` — Enrollment target registration |
| 10 | CALL | `mapper.setFUSV005407SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1)` — Progress registration |
| 11 | CALL | `mapper.setFUSV005408SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1)` — Application detail reference / follow-up request |
| 12 | CALL | `mapper.setFUSV005410SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2)` — Optional service contract agreement meeting |
| 13 | CALL | `mapper.setFUSV005411SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2)` — Optional service <ISP> agreement meeting |
| 14 | CALL | `mapper.setFUSV005412SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1)` — Instruction book registration |
| 15 | CALL | `mapper.setFUSV005401CC(dataMap, this)` — Service IF result data transfer |
| 16 | CALL | `mapper.setFUSV005402CC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1, ssoInfoSysid)` — Order issuance condition registration |
| 17 | CALL | `mapper.setFUSV005403CC(beanArray, dataMap)` — Service IF result data transfer |
| 18 | CALL | `mapper.setFUSV005404CC(beanArray, dataMap, JPCModelConstant.FUNC_CD_3, ssoInfoSysid)` — Optional email reception setting registration |
| 19 | CALL | `mapper.setFUSV005405CC(beanArray, dataMap)` — Mail address addition application (enrollment check) |
| 20 | CALL | `mapper.setFUSV005406CC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1)` — Mail address addition (initial POPID password acquisition) [ANK-2350-00-00] |
| 21 | CALL | `mapper.setFUSV005413CC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2)` — Family pack guidance decision CC [ANK-3149-00-00] |

**Block 5** — SERVICE INVOCATION (TRY-CATCH) (L475–493)

> Creates the output map, sets the service contract status, and invokes the service chain. Errors are handled by delegating to `chkRelationServiceError`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `HashMap<Object, Object> outputMap = new HashMap<Object, Object>()` |
| 2 | CALL | `JFUWebCommon.setSvcKeiStat(this, dataMap)` |
| 3 | EXEC | `invokeService(paramMap, dataMap, outputMap)` |
| 4 | CATCH | `catch (JCCWebServiceException se)` |
| 5 | CALL | `chkRelationServiceError(se)` |

**Block 6** — CKSV9001 MEMBER INFO UPDATE (TRY-CATCH) (L496–517)

> Independently invokes a secondary service for member information updates. Errors are caught by a broad `Throwable` handler — the debug message states: "Even if an error occurred in the member info update request, processing continues" (会員情報更新依存でエラーが発生したが処理は続ける).

| # | Type | Code |
|---|------|------|
| 1 | SET | `HashMap<String, String> ckParamMap = new HashMap<String, String>()` |
| 2 | EXEC | `ckParamMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_CKSV9001)` [-> `CKSV9001`] |
| 3 | SET | `HashMap<String, Map<String, String>> ckInputMap = new HashMap<String, Map<String, String>>()` |
| 4 | SET | `HashMap<String, String> ckOutputMap = new HashMap<String, String>()` |
| 5 | CALL | `mapper.setCKSV900101CC(beanArray, ckInputMap)` — Member info update request |
| 6 | EXEC | `invokeService(ckParamMap, ckInputMap, ckOutputMap)` |
| 7 | CATCH | `catch (Throwable ta)` — catches all errors, including non-web exceptions |
| 8 | EXEC | `DEBUG_LOG.debug("CKSV9001: Member info update request error occurred but processing continues")` |

**Block 7** — LOWER MAPPING (RESULT EXTRACTION) (L520–523)

> Retrieves processed SC results from the output map into the service form bean. The family pack CC method is commented out per ANK-3149-00-00.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `mapper.getFUSV005403SC(bean, outputMap)` — Retrieve optional service <ISP> link result |
| 2 | CALL | `mapper.getFUSV005409SC(bean, outputMap)` — Retrieve optional service <ISP> reference result |
| 3 | COMMENT | `mapper.getFUSV005413CC(bean, outputMap)` — [DELETED by ANK-3149-00-00] |

**Block 8** — CUSTOMER DATA REFRESH (L526)

> Re-reads the current customer contract information from the database to ensure the latest state.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JFUWebCommon.refreshGenCustKei(this)` |

**Block 9** — CONFIRMED MAILING ADDRESS ACQUISITION (L528–529)

> Retrieves the confirmed mailing address from the service form bean using the `FIX_MLAD` (Confirmed Mailing Address) constant.

| # | Type | Code |
|---|------|------|
| 1 | SET | `String fixMlad = bean.sendMessageString(FIX_MLAD, X31CWebConst.DATABEAN_GET_VALUE)` [-> `Confirmed Mailing Address`] |

**Block 10** — COMMON INFO BEAN REFRESH (L531–532)

> Re-fetches common info bean data with the confirmed mailing address, enabling subsequent extraction of the POPID password.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `resultMap = getCommoninfoBeanInfo(commoninfoBean, fixMlad)` |

**Block 11** — POPID PASSWORD EXTRACTION AND BEAN UPDATE (L535–537)

> Extracts the POPID password from the refreshed common info and sets it back into the service form bean.

| # | Type | Code |
|---|------|------|
| 1 | SET | `String fixPopidPwd = (String)resultMap.get(POP_PWD)` [-> `POPID Password`] |
| 2 | EXEC | `bean.sendMessageString(POP_PWD, X31CWebConst.DATABEAN_SET_VALUE, fixPopidPwd)` |

**Block 12** — OPTIONAL SERVICE CONTRACT NUMBER EXTRACTION (L539–540)

> Extracts the optional service contract number from the SC output map. Used as the notification recipient reference in the completion email.

| # | Type | Code |
|---|------|------|
| 1 | SET | `String ignoreOpSvcKeiNo = (String)((HashMap)outputMap.get(FUSV005402SC)).get(OP_SVC_KEI_NO)` [-> `FUSV005402SC`, `op_svc_kei_no`] |

**Block 13** — COMPLETION EMAIL (L543)

> Sends the application completion notification email. The mail template ID is `FUW019_1`.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID, null, null, ignoreOpSvcKeiNo)` [-> `FUW019_1`] |

**Block 14** — NEXT SCREEN SETTING (L545–547)

> Configures the next screen ID and name for navigation after the processing completes. The next screen is `FUW01903`.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `commoninfoBean.sendMessageString(NEXT_SCREEN_ID, DATABEAN_SET_VALUE, SCREEN_ID_FUW01903)` [-> `FUW01903`] |
| 2 | EXEC | `commoninfoBean.sendMessageString(NEXT_SCREEN_NAME, DATABEAN_SET_VALUE, SCREEN_NAME_FUW01903)` |

**Block 15** — RETURN (L549)

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

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `mskm` | Method | Mailing address addition — short for "Meeko-chi a-dore tosoku" (メール追加処理), the email address addition operation |
| `FUW01901SF` | Screen ID | Email Address Addition Confirmation screen — where customers review their email address addition request before submission |
| `FUW01903` | Screen ID | Next screen after email address addition completion — the completion / confirmation result screen |
| `FUSV0054` | Service ID | Service component use case for email address addition submission — encompasses all SCs and CCs invoked during the confirmation submit process |
| `FUSV0053` | Service ID | Service component use case for email address addition initial screen — used by the `init()` method of the same logic class |
| `CKSV9001` | Service ID | Member information update service — secondary service invoked to update member records after the main service chain completes |
| `USECASE_ID_FUSV0054` | Constant | Service use case identifier `FUSV0054` — triggers the email address addition submission service chain |
| `USECASE_ID_CKSV9001` | Constant | Service use case identifier `CKSV9001` — triggers the member information update service |
| `MSKM_COMP_MAIL_ID` | Constant | Completion notification mail template ID `FUW019_1` — the email template used for application completion notifications |
| `FIX_MLAD` | Constant | Confirmed Mailing Address — the finalized mailing address after the application is processed |
| `POP_PWD` | Constant | POPID Password — the POP3 server password associated with the customer's email address |
| `POPID` | Business term | Post Office Protocol Identifier — a customer login credential used for accessing email services; consists of a POPID username and password |
| `SYSID_21` | Constant | SSO System ID — the system identifier extracted from SSO (Single Sign-On) information for authentication context |
| `SSO_INFO` | Constant | SSO Information — shared session data containing the authenticated user's system identity |
| `OP_SVC_KEI_INFO` | Constant | Optional Service Detail Information — data about optional ISP services attached to the customer's contract |
| `SEIKY_KEI_INFO` | Constant | Billing Detail Information — billing and invoice information for the customer's service contract |
| `SVC_KEI_INFO` | constant | Service Detail Information — main service contract line item information |
| `op_svc_kei_no` | Field | Optional service contract number — internal identifier for optional ISP service contracts |
| `FUNC_CD_1/2/3` | Constant | Function code used by mappers to distinguish between different mapping operations — `FUNC_CD_1` is standard registration, `FUNC_CD_2` is agreement/reference, `FUNC_CD_3` is email reception settings |
| `beanArray` | Variable | Shared array of 5 data beans (service form bean, optional service info, billing info, SSO info, service detail info) passed to mapper methods |
| `dataMap` | Variable | Input data map — accumulates mapped data from all SC/CC mappers before service invocation |
| `outputMap` | Variable | Output data map — receives results from the service chain invocation |
| `ckInputMap` | Variable | Input map for the CKSV9001 (member info update) service |
| `ckParamMap` | Variable | Parameter map for the CKSV9001 service containing the use case ID |
| `FUSV005402SC` | SC Code | Optional service contract <ISP> registration — registers the optional ISP service contract and returns the contract number |
| `setSvcKeiStat` | Method | Sets the service contract status in the data map — prepares the status field for service processing |
| `refreshGenCustKei` | Method | Refreshes current customer contract data — re-reads customer information from the database to reflect post-processing state |
| `checkCommonRelation` | Method | Validates shared form data consistency — ensures common field values are valid before processing |
| `chkRelationServiceError` | Method | Handles web service exceptions — routes service errors to the appropriate error handling logic |
| `sendMskmFinMail` | Method | Sends the application completion notification email — delivers a confirmation email to the customer |
| `X31SDataBeanAccess` | Class | Data bean access class — framework class for reading/writing form bean data via sendMessageString/sendMessageBoolean methods |
| `JPCModelConstant.FUNC_CD_1` | Constant | Function code 1 — indicates standard data registration/mapping in SC methods |
| `JPCModelConstant.FUNC_CD_2` | Constant | Function code 2 — indicates reference/agreement data mapping in SC methods |
| `JPCModelConstant.FUNC_CD_3` | Constant | Function code 3 — indicates email reception settings mapping in SC methods |
| `OneStopDataBeanAccess` | Class | Framework bean access wrapper — provides `sendMessageString` method for data bean access |
| `ANK-2350-00-00` | Change ticket | POPID password / WebID password re-authentication fix (2016-03-15) — addresses password inconsistency issues |
| `ANK-3149-00-00` | Change ticket | Security pack introduction (2017-04-13) — adds family pack guidance decision CC and removes the old family pack CC |
| ISP | Business term | Internet Service Provider — optional ISP service attached to the main FTTH service contract |
| SC | Technical term | Service Component — backend service unit invoked via the service framework's invokeService mechanism |
| CC | Technical term | Common Component — shared business logic component that performs data transfer, validation, or condition registration within a service chain |
| FTTH | Business term | Fiber To The Home — the primary broadband internet service offered by K-Opticom |
| SSO | Technical term | Single Sign-On — authentication system providing centralized user identity management |
