# Business Logic — JKKAdchgHakkoSODCC.htelItntokiOdrCtrl() [235 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `com.fujitsu.futurity.bp.custom.common.JKKAdchgHakkoSODCC` |
| Layer | Common Component (CC) — Shared Order Dispatch Utility |
| Module | `common` (Package: `com.fujitsu.futurity.bp.custom.common`) |

## 1. Role

### JKKAdchgHakkoSODCC.htelItntokiOdrCtrl()

This method is the **optical-telephone porting trigger order control processor** (`光電話移転トーキオーダ制御処理`). It is invoked as part of the K-Opticom telecom order fulfillment system when a customer is migrating their phone number from a previous carrier to the current service provider (number port-in / 移転, *iten*).

The method performs a two-phase service query and then branches into multiple **SOD (Service Order Data) issuance paths** based on the contract status and the type of porting trigger code. It first fetches the service contract details via template `EKK0161A010` (service contract inquiry), then fetches additional telephone service contract details via template `EKK0191A010` (light telephone service contract inquiry). After retrieving these states, it evaluates the combination of **migration division (`ido_div`)**, **service contract status (`svcKeiUcwkStat`)**, and **porting trigger registration code (`itntokiAddCd`)** to determine which set of SIP-related service orders to issue.

The method implements a **routing/dispatch pattern**: it receives a single `ido_div` value of `00046` (`IDO_DIV_HTELITNTOKISETTE`, Light Telephone / Porting Trigger Setting), and then dispatches across **three contract status branches** (Service Provision = `100`, Contract Terminated = `910`, Suspended/Interruption = `210`), each with **multiple trigger code sub-branches**. Each sub-branch issues a specific sequence of SOD records (Create operations) via `addSOD()` to represent SIP port-in, cancellation, deletion, registration, suspension, and optional phone number data.

