# Business Logic — JKKWribSvcKeiOperateCC.createContents() [881 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `com.fujitsu.futurity.bp.custom.common.JKKWribSvcKeiOperateCC` |
| Layer | CC/Common Component — Shared business logic component within the K-Opticom broadband customer backbone system |
| Module | `common` (Package: `com.fujitsu.futurity.bp.custom.common`) |

## 1. Role

### JKKWribSvcKeiOperateCC.createContents()

This method is the central registration entry point for discount service contract (wribSvcKei) creation on the K-Opticom e-BB (broadband) customer backbone system. It processes one or more target service contracts supplied by the screen (KKSV0238 screen), performs all required business validation, applies promotional campaign eligibility checks, registers application details (mskm) and subsequent processing tasks, creates progress tracking records, and handles side-effects such as cancellation of conflicting instant discount contracts, family pack contract notifications, and introduction information change registration.

The method branches by `keiKind` (line category kind): **HNSOKU** (application/registration) handles simple data-extraction-item registration without a discount service contract, while **WRIB** (discount service registration) creates the discount service contract itself with optional recovery (re-registration) logic. For each contract in the loop, the method resolves service codes, manages campaign grouping (A through E), validates campaign exclusivity rules (mutual exclusion, device availability, network/tv dependency), and builds error check lists returned to the UI.

Design pattern: A multi-phase **routing/dispatch** pattern combined with a **delegation** model — the method reads structured input data from `IRequestParameterReadWrite`, resolves service-type-specific branches, delegates low-level tasks (MSKM creation, progress creation, campaign checks, contract notifications) to specialized co-worker methods, and returns the enriched param object for downstream processing.

Its role in the larger system is that of the **registration orchestrator** — it is called from `JKKWribSvcKeiOperateCC.execute()` as the core business logic handler for the discount service contract registration screen. It serves as the bridge between screen-level user input and backend CBS (center-based system) registration operations, ensuring all business rules (campaign conflicts, application count limits, migration reason tracking) are enforced before persisting data.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["createContents param"])
    INIT["Initialize errInfo wriMap FamilyPackErrFlg"]
    GET_TARGET["Get KKSV023801CC 023802CC 023803CC from param"]
    GEN_KEIS["generateKeisForCreate targetList keis"]
    GET_ADDITION["Extract ido_div mskm_ymd sysid mskm_kisan_ymd ido_rsn_memo"]
    GET_JCT["getJctWribSvcCdList param jctWribSvcCdList"]
    INIT_CAMPAIGN["Initialize campaignMaps svcCdControlMap"]
    LOOP_START["for each kei in keis"]
    GET_NO["Extract no kei_kind trgtKeis"]
    SWITCH_KIND{"keiKind?"}
    CASE_HNSOKU["HNSOKU: createAndFixMskmMskmDtl"]
    CASE_WRIB["WRIB: isExecRecover wribList check"]
    SVC_CD_CTRL{"svcCdControlMap has svcCd?"}
    SVC_EXIST["svcCd exists: check dedup add to list"]
    SVC_NEW["svcCd new: create list put to map"]
    SET_INMSKM["this.inMskmYmd mskmYmd"]
    CREATE_CONTENT["createContent param funcCd wribSvcKeiNo"]
    RESET_INMSKM["this.inMskmYmd empty"]
    STORE_MAP["if WRIB wriMap put wribSvcKeiNo"]
    CHECK_SOK{"wribSvcCd == SOK_WRI W00000021?"}
    DELETE_OLD["autoDeleteWribSvcKei for CHO_WRI"]
    CHECK_CHO{"wribSvcCd == CHO_WRI W00000011?"}
    CHECK_SOKAPPLY["Check SOK_WRI applied in progress"]
    CHECK_JCT{"jctWribSvcCdList contains wribSvcCd?"}
    JCT_CHECK["checkJctSpclCp validation"]
    SET_PRG{"keiKind WRIB or HNSOKU?"}
    SET_PRG_WRIB["prgSta PRG_STAT_WRIB_ADD_FIN F050"]
    SET_PRG_HNSOKU["prgSta PRG_STAT_DCHSKM_ADD_FIN F060"]
    YMD_DIFF{"mskmYmd != mskmKisanYmd?"}
    ADD_YMD_MSG["Add MSKM_YMD_DIFF_MESSAGE to idoRsnMemo"]
    CALL_CNT{"keiKind check applyCnt?"}
    CALL_SOK_CNT["callWrsvAplyCntIcrnShokai"]
    CALL_DCH_CNT["callDchskmstAplyCntStku"]
    CNT_GT0{"applyCnt > 0?"}
    ADD_AGING_MSG["Add AGING_WRIB_SVC_MESSAGE"]
    SUBSTRING["idoRsnMemo subStringByte 200 bytes"]
    LOOP_TRGT["for each trgtKei in trgtKeis"]
    CREATE_PRG["createPrg with prgStatToFamilyPack"]
    EXEC_TUCHI{"wribSvcCd is special?"}
    CHECK_NTT{"funcCd == 1 and nttOrsHantei?"}
    EXEC_NTYUCHI["executeKeiyakuNaiyoTuchi"]
    CHECK_PAUSE{"CP_CD_LIST_PAUSE_CP contains campaignCd?"}
    EXEC_PAUSE["executeKeiyakuNaiyoTuchi trgtKeis 99999"]
    CHECK_CAMP{"campaignCd is campaign target?"}
    COLLECT_CAMP["campaignMaps group by svcKeiKaisenUcwkNo"]
    CHECK_VIEWID{"REQ_VIEWID != KKW010350PJP?"}
    EXEC_INTR["exeJKKIntrInfoChgCfmCC"]
    PROCESS_CAMPS["Process campaignMaps groups A-E"]
    GROUP_A["Group A: Shohinken Ryohantokuten"]
    GROUP_B["Group B: SmartLink free discount"]
    GROUP_C["Group C: GoogleHome free discount"]
    GROUP_D["Group D: OiwaiPac waritoku"]
    GROUP_E["Group E: Norikae CP campaigns"]
    VALIDATE_A["campaignCnt > 1 error check"]
    VALIDATE_B["Missing tablet SmartLink check"]
    VALIDATE_C["Missing tablet GoogleHome check"]
    VALIDATE_D["Missing NetTv OiwaiPac check"]
    VALIDATE_DE["D and E conflict check"]
    VALIDATE_E["Multi Norikae CP count > 1 check"]
    POST_CAMPS{"campaignScreenFlgD or E?"}
    POST_GET_SVC["getEKK0241B002 service data"]
    POST_GET_WRIB["getEKK0451B002 wribSvc data"]
    POST_OIWAIPAC["OIWAIPAC_WARI check post registration"]
    POST_GET_DCH["getEKK1401B010 dchskm data"]
    POST_TOKUTEN["OIWAIPAC_TOKUTEN check"]
    POST_NORIKAE["NORIKAE_PAC check"]
    RETURN["return param"]

    START --> INIT --> GET_TARGET --> GEN_KEIS --> GET_ADDITION --> GET_JCT --> INIT_CAMPAIGN --> LOOP_START
    LOOP_START --> GET_NO --> SWITCH_KIND
    SWITCH_KIND --> |HNSOKU| CASE_HNSOKU
    SWITCH_KIND --> |WRIB| CASE_WRIB
    CASE_HNSOKU --> SVC_CD_CTRL
    CASE_WRIB --> SVC_CD_CTRL
    SVC_CD_CTRL --> |yes| SVC_EXIST
    SVC_CD_CTRL --> |no| SVC_NEW
    SVC_EXIST --> SET_INMSKM --> CREATE_CONTENT --> RESET_INMSKM --> STORE_MAP
    SVC_NEW --> SET_INMSKM --> CREATE_CONTENT
    STORE_MAP --> CHECK_SOK
    CHECK_SOK --> |yes| DELETE_OLD --> CHECK_CHO
    CHECK_SOK --> |no| CHECK_CHO
    CHECK_CHO --> |yes| CHECK_SOKAPPLY --> CHECK_JCT
    CHECK_CHO --> |no| CHECK_JCT
    CHECK_SOKAPPLY --> CHECK_JCT
    CHECK_JCT --> |yes| JCT_CHECK --> SET_PRG
    CHECK_JCT --> |no| SET_PRG
    JCT_CHECK --> SET_PRG
    SET_PRG --> |WRIB| SET_PRG_WRIB --> YMD_DIFF
    SET_PRG --> |HNSOKU| SET_PRG_HNSOKU --> YMD_DIFF
    SET_PRG --> |other| SET_PRG_HNSOKU --> YMD_DIFF
    SET_PRG_WRIB --> YMD_DIFF
    SET_PRG_HNSOKU --> YMD_DIFF
    YMD_DIFF --> |yes| ADD_YMD_MSG --> CALL_CNT
    YMD_DIFF --> |no| CALL_CNT
    ADD_YMD_MSG --> CALL_CNT
    CALL_CNT --> |WRIB| CALL_SOK_CNT --> CNT_GT0
    CALL_CNT --> |HNSOKU| CALL_DCH_CNT --> CNT_GT0
    CALL_SOK_CNT --> CNT_GT0
    CALL_DCH_CNT --> CNT_GT0
    CNT_GT0 --> |yes| ADD_AGING_MSG --> SUBSTRING
    CNT_GT0 --> |no| SUBSTRING
    ADD_AGING_MSG --> SUBSTRING
    SUBSTRING --> LOOP_TRGT
    LOOP_TRGT --> CREATE_PRG --> EXEC_TUCHI
    EXEC_TUCHI --> |yes| CHECK_NTT --> |yes| EXEC_NTYUCHI --> CHECK_PAUSE
    EXEC_TUCHI --> |no| CHECK_PAUSE
    CHECK_NTT --> |no| CHECK_PAUSE
    EXEC_NTYUCHI --> CHECK_PAUSE
    CHECK_PAUSE --> |yes| EXEC_PAUSE --> CHECK_CAMP
    CHECK_PAUSE --> |no| CHECK_CAMP
    EXEC_PAUSE --> CHECK_CAMP
    CHECK_CAMP --> |yes| COLLECT_CAMP --> LOOP_CONT
    CHECK_CAMP --> |no| COLLECT_CAMP --> LOOP_CONT
    COLLECT_CAMP --> LOOP_CONT["end for kei"]
    LOOP_CONT --> CHECK_VIEWID
    CHECK_VIEWID --> |yes| EXEC_INTR --> PROCESS_CAMPS
    CHECK_VIEWID --> |no| PROCESS_CAMPS
    EXEC_INTR --> PROCESS_CAMPS
    PROCESS_CAMPS --> GROUP_A
    GROUP_A --> GROUP_B
    GROUP_B --> GROUP_C
    GROUP_C --> GROUP_D
    GROUP_D --> GROUP_E
    GROUP_E --> VALIDATE_A
    VALIDATE_A --> VALIDATE_B
    VALIDATE_B --> VALIDATE_C
    VALIDATE_C --> VALIDATE_D
    VALIDATE_D --> VALIDATE_DE
    VALIDATE_DE --> VALIDATE_E
    VALIDATE_E --> POST_CAMPS
    POST_CAMPS --> |yes| POST_GET_SVC --> POST_GET_WRIB --> POST_OIWAIPAC --> POST_GET_DCH --> POST_TOKUTEN --> POST_NORIKAE --> RETURN
    POST_CAMPS --> |no| RETURN
    RETURN --> END_NODE(["End"])
