---
title: JKKGlobalIpAddCfmCC.main() — 342 LOC
---

# Business Logic — JKKGlobalIpAddCfmCC.main() [342 LOC]

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

## 1. Role

### JKKGlobalIpAddCfmCC.main()

This method is the **core processing entry point** for fixed IP address assignment during global IP add confirmation (固定IPアドレス振付確認) — specifically, it handles the end-to-end business flow for registering and activating fixed IP address allocation for broadband internet services (FTTH, optical network services) in a Fujitsu telecommunications system. It orchestrates a sequence of **15 major processing steps**: querying customer and service contract data, retrieving billing priority, registering application content, iterating through service contract detail records (handling both single-contract and co-change scenarios where old and new certificates coexist), registering and activating ISP service contracts, dispatching fixed IP address allocation via the `JKKFixipadCC` component, building and emitting service order data (SOD) for batch processing, and registering post-processing requests and progress. It uses a **sequential delegation pattern** — each step delegates to a specific SC (Service Component) mapper method via the `mapper` field — and implements a **reverse-iteration loop** over service contract details to handle co-change cases where the latest certification ID should be processed first. This method is called by `JKKGlobalIpAddCfmCC.execute()`, which is the screen-driven entry point.

## 2. Processing Pattern (Detailed Business Logic)

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

    step1["Step 1: Search Service Contract Agreement"]
    step2["Step 2: Search Customer Agreement"]
    step3["Step 3: Search Billing Priority List"]
    step4["Step 4: Register Application Content"]
    step5["Step 5: Search Service Contract Details"]

    step1 --> step2
    step2 --> step3
    step3 --> step4
    step4 --> step5

    step5 --> loop{"Iterate: for i from msg.length - 1 to 0"}

    loop --> nullCheck{"CAANMsg == null?"}
    nullCheck -->|"Yes" |skip["Skip (continue)"]
    skip --> loop
    nullCheck -->|"No" |process["Process contract detail"]

    process --> getStatus["Get svc_kei_ucwk_no, svc_kei_ucwk_stat"]
    getStatus --> setStatus{"uwStat != 010?"}
    setStatus -->|"true" |setReqChk["reqChkmskm = true"]
    setStatus -->|"false" |setReqChkF["reqChkmskm = false"]
    setReqChk --> step6
    setReqChkF --> step6

    step6["Step 6: Search eo Optical Network Agreement"]
    step6 --> setFixipad{"svcKeiUcwkNo equals INPUT svc_kei_ucwk_no?"}

    setFixipad -->|"Yes: current cert" |setDirect["Set WK fixed IP, WK netmask from INPUT"]
    setDirect --> checkSingle{"msg.length == 1?"}
    checkSingle -->|"Yes: not co-change" |setRule0059["WK_RULE0059_AUTO_APLY = INPUT RULE0059_AUTO_APLY"]
    checkSingle -->|"No: new cert co-change" |setRule0059Fixed["WK_RULE0059_AUTO_APLY = CD00001_0 false"]

    setRule0059 --> step7
    setRule0059Fixed --> step7
    setFixipad -->|"No: old cert co-change" |getIspId["Get ISP NINSHO_ID from EKK0171A010CBSMsg1List"]
    getIspId --> callGetKotei["call getKoteiIpAd handle param ispNinshoId"]
    callGetKotei -->setFromResult["Set WK values from getKoteiIpAd result"]
    setFromResult --> step7

    step7["Step 7: Register ISP Service Contract"]
    step7 --> step8["Step 8: Search ISP Service Contract"]

    step8 --> check020{"uwStat == 020?"}
    check020 -->|"Yes: retrieved" |call0361C010["callEKK0361C010"]
    check020 -->|"No" |step9
    call0361C010 --> step9

    step9["Step 9: ISP Contract Retrieve Completion"]
    step9 --> check030{"uwStat >= 030?"}
    check030 -->|"Yes: completed or in progress" |call0361C030["callEKK0361C030"]
    check030 -->|"No" |step10
    call0361C030 --> step10

    step10["Step 10: ISP Contract Start"]
    step10 --> check100{"uwStat >= 100?"}
    check100 -->|"Yes: in service" |call0361C040["callEKK0361C040"]
    check100 -->|"No" |fixipadCheck
    call0361C040 --> fixipadCheck

    fixipadCheck{"fixipadHradsiMap empty?"}
    fixipadCheck -->|"Yes: not co-change or new cert" |callFixipad1["callJKKFixipadCC handle param"]
    fixipadCheck -->|"No: old cert co-change" |callFixipad2["callJKKFixipadCC handle param fixipadHradsiMap"]

    callFixipad1 --> buildSod["Build SOD list entry"]
    callFixipad2 --> buildSod
    buildSod --> loop

    loop --> loopEnd["Loop end"]
    loopEnd --> buildSodList["Build SOD target data list"]
    buildSodList --> callHakkoSOD["Call JKKHakkoSODCC.hakkoSOD"]
    callHakkoSOD --> checkReqChk{"reqChkmskm == true?"}

    checkReqChk -->|"Yes" |call0021C060["callEKK0021C060 Post-processing request"]
    checkReqChk -->|"No" |step15
    call0021C060 --> step15

    step15["Step 15: Progress Registration remainder"]
    step15 --> END(["main end Return"])
