---
title: JKKMltiseInfoAddCfmCC.editEKK1091D010ErrorInfo()
file: source/koptBp/ejbModule/com/fujitsu/futurity/bp/custom/common/JKKMltiseInfoAddCfmCC.java
LOC: 165
created_date: 2026-06-27
---

# Business Logic — JKKMltiseInfoAddCfmCC.editEKK1091D010ErrorInfo() [165 LOC]

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

## 1. Role

### JKKMltiseInfoAddCfmCC.editEKK1091D010ErrorInfo()

This method is a **post-execution error information mapper** for the "Shinro Touroku" (Progress Registration) subsystem within the e-Opticom customer base system. It is invoked after a service contract line-detail inquiry S-IF (Service Interface) executes a CBS (Common Business Service) call, and its purpose is to extract any error data returned by the CBS from a `CAANMsg` template array and map it into the `IRequestParameterReadWrite` business data container.

The method implements a **template-to-data extraction pattern**: it reads the primary `CAANMsg` template at index 0, iterates over a predefined set of error-specific message keys, and for each non-null error field, copies its string value into an intermediate `HashMap` stored on the parameter object under a fixed key. A secondary loop processes child message entries (the `EKK1091D010CBSMSG1LIST`) for detailed error reason information.

A key design goal is **idempotency**: each field extraction uses a `containsKey()` guard to avoid overwriting existing values in the hash map. This allows callers to invoke the method multiple times or in combination with other error-handling logic without data corruption.

The method also delegates to `setControlMap()` to configure general error-common settings such as return codes and status, integrating its results into the standard Fujitsu CAAN error framework used across the platform.

This is a **shared utility method** called by screen-level result-processing methods (e.g., `editEKK1091D010ResultRP()`), and serves as a critical bridge between CBS execution and screen-layer error display.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["editEKK1091D010ErrorInfo param, templates, returnCode, fixedText"])
    GET_TEMPLATE["template = templates[0]"]
    SET_CONTROL["setControlMap param, templates, returnCode, EKK1091D010CBSMsg.STATUS"]
    GET_INHASH["inHash = param.getData fixedText"]
    CHECK_INHASH_NULL{inHash == null}
    CREATE_INHASH["inHash = new HashMap"]
    SET_INHASH["param.setData fixedText, inHash"]
    EXTRACT_ERROR_INFO["Extract error fields from template into inHash"]
    EXTRACT_LIST["inList = inHash.get EKK1091D010CBSMsg1List"]
    CHECK_LIST_NULL{inList == null}
    CREATE_LIST["inList = new ArrayList"]
    PUT_LIST["inHash.put EKK1091D010CBSMsg1List, inList"]
    GET_CHILD_ARRAY["templateArray = template.getCAANMsgList EKK1091D010CBSMSG1LIST"]
    CHECK_ARRAY_NULL{templateArray != null}
    LOOP_START["for i = 0 to templateArray.length"]
    CHECK_INDEX{i >= inList.size}
    ADD_NEW_MAP["inList.add new HashMap"]
    GET_CHILD_MAP["childMap = inList.get i"]
    GET_CHILD_TEMPLATE["childTemplate = templateArray[i]"]
    EXTRACT_CHILD_ERROR["Extract child error fields into childMap"]
    LOOP_END{"i < templateArray.length"}
    CHECK_LIST_ERR{template.isNull EKK1091D010CBSMSG1LIST_ERR}
    PUT_LIST_ERR["inHash.put EKK1091D010CBSMsg1List_err, template.getString EKK1091D010CBSMSG1LIST_ERR"]
    RETURN["return param"]

    START --> GET_TEMPLATE
    GET_TEMPLATE --> SET_CONTROL
    SET_CONTROL --> GET_INHASH
    GET_INHASH --> CHECK_INHASH_NULL
    CHECK_INHASH_NULL -- true --> CREATE_INHASH
    CREATE_INHASH --> SET_INHASH
    SET_INHASH --> EXTRACT_ERROR_INFO
    CHECK_INHASH_NULL -- false --> EXTRACT_ERROR_INFO
    EXTRACT_ERROR_INFO --> EXTRACT_LIST
    EXTRACT_LIST --> CHECK_LIST_NULL
    CHECK_LIST_NULL -- true --> CREATE_LIST
    CREATE_LIST --> PUT_LIST
    PUT_LIST --> GET_CHILD_ARRAY
    CHECK_LIST_NULL -- false --> GET_CHILD_ARRAY
    GET_CHILD_ARRAY --> CHECK_ARRAY_NULL
    CHECK_ARRAY_NULL -- true --> LOOP_START
    CHECK_ARRAY_NULL -- false --> CHECK_LIST_ERR
    LOOP_START --> CHECK_INDEX
    CHECK_INDEX -- true --> GET_CHILD_MAP
    CHECK_INDEX -- false --> ADD_NEW_MAP
    ADD_NEW_MAP --> GET_CHILD_MAP
    GET_CHILD_MAP --> GET_CHILD_TEMPLATE
    GET_CHILD_TEMPLATE --> EXTRACT_CHILD_ERROR
    EXTRACT_CHILD_ERROR --> LOOP_END
    LOOP_END -- true --> LOOP_START
    LOOP_END -- false --> CHECK_LIST_ERR
    CHECK_LIST_ERR -- true --> PUT_LIST_ERR
    CHECK_LIST_ERR -- false --> RETURN
    PUT_LIST_ERR --> RETURN
