# Business Logic — JFUMkmInfoAddFrontiaPreTrnCC.checkCodeToMaster() [403 LOC]

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

## 1. Role

### JFUMkmInfoAddFrontiaPreTrnCC.checkCodeToMaster()

This method performs **code-value-to-master validation** for the Frontia service application submission flow. It acts as a comprehensive pre-submission validator that ensures every code entered by the customer — from email addresses and campaign codes to bank branch numbers and set-top box models — corresponds to a valid record in the backend master data systems. The method implements a **sequential validation dispatch pattern**, branching through nine distinct validation categories, each invoking different service components (SCs) to verify codes against centralized master tables. Its design serves as a **gatekeeper** in the larger application process: if any validation fails, error details are accumulated into an error list and the method returns `false`, halting submission; only when all checks pass does it return `true`, allowing the process to continue. The nine validation blocks cover: (1) opt-in email address registration validation, (2) carrier agreement provider code validation, (3) EO TV course deprecation enforcement, (4) STB (set-top box) hardware model validation, (5) campaign code existence and time-window validation with service requirement checks, (6) content service code validation, (7) bank/branch code validation for bank-transfer payments, (8) EO ID status validation for uniqueness, and (9) mineo set plan discount information retrieval. This centralized validation CC ensures data integrity before the application proceeds to data persistence.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["Start: checkCodeToMaster"])
    A["Initialize errorList from ccMsg"]
    B["Fetch Opt-in List SC ECK0131B020"]
    C["Validate mail_jusin_settei_list"]
    D{"Tel Svctk JGS 1 present?"}
    E["Validate JGS 1 ETU0051A010"]
    F{"Tel Svctk JGS 2 present?"}
    G["Validate JGS 2 ETU0051A010"]
    H{"EO TV enabled?"}
    I{"EO TV Course == 3?"}
    J["Date Check >= 2024-04-22"]
    K{"EO TV Course == 2?"}
    L["Validate STB HD1..HD5"]
    M["Campaign Loop"]
    N{"Campaign SbtCd == 1?"}
    O["EKK1351B501 EKK1371B001"]
    P["EKK0841B509 EKK0851B001"]
    Q["Check Campaign Requirements"]
    R["Validate ContSvcCodes"]
    S{"PayWay == 1?"}
    T["Validate BankBranch EKK0511A010"]
    U{"EO ID present?"}
    V["Check EO ID Status EZM0111B040"]
    W{"Mineo SetPlan present?"}
    X["Fetch MineoSetPlanWribCC"]
    Y{"Has errors?"}
    Z["Set ERROR_INFO return false"]
    AA["Return true"]

    START --> A --> B --> C --> D --> E --> F --> G --> H --> I --> J --> K --> L --> M --> N --> O --> P --> Q --> R --> S --> T --> U --> V --> W --> X --> Y --> Z
    Y --> AA