```

### Status Code Branches

The method branches on the service contract detail status (`uwStat`), which determines which ISP service contract steps are executed for each contract record:

| uwStat Value | Status Meaning | Steps Executed |
|---|---|---|
| `010` | Unprocessed (処理不要) | Steps 1-7, 12-15 (no ISP search/activation) |
| `020` | Retrieved (照会済) | Steps 1-8 (+ Step 9 if uwStat >= 030, no Step 10) |
| `030` | Retrieved Completed (照会完了) | Steps 1-9 (+ Step 10 if uwStat >= 100) |
| `100+` | Service Provision In Progress (サービス提供中) | Steps 1-10 (+ Steps 12-15) |

### Fixed IP Address Assignment Branches

| Condition | Scenario | Action |
|---|---|---|
| `svcKeiUcwkNo == INPUT svc_kei_ucwk_no` | Current certificate (or non-co-change) | Use INPUT fixed IP directly |
| `msg.length == 1` | Not a co-change | Preserve INPUT `RULE0059_AUTO_APLY` setting |
| `msg.length > 1` | New cert during co-change | Fix `WK_RULE0059_AUTO_APLY = "0"` (false, fixed) |
| `svcKeiUcwkNo != INPUT svc_kei_ucwk_no` | Old cert during co-change | Query fixed IP via `getKoteiIpAd()` using ISP certification ID |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `handle` | `SessionHandle` | Database session handle providing transaction context and data source access. Carries the active database connection for executing SC mapper calls and fixed IP queries. |
| 2 | `param` | `IRequestParameterReadWrite` | Request parameter object carrying input/output data exchanged with the screen layer. Used to set SOD (Service Order Data) dispatch configuration for the `JKKHakkoSODCC` component, and carries INPUT fixed IP address, netmask, and business automation settings. |

**Instance Fields Read:**

| Field | Type | Business Description |
|-------|------|---------------------|
| `ccWorkMap` | `Map<String, Object>` | Shared work map holding intermediate results across all processing steps. Serves as the data backbone passed between mapper calls. |
| `mapper` | `JBSbatKKMapperIF` | SC mapper interface used to invoke all downstream service components (EKK/ECK prefixed methods). |
| `FUNC_CD_1` | `String` | Function code "1" — identifies the base function context for SC mapper calls. |
| `FUNC_CD_2` | `String` | Function code "2" — a secondary function code used for specific mapper calls (e.g., customer agreement search). |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `JBSbatKKMapperIF.callEKK0081A010` | EKK0081A010SC | KK_T_SVC_KEI (Service Contract) | Search service contract agreement data by service contract number |
| R | `JBSbatKKMapperIF.callECK0011A010` | ECK0011A010SC | KK_T_CST (Customer) | Search customer agreement data by SYSID |
| R | `JBSbatKKMapperIF.callEKK0321B002` | EKK0321B002SC | KK_T_SEIKY (Billing) | Search billing priority list by service contract number |
| U | `JBSbatKKMapperIF.callEKK0011D020` | ECK0011D020CBS | KK_T_CST, KK_T_CST_INFO (Customer) | Register application content — registers service contract line item |
| R | `JBSbatKKMapperIF.callEKK0161B001` | EKK0161B001SC | KK_T_SVC_KEI_UCWK (Service Contract Detail) | Search service contract details (latest and current) as list |
| R | `JBSbatKKMapperIF.callEKK0171A010` | EKK0171A010SC | KK_T_ISP_NINSHO (ISP Certification) | Search eo Optical Network agreement — obtains ISP certification ID |
| C | `JBSbatKKMapperIF.callEKK0361D010` | EKK0361D010CBS | KK_T_OP_SVC_KEI (Operation Service Contract) | Register ISP service contract — creates operation service contract entry |
| R | `JBSbatKKMapperIF.callEKK0361C010` | EKK0361C010SC | KK_T_OP_SVC_KEI (Operation Service Contract) | Search ISP service contract (retrieved status) |
| R | `JBSbatKKMapperIF.callEKK0361C030` | EKK0361C030SC | KK_T_OP_SVC_KEI (Operation Service Contract) | Search ISP service contract retrieve completion |
| R | `JBSbatKKMapperIF.callEKK0361C040` | EKK0361C040SC | KK_T_OP_SVC_KEI (Operation Service Contract) | Search ISP service contract start |
| R | `JBSbatKKMapperIF.callEKK0021C060` | EKK0021C060SC | KK_T_MSKM_DTL (Application Detail) | Search application details / post-processing request |
| U | `JBSbatKKMapperIF.callEKK1091D010` | EKK1091D010CBS | KK_T_PROGRESS (Progress) | Register progress — final progress registration (remainder) |
| R | `JKKGlobalIpAddCfmCC.getKoteiIpAd` | - | - | Query fixed IP address assignment for given ISP certification ID |
| - | `JKKGlobalIpAddCfmCC.callJKKFixipadCC` | JKKFixipadCC | - | Call fixed IP address assignment component (JKKFixipadCC) |
| - | `JKKHakkoSODCC.hakkoSOD` | JKKHakkoSODCC | SOD (Service Order Data) | Dispatch service order data via SOD component |
| - | `JBSbatKKMapperIF.callEKK0081A010` (nested) | EKK0081A010SC | KK_T_SVC_KEI | Nested call within `callEKK0361D010` to obtain last_upd_dtm |
| - | `JBSbatKKMapperIF.callEKK0321B002` (nested) | EKK0321B002SC | KK_T_SEIKY | Nested call within `callEKK0361D010` to obtain seiky_kei_no |
| - | `JBSbatKKMapperIF.callEKK0011D020` (nested) | ECK0011D020CBS | KK_T_CST_INFO | Nested call within `callEKK0361D010` to obtain mskm_dtl_no |

**How to classify:**
- **C** (Create): Methods with names like `callEKK0361D010` (D010 suffix = Insert), `callEKK0011D020` (D020 suffix = Insert)
- **R** (Read): Methods with names like `callEKK0081A010` (A010 = Select), `callEKK0161B001` (B001 = Select), `callEKK0361C010/C030/C040` (C0xx = Select)
- **U** (Update): Methods like `callEKK1091D010` (progress update/registration)

## 5. Dependency Trace

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

No screen/batch entry points found within 8 hops. Direct callers found: 1 methods.
Terminal operations from this method: `printlnEjbLog` [-], `callEKK1091D010` [-], `callEKK1091D010` [-], `callEKK1091D010` [-], `callEKK1091D010` [-], `callEKK1091D010` [-], `getRetDbInf` [R], `callEKK0021C060` [-], `callEKK0021C060` [-], `callEKK0021C060` [-], `callEKK0021C060` [-], `callEKK0021C060` [-], `getString` [R], `getString` [R], `getString` [R], `getString` [R], `getString` [R], `getRetDbInf` [R], `hakkoSOD` [-], `hakkoSOD` [-]

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | CBS: `JKKGlobalIpAddCfmCC.execute()` | `JKKGlobalIpAddCfmCC.execute()` -> `main(handle, param)` | `callEKK1091D010 [U] KK_T_PROGRESS`, `callEKK0361D010 [C] KK_T_OP_SVC_KEI`, `callEKK0011D020 [U] KK_T_CST/KK_T_CST_INFO`, `callEKK0081A010 [R] KK_T_SVC_KEI`, `callECK0011A010 [R] KK_T_CST`, `callEKK0161B001 [R] KK_T_SVC_KEI_UCWK`, `callEKK0021C060 [R] KK_T_MSKM_DTL`, `hakkoSOD [C] SOD dispatch` |

**Call Chain Explanation:**
The `execute()` method of `JKKGlobalIpAddCfmCC` acts as the screen-driven entry point. It prepares the `ccWorkMap` with INPUT parameters (fixed IP address, netmask, etc.) and then delegates to `main()` for the core business processing. `main()` is the single top-level method that executes the full fixed IP address assignment flow for global IP add confirmation.

## 6. Per-Branch Detail Blocks

**Block 1** — INITIALIZATION (L274-L296)

> Initialize processing variables and prepare the SOD list for batch service order emission.

| # | Type | Code |
|---|------|------|
| 1 | SET | `printlnEjbLog("main start")` |
| 2 | SET | `reqChkmskm = false;` // Application detail check / post-processing request determination flag |
| 3 | SET | `svcKeiUcwkNo = "";` // Service contract detail number |
| 4 | SET | `opSvcKeiNo = "";` // Option service contract number |
| 5 | SET | `opDtm = "";` // Option update date |
| 6 | SET | `opGeneAddDtm = "";` // Option generation registration date |
| 7 | SET | `sodList = new ArrayList<Map<String, String>>();` // Service order dispatch list |

**Block 2** — STEP 1: Search Service Contract Agreement (L299-L301)

> Retrieves service contract agreement data by function code and service contract number.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `this.ccWorkMap.put(RET_EKK0081A010, this.mapper.callEKK0081A010(this.FUNC_CD_2, (String) this.ccWorkMap.get(KEY_SVC_KEI_NO)))` // Step 1: Search service contract agreement |

**Block 3** — STEP 2: Search Customer Agreement (L304-L306)

> Retrieves customer agreement data by function code and SYSID.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `this.ccWorkMap.put(RET_ECK0011A010, this.mapper.callECK0011A010(this.FUNC_CD_2, (String) this.ccWorkMap.get(KEY_SYSID)))` // Step 2: Search customer agreement |

**Block 4** — STEP 3: Search Billing Priority List (L309-L311)

> Retrieves billing priority list by function code and service contract number.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `this.ccWorkMap.put(RET_EKK0321B002, this.mapper.callEKK0321B002(this.FUNC_CD_1, (String) this.ccWorkMap.get(KEY_SVC_KEI_NO)))` // Step 3: Search billing priority list |

**Block 5** — STEP 4: Register Application Content (L314-L316)

> Registers the application content by calling the customer application SC.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `this.ccWorkMap.put(RET_EKK0011D020, this.mapper.callEKK0011D020((String) this.ccWorkMap.get(KEY_FUNC_CD), this.ccWorkMap))` // Step 4: Register application content |

**Block 6** — STEP 5: Search Service Contract Details (L319-L321)

> Retrieves service contract detail list (latest and current).

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `this.ccWorkMap.put(RET_EKK0161B001, this.mapper.callEKK0161B001(this.FUNC_CD_1, (String) this.ccWorkMap.get(KEY_SVC_KEI_NO)))` // Step 5: Search service contract details |
| 2 | SET | `msg = (CAANMsg[]) this.ccWorkMap.get(RET_EKK0161B001)` // Service contract detail count |

**Block 7** — FOR LOOP: Iterate Service Contract Details (L324-L582)

> Reverse-iterate over service contract details. For co-change cases, process the new certification ID first (descending order) to ensure the new fixed IP is registered before releasing the old one.

| # | Type | Code |
|---|------|------|
| 1 | SET | `for (int i = msg.length - 1; i >= 0; i--)` // Iterate in reverse order (newest first for co-change) |

**Block 7.1** — IF: CAANMsg Null Check (L328-L330)

> Skip null entries in the contract detail array.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (caanMsg == null)` // Processing not required |
| 2 | EXEC | `continue;` // Skip this entry |

