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

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

## 1. Role

### PayScheduleMover.transform()

The `transform()` method is a data-mapping utility that converts a raw `CAANMsg` input message (containing service contract details from the WRIB/DCHS — discount/promotion service — CBS interface) into a normalized `HashMap<String, String>` suitable for downstream consumption (e.g., pay schedule generation, billing, or service state management). It implements a **conditional dispatch pattern**: based on the `WRIB_DCHS_HAMBET_CD` (discount/non-discount discrimination code) field in the input, it routes to one of two processing branches — a **discount service branch** (`kei_kind = "w"`) or a **non-discount service branch** (`kei_kind = "d"`). In the discount branch, the method applies a date-adjustment heuristic: if the start date is a sentinel value (`"20991231"` indicating "unset"), it computes the effective start date as one day after the end date, per version 5.00.24 changes. In the non-discount branch, it additionally checks whether the service code matches `"DT0000002"` (Net-Phone-TV 3-point application — see ticket LT-2013-0000101) and clears the start/end dates when this condition holds. The method is a shared common-component utility called by batches (e.g., `JKKBatKKCashPostBase`), TPS screens (e.g., `JECNA0040001TPMA`), and secondary processors (e.g., `JKKejbKKA001SecProc`), making it a central hub for discount/non-discount service contract data normalization across the CBS system.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["transform in: CAANMsg"])
    START --> OUT["Create HashMap out"]
    OUT --> READ_KEIKIND["Read keiKind from WRIB_DCHS_HAMBET_CD"]
    READ_KEIKIND --> COND1{keiKind equals 1?}
    COND1 -->|Yes| BRANCH_DCHS["Discount branch"]
    BRANCH_DCHS --> READ_SYMD["Read sYmd from SVC_CHRG_DCHSKMST_STAYMD"]
    READ_SYMD --> READ_EYMD["Read eYmd from SVC_CHRG_DCHSKMST_ENDYMD"]
    READ_EYMD --> COND_SVCHK{sYmd equals 20991231?}
    COND_SVCHK -->|Yes| COND_EYMD{eYmd not blank AND not 20991231?}
    COND_SVCHK -->|No| READ_NO_W["Read WRIBSVK_DCHSKMST_NO"]
    COND_EYMD -->|Yes| ADJUST_SYMD["sYmd = addDay eYmd + 1"]
    COND_EYMD -->|No| READ_NO_W
    ADJUST_SYMD --> READ_NO_W
    READ_NO_W --> POP_DCHS["Put 13 fields: no, kei_kind=w, stat, stat_nm, type_cd, type_cd_nm, campaign_cd, campaign_nm, mskm_ymd, staymd, endymd, wrib_svc_cd, aply_jun_nm"]
    POP_DCHS --> END_RETURN["Return out"]
    COND1 -->|No| BRANCH_HNSOKU["Non-discount branch"]
    BRANCH_HNSOKU --> POP_HNS["Put 13 fields: no, kei_kind=d, stat, stat_nm, type_cd, type_cd_nm, campaign_cd, campaign_nm, mskm_ymd, staymd, endymd, wrib_svc_cd, aply_jun_nm"]
    POP_HNS --> READ_TGHS["Set TgHansoku = DT0000002"]
    READ_TGHS --> COND_TGHS{WRISVC_DCHSKM_CD equals DT0000002?}
    COND_TGHS -->|Yes| CLEAR_DATES["Clear staymd and endymd"]
    COND_TGHS -->|No| END_RETURN
    CLEAR_DATES --> END_RETURN
