# Business Logic — JKKCancelSvcKeiMapperCC.mappinEKK0341C230SCInMsg() [473 LOC]

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

## 1. Role

### JKKCancelSvcKeiMapperCC.mappinEKK0341C230SCInMsg()

This method is the **incoming message mapper** for the equipment-provided service contract update service component (SC code: `EKK0341C230`). Its business purpose is to transform query result data (received as a `CAANMsg` containing a row from the service contract inquiry system) into the request message format expected by the service component that processes equipment-provided service contract changes (機器提供サービス契約変更 — "equipment-provided service contract modification").

The method implements a **linear data-routing pattern**: it iterates through a fixed set of ~45 fields, each belonging to one of several business entity groups — service contract identification, device/hardware attributes, delivery/shipping address (配送先), installation address (設置先), trial/contract lifecycle dates, financial codes (guarantee, penalty), delivery logistics parameters, and service status metadata. For every field, it performs a null-safe transfer: if the source (`caanMsg`) contains the field, it copies the value; if the source field is null or missing, it explicitly writes a null into the destination template. This ensures the downstream service component always receives a fully-initialized message envelope with no latent null-reference issues.

The method plays a critical role in the cancel-service processing pipeline. It is called by `JKKCancelSvcKeiCC.callEKK0341C230SC()` after a service contract inquiry has returned data and before the `EKK0341C230` service component executes. The method has no conditional branching by service type or content code — all fields are processed unconditionally in sequence. Its only parametric decisions involve the `updDtmBf` parameter (which may be provided directly rather than read from `caanMsg`) and the `svcStaJiHisJkSkCd` parameter (service start delivery status identification code), both of which come from the caller.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["mappinEKK0341C230SCInMsg"])
    
    START --> INIT["fillCAANMSGNullMapping<br/>Initialize template with nulls"]
    INIT --> SETMETA["Set TEMPLATEID = EKK0341C230<br/>Set FUNC_CODE = 1 (調査)"]
    
    SETMETA --> FIELDLOOP["Loop: Map each field from caanMsg to template<br/>~45 fields in fixed order"]
    
    FIELDLOOP --> CHECKNULL{"caanMsg<br/>.isNull(field)"}
    
    CHECKNULL -->|true - null| SETNULL["template.setNull(field)"]
    CHECKNULL -->|false - has value| SETVAL["template.set(field, caanMsg<br/>.getString(field))"]
    
    SETNULL --> NEXTFIELD{"More fields?"}
    SETVAL --> NEXTFIELD
    
    NEXTFIELD -->|yes - continue| FIELDLOOP
    NEXTFIELD -->|no - done| UPDDTMCHECK{"updDtmBf<br/>!= null?"}
    
    UPDDTMCHECK -->|yes| USEPROVIDED["template.set(UPD_DTM_BF, updDtmBf)"]
    UPDDTMCHECK -->|no - null| FALLBACKCHECK{"caanMsg<br/>.isNull(UPD_DTM_BF)"}
    
    FALLBACKCHECK -->|true - null| SETNULLUPD["template.setNull(UPD_DTM_BF)"]
    FALLBACKCHECK -->|false - has value| SETVALUPD["template.set(UPD_DTM_BF, caanMsg<br/>.getString(UPD_DTM_BF))"]
    
    USEPROVIDED --> SVCSTACHECK{"svcStaJiHisJkSkCd<br/>== null or empty?"}
    SETNULLUPD --> SVCSTACHECK
    SETVALUPD --> SVCSTACHECK
    
    SVCSTACHECK -->|yes| SETNULLSVC["template.setNull(SVC_STA_JI_HIS_JOKYO_SKCD)"]
    SVCSTACHECK -->|no| SETVALSVC["template.set(SVC_STA_JI_HIS_JOKYO_SKCD, svcStaJiHisJkSkCd)"]
    
    SETNULLSVC --> END(["Return void"])
    SETVALSVC --> END
