**Block 14** — [IF] `opSvcCd == OP_SVC_CD_FMTCEL` (L8952)

> **Fm Cell (mobile phone) service branch.** Handles Fm Cell registration, unregistration, and deletion. This is a short branch added in ANK-0035-00-00.

| # | Type | Code |
|---|------|------|
| 1 | SET | `this.op_svc_kei_no_fmtcel = chaf_opsvkei_no` // Save key info |
| 1.1 | SET | `this.op_gadtm_fmtcel = chaf_opsvkei_gene_add_dtm` |
| 2 | IF | `isBlank(chbf_opsvkei_no)` // Fm Cell newly registered |
| 2.1 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_164` |
| 2.2 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_164)` // Fm Cell registration |
| 3 | ELSE-IF | `910 or 920 after` // Fm Cell cancelled/withdrawn |
| 3.1 | IF | `!IDO_DIV_DSL && !IDO_DIV_TEKKYODSL && !IDO_DIV_KYOSEIDSL && !IDO_DIV_CANCEL` // Not a cancellation-divided workflow |
| 3.1.1 | CALL | `getSame_trn_no(param, handle, null, sameTrnNo)` |
| 3.1.2 | SET | `this.same_trn_no = sameTrnNo[0]` |
| 3.2 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_166` |
| 3.3 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_166)` // Fm Cell unregistration |
| 3.4 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_167` |
| 3.5 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_167)` // Fm Cell deletion |
| 4 | ELSE-IF | `910 before && 100 after` // Fm Cell restored |
| 4.1 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_164` |
| 4.2 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_164)` // Fm Cell registration (restoration) |

**Block 15** — [IF] `opSvcCd == OP_SVC_CD_WARKMI` (L9040)

> **Assigned Phone service branch.** Handles OLS settings and assigned phone registration. Retrieves equipment info (model code, serial number) and service line detail (VLAN ID) from EKK0341A010SC and EKK0251B001SC.

| # | Type | Code |
|---|------|------|
| 1 | SET | `inHashKktk.put(KKTK_SVC_KEI_NO, chaf_kktk_svc_kei_no)` // Device provision number |
| 2 | SET | `inHashKktk.put(GENE_ADD_DTM, chaf_kktk_svc_kei_gene_add_dtm)` // Device provision timestamp |
| 3 | CALL | `callEKK0341A010SC(param, handle, inHashKktk, resultHashKktk, FUNC_CODE_1)` // Get device provision |
| 4 | EXTRACT | `chafEKK0341A010SCHash = resultHashKktk.get(TEMPLATE_ID_EKK0341A010)` |
| 5 | SET | `this.taknkiki_model_cd[0] = chafEKK0341A010SCHash.get(TAKNKIKI_MODEL_CD)` // Indoor equipment model |
| 6 | SET | `this.kiki_seizo_no[0] = chafEKK0341A010SCHash.get(KIKI_SEIZO_NO)` // Equipment serial number |
| 7 | SET | `this.kktk_svc_kei_no[0] = chaf_kktk_svc_kei_no` // Device provision number |
| 8 | SET | `this.kktk_svc_kei_gadtm[0] = chaf_kktk_svc_kei_gene_add_dtm` // Timestamp |
| 9 | SET | `this.svc_kei_ucwk_no[0] = svc_kei_ucwk_no` // Service detail number |
| 10 | SET | `this.svc_kei_ucwk_gadtm[0] = chaf_svc_kei_ucwk_gene_add_dtm` // Timestamp |
| 11 | CALL | `getSame_trn_no(param, handle, null, sameTrnNo)` // Acquire same transaction number |
| 12 | SET | `this.same_trn_no = sameTrnNo[0]` |
| 13 | CALL | `eKK0251B001Hash = getEKK0251B001SC(param, handle, svc_kei_no, FUNC_CODE_1)` // Get service line detail |
| 14 | SET | `this.svc_kei_kaisen_ucwk_no = eKK0251B001Hash.get(SVC_KEI_KAISEN_UCWK_NO)` // Service line detail number |
| 15 | SET | `this.svc_kei_kaisen_ucwk_gadtm = eKK0251B001Hash.get(GENE_ADD_DTM)` // Timestamp |
| 16 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_214` |
| 17 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_214)` // OLS settings + assigned phone registration |
| 18 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_234` |
| 19 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_234)` // SIP + assigned phone registration |

**Block 15.1** — [IF] `910 or 920 after` // Assigned phone cancelled

| # | 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.same_trn_no = ""` |
| 4 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_235` |
| 5 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_235)` // SIP + assigned phone unregistration |

**Block 16** — [IF] `opSvcCd == OP_SVC_CD_TENSO` (L9114)

