# Business Logic — JFUAddSvcKeiTelCC.editRetEKK0111D010() [300 LOC]

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

## 1. Role

### JFUAddSvcKeiTelCC.editRetEKK0111D010()

This method performs the **downward mapping** (response-to-model mapping) for the eo Light Phone service contract registration operation. After the Service Component (SC) `EKK0111D010` (Service Contract eo Light Phone Registration) processes the inbound registration data and returns a `CAANMsg` template in the response list, this method extracts the template and maps its fields back into the `IRequestParameterReadWrite` parameter object so that subsequent processing stages and UI screens can consume the registration results.

The method handles the standard set of service contract fields: service contract number, invoice contract number (v1.00.00 addition), generation timestamp, service status, trial period end date, reservation application date/code, PPP authentication credentials, registration and update metadata (timestamp and operator), and the invalid flag. Each field is extracted from the SC response template with null-safety — if a field is absent, an empty string is stored.

A **discount service auto-application** feature (added 2012/4/5) is integrated into the mapping flow. This feature constructs a service contract list map that includes the target contract subtype code (`"01"`), a hardcoded service status of `"010"` (Accepted/受給予き), and the service code, price group code, price course code, and price plan code derived from the telecom data map. This list is then injected into the discount service auto-application work map for downstream processing by the `JKKWrisvcAutoAplyCC` component.

Error information is processed via `editErrInfoEKK0111D010`, which compares the SC response status code against the existing BP-level return code and sets the more severe status as the effective return status. The mapped error list is then stored in the control map for screen-level display.

The design pattern implemented is a **response-to-model mapper** (downward mapping dispatcher) that bridges the Service Component layer and the presentation/work-area layer. It is a shared utility called by the `addTelTrk()` method after each SC call, forming the second half of a request-response mapping pair (with `editInEKK0111D010` handling the upward/inbound mapping).

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["editRetEKK0111D010"])
    SUB1["Extract templates from msgList TEMPLATE_LIST_KEY"]
    SUB2["Extract first template templates[0]"]
    SUB3["Extract returnCode RET_CD_INT_KEY"]
    SUB4["Get workMap param.getMappingWorkArea"]
    CON1{"workMap is null"}
    SUB5["Create new HashMap set to param"]
    SUB6["Get workDataMap from workMap CC_WORK_AREA_NAME"]
    CON2{"workDataMap is null"}
    SUB7["Create new HashMap put into workMap"]
    SUB8["Get dataMap param.getData fixedText"]
    CON3{"dataMap is null"}
    SUB9["Create new HashMap set to param"]
    SUB10["Set sysId and mskmNo to empty string"]
    SUB11["Get telecom data param.getData EKK0111D010"]
    SUB12["Get addKeishaServiceCCWorkMap KEISHA area"]
    SUB13["Get addMskmSCWork MSKM area"]
    SUB14["Get wriSvcAutoAplyMap wri svc auto apply map"]
    SUB15["Create svcKeiGrpListMap svcKeiListMap svcKeiList"]
    SUB16["Extract svcKeiGrpList from wriSvcAutoAplyMap"]
    SUB17["Process svc_kei_no null check on template"]
    CON4{"svc_kei_no is null"}
    SUB18["dataMap put svc_kei_no empty svcKeiListMap put empty"]
    SUB19["dataMap put svc_kei_no from template workDataMap put svc_kei_no svcKeiListMap put svc_kei_no"]
    SUB20["Process seiky_kei_no null check"]
    CON5{"seiky_kei_no is null"}
    SUB21["dataMap put seiky_kei_no empty"]
    SUB22["dataMap put seiky_kei_no from getWorkMapValue"]
    SUB23["Process gene_add_dtm null check"]
    SUB24["Process svc_kei_stat null check"]
    SUB25["Process ftrial_prd_endymd null check"]
    SUB26["Process rsv_aply_ymd null check"]
    SUB27["Process rsv_aply_cd null check"]
    SUB28["Process kk0111_gene_add_dtm null check"]
    SUB29["Process ppp_ninsho_id null check"]
    SUB30["Process ppp_ninsho_id_pwd null check"]
    SUB31["Process add_dtm null check"]
    SUB32["Process add_opeacnt null check"]
    SUB33["Process upd_dtm null check"]
    SUB34["Process upd_opeacnt null check"]
    SUB35["Process mk_flg null check"]
    SUB36["Extract svcKeiGrpListMap from svcKeiGrpList get 0"]
    SUB37["Get svcKeiList from svcKeiGrpListMap"]
    CON6{"svcKeiGrpListMap contains SVC_KEI_LIST"}
    SUB38["svcKeiList from group list map"]
    SUB39["Set sysId from wriSvcAutoAplyMap fallback from KEISHA work"]
    SUB40["Set mskmNo from wriSvcAutoAplyMap fallback from MSKM work"]
    SUB41["Build svcKeiListMap with tg_kei_skbt_cd and svc_kei_stat and telMap fields"]
    SUB42["Add svcKeiListMap to svcKeiList"]
    CON7{"svcKeiGrpListMap has SVC_KEI_LIST"}
    SUB43["Put svcKeiList into svcKeiGrpListMap"]
    SUB44["Call editErrInfoEKK0111D010"]
    SUB45["Get errList from control map ERROR_INFO"]
    CON8{"errList is null"}
    SUB46["Create new ArrayList for errList"]
    SUB47["Set control map TemplateErrorUtil.getErrorInfo"]
    RETURN(["Return param"])

    START --> SUB1 --> SUB2 --> SUB3 --> SUB4
    SUB4 --> CON1
    CON1 -- Yes --> SUB5
    CON1 -- No --> SUB6
    SUB5 --> SUB6
    SUB6 --> CON2
    CON2 -- Yes --> SUB7
    CON2 -- No --> SUB8
    SUB7 --> SUB8
    SUB8 --> CON3
    CON3 -- Yes --> SUB9
    CON3 -- No --> SUB10
    SUB9 --> SUB10
    SUB10 --> SUB11 --> SUB12 --> SUB13 --> SUB14
    SUB14 --> SUB15 --> SUB16
    SUB16 --> SUB17
    SUB17 --> CON4
    CON4 -- Yes --> SUB18
    CON4 -- No --> SUB19
    SUB18 --> SUB20 --> CON5
    CON5 -- Yes --> SUB21
    CON5 -- No --> SUB22
    SUB21 --> SUB23
    SUB19 --> SUB23
    SUB22 --> SUB23
    SUB23 --> SUB24 --> SUB25 --> SUB26 --> SUB27
    SUB27 --> SUB28 --> SUB29 --> SUB30 --> SUB31
    SUB31 --> SUB32 --> SUB33 --> SUB34 --> SUB35
    SUB35 --> SUB36 --> SUB37 --> CON6
    CON6 -- Yes --> SUB38
    CON6 -- No --> SUB39
    SUB38 --> SUB39
    SUB39 --> SUB40 --> SUB41 --> SUB42 --> CON7
    CON7 -- No --> SUB43
    CON7 -- Yes --> RETURN
    SUB43 --> RETURN
    RETURN --> SUB44 --> SUB45 --> CON8
    CON8 -- Yes --> SUB46
    CON8 -- No --> SUB47
    SUB46 --> SUB47 --> RETURN
