---
title: "Business Logic — JKKMltiseInfoAddCfmCC.editEKK0361D010InMsg() [169 LOC]"
date: 2026-06-27
---

# Business Logic — JKKMltiseInfoAddCfmCC.editEKK0361D010InMsg() [169 LOC]

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

## 1. Role

### JKKMltiseInfoAddCfmCC.editEKK0361D010InMsg()

This method acts as a **request-to-service message mapper** for the Multi-session Information Registration screen in the Internet Service Provider (ISP) broadband service domain. Its primary business purpose is to transform incoming request parameters and workflow data into a structured `CAANMsg` (Common Application ANdling Message) that will be passed to a downstream Service Component (SC) for ISP multi-session contract registration.

The method performs **no business rules enforcement** — it does not validate data, check permissions, or make decisions about whether the registration should proceed. Instead, it purely assembles data using a **builder pattern**: it creates a `CAANMsg` template, initializes all fields with null mappings, then populates each field by pulling values from the `inHash` and `workMap` input containers.

This is a **shared utility component** called from `getEKK0361D010Map()` within the same class, which is invoked during the ISP multi-session contract registration screen flow (EKK0361). The method handles three categories of data:

1. **Direct from inHash**: Simple field-by-field extraction for operational codes, service identifiers, timestamps, and session counts — with null-handling for optional or empty fields.
2. **Derived from workMap cross-templates**: Extracts the application detail reference number (MSKM_DTL_NO) from the `EKK0011D010CBSMsg` work data, and ISP authentication credentials (ID, password, initial password) from the `EKK0171A010CBSMsg` work data — which represents the ISP agreement consent result from the eo Optical Net service.
3. **IP-address-dependent conditional mapping**: For authentication ID and password fields, the method checks whether a fixed IP address is provisioned (`KOTEI_IP_UM_FLG`). If fixed IP is confirmed, it sets the authentication credentials; if dynamic IP (IPv6) is provisioned, it explicitly nullifies them per OM-2016-0002076. For the ISP authentication ID specifically, it also appends a "P" suffix when fixed IP is in use via `editIspNinshoId()`.