> **Call Forwarding service branch.** Handles SIP call forwarding registration, unregistration, and selection changes. Calls EKK0191A010SC for service detail and EKK1041B001SC for order settings.

| # | Type | Code |
|---|------|------|
| 1 | EXTRACT | `chbfOpSvcKeiStat = chbfEKK0351A010SCHash.get(OP_SVC_KEI_STAT)` // Before status |
| 2 | EXTRACT | `chafOpSvcKeiStat = chafEKK0351A010SCHash.get(OP_SVC_KEI_STAT)` // After status |
| 3 | IF | `!chbfOpSvcKeiStat.equals(chafOpSvcKeiStat)` // Status changed |
| 3.1 | SET | `inHashUcwk.put(SVC_KEI_UCWK_NO, svc_kei_ucwk_no)` |
| 3.2 | SET | `inHashUcwk.put(GENE_ADD_DTM, chaf_svc_kei_ucwk_gene_add_dtm)` |
| 3.3 | CALL | `callEKK0191A010SC(param, handle, inHashUcwk, resultHashUcwk, FUNC_CODE_1)` // Get eo Light phone detail |
| 3.4 | EXTRACT | `eKK0191A010Hash = resultHashUcwk.get(TEMPLATE_ID_EKK0191A010)` |
| 3.5 | SET | `isBmpNon = !BMP_UM_ARI.equals(eKK0191A010Hash.get(BMP_UM))` // Phone number absence check |
| 3.6 | CALL | `eKK1041B001HashList = callEKK1041B001SC(param, handle, ORDER_SBT_CD_TEL, null, null, svc_kei_no)` // Get order settings |
| 3.7 | SET | `isOrderedZ1 = 0` |
| 3.8 | FOR | `for each eKK1041B001Hash in eKK1041B001HashList` |
| 3.8.1 | EXTRACT | `svc_order_cd = eKK1041B001Hash.get(SVC_ORDER_CD)` |
| 3.8.2 | EXTRACT | `rcnt_yokyu_sbt_cd = eKK1041B001Hash.get(RCNT_YOKYU_SBT_CD)` |
| 3.8.3 | IF | `svc_order_cd matches "2[0134]" && "02" <= rcnt_yokyu_sbt_cd` // Z1 order check |
| 3.8.3.1 | SET | `isOrderedZ1++` |
| 3.9 | SET | `this.svc_kei_ucwk_no[0] = svc_kei_ucwk_no` |
| 3.10 | SET | `this.svc_kei_ucwk_gadtm[0] = chaf_svc_kei_ucwk_gene_add_dtm` |
| 3.11 | CALL | `getSame_trn_no(param, handle, null, sameTrnNo)` |
| 3.12 | SET | `this.same_trn_no = sameTrnNo[0]` |
| 3.13 | IF | `!(910 or 920 after)` // Not cancelled/withdrawn |
| 3.13.1 | IF | `isBmpNon && 4 > isOrderedZ1` // No phone number AND Z1 order not emitted |
| 3.13.1.1 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_218` |
| 3.13.1.1.1 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_218)` // SIP registration |
| 3.13.1.1.2 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_236` |
| 3.13.1.1.3 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_236)` // SIP + call forwarding registration |
| 3.13.2 | ELSE-IF | `4 <= isOrderedZ1` // Z1 order already emitted |
| 3.13.2.1 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_236` |
| 3.13.2.1.1 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_236)` // SIP + call forwarding registration |
| 3.14 | ELSE | // Cancelled/withdrawn |
| 3.14.1 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_237` |
| 3.14.1.1 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_237)` // SIP + call forwarding unregistration |
| 4 | IF | `isChgOpsvkei` // Status unchanged but check sub-option |
| 4.1 | EXTRACT | `chafSbopSvcCd = chafEKK0401A010SCHash.get(SBOP_SVC_CD)` |
| 4.2 | EXTRACT | `chafSbopSvcKeiStat = chafEKK0401A010SCHash.get(SBOP_SVC_KEI_STAT)` |
| 4.3 | EXTRACT | `chbfSbopSvckeiStat = chbfEKK0401A010SCHash.get(SBOP_SVC_KEI_STAT)` |
| 4.4 | IF | `!chbfSbopSvckeiStat.equals(chafSbopSvcKeiStat) && SBOP_SVC_CD_TENSOSEL.equals(chafSbopSvcCd)` // Sub-option status changed and call forwarding selection |
| 4.4.1 | IF | `!(910 or 920 after)` // Not cancelled |
| 4.4.1.1 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_238` |
| 4.4.1.1.1 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_238)` // SIP + call forwarding selection registration |
| 4.4.2 | ELSE | // Cancelled/withdrawn |
| 4.4.2.1 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_239` |
| 4.4.2.1.1 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_239)` // SIP + call forwarding selection unregistration |

