# Business Logic — JKKWrisvcAutoAplyCC.setSvcChrgYmdInfToStat910() [438 LOC]

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

## 1. Role

### JKKWrisvcAutoAplyCC.setSvcChrgYmdInfToStat910()

This method handles billing date assignment for discount services that have reached status **"910: Contract Cancelled"** (解約済). It is invoked as part of the broader discount service automatic application (割引サービス自動適用) workflow, specifically within the cancellation (解約) operation branch. The method's core responsibility is to derive and set three key fields on the input map `inMapWribsvkDchskmst`: (1) the service billing start date (サービス課金開始年月日), (2) the service billing end date (サービス課金終了年月日), and (3) a flag indicating the billing end date was computed manually (サービス課金終了年月日算出フラグ).

The method implements a **routed/dispatch pattern**: it first checks whether a "standard installation fee campaign" (標準工事費割引キャンペーン) is in effect, and if so, processes base service contract data from the EKK0081B029 service call to find the earliest-disconnected contracted service whose application number matches the current application. If not, it falls through to the standard discount service target contract list loop. Within that loop, it iterates over each target contract, queries the contract details, and identifies the one with the latest billing end date among those with status 910.

If any contract was found with status 910 (`ret = true`), the method then computes the final billing start and end dates. For **replacement-type contracts** (置き換え型 — identified via `isWribSvcCdToTikanType`), it delegates to `getSvcChrgStaYmd` and `getSvcChrgEndYmd` which use the service cancellation start date (サービス解約起算年月日) as a parameter instead of the regular billing end date (modified in OM-2017-0000628). If the computed end date is not the sentinel "non-billing" value, the original parent end date is restored. A special case handles "non-billing" scenarios where the start date is blank and the end date is MAX_YMD — it reverses the dates so the billing period runs from day 1 after the parent's end date through the parent's end date.

