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

| Field | Value |
|-------|-------|
| Fully Qualified Name | `com.fujitsu.futurity.bp.custom.common.CAANMsgMover` |
| Layer | CC/Common Component — inner class `WribSvcKeiMover` within `JKKWribSvcKeiOperateCC` |
| Module | `common` (Package: `com.fujitsu.futurity.bp.custom.common`) |

## 1. Role

### CAANMsgMover.transform()

This method implements the `Transformer<CAANMsg, HashMap<String, String>>` interface within the `WribSvcKeiMover` inner class of `JKKWribSvcKeiOperateCC`. Its purpose is to **extract and map discount service contract (wrib/svc_kei) data from an incoming CAANMsg message into a HashMap output structure** that downstream components can consume. The method handles two distinct discount service routes: **WRIB (Discount KM route, kei_kind="1")** and **HNSOKU (Discount route, kei_kind="2")**, each extracting fields from different message schemas but producing a unified output format.

In the WRIB route, the method includes a special date resolution logic introduced in v5.00.24: when the stay start date (`sYMd`) is set to the placeholder value `"20991231"`, the method calculates the actual effective start date as the day after the end date (`eYMd + 1 day`). This handles scenarios where the start date was deferred or not yet determined at message intake.

In the HNSOKU route, the method maps all fields directly without date adjustment. However, it contains an additional conditional branch for **Net Phone TV triple-play subscription (DT0000002)** cases — identified by the `WRISVC_DCHSKM_CD` field — where the start and end dates (`staymd`, `endymd`) are explicitly cleared to empty strings. This reflects the business rule that triple-play subscriptions do not have individual service start/end dates; the discount applies uniformly across bundled services.

The method is a shared utility called by multiple CBS (Call Back Service) entry points, batch processors, and item mapping pipelines via the `Transformer` pattern, making it a central data-shaping component in the discount service contract processing pipeline.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["transform(CAANMsg in)"])
    STEP1["Create out HashMap"]
    STEP2["Get keiKind from WRIB_DCHS_HAMBET_CD"]
    COND1{keiKind equals one}
    BRANCH1["kei_kind = WRIB Discount KM route"]
    STEP3["Get sYMd from SVC_CHRG_DCHSKMST_STAYMD"]
    STEP4["Get eYMd from SVC_CHRG_DCHSKMST_ENDYMD"]
    COND2{sYMd equals 20991231}
    COND3{eYMd not blank AND eYMd not equals 20991231}
    STEP5["sYMd = eYMd plus 1 day"]
    STEP6["Populate out map with DCHS_KM fields"]
    BRANCH2["kei_kind = HNSOKU Discount route"]
    STEP7["Populate out map with DCHS fields"]
    STEP8["Get wribSvcCd from WRISVC_DCHSKM_CD"]
    COND4{wribSvcCd equals DT0000002}
    STEP9["Clear staymd and endymd"]
    END_RETURN(["Return out HashMap"])
    START --> STEP1
    STEP1 --> STEP2
    STEP2 --> COND1
    COND1 --> trueLabel --> BRANCH1
    BRANCH1 --> STEP3
    STEP3 --> STEP4
    STEP4 --> COND2
    COND2 --> sYMdYes --> COND3
    COND2 --> sYMdNo --> STEP6
    COND3 --> eYMdYes --> STEP5
    COND3 --> eYMdNo --> STEP6
    STEP5 --> STEP6
    COND1 --> falseLabel --> BRANCH2
    BRANCH2 --> STEP7
    STEP7 --> STEP8
    STEP8 --> COND4
    COND4 --> yesLabel --> STEP9
    COND4 --> noLabel --> END_RETURN
    STEP6 --> END_RETURN
    STEP9 --> END_RETURN