**Block 16.1** — [IF] `chbfOpSvcKeiStat.equals(chafOpSvcKeiStat)` // Status unchanged

| # | 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 | EXTRACT | `chafSbopSvcCd = chafEKK0401A010SCHash.get(SBOP_SVC_CD)` |
| 4 | EXTRACT | `chafSbopSvcKeiStat = chafEKK0401A010SCHash.get(SBOP_SVC_KEI_STAT)` |
| 5 | IF | `!chbfSbopSvckeiStat.equals(chafSbopSvcKeiStat) && SBOP_SVC_CD_TENSOSEL.equals(chafSbopSvcCd)` // Sub-option changed |
| 5.1 | CALL | `getSame_trn_no(param, handle, null, sameTrnNo)` |
| 5.2 | SET | `this.same_trn_no = sameTrnNo[0]` |
| 5.3 | IF | `!(910 or 920 after)` // Not cancelled |
| 5.3.1 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_238` |
| 5.3.1.1 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_238)` // SIP + call forwarding selection registration |
| 5.4 | ELSE | // Cancelled/withdrawn |
| 5.4.1 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_239` |
| 5.4.1.1 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_239)` // SIP + call forwarding selection unregistration |

**Block 17** — [IF] `opSvcCd == OP_SVC_CD_DSP` (L9260)

> **Caller ID Display service branch.** Handles caller ID display registration/unregistration and non-notification call rejection.

| # | Type | Code |
|---|------|------|
| 1 | EXTRACT | `chbfOpSvcKeiStat = chbfEKK0351A010SCHash.get(OP_SVC_KEI_STAT)` // Before status |
| 2 | EXTRACT | `chafOpSvcKeiStat = chafEKK0351A010SCHash.get(OP_SVC_KEI_STAT)` // After status |
| 3 | IF | `!chbfOpSvcKeiStat.equals(chafOpSvcKeiStat)` // Status changed |
| 3.1 | SET | `this.svc_kei_ucwk_no[0] = svc_kei_ucwk_no` |
| 3.2 | SET | `this.svc_kei_ucwk_gadtm[0] = chaf_svc_kei_ucwk_gene_add_dtm` |
| 3.3 | CALL | `getSame_trn_no(param, handle, null, sameTrnNo)` |
| 3.4 | SET | `this.same_trn_no = sameTrnNo[0]` |
| 3.5 | IF | `!(910 or 920 after)` // Not cancelled/withdrawn |
| 3.5.1 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_240` |
| 3.5.1.1 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_240)` // SIP + caller ID display registration |
| 3.6 | ELSE | // Cancelled/withdrawn |
| 3.6.1 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_241` |
| 3.6.1.1 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_241)` // SIP + caller ID display unregistration |
| 3.7 | EXTRACT | `chafSbopSvcCd = chafEKK0401A010SCHash.get(SBOP_SVC_CD)` // Sub-option service code |
| 3.8 | EXTRACT | `chafSbopSvcKeiStat = chafEKK0401A010SCHash.get(SBOP_SVC_KEI_STAT)` |
| 3.9 | EXTRACT | `chbfSbopSvckeiStat = chbfEKK0401A010SCHash.get(SBOP_SVC_KEI_STAT)` |
| 3.10 | IF | `!chbfSbopSvckeiStat.equals(chafSbopSvcKeiStat) && SBOP_SVC_CD_NOTELNO.equals(chafSbopSvcCd)` // Non-notification call rejection changed |
| 3.10.1 | SET | `this.svc_kei_ucwk_no[0] = svc_kei_ucwk_no` |
| 3.10.2 | SET | `this.svc_kei_ucwk_gadtm[0] = chaf_svc_kei_ucwk_gene_add_dtm` |
| 3.10.3 | IF | `!(910 or 920 after)` // Not cancelled |
| 3.10.3.1 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_242` |
| 3.10.3.1.1 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_242)` // SIP + non-notification call rejection registration |
| 3.10.4 | ELSE | // Cancelled/withdrawn |
| 3.10.4.1 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_243` |
| 3.10.4.1.1 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_243)` // SIP + non-notification call rejection unregistration |
| 4 | IF | `chbfOpSvcKeiStat.equals(chafOpSvcKeiStat)` // Status unchanged |
| 4.1 | SET | `this.svc_kei_ucwk_no[0] = svc_kei_ucwk_no` |
| 4.2 | SET | `this.svc_kei_ucwk_gadtm[0] = chaf_svc_kei_ucwk_gene_add_dtm` |
| 4.3 | EXTRACT | `chafSbopSvcCd = chafEKK0401A010SCHash.get(SBOP_SVC_CD)` |
| 4.4 | IF | `!chbfSbopSvckeiStat.equals(chafSbopSvcKeiStat) && SBOP_SVC_CD_NOTELNO.equals(chafSbopSvcCd)` // Sub-option changed |
| 4.4.1 | CALL | `getSame_trn_no(param, handle, null, sameTrnNo)` |
| 4.4.2 | SET | `this.same_trn_no = sameTrnNo[0]` |
| 4.4.3 | IF | `!(910 or 920 after)` // Not cancelled |
| 4.4.3.1 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_242` |
| 4.4.3.1.1 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_242)` // SIP + non-notification call rejection registration |
| 4.4.4 | ELSE | // Cancelled/withdrawn |
| 4.4.4.1 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_243` |
| 4.4.4.1.1 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_243)` // SIP + non-notification call rejection unregistration |

