# Business Logic - KKW04202SFLogic.reflectionBean() [628 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKW04202SF.KKW04202SFLogic` |
| Layer | Controller (Web view logic layer) |
| Module | `KKW04202SF` (Package: `eo.web.webview.KKW04202SF`) |

## 1. Role

### KKW04202SFLogic.reflectionBean()

This method is the central screen data reflection (population) orchestrator for the eo Light (Nuro Hikari) residential move-and-change (address modification) screen (KKW04202SF). Its Javadoc states: "Reflect input items to the screen." It receives a single-element `X31SDataBeanAccess[]` array containing all screen data beans and populates display-oriented fields within that same bean tree by reading from selection list (PDN) data beans and mapping coded values to human-readable labels.

The method handles seven broad service domains: (1) common header fields (address switch, work re-delegation choices), (2) new construction information (housing form, installation schedule, face opening campaign), (3) retraction/termination information (used equipment list, work scope, contact preferences), (4) eo Light Net service (additional info, option inheritance, router selection, penalty settings, administrative/standard fees), (5) eo Light Telephone service (phone number list with porting details, VA choice, option inheritance, penalties, fees), (6) eo Light Television service (STB/TV course list, target STB, penalty settings, fees), and (7) KCN multi-STB support with tuner recording capabilities.

It implements a bulk population/routing design pattern - iterating over multiple nested DataBean arrays (used equipment list, option inheritance lists, phone number list, STB/TV course list, exchange destination list) and setting derived display values (coded values mapped to names, date fields composed from year/month/day parts, HDD has/no-has logic based on constant comparisons) into the screen data beans. The method is called by `actionAdd` and `actionPreAdd`, meaning it acts as a shared data-preparation utility invoked at multiple entry points of the residential move-and-change workflow.

