# Business Logic — JBSbatKKSmtvlMskmInfoTrkm.setOutputFileMap() [97 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.business.service.JBSbatKKSmtvlMskmInfoTrkm` |
| Layer | Service |
| Module | `service` (Package: `eo.business.service`) |

## 1. Role

### JBSbatKKSmtvlMskmInfoTrkm.setOutputFileMap()

This method constructs the **Smart Balance (Smtvl) Application Result File** output map — a structured data set written to a flat-file output used for KDDI discount contract discrepancy notification (KDDI Waketei Kiyaku Idoutsu Tsuuchi). Specifically, it populates the `JBSbatServiceInterfaceMap` (`outMap`) with all fields required by the IFM249 file format, drawing from the incoming `inMap` data and applying fixed control values (recording division, transaction division, provider code, contact telephone, network service flag codes, etc.).

The method implements a **conditional dispatch pattern** based on two levels of branching. First, it checks whether the incoming data contains an error code (`ERR_CD`); if no error occurred, it populates all service contract fields for both active and termination scenarios. Second, within the success branch, it further dispatches based on `TRAN_DIV`: if the transaction division equals the "add" (registration) code `"2"`, it writes service-specific fields such as network service type, subscription date, billing start date, and telephone service flags. If the transaction division equals the "DSL" (termination) code `"4"`, it leaves the output map without additional service-specific fields (a no-op branch, as termination fields are handled elsewhere).

