# Business Logic — FUW02001SFLogic.init() [135 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.FUW02001SF.FUW02001SFLogic` |
| Layer | Web View (Controller / Business Logic — extends `JCCWebBusinessLogic`) |
| Module | `FUW02001SF` (Package: `eo.web.webview.FUW02001SF`) |

## 1. Role

### FUW02001SFLogic.init()

This method performs the **initial processing** for the **Mail Alias Setting Application** screen (`FUW02001`) — a customer-facing web form that allows e-Net (e-光 / e-Hikari) fiber broadband subscribers to configure their custom email alias addresses. The method serves as the primary entry point and screen setup routine, gathering all the data required to render a fully functional pricing and subscription-confirmation page.

Specifically, it retrieves the customer's contract information (main service, optional service, and sub-optional service beans) from the shared common-info bean, runs a pre-flight device-uninstallation check (`checkOrosi`), and validates the submitted service data. It then invokes a chain of **four Service Component (SC) calls** — fetched via `FUSV0055_FUSV0055OPDBMapper` — to populate: business parameter management (contract change disable dates), an NG (prohibited) word list, the price plan fixed unit price / option charge details, and the price course / sub-option service agreement. An **Initial Fee List lookup CC** (Common Component) call is also executed.

After the remote service invocation (`invokeService`), the method extracts results via the mapper's `getFUSV0055xxSC` methods. It then applies **post-check logic**: verifying that the customer's existing alias change date plus the contract change restriction period does not fall within a future window (throwing a "usage limit" error if it does). The method computes the add/change distinction (new registration `"0"` vs. change `"1"`), calculates the billing flag, sets the current email address and sub-domain, determines mansion/division status, configures the pricing area mapping, displays the current date on the billing table, and finally sets the next-screen navigation ID (`FUW02001`) in the common-info bean.