```

**Processing narrative:**

1. **Initialization** — Creates an output `HashMap` with `DEFAULT_HASH_SIZE` capacity (50 entries, based on the number of fields mapped).
2. **Read discrimination code** — Extracts `keiKind` from the input message via `WRIB_DCHS_HAMBET_CD`. This code determines whether the service is a discount/promotion type (`"1"`) or a standard non-discount type.
3. **Discount branch (`keiKind = "1"`):**
   - Reads start date (`sYmd`) and end date (`eYmd`) from the input.
   - If `sYmd` equals the sentinel value `"20991231"` (indicating "unset"), and `eYmd` is not null/blank and not itself a sentinel, the start date is set to one day after the end date (`JPCDateUtil.addDay(eYmd, 1)`). This ensures the pay schedule has a valid effective start date.
   - Maps all 13 fields, using the (possibly adjusted) `sYmd` for `staymd`. The `kei_kind` field is set to `"w"` (from `KeiKind.WRIB.getKeiKind()` — "w" for "wari-biki"/discount).
4. **Non-discount branch (`keiKind != "1"`):**
   - Maps all 13 fields similarly, but uses `staymd` directly from the input (no date adjustment). The `kei_kind` field is set to `"d"` (from `KeiKind.HNSOKU.getKeiKind()` — "d" for "hansoku"/non-discount).
   - Additional check: If `WRISVC_DCHSKM_CD` equals `"DT0000002"` (Net-Phone-TV 3-point application — ticket LT-2013-0000101), the `staymd` and `endymd` fields are cleared (set to `""`). This reflects the business rule that Net-Phone-TV bundled services do not have fixed start/end dates.
5. **Return** — Returns the populated `HashMap`.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `in` | `CAANMsg` | The source message containing WRIB/DCHS service contract data. This is the input from the discount/non-discount service CBS interface (EKK0451B011CBS). It carries fields such as service number, discrimination code (discount vs. non-discount), status, type codes, campaign details, subscription period dates, and service CD. |

**No instance fields or external state** are read by this method — it is a pure transformation function with no side effects on object state.

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `in.getString(EKK0451B011CBSMsg1List.WRIB_DCHS_HAMBET_CD)` | EKK0451B011CBS | WRIB_DCHS_HAMBET_CD | Reads the discount/non-discount discrimination code from the input message |
| R | `in.getString(EKK0451B011CBSMsg1List.SVC_CHRG_DCHSKMST_STAYMD)` | EKK0451B011CBS | SVC_CHRG_DCHSKMST_STAYMD | Reads the service charge discount start date (YYYYMMDD format) |
| R | `in.getString(EKK0451B011CBSMsg1List.SVC_CHRG_DCHSKMST_ENDYMD)` | EKK0451B011CBS | SVC_CHRG_DCHSKMST_ENDYMD | Reads the service charge discount end date (YYYYMMDD format) |
| R | `in.getString(EKK0451B011CBSMsg1List.WRIBSVK_DCHSKMST_NO)` | EKK0451B011CBS | WRIBSVK_DCHSKMST_NO | Reads the WRIB service discount master number (internal tracking ID) |
| R | `in.getString(EKK0451B011CBSMsg1List.WRIBSVK_DCHSKMST_STAT)` | EKK0451B011CBS | WRIBSVK_DCHSKMST_STAT | Reads the WRIB service discount master status code |
| R | `in.getString(EKK0451B011CBSMsg1List.WRIBSVK_DCHSKMST_STAT_NM)` | EKK0451B011CBS | WRIBSVK_DCHSKMST_STAT_NM | Reads the human-readable description of the status code |
| R | `in.getString(EKK0451B011CBSMsg1List.WRIB_DCHS_TYPE_CD)` | EKK0451B011CBS | WRIB_DCHS_TYPE_CD | Reads the discount service type code |
| R | `in.getString(EKK0451B011CBSMsg1List.WRIB_DCHS_TYPE_CD_NM)` | EKK0451B011CBS | WRIB_DCHS_TYPE_CD_NM | Reads the human-readable description of the discount service type |
| R | `in.getString(EKK0451B011CBSMsg1List.DSP_CAMPAIGN_DCHSKM_CD)` | EKK0451B011CBS | DSP_CAMPAIGN_DCHSKM_CD | Reads the DSP campaign discount master code |
| R | `in.getString(EKK0451B011CBSMsg1List.WRISVC_DCHSKM_NM)` | EKK0451B011CBS | WRISVC_DCHSKM_NM | Reads the WRIB service discount master name |
| R | `in.getString(EKK0451B011CBSMsg1List.MSKM_YMD)` | EKK0451B011CBS | MSKM_YMD | Reads the measurement month date (YYYYMMDD format) |
| R | `in.getString(EKK0451B011CBSMsg1List.SVC_CHRG_DCHSKMST_STAYMD)` | EKK0451B011CBS | SVC_CHRG_DCHSKMST_STAYMD | Reads the stay (start) date — used directly in non-discount branch |
| R | `in.getString(EKK0451B011CBSMsg1List.SVC_CHRG_DCHSKMST_ENDYMD)` | EKK0451B011CBS | SVC_CHRG_DCHSKMST_ENDYMD | Reads the end date — used directly in non-discount branch |
| R | `in.getString(EKK0451B011CBSMsg1List.WRISVC_DCHSKM_CD)` | EKK0451B011CBS | WRISVC_DCHSKM_CD | Reads the WRIB service discount master CD — checked against "DT0000002" |
| R | `in.getString(EKK0451B011CBSMsg1List.APLY_JUN_NM)` | EKK0451B011CBS | APLY_JUN_NM | Reads the application conditions name |
| C | `JPCDateUtil.addDay` | JPCDate | - | Utility method to add days to a date string (used in discount branch date adjustment) |

**Summary of called methods by category:**

- **Data reads (R)** — All source data is read from the `CAANMsg` input object via `getString()`. These are field extractions from the CBS message, not direct database calls. The CBS interface `EKK0451B011CBS` is the upstream data source.
- **Date manipulation (C)** — `JPCDateUtil.addDay(eYmd, 1)` is called once in the discount branch to compute an adjusted start date when the original value is a sentinel.
- **No DB writes (C/U/D)** — This method performs pure data transformation; it creates no database changes.

## 5. Dependency Trace

### Callers (direct callers of `PayScheduleMover.transform()`):

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

**Call chain note:** `JFUXPathManager.getDomSize()` is listed as a caller in the pre-computed graph but is not a direct caller of `transform()` — it is a separate method with the same name `getDomSize` which is likely a false match in the graph. The method `transform(CAANMsg)` is specifically called by the 14 callers listed above.

## 6. Per-Branch Detail Blocks

**Block 1** — [IF] `(keiKind equals "1")` [WRIB_DCHS_HAMBET_CD="1"] (L17048)

> Business description: This is the **discount/promotion service branch** (wari-biki). When the discrimination code is "1", the method treats the service as a discount type and adjusts the start date if needed (v5.00.24 enhancement per the TODO comment about waiting for the service IF source).

| # | Type | Code |
|---|------|------|
| 1 | READ | `sYmd = in.getString(EKK0451B011CBSMsg1List.SVC_CHRG_DCHSKMST_STAYMD)` // Reads discount master start date [v5.00.24] |
| 2 | READ | `eYmd = in.getString(EKK0451B011CBSMsg1List.SVC_CHRG_DCHSKMST_ENDYMD)` // Reads discount master end date [v5.00.24] |
| 3 | SET | `out.put("no", in.getString(EKK0451B011CBSMsg1List.WRIBSVK_DCHSKMST_NO))` // Service contract master number |
| 4 | SET | `out.put("kei_kind", JKKWribSvcKeiOperateCC.KeiKind.WRIB.getKeiKind())` // -> `WRIB("w")` — discount type discriminator |
| 5 | SET | `out.put("stat", in.getString(EKK0451B011CBSMsg1List.WRIBSVK_DCHSKMST_STAT))` // Service master status code |
| 6 | SET | `out.put("stat_nm", in.getString(EKK0451B011CBSMsg1List.WRIBSVK_DCHSKMST_STAT_NM))` // Status code description |
| 7 | SET | `out.put("type_cd", in.getString(EKK0451B011CBSMsg1List.WRIB_DCHS_TYPE_CD))` // Discount service type code |
| 8 | SET | `out.put("type_cd_nm", in.getString(EKK0451B011CBSMsg1List.WRIB_DCHS_TYPE_CD_NM))` // Type code description |
| 9 | SET | `out.put("campaign_cd", in.getString(EKK0451B011CBSMsg1List.DSP_CAMPAIGN_DCHSKM_CD))` // Campaign discount master code |
| 10 | SET | `out.put("campaign_nm", in.getString(EKK0451B011CBSMsg1List.WRISVC_DCHSKM_NM))` // Campaign discount master name |
| 11 | SET | `out.put("mskm_ymd", in.getString(EKK0451B011CBSMsg1List.MSKM_YMD))` // Measurement month (YYYYMMDD) |
| 12 | SET | `out.put("staymd", sYmd)` // Start date — adjusted via v5.00.24 logic below [-> sYmd adjusted] |
| 13 | SET | `out.put("endymd", in.getString(EKK0451B011CBSMsg1List.SVC_CHRG_DCHSKMST_ENDYMD))` // End date (YYYYMMDD) |
| 14 | SET | `out.put("wrib_svc_cd", in.getString(EKK0451B011CBSMsg1List.WRISVC_DCHSKM_CD))` // WRIB service discount master CD |
| 15 | SET | `out.put("aply_jun_nm", in.getString(EKK0451B011CBSMsg1List.APLY_JUN_NM))` // Application conditions name |

**Block 1.1** — [NESTED IF] `(sYmd equals "20991231")` [20991231 sentinel] (L17052)

> Business description: v5.00.24 enhancement. When the start date is a sentinel value "20991231" (meaning "not yet determined"), and the end date is valid, the start date is set to one day after the end date. This is a heuristic for services where the end date is known but the start date has not been set.

| # | Type | Code |
|---|------|------|
| 1 | READ | `eYmd` (already read in Block 1) |
| 2 | IF | `!JKKStringUtil.isNullBlank(eYmd) && !"20991231".equals(eYmd)` // eYmd is meaningful |
| 3 | SET | `sYmd = JPCDateUtil.addDay(eYmd, 1)` // Start = End + 1 day |

**Block 1.2** — [NESTED IF] `(sYmd NOT equals "20991231")` (else of Block 1.1)

> Business description: When the original start date is valid (not the sentinel), no adjustment is made. The original `sYmd` value is used directly for `staymd`.

---

**Block 2** — [ELSE] `(keiKind NOT equals "1")` (L17080)

> Business description: This is the **non-discount/standard service branch** (hansoku). The service type is set to "d" (HNSOKU). All fields are mapped directly without date adjustment. However, for Net-Phone-TV 3-point applications (`"DT0000002"`), the start and end dates are cleared per ticket LT-2013-0000101.

| # | Type | Code |
|---|------|------|
| 1 | SET | `out.put("no", in.getString(EKK0451B011CBSMsg1List.WRIBSVK_DCHSKMST_NO))` // Service contract master number |
| 2 | SET | `out.put("kei_kind", JKKWribSvcKeiOperateCC.KeiKind.HNSOKU.getKeiKind())` // -> `HNSOKU("d")` — non-discount type discriminator |
| 3 | SET | `out.put("stat", in.getString(EKK0451B011CBSMsg1List.WRIBSVK_DCHSKMST_STAT))` // Status code |
| 4 | SET | `out.put("stat_nm", in.getString(EKK0451B011CBSMsg1List.WRIBSVK_DCHSKMST_STAT_NM))` // Status description |
| 5 | SET | `out.put("type_cd", in.getString(EKK0451B011CBSMsg1List.WRIB_DCHS_TYPE_CD))` // Service type code |
| 6 | SET | `out.put("type_cd_nm", in.getString(EKK0451B011CBSMsg1List.WRIB_DCHS_TYPE_CD_NM))` // Type description |
| 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 name |
| 9 | SET | `out.put("mskm_ymd", in.getString(EKK0451B011CBSMsg1List.MSKM_YMD))` // Measurement month |
| 10 | SET | `out.put("staymd", in.getString(EKK0451B011CBSMsg1List.SVC_CHRG_DCHSKMST_STAYMD))` // Start date (direct) |
| 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))` // Service CD |
| 13 | SET | `out.put("aply_jun_nm", in.getString(EKK0451B011CBSMsg1List.APLY_JUN_NM))` // Application conditions |

