## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["opSetOdrCtrl params"])
    EXTRACT["Extract Maps from sodMap"]
    SHKKA["Call shkkaMap on all 5 maps"]
    GET_FIELDS["Extract business fields from maps"]
    SHKKA_CHR["Call shkkaChr on opsvkei fields"]
    CHECK_BLANK_1{isBlank chaf or chbf opsvkei_no}
    EARLY_RETURN["Return param early"]
    SAVE_IPV6["Save ipv6 fields"]
    CHECK_CHBF{has chbf_opsvkei_no and chbf_opsvkei_gene_add_dtm}
    CHBF_IN["Build chbfInHash"]
    CALL_0351_BF["callEKK0351A010SC before change"]
    GET_OPSVCD_BF["Get opSvcCd before change"]
    JUDGE_OP_SVC["Call jdgOpSvcKind before"]
    CHECK_OP_NULL_BEFORE{opSvcKind before is null}
    EARLY_RETURN_BEFORE["Return param"]
    NET_BEFORE{opSvcKind is NET service}
    CHBF_0361_NET["callEKK0361A010SC before ISP"]
    TEL_BEFORE{opSvcKind is TEL service}
    CHBF_SBOP_BEFORE{has sub-op and opSvcKind 2nd elem is 1}
    CHBF_0411_BF["callEKK0411A010SC before SBOP ISP"]
    CHBF_0401_BF["callEKK0401A010SC before SBOP"]
    CHAF_IN["Build chafInHash"]
    CALL_0351_AF["callEKK0351A010SC after change"]
    GET_OPSVCD_AF["Get opSvcCd after change"]
    JUDGE_OP_SVC_AF["Call jdgOpSvcKind after"]
    CHECK_OP_NULL_AFTER{opSvcKind after is null}
    EARLY_RETURN_AFTER["Return param"]
    NET_AFTER{opSvcKind is NET service}
    CHAF_0361_NET2["callEKK0361A010SC after ISP"]
    TEL_AFTER2{opSvcKind is TEL service}
    CHAF_SBOP_AFTER{has sub-op and opSvcKind 2nd elem is 1}
    CHAF_0411_AF["callEKK0411A010SC after SBOP ISP"]
    CHAF_0401_AF["callEKK0401A010SC after SBOP"]
    CALC_FLAGS["Calculate: isNewOpsvkei, isDslOpsvkei, isKaihkOpsvkei, isChgOpsvkei"]
    DISPATCH_EMAIL{opSvcCd equals EMAIL}
    DISPATCH_HP{opSvcCd equals HP}
    DISPATCH_MLIST{opSvcCd equals MLIST}
    DISPATCH_FIXIPAD{opSvcCd equals FIXIPAD}
    DISPATCH_MLTISE{opSvcCd equals MLTISE}
    DISPATCH_DUP{opSvcCd equals DUP}
    DISPATCH_FMTCEL{opSvcCd equals FMTCEL}
    DISPATCH_WARKMI{opSvcCd equals WARKMI}
    DISPATCH_TENSO{opSvcCd equals TENSO}
    DISPATCH_DSP{opSvcCd equals DSP}
    DISPATCH_MWKTEL{opSvcCd equals MWKTEL}
    DISPATCH_STINO{opSvcCd equals STINO}
    DISPATCH_KOKUSAI{opSvcCd equals KOKUSAI_STP}
    DISPATCH_IPV6{opSvcCd equals IPV6}
    DISPATCH_N050{opSvcCd equals N050}
    BLOCK_EMAIL["Email branch"]
    BLOCK_HP["HP branch"]
    BLOCK_MLIST["Mailing List branch"]
    BLOCK_FIXIPAD["Fixed IP branch"]
    BLOCK_MLTISE["Multisection branch"]
    BLOCK_DUP["Dial-up branch"]
    BLOCK_FMTCEL["Fm Cell branch"]
    BLOCK_WARKMI["Assigned Phone branch"]
    BLOCK_TENSO["Call Forwarding branch"]
    BLOCK_DSP["Caller ID branch"]
    BLOCK_MWKTEL["Harassment Phone branch"]
    BLOCK_STINO["Number Selection branch"]
    BLOCK_KOKUSAI["Intl Suspend branch"]
    BLOCK_IPV6["IPv6 branch"]
    BLOCK_N050["050 Number branch"]
    SAVE_FINAL["Save mae_recode fields"]
    RETURN["Return param"]
    START --> EXTRACT --> SHKKA --> GET_FIELDS --> SHKKA_CHR --> CHECK_BLANK_1
    CHECK_BLANK_1 -->|No| SAVE_IPV6 --> CHECK_CHBF
    CHECK_BLANK_1 -->|Yes| EARLY_RETURN
    CHECK_CHBF -->|Yes| CHBF_IN --> CALL_0351_BF --> GET_OPSVCD_BF --> JUDGE_OP_SVC --> CHECK_OP_NULL_BEFORE
    CHECK_OP_NULL_BEFORE -->|Yes| EARLY_RETURN_BEFORE
    CHECK_OP_NULL_BEFORE -->|No| NET_BEFORE
    NET_BEFORE -->|Yes| CHBF_0361_NET --> CHBF_SBOP_BEFORE
    NET_BEFORE -->|No| TEL_BEFORE --> CHBF_SBOP_BEFORE
    CHBF_SBOP_BEFORE -->|Yes| NET_SBOP_BF
    CHBF_SBOP_BEFORE -->|No| CHAF_IN
    NET_SBOP_BF -->|Yes| CHBF_0411_BF --> CHBF_0401_BF
    NET_SBOP_BF -->|No| CHBF_0401_BF
    CHBF_0401_BF --> CHAF_IN
    CHAF_IN --> CALL_0351_AF --> GET_OPSVCD_AF --> JUDGE_OP_SVC_AF --> CHECK_OP_NULL_AFTER
    CHECK_OP_NULL_AFTER -->|Yes| EARLY_RETURN_AFTER
    CHECK_OP_NULL_AFTER -->|No| NET_AFTER
    NET_AFTER -->|Yes| CHAF_0361_NET2
    NET_AFTER -->|No| TEL_AFTER2
    TEL_AFTER2 -->|Yes| CHAF_SBOP_AFTER
    TEL_AFTER2 -->|No| CHAF_SBOP_AFTER
    CHAF_SBOP_AFTER -->|Yes| NET_SBOP_AF
    CHAF_SBOP_AFTER -->|No| CALC_FLAGS
    NET_SBOP_AF -->|Yes| CHAF_0411_AF --> CHAF_0401_AF
    NET_SBOP_AF -->|No| CHAF_0401_AF
    CHAF_0401_AF --> CALC_FLAGS
    CALC_FLAGS --> DISPATCH_EMAIL
    DISPATCH_EMAIL -->|Yes| BLOCK_EMAIL --> DISPATCH_HP
    DISPATCH_EMAIL -->|No| DISPATCH_HP
    DISPATCH_HP -->|Yes| BLOCK_HP --> DISPATCH_MLIST
    DISPATCH_HP -->|No| DISPATCH_MLIST
    DISPATCH_MLIST -->|Yes| BLOCK_MLIST --> DISPATCH_FIXIPAD
    DISPATCH_MLIST -->|No| DISPATCH_FIXIPAD
    DISPATCH_FIXIPAD -->|Yes| BLOCK_FIXIPAD --> DISPATCH_MLTISE
    DISPATCH_FIXIPAD -->|No| DISPATCH_MLTISE
    DISPATCH_MLTISE -->|Yes| BLOCK_MLTISE --> DISPATCH_DUP
    DISPATCH_MLTISE -->|No| DISPATCH_DUP
    DISPATCH_DUP -->|Yes| BLOCK_DUP --> DISPATCH_FMTCEL
    DISPATCH_DUP -->|No| DISPATCH_FMTCEL
    DISPATCH_FMTCEL -->|Yes| BLOCK_FMTCEL --> DISPATCH_WARKMI
    DISPATCH_FMTCEL -->|No| DISPATCH_WARKMI
    DISPATCH_WARKMI -->|Yes| BLOCK_WARKMI --> DISPATCH_TENSO
    DISPATCH_WARKMI -->|No| DISPATCH_TENSO
    DISPATCH_TENSO -->|Yes| BLOCK_TENSO --> DISPATCH_DSP
    DISPATCH_TENSO -->|No| DISPATCH_DSP
    DISPATCH_DSP -->|Yes| BLOCK_DSP --> DISPATCH_MWKTEL
    DISPATCH_DSP -->|No| DISPATCH_MWKTEL
    DISPATCH_MWKTEL -->|Yes| BLOCK_MWKTEL --> DISPATCH_STINO
    DISPATCH_MWKTEL -->|No| DISPATCH_STINO
    DISPATCH_STINO -->|Yes| BLOCK_STINO --> DISPATCH_KOKUSAI
    DISPATCH_STINO -->|No| DISPATCH_KOKUSAI
    DISPATCH_KOKUSAI -->|Yes| BLOCK_KOKUSAI --> DISPATCH_IPV6
    DISPATCH_KOKUSAI -->|No| DISPATCH_IPV6
    DISPATCH_IPV6 -->|Yes| BLOCK_IPV6 --> DISPATCH_N050
    DISPATCH_IPV6 -->|No| DISPATCH_N050
    DISPATCH_N050 -->|Yes| BLOCK_N050 --> SAVE_FINAL
    DISPATCH_N050 -->|No| SAVE_FINAL
    SAVE_FINAL --> RETURN
