# Business Logic - JBSbatKKCourseChgeTstaDayChsht.execute() [758 LOC]

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

## 1. Role

### JBSbatKKCourseChgeTstaDayChsht.execute()

This batch service processes scheduled course change application start dates. It identifies subscription records where a plan/course change has reached its effective date and prepares the output data for downstream fulfillment. The method reads reservation records from the KK_T_IDO_RSV (Change Reservation) table that match the current operational date, then branches processing based on the new billing plan group code (e.g., eo Mobile, eo Light Phone) and the change division code (e.g., course change, address change).

The service handles multiple service categories:

- **eo Mobile plan groups (newPrcGrpCd = "08")**: It validates that reservation status is "03: Reservation Processing" and the application date is within one day of the operational date, outputting work result code "6" (Mobile).
- **eo Light Phone plan groups (newPrcGrpCd = "10")**: It requires an address change registration (idoDiv = "00019"), checks if the reservation application date is the sentinel "20991231" (indicating work-completion-scheduled), and if so, queries work order details to determine whether the work is completed, cancelled, or planned without work.
- **Non-Mobile / Non-Light-Phone (fiber, TV, etc.)**: It similarly queries work orders and outputs work result codes "1" (Work Completed) or "4" (Work Cancelled) based on work order status.

The method implements a **routing/dispatch pattern**: it first reads all eligible records, then for each record extracts fields, validates against the service contract exclusion control table, filters out non-target phone course changes, and dispatches into branches based on plan group and work order status.

An additional **night processing mode** (when fleeItemArray[0] == "1", i.e., TRAN_DIV_NIGHT) triggers a secondary loop that queries TV plan change reservations and outputs completion data from the work completion work table (KK_T_KJ_FIN_WK).