```

**Constant Resolution:**

| Constant | Actual Value | Business Meaning |
|----------|-------------|------------------|
| `JKKSvkeiShosaClConstCC.FUNC_CODE_SHOSA` | `"1"` | Function code for inquiry/inspection (調査) |
| `EKK0341C230CBSMsg.TEMPLATEID` | `"EKK0341C230"` | Service component message template identifier |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `template` | `CAANMsg` | The target message envelope to populate. This is the outgoing request message for the `EKK0341C230` service component. It is first initialized with all fields set to null via `fillCAANMSGNullMapping`, then each field is populated from the source. |
| 2 | `caanMsg` | `CAANMsg` | The source message containing inquiry result data — i.e., the row returned from a service contract query. Each field in this message is checked and copied to `template` if present. Represents the business data for a single service contract instance including device info, delivery address, installation address, dates, and logistics metadata. |
| 3 | `svcStaJiHisJkSkCd` | `String` | Service start delivery status identification code (サービス開始時配送状況識別コード). Passed directly from the caller (e.g., `JKKSvcConst.SVC_STA_JI_HIS_TG_SKCD_TG` or `SVC_STA_JI_HIS_JOKYO_SKCD_1`). Indicates the delivery status state at service start (e.g., target delivery, normal delivery). If null or empty, the corresponding field in `template` is set to null. |
| 4 | `updDtmBf` | `String` | Update date-time before (更新年月日時分秒(更新前)). An explicit override value for the "last updated datetime" field. When provided (non-null), it takes precedence over the value in `caanMsg`. When not provided (null), the method falls back to reading from `caanMsg`. This allows the caller to inject a known timestamp when the source data may be stale or unavailable. |

**External state / instance fields read:** None. This method is purely stateless — it reads only its parameters and produces output in `template`.

## 4. CRUD Operations / Called Services

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `JKKCancelSvcKeiMapperCC.fillCAANMSGNullMapping` | - | - | Initializes all fields in `template` to null using the schema from `EKK0341C230CBSMsg`. Pre-condition setup step. |
| - | `EKK0341C230CBSMsg.getContents` | - | - | Returns the full set of field definitions for the `EKK0341C230CBSMsg` schema, used to populate the null-initialization map. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KKTK_SVC_KEI_NO)` | - | - | Reads service contract number (機器提供サービス契約番号) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KKTK_SBT_CD)` | - | - | Reads service type code (機器提供種別コード) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.HAMBAI_SBT_CD)` | - | - | Reads sales type code (販売種別コード) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.TAKNKIKI_MODEL_CD)` | - | - | Reads indoor device model code (宅内機器型式コード) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_SEIZO_NO)` | - | - | Reads device serial number (機器製造番号) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.HDD_CAPA_CD)` | - | - | Reads HDD capacity code (HDD容量コード) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.TSUSHIN_KIKI_SET_CD)` | - | - | Reads communication device set code (通信機器セットコード) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.LINK_STB_FLG)` | - | - | Reads link STB flag (リンクSTBフラグ) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_HKAT_SHITEI_SOKO_CD)` | - | - | Reads device allocation designation warehouse code (機器引当指定倉庫コード) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_HKAT_SHITEI_SKDN_CD)` | - | - | Reads device allocation designation shelf code (機器引当指定倉庫座コード) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_SORYO_UM)` | - | - | Reads device shipping fee flag (機器送料有無) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_SOHUS_NM)` | - | - | Reads delivery sender name (機器送付先名前) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_SOHUS_KANA)` | - | - | Reads delivery sender kana name (機器送付先カナ名) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_SOHUS_AD_CD)` | - | - | Reads delivery sender address code (機器送付先住所コード) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_SOHUS_PCD)` | - | - | Reads delivery sender postal code (機器送付先郵便番号) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_SOHUS_STATE_NM)` | - | - | Reads delivery sender prefecture name (機器送付先都道府県名) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_SOHUS_CITY_NM)` | - | - | Reads delivery sender city/town/village name (機器送付先市区町村名) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_SOHUS_OAZTSU_NM)` | - | - | Reads delivery sender oaza (大字通名称) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_SOHUS_AZCHO_NM)` | - | - | Reads delivery sender chome (字丁目名) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_SOHUS_BNCHIGO)` | - | - | Reads delivery sender banchi-go (番地号) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_SOHUS_ADRTTM)` | - | - | Reads delivery sender building name (機器送付先住所補記・建物名) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_SOHUS_ADRRM)` | - | - | Reads delivery sender room number (機器送付先住所補記・部屋番号) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_SOHUS_TELNO)` | - | - | Reads delivery sender phone number (機器送付先電話番号) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_SOHUS_KSH_AD_SAI_FLG)` | - | - | Reads contract holder address deviation flag (機器送付先_契約者住所差異フラグ) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_SHS_KBT_SHITEI_FLG)` | - | - | Reads individual designation flag (機器送付先個別指定フラグ) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_STC_SAKI_NM)` | - | - | Reads installation site name (機器設置先名) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_STC_SAKI_KANA)` | - | - | Reads installation site kana name (機器設置先カナ名) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_STC_SAKI_AD_CD)` | - | - | Reads installation site address code (機器設置先住所コード) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_STC_SAKI_PCD)` | - | - | Reads installation site postal code (機器設置先郵便番号) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_STC_SAKI_STATE_NM)` | - | - | Reads installation site prefecture name (機器設置先都道府県名) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_STC_SAKI_CITY_NM)` | - | - | Reads installation site city/town/village name (機器設置先市区町村名) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_STC_SAKI_OAZTSU_NM)` | - | - | Reads installation site oaza (機器設置先大字通名称) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_STC_SAKI_AZCHO_NM)` | - | - | Reads installation site chome (機器設置先字丁目名) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_STC_SAKI_BNCHIGO)` | - | - | Reads installation site banchi-go (機器設置先番地号) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_STC_SAKI_ADRTTM)` | - | - | Reads installation site building name (機器設置先住所補記・建物名) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_STC_SAKI_ADRRM)` | - | - | Reads installation site room number (機器設置先住所補記・部屋番号) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_STC_SK_KSH_AD_SAI_FLG)` | - | - | Reads installation site contract holder address deviation flag (機器設置先_契約者住所差異フラグ) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_STC_SK_TELNO)` | - | - | Reads installation site phone number (機器設置先電話番号) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_STS_KKK_SEIRI_CHU_FLG)` | - | - | Reads installation site area consolidation-in-progress flag (機器設置先区域整理中フラグ) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.AD_MI_FIX_FLG)` | - | - | Reads address undetermined flag (住所未確定フラグ) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.HAISO_DIV)` | - | - | Reads delivery division (配送区分) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.FTRIAL_KANYU_YMD)` | - | - | Reads trial addition date (試験加入年月日) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.FTRIAL_PRD_ENDYMD)` | - | - | Reads trial period end date (試験期間終了年月日) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.HONKANYU_YMD)` | - | - | Reads actual addition date (本加入年月日) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.HONKANYU_IKO_KIGEN_YMD)` | - | - | Reads actual addition transfer deadline date (本加入移行期限年月日) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.HOSHO_CD)` | - | - | Reads guarantee code (保証コード) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.PNLTY_HASSEI_CD)` | - | - | Reads penalty occurrence code (違約金発生コード) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.IDO_DIV)` | - | - | Reads movement division (異動区分) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.CAS_CARD_USE_KYODAK_YMD)` | - | - | Reads CAS card usage approval date (CASカード使用許可年月日) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_HUKA_INFO_CD)` | - | - | Reads device additional info code (機器追加情報コード) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.HAISO_WAY_CD)` | - | - | Reads delivery method code (配送方法コード) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_ITENS_MV_JSSIS_SKCD)` | - | - | Reads device transfer destination movement implementer ID code (機器移転先移動実施者識別コード) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.HAISO_REQ_SHITEI_YMD)` | - | - | Reads delivery request designation date (配送依頼指定年月日) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.UPD_DTM_BF)` | - | - | Reads update datetime before (更新年月日時分秒(更新前)) from source message (fallback only). |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KIKI_SHS_AD_MAN_INPUT_FLG)` | - | - | Reads delivery sender address manual input flag (機器送付先住所手入力フラグ) from source message. |
| R | `CAANMsg.getString(EKK0341C230CBSMsg.KAISHU_KIKI_UM)` | - | - | Reads return device flag (回収機器有無) from source message. |
| - | `CAANMsg.isNull(...)` | - | - | Called ~45 times to check null status of each source field before mapping. |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Class: JKKCancelSvcKeiCC | `callEKK0341C230SC` -> `mappinEKK0341C230SCInMsg` | `setNull`, `set` [R] — reads ~45 fields from caanMsg (inquiry result data) |