**Block 18** — [IF] `opSvcCd == OP_SVC_CD_MWKTEL` (L9380)

> **Harassment Phone Rejection service branch.** Handles harassment call rejection registration/unregistration.

| # | Type | Code |
|---|------|------|
| 1 | EXTRACT | `chbfOpSvcKeiStat = chbfEKK0351A010SCHash.get(OP_SVC_KEI_STAT)` // Before status |
| 2 | EXTRACT | `chafOpSvcKeiStat = chafEKK0351A010SCHash.get(OP_SVC_KEI_STAT)` // After status |
| 3 | IF | `!chbfOpSvcKeiStat.equals(chafOpSvcKeiStat)` // Status changed |
| 3.1 | CALL | `getSame_trn_no(param, handle, null, sameTrnNo)` |
| 3.2 | SET | `this.same_trn_no = sameTrnNo[0]` |
| 3.3 | SET | `this.svc_kei_ucwk_no[0] = svc_kei_ucwk_no` |
| 3.4 | SET | `this.svc_kei_ucwk_gadtm[0] = chaf_svc_kei_ucwk_gene_add_dtm` |
| 3.5 | IF | `!(910 or 920 after)` // Not cancelled/withdrawn |
| 3.5.1 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_244` |
| 3.5.1.1 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_244)` // SIP + harassment call rejection registration |
| 3.6 | ELSE | // Cancelled/withdrawn |
| 3.6.1 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_245` |
| 3.6.1.1 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_245)` // SIP + harassment call rejection unregistration |

**Block 19** — [IF] `opSvcCd == OP_SVC_CD_STINO` (L9430)

> **Number Selection Rejection service branch.** Handles number selection rejection registration/unregistration.

| # | Type | Code |
|---|------|------|
| 1 | EXTRACT | `chbfOpSvcKeiStat = chbfEKK0351A010SCHash.get(OP_SVC_KEI_STAT)` // Before status |
| 2 | EXTRACT | `chafOpSvcKeiStat = chafEKK0351A010SCHash.get(OP_SVC_KEI_STAT)` // After status |
| 3 | IF | `!chbfOpSvcKeiStat.equals(chafOpSvcKeiStat)` // Status changed |
| 3.1 | CALL | `getSame_trn_no(param, handle, null, sameTrnNo)` |
| 3.2 | SET | `this.same_trn_no = sameTrnNo[0]` |
| 3.3 | SET | `this.svc_kei_ucwk_no[0] = svc_kei_ucwk_no` |
| 3.4 | SET | `this.svc_kei_ucwk_gadtm[0] = chaf_svc_kei_ucwk_gene_add_dtm` |
| 3.5 | IF | `!(910 or 920 after)` // Not cancelled/withdrawn |
| 3.5.1 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_246` |
| 3.5.1.1 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_246)` // SIP + number selection rejection registration |
| 3.6 | ELSE | // Cancelled/withdrawn |
| 3.6.1 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_247` |
| 3.6.1.1 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_247)` // SIP + number selection rejection unregistration |

**Block 20** — [IF] `opSvcCd == OP_SVC_CD_KOKUSAI_STP` (L9480)

> **International Call Suspension service branch.** Handles international call suspension registration/unregistration.