```

**Block overview:**

1. **Extract primary template and configure error common settings** - Retrieves the top-level `CAANMsg` template and delegates to `setControlMap()` for return code and status setup.
2. **Prepare intermediate data container** - Gets (or creates) a `HashMap` on the parameter object where extracted error data will be stored.
3. **Extract top-level error fields** - Iterates over 16 error-specific message keys on the primary template, copying each non-null value into the hash map using a duplicate-avoidance guard.
4. **Prepare child list container** - Gets (or creates) an `ArrayList` for child-level error detail entries.
5. **Process child message entries** - Iterates over a child `CAANMsg[]` array, extracting per-row error fields (`ido_rsn_cd_err`, `ido_rsn_memo_err`) into per-row hash maps.
6. **Extract child list error indicator** - Copies the list-level error message (if any) into the hash map.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `param` | `IRequestParameterReadWrite` | The business data transfer object that carries all request/response data between layers. It serves as both input (providing access to existing data via `getData()`) and output (receiving extracted error data via `setData()` and the return value). |
| 2 | `templates` | `CAANMsg[]` | An array of `CAANMsg` objects returned from the CBS call. Index 0 is the parent/error message template containing error field values. Contains additional child message entries under the `EKK1091D010CBSMSG1LIST` key for detailed error reason data. |
| 3 | `returnCode` | `int` | The CBS return code (typically `0` for success, non-zero for errors). Passed through to `setControlMap()` for error-common configuration. |
| 4 | `fixedText` | `String` | A fixed key string used to identify the data container within `param`. Both `getData(fixedText)` and `setData(fixedText, inHash)` are called, indicating the same named region is read and written. |

**Instance fields / external state:**

| Source | Field/Method | Usage |
|--------|-------------|-------|
| `JACBatCommon` | `isNull(...)` | Null-check utility for template fields |
| `JACbatRknBusinessUtil` | `isNull(...)` | Null-check utility for template fields |
| `JCHbatSeikyKaknoBusinessUtil` | `isNull(...)` | Null-check utility for template fields |
| `JBSbatACInsentetivePrcInfoSaksei` | `isNull(...)` | Null-check utility for template fields |
| `JBSbatAKCHSeikyYsoInfMake` | `isNull(...)` | Null-check utility for template fields |
| `JKKMltiseInfoAddCfmCC` | `setControlMap(param, templates, returnCode, status)` | Configures the standard control/error map (status, return code) on the parameter object |

## 4. CRUD Operations / Called Services

All operations in this method are **Read** operations against message data returned from a prior CBS call. No new data is written to the database.

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `template.getString(EKK1091D010CBSMsg.MSKM_DTL_NO_ERR)` | EKK1091D010CBS | Shinro Touroku detail number error | Reads progress registration detail number error from template |
| R | `template.getString(EKK1091D010CBSMsg.SEIKY_KEI_NO_ERR)` | EKK1091D010CBS | Billing contract number error | Reads billing contract number error from template |
| R | `template.getString(EKK1091D010CBSMsg.SEIKY_WAY_NO_KOZA_ERR)` | EKK1091D010CBS | Billing method (bank account) error | Reads billing method (bank account) error from template |
| R | `template.getString(EKK1091D010CBSMsg.SEIKY_WAY_NO_CRECARD_ERR)` | EKK1091D010CBS | Billing method (credit card) error | Reads billing method (credit card) error from template |
| R | `template.getString(EKK1091D010CBSMsg.SVC_KEI_NO_ERR)` | EKK1091D010CBS | Service contract number error | Reads service contract number error from template |
| R | `template.getString(EKK1091D010CBSMsg.SVC_KEI_UCWK_NO_ERR)` | EKK1091D010CBS | Service detail work number error | Reads service detail work number error from template |
| R | `template.getString(EKK1091D010CBSMsg.SVC_KEI_KAISEN_UCWK_NO_ERR)` | EKK1091D010CBS | Service contract line revision work number error | Reads service contract line revision work number error from template |
| R | `template.getString(EKK1091D010CBSMsg.KKTK_SVC_KEI_NO_ERR)` | EKK1091D010CBS | Equipment-provided service contract number error | Reads equipment-provided service contract number error from template |
| R | `template.getString(EKK1091D010CBSMsg.OP_SVC_KEI_NO_ERR)` | EKK1091D010CBS | Optional service contract number error | Reads optional service contract number error from template |
| R | `template.getString(EKK1091D010CBSMsg.SEIOPSVC_KEI_NO_ERR)` | EKK1091D010CBS | Billing optional service contract number error | Reads billing optional service contract number error from template |
| R | `template.getString(EKK1091D010CBSMsg.SBOP_SVC_KEI_NO_ERR)` | EKK1091D010CBS | Sub-optional service contract number error | Reads sub-optional service contract number error from template |
| R | `template.getString(EKK1091D010CBSMsg.WRIB_SVC_KEI_NO_ERR)` | EKK1091D010CBS | Discount service contract number error | Reads discount service contract number error from template |
| R | `template.getString(EKK1091D010CBSMsg.IDO_DIV_ERR)` | EKK1091D010CBS | Discrepancy division error | Reads discrepancy division (error category) from template |
| R | `template.getString(EKK1091D010CBSMsg.IDO_DTM_ERR)` | EKK1091D010CBS | Operation year/month/day/hour/minute/second error | Reads unyear month day hour minute second error from template |
| R | `template.getString(EKK1091D010CBSMsg.PRG_STAT_ERR)` | EKK1091D010CBS | Progress status error | Reads progress status error from template |
| R | `template.getString(EKK1091D010CBSMsg.PRG_MEMO_ERR)` | EKK1091D010CBS | Progress memo error | Reads progress memo error from template |
| R | `template.getString(EKK1091D010CBSMsg.PRG_TKJK_1_ERR)` | EKK1091D010CBS | Progress special item 1 error | Reads progress special item 1 error from template |
| R | `template.getString(EKK1091D010CBSMsg.PRG_TKJK_2_ERR)` | EKK1091D010CBS | Progress special item 2 error | Reads progress special item 2 error from template |
| R | `template.getCAANMsgList(EKK1091D010CBSMsg.EKK1091D010CBSMSG1LIST)` | EKK1091D010CBS | Child message list for error reasons | Retrieves child `CAANMsg` array containing detailed error reason entries |
| R | `childTemplate.getString(EKK1091D010CBSMsg1List.IDO_RSN_CD_ERR)` | EKK1091D010CBS | Discrepancy reason code error | Reads discrepancy reason code error from child template |
| R | `childTemplate.getString(EKK1091D010CBSMsg1List.IDO_RSN_MEMO_ERR)` | EKK1091D010CBS | Discrepancy reason memo error | Reads discrepancy reason memo error from child template |
| R | `template.getString(EKK1091D010CBSMsg.EKK1091D010CBSMSG1LIST_ERR)` | EKK1091D010CBS | Child list error indicator | Reads child list error indicator from template |
| - | `JACBatCommon.isNull` | JACBatCommon | - | Null-check utility for template fields |
| - | `JACbatRknBusinessUtil.isNull` | JACbatRknBusiness | - | Null-check utility for template fields |
| - | `JCHbatSeikyKaknoBusinessUtil.isNull` | JCHbatSeikyKaknoBusiness | - | Null-check utility for template fields |
| - | `JBSbatACInsentetivePrcInfoSaksei.isNull` | JBSbatACInsentetivePrcInfoSaksei | - | Null-check utility for template fields |
| - | `JBSbatAKCHSeikyYsoInfMake.isNull` | JBSbatAKCHSeikyYsoInfMake | - | Null-check utility for template fields |
| - | `JKKMltiseInfoAddCfmCC.setControlMap` | JKKMltiseInfoAddCfmCC | - | Configures error-common settings (return code, status) on the parameter object |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Class: JKKMltiseInfoAddCfmCC | `editEKK1091D010ResultRP(msgList, param, fixedText)` -> `editEKK1091D010ErrorInfo(param, templates, returnCode, fixedText)` | `getString [R] EKK1091D010CBS` (16 top-level error fields) |
| 2 | Class: JKKAddIpv6Info | `editEKK1091D010ErrorInfo(param, templates, returnCode, fixedText)` (overrides inherited method) | `getString [R] EKK1091D010CBS` (same field set) |

**Terminal operations from this method (leaf-level reads):**

| Terminal Operation | SC | Entity / DB |
|--------------------|----|-------------|
| `template.getString(...)` [R] | EKK1091D010CBS | Error fields from Shinro Touroku progress registration |
| `template.getCAANMsgList(...)` [R] | EKK1091D010CBS | Child message list for error reasons |
| `childTemplate.getString(...)` [R] | EKK1091D010CBS | Discrepancy reason code and memo error fields |
| `template.isNull(...)` [-] | - | Null-check guard on 18+ template fields |

## 6. Per-Branch Detail Blocks

**Block 1** — SET `(template extraction)` (L3940)

> Extracts the primary template from the first element of the `templates` array.

| # | Type | Code |
|---|------|------|
| 1 | SET | `template = templates[0]` // Primary CAANMsg template from CBS response |

**Block 2** — EXEC `(error common setup)` (L3942)

> Configures the standard error control map with return code and status for display on the error-common screen area. Japanese comment: エラー共通部の設定 (Error common part setup).

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `setControlMap(param, templates, returnCode, EKK1091D010CBSMsg.STATUS)` // Sets error-common configuration |

**Block 3** — SET / IF / SET `(intermediate map initialization)` (L3945-L3950)

> Retrieves or creates the HashMap that will hold extracted error data. The `fixedText` key identifies the data region. Japanese comment: ユーザーデータ情報 (User data information).

| # | Type | Code |
|---|------|------|
| 1 | SET | `inHash = (HashMap) param.getData(fixedText)` // Get existing error data container |
| 2 | IF | `inHash == null` |
| 3 | SET | `inHash = new HashMap()` // Create new map (Block 3.1) |
| 4 | SET | `param.setData(fixedText, inHash)` // Store new map (Block 3.1) |

**Block 3.1** — ELSE `[implicit: inHash != null]` (L3948)

> If `inHash` already exists (previously populated by another error handler), reuse it as-is.

**Block 4** — IF chain `(top-level error field extraction - 16 fields)` (L3952-L4029)

> Sequentially extracts each non-null error field from the primary template into the `inHash` map. Each block follows the same pattern: check if template field is not null, then check if key is not already present, then copy value. Japanese comment: 進捗登録マップ.[field description] -> [field description] のエラー情報返却 (Progress registration map - return error info for [field]).

**Block 4.1** — IF `(detail number error)` (L3952)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!template.isNull(EKK1091D010CBSMsg.MSKM_DTL_NO_ERR)` // Shinro Touroku detail number error |
| 2 | IF | `!inHash.containsKey("mskm_dtl_no_err")` // Idempotency guard |
| 3 | SET | `inHash.put("mskm_dtl_no_err", template.getString(EKK1091D010CBSMsg.MSKM_DTL_NO_ERR))` |

