# Business Logic — JKKHakkoSODCC.addSOD() [3786 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC` |
| Layer | CC / Common Component (Controller-Component — shared business logic for order issuance) |
| Module | `common` (Package: `com.fujitsu.futurity.bp.custom.common`) |

## 1. Role

### JKKHakkoSODCC.addSOD()

The `addSOD` method is the central **Service Order Data (SOD) issuance dispatcher** for the K-Opticom eo customer core system. It receives an order content code (`orderNaiyoCd`) and dynamically maps business-specific values from instance fields into a work map, then delegates to two downstream registration services — first to register the **Order Issuance Conditions** (Joken), and second to register the **Order Information Creation Work** (Saksei Work).

The method acts as a **dispatch/routing hub** (if-else chain) with over 50 conditional branches, each handling a specific combination of service type and operation. It supports six major service categories: (1) **FTTH Authentication** (registration, password change, cancellation, deletion, restoration, suspension, release), (2) **E-Mail** (registration, password, E-irress, mailbox capacity, Wi-LCUS, cancellation, deletion, restoration), (3) **WEB/My Home Page** (registration, password, homepage capacity, access analysis, cancellation, deletion, restoration), (4) **ML (Messaging List)** (registration, cancellation, deletion, restoration), (5) **Dual-Up Connection** (connection, password, plan change, cancellation, deletion, suspension, release), (6) **Multi-Selection** (dynamic and static registration, cancellation, deletion, password change), plus Router, Fixed IP, IPv6, Telephone, Number Operations, and e-mobile services.

