# Business Logic — FUW00164SFLogic.selectSvcNm() [613 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.FUW00164SF.FUW00164SFLogic` |
| Layer | Service / Logic (Web presentation layer - contains business logic for email service name formatting) |
| Module | `FUW00164SF` (Package: `eo.web.webview.FUW00164SF`) |

## 1. Role

### FUW00164SFLogic.selectSvcNm()

This method constructs a human-readable, newline-delimited service name string for email representation of subscribed Fujitsu/eo telecom services. It is called by `setFormBeanMailInfo()` during the email form-building process to generate the service detail text that appears on customer-facing email confirmations. The method loads subscription data from five data bean sources (contract services, network, telephone, TV, customer info) and the mansion information, then routes through three primary service-branch paths: **Network** (eo Hikari fiber internet), **Telephone** (eo Hikari Phone with up to two lines), and **Television** (eo Hikari TV with STB configuration). Within each branch, it resolves numerous optional add-ons and discount types using display-text lookups against screen `FUW00114` - including discount types (instant discount, long-term discount, auto-continuation), hardware packages (family pack, smart link, STB rental, PLC, remote support, TH - Tower House), and telephone-specific options (sender number notice, eo Hikari Phone packs, sender number display, rejection of unsolicited calls). It also handles special contract scenarios such as pre-existing contract overwrites (appending a fixed "contract change reservation" message) and conditionally appends detailed descriptions for the family pack and security pack packages. The method implements a **Builder pattern** (accumulating text in a `StringBuilder`) combined with a **Router/Dispatcher pattern** (branching by service type codes). Its role in the larger system is to serve as the email-specific service-name formatter, distinct from the screen-based display logic.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["selectSvcNm webNewInfoBean"])
    
    START --> LOAD["Load contract services, network, tel, TV, customer, mansion info"]
    LOAD --> EXTRACT["Extract delivery pattern, reconnection service, mansion type"]
    EXTRACT --> EXTRACT2["Extract selected service flags net/tel/TV"]
    EXTRACT2 --> CHECK_OVERWRITE{Contract overwrite 1?}
    
    CHECK_OVERWRITE -->|Yes| APPEND_OVER["Append contract overwrite message + 2 newlines"]
    CHECK_OVERWRITE -->|No| CHECK_NET{Net selected 1?}
    APPEND_OVER --> CHECK_NET
    
    CHECK_NET -->|Yes| LOAD_NET["Load net course, discounts, packages, STB, smart link"]
    LOAD_NET --> DETERM_NET{Determine reconnection service type}
    
    DETERM_NET -->|Home| SET_HOME["Set mlNetSvcNm = Home service name"]
    DETERM_NET -->|Mansion + Mezon| SET_MEZON["Set mlNetSvcNm = Mezon service name"]
    DETERM_NET -->|Mansion + Mansion| SET_MANSION["Set mlNetSvcNm = Mansion service name"]
    
    SET_HOME --> CHECK_VDSL{VDSL/VDSLS?}
    SET_MEZON --> CHECK_VDSL
    SET_MANSION --> CHECK_VDSL
    
    CHECK_VDSL -->|Yes| CLEAR_COURSE["Clear netCourse"]
    CHECK_VDSL -->|No| MAP_COURSE{"Map netCourse to display"}
    
    CLEAR_COURSE --> MAP_COURSE
    MAP_COURSE -->|100M| MAP_100M["mlCourse = 100M"]
    MAP_COURSE -->|200M| MAP_200M["mlCourse = 200M"]
    MAP_COURSE -->|1G| MAP_1G["mlCourse = 1G"]
    MAP_COURSE -->|100M Light| MAP_100ML["mlCourse = 100M Light"]
    MAP_COURSE -->|Other| EMPTY_COURSE["mlCourse = empty"]
    
    MAP_100M --> BUILD_NET["Append type + space + course"]
    MAP_200M --> BUILD_NET
    MAP_1G --> BUILD_NET
    MAP_100ML --> BUILD_NET
    EMPTY_COURSE --> BUILD_NET
    
    BUILD_NET --> CHECK_SOKUWARI{"Instant discount 1?"}
    CHECK_SOKUWARI -->|Yes| APPEND_SOKUWARI["Append instant discount"]
    CHECK_SOKUWARI -->|No| CHECK_CHOWARI{"Long discount 1?"}
    APPEND_SOKUWARI --> CHECK_CHOWARI
    
    CHECK_CHOWARI -->|Yes| APPEND_CHOWARI["Append long discount"]
    CHECK_CHOWARI -->|No| CHECK_AUTO{"Auto-continuation 1?"}
    APPEND_CHOWARI --> CHECK_AUTO
    
    CHECK_AUTO -->|Yes| APPEND_AUTO["Append auto-continuation"]
    CHECK_AUTO -->|No| CHECK_FAMIPA{"Family pack 1?"}
    APPEND_AUTO --> CHECK_FAMIPA
    
    CHECK_FAMIPA -->|Yes| APPEND_FAMIPA["Append family pack, set famipaFlg"]
    CHECK_FAMIPA -->|No| CHECK_SECUPAK{"Security pack 1?"}
    APPEND_FAMIPA --> CHECK_SECUPAK
    
    CHECK_SECUPAK -->|Yes| APPEND_SECUPAK["Append security pack, set securityPackFlg"]
    CHECK_SECUPAK -->|No| CHECK_REMOTE{"Remote support or premium pack 1?"}
    APPEND_SECUPAK --> CHECK_REMOTE
    
    CHECK_REMOTE -->|Yes| APPEND_REMOTE["Append remote support"]
    CHECK_REMOTE -->|No| CHECK_PLC{"PLC 1?"}
    APPEND_REMOTE --> CHECK_PLC
    
    CHECK_PLC -->|Yes| APPEND_PLC["Append PLC"]
    CHECK_PLC -->|No| CHECK_STB{"STB rental 1?"}
    APPEND_PLC --> CHECK_STB
    
    CHECK_STB -->|Yes| APPEND_STB["Append STB rental"]
    CHECK_STB -->|No| CHECK_SMALIN{"Smart link 1?"}
    APPEND_STB --> CHECK_SMALIN
    
    CHECK_SMALIN -->|Yes| APPEND_SMALIN["Append smart link"]
    CHECK_SMALIN -->|No| CHECK_GH{"TH 1?"}
    APPEND_SMALIN --> CHECK_GH
    
    CHECK_GH -->|Yes| APPEND_GH["Append TH"]
    CHECK_GH -->|No| CHECK_INETSGWL{"Internet gateway 1?"}
    APPEND_GH --> CHECK_INETSGWL
    
    CHECK_INETSGWL -->|Yes| APPEND_INETSGWL["Append internet gateway"]
    CHECK_INETSGWL -->|No| CHECK_NTFMLPRM{"Notif family premium 1?"}
    APPEND_INETSGWL --> CHECK_NTFMLPRM
    
    CHECK_NTFMLPRM -->|Yes| APPEND_NTFMLPRM["Append notif family premium"]
    CHECK_NTFMLPRM -->|No| CHECK_TVTTEL{"Tel or TV selected?"}
    APPEND_NTFMLPRM --> CHECK_TVTTEL
    
    CHECK_TVTTEL -->|Yes| APPEND_BREAK["Append 2 newlines"]
    CHECK_TVTTEL -->|No| CHECK_TEL_SVC{"Tel selected 1?"}
    APPEND_BREAK --> CHECK_TEL_SVC
    
    CHECK_NET -->|No| CHECK_TEL_SVC
    
    CHECK_TEL_SVC -->|Yes| LOAD_TEL["Load tel course, options per line"]
    LOAD_TEL --> DETERM_TEL{"Tel course 1 or 2?"}
    
    DETERM_TEL -->|1-bangou| SET_TEL1["Set mlTelNm = 1-bangou svc name"]
    DETERM_TEL -->|2-bangou| SET_TEL2["Set mlTelNm = 2-bangou svc name"]
    
    SET_TEL1 --> CHECK_BMP1{"Line 1: BMP used + not cancelled?"}
    SET_TEL2 --> CHECK_BMP1
    
    CHECK_BMP1 -->|Yes| SET_BMP1USE["Set bmpUm1 = Use"]
    CHECK_BMP1 -->|No| SET_BMP1NO["Set bmpUm1 = Not use"]
    
    SET_BMP1USE --> BUILD_TEL_NAME["Append svc name + newline + line 1 BMP"]
    SET_BMP1NO --> BUILD_TEL_NAME
    
    BUILD_TEL_NAME --> CHECK_TEL_OPTIONS{"Tel options present?"}
    
    CHECK_TEL_OPTIONS -->|Yes| APPEND_TEL_OPT["Append sender number notice, packs, display, rejection"]
    CHECK_TEL_OPTIONS -->|No| SKIP_TEL_OPT["Skip tel options"]
    
    APPEND_TEL_OPT --> CHECK_LINE2{Line 2 services?}
    SKIP_TEL_OPT --> CHECK_LINE2
    
    CHECK_LINE2 -->|Yes| APPEND_LINE2["Append line 2 info + options"]
    CHECK_LINE2 -->|No| CHECK_TV_SVC{"TV selected 1?"}
    APPEND_LINE2 --> CHECK_TV_SVC
    
    CHECK_TEL_SVC -->|No| CHECK_TV_SVC
    
    CHECK_TV_SVC -->|Yes| LOAD_TV["Load TV course, STB count"]
    LOAD_TV --> DETERM_TV{"TV course basic/BS-star/BS?"}
    
    DETERM_TV -->|BasicHD/PremiumHD| APPEND_TV_BASIC["Append TV course + process each STB"]
    DETERM_TV -->|BS-Star| APPEND_BS_STAR["Append BS-Star course"]
    DETERM_TV -->|BS| APPEND_BS["Append BS"]
    
    APPEND_TV_BASIC --> CHECK_SECPACK{securityPackFlg?}
    APPEND_BS_STAR --> CHECK_SECPACK
    APPEND_BS --> CHECK_SECPACK
    
    CHECK_TV_SVC -->|No| CHECK_SECPACK
    
    CHECK_SECPACK -->|Yes| APPEND_SECUPAK_DTL{Mansion type?}
    APPEND_SECUPAK_DTL -->|Mansion| APPEND_SECUPAK_MAN["Append security pack detail mansion"]
    APPEND_SECUPAK_DTL -->|Other| APPEND_SECUPAK_HOME["Append security pack detail home"]
    
    APPEND_SECUPAK_MAN --> CHECK_FAMIPA_DTL{famipaFlg?}
    APPEND_SECUPAK_HOME --> CHECK_FAMIPA_DTL
    
    CHECK_FAMIPA_DTL -->|Yes| APPEND_FAMIPA_DTL["Append family pack detail, router info"]
    CHECK_FAMIPA_DTL -->|No| CHECK_ROUTER_MUSEN{"Wireless router 1?"}
    APPEND_FAMIPA_DTL --> CHECK_ROUTER_MUSEN
    
    CHECK_ROUTER_MUSEN -->|Yes| APPEND_ROUTER_WIRELESS["Append wireless router detail"]
    CHECK_ROUTER_MUSEN -->|No| CHECK_ROUTER_YUSEN{"Wired router 1?"}
    APPEND_ROUTER_WIRELESS --> CHECK_ROUTER_YUSEN
    
    CHECK_ROUTER_YUSEN -->|Yes| APPEND_ROUTER_WIRED["Append wired router detail"]
    CHECK_ROUTER_YUSEN -->|No| FINALIZE["Return serviceName"]
    APPEND_ROUTER_WIRED --> FINALIZE
