## 6. Per-Branch Detail Blocks

**Block 1** — [IF] `isErrClear` (L3559)
> If isErrClear is true, clear existing page errors and reset the net display status. This prevents error accumulation when the method is called fresh (from checkAllGamenError or checkGamenError). When called from smpAgntGet or tabletAgntGet, isErrClear is false to preserve errors from the calling context.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `clearPageErrInfo(KKW00124_ERR_INFO)` // Clear error info ID 4 |
| 2 | EXEC | `dataBean.sendMessageString(KKW00121SFConst.TAB_NET_DSP_STAT, X31CWebConst.DATABEAN_SET_VALUE, "")` // Reset net display status |

**Block 2** — [GET] Single Item Check: Assessment Notification (L3566-3579)
> Retrieve the assessment notification result from the service info data bean and perform a must-check validation. The SKEKKA_TCHI_22 field corresponds to "審査結果通知" (Assessment Notification Result).

| # | Type | Code |
|---|------|------|
| 1 | CALL | `dataBean.getDataBeanArray(KKW00121SFConst.SVC_MSKM_INFO)` // Get service info array |
| 2 | CALL | `dataBeanArray.getDataBean(KKW00124_TAB_INDEX)` // Get Net tab (index 0) |
| 3 | EXEC | `subDataBean.sendMessageString(KKW00121SFConst.SKEKKA_TCHI_22, X31CWebConst.DATABEAN_GET_VALUE)` // Get 審査結果通知 |
| 4 | SET | `skekkaTchi = result` // Assessment notification string |

**Block 2.1** — [IF] `skekkaTchi.length() == 0` [MUST-CHECK] (L3568)
> If the assessment notification is empty, it's a must-check field. Add error EKB1320_NW with references to SKEKKA_TCHI_1 through SKEKKA_TCHI_4 labels. Reset net display status.

| # | Type | Code |
|---|------|------|
| 1 | SET | `skekkaTchi.length() == 0` // Must-check condition |
| 2 | CALL | `addPageErrInfo(EKB1320_NW, MSG_SVC_NET + "審査結果通知", new String[]{"SKEKKA_TCHI_1", "SKEKKA_TCHI_2", "SKEKKA_TCHI_3", "SKEKKA_TCHI_4"}, KKW00124_ERR_INFO)` |
| 3 | EXEC | `dataBean.sendMessageString(TAB_NET_DSP_STAT, SET_VALUE, TAB_ERROR_ID)` |

**Block 3** — [CALL] checkTmckSkekkaCdDetail (L3578)
> Validates the assessment code detail (審査結果コード詳細). This is a delegated method call for TMCK assessment code validation.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `checkTmckSkekkaCdDetail(KKW00124_TAB_INDEX, "SKEKKA_CD_DTAIL_NET", KKW00124_ERR_INFO, KKW00124_REP_MSG_03, KKW00121SFConst.TAB_NET_DSP_STAT)` |

**Block 4** — [GET] Handling Fee Validation (L3581-3599)
> Retrieves the handling fee code and the "specified amount" field. Performs must-check on handling fee, then conditional check on specified amount (事務手数料指定額).

| # | Type | Code |
|---|------|------|
| 1 | CALL | `convertJimuCommisionIdxToCode(KKW00124_TAB_INDEX)` // Convert tab index to fee code |
| 2 | SET | `jimuCommision = result` // Handling fee code |
| 3 | EXEC | `subDataBean.sendMessageString(KKW00121SFConst.JIMU_COMMISION_SHITEI_22, X31CWebConst.DATABEAN_GET_VALUE)` // Get 事務手数料（指定） |
| 4 | SET | `jimuCommisionSitei = result` // Specified amount |

**Block 4.1** — [IF] `jimuCommision.length() == 0` [MUST-CHECK] (L3584)
> If handling fee is empty, add error EKB0010_TW. This is a must-check field.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `addPageErrInfo(EKB0010_TW, MSG_SVC_NET + "事務手数料", "JIMU_COMMISION", KKW00124_ERR_INFO)` |
| 2 | EXEC | `dataBean.sendMessageString(TAB_NET_DSP_STAT, SET_VALUE, TAB_ERROR_ID)` |

**Block 4.2** — [IF] `jimuCommision == JIMU_COMMISION_SHITEI && jimuCommisionSitei.length() == 0` (L3593)
> [JIMU_COMMISION_SHITEI = "事務手数料（指定）"] If the handling fee is "specified amount" but the specified amount field is empty, add error EKB0710_NW.

