# Business Logic — JKKEmailInfoAddCfmCC.mainProc() [588 LOC]

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

## 1. Role

### JKKEmailInfoAddCfmCC.mainProc()

This method orchestrates the end-to-end registration and activation flow for an **E-Mail Information (Eメール情報) add/confirm** screen in the K-Opticom customer base system (eo顧客基幹システム). It handles two distinct business scenarios: **new contracts** (新規契約), where a customer signs up for email service as part of a fiber-optic broadband package, and **existing customer modifications** (既存顧客対応), where a current subscriber adds or updates email-related options (mailbox capacity, virus check, aging/POP ID registration). The method implements a **routing/dispatch pattern** by branching on service contract status (`svcKeiStat`): it detects whether the customer is in a newly confirmed state (`isShosazumi`), an already-subscribed state (`isTeiketsuzumi`), or an active provision state (`isTeikyo`), and dispatches to the appropriate sequence of service component (SC) calls. Its role in the larger system is as the **central business coordination component** for the `KKSV000201` screen, bridging the UI layer with multiple downstream SCs (Service Components) for agreement, registration, subscription, and activation, and finally issuing SOD (Service Order Data) and instruction (指示書) documents when real-time application (即日適用) is enabled.

The method supports two functional codes via `funcCd`: `1` (regular registration/addition - 追加) and `2` (check/edit mode - チェック/修正). In check mode (`funcCd = "2"`), registration SC calls are skipped to allow validation without side effects. It iterates over a list of email entries (`JKKEmailInfoAddCfmCCList`), processing each email address with its associated mailbox capacity and virus check co-optional configuration, routing through a state-dependent service call chain that ultimately registers progress (進捗登録) and issues SOD documents for immediate-apply scenarios.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["mainProc params"])
    END_NODE(["Return 0"])

    START --> INIT["Initialize variables: resultHash, statusCode"]
    INIT --> CALL_EKK0081["callEKK0081A010SC - Service Contract Agreement"]
    CALL_EKK0081 --> CHECK_STATUS{"statusCode != 0"}
    CHECK_STATUS -->|Yes| RETURN_CODE["Return statusCode"]
    CHECK_STATUS -->|No| SET_UPD_DT["setSvKeiExUpdDtm for EKK0081A010"]
    SET_UPD_DT --> GET_SVC_STAT["Get svcKeiStat from resultHash"]
    GET_SVC_STAT --> CHECK_PREP{"isShosazumi svcKeiStat"}

    CHECK_PREP -->|No New Contract| NEW_SKIP["Skip: data already set by analyzeRequestParam"]
    CHECK_PREP -->|Yes Existing| CHECK_FUNC_CD{"funcCd != 2"}
    NEW_SKIP --> GET_EMAIL_LIST["Get JKKEmailInfoAddCfmCCList"]
    CHECK_FUNC_CD -->|Yes Check Mode| SKIP_APPL["Skip application content approval"]
    CHECK_FUNC_CD -->|No Regular Mode| CALL_EKK0011["callEKK0011D020SC - Application Approval"]

    CALL_EKK0011 --> CHECK_ERR_0011{"statusCode != 0"}
    CHECK_ERR_0011 -->|Yes| RETURN_CODE
    CHECK_ERR_0011 -->|No| SET_MSKM["Set MSKM_NO MSKMSHO_NO MSKM_YMD etc"]
    SET_MSKM --> GET_EMAIL_LIST

    SKIP_APPL --> GET_EMAIL_LIST
    GET_EMAIL_LIST --> LOOP_START["For each email entry in list"]

    LOOP_START --> PROCESS_ENTRY["Set wK_INDEX get entry"]
    PROCESS_ENTRY --> EXTRACT["Extract virusChk useStaYmd addCapa mlad popId"]
    EXTRACT --> CHECK_NEW_0011{"funcCd != 2 and i == 0"}

    CHECK_NEW_0011 -->|Yes| CHECK_NEW_IS_SHO{"isShosazumi svcKeiStat"}
    CHECK_NEW_IS_SHO -->|Yes| SET_MSKM_DTL1["Set mskm_dtl_no from EKK0011D020 result"]
    CHECK_NEW_IS_SHO -->|No| SET_MSKM_DTL2["Set mskm_dtl_no from EKK0081A010 result"]
    SET_MSKM_DTL1 --> SET_EKK0021["Set EKK0021D010 resultHash with mskm_dtl_no"]
    SET_MSKM_DTL2 --> SET_EKK0021
    SET_EKK0021 --> CALL_EKK0361D010

    CHECK_NEW_0011 -->|No| CALL_EKK0361D010
    CALL_EKK0361D010["callEKK0361D010SC - Option ISP Registration"] --> CHECK_ERR_0361{"statusCode != 0"}
    CHECK_ERR_0361 -->|Yes| RETURN_CODE
    CHECK_ERR_0361 -->|No| CHECK_FUNC_SKIP{"funcCd == 2"}
    CHECK_FUNC_SKIP -->|Yes Check Mode| CONTINUE["continue to next iteration"]
    CHECK_FUNC_SKIP -->|No Regular Mode| GET_OP_SVC["Get op_svc_kei_stat"]

    GET_OP_SVC --> SET_UPD_0361["setSvKeiExUpdDtm for EKK0361D010"]
    SET_UPD_0361 --> CHECK_FAMILY["Check isFamilyPack"]
    CHECK_FAMILY --> SET_VC_SBOP["If family pack: set VC_SBOP_SVC_KEI_NO"]
    SET_VC_SBOP --> CHECK_ADD_CAPA{"addCapa > 0"}

    CHECK_ADD_CAPA -->|Yes| CALL_MB_CAPA["callEKK0411D010SC - Sub-Service Reg (Mailbox Capacity)"]
    CALL_MB_CAPA --> SET_UPD_MB_CAPA["setSvKeiExUpdDtm for EKK0411D01002"]
    SET_UPD_MB_CAPA --> CHECK_VIRUS_NO_FAMILY{"virusChk == Virus-ON and not family"}

    CHECK_ADD_CAPA -->|No| CHECK_VIRUS_NO_FAMILY
    CHECK_VIRUS_NO_FAMILY -->|Yes| CALL_VIRUS_REG["callEKK0411D010SC - Sub-Service Reg (Virus Check)"]
    CALL_VIRUS_REG --> SET_UPD_VIRUS_REG["setSvKeiExUpdDtm for EKK0411D01003"]
    SET_UPD_VIRUS_REG --> CHECK_TEIKETZ

    CHECK_TEIKETZ["isTeiketsuzumi svcKeiStat"] -->|Yes| CALL_TEIKETZ["callEKK0361C030SC - Subscription Confirmation"]
    CALL_TEIKETZ --> SET_UPD_TEIKETZ["setSvKeiExUpdDtm + setSodInfo"]
    SET_UPD_TEIKETZ --> GET_MLAD_POPID["Get mlad popId from resultHash"]
    GET_MLAD_POPID --> CALL_OPTINM["setOptinm - Opt-in Email"]
    CALL_OPTINM --> CHECK_TEK_CAPA{"addCapa > 0"}

    CHECK_TEK_CAPA -->|Yes| CALL_TEK_CAPA_SC["callEKK0411C040SC - Sub-Service Conf (Mailbox Capa)"]
    CALL_TEK_CAPA_SC --> SET_UPD_TEK_CAPA["setSvKeiExUpdDtm + setSodInfo for capa"]
    SET_UPD_TEK_CAPA --> CHECK_TEK_VIRUS{"virusChk == Virus-ON"}

    CHECK_TEK_CAPA -->|No| CHECK_TEK_VIRUS
    CHECK_TEK_VIRUS -->|Yes| CALL_TEK_VIRUS_SC["callEKK0411C040SC - Sub-Service Conf (Virus Check)"]
    CALL_TEK_VIRUS_SC --> SET_UPD_TEK_VIRUS["setSvKeiExUpdDtm + setSodInfo for virus"]
    SET_UPD_TEK_VIRUS --> CHECK_TEIKYO

    CHECK_TEIKYO["isTeikyo svcKeiStat"] -->|Yes| CALL_TEIKYO_SC["callEKK0361C040SC - Option ISP Start"]
    CALL_TEIKYO_SC --> SET_UPD_TEIKYO["setSvKeiExUpdDtm + setSodInfo"]
    SET_UPD_TEIKYO --> CHECK_TEIKYO_CAPA{"addCapa > 0"}

    CHECK_TEIKYO_CAPA -->|Yes| CALL_TEK_START_CAPA["callEKK0411C050SC - Sub-Service Start (Mailbox Capa)"]
    CALL_TEK_START_CAPA --> SET_UPD_TEK_START_CAPA["setSvKeiExUpdDtm + setSodInfo for capa"]
    SET_UPD_TEK_START_CAPA --> CHECK_TEK_START_VIRUS{"virusChk == Virus-ON"}

    CHECK_TEIKYO_CAPA -->|No| CHECK_TEK_START_VIRUS
    CHECK_TEK_START_VIRUS -->|Yes| CALL_TEK_START_VIRUS["callEKK0411C050SC - Sub-Service Start (Virus Check)"]
    CALL_TEK_START_VIRUS --> SET_UPD_TEK_START_VIRUS["setSvKeiExUpdDtm + setSodInfo for virus"]
    SET_UPD_TEK_START_VIRUS --> GET_EKK040_HASH
    CHECK_TEK_START_VIRUS -->|No| GET_EKK040_HASH

    GET_EKK040_HASH["Get op_svc_kei_stat from EKK0361C040"] --> CHECK_SVC_SSZ{"isShosazumi svcKeiStat else-if"}

    CHECK_SVC_SSZ -->|Yes| CALL_EKK0361C010["callEKK0361C010SC - Option ISP Confirmation"]
    CALL_EKK0361C010 --> SET_UPD_0361C010["setSvKeiExUpdDtm + setSodInfo"]
    SET_UPD_0361C010 --> GET_MLAD_SSZ["Get mlad from resultHash"]
    GET_MLAD_SSZ --> CALL_OPTINM_SSZ["setOptinm"]
    CALL_OPTINM_SSZ --> CHECK_SSZ_CAPA{"addCapa > 0"}

    CHECK_SSZ_CAPA -->|Yes| CALL_SSZ_CAPA_SC["callEKK0411C020SC - Sub-Service Conf (Mailbox Capa)"]
    CALL_SSZ_CAPA_SC --> SET_UPD_SSZ_CAPA["setSvKeiExUpdDtm + setSodInfo"]
    SET_UPD_SSZ_CAPA --> CHECK_SSZ_VIRUS{"virusChk == Virus-ON"}

    CHECK_SSZ_CAPA -->|No| CHECK_SSZ_VIRUS
    CHECK_SSZ_VIRUS -->|Yes| CALL_SSZ_VIRUS_SC["callEKK0411C020SC - Sub-Service Conf (Virus Check)"]
    CALL_SSZ_VIRUS_SC --> SET_UPD_SSZ_VIRUS["setSvKeiExUpdDtm + setSodInfo"]
    SET_UPD_SSZ_VIRUS --> GET_EKK0361_010_HASH

    CHECK_SSZ_VIRUS -->|No| GET_EKK0361_010_HASH
    GET_EKK0361_010_HASH["Get op_svc_kei_stat from EKK0361C010"] --> CHECK_AGING_SVC{"isShosazumi svcKeiStat"}

    CHECK_AGING_SVC -->|Yes| CHECK_AGING_MLAD{"mlad not empty"}
    CHECK_AGING_MLAD -->|Yes| SET_MLAD_DOM["setMladDomein getMaildomain"]
    SET_MLAD_DOM --> CALL_AGING_POPID1["callEZM0111D010SC - Aging POPID"]
    CALL_AGING_POPID1 --> CALL_AGING_MLAD1["callEZM0111D010SC - Aging Mail Address"]
    CALL_AGING_MLAD1 --> CALL_EKK0021C060_CHECK

    CHECK_AGING_MLAD -->|No| CALL_EKK0361A010_1["callEKK0361A010SC - Option ISP Agreement"]
    CALL_EKK0361A010_1 --> CALL_AGING_POPID1

    CHECK_AGING_SVC -->|No| CALL_PROGRESS1
    CALL_PROGRESS1["callEKK1091D010SC - Progress Registration"] --> CHECK_PRG_UNYO{"unyoYmd == strymd"}

    CHECK_PRG_UNYO -->|Yes| SET_PRG_END["Set PRG_STAT_OPSETEND"]
    CHECK_PRG_UNYO -->|No| SET_PRG_PROC["Set PRG_STAT_OPSINSEI"]
    SET_PRG_END --> CHECK_ODR_SSZ
    SET_PRG_PROC --> CHECK_ODR_SSZ

    CHECK_ODR_SSZ["isShosazumi svcKeiStat"] -->|Yes| CHECK_FIRST{"i == 0"}

    CHECK_FIRST -->|Yes| CALL_EKK0021C060_1["callEKK0021C060SC - Confirmation Post-processing"]
    CALL_EKK0021C060_1 --> SET_UPD_0021C060["Set EX_MSKM_UPD_DTM"]
    SET_UPD_0021C060 --> CHECK_SOKUJI{"isSokuji"}

    CHECK_SOKUJI -->|Yes| CREATE_SOD["Create SOD maps hakkoSOD addSjisho"]
    CREATE_SOD --> END_LOOP
    CHECK_SOKUJI -->|No| END_LOOP["End iteration"]
    CHECK_FIRST -->|No| END_LOOP
    CHECK_ODR_SSZ -->|No| END_LOOP
    END_LOOP --> RETURN_ZERO["Return 0"]
    RETURN_ZERO --> END_NODE