In the larger system, this service is a batch entry point called by the K-Opticom operational batch framework. It serves as the bridge between reservation scheduling data and the fulfillment workflow, ensuring that course changes are applied on their effective dates.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["Execute Start"])

    START --> INIT["Generate outputBean JBSbatOutputItem"]
    INIT --> FETCH["Fetch idoRsvInfoList from searchIdoRsvInfo"]

    FETCH --> LOOP_START["Loop each idoRsvInfo record"]
    LOOP_START --> ITER["Process record at index i"]

    ITER --> EXTRACT["Extract fields from dbInfo"]
    EXTRACT --> SVC_CTRL["Query SVC_KEI_EXC_CTRL by svcKeiNo"]

    SVC_CTRL --> SVC_CTRL_CHECK{SVC_KEI_EXC_CTRL exists}
    SVC_CTRL_CHECK -->|"No"| THROW_ERR["Throw EKKB0210CE error"]
    SVC_CTRL_CHECK -->|"Yes"| CHK_NIGHT{Night mode NIGHT}

    CHK_NIGHT -->|"No"| CHK_NOT_TEL["Check isNotTelCrsChgTaisho"]

    CHK_NOT_TEL -->|"Yes not target"| SKIP_1["continue skip"]

    CHK_NOT_TEL -->|"No is target"| CHK_IDO_00009{idoDiv 00009 Course Change}

    CHK_IDO_00009 -->|"No 00009"| CHK_PGRP{newPrcGrpCd 08 Mobile}

    CHK_PGRP -->|"Yes 08"| CHK_RSV_STAT{idoRsvStatCd 03 Reservation Processing}
    CHK_RSV_STAT -->|"No"| SKIP_2["continue"]
    CHK_RSV_STAT -->|"Yes"| CHK_RSV_YMD{rsvAplyYmd empty}
    CHK_RSV_YMD -->|"Yes"| THROW_RSV["Throw EKKB0090TE"]
    CHK_RSV_YMD -->|"No"| CHK_RSV_DUE{rsvAplyYmd <= opeDate+1}
    CHK_RSV_DUE -->|"Yes due soon"| MOBILE_OUT["Build outmap KOJI_RSLT 6 Mobile addOutMapList"]
    CHK_RSV_DUE -->|"No not yet"| SKIP_3["continue"]

    CHK_PGRP -->|"No"| CHK_PGRP_TEL{newPrcGrpCd 10 Light Phone}

    CHK_PGRP_TEL -->|"Yes 10"| CHK_IDO_19{idoDiv not 00019 Address Change}
    CHK_IDO_19 -->|"Yes not address"| SKIP_4["continue"]

    CHK_IDO_19 -->|"No 00019"| CHK_RSV_YMD_2{rsvAplyYmd empty}

    CHK_RSV_YMD_2 -->|"Yes"| THROW_RSV_2["Throw EKKB0090TE"]
    CHK_RSV_YMD_2 -->|"No"| CHK_RSV_2099{rsvAplyYmd not 20991231}

    CHK_RSV_2099 -->|"Yes"| ALART_TEISEI["alartKojiTeisei continue"]
    CHK_RSV_2099 -->|"No 20991231"| CHK_KOJI_RSV{idoRsvKojiakNo empty}

    CHK_KOJI_RSV -->|"No has kojiRsv"| FETCH_KOJIAK["Query KU_T_KOJIAK selectKojiAk"]
    FETCH_KOJIAK --> EXTRACT_KOJIAK["Extract kojiakStat, kojiAkSbtCd, uk_ido_div"]
    EXTRACT_KOJIAK --> CHK_PLAN_010{kojiAkSbtCd 010 Plan Change No Work}

    CHK_PLAN_010 -->|"Yes 010"| FETCH_SETE["selectSeteKj"]
    FETCH_SETE --> CHK_SETE_OK{selectSeteKj returns true}
    CHK_SETE_OK -->|"Yes"| SET_SETE["Set outmap KOJIAK_NO setOutFlg=true addOutMapList"]
    CHK_SETE_OK -->|"No"| SKIP_SETE["continue"]

    CHK_PLAN_010 -->|"No"| CHK_STAT_200{kojiakStat 200 or mans 200}

    CHK_STAT_200 -->|"Yes Completed"| SET_RSLT1["kojiRslt 1 Work Completed
Set outmap fields setOutFlg true addOutMapList"]
    CHK_STAT_200 -->|"No"| CHK_STAT_900{kojiakStat 900 or mans 900}

    CHK_STAT_900 -->|"Yes Cancelled"| SET_RSLT4["kojiRslt 4 Work Cancelled
Set cancel fields setOutFlg true addOutMapList"]
    CHK_STAT_900 -->|"No"| SKIP_STAT["continue"]

    SET_RSLT1 --> SET_COMMON_A["Set common outmap fields"]
    SET_RSLT4 --> SET_COMMON_B["Set common outmap fields"]
    SET_SETE --> SET_COMMON_C["Set common outmap fields"]

    SET_COMMON_A --> CHK_SVC_TEL_A{svcCd not Tel and not Tv}
    SET_COMMON_B --> CHK_SVC_TEL_B{svcCd not Tel and not Tv}
    SET_COMMON_C --> CHK_SVC_TEL_C{svcCd not Tel and not Tv}

    CHK_SVC_TEL_A -->|"Yes"| FETCH_IDO_A["selectIdoRsv + selectKktSvKeiUw"]
    CHK_SVC_TEL_A -->|"No"| OUT_A["setOutFlg true addOutMapList"]

    CHK_SVC_TEL_B -->|"Yes"| FETCH_IDO_B["selectIdoRsv + selectKktSvKeiUw"]
    CHK_SVC_TEL_B -->|"No"| OUT_B["setOutFlg true addOutMapList"]

    CHK_SVC_TEL_C -->|"Yes"| FETCH_IDO_C["selectIdoRsv + selectKktSvKeiUw"]
    CHK_SVC_TEL_C -->|"No"| OUT_C["setOutFlg true addOutMapList"]

    FETCH_IDO_A --> OUT_A
    FETCH_IDO_B --> OUT_B
    FETCH_IDO_C --> OUT_C

    OUT_A --> LOOP_END{More records}
    OUT_B --> LOOP_END
    OUT_C --> LOOP_END
    SKIP_1 --> LOOP_END
    SKIP_2 --> LOOP_END
    SKIP_3 --> LOOP_END
    SKIP_4 --> LOOP_END
    SKIP_SETE --> LOOP_END
    SKIP_STAT --> LOOP_END
    ALART_TEISEI --> LOOP_END
    THROW_ERR --> LOOP_END
    THROW_RSV --> LOOP_END
    THROW_RSV_2 --> LOOP_END

    LOOP_END -->|"Yes"| ITER
    LOOP_END -->|"No"| CHECK_NIGHT_2{Night mode NIGHT}

    CHECK_NIGHT_2 -->|"Yes"| FETCH_PPLAN["Fetch idoRsvPplanInfoList searchIdoRsvPplanInfo"]
    FETCH_PPLAN --> LOOP_PPLAN["Loop each pplan record"]
    LOOP_PPLAN --> EXTRACT_PPLAN["Extract svcKeiNo, idoRsvNo, svcKeiUcwkNo, svcCd"]
    EXTRACT_PPLAN --> FETCH_KJ["Query KK_T_KJ_FIN_WK searchKjFinWk"]
    FETCH_KJ --> CHK_KJ_EXISTS{kjFinWk exists}
    CHK_KJ_EXISTS -->|"Yes"| SET_PPLAN["Set outmap2 IDO_RSV_NO SVC_KEI_NO KOJIAK_NO SVC_CD KOJIAK_FIN_YMD setOutFlg true addOutMapList_2"]
    CHK_KJ_EXISTS -->|"No"| SKIP_PPLAN["continue"]
    SET_PPLAN --> PPLAN_END{More pplan}
    PPLAN_END -->|"Yes"| EXTRACT_PPLAN
    PPLAN_END -->|"No"| END_OUTPUT

    SKIP_PPLAN --> PPLAN_END
    CHECK_NIGHT_2 -->|"No"| END_OUTPUT

    END_OUTPUT(["Return outputBean"])
```

**Constant Resolution Key:**

| Constant Name | Value | Business Meaning |
|--------------|-------|-----------------|
| `JBSbatKKConst.CD00576_IDO_DIV_00009` | "00009" | Change Division: Course Change |
| `JBSbatKKConst.CD00576_IDO_DIV_00019` | "00019" | Change Division: Address Change/Registration |
| `JBSbatKKConst.PCRS_CD_COSE_SD` | "A38" | Billing Course Code: SD Course |
| `JBSbatKKConst.PCRS_CD_COSE_HD` | "A39" | Billing Course Code: HD Course |
| `JBSbatKKConst.PCRS_CD_EOH_TV_SAISO_TACH_SD` | "A64" | Billing Course Code: EO Light TV Relay Dispatch SD Course |
| `JBSbatKKConst.PCRS_CD_EOH_TV_SAISO_TACH_HD` | "A64" | Billing Course Code: EO Light TV Relay Dispatch HD Course |
| `JBSbatKKConst.PGRP_MOB_08` | "08" | Plan Group: eo Mobile |
| `JBSbatKKConst.PGRP_TEL` | "10" | Plan Group: eo Light Phone |
| `JBSbatKKConst.CD01168_IDO_RSV_STAT_CD_03` | "03" | Change Reservation Status: Reservation Processing |
| `JBSbatKKConst.SVC_CD_IN_SVC` | "01" | Service Code: Internet Service |
| `JBSbatKKConst.SVC_CD_TEL_SVC` | "02" | Service Code: Telephone Service |
| `JBSbatKKConst.SVC_CD_TV_SVC` | "03" | Service Code: Television Service |
| `JBSbatKKConst.KOJIAK_SBT_CD_PLAN_CHG_KOJI_NON` | "010" | Work Order Sub Type: Plan Change (No Work) |
| `JBSbatKKConst.KOJIAK_SBT_CD_NEWESTA` | "001" | Work Order Sub Type: New Establishment |
| `JBSbatKKConst.KOJIAK_SBT_CD_ADCHG_NEWESTA` | "003" | Work Order Sub Type: Address Change (New Establishment) |
| `JBSbatKKConst.CD00474_KOJIAK_STAT_200` | "200" | Work Order Status: Work Completed |
| `JBSbatKKConst.CD00474_KOJIAK_STAT_120` | "120" | Work Order Status: Registered |
| `JBSbatKKConst.CD00474_KOJIAK_STAT_900` | "900" | Work Order Status: Cancelled |
| `JBSbatKKConst.CD01651_MANS_KOJIAK_STAT_CD_200` | "200" | Maintenance Work Order Status: Work Completed |
| `JBSbatKKConst.CD01651_MANS_KOJIAK_STAT_CD_900` | "900" | Maintenance Work Order Status: Cancelled |
| `JBSbatKKConst.KKIFM151_KOJI_RSLT_1` | "1" | Work Result: Work Completed |
| `JBSbatKKConst.KKIFM151_KOJI_RSLT_4` | "4" | Work Result: Work Cancelled |
| `JBSbatKKConst.KKIFM151_KOJI_RSLT_6` | "6" | Work Result: Mobile |
| `TRAN_DIV_NIGHT` | "1" | Processing Division: Night |
| `TRAN_DIV_DT` | "2" | Processing Division: Day |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| - | (none) | - | This is a parameterless method. It relies on inherited fields from JBSbatBusinessService. |

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

| Field | Type | Business Description |
|-------|------|---------------------|
| `opeDate` | String | Operational date - the batch processing date, used to filter eligible reservations |
| `fleeItemArray` | String[] | Free item array split from `super.freeItem` by delimiter - the first element indicates processing division (night=1, day=2) |
| `db_KK_T_IDO_RSV` | JBSbatSQLAccess | DB access class for KK_T_IDO_RSV (Change Reservation) table |
| `db_KK_T_SVKEI_EXC_CTRL` | JBSbatSQLAccess | DB access class for KK_T_SVKEI_EXC_CTRL (Service Contract Exclusion Control) table |
| `db_KK_T_MSKM_DTL` | JBSbatSQLAccess | DB access class for KK_T_MSKM_DTL (Application Detail) table |
| `db_KU_T_MSKM_DTL_KOJIAK` | JBSbatSQLAccess | DB access class for KU_T_MSKM_DTL_KOJIAK (Application Detail - Work Order) table |
| `db_KU_T_KOJIAK` | JBSbatSQLAccess | DB access class for KU_T_KOJIAK (Work Order) table |
| `db_KK_T_SVC_KEI_UCWK` | JBSbatSQLAccess | DB access class for KK_T_SVC_KEI_UCWK (Service Contract Details) table |
| `db_KU_T_SETTE_KOJI` | JBSbatSQLAccess | DB access class for KU_T_SETTE_KOJI (Set Work Order) table |
| `db_KK_T_KJ_CL_WK` | JBSbatSQLAccess | DB access class for KK_T_KJ_CL_WK (Work Cancellation Work) table |
| `db_KK_T_KJ_FIN_WK` | JBSbatSQLAccess | DB access class for KK_T_KJ_FIN_WK (Work Completion Work) table |
| `logPrint` | JBSbatLogUtil | Debug log utility (inherited) |

## 4. CRUD Operations / Called Services

### Pre-computed evidence from code analysis:

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `JBSbatKKCourseChgeTstaDayChsht.searchIdoRsvInfo` | - | KK_T_IDO_RSV | Reads change reservation records matching operational date |
| R | `JBSbatKKCourseChgeTstaDayChsht.executeKK_T_SVKEI_EXC_CTRL_PKSELECT` | - | KK_T_SVKEI_EXC_CTRL | Reads service contract exclusion control by svcKeiNo (PK) |
| R | `JBSbatKKCourseChgeTstaDayChsht.executeKK_T_MSKM_DTL_KK_SELECT_031` | - | KK_T_MSKM_DTL | Reads application detail by mskmDtlNo (used for address change) |
| R | `JBSbatKKCourseChgeTstaDayChsht.selectMskmDtlKojiAk` | - | KU_T_MSKM_DTL_KOJIAK | Reads work order number from application detail |
| R | `JBSbatKKCourseChgeTstaDayChsht.selectKojiAk` | - | KU_T_KOJIAK | Reads work order details by kojiakNo |
| R | `JBSbatKKCourseChgeTstaDayChsht.selectSeteKj` | - | KU_T_SETTE_KOJI | Reads set work order details |
| R | `JBSbatKKCourseChgeTstaDayChsht.selectKktKjClWk` | - | KK_T_KJ_CL_WK | Reads work cancellation work data |
| R | `JBSbatKKCourseChgeTstaDayChsht.selectKktKjFinWk` | - | KK_T_KJ_FIN_WK | Reads work completion work data |
| R | `JBSbatKKCourseChgeTstaDayChsht.selectIdoRsv` | - | KK_T_IDO_RSV | Reads change reservation details for non-Tel/Tv services |
| R | `JBSbatKKCourseChgeTstaDayChsht.selectKktSvKeiUw` | - | KK_T_SVC_KEI_UCWK | Reads service contract details |
| R | `JBSbatKKCourseChgeTstaDayChsht.searchIdoRsvPplanInfo` | - | KK_T_IDO_RSV | Reads TV plan change reservation records for night processing |
| R | `JBSbatKKCourseChgeTstaDayChsht.searchKjFinWk` | - | KK_T_KJ_FIN_WK | Reads work completion work by svcKeiUcwkNo |
| - | `JBSbatKKCourseChgeTstaDayChsht.alartKojiTeisei` | - | - | Issues work order adjustment alarm (scheduled correction/cancellation) |
| - | `JBSbatKKCourseChgeTstaDayChsht.isNotTelCrsChgTaisho` | - | - | Checks if record is not a phone course change target |
| - | `JBSbatKKGetCTITelno.addOutMapList` | - | - | Adds output map to outputBean |
| - | `JBSbatKKGetCTITelno.addOutMapList_2` | - | - | Adds secondary output map to outputBean |
| - | `JACBatCommon.printDebugLog` | JACBatCommon | - | Prints debug log messages |
| - | `JBSbatDateUtil.adjustDate` | JBSbatDateUtil | - | Adjusts date by N days |
| - | `JBSbatStringUtil.Rtrim` | JBSbatStringUtil | - | Right-trims whitespace from strings |
| - | `JBSbatKKIFM151` | JBSbatKKIFM151 | - | Interface definition class for output data structure (KOJI_RSLT, SVC_KEI_NO, etc.) |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Batch: KoptBatch Framework | `BatchFramework.invoke` -> `JBSbatBusinessService.execute` -> `JBSbatKKCourseChgeTstaDayChsht.execute` | `searchIdoRsvInfo [R] KK_T_IDO_RSV` |
| 2 | Batch: KoptBatch Framework | `BatchFramework.invoke` -> `JBSbatBusinessService.execute` -> `JBSbatKKCourseChgeTstaDayChsht.execute` | `searchIdoRsvPplanInfo [R] KK_T_IDO_RSV` |

**Note:** This is a batch service class that is invoked by the K-Opticom operational batch framework. The `fleeItemArray` (freeItem) parameter is provided by the batch runtime configuration, not from a web screen. It is split from `super.freeItem` in the parent class initialization. No direct screen callers (KKSV*) were found in the codebase - this is a pure batch entry point.

## 6. Per-Branch Detail Blocks

**Block 1** — [SET] Variable Initialization (L310)

> Initialize the output bean and all local string variables.

| # | Type | Code |
|---|------|------|
| 1 | SET | `outputBean = new JBSbatOutputItem()` |
| 2 | SET | `svcKeiNo = ""` // Service Contract Number |
| 3 | SET | `idoRsvNo = ""` // Change Reservation Number |
| 4 | SET | `updDtm1 = ""` // Update DateTime 1 |
| 5 | SET | `svcCd = ""` // Service Code |
| 6 | SET | `mskmDtlNo = ""` // Application Detail Number |
| 7 | SET | `idoDiv = ""` // Change Division |
| 8 | SET | `kojiakNo = ""` // Work Order Case Number |
| 9 | SET | `kojiAkSbtCd = ""` // Work Order Sub Type Code |
| 10 | SET | `newPrcGrpCd = ""` // New Billing Group Code |
| 11 | SET | `rsvAplyYmd = ""` // Reservation Application Date |
| 12 | SET | `opeDateStr = ""` // Operational Date |
| 13 | SET | `svcKeiUcwkNo = ""` // Service Contract Detail Number |
| 14 | SET | `idoRsvKojiakNo = ""` // Work Order Case Number (Change Reservation) |
| 15 | SET | `kojiakStat = ""` // Work Order Status |
| 16 | SET | `mansKojiakStatCd = ""` // Maintenance Work Order Status Code |
| 17 | SET | `kojiRslt = ""` // Work Result |
| 18 | SET | `kjFinYmd = ""` // Work Completion Date |
| 19 | SET | `svcKeiStat = ""` // Service Contract Status |
| 20 | SET | `idoRsvDtlCd = ""` // Change Reservation Detail Code |
| 21 | SET | `kojiAkStpCancelPrcUm = ""` // Work Order Cancel Presence |
| 22 | SET | `idoRsvStatCd = ""` // Change Reservation Status Code |
| 23 | SET | `uk_ido_div = ""` // Work Reception Contract Change Division |
| 24 | SET | `newPcrsCd = ""` // New Billing Course Code |
| 25 | SET | `oldPcrsCd = ""` // Old Billing Course Code |
| 26 | SET | `newPplanCd = ""` // New Plan Course Code |
| 27 | SET | `oldPplanCd = ""` // Old Plan Course Code |

**Block 2** — [CALL] Fetch Change Reservation Records (L329)

> Read all change reservation records matching the operational date.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `idoRsvInfoList = searchIdoRsvInfo()` |
| 2 | SET | `for(int i = 0; i < idoRsvInfoList.size(); i++)` |

**Block 3** — [FOR_LOOP] Record Iteration (L335)

> For each change reservation record, extract fields and process.

| # | Type | Code |
|---|------|------|
| 1 | SET | `outmap = new JBSbatServiceInterfaceMap()` |
| 2 | SET | `dbInfo = idoRsvInfoList.get(i)` |
| 3 | SET | `svcKeiNo = Rtrim(dbInfo.getString(JBSbatKK_T_IDO_RSV.SVC_KEI_NO))` |
| 4 | SET | `idoRsvNo = Rtrim(dbInfo.getString(JBSbatKK_T_IDO_RSV.IDO_RSV_NO))` |
| 5 | SET | `updDtm1 = Rtrim(dbInfo.getString(JBSbatKK_T_IDO_RSV.UPD_DTM))` |
| 6 | SET | `svcCd = Rtrim(dbInfo.getString(JBSbatKK_T_SVC_KEI.SVC_CD))` |
| 7 | SET | `mskmDtlNo = Rtrim(dbInfo.getString(JBSbatKK_T_IDO_RSV.MSKM_DTL_NO))` |
| 8 | SET | `idoDiv = Rtrim(dbInfo.getString(JBSbatKK_T_IDO_RSV.IDO_DIV))` |
| 9 | SET | `newPrcGrpCd = Rtrim(dbInfo.getString(JBSbatKK_T_IDO_RSV.NEW_PRC_GRP_CD))` |
| 10 | SET | `rsvAplyYmd = Rtrim(dbInfo.getString(JBSbatKK_T_IDO_RSV.RSV_APLY_YMD))` |
| 11 | SET | `opeDateStr = this.opeDate` |
| 12 | SET | `idoRsvKojiakNo = Rtrim(dbInfo.getString(JBSbatKK_T_IDO_RSV.KOJIAK_NO))` |
| 13 | SET | `svcKeiStat = Rtrim(dbInfo.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_STAT))` |
| 14 | SET | `idoRsvDtlCd = Rtrim(dbInfo.getString(JBSbatKK_T_IDO_RSV.IDO_RSV_DTL_CD))` |
| 15 | SET | `idoRsvStatCd = Rtrim(dbInfo.getString(JBSbatKK_T_IDO_RSV.IDO_RSV_STAT_CD))` |
| 16 | SET | `newPcrsCd = Rtrim(dbInfo.getString(JBSbatKK_T_IDO_RSV.NEW_PCRS_CD))` |
| 17 | SET | `oldPcrsCd = Rtrim(dbInfo.getString(JBSbatKK_T_IDO_RSV.OLD_PCRS_CD))` |
| 18 | SET | `newPplanCd = Rtrim(dbInfo.getString(JBSbatKK_T_IDO_RSV.NEW_PPLAN_CD))` |
| 19 | SET | `oldPplanCd = Rtrim(dbInfo.getString(JBSbatKK_T_IDO_RSV.OLD_PPLAN_CD))` |

**Block 4** — [CALL] Query Service Contract Exclusion Control (L355)

> Validate that the service contract exists in the exclusion control table.

| # | Type | Code |
|---|------|------|
| 1 | SET | `whereParam = {svcKeiNo}` |
| 2 | CALL | `svcKeiExcCtrl_map = executeKK_T_SVKEI_EXC_CTRL_PKSELECT(whereParam)` |

**Block 5** — [IF] Exclusion Control Record Missing (L357)

> [CD00576: "Service Contract Exclusion Control"] If no record found, throw business exception.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (null == svcKeiExcCtrl_map)` |
| 2 | EXEC | `logPrint.printDebugLog("Service Contract Exclusion Control does not exist.")` |
| 3 | EXEC | `throw new JBSbatBusinessException("EKKB0210CE", new String[]{"Service Contract Exclusion", "Service Contract Number: " + svcKeiNo})` |

**Block 6** — [IF] Debug Mode Logging (L363)

> Log service contract exclusion and change reservation details if debug mode is enabled.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (logPrint.chkLogLevel(JBSbatLogUtil.MODE_DEBUG))` |
| 2 | EXEC | `logPrint.printDebugLog("Service Contract Exclusion. Last Update DateTime: " + Rtrim(svcKeiExcCtrl_map.getString(JBSbatKK_T_SVKEI_EXC_CTRL.LAST_UPD_DTM)))` |
| 3 | EXEC | `logPrint.printDebugLog("Change Reservation Search (Service Contract Number): " + svcKeiNo)` |
| 4 | EXEC | `logPrint.printDebugLog("Change Reservation Search (Change Reservation Number): " + idoRsvNo)` |
| 5 | EXEC | `logPrint.printDebugLog("Change Reservation Search (Update DateTime 1): " + updDtm1)` |
| 6 | EXEC | `logPrint.printDebugLog("Change Reservation Search (Service Code): " + svcCd)` |
| 7 | EXEC | `logPrint.printDebugLog("Change Reservation Search (Application Detail Number): " + mskmDtlNo)` |
| 8 | EXEC | `logPrint.printDebugLog("Change Reservation Search (Change Division): " + idoDiv)` |
| 9 | EXEC | `logPrint.printDebugLog("Change Reservation Search (New Billing Group Code): " + newPrcGrpCd)` |
| 10 | EXEC | `logPrint.printDebugLog("Change Reservation Search (Reservation Application Date): " + rsvAplyYmd)` |
| 11 | EXEC | `logPrint.printDebugLog("Operational Date: " + opeDateStr)` |
| 12 | EXEC | `logPrint.printDebugLog("Change Reservation Search (Work Order Case Number): " + idoRsvKojiakNo)` |
| 13 | EXEC | `logPrint.printDebugLog("Change Reservation Search (Service Contract Status): " + svcKeiStat)` |
| 14 | EXEC | `logPrint.printDebugLog("Change Reservation Search (Change Reservation Detail Code): " + idoRsvDtlCd)` |
| 15 | EXEC | `logPrint.printDebugLog("Change Reservation Search (New Billing Course Code): " + newPcrsCd)` |
| 16 | EXEC | `logPrint.printDebugLog("Change Reservation Search (Old Billing Course Code): " + oldPcrsCd)` |

**Block 7** — [IF] Non-Target Phone Course Change Filter (L378)

> [OM-2014-0000105] Filter out records that are not phone course change targets.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (isNotTelCrsChgTaisho(svcCd, newPcrsCd, oldPcrsCd, newPplanCd, oldPplanCd))` |
| 2 | EXEC | `continue` |

**Block 8** — [IF] Course Change Type Processing (idoDiv = "00009") (L390)

> [CD00576: "00009" = Course Change] For course change records, check if both new and old billing course codes are STB-requiring codes (A38, A39, A64) and skip if both are.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (CD00576_IDO_DIV_00009.equals(idoDiv))` |
| 2 | IF | `if (PCRS_CD_COSE_SD.equals(newPcrsCd) OR PCRS_CD_COSE_HD.equals(newPcrsCd) OR PCRS_CD_EOH_TV_SAISO_TACH_SD.equals(newPcrsCd) OR PCRS_CD_EOH_TV_SAISO_TACH_HD.equals(newPcrsCd))` |
| 3 | IF | `if (PCRS_CD_COSE_SD.equals(oldPcrsCd) OR PCRS_CD_COSE_HD.equals(oldPcrsCd) OR PCRS_CD_EOH_TV_SAISO_TACH_SD.equals(oldPcrsCd) OR PCRS_CD_EOH_TV_SAISO_TACH_HD.equals(oldPcrsCd))` |
| 4 | EXEC | `continue` // Both new and old are STB-requiring codes - skip processing |
| 5 | ELSE | // Only new is STB-requiring - continue processing |

**Block 9** — [IF] Address Change Processing (idoDiv = "00019") (L408)

> [CD00576: "00019" = Address Change/Registration] For address change records, query application details and work order info, then prepare output.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (CD00576_IDO_DIV_00019.equals(idoDiv))` |
| 2 | CALL | `executeKK_T_MSKM_DTL_KK_SELECT_031(new Object[]{mskmDtlNo})` |
| 3 | SET | `dbMapAdChgDtl = db_KK_T_MSKM_DTL.selectNext()` |
| 4 | IF | `if (null == dbMapAdChgDtl)` |
| 5 | EXEC | `continue` // Address change confirmation info not found |
| 6 | CALL | `kojiakNo = selectMskmDtlKojiAk(mskmDtlNo)` |
| 7 | IF | `if (isEmpty(kojiakNo))` |
| 8 | EXEC | `logPrint.printBusinessErrorLog("EKKB0290AW", ...)` // Work order case info not found warning |
| 9 | EXEC | `continue` |
| 10 | SET | `chafSkbtNo = Rtrim(dbMapAdChgDtl.getString(JBSbatKK_T_ADCHG_DTL.CHAF_SKBT_NO))` |
| 11 | SET | `outmap.setString(JBSbatKKIFM151.SVC_KEI_NO, svcKeiNo)` // Service Contract Number |
| 12 | SET | `outmap.setString(JBSbatKKIFM151.UPD_DTM, lastUpdDtmStr)` // Update DateTime |
| 13 | SET | `outmap.setString(JBSbatKKIFM151.IDO_RSV_NO, idoRsvNo)` // Change Reservation Number |
| 14 | SET | `outmap.setString(JBSbatKKIFM151.UPD_DTM1, updDtm1)` // Update DateTime 1 |
| 15 | SET | `outmap.setString(JBSbatKKIFM151.SVC_CD, svcCd)` // Service Code |
| 16 | SET | `outmap.setString(JBSbatKKIFM151.MSKM_DTL_NO, mskmDtlNo)` // Application Detail Number |
| 17 | SET | `outmap.setString(JBSbatKKIFM151.IDO_DIV, idoDiv)` // Change Division |
| 18 | SET | `outmap.setString(JBSbatKKIFM151.NEW_PRC_GRP_CD, newPrcGrpCd)` // New Billing Group Code |
| 19 | SET | `outmap.setString(JBSbatKKIFM151.SVC_KEI_STAT, svcKeiStat)` // Service Contract Status |
| 20 | SET | `outmap.setString(JBSbatKKIFM151.IDO_RSV_DTL_CD, idoRsvDtlCd)` // Change Reservation Detail Code |
| 21 | SET | `outmap.setString(JBSbatKKIFM151.OLD_PPLAN_CD, oldPplanCd)` // Old Plan Course Code |
| 22 | SET | `outmap.setString(JBSbatKKIFM151.NEW_PCRS_CD, newPcrsCd)` // New Billing Course Code |
| 23 | SET | `outmap.setString(JBSbatKKIFM151.OLD_PCRS_CD, oldPcrsCd)` // Old Billing Course Code |
| 24 | SET | `outmap.setString(JBSbatKKIFM151.KOJI_RSLT, "1")` // Work Result -> "1: Work Completed" |
| 25 | SET | `outmap.setString(JBSbatKKIFM151.KOJIAK_NO, kojiakNo)` // Work Order Case Number |
| 26 | SET | `outmap.setString(JBSbatKKIFM151.KOJIAK_FIN_YMD, chafSkbtNo)` // Work Completion Date |

**Block 10** — [IF] Non-Mobile Plan Group Processing (newPrcGrpCd != "08") (L428)

> [PGRP_MOB_08: "08" = eo Mobile] For non-Mobile plan groups, if service code is "01" (Internet), query change reservation and service contract details.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (!PGRP_MOB_08.equals(newPrcGrpCd))` |
| 2 | IF | `if (SVC_CD_IN_SVC.equals(svcCd))` // Service Code = "01" Internet Service |
| 3 | SET | `svcKeiUcwkNo = ""` |
| 4 | CALL | `svcKeiUcwkNo = selectIdoRsv(outmap, mskmDtlNo)` |
| 5 | CALL | `selectKktSvKeiUw(outmap, svcKeiNo, svcKeiUcwkNo)` |

**Block 11** — [IF] eo Mobile Plan Group (newPrcGrpCd = "08") (L448)

> [PGRP_MOB_08: "08" = eo Mobile] For eo Mobile, only process reservations with status "03: Reservation Processing" and application date within one day of operational date.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (PGRP_MOB_08.equals(newPrcGrpCd))` |
| 2 | IF | `if (!CD01168_IDO_RSV_STAT_CD_03.equals(idoRsvStatCd))` // Not Reservation Processing |
| 3 | EXEC | `continue` |
| 4 | IF | `if (0 == rsvAplyYmd.length())` |
| 5 | EXEC | `throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0090TE, new String[]{"Reservation Application Date"})` |
| 6 | IF | `if (Integer.parseInt(rsvAplyYmd) <= Integer.parseInt(JBSbatDateUtil.adjustDate(opeDateStr, 1)))` |
| 7 | SET | Build outmap with all fields |
| 8 | SET | `outmap.setString(JBSbatKKIFM151.KOJI_RSLT, "6")` // Work Result -> "6: Mobile" |
| 9 | SET | `outmap.setOutFlg(true)` |
| 10 | EXEC | `outputBean.addOutMapList(outmap)` |
| 11 | ELSE | `continue` // Not yet due for application |

**Block 12** — [ELSE] Non-Mobile Plan Group Processing (L508)

> [PGRP_TEL: "10" = eo Light Phone] For non-Mobile plan groups, check if eo Light Phone and process accordingly.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (PGRP_TEL.equals(newPrcGrpCd))` // eo Light Phone |
| 2 | IF | `if (!CD00576_IDO_DIV_00019.equals(idoDiv))` // Not address change |
| 3 | EXEC | `continue` |
| 4 | IF | `if (0 == rsvAplyYmd.length())` |
| 5 | EXEC | `throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0090TE, new String[]{"Reservation Application Date"})` |
| 6 | IF | `if (!"20991231".equals(rsvAplyYmd))` |
| 7 | CALL | `alartKojiTeisei(svcKeiNo, idoRsvNo, mskmDtlNo, rsvAplyYmd, idoRsvKojiakNo)` |
| 8 | EXEC | `continue` // Not work-completion-scheduled, skip |

**Block 13** — [IF] Work Order Case Exists (idoRsvKojiakNo not empty) (L535)

> When the change reservation has a work order case number, query work order details and branch on work order sub type and status.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (!isEmpty(idoRsvKojiakNo))` |
| 2 | CALL | `kojiAkMap_009 = selectKojiAk(idoRsvKojiakNo)` |
| 3 | SET | `kojiakStat = Rtrim(kojiAkMap_009.getString(JBSbatKU_T_KOJIAK.KOJIAK_STAT))` |
| 4 | SET | `kojiAkSbtCd = Rtrim(kojiAkMap_009.getString(JBSbatKU_T_KOJIAK.KOJIAK_SBT_CD))` |
| 5 | SET | `uk_ido_div = Rtrim(kojiAkMap_009.getString(JBSbatKU_T_KOJIAK.KOJI_UK_OPTNTY_IDO_DIV))` |
| 6 | SET | `mansKojiakStatCd = Rtrim(kojiAkMap_009.getString(JBSbatKU_T_KOJIAK.MANS_KOJIAK_STAT_CD))` |
| 7 | IF | `if (KOJIAK_SBT_CD_PLAN_CHG_KOJI_NON.equals(kojiAkSbtCd))` // "010" Plan Change No Work |
| 8 | CALL | `selectSeteKj(outmap, idoRsvKojiakNo)` |
| 9 | SET | `outmap.setString(JBSbatKKIFM151.KOJIAK_NO, idoRsvKojiakNo)` |
| 10 | ELSE IF | `if (CD00474_KOJIAK_STAT_200.equals(kojiakStat) OR (CD00474_KOJIAK_STAT_120.equals(kojiakStat) AND CD01651_MANS_KOJIAK_STAT_CD_200.equals(mansKojiakStatCd)))` // Work Completed |
| 11 | SET | `kojiRslt = KKIFM151_KOJI_RSLT_1` // "1: Work Completed" |
| 12 | SET | `kjFinYmd = Rtrim(kojiAkMap_009.getString(JBSbatKU_T_KOJIAK.KOJIAK_JSSI_YMD))` |
| 13 | SET | `outmap.setString(JBSbatKKIFM151.KOJI_RSLT, kojiRslt)` |
| 14 | SET | `outmap.setString(JBSbatKKIFM151.KOJIAK_FIN_YMD, kjFinYmd)` |
| 15 | SET | `outmap.setString(JBSbatKKIFM151.KOJIAK_NO, idoRsvKojiakNo)` |
| 16 | ELSE IF | `if ((CD00474_KOJIAK_STAT_900.equals(kojiakStat) OR (CD00474_KOJIAK_STAT_120.equals(kojiakStat) AND CD01651_MANS_KOJIAK_STAT_CD_900.equals(mansKojiakStatCd))) AND !(KOJIAK_SBT_CD_ADCHG_NEWESTA.equals(kojiAkSbtCd) AND (CD00576_IDO_DIV_00019.equals(uk_ido_div) AND KOJIAK_SBT_CD_NEWESTA.equals(kojiAkSbtCd))))` // Work Cancelled |
| 17 | SET | `kojiRslt = KKIFM151_KOJI_RSLT_4` // "4: Work Cancelled" |
| 18 | SET | `kjFinYmd = Rtrim(kojiAkMap_009.getString(JBSbatKU_T_KOJIAK.KOJIAK_CANCEL_YMD))` |
| 19 | SET | `kojiAkStpCancelPrcUm = Rtrim(kojiAkMap_009.getString(JBSbatKU_T_KOJIAK.KOJIAK_STP_CANCEL_PRC_UM))` |
| 20 | SET | `outmap.setString(JBSbatKKIFM151.KOJI_RSLT, kojiRslt)` |
| 21 | SET | `outmap.setString(JBSbatKKIFM151.KOJIAK_FIN_YMD, kjFinYmd)` |
| 22 | SET | `outmap.setString(JBSbatKKIFM151.KOJIAK_STP_CANCEL_PRC_UM, kojiAkStpCancelPrcUm)` |
| 23 | SET | `outmap.setString(JBSbatKKIFM151.KOJIAK_NO, idoRsvKojiakNo)` |

