# Business Logic — JBSbatKKAdHenkoHoyuDataUpd.createSeikyKeiRec() [155 LOC]

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

## 1. Role

### JBSbatKKAdHenkoHoyuDataUpd.createSeikyKeiRec()

This method serves as the **invoice contract record builder** within the K-Optik billing/contract update service layer. Its primary responsibility is to assemble a flat, 68-element parameter array (`setParam`) from two structured data sources — `seikyKeiKeyMap` (the current invoice contract entity data) and `dbList` (the updated address information) — and then delegate the persistence to `executeKK_T_SEIKY_KEI_PKINSERT()` for insertion into the `KK_T_SEIKY_KEI` table.

The method implements a **flat-mapping / data-transfer** pattern: it does not contain any conditional branching, loops, or business rules. Instead, it performs a linear projection of every column in the invoice contract entity (`KK_T_SEIKY_KEI`) plus the address fields from `dbList` into a sequential parameter array. Each field is extracted via its key, right-trimmed to remove trailing whitespace, and placed into the corresponding array slot. This design ensures the downstream INSERT call receives a pre-formed, ordered parameter list.

The method name `createSeikyKeiRec` translates to "Create Invoice Contract Record" (請求契約レコード作成). It is called by `insertSeikyKeiAddresData()` and represents the final data preparation step before an upsert/insert operation on the invoice contract master table. The method acts as a shared adapter between the contract entity model and the low-level database insert procedure, decoupling business logic from persistence mechanics.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["createSeikyKeiRec(seikyKeiKeyMap, dbList)"])
    INIT["Initialize setParam array (68 elements)"]
    SEIKY0["SetParam[0] - Invoice Contract No"]
    SEIKY1["SetParam[1] - Registration DateTime"]
    SEIKY2["SetParam[2] - Invoice Contract Status"]
    SEIKY3["SetParam[3] - SYSID"]
    SEIKY4["SetParam[4] - Mansion Owner ID"]
    SEIKY5["SetParam[5] - Application Detail No"]
    SEIKY6["SetParam[6] - Invoicing Method Code"]
    SEIKY7["SetParam[7] - Next Invoicing Method Code"]
    SEIKY8["SetParam[8] - Contract Date"]
    SEIKY9["SetParam[9] - Invoice Contract Termination Date"]
    SEIKY10["SetParam[10] - Termination Reason Code"]
    SEIKY11["SetParam[11] - Termination Reason Memo"]
    SEIKY12["SetParam[12] - Invoice Cycle Code"]
    SEIKY13["SetParam[13] - Invoicing Method Change Date"]
    SEIKY14["SetParam[14] - Invoice Contract Kana Name"]
    SEIKY15["SetParam[15] - Invoicing Method No (Bank)"]
    SEIKY16["SetParam[16] - Invoicing Method No (Credit Card)"]
    SEIKY17["SetParam[17] - Info Display Code"]
    SEIKY18["SetParam[18] - Invoice Issue Required"]
    SEIKY19["SetParam[19] - Invoice Recipient - Contract Addr Diff Flag"]
    SEIKY20["SetParam[20] - Invoice Recipient Name - Customer Name Diff Flag"]
    SEIKY22["SetParam[22] - Recipient Legal Entity Prefix/Suffix Code"]
    SEIKY23["SetParam[23] - Recipient Kana Name"]
    SEIKY24["SetParam[24] - Recipient Name"]
    SEIKY25["SetParam[25] - Recipient Dept Name"]
    SEIKY26["SetParam[26] - Recipient Responsible Person Name"]
    SEIKY27["SetParam[27] - Recipient Address (from dbList[0])"]
    SEIKY28["SetParam[28] - Recipient Postal Code (from dbList[1])"]
    SEIKY29["SetParam[29] - Recipient Prefecture Name (from dbList[2])"]
    SEIKY30["SetParam[30] - Recipient City/District/Town Name (from dbList[3])"]
    SEIKY31["SetParam[31] - Recipient Oaza/Chome Name (from dbList[4])"]
    SEIKY32["SetParam[32] - Recipient Choume/Me Name (from dbList[5])"]
    SEIKY33["SetParam[33] - Recipient Address Supplement - Building Name"]
    SEIKY34["SetParam[34] - Recipient Address Supplement - Room No"]
    SEIKY35["SetParam[35] - Recipient Lot Number"]
    SEIKY36["SetParam[36] - Recipient Address Manual Input Flag"]
    SEIKY37["SetParam[37] - Recipient Phone Number"]
    SEIKY38["SetParam[38] - Recipient FAX Number"]
    SEIKY39["SetParam[39] - Recipient Email Address"]
    SEIKY40["SetParam[40] - Invoice Document Recipient Change Date"]
    SEIKY41["SetParam[41] - Invoicing Method Application Adjustment Date"]
    SEIKY42["SetParam[42] - Forced Window Flag"]
    SEIKY43["SetParam[43] - Reservation Application Start Desired Date"]
    SEIKY44["SetParam[44] - Reservation Application Date"]
    SEIKY45["SetParam[45] - Reservation Cancellation Date"]
    SEIKY46["SetParam[46] - Reservation Application Code"]
    SEIKY47["SetParam[47] - Anomaly Division"]
    SEIKY48["SetParam[48] - First Invoice Month"]
    SEIKY49["SetParam[49] - First Payment Invoice Issuing Required"]
    SEIKY50["SetParam[50] - First Payment Invoice Issuing Date"]
    SEIKY51["SetParam[51] - First Payment Invoice Receipt Date"]
    SEIKY52["SetParam[52] - Registration DateTime"]
    SEIKY53["SetParam[53] - Registration Operator Account"]
    SEIKY54["SetParam[54] - Update DateTime"]
    SEIKY55["SetParam[55] - Update Operator Account"]
    SEIKY56["SetParam[56] - Delete DateTime"]
    SEIKY57["SetParam[57] - Delete Operator Account"]
    SEIKY58["SetParam[58] - Invalid Flag"]
    SEIKY59["SetParam[59] - Registration Operation YearMonth"]
    SEIKY60["SetParam[60] - Registration Process ID"]
    SEIKY61["SetParam[61] - Update Operation YearMonth"]
    SEIKY62["SetParam[62] - Update Process ID"]
    SEIKY63["SetParam[63] - Delete Operation YearMonth"]
    SEIKY64["SetParam[64] - Delete Process ID"]
    SEIKY65["SetParam[65] - Payment Method Notification Email Control Code"]
    SEIKY66["SetParam[66] - Payment Method Notification Email Control Code Change Date"]
    SEIKY67["SetParam[67] - Forced Termination Warning Count"]
    EXEC["executeKK_T_SEIKY_KEI_PKINSERT(setParam)"]
    END(["Return / Next"])

    START --> INIT
    INIT --> SEIKY0 --> SEIKY1 --> SEIKY2 --> SEIKY3 --> SEIKY4 --> SEIKY5 --> SEIKY6 --> SEIKY7 --> SEIKY8 --> SEIKY9 --> SEIKY10 --> SEIKY11 --> SEIKY12 --> SEIKY13 --> SEIKY14 --> SEIKY15 --> SEIKY16 --> SEIKY17 --> SEIKY18 --> SEIKY19 --> SEIKY20 --> SEIKY22 --> SEIKY23 --> SEIKY24 --> SEIKY25 --> SEIKY26 --> SEIKY27 --> SEIKY28 --> SEIKY29 --> SEIKY30 --> SEIKY31 --> SEIKY32 --> SEIKY33 --> SEIKY34 --> SEIKY35 --> SEIKY36 --> SEIKY37 --> SEIKY38 --> SEIKY39 --> SEIKY40 --> SEIKY41 --> SEIKY42 --> SEIKY43 --> SEIKY44 --> SEIKY45 --> SEIKY46 --> SEIKY47 --> SEIKY48 --> SEIKY49 --> SEIKY50 --> SEIKY51 --> SEIKY52 --> SEIKY53 --> SEIKY54 --> SEIKY55 --> SEIKY56 --> SEIKY57 --> SEIKY58 --> SEIKY59 --> SEIKY60 --> SEIKY61 --> SEIKY62 --> SEIKY63 --> SEIKY64 --> SEIKY65 --> SEIKY66 --> SEIKY67 --> EXEC --> END