```

**Validation Blocks:**

| # | Block | Description |
|---|-------|-------------|
| 1 | Opt-in List Fetch + Email Validation | Fetch registered opt-in email numbers and verify each customer-entered email exists in the master list |
| 2 | Tel Provider JGS 1 | Validate carrier agreement provider code (1 of 2) against communication business agreement master |
| 3 | Tel Provider JGS 2 | Validate second carrier agreement provider code against communication business agreement master |
| 4 | EO TV Course Date Check | Enforce deprecation: TV course "3" (Terrestrial/BS Course) is no longer accepted after 2024-04-22 |
| 5 | STB HD1-HD5 Model Validation | For EO TV course "2" (Cable TV), validate up to 5 set-top box hardware model codes |
| 6 | Campaign Code Validation | For each campaign code: verify existence (SC 1351/0841), check valid time window (SC 1371/0851), validate service compatibility (Netflix, meshWiFi, SMP, Getuwari) |
| 7 | Content Service Code Validation | Verify each content service code exists in the pre-registration allowed services master |
| 8 | Bank/Branch Code Validation | For bank-transfer payments: validate financial institution agreement against master, populate bank/branch names |
| 9 | EO ID Status Check | Verify entered EO ID is not in use (status 100/200/300) by querying EO ID list |
| 10 | Mineo Set Plan Retrieval | Fetch mineo set discount plan campaign code and end date from child CC |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `handle` | `SessionHandle` | Database session handle used to establish connections for all service component calls throughout the validation flow |
| 2 | `scCall` | `ServiceComponentRequestInvoker` | Service component invocation gateway — all SC method calls route through this object to fetch master data and validate codes |
| 3 | `param` | `IRequestParameterReadWrite` | Request parameter object for reading/writing business data; used to retrieve mineo set plan data and pass campaign details |
| 4 | `fixedText` | `String` | Fixed text context passed through to SC calls (used for template resolution and screen identification) |
| 5 | `ccMsg` | `Map<String, Object>` | Shared message map carrying error information (`ERROR_INFO`) and intermediate results across CCs |

**Instance fields read:**

| Field | Type | Business Description |
|-------|------|---------------------|
| `workArea` | `JFUMkmInfoAddFrontiaWorkArea` | In-memory work area holding all customer-entered data: email settings, carrier provider codes, EO TV config, STB models, campaign list, content service list, payment info, EO ID, mineo set plan |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `callSC` (ECK0131B020) | ECK0131B020SC | KK_T_OPTINM (Opt-in Registration Master) | Fetches registered opt-in email address numbers for validation |
| R | `execETU0051A010` (JGS 1) | ETU0051A010SC | KK_T_TSUUSHIN_JIGYO (Communications Business Master) | Validates carrier agreement provider code (1st), retrieves provider name |
| R | `execETU0051A010` (JGS 2) | ETU0051A010SC | KK_T_TSUUSHIN_JIGYO (Communications Business Master) | Validates carrier agreement provider code (2nd), retrieves provider name |
| R | `callSC` (EKK1351B501) | EKK1351B501SC | KK_T_DCHSKM_DCHSKM_CD (Data Extraction Item Master) | Campaign category 1 (data extraction item): fetches campaign service code, start/end datetime |
| R | `callSC` (EKK1371B001) | EKK1371B001SC | KK_T_DCHSKM_WRIB_SVC (Data Extraction Item Registration Service) | Campaign category 1: validates campaign against service group, product, plan codes |
| R | `callSC` (EKK0841B509) | EKK0841B509SC | KK_T_WRIB_SVC (Registration Service Master) | Campaign category 2 (discount service): fetches discount service code, start/end datetime |
| R | `callSC` (EKK0851B001) | EKK0851B001SC | KK_T_WRIB_SVC (Discount Service Registration Table) | Campaign category 2: validates discount campaign against service group, product, plan codes |
| R | `callSC` (EKK3281B010) | EKK3281B010SC | KK_T_UNYO_CONT_SVC (Pre-Registration Content Service Master) | Fetches list of content service codes allowed before activation |
| R | `callSC` (EKK0511A010) | EKK0511A010SC | KK_T_KINRIN_JIGYO (Financial Institution Agreement Master) | Validates bank/branch code for bank-transfer payment, retrieves bank/branch names |
| R | `callSC` (EZM0111B040) | EZM0111B040SC | KK_T_EAGING (EO ID Usage Status Table) | Queries EO ID usage status to verify it is not currently in use |
| R | `getStbInfo` | STB Info Check | STB Model Master | Validates set-top box hardware model codes (up to 5 units) |
| - | `callJFUMineoSetPlanWribCC` | - | - | Delegates to child CC to fetch mineo set discount plan campaign info |
| - | `JCCBPCommon.getOpeDate` | - | - | Gets current operation date for date comparisons |
| - | `JCCBPCommon.getOpeDateTime` | - | - | Gets current operation datetime for campaign time window checks |
| - | `JFUMkmInfoAddFrontiaUtil.getNetPrcGrpCd` | - | - | Retrieves network pricing group code from work area |
| - | `JFUMkmInfoAddFrontiaUtil.getPcrsCdNet` | - | - | Retrieves network product code from work area |
| - | `JFUMkmInfoAddFrontiaUtil.getPplanCdNet` | - | - | Retrieves network plan code from work area |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | JFUMkmInfoAddFrontiaPreTrnCC.execute() | `execute()` -> `checkCodeToMaster(handle, scCall, param, fixedText, ccMsg)` | `setErrInfMap [-], getMineo_setplan_no [R], isNull [-], setMineoSetCampaign_end_ymd [-], setMineoSetCampaign_cd [-], callSC [R] ECK0131B020/ETU0051A010/EKK1351B501/EKK1371B001/EKK0841B509/EKK0851B001/EKK3281B010/EKK0511A010/EZM0111B040` |

## 6. Per-Branch Detail Blocks

**Block 1** — [SET] Initialize error list (L1030)

> Retrieve existing error list from the shared message map, or create a new empty list.

| # | Type | Code |
|---|------|------|
| 1 | SET | `errorList = new ArrayList<Map<String, String>>()` |
| 2 | IF | `!JFUBPCommon.isNull(ccMsg.get(JFUMkmInfoAddFrontiaConstCC.ERROR_INFO))` [`ERROR_INFO="ERROR_INFO"`] |
| 3 | SET | `errorList = (List<Map<String, String>>) ccMsg.get(JFUMkmInfoAddFrontiaConstCC.ERROR_INFO)` [-> `ERROR_INFO="ERROR_INFO"`] |

**Block 2** — [IF] Opt-in list fetch + email validation (L1032)

> Fetch registered opt-in email numbers from the opt-in registration master, then verify each customer-entered email address number exists in the master. (Upper messaging processing: Opt-in email list check (PMP integration))

| # | Type | Code |
|---|------|------|
| 1 | SET | `eck131b020In = {{TEMPLATEID, "ECK0131B020"}, {FUNC_CODE, FUNC_CD_1}}` |
| 2 | CALL | `eck131b020Out = callSC(handle, scCall, param, fixedText, eck131b020In).getCAANMsgList(...)` [SC: `ECK0131B020SC`] |
| 3 | IF | `eck131b020Out != null && eck131b020Out.length != 0` |
| 4 | SET | `mail_jusin_settei_list = workArea.getMail_jusin_settei_list()` |
| 5 | FOR | `for (Map<String, Object> tmpMap : mail_jusin_settei_list)` |
| 6 | SET | `findFlg = false` |
| 7 | FOR | `for (int k = 0; k < eck131b020Out.length; k++)` |
| 8 | IF | `eck131b020Out[k].getString(OPTINM_NO).equals(tmpMap.get(MAIL_JUSIN_SETTEI_NO))` [`OPTINM_NO`, `MAIL_JUSIN_SETTEI_NO="mail_jusin_settei_no"`] |
| 9 | SET | `findFlg = true` |
| 10 | BREAK | `break` |
| 11 | IF | `!findFlg` |
| 12 | CALL | `errorList.add(chkUtil.setErrInfMap(MAIL_JUSIN_SETTEI_NO + ":" + tmpMap.get(...), RES_KEY_ERROR_CODE_1004))` [`MAIL_JUSIN_SETTEI_NO="mail_jusin_settei_no"`, `1004="1004"` (Email registration number not found)] |

**Block 3** — [IF] Tel Provider JGS 1 validation (L1066)

> Validate the 1st carrier agreement provider code against the communication business agreement master. (Carrier agreement check)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!JFUBPCommon.isNull(workArea.getBmp_tel_svctk_jgs_1())` [`BMP_TEL_SVCTK_JGS_1="bmp_tel_svctk_jgs_1"`] |
| 2 | CALL | `jgs = execETU0051A010(handle, scCall, param, fixedText, workArea.getBmp_tel_svctk_jgs_1())` [SC: `ETU0051A010SC`] |
| 3 | IF | `jgs[0] == null` |
| 4 | CALL | `errorList.add(chkUtil.setErrInfMap(BMP_TEL_SVCTK_JGS_1 + ":" + value, RES_KEY_ERROR_CODE_1004))` [`BMP_TEL_SVCTK_JGS_1="bmp_tel_svctk_jgs_1"`, `1004="1004"` (Provider code not found)] |
| 5 | ELSE | |
| 6 | SET | `workArea.setBmp_tel_svctk_jgs_nm_1(jgs[1])` |

