---

# Business Logic — FUW02401SFLogic.init() [190 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.FUW02401SF.FUW02401SFLogic` |
| Layer | Controller (Webview — extends `JCCWebBusinessLogic`) |
| Module | `FUW02401SF` (Package: `eo.web.webview.FUW02401SF`) |

## 1. Role

### FUW02401SFLogic.init()

This method performs the **initial display processing** for the "Homepage URL Name Acquisition Application" (Homepage URL Meishu Shuuryaku) screen, which is a web-based self-service form used by K-Opticom customers to apply for a custom homepage URL. On the customer's first visit to the screen (before any confirmation or submission), `init()` orchestrates the end-to-end initialization flow: it reads the customer's shared session data (SSO Web ID, customer contract, service contract, and optional service details), validates the customer's eligibility, matches the current optional service to the logged-in user, invokes the downstream service component pipeline to populate pricing, NE/wireless lists, and initial fee information, and then prepares all display-ready values for the screen.

The method implements a **dispatch and assemble pattern**: it reads layered data beans (common info → web change info → SSO info → general customer info → service contract info → service contract detail info → optional service contract info), routes through conditional branches to filter and match the relevant optional service records, delegates data enrichment to a mapper (`FUSV0024_FUSV0024OPDBMapper`) that configures SC parameters, and finally calls `invokeService()` to execute the service-level processing. After the service returns, it validates response data, calculates free remaining service counts, sets up pricing display areas, and configures navigation to the next screen (confirmation screen `FUW024020PJP`).

