## 6. Per-Branch Detail Blocks

### Block 1 -- [SET] Map extraction and transformation (L11693)

Extracts and transforms the three nested maps from the sodMap parameter.

| # | Type | Code |
|---|------|------|
| 1 | SET | `sod_kihon_info_Map = (HashMap)sodMap.get(SOD_KIHON_INFO)` // SOD base info [-> SOD_KIHON_INFO="sod_kihon_info"] |
| 2 | SET | `svc_kei_info_Map = (HashMap)sodMap.get(SVC_KEI_INFO)` // Service contract info [-> SVC_KEI_INFO="svc_kei_info"] |
| 3 | SET | `svc_kei_ucwk_info_Map = (HashMap)sodMap.get(SVC_KEI_UCWK_INFO)` // Service contract details [-> SVC_KEI_UCWK_INFO="svc_kei_ucwk_info"] |
| 4 | EXEC | `sod_kihon_info_Map = shkkaMap(sod_kihon_info_Map)` // Map transform |
| 5 | EXEC | `svc_kei_info_Map = shkkaMap(svc_kei_info_Map)` // Map transform |
| 6 | EXEC | `svc_kei_ucwk_info_Map = shkkaMap(svc_kei_ucwk_info_Map)` // Map transform |

### Block 2 -- [SET] Field extraction from maps (L11701)

Extracts key business fields from the transformed maps.

| # | Type | Code |
|---|------|------|
| 1 | SET | `sys_id = (String)sod_kihon_info_Map.get(INFO_SYSID)` // SYSID [-> INFO_SYSID="sysid"] |
| 2 | SET | `ido_div = (String)sod_kihon_info_Map.get(INFO_IDO_DIV)` // Movement division [-> INFO_IDO_DIV="ido_div"] |
| 3 | SET | `svc_kei_no = (String)svc_kei_info_Map.get(INFO_SVC_KEI_NO)` // Service contract number [-> INFO_SVC_KEI_NO="svc_kei_no"] |
| 4 | SET | `svc_kei_ucwk_no = (String)svc_kei_ucwk_info_Map.get(INFO_SVC_KEI_UCWK_NO)` // Service contract details number [-> INFO_SVC_KEI_UCWK_NO="svc_kei_ucwk_no"] |
| 5 | SET | `chaf_svc_kei_ucwk_gene_add_dtm = (String)svc_kei_ucwk_info_Map.get(INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM)` // Changed service details generation DTM [-> INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM="chaf_svc_kei_ucwk_gene_add_dtm"] |

### Block 2.1 -- [IF-ELSE] Override with original values (L11706)

If the original (moto) values are set, prioritize them over the new values.

| # | Type | Code |
|---|------|------|
| 1 | IF | `!isEmpty(moto_svc_kei_ucwk_no) && !isEmpty(moto_svc_kei_ucwk_gene_add_dtm)` |
| 2 | SET | `svc_kei_ucwk_no = (String)svc_kei_ucwk_info_Map.get("moto_svc_kei_ucwk_no")` // Use original service contract details number |
| 3 | SET | `chaf_svc_kei_ucwk_gene_add_dtm = (String)svc_kei_ucwk_info_Map.get("moto_svc_kei_ucwk_gene_add_dtm")` // Use original generation DTM |

### Block 3 -- [IF-ELSE] Early return guard (L11715)

Returns immediately if the service contract details number is blank or `telDslExe` is false.

| # | Type | Code |
|---|------|------|
| 1 | IF | `isBlank(svc_kei_ucwk_no) || !telDslExe` |
| 2 | RETURN | `return param` // Early exit - insufficient data |

### Block 4 -- [IF] Radius duplicate prevention (L11723)

Checks if a telephone cancel SOD has already been issued to prevent duplicate Radius flag processing.

| # | Type | Code |
|---|------|------|
| 1 | IF | `isTelCancelSodIssued(param, sodMap)` |
| 2 | SET | `isRadiusZumi = true` // Radius cancellation already done |

### Block 5 -- [SET] Common process number acquisition (L11730)