```

**CRITICAL - Constant Resolution:**

| Constant | Value | Business Meaning |
|----------|-------|-----------------|
| `SELECT_SVC_NET_CHOICE` | `"1"` | Network (eo Hikari) service selected |
| `SELECT_SVC_TEL_CHOICE` | `"1"` | Telephone (eo Hikari Phone) service selected |
| `SELECT_SVC_TV_CHOICE` | `"1"` | Television (eo Hikari TV) service selected |
| `KEI_OVERWRITE_TRUE` | `"1"` | Contract overwrite flag - customer has a reserved contract change |
| `MSKM_KSN_SVC_HOME` | `"1"` | Reconnection service = Home (residential) |
| `MSKM_KSN_SVC_MANSION` | `"2"` | Reconnection service = Mansion (apartment building) |
| `MSKM_MNS_TYPE_MANSION` | `"1"` | Mansion type = Full mansion |
| `MSKM_MNS_TYPE_MEZON` | `"2"` | Mansion type = Mezon (mid-size apartment) |
| `TK_HOSHIKI_PTN_VDSL` | `"1"` | Delivery pattern = VDSL |
| `TK_HOSHIKI_PTN_VDSLS` | `"2"` | Delivery pattern = VDSL-S (VDSL-S variant) |
| `NET_COURSE_100M` | `"1"` | Net course = 100M speed plan |
| `NET_COURSE_200M` | `"2"` | Net course = 200M speed plan |
| `NET_COURSE_1G` | `"3"` | Net course = 1G speed plan |
| `NET_COURSE_100M_LIGHT` | `"4"` | Net course = 100M Light plan |
| `TEL_COURSE_1BANGOU_SVC` | `"1"` | Phone course = 1-bangou (single line) |
| `TEL_COURSE_2BANGOU_SVC` | `"2"` | Phone course = 2-bangou (second line) |
| `USE_BMP_USE` | (resolved from `JFUStrConst.USE_BMP_USE`) | Number port (BMP) is in use |
| `BMP_CANCEL_FLG_CNL` | (resolved from `JFUStrConst.BMP_CANCEL_FLG_CNL`) | Number port cancellation flag = cancelled |
| `RETURN_CODE` | `"\r
"` | Carriage return + line feed (newline) |
| `HALF_SPACE` | `" "` | Half-width space |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `webNewInfoBean` | `X31SDataBeanAccess` | The web data bean containing all subscription information for the customer - includes contract services, network (eo Hikari), telephone (eo Hikari Phone), TV (eo Hikari TV), customer info, and mansion details |

