# Business Logic — JBSbatKKSmtvlIdoInfSksi.updateTchNcsr1() [128 LOC]

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

## 1. Role

### JBSbatKKSmtvlIdoInfSksi.updateTchNcsr1()

This method performs **update processing for contracts in "notification pending" status** during the Smart Value variation (portability) correlation notification file generation process. It handles a **single contract record** (as indicated by the Javadoc: "異動が1件の場合" — when there is one variation). The business purpose is to determine the correct notification dates for third-party discount and price plan changes based on the contract's current progress state and pricing type (volume-based or flat-rate), then persist those updates along with the KDDI variation notification status.

The method operates on three interconnected business domains: **third-party discount termination notification** (解除他事業者通知 — notifying partner carriers of contract termination), **price plan change notification** (料金プラン変更他事業者通知 — notifying of plan changes), and **KDDI variation notification** (KDDI割引契約異動通知 — notifying KDDI of contract changes for discount contracts). It uses a **routing/dispatch design pattern**: based on the progress state (`prgStat`) and pricing type, it computes updated notification dates, then conditionally inserts third-party discount contract records and always updates the KDDI notification record.

This is a **shared batch utility** called by `setOutMapNetUpd()` (for net service contracts), `setOutMapTelUpd()` (for telephone service contracts), and `updateTchNcsr2()` (when processing the second batch of variation records). It serves as the core date-computation and persistence layer for the variation notification file generation batch process.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["updateTchNcsr1 inHash inDslFlg"])

    START --> INIT["Initialize: dslFlg = true"]
    INIT --> INPUT["Extract input fields from inHash"]
    INPUT --> SYSDATE["Get system date: sysdate"]
    SYSDATE --> DSL_CHECK{dslTajgsTchYmd == YMD_DEF}

    DSL_CHECK -->|true| DSL_CHECK2{prgStat in SHOSA_CL, DSL_FIN, KSI_DSL_FIN, PAUSE_STA_FIN, CNCL_FIN, or KARI_CNCL?}
    DSL_CHECK2 -->|true| DSL_SET1["updDslTajgsTchYmd = sysdate substring"]
    DSL_CHECK2 -->|false| DSL_FALL1["dslFlg unchanged"]
    DSL_CHECK -->|false| DSL_CHECK3{dslTajgsTchYmd != YMD_DEF AND chkKaihk AND prgStat != COURSECHG_FIN?}
    DSL_CHECK3 -->|true| DSL_SET2["updDslTajgsTchYmd = YMD_DEF
dslFlg = false"]
    DSL_CHECK3 -->|false| DSL_CHECK4{dslTajgsTchYmd == YMD_DEF?}
    DSL_CHECK4 -->|true| DSL_SET3["dslFlg = false"]
    DSL_CHECK4 -->|false| DSL_FALL2["dslFlg unchanged"]

    DSL_SET1 --> PP_CHECK{eohntPplanTikiSkco == EOHNT_PPLAN_TIKI_SKCD_JYUI}
    DSL_SET2 --> PP_CHECK
    DSL_SET3 --> PP_CHECK
    DSL_FALL1 --> PP_CHECK
    DSL_FALL2 --> PP_CHECK

    PP_CHECK -->|true| PP_SET1["updPpchgTajgsTchYmd = sysdate substring"]
    PP_CHECK -->|false| PP_CHECK2{eohntPplanTikiSkco == EOHNT_PPLAN_TIKI_SKCD_TEI}
    PP_SET1 --> FINAL_CHECK{dslTajgsTchYmd != updDslTajgsTchYmd OR ppchgTajgsTchYmd != updPpchgTajgsTchYmd?}
    PP_CHECK2 -->|true| PP_SET2["updPpchgTajgsTchYmd = YMD_DEF"]
    PP_CHECK2 -->|false| PP_FALL["No ppchg update"]

    PP_SET2 --> FINAL_CHECK
    PP_FALL --> FINAL_CHECK

    FINAL_CHECK -->|true| EXTRAPARA["Extract: tajgsWribKeiNo, tajgswkeiTgkeiNo, genAddDtm"]
    FINAL_CHECK -->|false| DSL_IN_DSL_CHECK{dslFlg AND inDslFlg?}

    EXTRAPARA --> WHERE["Set whereParam array"]
    WHERE --> SELECT["executeKK_T_TAJGSWKEI_TGKEI_PKSELECT"]
    SELECT --> ARRSET["Build setParam[21] from data"]
    ARRSET --> INSERT["executeKK_T_TAJGSWKEI_TGKEI_PKINSERT"]
    INSERT --> DSL_IN_DSL_CHECK

    DSL_IN_DSL_CHECK -->|true| SETPARAM_DSL["setParam[0] = KDDI_WKEI_IDT_STAT_CD_TCH_WAIT
setParam[1] = TAJGS_WRIB_KEI_TRAN_CD_DSL"]
    DSL_IN_DSL_CHECK -->|false| SETPARAM_OTHER["setParam[0] = KDDI_WKEI_IDT_STAT_CD_TCH_WAIT"]

    SETPARAM_DSL --> FINAL_UPDATE["executeKK_T_KDDI_WKEI_IDT_PKUPDATE"]
    SETPARAM_OTHER --> FINAL_UPDATE
    FINAL_UPDATE --> END_NODE(["Return"])
```

**Constant Resolution Reference:**

| Constant | Value | Business Meaning |
|----------|-------|------------------|
| `YMD_DEF` | `"20991231"` | Default date (end-of-system era — treated as "not yet notified") |
| `PRG_STAT_SHOSA_CL` | `"0901"` | Progress state: Investigation Canceled |
| `PRG_STAT_DSL_FIN` | `"1304"` | Progress state: Termination Completed |
| `PRG_STAT_KSI_DSL_FIN` | `"2203"` | Progress state: Forced Termination Completed |
| `PRG_STAT_PAUSE_STA_FIN` | `"2401"` | Progress state: Service Suspension Start Completed |
| `PRG_STAT_CNCL_FIN` | `"1201"` | Progress state: Contract Cancellation Completed |
| `PRG_STAT_KARI_CNCL` | `"9706"` | Progress state: Temporary Cancellation Received |
| `PRG_STAT_COURSECHG_FIN` | `"1422"` | Progress state: Course Change Completed |
| `KDDI_WKEI_IDT_STAT_CD_TCH_WAIT` | `"3"` | Status: Notification Pending (file generated) |
| `TAJGS_WRIB_KEI_TRAN_CD_DSL` | `"2"` | Third-party discount processing code: Termination |
| `EOHNT_PPLAN_TIKI_SKCD_JYUI` | `"1"` | Pricing plan type: Volume-based (従量制) |
| `EOHNT_PPLAN_TIKI_SKCD_TEI` | `"0"` | Pricing plan type: Flat-rate (定額制) |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `inHash` | `JBSbatServiceInterfaceMap` | Input data map containing contract variation notification fields: KDDI discount contract ID number (`KDDI_WKEI_IDT_NO`), progress status (`PRG_STAT`), smart value variation detail code (`SMTVL_IDO_DTL_CD`), third-party discount termination notification date (`DSL_TAJGS_TCH_YMD`), price plan change notification date (`PPCHG_TAJGS_TCH_YMD`), and EO light network pricing plan type code (`EOHNT_PPLAN_TIKI_SKCD`). This map is the data carrier from the batch caller into the processing pipeline. |
| 2 | `inDslFlg` | `boolean` | Termination flag — indicates whether the originating service context has an active termination. Combined with the locally computed `dslFlg` in the final conditional branch, it determines whether a third-party discount processing code (`TAJGS_WRIB_KEI_TRAN_CD_DSL` = `"2"` / Termination) is written to the KDDI notification update. When both flags are `true`, the update includes the termination code; otherwise only the status code is set. |

**Instance fields / external state read:**
- `chkKaihk(String prgStat, String smtvlIdoDtlCd)` — private method of the same class; checks if the contract is in a valid state for variation processing based on the progress status and smart value variation detail code.

## 4. CRUD Operations / Called Services

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `JBSbatDateUtil.getSystemDateTimeStamp` | - | - | Reads system datetime for current timestamp. Used to derive the notification date. |
| R | `inHash.getString(...)` | - | - | Reads multiple fields from the input data map: KDDI WKEI IDT NO, PRG STAT, SMTVL IDO DTL CD, DSL TAJGS TCH YMD, PPCHG TAJGS TCH YMD, EOHNT PPLAN TIKI SKCD. |
| R | `JBSbatKKSmtvlIdoInfSksi.chkKaihk` | - | - | Calls the class's private method `chkKaihk(prgStat, smtvlIdoDtlCd)` to validate whether the contract is in a valid state for third-party variation processing. |
| R | `rstMap.getString(...)` | - | - | Reads fields from the result of `executeKK_T_TAJGSWKEI_TGKEI_PKSELECT`: SVC KEI NO, TAJGSWKEI T GKEI TSA YMD, TAJGSWKEI T GKEI TEND YMD. |
| R | `JBSbatKK_T_TAJGSWKEI_TGKEI.TAJGSWKEI_TGKEI_NO.getString` | - | - | Reads the TAJGSWKEI T GKEI NO field from inHash for key lookup. |
| U | `JBSbatKKSmtvlIdoInfSksi.executeKK_T_KDDI_WKEI_IDT_PKUPDATE` | - | `KK_T_KDDI_WKEI_IDT` | Updates the KDDI discount contract variation notification record with the notification status code (and optionally the termination processing code). |
| C | `JBSbatKKSmtvlIdoInfSksi.executeKK_T_TAJGSWKEI_TGKEI_PKINSERT` | - | `KK_T_TAJGSWKEI_TGKEI` | Inserts a new third-party discount target contract record with updated notification dates, derived from input hash and prior SELECT query. |
| R | `JBSbatKKSmtvlIdoInfSksi.executeKK_T_TAJGSWKEI_TGKEI_PKSELECT` | - | `KK_T_TAJGSWKEI_TGKEI` | Selects an existing third-party discount target contract record using the compound key (tajgsWribKeiNo, tajgswkeiTgkeiNo, genAddDtm) to read prior field values needed for the INSERT. |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Batch: `JBSbatKKSmtvlIdoInfSksi.setOutMapNetUpd` | `setOutMapNetUpd` -> `updateTchNcsr1(inHash, inDslFlg)` | `executeKK_T_KDDI_WKEI_IDT_PKUPDATE [U] KK_T_KDDI_WKEI_IDT`, `executeKK_T_TAJGSWKEI_TGKEI_PKINSERT [C] KK_T_TAJGSWKEI_TGKEI` |
| 2 | Batch: `JBSbatKKSmtvlIdoInfSksi.setOutMapTelUpd` | `setOutMapTelUpd` -> `updateTchNcsr1(inHash, inDslFlg)` | `executeKK_T_KDDI_WKEI_IDT_PKUPDATE [U] KK_T_KDDI_WKEI_IDT`, `executeKK_T_TAJGSWKEI_TGKEI_PKINSERT [C] KK_T_TAJGSWKEI_TGKEI` |
| 3 | Batch: `JBSbatKKSmtvlIdoInfSksi.updateTchNcsr2` | `updateTchNcsr2` -> `updateTchNcsr1(inHash, inDslFlg)` | `executeKK_T_KDDI_WKEI_IDT_PKUPDATE [U] KK_T_KDDI_WKEI_IDT`, `executeKK_T_TAJGSWKEI_TGKEI_PKINSERT [C] KK_T_TAJGSWKEI_TGKEI` |

## 6. Per-Branch Detail Blocks

**Block 1** — IF (dslTajgsTchYmd equals YMD_DEF = "20991231") (L1285)

> If the third-party discount termination notification date is at the default value (not yet notified), and the progress state indicates a terminal cancellation state, set the update date to the current system date.

| # | Type | Code |
|---|------|------|
| 1 | SET | `updDslTajgsTchYmd = sysdate.substring(0, 8)` |

**Condition details:**
- `YMD_DEF.equals(dslTajgsTchYmd)` — date is "20991231" (not yet notified)
- AND one of:
  - `PRG_STAT_SHOSA_CL.equals(prgStat)` — prgStat = "0901" (Investigation Canceled)
  - `PRG_STAT_DSL_FIN.equals(prgStat)` — prgStat = "1304" (Termination Completed)
  - `PRG_STAT_KSI_DSL_FIN.equals(prgStat)` — prgStat = "2203" (Forced Termination Completed)
  - `PRG_STAT_PAUSE_STA_FIN.equals(prgStat)` — prgStat = "2401" (Service Suspension Start Completed)
  - `PRG_STAT_CNCL.equals(prgStat)` — prgStat = "1201" (Contract Cancellation Completed)
  - `PRG_STAT_KARI_CNCL.equals(prgStat)` — prgStat = "9706" (Temporary Cancellation Received, IT1-2018-0000100 ADD)

**Block 2** — ELSE-IF (dslTajgsTchYmd is not YMD_DEF AND chkKaihk passes AND not COURSECHG_FIN) (L1296)

> If the notification date is not the default (already notified), the contract is in a valid variation state (chkKaihk returns true), and it is not a course-change-completed status, reset the update notification date to default and disable the DSL flag.

| # | Type | Code |
|---|------|------|
| 1 | SET | `updDslTajgsTchYmd = YMD_DEF` [-> `"20991231"`] |
| 2 | SET | `dslFlg = false` |

**Condition details:**
- `!YMD_DEF.equals(dslTajgsTchYmd)` — date is NOT "20991231" (already notified)
- AND `chkKaihk(prgStat, smtvlIdoDtlCd)` — valid variation state check passes
- AND `!PRG_STAT_COURSECHG_FIN.equals(prgStat)` — prgStat is NOT "1422" (Course Change Completed)

**Block 3** — ELSE-IF (dslTajgsTchYmd equals YMD_DEF) (L1303)

> If the notification date is the default value but none of the terminal cancellation states applied above, simply disable the DSL flag (no update needed).

| # | Type | Code |
|---|------|------|
| 1 | SET | `dslFlg = false` |

**Condition details:**
- `YMD_DEF.equals(dslTajgsTchYmd)` — date is "20991231"

**Block 4** — IF (eohntPplanTikiSkco equals EOHNT_PPLAN_TIKI_SKCD_JYUI = "1") (L1319)

> If the pricing plan type is volume-based (従量制), set the price plan change notification update date to the current system date. Note: the original condition also checked for course-change-completed status, but was simplified per OM-2014-0002559 to allow notification regardless of progress state.

| # | Type | Code |
|---|------|------|
| 1 | SET | `updPpchgTajgsTchYmd = sysdate.substring(0, 8)` |

**Condition details:**
- `EOHNT_PPLAN_TIKI_SKCD_JYUI.equals(eohntPplanTikiSkco)` — pricing plan type = "1" (Volume-based)
- AND `YMD_DEF.equals(ppchgTajgsTchYmd)` — current ppchg date is "20991231" (not yet notified)

**Block 5** — ELSE-IF (eohntPplanTikiSkco equals EOHNT_PPLAN_TIKI_SKCD_TEI = "0") (L1331)

> If the pricing plan type is flat-rate (定額制) and the notification date is not the default (already notified), reset the update date to default.

| # | Type | Code |
|---|------|------|
| 1 | SET | `updPpchgTajgsTchYmd = YMD_DEF` [-> `"20991231"`] |

**Condition details:**
- `EOHNT_PPLAN_TIKI_SKCD_TEI.equals(eohntPplanTikiSkco)` — pricing plan type = "0" (Flat-rate)
- AND `!YMD_DEF.equals(ppchgTajgsTchYmd)` — ppchg date is NOT "20991231" (already notified)

**Block 6** — IF (update values differ from originals) (L1339)

> If either the third-party discount termination notification date or the price plan change notification date was modified, perform the database operations: query the existing third-party discount contract, then insert an updated record.

| # | Type | Code |
|---|------|------|
| 1 | SET | `tajgsWribKeiNo = inHash.getString(JBSbatKK_T_TAJGSWKEI_TGKEI.TAJGS_WRIB_KEI_NO)` |
| 2 | SET | `tajgswkeiTgkeiNo = inHash.getString(JBSbatKK_T_TAJGSWKEI_TGKEI.TAJGSWKEI_TGKEI_NO)` |
| 3 | SET | `genAddDtm = inHash.getString(JBSbatKK_T_TAJGSWKEI_TGKEI.GENE_ADD_DTM)` |
| 4 | SET | `whereParam = {tajgsWribKeiNo, tajgswkeiTgkeiNo, genAddDtm}` |
| 5 | CALL | `rstMap = executeKK_T_TAJGSWKEI_TGKEI_PKSELECT(whereParam)` — queries KK_T_TAJGSWKEI_TGKEI by compound PK |
| 6 | SET | `setParam[0] = tajgsWribKeiNo` |
| 7 | SET | `setParam[1] = tajgswkeiTgkeiNo` |
| 8 | SET | `setParam[2] = JBSbatDateUtil.getSystemDateTimeStamp()` |
| 9 | SET | `setParam[3] = rstMap.getString(JBSbatKK_T_TAJGSWKEI_TGKEI.SVC_KEI_NO)` |
| 10 | SET | `setParam[4] = updDslTajgsTchYmd` |
| 11 | SET | `setParam[5] = updPpchgTajgsTchYmd` |
| 12 | SET | `setParam[6] = rstMap.getString(JBSbatKK_T_TAJGSWKEI_TGKEI.TAJGSWKEI_TGKEI_TSTAYMD)` |
| 13 | SET | `setParam[7] = rstMap.getString(JBSbatKK_T_TAJGSWKEI_TGKEI.TAJGSWKEI_TGKEI_TENDYMD)` |
| 14 | EXEC | `setParam[8..20]` = remaining fields initialized to null/empty (Object[21] allocated) |
| 15 | CALL | `executeKK_T_TAJGSWKEI_TGKEI_PKINSERT(setParam)` — inserts into KK_T_TAJGSWKEI_TGKEI |

**Condition details:**
- `!(dslTajgsTchYmd.equals(updDslTajgsTchYmd) && ppchgTajgsTchYmd.equals(updPpchgTajgsTchYmd))` — at least one date was modified

**Block 7** — IF/ELSE (dslFlg AND inDslFlg) (L1356)

> Determines the set of parameters for the final KDDI contract variation notification update. When both the internally computed `dslFlg` and the input `inDslFlg` are true, includes both the notification status code and the third-party discount termination processing code.

| # | Type | Code |
|---|------|------|
| 1 | SET | `setParam = new Object[2]` |
| 2 | SET | `setParam[0] = KDDI_WKEI_IDT_STAT_CD_TCH_WAIT` [-> `"3"` — Notification Pending] |
| 3 | SET | `setParam[1] = TAJGS_WRIB_KEI_TRAN_CD_DSL` [-> `"2"` — Third-party discount processing: Termination] |

**Block 7.1** — ELSE (L1365)

> When dslFlg or inDslFlg is false, set only the notification status code without the termination processing code.

| # | Type | Code |
|---|------|------|
| 1 | SET | `setParam = new Object[1]` |
| 2 | SET | `setParam[0] = KDDI_WKEI_IDT_STAT_CD_TCH_WAIT` [-> `"3"` — Notification Pending] |

**Block 8** — EXEC (Final Update) (L1373)

> Execute the KDDI discount contract variation notification update with the determined parameters.

| # | Type | Code |
|---|------|------|
| 1 | SET | `whereParam = new Object[1]` |
| 2 | SET | `whereParam[0] = kddiWkeiIdtNo` |
| 3 | CALL | `executeKK_T_KDDI_WKEI_IDT_PKUPDATE(setParam, whereParam)` — updates KK_T_KDDI_WKEI_IDT |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `kddiWkeiIdtNo` | Field | KDDI Discount Contract Variation Notification Number — unique identifier for the KDDI discount contract variation record |
| `prgStat` | Field | Progress Status — the current state code of the service contract's lifecycle processing |
| `smtvlIdoDtlCd` | Field | Smart Value Variation Detail Code — distinguishes whether the variation is smart value target ("00") or non-target ("01") |
| `dslTajgsTchYmd` | Field | Termination Third-Party Discount Notification Year-Month-Day — the date when contract termination was notified to partner carriers |
| `ppchgTajgsTchYmd` | Field | Price Plan Change Third-Party Discount Notification Year-Month-Day — the date when price plan changes were notified to partner carriers |
| `updDslTajgsTchYmd` | Field | Updated Termination Third-Party Discount Notification Date — the computed date used for the database update |
| `updPpchgTajgsTchYmd` | Field | Updated Price Plan Change Third-Party Discount Notification Date — the computed date used for the database update |
| `eohntPplanTikiSkco` | Field | EO Light Network Pricing Plan Type Identification Code — classifies the contract pricing as volume-based ("1") or flat-rate ("0") |
| `tajgsWribKeiNo` | Field | Third-Party Discount Contract Number — the partner discount contract number used as part of the compound key |
| `tajgswkeiTgkeiNo` | Field | Third-Party Discount Contract Target Contract Number — the target contract number within the third-party discount relationship |
| `genAddDtm` | Field | Registration Date and Time — when the third-party discount target contract record was created |
| `YMD_DEF` | Constant | Default year-month-day value "20991231" — used as a sentinel meaning "not yet notified / not applicable" |
| `KDDI_WKEI_IDT_STAT_CD_TCH_WAIT` | Constant | Status code "3" — Notification Pending (file has been generated, awaiting KDDI processing) |
| `TAJGS_WRIB_KEI_TRAN_CD_DSL` | Constant | Processing code "2" — Third-party discount processing: Termination |
| `EOHNT_PPLAN_TIKI_SKCD_JYUI` | Constant | Pricing plan type "1" — Volume-based pricing (従量制) |
| `EOHNT_PPLAN_TIKI_SKCD_TEI` | Constant | Pricing plan type "0" — Flat-rate pricing (定額制) |
| `PRG_STAT_SHOSA_CL` | Constant | Progress state "0901" — Investigation Canceled (照会取消) |
| `PRG_STAT_DSL_FIN` | Constant | Progress state "1304" — Termination Completed (解約完了) |
| `PRG_STAT_KSI_DSL_FIN` | Constant | Progress state "2203" — Forced Termination Completed (強制解約完了) |
| `PRG_STAT_PAUSE_STA_FIN` | Constant | Progress state "2401" — Service Suspension Start Completed (休止開始完了) |
| `PRG_STAT_CNCL_FIN` | Constant | Progress state "1201" — Contract Cancellation Completed (契約取消完了) |
| `PRG_STAT_KARI_CNCL` | Constant | Progress state "9706" — Temporary Cancellation Received (工事仮キャンセル受信), added in IT1-2018-0000100 |
| `PRG_STAT_COURSECHG_FIN` | Constant | Progress state "1422" — Course Change Completed (コース変更完了) |
| `chkKaihk` | Method | Private validation method — checks whether the contract is in a valid state for third-party variation processing |
| Smart Value (スマートバリュー) | Business term | K-Opticom's bundled service plan combining internet and telephone services; the variation (portability) process handles customer transitions into or out of this bundle |
| Third-Party Discount (他事業者割引) | Business term | Discount arrangements between K-Opticom and partner carriers; notification to partners is required on contract changes including termination and price plan changes |
| KK_T_KDDI_WKEI_IDT | DB Table | KDDI Discount Contract Variation Notification table — stores notification status for KDDI discount contracts |
| KK_T_TAJGSWKEI_TGKEI | DB Table | Third-Party Discount Target Contract table — stores records of contracts eligible for third-party discount notifications |
| 従量制 (Jyuissei) | Business term | Volume-based pricing — the customer's billing is based on actual usage volume |
| 定額制 (Teigakusei) | Business term | Flat-rate pricing — the customer pays a fixed monthly fee regardless of usage |
| 異動通知 (Ido Tsuchi) | Business term | Variation notification — the process of notifying KDDI and partner carriers of contract changes |
| 解約 (Kaiya) | Business term | Termination — the cancellation of a service contract |
| OM-2014-0002559 | Change ticket | Fix that removed the progress state condition for price plan change notifications, allowing notification even when networks are converted to volume-based before service start |
| IT1-2018-0000100 | Change ticket | Fix that added PRG_STAT_KARI_CNCL ("9706") to the list of terminal states that trigger notification date updates |