```

**Key Constant Resolutions:**

| Constant | Value | Business Meaning |
|----------|-------|------------------|
| `CC_WORK_AREA_NAME` | `"JFUAddSvcKeiTelCCWork"` | Work area for this component's registration mapping |
| `CC_WORK_AREA_NAME_KEISHA` | `"JFUAddKeishaServiceCCWork"` | Work area for customer service data |
| `CC_WORK_AREA_NAME_MSKM` | `"JFUAddMskmSCWork"` | Work area for subscription order data |
| `CC_WORK_AREA_NAME_SKK` | `"JFUAddSkkSCWork"` | Work area for billing account data |
| `CC_WRI_SVC_AUTO_APLY_MAP` | `"JKKWrisvcAutoAplyCCMap"` | Discount service auto-application map key |
| `SVC_KEI_GRP_LIST` | `"svc_kei_grp_list"` | Service contract group list key |
| `SVC_KEI_LIST` | `"svc_kei_list"` | Service contract list key |
| `TG_KEI_SKBT_CD` | `"01"` | Target contract subtype code (main contract) |
| `svc_kei_stat` | `"010"` | Service status "Accepted" (受给予き) |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `msgList` | `Map<?, ?>` | The SC response message list containing the `CAANMsg` template(s) returned from the `EKK0111D010` Service Component call. The first element (`templates[0]`) is the primary registration response template. Retrieved via `JCMConstants.TEMPLATE_LIST_KEY`. Also carries the return code via `JCMConstants.RET_CD_INT_KEY`. |
| 2 | `param` | `IRequestParameterReadWrite` | The request parameter object that holds work areas, data maps, and control maps. This is the target of all downward mapping — the method writes mapped results here for downstream consumption. Contains `getMappingWorkArea()`, `getData()`, `setData()`, `getControlMapData()`, and `setControlMapData()` operations. |
| 3 | `fixedText` | `String` | The service message identifier / template key used to identify the data map within the parameter. For this method, it is typically `"EKK0111D010"`. Used as the key when calling `param.getData(fixedText)` and passed through to `editErrInfoEKK0111D010`. |

**Instance fields / external state read by the method:**

| Field | Type | Usage |
|-------|------|-------|
| `CC_WORK_AREA_NAME` | `String` | Key to retrieve the component's private work area from the work map |
| `CC_WORK_AREA_NAME_KEISHA` | `String` | Key to retrieve the customer service work area |
| `CC_WORK_AREA_NAME_MSKM` | `String` | Key to retrieve the subscription order work area |
| `CC_WORK_AREA_NAME_SKK` | `String` | Key used when retrieving invoice contract number via `getWorkMapValue` |
| `CC_WRI_SVC_AUTO_APLY_MAP` | `String` | Key for the discount service auto-application work map |
| `SVC_KEI_GRP_LIST` | `String` | Key within the discount map for the service contract group list |
| `SVC_KEI_LIST` | `String` | Key within a group map for the service contract list |

## 4. CRUD Operations / Called Services

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `JACBatCommon.isNull` | - | - | Null check utility on template field values |
| R | `JACbatRknBusinessUtil.isNull` | - | - | Null check utility on template field values |
| R | `JCHbatSeikyKaknoBusinessUtil.isNull` | - | - | Null check utility on template field values |
| R | `JBSbatACECBuyIfTrkm.getErrorInfo` | - | - | Error info retrieval (inherited from called context) |
| R | `JBSbatACInsentetivePrcInfoSaksei.isNull` | - | - | Null check utility on template field values |
| R | `JBSbatACKojiChrgInfoTrkm.getErrorInfo` | - | - | Error info retrieval (inherited from called context) |
| R | `JBSbatAKCHSeikyYsoInfMake.isNull` | - | - | Null check utility on template field values |
| R | `JBSbatAKKshkmRsltInfoTukiawsday.setData` | - | - | Data setting utility (inherited from called context) |
| R | `JBSbatAKKshkmRsltInfoTukiaws.setData` | - | - | Data setting utility (inherited from called context) |
| R | `JBSbatAKKshkmRsltInfoTukiawsRealSkh.setData` | - | - | Data setting utility (inherited from called context) |
| R | `JBSbatAKKshkmRsltInfTkCvsNCnsl.setData` | - | - | Data setting utility (inherited from called context) |
| R | `JBSbatDKNyukaFinAdd.getData` | - | - | Data retrieval utility (inherited from called context) |
| R | `JBSbatFUCaseFileRnkData.getString` | - | - | String data retrieval utility (inherited from called context) |
| R | `JBSbatFUMoveNaviData.getString` | - | - | String data retrieval utility (inherited from called context) |
| R | `JBSbatKKGetCTITelno.setData` | - | - | Data setting utility (inherited from called context) |
| R | `JBSbatZMAdDataSet.getString` | - | - | String data retrieval utility (inherited from called context) |
| U | `JFUAddSvcKeiTelCC.editErrInfoEKK0111D010` | EKK0111D010 | - | Updates error information by comparing SC return status with BP return code; sets the higher severity status |
| R | `JFUAddSvcKeiTelCC.getWorkMapValue` | - | - | Reads a value from the work area map by key; used for invoice contract number retrieval |
| R | `JFUeoTelOpTransferCC.getData` | - | - | Data retrieval utility (inherited from called context) |
| R | `JFUTransferCC.getData` | - | - | Data retrieval utility (inherited from called context) |
| R | `JFUTransferListToListCC.getData` | - | - | Data retrieval utility (inherited from called context) |
| R | `JESC0101B010TPMA.getString` | - | - | String data retrieval utility (inherited from called context) |
| R | `JESC0101B020TPMA.getString` | - | - | String data retrieval utility (inherited from called context) |
| R | `KKW12701SFLogic.getData` | - | - | Data retrieval utility (inherited from called context) |
| R | `ApiBpInterface.getErrorInfo` | - | - | Error info retrieval utility (inherited from called context) |
| R | `EKK0111D010CBSMsg` fields | EKK0111D010 | - | Reads template fields (SVC_KEI_NO, SEIKY_KEI_NO, GENE_ADD_DTM, SVC_KEI_STAT, FTRIAL_PRD_ENDYMD, RSV_APLY_YMD, RSV_APLY_CD, PPP_NINSHO_ID, PPP_NINSHO_ID_PWD, ADD_DTM, ADD_OPEACNT, UPD_DTM, UPD_OPEACNT, MK_FLG, KK0111_GENE_ADD_DTM) |
| R | `TemplateErrorUtil.getErrorInfo` | - | - | Builds error info list from msgList and existing errList |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | CBS: JFUAddSvcKeiTelCC.addTelTrk() | `addTelTrk(handle, param, fixedText)` -> `scCall.run(...)` -> `EKK0111D010 SC` -> `editRetEKK0111D010(result, param, fixedText)` | `editErrInfoEKK0111D010 [U] SC error info` `getWorkMapValue [R] work area map` `TemplateErrorUtil.getErrorInfo [R] error list` |

**Terminal operations from this method:**
- `getErrorInfo [R]` — Multiple error info retrievals from utility classes (SC response error inspection)
- `editErrInfoEKK0111D010 [U]` — Updates the error information in the parameter by comparing SC and BP return codes
- `getString [R]` — Template field string extractions from the SC response
- `isNull [-]` — Template field null checks (20 field checks total)
- `getWorkMapValue [R]` — Reads invoice contract number from work area map
- `TemplateErrorUtil.getErrorInfo [R]` — Aggregates error info from msgList and errList for control map storage

## 6. Per-Branch Detail Blocks

**Block 1** — [INITIALIZATION] (L860)

> Extract templates, return code, and initialize work maps.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY)` // Extract SC response templates from msgList (-> TEMPLATE_LIST_KEY) |
| 2 | SET | `template = templates[0]` // Take first (primary) template |
| 3 | SET | `returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY)` // Extract SC return code (-> RET_CD_INT_KEY) |
| 4 | EXEC | `workMap = param.getMappingWorkArea()` // Get work area map (-> Get workMap param.getMappingWorkArea) |
| 5 | IF | `workMap == null` -> (L869) |