The method is **called internally** by `JKKHakkoSODCC` (the primary order dispatching class) when processing `IDO_DIV_HTELITNTOKISETTE` scenarios. It is a **shared utility** within the `JKK*` common component family, not exposed directly as a screen entry point.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["htelItntokiOdrCtrl params"])

    START --> EXTRACT["Extract SOD maps from sodMap"]
    EXTRACT --> SHKKA["Apply shkkaMap to all 3 maps"]
    SHKKA --> PARSE["Parse: ido_div, svc_kei_no, svc_kei_ucwk_no, gene_add_dtm"]
    PARSE --> GETDATE["Get opeDate via JCCBPCommon.getOpeDate null"]
    GETDATE --> BUILDIN1["Build inHashUcwk with svc_kei_ucwk_no and gene_add_dtm"]
    BUILDIN1 --> CALL1["callEKK0161A010SC handle param inHashUcwk resultHashUcwk FUNC_CODE_1"]
    CALL1 --> CHECK1{statusCode equals 0?}
    CHECK1 -->|No| THROW1["Throw CCException SCCallException"]
    CHECK1 -->|Yes| GETSTAT["Get svcKeiUcwkStat from EKK0161A010Hash"]
    GETSTAT --> BUILDIN2["Build inHashUcwkTel with svc_kei_ucwk_no and gene_add_dtm"]
    BUILDIN2 --> CALL2["callEKK0191A010SC handle param inHashUcwkTel resultHashUcwkTel FUNC_CODE_1"]
    CALL2 --> CHECK2{statusCode equals 0?}
    CHECK2 -->|No| THROW2["Throw CCException SCCallException"]
    CHECK2 -->|Yes| PARSE2["Parse: itntokiAddCd, itntokiEndRsvYmd, itntokiStaYmd, bmpUm"]
    PARSE2 --> SETFIELD["Set instance fields: svc_kei_ucwk_no, svc_kei_ucwk_gadtm"]
    SETFIELD --> COND1{ido_div equals 00046?}
    COND1 -->|No| RETURN["Return param"]
    COND1 -->|Yes| COND1A{svcKeiUcwkStat equals 100?}
    COND1A -->|No| COND1B{svcKeiUcwkStat equals 910?}
    COND1A -->|Yes| COND1A1{itntokiAddCd equals 1?}
    COND1A1 -->|Yes| BLOCK1A["addSOD handle param 220 SIP Porting Trigger Registration"]
    COND1A1 -->|No| COND1B
    COND1B -->|No| COND1C{svcKeiUcwkStat equals 210?}
    COND1B -->|Yes| COND1B1{itntokiAddCd equals 2?}
    COND1B1 -->|Yes| BLOCK1B["addSOD handle param 220 SIP Porting Trigger Registration"]
    COND1B1 -->|No| COND1C
    COND1C -->|No| RETURN
    COND1C -->|Yes| COND1C1{itntokiAddCd equals 3?}
    COND1C1 -->|Yes| BLOCK1C["getSame_trn_no then addSOD x3: 229 230 220"]
    COND1C1 -->|No| RETURN
    BLOCK1A --> COND2{ido_div equals 00046 again?}
    BLOCK1B --> COND2
    BLOCK1C --> COND2
    COND2 -->|No| RETURN
    COND2 -->|Yes| COND2A{svcKeiUcwkStat equals 100?}
    COND2A -->|No| COND2C{svcKeiUcwkStat equals 210?}
    COND2A -->|Yes| COND2A1{itntokiAddCd in 1,2 and opeDate equals itntokiEndRsvYmd?}
    COND2A1 -->|Yes| BLOCK2A["getSame_trn_no then addSOD x2: 229 230"]
    COND2A1 -->|No| COND2C
    COND2C -->|No| RETURN
    COND2C -->|Yes| COND2C1{itntokiAddCd equals 2 and opeDate equals itntokiStaYmd?}
    COND2C1 -->|Yes| BLOCK2C1["addSOD handle param 220 SIP Porting Trigger Registration"]
    COND2C1 -->|No| COND2C2{itntokiAddCd equals 3 and opeDate equals itntokiEndRsvYmd?}
    COND2C2 -->|Yes| BLOCK2C2["getSame_trn_no then addSOD x4: 218 219 225 then pauseJdg check 223"]
    COND2C2 -->|No| RETURN
    BLOCK2A --> RETURN
    BLOCK2C1 --> COND2C2
    BLOCK2C2 --> RETURN
    THROW1 --> END(["End"])
    THROW2 --> END
    RETURN --> END