```

### Constant Resolution Key

| Constant | Actual Value | Business Meaning |
|----------|-------------|------------------|
| `FUNC_CODE` | `"func_code"` | Feature code field name from requestParam |
| `SVC_KEI_STAT_SSZ` | `"020"` | Confirmation completed (照会済) |
| `SVC_KEI_STAT_TKZ` | `"030"` | Subscription completed (締結済) |
| `SVC_KEI_STAT_TKC` | `"100"` | Service in provision (サービス提供中) |
| `VIRUS_CHK_ON` | `"有"` | Virus check enabled (有) |
| `SBOP_SVC_CD_MAILCAPA` | `"D02"` | Sub-service: Mailbox capacity (メールボックス容量) |
| `SBOP_SVC_CD_VIRUSCHK` | `"D03"` | Sub-service: Virus check (ウイルスチェック) |
| `AGING_SBT_CD_POPID` | `"007"` | Aging target type: POPID |
| `AGING_SBT_CD_MLAD` | `"009"` | Aging target type: Mail Address (メールアドレス) |
| `PRG_STAT_OPSINSEI` | `"5101"` | Progress status: Application in process (申請中) |
| `PRG_STAT_OPSETEND` | `"5102"` | Progress status: Option setting completed (設定完了) |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `handle` | `SessionHandle` | Session handle containing database session and transaction context; used for all service component invocations and data access |
| 2 | `param` | `IRequestParameterReadWrite` | Request parameter object carrying model group data and control map; used to read input fields, set intermediate values (e.g., `sodTrgtData`), and return results |
| 3 | `requestParam` | `HashMap<String, Object>` | Business data carrier holding screen input data and request parameters; contains the email info list (`JKKEmailInfoAddCfmCCList`), operational date (`unyo_ymd`), service contract number, order type code, family pack flag, and intermediate results populated by SC calls |
| 4 | `fixedText` | `String` | User-defined arbitrary text string; passed from the screen but not actively used within `mainProc` (reserved for future extensibility) |

**Instance fields read by this method:**

| Field | Type | Business Description |
|-------|------|---------------------|
| `wK_INDEX` | `int` | Processing index for current email entry iteration; set to loop counter `i` for contextual processing |

## 4. CRUD Operations / Called Services

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `JKKEmailInfoAddCfmCC.callEKK0081A010SC` | EKK0081A010SC | KK_T_SVC_KEI (service contract table) | Service Contract Agreement - retrieves current service contract status (`svcKeiStat`) to determine customer lifecycle state |
| C | `JKKEmailInfoAddCfmCC.callEKK0011D020SC` | EKK0011D020SC | KK_T_MSKM (application content table) | Application Content Approval - registers approval record for new contracts, returns `mskm_no` |
| C | `JKKEmailInfoAddCfmCC.callEKK0361D010SC` | EKK0361D010SC | KK_T_OP_SVC_KEI (option service contract table) | Option Service (ISP) Registration - creates new option service contract record for ISP |
| C | `JKKEmailInfoAddCfmCC.callEKK0411D010SC` | EKK0411D010SC | KK_T_SBOP_SVC_KEI (sub-option service contract table) | Sub-Service (ISP) Registration - registers mailbox capacity or virus check sub-option (called twice: D02/D03) |
| R | `JKKEmailInfoAddCfmCC.callEKK0361C030SC` | EKK0361C030SC | KK_T_OP_SVC_KEI, KK_T_MLAD (mail address table) | Subscription Confirmation (締結照会) - confirms and links subscription; returns `mlad` (mail address) and `pop_id` |
| C | `JKKEmailInfoAddCfmCC.callEKK0411C040SC` | EKK0411C040SC | KK_T_SBOP_SVC_KEI | Sub-Service Subscription Confirmation - links mailbox capacity or virus check sub-service to the option service |
| R | `JKKEmailInfoAddCfmCC.callEKK0361C040SC` | EKK0361C040SC | KK_T_OP_SVC_KEI | Option Service Start (開始) - activates the option service contract, sets status to provision |
| C | `JKKEmailInfoAddCfmCC.callEKK0411C050SC` | EKK0411C050SC | KK_T_SBOP_SVC_KEI | Sub-Service Start - activates mailbox capacity or virus check sub-service for provision |
| R | `JKKEmailInfoAddCfmCC.callEKK0361C010SC` | EKK0361C010SC | KK_T_OP_SVC_KEI, KK_T_MLAD | Option Service (ISP) Confirmation (照会) - queries existing option service data for existing customers, returns `mlad` |
| C | `JKKEmailInfoAddCfmCC.callEKK0411C020SC` | EKK0411C020SC | KK_T_SBOP_SVC_KEI | Sub-Service Confirmation - registers mailbox capacity or virus check for existing customers |
| R | `JKKEmailInfoAddCfmCC.callEKK0361A010SC` | EKK0361A010SC | KK_T_OP_SVC_KEI | Option Service (ISP) Agreement (同意) - creates agreement record when no mail address yet |
| C | `JKKEmailInfoAddCfmCC.callEZM0111D010SC` | EZM0111D010SC | - | Aging Target Registration - registers POPID and mail address for email aging (POP3 ID management) |
| C | `JKKEmailInfoAddCfmCC.callEKK1091D010SC` | EKK1091D010SC | KK_T_PRG_STAT (progress status table) | Progress Registration - updates processing status (application in process / option setting completed) |
| R | `JKKEmailInfoAddCfmCC.callEKK0021C060SC` | EKK0021C060SC | KK_T_MSKM | Application Confirmation and Post-processing (申請照会・後続業務依頼) - confirms application details for existing customers |
| C | `JKKHakkoSODCC.hakkoSOD` | SOD Issue CBS | KK_T_SOD (service order data table) | SOD (Service Order Data) Issuance - issues service order data for real-time apply scenarios |
| C | `JKKAddSjishoCC.addSjisho` | Instruction Issue CBS | KK_T_SJISHO (instruction table) | Instruction (指示書) Issue - generates service installation/configuration instruction documents |

**Helper methods (internal, not CRUD):**

| Method | Type | Business Description |
|--------|------|---------------------|
| `callEKK0411D010SC` (overloaded) | SET | Sub-Service Registration - registers mailbox capacity or virus check sub-option with template overrides |
| `callEKK0411C040SC` (overloaded) | SET | Sub-Service Subscription Confirmation - confirms subscription for capacity/virus with family pack flag |
| `callEKK0411C050SC` (overloaded) | SET | Sub-Service Start - starts provision for capacity/virus sub-services |
| `callEKK0411C020SC` (overloaded) | SET | Sub-Service Confirmation - confirms registration for existing customers |
| `setSvKeiExUpdDtm` | SET | Updates exception service contract update timestamp in resultHash |
| `setSodInfo` | SET | Sets SOD (Service Order Data) generation metadata (service number, generated datetime) |
| `convPopid` | R | Converts POPID format for aging registration |
| `getMaildomain` | R | Extracts domain part from a mail address |
| `getStrymd` | R | Gets service start year/month/day (YYYYMMDD) |
| `getUpdDtm` | R | Gets update timestamp from resultHash |
| `isNull` | R | Null-check utility for string values |
| `isShosazumi` | R | Checks if `svcKeiStat` indicates confirmation-completed (照会済) state = `"020"` |
| `isTeiketsuzumi` | R | Checks if `svcKeiStat` indicates subscription-completed (締結済) state = `"030"` |
| `isTeikyo` | R | Checks if `svcKeiStat` indicates service-in-provision (サービス提供中) state = `"100"` |
| `createSodMap` | C | Creates SOD data map from service contract and option service numbers |
| `createSijiMap` | C | Creates instruction document (指示書) data map from option service number |
| `setOptinm` | C | Opt-in email registration - handles optional opt-in email consent settings |

## 5. Dependency Trace

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

No screen/batch entry points found within 8 hops. Direct callers found: 1 methods.

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | `JKKEmailInfoAddCfmCC.execute()` | `execute()` -> `mainProc()` | `callEKK0081A010SC [R] KK_T_SVC_KEI`, `callEKK0011D020SC [C] KK_T_MSKM`, `callEKK0361D010SC [C] KK_T_OP_SVC_KEI`, `callEKK0411D010SC [C] KK_T_SBOP_SVC_KEI`, `callEKK0361C030SC [R] KK_T_MLAD`, `callEKK0411C040SC [C] KK_T_SBOP_SVC_KEI`, `callEKK0361C040SC [R] KK_T_OP_SVC_KEI`, `callEKK0411C050SC [C] KK_T_SBOP_SVC_KEI`, `callEKK0361C010SC [R] KK_T_OP_SVC_KEI`, `callEKK0411C020SC [C] KK_T_SBOP_SVC_KEI`, `callEKK0361A010SC [R] KK_T_OP_SVC_KEI`, `callEZM0111D010SC [C] -`, `callEKK1091D010SC [C] KK_T_PRG_STAT`, `callEKK0021C060SC [R] KK_T_MSKM`, `hakkoSOD [C] KK_T_SOD`, `addSjisho [C] KK_T_SJISHO` |

## 6. Per-Branch Detail Blocks

### Block 1 — Initial setup and Service Contract Agreement (L519–L550)

> Retrieves the feature code and performs the initial service contract agreement SC call to determine customer status.

| # | Type | Code |
|---|------|------|
| 1 | SET | `funcCd = (String)requestParam.get(FUNC_CODE)` // Extract feature code [-> FUNC_CODE="func_code"] |
| 2 | SET | `jKKEmailInfoAddCfmCCList = null` // Email info list |
| 3 | SET | `resultHash = new HashMap<>()` // Initialize result hash |
| 4 | SET | `eKK0081A010SCHash = null` // Option service hash placeholder |
| 5 | SET | `statusCode = 0` // Initialize return code |
| 6 | SET | `svcKeiStat = null` // Service contract status |
| 7 | EXEC | `resultHash = new HashMap<String, Object>()` // Reset result hash |
| 8 | CALL | `callEKK0081A010SC(param, handle, requestParam, resultHash)` // Service Contract Agreement |
| 9 | IF | `statusCode != 0` [L540] |

### Block 1.1 — Early return on EKK0081A010 failure (L540–L542)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return statusCode` // Exit with error code |

