# Business Logic — JBSbatKKFmtcelSodUpdInfCst.execute() [192 LOC]

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

## 1. Role

### JBSbatKKFmtcelSodUpdInfCst.execute()

This method is the **home address change SOD update information extraction component** — it determines which service contract line item information should be output following a change of address (住所変更) request. Its business purpose is to identify the correct service contract data to propagate to downstream processes when a customer's address has changed, based on the completion status of related work orders.

The method implements a **cascade-style routing pattern** — it evaluates four mutually exclusive scenarios in priority order and outputs data only when a matching condition is found. Each scenario represents a different state of the address change workflow: (1) a delayed start (directory-driven startup), (2) an incoming date that has arrived (move-in reservation fulfilled), (3) a new construction work completion, and (4) a cancellation work completion. If none of these conditions match, the method returns null, indicating no action is needed.

A key cross-cutting concern is the **surrender service check** (`isSurrenderService`): the method only outputs service contract data if the original (transfer-from) service contract has NOT been surrendered (cancelled). This prevents orphaned or double-processed service records from being created during contract migrations following address changes.

The method acts as a **shared utility** called by batch processing screens, specifically by `JBSbatKKAdChgCstScreenKidou` (commented out in current code), serving the broader home address change (住所変更) order fulfillment domain.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["execute inMap"])
    INIT["Prepare outputItem, outMap, extract input fields"]
    CHECK_DELAYED{isDelayed equals
DELAYED_START}
    DELAYED_OUT["Set outMap SVC_KEI_NO,
SVC_KEI_GENE_ADD_DTM, KOJIAK_NO"]
    SURRENDER_CHK1{isSurrenderService
inSvcKeiNo}
    DELAYED_RETURN(["Return outputItem"])
    CHECK_NYUKYO{nyukyoRsvTriKisnInfo
!= null}
    NYUKYO_OUT["Set outMap SVC_KEI_NO,
SVC_KEI_GENE_ADD_DTM, KOJIAK_NO"]
    SURRENDER_CHK2{isSurrenderService
inSvcKeiNo}
    NYUKYO_RETURN(["Return outputItem"])
    CHECK_NEW_WORK{"newKjFinRnkiInfo
!= null"}
    NEW_KOJIAK_SEL["Execute KU_T_SVKEI_KOJIAK_SELECT_007"]
    NEW_KOJIAK_FOUND{db_KU_T_SVKEI_KOJIAK
selectNext != null}
    NEW_OUT["Set outMap SVC_KEI_NO,
SVC_KEI_GENE_ADD_DTM, KOJIAK_NO"]
    SURRENDER_CHK3{isSurrenderService
inSvcKeiNo}
    NEW_RETURN(["Return outputItem"])
    CHECK_DSL_WORK{"dslKjFinRnkiInfo
!= null"}
    DSL_KOJIAK_SEL["Execute KU_T_SVKEI_KOJIAK_SELECT_007"]
    DSL_KOJIAK_FOUND{db_KU_T_SVKEI_KOJIAK
selectNext != null}
    DSL_OUT["Set outMap SVC_KEI_NO,
SVC_KEI_GENE_ADD_DTM, KOJIAK_NO"]
    SURRENDER_CHK4{isSurrenderService
inSvcKeiNo}
    DSL_RETURN(["Return outputItem"])
    ALL_FAIL(["Return null"])
    START --> INIT --> CHECK_DELAYED
    CHECK_DELAYED -- "DELAYED_START = \"1\"" --> DELAYED_OUT
    DELAYED_OUT --> SURRENDER_CHK1
    SURRENDER_CHK1 --> DELAYED_RETURN
    DELAYED_RETURN --> CHECK_NYUKYO
    CHECK_NYUKYO -- "true" --> NYUKYO_OUT
    NYUKYO_OUT --> SURRENDER_CHK2
    SURRENDER_CHK2 --> NYUKYO_RETURN
    NYUKYO_RETURN --> CHECK_NEW_WORK
    CHECK_NYUKYO -- "false" --> CHECK_NEW_WORK
    CHECK_NEW_WORK -- "true" --> NEW_KOJIAK_SEL
    NEW_KOJIAK_SEL --> NEW_KOJIAK_FOUND
    NEW_KOJIAK_FOUND -- "true" --> NEW_OUT
    NEW_OUT --> SURRENDER_CHK3
    SURRENDER_CHK3 --> NEW_RETURN
    NEW_RETURN --> CHECK_DSL_WORK
    CHECK_NEW_WORK -- "false" --> CHECK_DSL_WORK
    CHECK_DSL_WORK -- "true" --> DSL_KOJIAK_SEL
    DSL_KOJIAK_SEL --> DSL_KOJIAK_FOUND
    DSL_KOJIAK_FOUND -- "true" --> DSL_OUT
    DSL_OUT --> SURRENDER_CHK4
    SURRENDER_CHK4 --> DSL_RETURN
    DSL_RETURN --> ALL_FAIL
    CHECK_DSL_WORK -- "false" --> ALL_FAIL
```

**Branch meanings (constant-resolved):**

| Branch | Condition | Constant Value | Business Meaning |
|--------|-----------|---------------|------------------|
| Delayed Start | `DELAYED_START.equals(isDelayed)` | `DELAYED_START = "1"` | Directory-driven startup is requested — output contract info immediately without further checks |
| Move-in Reservation Arrived | `nyukyoRsvTriKisnInfo != null` | — | The service contract line item's scheduled move-in date has arrived |
| New Construction Completed | `newKjFinRnkiInfo != null` (loop) | — | A new construction (新設工事) work completion record exists |
| Cancellation Completed | `dslKjFinRnkiInfo != null` (loop) | — | A cancellation (撤去) work completion record exists |
| Surrender Service | `isSurrenderService(inSvcKeiNo)` | — | Checks if the original service contract has been surrendered/cancelled. If surrendered, skip output |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `inMap` | `JBSbatServiceInterfaceMap` | Input message containing address change order data — carries the home address change number (`ADCHG_NO`), the transfer-from service contract line item short name number (`ITENS_SVKEI_KISUW_NO`), the post-change identification number / service contract number (`CHAF_SKBT_NO`), the pre-change service contract number (`CHBF_SKBT_NO`), the service contract number (`SVC_KEI_NO`), and the generation registration date-time (`GENE_ADD_DTM`). Also carries the `IS_DELAYED` flag indicating whether delayed directory-driven startup is requested. |

**Instance fields read by this method:**

| Field | Type | Business Description |
|-------|------|---------------------|
| `opeDate` | `String` (inherited from `JBSbatBusinessService`) | Operational date — the date on which this batch processing is running, used as a reference point for comparing scheduled move-in dates and work completion records |
| `db_KK_T_SVKEI_KAISEN_UW` | `JBSbatSQLAccess` | Database accessor for the service contract line item expanded view table (`KK_T_SVKEI_KAISEN_UW`) |
| `db_KK_T_ADCHG_DTL` | `JBSbatSQLAccess` | Database accessor for the home address change detail table (`KK_T_ADCHG_DTL`) |
| `db_KK_T_KJ_FIN_WK` | `JBSbatSQLAccess` | Database accessor for the work completion work table (`KK_T_KJ_FIN_WK`) |
| `db_KU_T_SVKEI_KOJIAK` | `JBSbatSQLAccess` | Database accessor for the service contract / work project table (`KU_T_SVKEI_KOJIAK`) |
| `db_KK_T_SVC_KEI` | `JBSbatSQLAccess` | Database accessor for the service contract table (`KK_T_SVC_KEI`) |

## 4. CRUD Operations / Called Services

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `JBSbatKKFmtcelSodUpdInfCst.executeKK_T_SVKEI_KAISEN_UW_KK_SELECT_026` | KK_SELECT_026 | `KK_T_SVKEI_KAISEN_UW` | Queries service contract line item expanded data by short name number and adjusted operational date (yesterday) to check for arrived move-in reservations |
| R | `JBSbatKKFmtcelSodUpdInfCst.executeKK_T_KJ_FIN_WK_KK_SELECT_020` | KK_SELECT_020 | `KK_T_KJ_FIN_WK` | Queries new construction work completion records by address change number and operational date |
| R | `JBSbatKKFmtcelSodUpdInfCst.executeKK_T_KJ_FIN_WK_KK_SELECT_019` | KK_SELECT_019 | `KK_T_KJ_FIN_WK` | Queries cancellation work completion records by address change number and operational date |
| R | `JBSbatKKFmtcelSodUpdInfCst.executeKU_T_SVKEI_KOJIAK_KK_SELECT_007` | KK_SELECT_007 | `KU_T_SVKEI_KOJIAK` | Queries service contract / work project detail by service contract number and work project number (called within the work completion loops) |
| R | `JBSbatKKFmtcelSodUpdInfCst.isSurrenderService` | KK_SELECT_251 | `KK_T_SVC_KEI` | Checks if a given service contract has been surrendered (cancelled) by querying the service contract table |

**Pre-computed evidence from code analysis graph (utility/auxiliary calls):**

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `JBSbatInterface.adjustDate` | JBSbatInterface | - | Calls `adjustDate` in `JBSbatInterface` — adjusts the operational date by a specified offset (here: -1 day for yesterday) |
| - | `JBSbatInterface.trim` | JBSbatInterface | - | Calls `trim` in `JBSbatInterface` — trim operation |
| - | `JBSbatACIcjknTrkmRsltHenshu.setOutFlg` | JBSbatACIcjknTrkmRsltHenshu | - | Calls `setOutFlg` in `JBSbatACIcjknTrkmRsltHenshu` |
| - | `JBSbatACTelnoGuideUseChrgInfoTrkmDataMake.setOutFlg` | JBSbatACTelnoGuideUseChrgInfoTrkmDataMake | - | Calls `setOutFlg` in `JBSbatACTelnoGuideUseChrgInfoTrkmDataMake` |
| R | `JBSbatFUCaseFileRnkData.getString` | JBSbatFUCaseFileRnkData | - | Calls `getString` in `JBSbatFUCaseFileRnkData` |
| R | `JBSbatFUMoveNaviData.getString` | JBSbatFUMoveNaviData | - | Calls `getString` in `JBSbatFUMoveNaviData` |
| - | `JBSbatKKBmpKaihkPrdChokNoDel.trim` | JBSbatKKBmpKaihkPrdChokNoDel | - | Calls `trim` in `JBSbatKKBmpKaihkPrdChokNoDel` |
| - | `JBSbatKKSodSendReqBase.trim` | JBSbatKKSodSendReqBase | - | Calls `trim` in `JBSbatKKSodSendReqBase` |
| - | `JBSbatKKTchishoDelete.trim` | JBSbatKKTchishoDelete | - | Calls `trim` in `JBSbatKKTchishoDelete` |
| R | `JBSbatZMAdDataSet.getString` | JBSbatZMAdDataSet | - | Calls `getString` in `JBSbatZMAdDataSet` |
| - | `JKKShkaFinJiKikiStaAddCC.adjustDate` | JKKShkaFinJiKikiStaAddCC | - | Calls `adjustDate` in `JKKShkaFinJiKikiStaAddCC` |
| - | `JKKSyuKeiStabunKikiStaAddCC.adjustDate` | JKKSyuKeiStabunKikiStaAddCC | - | Calls `adjustDate` in `JKKSyuKeiStabunKikiStaAddCC` |
| - | `JEKK0081C310TPMA.setString` | JEKK0081C310TPMA | - | Calls `setString` in `JEKK0081C310TPMA` |
| R | `JESC0101B010TPMA.getString` | JESC0101B010TPMA | - | Calls `getString` in `JESC0101B010TPMA` |
| R | `JESC0101B020TPMA.getString` | JESC0101B020TPMA | - | Calls `getString` in `JESC0101B020TPMA` |
| - | `Mover.setString` | Mover | - | Calls `setString` in `Mover` |
| - | `KKA16601SFLogic.setString` | KKA16601SFLogic | - | Calls `setString` in `KKA16601SFLogic` |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Batch: `JBSbatKKAdChgCstScreenKidou` | `JBSbatKKAdChgCstScreenKidou` -> creates `new JBSbatKKFmtcelSodUpdInfCst()` -> `execute` | `isSurrenderService [R] KK_T_SVC_KEI`, `executeKK_T_SVKEI_KAISEN_UW_KK_SELECT_026 [R] KK_T_SVKEI_KAISEN_UW`, `executeKK_T_KJ_FIN_WK_KK_SELECT_020 [R] KK_T_KJ_FIN_WK`, `executeKK_T_KJ_FIN_WK_KK_SELECT_019 [R] KK_T_KJ_FIN_WK`, `executeKU_T_SVKEI_KOJIAK_KK_SELECT_007 [R] KU_T_SVKEI_KOJIAK` |

**Note:** The only known caller (`JBSbatKKAdChgCstScreenKidou`) has the instantiation and usage commented out in the current source code. This method may be a legacy or deprecated entry point, or may be invoked dynamically via reflection or a service registry not visible in static code search.

## 6. Per-Branch Detail Blocks

**Block 1** — [SET] Variable initialization and input extraction (L170)

> Prepare the output container and extract all input fields from the incoming message map.

| # | Type | Code |
|---|------|------|
| 1 | SET | `outputItem = new JBSbatOutputItem()` // Create output container |
| 2 | SET | `outMap = new JBSbatServiceInterfaceMap()` // Create output map |
| 3 | EXEC | `outMap.setOutFlg(true)` // Mark output as active |
| 4 | SET | `inAdchgNo = inMap.getString(JBSbatKK_T_ADCHG.ADCHG_NO)` // Address change number (住所変更番号) |
| 5 | SET | `inItensSvkeiKisuwNo = inMap.getString(JBSbatKK_T_ADCHG.ITENS_SVKEI_KISUW_NO)` // Transfer-from service contract line item short name number (転送先サービス契約回線内訳番号) |
| 6 | SET | `inChafSkbtNo = inMap.getString(JBSbatKK_T_ADCHG_DTL.CHAF_SKBT_NO)` // Post-change identification number / service contract number (変更後識別番号/サービス契約番号) |
| 7 | SET | `inSvcKeiNo = inMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO)` // Service contract number (サービス契約番号) |
| 8 | SET | `inGeneAddDtm = inMap.getString(JBSbatKK_T_SVC_KEI.GENE_ADD_DTM)` // Generation registration date-time (世代登録年月日時分秒) |
| 9 | SET | `isDelayed = inMap.getString("IS_DELAYED")` // Delayed start flag (ディレイド起動フラグ) [ST2-2013-0000980 ADD 20130225 星野] |

---

**Block 2** — [IF] Delayed start flag check (L192) `[DELAYED_START="1"]`

> If delayed directory-driven startup is requested, prepare output immediately without performing any further business condition checks. This is an early-exit path for cases where the system is being woken up from a delayed/directory-based trigger.

| # | Type | Code |
|---|------|------|
| 1 | SET | `if (isDelayed == null || "".equals(isDelayed.trim())) { isDelayed = DELAYED_NOT_START }` // Default to "not delayed" if empty/null |
| 2 | EXEC | `DELAYED_START.equals(isDelayed)` // [-> DELAYED_START = "1"] 起動 |
| 3 | SET | `outMap.setString(JBSbatKKIFM266.SVC_KEI_NO, inSvcKeiNo)` // Service contract number |
| 4 | SET | `outMap.setString(JBSbatKKIFM266.SVC_KEI_GENE_ADD_DTM, inGeneAddDtm)` // Service contract / generation registration date-time |
| 5 | SET | `outMap.setString(JBSbatKKIFM266.KOJIAK_NO, "")` // Work project number — set empty |

**Block 2.1** — [IF] Surrender service check (L225) `[isSurrenderService]`

> Only output the map if the transfer-from service contract has NOT been surrendered (cancelled). This prevents orphaned records during contract migration. [ANK-1429-00-00 MOD 2013.03.21 T.TORIKAI]

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `isSurrenderService(inSvcKeiNo)` // Check if service contract is surrendered |
| 2 | SET | `if (!isSurrenderService(inSvcKeiNo))` // Only output if NOT surrendered |
| 3 | EXEC | `outputItem.addOutMapList(outMap)` // Add output map to result |
| 4 | RETURN | `return outputItem` // Early return — delayed path complete |

---

**Block 3** — [SET] Move-in reservation check (L243)

> Query the service contract line item expanded view to determine if the scheduled move-in date has arrived. This uses the transfer-from service contract short name number and yesterday's operational date as lookup criteria.

| # | Type | Code |
|---|------|------|
| 1 | SET | `nyukyoRsvTriKisnInfo = null` // Move-in reservation arrived info |
| 2 | EXEC | `executeKK_T_SVKEI_KAISEN_UW_KK_SELECT_026(new String[]{inItensSvkeiKisuwNo, JBSbatDateUtil.adjustDate(opeDate, 1)})` // Query by short name number and yesterday's date (opeDate + 1) |
| 3 | SET | `nyukyoRsvTriKisnInfo = db_KK_T_SVKEI_KAISEN_UW.selectNext()` // Get next record |

---

**Block 4** — [IF] Move-in reservation arrived (L249) `[nyukyoRsvTriKisnInfo != null]`

> If a move-in reservation arrived record was found, prepare and output service contract information. This is the happy path for on-time address change processing.

| # | Type | Code |
|---|------|------|
| 1 | SET | `outMap.setString(JBSbatKKIFM266.SVC_KEI_NO, inSvcKeiNo)` // Service contract number |
| 2 | SET | `outMap.setString(JBSbatKKIFM266.SVC_KEI_GENE_ADD_DTM, inGeneAddDtm)` // Service contract / generation registration date-time |
| 3 | SET | `outMap.setString(JBSbatKKIFM266.KOJIAK_NO, "")` // Work project number — set empty |

**Block 4.1** — [IF] Surrender service check (L262) `[isSurrenderService]`

> Same surrender service gate as Block 2.1 — only output if the original service contract is not surrendered. [ANK-1429-00-00 MOD 2013.03.21 T.TORIKAI]

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `isSurrenderService(inSvcKeiNo)` // Check surrender status |
| 2 | SET | `if (!isSurrenderService(inSvcKeiNo))` // Only output if NOT surrendered |
| 3 | EXEC | `outputItem.addOutMapList(outMap)` // Add output map to result |
| 4 | RETURN | `return outputItem` // Early return — move-in arrived path complete |

---

**Block 5** — [SET] New construction work completion check (L272)

> Query the work completion work table for new construction (新設工事) completion records. Iterates through all matching records to find one whose work project detail exists in the service contract / work project table.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `executeKK_T_KJ_FIN_WK_KK_SELECT_020(new String[]{inAdchgNo, opeDate})` // Query new construction work completion by address change number and operational date |
| 2 | SET | `newKjFinRnkiInfo = null` // Loop variable for work completion records |
| 3 | SET | `for (newKjFinRnkiInfo = db_KK_T_KJ_FIN_WK.selectNext(); newKjFinRnkiInfo != null; ...)` // Iterate through all completion records |

**Block 5.1** — [FOR] Work completion record iteration (L277)

> For each work completion record, extract the work project number and check if the corresponding service contract / work project detail exists.

| # | Type | Code |
|---|------|------|
| 1 | SET | `newKojiakNo = null` // Work project number from completion record |
| 2 | SET | `newKojiakNo = newKjFinRnkiInfo.getString(JBSbatKK_T_KJ_FIN_WK.KOJIAK_NO)` // Extract work project number |
| 3 | EXEC | `executeKU_T_SVKEI_KOJIAK_KK_SELECT_007(new String[]{inChafSkbtNo, newKojiakNo})` // Query service contract / work project detail by post-change contract number and work project number |
| 4 | SET | `if (db_KU_T_SVKEI_KOJIAK.selectNext() != null)` // Check if detail record exists |

**Block 5.1.1** — [IF] Work project detail found (L287)

> A matching work project detail was found. Prepare output with the work project number and gate through surrender check.

| # | Type | Code |
|---|------|------|
| 1 | SET | `outMap.setString(JBSbatKKIFM266.SVC_KEI_NO, inSvcKeiNo)` // Service contract number |
| 2 | SET | `outMap.setString(JBSbatKKIFM266.SVC_KEI_GENE_ADD_DTM, inGeneAddDtm)` // Service contract / generation registration date-time |
| 3 | SET | `outMap.setString(JBSbatKKIFM266.KOJIAK_NO, "")` // Work project number — set empty |

**Block 5.1.2** — [IF] Surrender service check (L296) `[isSurrenderService]`

> Same surrender service gate. [ANK-1429-00-00 MOD 2013.03.21 T.TORIKAI]

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `isSurrenderService(inSvcKeiNo)` // Check surrender status |
| 2 | SET | `if (!isSurrenderService(inSvcKeiNo))` // Only output if NOT surrendered |
| 3 | EXEC | `outputItem.addOutMapList(outMap)` // Add output map to result |
| 4 | RETURN | `return outputItem` // Early return — new construction path complete |

---

**Block 6** — [SET] Cancellation work completion check (L307)

> Query the work completion work table for cancellation (撤去) completion records. Similar structure to Block 5 but uses `KK_SELECT_019` instead of `KK_SELECT_020`, and uses `CHBF_SKBT_NO` (pre-change contract number) instead of `CHAF_SKBT_NO` (post-change contract number) for the work project lookup.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `executeKK_T_KJ_FIN_WK_KK_SELECT_019(new String[]{inAdchgNo, opeDate})` // Query cancellation work completion by address change number and operational date |
| 2 | SET | `dslKjFinRnkiInfo = null` // Loop variable |
| 3 | SET | `for (dslKjFinRnkiInfo = db_KK_T_KJ_FIN_WK.selectNext(); dslKjFinRnkiInfo != null; ...)` // Iterate through cancellation records |

**Block 6.1** — [FOR] Cancellation work completion iteration (L312)

| # | Type | Code |
|---|------|------|
| 1 | SET | `dslKojiakNo = null` // Work project number from cancellation record |
| 2 | SET | `dslKojiakNo = dslKjFinRnkiInfo.getString(JBSbatKK_T_KJ_FIN_WK.KOJIAK_NO)` // Extract work project number |
| 3 | EXEC | `executeKU_T_SVKEI_KOJIAK_KK_SELECT_007(new String[]{inMap.getString(JBSbatKK_T_ADCHG_DTL.CHBF_SKBT_NO), dslKojiakNo})` // Query service contract / work project detail by pre-change contract number and work project number |
| 4 | SET | `if (db_KU_T_SVKEI_KOJIAK.selectNext() != null)` // Check if detail record exists |

**Block 6.1.1** — [IF] Cancellation work project detail found (L322)

> A matching cancellation work project detail was found. Prepare output — this time with KOJIAK_NO set to the found work project number (unlike the new construction case where it's set empty).

| # | Type | Code |
|---|------|------|
| 1 | SET | `outMap.setString(JBSbatKKIFM266.SVC_KEI_NO, inSvcKeiNo)` // Service contract number |
| 2 | SET | `outMap.setString(JBSbatKKIFM266.SVC_KEI_GENE_ADD_DTM, inGeneAddDtm)` // Service contract / generation registration date-time |
| 3 | SET | `outMap.setString(JBSbatKKIFM266.KOJIAK_NO, dslKojiakNo)` // Work project number — SET to found value (difference from new construction which sets empty) |

**Block 6.1.2** — [IF] Surrender service check (L331) `[isSurrenderService]`

> Same surrender service gate. [ANK-1429-00-00 MOD 2013.03.21 T.TORIKAI]

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `isSurrenderService(inSvcKeiNo)` // Check surrender status |
| 2 | SET | `if (!isSurrenderService(inSvcKeiNo))` // Only output if NOT surrendered |
| 3 | EXEC | `outputItem.addOutMapList(outMap)` // Add output map to result |
| 4 | RETURN | `return outputItem` // Early return — cancellation path complete |

---

**Block 7** — [RETURN] No match (L343)

> None of the four scenarios matched. Return null to indicate no action is needed. This is the implicit else-all branch.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null` // No matching condition — comment: "Does not apply to either" (どちらにも該当しない場合は何もしない) |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `adchg_no` | Field | Address change number (住所変更番号) — unique identifier for a home address change request |
| `itens_svkei_kisuw_no` | Field | Transfer-from service contract line item short name number (転送先サービス契約回線内訳番号) — identifies the original service line item before transfer |
| `chaf_skbt_no` | Field | Post-change identification number / service contract number (変更後識別番号/サービス契約番号) — the new service contract number after the address change |
| `chbf_skbt_no` | Field | Pre-change service contract number (変更前サービス契約番号) — the original service contract number before the address change |
| `svc_kei_no` | Field | Service contract number (サービス契約番号) — unique identifier for a service contract |
| `gene_add_dtm` | Field | Generation registration date-time (世代登録年月日時分秒) — timestamp when this version of the service contract was registered in the generation management system |
| `kojiak_no` | Field | Work project number (工事案件番号) — identifies a specific work/project associated with service contract changes |
| `ope_date` | Field | Operational date (運用日) — the processing date used as reference for comparing scheduled and completed dates |
| `is_delayed` | Field | Delayed start flag (ディレイド起動フラグ) — indicates whether the processing should wait for a directory-driven trigger |
| SOD | Acronym | Service Order Data — the order fulfillment data structure for telecom service provisioning |
| FTTH | Business term | Fiber To The Home — fiber-optic broadband internet service |
| ADCHG | Acronym | Address Change (住所変更) — the business process of updating a customer's registered address |
| 新設工事 | Business term | New construction work (しんせつこうじ) — installation work for new service lines following an address change |
| 撤去工事 | Business term | Cancellation/removal work (てっきょこうじ) — work to remove existing service lines following an address change |
| 工事事業ステータス 900 | Business term | Work project status 900 (Cancelled) — indicates the work project has been cancelled and should be excluded from processing |
| KU_T_SVKEI_KOJIAK | Table | Service Contract / Work Project table — maps service contracts to their associated work projects |
| KK_T_KJ_FIN_WK | Table | Work Completion Work table — tracks completion status of work orders (new construction and cancellation) |
| KK_T_SVKEI_KAISEN_UW | Table | Service Contract Line Item Expanded View table — expanded view of service contract line item data for querying |
| KK_T_SVC_KEI | Table | Service Contract table — master table for service contract records, used for surrender checks |
| KK_T_ADCHG_DTL | Table | Home Address Change Detail table — detail records for address change requests |
| isSurrenderService | Method | Surrender service check — determines if a service contract has been cancelled/surrendered. The exception is when the abnormal section is address change, even if cancelled, it is not treated as surrendered |
| DELAYED_START | Constant | Delayed start flag value = "1" (ディレイド(起動)) |
| DELAYED_NOT_START | Constant | Non-delayed start flag value = "0" (ディレイド(でない)) |
| ADCHG_DTL_SBT_CD_KOJIAK_NO | Constant | Address change detail subtype code for work project number = "06" |
| ADCHG_DTL_SBT_CD_SVC_KEI_NO | Constant | Address change detail subtype code for service contract number = "01" |
| KU_T_KOJIAK_KOJIAK_STAT | Constant | Work project status for cancelled = "900" |
