# Business Logic — JFUAddSvcKeiNetCC.editInEKK0091D010() [538 LOC]

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

## 1. Role

### JFUAddSvcKeiNetCC.editInEKK0091D010()

This method is the core **data-mapping engine** for the "Service Contract <eo Light Net> Registration" business process. Its purpose is to transform raw user input (received via `IRequestParameterReadWrite`) into a structured `CAANMsg` conforming to the `EKK0091D010CBSMsg` schema, which is then passed downstream to the CBS (Central Business System) for service contract registration. The method implements a **routing/dispatch pattern** by reading a unified HashMap of user-provided fields and mapping each to the corresponding CBS message field, with null-fallback handling when values are empty or missing. It acts as an **adapter/builder** between the presentation layer (screen request) and the CBS layer (registration request).

The method handles a single service category — eo Light Net (FTTH/fiber-optic internet) service contract registration — and supports all field variations needed for new registrations, transfers, and cancellations. Key conditional logic exists for three fields (sysid, mskm_dtl_no, seiky_kei_no) that fall back to work-map lookups (`getKeishaWorkMapValue`, `getMskmWorkMapValue`, `getSkkWorkMapValue`) when the primary input map lacks the value, reflecting cross-module coordination for shared customer and billing data. The method has no branching by service type; it processes all fields through the same mapping pipeline regardless.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START["editInEKK0091D010"]
    INIT_CAAN["Create CAANMsg template"]
    INIT_VARS["Initialize inMap, inList"]
    SET_TEMPLATEID["Set TEMPLATEID from fixedText"]
    SET_FUNC_CODE["Set FUNC_CODE to default 1"]
    GET_CONTROL["Read control map data"]
    SET_CONTROL["Set OPERATOR_ID, OPERATE_DATE, OPERATE_DATETIME"]
    GET_USER_DATA["Get userData HashMap from param"]
    OVERWRITE_FUNC["Override FUNC_CODE from inMap"]
    MAP_SVC_CD["Map svc_cd to SVC_CD"]
    MAP_SYSID["Map sysid to SYSID"]
    MAP_MSKM["Map mskm_dtl_no to MSKM_DTL_NO"]
    MAP_OTHERS["Map remaining service fields"]
    MAP_SEIKY["Map seiky_kei_no to SEIKY_KEI_NO"]
    MAP_STAGING["Map staging fields"]
    MAP_MANSHO["Map mans_skbt_cd"]
    MAP_KKTK["Map kktk_sbt_cd"]
    MAP_KAISEN["Map svc_kei_kaisen_ucwk_no"]
    MAP_WAO["Map WAO fields"]
    RETURN["Return template"]

    START --> INIT_CAAN
    INIT_CAAN --> INIT_VARS
    INIT_VARS --> SET_TEMPLATEID
    SET_TEMPLATEID --> SET_FUNC_CODE
    SET_FUNC_CODE --> GET_CONTROL
    GET_CONTROL --> SET_CONTROL
    SET_CONTROL --> GET_USER_DATA
    GET_USER_DATA --> OVERWRITE_FUNC
    OVERWRITE_FUNC --> MAP_SVC_CD
    MAP_SVC_CD --> MAP_SYSID
    MAP_SYSID --> MAP_MSKM
    MAP_MSKM --> MAP_OTHERS
    MAP_OTHERS --> MAP_SEIKY
    MAP_SEIKY --> MAP_STAGING
    MAP_STAGING --> MAP_MANSHO
    MAP_MANSHO --> MAP_KKTK
    MAP_KKTK --> MAP_KAISEN
    MAP_KAISEN --> MAP_WAO
    MAP_WAO --> RETURN