Additionally, it tracks pre-change and post-change service contract content numbers for both telephone and television services in temporary vectors (for Product No.133 address change detail - service contract content number mismatch handling), then writes these arrays back to the bean at the end of processing. It also conditionally delegates to `setNetOpHktgi` for network tab option inheritance setup when a package name value is present.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["reflectionBean paramBean[]"])
    INIT_LOCAL["Initialize 12 X31CVector<String> lists for tel/tv svc_kei_uw_no tracking"]
    VALIDATE["if paramBean == null or length != 1"]
    EARLY_EXIT["return"]
    COMMON_ADDR_SWCH["Common Header: Address Switch<br/>setPdnSelectedIndex + sendMessageString"]
    COMMON_KJ_RE_REQ["Common Header: Work Re-delegation Choice<br/>setPdnSelectedIndex + getPdnSelectedCd/Nm"]
    COMMON_TV_KJ_RE_REQ["Common Header: TV Work Re-delegation Choice<br/>setPdnSelectedIndex + getPdnSelectedCd/Nm"]
    NEWESTA_AD_FORM["New Construction Info: Housing Form<br/>getPdnSelectedCd + getPdnSelectedNm"]
    NEWESTA_AD_SHUNKO["New Construction Info: Installation Schedule Year/Month<br/>concat year + month"]
    NEWESTA_AD_MNKHT["New Construction Info: Face Opening Campaign<br/>getPdnSelectedCd + getPdnSelectedNm"]
    LOOP_TEKKYO["Loop: Retraction Info: Used Equipment List"]
    TEKKYO_USE_KIKI["Set: Retraction Type (getPdnSelectedNm)"]
    EOH_NET_HUKA["eo Light Net: Additional Info<br/>getPdnSelectedCd + getPdnSelectedNm"]
    LOOP_NET_OP["Loop: eo Light Net: Option Inheritance List"]
    NET_OP_HKTGI["Set: Process Division (getPdnSelectedNm)"]
    EOH_NET_ROUTER["eo Light Net: Set Router Name<br/>getPdnSelectedNm"]
    EOH_NET_PNLTY_NM["eo Light Net: Penalty Occurrence Division Name<br/>getPdnSelectedNm"]
    EOH_NET_PNLTY_CD["eo Light Net: Penalty Change Reason Code Name<br/>getPdnSelectedNm"]
    EOH_NET_JIMU["eo Light Net: Administrative Fee Division<br/>getPdnSelectedCd + getPdnSelectedNm"]
    EOH_NET_HYOUJYUN["eo Light Net: Standard Labor Cost Division<br/>getPdnSelectedCd + getPdnSelectedNm"]
    EOH_TEL_PRE_TCH["eo Light Telephone: Pre-Change Notification<br/>getPdnSelectedCd + getPdnSelectedNm"]
    LOOP_EOH_TEL["Loop: eo Light Telephone: Phone Number Info List"]
    TEL_KAIYAKU_KISAN["Retirement Settlement Date<br/>concat year/month/day"]
    TEL_BMP["Set: Port Has/HasNot (getPdnSelectedNm)"]
    TEL_PORT_NO["Set: Port Number (getPdnSelectedNm)"]
    TEL_SVKEI_UW["Get/Set Pre-change and Post-change Service Contract Content Numbers"]
    TEL_BMP_KJ_KIBO["Set: Port Work Request Date (concat year+month+day)"]
    TEL_BMP_KJ_FIX["Set: Port Work Fix Date + Time<br/>concat ymd + append ':00' to time"]
    TEL_JIGYOSYA["Port: Telecom Operator<br/>lookup CD in communication operator code management info"]
    TEL_JIGYOSYA_KTN["Port: Telecom Operator Base Point<br/>lookup CD in receiving base point code management info"]
    TEL_TENSO["Port: Address Transfer<br/>translate from ADDRESS_KIND_LIST"]
    EOH_TEL_VA["eo Light Telephone: VA Choice<br/>getPdnSelectedCd/Nm with VA_CHOICE_INDEX_08"]
    LOOP_TEL_OP["Loop: eo Light Telephone: Option Inheritance List"]
    LOOP_TEL_OP_NEST["Loop: Target Phone List (nested)<br/>Set: Process Division (getPdnSelectedNm)"]
    EOH_TEL_PNLTY["eo Light Telephone: Penalty Occurrence Division Name<br/>getPdnSelectedNm"]
    EOH_TEL_PNLTY_CD["eo Light Telephone: Penalty Change Reason Code Name<br/>getPdnSelectedNm"]
    EOH_TEL_JIMU["eo Light Telephone: Administrative Fee Division<br/>getPdnSelectedCd + getPdnSelectedNm"]
    EOH_TEL_HYOUJYUN["eo Light Telephone: Standard Labor Cost Division<br/>getPdnSelectedCd + getPdnSelectedNm"]
    EOH_TV_PNLTY["eo Light Television: Penalty Occurrence Division Name<br/>getPdnSelectedNm"]
    EOH_TV_PNLTY_CD["eo Light Television: Penalty Change Reason Code Name<br/>getPdnSelectedNm"]
    LOOP_TV_STB["Loop: eo Light TV: STB/TV Course List"]
    TV_STB_IDO["Set: STB Transfer Division (getPdnSelectedCd + Nm)"]
    TV_TV_PRAN["Set: TV Plan (getPdnSelectedCd + Nm)"]
    TV_TV_COURSE["Look up PCRS List to match pplan<br/>Set: TV Course Division"]
    TV_STB_DIV["Set: STB Division (getPdnSelectedCd + Nm)"]
    TV_HDD_CAPA["Set: HDD Capacity Division (getPdnSelectedCd + Nm)"]
    TV_HDD_UM["HDD Has/HasNot based on HDD_CAPA_CD<br/>HDD_CAPA_CD_NASI/4KSTB_NASI_OLD/NASI_VOD -> 無 else -> 有"]
    TV_SVKEI_UW_BF["Get Pre-change TV Service Contract Content Number"]
    TV_SVKEI_UW_AF["Get Post-change TV Service Contract Content Number"]
    LOOP_TV_KOKAN["Loop: eo Light TV: STB/TV Course List (Exchange Dest.)"]
    TV_KOKAN_STB_IDO["Set: STB Transfer Division (getPdnSelectedCd + Nm)"]
    TV_KOKAN_TV_PRAN["Set: TV Plan (getPdnSelectedCd + Nm)"]
    TV_KOKAN_TV_COURSE["Look up PCRS List to match pplan<br/>Set: TV Course Division"]
    TV_KOKAN_STB_DIV["Set: STB Division (getPdnSelectedCd + Nm)"]
    TV_KOKAN_HDD_CAPA["Set: HDD Capacity Division (getPdnSelectedCd + Nm)"]
    TV_KOKAN_HDD_UM["HDD Has/HasNot based on HDD_CAPA_CD<br/>HDD_CAPA_CD_NASI/NASI_VOD/4KSTB_NASI_OLD -> 無 else -> 有"]
    EOH_TV_TG_STB["eo Light TV: Target STB<br/>getPdnSelectedNm"]
    LOOP_TV_OP["Loop: eo Light TV: Option Inheritance List"]
    LOOP_TV_OP_NEST["Loop: Target STB List (nested)<br/>Set: Process Division (getPdnSelectedNm)"]
    EOH_TV_JIMU["eo Light TV: Addition Fee Division<br/>getPdnSelectedCd + getPdnSelectedNm"]
    EOH_TV_HYOUJYUN["eo Light TV: Standard Labor Cost Division<br/>getPdnSelectedCd + getPdnSelectedNm"]
    ARRAY_SET_TEL["Set collected tel_svc_kei_uw_no arrays<br/>sendMessageStringArray for 11 fields"]
    ARRAY_SET_TV["Set collected tv_svc_kei_uw_no arrays<br/>sendMessageStringArray for 6 fields"]
    LOOP_KCN_STB["Loop: KCN STB Support (5 units)<br/>Map TV Tuner CD 1=No recording 2=With recording"]
    KOJI_IRAI["Work Contact Method<br/>Map CD: 1=Concurrent 2=Separate 3=No work"]
    KOJI_IRAI_WORK["Work Type<br/>Map CD: 1=New work 2=Retraction work"]
    EOH_NET_PACK["eo Light Net: Package Name Conditional<br/>if not null blank -> setCd + setNm"]
    NET_OP_HKTGI_CALL["if eohNetPackPdnKh not null blank -> setNetOpHktgi(paramBean, eohNetPackPdnKh)"]
    TEKKYO_AD_SCOPE["Retraction Info: Work Scope Division<br/>getPdnSelectedCd + getPdnSelectedNm"]
    TEKKYO_AD_TEL["Retraction Info: Phone Contact Time Division<br/>getPdnSelectedCd + getPdnSelectedNm"]
    TEKKYO_AD_APO["Retraction Info: Work App Contact Division<br/>getPdnSelectedCd + getPdnSelectedNm"]
    TEKKYO_KJ_KIBO["Retraction Info: Work Request Date (concat ymd)"]
    TEKKYO_DSL["Retraction Info: Contract Dissolution Date (concat)"]
    TEKKYO_APO_KIGEN["Retraction Info: Work Request App Deadline (concat)"]
    USE_STP_STA["Usage Stop Start Date (concat ymd)"]
    END_NODE(["End / Return"])

    START --> INIT_LOCAL --> VALIDATE
    VALIDATE -->|Yes| EARLY_EXIT
    VALIDATE -->|No| COMMON_ADDR_SWCH
    COMMON_ADDR_SWCH --> COMMON_KJ_RE_REQ
    COMMON_KJ_RE_REQ --> COMMON_TV_KJ_RE_REQ
    COMMON_TV_KJ_RE_REQ --> NEWESTA_AD_FORM
    NEWESTA_AD_FORM --> NEWESTA_AD_SHUNKO
    NEWESTA_AD_SHUNKO --> NEWESTA_AD_MNKHT
    NEWESTA_AD_MNKHT --> LOOP_TEKKYO
    LOOP_TEKKYO --> TEKKYO_USE_KIKI
    TEKKYO_USE_KIKI --> EOH_NET_HUKA
    EOH_NET_HUKA --> LOOP_NET_OP
    LOOP_NET_OP --> NET_OP_HKTGI
    NET_OP_HKTGI --> EOH_NET_ROUTER
    EOH_NET_ROUTER --> EOH_NET_PNLTY_NM
    EOH_NET_PNLTY_NM --> EOH_NET_PNLTY_CD
    EOH_NET_PNLTY_CD --> EOH_NET_JIMU
    EOH_NET_JIMU --> EOH_NET_HYOUJYUN
    EOH_NET_HYOUJYUN --> EOH_TEL_PRE_TCH
    EOH_TEL_PRE_TCH --> LOOP_EOH_TEL
    LOOP_EOH_TEL --> TEL_KAIYAKU_KISAN
    TEL_KAIYAKU_KISAN --> TEL_BMP
    TEL_BMP --> TEL_PORT_NO
    TEL_PORT_NO --> TEL_SVKEI_UW
    TEL_SVKEI_UW --> TEL_BMP_KJ_KIBO
    TEL_BMP_KJ_KIBO --> TEL_BMP_KJ_FIX
    TEL_BMP_KJ_FIX --> TEL_JIGYOSYA
    TEL_JIGYOSYA --> TEL_JIGYOSYA_KTN
    TEL_JIGYOSYA_KTN --> TEL_TENSO
    TEL_TENSO --> EOH_TEL_VA
    EOH_TEL_VA --> LOOP_TEL_OP
    LOOP_TEL_OP --> LOOP_TEL_OP_NEST
    LOOP_TEL_OP_NEST --> EOH_TEL_PNLTY
    EOH_TEL_PNLTY --> EOH_TEL_PNLTY_CD
    EOH_TEL_PNLTY_CD --> EOH_TEL_JIMU
    EOH_TEL_JIMU --> EOH_TEL_HYOUJYUN
    EOH_TEL_HYOUJYUN --> EOH_TV_PNLTY
    EOH_TV_PNLTY --> EOH_TV_PNLTY_CD
    EOH_TV_PNLTY_CD --> LOOP_TV_STB
    LOOP_TV_STB --> TV_STB_IDO
    TV_STB_IDO --> TV_TV_PRAN
    TV_TV_PRAN --> TV_TV_COURSE
    TV_TV_COURSE --> TV_STB_DIV
    TV_STB_DIV --> TV_HDD_CAPA
    TV_HDD_CAPA --> TV_HDD_UM
    TV_HDD_UM --> TV_SVKEI_UW_BF
    TV_SVKEI_UW_BF --> TV_SVKEI_UW_AF
    TV_SVKEI_UW_AF --> LOOP_TV_KOKAN
    LOOP_TV_KOKAN --> TV_KOKAN_STB_IDO
    TV_KOKAN_STB_IDO --> TV_KOKAN_TV_PRAN
    TV_KOKAN_TV_PRAN --> TV_KOKAN_TV_COURSE
    TV_KOKAN_TV_COURSE --> TV_KOKAN_STB_DIV
    TV_KOKAN_STB_DIV --> TV_KOKAN_HDD_CAPA
    TV_KOKAN_HDD_CAPA --> TV_KOKAN_HDD_UM
    TV_KOKAN_HDD_UM --> EOH_TV_TG_STB
    EOH_TV_TG_STB --> LOOP_TV_OP
    LOOP_TV_OP --> LOOP_TV_OP_NEST
    LOOP_TV_OP_NEST --> EOH_TV_JIMU
    EOH_TV_JIMU --> EOH_TV_HYOUJYUN
    EOH_TV_HYOUJYUN --> ARRAY_SET_TEL
    ARRAY_SET_TEL --> ARRAY_SET_TV
    ARRAY_SET_TV --> LOOP_KCN_STB
    LOOP_KCN_STB --> KOJI_IRAI
    KOJI_IRAI --> KOJI_IRAI_WORK
    KOJI_IRAI_WORK --> EOH_NET_PACK
    EOH_NET_PACK --> NET_OP_HKTGI_CALL
    NET_OP_HKTGI_CALL --> TEKKYO_AD_SCOPE
    TEKKYO_AD_SCOPE --> TEKKYO_AD_TEL
    TEKKYO_AD_TEL --> TEKKYO_AD_APO
    TEKKYO_AD_APO --> TEKKYO_KJ_KIBO
    TEKKYO_KJ_KIBO --> TEKKYO_DSL
    TEKKYO_DSL --> TEKKYO_APO_KIGEN
    TEKKYO_APO_KIGEN --> USE_STP_STA
    USE_STP_STA --> END_NODE
