# Business Logic — FUW03901SFLogic.mskm() [163 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.FUW03901SF.FUW03901SFLogic` |
| Layer | Service Logic (Web layer business logic, extends `JCCWebBusinessLogic`) |
| Module | `FUW03901SF` (Package: `eo.web.webview.FUW03901SF`) |

## 1. Role

### FUW03901SFLogic.mskm()

This method is the **confirm-screen submit handler** (the "Apply" button processing) for the **Authentication ID and Password Change** screen in the K-Opticom customer management system. It orchestrates the full end-to-end submission of a customer's request to change their ISP authentication ID and password. The method first validates the contract state by checking that the current authentication ID is set, then performs a single-linkage (tankanren) check that validates password consistency — ensuring the current password is correct, the new password matches its re-entry, and the new password differs from the old one. If validation fails, it returns early with error messages. Upon successful validation, it branches by service group code (`prcGrpCd`): for standard non-ADSL services, it invokes a comprehensive 12-step mapping sequence through the `FUSV0075_FUSV0075OPDBMapper` covering authentication ID/password verification, application content approval registration, ISP authentication ID password change, progress registration, application detail inquiry, service IF data transfer, and order issuance; for eoADSL (Fres) services, it invokes a streamlined 1-step mapping through `FUSV0259_FUSV0259OPDBMapper` for ADSL-specific authentication ID password change. Finally, it routes the user to the FUW03902 confirmation completion screen. This method implements the **delegation** and **routing/dispatch** design patterns, acting as the central coordination point that aggregates data from shared and service form beans, delegates to a mapper for T-Map data mapping, and invokes the BP (dialect API) service layer for downstream processing.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["mskm()"])
    CHECK_REL["JFUWebCommon.checkCommonRelation()"]
    GET_COMMON["getCommonInfoBean()"]
    GET_SERVICE["getServiceFormBean()"]
    GET_WEB_CHG["commonInfoBean.getDataBeanArray(WEB_CHG_INFO)"]
    GET_WEB_CHG_0["webChgInfoBeanArray.getDataBean(0)"]
    GET_SSO["webChgInfoBean.getDataBeanArray(SSO_INFO)"]
    GET_SSO_0["ssoInfoArray.getDataBean(0)"]
    GET_GEN_CUST["webChgInfoBean.getDataBeanArray(GEN_CUST_KEI_INFO)"]
    GET_GEN_CUST_0["genCustKeiInfoArray.getDataBean(0)"]
    CHK_NINSHO["bean.sendMessageString(NOW_NINSHO_ID)"]
    NINSHO_CHECK{chkNinshoId == null or empty?}
    THROW_CONTRACT["throw JCCBusinessException(0102)
Contract state error"]
    TANKANREN["tankanrenCheck(bean, commonInfoBean)"]
    RETURN_TANK["return true
(with error message)"]
    BUILD_PARAMS["Build paramBean1/2/3 arrays"]
    GET_SVC_INFO["genCustKeiInfoBean.getDataBeanArray(SVC_KEI_INFO)"]
    GET_SVC_INFO_0["svcKeiInfoBean.getDataBean(0)"]
    GET_PRC_GRP["svcKeiInfoBean.sendMessageString(PRC_GRP_CD_23)"]
    BUILD_MAP["Create paramMap and dataMap"]
    CHECK_PRG{prcGrpCd equals
CD00133_06?}
    FUSV0075_BRANCH["Non-eoADSL (Fres) path"]
    FUSV0259_BRANCH["eoADSL (Fres) path"]
    FUSV0075_MAPPINGS["FUSV0075_FUSV0075OPDBMapper:
12 mapping operations
(007501CC through 007505CC)"]
    FUSV0259_MAPPINGS["FUSV0259_FUSV0259OPDBMapper:
setFUSV025901CC
(1 mapping operation)"]
    CALL_SERVICE["invokeService(paramMap, dataMap, outputMap)"]
    CHK_MSG{msgResult != null?}
    SET_MSG["JFUWebCommon.setMessageInfo()"]
    RETURN_MSG["return true"]
    CALL_SERVICE2["continue processing"]
    SET_NEXT["Set NEXT_SCREEN_ID to FUW03902
Set NEXT_SCREEN_NAME to FUW03902"]
    END_RETURN(["return true"])

    START --> CHECK_REL
    CHECK_REL --> GET_COMMON
    GET_COMMON --> GET_SERVICE
    GET_SERVICE --> GET_WEB_CHG
    GET_WEB_CHG --> GET_WEB_CHG_0
    GET_WEB_CHG_0 --> GET_SSO
    GET_SSO --> GET_SSO_0
    GET_SSO_0 --> GET_GEN_CUST
    GET_GEN_CUST --> GET_GEN_CUST_0
    GET_GEN_CUST_0 --> CHK_NINSHO
    CHK_NINSHO --> NINSHO_CHECK
    NINSHO_CHECK -- Yes --> THROW_CONTRACT
    NINSHO_CHECK -- No --> TANKANREN
    TANKANREN -- false --> RETURN_TANK
    TANKANREN -- true --> BUILD_PARAMS
    BUILD_PARAMS --> GET_SVC_INFO
    GET_SVC_INFO --> GET_SVC_INFO_0
    GET_SVC_INFO_0 --> GET_PRC_GRP
    GET_PRC_GRP --> BUILD_MAP
    BUILD_MAP --> CHECK_PRG
    CHECK_PRG -- No --> FUSV0075_BRANCH
    CHECK_PRG -- Yes --> FUSV0259_BRANCH
    FUSV0075_BRANCH --> FUSV0075_MAPPINGS
    FUSV0259_BRANCH --> FUSV0259_MAPPINGS
    FUSV0075_MAPPINGS --> CALL_SERVICE
    FUSV0259_MAPPINGS --> CALL_SERVICE
    CALL_SERVICE --> CHK_MSG
    CHK_MSG -- Yes --> SET_MSG
    SET_MSG --> RETURN_MSG
    CHK_MSG -- No --> CALL_SERVICE2
    CALL_SERVICE2 --> SET_NEXT
    SET_NEXT --> END_RETURN
    RETURN_TANK --> END_RETURN
    THROW_CONTRACT --> END_RETURN
```

**Block descriptions:**

1. **Common Relation Check** — Calls `JFUWebCommon.checkCommonRelation()` for front-line common product / common linkage validation with `USECASE_ID_FUSV0075`.
2. **Bean Retrieval** — Acquires the common info bean and service form bean from the session.
3. **Shared Home Bean Data Extraction** — Extracts nested bean structures: Web Change Info, SSO Info, and Current Customer Info from the shared home bean hierarchy.
4. **Authentication ID Presence Check** — Verifies the current authentication ID (`NOW_NINSHO_ID`) is set on the bean. If missing, throws contract state error (0102).
5. **Single-Linkage (Password) Check** — Delegates to `tankanrenCheck()` for comprehensive password validation (current password match against SSO, new password consistency, password change verification). If validation fails, returns `true` with an error message displayed.
6. **Parameter Array Construction** — Assembles three bean arrays (`paramBean1`, `paramBean2`, `paramBean3`) with varying levels of data scope for different mapper calls.
7. **Service Group Code Extraction** — Extracts the price group code (`prcGrpCd`) from the service contract info to determine the service type branch.
8. **Branch: Non-eoADSL (Fres) vs eoADSL** — If `prcGrpCd` equals `CD00133_06` ("06"), it is an eoADSL (Fres) service path; otherwise, it is the standard non-ADSL path.
9. **Standard Path (Non-eoADSL)** — Creates `FUSV0075_FUSV0075OPDBMapper` and executes 12 sequential mapping operations covering password existence check, ID list matching, password authentication list matching, application content approval registration, ISP credential change, progress registration, application detail inquiry, 3x service IF data transfers, and order issuance.
10. **ADSL Path (eoADSL/Fres)** — Creates `FUSV0259_FUSV0259OPDBMapper` and executes a single mapping operation (`setFUSV025901CC`) for ADSL-specific authentication ID password change.
11. **Service Invocation** — Calls `invokeService()` with the populated parameter map, data map, and output map. Handles `JCCWebServiceException` with detailed error classification based on template ID, error flag, and item ID.
12. **Navigation Routing** — Sets the next screen ID and name to `FUW03902` on the common info bean and returns `true`.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| - | (none) | - | This is a no-argument method. All data is obtained from session-scoped beans. |

**Instance fields and external state read:**

| Source | Field / Context | Business Description |
|--------|----------------|---------------------|
| `this` (via `super.getCommonInfoBean()`) | Shared Home Bean | Aggregated context data including SSO information, Web Change Info, and Current Customer Info. |
| `this` (via `super.getServiceFormBean()`) | Service Form Bean | The `FUW03901SFBean` containing user-entered form data and session values. |
| `USECASE_ID_FUSV0075` (private static) | Service ID for application | Hardcoded to `"FUSV0075"` — identifies the service use case for authentication ID/password change applications. |
| `STR_NULL` | Empty string constant | Resolved from `JFUStrConst.EMPTY` — used for null/empty comparison checks. |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `JFUWebCommon.checkCommonRelation` | JFUWebCommon | - | Front-line common product / common linkage validation check |
| R | `OneStopDataBeanAccessArray.getDataBeanArray` | - | - | Retrieves Web Change Info array from shared home bean |
| R | `OneStopDataBeanAccess.getDataBean` | - | - | Retrieves SSO Info array, Current Customer Info array from nested beans |
| R | `OneStopDataBeanAccess.sendMessageString` | - | - | Retrieves current authentication ID (`NOW_NINSHO_ID`) from service form bean |
| - | `FUW03901SFLogic.tankanrenCheck` | - | - | Delegates password single-linkage validation check |
| R | `OneStopDataBeanAccess.getDataBeanArray` | - | - | Retrieves Service Contract Info from Current Customer Info |
| R | `OneStopDataBeanAccess.sendMessageString` | - | - | Extracts Price Group Code (`PRC_GRP_CD_23`) to determine service type |
| - | `FUSV0075_FUSV0075OPDBMapper.setFUSV007501CC` | FUSV007501CC | - | Authentication ID/Password existence check CC |
| - | `FUSV0075_FUSV0075OPDBMapper.setFUSV007501SC` | FUSV007501SC | - | Authentication ID list matching SC |
| - | `FUSV0075_FUSV0075OPDBMapper.setFUSV007502SC` | FUSV007502SC | - | Authentication ID Password Authentication List Matching 1 |
| - | `FUSV0075_FUSV0075OPDBMapper.setFUSV007503SC` | FUSV007503SC | - | Authentication ID Password Authentication List Matching 2 |
| - | `FUSV0075_FUSV0075OPDBMapper.setFUSV007504SC` | FUSV007504SC | - | Application Content Approval Registration |
| - | `FUSV0075_FUSV0075OPDBMapper.setFUSV007505SC` | FUSV007505SC | - | ISP Authentication ID Password Change |
| - | `FUSV0075_FUSV0075OPDBMapper.setFUSV007506SC` | FUSV007506SC | - | Progress Registration |
| - | `FUSV0075_FUSV0075OPDBMapper.setFUSV007507SC` | FUSV007507SC | - | Application Detail Inquiry / Follow-up Task Delegation |
| - | `FUSV0075_FUSV0075OPDBMapper.setFUSV007502CC` | FUSV007502CC | - | Service IF Result Data Transfer 1 CC |
| - | `FUSV0075_FUSV0075OPDBMapper.setFUSV007503CC` | FUSV007503CC | - | Service IF Result Data Transfer 2 CC |
| - | `FUSV0075_FUSV0075OPDBMapper.setFUSV007504CC` | FUSV007504CC | - | Service IF Result Data Transfer 3 CC |
| - | `FUSV0075_FUSV0075OPDBMapper.setFUSV007505CC` | FUSV007505CC | - | Service Order Issuance CC |
| - | `FUSV0259_FUSV0259OPDBMapper.setFUSV025901CC` | FUSV025901CC | - | ADSL Authentication ID Password Change mapping (eoADSL/Fres path) |
| - | `JCCBatCommon.invokeService` | JCCBatCommon | - | Invokes the BP (dialect API) service with mapped parameters |
| - | `JBSBatKKCrsChgIktAdd.invokeService` | JBSBatKKCrsChgIktAdd | - | Service component for application content approval registration |
| - | `JBSbatKKCrsChgSmtVLAdd.invokeService` | JBSbatKKCrsChgSmtVLAdd | - | Service component for progress registration |
| - | `JBSbatKKCrsChgWribSette.invokeService` | JBSbatKKCrsChgWribSette | - | Service component for writing/setting data |
| - | `JBSbatKKEponSwchKjInfSksi.invokeService` | JBSbatKKEponSwchKjInfSksi | - | Service component for EPON switchover support information transfer |
| R | `JCKPmpScParamHenshu.getStatus` | JCKPmpScParamHenshu | - | Status retrieval via parameter conversion component |
| R | `JCNBPCommon.getStatus` | JCNBPCommon | - | Status retrieval via common BP component |
| R | `JCNDslScParamHenshu.getStatus` | JCNDslScParamHenshu | - | Status retrieval for DSL parameter conversion |
| R | `JFUBaseUtil.getStatus` | JFUBaseUtil | - | Base utility status retrieval |
| R | `JKKCashPostGetStatusCC.getStatus` | JKKCashPostGetStatusCC | - | Cash post-processing status check |
| - | `JKKAddSupportCC.setMessageInfo` | JKKAddSupportCC | - | Sets error/message info for add support |
| - | `JKKCreateNhkDntIktCC.setMessageInfo` | JKKCreateNhkDntIktCC | - | Sets error message for NHK subscription exemption registration |
| - | `JKKFumeiKktkSvcKeiUpdCC.setMessageInfo` | JKFumeiKktkSvcKeiUpdCC | - | Sets error message for unauthorized service billing update |
| - | `JKKGetKikiUpdCodeNameCC.setMessageInfo` | JKKGetKikiUpdCodeNameCC | - | Sets error message for equipment update code name retrieval |
| - | `JKKGetKojiAkTaknkikiCC.setMessageInfo` | JKKGetKojiAkTaknkikiCC | - | Sets error message for maintenance/discontinued equipment retrieval |
| R | `OneStopDataBeanAccessArray.getDataBean` | - | - | Retrieves indexed data beans from arrays |
| R | `OneStopDataBeanAccess.getDataBeanArray` | - | - | Retrieves nested data bean arrays |
| - | `OneStopDataBeanAccess.sendMessageString` | - | - | Sends message strings on data beans (getter/setter) |
| - | `JFUCommonRelationCheck.checkCommonRelation` | JFUCommonRelationCheck | - | Common relation check for service data consistency |
| - | `JFUWebCommon.checkCommonRelation` | JFUWebCommon | - | Front-line common product / common linkage validation |
| R | `FUW09905SFLogic.getDataBean` | FUW09905SFLogic | - | Data bean retrieval from related screen logic |
| - | `FUSV0075_FUSV0075OPDBMapper.setFUSV007501CC` | FUSV007501CC | - | Top-level mapping: Authentication ID/Password existence check CC |
| - | `FUSV0075_FUSV0075OPDBMapper.setFUSV007501SC` | FUSV007501SC | - | Top-level mapping: Authentication ID list matching SC |
| - | `FUSV0075_FUSV0075OPDBMapper.setFUSV007502CC` | FUSV007502CC | - | Service IF result data transfer 1 CC |
| - | `FUSV0075_FUSV0075OPDBMapper.setFUSV007502SC` | FUSV007502SC | - | Authentication ID Password Authentication List Matching 1 SC |
| - | `FUSV0075_FUSV0075OPDBMapper.setFUSV007503CC` | FUSV007503CC | - | Service IF result data transfer 2 CC |
| - | `FUSV0075_FUSV0075OPDBMapper.setFUSV007503SC` | FUSV007503SC | - | Authentication ID Password Authentication List Matching 2 SC |
| - | `FUSV0075_FUSV0075OPDBMapper.setFUSV007504CC` | FUSV007504CC | - | Service IF result data transfer 3 CC |
| - | `FUSV0075_FUSV0075OPDBMapper.setFUSV007504SC` | FUSV007504SC | - | Application Content Approval Registration SC |
| - | `FUSV0075_FUSV0075OPDBMapper.setFUSV007505CC` | FUSV007505CC | - | Service Order Issuance CC |
| - | `FUSV0075_FUSV0075OPDBMapper.setFUSV007505SC` | FUSV007505SC | - | ISP Authentication ID Password Change SC |
| - | `FUSV0075_FUSV0075OPDBMapper.setFUSV007506SC` | FUSV007506SC | - | Progress Registration SC |
| - | `FUSV0075_FUSV0075OPDBMapper.setFUSV007507SC` | FUSV007507SC | - | Application Detail Inquiry / Follow-up Task Delegation SC |

**How to classify:**

- **C** (Create): Methods with names like `executeOdrHakkoJokenAdd()` — application content approval registration, progress registration.
- **R** (Read): Methods with names like `getStatus()`, `getDataBean()`, `sendMessageString()` with `DATABEAN_GET_VALUE` — all data retrieval operations from beans and status checks.
- **U** (Update): Methods like `setFUSV0075xxSC` that write data to mapped output structures; `setMessageInfo()` for setting error messages.
- **D** (Delete): Not present in this method.

**How to find SC Code:**
- SC codes follow the pattern `FUSV007501CC`, `FUSV007501SC`, etc. — the `FUSV0075` prefix identifies the service component for authentication ID/password change, and the suffix (`01`, `02`, `03`, `04`, `05`, `06`, `07`) identifies the specific operation.
- For the eoADSL path: `FUSV025901CC`.

**How to find Entity/DB tables:**
- The mapper classes (`FUSV0075_FUSV0075OPDBMapper`, `FUSV0259_FUSV0259OPDBMapper`) map to BP (dialect API) components which in turn interact with database tables. The actual table names (e.g., `KK_T_ODR_HAKKO_JOKEN`, `KK_T_SVC_KEI`, `KK_T_SVC_KEI_UCWK`) are resolved within the called SC/CBS methods.

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Screen:FUW03901 (Confirm Screen) | `FUW03901SFLogic.mskm()` [entry point — invoked from FUW03901 confirm screen submit button] | `FUSV007501CC` [R] Auth ID/PWD existence check |
| 2 | Screen:FUW03901 (Confirm Screen) | `FUW03901SFLogic.mskm()` -> `FUSV007501SC` [R] Auth ID list matching | `FUSV007501SC` [R] Authentication ID list |
| 3 | Screen:FUW03901 (Confirm Screen) | `FUW03901SFLogic.mskm()` -> `FUSV007502SC` [R] Auth ID Password Auth List Matching 1 | `FUSV007502SC` [R] Password authentication data |
| 4 | Screen:FUW03901 (Confirm Screen) | `FUW03901SFLogic.mskm()` -> `FUSV007503SC` [R] Auth ID Password Auth List Matching 2 | `FUSV007503SC` [R] Password authentication data |
| 5 | Screen:FUW03901 (Confirm Screen) | `FUW03901SFLogic.mskm()` -> `FUSV007504SC` [C] Application Content Approval Registration | `FUSV007504SC` [C] Application approval registration |
| 6 | Screen:FUW03901 (Confirm Screen) | `FUW03901SFLogic.mskm()` -> `FUSV007505SC` [U] ISP Auth ID Password Change | `FUSV007505SC` [U] ISP credential update |
| 7 | Screen:FUW03901 (Confirm Screen) | `FUW03901SFLogic.mskm()` -> `FUSV007506SC` [C] Progress Registration | `FUSV007506SC` [C] Progress record registration |
| 8 | Screen:FUW03901 (Confirm Screen) | `FUW03901SFLogic.mskm()` -> `FUSV007507SC` [R] Application Detail Inquiry / Follow-up Task | `FUSV007507SC` [R] Application detail |
| 9 | Screen:FUW03901 (Confirm Screen) | `FUW03901SFLogic.mskm()` -> `FUSV007502CC` [R] Service IF Data Transfer 1 | `FUSV007502CC` [R] IF result data |
| 10 | Screen:FUW03901 (Confirm Screen) | `FUW03901SFLogic.mskm()` -> `FUSV007503CC` [R] Service IF Data Transfer 2 | `FUSV007503CC` [R] IF result data |
| 11 | Screen:FUW03901 (Confirm Screen) | `FUW03901SFLogic.mskm()` -> `FUSV007504CC` [R] Service IF Data Transfer 3 | `FUSV007504CC` [R] IF result data |
| 12 | Screen:FUW03901 (Confirm Screen) | `FUW03901SFLogic.mskm()` -> `FUSV007505CC` [C] Service Order Issuance | `FUSV007505CC` [C] Order issuance |
| 13 | Screen:FUW03901 (eoADSL/Fres path) | `FUW03901SFLogic.mskm()` -> `FUSV025901CC` [R] ADSL Auth ID Password Change mapping | `FUSV025901CC` [R] ADSL credential mapping |
| 14 | Screen:FUW03901 (Error recovery path) | `FUW03901SFLogic.mskm()` -> `tankanrenCheck()` [R] Password validation | `tankanrenCheck()` [R] Password data validation |

**Notes:**
- No external callers to `mskm()` were found in the codebase. This method is the direct submit handler for the FUW03901 confirm screen, typically invoked through the framework's screen-to-logic routing.
- The `USECASE_ID_FUSV0075` constant (`"FUSV0075"`) is passed to `checkCommonRelation()` and `invokeService()` to identify the service use case.
- The eoADSL (Fres) variant uses `USECASE_ID_FUSV0259` (`"FUSV0259"`).

## 6. Per-Branch Detail Blocks

**Block 1** — METHOD_ENTRY (L260)

> Method entry: confirm-screen submit handler for authentication ID and password change.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JFUWebCommon.checkCommonRelation(this, USECASE_ID_FUSV0075)` // Front-line common product / common linkage check [-> USECASE_ID_FUSV0075="FUSV0075"] |
| 2 | CALL | `commonInfoBean = super.getCommonInfoBean()` // Acquire shared home bean |
| 3 | CALL | `bean = super.getServiceFormBean()` // Acquire service form bean |

**Block 2** — VARIABLE_DECLARATION (L271-L274)

> Declares uninitialized shared bean references for SSO and Current Customer Info.

| # | Type | Code |
|---|------|------|
| 1 | SET | `ssoInfoBean = null` // SSO information bean placeholder |
| 2 | SET | `genCustKeiInfoBean = null` // Current customer info bean placeholder |

**Block 3** — DATA_EXTRACTION (L277-L287)

> Extracts nested bean hierarchy: Web Change Info -> SSO Info, Current Customer Info.

| # | Type | Code |
|---|------|------|
| 1 | SET | `webChgInfoBeanArray = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_CHG_INFO)` // Get Web Change Info array |
| 2 | SET | `webChgInfoBean = webChgInfoBeanArray.getDataBean(0)` // First element of Web Change Info |
| 3 | SET | `ssoInfoArray = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.SSO_INFO)` // Get SSO Info array |
| 4 | SET | `ssoInfoBean = ssoInfoArray.getDataBean(0)` // First element of SSO Info |
| 5 | SET | `genCustKeiInfoArray = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.GEN_CUST_KEI_INFO)` // Get Current Customer Info array |
| 6 | SET | `genCustKeiInfoBean = genCustKeiInfoArray.getDataBean(0)` // First element of Current Customer Info |

**Block 4** — AUTH_ID_PRESENCE_CHECK [IF] (L290-L295)

> Verifies the current authentication ID is present on the service form bean. If missing, throws contract state error.

| # | Type | Code |
|---|------|------|
| 1 | SET | `chkNinshoId = bean.sendMessageString(FUW03901SFConst.NOW_NINSHO_ID, X31CWebConst.DATABEAN_GET_VALUE)` // Get current auth ID [-> NOW_NINSHO_ID="現在の認証ID"] |
| 2 | IF | `chkNinshoId == null || chkNinshoId.equals(STR_NULL)` [L291] // Check if auth ID is missing or empty [-> STR_NULL=""] |

**Block 4.1** — ELSE-IF body (throw) (L293-L294)

> Throws contract state error when authentication ID is not set.

| # | Type | Code |
|---|------|------|
| 1 | THROW | `throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102)` // Contract state error [-> "0102"] |

**Block 5** — TANKANREN_CHECK [IF] (L298-L301)

> Single-linkage (password consistency) check via delegation. Returns early with error if validation fails.

| # | Type | Code |
|---|------|------|
| 1 | IF | `!tankanrenCheck(bean, commonInfoBean)` [L299] // Delegate password validation |

**Block 5.1** — IF body (return) (L300-L301)

> When tankanrenCheck returns false, show error and return true (stay on screen).

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return true` // Return to stay on confirm screen with error displayed |

**Block 6** — PARAMETER_ARRAY_CONSTRUCTION (L304-L307)

> Builds parameter bean arrays of varying scopes for mapper invocations.

| # | Type | Code |
|---|------|------|
| 1 | SET | `paramBean1 = { bean }` // Service form bean only |
| 2 | SET | `paramBean2 = { bean, ssoInfoBean }` // Service form + SSO info |
| 3 | SET | `paramBean3 = { bean, ssoInfoBean, genCustKeiInfoBean }` // Full scope: service form + SSO + customer info |

**Block 7** — SERVICE_GROUP_CODE_EXTRACTION (L309-L311)

> Extracts the price group code from service contract info to determine service type.

| # | Type | Code |
|---|------|------|
| 1 | SET | `svcKeiInfoBean = genCustKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SVC_KEI_INFO).getDataBean(0)` // Service contract info |
| 2 | SET | `prcGrpCd = svcKeiInfoBean.sendMessageString(CommonInfoCFConst.PRC_GRP_CD_23, X31CWebConst.DATABEAN_GET_VALUE)` // Price group code [-> PRC_GRP_CD_23="価格グループコード"] |
| 3 | SET | `paramMap = new HashMap<String, String>(16)` // Use-case ID storage |
| 4 | SET | `dataMap = new HashMap<String, Object>()` // Mapping data storage |

**Block 8** — SERVICE_TYPE_BRANCH [IF/ELSE-IF/ELSE] (L313)

> Branches by service group code. `CD00133_06` equals `"06"` identifies eoADSL (Fres) services.

| # | Type | Code |
|---|------|------|
| 1 | IF | `!JFUStrConst.CD00133_06.equals(prcGrpCd)` [L314] // Non-eoADSL (Fres) path [-> CD00133_06="06"] |

**Block 8.1** — IF body: Non-eoADSL path — mapping setup (L316-L317)

> Sets use-case ID and creates the FUSV0075 mapper.

| # | Type | Code |
|---|------|------|
| 1 | SET | `paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0075)` // Set service ID [-> USECASE_ID_FUSV0075="FUSV0075"] |
| 2 | SET | `mapper = new FUSV0075_FUSV0075OPDBMapper()` // Create mapping object |

**Block 8.1.1** — IF body: 12 sequential mapping operations (L320-L341)

> Executes all 12 mapping operations in the standard (non-ADSL) service flow.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap = mapper.setFUSV007501CC(paramBean3, dataMap, JPCModelConstant.FUNC_CD_1)` // Auth ID/PWD existence check CC [-> FUNC_CD_1="1"] |
| 2 | SET | `dataMap = mapper.setFUSV007501SC(paramBean3, dataMap, JPCModelConstant.FUNC_CD_1)` // Auth ID list matching |
| 3 | SET | `dataMap = mapper.setFUSV007502SC(paramBean3, dataMap, JPCModelConstant.FUNC_CD_1)` // Auth ID Password Auth List Matching 1 |
| 4 | SET | `dataMap = mapper.setFUSV007503SC(paramBean3, dataMap, JPCModelConstant.FUNC_CD_1)` // Auth ID Password Auth List Matching 2 |
| 5 | SET | `dataMap = mapper.setFUSV007504SC(paramBean2, dataMap, JPCModelConstant.FUNC_CD_1)` // Application Content Approval Registration |
| 6 | SET | `dataMap = mapper.setFUSV007505SC(paramBean1, dataMap, JPCModelConstant.FUNC_CD_1)` // ISP Auth ID Password Change |
| 7 | SET | `dataMap = mapper.setFUSV007506SC(paramBean2, dataMap, JPCModelConstant.FUNC_CD_1)` // Progress Registration |
| 8 | SET | `dataMap = mapper.setFUSV007507SC(paramBean1, dataMap, JPCModelConstant.FUNC_CD_1)` // Application Detail Inquiry / Follow-up Task |
| 9 | SET | `dataMap = mapper.setFUSV007502CC(paramBean1, dataMap, JPCModelConstant.FUNC_CD_1)` // Service IF Data Transfer 1 CC |
| 10 | SET | `dataMap = mapper.setFUSV007503CC(paramBean1, dataMap, JPCModelConstant.FUNC_CD_1)` // Service IF Data Transfer 2 CC |
| 11 | SET | `dataMap = mapper.setFUSV007504CC(paramBean1, dataMap, JPCModelConstant.FUNC_CD_1)` // Service IF Data Transfer 3 CC |
| 12 | SET | `dataMap = mapper.setFUSV007505CC(paramBean3, dataMap, JPCModelConstant.FUNC_CD_1)` // Service Order Issuance CC |

**Block 8.2** — ELSE body: eoADSL (Fres) path (L344-L349)

> For eoADSL (Fres) services: creates FUSV0259 mapper with single mapping operation.

| # | Type | Code |
|---|------|------|
| 1 | SET | `paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0259)` // Set ADSL service ID [-> USECASE_ID_FUSV0259="FUSV0259"] |
| 2 | SET | `mapper = new FUSV0259_FUSV0259OPDBMapper()` // Create ADSL mapping object |
| 3 | EXEC | `mapper.setFUSV025901CC(paramBean3, dataMap, JPCModelConstant.FUNC_CD_1)` // ADSL Auth ID Password Change mapping |

**Block 9** — OUTPUT_MAP_CREATION (L352)

> Creates the output map to receive results from service invocation.

| # | Type | Code |
|---|------|------|
| 1 | SET | `outputMap = new HashMap<Object, Object>()` // Search result storage |

**Block 10** — SERVICE_INVOCATION [TRY-CATCH] (L355-L397)

> Invokes the BP service and handles errors with detailed classification.

| # | Type | Code |
|---|------|------|
| 1 | TRY | `msgResult = invokeService(paramMap, dataMap, outputMap)` [L355] // Execute BP service |
| 2 | IF | `msgResult != null` [L356] // Check for error result |
| 3 | EXEC | `JFUWebCommon.setMessageInfo(this, msgResult)` // Set error message info |
| 4 | RETURN | `return true` // Return with error displayed |

**Block 10.1** — CATCH JCCWebServiceException (L360-L396)

> Handles web service exceptions by extracting detailed error info and classifying by template ID.

| # | Type | Code |
|---|------|------|
| 1 | SET | `msgResult = se.getMessageList()` // Extract message list from exception |
| 2 | SET | `moreInfo = msgResult.getMessageMoreInfoList()` // Get more info array |
| 3 | SET | `info = moreInfo[0]` // First item — only one related check error expected |
| 4 | SET | `templateid = info.getTemplateId()` // Extract template ID |
| 5 | SET | `itemid = info.getItemId()` // Extract item ID |
| 6 | SET | `status = info.getStatus()` // Extract status |
| 7 | SET | `errFlg = info.getItemCheckErr()` // Extract error flag |

**Block 10.2** — RELATION_ERROR_CHECK [IF] (L400-L401)

> Checks if the error status is a related check error.

| # | Type | Code |
|---|------|------|
|1 | IF | `String.valueOf(JPCModelConstant.RELATION_ERR).equals(status)` [L400] // Check for relation error status |

**Block 10.2.1** — TEMPLATE_E171_CHECK [IF] (L403-L408)

> Template EKK0171C012 with error flag EA and item `svc_kei_ucwk_no` — update not possible error.

| # | Type | Code |
|---|------|------|
| 1 | IF | `"EKK0171C012".equals(templateid) && JFUStrConst.RELATION_CHECK_ERR_EA.equals(errFlg) && "svc_kei_ucwk_no".equals(itemid)` [L404] // Update impossible error conditions |
| 2 | THROW | `throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0204)` // Update not possible [-> "0204"] |

**Block 10.2.2** — TEMPLATE_B002_CHECK [IF] (L411-L417)

> Template EKK0171B002 with error flag EA and item `key_isp_ninsho_id_pwd` — ISP auth ID password mismatch.

| # | Type | Code |
|---|------|------|
| 1 | IF | `"EKK0171B002".equals(templateid) && JFUStrConst.RELATION_CHECK_ERR_EA.equals(errFlg) && "key_isp_ninsho_id_pwd".equals(itemid)` [L412] // ISP credential mismatch conditions |
| 2 | EXEC | `JFUWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKF0400_TW, REPLACE_CHAR_PWD_ARRAY, ERR_NOW_PWD_ITEM_ID)` // Set ISP password error message [-> ERR_NOW_PWD_ITEM_ID="now_pwd"] |
| 3 | RETURN | `return true` // Return to stay on screen |

**Block 10.2.3** — TEMPLATE_A010_CHECK [IF] (L420-L426)

> Template EKK0171A010 with error flag EA and item `key_svc_kei_ucwk_no` — service contract detail existence check.

| # | Type | Code |
|---|------|------|
| 1 | IF | `"EKK0171A010".equals(templateid) && JFUStrConst.RELATION_CHECK_ERR_EA.equals(errFlg) && "key_svc_kei_ucwk_no".equals(itemid)` [L421] // Service contract detail missing conditions |
| 2 | THROW | `throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002)` // System error [-> "0002"] |

**Block 10.3** — CATCH: Generic System Error (L430)

> Fallback system error for any unclassified exception.

| # | Type | Code |
|---|------|------|
| 1 | THROW | `throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002)` // System error [-> "0002"] |

**Block 11** — NAVIGATION_ROUTING (L433-L435)

> Sets the next screen to the confirmation completion screen FUW03902.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW03902)` // Set next screen ID [-> SCREEN_ID_FUW03902="FUW03902"] |
| 2 | EXEC | `commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW03902)` // Set next screen name [-> SCREEN_NAME_FUW03902="FUW03902"] |
| 3 | RETURN | `return true` // Method completion |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `mskm` | Field/Method | Submit (申し込み) — the confirm-screen "Apply" button processing method |
| `NOW_NINSHO_ID` | Field | Current Authentication ID — the customer's current ISP authentication ID stored in the service form bean [-> "現在の認証ID"] |
| `NOW_NINSHO_ID_PWD` | Field | Current Authentication ID Password [-> "現在の認証IDパスワード"] |
| `CHG_NINSHO_ID_PWD` | Field | Changed Authentication ID Password — the new password entered by the user [-> "変更認証IDパスワード"] |
| `RE_INPUT_CHG_NINSHO_ID_PWD` | Field | Re-entered Changed Authentication ID Password — the password re-entry for confirmation [-> "変更認証IDパスワード（再入力）"] |
| `prcGrpCd` | Field | Price Group Code — classifies the service type (e.g., "06" = eoADSL/Fres) |
| `CD00133_06` | Constant | Price group code value "06" — identifies eoADSL (Fres) service type |
| `tankanrenCheck` | Method | Single-linkage check — validates password consistency across current, new, and re-entered passwords |
| `USECASE_ID_FUSV0075` | Constant | Service ID for authentication ID/password change applications — value `"FUSV0075"` |
| `USECASE_ID_FUSV0259` | Constant | Service ID for ADSL authentication ID/password change — value `"FUSV0259"` |
| `FUSV0075` | Service | Authentication ID/Password Change (Application) — the main service flow for standard (non-ADSL) ISPs |
| `FUSV0259` | Service | ADSL Authentication ID Password Change (Application) — the ADSL-specific service flow |
| SOD | Acronym | Service Order Data — telecom service order fulfillment entity |
| CC | Acronym | Common Component — shared business logic component (e.g., `setFUSV007501CC`) |
| SC | Acronym | Service Component — service-specific business logic component (e.g., `setFUSV007501SC`) |
| BP | Acronym | Business Process (Dialect API) — the downstream service layer invoked via `invokeService` |
| T-Map | Concept | T-Map data mapping — the framework for mapping DataBean structures to/from service components |
| ISP | Acronym | Internet Service Provider — the authentication ID and password for accessing the internet service |
| SSO | Acronym | Shared Single Sign-On — shared authentication information across the session |
| Web Change Info | Data structure | Web modification information — contains data about web-based service changes being processed |
| Current Customer Info | Data structure | Current customer contract information — contains service contract and service detail data |
| Service Contract Info | Data structure | Service contract data — includes service number, price group code, status, and update timestamp |
| Service Contract Detail Info | Data structure | Service contract line-item data — includes ISP authentication ID, password, and service-specific fields |
| `RELATION_ERR` | Constant | Related check error status flag |
| `RELATION_CHECK_ERR_EA` | Constant | Error flag value "EA" — indicates a validation error |
| `FUNC_CD_1` | Constant | Function code "1" — standard function code for SC/CC operations |
| `FUNC_CD_3` | Constant | Function code "3" — list display/lookup function code |
| `SCREEN_ID_FUW03902` | Constant | Target screen ID for post-submission navigation — value `"FUW03902"` |
| `ERROR_CODE_0102` | Constant | Contract state error — thrown when authentication ID is missing |
| `ERROR_CODE_0002` | Constant | System error — thrown for unhandled system-level exceptions |
| `ERROR_CODE_0204` | Constant | Update not possible error — thrown when service contract detail cannot be updated |
| `EKF0400_TW` | Message | Error message key for password validation failure |
| `PAY_FLG` | Field | Pay flag — indicates whether initial fees apply |
| `MANSION_DIV` | Field | Mansion division flag — indicates if the service is for a mansion (apartment) building |
| eoADSL | Business term | eo ADSL — K-Opticom's ADSL internet service (Fres brand) |
| Fres | Business term | Fres — K-Opticom's fiber-optic broadband brand |
| FTTH | Business term | Fiber To The Home — fiber-optic broadband service |
| `chkNinshoId` | Field | Checked authentication ID — the current auth ID retrieved from the service form bean for validation |