| # | Type | Code |
|---|------|------|
| 1 | SET | `JIMU_COMMISION_SHITEI = "事務手数料（指定）"` [CONSTANT] |
| 2 | CALL | `addPageErrInfo(EKB0710_NW, MSG_SVC_NET + "事務手数料（指定）" + "に「指定額」;事務手数料（指定）", "JIMU_COMMISION_SHITEI_NET", KKW00124_ERR_INFO)` |
| 3 | EXEC | `dataBean.sendMessageString(TAB_NET_DSP_STAT, SET_VALUE, TAB_ERROR_ID)` |

**Block 5** — [GET] Tablet Terminal Data Retrieval (L3601-3614)
> Retrieves tablet terminal name, payment method, buyer name, buy flag, premium pack flag, and (for ANK-3987) streaming media player data.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JKKWebCommon.getPullDownCode(dataBean, TABLET_TNMT_NM_LIST, SELECT_CD_17, TABLET_NM_LIST_17)` // Tablet terminal name |
| 2 | CALL | `JKKWebCommon.getPullDownCode(dataBean, TABLET_PAYWAY_LIST, SELECT_CD_58, CD_LIST_58)` // Payment method |
| 3 | EXEC | `dataBean.sendMessageString(TABLET_TNMT_BUY_UK_TNTSHA_NM, GET_VALUE)` // Buyer name |
| 4 | EXEC | `dataBean.sendMessageBoolean(TABLET_BUY, GET_VALUE)` // Buy flag |
| 5 | EXEC | `dataBean.sendMessageBoolean(TABLET_PREMIUM_PACK, GET_VALUE)` // Premium pack flag |
| 6 | CALL | `JKKWebCommon.getPullDownCode(dataBean, SMP_TNMT_NM_LIST, SMP_SELECT_CD_18, SMP_NM_LIST_18)` // Streaming player name [ANK-3987] |
| 7 | EXEC | `dataBean.sendMessageString(SMP_TNMT_BUY_UK_TNTSHA_NM, GET_VALUE)` // Streaming buyer name |

**Block 6** — [IF] `tabletPremiumPack` (L3615)
> If the premium pack subscription flag is set, validate that a tablet terminal is purchased.

**Block 6.1** — [IF] `!tabletBuy` (L3618)
> If premium pack is checked but tablet purchase is not selected, add error EKBB860__Q: "スマートリンクのプレミアムパック;タブレット端末の購入"

| # | Type | Code |
|---|------|------|
| 1 | CALL | `addPageErrInfo(EKBB860__Q, MSG_SVC_NET + "スマートリンクのプレミアムパック;タブレット端末の購入", "", KKW00124_ERR_INFO)` |

**Block 7** — [IF] `tabletBuy` (L3623)
> If tablet purchase is selected, validate terminal name, payment method, and buyer name.

**Block 7.1** — [IF] `tabletTnmtNm.equals("")` (L3627)
> If tablet terminal name is empty, add error EKBB870_NW: "スマートリンク;タブレット端末の端末名"

| # | Type | Code |
|---|------|------|
| 1 | CALL | `addPageErrInfo(EKBB870_NW, MSG_SVC_NET + "スマートリンク;タブレット端末の端末名", "TABLET_TNMT_NM", KKW00124_ERR_INFO)` |
| 2 | EXEC | `dataBean.sendMessageString(TAB_NET_DSP_STAT, SET_VALUE, TAB_ERROR_ID)` |

**Block 7.2** — [IF] `tabletPayway == null` (L3633)
> If payment method is null, iterate through each payment way item and add error EKBB870_NW for each one.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `dataBean.getDataBeanArray(TABLET_PAYWAY_LIST).getDataBean(0)` |
| 2 | EXEC | `tabletPaywayBean.sendMessage(CD_LIST_58, GET_COUNT)` // Get count |
| 3 | FOR | `for (int i = 0; i < count; i++)` |
| 4 | CALL | `addPageErrInfo(EKBB870_NW, MSG_SVC_NET + "スマートリンク;タブレット端末のお支払い方法", "TABLET_PAYWAY_" + i, KKW00124_ERR_INFO)` |
| 5 | EXEC | `dataBean.sendMessageString(TAB_NET_DSP_STAT, SET_VALUE, TAB_ERROR_ID)` |

**Block 7.3** — [IF] `!isCallTabletAgntGet && tabletTnmtBuyUkTntshaNm.equals("")` (L3651)
> If NOT called from tabletAgntGet AND buyer name is empty, add error EKBC870_KW: "スマートリンク;タブレット端末の端末購入受取担当者名"

| # | Type | Code |
|---|------|------|
| 1 | SET | `isCallTabletAgntGet` [PARAMETER] - skips validation when called from tablet screen |
| 2 | CALL | `addPageErrInfo(EKBC870_KW, MSG_SVC_NET + "スマートリンク;タブレット端末の端末購入受取担当者名", "TNMT_BUY_UK_TNTSHA_NM", KKW00124_ERR_INFO)` |
| 3 | EXEC | `dataBean.sendMessageString(TAB_NET_DSP_STAT, SET_VALUE, TAB_ERROR_ID)` |

**Block 7.4** — [IF] `!tabletPremiumPack && !ghFlg` (L3694, ANK-3217-00-00 MOD)
> [GH FLG CHECK] If NOT premium pack AND NOT GH (GMO-Hikari) terminal, add error EKBB880__Q: "スマートリンクのタブレット端末;プレミアムパックの申請". Modified in ANK-3217-00-00 to allow GH terminals as an alternative to premium pack.

**Block 7.4.1** — [GET] GH Flag Determination (L3673-3685)
> ANK-3217-00-00 ADD: Gets the selected terminal index and GH judge info, parses the GH flag from a comma-separated string.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JKKWebCommon.getPullDownIndex(dataBean, tabletTnmtNm, TABLET_TNMT_NM_LIST, TABLET_NM_LIST_17)` // Selected index |
| 2 | EXEC | `dataBean.sendMessageString(TABLET_GH_JUDGE_INFO_HOJI, GET_VALUE)` // GH judge info |
| 3 | SET | `ghFlg = false` // Default to not GH |
| 4 | EXEC | `ghJudgeInfo.replace("[", "").replace("]", "")` // Remove brackets |
| 5 | IF | `!isNullBlank(selectedIndex) && "1".equals(ghJudgeInfo.split(",")[Integer.parseInt(selectedIndex)])` |
| 6 | SET | `ghFlg = true` // Terminal is GH |