```

**Processing Summary:**

The method processes data sequentially across all service domains. For scalar fields, it directly maps selection list values (PDN data beans) to screen fields via `getPdnSelectedCd` (code) and `getPdnSelectedNm` (name). For list fields (nested DataBean arrays), it iterates over each row and applies the same mapping pattern. Date fields are assembled by concatenating year, month, and day components. The HDD presence check uses a multi-branch conditional against `JKKCommonConst` constants (`HDD_CAPA_CD_NASI`, `HDD_CAPA_CD_NASI_VOD`, `HDD_CAPA_CD_4KSTB_NASI_OLD`) to determine "None" (null) vs "Has" (u) status. Service contract content numbers are collected into temporary `X31CVector<String>` lists during iteration and written back as arrays at the end. The `setNetOpHktgi` method is conditionally invoked when the eo Light Net package name is non-null, delegating network tab option inheritance setup.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `paramBean` | `X31SDataBeanAccess[]` | A single-element array representing the complete screen data bean tree for the residential move-and-change (address modification) screen. Contains all input fields, selection lists (PDN data beans), nested list DataBeans (used equipment, option inheritance, phone numbers, STB/TV courses), and display-oriented fields. The method reads selection values from PDN sub-beans and writes formatted display values back into the main bean hierarchy. |

**Instance fields / external state read:**
- `ADDRESS_KIND_LIST` - Static array of address transfer kind codes and their display names, used to map port address transfer division codes to human-readable labels.

## 4. CRUD Operations / Called Services

The method is a pure screen data population utility. It does not perform direct database operations. All interaction is through bean data manipulation via `sendMessageString`, `sendMessage`, `getDataBeanArray`, and `getCount` calls on `X31SDataBeanAccess` and `X31SDataBeanAccessArray`. It also calls helper methods of its own class.

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `KKW04202SFLogic.getPdnSelectedCd` | - | - | Get selected item code from a PDN (parameter/display name) data bean |
| - | `KKW04202SFLogic.getPdnSelectedNm` | - | - | Get selected item name from a PDN data bean |
| - | `KKW04202SFLogic.setPdnSelectedIndex` | - | - | Set the selected index of a PDN data bean |
| - | `KKW04202SFLogic.setNetOpHktgi` | - | - | Set network tab option inheritance setup; called conditionally when package name is non-null |
| - | `X31SDataBeanAccess.sendMessage` | - | - | Generic bean message dispatch for count operations |
| - | `X31SDataBeanAccess.sendMessageString` | - | - | Get/set string values in bean data tree (X31CWebConst.DATABEAN_GET_VALUE / DATABEAN_SET_VALUE) |
| - | `X31SDataBeanAccessArray.getDataBean` | - | - | Retrieve a specific row from a DataBean array |
| - | `X31SDataBeanAccessArray.getCount` | - | - | Get the count of rows in a DataBean array |
| - | `X31SDataBeanAccessArray.getDataBeanArray` | - | - | Retrieve a nested DataBean array from the bean tree |
| - | `X31SDataBeanAccess.sendMessageStringArray` | - | - | Set an array of String values to a bean field |
| - | `StringUtils.isEmpty` | - | - | Null/blank check utility |
| - | `JKKStringUtil.nullToBlank` | - | - | Convert null to empty string |
| - | `JKKCommonConst.HDD_CAPA_CD_*` | - | - | Constants for HDD capacity codes (NASI=no HDD, NASI_VOD, 4KSTB_NASI_OLD) |
| - | `JKKCommonConst.UM_M` | - | - | "No" (null) indicator constant |
| - | `JKKCommonConst.UM_U` | - | - | "Yes" (has) indicator constant |
| - | `JKKCommonConst.IDO_DIV_VALUE_00019` | - | - | Address modification registration transfer division code |
| - | `JKKCommonConst.IDO_DIV_VALUE_00020` | - | - | Address modification confirmation transfer division code |

Note: Although the pre-computed evidence lists many external service calls (`JKKBatClarisAuthCrdt.isNullBlank`, `JKKHttpCommunicator.sendMessage`, `OneStopDataBeanAccessArray.getCount`, etc.), those calls belong to **other methods** in the class, not this specific `reflectionBean` method. This method's scope is limited to bean population as detailed above.

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | KKW04202SFLogic.actionAdd() | actionAdd -> reflectionBean | N/A (pure data population, no DB/SC calls) |
| 2 | KKW04202SFLogic.actionPreAdd() | actionPreAdd -> reflectionBean | N/A (pure data population, no DB/SC calls) |

**Terminal operations from this method:** All are bean `sendMessageString` calls - no SC, CBS, or database operations are performed. The method only reads from and writes to the bean data tree.

## 6. Per-Branch Detail Blocks

**Block 1** — [VARIABLE DECLARATION] (L21758)

Initialize 12 X31CVector<String> lists for tracking pre-change and post-change service contract content numbers for telephone and television services (Product No.133 - address change detail, service contract content number mismatch handling).

| # | Type | Code |
|---|------|------|
| 1 | SET | `tel_svc_kei_uw_bf_list = new X31CVector<String>()` |
| 2 | SET | `tel_svc_kei_uw_upd_dtm_bf_list = new X31CVector<String>()` |
| 3 | SET | `tel_svc_kei_uw_tel_upd_dtm_bf_list = new X31CVector<String>()` |
| 4 | SET | `tel_svc_kei_uw_af_list = new X31CVector<String>()` |
| 5 | SET | `tel_svc_kei_uw_upd_dtm_af_list = new X31CVector<String>()` |
| 6 | SET | `tel_svc_kei_uw_tel_upd_dtm_af_list = new X31CVector<String>()` |
| 7 | SET | `tv_svc_kei_uw_bf_list = new X31CVector<String>()` |
| 8 | SET | `tv_svc_kei_uw_upd_dtm_bf_list = new X31CVector<String>()` |
| 9 | SET | `tv_svc_kei_uw_tv_upd_dtm_bf_list = new X31CVector<String>()` |
| 10 | SET | `tv_svc_kei_uw_af_list = new X31CVector<String>()` |
| 11 | SET | `tv_svc_kei_uw_upd_dtm_af_list = new X31CVector<String>()` |
| 12 | SET | `tv_svc_kei_uw_tv_upd_dtm_af_list = new X31CVector<String>()` |

**Block 2** — [IF] `paramBean == null || paramBean.length != 1` (L21771)

Early return if the input array is null or does not contain exactly one element.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return;` |

