# Business Logic — JKKSvkeiShosaCC.runShosa() [455 LOC]

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

## 1. Role

### JKKSvkeiShosaCC.runShosa()

This method is the central **validation (shosa = inspection/check) dispatch engine** for all service contract operations in the K-Opticom ordering system. It iterates over batches of map-keyed data entries, executes a Service Component (SC) pipeline for each entry, then routes the SC result through a mapper's result-editing method based on the entry's mapKey. The mapKey acts as a business-type discriminator -- each value corresponds to a distinct telecom service type (e.g., FTTH registration, mobile contract, ISP option, equipment provision).

The method handles **five broad service categories**: (1) **Service Contract** (eo hikari network/TV/phone, ADSL, mobile), (2) **Service Contract Details** (eo hikari network/TV/phone breakdowns), (3) **Option/Subscription Services** (ISP, TV, phone, support), (4) **Customer Information** (individual/corporate details change, contact registration, member type change, opt mail access), and (5) **Equipment Provision** (equipment contracts, installation location, device consistency checks).

It implements the **routing/dispatch pattern**: a single entry point handles all service types via an if-else chain on `mapKey`, delegating to type-specific mapper methods (`shosaOkMapper.editResultRPE...`) that perform business-rule validation and error collection. It also implements a **pipeline pattern**: for each entry, it runs (1) last-updated timestamp merge-set, (2) SC execution via `ServiceComponentRequestInvoker`, (3) last-updated timestamp merge-get, and (4) type-specific result editing.

This is a **shared utility called by many screens** -- twelve direct callers within `JKKSvkeiShosaCC` invoke it for different business scenarios including statement validation, service contract completion, delivery code validation, and place number updates. The method consolidates what would otherwise be dozens of nearly-identical screen-level validation methods into a single reusable component.