**Block 1.1** — [IF-ELSE] `workMap == null` (L869)

> Initialize the work area if it does not exist.

| # | Type | Code |
|---|------|------|
| 1 | SET | `workMap = new HashMap()` // Create new work area |
| 2 | EXEC | `param.setMappingWorkArea(workMap)` // Store in param |

**Block 1.2** — [WORK DATA MAP INITIALIZATION] (L876)

> Initialize the component's private work data map.

| # | Type | Code |
|---|------|------|
| 1 | SET | `workDataMap = (HashMap)workMap.get(CC_WORK_AREA_NAME)` // Get work data map (-> CC_WORK_AREA_NAME="JFUAddSvcKeiTelCCWork") |
| 2 | IF | `workDataMap == null` -> (L878) |

**Block 1.2.1** — [IF] `workDataMap == null` (L878)

> Create work data map if missing.

| # | Type | Code |
|---|------|------|
| 1 | SET | `workDataMap = new HashMap()` |
| 2 | EXEC | `workMap.put(CC_WORK_AREA_NAME, workDataMap)` // Store in workMap (-> CC_WORK_AREA_NAME="JFUAddSvcKeiTelCCWork") |

**Block 1.3** — [DATA MAP INITIALIZATION] (L885)

> Get or create the data map for the fixedText key.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `dataMap = (HashMap)param.getData(fixedText)` // Get data map (-> fixedText="EKK0111D010") |
| 2 | IF | `dataMap == null` -> (L887) |

**Block 1.3.1** — [IF] `dataMap == null` (L887)

> Create data map if missing.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap = new HashMap()` |
| 2 | EXEC | `param.setData(fixedText, dataMap)` // Store in param (-> fixedText="EKK0111D010") |

**Block 2** — [DISCOUNT SERVICE AUTO-APPLICATION SETUP] (L892)

> Set up variables and retrieve auxiliary data maps for the discount service auto-application feature.

| # | Type | Code |
|---|------|------|
| 1 | SET | `sysId = ""` // Initialize system ID (-> 2012/4/5 割引サービス自動適用対応) |
| 2 | SET | `mskmNo = ""` // Initialize subscription number (-> 2012/4/5 割引サービス自動適用対応) |
| 3 | EXEC | `telMap = (HashMap)(param.getData("EKK0111D010"))` // Get telecom registration data |
| 4 | SET | `addKeishaServiceCCWorkMap = (HashMap)workMap.get(CC_WORK_AREA_NAME_KEISHA)` // Get customer service work map (-> CC_WORK_AREA_NAME_KEISHA="JFUAddKeishaServiceCCWork") |
| 5 | SET | `addMskmSCWork = (HashMap)workMap.get(CC_WORK_AREA_NAME_MSKM)` // Get subscription order work map (-> CC_WORK_AREA_NAME_MSKM="JFUAddMskmSCWork") |
| 6 | SET | `wriSvcAutoAplyMap = (HashMap)param.getData(CC_WRI_SVC_AUTO_APLY_MAP)` // Get discount auto-application map (-> CC_WRI_SVC_AUTO_APLY_MAP="JKKWrisvcAutoAplyCCMap") |
| 7 | SET | `svcKeiGrpListMap = new HashMap()` // Create service contract group list map |
| 8 | SET | `svcKeiListMap = new HashMap()` // Create service contract list map |
| 9 | SET | `svcKeiList = new ArrayList()` // Create service contract list |
| 10 | SET | `svcKeiGrpList = (ArrayList)wriSvcAutoAplyMap.get(SVC_KEI_GRP_LIST)` // Extract service contract group list (-> SVC_KEI_GRP_LIST="svc_kei_grp_list") |

**Block 3** — [SVC_KEI_NO MAPPING] (L927)

> Map the service contract number. If null in template, set empty string. Otherwise extract and populate all three maps (dataMap, workDataMap, svcKeiListMap).

| # | Type | Code |
|---|------|------|
| 1 | IF | `template.isNull(EKK0111D010CBSMsg.SVC_KEI_NO)` -> (L927) |

**Block 3.1** — [IF-ELSE] `SVC_KEI_NO is null` (L927)

> Branch: service contract number is null vs. present.

| # | Type | Code |
|---|------|------|
| 1 | IF-NULL | `template.isNull(EKK0111D010CBSMsg.SVC_KEI_NO)` -> Yes: Branch 3.1.1, No: Branch 3.1.2 |

**Block 3.1.1** — [IF-NULL: YES] SVC_KEI_NO is null (L928)

> Set empty strings in data map and discount list map.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("svc_kei_no", new String())` // Empty service contract number |
| 2 | SET | `svcKeiListMap.put("svc_kei_no", "")` // Empty in discount list map (-> 2012/4/5 割引サービス自動適用対応) |