**Block 3** — [PROCESSING] Common Header: Address Switch (L21776-21779)

Set the address switch (premise type) selection index and send the displayed name to the bean.

| # | Type | Code |
|---|------|------|
| 1 | SET | `setPdnSelectedIndex(paramBean[0], KKW04202SFConst.CMN_AD_SWCH_PDN, ...)` |
| 2 | EXEC | `paramBean[0].sendMessageString(CMN_AD_SWCH_DIV_NM, SET_VALUE, getPdnSelectedNm(...))` |

**Block 4** — [PROCESSING] Common Header: Work Re-delegation Choice (L21782-21784)

Set the work re-delegation selection index and send both code and name.

| # | Type | Code |
|---|------|------|
| 1 | SET | `setPdnSelectedIndex(paramBean[0], KKW04202SFConst.CMN_KJ_RE_REQ_CHOICE_PDN, ...)` |
| 2 | EXEC | `paramBean[0].sendMessageString(CMN_KJ_RE_REQ_CHOICE_DIV, SET_VALUE, getPdnSelectedCd(...))` |
| 3 | EXEC | `paramBean[0].sendMessageString(CMN_KJ_RE_REQ_CHOICE_DIV_NM, SET_VALUE, getPdnSelectedNm(...))` |

**Block 5** — [PROCESSING] Common Header: TV Work Re-delegation Choice (L21786-21788)

Same pattern as Block 4 but for TV work re-delegation.

| # | Type | Code |
|---|------|------|
| 1 | SET | `setPdnSelectedIndex(paramBean[0], KKW04202SFConst.CMN_TV_KJ_RE_REQ_CHOICE_PDN, ...)` |
| 2 | EXEC | `paramBean[0].sendMessageString(CMN_TV_KJ_RE_REQ_CHOICE_DIV, SET_VALUE, getPdnSelectedCd(...))` |
| 3 | EXEC | `paramBean[0].sendMessageString(CMN_TV_KJ_RE_REQ_CHOICE_DIV_NM, SET_VALUE, getPdnSelectedNm(...))` |

**Block 6** — [PROCESSING] New Construction Info: Housing Form (L21791)

Set the housing form selection code.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `paramBean[0].sendMessageString(NEWESTA_AD_FORM_DIV, SET_VALUE, getPdnSelectedCd(...))` |
| 2 | EXEC | `paramBean[0].sendMessageString(NEWESTA_AD_FORM_DIV_CD, SET_VALUE, getPdnSelectedNm(...))` |

**Block 7** — [PROCESSING] New Construction Info: Installation Schedule Year/Month (L21793-21797)

Set the installation schedule year/month display name and compose a full year-month string by concatenating year and month parts.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `paramBean[0].sendMessageString(NEWESTA_AD_SETPLACE_SHUNKO_RSV_YM_MON, SET_VALUE, getPdnSelectedNm(...))` |
| 2 | EXEC | `paramBean[0].sendMessageString(NEWESTA_AD_SETPLACE_SHUNKO_RSV_YM, SET_VALUE, getYear.concat(month))` |

**Block 8** — [PROCESSING] New Construction Info: Face Opening Campaign (L21799-22000)

Set the face opening campaign availability code and name.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `paramBean[0].sendMessageString(NEWESTA_AD_MNKHT_CMP_APLY_DIV, SET_VALUE, getPdnSelectedCd(...))` |
| 2 | EXEC | `paramBean[0].sendMessageString(NEWESTA_AD_MNKHT_CMP_APLY_DIV_NM, SET_VALUE, getPdnSelectedNm(...))` |

**Block 9** — [FOR LOOP] Retraction Info: Used Equipment List (L22003-22013)

Iterate over the used equipment list (excluding STB) and set the retraction type for each row.

| # | Type | Code |
|---|------|------|
| 1 | SET | `tekkyo_ad_use_kiki_list = paramBean[0].getDataBeanArray(TEKKYO_AD_USE_KIKI_LIST)` |
| 2 | FOR | `for (int i = 0; i < tekkyo_ad_use_kiki_list.getCount(); i++)` |
| 3 | SET | `tekkyo_ad_use_kiki_map = tekkyo_ad_use_kiki_list.getDataBean(i)` |
| 4 | IF | `tekkyo_ad_use_kiki_map == null` -> continue |
| 5 | EXEC | `tekkyo_ad_use_kiki_map.sendMessageString(USE_KIKI_TEKKYO_DIV_05, SET_VALUE, getPdnSelectedNm(...))` |

**Block 10** — [PROCESSING] eo Light Net: Additional Info (L22017-22019)

Set the additional info code and name.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `paramBean[0].sendMessageString(EOH_NET_HUKA_INFO, SET_VALUE, getPdnSelectedCd(...))` |
| 2 | EXEC | `paramBean[0].sendMessageString(EOH_NET_HUKA_INFO_NM, SET_VALUE, getPdnSelectedNm(...))` |

**Block 11** — [FOR LOOP] eo Light Net: Option Inheritance List (L22022-22029)

Iterate over option inheritance rows and set the process division (display name).

| # | Type | Code |
|---|------|------|
| 1 | SET | `eoh_net_op_hktgi_list = paramBean[0].getDataBeanArray(EOH_NET_OP_HKTGI_LIST)` |
| 2 | FOR | `for (int i = 0; i < eoh_net_op_hktgi_list.getCount(); i++)` |
| 3 | SET | `eoh_net_op_hktgi_map = eoh_net_op_hktgi_list.getDataBean(i)` |
| 4 | IF | `eoh_net_op_hktgi_map == null` -> continue |
| 5 | EXEC | `eoh_net_op_hktgi_map.sendMessageString(OP_HKTGI_TRN_DIV_06, SET_VALUE, getPdnSelectedNm(...))` |

**Block 12** — [PROCESSING] eo Light Net: Router, Penalty, Fees (L22033-22052)

Set router name, penalty occurrence division name, penalty change reason code name, administrative fee division (code + name), and standard labor cost division (code + name).

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `paramBean[0].sendMessageString(EOH_NET_STC_ROUTER_NM, SET_VALUE, getPdnSelectedNm(...))` |
| 2 | EXEC | `paramBean[0].sendMessageString(EOH_NET_PNLTY_HASSEI_DIV_NM, SET_VALUE, getPdnSelectedNm(...))` |
| 3 | EXEC | `paramBean[0].sendMessageString(EOH_NET_PNLTY_CHGRE_CD_NM, SET_VALUE, getPdnSelectedNm(...))` |
| 4 | EXEC | `paramBean[0].sendMessageString(EOH_NET_JIMU_COMMISION_DIV, SET_VALUE, getPdnSelectedCd(...))` |
| 5 | EXEC | `paramBean[0].sendMessageString(EOH_NET_JIMU_COMMISION_NM, SET_VALUE, getPdnSelectedNm(...))` |
| 6 | EXEC | `paramBean[0].sendMessageString(EOH_NET_HYOUJYUN_KOJIHI_DIV, SET_VALUE, getPdnSelectedCd(...))` |
| 7 | EXEC | `paramBean[0].sendMessageString(EOH_NET_HYOUJYUN_KOJIHI_NM, SET_VALUE, getPdnSelectedNm(...))` |

**Block 13** — [PROCESSING] eo Light Telephone: Pre-Change Notification (L22056-22060)

