## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["htelNoDslOdrCtrl start"])

    START --> EXTRACT_SOD["Extract SOD info maps from sodMap"]
    EXTRACT_SOD --> SHKKA["Apply shkkaMap to each map"]
    SHKKA --> GET_PARAMS["Extract sys_id, ido_div, svc_kei_no, svc_kei_ucwk_no"]

    GET_PARAMS --> CHECK_BACKUP["Check moto_svc_kei_ucwk_no backup fields"]
    CHECK_BACKUP --> EARLY_EXIT{svc_kei_ucwk_no blank OR telDslExe false?}

    EARLY_EXIT -->|Yes| RETURN_PARAM["Return param unchanged"]
    EARLY_EXIT -->|No| CHECK_RADIUS_FLAG["Check isTelCancelSodIssued - set isRadiusZumi"]

    CHECK_RADIUS_FLAG --> GET_TRN["getSame_trn_no - obtain same processing number"]
    GET_TRN --> CALL_0191["callEKK0191A010SC - FTTH auth registration lookup"]
    CALL_0191 --> EXTRACT_0191["Extract VA portNo, modelCd, kikiSeizoNo, kikiChgNo"]

    EXTRACT_0191 --> CALL_0341["callEKK0341B008SC - device provision contract lookup"]
    CALL_0341 --> BUILD_KIKI["Build combined device list: VA + MFR router"]

    BUILD_KIKI --> LOOP_DEVICES["Loop through device list"]
    LOOP_DEVICES --> CHECK_VA{isRegalVaKiki?}

    CHECK_VA -->|Yes| SET_VA["Set kktkSvcKeiNo, geneAddDtm, kikiSeizoNo, tknkiki_sbt_cd"]
    CHECK_VA -->|No| CHECK_MFR{isRegalMfRouter?}

    CHECK_MFR -->|Yes| CHECK_JUHEN{isJuhenBfUse AND isJuhenBfUseKkop?}
    CHECK_MFR -->|No| CHECK_JV{isJuhenVA?}

    CHECK_JUHEN -->|Yes| SET_MFR["Set MFR info + runEKK0251A010 for line agreement"]
    CHECK_JUHEN -->|No| CHECK_JV2{isJuhenVA?}
    CHECK_JV -->|Yes| SET_JV["Set juhen VA info (no break)"]
    CHECK_JV2 -->|No| SKIP_DEVICE["Skip device (no break)"]

    SET_VA --> NEXT_DEV["va_kiki_list.add"]
    SET_MFR --> NEXT_DEV
    SET_JV --> NEXT_DEV
    SKIP_DEVICE --> NEXT_DEV
    NEXT_DEV --> MORE_DEV{More devices?}
    MORE_DEV -->|Yes| LOOP_DEVICES
    MORE_DEV -->|No| STORE_INST["Store results to instance fields"]

    STORE_INST --> CALL_0251["getEKK0251B001SC - service contract line list"]
    CALL_0251 --> STORE_0251["Store kaisen_ucwk_no and gadtm"]

    STORE_0251 --> CHECK_KIKI_FULL{All device info present?}
    CHECK_KIKI_FULL -->|No| SIP_ENUM_SEC["SIP and ENUM cancellation section"]
    CHECK_KIKI_FULL -->|Yes| CHECK_VA_KIKI{va_kiki unique?}

    CHECK_VA_KIKI -->|No| SIP_ENUM_SEC
    CHECK_VA_KIKI -->|Yes| SET_PREV["setPrevGeneIfVaMod"]

    SET_PREV --> RESET_VA["Re-set va_kiki from instance fields"]
    RESET_VA --> CHECK_RAD{!isRadiusZumi?}
    CHECK_RAD -->|No| CHECK_SBT{tknkiki_sbt_cd != MFR OR == HGW?}
    CHECK_RAD -->|Yes| CHECK_SBT

    CHECK_SBT -->|Non-MFR/HGW| OLS_EXIST{isDslOrderExist2 for OLS?}
    CHECK_SBT -->|MFR/HGW| RUN_KKOP["runEKK2811B010 + getKkOpSvcRec"]

    OLS_EXIST -->|No| ADD_OLS["addSOD 215 + 216 (OLS setup/cancel)"]
    OLS_EXIST -->|Yes| SKIP_OLS
    ADD_OLS --> SKIP_OLS

    RUN_KKOP --> HAS_ROUTER{Router service exists?}
    HAS_ROUTER -->|Yes| SET_ROUTER["Set kkop_svc_kei_router and kkop_svc_kei_va info"]
    HAS_ROUTER -->|No| CHECK_BBR_SVC{isKkopSvcOnKiki for BBR?}

    SET_ROUTER --> CHECK_BBR_SVC
    CHECK_BBR_SVC -->|Yes| ADD_VA_DISC["addSOD 417 (MFR change VA disc)"]
    CHECK_BBR_SVC -->|No| MRT_EXIST{isDslOrderExist2 for MRT?}

    MRT_EXIST -->|No| ADD_MRT_SOD["addSOD 421 + 422 (MFR setup/cancel VA disc)"]
    MRT_EXIST -->|Yes| NO_MRT_SOD
    ADD_VA_DISC --> NO_MRT_SOD
    ADD_MRT_SOD --> NO_MRT_SOD

    SKIP_OLS --> NO_MRT_SOD
    NO_MRT_SOD --> VA_KIKI_ADD["Add va_kiki to list"]
    VA_KIKI_ADD --> SIP_ENUM_SEC

    SIP_ENUM_SEC --> TOKI_CHECK{checkTokiOrderExist?}
    TOKI_CHECK -->|No TOKI ORDER| EXEC_DIV{odr_exec_div == 3 NEW_END?}

    EXEC_DIV -->|Yes| IS_CHG_TEL{isChgTel?}
    IS_CHG_TEL -->|Yes| SIP_FLAG_TRUE["isSipDslSodHakko = true"]
    IS_CHG_TEL -->|No| IS_CHG_ADDR{isChgAddress?}

    IS_CHG_ADDR -->|Yes| SIP_FLAG_T2["isSipDslSodHakko = true"]
    IS_CHG_ADDR -->|No| DSL_EXIST{isDslOrderExist?}

    DSL_EXIST -->|Yes| SIP_FLAG_T3["isSipDslSodHakko = true"]
    DSL_EXIST -->|No| SIP_FLAG_FALSE["isSipDslSodHakko = false"]

    EXEC_DIV -->|No| SIP_FLAG_TRUE_CANCEL["isSipDslSodHakko = true"]

    SIP_FLAG_TRUE --> SIP_DISC_SECTION
    SIP_FLAG_T2 --> SIP_DISC_SECTION
    SIP_FLAG_T3 --> SIP_DISC_SECTION
    SIP_FLAG_FALSE --> SIP_DISC_SECTION
    SIP_FLAG_TRUE_CANCEL --> SIP_DISC_SECTION

    SIP_DISC_SECTION --> ADD_SIP_SOD["addSOD 229 (SIP disc) + 230 (SIP cancel)"]
    ADD_SIP_SOD --> ENUM_LOOKUP["callEKK0191A010 for ENUM check"]
    ENUM_LOOKUP --> BMP_CHECK{BMP_UM set?}

    BMP_CHECK -->|No| SIP_ENUM_DONE
    BMP_CHECK -->|Yes| MONAI_CHECK{isMonaiBmp?}

    MONAI_CHECK -->|Yes| ADD_ENUM_CANC["addSOD 266 (ENUM cancellation)"]
    MONAI_CHECK -->|No| SIP_ENUM_DONE

    ADD_ENUM_CANC --> SIP_ENUM_DONE
    SIP_ENUM_DONE --> TOKI_INFO_CHECK{itntokiKibo == ARI AND itntokiAddCd == 2?}

    TOKI_INFO_CHECK -->|No| FINAL_SOD
    TOKI_INFO_CHECK -->|Yes| CHECK_TOKI_DATES{EndRsymd future AND StaYmd empty AND EndYmd empty?}

    CHECK_TOKI_DATES -->|Yes| UPD_TOKI["updItntokiInfo + addSOD 220 (SIP tokki reg)"]
    CHECK_TOKI_DATES -->|No| TOKI_SKIP

    UPD_TOKI --> TOKI_SKIP
    TOKI_SKIP --> IS_SIP_MONAI{isSipDslSodHakko AND isMonaiBmp AND !isTokiOrdered?}

    IS_SIP_MONAI -->|Yes| TELNO_UPD["Set result_updJudgeTelNo flag with tgTelNo"]
    IS_SIP_MONAI -->|No| FINAL_SOD

    TELNO_UPD --> FINAL_SOD
    FINAL_SOD --> ADD_EMERG["addSOD 252 (Emergency notice/cancel)"]
    ADD_EMERG --> CHECK_RAD_FINAL{!isRadiusZumi?}

    CHECK_RAD_FINAL -->|Yes| ADD_RADIUS["addSOD 204 (Radius auth disc)"]
    CHECK_RAD_FINAL -->|No| RETURN_FINAL

    ADD_RADIUS --> RETURN_FINAL
    RETURN_FINAL --> END_NODE(["Return param"])
    RETURN_PARAM --> END_NODE
