# Business Logic — JKKSeikyKeiHenkoCC.editInMsg_EKK1091D010() [272 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `com.fujitsu.futurity.bp.custom.common.JKKSeikyKeiHenkoCC` |
| Layer | CC (Common Component — shared business logic component) |
| Module | `common` (Package: `com.fujitsu.futurity.bp.custom.common`) |

## 1. Role

### JKKSeikyKeiHenkoCC.editInMsg_EKK1091D010()

This method constructs the progress registration message (進捗登録メッセージ) for screen EKK1091D010, which handles service contract modifications (請求契約変更). It reads progress tracking data from two map structures — `childMap` (progress registration mapping data from screen KKSv040523 and related sub-screens) and `dataMap` (control and operational metadata) — and maps each field into a strongly-typed `CAANMsg` template conforming to the `EKK1091D010CBSMsg` schema. The method implements a **builder pattern**: it delegates common-area initialization (template ID, operator ID, operate date/time) to the parent `editInMsg()` method, then incrementally populates a single main template and an optional sub-list for disruption reason details. It handles null and empty-string sentinel checks to safely propagate absent values as nulls in the output template. The resulting message structure is assembled into a `CAANMsg[]` array stored under `TEMPLATE_LIST_KEY` in the returned parameter map, ready for downstream CBS (batch service) invocation. This method serves as a **data transformation and routing utility** shared across the service contract modification domain, bridging screen-level input data with the CBS message contract.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["editInMsg_EKK1091D010(params)"])
    START --> COMMON["Set common area fields"]
    COMMON --> TMPL["Create CAANMsg template"]
    TMPL --> SETCOMMON["Set templateID, func_code, operatorID, operateDate, operateDateTime"]
    SETCOMMON --> GETWORK["Get mapping work area from param"]
    GETWORK --> SETFUNC["Set func_code from dataMap"]

    SETFUNC --> CHKMSKM{"ekk0011d020_mskm_dtl_no<br/>empty or missing?"}
    CHKMSKM -->|Yes| NULLMSKM["template.setNull(MSKM_DTL_NO)"]
    CHKMSKM -->|No| SETMSKM["template.set(MSKM_DTL_NO, value)"]
    NULLMSKM --> CHKESEIKY{"ekk0501d010_seiky_way_no_koza<br/>empty or missing?"}
    SETMSKM --> CHKESEIKY

    CHKESEIKY -->|Yes| NULLSEIKY["template.setNull(SEIKY_WAY_NO_KOZA)"]
    CHKESEIKY -->|No| SETSEIKY["template.set(SEIKY_WAY_NO_KOZA, value)"]
    NULLSEIKY --> CHKECRED{"ekk0521d010_seiky_way_no_crecard<br/>empty or missing?"}
    SETSEIKY --> CHKECRED

    CHKECRED -->|Yes| NULLCRED["template.setNull(SEIKY_WAY_NO_CRECARD)"]
    CHKECRED -->|No| SETCRED["template.set(SEIKY_WAY_NO_CRECARD, value)"]
    NULLCRED --> CHKESOIOP{"ekk0441d010_seiopsvc_kei_no<br/>empty or missing?"}
    SETCRED --> CHKESOIOP

    CHKESOIOP -->|Yes| NULLSOIOP["template.setNull(SEIOPSVC_KEI_NO)"]
    CHKESOIOP -->|No| SETSOIOP["template.set(SEIOPSVC_KEI_NO, value)"]
    NULLSOIOP --> CHKSEIKY2{"kksv040523_seiky_kei_no<br/>empty?"}
    SETSOIOP --> CHKSEIKY2

    CHKSEIKY2 -->|Yes| NULLSEIKY2["template.setNull(SEIKY_KEI_NO)"]
    CHKSEIKY2 -->|No| SETSEIKY2["template.set(SEIKY_KEI_NO, value)"]
    NULLSEIKY2 --> CHKSVC{"kksv040523_svc_kei_no<br/>empty?"}
    SETSEIKY2 --> CHKSVC

    CHKSVC -->|Yes| NULLSVC["template.setNull(SVC_KEI_NO)"]
    CHKSVC -->|No| SETSVC["template.set(SVC_KEI_NO, value)"]
    NULLSVC --> CHKSVCUCWK{"kksv040523_svc_kei_ucwk_no<br/>empty?"}
    SETSVC --> CHKSVCUCWK

    CHKSVCUCWK -->|Yes| NULLSVCUCWK["template.setNull(SVC_KEI_UCWK_NO)"]
    CHKSVCUCWK -->|No| SETSVCUCWK["template.set(SVC_KEI_UCWK_NO, value)"]
    NULLSVCUCWK --> CHKSVCRCWK{"kksv040523_svc_kei_kaisen_ucwk_no<br/>empty?"}
    SETSVCUCWK --> CHKSVCRCWK

    CHKSVCRCWK -->|Yes| NULLSVCRCWK["template.setNull(SVC_KEI_KAISEN_UCWK_NO)"]
    CHKSVCRCWK -->|No| SETSVCRCWK["template.set(SVC_KEI_KAISEN_UCWK_NO, value)"]
    NULLSVCRCWK --> CHKKKTK{"kksv040523_kktk_svc_kei_no<br/>empty?"}
    SETSVCRCWK --> CHKKKTK

    CHKKKTK -->|Yes| NULLKKTK["template.setNull(KKTK_SVC_KEI_NO)"]
    CHKKKTK -->|No| SETKKTK["template.set(KKTK_SVC_KEI_NO, value)"]
    NULLKKTK --> CHKOPSVC{"kksv040523_op_svc_kei_no<br/>empty?"}
    SETKKTK --> CHKOPSVC

    CHKOPSVC -->|Yes| NULLOPSVC["template.setNull(OP_SVC_KEI_NO)"]
    CHKOPSVC -->|No| SETOPSVC["template.set(OP_SVC_KEI_NO, value)"]
    NULLOPSVC --> CHKSBOP{"kksv040523_sbop_svc_kei_no<br/>empty?"}
    SETOPSVC --> CHKSBOP

    CHKSBOP -->|Yes| NULLSBOP["template.setNull(SBOP_SVC_KEI_NO)"]
    CHKSBOP -->|No| SETSBOP["template.set(SBOP_SVC_KEI_NO, value)"]
    NULLSBOP --> CHKWRIB{"kksv040523_wrib_svc_kei_no<br/>empty?"}
    SETSBOP --> CHKWRIB

    CHKWRIB -->|Yes| NULLWRIB["template.setNull(WRIB_SVC_KEI_NO)"]
    CHKWRIB -->|No| SETWRIB["template.set(WRIB_SVC_KEI_NO, value)"]
    NULLWRIB --> CHKIDO{"kksv040523_ido_div<br/>empty?"}
    SETWRIB --> CHKIDO

    CHKIDO -->|Yes| NULLIDO["template.setNull(IDO_DIV)"]
    CHKIDO -->|No| SETIDO["template.set(IDO_DIV, value)"]
    NULLIDO --> CHKIDODTM{"kksv040523_ido_dtm from dataMap<br/>empty?"}
    SETIDO --> CHKIDODTM

    CHKIDODTM -->|Yes| NULLIDODTM["template.setNull(IDO_DTM)"]
    CHKIDODTM -->|No| SETIDODTM["template.set(IDO_DTM, value)"]
    NULLIDODTM --> CHKPRG{"kksv040523_prg_stat<br/>empty?"}
    SETIDODTM --> CHKPRG

    CHKPRG -->|Yes| NULLPRG["template.setNull(PRG_STAT)"]
    CHKPRG -->|No| SETPRG["template.set(PRG_STAT, value)"]
    NULLPRG --> CHKFUTURE{"fFlg == '1'?"}
    SETPRG --> CHKFUTURE

    CHKFUTURE -->|Yes| SETFUTURE["Set PRG_DTM_I from rsv_apry_ymd + '000000000'"]
    CHKFUTURE -->|No| CHKPrgMemo{"kksv040523_prg_memo<br/>empty?"}
    SETFUTURE --> CHKPrgMemo

    CHKPrgMemo -->|Yes| NULLPRGMEMO["template.setNull(PRG_MEMO)"]
    CHKPrgMemo -->|No| SETPRGMEMO["template.set(PRG_MEMO, value)"]
    NULLPRGMEMO --> CHKPrgTkjk1{"kksv040523_prg_tkjk_1<br/>empty?"}
    SETPRGMEMO --> CHKPrgTkjk1

    CHKPrgTkjk1 -->|Yes| NULLPRGTKJK1["template.setNull(PRG_TKJK_1)"]
    CHKPrgTkjk1 -->|No| SETPRGTKJK1["template.set(PRG_TKJK_1, value)"]
    NULLPRGTKJK1 --> CHKPrgTkjk2{"kksv040523_prg_tkjk_2<br/>empty?"}
    SETPRGTKJK1 --> CHKPrgTkjk2

    CHKPrgTkjk2 -->|Yes| NULLPRGTKJK2["template.setNull(PRG_TKJK_2)"]
    CHKPrgTkjk2 -->|No| SETPRGTKJK2["template.set(PRG_TKJK_2, value)"]
    NULLPRGTKJK2 --> GETIDOLIST["Get inList from childMap<br/>kksv040523_EKK1091D010CBSMsg1List"]

    GETIDOLIST --> CHECKLIST{"inList == null?"}
    CHECKLIST -->|Yes| CREATELIST["Create CAANMsg[1] array<br/>with EKK1091D010CBSMsg1List"]
    CREATELIST --> CHKIDO_RSN_CD{"kksv040523_ido_rsn_cd<br/>empty?"}
    CHECKLIST -->|No| SETTEMPLATE["Set template array to main template"]
    SETTEMPLATE --> ASSEMBLE["Assemble final template array<br/>put TEMPLATE_LIST_KEY into paramMap"]

    CHKIDO_RSN_CD -->|Yes| NULLIDORSNCD["setNull(IDO_RSN_CD)"]
    CHKIDO_RSN_CD -->|No| SETIDORSNCD["set(IDO_RSN_CD, value)"]
    NULLIDORSNCD --> CHKIDO_RSN_MEMO{"kksv040523_ido_rsn_memo<br/>empty?"}
    SETIDORSNCD --> CHKIDO_RSN_MEMO

    CHKIDO_RSN_MEMO -->|Yes| NULLIDORSNMEMO["setNull(IDO_RSN_MEMO)"]
    CHKIDO_RSN_MEMO -->|No| SETIDORSNMEMO["set(IDO_RSN_MEMO, value)"]
    NULLIDORSNMEMO --> SETTEMPLATE

    ASSEMBLE --> RETURN(["Return paramMap"])