The method's role in the larger system is to **bridge the screen layer and the service component layer**, ensuring that the CAANMsg sent to the registration SC contains all required fields with correct formatting, consistent null handling, and IP-address-context-aware authentication data.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["editEKK0361D010InMsg"])
    PARAM_MAP["Create paramMap"]
    COMMON_PARAM["setCommonParamMap param to paramMap"]
    TEMPLATE["Create CAANMsg template EKK0361D010CBSMsg"]
    NULL_MAP["fillCAANMSGNullMapping template nulls"]
    TEMPLATE_ID["Set TEMPLATE_ID_EKK0361D010 on template"]
    FUNC_CHECK{inHash is not null}
    FUNC_SET["Set FUNC_CODE from inHash"]
    OPCODE_NULL{OP_SVC_CD null or empty}
    OPCODE_SET["Set OP_SVC_CD from inHash"]
    OPCODE_NULL_SET["SetNull OP_SVC_CD"]
    IDO_NULL{IDO_DIV null or empty}
    IDO_SET["Set IDO_DIV from inHash"]
    IDO_SET_NULL["SetNull IDO_DIV"]
    PCRSET["Set PCRS_CD to Mltise B15"]
    PPLAN_SET["Set PCRS_PLAN_CD to Mltise PB1501"]
    OYA_NULL{OYA_KEI_SKBT_CD null or empty}
    OYA_SET["Set OYA_KEI_SKBT_CD from inHash"]
    OYA_SET_NULL["SetNull OYA_KEI_SKBT_CD"]
    SVC_NULL{SVC_KEI_NO null or empty}
    SVC_SET["Set SVC_KEI_NO from inHash"]
    SVC_SET_NULL["SetNull SVC_KEI_NO"]
    SYSID_NULL{SYSID null or empty}
    SYSID_SET["Set SYSID from inHash"]
    SYSID_NULL_SET["SetNull SYSID"]
    DETAIL_NO["Extract MSKM_DTL_NO from workMap EKK0011D020"]
    SVC_USE_STA["Set SVC_USE_STA_KIBO_YMD from getStrymd"]
    RSV_TSTA["Set RSV_TSTA_KIBO_YMD from getStrymd"]
    MLSION_NULL{MLTISE_SESSION_CNT null or empty}
    MLSION_SET["Set MLTISE_SESSION_CNT from inHash"]
    MLSION_NULL_SET["SetNull MLTISE_SESSION_CNT"]
    AUTH_DATA["Extract eKK0171A010Hash from workMap EKK0171A010"]
    AUTH_NULL_1{SHK_ISP_NINSHO_ID_PWD null or empty}
    AUTH_SET_1["SetNull MLTISE_SHK_NINSHO_ID_PWD"]
    AUTH_FIXED_IP_1{KOTEI_IP_UM_FLG is true}
    AUTH_SET_FIXED_1["Set MLTISE_SHK_NINSHO_ID_PWD from eKK0171A010Hash"]
    AUTH_SET_NULL_1["SetNull MLTISE_SHK_NINSHO_ID_PWD"]
    ISP_NULL{ISP_NINSHO_ID null or empty}
    ISP_SET_NULL_1["SetNull MLTISE_NINSHO_ID"]
    ISP_FIXED_IP_2{KOTEI_IP_UM_FLG is true}
    ISP_EDIT["editIspNinshoId ispNinshoId"]
    ISP_SET["Set MLTISE_NINSHO_ID from editIspNinshoId"]
    ISP_SET_NULL_2["SetNull MLTISE_NINSHO_ID"]
    ISP_PWD_NULL{ISP_NINSHO_ID_PWD null or empty}
    ISP_PWD_SET_NULL["SetNull MLTISE_NINSHO_ID_PWD"]
    ISP_PWD_FIXED_IP{KOTEI_IP_UM_FLG is true}
    ISP_PWD_SET["Set MLTISE_NINSHO_ID_PWD from eKK0171A010Hash"]
    ISP_PWD_SET_NULL_2["SetNull MLTISE_NINSHO_ID_PWD"]
    SVC_KEI_UCWK_NULL{SVC_KEI_UCWK_NO null or empty}
    SVC_KEI_UCWK_SET["Set SVC_KEI_UCWK_NO from inHash"]
    SVC_KEI_UCWK_SET_NULL["SetNull SVC_KEI_UCWK_NO"]
    SEIKY_SET["Set SEIKY_KEI_NO from inHash"]
    UPD_DTM_SET["Set UPD_DTM_BF from inHash"]
    COMMON_TMPL["setCommonTemplate param template"]
    TEMPLATE_ARR["Create CAANMsg templates array"]
    PARAM_MAP_PUT["Put templates in paramMap"]
    RETURN_RESULT["Return paramMap"]
    START --> PARAM_MAP
    PARAM_MAP --> COMMON_PARAM
    COMMON_PARAM --> TEMPLATE
    TEMPLATE --> NULL_MAP
    NULL_MAP --> TEMPLATE_ID
    TEMPLATE_ID --> FUNC_CHECK
    FUNC_CHECK --> FUNC_SET
    FUNC_SET --> OPCODE_NULL
    OPCODE_NULL --> OPCODE_NULL_SET
    OPCODE_NULL --> OPCODE_SET
    OPCODE_NULL_SET --> IDO_NULL
    OPCODE_SET --> IDO_NULL
    IDO_NULL --> IDO_SET_NULL
    IDO_NULL --> IDO_SET
    IDO_SET_NULL --> PCRSET
    IDO_SET --> PCRSET
    PCRSET --> PPLAN_SET
    PPLAN_SET --> OYA_NULL
    OYA_NULL --> OYA_SET_NULL
    OYA_NULL --> OYA_SET
    OYA_SET_NULL --> SVC_NULL
    OYA_SET --> SVC_NULL
    SVC_NULL --> SVC_SET_NULL
    SVC_NULL --> SVC_SET
    SVC_SET_NULL --> SYSID_NULL
    SVC_SET --> SYSID_NULL
    SYSID_NULL --> SYSID_NULL_SET
    SYSID_NULL --> SYSID_SET
    SYSID_NULL_SET --> DETAIL_NO
    SYSID_SET --> DETAIL_NO
    DETAIL_NO --> SVC_USE_STA
    SVC_USE_STA --> RSV_TSTA
    RSV_TSTA --> MLSION_NULL
    MLSION_NULL --> MLSION_NULL_SET
    MLSION_NULL --> MLSION_SET
    MLSION_NULL_SET --> AUTH_DATA
    MLSION_SET --> AUTH_DATA
    AUTH_DATA --> AUTH_NULL_1
    AUTH_NULL_1 --> AUTH_SET_1
    AUTH_NULL_1 --> AUTH_FIXED_IP_1
    AUTH_SET_1 --> ISP_NULL
    AUTH_FIXED_IP_1 --> AUTH_SET_FIXED_1
    AUTH_FIXED_IP_1 --> AUTH_SET_NULL_1
    AUTH_SET_FIXED_1 --> ISP_NULL
    AUTH_SET_NULL_1 --> ISP_NULL
    ISP_NULL --> ISP_SET_NULL_1
    ISP_NULL --> ISP_FIXED_IP_2
    ISP_SET_NULL_1 --> ISP_PWD_NULL
    ISP_FIXED_IP_2 --> ISP_EDIT
    ISP_FIXED_IP_2 --> ISP_SET_NULL_2
    ISP_EDIT --> ISP_SET
    ISP_SET --> ISP_PWD_NULL
    ISP_SET_NULL_2 --> ISP_PWD_NULL
    ISP_PWD_NULL --> ISP_PWD_SET_NULL
    ISP_PWD_NULL --> ISP_PWD_FIXED_IP
    ISP_PWD_SET_NULL --> SVC_KEI_UCWK_NULL
    ISP_PWD_FIXED_IP --> ISP_PWD_SET
    ISP_PWD_FIXED_IP --> ISP_PWD_SET_NULL_2
    ISP_PWD_SET --> SVC_KEI_UCWK_NULL
    ISP_PWD_SET_NULL_2 --> SVC_KEI_UCWK_NULL
    SVC_KEI_UCWK_NULL --> SVC_KEI_UCWK_SET_NULL
    SVC_KEI_UCWK_NULL --> SVC_KEI_UCWK_SET
    SVC_KEI_UCWK_SET_NULL --> SEIKY_SET
    SVC_KEI_UCWK_SET --> SEIKY_SET
    SEIKY_SET --> UPD_DTM_SET
    UPD_DTM_SET --> COMMON_TMPL
    COMMON_TMPL --> TEMPLATE_ARR
    TEMPLATE_ARR --> PARAM_MAP_PUT
    PARAM_MAP_PUT --> RETURN_RESULT
