# Business Logic - JKKAdchgHakkoSODCC.editInMsg_EKK1551D010CBS() [327 LOC]

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

## 1. Role

### JKKAdchgHakkoSODCC.editInMsg_EKK1551D010CBS()

This method performs the **upward mapping** (upper-level data mapping) for the "Order Information Creation Work Registration" business process in the K-Opticom telecom order fulfillment system. Specifically, it maps business data from the request parameter into a `CAANMsg` template that serves as the input message for Service Component `EKK1551D010CBS` (Order Information Creation Work Registration CBS).

The method implements a **data transformer / builder design pattern**. It constructs an input message by pulling ~30+ fields from a work registration HashMap (`HakkoSODCCWORK`) stored within the request parameter, enriching it with system-level metadata (transaction ID, user session info, operator details), and wrapping it into a template array for downstream Service Component invocation.

It acts as the **inbound message preparation layer** in the CBS invocation chain. The mapped `paramMap` (containing the template array) is consumed by `executeOdrInfoSakseiWkAdd`, which then passes it to `ServiceComponentRequestInvoker.run()` to execute the actual CBS. The method handles null/empty safety for every field, calling `setNull()` on the template when work data is absent, ensuring the CBS receives well-formed input regardless of partial data availability.

This is a **private shared utility** called by `executeOdrInfoSakseiWkAdd` and duplicated across similar classes (`JKKHakkoSODCC`, `JKKKikiDslAddCC`, `JKKAdchgCancelHakkoSODCC`), making it a core shared data-mapping building block for order creation workflows.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["editInMsg_EKK1551D010CBS param"])
    STEP1["Set template_id = \"EKK1551D010\""]
    STEP2["Create paramMap HashMap"]
    STEP3["Set SC Import Common Data: telegramID, usecaseID, operationID, callType"]
    STEP4["Set User Data: client hostname, IP address, screen ID, operator ID"]
    STEP5["Create CAANMsg template from EKK1551D010CBSMsg"]
    STEP6["Set template ID and func_code = \"1\""]
    STEP7["Call editBasicCmn param, template"]
    STEP8["Get inMap from param.getData HAKKOSODCCWORKMAP"]
    STEP9{inMap null or
odr_hakko_joken_no empty}
    STEP9B["setNull ODR_HAKKO_JOKEN_NO"]
    STEP9C["set ODR_HAKKO_JOKEN_NO"]
    STEP10{inMap null or
odr_naiyo_cd empty}
    STEP10B["setNull ODR_NAIYO_CD"]
    STEP10C["set ODR_NAIYO_CD"]
    STEP11{inMap null or
svc_kei_no empty}
    STEP11B["setNull SVC_KEI_NO"]
    STEP11C["set SVC_KEI_NO"]
    STEP12{inMap null or
svkei_gadtm empty}
    STEP12B["setNull SVKEI_GADTM"]
    STEP12C["set SVKEI_GADTM"]
    STEP13{inMap null or
svc_kei_ucwk_no empty}
    STEP13B["setNull SVC_KEI_UCWK_NO"]
    STEP13C["set SVC_KEI_UCWK_NO"]
    STEP14{inMap null or
svkeiuw_gadtm empty}
    STEP14B["setNull SVKEIUW_GADTM"]
    STEP14C["set SVKEIUW_GADTM"]
    STEP15{inMap null or
kktk_svc_kei_no empty}
    STEP15B["setNull KKTK_SVC_KEI_NO"]
    STEP15C["set KKTK_SVC_KEI_NO"]
    STEP16{inMap null or
kktsvkei_gadtm empty}
    STEP16B["setNull KKTSVKEI_GADTM"]
    STEP16C["set KKTSVKEI_GADTM"]
    STEP17{inMap null or
op_svc_kei_no empty}
    STEP17B["setNull OP_SVC_KEI_NO"]
    STEP17C["set OP_SVC_KEI_NO"]
    STEP18{inMap null or
opsvkei_gadtm empty}
    STEP18B["setNull OPSVKEI_GADTM"]
    STEP18C["set OPSVKEI_GADTM"]
    STEP19{inMap null or
sbop_svc_kei_no empty}
    STEP19B["setNull SBOP_SVC_KEI_NO"]
    STEP19C["set SBOP_SVC_KEI_NO"]
    STEP20{inMap null or
sbopsvkei_gadtm empty}
    STEP20B["setNull SBOPSVKEI_GADTM"]
    STEP20C["set SBOPSVKEI_GADTM"]
    STEP21{inMap null or
seiopsvc_kei_no empty}
    STEP21B["setNull SEIOPSVC_KEI_NO"]
    STEP21C["set SEIOPSVC_KEI_NO"]
    STEP22{inMap null or
seiopsvkei_gadtm empty}
    STEP22B["setNull SEIOPSVKEI_GADTM"]
    STEP22C["set SEIOPSVKEI_GADTM"]
    STEP23{inMap null or
huka_inf_kei_no empty}
    STEP23B["setNull HUKA_INF_KEI_NO"]
    STEP23C["set HUKA_INF_KEI_NO"]
    STEP24{inMap null or
huka_inf_kei_gadtm empty}
    STEP24B["setNull HUKA_INF_KEI_GADTM"]
    STEP24C["set HUKA_INF_KEI_GADTM"]
    STEP25{inMap null or
chbf_svkei_gadtm empty}
    STEP25B["setNull CHBF_SVKEI_GADTM"]
    STEP25C["set CHBF_SVKEI_GADTM"]
    STEP26{inMap null or
chbf_svkeiuw_gadtm empty}
    STEP26B["setNull CHBF_SVKEIUW_GADTM"]
    STEP26C["set CHBF_SVKEIUW_GADTM"]
    STEP27{inMap null or
chbf_kktsvkei_gadtm empty}
    STEP27B["setNull CHBF_KKTSVKEI_GADTM"]
    STEP27C["set CHBF_KKTSVKEI_GADTM"]
    STEP28{inMap null or
chbf_opsvkei_gadtm empty}
    STEP28B["setNull CHBF_OPSVKEI_GADTM"]
    STEP28C["set CHBF_OPSVKEI_GADTM"]
    STEP29{inMap null or
chbf_sbopsvkei_gadtm empty}
    STEP29B["setNull CHBF_SBOPSVKEI_GADTM"]
    STEP29C["set CHBF_SBOPSVKEI_GADTM"]
    STEP30{inMap null or
chbf_seiopsvkei_gadtm empty}
    STEP30B["setNull CHBF_SEIOPSVKEI_GADTM"]
    STEP30C["set CHBF_SEIOPSVKEI_GADTM"]
    STEP31{inMap null or
kkop_svc_kei_no_1 empty}
    STEP31B["setNull KKOP_SVC_KEI_NO_1"]
    STEP31C["set KKOP_SVC_KEI_NO_1"]
    STEP32{inMap null or
kko_svkei_gadtm_1 empty}
    STEP32B["setNull KKOSVKEI_GADTM_1"]
    STEP32C["set KKOSVKEI_GADTM_1"]
    STEP33{inMap null or
kkop_svc_kei_no_2 empty}
    STEP33B["setNull KKOP_SVC_KEI_NO_2"]
    STEP33C["set KKOP_SVC_KEI_NO_2"]
    STEP34{inMap null or
kko_svkei_gadtm_2 empty}
    STEP34B["setNull KKOSVKEI_GADTM_2"]
    STEP34C["set KKOSVKEI_GADTM_2"]
    STEP35{inMap null or
telno empty}
    STEP35B["setNull TELNO"]
    STEP35C["set TELNO"]
    STEP36["Wrap template into CAANMsg array"]
    STEP37["Set TEMPLATE_LIST_KEY in paramMap"]
    STEP38["Return paramMap"]

    START --> STEP1 --> STEP2 --> STEP3 --> STEP4 --> STEP5 --> STEP6 --> STEP7 --> STEP8 --> STEP9
    STEP9 -->|True| STEP9B
    STEP9 -->|False| STEP9C
    STEP9B --> STEP10
    STEP9C --> STEP10
    STEP10 -->|True| STEP10B
    STEP10 -->|False| STEP10C
    STEP10B --> STEP11
    STEP10C --> STEP11
    STEP11 -->|True| STEP11B
    STEP11 -->|False| STEP11C
    STEP11B --> STEP12
    STEP11C --> STEP12
    STEP12 -->|True| STEP12B
    STEP12 -->|False| STEP12C
    STEP12B --> STEP13
    STEP12C --> STEP13
    STEP13 -->|True| STEP13B
    STEP13 -->|False| STEP13C
    STEP13B --> STEP14
    STEP13C --> STEP14
    STEP14 -->|True| STEP14B
    STEP14 -->|False| STEP14C
    STEP14B --> STEP15
    STEP14C --> STEP15
    STEP15 -->|True| STEP15B
    STEP15 -->|False| STEP15C
    STEP15B --> STEP16
    STEP15C --> STEP16
    STEP16 -->|True| STEP16B
    STEP16 -->|False| STEP16C
    STEP16B --> STEP17
    STEP16C --> STEP17
    STEP17 -->|True| STEP17B
    STEP17 -->|False| STEP17C
    STEP17B --> STEP18
    STEP17C --> STEP18
    STEP18 -->|True| STEP18B
    STEP18 -->|False| STEP18C
    STEP18B --> STEP19
    STEP18C --> STEP19
    STEP19 -->|True| STEP19B
    STEP19 -->|False| STEP19C
    STEP19B --> STEP20
    STEP19C --> STEP20
    STEP20 -->|True| STEP20B
    STEP20 -->|False| STEP20C
    STEP20B --> STEP21
    STEP20C --> STEP21
    STEP21 -->|True| STEP21B
    STEP21 -->|False| STEP21C
    STEP21B --> STEP22
    STEP21C --> STEP22
    STEP22 -->|True| STEP22B
    STEP22 -->|False| STEP22C
    STEP22B --> STEP23
    STEP23C --> STEP23
    STEP23 -->|True| STEP23B
    STEP23 -->|False| STEP23C
    STEP23B --> STEP24
    STEP23C --> STEP24
    STEP24 -->|True| STEP24B
    STEP24 -->|False| STEP24C
    STEP24B --> STEP25
    STEP24C --> STEP25
    STEP25 -->|True| STEP25B
    STEP25 -->|False| STEP25C
    STEP25B --> STEP26
    STEP25C --> STEP26
    STEP26 -->|True| STEP26B
    STEP26 -->|False| STEP26C
    STEP26B --> STEP27
    STEP26C --> STEP27
    STEP27 -->|True| STEP27B
    STEP27 -->|False| STEP27C
    STEP27B --> STEP28
    STEP27C --> STEP28
    STEP28 -->|True| STEP28B
    STEP28 -->|False| STEP28C
    STEP28B --> STEP29
    STEP28C --> STEP29
    STEP29 -->|True| STEP29B
    STEP29 -->|False| STEP29C
    STEP29B --> STEP30
    STEP29C --> STEP30
    STEP30 -->|True| STEP30B
    STEP30 -->|False| STEP30C
    STEP30B --> STEP31
    STEP30C --> STEP31
    STEP31 -->|True| STEP31B
    STEP31 -->|False| STEP31C
    STEP31B --> STEP32
    STEP31C --> STEP32
    STEP32 -->|True| STEP32B
    STEP32 -->|False| STEP32C
    STEP32B --> STEP33
    STEP32C --> STEP33
    STEP33 -->|True| STEP33B
    STEP33 -->|False| STEP33C
    STEP33B --> STEP34
    STEP33C --> STEP34
    STEP34 -->|True| STEP34B
    STEP34 -->|False| STEP34C
    STEP34B --> STEP35
    STEP34C --> STEP35
    STEP35 -->|True| STEP35B
    STEP35 -->|False| STEP35C
    STEP35B --> STEP36
    STEP35C --> STEP36
    STEP36 --> STEP37 --> STEP38 --> END(["Return paramMap"])
