# Business Logic - JFUAddSvcKeiNetCC.editErrInfoEKK0091D010() [285 LOC]

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

## 1. Role

### JFUAddSvcKeiNetCC.editErrInfoEKK0091D010()

This method performs **error information mapping** for the "eo Light Network" (eo光ネット) service contract registration business flow. It receives error data from a CBS (Common Business Service) response template — specifically `EKK0091D010CBSMsg` — and maps it into the in-process request parameter data structure, which the UI layer will later render as validation errors. The method implements a **conditional priority-passing design pattern**: it compares the CBS response status code against any prior business-process status already set in the request parameter, and only overwrites the error code and message if the new status is numerically worse (higher). It also enforces idempotency by checking whether each error field is already present in the mapping target before overwriting, ensuring that a downstream error handler cannot accidentally erase a prior upstream error. The method serves as a shared utility called by `editErrorInfo` after each service component invocation and is also referenced by `editOutEKK0091D010Msg` for output-side error mapping. It handles approximately 30 distinct error fields covering system identifiers, service codes, contract numbers, fee structures, subscription start dates, payment method flags, trial period boundaries, activation dates, letter delivery codes, penalty codes, and other business-specific error fields.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["editErrInfoEKK0091D010"])
    GET_STATUS["Get template status from EKK0091D010CBSMsg.STATUS"]
    CHECK_RETURN{returnCode != 0?"}
    SET_9000["Set templateStatus = 9000"]
    CHECK_MSG["Is RETURN_MESSAGE_status message defined?"]
    RESET_STATUS["Set templateStatus = 0"]
    GET_BP_STATUS["Get bpStatus from param control map RETURN_CODE"]
    COMPARE_STATUS{"templateStatus > bpStatus?"}
    SET_RETURN["Set RETURN_CODE and RETURN_MESSAGE in param"]
    GET_INMAP["Get inMap from param data EKK0091D010"]
    CHECK_ERR{template.isNull error field?"}
    CHECK_MAP{inMap.containsKey error key?"}
    PUT_ERR["inMap.put error key and value"]
    SKIP_ERR["Skip - already present"]
    SPECIAL_CHECK{"Is seiky_kei_no_err or prc_kmk_cd_err?"}
    TEMPLATE_SET["template.set key and value"]
    NORMAL_PUT["inMap.put key and value"]
    RETURN(["Return param"])

    START --> GET_STATUS
    GET_STATUS --> CHECK_RETURN
    CHECK_RETURN -- Yes --> SET_9000
    CHECK_RETURN -- No --> CHECK_MSG
    SET_9000 --> CHECK_MSG
    CHECK_MSG -- null --> RESET_STATUS
    RESET_STATUS --> GET_BP_STATUS
    CHECK_MSG -- not null --> GET_BP_STATUS
    GET_BP_STATUS --> COMPARE_STATUS
    COMPARE_STATUS -- Yes --> SET_RETURN
    COMPARE_STATUS -- No --> GET_INMAP
    SET_RETURN --> GET_INMAP
    GET_INMAP --> CHECK_ERR
    CHECK_ERR -- not null --> CHECK_MAP
    CHECK_ERR -- null --> SKIP_ERR
    CHECK_MAP -- not contained --> PUT_ERR
    CHECK_MAP -- contained --> SKIP_ERR
    PUT_ERR --> SPECIAL_CHECK
    SKIP_ERR --> SPECIAL_CHECK
    SPECIAL_CHECK -- seiky/prc fields --> TEMPLATE_SET
    SPECIAL_CHECK -- other fields --> NORMAL_PUT
    NORMAL_PUT --> RETURN
    TEMPLATE_SET --> RETURN
```

### Error field iteration (repeated ~30 times)

The core of this method is a sequence of 30 identical conditional patterns, each mapping one error field from the CBS response template to the in-process parameter data map. Every pattern follows the same structure:

1. Check `template.isNull(fieldName_ERR)` — skip if the CBS did not produce this error.
2. If not null, check `inMap.containsKey("fieldName_err")` — skip if the field is already mapped (idempotency guard).
3. If not already present, call `inMap.put("fieldName_err", template.getString(fieldName_ERR))` to copy the error value.

The two final fields (`seiky_kei_no_err` and `prc_kmk_cd_err`) use `template.set()` instead of `inMap.put()` — a slight divergence in how the error value is written to the parameter.

**CRITICAL - Constant Resolution:**

| Constant | Value | Business Meaning |
|----------|-------|------------------|
| `RETURN_MESSAGE_STRING` | `"RETURN_MESSAGE_"` | Prefix for looking up human-readable error messages |
| `RETURN_MESSAGE_FORMAT` | `"%1$04d"` | Zero-padded 4-digit format for status codes (e.g., `0001`, `9000`) |
| `EKK0091D010CBSMsg.STATUS` | field `status` (int) | CBS response status code |
| `SCControlMapKeys.RETURN_CODE` | control map key | Previous business-process return code |
| `SCControlMapKeys.RETURN_MESSAGE` | control map key | Previous business-process error message |
| `SCControlMapKeys.ERROR_INFO` | control map key | Error info aggregator (used by caller) |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `param` | `IRequestParameterReadWrite` | The in-process request parameter object that carries work-area data, control map entries, and error information throughout the service contract registration flow. Its data map keyed by `"EKK0091D010"` holds the accumulated error fields from CBS responses. |
| 2 | `template` | `CAANMsg` | The CBS response message object (`EKK0091D010CBSMsg`) containing error fields such as `SYSID_ERR`, `SVC_CD_ERR`, `PRC_GRP_CD_ERR`, etc. Each field carries a non-null string value when an error occurred, or null when the CBS invocation succeeded for that particular field. |
| 3 | `returnCode` | `int` | The return code from the previous SC (Service Component) invocation. If non-zero, it forces the template status to `9000`, which represents a generic SC-level failure. If zero, the method uses the status code embedded in the CBS template itself. |
| 4 | `fixedText` | `String` | The data key prefix used by the caller (e.g., `"EKK0091D010"`) to identify which CBS response message is being processed. Passed by the caller but not consumed inside this method (likely for logging or future expansion). |

**No instance fields or external state** are read by this method. It operates purely on its parameters.

## 4. CRUD Operations / Called Services

This method performs **no database or SC-level CRUD operations**. It is purely a data-mapping utility that reads from the `template` (CAANMsg) and `param` (IRequestParameterReadWrite) objects and writes error fields into the parameter's data map.

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `JACBatCommon.isNull` | - | - | Checks if a field in the template message is null |
| R | `JACbatRknBusinessUtil.isNull` | - | - | Checks if a field in the template message is null |
| R | `JCHbatSeikyKaknoBusinessUtil.isNull` | - | - | Checks if a field in the template message is null |
| R | `JBSbatACInsentetivePrcInfoSaksei.isNull` | - | - | Checks if a field in the template message is null |
| R | `JBSbatAKCHSeikyYsoInfMake.isNull` | - | - | Checks if a field in the template message is null |
| R | `template.getInt` | - | - | Reads STATUS field from CBS response template |
| R | `template.isNull` | - | - | Checks 30 error fields for null in CBS response template |
| R | `template.getString` | - | - | Extracts string value of error fields from template |
| R | `param.getControlMapData` | - | - | Reads RETURN_CODE from the control map |
| R | `param.getData` | - | - | Reads the EKK0091D010 HashMap from the data map |
| R | `inMap.containsKey` | - | - | Checks if error key already exists in the map |
| R | `JCMAPLConstMgr.getString` | - | - | Looks up human-readable message string by key |
| SET | `param.setControlMapData` | - | - | Writes RETURN_CODE and RETURN_MESSAGE to control map |
| SET | `inMap.put` | - | - | Maps error field value into the data map |
| SET | `template.set` | - | - | Sets seiky_kei_no_err and prc_kmk_cd_err in template |

## 5. Dependency Trace

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

No screen/batch entry points found within 8 hops. Direct callers found: 2 methods.
Terminal operations from this method: `isNull` [R], `isNull` [R], `isNull` [R], `isNull` [R], `isNull` [R], `getString` [R], `getString` [R], `getString` [R], `getString` [R], `getString` [R], `getInt` [R], `put` [SET], `put` [SET], `setControlMapData` [SET], `getString` [R], `containsKey` [R], `getControlMapData` [R], `getData` [R]

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | CC: `editErrorInfo` | `JFUAddSvcKeiNetCC.editErrorInfo` -> `editErrInfoEKK0091D010` | `isNull` [R], `getString` [R], `put` [SET], `setControlMapData` [SET] |
| 2 | CC: `editOutEKK0091D010Msg` | `JFUAddSvcKeiNetCC.editOutEKK0091D010Msg` -> `editErrInfoEKK0091D010` | `isNull` [R], `getString` [R], `put` [SET], `setControlMapData` [SET] |

The `editErrorInfo` public method (lines 2475-2503) is the primary entry point: it is called after each SC invocation in the main flow (`addSvcKeiNetWork` method, line 320), iterating over a template array to process error info for both EKK0091D010 (service contract registration) and EKK0171D010 (service contract details registration).

## 6. Per-Branch Detail Blocks

### Block 1 - IF `(returnCode != 0)` (L2509)

> If the SC returned a non-zero return code, override the template status to 9000 (generic SC failure), overriding any specific status from the CBS response.

| No | Type | Code |
|----|------|------|
| 1 | SET | `templateStatus = 9000` // Override status to generic SC failure code [-> RETURN_CODE non-zero] |

---

### Block 2 - IF `(JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + format) == null)` (L2512)

> If the message resource bundle does not contain a human-readable message for the given status code, reset the status to 0 (no error). This prevents the system from displaying an error with no corresponding message text.

| No | Type | Code |
|----|------|------|
| 1 | SET | `format = String.format(RETURN_MESSAGE_FORMAT, templateStatus)` // Format as zero-padded 4-digit string [-> RETURN_MESSAGE_FORMAT="%1$04d"] |
| 2 | CALL | `JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + format)` // Look up error message key [-> RETURN_MESSAGE_STRING="RETURN_MESSAGE_"] |
| 3 | SET | `templateStatus = 0` // Reset status if message not found |

---

### Block 3 - IF / ELSE `(obj == null)` for bpStatus (L2518)

> Read the previous business-process return code from the parameter's control map. If absent (null), default to -1 so that any valid template status will be considered "worse" and will be set.

| No | Type | Code |
|----|------|------|
| 1 | SET | `bpStatus = -1` // Default when RETURN_CODE not yet set [-> param.getControlMapData returns null] |
| 2 | SET | `bpStatus = Integer.parseInt((String) param.getControlMapData(SCControlMapKeys.RETURN_CODE))` // Parse previous status code |

---

### Block 4 - IF `(templateStatus > bpStatus)` (L2528)

> **Priority-passing logic**: Only set the return code and message in the control map if the new template status is numerically higher (worse) than what was already recorded. This ensures that the most severe error is preserved through the multi-SC call chain.

| No | Type | Code |
|----|------|------|
| 1 | SET | `formatStatus = String.format(RETURN_MESSAGE_FORMAT, templateStatus)` // Format status code |
| 2 | CALL | `JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + formatStatus)` // Get human-readable message |
| 3 | SET | `message = JCMAPLConstMgr.getString(...)` |
| 4 | EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus)` |
| 5 | EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message)` |

---

### Block 5 - GET inMap (L2534)

> Retrieve the HashMap from the parameter's data store keyed by `"EKK0091D010"`. This map accumulates all error fields from the CBS response.

| No | Type | Code |
|----|------|------|
| 1 | SET | `inMap = (HashMap) param.getData("EKK0091D010")` |

---

### Block 6 - Error Field Iteration: sysid_err (L2536)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.SYSID_ERR)` |
| 2 | EXEC | `!inMap.containsKey("sysid_err")` |
| 3 | SET | `inMap.put("sysid_err", template.getString(EKK0091D010CBSMsg.SYSID_ERR))` |

