### Phase 4: State Comparison

**Block 3** -- [SET] State Variables (L11820)

| # | Type | Code |
|---|------|------|
| 1 | SET | selectOdrNaiyoCd = "" (selected order content code) |
| 2 | SET | opsvkeiStatBefore = before-option service contract status |
| 3 | SET | opsvkeiStatAfter = after-option service contract status |
| 4 | SET | isNewOpsvkei = isBlank(chbf_opsvkei_no) && !isBlank(chaf_opsvkei_no) (new option contract) |
| 5 | SET | isNewOpsvkei &= !SVC_KEI_STAT_920.equals(opsvkeiStatAfter) (exclude cancelled [KT1-2013-0000105]) |
| 6 | SET | isDslOpsvkei = status is 910 (disconnected) or 920 (cancelled) |
| 7 | SET | isShosaCl = IDO_DIV_CANCEL && status is 010 (inspection cancellation) |
| 8 | SET | isKaihkOpsvkei = status transition 910/920 -> 100/020/030 (recovered) |
| 9 | SET | isChgOpsvkei = status is same 100/020/030 before and after (modified) |

---

### Phase 5: Email Service Dispatch

**Block 4** -- [IF] `OP_SVC_CD_EMAIL.equals(opSvcCd)` (L11834)

Email service SOD processing. Creates email add/cancel/delete/change/recover orders.

**Block 4.1** -- [SET] Key Info for Email (L11837)

| # | Type | Code |
|---|------|------|
| 1 | SET | this.op_svc_kei_no_ml = chaf_opsvkei_no |
| 2 | SET | this.op_gadtm_ml = chaf_opsvkei_gene_add_dtm |
| 3 | SET | this.mlad = MLAD from chafEKK0361A010SCHash |

**Block 4.1.1** -- [IF] `isNewOpsvkei` (Email + New Option)

| # | Type | Code |
|---|------|------|
| 1 | IF | chgOpsvKeiJdg(...) && 0 < sameTrnJdg(...) (real change and has shared transaction) |
| 2 | SET | sameTrnNo = new String[1] |
| 3 | CALL | getSame_trn_no(param, handle, null, sameTrnNo) |
| 4 | SET | this.same_trn_no = sameTrnNo[0] |
| 5 | IF | chgOpsvKeiJdg(...) (before and after numbers/dates differ) |
| 6 | SET | set priority HIGH in work map [OM-2015-0001453] |
| 7 | CALL | addSOD(handle, param, ODR_NAIYO_CD_108) (Email registration) |
| 8 | SET | restore priority in work map |

**Block 4.1.2** -- [ELSE-IF] `isDslOpsvkei` (Email + Disconnected)

| # | Type | Code |
|---|------|------|
| 1 | IF | ido_div NOT in DSL/TEKKYO/kyosei/forced cancel/modalities |
| 2 | SET | this.same_trn_no = "" (clear shared transaction number) |
| 3 | CALL | addSOD(handle, param, ODR_NAIYO_CD_116) (Email cancellation) |
| 4 | IF | isShosaCl (inspection cancellation) |
| 5 | CALL | addSOD(handle, param, ODR_NAIYO_CD_118) (Email deletion) |

**Block 4.1.3** -- [ELSE-IF] `isKaihkOpsvkei` (Email + Recovered)

| # | Type | Code |
|---|------|------|
| 1 | SET | this.same_trn_no = "" (clear shared transaction number) |
| 2 | CALL | addSOD(handle, param, ODR_NAIYO_CD_120) (Email recovery registration) |

**Block 4.1.4** -- [ELSE-IF] `isChgOpsvkei` (Email + Modified)

| # | Type | Code |
|---|------|------|
| 1 | IF | chgOpsvKeiJdg(...) && 0 < sameTrnJdg(...) (real change and has shared transaction) |
| 2 | SET | sameTrnNo = new String[1] |
| 3 | CALL | getSame_trn_no(param, handle, null, sameTrnNo) |
| 4 | IF | chgOpsvKeiJdg(...) (before and after differ) |
| 5 | SET | chbfMlad = before-option mail address, chafMlad = after-option mail address |
| 6 | IF | chbfMlad != chafMlad && both not blank (mail address changed) |
| 7 | IF | isBlank(this.same_trn_no) (shared transaction not yet obtained) |
| 8 | CALL | getSame_trn_no(param, handle, null, sameTrnNo) |
| 9 | SET | store before/after key info fields |
| 10 | SET | set priority LOW in work map [ANK-3227-00-00] |
| 11 | CALL | addSOD(handle, param, ODR_NAIYO_CD_117) (Email address cancellation with schedule) |
| 12 | CALL | addSOD(handle, param, ODR_NAIYO_CD_119) (Email address deletion with schedule) |
| 13 | SET | store after key info |
| 14 | SET | set priority HIGH in work map |
| 15 | CALL | addSOD(handle, param, ODR_NAIYO_CD_108) (Email address registration) |
| 16 | SET | restore priority in work map |

