# Business Logic — JKKPauseChgRsvClCC.pauseChgTranOn() [165 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `com.fujitsu.futurity.bp.custom.common.JKKPauseChgRsvClCC` |
| Layer | CC / Common Component (shared business logic class within the custom billing platform) |
| Module | `common` (Package: `com.fujitsu.futurity.bp.custom.common`) |

## 1. Role

### JKKPauseChgRsvClCC.pauseChgTranOn()

This method implements the **online service contract pause change** business operation (`休止変更処理（オンライン）`). It is the central routing and dispatch hub for pausing a subscriber's service contract on a specified future, same-day, or past effective date. Upon receiving a parameter map containing the desired pause date (`svc_pause_ymd`), the optional release date (`svc_pause_rls_ymd`), and the current operation date (`tmpOpeDate`), the method classifies the scenario along two axes: whether the pause date is in the future, today, or the past; and whether the release date is also in the future, today, or already passed. Based on this classification, it delegates to specific processing branches: it calls `callEKK0081C080` to invoke the EKK0081C080 SC for a service contract pause change request; it calls `executePauseRls` to process a same-day pause release; and for same-day pause with a future release, it performs Netflix premium opt-out cancellation (`dsleOpSvcKeiNetflix`), registers smart balance discrepancy data (`executeAddSmtvlIdoInf`), and triggers provider-specific integration such as Netflix contract discrepancy registration (`executeNetflixTajgsKeiIdInf`) for Netflix services (svc_cd = "01") or Skype key info pause (`executeSptvKeyInfPause`) for TV services (svc_cd = "03"). The method implements a **routing/dispatch pattern** with **delegation** to specialized helper methods, acting as a shared component invoked by the screen-level control method `pauseChgRsvClCtrlTran()`, which in turn is called from the screen entry point KKSV0004.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["pauseChgTranOn(params)"])

    START --> EXTRACT["Extract Parameters from param/inMap/resultHash"]
    EXTRACT --> VALIDATION["Validate svc_pause_ymd and svc_pause_rls_ymd not null"]

    VALIDATION --> BR1{"svc_pause_ymd > tmpOpeDate<br/>(Future pause)"}

    BR1 -->|Yes| BR1_SUB{"svc_pause_rls_ymd > tmpOpeDate<br/>(Future release)"}
    BR1_SUB -->|Yes| BR1_CALL["callEKK0081C080(handle, param, fixedText, tmpUpdDtm, tmpMskmDtlNo)<br/>Service contract pause change SC call"]
    BR1_CALL --> BR1_CHECK{"isCheckMode"}
    BR1_CHECK -->|false| BR1_PROGRESS["resultHash.put result<br/>makeProgress(handle, param, fixedText, tmpMskmDtlNo, resultHash)"]
    BR1_CHECK -->|true| BR1_END(["Return"])
    BR1_PROGRESS --> BR1_END
    BR1_SUB -->|No| BR1_ERROR["Throw SCCallException INVALID_RETURN_MESSAGE"]
    BR1_ERROR --> BR1_END

    BR1 -->|No| BR2{"svc_pause_ymd == tmpOpeDate<br/>(Same-day pause)"}

    BR2 -->|Yes| BR2_SUB1{"svc_pause_rls_ymd > tmpOpeDate<br/>AND !isCheckMode"}
    BR2_SUB1 -->|Yes| BR2_NETFLIX["dsleOpSvcKeiNetflix(handle, param, fixedText, resultHash, tmpUpdDtm, tmpMskmDtlNo)<br/>Netflix premium opt-out cancellation"]
    BR2_NETFLIX --> BR2_UPDATE{"opLastUpdDtm not null/empty"}
    BR2_UPDATE -->|Yes| BR2_SET_DT["tmpUpdDtm = opLastUpdDtm"]
    BR2_SET_DT --> BR2_CALL1["callEKK0081C080(handle, param, fixedText, tmpUpdDtm, tmpMskmDtlNo)<br/>Service contract pause change SC call"]
    BR2_CALL1 --> BR2_PUT["resultHash.put result"]
    BR2_PUT --> BR2_PROGRESS["makeProgress(handle, param, fixedText, tmpMskmDtlNo, resultHash)<br/>returns rsltEKK1091D010"]
    BR2_PROGRESS --> BR2_SMART["executeAddSmtvlIdoInf(handle, param, inMap, fixedText, rsltEKK1091D010)<br/>Smart balance discrepancy registration"]
    BR2_SMART --> BR2_SVC_CHECK{"svc_cd == 01<br/>(Netflix)"}
    BR2_SVC_CHECK -->|Yes| BR2_NETFLIX_ERR["executeNetflixTajgsKeiIdInf(handle, param, inMap, pcrs_cd)<br/>Netflix provider contract discrepancy"]
    BR2_NETFLIX_ERR --> BR2_SPTV_CHECK{"svc_cd == 03<br/>(TV)"}
    BR2_SVC_CHECK -->|No| BR2_SPTV_CHECK
    BR2_SPTV_CHECK -->|Yes| BR2_SPTV["executeSptvKeyInfPause(handle, param, inMap, svc_pause_ymd)<br/>Skype key info pause"]
    BR2_SPTV --> BR2_END(["Return"])
    BR2_SVC_CHECK -->|No| BR2_END
    BR2_UPDATE -->|No| BR2_CALL1

    BR2_SUB1 -->|No| BR2_SUB2{"svc_pause_rls_ymd == tmpOpeDate<br/>(Same-day release)"}
    BR2_SUB2 -->|Yes| BR2_RELEASE["executePauseRls(handle, param, fixedText, resultHash, tmpUpdDtm, tmpMskmDtlNo, svc_cd)<br/>Pause release processing"]
    BR2_SUB2 -->|No| BR2_ERROR2["Throw SCCallException INVALID_RETURN_MESSAGE"]
    BR2_RELEASE --> BR2_END
    BR2_ERROR2 --> BR2_END

    BR2 -->|No| BR3{"svc_pause_ymd < tmpOpeDate<br/>(Past pause)"}

    BR3 -->|Yes| BR3_SUB1{"svc_pause_rls_ymd > tmpOpeDate<br/>(Future release)"}
    BR3_SUB1 -->|Yes| BR3_CALL["callEKK0081C080(handle, param, fixedText, tmpUpdDtm, tmpMskmDtlNo)<br/>Service contract pause change SC call"]
    BR3_CALL --> BR3_PUT2["resultHash.put result"]
    BR3_PUT2 --> BR3_PROGRESS["makeProgress(handle, param, fixedText, tmpMskmDtlNo, resultHash)"]
    BR3_PROGRESS --> BR3_END(["Return"])
    BR3_SUB1 -->|No| BR3_SUB2{"svc_pause_rls_ymd == tmpOpeDate<br/>(Same-day release)"}
    BR3_SUB2 -->|Yes| BR3_RELEASE["executePauseRls(handle, param, fixedText, resultHash, tmpUpdDtm, tmpMskmDtlNo, svc_cd)<br/>Pause release processing"]
    BR3_SUB2 -->|No| BR3_ERROR["Throw SCCallException INVALID_RETURN_MESSAGE"]
    BR3_RELEASE --> BR3_END
    BR3_ERROR --> BR3_END
    BR3 -->|No| BR3_END