**Block 4.2** — IF `(billing contract number error)` (L3958)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!template.isNull(EKK1091D010CBSMsg.SEIKY_KEI_NO_ERR)` // Billing contract number error |
| 2 | IF | `!inHash.containsKey("seiky_kei_no_err")` |
| 3 | SET | `inHash.put("seiky_kei_no_err", template.getString(EKK1091D010CBSMsg.SEIKY_KEI_NO_ERR))` |

**Block 4.3** — IF `(billing method - bank account error)` (L3964)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!template.isNull(EKK1091D010CBSMsg.SEIKY_WAY_NO_KOZA_ERR)` // Billing method (bank account) error |
| 2 | IF | `!inHash.containsKey("seiky_way_no_koza_err")` |
| 3 | SET | `inHash.put("seiky_way_no_koza_err", template.getString(EKK1091D010CBSMsg.SEIKY_WAY_NO_KOZA_ERR))` |

**Block 4.4** — IF `(billing method - credit card error)` (L3970)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!template.isNull(EKK1091D010CBSMsg.SEIKY_WAY_NO_CRECARD_ERR)` // Billing method (credit card) error |
| 2 | IF | `!inHash.containsKey("seiky_way_no_crecard_err")` |
| 3 | SET | `inHash.put("seiky_way_no_crecard_err", template.getString(EKK1091D010CBSMsg.SEIKY_WAY_NO_CRECARD_ERR))` |

**Block 4.5** — IF `(service contract number error)` (L3976)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!template.isNull(EKK1091D010CBSMsg.SVC_KEI_NO_ERR)` // Service contract number error |
| 2 | IF | `!inHash.containsKey("svc_kei_no_err")` |
| 3 | SET | `inHash.put("svc_kei_no_err", template.getString(EKK1091D010CBSMsg.SVC_KEI_NO_ERR))` |