**Instance fields / external state read:**

| Source | Description |
|--------|-------------|
| `getKeiyakusvcinfo()` | Retrieves contract service info bean |
| `getEonet()` | Retrieves eo Hikari network info bean |
| `getEotel()` | Retrieves eo Hikari telephone info beans (array, indexed 0 and 1 for line 1 and line 2) |
| `getEotv()` | Retrieves eo Hikari TV info bean |
| `getKeiyakuinfo()` | Retrieves customer information bean |

## 4. CRUD Operations / Called Services

The method reads data from multiple data beans and service component (SC) methods but does not perform direct database CRUD operations. All data access is through the data bean layer.

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `getKeiyakusvcinfo` | (internal) | Contract service data bean | Retrieves the contract services bean for the customer |
| R | `getEonet` | (internal) | eo Hikari network data bean | Retrieves the eo Hikari network service bean |
| R | `getEotel` | (internal) | eo Hikari telephone data bean array | Retrieves telephone service beans (line 1 and optionally line 2) |
| R | `getEotv` | (internal) | eo Hikari TV data bean | Retrieves the eo Hikari TV service bean |
| R | `getKeiyakuinfo` | (internal) | Customer information bean | Retrieves the customer information bean |
| R | `OneStopDataBeanAccessArray.getDataBean` | (internal) | - | Gets mansion info bean from bean array |
| R | `OneStopDataBeanAccess.getDataBeanArray` | (internal) | - | Accesses data bean arrays from webNewInfoBean |
| R | `OneStopDataBeanAccess.sendMessageString` | (internal) | - | Extracts string values from various data beans by key |
| R | `JFUWebCommon.getDispText` | Screen `FUW00114` | Display text table | Looks up display text strings by screen ID and key for service names, options, and descriptions |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | (internal) | `FUW00164SFLogic.setFormBeanMailInfo()` -> `selectSvcNm` | Display text lookups [R] - email service name text |

**Terminal operations from this method:**
All terminal operations are Read-only display text lookups via `JFUWebCommon.getDispText()` using screen ID `FUW00114` and various keys. No database writes are performed by this method.

## 6. Per-Branch Detail Blocks

**Block 1** — [SET] `(variable declarations)` (L2070-2090)

> Initializes all data bean references and extracts key delivery/service pattern values from the mansion and customer info.

| # | Type | Code |
|---|------|------|
| 1 | SET | `serviceName = new StringBuilder()` // Empty result accumulator |
| 2 | CALL | `bnKykSrv = getKeiyakusvcinfo(webNewInfoBean)` // Contract services bean |
| 3 | CALL | `bnNet = getEonet(webNewInfoBean)` // Network bean |
| 4 | CALL | `bnEotel = getEotel(webNewInfoBean)` // Telephone beans [0]=line1, [1]=line2 |
| 5 | CALL | `bnTv = getEotv(webNewInfoBean)` // TV bean |
| 6 | CALL | `keiyakushaInfoBean = getKeiyakuinfo(webNewInfoBean)` // Customer info |
| 7 | CALL | `mansionInfoBean = webNewInfoBean.getDataBeanArray(MANSION_INFO).getDataBean(0)` // Mansion info |
| 8 | EXEC | `tkHoshikiPtnCd = mansionInfoBean.sendMessageString(TEIKYO_HOSHIKI_PTN_CD_16, DATABEAN_GET_VALUE)` // Delivery pattern code |
| 9 | EXEC | `mskm_ksn_svc = webNewInfoBean.sendMessageString(MSKM_KSN_SVC_06, DATABEAN_GET_VALUE)` // Reconnection service type |
| 10 | EXEC | `mskmMnsType = webNewInfoBean.sendMessageString(MSKM_MNS_TYPE_06, DATABEAN_GET_VALUE)` // Mansion type |
| 11 | EXEC | `svc_net = bnKykSrv.sendMessageString(SELECT_SVC_NET_10, DATABEAN_GET_VALUE)` // Net selected flag |
| 12 | EXEC | `svc_tv = bnKykSrv.sendMessageString(SELECT_SVC_TV_10, DATABEAN_GET_VALUE)` // TV selected flag |
| 13 | EXEC | `svc_tel = bnKykSrv.sendMessageString(SELECT_SVC_TEL_10, DATABEAN_GET_VALUE)` // Tel selected flag |
| 14 | SET | `famipaFlg = false` // Family pack flag |
| 15 | SET | `securityPackFlg = false` // Security pack flag (ANK-3149) |
| 16 | EXEC | `kshadd_cmf = keiyakushaInfoBean.sendMessageString(KSHADD_OVERWRITE_FLG_09, DATABEAN_GET_VALUE)` // Contract overwrite flag |

**Block 2** — [IF] `(kshadd_cmf = KEI_OVERWRITE_TRUE = "1")` (L2093-2100)

> If the customer has a contract change reservation, append a message indicating the contract information has been modified.

| # | Type | Code |
|---|------|------|
| 1 | SET | `mail_text_kyksh = JFUWebCommon.getDispText(SCREEN_ID_FUW00114, ML_DSP_CHG_RSV)` // "Contract change reservation" text |
| 2 | EXEC | `serviceName.append(mail_text_kyksh)` // Append contract change message |
| 3 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 4 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |

**Block 3** — [IF] `(svc_net = SELECT_SVC_NET_CHOICE = "1")` (L2103-2265)

> Network (eo Hikari) service is selected. Loads network-specific options, determines the reconnection service type and course, and appends all network add-ons.