Set pre-change notification code and name.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `paramBean[0].sendMessageString(EOH_TEL_PRE_TCH_DIV, SET_VALUE, getPdnSelectedCd(...))` |
| 2 | EXEC | `paramBean[0].sendMessageString(EOH_TEL_PRE_TCH_DIV_NM, SET_VALUE, getPdnSelectedNm(...))` |

**Block 14** — [FOR LOOP] eo Light Telephone: Phone Number Info List (L22063-22164)

Iterate over phone number entries. For each, set retirement settlement date, port has/not, port number, service contract content numbers, port work request/fix dates and times, telecom operator lookup, base point lookup, and address transfer mapping.

| # | Type | Code |
|---|------|------|
| 1 | SET | `eoh_tel_tln_list = paramBean[0].getDataBeanArray(EOH_TEL_TLN_LIST)` |
| 2 | FOR | `for (int i = 0; i < eoh_tel_tln_list.getCount(); i++)` |
| 3 | SET | `eoh_tel_tln_map = eoh_tel_tln_list.getDataBean(i)` |
| 4 | IF | `eoh_tel_tln_map == null` -> continue |
| 5 | SET | `kaiyakuKisanYear/Month/Day = eoh_tel_tln_map.sendMessageString(...GET_VALUE)` |
| 6 | SET | `eoh_tel_tln_map.sendMessageString(TLN_KAIYAKU_KISAN_YMD, SET_VALUE, year + "/" + month + "/" + day)` |
| 7 | EXEC | `eoh_tel_tln_map.sendMessageString(TLN_BMP_UM_07, SET_VALUE, getPdnSelectedNm(...))` |
| 8 | EXEC | `eoh_tel_tln_map.sendMessageString(TLN_PORT_NO_07, SET_VALUE, getPdnSelectedNm(...))` |
| 9 | SET | `tel_svc_kei_uw_bf_list.add(get BF svc_kei_uw_no)` |
| 10 | SET | `tel_svc_kei_uw_af_list.add(get AF svc_kei_uw_no)` |
| 11 | SET | `bmp_koji_ymd = year + month + day` |
| 12 | SET | `eoh_tel_tln_map.sendMessageString(TLN_BMP_KJ_KIBO_YMD_07, SET_VALUE, bmp_koji_ymd)` |
| 13 | SET | `bmpKiboTime += ":00"` if not empty |
| 14 | EXEC | `eoh_tel_tln_map.sendMessageString(TLN_BMP_KJ_KIBO_TIME_DIV_CD_07, SET_VALUE, bmpKiboTime)` |
| 15 | SET | `bmpKjFixYmd = year + month + day` |
| 16 | EXEC | `eoh_tel_tln_map.sendMessageString(TLN_BMP_KJ_FIX_YMD_07, SET_VALUE, bmpKjFixYmd)` |
| 17 | EXEC | `eoh_tel_tln_map.sendMessageString(TLN_BMP_KJ_FIX_TIME_DIV_CD_07, SET_VALUE, bmpFixTime)` |
| 18 | SET | `jigyosya = eoh_tel_tln_map.sendMessageString(...GET_VALUE)` |
| 19 | IF | `!StringUtils.isEmpty(jigyosya)` |
| 20 | IF-NEST | Loop over telecom operator code management info |
| 21 | IF-NEST | `jigyosya.equals(jigyosyoCd)` -> set name, break |
| 22 | SET | `jigyosyaKtn = eoh_tel_tln_map.sendMessageString(...GET_VALUE)` |
| 23 | IF | `!StringUtils.isEmpty(jigyosyaKtn)` |
| 24 | IF-NEST | Loop over base point code management info |
| 25 | IF-NEST | `jigyosyaKtn.equals(jigyosyoKtnCd)` -> set name, break |
| 26 | SET | `tenso_mt_div = ""` |
| 27 | IF | `!StringUtils.isEmpty(tenso_mt_div_cd)` |
| 28 | FOR-NEST | `for (String[] items : ADDRESS_KIND_LIST)` |
| 29 | IF-NEST | `items[0].equals(tenso_mt_div_cd)` -> `tenso_mt_div = items[1]`, break |
| 30 | EXEC | `eoh_tel_tln_map.sendMessageString(TLN_BMP_AD_TENSO_MT_DIV_07, SET_VALUE, tenso_mt_div)` |

**Block 15** — [PROCESSING] eo Light Telephone: VA Choice (L22167-22173)

Set VA choice code and name using `VA_CHOICE_INDEX_08` and `VA_CHOICE_CD_LIST_08` with custom index/code lists.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `paramBean[0].sendMessageString(EOH_TEL_VA_CHOICE, SET_VALUE, getPdnSelectedCd(..., VA_CHOICE_INDEX_08, VA_CHOICE_CD_LIST_08))` |
| 2 | EXEC | `paramBean[0].sendMessageString(EOH_TEL_VA_CHOICE_NM, SET_VALUE, getPdnSelectedNm(..., VA_CHOICE_INDEX_08, VA_CHOICE_CD_NM_LIST_08))` |

**Block 16** — [FOR LOOP] eo Light Telephone: Option Inheritance List (L22176-22190)

Iterate over option inheritance rows. For each, iterate over the nested target phone list and set the process division.

| # | Type | Code |
|---|------|------|
| 1 | SET | `eoh_tel_op_hktgi_list = paramBean[0].getDataBeanArray(EOH_TEL_OP_HKTGI_LIST)` |
| 2 | FOR | `for (int i = 0; i < eoh_tel_op_hktgi_list.getCount(); i++)` |
| 3 | SET | `eoh_tel_op_hktgi_map = eoh_tel_op_hktgi_list.getDataBean(i)` |
| 4 | IF | `eoh_tel_op_hktgi_map == null` -> continue |
| 5 | SET | `tel_op_hktgi_list = eoh_tel_op_hktgi_map.getDataBeanArray(TEL_OP_HKTGI_LIST_09)` |
| 6 | FOR | `for (int j = 0; j < tel_op_hktgi_list.getCount(); j++)` |
| 7 | SET | `tel_op_hktgi_map = tel_op_hktgi_list.getDataBean(j)` |
| 8 | IF | `tel_op_hktgi_map == null` -> continue |
| 9 | EXEC | `tel_op_hktgi_map.sendMessageString(OP_HKTGI_TRN_DIV_06, SET_VALUE, getPdnSelectedNm(...))` |

**Block 17** — [PROCESSING] eo Light Telephone: Penalties, Fees (L22194-22216)

Set penalty occurrence division name, penalty change reason code name, administrative fee division (code + name), and standard labor cost division (code + name).

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `paramBean[0].sendMessageString(EOH_TEL_PNLTY_HASSEI_DIV_NM, SET_VALUE, getPdnSelectedNm(...))` |
| 2 | EXEC | `paramBean[0].sendMessageString(EOH_TEL_PNLTY_CHGRE_CD_NM, SET_VALUE, getPdnSelectedNm(...))` |
| 3 | EXEC | `paramBean[0].sendMessageString(EOH_TEL_JIMU_COMMISION_DIV, SET_VALUE, getPdnSelectedCd(...))` |
| 4 | EXEC | `paramBean[0].sendMessageString(EOH_TEL_JIMU_COMMISION_NM, SET_VALUE, getPdnSelectedNm(...))` |
| 5 | EXEC | `paramBean[0].sendMessageString(EOH_TEL_HYOUJYUN_KOJIHI_DIV, SET_VALUE, getPdnSelectedCd(...))` |
| 6 | EXEC | `paramBean[0].sendMessageString(EOH_TEL_HYOUJYUN_KOJIHI_NM, SET_VALUE, getPdnSelectedNm(...))` |