```

**Processing Summary:**

1. **Initialization** — Creates an output HashMap with default capacity of 50 entries.
2. **Route determination** — Reads `keiKind` from the input message's `WRIB_DCHS_HAMBET_CD` field. This determines whether the discount service contract is a WRIB (discount KM) or HNSOKU (general discount) type.
3. **WRIB branch (keiKind == "1")** — Reads a subset of fields from the DCHS_KM (discount schedule master) message schema. Applies special date handling: if `sYMd` is the placeholder `"20991231"`, calculates `sYMd` as `eYMd + 1` (provided `eYMd` is valid).
4. **HNSOKU branch (keiKind != "1")** — Reads the same fields but with `kei_kind` set to `HNSOKU`. No date adjustment is applied; all fields are taken directly from the input message.
5. **Triple-play check (HNSOKU only)** — If `wribSvcCd` equals `DT0000002` (Net Phone TV triple-play), both `staymd` and `endymd` are cleared to empty strings, overriding the values set in step 7.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `in` | `CAANMsg` | The incoming message containing discount service contract (wrib/svc_kei) data. This is a CAAN message schema object that carries fields such as the discount service type (`WRIB_DCHS_HAMBET_CD`), schedule master identifiers, service codes, campaign information, and date ranges. The message structure varies depending on which CBS (Call Back Service) produced it — either the DCHS_KM (discount KM) schema or the general DCHS schema. |
| 2 | `DEFAULT_HASH_SIZE` | `int` (static field) | Default capacity for the output HashMap, set to 50. This is an internal implementation constant. |

### External State / Dependencies

| Field | Description |
|-------|-------------|
| `JKKWribSvcKeiOperateCC.KeiKind.WRIB.getKeiKind()` | Returns `"1"` — the key indicator for the discount KM (kei kind = service type classification) route |
| `JKKWribSvcKeiOperateCC.KeiKind.HNSOKU.getKeiKind()` | Returns `"2"` — the key indicator for the general discount route |
| `JPCDateUtil.addDay(String ymd, int days)` | Static utility method used in v5.00.24 to calculate `sYMd = eYMd + 1 day` for WRIB date placeholder resolution |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `JKKBatClarisAuthCrdt.isNullBlank` | - | - | Utility null/blank check (called indirectly by callers) |
| - | `JKKBatClearPassBase.isNullBlank` | - | - | Utility null/blank check (called indirectly by callers) |
| - | `JKKBatClearPassCrdt.isNullBlank` | - | - | Utility null/blank check (called indirectly by callers) |
| - | `JBSbatACEoElectPrcInfoTrkm.isNullBlank` | - | - | Utility null/blank check (called indirectly by callers) |
| - | `JBSbatACTrgtSvcKeiMake.isNullBlank` | - | - | Utility null/blank check (called indirectly by callers) |
| R | `JBSbatFUCaseFileRnkData.getString` | - | - | Reads a field (called indirectly by callers) |
| R | `JBSbatFUMoveNaviData.getString` | - | - | Reads a field (called indirectly by callers) |
| - | `JBSbatKKCashPostAddMail.keySet` | - | - | Gets key set (called indirectly by callers) |
| - | `JBSbatKKCashPostChsht.keySet` | - | - | Gets key set (called indirectly by callers) |
| R | `JBSbatZMAdDataSet.getString` | - | - | Reads a field (called indirectly by callers) |
| R | `JCCBPCommon.getOpeDate` | - | - | Gets operational date (called indirectly by callers) |
| - | `JCKMvnoCustInfoAddCC.setNull` | - | - | Sets null (called indirectly by callers) |
| R | `JFUEoTvCngAddStbCC.getOpeDate` | - | - | Gets operational date (called indirectly by callers) |
| R | `JFUHikkosiNaviRelAddCC.getOpeDate` | - | - | Gets operational date (called indirectly by callers) |
| R | `JKKCreditAddCC.getOpeDate` | - | - | Gets operational date (called indirectly by callers) |
| - | `JKKKapKeiInfoCancelCC.setNull` | - | - | Sets null (called indirectly by callers) |
| - | `JKKKisnUwHmdkAddCC.setNull` | - | - | Sets null (called indirectly by callers) |
| - | `JKKKojiChgPlaceNoCC.setNull` | - | - | Sets null (called indirectly by callers) |
| - | `JKKMvnoSvcKeiStaAddCC.setNull` | - | - | Sets null (called indirectly by callers) |
| C | `MsgEditer.createParameter` | - | - | Creates parameter object (called indirectly by callers) |
| C | `JCKLcsCommonUtil.addDay` | - | - | Adds days to a date (called indirectly by callers) |
| C | `JPCDateUtil.addDay` | - | - | Adds days to a date YYYYMMDD string [**used directly by this method**] |
| C | `JPCUtilCommon.addDay` | - | - | Adds days to a date (called indirectly by callers) |
| R | `JESC0101B010TPMA.getString` | - | - | Reads a field (called indirectly by callers) |
| R | `JESC0101B020TPMA.getString` | - | - | Reads a field (called indirectly by callers) |
| C | `JKKModelCommon.addDay` | - | - | Adds days to a date (called indirectly by callers) |
| R | `JKKModelCommon.getOpeDate` | - | - | Gets operational date (called indirectly by callers) |
| C | `KKSV0325_KKSV0325OPDBMapper.addDay` | - | - | Adds days to a date (called indirectly by callers) |
| R | `SCW00701SFLogic.getName` | - | - | Gets a name (called indirectly by callers) |

### Direct calls within this method:

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `in.getString(...)` | - | - | Reads individual string fields from the CAANMsg input message (multiple fields) |
| C | `JPCDateUtil.addDay(...)` | - | - | Adds 1 day to an end date YYYYMMDD string to compute the actual start date |
| - | `out.put(...)` | - | - | Writes key-value pairs into the output HashMap (12-13 field mappings) |

**Analysis:** This method is purely a **data extraction and transformation** method. It performs no direct database CRUD operations. It reads fields from an input `CAANMsg` object (which typically wraps query results from a CBS call), applies conditional business logic (route determination, date placeholder resolution, triple-play date clearing), and writes the results to an output HashMap. The only external method call it makes is `JPCDateUtil.addDay()` for date arithmetic. All database access happens upstream via the CBS that produced the input CAANMsg.

## 5. Dependency Trace

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

No screen/batch entry points found within 8 hops. Direct callers found: 7 methods.
Terminal operations from this method: `keySet` [-], `keySet` [-], `keySet` [-], `keySet` [-], `getString` [R], `getString` [R], `getString` [R], `getString` [R], `getString` [R], `createParameter` [C], `setNull` [-], `setNull` [-], `setNull` [-], `setNull` [-], `setNull` [-], `getName` [R], `getOpeDate` [R], `getOpeDate` [R], `getOpeDate` [R], `getOpeDate` [R]

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Batch: `JKKBatKKCashPostBase` | `JKKBatKKCashPostBase.execute()` -> `CAANMsgMover.transform()` | `in.getString [R]` |
| 2 | Utility: `Items` | `Items.map()` -> `CAANMsgMover.transform()` | `in.getString [R], out.put [C]` |
| 3 | CBS: `JECNA0040001TPMA` | `JECNA0040001TPMA.invoke()` -> `CAANMsgMover.transform()` | `in.getString [R]` |
| 4 | CBS: `JECNA0040002TPMA` | `JECNA0040002TPMA.invoke()` -> `CAANMsgMover.transform()` | `in.getString [R]` |
| 5 | CBS: `JECNA0150001TPMA` | `JECNA0150001TPMA.callPost()` -> `CAANMsgMover.transform()` | `in.getString [R]` |
| 6 | CBS: `JECNA0160001TPMA` | `JECNA0160001TPMA.callPost()` -> `CAANMsgMover.transform()` | `in.getString [R]` |
| 7 | CBS: `JKKejbKKA0010002SecProc` | `JKKejbKKA0010002SecProc.searchCredit()` -> `CAANMsgMover.transform()` | `in.getString [R]` |

### Downstream call chain:

This method (`transform`) is called by batch processors and CBS components that need to extract discount service contract data into a HashMap. The output HashMap is consumed by downstream processors that use the mapped keys (`no`, `kei_kind`, `stat`, `stat_nm`, `type_cd`, `type_cd_nm`, `campaign_cd`, `campaign_nm`, `mskm_ymd`, `staymd`, `endymd`, `wrib_svc_cd`, `aply_jun_nm`).

## 6. Per-Branch Detail Blocks

### Block 1 — INIT (L17036)

> Initializes the output HashMap with a default capacity of 50 entries.

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

### Block 2 — EXTRACT ROUTE TYPE (L17061)

> Reads the service type classification key from the input message to determine which discount route to follow. The comment on L17037 indicates this was refactored in v5.00.20: previously, discount and promotion information was retrieved from separate service IFs, but was consolidated into a single service IF.

| # | Type | Code |
|---|------|------|
| 1 | SET | `String keiKind = in.getString(EKK0451B011CBSMsg1List.WRIB_DCHS_HAMBET_CD)` | // Read discount service type classification code |

### Block 3 — IF/ELSE [keiKind == "1"] (L17062) — WRIB Discount KM Route

> The WRIB route handles "discount KM" (kei kind = "1") service contracts. This is the route where the v5.00.24 enhancement was applied: if the stay start date is a placeholder ("20991231"), it is replaced by the day after the end date.

#### Block 3.1 — INIT (L17066)

> Reads the raw start and end dates from the DCHS_KM schema before any date adjustment.

| # | Type | Code |
|---|------|------|
| 1 | SET | `String sYmd = in.getString(EKK0451B011CBSMsg1List.SVC_CHRG_DCHSKMST_STAYMD)` | // Raw stay start date |
| 2 | SET | `String eYmd = in.getString(EKK0451B011CBSMsg1List.SVC_CHRG_DCHSKMST_ENDYMD)` | // Stay end date |

#### Block 3.2 — IF [sYMd == "20991231"] (L17067) — Date Placeholder Resolution

> v5.00.24 enhancement: If the start date is the sentinel value 2099-12-31 (meaning "not yet determined"), compute the actual start date as the day after the end date. This applies when a service is provisioned with a deferred start date.

| # | Type | Code |
|---|------|------|
| 1 | IF | `"20991231".equals(sYmd)` | // Check if sYMd is the placeholder |

#### Block 3.2.1 — IF [eYMd not blank AND eYMd != "20991231"] (L17068)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!JKKStringUtil.isNullBlank(eYmd) && !"20991231".equals(eYmd)` | // End date is valid |
| 2 | SET | `sYmd = JPCDateUtil.addDay(eYmd, 1)` | // Compute actual start date = end date + 1 day |