**Block 3.1.2** — [IF-NULL: NO] SVC_KEI_NO is present (L934)

> Extract the service contract number from template into data map, work data map, and discount list map.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("svc_kei_no", template.getString(EKK0111D010CBSMsg.SVC_KEI_NO))` |
| 2 | SET | `workDataMap.put("svc_kei_no", template.getString(EKK0111D010CBSMsg.SVC_KEI_NO))` |
| 3 | SET | `svcKeiListMap.put("svc_kei_no", template.getString(EKK0111D010CBSMsg.SVC_KEI_NO))` |

**Block 4** — [SEIKY_KEI_NO MAPPING] (L945)

> Map the invoice contract number (v1.00.00 addition: 請求契約登録). If null, set empty; otherwise retrieve from work area via `getWorkMapValue`.

| # | Type | Code |
|---|------|------|
| 1 | IF | `template.isNull(EKK0111D010CBSMsg.SEIKY_KEI_NO)` -> (L945) |

**Block 4.1** — [IF-ELSE] `SEIKY_KEI_NO is null` (L945)

> Branch: invoice contract number is null vs. present.

| # | Type | Code |
|---|------|------|
| 1 | IF-NULL | `template.isNull(EKK0111D010CBSMsg.SEIKY_KEI_NO)` -> Yes: Branch 4.1.1, No: Branch 4.1.2 |

**Block 4.1.1** — [IF-NULL: YES] SEIKY_KEI_NO is null (L946)

> Set empty string for invoice contract number.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("seiky_kei_no", "")` |

**Block 4.1.2** — [IF-NULL: NO] SEIKY_KEI_NO is present (L948)

> Retrieve invoice contract number from work area map using `getWorkMapValue` helper.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put(EKK0111D010CBSMsg.SEIKY_KEI_NO, getWorkMapValue(param, "seiky_kei_no", CC_WORK_AREA_NAME_SKK))` // From SKK work area (-> CC_WORK_AREA_NAME_SKK="JFUAddSkkSCWork") |

**Block 5** — [GENE_ADD_DTM MAPPING] (L956)

> Map the generation/registration timestamp. Null-safely extracts from template.

| # | Type | Code |
|---|------|------|
| 1 | IF | `template.isNull(EKK0111D010CBSMsg.GENE_ADD_DTM)` -> (L956) |

**Block 5.1** — [IF-ELSE] `GENE_ADD_DTM is null` (L956)

> Branch: timestamp is null vs. present.

| # | Type | Code |
|---|------|------|
| 1 | IF-NULL | `template.isNull(EKK0111D010CBSMsg.GENE_ADD_DTM)` -> Yes: Branch 5.1.1, No: Branch 5.1.2 |

**Block 5.1.1** — [IF-NULL: YES] GENE_ADD_DTM is null (L957)

> Set empty string for generation timestamp.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("gene_add_dtm", new String())` // (-> 世代登録年月日秒) |

**Block 5.1.2** — [IF-NULL: NO] GENE_ADD_DTM is present (L960)

> Extract generation timestamp from template.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("gene_add_dtm", template.getString(EKK0111D010CBSMsg.GENE_ADD_DTM))` |

**Block 6** — [SVC_KEI_STAT MAPPING] (L965)

> Map the service contract status. Null-safely extracts from template.

| # | Type | Code |
|---|------|------|
| 1 | IF | `template.isNull(EKK0111D010CBSMsg.SVC_KEI_STAT)` -> (L965) |

**Block 6.1** — [IF-ELSE] `SVC_KEI_STAT is null` (L965)

> Branch: service status is null vs. present.

| # | Type | Code |
|---|------|------|
| 1 | IF-NULL | `template.isNull(EKK0111D010CBSMsg.SVC_KEI_STAT)` -> Yes: Branch 6.1.1, No: Branch 6.1.2 |

**Block 6.1.1** — [IF-NULL: YES] SVC_KEI_STAT is null (L966)

> Set empty string for service status.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("svc_kei_stat", new String())` // (-> サービス契約ステータス) |

**Block 6.1.2** — [IF-NULL: NO] SVC_KEI_STAT is present (L969)

> Extract service status from template.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("svc_kei_stat", template.getString(EKK0111D010CBSMsg.SVC_KEI_STAT))` |

**Block 7** — [FTRIAL_PRD_ENDYMD MAPPING] (L974)

> Map the trial period end date. Null-safely extracts from template.

| # | Type | Code |
|---|------|------|
| 1 | IF | `template.isNull(EKK0111D010CBSMsg.FTRIAL_PRD_ENDYMD)` -> (L974) |

**Block 7.1** — [IF-ELSE] `FTRIAL_PRD_ENDYMD is null` (L974)

> Branch: trial period end date is null vs. present.

| # | Type | Code |
|---|------|------|
| 1 | IF-NULL | `template.isNull(EKK0111D010CBSMsg.FTRIAL_PRD_ENDYMD)` -> Yes: Branch 7.1.1, No: Branch 7.1.2 |

**Block 7.1.1** — [IF-NULL: YES] FTRIAL_PRD_ENDYMD is null (L975)

> Set empty string for trial period end date.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("ftrial_prd_endymd", new String())` // (-> 試用期間終了年月日) |