```

**Processing summary:** The method follows a linear, sequential flow with 30+ identical null-safety mapping patterns. Each field from the work registration HashMap is checked for null/empty, and either the corresponding template field is set to null or populated with the HashMap value. There are no branching business logic paths (no switch/case, no type-based routing) — the method is a pure data mapper.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `param` | `IRequestParameterReadOnly` | The business data acquisition interface containing the order creation work registration data. It carries the `HakkoSODCCWORK` HashMap (accessed via `JKKHakkoSODConstCC.HAKKOSODCCWORKMAP`), control map data (hostname, IP, screen ID, operator ID), and system metadata (telegram ID, usecase ID, operation ID, call type). |

**Instance fields / external state read:**
- None directly — all state is extracted from the `param` argument.

**Key data source:**
- `param.getData("HakkoSODCCWORK")` — Returns a `HashMap` containing ~30+ order/work registration fields populated by the upstream screen or business process. This is the primary input data source for all template field mappings.

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| U | `editBasicCmn` | EKK1551D010CBS | - | Calls `editBasicCmn` in `JKKAdchgHakkoSODCC` to set common basic fields (timestamp, operator, etc.) on the template |
| R | `param.getTelegramID` | - | - | Reads transaction ID from request parameter |
| R | `param.getUsecaseID` | - | - | Reads use case ID from request parameter |
| R | `param.getOperationID` | - | - | Reads operation ID from request parameter |
| R | `param.getCallType` | - | - | Reads service call type from request parameter |
| R | `param.getControlMapData(REQ_HOSTNAME)` | - | - | Reads client hostname from control map |
| R | `param.getControlMapData(REQ_HOSTIP)` | - | - | Reads client IP address from control map |
| R | `param.getControlMapData(REQ_VIEWID)` | - | - | Reads originating screen ID from control map |
| R | `param.getControlMapData(OPERATOR_ID)` | - | - | Reads operator ID from control map |
| R | `param.getData(HAKKOSODCCWORKMAP)` | - | - | Reads order creation work registration HashMap |

This method is a **pure data mapping / transformation** method. It does not directly invoke Service Components, execute database queries, or perform CRUD operations itself. Instead, it constructs and enriches a `CAANMsg` template with all required fields, which is then passed downstream to `ServiceComponentRequestInvoker.run()` by the caller (`executeOdrInfoSakseiWkAdd`).

### Service Component invoked by caller:

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| C | `EKK1551D010CBS` | EKK1551D010CBS | KK_T_ODR_HAKKO_JOKEN, KK_T_SVC_KEI, KK_T_SVC_KEI_UW, KK_T_KKTK_SVC_KEI, KK_T_OP_SVC_KEI, KK_T_SBOP_SVC_KEI, KK_T_SEIOP_SVC_KEI, KK_T_HUKA_INF_KEI, KK_T_KKOP_SVC_KEI (order creation work registration) | The CBS registered via the template array in `paramMap` performs order information creation work registration — creating/updating order release conditions, service contract lines, options, sub-options, billing options, additional info, and machine operation contracts in the telecom order management database |

## 5. Dependency Trace

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

No screen/batch entry points found within 8 hops. Direct callers found: 4 methods.

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | `JKKAdchgHakkoSODCC.executeOdrInfoSakseiWkAdd` | `executeOdrInfoSakseiWkAdd(handle, param)` -> `editInMsg_EKK1551D010CBS(param)` -> `editBasicCmn(param, template)` | `EKK1551D010CBS [C] KK_T_ODR_HAKKO_JOKEN, KK_T_SVC_KEI` |
| 2 | `JKKHakkoSODCC.executeOdrInfoSakseiWkAdd` | `executeOdrInfoSakseiWkAdd(handle, param)` -> `editInMsg_EKK1551D010CBS(param)` -> `editBasicCmn(param, template)` | `EKK1551D010CBS [C] KK_T_ODR_HAKKO_JOKEN, KK_T_SVC_KEI` |
| 3 | `JKKKikiDslAddCC` (DSL add) | `JKKKikiDslAddCC` method (L773) -> `editInMsg_EKK1551D010CBS(param)` -> `editBasicCmn(param, template)` | `EKK1551D010CBS [C] KK_T_ODR_HAKKO_JOKEN, KK_T_SVC_KEI` |
| 4 | `JKKKikiDslAddCC` (DSL add, 2nd) | `JKKKikiDslAddCC` method (L805) -> `editInMsg_EKK1551D010CBS(param)` -> `editBasicCmn(param, template)` | `EKK1551D010CBS [C] KK_T_ODR_HAKKO_JOKEN, KK_T_SVC_KEI` |
| 5 | `JKKAdchgCancelHakkoSODCC.executeOdrInfoSakseiWkAdd` | `executeOdrInfoSakseiWkAdd(handle, param)` -> `editInMsg_EKK1551D010CBS(param)` -> `editBasicCmn(param, template)` | `EKK1551D010CBS [C] KK_T_ODR_HAKKO_JOKEN, KK_T_SVC_KEI` |

**Call chain detail:**
- The primary caller is `executeOdrInfoSakseiWkAdd` (Order Information Creation Work Registration execution processing) within `JKKAdchgHakkoSODCC`.
- `executeOdrInfoSakseiWkAdd` calls `editInMsg_EKK1551D010CBS(param)` to prepare the inbound message, then uses `ServiceComponentRequestInvoker` to invoke `EKK1551D010CBS`, and finally calls `editResultRP_EKK1551D010CBS` for downward mapping (result parsing).
- The same method is duplicated in `JKKHakkoSODCC`, `JKKKikiDslAddCC`, and `JKKAdchgCancelHakkoSODCC`, indicating a shared pattern across order creation, DSL add, and cancellation-hakko workflows.
- Terminal operations from this method flow through `editBasicCmn`, which performs `setNull` calls on common template fields.

## 6. Per-Branch Detail Blocks

### Block 1 — Initialization (L14623)

> Sets up the template ID, creates the parameter map, and populates system-level common data.

| # | Type | Code |
|---|------|------|
| 1 | SET | `template_id = "EKK1551D010"` // Service Component template identifier |
| 2 | SET | `paramMap = new HashMap<String, Object>()` // Container for template list |
| 3 | SET | `paramMap.put(TRANZACTION_ID_KEY, param.getTelegramID())` // Reads telegram/transaction ID from request |
| 4 | SET | `paramMap.put(USECASE_ID_KEY, param.getUsecaseID())` // Reads usecase ID from request |
| 5 | SET | `paramMap.put(OPERATION_ID_KEY, param.getOperationID())` // Reads operation ID from request |
| 6 | SET | `paramMap.put(CALL_TYPE_KEY, param.getCallType())` // Reads service call type classification |
| 7 | SET | `paramMap.put(CLIENT_HOST_NAME_KEY, param.getControlMapData(REQ_HOSTNAME))` // Client hostname from control map |
| 8 | SET | `paramMap.put(CLIENT_IP_ADDRESS_KEY, param.getControlMapData(REQ_HOSTIP))` // Client IP address |
| 9 | SET | `paramMap.put(INVOKE_GAMEN_ID_KEY, param.getControlMapData(REQ_VIEWID))` // Calling screen ID |
| 10 | SET | `paramMap.put(OPERATOR_ID_KEY, param.getControlMapData(OPERATOR_ID))` // Operator login ID |

### Block 2 — CAANMsg Template Creation (L14662)

> Creates the `CAANMsg` template using the `EKK1551D010CBSMsg` schema and sets the initial template ID and function code.

| # | Type | Code |
|---|------|------|
| 1 | SET | `template = new CAANMsg(EKK1551D010CBSMsg.class.getName())` // CAANMsg schema: EKK1551D010CBSMsg |
| 2 | SET | `template.set(TEMPLATEID, template_id)` // Sets template ID to "EKK1551D010" |
| 3 | SET | `template.set(FUNC_CODE, JPCModelConstant.FUNC_CD_1)` // FUNC_CD_1 = "1" (Check/Register) |
| 4 | CALL | `editBasicCmn(param, template)` // Sets common basic template fields |

### Block 3 — Work Registration Data Extraction (L14670)

> Retrieves the order creation work registration HashMap from the request parameter. This is the primary business data source.

| # | Type | Code |
|---|------|------|
| 1 | SET | `inMap = (HashMap)param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)` // HAKKOSODCCWORKMAP = "HakkoSODCCWORK" — the order creation work registration data |

### Block 4 — ODR_HAKKO_JOKEN_NO Mapping (L14673-L14682)

> Maps the order release condition number. Checks for null/empty safety.

**Block 4** — IF `inMap == null || inMap.get("odr_hakko_joken_no") == null || "".equals(inMap.get("odr_hakko_joken_no"))` (L14673)

> Work data is null/empty — set template field to null.

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(ODR_HAKKO_JOKEN_NO)` // Order release condition number set to null |