**Block 7.2** — INITIALIZATION: Local Variables (L333-L341)

> Extract business data from the current contract detail record.

| # | Type | Code |
|---|------|------|
| 1 | SET | `fixipadHradsiMap = new HashMap<String, Object>();` // Fixed IP address handling map |
| 2 | SET | `svcKeiUcwkNo = caanMsg.getString("svc_kei_ucwk_no")` // Service contract detail number |
| 3 | SET | `uwStat = caanMsg.getString("svc_kei_ucwk_stat")` // Detail status |
| 4 | SET | `svcKeiUcwkGeneAddDtm = caanMsg.getString("gene_add_dtm")` // Service contract detail generation registration datetime |
| 5 | SET | `reqChkmskm = !"010".equals(uwStat) ? true : false;` // Application detail check — true if not unprocessed |

**Block 7.3** — STEP 6: Search eo Optical Network Agreement (L344-L346)

> Retrieves the eo optical network agreement data to obtain ISP certification ID for old certificates during co-change.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `this.ccWorkMap.put(RET_EKK0171A010, this.mapper.callEKK0171A010(this.FUNC_CD_2, caanMsg.getString("svc_kei_ucwk_no")))` // Step 6: Search eo optical network agreement |

**Block 7.4** — IF/ELSE: Fixed IP Assignment (L349-L403)

