# Business Logic - JKKAdInfChgCC.kshAdUpd() [1507 LOC]

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

## 1. Role

### JKKAdInfChgCC.kshAdUpd()

This method performs **Contractor Address Change Processing** (Contractor Address Change) - the central entry point for updating a customer's registered address, name, and phone number in the K-Opticom telecom service management system. It operates as a **dispatch/orchestration component** that routes the update request through multiple Service Component (SC) layers based on the requested update content and customer contract sub-type (Individual vs Corporate). The method handles four distinct service update scenarios: (1) all fields (address + phone + name), (2) address only, (3) phone only, and (4) name only - each identified by the `updateNaiyo` parameter.

The method implements a **builder/dispatch design pattern**. It first retrieves the current customer record via ECK0011A010, then conditionally substitutes the updated fields (name, kana, postal code, full address, phone). For non-name-only and non-phone-only updates, it compares each address component (prefecture, city, town, block, building info) between DB and form input to build a **progress notification string** (`prg_tkjk`) recording before/after change details for audit trails. It then determines the customer contract sub-type by fetching both Individual (ECK0021A010) and Corporate (ECK0031A010) consent records and selecting the one with the newer registration timestamp, executing the corresponding content update (ECK0021C010 or ECK0031C010).

For contracts that involve **equipment-provided services** (eo Mobile Wi-Fi, UQ-WiMAX), the method iterates through the customer's service contract list and propagates the new address to each equipment site, linking to the Home Device Management System via `chgIdodiv_EKK0341C200`.

When the address change effective date matches the operation date, the method also triggers emergency contact name/kana update processing via `JKKEmgRrksNmUpdCC`.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["kshAdUpd"])
    START --> INIT["Initialize: condMap, paramMap, mapper, scCall"]
    INIT --> CHECK_KSH_UPD{getKshAdUpdUm?}
    CHECK_KSH_UPD -->|No| RETURN_EMPTY[Return]
    CHECK_KSH_UPD -->|Yes| EXIST_CUST[existCustRsvData]
    EXIST_CUST --> GET_SITEI_UPD{getSiteiShsAdUpdUm?}
    GET_SITEI_UPD --> GET_CK0011[Execute ECK0011A010 Customer consent conference]
    GET_CK0011 --> UPDATE_NAIYO{updateNaiyo check}
    UPDATE_NAIYO -->|"0" UPDATE_ALL| REPLACE_NAME[Replace customer name and kana]
    UPDATE_NAIYO -->|"3" UPDATE_NM| REPLACE_NAME
    UPDATE_NAIYO -->|"1" UPDATE_AD| PROGRESS_KANA[Build prg_tkjk before-change kana]
    UPDATE_NAIYO -->|"2" UPDATE_TEL| PROGRESS_KANA
    REPLACE_NAME --> PROGRESS_KANA2[Build prg_tkjk before-change kana]
    PROGRESS_KANA2 --> PROGRESS_NM[Build prg_tkjk before-change name]
    PROGRESS_NM --> MEMBER_CHECK{Member type 10 and consent given?}
    MEMBER_CHECK -->|Yes| SYNC_CONT_NAME[Sync contact customer name and kana]
    MEMBER_CHECK -->|No| CHECK_UPDATE_AD_TEL{Not UPDATE_TEL and not UPDATE_NM?}
    SYNC_CONT_NAME --> CHECK_UPDATE_AD_TEL
    CHECK_UPDATE_AD_TEL -->|Yes| REPLACE_ADDR[Replace full address fields]
    REPLACE_ADDR --> AD_CHK_FLG{AdChangFlg changed?}
    AD_CHK_FLG -->|Yes| BUILD_AD_PROG[Build prg_tkjk address strings]
    BUILD_AD_PROG --> CHECK_SITEI_SHS{sitei_shs_upd_um?}
    CHECK_SITEI_SHS -->|Yes| UPDATE_SITEI_SHS[Update designated delivery address]
    CHECK_SITEI_SHS -->|No| CHECK_UPDATE_AD{Not UPDATE_AD and not UPDATE_NM?}
    UPDATE_SITEI_SHS --> CHECK_UPDATE_AD
    CHECK_UPDATE_AD -->|Yes| REPLACE_TEL[Replace phone number fields]
    REPLACE_TEL --> PROGRESS_TEL[Build prg_tkjk before-change phone]
    PROGRESS_TEL --> CK0011_DONE[End ECK0011A010 processing]
    CHECK_UPDATE_AD -->|No| CK0011_DONE
    CHECK_UPDATE_AD_TEL -->|No| CK0011_DONE
    UPDATE_NAIYO -->|"1"| REPLACE_ADDR
    UPDATE_NAIYO -->|"2"| REPLACE_TEL
    MEMBER_CHECK -->|No| REPLACE_ADDR
    PROGRESS_NM --> REPLACE_ADDR
    AD_CHK_FLG -->|No| CHECK_SITEI_SHS
    PROGRESS_KANA --> PROGRESS_NM
    PROGRESS_KANA2 --> PROGRESS_NM
    PROGRESS_TEL --> CK0011_DONE
    CK0011_DONE --> SUBTYPE_CHECK[Sub-type determination]
    SUBTYPE_CHECK --> CALL_ECK0021[Execute ECK0021A010: Individual consent]
    CALL_ECK0021 --> KOJIN_RESULT{Individual obtained?}
    KOJIN_RESULT -->|Yes| CALL_ECK0031[Execute ECK0031A010: Corporate consent]
    KOJIN_RESULT -->|No| CALL_ECK0031
    CALL_ECK0031 --> HOJIN_RESULT{Corporate obtained?}
    HOJIN_RESULT -->|Yes| COMPARE_GENE{Compare timestamps}
    HOJIN_RESULT -->|No| COMPARE_GENE
    COMPARE_GENE -->|Kojin newer| CALL_ECK0021C[Execute ECK0021C010: Individual update]
    COMPARE_GENE -->|Hojin newer| CALL_ECK0031C[Execute ECK0031C010: Corporate update]
    COMPARE_GENE -->|Only Kojin| CALL_ECK0021C
    COMPARE_GENE -->|Only Hojin| CALL_ECK0031C
    CALL_ECK0021C --> ECK0021_DONE[Collect update timestamp and check errors]
    CALL_ECK0031C --> ECK0031_DONE[Collect update timestamp and check errors]
    ECK0021_DONE --> CALL_EKK0081[Execute EKK0081B003: Service contract list]
    ECK0031_DONE --> CALL_EKK0081
    CALL_EKK0081 --> KK0081_LOOP{Iterate contracts?}
    KK0081_LOOP -->|Yes| PRC_CHECK{prcGrpCd eoMobile?}
    PRC_CHECK -->|No| SKIP_KYKU[Continue]
    PRC_CHECK -->|Yes| CALL_EKK0161[Execute EKK0161B004: Contract details]
    SKIP_KYKU --> KK0081_LOOP
    CALL_EKK0161 --> DTL_LOOP{Iterate details?}
    DTL_LOOP -->|Yes| CALL_EKK0341[Execute EKK0341B501: Equipment service list]
    DTL_LOOP -->|No| KK0081_LOOP
    CALL_EKK0341 --> KIKI_LOOP{Iterate equipment?}
    KIKI_LOOP -->|Yes| CALL_EKK0341A[Execute EKK0341A010: Equipment consent]
    KIKI_LOOP -->|No| DTL_LOOP
    CALL_EKK0341A --> STAT_CHECK{Status valid?}
    STAT_CHECK -->|No| SKIP_KIKI[Continue]
    STAT_CHECK -->|Yes| MAP_ADDR[Map address to equipment site]
    MAP_ADDR --> CALL_CHG[Execute chgIdodiv_EKK0341C200]
    CALL_CHG --> KIKI_LOOP
    SKIP_KIKI --> KIKI_LOOP
    CALL_EKK0161 --> DTL_LOOP
    MAP_ADDR --> KIKI_LOOP
    KK0081_LOOP -->|No| SET_FST[Set fstSvcKeiNo]
    SET_FST --> PROGRESS_REG[Execute EKK1091D010: Progress registration]
    PROGRESS_REG --> EMG_CHECK{isFutureDate?}
    EMG_CHECK -->|No| CALL_EMG[Execute JKKEmgRrksNmUpdCC]
    EMG_CHECK -->|Yes| END_PROC[Return]
    CALL_EMG --> END_PROC