**Block 4.1** — ELSE (L14680)

> Work data exists — populate template field.

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(ODR_HAKKO_JOKEN_NO, (String)inMap.get("odr_hakko_joken_no"))` // Order release condition number |

### Block 5 — ODR_NAIYO_CD Mapping (L14685-L14694)

> Maps the order content code. This code classifies the type of order (e.g., FTTH registration, mail change, etc.) and determines downstream processing branches in the CBS.

**Block 5** — IF `inMap == null || inMap.get("odr_naiyo_cd") == null || "".equals(inMap.get("odr_naiyo_cd"))` (L14685)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(ODR_NAIYO_CD)` // Order content code set to null |

**Block 5.1** — ELSE (L14692)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(ODR_NAIYO_CD, (String)inMap.get("odr_naiyo_cd"))` // Order content code |

### Block 6 — SVC_KEI_NO Mapping (L14697-L14706)

> Maps the service contract number.

**Block 6** — IF `inMap == null || inMap.get("svc_kei_no") == null || "".equals(inMap.get("svc_kei_no"))` (L14697)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(SVC_KEI_NO)` // Service contract number set to null |

**Block 6.1** — ELSE (L14704)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(SVC_KEI_NO, (String)inMap.get("svc_kei_no"))` // Service contract number |

### Block 7 — SVKEI_GADTM Mapping (L14709-L14718)

> Maps the service contract generation registration datetime.

**Block 7** — IF `inMap == null || inMap.get("svkei_gadtm") == null || "".equals(inMap.get("svkei_gadtm"))` (L14709)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(SVKEI_GADTM)` // Service contract registration datetime set to null |