| # | Type | Code |
|---|------|------|
| 1 | EXTRACT | `chbfOpSvcKeiStat = chbfEKK0351A010SCHash.get(OP_SVC_KEI_STAT)` // Before status |
| 2 | EXTRACT | `chafOpSvcKeiStat = chafEKK0351A010SCHash.get(OP_SVC_KEI_STAT)` // After status |
| 3 | IF | `!chbfOpSvcKeiStat.equals(chafOpSvcKeiStat)` // Status changed |
| 3.1 | CALL | `getSame_trn_no(param, handle, null, sameTrnNo)` |
| 3.2 | SET | `this.same_trn_no = sameTrnNo[0]` |
| 3.3 | SET | `this.svc_kei_ucwk_no[0] = svc_kei_ucwk_no` |
| 3.4 | SET | `this.svc_kei_ucwk_gadtm[0] = chaf_svc_kei_ucwk_gene_add_dtm` |
| 3.5 | IF | `!(910 or 920 after)` // Not cancelled/withdrawn |
| 3.5.1 | CALL | `tsuikabunAddSOD(handle, param, ODR_NAIYO_CD_253)` // SIP + international call suspension registration |
| 3.6 | ELSE | // Cancelled/withdrawn |
| 3.6.1 | CALL | `tsuikabunAddSOD(handle, param, ODR_NAIYO_CD_254)` // SIP + international call suspension unregistration |

**Block 21** — [IF] `opSvcCd == OP_SVC_CD_IPV6` (L9532)

> **IPv6 service branch.** Handles IPv6 registration/unregistration based on pattern classification (1 = register, 3 = cancel). Calls `jdgIpv6` for conditional evaluation.

| # | Type | Code |
|---|------|------|
| 1 | SET | `this.op_svc_kei_no_ipv6 = chaf_opsvkei_no` // Save key info |
| 1.1 | SET | `this.op_gadtm_ipv6 = chaf_opsvkei_gene_add_dtm` |
| 2 | CALL | `getSame_trn_no(param, handle, null, sameTrnNo)` // Acquire same transaction number |
| 3 | SET | `this.same_trn_no = sameTrnNo[0]` |
| 4 | IF | `isBlank(chbf_opsvkei_no)` // IPv6 newly registered |
| 4.1 | SET | `this.sod_pattern_ipv6 = 1` // Pattern: IPv6 registration |
| 4.2 | CALL | `jdgIpv6(handle, param, "", chaf_opsvkei_no, chafEKK0361A010SCHash)` // Evaluate IPv6 conditions |
| 5 | ELSE-IF | `910 or 920 after` // IPv6 cancelled/withdrawn |
| 5.1 | SET | `this.sod_pattern_ipv6 = 3` // Pattern: IPv6 cancellation |
| 5.2 | CALL | `jdgIpv6(handle, param, "", chbf_opsvkei_no, chafEKK0361A010SCHash)` // Evaluate IPv6 conditions |
| 6 | ELSE-IF | `910 before && 100 after` // IPv6 restored |
| 6.1 | SET | `this.sod_pattern_ipv6 = 1` // Pattern: IPv6 registration |
| 6.2 | CALL | `jdgIpv6(handle, param, "", chaf_opsvkei_no, chafEKK0361A010SCHash)` // Evaluate IPv6 conditions |

**Block 22** — [IF] `opSvcCd == OP_SVC_CD_N050` (L9584)

> **050 Number Porting service branch.** Handles 050 number porting registration and unregistration.

| # | Type | Code |
|---|------|------|
| 1 | SET | `this.op_svc_kei_no_tikan = chaf_opsvkei_no` // Save key info |
| 1.1 | SET | `this.op_gadtm_tikan = chaf_opsvkei_gene_add_dtm` |
| 2 | SET | `this.svc_kei_ucwk_no[0] = svc_kei_ucwk_no` // Save service detail number |
| 3 | SET | `this.svc_kei_ucwk_gadtm[0] = chaf_svc_kei_ucwk_gene_add_dtm` // Save timestamp |
| 4 | IF | `isBlank(chbf_opsvkei_no) || (910 before && 100 after)` // New or restored |
| 4.1 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_248` |
| 4.2 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_248)` // Number porting registration |
| 5 | ELSE-IF | `910 or 920 after` // Cancelled/withdrawn |
| 5.1 | SET | `selectOdrNaiyoCd = ODR_NAIYO_CD_249` |
| 5.2 | CALL | `addSOD(handle, param, ODR_NAIYO_CD_249)` // Number porting deletion |

**Block 23** — [SET] (L9628)

> Final record saving. Saves before/after optional service numbers and timestamps as previous record data for audit tracking.

| # | Type | Code |
|---|------|------|
| 1 | SET | `this.mae_recode_chaf_op_svc_kei_no = new String(chaf_opsvkei_no)` // After-change number |
| 2 | SET | `this.mae_recode_chaf_op_svc_kei_gene_add_dtm = new String(chaf_opsvkei_gene_add_dtm)` // After-change timestamp |
| 3 | SET | `this.mae_recode_chbf_op_svc_kei_no = new String(chbf_opsvkei_no)` // Before-change number |
| 4 | SET | `this.mae_recode_chbf_op_svc_kei_gene_add_dtm = new String(chbf_opsvkei_gene_add_dtm)` // Before-change timestamp |
| 5 | RETURN | `return param` // Return updated parameter object |