**Block 8** — [GET] Security/Family/Smart Premium Pack Check (L3698-3756, ANK-3149-20-00 ADD)
> Retrieves session-stored check results and validates consistency between displayed packs and actual service subscriptions.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JCCWebCommon.getScreenInfo(this, SESSION_KEY_MSKMDATA)` // Get session map |
| 2 | SET | `preMap1.get(MSKM_INFO_KEY_NAME)` // Get mskmInfoMap |
| 3 | SET | `mskmInfoMap1.get("KKSV008104CC")` // Get KKSV008104CC map |
| 4 | SET | `kksv008104CCMap.get("kk0451_EKK0451B030CBSMsg1List")` // wribList |
| 5 | SET | `kksv008104CCMap.get("EKK0351B512CBSMsg1List")` // opMsg1List |
| 6 | EXEC | `dataBean.sendMessageBoolean(OP_FAMILY_PACK, GET_VALUE)` |
| 7 | EXEC | `dataBean.sendMessageBoolean(OP_SECURITY_PACK, GET_VALUE)` |
| 8 | EXEC | `dataBean.sendMessageBoolean(TABLET_PREMIUM_PACK, GET_VALUE)` |
| 9 | FOR | `for (childMap : wribList)` - Iterate to find security pack and family pack |
| 10 | SET | `childMap1.get("kk0451_wrib_svc_cd")` // Discount service code |
| 11 | IF | `WRIB_SVC_CD_SECURITY_PACK.equals(wribSvcCd)` -> `securityPack = true` |
| 12 | IF | `WRIB_SVC_FAMIPA.equals(wribSvcCd)` -> `famiPack = true` |
| 13 | FOR | `for (childMap : opMsg1List)` - Iterate to find Smart Premium |
| 14 | SET | `childMap.get("kk0351_op_svc_cd")` |
| 15 | IF | `OP_SVC_CD_SMARTLINK_PREMIUM.equals(opSvcCd)` -> `prePack = true` |
| 16 | IF | `!opFamilyPackDsp && !opSecurityPackDsp && !tabletPremiumPackDsp` |
| 17 | IF | `securityPack || famiPack || prePack` |
| 18 | CALL | `addPageErrInfo(EKBD360__Q, EKBD360_REP_MESG_01 + ";" + EKBD360_REP_MESG_02, "", KKW00124_ERR_INFO)` |

**Block 9** — [CALL] Service Call via KKSV0119 Mapper (L3762-3790)
> Prepares the service call by creating a use case ID map, getting the operation date, building mapper instances, and calling the service component.

| # | Type | Code |
|---|------|------|
| 1 | SET | `paramBean = { dataBean }` |
| 2 | SET | `paramMap.put(TELEGRAM_INFO_USECASE_ID, KKSV0119)` // Use case ID |
| 3 | CALL | `JCCWebCommon.getOpeDate(this, null)` // Get operation date |
| 4 | CALL | `JCCWebCommon.getScreenInfo(this, SESSION_KEY_MSKMDATA)` // Get session data |
| 5 | SET | `mskmInfoMap = preMap.get(MSKM_INFO_KEY_NAME)` |
| 6 | SET | `netMap = mskmInfoMap.get("KKSV008104CC")` |
| 7 | SET | `usePlaceMap = mskmInfoMap.get("KKSV008110CC")` |
| 8 | NEW | `mapper = new KKSV0119_KKSV0119OPDBMapper()` |
| 9 | CALL | `mapper.setKKSV011901CC(paramBean, dataMap, FUNC_CD_2, opeDate)` |
| 10 | CALL | `mapper.setKKSV011902CC(paramBean, dataMap, FUNC_CD_2, opeDate, mansionMap, netMap)` |
| 11 | SET | `outputMap = new HashMap()` |
| 12 | CALL | `callService(paramMap, dataMap, outputMap, KKW00124_ERR_INFO)` |

**Block 9.1** — [IF] `!result` (L3789)
> If the service call failed, reset the net display status.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `dataBean.sendMessageString(TAB_NET_DSP_STAT, SET_VALUE, TAB_ERROR_ID)` |

**Block 10** — [IF] `svcKeiNo.length() > 0` (L3797)
> When a service detail number exists (new net was added during pre-registration check), validate router rental fee changes, family pack, handling fee changes, standard labor cost changes, private router, and family pack cancellation.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `dataBean.sendMessageString(SVC_KEI_NO_22, GET_VALUE)` // Get service detail number |
| 2 | IF | `svcKeiNo.length() > 0` // New net added during pre-registration |

**Block 10.1** — [IF] `!opFamilyPack` (L3800)
> Router rental fee change check. Compares current vs. previous router rental selections.

**Block 10.1.1** — [GET] Router Rental Values (L3802-3805)
> [OP_ROUTER_RENTAL_CD_MUSEN = "1"]

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JKKWebCommon.getPullDownCode(dataBean, OP_ROUTER_RENTAL_LIST, SELECT_CD_58, CD_LIST_58)` |
| 2 | SET | `opRouterRental = result` |
| 3 | CALL | `getOpRouterRental(usePlaceMap)` // Previous router rental |
| 4 | SET | `beforeOpRouterRental = result` |
| 5 | CALL | `getOpTakinoRouterRental(usePlaceMap)` // Previous Takino router |
| 6 | SET | `beforeOpTakinoRouterRental = result` |