```

**Processing summary:** The method performs 17 sequential field-mapping blocks for contract identifiers and progress metadata, each following the same **empty-or-missing sentinel check** pattern: if the source value is an empty string or absent from the map, the field is set to null; otherwise the value is copied. After the contract fields, a conditional future-determination flag block (v6.00.00 addition) may append a planned execution datetime. Finally, an optional disruption reason sub-list is created only if no pre-built list exists from the caller.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `param` | `IRequestParameterReadWrite` | The request parameter object carrying the control map (operator ID, operate date/time) and the mapping work area. It serves as the primary input/output conduit — the method reads control metadata from it and returns a populated parameter map for the caller. |
| 2 | `dataMap` | `Map<String, Object>` | The top-level data map containing screen-provided metadata. Key fields include `FUNC_CODE_KEY` (function code override), `kksv040523_ido_dtm` (displacement datetime), and `kksv0405work_future_flg` (future determination flag, value "1" triggers planned datetime computation). |
| 3 | `childMap` | `HashMap<String, Object>` | The child/work map containing progress registration mapping data from screen KKSv040523 and sub-screens (EKK0011D020, EKK0501D010, EKK0521D010, EKK0441D010). It carries all the contract identifiers, status fields, and the optional disruption reason list used to populate the main message template. |

**Instance fields / external state read:**
- `TEMPLATE_ID_EKK1091D010` (constant value: `"EKK1091D010"`) — template identifier for this CBS message schema.
- `SCControlMapKeys.OPERATOR_ID`, `SCControlMapKeys.OPE_DATE`, `SCControlMapKeys.OPE_TIME` — keys for extracting control metadata from `param.getControlMapData()`.
- `JCMConstants.FUNC_CODE_KEY` — key for extracting function code from `dataMap`.
- `JCMConstants.OPERATOR_ID_KEY`, `JCMConstants.OPERATE_DATE_KEY`, `JCMConstants.OPERATE_DATETIME_KEY`, `JCMConstants.TEMPLATE_LIST_KEY` — standard framework keys for operator context and template list storage.
- `editInMsg(param)` — parent method call that initializes the common-area fields and returns the base `paramMap`.

## 4. CRUD Operations / Called Services

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| U | `JKKSeikyKeiHenkoCC.editInMsg` | - | - | Calls `editInMsg` in `JKKSeikyKeiHenkoCC` — delegates common-area parameter initialization (template ID, operator info, operate date/time) and returns the base parameter map. No direct DB operation; sets up the message envelope. |
| R | `SCW00701SFLogic.getName` | - | - | Utility method referenced in the code graph (used elsewhere in the same class for service name lookup). Not directly called in this method's 272-line body, but present in the class's dependency graph. |

**Note:** This method is primarily a **data transformation (builder)** method rather than a data access method. It does not directly perform database reads or writes. Its sole direct call is `editInMsg()` for common-area initialization. All 17 field mappings operate on `CAANMsg` in-memory objects, and the disruption reason sub-list creation builds a `CAANMsg[]` array entirely in memory. No CBS calls, SC codes, or database entities are directly accessed within this method's scope.

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | `JKKSeikyKeiHenkoCC.execEKK1091D010()` | `execEKK1091D010()` -> `editInMsg_EKK1091D010(param, dataMap, childMap)` | `editInMsg` [U], `setNull` [-] x17, `set` x17, `getName` [R] |

**Description:** This method is called exclusively by `execEKK1091D010()`, the execution entry point for screen EKK1091D010 (Service Contract Modification). The caller prepares the `dataMap` and `childMap` with progress registration data before invoking this method, then receives the populated `paramMap` back for further processing or CBS invocation.

## 6. Per-Branch Detail Blocks

**Block 1** — EXEC (L8022) `Common area initialization`

The method begins by delegating to the parent `editInMsg()` method to set up the common processing area.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `paramMap = editInMsg(param)` // Initialize common area, returns HashMap<String, Object> |

**Block 2** — EXEC (L8028) `Create message template`

Creates a new `CAANMsg` template using the `EKK1091D010CBSMsg` schema class.

| # | Type | Code |
|---|------|------|
| 1 | SET | `template = new CAANMsg(EKK1091D010CBSMsg.class.getName())` // Create typed message template |
| 2 | SET | `template.set(TEMPLATEID, "EKK1091D010")` [-> TEMPLATE_ID_EKK1091D010="EKK1091D010"] // Set template ID [テンプレートID] |
| 3 | SET | `template.set(FUNC_CODE, "1")` [Initial value] // Set default function code [機能コード] |
| 4 | EXEC | `operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID)` // Get operator ID [オペレータID] |
| 5 | SET | `template.set(OPERATOR_ID_KEY, operatorId)` // Set operator ID to template |
| 6 | EXEC | `operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE)` // Get operate date [運用日付] |
| 7 | SET | `template.set(OPERATE_DATE_KEY, operateDate)` // Set operate date to template |
| 8 | EXEC | `operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME)` // Get operate date-time [運用日時] |
| 9 | SET | `template.set(OPERATE_DATETIME_KEY, operateDateTime)` // Set operate datetime to template |
| 10 | SET | `templateArray = null` // Initialize template array [テンプレート配列] |
| 11 | SET | `inMap = null` // Initialize inMap |
| 12 | SET | `inList = null` // Initialize inList [作業領域の取得] |

**Block 3** — EXEC (L8037) `Get mapping work area and set function code`

Retrieves the mapping work area from param and sets the function code from dataMap.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `workMap = param.getMappingWorkArea()` // Get work area [作業領域の取得] |
| 2 | SET | `template.set(FUNC_CODE, dataMap.get(JCMConstants.FUNC_CODE_KEY))` // Set function code from dataMap [機能コード] |

**Block 4** — IF/ELSE (L8040) `Apply submitted detail number (EKK0011D020)` — Applied to the message detail number field [申込明細番号WORK → 申込明細番号]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(childMap.get("ekk0011d020_mskm_dtl_no")) || !childMap.containsKey("ekk0011d020_mskm_dtl_no")` [Condition: childMap value is empty or missing] |
| 1.1 | EXEC | `template.setNull(MSKM_DTL_NO)` // Set to null [申込明細番号] |
| 1.2 | ELSE | — |
| 1.3 | EXEC | `template.set(MSKM_DTL_NO, (String)childMap.get("ekk0011d020_mskm_dtl_no"))` // Copy value [申込明細番号WORK → 申込明細番号] |