| # | Type | Code |
|---|------|------|
| 1 | SET | `sameTrnNo = new String[1]` |
| 2 | CALL | `getSame_trn_no(param, handle, null, sameTrnNo)` // Obtain common process number |
| 3 | SET | `this.same_trn_no = sameTrnNo[0]` |

### Block 6 -- [SET] EKK0191A010 input preparation (L11734)

Prepares input for VA port info acquisition.

| # | Type | Code |
|---|------|------|
| 1 | SET | `inHashUcwk = new HashMap` // Input hash for EKK0191A010 |
| 2 | SET | `resultHashUcwk = new HashMap` // Result hash for EKK0191A010 |
| 3 | EXEC | `inHashUcwk.put(SVC_KEI_UCWK_NO, svc_kei_ucwk_no)` // Service contract details number [-> SVC_KEI_UCWK_NO="svc_kei_ucwk_no"] |
| 4 | EXEC | `inHashUcwk.put(GENE_ADD_DTM, chaf_svc_kei_ucwk_gene_add_dtm)` // Generation registration DTM [-> GENE_ADD_DTM="gene_add_dtm"] |
| 5 | CALL | `statusCode = callEKK0191A010SC(param, handle, inHashUcwk, resultHashUcwk, FUNC_CODE_1)` // [-> FUNC_CODE_1] |
| 6 | IF | `0 != statusCode` |
| 7 | EXEC | `throw new CCException(..., new SCCallException(..., String.valueOf(statusCode), statusCode))` |
| 8 | SET | `eKK0191A010Hash = (HashMap)resultHashUcwk.get(TEMPLATE_ID_EKK0191A010)` // [-> TEMPLATE_ID_EKK0191A010="EKK0191A010"] |

### Block 6.1 -- [SET] VA field extraction (L11752)

| # | Type | Code |
|---|------|------|
| 1 | SET | `vaPortNo = (String)eKK0191A010Hash.get(VA_PORT_NO)` // VA port number |
| 2 | SET | `vaTaknkikiModelCd = (String)eKK0191A010Hash.get(VA_TAKNKIKI_MODEL_CD)` // VA home device model code [-> VA_TAKNKIKI_MODEL_CD] |
| 3 | SET | `vaKikiSeizoNo = (String)eKK0191A010Hash.get(VA_KIKI_SEIZO_NO)` // VA device manufacturing number [-> VA_KIKI_SEIZO_NO] |
| 4 | SET | `vaKikiChgNo = (String)eKK0191A010Hash.get(VA_KIKI_CHG_NO)` // VA device change number [-> VA_KIKI_CHG_NO] |

### Block 7 -- [SET] EKK0341B008 input preparation (L11762)

| # | Type | Code |
|---|------|------|
| 1 | SET | `inHashKktk = new HashMap` |
| 2 | SET | `resultHashKktk = new HashMap` |
| 3 | EXEC | `inHashKktk.put(SVC_KEI_NO, svc_kei_no)` // [-> SVC_KEI_NO="svc_kei_no"] |
| 4 | CALL | `statusCode = callEKK0341B008SC(param, handle, inHashKktk, resultHashKktk, FUNC_CODE_1)` |
| 5 | IF | `0 != statusCode` -> throw SCCallException |
| 6 | SET | `msgEKK0341B022SCList = (CAANMsg[])resultHashKktk.get(TEMPLATE_ID_EKK0341B022)` // [-> TEMPLATE_ID_EKK0341B022="EKK0341B022"] |

### Block 7.1 -- [SET] Initialize device variables (L11776)

| # | Type | Code |
|---|------|------|
| 1 | SET | `kktkSvcKeiNo = ""` // Device provision service contract number |
| 2 | SET | `kktkGeneAddDtm = ""` // Device provision service contract generation DTM |
| 3 | SET | `tknkiki_sbt_cd = ""` // Home device subtype code |
| 4 | SET | `svc_kei_kaisen_ucwk_no = ""` // Service contract line details number |
| 5 | SET | `svc_kei_kaisen_ucwk_gadtm = ""` // Service contract line details generation DTM |