**Block 10.1.2** — [IF] Router rental fee change detected (L3823-3834)
> If the screen shows no wireless router AND previous data had wireless router (or Takino router), flag change.
> OR if the screen shows wireless router AND previous data had none.

| # | Type | Code |
|---|------|------|
| 1 | SET | `OP_ROUTER_RENTAL_CD_MUSEN = "1"` [CONSTANT - No wireless router] |
| 2 | IF | `OP_ROUTER_RENTAL_CD_MUSEN.equals(opRouterRental) && !OP_ROUTER_RENTAL_CD_MUSEN.equals(beforeOpRouterRental) && !OP_ROUTER_RENTAL_CD_MUSEN.equals(beforeOpTakinoRouterRental)` |
| 3 | SET | `routerRantalFeeChgFlg = true` |
| 4 | IF | `!OP_ROUTER_RENTAL_CD_MUSEN.equals(opRouterRental) && (OP_ROUTER_RENTAL_CD_MUSEN.equals(beforeOpRouterRental) || OP_ROUTER_RENTAL_CD_MUSEN.equals(beforeOpTakinoRouterRental))` |
| 5 | SET | `routerRantalFeeChgFlg = true` |

**Block 10.1.3** — [IF] `routerRantalFeeChgFlg` (L3837)
> If router rental fee changed, add error EKB2860__Q.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `addPageErrInfo(EKB2860__Q, MSG_SVC_NET, "", KKW00124_ERR_INFO)` |