**Block 18** — [PROCESSING] eo Light Television: Penalties (L22218-22224)

Set TV penalty occurrence division name and penalty change reason code name.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `paramBean[0].sendMessageString(EOH_TV_PNLTY_HASSEI_DIV_NM, SET_VALUE, getPdnSelectedNm(...))` |
| 2 | EXEC | `paramBean[0].sendMessageString(EOH_TV_PNLTY_CHGRE_CD_NM, SET_VALUE, getPdnSelectedNm(...))` |

**Block 19** — [FOR LOOP] eo Light TV: STB/TV Course List (L22228-22295)

Iterate over STB/TV course entries. For each, set STB transfer division, TV plan, TV course (via PCRS lookup), STB division, HDD capacity, and HDD has/not status. Also collect service contract content numbers.

| # | Type | Code |
|---|------|------|
| 1 | SET | `eoh_tv_stb_tv_course_list = paramBean[0].getDataBeanArray(EOH_TV_STB_TV_COURSE_LIST)` |
| 2 | SET | `pcrsList = paramBean[0].getDataBeanArray(PCRS_CD_INFO)` |
| 3 | FOR | `for (int i = 0; i < eoh_tv_stb_tv_course_list.getCount(); i++)` |
| 4 | SET | `eoh_tv_stb_tv_course_map = ...getDataBean(i)` |
| 5 | IF | `eoh_tv_stb_tv_course_map == null` -> continue |
| 6 | EXEC | `sendMessageString(STB_TV_STB_IDO_DIV_10, SET_VALUE, getPdnSelectedCd(...))` |
| 7 | EXEC | `sendMessageString(STB_TV_STB_IDO_DIV_NM_10, SET_VALUE, getPdnSelectedNm(...))` |
| 8 | EXEC | `sendMessageString(STB_TV_TV_PRAN_DIV_10, SET_VALUE, getPdnSelectedCd(...))` |
| 9 | EXEC | `sendMessageString(STB_TV_TV_PRAN_DIV_NM_10, SET_VALUE, getPdnSelectedNm(...))` |
| 10 | SET | `pplan = getPdnSelectedCd(...)` |
| 11 | FOR-NEST | `for (int cnt = 0; pcrsList.getCount() > cnt; cnt++)` |
| 12 | SET | `tgPplan = pcrsBean.sendMessageString(CD_DIV_LIST_28, GET_VALUE)` |
| 13 | IF | `pplan.equals(tgPplan)` |
| 14 | SET | `pcrs = pcrsBean.sendMessageString(SUB_CD_28, GET_VALUE)` |
| 15 | EXEC | `sendMessageString(STB_TV_TV_COURSE_DIV_10, SET_VALUE, pcrs)` |
| 16 | EXEC | `sendMessageString(STB_TV_STB_DIV_10, SET_VALUE, getPdnSelectedCd(...))` |
| 17 | EXEC | `sendMessageString(STB_TV_STB_DIV_NM_10, SET_VALUE, getPdnSelectedNm(...))` |
| 18 | SET | `hdd_capa_cd = getPdnSelectedCd(...)` |
| 19 | EXEC | `sendMessageString(STB_TV_HDD_CAPA_DIV_10, SET_VALUE, hdd_capa_cd)` |
| 20 | EXEC | `sendMessageString(STB_TV_HDD_CAPA_DIV_NM_10, SET_VALUE, getPdnSelectedNm(...))` |
| 21 | IF | `hdd_capa_cd == HDD_CAPA_CD_NASI OR 4KSTB_NASI_OLD OR NASI_VOD` |
| 22 | SET | `sendMessageString(STB_TV_HDD_UM_10, SET_VALUE, JKKCommonConst.UM_M)` |
| 23 | SET | `sendMessageString(STB_TV_HDD_UM_NM_10, SET_VALUE, "無")` |
| 24 | ELSE-IF | `StringUtils.isEmpty(hdd_capa_cd)` |
| 25 | SET | `sendMessageString(STB_TV_HDD_UM_NM_10, SET_VALUE, "")` |
| 26 | ELSE | `sendMessageString(STB_TV_HDD_UM_10, SET_VALUE, JKKCommonConst.UM_U)` |
| 27 | SET | `sendMessageString(STB_TV_HDD_UM_NM_10, SET_VALUE, "有")` |
| 28 | SET | `tv_svc_kei_uw_* lists.add(get svc_kei_uw_no values)` |

**Block 20** — [FOR LOOP] eo Light TV: STB/TV Course List - Exchange Destination (L22299-22357)

Similar to Block 19 but for exchange destination data bean array, with slightly different constant keys (`STB_TB_STB_IDO_PDN_KOKAN_SK`, etc.). HDD constant check uses `HDD_CAPA_CD_NASI`, `HDD_CAPA_CD_NASI_VOD`, `HDD_CAPA_CD_4KSTB_NASI_OLD`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `eoh_tv_stb_tv_course_kokan_sk_list = ...getDataBeanArray(EOH_TV_STB_TV_COURSE_LIST_KOKAN_SK)` |
| 2 | FOR | `for (int i = 0; i < eoh_tv_stb_tv_course_kokan_sk_list.getCount(); i++)` |
| 3 | SET | `eoh_tv_stb_tv_course_kokan_sk_map = ...getDataBean(i)` |
| 4 | IF | `== null` -> continue |
| 5 | EXEC | `sendMessageString(STB_TV_STB_IDO_DIV_10, SET_VALUE, getPdnSelectedCd(...STB_TB_STB_IDO_PDN_KOKAN_SK))` |
| 6 | EXEC | `sendMessageString(STB_TV_TV_PRAN_DIV_10, SET_VALUE, getPdnSelectedCd(...STB_TV_TV_COURSE_PDN_KOKAN_SK))` |
| 7 | FOR-NEST | Look up pplan in PCRS List, set TV Course |
| 8 | EXEC | `sendMessageString(STB_TV_STB_DIV_10, SET_VALUE, getPdnSelectedCd(...))` |
| 9 | EXEC | `sendMessageString(STB_TV_HDD_CAPA_DIV_10, SET_VALUE, hdd_capa_cd)` |
| 10 | IF | `hdd_capa_cd == HDD_CAPA_CD_NASI || NASI_VOD || 4KSTB_NASI_OLD` -> "無" |
| 11 | ELSE | -> "有" |

**Block 21** — [PROCESSING] eo Light TV: Target STB and Option Inheritance (L22360-22379)

Set target STB display name, iterate over TV option inheritance list (with nested target STB list), set process division for each, then set TV addition fee and standard labor cost divisions.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `paramBean[0].sendMessageString(EOH_TV_TG_STB, SET_VALUE, getPdnSelectedNm(...))` |
| 2 | SET | `eoh_tv_op_hktgi_list = ...getDataBeanArray(EOH_TV_OP_HKTGI_LIST)` |
| 3 | FOR | `for (int i = 0; i < eoh_tv_op_hktgi_list.getCount(); i++)` |
| 4 | SET | `tv_op_hktgi_list = eoh_tv_op_hktgi_map.getDataBeanArray(TV_OP_HKTGI_LIST_11)` |
| 5 | FOR | `for (int j = 0; j < tv_op_hktgi_list.getCount(); j++)` |
| 6 | EXEC | `tv_op_hktgi_map.sendMessageString(OP_HKTGI_TRN_DIV_06, SET_VALUE, getPdnSelectedNm(...))` |
| 7 | EXEC | `paramBean[0].sendMessageString(EOH_TV_JIMU_COMMISION_DIV, SET_VALUE, getPdnSelectedCd(...))` |
| 8 | EXEC | `paramBean[0].sendMessageString(EOH_TV_JIMU_COMMISION_NM, SET_VALUE, getPdnSelectedNm(...))` |
| 9 | EXEC | `paramBean[0].sendMessageString(EOH_TV_HYOUJYUN_KOJIHI_DIV, SET_VALUE, getPdnSelectedCd(...))` |
| 10 | EXEC | `paramBean[0].sendMessageString(EOH_TV_HYOUJYUN_KOJIHI_NM, SET_VALUE, getPdnSelectedNm(...))` |