```

### Constant Resolution Reference

| Constant | Value | Business Meaning |
|----------|-------|-----------------|
| `SVC_KIND_NET` | "1" | eo Light Internet service type |
| `SVC_KIND_TEL` | "2" | eo Light Phone service type |
| `SVC_KIND_MOB` | "4" | eo Mobile service type |
| `SVC_KEI_STAT_100` | "100" | Service Provision Active (standard active status) |
| `SVC_KEI_STAT_020` | "020" | Inspection Complete |
| `SVC_KEI_STAT_030` | "030" | Contract Complete |
| `SVC_KEI_STAT_910` | "910" | Contract Cancelled |
| `SVC_KEI_STAT_920` | "920" | Contract Withdrawn |
| `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 |
| `PAUSE_JDG_CD_1` | "1" | Pause judgment code 1: Service suspended |
| `PAUSE_JDG_CD_0` | "0" | Pause judgment code 0: Service not suspended |
| `FUNC_CODE_1` | "1" | Function code 1 (standard processing) |

### SBOP Service Code Constants

| Constant | Value | Business Meaning |
|----------|-------|-----------------|
| `SBOP_SVC_CD_VIRUS` | "D03" | Mail/Security Check (antivirus) |
| `SBOP_SVC_CD_MLCAPA` | "D02" | Mail/Email Backup Capacity |
| `SBOP_SVC_CD_ALIAS` | "D01" | Mail Alias |
| `SBOP_SVC_CD_HPACCESS` | "D05" | Web/Homepage Access Analytics |
| `SBOP_SVC_CD_HPCAPA` | "D04" | Web/Homepage Capacity |
| `SBOP_SVC_CD_TENSOSEL` | — | Call Forwarding Selection |
| `SBOP_SVC_CD_NOTELNO` | — | Non-Notification Call Rejection |