**Block 10.2** — [IF] Family pack related check (L3843-3848)
> If router change check passes AND family pack is selected AND there are non-family-pack routers, add error EKB5880_KW.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JKKWebCommon.chkChgKkopRouter(this)` |
| 2 | IF | `opFamilyPack && mapper.getNotFamilyPackRouterCount(paramBean, outputMap) > 0` |
| 3 | CALL | `addPageErrInfo(EKB5880_KW, MSG_SVC_NET, "", KKW00124_ERR_INFO)` |
| 4 | EXEC | `dataBean.sendMessageString(TAB_NET_DSP_STAT, SET_VALUE, TAB_ERROR_ID)` |

**Block 10.3** — [IF] Handling fee change check (L3852-3856)
> [IF] `checkJimuCommision(KKW00124_TAB_INDEX) != 0`

| # | Type | Code |
|---|------|------|
| 1 | CALL | `addPageErrInfo(EKB7900__Q, MSG_SVC_NET, "JIMU_COMMISION", KKW00124_ERR_INFO)` |

**Block 10.4** — [IF] Standard labor cost change check (L3858-3862)
> [IF] `checkHyojunKojihi(KKW00124_TAB_INDEX) != 0`

| # | Type | Code |
|---|------|------|
| 1 | CALL | `addPageErrInfo(EKB8460__Q, MSG_SVC_NET + MSG_HYOUJYUN_KOJIHI, "HYOUJYUN_KOJIHI", KKW00124_ERR_INFO)` |

**Block 10.5** — [IF] Private router check (L3865-3870)
> [IF] `checkPrivateRouter(usePlaceMap, dataBean)`

| # | Type | Code |
|---|------|------|
| 1 | CALL | `addPageErrInfo(EKBA510_KW, MSG_SVC_NET + MSG_PRIVATE_COURSE + ";" + MSG_ROUTER + ";" + KKW00103_MSG_NM_2, "", KKW00124_ERR_INFO)` |
| 2 | EXEC | `dataBean.sendMessageString(TAB_NET_DSP_STAT, SET_VALUE, TAB_ERROR_ID)` |

**Block 10.6** — [IF] Family pack cancellation check (L3873-3880)
> If NOT family pack AND the introductory family pack is subscribed (from netMap), add error EKBD360__Q.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JKKKeiNewCmnLogicUtil.checkShokaiFamipa(netMap)` // Check introductory family pack |
| 2 | CALL | `addPageErrInfo(EKBD360__Q, MSG_SVC_NET + KKW00124_REP_MSG_04, "", KKW00124_ERR_INFO)` |

**Block 11** — [IF] `!tabletTnmtNm.equals("") && tabletPayway != null` (L3884)
> If tablet terminal name and payment method are both present, check the tablet payway installment plan from the SC output.

| # | Type | Code |
|---|------|------|
| 1 | SET | `parentMap = outputMap.get("KKSV011902CC")` |
| 2 | IF | `parentMap.get("kk2521_EKK2521B503CBSMsg1List") != null && ((ArrayList)parentMap.get("kk2521_EKK2521B503CBSMsg1List")).size() == 0` |
| 3 | CALL | `dataBean.getDataBeanArray(TABLET_PAYWAY_LIST).getDataBean(0)` |
| 4 | EXEC | `tabletPaywayBean.sendMessage(CD_LIST_58, GET_COUNT)` |
| 5 | FOR | `for (int i = 0; i < count; i++)` |
| 6 | CALL | `addPageErrInfo(EKBB890_KW, MSG_SVC_NET + "タブレット端末のお支払い方法;割賦プラン", "TABLET_PAYWAY_" + i, KKW00124_ERR_INFO)` |
| 7 | EXEC | `dataBean.sendMessageString(TAB_NET_DSP_STAT, SET_VALUE, TAB_ERROR_ID)` |

**Block 12** — [IF] `IP_STB_RENTAL` (L3892)
> ANK-3987-00-00 MOD: Validates streaming media player (STB/Netflix) rental. Commented-out code checks payment plan validity and use count. New code validates streaming player terminal name and buyer name.

**Block 12.1** — [IF] `smpTnmtNm.equals("")` (L3933)
> If streaming media player terminal name is empty, add error EKBB870_NW: "ストリーミングメディアプレイヤー;ストリーミングメディアプレイヤーの端末名"

| # | Type | Code |
|---|------|------|
| 1 | CALL | `addPageErrInfo(EKBB870_NW, MSG_SVC_NET + "ストリーミングメディアプレイヤー;ストリーミングメディアプレイヤーの端末名", "SMP_TNMT_NM", KKW00124_ERR_INFO)` |
| 2 | EXEC | `dataBean.sendMessageString(TAB_NET_DSP_STAT, SET_VALUE, TAB_ERROR_ID)` |

**Block 12.2** — [IF] `!isCallSmpAgntGet && smpTnmtBuyUkTntshaNm.equals("")` (L3941)
> If NOT called from smpAgntGet AND buyer name is empty, add error EKBC870_KW.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `addPageErrInfo(EKBC870_KW, MSG_SVC_NET + "ストリーミングメディアプレイヤー;ストリーミングメディアプレイヤーの端末購入受取担当者名", "SMP_TNMT_BUY_UK_TNTSHA_NM", KKW00124_ERR_INFO)` |
| 2 | EXEC | `dataBean.sendMessageString(TAB_NET_DSP_STAT, SET_VALUE, TAB_ERROR_ID)` |

**Block 12.3** — [IF] `scResult != null` (L3948)
> Check the streaming media player buyer error flag from the SC result.