```

### Processing Steps:

1. **Initialization**: Create an empty `paramMap` and populate common parameters via `setCommonParamMap()`.
2. **Template Creation**: Instantiate a `CAANMsg` with the `EKK0361D010CBSMsg` type, then call `fillCAANMSGNullMapping()` to pre-set all fields to null. Set the template ID to `EKK0361D010`.
3. **Functional Code**: Extract `func_code` from `inHash` if present.
4. **Option Service Code (ISP Contract Registration) - Conditional**: Map `op_svc_cd` from `inHash` if not null/empty, else set null.
5. **Modification Division - Conditional**: Map `ido_div` (modification division) from `inHash` if not null/empty, else set null.
6. **Fixed Fields**: Hardcode `pcrs_cd` to `"B15"` (Mltise Price Code) and `pcrs_plan_cd` to `"PB1501"` (Mltise Price Plan Code).
7. **Parent Contract Identifier - Conditional**: Map `oya_kei_skbt_cd` from `inHash` if not null/empty, else set null.
8. **Service Contract Number - Conditional**: Map `svc_kei_no` from `inHash` if not null/empty, else set null.
9. **SYSID - Conditional**: Map `sysid` from `inHash` if not null/empty, else set null.
10. **Detail Reference Number**: Extract `MSKM_DTL_NO` from the first element of the `EKK0011D020CBSMsg1List` in `workMap` under template ID `EKK0011D020`.
11. **Service Use Start Date (Two Fields)**: Set both `SVC_USE_STA_KIBO_YMD` and `RSV_TSTA_KIBO_YMD` from `getStrymd(inHash)` (service start date).
12. **Multi-session Count - Conditional**: Map `mltise_session_cnt` from `inHash` if not null/empty, else set null.
13. **ISP Authentication Credentials (from workMap EKK0171A010)**: Extract `eKK0171A010Hash` from `workMap` under template ID `EKK0171A010`.
    - **Initial ISP Auth ID Password - Conditional**: If `shk_isp_ninsho_id_pwd` from `eKK0171A010Hash` is null/empty, set null. Otherwise, check `KOTEI_IP_UM_FLG`: if `true` (fixed IP), set the initial password; if `false` (dynamic IP), set null.
    - **ISP Auth ID - Conditional**: If `isp_ninsho_id` from `eKK0171A010Hash` is null/empty, set null. Otherwise, check `KOTEI_IP_UM_FLG`: if `true`, call `editIspNinshoId()` to append a "P" suffix and set; if `false` (dynamic IP), set null.
    - **ISP Auth ID Password - Conditional**: If `isp_ninsho_id_pwd` from `eKK0171A010Hash` is null/empty, set null. Otherwise, check `KOTEI_IP_UM_FLG`: if `true`, set the password; if `false` (dynamic IP), set null.
14. **Service Contract Sub-number - Conditional**: Map `svc_kei_ucwk_no` from `inHash` if not null/empty, else set null.
15. **Billing Contract Number - Direct**: Set `SEIKY_KEI_NO` from `inHash` (no null check - assumes always present).
16. **Pre-update Timestamp - Direct**: Set `UPD_DTM_BF` from `inHash` under key `ex_svc_upd_dtm`.
17. **Common Template Setup**: Call `setCommonTemplate(param, template)` to add common template fields.
18. **Return Preparation**: Wrap the template in a `CAANMsg[]` array, put it in `paramMap` under key `TEMPLATE_LIST_KEY`, and return `paramMap`.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `param` | `IRequestParameterReadOnly` | Read-only request parameter holder carrying the business context, session data, and common parameters from the calling screen/component. Used by `setCommonParamMap()` and `setCommonTemplate()` to attach common fields to the output message. |
| 2 | `inHash` | `HashMap<String, Object>` | Input data container carrying screen-level data for the ISP multi-session registration. Contains keys: `func_code` (functional code), `op_svc_cd` (option service code for ISP), `ido_div` (modification division), `oya_kei_skbt_cd` (parent contract identifier code), `svc_kei_no` (service contract number), `sysid` (system ID), `mltise_session_cnt` (multi-session count), `svc_kei_ucwk_no` (service contract sub-number), `seik_kei_no` (billing contract number), `kotei_ip_um_flg` (fixed IP presence flag - boolean), `ex_svc_upd_dtm` (pre-update datetime). May be `null`. |
| 3 | `workMap` | `HashMap<String, Object>` | Cross-work-data container holding data from previous processing steps in the screen flow. Contains entries keyed by template IDs: `EKK0011D020` (application detail registration - used to extract the detail reference number `MSKM_DTL_NO`) and `EKK0171A010` (ISP agreement consent result from eo Optical Net - used to extract ISP authentication credentials). |

**External State / Instance Fields Read:**
- None directly - all constant values (`FUNC_CODE`, `OP_SVC_CD`, `IDO_DIV`, `PCRS_CD_MLTISE`, `PCRS_PLAN_CD_MLTISE`, `KOTEI_IP_UM_FLG`, etc.) are static `final String` constants defined within the class.
- Template ID constants (`TEMPLATE_ID_EKK0361D010`, `TEMPLATE_ID_EKK0011D020`, `TEMPLATE_ID_EKK0171A010`) are static constants defined within the class.

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `JCKMvnoCustInfoAddCC.setNull` | JCKMvnoCustInfoAddCC | - | Calls `setNull` in `JCKMvnoCustInfoAddCC` |
| - | `JKKKapKeiInfoCancelCC.setNull` | JKKKapKeiInfoCancelCC | - | Calls `setNull` in `JKKKapKeiInfoCancelCC` |
| - | `JKKKisnUwHmdkAddCC.setNull` | JKKKisnUwHmdkAddCC | - | Calls `setNull` in `JKKKisnUwHmdkAddCC` |
| - | `JKKKojiChgPlaceNoCC.setNull` | JKKKojiChgPlaceNoCC | - | Calls `setNull` in `JKKKojiChgPlaceNoCC` |
| U | `JKKMltiseInfoAddCfmCC.editIspNinshoId` | JKKMltiseInfoAddCfmCC | - | Calls `editIspNinshoId` - appends "P" suffix to ISP authentication ID for fixed IP |
| - | `JKKMltiseInfoAddCfmCC.fillCAANMSGNullMapping` | JKKMltiseInfoAddCfmCC | - | Calls `fillCAANMSGNullMapping` - pre-initializes all CAANMsg fields to null |
| R | `JKKMltiseInfoAddCfmCC.getStrymd` | JKKMltiseInfoAddCfmCC | - | Calls `getStrymd` - retrieves service start date (year/month/day) |
| - | `JKKMltiseInfoAddCfmCC.setCommonParamMap` | JKKMltiseInfoAddCfmCC | - | Calls `setCommonParamMap` - sets common business parameters on the output map |
| - | `JKKMltiseInfoAddCfmCC.setCommonTemplate` | JKKMltiseInfoAddCfmCC | - | Calls `setCommonTemplate` - sets common template fields on the output message |
| - | `JKKMvnoSvcKeiStaAddCC.setNull` | JKKMvnoSvcKeiStaAddCC | - | Calls `setNull` in `JKKMvnoSvcKeiStaAddCC` |
| R | `CRSV0221_CRSV0221OP_CRSV022101SC.getContents` | CRSV0221_CRSV0221OP_CRSV022101 | - | Calls `getContents` in CRSV0221 SC |
| R | `DKSV0013_DKSV0013OP_DKSV001301SC_EDKA0010009CBSMsg1List.getContents` | DKSV0013_DKSV0013OP_DKSV001301SC_EDKA0010009CBSMsg1List | - | Calls `getContents` in DKSV0013 SC list |
| R | `DKSV0013_DKSV0013OP_DKSV001301SC.getContents` | DKSV0013_DKSV0013OP_DKSV001301 | - | Calls `getContents` in DKSV0013 SC |
| R | `FUSV0170_FUSV0170OP.getContents` | FUSV0170_FUSV0170OP | - | Calls `getContents` in FUSV0170 OP |
| R | `KK0801CBMMsg.getContents` | KK0801CBMMsg | - | Calls `getContents` in KK0801 CBSMsg |
| R | `SCW00701SFLogic.getName` | SCW00701SFLogic | - | Calls `getName` in SCW00701 SFLogic |

**Method calls made directly within `editEKK0361D010InMsg()`:**

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| U | `setCommonParamMap(param, paramMap)` | JKKMltiseInfoAddCfmCC | - | Sets common business parameters (e.g., function code, program status) on the output map |
| - | `fillCAANMSGNullMapping(template, contents)` | JKKMltiseInfoAddCfmCC | - | Pre-initializes all fields of the CAANMsg template to null values |
| U | `editIspNinshoId(ispNinshoId)` | JKKMltiseInfoAddCfmCC | - | Appends "P" suffix to ISP authentication ID when fixed IP is provisioned |
| R | `getStrymd(inHash)` | JKKMltiseInfoAddCfmCC | - | Retrieves and formats the service start date (year/month/day) from input hash |
| U | `setCommonTemplate(param, template)` | JKKMltiseInfoAddCfmCC | - | Sets common template fields (e.g., operation date/time, program status) on the output message |
| - | `CAANMsg.set(field, value)` | EKK0361D010CBSMsg | - | Sets individual message fields on the template (multiple occurrences) |
| - | `CAANMsg.setNull(field)` | EKK0361D010CBSMsg | - | Sets individual message fields to null (multiple occurrences) |

**Classification rationale:**
- **U (Update)**: `setCommonParamMap`, `editIspNinshoId`, `setCommonTemplate`, `set()`, `setNull()` - all update local objects or the output message.
- **R (Read)**: `getStrymd` - reads data from `inHash`.
- No **C (Create)** or **D (Delete)** operations are performed by this method. It is purely a **message assembly/transformation** method with no database interactions.

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | `getEKK0361D010Map()` (JKKMltiseInfoAddCfmCC) | `getEKK0361D010Map()` -> `editEKK0361D010InMsg(param, inHash, workMap)` | `setCommonTemplate` [-], `setNull` [-], `editIspNinshoId` [-], `getStrymd` [-], `setCommonParamMap` [-], `fillCAANMSGNullMapping` [-] |

**Call chain explanation:**
`getEKK0361D010Map()` is the immediate caller of `editEKK0361D010InMsg()` within `JKKMltiseInfoAddCfmCC`. This caller method is itself invoked from the ISP multi-session contract registration screen flow (template `EKK0361D010`). The method has no direct screen/batch entry point within 8 hops - it is a lower-level CC (Common Component) utility.

**Terminal operations reached from this method:**
All terminal operations are internal CC methods that manipulate local objects or the output `CAANMsg` template. No database CRUD operations or external SC/CBS calls are performed directly. The downstream SC (`EKK0361D010SC`) receives the assembled `paramMap` as input, but this method does not invoke it directly.

## 6. Per-Branch Detail Blocks

### Block 1 - Initialization (L1372)

> Creates the output map and initializes common parameters and the CAANMsg template.

| # | Type | Code |
|---|------|------|
| 1 | SET | `paramMap = new HashMap<String, Object>()` // Create output message container |
| 2 | CALL | `setCommonParamMap(param, paramMap)` // Set common business parameters [CC method] |
| 3 | SET | `template = new CAANMsg(EKK0361D010CBSMsg.class.getName())` // Create template for EKK0361D010 CBS message |
| 4 | EXEC | `fillCAANMSGNullMapping(template, new EKK0361D010CBSMsg().getContents())` // Pre-initialize all fields to null [CC method] |
| 5 | SET | `template.set(EKK0361D010CBSMsg.TEMPLATEID, "EKK0361D010")` // TEMPLATE_ID_EKK0361D010 = "EKK0361D010" // Set template identifier |

### Block 2 - Functional Code Extraction (L1381)

> Conditionally extracts the function code from `inHash`.

| # | Type | Code |
|---|------|------|
| 1 | IF | `inHash != null` [L1381] |
| 1.1 | SET | `template.set(EKK0361D010CBSMsg.FUNC_CODE, inHash.get("func_code"))` // FUNC_CODE = "func_code" // Set functional code |

### Block 3 - Option Service Code Mapping (L1386-1391)

> Maps `op_svc_cd` (option service code for ISP contract registration) with null-safety.

| # | Type | Code |
|---|------|------|
| 1 | IF | `inHash == null || inHash.get("op_svc_cd") == null || "".equals(inHash.get("op_svc_cd"))` [L1386] [OP_SVC_CD = "op_svc_cd"] |
| 1.1 | EXEC | `template.setNull(EKK0361D010CBSMsg.OP_SVC_CD)` // Set null for option service code |
| 2 | ELSE | [L1389] |
| 2.1 | SET | `template.set(EKK0361D010CBSMsg.OP_SVC_CD, (String) inHash.get("op_svc_cd"))` // Set option service code |

### Block 4 - Modification Division Mapping (L1394-1399)

> Maps `ido_div` (modification division - new contract vs. service addition) with null-safety.

| # | Type | Code |
|---|------|------|
| 1 | IF | `inHash == null || inHash.get("ido_div") == null || "".equals(inHash.get("ido_div"))` [L1394] [IDO_DIV = "ido_div"] |
| 1.1 | EXEC | `template.setNull(EKK0361D010CBSMsg.IDO_DIV)` // Set null for modification division |
| 2 | ELSE | [L1397] |
| 2.1 | SET | `template.set(EKK0361D010CBSMsg.IDO_DIV, (String) inHash.get("ido_div"))` // Set modification division |

### Block 5 - Fixed Price Code and Plan Code (L1402-1405)

> Sets hardcoded price code and price plan code for multi-session service.

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(EKK0361D010CBSMsg.PCRS_CD, "B15")` // PCRS_CD_MLTISE = "B15" // Price code: Multi-session |
| 2 | SET | `template.set(EKK0361D010CBSMsg.PPLAN_CD, "PB1501")` // PCRS_PLAN_CD_MLTISE = "PB1501" // Price plan code: Multi-session |

