## 6. Per-Branch Detail Blocks

### Initialization Phase

**Block 0** — [SET] Service Interface Fields (L11478)

| # | Type | Code |
|---|------|------|
| 1 | SET | `statusCode = 0` // service interface execution status |
| 2 | SET | `sod_kihon_info_Map = (HashMap)sodMap.get(SOD_KIHON_INFO)` // SOD basic info |
| 3 | SET | `svc_kei_info_Map = (HashMap)sodMap.get(SVC_KEI_INFO)` // service contract info |
| 4 | SET | `svc_kei_ucwk_info_Map = (HashMap)sodMap.get(SVC_KEI_UCWK_INFO)` // service contract detail info |
| 5 | SET | `opsvkei_info_Map = (HashMap)sodMap.get(OPSVKEI_INFO)` // option service contract info |
| 6 | SET | `kktsvkei_info_Map = (HashMap)sodMap.get(KKTSVKEI_INFO)` // equipment provision service contract info |

**Block 0.1** — [EXEC] Map Cleaning (L11486)

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `sod_kihon_info_Map = shkkaMap(sod_kihon_info_Map)` // null-to-blank for each map value |
| 2 | EXEC | `svc_kei_info_Map = shkkaMap(svc_kei_info_Map)` |
| 3 | EXEC | `svc_kei_ucwk_info_Map = shkkaMap(svc_kei_ucwk_info_Map)` |
| 4 | EXEC | `opsvkei_info_Map = shkkaMap(opsvkei_info_Map)` |
| 5 | EXEC | `kktsvkei_info_Map = shkkaMap(kktsvkei_info_Map)` |

**Block 0.2** — [SET] Before/After Hash Variables (L11491)

| # | Type | Code |
|---|------|------|
| 1 | SET | `chbfEKK0351A010SCHash = null` // before-option service contract agreement hash |
| 2 | SET | `chafEKK0351A010SCHash = null` // after-option service contract agreement hash |
| 3 | SET | `chbfEKK0361A010SCHash = null` // before-option service contract (ISP) hash |
| 4 | SET | `chafEKK0361A010SCHash = null` // after-option service contract (ISP) hash |
| 5 | SET | `chbfEKK0401A010SCHash = null` // before sub-option service contract hash |
| 6 | SET | `chafEKK0401A010SCHash = null` // after sub-option service contract hash |
| 7 | SET | `chbfEKK0411A010SCHash = null` // before sub-option service contract (ISP) hash |
| 8 | SET | `chafEKK0411A010SCHash = null` // after sub-option service contract (ISP) hash |
| 9 | SET | `chafEKK0341A010SCHash = null` // after equipment provision service contract agreement hash |

**Block 0.3** — [SET] Field Extraction (L11514)

| # | Type | Code |
|---|------|------|
| 1 | SET | `ido_div = (String)sod_kihon_info_Map.get(INFO_IDO_DIV)` // displacement classification |
| 2 | SET | `svc_kei_no = (String)svc_kei_info_Map.get(INFO_SVC_KEI_NO)` // service contract number |
| 3 | SET | `chbf_opsvkei_no = (String)opsvkei_info_Map.get(INFO_CHBF_OPSVKEI_NO)` // before-option service contract number |
| 4 | SET | `chbf_opsvkei_gene_add_dtm = (String)opsvkei_info_Map.get(INFO_CHBF_OPSVKEI_GENE_ADD_DTM)` // before-option generation registration datetime |
| 5 | SET | `chaf_opsvkei_no = (String)opsvkei_info_Map.get(INFO_CHAF_OPSVKEI_NO)` // after-option service contract number |
| 6 | SET | `chaf_opsvkei_gene_add_dtm = (String)opsvkei_info_Map.get(INFO_CHAF_OPSVKEI_GENE_ADD_DTM)` // after-option generation registration datetime |
| 7 | SET | `chbf_sbopsvkei_no = (String)opsvkei_info_Map.get(INFO_CHBF_SBOPSVKEI_NO)` // before-sub-option service contract number |
| 8 | SET | `chaf_sbopsvkei_no = (String)opsvkei_info_Map.get(INFO_CHAF_SBOPSVKEI_NO)` // after-sub-option service contract number |
| 9 | SET | `svc_kei_ucwk_no = (String)svc_kei_ucwk_info_Map.get(INFO_SVC_KEI_UCWK_NO)` // after-service contract detail number |
| 10 | SET | `chaf_svc_kei_ucwk_gene_add_dtm = (String)svc_kei_ucwk_info_Map.get(INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM)` // after-service contract detail generation datetime |
| 11 | SET | `chaf_kktk_svc_kei_no = (String)kktsvkei_info_Map.get(INFO_CHAF_KKTSVKEI_NO)` // after-equipment provision service contract number |
| 12 | SET | `chaf_kktk_svc_kei_gene_add_dtm = (String)kktsvkei_info_Map.get(INFO_CHAF_KKTSVKEI_GENE_ADD_DTM)` // after-equipment provision generation datetime |