| # | Type | Code |
|---|------|------|
| 1 | SET | `scResult = outputMap.get("KKSV011902CC")` |
| 2 | SET | `errflg = scResult.get("kk3271_tnmt_buy_uk_tntsha_nm_err")` |
| 3 | CALL | `checksmpErr(errflg, "[ネット] ストリーミングメディアプレイヤーの端末購入受取担当者名", "SMP_TNMT_BUY_UK_TNTSHA_NM", KKW00124_ERR_INFO, KKW00101SFConst.TAB_NET_DSP_STAT)` |

**Block 13** — [IF] `MSKM_KIND == MANSION` (L3975)
> If the building type is mansion (マンション), validate network connection change based on connection method (イーサネット, 光配線, VDSL).

**Block 13.1** — [IF] `MANSION_KAISEN_HOSHIKI == ETHER` (L3978)
> [ETHER = "1"] If Ethernet connection method and network changed, add error EKBC890__Q.

| # | Type | Code |
|---|------|------|
| 1 | SET | `MANSION_KAISEN_HSK_CD_ETHER = "1"` [CONSTANT - イーサネット方式] |
| 2 | IF | `eohnetcrschgflg` |
| 3 | CALL | `addPageErrInfo(EKBC890__Q, "", "", KKW00124_ERR_INFO)` |

**Block 13.2** — [IF] `MANSION_KAISEN_HOSHIKI == OPTICAL` (L3987)
> [OPTICAL = "2"] If optical fiber connection method and network changed, add error EKBC890__Q.

| # | Type | Code |
|---|------|------|
| 1 | SET | `MANSION_KAISEN_HSK_CD_OPTICAL = "2"` [CONSTANT - 光配線方式] |
| 2 | IF | `eohnetcrschgflg` |
| 3 | CALL | `addPageErrInfo(EKBC890__Q, "", "", KKW00124_ERR_INFO)` |

**Block 13.3** — [IF] `MANSION_KAISEN_HOSHIKI == VDSL` (L3996)
> [VDSL = "3"] If VDSL connection method and network changed, reset extra pull-down, add error EKB1220__I (info-level), and reset the network change flag.

| # | Type | Code |
|---|------|------|
| 1 | SET | `MANSION_KAISEN_HSK_CD_VDSL = "3"` [CONSTANT - VDSL方式] |
| 2 | IF | `eohnetcrschgflg` |
| 3 | CALL | `setFukaPullDownSelect(null)` // Reset extra pull-down initial values |
| 4 | CALL | `addPageErrInfo(EKB1220__I, "VDSL方式が変更になったため[特記]追加を変更しました。確認", "", KKW00124_ERR_INFO)` |
| 5 | EXEC | `dataBean.sendMessageBoolean(KKW00121SFConst.EOH_NET_CRS_CHG_FLG, SET_VALUE, false)` // Reset change flag |

**Block 14** — [IF] `MSKM_KIND == MEZON` (L4010)
> [MSKM_KIND_MEZON = "2"] If building type is "mezon" (ビル) and network changed, add error EKBC890__Q.

| # | Type | Code |
|---|------|------|
| 1 | SET | `MSKM_KIND_MEZON = "2"` [CONSTANT - ビル] |
| 2 | IF | `eohnetcrschgflg` |
| 3 | CALL | `addPageErrInfo(EKBC890__Q, "", "", KKW00124_ERR_INFO)` |

**Block 15** — [CALL] checkOuchiKikiHosho and checkMeshWifi (L4019-4024)
> ANK-3484-00-00: Check home device protection service (おうちの機器補償入力チェック).
> ANK-3825-00-00: Check mesh WiFi service (宅内機器レンタルサービス入力チェック).

| # | Type | Code |
|---|------|------|
| 1 | CALL | `checkOuchiKikiHosho(this, KKW00124_ERR_INFO)` // ANK-3484: 機器補償入力チェック |
| 2 | CALL | `checkMeshWifi(this, KKW00124_ERR_INFO)` // ANK-3825: 宅内機器レンタルチェック |

**Block 16** — [IF] `isTypeNHantei()` (L4028)
> ANK-4427-00-00 ADD: Type N (WAO) specific validation. Validates transfer contract number, validity period, phone number, phone number format, current provider, and contract holder name.

**Block 16.1** — [GET] Transfer Contract Number Validation (L4033-4066)
> [TENYO_SHODAKU_NO_CHECK = "^[TFEW][0-9]{10}"]