**Block 7.1.2** — [IF-NULL: NO] FTRIAL_PRD_ENDYMD is present (L978)

> Extract trial period end date from template.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("ftrial_prd_endymd", template.getString(EKK0111D010CBSMsg.FTRIAL_PRD_ENDYMD))` |

**Block 8** — [RSV_APLY_YMD MAPPING] (L983)

> Map the reservation application date. Null-safely extracts from template.

| # | Type | Code |
|---|------|------|
| 1 | IF | `template.isNull(EKK0111D010CBSMsg.RSV_APLY_YMD)` -> (L983) |

**Block 8.1** — [IF-ELSE] `RSV_APLY_YMD is null` (L983)

> Branch: reservation application date is null vs. present.

| # | Type | Code |
|---|------|------|
| 1 | IF-NULL | `template.isNull(EKK0111D010CBSMsg.RSV_APLY_YMD)` -> Yes: Branch 8.1.1, No: Branch 8.1.2 |

**Block 8.1.1** — [IF-NULL: YES] RSV_APLY_YMD is null (L984)

> Set empty string for reservation application date.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("rsv_aply_ymd", new String())` // (-> 予約適用年月日) |

**Block 8.1.2** — [IF-NULL: NO] RSV_APLY_YMD is present (L987)

> Extract reservation application date from template.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("rsv_aply_ymd", template.getString(EKK0111D010CBSMsg.RSV_APLY_YMD))` |

**Block 9** — [RSV_APLY_CD MAPPING] (L992)

> Map the reservation application code. Null-safely extracts from template.

| # | Type | Code |
|---|------|------|
| 1 | IF | `template.isNull(EKK0111D010CBSMsg.RSV_APLY_CD)` -> (L992) |

**Block 9.1** — [IF-ELSE] `RSV_APLY_CD is null` (L992)

> Branch: reservation application code is null vs. present.

| # | Type | Code |
|---|------|------|
| 1 | IF-NULL | `template.isNull(EKK0111D010CBSMsg.RSV_APLY_CD)` -> Yes: Branch 9.1.1, No: Branch 9.1.2 |

**Block 9.1.1** — [IF-NULL: YES] RSV_APLY_CD is null (L993)

> Set empty string for reservation application code.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("rsv_aply_cd", new String())` // (-> 予約適用コード) |

**Block 9.1.2** — [IF-NULL: NO] RSV_APLY_CD is present (L996)

> Extract reservation application code from template.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("rsv_aply_cd", template.getString(EKK0111D010CBSMsg.RSV_APLY_CD))` |

**Block 10** — [KK0111_GENE_ADD_DTM MAPPING] (L1001)

> Map the generation timestamp specific to the KOK (K-Opticom) registration. Null-safely extracts from template.

| # | Type | Code |
|---|------|------|
| 1 | IF | `template.isNull(EKK0111D010CBSMsg.KK0111_GENE_ADD_DTM)` -> (L1001) |

**Block 10.1** — [IF-ELSE] `KK0111_GENE_ADD_DTM is null` (L1001)

> Branch: K-Opticom generation timestamp is null vs. present.

| # | Type | Code |
|---|------|------|
| 1 | IF-NULL | `template.isNull(EKK0111D010CBSMsg.KK0111_GENE_ADD_DTM)` -> Yes: Branch 10.1.1, No: Branch 10.1.2 |

**Block 10.1.1** — [IF-NULL: YES] KK0111_GENE_ADD_DTM is null (L1002)

> Set empty string for K-Opticom generation timestamp.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("kk0111_gene_add_dtm", new String())` // (-> KK0111世代登録年月日秒) |

**Block 10.1.2** — [IF-NULL: NO] KK0111_GENE_ADD_DTM is present (L1005)

> Extract K-Opticom generation timestamp from template.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("kk0111_gene_add_dtm", template.getString(EKK0111D010CBSMsg.KK0111_GENE_ADD_DTM))` |

**Block 11** — [PPP_NINSHO_ID MAPPING] (L1010)

> Map the PPP authentication ID. Null-safely extracts from template.

| # | Type | Code |
|---|------|------|
| 1 | IF | `template.isNull(EKK0111D010CBSMsg.PPP_NINSHO_ID)` -> (L1010) |

**Block 11.1** — [IF-ELSE] `PPP_NINSHO_ID is null` (L1010)

> Branch: PPP authentication ID is null vs. present.

| # | Type | Code |
|---|------|------|
| 1 | IF-NULL | `template.isNull(EKK0111D010CBSMsg.PPP_NINSHO_ID)` -> Yes: Branch 11.1.1, No: Branch 11.1.2 |

**Block 11.1.1** — [IF-NULL: YES] PPP_NINSHO_ID is null (L1011)

> Set empty string for PPP authentication ID.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("ppp_ninsho_id", new String())` // (-> PPP認証ID) |

**Block 11.1.2** — [IF-NULL: NO] PPP_NINSHO_ID is present (L1014)

> Extract PPP authentication ID from template.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("ppp_ninsho_id", template.getString(EKK0111D010CBSMsg.PPP_NINSHO_ID))` |

**Block 12** — [PPP_NINSHO_ID_PWD MAPPING] (L1019)

> Map the PPP authentication password. Null-safely extracts from template.

| # | Type | Code |
|---|------|------|
| 1 | IF | `template.isNull(EKK0111D010CBSMsg.PPP_NINSHO_ID_PWD)` -> (L1019) |

**Block 12.1** — [IF-ELSE] `PPP_NINSHO_ID_PWD is null` (L1019)

> Branch: PPP authentication password is null vs. present.

| # | Type | Code |
|---|------|------|
| 1 | IF-NULL | `template.isNull(EKK0111D010CBSMsg.PPP_NINSHO_ID_PWD)` -> Yes: Branch 12.1.1, No: Branch 12.1.2 |

**Block 12.1.1** — [IF-NULL: YES] PPP_NINSHO_ID_PWD is null (L1020)

> Set empty string for PPP authentication password.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("ppp_ninsho_id_pwd", new String())` // (-> PPP認証IDパスワード) |