> Branch on whether the current contract detail matches the INPUT service contract detail number. If it does, the fixed IP is used directly from INPUT. If not (old cert during co-change), query the fixed IP via `getKoteiIpAd()`.

| # | Type | Code |
|---|------|------|
| 1 | IF | `svcKeiUcwkNo.equals(this.ccWorkMap.get(SVC_KEI_UCWK_NO))` // INPUT service contract detail number equals current processing number (current cert) |
| 2 | SET | `this.ccWorkMap.put(WK_KOTEI_IP_AD, this.ccWorkMap.get(KOTEI_IP_AD))` // WK fixed IP ← INPUT fixed IP |
| 3 | SET | `this.ccWorkMap.put(WK_NETMASK, this.ccWorkMap.get(NETMASK))` // WK netmask ← INPUT netmask |

**Block 7.4.1** — IF/ELSE: Co-Change Detection (within current cert branch) (L357-L365)

> Determine whether this is a co-change scenario by checking if there's more than one contract detail record.

| # | Type | Code |
|---|------|------|
| 1 | IF | `msg.length == 1` // Not a co-change |
| 2 | SET | `this.ccWorkMap.put(WK_RULE0059_AUTO_APLY, this.ccWorkMap.get(RULE0059_AUTO_APLY))` // WK business automation auto-apply ← INPUT |
| 3 | ELSE | — |