This method serves as the **entry point** for screen `FUW024010PJP` (Homepage URL Name Acquisition Application). It is not a shared utility — it is bound exclusively to this one screen and is invoked automatically by the web framework's VL (View Layer) command mapping when the user first accesses the page.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["init() Entry"])
    CHECK_OROSI["checkOrosi Equipment Restriction Check"]
    GET_COMMON["getCommonInfoBean Get Shared Form Bean"]
    GET_WEB_CHG["webChgInfoBean WEB Change Info"]
    GET_SSO["ssoInfoBean SSO Info"]
    GET_WEB_ID["ssoInfoWebid Get SSO Web ID"]
    CHECK_SSO_NULL{ssoInfoWebid Null?}
    THROW_SSO_ERR["throw ERROR_CODE_0002 System Error"]
    GET_GEN_CUST["genCustKeiInfoBean Current Customer Info"]
    GET_SVC_INFO["svcKeiInfoBean Service Contract Info"]
    GET_SVC_UCWK["svcKeiUcwkInfoBean Service Contract Details"]
    GET_OP_SVC["opSvcKeiInfoArray Optional Service Contract Array"]
    LOOP_START{"Loop Optional Services"}
    GET_TMP_WEBID["Get tmp Web ID"]
    GET_TMP_URLACCT["Get tmp URL Account"]
    GET_TMP_OPSVCCD["Get tmp OpSvcCd"]
    GET_TMP_STAT["Get tmp OpSvcStat"]
    CHECK_OPSVCCD{OpSvcCd == B002?}
    CHECK_STAT{Status 910/920?}
    CHECK_WEBID_MATCH{WebID Match?}
    MATCH_OPSVC["Set opSvcKeiInfoBean Matched Service"]
    INC_URL_COUNT["urlAccountCnt Increment"]
    GET_SVC_FORM["getServiceFormBean Service Form Bean"]
    SET_NOW_WEBID["set NOW_WEB_ID"]
    CREATE_PARAMMAP["create paramMap with USECASE_ID_FUSV0025"]
    CREATE_MAPPER["create FUSV0024 Mapper"]
    SET_BUS_PARAM["setFUSV002401SC Business Parameters"]
    SET_NE_LIST["setFUSV002402SC NE/Wireless List"]
    SET_OPSVC_COST["setFUSV002403SC Optional Service Cost"]
    SET_INITIAL_FEE["setFUSV002404SC Initial Fee List"]
    SET_COMM_CHARGE["setFUSV002401CC Comm Charge CC"]
    CREATE_OUTPUTMAP["create outputMap"]
    INVOKE_SERVICE["invokeService FUSV0025 Service"]
    GET_RESULTS["getFUSV002401/02/03SC Get Results"]
    GET_MAX_OP_SVC["get MAX_OP_SVC_CNT"]
    GET_HP_DOMAIN["get HP_URL_DOMAIN"]
    VALIDATE_URL{URL Valid?}
    THROW_URL_ERR["throw ERROR_CODE_0002"]
    VALIDATE_CNT{MaxOpSvc > urlAccountCnt?}
    THROW_CNT_ERR["throw ERROR_CODE_0103"]
    CALC_FREE["mryoZanNum = mryoOpSvcCnt - urlAccountCnt"]
    SET_SHOKI["setShokiSettei Initial Display Settings"]
    CHECK_FREE_FLAG{Free Available?}
    SET_FREE_MAP["setFreePrcInfoMap"]
    SET_PRICING["setPrcInfoArea"]
    SET_PRICING_DATE["setPrcDspNowDay"]
    SET_NEXT_SCREEN["set NEXT_SCREEN_NAME"]
    SET_NEXT_ID["set NEXT_SCREEN_ID"]
    RETURN_TRUE["return true Success"]

    START --> CHECK_OROSI
    CHECK_OROSI --> GET_COMMON
    GET_COMMON --> GET_WEB_CHG
    GET_WEB_CHG --> GET_SSO
    GET_SSO --> GET_WEB_ID
    CHECK_SSO_NULL -->|Yes| THROW_SSO_ERR
    CHECK_SSO_NULL -->|No| GET_GEN_CUST
    GET_GEN_CUST --> GET_SVC_INFO
    GET_SVC_INFO --> GET_SVC_UCWK
    GET_SVC_UCWK --> GET_OP_SVC
    GET_OP_SVC --> LOOP_START
    LOOP_START --> GET_TMP_WEBID
    GET_TMP_WEBID --> GET_TMP_URLACCT
    GET_TMP_URLACCT --> GET_TMP_OPSVCCD
    GET_TMP_OPSVCCD --> GET_TMP_STAT
    GET_TMP_STAT --> CHECK_OPSVCCD
    CHECK_OPSVCCD -->|No| LOOP_START
    CHECK_OPSVCCD -->|Yes| CHECK_STAT
    CHECK_STAT -->|Yes| LOOP_START
    CHECK_STAT -->|No| CHECK_WEBID_MATCH
    CHECK_WEBID_MATCH -->|Yes| MATCH_OPSVC
    CHECK_WEBID_MATCH -->|No| INC_URL_COUNT
    MATCH_OPSVC --> INC_URL_COUNT
    INC_URL_COUNT --> LOOP_START
    LOOP_START -->|Done| GET_SVC_FORM
    GET_SVC_FORM --> SET_NOW_WEBID
    SET_NOW_WEBID --> CREATE_PARAMMAP
    CREATE_PARAMMAP --> CREATE_MAPPER
    CREATE_MAPPER --> SET_BUS_PARAM
    SET_BUS_PARAM --> SET_NE_LIST
    SET_NE_LIST --> SET_OPSVC_COST
    SET_OPSVC_COST --> SET_INITIAL_FEE
    SET_INITIAL_FEE --> SET_COMM_CHARGE
    SET_COMM_CHARGE --> CREATE_OUTPUTMAP
    CREATE_OUTPUTMAP --> INVOKE_SERVICE
    INVOKE_SERVICE --> GET_RESULTS
    GET_RESULTS --> GET_MAX_OP_SVC
    GET_MAX_OP_SVC --> GET_HP_DOMAIN
    GET_HP_DOMAIN --> VALIDATE_URL
    VALIDATE_URL -->|No| THROW_URL_ERR
    VALIDATE_URL -->|Yes| VALIDATE_CNT
    VALIDATE_CNT -->|No| THROW_CNT_ERR
    VALIDATE_CNT -->|Yes| CALC_FREE
    THROW_CNT_ERR --> END(["Exit"])
    THROW_URL_ERR --> END
    THROW_SSO_ERR --> END
    CALC_FREE --> SET_SHOKI
    SET_SHOKI --> CHECK_FREE_FLAG
    CHECK_FREE_FLAG -->|Yes| SET_FREE_MAP
    CHECK_FREE_FLAG -->|No| SET_PRICING
    SET_FREE_MAP --> SET_PRICING
    SET_PRICING --> SET_PRICING_DATE
    SET_PRICING_DATE --> SET_NEXT_SCREEN
    SET_NEXT_SCREEN --> SET_NEXT_ID
    SET_NEXT_ID --> RETURN_TRUE
    RETURN_TRUE --> END