**Block 4** — [IF] Tel Provider JGS 2 validation (L1079)

> Validate the 2nd carrier agreement provider code against the communication business agreement master. Same logic as JGS 1. (Carrier agreement check)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!JFUBPCommon.isNull(workArea.getBmp_tel_svctk_jgs_2())` [`BMP_TEL_SVCTK_JGS_2="bmp_tel_svctk_jgs_2"`] |
| 2 | CALL | `jgs = execETU0051A010(handle, scCall, param, fixedText, workArea.getBmp_tel_svctk_jgs_2())` [SC: `ETU0051A010SC`] |
| 3 | IF | `jgs[0] == null` |
| 4 | CALL | `errorList.add(chkUtil.setErrInfMap(BMP_TEL_SVCTK_JGS_2 + ":" + value, RES_KEY_ERROR_CODE_1004))` [`BMP_TEL_SVCTK_JGS_2="bmp_tel_svctk_jgs_2"`, `1004="1004"` (Provider code not found)] |
| 5 | ELSE | |
| 6 | SET | `workArea.setBmp_tel_svctk_jgs_nm_2(jgs[1])` |

**Block 5** — [IF] EO TV Course deprecation check (L1092)

> Enforce that TV course "3" (Terrestrial/BS Course) cannot be selected after the deregistration date of 2024-04-22, following NTT deregulation. (Digital/BS course: standard channel set)

| # | Type | Code |
|---|------|------|
| 1 | IF | `workArea.getEotv()` |
| 2 | SET | `val = workArea.getEo_tv_course()` [`EO_TV_COURSE="eo_tv_course"`] |
| 3 | IF | `!JFUBPCommon.isNull(val)` |
| 4 | IF | `"3".equals(val)` |
| 5 | SET | `opeDate = JCCBPCommon.getOpeDate(null)` |
| 6 | IF | `"20240422".compareTo(opeDate) <= 0` (current date >= 2024-04-22) |
| 7 | CALL | `errorList.add(chkUtil.setErrInfMap(EO_TV_COURSE + ":" + val, RES_KEY_ERROR_CODE_1004))` [`1004="1004"` (EO TV course not available)] |

**Block 6** — [IF] STB HD1-HD5 model validation (L1102)

> For EO TV course "2" (Cable TV), validate up to 5 set-top box hardware model codes. If any model code does not exist in the master, record an error. (TV tuner/hardware validation)

| # | Type | Code |
|---|------|------|
| 1 | IF | `"2".equals(workArea.getEo_tv_course())` |
| 2 | IF | `!JFUBPCommon.isNull(workArea.getStb_hd1_kiki())` [`STB_HD1_KIKI="stb_hd1_kiki"`] |
| 3 | IF | `!getStbInfo(handle, scCall, param, fixedText, value, STB_HD1_KIKI)` |
| 4 | CALL | `errorList.add(chkUtil.setErrInfMap(STB_HD1_KIKI + ":" + value, RES_KEY_ERROR_CODE_1004))` [`STB_HD1_KIKI="stb_hd1_kiki"`, `1004="1004"` (STB not found)] |
| 5 | IF | `!JFUBPCommon.isNull(workArea.getStb_hd2_kiki())` [`STB_HD2_KIKI="stb_hd2_kiki"`] |
| 6 | IF | `!getStbInfo(handle, scCall, param, fixedText, value, STB_HD2_KIKI)` |
| 7 | CALL | `errorList.add(chkUtil.setErrInfMap(STB_HD2_KIKI + ":" + value, RES_KEY_ERROR_CODE_1004))` [`STB_HD2_KIKI="stb_hd2_kiki"`, `1004="1004"`] |
| 8 | IF | `!JFUBPCommon.isNull(workArea.getStb_hd3_kiki())` [`STB_HD3_KIKI="stb_hd3_kiki"`] |
| 9 | IF | `!getStbInfo(handle, scCall, param, fixedText, value, STB_HD3_KIKI)` |
| 10 | CALL | `errorList.add(chkUtil.setErrInfMap(STB_HD3_KIKI + ":" + value, RES_KEY_ERROR_CODE_1004))` [`STB_HD3_KIKI="stb_hd3_kiki"`, `1004="1004"`] |
| 11 | IF | `!JFUBPCommon.isNull(workArea.getStb_hd4_kiki())` [`STB_HD4_KIKI="stb_hd4_kiki"`] |
| 12 | IF | `!getStbInfo(handle, scCall, param, fixedText, value, STB_HD4_KIKI)` |
| 13 | CALL | `errorList.add(chkUtil.setErrInfMap(STB_HD4_KIKI + ":" + value, RES_KEY_ERROR_CODE_1004))` [`STB_HD4_KIKI="stb_hd4_kiki"`, `1004="1004"`] |
| 14 | IF | `!JFUBPCommon.isNull(workArea.getStb_hd5_kiki())` [`STB_HD5_KIKI="stb_hd5_kiki"`] |
| 15 | IF | `!getStbInfo(handle, scCall, param, fixedText, value, STB_HD5_KIKI)` |
| 16 | CALL | `errorList.add(chkUtil.setErrInfMap(STB_HD5_KIKI + ":" + value, RES_KEY_ERROR_CODE_1004))` [`STB_HD5_KIKI="stb_hd5_kiki"`, `1004="1004"`] |

**Block 7** — [FOR] Campaign code validation loop (L1124)

> For each campaign code in the work area, validate its existence, check its time window validity, and verify compatibility with the customer's selected courses/services.

| # | Type | Code |
|---|------|------|
| 1 | FOR | `for (Map<String, Object> tmpMap : workArea.getCampaign_cd_list())` |
| 2 | SET | `campaignCd = (String) tmpMap.get(CAMPAIGN_CD)` [`CAMPAIGN_CD="campaign_cd"`] |
| 3 | IF | `!JFUBPCommon.isNull(campaignCd)` |
| 4 | SET | `campaignSvcCd = JFUStrConst.EMPTY` |
| 5 | IF | `"1".equals(tmpMap.get(CAMPAIGN_SBT_CD))` [`CAMPAIGN_SBT_CD="campaign_sbt_cd"`] |
| 6 | SET | `ekk1351b501In = {{TEMPLATEID, "EKK1351B501"}, {FUNC_CODE, FUNC_CD_1}, {KEY_DSP_DCHSKM_CD, campaignCd}}` |
| 7 | CALL | `ekk1351b501Out = callSC(handle, scCall, param, fixedText, ekk1351b501In).getCAANMsgList(...)` [SC: `EKK1351B501SC`] |
| 8 | IF | `ekk1351b501Out == null || ekk1351b501Out.length == 0` |
| 9 | CALL | `errorList.add(..., RES_KEY_ERROR_CODE_2005)` [`2005="2005"` (Campaign data not found)] |
| 10 | ELSE | |
| 11 | SET | `campaignSvcCd = ekk1351b501Out[0].getString(DCHSKM_CD)` |
| 12 | SET | `sta_ymdhm = ekk1351b501Out[0].getString(SET_PSB_STA_YMDHM)` |
| 13 | SET | `end_ymdhm = ekk1351b501Out[0].getString(SET_PSB_END_YMDHM)` |
| 14 | IF | `getOpeDateTime(null).compareTo(sta_ymdhm) < 0 OR getOpeDateTime(null).compareTo(end_ymdhm) > 0` |
| 15 | CALL | `errorList.add(..., RES_KEY_ERROR_CODE_2005)` (Campaign outside valid period) |
| 16 | ELSE | |
| 17 | SET | `ekk1371b001In = {{TEMPLATEID, "EKK1371B001"}, {FUNC_CODE, FUNC_CD_1}, {KEY_DCHSKM_CD, campaignSvcCd}, {KEY_PRC_GRP_CD, getNetPrcGrpCd()}, {KEY_PCRS_CD, getPcrsCdNet()}, {KEY_PPLAN_CD, getPplanCdNet()}, {KEY_KJN_YMD, getOpeDate()}, {MAX_SEARCH_NUM, MAX}}` |
| 18 | CALL | `ekk1371b001Out = callSC(handle, scCall, param, fixedText, ekk1371b001In).getCAANMsgList(...)` [SC: `EKK1371B001SC`] |
| 19 | IF | `ekk1371b001Out == null || ekk1371b001Out.length == 0` |
| 20 | CALL | `errorList.add(..., RES_KEY_ERROR_CODE_2005)` (Campaign not applicable to service group/product/plan) |
| 21 | ELSE | |
| 22 | SET | `tmpMap.put(CAMPAIGN_SVC_CD, campaignSvcCd)` [`CAMPAIGN_SVC_CD="campaign_svc_cd"`] |
| 23 | SET | `tmpMap.put(CAMPAIGN_STA_DTM, sta_ymdhm)` [`CAMPAIGN_STA_DTM="campaign_sta_dtm"`] |
| 24 | SET | `tmpMap.put(CAMPAIGN_END_DTM, end_ymdhm)` [`CAMPAIGN_END_DTM="campaign_end_dtm"`] |
| 25 | ELSE | [campaign_sbt_cd != 1: discount service path] |
| 26 | SET | `ekk0841b509In = {{TEMPLATEID, "EKK0841B509"}, {FUNC_CODE, FUNC_CD_1}, {KEY_DSP_CAMPAIGN_CD, campaignCd}, {KEY_RSV_APLY_YMD, getOpeDate()}}` |
| 27 | CALL | `ekk0841b509Out = callSC(handle, scCall, param, fixedText, ekk0841b509In).getCAANMsgList(...)` [SC: `EKK0841B509SC`] |
| 28 | IF | `ekk0841b509Out == null || ekk0841b509Out.length == 0` |
| 29 | CALL | `errorList.add(..., RES_KEY_ERROR_CODE_2005)` |
| 30 | ELSE | |
| 31 | SET | `campaignSvcCd = ekk0841b509Out[0].getString(WRIB_SVC_CD)` |
| 32 | SET | `sta_ymdhm = ekk0841b509Out[0].getString(UK_STA_YMDHM)` |
| 33 | SET | `end_ymdhm = ekk0841b509Out[0].getString(UK_END_YMDHM)` |
| 34 | IF | `getOpeDateTime(null).compareTo(sta_ymdhm) < 0 OR getOpeDateTime(null).compareTo(end_ymdhm) > 0` |
| 35 | CALL | `errorList.add(..., RES_KEY_ERROR_CODE_2005)` (Campaign outside valid period) |
| 36 | ELSE | |
| 37 | SET | `ekk0851b001In = {{TEMPLATEID, "EKK0851B001"}, {FUNC_CODE, FUNC_CD_1}, {KEY_WRIB_SVC_CD, campaignSvcCd}, {KEY_PRC_GRP_CD, getNetPrcGrpCd()}, {KEY_PCRS_CD, getPcrsCdNet()}, {KEY_PPLAN_CD, getPplanCdNet()}, {KEY_KJNYMD, getOpeDate()}, {MAX_SEARCH_NUM, MAX}}` |
| 38 | CALL | `ekk0851b001Out = callSC(handle, scCall, param, fixedText, ekk0851b001In).getCAANMsgList(...)` [SC: `EKK0851B001SC`] |
| 39 | IF | `ekk0851b001Out == null || ekk0851b001Out.length == 0` |
| 40 | CALL | `errorList.add(..., RES_KEY_ERROR_CODE_2005)` |
| 41 | ELSE | |
| 42 | SET | `tmpMap.put(CAMPAIGN_SVC_CD, campaignSvcCd)` |
| 43 | SET | `tmpMap.put(CAMPAIGN_STA_DTM, sta_ymdhm)` |
| 44 | SET | `tmpMap.put(CAMPAIGN_END_DTM, end_ymdhm)` |

**Block 7.1** — [Nested IFs] Campaign requirement checks (L1256, within campaign loop, after campaignSvcCd obtained)

> After campaign validation, verify that the campaign's required service is actually subscribed by the customer.

| # | Type | Code |
|---|------|------|
| 1 | IF | `!JFUBPCommon.isNull(campaignSvcCd)` |
| 2 | IF | `!NET_COURSE_NF.contains(workArea.getNet_course())` [`NET_COURSE_NF=["7","8","9","11"]`] |
| 3 | IF | `NETFLIX_CAMPAIGN.contains(campaignSvcCd)` [`NETFLIX_CAMPAIGN=["W40000118","W40000119","W40000149","W10000193","W10000208"]`] |
| 4 | CALL | `errorList.add(..., RES_KEY_ERROR_CODE_1006)` [`1006="1006"` (Netflix campaign without Netflix course)] |
| 5 | IF | `!"1".equals(workArea.getMesh_wifi())` |
| 6 | IF | `MESHWIFI_CAMPAIGN.contains(campaignSvcCd)` [`MESHWIFI_CAMPAIGN=["W40000117"]`] |
| 7 | CALL | `errorList.add(..., RES_KEY_ERROR_CODE_1006)` (meshWiFi campaign without meshWiFi subscription)] |
| 8 | IF | `!"1".equals(workArea.getNet_stick_stb_mskm())` |
| 9 | IF | `SMP_CAMPAIGN.contains(campaignSvcCd)` [`SMP_CAMPAIGN=["W10000193"]`] |
| 10 | CALL | `errorList.add(..., RES_KEY_ERROR_CODE_1006)` (SMP campaign without Stick STB subscription)] |
| 11 | IF | `!"1".equals(workArea.getNet_sokuwari())` |
| 12 | IF | `GETUWARI_CAMPAIGN.contains(campaignSvcCd)` [`GETUWARI_CAMPAIGN=["W40000151"]`] |
| 13 | CALL | `errorList.add(..., RES_KEY_ERROR_CODE_1006)` (Monthly discount campaign without Sokuwari subscription)] |

**Block 8** — [IF] Content service code validation (L1297)

> Verify each content service code entered by the customer exists in the pre-registration allowed services master.

| # | Type | Code |
|---|------|------|
| 1 | IF | `workArea.getCont_svc_list().size() > 0` [`CONT_SVC_LIST`] |
| 2 | SET | `ekk3281b010In = {{TEMPLATEID, "EKK3281B010"}, {FUNC_CODE, FUNC_CD_1}, {KEY_UNYO_YMD, getOpeDate()}}` |
| 3 | CALL | `ekk3281b010Out = callSC(handle, scCall, param, fixedText, ekk3281b010In).getCAANMsgList(...)` [SC: `EKK3281B010SC`] |
| 4 | SET | `arrayList = new ArrayList<String>()` |
| 5 | IF | `ekk3281b010Out != null && ekk3281b010Out.length > 0` |
| 6 | FOR | `for (CAANMsg : ekk3281b010Out)` |
| 7 | SET | `arrayList.add(getString(CONT_SVC_CD))` [`CONT_SVC_CD="cont_svc_cd"`] |
| 8 | FOR | `for (Map<String, Object> tmpMap : workArea.getCont_svc_list())` |
| 9 | SET | `cont_svc_cd = (String) tmpMap.get(CONT_SVC_CD)` |
| 10 | IF | `arrayList.size() > 0 && !arrayList.contains(cont_svc_cd)` |
| 11 | CALL | `errorList.add(..., RES_KEY_ERROR_CODE_1004)` [`1004="1004"` (Content service code not found)] |
| 12 | ELSE | |
| 13 | CALL | `errorList.add(..., RES_KEY_ERROR_CODE_1004)` (No allowed services in master) |

**Block 9** — [IF] Bank/Branch code validation (L1325)

> For bank-transfer payment method (payway = "1"), validate the financial institution and branch codes against the master, and populate bank/branch names.

| # | Type | Code |
|---|------|------|
| 1 | IF | `"1".equals(workArea.getPayway())` [`PAYWAY="payway"`, `1` = Bank Transfer] |
| 2 | IF | `!JFUBPCommon.isNull(workArea.getBank_cd()) && !JFUBPCommon.isNull(workArea.getBranch_cd())` [`BANK_CD="bank_cd"`, `BRANCH_CD="branch_cd"`] |
| 3 | SET | `branch_cd = workArea.getBranch_cd()` |
| 4 | IF | `JFUStrConst.BANK_CD_POSTAL.equals(workArea.getBank_cd())` |
| 5 | SET | `branch_cd = "001"` (Postal bank default branch) |
| 6 | SET | `ekk0511a010In = {{TEMPLATEID, "EKK0511A010"}, {FUNC_CODE, FUNC_CD_2}, {KEY_BANK_CD, bank_cd}, {KEY_BANK_SHITEN_CD, branch_cd}, {KEY_RSV_APLY_YMD, getOpeDate()}}` |
| 7 | CALL | `ekk0511a010Out = callSC(handle, scCall, param, fixedText, ekk0511a010In).getCAANMsgList(...)` [SC: `EKK0511A010SC`] |
| 8 | IF | `ekk0511a010Out != null && ekk0511a010Out.length > 0` |
| 9 | SET | `workArea.setBank_nm(getString(BANK_NM))` |
| 10 | SET | `workArea.setShiten_nm(getString(BANK_SHITEN_NM))` |
| 11 | ELSE | |
| 12 | CALL | `errorList.add(..., RES_KEY_ERROR_CODE_1004)` [`1004="1004"` (Financial institution not found)] |

**Block 10** — [IF] EO ID status check (L1351)

> Query the EO ID usage status table to verify the entered EO ID is not currently in use. (EO ID list check)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!JFUBPCommon.isNull(workArea.getEoid())` [`EO_ID="eoid"`] |
| 2 | SET | `ezm0111b040In = {{TEMPLATEID, "EZM0111B040"}, {FUNC_CODE, FUNC_CD_1}, {KEY_AGING_TG_VALUE, eoid}, {KEY_AGING_SBT_CD, CD00412_004}}` |
| 3 | CALL | `ezm0111b040Out = callSC(handle, scCall, param, fixedText, ezm0111b040In).getCAANMsgList(...)` [SC: `EZM0111B040SC`] |
| 4 | IF | `ezm0111b040Out != null && ezm0111b040Out.length > 0` |
| 5 | SET | `eagingStat = ezm0111b040Out[0].getString(AGING_STAT)` |
| 6 | IF | `CD00063_100.equals(eagingStat) OR CD00063_200.equals(eagingStat) OR CD00063_300.equals(eagingStat)` [`CD00063_100="100"`, `CD00063_200="200"`, `CD00063_300="300"`] |
| 7 | CALL | `errorList.add(..., RES_KEY_ERROR_CODE_2006)` [`2006="2006"` (EO ID in use)] |