**Block 7.4.2** — ELSE: New Cert During Co-Change (L361-L363)

> During co-change, the new certificate's auto-apply is fixed to false.

| # | Type | Code |
|---|------|------|
| 1 | SET | `this.ccWorkMap.put(WK_RULE0059_AUTO_APLY, JKKStrConst.CD00001_0)` // WK business automation auto-apply ← false (fixed) [CD00001_0 = "0"] |

**Block 7.5** — ELSE: Old Cert During Co-Change (L370-L397)

> When processing an old certificate during co-change, the fixed IP must be queried from the existing assignment rather than taken from INPUT.

| # | Type | Code |
|---|------|------|
| 1 | SET | `eKK0171A010CBSMSG1LIST = (CAANMsg[])this.ccWorkMap.get(RET_EKK0171A010)` // eo optical network agreement result |
| 2 | SET | `ispNinshoId = eKK0171A010CBSMSG1LIST[0].getString(EKK0171A010CBSMsg1List.ISP_NINSHO_ID)` // ISP certification ID |
| 3 | CALL | `fixipadHradsiMap = this.getKoteiIpAd(handle, param, ispNinshoId)` // Query fixed IP address by ISP certification ID |
| 4 | SET | `this.ccWorkMap.put(WK_KOTEI_IP_AD, fixipadHradsiMap.get(KKSV0022_KKSV0022OP_KKSV002201CC_fixipad_hradsi_list.FIXIPAD))` // WK fixed IP ← newly assigned |
| 5 | SET | `this.ccWorkMap.put(WK_NETMASK, fixipadHradsiMap.get(KKSV0022_KKSV0022OP_KKSV002201CC_fixipad_hradsi_list.NETMASK))` // WK netmask ← newly assigned |
| 6 | SET | `this.ccWorkMap.put(WK_RULE0059_AUTO_APLY, this.ccWorkMap.get(RULE0059_AUTO_APLY))` // WK business automation auto-apply ← INPUT |

**Block 7.6** — STEP 7: Register ISP Service Contract (L406-L417)

> Registers the ISP service contract with the service contract number, last update date, billing contract number, and application detail number.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `this.ccWorkMap.put(RET_EKK0361D010, this.mapper.callEKK0361D010(this.FUNC_CD_1, this.ccWorkMap, svcKeiUcwkNo, getRetDbInf(...last_upd_dtm), getRetDbInf(...seiky_kei_no), getRetDbInf(...mskm_dtl_no)))` // Step 7: Register ISP service contract |
| 2 | SET | `ekk0361D010 = (CAANMsg) this.ccWorkMap.get(RET_EKK0361D010)` |
| 3 | SET | `opSvcKeiNo = ekk0361D010.getString("op_svc_kei_no")` // Option service contract number |
| 4 | SET | `opDtm = ekk0361D010.getString("upd_dtm")` // Update date |
| 5 | SET | `opGeneAddDtm = ekk0361D010.getString("kk0351_gene_add_dtm")` // Generation registration date |

**Block 7.7** — IF: uwStat == "020" Step 8: Search ISP Service Contract (L420-L437)

> If the contract detail status is "020" (retrieved), search the ISP service contract details.