The method always returns `true` — indicating successful screen setup. It is the shared business logic class for the Mail Alias Setting Application (新規表示 = new display), as stated in the class header: 「メールエイリアス設定申請のビジネスロジッククラスです。」 (This is the business logic class for mail alias setting application.)

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["init()"])
    CHECK_OROSI["checkOrosi(this)"]
    GET_COMMON_INFO["getCommonInfoBean()"]
    GET_COMMON_INFO_MAP["getCommoninfoBeanInfo(commoninfoBean)"]
    GET_SVC_BEANS["Extract svcKeiInfoBean, opSvcKeiInfoBean, sbopSvcKeiInfoBean"]
    CHECK_SVC_DATA["checkSvcData(resultMap)"]
    GET_SERVICE_FORM["getServiceFormBean()"]
    SET_PARAM_BEAN["Set paramBean with svcKeiInfoBean"]
    SET_USECASE["Set paramMap with USECASE_ID_FUSV0055"]
    CREATE_MAPPER["Create FUSV0055_FUSV0055OPDBMapper"]
    SC_01["setFUSV005501SC - Business parameter management / contract change disable date"]
    SC_02["setFUSV005502SC - NG word list lookup"]
    SC_03["setFUSV005503SC - Price plan fixed unit price (option charge) list"]
    SC_04["setFUSV005504SC - Price course / sub-option service agreement"]
    CC_01["setFUSV005501CC - Initial fee list lookup"]
    CREATE_OUTPUT_MAP["Create outputMap"]
    INVOKE_SERVICE["invokeService(paramMap, dataMap, outputMap)"]
    GET_RESULT_01["getFUSV005501SC - Business parameter management result"]
    GET_RESULT_02["getFUSV005502SC - NG word list result"]
    GET_RESULT_04["getFUSV005504SC - Price course result"]
    CHECK_ALIAS_CHGE["sbopSvcKeiInfoBean != null?"]
    GET_ALIAS_DATE["Get aliasChgeYmd from sbopSvcKeiInfoBean"]
    GET_KAI_CHG_PERIOD["Get keiChgStpPrd from bean"]
    FUTURE_CHECK["isFutureDate(aliasChgeYmd + keiChgStpPrd, getOpeDate())?"]
    THROW_ERROR_0101["Throw JCCBusinessException ERROR_CODE_0101 (Usage limit error)"]
    SET_NOW_MLAD["Set NOW_MLAD and SUB_DOMAIN from mlAd"]
    SET_ADD_CHG_DIV["Set add_chg_div = ADD_CHG_DIV_ADD or ADD_CHG_DIV_CHG"]
    CALC_PAY_FLAG["setPayFlg(bean, outputMap)"]
    CHECK_PAY_FLAG["payFlag == false OR add_chg_div == CHG?"]
    SET_FREE_PRICING["JFUWebCommon.setFreePrcInfoMap(outputMap)"]
    MAP_PRICING["setPrcInfoArea(bean, outputMap)"]
    SET_FIELDS["Set ADD_CHG_DIV, MANSION_DIV, NOW_MAILALIAS in bean"]
    SET_NOW_DAY["setPrcDspNowDay(this)"]
    SET_NEXT_SCREEN["Set NEXT_SCREEN_ID and NEXT_SCREEN_NAME in commoninfoBean"]
    RETURN_TRUE["Return true"]

    START --> CHECK_OROSI
    CHECK_OROSI --> GET_COMMON_INFO
    GET_COMMON_INFO --> GET_COMMON_INFO_MAP
    GET_COMMON_INFO_MAP --> GET_SVC_BEANS
    GET_SVC_BEANS --> CHECK_SVC_DATA
    CHECK_SVC_DATA --> GET_SERVICE_FORM
    GET_SERVICE_FORM --> SET_PARAM_BEAN
    SET_PARAM_BEAN --> SET_USECASE
    SET_USECASE --> CREATE_MAPPER
    CREATE_MAPPER --> SC_01
    SC_01 --> SC_02
    SC_02 --> SC_03
    SC_03 --> SC_04
    SC_04 --> CC_01
    CC_01 --> CREATE_OUTPUT_MAP
    CREATE_OUTPUT_MAP --> INVOKE_SERVICE
    INVOKE_SERVICE --> GET_RESULT_01
    GET_RESULT_01 --> GET_RESULT_02
    GET_RESULT_02 --> GET_RESULT_04
    GET_RESULT_04 --> CHECK_ALIAS_CHGE
    CHECK_ALIAS_CHGE -->|true| GET_ALIAS_DATE
    GET_ALIAS_DATE --> GET_KAI_CHG_PERIOD
    GET_KAI_CHG_PERIOD --> FUTURE_CHECK
    FUTURE_CHECK -->|true| THROW_ERROR_0101
    FUTURE_CHECK -->|false| SET_NOW_MLAD
    THROW_ERROR_0101 --> END_ERROR(["Error Exit"])
    SET_NOW_MLAD --> SET_ADD_CHG_DIV
    SET_ADD_CHG_DIV --> CALC_PAY_FLAG
    CALC_PAY_FLAG --> CHECK_PAY_FLAG
    CHECK_PAY_FLAG -->|true| SET_FREE_PRICING
    CHECK_PAY_FLAG -->|false| MAP_PRICING
    SET_FREE_PRICING --> MAP_PRICING
    MAP_PRICING --> SET_FIELDS
    SET_FIELDS --> SET_NOW_DAY
    SET_NOW_DAY --> SET_NEXT_SCREEN
    SET_NEXT_SCREEN --> RETURN_TRUE
    RETURN_TRUE --> END_RETURN(["End"])