**Caller detail:** `JKKCancelSvcKeiCC.callEKK0341C230SC()` is the direct caller. It is invoked from within the cancel service processing flow, where inquiry results are retrieved and then mapped into the `EKK0341C230` service component request message. The caller passes:
- A `CAANMsg` template (the target)
- A `CAANMsg` containing inquiry results (the source)
- A service start delivery status code (e.g., `JKKSvcConst.SVC_STA_JI_HIS_TG_SKCD_TG`, `SVC_STA_JI_HIS_JOKYO_SKCD_1`, or `""`)
- An update datetime before string

The terminal operations are all `set` and `setNull` on the `template` message object — there are no external SC calls, database queries, or CBS invocations within this method. This method is purely an in-memory data transformer.

## 6. Per-Branch Detail Blocks

**Block 1** — [SETUP] (L5735)

Initialize the template message by setting all fields to null via `fillCAANMSGNullMapping`, then set the template ID and function code.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `fillCAANMSGNullMapping(template, new EKK0341C230CBSMsg().getContents())` // Null-initialize all fields |
| 2 | SET | `template.set(EKK0341C230CBSMsg.TEMPLATEID, "EKK0341C230")` // Set template identifier |
| 3 | SET | `template.set(EKK0341C230CBSMsg.FUNC_CODE, JKKSvkeiShosaClConstCC.FUNC_CODE_SHOSA)` // [-> FUNC_CODE_SHOSA="1"] Set function code for inquiry (調査) |

**Block 2** — [IF/ELSE chain: Map contract & device fields] (L5741-L5801)

Map service contract number, service type code, sales type code, device model, serial number, HDD capacity, and communication device set code.