**Block 22** — [PROCESSING] Service Contract Content Number Arrays (L22383-22396)

Write the collected pre-change/post-change service contract content numbers from temporary vectors back to bean fields.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `paramBean[0].sendMessageStringArray(EOH_TEL_SVKEI_UW_NO_BF, SET_DEF_VALUE, tel_svc_kei_uw_bf_list)` |
| 2 | EXEC | `paramBean[0].sendMessageStringArray(EOH_TEL_SVKEI_UW_NO_BF_UPD_DTM, SET_DEF_VALUE, tel_svc_kei_uw_upd_dtm_bf_list)` |
| 3 | EXEC | `paramBean[0].sendMessageStringArray(EOH_TEL_SVKEI_UW_NO_TL_BF_UPD_DTM, SET_DEF_VALUE, tel_svc_kei_uw_tel_upd_dtm_bf_list)` |
| 4 | EXEC | `paramBean[0].sendMessageStringArray(EOH_TEL_SVKEI_UW_NO_AF, SET_DEF_VALUE, tel_svc_kei_uw_af_list)` |
| 5 | EXEC | `paramBean[0].sendMessageStringArray(EOH_TEL_SVKEI_UW_NO_AF_UPD_DTM, SET_DEF_VALUE, tel_svc_kei_uw_upd_dtm_af_list)` |
| 6 | EXEC | `paramBean[0].sendMessageStringArray(EOH_TEL_SVKEI_UW_NO_TL_AF_UPD_DTM, SET_DEF_VALUE, tel_svc_kei_uw_tel_upd_dtm_af_list)` |
| 7 | EXEC | `paramBean[0].sendMessageStringArray(EOH_TV_SVKEI_UW_NO_BF, SET_DEF_VALUE, tv_svc_kei_uw_bf_list)` |
| 8 | EXEC | `paramBean[0].sendMessageStringArray(EOH_TV_SVKEI_UW_NO_BF_UPD_DTM, SET_DEF_VALUE, tv_svc_kei_uw_upd_dtm_bf_list)` |
| 9 | EXEC | `paramBean[0].sendMessageStringArray(EOH_TV_SVKEI_UW_NO_TV_BF_UPD_DTM, SET_DEF_VALUE, tv_svc_kei_uw_tv_upd_dtm_bf_list)` |
| 10 | EXEC | `paramBean[0].sendMessageStringArray(EOH_TV_SVKEI_UW_NO_AF, SET_DEF_VALUE, tv_svc_kei_uw_af_list)` |
| 11 | EXEC | `paramBean[0].sendMessageStringArray(EOH_TV_SVKEI_UW_NO_AF_UPD_DTM, SET_DEF_VALUE, tv_svc_kei_uw_upd_dtm_af_list)` |
| 12 | EXEC | `paramBean[0].sendMessageStringArray(EOH_TV_SVKEI_UW_NO_TV_AF_UPD_DTM, SET_DEF_VALUE, tv_svc_kei_uw_tv_upd_dtm_af_list)` |

**Block 23** — [FOR LOOP] KCN STB Support (5 units) (L22401-22443)

Iterate over 5 KCN STB TV tuner code values. For each non-empty value, map "1" to "No recording function" and "2" to "With recording function (Blu-ray included)".

| # | Type | Code |
|---|------|------|
| 1 | SET | `kcn_stb_1 = paramBean[0].sendMessageString(KCN_1_CNT_TV_TUNER_CD, GET_VALUE)` |
| 2 | IF | `!StringUtils.isEmpty(kcn_stb_1)` |
| 3 | IF | `"1".equals(kcn_stb_1)` -> set KCNTV_TUNE_NO to "録画機能なし" |
| 4 | IF | `"2".equals(kcn_stb_1)` -> set KCNTV_TUNE_NO to "録画機能付（ブルーレイ搭載）" |
| 5-10 | Same pattern for KCN_2 through KCN_5 | |

**Block 24** — [PROCESSING] Work Contact Method and Work Type (L22446-22470)

Map the work contact method and work type codes to display names.

| # | Type | Code |
|---|------|------|
| 1 | SET | `kojiiraiway = paramBean[0].sendMessageString(KOJI_IRAI_WAY, GET_VALUE)` |
| 2 | IF | `!StringUtils.isEmpty(kojiiraiway)` |
| 3 | IF | `"1".equals` -> "同時" (Concurrent) |
| 4 | IF | `"2".equals` -> "個別" (Separate) |
| 5 | IF | `"3".equals` -> "依頼工事なし" (No work) |
| 6 | SET | `kojiirai = paramBean[0].sendMessageString(IRAI_KOJI, GET_VALUE)` |
| 7 | IF | `!StringUtils.isEmpty(kojiirai)` |
| 8 | IF | `"1".equals` -> "新設工事" (New work) |
| 9 | IF | `"2".equals` -> "撤去工事" (Retraction work) |

**Block 25** — [IF] eo Light Net: Package Name Conditional (L22473-22483)

If the package name can be obtained, set the package code and name. Then check if package is non-null-blank and conditionally delegate to `setNetOpHktgi`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `eohNetPackPdnKh = JKKStringUtil.nullToBlank(...EOH_NET_PACK_NAME_KH, GET_VALUE)` |
| 2 | IF | `!StringUtils.isEmpty(paramBean[0].sendMessageString(EOH_NET_PACK_NAME_KH, GET_VALUE))` |
| 3 | EXEC | `paramBean[0].sendMessageString(EOH_NET_PACK_NAME_KH, SET_VALUE, getPdnSelectedCd(...))` |
| 4 | EXEC | `paramBean[0].sendMessageString(EOH_NET_PACK_PDN_NM, SET_VALUE, getPdnSelectedNm(...))` |
| 5 | IF | `!JKKStringUtil.isNullBlank(eohNetPackPdnKh)` |
| 6 | CALL | `setNetOpHktgi(paramBean, eohNetPackPdnKh)` |

**Block 26** — [PROCESSING] Retraction Info: Work Scope, Contact, Date Fields (L22485-22535)