**Block 5** — IF/ELSE (L8057) `Apply billing method number (bank account)` — From EKK0501D010 work [請求方法番号(口座)WORK → 請求方法番号（口座）]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(childMap.get("ekk0501d010_seiky_way_no_koza")) || !childMap.containsKey("ekk0501d010_seiky_way_no_koza")` |
| 1.1 | EXEC | `template.setNull(SEIKY_WAY_NO_KOZA)` |
| 1.2 | ELSE | — |
| 1.3 | EXEC | `template.set(SEIKY_WAY_NO_KOZA, (String)childMap.get("ekk0501d010_seiky_way_no_koza"))` |

**Block 6** — IF/ELSE (L8067) `Apply billing method number (credit card)` — From EKK0521D010 work [請求方法番号(クレジットカード)WORK → 請求方法番号（クレジットカード）]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(childMap.get("ekk0521d010_seiky_way_no_crecard")) || !childMap.containsKey("ekk0521d010_seiky_way_no_crecard")` |
| 1.1 | EXEC | `template.setNull(SEIKY_WAY_NO_CRECARD)` |
| 1.2 | ELSE | — |
| 1.3 | EXEC | `template.set(SEIKY_WAY_NO_CRECARD, (String)childMap.get("ekk0521d010_seiky_way_no_crecard"))` |