**Block 14** — [ELSE] Work Order Case Empty (idoRsvKojiakNo empty) (L658)

> When no work order case number exists in the change reservation, query work order case from application detail. Also check NTT withdrawal course codes (v73.00.00).

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (nttOrsPcrsList.contains(newPcrsCd))` // NTT withdrawal course codes |
| 2 | EXEC | `continue` |
| 3 | CALL | `kojiakNo = selectMskmDtlKojiAk(mskmDtlNo)` |
| 4 | IF | `if (isEmpty(kojiakNo))` |
| 5 | EXEC | `continue` // Deleted warning log in v73.00.00 |
| 6 | SET | `outmap.setString(JBSbatKKIFM151.SVC_KEI_NO, svcKeiNo)` |
| 7 | SET | `outmap.setString(JBSbatKKIFM151.UPD_DTM, lastUpdDtmStr)` |
| 8 | SET | `outmap.setString(JBSbatKKIFM151.IDO_RSV_NO, idoRsvNo)` |
| 9 | SET | `outmap.setString(JBSbatKKIFM151.UPD_DTM1, updDtm1)` |
| 10 | SET | `outmap.setString(JBSbatKKIFM151.SVC_CD, svcCd)` |
| 11 | SET | `outmap.setString(JBSbatKKIFM151.MSKM_DTL_NO, mskmDtlNo)` |
| 12 | SET | `outmap.setString(JBSbatKKIFM151.IDO_DIV, idoDiv)` |
| 13 | SET | `outmap.setString(JBSbatKKIFM151.KOJIAK_NO, kojiakNo)` |
| 14 | SET | `outmap.setString(JBSbatKKIFM151.NEW_PRC_GRP_CD, newPrcGrpCd)` |
| 15 | SET | `outmap.setString(JBSbatKKIFM151.SVC_KEI_STAT, svcKeiStat)` |
| 16 | SET | `outmap.setString(JBSbatKKIFM151.IDO_RSV_DTL_CD, idoRsvDtlCd)` |
| 17 | SET | `outmap.setString(JBSbatKKIFM151.OLD_PPLAN_CD, oldPplanCd)` |
| 18 | SET | `outmap.setString(JBSbatKKIFM151.NEW_PCRS_CD, newPcrsCd)` |
| 19 | SET | `outmap.setString(JBSbatKKIFM151.OLD_PCRS_CD, oldPcrsCd)` |
| 20 | IF | `if (logPrint.chkLogLevel(JBSbatLogUtil.MODE_DEBUG))` |
| 21 | EXEC | `logPrint.printDebugLog("Change Reservation Search (Work Order Case): " + kojiakNo)` |
| 22 | IF | `if (!SVC_CD_TEL_SVC.equals(svcCd) AND !SVC_CD_TV_SVC.equals(svcCd))` // Non-Tel/Tv |
| 23 | CALL | `svcKeiUcwkNo = selectIdoRsv(outmap, mskmDtlNo)` |
| 24 | CALL | `selectKktSvKeiUw(outmap, svcKeiNo, svcKeiUcwkNo)` |
| 25 | CALL | `kojiAkMap_009 = selectKojiAk(kojiakNo)` |
| 26 | SET | `kojiAkSbtCd = Rtrim(kojiAkMap_009.getString(JBSbatKU_T_KOJIAK.KOJIAK_SBT_CD))` |
| 27 | SET | `uk_ido_div = Rtrim(kojiAkMap_009.getString(JBSbatKU_T_KOJIAK.KOJI_UK_OPTNTY_IDO_DIV))` |
| 28 | IF | `if (KOJIAK_SBT_CD_PLAN_CHG_KOJI_NON.equals(kojiAkSbtCd))` // "010" Plan Change No Work |
| 29 | CALL | `selectSeteKj(outmap, kojiakNo)` |
| 30 | IF | `if (checkFlg)` |
| 31 | SET | `outmap.setOutFlg(true)` |
| 32 | EXEC | `outputBean.addOutMapList(outmap)` |
| 33 | ELSE IF | `if (!KOJIAK_SBT_CD_ADCHG_NEWESTA.equals(kojiAkSbtCd) AND !(CD00576_IDO_DIV_00019.equals(uk_ido_div) AND KOJIAK_SBT_CD_NEWESTA.equals(kojiAkSbtCd)))` |
| 34 | CALL | `kojiFinClInfFlag = selectKktKjClWk(outmap, svcKeiNo, kojiakNo)` |
| 35 | IF | `if (!kojiFinClInfFlag)` |
| 36 | CALL | `kojiFinClInfFlag = selectKktKjFinWk(outmap, svcKeiNo, kojiakNo)` |
| 37 | IF | `if (kojiFinClInfFlag)` |
| 38 | SET | `outmap.setOutFlg(true)` |
| 39 | EXEC | `outputBean.addOutMapList(outmap)` |

**Block 15** — [END_LOOP] Night Processing: TV Plan Change (L993)

> [TRAN_DIV_NIGHT: "1"] When processing division is night, process TV plan change reservation records separately.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (TRAN_DIV_NIGHT.equals(fleeItemArray[0]))` |
| 2 | CALL | `idoRsvPplanInfoList = searchIdoRsvPplanInfo()` |
| 3 | SET | `for(int i = 0; i < idoRsvPplanInfoList.size(); i++)` |
| 4 | SET | `outmap2 = new JBSbatServiceInterfaceMap()` |
| 5 | SET | `dbInfo = idoRsvPplanInfoList.get(i)` |
| 6 | SET | `svcKeiNo = Rtrim(dbInfo.getString(JBSbatKK_T_IDO_RSV.SVC_KEI_NO))` |
| 7 | SET | `idoRsvNo = Rtrim(dbInfo.getString(JBSbatKK_T_IDO_RSV.IDO_RSV_NO))` |
| 8 | SET | `svcKeiUcwkNo = Rtrim(dbInfo.getString(JBSbatKK_T_IDO_RSV.SVC_KEI_UCWK_NO))` |
| 9 | SET | `svcCd = Rtrim(dbInfo.getString(JBSbatKK_T_SVC_KEI.SVC_CD))` |
| 10 | CALL | `kjFinWk = searchKjFinWk(svcKeiUcwkNo)` |
| 11 | IF | `if (null != kjFinWk)` |
| 12 | SET | `kojiakNo = Rtrim(kjFinWk.getString(JBSbatKK_T_KJ_FIN_WK.KOJIAK_NO))` |
| 13 | SET | `kojiakFinYmd = Rtrim(kjFinWk.getString(JBSbatKK_T_KJ_FIN_WK.KOJIAK_JSSI_YMD))` |
| 14 | SET | `outmap2.setString(JBSbatKKIFM151.IDO_RSV_NO, idoRsvNo)` |
| 15 | SET | `outmap2.setString(JBSbatKKIFM151.SVC_KEI_NO, svcKeiNo)` |
| 16 | SET | `outmap2.setString(JBSbatKKIFM151.KOJIAK_NO, kojiakNo)` |
| 17 | SET | `outmap2.setString(JBSbatKKIFM151.SVC_CD, svcCd)` |
| 18 | SET | `outmap2.setString(JBSbatKKIFM151.KOJIAK_FIN_YMD, kojiakFinYmd)` |
| 19 | SET | `outmap2.setOutFlg(true)` |
| 20 | EXEC | `outputBean.addOutMapList_2(outmap2)` |