**Block 4.6** — IF `(service detail work number error)` (L3982)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!template.isNull(EKK1091D010CBSMsg.SVC_KEI_UCWK_NO_ERR)` // Service detail work number error |
| 2 | IF | `!inHash.containsKey("svc_kei_ucwk_no_err")` |
| 3 | SET | `inHash.put("svc_kei_ucwk_no_err", template.getString(EKK1091D010CBSMsg.SVC_KEI_UCWK_NO_ERR))` |

**Block 4.7** — IF `(service contract line revision work number error)` (L3988)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!template.isNull(EKK1091D010CBSMsg.SVC_KEI_KAISEN_UCWK_NO_ERR)` // Service contract line revision work number error |
| 2 | IF | `!inHash.containsKey("svc_kei_kaisen_ucwk_no_err")` |
| 3 | SET | `inHash.put("svc_kei_kaisen_ucwk_no_err", template.getString(EKK1091D010CBSMsg.SVC_KEI_KAISEN_UCWK_NO_ERR))` |

**Block 4.8** — IF `(equipment-provided service contract number error)` (L3994)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!template.isNull(EKK1091D010CBSMsg.KKTK_SVC_KEI_NO_ERR)` // Equipment-provided service contract number error |
| 2 | IF | `!inHash.containsKey("kktk_svc_kei_no_err")` |
| 3 | SET | `inHash.put("kktk_svc_kei_no_err", template.getString(EKK1091D010CBSMsg.KKTK_SVC_KEI_NO_ERR))` |

**Block 4.9** — IF `(optional service contract number error)` (L4000)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!template.isNull(EKK1091D010CBSMsg.OP_SVC_KEI_NO_ERR)` // Optional service contract number error |
| 2 | IF | `!inHash.containsKey("op_svc_kei_no_err")` |
| 3 | SET | `inHash.put("op_svc_kei_no_err", template.getString(EKK1091D010CBSMsg.OP_SVC_KEI_NO_ERR))` |