**Block 3.1** — [SET] `(Load network option values)` (L2108-2145)

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `netCourse = bnNet.sendMessageString(NET_COURSE_11, DATABEAN_GET_VALUE)` // Network course code |
| 2 | EXEC | `netSokuwari = bnNet.sendMessageString(NET_SOKUWARI_11, DATABEAN_GET_VALUE)` // Instant discount |
| 3 | EXEC | `netChowari = bnNet.sendMessageString(NET_CHOWARI_11, DATABEAN_GET_VALUE)` // Long-term discount |
| 4 | EXEC | `netAutoKeizoku = bnNet.sendMessageString(AUTO_KEIZOKU_11, DATABEAN_GET_VALUE)` // Auto-continuation |
| 5 | EXEC | `netFamipa = bnNet.sendMessageString(FP_MSKM_11, DATABEAN_GET_VALUE)` // Family pack |
| 6 | EXEC | `netRemote = bnNet.sendMessageString(RMTSPRT_MSKM_11, DATABEAN_GET_VALUE)` // Remote support |
| 7 | EXEC | `netPlc = bnNet.sendMessageString(PLC_MSKM_11, DATABEAN_GET_VALUE)` // PLC |
| 8 | EXEC | `netStb = bnNet.sendMessageString(NET_STICK_STB_MSKM_11, DATABEAN_GET_VALUE)` // STB rental |
| 9 | EXEC | `netSmalin = bnNet.sendMessageString(TABLET_TANMT_MSKM_11, DATABEAN_GET_VALUE)` // Smart link |
| 10 | EXEC | `netGh = bnNet.sendMessageString(GH_TANMT_11, DATABEAN_GET_VALUE)` // TH (ANK-3217) |
| 11 | EXEC | `netSecurityPack = bnNet.sendMessageString(SECURITY_PACK_MSKM_11, DATABEAN_GET_VALUE)` // Security pack (ANK-3149) |
| 12 | EXEC | `netInetsgwl = bnNet.sendMessageString(INETSGWL_MSKM_11, DATABEAN_GET_VALUE)` // Internet gateway (ANK-3149) |
| 13 | EXEC | `netNtfmlprm = bnNet.sendMessageString(NTFMLPRM_MSKM_11, DATABEAN_GET_VALUE)` // Notif family premium (ANK-3149) |
| 14 | EXEC | `netPremiumPack = bnNet.sendMessageString(PREMIUM_PACK_11, DATABEAN_GET_VALUE)` // Premium pack (ANK-3149) |

**Block 3.2** — [IF-ELSE-IF] `(Determine reconnection service type for net)` (L2148-2164)

> Determines the network service name based on reconnection service type and mansion type.

| # | Type | Code | Condition |
|---|------|------|-----------|
| 1 | SET | `mlNetSvcNm = getDispText(SCREEN_ID_FUW00114, ML_DSP_NET_HF)` | `mskm_ksn_svc = MSKM_KSN_SVC_HOME = "1"` (Home) |
| 2 | SET | `mlNetSvcNm = getDispText(SCREEN_ID_FUW00114, ML_DSP_NET_MZ)` | `mskm_ksn_svc = "2" AND mskmMnsType = MSKM_MNS_TYPE_MEZON = "2"` (Mansion + Mezon) |
| 3 | SET | `mlNetSvcNm = getDispText(SCREEN_ID_FUW00114, ML_DSP_NET_MF)` | `mskm_ksn_svc = "2" AND mskmMnsType = MSKM_MNS_TYPE_MANSION = "1"` (Mansion + Mansion) |

**Block 3.3** — [IF] `(VDSL course clearing)` (L2169-2173)

> If the service is Mansion + Mansion + VDSL/VDSLS delivery pattern, clear the netCourse to hide the course name.

| # | Type | Code | Condition |
|---|------|------|-----------|
| 1 | SET | `netCourse = EMPTY` | `mskm_ksn_svc = "2" AND mskmMnsType = "1" AND tkHoshikiPtnCd in ("1", "2")` |

**Block 3.4** — [IF-ELSE-IF] `(Map netCourse to display name)` (L2178-2192)

> Maps the network course code to its display name.

| # | Type | Code | Condition |
|---|------|------|-----------|
| 1 | SET | `mlCourse = getDispText(..., ML_DSP_100M)` | `netCourse = NET_COURSE_100M = "1"` |
| 2 | SET | `mlCourse = getDispText(..., ML_DSP_200M)` | `netCourse = NET_COURSE_200M = "2"` |
| 3 | SET | `mlCourse = getDispText(..., ML_DSP_1G)` | `netCourse = NET_COURSE_1G = "3"` |
| 4 | SET | `mlCourse = getDispText(..., ML_DSP_100ML)` | `netCourse = NET_COURSE_100M_LIGHT = "4"` |

**Block 3.5** — [EXEC] `(Append network service name)` (L2194-2196)

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `serviceName.append(mlNetSvcNm)` // Type name |
| 2 | EXEC | `serviceName.append(HALF_SPACE)` // Space |
| 3 | EXEC | `serviceName.append(mlCourse)` // Net course |

**Block 3.6** — [IF] `(Instant discount - ANK-3149)` `(netSokuwari = NET_SOKUWARI_MSKM)` (L2199-2203)

> If instant discount is selected, append discount name.

| # | Type | Code |
|---|------|------|
| 1 | SET | `mlSokuwari = getDispText(..., ML_DSP_SOKUWARI)` // "Instant discount" text |
| 2 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 3 | EXEC | `serviceName.append(mlSokuwari)` // Append instant discount |

**Block 3.7** — [IF] `(Long-term discount)` `(netChowari = NET_CHOWARI_MSKM)` (L2206-2210)

> If long-term discount is selected, append discount name.

| # | Type | Code |
|---|------|------|
| 1 | SET | `mlChowari = getDispText(..., ML_DSP_CHOWARI)` // "Long discount" text |
| 2 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 3 | EXEC | `serviceName.append(mlChowari)` // Append long discount |

**Block 3.8** — [IF] `(Auto-continuation)` `(netAutoKeizoku = NET_AUTO_KEIZOKU_MSKM)` (L2213-2217)

> If auto-continuation is selected, append it.

| # | Type | Code |
|---|------|------|
| 1 | SET | `mlAutoKeizoku = getDispText(..., ML_DSP_AUTOK)` // "Auto-continuation" text |
| 2 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 3 | EXEC | `serviceName.append(mlAutoKeizoku)` // Append auto-continuation |

**Block 3.9** — [IF] `(Family pack)` `(netFamipa = FP_MSKM_MSKM)` (L2220-2228)

> If the family pack is selected, append the family pack name and set `famipaFlg = true` for later detail rendering.

| # | Type | Code |
|---|------|------|
| 1 | SET | `mlFamipa = getDispText(..., ML_DSP_FAMIPA)` // "Family pack" text |
| 2 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 3 | EXEC | `serviceName.append(mlFamipa)` // Append family pack |
| 4 | SET | `famipaFlg = true` // Flag set for detail block later |

**Block 3.10** — [IF] `(Security pack - ANK-3149)` `(netSecurityPack = SECURITY_PAC_MSKM)` (L2231-2237)