**Block 16** — [RETURN] Return Output (L1063)

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `logPrint.printDebugLog("execute_END")` |
| 2 | RETURN | `return outputBean` |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|-----------------|
| `svcKeiNo` | Field | Service Contract Number - internal identifier for a customer service contract line item |
| `svcKeiStat` | Field | Service Contract Status - current status of the service contract (e.g., 100: Service Provided, 910: Terminated) |
| `svcKeiUcwkNo` | Field | Service Contract Detail Number - internal tracking ID for service contract sub-items |
| `svcCd` | Field | Service Code - classifies the type of service (01: Internet, 02: Telephone, 03: Television) |
| `idoRsvNo` | Field | Change Reservation Number - identifier for a pending course change reservation |
| `idoRsvStatCd` | Field | Change Reservation Status Code - current state of the change reservation (00: Unreflected, 01: Reflected, 02: Cancelled, 03: Reservation Processing, 04: Out of Change Reservation Scope) |
| `idoRsvDtlCd` | Field | Change Reservation Detail Code - sub-type of change reservation (003: Course Change, 007: Service Termination, etc.) |
| `idoRsvKojiakNo` | Field | Work Order Case Number (from Change Reservation) - links a change reservation to a work order case |
| `idoDiv` | Field | Change Division - classifies the type of change (00009: Course Change, 00019: Address Change/Registration) |
| `kojiakNo` | Field | Work Order Case Number - internal identifier for a field work order case |
| `kojiakStat` | Field | Work Order Status - status of the work order (120: Registered, 200: Work Completed, 900: Cancelled) |
| `kojiAkSbtCd` | Field | Work Order Sub Type Code - type of work order (001: New Establishment, 003: Address Change (New), 010: Plan Change (No Work)) |
| `kojiRslt` | Field | Work Result - output work result code for the fulfillment record (1: Work Completed, 4: Work Cancelled, 6: Mobile) |
| `kjFinYmd` | Field | Work Completion Date - date when the work was completed (YYYYMMDD format) |
| `mansKojiakStatCd` | Field | Maintenance Work Order Status Code - maintenance-specific work order status code |
| `newPrcGrpCd` | Field | New Billing Group Code - the billing plan group after the change (08: eo Mobile, 10: eo Light Phone) |
| `newPcrsCd` | Field | New Billing Course Code - the specific billing course after the change (A38: SD Course, A39: HD Course, A64: EO Light TV Relay Dispatch HD Course) |
| `oldPcrsCd` | Field | Old Billing Course Code - the billing course before the change |
| `newPplanCd` | Field | New Plan Course Code - the billing plan after the change |
| `oldPplanCd` | Field | Old Plan Course Code - the billing plan before the change |
| `rsvAplyYmd` | Field | Reservation Application Date - the effective date when the course change should be applied (YYYYMMDD format) |
| `uk_ido_div` | Field | Work Reception Contract Change Division - the change division recorded in the work order case |
| `kojiAkStpCancelPrcUm` | Field | Work Order Cancel Presence - indicator of whether a work order was cancelled |
| `chafSkbtNo` | Field | Post-Change Identification Number (from Address Change Detail) - used as the work completion date for address change records |
| `kojiFinClInfFlag` | Field | Work Completion Cancel Information Flag - indicates whether work completion/cancellation information was found |
| SOD | Acronym | Service Order Data - telecom order fulfillment entity |
| FTTH | Business term | Fiber To The Home - fiber-optic internet service |
| STB | Acronym | Set-Top Box - hardware device for television signal processing |
| eo Mobile | Business term | eo Mobile - mobile phone billing plan group (Plan Group Code "08") |
| eo Light Phone | Business term | eo Light Phone - light phone service billing plan group (Plan Group Code "10") |
| eo TV | Business term | eo Light Television - television broadcasting service |
| SD Course | Business term | Standard Definition Course - billing course for SD video service (Code "A38") |
| HD Course | Business term | High Definition Course - billing course for HD video service (Code "A39") |
| KK_T_IDO_RSV | Table | Change Reservation Table - stores pending course change reservation records |
| KK_T_SVKEI_EXC_CTRL | Table | Service Contract Exclusion Control Table - controls which service contracts are eligible for course change processing |
| KK_T_SVC_KEI | Table | Service Contract Table - stores service contract master data |
| KK_T_MSKM_DTL | Table | Application Detail Table - stores application detail records |
| KK_T_ADCHG_DTL | Table | Address Change Detail Table - stores address change detail information |
| KK_T_SVC_KEI_UCWK | Table | Service Contract Details Table - stores service contract sub-item data |
| KU_T_KOJIAK | Table | Work Order Case Table - stores field work order case information |
| KU_T_MSKM_DTL_KOJIAK | Table | Application Detail Work Order Case Table - links application details to work order cases |
| KU_T_SETTE_KOJI | Table | Set Work Order Table - stores set work order information |
| KK_T_KJ_CL_WK | Table | Work Cancellation Work Table - stores work cancellation work data |
| KK_T_KJ_FIN_WK | Table | Work Completion Work Table - stores work completion work data |
| KKIFM151 | Interface | Output Interface Definition - defines the fields for the KKIFM1510006.csv output file |
| KK_SELECT_031 | SQL Key | SQL definition key for querying KK_T_MSKM_DTL by application detail number |
| KK_SELECT_002 | SQL Key | SQL definition key for querying KU_T_MSKM_DTL_KOJIAK |
| KK_SELECT_009 | SQL Key | SQL definition key for querying KU_T_KOJIAK |
| KK_SELECT_026 | SQL Key | SQL definition key for querying KK_T_KJ_FIN_WK |
| KK_SELECT_045 | SQL Key | SQL definition key for querying KK_T_IDO_RSV (TV plan change reservations) |
| KK_SELECT_097 | SQL Key | SQL definition key for querying KK_T_IDO_RSV (v26.00.00 ANK-3136-00-00) |
| EKKB0210CE | Error Code | Service Contract Exclusion Control not found - thrown when svcKeiNo is not in KK_T_SVKEI_EXC_CTRL |
| EKKB0090TE | Error Code | Reservation Application Date empty - thrown when rsvAplyYmd is blank |
| EKKB0290AW | Warning Code | Work Order Case Info Not Found - warning log when mskmDtlNo has no associated work order case |
| TRAN_DIV_NIGHT | Constant | Processing Division Night - when fleeItemArray[0] == "1", enables TV plan change secondary loop processing |
| TRAN_DIV_DT | Constant | Processing Division Day - when fleeItemArray[0] == "2", runs standard course change processing only |
| nttOrsPcrsList | Instance Field | List of NTT withdrawal course codes - filtered out in night processing (v73.00.00 ANK-4427-40-00) |
