# Business Logic — JKKKisnUwHmdkAddCC.execKikiOptDsl() [169 LOC]

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

## 1. Role

### JKKKisnUwHmdkAddCC.execKikiOptDsl()

This method performs the core business operation of **cancelling machine option service contracts** (機器オプションサービス契約解約) in a Fujitsu telecom billing/order fulfillment system. It is the central dispatch method for the "DSL" (likely "Data Service Line" or similar) cancellation flow, iteratively processing each machine option service (equipment-attached service) returned from a prior list inquiry.

The method implements a **routing/dispatch pattern** combined with **delegation**: it queries a list of machine option service contracts via `execEKK2811B504`, then for each valid contract (excluding those already in cancellation status "910"), it performs multi-step processing. First, it fetches the service agreement details via EKK2801A010 to determine penalty applicability, then retrieves the parent service agreement via EKK0081A010 for billing date comparison, and performs the contract-level inquiry via `execEKK2811A010` to extract charge start/end dates. It then calculates and adjusts the service charge end date and start date based on whether the contract is being cancelled on the same month as its charge start (sliding logic), before finally executing the cancellation (EKK2811C140) and, if this is a registration-level cancellation (func_code = "1"), the cancellation confirmation (EKK2811C150).

Its role in the larger system is as a **shared component method** called by `execKikiDsl()` — the screen-level CBS entry point. This separation allows the same cancellation logic to be reused across different service types (FTTH DSL, etc.) by accepting the contract number via `svc_kei_no`.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["execKikiOptDsl params"])
    STEP1["Get ccMsg from param.getData"]
    STEP2["Extract unyobi from ccMsg.mskm_ymd"]
    STEP3["Call execEKK2811B504 for service contract list"]
    STEP4{"Result array empty?"}
    LOOP["For each message in result array"]
    STEP5["Get kkopSvckeiStat"]
    COND1{"Is status 910?"}
    STEP6["Skip continue to next"]
    STEP7["Get kkopSvcCd"]
    STEP8["Call EKK2801A010 service agreement inquiry"]
    STEP9["Get kkopSvckeiNo"]
    STEP10["Call EKK0081A010 parent service inquiry"]
    STEP11["Get svcSvcChrgStaYmd"]
    STEP12["Call execEKK2811A010 contract inquiry"]
    STEP13["Extract date fields"]
    STEP14["Set svcChrgEndYmd minus one day"]
    COND2{"svcChrgStartYmd not empty?"}
    COND3{"svcChrgEndYmd less than svcSvcChrgStaYmd?"}
    BLOCK3["No sliding cancel request same item"]
    COND4{"svcChrgEndYmd less than svcChrgStartYmd?"}
    BLOCK4["Slide set start dates to svcStaYmd"]
    STEP15["Prepare EKK2811C140IN cancellation data"]
    STEP16["Call EKK2811C140 service cancellation"]
    STEP17["Call setSvcUpDtm"]
    COND5{"func_code equals 1?"}
    STEP18["Prepare EKK2811C150IN confirmation data"]
    STEP19["Call EKK2811C150 cancellation confirmation"]
    STEP20["Call setSvcUpDtm"]
    END(["End loop Return"])

    START --> STEP1 --> STEP2 --> STEP3 --> STEP4
    STEP4 -->|No| LOOP --> STEP5 --> COND1
    COND1 -->|Yes| STEP6 --> LOOP
    COND1 -->|No| STEP7 --> STEP8 --> STEP9 --> STEP10 --> STEP11 --> STEP12 --> STEP13 --> STEP14 --> COND2
    COND2 -->|Yes| COND3
    COND3 -->|Yes| BLOCK3 --> STEP15
    COND3 -->|No| COND4
    COND4 -->|Yes| BLOCK4 --> STEP15
    COND4 -->|No| STEP15
    COND2 -->|No| STEP15
    STEP15 --> STEP16 --> STEP17 --> COND5
    COND5 -->|Yes| STEP18 --> STEP19 --> STEP20 --> END
    COND5 -->|No| END
    STEP6 --> LOOP