**Block 12.1.2** — [IF-NULL: NO] PPP_NINSHO_ID_PWD is present (L1023)

> Extract PPP authentication password from template.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("ppp_ninsho_id_pwd", template.getString(EKK0111D010CBSMsg.PPP_NINSHO_ID_PWD))` |

**Block 13** — [ADD_DTM MAPPING] (L1028)

> Map the registration timestamp. Null-safely extracts from template.

| # | Type | Code |
|---|------|------|
| 1 | IF | `template.isNull(EKK0111D010CBSMsg.ADD_DTM)` -> (L1028) |

**Block 13.1** — [IF-ELSE] `ADD_DTM is null` (L1028)

> Branch: registration timestamp is null vs. present.

| # | Type | Code |
|---|------|------|
| 1 | IF-NULL | `template.isNull(EKK0111D010CBSMsg.ADD_DTM)` -> Yes: Branch 13.1.1, No: Branch 13.1.2 |

**Block 13.1.1** — [IF-NULL: YES] ADD_DTM is null (L1029)

> Set empty string for registration timestamp.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("add_dtm", new String())` // (-> 登録年月日秒) |

**Block 13.1.2** — [IF-NULL: NO] ADD_DTM is present (L1032)

> Extract registration timestamp from template.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("add_dtm", template.getString(EKK0111D010CBSMsg.ADD_DTM))` |

**Block 14** — [ADD_OPEACNT MAPPING] (L1037)

> Map the registration operator account. Null-safely extracts from template.

| # | Type | Code |
|---|------|------|
| 1 | IF | `template.isNull(EKK0111D010CBSMsg.ADD_OPEACNT)` -> (L1037) |

**Block 14.1** — [IF-ELSE] `ADD_OPEACNT is null` (L1037)

> Branch: registration operator account is null vs. present.

| # | Type | Code |
|---|------|------|
| 1 | IF-NULL | `template.isNull(EKK0111D010CBSMsg.ADD_OPEACNT)` -> Yes: Branch 14.1.1, No: Branch 14.1.2 |

**Block 14.1.1** — [IF-NULL: YES] ADD_OPEACNT is null (L1038)

> Set empty string for registration operator account.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("add_opeacnt", new String())` // (-> 登録オペレータアカウント) |

**Block 14.1.2** — [IF-NULL: NO] ADD_OPEACNT is present (L1041)

> Extract registration operator account from template.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("add_opeacnt", template.getString(EKK0111D010CBSMsg.ADD_OPEACNT))` |

**Block 15** — [UPD_DTM MAPPING] (L1046)

> Map the update timestamp. Null-safely extracts from template.

| # | Type | Code |
|---|------|------|
| 1 | IF | `template.isNull(EKK0111D010CBSMsg.UPD_DTM)` -> (L1046) |

**Block 15.1** — [IF-ELSE] `UPD_DTM is null` (L1046)

> Branch: update timestamp is null vs. present.

| # | Type | Code |
|---|------|------|
| 1 | IF-NULL | `template.isNull(EKK0111D010CBSMsg.UPD_DTM)` -> Yes: Branch 15.1.1, No: Branch 15.1.2 |

**Block 15.1.1** — [IF-NULL: YES] UPD_DTM is null (L1047)

> Set empty string for update timestamp.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("upd_dtm", new String())` // (-> 更新年月日秒) |

**Block 15.1.2** — [IF-NULL: NO] UPD_DTM is present (L1050)

> Extract update timestamp from template.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("upd_dtm", template.getString(EKK0111D010CBSMsg.UPD_DTM))` |

**Block 16** — [UPD_OPEACNT MAPPING] (L1055)

> Map the update operator account. Null-safely extracts from template.

| # | Type | Code |
|---|------|------|
| 1 | IF | `template.isNull(EKK0111D010CBSMsg.UPD_OPEACNT)` -> (L1055) |

**Block 16.1** — [IF-ELSE] `UPD_OPEACNT is null` (L1055)

> Branch: update operator account is null vs. present.

| # | Type | Code |
|---|------|------|
| 1 | IF-NULL | `template.isNull(EKK0111D010CBSMsg.UPD_OPEACNT)` -> Yes: Branch 16.1.1, No: Branch 16.1.2 |

**Block 16.1.1** — [IF-NULL: YES] UPD_OPEACNT is null (L1056)

> Set empty string for update operator account.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("upd_opeacnt", new String())` // (-> 更新オペレータアカウント) |

**Block 16.1.2** — [IF-NULL: NO] UPD_OPEACNT is present (L1059)

> Extract update operator account from template.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("upd_opeacnt", template.getString(EKK0111D010CBSMsg.UPD_OPEACNT))` |

**Block 17** — [MK_FLG MAPPING] (L1064)

> Map the invalid flag (無効フラグ). Null-safely extracts from template.

| # | Type | Code |
|---|------|------|
| 1 | IF | `template.isNull(EKK0111D010CBSMsg.MK_FLG)` -> (L1064) |

**Block 17.1** — [IF-ELSE] `MK_FLG is null` (L1064)

> Branch: invalid flag is null vs. present.

| # | Type | Code |
|---|------|------|
| 1 | IF-NULL | `template.isNull(EKK0111D010CBSMsg.MK_FLG)` -> Yes: Branch 17.1.1, No: Branch 17.1.2 |

**Block 17.1.1** — [IF-NULL: YES] MK_FLG is null (L1065)

> Set empty string for invalid flag.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("mk_flg", new String())` // (-> 無効フラグ) |

**Block 17.1.2** — [IF-NULL: NO] MK_FLG is present (L1068)