**Block 7.1** — ELSE (L14716)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(SVKEI_GADTM, (String)inMap.get("svkei_gadtm"))` // Service contract registration datetime |

### Block 8 — SVC_KEI_UCWK_NO Mapping (L14721-L14730)

> Maps the service contract detail work number.

**Block 8** — IF `inMap == null || inMap.get("svc_kei_ucwk_no") == null || "".equals(inMap.get("svc_kei_ucwk_no"))` (L14721)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(SVC_KEI_UCWK_NO)` // Service contract detail work number set to null |

**Block 8.1** — ELSE (L14728)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(SVC_KEI_UCWK_NO, (String)inMap.get("svc_kei_ucwk_no"))` // Service contract detail work number |

### Block 9 — SVKEIUW_GADTM Mapping (L14733-L14742)

> Maps the service contract detail registration datetime.

**Block 9** — IF `inMap == null || inMap.get("svkeiuw_gadtm") == null || "".equals(inMap.get("svkeiuw_gadtm"))` (L14733)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(SVKEIUW_GADTM)` // Service contract detail registration datetime set to null |

**Block 9.1** — ELSE (L14740)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(SVKEIUW_GADTM, (String)inMap.get("svkeiuw_gadtm"))` // Service contract detail registration datetime |

### Block 10 — KKTK_SVC_KEI_NO Mapping (L14745-L14754)

> Maps the machine provision service contract number (for machine/provision services).

**Block 10** — IF `inMap == null || inMap.get("kktk_svc_kei_no") == null || "".equals(inMap.get("kktk_svc_kei_no"))` (L14745)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(KKTK_SVC_KEI_NO)` // Machine provision service contract number set to null |