### Block 1.2 — Set update timestamp (L544–L545)

> (サービス契約同意照会) Set service contract exception update datetime.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `setSvKeiExUpdDtm(requestParam, resultHash, TEMPLATE_ID_EKK0081A010)` [-> TEMPLATE_ID_EKK0081A010="EKK0081A010"] |

### Block 1.3 — Extract service contract status (L547–L549)

> (サービス契約ステータスの取得) Get service contract status from SC result.

| # | Type | Code |
|---|------|------|
| 1 | SET | `eKK0081A010SCHash = (HashMap)resultHash.get(TEMPLATE_ID_EKK0081A010)` |
| 2 | SET | `svcKeiStat = (String)eKK0081A010SCHash.get(EKK0081A010CBSMsg1List.SVC_KEI_STAT)` |

### Block 2 — New Contract vs Existing Customer Branch (L552–L579)

> (ST2-2012-0000185 / ST2-2012-0000482) Determines if this is a new contract or existing customer based on `isShosazumi(svcKeiStat)`.

| # | Type | Code |
|---|------|------|
| 1 | IF | `!isShosazumi(svcKeiStat)` [isShosazumi checks SVC_KEI_STAT_SSZ="020"] (L552) |

#### Block 2.1 — New Contract: Skip (L553–L554)