```

**Key constant values resolved:**

| Constant | Value | Business Meaning |
|----------|-------|-----------------|
| `ODR_EXEC_DIV_NEW_END` | `"3"` | Order issuance trigger: new-service completion |
| `ODR_EXEC_DIV_DSL_END` | `"2"` | Order issuance trigger: withdrawal completion |
| `ODR_EXEC_DIV_AD_CHG` | `"1"` | Order issuance trigger: address registration |
| `ITNTOKI_KIBO_UM_ARI` | `"1"` | Transfer tokki (temporary pause) desire: present |
| `ITNTOKI_ADD_CD_DSL` | `"2"` | Transfer tokki registration code: light phone |
| `TAKNKIKI_SBT_CD_MFR` | `"R0"` | Home device type: multi-function router |
| `TAKNKIKI_SBT_CD_HGW` | `"S0"` | Home device type: home gateway |
| `KKOP_SVC_CD_VA` | `"G02"` | Equipment option service code: VA (Video Access) |
| `KKOP_SVC_CD_BBR` | `"G01"` | Equipment option service code: BBR (BroadBand Router) |
| `FUNC_CODE_1` | `"1"` | Function code: standard operation |
| `BMP_UM_ARI` | `"1"` | Number portability present: yes |

The processing flow follows five major phases:

**Phase 1 - Data Extraction and Early Exit Check (L11688–L11718):** Extracts SOD basic info, service contract info, and service contract detail info from the sodMap. Applies `shkkaMap()` to each map (a transformation/copy operation). Extracts key identifiers (sys_id, ido_div, svc_kei_no, svc_kei_ucwk_no). If the previous service contract number (`moto_svc_kei_ucwk_no`) is set, it takes precedence. If `svc_kei_ucwk_no` is blank or `telDslExe` is false, the method returns immediately with the input param unchanged.

**Phase 2 - Device and Contract Data Gathering (L11719–L11877):** Calls `getSame_trn_no()` to obtain a same-processing number for transaction grouping. Calls `callEKK0191A010SC()` to look up FTTH auth registration data and extract VA port number, VA device model code, VA device serial number, and VA device change number. Calls `callEKK0341B008SC()` to look up device provision service contracts. Builds a combined device list by merging VA devices with multi-function router devices (from `getMfrInfoByEKK0341B019`) and pre-transfer multi-function router devices (from `getMfrInfoOfBfKaisen`). Iterates through the device list to identify the appropriate device, setting device contract numbers, generation timestamps, and device type codes.

**Phase 3 - Instance Field Storage and OLS/MFR Processing (L11878–L12016):** Stores all gathered device information into instance fields as String[1] arrays. Calls `getEKK0251B001SC()` to obtain service contract line list data. If all device info is present (kktkSvcKeiNo, kktkGeneAddDtm, taknkikiModelCd, kikiSeizoNo all non-blank), checks if the device is a new VA or a change (not already in `va_kiki_list`). If not Radius-cancellation-completed and the device is not a pure MFR or is an HGW, checks whether OLS cancellation orders already exist via `isDslOrderExist2()`. If not, issues OLS setup/cancellation SODs (`ODR_NAIYO_CD_215` + `ODR_NAIYO_CD_216`). For HGW/MFR devices, queries equipment option services (`runEKK2811B010`) to determine if VA or BBR router services are associated, and issues appropriate cancellation SODs.

**Phase 4 - SIP/ENUM Cancellation Processing (L12017–L12302):** Checks whether tokki (temporary pause) orders already exist via `checkTokiOrderExist()`. If no tokki order exists, determines whether SIP cancellation SODs should be issued based on the `odr_exec_div` value and change conditions (phone number change, address change, existing DSL orders). If SIP cancellation is needed, issues SIP cancellation SODs (`ODR_NAIYO_CD_229` + `ODR_NAIYO_CD_230`). Then performs ENUM cancellation processing by re-querying FTTH auth data, checking if the original phone number is an internal number port (isMonaiBmp), and issuing ENUM cancellation SOD (`ODR_NAIYO_CD_266`) if applicable. For tokki registration scenarios, updates tokki info via `updItntokiInfo()` and issues SIP tokki registration SOD (`ODR_NAIYO_CD_220`). If SIP cancellation was issued and the phone number is an internal number port (not tokki-ordered), sets the phone number update flag (`result_updJudgeTelNo`).

**Phase 5 - Final SOD Issuance (L12324–L12435):** Always issues emergency notice/cancellation SOD (`ODR_NAIYO_CD_252`). If Radius cancellation has not been completed (`!isRadiusZumi`), issues Radius authentication cancellation SOD (`ODR_NAIYO_CD_204`) and sets the Radius-completed flag. Returns the updated param.