**Block 4.2** -- [SET] Sub-option Service Code Extraction (L11915)

| # | Type | Code |
|---|------|------|
| 1 | SET | chafsbopSvcCd = chafEKK0401A010SCHash.get(SBOP_SVC_CD) |
| 2 | SET | chafSbopSvcKeiStat = chafEKK0401A010SCHash.get(SBOP_SVC_KEI_STAT) |
| 3 | SET | chbfSbopSvckeiStat = chbfEKK0401A010SCHash.get(SBOP_SVC_KEI_STAT) |
| 4 | SET | isNewSbopkei = isBlank(chbf_sbopsvkei_no) && !isBlank(chaf_sbopsvkei_no) |
| 5 | SET | isNewSbopkei &= !SVC_KEI_STAT_920.equals(chafSbopSvcKeiStat) |
| 6 | SET | isDslSbopkei = status transitions to 910/920 (disconnected/cancelled) |
| 7 | SET | isSbopkeiStatNotChg = before and after status are the same |

**Block 4.2.1** -- [IF] Virus check new? `isNewSbopkei && SBOP_SVC_CD_VIRUS.equals(chafsbopSvcCd)`

| # | Type | Code |
|---|------|------|
| 1 | SET | priority HIGH in work map |
| 2 | CALL | addSOD(handle, param, ODR_NAIYO_CD_114) (Email + VirusCheck registration) |
| 3 | SET | restore priority |

**Block 4.2.2** -- [ELSE-IF] Virus check disconnected? `SBOP_SVC_CD_VIRUS && isDslSbopkei`

| # | Type | Code |
|---|------|------|
| 1 | SET | priority HIGH in work map |
| 2 | SET | this.sbop_svckeino_mlvirus = chbf_sbopsvkei_no |
| 3 | SET | this.sbop_gadtm_mlvirus = chbf_sbopsvkei_gene_add_dtm |
| 4 | CALL | addSOD(handle, param, ODR_NAIYO_CD_115) (Email + VirusCheck cancellation) |
| 5 | SET | restore priority |

**Block 4.2.3** -- [ELSE-IF] Mailbox capacity new/disconnected? `SBOP_SVC_CD_MLCAPA.equals(chafsbopSvcCd) && (isNewSbopkei || isDslSbopkei)`

| # | Type | Code |
|---|------|------|
| 1 | SET | priority HIGH in work map |
| 2 | CALL | addSOD(handle, param, ODR_NAIYO_CD_113) (Email + Mailbox capacity change) |
| 3 | SET | restore priority |

**Block 4.2.4** -- [ELSE-IF] Mailbox capacity unchanged but differs? `isSbopkeiStatNotChg && MLCAPA`

| # | Type | Code |
|---|------|------|
| 1 | SET | chbfCapa = before sub-option capacity, chafCapa = after sub-option capacity |
| 2 | IF | chbfCapa != chafCapa (capacity differs) |
| 3 | SET | priority HIGH in work map |
| 4 | CALL | addSOD(handle, param, ODR_NAIYO_CD_113) (Email + Mailbox capacity change) |
| 5 | SET | restore priority |

**Block 4.2.5** -- [ELSE-IF] Alias new? `isNewSbopkei && SBOP_SVC_CD_ALIAS.equals(chafsbopSvcCd)`

| # | Type | Code |
|---|------|------|
| 1 | SET | priority HIGH in work map |
| 2 | SET | this.sbop_svckeino_alias = chaf_sbopsvkei_no |
| 3 | CALL | addSOD(handle, param, ODR_NAIYO_CD_110) (Email + Alias registration) |
| 4 | SET | restore priority |

**Block 4.2.6** -- [ELSE-IF] Alias disconnected? `isDslSbopkei && SBOP_SVC_CD_ALIAS`

| # | Type | Code |
|---|------|------|
| 1 | SET | priority HIGH in work map |
| 2 | SET | this.sbop_svckeino_alias = chbf_sbopsvkei_no |
| 3 | CALL | addSOD(handle, param, ODR_NAIYO_CD_112) (Email + Alias cancellation) |
| 4 | SET | restore priority |