**Block 10.1** — ELSE (L14752)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(KKTK_SVC_KEI_NO, (String)inMap.get("kktk_svc_kei_no"))` // Machine provision service contract number |

### Block 11 — KKTSVKEI_GADTM Mapping (L14757-L14766)

> Maps the machine provision service contract generation registration datetime.

**Block 11** — IF `inMap == null || inMap.get("kktsvkei_gadtm") == null || "".equals(inMap.get("kktsvkei_gadtm"))` (L14757)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(KKTSVKEI_GADTM)` // Machine provision service contract registration datetime set to null |

**Block 11.1** — ELSE (L14764)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(KKTSVKEI_GADTM, (String)inMap.get("kktsvkei_gadtm"))` // Machine provision service contract registration datetime |

### Block 12 — OP_SVC_KEI_NO Mapping (L14769-L14778)

> Maps the option service contract number.

**Block 12** — IF `inMap == null || inMap.get("op_svc_kei_no") == null || "".equals(inMap.get("op_svc_kei_no"))` (L14769)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(OP_SVC_KEI_NO)` // Option service contract number set to null |

**Block 12.1** — ELSE (L14776)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(OP_SVC_KEI_NO, (String)inMap.get("op_svc_kei_no"))` // Option service contract number |

### Block 13 — OPSVKEI_GADTM Mapping (L14781-L14790)

> Maps the option service contract generation registration datetime.

**Block 13** — IF `inMap == null || inMap.get("opsvkei_gadtm") == null || "".equals(inMap.get("opsvkei_gadtm"))` (L14781)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(OPSVKEI_GADTM)` // Option service contract registration datetime set to null |

**Block 13.1** — ELSE (L14788)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(OPSVKEI_GADTM, (String)inMap.get("opsvkei_gadtm"))` // Option service contract registration datetime |

### Block 14 — SBOP_SVC_KEI_NO Mapping (L14793-L14802)

> Maps the sub-option service contract number.

**Block 14** — IF `inMap == null || inMap.get("sbop_svc_kei_no") == null || "".equals(inMap.get("sbop_svc_kei_no"))` (L14793)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(SBOP_SVC_KEI_NO)` // Sub-option service contract number set to null |