> If eo security pack is selected, append it and set `securityPackFlg = true`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `mlSecurityPack = getDispText(..., ML_DSP_SECURITY_PACK)` // "eo security pack" text |
| 2 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 3 | EXEC | `serviceName.append(mlSecurityPack)` // Append security pack |
| 4 | SET | `securityPackFlg = true` // Flag set for detail block later |

**Block 3.11** — [IF] `(Remote support OR Premium pack - ANK-3149 modified)` `(netRemote = RMTSPRT_MSKM_MSKM OR netPremiumPack = SMALIN_PREMIUM_PACK_MSKM)` (L2241-2246)

> ANK-3149 modified: previously only checked remote support; now also checks premium pack. If either is selected, append remote support text.

| # | Type | Code |
|---|------|------|
| 1 | SET | `mlRemote = getDispText(..., ML_DSP_REMOTE)` // "Remote support" text |
| 2 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 3 | EXEC | `serviceName.append(mlRemote)` // Append remote support |

**Block 3.12** — [IF] `(PLC)` `(netPlc = PLC_MSKM_MSKM)` (L2249-2253)

> If PLC is selected, append it.

| # | Type | Code |
|---|------|------|
| 1 | SET | `mlPlc = getDispText(..., ML_DSP_PLC)` // "PLC" text |
| 2 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 3 | EXEC | `serviceName.append(mlPlc)` // Append PLC |

**Block 3.13** — [IF] `(STB rental)` `(netStb = NET_STICK_STB_MSKM)` (L2256-2260)

> If STB rental is selected, append it.

| # | Type | Code |
|---|------|------|
| 1 | SET | `mlStb = getDispText(..., ML_DSP_STB)` // "STB rental" text |
| 2 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 3 | EXEC | `serviceName.append(mlStb)` // Append STB rental |

**Block 3.14** — [IF] `(Smart link)` `(netSmalin = SMALIN_TABLET_MSKM)` (L2263-2267)

> If smart link is selected, append it.

| # | Type | Code |
|---|------|------|
| 1 | SET | `mlSmalin = getDispText(..., ML_DSP_SMALIN)` // "Smart link" text |
| 2 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 3 | EXEC | `serviceName.append(mlSmalin)` // Append smart link |

**Block 3.15** — [IF] `(TH - ANK-3217)` `(netGh = GH_TANMT_BUY)` (L2270-2275)

> TH (Tower House) add-on, added in ANK-3217.

| # | Type | Code |
|---|------|------|
| 1 | SET | `mlGh = getDispText(..., ML_DSP_GH)` // "TH" text |
| 2 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 3 | EXEC | `serviceName.append(mlGh)` // Append TH |

**Block 3.16** — [IF] `(Internet gateway - ANK-3149)` `(netInetsgwl = INETSGWL_MSKM)` (L2280-2285)

> Internet gateway add-on.

| # | Type | Code |
|---|------|------|
| 1 | SET | `mlInetsgwl = getDispText(..., ML_DSP_INETSGWL)` // "Internet gateway" text |
| 2 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 3 | EXEC | `serviceName.append(mlInetsgwl)` // Append internet gateway |

**Block 3.17** — [IF] `(Notif family premium - ANK-3149)` `(netNtfmlprm = NTFMLPRM_MSKM)` (L2288-2293)

> Notification family premium add-on.

| # | Type | Code |
|---|------|------|
| 1 | SET | `mlNtfmlprm = getDispText(..., ML_DSP_NTFMLPRM)` // "Notif family premium" text |
| 2 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 3 | EXEC | `serviceName.append(mlNtfmlprm)` // Append notif family premium |

**Block 3.18** — [IF] `(Tel or TV selected while net is also selected)` `(svc_tel = "1" OR svc_tv = "1")` (L2296-2301)

> If network is selected along with telephone or TV, append 2 newlines as a separator before the next service block.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 2 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |

**Block 4** — [IF] `(svc_tel = SELECT_SVC_TEL_CHOICE = "1")` (L2304-2468)

> Telephone (eo Hikari Phone) service branch. Processes up to 2 telephone lines with all their options.

**Block 4.1** — [SET] `(Load telephone values)` (L2309-2311)

| # | Type | Code |
|---|------|------|
| 1 | SET | `telCourse = webNewInfoBean.sendMessageString(TEL_COURSE_06, DATABEAN_GET_VALUE)` // Phone course |

**Block 4.2** — [IF-ELSE-IF] `(Determine telephone service name)` (L2314-2338)

| # | Type | Code | Condition |
|---|------|------|-----------|
| 1 | SET | `mlTelNm = getDispText(..., ML_DSP_TEL1)` | `telCourse = TEL_COURSE_1BANGOU_SVC = "1"` (1-bangou) |
| 2 | SET | `mlTelNm = getDispText(..., ML_DSP_TEL2)` | `telCourse = TEL_COURSE_2BANGOU_SVC = "2"` (2-bangou) |
| 3 | EXEC | `bmp_um_2 = bnEotel[1].sendMessageString(USE_BMP_12, DATABEAN_GET_VALUE)` | #2-bangou: BMP use flag |
| 4 | EXEC | `bmp_cancel_2 = bnEotel[1].sendMessageString(BMP_CANCEL_FLG_12, DATABEAN_GET_VALUE)` | #2-bangou: BMP cancel flag |
| 5 | SET | `mlBnpUm2 = getDispText(..., ML_DSP_USE)` | `bmp_um_2 = USE_BMP_USE AND bmp_cancel_2 != BMP_CANCEL_FLG_CNL` (BMP in use, not cancelled) |
| 6 | SET | `mlBnpUm2 = getDispText(..., ML_DSP_NOT_USE)` | Otherwise |

**Block 4.3** — [EXEC] `(Line 1 BMP processing - shared for both 1-bangou and 2-bangou)` (L2341-2353)

> Line 1 number port (BMP) status determination.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `bmp_um_1 = bnEotel[0].sendMessageString(USE_BMP_12, DATABEAN_GET_VALUE)` |
| 2 | EXEC | `bmp_cancel_1 = bnEotel[0].sendMessageString(BMP_CANCEL_FLG_12, DATABEAN_GET_VALUE)` |
| 3 | SET | `mlBnpUm1 = getDispText(..., ML_DSP_USE)` | `bmp_um_1 = USE_BMP_USE AND bmp_cancel_1 != BMP_CANCEL_FLG_CNL` |
| 4 | SET | `mlBnpUm1 = getDispText(..., ML_DSP_NOT_USE)` | Otherwise |

**Block 4.4** — [EXEC] `(Append telephone service name and line 1 BMP)` (L2355-2362)

| # | Type | Code |
|---|------|------|
| 1 | SET | `mlBnp1 = getDispText(..., ML_DSP_BNP1)` // "Line 1 number port" text |
| 2 | EXEC | `serviceName.append(mlTelNm)` // Service name |
| 3 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 4 | EXEC | `serviceName.append(mlBnp1)` // Line 1 number port label |
| 5 | EXEC | `serviceName.append(mlBnpUm1)` // Use / Not use |