**Block 11** — [IF] Mineo set plan retrieval (L1374)

> Retrieve mineo set discount plan campaign information from the child CC. (Mineo set discount information retrieval CC)

| # | Type | Code |
|---|------|------|
| 1 | IF | `!JFUBPCommon.isNull(workArea.getMineo_setplan_kbn())` [`MINEO_SETPLAN_KBN`] |
| 2 | SET | `parentMap = new HashMap<String, Object>()` |
| 3 | CALL | `callJFUMineoSetPlanWribCC(handle, param)` |
| 4 | SET | `parentMap = (HashMap) param.getData("JFUMineoSetPlanWribCC")` |
| 5 | IF | `parentMap != null` |
| 6 | SET | `dsp_campaign_cd = (String) parentMap.get("dsp_campaign_cd")` |
| 7 | SET | `workArea.setMineoSetCampaign_cd(dsp_campaign_cd)` |
| 8 | SET | `uk_end_ymdhm = (String) parentMap.get("uk_end_ymdhm")` |
| 9 | SET | `workArea.setMineoSetCampaign_end_ymd(uk_end_ymdhm)` |
| 10 | IF | `JFUBPCommon.isNull(dsp_campaign_cd)` |
| 11 | CALL | `errorList.add(chkUtil.setErrInfMap(MINEO_SETPLAN_NO + ":" + workArea.getMineo_setplan_no(), RES_KEY_ERROR_CODE_2303))` [`MINEO_SETPLAN_NO="mineo_setplan_no"`, `2303="2303"` (Mineo set campaign code cannot be obtained)] |