```

**Processing Summary:**

The method executes in a strictly linear sequence with no loops or complex branching. Each of the ~47 field-mapping blocks follows an identical pattern: check if the source field in `inMap` is null or empty string, then either call `template.set()` with the mapped value or `template.setNull()` with the corresponding message schema constant.

**Conditional Fallback Logic:**

Three fields use nested fallback lookups:

| Field | Primary Source | Fallback Source | Logic |
|-------|---------------|-----------------|-------|
| `sysid` | `inMap.get("sysid")` | `getKeishaWorkMapValue(param, "sysid")` | If primary is empty, look up in keisha (company/phone line) work map |
| `mskm_dtl_no` | `inMap.get("mskm_dtl_no")` | `getMskmWorkMapValue(param, "ekk0091_mskm_dtl_no")` | If primary is empty, look up in mskm (mail subscription detail) work map |
| `seiky_kei_no` | `inMap.get("seiky_kei_no")` | `getSkkWorkMapValue(param, "seiky_kei_no")` | If primary is empty, look up in skk (billing) work map |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `param` | `IRequestParameterReadWrite` | Request parameter object containing user input data and control metadata. Holds the userData HashMap (keyed by `fixedText`) with all form field values from the eo Light Net registration screen, plus control map entries for operator ID, operating date, and operating time. |
| 2 | `fixedText` | `String` | Service message identifier / template ID used to locate the correct userData HashMap within `param.getData()`. Serves as a namespace key to distinguish data for different screens or operations. Used as both the TEMPLATEID value and the lookup key for the input data map. |

**External state read (instance fields / helper methods):**

| Source | Description |
|--------|-------------|
| `getKeishaWorkMapValue(param, "sysid")` | Reads phone-line/keisha work map for SYSID when primary input is empty |
| `getMskmWorkMapValue(param, "ekk0091_mskm_dtl_no")` | Reads mail-subscription-detail work map for MSKM detail number when primary input is empty |
| `getSkkWorkMapValue(param, "seiky_kei_no")` | Reads billing work map for invoice contract number when primary input is empty |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `JCKMvnoCustInfoAddCC.setNull` | JCKMvnoCustInfoAddCC | - | Calls `setNull` in `JCKMvnoCustInfoAddCC` |
| R | `JFUAddSvcKeiNetCC.getKeishaWorkMapValue` | JFUAddSvcKeiNetCC | - | Calls `getKeishaWorkMapValue` in `JFUAddSvcKeiNetCC` for sysid fallback |
| R | `JFUAddSvcKeiNetCC.getMskmWorkMapValue` | JFUAddSvcKeiNetCC | - | Calls `getMskmWorkMapValue` in `JFUAddSvcKeiNetCC` for mskm_dtl_no fallback |
| R | `JFUAddSvcKeiNetCC.getSkkWorkMapValue` | JFUAddSvcKeiNetCC | - | Calls `getSkkWorkMapValue` in `JFUAddSvcKeiNetCC` for seiky_kei_no fallback |
| R | `JFUeoTelOpTransferCC.getData` | JFUeoTelOpTransferCC | - | Calls `getData` in `JFUeoTelOpTransferCC` |
| R | `JFUTransferCC.getData` | JFUTransferCC | - | Calls `getData` in `JFUTransferCC` |
| R | `JFUTransferListToListCC.getData` | JFUTransferListToListCC | - | Calls `getData` in `JFUTransferListToListCC` |
| - | `JKKKapKeiInfoCancelCC.setNull` | JKKKapKeiInfoCancelCC | - | Calls `setNull` in `JKKKapKeiInfoCancelCC` |
| - | `JKKKikiModelKappuInfoCC.setNull` | JKKKikiModelKappuInfoCC | - | Calls `setNull` in `JKKKikiModelKappuInfoCC` |
| - | `JKKKisnUwHmdkAddCC.setNull` | JKKKisnUwHmdkAddCC | - | Calls `setNull` in `JKKKisnUwHmdkAddCC` |
| - | `JKKMvnoSvcKeiStaAddCC.setNull` | JKKMvnoSvcKeiStaAddCC | - | Calls `setNull` in `JKKMvnoSvcKeiStaAddCC` |
| R | `KKW12701SFLogic.getData` | KKW12701SFLogic | - | Calls `getData` in `KKW12701SFLogic` |
| R | `SCW00701SFLogic.getName` | SCW00701SFLogic | - | Calls `getName` in `SCW00701SFLogic` |

### Direct method calls within `editInEKK0091D010`:

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `IRequestParameterReadWrite.getData` | - | - | Reads userData HashMap from param using fixedText as key |
| R | `IRequestParameterReadWrite.getControlMapData` | - | - | Reads control map entries (operator ID, operating date, operating time) |
| R | `JFUAddSvcKeiNetCC.getKeishaWorkMapValue` | - | - | Fallback lookup for sysid in keisha (phone line) work map |
| R | `JFUAddSvcKeiNetCC.getMskmWorkMapValue` | - | - | Fallback lookup for mskm_dtl_no in mskm (mail subscription detail) work map |
| R | `JFUAddSvcKeiNetCC.getSkkWorkMapValue` | - | - | Fallback lookup for seiky_kei_no in skk (billing) work map |
| SET | `CAANMsg.set` / `CAANMsg.setNull` | EKK0091D010CBS | EKK0091D010CBSMsg schema | Sets or nulls each mapped field onto the CAANMsg template (47 fields total) |

**Notes:**
- This method is a **pure mapping/transform** method — it does not execute any DB operations or invoke CBS endpoints. It builds a structured message object.
- The `template.set()` / `template.setNull()` calls populate the `CAANMsg` which conforms to the `EKK0091D010CBSMsg` schema. The CBS layer (separate method) receives this message and performs the actual database operations.
- The three fallback helper methods (`getKeishaWorkMapValue`, `getMskmWorkMapValue`, `getSkkWorkMapValue`) are private/local methods within `JFUAddSvcKeiNetCC` that read from session-scoped work maps.

## 5. Dependency Trace

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

No screen/batch entry points found within 8 hops. Direct callers found: 4 methods.
Terminal operations from this method: `setNull` [-], `setNull` [-], `setNull` [-], `setNull` [-], `setNull` [-], `setNull` [-], `setNull` [-], `setNull` [-], `setNull` [-], `setNull` [-]

Trace who calls this method and what this method ultimately calls.

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | `JFUAddSvcKeiNetCC.addNetTrk()` | `addNetTrk()` -> `editInEKK0091D010` | `CAANMsg template` (message builder, no DB) |
| 2 | `JFUAddSvcKeiNetCC.getInvokeCBS()` | `getInvokeCBS()` -> `editInEKK0091D010` | `CAANMsg template` (message builder, no DB) |

**Notes:**
- This method is `private` — it is only called internally by other methods in `JFUAddSvcKeiNetCC`.
- It is called from `addNetTrk()` (service track registration) and `getInvokeCBS()` (CBS invocation getter), both of which are called by screen entry points.
- The method itself produces no terminal DB operations; it returns a `CAANMsg` that is passed to the CBS layer for persistence.

## 6. Per-Branch Detail Blocks

### Block 1 — Initialization (L462)

> Creates the CAANMsg template object and initializes local variables.

| # | Type | Code |
|---|------|------|
| 1 | INIT | `CAANMsg template = new CAANMsg(EKK0091D010CBSMsg.class.getName())` |
| 2 | SET | `CAANMsg[] templateArray = null` |
| 3 | SET | `HashMap inMap = null` |
| 4 | SET | `ArrayList inList = null` |

### Block 2 — Template Header Setup (L467–L484)

> Sets the template ID, default function code, and control metadata (operator, date, time) onto the template message.

| # | Type | Code |
|---|------|------|
| 1 | SET | `template.set(EKK0091D010CBSMsg.TEMPLATEID, fixedText)` // Template ID from service message [fixedText param] |
| 2 | SET | `template.set(EKK0091D010CBSMsg.FUNC_CODE, "1")` // FUNC_CODE default: "1" [Javadoc comment: "機能コード（デフォルト：1")] |
| 3 | GET | `Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID)` // Read operator ID from control map |
| 4 | SET | `template.set(JCMConstants.OPERATOR_ID_KEY, operatorId)` |
| 5 | GET | `Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE)` // Read operating date |
| 6 | SET | `template.set(JCMConstants.OPERATE_DATE_KEY, operateDate)` |
| 7 | GET | `Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME)` // Read operating time |
| 8 | SET | `template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime)` |

### Block 3 — Load Input Data Map (L486)

> Retrieves the HashMap of user-provided form data keyed by `fixedText`.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `inMap = (HashMap)(param.getData(fixedText))` // Load user data HashMap from param [Javadoc: "ユーザデータ情報"] |

### Block 4 — Override FUNC_CODE if Present (L488–L491)

> If the input map contains a FUNC_CODE_KEY value, override the default "1".

| # | Type | Code |
|---|------|------|
| 1 | IF | `inMap.get(JCMConstants.FUNC_CODE_KEY) != null` [FUNC_CODE_KEY constant] |
| 2 | SET | `template.set(EKK0091D010CBSMsg.FUNC_CODE, inMap.get(JCMConstants.FUNC_CODE_KEY))` // Override with input value |

### Block 5 — Map svc_cd (L493–L502)

> Maps service code. No fallback — just set or null.

| # | Type | Code |
|---|------|------|
| 1 | IF | `inMap == null \|\| inMap.get("svc_cd") == null \|\| "".equals(inMap.get("svc_cd"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.SVC_CD)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.SVC_CD, (String)inMap.get("svc_cd"))` |

### Block 6 — Map sysid with Fallback (L504–L524)

> Maps SYSID. If not in primary input, falls back to keisha (phone-line) work map. [v1.00.00 addition]

| # | Type | Code |
|---|------|------|
| 1 | IF | `inMap == null \|\| inMap.get("sysid") == null \|\| "".equals(inMap.get("sysid"))` |
| 2 | EXEC | `String sysid = getKeishaWorkMapValue(param, "sysid")` // v1.00.00 ADD-START: fallback to work map [Javadoc: "お客様登録.SYSID"] |
| 3 | IF | `sysid == null` |
| 4 | SET | `template.setNull(EKK0091D010CBSMsg.SYSID)` |
| 5 | ELSE | (set value) |
| 6 | SET | `template.set(EKK0091D010CBSMsg.SYSID, sysid)` |
| 7 | ELSE (outer) | (input map has sysid) |
| 8 | SET | `template.set(EKK0091D010CBSMsg.SYSID, (String)inMap.get("sysid"))` |

### Block 7 — Map mskm_dtl_no with Fallback (L526–L545)

> Maps application registration detail number. Falls back to mskm (mail subscription detail) work map. [v1.00.00 addition]

| # | Type | Code |
|---|------|------|
| 1 | IF | `inMap == null \|\| inMap.get("mskm_dtl_no") == null \|\| "".equals(inMap.get("mskm_dtl_no"))` |
| 2 | EXEC | `String mskm_dtl_no = getMskmWorkMapValue(param, "ekk0091_mskm_dtl_no")` // v1.00.00 ADD-START [Javadoc: "申込登録.申込登録明細番号"] |
| 3 | IF | `mskm_dtl_no == null` |
| 4 | SET | `template.setNull(EKK0091D010CBSMsg.MSKM_DTL_NO)` |
| 5 | ELSE | (set value) |
| 6 | SET | `template.set(EKK0091D010CBSMsg.MSKM_DTL_NO, mskm_dtl_no)` |
| 7 | ELSE (outer) | (input map has mskm_dtl_no) |
| 8 | SET | `template.set(EKK0091D010CBSMsg.MSKM_DTL_NO, (String)inMap.get("mskm_dtl_no"))` |

### Block 8 — Map menkaihat_anken_no (L547–L556)

> Maps face-open development project number. [Javadoc: "サービス契約<eo光ネット>登録.面開発案件番号"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("menkaihat_anken_no"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.MENKAIHAT_ANKEN_NO)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.MENKAIHAT_ANKEN_NO, (String)inMap.get("menkaihat_anken_no"))` |