**Block 0.4** — [EXEC] String Cleaning (L11542)

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `chaf_opsvkei_no = shkkaChr(chaf_opsvkei_no)` // null-to-blank |
| 2 | EXEC | `chaf_opsvkei_gene_add_dtm = shkkaChr(chaf_opsvkei_gene_add_dtm)` |
| 3 | EXEC | `chbf_opsvkei_no = shkkaChr(chbf_opsvkei_no)` |
| 4 | EXEC | `chbf_opsvkei_gene_add_dtm = shkkaChr(chbf_opsvkei_gene_add_dtm)` |

**Block 0.5** — [SET] IPv6 Instance Fields (L11549)

| # | Type | Code |
|---|------|------|
| 1 | SET | `this.ipv6_svc_kei_ucwk_no = shkkaChr(svc_kei_ucwk_no)` // for IPv6 SOD work output [ANK-0046-00-01] |
| 2 | SET | `this.ipv6_svc_kei_ucwk_gadtm = shkkaChr(chaf_svc_kei_ucwk_gene_add_dtm)` |

---

### Phase 1: Fetch Before-Option Data

**Block 1** — [IF] Has before-option option? `!isBlank(chbf_opsvkei_no) && !isBlank(chbf_opsvkei_gene_add_dtm)` (L11554)

> If the before-option service contract number and generation datetime are both present, fetch the before-state from SC.

| # | Type | Code |
|---|------|------|
| 1 | SET | `chbfInHash = new HashMap()` // before-state input |
| 2 | SET | `chbfResultHash = new HashMap()` // before-state result |
| 3 | EXEC | `chbfInHash.put(OP_SVC_KEI_NO, chbf_opsvkei_no)` |
| 4 | EXEC | `chbfInHash.put(GENE_ADD_DTM, chbf_opsvkei_gene_add_dtm)` |
| 5 | CALL | `statusCode = callEKK0351A010SC(param, handle, chbfInHash, chbfResultHash, FUNC_CODE_1)` // option service contract agreement |
| 6 | SET | `if (0 != statusCode) throw new CCException(... SCCallException(...))` // error on non-zero status |
| 7 | SET | `chbfEKK0351A010SCHash = (HashMap)chbfResultHash.get(TEMPLATE_ID_EKK0351A010)` |
| 8 | SET | `opSvcCd = (String)chbfEKK0351A010SCHash.get(EKK0351A010CBSMsg1List.OP_SVC_CD)` |
| 9 | SET | `String[] opSvcKind = jdgOpSvcKind(opSvcCd)` // judge service kind |
| 10 | IF | `if (null == opSvcKind)` // not an SOD emission target -> return early |
| 11 | RETURN | `return param` // not SOD target |

**Block 1.1** — [IF] Before-op kind == NET? `SVC_KIND_NET.equals(opSvcKind[0])` (L11570)

| # | Type | Code |
|---|------|------|
| 1 | SET | `chbfInHashNet = new HashMap()` |
| 2 | EXEC | `chbfInHashNet.put(OP_SVC_KEI_NO, chbf_opsvkei_no)` |
| 3 | EXEC | `chbfInHashNet.put(GENE_ADD_DTM, chbf_opsvkei_gene_add_dtm)` |
| 4 | CALL | `callEKK0361A010SC(param, handle, chbfInHashNet, chbfResultHashNet, FUNC_CODE_1)` // option ISP agreement |
| 5 | SET | `chbfEKK0361A010SCHash = (HashMap)chbfResultHashNet.get(TEMPLATE_ID_EKK0361A010)` |

**Block 1.2** — [ELSE-IF] Before-op kind == TEL? `SVC_KIND_TEL.equals(opSvcKind[0])` (L11583)

> Commented out — option service contract <Phone> agreement. No active processing.

**Block 1.3** — [IF] Before-op needs sub-option? `"1".equals(opSvcKind[1]) && !isBlank(chbf_sbopsvkei_no)` (L11611)

> If sub-option flag is ON and sub-option number exists, fetch sub-option data.

**Block 1.3.1** — [IF] Before-op kind == NET? (L11620)

| # | Type | Code |
|---|------|------|
| 1 | SET | `chbfInHashSbopIsp = new HashMap()` |
| 2 | EXEC | `chbfInHashSbopIsp.put(OP_SVC_KEI_NO, chbf_opsvkei_no)` |
| 3 | EXEC | `chbfInHashSbopIsp.put(SBOP_SVC_KEI_NO, chbf_sbopsvkei_no)` |
| 4 | EXEC | `chbfInHashSbopIsp.put(GENE_ADD_DTM, chbf_sbopsvkei_gene_add_dtm)` |
| 5 | CALL | `callEKK0411A010SC(param, handle, chbfInHashSbopIsp, chbfResultHashSbopIsp, FUNC_CODE_1)` // sub-option ISP |
| 6 | SET | `chbfEKK0411A010SCHash = (HashMap)chbfResultHashSbopIsp.get(TEMPLATE_ID_EKK0411A010)` |