| # | Type | Code |
|---|------|------|
| 1 | IF | `"020".equals(uwStat)` // Retrieved status [020 = 照会済] |
| 2 | EXEC | `this.ccWorkMap.put(RET_EKK0361C010, this.mapper.callEKK0361C010(this.FUNC_CD_1, this.ccWorkMap, opSvcKeiNo, opDtm))` // Step 8: Search ISP service contract |
| 3 | SET | `opSvcKeiNo = ekk0361C010.getString("op_svc_kei_no")` // Update from result |
| 4 | SET | `opDtm = ekk0361C010.getString("upd_dtm")` // Update from result |
| 5 | SET | `opGeneAddDtm = ekk0361C010.getString("kk0351_gene_add_dtm")` // Update from result |

**Block 7.8** — IF: uwStat >= "030" Step 9: ISP Contract Retrieve Completion (L440-L457)

> If status is 030 or higher (retrieved completed or in progress), retrieve completion processing.

| # | Type | Code |
|---|------|------|
| 1 | IF | `"030".compareTo(uwStat) <= 0` // Retrieved completed or in progress [030 = 照会完了] |
| 2 | EXEC | `this.ccWorkMap.put(RET_EKK0361C030, this.mapper.callEKK0361C030(this.FUNC_CD_1, this.ccWorkMap, opSvcKeiNo, opDtm))` // Step 9: ISP contract retrieve completion |
| 3 | SET | `opSvcKeiNo = ekk0361C030.getString("op_svc_kei_no")` // Update from result |
| 4 | SET | `opDtm = ekk0361C030.getString("upd_dtm")` // Update from result |
| 5 | SET | `opGeneAddDtm = ekk0361C030.getString("kk0351_gene_add_dtm")` // Update from result |

**Block 7.9** — IF: uwStat >= "100" Step 10: ISP Contract Start (L460-L477)

> If status is 100 or higher (service provision in progress), start the ISP service.

| # | Type | Code |
|---|------|------|
| 1 | IF | `"100".compareTo(uwStat) <= 0` // Service provision in progress [100 = サービス提供中] |
| 2 | EXEC | `this.ccWorkMap.put(RET_EKK0361C040, this.mapper.callEKK0361C040(this.FUNC_CD_1, this.ccWorkMap, opSvcKeiNo, opDtm))` // Step 10: ISP contract start |
| 3 | SET | `opSvcKeiNo = ekk0361C040.getString("op_svc_kei_no")` // Update from result |
| 4 | SET | `opDtm = ekk0361C040.getString("upd_dtm")` // Update from result |
| 5 | SET | `opGeneAddDtm = ekk0361C040.getString("kk0351_gene_add_dtm")` // Update from result |

**Block 7.10** — IF/ELSE: Fixed IP Assignment Component (L480-L501)

> Call the `JKKFixipadCC` fixed IP address assignment component. If processing an old cert during co-change, pass the pre-queried fixed IP. Otherwise, let the component assign a new fixed IP.

| # | Type | Code |
|---|------|------|
| 1 | IF | `fixipadHradsiMap.isEmpty()` // Not co-change old cert: not co-change or new cert |
| 2 | CALL | `callJKKFixipadCC(handle, param)` // Fixed IP assignment component — assign new |
| 3 | ELSE | — // Co-change old cert |

**Block 7.10.1** — ELSE: Co-Change Old Cert Fixed IP (L495-L497)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `callJKKFixipadCC(handle, param, fixipadHradsiMap)` // Fixed IP assignment with pre-queried fixed IP map |

**Block 7.11** — SOD List Build (L504-L519)

> Build a service order dispatch (SOD) entry for this contract detail. Each entry captures the option service contract number, option generation datetime, service contract detail number, and service contract detail generation datetime.

| # | Type | Code |
|---|------|------|
| 1 | SET | `sodMap = new HashMap<String, String>()` |
| 2 | SET | `sodMap.put("op_svc_kei_no", opSvcKeiNo)` // Option service contract number |
| 3 | SET | `sodMap.put("op_svc_kei_gene_add_dtm", opGeneAddDtm)` // Option generation registration datetime |
| 4 | SET | `sodMap.put("svc_kei_ucwk_no", svcKeiUcwkNo)` // Service contract detail number |
| 5 | SET | `sodMap.put("svc_kei_ucwk_gene_add_dtm", svcKeiUcwkGeneAddDtm)` // Service contract detail generation registration datetime |
| 6 | EXEC | `sodList.add(sodMap)` |

**Block 8** — SOD List Dispatch (L525-L560)

> After iterating all contract details, build the final SOD target data structure and dispatch it to `JKKHakkoSODCC` for batch service order emission.