**Block 4.10** — IF `(billing optional service contract number error)` (L4006)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!template.isNull(EKK1091D010CBSMsg.SEIOPSVC_KEI_NO_ERR)` // Billing optional service contract number error |
| 2 | IF | `!inHash.containsKey("seiopsvc_kei_no_err")` |
| 3 | SET | `inHash.put("seiopsvc_kei_no_err", template.getString(EKK1091D010CBSMsg.SEIOPSVC_KEI_NO_ERR))` |

**Block 4.11** — IF `(sub-optional service contract number error)` (L4012)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!template.isNull(EKK1091D010CBSMsg.SBOP_SVC_KEI_NO_ERR)` // Sub-optional service contract number error |
| 2 | IF | `!inHash.containsKey("sbop_svc_kei_no_err")` |
| 3 | SET | `inHash.put("sbop_svc_kei_no_err", template.getString(EKK1091D010CBSMsg.SBOP_SVC_KEI_NO_ERR))` |

**Block 4.12** — IF `(discount service contract number error)` (L4018)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!template.isNull(EKK1091D010CBSMsg.WRIB_SVC_KEI_NO_ERR)` // Discount service contract number error |
| 2 | IF | `!inHash.containsKey("wrib_svc_kei_no_err")` |
| 3 | SET | `inHash.put("wrib_svc_kei_no_err", template.getString(EKK1091D010CBSMsg.WRIB_SVC_KEI_NO_ERR))` |

**Block 4.13** — IF `(discrepancy division error)` (L4024)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!template.isNull(EKK1091D010CBSMsg.IDO_DIV_ERR)` // Discrepancy division error |
| 2 | IF | `!inHash.containsKey("ido_div_err")` |
| 3 | SET | `inHash.put("ido_div_err", template.getString(EKK1091D010CBSMsg.IDO_DIV_ERR))` |