Set retraction work scope division, phone contact time division, work app contact division, and compose request date, dissolution date, and app deadline from year/month/day parts.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `paramBean[0].sendMessageString(TEKKYO_AD_KJ_SCOPE_DIV, SET_VALUE, getPdnSelectedCd(...))` |
| 2 | EXEC | `paramBean[0].sendMessageString(TEKKYO_AD_KJ_SCOPE_DIV_NM, SET_VALUE, getPdnSelectedNm(...))` |
| 3 | EXEC | `paramBean[0].sendMessageString(TEKKYO_AD_KJ_TEL_RRK_KIBO_TIME_DIV, SET_VALUE, getPdnSelectedCd(...))` |
| 4 | EXEC | `paramBean[0].sendMessageString(TEKKYO_AD_KJ_TEL_RRK_KIBO_TIME_DIV_NM, SET_VALUE, getPdnSelectedNm(...))` |
| 5 | EXEC | `paramBean[0].sendMessageString(TEKKYO_AD_KJ_APO_RRKS_DIV, SET_VALUE, getPdnSelectedCd(...))` |
| 6 | EXEC | `paramBean[0].sendMessageString(TEKKYO_AD_KJ_APO_RRKS_DIV_NM, SET_VALUE, getPdnSelectedNm(...))` |
| 7 | SET | `kojiKiboYear/Mon/Day = ...GET_VALUE` |
| 8 | EXEC | `sendMessageString(TEKKYO_AD_KJ_KJ_KIBO_YMD, SET_VALUE, year.concat(mon).concat(day))` |
| 9 | SET | `dslYear/Mon/Day = ...GET_VALUE` |
| 10 | EXEC | `sendMessageString(TEKKYO_AD_KJ_DSL_YMD, SET_VALUE, year.concat(mon).concat(day))` |
| 11 | SET | `kjKiboApokigenYear/Mon/Day = ...GET_VALUE` |
| 12 | EXEC | `sendMessageString(TEKKYO_AD_KJ_KJ_KIBO_APO_KIGEN_YMD, SET_VALUE, year.concat(mon).concat(day))` |

**Block 27** — [PROCESSING] Usage Stop Start Date (L22538-22551)

Compose the usage stop start year-month-day from individual year/month/day parts.

| # | Type | Code |
|---|------|------|
| 1 | SET | `useStpStaYear/Mon/Day = ...GET_VALUE` |
| 2 | SET | `useStpStaYmd = year.concat(mon).concat(day)` |
| 3 | EXEC | `paramBean[0].sendMessageString(USE_STP_STA_YMD, SET_VALUE, useStpStaYmd)` |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `paramBean` | Field | Screen data bean array - carries all input, selection, and display fields for the residential move-and-change screen |
| `getPdnSelectedCd` | Method | Retrieves the selected code value from a PDN (parameter display name) data bean |
| `getPdnSelectedNm` | Method | Retrieves the human-readable name for a selected PDN code value |
| `setPdnSelectedIndex` | Method | Sets the selected index in a PDN data bean |
| `setNetOpHktgi` | Method | Sets network tab option inheritance configuration; delegated when package name is present |
| `X31SDataBeanAccess` | Class | Screen data bean class for holding individual row data |
| `X31SDataBeanAccessArray` | Class | Array container for nested DataBean collections |
| `X31CVector` | Class | Vector collection used to temporarily accumulate service contract content numbers |
| `KKW04202SF` | Module | Residential move-and-change (address modification) screen module for eo Light (Nuro Hikari) |
| PDN | Acronym | Parameter Display Name - selection list data bean containing code-name pairs for dropdowns |
| eo Light (eo光) | Business term | NTT Communications' fiber-optic broadband service brand (now Nuro Hikari) |
| New Construction (NEWESTA) | Domain | New housing construction information section of the screen |
| Retraction (TEKKYO) | Domain | Service retraction/termination information for equipment and contracts |
| STB | Acronym | Set-Top Box - device for receiving television signals |
| TV Course | Domain | Television subscription plan/course selection |
| HDD_CAPA_CD | Field | HDD capacity code - classifies STB hard drive configuration |
| HDD_CAPA_CD_NASI | Constant | No HDD capacity code |
| HDD_CAPA_CD_NASI_VOD | Constant | No HDD with VOD (Video on Demand) code |
| HDD_CAPA_CD_4KSTB_NASI_OLD | Constant | 4K STB no HDD (old model) code |
| UM_M | Constant | "No" (null) indicator - used for HDD absence display |
| UM_U | Constant | "Yes" (has) indicator - used for HDD presence display |
| VA Choice | Domain | Value-Added service choice for telephone service |
| KCN STB | Domain | KCN (likely a carrier/partner) multi-STB support with up to 5 units |
| TV Tuner CD | Field | TV tuner code - "1" = no recording function, "2" = with recording function |
| KOJI_IRAI_WAY | Field | Work contact method - how installation work contacts are handled: 1=Concurrent, 2=Separate, 3=No work |
| IRAI_KOJI | Field | Work type - "1" = New work, "2" = Retraction work |
| ADDRESS_KIND_LIST | Field | Static array mapping address transfer division codes to display names for porting address transfers |
| svc_kei_uw_no | Field | Service contract content number - internal identifier for service contract line items |
| svc_kei_uw_no_bf | Field | Pre-change service contract content number (before address change) |
| svc_kei_uw_no_af | Field | Post-change service contract content number (after address change) |
| UPDATE_DTM | Field | Update date-time timestamp field |
| Product No.133 | Feature | Address change detail - service contract content number mismatch handling feature |
| PCRS | Acronym | Price plan reference code - used to match TV subscription plans to their associated cost codes |
| PCRS_CD_INFO | Field | PCRS reference code management data bean array |
| CD_DIV_LIST_28 | Field | Code list field index 28 - used for plan code lookup in PCRS matching |
| SUB_CD_28 | Field | Sub-code field at index 28 - used to retrieve the cost code associated with a plan |
| USE_KIKI_TEKKYO_DIV_05 | Field | Used equipment retraction type code (index 05 suffix) |
| OP_HKTGI_TRN_DIV_06 | Field | Option inheritance process division code (index 06 suffix) |
| CD_DIV_LIST_25 | Field | Code list field index 25 - used for telecom operator code lookup |
| CD_DIV_NM_LIST_25 | Field | Code name list field index 25 - operator name for code lookup |
| TLN_KAIYAKU_KISAN_YMD | Field | Telephone retirement settlement date (year-month-day composed) |
| TLN_BMP_KJ_KIBO_YMD | Field | Telephone port work request date (composed from year+month+day) |
| TLN_BMP_KJ_FIX_YMD | Field | Telephone port work fix date (composed) |
| TLN_BMP_KJ_KIBO_TIME_DIV_CD | Field | Port work request time division code |
| TLN_BMP_KJ_FIX_TIME_DIV_CD | Field | Port work fix time division code (appends ":00" seconds) |
| TLN_BMP_MSKMJIG_07 | Field | Port telecom operator code |
| TLN_BMP_MSKMJIG_UK_KTN_07 | Field | Port telecom operator base point code |
| TLN_BMP_AD_TENSO_MT_DIV_CD_07 | Field | Port address transfer division code |
| USE_STP_STA_YMD | Field | Usage stop start date (composed from year+month+day) |
| EOH_NET_PACK_NAME_KH | Field | eo Light Net package name - conditionally triggers network option inheritance setup |
| EOH_NET_PACK_PDN_NM | Field | eo Light Net package display name |
| USE_SVC_CHG_DIV_HOR | Constant | Retention handling division code - used by getNetOrTelSvcChgDiv |
| USE_SVC_CHG_DIV_CON | Constant | Contract handling division code |
| USE_SVC_CHG_DIV_CHG | Constant | Change handling division code |
| USE_SVC_CHG_DIV_ADD | Constant | Addition handling division code |
| USE_SVC_CHG_DIV_DSL | Constant | Dissolution handling division code |
| USE_SVC_CHG_DIV_NOT | Constant | No-contract handling division code |
| IDO_DIV_VALUE_00019 | Constant | Address modification registration transfer division value |
| IDO_DIV_VALUE_00020 | Constant | Address modification confirmation transfer division value |
| getNetOrTelSvcChgDiv | Method | Determines net or telephone service change division type |
| isExistsItenm | Method | Checks if a service change division represents an existing contract/service |
| isExistsItens | Method | Checks if a service change division represents an active contract (con/con/ add) |
| getCtrlDspFlgNewestaKijiran | Method | Determines whether the notes field should be displayed for new construction screen (returns display code "1"/"2"/"3") |
