# Business Logic — FUW00943SFLogic.selectOpSvcMngn() [254 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.FUW00943SF.FUW00943SFLogic` |
| Layer | Web Logic / View Controller (View-side business logic) |
| Module | `FUW00943SF` (Package: `eo.web.webview.FUW00943SF`) |

## 1. Role

### FUW00943SFLogic.selectOpSvcMngn()

This method constructs a multi-line email message containing **notices and disclaimers for optional services** selected during an eo光 (eo Hikari) broadband subscription order at a retail or visit sales screen. It serves as the **email content builder** for pre-activation customer notifications, aggregating warnings about services the customer has opted into. The method collects data from multiple service beans — contract service info, eo光 network service info, and phone service info — and then evaluates each optional service selection independently using a **conditional dispatch pattern**. For every service type that the customer has selected (Netflix packages, security pack, internet gateway, notification mail premium, home appliance support plans, family pack, light phone adapter, phone number portability, and TV service), an appropriate notice message is appended to the output. The method also conditionally includes a content service notice when a competition release date threshold is met. Its primary role is to ensure customers receive comprehensive, service-specific notifications by email before activation, covering everything from Netflix bundles to number portability procedures. The method is invoked as part of the final order completion flow (`finMskm`) in the FUW00943SF screen.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["selectOpSvcMngn(webNewInfoBean)"])
    START --> INIT["Initialize StringBuilder message"]
    INIT --> EXTRACT["Extract service data from beans"]
    EXTRACT --> EXTRACT_KYK["getKeiyakusvcinfo - contract service bean"]
    EXTRACT --> EXTRACT_NET["getEonet - eo光 network bean"]
    EXTRACT --> EXTRACT_TEL["getEotel - phone service bean array"]
    EXTRACT --> EXTRACT_SVCNET["bnKykSrv.get SELECT_SVC_NET_10"]
    EXTRACT --> EXTRACT_SVCTV["bnKykSrv.get SELECT_SVC_TV_10"]
    EXTRACT --> EXTRACT_SRCTEL["bnKykSrv.get SELECT_SVC_TEL_10"]
    EXTRACT --> EXTRACT_MSKM["webNewInfoBean.get MSKM_KBN_06"]
    EXTRACT --> EXTRACT_KSN["webNewInfoBean.get MSKM_KSN_SVC_06"]
    EXTRACT --> EXTRACT_MNS["webNewInfoBean.get MSKM_MNS_TYPE_06"]
    EXTRACT --> EXTRACT_FP["bnNet.get FP_MSKM_11"]
    EXTRACT --> EXTRACT_COURSE["bnNet.get NET_COURSE_11"]
    EXTRACT --> EXTRACT_SEC["bnNet.get SECURITY_PACK_MSKM_11"]
    EXTRACT --> EXTRACT_INET["bnNet.get INETSGWL_MSKM_11"]
    EXTRACT --> EXTRACT_NTF["bnNet.get NTFMLPRM_MSKM_11"]
    EXTRACT --> EXTRACT_PC["bnNet.get KK_COMP_PC_MSKM_11"]
    EXTRACT --> EXTRACT_PCW["bnNet.get KK_COMP_PCW_MSKM_11"]
    EXTRACT --> EXTRACT_TVPLN["bnNet.get KK_COMP_TV_MSKM_11"]
    EXTRACT --> EXTRACT_TELCOURSE["webNewInfoBean.get TEL_COURSE_06"]
    EXTRACT --> INIT_CNT["Set cnt = 0"]
    INIT_CNT --> CX_CHECK["cxStartFrom check"]
    CX_CHECK --> CX_TRUE["cxStartFrom set AND <= current date"]
    CX_TRUE --> CX_NEW["mskmKbn = '1' (New)"]
    CX_NEW --> CX_MSG["Append ML_DSP_MSG_CONTENTSMGN notice"]
    CX_MSG --> NF_CHECK["Netflix course check"]
    CX_CHECK --> NF_CHECK
    NF_CHECK --> NF_TRUE["netCourse in 7,8,9 (Netflix packages)"]
    NF_TRUE --> NF_MSG["Append ML_DSP_MSG_NETFLIX notice"]
    NF_TRUE --> SEC_CHECK["Security pack check"]
    NF_CHECK --> SEC_CHECK
    SEC_CHECK --> SEC_TRUE["netSecurityPack = '1'"]
    SEC_TRUE --> SEC_MSG["Append ML_DSP_MSG_SECUPA notice"]
    SEC_TRUE --> INET_CHECK["Internet gateway check"]
    SEC_CHECK --> INET_CHECK
    INET_CHECK --> INET_TRUE["netInetsgwl = '1'"]
    INET_TRUE --> INET_MSG["Append ML_DSP_MSG_INETSGWL notice"]
    INET_TRUE --> NTF_CHECK["Notification mail premium check"]
    INET_CHECK --> NTF_CHECK
    NTF_CHECK --> NTF_TRUE["netNtfmlprm = '1'"]
    NTF_TRUE --> NTF_MSG["Append ML_DSP_MSG_NTFMLPRM notice"]
    NTF_TRUE --> KKHS_CHECK["Home appliance support check"]
    NTF_CHECK --> KKHS_CHECK
    KKHS_CHECK --> KKHS_TRUE["netPc_pln OR netPcw_pln OR netTv_pln = '1'"]
    KKHS_TRUE --> KKHS_MSG["Append ML_DSP_MSG_KKHS notice"]
    KKHS_TRUE --> FAM_CHECK["Family pack check"]
    KKHS_CHECK --> FAM_CHECK
    FAM_CHECK --> FAM_TRUE["netFamipa = '1'"]
    FAM_TRUE --> FAM_MSG["Append ML_DSP_MSG_FAMIPA notice"]
    FAM_TRUE --> TEL_ADD_CHECK["Phone addition check"]
    FAM_CHECK --> TEL_ADD_CHECK
    TEL_ADD_CHECK --> TEL_ADD_TRUE["svcTel = '1' AND mskmKbn = '2' (Add)"]
    TEL_ADD_TRUE --> TEL_ADD_ROUTER["get ROUTER_RETURN_FLG_11"]
    TEL_ADD_ROUTER --> TEL_ADD_FILTER["Router != '1' AND home AND no TV AND no Net"]
    TEL_ADD_FILTER --> TEL_ADD_MSG["Append ML_DSP_MSG_TEL_ADD notice"]
    TEL_ADD_MSG --> TEL_CHECK["Phone order check"]
    TEL_ADD_CHECK --> TEL_CHECK
    TEL_CHECK --> TEL_TRUE["svcTel = '1' (Choice)"]
    TEL_TRUE --> TEL_COURSE["telCourse = '2' (2nd number)?"]
    TEL_COURSE --> BMP2["bnEotel[1].get USE_BMP_12"]
    BMP2 --> BMP1["bnEotel[0].get USE_BMP_12"]
    BMP1 --> BMP_CHECK["bmpUm1 = '1' OR bmpUm2 = '1'"]
    BMP_CHECK --> BMP_TRUE["Phone portability selected"]
    BMP_TRUE --> BMP_TEXT["Get ML_DSP_MSG_BNP text"]
    BMP_TEXT --> HOME_CHECK["mskmKsnSvc = '1' (Home)"]
    HOME_CHECK --> HOME_TYPE["Set NET_TIPE_HOME"]
    HOME_CHECK --> MAN_CHECK["mskmKsnSvc = '2' AND mskmMnsType = '2' (Mezon)"]
    MAN_CHECK --> MAN_TYPE["Set NET_TIPE_MEZON"]
    HOME_TYPE --> REPLACE["Replace %1 with home/mansion text"]
    MAN_TYPE --> REPLACE
    REPLACE --> BMP_MSG["Append portability notice"]
    BMP_MSG --> TV_CHECK["TV choice check"]
    TEL_CHECK --> TV_CHECK
    TV_CHECK --> TV_TRUE["svcTv = '1' (Choice)"]
    TV_TRUE --> TV_DATE["getOpeDateTime comparison vs '20240422'"]
    TV_DATE --> TV_OLD["Before 2024-04-22: ML_DSP_MSG_TV"]
    TV_DATE --> TV_NEW["On/After 2024-04-22: ML_DSP_MSG_TV_NOSTARCH"]
    TV_OLD --> TV_MSG["Append TV notice"]
    TV_NEW --> TV_MSG
    TV_MSG --> RETURN["Return message"]
    END_NODE(["Return message"])
    RETURN --> END_NODE