> (新規契約時、analyzeRequestParamメソッドで上がってきたデータがセットされている) New contract: data already set by `analyzeRequestParam`, nothing to do.

| # | Type | Code |
|---|------|------|
| 1 | SET | // Empty - no action needed |

#### Block 2.2 — Existing Customer: Check Mode Branch (L558–L579)

> (既存顧客) For existing customers, check if this is check mode (`funcCd != "2"`).

| # | Type | Code |
|---|------|------|
| 1 | IF | `!funcCd.equals("2")` [funcCd != "2" = regular mode] (L560) |

##### Block 2.2.1 — Application Content Approval (L562–L578)

> (申請内容承認申請) Submit application content approval for existing customers in regular mode.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `callEKK0011D020SC(param, handle, requestParam, resultHash)` // Application Content Approval |
| 2 | IF | `statusCode != 0` [L565] |
| 3 | SET | `requestParam.put(MSKM_NO, resultHash.get(TEMPLATE_ID_EKK0011D020).get(EKK0011D020CBSMsg.MSKM_NO).toString())` [-> MSKM_NO="mskm_no"] |
| 4 | SET | `requestParam.put(MSKMSHO_NO, null)` [-> MSKMSHO_NO="mskmsho_no"] // Reset |
| 5 | SET | `requestParam.put(MSKM_YMD, resultHash.get(TEMPLATE_ID_EKK0011D020).get(EKK0011D020CBSMsg.MSKM_YMD).toString())` [-> MSKM_YMD="mskm_ymd"] |
| 6 | SET | `requestParam.put(EX_MSKM_UPD_DTM, getUpdDtm(resultHash, TEMPLATE_ID_EKK0011D020))` [-> EX_MSKM_UPD_DTM="ex_mskm_upd_dtm"] |
| 7 | SET | `requestParam.put(IDO_DTM, JKKBpCommon.getSysDateTimeStamp())` [-> IDO_DTM="ido_dtm"] |

