# Business Logic — KKW00121SFLogic.checkKKW00125Error() [642 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKW00121SF.KKW00121SFLogic` |
| Layer | Web Business Logic (Controller tier, webview logic class) |
| Module | `KKW00121SF` (Package: `eo.web.webview.KKW00121SF`) |

## 1. Role

### KKW00121SFLogic.checkKKW00125Error()

This method performs comprehensive page-level input validation for the KKW00125 screen — "Preliminary Registration (eo Optical Telephone 1)" — a pre-registration form used during telecom service contract enrollment at K-Opticom. It validates all mandatory fields on the Telephone 1 tab, including review result selection, commission fee fields, telephone number type selection, FOMA commission inputs, service contract number, and optional package agreement checks. The method implements a **validation routing pattern** where processing branches by telephone number kind (new number vs. ported/FOMA number), performing different subsets of checks accordingly. It serves as the central entry-point validator for the entire screen — all internal callers (checkAllGamenError, checkGamenError, setSameAddress, tel_refreshParentTelNo) delegate to this method to ensure page-level consistency before data submission. The method delegates service-tier validation to a suite of CBS (Component Business) methods via the `KKSV0102_KKSV0102OPDBMapper`, including telephone number agreement checks, duplicate registration checks, routing number checks, and same-address transfer simplicity checks. Despite its extensive validation logic, the method always returns `true` — the boolean return code is used internally as a flag that gets set to `false` when errors are detected (causing UI tab-highlighting) but the method ultimately returns `true` to signal processing completion rather than a pass/fail outcome.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["checkKKW00125Error(isErrClear)"])
    START --> STEP1["Step1: Switch screen ID to KKW00125"]
    STEP1 --> STEP2["Step2: Get dataBean, mskmDataMap, mskmInfoMap, svcKeiMap, svcKeiUcwkList"]
    STEP2 --> STEP3["Step3: Get bmpTel1TelNoHidden, bmpTel1TelNo from dataBean"]
    STEP3 --> STEP4["Step4: Get jimuBean from SVC_MSKM_INFO"]

    STEP4 --> COND_SKEKKA["SKEKKA_TCHI is empty?"]
    COND_SKEKKA -- Yes --> ERR_SKEKKA["Add EKB1320_NW errors for SKEKKA_TCHI 1-4, rtnCode=false"]
    COND_SKEKKA -- No --> COND_JIMU["jimuSelected is empty or 0?"]
    ERR_SKEKKA --> COND_JIMU

    COND_JIMU -- Yes --> ERR_JIMU_BLANK["Add EKB1320_NW for JIMU_COMMISION, rtnCode=false"]
    COND_JIMU -- No --> COND_SVCKEINO["svcKeiNo length > 0?"]

    COND_JIMU_BLANK --> COND_SVCKEINO
    COND_SVCKEINO -- Yes --> COND_JIMUCHK["checkJimuCommision != 0?"]
    COND_SVCKEINO -- No --> CHECK_DETAIL

    COND_JIMUCHK -- Yes --> ERR_JIMU_CHANGE["Add EKB7900__Q for Jimu change, rtnCode=false"]
    COND_JIMUCHK -- No --> CHECK_DETAIL
    ERR_JIMU_CHANGE --> CHECK_DETAIL

    COND_JIMU_BLANK -- No --> COND_JIMU_BRANCH

    COND_JIMU_BRANCH["jimu_com_idx_str not empty?"] -- Yes --> COND_JIMU_CD["jimu_com_new_cd == JIMU_COMMISION_SHITEI (04)?"]
    COND_JIMU_BRANCH -- No --> CHECK_DETAIL
    COND_JIMU_CD -- Yes --> COND_SHITEI_EMPTY["jimu_com_shitei empty?"]
    COND_JIMU_CD -- No --> CHECK_DETAIL
    COND_SHITEI_EMPTY -- Yes --> ERR_SHITEI["Add EKB0710_NW for JIMU_COMMISION_SHITEI, rtnCode=false"]
    COND_SHITEI_EMPTY -- No --> CHECK_DETAIL
    ERR_SHITEI --> CHECK_DETAIL

    CHECK_DETAIL["checkTmckSkekkaCdDetail(...)"] --> CHECK_TELNO_KIND["selectedTelnoKind empty?"]

    CHECK_TELNO_KIND -- Yes --> ERR_TELNO_KIND["Add EKB1060_TW, set tab red, restore screen ID, return true"]
    CHECK_TELNO_KIND -- No --> COND_TELNO_KIND

    COND_TELNO_KIND["selectedTelnoKind == TELNO_KIND_BMP (2)?"]
    ERR_TELNO_KIND --> SNG_CHK
    COND_TELNO_KIND -- Yes --> COND_BLNK_MS["JMTE_SKBT_CD_BLNK?"]
    COND_TELNO_KIND -- No --> SNG_CHK

    COND_BLNK_MS -- Yes --> ERR_BLNK["Add EKB1320_NW for BMP_MSKM_COMMISION, rtnCode=false"]
    COND_BLNK_MS -- No --> COND_SHITEI_AMT["JMTE_SKBT_CD_SHITEIAMNT (3) AND shitei empty?"]

    ERR_BLNK --> COND_SHITEI_AMT
    COND_SHITEI_AMT -- Yes --> ERR_SHITEI_AMT["Add EKB0710_NW for BMP_SHITEI, rtnCode=false"]
    COND_SHITEI_AMT -- No --> SNG_CHK
    ERR_SHITEI_AMT --> SNG_CHK

    SNG_CHK["snglChkKKW00125(dataBean)"] --> AD_CHECK["adCheckKKW00125Error()"]
    AD_CHECK --> COND_ERR_FLG["rtnCode is false?"]
    COND_ERR_FLG -- Yes --> SET_TAB_RED["Set TAB_TEL1_DSP_STAT to error"]
    COND_ERR_FLG -- No --> RELATION_CHECK
    SET_TAB_RED --> RELATION_CHECK

    RELATION_CHECK["Related check: dbnitnSmplChkExecFlg"] --> COND_DBNI["TELNO_KIND_CD_BMP?"]
    COND_DBNI -- Yes --> COND_UERP["chkSmplDbnitnSingleUepcInf() AND chkSmplDbnitnSingleTelno()"]
    COND_DBNI -- No --> SET_FLG_FALSE

    COND_UERP -- Yes --> SET_FLG_TRUE
    COND_UERP -- No --> SET_FLG_FALSE
    SET_FLG_FALSE["dbnitnSmplChkExecFlg = false"] --> MAP_INIT

    SET_FLG_TRUE["dbnitnSmplChkExecFlg = true"] --> MAP_INIT["Initialize paramMap, mapper, get opeDate/opeDateTimeStamp"]

    MAP_INIT --> COND_SVC_NO["svcKeiNo length > 0?"]
    COND_SVC_NO -- Yes --> COND_DOJI["checkDojiKojiKibo == 0 AND checkHyojunKojihi == 0?"]
    COND_SVC_NO -- No --> MAPPER_CALLS
    COND_DOJI -- Yes --> ERR_DOJI["Add EKB8460__Q errors for DojiKoji and HyojunKojihi"]
    ERR_DOJI --> MAPPER_CALLS

    MAPPER_CALLS["Call mapper methods for TEL_ONE services"] --> CALL_SVC["JKKWebCommon.callService(...)"]
    CALL_SVC --> COND_CALL_RESULT["callService result == true?"]
    COND_CALL_RESULT -- No --> SET_TAB_RED_2["Set TAB_TEL1_DSP_STAT to error"]
    COND_CALL_RESULT -- Yes --> PROC_OUT

    SET_TAB_RED_2 --> PROC_OUT["Process outputMap results"]

    PROC_OUT --> COND_EZM121A["isEZM0121A010 true?"]
    COND_EZM121A -- Yes --> COND_EZM121A_DATA["outData != null AND outList > 0?"]
    COND_EZM121A -- No --> COND_EZM121B

    COND_EZM121A_DATA -- Yes --> COND_TLN_TAI["tlnTaiCd == KOJIN_HOJIN_TLN_TAI_CD_HOJIN (2)?"]
    COND_EZM121A_DATA -- No --> COND_EZM121B

    COND_TLN_TAI -- Yes --> SET_HOJIN_FLG["Set TEL1_HOJIN_TELNO_EXIST_FLG = true"]
    COND_TLN_TAI -- No --> SET_HOJIN_FLG

    SET_HOJIN_FLG --> COND_TLN_STKU["tln_stku_tsjgs_jisha_tasha_flg == 1?"]
    COND_TLN_STKU -- Yes --> COND_TELNO_KIND_CHK["selectedTelnoKind == BMP?"]

    COND_TLN_STKU -- No --> PROP_CHANGE_CHK
    COND_TELNO_KIND_CHK -- Yes --> COND_STKU_CHECK["tln_stku_tsjgs_jisha_tasha_div AND portoutstatum both 1?"]
    COND_TELNO_KIND_CHK -- No --> PROP_CHANGE_CHK

    COND_STKU_CHECK -- No --> ERR_MASTA["Add EKBF980_KW or EKBF980_KW + MSG_NO_1, set tab red"]
    COND_STKU_CHECK -- Yes --> PROP_CHANGE_CHK
    ERR_MASTA --> PROP_CHANGE_CHK

    PROP_CHANGE_CHK["bmpTel1TelNo != bmpTel1TelNoHidden?"] --> COND_HOJIN_CHK["TEL1_HOJIN_TELNO_EXIST_FLG true?"]
    PROP_CHANGE_CHK -- No --> COND_EZM121B_CHK

    COND_HOJIN_CHK -- Yes --> COND_MONAI["monaiBmpum AND portoutstatum both 1?"]
    COND_HOJIN_CHK -- No --> COND_JISHA_TOSHA["jisha_tasha_flg != 1?"]

    COND_MONAI -- No --> WARN_MASTA["Add EKBB900__Q warning, set tab red"]
    COND_MONAI -- Yes --> COND_EZM121B_CHK
    WARN_MASTA --> COND_EZM121B_CHK

    COND_JISHA_TOSHA -- Yes --> ERR_JISHA["Add EKBE147__Q, set tab red"]
    COND_JISHA_TOSHA -- No --> COND_EZM121B_CHK
    ERR_JISHA --> COND_EZM121B_CHK

    COND_EZM121B_CHK["isEZM0121B020 true?"] --> COND_EZM121B_DATA["outData != null AND outList > 0?"]
    COND_EZM121B_CHK -- No --> COND_EZM0301
    COND_EZM121B_DATA -- Yes --> COND_NEW_TELNO["selectedTelnoKind == NEW (1)?"]
    COND_EZM121B_DATA -- No --> COND_EZM0301

    COND_NEW_TELNO -- Yes --> COND_UCWK_STAT["svc_kei_ucwk_stat == UCWK_STAT_SHIYO_CHU (100)?"]
    COND_NEW_TELNO -- No --> COND_EZM0301
    COND_UCWK_STAT -- Yes --> ERR_DUP["Add EKB1040_JW for duplicated assigned K-OPT number, set tab red"]
    COND_UCWK_STAT -- No --> COND_EZM0301
    ERR_DUP --> COND_EZM0301

    COND_EZM0301["isEZM0301A010 true?"] --> COND_EZM0301_DATA["outList > 0?"]
    COND_EZM0301 -- No --> COND_EZM0091
    COND_EZM0301_DATA -- Yes --> EXTRACT_TELMA["Extract telMa from no_kukaku_cd (if BMP)"]
    COND_EZM0301_DATA -- No --> COND_EZM0091
    EXTRACT_TELMA --> COND_EZM0091

    COND_EZM0091["isEZM0091B010 AND TELNO_KIND_BMP AND telMa not empty?"] --> COND_EZM0091_DATA["outData != null AND outList > 0?"]
    COND_EZM0091 -- No --> TEMPORARY_FEE
    COND_EZM0091_DATA -- Yes --> LOOP_CHK["For each: telMa == no_kukaku_cd?"]
    COND_EZM0091_DATA -- No --> IS_SAME_FALSE

    LOOP_CHK -- Found --> IS_SAME_TRUE["is_same = true"]
    LOOP_CHK -- Not found --> IS_SAME_FALSE["is_same = false"]
    IS_SAME_FALSE --> COND_IS_SAME["is_same false?"]
    IS_SAME_TRUE --> TEMPORARY_FEE
    COND_IS_SAME -- Yes --> ERR_MA["Add EKB7860__Q MA code mismatch, set tab red"]
    COND_IS_SAME -- No --> TEMPORARY_FEE
    ERR_MA --> TEMPORARY_FEE

    TEMPORARY_FEE["Check temporary fee (teate) errors from KKSV010202CC and KKSV010204CC"] --> CHECK_CRS_CHG["Get eohnetcrschgflg"]

    CHECK_CRS_CHG --> COND_MANSION["MSKM_KIND == MANSION (2)?"]
    COND_MANSION -- Yes --> COND_VDSL["VDSL (3) AND eohnetcrschgflg?"]
    COND_MANSION -- No --> PACK_CHECK
    COND_VDSL -- Yes --> VDSL_MSG["Reset pulldown, Add EKB1220__I, reset flag"]
    VDSL_MSG --> PACK_CHECK
    COND_VDSL -- No --> PACK_CHECK

    PACK_CHECK["optPackAplyChkMap return_cd == 000?"] --> COND_WRIB["wribSvcCd null?"]
    PACK_CHECK -- No --> FINAL_CHECK
    COND_WRIB -- Yes --> OPT_FLAGS["Check TEL1_OPT_EOHTL_PACK_3, 7, ANSN_TEL_PACK"]
    COND_WRIB -- No --> COND_PACK3["wribSvcCd == EOHTL_PACK_3 (W00000007)?"]

    OPT_FLAGS -- Flag false --> SET_REP_KOBETSU["repMsg = MSG_KOBETSU"]
    OPT_FLAGS -- Flag true --> COND_PACK3
    SET_REP_KOBETSU --> COND_PACK3
    COND_PACK3 -- Yes --> COND_PACK3_FLAG["PACK_3 flag false?"]
    COND_PACK3 -- No --> COND_PACK7

    COND_PACK3_FLAG -- Yes --> SET_REP_PACK3["repMsg = MSG_PACK_3"]
    COND_PACK3_FLAG -- No --> COND_PACK7
    SET_REP_PACK3 --> COND_PACK7

    COND_PACK7["wribSvcCd == EOHTL_PACK_7 (W00000008)?"] --> COND_PACK7_FLAG["PACK_7 flag false?"]
    COND_PACK7 -- Yes --> SET_REP_PACK7["repMsg = MSG_PACK_7"]
    COND_PACK7 -- No --> COND_ANSTEL
    COND_PACK7_FLAG -- Yes --> SET_REP_PACK7
    COND_PACK7_FLAG -- No --> COND_ANSTEL
    SET_REP_PACK7 --> COND_ANSTEL

    COND_ANSTEL["wribSvcCd == ANSN_TEL_PACK (W00000023)?"] --> COND_ANSTEL_FLAG["ANSN_TEL flag false?"]
    COND_ANSTEL -- Yes --> SET_REP_ANSTEL["repMsg = MSG_PACK_ANSN"]
    COND_ANSTEL -- No --> CHK_REP_MSG
    COND_ANSTEL_FLAG -- Yes --> SET_REP_ANSTEL
    COND_ANSTEL_FLAG -- No --> CHK_REP_MSG
    SET_REP_ANSTEL --> CHK_REP_MSG

    CHK_REP_MSG["repMsg not null?"] --> REP_ERR["Add EKBE131_KW, set tab red"]
    REP_ERR --> DBNI_CHECK
    CHK_REP_MSG -- No --> DBNI_CHECK

    DBNI_CHECK["Get KKSV010206CC chkRslt"] --> COND_CHK_RESULT["chkRslt == CD01659_OK (1)?"]
    COND_CHK_RESULT -- Yes --> SET_CHK_OK
    COND_CHK_RESULT -- No --> COND_CHK_NG["chkRslt == CD01659_NG (2)?"]
    SET_CHK_OK["Set TEL1_DOBANITEN_SMPL_CHK_RSLT to OK"] --> COND_BMP_USE_PLC

    COND_CHK_NG -- Yes --> SET_CHK_NG
    COND_CHK_NG -- No --> COND_CHK_FAIL["chkRslt == CD01659_JUDGE_FAIL (3)?"]
    SET_CHK_NG["Set TEL1_DOBANITEN_SMPL_CHK_RSLT to NG"] --> COND_BMP_USE_PLC_2

    COND_CHK_FAIL -- Yes --> SET_CHK_FAIL
    COND_CHK_FAIL -- No --> RESTORE_ID
    SET_CHK_FAIL["Set TEL1_DOBANITEN_SMPL_CHK_RSLT to JUDGE_FAIL"] --> COND_BMP_USE_PLC_3

    COND_BMP_USE_PLC["BMP_USE_PLC == REMOVAL (2)?"] --> ADD_ERR_01["Add EKBE162__I"]
    COND_BMP_USE_PLC -- No --> COND_BMP_USE_PLC_2

    COND_BMP_USE_PLC_2["BMP_USE_PLC == REMOVAL (2)?"] --> ADD_ERR_02["Add EKBE163__Q"]
    COND_BMP_USE_PLC_2 -- No --> COND_BMP_USE_PLC_3

    COND_BMP_USE_PLC_3["BMP_USE_PLC == REMOVAL (2)?"] --> ADD_ERR_03["Add EKBE174__Q"]
    COND_BMP_USE_PLC_3 -- No --> RESTORE_ID

    ADD_ERR_01 --> RESTORE_ID
    ADD_ERR_02 --> RESTORE_ID
    ADD_ERR_03 --> RESTORE_ID

    RESTORE_ID["setGamenIdForErrRef(nowGamenId)"] --> FINAL_RETURN(["return true"])

    style START fill:#e1f5e1
    style FINAL_RETURN fill:#e1f5e1
    style ERR_SKEKKA fill:#ffe1e1
    style ERR_JIMU_BLANK fill:#ffe1e1
    style ERR_JIMU_CHANGE fill:#ffe1e1
    style ERR_SHITEI fill:#ffe1e1
    style ERR_TELNO_KIND fill:#ffe1e1
    style ERR_BLNK fill:#ffe1e1
    style ERR_SHITEI_AMT fill:#ffe1e1
    style ERR_DOJI fill:#ffe1e1
    style ERR_MASTA fill:#ffe1e1
    style ERR_JISHA fill:#ffe1e1
    style ERR_DUP fill:#ffe1e1
    style ERR_MA fill:#ffe1e1
    style WARN_MASTA fill:#fff4e1
    style VDSL_MSG fill:#fff4e1
    style REP_ERR fill:#ffe1e1