```

**Constant Resolution Reference:**

| Constant | Actual Value | Business Meaning |
|----------|-------------|-----------------|
| `JFUStrConst.NET_COURSE_1G_NF` | `"7"` | FTTH 1G Course with Netflix package |
| `JFUStrConst.NET_COURSE_5G_NF` | `"8"` | FTTH 5G Course with Netflix package |
| `JFUStrConst.NET_COURSE_10G_NF` | `"9"` | FTTH 10G Course with Netflix package |
| `JFUStrConst.SECURITY_PAC_MSKM` | `"1"` | eo Security Pack selected (enabled) |
| `JFUStrConst.INETSGWL_MSKM` | `"1"` | Internet Gateway selected (enabled) |
| `JFUStrConst.NTFMLPRM_MSKM` | `"1"` | Notification Mail Premium selected (enabled) |
| `JFUStrConst.PC_PLN_MSKM` | `"1"` | PC Support Plan selected (enabled) |
| `JFUStrConst.PCW_PLN_MSKM` | `"1"` | PC Wireless Support Plan selected (enabled) |
| `JFUStrConst.TV_PLN_MSKM` | `"1"` | TV Support Plan selected (enabled) |
| `JFUStrConst.FP_MSKM_MSKM` | `"1"` | Family Pack selected (enabled) |
| `JFUStrConst.SELECT_SVC_TEL_CHOICE` | `"1"` | Phone service opted in |
| `JFUStrConst.SELECT_SVC_TV_CHOICE` | `"1"` | TV service opted in |
| `JFUStrConst.SELECT_SVC_NET_CHOICE` | `"1"` | Network service opted in |
| `JFUStrConst.MSKM_KBN_NEW` | `"1"` | New order type (新規) |
| `JFUStrConst.MSKM_KBN_ADD` | `"2"` | Addition order type (追加申込) |
| `JFUStrConst.MSKM_KSN_SVC_HOME` | `"1"` | Home service type (ホーム) |
| `JFUStrConst.MSKM_KSN_SVC_MANSION` | `"2"` | Mansion/apartment service type (マンション) |
| `JFUStrConst.MSKM_MNS_TYPE_MEZON` | `"2"` | MezOn building type |
| `JFUStrConst.TEL_COURSE_2BANGOU_SVC` | `"2"` | 2nd number service (2番號サービス) |
| `JFUStrConst.USE_BMP_USE` | `"1"` | Phone number portability used |
| `JFUStrConst.CD00002_1` | `"1"` | Router return required flag |
| `JFUStrConst.RETURN_CODE` | `"\r
"` | Line break character |
| `JFUStrConst.EMPTY` | `""` | Empty string |
| `JFUStrConst.HALF_SPACE` | *(not used in active path)* | Half-width space |
| `REPLACE1` | `"%1"` | Placeholder for home/mansion text replacement |
| `CX_START_FROM` | DISPSETTING key for `KOJIHI_KAP_24_START_YMD` | Competition release date setting |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `webNewInfoBean` | `X31SDataBeanAccess` | The master data bean containing all customer order information for the current retail/visit sales screen session. It carries order type classification, mansion type, phone course, and acts as the entry point for querying multiple service data beans (contract service, network service, phone service) via its `sendMessageString()` method using various key constants. |