**Block 7** — IF/ELSE (L8077) `Apply billing option service contract number` — From EKK0441D010 work [請求オプションサービス契約番号WORK → 請求オプションサービス契約番号]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(childMap.get("ekk0441d010_seiopsvc_kei_no")) || !childMap.containsKey("ekk0441d010_seiopsvc_kei_no")` |
| 1.1 | EXEC | `template.setNull(SEIOPSVC_KEI_NO)` |
| 1.2 | ELSE | — |
| 1.3 | EXEC | `template.set(SEIOPSVC_KEI_NO, (String)childMap.get("ekk0441d010_seiopsvc_kei_no"))` |

**Block 8** — IF/ELSE (L8087) `Apply billing contract number` — Progress registration mapping [進捗登録マップ.請求契約番号 → 請求契約番号]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(childMap.get("kksv040523_seiky_kei_no"))` |
| 1.1 | EXEC | `template.setNull(SEIKY_KEI_NO)` |
| 1.2 | ELSE | — |
| 1.3 | EXEC | `template.set(SEIKY_KEI_NO, (String)childMap.get("kksv040523_seiky_kei_no"))` |

**Block 9** — IF/ELSE (L8096) `Apply service contract number` — Progress registration mapping [進捗登録マップ.サービス契約番号 → サービス契約番号]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(childMap.get("kksv040523_svc_kei_no"))` |
| 1.1 | EXEC | `template.setNull(SVC_KEI_NO)` |
| 1.2 | ELSE | — |
| 1.3 | EXEC | `template.set(SVC_KEI_NO, (String)childMap.get("kksv040523_svc_kei_no"))` |

**Block 10** — IF/ELSE (L8105) `Apply service contract detail number` — Progress registration mapping [進捗登録マップ.サービス契約内訳番号 → サービス契約内訳番号]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(childMap.get("kksv040523_svc_kei_ucwk_no"))` |
| 1.1 | EXEC | `template.setNull(SVC_KEI_UCWK_NO)` |
| 1.2 | ELSE | — |
| 1.3 | EXEC | `template.set(SVC_KEI_UCWK_NO, (String)childMap.get("kksv040523_svc_kei_ucwk_no"))` |