```

**CRITICAL — Constant Resolution:**

| Constant | Resolved Value | Business Meaning |
|----------|---------------|-----------------|
| `IDO_DIV_HTELITNTOKISETTE` | `"00046"` | Light Telephone — Porting Trigger Setting (migration type for phone port-in) |
| `SVC_KEI_STAT_100` | `"100"` | Service Provision (active contract) |
| `SVC_KEI_STAT_910` | `"910"` | Contract Terminated (previous carrier contract cancelled) |
| `SVC_KEI_STAT_210` | `"210"` | Suspended/Interruption (service on hold) |
| `ITNTOKI_ADD_CD_ADD` | `"1"` | Trigger Registration by Port-Forward Registration (forward port) |
| `ITNTOKI_ADD_CD_DSL` | `"2"` | Trigger Registration by Port-Origin Cancellation (origin cancellation) |
| `ITNTOKI_ADD_CD_PAUSE` | `"3"` | Trigger Registration by Suspension (suspension-based trigger) |
| `ODR_NAIYO_CD_220` | `"220"` | SIP — Porting Trigger Registration (by port-origin cancellation) |
| `ODR_NAIYO_CD_229` | `"229"` | SIP — Cancellation |
| `ODR_NAIYO_CD_230` | `"230"` | SIP — Deletion |
| `ODR_NAIYO_CD_218` | `"218"` | SIP — Registration (new SIP registration) |
| `ODR_NAIYO_CD_219` | `"219"` | SIP — Comprehensive Option Registration (all options except 050) |
| `ODR_NAIYO_CD_225` | `"225"` | SIP — Phone Number Registration |
| `ODR_NAIYO_CD_223` | `"223"` | SIP — Temporary Suspension |
| `PAUSE_JDG_CD_1` | `"1"` | Suspended (pause determination code: active suspension) |
| `BMP_UM_ARI` | `"1"` | Phone Number Present (banner number exists) |
| `FUNC_CODE_1` | `"1"` | Function Code: 1 |
| `TEMPLATE_ID_EKK0161A010` | `"EKK0161A010"` | Service Contract Inquiry Template |
| `TEMPLATE_ID_EKK0191A010` | `"EKK0191A010"` | Light Telephone Service Contract Inquiry Template |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `handle` | `SessionHandle` | Session management handle carrying session context (e.g., database connection, transaction scope, user credentials) used for all downstream service component calls |
| 2 | `param` | `IRequestParameterReadWrite` | Request parameter object containing model groups and control maps; used as the accumulator for SOD issuance results and returned with updated data |
| 3 | `fixedText` | `String` | Fixed text parameter passed through (not directly consumed in this method — used by downstream `addSOD` and other methods for order configuration) |
| 4 | `sodMap` | `HashMap<String, Object>` | Service Order Data container map holding three sub-maps: SOD basic info (`sod_kihon_info`), service contract info (`svc_kei_info`), and service contract detail info (`svc_kei_ucwk_info`), keyed by constant strings |

**Instance fields read:**
| Field | Type | Business Description |
|-------|------|---------------------|
| `svc_kei_ucwk_no` | `String[]` | Service contract detail number — set as a 1-element array, used by downstream callers |
| `svc_kei_ucwk_gadtm` | `String[]` | Service contract detail generation registration datetime — set as a 1-element array, used by downstream callers |
| `same_trn_no` | `String` | Same processing number — shared transaction number for grouping related operations |

## 4. CRUD Operations / Called Services

### Pre-computed evidence from code analysis graph:

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `JCCBPCommon.getOpeDate` | JCCBPCommon | - | Fetches the current operational date (運用日) from the system, used for date comparisons against porting trigger start/end dates |
| R | `callEKK0161A010SC` | EKK0161A010SC | EKK0161A010CBSMsg1List (Service Contract Detail Table) | Queries service contract details: retrieves service contract detail work number, generation registration datetime, and service contract status (`SVC_KEI_UCWK_STAT`). Used to determine the current state of the contract (e.g., "Service Provision", "Suspended"). |
| R | `callEKK0191A010SC` | EKK0191A010SC | EKK0191A010CBSMsg1List (Light Telephone Service Contract Table) | Queries light telephone (SIP) service contract details: retrieves porting trigger registration codes (`DSL_PAUSE_TOKI_ADD_CD`), trigger start/end dates (`DSL_PAUSE_TOKI_STA_YMD`, `DSL_PAUSE_TOKI_END_YMD`), and phone number presence indicator (`BMP_UM`). |
| C | `addSOD` | JKKAdchgHakkoSODCC | SOD (Service Order Data) entities | Issues a new Service Order Data record. Each call creates a distinct SOD with a specific order content code (`odr_naiyo_cd`), representing one business action (e.g., SIP registration, cancellation, deletion). This is a **Create** operation — it generates order data that flows downstream to CBS/SC layers for actual database persistence. |
| R | `getSame_trn_no` | JKKAdchgHakkoSODCC | - | Retrieves a shared transaction number (`same_trn_no`) used to group multiple related SOD issuances under the same processing batch. This ensures atomicity of the multi-SOD sequence. |
| - | `pauseJdg` | JKKAdchgHakkoSODCC | - | Performs pause/suspension determination processing. Takes the service contract number and returns a pause judgment code (`pause_jdg_cd`). Determines whether the service is currently in a suspended state. |
| - | `shkkaMap` | JKKAdchgHakkoSODCC | - | Applies null-safety transformation to maps. Handles null map references by returning a safe empty map. Used during initial data extraction from `sodMap`. |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Class: JKKHakkoSODCC | `JKKHakkoSODCC.htelItntokiOdrCtrl` (line 862, invoked from conditional dispatch on `IDO_DIV_HTELITNTOKISETTE` in order control switch) | `addSOD [C] SOD entity`, `callEKK0161A010SC [R] EKK0161A010CBS`, `callEKK0191A010SC [R] EKK0191A010CBS`, `getSame_trn_no [R] same_trn_no`, `pauseJdg [-] pause determination` |
| 2 | Class: JKKAdchgCancelHakkoSODCC (commented out) | `JKKAdchgCancelHakkoSODCC.htelItntokiOdrCtrl` (line 10284, commented out declaration — method exists as stub for cancellation scenario but not actively called) | N/A (dead code) |

**Note:** `JKKAdchgHakkoSODCC.htelItntokiOdrCtrl` is a **private** method (package-private visibility in Java). The method in `JKKHakkoSODCC` at line 15871 is a **copy/overload** of the same logic — both are private and called from within their respective `JKK*` common control classes during the `ido_div == "00046"` routing path.

## 6. Per-Branch Detail Blocks

**Block 1** — [SET] Variable Initialization and Extraction (L12686)

| # | Type | Code |
|---|------|------|
| 1 | SET | `statusCode = 0` // Service instance execution state flag [-> "0"] |
| 2 | SET | `sod_kihon_info_Map = (HashMap)sodMap.get(JKKHakkoSODConstCC.SOD_KIHON_INFO)` // SOD basic info [-> "sod_kihon_info"] |
| 3 | SET | `svc_kei_info_Map = (HashMap)sodMap.get(JKKHakkoSODConstCC.SVC_KEI_INFO)` // Service contract info [-> "svc_kei_info"] |
| 4 | SET | `svc_kei_ucwk_info_Map = (HashMap)sodMap.get(JKKHakkoSODConstCC.SVC_KEI_UCWK_INFO)` // Service contract detail info [-> "svc_kei_ucwk_info"] |
| 5 | EXEC | `sod_kihon_info_Map = shkkaMap(sod_kihon_info_Map)` // Apply null-safety transformation |
| 6 | EXEC | `svc_kei_info_Map = shkkaMap(svc_kei_info_Map)` // Apply null-safety transformation |
| 7 | EXEC | `svc_kei_ucwk_info_Map = shkkaMap(svc_kei_ucwk_info_Map)` // Apply null-safety transformation |

**Block 2** — [SET] Required Parameter Extraction (L12695)

> Extracts the minimum parameters needed from the three SOD sub-maps.

| # | Type | Code |
|---|------|------|
| 1 | SET | `ido_div = (String)sod_kihon_info_Map.get(JKKHakkoSODConstCC.INFO_IDO_DIV)` // Migration division [-> "ido_div"] |
| 2 | SET | `svc_kei_no = (String)svc_kei_info_Map.get(JKKHakkoSODConstCC.INFO_SVC_KEI_NO)` // Service contract number [-> "svc_kei_no"] |
| 3 | SET | `svc_kei_ucwk_no = (String)svc_kei_ucwk_info_Map.get(JKKHakkoSODConstCC.INFO_SVC_KEI_UCWK_NO)` // Changed service contract detail number [-> "svc_kei_ucwk_no"] |
| 4 | SET | `chaf_svc_kei_ucwk_gene_add_dtm = (String)svc_kei_ucwk_info_Map.get(JKKHakkoSODConstCC.INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM)` // Changed service contract detail generation registration datetime [-> "chaf_svc_kei_ucwk_gene_add_dtm"] |
| 5 | SET | `opeDate = JCCBPCommon.getOpeDate(null)` // Operational date [-> 運用日] |

**Block 3** — [EXEC] Phase 1: Service Contract Detail Inquiry (L12703)

> Calls `EKK0161A010SC` to retrieve service contract detail information and status.

| # | Type | Code |
|---|------|------|
| 1 | SET | `inHashUcwk = new HashMap()` // Input hash for inquiry |
| 2 | SET | `resultHashUcwk = new HashMap()` // Result hash for inquiry |
| 3 | EXEC | `inHashUcwk.put(JKKHakkoSODConstCC.SVC_KEI_UCWK_NO, svc_kei_ucwk_no)` // Put service contract detail number [-> "svc_kei_ucwk_no"] |
| 4 | EXEC | `inHashUcwk.put(JKKHakkoSODConstCC.GENE_ADD_DTM, chaf_svc_kei_ucwk_gene_add_dtm)` // Put generation registration datetime [-> "gene_add_dtm"] |
| 5 | CALL | `statusCode = callEKK0161A010SC(param, handle, inHashUcwk, resultHashUcwk, JKKHakkoSODConstCC.FUNC_CODE_1)` // Query service contract detail |
| 6 | IF | `0 != statusCode` → throw CCException [-> `FUNC_CODE_1 = "1"`] |
| 7 | SET | `eKK0161A010Hash = (HashMap)resultHashUcwk.get(JKKHakkoSODConstCC.TEMPLATE_ID_EKK0161A010)` // Extract result [-> "EKK0161A010"] |
| 8 | SET | `svcKeiUcwkStat = (String)eKK0161A010Hash.get(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_STAT)` // Extract service contract status |

**Block 4** — [EXEC] Phase 2: Light Telephone Service Contract Inquiry (L12711)

> Calls `EKK0191A010SC` to retrieve light telephone (SIP) service contract porting trigger information.

| # | Type | Code |
|---|------|------|
| 1 | SET | `inHashUcwkTel = new HashMap()` // Input hash for telephone inquiry |
| 2 | SET | `resultHashUcwkTel = new HashMap()` // Result hash for telephone inquiry |
| 3 | EXEC | `inHashUcwkTel.put(JKKHakkoSODConstCC.SVC_KEI_UCWK_NO, svc_kei_ucwk_no)` // Put service contract detail number [-> "svc_kei_ucwk_no"] |
| 4 | EXEC | `inHashUcwkTel.put(JKKHakkoSODConstCC.GENE_ADD_DTM, chaf_svc_kei_ucwk_gene_add_dtm)` // Put generation registration datetime [-> "gene_add_dtm"] |
| 5 | CALL | `statusCode = callEKK0191A010SC(param, handle, inHashUcwkTel, resultHashUcwkTel, JKKHakkoSODConstCC.FUNC_CODE_1)` // Query light telephone service contract |
| 6 | IF | `0 != statusCode` → throw CCException [-> `FUNC_CODE_1 = "1"`] |
| 7 | SET | `eKK0191A010Hash = (HashMap)resultHashUcwkTel.get(JKKHakkoSODConstCC.TEMPLATE_ID_EKK0191A010)` // Extract result [-> "EKK0191A010"] |
| 8 | SET | `itntokiAddCd = (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.DSL_PAUSE_TOKI_ADD_CD)` // Porting trigger registration code [-> `DSL_PAUSE_TOKI_ADD_CD`] |
| 9 | SET | `itntokiEndRsvYmd = (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.DSL_PAUSE_TOKI_END_YMD)` // Porting trigger end reservation date [-> `DSL_PAUSE_TOKI_END_YMD`] |
| 10 | SET | `itntokiStaYmd = (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.DSL_PAUSE_TOKI_STA_YMD)` // Porting trigger start date [-> `DSL_PAUSE_TOKI_STA_YMD`] |
| 11 | SET | `bmpUm = (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.BMP_UM)` // Phone number presence [-> `BMP_UM`] |

**Block 5** — [SET] Instance Field Assignment (L12725)

> Stores service contract detail number and generation datetime into instance fields for downstream callers to access.

| # | Type | Code |
|---|------|------|
| 1 | SET | `this.svc_kei_ucwk_no = new String[1]` // Initialize 1-element array |
| 2 | SET | `this.svc_kei_ucwk_no[0] = svc_kei_ucwk_no` // Store service contract detail number |
| 3 | SET | `this.svc_kei_ucwk_gadtm = new String[1]` // Initialize 1-element array |
| 4 | SET | `this.svc_kei_ucwk_gadtm[0] = chaf_svc_kei_ucwk_gene_add_dtm` // Store generation registration datetime |

**Block 6** — [IF] Branch: `IDO_DIV_HTELITNTOKISETTE == "00046"` — Phase A: Service Order Issuance by Contract Status (L12729)

> Main conditional entry: processes when migration division equals "00046" (Light Telephone / Porting Trigger Setting). Contains three contract status sub-branches.

**Block 6.1** — [IF] — `svcKeiUcwkStat == SVC_KEI_STAT_100 == "100"` — Contract: Service Provision (L12735)

> When the service contract status is "Service Provision" (active). Only handles port-forward registration (ITNTOKI_ADD_CD_ADD = "1").

| # | Type | Code |
|---|------|------|
| 1 | IF | `SVC_KEI_STAT_100 == "100"` — Service Provision state |
| 2 | IF | `itntokiAddCd == ITNTOKI_ADD_CD_ADD == "1"` — Port-Forward Trigger |
| 3 | CALL | `param = addSOD(handle, param, ODR_NAIYO_CD_220)` // Issue: SIP Porting Trigger Registration |

**Block 6.2** — [ELSE IF] — `svcKeiUcwkStat == SVC_KEI_STAT_910 == "910"` — Contract: Terminated (L12750)

> When the service contract status is "Contract Terminated" (cancelled at previous carrier). Only handles port-origin cancellation trigger (ITNTOKI_ADD_CD_DSL = "2").

| # | Type | Code |
|---|------|------|
| 1 | IF | `SVC_KEI_STAT_910 == "910"` — Contract Terminated state |
| 2 | IF | `itntokiAddCd == ITNTOKI_ADD_CD_DSL == "2"` — Port-Origin Cancellation Trigger |
| 3 | CALL | `param = addSOD(handle, param, ODR_NAIYO_CD_220)` // Issue: SIP Porting Trigger Registration |

**Block 6.3** — [ELSE IF] — `svcKeiUcwkStat == SVC_KEI_STAT_210 == "210"` — Contract: Suspended (L12765)

> When the service contract status is "Suspended/Interruption". Only handles suspension-based trigger (ITNTOKI_ADD_CD_PAUSE = "3"). Issues a sequence of 3 SOD records.

| # | Type | Code |
|---|------|------|
| 1 | IF | `SVC_KEI_STAT_210 == "210"` — Suspended/Interruption state |
| 2 | IF | `itntokiAddCd == ITNTOKI_ADD_CD_PAUSE == "3"` — Suspension Trigger |
| 3 | SET | `sameTrnNo = new String[1]` // Shared transaction number holder |
| 4 | CALL | `getSame_trn_no(param, handle, null, sameTrnNo)` // Acquire shared processing number |
| 5 | SET | `this.same_trn_no = sameTrnNo[0]` // Store in instance field |
| 6 | CALL | `param = addSOD(handle, param, ODR_NAIYO_CD_229)` // Issue: SIP Cancellation |
| 7 | CALL | `param = addSOD(handle, param, ODR_NAIYO_CD_230)` // Issue: SIP Deletion |
| 8 | CALL | `param = addSOD(handle, param, ODR_NAIYO_CD_220)` // Issue: SIP Porting Trigger Registration |

**Block 7** — [IF] Branch: `IDO_DIV_HTELITNTOKISETTE == "00046"` — Phase B: Date-Matched Service Order Issuance (L12782)

> A **second** independent conditional block that checks the same `ido_div` value ("00046") again. This block performs date-aware SOD issuance, comparing the operational date (`opeDate`) against porting trigger start/end dates.

**Block 7.1** — [IF] — `svcKeiUcwkStat == SVC_KEI_STAT_100 == "100"` — Service Provision with Trigger End Date Match (L12788)

> When service is active AND the porting trigger type is ADD ("1") or DSL ("2") AND the operational date matches the trigger end reservation date. This indicates the trigger has started AND the end date has been reached — issuing cancellation/deletion orders.

| # | Type | Code |
|---|------|------|
| 1 | IF | `SVC_KEI_STAT_100 == "100"` — Service Provision state |
| 2 | IF | `itntokiAddCd in {"1", "2"} and opeDate equals itntokiEndRsvYmd` — Trigger end date reached |
| 3 | SET | `sameTrnNo = new String[1]` // Shared transaction number holder |
| 4 | CALL | `getSame_trn_no(param, handle, null, sameTrnNo)` // Acquire shared processing number |
| 5 | SET | `this.same_trn_no = sameTrnNo[0]` // Store in instance field |
| 6 | CALL | `param = addSOD(handle, param, ODR_NAIYO_CD_229)` // Issue: SIP Cancellation |
| 7 | CALL | `param = addSOD(handle, param, ODR_NAIYO_CD_230)` // Issue: SIP Deletion |

**Block 7.2** — [ELSE IF] — `svcKeiUcwkStat == SVC_KEI_STAT_210 == "210"` — Suspended (L12811)

> When the service contract status is "Suspended/Interruption". Contains two independent date-matched sub-branches.

**Block 7.2.1** — [IF] — DSL trigger with Start Date Match (L12819)

> `itntokiAddCd == "2"` AND `opeDate == itntokiStaYmd`. When the suspension trigger is port-origin cancellation AND the operational date matches the trigger start date. This means the porting trigger has officially started.

| # | Type | Code |
|---|------|------|
| 1 | IF | `SVC_KEI_STAT_210 == "210"` — Suspended/Interruption state |
| 2 | IF | `itntokiAddCd == ITNTOKI_ADD_CD_DSL == "2" and opeDate equals itntokiStaYmd` — Start date reached |
| 3 | CALL | `param = addSOD(handle, param, ODR_NAIYO_CD_220)` // Issue: SIP Porting Trigger Registration |

**Block 7.2.2** — [IF] — Pause trigger with End Date Match (L12835)

> `itntokiAddCd == "3"` AND `opeDate == itntokiEndRsvYmd`. When the suspension trigger type is "suspension" AND the operational date matches the trigger end reservation date. This is the most complex branch, issuing 4 SOD records plus pause determination.

| # | Type | Code |
|---|------|------|
| 1 | IF | `itntokiAddCd == ITNTOKI_ADD_CD_PAUSE == "3" and opeDate equals itntokiEndRsvYmd` — Suspension trigger end date reached |
| 2 | SET | `sameTrnNo = new String[1]` // Shared transaction number holder |
| 3 | CALL | `getSame_trn_no(param, handle, null, sameTrnNo)` // Acquire shared processing number |
| 4 | SET | `this.same_trn_no = sameTrnNo[0]` // Store in instance field |
| 5 | CALL | `param = addSOD(handle, param, ODR_NAIYO_CD_218)` // Issue: SIP Registration (new) |
| 6 | CALL | `param = addSOD(handle, param, ODR_NAIYO_CD_219)` // Issue: SIP Comprehensive Option Registration |
| 7 | IF | `BMP_UM_ARI == "1"` — Phone number present |
| 8 | CALL | `param = addSOD(handle, param, ODR_NAIYO_CD_225)` // Issue: SIP Phone Number Registration |
| 9 | CALL | `param = pauseJdg(param, handle, null, svc_kei_no, pause_jdg_cd)` // Perform pause determination |
| 10 | IF | `pause_jdg_cd[0] == PAUSE_JDG_CD_1 == "1"` — Active suspension |
| 11 | CALL | `param = addSOD(handle, param, ODR_NAIYO_CD_223)` // Issue: SIP Temporary Suspension |

**Block 8** — [RETURN] Return (L12914)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return param` // Return updated request parameter |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `ido_div` | Field | Migration division — classifies the type of contract migration/change (e.g., new contract, service add, port-in, port-out, suspension). In this method, specifically checks for `"00046"` = Light Telephone Porting Trigger Setting |
| `svc_kei_no` | Field | Service contract number — unique identifier for the telecom service contract |
| `svc_kei_ucwk_no` | Field | Service contract detail number — unique identifier for the service contract line item (detailed breakdown of a contract) |
| `chaf_svc_kei_ucwk_gene_add_dtm` | Field | Changed service contract detail generation registration datetime — timestamp when the post-change service contract detail was registered. Used for version control in contract inquiries |
| `svcKeiUcwkStat` | Field | Service contract detail status — indicates the current state of the contract detail (100 = Service Provision, 910 = Contract Terminated, 210 = Suspended/Interruption) |
| `itntokiAddCd` | Field | Porting trigger registration code — classifies the type of porting trigger event: `"1"` = Port-Forward Registration, `"2"` = Port-Origin Cancellation, `"3"` = Suspension |
| `itntokiEndRsvYmd` | Field | Porting trigger end reservation date — the scheduled end date of the porting trigger |
| `itntokiStaYmd` | Field | Porting trigger start date — the scheduled start date of the porting trigger |
| `bmpUm` | Field | Phone number presence indicator — `"1"` means a phone number is assigned/active, used to conditionally issue phone number registration SOD |
| `opeDate` | Field | Operational date — the current system date used for date comparisons against scheduled porting trigger dates |
| `same_trn_no` | Field | Same processing number — shared transaction number for grouping multiple related SOD issuances under one batch |
| `pause_jdg_cd` | Field | Pause determination code — result of pause judgment processing: `"0"` = not suspended, `"1"` = suspended |
| SOD | Acronym | Service Order Data — the core order data entity in K-Opticom's telecom order fulfillment system. Each SOD record represents a specific service action (registration, cancellation, deletion, etc.) |
| SIP | Business term | Session Initiation Protocol — the VoIP/telephony protocol used for K-Opticom's 050 phone number service |
| FTTH | Business term | Fiber To The Home — fiber-optic broadband service (referenced in related ODR codes like 101–107) |
| ENUM | Business term | E.164 Number Mapping — DNS-based telephone number mapping service for IP telephony routing. Related SOD codes: 265 (registration), 266 (deletion) |
| ODR_NAIYO_CD | Field | Order content code — classifies the type of order action (SIP registration, cancellation, porting trigger, etc.). Codes in this method: 218–230 range (SIP service) |
| IDO_DIV | Field | Migration division — top-level classification of contract change type |
| SVC_KEI_STAT | Field | Service contract status — tracks the lifecycle state of a contract (100 = Active, 210 = Suspended, 910 = Terminated) |
| EKK0161A010 | SC Code | Service Contract Inquiry service component — queries service contract detail information |
| EKK0191A010 | SC Code | Light Telephone Service Contract Inquiry service component — queries SIP/telephone service contract detail information |
| addSOD | Method | Service Order Data issuance method — creates a new SOD record with the specified order content code |
| getSame_trn_no | Method | Shared transaction number acquisition method — obtains a common batch identifier for grouping related operations |
| pauseJdg | Method | Pause/suspension determination method — evaluates whether a service is currently in a suspended state |
| shkkaMap | Method | Null-safety map transformation method — converts null maps to empty maps to prevent NullPointerException |
| EKK0161A010CBSMsg1List | Class | Contract detail inquiry result message list — contains fields like SVC_KEI_UCWK_STAT (service contract detail status) |
| EKK0191A010CBSMsg1List | Class | Light telephone contract inquiry result message list — contains fields for DSL/Pause trigger codes, dates, and phone number presence |
| `DSL_PAUSE_TOKI_ADD_CD` | Field | DSL/Pause porting trigger registration code — from EKK0191A010 result (renamed from ITNTOKI_ADD_CD after 20120928 S/IF change) |
| `DSL_PAUSE_TOKI_END_YMD` | Field | DSL/Pause porting trigger end date |
| `DSL_PAUSE_TOKI_STA_YMD` | Field | DSL/Pause porting trigger start date |
| `BMP_UM` | Field | Banner phone number presence — indicates whether a phone number is assigned to the service |
| FUNC_CODE | Field | Function code — operational mode flag for service component calls. `"1"` = standard processing mode |