## 7. Glossary

### Acronyms

| Term | Type | Business Meaning |
|------|------|------------------|
| SOD | Acronym | Service Order Data — the core data structure representing service order requests in the Fujitsu eo Light platform. SOD records trigger downstream billing, provisioning, and customer notification workflows. |
| SODCC | Acronym | SOD Control Class — a common component class that orchestrates SOD issuance logic across multiple business scenarios. |
| CBS | Acronym | Customer Business System — the backend service component layer. Each CBS method handles a specific business transaction. |
| SC | Acronym | Service Component — the lower-level service interface layer (e.g., EKK0351A010SC). |
| NET | Acronym | eo Light Internet — the fiber-to-the-home (FTTH) broadband internet service. |
| TEL | Acronym | eo Light Phone — the IP telephony service. |
| ISP | Acronym | Internet Service Provider — the ISP-specific optional service tier. |
| FTTH | Business term | Fiber To The Home — fiber-optic broadband internet service connecting the customer premise directly to the network. |
| IPv6 | Business term | Internet Protocol version 6 — the next-generation IP protocol providing expanded address space. In this system, IPv6 is treated as an optional service that can be registered/unregistered. |
| ML | Acronym | Mailing List — an email-based distribution list service offered as an optional add-on. |
| SIP | Business term | Session Initiation Protocol — the VoIP protocol used for managing call forwarding, caller ID display, harassment rejection, and number selection features. |
| OLS | Acronym | Optional Layer Settings — OLS settings relate to router configuration including VLAN-ID assignment and SIP/assigned phone registration. |
| VR | Acronym | Version — refers to the legacy VR (version) system used for compatibility identification of older service detail codes. |
| BPM | Acronym | Business Process Management — the BPM (banpo) system handles work orders for field service engineers. |

### Japanese-Named Fields

| Term | Type | Business Meaning |
|------|------|------------------|
| `op_svc_kei_no` | Field | Optional service contract number — the unique identifier for an optional service contract line item. Used across Email, HP, ML, Fixed IP, Multisection, Dial-up, Fm Cell, IPv6, and 050 Number Porting branches. |
| `op_svc_kei_gene_add_dtm` | Field | Optional service contract generation registration timestamp — the creation/modification timestamp for the optional service contract. |
| `chbf_opsvkei_no` | Field | Before-change optional service contract number — the optional service number as it existed before the current change/cancellation operation. |
| `chaf_opsvkei_no` | Field | After-change optional service contract number — the optional service number as it exists after the current change/cancellation operation. |
| `ido_div` | Field | Change division code — classifies the type of business operation (00001=new contract, 00005=cancellation, 00004=recovery, etc.). |
| `svc_kei_ucwk_no` | Field | Service detail contract number — the unique identifier for the service detail (contract line item) within the service contract. |
| `svc_kei_ucwk_gadtm` | Field | Service detail generation registration timestamp — the creation timestamp for the service detail. |
| `sbop_svckeino_mlvirus` | Field | Sub-option service number for mail antivirus — the sub-option number for the mail security check (antivirus) service. |
| `sbop_svckeino_alias` | Field | Sub-option service number for mail alias — the sub-option number for the mail alias service. |
| `same_trn_no` | Field | Same transaction number — a deduplication number used to ensure that related changes are processed together and not duplicated. |
| `sod_pattern_ipv6` | Field | IPv6 SOD pattern — a discriminator flag: 1 = IPv6 registration, 3 = IPv6 cancellation. Used to route IPv6 processing to the correct downstream handler. |
| `old_vrsb_jdg_svc_dtl_cd` | Field | Old VR identification determination service detail code — used for compatibility with the legacy VR (version) system. |
| `taknkiki_model_cd` | Field | Indoor equipment model code — the model code of the customer's indoor terminal equipment (from EKK0341A010SC). |
| `kiki_seizo_no` | Field | Equipment serial number — the serial number of the customer's indoor terminal equipment. |
| `kktk_svc_kei_no` | Field | Device provision service contract number — the contract number for device-provided services (e.g., leased router/terminal). |
| `svc_kei_kaisen_ucwk_no` | Field | Service line detail contract number — the contract number for the service line detail (includes VLAN-ID information). |
| `mlad` | Field | Mail address — the email address registered for the mail optional service. |
| `pplan_cd` | Field | Plan code — the pricing plan code associated with the service contract. |
| `mae_recode_chaf_op_svc_kei_no` | Field | Previous record after-change optional service number — audit field storing the last known after-change optional service number. |
| `mae_recode_chbf_op_svc_kei_no` | Field | Previous record before-change optional service number — audit field storing the last known before-change optional service number. |
| `op_svc_kei_no_ml` | Field | Optional service number for mail — the mail service's optional service number. |
| `op_svc_kei_no_hp` | Field | Optional service number for homepage — the homepage/HP service's optional service number. |
| `op_svc_kei_no_mlist` | Field | Optional service number for mailing list — the mailing list service's optional service number. |
| `op_svc_kei_no_fixipad` | Field | Optional service number for fixed IP address — the fixed IP address service's optional service number. |
| `op_svc_kei_no_mltise` | Field | Optional service number for multisection — the multisection service's optional service number. |
| `op_svc_kei_no_dial` | Field | Optional service number for dial-up — the dial-up connection service's optional service number. |
| `op_svc_kei_no_fmtcel` | Field | Optional service number for Fm Cell — the mobile phone service's optional service number. |
| `op_svc_kei_no_ipv6` | Field | Optional service number for IPv6 — the IPv6 service's optional service number. |
| `op_svc_kei_no_tikan` | Field | Optional service number for number porting (050) — the 050 number porting service's optional service number. |