### Block 9 — Map prc_grp_cd (L558–L567)

> Maps pricing group code. [Javadoc: "サービス契約<eo光ネット>登録.料金グループコード"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("prc_grp_cd"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.PRC_GRP_CD)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.PRC_GRP_CD, (String)inMap.get("prc_grp_cd"))` |

### Block 10 — Map pcrs_cd (L569–L578)

> Maps pricing course code. [Javadoc: "サービス契約<eo光ネット>登録.料金コースコード"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("pcrs_cd"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.PCRS_CD)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.PCRS_CD, (String)inMap.get("pcrs_cd"))` |

### Block 11 — Map pplan_cd (L580–L589)

> Maps pricing plan code. [Javadoc: "サービス契約<eo光ネット>登録.料金プランコード"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("pplan_cd"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.PPLAN_CD)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.PPLAN_CD, (String)inMap.get("pplan_cd"))` |

### Block 12 — Map tk_hoshiki_kei_no (L591–L600)

> Maps provider method contract number. [Javadoc: "サービス契約<eo光ネット>登録.提供方法契約番号"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("tk_hoshiki_kei_no"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.TK_HOSHIKI_KEI_NO)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.TK_HOSHIKI_KEI_NO, (String)inMap.get("tk_hoshiki_kei_no"))` |

