# Business Logic — JBSbatKKRsvTokiHakTgCst.outputTokiEnd() [77 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.business.service.JBSbatKKRsvTokiHakTgCst` |
| Layer | Service (Batch processing service component) |
| Module | `service` (Package: `eo.business.service`) |

## 1. Role

### JBSbatKKRsvTokiHakTgCst.outputTokiEnd()

This method is responsible for **outputting scheduled TOKI (トーキ = Toki/special billing event) termination records** to an intermediate file for expected TOKI issuance (予定要発行使). In the Japanese telecommunications domain, "TOKI" refers to special billing or charge events that are generated alongside service contract modifications such as transfers (移転), cancellations (解約), and suspensions (休止). The method extracts ten key fields from the incoming service interface map (`inMap`), evaluates them against three distinct TOKI termination scenarios, and writes matching records to the output bean via `addOutMapList` after preparing them with `createRsvTokiHakFile`.

The method handles **three service-type branches**:
1. **Branch (a) - Transfer-to Registration TOKI**: Handles TOKI issued as a result of a service transfer-to registration (移転先登録によるトーキ). This occurs when a service is moved to a new location and special billing is triggered upon the transfer-to activation.
2. **Branch (b) - Transfer Source Cancellation TOKI**: Handles TOKI resulting from cancellation of the original (transfer-source) service contract (移転元解約によるトーキ). Only processed when the caller indicates that such cancellation has not already been handled (`isEndItenmDslToki` is false).
3. **Branch (c) - Suspension TOKI**: Handles TOKI triggered by service suspension (休止によるトーキ). Also gated by `isEndItenmDslToki` being false.

The method implements a **routing/dispatch design pattern** - it evaluates conditions sequentially, dispatching to different TOKI types based on the add-registration code. It delegates data transformation to `createRsvTokiHakFile` and serves as a **batch-level data transformer** within the larger TOKI issuance workflow, called by `execute()` within the same class.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["outputTokiEnd start"])

    START --> EXTRACT["Extract 10 fields from inMap"]
    EXTRACT --> COND_A{ITNTOKI_ADD_CD_ITENS equals 1?}

    COND_A -->|Yes| A_TIMING["Start date set AND End date not set"]
    A_TIMING --> A_CHECK{Expected end passed OR destination svc status is 910 or 920?}

    A_CHECK -->|Yes| A_OUTPUT["Create output file map with end code and ITENS"]
    A_OUTPUT --> END_NODE(["Return"])
    A_CHECK -->|No| SKIP_A["Skip"]
    SKIP_A --> END_NODE

    COND_A -->|No| SKIP_A

    SKIP_A --> COND_B{isEndItenmDslToki is false?}

    COND_B -->|Yes| COND_C{dslPauseTokiAddCd equals 2?}
    COND_B -->|No| SKIP_ALL

    COND_C -->|Yes| B_CHECK{Start set AND End not set AND expected end passed?}
    B_CHECK -->|Yes| B_OUTPUT["Create output file map with end code and ITENM"]
    B_OUTPUT --> END_NODE
    B_CHECK -->|No| SKIP_B
    SKIP_B --> COND_D

    COND_C -->|No| COND_D{dslPauseTokiAddCd equals 3?}

    COND_D -->|Yes| C_CHECKS["Start set AND End date not set"]
    C_CHECKS --> C_MATCH{Expected end passed OR svc status is 100, 220, 920, or 910?}

    C_MATCH -->|Yes| C_OUTPUT["Create output file map with end code and PAUSE"]
    C_OUTPUT --> END_NODE
    C_MATCH -->|No| SKIP_C
    SKIP_C --> END_NODE

    COND_D -->|No| SKIP_C

    SKIP_ALL["Skip blocks B and C"] --> END_NODE