#### Block 3.3 — POPULATE OUTPUT MAP (L17072–17093)

> Maps 13 fields from the DCHS_KM (discount schedule master) message schema into the output HashMap.

| # | Type | Code | Business Description |
|---|------|------|---------------------|
| 1 | SET | `out.put("no", in.getString(EKK0451B011CBSMsg1List.WRIBSVK_DCHSKMST_NO))` | Discount service contract number |
| 2 | SET | `out.put("kei_kind", JKKWribSvcKeiOperateCC.KeiKind.WRIB.getKeiKind())` | Service type = WRIB (1) |
| 3 | SET | `out.put("stat", in.getString(EKK0451B011CBSMsg1List.WRIBSVK_DCHSKMST_STAT))` | Service status |
| 4 | SET | `out.put("stat_nm", in.getString(EKK0451B011CBSMsg1List.WRIBSVK_DCHSKMST_STAT_NM))` | Service 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))` | Discount type name |
| 7 | SET | `out.put("campaign_cd", in.getString(EKK0451B011CBSMsg1List.DSP_CAMPAIGN_DCHSKM_CD))` | Discount campaign code |
| 8 | SET | `out.put("campaign_nm", in.getString(EKK0451B011CBSMsg1List.WRISVC_DCHSKM_NM))` | Discount service name |
| 9 | SET | `out.put("mskm_ymd", in.getString(EKK0451B011CBSMsg1List.MSKM_YMD))` | Service application date |
| 10 | SET | `out.put("staymd", sYmd)` | Start date (may be computed in Block 3.2.1, [-> `sYMd == "20991231"`]) |
| 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 contract code |
| 13 | SET | `out.put("aply_jun_nm", in.getString(EKK0451B011CBSMsg1List.APLY_JUN_NM))` | Application sequence name |

### Block 4 — ELSE [keiKind != "1"] (L17094) — HNSOKU Discount Route

> The HNSOKU route handles general discount (kei kind != "1", typically "2") service contracts. All fields are mapped directly from the input without date adjustment. After the initial mapping, a triple-play special case may override the dates.

#### Block 4.1 — POPULATE OUTPUT MAP (L17095–17108)

> Maps the same 13 fields as Block 3.3, but with `kei_kind` set to HNSOKU and `staymd` taken directly (no date placeholder resolution).

| # | Type | Code | Business Description |
|---|------|------|---------------------|
| 1 | SET | `out.put("no", in.getString(EKK0451B011CBSMsg1List.WRIBSVK_DCHSKMST_NO))` | Discount service contract number |
| 2 | SET | `out.put("kei_kind", JKKWribSvcKeiOperateCC.KeiKind.HNSOKU.getKeiKind())` | Service type = HNSOKU (2) |
| 3 | SET | `out.put("stat", in.getString(EKK0451B011CBSMsg1List.WRIBSVK_DCHSKMST_STAT))` | Service status |
| 4 | SET | `out.put("stat_nm", in.getString(EKK0451B011CBSMsg1List.WRIBSVK_DCHSKMST_STAT_NM))` | Service 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))` | Discount type name |
| 7 | SET | `out.put("campaign_cd", in.getString(EKK0451B011CBSMsg1List.DSP_CAMPAIGN_DCHSKM_CD))` | Discount campaign code |
| 8 | SET | `out.put("campaign_nm", in.getString(EKK0451B011CBSMsg1List.WRISVC_DCHSKM_NM))` | Discount service name |
| 9 | SET | `out.put("mskm_ymd", in.getString(EKK0451B011CBSMsg1List.MSKM_YMD))` | Service application date |
| 10 | SET | `out.put("staymd", in.getString(EKK0451B011CBSMsg1List.SVC_CHRG_DCHSKMST_STAYMD))` | Start date (direct, no adjustment) |
| 11 | SET | `out.put("endymd", in.getString(EKK0451B011CBSMsg1List.SVC_CHRG_DCHSKMST_ENDYMD))` | End date (direct) |
| 12 | SET | `out.put("wrib_svc_cd", in.getString(EKK0451B011CBSMsg1List.WRISVC_DCHSKM_CD))` | Discount service contract code |
| 13 | SET | `out.put("aply_jun_nm", in.getString(EKK0451B011CBSMsg1List.APLY_JUN_NM))` | Application sequence name |