---

### Block 7 - Error Field Iteration: svc_cd_err (L2545)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.SVC_CD_ERR)` |
| 2 | EXEC | `!inMap.containsKey("svc_cd_err")` |
| 3 | SET | `inMap.put("svc_cd_err", template.getString(EKK0091D010CBSMsg.SVC_CD_ERR))` |

---

### Block 8 - Error Field Iteration: mskm_dtl_no_err (L2554)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.MSKM_DTL_NO_ERR)` |
| 2 | EXEC | `!inMap.containsKey("mskm_dtl_no_err")` |
| 3 | SET | `inMap.put("mskm_dtl_no_err", template.getString(EKK0091D010CBSMsg.MSKM_DTL_NO_ERR))` |

---

### Block 9 - Error Field Iteration: menkaihat_anken_no_err (L2563)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.MENKAIHAT_ANKEN_NO_ERR)` |
| 2 | EXEC | `!inMap.containsKey("menkaihat_anken_no_err")` |
| 3 | SET | `inMap.put("menkaihat_anken_no_err", template.getString(EKK0091D010CBSMsg.MENKAIHAT_ANKEN_NO_ERR))` |

---

### Block 10 - Error Field Iteration: prc_grp_cd_err (L2572)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.PRC_GRP_CD_ERR)` |
| 2 | EXEC | `!inMap.containsKey("prc_grp_cd_err")` |
| 3 | SET | `inMap.put("prc_grp_cd_err", template.getString(EKK0091D010CBSMsg.PRC_GRP_CD_ERR))` |