### Block 3 — Email List Iteration Start (L582–L595)

> (Eメール情報登録確認リストだけ繰り返し) Loop over each email entry in the confirmation list.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `jKKEmailInfoAddCfmCCList = (ArrayList)requestParam.get(JKKEMAILINFOADDCFMCCLIST)` [-> JKKEMAILINFOADDCFMCCLIST="JKKEmailInfoAddCfmCCList"] |
| 2 | SET | `unyoYmd = (String)requestParam.get(UNYO_YMD)` [-> UNYO_YMD="unyo_ymd"] |
| 3 | SET | `mskm_dtl_no = null` // 2012-04-18 New feature |

### Block 4 — For Loop Entry Processing (L596–L617)

> For each email entry, initialize and extract fields.

| # | Type | Code |
|---|------|------|
| 1 | SET | `wK_INDEX = i` // Current index |
| 2 | SET | `jKKEmailInfoAddCfmCC = jKKEmailInfoAddCfmCCList.get(i)` // Get current entry |
| 3 | SET | `virusChk = jKKEmailInfoAddCfmCC.get(VIRUS_CHK).toString()` [-> VIRUS_CHK="virus_chk"] |
| 4 | SET | `useStaYmd = getStrymd()` // Service start year/month/day |
| 5 | SET | `isSokuji = unyoYmd.equals(useStaYmd)` // Real-time apply flag |
| 6 | SET | `mlBoxCapa = (String)jKKEmailInfoAddCfmCC.get(ML_BOX_CAPA)` [-> ML_BOX_CAPA="ml_box_capa"] |
| 7 | SET | `shkCapa = (String)requestParam.get(SHK_CAPA)` [-> SHK_CAPA="shk_capa"] |
| 8 | SET | `addCapa = Integer.parseInt(mlBoxCapa) - Integer.parseInt(shkCapa)` // Added capacity |

### Block 5 — First Entry Processing for Existing Customers (L620–L670)

> ST2-2012-0000457 / ST2-2012-0000482 | For i==0 in existing customer scenarios, set `mskm_dtl_no` from the correct source.

| # | Type | Code |
|---|------|------|
| 1 | IF | `!funcCd.equals("2") && i == 0` (L620) |

#### Block 5.1 — isShosazumi branch (L624–L628)

> (新規契約以外、かつ、1番目の場合、申請明細登録マップに申請内容承認申請で作成した申請明細をセットする) For non-new contracts and first entry, get `mskm_dtl_no` from application approval result.

| # | Type | Code |
|---|------|------|
| 1 | SET | `ekk0011d020Msg = (HashMap)resultHash.get(TEMPLATE_ID_EKK0011D020)` |
| 2 | SET | `mskm_dtl_no = (String)ekk0011d020Msg.get(EKK0011D020CBSMsg1List.MSKM_DTL_NO)` |

#### Block 5.2 — else branch: get from EKK0081A010 (L630–L637)

> Get `mskm_dtl_no` from the service contract agreement result (the old EKK0021D010 call was commented out).

| # | Type | Code |
|---|------|------|
| 1 | SET | `mskm_dtl_no = (String)eKK0081A010SCHash.get(EKK0081A010CBSMsg1List.MSKM_DTL_NO)` |
| 2 | SET | `ekk0021d010Msg = new HashMap<>()` |
| 3 | EXEC | `ekk0021d010Msg.put(EKK0021D010CBSMsg.MSKM_DTL_NO, mskm_dtl_no)` |
| 4 | SET | `resultHash.put(TEMPLATE_ID_EKK0021D010, ekk0021d010Msg)` [-> TEMPLATE_ID_EKK0021D010="EKK0021D010"] |

#### Block 5.3 — Set EKK0021D010 resultHash (L639–L641)

> (申請明細登録) Prepare EKK0021D010 result hash with the determined mskm_dtl_no.

| # | Type | Code |
|---|------|------|
| 1 | SET | `ekk0021d010Msg = new HashMap<>()` |
| 2 | EXEC | `ekk0021d010Msg.put(EKK0021D010CBSMsg.MSKM_DTL_NO, mskm_dtl_no)` |
| 3 | SET | `resultHash.put(TEMPLATE_ID_EKK0021D010, ekk0021d010Msg)` |

### Block 6 — Option Service (ISP) Registration (L644–L655)

> (オプションサービス契約＜ISP＞登録) Register the option service contract for ISP for every email entry.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `callEKK0361D010SC(param, handle, requestParam, resultHash)` // Option ISP Registration |
| 2 | IF | `statusCode != 0` [L648] |
| 3 | IF | `funcCd.equals("2")` [check mode check] (L653) |

#### Block 6.1 — Check mode early continue (L654–L656)

> (チェックモード時の次の処理へ) In check mode, skip remaining processing for this entry.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `continue` |

### Block 7 — Post-Registration Processing (L659–L671)

> (ST2-2012-0000482) Get option service contract status and set update datetime.

| # | Type | Code |
|---|------|------|
| 1 | SET | `ekk0361d010Hash = (Map)resultHash.get(TEMPLATE_ID_EKK0361D010)` [-> TEMPLATE_ID_EKK0361D010="EKK0361D010"] |
| 2 | SET | `op_svc_kei_stat = (String)ekk0361d010Hash.get(EKK0361D010CBSMsg.OP_SVC_KEI_STAT)` |
| 3 | CALL | `setSvKeiExUpdDtm(requestParam, resultHash, TEMPLATE_ID_EKK0361D010)` |

