# Business Logic — JKKTelnoInfoAddCC.addKari() [235 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `com.fujitsu.futurity.bp.custom.common.JKKTelnoInfoAddCC` |
| Layer | Common Component (CC) — shared business logic bridge between screens and service components |
| Module | `common` (Package: `com.fujitsu.futurity.bp.custom.common`) |

## 1. Role

### JKKTelnoInfoAddCC.addKari()

This method orchestrates the **temporary registration (kari-touroku) and final update flow for adding telephone numbers** to an existing e-o Hikari Phone (eo光電話) service contract in K-Opticom's telecom customer core system. It serves as the central coordination point for a multi-step service contract line item registration process that operates in two phases: the **first registration** (where `svc_kei_ucwk_no` — the service detail work number — is null and must be created) and the **subsequent registration/update** (where the work number already exists and the method performs information changes or consent meetings).

The method handles multiple **business operation types** based on `idoDiv` (movement classification): regular telephone number addition and address change + registration (IDO_DIV_ADCHGADD). It also branches by `funcCode` (function code) to support **new contract registration** (`FUNC_CD_1`: service detail creation, consent meeting, option pack processing) and **duplicate number prevention checks** (`FUNC_CD_2`: service detail double-issuance validation). 

The method implements a **facade pattern** — it does not perform low-level data operations directly but instead delegates to specialized mapper methods on `telInfoMapper` to construct service request messages, invokes remote service components via `callSvcInter`, and writes results back into the shared `work` HashMap. A key design feature is its **multi-step registration model**: when `svc_kei_ucwk_no` is null (first call), it creates the service detail work number and stores it in `work`; on subsequent calls with that work number populated, it performs conditional updates to telephone info, image info, and application details based on what has changed.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["addKari(params)"])
    
    START --> COND1{svc_kei_ucwk_no<br/>is null?}
    
    COND1 -- Yes, first registration --> COND2{idoDiv ==<br/>IDO_DIV_ADCHGADD?<br/>address change + registration}
    COND2 -- No, other div --> PROC1[editInMsgEKK0011D020<br/>Application detail registration]
    COND2 -- Yes, address change --> PROC2[Extract mskmDtlNo<br/>from trgtData]
    
    PROC1 --> PROC3[callSvcInter<br/>EKK0011D020]
    PROC3 --> PROC4[Extract mskmDtlNo,<br/>mskmYmd, kk0011_upd_dtm,<br/>mskmNo from outMap]
    PROC4 --> PROC5[Put mskmNo into<br/>trgtData.MSKMNO_LIST]
    PROC5 --> FUNC_CHECK{funcCode ==<br/>FUNC_CD_1?<br/>new contract}
    
    COND1 -- No, 2nd+ registration --> COND7{funcCode ==<br/>FUNC_CD_1?<br/>new contract}
    
    FUNC_CHECK -- Yes --> PROC6[editInMsgEKK0191D010<br/>Service detail registration]
    PROC6 --> PROC7[callSvcInter<br/>EKK0191D010]
    PROC7 --> PROC8[Extract svcKeiUcwkNo,<br/>bmpUm, kk0191_gene_add_dtm,<br/>kk0081_upd_dtm]
    PROC8 --> PROC9{idoDiv ==<br/>IDO_DIV_ADCHGADD<br/>AND kariTourokuFlg ==<br/>FLG_ON?}
    
    PROC9 -- Yes --> PROC10[AdchgOptionPackRunCC<br/>adChgOptionPackMain<br/>Option service + option pack registration]
    PROC10 --> PROC11[editInMsgEKK0191A010<br/>Service detail consent meeting]
    PROC11 --> PROC12[callSvcInter<br/>EKK0191A010]
    PROC12 --> PROC13[Extract lastUpdDtm<br/>Update kk0081_upd_dtm]
    PROC13 --> END_NODE(["Return"])
    
    PROC9 -- No --> FUNC2_CHECK{funcCode ==<br/>FUNC_CD_2?<br/>duplicate check}
    FUNC2_CHECK -- Yes --> PROC14[editInMsgEKK0191C130<br/>Service detail duplicate check]
    PROC14 --> PROC15[callSvcInter<br/>EKK0191C130]
    PROC15 --> END_NODE
    FUNC2_CHECK -- No --> END_NODE
    
    COND7 -- Yes --> COND8{idoDiv ==<br/>IDO_DIV_ADCHGADD<br/>OR IDO_DIV_ADCHGFIX?<br/>address change flows}
    COND8 -- No, not address change --> PROC16[isChgTelnoInfo check]
    COND8 -- Yes, address change --> SKIP_TELEPHO[Skip telephone info update]
    
    PROC16 -- Changed --> PROC17[editInMsgEKK0191C060<br/>Service detail info change]
    PROC16 -- Not changed --> PROC26[skip service detail info change]
    PROC17 --> PROC18[callSvcInter<br/>EKK0191C060]
    PROC18 --> PROC19[Extract kk0191_gene_add_dtm,<br/>kk0081_upd_dtm]
    
    PROC26 --> PROC20[editInMsgEKK0191A010<br/>Service detail consent meeting]
    PROC19 --> PROC20
    
    PROC20 --> PROC21[callSvcInter<br/>EKK0191A010]
    PROC21 --> PROC22[isChgBmpInfo check<br/>Image info change]
    PROC22 -- Changed --> PROC23[editInMsgEKK0191C012<br/>Image info change]
    PROC23 --> PROC24[callSvcInter<br/>EKK0191C012]
    PROC24 --> PROC25[Extract kk0191_gene_add_dtm,<br/>kk0081_upd_dtm]
    PROC25 --> PROC30[skip image info change]
    PROC22 -- Not changed --> PROC30
    
    PROC30 --> COND30{idoDiv ==<br/>IDO_DIV_ADCHGADD<br/>OR IDO_DIV_ADCHGFIX?}
    COND30 -- No, other div --> PROC31[editInMsgEKK0021C040<br/>Application detail change]
    PROC31 --> PROC32[callSvcInter<br/>EKK0021C040]
    PROC32 --> PROC33[Update kk0011_upd_dtm]
    PROC33 --> END_NODE
    COND30 -- Yes, address change --> END_NODE
    
    SKIP_TELEPHO --> PROC30