Finally, for contracts under the **installation fee discount campaign** (工事費割引キャンペーン), if the service cancellation start date's day-of-month is not "01", the billing end date is adjusted to the end of the previous month. For long-term continued discount service code `W00000041` (長期継続割引), an additional end date adjustment is performed via `setEndYmdForWribType32`. A retroactive determination check is always invoked before the method returns.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["setSvcChrgYmdInfToStat910(params)"])
    START --> INIT["Initialize local variables (ret=false, date vars)"]
    INIT --> GET_WRIB_SVC["Get wribSvcKeiNo from inMap"]
    GET_WRIB_SVC --> CALL_KK0451["getMapper.callWriSvcKeiIchiiShokai<br/>(KK0451 - Contract details)"]
    CALL_KK0451 --> EXTRACT_0451["Extract setSvcChgStaYmd and setSvcStaYmd"]
    EXTRACT_0451 --> GET_TG_LIST["Get wrisvcTgKeiList (target contracts)"]
    GET_TG_LIST --> CALC_DIGIT_1["digitSize = calcRenbanDigitSize(wrisvcTgKeiList.size())"]
    CALC_DIGIT_1 --> CHECK_HYOJUN{"HYOJUN standard<br/>discount campaign?"}
    CHECK_HYOJUN -->|wribDchsSkbtFlag = 1 AND<br/>wribSvcCd in HYOJUN list| HYOJUN_BLOCK["Standard Installation Fee Campaign Block"]
    CHECK_HYOJUN -->|No| LOOP_START["for loop over wrisvcTgKeiList"]
    HYOJUN_BLOCK --> GET_BASE_MAP["getBaseSvcKeiMap(ccMap)"]
    GET_BASE_MAP --> GET_BASE_NO["getBaseSvcKeiNo(baseSvcKeiMap, tgKeiSkbtCd)"]
    GET_BASE_NO --> NOT_BLANK_BASE{"baseSvcKeiNo<br/>not blank?"}
    NOT_BLANK_BASE -->|Yes| CALL_EKK029["getMapper.callEKK0081B029(baseSvcKeiNo)"]
    CALL_EKK029 --> LOOP_EKK29["for each EKK0081B029 result"]
    LOOP_EKK29 --> CALL_SVC_KEI["getMapper.callSvcKeiIchiiShokai(ccMap, svcKeiNo, ...)"]
    CALL_SVC_KEI --> CHECK_SVC_CD{"svcCd is<br/>CD00130_01/02/03?"}
    CHECK_SVC_CD -->|Yes| GET_ADD_DTM["Extract GENE_ADD_DTM, SVC_CHRG_STAYMD, etc."]
    GET_ADD_DTM --> UPDATE_MAP{"newer GENE_ADD_DTM?"}
    UPDATE_MAP -->|Yes| PUT_MAP["Update svcMap with latest data"]
    PUT_MAP --> END_EKK29_LOOP["End EKK29 loop"]
    CHECK_SVC_CD -->|No| END_EKK29_LOOP
    UPDATE_MAP -->|No| END_EKK29_LOOP
    END_EKK29_LOOP --> FILTER_DSL["Filter dslSvcKeiList where SVC_KEI_STAT = 910"]
    FILTER_DSL --> CHECK_DSL_SIZE{"dslSvcKeiList<br/>has entries?"}
    CHECK_DSL_SIZE -->|Yes| MATCH_APP["Match application number via MSKM_DTL"]
    MATCH_APP --> UPDATE_MAX_DSL{"maxSvcChgEndYmd<br/>or newer?"}
    UPDATE_MAX_DSL -->|Yes| SET_RET_DSL["ret=true, save dates"]
    SET_RET_DSL --> END_DSL_LOOP["End DSL loop"]
    UPDATE_MAX_DSL -->|No| END_DSL_LOOP
    CHECK_DSL_SIZE -->|No| LOOP_START
    END_DSL_LOOP --> LOOP_START
    LOOP_START --> NEXT_ITERATION["renbanForTgKei++; build renbanNoForTgKei"]
    NEXT_ITERATION --> CHECK_HYOJUN_LOOP{"HYOJUN standard<br/>campaign?"}
    CHECK_HYOJUN_LOOP -->|Yes| BREAK_LOOP["break loop"]
    CHECK_HYOJUN_LOOP -->|No| GET_SVC_KEI_NO["Get svcKeiNo from map"]
    GET_SVC_KEI_NO --> NOT_BLANK_SVC{"svcKeiNo<br/>not blank?"}
    NOT_BLANK_SVC -->|Yes| CALL_SVC_KEI_MAIN["getMapper.callSvcKeiIchiiShokai<br/>(KK0081A010)"]
    CALL_SVC_KEI_MAIN --> EXTRACT_MAIN["Extract svcChrgEndYmd, svcKeiStat"]
    EXTRACT_MAIN --> CHECK_STAT{"svcKeiStat = 910?"}
    CHECK_STAT -->|Yes| UPDATE_MAX2{"maxSvcChgEndYmd<br/>or newer?"}
    UPDATE_MAX2 -->|Yes| SET_RET_MAIN["ret=true, save dates"]
    UPDATE_MAX2 -->|No| END_ITERATION
    SET_RET_MAIN --> END_ITERATION
    CHECK_STAT -->|No| END_ITERATION
    NOT_BLANK_SVC -->|No| END_ITERATION
    BREAK_LOOP --> END_ITERATION
    END_ITERATION --> NOT_LAST{"more iterations?"}
    NOT_LAST -->|Yes| LOOP_START
    NOT_LAST -->|No| IF_RET["if ret = true"]
    IF_RET -->|Yes| GET_WRIB_SVC_CD["Get wribSvcCd from inMap"]
    GET_WRIB_SVC_CD --> CALL_KK0841["getMapper.callWriSvcMstIchiiShokai<br/>(KK0841 - Discount service details)"]
    CALL_KK0841 --> EXTRACT_SUB_CD["Extract svcSbtCd"]
    EXTRACT_SUB_CD --> CHECK_TIKAN{"isWribSvcCdToTikanType(svcSbtCd)?<br/>('replacement type')"}
    CHECK_TIKAN -->|Yes| CALC_SVC_CHG_STA["getSvcChrgStaYmd(setSvcStaYmd, kk0451SvcChgStaYmd, '',<br/>kk0081SetSvcChgStaYmd, svcSbtCd, dslKisanYmd)"]
    CALC_SVC_CHG_STA --> CALC_SVC_CHG_END["getSvcChrgEndYmd(setSvcStaYmd, kk0451SvcChgStaYmd, '',<br/>kk0081SetSvcChgStaYmd, svcSbtCd, dslKisanYmd)"]
    CALC_SVC_CHG_END --> CHECK_NOT_MAX{"setSvcChgEndYmd != 20991231?"}
    CHECK_NOT_MAX -->|Yes| RESTORE_END["setSvcChgEndYmd = kk0081SvcChgEndYmd"]
    CHECK_NOT_MAX -->|No| CHECK_BLANK_END["BLANK_YMD check"]
    RESTORE_END --> CHECK_BLANK_END
    CHECK_BLANK_END --> CHECK_BLANK{"BLANK_YMD == start AND<br/>MAX_YMD == end?"}
    CHECK_BLANK -->|Yes| REVERSE_DATES["setSvcChgStaYmd = addDay(end, 1)<br/>setSvcChgEndYmd = end"]
    CHECK_BLANK -->|No| SET_PLAN_STA["Put PLAN_CHRG_STAYMD"]
    REVERSE_DATES --> SET_PLAN_STA
    SET_PLAN_STA --> SET_SVC_CHG_STA["Put SVC_CHRG_STAYMD"]
    SET_SVC_CHG_STA --> CHECK_KOJIHI{"wribSvcCd in ALL_KOJIHI_CP_LIST<br/>or HYOJUN_KOJIHI_WRBK_CP_LIST?"}
    CHECK_KOJIHI -->|Yes| CHECK_DSL_DAY{"dslKisanYmd day != 01?"}
    CHECK_DSL_DAY -->|Yes| ADJUST_END["setSvcChgEndYmd = endOfMonth(addMonth(-1))"]
    CHECK_DSL_DAY -->|No| SET_ENDYMD
    ADJUST_END --> SET_ENDYMD["Put SVC_CHRG_ENDYMD"]
    SET_ENDYMD --> SET_ENDYMD_FLG["Put SVC_CHRG_ENDYMD_FLG = 0 (MANUAL)"]
    SET_ENDYMD_FLG --> CALL_RETRO["setRetroMapForRlsInf(ccMap, inMap, dslKisanYmd, setSvcChgEndYmd)"]
    CHECK_KOJIHI -->|No| CALL_RETRO
    CALL_RETRO --> CHECK_LONG_DISC{"wribSvcCd = W00000041?"}
    CHECK_LONG_DISC -->|Yes| CALL_ENDYMD["setEndYmdForWribType32(...)"]
    CHECK_LONG_DISC -->|No| LOG_DATES["Log dates"]
    CALL_ENDYMD --> LOG_DATES
    LOG_DATES --> RETURN_TRUE["return true"]
    IF_RET -->|No| RETURN_FALSE["return false"]
    RETURN_FALSE --> END(["end"])
    RETURN_TRUE --> END