---

### Block 11 - Error Field Iteration: pcrs_cd_err (L2581)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.PCRS_CD_ERR)` |
| 2 | EXEC | `!inMap.containsKey("pcrs_cd_err")` |
| 3 | SET | `inMap.put("pcrs_cd_err", template.getString(EKK0091D010CBSMsg.PCRS_CD_ERR))` |

---

### Block 12 - Error Field Iteration: pplan_cd_err (L2590)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.PPLAN_CD_ERR)` |
| 2 | EXEC | `!inMap.containsKey("pplan_cd_err")` |
| 3 | SET | `inMap.put("pplan_cd_err", template.getString(EKK0091D010CBSMsg.PPLAN_CD_ERR))` |

---

### Block 13 - Error Field Iteration: tk_hoshiki_kei_no_err (L2599)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.TK_HOSHIKI_KEI_NO_ERR)` |
| 2 | EXEC | `!inMap.containsKey("tk_hoshiki_kei_no_err")` |
| 3 | SET | `inMap.put("tk_hoshiki_kei_no_err", template.getString(EKK0091D010CBSMsg.TK_HOSHIKI_KEI_NO_ERR))` |

---

### Block 14 - Error Field Iteration: svc_use_sta_kibo_ymd_err (L2608)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.SVC_USE_STA_KIBO_YMD_ERR)` |
| 2 | EXEC | `!inMap.containsKey("svc_use_sta_kibo_ymd_err")` |
| 3 | SET | `inMap.put("svc_use_sta_kibo_ymd_err", template.getString(EKK0091D010CBSMsg.SVC_USE_STA_KIBO_YMD_ERR))` |