```

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `handle` | `SessionHandle` | Database session handle representing the current transactional context used to access the persistent store |
| 2 | `scCall` | `ServiceComponentRequestInvoker` | Service component invocation bridge used to call downstream CBS (Customer Billing System) service components |
| 3 | `param` | `IRequestParameterReadWrite` | Request parameter container holding input/output data map, including the cancellation date (`mskm_ymd`), function code (`func_code`), and the work-area timestamp for tracking updates |
| 4 | `dataMapKey` | `String` | Key identifier within the `param` container that references the HashMap holding cancellation-specific data (e.g., cancellation date, function code, iteration index) |
| 5 | `outList` | `CAANMsg` | Output message carrier that holds the parent service number (`kktk_svc_kei_no`) used to query the list of machine option services to cancel |
| 6 | `svc_kei_no` | `String` | Parent service contract number (サービス契約番号) — the top-level service agreement to which the machine option service lines are attached |

**External state / instance fields read:**
- None directly — all state is passed through parameters and internal method calls.

## 4. CRUD Operations / Called Services

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `execEKK2811B504` | EKK2811B504CBS | Machine Option Service Contract Table | Queries list of machine option service contracts for the given parent service key |
| R | `callSC` (EKK2801A010) | EKK2801A010CBS | Machine Option Service Agreement Table | Retrieves machine option service agreement details including penalty occurrence status |
| R | `callSC` (EKK0081A010) | EKK0081A010CBS | Service Agreement Table | Retrieves parent service agreement details including charge start date (func_code="2" = inquiry) |
| R | `execEKK2811A010` | EKK2811A010CBS | Machine Option Service Contract Table | Inquires individual machine option service contract for charge start/end dates and service start date |
| C | `callSC` (EKK2811C140) | EKK2811C140CBS | Machine Option Service Contract Cancellation Table | Cancels the machine option service contract — sets end date, charge end date, penalty info |
| C | `callSC` (EKK2811C150) | EKK2811C150CBS | Machine Option Service Contract Confirmation Table | Confirms the cancellation registration (only when func_code="1") — finalizes plan charge dates and penalty handling |
| - | `JPCDateUtil.addDay` | — | — | Utility: adds/subtracts days from a date string (used for charge end date calculation) |
| - | `setSvcUpDtm` | — | param work area | Sets the service update timestamp to the work-area data map after each SC call |
| - | `getSvcUpDtm` | — | — | Retrieves the current service update timestamp from param (used as UPD_DTM_BF for optimistic concurrency) |
| - | `getNullToStr` | — | — | Utility: converts null values to empty string for safe date field handling |
| - | `setNull` | — | — | Utility: returns null placeholder for optional fields |

## 5. Dependency Trace

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

No screen/batch entry points found within 8 hops. Direct callers found: 2 methods.
Terminal operations from this method: `setSvcUpDtm` [-], `getString` [R], `getString` [R], `getString` [R], `getString` [R], `getString` [R], `callSC` [R], `getSvcUpDtm` [R], `setSvcUpDtm` [-], `getString` [R], `getString` [R], `getString` [R], `getString` [R], `getString` [R], `callSC` [R], `getString` [R], `getString` [R], `getString` [R], `getString` [R], `getString` [R]

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | CBS: `execKikiDsl` (JKKKisnUwHmdkAddCC) | `JKKKisnUwHmdkAddCC.execKikiDsl` -> `execKikiOptDsl` | `EKK2811B504CBS [R] MachineOptionSvcContract`, `EKK2801A010CBS [R] MachineOptionSvcAgreement`, `EKK0081A010CBS [R] ServiceAgreement`, `EKK2811A010CBS [R] MachineOptionSvcContract`, `EKK2811C140CBS [C] MachineOptionSvcContractCancellation`, `EKK2811C150CBS [C] MachineOptionSvcContractConfirmation` |

## 6. Per-Branch Detail Blocks

**Block 1** — SET `(ccMsg retrieval)` (L1913)

Extract the cancellation data map from the parameter container and extract the cancellation date.

| # | Type | Code |
|---|------|------|
| 1 | SET | `ccMsg = param.getData(dataMapKey)` // Retrieve HashMap from param by dataMapKey |
| 2 | SET | `unyobi = (String)ccMsg.get("mskm_ymd")` // Cancel date (取消年月日) from cancellation data map |

**Block 2** — EXEC `(service contract list inquiry)` (L1917)

Query the list of machine option service contracts associated with the parent service key. This is a CBS call (not S-I/F call).

| # | Type | Code |
|---|------|------|
| 1 | CALL | `ekk2811b504cbsMsg = execEKK2811B504(handle, scCall, param, dataMapKey, outList.getString("kktk_svc_kei_no"))` // Machine option service contract list inquiry (機器オプションサービス契約一覧照会 - combined search) |

**Block 3** — IF `(result null or empty check)` (L1919)

Guard clause: if no machine option service contracts were returned, the entire method body is skipped (no cancellation needed).

| # | Type | Code |
|---|------|------|
| 1 | IF | `ekk2811b504cbsMsg != null && ekk2811b504cbsMsg.length > 0` // Check if machine option service contract list has records |

**Block 4** — FOR `(iterate over contract records)` (L1921)

Iterate over each machine option service contract returned from the inquiry.

| # | Type | Code |
|---|------|------|
| 1 | FOR | `for(int i = 0; i < ekk2811b504cbsMsg.length; i++)` // Process each machine option service contract |

**Block 5** — SET `(retrieve contract status)` (L1929)

Read the contract status field from the current iteration's message.

| # | Type | Code |
|---|------|------|
| 1 | SET | `kkopSvckeiStat = ekk2811b504cbsMsg[i].getString(EKK2811B504CBSMsg1List.KKOP_SVC_KEI_STAT)` // Machine option service contract status (機器オプションサービス契約ステータス) |

**Block 6** — IF `[JKKSvcConst.SVC_KEI_STAT_910 = "910"]` `(skip cancelled status)` (L1933)

Filter out records already in cancellation status (910). The condition is duplicated (same constant checked twice) — likely a defensive copy-paste or a prior refactoring artifact.

| # | Type | Code |
|---|------|------|
| 1 | IF | `JKKSvcConst.SVC_KEI_STAT_910.equals(kkopSvckeiStat) || JKKSvcConst.SVC_KEI_STAT_910.equals(kkopSvckeiStat)` // [SVC_KEI_STAT_910 = "910"] Status 910 = Cancelled/Deregistered (解約) |
| 2 | EXEC | `continue;` // Skip this record - already cancelled (解約の場合は処理を行わない) |

**Block 7** — SET `(retrieve service code)` (L1939)

Read the machine option service code from the current message record.

| # | Type | Code |
|---|------|------|
| 1 | SET | `kkopSvcCd = ekk2811b504cbsMsg[i].getString(EKK2811B504CBSMsg1List.KKOP_SVC_CD)` // Machine option service code (機器オプションサービスコード) |

**Block 8** — SET + CALL `(service agreement inquiry)` (L1944-1950)

Fetch the machine option service agreement details to determine penalty applicability. This calls EKK2801A010 with func_code "1" (inquiry mode).

| # | Type | Code |
|---|------|------|
| 1 | SET | `EKK2801A010IN = {TEMPLATEID, TEMPLATE_ID_EKK2801A010, FUNC_CODE="1", KEY_KKOP_SVC_CD, kkopSvcCd}` // Build input: func_code="1" = inquiry (照会) |
| 2 | CALL | `ekk2801a010Msg_out = callSC(handle, scCall, param, dataMapKey, ekk2801a010IN).getCAANMsgList(...)[0]` // S-I/F call to EKK2801A010 - machine option service agreement inquiry (機器オプションサービス照会) |
| 3 | SET | `KKOP_SVC_KEI_NO` = `ekk2811b504cbsMsg[i].getString(...)` // Machine option service contract number (機器オプションサービス契約番号) |

**Block 9** — SET + CALL `(parent service agreement inquiry — v8.02.00 addition)` (L1953-1968)

Fetch the parent service agreement to obtain the service charge start date for sliding date comparison. This is a v8.02.00 addition (v8.02.00 追加開始). EKK0081A010 is called with func_code "2" (detailed inquiry mode).

| # | Type | Code |
|---|------|------|
| 1 | SET | `EKK0081A010IN = {TEMPLATEID, TEMPLATE_ID_EKK0081A010, FUNC_CODE="2", KEY_SVC_KEI_NO, svc_kei_no, KEY_GENE_ADD_DTM="", KEY_RSV_APLY_YMD, unyobi}` // Build input: func_code="2" = detailed inquiry (詳細照会) |
| 2 | CALL | `ekk0081a010Msg_out = callSC(handle, scCall, param, dataMapKey, ekk0081a010IN).getCAANMsgList(...)[0]` // S-I/F call to EKK0081A010 - service agreement inquiry (サービス契約照会) |
| 3 | SET | `svcSvcChrgStaYmd = ekk0081a010Msg_out.getString(EKK0081A010CBSMsg1List.SVC_CHRG_STAYMD)` // Service charge start date (サービス課金開始日) |

**Block 10** — CALL + SET `(contract inquiry and date extraction)` (L1971-1983)

Call the contract-level inquiry and extract all date-related fields.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `ekk2811a010cbsMsg = execEKK2811A010(handle, scCall, param, dataMapKey, ekk2811b504cbsMsg[i])` // Machine option service contract inquiry (機器オプションサービス契約照会) |
| 2 | SET | `svcChrgStartYmd = getNullToStr(...getString(EKK2811A010CBSMsg1List.SVC_CHRG_STAYMD))` // Service charge start date (サービス課金開始年月日) |
| 3 | SET | `svcChrgEndYmd = getNullToStr(...getString(EKK2811A010CBSMsg1List.SVC_CHRG_ENDYMD))` // Service charge end date (サービス課金終了年月日) |
| 4 | SET | `planChrgStartYmd = getNullToStr(...getString(EKK2811A010CBSMsg1List.PLAN_CHRG_STAYMD))` // Plan charge start date (プラン課金開始年月日) [v8.02.00 addition] |
| 5 | SET | `svcStaYmd = getNullToStr(...getString(EKK2811A010CBSMsg1List.SVC_STAYMD))` // Service start date (サービス開始日) [v8.02.00 addition] |

**Block 11** — SET `(charge end date calculation)` (L1998)

Calculate the service charge end date as one day before the cancellation date (取消日の前日を設定).

| # | Type | Code |
|---|------|------|
| 1 | SET | `svcChrgEndYmd = JPCDateUtil.addDay(unyobi, -1)` // Service charge end = cancellation date minus 1 day |

**Block 12** — IF `(charge start date not empty check)` (L2000)

Determine whether sliding of charge start dates is needed by comparing dates.

| # | Type | Code |
|---|------|------|
| 1 | IF | `!" ".equals(svcChrgStartYmd)` // Process only if service charge start date is not empty |

**Block 13** — IF `[svcChrgEndYmd < svcSvcChrgStaYmd]` `(no sliding case)` (L2004)

If the calculated charge end date is before the parent service charge start date, this is a same-item cancel request (スライドしない - no sliding). The dates remain unchanged.

| # | Type | Code |
|---|------|------|
| 1 | IF | `0 > svcChrgEndYmd.compareTo(svcSvcChrgStaYmd)` // Charge end date < parent service charge start date |
| 2 | COMMENT | // スライドしない（キャンセル依頼の同一項目）- No sliding: cancel request for same item |

**Block 14** — IF `[svcChrgEndYmd < svcChrgStartYmd]` `(sliding case)` (L2010)

If the calculated charge end date is before the current service charge start date, sliding is needed (スライドする). The charge start dates are adjusted to the service start date.

| # | Type | Code |
|---|------|------|
| 1 | IF | `0 > svcChrgEndYmd.compareTo(svcChrgStartYmd)` // Charge end date < machine option charge start date |
| 2 | SET | `svcChrgStartYmd = svcStaYmd` // Set service charge start date to service start date |
| 3 | SET | `planChrgStartYmd = svcStaYmd` // Set plan charge start date to service start date |

**Block 15** — SET `(prepare cancellation input data)` (L2017-2031)

Build the input object array for the cancellation CBS (EKK2811C140). This includes the cancellation date, charge end date, penalty occurrence status from EKK2801A010, function code, iteration index, and the previous update timestamp for optimistic concurrency control.

| # | Type | Code |
|---|------|------|
| 1 | SET | `EKK2811C140IN = {TEMPLATEID, TEMPLATE_ID_EKK2811C140, FUNC_CODE, ccMsg.get("func_code"), KKOP_SVC_KEI_NO, kkopSvckeiNo, MSKM_DTL_NO, ccMsg.get("mskmDtlNo"), RSV_TSTA_KIBO_YMD, setNull(), SVC_ENDYMD, unyobi, SVC_CHRG_ENDYMD, svcChrgEndYmd, SVC_DLRE_CD, setNull(), SVC_DLRE_MEMO, setNull(), PNLTY_HASSEI_CD, ekk2801a010Msg_out.getString(PNLTY_HASSEI_UM), IDO_DIV, ccMsg.get("ido_div"), UPD_DTM_BF, ekk2811a010cbsMsg.getString(LAST_UPD_DTM), SVC_KEI_NO, svc_kei_no}` // Build EKK2811C140 cancellation input |

**Block 16** — CALL + SET `(execute cancellation)` (L2034-2037)

Execute the machine option service contract cancellation and update the timestamp.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `ekk2811c140Msg_out = callSC(handle, scCall, param, dataMapKey, ekk2811c140IN)` // S-I/F call to EKK2811C140 - machine option service contract cancellation (機器オプションサービス契約解約) |
| 2 | CALL | `setSvcUpDtm(param, ekk2811c140Msg_out.getString(EKK2811C140CBSMsg.UPD_DTM))` // Set update timestamp to work area (更新タイムスタンプをワーク領域に設定) |

**Block 17** — IF `[func_code = "1"]` `(cancellation confirmation)` (L2039)

Conditional confirmation: only when func_code equals "1" (registration/execution mode, 登録のみ実施), the cancellation confirmation step is executed. This ensures cancellations are confirmed in the normal registration flow but not in inquiry-only flows.

| # | Type | Code |
|---|------|------|
| 1 | IF | `"1".equals(ccMsg.get("func_code"))` // Only for registration (本登録時のみ実施) |

**Block 18** — SET `(prepare confirmation input data)` (L2042-2058)

Build the input object array for the cancellation confirmation CBS (EKK2811C150). This includes the service/plan charge end dates, service/delivery reasons, DSL charge flag, and the previous update timestamp.

| # | Type | Code |
|---|------|------|
| 1 | SET | `EKK2811C150IN = {TEMPLATEID, TEMPLATE_ID_EKK2811C150, FUNC_CODE, ccMsg.get("func_code"), KKOP_SVC_KEI_NO, kkopSvckeiNo, SVC_ENDYMD, unyobi, SVC_CHRG_ENDYMD, svcChrgEndYmd, SVC_CHRG_STAYMD, svcChrgStartYmd, PLAN_CHRG_STAYMD, planChrgStartYmd, PLAN_ENDYMD, unyobi, PLAN_CHRG_ENDYMD, svcChrgEndYmd, SVC_DLRE_CD="01", SVC_DLRE_MEMO="", DSL_JI_CHRG="1", UPD_DTM_BF, getSvcUpDtm(param)}` // Build EKK2811C150 confirmation input. PLAN_CHRG_STAYMD uses planChrgStartYmd (v8.02.00 change - previously used svcChrgStartYmd) |

**Block 19** — CALL + SET `(execute confirmation)` (L2061-2065)

Execute the cancellation confirmation and update the timestamp. Note: the update timestamp is read from `EKK0341C350CBSMsg.UPD_DTM` (possibly a template ID reference).

| # | Type | Code |
|---|------|------|
| 1 | CALL | `ekk2811c150Msg_out = callSC(handle, scCall, param, dataMapKey, ekk2811c150IN)` // S-I/F call to EKK2811C150 - cancellation confirmation (機器オプションサービス契約解約確定) |
| 2 | CALL | `setSvcUpDtm(param, ekk2811c150Msg_out.getString(EKK0341C350CBSMsg.UPD_DTM))` // Set update timestamp to work area |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `kkop_svc_kei_stat` | Field | Machine option service contract status (機器オプションサービス契約ステータス) — tracks the lifecycle state of a service contract; "910" indicates cancelled/deregistered (解約) |
| `kkop_svc_cd` | Field | Machine option service code (機器オプションサービスコード) — identifies the type of equipment-attached service |
| `kkop_svc_kei_no` | Field | Machine option service contract number (機器オプションサービス契約番号) — unique identifier for a machine option service contract line |
| `kkop_svc_kei_stat_nm` | Field | Machine option service contract status name (機器オプションサービス契約ステータス名称) — human-readable description of the status |
| `svc_kei_no` | Field | Service contract number (サービス契約番号) — the top-level parent service agreement to which option services are attached |
| `kktk_svc_kei_no` | Field | Key parent service contract number used as search criteria for machine option service list inquiry |
| `mskm_ymd` | Field | Cancellation date (取消年月日) — the date on which the cancellation is being processed, in YYYYMMDD format |
| `mskmDtlNo` | Field | Machine option service contract detail number (機器オプションサービス契約詳細番号) — iteration sequence number within the cancellation batch |
| `ido_div` | Field | Migration division (異動区分) — indicates whether this is a standard cancellation, migration, or other transfer type |
| `func_code` | Field | Function code (機能コード) — "1" = registration/execution (登録), "2" = inquiry/detailed inquiry (照会) |
| `svc_chrg_staymd` | Field | Service charge start date (サービス課金開始日) — the date billing begins for the service |
| `svc_chrg_endymd` | Field | Service charge end date (サービス課金終了年月日) — the date billing ends for the service |
| `plan_chrg_staymd` | Field | Plan charge start date (プラン課金開始日) — the date billing begins for the plan component of the service |
| `svc_staYmd` | Field | Service start date (サービス開始日) — the date the service was activated/started |
| `unyobi` | Field | Cancellation date (取消日) — derived from `mskm_ymd`, used as the effective cancellation date for all CBS calls |
| `updt_dtm_bf` | Field | Update timestamp before (更新タイムスタンプ前) — the previous update timestamp used for optimistic concurrency control |
| `pnlty_hassei_um` | Field | Penalty occurrence status (ペナルティ発生状況) — indicates whether penalties apply to this cancellation |
| `SVC_KEI_STAT_910` | Constant | Status value "910" — indicates a cancelled/deregistered service contract (解約済) |
| EKK2801A010 | CBS | Machine option service inquiry (機器オプションサービス照会) — retrieves agreement-level details including penalty info |
| EKK2811A010 | CBS | Machine option service contract inquiry (機器オプションサービス契約照会) — retrieves contract-level details including charge dates |
| EKK2811B504 | CBS | Machine option service contract list inquiry — combined search (機器オプションサービス契約一覧照会 - 複合検索) |
| EKK0081A010 | CBS | Service agreement inquiry (サービス契約照会) — retrieves parent service agreement details |
| EKK2811C140 | CBS | Machine option service contract cancellation (機器オプションサービス契約解約) — executes the cancellation transaction |
| EKK2811C150 | CBS | Machine option service contract cancellation confirmation (機器オプションサービス契約解約確定) — confirms and finalizes the cancellation |
| DSL | Business term | Data Service Line — broadband internet service type (FTTH/fiber) |
| S-I/F | Abbreviation | System Interface — the interface between business components and underlying CBS (Customer Billing System) service components |
| CC | Abbreviation | Common Component — shared business logic component in the Fujitsu Futurity framework |
| CBS | Abbreviation | Customer Billing System — the backend billing/order fulfillment system |
| SC | Abbreviation | Service Component — the modular service layer component that handles specific business operations |
| FTTH | Business term | Fiber To The Home — fiber-optic broadband internet service |
| Sliding (スライド) | Business concept | The practice of adjusting charge start dates when a contract is cancelled mid-month — the start date slides to the service activation date rather than the original charge start date |
| KK_T_KKOP_SVC_KEI | Entity | Machine Option Service Contract Table — stores machine option service contract records |
| KK_T_SVC_KEI | Entity | Service Contract Table — stores top-level service contract records |