### Block 8 — Family Pack Check (L674–L678)

> ST2-2012-0000379 | (ファミリーパック契約がある場合、登録したオプションのサブオプションを取得し、VC契約を探索) If family pack, retrieve sub-option service number for VC contract lookup.

| # | Type | Code |
|---|------|------|
| 1 | SET | `isFamilyPack = "1".equals((String)requestParam.get(FAMILY_PACK))` [-> FAMILY_PACK="family_pack"] |
| 2 | IF | `isFamilyPack` (L676) |
| 3 | SET | `requestParam.put(VC_SBOP_SVC_KEI_NO, ekk0361d010Map.get(EKK0361D010CBSMsg.SBOP_SVC_KEI_NO))` [-> VC_SBOP_SVC_KEI_NO="vc_sbop_svc_kei_no"] |

### Block 9 — Mailbox Capacity Sub-Service Registration (L680–L695)

> (追加容量 > 0の場合) When added capacity exceeds 0, register mailbox capacity sub-service.

| # | Type | Code |
|---|------|------|
| 1 | IF | `addCapa > 0` (L680) |
| 2 | SET | `requestParam.put(SBOP_SVC_CD, SBOP_SVC_CD_MAILCAPA)` [-> SBOP_SVC_CD="sbop_svc_cd", SBOP_SVC_CD_MAILCAPA="D02"] |
| 3 | CALL | `callEKK0411D010SC(param, handle, requestParam, resultHash, "PD0201", "D02", TEMPLATE_ID_EKK0411D01002)` |
| 4 | CALL | `setSvKeiExUpdDtm(requestParam, resultHash, TEMPLATE_ID_EKK0411D01002)` [-> TEMPLATE_ID_EKK0411D01002="EKK0411D01002"] |

### Block 10 — Virus Check Sub-Service Registration (L700–L717)

> (ST2-2012-0000379) ウイルスチェック契約有の場合 | If virus check is enabled and not family pack, register virus check sub-service.

| # | Type | Code |
|---|------|------|
| 1 | IF | `VIRUS_CHK_ON.equals(virusChk) && !isFamilyPack` [-> VIRUS_CHK_ON="有"] (L700) |
| 2 | SET | `requestParam.put(SBOP_SVC_CD, SBOP_SVC_CD_VIRUSCHK)` [-> SBOP_SVC_CD_VIRUSCHK="D03"] |
| 3 | CALL | `callEKK0411D010SC(param, handle, requestParam, resultHash, "PD0301", "D03", TEMPLATE_ID_EKK0411D01003)` |
| 4 | CALL | `setSvKeiExUpdDtm(requestParam, resultHash, TEMPLATE_ID_EKK0411D01003)` [-> TEMPLATE_ID_EKK0411D01003="EKK0411D01003"] |

### Block 11 — Subscription-Completed Path (L720–L812)

> (サービス契約ステータスが締結済の場合) If `isTeiketsuzumi(svcKeiStat)` (svcKeiStat == SVC_KEI_STAT_TKZ = "030").

| # | Type | Code |
|---|------|------|
| 1 | IF | `isTeiketsuzumi(svcKeiStat)` (L720) |
| 2 | CALL | `callEKK0361C030SC(param, handle, requestParam, resultHash)` // Subscription Confirmation |
| 3 | CALL | `setSvKeiExUpdDtm(requestParam, resultHash, TEMPLATE_ID_EKK0361C030)` [-> TEMPLATE_ID_EKK0361C030="EKK0361C030"] |
| 4 | CALL | `setSodInfo(requestParam, resultHash, SOD_OP_SVC_KEI_NO, ...)` [-> SOD_OP_SVC_KEI_NO="sod_op_svc_kei_no"] |
| 5 | CALL | `setSodInfo(requestParam, resultHash, SOD_OP_GENE_ADD_DTM, ...)` [-> SOD_OP_GENE_ADD_DTM="sod_op_gene_add_dtm"] |
| 6 | SET | `mlad = eKK0361C030Hash.get(EKK0361C030CBSMsg.MLAD).toString()` [-> MLAD="mlad_account"] |
| 7 | SET | `popId = (String)eKK0361C030Hash.get(EKK0361C030CBSMsg.POP_ID)` [-> POPID="popid"] |
| 8 | SET | `setPopId(popId)` |
| 9 | CALL | `setOptinm(param, handle, requestParam, resultHash, mlad)` (L738) |
| 10 | IF | `addCapa > 0` (L740) |
| 11 | SET | `requestParam.put(SBOP_SVC_CD, SBOP_SVC_CD_MAILCAPA)` |
| 12 | CALL | `callEKK0411C040SC(param, handle, requestParam, resultHash, TEMPLATE_ID_EKK0411D01002, TEMPLATE_ID_EKK0411C04002, false)` |
| 13 | CALL | `setSvKeiExUpdDtm(requestParam, resultHash, TEMPLATE_ID_EKK0411C04002)` |
| 14 | CALL | `setSodInfo(requestParam, resultHash, SOD_CAPA_SBOP_SVC_KEI_NO, ...)` |
| 15 | IF | `VIRUS_CHK_ON.equals(virusChk)` (L764) |
| 16 | SET | `requestParam.put(SBOP_SVC_CD, SBOP_SVC_CD_VIRUSCHK)` |
| 17 | CALL | `callEKK0411C040SC(param, handle, requestParam, resultHash, TEMPLATE_ID_EKK0411D01003, TEMPLATE_ID_EKK0411C04003, isFamilyPack)` |
| 18 | CALL | `setSvKeiExUpdDtm(requestParam, resultHash, TEMPLATE_ID_EKK0411C04003)` |
| 19 | CALL | `setSodInfo(requestParam, resultHash, SOD_VIRUS_SBOP_SVC_KEI_NO, ...)` |

#### Block 11.1 — Provision Path within Subscription (L785–L812)

> (サービス契約ステータスがサービス提供中の場合) If `isTeikyo(svcKeiStat)` (svcKeiStat == SVC_KEI_STAT_TKC = "100").