---

### Block 15 - Error Field Iteration: rsv_tsta_kibo_ymd_err (L2617)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.RSV_TSTA_KIBO_YMD_ERR)` |
| 2 | EXEC | `!inMap.containsKey("rsv_tsta_kibo_ymd_err")` |
| 3 | SET | `inMap.put("rsv_tsta_kibo_ymd_err", template.getString(EKK0091D010CBSMsg.RSV_TSTA_KIBO_YMD_ERR))` |

---

### Block 16 - Error Field Iteration: id_sokhosho_output_yh_err (L2626)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.ID_SOKHOSHO_OUTPUT_YH_ERR)` |
| 2 | EXEC | `!inMap.containsKey("id_sokhosho_output_yh_err")` |
| 3 | SET | `inMap.put("id_sokhosho_output_yh_err", template.getString(EKK0091D010CBSMsg.ID_SOKHOSHO_OUTPUT_YH_ERR))` |

---

### Block 17 - Error Field Iteration: payway_keizoku_flg_err (L2635)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.PAYWAY_KEIZOKU_FLG_ERR)` |
| 2 | EXEC | `!inMap.containsKey("payway_keizoku_flg_err")` |
| 3 | SET | `inMap.put("payway_keizoku_flg_err", template.getString(EKK0091D010CBSMsg.PAYWAY_KEIZOKU_FLG_ERR))` |

---

### Block 18 - Error Field Iteration: ftrial_kanyu_ymd_err (L2644)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.FTRIAL_KANYU_YMD_ERR)` |
| 2 | EXEC | `!inMap.containsKey("ftrial_kanyu_ymd_err")` |
| 3 | SET | `inMap.put("ftrial_kanyu_ymd_err", template.getString(EKK0091D010CBSMsg.FTRIAL_KANYU_YMD_ERR))` |

---

### Block 19 - Error Field Iteration: ftrial_prd_endymd_err (L2653)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.FTRIAL_PRD_ENDYMD_ERR)` |
| 2 | EXEC | `!inMap.containsKey("ftrial_prd_endymd_err")` |
| 3 | SET | `inMap.put("ftrial_prd_endymd_err", template.getString(EKK0091D010CBSMsg.FTRIAL_PRD_ENDYMD_ERR))` |

---