```

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `handle` | `SessionHandle` | The session handle carrying the session manager and database connection context. Used for all downstream SC calls and progress registration. Provides the transactional boundary for the operation. |
| 2 | `param` | `IRequestParameterReadWrite` | The request parameter object containing the model group and control map. Used to retrieve the target map (`PAUSE_RECEPT_MAP`) which holds the pause date, release date, and other pause-related fields submitted from the screen. |
| 3 | `fixedText` | `String` | An arbitrary user-provided string (e.g., operator comment or batch identifier). Passed through to downstream methods for audit trail and logging purposes. |
| 4 | `resultHash` | `HashMap<String, Object>` | The result hash shared across the call chain. It contains the operation date (`OPEDATE_KEY`), the SC response from the preceding query `EKK0081A010` (service contract inquiry, keyed by `RESULT_KEY_EKK0081A010`), the response from the pause change SC `EKK0081C080` (keyed by `RESULT_HASH_KEY_EKK0081C080`), and the progress registration result. Modified in-place by the method. |

**Fields/State Read by this Method:**

| Field | Source | Business Description |
|-------|--------|---------------------|
| `isCheckMode` | Instance field of `JKKPauseChgRsvClCC` | Flag indicating whether this is a check-mode (dry-run) invocation. When true, progress registration and side effects are skipped, but the core SC call still executes. |

**Constants Referenced (resolved):**

| Constant | Value | Source Location |
|----------|-------|-----------------|
| `PAUSE_RECEPT_MAP` | `"pause_recept_map"` | `JKKPauseChgRsvClConstCC.java:112` |
| `SVC_PAUSE_YMD` | `"svc_pause_ymd"` | `JKKPauseChgRsvClConstCC.java:31` |
| `SVC_PAUSE_RLS_YMD` | `"svc_pause_rls_ymd"` | `JKKPauseChgRsvClConstCC.java:38` |

**Implicit Constants from resultHash keys and message classes (used directly as string literals or resolved from message constants):**

| Constant | Value | Source Location |
|----------|-------|-----------------|
| `OPEDATE_KEY` | `"opedate"` | Used in resultHash.get() to retrieve the current operation date |
| `RESULT_KEY_EKK0081A010` | `"EKK0081A010"` | Key to retrieve service contract inquiry response from resultHash |
| `RESULT_HASH_KEY_EKK0081C080` | `"EKK0081C080"` | Key to store pause change response in resultHash |
| `LAST_UPD_DTM` | `"last_upd_dtm"` | `EKK0081A010CBSMsg1List` | Retrieve last update datetime from inquiry result |
| `PCRS_CD` | `"pcrs_cd"` | `EKK0081A010CBSMsg1List` | PCRS code (payment contract service code), used for Netflix integration |
| `SVC_CD` | `"svc_cd"` | `EKK0081A010CBSMsg1List` | Service code — "01" = Netflix, "03" = TV (Skype) |
| `MSKM_DTL_NO` | `"mskm_dtl_no"` | `EKK0021C060CBSMsg` | Application detail number from submission registration result |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `EKK0081A010` (inquiry) | `EKK0081A010` | `KK_T_SVC_KEI_YAKU` (Service contract header) | Calls `getString` on `msgEKK0081A010` — reads last update datetime, PCRS code, and service code from the pre-cached service contract inquiry response. No DB call here; data was fetched in a prior step. |
| R | `EKK0021C060` (inquiry) | `EKK0021C060` | `KK_T_MSKM_DTL` (Application detail) | Calls `getString` on `msgEKK0021C060` — reads the application detail number (`mskm_dtl_no`). Data was pre-cached in a prior step; used as a correlation key for downstream processing. |
| C | `callEKK0081C080` | `EKK0081C080SC` | `KK_T_SVC_KEI_YAKU` (Service contract header) | Calls the EKK0081C080 SC to register a service contract pause change request. This is the core create operation that queues the pause request for processing. Invoked in 3 out of 5 processing branches (future pause, same-day pause with future release, past pause with future release). |
| C | `executePauseRls` | `EKK0081C090SC` (inferred) | `KK_T_SVC_KEI_YAKU` (Service contract header) | Calls `executePauseRls(handle, param, fixedText, resultHash, tmpUpdDtm, tmpMskmDtlNo, svc_cd)` to register a pause release request. The ANK-4592-00-00 enhancement added `svc_cd` as a 7th parameter for TV service differentiation. Invoked when pause release date equals operation date (same-day release). |
| - | `dsleOpSvcKeiNetflix` | `DSLE_OP_SVC_KEI_NETFLIX` | Netflix premium opt-out table (e.g., `KK_T_NETFLIS_OP_OPT`) | Calls `dsleOpSvcKeiNetflix(handle, param, fixedText, resultHash, tmpUpdDtm, tmpMskmDtlNo)` to process Netflix premium opt-out cancellation. Only executed in the same-day pause branch with future release and !isCheckMode. Returns an updated last update datetime. |
| C | `executeAddSmtvlIdoInf` | `EKK1091D010SC` | `KK_T_SMART_BALANCE_DISCREPANCY` (Smart balance discrepancy) | Calls `executeAddSmtvlIdoInf(handle, param, inMap, fixedText, rsltEKK1091D010)` to register smart balance discrepancy information. The KT1-2013-0000795 fix ensures discrepancy data from pause start is properly reflected in the smart balance opt-out linkage. |
| C | `executeNetflixTajgsKeiIdInf` | `NetflixTajgsKeiIdInfSC` (inferred) | `KK_T_NETFLIS_TAJGS_IDO` (Netflix provider contract discrepancy) | Calls `executeNetflixTajgsKeiIdInf(handle, param, inMap, pcrs_cd)` to register Netflix provider contract discrepancy data. Only executed when `svc_cd == "01"` (Netflix service). |
| C | `executeSptvKeyInfPause` | `SptvKeyInfPauseSC` (inferred) | `KK_T_SPTV_KEY_INF` (Skype key information) | Calls `executeSptvKeyInfPause(handle, param, inMap, svc_pause_ymd)` to pause Skype key information. Only executed when `svc_cd == "03"` (TV service). |
| R | `makeProgress` | `ProgressRegistSC` (inferred) | `KK_T_PROGRESS` (Progress tracking) | Calls `makeProgress(handle, param, fixedText, tmpMskmDtlNo, resultHash)` to register progress for the pause change transaction. Returns the result map (`rsltEKK1091D010`) containing progress-related data. Used as a data source for smart balance discrepancy registration. |
| R | `getWorkCAANMsg` | Internal helper | - | Reads and converts the result map from `callEKK0081C080` into a `CAANMsg` object for storage in `resultHash`. |
| - | `isNull` / `isNullEmpty` | Utility | - | Null/empty checks on service pause dates, CAANMsg objects, and update datetime strings. |

**CRUD Summary:**

| CRUD | Entity / DB Table | Business Description |
|------|-------------------|---------------------|
| R | `KK_T_SVC_KEI_YAKU` (Service contract header) | Reads service contract data (last update datetime, PCRS code, service code) from pre-cached inquiry result. |
| R | `KK_T_MSKM_DTL` (Application detail) | Reads application detail number from pre-cached inquiry result. |
| C | `KK_T_SVC_KEI_YAKU` | Registers a service contract pause change via EKK0081C080 SC. |
| C | `KK_T_SVC_KEI_YAKU` | Registers a pause release via `executePauseRls`. |
| C | Netflix opt-out / premium cancellation table | Processes Netflix premium opt-out cancellation via `dsleOpSvcKeiNetflix`. |
| C | Smart balance discrepancy table | Registers smart balance discrepancy info via `executeAddSmtvlIdoInf`. |
| C | Netflix provider contract discrepancy table | Registers Netflix-specific contract discrepancy via `executeNetflixTajgsKeiIdInf`. |
| C | Skype key information table | Pauses Skype key info via `executeSptvKeyInfPause`. |
| R/C | `KK_T_PROGRESS` | Registers and reads progress tracking data via `makeProgress`. |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | CBS: `pauseChgRsvClCtrlTran()` | `KKSV0004 (Screen)` -> `pauseChgRsvClCtrlTran()` -> `pauseChgTranOn()` | `callEKK0081C080 [C] KK_T_SVC_KEI_YAKU`, `executePauseRls [C] KK_T_SVC_KEI_YAKU`, `dsleOpSvcKeiNetflix [-] Netflix opt-out`, `makeProgress [R/C] KK_T_PROGRESS`, `getWorkCAANMsg [R] -`, `executeAddSmtvlIdoInf [C] Smart balance discrepancy`, `executeNetflixTajgsKeiIdInf [C] Netflix provider discrepancy`, `executeSptvKeyInfPause [C] Skype key info` |

**Notes:**
- The direct caller is `JKKPauseChgRsvClCC.pauseChgRsvClCtrlTran()`, which serves as the control flow method within the same class.
- `pauseChgRsvClCtrlTran()` is called from screen **KKSV0004** (Service Contract Pause Change Screen), as indicated by the KKSV naming convention.
- No batch entry points were found; this method is exclusively invoked from the online screen path.

## 6. Per-Branch Detail Blocks

**Block 1** — [SET] Extract request parameters (L585)

> Retrieve the target map and inner map from the request parameter object, then extract the pause date, release date, and operation date. Also fetch the service contract inquiry response to obtain the last update datetime, PCRS code, and service code.

| # | Type | Code |
|---|------|------|
| 1 | SET | `trgtMap = (HashMap)param.getData(fixedText)` | Retrieve the top-level target map using fixedText as key |
| 2 | SET | `inMap = (HashMap)trgtMap.get(PAUSE_RECEPT_MAP)` | `PAUSE_RECEPT_MAP = "pause_recept_map"` [-> PAUSE_RECEPT_MAP="pause_recept_map" (JKKPauseChgRsvClConstCC.java:112)] |
| 3 | SET | `svc_pause_ymd = (String)inMap.get(SVC_PAUSE_YMD)` | [-> SVC_PAUSE_YMD="svc_pause_ymd" (JKKPauseChgRsvClConstCC.java:31)] Service pause date |
| 4 | SET | `svc_pause_rls_ymd = (String)inMap.get(SVC_PAUSE_RLS_YMD)` | [-> SVC_PAUSE_RLS_YMD="svc_pause_rls_ymd" (JKKPauseChgRsvClConstCC.java:38)] Service pause release date |
| 5 | SET | `tmpOpeDate = (String)resultHash.get(OPEDATE_KEY)` | Operation date from result hash |
| 6 | SET | `msgEKK0081A010 = (CAANMsg)resultHash.get("EKK0081A010")` | Pre-cached service contract inquiry response |
| 7 | SET | `tmpUpdDtm = msgEKK0081A010.getString(LAST_UPD_DTM)` | [-> LAST_UPD_DTM="last_upd_dtm" (EKK0081A010CBSMsg1List)] Last update datetime from inquiry |
| 8 | SET | `pcrs_cd = msgEKK0081A010.getString(PCRS_CD)` | [-> PCRS_CD="pcrs_cd" (EKK0081A010CBSMsg1List)] ANK-3987-00-00: PCRS code for Netflix integration |
| 9 | SET | `svc_cd = msgEKK0081A010.getString(SVC_CD)` | [-> SVC_CD="svc_cd" (EKK0081A010CBSMsg1List)] Service code (01=Netflix, 03=TV) |
| 10 | SET | `tmpMskmDtlNo = (JKKBpCommon.isNull(msgEKK0021C060) ? null : msgEKK0021C060.getString(MSKM_DTL_NO))` | [-> MSKM_DTL_NO="mskm_dtl_no" (EKK0021C060CBSMsg)] Application detail number, null-safe retrieval |

---

**Block 2** — [IF] Null validation on pause dates (L604)

> If either the pause date or release date is null, the request is invalid. Throws an exception to abort processing. This is a hard validation gate.

| # | Type | Code |
|---|------|------|
| 1 | IF | `isNull(svc_pause_ymd) || isNull(svc_pause_rls_ymd)` | Both must be non-null |
| 2 | SET (inside IF) | `errMsg = "INVALID_RETURN_MESSAGE"` | |
| 3 | EXEC (inside IF) | `throw new SCCallException(errMsg, "0", -1)` | Abort with business exception |

---

**Block 3** — [IF] svc_pause_ymd > tmpOpeDate — Future pause (L611)

> The pause date is set for a future date. This represents a scheduled pause.

| # | Type | Code |
|---|------|------|
| 1 | IF | `svc_pause_ymd.compareTo(tmpOpeDate) > 0` | Pause date is after operation date (future) |

**Block 3.1** — [IF] svc_pause_rls_ymd > tmpOpeDate — Future release (L617)

> Future pause with a future release date — this is a pause period that starts and ends in the future.

| # | Type | Code |
|---|------|------|
| 1 | IF | `svc_pause_rls_ymd.compareTo(tmpOpeDate) > 0` | Release date is after operation date |
| 2 | CALL | `rsltEKK0081C080 = callEKK0081C080(handle, param, fixedText, tmpUpdDtm, tmpMskmDtlNo)` | [EKK0081C080SC] Register service contract pause change request |
| 3 | IF | `!isCheckMode` | Only register progress if not in check mode |

**Block 3.1.1** — [IF-true] Progress registration (L623)

| # | Type | Code |
|---|------|------|
| 1 | SET | `resultHash.put(RESULT_HASH_KEY_EKK0081C080, getWorkCAANMsg(rsltEKK0081C080))` | [-> RESULT_HASH_KEY_EKK0081C080="EKK0081C080"] Store pause change result as CAANMsg |
| 2 | EXEC | `makeProgress(handle, param, fixedText, tmpMskmDtlNo, resultHash)` | Register progress for the transaction |

**Block 3.2** — [IF-false of 3.1] svc_pause_rls_ymd <= tmpOpeDate — Release in the past or today (L630)

> A future pause date paired with a release date that is already past or today is invalid. The release must be after the pause for a valid pause period.

| # | Type | Code |
|---|------|------|
| 1 | SET | `errMsg = "INVALID_RETURN_MESSAGE"` | |
| 2 | EXEC | `throw new SCCallException(errMsg, "0", -1)` | Abort with business exception |

---

**Block 4** — [ELSE-IF] svc_pause_ymd == tmpOpeDate — Same-day pause (L637)

> The pause is effective on the operation date. This is the most complex branch because it supports pause with release on the same day, and includes Netflix/TV service-specific integration.

| # | Type | Code |
|---|------|------|
| 1 | IF | `svc_pause_ymd.compareTo(tmpOpeDate) == 0` | Pause date equals operation date |

**Block 4.1** — [IF] svc_pause_rls_ymd > tmpOpeDate AND !isCheckMode — Same-day pause, future release, non-check mode (L645)

> Same-day pause with a future release date. This is the primary path for same-day pause processing. Includes Netflix premium opt-out handling (ANK-3987-00-00) and service-specific integrations (ANK-3987-00-00, KT1-2013-0000795, ANK-4592-00-00).

| # | Type | Code |
|---|------|------|
| 1 | IF | `svc_pause_rls_ymd.compareTo(tmpOpeDate) > 0 && !isCheckMode` | Both conditions must be true |
| 2 | EXEC | `opLastUpdDtm = dsleOpSvcKeiNetflix(handle, param, fixedText, resultHash, tmpUpdDtm, tmpMskmDtlNo)` | [ANK-3987-00-00] Netflix premium opt-out cancellation. Only executed outside check mode. |
| 3 | IF | `!JKKStringUtil.isNullEmpty(opLastUpdDtm)` | Netflix opt-out may update the last update datetime |

**Block 4.1.1** — [IF-true] Update datetime from Netflix (L659)

| # | Type | Code |
|---|------|------|
| 1 | SET | `tmpUpdDtm = opLastUpdDtm` | Use Netflix opt-out's last update datetime |

**Block 4.1.2** — [CALL] Service contract pause change (L664)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `rsltEKK0081C080 = callEKK0081C080(handle, param, fixedText, tmpUpdDtm, tmpMskmDtlNo)` | [EKK0081C080SC] Register pause change. Uses updated `tmpUpdDtm` if Netflix opt-out ran. |

**Block 4.1.3** — [SET] Store result and register progress (L666)

| # | Type | Code |
|---|------|------|
| 1 | SET | `resultHash.put(RESULT_HASH_KEY_EKK0081C080, getWorkCAANMsg(rsltEKK0081C080))` | Store pause change result |
| 2 | CALL | `rsltEKK1091D010 = makeProgress(handle, param, fixedText, tmpMskmDtlNo, resultHash)` | Register progress; returns result map for smart balance discrepancy |

**Block 4.1.4** — [CALL] Smart balance discrepancy registration (L671)

> KT1-2013-0000795: Ensures discrepancy data from pause start is reflected in smart balance opt-out linkage.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `executeAddSmtvlIdoInf(handle, param, inMap, fixedText, rsltEKK1091D010)` | Register smart balance discrepancy info |

**Block 4.1.5** — [IF] Netflix service (svc_cd == "01") (L675)

> ANK-3987-00-00: Netflix-specific contract discrepancy registration.

| # | Type | Code |
|---|------|------|
| 1 | IF | `"01".equals(svc_cd)` | [-> SVC_CD_NETFLIS="01"] Netflix service |
| 2 | CALL | `executeNetflixTajgsKeiIdInf(handle, param, inMap, pcrs_cd)` | Register Netflix provider contract discrepancy with PCRS code |

**Block 4.1.6** — [IF] TV service (svc_cd == "03") (L682)

> ANK-4592-00-00: TV-specific Skype key information pause.

| # | Type | Code |
|---|------|------|
| 1 | IF | `"03".equals(svc_cd)` | [-> SVC_CD_TV="03"] TV service |
| 2 | CALL | `executeSptvKeyInfPause(handle, param, inMap, svc_pause_ymd)` | Pause Skype key information with the pause date |

**Block 4.2** — [ELSE-IF] svc_pause_rls_ymd == tmpOpeDate — Same-day release (L689)

> The pause release is effective on the operation date. This triggers the pause release flow.

| # | Type | Code |
|---|------|------|
| 1 | IF | `svc_pause_rls_ymd.compareTo(tmpOpeDate) == 0` | Release date equals operation date |
| 2 | CALL | `executePauseRls(handle, param, fixedText, resultHash, tmpUpdDtm, tmpMskmDtlNo, svc_cd)` | ANK-4592-00-00 MOD: Now passes `svc_cd` as 7th parameter for TV service differentiation. Previously called without svc_cd. |

**Block 4.3** — [ELSE] Invalid date combination (L693)

> Same-day pause with a release date that is before the operation date is logically invalid.

| # | Type | Code |
|---|------|------|
| 1 | SET | `errMsg = "INVALID_RETURN_MESSAGE"` | |
| 2 | EXEC | `throw new SCCallException(errMsg, "0", -1)` | Abort with business exception |

---

**Block 5** — [IF] svc_pause_ymd < tmpOpeDate — Past pause (L698)

> The pause date is in the past. The subscription is already paused (or was paused at a prior date). The method handles two sub-scenarios: future release and same-day release.

| # | Type | Code |
|---|------|------|
| 1 | IF | `svc_pause_ymd.compareTo(tmpOpeDate) < 0` | Pause date is before operation date |

**Block 5.1** — [IF] svc_pause_rls_ymd > tmpOpeDate — Future release (L704)

> A past pause with a future release date. The pause was active and will be released in the future. Calls the pause change SC and registers progress.

| # | Type | Code |
|---|------|------|
| 1 | IF | `svc_pause_rls_ymd.compareTo(tmpOpeDate) > 0` | Release date is after operation date |
| 2 | CALL | `rsltEKK0081C080 = callEKK0081C080(handle, param, fixedText, tmpUpdDtm, tmpMskmDtlNo)` | [EKK0081C080SC] Register pause change |
| 3 | SET | `resultHash.put(RESULT_HASH_KEY_EKK0081C080, getWorkCAANMsg(rsltEKK0081C080))` | Store result |
| 4 | EXEC | `makeProgress(handle, param, fixedText, tmpMskmDtlNo, resultHash)` | Register progress |

**Block 5.2** — [ELSE-IF] svc_pause_rls_ymd == tmpOpeDate — Same-day release (L713)

> A past pause with a same-day release date. Triggers the pause release flow (same as Block 4.2).

| # | Type | Code |
|---|------|------|
| 1 | IF | `svc_pause_rls_ymd.compareTo(tmpOpeDate) == 0` | Release date equals operation date |
| 2 | CALL | `executePauseRls(handle, param, fixedText, resultHash, tmpUpdDtm, tmpMskmDtlNo, svc_cd)` | ANK-4592-00-00 MOD: With svc_cd parameter |

**Block 5.3** — [ELSE] Invalid date combination (L717)

> A past pause with a release date in the past (before operation date) is logically inconsistent.

| # | Type | Code |
|---|------|------|
| 1 | SET | `errMsg = "INVALID_RETURN_MESSAGE"` | |
| 2 | EXEC | `throw new SCCallException(errMsg, "0", -1)` | Abort with business exception |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `svc_pause_ymd` | Field | Service contract pause year-month-day — the date on which the service subscription should enter paused status |
| `svc_pause_rls_ymd` | Field | Service contract pause release year-month-day — the date on which the paused service should be restored to active status |
| `svc_cd` | Field | Service code — classifies the type of service. "01" = Netflix, "03" = TV (Skype), other values for different services |
| `pcrs_cd` | Field | PCRS (Payment Contract Revenue Service) code — internal code identifying the payment/contract arrangement type, used for Netflix integration |
| `mskm_dtl_no` | Field | Application detail number — unique identifier for the application detail record in the submission registration system |
| `last_upd_dtm` | Field | Last update datetime — the timestamp when the service contract record was last modified, carried through the processing chain |
| `tmpOpeDate` | Field | Operation date — the current system/business date against which pause and release dates are compared |
| `isCheckMode` | Field | Check mode flag — when true, the method skips side-effect operations like progress registration but still performs the core SC call |
| `fixedText` | Parameter | Fixed text string — user-provided arbitrary string for audit trail and operator identification |
| `PAUSE_RECEPT_MAP` | Constant | Key `"pause_recept_map"` — the parameter map key that holds the pause-related fields submitted from the screen |
| `OPEDATE_KEY` | Constant | Key `"opedate"` — the resultHash key for the operation date |
| `RESULT_KEY_EKK0081A010` | Constant | Key `"EKK0081A010"` — the resultHash key for the service contract inquiry response |
| `RESULT_HASH_KEY_EKK0081C080` | Constant | Key `"EKK0081C080"` — the resultHash key for the pause change response |
| EKK0081A010 | SC Code | Service contract inquiry SC — retrieves the current service contract details including status, update datetime, PCRS code, and service code |
| EKK0081C080 | SC Code | Service contract pause change SC — registers a service contract pause change request to the billing system |
| EKK0021C060 | SC Code | Application submission result inquiry SC — retrieves the application detail number |
| KKSV0004 | Screen | Service Contract Pause Change Screen — the online screen that invokes the pause change control flow |
| SCCallException | Exception | Service Component call exception — thrown when SC calls or validation fail, with an error message, error code, and error number |
| pauseChgRsvClCtrlTran() | Method | Pause change reservation control transaction — the parent control method that orchestrates the overall pause change workflow before delegating to `pauseChgTranOn()` |
| dsleOpSvcKeiNetflix | Method | DSL/EoH (Ethernet over Home) operator service key Netflix — processes Netflix premium opt-out cancellation as part of the ANK-3987-00-00 enhancement |
| executeAddSmtvlIdoInf | Method | Execute add smart balance discrepancy information — registers smart balance discrepancy data linked to the pause transaction (KT1-2013-0000795) |
| executeNetflixTajgsKeiIdInf | Method | Execute Netflix third-party provider contract discrepancy information — registers Netflix-specific contract discrepancy data with PCRS code (ANK-3987-00-00) |
| executeSptvKeyInfPause | Method | Execute spare/TV key information pause — pauses Skype key information for TV services (ANK-4592-00-00) |
| executePauseRls | Method | Execute pause release — registers a pause release request to restore a paused service to active status |
| makeProgress | Method | Make progress registration — registers progress tracking data for the pause change transaction |
| getWorkCAANMsg | Method | Get work CAAN message — converts a raw result map into a CAANMsg object for standardized result handling |
| ANK-3987-00-00 | Change ticket | Netflix premium opt-out cancellation enhancement — added Netflix service code (pcrs_cd) retrieval and Netflix opt-out processing to the same-day pause flow |
| ANK-4592-00-00 | Change ticket | TV service differentiation enhancement — added TV service code ("03") detection for Skype key info pause, and modified `executePauseRls` to accept `svc_cd` parameter |
| KT1-2013-0000795 | Change ticket | Pause start discrepancy data not reflected in smart balance opt-out linkage — added `executeAddSmtvlIdoInf` call to ensure discrepancy data is properly registered |
| SOD | Acronym | Service Order Data — telecom order fulfillment entity; referenced in `SOD_HAKKO_FLG` constant |
| FTTH | Business term | Fiber To The Home — fiber-optic broadband service type in the Japanese telecom domain |
| CAANMsg | Type | CAAN message object — the standardized message wrapper used for SC responses in the futurity platform |
| CC | Abbreviation | Component Class — a shared business logic class in the Fujitsu futurity platform architecture, operating between the screen layer and SC (Service Component) layer |
| SC | Abbreviation | Service Component — a business logic component that invokes database operations via CBS (Common Business Service) |
| CBS | Abbreviation | Common Business Service — the data access layer that executes SQL operations against database tables |