```

**Branch labels in flowchart:**
- `sbopSvcKeiInfoBean != null?` → true means sub-optional service exists (change scenario); false means new registration
- `ADD_CHG_DIV_CHG = "1" (変更 = Change)` — the add/change distinction constant
- `payFlag == false` means the service is free, so pricing display is suppressed
- `ERROR_CODE_0101` = 「利用制限エラー」(Usage limit error) — triggered when alias change window hasn't expired

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| - | (none) | - | This is a no-argument method. All input data is obtained from the parent class's shared beans (common-info bean and service form bean), which were populated during the request processing lifecycle by the web framework. |

**Instance fields / external state accessed:**

| Field | Source | Business Description |
|-------|--------|---------------------|
| `this` (FUW02001SFLogic instance) | Parent: `JCCWebBusinessLogic` | Holds request context, screen ID, and the `JCCBatCommon` / `JCCWebCommon` utility references used throughout processing |
| `super.getCommonInfoBean()` | Parent class method | Shared form bean containing customer contract data: `svcKeiInfo` (main service), `opSvcKeiInfo` (optional service), `sbopSvcKeiInfo` (sub-optional / ISP service) |
| `super.getServiceFormBean()` | Parent class method | Service form bean holding the output data for this screen (pricing, email alias, add/change flag) |

## 4. CRUD Operations / Called Services

### Pre-computed evidence from code analysis:

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| C | `JFUWebCommon.checkOrosi` | JFUWebCommon | - | Checks device-uninstallation status — verifies if customer's e-光 installation equipment is still registered (pre-flight screen check) |
| R | `getCommoninfoBeanInfo` | (Internal) | CommonInfoBean | Retrieves customer contract info map from shared common-info form bean |
| C | `FUSV0055_FUSV0055OPDBMapper.setFUSV005501SC` | FUSV005501SC | - | Business parameter management — fetches contract change disable date settings |
| C | `FUSV0055_FUSV0055OPDBMapper.setFUSV005502SC` | FUSV005502SC | - | NG word list lookup — retrieves prohibited keywords for mail alias validation |
| C | `FUSV0055_FUSV0055OPDBMapper.setFUSV005503SC` | FUSV005503SC | - | Price plan fixed unit price (option charge) list — retrieves pricing details for the option charge |
| C | `FUSV0055_FUSV0055OPDBMapper.setFUSV005504SC` | FUSV005504SC | - | Price course / sub-option service agreement — retrieves sub-option service pricing info |
| C | `FUSV0055_FUSV0055OPDBMapper.setFUSV005501CC` | FUSV005501CC | - | Initial fee list lookup — calculates and retrieves one-time setup/initial fees |
| - | `invokeService` | (Framework) | - | Invokes the remote web service with the accumulated parameter and data maps |
| R | `FUSV0055_FUSV0055OPDBMapper.getFUSV005501SC` | FUSV005501SC | - | Extracts business parameter management results into service form bean |
| R | `FUSV0055_FUSV0055OPDBMapper.getFUSV005502SC` | FUSV005502SC | - | Extracts NG word list results into service form bean |
| R | `FUSV0055_FUSV0055OPDBMapper.getFUSV005504SC` | FUSV005504SC | - | Extracts price course results into service form bean |
| - | `JFUWebCommon.isNull` | JFUWebCommon | - | Null-check utility for alias change date string |
| - | `JFUWebCommon.isFutureDate` | JFUWebCommon | - | Future-date comparison utility for alias change window validation |
| - | `JFUWebCommon.addDay` | JFUWebCommon | - | Date arithmetic — adds days to a date string |
| - | `JFUWebCommon.getOpeDate` | JFUWebCommon | - | Gets the current operation date |
| - | `JFUWebCommon.setFreePrcInfoMap` | JFUWebCommon | - | Sets free pricing info map when pricing display should be hidden |
| - | `JFUWebCommon.setPrcInfoArea` | JFUWebCommon | - | Maps pricing area information to the service form bean |
| - | `JFUWebCommon.setPrcDspNowDay` | JFUWebCommon | - | Sets current date display on the pricing table |
| - | `JFUWebCommon.getScreenId` | JFUWebCommon | - | Extracts the screen ID from the current context |
| R | `setPayFlg` | FUW02001SFLogic | - | Calculates the billing flag (true = chargeable, false = free) from output data |
| R | `getMansionDiv` | FUW02001SFLogic | - | Determines whether the customer is a mansion (apartment complex) resident |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Screen:WEBGAMEN_FUW020010PJP | `WEBGAMEN_FUW020010PJP` → BL id=`FUW02001SF` → `FUW02001SFLogic.init` | `setFUSV005501SC` / `setFUSV005502SC` / `setFUSV005503SC` / `setFUSV005504SC` / `setFUSV005501CC` / `invokeService` |
| 2 | Screen:WEBGAMEN_FUW020020PJP | `WEBGAMEN_FUW020020PJP` → BL id=`FUW02001SF` → `FUW02001SFLogic.init` | `setFUSV005501SC` / `setFUSV005502SC` / `setFUSV005503SC` / `setFUSV005504SC` / `setFUSV005501CC` / `invokeService` |
| 3 | Screen:WEBGAMEN_FUW020030PJP | `WEBGAMEN_FUW020030PJP` → BL id=`FUW02001SF` → `FUW02001SFLogic.init` | `setFUSV005501SC` / `setFUSV005502SC` / `setFUSV005503SC` / `setFUSV005504SC` / `setFUSV005501CC` / `invokeService` |

**Caller notes:**
- All three screens (`WEBGAMEN_FUW020010PJP`, `WEBGAMEN_FUW020020PJP`, `WEBGAMEN_FUW020030PJP`) reference the same business logic class `FUW02001SFLogic` via BL id `FUW02001SF` in their XML configuration files (`WEBGAMEN_FUW020010PJP.xml`, `WEBGAMEN_FUW020020PJP.xml`, `WEBGAMEN_FUW020030PJP.xml`).
- The configuration file `x31business_logic_FUW02001SF.xml` registers the BL: `<BL id="FUW02001SF" name="メールエイリアス設定申請" class="eo.web.webview.FUW02001SF.FUW02001SFLogic">` (Mail Alias Setting Application).

## 6. Per-Branch Detail Blocks

**Block 1** — [EXEC] Device un-installation pre-check (L121)

> Executes the pre-flight check for device un-installation status before proceeding with the screen.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JFUWebCommon.checkOrosi(this)` // Pre-flight check for e-光 installation equipment status |

