---
title: "Business Logic — ValuesPicker.transform() [80 LOC]"
---

# Business Logic — ValuesPicker.transform() [80 LOC]

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

## 1. Role

### ValuesPicker.transform()

This method serves as a **data mapping transformer** that extracts discount and promotion (割引・Promotion) information from a CBS (CBS: Customer Billing System) message and normalizes it into a standardized `HashMap<String, String>` output. It implements the **Transformer design pattern**, taking a `CAANMsg` input envelope and producing a flat key-value map suitable for downstream screen binding or business logic consumption.

The method performs **conditional branching** based on the "Discount/Discriminated Judgment Code" (`WRIB_DCHS_HAMBET_CD`). When the code equals `"1"`, the method processes the record as a **discount service** (割引サービス), setting `kei_kind` to `"w"` (WRIB — 割引), and applies special date logic: if the start date (`staymd`) is a placeholder value of `20991231` (meaning "unspecified/infinite"), it calculates the actual start date as the day after the end date plus one. When the code is anything else, it processes the record as a **non-discount service** (非割引), setting `kei_kind` to `"d"` (HNSOKU — 非割引).

In the non-discount branch, an additional business rule handles **network-phone-TV three-way applications** (ネッ電話TV三点申込): if the service discount code equals `"DT0000002"`, the method clears both `staymd` (start date) and `endymd` (end date) to empty strings, as these services do not have fixed term start/end dates.

The method was refactored in **v5.00.20** to consolidate discount/promotion data retrieval into a single service IF (CBS message `EKK0451B011CBSMsg1List`), removing the need for a separate older message (`EKK0451B005CBSMsg1List`). A second refactoring in **v5.00.24** introduced the placeholder start date calculation logic to handle cases where the start date is not explicitly set.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["transform(CAANMsg in)"])

    START --> INIT["out = new HashMap()"]
    INIT --> READ_KEIKIND["Read WRIB_DCHS_HAMBET_CD from in"]
    READ_KEIKIND --> COND_DISCOUNT{"keiKind equals '1'"}

    COND_DISCOUNT -->|YES| DISCOUNT["Discount Service Branch"]
    COND_DISCOUNT -->|NO| NON_DISCOUNT["Non-Discount Service Branch"]

    DISCOUNT --> READ_DISCOUNT_DATES["Read STAYMD and ENDYMD from in"]
    READ_DISCOUNT_DATES --> COND_PLACEHOLDER{sYmd equals 20991231}

    COND_PLACEHOLDER -->|Yes| COND_END_VALID{eYmd valid and not 20991231}
    COND_PLACEHOLDER -->|No| SET_STAYMD_DIRECT["Set staymd = sYmd"]

    COND_END_VALID -->|Yes| CALC_STAYMD["sYmd = addDay(eYmd, 1)"]
    COND_END_VALID -->|No| SET_STAYMD_DIRECT

    CALC_STAYMD --> SET_STAYMD_DIRECT

    SET_STAYMD_DIRECT --> READ_DISCOUNT_FIELDS["Map output fields: no, kei_kind=WRIB, stat, stat_nm, type_cd, type_cd_nm, campaign_cd, campaign_nm, mskm_ymd, endymd, wrib_svc_cd, aply_jun_nm"]
    READ_DISCOUNT_FIELDS --> END_DISCOUNT["End discount branch"]

    NON_DISCOUNT --> READ_NONDISC_FIELDS["Map output fields: no, kei_kind=HNSOKU, stat, stat_nm, type_cd, type_cd_nm, campaign_cd, campaign_nm, mskm_ymd, staymd, endymd, wrib_svc_cd, aply_jun_nm"]

    READ_NONDISC_FIELDS --> COND_SPECIAL_SERVICE{WRISVC_DCHSKM_CD equals DT0000002}

    COND_SPECIAL_SERVICE -->|Yes| CLEAR_DATES["Set staymd and endymd to empty"]
    COND_SPECIAL_SERVICE -->|No| END_NONDISC["End non-discount branch"]

    CLEAR_DATES --> END_NONDISC
    END_DISCOUNT --> RETURN["Return out HashMap"]
    END_NONDISC --> RETURN

    RETURN --> END_END(["End"])