**Block 2.1** — [NESTED IF] `(TgHansoku equals WRISVC_DCHSKM_CD)` [`DT0000002`] (L17097)

> Business description: For Net-Phone-TV bundled (3-point) applications, start and end dates are not applicable. Per ticket LT-2013-0000101, these dates are cleared to indicate that the service has no fixed subscription period.

| # | Type | Code |
|---|------|------|
| 1 | SET | `final String TgHansoku = "DT0000002"` // Target exception constant — Net-Phone-TV 3-point application |
| 2 | READ | `in.getString(EKK0451B011CBSMsg1List.WRISVC_DCHSKM_CD)` // Service CD to compare against TgHansoku |
| 3 | SET | `out.put("staymd", "")` // Clear start date |
| 4 | SET | `out.put("endymd", "")` // Clear end date |

---

**Block 3** — [RETURN] (L17114)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return out` // Returns the populated HashMap<String, String> |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `WRIB` | Business term | Discount/Promotion Service — "wari-biki" (割引) service type; indicates a discounted or promotional service contract |
| `HNSOKU` | Business term | Non-Discount Service — "hansoku" (割引) type discriminator; "d" stands for standard (non-discounted) pricing |
| `KeiKind` | Enum | Internal service kind discriminator; values: `WRIB("w")` for discount, `HNSOKU("d")` for non-discount, `NULL("")` for undefined |
| `WRIB_DCHS_HAMBET_CD` | Field | Discount discrimination code — determines whether the service is discounted ("1") or not; primary routing key in `transform()` |
| `WRIBSVK_DCHSKMST_NO` | Field | WRIB service discount master number — internal tracking ID for discount/promotion service contract master records |
| `WRIBSVK_DCHSKMST_STAT` | Field | WRIB service discount master status code — current operational state of the discount service contract |
| `WRIBSVK_DCHSKMST_STAT_NM` | Field | Status code human-readable description — text label for the status code value |
| `WRIB_DCHS_TYPE_CD` | Field | Discount service type code — classification of the type of discount/promotion service |
| `WRIB_DCHS_TYPE_CD_NM` | Field | Discount service type code description — human-readable label for the type code |
| `DSP_CAMPAIGN_DCHSKM_CD` | Field | DSP campaign discount master code — campaign/promotion campaign identifier |
| `WRISVC_DCHSKM_NM` | Field | WRIB service discount master name — human-readable name of the discount service |
| `MSKM_YMD` | Field | Measurement month — the month on which service measurement/billing cycle is based (YYYYMMDD) |
| `SVC_CHRG_DCHSKMST_STAYMD` | Field | Service charge discount master stay (start) date — the effective start date of the discount service period (YYYYMMDD) |
| `SVC_CHRG_DCHSKMST_ENDYMD` | Field | Service charge discount master end date — the expiration date of the discount service period (YYYYMMDD) |
| `WRISVC_DCHSKM_CD` | Field | WRIB service discount master CD — service classification code; `"DT0000002"` specifically identifies Net-Phone-TV 3-point bundled applications |
| `APLY_JUN_NM` | Field | Application conditions name — describes how application conditions are evaluated (AND, ANY, GROUP — see `AplyJokenCd` enum) |
| `"20991231"` | Constant | Sentinel date value meaning "unset" or "not yet determined" — used as a placeholder when start date is unknown |
| `JPCDateUtil.addDay` | Utility | Date arithmetic utility — adds a specified number of days to a date string in YYYYMMDD format |
| `TgHansoku` | Local variable | Target exception constant (`"DT0000002"`) — identifies Net-Phone-TV 3-point applications that do not have fixed subscription dates |
| `EKK0451B011CBSMsg1List` | Message list | CBS message field list for the WRIB/DCHS (discount service) interface; defines all field accessor constants used in `transform()` |
| `EKK0451B011CBS` | CBS | Discount service data extraction CBS — the upstream service component that provides WRIB/DCHS service contract data to this method |
| `CAANMsg` | Data type | Common message wrapper object used throughout the system for carrying structured message data via `getString()` / `putString()` accessors |
| LT-2013-0000101 | Ticket | Internal ticket reference — documents the rule that Net-Phone-TV 3-point applications must not have fixed start/end dates |
| DCHS | Business term | Discount master — short for "discount" service contract master data |
| WRIB | Business term | Japanese: 割引 (wari-biki) — Discount/Promotion service |
| HNSOKU | Business term | Japanese: 割引 not applicable — Non-discount service type |
| HAMBET | Business term | Japanese: 判定 (handan) — Discrimination/judgment code |
| STAYMD | Abbreviation | Stay (start) date — abbreviated from "stay month day" in YYYYMMDD format |
| ENDYMD | Abbreviation | End date — abbreviated from "end year month day" in YYYYMMDD format |
| MSKM | Abbreviation | Measurement — billing measurement month |