### SOD Order Content Codes

| Constant | Value | Business Meaning |
|----------|-------|-----------------|
| `ODR_NAIYO_CD_101` | "101" | FTTH authentication/registration |
| `ODR_NAIYO_CD_106` | "106" | FTTH authentication/temporary suspension |
| `ODR_NAIYO_CD_107` | "107" | FTTH authentication/pause cancellation |
| `ODR_NAIYO_CD_108` | "108" | Mail registration |
| `ODR_NAIYO_CD_110` | "110" | Mail alias registration |
| `ODR_NAIYO_CD_111` | "111" | Mail alias change |
| `ODR_NAIYO_CD_112` | "112" | Mail alias unregistration |
| `ODR_NAIYO_CD_113` | "113" | Mail/Email backup capacity change |
| `ODR_NAIYO_CD_114` | "114" | Mail/Security Check (antivirus) registration |
| `ODR_NAIYO_CD_115` | "115" | Mail/Security Check (antivirus) unregistration |
| `ODR_NAIYO_CD_116` | "116" | Mail unregistration |
| `ODR_NAIYO_CD_117` | "117" | Mail unregistration (with schedule date) |
| `ODR_NAIYO_CD_119` | "119" | Mail deletion (with schedule date) |
| `ODR_NAIYO_CD_120` | "120" | Mail restoration |
| `ODR_NAIYO_CD_121` | "121" | Web/Homepage registration |
| `ODR_NAIYO_CD_123` | "123" | Web/Homepage capacity change |
| `ODR_NAIYO_CD_124` | "124" | Web/Access analytics registration |
| `ODR_NAIYO_CD_125` | "125" | Web/Access analytics unregistration |
| `ODR_NAIYO_CD_126` | "126" | Web/Homepage unregistration |
| `ODR_NAIYO_CD_127` | "127" | Web/Homepage deletion |
| `ODR_NAIYO_CD_128` | "128" | Web/Homepage restoration |
| `ODR_NAIYO_CD_129` | "129" | Mailing List registration |
| `ODR_NAIYO_CD_131` | "131" | Mailing List unregistration |
| `ODR_NAIYO_CD_133` | "133" | Mailing List restoration |
| `ODR_NAIYO_CD_134` | "134" | Dial-up connection registration (restoration) |
| `ODR_NAIYO_CD_136` | "136" | Dial-up connection plan change |
| `ODR_NAIYO_CD_137` | "137" | Dial-up connection unregistration |
| `ODR_NAIYO_CD_138` | "138" | Dial-up connection deletion |
| `ODR_NAIYO_CD_142` | "142" | Multisection (dynamic) registration |
| `ODR_NAIYO_CD_143` | "143" | Multisection (dynamic) unregistration |
| `ODR_NAIYO_CD_144` | "144" | Multisection (static) registration |
| `ODR_NAIYO_CD_145` | "145" | Multisection (static) unregistration |
| `ODR_NAIYO_CD_146` | "146" | Multisection (static) deletion |
| `ODR_NAIYO_CD_152` | "152" | Fixed IP address registration |
| `ODR_NAIYO_CD_153` | "153" | Fixed IP address restoration |
| `ODR_NAIYO_CD_154` | "154" | Fixed IP address unregistration |
| `ODR_NAIYO_CD_161` | "161" | Multisection (static) restoration |
| `ODR_NAIYO_CD_162` | "162" | Multisection (static) session count change |
| `ODR_NAIYO_CD_164` | "164" | Fm Cell registration |
| `ODR_NAIYO_CD_166` | "166" | Fm Cell unregistration |
| `ODR_NAIYO_CD_167` | "167" | Fm Cell deletion |
| `ODR_NAIYO_CD_214` | "214" | OLS settings + assigned phone registration |
| `ODR_NAIYO_CD_234` | "234" | SIP + assigned phone registration |
| `ODR_NAIYO_CD_235` | "235" | SIP + assigned phone unregistration |
| `ODR_NAIYO_CD_236` | "236" | SIP + call forwarding registration |
| `ODR_NAIYO_CD_237` | "237" | SIP + call forwarding unregistration |
| `ODR_NAIYO_CD_238` | "238" | SIP + call forwarding selection registration |
| `ODR_NAIYO_CD_239` | "239" | SIP + call forwarding selection unregistration |
| `ODR_NAIYO_CD_240` | "240" | SIP + caller ID display registration |
| `ODR_NAIYO_CD_241` | "241" | SIP + caller ID display unregistration |
| `ODR_NAIYO_CD_242` | "242" | SIP + non-notification call rejection registration |
| `ODR_NAIYO_CD_243` | "243" | SIP + non-notification call rejection unregistration |
| `ODR_NAIYO_CD_244` | "244" | SIP + harassment call rejection registration |
| `ODR_NAIYO_CD_245` | "245" | SIP + harassment call rejection unregistration |
| `ODR_NAIYO_CD_246` | "246" | SIP + number selection rejection registration |
| `ODR_NAIYO_CD_247` | "247" | SIP + number selection rejection unregistration |
| `ODR_NAIYO_CD_248` | "248" | 050 number porting registration |
| `ODR_NAIYO_CD_249` | "249" | 050 number porting deletion |
| `ODR_NAIYO_CD_253` | "253" | SIP + international call suspension registration |
| `ODR_NAIYO_CD_254` | "254" | SIP + international call suspension unregistration |