The method serves as the **output assembly layer** in the batch processing pipeline for smart balance application information reflection (Smtvl Nyukin Han'ei). It is called by `mainProp()` after input data has been validated and prepared, transforming validated incoming business data into the file-ready structure consumed by downstream processing and external KDDI discrepancy notification workflows.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["setOutputFileMap inMap outMap"]) --> COMMON["Set common items"]
    COMMON --> KDDI["outMap.setString KDDI_WKEI_IDT_NO_NET from inMap"]
    KDDI --> REC_DIV["outMap.setString REC_DIV = REC_DIV_DATA 20"]
    REC_DIV --> TRAN_DIV["outMap.setString TRAN_DIV = TRAN_DIV_FIXED_VALUE 6"]
    TRAN_DIV --> JIGYOSHA_DIV["outMap.setString JIGYOSHA_DIV = JIGYOSHA_DIV_FIXED_VALUE 03"]
    JIGYOSHA_DIV --> JIGYOSHA_CD["outMap.setString JIGYOSHA_CD = JIGYOSHA_CD_FIXED_VALUE 902"]
    JIGYOSHA_CD --> CUST_NAMES["Set customer names to blank padded strings"]
    CUST_NAMES --> WRIBPRC["outMap.setString WRIBPRC_GRP_CD from inMap"]
    WRIBPRC --> CROSSSEL["outMap.setString CROSSEL_PRC_HKTGI_NO from inMap"]
    CROSSSEL --> CROSSSEL_SBT["outMap.setString CROSSEL_PRC_HKTGI_SBT from inMap"]
    CROSSSEL_SBT --> ERR_CHECK{isNullSpace ERR_CD check}
    ERR_CHECK --> NoError["No error"]
    ERR_CHECK --> Error["Error"]
    NoError --> PROVIDER_NUM["outMap.setString JIGYOSHA_KEI_KNRI_NO from inMap"]
    PROVIDER_NUM --> ADD_RESULT["outMap.setString ADD_RSLT_CD = ADD_RSLT_CD_OK 00"]
    ADD_RESULT --> CHECK_TRAN{TRAN_DIV check}
    CHECK_TRAN --> Add["TRAN_DIV_ADD 2 Registration"]
    CHECK_TRAN --> Dsl["else DSL Termination"]
    Add --> TELNO["outMap.setString KEISHA_RRKS_TELNO1 TELNO_FIXED_VALUE 000000000"]
    TELNO --> COURSE["outMap.setString COURSE_NM_CD from inMap"]
    COURSE --> NET_FLAG["outMap.setString NET_SVC_KEI_UMU_FLG KEI_UMU_FLG_ON 1"]
    NET_FLAG --> NET_STOP["outMap.setString NET_SVC_STP_FLG SVC_STP_FLG_OFF 0"]
    NET_STOP --> NET_SVC_SBT_VAL["outMap.setString NET_SVC_SBT NET_SVC_SBT_FIXED_VALUE 000002"]
    NET_SVC_SBT_VAL --> NET_YMD["outMap.setString NET_SVC_MSKM_YMD from inMap"]
    NET_YMD --> NET_CHARGE["outMap.setString NET_SVC_CHRG_STAYMD getSvcChrgStaymd"]
    NET_CHARGE --> TEL1_FLAG["outMap.setString TEL1_SVC_KEI_UMU_FLG KEI_UMU_FLG_ON 1"]
    TEL1_FLAG --> TEL1_STOP["outMap.setString TEL1_SVC_STP_FLG SVC_STP_FLG_OFF 0"]
    TEL1_STOP --> TEL1_SBT_VAL["outMap.setString TEL1_SVC_SBT TEL1_SVC_SBT_FIXED_VALUE 100005"]
    TEL1_SBT_VAL --> TEL1_YMD["outMap.setString TEL1_SVC_MSKM_YMD from inMap"]
    TEL1_YMD --> TEL1_CHARGE["outMap.setString TEL1_SVC_CHRG_STAYMD getSvcChrgStaymd"]
    TEL1_CHARGE --> TEL2["outMap.setString TEL2_SVC_KEI_UMU_FLG KEI_UMU_FLG_OFF 0"]
    Dsl --> DSL_EMPTY["Termination branch - no additional output"]
    Error --> ADD_NG["outMap.setString ADD_RSLT_CD = ADD_RSLT_CD_NG 99"]
    ADD_NG --> ERR_REASON["outMap.setString ADD_RSLT_NG_JIYU from inMap KDDI_ERR_CD"]
    DSL_EMPTY --> END_NODE(["Return"])
    TEL2 --> END_NODE
    ERR_REASON --> END_NODE
```

**CRITICAL — Constant Resolution:**
- `REC_DIV_DATA = "20"` (Record division: Data) [-> REC_DIV_DATA="20" (JBSbatKKSmtvlMskmInfoTrkm.java:169)]
- `TRAN_DIV_FIXED_VALUE = "6"` (Transaction division: Subscriber information acquisition) [-> TRAN_DIV_FIXED_VALUE="6" (JBSbatKKSmtvlMskmInfoTrkm.java:415)]
- `JIGYOSHA_DIV_FIXED_VALUE = "03"` (Provider division: Code assigned to K-OPT by KDDI) [-> JIGYOSHA_DIV_FIXED_VALUE="03" (JBSbatKKSmtvlMskmInfoTrkm.java:418)]
- `JIGYOSHA_CD_FIXED_VALUE = "902"` (Provider code) [-> JIGYOSHA_CD_FIXED_VALUE="902" (JBSbatKKSmtvlMskmInfoTrkm.java:421)]
- `TRAN_DIV_ADD = "2"` (Transaction division: Discount price registration (contract number unconfirmed) = Registration) [-> TRAN_DIV_ADD="2" (JBSbatKKSmtvlMskmInfoTrkm.java:157)]
- `TELNO_FIXED_VALUE = "000000000"` (Fixed telephone number) [-> TELNO_FIXED_VALUE="000000000" (JBSbatKKSmtvlMskmInfoTrkm.java:429)]
- `NET_SVC_SBT_FIXED_VALUE = "000002"` (Network service type: Discount target) [-> NET_SVC_SBT_FIXED_VALUE="000002" (JBSbatKKSmtvlMskmInfoTrkm.java:438)]
- `TEL1_SVC_SBT_FIXED_VALUE = "100005"` (Telephone service 1 type: Discount target) [-> TEL1_SVC_SBT_FIXED_VALUE="100005" (JBSbatKKSmtvlMskmInfoTrkm.java:441)]
- `SVC_STP_FLG_OFF = "0"` (Service stop flag: Not stopped / in use) [-> SVC_STP_FLG_OFF="0" (JBSbatKKSmtvlMskmInfoTrkm.java:435)]
- `KEI_UMU_FLG_ON = "1"` (Contract presence flag: Present / active) [-> KEI_UMU_FLG_ON="1" (JBSbatKKSmtvlMskmInfoTrkm.java:444)]
- `KEI_UMU_FLG_OFF = "0"` (Contract presence flag: Absent / not active) [-> KEI_UMU_FLG_OFF="0" (JBSbatKKSmtvlMskmInfoTrkm.java:447)]
- `ADD_RSLT_CD_OK = "00"` (Registration result code: Registration OK) [-> ADD_RSLT_CD_OK="00" (JBSbatKKSmtvlMskmInfoTrkm.java:450)]
- `ADD_RSLT_CD_NG = "99"` (Registration result code: Registration NG) [-> ADD_RSLT_CD_NG="99" (JBSbatKKSmtvlMskmInfoTrkm.java:453)]
- `ERR_CD = "err_cd"` (Error code input item) [-> ERR_CD="err_cd" (JBSbatKKSmtvlMskmInfoTrkm.java:493)]
- `KDDI_ERR_CD = "kddi_err_cd"` (KDDI error code input item) [-> KDDI_ERR_CD="kddi_err_cd" (JBSbatKKSmtvlMskmInfoTrkm.java:496)]

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `inMap` | `HashMap<String, Object>` | Input data map carrying smart balance application business data retrieved from the database or prior processing stage. Contains fields such as KDDI discount contract discrepancy notification number (net), discount price group code, cross-sell price carryover number, error code, provider contract management number, course name code, network service subscription date, billing start date, and telephone service subscription dates. |
| 2 | `outMap` | `JBSbatServiceInterfaceMap` | Output file information map that accumulates all fields for the IFM249 smart balance application result file. Each `setString` call populates one record field; this map is written to the output file by the batch framework. |

**Instance fields / external state:**
- `opeDate` (inherited from `JBSbatBusinessService`) — the current operation date used by `getSvcChrgStaymd()` for billing start date comparison.

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `JBSbatKKIFM249.KDDI_WKEI_IDT_NO_NET` | JBSbatKKIFM249 | - | File interface constant: KDDI discount contract discrepancy notification number (net) [-> JBSbatKKIFM249:29] |
| - | `JBSbatKKIFM249.REC_DIV` | JBSbatKKIFM249 | - | File interface constant: Record division [-> JBSbatKKIFM249:35] |
| - | `JBSbatKKIFM249.TRAN_DIV` | JBSbatKKIFM249 | - | File interface constant: Transaction division [-> JBSbatKKIFM249:44] |
| - | `JBSbatKKIFM249.JIGYOSHA_DIV` | JBSbatKKIFM249 | - | File interface constant: Provider division [-> JBSbatKKIFM249:47] |
| - | `JBSbatKKIFM249.JIGYOSHA_CD` | JBSbatKKIFM249 | - | File interface constant: Provider code [-> JBSbatKKIFM249:50] |
| - | `JBSbatKKIFM249.KEISHA_SEI_KANJI` | JBSbatKKIFM249 | - | File interface constant: Customer name kanji (surname) [-> JBSbatKKIFM249:56] |
| - | `JBSbatKKIFM249.KEISHA_NM_KANJI` | JBSbatKKIFM249 | - | File interface constant: Customer name kanji (given name) [-> JBSbatKKIFM249:59] |
| - | `JBSbatKKIFM249.KEISHA_SEI_KANA` | JBSbatKKIFM249 | - | File interface constant: Customer name kana (surname) [-> JBSbatKKIFM249:62] |
| - | `JBSbatKKIFM249.KEISHA_NM_KANA` | JBSbatKKIFM249 | - | File interface constant: Customer name kana (given name) [-> JBSbatKKIFM249:65] |
| - | `JBSbatKKIFM249.KEISHA_ADR` | JBSbatKKIFM249 | - | File interface constant: Customer address [-> JBSbatKKIFM249:68] |
| - | `JBSbatKKIFM249.WRIBPRC_GRP_CD` | JBSbatKKIFM249 | - | File interface constant: Discount price group code [-> JBSbatKKIFM249:200] |
| - | `JBSbatKKIFM249.CROSSEL_PRC_HKTGI_NO` | JBSbatKKIFM249 | - | File interface constant: Cross-sell price carryover number [-> JBSbatKKIFM249:212] |
| - | `JBSbatKKIFM249.CROSSEL_PRC_HKTGI_SBT` | JBSbatKKIFM249 | - | File interface constant: Cross-sell price carryover type [-> JBSbatKKIFM249:215] |
| - | `JBSbatKKIFM249.JIGYOSHA_KEI_KNRI_NO` | JBSbatKKIFM249 | - | File interface constant: Provider contract management number [-> JBSbatKKIFM249:53] |
| - | `JBSbatKKIFM249.ADD_RSLT_CD` | JBSbatKKIFM249 | - | File interface constant: Registration result code [-> JBSbatKKIFM249:203] |
| - | `JBSbatKKIFM249.KEISHA_RRKS_TELNO1` | JBSbatKKIFM249 | - | File interface constant: Customer contact telephone number 1 [-> JBSbatKKIFM249:74] |
| - | `JBSbatKKIFM249.COURSE_NM_CD` | JBSbatKKIFM249 | - | File interface constant: Course name code [-> JBSbatKKIFM249:80] |
| - | `JBSbatKKIFM249.NET_SVC_KEI_UMU_FLG` | JBSbatKKIFM249 | - | File interface constant: Network service contract presence flag [-> JBSbatKKIFM249:95] |
| - | `JBSbatKKIFM249.NET_SVC_STP_FLG` | JBSbatKKIFM249 | - | File interface constant: Network service stop flag [-> JBSbatKKIFM249:98] |
| - | `JBSbatKKIFM249.NET_SVC_SBT` | JBSbatKKIFM249 | - | File interface constant: Network service type [-> JBSbatKKIFM249:101] |
| - | `JBSbatKKIFM249.NET_SVC_MSKM_YMD` | JBSbatKKIFM249 | - | File interface constant: Network service subscription date [-> JBSbatKKIFM249:104] |
| - | `JBSbatKKIFM249.NET_SVC_CHRG_STAYMD` | JBSbatKKIFM249 | - | File interface constant: Network service billing start date [-> JBSbatKKIFM249:107] |
| - | `JBSbatKKIFM249.TEL1_SVC_KEI_UMU_FLG` | JBSbatKKIFM249 | - | File interface constant: Telephone service 1 contract presence flag [-> JBSbatKKIFM249:110] |
| - | `JBSbatKKIFM249.TEL1_SVC_STP_FLG` | JBSbatKKIFM249 | - | File interface constant: Telephone service 1 stop flag [-> JBSbatKKIFM249:113] |
| - | `JBSbatKKIFM249.TEL1_SVC_SBT` | JBSbatKKIFM249 | - | File interface constant: Telephone service 1 type [-> JBSbatKKIFM249:116] |
| - | `JBSbatKKIFM249.TEL1_SVC_MSKM_YMD` | JBSbatKKIFM249 | - | File interface constant: Telephone service 1 subscription date [-> JBSbatKKIFM249:119] |
| - | `JBSbatKKIFM249.TEL1_SVC_CHRG_STAYMD` | JBSbatKKIFM249 | - | File interface constant: Telephone service 1 billing start date [-> JBSbatKKIFM249:122] |
| - | `JBSbatKKIFM249.TEL2_SVC_KEI_UMU_FLG` | JBSbatKKIFM249 | - | File interface constant: Telephone service 2 contract presence flag [-> JBSbatKKIFM249:128] |
| - | `JBSbatKKIFM249.ADD_RSLT_NG_JIYU` | JBSbatKKIFM249 | - | File interface constant: Registration result NG reason [-> JBSbatKKIFM249:206] |
| R | `JBSbatKKSmtvlMskmInfoTrkm.getSvcChrgStaymd` | JBSbatKKSmtvlMskmInfoTrkm | - | Calls `getSvcChrgStaymd` in `JBSbatKKSmtvlMskmInfoTrkm` — returns input billing start date if not blank and on or before operation date; otherwise returns blank |
| - | `JBSbatKKSmtvlMskmInfoTrkm.isNullSpace` | JBSbatKKSmtvlMskmInfoTrkm | - | Calls `isNullSpace` in `JBSbatKKSmtvlMskmInfoTrkm` — checks if a string is null or all-blank |
| - | `JBSbatStringUtil.fillSpace` | JBSbatStringUtil | - | Calls `fillSpace` in `JBSbatStringUtil` — pads a string to a specified length with half-width spaces |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Batch: JBSbatKKSmtvlMskmInfoTrkm.mainProp() | `mainProp()` -> `JBSbatKKSmtvlMskmInfoTrkm.setOutputFileMap(inMap, outMap)` | `setString` [-], `fillSpace` [-], `getSvcChrgStaymd` [R], `isNullSpace` [R] |

**Note:** No screen/batch entry points (Screen:KKSV\d{4} pattern) found within 8 hops of this method. This method is a private batch utility called exclusively from the same class's `mainProp()` entry point. The terminal operations from this method consist entirely of output file field setters (`setString`) and local helper methods (`getSvcChrgStaymd`, `isNullSpace`) — no SC/CBS database calls or entity/table operations are performed directly by this method.

## 6. Per-Branch Detail Blocks

**Block 1** — [SET / EXEC] (L4087) Common items initialization

> Sets shared header-level fields on the output map. The Javadoc states that all-half-width-space and right-padded spaces are automatically added by the framework, so the code does not manually edit them. However, all-full-width spaces must be edited by the application code.

| # | Type | Code |
|---|------|------|
| 1 | SET | `outMap.setString(KDDI_WKEI_IDT_NO_NET, inMap.get(KDDI_WKEI_IDT_NO_NET))` // KDDI discount contract discrepancy notification number (net) [-> KDDI_WKEI_IDT_NO_NET="kddi_wkei_idt_no_net" (JBSbatKKSmtvlMskmInfoTrkm.java:478)] |
| 2 | SET | `outMap.setString(REC_DIV, REC_DIV_DATA)` // Record division: Data [-> REC_DIV="rec_div" (JBSbatKKSmtvlMskmInfoTrkm.java:481), -> REC_DIV_DATA="20" (JBSbatKKSmtvlMskmInfoTrkm.java:169)] |
| 3 | SET | `outMap.setString(TRAN_DIV, TRAN_DIV_FIXED_VALUE)` // Transaction division: Subscriber information acquisition [-> TRAN_DIV="tran_div" (JBSbatKKSmtvlMskmInfoTrkm.java:484), -> TRAN_DIV_FIXED_VALUE="6" (JBSbatKKSmtvlMskmInfoTrkm.java:415)] |
| 4 | SET | `outMap.setString(JIGYOSHA_DIV, JIGYOSHA_DIV_FIXED_VALUE)` // Provider division: Code assigned to K-OPT by KDDI [-> JIGYOSHA_DIV="jigyosha_div" (JBSbatKKSmtvlMskmInfoTrkm.java:487), -> JIGYOSHA_DIV_FIXED_VALUE="03" (JBSbatKKSmtvlMskmInfoTrkm.java:418)] |
| 5 | SET | `outMap.setString(JIGYOSHA_CD, JIGYOSHA_CD_FIXED_VALUE)` // Provider code [-> JIGYOSHA_CD="jigyosha_cd" (JBSbatKKSmtvlMskmInfoTrkm.java:490), -> JIGYOSHA_CD_FIXED_VALUE="902" (JBSbatKKSmtvlMskmInfoTrkm.java:421)] |
| 6 | SET | `outMap.setString(KEISHA_SEI_KANJI, fillSpace("", 30, true))` // Customer name kanji (surname) — blank padded to 30 chars |
| 7 | SET | `outMap.setString(KEISHA_NM_KANJI, fillSpace("", 30, true))` // Customer name kanji (given name) — blank padded to 30 chars |
| 8 | SET | `outMap.setString(KEISHA_SEI_KANA, fillSpace("", 30, true))` // Customer name kana (surname) — blank padded to 30 chars |
| 9 | SET | `outMap.setString(KEISHA_NM_KANA, fillSpace("", 30, true))` // Customer name kana (given name) — blank padded to 30 chars |
| 10 | SET | `outMap.setString(KEISHA_ADR, fillSpace("", 160, true))` // Customer address — blank padded to 160 chars |
| 11 | SET | `outMap.setString(WRIBPRC_GRP_CD, inMap.get(WRIBPRC_GRP_CD))` // Discount price group code [-> WRIBPRC_GRP_CD="wribprc_grp_cd" (JBSbatKKSmtvlMskmInfoTrkm.java:499)] |
| 12 | SET | `outMap.setString(CROSSEL_PRC_HKTGI_NO, inMap.get(WRIBPRC_HKTGI_NO))` // Cross-sell price carryover number [-> CROSSEL_PRC_HKTGI_NO="CROSSEL_PRC_HKTGI_NO" (JBSbatKKIFM249:212), -> WRIBPRC_HKTGI_NO="wribprc_hktgi_no" (JBSbatKKSmtvlMskmInfoTrkm.java:508)] |
| 13 | SET | `outMap.setString(CROSSEL_PRC_HKTGI_SBT, inMap.get(WRIBPRC_HKTGI_SBT))` // Cross-sell price carryover type [-> WRIBPRC_HKTGI_SBT="wribprc_hktgi_sbt" (JBSbatKKSmtvlMskmInfoTrkm.java:511)] |

**Block 2** — [IF/ELSE] `isNullSpace(inMap.get(ERR_CD))` (L4122) Error check

> Determines whether the incoming data contains an error code. If the error code field is null or blank (no error), the success branch processes service contract data. Otherwise, the error branch writes an error result code and reason.

**Block 2.1** — [IF] No error condition (L4123)

> The incoming data is valid. Populates provider contract management number and sets registration result code to "OK" (00). Then checks the transaction division to determine if this is a registration (add) or termination (DSL) scenario.

| # | Type | Code |
|---|------|------|
| 1 | SET | `outMap.setString(JIGYOSHA_KEI_KNRI_NO, inMap.get(KDDI_JGS_KEI_KANRI_NO))` // Provider contract management number [-> JIGYOSHA_KEI_KNRI_NO="jigyosha_kei_knri_no" (JBSbatKKSmtvlMskmInfoTrkm.java:496), -> KDDI_JGS_KEI_KANRI_NO="kddi_jgs_kei_kanri_no" (JBSbatKKSmtvlMskmInfoTrkm.java:545)] |
| 2 | SET | `outMap.setString(ADD_RSLT_CD, ADD_RSLT_CD_OK)` // Registration result code: OK [-> ADD_RSLT_CD="ADD_RSLT_CD" (JBSbatKKIFM249:203), -> ADD_RSLT_CD_OK="00" (JBSbatKKSmtvlMskmInfoTrkm.java:450)] |

**Block 2.1.1** — [IF] `TRAN_DIV_ADD.equals(tranDiv)` — Registration (L4130)

> When `TRAN_DIV = "2"` (discount price registration with contract number unconfirmed = registration), populate network service and telephone service 1 fields. This is the primary business path for new discount contract registrations.

| # | Type | Code |
|---|------|------|
| 1 | SET | `outMap.setString(KEISHA_RRKS_TELNO1, TELNO_FIXED_VALUE)` // Customer contact telephone number 1: fixed value [-> KEISHA_RRKS_TELNO1="KEISHA_RRKS_TELNO1" (JBSbatKKIFM249:74), -> TELNO_FIXED_VALUE="000000000" (JBSbatKKSmtvlMskmInfoTrkm.java:429)] |
| 2 | SET | `outMap.setString(COURSE_NM_CD, inMap.get(COURSE_NM_CD))` // Course name code [-> COURSE_NM_CD="course_nm_cd" (JBSbatKKSmtvlMskmInfoTrkm.java:514)] |
| 3 | SET | `outMap.setString(NET_SVC_KEI_UMU_FLG, KEI_UMU_FLG_ON)` // Network service contract presence flag: Present (1) [-> NET_SVC_KEI_UMU_FLG="NET_SVC_KEI_UMU_FLG" (JBSbatKKIFM249:95), -> KEI_UMU_FLG_ON="1" (JBSbatKKSmtvlMskmInfoTrkm.java:444)] |
| 4 | SET | `outMap.setString(NET_SVC_STP_FLG, SVC_STP_FLG_OFF)` // Network service stop flag: Not stopped (0) [-> NET_SVC_STP_FLG="NET_SVC_STP_FLG" (JBSbatKKIFM249:98), -> SVC_STP_FLG_OFF="0" (JBSbatKKSmtvlMskmInfoTrkm.java:435)] |
| 5 | SET | `outMap.setString(NET_SVC_SBT, NET_SVC_SBT_FIXED_VALUE)` // Network service type: Discount target [-> NET_SVC_SBT="NET_SVC_SBT" (JBSbatKKIFM249:101), -> NET_SVC_SBT_FIXED_VALUE="000002" (JBSbatKKSmtvlMskmInfoTrkm.java:438)] |
| 6 | SET | `outMap.setString(NET_SVC_MSKM_YMD, inMap.get(NET_SVC_MSKM_YMD))` // Network service subscription date [-> NET_SVC_MSKM_YMD="NET_SVC_MSKM_YMD" (JBSbatKKIFM249:104)] |
| 7 | CALL | `outMap.setString(NET_SVC_CHRG_STAYMD, getSvcChrgStaymd(inMap.get(NET_SVC_CHRG_STAYMD)))` // Network service billing start date: processed through date-validation helper [-> NET_SVC_CHRG_STAYMD="NET_SVC_CHRG_STAYMD" (JBSbatKKIFM249:107)] |
| 8 | SET | `outMap.setString(TEL1_SVC_KEI_UMU_FLG, KEI_UMU_FLG_ON)` // Telephone service 1 contract presence flag: Present (1) [-> TEL1_SVC_KEI_UMU_FLG="TEL1_SVC_KEI_UMU_FLG" (JBSbatKKIFM249:110)] |
| 9 | SET | `outMap.setString(TEL1_SVC_STP_FLG, SVC_STP_FLG_OFF)` // Telephone service 1 stop flag: Not stopped (0) [-> TEL1_SVC_STP_FLG="TEL1_SVC_STP_FLG" (JBSbatKKIFM249:113)] |
| 10 | SET | `outMap.setString(TEL1_SVC_SBT, TEL1_SVC_SBT_FIXED_VALUE)` // Telephone service 1 type: Discount target [-> TEL1_SVC_SBT="TEL1_SVC_SBT" (JBSbatKKIFM249:116), -> TEL1_SVC_SBT_FIXED_VALUE="100005" (JBSbatKKSmtvlMskmInfoTrkm.java:441)] |
| 11 | SET | `outMap.setString(TEL1_SVC_MSKM_YMD, inMap.get(TEL1_SVC_MSKM_YMD))` // Telephone service 1 subscription date [-> TEL1_SVC_MSKM_YMD="TEL1_SVC_MSKM_YMD" (JBSbatKKIFM249:119)] |
| 12 | CALL | `outMap.setString(TEL1_SVC_CHRG_STAYMD, getSvcChrgStaymd(inMap.get(TEL1_SVC_CHRG_STAYMD)))` // Telephone service 1 billing start date: processed through date-validation helper [-> TEL1_SVC_CHRG_STAYMD="TEL1_SVC_CHRG_STAYMD" (JBSbatKKIFM249:122)] |
| 13 | SET | `outMap.setString(TEL2_SVC_KEI_UMU_FLG, KEI_UMU_FLG_OFF)` // Telephone service 2 contract presence flag: Absent (0) [-> TEL2_SVC_KEI_UMU_FLG="TEL2_SVC_KEI_UMU_FLG" (JBSbatKKIFM249:128), -> KEI_UMU_FLG_OFF="0" (JBSbatKKSmtvlMskmInfoTrkm.java:447)] |

**Block 2.1.1.1** — Helper method: `getSvcChrgStaymd(String svcChrgStaymd)` (L3225)

> Date validation helper: if the billing start date is not blank and is on or before the current operation date (`opeDate`), returns the original input value. Otherwise returns a blank string. This prevents future billing start dates from being written to the output file (they will be populated at a later date when billing actually begins).

| # | Type | Code |
|---|------|------|
| 1 | IF | `!isNullSpace(svcChrgStaymd) && svcChrgStaymd.compareTo(opeDate) <= 0` // Valid past or current billing start date? |
| 2 | SET | `return svcChrgStaymd` // Return the input date as-is |
| 3 | ELSE | (implicit) |
| 4 | SET | `return ""` // Return blank (billing start date is in the future) |

**Block 2.1.2** — [ELSE] Termination branch (L4164)

> When `TRAN_DIV != "2"` (i.e., the transaction division indicates DSL/termination), this branch executes. It contains no additional output logic — marked with "None" in the Japanese source. Termination fields are set elsewhere in the batch pipeline.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | (no-op — commented as "None" in source) |

**Block 2.2** — [ELSE] Error condition (L4170)

> The incoming data contains an error code. Sets the registration result code to "NG" (99) and writes the KDDI error code from the input as the NG reason. This allows downstream consumers of the output file to identify and handle the failure.

| # | Type | Code |
|---|------|------|
| 1 | SET | `outMap.setString(ADD_RSLT_CD, ADD_RSLT_CD_NG)` // Registration result code: NG (99) [-> ADD_RSLT_CD_NG="99" (JBSbatKKSmtvlMskmInfoTrkm.java:453)] |
| 2 | SET | `outMap.setString(ADD_RSLT_NG_JIYU, inMap.get(KDDI_ERR_CD))` // Registration result NG reason: KDDI error code [-> ADD_RSLT_NG_JIYU="ADD_RSLT_NG_JIYU" (JBSbatKKIFM249:206), -> KDDI_ERR_CD="kddi_err_cd" (JBSbatKKSmtvlMskmInfoTrkm.java:496)] |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `wribprc_grp_cd` | Field | Discount price group code — identifies the group of discount pricing applicable to a subscriber's contract |
| `wribprc_hktgi_no` | Field | Discount price carryover number — tracking number for cross-sell price carryover (ANK-1174 feature) |
| `wribprc_hktgi_sbt` | Field | Discount price carryover type — classifies the type of price carryover (e.g., submission document number, discount price group code) |
| `kddi_jgs_kei_kanri_no` | Field | KDDI provider contract management number — internal KDDI contract tracking ID used in cross-provider agreements |
| `kddi_wkei_idt_no_net` | Field | KDDI discount contract discrepancy notification number (net) — unique notification ID for KDDI discrepancy reporting on network services |
| `err_cd` | Field | Error code — validation result code indicating whether incoming data passed all checks |
| `kddi_err_cd` | Field | KDDI error code — KDDI-side error code propagated to the output file when validation fails |
| `tran_div` | Field | Transaction division — classifies the type of processing (2 = registration, 4 = DSL termination, 6 = subscriber information acquisition) |
| `rec_div` | Field | Record division — identifies the type of record in the output file (10 = header, 20 = data, 80 = trailer) |
| `jigyosha_div` | Field | Provider division — distinguishes the service provider (03 = code assigned by KDDI to K-OPT) |
| `jigyosha_cd` | Field | Provider code — fixed value identifying K-OPT (902) in the output file |
| `jigyosha_kei_knri_no` | Field | Provider contract management number — KDDI-side contract management tracking number |
| `course_nm_cd` | Field | Course name code — identifies the subscription plan/course (e.g., eo Hikari + Network, eo Hikari + Telephone) |
| `net_svc_kei_umu_flg` | Field | Network service contract presence flag — indicates whether the subscriber has an active network service contract (1 = active, 0 = not active) |
| `net_svc_stp_flg` | Field | Network service stop flag — indicates whether the network service is suspended (0 = not suspended / in use) |
| `net_svc_sbt` | Field | Network service type — code identifying the type of network service (000002 = discount target) |
| `net_svc_mskm_ymd` | Field | Network service subscription date — the date the network service contract was subscribed |
| `net_svc_chrg_staymd` | Field | Network service billing start date — the date from which billing for the network service begins |
| `tel1_svc_kei_umu_flg` | Field | Telephone service 1 contract presence flag — indicates whether subscriber has an active telephone service 1 contract |
| `tel1_svc_stp_flg` | Field | Telephone service 1 stop flag — indicates whether telephone service 1 is suspended |
| `tel1_svc_sbt` | Field | Telephone service 1 type — code identifying telephone service 1 type (100005 = discount target) |
| `tel1_svc_mskm_ymd` | Field | Telephone service 1 subscription date — the date telephone service 1 was subscribed |
| `tel1_svc_chrg_staymd` | Field | Telephone service 1 billing start date — the date from which billing for telephone service 1 begins |
| `tel2_svc_kei_umu_flg` | Field | Telephone service 2 contract presence flag — for telephone service 2 (set to "0" / not active in this method) |
| `add_rslt_cd` | Field | Registration result code — output status code (00 = OK, 99 = NG) |
| `add_rslt_ng_jiyu` | Field | Registration result NG reason — human-readable or code-based reason for registration failure |
| `smtvl` | Business term | Smart Balance — the batch system for processing smart balance application information (subscription, changes, termination) |
| `smtvl nyukin han'ei` | Japanese term | Smart Balance application result reflection — the batch process that takes validated application data and writes it to output files |
| `wadachi` | Japanese term | Discrepancy — refers to discrepancies in KDDI discount contracts that require notification |
| `kddi waketei kiyaku` | Japanese term | KDDI discount contract — a pricing agreement between KDDI and the service provider |
| `ido tsuchi tsuuchi` | Japanese term | Discrepancy notification — notification sent to KDDI regarding discrepancies found in discount contract data |
| `REC_DIV_DATA` | Constant | Record division: Data record (value "20") [-> REC_DIV_DATA="20" (JBSbatKKSmtvlMskmInfoTrkm.java:169)] |
| `TRAN_DIV_FIXED_VALUE` | Constant | Transaction division: Subscriber information acquisition (value "6") [-> TRAN_DIV_FIXED_VALUE="6" (JBSbatKKSmtvlMskmInfoTrkm.java:415)] |
| `JIGYOSHA_DIV_FIXED_VALUE` | Constant | Provider division: Code assigned to K-OPT by KDDI (value "03") [-> JIGYOSHA_DIV_FIXED_VALUE="03" (JBSbatKKSmtvlMskmInfoTrkm.java:418)] |
| `JIGYOSHA_CD_FIXED_VALUE` | Constant | Provider code: K-OPT (value "902") [-> JIGYOSHA_CD_FIXED_VALUE="902" (JBSbatKKSmtvlMskmInfoTrkm.java:421)] |
| `TRAN_DIV_ADD` | Constant | Transaction division: Discount price registration, contract number unconfirmed (value "2") [-> TRAN_DIV_ADD="2" (JBSbatKKSmtvlMskmInfoTrkm.java:157)] |
| `TELNO_FIXED_VALUE` | Constant | Fixed customer contact telephone number (value "000000000") [-> TELNO_FIXED_VALUE="000000000" (JBSbatKKSmtvlMskmInfoTrkm.java:429)] |
| `NET_SVC_SBT_FIXED_VALUE` | Constant | Network service type: Discount target (value "000002") [-> NET_SVC_SBT_FIXED_VALUE="000002" (JBSbatKKSmtvlMskmInfoTrkm.java:438)] |
| `TEL1_SVC_SBT_FIXED_VALUE` | Constant | Telephone service 1 type: Discount target (value "100005") [-> TEL1_SVC_SBT_FIXED_VALUE="100005" (JBSbatKKSmtvlMskmInfoTrkm.java:441)] |
| `SVC_STP_FLG_OFF` | Constant | Service stop flag: Not stopped / in use (value "0") [-> SVC_STP_FLG_OFF="0" (JBSbatKKSmtvlMskmInfoTrkm.java:435)] |
| `KEI_UMU_FLG_ON` | Constant | Contract presence flag: Present / active (value "1") [-> KEI_UMU_FLG_ON="1" (JBSbatKKSmtvlMskmInfoTrkm.java:444)] |
| `KEI_UMU_FLG_OFF` | Constant | Contract presence flag: Absent / not active (value "0") [-> KEI_UMU_FLG_OFF="0" (JBSbatKKSmtvlMskmInfoTrkm.java:447)] |
| `ADD_RSLT_CD_OK` | Constant | Registration result code: OK (value "00") [-> ADD_RSLT_CD_OK="00" (JBSbatKKSmtvlMskmInfoTrkm.java:450)] |
| `ADD_RSLT_CD_NG` | Constant | Registration result code: NG / failed (value "99") [-> ADD_RSLT_CD_NG="99" (JBSbatKKSmtvlMskmInfoTrkm.java:453)] |
| JBSbatKKIFM249 | Class | Smart Balance application result file constant class — defines all field name constants for the output flat-file format |
| `JBSbatServiceInterfaceMap` | Class | Framework output item map — accumulates key-value pairs for file output via `setString()` |
| `JBSbatStringUtil.fillSpace` | Method | Framework string utility that pads a string to a specified length with spaces (left/right alignment) |
| `getSvcChrgStaymd` | Method | Helper that validates billing start dates against the current operation date — returns the original date if it is not blank and is on or before the operation date, otherwise returns blank |
| `isNullSpace` | Method | Framework utility that checks whether a string is null or contains only whitespace |
| opeDate | Field (inherited) | Current operation date used as reference for billing start date validation |