### Block 6 - Parent Contract Identifier Mapping (L1408-1413)

> Maps parent contract identifier code with null-safety.

| # | Type | Code |
|---|------|------|
| 1 | IF | `inHash == null || inHash.get("oya_kei_skbt_cd") == null || "".equals(inHash.get("oya_kei_skbt_cd"))` [L1408] [OYA_KEI_SKBT_CD = "oya_kei_skbt_cd"] |
| 1.1 | EXEC | `template.setNull(EKK0361D010CBSMsg.OYA_KEI_SKBT_CD)` // Set null for parent contract identifier |
| 2 | ELSE | [L1411] |
| 2.1 | SET | `template.set(EKK0361D010CBSMsg.OYA_KEI_SKBT_CD, (String) inHash.get("oya_kei_skbt_cd"))` // Set parent contract identifier code |

### Block 7 - Service Contract Number Mapping (L1416-1421)

> Maps service contract number with null-safety.

| # | Type | Code |
|---|------|------|
| 1 | IF | `inHash == null || inHash.get("svc_kei_no") == null || "".equals(inHash.get("svc_kei_no"))` [L1416] [SVC_KEI_NO = "svc_kei_no"] |
| 1.1 | EXEC | `template.setNull(EKK0361D010CBSMsg.SVC_KEI_NO)` // Set null for service contract number |
| 2 | ELSE | [L1419] |
| 2.1 | SET | `template.set(EKK0361D010CBSMsg.SVC_KEI_NO, (String) inHash.get("svc_kei_no"))` // Set service contract number |