**Instance fields read by this method:**

| Field | Type | Business Description |
|-------|------|---------------------|
| `this` (implicit) | `FUW00943SFLogic` | Used as context parameter for `getOpeDateTime(this, null)` to retrieve the current operation date within this screen logic context |

## 4. CRUD Operations / Called Services

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `getKeiyakusvcinfo(webNewInfoBean)` | (internal) | - | Retrieves the contract service information bean containing selected optional services (net, TV, phone) |
| R | `getEonet(webNewInfoBean)` | (internal) | - | Retrieves the eo光 network service bean containing network-specific options (course, security pack, family pack, support plans) |
| R | `getEotel(webNewInfoBean)` | (internal) | - | Retrieves an array of phone service beans (index 0 = primary line, index 1 = secondary line) |
| R | `JACBatCommon.isNull(String)` | JACBatCommon | - | Null check utility called by downstream common utilities |
| R | `JACbatRknBusinessUtil.isNull(String)` | JACbatRknBusinessUtil | - | Null check utility called by downstream common utilities |
| R | `JCHbatSeikyKaknoBusinessUtil.isNull(String)` | JCHbatSeikyKaknoBusinessUtil | - | Null check utility called by downstream common utilities |
| R | `JBSbatACInsentetivePrcInfoSaksei.isNull(String)` | JBSbatACInsentetivePrcInfoSaksei | - | Null check utility called by downstream common utilities |
| R | `JBSbatAKCHSeikyYsoInfMake.isNull(String)` | JBSbatAKCHSeikyYsoInfMake | - | Null check utility called by downstream common utilities |
| R | `JBSbatDKHmpinAdd.getOpeDateTime(String, String)` | JBSbatDKHmpinAdd | - | Retrieves operation date-time string for current session |
| R | `JBSbatDKNyukaFinAdd.getOpeDateTime(String, String)` | JBSbatDKNyukaFinAdd | - | Retrieves operation date-time string for current session |
| R | `JBSbatDKSavePrdDataDel.getOpeDateTime(String, String)` | JBSbatDKSavePrdDataDel | - | Retrieves operation date-time string for current session |
| R | `JBSbatDKShkInfoSendFileSakusei.getOpeDateTime(String, String)` | JBSbatDKShkInfoSendFileSakusei | - | Retrieves operation date-time string for current session |
| R | `JBSBatKKNTTSijiKnmKaishuKjSksi.getOpeDateTime(String, String)` | JBSBatKKNTTSijiKnmKaishuKjSksi | - | Retrieves operation date-time string for current session |
| R | `JCCBPCommon.getOpeDate(String, String)` | JCCBPCommon | - | Retrieves operation date string for current session |
| R | `JFUEoTvCngAddStbCC.getOpeDate(String, String)` | JFUEoTvCngAddStbCC | - | Retrieves operation date string for current session |
| R | `JFUHikkosiNaviRelAddCC.getOpeDate(String, String)` | JFUHikkosiNaviRelAddCC | - | Retrieves operation date string for current session |
| R | `JKKCreditAddCC.getOpeDate(String, String)` | JKKCreditAddCC | - | Retrieves operation date string for current session |
| R | `JKKModelCommon.getOpeDate(String, String)` | JKKModelCommon | - | Retrieves operation date string for current session |
| R | `OneStopDataBeanAccess.sendMessageString(String, String)` | OneStopDataBeanAccess | - | Generic data bean accessor to retrieve values by message key from bean data |
| R | `JFUEoPremiumClubDsp.getDispItem(String)` | JFUEoPremiumClubDsp | - | Retrieves display text by item key (called via JFUWebCommon) |
| R | `JFUGetTabletTanmtCmpKbn.getDispText(String, String)` | JFUGetTabletTanmtCmpKbn | - | Retrieves display text for tablet maintenance comparison category (called via JFUWebCommon) |
| R | `JFUMskmDmenMappingUtil.getDispText(String, String)` | JFUMskmDmenMappingUtil | - | Retrieves display text for mansion menu mapping (called via JFUWebCommon) |
| R | `JFUTabletInfoUtil.getDispItem(String)` | JFUTabletInfoUtil | - | Retrieves display item by key (called via JFUWebCommon) |
| R | `JFUWebCommon.getDispText(String, String)` | JFUWebCommon | - | Retrieves localized display text from screen-specific message resource bundle (e.g., ML_DSP_MSG_NETFLIX) |
| R | `JFUWebCommon.getDispItem(String)` | JFUWebCommon | - | Retrieves display item text by key (e.g., CX_START_FROM DISPSETTING key) |
| R | `JFUWebCommon.isNull(String)` | JFUWebCommon | - | Null-check utility to verify if a string is null or empty |
| R | `JFUWebCommon.getOpeDate(FUW00943SFLogic, String)` | JFUWebCommon | - | Retrieves current operation date from screen context |
| R | `JFUWebCommon.getOpeDateTime(FUW00943SFLogic, String)` | JFUWebCommon | - | Retrieves current operation date-time (YYYYMMDDHHMMSS format) from screen context |
| R | `FUW00943SFLogic.getEonet(X31SDataBeanAccess)` | (internal) | - | Internal method that constructs the eo光 network service bean |
| R | `FUW00943SFLogic.getEotel(X31SDataBeanAccess)` | (internal) | - | Internal method that constructs the phone service bean array |
| R | `FUW00943SFLogic.getKeiyakusvcinfo(X31SDataBeanAccess)` | (internal) | - | Internal method that constructs the contract service information bean |
| R | `FUW07401SFLogic.getDispText(String, String)` | FUW07401SFLogic | - | Display text retrieval from related screen logic (called via JFUWebCommon) |
| R | `FUW07501SFLogic.getDispText(String, String)` | FUW07501SFLogic | - | Display text retrieval from related screen logic (called via JFUWebCommon) |
| R | `FUW12001SFLogic.getDispText(String, String)` | FUW12001SFLogic | - | Display text retrieval from related screen logic (called via JFUWebCommon) |