### Block 13 — Map svc_use_sta_kibo_ymd (L602–L611)

> Maps desired service start date. [Javadoc: "サービス契約<eo光ネット>登録.サービス利用開始希望年月日"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("svc_use_sta_kibo_ymd"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.SVC_USE_STA_KIBO_YMD)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.SVC_USE_STA_KIBO_YMD, (String)inMap.get("svc_use_sta_kibo_ymd"))` |

### Block 14 — Map rsv_tsta_kibo_ymd (L613–L622)

> Maps desired reservation application start date. [Javadoc: "サービス契約<eo光ネット>登録.予約適用開始希望年月日"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("rsv_tsta_kibo_ymd"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.RSV_TSTA_KIBO_YMD)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.RSV_TSTA_KIBO_YMD, (String)inMap.get("rsv_tsta_kibo_ymd"))` |

### Block 15 — Map id_sokhosho_output_yh (L624–L633)

> Maps ID notice output requirement flag. [Javadoc: "サービス契約<eo光ネット>登録.ID速報書出力要否"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("id_sokhosho_output_yh"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.ID_SOKHOSHO_OUTPUT_YH)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.ID_SOKHOSHO_OUTPUT_YH, (String)inMap.get("id_sokhosho_output_yh"))` |

### Block 16 — Map payway_keizoku_flg (L635–L644)

> Maps payment method continuation flag. [Javadoc: "サービス契約<eo光ネット>登録.支払い方法継続フラグ"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("payway_keizoku_flg"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.PAYWAY_KEIZOKU_FLG)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.PAYWAY_KEIZOKU_FLG, (String)inMap.get("payway_keizoku_flg"))` |

### Block 17 — Map ftrial_kanyu_ymd (L646–L655)

> Maps trial addition date. [Javadoc: "サービス契約<eo光ネット>登録.試用加入年月日"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("ftrial_kanyu_ymd"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.FTRIAL_KANYU_YMD)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.FTRIAL_KANYU_YMD, (String)inMap.get("ftrial_kanyu_ymd"))` |

### Block 18 — Map ftrial_prd_endymd (L657–L666)

> Maps trial period end date. [Javadoc: "サービス契約<eo光ネット>登録.試用期間終了年月日"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("ftrial_prd_endymd"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.FTRIAL_PRD_ENDYMD)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.FTRIAL_PRD_ENDYMD, (String)inMap.get("ftrial_prd_endymd"))` |

### Block 19 — Map honkanyu_ymd (L668–L677)

> Maps actual addition date. [Javadoc: "サービス契約<eo光ネット>登録.本加入年月日"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("honkanyu_ymd"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.HONKANYU_YMD)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.HONKANYU_YMD, (String)inMap.get("honkanyu_ymd"))` |

### Block 20 — Map honkanyu_iko_kigen_ymd (L679–L688)

> Maps actual addition migration deadline. [Javadoc: "サービス契約<eo光ネット>登録.本加入移行期限年月日"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("honkanyu_iko_kigen_ymd"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.HONKANYU_IKO_KIGEN_YMD)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.HONKANYU_IKO_KIGEN_YMD, (String)inMap.get("honkanyu_iko_kigen_ymd"))` |