The method's **design pattern** is a **template-based dispatcher**: each branch configures a standardized set of map entries (`svc_kei_ucwk_no`, `order_sbt_cd`, `svc_order_cd`, `yokyu_sbt_cd`, `odr_hakko_joken_cd`, `same_trn_no`, plus service-type-specific fields) and calls the same two service methods. This makes it the **shared utility** called by 33+ control-screen methods across the system (DSL order control, course change, operator settings, pause control, IP address changes, and many more).

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["addSOD handle, param, orderNaiyoCd"])
    inMap["Extract HashMap from param.getData"]
    nullCheck{inMap != null?}
    formatMap["inMap = formatInMap(inMap)"]

    branch["Route by orderNaiyoCd - ~50+ branches"]

    blockA["FTTH Auth (101-107)
Password/Cancel/Delete/Restore/Suspend/Release"]
    blockB["Mail (108-120)
Register/Password/E-irress/Mailbox/Wi-LCUS/Cancel/Delete/Restore"]
    blockC["WEB (121-128)
Register/Password/HP Cap/Access Analysis/Cancel/Delete/Restore"]
    blockD["ML (129,131-133)
Register/Cancel/Delete/Restore"]
    blockE["Dual-Up (134-138,140-141)
Connect/Password/Plan/Cancel/Delete/Suspend/Release"]
    blockF["Multi-Selection (142-146,319)
Dynamic/Static Register/Cancel/Delete/Password"]
    blockG["Router (147-150,163)
Connection/Register/Password/Change/Cancel/Delete"]
    blockH["Fixed IP (152-157)
Register/Restore/Cancel/Delete/Plan Change"]
    blockI["IPv6 (158,160,162,164-166)
Dedicated/IPv6 Address operations"]
    blockJ["Telephone (170-174,175-182)
Register/Change/Cancel/Delete/Restore + VA Bundle"]
    blockK["Number Ops (190-197,198-213)
Add/Change/Replacement/Operator Assistance"]
    blockL["Service Contract (167-169)
Content Number Register/Change/Cancel"]
    blockM["e-mobile (313-315)
Cancel/Interim Suspension/Release"]

    call1["(1) executeOdrHakkoJokenAdd(handle, param)"]
    call2["(2) executeOdrInfoSakseiWkAdd(handle, param)"]
    retParam["return param"]
    END(["END"])

    START --> inMap
    inMap --> nullCheck
    nullCheck -->|Yes| formatMap
    nullCheck -->|No| END
    formatMap --> branch
    branch --> blockA
    branch --> blockB
    branch --> blockC
    branch --> blockD
    branch --> blockE
    branch --> blockF
    branch --> blockG
    branch --> blockH
    branch --> blockI
    branch --> blockJ
    branch --> blockK
    branch --> blockL
    branch --> blockM
    blockA --> call1
    blockB --> call1
    blockC --> call1
    blockD --> call1
    blockE --> call1
    blockF --> call1
    blockG --> call1
    blockH --> call1
    blockI --> call1
    blockJ --> call1
    blockK --> call1
    blockL --> call1
    blockM --> call1
    call1 --> call2
    call2 --> retParam
    retParam --> END
```

**Processing flow per branch (repeated ~50 times):**

Every branch follows this identical two-step template:

1. **Step (1) — Order Issuance Conditions Registration:**
   - Set `svc_kei_ucwk_no` (Service Contract Line Number) from instance field
   - Set `order_sbt_cd = ORDER_SBT_CD_NET` (or `ORDER_SBT_CD_MOBILE`) — Order Type Code (Net or Mobile)
   - Set `svc_order_cd` — Service Order Code (FTTH Auth, Mail, WEB, etc.)
   - Set `yokyu_sbt_cd` — Request Type Code (NEW, CHG, DSL, DEL, STP, STP_RLS, KAIHK)
   - Set `odr_hakko_joken_cd = ODR_HAKKO_JOKEN_CD_SOKJI_HAKKO` (Immediate Issuance)
   - Set `same_trn_no` — Same Transaction Number for batch processing
   - Commit to param via `setData(HAKKOSODCCWORKMAP, inMap)`
   - Call `executeOdrHakkoJokenAdd(handle, param)`

2. **Step (2) — Order Information Creation Work Registration:**
   - Set `odr_naiyo_cd` — Order Content Code for this branch
   - Set service-specific fields: `op_svc_kei_no`, `opsvkei_gadtm`, `svc_kei_ucwk_no`, `kktk_svc_kei_no`, `taknkiki_model_cd`, `huka_inf_kei_no`, etc.
   - Commit to param via `setData(HAKKOSODCCWORKMAP, inMap)`
   - Call `executeOdrInfoSakseiWkAdd(handle, param)`

Some branches (125, 126, 127) had a `chkOpOdrSetOp` guard removed in 2013-04-05 (IT1-2013-0000714) because WEB no longer requires Order Issuance Conditions checks.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `handle` | `SessionHandle` | Application session context carrying transaction state, user identity, and database connection metadata for the order issuance process |
| 2 | `param` | `IRequestParameterReadWrite` | Request/response parameter object that carries the work map (`HAKKOSODCCWORKMAP`) between processing stages. Its data map is mutated in-place by `formatInMap`, populated with service-specific values, and returned updated |
| 3 | `orderNaiyoCd` | `String` | **Order Content Code** — the primary routing key. Each unique value maps to a specific service type and operation (e.g., `101` = FTTH Auth Registration, `108` = Mail Registration). Drives all 50+ conditional branches |

**Instance fields read by the method:**

| Field | Business Meaning |
|-------|-----------------|
| `this.svc_kei_ucwk_no[0]` | Service contract line number — internal tracking ID for the service contract line item |
| `this.svc_kei_ucwk_gadtm[0]` | Service contract line registration date/time (YYYYMMDDHHmmss) |
| `this.op_svc_kei_no_ml` | Option service contract number — E-Mail contract |
| `this.op_gadtm_ml` | Option service contract registration date/time — E-Mail |
| `this.op_svc_kei_no_hp` | Option service contract number — My Home Page |
| `this.op_gadtm_hp` | Option service contract registration date/time — My Home Page |
| `this.op_svc_kei_no_mltise` | Option service contract number — Multi-Selection |
| `this.op_gadtm_mltise` | Option service contract registration date/time — Multi-Selection |
| `this.op_svc_kei_no_dial` | Option service contract number — Dual-Up |
| `this.op_gadtm_dial` | Option service contract registration date/time — Dual-Up |
| `this.op_svc_kei_no_fixipad` | Option service contract number — Fixed Global IP Address |
| `this.op_gadtm_fixipad` | Option service contract registration date/time — Fixed Global IP Address |
| `this.op_svc_kei_no_ipv6` | Option service contract number — IPv6 |
| `this.op_gadtm_ipv6` | Option service contract registration date/time — IPv6 |
| `this.op_svc_kei_no_mlist` | Option service contract number — Messaging List |
| `this.op_gadtm_mlist` | Option service contract registration date/time — Messaging List |
| `this.mlad` | Mail address — email address for E-Mail service |
| `this.same_trn_no` | Same transaction number — unique transaction ID for grouping related SOD operations |
| `this.sbop_svckeino_alias` | Sub-option service contract number — alias |
| `this.sbop_gadtm_alias` | Sub-option service contract registration date/time — alias |
| `this.sbop_svckeino_mlvirus` | Sub-option service contract number — mail virus |
| `this.sbop_gadtm_mlvirus` | Sub-option service contract registration date/time — mail virus |
| `this.old_vrsb_jdg_svc_dtl_cd` | Additional contract number — old VR identification judgment service detail code (legacy compatibility) |
| `this.huka_inf_op_svc_kei_no_ml` | Additional contract number — changed-before Mail address |
| `this.huka_inf_op_gadtm_ml` | Additional contract registration date/time — changed-before Mail address |
| `this.svc_kei_ucwk_no` (array) | Service contract line number (alternative array form used in some branches) |
| `this.svc_kei_ucwk_gadtm` (array) | Service contract line registration date/time (alternative array form) |
| `taknkiki_model_cd[0]` | Home appliance model code — router/device hardware model |
| `kiki_seizo_no[0]` | Device serial number — hardware manufacturing serial number |
| `kktk_svc_kei_no[0]` | Machine-provided service contract number — device provision contract |
| `kktk_svc_kei_gadtm[0]` | Machine-provided service contract registration date/time |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| F | `JKKHakkoSODCC.formatInMap` | - | - | Formats (cleans/initializes) the input HashMap before use |
| C | `JKKHakkoSODCC.executeOdrHakkoJokenAdd` | - | - | Registers Order Issuance Conditions — writes order trigger configuration (Joken) to the order management tables |
| C | `JKKHakkoSODCC.executeOdrInfoSakseiWkAdd` | - | - | Registers Order Information Creation Work — writes order details to the creation work tables (Saksei Work) |
| F | `JKKHakkoSODCC.isBlank` | - | - | Utility: checks if a String is blank (null or empty) |
| F | `JKKHakkoSODCC.getFmtcelJgsSkbtStr` | - | - | Utility: returns formatted cell group code string (unused in current method body) |

**How each called method is classified:**

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| F | `formatInMap` | - | - | Maps utility — clears and reinitializes the work map entries for a clean slate before dispatch |
| C | `executeOdrHakkoJokenAdd` | - | - | Create: Inserts Order Issuance Conditions records into the order conditions tables. Sets `svc_order_cd`, `yokyu_sbt_cd`, `order_sbt_cd`, `odr_hakko_joken_cd`, and `same_trn_no` for downstream processing |
| C | `executeOdrInfoSakseiWkAdd` | - | - | Create: Inserts Order Information Creation Work records into the work tables. Sets `odr_naiyo_cd`, `op_svc_kei_no`, `opsvkei_gadtm`, and other service-specific fields for downstream processing |

**Note:** The exact SC Codes (e.g., `EKK0361A010SC`) and DB table names (e.g., `KK_T_ODR_HAKKO_JOKEN`) are internal to the called methods and are not directly visible from the `addSOD` body. The two terminal operations `executeOdrHakkoJokenAdd` and `executeOdrInfoSakseiWkAdd` each perform their own internal database writes (Create operations). The `addSOD` method itself does not directly read, update, or delete any database tables.

## 5. Dependency Trace

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

No screen/batch entry points found within 8 hops. Direct callers found: 34 methods.
Terminal operations from this method: `executeOdrInfoSakseiWkAdd` [C], `executeOdrHakkoJokenAdd` [C].

| # | Caller | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|--------|--------------------------------------|-------------------------------|
| 1 | `JKKHakkoSODCC.add050AddSod` | `add050AddSod` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 2 | `JKKHakkoSODCC.add050DelSod` | `add050DelSod` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 3 | `JKKHakkoSODCC.addTensoDenwaOp` | `addTensoDenwaOp` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 4 | `JKKHakkoSODCC.addTokiSOD` | `addTokiSOD` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 5 | `JKKHakkoSODCC.bmpDojiMskm` | `bmpDojiMskm` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 6 | `JKKHakkoSODCC.bmpSipDslOdrCtrl` | `bmpSipDslOdrCtrl` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 7 | `JKKHakkoSODCC.courseChgeOdrCtrl` | `courseChgeOdrCtrl` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 8 | `JKKHakkoSODCC.dslOdrCtrl` | `dslOdrCtrl` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 9 | `JKKHakkoSODCC.enumAddOdrCtrl` | `enumAddOdrCtrl` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 10 | `JKKHakkoSODCC.enumDelOdrCtrl` | `enumDelOdrCtrl` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 11 | `JKKHakkoSODCC.hakkoCourseChgSOD` | `hakkoCourseChgSOD` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 12 | `JKKHakkoSODCC.htelItntokiOdrCtrl` | `htelItntokiOdrCtrl` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 13 | `JKKHakkoSODCC.htelNoDslOdrCtrl` | `htelNoDslOdrCtrl` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 14 | `JKKHakkoSODCC.htelNoInfoChgeOdrCtrl` | `htelNoInfoChgeOdrCtrl` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 15 | `JKKHakkoSODCC.htelNoKaihkOdrCtrl` | `htelNoKaihkOdrCtrl` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |

| # | Caller | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|--------|--------------------------------------|-------------------------------|
| 16 | `JKKHakkoSODCC.idpwShkkaSaifuriOdrCtrl` | `idpwShkkaSaifuriOdrCtrl` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 17 | `JKKHakkoSODCC.kaihkOdrCtrl` | `kaihkOdrCtrl` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 18 | `JKKHakkoSODCC.keiTtdkChuHtelnoChgeOdrCtrl` | `keiTtdkChuHtelnoChgeOdrCtrl` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 19 | `JKKHakkoSODCC.koteiIpAd8DivOdrCtrl` | `koteiIpAd8DivOdrCtrl` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 20 | `JKKHakkoSODCC.malwareBlockingDivOdrCtrl` | `malwareBlockingDivOdrCtrl` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 21 | `JKKHakkoSODCC.opHktgiOdrCtrl` | `opHktgiOdrCtrl` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 22 | `JKKHakkoSODCC.opSetOdrCtrl` | `opSetOdrCtrl` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 23 | `JKKHakkoSODCC.pauseRlsChgeOdrCtrl` | `pauseRlsChgeOdrCtrl` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 24 | `JKKHakkoSODCC.pauseUkOdrCtrl` | `pauseUkOdrCtrl` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 25 | `JKKHakkoSODCC.setChgePWForDialup` | `setChgePWForDialup` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 26 | `JKKHakkoSODCC.setChgePWForMltiSe` | `setChgePWForMltiSe` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 27 | `JKKHakkoSODCC.setChgePWForRouterConInfo` | `setChgePWForRouterConInfo` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 28 | `JKKHakkoSODCC.stpRlsOdrCtrl` | `stpRlsOdrCtrl` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 29 | `JKKHakkoSODCC.stpUkOdrCtrl` | `stpUkOdrCtrl` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 30 | `JKKHakkoSODCC.taiikiSeigenOdrCtrl` | `taiikiSeigenOdrCtrl` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |

| # | Caller | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|--------|--------------------------------------|-------------------------------|
| 31 | `JKKHakkoSODCC.telNoChge` | `telNoChge` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 32 | `JKKHakkoSODCC.vLanIdChgOdrCtrl` | `vLanIdChgOdrCtrl` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 33 | `JKKHakkoSODCC.vLanIdVaChangeOdrCtrl` | `vLanIdVaChangeOdrCtrl` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |
| 34 | `JKKHakkoSODCC.wribInfoAddOdrCtrl` | `wribInfoAddOdrCtrl` -> `addSOD` | `executeOdrHakkoJokenAdd [C]`, `executeOdrInfoSakseiWkAdd [C]` |

**Terminal summary:** `addSOD` terminates exclusively at two Create operations — `executeOdrHakkoJokenAdd` (Order Issuance Conditions registration) and `executeOdrInfoSakseiWkAdd` (Order Information Creation Work registration). No other terminal operations are reached.

## 6. Per-Branch Detail Blocks

Each of the ~50+ else-if branches follows the same structural template. The blocks below illustrate representative patterns.

---

**Block 1** — IF `(JKKHakkoSODConstCC.ODR_NAIYO_CD_101.equals(orderNaiyoCd))` [ODR_NAIYO_CD_101="101"] (L1143)

> **FTTH Authentication Registration** — New FTTH authentication for a customer. Used when registering a new FTTH service.

| # | Type | Code |
|---|------|------|
| 1 | SET | `inMap.put("svc_kei_ucwk_no", this.svc_kei_ucwk_no[0]);` // Service contract line number [-> instance field] |
| 2 | SET | `inMap.put("order_sbt_cd", JKKHakkoSODConstCC.ORDER_SBT_CD_NET);` // Order type code = Net [-> Net order type] |
| 3 | SET | `inMap.put("svc_order_cd", JKKHakkoSODConstCC.SVC_ORDER_CD_FTTH);` // Service order code = FTTH Auth [-> FTTH authentication] |
| 4 | SET | `inMap.put("yokyu_sbt_cd", JKKHakkoSODConstCC.YOKYU_SBT_CD_NEW);` // Request type = New [-> NEW registration] |
| 5 | SET | `inMap.put("odr_hakko_joken_cd", JKKHakkoSODConstCC.ODR_HAKKO_JOKEN_CD_SOKJI_HAKKO);` // Issuance condition = Immediate [-> Immediate issuance] |
| 6 | SET | `inMap.put("same_trn_no", this.same_trn_no);` // Same transaction number [-> instance field] |
| 7 | EXEC | `param.setData(HAKKOSODCCWORKMAP, inMap);` // Persist map to param |
| 8 | CALL | `param = executeOdrHakkoJokenAdd(handle, param);` // Register Order Issuance Conditions |
| 9 | SET | `inMap.put("odr_naiyo_cd", JKKHakkoSODConstCC.ODR_NAIYO_CD_101);` // Order content code = 101 [-> FTTH Auth Registration] |
| 10 | SET | `inMap.put("svc_kei_ucwk_no", this.svc_kei_ucwk_no[0]);` // Service contract line number |
| 11 | SET | `inMap.put("svkeiuw_gadtm", this.svc_kei_ucwk_gadtm[0]);` // Service contract registration date/time |
| 12 | SET | `inMap.put("huka_inf_kei_no", this.old_vrsb_jdg_svc_dtl_cd);` // Additional contract number (old VR identification) [ANK-2765] |
| 13 | EXEC | `param.setData(HAKKOSODCCWORKMAP, inMap);` |
| 14 | CALL | `param = executeOdrInfoSakseiWkAdd(handle, param);` // Register Order Information Creation Work |

---

**Block 2** — ELSE-IF `(JKKHakkoSODConstCC.ODR_NAIYO_CD_102.equals(orderNaiyoCd))` [ODR_NAIYO_CD_102="102"]

> **FTTH Authentication Password Change** — Changes the password for an existing FTTH authentication. Uses `CHG` (Change) request type.

| # | Type | Code |
|---|------|------|
| 1 | SET | `inMap.put("svc_kei_ucwk_no", this.svc_kei_ucwk_no[0]);` |
| 2 | SET | `inMap.put("order_sbt_cd", ORDER_SBT_CD_NET);` // Net |
| 3 | SET | `inMap.put("svc_order_cd", SVC_ORDER_CD_FTTH);` // FTTH Auth |
| 4 | SET | `inMap.put("yokyu_sbt_cd", YOKYU_SBT_CD_CHG);` // CHG Change |
| 5 | SET | `inMap.put("odr_hakko_joken_cd", ODR_HAKKO_JOKEN_CD_SOKJI_HAKKO);` // Immediate |
| 6 | SET | `inMap.put("same_trn_no", same_trn_no);` |
| 7 | EXEC | `param.setData(HAKKOSODCCWORKMAP, inMap);` |
| 8 | CALL | `param = executeOdrHakkoJokenAdd(handle, param);` |
| 9 | SET | `inMap.put("odr_naiyo_cd", ODR_NAIYO_CD_102);` // FTTH Auth Password Change |
| 10 | SET | `inMap.put("svc_kei_ucwk_no", this.svc_kei_ucwk_no[0]);` |
| 11 | SET | `inMap.put("svkeiuw_gadtm", this.svc_kei_ucwk_gadtm[0]);` |
| 12 | SET | `inMap.put("huka_inf_kei_no", this.old_vrsb_jdg_svc_dtl_cd);` // Additional contract number |
| 13 | EXEC | `param.setData(HAKKOSODCCWORKMAP, inMap);` |
| 14 | CALL | `param = executeOdrInfoSakseiWkAdd(handle, param);` |

---

**Block 3** — ELSE-IF `(JKKHakkoSODConstCC.ODR_NAIYO_CD_103.equals(orderNaiyoCd))` [ODR_NAIYO_CD_103="103"]

> **FTTH Authentication Cancellation** — Cancels an existing FTTH authentication. Uses `DSL` (dismantle/cancel) request type. Same pattern as Block 2 with `yokyu_sbt_cd = YOKYU_SBT_CD_DSL`.

| # | Type | Code |
|---|------|------|
| 1-8 | Same as Block 2, except `yokyu_sbt_cd = YOKYU_SBT_CD_DSL` | // DSL Cancel |
| 9 | SET | `inMap.put("odr_naiyo_cd", ODR_NAIYO_CD_103);` // FTTH Auth Cancellation |
| 10-14 | Same SET/CALL pattern | // Register work |

---

**Block 4** — ELSE-IF `(JKKHakkoSODConstCC.ODR_NAIYO_CD_104.equals(orderNaiyoCd))` [ODR_NAIYO_CD_104="104"]

> **FTTH Authentication Deletion** — Deletes an FTTH authentication record. Uses `DEL` (deletion) request type. Does not set `svc_kei_ucwk_no` in step (1) (unlike other FTTH branches).

| # | Type | Code |
|---|------|------|
| 1 | SET | `inMap.put("order_sbt_cd", ORDER_SBT_CD_NET);` |
| 2 | SET | `inMap.put("svc_order_cd", SVC_ORDER_CD_FTTH);` |
| 3 | SET | `inMap.put("yokyu_sbt_cd", YOKYU_SBT_CD_DEL);` // DEL Delete |
| 4-8 | Same as Block 2 | // Register Joken |
| 9 | SET | `inMap.put("odr_naiyo_cd", ODR_NAIYO_CD_104);` // FTTH Auth Deletion |
| 10 | SET | `inMap.put("svc_kei_ucwk_no", this.svc_kei_ucwk_no[0]);` |
| 11 | SET | `inMap.put("svkeiuw_gadtm", this.svc_kei_ucwk_gadtm[0]);` |
| 12-14 | Same | // Register work |

---

**Block 5** — ELSE-IF `(JKKHakkoSODConstCC.ODR_NAIYO_CD_108.equals(orderNaiyoCd))` [ODR_NAIYO_CD_108="108"]

> **Mail Registration** — Registers E-Mail service. Includes a nested conditional for additional contract info (ANK-1577 mail function enhancement).

| # | Type | Code |
|---|------|------|
| 1 | SET | `inMap.put("mlad", this.mlad);` // Mail address [-> instance field] |
| 2 | SET | `inMap.put("order_sbt_cd", ORDER_SBT_CD_NET);` // Net |
| 3 | SET | `inMap.put("svc_order_cd", SVC_ORDER_CD_MAIL);` // Mail service |
| 4 | SET | `inMap.put("yokyu_sbt_cd", YOKYU_SBT_CD_NEW);` // NEW Register |
| 5-7 | Same | // Register Joken |
| 8 | CALL | `param = executeOdrHakkoJokenAdd(handle, param);` |
| 9 | SET | `inMap.put("odr_naiyo_cd", ODR_NAIYO_CD_108);` // Mail Registration |
| 10 | SET | `inMap.put("op_svc_kei_no", this.op_svc_kei_no_ml);` // Option = E-Mail |
| 11 | SET | `inMap.put("opsvkei_gadtm", this.op_gadtm_ml);` // Mail contract reg datetime |
| 12 | IF | `isBlank(this.huka_inf_op_svc_kei_no_ml)` — Additional contract set = Mail address change (ANK-1577) |
| 12.1 | SET | `inMap.put("huka_inf_kei_no", this.huka_inf_op_svc_kei_no_ml);` // Before-change mail address |
| 12.2 | SET | `inMap.put("huka_inf_kei_gadtm", this.huka_inf_op_gadtm_ml);` // Before-change datetime |

---

**Block 6** — ELSE-IF `(JKKHakkoSODConstCC.ODR_NAIYO_CD_125.equals(orderNaiyoCd))` [ODR_NAIYO_CD_125="125"]

> **WEB Access Analysis Cancellation** — Had a `chkOpOdrSetOp` guard (for Option Order Issuance check) that was removed in 2013-04-05 (IT1-2013-0000714). Now proceeds directly to the two-step registration.

| # | Type | Code |
|---|------|------|
| 1 | SET | `inMap.put("order_sbt_cd", ORDER_SBT_CD_NET);` |
| 2 | SET | `inMap.put("svc_order_cd", SVC_ORDER_CD_WEB);` // WEB |
| 3 | SET | `inMap.put("yokyu_sbt_cd", YOKYU_SBT_CD_CHG);` // CHG |
| 4-8 | Same | // Register Joken |
| 9 | CALL | `param = executeOdrHakkoJokenAdd(handle, param);` |
| 10 | SET | `inMap.put("odr_naiyo_cd", ODR_NAIYO_CD_125);` // WEB Access Analysis Cancellation |
| 11 | SET | `inMap.put("op_svc_kei_no", this.op_svc_kei_no_hp);` // Option = My Home Page |
| 12 | SET | `inMap.put("opsvkei_gadtm", this.op_gadtm_hp);` |
| 13-14 | Same | // Register work |

---

**Block 7** — ELSE-IF `(JKKHakkoSODConstCC.ODR_NAIYO_CD_142.equals(orderNaiyoCd))` [ODR_NAIYO_CD_142="142"]

> **Multi-Selection (Dynamic) Registration** — Registers dynamic multi-selection service. Uses `CHG` request type (not NEW) for the Joken step, but NEW is not set (note: the branch uses `SVC_ORDER_CD_FTTH` but `yokyu_sbt_cd = YOKYU_SBT_CD_CHG`).

| # | Type | Code |
|---|------|------|
| 1 | SET | `inMap.put("order_sbt_cd", ORDER_SBT_CD_NET);` |
| 2 | SET | `inMap.put("svc_order_cd", SVC_ORDER_CD_FTTH);` // FTTH Auth |
| 3 | SET | `inMap.put("yokyu_sbt_cd", YOKYU_SBT_CD_CHG);` // CHG |
| 4-8 | Same | // Register Joken |
| 9 | SET | `inMap.put("odr_naiyo_cd", ODR_NAIYO_CD_142);` // Multi-Selection (Dynamic) Registration |
| 10 | SET | `inMap.put("svc_kei_ucwk_no", this.svc_kei_ucwk_no[0]);` // ST2-2012 service contract line |
| 11 | SET | `inMap.put("svkeiuw_gadtm", this.svc_kei_ucwk_gadtm[0]);` |
| 12 | SET | `inMap.put("op_svc_kei_no", this.op_svc_kei_no_mltise);` // Option = Multi-Selection |
| 13 | SET | `inMap.put("opsvkei_gadtm", this.op_gadtm_mltise);` |
| 14 | SET | `inMap.put("huka_inf_kei_no", this.old_vrsb_jdg_svc_dtl_cd);` // Additional contract number |

---

**Block 8** — ELSE-IF `(JKKHakkoSODConstCC.ODR_NAIYO_CD_147.equals(orderNaiyoCd))` [ODR_NAIYO_CD_147="147"]

> **Router Connection Registration** — Registers a router connection with device identification (model code + serial number).

| # | Type | Code |
|---|------|------|
| 1 | SET | `inMap.put("order_sbt_cd", ORDER_SBT_CD_NET);` |
| 2 | SET | `inMap.put("svc_order_cd", SVC_ORDER_CD_ROUTER);` // Router |
| 3 | SET | `inMap.put("yokyu_sbt_cd", YOKYU_SBT_CD_NEW);` // NEW Register |
| 4 | SET | `inMap.put("taknkiki_model_cd", taknkiki_model_cd[0]);` // Home appliance model code [-> array param] |
| 5 | SET | `inMap.put("kiki_seizo_no", kiki_seizo_no[0]);` // Device serial number [-> array param] |
| 6-7 | Same | // Register Joken |
| 8 | CALL | `param = executeOdrHakkoJokenAdd(handle, param);` |
| 9 | SET | `inMap.put("odr_naiyo_cd", ODR_NAIYO_CD_147);` // Router Connection Registration |
| 10 | SET | `inMap.put("svc_kei_ucwk_no", this.svc_kei_ucwk_no[0]);` |
| 11 | SET | `inMap.put("svkeiuw_gadtm", this.svc_kei_ucwk_gadtm[0]);` |
| 12 | SET | `inMap.put("kktk_svc_kei_no", kktk_svc_kei_no[0]);` // Machine service contract number [-> array param] |
| 13 | SET | `inMap.put("kktsvkei_gadtm", kktk_svc_kei_gadtm[0]);` // Machine contract reg datetime [-> array param] |
| 14-15 | Same | // Register work |

---

**Block 9** — ELSE-IF `(JKKHakkoSODConstCC.ODR_NAIYO_CD_313.equals(orderNaiyoCd))` [ODR_NAIYO_CD_313="313"]

> **e-mobile Cancellation** — Cancels e-mobile mobile service. Uses `ORDER_SBT_CD_MOBILE` (not NET) and `SVC_ORDER_CD_DSL`. Minimal fields — does not set `op_svc_kei_no` or other option fields.

| # | Type | Code |
|---|------|------|
| 1 | SET | `inMap.put("order_sbt_cd", ORDER_SBT_CD_MOBILE);` // Mobile order type [-> MOBILE] |
| 2 | SET | `inMap.put("svc_order_cd", SVC_ORDER_CD_DSL);` // Cancel service order |
| 3 | SET | `inMap.put("yokyu_sbt_cd", YOKYU_SBT_CD_DSL);` // DSL Cancel |
| 4-8 | Same | // Register Joken |
| 9 | SET | `inMap.put("odr_naiyo_cd", ODR_NAIYO_CD_313);` // e-mobile Cancellation |
| 10-12 | Minimal SET — no op_svc_kei_no or other option fields | // Minimal work map |
| 13 | CALL | `param = executeOdrInfoSakseiWkAdd(handle, param);` |

---

**Block 10** — ELSE-IF `(JKKHakkoSODConstCC.ODR_NAIYO_CD_319.equals(orderNaiyoCd))` [ODR_NAIYO_CD_319="319"]

> **Multi-Selection (Static) Password Change** — Fixed in 2013/09/30 (OM-2013-0002468): the password change order was incorrect. Added as a separate branch.

| # | Type | Code |
|---|------|------|
| 1 | SET | `inMap.put("op_svc_kei_no", this.op_svc_kei_no_mltise);` // Multi-Selection option |
| 2 | SET | `inMap.put("order_sbt_cd", ORDER_SBT_CD_NET);` |
| 3 | SET | `inMap.put("svc_order_cd", SVC_ORDER_CD_FTTH);` // FTTH Auth |
| 4 | SET | `inMap.put("yokyu_sbt_cd", YOKYU_SBT_CD_CHG);` // CHG |
| 5-8 | Same | // Register Joken |
| 9 | SET | `inMap.put("odr_naiyo_cd", ODR_NAIYO_CD_319);` // Multi-Selection (Static) Password Change |
| 10 | SET | `inMap.put("op_svc_kei_no", this.op_svc_kei_no_mltise);` |
| 11 | SET | `inMap.put("opsvkei_gadtm", this.op_gadtm_mltise);` |
| 12 | SET | `inMap.put("huka_inf_kei_no", this.old_vrsb_jdg_svc_dtl_cd);` // Additional contract number |
| 13-14 | Same | // Register work |

---

## 7. Glossary

### Acronyms

| Term | Type | Business Meaning |
|------|------|------------------|
| SOD | Acronym | **Service Order Data** — the internal document/order that triggers downstream provisioning operations. Analogous to a work order in telecom |
| Joken | Business term | **Conditions** — the order issuance trigger configuration. Determines WHEN and UNDER WHAT conditions an order is issued. Japanese: 条件 (jouken) |
| Saksei | Business term | **Creation/Production** — the order information creation work table. Stores the detailed order content to be processed. Japanese: 作成 (sakusei) |
| CC | Acronym | **Common Component** — the shared business logic component layer in this architecture. Part of the `custom.common` package |
| FTTH | Business term | **Fiber To The Home** — fiber-optic broadband internet service offered by K-Opticom |
| ENUM | Business term | **E.164 Number Management** — maps telephone numbers to internet protocols. Used for VoIP/IMS telephony routing |
| IPv6 | Business term | **Internet Protocol version 6** — the next-generation IP addressing protocol |
| OLS | Business term | **Operation/Lifecycle System** — internal system managing service lifecycle events |
| VA | Business term | **Voice Application** — voice service features (e.g., OLS-VA bundle) |
| My Home Page | Business term | **My HP / My Homepage** — K-Opticom's web portal service (My Home Page) |
| Wi-LCUS | Business term | **Wireless Local Connection Utility Service** — wireless access point/service offering |
| E-irress | Business term | **E-irress** — K-Opticom's E-Mail service brand |
| MLP | Business term | **Messaging List Platform** — the ML (Messaging List) system for email-based group communications |
| Dual-Up | Business term | **Dual-Up Connection** — a redundant/dual internet connection service offering |
| Multi-Selection | Business term | **Multi-Selection (MS)** — bundled service selection offering (dynamic and static variants) |

### Japanese-named Fields

| Field | Type | Business Meaning |
|-------|------|-----------------|
| `orderNaiyoCd` | Parameter | **Order content code** — the primary routing key. Each unique value (101-319) maps to a specific service type and operation |
| `svc_kei_ucwk_no` | Field | **Service detail work number** — internal tracking ID for service contract line items. Unique identifier for a service contract line |
| `svkeiuw_gadtm` | Field | **Service detail work registration datetime** — date/time (YYYYMMDDHHmmss) when the service contract line was registered |
| `svkeiuw_gadtm` | Field | **Service detail work generation registration datetime** — registration timestamp for service contract line items |
| `order_sbt_cd` | Field | **Order subtype code** — classifies the order by transport type (NET = broadband, MOBILE = mobile) |
| `svc_order_cd` | Field | **Service order code** — identifies the service operation type (FTTH Auth, Mail, WEB, Router, etc.) |
| `yokyu_sbt_cd` | Field | **Request subtype code** — classifies the operation: NEW (new), CHG (change), DSL (dismantle/cancel), DEL (delete), STP (suspend), STP_RLS (suspend release), KAIHK (restore) |
| `odr_hakko_joken_cd` | Field | **Order issuance condition code** — determines the issuance timing (SOKJI_HAKKO = immediate issuance) |
| `same_trn_no` | Field | **Same transaction number** — unique transaction ID used to group related SOD operations into a single batch |
| `mlad` | Field | **Mail address** — the E-Mail address for E-Mail service |
| `op_svc_kei_no` | Field | **Option service contract number** — the contract number for option services (Mail, Home Page, Multi-Selection, etc.) |
| `opsvkei_gadtm` | Field | **Option service contract generation registration datetime** — registration timestamp for option service contracts |
| `huka_inf_kei_no` | Field | **Additional contract number** — tracks supplementary contract information, including legacy VR identification |
| `taknkiki_model_cd` | Field | **Home appliance model code** — hardware model code for router/device equipment |
| `kiki_seizo_no` | Field | **Device serial number** — manufacturing serial number of hardware equipment |
| `kktk_svc_kei_no` | Field | **Machine-provided service contract number** — contract number for device/provision services |
| `kktsvkei_gadtm` | Field | **Machine-provided service contract registration datetime** — registration timestamp for device services |
| `sbop_svckeino_alias` | Field | **Sub-option service contract number (alias)** — alias contract reference for E-irress operations |
| `sbop_gadtm_alias` | Field | **Sub-option service contract datetime (alias)** — alias datetime reference |
| `sbop_svckeino_mlvirus` | Field | **Sub-option service contract number (mail virus)** — contract reference for mail virus service |
| `sbop_gadtm_mlvirus` | Field | **Sub-option service contract datetime (mail virus)** — mail virus datetime reference |
| `old_vrsb_jdg_svc_dtl_cd` | Field | **Old VR identification judgment service detail code** — legacy compatibility field for old VR identification (ANK-2765) |
| `haka_sod_cc_work_map` | Constant key | **HAKKOSODCCWORKMAP** — the HashMap key used to store/retrieve the work data map within the param object |

### Value Constants (from JKKHakkoSODConstCC)

| Constant | Value | Business Meaning |
|----------|-------|-----------------|
| `ORDER_SBT_CD_NET` | `"01"` (inferred) | Order type: Net (broadband) |
| `ORDER_SBT_CD_MOBILE` | Value | Order type: Mobile |
| `SVC_ORDER_CD_FTTH` | Value | Service: FTTH Authentication |
| `SVC_ORDER_CD_MAIL` | Value | Service: E-Mail |
| `SVC_ORDER_CD_WEB` | Value | Service: WEB/My Home Page |
| `SVC_ORDER_CD_ML` | Value | Service: Messaging List (ML) |
| `SVC_ORDER_CD_DUPCON` | Value | Service: Dual-Up Connection |
| `SVC_ORDER_CD_ROUTER` | Value | Service: Router Connection |
| `SVC_ORDER_CD_DSL` | Value | Service: Dismantle/Cancel (used as service order for mobile cancellation) |
| `SVC_ORDER_CD_PAUSE` | Value | Service: Suspension/Interim Stop |
| `SVC_ORDER_CD_PAUSE_RLS` | Value | Service: Suspension Release |
| `YOKYU_SBT_CD_NEW` | Value | Request type: New registration |
| `YOKYU_SBT_CD_CHG` | Value | Request type: Change/Modify |
| `YOKYU_SBT_CD_DSL` | Value | Request type: Dismantle/Cancel |
| `YOKYU_SBT_CD_DEL` | Value | Request type: Delete |
| `YOKYU_SBT_CD_STP` | Value | Request type: Suspend |
| `YOKYU_SBT_CD_STP_RLS` | Value | Request type: Suspend Release |
| `YOKYU_SBT_CD_KAIHK` | Value | Request type: Restore |
| `ODR_HAKKO_JOKEN_CD_SOKJI_HAKKO` | Value | Order issuance condition: Immediate issuance (即発行) |

### Order Content Codes (ODR_NAIYO_CD values)

| Code Range | Service Category | Values | Operations |
|------------|-----------------|--------|------------|
| 101-107 | FTTH Authentication | 101, 102, 103, 104, 105, 106, 107 | Register, Password Change, Cancel, Delete, Restore, Suspend, Suspend Release |
| 108-120 | E-Mail | 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120 | Register, Password Change, E-irress Register, E-irress Change, E-irress Cancel, Mailbox Capacity Change, Wi-LCUS Register, Wi-LCUS Cancel, Cancel, Cancel Scheduled, Delete, Cancel Scheduled Alt, Restore |
| 121-128 | WEB/My Home Page | 121, 122, 123, 124, 125, 126, 127, 128 | Register, Password Change, HP Capacity Change, Access Analysis Register, Access Analysis Cancel, Cancel, Delete, Restore |
| 129, 131-133 | ML (Messaging List) | 129, 131, 132, 133 | Register, Cancel, Delete, Restore |
| 134-138, 140-141 | Dual-Up Connection | 134, 135, 136, 137, 138, 140, 141 | Connect, Password Change, Plan Change, Cancel, Delete, Temp Suspend, Suspend Release |
| 142-146, 319 | Multi-Selection | 142, 143, 144, 145, 146, 319 | Dynamic Register, Dynamic Cancel, Static Register, Static Cancel, Static Delete, Static Password Change |
| 147-150, 163 | Router Connection | 147, 148, 149, 150, 163 | Connection Register, Password Change, Cancel, Delete, Change |
| 152-157 | Fixed IP Address | 152, 153, 154, 155, 157 | Register, Restore, Cancel, Delete, Plan Change |
| 158, 160, 162, 164-166 | IPv6 | 158, 160, 162, 164, 165, 166 | Dedicated Connect, Dedicated Cancel, IPv6 Address Register, IPv6 Address Cancel, IPv6 Address Delete, IPv6 Address Restore |
| 167-169 | Service Contract Content Number | 167, 168, 169 | Register, Change, Cancel |
| 170-182 | Telephone | 170-174, 175-182 | Register, Change, Cancel, Delete, Restore + VA Bundle variants |
| 190-213 | Number Operations | 190-197, 198-213 | Number Add, Change, Replacement, Operator Assistance operations |
| 313-315 | e-mobile | 313, 314, 315 | Cancel, Interim Suspension, Suspension Release |