Additionally, several branches extract aging-related IDs (PPP authentication ID, ISP authentication ID, SIP user ID, ADSL authentication ID) and store them in `agingWorkMap` for later use in aging (deferred billing) processing. This ties service contract validation to the downstream aging/billing system.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["runShosa start"])
    INIT["Initialize: scCall, wkMapArray, errorList"]
    CHECK_NULL{wkMapArray != null}
    LOOP["For each wkMap in wkMapArray"]
    CHECK_WK{wkMap != null}
    MERGE_SET["mergeSetLastUpdDtm wkMap"]
    SC_RUN["scCall.run wkMap handle"]
    MERGE_GET["mergeGetLastUpdDtm wkMap"]
    SWITCH{mapKey equals}
    CASE_0021["EKK0021C060: Statement validation"]
    CASE_0091["EKK0091C010: eo hikari network validation"]
    CASE_0101["EKK0101C010: eo hikari TV validation"]
    CASE_0111["EKK0111C010: eo hikari phone validation"]
    CASE_0121["EKK0121C010: eo mobile validation"]
    CASE_0141["EKK0141C010: eo ADSL validation"]
    CASE_0171["EKK0171C010: eo hikari network detail validation"]
    CASE_0181["EKK0181C010: eo hikari TV detail validation"]
    CASE_0191["EKK0191C010: eo hikari phone detail validation"]
    CASE_0221["EKK0221C010: eo ADSL detail validation"]
    CASE_0361["EKK0361C010: Option ISP validation"]
    CASE_0381["EKK0381C010: Option TV validation"]
    CASE_0371["EKK0371C010: Option phone validation"]
    CASE_0391["EKK0391C010: Option support validation"]
    CASE_0411["EKK0411C020: Sub-option ISP validation"]
    CASE_0421["EKK0421C010: Sub-option TV validation"]
    CASE_0431["EKK0431C010: Sub-option phone validation"]
    CASE_0341C030["EKK0341C030: Equipment provision validation"]
    CASE_ECK0011["ECK0011C120: Member type change"]
    CASE_ECK0021["ECK0021C010: Individual info change"]
    CASE_ECK0031["ECK0031C010: Corporate info change"]
    CASE_ECK0201D["ECK0201D010: Contact registration"]
    CASE_ECK0201C["ECK0201C010: Contact change"]
    CASE_ECK0141["ECK0141D010: Opt mail access registration"]
    CASE_EKKA0020002["EKKA0020002: Installation location number acquisition"]
    CASE_EKK0251["EKK0251C030: Contract line content change"]
    CASE_EKK0341C450["EKK0341C450: Equipment installation site reflect"]
    CASE_EKK0121C020["EKK0121C020: eo mobile completion"]
    CASE_EKK0201C030["EKK0201C030: Mobile detail validation completion"]
    CASE_EKK0361C030["EKK0361C030: Option ISP validation completion"]
    CASE_EKK0411C040["EKK0411C040: Sub-option ISP validation completion"]
    CASE_EKK0391C030["EKK0391C030: Option support validation completion"]
    CASE_EKK0341C050["EKK0341C050: Equipment provision validation completion"]
    CASE_ECK0111["ECK0111D010: Group registration"]
    CASE_EKK0091C020["EKK0091C020: eo hikari network completion SC"]
    CASE_EKK0111C020["EKK0111C020: eo hikari phone completion SC"]
    CASE_EKK0141C020["EKK0141C020: eo ADSL completion SC"]
    CASE_EKK0171C030["EKK0171C030: eo hikari network detail validation completion SC"]
    CASE_EKK0191C030["EKK0191C030: eo hikari phone detail validation completion SC"]
    CASE_EKK0221C030["EKK0221C030: eo ADSL detail validation completion SC"]
    CASE_EKK0371C030["EKK0371C030: Option phone validation completion"]
    CASE_EKK0431C030["EKK0431C030: Sub-option phone validation completion"]
    CASE_ETU0011["ETU0011D010: Banpo construction registration"]
    CASE_EZM0121["EZM0121C010: Phone number change"]
    CASE_EKKA0020003["EKKA0020003: Indoor device uniqueness check"]
    CASE_EKKA0020004["EKKA0020004: Equipment location number change"]
    CASE_EKK2541["EKK2541C030: Assignment contract validation"]
    CASE_EKK0441C030["EKK0441C030: Billing option validation"]
    CASE_EKK0441C050["EKK0441C050: Billing option validation completion"]
    CASE_EKK2451C010["EKK2451C010: Third-party discount application termination"]
    CASE_EKK0191C060["EKK0191C060: Billing option validation"]
    CASE_EKK2451D010["EKK2451D010: Third-party discount contract registration"]
    CASE_EKK2811C030["EKK2811C030: Equipment option validation"]
    CASE_EKK2811C050["EKK2811C050: Equipment option validation completion"]
    CASE_EKK3131C030["EKK3131C030: Construction cost assignment validation"]
    CASE_EKK0341C530["EKK0341C530: Equipment contract change"]
    CASE_EKK0341C231["EKK0341C231: Equipment contract change"]
    ADD_ERRORS["errorList.addAll wkErrorList"]
    END_LOOP["End wkMap iteration"]
    END_NODE(["Return errorList"])
    START --> INIT
    INIT --> CHECK_NULL
    CHECK_NULL -->|Yes| LOOP
    CHECK_NULL -->|No| END_NODE
    LOOP --> CHECK_WK
    CHECK_WK -->|Yes| MERGE_SET
    CHECK_WK -->|No| END_LOOP
    MERGE_SET --> SC_RUN
    SC_RUN --> MERGE_GET
    MERGE_GET --> SWITCH
    SWITCH -->|EKK0021C060| CASE_0021
    SWITCH -->|EKK0091C010| CASE_0091
    SWITCH -->|EKK0101C010| CASE_0101
    SWITCH -->|EKK0111C010| CASE_0111
    SWITCH -->|EKK0121C010| CASE_0121
    SWITCH -->|EKK0141C010| CASE_0141
    SWITCH -->|EKK0171C010| CASE_0171
    SWITCH -->|EKK0181C010| CASE_0181
    SWITCH -->|EKK0191C010| CASE_0191
    SWITCH -->|EKK0221C010| CASE_0221
    SWITCH -->|EKK0361C010| CASE_0361
    SWITCH -->|EKK0381C010| CASE_0381
    SWITCH -->|EKK0371C010| CASE_0371
    SWITCH -->|EKK0391C010| CASE_0391
    SWITCH -->|EKK0411C020| CASE_0411
    SWITCH -->|EKK0421C010| CASE_0421
    SWITCH -->|EKK0431C010| CASE_0431
    SWITCH -->|EKK0341C030| CASE_0341C030
    SWITCH -->|ECK0011C120| CASE_ECK0011
    SWITCH -->|ECK0021C010| CASE_ECK0021
    SWITCH -->|ECK0031C010| CASE_ECK0031
    SWITCH -->|ECK0201D010| CASE_ECK0201D
    SWITCH -->|ECK0201C010| CASE_ECK0201C
    SWITCH -->|ECK0141D010| CASE_ECK0141
    SWITCH -->|EKKA0020002| CASE_EKKA0020002
    SWITCH -->|EKK0251C030| CASE_EKK0251
    SWITCH -->|EKK0341C450| CASE_EKK0341C450
    SWITCH -->|EKK0121C020| CASE_EKK0121C020
    SWITCH -->|EKK0201C030| CASE_EKK0201C030
    SWITCH -->|EKK0361C030| CASE_EKK0361C030
    SWITCH -->|EKK0411C040| CASE_EKK0411C040
    SWITCH -->|EKK0391C030| CASE_EKK0391C030
    SWITCH -->|EKK0341C050| CASE_EKK0341C050
    SWITCH -->|ECK0111D010| CASE_ECK0111
    SWITCH -->|EKK0091C020| CASE_EKK0091C020
    SWITCH -->|EKK0111C020| CASE_EKK0111C020
    SWITCH -->|EKK0141C020| CASE_EKK0141C020
    SWITCH -->|EKK0171C030| CASE_EKK0171C030
    SWITCH -->|EKK0191C030| CASE_EKK0191C030
    SWITCH -->|EKK0221C030| CASE_EKK0221C030
    SWITCH -->|EKK0371C030| CASE_EKK0371C030
    SWITCH -->|EKK0431C030| CASE_EKK0431C030
    SWITCH -->|ETU0011D010| CASE_ETU0011
    SWITCH -->|EZM0121C010| CASE_EZM0121
    SWITCH -->|EKKA0020003| CASE_EKKA0020003
    SWITCH -->|EKKA0020004| CASE_EKKA0020004
    SWITCH -->|EKK2541C030| CASE_EKK2541
    SWITCH -->|EKK0441C030| CASE_EKK0441C030
    SWITCH -->|EKK0441C050| CASE_EKK0441C050
    SWITCH -->|EKK2451C010| CASE_EKK2451C010
    SWITCH -->|EKK0191C060| CASE_EKK0191C060
    SWITCH -->|EKK2451D010| CASE_EKK2451D010
    SWITCH -->|EKK2811C030| CASE_EKK2811C030
    SWITCH -->|EKK2811C050| CASE_EKK2811C050
    SWITCH -->|EKK3131C030| CASE_EKK3131C030
    SWITCH -->|EKK0341C530| CASE_EKK0341C530
    SWITCH -->|EKK0341C231| CASE_EKK0341C231
    SWITCH -->|other| ADD_ERRORS
    CASE_0021 --> ADD_ERRORS
    CASE_0091 --> ADD_ERRORS
    CASE_0101 --> ADD_ERRORS
    CASE_0111 --> ADD_ERRORS
    CASE_0121 --> ADD_ERRORS
    CASE_0141 --> ADD_ERRORS
    CASE_0171 --> ADD_ERRORS
    CASE_0181 --> ADD_ERRORS
    CASE_0191 --> ADD_ERRORS
    CASE_0221 --> ADD_ERRORS
    CASE_0361 --> ADD_ERRORS
    CASE_0381 --> ADD_ERRORS
    CASE_0371 --> ADD_ERRORS
    CASE_0391 --> ADD_ERRORS
    CASE_0411 --> ADD_ERRORS
    CASE_0421 --> ADD_ERRORS
    CASE_0431 --> ADD_ERRORS
    CASE_0341C030 --> ADD_ERRORS
    CASE_ECK0011 --> ADD_ERRORS
    CASE_ECK0021 --> ADD_ERRORS
    CASE_ECK0031 --> ADD_ERRORS
    CASE_ECK0201D --> ADD_ERRORS
    CASE_ECK0201C --> ADD_ERRORS
    CASE_ECK0141 --> ADD_ERRORS
    CASE_EKKA0020002 --> ADD_ERRORS
    CASE_EKK0251 --> ADD_ERRORS
    CASE_EKK0341C450 --> ADD_ERRORS
    CASE_EKK0121C020 --> ADD_ERRORS
    CASE_EKK0201C030 --> ADD_ERRORS
    CASE_EKK0361C030 --> ADD_ERRORS
    CASE_EKK0411C040 --> ADD_ERRORS
    CASE_EKK0391C030 --> ADD_ERRORS
    CASE_EKK0341C050 --> ADD_ERRORS
    CASE_ECK0111 --> ADD_ERRORS
    CASE_EKK0091C020 --> ADD_ERRORS
    CASE_EKK0111C020 --> ADD_ERRORS
    CASE_EKK0141C020 --> ADD_ERRORS
    CASE_EKK0171C030 --> ADD_ERRORS
    CASE_EKK0191C030 --> ADD_ERRORS
    CASE_EKK0221C030 --> ADD_ERRORS
    CASE_EKK0371C030 --> ADD_ERRORS
    CASE_EKK0431C030 --> ADD_ERRORS
    CASE_ETU0011 --> ADD_ERRORS
    CASE_EZM0121 --> ADD_ERRORS
    CASE_EKKA0020003 --> ADD_ERRORS
    CASE_EKKA0020004 --> ADD_ERRORS
    CASE_EKK2541 --> ADD_ERRORS
    CASE_EKK0441C030 --> ADD_ERRORS
    CASE_EKK0441C050 --> ADD_ERRORS
    CASE_EKK2451C010 --> ADD_ERRORS
    CASE_EKK0191C060 --> ADD_ERRORS
    CASE_EKK2451D010 --> ADD_ERRORS
    CASE_EKK2811C030 --> ADD_ERRORS
    CASE_EKK2811C050 --> ADD_ERRORS
    CASE_EKK3131C030 --> ADD_ERRORS
    CASE_EKK0341C530 --> ADD_ERRORS
    CASE_EKK0341C231 --> ADD_ERRORS
    ADD_ERRORS --> END_LOOP
    END_LOOP --> CHECK_NULL