| # | Type | Code |
|---|------|------|
| 1 | SET | `ykKigen = ""` // Validity period |
| 2 | CALL | `JKKStringUtil.nullToBlank(dataBean.sendMessageString(WAO_TENYO_SHODAKU_NO, GET_VALUE))` // Transfer contract number |
| 3 | IF | `!tenyoSdNo.matches(TENYO_SHODAKU_NO_CHECK)` // Format check |
| 4 | EXEC | `dataBean.sendMessageString(WAO_YK_KIGEN, SET_VALUE, "")` // Clear validity period |
| 5 | CALL | `addPageErrInfo(EKK0820_TW, "転用承諾番号", "WAO_TENYO_SHODAKU_NO", KKW00124_ERR_INFO)` |
| 6 | ELSE | [Valid format] |
| 7 | EXEC | `dataBean.sendMessageString(WAO_YK_KIKAN, GET_VALUE)` // Validity period interval |
| 8 | CALL | `JPCDateUtil.addDay(JCCWebCommon.getOpeDate(this, null), Integer.parseInt(ykKikan))` // minLimit |
| 9 | CALL | `getTenyoSdYkKigen(dataBean, tenyoSdNo)` // Get actual validity period from contract |
| 10 | IF | `!JKKGetDataUtil.isValidDate(ykKigen)` // Invalid date format |
| 11 | CALL | `addPageErrInfo(EKB1040_JW, "転用承諾番号の有効期限（月日）;不正;登録", "WAO_TENYO_SHODAKU_NO", KKW00124_ERR_INFO)` |
| 12 | ELSE IF | `ykKigen.compareTo(minLimit) < 0` // Expired |
| 13 | CALL | `addPageErrInfo(EKBA880__Q, "転用承諾番号の有効期限;期限外;登録", "", KKW00124_ERR_INFO)` // ST-2025-0000001 MOD |

**Block 16.2** — [SET] Save transfer contract number and validity period (L4068-4070)

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `dataBean.sendMessageString(WAO_TENYO_SHODAKU_NO_MOTO, SET_VALUE, tenyoSdNo)` // Save original |
| 2 | EXEC | `dataBean.sendMessageString(WAO_YK_KIGEN, SET_VALUE, ykKigen)` // Set validity period |

**Block 16.3** — [IF] `TYPEN_TEL_MSKM_UM` (L4073)
> If phone service is selected for Type N, validate phone number and related fields.