```

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `handle` | `SessionHandle` | Database session handle for maintaining transactional context and connection state across service component calls |
| 2 | `param` | `IRequestParameterReadWrite` | Request parameter object carrying screen input data; used by mappers to extract fields and by service calls to transmit request messages |
| 3 | `fixedText` | `String` | Fixed text key used to identify and retrieve data from the request parameters (acts as a data accessor key, e.g., `"telno_info_add"`) |
| 4 | `trgtData` | `HashMap<String, Object>` | Target data map containing business entity data — telephone numbers, billing info, customer details, address data, and registration flags; serves as the primary business data carrier between mapper methods and the registration flow |
| 5 | `kariTourokuFlg` | `String` | Temporary registration flag — `"1"` (`FLG_ON`) indicates the caller wants to perform temporary registration (deferred finalization), which triggers option pack processing during address change flows |
| 6 | `funcCode` | `String` | Function code that determines which service registration path to follow: `"1"` (`FUNC_CD_1`) for new service contract creation / update, `"2"` (`FUNC_CD_2`) for duplicate service detail issuance prevention check |
| 7 | `idoDiv` | `String` | Movement classification (ido bunru) — distinguishes between regular telephone number addition and address change + registration (`IDO_DIV_ADCHGADD`) or address change + fix (`IDO_DIV_ADCHGFIX`). Address change flows skip certain update steps to avoid redundant processing |
| 8 | `outMapEKK0191A010` | `CAANMsg` | Output message map for EKK0191A010 (service detail consent meeting) — carries consent meeting results including updated timestamps; used in 2nd+ registration phase for telephone and image change detection |
| 9 | `tmpOutMapEKK0021A010` | `CAANMsg` | Temporary output message map for EKK0021A010 (application detail inquiry) — carries inquiry results used when building the application detail change request in the 2nd+ registration phase |
| 10 | `work` | `HashMap<String, Object>` | Shared working storage map used for multi-step (phase) registration. Stores intermediate results like `svc_kei_ucwk_no` (service detail work number), `mskmDtlNo` (application detail number), and various timestamps across method invocations. The key indicator that this is a first-call vs. subsequent-call is whether `svc_kei_ucwk_no` is null in this map |
| 11 | `pplanCd` | `String` | Plan code — billing plan identifier used for price plan change operations (currently unused in this method; referenced in commented-out code paths for price plan modification) |
| 12 | `tkHoshikiKeiNo` | `String` | Provider contract number (tekkyo hoshiki keiyakusuu) — identifies the contract under a specific provider format, used in legacy price plan change logic |
| 13 | `svcKeiStat` | `String` | Service contract status — the current status code of the service contract line item (e.g., `"100"` for in-progress). Referenced in commented-out code paths for price plan determination |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| C | `telInfoMapper.editInMsgEKK0011D020` + `callSvcInter` | EKK0011D020SC | KK_T_MSKM (Application detail master) | Registers application detail — creates a new application registration record and stores `mskmDtlNo` and `mskmNo` in `work` map |
| C | `telInfoMapper.editInMsgEKK0191D010` + `callSvcInter` | EKK0191D010SC | KK_T_OPSVKEI (Service contract line item), KK_T_OPSVKEI_ISP (Service contract line item sub) | Registers service detail for e-o Hikari Phone — creates the service contract line item record and sets `svc_kei_ucwk_no`, `bmp_um`, and related timestamps |
| C | `JKKAdchgOptionPackRunCC.adChgOptionPackMain` | EKK0351B002SC / Option Pack SC | KK_T_OPTSVKEI (Option service contract), KK_T_OPTPACK (Option pack) | Registers optional service contracts and option packs during address change + registration when temporary registration flag is ON |
| U | `telInfoMapper.editInMsgEKK0191A010` + `callSvcInter` (first call at ~L5393) | EKK0191A010SC | KK_T_OPSVKEI (Service contract line item) | Service detail consent meeting during option pack processing — retrieves latest update timestamp |
| U | `telInfoMapper.editInMsgEKK0191A010` + `callSvcInter` (second call at ~L5467) | EKK0191A010SC | KK_T_OPSVKEI (Service contract line item) | Service detail consent meeting during 2nd+ registration phase — retrieves current service detail data for change detection |
| C | `telInfoMapper.editInMsgEKK0191C130` + `callSvcInter` | EKK0191C130SC | KK_T_OPSVKEI (Service contract line item) | Duplicate service detail issuance check for funcCode 2 — validates no duplicate work number exists |
| U | `telInfoMapper.editInMsgEKK0191C060` + `callSvcInter` | EKK0191C060SC | KK_T_OPSVKEI (Service contract line item) | Updates service detail information (telephone number, related fields) when changes are detected via `isChgTelnoInfo()` |
| U | `telInfoMapper.editInMsgEKK0191C012` + `callSvcInter` | EKK0191C012SC | KK_T_OPSVKEI_BMP (Service contract image/bitmap data) | Updates image registration information (bmp info) when changes are detected via `isChgBmpInfo()` |
| U | `telInfoMapper.editInMsgEKK0021C040` + `callSvcInter` | EKK0021C040SC | KK_T_MSKM (Application detail master) | Updates application detail information for non-address-change flows in 2nd+ registration phase |
| R | `getRsltMsgListValue` | Various CBS | Various | Extracts list values from service component response messages (e.g., `mskmDtlNo`, timestamps) |
| R | `CAANMsg.getString` | Various CBS | Various | Extracts scalar string values from response messages (e.g., `mskmNo`, `mskmYmd`, `svc_kei_ucwk_no`, timestamps) |
| R | `isChgTelnoInfo` | — (local method) | — | Detects whether telephone-related information has changed by comparing current `trgtData` with `outMapEKK0191A010` |
| R | `isChgBmpInfo` | — (local method) | — | Detects whether image/bitmap registration information has changed |
| R | `telInfoMapper.editInMsgEKK0191D010` | EKK0191D010SC | KK_T_OPSVKEI | Invoked by mapper to build the request message (read from params/trgtData) |

**CRUD Classification Summary:**
- **C (Create)**: Application detail registration (EKK0011D020), Service detail registration (EKK0191D010), Option pack registration (via JKKAdchgOptionPackRunCC), Duplicate check (EKK0191C130)
- **U (Update)**: Service detail consent (EKK0191A010), Service detail info change (EKK0191C060), Image info change (EKK0191C012), Application detail change (EKK0021C040)
- **R (Read)**: Response message value extraction via `getString` and `getRsltMsgListValue`, Change detection via `isChgTelnoInfo` / `isChgBmpInfo`

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Screen:KKSV0325 | `KKSV0325OPOperation` -> `JKKTelnoInfoAddCC.executeHtelTelnoAdd` -> `addKari` | `EKK0011D020SC [C] KK_T_MSKM`, `EKK0191D010SC [C] KK_T_OPSVKEI`, `EKK0191A010SC [U] KK_T_OPSVKEI`, `EKK0191C060SC [U] KK_T_OPSVKEI`, `EKK0191C012SC [U] KK_T_OPSVKEI_BMP`, `EKK0021C040SC [U] KK_T_MSKM`, `EKK0191C130SC [C] KK_T_OPSVKEI` |
| 2 | Screen:KKSV0065 | `KKSV0065OPOperation` -> `JKKTelnoInfoAddCC.executeHtelTelnoAdd` -> `addKari` | Same as above |
| 3 | Screen:KKSV0674 | `KKSV0674OPOperation` -> `JKKTelnoInfoAddCC.executeHtelTelnoAdd` -> `addKari` | Same as above |
| 4 | CBS:JKKAdchgTelInfoChgCC | `JKKAdchgTelInfoChgCC` -> `JKKTelnoInfoAddCC.executeHtelTelnoAdd` -> `addKari` | Same as above |

## 6. Per-Branch Detail Blocks

### Block 1 — IF (first registration: svc_kei_ucwk_no is null) (L5320)

> Checks if `svc_kei_ucwk_no` (service detail work number) is null in the `work` map. If null, this is the first registration call — a new service detail work number must be created.

| # | Type | Code |
|---|------|------|
| 1 | SET | `isNull((String) work.get(SVC_KEI_UCWK_NO))` |

#### Block 1.1 — IF (idoDiv != IDO_DIV_ADCHGADD: non-address-change flow) (L5324)

> If movement classification is NOT "address change + registration", call the Application Detail Registration I/F (shounai naiyou shounin touroku). This registers the application details and retrieves the application detail number (`mskmDtlNo`) and related identifiers.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `telInfoMapper.editInMsgEKK0011D020(param, trgtData, JKKSvcConst.MSKM_SBT_CD_00034)` | MSKM_SBT_CD_00034 is the application detail service subtype code |
| 2 | EXEC | `callSvcInter(handle, param, inMapEKK0011D020)` | Invoke EKK0011D020 service component |
| 3 | SET | `work.put(MSKM_DTL_NO, getRsltMsgListValue(outMapEKK0011D020, EKK0011D020CBSMSG1LIST, MSKM_DTL_NO))` | Store application detail number in work map |
| 4 | SET | `work.put(MSKM_YMD, outMapEKK0011D020.getString(EKK0011D020CBSMsg.MSKM_YMD))` | Store registration date from response |
| 5 | SET | `work.put(KK0011_UPD_DTM, JPCModelConstant.FUNC_CD_1.equals(funcCode) ? outMapEKK0011D020.getString(EKK0011D020CBSMsg.UPD_DTM) : (String) work.get(KK0011_UPD_DTM))` | Store update timestamp; use response value if new contract (FUNC_CD_1), else keep existing |
| 6 | SET | `work.put(MSKM_NO, outMapEKK0011D020.getString(EKK0011D020CBSMsg.MSKM_NO))` | Store application registration number |
| 7 | SET | `trgtData.put(JKKTelnoInfoAddConstCC.MSKMNO_LIST, outMapEKK0011D020.getString(EKK0011D020CBSMsg.MSKM_NO))` | ANK-4315-14-00: Return mskmNo to caller for eo Home Gateway import |

#### Block 1.2 — ELSE-IF (idoDiv == IDO_DIV_ADCHGADD: address change + registration flow) (L5361)

> If movement classification IS "address change + registration", the application detail number is already available in `trgtData`. No new application registration is needed; just extract the number.

| # | Type | Code |
|---|------|------|
| 1 | SET | `work.put(MSKM_DTL_NO, (String) trgtData.get(JKKTelnoInfoAddConstCC.MSKM_DTL_NO))` | Extract mskmDtlNo from trgtData (address change path already has it) |

### Block 2 — IF (funcCode == FUNC_CD_1: new contract registration) (L5368)

> Handles new contract (shin-keiyaku) service detail creation. This is the primary registration path for adding a new telephone number to an existing contract.

#### Block 2.1 — SET (Build service detail request) (L5371)

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `telInfoMapper.editInMsgEKK0191D010(param, trgtData, (String) work.get(MSKM_DTL_NO), (String) work.get(KK0081_UPD_DTM))` | Build service detail registration request with application detail number and update timestamp |
| 2 | EXEC | `callSvcInter(handle, param, inMapEKK0191D010)` | Invoke EKK0191D010 service component to register service detail |
| 3 | SET | `work.put(SVC_KEI_UCWK_NO, outMapEKK0191D010.getString(EKK0191D010CBSMsg.SVC_KEI_UCWK_NO))` | Store the newly created service detail work number |
| 4 | SET | `work.put(BMP_UM, outMapEKK0191D010.getString(EKK0191D010CBSMsg.BMP_UM))` | OM-2014-0001659: Store image information presence flag |
| 5 | SET | `work.put(KK0191_GENE_ADD_DTM, outMapEKK0191D010.getString(EKK0191D010CBSMsg.KK0191_GENE_ADD_DTM))` | Store generation/addition timestamp |
| 6 | SET | `work.put(KK0081_UPD_DTM, JPCModelConstant.FUNC_CD_1.equals(funcCode) ? outMapEKK0191D010.getString(EKK0191D010CBSMsg.UPD_DTM) : (String) work.get(KK0081_UPD_DTM))` | Update the service contract update timestamp |

#### Block 2.2 — IF (idoDiv == IDO_DIV_ADCHGADD AND kariTourokuFlg == FLG_ON: address change + temp registration option pack) (L5382)

> ANK-2056-00-00: Only for address change registration with temporary registration flag ON. Registers optional service contracts and option packs.

| # | Type | Code |
|---|------|------|
| 1 | SET | `String workKKAdchgOptionPackKey = "JKKAdchgOptionPackRunCC"` | Create key for option pack processing |
| 2 | EXEC | `new JKKAdchgOptionPackRunCC()` | Instantiate option pack run controller |
| 3 | SET | `trgt_data = new HashMap<String, Object>()` | Create target data map for option pack |
| 4 | SET | `trgt_data.put(JKKAdchgOptionPackRunCC.SVC_KEI_NO, (String) outMapEKK0191D010.getString(EKK0191D010CBSMsg.SVC_KEI_NO))` | Set service contract number |
| 5 | SET | `trgt_data.put(JKKAdchgOptionPackRunCC.SVC_KEI_UCWK_NO_TEL1, (String) outMapEKK0191D010.getString(EKK0191D010CBSMsg.SVC_KEI_UCWK_NO))` | Set service detail work number |
| 6 | SET | `trgt_data.put(JKKAdchgOptionPackRunCC.OP_PACK_ADD_PTN_NO1, (String) trgtData.get(JKKTelnoInfoAddConstCC.WRI_SVC_CD))` | Set option pack registration pattern (writable service code) |
| 7 | SET | `trgt_data.put(JKKAdchgOptionPackRunCC.ADDCHANG_PTN_FLG, JKKAdchgOptionPackRunCC.ADCHG_TELNO_ADD)` | Set address change processing pattern flag (telephone number addition) |
| 8 | SET | `trgt_data.put(JKKAdchgOptionPackRunCC.ADDCHANG_MODE_FLG, JKKAdchgOptionPackRunCC.ADCHG_MAIN_MODE)` | Set address change mode flag (main mode) |
| 9 | SET | `trgt_data.put(JKKAdchgOptionPackRunCC.MSKM_DTL_NO, (String) trgtData.get(JKKTelnoInfoAddConstCC.MSKM_DTL_NO))` | Set application detail number |
| 10 | SET | `trgt_data.put(JKKAdchgOptionPackRunCC.SEIKY_KEI_NO, (String) trgtData.get(JKKTelnoInfoAddConstCC.SEIKY_KEI_NO))` | Set billing contract number |
| 11 | SET | `trgt_data.put("ido_div", idoDiv)` | Pass movement classification |
| 12 | EXEC | `createUserData(param, workKKAdchgOptionPackKey)` | Create user data for option pack processing |
| 13 | CALL | `adchgOptionPackRunCC.adChgOptionPackMain(handle, param, trgt_data, workKKAdchgOptionPackKey)` | Execute option pack main processing |
| 14 | EXEC | `telInfoMapper.editInMsgEKK0191A010Tmp = telInfoMapper.editInMsgEKK0191A010(param, (String) outMapEKK0191D010.getString(EKK0191D010CBSMsg.SVC_KEI_UCWK_NO))` | Service detail consent meeting (option pack path) |
| 15 | EXEC | `callSvcInter(handle, param, inMapEKK0191A010Tmp)` | Invoke EKK0191A010 |
| 16 | SET | `lastUpdDtm = getRsltMsgListValue(outMapEKK0191A010Tmp, EKK0191A010CBSMSG1LIST, EKK0191A010CBSMsg1List.LAST_UPD_DTM)` | Extract latest update timestamp from consent result |
| 17 | SET | `work.put(KK0081_UPD_DTM, JPCModelConstant.FUNC_CD_1.equals(funcCode) ? lastUpdDtm : (String) work.get(KK0081_UPD_DTM))` | Update service contract update timestamp |

### Block 3 — ELSE-IF (funcCode == FUNC_CD_2: duplicate check) (L5408)

> OM-2015-0002295: Service detail double-issuance check. Validates that the service detail work number has not already been issued (prevents duplicate work numbers).

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `telInfoMapper.editInMsgEKK0191C130(param, trgtData)` | Build duplicate check request message |
| 2 | EXEC | `callSvcInter(handle, param, inMapEKK0191C130)` | Invoke EKK0191C130 service component for duplicate check |

### Block 4 — ELSE (2nd+ registration: svc_kei_ucwk_no already exists) (L5467)

> Service detail work number is not null, meaning this is a subsequent call in the multi-step registration process. This branch handles telephone info updates, image info updates, and application detail changes.

#### Block 4.1 — IF (funcCode == FUNC_CD_1: new contract, 2nd+ registration) (L5471)

##### Block 4.1.1 — IF (NOT address change: must update telephone info) (L5475)

> IT1-2013-0001076: Skip telephone info update for address change flows (`IDO_DIV_ADCHGADD` or `IDO_DIV_ADCHGFIX`). Only process for non-address-change movements.

| # | Type | Code |
|---|------|------|
| 1 | SET | `isChgTelnoInfo(trgtData, outMapEKK0191A010)` | Check if telephone information has changed |

###### Block 4.1.1.1 — IF (telephone info changed) (L5478)

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `telInfoMapper.editInMsgEKK0191C060(param, trgtData, outMapEKK0191A010, (String) work.get(MSKM_DTL_NO), (String) work.get(KK0081_UPD_DTM))` | Build service detail info change request |
| 2 | EXEC | `callSvcInter(handle, param, inMapEKK0191C060)` | Invoke EKK0191C060 — update service contract line item |
| 3 | SET | `work.put(KK0191_GENE_ADD_DTM, outMapEKK0191C060.getString(EKK0191C060CBSMsg.KK0191_GENE_ADD_DTM))` | Store generation timestamp |
| 4 | SET | `work.put(KK0081_UPD_DTM, outMapEKK0191C060.getString(EKK0191C060CBSMsg.UPD_DTM))` | Store update timestamp |

#### Block 4.1.2 — Service detail consent meeting (L5494)

> Regardless of whether telephone info changed, perform the service detail consent meeting.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `telInfoMapper.editInMsgEKK0191A010 = telInfoMapper.editInMsgEKK0191A010(param, (String) work.get(SVC_KEI_UCWK_NO))` | Build consent meeting request with work number |
| 2 | EXEC | `callSvcInter(handle, param, tmpInMapEKK0191A010)` | Invoke EKK0191A010 |
| 3 | SET | `CAANMsg outMapETU0011A010 = null` | Initialize image change check variable |

##### Block 4.1.2.1 — IF (image info changed: isChgBmpInfo) (L5502)

> OM-2013-0003956: Check if image/bitmap registration information has changed. If changed, update image info.

| # | Type | Code |
|---|------|------|
| 1 | SET | `isChgBmpInfo(trgtData, tmpOutMapEKK0191A010, outMapETU0011A010)` | Check if image info changed |
| 2 | EXEC | `telInfoMapper.editInMsgEKK0191C012(param, trgtData, tmpOutMapEKK0191A010, (String) work.get(MSKM_DTL_NO), (String) work.get(KK0081_UPD_DTM))` | Build image info change request |
| 3 | EXEC | `callSvcInter(handle, param, inMapEKK0191C012)` | Invoke EKK0191C012 — update image/bitmap data |
| 4 | SET | `work.put(KK0191_GENE_ADD_DTM, outMapEKK0191C012.getString(EKK0191C012CBSMsg.KK0191_GENE_ADD_DTM))` | Store generation timestamp |
| 5 | SET | `work.put(KK0081_UPD_DTM, outMapEKK0191C012.getString(EKK0191C012CBSMsg.UPD_DTM))` | Store update timestamp |

#### Block 4.1.3 — IF (NOT address change: update application detail) (L5520)

> ANK-0397-00-00: For non-address-change flows, call the Application Detail Change I/F. This updates the application detail information with the latest data.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `telInfoMapper.editInMsgEKK0021C040(param, trgtData, tmpOutMapEKK0021A010, (String) work.get(MSKM_DTL_NO), (String) work.get(KK0011_UPD_DTM))` | Build application detail change request |
| 2 | EXEC | `callSvcInter(handle, param, inMapEKK0021C040)` | Invoke EKK0021C040 |
| 3 | SET | `work.put(KK0011_UPD_DTM, JPCModelConstant.FUNC_CD_1.equals(funcCode) ? outMapEKK0021C040.getString(EKK0021C040CBSMsg.UPD_DTM) : (String) work.get(KK0011_UPD_DTM))` | Update application detail update timestamp; use response value if new contract, else keep existing |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `svc_kei_ucwk_no` | Field | Service detail work number — unique internal tracking identifier for a service contract line item work session; drives multi-step registration flow |
| `mskm_dtl_no` | Field | Application detail number — ID of the registered application detail record created via EKK0011D020 |
| `mskm_no` | Field | Application registration number — the application registration identifier returned from the detail registration process |
| `ido_div` | Field | Movement classification (ido bunru) — distinguishes between regular telephone number addition and address change processing flows |
| `IDO_DIV_ADCHGADD` | Constant | Address change + registration — movement type for "sumoto henko touroku" flows where address change and registration happen together |
| `IDO_DIV_ADCHGFIX` | Constant | Address change + fix — movement type for "sumoto henko kotei" flows where address change is finalized |
| `func_code` | Field | Function code — determines the processing mode: `"1"` = new contract registration/update, `"2"` = duplicate service detail check |
| `FUNC_CD_1` | Constant | `"1"` — New service contract registration mode (shin keiyaku) |
| `FUNC_CD_2` | Constant | `"2"` — Duplicate service detail issuance prevention check mode (nijuu hakkan chekku) |
| `kari_touroku_flg` | Field | Temporary registration flag — `"1"` (`FLG_ON`) indicates deferred finalization, enabling option pack processing in address change flows |
| `FLG_ON` | Constant | `"1"` — Flag set to ON (active) |
| `bmp_um` | Field | Image/bitmap presence flag (bmp umu) — indicates whether image registration information (bmp touroku) is present for the service contract line item |
| `kk0081_upd_dtm` | Field | Service contract update datetime — timestamp of the last update to the service contract (KK_T_OPSVKEI table) |
| `kk0191_gene_add_dtm` | Field | Generation/addition datetime — timestamp when the service contract line item record was created or modified |
| `kk0011_upd_dtm` | Field | Application detail update datetime — timestamp of the last update to the application detail (KK_T_MSKM table) |
| `kk0081_upd_dtm` | Field | Service contract line item update datetime — used by price plan change I/Fs (EKK0081C100/C110/C120) |
| `seiky_kei_no` | Field | Billing contract number (seiyaku keiyakusuu) — the overarching billing contract that contains one or more service contract line items |
| `svc_kei_no` | Field | Service contract number — unique identifier for the main service contract record |
| `pplan_cd` | Field | Plan code (planCD) — billing plan identification code for price plan determination |
| `tk_hoshiki_kei_no` | Field | Provider contract number (tekkyo hoshiki keiyakusuu) — contract number under a specific provider format |
| `svc_kei_stat` | Field | Service contract status — current status code of the service contract line item |
| EKK0011D020 | SC Code | Application detail registration service component — registers new application details and returns `mskmDtlNo` |
| EKK0191D010 | SC Code | Service detail registration for e-o Hikari Phone — creates service contract line item records |
| EKK0191A010 | SC Code | Service detail consent meeting (isshi sokai) — performs consent meeting processing for service contract line items |
| EKK0191C060 | SC Code | Service detail information change — updates service contract line item data (telephone numbers, etc.) |
| EKK0191C012 | SC Code | Image information change — updates image/bitmap registration data for service contracts |
| EKK0191C130 | SC Code | Service detail duplicate issuance check — prevents creation of duplicate service detail work numbers |
| EKK0021C040 | SC Code | Application detail change I/F — updates application detail records for non-address-change flows |
| KK_T_OPSVKEI | Table | Service contract line item master table (service keiyaku sakasen naiyou) |
| KK_T_OPSVKEI_ISP | Table | Service contract line item sub table (service keiyaku sakasen naiyou sub) |
| KK_T_OPSVKEI_BMP | Table | Service contract image/bitmap data table |
| KK_T_MSKM | Table | Application detail master table (shou nai naiyou) |
| KK_T_OPTSVKEI | Table | Option service contract table |
| KK_T_OPTPACK | Table | Option pack table |
| eo Hikari Phone | Business term | e-o Hikari Denwa — K-Opticom's fiber-optic telephone service (eo光電話) |
| Option Pack | Business term | Optional service packs bundled with the main service contract (e.g., home gateway, multiple-function router) |
| Address Change + Registration | Business term | Sumoto henko touroku — combined address change and registration processing flow |
| Temporary Registration | Business term | Kari touroku — deferred/intermediate registration step that creates work numbers before finalization |
| Double Issuance Check | Business term | Nijuu hakkan chekku — validation to prevent duplicate service detail work number creation |
| Service Detail Consent Meeting | Business term | Isshi sokukai — consent confirmation process for service contract line item changes |
| Application Detail | Business term | Shou nai naiyou — the application/registration detail records for a service request |
