# Business Logic — JKKAdchgHakkoSODCC.jdgIpv6() [276 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `com.fujitsu.futurity.bp.custom.common.JKKAdchgHakkoSODCC` |
| Layer | Common Component / Service Component (CC) |
| Module | `common` (Package: `com.fujitsu.futurity.bp.custom.common`) |

## 1. Role

### JKKAdchgHakkoSODCC.jdgIpv6()

This method performs **IPv6 Address Determination Processing** (IPv6判定処理) as part of Fujitsu's eo Hikari telecom order fulfillment system. It determines whether an IPv6-capable router should be shipped and an IPv6 Service Order Data (SOD) should be issued based on the customer's order type and device provisioning state. The method acts as a **routing dispatcher**: it queries device provision service contracts filtered by service code "C014" (BBR, the broadband router service), iterates over the returned contract records, applies a cascade of business-rule filters (service status, order division type, manufacturing metadata), and for each record that passes all filters, sets up the instance fields and invokes `hakkouIpv6` to actually generate the IPv6 SOD. It handles multiple service patterns encoded in `sod_pattern_ipv6`: pattern 1 corresponds to IPv6 registration, pattern 2 to IPv6 change, and pattern 3 to IPv6 cancellation — each pattern drives different filtering behavior for the service status check and the order division (ido_div) matching. The method implements a **delegation pattern** where it performs pre-processing (filtering, field preparation) and delegates the actual SOD issuance to `hakkouIpv6`.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["jdgIpv6 Start"])
    START --> INIT["statusCode = 0, kiki_ipv6_taio_flg initialized"]
    INIT --> GET_IPV6["Extract IPV6_AD_IFID from eKK0361A010Info"]
    GET_IPV6 --> CHECK_IPV6["Check ipv6AdIfid null and empty"]
    CHECK_IPV6 -->|Yes| SET_ADDR["op_addr_ipv6 = ipv6AdIfid.toString()"]
    CHECK_IPV6 -->|No| SET_NULL["op_addr_ipv6 = null"]
    SET_ADDR --> CALL_SC["callEKK0341B002SC with KKTK_SVC_CD_BBR"]
    SET_NULL --> CALL_SC
    CALL_SC --> SC_OK["statusCode == 0"]
    SC_OK -->|No| THROW["throw CCException"]
    SC_OK -->|Yes| GET_RESULTS["Get msgEKK0341B002SCList from result"]
    GET_RESULTS --> LOOP_CHECK["msgEKK0341B002SCList null check"]
    LOOP_CHECK -->|No| END_RETURN["Return"]
    LOOP_CHECK -->|Yes| LOOP["For each CAANMsg in list"]
    LOOP --> EXTRACT_HASH["Extract eKK0341B002Hash from CAANMsg"]
    EXTRACT_HASH --> GET_KKTK_STAT["get KKTK_SVC_KEI_STAT shkkaChr"]
    GET_KKTK_STAT --> CHECK_PATTERN["sod_pattern_ipv6 != 3"]
    CHECK_PATTERN -->|Yes| STAT_FILTER["Filter kktkStat 010 020 030 100"]
    CHECK_PATTERN -->|No| SKIP_FILTER["Skip status filter"]
    STAT_FILTER --> CHECK_DIVIDE["ido_div != IDO_DIV_NEW"]
    SKIP_FILTER --> CHECK_DIVIDE
    CHECK_DIVIDE -->|No| EXTRACT_KEYS["Extract KKTK_SVC_KEI_NO and GENE_ADD_DTM"]
    CHECK_DIVIDE -->|Yes| CHECK_OPSETTE["ido_div == IDO_DIV_OPSETTE"]
    CHECK_OPSETTE -->|Yes| CHECK_OP_SVC["check_op_kei_no matches param"]
    CHECK_OPSETTE -->|No| EXTRACT_KEYS
    CHECK_OP_SVC -->|No| CONTINUE_LOOP["continue to next item"]
    CHECK_OP_SVC -->|Yes| EXTRACT_KEYS
    EXTRACT_KEYS --> CHECK_BLANK["kiki_seizo_no or taknkiki_model blank"]
    CHECK_BLANK -->|Yes| CONTINUE_LOOP
    CHECK_BLANK -->|No| SET_FIELDS["Set ipv6_kktk_svc_kei_no and ipv6_kktk_svc_kei_gadtm"]
    SET_FIELDS --> INIT_ARRAYS["Initialize kiki_seizo_no0 and taknkiki_model_cd0"]
    INIT_ARRAYS --> CALL_TAKN["getTaknkikiM handle param modelCd"]
    CALL_TAKN --> SET_TAIO_FLG["taknkiki_model_m null check"]
    SET_TAIO_FLG -->|Yes| GET_TAIO["kiki_ipv6_taio_flg from model m"]
    SET_TAIO_FLG -->|No| SET_ADDR_FLG
    GET_TAIO --> SET_ADDR_FLG["Set op_addr_kakutei_ipv6"]
    SET_ADDR_FLG --> CHECK_KIKI_SHUKKA["seizo_no not blank and taio_flg equal TAIO"]
    CHECK_KIKI_SHUKKA -->|Yes| SET_SHUKKA_TRUE["kiki_shukka_sumi_ipv6 = true"]
    CHECK_KIKI_SHUKKA -->|No| SET_SHUKKA_FALSE["kiki_shukka_sumi_ipv6 = false"]
    SET_SHUKKA_TRUE --> KIKI_SHUKKA_CHECK["kiki_shukka_sumi_ipv6 true"]
    SET_SHUKKA_FALSE --> KIKI_SHUKKA_CHECK
    KIKI_SHUKKA_CHECK -->|No| LOOP
    KIKI_SHUKKA_CHECK -->|Yes| CHECK_ADDR_KAKU["op_addr_kakutei_ipv6 true"]
    CHECK_ADDR_KAKU -->|No| LOOP
    CHECK_ADDR_KAKU -->|Yes| SET_SVC_ARRAYS["Set kktk_svc_kei_no0 svc_kei_ucwk_no0 arrays"]
    SET_SVC_ARRAYS --> CALL_HAKKU["hakkouIpv6 handle param eKK0361A010Info"]
    CALL_HAKKU --> LOOP
    LOOP --> END_RETURN
    THROW --> END_RETURN