### Block 8 - SYSID Mapping (L1423-1428)

> Maps system ID with null-safety.

| # | Type | Code |
|---|------|------|
| 1 | IF | `inHash == null || inHash.get("sysid") == null || "".equals(inHash.get("sysid"))` [L1423] [SYSID = "sysid"] |
| 1.1 | EXEC | `template.setNull(EKK0361D010CBSMsg.SYSID)` // Set null for system ID |
| 2 | ELSE | [L1426] |
| 2.1 | SET | `template.set(EKK0361D010CBSMsg.SYSID, (String) inHash.get("sysid"))` // Set system ID |

### Block 9 - Detail Reference Number Extraction from workMap (L1431-1434)

> Extracts the application detail reference number from the `EKK0011D020` work data.

| # | Type | Code |
|---|------|------|
| 1 | SET | `ekk0011d020Msg = (HashMap<?, ?>) workMap.get("EKK0011D020")` // TEMPLATE_ID_EKK0011D020 = "EKK0011D020" // Application detail registration |
| 2 | SET | `ekk0011d020MsgList = (ArrayList<?>) ekk0011d020Msg.get(EKK0011D020CBSMsg.EKK0011D020CBSMSG1LIST)` // Get detail list |
| 3 | SET | `kk0021Map = (HashMap<?, ?>) ekk0011d020MsgList.get(0)` // Get first element |
| 4 | SET | `mskm_dtl_no = kk0021Map.get(EKK0011D020CBSMsg1List.MSKM_DTL_NO)` // Get detail reference number |
| 5 | SET | `template.set(EKK0361D010CBSMsg.MSKM_DTL_NO, mskm_dtl_no)` // Set detail reference number |