| # | Type | Code |
|---|------|------|
| 1 | IF | `isTeikyo(svcKeiStat)` (L785) |
| 2 | CALL | `callEKK0361C040SC(param, handle, requestParam, resultHash)` // Option ISP Start |
| 3 | CALL | `setSvKeiExUpdDtm(requestParam, resultHash, TEMPLATE_ID_EKK0361C040)` |
| 4 | CALL | `setSodInfo(requestParam, resultHash, SOD_OP_SVC_KEI_NO, TEMPLATE_ID_EKK0361C040, ...)` |
| 5 | IF | `addCapa > 0` (L802) |
| 6 | SET | `requestParam.put(SBOP_SVC_CD, SBOP_SVC_CD_MAILCAPA)` |
| 7 | CALL | `callEKK0411C050SC(param, handle, requestParam, resultHash, TEMPLATE_ID_EKK0411C04002, TEMPLATE_ID_EKK0411C05002, false)` |
| 8 | IF | `VIRUS_CHK_ON.equals(virusChk)` (L820) |
| 9 | SET | `requestParam.put(SBOP_SVC_CD, SBOP_SVC_CD_VIRUSCHK)` |
| 10 | CALL | `callEKK0411C050SC(param, handle, requestParam, resultHash, TEMPLATE_ID_EKK0411D01003, TEMPLATE_ID_EKK0411C05003, isFamilyPack)` |

### Block 12 — Confirmation-Completed Path (Option ISP Confirmation) (L825–L877)

> (サービス契約ステータスによる分岐 / サービス契約ステータスが照会済の場合) Alternative branch: `isShosazumi(svcKeiStat)` for confirmation-completed customers.

| # | Type | Code |
|---|------|------|
| 1 | IF | `isShosazumi(svcKeiStat)` (else-if, L828) |
| 2 | CALL | `callEKK0361C010SC(param, handle, requestParam, resultHash)` // Option ISP Confirmation |
| 3 | CALL | `setSvKeiExUpdDtm(requestParam, resultHash, TEMPLATE_ID_EKK0361C010)` |
| 4 | CALL | `setSodInfo(requestParam, resultHash, SOD_OP_SVC_KEI_NO, TEMPLATE_ID_EKK0361C010, ...)` |
| 5 | SET | `mlad = eKK0361C010Hash.get(EKK0361C010CBSMsg.MLAD).toString()` |
| 6 | CALL | `setOptinm(param, handle, requestParam, resultHash, mlad)` |
| 7 | IF | `addCapa > 0` (L847) |
| 8 | SET | `requestParam.put(SBOP_SVC_CD, SBOP_SVC_CD_MAILCAPA)` |
| 9 | CALL | `callEKK0411C020SC(param, handle, requestParam, resultHash, TEMPLATE_ID_EKK0411D01002, TEMPLATE_ID_EKK0411C02002, false)` |
| 10 | IF | `VIRUS_CHK_ON.equals(virusChk)` (L866) |
| 11 | SET | `requestParam.put(SBOP_SVC_CD, SBOP_SVC_CD_VIRUSCHK)` |
| 12 | CALL | `callEKK0411C020SC(param, handle, requestParam, resultHash, TEMPLATE_ID_EKK0411D01003, TEMPLATE_ID_EKK0411C02003, isFamilyPack)` |

### Block 13 — Aging Registration (L882–L916)

> (エイジング登録) Register aging targets: POPID and mail address for email POP3 management.

| # | Type | Code |
|---|------|------|
| 1 | IF | `isShosazumi(svcKeiStat)` (L882) |
| 2 | IF | `null != mlad && !"".equals(mlad)` (L884) |
| 3 | CALL | `setMladDomein(getMaildomain(mlad))` // Set domain from mail address |
| 4 | ELSE (L889) — mail address not available |
| 5 | CALL | `callEKK0361A010SC(param, handle, requestParam, resultHash)` // Option ISP Agreement |
| 6 | SET | `requestParam.put(AGING_SBT_CD, AGING_SBT_CD_POPID)` [-> AGING_SBT_CD="aging_sbt_cd", AGING_SBT_CD_POPID="007"] |
| 7 | SET | `requestParam.put(AGING_TG_VALUE, convPopid(mlad))` [-> AGING_TG_VALUE="aging_tg_value"] |
| 8 | CALL | `callEZM0111D010SC(param, handle, requestParam, resultHash)` // Aging POPID registration |
| 9 | SET | `requestParam.put(AGING_SBT_CD, AGING_SBT_CD_MLAD)` [-> AGING_SBT_CD_MLAD="009"] |
| 10 | SET | `requestParam.put(AGING_TG_VALUE, mlad)` |
| 11 | CALL | `callEZM0111D010SC(param, handle, requestParam, resultHash)` // Aging mail address registration |

### Block 14 — Progress Registration (L919–L939)

> (進捗登録) Register processing progress status based on whether operational date matches service start date.

| # | Type | Code |
|---|------|------|
| 1 | SET | `strymd = getStrymd()` // Service start year/month/day |
| 2 | SET | `unyoymd = requestParam.get(UNYO_YMD).toString()` |
| 3 | IF | `unyoymd.equals(strymd)` [IT1-2013-0001575:判断基準改为比较运营日与是否相同] (L928) |
| 4 | SET | `requestParam.put(PRG_STAT, PRG_STAT_OPSETEND)` [-> PRG_STAT="prg_stat", PRG_STAT_OPSETEND="5102"] |
| 5 | ELSE | `requestParam.put(PRG_STAT, PRG_STAT_OPSINSEI)` [-> PRG_STAT_OPSINSEI="5101"] |
| 6 | CALL | `callEKK1091D010SC(param, handle, requestParam, resultHash)` // Progress Registration |

### Block 15 — SOD and Instruction Issue (L943–L991)

> (オーダー発行はサービス契約ステータスが照会済以降) Issue SOD and instruction documents for confirmation-completed customers when real-time apply (即日適用) is active.

