---

# Business Logic — JBSbatKKKjFinDataInTrn.insertKktkSvcKei() [300 LOC]

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

## 1. Role

### JBSbatKKKjFinDataInTrn.insertKktkSvcKei()

This method performs the core registration (insert) processing for an **Equipment-Provided Service Contract** (機器提供サービス契約 — a Fujitsu K-Opticom entity where telecommunications equipment such as routers, optical terminals, or set-top boxes is leased/provided as part of a service plan). It acts as a **data assembler and dispatcher**: it reads pre-populated data from an input map (`kktkSvcKei_map`) that carries the equipment-provided service contract payload (typically sourced from a submitted electronic form or batch file), resolves missing/null date fields against fallback values or operational configuration dates, normalizes all string fields via right-trimming, packages the complete record into a parameter array, and delegates the actual database insert to `executeKK_T_KKTK_SVC_KEI_PKINSERT()`.

The method implements a **conditional date-resolution pattern** — when key date fields (service start date, plan start date) are empty or NULL in the incoming map, it substitutes the values provided via the method parameters (`planStaymd2`, `planChrgStaymd2`), which originate from external routing rules (rule 75: start date, rule 67: billing start date). When the dates already exist in the map (e.g., from a re-entry or update scenario), it reads them directly from the map for consistency. The contract completion date (`keiCncYmd`) follows a similar null-coalescing pattern, defaulting to the operational date (`super.opeDate`) when absent.