**Block 1.3.2** — [EXEC] Before-op sub-option common (L11637)

| # | Type | Code |
|---|------|------|
| 1 | SET | `chbfInHashSbop = new HashMap()` |
| 2 | EXEC | `chbfInHashSbop.put(OP_SVC_KEI_NO, chbf_opsvkei_no)` |
| 3 | EXEC | `chbfInHashSbop.put(SBOP_SVC_KEI_NO, chbf_sbopsvkei_no)` |
| 4 | EXEC | `chbfInHashSbop.put(GENE_ADD_DTM, chbf_sbopsvkei_gene_add_dtm)` |
| 5 | CALL | `callEKK0401A010SC(param, handle, chbfInHashSbop, chbfResultHashSbop, FUNC_CODE_1)` // sub-option agreement |
| 6 | SET | `chbfEKK0401A010SCHash = (HashMap)chbfResultHashSbop.get(TEMPLATE_ID_EKK0401A010)` |

---

### Phase 2: Fetch After-Option Data

**Block 2** — [SET] After-Option Input (L11670)

| # | Type | Code |
|---|------|------|
| 1 | SET | `chafInHash = new HashMap()` |
| 2 | SET | `chafResultHash = new HashMap()` |
| 3 | EXEC | `chafInHash.put(OP_SVC_KEI_NO, chaf_opsvkei_no)` |
| 4 | EXEC | `chafInHash.put(GENE_ADD_DTM, chaf_opsvkei_gene_add_dtm)` |

**Block 2.1** — [SET] Function Code Selection (L11680)

> FUNC_CODE_1 (normal) if geneAddDtm length is 17; else FUNC_CODE_2 (search) for multi-selection [ST1-2012-0000810]

| # | Type | Code |
|---|------|------|
| 1 | SET | `funcCode = (chaf_opsvkei_gene_add_dtm != null && 17 == chaf_opsvkei_gene_add_dtm.length()) ? FUNC_CODE_1 : FUNC_CODE_2` |

**Block 2.2** — [EXEC] After-Option Agreement (L11685)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `statusCode = callEKK0351A010SC(param, handle, chafInHash, chafResultHash, funcCode)` |
| 2 | SET | `if (0 != statusCode) throw new CCException(...)` |
| 3 | SET | `chafEKK0351A010SCHash = (HashMap)chafResultHash.get(TEMPLATE_ID_EKK0351A010)` |
| 4 | SET | `opSvcCd = (String)chafEKK0351A010SCHash.get(EKK0351A010CBSMsg1List.OP_SVC_CD)` |
| 5 | IF | `if (chaf_opsvkei_gene_add_dtm == null || 17 > chaf_opsvkei_gene_add_dtm.length())` // geneAddDtm not set for multi-selection |
| 6 | SET | `chaf_opsvkei_gene_add_dtm = (String)chafEKK0351A010SCHash.get(EKK0351A010CBSMsg1List.GENE_ADD_DTM)` // set from SC result |

**Block 2.3** — [SET] After-State Kind Judgment (L11694)

| # | Type | Code |
|---|------|------|
| 1 | SET | `String[] opSvcKind = jdgOpSvcKind(opSvcCd)` |
| 2 | IF | `if (null == opSvcKind) return param` // not SOD target |

**Block 2.4** — [IF] After-op kind == NET? `SVC_KIND_NET.equals(opSvcKind[0])` (L11700)

| # | Type | Code |
|---|------|------|
| 1 | SET | `chafInHashNet = new HashMap()` |
| 2 | EXEC | `chafInHashNet.put(OP_SVC_KEI_NO, chaf_opsvkei_no)` |
| 3 | EXEC | `chafInHashNet.put(GENE_ADD_DTM, chaf_opsvkei_gene_add_dtm)` |
| 4 | SET | `funcCode = (chaf_opsvkei_gene_add_dtm != null && 17 == chaf_opsvkei_gene_add_dtm.length()) ? FUNC_CODE_1 : FUNC_CODE_2` |
| 5 | CALL | `callEKK0361A010SC(param, handle, chafInHashNet, chafResultHashNet, funcCode)` // ISP after |
| 6 | SET | `chafEKK0361A010SCHash = (HashMap)chafResultHashNet.get(TEMPLATE_ID_EKK0361A010)` |

**Block 2.5** — [IF] After-op needs sub-option? `"1".equals(opSvcKind[1]) && !isBlank(chaf_sbopsvkei_no)` (L11728)

| # | Type | Code |
|---|------|------|
| 1 | [IF] kind == NET -> callEKK0411A010SC + set chafEKK0411A010SCHash |
| 2 | [EXEC] common sub-option -> callEKK0401A010SC + set chafEKK0401A010SCHash |