**Block 2** — [EXEC] Retrieve shared common-info form bean (L124–134)

> Extracts customer contract information from the shared common-info bean into three separate service beans: main service, optional service, and sub-optional (ISP) service.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean()` // Get shared form bean |
| 2 | EXEC | `Map<String, Object> resultMap = getCommoninfoBeanInfo(commoninfoBean)` // Get customer info map |
| 3 | SET | `svcKeiInfoBean = resultMap.get(CommonInfoCFConst.SVC_KEI_INFO)` // Main service contract info |
| 4 | SET | `opSvcKeiInfoBean = resultMap.get(CommonInfoCFConst.OP_SVC_KEI_INFO)` // Optional service contract info |
| 5 | SET | `sbopSvcKeiInfoBean = resultMap.get(CommonInfoCFConst.SBOP_SVC_KEI_INFO)` // Sub-optional (ISP) service contract info |

**Block 3** — [EXEC] Validate service data (L137)

> Runs validation checks on the retrieved service contract data.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `checkSvcData(resultMap)` // Validate service contract data |

**Block 4** — [EXEC] Prepare service form bean and invoke parameters (L140–152)

> Sets up the service form bean, parameter bean, use-case ID, and mapper for the SC invocations.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `X31SDataBeanAccess bean = super.getServiceFormBean()` // Get service form bean |
| 2 | SET | `X31SDataBeanAccess[] paramBean = { svcKeiInfoBean }` // Parameter bean array |
| 3 | SET | `HashMap<String, String> paramMap = new HashMap<String, String>(16)` // Use-case ID map |
| 4 | SET | `paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0055)` // [-> "FUSV0055"] Set use-case ID |
| 5 | SET | `FUSV0055_FUSV0055OPDBMapper mapper = new FUSV0055_FUSV0055OPDBMapper()` // Create mapper |
| 6 | SET | `HashMap<String, Object> dataMap = new HashMap<String, Object>()` // Data map |

**Block 5** — [EXEC] SC invocations (L155–163)

> Sequentially invokes four Service Components and one Common Component to gather pricing, contract, and validation data.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap = mapper.setFUSV005501SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1)` // SC: Business parameter management - contract change disable date |
| 2 | SET | `dataMap = mapper.setFUSV005502SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1)` // SC: NG word list lookup |
| 3 | SET | `dataMap = mapper.setFUSV005503SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1)` // SC: Price plan fixed unit price (option charge) list |
| 4 | SET | `dataMap = mapper.setFUSV005504SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1)` // SC: Price course / sub-option service agreement |
| 5 | CALL | `mapper.setFUSV005501CC(paramBean, dataMap)` // CC: Initial fee list lookup |