> Extract invalid flag from template.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dataMap.put("mk_flg", template.getString(EKK0111D010CBSMsg.MK_FLG))` |

**Block 18** — [DISCOUNT SERVICE AUTO-APPLICATION MAPPING] (L1071)

> Construct the service contract list for the discount service auto-application feature. This block reads from the group list, fills the service contract list map with telecom data fields, and injects it back into the work map.

| # | Type | Code |
|---|------|------|
| 1 | SET | `svcKeiGrpListMap = (HashMap)svcKeiGrpList.get(0)` // Get first group list map (-> サブ契約グループリストからサブ契約グループリストマップを取得する) |
| 2 | IF | `svcKeiGrpListMap.containsKey(SVC_KEI_LIST)` -> (L1076) |

**Block 18.1** — [IF-ELSE] `svcKeiGrpListMap has SVC_KEI_LIST` (L1076)

> Branch: group list already contains a service contract list.

| # | Type | Code |
|---|------|------|
| 1 | IF-CONTAINS | `svcKeiGrpListMap.containsKey(SVC_KEI_LIST)` -> Yes: Branch 18.1.1, No: Branch 18.1.2 |

**Block 18.1.1** — [IF-CONTAINS: YES] SVC_KEI_LIST exists in group map (L1077)

> Retrieve existing service contract list from group map.

| # | Type | Code |
|---|------|------|
| 1 | SET | `svcKeiList = (ArrayList)svcKeiGrpListMap.get(SVC_KEI_LIST)` |

**Block 18.1.2** — [IF-CONTAINS: NO] SVC_KEI_LIST does not exist in group map (L1079)

> Use the newly created svcKeiList (already initialized above).

| # | Type | Code |
|---|------|------|
| 1 | — | `svcKeiList` remains as newly created empty ArrayList |

**Block 19** — [SYSID AND MSKM_NO FALLBACK] (L1084)

> Set system ID and subscription number with fallback to customer service work map.

| # | Type | Code |
|---|------|------|
| 1 | IF | `wriSvcAutoAplyMap.containsKey("sysid")` -> (L1084) |

**Block 19.1** — [IF-ELSE] sysId assignment (L1084)

> Branch: sysId exists in discount map vs. needs fallback.

| # | Type | Code |
|---|------|------|
| 1 | IF-CONTAINS | `wriSvcAutoAplyMap.containsKey("sysid")` -> Yes: Branch 19.1.1, No: Branch 19.1.2 |

**Block 19.1.1** — [IF-CONTAINS: YES] sysId exists in wriSvcAutoAplyMap (L1085)

> Extract sysId from discount auto-application map.

| # | Type | Code |
|---|------|------|
| 1 | SET | `sysId = (String)wriSvcAutoAplyMap.get("sysid")` |

**Block 19.2** — [IF-ELSE] sysId is empty (L1087)

> Fallback: get sysId from customer service work map.

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(sysId)` -> (L1087) |

**Block 19.2.1** — [IF] sysId is empty string (L1088)

> Set sysId from KEISHA work area map.

| # | Type | Code |
|---|------|------|
| 1 | SET | `wriSvcAutoAplyMap.put("sysid", (String)addKeishaServiceCCWorkMap.get("sysid"))` // Fallback from customer service work (-> 割引サービス自動適用対応) |

**Block 20** — [MSKM_NO FALLBACK] (L1093)

> Set subscription number with fallback to subscription order work map.

| # | Type | Code |
|---|------|------|
| 1 | IF | `wriSvcAutoAplyMap.containsKey("mskm_no")` -> (L1093) |

**Block 20.1** — [IF-ELSE] mskmNo assignment (L1093)

> Branch: mskmNo exists in discount map vs. needs fallback.

| # | Type | Code |
|---|------|------|
| 1 | IF-CONTAINS | `wriSvcAutoAplyMap.containsKey("mskm_no")` -> Yes: Branch 20.1.1, No: Branch 20.1.2 |

**Block 20.1.1** — [IF-CONTAINS: YES] mskmNo exists in wriSvcAutoAplyMap (L1094)

> Extract mskmNo from discount auto-application map.

| # | Type | Code |
|---|------|------|
| 1 | SET | `mskmNo = (String)wriSvcAutoAplyMap.get("mskm_no")` |

**Block 20.2** — [IF-ELSE] mskmNo is empty (L1096)

> Fallback: get mskmNo from subscription order work map.

| # | Type | Code |
|---|------|------|
| 1 | IF | `"".equals(mskmNo)` -> (L1096) |

**Block 20.2.1** — [IF] mskmNo is empty string (L1097)

> Set mskmNo from MSKM work area map.

| # | Type | Code |
|---|------|------|
| 1 | SET | `wriSvcAutoAplyMap.put("mskm_no", (String)addMskmSCWork.get("mskm_no"))` // Fallback from subscription SC work (-> 申込番号設定) |

**Block 21** — [SERVICE CONTRACT LIST MAP BUILDING] (L1102)

> Build the service contract list map with hardcoded and dynamic fields for the discount service auto-application.

| # | Type | Code |
|---|------|------|
| 1 | SET | `svcKeiListMap.put("tg_kei_skbt_cd", "01")` // Target contract subtype code (-> 対象契約識別コード) |
| 2 | SET | `svcKeiListMap.put("svc_kei_stat", "010")` // Service status "010" = Accepted (-> サブ契約ステータス "010"：受給予き) |
| 3 | SET | `svcKeiListMap.put("svc_cd", telMap.get("svc_cd"))` // Service code from telecom map (-> サブコード) |
| 4 | SET | `svcKeiListMap.put("prc_grp_cd", telMap.get("prc_grp_cd"))` // Price group code from telecom map (-> 料金グループコード) |
| 5 | SET | `svcKeiListMap.put("pcrs_cd", telMap.get("pcrs_cd"))` // Price course code from telecom map (-> 料金コースコード) |
| 6 | SET | `svcKeiListMap.put("pplan_cd", telMap.get("pplan_cd"))` // Price plan code from telecom map (-> 料金プランコード) |

**Block 22** — [ADD SERVICE CONTRACT LIST] (L1109)

> Add the built service contract list map to the service contract list.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `svcKeiList.add(svcKeiListMap)` // Add the built list map to the list (-> サブ契約リストにサブ契約リストマップを格納する) |

**Block 23** — [INJECT INTO GROUP MAP] (L1112)

> If the group list map does not yet contain a service contract list, inject the one just built.

| # | Type | Code |
|---|------|------|
| 1 | IF | `!svcKeiGrpListMap.containsKey(SVC_KEI_LIST)` -> (L1112) |

**Block 23.1** — [IF] svcKeiGrpListMap does NOT contain SVC_KEI_LIST (L1112)

> Put the service contract list into the group map so downstream components can access it.