### Block 20 - Error Field Iteration: honkanyu_ymd_err (L2662)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.HONKANYU_YMD_ERR)` |
| 2 | EXEC | `!inMap.containsKey("honkanyu_ymd_err")` |
| 3 | SET | `inMap.put("honkanyu_ymd_err", template.getString(EKK0091D010CBSMsg.HONKANYU_YMD_ERR))` |

---

### Block 21 - Error Field Iteration: honkanyu_iko_kigen_ymd_err (L2671)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.HONKANYU_IKO_KIGEN_YMD_ERR)` |
| 2 | EXEC | `!inMap.containsKey("honkanyu_iko_kigen_ymd_err")` |
| 3 | SET | `inMap.put("honkanyu_iko_kigen_ymd_err", template.getString(EKK0091D010CBSMsg.HONKANYU_IKO_KIGEN_YMD_ERR))` |

---

### Block 22 - Error Field Iteration: letter_hasso_shiwake_div_err (L2680)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.LETTER_HASSO_SHIWAKE_DIV_ERR)` |
| 2 | EXEC | `!inMap.containsKey("letter_hasso_shiwake_div_err")` |
| 3 | SET | `inMap.put("letter_hasso_shiwake_div_err", template.getString(EKK0091D010CBSMsg.LETTER_HASSO_SHIWAKE_DIV_ERR))` |

---

### Block 23 - Error Field Iteration: thnx_letter_shs_cd_err (L2689)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.THNX_LETTER_SHS_CD_ERR)` |
| 2 | EXEC | `!inMap.containsKey("thnx_letter_shs_cd_err")` |
| 3 | SET | `inMap.put("thnx_letter_shs_cd_err", template.getString(EKK0091D010CBSMsg.THNX_LETTER_SHS_CD_ERR))` |

---

### Block 24 - Error Field Iteration: web_op_add_fail_flg_err (L2698)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.WEB_OP_ADD_FAIL_FLG_ERR)` |
| 2 | EXEC | `!inMap.containsKey("web_op_add_fail_flg_err")` |
| 3 | SET | `inMap.put("web_op_add_fail_flg_err", template.getString(EKK0091D010CBSMsg.WEB_OP_ADD_FAIL_FLG_ERR))` |

---

### Block 25 - Error Field Iteration: chge_mt_hojinsvkei_uk_no_err (L2707)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.CHGE_MT_HOJINSVKEI_UK_NO_ERR)` |
| 2 | EXEC | `!inMap.containsKey("chge_mt_hojinsvkei_uk_no_err")` |
| 3 | SET | `inMap.put("chge_mt_hojinsvkei_uk_no_err", template.getString(EKK0091D010CBSMsg.CHGE_MT_HOJINSVKEI_UK_NO_ERR))` |

---

### Block 26 - Error Field Iteration: chge_mt_hojinsvkei_uk_nopt_err (L2716)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.CHGE_MT_HOJINSVKEI_UK_NOPT_ERR)` |
| 2 | EXEC | `!inMap.containsKey("chge_mt_hojinsvkei_uk_nopt_err")` |
| 3 | SET | `inMap.put("chge_mt_hojinsvkei_uk_nopt_err", template.getString(EKK0091D010CBSMsg.CHGE_MT_HOJINSVKEI_UK_NOPT_ERR))` |

---

### Block 27 - Error Field Iteration: pnlty_hassei_cd_err (L2725)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.PNLTY_HASSEI_CD_ERR)` |
| 2 | EXEC | `!inMap.containsKey("pnlty_hassei_cd_err")` |
| 3 | SET | `inMap.put("pnlty_hassei_cd_err", template.getString(EKK0091D010CBSMsg.PNLTY_HASSEI_CD_ERR))` |

---

### Block 28 - Error Field Iteration: ido_div_err (L2734)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.IDO_DIV_ERR)` |
| 2 | EXEC | `!inMap.containsKey("ido_div_err")` |
| 3 | SET | `inMap.put("ido_div_err", template.getString(EKK0091D010CBSMsg.IDO_DIV_ERR))` |

---

### Block 29 - Error Field Iteration: intr_cd_err (L2743)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.INTR_CD_ERR)` |
| 2 | EXEC | `!inMap.containsKey("intr_cd_err")` |
| 3 | SET | `inMap.put("intr_cd_err", template.getString(EKK0091D010CBSMsg.INTR_CD_ERR))` |

---