#### Block 4.2 — IF [wribSvcCd == "DT0000002"] (L17111) — Triple-Play Date Clear

> When the discount service code is `DT0000002`, representing a Net Phone TV triple-play bundled subscription, the start and end dates are cleared. This reflects the LT-2013-0000101 JIRI (bug ticket) fix: triple-play subscriptions do not have individual service start/end dates, so the system should not set them.

| # | Type | Code | Business Description |
|---|------|------|---------------------|
| 1 | SET | `final String TgHansoku = "DT0000002"` | // Triple-play target product code |
| 2 | IF | `"DT0000002".equals(in.getString(EKK0451B011CBSMsg1List.WRISVC_DCHSKM_CD))` | [-> `DT0000002` = Net Phone TV triple-play bundled subscription] |
| 3 | SET | `out.put("staymd", "")` | Clear start date for triple-play |
| 4 | SET | `out.put("endymd", "")` | Clear end date for triple-play |

### Block 5 — RETURN (L17114)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return out` | // Return the populated HashMap with 13 fields |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `wrib` | Field prefix | Discount service (from Japanese 割引 — waribiki, meaning "discount") |
| `svc_kei` | Field prefix | Service type (サービス種類 — service shurui) |
| `kei_kind` | Field | Service type classification code — "1" for WRIB (discount KM), "2" for HNSOKU (discount). Determines the data extraction route. |
| `WRIB` | Acronym | Discount KM — discount service for Kei (fixed-line) routes; kei kind code "1" |
| `HNSOKU` | Acronym | Discount (割引 — waribiki) — general discount service route; kei kind code "2" |
| `DCHS_KM` | Schema | Discount Schedule Master — a message schema for discount service contract data specific to KM (Kei Mobile) routes. Fields prefixed with `WRIBSVK_DCHSKMST_*` or `WRIB_DCHS_*` |
| `DCHS` | Schema | Discount Schedule — a message schema for general discount service contract data. Fields prefixed with `WRIBSVK_DCHSKMST_*` or `WRISVC_DCHSKM_*` |
| `WRIB_DCHS_HAMBET_CD` | Field | Discount service type classification code — the key field that determines whether to use WRIB or HNSOKU processing route |
| `WRIBSVK_DCHSKMST_NO` | Field | Discount service contract number — unique identifier for the discount service contract line item |
| `WRIBSVK_DCHSKMST_STAT` | Field | Discount service contract status — e.g., active, cancelled, pending |
| `WRIBSVK_DCHSKMST_STAT_NM` | Field | Discount service contract status name — human-readable status description |
| `WRIB_DCHS_TYPE_CD` | Field | Discount type code — classifies the type of discount (e.g., percentage, fixed amount, promotional) |
| `WRIB_DCHS_TYPE_CD_NM` | Field | Discount type name — human-readable discount type description |
| `DSP_CAMPAIGN_DCHSKM_CD` | Field | Discount campaign code — the promotional campaign under which this discount is offered |
| `WRISVC_DCHSKM_NM` | Field | Discount service name — the name of the discount service plan |
| `MSKM_YMD` | Field | Service application date (YYYYMMDD format) — the date the service was applied for |
| `SVC_CHRG_DCHSKMST_STAYMD` | Field | Service charge discount start date (YYYYMMDD) — when the discount period begins |
| `SVC_CHRG_DCHSKMST_ENDYMD` | Field | Service charge discount end date (YYYYMMDD) — when the discount period ends |
| `staymd` | Field | Output key for start date — used in output HashMap |
| `endymd` | Field | Output key for end date — used in output HashMap |
| `WRISVC_DCHSKM_CD` | Field | Discount service contract code — the product code identifying which discount service plan is applied |
| `aply_jun_nm` | Field | Application sequence name — identifies the order of application when multiple services are applied |
| `DT0000002` | Constant | Net Phone TV triple-play bundled subscription product code — triggers date clearing logic |
| `20991231` | Constant | Placeholder date value meaning "not yet determined" — used in v5.00.24 to detect deferred start dates |
| `Transformer` | Pattern | Java interface with `transform(CAANMsg) -> HashMap` method signature, used for data extraction and mapping |
| `CAANMsg` | Class | Fujitsu CAAN messaging framework class — a schema-based message container that wraps field data with typed getters (getString, etc.) |
| `v5.00.20` | Version | Refactoring version — consolidated discount and promotion information retrieval into a single service IF, replacing the previous multi-IF approach (commented-out code) |
| `v5.00.24` | Version | Enhancement version — added date placeholder resolution: if start date is "20991231", compute it as end date + 1 day |
| `LT-2013-0000101` | JIRI | Bug ticket — caused the triple-play date clearing logic (DT0000002 check) |