**Block 4.2.7** -- [ELSE-IF] Alias unchanged but differs? `isSbopkeiStatNotChg && SBOP_SVC_CD_ALIAS`

| # | Type | Code |
|---|------|------|
| 1 | SET | chbfAlias = before mail alias, chafAlias = after mail alias |
| 2 | IF | chbfAlias != chafAlias (alias differs) |
| 3 | SET | priority HIGH in work map |
| 4 | CALL | addSOD(handle, param, ODR_NAIYO_CD_111) (Email + Alias change) |
| 5 | SET | restore priority |

---

### Phase 6: Home Page Service Dispatch

**Block 5** -- [IF] `OP_SVC_CD_HP.equals(opSvcCd)` (L12084)

Home Page SOD processing. Creates home page registration/cancellation/deletion/change orders.

**Block 5.1** -- [IF] `isNewOpsvkei` (HP + New Option)

| # | Type | Code |
|---|------|------|
| 1 | SET | chafUrlDomain = URL domain from chafEKK0361A010SCHash |
| 2 | SET | chafUrlAccount = URL account from chafEKK0361A010SCHash |
| 3 | IF | chafUrlDomain and chafUrlAccount both NOT blank (URL configured) |
| 4 | IF | chgOpsvKeiJdg(...) && 0 < sameTrnJdg(...) (has shared transaction) |
| 5 | CALL | getSame_trn_no(param, handle, null, sameTrnNo) |
| 6 | IF | chgOpsvKeiJdg(...) (before/after differ) |
| 7 | CALL | addSOD(handle, param, ODR_NAIYO_CD_121) (WEB registration) |

**Block 5.2** -- [ELSE-IF] `isDslOpsvkei` (HP + Disconnected)

| # | Type | Code |
|---|------|------|
| 1 | IF | URL configured |
| 2 | IF | IDO_DIV_OPSETTE.equals(ido_div) (option settings modality) |
| 3 | SET | this.same_trn_no = "" |
| 4 | CALL | addSOD(handle, param, ODR_NAIYO_CD_126) (WEB cancellation) |
| 5 | IF | isShosaCl (inspection cancellation) |
| 6 | CALL | addSOD(handle, param, ODR_NAIYO_CD_127) (WEB deletion) |

**Block 5.3** -- [ELSE-IF] `isKaihkOpsvkei` (HP + Recovered)

| # | Type | Code |
|---|------|------|
| 1 | IF | URL configured |
| 2 | CALL | addSOD(handle, param, ODR_NAIYO_CD_128) (WEB recovery registration) |

**Block 5.4** -- [ELSE-IF] `isChgOpsvkei` (HP + Modified)

| # | Type | Code |
|---|------|------|
| 1 | IF | chgOpsvKeiJdg(...) && 0 < sameTrnJdg(...) (has shared transaction) |
| 2 | CALL | getSame_trn_no(param, handle, null, sameTrnNo) |
| 3 | IF | chgOpsvKeiJdg(...) (before/after differ) |
| 4 | SET | chbfUrl = before URL account, chafUrl = after URL account |
| 5 | IF | chafUrl != chbfUrl && chafUrl not blank (URL account changed) |
| 6 | IF | isBlank(this.same_trn_no) (shared transaction not yet obtained) |
| 7 | IF | !isBlank(chbfUrl) (before URL exists) |
| 8 | CALL | addSOD(handle, param, ODR_NAIYO_CD_126) (WEB cancellation) |
| 9 | CALL | addSOD(handle, param, ODR_NAIYO_CD_127) (WEB deletion) |
| 10 | CALL | addSOD(handle, param, ODR_NAIYO_CD_121) (WEB registration) |

**Block 5.5** -- [IF] Home page capacity change? (L12202, OM-2014-0000880)

> Checks if the ISP capacity field differs. Only applicable when option status is 100/030/020.

| # | Type | Code |
|---|------|------|
| 1 | IF | chbfEKK0361A010SCHash and chafEKK0361A010SCHash both exist |
| 2 | SET | chbfCapa = before ISP capacity, chafCapa = after ISP capacity |
| 3 | SET | isHakkoSod = status is 100/030/020 |
| 4 | IF | isHakkoSod && both capacity values NOT blank && differ |
| 5 | CALL | addSOD(handle, param, ODR_NAIYO_CD_123) (WEB + Home page capacity change) |