**Block 11** — IF/ELSE (L8114) `Apply service contract line detail number` — Progress registration mapping [進捗登録マップ.サービス契約回線内訳番号 → サービス契約回線内訳番号]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(childMap.get("kksv040523_svc_kei_kaisen_ucwk_no"))` |
| 1.1 | EXEC | `template.setNull(SVC_KEI_KAISEN_UCWK_NO)` |
| 1.2 | ELSE | — |
| 1.3 | EXEC | `template.set(SVC_KEI_KAISEN_UCWK_NO, (String)childMap.get("kksv040523_svc_kei_kaisen_ucwk_no"))` |

**Block 12** — IF/ELSE (L8123) `Apply device provider service contract number` — Progress registration mapping [進捗登録マップ.機器提供サービス契約番号 → 機器提供サービス契約番号]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(childMap.get("kksv040523_kktk_svc_kei_no"))` |
| 1.1 | EXEC | `template.setNull(KKTK_SVC_KEI_NO)` |
| 1.2 | ELSE | — |
| 1.3 | EXEC | `template.set(KKTK_SVC_KEI_NO, (String)childMap.get("kksv040523_kktk_svc_kei_no"))` |

**Block 13** — IF/ELSE (L8132) `Apply option service contract number` — Progress registration mapping [進捗登録マップ.オプションサービス契約番号 → オプションサービス契約番号]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(childMap.get("kksv040523_op_svc_kei_no"))` |
| 1.1 | EXEC | `template.setNull(OP_SVC_KEI_NO)` |
| 1.2 | ELSE | — |
| 1.3 | EXEC | `template.set(OP_SVC_KEI_NO, (String)childMap.get("kksv040523_op_svc_kei_no"))` |

**Block 14** — IF/ELSE (L8141) `Apply sub-option service contract number` — Progress registration mapping [進捗登録マップ.サブオプションサービス契約番号 → サブオプションサービス契約番号]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(childMap.get("kksv040523_sbop_svc_kei_no"))` |
| 1.1 | EXEC | `template.setNull(SBOP_SVC_KEI_NO)` |
| 1.2 | ELSE | — |
| 1.3 | EXEC | `template.set(SBOP_SVC_KEI_NO, (String)childMap.get("kksv040523_sbop_svc_kei_no"))` |