```

**Block Descriptions:**

1. **Equipment Restriction Check** — Validates that the customer's equipment is not restricted (Orosi check). If restricted, processing stops immediately.

2. **Shared Form Bean Access Chain** — Navigates a nested bean hierarchy: Shared Form Bean → WEB Change Info → SSO Info → extracts SSO Web ID. If the SSO Web ID is missing (null), throws `ERROR_CODE_0002` (System Error).

3. **Customer and Service Data Retrieval** — Continues down the bean chain: WEB Change Info → General Customer Info → Service Contract Info → Service Contract Detail Info → Optional Service Contract Info. Extracts an array of optional service contract records.

4. **Optional Service Matching Loop** — Iterates through all optional service records. Filters by:
   - **OpSvcCd** must equal `CD00136_B002` (My Homepage service code). Non-matching records are skipped.
   - **OpSvcStat** must NOT be `CD00037_910` (Terminated) or `CD00037_920` (Cancelled). Terminated/cancelled contracts are skipped.
   - **WebID match**: The optional service's Web ID must match the SSO Web ID. On match, the optional service bean is stored as the matched record.
   - **URL Account counting**: Non-null URL accounts are counted to track consumed homepage URL allocations.

5. **WebID Validation** — If no matching optional service was found (webid is null), throws `ERROR_CODE_0102` (Contract Status Error).

6. **Service Form Bean & Mapper Setup** — Creates a service form bean, sets the current WebID, builds a paramMap with `USECASE_ID_FUSV0025`, creates the `FUSV0024_FUSV0024OPDBMapper`, and configures all SC parameter mappings.

7. **Service Invocation** — Calls `invokeService()` with the prepared paramMap and dataMap to execute the downstream business logic (FUSV0025 Use Case). The response is captured in outputMap.

8. **Result Validation** — Retrieves max optional service count and HP URL domain from the response. Validates that both are non-null/non-zero. If max optional service count is exceeded by URL account count, throws `ERROR_CODE_0103` (Contract Error).

9. **Free Remaining Calculation & Initial Display Setup** — Calculates `mryoZanNum` (free remaining service count) and calls `setShokiSettei()` to populate pricing display data, mansion division flags, and contract agreement checkboxes.

10. **Free Pricing Map & Display Configuration** — If free services are still available (urlAccountCnt < mryoOpSvcCnt), sets the free pricing info map. Configures the pricing info area, display date, and next screen navigation.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| - | (none — no parameters) | - | - |

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

| No | Field/External State | Source Class | Business Description |
|----|---------------------|-------------|---------------------|
| 1 | `super.getCommonInfoBean()` | `JCCWebBusinessLogic` | Retrieves the shared form bean containing session-wide customer data (SSO info, contract info, service data) from the web framework's common context. |
| 2 | `super.getServiceFormBean()` | `JCCWebBusinessLogic` | Retrieves the screen-specific service form bean used to build the response data model. |
| 3 | `invokeService(paramMap, dataMap, outputMap)` | `JCCWebBusinessLogic` (inherited) | Invokes the downstream service-level business logic (SC/CBS) identified by the USECASE_ID in paramMap. |
| 4 | `JFUWebCommon.checkOrosi(this)` | `JFUWebCommon` | External equipment restriction validation — prevents customers with restricted equipment from accessing the screen. |
| 5 | `JFUWebCommon.isNull(...)` | `JFUWebCommon` | Utility for null-checking string values across the codebase. |
| 6 | `USECASE_ID_FUSV0025` | Constant field | The use case identifier passed to the service layer to trigger the correct service processing pipeline. |
| 7 | `JFUWebCommon.getScreenId(this)` | `JFUWebCommon` | Utility that extracts the screen ID string from the current business logic context. |

## 4. CRUD Operations / Called Services

### Pre-computed evidence from code analysis:

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `JFUWebCommon.checkOrosi` | JFUWebCommon | - | Equipment restriction check — validates customer equipment status against restriction lists |
| - | `JFUWebCommon.isNull` | JFUWebCommon | - | Null-check utility method |
| R | `X31SDataBeanAccess.getDataBeanArray` | CommonInfoCF | - | Retrieves an array of data beans from the shared form bean (e.g., SSO info, service contract info) |
| R | `X31SDataBeanAccess.getDataBean` | CommonInfoCF | - | Retrieves a specific data bean by index from an array |
| R | `X31SDataBeanAccess.sendMessageString` | X31S | - | Getter on data beans — extracts string values (e.g., Web ID, URL account, service codes, statuses) |
| R | `X31SDataBeanAccessArray.getCount` | X31S | - | Returns the count of data beans in an array |
| R | `X31SDataBeanAccessArray.getDataBean` | X31S | - | Retrieves a data bean at a specific index from an array |
| - | `X31SDataBeanAccess.sendMessageString` (SET) | X31S | - | Setter on data beans — stores values (e.g., NOW_WEB_ID) |
| R | `FUSV0024_FUSV0024OPDBMapper.setFUSV002401SC` | FUSV002401SC | - | Configures business parameter settings — SC for mapping business parameters to service call |
| R | `FUSV0024_FUSV0024OPDBMapper.setFUSV002402SC` | FUSV002402SC | - | Configures NE/Wireless list settings — SC for mapping NE-related data |
| R | `FUSV0024_FUSV0024OPDBMapper.setFUSV002403SC` | FUSV002403SC | - | Configures optional service cost settings — SC for mapping optional service pricing |
| R | `FUSV0024_FUSV0024OPDBMapper.setFUSV002404SC` | FUSV002404SC | - | Configures initial fee list settings — SC for mapping initial/one-time fees |
| R | `FUSV0024_FUSV0024OPDBMapper.setFUSV002401CC` | FUSV002401CC | - | Configures communication charge CC settings — CBS for communication fee data |
| - | `FUSV0024_FUSV0024OPDBMapper.setFUSV002403SC` (with urlAccountCnt) | FUSV002403SC | - | Configures optional service cost with URL account count for pricing |
| C | `invokeService` | FUSV0025 | FUSV0025 SC/CBS pipeline | Invokes the downstream service pipeline — triggers multiple SC/CBS calls for: business parameters, NE/wireless list, optional service cost, initial fee, communication charge, and response data mapping |
| R | `FUSV0024_FUSV0024OPDBMapper.getFUSV002401SC` | FUSV002401SC | - | Retrieves business parameters from service response |
| R | `FUSV0024_FUSV0024OPDBMapper.getFUSV002402SC` | FUSV002402SC | - | Retrieves NE/wireless list from service response |
| R | `FUSV0024_FUSV0024OPDBMapper.getFUSV002403SC` | FUSV002403SC | - | Retrieves optional service cost from service response |
| - | `JFUWebCommon.setFreePrcInfoMap` | JFUWebCommon | - | Sets the free pricing info map for display on the screen |
| - | `JFUWebCommon.setPrcInfoArea` | JFUWebCommon | - | Configures the pricing information display area with screen-specific settings |
| - | `JFUWebCommon.setPrcDspNowDay` | JFUWebCommon | - | Sets the current date for pricing display (e.g., "as of today") |
| - | `JFUWebCommon.getScreenId` | JFUWebCommon | - | Extracts the screen ID string from the current context |

## 5. Dependency Trace

The caller is identified from the web framework's command mapping XML configuration (`WEBVLCOMMANDMAP_FUW024010PJP.xml`), which maps the VL command ID `FUW02401SF` with EVENT `INIT` to the `init()` method of the `FUW02401SF` business logic class.

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Screen: FUW024010PJP (Homepage URL Name Acquisition Application) | `VLCommandMapping` (WEBVLCOMMANDMAP) → `FUW02401SF` BL → `FUW02401SFLogic.init()` | `invokeService [C/R] FUSV0025 SC/CBS pipeline (Business Parameters, NE/Wireless List, Optional Service Cost, Initial Fee, Communication Charge)` |
| 2 | Screen: FUW024020PJP (Confirmation Screen) | Shares same BL class `FUW02401SF` — navigation target from init | Same terminal as #1 (data loaded during init persists through cfm/mskm) |
| 3 | Screen: FUW024030PJP (Completion Screen) | Shares same BL class `FUW02401SF` — final destination in the flow | Same terminal as #1 |

The `init()` method is exclusively invoked by the web framework's page-level command dispatcher. The three screens (FUW024010PJP = initial screen, FUW024020PJP = confirmation, FUW024030PJP = completion) all share the same BL class and bean, with the `init()` method firing only on the first access (FUW024010PJP).

## 6. Per-Branch Detail Blocks

**Block 1** — EXEC (L122) `checkOrosi` Equipment Restriction Check

> Validates that the customer's equipment is not restricted. If restricted, the Orosi check throws an exception.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JFUWebCommon.checkOrosi(this)` // Equipment restriction check [-> JFUWebCommon] |