### Block 8 -- [FOR] Device list iteration with combined device sources (L11789)

Iterates through a combined list of VA devices and multi-function routers.

| # | Type | Code |
|---|------|------|
| 1 | SET | `newKikiList = new ArrayList` // Combined device list |
| 2 | FOR | `i=0; i<msgEKK0341B022SCList.length` - Extract VA device data into newKikiList |
| 3 | CALL | `mfrKikiList = getMfrInfoByEKK0341B019(param, handle, FUNC_CODE_1, svc_kei_no)` // [-> FUNC_CODE_1] MFR list for line |
| 4 | CALL | `mfrKikiListModed = getDataFromA010Res(mfrKikiList)` // Rename map keys to match list agreement result |
| 5 | EXEC | `newKikiList.addAll(mfrKikiListModed)` // Add MFR to combined list |
| 6 | CALL | `mfrKikiListBfKaisen = getMfrInfoOfBfKaisen(param, handle, fixedText, (String)sodMap.get("adchg_no"))` // Pre-move MFR |
| 7 | CALL | `mfrKikiListBfKsnModed = getDataFromA010Res(mfrKikiListBfKaisen)` |
| 8 | EXEC | `newKikiList.addAll(mfrKikiListBfKsnModed)` // Add pre-move MFR |

### Block 8.1 -- [FOR] Device type branching (L11799)

Branches on device type within the combined device list.

| # | Type | Code |
|---|------|------|
| 1 | FOR | `eKK0341B022SCHash : newKikiList` |
| 2 | IF | `isRegalVaKiki(eKK0341B022SCHash, vaTaknkikiModelCd, null, ido_div, vaKikiChgNo)` |
| 3 | SET | `kktkSvcKeiNo = eKK0341B022SCHash.get(KKTK_SVC_KEI_NO)` // Device provision svc contract number |
| 4 | SET | `kktkGeneAddDtm = eKK0341B022SCHash.get(GENE_ADD_DTM)` |
| 5 | SET | `vaKikiSeizoNo = eKK0341B022SCHash.get(KIKI_SEIZO_NO)` |
| 6 | SET | `tknkiki_sbt_cd = eKK0341B022SCHash.get(TAKNKIKI_SBT_CD)` |
| 7 | EXEC | `break` |

### Block 8.1.1 -- [ELSE-IF] MFR with pre-move constraint (L11813)

| # | Type | Code |
|---|------|------|
| 1 | IF | `isRegalMfRouter(...) && isJuhenBfUse(handle, param, adchg_no, eKK0341B022SCHash) && isJuhenBfUseKkop(handle, param, adchg_no, KKOP_SVC_CD_VA)` |
| 2 | SET | `kktkSvcKeiNo = eKK0341B022SCHash.get(KKTK_SVC_KEI_NO)` |
| 3 | SET | `kktkGeneAddDtm = eKK0341B022SCHash.get(GENE_ADD_DTM)` |
| 4 | SET | `vaKikiSeizoNo = eKK0341B022SCHash.get(KIKI_SEIZO_NO)` |
| 5 | SET | `tknkiki_sbt_cd = eKK0341B022SCHash.get(TAKNKIKI_SBT_CD)` |
| 6 | SET | `svc_kei_kaisen_ucwk_no = eKK0341B022SCHash.get(SVC_KEI_KAISEN_UCWK_NO)` |
| 7 | CALL | `ekk0251a010Map = runEKK0251A010(param, handle, svc_kei_kaisen_ucwk_no)` // Get line agreement |
| 8 | SET | `svc_kei_kaisen_ucwk_gadtm = ekk0251a010Map.get(GENE_ADD_DTM)` |
| 9 | EXEC | `break` |

### Block 8.1.2 -- [ELSE-IF] Address change VA keep (L11837)

| # | Type | Code |
|---|------|------|
| 1 | IF | `isJuhenVA(handle, param, (String)sodMap.get("adchg_no"), eKK0341B022SCHash)` |
| 2 | SET | `kktkSvcKeiNo, kktkGeneAddDtm, vaKikiSeizoNo, tknkiki_sbt_cd` |
| 3 | EXEC | `// no break - continue iterating` |