**Block 6** — [EXEC] Create output map and invoke remote service (L167–174)

> Wraps the service invocation in a try-catch block. On `JCCWebServiceException`, re-throws as `JCCBusinessException` with error code `ERROR_CODE_0002` (System error).

| # | Type | Code |
|---|------|------|
| 1 | SET | `HashMap<String, Object> outputMap = new HashMap<String, Object>()` // Output map |
| 2 | EXEC | `invokeService(paramMap, dataMap, outputMap)` // Invoke remote service |
| 3 | CATCH | `catch (JCCWebServiceException se)` // System error handler |
| 4 | THROW | `throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002)` // [-> System error code] |

**Block 7** — [EXEC] Extract SC results into service form bean (L178–184)

> Retrieves processed results from the output map via the mapper's getter methods.

| # | Type | Code |
|---|------|------|
| 1 | SET | `bean = mapper.getFUSV005501SC(bean, outputMap)` // Get business parameter result |
| 2 | SET | `bean = mapper.getFUSV005502SC(bean, outputMap)` // Get NG word list result |
| 3 | SET | `bean = mapper.getFUSV005504SC(bean, outputMap)` // Get price course result |

**Block 8** — [IF] Post-check: Alias change window validation (L187–198)

> Validates that the customer's existing alias change date plus the contract change restriction period does not fall in the future — meaning the customer must wait until the restriction window expires before making another alias change.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (sbopSvcKeiInfoBean != null)` // [L187] Sub-optional ISP service exists |
| 2 | SET | `String aliasChgeYmd = sbopSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.ALIAS_CHGE_YMD_29, X31CWebConst.DATABEAN_GET_VALUE)` // Get alias change date |
| 3 | SET | `int keiChgStpPrd = Integer.parseInt((bean.sendMessageString(FUW02001SFConst.KEI_CHG_STP_PRD, X31CWebConst.DATABEAN_GET_VALUE)))` // Get contract change restriction period |
| 4 | IF | `if ((!JFUWebCommon.isNull(aliasChgeYmd)) && JFUWebCommon.isFutureDate(JFUWebCommon.addDay(aliasChgeYmd, keiChgStpPrd), JFUWebCommon.getOpeDate(this, null), DOUJITSU_FUKUMU))` // [L193] Date check: DOUJITSU_FUKUMU="0" (Include same day) |
| 5 | THROW | `throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0101)` // [-> "0101"] Usage limit error |

**Block 8.1** — [ELSE-IF: implicit fall-through] When `sbopSvcKeiInfoBean == null`

> If no sub-optional service exists, the alias change date check is skipped entirely — no restriction.

**Block 9** — [EXEC] Set current email alias and sub-domain (L201–204)

> Extracts the current email address from the optional service bean, then derives the sub-domain by splitting on `@`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `String mlAd = opSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.MLAD_28, X31CWebConst.DATABEAN_GET_VALUE)` // Get current mail address |
| 2 | SET | `bean.sendMessageString(FUW02001SFConst.NOW_MLAD, X31CWebConst.DATABEAN_SET_VALUE, mlAd)` // Set NOW_MLAD in bean |
| 3 | SET | `bean.sendMessageString(FUW02001SFConst.SUB_DOMAIN, X31CWebConst.DATABEAN_SET_VALUE, mlAd.split(JFUStrConst.ATMARK)[1])` // Extract sub-domain from email |

**Block 10** — [SET] Determine add/change distinction (L207–210)

> Sets `add_chg_div` to `"0"` (Registration) by default, but overrides to `"1"` (Change) if sub-optional service exists.

| # | Type | Code |
|---|------|------|
| 1 | SET | `String add_chg_div = ADD_CHG_DIV_ADD` // [-> "0"] Default: New registration |
| 2 | IF | `if (sbopSvcKeiInfoBean != null)` // [L209] Sub-optional ISP exists |
| 3 | SET | `add_chg_div = ADD_CHG_DIV_CHG` // [-> "1"] Override: Change |

**Block 10.1** — [ELSE] When `sbopSvcKeiInfoBean == null`