**Block 2** — EXEC (L125) Shared Form Bean Retrieval Chain

> Navigates the nested bean hierarchy to extract SSO Web ID and optional service data.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean()` // Get shared form bean |
| 2 | EXEC | `X31SDataBeanAccess webChgInfoBean = commoninfoBean.getDataBeanArray(CommonInfoCFConst.WEB_CHG_INFO).getDataBean(0)` // WEB Change Info |
| 3 | EXEC | `X31SDataBeanAccess ssoInfoBean = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.SSO_INFO).getDataBean(0)` // SSO Info |
| 4 | EXEC | `String ssoInfoWebid = ssoInfoBean.sendMessageString(CommonInfoCFConst.WEB_ID_21, X31CWebConst.DATABEAN_GET_VALUE)` // SSO Web ID |
| 5 | EXEC | `X31SDataBeanAccess genCustKeiInfoBean = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.GEN_CUST_KEI_INFO).getDataBean(0)` // Current Customer Info |
| 6 | EXEC | `X31SDataBeanAccess svcKeiInfoBean = genCustKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SVC_KEI_INFO).getDataBean(0)` // Service Contract Info |
| 7 | EXEC | `X31SDataBeanAccess svcKeiUcwkInfoBean = svcKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SVC_KEI_UCWK_INFO).getDataBean(0)` // Service Contract Detail Info |
| 8 | SET | `X31SDataBeanAccess opSvcKeiInfoBean = null` // Optional Service Contract Info (matched) |
| 9 | SET | `String webid = null` // SSO Web ID for current customer |
| 10 | SET | `int urlAccountCnt = 0` // URL Account count |

**Block 3** — IF (L153) `JFUWebCommon.isNull(ssoInfoWebid)` SSO Web ID Validation

> If the SSO Web ID is null, the customer has not been properly authenticated via SSO. Throws system error.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `X31SWebLog.DEBUG_LOG.debug("[SSO Web ID Not Set Error]")` // Debug logging |
| 2 | RETURN | `throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002)` // "0002" (System Error) |

**Block 4** — FOR (L158) Optional Service Contract Matching Loop

> Iterates through all optional service records to find the one matching the My Homepage service that belongs to the current customer and has an active (non-terminated/non-cancelled) status.

| # | Type | Code |
|---|------|------|
| 1 | SET | `X31SDataBeanAccessArray opSvcKeiInfoArray = svcKeiUcwkInfoBean.getDataBeanArray(CommonInfoCFConst.OP_SVC_KEI_INFO)` // Optional Service Contract Array |
| 2 | SET | `int n = 0` // Loop index |
| 3 | EXEC | `X31SDataBeanAccess tmpOpSvcKeiInfoBean = opSvcKeiInfoArray.getDataBean(n)` // Get record at index n |
| 4 | EXEC | `String opSvcKeiInfoWebid = tmpOpSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.WEB_ID_28, X31CWebConst.DATABEAN_GET_VALUE)` // Get Web ID |
| 5 | EXEC | `String opSvcKeiInfoUrlAccount = tmpOpSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.URL_ACCOUNT_28, X31CWebConst.DATABEAN_GET_VALUE)` // Get URL Account |
| 6 | EXEC | `String tmpopSvcKeiInfoOpSvcCd = tmpOpSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.OP_SVC_CD_28, X31CWebConst.DATABEAN_GET_VALUE)` // Optional Service Code |
| 7 | EXEC | `String tmpopSvcKeiInfoOpSvcStat = tmpOpSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.OP_SVC_KEI_STAT_28, X31CWebConst.DATABEAN_GET_VALUE)` // Optional Service Status |

**Block 4.1** — IF (L168) `!JFUStrConst.CD00136_B002.equals(tmpopSvcKeiInfoOpSvcCd)` Non-My-Homepage Service

> [CD00136_B002 = "B002"] My Homepage service code. Skips records that are not My Homepage services.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `continue` // Non-My-Homepage → skip to next record |

**Block 4.2** — IF (L174) `JFUStrConst.CD00037_910.equals(tmpopSvcKeiInfoOpSvcStat) || JFUStrConst.CD00037_920.equals(tmpopSvcKeiInfoOpSvcStat)` Terminated/Cancelled Status

> [CD00037_910 = "910" (Terminated), CD00037_920 = "920" (Cancelled)] Skips records with terminated or cancelled status.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `continue` // Terminated or Cancelled → skip to next record |

**Block 4.3** — IF (L180) `ssoInfoWebid.equals(opSvcKeiInfoWebid)` WebID Match

> Matches the optional service's Web ID against the SSO Web ID. On match, stores the optional service bean as the matched record.

| # | Type | Code |
|---|------|------|
| 1 | SET | `opSvcKeiInfoBean = tmpOpSvcKeiInfoBean` // Store matched optional service |
| 2 | SET | `webid = opSvcKeiWebid` // Store matched Web ID |

**Block 4.4** — IF (L184) `!JFUWebCommon.isNull(opSvcKeiInfoUrlAccount)` Non-Null URL Account

> Counts non-null URL account values to track how many homepage URLs the customer has already allocated.

| # | Type | Code |
|---|------|------|
| 1 | SET | `urlAccountCnt++` // Increment URL account counter |

**Block 5** — IF (L190) `JFUWebCommon.isNull(webid)` WebID Null Check

> If no matching optional service was found after the loop, the customer has no valid My Homepage contract. Throws contract status error.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102)` // "0102" (Contract Status Error) |