### Block 8.1.3 -- [ELSE-IF] Address change MFR keep (L11851)

| # | Type | Code |
|---|------|------|
| 1 | IF | `isJuhenMfRouter(...) && StringUtils.isEmpty(kktkSvcKeiNo)` |
| 2 | SET | `kktkSvcKeiNo, kktkGeneAddDtm, vaKikiSeizoNo, tknkiki_sbt_cd` |
| 3 | EXEC | `// no break - continue iterating` |

### Block 9 -- [SET] Instance field assignment (L11864)

Sets instance fields with values from processing.

| # | Type | Code |
|---|------|------|
| 1 | SET | `this.svc_kei_ucwk_no[0] = svc_kei_ucwk_no` |
| 2 | SET | `this.svc_kei_ucwk_gadtm[0] = chaf_svc_kei_ucwk_gene_add_dtm` |
| 3 | SET | `this.kktk_svc_kei_no[0] = kktkSvcKeiNo` |
| 4 | SET | `this.kktk_svc_kei_gadtm[0] = kktkGeneAddDtm` |
| 5 | SET | `this.taknkiki_model_cd[0] = vaTaknkikiModelCd` |
| 6 | SET | `this.kiki_seizo_no[0] = vaKikiSeizoNo` |
| 7 | SET | `this.chbf_kktk_svc_kei_gadtm = new String[1]` |

### Block 10 -- [SET] EKK0251B001 service line details acquisition (L11881)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `eKK0251B001Hash = getEKK0251B001SC(param, handle, svc_kei_no, FUNC_CODE_1)` |
| 2 | SET | `this.svc_kei_kaisen_ucwk_no = eKK0251B001Hash.get(SVC_KEI_KAISEN_UCWK_NO)` |
| 3 | SET | `this.svc_kei_kaisen_ucwk_gadtm = eKK0251B001Hash.get(GENE_ADD_DTM)` |

### Block 11 -- [IF] Device info completeness check (L11894)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!isBlank(kktk_svc_kei_no[0]) && !isBlank(kktk_svc_kei_gadtm[0]) && !isBlank(taknkiki_model_cd[0]) && !isBlank(kiki_seizo_no[0])` |
| 2 | SET | `va_kiki = vaTaknkikiModelCd + vaKikiSeizoNo` |