```

**Branch grouping by mapKey category:**

The 52+ if-else branches on `mapKey` can be classified into the following logical groups:

| Group | mapKey prefix | Business meaning |
|-------|--------------|-----------------|
| Statement / Post-processing | EKK0021C060 | Statement validation and post-processing dispatch |
| Service Contract - Validation | EKK0091C010 to EKK0221C010 | Service contract validation for each service type |
| Service Contract - Completion | EKK0091C020 to EKK0221C030 | Service contract completion (closing) |
| Option Service - Validation | EKK0361C010 to EKK0431C010 | Option/subscription service validation |
| Option Service - Completion | EKK0361C030 to EKK0431C030 | Option service validation + completion |
| Customer Info - Change/Registration | ECK0011C120 to ECK0141D010 | Member type change, customer info change, contact registration |
| Equipment - Installation/Location | EKKA0020002 to EKKA0020004 | Installation location number acquisition/change, device consistency |
| Equipment Contract | EKK0341C030, EKK0341C050, EKK0341C231, EKK0341C530 | Equipment provision contract validation/completion/change |
| Billing / Provisional Assignment | EKK2451C010, EKK2451D010, EKK2541C030, EKK0441C030, EKK0441C050 | Third-party discount contract, provisional assignment validation |
| Engineering cost | EKK3131C030 | Construction cost provisional assignment |
| Special operations | ETU0011D010, EZM0121C010 | Phone number change, banpo construction registration |