**Block 12** — [IF] Final error check (L1397)

> After all validation blocks complete, check if any errors were accumulated.

| # | Type | Code |
|---|------|------|
| 1 | IF | `errorList.size() > 0` |
| 2 | SET | `ccMsg.put(ERROR_INFO, errorList)` [`ERROR_INFO="ERROR_INFO"`] |
| 3 | RETURN | `return false` |
| 4 | RETURN | `return true` |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `mail_jusin_settei_no` | Field | Mail address registration number — unique identifier for an email address registered in the opt-in list system |
| `bmp_tel_svctk_jgs_1` / `bmp_tel_svctk_jgs_2` | Field | Carrier agreement provider code (1st/2nd) — identifies communication business providers that the customer has agreed to for service delivery |
| `eo_tv_course` | Field | EO TV course — television service tier selection (1 = basic, 2 = cable TV, 3 = terrestrial/BS — deprecated after 2024-04-22) |
| `stb_hd1_kiki` through `stb_hd5_kiki` | Field | Set-top box hardware model code (1st through 5th unit) — identifies the STB device model for cable TV service |
| `campaign_cd` | Field | Campaign code — promotional campaign identifier (e.g., W40000118 for Netflix bundle) |
| `campaign_sbt_cd` | Field | Campaign subdivision code — classifies campaign type: "1" = data extraction item, otherwise = discount service |
| `campaign_svc_cd` | Field | Campaign service code — resolved service code associated with a campaign code |
| `cont_svc_cd` | Field | Content service code — identifier for content services (e.g., video-on-demand, streaming) |
| `payway` | Field | Payment method — payment type code ("1" = bank transfer) |
| `bank_cd` / `branch_cd` | Field | Bank code / Branch code — financial institution and branch identifiers for bank-transfer payment |
| `eoid` | Field | EO ID — the customer's unique EO platform account identifier |
| `eaging_stat` | Field | EO aging status — EO ID usage status code (100 = in use, 200 = reserved, 300 = pending) |
| `mineo_setplan_no` | Field | Mineo set plan number — mobile SIM plan identifier for mineo set discount program |
| `net_course` | Field | Network course — fiber internet plan tier (e.g., 7/8/9/11 = 1G/10G with Netflix) |
| `mesh_wifi` | Field | Mesh WiFi subscription flag — "1" = subscribed to mesh WiFi service |
| `net_stick_stb_mskm` | Field | Net Stick STB subscription flag — "1" = subscribed to SMP (Stick STB) service |
| `net_sokuwari` | Field | Net Sokuwari flag — "1" = subscribed to monthly installment discount program |
| NETFLIX_CAMPAIGN | Constant | Campaign service codes requiring Netflix course: W40000118, W40000119, W40000149, W10000193, W10000208 |
| MESHWIFI_CAMPAIGN | Constant | Campaign service codes requiring meshWiFi: W40000117 |
| SMP_CAMPAIGN | Constant | Campaign service codes requiring SMP Stick STB: W10000193 |
| GETUWARI_CAMPAIGN | Constant | Campaign service codes requiring monthly installment: W40000151 |
| NET_COURSE_NF | Constant | Network course codes that include Netflix: "7", "8", "9", "11" |
| ERROR_INFO | Constant | Map key for error information list in the shared message map |
| RES_KEY_ERROR_CODE_1004 | Constant | API Error 1004: Master data not found (code does not exist in master) |
| RES_KEY_ERROR_CODE_1006 | Constant | API Error 1006: Campaign-service mismatch (campaign required but service not subscribed) |
| RES_KEY_ERROR_CODE_2005 | Constant | API Error 2005: Campaign data not found or outside valid period |
| RES_KEY_ERROR_CODE_2006 | Constant | API Error 2006: EO ID already in use |
| RES_KEY_ERROR_CODE_2303 | Constant | API Error 2303: Mineo set campaign code cannot be obtained |
| ECK0131B020SC | SC | Opt-in registration service component — fetches registered opt-in email address list |
| EKK1351B501SC | SC | Data extraction item campaign service — validates campaign codes for data extraction type |
| EKK1371B001SC | SC | Data extraction item registration service check — validates campaign against service group/product/plan |
| EKK0841B509SC | SC | Discount service campaign service — validates campaign codes for discount type |
| EKK0851B001SC | SC | Discount service registration check — validates discount campaign against service group/product/plan |
| EKK3281B010SC | SC | Pre-registration content service list — fetches allowed content service codes |
| EKK0511A010SC | SC | Financial institution agreement check — validates bank/branch codes for transfer payment |
| EZM0111B040SC | SC | EO ID list check (UNI-Q) — queries EO ID usage status |
| ETU0051A010SC | SC | Communications business agreement check — validates carrier provider codes |
| FUNC_CD_1 | Constant | Function code "1" — standard inquiry/retrieval operation |
| FUNC_CD_2 | Constant | Function code "2" — inquiry operation for financial institutions |