### State Transition Constants

| Constant | Value | Business Meaning |
|----------|-------|-----------------|
| `SVC_KEI_STAT_100` | "100" | Service Provision Active — standard active status for service contracts |
| `SVC_KEI_STAT_020` | "020" | Inspection Complete — service contract has passed inspection |
| `SVC_KEI_STAT_030` | "030" | Contract Complete — service contract is fully contracted |
| `SVC_KEI_STAT_910` | "910" | Contract Cancelled — the service contract has been cancelled |
| `SVC_KEI_STAT_920` | "920" | Contract Withdrawn — the service contract has been withdrawn |
| `PAUSE_JDG_CD_1` | "1" | Pause judgment code 1 — the service is in suspended state |
| `PAUSE_JDG_CD_0` | "0" | Pause judgment code 0 — the service is not suspended |
| `IDO_DIV_DSL` | "00005" | Change division: Cancellation |
| `IDO_DIV_TEKKYODSL` | "00006" | Change division: Withdrawal (Cancellation) |
| `IDO_DIV_KYOSEIDSL` | "00007" | Change division: Forced Cancellation |
| `IDO_DIV_KYOSEIDSLFIX` | "00007" | Change division: Forced Cancellation Determined |
| `IDO_DIV_CANCEL` | "00008" | Change division: Cancel |
| `IDO_DIV_OPSETTE` | "00031" | Change division: Option Settings |
| `IDO_DIV_KAIHK` | "00004" | Change division: Recovery |
| `IDO_DIV_NEW` | "00001" | Change division: New Contract |

### Service Branch Optional Service Codes

| Constant | Value | Business Meaning |
|----------|-------|-----------------|
| `OP_SVC_CD_EMAIL` | "EML" | Mail/Email service |
| `OP_SVC_CD_HP` | "HP" | Homepage/Website service |
| `OP_SVC_CD_MLIST` | "ML" | Mailing List service |
| `OP_SVC_CD_FIXIPAD` | "FIXIPAD" | Fixed IP Address service |
| `OP_SVC_CD_MLTISE` | "MLTISE" | Multisection (multi-IP) service |
| `OP_SVC_CD_DUP` | "DUP" | Dial-up connection service |
| `OP_SVC_CD_FMTCEL` | "FMTCEL" | Fm Cell (mobile phone) service |
| `OP_SVC_CD_WARKMI` | "WARKMI" | Assigned Phone (work/home phone assignment) service |
| `OP_SVC_CD_TENSO` | "TENSO" | Call Forwarding service |
| `OP_SVC_CD_DSP` | "DSP" | Caller ID Display service |
| `OP_SVC_CD_MWKTEL` | "MWKTEL" | Harassment Phone Rejection service |
| `OP_SVC_CD_STINO` | "STINO" | Number Selection Rejection service |
| `OP_SVC_CD_KOKUSAI_STP` | "KOKUSAI_STP" | International Call Suspension service |
| `OP_SVC_CD_IPV6` | "IPV6" | IPv6 service |
| `OP_SVC_CD_N050` | "N050" | 050 Number Porting service |