**Block 6** — EXEC (L196) Service Form Bean & Mapper Setup

> Creates the service form bean, sets the current WebID, builds the paramMap with the use case ID, and creates the mapper to configure all SC/CBS parameter mappings.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `X31SDataBeanAccess bean = super.getServiceFormBean()` // Get service form bean |
| 2 | EXEC | `bean.sendMessageString(FUW02401SFConst.NOW_WEB_ID, X31CWebConst.DATABEAN_SET_VALUE, webid)` // Set current Web ID |
| 3 | SET | `HashMap<String, String> paramMap = new HashMap<String, String>(16)` // Param map |
| 4 | SET | `paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0025)` // Use case ID |
| 5 | SET | `FUSV0024_FUSV0024OPDBMapper mapper = new FUSV0024_FUSV0024OPDBMapper()` // Create mapper |
| 6 | SET | `HashMap<String, Object> dataMap = new HashMap<String, Object>()` // Data map |
| 7 | SET | `X31SDataBeanAccess[] paramBean = { bean, svcKeiInfoBean, opSvcKeiInfoBean }` // Param beans |
| 8 | SET | `dataMap = mapper.setFUSV002401SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1)` // Business parameters [FUNC_CD_1] |
| 9 | SET | `dataMap = mapper.setFUSV002402SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1)` // NE/Wireless list [FUNC_CD_1] |
| 10 | SET | `dataMap = mapper.setFUSV002403SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_2)` // Optional service cost [FUNC_CD_2] |
| 11 | SET | `dataMap = mapper.setFUSV002404SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1)` // Initial fee list [FUNC_CD_1] |
| 12 | SET | `dataMap = mapper.setFUSV002401CC(paramBean, dataMap, null)` // Communication charge CC [null] |
| 13 | SET | `HashMap<String, Object> outputMap = new HashMap<String, Object>()` // Output map |