**Block 14.1** — ELSE (L14800)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(SBOP_SVC_KEI_NO, (String)inMap.get("sbop_svc_kei_no"))` // Sub-option service contract number |

### Block 15 — SBOPSVKEI_GADTM Mapping (L14805-L14814)

> Maps the sub-option service contract generation registration datetime.

**Block 15** — IF `inMap == null || inMap.get("sbopsvkei_gadtm") == null || "".equals(inMap.get("sbopsvkei_gadtm"))` (L14805)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(SBOPSVKEI_GADTM)` // Sub-option service contract registration datetime set to null |

**Block 15.1** — ELSE (L14812)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(SBOPSVKEI_GADTM, (String)inMap.get("sbopsvkei_gadtm"))` // Sub-option service contract registration datetime |

### Block 16 — SEIOPSVC_KEI_NO Mapping (L14817-L14826)

> Maps the billing option service contract number.

**Block 16** — IF `inMap == null || inMap.get("seiopsvc_kei_no") == null || "".equals(inMap.get("seiopsvc_kei_no"))` (L14817)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(SEIOPSVC_KEI_NO)` // Billing option service contract number set to null |

**Block 16.1** — ELSE (L14824)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(SEIOPSVC_KEI_NO, (String)inMap.get("seiopsvc_kei_no"))` // Billing option service contract number |

### Block 17 — SEIOPSVKEI_GADTM Mapping (L14829-L14838)

> Maps the billing option service contract generation registration datetime.

**Block 17** — IF `inMap == null || inMap.get("seiopsvkei_gadtm") == null || "".equals(inMap.get("seiopsvkei_gadtm"))` (L14829)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(SEIOPSVKEI_GADTM)` // Billing option service contract registration datetime set to null |

**Block 17.1** — ELSE (L14836)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(SEIOPSVKEI_GADTM, (String)inMap.get("seiopsvkei_gadtm"))` // Billing option service contract registration datetime |

### Block 18 — HUKA_INF_KEI_NO Mapping (L14841-L14850)

> Maps the additional info contract number.

**Block 18** — IF `inMap == null || inMap.get("huka_inf_kei_no") == null || "".equals(inMap.get("huka_inf_kei_no"))` (L14841)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(HUKA_INF_KEI_NO)` // Additional info contract number set to null |

**Block 18.1** — ELSE (L14848)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(HUKA_INF_KEI_NO, (String)inMap.get("huka_inf_kei_no"))` // Additional info contract number |

### Block 19 — HUKA_INF_KEI_GADTM Mapping (L14853-L14862)

> Maps the additional info contract generation registration datetime.

**Block 19** — IF `inMap == null || inMap.get("huka_inf_kei_gadtm") == null || "".equals(inMap.get("huka_inf_kei_gadtm"))` (L14853)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(HUKA_INF_KEI_GADTM)` // Additional info contract registration datetime set to null |

**Block 19.1** — ELSE (L14860)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(HUKA_INF_KEI_GADTM, (String)inMap.get("huka_inf_kei_gadtm"))` // Additional info contract registration datetime |

### Block 20 — CHBF_SVKEI_GADTM Mapping (L14865-L14874)

> Maps the pre-change service contract generation registration datetime (for change operations).

**Block 20** — IF `inMap == null || inMap.get("chbf_svkei_gadtm") == null || "".equals(inMap.get("chbf_svkei_gadtm"))` (L14865)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(CHBF_SVKEI_GADTM)` // Pre-change service contract registration datetime set to null |

**Block 20.1** — ELSE (L14872)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(CHBF_SVKEI_GADTM, (String)inMap.get("chbf_svkei_gadtm"))` // Pre-change service contract registration datetime |

### Block 21 — CHBF_SVKEIUW_GADTM Mapping (L14877-L14886)

> Maps the pre-change service contract detail registration datetime.

**Block 21** — IF `inMap == null || inMap.get("chbf_svkeiuw_gadtm") == null || "".equals(inMap.get("chbf_svkeiuw_gadtm"))` (L14877)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(CHBF_SVKEIUW_GADTM)` // Pre-change service contract detail registration datetime set to null |

**Block 21.1** — ELSE (L14884)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(CHBF_SVKEIUW_GADTM, (String)inMap.get("chbf_svkeiuw_gadtm"))` // Pre-change service contract detail registration datetime |

### Block 22 — CHBF_KKTSVKEI_GADTM Mapping (L14889-L14898)

> Maps the pre-change machine provision service contract generation registration datetime.

**Block 22** — IF `inMap == null || inMap.get("chbf_kktsvkei_gadtm") == null || "".equals(inMap.get("chbf_kktsvkei_gadtm"))` (L14889)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(CHBF_KKTSVKEI_GADTM)` // Pre-change machine provision service contract registration datetime set to null |

**Block 22.1** — ELSE (L14896)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(CHBF_KKTSVKEI_GADTM, (String)inMap.get("chbf_kktsvkei_gadtm"))` // Pre-change machine provision service contract registration datetime |

### Block 23 — CHBF_OPSVKEI_GADTM Mapping (L14901-L14910)

> Maps the pre-change option service contract generation registration datetime.

**Block 23** — IF `inMap == null || inMap.get("chbf_opsvkei_gadtm") == null || "".equals(inMap.get("chbf_opsvkei_gadtm"))` (L14901)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(CHBF_OPSVKEI_GADTM)` // Pre-change option service contract registration datetime set to null |