```

**CRITICAL - Constant Resolution:**

| Constant | Value | Business Meaning |
|----------|-------|-----------------|
| `JKKBatConst.ITNTOKI_ADD_CD_ITENS` | `"1"` | Transfer-to registration TOKI code (移転先登録によるトーキ) |
| `JKKBatConst.ITNTOKI_ADD_CD_ITENM` | `"2"` | Transfer source cancellation TOKI code (移転元解約によるトーキ) |
| `JKKBatConst.ITNTOKI_ADD_CD_PAUSE` | `"3"` | Suspension TOKI code (休止によるトーキ) |
| `JKKBatConst.SVC_KEI_STAT_DSL_ZM` | `"910"` | Service contract status: DSL Cancelled (DSL解約済) |
| `JKKBatConst.SVC_KEI_STAT_CNCL_ZM` | `"920"` | Service contract status: Cancelled (キャンセル済) |
| `JKKBatConst.SVC_KEI_STAT_SVCTKCHU` | `"100"` | Service contract status: Service Provision in Progress (サービス提供中) |
| `JKKBatConst.SVC_KEI_STAT_STP` | `"220"` | Service contract status: Suspended (停止中) |
| `SOD_HAK_SBT_CD_END` | `"2"` | SOD (Service Order Data) issuance type code: End (終了) |
| `SAKI_SVC_KEI_UCWK_STAT` | `"SAKI_SVC_KEI_UCWK_STAT"` | Key name for destination service contract details status |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `inMap` | `JBSbatServiceInterfaceMap` | The incoming service interface map carrying all data fields needed to evaluate TOKI termination conditions. Contains fields such as DSL pause TOKI add code, pause start/end dates, pause expected end dates, items (transfer-to) TOKI add code and dates, service contract status, and destination service contract status. Acts as the primary data source for all branch evaluations. |
| 2 | `outputBean` | `JBSbatOutputItem` | The output carrier bean to which matching TOKI termination records are appended. Each matched branch creates an intermediate map via `createRsvTokiHakFile` and adds it to this bean via `addOutMapList`, accumulating all qualifying records for downstream processing. |
| 3 | `isEndItenmDslToki` | `boolean` | A flag indicating whether the transfer-source cancellation TOKI has already been cancelled or ended (移転元解約によるトーキを取消または終了したかどうか). When `true`, branches (b) and (c) are entirely skipped to prevent duplicate TOKI processing. When `false`, the method proceeds to evaluate transfer source cancellation and suspension TOKI conditions. |

**Instance fields / external state read:**

| Field | Type | Business Description |
|-------|------|---------------------|
| `trnOpeDate` | `String` | The processing operation date (処理運用日) - used as the reference date for `isPastDate` comparisons to determine whether the TOKI expected end date has passed. Set by the calling context (batch runtime). |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `JBSbatInterface.trim` | JBSbatInterface | - | Calls `trim` to strip whitespace from string values retrieved from `inMap` |
| - | `JZMBatCommon.trim` | JZMBatCommon | - | Calls `trim` in `JZMBatCommon` (utility) |
| R | `JBSbatFUCaseFileRnkData.getString` | JBSbatFUCaseFileRnkData | - | Calls `getString` in `JBSbatFUCaseFileRnkData` (utility read) |
| R | `JBSbatFUMoveNaviData.getString` | JBSbatFUMoveNaviData | - | Calls `getString` in `JBSbatFUMoveNaviData` (utility read) |
| - | `JBSbatKKBmpKaihkPrdChokNoDel.trim` | JBSbatKKBmpKaihkPrdChokNoDel | - | Calls `trim` in utility class |
| C | `JBSbatKKGetCTITelno.addOutMapList` | JBSbatKKGetCTITelno | - | Calls `addOutMapList` - adds the output map to the output bean (Create on output list) |
| C | `JBSbatKKRsvTokiHakTgCst.createRsvTokiHakFile` | JBSbatKKRsvTokiHakTgCst | - | Calls `createRsvTokiHakFile` - creates the intermediate file map for expected TOKI issuance data, preparing the record to be written out |
| - | `JBSbatKKRsvTokiHakTgCst.isNullDate` | JBSbatKKRsvTokiHakTgCst | - | Calls `isNullDate` - checks whether a date string is null/empty, used to validate date field presence |
| - | `JBSbatKKSodSendReqBase.trim` | JBSbatKKSodSendReqBase | - | Calls `trim` in utility class |
| - | `JBSbatKKTchishoDelete.trim` | JBSbatKKTchishoDelete | - | Calls `trim` in utility class |
| R | `JBSbatZMAdDataSet.getString` | JBSbatZMAdDataSet | - | Calls `getString` in `JBSbatZMAdDataSet` (utility read) |
| - | `JPCDateChecker.isPastDate` | JPCDateChecker | - | Calls `isPastDate` - checks if a date is before the reference date |
| - | `JPCUtilCommon.isPastDate` | JPCUtilCommon | - | Calls `isPastDate` (utility date check) |
| R | `JESC0101B010TPMA.getString` | JESC0101B010TPMA | - | Calls `getString` in `JESC0101B010TPMA` (utility read) |
| R | `JESC0101B020TPMA.getString` | JESC0101B020TPMA | - | Calls `getString` in `JESC0101B020TPMA` (utility read) |
| - | `JKKejbDateChecker.isPastDate` | JKKejbDateChecker | - | Calls `isPastDate` - checks if a date is before the reference date |
| - | `JACejbDateChecker.isPastDate` | JACejbDateChecker | - | Calls `isPastDate` (utility date check) |
| - | `JPCModelCommon.isPastDate` | JPCModelCommon | - | Calls `isPastDate` (utility date check) |

**Key method calls specific to this method:**

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| C | `createRsvTokiHakFile` | (Internal) | Intermediate TOKI file | Creates a formatted intermediate map containing TOKI termination data for the expected TOKI issuance file. Used for all three TOKI branches with different TOKI add codes (ITENS, ITENM, PAUSE). |
| C | `addOutMapList` | (Output Item) | Output item list | Appends the prepared intermediate map to the output bean list of records for downstream file output. |
| R | `isNullDate` | (Internal) | - | Validates whether date fields are set (non-empty) - used to check start date, end date, and expected end date fields. |
| R | `isPastDate` (via `JKKBatCommon`) | - | - | Determines whether the TOKI expected end date has passed relative to `trnOpeDate` with an offset of 1 day, used as a termination trigger condition. |

## 5. Dependency Trace

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

No screen/batch entry points found within 8 hops. Direct callers found: 1 methods.

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Batch: JBSbatKKRsvTokiHakTgCst.execute() | `JBSbatKKRsvTokiHakTgCst.execute()` -> `JBSbatKKRsvTokiHakTgCst.outputTokiEnd` | `createRsvTokiHakFile [C] Intermediate TOKI file`, `addOutMapList [C] Output bean list`, `isNullDate [R] Date validation`, `isPastDate [R] Date validation` |

**Note:** `execute()` is the batch entry point within the same class. It iterates over service contract records and invokes `outputTokiEnd` for each record to collect all TOKI termination records into the output bean. This method is a **leaf transformer** in the call chain - it performs no further service component (SC) invocations beyond its internal utility and delegation calls.

## 6. Per-Branch Detail Blocks

**Block 1** - [FIELD EXTRACTION] `(lines 282-293)`

> Extracts ten fields from the incoming `inMap` and trims whitespace. These cover three categories: DSL pause TOKI fields, items (transfer-to) TOKI fields, and service contract status fields.

| # | Type | Code |
|---|------|------|
| 1 | SET | `dslPauseTokiAddCd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.DSL_PAUSE_TOKI_ADD_CD))` // DSL pause TOKI add code |
| 2 | SET | `dslPauseTokiStaYmd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.DSL_PAUSE_TOKI_STA_YMD))` // DSL pause TOKI start date (YYYYMMDD) |
| 3 | SET | `dslPauseTokiEndRsymd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.DSL_PAUSE_TOKI_END_RSYMD))` // DSL pause TOKI expected end date (YYYYMMDD) |
| 4 | SET | `dslPauseTokiEndYmd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.DSL_PAUSE_TOKI_END_YMD))` // DSL pause TOKI actual end date (YYYYMMDD) |
| 5 | SET | `itensOpafTokiAddCd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.ITENS_OPAF_TOKI_ADD_CD))` // Items (transfer-to) TOKI add code |
| 6 | SET | `itensOpafTokiStaYmd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.ITENS_OPAF_TOKI_STA_YMD))` // Items TOKI start date (YYYYMMDD) |
| 7 | SET | `itensOpafTokiEndRsymd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.ITENS_OPAF_TOKI_END_RSYMD))` // Items TOKI expected end date (YYYYMMDD) |
| 8 | SET | `itensOpafTokiEndYmd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.ITENS_OPAF_TOKI_END_YMD))` // Items TOKI actual end date (YYYYMMDD) |
| 9 | SET | `svcKeiUcwkStat = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_STAT))` // Service contract status |
| 10 | SET | `sakiSvcKeiUcwkStat = JBSbatInterface.trim(inMap.getString(SAKI_SVC_KEI_UCWK_STAT))` // Destination service contract status (after transfer-to) |

**Block 2** - [IF] `(JKKBatConst.ITNTOKI_ADD_CD_ITENS.equals(itensOpafTokiAddCd) && !isNullDate(itensOpafTokiStaYmd) && isNullDate(itensOpafTokiEndYmd))` `[ITNTOKI_ADD_CD_ITENS="1"]` (L297)

> Branch (a): Transfer-to registration TOKI - evaluates whether a TOKI was issued as a result of service transfer-to registration. The TOKI add code must be "1", the start date must be set, and the actual end date must NOT be set (i.e., the TOKI is still active).

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `isNullDate(itensOpafTokiStaYmd)` // Verify start date is set |
| 2 | EXEC | `isNullDate(itensOpafTokiEndYmd)` // Verify actual end date is not set |

**Block 2.1** - [IF] `(Branch a-1: Expected end date passed OR branch a-2: Destination service status is cancelled)` (L305) `[!isNullDate(itensOpafTokiEndRsymd) && JKKBatCommon.isPastDate(itensOpafTokiEndRsymd, trnOpeDate, "1")] OR [(sakiSvcKeiUcwkStat equals "910" OR "920")]`

> Branch (a-1): The TOKI expected end date has passed (past the operational date by 1 day). **OR**
> Branch (a-2): Before the expected end date, the destination service has been cancelled (status 910: DSL Cancelled or 920: Cancelled). Either condition triggers output.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `isNullDate(itensOpafTokiEndRsymd)` // Verify expected end date is set |
| 2 | EXEC | `JKKBatCommon.isPastDate(itensOpafTokiEndRsymd, trnOpeDate, "1")` // Check if expected end date passed (pastDate(offset=1)) |
| 3 | EXEC | `sakiSvcKeiUcwkStat.equals(JKKBatConst.SVC_KEI_STAT_DSL_ZM)` // Destination status = "910" (DSL Cancelled) |
| 4 | EXEC | `sakiSvcKeiUcwkStat.equals(JKKBatConst.SVC_KEI_STAT_CNCL_ZM)` // Destination status = "920" (Cancelled) |
| 5 | CALL | `createRsvTokiHakFile(inMap, SOD_HAK_SBT_CD_END, JKKBatConst.ITNTOKI_ADD_CD_ITENS)` // Create intermediate map with end code "2" and ITENS code "1" |
| 6 | EXEC | `outputBean.addOutMapList(outmap)` // Add output record to bean |

**Block 3** - [IF] `(!isEndItenmDslToki)` (L316)

> Gate condition: Only enter branches (b) and (c) if the transfer-source cancellation TOKI has NOT already been ended/cancelled. If `isEndItenmDslToki` is true, skip all remaining processing.

**Block 4** - [IF] `(Branch b) JKKBatConst.ITNTOKI_ADD_CD_ITENM.equals(dslPauseTokiAddCd)` `[ITNTOKI_ADD_CD_ITENM="2"]` (L321)

> Branch (b): Transfer source cancellation TOKI - evaluates whether the DSL pause TOKI add code indicates a transfer source cancellation scenario. All four conditions must hold: the add code is "2", start date is set, actual end date is not set, and the expected end date has passed.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `isNullDate(dslPauseTokiStaYmd)` // Start date must be set |
| 2 | EXEC | `isNullDate(dslPauseTokiEndYmd)` // Actual end date must NOT be set |
| 3 | EXEC | `isNullDate(dslPauseTokiEndRsymd)` // Expected end date must be set |
| 4 | EXEC | `JKKBatCommon.isPastDate(dslPauseTokiEndRsymd, trnOpeDate, "1")` // Expected end date must have passed |
| 5 | CALL | `createRsvTokiHakFile(inMap, SOD_HAK_SBT_CD_END, JKKBatConst.ITNTOKI_ADD_CD_ITENM)` // Create intermediate map with end code "2" and ITENM code "2" |
| 6 | EXEC | `outputBean.addOutMapList(outmap)` // Add output record to bean |

**Block 5** - [IF] `(Branch c) JKKBatConst.ITNTOKI_ADD_CD_PAUSE.equals(dslPauseTokiAddCd)` `[ITNTOKI_ADD_CD_PAUSE="3"]` (L330)

> Branch (c): Suspension TOKI - evaluates whether the DSL pause TOKI add code indicates a suspension scenario. The add code must be "3", start date must be set, and actual end date must not be set. Then one of two sub-conditions triggers output.

**Block 5.1** - [IF] `(Branch c-1: Expected end date passed OR c-2: Service status is in active/suspended/cancelled states)` (L337) `[!isNullDate(dslPauseTokiEndRsymd) && isPastDate(...)] OR [(svcKeiUcwkStat equals "100" OR "220" OR "920" OR "910")]`

> Branch (c-1): The TOKI expected end date has passed. **OR**
> Branch (c-2): Before the expected end date, the service contract status is one of: "100" (Service Provision in Progress), "220" (Suspended), "920" (Cancelled), or "910" (DSL Cancelled). This handles the case where the service status itself indicates a termination event.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `isNullDate(dslPauseTokiEndRsymd)` // Verify expected end date is set |
| 2 | EXEC | `JKKBatCommon.isPastDate(dslPauseTokiEndRsymd, trnOpeDate, "1")` // Check if expected end date passed (pastDate(offset=1)) |
| 3 | EXEC | `svcKeiUcwkStat.equals(JKKBatConst.SVC_KEI_STAT_SVCTKCHU)` // Status = "100" (Service Provision in Progress) |
| 4 | EXEC | `svcKeiUcwkStat.equals(JKKBatConst.SVC_KEI_STAT_STP)` // Status = "220" (Suspended) |
| 5 | EXEC | `svcKeiUcwkStat.equals(JKKBatConst.SVC_KEI_STAT_CNCL_ZM)` // Status = "920" (Cancelled) |
| 6 | EXEC | `svcKeiUcwkStat.equals(JKKBatConst.SVC_KEI_STAT_DSL_ZM)` // Status = "910" (DSL Cancelled) |
| 7 | CALL | `createRsvTokiHakFile(inMap, SOD_HAK_SBT_CD_END, JKKBatConst.ITNTOKI_ADD_CD_PAUSE)` // Create intermediate map with end code "2" and PAUSE code "3" |
| 8 | EXEC | `outputBean.addOutMapList(outmap)` // Add output record to bean |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| TOKI (トーキ) | Business term | Toki / special billing event - a charge or billing event generated in conjunction with service contract modifications (transfers, cancellations, suspensions) |
| 予約トーキ発行 (Yoyaku TOKI Hakko) | Business term | Expected TOKI issuance - generating scheduled billing records in advance for upcoming contract changes |
| 移転先登録 (Itensaki Touroku) | Field | Transfer-to registration - registering a new service location when a service is transferred |
| 移転元解約 (Itomotokaiyaku) | Field | Transfer source cancellation - cancelling the original service contract at the source location after a transfer |
| 休止 (Shuushi) | Field | Suspension - temporarily pausing a service contract without fully cancelling it |
| `itensOpafTokiAddCd` | Field | Items (transfer-to) TOKI add code - identifies the type of TOKI event; "1" = transfer-to registration |
| `dslPauseTokiAddCd` | Field | DSL pause TOKI add code - identifies the type of TOKI event; "2" = transfer source cancellation, "3" = suspension |
| `dslPauseTokiStaYmd` | Field | DSL pause TOKI start date (YYYYMMDD) - when the TOKI event takes effect |
| `dslPauseTokiEndYmd` | Field | DSL pause TOKI actual end date (YYYYMMDD) - when the TOKI event actually concluded; empty if still active |
| `dslPauseTokiEndRsymd` | Field | DSL pause TOKI expected/scheduled end date (YYYYMMDD) - the planned end date used to determine if the TOKI should be terminated |
| `itensOpafTokiStaYmd` | Field | Items (transfer-to) TOKI start date (YYYYMMDD) |
| `itensOpafTokiEndYmd` | Field | Items (transfer-to) TOKI actual end date (YYYYMMDD) |
| `itensOpafTokiEndRsymd` | Field | Items (transfer-to) TOKI expected end date (YYYYMMDD) |
| `svcKeiUcwkStat` | Field | Service contract status - the current status of the service contract line item (e.g., "100" = in progress, "220" = suspended) |
| `sakiSvcKeiUcwkStat` | Field | Destination service contract status - the status of the service contract at the transfer-to destination |
| `trnOpeDate` | Field | Processing operational date - the batch processing date used as the reference point for date comparisons |
| `SOD_HAK_SBT_CD_END` | Constant | SOD issuance type code: "2" = End (終了) - indicates this is a TOKI termination record |
| `isEndItenmDslToki` | Parameter | Whether the transfer-source cancellation TOKI has already been cancelled or ended - prevents duplicate processing |
| SOD | Acronym | Service Order Data - the telecom order fulfillment entity used in the system |
| ICS | Acronym | Installation/Configuration System - referenced in change log for TOKI timing discrepancies |
| `JKKBatConst.ITNTOKI_ADD_CD_ITENS` | Constant | TOKI add code "1" - Transfer-to registration TOKI (移転先登録によるトーキ) |
| `JKKBatConst.ITNTOKI_ADD_CD_ITENM` | Constant | TOKI add code "2" - Transfer source cancellation TOKI (移転元解約によるトーキ) |
| `JKKBatConst.ITNTOKI_ADD_CD_PAUSE` | Constant | TOKI add code "3" - Suspension TOKI (休止によるトーキ) |
| `JKKBatConst.SVC_KEI_STAT_SVCTKCHU` | Constant | Service contract status "100" - Service Provision in Progress (サービス提供中) |
| `JKKBatConst.SVC_KEI_STAT_STP` | Constant | Service contract status "220" - Suspended (停止中) |
| `JKKBatConst.SVC_KEI_STAT_DSL_ZM` | Constant | Service contract status "910" - DSL Cancelled (DSL解約済) |
| `JKKBatConst.SVC_KEI_STAT_CNCL_ZM` | Constant | Service contract status "920" - Cancelled (キャンセル済) |
| `createRsvTokiHakFile` | Method | Creates the intermediate file map for expected TOKI issuance - prepares a formatted data record for output |
| `addOutMapList` | Method | Appends an intermediate map to the output bean's list - accumulates TOKI termination records for downstream batch output |
| `isNullDate` | Method | Validates whether a date string is null or empty - used to check date field presence |
| `isPastDate` | Method | Checks if a date is before the reference date plus an offset - used to determine if the TOKI expected end date has elapsed |
| KK_T_SVKEIUW_EOH_TEL | Table | Service contract details <EO Hikari Phone> table - contains DSL pause and items TOKI fields |
| KK_T_SVC_KEI_UCWK | Table | Service contract details table - contains service contract status field |