### Block 11.1 -- [IF-ELSE-IF-IF] Device processing chain (L11898)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!isNullBlank(va_kiki) && !va_kiki_list.contains(va_kiki)` |
| 2 | CALL | `setPrevGeneIfVaMod(handle, param, (String)sodMap.get("adchg_no"), svc_kei_no, kktkSvcKeiNo)` |
| 3 | SET | `va_kiki = taknkiki_model_cd[0] + kiki_seizo_no[0]` // Reset va_kiki from instance fields |
| 4 | IF | `!isNullBlank(va_kiki) && !va_kiki_list.contains(va_kiki) && !isRadiusZumi` |
| 5 | IF | `!TAKNKIKI_SBT_CD_MFR.equals(tknkiki_sbt_cd) \|\| TAKNKIKI_SBT_CD_HGW.equals(tknkiki_sbt_cd)` |
| 6 | IF | `!isDslOrderExist2(param, handle, SVC_ORDER_CD_OLS, kktk_svc_kei_no[0], taknkiki_model_cd[0], kiki_seizo_no[0])` |
| 7 | CALL | `param = addSOD(handle, param, ODR_NAIYO_CD_215)` // [-> "215"] OLS setup/cancellation |
| 8 | CALL | `param = addSOD(handle, param, ODR_NAIYO_CD_216)` // [-> "216"] OLS setup/deletion |
| 9 | ELSE | Device is MFR (not HGW) |
| 10 | CALL | `kkop_svc_kei_srch_list = runEKK2811B010(param, handle, FUNC_CODE_1, kktk_svc_kei_no[0])` |
| 11 | CALL | `ekk2811b010Map = getKkOpSvcRec(kkop_svc_kei_srch_list, KKOP_SVC_CD_VA, false)` |
| 12 | IF | `ekk2811b010Map != null` |
| 13 | SET | `kkop_svc_kei_router[0] = ""` |
| 14 | SET | `kkop_svc_kei_router_gadtm[0] = ""` |
| 15 | SET | `kkop_svc_kei_va[0] = ekk2811b010Map.get(KKOP_SVC_KEI_NO)` |
| 16 | SET | `kkop_svc_kei_va_gadtm[0] = ekk2811b010Map.get(GENE_ADD_DTM)` |
| 17 | SET | `svc_kei_kaisen_ucwk_no = svc_kei_kaisen_ucwk_no` |
| 18 | SET | `svc_kei_kaisen_ucwk_gadtm = svc_kei_kaisen_ucwk_gadtm` |
| 19 | IF | `isKkopSvcOnKiki(param, fixedText, handle, sodMap, kktkSvcKeiNo, KKOP_SVC_CD_BBR)` |
| 20 | CALL | `param = addSOD(handle, param, ODR_NAIYO_CD_417)` // [-> "417"] MFR setup/change VA cancel |
| 21 | ELSE | No BBR service |
| 22 | IF | `!isDslOrderExist2(param, handle, SVC_ORDER_CD_MFR, kktk_svc_kei_no[0], taknkiki_model_cd[0], kiki_seizo_no[0])` |
| 23 | CALL | `param = addSOD(handle, param, ODR_NAIYO_CD_421)` // [-> "421"] MFR setup/cancellation |
| 24 | CALL | `param = addSOD(handle, param, ODR_NAIYO_CD_422)` // [-> "422"] MFR setup/deletion |
| 25 | EXEC | `va_kiki_list.add(va_kiki)` |

### Block 12 -- [SET] ENUM and transfer lock processing preparation (L11993)

Prepares for SIP/ENUM and transfer lock SOD issuance.

| # | Type | Code |
|---|------|------|
| 1 | SET | `isSipDslSodHakko = false` // SIP DSL SOD issuance flag |
| 2 | SET | `telno = ""` |

### Block 12.1 -- [IF] Check if lock order already exists (L12009)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!checkTokiOrderExist(param, handle, svc_kei_ucwk_no)` |
| 2 | IF | `ODR_EXEC_DIV_NEW_END.equals(odr_exec_div)` // [-> "3"] |
| 3 | IF | `isChgTel(param, handle, sodMap, svc_kei_ucwk_no)` |
| 4 | SET | `isSipDslSodHakko = true` |
| 5 | ELSE-IF | `isChgAddress(param, handle, sodMap, svc_kei_ucwk_no, chaf_svc_kei_ucwk_gene_add_dtm)` |
| 6 | SET | `isSipDslSodHakko = true` |
| 7 | ELSE-IF | `isDslOrderExist(param, handle, svc_kei_ucwk_no)` |
| 8 | SET | `isSipDslSodHakko = true` |
| 9 | ELSE | `odr_exec_div` is not "3" (withdrawal completion) |
| 10 | SET | `isSipDslSodHakko = true` |

### Block 12.2 -- [IF] SIP cancellation/deletion and ENUM processing (L12034)