| # | Type | Code | Business Description |
|---|------|------|---------------------|
| 1 | IF/ELSE | `if (caanMsg.isNull(KKTK_SVC_KEI_NO))` → `setNull` / else → `set(caanMsg.getString(KKTK_SVC_KEI_NO))` | Map equipment-provided service contract number (機器提供サービス契約番号) |
| 2 | IF/ELSE | `if (caanMsg.isNull(KKTK_SVC_KEI_NO))` → `setNull` / else → `set(caanMsg.getString(KKTK_SBT_CD))` | Map equipment-provided service type code (機器提供種別コード). Note: this block reuses `KKTK_SVC_KEI_NO` null check instead of checking `KKTK_SBT_CD` directly (likely a code defect). |
| 3 | IF/ELSE | `if (caanMsg.isNull(HAMBAI_SBT_CD))` → `setNull` / else → `set(caanMsg.getString(HAMBAI_SBT_CD))` | Map sales type code (販売種別コード) |
| 4 | IF/ELSE | `if (caanMsg.isNull(TAKNKIKI_MODEL_CD))` → `setNull` / else → `set(caanMsg.getString(TAKNKIKI_MODEL_CD))` | Map indoor device model code (宅内機器型式コード) |
| 5 | IF/ELSE | `if (caanMsg.isNull(KIKI_SEIZO_NO))` → `setNull` / else → `set(caanMsg.getString(KIKI_SEIZO_NO))` | Map device serial number (機器製造番号) |
| 6 | IF/ELSE | `if (caanMsg.isNull(HDD_CAPA_CD))` → `setNull` / else → `set(caanMsg.getString(HDD_CAPA_CD))` | Map HDD capacity code (HDD容量コード) |
| 7 | IF/ELSE | `if (caanMsg.isNull(TSUSHIN_KIKI_SET_CD))` → `setNull` / else → `set(caanMsg.getString(TSUSHIN_KIKI_SET_CD))` | Map communication device set code (通信機器セットコード) |

**Block 3** — [IF/ELSE chain: Map link STB, warehouse allocation, and device shipping info] (L5802-L5880)

Map link STB flag, device allocation warehouse/shelf codes, shipping fee/sender details.

| # | Type | Code | Business Description |
|---|------|------|---------------------|
| 1 | IF/ELSE | `if (caanMsg.isNull(LINK_STB_FLG))` → `setNull` / else → `set(caanMsg.getString(LINK_STB_FLG))` | Map link STB flag (リンクSTBフラグ) |
| 2 | IF/ELSE | `if (caanMsg.isNull(KIKI_HKAT_SHITEI_SOKO_CD))` → `setNull` / else → `set(caanMsg.getString(KIKI_HKAT_SHITEI_SOKO_CD))` | Map device allocation designation warehouse code (機器引当指定倉庫コード) |
| 3 | IF/ELSE | `if (caanMsg.isNull(KIKI_HKAT_SHITEI_SKDN_CD))` → `setNull` / else → `set(caanMsg.getString(KIKI_HKAT_SHITEI_SKDN_CD))` | Map device allocation designation shelf code (機器引当指定倉庫座コード) |
| 4 | IF/ELSE | `if (caanMsg.isNull(KIKI_SORYO_UM))` → `setNull` / else → `set(caanMsg.getString(KIKI_SORYO_UM))` | Map device shipping fee flag (機器送料有無) |
| 5 | IF/ELSE | `if (caanMsg.isNull(KIKI_SOHUS_NM))` → `setNull` / else → `set(caanMsg.getString(KIKI_SOHUS_NM))` | Map delivery sender name (機器送付先名前) |
| 6 | IF/ELSE | `if (caanMsg.isNull(KIKI_SOHUS_KANA))` → `setNull` / else → `set(caanMsg.getString(KIKI_SOHUS_KANA))` | Map delivery sender kana name (機器送付先カナ名) |

**Block 4** — [IF/ELSE chain: Map delivery sender address components] (L5881-L5952)

Map the full delivery sender address: address code, postal code, prefecture, city/town, oaza (大字), chome (字丁目), banchi-go (番地号), building name, room number, phone number, contract holder address deviation flag.

| # | Type | Code | Business Description |
|---|------|------|---------------------|
| 1 | IF/ELSE | `if (caanMsg.isNull(KIKI_SOHUS_AD_CD))` → `setNull` / else → `set(caanMsg.getString(KIKI_SOHUS_AD_CD))` | Map delivery sender address code (機器送付先住所コード) |
| 2 | IF/ELSE | `if (caanMsg.isNull(KIKI_SOHUS_PCD))` → `setNull` / else → `set(caanMsg.getString(KIKI_SOHUS_PCD))` | Map delivery sender postal code (機器送付先郵便番号) |
| 3 | IF/ELSE | `if (caanMsg.isNull(KIKI_SOHUS_STATE_NM))` → `setNull` / else → `set(caanMsg.getString(KIKI_SOHUS_STATE_NM))` | Map delivery sender prefecture name (機器送付先都道府県名) |
| 4 | IF/ELSE | `if (caanMsg.isNull(KIKI_SOHUS_CITY_NM))` → `setNull` / else → `set(caanMsg.getString(KIKI_SOHUS_CITY_NM))` | Map delivery sender city/town/village name (機器送付先市区町村名) |
| 5 | IF/ELSE | `if (caanMsg.isNull(KIKI_SOHUS_OAZTSU_NM))` → `setNull` / else → `set(caanMsg.getString(KIKI_SOHUS_OAZTSU_NM))` | Map delivery sender oaza (機器送付先大字通名称) |
| 6 | IF/ELSE | `if (caanMsg.isNull(KIKI_SOHUS_AZCHO_NM))` → `setNull` / else → `set(caanMsg.getString(KIKI_SOHUS_AZCHO_NM))` | Map delivery sender chome (機器送付先字丁目名) |
| 7 | IF/ELSE | `if (caanMsg.isNull(KIKI_SOHUS_BNCHIGO))` → `setNull` / else → `set(caanMsg.getString(KIKI_SOHUS_BNCHIGO))` | Map delivery sender banchi-go (機器送付先番地号) |
| 8 | IF/ELSE | `if (caanMsg.isNull(KIKI_SOHUS_ADRTTM))` → `setNull` / else → `set(caanMsg.getString(KIKI_SOHUS_ADRTTM))` | Map delivery sender building name (機器送付先住所補記・建物名) |
| 9 | IF/ELSE | `if (caanMsg.isNull(KIKI_SOHUS_ADRRM))` → `setNull` / else → `set(caanMsg.getString(KIKI_SOHUS_ADRRM))` | Map delivery sender room number (機器送付先住所補記・部屋番号) |
| 10 | IF/ELSE | `if (caanMsg.isNull(KIKI_SOHUS_TELNO))` → `setNull` / else → `set(caanMsg.getString(KIKI_SOHUS_TELNO))` | Map delivery sender phone number (機器送付先電話番号) |
| 11 | IF/ELSE | `if (caanMsg.isNull(KIKI_SOHUS_KSH_AD_SAI_FLG))` → `setNull` / else → `set(caanMsg.getString(KIKI_SOHUS_KSH_AD_SAI_FLG))` | Map contract holder address deviation flag (機器送付先_契約者住所差異フラグ) |
| 12 | IF/ELSE | `if (caanMsg.isNull(KIKI_SHS_KBT_SHITEI_FLG))` → `setNull` / else → `set(caanMsg.getString(KIKI_SHS_KBT_SHITEI_FLG))` | Map individual designation flag (機器送付先個別指定フラグ) |