```

**CRITICAL — Constant Resolution:**

| Constant | Resolved Value | Business Meaning |
|----------|---------------|-----------------|
| `WRIB_DCHS_SKBT_FLAG_WRIB` | `"1"` | Discount service flag — "discount" (割引) vs "data extraction" (データ抽出) |
| `JKKSvcConst.SVC_KEI_STAT_910` | `"910"` | Service contract status — "Contract Cancelled" (解約済) |
| `JKKStrConst.CD00130_01` | `"CD00130_01"` | Service code — FTTH (Fiber To The Home) |
| `JKKStrConst.CD00130_02` | `"CD00130_02"` | Service code — Ethernet ( Ethernet ) |
| `JKKStrConst.CD00130_03` | `"CD00130_03"` | Service code — VoIP (Voice over IP) |
| `MAX_YMD` | `"20991231"` | Sentinel value meaning "non-billing period" or "permanent" |
| `BLANK_YMD` | `""` | Empty string sentinel meaning "no billing date set" |
| `SVC_CHRG_ENDYMD_FLG_MANUAL` | `"0"` | Billing end date was calculated manually (not system-auto) |
| `W_WRIB_CD_41` | `"W00000041"` | Long-term continued discount service code (長期継続割引) |
| `ALL_KOJIHI_CP_LIST` | `[WRIB_SVC_KOJIHI_KAP_CP_NET, WRIB_SVC_KOJIHI_KAP_CP_TEL, WRIB_SVC_KOJIHI_KAP_CP_NET_24, WRIB_SVC_KOJIHI_KAP_CP_TEL_24, WRIB_SVC_KOJIHI_KAP_CP_TEL_IKT]` | All installation fee campaign discount service codes |
| `HYOJUN_KOJIHI_WRBK_CP_LIST` | `[WRIB_SVC_KOJIHI_WRBK_CP_NET_24, WRIB_SVC_KOJIHI_WRBK_CP_TEL_24]` | Standard installation fee campaign discount codes (24-installment) |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `ccMap` | `HashMap<String, Object>` | Working area map (作業領域) for the CC (Common Component). Contains session-scoped data including the application number (申請番号/MSKM_NO), base service contract information (baseSvcKeiMap), and other operational metadata used throughout the automatic application workflow. |
| 2 | `inMapWribsvkDchskmst` | `HashMap<String, Object>` | Input/output map for the discount service contract (割引サービス契約) and discount service target contract list. Key fields read: WRIB_SVC_KEI_NO (割引サービス契約番号), WRIB_SVC_CD (割引サービスコード), WRISVC_TG_KEI_LIST (割引サービス対象契約リスト). Key fields written: SVC_CHRG_STAYMD (サービス課金開始年月日), SVC_CHRG_ENDYMD (サービス課金終了年月日), SVC_CHRG_ENDYMD_FLG (サービス課金終了年月日算出フラグ), PLAN_CHRG_STAYMD (プラン課金開始年月日). |
| 3 | `wribDchsSkbtFlag` | `String` | Discount service / data extraction item identification flag (割引サービス／データ抽出項目識別フラグ). When equal to `"1"` (WRIB), processing focuses on discount service operations and may trigger standard installation fee campaign (標準工事費割引キャンペーン) handling. Other value: `"2"` (DCHS — data extraction). |
| 4 | `renbanNo` | `String` | Serial number (連番) prefix used for grouping and identification in mapper calls. Combined with formatted digit sequences to produce unique group identifiers (e.g., `WRIBSVK_DCHSKMST_GRP_SET + "01"`). |

**Instance fields / external state read:**

| Field | Source | Usage |
|-------|--------|-------|
| `mapper` | `JKKWrisvcAutoAplyCCMapper` | Mapper object used to call SC-layer service methods (callWriSvcKeiIchiiShokai, callSvcKeiIchiiShokai, etc.) |
| `BLANK` | Local constant `""` | Blank string sentinel for parameters |
| `SVC_KEI_ICHII_FUNC_CD` | Local constant `"2"` | Service contract details retrieval function code |
| `WRIB_SVC_ICIHII_FUNC_CD` | Local constant `"2"` | Discount service master details retrieval function code |
| `MSKM_DTL_ICHII_FUNC_CD` | Local constant `"2"` | Application details retrieval function code |
| `WRIBSVK_DCHSKMST_GRP_SET` | Static import from JKKWrisvcDchskmCommonUtil | Group prefix for set (登録) operations |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `JKKWrisvcAutoAplyCC.getMapper.callWriSvcKeiIchiiShokai` | EKK0451A010 | KK_T_WRIBSVK_KEI (Discount Service Contract Master) | Retrieves discount service contract details by contract number. Returns billing start date (SVC_CHRG_STAYMD) and service start date (SVC_STA_YMD). |
| R | `JKKWrisvcAutoAplyCC.getMapper.callSvcKeiIchiiShokai` (KK0081A010 branch) | EKK0081A010 | KK_T_SVC_KEI (Service Contract Master) | Retrieves service contract details including SVC_CHRG_ENDYMD, SVC_KEI_STAT, SVC_CHRG_STAYMD. Called per target contract in main loop. |
| R | `JKKWrisvcAutoAplyCC.getMapper.callSvcKeiIchiiShokai` (HYOJUN branch) | EKK0081A010 | KK_T_SVC_KEI (Service Contract Master) | Retrieves service contract details for base service in standard campaign block. Used to track latest GENE_ADD_DTM per service code. |
| R | `JKKWrisvcAutoAplyCC.getMapper.callEKK0081B029` | EKK0081B029 | KK_T_SVC_KEI_HMKJ (Service Contract History/Details) | Retrieves base service contract list for the base service number. Returns EKK0081B029 results containing service contract numbers. |
| R | `JKKWrisvcAutoAplyCC.getMapper.callWriSvcMstIchiiShokai` | EKK0841A010 | KK_T_WRIB_SVC_MST (Discount Service Master) | Retrieves discount service master details by service code. Returns service subtype code (WRIB_SVC_SBT_CD) used to determine replacement-type contracts. |
| R | `JKKWrisvcAutoAplyCC.getMapper.callMskmDtlIchiiShokai` | EKK0011A010 | KK_T_MSKM_DTL (Application Details) | Retrieves application detail records for matching the current application number against a disconnected service's application. |
| C | `JKKWrisvcAutoAplyCC.getSvcChrgStaYmd` | - | - | Calculates service billing start date using multiple date parameters. Service Component internal method. |
| C | `JKKWrisvcAutoAplyCC.getSvcChrgEndYmd` | - | - | Calculates service billing end date using multiple date parameters. Uses dslKisanYmd (service cancellation start date) as 6th parameter (OM-2017-0000628). |
| R | `JBSbatInterface.getEndOfMonth` | - | - | Utility: Returns the last day of the month for a given date string (used in end-of-month adjustment). |
| R | `JCCbatMojiChgReferenceCache.getValue` | - | - | Cache retrieval utility (used indirectly via helper methods). |
| R | `JBSbatCHSeikyUwDataHenshu.getEndOfMonth` | - | - | Utility: End-of-month date calculation. |
| R | `JBSbatFUCaseFileRnkData.getString` | - | - | Data access utility. |
| R | `JBSbatFUMoveNaviData.getString` | - | - | Data access utility. |
| R | `JBSbatKKIdTchishoChshtForBtry.getValue` | - | - | Cache value retrieval. |
| R | `JBSbatKKIdTchishoChshtForMrgc.getValue` | - | - | Cache value retrieval. |
| R | `JBSbatZMAdDataSet.getString` | - | - | Data set retrieval utility. |
| R | `JBSbatZMAdHoseiDataSksi.getMapData` | - | - | Map data retrieval utility. |
| R | `JCKKeishaChgCmpCC.getValue` | - | - | Company change comparison cache. |
| R | `JCKKeishaChgOrsCC.getValue` | - | - | Company change ORS cache. |
| R | `JCRJudgeNgWordCC.getMapData` | - | - | Bad word judgment map data. |
| R | `JCRJudgeNgWordEasyMlCC.getMapData` | - | - | Easy bad word judgment map data. |
| R | `JKKWrisvcAutoAplyCC.getBaseSvcKeiMap` | - | - | Internal method: Retrieves base service contract map from ccMap. |
| R | `JKKWrisvcAutoAplyCC.getBaseSvcKeiNo` | - | - | Internal method: Derives base service contract number from base map. |
| R | `JKKWrisvcAutoAplyCC.getSvcChrgEndYmd` | - | - | See above — billing end date calculation. |
| C | `JKKWrisvcAutoAplyCC.setEndYmdForWribType32` | - | - | Sets end date for long-term continued discount (Type 32) — adjusts for penalty assessment. |
| C | `JKKWrisvcAutoAplyCC.setRetroMapForRlsInf` | - | - | Determines retroactive application scope based on cancellation start date and billing end date. |
| - | `JKKBatClarisAuthCrdt.isNullBlank` | - | - | Null/blank check utility. |
| - | `JBSbatACEoElectPrcInfoTrkm.isNullBlank` | - | - | Null/blank check utility. |
| - | `JBSbatACTrgtSvcKeiMake.isNullBlank` | - | - | Null/blank check utility. |
| - | `JBSbatCHKssaidkCvsNkinInfoAdd.isNullBlank` | - | - | Null/blank check utility. |
| - | `JBSbatCHMakeEoElecKyseKiykList.isNullBlank` | - | - | Null/blank check utility. |
| R | `JKKWrisvcDchskmCommonUtil.getMapData` | - | - | Retrieves nested map data from the work map by flag (wribDchsSkbtFlag). Used to extract target contract list. |
| - | `JKKStringUtil.isNullBlank` | - | - | String null/blank check utility (used extensively). |
| - | `JKKStringUtil.nullToBlank` | - | - | Converts null to empty string. |
| - | `JPCDateUtil.addMonth` | - | - | Adds/subtracts months from a YYYYMMDD date string. |
| - | `JPCDateUtil.addDay` | - | - | Adds days to a YYYYMMDD date string. |
| - | `JPCDateUtil.getEndOfMonth` | - | - | Returns end-of-month suffix ("01", "28", "29", "30", "31") for a given date. |
| - | `JKKWrisvcAutoAplyCC.calcRenbanDigitSize` | - | - | Calculates digit width for serial number formatting based on list size. |
| - | `isWribSvcCdToTikanType` | - | - | Internal method: Determines if the discount service subtype is "replacement type" (置き換え型). |
| - | `printlnEjbLog` | - | - | Logging utility: writes business log entries. |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | `JKKWrisvcAutoAplyCC.setSvcChgYmdInf` | `setSvcChgYmdInf` -> `setSvcChrgYmdInfToStat910` | `callWriSvcKeiIchiiShokai [R] KK_T_WRIBSVK_KEI`, `callSvcKeiIchiiShokai [R] KK_T_SVC_KEI`, `callWriSvcMstIchiiShokai [R] KK_T_WRIB_SVC_MST`, `callMskmDtlIchiiShokai [R] KK_T_MSKM_DTL` |

**Note:** The direct caller `setSvcChgYmdInf` is the primary entry point to this method. It is called from within the broader `executeWrisvcDchskmAutoRls` cancellation processing flow in `JKKWrisvcAutoAplyCC`. The method is specifically invoked when processing discount services whose contract status is "910: Contract Cancelled" during the automatic cancellation workflow.

## 6. Per-Branch Detail Blocks

**Block 1** — [SET] Initialize local variables (L9873)

> Sets initial state: `ret = false` (parent cancellation flag), declares date variables.

| # | Type | Code |
|---|------|------|
| 1 | SET | `ret = false` // true = parent cancellation processing completed |
| 2 | SET | `wribSvcKeiNo = inMapWribsvkDchskmst.get(WRIB_SVC_KEI_NO)` // Discount service contract number |
| 3 | SET | `kk0451 = getMapper().callWriSvcKeiIchiiShokai(ccMap, wribSvcKeiNo, WRIB_SVC_KEI_ICIHII_FUNC_CD, renbanNo)` // Fetch contract details |
| 4 | SET | `setSvcChgStaYmd = kk0451.get(SVC_CHRG_STAYMD)` // Billing start date from contract |
| 5 | SET | `setSvcStaYmd = kk0451.get(SVC_STA_YMD)` // Service start date from contract |
| 6 | SET | `kk0081SvcChgStaYmd = null` // Billing start date calculation temp |
| 7 | SET | `kk0081SetSvcChgStaYmd = null` // Set billing start date temp |
| 8 | SET | `setSvcChgEndYmd = null` // Return value |
| 9 | SET | `maxSvcChgEndYmd = null` // Maximum value tracking |
| 10 | SET | `svcChrgEndYmd = null` // Temporary holding |
| 11 | SET | `svcKeiStat = null` // Service contract status |
| 12 | SET | `dslKisanYmd = null` // Service cancellation start date (v5.00.46) |

**Block 2** — [CALL] Get target contract list (L9902)

> Extracts the discount service target contract list from inMap, using the wribDchsSkbtFlag to determine which list to retrieve.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `wrisvcTgKeiList = JKKWrisvcDchskmCommonUtil.getMapData(inMapWribsvkDchskmst, KKSV0313_KKSV0313OP_WORK_WRIBSVK_DCHSKMST.WRISVC_TG_KEI_LIST, KKSV0313_KKSV0313OP_WORK_WRIBSVK_DCHSKMST.DCHSKMST_TG_KEI_LIST, wribDchsSkbtFlag)` |
| 2 | SET | `renbanForTgKei = 0` // Loop counter |
| 3 | CALL | `digitSize = calcRenbanDigitSize(wrisvcTgKeiList.size())` // Serial number digit width |

**Block 3** — [IF] HYOJUN standard discount campaign block (L9908) `[WRIB_DCHS_SKBT_FLAG_WRIB="1"]`

> Checks if processing is discount-flag (wribDchsSkbtFlag = "1") AND the discount service code is in the standard installation fee campaign list. If true, enters an enhanced block that queries base service contract data.

| # | Type | Code |
|---|------|------|
| 1 | IF | `WRIB_DCHS_SKBT_FLAG_WRIB.equals(wribDchsSkbtFlag) && HYOJUN_KOJIHI_WRBK_CP_LIST.contains(inMapWribsvkDchskmst.get(WRIB_SVC_CD))` |
| 2 | SET | `digitSize = calcRenbanDigitSize(wrisvcTgKeiList.size())` // Recompute digit size |
| 3 | CALL | `baseSvcKeiMap = getBaseSvcKeiMap(ccMap)` |
| 4 | SET | `tgKeiSkbtCd = baseSvcKeiMap.get(TG_KEI_SKBT_CD)` |
| 5 | CALL | `baseSvcKeiNo = getBaseSvcKeiNo(baseSvcKeiMap, tgKeiSkbtCd)` |
| 6 | IF | `!JKKStringUtil.isNullBlank(baseSvcKeiNo)` (L9919) |
| 7 | CALL | `ekk0081B029List = getMapper().callEKK0081B029(baseSvcKeiNo)` |
| 8 | SET | `digitSize = calcRenbanDigitSize(ekk0081B029List.length)` // Recompute by EKK result count |
| 9 | SET | `svcMap = new HashMap<String, Map<String, String>>()` |

**Block 3.1** — [FOR] Loop over EKK0081B029 results (L9925)

> Iterates through base service contract entries. For each, queries service contract details and tracks the latest record per service code (CD00130_01/02/03 — FTTH/Ethernet/VoIP).

| # | Type | Code |
|---|------|------|
| 1 | FOR | `ekk0081B029Map in ekk0081B029List` (L9925) |
| 2 | SET | `renbanForTgKei++` |
| 3 | SET | `renbanNoForTgKei = WRIBSVK_DCHSKMST_GRP_SET + String.format("%0" + digitSize + "d", renbanForTgKei)` |
| 4 | SET | `svcKeiNo = ekk0081B029Map.getString(SVC_KEI_NO)` |
| 5 | CALL | `ekk0081a010Map = getMapper().callSvcKeiIchiiShokai(ccMap, svcKeiNo, SVC_KEI_ICHII_FUNC_CD, renbanNoForTgKei)` |
| 6 | SET | `svcCd = JKKStringUtil.nullToBlank(ekk0081a010Map.get(SVC_CD))` |
| 7 | SET | `geneAddDtm = JKKStringUtil.nullToBlank(ekk0081a010Map.get(GENE_ADD_DTM))` |
| 8 | IF | `JKKStrConst.CD00130_01.equals(svcCd) \|\| JKKStrConst.CD00130_02.equals(svcCd) \|\| JKKStrConst.CD00130_03.equals(svcCd)` (L9932) |

**Block 3.1.1** — [IF] Track latest data per service code (CD00130_01/02/03) (L9933)

> For FTTH/Ethernet/VoIP service codes, maintains a svcMap keyed by svcCd. Tracks the latest GENE_ADD_DTM to find the most recent service contract record.

| # | Type | Code |
|---|------|------|
| 1 | SET | `svcMapNow = svcMap.get(svcCd)` |
| 2 | IF | `svcMapNow == null` (L9936) |
| 3 | SET | `svcMapNow = new HashMap<String, String>(); svcMap.put(svcCd, svcMapNow)` |
| 4 | SET | `geneAddDtmNow = JKKStringUtil.nullToBlank(svcMapNow.get(GENE_ADD_DTM))` |
| 5 | IF | `geneAddDtmNow.compareTo(geneAddDtm) < 0` (newer record) (L9941) |
| 6 | SET | `svKeiStat = JKKStringUtil.nullToBlank(ekk0081a010Map.get(SVC_KEI_STAT))` |
| 7 | SET | `svcChrgStaymd = JKKStringUtil.nullToBlank(ekk0081a010Map.get(SVC_CHRG_STAYMD))` |
| 8 | SET | `svcChrgEndymd = JKKStringUtil.nullToBlank(ekk0081a010Map.get(SVC_CHRG_ENDYMD))` |
| 9 | SET | `svcDslkisanYmd = JKKStringUtil.nullToBlank(ekk0081a010Map.get(SVC_DSL_KISAN_YMD))` |
| 10 | SET | `mskmDtlNo = JKKStringUtil.nullToBlank(ekk0081a010Map.get(MSKM_DTL_NO))` |
| 11 | SET | `svcMapNow.put(SVC_KEI_NO, svcKeiNo)` |
| 12 | SET | `svcMapNow.put(SVC_KEI_STAT, svKeiStat)` |
| 13 | SET | `svcMapNow.put(SVC_CHRG_STAYMD, svcChrgStaymd)` |
| 14 | SET | `svcMapNow.put(SVC_CHRG_ENDYMD, svcChrgEndymd)` |
| 15 | SET | `svcMapNow.put(SVC_DSL_KISAN_YMD, svcDslkisanYmd)` |
| 16 | SET | `svcMapNow.put(MSKM_DTL_NO, mskmDtlNo)` |
| 17 | SET | `svcMapNow.put(GENE_ADD_DTM, geneAddDtm)` // ANK-4627-00-00 #85076 |

**Block 3.2** — [FOR] Filter disconnected contracts (L9959)

> Filters svcMap entries to find those with SVC_KEI_STAT = "910" (Contract Cancelled).

| # | Type | Code |
|---|------|------|
| 1 | SET | `dslSvcKeiList = new ArrayList<Map<String, String>>()` |
| 2 | FOR | `entry : svcMap.entrySet()` (L9960) |
| 3 | SET | `svcMapNow = entry.getValue()` |
| 4 | IF | `svcMapNow != null` |
| 5 | SET | `svKeiStat = JKKStringUtil.nullToBlank(svcMapNow.get(SVC_KEI_STAT))` |
| 6 | IF | `JKKSvcConst.SVC_KEI_STAT_910.equals(svKeiStat)` |
| 7 | SET | `dslSvcKeiList.add(svcMapNow)` |

**Block 3.3** — [IF] Match application number for DSL contracts (L9969) `[dslSvcKeiList.size() > 0]`

> If disconnected DSL contracts exist, matches them against the current application number (mskmNo from ccMap) via the MSKM_DTL (application details) inquiry.

| # | Type | Code |
|---|------|------|
| 1 | IF | `dslSvcKeiList.size() > 0` (L9969) |
| 2 | SET | `mskmNo = nullToBlank(ccMap.get(KKSV0313_KKSV0313OP_WORK.MSKM_NO))` // Application number (v60.00.05) |
| 3 | SET | `renbanForTgKeiDsl = 0` |
| 4 | SET | `digitSizeDsl = calcRenbanDigitSize(dslSvcKeiList.size())` |
| 5 | FOR | `svcMapNow : dslSvcKeiList` (L9974) |
| 6 | SET | `renbanForTgKeiDsl++` |
| 7 | SET | `renbanNoForTgKei = WRIBSVK_DCHSKMST_GRP_SET + String.format("%0" + digitSizeDsl + "d", renbanForTgKeiDsl)` |
| 8 | SET | `dslSvcMskmDtlNo = JKKStringUtil.nullToBlank(svcMapNow.get(MSKM_DTL_NO))` |
| 9 | SET | `mskmDtlNoMap = new HashMap<String, Object>()` |
| 10 | SET | `mskmDtlNoMap.put(MSKM_DTL_NO, dslSvcMskmDtlNo)` |
| 11 | CALL | `getMapper().callMskmDtlIchiiShokai(ccMap, mskmDtlNoMap, MSKM_DTL_ICHII_FUNC_CD, renbanNoForTgKei)` |
| 12 | SET | `mskmDtlList = mskmDtlNoMap.get(MSKM_DTL_LIST)` |
| 13 | SET | `mskmDtl = mskmDtlList.get(0)` |
| 14 | SET | `dslMskmNo = nullToBlank(mskmDtl.get(MSKM_NO))` |
| 15 | IF | `mskmNo.equals(dslMskmNo)` — application numbers match (L9988) |

**Block 3.3.1** — [IF] Application matched, save max billing end date (L9989)

> When the disconnected service's application number matches the current application, mark `ret = true` and track the maximum billing end date across all matching DSL contracts.

| # | Type | Code |
|---|------|------|
| 1 | SET | `ret = true` |
| 2 | SET | `svcChgEndYmd = JKKStringUtil.nullToBlank(svcMapNow.get(SVC_CHRG_ENDYMD))` |
| 3 | IF | `maxSvcChgEndYmd == null \|\| svcChgEndYmd.compareTo(maxSvcChgEndYmd) > 0` (L9995) |
| 4 | SET | `maxSvcChgEndYmd = svcChgEndYmd` |
| 5 | SET | `kk0081SetSvcChgStaYmd = JKKStringUtil.nullToBlank(svcMapNow.get(SVC_CHRG_STAYMD))` |
| 6 | SET | `setSvcChgEndYmd = svcChgEndYmd` |
| 7 | SET | `dslKisanYmd = JKKStringUtil.nullToBlank(svcMapNow.get(SVC_DSL_KISAN_YMD))` |

**Block 4** — [FOR] Main target contract list loop (L10022)

> Iterates over each discount service target contract. If the HYOJUN standard campaign flag applies (same check as Block 3), breaks out of the loop since the enhanced block already processed the data.

| # | Type | Code |
|---|------|------|
| 1 | FOR | `mapWrisvcTgKei : wrisvcTgKeiList` (L10022) |
| 2 | IF | `WRIB_DCHS_SKBT_FLAG_WRIB.equals(wribDchsSkbtFlag) && HYOJUN_KOJIHI_WRBK_CP_LIST.contains(inMapWribsvkDchskmst.get(WRIB_SVC_CD))` (HYOJUN standard campaign) (L10027) |
| 3 | SET | `break` // Skip main loop — already processed in Block 3 |
| 4 | SET | `renbanForTgKei++` (L10034) |
| 5 | SET | `renbanNoForTgKei = WRIBSVK_DCHSKMST_GRP_SET + String.format("%0" + digitSize + "d", renbanForTgKei)` |
| 6 | SET | `svcKeiNo = mapWrisvcTgKei.get(SVC_KEI_NO)` |
| 7 | IF | `!JKKStringUtil.isNullBlank(svcKeiNo)` (L10039) |
| 8 | SET | `map = getMapper().callSvcKeiIchiiShokai(ccMap, svcKeiNo, SVC_KEI_ICHII_FUNC_CD, renbanNo + renbanNoForTgKei)` |
| 9 | SET | `kk0081SvcChgStaYmd = map.get(SVC_CHRG_STAYMD)` |
| 10 | SET | `svcChrgEndYmd = map.get(SVC_CHRG_ENDYMD)` |
| 11 | SET | `svcKeiStat = map.get(SVC_KEI_STAT)` |
| 12 | IF | `JKKSvcConst.SVC_KEI_STAT_910.equals(svcKeiStat)` (Contract Cancelled) (L10051) |

**Block 4.1** — [IF] Track max billing end date for status 910 (L10052)

> Among all contracts with status 910 (Contract Cancelled), keeps the one with the latest billing end date.

| # | Type | Code |
|---|------|------|
| 1 | IF | `maxSvcChgEndYmd == null \|\| svcChrgEndYmd.compareTo(maxSvcChgEndYmd) > 0` |
| 2 | SET | `maxSvcChgEndYmd = svcChrgEndYmd` |
| 3 | SET | `kk0081SetSvcChgStaYmd = kk0081SvcChgStaYmd` |
| 4 | SET | `setSvcChgEndYmd = svcChrgEndYmd` |
| 5 | SET | `dslKisanYmd = (String) map.get("svc_dsl_kisan_ymd")` // v5.00.46 |
| 6 | SET | `ret = true` |

**Block 5** — [IF] Main setup processing (`ret == true`) (L10117)

> If any contract was found with status 910, perform final billing date calculations and set results on inMapWribsvkDchskmst.

| # | Type | Code |
|---|------|------|
| 1 | IF | `ret` — parent cancellation processing flag (L10117) |
| 2 | SET | `wribSvcCd = inMapWribsvkDchskmst.get(WRIB_SVC_CD)` |
| 3 | CALL | `ekk0841Map = getMapper().callWriSvcMstIchiiShokai(ccMap, wribSvcCd, WRIB_SVC_ICIHII_FUNC_CD, renbanNo)` |
| 4 | SET | `svcSbtCd = ekk0841Map.get(WRIB_SVC_SBT_CD)` |

**Block 5.1** — [IF] Replacement-type contract processing (置き換え型) (L10136)

> For "replacement type" discount services (e.g., service substitution/swaps), uses the service cancellation start date as a parameter for billing date calculation instead of the regular billing end date (OM-2017-0000628 modification).

| # | Type | Code |
|---|------|------|
| 1 | IF | `isWribSvcCdToTikanType(svcSbtCd)` — replacement type check (L10136) |
| 2 | SET | `kk0451SvcChgStaYmd = setSvcChgStaYmd` // Save KK0451 billing start date |
| 3 | SET | `kk0081SvcChgEndYmd = setSvcChgEndYmd` // Save KK0081 billing end date |
| 4 | CALL | `setSvcChgStaYmd = getSvcChrgStaYmd(setSvcStaYmd, kk0451SvcChgStaYmd, "", kk0081SetSvcChgStaYmd, svcSbtCd, dslKisanYmd)` // 6th param: cancellation start date (not billing end date) |
| 5 | CALL | `setSvcChgEndYmd = getSvcChrgEndYmd(setSvcStaYmd, kk0451SvcChgStaYmd, "", kk0081SetSvcChgStaYmd, svcSbtCd, dslKisanYmd)` // 6th param: cancellation start date |
| 6 | IF | `!MAX_YMD.equals(setSvcChgEndYmd)` — computed end date is NOT the sentinel "non-billing" value (L10205) |
| 7 | SET | `setSvcChgEndYmd = kk0081SvcChgEndYmd` // Restore parent's original end date |

**Block 5.2** — [IF] Non-billing date reversal (非課金) (L10214)

> If the billing start date is blank and the end date is MAX_YMD (20991231), reverse the dates: billing starts from day 1 after the end date and ends at the end date. This handles "non-billing" scenarios for replacement-type contracts.

| # | Type | Code |
|---|------|------|
| 1 | IF | `BLANK_YMD.equals(setSvcChgStaYmd) && MAX_YMD.equals(setSvcChgEndYmd)` (L10214) |
| 2 | SET | `setSvcChgStaYmd = JPCDateUtil.addDay(kk0081SvcChgEndYmd, 1)` // Start = day after end |
| 3 | SET | `setSvcChgEndYmd = kk0081SvcChgEndYmd` // End stays same |

**Block 5.3** — [SET] Plan billing start date (L10240)

> Sets the plan-level billing start date (PLAN_CHRG_STAYMD) for replacement-type contracts.

| # | Type | Code |
|---|------|------|
| 1 | SET | `inMapWribsvkDchskmst.put(PLAN_CHRG_STAYMD, setSvcChgStaYmd)` // v5.00.37 |

**Block 5.4** — [SET] Set service billing start date on output map (L10247)

> Sets the final billing start date on the output map.

| # | Type | Code |
|---|------|------|
| 1 | SET | `inMapWribsvkDchskmst.put(SVC_CHRG_STAYMD, setSvcChgStaYmd)` |

**Block 5.5** — [IF] Installation fee discount campaign end date adjustment (L10251)

> For contracts under the installation fee discount campaign (ALL_KOJIHI_CP_LIST or HYOJUN_KOJIHI_WRBK_CP_LIST), if the service cancellation start date's day-of-month is not "01", adjust the billing end date to the end of the previous month.

| # | Type | Code |
|---|------|------|
| 1 | IF | `ALL_KOJIHI_CP_LIST.contains(wribSvcCd) \|\| HYOJUN_KOJIHI_WRBK_CP_LIST.contains(wribSvcCd)` (L10251) |
| 2 | IF | `"01".equals(dslKisanYmd.substring(6, 8))` — cancellation day is NOT the 1st |
| 3 | SET | `setSvcChgEndYmd = JPCDateUtil.addMonth(setSvcChgEndYmd, -1).substring(0, 6) + JPCDateUtil.getEndOfMonth(JPCDateUtil.addMonth(setSvcChgEndYmd, -1))` // End of previous month |

**Block 5.6** — [SET] Set service billing end date and flag (L10262)

> Writes the billing end date and the manual calculation flag to the output map.

| # | Type | Code |
|---|------|------|
| 1 | SET | `inMapWribsvkDchskmst.put(SVC_CHRG_ENDYMD, setSvcChgEndYmd)` |
| 2 | SET | `inMapWribsvkDchskmst.put(SVC_CHRG_ENDYMD_FLG, SVC_CHRG_ENDYMD_FLG_MANUAL)` // Flag = "0" |

**Block 5.7** — [CALL] Retroactive determination (L10268)

> Determines the retroactive application scope based on cancellation start date and billing end date.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `setRetroMapForRlsInf(ccMap, inMapWribsvkDchskmst, dslKisanYmd, setSvcChgEndYmd)` // v20.00.07 — 4th param added |

**Block 5.8** — [IF] Long-term continued discount (長期継続割引) (L10276)

> For long-term continued discount service code `W00000041`, performs an additional end date adjustment for penalty assessment.

| # | Type | Code |
|---|------|------|
| 1 | IF | `W_WRIB_CD_41.equals(wribSvcCd)` — service code is W00000041 (L10276) |
| 2 | CALL | `setEndYmdForWribType32(ccMap, inMapWribsvkDchskmst, kk0451, dslKisanYmd, setSvcChgEndYmd)` |

**Block 6** — [SET] Logging and return (L10283)

> Logs the final billing dates and calculation flag, then returns the cancellation processing flag.

| # | Type | Code |
|---|------|------|
| 1 | SET | `printlnEjbLog("業務log_サービス課金開始年月日: " + setSvcChgStaYmd)` |
| 2 | SET | `printlnEjbLog("業務log_サービス課金終了年月日: " + setSvcChgEndYmd)` |
| 3 | SET | `printlnEjbLog("業務log_サービス課金終了年月日算出フラグ: " + SVC_CHRG_ENDYMD_FLG_MANUAL)` |
| 4 | SET | `printlnEjbLog("業務log_返り: " + ret)` |
| 5 | SET | `printlnEjbLog("業務log_setSvcChrgYmdInfToStat910: ---end--")` |
| 6 | RETURN | `return ret` |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `svc_chrg_sta_ymd` | Field | Service billing start date (YYYYMMDD format) — the date when billing for the service contract begins |
| `svc_chrg_end_ymd` | Field | Service billing end date (YYYYMMDD format) — the date when billing for the service contract ends |
| `svc_chrg_endymd_flg` | Field | Service billing end date calculation flag — "0" = manually calculated, indicates the end date was derived through business logic rather than auto-generated |
| `plan_chrg_sta_ymd` | Field | Plan billing start date — the start date for the billing plan, used in replacement-type contract processing |
| `svc_kei_no` | Field | Service contract number — unique identifier for a service contract line |
| `svc_kei_stat` | Field | Service contract status — "910" means "Contract Cancelled" (解約済), the key status code this method targets |
| `svc_cd` | Field | Service code — classifies the type of service (e.g., CD00130_01 = FTTH, CD00130_02 = Ethernet, CD00130_03 = VoIP) |
| `wrib_svc_kei_no` | Field | Discount service contract number (割引サービス契約番号) — the contract number for a discount service agreement |
| `wrib_svc_cd` | Field | Discount service code (割引サービスコード) — identifies the specific discount service type |
| `wrib_svc_sbt_cd` | Field | Discount service subtype code — used to determine if the discount service is a "replacement type" (置き換え型) |
| `wrib_dchs_skbt_flag` | Field | Discount service / data extraction flag — "1" = discount processing, "2" = data extraction processing |
| `dsl_kisan_ymd` | Field | Service cancellation start date (サービス解約起算年月日) — the date from which the cancellation period is calculated, used in billing date formulas |
| `gen_add_dtm` | Field | Generation add datetime (成立日時) — the timestamp when a service contract record was created/registered, used to determine the latest version of a record |
| `mskm_no` | Field | Application number (申請番号) — the unique identifier for a service application/request |
| `mskm_dtl_no` | Field | Application detail number (申請明細番号) — identifies a specific line item within an application |
| `mskm_dtl_list` | Field | Application detail list — list of application detail records returned from the inquiry |
| `wrisvc_tg_kei_list` | Field | Discount service target contract list — list of service contracts eligible for discount application processing |
| `dchskmst_tg_kei_list` | Field | Discount setting target contract list — list of target contracts from the discount settings perspective |
| `ret` | Variable | Retention flag (保持フラグ) — true indicates the parent cancellation processing was completed successfully (親の解約処理), false otherwise |
| `max_svc_chg_end_ymd` | Variable | Maximum service billing end date — tracks the latest billing end date across all status-910 contracts |
| `digitSize` | Variable | Serial number digit width — number of digits for formatting the renban (連番) serial number |
| `renbanNoForTgKei` | Variable | Serial number for target contract — formatted group identifier for a specific target contract |
| `hyojun_kojihi_wrbk_cp_list` | List | Standard installation fee discount campaign list — contains codes for 24-installment standard discount (標準工事費割引キャンペーン) |
| `all_kojihi_cp_list` | List | All installation fee campaign discount list — contains codes for all installation fee discount services (net and telephone variants) |
| `w_wrib_cd_41` | Constant | Service code "W00000041" — long-term continued discount service code (長期継続割引) |
| `max_ymd` | Constant | "20991231" — sentinel value meaning "non-billing period" or "permanent" (非課金) |
| `blank_ymd` | Constant | "" (empty string) — sentinel value meaning "no date set" (空文字) |
| `svc_chrg_endymd_flg_manual` | Constant | "0" — manual billing end date calculation flag (手動算出フラグ) |
| `WRIB_DCHS_SKBT_FLAG_WRIB` | Constant | "1" — discount service processing flag (割引サービスフラグ) |
| `SVC_KEI_STAT_910` | Constant | "910" — service contract status code for "Contract Cancelled" (解約済) |
| `CD00130_01/02/03` | Constants | Service codes for FTTH / Ethernet / VoIP respectively |
| EKK0081A010 | SC Code | Service Contract Master Inquiry — retrieves service contract details (サービス契約照会) |
| EKK0081B029 | SC Code | Base Service Contract Inquiry — retrieves base service contract list (基本サービス契約照会) |
| EKK0011A010 | SC Code | Application Details Inquiry — retrieves application detail records (申請明細照会) |
| EKK0451A010 | SC Code | Discount Service Contract Details Inquiry — retrieves discount service contract details (割引サービス契約詳細照会) |
| EKK0841A010 | SC Code | Discount Service Master Inquiry — retrieves discount service master records (割引サービス照会) |
| KK_T_SVC_KEI | DB Table | Service Contract Master table (サービス契約マスタ) — stores service contract records |
| KK_T_WRIBSVK_KEI | DB Table | Discount Service Contract Master table (割引サービス契約マスタ) — stores discount service contract records |
| KK_T_WRIB_SVC_MST | DB Table | Discount Service Master table (割引サービスマスタ) — stores discount service definition records |
| KK_T_MSKM_DTL | DB Table | Application Details table (申請明細) — stores application detail line items |
| FTTH | Business term | Fiber To The Home — fiber-optic broadband internet service |
| Ethernet | Business term | Ethernet connectivity service — Ethernet-based LAN/wired connection service |
| VoIP | Business term | Voice over IP — internet-based telephone service |
| 置き換え型 (Tikan-type) | Business term | Replacement type — a discount service where an existing contract is replaced/substituted with a new one (置き換え契約) |
| 長期継続割引 | Business term | Long-term continued discount — a discount type for services with long-term continuous usage (service code W00000041) |
| 工事費割引キャンペーン | Business term | Installation fee discount campaign — promotional discount on installation fees, with net and telephone variants |
| 標準工事費割引 | Business term | Standard installation fee discount — standardized 24-installment installation fee discount (24回) |
| 解約済 (Stat 910) | Business term | Contract Cancelled — the status code for a service contract that has been terminated/cancelled |
| 非課金 | Business term | Non-billing — a state where no billing charges apply, represented by BLANK_YMD for start and MAX_YMD for end |
| 起算日 (Kisan) | Business term | Start date for calculation period — the reference date from which cancellation-related periods are computed |