### Block 21 — Map letter_hasso_shiwake_div (L690–L699)

> Maps letter dispatch work classification. [Javadoc: "サービス契約<eo光ネット>登録.メール発送仕区分"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("letter_hasso_shiwake_div"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.LETTER_HASSO_SHIWAKE_DIV)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.LETTER_HASSO_SHIWAKE_DIV, (String)inMap.get("letter_hasso_shiwake_div"))` |

### Block 22 — Map thnx_letter_shs_cd (L701–L710)

> Maps thank-you letter delivery destination code. [Javadoc: "サービス契約<eo光ネット>登録.サンキューメール送付先コード"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("thnx_letter_shs_cd"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.THNX_LETTER_SHS_CD)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.THNX_LETTER_SHS_CD, (String)inMap.get("thnx_letter_shs_cd"))` |

### Block 23 — Map web_op_add_fail_flg (L712–L721)

> Maps WEB option addition impossible flag. [Javadoc: "サービス契約<eo光ネット>登録.WEBオプション追加不可フラグ"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("web_op_add_fail_flg"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.WEB_OP_ADD_FAIL_FLG)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.WEB_OP_ADD_FAIL_FLG, (String)inMap.get("web_op_add_fail_flg"))` |

### Block 24 — Map chge_mt_hojinsvkei_uk_no (L723–L732)

> Maps pre-change legal entity service contract acceptance number. [Javadoc: "サービス契約<eo光ネット>登録.変更元法人サービス契約受付番号"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("chge_mt_hojinsvkei_uk_no"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.CHGE_MT_HOJINSVKEI_UK_NO)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.CHGE_MT_HOJINSVKEI_UK_NO, (String)inMap.get("chge_mt_hojinsvkei_uk_no"))` |

### Block 25 — Map chge_mt_hojinsvkei_uk_nopt (L734–L743)

> Maps pre-change legal entity service contract acceptance number suffix. [Javadoc: "サービス契約<eo光ネット>登録.変更元法人サービス契約受付番号子"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("chge_mt_hojinsvkei_uk_nopt"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.CHGE_MT_HOJINSVKEI_UK_NOPT)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.CHGE_MT_HOJINSVKEI_UK_NOPT, (String)inMap.get("chge_mt_hojinsvkei_uk_nopt"))` |

### Block 26 — Map pnlty_hassei_cd (L745–L754)

> Maps penalty occurrence code. [Javadoc: "サービス契約<eo光ネット>登録.違約金発生コード"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("pnlty_hassei_cd"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.PNLTY_HASSEI_CD)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.PNLTY_HASSEI_CD, (String)inMap.get("pnlty_hassei_cd"))` |

### Block 27 — Map ido_div (L756–L765)

> Maps movement classification (transfer/move type). [Javadoc: "サービス契約<eo光ネット>登録.異動区分"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("ido_div"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.IDO_DIV)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.IDO_DIV, (String)inMap.get("ido_div"))` |

### Block 28 — Map intr_cd (L767–L776)

> Maps introduction/referral code. [Javadoc: "サービス契約<eo光ネット>登録.紹介コード"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("intr_cd"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.INTR_CD)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.INTR_CD, (String)inMap.get("intr_cd"))` |

### Block 29 — Map work_rrk_biko (staging) (L778–L787)

> Maps business coordination memo. Uses string literal field name (not message constant). [Javadoc: "サービス契約<eo光ネット>登録.業務連絡備考"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("work_rrk_biko"))` |
| 2 | SET | `template.setNull("work_rrk_biko")` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set("work_rrk_biko", (String)inMap.get("work_rrk_biko"))` |

### Block 30 — Map auto_shosa_tran_stat_cd (L789–L798)

> Maps automatic inspection processing status code. [Javadoc: "サービス契約<eo光ネット>登録.自動照会処理状態コード"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("auto_shosa_tran_stat_cd"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.AUTO_SHOSA_TRAN_STAT_CD)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.AUTO_SHOSA_TRAN_STAT_CD, (String)inMap.get("auto_shosa_tran_stat_cd"))` |

### Block 31 — Map kotei_ip_ad_hktgi_um (L800–L809)

> Maps fixed IP address continuation flag. [Javadoc: "サービス契約<eo光ネット>登録.固定IPアドレス引継ぎ有無"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("kotei_ip_ad_hktgi_um"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.KOTEI_IP_AD_HKTGI_UM)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.KOTEI_IP_AD_HKTGI_UM, (String)inMap.get("kotei_ip_ad_hktgi_um"))` |

### Block 32 — Map pc_pack_um (L811–L820)

> Maps PC pack existence flag. [Javadoc: "サービス契約<eo光ネット>登録.PCパック有無"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("pc_pack_um"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.PC_PACK_UM)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.PC_PACK_UM, (String)inMap.get("pc_pack_um"))` |

### Block 33 — Map cust_nova_use_um (L822–L831)

> Maps customer NOVA usage flag. [Javadoc: "サービス契約<eo光ネット>登録.お客様NOVA利用有無"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("cust_nova_use_um"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.CUST_NOVA_USE_UM)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.CUST_NOVA_USE_UM, (String)inMap.get("cust_nova_use_um"))` |