**CRUD Summary:** This method is **read-only** — it does not perform any create, update, or delete operations. It functions purely as a data aggregator and message builder, reading service selection data from beans and constructing a formatted output string.

## 5. Dependency Trace

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

No screen/batch entry points found within 8 hops. Direct callers found: 1 method.

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | `FUW00943SFLogic.finMskm()` | `finMskm()` -> `selectOpSvcMngn(webNewInfoBean)` | All methods classified as [R] in Section 4 |

**Terminal operations from this method:** `getDispText` [R] × 9 message retrievals, `getOpeDateTime` [R] × 5 date retrievals, `sendMessageString` [R] × 15 bean value lookups.

## 6. Per-Branch Detail Blocks

**Block 1** — [SET] Data extraction (L3087–3143)

> Extracts all service data from beans by calling internal accessor methods and extracting optional service selections via `sendMessageString()`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `StringBuilder message = new StringBuilder()` // Initialize output buffer |
| 2 | CALL | `bnKykSrv = getKeiyakusvcinfo(webNewInfoBean)` // Contract service bean |
| 3 | SET | `mskmKbn = webNewInfoBean.sendMessageString(CommonInfoCFConst.MSKM_KBN_06, X31CWebConst.DATABEAN_GET_VALUE)` // Order classification (New/Add) |
| 4 | SET | `bnNet = getEonet(webNewInfoBean)` // eo光 network bean |
| 5 | SET | `bnEotel[] = getEotel(webNewInfoBean)` // Phone service bean array (index 0=primary, 1=secondary) |
| 6 | SET | `svcNet = bnKykSrv.sendMessageString(CommonInfoCFConst.SELECT_SVC_NET_10, X31CWebConst.DATABEAN_GET_VALUE)` // Optional network selection |
| 7 | SET | `svcTv = bnKykSrv.sendMessageString(CommonInfoCFConst.SELECT_SVC_TV_10, X31CWebConst.DATABEAN_GET_VALUE)` // Optional TV selection |
| 8 | SET | `svcTel = bnKykSrv.sendMessageString(CommonInfoCFConst.SELECT_SVC_TEL_10, X31CWebConst.DATABEAN_GET_VALUE)` // Optional phone selection |
| 9 | SET | `mskmKsnSvc = webNewInfoBean.sendMessageString(CommonInfoCFConst.MSKM_KSN_SVC_06, X31CWebConst.DATABEAN_GET_VALUE)` // Mansion/home service type |
| 10 | SET | `mskmMnsType = webNewInfoBean.sendMessageString(CommonInfoCFConst.MSKM_MNS_TYPE_06, X31CWebConst.DATABEAN_GET_VALUE)` // Mansion building type |
| 11 | SET | `netFamipa = bnNet.sendMessageString(CommonInfoCFConst.FP_MSKM_11, X31CWebConst.DATABEAN_GET_VALUE)` // Family pack selection |
| 12 | SET | `netCourse = bnNet.sendMessageString(CommonInfoCFConst.NET_COURSE_11, X31CWebConst.DATABEAN_GET_VALUE)` // Network course selection |
| 13 | SET | `netSecurityPack = bnNet.sendMessageString(CommonInfoCFConst.SECURITY_PACK_MSKM_11, X31CWebConst.DATABEAN_GET_VALUE)` // Security pack selection |
| 14 | SET | `netInetsgwl = bnNet.sendMessageString(CommonInfoCFConst.INETSGWL_MSKM_11, X31CWebConst.DATABEAN_GET_VALUE)` // Internet gateway selection |
| 15 | SET | `netNtfmlprm = bnNet.sendMessageString(CommonInfoCFConst.NTFMLPRM_MSKM_11, X31CWebConst.DATABEAN_GET_VALUE)` // Notification mail premium selection |
| 16 | SET | `netPc_pln = bnNet.sendMessageString(CommonInfoCFConst.KK_COMP_PC_MSKM_11, X31CWebConst.DATABEAN_GET_VALUE)` // PC support plan selection |
| 17 | SET | `netPcw_pln = bnNet.sendMessageString(CommonInfoCFConst.KK_COMP_PCW_MSKM_11, X31CWebConst.DATABEAN_GET_VALUE)` // PC wireless support plan selection |
| 18 | SET | `netTv_pln = bnNet.sendMessageString(CommonInfoCFConst.KK_COMP_TV_MSKM_11, X31CWebConst.DATABEAN_GET_VALUE)` // TV support plan selection |
| 19 | SET | `telCourse = webNewInfoBean.sendMessageString(CommonInfoCFConst.TEL_COURSE_06, X31CWebConst.DATABEAN_GET_VALUE)` // Phone course selection |
| 20 | SET | `cnt = 0` // Message counter for appended notices |