```

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `handle` | `SessionHandle` | Session manager handle carrying database connection and transaction context used across all service component calls |
| 2 | `param` | `IRequestParameterReadWrite` | Request parameter object containing model group and control map — serves as the bidirectional data carrier for screen/business layer communication |
| 3 | `kei_ucwk_no_param` | `String` | Service detail work number — the internal contract line item tracking number. Used to match against returned device provision contract records when `ido_div` is not a new order (i.e., for changes, transfers, cancellations). In current usage, this is always passed as an empty string `""`, meaning it is not actively used as a filter. |
| 4 | `op_svc_kei_no_param` | `String` | Option service contract number — the unique identifier for the IPv6 option service contract. Used as the matching key when `ido_div` is `IDO_DIV_OPSETTE` (option setup, value "00031") to ensure the SOD is only issued for the specific option contract being processed. |
| 5 | `eKK0361A010Info` | `HashMap<String, Object>` | Result of querying the Optional Service Contract <ISP> unique inquiry (EKK0361A010). Contains ISP option service data including the IPv6 address interface ID (`IPV6_AD_IFID`) and the option service contract number (`OP_SVC_KEI_NO`). |

**Instance fields read/written by this method:**

| Field | Access | Business Description |
|-------|--------|---------------------|
| `sod_pattern_ipv6` | Read | IPv6 SOD pattern indicator — determines filtering behavior. Values: 1 (IPv6 registration), 2 (IPv6 change), 3 (IPv6 cancellation) |
| `ido_div` | Read | Order division code — classifies the type of order operation (new, service add, opt-out, transfer, DSL, course change, cancellation, option setup). Value "00001" = new order, "00031" = option setup. |
| `svc_kei_no1` | Read | Service contract number — used as a query parameter to retrieve device provision service contracts |
| `op_addr_ipv6` | Write | IPv6 address string extracted from the ISP inquiry result |
| `kiki_ipv6_taio_flg` | Write | Device IPv6 compatibility flag — whether the router model supports IPv6 (read from device model master data) |
| `op_addr_kakutei_ipv6` | Write | IPv6 address confirmation flag — true when an IPv6 address has been assigned |
| `kiki_seizo_no_ipv6` | Write | Device manufacturing number for IPv6 |
| `taknkiki_model_cd_ipv6` | Write | Indoor device model code for IPv6 |
| `ipv6_kktk_svc_kei_no` | Write | Device provision service contract number for IPv6 SOD |
| `ipv6_kktk_svc_kei_gadtm` | Write | Device provision service contract registration datetime for IPv6 SOD |
| `kiki_seizo_no` | Write | String array[3] of device manufacturing numbers |
| `taknkiki_model_cd` | Write | String array[3] of indoor device model codes |
| `kiki_shukka_sumi_ipv6` | Write (local var) | IPv6 device shipping completion flag — true when the device supports IPv6 and has a manufacturing number |
| `kktk_svc_kei_no` | Write | String array of device provision service contract numbers to be issued |
| `kktk_svc_kei_gadtm` | Write | String array of device provision service contract registration datetimes |
| `svc_kei_ucwk_no` | Write | String array of service detail work numbers |
| `svc_kei_ucwk_gadtm` | Write | String array of service detail work registration datetimes |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `JKKAdchgHakkoSODCC.callEKK0341B002SC` | EKK0341B002SC | `KK_T_KKTSVKEI` (Device Provision Service Contract table) | Reads device provision service contract records filtered by service code "C014" (BBR) to find IPv6-capable router contracts. Uses the service contract number (`svc_kei_no1`) as the query key. |
| R | `JKKAdchgHakkoSODCC.getTaknkikiM` | EZM0411A010CBS | `EZM_M_TAKNKIKI` (Indoor Device Model Master table) | Retrieves device model master data (IPv6 compatibility flag, specifications) by model code. Used to check if the router supports IPv6. |
| - | `JKKAdchgHakkoSODCC.hakkouIpv6` | (internal) | Various SOD entities | Issues (SOD issuance) the IPv6 service order data. Sets up array fields with contract numbers and registration datetimes before delegating to this method. |
| - | `JKKAdchgHakkoSODCC.isBlank` | (utility) | - | Null-safe blank check utility for String fields |
| - | `JKKAdchgHakkoSODCC.shkkaChr` | (utility) | - | Null-safe character conversion utility that handles null/empty string edge cases |

## 5. Dependency Trace

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

No screen/batch entry points found within 8 hops. Direct callers found in `JKKAdchgHakkoSODCC`: 3 calls.

Tracing the call hierarchy:

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | CBS:JKKAdchgHakkoSODCC | `jdgIpv6EKK0361A010` -> `jdgIpv6` | `callEKK0341B002SC [R] KK_T_KKTSVKEI`, `getTaknkikiM [R] EZM_M_TAKNKIKI`, `hakkouIpv6 [C] SOD entities` |
| 2 | CBS:JKKAdchgHakkoSODCC (same class) | `chafOpSvcKeiNo` -> `jdgIpv6` (3 call sites, L11210/L11219/L11228) | `callEKK0341B002SC [R] KK_T_KKTSVKEI`, `getTaknkikiM [R] EZM_M_TAKNKIKI`, `hakkouIpv6 [C] SOD entities` |

**Detailed caller context (JKKAdchgHakkoSODCC.java):**
- **L11210**: Called when `chbf_opsvkei_no` (before-change option service contract number) is blank — indicates **IPv6 registration** (sod_pattern_ipv6 = 1). Passes `chaf_opsvkei_no` as the matching key.
- **L11219**: Called when post-change option service contract status is "910" (cancellation completed) or "920" (cancellation cancelled) — indicates **IPv6 cancellation** (sod_pattern_ipv6 = 3). Passes `chbf_opsvkei_no` as the matching key.
- **L11228**: Called when pre-change status is "910" (cancellation completed) AND post-change status is "100" (service provision in progress) — indicates **IPv6 recovery/activation** (sod_pattern_ipv6 = 1). Passes `chaf_opsvkei_no` as the matching key.
- **L13002**: `jdgIpv6EKK0361A010` calls `jdgIpv6` when the option service code matches `OP_SVC_CD_IPV6`. Sets sod_pattern_ipv6 = 2 (IPv6 change).

**Also called from sibling class `JKKHakkoSODCC`:**
- Similar call pattern at L7875 (jdgIpv6EKK0361A010), L14126/L14135/L14144 (chafOpSvcKeiNo)
- Same SCCllass `JKKAdchgCancelHakkoSODCC` at L9274/L9283/L9292, L18822

## 6. Per-Branch Detail Blocks

**Block 1** — [ASSIGN/EXTRACT] `(initialize state)` (L21318)

Initialize the method state and extract IPv6 address interface ID from the ISP inquiry result.

| # | Type | Code |
|---|------|------|
| 1 | SET | `statusCode = 0` |
| 2 | SET | `this.kiki_ipv6_taio_flg = ""` — Initialize device IPv6 compatibility flag (comment: "should be filled later by indoor device model master reference") |
| 3 | EXEC | `ipv6AdIfid = eKK0361A010Info.get(IPV6_AD_IFID)` — Extract IPv6 address interface ID from ISP inquiry HashMap |
| 4 | SET | `this.op_addr_ipv6 = ipv6AdIfid.toString()` or `null` — Set IPv6 address based on whether interface ID exists |

**Block 2** — [CALL] `(query device provision service contracts)` (L21338)

Prepare input parameters and call the device provision service contract inquiry service component. The service code is set to `KKTK_SVC_CD_BBR = "C014"` (Broadband Router service), filtering results to only router-related contracts.

| # | Type | Code |
|---|------|------|
| 1 | SET | `inHashKktk = new HashMap<>()` — Input hash for device provision query |
| 2 | SET | `resultHashKktk = new HashMap<>()` — Output hash for device provision query |
| 3 | SET | `inHashKktk.put(SVC_KEI_NO, this.svc_kei_no1)` — Service contract number |
| 4 | SET | `inHashKktk.put(KKTK_SVC_CD, KKTK_SVC_CD_BBR)` — Device provision service code = "C014" (BBR) |
| 5 | CALL | `statusCode = callEKK0341B002SC(param, handle, inHashKktk, resultHashKktk, FUNC_CODE_1)` — Query device provision service contract list |
| 6 | RETURN | Throws `CCException(SCCallException)` if `statusCode != 0` |
| 7 | EXEC | `msgEKK0341B002SCList = resultHashKktk.get(TEMPLATE_ID_EKK0341B002)` — Extract CAANMsg array |

**Block 3** — [LOOP] `(iterate over device provision service contract records)` (L21344)

Loop through each CAANMsg returned from EKK0341B002SC, extracting and filtering device provision service contract records.

| # | Type | Code |
|---|------|------|
| 1 | SET | `i = 0; i < msgEKK0341B002SCList.length; i++` |
| 2 | EXEC | `eKK0341B002Hash = msgEKK0341B002SCList[i].getMsgData()` — Extract HashMap from CAANMsg |
| 3 | EXEC | `kktkStat = shkkaChr(eKK0341B002Hash.get(KKTK_SVC_KEI_STAT))` — Device provision service status |
| 4 | CALL | [Block 3.1 — conditional status filter] |
| 5 | EXEC | `check_op_kei_no = shkkaChr(eKK0361A010Info.get(OP_SVC_KEI_NO))` — Option service contract number |
| 6 | CALL | [Block 3.2 — conditional order division filter] |
| 7 | EXEC | `temp_ipv6_kktk_svc_kei_no = shkkaChr(KKTK_SVC_KEI_NO from hash)` |
| 8 | EXEC | `temp_ipv6_kktk_svc_kei_gadtm = shkkaChr(GENE_ADD_DTM from hash)` |
| 9 | SET | `this.kiki_seizo_no_ipv6 = shkkaChr(KIKI_SEIZO_NO from hash)` — Device manufacturing number |
| 10 | SET | `this.taknkiki_model_cd_ipv6 = shkkaChr(TAKNKIKI_MODEL_CD from hash)` — Indoor device model code |
| 11 | CALL | [Block 3.3 — blank check filter] |
| 12 | SET | `this.ipv6_kktk_svc_kei_no = temp_ipv6_kktk_svc_kei_no` |
| 13 | SET | `this.ipv6_kktk_svc_kei_gadtm = temp_ipv6_kktk_svc_kei_gadtm` |
| 14 | CALL | [Block 3.4 — array initialization] |
| 15 | CALL | [Block 3.5 — getTaknkikiM] |
| 16 | SET | `this.op_addr_kakutei_ipv6 = true/false` — IPv6 address confirmation flag |
| 17 | CALL | [Block 3.6 — shipping completion judgment] |
| 18 | CALL | [Block 3.7 — SOD issuance branch] |

**Block 3.1** — [IF] `(sod_pattern_ipv6 != 3 — status filter for non-cancellation)` [sod_pattern_ipv6 != 3] (L21352)

When `sod_pattern_ipv6` is NOT 3 (i.e., not a cancellation operation), filter device provision contract records by service status. Only active service states are kept: "010" (order received), "020" (approved), "030" (contracted), "100" (service provision in progress). If the record's status does not match any of these, it is skipped.

| # | Type | Code |
|---|------|------|
| 1 | IF | `this.sod_pattern_ipv6 != 3` |
| 2 | IF | `kktkStat != "100" AND kktkStat != "010" AND kktkStat != "020" AND kktkStat != "030"` |
| 3 | EXEC | `continue` — Skip non-active status records |

**Block 3.2** — [IF] `(ido_div != "00001" — new order check)` [IDO_DIV_NEW = "00001"] (L21397)

When the order division is NOT a new order ("00001"), additional filtering applies. If the order division IS option setup ("00031"), then the option service contract number from the query result must match the `op_svc_kei_no_param` parameter. This ensures that during option setup processing, only the specific IPv6 option contract being configured triggers SOD issuance.

| # | Type | Code |
|---|------|------|
| 1 | IF | `ido_div != IDO_DIV_NEW ("00001")` — Not a new order |
| 2 | IF | `ido_div == IDO_DIV_OPSETTE ("00031")` — Option setup case |
| 3 | IF | `check_op_kei_no != shkkaChr(op_svc_kei_no_param)` |
| 4 | EXEC | `continue` — Mismatched option contract number, skip |

**Block 3.3** — [IF] `(blank check on manufacturing number and model code)` (L21451)

Both the device manufacturing number (`kiki_seizo_no_ipv6`) and the indoor device model code (`taknkiki_model_cd_ipv6`) must be non-blank for the record to proceed. If either is missing, the device information is incomplete and the record is skipped.

| # | Type | Code |
|---|------|------|
| 1 | IF | `isBlank(kiki_seizo_no_ipv6) OR isBlank(taknkiki_model_cd_ipv6)` |
| 2 | EXEC | `continue` — Incomplete device info, skip |

**Block 3.4** — [ASSIGN] `(set IPv6 device fields and initialize arrays)` (L21457)

Assign the IPv6 device contract number and registration datetime to instance fields. Initialize the `kiki_seizo_no` and `taknkiki_model_cd` arrays (size 3, supporting up to 3 devices) if they are not yet allocated, storing the IPv6 device info at index 0.

| # | Type | Code |
|---|------|------|
| 1 | SET | `this.ipv6_kktk_svc_kei_no = temp_ipv6_kktk_svc_kei_no` — IPv6 device provision contract number |
| 2 | SET | `this.ipv6_kktk_svc_kei_gadtm = temp_ipv6_kktk_svc_kei_gadtm` — IPv6 device provision contract registration datetime |
| 3 | IF | `kiki_seizo_no == null OR kiki_seizo_no.length == 0` |
| 4 | SET | `kiki_seizo_no = new String[3]` — Initialize device manufacturing number array |
| 5 | SET | `kiki_seizo_no[0] = kiki_seizo_no_ipv6` |
| 6 | IF | `taknkiki_model_cd == null OR taknkiki_model_cd.length == 0` |
| 7 | SET | `taknkiki_model_cd = new String[3]` — Initialize device model code array |
| 8 | SET | `taknkiki_model_cd[0] = taknkiki_model_cd_ipv6` |

**Block 3.5** — [CALL] `(query device model master data)` (L21471)

Call `getTaknkikiM` to retrieve the device model master data, which includes the IPv6 compatibility flag. This determines whether the router model supports IPv6.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `taknkiki_model_m = getTaknkikiM(handle, param, taknkiki_model_cd_ipv6)` — Device model master data |
| 2 | IF | `taknkiki_model_m != null` |
| 3 | SET | `this.kiki_ipv6_taio_flg = shkkaChr(taknkiki_model_m.get(IPV6_TAIO_FLG))` — Device IPv6 support flag |

**Block 3.6** — [IF/ELSE] `(set IPv6 address confirmation flag)` (L21477)

Determine whether an IPv6 address has been definitively assigned. If `op_addr_ipv6` is blank, the address is not confirmed; otherwise, it is confirmed.

| # | Type | Code |
|---|------|------|
| 1 | IF | `isBlank(op_addr_ipv6)` |
| 2 | SET | `op_addr_kakutei_ipv6 = false` — IPv6 address not confirmed |
| 3 | ELSE | `op_addr_kakutei_ipv6 = true` — IPv6 address confirmed |

**Block 3.7** — [IF/ELSE] `(IPv6 device shipping completion judgment)` (L21487)

Determine whether the device should be shipped by checking both conditions: (1) the device has a manufacturing number (is a real product), AND (2) the device model supports IPv6 (`kiki_ipv6_taio_flg` equals "1", the TAIO support flag).

| # | Type | Code |
|---|------|------|
| 1 | IF | `!isBlank(kiki_seizo_no_ipv6) AND shkkaChr(kiki_ipv6_taio_flg) == IPV6_TAIO_FLG_TAIO ("1")` |
| 2 | SET | `kiki_shukka_sumi_ipv6 = true` — IPv6 device shipping completed (device exists and supports IPv6) |
| 3 | ELSE | `kiki_shukka_sumi_ipv6 = false` — IPv6 device not shipping (no manufacturing number or device does not support IPv6) |

**Block 3.8** — [IF] `(kiki_shukka_sumi_ipv6)` (L21496)

Only when the device is confirmed to be IPv6-capable and shipping-worthy does the method proceed to SOD issuance preparation.

| # | Type | Code |
|---|------|------|
| 1 | IF | `kiki_shukka_sumi_ipv6 == true` |
| 2 | CALL | [Block 3.8.1 — op_addr_kakutei_ipv6 check] |

**Block 3.8.1** — [IF] `(op_addr_kakutei_ipv6)` (L21500)

SOD issuance is only performed when BOTH the device shipping flag and the IPv6 address confirmation flag are true. This ensures that IPv6 SODs are only issued when the customer has a supported IPv6 device AND has been assigned a concrete IPv6 address. Sets up the array fields (contract numbers, registration datetimes) needed by `hakkouIpv6`.

| # | Type | Code |
|---|------|------|
| 1 | IF | `op_addr_kakutei_ipv6 == true` |
| 2 | IF | `kktk_svc_kei_no == null OR kktk_svc_kei_no.length < 1` |
| 3 | SET | `kktk_svc_kei_no = new String[1]` |
| 4 | SET | `kktk_svc_kei_no[0] = ipv6_kktk_svc_kei_no` |
| 5 | IF | `kktk_svc_kei_gadtm == null OR kktk_svc_kei_gadtm.length < 1` |
| 6 | SET | `kktk_svc_kei_gadtm = new String[1]` |
| 7 | SET | `kktk_svc_kei_gadtm[0] = ipv6_kktk_svc_kei_gadtm` |
| 8 | IF | `svc_kei_ucwk_no == null OR svc_kei_ucwk_no.length < 1` |
| 9 | SET | `svc_kei_ucwk_no = new String[1]` |
| 10 | SET | `svc_kei_ucwk_no[0] = ipv6_svc_kei_ucwk_no` — IPv6 service detail work number |
| 11 | IF | `svc_kei_ucwk_gadtm == null OR svc_kei_ucwk_gadtm.length < 1` |
| 12 | SET | `svc_kei_ucwk_gadtm = new String[1]` |
| 13 | SET | `svc_kei_ucwk_gadtm[0] = ipv6_svc_kei_ucwk_gadtm` |
| 14 | CALL | `hakkouIpv6(handle, param, eKK0361A010Info)` — Issue IPv6 SOD |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `op_addr_ipv6` | Field | IPv6 address string — the assigned IPv6 address extracted from the ISP inquiry result |
| `op_addr_kakutei_ipv6` | Field | IPv6 address confirmation flag — true when an IPv6 address has been definitively assigned to the customer |
| `ipv6_kktk_svc_kei_no` | Field | IPv6 device provision service contract number — the contract number for the broadband router service associated with IPv6 |
| `ipv6_kktk_svc_kei_gadtm` | Field | IPv6 device provision service contract registration datetime — timestamp of contract registration |
| `kiki_seizo_no_ipv6` | Field | IPv6 device manufacturing number — unique hardware identifier for the IPv6-capable router |
| `taknkiki_model_cd_ipv6` | Field | IPv6 indoor device model code — model code identifying the specific router hardware model |
| `kiki_ipv6_taio_flg` | Field | Device IPv6 compatibility flag — indicates whether the router model supports IPv6 |
| `kiki_shukka_sumi_ipv6` | Field | IPv6 device shipping completion flag — true when the device is IPv6-capable and should be shipped to the customer |
| `sod_pattern_ipv6` | Field | IPv6 SOD processing pattern — determines which filtering rules apply. Values: 1 = IPv6 registration, 2 = IPv6 change, 3 = IPv6 cancellation |
| `ido_div` | Field | Order division code — classifies the type of order operation (new order, change, transfer, cancellation, option setup, etc.) |
| `ido_div_new` | Field | New order indicator — when `ido_div` equals "00001", it signifies a brand new service contract |
| `ido_div_opsette` | Field | Option setup indicator — when `ido_div` equals "00031", it signifies an option service setup operation |
| `ipV6_AD_IFID` | Field | IPv6 Address Interface ID — the unique interface identifier for the IPv6 address assigned to the customer |
| SOD | Acronym | Service Order Data — internal Fujitsu work order document issued to trigger physical service provisioning (device shipping, line setup, etc.) |
| FTTH | Business term | Fiber To The Home — fiber-optic broadband internet service offered by eo Hikari |
| BBR | Business term | Broadband Router — the broadband router service (service code "C014") provided for internet connectivity |
| KKTK (設備提供) | Japanese | Device Provision — refers to the device provisioning aspect of telecom service delivery (router, set-top box, etc.) |
| KKTSVKEI (設備契約) | Japanese | Device Provision Contract — the service contract record for devices provided with telecom services |
| SVC_KEI (契約) | Japanese | Service Contract — the main telecom service contract record |
| SVC_KEI_UCWK_NO | Japanese | Service Contract Detail Work Number — internal tracking ID for service contract line items |
| GEN_ (GENE_ADD_DTM) | Japanese | Generation Registration Datetime — the timestamp when a service contract version was registered in the system |
| TAKNKIKI (屋内機器) | Japanese | Indoor Device — customer premises equipment such as routers, modems, or set-top boxes |
| KKOPSVKEI (オプション契約) | Japanese | Option Service Contract — additional services attached to a base service contract (IPv6, ENUM, etc.) |
| KKTK_SVC_CD_BBR | Constant | Device provision service code for Broadband Router = "C014" |
| IDO_DIV_NEW | Constant | Order division code for new order = "00001" |
| IDO_DIV_OPSETTE | Constant | Order division code for option setup = "00031" |
| IPV6_TAIO_FLG_TAIO | Constant | IPv6 compatibility flag value indicating support = "1" |
| SVC_KEI_STAT_010 | Constant | Service status code "010" — Order received (受付済) |
| SVC_KEI_STAT_020 | Constant | Service status code "020" — Approved (承認済) |
| SVC_KEI_STAT_030 | Constant | Service status code "030" — Contracted (締結済) |
| SVC_KEI_STAT_100 | Constant | Service status code "100" — Service provision in progress (サービス提供中) |
| SVC_KEI_STAT_910 | Constant | Service status code "910" — Cancellation completed (解約済) |
| SVC_KEI_STAT_920 | Constant | Service status code "920" — Cancellation cancelled (キャンセル済) |
| EKK0341B002SC | SC Code | Service Component for Device Provision Service Contract Inquiry (List version) |
| EKK0361A010CBS | CBS Code | Component for Optional Service Contract <ISP> Unique Inquiry |
| EZM0411A010CBS | CBS Code | Component for Indoor Device Model Master Inquiry |
| CAANMsg | Class | Message object carrying business data between service components, containing a HashMap of msgData |
| hakkouIpv6 | Method | IPv6 SOD issuance method — generates and submits the actual Service Order Data for IPv6 service |
| getTaknkikiM | Method | Device model master inquiry method — retrieves model specifications and IPv6 compatibility from the device master table |
| shkkaChr | Method | Null-safe character conversion utility — returns empty string instead of null for String values |
| isBlank | Method | Null and empty string check utility |
| callEKK0341B002SC | Method | Service Component call — queries device provision service contract list by service contract number |