This method is a **shared utility** called by multiple service-entry points — specifically `insertUpdatekktkSvcKeiNet()` (for FTTH/network service registrations) and `insertUpdateKktkSvcKeiTV()` (for TV service registrations) — making it a common data preparation step in the K-Opticom equipment-provided service insertion pipeline. It handles all 150+ fields of the `KK_T_KKTK_SVC_KEI` table in a single batch insert, covering equipment details, customer addresses, service schedules, cancellation/reservation data, and provisioning metadata.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["insertKktkSvcKei called"])
    START --> GET_KKTK_SVC_KEI_NO["Get KKTK_SVC_KEI_NO from map"]
    GET_KKTK_SVC_KEI_NO --> GET_SVC_STA_YMD["Get SVC_STA_YMD from map"]
    GET_SVC_STA_YMD --> SYS_DATE["Get system date from JCCBatCommon.getSysDateTimeStamp"]
    SYS_DATE --> SVC_EMPTY_CHECK{"Is svcStaymdStr empty or NULL?"}
    SVC_EMPTY_CHECK -->|Yes| SVC_FALLBACK["Set svcStaymd = planStaymd2
Set svcChrgStaymd = planChrgStaymd2
Set svcEndymd = 20991231
Set svcChrgEndymd = 20991231"]
    SVC_EMPTY_CHECK -->|No| SVC_FROM_MAP["Read SVC_STA_YMD, SVC_CHRG_STAYMD, SVC_ENDYMD, SVC_CHRG_ENDYMD from map"]
    SVC_FALLBACK --> KEI_CNC_YMD_CHECK{"Is KEI_CNC_YMD empty?"}
    SVC_FROM_MAP --> KEI_CNC_YMD_CHECK
    KEI_CNC_YMD_CHECK -->|Yes| KEI_CNC_OPER["Set keiCncYmd = super.opeDate (operational date)"]
    KEI_CNC_YMD_CHECK -->|No| KEI_CNC_MAP["Set keiCncYmd from map.getString(KEI_CNC_YMD)"]
    KEI_CNC_OPER --> PLAN_EMPTY_CHECK{"Is planStaymdStr empty?"}
    KEI_CNC_MAP --> PLAN_EMPTY_CHECK
    PLAN_EMPTY_CHECK -->|Yes| PLAN_FALLBACK["Set planStaymd = planStaymd2
Set planChrgStaymd = planChrgStaymd2
Set planEndymd = 20991231
Set planChrgEndymd = 20991231"]
    PLAN_EMPTY_CHECK -->|No| PLAN_FROM_MAP["Read PLAN_STAYMD, PLAN_CHRG_STAYMD, PLAN_ENDYMD, PLAN_CHRG_ENDYMD from map"]
    PLAN_FALLBACK --> KIKI_CHG_YMD["Set kikiChgYmdStr = kojiakFinYmd_151 (work completion date)"]
    PLAN_FROM_MAP --> KIKI_CHG_YMD
    KIKI_CHG_YMD --> BUILD_PARAM["Build setParam array (150+ fields) from map fields and resolved dates"]
    BUILD_PARAM --> DEBUG_LOG["Debug log all resolved date values"]
    DEBUG_LOG --> EXEC_INSERT["Call executeKK_T_KKTK_SVC_KEI_PKINSERT(setParam)"]
    EXEC_INSERT --> END_NODE(["Return / Next"])
```

**Constant Resolution:**
- `JBSbatKKConst.CD00056_KKTK_SVC_KEI_STAT_100 = "100"` — Equipment-provided service contract status: "Service in Progress" (サービス提供中). This is the initial/active status assigned to every new record.
- `JBSbatKKConst.RSV_APLY_CD_FIX = "2"` — Reservation application code: fixed value "2" for reservation apply.
- `JBSbatKKConst.MK_FLG_YK = "0"` — Mail flag: "0" indicates no mail-related processing.
- Default end date: `"20991231"` — A far-future sentinel date representing "no end date" (indefinite contract).

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `kktkSvcKei_map` | `JBSbatCommonDBInterface` | The input data map carrying the equipment-provided service contract entity. Contains pre-loaded values from a submitted form or batch file, including service codes, equipment identifiers, customer addresses, dates, and status flags. This is the primary data source — the method reads ~150+ fields from this map. |
| 2 | `mskmDtlNo` | `String` | Application detail number (申請明細番号) — the unique line-item identifier for the submitted application. Links this service contract to its parent application record. |
| 3 | `idoDiv` | `String` | Migration division code (異動区分) — classifies the type of equipment move/change event (e.g., customer combination, split, change, new installation). This code is stored directly in the contract record. |
| 4 | `planStaymd2` | `String` | Plan start date (プラン開始年月日) — fallback value for the service start date when the map does not provide one. Originates from routing rule 75 (開始日). Used as-is when the incoming map has an empty/null `SVC_STA_YMD`. |
| 5 | `planChrgStaymd2` | `String` | Plan billing start date (プラン課金開始年月日) — fallback value for the service billing start date. Originates from routing rule 67 (課金開始日). Used when the map's `SVC_CHRG_STAYMD` is empty or null. |
| 6 | `kojiakFinYmd_151` | `String` | Work completion date (工事完了日) — the date on which the installation/upgrade work was completed. Specifically referenced as "course change apply update interim file" (コース変更適用更新中ファイル). This becomes the `KIKI_CHG_YMD` (equipment change date) in the record. |

**Instance fields read by this method:**
| Field | Class | Business Description |
|-------|-------|---------------------|
| `super.opeDate` | Parent class | Operational date (運用日) — the business date used as the contract completion date when `KEI_CNC_YMD` is empty. Also used as the "reservation apply date" (予約適用年月日) in the output. |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `JBSbatStringUtil.Rtrim` | JBSbatStringUtil | In-memory | Right-trims string values extracted from the map — called 100+ times to clean all fields |
| R | `JBSbatCommonDBInterface.getString` | JBSbatCommonDBInterface | `KK_T_KKTK_SVC_KEI` | Reads individual fields from the input map — ~100+ reads for service contract data |
| R | `JCCBatCommon.getSysDateTimeStamp` | JCCBatCommon | System | Gets the current system date/time as a timestamp string for the `GENE_ADD_DTM` (generation/addition datetime) field |
| C | `executeKK_T_KKTK_SVC_KEI_PKINSERT` | JBSbatKKKjFinDataInTrn | `KK_T_KKTK_SVC_KEI` | Inserts the fully assembled equipment-provided service contract record into the database with all 150+ fields |
| - | `super.logPrint.printDebugLog` | (parent class) | - | Debug logging of all resolved date values (7 debug log calls) |
| - | `isEmpty` | (parent class, inherited) | - | Null/empty check utility for string validation on 3 date fields |

### Detailed analysis:

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `JBSbatCommonDBInterface.getString(KKTK_SVC_KEI_NO)` | JBSbatCommonDBInterface | `KK_T_KKTK_SVC_KEI` | Reads the equipment-provided service contract number (KKTK_SVC_KEI_NO) from the input map |
| R | `JBSbatCommonDBInterface.getString(SVC_STA_YMD)` | JBSbatCommonDBInterface | `KK_T_KKTK_SVC_KEI` | Reads the service start date (SVC_STA_YMD) to determine if it's populated |
| R | `JBSbatCommonDBInterface.getString(KEI_CNC_YMD)` | JBSbatCommonDBInterface | `KK_T_KKTK_SVC_KEI` | Reads the contract completion date to check for null/empty |
| R | `JBSbatCommonDBInterface.getString(SVC_CHRG_STAYMD)` | JBSbatCommonDBInterface | `KK_T_KKTK_SVC_KEI` | Reads the service billing start date from map (when not using fallback) |
| R | `JBSbatCommonDBInterface.getString(SVC_ENDYMD)` | JBSbatCommonDBInterface | `KK_T_KKTK_SVC_KEI` | Reads the service end date from map (when not using fallback) |
| R | `JBSbatCommonDBInterface.getString(SVC_CHRG_ENDYMD)` | JBSbatCommonDBInterface | `KK_T_KKTK_SVC_KEI` | Reads the service billing end date from map (when not using fallback) |
| R | `JBSbatCommonDBInterface.getString(PERMANENT_PLAN_START_DATE)` | JBSbatCommonDBInterface | `KK_T_KKTK_SVC_KEI` | Reads the plan start date to check for null/empty |
| R | `JCCBatCommon.getSysDateTimeStamp` | JCCBatCommon | System | Obtains the system timestamp for the generation/addition datetime field (GENE_ADD_DTM) |
| C | `executeKK_T_KKTK_SVC_KEI_PKINSERT` | JBSbatKKKjFinDataInTrn | `KK_T_KKTK_SVC_KEI` | Performs the database insert — creates a new equipment-provided service contract record with all fields mapped from the parameter array |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | JBSbatKKKjFinDataInTrn.insertUpdatekktkSvcKeiNet() | `insertUpdatekktkSvcKeiNet()` -> `insertKktkSvcKei(kktkSvcKei_map, mskmDtlNo, idoDiv, planStaymd2, planChrgStaymd2, kojiakFinYmd_151)` | `executeKK_T_KKTK_SVC_KEI_PKINSERT [C] KK_T_KKTK_SVC_KEI` |
| 2 | JBSbatKKKjFinDataInTrn.insertUpdateKktkSvcKeiTV() | `insertUpdateKktkSvcKeiTV()` -> `insertKktkSvcKei(kktkSvcKei_map, mskmDtlNo, idoDiv, planStaymd2, planChrgStaymd2, kojiakFinYmd_151)` | `executeKK_T_KKTK_SVC_KEI_PKINSERT [C] KK_T_KKTK_SVC_KEI` |

**Terminal operations from this method:**
- `executeKK_T_KKTK_SVC_KEI_PKINSERT` [C] `KK_T_KKTK_SVC_KEI` — Creates a new equipment-provided service contract record
- `JBSbatStringUtil.Rtrim` [R] × 100+ — String right-trimming for all map-extracted fields
- `JBSbatCommonDBInterface.getString` [R] × 100+ — Reads equipment-provided service contract fields
- `JCCBatCommon.getSysDateTimeStamp` [R] — Gets system timestamp

## 6. Per-Branch Detail Blocks

### Block 1 — INITIAL FIELD EXTRACTION (L10347-L10366)

Reads key fields from the input map and obtains the system date.

| # | Type | Code |
|---|------|------|
| 1 | SET | `kktkSvcKeiNoStr = JBSbatStringUtil.Rtrim(kktkSvcKei_map.getString(JBSbatKK_T_KKTK_SVC_KEI.KKTK_SVC_KEI_NO))` // Equipment-provided service contract number |
| 2 | SET | `planStaymdStr = ""` // Plan start date (initialized) |
| 3 | SET | `planChrgStaymdStr = ""` // Plan billing start date (initialized) |
| 4 | SET | `planEndymdStr = ""` // Plan end date (initialized) |
| 5 | SET | `planChrgEndymdStr = ""` // Plan billing end date (initialized) |
| 6 | SET | `svcStaymdStr = ""` // Service start date (initialized) |
| 7 | SET | `svcChrgStaymdStr = ""` // Service billing start date (initialized) |
| 8 | SET | `svcEndymdStr = ""` // Service end date (initialized) |
| 9 | SET | `svcChrgEndymdStr = ""` // Service billing end date (initialized) |
| 10 | SET | `kikiChgYmdStr = ""` // Equipment change date (initialized) |
| 11 | SET | `keiCncYmd = ""` // Contract completion date (initialized) |
| 12 | SET | `kktkSvcKeiNoStr = JBSbatStringUtil.Rtrim(kktkSvcKei_map.getString(JBSbatKK_T_KKTK_SVC_KEI.KKTK_SVC_KEI_NO))` // Read equipment-provided service contract number |
| 13 | SET | `svcStaymdStr = JBSbatStringUtil.Rtrim(kktkSvcKei_map.getString(JBSbatKK_T_KKTK_SVC_KEI.SVC_STA_YMD))` // Read service start date |
| 14 | SET | `planStaymdStr = JBSbatStringUtil.Rtrim(kktkSvcKei_map.getString(JBSbatKK_T_KKTK_SVC_KEI.PLAN_STAYMD))` // Read plan start date |
| 15 | SET | `sysDate = JCCBatCommon.getSysDateTimeStamp()` // Get system date/time stamp [-> JCCBatCommon.getSysDateTimeStamp()] |

### Block 2 — IF [SVC_STA_YMD is empty or NULL] (L10368-L10378)

> When the service start date is empty or NULL in the input map, use fallback values from the method parameters and set a far-future end date.

| # | Type | Code |
|---|------|------|
| 1 | SET | `svcStaymdStr = planStaymd2` // Service start date = fallback from plan start date param (rule 75: start date) |
| 2 | SET | `svcChrgStaymdStr = planChrgStaymd2` // Service billing start date = fallback from plan billing start date param (rule 67: billing start date) |
| 3 | SET | `svcEndymdStr = "20991231"` // Service end date = sentinel far-future date (indefinite) |
| 4 | SET | `svcChrgEndymdStr = "20991231"` // Service billing end date = sentinel far-future date (indefinite) |

### Block 3 — ELSE [SVC_STA_YMD has data] (L10379-L10388)

> When the service start date is already populated in the map, read all four service date fields from the map for consistency.

| # | Type | Code |
|---|------|------|
| 1 | SET | `svcStaymdStr = JBSbatStringUtil.Rtrim(kktkSvcKei_map.getString(JBSbatKK_T_KKTK_SVC_KEI.SVC_STA_YMD))` // Service start date from map |
| 2 | SET | `svcChrgStaymdStr = JBSbatStringUtil.Rtrim(kktkSvcKei_map.getString(JBSbatKK_T_KKTK_SVC_KEI.SVC_CHRG_STAYMD))` // Service billing start date from map |
| 3 | SET | `svcEndymdStr = JBSbatStringUtil.Rtrim(kktkSvcKei_map.getString(JBSbatKK_T_KKTK_SVC_KEI.SVC_ENDYMD))` // Service end date from map |
| 4 | SET | `svcChrgEndymdStr = JBSbatStringUtil.Rtrim(kktkSvcKei_map.getString(JBSbatKK_T_KKTK_SVC_KEI.SVC_CHRG_ENDYMD))` // Service billing end date from map |

### Block 4 — IF [KEI_CNC_YMD is empty] (L10390-L10395)

> When the contract completion date is empty in the map, use the operational date.

| # | Type | Code |
|---|------|------|
| 1 | SET | `keiCncYmd = super.opeDate` // Contract completion date = operational date |

### Block 5 — ELSE [KEI_CNC_YMD has data] (L10396-L10400)

> When the contract completion date is already in the map, read it directly.

| # | Type | Code |
|---|------|------|
| 1 | SET | `keiCncYmd = JBSbatStringUtil.Rtrim(kktkSvcKei_map.getString(JBSbatKK_T_KKTK_SVC_KEI.KEI_CNC_YMD))` // Contract completion date from map |

### Block 6 — IF [planStaymdStr is empty or NULL] (L10401-L10411)

> When the plan start date is empty or NULL, use fallback values and set far-future end dates.

| # | Type | Code |
|---|------|------|
| 1 | SET | `planStaymdStr = planStaymd2` // Plan start date = fallback from param |
| 2 | SET | `planChrgStaymdStr = planChrgStaymd2` // Plan billing start date = fallback from param |
| 3 | SET | `planEndymdStr = "20991231"` // Plan end date = sentinel far-future date |
| 4 | SET | `planChrgEndymdStr = "20991231"` // Plan billing end date = sentinel far-future date |

### Block 7 — ELSE [planStaymdStr has data] (L10412-L10421)

> When the plan start date is already populated in the map, read all four plan date fields from the map.

| # | Type | Code |
|---|------|------|
| 1 | SET | `planStaymdStr = JBSbatStringUtil.Rtrim(kktkSvcKei_map.getString(JBSbatKK_T_KKTK_SVC_KEI.PLAN_STAYMD))` // Plan start date from map |
| 2 | SET | `planChrgStaymdStr = JBSbatStringUtil.Rtrim(kktkSvcKei_map.getString(JBSbatKK_T_KKTK_SVC_KEI.PLAN_CHRG_STAYMD))` // Plan billing start date from map |
| 3 | SET | `planEndymdStr = JBSbatStringUtil.Rtrim(kktkSvcKei_map.getString(JBSbatKK_T_KKTK_SVC_KEI.PLAN_ENDYMD))` // Plan end date from map |
| 4 | SET | `planChrgEndymdStr = JBSbatStringUtil.Rtrim(kktkSvcKei_map.getString(JBSbatKK_T_KKTK_SVC_KEI.PLAN_CHRG_ENDYMD))` // Plan billing end date from map |

### Block 8 — EQUIPMENT CHANGE DATE ASSIGNMENT (L10429)

Sets the equipment change date from the work completion date parameter.

| # | Type | Code |
|---|------|------|
| 1 | SET | `kikiChgYmdStr = kojiakFinYmd_151` // Equipment change date = work completion date (course change apply update interim file) |

### Block 9 — PARAMETER ARRAY BUILDING (L10433-L10593)

Builds the complete 150+ element parameter array for the database insert. This is the largest block in the method, mapping every field of the `KK_T_KKTK_SVC_KEI` table.

| # | Type | Code | Field Mapping |
|---|------|------|---------------|
| 1 | SET | `setParam[0] = kktkSvcKeiNoStr` | KKTK_SVC_KEI_NO — Equipment-provided service contract number |
| 2 | SET | `setParam[1] = sysDate` | GENE_ADD_DTM — Generation/addition datetime (system timestamp) |
| 3 | SET | `setParam[2] = JBSbatKKConst.CD00056_KKTK_SVC_KEI_STAT_100` // [-> "100" (Service in Progress)] | KKTK_SVC_KEI_STAT — Equipment-provided service contract status |
| 4 | SET | `setParam[3] = Rtrim(map.getString(KKTK_SVC_CD))` | KKTK_SVC_CD — Equipment-provided service code |
| 5 | SET | `setParam[4] = Rtrim(map.getString(PCRS_CD))` | PCRS_CD — Payment course code |
| 6 | SET | `setParam[5] = Rtrim(map.getString(PPLAN_CD))` | PPLAN_CD — Payment plan code |
| 7 | SET | `setParam[6] = Rtrim(map.getString(TK_HOSHIKI_KEI_NO))` | TK_HOSHIKI_KEI_NO — Provider contract number |
| 8 | SET | `setParam[7] = Rtrim(map.getString(KKTK_SBT_CD))` | KKTK_SBT_CD — Equipment-provided service type code |
| 9 | SET | `setParam[8] = Rtrim(map.getString(HAMBAI_SBT_CD))` | HAMBAI_SBT_CD — Sales type code |
| 10 | SET | `setParam[9] = Rtrim(map.getString(SVC_USE_STA_KIBO_YMD))` | SVC_USE_STA_KIBO_YMD — Service usage start desire date |
| 11-20 | SET | `setParam[10..19]` = Various map reads | RSV_TSTA_KIBO_YMD, KIBO_MAKER_CD, KIKI_SHITEI_SBT_CD, TAKNKIKI_SBT_CD, TAKNKIKI_MODEL_CD, KIKI_SEIZO_NO, HUZOKUHIN_SBT_CD, HUZOKUHIN_MODEL_CD, TAKNKIKI_SETHIN_MODEL_CD, KIKI_CHG_NO |
| 21-30 | SET | `setParam[20..29]` | KIKI_CHG_RSN_CD, TSUSHIN_KIKI_SET_CD, HDD_CAPA_CD, KIKI_STC_SAKI_PLACE_NO, SVC_KEI_NO, SVC_KEI_UCWK_NO, SVC_KEI_KAISEN_UCWK_NO, OP_SVC_KEI_NO, SYSID, mskmDtlNo |
| 31-45 | SET | `setParam[30..44]` | LINK_STB_FLG, KIKI_HKAT_SHITEI_SOKO_CD, KIKI_HKAT_SHITEI_SKDN_CD, KIKI_STI_JI_KRIPLACE_SKCD, KIKI_STI_JI_KOCOMP_CD, KIKI_STI_JI_KOCOMP_SLF_CD, KIKI_STI_JI_YTKSKOF_CD, KIKI_STI_JI_YTKSKOF_SLF_CD, KKTK_SVC_KEI_HKHASYMD, KIKI_SORYO_UM, KIKI_SORYO_SAKSEI_YMD, KIKI_SOHUS_NM, KIKI_SOHUS_KANA, KIKI_SOHUS_AD_CD, KIKI_SOHUS_PCD |
| 46-60 | SET | `setParam[45..59]` | KIKI_SOHUS_STATE_NM, KIKI_SOHUS_CITY_NM, KIKI_SOHUS_OAZTSU_NM, KIKI_SOHUS_AZCHO_NM, KIKI_SOHUS_BNCHIGO, KIKI_SOHUS_ADRTTM, KIKI_SOHUS_ADRRM, KIKI_SHS_AD_MAN_INPUT_FLG, KIKI_SOHUS_TELNO, MANSION_BUKKEN_NO, KIKI_SOHUS_KSH_AD_SAI_FLG, KIKI_SHS_KBT_SHITEI_FLG, KIKI_SHS_HSK_CD_1, KIKI_SHS_HSK_CD_2, KIKI_SHS_HSK_MEMO |
| 61-75 | SET | `setParam[60..74]` | KIKI_STC_SAKI_NM, KIKI_STC_SAKI_KANA, KIKI_STC_SAKI_AD_CD, KIKI_STC_SAKI_PCD, KIKI_STC_SAKI_STATE_NM, KIKI_STC_SAKI_CITY_NM, KIKI_STC_SAKI_OAZTSU_NM, KIKI_STC_SAKI_AZCHO_NM, KIKI_STC_SAKI_BNCHIGO, KIKI_STC_SAKI_ADRTTM, KIKI_STC_SAKI_ADRRM, KIKI_STC_SK_KSH_AD_SAI_FLG, KIKI_STC_SK_TELNO, KIKI_STS_KKK_SEIRI_CHU_FLG, AD_MI_FIX_FLG |
| 76-90 | SET | `setParam[75..89]` | AUTO_ADD_CD, AD_MI_FIX_RLS_YMD, CHRG_STA_YMD_HOSEI_UM, KIKI_STS_HSK_CD_1, KIKI_STS_HSK_CD_2, KIKI_STS_HSK_MEMO, KKTK_SVC_KEI_KZKWRK_REQYMD, SHOSA_YMD, SHOSA_CL_YMD, HAISO_DIV, HAISO_KIGEN_YMD, HAISO_ARIV_SHITEI_YMD, FTRIAL_KANYU_YMD, FTRIAL_PRD_ENDYMD, HONKANYU_YMD |
| 91-105 | SET | `setParam[90..104]` | HONKANYU_IKO_KIGEN_YMD, keiCncYmd, JCCC_KANYU_BUNSHO_YMD, HOSHO_CD, KKTK_SVKEI_HOKI, HOSHO_STAYMD, HOSHO_END_YMD, super.opeDate, RSV_CL_YMD, RSV_APLY_CD_FIX (→ "2"), kikiChgYmdStr, planStaymdStr, planEndymdStr, planChrgStaymdStr, planChrgEndymdStr |
| 106-120 | SET | `setParam[105..119]` | PLAN_END_SBT_CD, SVC_CANCEL_YMD, SVC_CANCEL_RSN_CD, SVC_STA_KISAN_YMD, svcStaymdStr, svcChrgStaymdStr, SVC_STP_YMD, SVCTK_CHU_USE_FAIL_SBT_CD, SVC_STP_RSN_CD, SVC_STP_RLS_YMD, SVC_STP_RLS_RSN_CD, PAUSE_STP_CD, SVC_PAUSE_YMD, SVC_PAUSE_RSN_CD, SVC_PAUSE_RSN_MEMO |
| 121-135 | SET | `setParam[120..134]` | SVC_PAUSE_RLS_YMD, SVC_PAUSE_RLS_RSN_CD, SVC_PAUSE_RLS_RSN_MEMO, svcEndymdStr, svcChrgEndymdStr, SVC_DSL_YMD, SVC_DLRE_CD, SVC_DLRE_MEMO, ZANCHI_FLG, SVC_DSL_TTDKI_FIN_FLG, KAIHK_YMD, SVC_CANCEL_CL_YMD, SVC_DSL_CL_YMD, SKEKKA_SEND_CD, SVC_PAUSE_CHRG_STA_YMD |
| 136-150 | SET | `setParam[135..149]` | PNLTY_HASSEI_CD, KIKI_NINSHO_ID, KIKI_NINSHO_ID_PWD, idoDiv, KKST_JSEKI_UK_YMD, EO_TV_KKST_SNN_STAT_CD, KKST_SNN_YMD, TAKNKIKI_IDO_CD, CAS_CARD_USE_KYODAK_YMD, KIKI_HUKA_INFO_CD, SHOSA_DSL_FIN_CD, ROUTER_DSL_RSV_TRN_STAT_CD, ROUTER_DSL_RSV_TRN_RSLT_CD, HAISO_WAY_CD, KIKI_ITENS_MV_JSSIS_SKCD |
| 151-158 | SET | `setParam[150..157]` | KAISHU_KIKI_UM, HAISO_REQ_SHITEI_YMD, SHKA_FIN_JI_SYRZM_FLG, SVC_STA_JI_HIS_JOKYO_SKCD, "", "", "", "" |
| 159 | SET | `setParam[158] = JBSbatKKConst.MK_FLG_YK` // [-> "0" (Mail flag)] | MK_FLG_YK — Mail usage flag |
| 160-166 | SET | `setParam[159..165]` | "", "", "", "", "", "", "" |
| 167 | SET | `setParam[166] = Rtrim(map.getString(HCPRD_STAD_SNSTSTD_YMD))` | HCPRD_STAD_SNSTSTD_YMD — High-class product service start notice start date |
| 168 | SET | `setParam[167] = Rtrim(map.getString(HCPRD_STAD_SNSTSTD_YMD_IKF))` | HCPRD_STAD_SNSTSTD_YMD_IKF — First notice date (v10.00.00 addition) |
| 169 | SET | `setParam[168] = Rtrim(map.getString(HCPRD_STAD_SNSTSTD_YMD_SCD))` | HCPRD_STAD_SNSTSTD_YMD_SCD — Second notice date (v10.00.00 addition) |

### Block 10 — DEBUG LOGGING (L10426-L10432)

Logs all resolved date values for debugging purposes. Each line is a debug log entry with the Japanese label and resolved value.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `super.logPrint.printDebugLog("機器登録(機器提供サービス契約番号): " + kktkSvcKeiNoStr)` // Device registration: equipment-provided service contract number |
| 2 | EXEC | `super.logPrint.printDebugLog("機器登録(サービス開始年月日): " + svcStaymdStr)` // Device registration: service start date |
| 3 | EXEC | `super.logPrint.printDebugLog("機器登録(サービス課金開始年月日): " + svcChrgStaymdStr)` // Device registration: service billing start date |
| 4 | EXEC | `super.logPrint.printDebugLog("機器登録(サービス終了年月日): " + svcEndymdStr)` // Device registration: service end date |
| 5 | EXEC | `super.logPrint.printDebugLog("機器登録(サービス課金終了年月日): " + svcChrgEndymdStr)` // Device registration: service billing end date |
| 6 | EXEC | `super.logPrint.printDebugLog("機器登録(プラン終了年月日): " + planEndymdStr)` // Device registration: plan end date |
| 7 | EXEC | `super.logPrint.printDebugLog("機器登録(プラン課金終了年月日): " + planChrgEndymdStr)` // Device registration: plan billing end date |

### Block 11 — EXECUTE INSERT (L10644)

Delegates the actual database insert to the PK insert execution method.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `executeKK_T_KKTK_SVC_KEI_PKINSERT(setParam)` // [-> insert KK_T_KKTK_SVC_KEI record] |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `KKTK_SVC_KEI_NO` | Field | Equipment-provided service contract number — unique identifier for a service contract line that includes equipment leasing |
| `KKTK_SVC_KEI_STAT` | Field | Equipment-provided service contract status — current lifecycle state of the contract (e.g., 100 = Service in Progress) |
| `KKTK_SVC_CD` | Field | Equipment-provided service code — identifies the type of equipment-provided service |
| `SVC_STA_YMD` | Field | Service start date (yyyyymmdd) — when the service actually begins |
| `SVC_CHRG_STAYMD` | Field | Service billing start date — when billing for the service begins |
| `SVC_ENDYMD` | Field | Service end date — when the service terminates (20991231 = no end date) |
| `SVC_CHRG_ENDYMD` | Field | Service billing end date — when billing terminates |
| `PLAN_STAYMD` | Field | Plan start date — when the pricing plan begins |
| `PLAN_CHRG_STAYMD` | Field | Plan billing start date — when plan charges begin |
| `PLAN_ENDYMD` | Field | Plan end date — when the pricing plan terminates |
| `PLAN_CHRG_ENDYMD` | Field | Plan billing end date — when plan billing terminates |
| `KEI_CNC_YMD` | Field | Contract completion date — when the contract was formally completed |
| `KIKI_CHG_YMD` | Field | Equipment change date — when equipment was changed/modified |
| `kojiakFinYmd_151` | Field | Work completion date — the date installation/upgrade work finished (routing rule 151) |
| `planStaymd2` | Field | Plan start date from method parameter (routing rule 75: start date) |
| `planChrgStaymd2` | Field | Plan billing start date from method parameter (routing rule 67: billing start date) |
| `mskmDtlNo` | Field | Application detail number — links this contract to its parent application |
| `idoDiv` | Field | Migration division code — classifies the type of equipment move/change event |
| `opeDate` | Field | Operational date (super class field) — the business date used as the default contract completion date |
| `GENE_ADD_DTM` | Field | Generation/addition datetime — system timestamp when the record was created |
| `CD00056_KKTK_SVC_KEI_STAT_100` | Constant | Status code "100" = Equipment-provided service contract status: Service in Progress |
| `RSV_APLY_CD_FIX` | Constant | Fixed value "2" = Reservation application code |
| `MK_FLG_YK` | Constant | Flag "0" = Mail flag (no mail processing) |
| `KK_T_KKTK_SVC_KEI` | Table | Equipment-provided service contract table — stores all equipment leasing service contract records |
| 機器提供サービス契約 | Term | Equipment-provided service contract — a contract where Fujitsu K-Opticom provides telecommunications equipment (routers, optical terminals, etc.) as part of a service plan |
| 申請明細番号 | Term | Application detail number — the unique line-item identifier for a submitted application |
| 異動区分 | Term | Migration/division code — classifies the type of equipment move (combination, split, change, new install) |
| ルール75 | Term | Routing rule 75 — the business rule code for the start date fallback value |
| ルール67 | Term | Routing rule 67 — the business rule code for the billing start date fallback value |
| 20991231 | Constant | Far-future sentinel date meaning "no end date" / indefinite contract duration |

---

## FINAL STEP (MANDATORY)
The document has been saved to `.codewiki/dd/JBSbatKKKjFinDataInTrn/insertKktkSvcKei.md`.