**Block 7** — TRY-CATCH (L221) Service Invocation and Result Validation

> Invokes the downstream service, validates the response, and checks for errors.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `invokeService(paramMap, dataMap, outputMap)` // Invoke FUSV0025 SC/CBS pipeline |
| 2 | EXEC | `bean = mapper.getFUSV002401SC(bean, outputMap)` // Get business parameters |
| 3 | EXEC | `bean = mapper.getFUSV002402SC(bean, outputMap)` // Get NE/wireless list |
| 4 | EXEC | `bean = mapper.getFUSV002403SC(bean, outputMap, urlAccountCnt)` // Get optional service cost |
| 5 | EXEC | `String maxOpSvcCnt = bean.sendMessageString(FUW02401SFConst.MAX_OP_SVC_CNT, X31CWebConst.DATABEAN_GET_VALUE)` // Get max optional service count |
| 6 | EXEC | `String hpUrlDomain = bean.sendMessageString(FUW02401SFConst.HP_URL_DOMAIN, X31CWebConst.DATABEAN_GET_VALUE)` // Get HP URL domain |

**Block 7.1** — IF (L258) `MAXOPSVCCNT_ZERO.equals(maxOpSvcCnt) || JFUWebCommon.isNull(maxOpSvcCnt) || JFUWebCommon.isNull(hpUrlDomain)` URL Validation