```

**Processing Summary:**

1. **Initialization**: Create a `HashMap` with `DEFAULT_HASH_SIZE` (typically 50) for the output.
2. **Branch Detection**: Read the discount discrimination judgment code (`WRIB_DCHS_HAMBET_CD`) from the input message. This determines whether the service is a discount type or non-discount type.
3. **Discount Branch** (keiKind == "1"): The `kei_kind` is set to `"w"` (割引/Discount). For the start date, if the system returned a placeholder end-of-range date (`20991231`), the actual start date is calculated as one day after the end date using `JPCDateUtil.addDay(eYmd, 1)`.
4. **Non-Discount Branch** (keiKind != "1"): The `kei_kind` is set to `"d"` (非割引/Non-Discount). The start date is read directly from the input. Additionally, if the service code is `"DT0000002"` (Network-Phone-TV three-way application), both start and end dates are cleared to empty strings.
5. **Common Field Mapping**: Both branches map the same set of output keys, differing only in `kei_kind`, `staymd` (in the discount branch, possibly adjusted), and `endymd` (potentially cleared in the non-discount special case).

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `in` | `CAANMsg` | A CBS (Customer Billing System) message envelope containing discount/promotion service contract data from the `EKK0451B011CBSMsg1List` schema. This message carries the full set of fields describing a discount or non-discount service line item, including the discrimination judgment code, service status, type codes, campaign information, dates, and service codes. |

**Input fields extracted from `in` (`EKK0451B011CBSMsg1List`):**

| Field | Business Description |
|-------|---------------------|
| `WRIB_DCHS_HAMBET_CD` | Discount/Discriminated Judgment Code — determines if this is a discount service (`"1"`) or non-discount service (other values) |
| `WRIBSVK_DCHSKMST_NO` | Discount Service Contract / Data Extraction Item Setup Number — internal sequence identifier for the service contract line item |
| `WRIBSVK_DCHSKMST_STAT` | Discount Service Contract / Data Extraction Item Setup Status — current operational status of the service contract (e.g., active, canceled) |
| `WRIBSVK_DCHSKMST_STAT_NM` | Discount Service Contract / Data Extraction Item Setup Status Name — human-readable display name for the status |
| `WRIB_DCHS_TYPE_CD` | Discount / Data Extraction Type Code — classifies the type of discount or service variation |
| `WRIB_DCHS_TYPE_CD_NM` | Discount / Data Extraction Type Code Name — human-readable display name for the type |
| `DSP_CAMPAIGN_DCHSKM_CD` | Display-use Campaign / Data Extraction Item Code — the campaign identifier used for display/screen purposes |
| `WRISVC_DCHSKM_CD` | Discount Service / Data Extraction Item Code — the specific discount service code (e.g., `"DT0000002"` for Network-Phone-TV three-way) |
| `WRISVC_DCHSKM_NM` | Discount Service / Data Extraction Item Name — human-readable name of the discount service |
| `MSKM_YMD` | Application Year-Month-Day — the year-month-date for application/booking |
| `SVC_CHRG_DCHSKMST_STAYMD` | Service Charge / Data Extraction Item Setup Start Year-Month-Day — the planned start date of the service charge period |
| `SVC_CHRG_DCHSKMST_ENDYMD` | Service Charge / Data Extraction Item Setup End Year-Month-Day — the planned end date of the service charge period |
| `APLY_JUN_NM` | Instant Application Flag Name — the flag name indicating whether the service application takes effect immediately |

**No instance fields or external state** are read by this method.

## 4. CRUD Operations / Called Services

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `JKKBatClarisAuthCrdt.isNullBlank` | - | - | Null/blank check on input message fields (utility call) |
| R | `JKKBatClearPassBase.isNullBlank` | - | - | Null/blank check on input message fields (utility call) |
| R | `JKKBatClearPassCrdt.isNullBlank` | - | - | Null/blank check on input message fields (utility call) |
| R | `JBSbatACEoElectPrcInfoTrkm.isNullBlank` | - | - | Null/blank check on input message fields (utility call) |
| R | `JBSbatACTrgtSvcKeiMake.isNullBlank` | - | - | Null/blank check on input message fields (utility call) |
| R | `JBSbatZMAdDataSet.getString` | - | - | `getString` call on data set (from pre-computed evidence) |
| R | `JCCBPCommon.getOpeDate` | - | - | Retrieves the operational date (from pre-computed evidence) |
| R | `JFUEoTvCngAddStbCC.getOpeDate` | - | - | Retrieves the operational date (from pre-computed evidence) |
| R | `JFUHikkosiNaviRelAddCC.getOpeDate` | - | - | Retrieves the operational date (from pre-computed evidence) |
| R | `JKKCreditAddCC.getOpeDate` | - | - | Retrieves the operational date (from pre-computed evidence) |
| R | `JESC0101B010TPMA.getString` | - | - | `getString` call on TPMA data (from pre-computed evidence) |
| R | `JESC0101B020TPMA.getString` | - | - | `getString` call on TPMA data (from pre-computed evidence) |
| R | `JKKModelCommon.getOpeDate` | - | - | Retrieves the operational date (from pre-computed evidence) |
| R | `SCW00701SFLogic.getName` | - | - | `getName` call on logic class (from pre-computed evidence) |
| C | `JPCDateUtil.addDay` | - | - | Adds a specified number of days to a date string (`YYYYMMDD` format) — used to calculate start date from end date |

**Detailed method calls within `transform()`:**

| CRUD | Method Call | Business Description |
|------|------------|---------------------|
| R | `in.getString(field)` | Reads a string field from the `CAANMsg` input envelope using the `EKK0451B011CBSMsg1List` schema key. Called 17 times per branch to extract all discount/promotion service fields. |
| R | `JKKStringUtil.isNullBlank(eYmd)` | Null/blank check utility to determine if the end date is a valid non-empty value. |
| C | `JPCDateUtil.addDay(eYmd, 1)` | Adds 1 day to the end date string (`YYYYMMDD` format) to compute the start date when the start date was left as a placeholder. This is the sole compute operation in the method. |
| - | `out.put(key, value)` | Maps extracted values into the output HashMap using string keys. Called 12 times per branch. |
| - | `JKKWribSvcKeiOperateCC.KeiKind.WRIB.getKeiKind()` | Returns `"w"` — the internal code representing a discount (割引) service type. |
| - | `JKKWribSvcKeiOperateCC.KeiKind.HNSOKU.getKeiKind()` | Returns `"d"` — the internal code representing a non-discount (非割引) service type. |

No direct SC/CBS or database entity access occurs within this method. It is purely a data-mapping layer between the CBS message envelope and the output HashMap.

## 5. Dependency Trace

### Direct Callers

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Batch: `JKKBatKKCashPostBase` | `JKKBatKKCashPostBase.execute()` -> `ValuesPicker.transform()` | `getString` [R], `keySet` [-] |
| 2 | Class: `Items` | `Items.map()` -> `ValuesPicker.transform()` | `getString` [R], `keySet` [-] |
| 3 | Screen: `JECNA0040001TPMA` | `JECNA0040001TPMA.invoke()` -> `ValuesPicker.transform()` | `getString` [R], `keySet` [-] |
| 4 | Screen: `JECNA0040002TPMA` | `JECNA0040002TPMA.invoke()` -> `ValuesPicker.transform()` | `getString` [R], `keySet` [-] |
| 5 | Screen: `JECNA0150001TPMA` | `JECNA0150001TPMA.callPost()` -> `ValuesPicker.transform()` | `getString` [R], `keySet` [-] |
| 6 | Screen: `JECNA0160001TPMA` | `JECNA0160001TPMA.callPost()` -> `ValuesPicker.transform()` | `getString` [R], `keySet` [-] |
| 7 | CC: `JKKejbKKA0010002SecProc` | `JKKejbKKA0010002SecProc.searchCredit()` -> `ValuesPicker.transform()` | `getString` [R] |
| 8 | CC: `JKKejbKKA001SecProc` | `JKKejbKKA001SecProc.shokaiOsrIrai()` -> `ValuesPicker.transform()` | `getString` [R] |
| 9 | CC: `JKKejbKKA0110001SecProc` | `JKKejbKKA0110001SecProc.execute()` -> `ValuesPicker.transform()` | `getString` [R] |
| 10 | Controller: `JCKCtrlCisInfoImpl` | `JCKCtrlCisInfoImpl.call_CIS()` -> `ValuesPicker.transform()` | `getString` [R], `keySet` [-] |
| 11 | Controller: `JCKCtrlCisInfoStubImpl` | `JCKCtrlCisInfoStubImpl.call_CIS()` -> `ValuesPicker.transform()` | `getString` [R], `keySet` [-] |
| 12 | Controller: `JCRCtrlTnInfoImpl` | `JCRCtrlTnInfoImpl.ctrlTnInfo_CRA0001()` -> `ValuesPicker.transform()` | `getString` [R], `keySet` [-] |
| 13 | Controller: `JKKCtrlMvnoSvcKeiInfoImpl` | `JKKCtrlMvnoSvcKeiInfoImpl.ctrlMvnoInfo_KKA0003()` -> `ValuesPicker.transform()` | `getString` [R], `keySet` [-] |
| 14 | Controller: `JZMCtrlCisInfoImpl` | `JZMCtrlCisInfoImpl.ctrlCisInfo_ZMA0001()` -> `ValuesPicker.transform()` | `getString` [R], `keySet` [-] |
| 15 | Controller: `JZMCtrlTrankInfoImpl` | `JZMCtrlTrankInfoImpl.call_TRANK()` -> `ValuesPicker.transform()` | `getString` [R], `keySet` [-] |

**Note:** `JFUXPathManager.getDomSize()` is also listed as a direct caller in the pre-computed data, suggesting usage in a related path-manipulation context.

## 6. Per-Branch Detail Blocks

### Block 1 — INIT (L17036)

> Initialize the output HashMap.

| # | Type | Code |
|---|------|------|
| 1 | SET | `out = new HashMap<String, String>(DEFAULT_HASH_SIZE)` // Create output map with default capacity (typically 50) |

### Block 2 — READ keiKind (L17053)

> Read the Discount/Discriminated Judgment Code from the input message. This determines which processing branch to follow.

| # | Type | Code |
|---|------|------|
| 1 | SET | `keiKind = in.getString(EKK0451B011CBSMsg1List.WRIB_DCHS_HAMBET_CD)` // Read discount discrimination judgment code |

### Block 3 — IF: Discount Branch (`"1".equals(keiKind)`) (L17054)

> Process as a discount service (割引サービス). The `kei_kind` is set to `"w"` (WRIB). Start date is computed from end date if it is a placeholder.

| # | Type | Code |
|---|------|------|
| 1 | SET | `sYmd = in.getString(EKK0451B011CBSMsg1List.SVC_CHRG_DCHSKMST_STAYMD)` // Read start date (v5.00.24 add) |
| 2 | SET | `eYmd = in.getString(EKK0451B011CBSMsg1List.SVC_CHRG_DCHSKMST_ENDYMD)` // Read end date (v5.00.24 add) |

#### Block 3.1 — IF: sYmd is placeholder (L17059)

> When the start date is a sentinel value meaning "not set", compute it from the end date.

| # | Type | Code |
|---|------|------|
| 1 | CONDITION | `"20991231".equals(sYmd)` [Placeholder value = "20991231"] |

##### Block 3.1.1 — ELSE-IF: eYmd is valid (L17060)

> If the start date is a placeholder AND the end date is a valid non-placeholder date, compute the actual start date as one day after the end date.

| # | Type | Code |
|---|------|------|
| 1 | CONDITION | `!JKKStringUtil.isNullBlank(eYmd)` [eYmd not null/blank] |
| 2 | CONDITION | `!"20991231".equals(eYmd)` [eYmd is not the end-of-range sentinel] |
| 3 | SET | `sYmd = JPCDateUtil.addDay(eYmd, 1)` [-> Compute: start date = end date + 1 day] |

#### Block 3.2 — Output field mapping for Discount branch (L17064–17079)

> Map all common output fields. The `kei_kind` is set to `"w"` (WRIB/割引), and `staymd` uses the potentially-adjusted `sYmd`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `out.put("no", in.getString(EKK0451B011CBSMsg1List.WRIBSVK_DCHSKMST_NO))` // Service contract setup number |
| 2 | SET | `out.put("kei_kind", JKKWribSvcKeiOperateCC.KeiKind.WRIB.getKeiKind())` [-> `"w"` (Discount)] |
| 3 | SET | `out.put("stat", in.getString(EKK0451B011CBSMsg1List.WRIBSVK_DCHSKMST_STAT))` // Service contract status |
| 4 | SET | `out.put("stat_nm", in.getString(EKK0451B011CBSMsg1List.WRIBSVK_DCHSKMST_STAT_NM))` // Status name |
| 5 | SET | `out.put("type_cd", in.getString(EKK0451B011CBSMsg1List.WRIB_DCHS_TYPE_CD))` // Discount type code |
| 6 | SET | `out.put("type_cd_nm", in.getString(EKK0451B011CBSMsg1List.WRIB_DCHS_TYPE_CD_NM))` // Type code name |
| 7 | SET | `out.put("campaign_cd", in.getString(EKK0451B011CBSMsg1List.DSP_CAMPAIGN_DCHSKM_CD))` // Campaign code |
| 8 | SET | `out.put("campaign_nm", in.getString(EKK0451B011CBSMsg1List.WRISVC_DCHSKM_NM))` // Campaign/service name |
| 9 | SET | `out.put("mskm_ymd", in.getString(EKK0451B011CBSMsg1List.MSKM_YMD))` // Application year-month-day |
| 10 | SET | `out.put("staymd", sYmd)` [-> Adjusted start date or original; v5.00.24 mod] |
| 11 | SET | `out.put("endymd", in.getString(EKK0451B011CBSMsg1List.SVC_CHRG_DCHSKMST_ENDYMD))` // End date |
| 12 | SET | `out.put("wrib_svc_cd", in.getString(EKK0451B011CBSMsg1List.WRISVC_DCHSKM_CD))` // Discount service code |
| 13 | SET | `out.put("aply_jun_nm", in.getString(EKK0451B011CBSMsg1List.APLY_JUN_NM))` // Instant application flag name |

### Block 4 — ELSE: Non-Discount Branch (L17080)

> Process as a non-discount service (非割引サービス). The `kei_kind` is set to `"d"` (HNSOKU). Start date is read directly without placeholder adjustment. An additional special rule applies for Network-Phone-TV three-way applications.

| # | Type | Code |
|---|------|------|
| 1 | SET | `out.put("no", in.getString(EKK0451B011CBSMsg1List.WRIBSVK_DCHSKMST_NO))` |
| 2 | SET | `out.put("kei_kind", JKKWribSvcKeiOperateCC.KeiKind.HNSOKU.getKeiKind())` [-> `"d"` (Non-Discount)] |
| 3 | SET | `out.put("stat", in.getString(EKK0451B011CBSMsg1List.WRIBSVK_DCHSKMST_STAT))` |
| 4 | SET | `out.put("stat_nm", in.getString(EKK0451B011CBSMsg1List.WRIBSVK_DCHSKMST_STAT_NM))` |
| 5 | SET | `out.put("type_cd", in.getString(EKK0451B011CBSMsg1List.WRIB_DCHS_TYPE_CD))` |
| 6 | SET | `out.put("type_cd_nm", in.getString(EKK0451B011CBSMsg1List.WRIB_DCHS_TYPE_CD_NM))` |
| 7 | SET | `out.put("campaign_cd", in.getString(EKK0451B011CBSMsg1List.DSP_CAMPAIGN_DCHSKM_CD))` |
| 8 | SET | `out.put("campaign_nm", in.getString(EKK0451B011CBSMsg1List.WRISVC_DCHSKM_NM))` |
| 9 | SET | `out.put("mskm_ymd", in.getString(EKK0451B011CBSMsg1List.MSKM_YMD))` |
| 10 | SET | `out.put("staymd", in.getString(EKK0451B011CBSMsg1List.SVC_CHRG_DCHSKMST_STAYMD))` |
| 11 | SET | `out.put("endymd", in.getString(EKK0451B011CBSMsg1List.SVC_CHRG_DCHSKMST_ENDYMD))` |
| 12 | SET | `out.put("wrib_svc_cd", in.getString(EKK0451B011CBSMsg1List.WRISVC_DCHSKM_CD))` |
| 13 | SET | `out.put("aply_jun_nm", in.getString(EKK0451B011CBSMsg1List.APLY_JUN_NM))` |

#### Block 4.1 — IF: Network-Phone-TV Three-way Application (L17090)

> For Network-Phone-TV three-way applications (ネッ電話TV三点申込), clear the start and end dates since these services do not have fixed term dates. [Ref: LT-2013-0000101対応分]

| # | Type | Code |
|---|------|------|
| 1 | SET | `TgHansoku = "DT0000002"` [-> Special service code for Network-Phone-TV three-way] |
| 2 | CONDITION | `TgHansoku.equals(in.getString(EKK0451B011CBSMsg1List.WRISVC_DCHSKM_CD))` [-> Service code equals DT0000002] |

##### Block 4.1.1 — IF True: Clear dates

| # | Type | Code |
|---|------|------|
| 1 | SET | `out.put("staymd", "")` // Clear start date |
| 2 | SET | `out.put("endymd", "")` // Clear end date |

### Block 5 — RETURN (L17113)

> Return the populated output HashMap containing all 12 mapped fields.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return out;` |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `WRIB_DCHS_HAMBET_CD` | Field | Discount/Discriminated Judgment Code — determines if this service line is a discount service (`"1"`) or non-discount service (other values). Core branching decision for this method. |
| `WRIBSVK_DCHSKMST_NO` | Field | Discount Service Contract / Data Extraction Item Setup Number — internal sequence/identifier for the service contract line item within the CBS message. |
| `WRIBSVK_DCHSKMST_STAT` | Field | Discount Service Contract / Data Extraction Item Setup Status — current status code of the service contract (e.g., active, pending, canceled). |
| `WRIBSVK_DCHSKMST_STAT_NM` | Field | Discount Service Contract / Data Extraction Item Setup Status Name — human-readable display name for the status code. |
| `WRIB_DCHS_TYPE_CD` | Field | Discount / Data Extraction Type Code — classifies the type of discount or promotional offer. |
| `WRIB_DCHS_TYPE_CD_NM` | Field | Discount / Data Extraction Type Code Name — human-readable display name for the discount type code. |
| `DSP_CAMPAIGN_DCHSKM_CD` | Field | Display-use Campaign / Data Extraction Item Code — campaign identifier used for screen display and promotion tracking. |
| `WRISVC_DCHSKM_CD` | Field | Discount Service / Data Extraction Item Code — the specific discount service product code (e.g., `"DT0000002"` for Network-Phone-TV three-way application). |
| `WRISVC_DCHSKM_NM` | Field | Discount Service / Data Extraction Item Name — human-readable name of the discount service product. |
| `MSKM_YMD` | Field | Application Year-Month-Day — the target year-month-date for service application or booking. |
| `SVC_CHRG_DCHSKMST_STAYMD` | Field | Service Charge / Data Extraction Item Setup Start Date — the start date of the service charge/billing period. |
| `SVC_CHRG_DCHSKMST_ENDYMD` | Field | Service Charge / Data Extraction Item Setup End Date — the end date of the service charge/billing period. |
| `APLY_JUN_NM` | Field | Instant Application Flag Name — the name of the flag indicating whether the service application takes effect immediately. |
| WRIB | Enum | 割引 (Discount) — internal code `"w"` for a discount/promotion service. |
| HNSOKU | Enum | 非割引 (Non-Discount) — internal code `"d"` for a standard non-discount service. |
| `20991231` | Constant | Sentinel/end-of-range date placeholder — indicates the start date has not been explicitly set; when encountered, the start date is computed as the day after the end date. |
| `DT0000002` | Constant | Network-Phone-TV Three-way Application Service Code — a special service where start and end dates are not applicable (cleared to empty). |
| CAANMsg | Type | Fujitsu's asynchronous messaging envelope used for CBS (Customer Billing System) inter-component communication. Carries typed fields accessible via `getString()`. |
| CBS | Acronym | Customer Billing System — the core billing and service contract management system in the K-Opticom telecommunications platform. |
| v5.00.20 | Change | Version refactoring that consolidated discount/promotion data retrieval into a single service IF (`EKK0451B011CBSMsg1List`), removing the previous dual-message approach. |
| v5.00.24 | Change | Version addition that introduced placeholder start date calculation logic to handle cases where the start date is left unspecified. |
| LT-2013-0000101 | Reference | Internal tracking ticket for the Network-Phone-TV three-way date clearing requirement. |