| # | Type | Code |
|---|------|------|
| 1 | IF | `isSipDslSodHakko` |
| 2 | CALL | `param = addSOD(handle, param, ODR_NAIYO_CD_229)` // [-> "229"] SIP cancellation |
| 3 | CALL | `param = addSOD(handle, param, ODR_NAIYO_CD_230)` // [-> "230"] SIP deletion |
| 4 | SET | `inHashUcwkEnum = new HashMap` // ENUM processing input |
| 5 | SET | `resultHashUcwkEnum = new HashMap` |
| 6 | EXEC | `inHashUcwkEnum.put(SVC_KEI_UCWK_NO, svc_kei_ucwk_no[0])` |
| 7 | EXEC | `inHashUcwkEnum.put(GENE_ADD_DTM, svc_kei_ucwk_gadtm[0])` |
| 8 | CALL | `statusCode = callEKK0191A010SC(param, handle, inHashUcwkEnum, resultHashUcwkEnum, FUNC_CODE_1)` |
| 9 | IF | `0 != statusCode` -> throw |
| 10 | SET | `eKK0191A010HashEnum = (HashMap)resultHashUcwkEnum.get(TEMPLATE_ID_EKK0191A010)` |
| 11 | SET | `bmpUmEnum = eKK0191A010HashEnum != null ? eKK0191A010HashEnum.get(BMP_UM) : ""` |
| 12 | SET | `telno = eKK0191A010HashEnum != null ? eKK0191A010HashEnum.get(TELNO) : ""` |
| 13 | IF | `isMonaiBmp(handle, param, telno, CD00189_JISHA)` |
| 14 | CALL | `param = addSOD(handle, param, ODR_NAIYO_CD_266)` // [-> "266"] ENUM setup/deletion |

### Block 13 -- [IF] Transfer lock handling (L12287)

| # | Type | Code |
|---|------|------|
| 1 | IF | `ITNTOKI_KIBO_UM_ARI.equals(itntokiKiboUm) && ITNTOKI_ADD_CD_DSL.equals(itntokiAddCd)` // [-> "1" AND "2"] |
| 2 | SET | `dslPauseTokiEndRsymd = eKK0191A010Hash.get(DSL_PAUSE_TOKI_END_RSYMD)` |
| 3 | SET | `dslPauseTokiStaYmd = eKK0191A010Hash.get(DSL_PAUSE_TOKI_STA_YMD)` |
| 4 | SET | `dslPauseTokiEndYmd = eKK0191A010Hash.get(DSL_PAUSE_TOKI_END_YMD)` |
| 5 | IF | `isFutureDate(dslPauseTokiEndRsymd, getOpeDate(null), "0") && isEmptyDate(dslPauseTokiStaYmd) && isEmptyDate(dslPauseTokiEndYmd)` |
| 6 | CALL | `geneAddDtmUpd = updItntokiInfo(param, fixedText, svc_kei_ucwk_no, (String)sodMap.get("adchg_no"))` |
| 7 | SET | `chaf_svc_kei_ucwk_gene_add_dtm = geneAddDtmUpd` |
| 8 | SET | `this.svc_kei_ucwk_gadtm[0] = geneAddDtmUpd` |
| 9 | CALL | `param = addSOD(handle, param, ODR_NAIYO_CD_220)` // [-> "220"] SIP lock registration |
| 10 | SET | `isTokiOrdered = true` |

### Block 13.1 -- [IF] Telephone number update mapping for SIP (L12349)

| # | Type | Code |
|---|------|------|
| 1 | IF | `isSipDslSodHakko && isMonaiBmp(handle, param, telno, null) && !isTokiOrdered` |
| 2 | SET | `inMap = (HashMap)param.getData(fixedText)` // Get user data map |
| 3 | SET | `resultList = inMap.get("result_updJudgeTelNo")` // Get or create result list |
| 4 | IF | `resultList == null` -> `resultList = new ArrayList` |
| 5 | SET | `resultMap = new HashMap` |
| 6 | EXEC | `resultMap.put("updJudgeTelNo", "1")` |
| 7 | EXEC | `resultMap.put("tgTelNo", telno)` |
| 8 | EXEC | `resultList.add(resultMap)` |

### Block 14 -- [CALL] Emergency notification deletion (L12371)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `param = addSOD(handle, param, ODR_NAIYO_CD_252)` // [-> "252"] Emergency notification deletion |

### Block 15 -- [IF] Radius authentication cancellation (L12374)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!isRadiusZumi` |
| 2 | CALL | `param = addSOD(handle, param, ODR_NAIYO_CD_204)` // [-> "204"] Radius authentication/cancellation |
| 3 | SET | `isRadiusZumi = true` |

### Block 16 -- [RETURN] Return (L12379)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return param` // Return updated parameter with all SOD records |