> [MAXOPSVCCNT_ZERO = "0"] Validates that max optional service count and HP URL domain are present and non-zero. If missing, throws system error.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002)` // "0002" (System Error) |

**Block 7.2** — IF-ELSE (L262) `maxOpSvcCntInt <= urlAccountCnt` Count Exceeded Check

> If the number of allocated URL accounts equals or exceeds the maximum, the customer cannot register more. Throws contract error.

| # | Type | Code |
|---|------|------|
| 1 | SET | `int maxOpSvcCntInt = Integer.parseInt(maxOpSvcCnt)` // Parse max count |
| 2 | IF | `maxOpSvcCntInt <= urlAccountCnt` → throw ERROR_CODE_0103 [Contract Error] |

**Block 7.3** — CATCH (L275) `JCCWebServiceException se` Service Exception Handler

> Catches service-level exceptions and re-throws as system error.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002)` // "0002" (System Error) |

**Block 8** — EXEC (L282) Free Remaining Calculation

> Calculates the number of remaining free services (total free - allocated URL accounts).

| # | Type | Code |
|---|------|------|
| 1 | SET | `int mryoZanNum = 0` // Free remaining count |
| 2 | EXEC | `String mryoOpSvcCnt = bean.sendMessageString(FUW02401SFConst.MRYO_OP_SVC_CNT, X31CWebConst.DATABEAN_GET_VALUE)` // Get total free count |
| 3 | SET | `mryoZanNum = Integer.parseInt(mryoOpSvcCnt) - urlAccountCnt` // Calculate free remaining |
| 4 | CALL | `setShokiSettei(bean, svcKeiInfoBean, outputMap, mryoZanNum)` // Initial display setup |

**Block 9** — IF (L289) `urlAccountCnt < Integer.parseInt(mryoOpSvcCnt)` Free Available Check

> If free services remain, set the free pricing info map for display.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JFUWebCommon.setFreePrcInfoMap(outputMap, SC_TITLE_FUSV002404)` // Set free pricing map |

**Block 10** — EXEC (L295) Pricing Info Area Setup

> Configures the pricing information display area with the screen-specific title and ID.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JFUWebCommon.setPrcInfoArea(bean, outputMap, SC_TITLE_FUSV002404, CC_TITLE_FUSV002401, JFUScreenConst.SCREEN_ID_FUW02401)` // Pricing info area |

**Block 11** — EXEC (L298) Pricing Display Date Setup

> Sets the current date for pricing display.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JFUWebCommon.setPrcDspNowDay(this)` // Set current display date |

**Block 12** — EXEC (L301) Next Screen Setup — Name

> Configures the next screen name as the confirmation screen `FUW02402`.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW02401)` // Set next screen name |

**Block 13** — EXEC (L304) Next Screen Setup — ID