**Block 2** — [IF] Competition release content service notice check (L3145–3158)

> If the competition release date (`cxStartFrom`) is set and the current operation date is on or after that date, and the order type is "New" (mskmKbn = "1"), append the content service notice.

| # | Type | Code |
|---|------|------|
| 1 | SET | `cxStartFrom = JFUWebCommon.getDispItem(CX_START_FROM)` // Get DISPSETTING key for competition release date (KOJIHI_KAP_24_START_YMD) [-> "DISPSETTING/COMMONSETTING/DISPTEXT[@id='KOJIHI_KAP_24_START_YMD']"] |
| 2 | IF | `!isNull(cxStartFrom) && Integer.parseInt(cxStartFrom) <= Integer.parseInt(JFUWebCommon.getOpeDate(this, null))` // Competition release date threshold met [CD00002 pattern] |
| 2.1 | IF | `JFUStrConst.MSKM_KBN_NEW.equals(mskmKbn)` [MSKM_KBN_NEW = "1" (New order)] |
| 2.1.1 | SET | `mlContentsMgn = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00943, ML_DSP_MSG_CONTENTSMGN)` // Get content service notice text |
| 2.1.2 | EXEC | `message.append(JFUStrConst.RETURN_CODE)` // Append line break (\r
) |
| 2.1.3 | EXEC | `message.append(JFUStrConst.RETURN_CODE)` // Append line break (\r
) |
| 2.1.4 | EXEC | `message.append(mlContentsMgn)` // Append content service warning message |

**Block 3** — [IF] Netflix package notice (L3160–3169)

> If the network course is one of the Netflix bundle courses (1G/5G/10G with Netflix), append the Netflix package notice.

| # | Type | Code |
|---|------|------|
| 1 | IF | `netCourse.equals(NET_COURSE_1G_NF) || netCourse.equals(NET_COURSE_5G_NF) || netCourse.equals(NET_COURSE_10G_NF)` [NET_COURSE_1G_NF="7" (1G w/Netflix), NET_COURSE_5G_NF="8" (5G w/Netflix), NET_COURSE_10G_NF="9" (10G w/Netflix)] |
| 1.1 | SET | `mlMsgNf = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00943, ML_DSP_MSG_NETFLIX)` // Get Netflix package notice text |
| 1.2 | EXEC | `message.append(JFUStrConst.RETURN_CODE)` // Append line break (\r
) |
| 1.3 | EXEC | `message.append(JFUStrConst.RETURN_CODE)` // Append line break (\r
) |
| 1.4 | EXEC | `message.append(mlMsgNf)` // Append Netflix package warning |

**Block 4** — [IF] eo Security Pack notice (L3173–3181)

> If the customer selected the eo Security Pack (netSecurityPack = "1"), append the security pack notice and increment the counter.

| # | Type | Code |
|---|------|------|
| 1 | IF | `netSecurityPack.equals(SECURITY_PAC_MSKM)` [SECURITY_PAC_MSKM = "1"] |
| 1.1 | SET | `mlMsgSecurityPack = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00943, ML_DSP_MSG_SECUPA)` // Get security pack notice text |
| 1.2 | EXEC | `message.append(JFUStrConst.RETURN_CODE)` // Append line break (\r
) |
| 1.3 | EXEC | `message.append(JFUStrConst.RETURN_CODE)` // Append line break (\r
) |
| 1.4 | EXEC | `message.append(mlMsgSecurityPack)` // Append security pack warning |
| 1.5 | SET | `cnt++` // Increment notice counter |

**Block 5** — [IF] Internet Gateway notice (L3183–3191)

> If the customer selected the Internet Gateway (netInetsgwl = "1"), append the gateway notice and increment the counter.

| # | Type | Code |
|---|------|------|
| 1 | IF | `netInetsgwl.equals(INETSGWL_MSKM)` [INETSGWL_MSKM = "1"] |
| 1.1 | SET | `mlMsgInetsgwl = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00943, ML_DSP_MSG_INETSGWL)` // Get internet gateway notice text |
| 1.2 | EXEC | `message.append(JFUStrConst.RETURN_CODE)` // Append line break (\r
) |
| 1.3 | EXEC | `message.append(JFUStrConst.RETURN_CODE)` // Append line break (\r
) |
| 1.4 | EXEC | `message.append(mlMsgInetsgwl)` // Append internet gateway warning |
| 1.5 | SET | `cnt++` // Increment notice counter |

**Block 6** — [IF] Notification Mail Premium notice (L3193–3201)

> If the customer selected Notification Mail Premium (netNtfmlprm = "1"), append the notice and increment the counter.

| # | Type | Code |
|---|------|------|
| 1 | IF | `netNtfmlprm.equals(NTFMLPRM_MSKM)` [NTFMLPRM_MSKM = "1"] |
| 1.1 | SET | `mlMsgNtfmlprm = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00943, ML_DSP_MSG_NTFMLPRM)` // Get notification mail premium notice text |
| 1.2 | EXEC | `message.append(JFUStrConst.RETURN_CODE)` // Append line break (\r
) |
| 1.3 | EXEC | `message.append(JFUStrConst.RETURN_CODE)` // Append line break (\r
) |
| 1.4 | EXEC | `message.append(mlMsgNtfmlprm)` // Append notification mail premium warning |
| 1.5 | SET | `cnt++` // Increment notice counter |