### Block 10 - Service Start Date (L1437-1440)

> Sets both service use start date and reservation application start date from the same source.

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(EKK0361D010CBSMsg.SVC_USE_STA_KIBO_YMD, getStrymd(inHash))` // Service use start desired date |
| 2 | SET | `template.set(EKK0361D010CBSMsg.RSV_TSTA_KIBO_YMD, getStrymd(inHash))` // Reservation application start desired date |

### Block 11 - Multi-session Count Mapping (L1443-1448)

> Maps multi-session count with null-safety.

| # | Type | Code |
|---|------|------|
| 1 | IF | `inHash == null || inHash.get("mltise_session_cnt") == null || "".equals(inHash.get("mltise_session_cnt"))` [L1443] [MLTISE_SESSION_CNT = "mltise_session_cnt"] |
| 1.1 | EXEC | `template.setNull(EKK0361D010CBSMsg.MLTISE_SESSION_CNT)` // Set null for multi-session count |
| 2 | ELSE | [L1446] |
| 2.1 | SET | `template.set(EKK0361D010CBSMsg.MLTISE_SESSION_CNT, (String) inHash.get("mltise_session_cnt"))` // Set multi-session count |

### Block 12 - Extract ISP Authentication Data from workMap (L1451-1455)

> Extracts the ISP agreement consent result (eo Optical Net) data from `workMap` under template ID `EKK0171A010`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `eKK0171A010Msg = (HashMap<?, ?>) workMap.get("EKK0171A010")` // TEMPLATE_ID_EKK0171A010 = "EKK0171A010" // ISP agreement consent (eo Optical Net) |
| 2 | SET | `eKK0171A010MsgList = (ArrayList<?>) eKK0171A010Msg.get(EKK0171A010CBSMsg.EKK0171A010CBSMSG1LIST)` // Get consent list |
| 3 | SET | `eKK0171A010Hash = (HashMap<String, Object>) eKK0171A010MsgList.get(0)` // Get first element |

### Block 13 - Initial ISP Auth ID Password (L1458-1476)

> Maps the initial ISP authentication ID password with IP-address-dependent conditional logic. Per OM-2016-0002076, when the auth ID is provided as a dynamic IP address, the initial authentication password for multi-session should NOT be set (fixed IP only).

| # | Type | Code |
|---|------|------|
| 1 | IF | `eKK0171A010Hash == null || eKK0171A010Hash.get("shk_isp_ninsho_id_pwd") == null || "".equals(eKK0171A010Hash.get("shk_isp_ninsho_id_pwd"))` [L1458] [SHK_ISP_NINSHO_ID_PWD = "shk_isp_ninsho_id_pwd"] |
| 1.1 | EXEC | `template.setNull(EKK0361D010CBSMsg.MLTISE_SHK_NINSHO_ID_PWD)` // Set null for initial auth password |
| 2 | ELSE | [L1461] |
| 2.1 | IF | `(Boolean) inHash.get("kotei_ip_um_flg")` [L1465] [KOTEI_IP_UM_FLG = "kotei_ip_um_flg" - Fixed IP presence flag] |
| 2.1.1 | SET | `template.set(EKK0361D010CBSMsg.MLTISE_SHK_NINSHO_ID_PWD, (String) eKK0171A010Hash.get("shk_isp_ninsho_id_pwd"))` // Set initial auth password - fixed IP confirmed, value is guaranteed |
| 2.2 | ELSE | [L1470] - Dynamic IP |
| 2.2.1 | EXEC | `template.setNull(EKK0361D010CBSMsg.MLTISE_SHK_NINSHO_ID_PWD)` // Set null - dynamic IP, do not set initial auth password |

### Block 14 - ISP Auth ID (L1477-1495)

> Maps the ISP authentication ID with IP-address-dependent logic. When fixed IP is confirmed, appends "P" suffix via `editIspNinshoId()`. When dynamic IP, sets null per OM-2016-0002076.

| # | Type | Code |
|---|------|------|
| 1 | IF | `eKK0171A010Hash == null || eKK0171A010Hash.get("isp_ninsho_id") == null || "".equals(eKK0171A010Hash.get("isp_ninsho_id"))` [L1477] [ISP_NINSHO_ID = "isp_ninsho_id"] |
| 1.1 | EXEC | `template.setNull(EKK0361D010CBSMsg.MLTISE_NINSHO_ID)` // Set null for ISP auth ID |
| 2 | ELSE | [L1480] |
| 2.1 | IF | `(Boolean) inHash.get("kotei_ip_um_flg")` [L1481] - Fixed IP is present |
| 2.1.1 | SET | `ispNinshoId = (String) eKK0171A010Hash.get("isp_ninsho_id")` // Extract ISP auth ID |
| 2.1.2 | SET | `ispNinshoIdEdit = editIspNinshoId(ispNinshoId)` // Append "P" suffix for fixed IP [CC method] |
| 2.1.3 | SET | `template.set(EKK0361D010CBSMsg.MLTISE_NINSHO_ID, ispNinshoIdEdit)` // Set modified ISP auth ID |
| 2.2 | ELSE | [L1488] - Dynamic IP (OM-2016-0002076: do not set multi-session auth ID) |
| 2.2.1 | EXEC | `template.setNull(EKK0361D010CBSMsg.MLTISE_NINSHO_ID)` // Set null - dynamic IP, no auth ID |

### Block 15 - ISP Auth ID Password (L1499-1519)

> Maps the ISP authentication ID password with IP-address-dependent conditional logic (same pattern as Block 13).

| # | Type | Code |
|---|------|------|
| 1 | IF | `eKK0171A010Hash == null || eKK0171A010Hash.get("isp_ninsho_id_pwd") == null || "".equals(eKK0171A010Hash.get("isp_ninsho_id_pwd"))` [L1499] [ISP_NINSHO_ID_PWD = "isp_ninsho_id_pwd"] |
| 1.1 | EXEC | `template.setNull(EKK0361D010CBSMsg.MLTISE_NINSHO_ID_PWD)` // Set null for ISP auth password |
| 2 | ELSE | [L1502] |
| 2.1 | IF | `(Boolean) inHash.get("kotei_ip_um_flg")` [L1506] - Fixed IP confirmed |
| 2.1.1 | SET | `template.set(EKK0361D010CBSMsg.MLTISE_NINSHO_ID_PWD, (String) eKK0171A010Hash.get("isp_ninsho_id_pwd"))` // Set auth password - fixed IP, value guaranteed |
| 2.2 | ELSE | [L1511] - Dynamic IP (OM-2016-0002076: do not set) |
| 2.2.1 | EXEC | `template.setNull(EKK0361D010CBSMsg.MLTISE_NINSHO_ID_PWD)` // Set null - dynamic IP, no auth password |

### Block 16 - Service Contract Sub-number Mapping (L1522-1527)

> Maps service contract sub-number with null-safety.

| # | Type | Code |
|---|------|------|
| 1 | IF | `inHash == null || inHash.get("svc_kei_ucwk_no") == null || "".equals(inHash.get("svc_kei_ucwk_no"))` [L1522] [SVC_KEI_UCWK_NO = "svc_kei_ucwk_no"] |
| 1.1 | EXEC | `template.setNull(EKK0361D010CBSMsg.SVC_KEI_UCWK_NO)` // Set null for service contract sub-number |
| 2 | ELSE | [L1525] |
| 2.1 | SET | `template.set(EKK0361D010CBSMsg.SVC_KEI_UCWK_NO, (String) inHash.get("svc_kei_ucwk_no"))` // Set service contract sub-number |

### Block 17 - Billing Contract Number (L1530)

> Direct set - no null check. The billing contract number is assumed to always be present in `inHash`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(EKK0361D010CBSMsg.SEIKY_KEI_NO, (String) inHash.get("seik_kei_no"))` // SEIKY_KEI_NO = "seik_kei_no" // Billing contract number |