**Block 16.3.1** — [GET] Phone Data (L4076-4087)
> [WAO_TENYO_DIV_01 = "01" (Transfer: New)]
> [WAO_BMP_NEW = "0" (Obtain new number)]

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JKKWebCommon.getPullDownCode(dataBean, TYPEN_BMP_SBT_LIST, SELECT_CD_58, CD_LIST_58)` // Phone type |
| 2 | EXEC | `dataBean.sendMessageString(TYPEN_TELNO, GET_VALUE)` // Phone number |
| 3 | EXEC | `dataBean.sendMessageString(TYPEN_BMP_SBT_FLG, GET_VALUE)` // Phone type flag [ANK-4640] |
| 4 | CALL | `JKKWebCommon.getPullDownCode(dataBean, TYPEN_TEL_NOW_USE_TEL_SVC_TK_JGS_LIST, TYPEN_TSJGS_CD_88, TYPEN_TSJGS_CD_LIST_88)` // Current provider |
| 5 | CALL | `JKKWebCommon.getPullDownCode(dataBean, WAO_TENYO_DIV_LIST, SELECT_CD_58, CD_LIST_58)` // Transfer division |

**Block 16.3.2** — [IF] `WAO_TENYO_DIV_01.equals(waoTenyoDiv) && isNullEmpty(bmpSbt)` (L4098)
> [WAO_TENYO_DIV_01 = "01"] If transfer is "new" and phone type is not selected, add error EKF2130_NW.

| # | Type | Code |
|---|------|------|
| 1 | SET | `WAO_TENYO_DIV_01 = "01"` [CONSTANT - 転用: 新規] |
| 2 | CALL | `addPageErrInfo(EKF2130_NW, "転用有無で[新規];番砲種別", "", KKW00124_ERR_INFO)` |

**Block 16.3.3** — [IF] `WAO_TENYO_DIV_01.equals(waoTenyoDiv) && !isNullEmpty(bmpSbt) && isNullEmpty(bmpSbtFlg)` (L4104)
> If transfer is "new" and phone type is selected but flag is empty, add error and reset phone type list index.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `addPageErrInfo(EKF2130_NW, "転用有無で[新規];番砲種別", "", KKW00124_ERR_INFO)` |
| 2 | CALL | `dataBean.getDataBeanArray(TYPEN_BMP_SBT_LIST).getDataBean(0)` |
| 3 | EXEC | `typenBmpSbtList.sendMessageString(SELECT_CD_58, SET_VALUE, "")` // Reset |

**Block 16.3.4** — [IF] `WAO_TENYO_DIV_01.equals(waoTenyoDiv) && !WAO_BMP_NEW.equals(bmpSbt)` (L4118)
> [WAO_BMP_NEW = "0"] If transfer is "new" and phone type is NOT "obtain new number", validate phone number presence, format, and current provider.

| # | Type | Code |
|---|------|------|
| 1 | SET | `WAO_BMP_NEW = "0"` [CONSTANT - 新番号を取得する] |
| 2 | IF | `isNullBlank(telno)` |
| 3 | CALL | `addPageErrInfo(EKF2130_NW, "[新番号を取得する]以外;電話番号", "TYPEN_TELNO", KKW00124_ERR_INFO)` |
| 4 | ELSE IF | `!chkTelephoneNumber2(telno)` |
| 5 | CALL | `addPageErrInfo(EKB0240_TW, MSG_SVC_NET + "電話サービス-電話番号", "TYPEN_TELNO", KKW00124_ERR_INFO)` |
| 6 | IF | `isNullBlank(tsjgsCd)` |
| 7 | CALL | `addPageErrInfo(EKF2130_NW, "[新番号を取得する]以外;現在ご利用中の電話サービス提供事業者", "TYPEN_TEL_NOW_USE_TEL_SVC_TK_JGS_LIST", KKW00124_ERR_INFO)` |

**Block 16.3.5** — [ELSE IF] `!WAO_TENYO_DIV_01.equals(waoTenyoDiv)` (L4148)
> If transfer is NOT "new" (i.e., transfer, port-in), validate phone number if present.

| # | Type | Code |
|---|------|------|
| 1 | IF | `!isNullBlank(telno)` |
| 2 | IF | `!chkTelephoneNumber2(telno)` |
| 3 | CALL | `addPageErrInfo(EKB0240_TW, MSG_SVC_NET + "電話サービス-電話番号", "TYPEN_TELNO", KKW00124_ERR_INFO)` |

**Block 16.3.6** — [IF] `!isNullBlank(itnmtKshaMeigi)` (L4158)
> If transfer original contract holder name is present, validate length (max 45 chars) and format.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `dataBean.sendMessageString(TYPEN_TEL_ITNMT_KYS_MEIGI, GET_VALUE)` // Contract holder name |
| 2 | IF | `itnmtKshaMeigi.length() > 45` |
| 3 | CALL | `addPageErrInfo(EKB0030_TW, MSG_SVC_NET + "電話サービス-転譲元契約者名義;;45", "TYPEN_TEL_ITENM_KEI_NM", KKW00124_ERR_INFO)` |
| 4 | IF | `!MixCharCheck.isKisyuIzonNmAdCheck(itnmtKshaMeigi)` |
| 5 | CALL | `addPageErrInfo(EKB0190_TW, MSG_SVC_NET + "電話サービス-転譲元契約者名義", "TYPEN_TEL_ITENM_KEI_NM", KKW00124_ERR_INFO)` |

**Block 16.3.7** — [CALL] Address Item Checks (L4162-4164)
> ANK-4427-00-02 ADD: Address item number check and address item count check.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `adTkmkCheckKKW00124Error()` // Address item validation |
| 2 | CALL | `adCheckKKW00124Error()` // Address item number validation |

**Block 17** — [IF] Optical Mansion Pattern 53 Check (L4170-4181, ANK-4493-00-00 ADD)
> [MANSION_KAISEN_HSK_CD_OPTICAL = "2"]
> [TK_HOSHIKI_PATTERN_CD_53 = "53"]
> If the connection method is optical fiber AND pattern code is 53 (53光変更マンション) AND neither 1G nor 10G flag is set, add error EKBB940_JW: "登録;マンションのデータ状況".

| # | Type | Code |
|---|------|------|
| 1 | SET | `MANSION_KAISEN_HSK_CD_OPTICAL = "2"` [CONSTANT] |
| 2 | SET | `TK_HOSHIKI_PATTERN_CD_53 = "53"` [CONSTANT] |
| 2 | IF | `MSKM_KIND == MANSION && HOSHIKI == OPTICAL && PATTERN_CD == 53 && !KNYKEI_NET_1G_FLAG && !KNYKEI_NET_10G_FLAG` |
| 3 | CALL | `addPageErrInfo(EKBB940_JW, "登録;マンションのデータ状況", "", KKW00124_ERR_INFO)` |
| 4 | EXEC | `dataBean.sendMessageString(TAB_NET_DSP_STAT, SET_VALUE, TAB_ERROR_ID)` |

**Block 18** — [RETURN] (L4185)
> Returns true to indicate all validations passed.

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