**Block 7** — [IF] Home Appliance Support Plan notice (L3205–3214)

> If any of the home appliance support plans (PC Plan, PC Wireless Plan, or TV Plan) are selected, append the support service notice. Note: this block does NOT increment the counter.

| # | Type | Code |
|---|------|------|
| 1 | IF | `netPc_pln.equals(PC_PLN_MSKM) || netPcw_pln.equals(PCW_PLN_MSKM) || netTv_pln.equals(TV_PLN_MSKM)` [PC_PLN_MSKM="1", PCW_PLN_MSKM="1", TV_PLN_MSKM="1"] |
| 1.1 | SET | `mlMsgKkhs = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00943, ML_DSP_MSG_KKHS)` // Get home appliance support notice text |
| 1.2 | EXEC | `message.append(JFUStrConst.RETURN_CODE)` // Append line break (\r
) |
| 1.3 | EXEC | `message.append(JFUStrConst.RETURN_CODE)` // Append line break (\r
) |
| 1.4 | EXEC | `message.append(mlMsgKkhs)` // Append home appliance support warning |

**Block 8** — [IF] Family Pack notice (L3216–3223)

> If the customer selected the Family Pack (netFamipa = "1"), append the family pack notice and increment the counter.

| # | Type | Code |
|---|------|------|
| 1 | IF | `netFamipa.equals(FP_MSKM_MSKM)` [FP_MSKM_MSKM = "1"] |
| 1.1 | SET | `mlMsgFamipa = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00943, ML_DSP_MSG_FAMIPA)` // Get family pack notice text |
| 1.2 | EXEC | `message.append(JFUStrConst.RETURN_CODE)` // Append line break (\r
) |
| 1.3 | EXEC | `message.append(JFUStrConst.RETURN_CODE)` // Append line break (\r
) |
| 1.4 | EXEC | `message.append(mlMsgFamipa)` // Append family pack warning |
| 1.5 | SET | `cnt++` // Increment notice counter |

**Block 9** — [IF] Light Phone Adapter notice for addition orders (L3227–3259)

> If phone service is selected AND the order type is "Addition" (mskmKbn = "2"), retrieve the router return flag and conditionally append the light phone adapter notice. The inner condition checks if the router does NOT need to be returned (returnFlg != "1") AND the service type is Home AND no TV or network services are selected. Note: both the inner IF and ELSE branches produce identical output (append the same notice and increment counter).

| # | Type | Code |
|---|------|------|
| 1 | IF | `svcTel.equals(SELECT_SVC_TEL_CHOICE) && mskmKbn.equals(MSKM_KBN_ADD)` [SELECT_SVC_TEL_CHOICE="1" (Phone opted), MSKM_KBN_ADD="2" (Addition order)] |
| 1.1 | SET | `mlMsgtelAdd = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00943, ML_DSP_MSG_TEL_ADD)` // Get light phone adapter notice text |
| 1.2 | SET | `returnFlg = bnNet.sendMessageString(CommonInfoCFConst.ROUTER_RETURN_FLG_11, X31CWebConst.DATABEAN_GET_VALUE)` // Router return required flag |
| 1.3 | IF | `!returnFlg.equals(CD00002_1) && mskmKsnSvc.equals(MSKM_KSN_SVC_HOME) && !svcTv.equals(SELECT_SVC_TV_CHOICE) && !svcNet.equals(SELECT_SVC_NET_CHOICE)` [CD00002_1="1", MSKM_KSN_SVC_HOME="1", SELECT_SVC_TV_CHOICE="1", SELECT_SVC_NET_CHOICE="1"] |
| 1.3.1 | EXEC | `message.append(JFUStrConst.RETURN_CODE)` // Append line break (\r
) |
| 1.3.2 | EXEC | `message.append(JFUStrConst.RETURN_CODE)` // Append line break (\r
) |
| 1.3.3 | EXEC | `message.append(mlMsgtelAdd)` // Append light phone adapter warning |
| 1.3.4 | SET | `cnt++` // Increment notice counter |
| 1.4 | ELSE | (unconditional else branch, identical output) |
| 1.4.1 | EXEC | `message.append(JFUStrConst.RETURN_CODE)` // Append line break (\r
) |
| 1.4.2 | EXEC | `message.append(JFUStrConst.RETURN_CODE)` // Append line break (\r
) |
| 1.4.3 | EXEC | `message.append(mlMsgtelAdd)` // Append light phone adapter warning |
| 1.4.4 | SET | `cnt++` // Increment notice counter |

**Block 10** — [IF] Phone number portability notice (L3261–3303)

> If phone service is selected (svcTel = "1"), check phone number portability for both primary and secondary lines. If portability is in use, retrieve the appropriate home/mansion type text and perform string substitution before appending.