> Configures the next screen ID.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon.getScreenId(this))` // Set next screen ID |

**Block 14** — RETURN (L307) Success

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return true` // Processing completed normally |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `homepage_url_name` | Business term | Homepage URL Name — custom web address registered by a K-Opticom customer for their personal/business homepage |
| `svc_kei_ucwk_no` | Field | Service detail work number — internal tracking ID for service contract line items |
| `web_id_21` | Field | SSO Web ID (21-character format) — unique identifier for the customer's SSO session |
| `web_id_28` | Field | Optional Service Web ID (28-character format) — identifier for optional service contract records |
| `url_account_28` | Field | URL Account (28-character format) — indicates whether a homepage URL has been allocated to an optional service |
| `op_svc_cd_28` | Field | Optional Service Code — classifies the type of optional service (e.g., B002 = My Homepage) |
| `op_svc_kei_stat_28` | Field | Optional Service Contract Status — indicates the lifecycle state of an optional service contract (e.g., 910 = Terminated, 920 = Cancelled) |
| `max_op_svc_cnt` | Field | Maximum Optional Service Count — the maximum number of optional services the customer can hold |
| `mryo_op_svc_cnt` | Field | Free Optional Service Count — the number of free services remaining for the customer |
| `hp_url_domain` | Field | Homepage URL Domain — the domain name for the customer's homepage |
| `now_web_id` | Field | Current Web ID — the Web ID of the currently active service being processed |
| `keiyaku_yakkan_doi` | Field | Contract Agreement Checkbox — whether the customer has agreed to the contract terms |
| `pay_flg` | Field | Payment Flag — indicates whether the current service tier requires payment |
| `manshin_div` (MANSION_DIV) | Field | Mansion Division Flag — indicates whether pricing is categorized as mansion-tier (for specific pricing tiers) |
| `sod` | Acronym | Service Order Data — telecom order fulfillment entity used in K-Opticom systems |
| `joken` | Acronym | Authorization — relates to authentication/authorization in order processing |
| `info` | Acronym | Information — prefix for customer/service information entities |
| `sso` | Acronym | Single Sign-On — unified authentication mechanism for customer login |
| `cc` | Acronym | Communication Charge — common business logic component for fee/charge processing |
| `sc` | Acronym | Service Component — service-layer component that handles business operations |
| `cbs` | Acronym | Core Business System — backend system handling core telecom business operations |
| `ne` | Acronym | Network Element — telecommunications network infrastructure components |
| `fuw` | Business term | Fudousan Web — Fujitsu web framework naming convention for customer-facing web screens (FU = Fujitsu User, W = Web) |
| `fsv` | Business term | Service Form — internal service use case identifier (FUSV = Fujitsu Service V) |
| `orosy` | Business term | Orosi — equipment restriction check, prevents customers with restricted equipment from certain services |
| `cd00136_b002` | Constant | My Homepage service code — identifies the optional service as the customer's homepage service |
| `cd00037_910` | Constant | Service Status Code 910 — "Terminated" |
| `cd00037_920` | Constant | Service Status Code 920 — "Cancelled" |
| `cd00133_04` | Constant | Pricing Group Code 04 — pricing group for mansion-tier customers |
| `cd01216_003` | Constant | Payment Method Code 003 — contracted payment method type |
| `error_code_0002` | Constant | System Error — generic system-level error for unexpected failures |
| `error_code_0102` | Constant | Contract Status Error — customer has no valid My Homepage contract |
| `error_code_0103` | Constant | Contract Error — maximum optional service count exceeded |
| `func_cd_1` | Constant | Function Code 1 — standard processing mode for SC/CBS calls |
| `func_cd_2` | Constant | Function Code 2 — expanded/detail processing mode for SC/CBS calls |
| `kihon_prc` | Constant | Base Price — recurring subscription fee |
| `shoki_prc` | Constant | Initial Fee — one-time setup/registration fee |
| `yuryou_judge_zero` | Constant | Free Judgment Zero — threshold value for determining free vs. paid services |
| `pplan_kotei_amnt` | Field | Planned Fixed Amount — the fixed contractually-planned fee amount |
| `tmp_pay_prc_amnt` | Field | Temporary Payment Price Amount — the one-time payment price amount for initial fees |
| `usecase_id_fusv0025` | Constant | FUSV0025 Use Case ID — the use case identifier for the homepage URL acquisition service pipeline |

---