**Block 4.14** — IF `(operation date/time error)` (L4030)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!template.isNull(EKK1091D010CBSMsg.IDO_DTM_ERR)` // Operation year/month/day/hour/minute/second error |
| 2 | IF | `!inHash.containsKey("unyo_dtm_err")` |
| 3 | SET | `inHash.put("unyo_dtm_err", template.getString(EKK1091D010CBSMsg.IDO_DTM_ERR))` |

**Block 4.15** — IF `(progress status error)` (L4036)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!template.isNull(EKK1091D010CBSMsg.PRG_STAT_ERR)` // Progress status error |
| 2 | IF | `!inHash.containsKey("prg_stat_err")` |
| 3 | SET | `inHash.put("prg_stat_err", template.getString(EKK1091D010CBSMsg.PRG_STAT_ERR))` |

**Block 4.16** — IF `(progress memo error)` (L4042)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!template.isNull(EKK1091D010CBSMsg.PRG_MEMO_ERR)` // Progress memo error |
| 2 | IF | `!inHash.containsKey("prg_memo_err")` |
| 3 | SET | `inHash.put("prg_memo_err", template.getString(EKK1091D010CBSMsg.PRG_MEMO_ERR))` |

**Block 4.17** — IF `(progress special item 1 error)` (L4048)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!template.isNull(EKK1091D010CBSMsg.PRG_TKJK_1_ERR)` // Progress special item 1 error |
| 2 | IF | `!inHash.containsKey("prg_tkjk_1_err")` |
| 3 | SET | `inHash.put("prg_tkjk_1_err", template.getString(EKK1091D010CBSMsg.PRG_TKJK_1_ERR))` |