### Block 30 - Error Field Iteration: work_rrk_biko_err (L2752)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.WORK_RRK_BIKO_ERR)` |
| 2 | EXEC | `!inMap.containsKey("work_rrk_biko_err")` |
| 3 | SET | `inMap.put("work_rrk_biko_err", template.getString(EKK0091D010CBSMsg.WORK_RRK_BIKO_ERR))` |

---

### Block 31 - Error Field Iteration: auto_shosa_tran_stat_cd_err (L2761)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.AUTO_SHOSA_TRAN_STAT_CD_ERR)` |
| 2 | EXEC | `!inMap.containsKey("auto_shosa_tran_stat_cd_err")` |
| 3 | SET | `inMap.put("auto_shosa_tran_stat_cd_err", template.getString(EKK0091D010CBSMsg.AUTO_SHOSA_TRAN_STAT_CD_ERR))` |

---

### Block 32 - Error Field Iteration: kotei_ip_ad_hktgi_um_err (L2770)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.KOTEI_IP_AD_HKTGI_UM_ERR)` |
| 2 | EXEC | `!inMap.containsKey("kotei_ip_ad_hktgi_um_err")` |
| 3 | SET | `inMap.put("kotei_ip_ad_hktgi_um_err", template.getString(EKK0091D010CBSMsg.KOTEI_IP_AD_HKTGI_UM_ERR))` |

---

### Block 33 - Error Field Iteration: pc_pack_um_err (L2779)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.PC_PACK_UM_ERR)` |
| 2 | EXEC | `!inMap.containsKey("pc_pack_um_err")` |
| 3 | SET | `inMap.put("pc_pack_um_err", template.getString(EKK0091D010CBSMsg.PC_PACK_UM_ERR))` |

---

### Block 34 - Error Field Iteration: cust_nova_use_um_err (L2788)

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.CUST_NOVA_USE_UM_ERR)` |
| 2 | EXEC | `!inMap.containsKey("cust_nova_use_um_err")` |
| 3 | SET | `inMap.put("cust_nova_use_um_err", template.getString(EKK0091D010CBSMsg.CUST_NOVA_USE_UM_ERR))` |

---

### Block 35 - [Japanese Comment] サービス契約＜eo光ネット＞登録.請求契約番号 -> 請求契約番号 (L2797)

> Maps the billing contract number error field from the template into the parameter data map using `template.set()` instead of `inMap.put()`.

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.SEIKY_KEI_NO_ERR)` |
| 2 | EXEC | `!inMap.containsKey("seiky_kei_no_err")` |
| 3 | SET | `template.set("seiky_kei_no_err", template.getString(EKK0091D010CBSMsg.SEIKY_KEI_NO_ERR))` // Uses template.set() |

---

### Block 36 - [Japanese Comment] サービス契約＜eo光ネット＞登録.料金項目コード -> 料金項目コード (L2806)

> Maps the fee item code error field from the template into the parameter data map using `template.set()` instead of `inMap.put()`.

| No | Type | Code |
|----|------|------|
| 1 | EXEC | `!template.isNull(EKK0091D010CBSMsg.PRC_KMK_CD_ERR)` |
| 2 | EXEC | `!inMap.containsKey("prc_kmk_cd_err")` |
| 3 | SET | `template.set("prc_kmk_cd_err", template.getString(EKK0091D010CBSMsg.PRC_KMK_CD_ERR))` // Uses template.set() |

---

### Block 37 - RETURN (L2815)