**Block 5** — [IF/ELSE chain: Map installation site (設置先) fields] (L5953-L6038)

Map the full installation site address and metadata: name, kana, address code, postal code, prefecture, city/town, oaza, chome, banchi-go, building name, room number, contract holder address deviation flag, phone number, area consolidation flag.

| # | Type | Code | Business Description |
|---|------|------|---------------------|
| 1 | IF/ELSE | `if (caanMsg.isNull(KIKI_STC_SAKI_NM))` → `setNull` / else → `set(caanMsg.getString(KIKI_STC_SAKI_NM))` | Map installation site name (機器設置先名) |
| 2 | IF/ELSE | `if (caanMsg.isNull(KIKI_STC_SAKI_KANA))` → `setNull` / else → `set(caanMsg.getString(KIKI_STC_SAKI_KANA))` | Map installation site kana name (機器設置先カナ名) |
| 3 | IF/ELSE | `if (caanMsg.isNull(KIKI_STC_SAKI_AD_CD))` → `setNull` / else → `set(caanMsg.getString(KIKI_STC_SAKI_AD_CD))` | Map installation site address code (機器設置先住所コード) |
| 4 | IF/ELSE | `if (caanMsg.isNull(KIKI_STC_SAKI_PCD))` → `setNull` / else → `set(caanMsg.getString(KIKI_STC_SAKI_PCD))` | Map installation site postal code (機器設置先郵便番号) |
| 5 | IF/ELSE | `if (caanMsg.isNull(KIKI_STC_SAKI_STATE_NM))` → `setNull` / else → `set(caanMsg.getString(KIKI_STC_SAKI_STATE_NM))` | Map installation site prefecture name (機器設置先都道府県名) |
| 6 | IF/ELSE | `if (caanMsg.isNull(KIKI_STC_SAKI_CITY_NM))` → `setNull` / else → `set(caanMsg.getString(KIKI_STC_SAKI_CITY_NM))` | Map installation site city/town/village name (機器設置先市区町村名) |
| 7 | IF/ELSE | `if (caanMsg.isNull(KIKI_STC_SAKI_OAZTSU_NM))` → `setNull` / else → `set(caanMsg.getString(KIKI_STC_SAKI_OAZTSU_NM))` | Map installation site oaza (機器設置先大字通名称) |
| 8 | IF/ELSE | `if (caanMsg.isNull(KIKI_STC_SAKI_AZCHO_NM))` → `setNull` / else → `set(caanMsg.getString(KIKI_STC_SAKI_AZCHO_NM))` | Map installation site chome (機器設置先字丁目名) |
| 9 | IF/ELSE | `if (caanMsg.isNull(KIKI_STC_SAKI_BNCHIGO))` → `setNull` / else → `set(caanMsg.getString(KIKI_STC_SAKI_BNCHIGO))` | Map installation site banchi-go (機器設置先番地号) |
| 10 | IF/ELSE | `if (caanMsg.isNull(KIKI_STC_SAKI_ADRTTM))` → `setNull` / else → `set(caanMsg.getString(KIKI_STC_SAKI_ADRTTM))` | Map installation site building name (機器設置先住所補記・建物名) |
| 11 | IF/ELSE | `if (caanMsg.isNull(KIKI_STC_SAKI_ADRRM))` → `setNull` / else → `set(caanMsg.getString(KIKI_STC_SAKI_ADRRM))` | Map installation site room number (機器設置先住所補記・部屋番号) |
| 12 | IF/ELSE | `if (caanMsg.isNull(KIKI_STC_SK_KSH_AD_SAI_FLG))` → `setNull` / else → `set(caanMsg.getString(KIKI_STC_SK_KSH_AD_SAI_FLG))` | Map installation site contract holder address deviation flag (機器設置先_契約者住所差異フラグ) |
| 13 | IF/ELSE | `if (caanMsg.isNull(KIKI_STC_SK_TELNO))` → `setNull` / else → `set(caanMsg.getString(KIKI_STC_SK_TELNO))` | Map installation site phone number (機器設置先電話番号) |
| 14 | IF/ELSE | `if (caanMsg.isNull(KIKI_STS_KKK_SEIRI_CHU_FLG))` → `setNull` / else → `set(caanMsg.getString(KIKI_STS_KKK_SEIRI_CHU_FLG))` | Map installation site area consolidation-in-progress flag (機器設置先区域整理中フラグ) |