**Block 4.18** — IF `(progress special item 2 error)` (L4054)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!template.isNull(EKK1091D010CBSMsg.PRG_TKJK_2_ERR)` // Progress special item 2 error |
| 2 | IF | `!inHash.containsKey("prg_tkjk_2_err")` |
| 3 | SET | `inHash.put("prg_tkjk_2_err", template.getString(EKK1091D010CBSMsg.PRG_TKJK_2_ERR))` |

**Block 5** — SET / IF / SET `(child list initialization)` (L4057-L4062)

> Prepares the ArrayList that holds child-level error detail entries. If it does not exist yet, creates a new one. Japanese comment: 進捗登録マップ (Progress registration map).

| # | Type | Code |
|---|------|------|
| 1 | SET | `inList = (ArrayList) inHash.get("EKK1091D010CBSMsg1List")` |
| 2 | IF | `inList == null` |
| 3 | SET | `inList = new ArrayList()` (Block 5.1) |
| 4 | SET | `inHash.put("EKK1091D010CBSMsg1List", inList)` (Block 5.1) |

**Block 5.1** — `[child list created]`

> A new child list is initialized to receive extracted error detail entries.

**Block 6** — SET `(retrieve child message array)` (L4065)

> Extracts the child `CAANMsg[]` array from the primary template. Each entry represents a detailed error reason row.

| # | Type | Code |
|---|------|------|
| 1 | SET | `templateArray = template.getCAANMsgList(EKK1091D010CBSMsg.EKK1091D010CBSMSG1LIST)` |

**Block 7** — IF `(child error detail loop)` (L4067-L4088)

> Iterates over the child template array, extracting per-row error fields. Japanese comment: 進捗登録マップ.異動理由明细 -> 異動理由明细 のエラー情報返却 (Progress registration map - discrepancy reason detail).

| # | Type | Code |
|---|------|------|
| 1 | IF | `templateArray != null` |
| 2 | FOR | `int i = 0; i < templateArray.length; i++` |

**Block 7.1** — IF `(ensure child map exists for row)` (L4070)

| # | Type | Code |
|---|------|------|
| 1 | IF | `i >= inList.size()` |
| 2 | SET | `inList.add(new HashMap())` (Block 7.1.1) |

**Block 7.1.1** — `[new child map appended]`

> When this row has no existing entry, create a fresh HashMap for it.

**Block 7.2** — GET `(retrieve row-level references)` (L4073-L4074)

| # | Type | Code |
|---|------|------|
| 1 | SET | `childMap = (HashMap) inList.get(i)` |
| 2 | SET | `childTemplate = templateArray[i]` |

**Block 8** — IF `(discrepancy reason code error)` (L4078)

> Extracts the error reason code for this child row. Japanese comment: 異動理由コード (Discrepancy reason code).

| # | Type | Code |
|---|------|------|
| 1 | IF | `!childTemplate.isNull(EKK1091D010CBSMsg1List.IDO_RSN_CD_ERR)` |
| 2 | IF | `!childMap.containsKey("ido_rsn_cd_err")` |
| 3 | SET | `childMap.put("ido_rsn_cd_err", childTemplate.getString(EKK1091D010CBSMsg1List.IDO_RSN_CD_ERR))` |

**Block 9** — IF `(discrepancy reason memo error)` (L4084)

> Extracts the error reason memo for this child row. Japanese comment: 異動理由メモ (Discrepancy reason memo).

| # | Type | Code |
|---|------|------|
| 1 | IF | `!childTemplate.isNull(EKK1091D010CBSMsg1List.IDO_RSN_MEMO_ERR)` |
| 2 | IF | `!childMap.containsKey("ido_rsn_memo_err")` |
| 3 | SET | `childMap.put("ido_rsn_memo_err", childTemplate.getString(EKK1091D010CBSMsg1List.IDO_RSN_MEMO_ERR))` |

**Block 10** — IF `(child list error indicator)` (L4091-L4095)

> Copies a list-level error indicator message into the hash map if present.

| # | Type | Code |
|---|------|------|
| 1 | IF | `!template.isNull(EKK1091D010CBSMsg.EKK1091D010CBSMSG1LIST_ERR)` |
| 2 | IF | `!inHash.containsKey("EKK1091D010CBSMsg1List_err")` |
| 3 | SET | `inHash.put("EKK1091D010CBSMsg1List_err", template.getString(EKK1091D010CBSMsg.EKK1091D010CBSMSG1LIST_ERR))` |

**Block 11** — RETURN `(return processed parameter)` (L4097)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return param` // Returns the parameter object with all error data extracted and mapped |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `MSKM_DTL_NO_ERR` | Field | Progress registration (Shinro Touroku) detail number error - error value for the detail number field |
| `SEIKY_KEI_NO_ERR` | Field | Billing contract number error - error value for the invoice/billing contract number |
| `SEIKY_WAY_NO_KOZA_ERR` | Field | Billing method (bank account) error - error value for bank account-based billing method |
| `SEIKY_WAY_NO_CRECARD_ERR` | Field | Billing method (credit card) error - error value for credit card-based billing method |
| `SVC_KEI_NO_ERR` | Field | Service contract number error - error value for the service contract number |
| `SVC_KEI_UCWK_NO_ERR` | Field | Service detail work number error - internal tracking ID for service contract line items |
| `SVC_KEI_KAISEN_UCWK_NO_ERR` | Field | Service contract line revision work number error - error for revised/changed service contract line |
| `KKTK_SVC_KEI_NO_ERR` | Field | Equipment-provided service contract number error - error for services tied to equipment provisioning |
| `OP_SVC_KEI_NO_ERR` | Field | Optional service contract number error - error for optional/auxiliary service contracts |
| `SEIOPSVC_KEI_NO_ERR` | Field | Billing optional service contract number error - error for optional services included in billing |
| `SBOP_SVC_KEI_NO_ERR` | Field | Sub-optional service contract number error - error for subordinate optional service contracts |
| `WRIB_SVC_KEI_NO_ERR` | Field | Discount service contract number error - error for discounted service contracts |
| `IDO_DIV_ERR` | Field | Discrepancy division error - error category/classification for the discrepancy |
| `IDO_DTM_ERR` | Field | Operation year/month/day/hour/minute/second error - timestamp of the discrepancy occurrence |
| `PRG_STAT_ERR` | Field | Progress status error - error value for the processing status indicator |
| `PRG_MEMO_ERR` | Field | Progress memo error - error value for the progress-related memo/note |
| `PRG_TKJK_1_ERR` | Field | Progress special item 1 error - error value for special note field 1 |
| `PRG_TKJK_2_ERR` | Field | Progress special item 2 error - error value for special note field 2 |
| `ido_rsn_cd_err` | Field | Discrepancy reason code error - error value for the reason code explaining why the discrepancy occurred |
| `ido_rsn_memo_err` | Field | Discrepancy reason memo error - error value for the free-form description of the discrepancy reason |
| `EKK1091D010CBS` | SC Code | Shinro Touroku (Progress Registration) Common Business Service - CBS that performs the service contract line-detail inquiry |
| `EKK1091D010CBSMSG1LIST` | Field | Child message list key for the CBS response - contains per-row detailed error reason entries |
| `EKK1091D010CBSMSG1LIST_ERR` | Field | Child list error indicator - an error message at the list (not row) level |
| Shinro Touroku (進捗登録) | Japanese term | Progress Registration - the business process of registering/updating the progress status of service contract line operations |
| S-IF (S-Interface) | Japanese term | Service Interface - the API layer that invokes CBS (Common Business Service) components |
| CBS (Common Business Service) | Acronym | Shared business logic component executed by service interfaces; the target of SC-level method calls |
| CAANMsg | Class | Fujitsu CAAN framework message class used for parameter passing between layers; supports field-level null checks (`isNull`) and typed access (`getString`, `getCAANMsgList`) |
| IRequestParameterReadWrite | Interface | Business data transfer interface used for read/write operations between screen, CC (Callback Callback) classes, and CBS layers |
| CC (Callback Callback) | Pattern | A callback-style component class that handles post-CBS processing (error mapping, result formatting, data transformation) |
| `setControlMap` | Method | Standard Fujitsu error-common configuration method that sets return code, status, and error display data on the parameter object |
| `fixedText` | Parameter | Fixed key string used to name the error data region within the parameter object |