| # | Type | Code |
|---|------|------|
| 1 | IF | `svcTel.equals(SELECT_SVC_TEL_CHOICE)` [SELECT_SVC_TEL_CHOICE = "1"] |
| 1.1 | SET | `bmpUm2 = EMPTY` // Initialize 2nd line portability flag |
| 1.2 | IF | `telCourse.equals(TEL_COURSE_2BANGOU_SVC)` [TEL_COURSE_2BANGOU_SVC = "2" (2nd number service)] |
| 1.2.1 | SET | `bmpUm2 = bnEotel[1].sendMessageString(CommonInfoCFConst.USE_BMP_12, X31CWebConst.DATABEAN_GET_VALUE)` // 2nd line portability flag |
| 1.3 | SET | `bmpUm1 = bnEotel[0].sendMessageString(CommonInfoCFConst.USE_BMP_12, X31CWebConst.DATABEAN_GET_VALUE)` // Primary line portability flag |
| 1.4 | IF | `bmpUm1.equals(USE_BMP_USE) || bmpUm2.equals(USE_BMP_USE)` [USE_BMP_USE = "1" (Portability used)] |
| 1.4.1 | SET | `mlMsgBnp = EMPTY` // Initialize portability message text |
| 1.4.2 | SET | `mlMsgBnp = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00943, ML_DSP_MSG_BNP)` // Get portability notice text |
| 1.4.3 | SET | `mlMskmKsnSvc = EMPTY` // Initialize mansion text |
| 1.4.4 | IF | `mskmKsnSvc.equals(MSKM_KSN_SVC_HOME)` [MSKM_KSN_SVC_HOME = "1" (Home)] |
| 1.4.4.1 | SET | `mlMskmKsnSvc = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00943, NET_TIPE_HOME)` // Get home type display text |
| 1.4.5 | ELSE IF | `mskmKsnSvc.equals(MSKM_KSN_SVC_MANSION) && mskmMnsType.equals(MSKM_MNS_TYPE_MEZON)` [MSKM_KSN_SVC_MANSION="2", MSKM_MNS_TYPE_MEZON="2"] |
| 1.4.5.1 | SET | `mlMskmKsnSvc = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00943, NET_TIPE_MEZON)` // Get MezOn type display text |
| 1.4.6 | EXEC | `mlMsgBnp = mlMsgBnp.replaceAll(REPLACE1, mlMskmKsnSvc)` // Replace %1 placeholder with home/mansion text [REPLACE1 = "%1"] |
| 1.4.7 | EXEC | `message.append(JFUStrConst.RETURN_CODE)` // Append line break (\r
) |
| 1.4.8 | EXEC | `message.append(JFUStrConst.RETURN_CODE)` // Append line break (\r
) |
| 1.4.9 | EXEC | `message.append(mlMsgBnp)` // Append portability notice with substituted text |
| 1.4.10 | SET | `cnt++` // Increment notice counter |

**Block 11** — [IF] TV service notice with date-based content switch (L3305–3318)

> If TV service is selected (svcTv = "1"), retrieve the current operation date and conditionally select between two TV notice versions: a pre-starch version (before 2024-04-22) and a post-starch version (on or after 2024-04-22).

| # | Type | Code |
|---|------|------|
| 1 | IF | `svcTv.equals(SELECT_SVC_TV_CHOICE)` [SELECT_SVC_TV_CHOICE = "1"] |
| 1.1 | SET | `mlMsgTv = new String()` // Initialize TV message |
| 1.2 | SET | `opedate = JFUWebCommon.getOpeDateTime(this, null)` // Get current operation date-time (YYYYMMDDHHMMSS) |
| 1.3 | IF | `"20240422".compareTo(opedate) > 0` // Before 2024-04-22 date threshold |
| 1.3.1 | SET | `mlMsgTv = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00943, ML_DSP_MSG_TV)` // Get pre-starch TV notice |
| 1.4 | ELSE | // On or after 2024-04-22 |
| 1.4.1 | SET | `mlMsgTv = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00943, ML_DSP_MSG_TV_NOSTARCH)` // Get post-starch TV notice |
| 1.5 | EXEC | `message.append(JFUStrConst.RETURN_CODE)` // Append line break (\r
) |
| 1.6 | EXEC | `message.append(JFUStrConst.RETURN_CODE)` // Append line break (\r
) |
| 1.7 | EXEC | `message.append(mlMsgTv)` // Append TV service notice |
| 1.8 | SET | `cnt++` // Increment notice counter |

**Block 12** — [RETURN] Return assembled message (L3339)