### Block 34 — Map seiky_kei_no with Fallback (L833–L854)

> Maps invoice contract number. Falls back to SKK (billing) work map if primary is empty. [v1.00.00 addition]

| # | Type | Code |
|---|------|------|
| 1 | IF | `inMap == null \|\| inMap.get("seiky_kei_no") == null \|\| "".equals(inMap.get("seiky_kei_no"))` |
| 2 | EXEC | `if (getSkkWorkMapValue(param, "seiky_kei_no") == null)` // v1.00.00 ADD-START: fallback to billing work map |
| 3 | SET | `template.setNull(EKK0091D010CBSMsg.SEIKY_KEI_NO)` |
| 4 | ELSE | (set value from work map) |
| 5 | SET | `template.set(EKK0091D010CBSMsg.SEIKY_KEI_NO, getSkkWorkMapValue(param, "seiky_kei_no"))` |
| 6 | ELSE (outer) | (input map has seiky_kei_no) |
| 7 | SET | `template.set("seiky_kei_no", (String)inMap.get("seiky_kei_no"))` |

### Block 35 — Map prc_kmk_cd (staging) (L856–L865)

> Maps pricing item code. Uses string literal. [Javadoc: "サービス契約<eo光ネット>登録.料金項目コード"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("prc_kmk_cd"))` |
| 2 | SET | `template.setNull("prc_kmk_cd")` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set("prc_kmk_cd", (String)inMap.get("prc_kmk_cd"))` |

### Block 36 — Map chrg_sta_ymd_hosei_um (staging) (L867–L876)

> Maps charge start date correction existence flag. Uses string literal. [Javadoc: "サービス契約<eo光ネット>登録.課金開始年月日補正有無"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("chrg_sta_ymd_hosei_um"))` |
| 2 | SET | `template.setNull("chrg_sta_ymd_hosei_um")` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set("chrg_sta_ymd_hosei_um", (String)inMap.get("chrg_sta_ymd_hosei_um"))` |

### Block 37 — Map rule0079_auto_aply (staging) (L878–L887)

> Maps labor charge auto-application flag. Uses string literal. [Javadoc: "サービス契約<eo光ネット>登録.工事費自動適用要否"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("rule0079_auto_aply"))` |
| 2 | SET | `template.setNull("rule0079_auto_aply")` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set("rule0079_auto_aply", (String)inMap.get("rule0079_auto_aply"))` |

### Block 38 — Map rule0059_auto_aply (staging) (L889–L898)

> Maps service fee auto-application flag. Uses string literal. [Javadoc: "サービス契約<eo光ネット>登録.事務手数料自動適用要否"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("rule0059_auto_aply"))` |
| 2 | SET | `template.setNull("rule0059_auto_aply")` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set("rule0059_auto_aply", (String)inMap.get("rule0059_auto_aply"))` |

### Block 39 — Map mans_skbt_cd (2012/11/06 IT1-2012-0001983) (L900–L909)

> Maps manifestation identification code. Added in IT1-2012-0001983 by Y.Saitou. [Javadoc: "サービス契約<eo光ネット>登録.マンスニング識別コード"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("mans_skbt_cd"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.MANS_SKBT_CD)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.MANS_SKBT_CD, (String)inMap.get("mans_skbt_cd"))` |

### Block 40 — Map kktk_sbt_cd (ST2-2013-0001613) (L911–L920)

> Maps device provision type code. Added in I/F change for EKK0091D010/EKK0111D010. [Javadoc: "サービス契約<eo光ネット>登録.機器提供種別コード"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("kktk_sbt_cd"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.KKTK_SBT_CD)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.KKTK_SBT_CD, (String)inMap.get("kktk_sbt_cd"))` |

### Block 41 — Map svc_kei_kaisen_ucwk_no (ST2-2013-0001613) (L922–L931)