```

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `param` | `IRequestParameterReadWrite` | The shared request/response container carrying all input data from the screen. It holds three key maps: `KKSV023801CC` (registration target contract info with `func_code` and `target_list`), `KKSV023802CC` (registration candidate child contract info with `target_list`), and `KKSV023803CC` (additional info including `ido_div` (migration division), `mskm_ymd` (application date), `sysid` (system ID), `mskm_kisan_ymd` (application accounting date), `ido_rsn_cd_list` (migration reason codes), and `ido_rsn_memo` (migration reason memo)). After processing, the method enriches this same object with registration results, progress info, campaign check lists, aging service lists, and FamilyPack error flags before returning it. |

**Instance fields / external state read by this method:**

| Field | Business Description |
|-------|---------------------|
| `inMskmYmd` | Instance-level field set to the application date before `createContent` and cleared after — used to pass the application date to nested service calls for billing calculation |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| C | `createAndFixMskmMskmDtl` | `EKK0011D020 / EKK0021A010 / EKK0021C060` | Application details / Registration approval / Subsequent task dispatch | Creates MSKM (application details) record and approves the application content. Used for both HNSOKU and WRIB line kinds. |
| R | `isExecRecover` | - | - | Checks whether a recovery (re-registration) should be executed for a WRIB line — determines if the same discount service was previously registered |
| R | `resolveWribSvc` | - | - | Retrieves discount service definition (service code, wrib_type_cd, dsp_campaign_cd) from internal data for a given service code |
| R | `callWrsvAplyCntIcrnShokai` | WRIB application count inquiry | - | Queries the count of currently applied discount services for the given service code and operation date — used for aging (promotion period) conflict detection |
| R | `callDchskmstAplyCntStku` | DCHSKM application count inquiry | - | Queries the count of currently applied data-extraction-item settings — used for HNSOKU line aging conflict detection |
| R | `getJctWribSvcCdList` | - | - | Retrieves自治体 (municipal/local government) special campaign discount service code list |
| C | `createContent` | EKK0451D010CBS | KK_T_WRIB_SVC_KEI (discount service contract table) | Registers the discount service contract line item with the given parameters including application type code (MAN_APLY = manual application) |
| D | `autoDeleteWribSvcKei` | EKK0451CBS | KK_T_WRIB_SVC_KEI | Deletes a previously registered long-term discount service contract when an instant discount is registered in its place (mutual exclusion) |
| C | `createPrg` | Progress creation SC | Progress tracking entity | Creates a progress tracking record for each target contract, with progress status (F050/F060), migration reason codes, and migration reason memo |
| R | `getEKK0241B002` | EKK0241B002 | Service contract inquiry table | Retrieves the service contract lineup data for a given service contract line-item number — used for campaign eligibility checks |
| R | `getEKK0451B002` | EKK0451B002 | KK_T_WRIB_SVC_KEI | Retrieves discount service contract details (service code, status) for a given service contract number — post-registration validation |
| R | `getEKK1401B010` | EKK1401B010 | Data-extraction-item settings table | Retrieves data-extraction-item setting details (display code, status, completion type code) — post-registration validation for campaign overlap detection |
| C | `exeJKKIntrInfoChgCfmCC` | Introduction information change SC | Introduction information entity | Registers introduction information change records for discount service contracts (called when not in a specific view ID) |
| C | `executeKeiyakuNaiyoTuchi` | Contract content notification SC | Contract content notification entity | Registers the contract content notification letter — called for specific service codes (instant, long-term continuation, high-speed) and pause campaign codes |
| R | `JCCBPCommon.getOpeDate` | Operation date utility | - | Retrieves the current system operation date for application count inquiries |
| R | `getNetSvcKeiNo` (via checkTablet) | EKK0341B022 | Network service contract table | Retrieves the network service contract number associated with the current service — used to check tablet device availability |
| R | `checkTablet` | EKK0341B022CBS | Device provision contract status | Checks if a tablet device (SmartLink or GoogleHome model) is provisioned for the given service — validates campaign hardware eligibility |
| R | `resolveWribKeiSvcDchskmSts` | - | - | Retrieves the status of all discount service contracts — used for post-campaign screen processing |
| R | `getSvcKeiKaisenUcwkNo` | - | - | Retrieves the service contract line-item internal reference number for campaign grouping |
| - | `setCampaignCd` | - | - | Internal helper: sets campaign code into a map keyed by service contract line-item number |
| - | `retPrgStatToFamilyPack` | - | - | Internal helper: converts progress status code to FamilyPack-specific format |
| - | `subStringByte` | - | - | Internal helper: truncates migration reason memo to 200 bytes, accounting for CRLF markers |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | `JKKWribSvcKeiOperateCC.execute()` | `execute()` -> `createContents(param)` | `createAndFixMskmMskmDtl [C] mskm (app details)`, `createContent [C] KK_T_WRIB_SVC_KEI`, `createPrg [C] progress table`, `getEKK0241B002 [R] service contracts`, `getEKK0451B002 [R] KK_T_WRIB_SVC_KEI`, `getEKK1401B010 [R] data-extraction-item`, `autoDeleteWribSvcKei [D] KK_T_WRIB_SVC_KEI`, `exeJKKIntrInfoChgCfmCC [C] introduction info`, `executeKeiyakuNaiyoTuchi [C] contract notification` |

## 6. Per-Branch Detail Blocks

**Block 1** — INIT (L3789)

> Initialize error handling data structures and reset FamilyPack-related flags before processing starts.

| # | Type | Code |
|---|------|------|
| 1 | SET | `errInfo = new HashMap<String, String>()` |
| 2 | EXEC | `param.setData("FamilyPackErrFlg", "")` // Reset FamilyPack error flag |
| 3 | EXEC | `param.setData("KKSV023804CC", errInfo)` // Store error map for screen |
| 4 | SET | `wriMap = new HashMap<String, String>()` // WRIB service mapping for introduction change |

**Block 2** — DATA EXTRACTION (L3803)

> Extract all input data structures from param, derive key identifiers, and prepare contract lists.

| # | Type | Code |
|---|------|------|
| 1 | SET | `targetInfo = (HashMap) param.getData("KKSV023801CC")` // Registration target contract info |
| 2 | SET | `funcCd = (String) targetInfo.get("func_code")` // Function code ("1" = check+register) |
| 3 | SET | `targetList = (ArrayList) targetInfo.get("target_list")` // Target contract items |
| 4 | SET | `keis = generateKeisForCreate(targetList)` // Normalize and sort target contracts |
| 5 | SET | `targetChildInfo = (HashMap) param.getData("KKSV023802CC")` // Candidate child contract info |
| 6 | SET | `targetChildList = (ArrayList) targetChildInfo.get("target_list")` |
| 7 | SET | `additionInfo = (HashMap) param.getData("KKSV023803CC")` // Additional processing info |
| 8 | SET | `idoDiv = (String) additionInfo.get("ido_div")` // Migration division (WRIB=00049, DCHSKM=00050) |
| 9 | SET | `mskmYmd = (String) additionInfo.get("mskm_ymd")` // Application date (YYYYMMDD) |
| 10 | SET | `sysid = (String) additionInfo.get("sysid")` // System ID |
| 11 | SET | `mskmKisanYmd = (String) additionInfo.get("mskm_kisan_ymd")` // Application accounting date |
| 12 | SET | `idoRsnCdList = (ArrayList) additionInfo.get("ido_rsn_cd_list")` |
| 13 | SET | `idoRsnCds = translateIdoRsnCdsFromArrayList(idoRsnCdList)` |
| 14 | SET | `idoRsnMemo = (String) additionInfo.get("ido_rsn_memo")` // Migration reason memo |
| 15 | SET | `orgIdoRsnMemo = idoRsnMemo` // Backup original memo for restoration |
| 16 | SET | `targetInfo.put("aging_wrib_svc_list", new ArrayList())` // Aging service list for UI display |
| 17 | SET | `jctWribSvcCdList = getJctWribSvcCdList(param)` //自治体 special campaign codes |
| 18 | SET | `campaignMaps = new HashMap<>()` // Campaign grouping by service contract internal number |
| 19 | SET | `svcCdControlMap = new HashMap<>()` // Service code to service contract number list mapping |

**Block 3** — MAIN LOOP (L3832)

> Iterate over each normalized contract (kei) and process based on line kind.

| # | Type | Code |
|---|------|------|
| 1 | SET | `crlfFlg = 0` // Counter for CRLF entries added to memo |
| 2 | SET | `no = kei.get("no")` // Line item number |
| 3 | SET | `keiKind = KeiKind.resolve(kei.get("kei_kind"))` // Resolve HNSOKU or WRIB |
| 4 | SET | `trgtKeis = filterWribSvcKeis(targetChildList, no)` // Filter child contracts matching this line |

**Block 4** — HNSOKU BRANCH [CONSTANT: HNSOKU] (L3842, L3846)

> Application registration kind: Create MSKM (application details) record without discount service registration.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `mskmDtl = createAndFixMskmMskmDtl(param, funcCd, sysid, mskmYmd, idoDiv, keiKind, "")` // HNSOKU with empty takinou param |
| 2 | SET | `mskmDtlNo = mskmDtl.getString("mskm_dtl_no")` // Retrieved MSKM detail number |

**Block 5** — WRIB BRANCH [CONSTANT: WRIB] (L3852)

> Discount service registration kind: Check recovery status, then create MSKM record.

| # | Type | Code |
|---|------|------|
| 1 | SET | `wribList = isExecRecover(sysid, tekiyo_ymd, resolveWribSvc(svc_cd).getString("wrib_type_cd"), trgtKeis)` |
| 2 | IF | `!Boolean.valueOf(wribList.get(0))` // recovery = false -> new registration |
| 3 | EXEC | `mskmDtl = createAndFixMskmMskmDtl(param, funcCd, sysid, mskmYmd, idoDiv, keiKind, kei.get("takinou_rtr_chg_umu"))` // Include takeinou (add-on) change possibility |
| 4 | SET | `mskmDtlNo = mskmDtl.getString("mskm_dtl_no")` |
| 5 | ELSE | // recovery = true -> use existing MSKM |
| 6 | SET | `mskmDtlNo = wribList.get(2)` // Reuse existing MSKM detail number |

**Block 6** — SERVICE CODE CONTROL MAP (L3890)

> Manage service code to service contract number deduplication for discount service campaign codes.

| # | Type | Code |
|---|------|------|
| 1 | SET | `svcCd = kei.get("svc_cd")` |
| 2 | IF | `!svcCdControlMap.isEmpty() && svcCdControlMap.containsKey(svcCd)` // svcCd already tracked |
| 3 | SET | `svcKeiNoList = svcCdControlMap.get(svcCd)` |
| 4 | FOR | `for each svcKei in trgtKeis` |
| 5 | SET | `svcKeiNo = svcKei.get("svc_kei_no")` |
| 6 | IF | `!svcKeiNoList.contains(svcKeiNo)` // Not yet registered -> add |
| 7 | EXEC | `svcKeiNoList.add(svcKeiNo)` |
| 8 | ELSE-IF | `!JKKStringUtil.isNullBlank(svcKeiNo)` // Already registered -> skip this kei |
| 9 | EXEC | `continue svcCdSvcKeiNoContinue` // Skip remaining processing for this kei |
| 10 | ELSE | // svcCd not tracked -> create new list |
| 11 | SET | `addSvcKeiNoList = new ArrayList()` |
| 12 | FOR | `for each svcKei in trgtKeis` |
| 13 | SET | `addSvcKeiNoList.add(svcKei.get("svc_kei_no"))` |
| 14 | EXEC | `svcCdControlMap.put(svcCd, addSvcKeiNoList)` |

**Block 7** — SET INMSKM YMD (L3939, v8.00.00)

> Pass the application date to the instance field for nested calls.

| # | Type | Code |
|---|------|------|
| 1 | SET | `this.inMskmYmd = (String) additionInfo.get("mskm_ymd")` |

**Block 8** — CREATE CONTENT (L3944)

> Core discount service contract registration call.

| # | Type | Code |
|---|------|------|
| 1 | SET | `wribSvcKeiNo = createContent(param, funcCd, idoDiv, sysid, kei, trgtKeis, mskmDtlNo, mskmKisanYmd, WRIB_ADD_OPTY_CD_MAN_APLY)` |
| 2 | CONST | `WRIB_ADD_OPTY_CD_MAN_APLY = "2"` (Manual application) |

**Block 9** — RESET INMSKM YMD (L3949, v8.00.00)

> Clear the instance field after registration to avoid leakage across loop iterations.

| # | Type | Code |
|---|------|------|
| 1 | SET | `this.inMskmYmd = ""` |

**Block 10** — STORE WRIB MAP (L3955, v7.00.05)

> Track WRIB service contract numbers for later introduction info change processing.

| # | Type | Code |
|---|------|------|
| 1 | IF | `KeiKind.WRIB.equals(keiKind)` |
| 2 | EXEC | `wriMap.put(String.valueOf(wriMap.size()), wribSvcKeiNo)` |

**Block 11** — INSTANT DISCOUNT HANDLING [CONSTANT: SOK_WRI = "W00000021"] (L3963)

> When the registered service is instant discount (SOK_WRI), cancel any existing long-term discount contract.

| # | Type | Code |
|---|------|------|
| 1 | SET | `wribSvcCd = kei.get("svc_cd")` |
| 2 | IF | `WRIB_SVC_CD_SOK_WRI.equals(wribSvcCd)` // == "W00000021" (instant discount) |
| 3 | IF | `trgtKeis.size() != 0 && !isNullBlank(trgtKeis.get(0).get("svc_kei_no"))` |
| 4 | EXEC | `autoDeleteWribSvcKei(param, funcCd, sysid, mskmDtlNo, mskmYmd, idoDiv, WRIB_SVC_CD_CHO_WRI, trgtKeis.get(0).get("svc_kei_no"))` |
| 5 | CONST | `WRIB_SVC_CD_CHO_WRI = "W00000011"` (long-term discount) |

**Block 12** — LONG-TERM DISCOUNT MUTUAL EXCLUSION [CONSTANT: CHO_WRI = "W00000011"] (L3980)

> When registering long-term discount, check if instant discount is already applied and raise an error.

| # | Type | Code |
|---|------|------|
| 1 | IF | `WRIB_SVC_CD_CHO_WRI.equals(wribSvcCd)` // == "W00000011" (long-term discount) |
| 2 | SET | `aplyWribSvcKeis = resolveWribSvcKeisInAply(sysid)` |
| 3 | FOR | `for each aplyWribSvcKei in aplyWribSvcKeis` |
| 4 | SET | `aplyWribSvcCd = aplyWribSvcKei.getString("wrib_svc_cd")` |
| 5 | IF | `WRIB_SVC_CD_SOK_WRI.equals(aplyWribSvcCd)` // instant discount applied |
| 6 | EXEC | `targetInfo.put("sokuwari_vs_tyowari_list", new ArrayList())` // Error flag |

**Block 13** — AUTOMATION BODY SPECIAL CAMPAIGN [CONSTANT: jctWribSvcCdList] (L3994)

> For自治体 (municipal) special campaign codes, validate campaign compatibility across target contracts.

| # | Type | Code |
|---|------|------|
| 1 | IF | `jctWribSvcCdList.contains(wribSvcCd)` |
| 2 | FOR | `for each svcKei in trgtKeis` |
| 3 | SET | `tgKeiSvcKeiNo = svcKei.get("svc_kei_no")` |
| 4 | IF | `!checkJctSpclCp(tgKeiSvcKeiNo, additionInfo.get("svc_kei_no"))` // validation fails |
| 5 | EXEC | `targetInfo.put("jct_spcl_cp_check_list", new ArrayList())` // Error flag |
| 6 | EXEC | `break` |

**Block 14** — PROGRESS STATUS DETERMINATION (L4013)

> Set the progress status code based on the line kind.

| # | Type | Code |
|---|------|------|
| 1 | IF | `KeiKind.WRIB.equals(keiKind)` |
| 2 | SET | `prgSta = PRG_STAT_WRIB_ADD_FIN` // == "F050" (discount/registration completed) |
| 3 | ELSE-IF | `KeiKind.HNSOKU.equals(keiKind)` |
| 4 | SET | `prgSta = PRG_STAT_DCHSKM_ADD_FIN` // == "F060" (data extraction item registration completed) |

**Block 15** — APPLICATION DATE DIFFERENCE CHECK (L4025)

> If application date differs from application accounting date, add an error message to the memo.

| # | Type | Code |
|---|------|------|
| 1 | IF | `!mskmYmd.equals(mskmKisanYmd)` // dates differ |
| 2 | IF | `idoRsnMemo.length() != 0` // prepend separator |
| 3 | SET | `idoRsnMemo = idoRsnMemo + JKKStrConst.LINE_SEPARATOR` |
| 4 | SET | `idoRsnMemo = idoRsnMemo + MSKM_YMD_DIFF_MESSAGE` |
| 5 | SET | `crlfFlg++` |

**Block 16** — APPLICATION COUNT CHECK (L4037)

> Query the count of already-applied discount/data-extraction items for aging (promotion period) conflict detection.

| # | Type | Code |
|---|------|------|
| 1 | IF | `KeiKind.WRIB.equals(keiKind)` |
| 2 | SET | `aplyCntWribSvcKeis = callWrsvAplyCntIcrnShokai(sysid, wribSvcCd, JCCBPCommon.getOpeDate(null))` |
| 3 | SET | `applyCnt = aplyCntWribSvcKeis[0].getString("apply_cnt")` |
| 4 | ELSE-IF | `KeiKind.HNSOKU.equals(keiKind)` |
| 5 | SET | `aplyCntWribSvcKeis = callDchskmstAplyCntStku(sysid, wribSvcCd, JCCBPCommon.getOpeDate(null))` |
| 6 | SET | `applyCnt = aplyCntWribSvcKeis[0].getString("dchskmst_cnt")` |
| 7 | IF | `Integer.parseInt(applyCnt) > 0` // aging (promotion) conflict exists |
| 8 | IF | `idoRsnMemo.length() != 0` |
| 9 | SET | `idoRsnMemo = idoRsnMemo + JKKStrConst.LINE_SEPARATOR` |
| 10 | SET | `idoRsnMemo = idoRsnMemo + AGING_WRIB_SVC_MESSAGE` |
| 11 | SET | `crlfFlg++` |
| 12 | SET | `map = new HashMap<>()` |
| 13 | SET | `map.put("campaign_cd_nm", kei.get("campaign_cd_nm"))` |
| 14 | EXEC | `list.add(map)` // Add to aging_wrib_svc_list for UI display |

**Block 17** — MEMO BYTE TRUNCATION (L4058)

> Truncate migration reason memo to 200 bytes, adjusting for CRLF placeholders.

| # | Type | Code |
|---|------|------|
| 1 | SET | `idoRsnMemo = subStringByte(idoRsnMemo, 200 - crlfFlg * 2 * 2)` |

**Block 18** — PROGRESS RECORD CREATION LOOP (L4061)

> For each target contract, create a progress tracking record.

| # | Type | Code |
|---|------|------|
| 1 | SET | `svcKeiNo = trgtKei.get("svc_kei_no")` |
| 2 | SET | `prgtkjk1 = "キャンペーンコード：" + kei.get("campaign_cd")` // "Campaign Code: XXXX" |
| 3 | EXEC | `createPrg(param, funcCd, mskmDtlNo, svcKeiNo, wribSvcKeiNo, idoDiv, retPrgStatToFamilyPack(prgSta, kei.get("svc_cd")), idoRsnCds, idoRsnMemo, keiKind, prgtkjk1)` |

**Block 19** — RESTORE ORIGIN MEMO (L4078)

> Restore original migration reason memo after processing loop.

| # | Type | Code |
|---|------|------|
| 1 | SET | `idoRsnMemo = orgIdoRsnMemo` |

**Block 20** — CONTRACT CONTENT NOTIFICATION (v26.00.01) (L4083)

> For specific service codes, register the contract content notification letter.

| # | Type | Code |
|---|------|------|
| 1 | IF | `WRIB_SVC_CD_SOK_WRI.equals(wribSvcCd) || WRIB_SVC_CD_CHOKI_KEIZOKU_WRI.equals(wribSvcCd) || WRIB_SVC_CD_KOSOKU_WRI.equals(wribSvcCd)` |
| 2 | // SOK_WRI = "W00000021" (instant discount), CHOKI_KEIZOKU_WRI = "W00000041" (long-term continuation), KOSOKU_WRI = "W00000022" (high-speed discount) |
| 3 | SET | `svcKeiNo = ""` // Find first non-blank svc_kei_no from trgtKeis |
| 4 | FOR | `for each svcKei in trgtKeis` with `!isNullBlank(svcKei.get("svc_kei_no"))` |
| 5 | SET | `svcKeiNo = svcKei.get("svc_kei_no")` |
| 6 | SET | `nttOrsHantei = getNttOrsKeiyaku(svcKeiNo)` // NTT Ors contract judgment |
| 7 | IF | `"1".equals(funcCd) && nttOrsHantei` // Check+Register mode and NTT Ors contract |
| 8 | EXEC | `executeKeiyakuNaiyoTuchi(param, sysid, svcKeiNo, mskmDtlNo, idoDiv)` |

**Block 21** — PAUSE CAMPAIGN NOTIFICATION (v27.00.00, ANK-3472-00-00) (L4104)

> For pause campaign codes, register contract content notification with error division 99999.

| # | Type | Code |
|---|------|------|
| 1 | SET | `campaignCd = kei.get("campaign_cd")` |
| 2 | IF | `CP_CD_LIST_PAUSE_CP.contains(campaignCd)` // Campaign pause list check |
| 3 | IF | `"1".equals(funcCd)` // Check+Register mode |
| 4 | EXEC | `executeKeiyakuNaiyoTuchi(param, sysid, trgtKeis, mskmDtlNo, "99999", idoDiv)` // Error division 99999 |

**Block 22** — CAMPAIGN COLLECTION (L4120)

> Group selected campaigns by service contract internal reference number for later campaign validity checks.

| # | Type | Code |
|---|------|------|
| 1 | IF | `campaignCd matches any of: SHOHINKEN, RYOHANTOKUTEN_2/3, SMARTLINK_MURYO, GOOGLEHOME_MURYO, OIWAIPAC_WARI/TOKUTEN, NORIKAE_PAC_1 through 10, SMARTLINK_TANMATSU_WARIBIKI, GOOGLEHOME_TANMATSU_WARIBIKI` |
| 2 | SET | `svcKeiKaiseUcwkNo = getSvcKeiKaisenUcwkNo(svc_kei_no)` |
| 3 | SET | `item = new HashMap<>()` with campaignCd and svc_kei_no |
| 4 | IF | `!campaignMaps.containsKey(svcKeiKaiseUcwkNo)` |
| 5 | SET | `campaignMaps.put(svcKeiKaiseUcwkNo, new ArrayList())` |
| 6 | EXEC | `campaignMaps.get(svcKeiKaiseUcwkNo).add(item)` |

**Block 23** — INTRODUCTION INFO CHANGE (v7.00.05) (L4175)

> Register introduction information change CC when not in specific view page.

| # | Type | Code |
|---|------|------|
| 1 | SET | `REQ_VIEWID = param.getControlMapData("REQ_VIEWID")` |
| 2 | IF | `REQ_VIEWID != "KKW010350PJP"` // Not in introduction code update confirmation page |
| 3 | EXEC | `exeJKKIntrInfoChgCfmCC(funcCd, svc_kei_no, idoDiv, TRN_DIV_ADD, wriMap)` |
| 4 | CONST | `TRN_DIV_ADD = "0"` (addition transaction) |

**Block 24** — CAMPAIGN GROUP VALIDATION (L4188)

> Process campaignMaps by group, performing campaign conflict and eligibility validation for groups A through E.

| # | Type | Code |
|---|------|------|
| 1 | FOR | `for each key in campaignMaps.keySet()` |
| 2 | SET | `campList = campaignMaps.get(key)` |
| 3 | FOR | `for each camp in campList` |
| 4 | SET | `campaignCd = camp.get("campaignCd")` |
| 5 | SET | `svcKeiNo = camp.get("svc_kei_no")` |

**Block 24.1** — GROUP A: SHOHINKEN, RYOHANTOKUTEN (L4223)

> Product voucher: "170016ZZ", Volume discount: "170016ZZ", "170018ZZ", "170025ZZ"

| # | Type | Code |
|---|------|------|
| 1 | IF | `campaignCd matches SHOHINKEN or RYOHANTOKUTEN_2 or RYOHANTOKUTEN_3` |
| 2 | SET | `campaignFlgA = true` |
| 3 | EXEC | `setCampaignCd(campaignHukusuSelectChkMap, "EKB5410-NW", svcKeiKaisenUcwkNo, campaignCd)` |

**Block 24.2** — GROUP B: SMARTLINK (L4231)

> SmartLink free: "17005000", SmartLink terminal discount: "19000100"

| # | Type | Code |
|---|------|------|
| 1 | IF | `campaignCd matches SMARTLINK_MURYO or SMARTLINK_TANMATSU_WARIBIKI` |
| 2 | SET | `campaignFlgB = true` |
| 3 | EXEC | `setCampaignCd(campaignHukusuSelectChkMap, "EKB5410-NW", svcKeiKaisenUcwkNo, campaignCd)` |
| 4 | EXEC | `setCampaignCd(ghSlChkMap, "EKB5440-JW", svcKeiKaisenUcwkNo, campaignCd)` // SmartLink+GoogleHome group |
| 5 | IF | `checkTablet(svcKeiNo, campaignCd, sysid)` // Check tablet availability |
| 6 | SET | `smartLinkKikiFlg = true` |

**Block 24.3** — GROUP C: GOOGLEHOME (L4257)

> GoogleHome free: "17008600", GoogleHome terminal discount: "19000200"

| # | Type | Code |
|---|------|------|
| 1 | IF | `campaignCd matches GOOGLEHOME_MURYO or GOOGLEHOME_TANMATSU_WARIBIKI` |
| 2 | SET | `campaignFlgC = true` |
| 3 | EXEC | `setCampaignCd(campaignHukusuSelectChkMap, "EKB5410-NW", svcKeiKaisenUcwkNo, campaignCd)` |
| 4 | EXEC | `setCampaignCd(ghSlChkMap, "EKB5440-JW", svcKeiKaisenUcwkNo, campaignCd)` |
| 5 | IF | `checkTablet(svcKeiNo, campaignCd, sysid)` // Check GoogleHome tablet |
| 6 | SET | `googleHomeKikiFlg = true` |

**Block 24.4** — GROUP D: OIWAI PAC (L4284)

> Celebration pack discount: "18000200", Celebration pack special: "160045ZZ"

| # | Type | Code |
|---|------|------|
| 1 | IF | `campaignCd matches OIWAIPAC_WARI or OIWAIPAC_TOKUTEN` |
| 2 | SET | `campaignFlgD = true` |
| 3 | EXEC | `setCampaignCd(campaignHukusuSelectChkMap, "EKB5410-NW", svcKeiKaisenUcwkNo, campaignCd)` |
| 4 | EXEC | `setCampaignCd(oiwaiPacChkMap, "EKB5440-JW", svcKeiKaisenUcwkNo, campaignCd)` |
| 5 | SET | `isNetFlg = false`, `isTvFlg = false` |
| 6 | SET | `kaisenSvcs = getEKK0241B002(svcKeiKaisenUcwkNo)` // Service contract lineup |
| 7 | FOR | `for each kaisenSvc in kaisenSvcs` |
| 8 | IF | `svc_kei_stat matches UK_ZM (010) or SHOSA_ZUMI (020) or CNC_ZM (030)` |
| 9 | IF | `svc_cd == CD00130_01 (01 = Network)` |
| 10 | SET | `isNetFlg = true` |
| 11 | IF | `svc_cd == CD00130_03 (03 = TV)` |
| 12 | SET | `isTvFlg = true` |
| 13 | IF | `isNetFlg && isTvFlg` |
| 14 | SET | `isNetTvFlg = true` // Both network and TV exist |
| 15 | EXEC | `setCampaignCd(oiwaiNorikaeChkMap, "EKB5410-NW", svcKeiKaisenUcwkNo, campaignCd)` // For Norikae CP check |

**Block 24.5** — GROUP E: NORIKAE CP (L4319)

> Exchange CP: "160048ZZ" through "160050ZZ", "170021ZZ", "170046ZZ"-"170047ZZ", "170039ZZ"-"170042ZZ"

| # | Type | Code |
|---|------|------|
| 1 | IF | `campaignCd matches NORIKAE_PAC_1 through NORIKAE_PAC_10` |
| 2 | SET | `campaignFlgE = true` |
| 3 | EXEC | `setCampaignCd(oiwaiNorikaeChkMap, "EKB5410-NW", svcKeiKaisenUcwkNo, campaignCd)` |
| 4 | EXEC | `setCampaignCd(norikaeHukusuSelectChkMap, "EKBF250--Q", svcKeiKaisenUcwkNo, campaignCd)` |
| 5 | SET | `norikaeCpCnt++` |

**Block 25** — CAMPAIGN VALIDATION POST-LOOP (L4342)

> Perform campaign conflict and eligibility validation after all campaigns are collected for a group.

| # | Type | Code |
|---|------|------|
| 1 | IF | `campaignFlgA \|\| campaignFlgB \|\| campaignFlgC \|\| campaignFlgD` // Groups A-D conflict check |
| 2 | SET | `campaignCnt = count of true flags among A, B, C, D` |
| 3 | IF | `campaignCnt > 1` // Multiple campaign groups selected -> error |
| 4 | EXEC | `campaignHukusuSelectChkList.add(campaignHukusuSelectChkMap)` |
| 5 | EXEC | `targetInfo.put("campaignHukusuSelectChkList", campaignHukusuSelectChkList)` |
| 6 | IF | `(campaignFlgB && smartLinkKikiFlg) \|\| (campaignFlgC && googleHomeKikiFlg)` // Missing tablet |
| 7 | EXEC | `ghSlChkList.add(ghSlChkMap)`, `targetInfo.put("ghSlChkList", ghSlChkList)` |
| 8 | IF | `campaignFlgD && !isNetTvFlg` // OiwaiPac without Net+TV |
| 9 | EXEC | `oiwaiPacChkList.add(oiwaiPacChkMap)`, `targetInfo.put("oiwaiPacChkList", oiwaiPacChkList)` |
| 10 | IF | `campaignFlgD && campaignFlgE` // D and E conflict |
| 11 | EXEC | `oiwaiNorikaeChkList.add(oiwaiNorikaeChkMap)`, `targetInfo.put("oiwaiNorikaeChkList", oiwaiNorikaeChkList)` |
| 12 | IF | `norikaeCpCnt > 1` // Multiple Norikae CP |
| 13 | EXEC | `norikaeHukusuSelectChkList.add(norikaeHukusuSelectChkMap)`, `targetInfo.put("norikaeHukusuSelectChkList", norikaeHukusuSelectChkList)` |
| 14 | SET | `campaignScreenFlgD = true` if campaignFlgD |
| 15 | SET | `campaignScreenFlgE = true` if campaignFlgE |

**Block 26** — POST-CAMPAIGN REGISTRATION CHECK (ANK-3473-00-00, L4371)

> After all keis are processed, for groups D and E that were selected, check already-registered discount service campaigns to detect conflicts on the registration screen.

| # | Type | Code |
|---|------|------|
| 1 | SET | `resultList = new ArrayList<>(DEFAULT_ARRAY_SIZE)` // DEFAULT_ARRAY_SIZE = 100 |
| 2 | SET | `wribSvcKeis = resolveWribKeiSvcDchskmSts(sysid)` |
| 3 | SET | `wribSvcKeiMover = new WribSvcKeiMover()` |
| 4 | SET | `wribSvcKeiList = Items.map(wribSvcKeis, wribSvcKeiMover)` |
| 5 | EXEC | `resultList.addAll(wribSvcKeiList)` |
| 6 | IF | `campaignScreenFlgD \|\| campaignScreenFlgE` |
| 7 | FOR | `for each key in campaignMaps.keySet()` |
| 8 | SET | `kaisenSvcs = getEKK0241B002(svcKeiKaisenUcwkNo)` |
| 9 | FOR | `for each kaisenSvc` |
| 10 | SET | `netTvSvcKeiNo = kaisenSvc.getString(SVC_KEI_NO)` |
| 11 | SET | `wribSvcKeiShokais = getEKK0451B002(netTvSvcKeiNo)` |
| 12 | FOR | `for each wribSvcKeiShokai` |
| 13 | SET | `dspCampaignCd = resolveWribSvc(wribSvcCd).getString("dsp_campaign_cd")` |
| 14 | SET | `wribSvcKeiStat = wribSvcKeiShokai.getString("wrib_svc_kei_stat")` |
| 15 | IF | `campaignScreenFlgE && !CD00055_DSLZM.equals(wribSvcKeiStat) && OIWAIPAC_WARI.equals(dspCampaignCd)` |
| 16 | EXEC | `setCampaignCd(oiwaiNorikaeChkMap, "EKB5410-NW", svcKeiKaisenUcwkNo, dspCampaignCd)` |
| 17 | SET | `dchskmstShokais = getEKK1401B010(netTvSvcKeiNo)` |
| 18 | FOR | `for each dchskmstShokai` |
| 19 | SET | `dspDchskmCd = dchskmstShokai.getString(DSP_DCHSKM_CD)` |
| 20 | SET | `dchskmstStat = dchskmstShokai.getString(DCHSKMST_STAT)` |
| 21 | SET | `dchskmstFinSbtCd = dchskmstShokai.getString(DCHSKMST_FIN_SBT_CD)` |
| 22 | IF | `OIWAIPAC_TOKUTEN.equals(dspDchskmCd) && campaignScreenFlgE && (UK_ZM.equals(dchskmstStat) \|\| (FIN.equals(dchskmstStat) && ALPY.equals(dchskmstFinSbtCd))))` |
| 23 | EXEC | `setCampaignCd(oiwaiNorikaeChkMap, "EKB5410-NW", svcKeiKaisenUcwkNo, dspDchskmCd)` |
| 24 | ELSE-IF | `NORIKAE_PAC_1..10 matches dspDchskmCd && campaignScreenFlgD && (UK_ZM \|\| (FIN && ALPY))` |
| 25 | EXEC | `setCampaignCd(oiwaiNorikaeChkMap, "EKB5410-NW", svcKeiKaisenUcwkNo, dspDchskmCd)` |
| 26 | CONST | `DCHSKMST_STAT_UK_ZM = "010"` (reception completed), `DCHSKMST_STAT_FIN = "030"` (completion), `DCHSKMST_FIN_SBT_CD_ALPY` (applied) |

**Block 27** — RETURN (L4663)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return param` |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `wribSvcKei` | Field | Discount service contract line item — a registered promotional discount applied to a broadband service contract |
| `svc_kei_no` | Field | Service contract line item number — unique identifier for a service contract line |
| `svc_cd` | Field | Service code — classifies the type of service (network, TV, mobile, discount service code) |
| `mskm_dtl_no` | Field | MSKM detail number — application details record number created during registration |
| `mskm_ymd` | Field | Application date (YYYYMMDD) — the date when the application is submitted |
| `mskm_kisan_ymd` | Field | Application accounting date (YYYYMMDD) — the date when billing accounting starts; may differ from mskm_ymd |
| `ido_div` | Field | Migration division — classifies migration type: WRIB (00049, discount), DCHSKM (00050, data extraction) |
| `ido_rsn_cd` | Field | Migration reason code — code describing why a migration/change was performed |
| `ido_rsn_memo` | Field | Migration reason memo — free-text description of migration reasons, truncated to 200 bytes |
| `kei_kind` | Field | Line category kind — HNSOKU (application registration) or WRIB (discount service registration) |
| `func_code` | Field | Function code — "1" means check and register; other values may indicate different operational modes |
| `sysid` | Field | System ID — identifies the system/billing instance processing the request |
| `prgSta` | Field | Progress status — tracks registration workflow stage (F050 = WRIB add complete, F060 = DCHSKM add complete) |
| `campaignCd` | Field | Campaign code — identifies a promotional campaign (e.g., discount, free device, exchange) |
| `wrib_type_cd` | Field | Discount service type code — classifies the type of discount registration |
| `tekiyo_ymd` | Field | Application date — date when the discount service was applied |
| `takinou_rtr_chg_umu` | Field | Add-on return change possibility — indicates if add-on return/change is possible |
| HNSOKU | Enum | Application/Registration — line kind for application approval registration without discount service |
| WRIB | Enum | Discount Service — line kind for discount service contract registration |
| SOK_WRI | Constant | Instant discount (W00000021) — discount applied immediately upon registration |
| CHO_WRI | Constant | Long-term discount (W00000011) — discount applied for long-term contract period |
| CHOKI_KEIZOKU_WRI | Constant | Long-term continuation discount (W00000041) — discount with long-term contract continuation |
| KOSOKU_WRI | Constant | High-speed discount (W00000022) — discount for high-speed broadband service |
| PRG_STAT_WRIB_ADD_FIN | Constant | Progress status "F050" — discount service registration completed |
| PRG_STAT_DCHSKM_ADD_FIN | Constant | Progress status "F060" — data extraction item registration completed |
| PRG_STAT_WRIB_DEL_FIN | Constant | Progress status "F051" — discount service cancellation completed |
| PRG_STAT_DCHSKM_DEL_FIN | Constant | Progress status "F061" — data extraction item cancellation completed |
| WRIB_ADD_OPTY_CD_MAN_APLY | Constant | Application type code "2" — manual application |
| TRN_DIV_ADD | Constant | Transaction division "0" — addition transaction |
| MSKM_YMD_DIFF_MESSAGE | Constant | Error message constant for application date/accounting date mismatch |
| AGING_WRIB_SVC_MESSAGE | Constant | Error message constant for aging (promotion period) conflict |
| CP_CD_LIST_PAUSE_CP | Constant | List of pause campaign codes — campaigns where registration is temporarily paused |
| FAMIPA_KEI_UM_U | Constant | Family pack contract present = "1" |
| FAMIPA_KEI_UM_M | Constant | Family pack contract absent = "0" |
| SHOHINKEN | Constant | Product voucher campaign code "170016ZZ" — campaign group A |
| RYOHANTOKUTEN_2/3 | Constant | Volume discount campaign codes "170018ZZ"/"170025ZZ" — campaign group A |
| SMARTLINK_MURYO | Constant | SmartLink free campaign code "17005000" — campaign group B |
| SMARTLINK_TANMATSU_WARIBIKI | Constant | SmartLink terminal discount campaign code "19000100" — campaign group B |
| GOOGLEHOME_MURYO | Constant | GoogleHome free campaign code "17008600" — campaign group C |
| GOOGLEHOME_TANMATSU_WARIBIKI | Constant | GoogleHome terminal discount campaign code "19000200" — campaign group C |
| OIWAIPAC_WARI | Constant | Celebration pack discount campaign code "18000200" — campaign group D |
| OIWAIPAC_TOKUTEN | Constant | Celebration pack special campaign code "160045ZZ" — campaign group D |
| NORIKAE_PAC_1-10 | Constant | Exchange CP campaign codes "160048ZZ"-"160050ZZ", "170021ZZ", "170046ZZ"-"170047ZZ", "170039ZZ"-"170042ZZ" — campaign group E |
| DCHSKMST_STAT_UK_ZM | Constant | Data-extraction-item status "010" — reception completed |
| DCHSKMST_STAT_FIN | Constant | Data-extraction-item status "030" — completion |
| DCHSKMST_FIN_SBT_CD_ALPY | Constant | Data-extraction-item completion type code "applied" |
| EKK0241B002 | SC | Service contract lineup inquiry SC — retrieves service contract data for campaign checks |
| EKK0451B002 | SC | Discount service contract inquiry SC — retrieves discount service details post-registration |
| EKK1401B010 | SC | Data-extraction-item settings inquiry SC — retrieves data extraction item settings post-registration |
| EKK0341B022 | SC | Device provision contract status SC — checks tablet device availability |
| SIF_EKK0341B022 | SIF | Service interface for EKK0341B022 — device provision status call |
| KKSV023801CC | Data key | Registration target contract info map key |
| KKSV023802CC | Data key | Registration candidate child contract info map key |
| KKSV023803CC | Data key | Additional processing info map key |
| KKSV023804CC | Data key | Error info map key for FamilyPack error handling |
| K-Opticom | Business term | Japanese broadband telecommunications provider — the system customer (K-Opticom) whose billing system this is |
| CBS | Acronym | Center-Based System — backend billing/registration system components |
| SC | Acronym | Service Component — a service layer module handling specific business operations |
| SOD | Acronym | Service Order Data — telecom order fulfillment entity (referenced in Javadoc and evolution history) |
| M-ID | Acronym | Member ID — customer identifier in the K-Opticom system |
| MSKM | Acronym | Application details record — the registration approval and subsequent task dispatch entity |
| DCHSKM | Acronym | Data extraction item — settings configuration for data extraction from service contracts |
| NTTS | Acronym | NTT Ors (Oricon?) contract judgment — NTT-related service contract verification |
| 自治体 (Jichitai) | Japanese term | Municipal/local government — used for自治体 special discount campaigns |
| Family Pack | Business term | Fujitsu Family Pack — a bundled service package including various telecom services |
| 契約内容通知書 (Keiyaku Naiyo Tuchi) | Japanese term | Contract content notification letter — a formal notification document registered alongside service contracts |
| 紹介コード (Shoukai Code) | Japanese term | Introduction/referral code — used in introduction information change tracking |
| 即割 (Sokewari) | Japanese term | Instant discount — a discount applied immediately upon registration |
| 長割 (Chowari) | Japanese term | Long-term discount — a discount applied for the duration of a long-term contract |
| のりかえCP (Norikae CP) | Japanese term | Exchange coupon/promotion campaign — campaigns for customers switching from competitors |
| お祝いパック割 (Oiwai Pac Wari) | Japanese term | Celebration pack discount — a promotional discount package |
| お祝いパック特典 (Oiwai Pac Tokuten) | Japanese term | Celebration pack special — a promotional special benefit within the celebration pack |
| 商品券 (Shohinken) | Japanese term | Product voucher — a campaign involving product vouchers |
| 販売特典 (Hanbai Tokuten) | Japanese term | Sales special benefits — volume-based promotional benefits |
| 進捗 (Shinshoku) | Japanese term | Progress — tracking the registration workflow stage |
| 異動区分 (Idou Kubun) | Japanese term | Migration division — classifies the type of service migration/change |
| 申込年月日 (Ureshi Nengatsuhi) | Japanese term | Application date — the date an application is submitted |
| 申込起算日 (Ureshi Kisanbi) | Japanese term | Application accounting date — the billing start date for the application |