> Return the fully assembled message string containing all applicable service notices.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return message` // Return StringBuilder with all appended notices |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `selectOpSvcMngn` | Method | Select Optional Service Management — constructs email notices for selected optional services |
| `finMskm` | Method | Finalize Mansion/Order — the main order completion method that calls selectOpSvcMngn |
| `FUW00943SF` | Screen ID | Retail/Visit Sales screen for order completion and notification dispatch |
| `mskmKbn` | Field | Mansion/Order Classification — order type indicator: "1" = New (新規), "2" = Addition (追加) |
| `mskmKsnSvc` | Field | Mansion/Service Type — building type: "1" = Home (ホーム), "2" = Mansion (マンション) |
| `mskmMnsType` | Field | Mansion Building Sub-type — e.g., "2" = MezOn (メゾン), a branded apartment line |
| `svcNet` | Field | Selected Network Service — optional network service selection indicator |
| `svcTv` | Field | Selected TV Service — optional TV service selection indicator |
| `svcTel` | Field | Selected Phone Service — optional phone service selection indicator |
| `netCourse` | Field | Network Course — internet plan tier with Netflix: "7"=1G w/Netflix, "8"=5G w/Netflix, "9"=10G w/Netflix |
| `netSecurityPack` | Field | eo Security Pack — internet security service add-on selection |
| `netInetsgwl` | Field | Internet Gateway — home network gateway device service selection |
| `netNtfmlprm` | Field | Notification Mail Premium — premium email notification service selection |
| `netFamipa` | Field | Family Pack — bundled family service plan selection |
| `netPc_pln` | Field | PC Support Plan — home appliance support service for PC |
| `netPcw_pln` | Field | PC Wireless Support Plan — home appliance support for wireless PC equipment |
| `netTv_pln` | Field | TV Support Plan — home appliance support for TV equipment |
| `telCourse` | Field | Phone Course — phone service tier: "2" = 2nd Number Service (2番號サービス) |
| `bmpUm1` | Field | Phone Number Portability (Primary Line) — "1" = portability in use |
| `bmpUm2` | Field | Phone Number Portability (Secondary Line) — "1" = portability in use |
| `ML_DSP_MSG_NETFLIX` | Key | Netflix package notice message key in screen message resource |
| `ML_DSP_MSG_SECUPA` | Key | eo Security Pack notice message key |
| `ML_DSP_MSG_INETSGWL` | Key | Internet Gateway notice message key |
| `ML_DSP_MSG_NTFMLPRM` | Key | Notification Mail Premium notice message key |
| `ML_DSP_MSG_KKHS` | Key | Home Appliance Support Service (おうち機器補償サービス) notice message key |
| `ML_DSP_MSG_FAMIPA` | Key | Family Pack notice message key |
| `ML_DSP_MSG_TEL_ADD` | Key | Light Phone Adapter (光電話アダプター) notice message key |
| `ML_DSP_MSG_BNP` | Key | Phone Number Portability (番号ポータビリティ) notice message key |
| `ML_DSP_MSG_TV` | Key | eo光 TV pre-starch (旧文言) notice message key |
| `ML_DSP_MSG_TV_NOSTARCH` | Key | eo光 TV post-starch (新文言) notice message key |
| `ML_DSP_MSG_CONTENTSMGN` | Key | Content Service (コンテンツサービス) notice message key |
| `NET_TIPE_HOME` | Key | Display text key for "Home" (ホーム) building type label |
| `NET_TIPE_MEZON` | Key | Display text key for "MezOn" (メゾン) building type label |
| `REPLACE1` | Constant | String placeholder `"%1"` for home/mansion text substitution in portability notice |
| `CX_START_FROM` | Constant | DISPSETTING key path for competition release date (`KOJIHI_KAP_24_START_YMD`) — determines when content service notices become applicable |
| `CD00002_1` | Constant | Router return required flag value "1" — indicates router must be returned |
| `RETURN_CODE` | Constant | `"\r
"` — carriage return + line feed for multi-line email formatting |
| `SELECT_SVC_NET_10` | Constant | Key for "Optional Service (Network)" in contract service bean |
| `SELECT_SVC_TV_10` | Constant | Key for "Optional Service (TV)" in contract service bean |
| `SELECT_SVC_TEL_10` | Constant | Key for "Optional Service (Phone)" in contract service bean |
| `FP_MSKM_11` | Constant | Key for Family Pack selection in eo光 network bean |
| `NET_COURSE_11` | Constant | Key for network course selection in eo光 network bean |
| `SECURITY_PACK_MSKM_11` | Constant | Key for security pack selection in eo光 network bean |
| `INETSGWL_MSKM_11` | Constant | Key for internet gateway selection in eo光 network bean |
| `NTFMLPRM_MSKM_11` | Constant | Key for notification mail premium selection in eo光 network bean |
| `KK_COMP_PC_MSKM_11` | Constant | Key for PC support plan selection in eo光 network bean |
| `KK_COMP_PCW_MSKM_11` | Constant | Key for PC wireless support plan selection in eo光 network bean |
| `KK_COMP_TV_MSKM_11` | Constant | Key for TV support plan selection in eo光 network bean |
| `USE_BMP_12` | Constant | Key for phone number portability flag in phone service bean |
| `TEL_COURSE_06` | Constant | Key for phone course selection in order bean |
| `MSKM_KBN_06` | Constant | Key for order classification (New/Add) in order bean |
| `MSKM_KSN_SVC_06` | Constant | Key for mansion/service type in order bean |
| `MSKM_MNS_TYPE_06` | Constant | Key for mansion building type in order bean |
| `ROUTER_RETURN_FLG_11` | Constant | Key for router return requirement flag in eo光 network bean |
| `e光` (eo Hikari) | Business term | eo光 (Fiber) — NTT Group's fiber-to-the-home internet service brand |
| Netflix | Business term | Netflix streaming service bundled with select internet plans |
| 番号ポータビリティ (Number Portability) | Business term | Mobile/fixed-line number portability — allowing customers to keep their existing phone number when switching providers |
| ファミリーパック (Family Pack) | Business term | NTT Group's bundled service package combining internet, phone, and TV services |
| eoセキュリティパック (eo Security Pack) | Business term | Internet security add-on service providing network-level protection |
| おうち機器補償サービス (Home Appliance Support Service) | Business term | Extended warranty/support service for home networking equipment (PC, PC wireless, TV) |
| 競合リリース日 (Competition Release Date) | Business term | The date from which competitive telecom providers can launch services, triggering specific content notices |
| X31SDataBeanAccess | Technical class | Data bean access class used to store and retrieve order service data in screen logic |
| StringBuilder | Technical class | Java class used to construct the multi-line email message output |
| JFUWebCommon | Technical class | Web common utility class providing display text retrieval, null checks, and operation date access |
| OneStopDataBeanAccess | Technical class | Base data bean class providing `sendMessageString()` for value retrieval by message key |