| # | Type | Code |
|---|------|------|
| 1 | IF | `isShosazumi(svcKeiStat)` (L948) |
| 2 | IF | `i == 0` [first entry only] (L951) |
| 3 | CALL | `callEKK0021C060SC(param, handle, requestParam, resultHash)` // Application Confirmation & Post-processing |
| 4 | SET | `requestParam.put(EX_MSKM_UPD_DTM, getUpdDtm(resultHash, TEMPLATE_ID_EKK0021C060))` |
| 5 | IF | `isSokuji` [== unyoYmd.equals(useStaYmd)] (L958) |
| 6 | SET | `sodTrgtData = new HashMap<>()` |
| 7 | SET | `trgtDataList = new ArrayList<>()` |
| 8 | EXEC | `sodTrgtData.put(JKKHakkoSODConstCC.TRGT_DATA_LIST, trgtDataList)` |
| 9 | SET | `opSvcKeiNo = requestParam.get(SOD_OP_SVC_KEI_NO)` |
| 10 | SET | `opGeneAddDtm = requestParam.get(SOD_OP_GENE_ADD_DTM)` |
| 11 | SET | `capaSbopSvcKeiNo = requestParam.get(SOD_CAPA_SBOP_SVC_KEI_NO)` |
| 12 | SET | `capaSbopGeneAddDtm = requestParam.get(SOD_CAPA_SBOP_GENE_ADD_DTM)` |
| 13 | SET | `virusSbopSvcKeiNo = requestParam.get(SOD_VIRUS_SBOP_SVC_KEI_NO)` |
| 14 | SET | `virusSbopGeneAddDtm = requestParam.get(SOD_VIRUS_SBOP_GENE_ADD_DTM)` |
| 15 | EXEC | `trgtDataList.add(createSodMap(requestParam, eKK0081A010SCHash, opSvcKeiNo, capaSbopSvcKeiNo, ...))` |
| 16 | IF | `!isNull(virusSbopSvcKeiNo) && !isNull(virusSbopGeneAddDtm)` |
| 17 | EXEC | `trgtDataList.add(createSodMap(requestParam, eKK0081A010SCHash, opSvcKeiNo, virusSbopSvcKeiNo, ...))` |
| 18 | SET | `sodTrgtData.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1)` |
| 19 | SET | `hakkoSODCC = new JKKHakkoSODCC()` |
| 20 | EXEC | `param.setData("sodTrgtData", sodTrgtData)` |
| 21 | CALL | `hakkoSODCC.hakkoSOD(handle, param, "sodTrgtData")` |
| 22 | SET | `addsjishocc = new JKKAddSjishoCC()` |
| 23 | EXEC | `param.setData("sijiTrgtData", createSijiMap(opSvcKeiNo))` |
| 24 | CALL | `addsjishocc.addSjisho(handle, param, "sijiTrgtData")` |

### Block 16 — Normal Return (L997–L998)

> (正常) Return success.

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

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `JKKEmailInfoAddCfmCC` | Class | E-Mail Information Add/Confirm CC - custom component for email info screen KKSV000201 |
| `svcKeiStat` | Field | Service contract status - internal state code of a service contract line item |
| `SVC_KEI_STAT_SSZ` | Constant | Confirmation completed (照会済) = "020" - option service has been confirmed but not yet subscribed |
| `SVC_KEI_STAT_TKZ` | Constant | Subscription completed (締結済) = "030" - option service has been confirmed and subscribed |
| `SVC_KEI_STAT_TKC` | Constant | Service in provision (サービス提供中) = "100" - option service is actively being provided |
| `isShosazumi` | Method | Checks if `svcKeiStat` equals SVC_KEI_STAT_SSZ ("020") |
| `isTeiketsuzumi` | Method | Checks if `svcKeiStat` equals SVC_KEI_STAT_TKZ ("030") |
| `isTeikyo` | Method | Checks if `svcKeiStat` equals SVC_KEI_STAT_TKC ("100") |
| `funcCd` | Field | Feature code from requestParam; "1" = regular mode, "2" = check/edit mode |
| `JKKEMAILINFOADDCFMCCLIST` | Constant | Key for the email info add/confirm list in requestParam; value = "JKKEmailInfoAddCfmCCList" |
| `mlad_account` | Field | Mail address (メールアドレス) - the customer's email address for the service |
| `popid` | Field | POP ID (Post Office Protocol ID) - email client authentication identifier |
| `virus_chk` | Field | Virus check flag - "有" (enabled) or "無" (disabled) |
| `ml_box_capa` | Field | Mailbox capacity (メールボックス容量) - email storage size in MB |
| `shk_capa` | Field | Initial capacity (初期容量) - baseline mailbox capacity |
| `addCapa` | Field | Added capacity (追加容量) = mlBoxCapa - shkCapa; when > 0 triggers mailbox capacity sub-service |
| `isSokuji` | Field | Real-time apply (即日適用) flag - true when operational date equals service start date |
| `SBOP_SVC_CD_MAILCAPA` | Constant | Sub-service code for mailbox capacity = "D02" |
| `SBOP_SVC_CD_VIRUSCHK` | Constant | Sub-service code for virus check = "D03" |
| `AGING_SBT_CD_POPID` | Constant | Aging target type code for POPID = "007" |
| `AGING_SBT_CD_MLAD` | Constant | Aging target type code for mail address = "009" |
| `PRG_STAT_OPSINSEI` | Constant | Progress status: application in process (申請中) = "5101" |
| `PRG_STAT_OPSETEND` | Constant | Progress status: option setting completed (設定完了) = "5102" |
| `SOD` | Acronym | Service Order Data (サービスオーダ) - order data issued to field operations for service activation/installation |
| `OP_SVC_KEI` | Acronym | Option Service Contract (オプションサービス契約) - a service contract for optional add-on services like ISP, mailbox, virus check |
| `SBOP_SVC_KEI` | Acronym | Sub-Option Service Contract (サブオプションサービス契約) - a sub-service linked to an option service contract |
| `ISP` | Business term | Internet Service Provider - underlying network connectivity service bundled with email |
| `Eメール` | Business term | E-Mail - the email service product offered as part of K-Opticom broadband packages |
| `照会` (Shoukai) | Business term | Confirmation/Inquiry - business step where service data is confirmed before activation |
| `締結` (Teiketsu) | Business term | Subscription/Execution - business step where confirmed service is formally subscribed |
| `開始` (Kaishi) | Business term | Start/Activation - business step where service begins actual provision |
| `即日適用` (Sokujitekiyou) | Business term | Real-time application - service becomes effective on the same operational date |
| `ファミリーパック` | Business term | Family Pack - bundled service for multiple users within a household |
| `指示書` (Shijisho) | Instruction Document | Physical or digital work instruction document issued to field technicians for service installation |
| `unyo_ymd` | Field | Operational date (運用年月日) - the date the operation is scheduled/processed (YYYYMMDD) |
| `use_sta_ymd` | Field | Service start date (利用開始日) - the date the service becomes effective (YYYYMMDD) |
| `optinm` | Acronym | Opt-in Email - optional email consent registration for marketing/promotional communications |
| `KKSV000201CC` | Constant | Screen process code for KKSV000201 (E-Mail Info Add Confirm) |
| `MSKM_NO` | Field | Application number (申請番号) - unique identifier for an application record |
| `MSKM_SBT_CD` | Field | Application type code (申請種類コード) - classifies the type of application |
| `ido_dtm` | Field | Displacement datetime (異動日時) - timestamp of service change |
| `ex_mskm_upd_dtm` | Field | Exception application update datetime (除外申請更新日時) - system control timestamp |
| `TEMPLATE_ID_*` | Pattern | Template identifier constant for SC call result hashing (e.g., "EKK0081A010") |