**Block 15** — IF/ELSE (L8150) `Apply discount service contract number` — Progress registration mapping [進捗登録マップ.割引サービス契約番号 → 割引サービス契約番号]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(childMap.get("kksv040523_wrib_svc_kei_no"))` |
| 1.1 | EXEC | `template.setNull(WRIB_SVC_KEI_NO)` |
| 1.2 | ELSE | — |
| 1.3 | EXEC | `template.set(WRIB_SVC_KEI_NO, (String)childMap.get("kksv040523_wrib_svc_kei_no"))` |

**Block 16** — IF/ELSE (L8159) `Apply displacement division` — Progress registration mapping [進捗登録マップ.異動区分 → 異動区分]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(childMap.get("kksv040523_ido_div"))` |
| 1.1 | EXEC | `template.setNull(IDO_DIV)` |
| 1.2 | ELSE | — |
| 1.3 | EXEC | `template.set(IDO_DIV, (String)childMap.get("kksv040523_ido_div"))` |

**Block 17** — IF/ELSE (L8169) `Apply displacement date-time` — Progress registration mapping (from dataMap) [進捗登録マップ.異動年月日時分秒 → 異動年月日時分秒]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(dataMap.get("kksv040523_ido_dtm"))` |
| 1.1 | EXEC | `template.setNull(IDO_DTM)` |
| 1.2 | ELSE | — |
| 1.3 | EXEC | `template.set(IDO_DTM, (String)dataMap.get("kksv040523_ido_dtm"))` |

**Block 18** — IF/ELSE (L8179) `Apply progress status` — Progress registration mapping [進捗登録マップ.進捗ステータス → 進捗ステータス]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(childMap.get("kksv040523_prg_stat"))` |
| 1.1 | EXEC | `template.setNull(PRG_STAT)` |
| 1.2 | ELSE | — |
| 1.3 | EXEC | `template.set(PRG_STAT, (String)childMap.get("kksv040523_prg_stat"))` |

**Block 19** — IF/ELSE (L8189) `Future determination flag check (v6.00.00 addition)` — 未来判定フラグ

| # | Type | Code |
|---|------|------|
| 1 | SET | `fFlg = (String)dataMap.get("kksv0405work_future_flg")` // Future determination flag [未来判定フラグ] |
| 1.1 | IF | `"1".equals(fFlg)` [Future determination flag = "1" (future mode)] |
| 1.1.1 | SET | `rsv_apry_ymd = (String)dataMap.get("rsv_apry_ymd")` // Application year-month-day [適用年月日] |
| 1.1.2 | SET | `template.set(PRG_DTM_I, rsv_apry_ymd + "000000000")` // Progress datetime input [進捗年月日時分秒（入力）] = ymd + "000000000" |