| No | Type | Code |
|----|------|------|
| 1 | RETURN | `return param` |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `SYSID` | Field | System ID — identifies the customer account system in the telecom billing platform |
| `svc_cd` | Field | Service Code — identifies the type of service (e.g., FTTH, Mail, ENUM) |
| `mskm_dtl_no` | Field | Application detail number — internal reference number for application sub-items |
| `menkaihat_anken_no` | Field | Face-opening case number — refers to the business case when a new line is opened or transferred |
| `prc_grp_cd` | Field | Price group code — classifies the pricing tier/group for a service |
| `pcrs_cd` | Field | Price code code — identifies a specific pricing plan/charge structure |
| `pplan_cd` | Field | Pricing plan code — identifies the billing plan for a service contract |
| `tk_hoshiki_kei_no` | Field | Provider system contract number — contract number at the network provider level |
| `svc_use_sta_kibo_ymd` | Field | Service usage start desired date — customer's desired date for service activation |
| `rsv_tsta_kibo_ymd` | Field | Reservation application start desired date — desired date for scheduled service activation |
| `id_sokhosho_output_yh` | Field | ID rapid publication output flag — indicates whether to publish ID information to NTT's rapid directory service |
| `payway_keizoku_flg` | Field | Payment method continuation flag — indicates whether to continue the same payment method for renewal |
| `ftrial_kanyu_ymd` | Field | Trial entry date — start date of the trial/evaluation period |
| `ftrial_prd_endymd` | Field | Trial period end date — end date of the trial/evaluation period |
| `honkanyu_ymd` | Field | Full activation date — the date the trial service becomes a full paid service |
| `honkanyu_iko_kigen_ymd` | Field | Full activation migration deadline — deadline to migrate from trial to full service |
| `letter_hasso_shiwake_div` | Field | Letter dispatch classification — how billing statements are sent (e.g., combined, separate) |
| `thnx_letter_shs_cd` | Field | Thank-you letter send destination code — where to send the customer welcome/thank-you letter |
| `web_op_add_fail_flg` | Field | Web operation addition failure flag — indicates if web-based option addition failed |
| `chge_mt_hojinsvkei_uk_no` | Field | Change-origin legal entity service contract receipt number — contract number of the original service before change |
| `chge_mt_hojinsvkei_uk_nopt` | Field | Change-origin legal entity service contract receipt number (sub) — sub-number for the original service |
| `pnlty_hassei_cd` | Field | Penalty occurrence code — indicates if a contractual penalty has been triggered |
| `ido_div` | Field | Migration classification — indicates whether this is a port-in, port-out, or new connection |
| `intr_cd` | Field | Introduction code — how the customer was acquired/referred |
| `work_rrk_biko` | Field | Work related memo — operational notes for the registration process |
| `auto_shosa_tran_stat_cd` | Field | Auto-document processing status code — status of automated document handling |
| `kotei_ip_ad_hktgi_um` | Field | Fixed IP address continuation flag — whether to keep the existing fixed IP address |
| `pc_pack_um` | Field | PC package flag — whether a PC package is included with the service |
| `cust_nova_use_um` | Field | Customer NOVA usage flag — whether the customer uses NTT's NOVA service |
| `seiky_kei_no` | Field | Billing contract number — the invoice contract number for the customer |
| `prc_kmk_cd` | Field | Fee item code — identifies a specific charge/fee line item on the bill |
| `STATUS` | Field | CBS response status code — numeric severity level from the service component response |
| RETURN_CODE | Field | Return code — business-level status code passed through the control map |
| RETURN_MESSAGE | Field | Return message — human-readable error message corresponding to the return code |
| ERROR_INFO | Field | Error info aggregator — list of structured error objects used by TemplateErrorUtil for UI rendering |
| eo光ネット | Business term | eo Light Network — NTT East's fiber-to-the-home (FTTH) broadband service brand |
| SC | Acronym | Service Component — a backend component that performs a specific business transaction (e.g., service contract registration) |
| CBS | Acronym | Common Business Service — a shared service layer that processes transactions and returns messages |
| CAANMsg | Acronym | Customer Account and Authentication Network Message — the message/data object used to pass data between CBS components |
| IRequestParameterReadWrite | Interface | Request parameter interface — the parameter passing contract for business components |
| JCMAPLConstMgr | Class | Japan Communications Message Application Localization Constant Manager — manages i18n message resources |
| `RETURN_MESSAGE_FORMAT` | Constant | `"%1$04d"` — zero-padded 4-digit format string for status codes (e.g., 0001, 1000, 9000) |
| `TMCK_ERR_STATUS` | Constant | `1000` — the threshold status code above which a single-field error becomes a system-level exception |
| TEMPLATE_ID_NET | Constant | `"EKK0091D010"` — template ID for service contract <eo Light Network> registration |
| TEMPLATE_ID_NET_UTC | Constant | `"EKK0171D010"` — template ID for service contract details <eo Light Network> registration |
| SCControlMapKeys | Class | Control map key constants — defines keys like RETURN_CODE, RETURN_MESSAGE, ERROR_INFO for the control map |
| TemplateErrorUtil | Class | Utility for aggregating and formatting error information for UI display |
| CC | Acronym | Common Component — a shared business component (similar to a utility or helper class) |
| FTTH | Business term | Fiber To The Home — fiber-optic broadband internet service |