| # | Type | Code |
|---|------|------|
| 1 | SET | `trgtList = new ArrayList<Map<String, Object>>()` |
| 2 | SET | `for (Map<String, String> sodMap : sodList)` // Iterate all collected SOD entries |

**Block 8.1** — FOR NESTED: Build SOD Target Map (L528-L549)

> For each SOD entry, assemble the SOD basic info, service contract info, option service contract info, and service contract detail info maps, then combine them into a target map.

| # | Type | Code |
|---|------|------|
| 1 | SET | `sod_kihon_info_Map = new HashMap<String, Object>()` // SOD basic info |
| 2 | SET | `svc_kei_info_Map = new HashMap<String, Object>()` // Service contract info |
| 3 | SET | `opsukei_info_Map = new HashMap<String, Object>()` // Option service contract info |
| 4 | SET | `svc_kei_ucwk_info_Map = new HashMap<String, Object>()` // Service contract detail info |
| 5 | SET | `trgtMap = new HashMap<String, Object>()` |
| 6 | SET | `sod_kihon_info_Map.put(JKKHakkoSODConstCC.INFO_IDO_DIV, JKKHakkoSODConstCC.IDO_DIV_OPSETTE)` // SOD basic info — movement division (Option Settings) [IDO_DIV_OPSETTE = "00031"] |
| 7 | SET | `svc_kei_info_Map.put(JKKHakkoSODConstCC.INFO_SVC_KEI_NO, (String)this.ccWorkMap.get(KEY_SVC_KEI_NO))` // Service contract info — service contract number |
| 8 | SET | `opsukei_info_Map.put(JKKHakkoSODConstCC.INFO_CHAF_OPSVKEI_NO, sodMap.get("op_svc_kei_no"))` // Option service contract info — option service contract number |
| 9 | SET | `opsukei_info_Map.put(JKKHakkoSODConstCC.INFO_CHAF_OPSVKEI_GENE_ADD_DTM, sodMap.get("op_svc_kei_gene_add_dtm"))` // Option service contract info — generation registration datetime |
| 10 | SET | `svc_kei_ucwk_info_Map.put(JKKHakkoSODConstCC.INFO_SVC_KEI_UCWK_NO, sodMap.get("svc_kei_ucwk_no"))` // Service contract detail info — service contract detail number |
| 11 | SET | `svc_kei_ucwk_info_Map.put(JKKHakkoSODConstCC.INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM, sodMap.get("svc_kei_ucwk_gene_add_dtm"))` // Service contract detail info — post-change generation registration date |
| 12 | SET | `trgtMap.put(JKKHakkoSODConstCC.SOD_KIHON_INFO, sod_kihon_info_Map)` |
| 13 | SET | `trgtMap.put(JKKHakkoSODConstCC.SVC_KEI_INFO, svc_kei_info_Map)` |
| 14 | SET | `trgtMap.put(JKKHakkoSODConstCC.OPSVKEI_INFO, opsvkei_info_Map)` |
| 15 | SET | `trgtMap.put(JKKHakkoSODConstCC.SVC_KEI_UCWK_INFO, svc_kei_ucwk_info_Map)` |
| 16 | EXEC | `trgtList.add(trgtMap)` |

**Block 8.2** — SOD Dispatch Configuration (L552-L556)

> Configure and dispatch the SOD list to the `JKKHakkoSODCC` component via the request parameter.

| # | Type | Code |
|---|------|------|
| 1 | SET | `sodccMap = new HashMap<String, Object>()` |
| 2 | SET | `sodccMap.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1)` // Function code for SOD component |
| 3 | SET | `sodccMap.put(JKKHakkoSODConstCC.TRGT_DATA_LIST, trgtList)` // Target data list |
| 4 | EXEC | `param.setData("JKKHakkoSODCC", sodccMap)` |
| 5 | CALL | `new JKKHakkoSODCC().hakkoSOD(handle, param, "JKKHakkoSODCC")` // Dispatch service order data |

**Block 9** — IF: Post-Processing Request (L563-L571)

> If the application detail is not in "unprocessed" status (010), request post-processing for the application details.

| # | Type | Code |
|---|------|------|
| 1 | IF | `reqChkmskm` // Unprocessed details exist |
| 2 | EXEC | `this.ccWorkMap.put(RET_EKK0021C060, this.mapper.callEKK0021C060(this.FUNC_CD_1, this.ccWorkMap, getRetDbInf(...mskm_dtl_no), ((CAANMsg) this.ccWorkMap.get(RET_EKK0011D020)).getString("upd_dtm")))` // Post-processing request |