```

**CRITICAL — Constant Resolution:**
When the code branches on a constant, here are the resolved values used in this method:

| Constant | Value | Business Meaning |
|----------|-------|------------------|
| `JIMU_COMMISION_SHITEI` | `"04"` | Commission fee type "Designated Amount" |
| `JMTE_SKBT_CD_BLNK` | `""` | Empty/blank commission fee type |
| `JMTE_SKBT_CD_SHITEIAMNT` | `"3"` | FOMA commission fee type "Designated Amount" |
| `TELNO_KIND_NEW` | `"1"` | New number selection |
| `TELNO_KIND_BMP` | `"2"` | FOMA/ported number selection |
| `TAB_ERROR_ID` | `"error"` | Tab display state identifier for highlighting |
| `MSKM_KIND_MANSION` | `"2"` | Mansion building type |
| `MANSION_KAISEN_HSK_CD_VDSL` | `"3"` | VDSL connection method |
| `KOJIN_HOJIN_TLN_TAI_CD_HOJIN` | `"2"` | Individual/corporate phone category: Corporate |
| `UCWK_STAT_SHIYO_CHU` | `"100"` | Service detail work status: In Use |
| `TEL_ONE` | `"1"` | Telephone service type: Telephone 1 |
| `KKSV0102` | `"KKSV0102"` | Use case ID for service contract mapping |
| `FUNC_CD_1` | `"1"` | Function code for service setup (setter) |
| `FUNC_CD_2` | `"2"` | Function code for service retrieval (getter) |
| `CD01659_OK` | `"1"` | Same-address transfer simplicity check: OK |
| `CD01659_NG` | `"2"` | Same-address transfer simplicity check: NG |
| `CD01659_JUDGE_FAIL` | `"3"` | Same-address transfer simplicity check: Judge failed |
| `CD00720_BMP_USE_PLC_CD_REMOVAL` | `"2"` | FOMA use PLC code: Removal |
| `CD00138_EOHTL_PACK_3` | `"W00000007"` | Optional package: eo+HT+Pack 3 |
| `CD00138_EOHTL_PACK_7` | `"W00000008"` | Optional package: eo+HT+Pack 7 |
| `CD00138_ANSN_TEL_PACK` | `"W00000023"` | Optional package: Ansari Telephone Pack |
| `AD_MAN_INPUT_YES` | `"1"` | Address manual input: Yes |
| `SCREEN_ID_KKW00125` | `"KKW00125"` | Screen ID for preliminary registration (eo Optical Telephone 1) |
| `MSKM_INFO_KEY_NAME` | `"MSKM_INFO"` | Session key for service contract information |
| `KKSV008106CC` | `"KKSV008106CC"` | Service contract detail map key |
| `SVC_MSKM_INFO_TEL_INDEX` | `1` | Service contract info list index for Telephone 1 |
| `KKW00125_ERR_INFO` | `5` | Error info array index for KKW00125 screen |
| `CMN_JOI_ERR_INFO` | `0` | Common join error info array index |