**Block 6** — [IF/ELSE chain: Map trial dates, actual dates, and financial codes] (L6039-L6096)

Map address undetermined flag, delivery division, trial dates, actual installation dates, guarantee code, penalty code, movement division, CAS card usage approval, device additional info, delivery method, device transfer info, and delivery request date.

| # | Type | Code | Business Description |
|---|------|------|---------------------|
| 1 | IF/ELSE | `if (caanMsg.isNull(AD_MI_FIX_FLG))` → `setNull` / else → `set(caanMsg.getString(AD_MI_FIX_FLG))` | Map address undetermined flag (住所未確定フラグ) |
| 2 | IF/ELSE | `if (caanMsg.isNull(HAISO_DIV))` → `setNull` / else → `set(caanMsg.getString(HAISO_DIV))` | Map delivery division (配送区分) |
| 3 | IF/ELSE | `if (caanMsg.isNull(FTRIAL_KANYU_YMD))` → `setNull` / else → `set(caanMsg.getString(FTRIAL_KANYU_YMD))` | Map trial addition date (試験加入年月日) |
| 4 | IF/ELSE | `if (caanMsg.isNull(FTRIAL_PRD_ENDYMD))` → `setNull` / else → `set(caanMsg.getString(FTRIAL_PRD_ENDYMD))` | Map trial period end date (試験期間終了年月日) |
| 5 | IF/ELSE | `if (caanMsg.isNull(HONKANYU_YMD))` → `setNull` / else → `set(caanMsg.getString(HONKANYU_YMD))` | Map actual addition date (本加入年月日) |
| 6 | IF/ELSE | `if (caanMsg.isNull(HONKANYU_IKO_KIGEN_YMD))` → `setNull` / else → `set(caanMsg.getString(HONKANYU_IKO_KIGEN_YMD))` | Map actual addition transfer deadline date (本加入移行期限年月日) |
| 7 | IF/ELSE | `if (caanMsg.isNull(HOSHO_CD))` → `setNull` / else → `set(caanMsg.getString(HOSHO_CD))` | Map guarantee code (保証コード) |
| 8 | IF/ELSE | `if (caanMsg.isNull(PNLTY_HASSEI_CD))` → `setNull` / else → `set(caanMsg.getString(PNLTY_HASSEI_CD))` | Map penalty occurrence code (違約金発生コード) |
| 9 | IF/ELSE | `if (caanMsg.isNull(IDO_DIV))` → `setNull` / else → `set(caanMsg.getString(IDO_DIV))` | Map movement division (異動区分) |
| 10 | IF/ELSE | `if (caanMsg.isNull(CAS_CARD_USE_KYODAK_YMD))` → `setNull` / else → `set(caanMsg.getString(CAS_CARD_USE_KYODAK_YMD))` | Map CAS card usage approval date (CASカード使用許可年月日) |
| 11 | IF/ELSE | `if (caanMsg.isNull(KIKI_HUKA_INFO_CD))` → `setNull` / else → `set(caanMsg.getString(KIKI_HUKA_INFO_CD))` | Map device additional info code (機器追加情報コード) |
| 12 | IF/ELSE | `if (caanMsg.isNull(HAISO_WAY_CD))` → `setNull` / else → `set(caanMsg.getString(HAISO_WAY_CD))` | Map delivery method code (配送方法コード) |
| 13 | IF/ELSE | `if (caanMsg.isNull(KIKI_ITENS_MV_JSSIS_SKCD))` → `setNull` / else → `set(caanMsg.getString(KIKI_ITENS_MV_JSSIS_SKCD))` | Map device transfer destination movement implementer ID code (機器移転先移動実施者識別コード) |
| 14 | IF/ELSE | `if (caanMsg.isNull(HAISO_REQ_SHITEI_YMD))` → `setNull` / else → `set(caanMsg.getString(HAISO_REQ_SHITEI_YMD))` | Map delivery request designation date (配送依頼指定年月日) |

**Block 7** — [IF/ELSE chain: Map update datetime (updDtmBf) with explicit parameter precedence] (L6097-L6108)

The update datetime field has special handling: if the `updDtmBf` parameter is provided (non-null), it is used directly; otherwise, the method falls back to reading from `caanMsg`.