> Maps service contract withdrawal detail number. Added in I/F change. [Javadoc: "サービス契約<eo光ネット>登録.サービス契約回線内訳番号"]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("svc_kei_kaisen_ucwk_no"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.SVC_KEI_KAISEN_UCWK_NO)` |
| 3 | ELSE | (set value) |
| 4 | SET | `template.set(EKK0091D010CBSMsg.SVC_KEI_KAISEN_UCWK_NO, (String)inMap.get("svc_kei_kaisen_ucwk_no"))` |

### Block 42 — Map WAO fields (ANK-4427-00-00) (L933–L996)

> Maps 12 WAO (Work Assignment Order) fields: 3 desired dates, 3 desired time zones, transfer classification, transfer commitment number, validity period, and address memo. [Javadoc: "サービス契約<eo光ネット>登録.WAO..."]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(inMap.get("wao_koji_kibo_ymd_1"))` |
| 2 | SET | `template.setNull(EKK0091D010CBSMsg.WAO_KOJI_KIBO_YMD_1)` // WAO desired date 1 |
| 3 | ELSE | `template.set(EKK0091D010CBSMsg.WAO_KOJI_KIBO_YMD_1, (String)inMap.get("wao_koji_kibo_ymd_1"))` |
| 4 | IF | `"".equals(inMap.get("wao_koji_kibo_timez_1"))` |
| 5 | SET | `template.setNull(EKK0091D010CBSMsg.WAO_KOJI_KIBO_TIMEZ_1)` // WAO desired time zone 1 |
| 6 | ELSE | `template.set(EKK0091D010CBSMsg.WAO_KOJI_KIBO_TIMEZ_1, (String)inMap.get("wao_koji_kibo_timez_1"))` |
| 7 | IF | `"".equals(inMap.get("wao_koji_kibo_ymd_2"))` |
| 8 | SET | `template.setNull(EKK0091D010CBSMsg.WAO_KOJI_KIBO_YMD_2)` // WAO desired date 2 |
| 9 | ELSE | `template.set(EKK0091D010CBSMsg.WAO_KOJI_KIBO_YMD_2, (String)inMap.get("wao_koji_kibo_ymd_2"))` |
| 10 | IF | `"".equals(inMap.get("wao_koji_kibo_timez_2"))` |
| 11 | SET | `template.setNull(EKK0091D010CBSMsg.WAO_KOJI_KIBO_TIMEZ_2)` // WAO desired time zone 2 |
| 12 | ELSE | `template.set(EKK0091D010CBSMsg.WAO_KOJI_KIBO_TIMEZ_2, (String)inMap.get("wao_koji_kibo_timez_2"))` |
| 13 | IF | `"".equals(inMap.get("wao_koji_kibo_ymd_3"))` |
| 14 | SET | `template.setNull(EKK0091D010CBSMsg.WAO_KOJI_KIBO_YMD_3)` // WAO desired date 3 |
| 15 | ELSE | `template.set(EKK0091D010CBSMsg.WAO_KOJI_KIBO_YMD_3, (String)inMap.get("wao_koji_kibo_ymd_3"))` |
| 16 | IF | `"".equals(inMap.get("wao_koji_kibo_timez_3"))` |
| 17 | SET | `template.setNull(EKK0091D010CBSMsg.WAO_KOJI_KIBO_TIMEZ_3)` // WAO desired time zone 3 |
| 18 | ELSE | `template.set(EKK0091D010CBSMsg.WAO_KOJI_KIBO_TIMEZ_3, (String)inMap.get("wao_koji_kibo_timez_3"))` |
| 19 | IF | `"".equals(inMap.get("wao_tenyo_div"))` |
| 20 | SET | `template.setNull(EKK0091D010CBSMsg.WAO_TENYO_DIV)` // WAO transfer classification |
| 21 | ELSE | `template.set(EKK0091D010CBSMsg.WAO_TENYO_DIV, (String)inMap.get("wao_tenyo_div"))` |
| 22 | IF | `"".equals(inMap.get("wao_tenyo_shodaku_no"))` |
| 23 | SET | `template.setNull(EKK0091D010CBSMsg.WAO_TENYO_SHODAKU_NO)` // WAO transfer commitment number |
| 24 | ELSE | `template.set(EKK0091D010CBSMsg.WAO_TENYO_SHODAKU_NO, (String)inMap.get("wao_tenyo_shodaku_no"))` |
| 25 | IF | `"".equals(inMap.get("wao_yk_kigen"))` |
| 26 | SET | `template.setNull(EKK0091D010CBSMsg.WAO_YK_KIGEN)` // WAO validity period |
| 27 | ELSE | `template.set(EKK0091D010CBSMsg.WAO_YK_KIGEN, (String)inMap.get("wao_yk_kigen"))` |
| 28 | IF | `"".equals(inMap.get("wao_ad_bnchi_memo"))` |
| 29 | SET | `template.setNull(EKK0091D010CBSMsg.WAO_AD_BNCHI_MEMO)` // WAO address memo |
| 30 | ELSE | `template.set(EKK0091D010CBSMsg.WAO_AD_BNCHI_MEMO, (String)inMap.get("wao_ad_bnchi_memo"))` |

### Block 43 — Return (L997)