**Block 4.5** — [IF] `(Sender number notice)` `(telHashinTch1 = HASHINNO_TCH_CHOICE)` (L2365-2370)

> If sender number notice is selected, append it.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `telHashinTch1 = bnEotel[0].sendMessageString(HASHINNO_TCH_12, DATABEAN_GET_VALUE)` |
| 2 | SET | `mlHashinTch1 = getDispText(..., ML_DSP_TEL_TCH1)` // "Sender number notice" text |
| 3 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 4 | EXEC | `serviceName.append(mlHashinTch1)` // Append sender number notice |

**Block 4.6** — [IF] `(eo Hikari Phone pack 3)` `(telEohtlPackThree1 = EOHTL_PACK3_CHOICE)` (L2373-2378)

> If eo Hikari Phone pack 3 is selected, append it.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `telEohtlPackThree1 = bnEotel[0].sendMessageString(EOHTL_PACK3_12, DATABEAN_GET_VALUE)` |
| 2 | SET | `mlEohtlPackThree1 = getDispText(..., ML_DSP_TEL_PACK31)` // "eo Hikari Phone pack 3" text |
| 3 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 4 | EXEC | `serviceName.append(mlEohtlPackThree1)` // Append pack 3 |

**Block 4.7** — [IF] `(eo Hikari Phone pack 7)` `(telEohtlPackSeven1 = EOHTL_PACK7_CHOICE)` (L2381-2386)

> If eo Hikari Phone pack 7 is selected, append it.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `telEohtlPackSeven1 = bnEotel[0].sendMessageString(EOHTL_PACK7_12, DATABEAN_GET_VALUE)` |
| 2 | SET | `mlEohtlPackSeven1 = getDispText(..., ML_DSP_TEL_PACK71)` // "eo Hikari Phone pack 7" text |
| 3 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 4 | EXEC | `serviceName.append(mlEohtlPackSeven1)` // Append pack 7 |

**Block 4.8** — [IF] `(Sender number display)` `(telHashinDsp1 = HASHINNO_DSP_CHOICE)` (L2389-2394)

> If sender number display is selected, append it.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `telHashinDsp1 = bnEotel[0].sendMessageString(HASHINNO_DSP_12, DATABEAN_GET_VALUE)` |
| 2 | SET | `mlHashinDsp1 = getDispText(..., ML_DSP_TEL_DSP1)` // "Sender number display" text |
| 3 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 4 | EXEC | `serviceName.append(mlHashinDsp1)` // Append sender number display |

**Block 4.9** — [IF] `(Rejection of unsolicited calls)` `(telHitsuchiKyohi1 = HITSUCHI_DNY_CHOICE)` (L2397-2402)

> If rejection of unsolicited calls is selected, append it.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `telHitsuchiKyohi1 = bnEotel[0].sendMessageString(HITSUCHI_DNY_12, DATABEAN_GET_VALUE)` |
| 2 | SET | `mlHitsuchiKyohi1 = getDispText(..., ML_DSP_TEL_KYOHI1)` // "Rejection of unsolicited calls" text |
| 3 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 4 | EXEC | `serviceName.append(mlHitsuchiKyohi1)` // Append rejection |

**Block 4.10** — [IF] `(2-bangou services - same pattern repeated for line 2)` `(telCourse = TEL_COURSE_2BANGOU_SVC = "2")` (L2407-2465)

> If there is a second telephone line, repeat all option processing for line 2.

| # | Type | Code |
|---|------|------|
| 1 | SET | `mlBnp2 = getDispText(..., ML_DSP_BNP2)` // "Line 2 number port" text |
| 2 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 3 | EXEC | `serviceName.append(mlBnp2)` // Line 2 label |
| 4 | EXEC | `serviceName.append(mlBnpUm2)` // Use / Not use (from Block 4.2) |
| 5-9 | EXEC | Extract all 5 option values from `bnEotel[1]` (same keys as line 1) |
| 10-20 | IF | For each of the 5 options, append display text if selected (same pattern as Block 4.5 through 4.9 but using line 2 keys) |

**Block 4.11** — [IF] `(TV selected with tel - separator)` `(svc_tv = SELECT_SVC_TV_CHOICE = "1")` (L2468-2472)

> If TV is also selected, append 2 newlines as separator.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 2 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |

**Block 5** — [IF] `(svc_tv = SELECT_SVC_TV_CHOICE = "1")` (L2475-2557)

> Television (eo Hikari TV) service branch. Processes TV course, STB configuration, and TV guide.

**Block 5.1** — [SET] `(Load TV values)` (L2477-2481)

| # | Type | Code |
|---|------|------|
| 1 | SET | `mlTvCourse = getDispText(..., ML_DSP_TV)` // "TV course" text |
| 2 | EXEC | `eoTVCourse = bnTv.sendMessageString(EO_TV_COURSE_13, DATABEAN_GET_VALUE)` // TV course code |
| 3 | EXEC | `stbCnt = bnTv.sendMessageString(STB_CNT_13, DATABEAN_GET_VALUE)` // STB count |
| 4 | EXEC | `serviceName.append(mlTvCourse)` // Service name |
| 5 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |

**Block 5.2** — [IF-ELSE-IF] `(TV course is BasicHD or PremiumHD?)` `(eoTVCourse = EO_TV_COURSE_BASIC)` (L2484-2538)

> If TV course is BasicHD or PremiumHD, iterate over each STB and determine its type.

| # | Type | Code |
|---|------|------|
| 1 | SET | `intStbCnt = Integer.valueOf(stbCnt)` // Convert count string to integer |
| 2 | FOR | `for i = 0 to intStbCnt` |
| 3 | SET | `mlStb = getDispText(..., ML_DSP_STB_TV[i])` // STB number display |
| 4 | EXEC | `stbHd = bnTv.sendMessageString(ML_STB_HD[i], DATABEAN_GET_VALUE)` // STB HD type |
| 5 | IF | `stbHd = STB_HD_BASIC = "BasicHD"` -> `mlStbHd = getDispText(..., ML_DSP_BASIC)` |
| 6 | IF | `stbHd = STB_HD_PREMIUM = "PremiumHD"` -> `mlStbHd = getDispText(..., ML_DSP_PREMIUM)` |
| 7 | IF | `stbHd = STB_SM_COMPACT = "Smart Compact"` -> `mlStbHd = getDispText(..., ML_DSP_S_COMPACT)` |
| 8 | IF | `stbHd = STB_SM_BASIC = "Smart Basic"` -> `mlStbHd = getDispText(..., ML_DSP_S_BASIC)` |
| 9 | IF | `else` -> `mlStbHd = getDispText(..., ML_DSP_S_PREMIUM)` |
| 10 | EXEC | `mlStbNm = bnTv.sendMessageString(ML_STB_HD_NM[i], DATABEAN_GET_VALUE)` // STB name |
| 11 | IF | `i > 0`: `serviceName.append(RETURN_CODE)` // Newline for STB > 1 |
| 12 | EXEC | `serviceName.append(mlStb)` // STB number |
| 13 | EXEC | `serviceName.append(mlStbHd)` // STB type |
| 14 | EXEC | `serviceName.append(mlStbNm)` // STB name |