| # | Type | Code | Business Description |
|---|------|------|---------------------|
| 1 | IF | `if (updDtmBf != null)` → `template.set(UPD_DTM_BF, updDtmBf)` | Use caller-provided update datetime explicitly |
| 2 | ELSE | Nested IF/ELSE: `if (caanMsg.isNull(UPD_DTM_BF))` → `setNull` / else → `set(caanMsg.getString(UPD_DTM_BF))` | Fallback: read update datetime from caanMsg |

**Block 8** — [IF/ELSE chain: Map remaining fields and service start status code] (L6109-L6157)

Map the delivery sender address manual input flag, return device flag, and service start delivery status identification code.

| # | Type | Code | Business Description |
|---|------|------|---------------------|
| 1 | IF/ELSE | `if (caanMsg.isNull(KIKI_SHS_AD_MAN_INPUT_FLG))` → `setNull` / else → `set(caanMsg.getString(KIKI_SHS_AD_MAN_INPUT_FLG))` | Map delivery sender address manual input flag (機器送付先住所手入力フラグ) |
| 2 | IF/ELSE | `if (caanMsg.isNull(KAISHU_KIKI_UM))` → `setNull` / else → `set(caanMsg.getString(KAISHU_KIKI_UM))` | Map return device flag (回収機器有無) |
| 3 | IF/ELSE | `if (svcStaJiHisJkSkCd == null \|\| "".equals(svcStaJiHisJkSkCd))` → `setNull` / else → `set(svcStaJiHisJkSkCd)` | Map service start delivery status identification code (サービス開始時配送状況識別コード) from method parameter (not caanMsg) |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `KKTK_SVC_KEI_NO` | Field | Equipment-provided service contract number (機器提供サービス契約番号) — unique identifier for a service contract line item associated with equipment provided by the carrier |
| `KKTK_SBT_CD` | Field | Equipment-provided service type code (機器提供種別コード) — classification of the type of equipment service (e.g., rental, purchase, bundled) |
| `HAMBAI_SBT_CD` | Field | Sales type code (販売種別コード) — identifies the sales channel or contract type (e.g., retail, corporate, online) |
| `TAKNKIKI_MODEL_CD` | Field | Indoor device model code (宅内機器型式コード) — product model identifier for the customer premises equipment |
| `KIKI_SEIZO_NO` | Field | Device serial number (機器製造番号) — unique manufacturing serial number of the provided device |
| `HDD_CAPA_CD` | Field | HDD capacity code (HDD容量コード) — classification of hard disk drive capacity tier (e.g., 1TB, 2TB, 4TB) |
| `TSUSHIN_KIKI_SET_CD` | Field | Communication device set code (通信機器セットコード) — identifies a bundled set of communication devices (e.g., router + STB) |
| `LINK_STB_FLG` | Field | Link STB flag (リンクSTBフラグ) — indicates whether a set-top box is linked/connected for IPTV or video services |
| `KIKI_HKAT_SHITEI_SOKO_CD` | Field | Device allocation designation warehouse code (機器引当指定倉庫コード) — warehouse code where the device is allocated/stored |
| `KIKI_HKAT_SHITEI_SKDN_CD` | Field | Device allocation designation shelf code (機器引当指定倉庫座コード) — specific shelf/location code within the warehouse |
| `KIKI_SORYO_UM` | Field | Device shipping fee flag (機器送料有無) — whether shipping fees apply for device delivery (有=applicable, 無=not applicable) |
| `KIKI_SOHUS_*` | Fields | Delivery sender address fields (機器送付先) — complete address breakdown for the party receiving the device: name, kana, address code, postal code, prefecture, city, oaza, chome, banchi-go, building name, room number, phone number |
| `KIKI_SOHUS_KSH_AD_SAI_FLG` | Field | Contract holder address deviation flag (機器送付先_契約者住所差異フラグ) — indicates if the delivery address differs from the contract holder's registered address |
| `KIKI_SHS_KBT_SHITEI_FLG` | Field | Individual designation flag (機器送付先個別指定フラグ) — indicates whether the delivery destination was individually specified (vs. default contract address) |
| `KIKI_STC_SAKI_*` | Fields | Installation site address fields (機器設置先) — complete address breakdown for where the device will be installed: name, kana, address code, postal code, prefecture, city, oaza, chome, banchi-go, building name, room number |
| `KIKI_STC_SK_KSH_AD_SAI_FLG` | Field | Installation site contract holder address deviation flag (機器設置先_契約者住所差異フラグ) — indicates if the installation address differs from the contract holder's address |
| `KIKI_STC_SK_TELNO` | Field | Installation site phone number (機器設置先電話番号) — contact phone at the installation location |
| `KIKI_STS_KKK_SEIRI_CHU_FLG` | Field | Installation site area consolidation-in-progress flag (機器設置先区域整理中フラグ) — indicates if the installation area is undergoing address/review consolidation |
| `AD_MI_FIX_FLG` | Field | Address undetermined flag (住所未確定フラグ) — indicates if the installation address has not yet been finalized |
| `HAISO_DIV` | Field | Delivery division (配送区分) — categorizes the type of delivery (e.g., regular, express, scheduled) |
| `FTRIAL_KANYU_YMD` | Field | Trial addition date (試験加入年月日) — date when the trial/free trial period begins |
| `FTRIAL_PRD_ENDYMD` | Field | Trial period end date (試験期間終了年月日) — date when the trial/free trial period expires |
| `HONKANYU_YMD` | Field | Actual addition date (本加入年月日) — date when the正式 (formal/paid) service activation occurs |
| `HONKANYU_IKO_KIGEN_YMD` | Field | Actual addition transfer deadline date (本加入移行期限年月日) — deadline for transitioning from trial to formal service |
| `HOSHO_CD` | Field | Guarantee code (保証コード) — classification of warranty/guarantee type (e.g., standard, extended, no warranty) |
| `PNLTY_HASSEI_CD` | Field | Penalty occurrence code (違約金発生コード) — indicates whether early termination penalties apply and under what conditions |
| `IDO_DIV` | Field | Movement division (異動区分) — classifies the type of service change/movement (e.g., new installation, relocation, cancellation) |
| `CAS_CARD_USE_KYODAK_YMD` | Field | CAS card usage approval date (CASカード使用許可年月日) — date when the Conditional Access System card usage is authorized |
| `KIKI_HUKA_INFO_CD` | Field | Device additional info code (機器追加情報コード) — additional device attribute classification code |
| `HAISO_WAY_CD` | Field | Delivery method code (配送方法コード) — the logistics method for device delivery (e.g., standard delivery, courier, self-pickup) |
| `KIKI_ITENS_MV_JSSIS_SKCD` | Field | Device transfer destination movement implementer ID code (機器移転先移動実施者識別コード) — identifies the service provider performing the device transfer |
| `HAISO_REQ_SHITEI_YMD` | Field | Delivery request designation date (配送依頼指定年月日) — the date the customer requested delivery |
| `UPD_DTM_BF` | Field | Update datetime before (更新年月日時分秒(更新前)) — the last update timestamp before the current operation |
| `KIKI_SHS_AD_MAN_INPUT_FLG` | Field | Delivery sender address manual input flag (機器送付先住所手入力フラグ) — indicates if the delivery address was manually entered vs. auto-populated |
| `KAISHU_KIKI_UM` | Field | Return device flag (回収機器有無) — whether a device needs to be collected/returned (有=collection required, 無=no collection) |
| `SVC_STA_JI_HIS_JOKYO_SKCD` | Field | Service start delivery status identification code (サービス開始時配送状況識別コード) — status code for delivery condition at service start |
| `TEMPLATEID` | Field | Template identifier — SC message type code (e.g., `EKK0341C230`) |
| `FUNC_CODE` | Field | Function code — operation type code; `1` = 調査 (inquiry/inspection) |
| FUNC_CODE_SHOSA | Constant | Function code value "1" — inquiry/inspection mode (調査) |
| CAANMsg | Type | Fujitsu's canonical application message object used for inter-component data exchange; supports key-value field access via `set()`, `setNull()`, `getString()`, and `isNull()` |
| EKK0341C230 | SC Code | Service Component for equipment-provided service contract update (機器提供サービス契約情報更新) |
| JKKCancelSvcKeiCC | Class | Cancel service contract processing controller — handles cancellation workflow for equipment-provided services |
| JKKCancelSvcKeiMapperCC | Class | Mapper component for cancel service contract operations — transforms data between inquiry results and service component request messages |
| fillCAANMSGNullMapping | Method | Utility that initializes a CAANMsg by setting all fields to null based on a schema definition |
| 機器提供 | Japanese term | Equipment-provided — carrier-provided devices (e.g., modems, STBs, routers) included in service contracts |
| サービス契約変更 | Japanese term | Service contract modification — the business operation of updating an existing service contract |
| 調査 | Japanese term | Inquiry/inspection — the function mode (FUNC_CODE="1") indicating read-only query processing |
| 配送先 | Japanese term | Delivery destination/sender — the party to whom equipment is shipped |
| 設置先 | Japanese term | Installation site — the location where equipment is physically installed (may differ from delivery address) |
| 試験加入 | Japanese term | Trial addition — customer trial period for the service |
| 本加入 | Japanese term | Formal/actual addition — the transition from trial to正式 (paid/active) service |
| 違約金 | Japanese term | Liquidated damages/penalty — fees charged for early contract termination |
| 異動 | Japanese term | Movement/change — service change operation (installation, relocation, cancellation) |
| CASカード | Japanese term | Conditional Access System card — smart card for authorized access to pay-TV/broadcast content |
| リングSTB | Japanese term | Link Set-Top Box — STB connected for IPTV or video-on-demand services |
| 回収機器 | Japanese term | Collected/recovered device — equipment that must be returned to the carrier |
| 区域整理中 | Japanese term | Area consolidation in progress — administrative address reorganization affecting the location |
| SVC_STA_JI_HIS_TG_SKCD_TG | Constant value | Service start delivery status code for target delivery (対象配送) |
| SVC_STA_JI_HIS_JOKYO_SKCD_1 | Constant value | Service start delivery status code for normal/standard delivery (通常配送) |