**Block 23.1** — ELSE (L14908)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(CHBF_OPSVKEI_GADTM, (String)inMap.get("chbf_opsvkei_gadtm"))` // Pre-change option service contract registration datetime |

### Block 24 — CHBF_SBOPSVKEI_GADTM Mapping (L14913-L14922)

> Maps the pre-change sub-option contract generation registration datetime.

**Block 24** — IF `inMap == null || inMap.get("chbf_sbopsvkei_gadtm") == null || "".equals(inMap.get("chbf_sbopsvkei_gadtm"))` (L14913)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(CHBF_SBOPSVKEI_GADTM)` // Pre-change sub-option contract registration datetime set to null |

**Block 24.1** — ELSE (L14920)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(CHBF_SBOPSVKEI_GADTM, (String)inMap.get("chbf_sbopsvkei_gadtm"))` // Pre-change sub-option contract registration datetime |

### Block 25 — CHBF_SEIOPSVKEI_GADTM Mapping (L14925-L14933)

> Maps the pre-change billing option contract generation registration datetime.

**Block 25** — IF `inMap == null || inMap.get("chbf_seiopsvkei_gadtm") == null || "".equals(inMap.get("chbf_seiopsvkei_gadtm"))` (L14925)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(CHBF_SEIOPSVKEI_GADTM)` // Pre-change billing option contract registration datetime set to null |

**Block 25.1** — ELSE (L14932)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(CHBF_SEIOPSVKEI_GADTM, (String)inMap.get("chbf_seiopsvkei_gadtm"))` // Pre-change billing option contract registration datetime |

### Block 26 — KKOP_SVC_KEI_NO_1 / KKOSVKEI_GADTM_1 (ANSI-1578) (L14936-L14958)

> ANK-1578 extension: Maps machine option service contract 1 (Rutha function) and its registration datetime.

**Block 26** — IF `inMap == null || StringUtils.isEmpty(inMap.get("kkop_svc_kei_no_1"))` (L14936)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(KKOP_SVC_KEI_NO_1)` // Machine option service contract number 1 (Rutha function) set to null |

**Block 26.1** — ELSE (L14943)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(KKOP_SVC_KEI_NO_1, (String)inMap.get("kkop_svc_kei_no_1"))` // Machine option service contract number 1 (Rutha function) |

**Block 26.2** — IF `inMap == null || StringUtils.isEmpty(inMap.get("kko_svkei_gadtm_1"))` (L14949)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(KKOSVKEI_GADTM_1)` // Machine option service contract registration datetime 1 set to null |

**Block 26.3** — ELSE (L14956)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(KKOSVKEI_GADTM_1, (String)inMap.get("kko_svkei_gadtm_1"))` // Machine option service contract registration datetime 1 |

### Block 27 — KKOP_SVC_KEI_NO_2 / KKOSVKEI_GADTM_2 (ANSI-1578) (L14958-L14980)

> ANK-1578 extension: Maps machine option service contract 2 (VA function) and its registration datetime.

**Block 27** — IF `inMap == null || StringUtils.isEmpty(inMap.get("kkop_svc_kei_no_2"))` (L14960)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(KKOP_SVC_KEI_NO_2)` // Machine option service contract number 2 (VA) set to null |

**Block 27.1** — ELSE (L14967)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(KKOP_SVC_KEI_NO_2, (String)inMap.get("kkop_svc_kei_no_2"))` // Machine option service contract number 2 (VA) |

**Block 27.2** — IF `inMap == null || StringUtils.isEmpty(inMap.get("kko_svkei_gadtm_2"))` (L14973)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(KKOSVKEI_GADTM_2)` // Machine option service contract registration datetime 2 (VA) set to null |

**Block 27.3** — ELSE (L14980)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(KKOSVKEI_GADTM_2, (String)inMap.get("kko_svkei_gadtm_2"))` // Machine option service contract registration datetime 2 (VA) |

### Block 28 — TELNO Mapping (ANSI-4494) (L14983-L14997)

> ANK-4494 Step2 quality enhancement: Maps phone number.

**Block 28** — IF `inMap == null || inMap.get("telno") == null || "".equals(inMap.get("telno"))` (L14985)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.setNull(TELNO)` // Phone number set to null |