**Block 5.3** — [IF] `(TV guide check)` `(guideCnt != GUIDEMG_CNT_UNNECESSARY AND guideCnt != EMPTY)` (L2542-2548)

> If a TV guide is not unnecessary, append the guide count text.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `guideCnt = bnTv.sendMessageString(GUIDEMG_CNT_13, DATABEAN_GET_VALUE)` |
| 2 | SET | `mlGuide = getDispText(..., ML_DSP_TV_GUIDE + guideCnt)` // Guide text (key indexed by count) |
| 3 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 4 | EXEC | `serviceName.append(mlGuide)` // Append guide info |

**Block 5.4** — [ELSE-IF] `(TV course = BS-Star)` `(eoTVCourse = EO_TV_COURSE_BS_STAR)` (L2551-2553)

> If TV course is BS-Star, append BS-Star course text.

| # | Type | Code |
|---|------|------|
| 1 | SET | `bsCourse = getDispText(..., ML_DSP_BS_STAR)` // "BS-Star course" text |
| 2 | EXEC | `serviceName.append(bsCourse)` // Append |

**Block 5.5** — [ELSE] `(TV course = BS)` (L2555-2557)

> Default: BS course.

| # | Type | Code |
|---|------|------|
| 1 | SET | `bsCourse = getDispText(..., ML_DSP_BS)` // "BS" text |
| 2 | EXEC | `serviceName.append(bsCourse)` // Append |

**Block 6** — [IF] `(securityPackFlg)` (L2561-2579)

> ANK-3149: Security pack detail block. Appends a detailed description for the security pack based on mansion type.

| # | Type | Code | Condition |
|---|------|------|-----------|
| 1 | SET | `mlSecurityPackDtl = getDispText(..., ML_DSP_SECUPA_DTL_MANSION)` | `mskm_ksn_svc = "2" AND mskmMnsType = MSKM_MNS_TYPE_MANSION = "1"` |
| 2 | EXEC | `serviceName.append(RETURN_CODE) + RETURN_CODE + mlSecurityPackDtl` | Mansion: 2 newlines then detail |
| 3 | SET | `mlSecurityPackDtl = getDispText(..., ML_DSP_SECUPA_DTL_HOME)` | Otherwise |
| 4 | EXEC | `serviceName.append(RETURN_CODE) + RETURN_CODE + mlSecurityPackDtl` | Home: 2 newlines then detail |

**Block 7** — [SET] `(Family pack and router detail texts)` (L2582-2586)

> Pre-fetch router-related display texts used in Blocks 8 and beyond.

| # | Type | Code |
|---|------|------|
| 1 | SET | `mlTknRouter = getDispText(..., ML_DSP_TKN_ROUTER)` // "eo Hikari multi-function router" |
| 2 | SET | `mlRouterMusenDtl = getDispText(..., ML_DSP_TKN_ROUTER_MUSEN_DTL)` // "Wireless router detail" |
| 3 | SET | `mlRouterYusenDtl = getDispText(..., ML_DSP_TKN_ROUTER_YUSEN_DTL)` // "Wired router detail" |

**Block 8** — [IF] `(famipaFlg)` (L2589-2608)

> Family pack detail block. If the family pack was selected (famipaFlg = true), append detailed description including the multi-function router information.

| # | Type | Code |
|---|------|------|
| 1 | SET | `mlFamipaDtl = getDispText(..., ML_DSP_FAMIPA_DTL)` // "Family pack detail" text |
| 2 | EXEC | `serviceName.append(RETURN_CODE) + RETURN_CODE + mlFamipaDtl` // 2 newlines + detail |
| 3 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 4 | IF | `mskmMnsType != MSKM_MNS_TYPE_MANSION` (Not mansion): append `mlFamipaMail` text + newline |
| 5 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 6 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 7 | EXEC | `serviceName.append(mlTknRouter)` // Multi-function router |
| 8 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 9 | EXEC | `serviceName.append(mlRouterMusenDtl)` // Wireless router detail |

**Block 9** — [ELSE-IF] `(Wireless router - not family pack)` `(bnNet.sendMessageString(TKN_ROUTER_MUSEN_MSKM_11, ...) = TKN_ROUTER_MUSEN_MSKM_MSKM)` (L2609-2615)

> If not family pack but the wireless router function is selected, append router text.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `bnNet.sendMessageString(TKN_ROUTER_MUSEN_MSKM_11, DATABEAN_GET_VALUE)` // Check wireless router flag |
| 2 | EXEC | `serviceName.append(RETURN_CODE) + RETURN_CODE` // 2 newlines |
| 3 | EXEC | `serviceName.append(mlTknRouter)` // Multi-function router |
| 4 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 5 | EXEC | `serviceName.append(mlRouterMusenDtl)` // Wireless router detail |

**Block 10** — [ELSE-IF] `(Wired router)` `(bnNet.sendMessageString(TKN_ROUTER_YUSEN_MSKM_11, ...) = TKN_ROUTER_YUSEN_MSKM_MSKM)` (L2616-2622)

> If not family pack and not wireless router but the wired router function is selected, append wired router text.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `bnNet.sendMessageString(TKN_ROUTER_YUSEN_MSKM_11, DATABEAN_GET_VALUE)` // Check wired router flag |
| 2 | EXEC | `serviceName.append(RETURN_CODE) + RETURN_CODE` // 2 newlines |
| 3 | EXEC | `serviceName.append(mlTknRouter)` // Multi-function router |
| 4 | EXEC | `serviceName.append(RETURN_CODE)` // Newline |
| 5 | EXEC | `serviceName.append(mlRouterYusenDtl)` // Wired router detail |