```

**Branch Details (updateNaiyo constants resolved):**

| Constant | Value | Business Meaning |
|----------|-------|-----------------|
| UPDATE_ALL | "0" | All fields (address + phone + name) |
| UPDATE_AD | "1" | Address only |
| UPDATE_TEL | "2" | Phone number only |
| UPDATE_NM | "3" | Name only |
| UPDATE_AD_TEL | "4" | Address + phone number |

**prg_tkjk build constants resolved:**
| Constant | Value | Meaning |
|----------|-------|---------|
| PCG_KUTEN_CANMA | "、" | Japanese comma separator |
| PCG_KEISHA_KANA_TEXT | "变更前契約者名(カナ):" | Before-change contractor name (Kana) prefix |
| PCG_KEISHA_NM_TEXT | "变更前契約者名:" | Before-change contractor name prefix |
| PCG_KEISHA_PCD_TEXT | "变更前郵便番号:" | Before-change postal code prefix |
| PCG_KEISHA_AD_TEXT | "变更前住所:" | Before-change address prefix |
| PCG_KEISHA_TELNO_TEXT | "变更前電話番号:" | Before-change phone prefix |
| PCG_KEISHA_PCD_TEXT_AF | "変更後郵便番号:" | After-change postal code prefix |
| PCG_KEISHA_AD_TEXT_AF | "変更後住所:" | After-change address prefix |
| PCG_KEISHA_TELNO_TEXT_AF | "変更後電話番号:" | After-change phone prefix |
| PRG_TKJK_MAX_VALUE | 128 | Max length for progress text truncation |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `param` | `IRequestParameterReadWrite` | Request parameter object containing model groups, control maps, and all form data for the address change screen. It carries the updated contractor information (address fields, name, phone), system metadata (SYSID, operation date), and error/progress tracking data. |
| 2 | `fixedText` | `String` | User-provided arbitrary string used for debugging and log tracing. Passed through to mapper and SC call methods for request identification. |

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

| Field | Type | Business Description |
|-------|------|---------------------|
| `keepSesHandle` | `ThreadLocal<Handle>` | Session handle shared across SC invocations within this thread |
| `PRG_TKJK_MAX_VALUE` | `int = 128` | Maximum character limit for progress notification text truncation |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `JKKAdInfChgMapperCC.getInstance` | - | - | Retrieves the mapper instance for data transformation |
| R | `JKKAdInfChgCC.getKshAdUpdUm` | - | - | Checks if contractor address is update target |
| - | `JKKAdInfChgCC.existCustRsvData` | - | - | Checks customer reservation data (AN-2661 future reservation improvement) |
| R | `mapper.setECK0011A010` | ECK0011A010SC | KK_T_ETC_CONFCONF | Prepares customer consent conference request |
| R | `mapper.getECK0011A010` | ECK0011A010SC | KK_T_ETC_CONFCONF | Retrieves customer consent conference data |
| C | `mapper.setECK0021A010` | ECK0021A010SC | KK_T_ETC_CONFCONF | Prepares Individual customer consent conference |
| R | `mapper.getECK0021A010` | ECK0021A010SC | KK_T_ETC_CONFCONF | Retrieves Individual consent conference data |
| U | `mapper.setECK0021C010` | ECK0021C010CBS | KK_T_ETC_CONFCONF | Prepares Individual customer content update |
| R | `mapper.getECK0021C010` | ECK0021C010CBS | KK_T_ETC_CONFCONF | Retrieves Individual content update result |
| C | `mapper.setECK0031A010` | ECK0031A010SC | KK_T_ETC_CONFCONF | Prepares Corporate customer consent conference |
| R | `mapper.getECK0031A010` | ECK0031A010SC | KK_T_ETC_CONFCONF | Retrieves Corporate consent conference data |
| U | `mapper.setECK0031C010` | ECK0031C010CBS | KK_T_ETC_CONFCONF | Prepares Corporate customer content update |
| R | `mapper.getECK0031C010` | ECK0031C010CBS | KK_T_ETC_CONFCONF | Retrieves Corporate content update result |
| R | `mapper.setEKK0081B003` | EKK0081B003SC | KK_T_ETC_CONFSVC | Prepares service contract list by SYSID |
| R | `mapper.getEKK0081B003` | EKK0081B003SC | KK_T_ETC_CONFSVC | Retrieves service contract list |
| R | `mapper.setEKK0161B004` | EKK0161B004SC | KK_T_ETC_CONFDTL | Prepares service contract detail list |
| R | `mapper.getEKK0161B004` | EKK0161B004SC | KK_T_ETC_CONFDTL | Retrieves service contract detail list |
| R | `mapper.setEKK0341B501` | EKK0341B501SC | KK_T_ETC_EQUIPCONF | Prepares equipment-provided service contract list |
| R | `mapper.getEKK0341B501` | EKK0341B501SC | KK_T_ETC_EQUIPCONF | Retrieves equipment contract list |
| R | `mapper.setEKK0341A010` | EKK0341A010SC | KK_T_ETC_EQUIPCONF | Prepares equipment-provided service consent |
| R | `mapper.getEKK0341A010` | EKK0341A010SC | KK_T_ETC_EQUIPCONF | Retrieves equipment consent data |
| U | `chgIdodiv_EKK0341C200` | EKK0341C200CBS | KK_T_ETC_EQUIPCONF | Updates equipment-provided contract (Home Device Mgmt link) |
| R | `mapper.setEKK1091D010` | EKK1091D010CBS | KK_T_ETC_PROGREGIST | Prepares progress registration |
| R | `mapper.getEKK1091D010` | EKK1091D010CBS | KK_T_ETC_PROGREGIST | Retrieves progress registration result |
| - | `JKKAdInfChgCC.getIdoRsnList` | - | - | Retrieves error reason list for progress registration |
| C | `JKKEmgRrksNmUpdCC.execute` | - | KK_T_ETC_CONFCONF | Emergency contact name/kana update |
| U | `JKKAdInfChgCC.chgIdodiv_EKK0341C200` | EKK0341C200CBS | KK_T_ETC_EQUIPCONF | Equipment contract update with address propagation |
| R | `JKKAdInfChgCC.getContRrksNo` | - | - | Retrieves contact customer reference number |
| R | `JZMAdOutputEdit.getPtn16` | - | - | Formats address for contact customer location |
| - | `JKKAdInfChgCC.getMapString` | - | - | Helper for safe map string extraction |

## 5. Dependency Trace

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

No screen/batch entry points found within 8 hops. Direct callers found: 1 method.
Terminal operations from this method: `getPtn16` [R], `execute` [-], `setData` [-], `scResultCheck` [-], `getEKK1091D010` [R], `chgIdodiv_EKK0341C200` [U], `getContRrksNo` [R], `getIdoRsnList` [-], `getKshAdUpdUm` [R], `existCustRsvData` [-], `getMapString` [-]

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | (Internal) JKKAdInfChgCBS.kshAdUpd | JKKAdInfChgCBS.kshAdUpd -> JKKAdInfChgCC.kshAdUpd | ECK0011A010 [R] KK_T_ETC_CONFCONF, ECK0021C010 [U] KK_T_ETC_CONFCONF, ECK0031C010 [U] KK_T_ETC_CONFCONF, EKK0341C200 [U] KK_T_ETC_EQUIPCONF, EKK1091D010 [C] KK_T_ETC_PROGREGIST, JKKEmgRrksNmUpdCC.execute [C] KK_T_ETC_CONFCONF |

**Terminal operations breakdown:**

| # | Terminal | Type | Entity |
|---|----------|------|--------|
| 1 | `ECK0011A010` | R | KK_T_ETC_CONFCONF (Customer consent conference) |
| 2 | `ECK0021A010` | C | KK_T_ETC_CONFCONF (Individual consent) |
| 3 | `ECK0021C010` | U | KK_T_ETC_CONFCONF (Individual content update) |
| 4 | `ECK0031A010` | C | KK_T_ETC_CONFCONF (Corporate consent) |
| 5 | `ECK0031C010` | U | KK_T_ETC_CONFCONF (Corporate content update) |
| 6 | `EKK0081B003` | R | KK_T_ETC_CONFSVC (Service contract list) |
| 7 | `EKK0161B004` | R | KK_T_ETC_CONFDTL (Service contract details) |
| 8 | `EKK0341B501` | R | KK_T_ETC_EQUIPCONF (Equipment contract list) |
| 9 | `EKK0341A010` | R | KK_T_ETC_EQUIPCONF (Equipment consent) |
| 10 | `EKK0341C200` | U | KK_T_ETC_EQUIPCONF (Equipment contract update) |
| 11 | `EKK1091D010` | C | KK_T_ETC_PROGREGIST (Progress registration) |
| 12 | `JKKEmgRrksNmUpdCC.execute` | C | KK_T_ETC_CONFCONF (Emergency contact update) |
| 13 | `JZMAdOutputEdit.getPtn16` | R | Address formatting utility |

## 6. Per-Branch Detail Blocks

### Block 1 - TRY-CATCH (L571)

> The main processing is wrapped in a try-catch block. All exceptions are mapped to CCException with the service component error message.

| # | Type | Code |
|---|------|------|
| 1 | SET | `condMap = new HashMap<String, String>()` |
| 2 | SET | `paramMap = (HashMap)param.getData(fixedText)` |
| 3 | SET | `mapper = JKKAdInfChgMapperCC.getInstance()` |
| 4 | SET | `scCall = new ServiceComponentRequestInvoker()` |

### Block 2 - IF: Contract Address Update Check (L588)

> Checks whether the contractor address is an update target. If not, returns immediately without further processing.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `ksh_upd_um = getKshAdUpdUm(paramMap)` |
| 2 | IF | `!ksh_upd_um` |
| 3 | RETURN | `return` (no update target) |

### Block 3 - EXEC: Customer Reservation Data Check (L593)

> ANK-2661: Checks whether the customer has existing reservation data (future contracts). This is part of the future reservation data cancellation improvement.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `existCustRsvData(param, paramMap, scCall, fixedText, mapper)` |

### Block 4 - IF: Designated Delivery Address Update Check (L598)

> Determines whether the designated delivery address (customer-specified delivery location) is also being updated.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `sitei_shs_upd_um = getSiteiShsAdUpdUm(paramMap)` |
| 2 | SET | `prg_tkjk = ""` (Progress notification text builder) |
| 3 | SET | `prg_tkjk2 = ""` (After-change progress text builder) |

### Block 5 - Processing: ECK0011A010 Customer Consent Conference (L610)

> Retrieves the current contractor record via ECK0011A010 to compare and substitute fields.

| # | Type | Code |
|---|------|------|
| 1 | SET | `condMap.put(COND_KEY_SYSID, paramMap.get(PARAM_KEY_SYSID))` |
| 2 | SET | `condMap.put(COND_KEY_OPEDATE, paramMap.get(PARAM_KEY_KSH_APLY_YMD))` |
| 3 | CALL | `reqMap = mapper.setECK0011A010(param, fixedText, condMap)` |
| 4 | CALL | `resMap = scCall.run(reqMap, keepSesHandle.get())` |
| 5 | CALL | `ck0011_a010_map = mapper.getECK0011A010(param, fixedText, resMap)` |
| 6 | CALL | `mapper.scResultCheck(param)` |

### Block 5.1 - SET: Before-Change Name/Kana Storage (L627)

> OM-2020-0000919: Stores before-change name and kana for format error notification prevention when names are NOT changed.

| # | Type | Code |
|---|------|------|
| 1 | SET | `paramMap.put(PARAM_KEY_KSH_KEISHA_KANA_BF, ck0011_a010_map.get(CUST_KANA))` |
| 2 | SET | `paramMap.put(PARAM_KEY_KSH_KEISHA_NM_BF, ck0011_a010_map.get(CUST_NM))` |

### Block 6 - IF/ELSE-IF: updateNaiyo Branching (L633)

> Determines which fields to replace based on the update content code.

**Block 6.1 - IF: UPDATE_ALL or UPDATE_NM (L633-698)**

> When updating all fields or name only: replaces customer name (kana and kanji) with form values, and builds progress notification text for before-change details.

| # | Type | Code |
|---|------|------|
| 1 | SET | `updateNaiyo = (String)paramMap.get(PARAM_KEY_UPDATE_NAIYO)` |
| 2 | IF | `UPDATE_ALL.equals(updateNaiyo) || UPDATE_NM.equals(updateNaiyo)` |
| 3 | IF | CUST_KANA null/empty and form KANA null/empty: (skip) |
| 4 | IF | CUST_KANA has value, form KANA null/empty: `prg_tkjk += PCG_KEISHA_KANA_TEXT + before_KANA + PCG_KUTEN_CANMA` |
| 5 | IF | CUST_KANA null, form KANA has value: `prg_tkjk += PCG_KEISHA_KANA_TEXT + before_KANA + PCG_KUTEN_CANMA` |
| 6 | IF | CUST_KANA differs from form KANA: `prg_tkjk += PCG_KEISHA_KANA_TEXT + before_KANA + PCG_KUTEN_CANMA` |
| 7 | SET | `ck0011_a010_map.put(CUST_KANA, form_kana)` |
| 8 | IF | CUST_NM same conditions as kana: build progress text with PCG_KEISHA_NM_TEXT |
| 9 | SET | `ck0011_a010_map.put(CUST_NM, form_name)` |
| 10 | IF | Member type "10" (Individual Master) and consent given and `isContentsDoi()`: sync contact customer name/kana |

**Block 6.2 - IF/ELSE-IF: Not UPDATE_TEL and Not UPDATE_NM (L698-795)**

> When updating address (not phone-only and not name-only): replaces full address fields and detects address changes.

| # | Type | Code |
|---|------|------|
| 1 | SET | `ck0011_a010_map.put(KEISHA_AD_CD, form_ad_cd)` |
| 2 | IF | Postal code null/null: (skip progress) |
| 3 | IF | Postal code has value, form null: `prg_tkjk += PCG_KEISHA_NM_TEXT + before_pcd + PCG_KUTEN_CANMA` |
| 4 | IF | Postal code null, form has value: same build |
| 5 | IF | Postal code differs: `prg_tkjk += PCG_KEISHA_PCD_TEXT + before_pcd + PCG_KUTEN_CANMA` |
| 6 | SET | `prg_tkjk2 += PCG_KEISHA_PCD_TEXT_AF + form_pcd + PCG_KUTEN_CANMA` (after-change text) |
| 7 | SET | `ck0011_a010_map.put(KEISHA_PCD, form_pcd)` |
| 8 | SET | `AdChangFlg = false` |
| 9 | IF | KEISHA_STATE_NM null/null: (skip) |
| 10 | IF | One has value, other null: `AdChangFlg = true` |
| 11 | IF | Values differ: `AdChangFlg = true` (flag ON for progress editing target) |
| 12 | [Repeated for KEISHA_CITY_NM, KEISHA_OAZTSU_NM, KEISHA_AZCHO_NM, KEISHA_BNCHIGO, KEISHA_ADRTTM, KEISHA_ADRRM] |
| 13 | IF | `AdChangFlg` is true: `prg_tkjk += PCG_KEISHA_AD_TEXT + [before_state, city, oaztsu, azcho, bnchigo, adrttm, adrrm] + PCG_KUTEN_CANMA` |
| 14 | SET | `prg_tkjk2 += PCG_KEISHA_AD_TEXT_AF + [form_state, city, oaztsu, azcho, bnchigo, adrttm, adrrm] + PCG_KUTEN_CANMA` |
| 15 | SET | All address fields replaced in ck0011_a010_map with form values |
| 16 | SET | `ck0011_a010_map.put("keisha_ad_chk_lv", "1")` |
| 17 | SET | `ck0011_a010_map.put(KEISHA_AD_MAN_INPUT_FLG, form_ad_man_input_flg)` |

**Block 6.2.1 - IF: Master Individual Member + Contents Consent (L795)**

> OM-2013-0003297: For Individual Master members (member_type="10") with content consent given, also synchronizes the contact customer's address (content customer location).

| # | Type | Code |
|---|------|------|
| 1 | IF | `MEMBER_SBT_CD = "10" && EONETID_MI_IKO_FLG != "1" && isContentsDoi()` |
| 2 | SET | `ck0011_a010_map.put(CONT_PCD, form_pcd)` |
| 3 | CALL | `contAdInf = JZMAdOutputEdit.getPtn16(state, city, oaztsu, azcho, bnchigo, adrttm, adrrm)` |
| 4 | SET | `contAd1, contAd2, contAd3 = contAdInf[0/1/2]` |
| 5 | SET | `CONT_STATE_NM = "", CONT_CITY_NM = "", CONT_OAZTSU_NM = "", CONT_AZCHO_NM = ""` |
| 6 | SET | `CONT_BNCHIGO = contAd1 + contAd2` |
| 7 | SET | `CONT_ADRTTM = contAd3`, `CONT_ADRRM = ""` |
| 8 | SET | `CONT_AD_BNKT_STA_PST = contPst` |

**Block 6.2.2 - IF: sitei_shs_upd_um (Designated Delivery Address) (L822)**

> ANK-0382: When designated delivery address is being updated, fills the delivery address fields.

| # | Type | Code |
|---|------|------|
| 1 | IF | `sitei_shs_upd_um` |
| 2 | SET | All CSSTI_SHS_* fields populated from paramMap |
| 3 | SET | `CSSTI_SHS_AD_MAN_INPUT_FLG = reigai ? "1" : "0"` |
| 4 | SET | `cssti_shs_ad_chk_lv = "1"` |

**Block 6.3 - IF/ELSE-IF: Not UPDATE_AD and Not UPDATE_NM (L845)**

> When updating phone only (not address and not name): replaces phone fields and builds progress text.

| # | Type | Code |
|---|------|------|
| 1 | IF | KEISHA_TELNO null/null: (skip) |
| 2 | IF | TELNO has value, form null: `prg_tkjk += PCG_KEISHA_TELNO_TEXT + before_tel + PCG_KUTEN_CANMA` |
| 3 | IF | TELNO null, form has value: same |
| 4 | IF | TELNO differs: same |
| 5 | SET | `prg_tkjk2 += PCG_KEISHA_TELNO_TEXT_AF + form_tel + PCG_KUTEN_CANMA` |
| 6 | SET | `ck0011_a010_map.put(KEISHA_TELNO, form_tel)` |

### Block 7 - SET: Post-ECK0011 Common Fields (L851)

> Sets reservation application date and before-change update timestamp.

| # | Type | Code |
|---|------|------|
| 1 | SET | `ck0011_a010_map.put(RSV_APLY_YMD, form_aply_ymd)` |
| 2 | SET | `ck0011_a010_map.put(UPD_DT_CUST_UPD_DTM_BEF, before_upd_dtm)` |

### Block 8 - Processing: Sub-type Determination (Individual vs Corporate) (L965)

> OM-2015-0003318: The method fetches both Individual (ECK0021A010) and Corporate (ECK0031A010) consent records simultaneously, compares their registration timestamps, and selects the sub-type with the newer data. This replaces the previous keisha_type_cd branching that was deleted.

| # | Type | Code |
|---|------|------|
| 1 | SET | `subKojin = false`, `subHojin = false` |
| 2 | SET | `ck0021_a010_map = new HashMap<>()`, `ck0031_a010_map = new HashMap<>()` |

**Block 8.1 - ECK0021A010: Individual Customer Consent (L978)**

| # | Type | Code |
|---|------|------|
| 1 | SET | `condMap.put(COND_KEY_SYSID, sysid)` |
| 2 | SET | `condMap.put(COND_KEY_OPEDATE, ksh_aply_ymd)` |
| 3 | CALL | `reqMap = mapper.setECK0021A010(param, fixedText, condMap)` |
| 4 | CALL | `resMap = scCall.run(reqMap, keepSesHandle.get())` |
| 5 | IF | `resMap contains TEMPLATE_LIST_KEY` |
| 6 | IF | `templateArrayKojin != null && length > 0` |
| 7 | CALL | `ck0021_a010_map = mapper.getECK0021A010(...)` |
| 8 | SET | `gene_Kojin = ck0021_a010_map.get(GENE_ADD_DTM)` |
| 9 | SET | `subKojin = true` |

**Block 8.2 - ECK0031A010: Corporate Customer Consent (L1019)**

| # | Type | Code |
|---|------|------|
| 1 | SET | `condMap.put(COND_KEY_SYSID, sysid)` |
| 2 | SET | `condMap.put(COND_KEY_OPEDATE, ksh_aply_ymd)` |
| 3 | CALL | `reqMap = mapper.setECK0031A010(param, fixedText, condMap)` |
| 4 | CALL | `resMap = scCall.run(reqMap, keepSesHandle.get())` |
| 5 | IF | `templateArrayHojin != null && length > 0` |
| 6 | CALL | `ck0031_a010_map = mapper.getECK0031A010(...)` |
| 7 | SET | `gene_Hojin = ck0031_a010_map.get(GENE_ADD_DTM)` |
| 8 | SET | `subHojin = true` |

**Block 8.3 - IF: Both sub-types obtained (L1055)**

> When both Individual and Corporate data exists, compares registration timestamps to select the newer one.

| # | Type | Code |
|---|------|------|
| 1 | IF | `subKojin && subHojin` |
| 2 | IF | `gene_Kojin.compareTo(gene_Hojin) > 0` (Kojin newer): `subHojin = false` |
| 3 | ELSE | `subKojin = false` (Hojin newer) |

### Block 9 - IF/ELSE-IF: Sub-type Dispatch (L1069)

**Block 9.1 - IF: subKojin (Individual) (L1069-1113)**

> ECK0021C010: Updates Individual customer content. Collects address check level errors for all address types.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `reqMap = mapper.setECK0021C010(param, fixedText, ck0011_a010_map, ck0021_a010_map)` |
| 2 | CALL | `resMap = scCall.run(reqMap, keepSesHandle.get())` |
| 3 | CALL | `ck0021_c010_map = mapper.getECK0021C010(...)` |
| 4 | SET | `paramMap.put(PARAM_KEY_KSH_UPD_DTM_AF, ck0021_c010_map.get(UPD_DTM))` |
| 5 | SET | Collect KEISHA_AD_CHK_LV_ERR, CONT_AD_CHK_LV_ERR, OFFC_AD_CHK_LV_ERR, SKSHA_AD_CHK_LV_ERR, CSSTI_SHS_AD_CHK_LV_ERR into paramMap |

**Block 9.2 - ELSE-IF: subHojin (Corporate) (L1113-1149)**

> ECK0031C010: Updates Corporate customer content. Collects address check level errors.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `reqMap = mapper.setECK0031C010(param, fixedText, ck0011_a010_map, ck0031_a010_map)` |
| 2 | CALL | `resMap = scCall.run(reqMap, keepSesHandle.get())` |
| 3 | CALL | `ck0031_c010_map = mapper.getECK0031C010(...)` |
| 4 | SET | `paramMap.put(PARAM_KEY_KSH_UPD_DTM_AF, ck0031_c010_map.get(UPD_DTM))` |
| 5 | SET | Collect KEISHA_AD_CHK_LV_ERR, CONT_AD_CHK_LV_ERR, CSSTI_SHS_AD_CHK_LV_ERR |

**Block 9.3 - ELSE: Neither sub-type (L1149)**

> Illegal case: neither Individual nor Corporate sub-type returned data.

| # | Type | Code |
|---|------|------|
| 1 | THROW | `new CCException(ERR_STR_RESULT_CD, new Exception())` |

### Block 10 - Processing: Equipment-Provided Service Address Propagation (L1157)

> When not updating address-only and not name-only: iterates through all service contracts and propagates the new address to equipment sites.

| # | Type | Code |
|---|------|------|
| 1 | SET | `ope_date = paramMap.get(PARAM_KEY_OPE_DATE)` |

**Block 10.1 - EKK0081B003: Service Contract List (L1167)**

| # | Type | Code |
|---|------|------|
| 1 | SET | `condMap.put(COND_KEY_SYSID, sysid)` |
| 2 | SET | `condMap.put(COND_KEY_OPEDATE, ope_date)` |
| 3 | CALL | `reqMap = mapper.setEKK0081B003(param, fixedText, condMap)` |
| 4 | CALL | `resMap = scCall.run(reqMap, keepSesHandle.get())` |
| 5 | CALL | `kk0081_b003_list = mapper.getEKK0081B003(...)` |

**Block 10.2 - WHILE: Iterate over service contracts (L1180)**

> Only executes if updateNaiyo is not UPDATE_TEL and not UPDATE_NM.

| # | Type | Code |
|---|------|------|
| 1 | WHILE | `kyku_list_ite.hasNext()` |
| 2 | SET | `cur_kyku_list = kyku_list_ite.next()` |
| 3 | SET | `prcGrpCd = getMapString(cur_kyku_list, PRC_GRP_CD)` |

**Block 10.2.1 - IF: prcGrpCd filter (L1188)**

> Only processes eo Mobile Wi-Fi (07), eo Mobile EM (08), eo Mobile UQ-WiMAX (09), and eo Mobile Mail Access (16).

| # | Type | Code |
|---|------|------|
| 1 | IF | `prcGrpCd NOT IN {PRC_GRP_CD_07="07", PRC_GRP_CD_08="08", PRC_GRP_CD_09="09", PRC_GRP_CD_16="16"}` |
| 2 | EXEC | `continue` |

**Block 10.2.2 - EKK0161B004: Contract Details (L1201)**

| # | Type | Code |
|---|------|------|
| 1 | SET | `condMap.put(COND_KEY_SVC_KEI_NO, keiyakuNo)` |
| 2 | CALL | `reqMap = mapper.setEKK0161B004(param, fixedText, condMap)` |
| 3 | CALL | `resMap = scCall.run(reqMap, keepSesHandle.get())` |
| 4 | CALL | `kk0161_b004_lst = mapper.getEKK0161B004(...)` |

**Block 10.2.3 - WHILE: Iterate over contract details (L1209)**

| # | Type | Code |
|---|------|------|
| 1 | WHILE | `kykuUcwk_list_ite.hasNext()` |
| 2 | SET | `cur_kykuUcwk_list = kykuUcwk_list_ite.next()` |
| 3 | SET | `keiyakuUcwkNo = getMapString(cur_kykuUcwk_list, SVC_KEI_UCWK_NO)` |

**Block 10.2.4 - EKK0341B501: Equipment Service List (L1217)**

| # | Type | Code |
|---|------|------|
| 1 | SET | `condMap.put(COND_KEY_SVC_KEI_UCWK_NO, keiyakuUcwkNo)` |
| 2 | CALL | `reqMap = mapper.setEKK0341B501(param, fixedText, condMap)` |
| 3 | CALL | `resMap = scCall.run(reqMap, keepSesHandle.get())` |
| 4 | CALL | `kk341_b501_lst = mapper.getEKK0341B501(...)` |

**Block 10.2.5 - WHILE: Iterate over equipment contracts (L1227)**

| # | Type | Code |
|---|------|------|
| 1 | WHILE | `kikiTk_ite.hasNext()` |
| 2 | SET | `cur_kikiTk_list = kikiTk_ite.next()` |
| 3 | SET | `kktkSvcKeiNo = getMapString(cur_kikiTk_list, KKTK_SVC_KEI_NO)` |

**Block 10.2.6 - EKK0341A010: Equipment Consent (L1233)**

| # | Type | Code |
|---|------|------|
| 1 | SET | `condMap.put(COND_KEY_KKTK_SVC_KEI_NO, kktkSvcKeiNo)` |
| 2 | SET | `condMap.put(COND_KEY_OPEDATE, ope_date)` |
| 3 | SET | `condMap.put(COND_KEY_GENE_ADD_DTM, cur_kikiTk_list.get(GENE_ADD_DTM))` |
| 4 | CALL | `reqMap = mapper.setEKK0341A010(param, fixedText, condMap)` |
| 5 | CALL | `resMap = scCall.run(reqMap, keepSesHandle.get())` |
| 6 | CALL | `kk341_a010_map = mapper.getEKK0341A010(...)` |

**Block 10.2.7 - IF: Status filter (L1245)**

> IT2-2012-0001870: Only processes equipment in specific statuses. Excluded statuses: 010 (Received), 020 (Reviewed), 030 (Contracted), 100 (Service Provision Active), 110 (Contract Change), 210 (Suspended/Canceled), 220 (Stopped).

| # | Type | Code |
|---|------|------|
| 1 | SET | `tgtStatList = Arrays.asList({CD00056_KKTK_STATUS_LIST})` |
| 2 | IF | `kk341_a010_map.get(KKTK_SVC_KEI_STAT) NOT IN tgtStatList` |
| 3 | EXEC | `continue` |

**Block 10.2.8 - Address Propagation (L1255)**

> Maps contractor address fields to equipment site address fields.

| # | Type | Code |
|---|------|------|
| 1 | SET | `kk341_a010_map.put(KIKI_STC_SAKI_AD_CD, form_ad_cd)` |
| 2 | SET | `kk341_a010_map.put(KIKI_STC_SAKI_PCD, form_pcd)` |
| 3 | SET | `kk341_a010_map.put(KIKI_STC_SAKI_STATE_NM, form_state)` |
| 4 | SET | `kk341_a010_map.put(KIKI_STC_SAKI_CITY_NM, form_city)` |
| 5 | SET | `kk341_a010_map.put(KIKI_STC_SAKI_OAZTSU_NM, form_oaztsu)` |
| 6 | SET | `kk341_a010_map.put(KIKI_STC_SAKI_AZCHO_NM, form_azcho)` |
| 7 | SET | `kk341_a010_map.put(KIKI_STC_SAKI_BNCHIGO, form_bnchigo)` |
| 8 | SET | `kk341_a010_map.put(KIKI_STC_SAKI_ADRTTM, form_adrttm)` |
| 9 | SET | `kk341_a010_map.put(KIKI_STC_SAKI_ADRRM, form_adrrm)` |
| 10 | SET | `kk341_a010_map.put(KEY_SETPLACE_AD_MAN_INPUT_FLG, form_man_input_flg)` |
| 11 | SET | `kk341_a010_map.put(KIKI_STC_AD_CHK_LV, "1")` |
| 12 | SET | `kk341_a010_map.put(UPD_DTM_BEF, before_upd_dtm)` |
| 13 | IF | `UPDATE_ALL.equals(updateNaiyo) || UPDATE_AD_TEL.equals(updateNaiyo)` |
| 14 | SET | `kk341_a010_map.put(KIKI_STC_SK_TELNO, form_telno)` |
| 15 | CALL | `chgIdodiv_EKK0341C200(param, fixedText, kk341_a010_map, keiyakuNo)` |

### Block 11 - Processing: fstSvcKeiNo Determination (L1311)

> Determines the service contract number to set in the progress registration. If the contract list is empty, uses paramMap directly.

| # | Type | Code |
|---|------|------|
| 1 | SET | `fstSvcKeiNo = ""` |
| 2 | IF | `kk0081_b003_list.size() == 0` |
| 3 | SET | `fstSvcKeiNo = paramMap.get(PARAM_KEY_SVC_KEI_NO)` |
| 4 | ELSE | `fstSvcKeiNo = first_contract.get(SVC_KEI_NO)` |
| 5 | SET | `paramMap.put(PARAM_KEY_PRG_ADD_SVC_KEI_NO, fstSvcKeiNo)` |

### Block 12 - Processing: Progress Registration (L1319)

> EKK1091D010: Registers the progress of the address change operation.

| # | Type | Code |
|---|------|------|
| 1 | SET | `parent_map = new HashMap<>()` |
| 2 | SET | `parent_map.put(SVC_KEI_NO, paramMap.get(PARAM_KEY_SVC_KEI_NO))` |
| 3 | SET | `parent_map.put(IDO_DIV, paramMap.get(PARAM_KEY_IDO_DIV))` |
| 4 | SET | `parent_map.put(IDO_DTM, JCCBPCommon.getSysDateTimeStamp())` |
| 5 | SET | `parent_map.put(PRG_STAT, CD00647_E010)` |

**Block 12.1 - prg_tkjk Text Processing (L1335)**

> Builds the final progress text by removing trailing comma and truncating to 256 characters max.

| # | Type | Code |
|---|------|------|
| 1 | SET | `prg_tkjk_length = prg_tkjk.length()` |
| 2 | IF | `prg_tkjk != null && !empty && prg_tkjk_length > 0` |
| 3 | SET | `prg_tkjk = prg_tkjk.substring(0, prg_tkjk_length - 1)` (remove trailing comma) |
| 4 | IF | `prg_tkjk_length - 1 > PRG_TKJK_MAX_VALUE (128)` |
| 5 | SET | `prg_tkjk = prg_tkjk.substring(0, 128)` |
| 6 | SET | `prg_tkjk2` same processing as above |
| 7 | SET | `parent_map.put(PRG_TKJK_1, prg_tkjk)` |
| 8 | SET | `parent_map.put(PRG_TKJK_2, prg_tkjk2)` |
| 9 | IF | `mskm_dtl_no` not empty: `parent_map.put(MSKM_DTL_NO, form_mskm_dtl_no)` |

**Block 12.2 - EKK1091D010 Execution (L1357)**

| # | Type | Code |
|---|------|------|
| 1 | CALL | `reqMap = mapper.setEKK1091D010(param, fixedText, parent_map, getIdoRsnList(param, fixedText))` |
| 2 | CALL | `resMap = scCall.run(reqMap, keepSesHandle.get())` |
| 3 | CALL | `kk1091_d010_map = mapper.getEKK1091D010(...)` |
| 4 | SET | `paramMap.put(PARAM_KEY_PRG_KSH_AD_CHG, kk1091_d010_map)` |

### Block 13 - IF: Emergency Contact Update (L1364)

> ANK-3458: When the effective date is NOT in the future (i.e., same day as operation date), triggers emergency contact name/kana update.

| # | Type | Code |
|---|------|------|
| 1 | SET | `kshAplyYmd = paramMap.get(PARAM_KEY_KSH_APLY_YMD)` |
| 2 | SET | `opeDate = paramMap.get(PARAM_KEY_OPE_DATE)` |
| 3 | IF | `!JPCUtilCommon.isFutureDate(kshAplyYmd, opeDate, "0")` (effective date is NOT future) |
| 4 | SET | `emgRrksNmUpdMap.put("ido_div", paramMap.get(PARAM_KEY_IDO_DIV))` |
| 5 | SET | `emgRrksNmUpdMap.put("sysid", sysid)` |
| 6 | SET | `emgRrksNmUpdMap.put("mskm_dtl_no", form_mskm_dtl_no)` |
| 7 | CALL | `param.setData("JKKEmgRrksNmUpdCC", emgRrksNmUpdMap)` |
| 8 | CALL | `new JKKEmgRrksNmUpdCC().execute(keepSesHandle.get(), param, "JKKEmgRrksNmUpdCC")` |

### Block 14 - CATCH (L2072)

> Maps all exceptions to CCException with the service component error message.

| # | Type | Code |
|---|------|------|
| 1 | THROW | `new CCException(ERR_STR_RESULT_CD, ex.getCause())` |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `kshAdUpd` | Method | Contractor Address Update - main address change processing method |
| `updateNaiyo` | Field | Update content code - determines which fields to update (0=all, 1=address, 2=phone, 3=name, 4=address+phone) |
| `keisha_type_cd` | Field | Contractor type code - "1" = Individual (OWN_ORNER), "2" = Corporate (COMP_ORNER) |
| ` MEMBER_SBT_CD` | Field | Member sub-type code - "10" indicates Individual Master member |
| `EONETID_MI_IKO_FLG` | Field | Contents consent flag - whether the customer has given content consent |
| `sitei_shs_upd_um` | Field | Designated delivery address update flag - whether customer-specified delivery location is being updated |
| `AdChangFlg` | Field | Address change flag - set when any address component differs between DB and form input |
| `prg_tkjk` | Field | Progress tracking text builder - accumulates before-change notification strings |
| `prg_tkjk2` | Field | After-change progress text builder - accumulates after-change notification strings |
| `prcGrpCd` | Field | Price group code - classifies service billing group (07=eo Mobile Wi-Fi, 08=eo Mobile EM, 09=eo Mobile UQ-WiMAX, 16=eo Mobile Mail Access) |
| `KKTK_SVC_KEI_STAT` | Field | Equipment-provided service contract status code |
| `gene_Kojin` / `gene_Hojin` | Field | Individual/Corporate registration timestamp - used to determine which sub-type has newer data |
| `subKojin` / `subHojin` | Field | Individual/Corporate sub-type determination flags |
| `ido_div` | Field | Displacement/division code - error classification indicator |
| `PRG_STAT` | Field | Progress status code - CD00647_E010 = "E010" (Contractor Address Change) |
| `PRG_TKJK_1` / `PRG_TKJK_2` | Field | Progress tracking text fields - max 128 chars each (256 total) |
| `MSKM_DTL_NO` | Field | Application detail number - reference to the application record |
| `CD00647_E010` | Constant | Progress status "E010" - Contractor Address Change |
| `CD00647_E020` | Constant | Progress status "E020" - Usage Location Address Change |
| `CD00647_E030` | Constant | Progress status "E030" - Work Site Address Change |
| `CD00647_E040` | Constant | Progress status "E040" - Emergency Contact Address Change |
| `CD00647_E050` | Constant | Progress status "E050" - Invoice Delivery Address Change |
| `CD00647_E080` | Constant | Progress status "E080" - Guide Book Delivery Address Change |
| `CD00647_E090` | Constant | Progress status "E090" - Customer Designated Delivery Address Change |
| `CD00056_KKTK_STATUS_LIST` | Constant | Valid equipment service statuses: 010=Received, 020=Reviewed, 030=Contracted, 100=Service Active, 110=Contract Change, 210=Suspended, 220=Stopped |
| `CD00036_OWN_ORNER` | Constant | "1" - Individual contractor type |
| `CD00036_COMP_ORNER` | Constant | "2" - Corporate contractor type |
| CD00254_KTAI | Constant | "2" - Mobile phone contact type |
| CD00254_OFFC | Constant | "3" - Office contact type |
| CD00254_OTHER | Constant | "5" - Other contact type |
| CD00268_KEISHA | Constant | "01" - Contractor contact code |
| CD00790_TEL | Constant | "003" - Phone contact method code |
| CD00871_KAISEN | Constant | "0" - Circuit-type contact |
| CD00002_NASHI | Constant | "0" - No (existence flag) |
| CD00002_ARI | Constant | "1" - Yes (existence flag) |
| ERR_STR_RESULT_CD | Constant | "Service component execution error occurred" error message |
| DEFAULT_RSV_APLY_YMD | Constant | "20991231" - Default reservation application date |
| PRG_TKJK_AD_TEL_NM | Constant | "Address, Phone, Name" - progress supplement text for all fields |
| PRG_TKJK_AD_TEL | Constant | "Address, Phone" - progress supplement text |
| PRG_TKJK_AD | Constant | "Address" - progress supplement text |
| PRG_TKJK_TEL | Constant | "Phone" - progress supplement text |
| PRG_TKJK_NM | Constant | "Name" - progress supplement text |
| SVC_CD_NET | Constant | "01" - Internet service code |
| SVC_CD_TEL | Constant | "02" - Phone service code |
| SVC_CD_TV | Constant | "03" - TV service code |
| SVC_CD_HOSTING | Constant | "04" - Hosting service code |
| `keisha` | Domain | Japanese term for "contractor" - the customer who holds the service contract |
| `sonota` | Domain | "etc." - abbreviation for other/additional fields |
| `joken` | Domain | "extension/expansion" - related to order extension processing |
| `info` | Domain | "information" - abbreviation for information processing |
| FTTH | Business term | Fiber To The Home - fiber-optic broadband service |
| eo Mobile | Business term | KDDI's mobile broadband Wi-Fi service brand |
| UQ-WiMAX | Business term | UQ Communications' wireless broadband service (part of KDDI group) |
| EKK | Domain | Equipment-provided service code prefix |
| ECK | Domain | Customer-related service code prefix |
| SC | Domain | Service Component - the service layer for individual CBS (business logic) invocations |
| CBS | Domain | Core Business System - the business logic layer in the K-Opticom architecture |
| Handle | Technical | Database/connection handle managed via ThreadLocal for session persistence |
| KK_T_ETC_CONFCONF | Table | Customer consent conference table |
| KK_T_ETC_CONFSVC | Table | Service contract table |
| KK_T_ETC_CONFDTL | Table | Service contract detail table |
| KK_T_ETC_EQUIPCONF | Table | Equipment-provided service contract table |
| KK_T_ETC_PROGREGIST | Table | Progress registration table |