> The default value `ADD_CHG_DIV_ADD = "0"` (New registration) remains in effect.

**Block 11** — [EXEC] Calculate billing flag (L213–214)

> Sets the pay flag in the bean by calling the `setPayFlg` helper method with the bean and output map.

| # | Type | Code |
|---|------|------|
| 1 | SET | `boolean payFlag = bean.sendMessageBoolean(FUW02001SFConst.PAY_FLG, X31CWebConst.DATABEAN_SET_VALUE, setPayFlg(bean, outputMap))` // Calculate and set billing flag |

**Block 12** — [IF] Pricing display suppression (L216–220)

> If the service is free (`payFlag == false`) OR it's a change operation (`add_chg_div == "1"`), the pricing table display is replaced with a free-pricing message.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (payFlag == false || ADD_CHG_DIV_CHG.equals(add_chg_div))` // [ADD_CHG_DIV_CHG="1"] Free pricing or change scenario |
| 2 | CALL | `JFUWebCommon.setFreePrcInfoMap(outputMap, SC_TITLE_FUSV005503)` // [SC_TITLE_FUSV005503="FUSV005503SC"] Set free pricing info |

**Block 12.1** — [ELSE] When `payFlag == true` AND `add_chg_div != "1"`

> Pricing table is displayed normally — falls through to Block 13 (pricing mapping).

**Block 13** — [EXEC] Pricing area mapping and bean field setup (L223–233)