**Block 11** — [RETURN] `(Return serviceName)` (L2625)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return serviceName` // The fully constructed service name string |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|-----------------|
| `selectSvcNm` | Method | Select service name - constructs email-formatted service name string |
| `webNewInfoBean` | Field | Web new info bean - carries all subscription data for the customer at the time of email generation |
| `bnKykSrv` | Field | Contract service bean - holds contract service information |
| `bnNet` | Field | eo Hikari Network bean - holds network service details |
| `bnEotel` | Field | eo Hikari Telephone bean array - holds telephone info (index 0 = line 1, index 1 = line 2) |
| `bnTv` | Field | eo Hikari TV bean - holds TV service details |
| `keiyakushaInfoBean` | Field | Customer information bean - holds subscriber/custodian data |
| `mansionInfoBean` | Field | Mansion information bean - holds apartment building delivery and type data |
| `tkHoshikiPtnCd` | Field | Delivery pattern code - how service reaches the premises (e.g., VDSL, FTTH) |
| `mskm_ksn_svc` | Field | Mansion reconnection service type - "1" = Home, "2" = Mansion |
| `mskmMnsType` | Field | Mansion type - "1" = Mansion (full), "2" = Mezon (mid-size apartment) |
| `svc_net` | Field | Selected service net flag - "1" = Network service selected |
| `svc_tel` | Field | Selected service tel flag - "1" = Telephone service selected |
| `svc_tv` | Field | Selected service tv flag - "1" = Television service selected |
| `famipaFlg` | Field | Family pack flag - true if family pack was selected, enabling detail rendering |
| `securityPackFlg` | Field | Security pack flag - true if security pack was selected, enabling detail rendering |
| `kshadd_cmf` | Field | Customer info overwrite flag - "1" = Contract change reservation exists |
| `netCourse` | Field | Network course code - speed plan (100M=1, 200M=2, 1G=3, 100M Light=4) |
| `netSokuwari` | Field | Instant discount indicator - discount applied at contract time |
| `netChowari` | Field | Long-term discount indicator - ongoing monthly discount |
| `netAutoKeizoku` | Field | Auto-continuation indicator - automatic payment continuation |
| `netFamipa` | Field | Family pack indicator - bundled discount for multiple eo services |
| `netRemote` | Field | Remote support indicator - remote troubleshooting service |
| `netPlc` | Field | PLC indicator - Power Line Communication add-on |
| `netStb` | Field | STB rental indicator - Set-Top Box rental for TV |
| `netSmalin` | Field | Smart link indicator - smart home linking service |
| `netGh` | Field | TH indicator - Tower House add-on (ANK-3217) |
| `netSecurityPack` | Field | Security pack indicator - eo security package add-on (ANK-3149) |
| `netInetsgwl` | Field | Internet gateway indicator - internet gateway device add-on |
| `netNtfmlprm` | Field | Notification family premium indicator - premium notification service |
| `netPremiumPack` | Field | Premium pack indicator - premium package (checked with remote support, ANK-3149) |
| `mlNetSvcNm` | Field | Display name for network service type (Home/Mezon/Mansion) |
| `mlCourse` | Field | Display name for network course speed |
| `telCourse` | Field | Telephone course - "1" = 1-bangou (single line), "2" = 2-bangou (double line) |
| `bmp_um_1` / `bmp_um_2` | Field | Number port (BMP) use flag for line 1 / line 2 |
| `bmp_cancel_1` / `bmp_cancel_2` | Field | Number port cancellation flag for line 1 / line 2 |
| `mlBnpUm1` / `mlBnpUm2` | Field | Display text for BMP use: "Use" or "Not use" |
| `telHashinTch1/2` | Field | Sender number notice flag |
| `telEohtlPackThree1/2` | Field | eo Hikari Phone pack 3 flag |
| `telEohtlPackSeven1/2` | Field | eo Hikari Phone pack 7 flag |
| `telHashinDsp1/2` | Field | Sender number display flag |
| `telHitsuchiKyohi1/2` | Field | Rejection of unsolicited calls flag |
| `eoTVCourse` | Field | TV course code - determines TV type |
| `stbCnt` | Field | STB (Set-Top Box) count for TV service |
| `stbHd` | Field | STB HD type - BasicHD, PremiumHD, Smart Compact, Smart Basic, Smart Premium |
| `guideCnt` | Field | TV guide count - number of TV guides subscribed |
| `RETURN_CODE` | Constant | Carriage return + line feed (`\r
`) - used as newline separator |
| `HALF_SPACE` | Constant | Half-width space (`" "`) |
| `SELECT_SVC_NET_CHOICE` | Constant | `"1"` - Network service selected |
| `SELECT_SVC_TEL_CHOICE` | Constant | `"1"` - Telephone service selected |
| `SELECT_SVC_TV_CHOICE` | Constant | `"1"` - Television service selected |
| `KEI_OVERWRITE_TRUE` | Constant | `"1"` - Contract overwrite flag set |
| `MSKM_KSN_SVC_HOME` | Constant | `"1"` - Reconnection service type is Home |
| `MSKM_KSN_SVC_MANSION` | Constant | `"2"` - Reconnection service type is Mansion |
| `MSKM_MNS_TYPE_MANSION` | Constant | `"1"` - Mansion type is full mansion |
| `MSKM_MNS_TYPE_MEZON` | Constant | `"2"` - Mansion type is Mezon |
| `TK_HOSHIKI_PTN_VDSL` | Constant | `"1"` - Delivery pattern is VDSL |
| `TK_HOSHIKI_PTN_VDSLS` | Constant | `"2"` - Delivery pattern is VDSL-S |
| `NET_COURSE_100M` | Constant | `"1"` - 100M speed plan |
| `NET_COURSE_200M` | Constant | `"2"` - 200M speed plan |
| `NET_COURSE_1G` | Constant | `"3"` - 1G speed plan |
| `NET_COURSE_100M_LIGHT` | Constant | `"4"` - 100M Light plan |
| `TEL_COURSE_1BANGOU_SVC` | Constant | `"1"` - Single-line telephone |
| `TEL_COURSE_2BANGOU_SVC` | Constant | `"2"` - Two-line telephone |
| SOD | Acronym | Service Order Data - telecom order fulfillment entity |
| FTTH | Business term | Fiber To The Home - fiber-optic internet service |
| STB | Acronym | Set-Top Box - device for decoding TV signals |
| PLC | Acronym | Power Line Communication - power line-based networking |
| BMP | Acronym | Number Portability - mobile telephone number portability |
| TH | Acronym | Tower House - residential building type in Japanese telecom |
| eo Hikari | Business term | Fujitsu's fiber-optic internet service brand |
| eo Hikari Phone | Business term | Fujitsu's VoIP telephone service |
| eo Hikari TV | Business term | Fujitsu's IPTV service |
| Mezon | Business term | Mid-size apartment building (vs. full mansion) in Japanese real estate |
| 1-bangou / 2-bangou | Business term | 1-line / 2-line telephone service (bangou = "number"/"line") |
| ML_DSP_XXX | Constant prefix | Message label display prefix - keys used for screen FUW00114 text lookups |
| ANK-3149 | Change ticket | Added security pack support, internet gateway, notif family premium, premium pack, modified remote support to also check premium pack |
| ANK-3217 | Change ticket | Added TH (Tower House) add-on support |