| # | Type | Code |
|---|------|------|
| 1 | SET | `svcKeiGrpListMap.put(SVC_KEI_LIST, svcKeiList)` // Inject svcKeiList into group map (-> サブグループリストマップにサブ契約リストが存在しない場合サブ契約リストを追加する) |

**Block 24** — [ERROR INFORMATION PROCESSING] (L1117)

> Process error information from the SC response and store it in the control map.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `editErrInfoEKK0111D010(param, template, (Integer)returnCode, fixedText)` // Update error info by comparing SC and BP return codes (-> エラー情報の設定) |
| 2 | EXEC | `errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO)` // Get existing error list from control map (-> エラー情報のマップを取得) |
| 3 | IF | `errList == null` -> (L1123) |

**Block 24.1** — [IF-ELSE] errList is null (L1123)

> Branch: no existing error list — create a new one.

| # | Type | Code |
|---|------|------|
| 1 | IF-NULL | `errList == null` -> Yes: Branch 24.1.1, No: Branch 24.1.2 |

**Block 24.1.1** — [IF-NULL: YES] errList is null (L1124)

> Create a new error list.

| # | Type | Code |
|---|------|------|
| 1 | SET | `errList = new ArrayList<Object>()` |

**Block 24.2** — [STORE ERROR INFO IN CONTROL MAP] (L1128)

> Store aggregated error info in the control map.

| # | Type | Code |
|---|------|------|
| 1 | SET | After `errList == null` check, merge branches and continue |
| 2 | EXEC | `param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList))` // Store error info in control map (-> コントロールドマップに設定) |

**Block 25** — [RETURN] (L1130)

> Return the parameter with all mapped data.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return param` // Return the parameter with all mapped response data |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `svc_kei_no` | Field | Service contract number — unique identifier for a service contract line item |
| `svc_kei_ucwk_no` | Field | Service detail work number — internal tracking ID for service contract line items |
| `seiky_kei_no` | Field | Invoice contract number — identifier for the billing contract associated with this service contract (added v1.00.00) |
| `gene_add_dtm` | Field | Generation registration timestamp — when the service contract record was originally generated |
| `svc_kei_stat` | Field | Service contract status — indicates the current state of the contract (e.g., "010" = Accepted/受給予き) |
| `ftrial_prd_endymd` | Field | Trial period end date — the date when the free trial period for the service ends |
| `rsv_aply_ymd` | Field | Reservation application date — the date a reservation application was submitted |
| `rsv_aply_cd` | Field | Reservation application code — code indicating the type of reservation application |
| `kk0111_gene_add_dtm` | Field | K-Opticom generation registration timestamp — KOK-specific generation timestamp for registration records |
| `ppp_ninsho_id` | Field | PPP authentication ID — the username for PPP (Point-to-Point Protocol) internet authentication |
| `ppp_ninsho_id_pwd` | Field | PPP authentication ID password — the password for PPP internet authentication |
| `add_dtm` | Field | Registration timestamp — the date/time the service contract record was registered |
| `add_opeacnt` | Field | Registration operator account — the operator ID who performed the registration |
| `upd_dtm` | Field | Update timestamp — the date/time the service contract record was last updated |
| `upd_opeacnt` | Field | Update operator account — the operator ID who performed the last update |
| `mk_flg` | Field | Invalid flag — indicates whether the service contract record is marked as invalid/deleted |
| `tg_kei_skbt_cd` | Field | Target contract subtype code — classifies the contract type (`"01"` = main contract) |
| `svc_cd` | Field | Service code — identifies the type of service (e.g., eo Light Phone) |
| `prc_grp_cd` | Field | Price group code — identifies the pricing group for the service |
| `pcrs_cd` | Field | Price course code — identifies the pricing course/tier for the service |
| `pplan_cd` | Field | Price plan code — identifies the specific pricing plan for the service |
| `EKK0111D010` | CBS Code | Service Contract eo Light Phone Registration — the Service Component for registering eo Light Phone service contracts |
| `EKK0191D010` | CBS Code | Service Contract Details eo Light Phone Registration — the Service Component for registering service contract detail lines |
| `EZM0321A010` | CBS Code | Optional Service Contract Phone Registration — the Service Component for registering optional phone services |
| `EKK0371D010` | Constant | Optional Service Contract Phone Registration template ID |
| SC | Acronym | Service Component — the middle-tier business logic layer that processes registration/update requests |
| CC | Acronym | Common Component — reusable shared component classes in the bp.custom.common package |
| BP | Acronym | Business Process — the overall application process that orchestrates SC calls |
| CAANMsg | Class | Common message container for SC request/response data — carries field values as typed getters (getString, getInt, isNull) |
| IRequestParameterReadWrite | Interface | Request parameter interface — holds data maps, work areas, and control maps for request/response handling |
| PPP | Business term | Point-to-Point Protocol — the internet authentication protocol used for PPPoE connections |
| FTTH | Business term | Fiber To The Home — fiber-optic broadband infrastructure service |
| eo Light Phone | Business term | K-Opticom's fiber-optic telephone service bundled with eo Hikari broadband |
| 割引サービス自動適用 | Business term | Discount service auto-application — a feature that automatically applies discount service contracts based on registration data |
| 受给予き | Business term | Accepted — service contract status code `"010"`, indicating the contract has been accepted |
| 無効フラグ | Business term | Invalid flag — marker indicating a contract record is logically deleted or invalid |
| TEMPLATE_LIST_KEY | Constant | Map key to retrieve the CAANMsg[] template array from the SC response list |
| RET_CD_INT_KEY | Constant | Map key to retrieve the SC return code from the response list |
| JFUAddSvcKeiTelCCWork | Constant | Work area key for this component's private work data |
| JFUAddKeishaServiceCCWork | Constant | Work area key for customer service data |
| JFUAddMskmSCWork | Constant | Work area key for subscription order data |
| JFUAddSkkSCWork | Constant | Work area key for billing account data |
| JKKWrisvcAutoAplyCCMap | Constant | Key for the discount service auto-application work map |
| svc_kei_grp_list | Constant | Key within discount map for the service contract group list |
| svc_kei_list | Constant | Key within a group map for the service contract list |
| SCControlMapKeys.ERROR_INFO | Constant | Control map key for storing error information list |
| SCControlMapKeys.RETURN_CODE | Constant | Control map key for storing the return code for status comparison |