**Block 20** — IF/ELSE (L8207) `Apply progress memo` — Progress registration mapping [進捗登録マップ.進捗メモ → 進捗メモ]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(childMap.get("kksv040523_prg_memo"))` |
| 1.1 | EXEC | `template.setNull(PRG_MEMO)` |
| 1.2 | ELSE | — |
| 1.3 | EXEC | `template.set(PRG_MEMO, (String)childMap.get("kksv040523_prg_memo"))` |

**Block 21** — IF/ELSE (L8216) `Apply progress special item 1` — Progress registration mapping [進捗登録マップ.進捗特記事項1 → 進捗特記事項1]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(childMap.get("kksv040523_prg_tkjk_1"))` |
| 1.1 | EXEC | `template.setNull(PRG_TKJK_1)` |
| 1.2 | ELSE | — |
| 1.3 | EXEC | `template.set(PRG_TKJK_1, (String)childMap.get("kksv040523_prg_tkjk_1"))` |

**Block 22** — IF/ELSE (L8225) `Apply progress special item 2` — Progress registration mapping [進捗登録マップ.進捗特記事項2 → 進捗特記事項2]

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(childMap.get("kksv040523_prg_tkjk_2"))` |
| 1.1 | EXEC | `template.setNull(PRG_TKJK_2)` |
| 1.2 | ELSE | — |
| 1.3 | EXEC | `template.set(PRG_TKJK_2, (String)childMap.get("kksv040523_prg_tkjk_2"))` |

**Block 23** — IF/ELSE (L8234) `Get disruption reason detail list` — 異動理由詳細 [Retrieves kksv040523_EKK1091D010CBSMsg1List from childMap]

| # | Type | Code |
|---|------|------|
| 1 | SET | `inList = (ArrayList)childMap.get("kksv040523_EKK1091D010CBSMsg1List")` // Disruption reason detail list [異動理由詳細] |
| 1.1 | IF | `inList == null` [Disruption reason list not pre-provided — must build from individual fields] |
| 1.1.1 | SET | `templateArray = new CAANMsg[1]` |
| 1.1.2 | SET | `templateArray[0] = new CAANMsg(EKK1091D010CBSMsg1List.class.getName())` // Create sub-list template [異動理由詳細] |
| 1.1.3 | IF/ELSE (L8240) `Apply disruption reason code` [進捗登録マップ.異動理由コード → 異動理由コード] | |
| | IF | `"".equals(childMap.get("kksv040523_ido_rsn_cd"))` |
| | 1.1.3.1 | EXEC | `templateArray[0].setNull(IDO_RSN_CD)` |
| | 1.1.3.2 | ELSE | — |
| | 1.1.3.3 | EXEC | `templateArray[0].set(IDO_RSN_CD, (String)childMap.get("kksv040523_ido_rsn_cd"))` |
| 1.1.4 | IF/ELSE (L8252) `Apply disruption reason memo` [進捗登録マップ.異動理由メモ → 異動理由メモ] | |
| | IF | `"".equals(childMap.get("kksv040523_ido_rsn_memo"))` |
| | 1.1.4.1 | EXEC | `templateArray[0].setNull(IDO_RSN_MEMO)` |
| | 1.1.4.2 | ELSE | — |
| | 1.1.4.3 | EXEC | `templateArray[0].set(IDO_RSN_MEMO, (String)childMap.get("kksv040523_ido_rsn_memo"))` |
| 1.1.5 | SET | `template.set(EKK1091D010CBSMSG1LIST, templateArray)` // Set disruption reason sub-list to main template [異動理由詳細] |
| 1.2 | ELSE | — (inList is already populated, skip building) |

**Block 24** — EXEC (L8262) `Assemble and return`

| # | Type | Code |
|---|------|------|
| 1 | SET | `templates = new CAANMsg[1]` // Final template array [テンプレート配列] |
| 2 | SET | `templates[0] = template` // Set main template as sole entry |
| 3 | SET | `paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates)` // Store template array in paramMap [テンプレートリスト設定] |
| 4 | RETURN | `return paramMap` // Return the populated parameter map |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `mskm_dtl_no` | Field | Submitted detail number — the detail sequence number for submitted orders, used to identify a specific order line item [申込明細番号] |
| `seiky_way_no_koza` | Field | Billing method number (bank account) — specifies how the customer will be billed via bank account [請求方法番号（口座）] |
| `seiky_way_no_crecard` | Field | Billing method number (credit card) — specifies credit card as the billing method [請求方法番号（クレジットカード）] |
| `seiopsvc_kei_no` | Field | Billing option service contract number — the contract number for billed optional services [請求オプションサービス契約番号] |
| `seiky_kei_no` | Field | Billing contract number — the primary contract identifier for billing purposes [請求契約番号] |
| `svc_kei_no` | Field | Service contract number — the main service agreement identifier [サービス契約番号] |
| `svc_kei_ucwk_no` | Field | Service contract detail number — internal breakdown/line-item number within a service contract [サービス契約内訳番号] |
| `svc_kei_kaisen_ucwk_no` | Field | Service contract line detail number — detail number for service contract lines (circuit-level) [サービス契約回線内訳番号] |
| `kktk_svc_kei_no` | Field | Device provider service contract number — contract for hardware/device provisioning services [機器提供サービス契約番号] |
| `op_svc_kei_no` | Field | Option service contract number — contract number for optional add-on services [オプションサービス契約番号] |
| `sbop_svc_kei_no` | Field | Sub-option service contract number — sub-level optional service contract [サブオプションサービス契約番号] |
| `wrib_svc_kei_no` | Field | Discount service contract number — contract for discounted/reduced-rate services [割引サービス契約番号] |
| `ido_div` | Field | Displacement division — the type/category of service contract change/move (e.g., transfer, modification) [異動区分] |
| `ido_dtm` | Field | Displacement date-time — the timestamp when the displacement/change occurred [異動年月日時分秒] |
| `prg_stat` | Field | Progress status — the current processing status of the progress registration [進捗ステータス] |
| `prg_dtm_i` | Field | Progress date-time input — the planned execution datetime (formatted as YYYYMMDDHHMMSSSSS) [進捗年月日時分秒（入力）] |
| `prg_memo` | Field | Progress memo — free-text memo for the progress registration [進捗メモ] |
| `prg_tkjk_1`, `prg_tkjk_2` | Field | Progress special items 1 & 2 — two free-text special notation fields for additional progress information [進捗特記事項1/2] |
| `ido_rsn_cd` | Field | Disruption reason code — the code describing why a displacement occurred [異動理由コード] |
| `ido_rsn_memo` | Field | Disruption reason memo — free-text explanation for the disruption reason [異動理由メモ] |
| `kksv040523_*` | Field | Screen KKSv040523 mapping prefix — all fields prefixed with this come from screen KKSv040523, the progress registration screen [進捗登録マップ] |
| `ekk0011d020_*` | Field | Screen EKK0011D020 mapping prefix — fields from sub-screen handling submitted detail numbers [申込明細番号WORK] |
| `ekk0501d010_*` | Field | Screen EKK0501D010 mapping prefix — bank account billing method fields [請求方法番号（口座）WORK] |
| `ekk0521d010_*` | Field | Screen EKK0521D010 mapping prefix — credit card billing method fields [請求方法番号（クレジットカード）WORK] |
| `ekk0441d010_*` | Field | Screen EKK0441D010 mapping prefix — billing option service contract fields [請求オプションサービス契約番号WORK] |
| `future_flg` | Field | Future determination flag — when set to "1", enables future-dated processing mode [未来判定フラグ] |
| `rsv_apry_ymd` | Field | Reservation application year-month-day — the planned effective date for future-dated operations [適用年月日] |
| `EKK1091D010CBSMsg` | Schema | CBS message schema class defining the structure for the EKK1091D010 progress registration message |
| `EKK1091D010CBSMsg1List` | Schema | CBS message list schema class for the disruption reason detail sub-list (異動理由詳細) |
| `CAANMsg` | Type | Fujitsu's asynchronous message wrapper class used for CBS (batch service) communication |
| `TEMPLATE_ID_EKK1091D010` | Constant | Template identifier value `"EKK1091D010"` — identifies this CBS message schema version |
| FUNC_CODE | Field | Function code — set to `"1"` indicating the specific processing function within the screen |
| EKK1091D010 | Screen | Service contract modification screen — the UI screen for modifying service contracts (請求契約変更) |
| CBS | Acronym | Batch Communication Service — the batch processing layer that executes async business operations |
| CC | Acronym | Common Component — shared business logic class that provides reusable processing methods across screens |
| KKSv040523 | Screen | Progress registration screen — displays and manages progress tracking data for service contract changes |
| `editInMsg` | Method | Parent method that initializes the common processing area (template ID, operator info, operate date/time) |