**Block 28.1** — ELSE (L14993)

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(TELNO, (String)inMap.get("telno"))` // Phone number |

### Block 29 — Result Assembly (L14999-L15004)

> Wraps the single template into a CAANMsg array and places it into the parameter map.

| # | Type | Code |
|---|------|------|
| 1 | SET | `templates = new CAANMsg[1]` // Template array of size 1 |
| 2 | SET | `templates[0] = template` // Assign prepared template |
| 3 | SET | `paramMap.put(TEMPLATE_LIST_KEY, templates)` // Register template list in parameter map |
| 4 | RETURN | `return paramMap` // Return the fully assembled parameter map for CBS invocation |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `HAKKOSODCCWORKMAP` | Constant | "HakkoSODCCWORK" — the HashMap key for order creation work registration data stored in the request parameter |
| `odr_hakko_joken_no` | Field | Order release condition number — the unique identifier for order release conditions (prerequisites/requirements before order execution) |
| `odr_naiyo_cd` | Field | Order content code — classifies the type/order category of the order (e.g., FTTH registration, mail change, service change) |
| `svc_kei_no` | Field | Service contract number — the unique identifier for a service contract line item |
| `svkei_gadtm` | Field | Service contract generation registration datetime — the timestamp when the service contract was registered/created |
| `svc_kei_ucwk_no` | Field | Service contract detail work number — internal tracking ID for service contract detail/work items |
| `svkeiuw_gadtm` | Field | Service contract detail registration datetime — the timestamp when the service contract detail was registered |
| `kktk_svc_kei_no` | Field | Machine provision service contract number — service contract for machine/provision services (hardware provisioning) |
| `kktsvkei_gadtm` | Field | Machine provision service contract generation registration datetime — registration timestamp for machine provision contract |
| `op_svc_kei_no` | Field | Option service contract number — service contract for optional/add-on services |
| `opsvkei_gadtm` | Field | Option service contract generation registration datetime — registration timestamp for option service contract |
| `sbop_svc_kei_no` | Field | Sub-option service contract number — service contract for sub-option (secondary optional) services |
| `sbopsvkei_gadtm` | Field | Sub-option service contract generation registration datetime — registration timestamp for sub-option service contract |
| `seiopsvc_kei_no` | Field | Billing option service contract number — service contract for billing-related optional services |
| `seiopsvkei_gadtm` | Field | Billing option service contract generation registration datetime — registration timestamp for billing option service |
| `huka_inf_kei_no` | Field | Additional info contract number — service contract for additional information services |
| `huka_inf_kei_gadtm` | Field | Additional info contract generation registration datetime — registration timestamp for additional info contract |
| `chbf_svkei_gadtm` | Field | Pre-change service contract generation registration datetime — timestamp before a service change operation (used in change workflows) |
| `chbf_svkeiuw_gadtm` | Field | Pre-change service contract detail registration datetime — pre-change timestamp for service contract detail |
| `chbf_kktsvkei_gadtm` | Field | Pre-change machine provision service contract registration datetime — pre-change timestamp for machine provision contract |
| `chbf_opsvkei_gadtm` | Field | Pre-change option service contract registration datetime — pre-change timestamp for option service contract |
| `chbf_sbopsvkei_gadtm` | Field | Pre-change sub-option contract registration datetime — pre-change timestamp for sub-option contract |
| `chbf_seiopsvkei_gadtm` | Field | Pre-change billing option contract registration datetime — pre-change timestamp for billing option contract |
| `kkop_svc_kei_no_1` | Field | Machine option service contract number 1 — machine option service contract for Rutha function (extended via ANK-1578) |
| `kko_svkei_gadtm_1` | Field | Machine option service contract registration datetime 1 — registration timestamp for machine option 1 (Rutha function) |
| `kkop_svc_kei_no_2` | Field | Machine option service contract number 2 — machine option service contract for VA function (extended via ANK-1578) |
| `kko_svkei_gadtm_2` | Field | Machine option service contract registration datetime 2 — registration timestamp for machine option 2 (VA function) |
| `telno` | Field | Phone number — customer contact phone number (added via ANK-4494 quality enhancement) |
| `FUNC_CD_1` | Constant | Function code "1" — represents "Check and Register" (check and registration) operation mode |
| EKK1551D010CBS | SC Code | Order Information Creation Work Registration CBS — the Service Component that processes order creation work registration |
| EKK1551D010CBSMsg | Message Class | CAANMsg schema class for EKK1551D010CBS — defines all template fields including service contracts, datetimes, error fields |
| SOD | Acronym | Service Order Data — telecom order fulfillment entity (from package name `SODCC`) |
| CC | Acronym | Common Component / Custom Component — the business logic component layer in this architecture |
| CBS | Acronym | Component Business System — the Service Component execution layer that interfaces with the database |
| CAANMsg | Technical | Fujitsu's message/schema class for Service Component request/response data transfer |
| SC Code | Acronym | Service Component Code — the unique identifier for a Service Component (e.g., EKK1551D010CBS) |
| FUNC_CODE | Field | Function code — distinguishes operation type (1 = Check/Register, 2 = other modes) |
| HAKKOSODCCWORK | Constant | "HakkoSODCCWORK" — the HashMap key for work registration data in request parameter |
| GADTM | Abbreviation | Generation and Registration Datetime — timestamp of creation/registration (from Japanese 登録年月日時分秒) |
| CHBF | Abbreviation | Before Change — prefix for fields holding pre-change values in service modification workflows |
| KKTK | Abbreviation | Kikai Teikyou (Machine Provision) — machine/provision service contracts |
| KKOP | Abbreviation | Kikai Option (Machine Option) — machine option service contracts |
| SBOP | Abbreviation | Sub Option — sub-option service contracts |
| SEIOP | Abbreviation | Seikyu Option (Billing Option) — billing-related option service contracts |
| HUKA | Abbreviation | Fuka (Additional) — additional information contracts |
| ANK-1578 | Change ticket | 2013.12.10 Y.Kanata addition — added machine option service contracts 1 and 2 for Rutha and VA functions |
| ANK-4494 | Change ticket | 2024.11.26 Hoshino addition — Step2 quality enhancement, added phone number field |