```

The method follows a linear data-mapping pattern with no conditional branches. Each step extracts a field value from one of the two input data sources and applies right-trimming via `JBSbatStringUtil.Rtrim()` before assigning to the corresponding array index. The array indices 27–32 are sourced from `dbList` (address data), while all other indices are sourced from `seikyKeyMap` (invoice contract entity data).

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `seikyKeiKeyMap` | `JBSbatCommonDBInterface` | The current invoice contract record data carrier. Provides access to all 59+ columns of the `KK_T_SEIKY_KEI` invoice contract master table. Fields are accessed via key constants from `JBSbatKK_T_SEIKY_KEI` (e.g., `SEIKY_KEI_NO`, `SYSID`, `SOHUS_TELNO`). This map represents the "before" or "current" state of the invoice contract being updated. |
| 2 | `dbList` | `JBSbatCommonDBInterface` | The updated address information data carrier. A positional list where indices 0–5 hold the six address components: recipient address, postal code, prefecture, city/district/town, oaza/chome name, and choume/me name. Used to supply the destination address fields for the invoice contract. |

**External state accessed:**

| Field | Type | Description |
|-------|------|-------------|
| `JBSbatKK_T_SEIKY_KEI.*` | Constants class | Column key constants for all `KK_T_SEIKY_KEI` table columns. Referenced via static getter methods (e.g., `JBSbatKK_T_SEIKY_KEI.SEIKY_KEI_NO()`). |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| U | `JBSbatStringUtil.Rtrim` | - | - | Right-trims whitespace from extracted string values; called 68 times across all setParam assignments. |
| R | `JBSbatCommonDBInterface.getString` | - | KK_T_SEIKY_KEI | Reads 62 invoice contract entity fields from `seikyKeiKeyMap`. |
| R | `JBSbatCommonDBInterface.getValue` | - | dbList (address data) | Reads 6 address components from `dbList` at indices 0–5. |
| C | `JBSbatKKAdHenkoHoyuDataUpd.executeKK_T_SEIKY_KEI_PKINSERT` | EKK0444D010SC (inferred) | KK_T_SEIKY_KEI | Inserts/updates the invoice contract record in the database using the assembled 68-element parameter array. |

## 5. Dependency Trace

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

No screen/batch entry points found within 8 hops. Direct callers found: 1 method.
Terminal operations from this method: `executeKK_T_SEIKY_KEI_PKINSERT` [C], `Rtrim` [-] (68 times), `getString` [R] (62 times), `getValue` [R] (6 times).

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Caller: JBSbatKKAdHenkoHoyuDataUpd.insertSeikyKeiAddresData | `insertSeikyKeiAddresData` -> `createSeikyKeiRec(seikyKeiKeyMap, dbList)` | `executeKK_T_SEIKY_KEI_PKINSERT` [C] KK_T_SEIKY_KEI |

## 6. Per-Branch Detail Blocks

> This method contains no conditional branches (if/else, switch, loops). It is a linear sequence of 68 field assignments followed by a single method call. The blocks below document the sequential processing at field-granularity.

**Block 1** — [ARRAY INIT] `(L4436)`

Initialize the `setParam` array with 68 slots. The array size evolved from 65 to 67 to 68 across release history (OM-2016-0000059, ANK-3396-00-00).

| # | Type | Code |
|---|------|------|
| 1 | SET | `setParam = new String[68];` // 68-element string array for invoice contract fields [-> ANK-3396-00-00] |

**Block 2** — [LINEAR FIELD MAPPING] `(L4439–L4587)`

Extract and right-trim 68 fields from `seikyKeiKeyMap` and `dbList`, assigning each to the corresponding `setParam` index. This block covers 49 consecutive field extractions from `seikyKeiKeyMap` (indices 0–26, 33–67) and 6 from `dbList` (indices 27–32).

| # | Type | Code | Business Description |
|---|------|------|---------------------|
| 1 | SET | `setParam[0] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_KEI_NO()));` | Invoice Contract No (請求契約番号) [-> JBSbatKK_T_SEIKY_KEI.SEIKY_KEI_NO] |
| 2 | SET | `setParam[1] = JBSbatStringUtil.Rtrim((String)dbList.getValue(8));` | Registration Year/Month/Day/Time (世代登録年月日时分秒) — from dbList index 8 |
| 3 | SET | `setParam[2] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_KEI_STAT()));` | Invoice Contract Status (請求契約ステータス) |
| 4 | SET | `setParam[3] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SYSID()));` | System ID (SYSID) |
| 5 | SET | `setParam[4] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.MANSION_OWNR_ID()));` | Mansion Owner ID (マンションオーナーID) |
| 6 | SET | `setParam[5] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.MSKM_DTL_NO()));` | Application Detail No (申込明細番号) |
| 7 | SET | `setParam[6] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_WAY_CD()));` | Invoicing Method Code (請求方法コード) |
| 8 | SET | `setParam[7] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.NEXT_SEIKY_WAY_DIV()));` | Next Invoicing Method Code (次回請求方法コード) |
| 9 | SET | `setParam[8] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.KEI_CNC_YMD()));` | Contract Date (契約締結年月日) |
| 10 | SET | `setParam[9] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_KEI_DSL_YMD()));` | Invoice Contract Termination Date (請求契約解約年月日) |
| 11 | SET | `setParam[10] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_KEI_DLRE_CD()));` | Termination Reason Code (請求契約解約理由コード) |
| 12 | SET | `setParam[11] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_KEI_DLRE_MEMO()));` | Termination Reason Memo (請求契約解約理由メモ) |
| 13 | SET | `setParam[12] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_CYCLE_CD()));` | Invoice Cycle Code (請求サイクルコード) |
| 14 | SET | `setParam[13] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_WAY_CHGE_YMD()));` | Invoicing Method Change Date (請求方法変更年月日) |
| 15 | SET | `setParam[14] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_KEI_KANA()));` | Invoice Contract Kana Name (請求契約カナ名) |
| 16 | SET | `setParam[15] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_WAY_NO_KOZA()));` | Invoicing Method No - Bank (請求方法番号(口座)) |
| 17 | SET | `setParam[16] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_WAY_NO_CRECARD()));` | Invoicing Method No - Credit Card (請求方法番号(クレジットカード)) |
| 18 | SET | `setParam[17] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.INFO_DSP_CD()));` | Info Display Code (情報表示コード) |
| 19 | SET | `setParam[18] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SEIKYUS_HAKKO_YH()));` | Invoice Issue Required (請求書発行要否) |
| 20 | SET | `setParam[19] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SKS_SHS_KSH_AD_SAI_FLG()));` | Invoice Recipient - Contract Addr Diff Flag (請求書送付先_契約者住所差分フラグ) |
| 21 | SET | `setParam[20] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SKS_SHS_NM_CUST_NM_SAI_FLG()));` | Invoice Recipient Name - Customer Name Diff Flag (請求書送付先名_お客様名差分フラグ) |
| 22 | SET | `setParam[21] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SHS_HOJIN_SBT_CD()));` | Recipient Legal Entity Type Code (送付先法人格種別コード) |
| 23 | SET | `setParam[22] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SHS_HOJIN_ZENGO_SHITEI_CD()));` | Recipient Legal Entity Prefix/Suffix Code (送付先法人格前後指定コード) |
| 24 | SET | `setParam[23] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SHS_KANA()));` | Recipient Kana Name (送付先カナ名) |
| 25 | SET | `setParam[24] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_NM()));` | Recipient Name (送付先名) |
| 26 | SET | `setParam[25] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_BKM()));` | Recipient Dept Name (送付先部課名) |
| 27 | SET | `setParam[26] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_TNTSHA_NM()));` | Recipient Responsible Person Name (送付先担当者名) |
| 28 | SET | `setParam[27] = JBSbatStringUtil.Rtrim((String)dbList.getValue(0));` | Recipient Address (送付先住所) — from dbList[0] |
| 29 | SET | `setParam[28] = JBSbatStringUtil.Rtrim((String)dbList.getValue(1));` | Recipient Postal Code (送付先郵便番号) — from dbList[1] |
| 30 | SET | `setParam[29] = JBSbatStringUtil.Rtrim((String)dbList.getValue(2));` | Recipient Prefecture Name (送付先都道府県名) — from dbList[2] |
| 31 | SET | `setParam[30] = JBSbatStringUtil.Rtrim((String)dbList.getValue(3));` | Recipient City/District/Town Name (送付先市区町村名) — from dbList[3] |
| 32 | SET | `setParam[31] = JBSbatStringUtil.Rtrim((String)dbList.getValue(4));` | Recipient Oaza/Chome Name (送付先大字町名) — from dbList[4] |
| 33 | SET | `setParam[32] = JBSbatStringUtil.Rtrim((String)dbList.getValue(5));` | Recipient Choume/Me Name (送付先丁目目名) — from dbList[5] |
| 34 | SET | `setParam[33] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_ADRTTM()));` | Recipient Address Supplement - Building Name (送付先住所補足·建物名) |
| 35 | SET | `setParam[34] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_ADRRM()));` | Recipient Address Supplement - Room No (送付先住所補足·部屋番号) |
| 36 | SET | `setParam[35] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_BNCHIGO()));` | Recipient Lot Number (送付先番号) |
| 37 | SET | `setParam[36] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_AD_MAN_INPUT_FLG()));` | Recipient Address Manual Input Flag (送付先住所手動入力フラグ) |
| 38 | SET | `setParam[37] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_TELNO()));` | Recipient Phone Number (送付先電話番号) |
| 39 | SET | `setParam[38] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_FAX_NO()));` | Recipient FAX Number (送付先FAX番号) |
| 40 | SET | `setParam[39] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_MLAD()));` | Recipient Email Address (送付先メールアドレス) |
| 41 | SET | `setParam[40] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SEIKYUS_SOHUS_CHGE_YMD()));` | Invoice Document Recipient Change Date (請求書送付先変更年月日) |
| 42 | SET | `setParam[41] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_WAY_APLY_ADJ_YMD()));` | Invoicing Method Application Adjustment Date (請求方法適用調整年月日) |
| 43 | SET | `setParam[42] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.KYOSEI_MADOGUCHI_FLG()));` | Forced Window Flag (強制窓口フラグ) |
| 44 | SET | `setParam[43] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.RSV_TSTA_KIBO_YMD()));` | Reservation Application Start Desired Date (予約適用開始希望年月日) |
| 45 | SET | `setParam[44] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.RSV_APLY_YMD()));` | Reservation Application Date (予約適用年月日) |
| 46 | SET | `setParam[45] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.RSV_CL_YMD()));` | Reservation Cancellation Date (予約取消年月日) |
| 47 | SET | `setParam[46] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.RSV_APLY_CD()));` | Reservation Application Code (予約適用コード) |
| 48 | SET | `setParam[47] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.IDO_DIV()));` | Anomaly Division (異動区分) |
| 49 | SET | `setParam[48] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.FIRST_SEIKY_YM()));` | First Invoice Month (初回請求年月) |
| 50 | SET | `setParam[49] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.FIRST_PAY_MSKMSHO_SOHU_YH()));` | First Payment Invoice Issuing Required (初回支払申込書送付要否) |
| 51 | SET | `setParam[50] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.FIRST_PAY_MSKMSHO_SOHU_YMD()));` | First Payment Invoice Issuing Date (初回支払申込書送付年月日) |
| 52 | SET | `setParam[51] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.FIRST_PAY_MSKMSHO_RCP_YMD()));` | First Payment Invoice Receipt Date (初回支払申込書受領年月日) |
| 53 | SET | `setParam[52] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.ADD_DTM()));` | Registration DateTime (登録年月日时分秒) |
| 54 | SET | `setParam[53] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.ADD_OPEACNT()));` | Registration Operator Account (登録オペレータアカウント) |
| 55 | SET | `setParam[54] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.UPD_DTM()));` | Update DateTime (更新年月日时分秒) |
| 56 | SET | `setParam[55] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.UPD_OPEACNT()));` | Update Operator Account (更新オペレータアカウント) |
| 57 | SET | `setParam[56] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.DEL_DTM()));` | Delete DateTime (削除年月日时分秒) |
| 58 | SET | `setParam[57] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.DEL_OPEACNT()));` | Delete Operator Account (削除オペレータアカウント) |
| 59 | SET | `setParam[58] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.MK_FLG()));` | Invalid Flag (無効フラグ) |
| 60 | SET | `setParam[59] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.ADD_UNYO_YMD()));` | Registration Operation YearMonth (登録運用年月日) |
| 61 | SET | `setParam[60] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.ADD_TRN_ID()));` | Registration Process ID (登録処理ID) |
| 62 | SET | `setParam[61] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.UPD_UNYO_YMD()));` | Update Operation YearMonth (更新運用年月日) |
| 63 | SET | `setParam[62] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.UPD_TRN_ID()));` | Update Process ID (更新処理ID) |
| 64 | SET | `setParam[63] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.DEL_UNYO_YMD()));` | Delete Operation YearMonth (削除運用年月日) |
| 65 | SET | `setParam[64] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.DEL_TRN_ID()));` | Delete Process ID (削除処理ID) |
| 66 | SET | `setParam[65] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.PAYWAYTCML_CTL_CD()));` | Payment Method Notification Email Control Code (支払方法通知メール制御コード) [-> OM-2016-0000059] |
| 67 | SET | `setParam[66] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.PAYWAYTCML_CTL_CD_CHG_YMD()));` | Payment Method Notification Email Control Code Change Date (支払方法通知メール制御コード変更年月日) [-> OM-2016-0000059] |
| 68 | SET | `setParam[67] = JBSbatStringUtil.Rtrim(seikyKeiKeyMap.getString(JBSbatKK_T_SEIKY_KEI.KYOSEI_DSL_YKK_CNT()));` | Forced Termination Warning Count (強制解約予告回数) [-> ANK-3396-00-00] |

**Block 3** — [PERSISTENCE DELEGATION] `(L4588)`

| # | Type | Code | Business Description |
|---|------|------|---------------------|
| 1 | CALL | `executeKK_T_SEIKY_KEI_PKINSERT(setParam);` | Delegate to the persistence layer. Executes the insert/update operation on the `KK_T_SEIKY_KEI` table using the fully populated 68-element parameter array. [C] KK_T_SEIKY_KEI |

**Block 4** — [RETURN] `(L4588)`

| # | Type | Code | Business Description |
|---|------|------|---------------------|
| 1 | RETURN | (void) | Method completes. No return value; side effect is the database insert performed by `executeKK_T_SEIKY_KEI_PKINSERT`. |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `seikyKei` | Field (Japanese) | Invoice Contract (請求契約) — the master contract record that governs billing for a subscriber |
| `SEIKY_KEI_NO` | Field | Invoice Contract No (請求契約番号) — unique identifier for the invoice contract |
| `SEIKY_KEI_STAT` | Field | Invoice Contract Status (請求契約ステータス) — current operational status of the contract |
| `SEIKY_WAY_CD` | Field | Invoicing Method Code (請求方法コード) — how billing is delivered (e.g., bank transfer, credit card) |
| `SEIKY_CYCLE_CD` | Field | Invoice Cycle Code (請求サイクルコード) — billing cycle classification (monthly, quarterly, etc.) |
| `KEI_CNC_YMD` | Field | Contract Date (契約締結年月日) — the date the service contract was signed |
| `SEIKY_KEI_DSL_YMD` | Field | Termination Date (請求契約解約年月日) — when the invoice contract was canceled |
| `SOHUS_NM` | Field | Recipient Name (送付先名) — name of the party receiving the invoice |
| `SOHUS_TELNO` | Field | Recipient Phone (送付先電話番号) — phone number for the invoice recipient |
| `SOHUS_ADRTTM` | Field | Address Supplement - Building (送付先住所補足·建物名) — building/apartment name for mailing |
| `SOHUS_ADRRM` | Field | Address Supplement - Room (送付先住所補足·部屋番号) — room/suite number for mailing |
| `RSV_APLY_CD` | Field | Reservation Application Code (予約適用コード) — code for a future-dated reservation applied to the contract |
| `KYOSEI_MADOGUCHI_FLG` | Field | Forced Window Flag (強制窓口フラグ) — flag indicating a forced/exceptional processing path |
| `MK_FLG` | Field | Invalid Flag (無効フラグ) — soft-delete indicator; when set, the record is logically inactive |
| `ADD_DTM` / `UPD_DTM` / `DEL_DTM` | Field | Registration / Update / Delete DateTime — audit timestamps for CREATE, UPDATE, DELETE events |
| `ADD_OPEACNT` / `UPD_OPEACNT` / `DEL_OPEACNT` | Field | Registration / Update / Delete Operator Account — audit user IDs for each lifecycle event |
| `ADD_TRN_ID` / `UPD_TRN_ID` / `DEL_TRN_ID` | Field | Registration / Update / Delete Process ID — batch/transaction identifier for audit tracking |
| `KK_T_SEIKY_KEI` | Table | Invoice Contract Master Table — the core relational table storing all invoice contract data |
| `seikyKeiKeyMap` | Parameter | Invoice Contract Current Data (請求契約カレントデータ) — the entity map holding current contract state |
| `dbList` | Parameter | Updated Address Info (更新用住所情報) — address data carrier for the invoice recipient |
| `setParam` | Local | 68-element parameter array — flat, ordered parameter list passed to the persistence layer |
| `executeKK_T_SEIKY_KEI_PKINSERT` | Method | Insert invoice contract record into KK_T_SEIKY_KEI — the terminal database operation |
| `JBSbatStringUtil.Rtrim` | Utility | Right-trim utility — strips trailing whitespace from string values before persistence |
| KKSV | Batch/Screen | K-Optik Service Screen — screen/batch prefix convention (KKSV = K-Optik Service Verification) |
| ANK-3396 | Change ticket | Internal change ticket (2019/02/04) that added `setParam[67]` for forced termination warning count |
| OM-2016-0000059 | Change ticket | Internal change ticket that added `setParam[65]` and `setParam[66]` for payment method notification email control |
| OM-2019-0000473 | Change ticket | Change ticket (2019/05/09) that switched from `JPCUtilCommon.Rtrim` to `JBSbatStringUtil.Rtrim` |
| `PAYWAYTCML_CTL_CD` | Field | Payment Method Notification Email Control Code (支払方法通知メール制御コード) — controls whether payment method notification emails are sent |
| `KYOSEI_DSL_YKK_CNT` | Field | Forced Termination Warning Count (強制解約予告回数) — number of termination warnings issued before forced cancellation |