> Returns the fully populated CAANMsg template.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return template` |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `svc_cd` | Field | Service code — identifies the service type (eo Light Net FTTH service) |
| `svc_kei_ucwk_no` | Field | Service detail work number — internal tracking ID for service contract line items |
| `sysid` | Field | SYSID — customer/system identifier from customer registration |
| `mskm_dtl_no` | Field | Application registration detail number — unique number for mail subscription registration details |
| `ekk0091_mskm_dtl_no` | Field | Work map key for mskm detail number in EKK0091 context |
| `menkaihat_anken_no` | Field | Face-open development project number — project reference for new construction/opening |
| `prc_grp_cd` | Field | Pricing group code — billing tier/group classification |
| `pcrs_cd` | Field | Pricing course code — specific pricing plan/course |
| `pplan_cd` | Field | Pricing plan code — detailed pricing plan identifier |
| `tk_hoshiki_kei_no` | Field | Provider method contract number — contract number for the provisioning method |
| `svc_use_sta_kibo_ymd` | Field | Service use start desired date — customer's preferred service activation date (YYYYMMDD) |
| `rsv_tsta_kibo_ymd` | Field | Reservation application start desired date — preferred start date for reservation application |
| `id_sokhosho_output_yh` | Field | ID notice output flag — whether to output ID notification |
| `payway_keizoku_flg` | Field | Payment method continuation flag — whether to continue existing payment method |
| `ftrial_kanyu_ymd` | Field | Trial addition date — start date of trial period (YYYYMMDD) |
| `ftrial_prd_endymd` | Field | Trial period end date — end date of trial period (YYYYMMDD) |
| `honkanyu_ymd` | Field | Actual addition date — date of正式 service activation (YYYYMMDD) |
| `honkanyu_iko_kigen_ymd` | Field | Actual addition migration deadline — deadline for migrating to正式 service (YYYYMMDD) |
| `letter_hasso_shiwake_div` | Field | Mail dispatch work classification — how to dispatch mail notices |
| `thnx_letter_shs_cd` | Field | Thank-you letter delivery destination code — where to send thank-you letter |
| `web_op_add_fail_flg` | Field | WEB option addition impossible flag — whether WEB options cannot be added |
| `chge_mt_hojinsvkei_uk_no` | Field | Pre-change legal entity service contract acceptance number — contract number before legal entity change |
| `chge_mt_hojinsvkei_uk_nopt` | Field | Pre-change legal entity service contract acceptance number suffix — suffix of pre-change number |
| `pnlty_hassei_cd` | Field | Penalty occurrence code — code indicating if/when penalty was charged |
| `ido_div` | Field | Movement classification — transfer/move type (e.g., new, transfer, cancellation) |
| `intr_cd` | Field | Introduction/referral code — how the customer was referred |
| `work_rrk_biko` | Field | Business coordination memo — internal memo for business coordination |
| `auto_shosa_tran_stat_cd` | Field | Automatic inspection processing status code — status of automatic verification/inspection |
| `kotei_ip_ad_hktgi_um` | Field | Fixed IP address continuation flag — whether to retain the existing fixed IP address |
| `pc_pack_um` | Field | PC pack existence flag — whether a PC pack (internet package) is included |
| `cust_nova_use_um` | Field | Customer NOVA usage flag — whether the customer uses NOVA (Fujitsu's internal service platform) |
| `seiky_kei_no` | Field | Invoice contract number — billing/invoice contract reference number |
| `prc_kmk_cd` | Field | Pricing item code — specific pricing line item |
| `chrg_sta_ymd_hosei_um` | Field | Charge start date correction flag — whether the charge start date was corrected |
| `rule0079_auto_aply` | Field | Labor charge auto-application flag — whether labor charges are automatically applied |
| `rule0059_auto_aply` | Field | Service fee auto-application flag — whether service fees are automatically applied |
| `mans_skbt_cd` | Field | Manifestation identification code — manifestation/sub-plan identification (added 2012/11/06) |
| `kktk_sbt_cd` | Field | Device provision type code — type of equipment/hardware provided (added 2013-0001613) |
| `svc_kei_kaisen_ucwk_no` | Field | Service contract withdrawal detail number — internal detail number for contract withdrawal (added 2013-0001613) |
| `wao_koji_kibo_ymd_1/2/3` | Field | WAO desired construction date 1/2/3 — preferred dates for work assignment order (YYYYMMDD) |
| `wao_koji_kibo_timez_1/2/3` | Field | WAO desired time zone 1/2/3 — preferred time windows for construction |
| `wao_tenyo_div` | Field | WAO transfer classification — type of WAO transfer/move |
| `wao_tenyo_shodaku_no` | Field | WAO transfer commitment number — reference number for WAO transfer commitment |
| `wao_yk_kigen` | Field | WAO validity period — expiration date of the WAO |
| `wao_ad_bnchi_memo` | Field | WAO address memo — memo field for WAO address details |
| EKK0091D010 | Screen/Message ID | eo Light Net Service Contract Registration CBS message interface |
| eo Light Net | Business term | Fujitsu's fiber-optic internet service (FTTH) branded as "eo Hikari Net" |
| FTTH | Acronym | Fiber To The Home — fiber-optic broadband connection |
| CAANMsg | Technical type | Fujitsu's message wrapper class for CBS communication |
| CAANSchemaInfo | Technical type | Base class for CBS message schema definition |
| EKK0091D010CBSMsg | Message schema | CBS message schema class defining all fields for eo Light Net registration |
| WAo | Acronym | Work Assignment Order — scheduling system for construction/work assignment |
| SKK | Acronym | Settlement/Billing work module — handles billing and invoicing work maps |
| MSKM | Acronym | Mail Subscription Detail — handles mail subscription registration data |
| SC ControlMapKeys | Technical | Control map key constants (OPERATOR_ID, OPE_DATE, OPE_TIME) for session metadata |
| JCMConstants | Technical | Java Common Module constants (FUNC_CODE_KEY, OPERATOR_ID_KEY, OPERATE_DATE_KEY, etc.) |
| FUNC_CODE | Field | Function code — "1" is the default value indicating registration operation |
| fixedText | Parameter | Service message identifier — used as template ID and userData HashMap lookup key |