**Block 10** — STEP 15: Progress Registration (L578-L584)

> Register the overall progress as the final step — records the application detail number, service contract detail number, and option service contract number.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `this.ccWorkMap.put(RET_EKK1091D010, this.mapper.callEKK1091D010(this.FUNC_CD_1, this.ccWorkMap, getRetDbInf(...mskm_dtl_no), svcKeiUcwkNo, opSvcKeiNo))` // Step 15: Progress registration (remainder) |
| 2 | SET | `printlnEjbLog("main end")` |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `svc_kei_ucwk_no` | Field | Service contract detail number — internal tracking ID for a specific version of a service contract line item |
| `svc_kei_ucwk_stat` | Field | Service contract detail status — indicates processing state of the contract detail |
| `svc_kei_ucwk_no` | Field | Service contract detail number — unique identifier for a service contract line item record |
| `uwStat` | Variable | Work area status — local variable holding `svc_kei_ucwk_stat`, determines which processing steps to execute |
| `op_svc_kei_no` | Field | Option service contract number — number assigned to an option service contract derived from a main service contract |
| `op_dtm` | Field | Option update date — date when the option service contract was last updated |
| `op_gene_add_dtm` | Field | Option generation registration datetime — timestamp of the option service contract record creation |
| `gene_add_dtm` | Field | Generation registration datetime — timestamp when the service contract detail record was created |
| `kotei_ip_ad` | Field | Fixed IP address — a static IP address assigned to the customer's broadband connection |
| `netmask` | Field | Network mask — network subnet mask for the fixed IP address assignment |
| `rule0059_auto_aply` | Field | Business automation auto-apply flag — controls whether automation rule 0059 is applied |
| `isp_ninsho_id` | Field | ISP certification ID — unique identifier for the ISP provider's certification within the eo optical network agreement |
| `reqChkmskm` | Variable | Request check flag — indicates whether there are application details requiring post-processing |
| `sodList` | Variable | Service Order Dispatch list — accumulator for SOD entries across all contract details in the loop |
| SOD | Acronym | Service Order Data — service fulfillment entity used for downstream order dispatch |
| FTTH | Business term | Fiber To The Home — fiber-optic broadband internet service |
| eo Optical Network | Business term | Fujitsu's optical network service platform (エヌオー光) |
| ISP | Acronym | Internet Service Provider — the entity providing broadband internet connectivity |
| JOKEN | Acronym | Modification/Change — abbreviation for service contract change/modification operations |
| INFO | Acronym | Information — used in field names for information-type data fields |
| WK_ | Prefix | Work area — prefix for work variables stored in the `ccWorkMap` shared work area |
| INPUT. | Prefix | Input — prefix for values passed from the screen layer as request parameters |
| 照会済 (shoukai-zumi) | Japanese term | Retrieved / Inquiry completed — status code `020`, meaning the contract detail has been retrieved |
| 照会完了 (shoukai-kanryou) | Japanese term | Inquiry completed — status code `030`, meaning the contract detail inquiry is fully complete |
| サービス提供中 (saabisu teikyou-chuu) | Japanese term | Service provision in progress — status code `100`, meaning the service is actively being provided |
| 処理不要 (shori-fuyou) | Japanese term | Processing not required — status code `010`, meaning the contract detail needs no further processing |
| 固定IPアドレス振付 (kotei IP adresu furitsuke) | Japanese term | Fixed IP address assignment — the business operation of allocating a static IP address to a broadband service |
| コーチェ变更 (ko-change henkou) | Japanese term | Co-change — a service contract change operation where both old and new certification IDs exist simultaneously |
| 申込内容 (mou-shin naiyo) | Japanese term | Application content — the details of the service registration/change application |
| 課金先一覧 (kakin-saki ichiran) | Japanese term | Billing priority list — list of billing entities with their priority for charge allocation |
| 固定IPアドレス振付CC | Japanese term | Fixed IP Address Assignment CC — the `JKKFixipadCC` component responsible for IP allocation |
| FUNC_CD_1 | Constant | Function code "1" — base function code used for most SC mapper calls in this method |
| FUNC_CD_2 | Constant | Function code "2" — secondary function code used for specific SC mapper calls |
| JKKHakkoSODConstCC.IDO_DIV_OPSETTE | Constant | Movement division code for option settings — value `"00031"`, indicates this SOD is for an option setup change |
| JKKStrConst.CD00001_0 | Constant | Negative/false indicator — value `"0"`, used to fix the business automation auto-apply flag to false during co-change |