### Block 18 - Pre-update Timestamp (L1533)

> Direct set - no null check. The pre-update datetime is assumed to always be present.

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(EKK0361D010CBSMsg.UPD_DTM_BF, (String) inHash.get("ex_svc_upd_dtm"))` // EX_SVC_UPD_DTM = "ex_svc_upd_dtm" // Pre-update datetime |

### Block 19 - Common Template and Return (L1536-end)

> Sets common template fields, wraps the template in an array, and returns the result.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `setCommonTemplate(param, template)` // Set common template fields [CC method] |
| 2 | SET | `templates = new CAANMsg[1]` // Create array of one element |
| 3 | SET | `templates[0] = template` // Add template to array |
| 4 | SET | `paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates)` // TEMPLATE_LIST_KEY = "TEMPLATE_LIST" // Put templates in paramMap |
| 5 | RETURN | `return paramMap` |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `op_svc_cd` | Field | Option Service Code - identifies the ISP option service type for contract registration |
| `ido_div` | Field | Modification Division - distinguishes between new contract (`00001`) and service addition (`00002`) |
| `pcrs_cd` | Field | Price Code - classifies the pricing structure; `"B15"` = Multi-session price code |
| `pcrs_plan_cd` | Field | Price Plan Code - specific pricing plan; `"PB1501"` = Multi-session price plan |
| `oya_kei_skbt_cd` | Field | Parent Contract Identification Code - identifier for the parent/master contract when this is a sub-service line |
| `svc_kei_no` | Field | Service Contract Number - unique identifier for the service contract |
| `sysid` | Field | System ID - system-level identifier for the service context |
| `mskm_dtl_no` | Field | Application Detail Reference Number - cross-reference to the application detail registration record from EKK0011D020 |
| `svc_use_sta_kibo_ymd` | Field | Service Use Start Desired Year-Month-Day - the date the customer wishes to start using the service |
| `rsv_tsta_kibo_ymd` | Field | Reservation Application Start Desired Year-Month-Day - the date the reservation application becomes effective (same as service start in this context) |
| `mltise_session_cnt` | Field | Multi-session Count - number of sessions for the multi-session (IPv6) service |
| `mltise_shk_ninsho_id_pwd` | Field | Initial ISP Authentication ID Password - the initial (setup) password for the ISP authentication ID, used for multi-session configuration |
| `mltise_ninsho_id` | Field | ISP Authentication ID - the authentication ID for the ISP multi-session service; appended with "P" when fixed IP is provisioned |
| `mltise_ninsho_id_pwd` | Field | ISP Authentication ID Password - the authentication password for the ISP service |
| `svc_kei_ucwk_no` | Field | Service Contract Sub-number - internal tracking ID for service contract line items |
| `seik_kei_no` | Field | Billing Contract Number - identifier for the billing contract associated with this service |
| `ex_svc_upd_dtm` | Field | Pre-update DateTime - the last update timestamp before the current operation (for audit/diff purposes) |
| `ex_mskm_upd_dtm` | Field | Pre-update DateTime (detail) - last update timestamp for the application detail record |
| `PRG_STAT` | Field | Progress Status - tracks the processing state (`5101` = Option Information Application In-Progress, `5102` = Option Setting Complete) |
| `SVC_KEI_STAT` | Field | Service Contract Status - tracks service lifecycle (`010` = Received, `020` = Under Review, `030` = Completed, `100` = In Service, `210` = Suspended) |
| `TEMPLATE_LIST_KEY` | Constant | Key for storing CAANMsg arrays in the paramMap - `"TEMPLATE_LIST"` |
| `FUNC_CODE` | Constant | Key for the functional code in inHash - `"func_code"` |
| CAANMsg | Class | Common Application ANDling Message - a message container used for data exchange between the screen layer and Service Components in the Fujitsu business platform |
| CC | Acronym | Common Component - a shared business logic component layer that provides reusable utilities across screens and business processes |
| SC | Acronym | Service Component - the layer that handles actual business operations, database interactions, and external system calls |
| CBS | Acronym | Common Business Service - the lowest-level service unit that contains the actual database/business logic |
| SC Code | Acronym | Service Component Code - a unique identifier for a Service Component, following the pattern `[A-Z]{3}\d{4}[A-Z]\d{3}(SC\|CBS)` (e.g., `EKK0361D010SC`) |
| EKK0361D010 | Template ID | ISP Multi-session Contract Registration template - the processing template for registering multi-session ISP contracts |
| EKK0171A010 | Template ID | ISP Agreement Consent Result (eo Optical Net) - holds ISP authentication credentials from the eo Optical Net agreement process |
| EKK0011D020 | Template ID | Application Detail Registration - holds application detail data including the reference number |
| eo Optical Net | Business term | Fujitsu's optical fiber broadband service brand; the source of ISP authentication credentials for multi-session (IPv6) contracts |
| FTTH | Business term | Fiber To The Home - fiber-optic internet access service |
| IPv6 | Business term | Internet Protocol version 6 - associated with dynamic IP address provisioning in this context |
| "P" suffix | Business term | A suffix appended to the ISP authentication ID when a fixed IP address is provisioned, differentiating it from dynamic-IP authentication IDs |
| OM-2016-0002076 | Change ticket | Change request that modified the method to NOT set authentication credentials when dynamic IP is used, preventing incorrect multi-session authentication data from being sent |