> Maps the pricing area to the bean, sets add/change distinction, mansion division flag, and current mail alias.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JFUWebCommon.setPrcInfoArea(bean, outputMap, SC_TITLE_FUSV005503, CC_TITLE_FUSV005501, FUW02001)` // [SC_TITLE_FUSV005503="FUSV005503SC", CC_TITLE_FUSV005501="FUSV005501CC", FUW02001="FUW02001"] Map pricing area |
| 2 | SET | `bean.sendMessageString(FUW02001SFConst.ADD_CHG_DIV, X31CWebConst.DATABEAN_SET_VALUE, add_chg_div)` // Set add/change distinction |
| 3 | SET | `bean.sendMessageBoolean(FUW02001SFConst.MANSION_DIV, X31CWebConst.DATABEAN_SET_VALUE, getMansionDiv(commoninfoBean, outputMap, payFlag))` // Set mansion division flag |
| 4 | IF | `if (sbopSvcKeiInfoBean != null)` // [L230] Sub-optional ISP exists — set current mail alias |
| 5 | SET | `bean.sendMessageString(FUW02001SFConst.NOW_MAILALIAS, X31CWebConst.DATABEAN_SET_VALUE, sbopSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.ALIAS_29, X31CWebConst.DATABEAN_GET_VALUE) + JFUStrConst.ATMARK + bean.sendMessageString(FUW02001SFConst.SUB_DOMAIN, X31CWebConst.DATABEAN_GET_VALUE))` // Reconstruct full email alias |

**Block 13.1** — [ELSE] When `sbopSvcKeiInfoBean == null`

> The current mail alias field is not set — customer is in new registration mode, so no prior alias exists.

**Block 14** — [EXEC] Set current date display on pricing table (L236)

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

**Block 15** — [EXEC] Set next-screen navigation (L240–243)

> Configures the next screen ID and screen name for post-processing navigation.

| # | Type | Code |
|---|------|------|
| 1 | SET | `commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon.getScreenId(this))` // Set next screen ID |
| 2 | SET | `commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW02001)` // [-> "FUW02001"] Set next screen name |

**Block 16** — [RETURN] Always returns `true` (L245)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return true` // Screen setup successful |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `FUW02001SF` | Module | Mail Alias Setting Application — the screen module for configuring custom email alias addresses |
| メールエイリアス (Mail Alias) | Business term | A custom email address prefix that routes to the customer's e-光 email account (e.g., `alias@provider.co.jp`) |
| `SVC_KEI_INFO` | Field | Main service contract information — primary broadband/service subscription data |
| `OP_SVC_KEI_INFO` | Field | Optional service contract information — additional add-on service subscription data |
| `SBOP_SVC_KEI_INFO` | Field | Sub-optional (ISP) service contract information — internet service provider subscription data. Its presence/absence determines whether this is a change (`"1"`) or new registration (`"0"`) scenario. |
| `sbopSvcKeiInfoBean` | Field | Sub-optional service bean — non-null means customer has an existing ISP subscription, indicating a change operation |
| `aliasChgeYmd` | Field | Alias change date — the date of the customer's last alias address change (YYYYMMDD format) |
| `KEI_CHG_STP_PRD` | Field | Contract change restriction period — the minimum number of days a customer must wait before changing their contract/alias again |
| `DOUJITSU_FUKUMU` | Field/Constant | `"0"` — Include same day in date comparison (the alias change restriction window includes the change date itself) |
| `add_chg_div` | Field | Add/change distinction — `"0"` for new registration (新規登録), `"1"` for change (変更) |
| `ADD_CHG_DIV_ADD` | Constant | `"0"` — Registration (new) |
| `ADD_CHG_DIV_CHG` | Constant | `"1"` — Change (modification) |
| `payFlag` | Field | Billing flag — `true` if the operation incurs charges, `false` if free |
| `NOW_MLAD` | Field | Current mail address — stores the customer's existing email alias |
| `SUB_DOMAIN` | Field | Sub-domain — the part of the email address after the `@` symbol, extracted from the full mail address |
| `NOW_MAILALIAS` | Field | Current full mail alias — reconstructed as `alias + "@" + sub_domain` |
| `MANSION_DIV` | Field | Mansion division flag — indicates whether the customer resides in a mansion/apartment complex (affects billing or service options) |
| `USECASE_ID_FUSV0055` | Constant | `"FUSV0055"` — Service component ID for mail alias setting application (display screen) |
| `FUSV005501SC` | SC Code | Business parameter management — contract change disable date lookup |
| `FUSV005502SC` | SC Code | NG word list lookup — retrieves prohibited keywords for mail alias input validation |
| `FUSV005503SC` | SC Code | Price plan fixed unit price (option charge) list — option charge pricing details |
| `FUSV005504SC` | SC Code | Price course / sub-option service agreement — sub-option service pricing information |
| `FUSV005501CC` | CC Code | Initial fee list lookup — calculates one-time setup/initial fees |
| `EKK0411D010` | Constant | `"EKK0411D010"` — Sub-optional service contract (ISP) registration |
| `EKK0411C010` | Constant | `"EKK0411C010"` — Sub-optional service contract (ISP) change |
| `ERROR_CODE_0002` | Constant | System error — thrown when the remote service invocation fails |
| `ERROR_CODE_0101` | Constant | `"0101"` — Usage limit error — thrown when the alias change restriction window has not yet expired |
| e-光 (e-Hikari) | Business term | e-光 = "e-Light" — K-Opticom's fiber-to-the-home (FTTH) broadband service |
| FTTH | Business term | Fiber To The Home — fiber-optic broadband service |
| ISP | Acronym | Internet Service Provider — the internet connectivity service layer |
| NG word | Business term | Prohibited/forbidden words — keywords that cannot be used in a mail alias to prevent abuse or confusion |
| `JCCBatCommon.isNull` | Utility | Null-check utility for objects |
| `JFUWebCommon` | Utility | Web-layer common utility class providing date operations, null checks, and pricing display helpers |
| `X31SDataBeanAccess` | Type | Shared form data bean access class — used to retrieve and store screen data in the e-光 framework |
| `JCCWebBusinessLogic` | Parent class | Base class for web business logic — provides `getCommonInfoBean()`, `getServiceFormBean()`, and `invokeService()` |
| `FUSV0055_FUSV0055OPDBMapper` | Class | Operation-to-database mapper for the FUSV0055 service component — orchestrates SC/CC invocations and result extraction |
| SCREEN_NAME_FUW02001 | Constant | Screen name identifier for the mail alias setting screen (`FUW02001`) |
| `ALIAS_CHGE_YMD_29` | Constant | Field key in common-info bean — stores the alias change date |
| `MLAD_28` | Constant | Field key in common-info bean — stores the mail address |
| `ATMARK` | Constant | `"@"` — the at-sign character used to split email addresses |
