Skip to content

Integration DAG: Lifecycle events

Why this page is structured this way: Lifecycle events are not time-locked or fan-out-style. They’re sequential chains triggered by client request or detected status (dormancy). The fundamental ordering rule: KRA first, exchange and depository validate against KRA’s new state. Multiple smaller DAGs cover the distinct event types rather than one big graph.

  • 4 ASCII DAGs covering Modification, Transmission (deceased), Dormancy → Reactivation, Closure.
  • 26 unique integration nodes across the event types.
  • Modification ordering is the headline gotcha: must serialize KRA → CKYCUCCBO; concurrent updates lead to rejection-cascades.
  • Transmission is the slowest event class — succession without nominee can take months.

Most onboarding flows ago, the client became ACTIVE and started trading. Now life happens. They move addresses. They change banks. A holder dies. The client requests closure. Each event has its own DAG with its own sequential dependencies. Unlike onboarding (which parallelizes aggressively), lifecycle events are mostly serial because downstream systems (exchanges, depositories) validate against upstream registry (KRA) state — they need to see the new state before they accept the update.

DAG 1 — Modification (address / bank / nominee / segment / mobile / email / name)

Section titled “DAG 1 — Modification (address / bank / nominee / segment / mobile / email / name)”
LC-MOD-REQUEST (client raises modification request)
LC-MOD-VALIDATE (proof check: penny-drop for bank, OTP for mobile/email,
document for address/name/DOB)
│ fail → re-request
▼ pass
LC-MOD-APPROVE (auto-approve OR manual review per modification type)
LC-MOD-KRA (KRA upload of change record)
LC-MOD-CKYC (CKYC upload within 7-day window)
LC-MOD-UCC (NSE/BSE/MCX UCC update; validates against new KRA state)
LC-MOD-BO (CDSL / NSDL BO update; validates against KRA + UCC)
LC-MOD-COMPLETE (client notified; UI reflects new state)
LC-TR-DEATH_CERT (death certificate submission)
LC-TR-NOMINEE_CHECK (is nominee registered?)
├── yes ──► LC-TR-NOMINEE_KYC (verify nominee identity; capture KYC if new)
│ │
│ ▼
│ LC-TR-CLAIM_PROCESS (claim form + nominee acknowledgement)
│ │
│ ▼
│ LC-TR-BO_TRANSFER (DP transfers BO to nominee's name)
│ │
│ ▼
│ LC-TR-DECISION (close OR continue as nominee's account)
└── no ───► LC-TR-SUCCESSION (probate / succession certificate path)
▼ (months typical)
LC-TR-LEGAL_HEIR (succession determined by court / will)
LC-TR-BO_TRANSFER (same target node as nominee path)
LC-DM-DETECT (no trading activity for 12 months — flagged via monthly scan)
LC-DM-FLAG (account flagged dormant; segments may auto-disable)
├──► LC-DM-MIS_REPORT (broker's dormant-account MIS to exchange monthly)
▼ (client returns)
LC-RA-REQUEST (client raises reactivation request)
LC-RA-REKYC (if dormant > 12 months — re-validate identity/address/bank)
LC-RA-UCC_UNFREEZE (exchange UCC unfreeze)
LC-RA-BO_REACTIVATE (depository BO reactivate; segments re-enabled)
LC-RA-COMPLETE (client notified; trading resumed)
LC-CL-REQUEST (client raises closure request)
LC-CL-PENDING_CHECK (any pending trades, MTF positions, unsettled payouts?)
│ pending → wait + notify
▼ clean
LC-CL-FUND_WITHDRAW (refund client funds bank balance)
LC-CL-PLEDGE_RELEASE (release margin pledge, MTF pledge)
LC-CL-BO_CLOSE (CDSL / NSDL BO closure intimation)
LC-CL-UCC_DEACTIVATE (NSE / BSE / MCX UCC deactivation)
LC-CL-KRA_CLOSURE (KRA status update to "closed"; CKYC retained as identity ref)
LC-CL-COMPLETE (final acknowledgement to client; account terminates)
node_idoperationdepends_onblocksparallel_eligibleidempotentretry_policyrollbackslafailure_surfacespec_source
LC-MOD-REQUESTClient modification request[entry]LC-MOD-VALIDATE[none]no (user-keyed)n/an/a< 1mclient UI[industry typical]
LC-MOD-VALIDATEProof validation (penny-drop / OTP / doc)LC-MOD-REQUESTLC-MOD-APPROVE[none]yes (request-keyed)3× then manualre-request< 5mclient UI[industry typical]
LC-MOD-APPROVEAuto or manual approvalLC-MOD-VALIDATELC-MOD-KRA[none]yesn/a (human if manual)request rejection< 24h (manual)ops queue[industry typical]
LC-MOD-KRAKRA upload of modificationLC-MOD-APPROVELC-MOD-CKYC[none]yes (PAN+ref-id keyed)3× then 24h queuere-upload on rejectionwithin 24h batchKRA rejectSEBI/HO/MIRSD/SECFATF/P/CIR/2024/79
LC-MOD-CKYCCKYC upload within 7-day windowLC-MOD-KRALC-MOD-UCC[none]yes3× within windowre-uploadwithin 7dCERSAI rejectCKYC dual upload circular
LC-MOD-UCCExchange UCC updateLC-MOD-KRALC-MOD-BO[none]yes (UCC-keyed)3× then manualre-submit1-2 daysUCC rejectExchange UCC circulars
LC-MOD-BODepository BO updateLC-MOD-UCCLC-MOD-COMPLETE[none]yes (BO-keyed)3× then manualre-submit1-2 daysDP rejectCDSL/NSDL circulars
LC-MOD-COMPLETEClient notification of completionLC-MOD-BO[exit][none]yesre-dispatch< 1hDLT comms[industry typical]
LC-TR-DEATH_CERTDeath certificate submission[entry]LC-TR-NOMINEE_CHECK[none]no (case-keyed)n/an/amanualops consoleTransmission compliance
LC-TR-NOMINEE_CHECKIs nominee registered?LC-TR-DEATH_CERTLC-TR-NOMINEE_KYC or LC-TR-SUCCESSION[none]yes (BO-keyed)n/an/a< 1dops console[industry typical]
LC-TR-NOMINEE_KYCNominee KYC capture/verifyLC-TR-NOMINEE_CHECK (yes)LC-TR-CLAIM_PROCESSparallel-with succession pathyes (nominee-keyed)3× then manualrestart on rejection1–4 weeksops queueSEBI Jan 2025 nominee revamp
LC-TR-CLAIM_PROCESSClaim form + nominee ackLC-TR-NOMINEE_KYCLC-TR-BO_TRANSFER[none]yesn/a (human)re-process1–4 weeksops queue[industry typical]
LC-TR-SUCCESSIONProbate / succession certificate pathLC-TR-NOMINEE_CHECK (no)LC-TR-LEGAL_HEIRparallel-with nominee pathn/a (legal)n/an/amonthsops queue + legal[industry typical]
LC-TR-LEGAL_HEIRLegal heir determined via court / willLC-TR-SUCCESSIONLC-TR-BO_TRANSFER[none]n/an/an/amonthsops queue + legal[industry typical]
LC-TR-BO_TRANSFERDP transfers BO to nominee / heirLC-TR-CLAIM_PROCESS or LC-TR-LEGAL_HEIRLC-TR-DECISION[none]yes (BO-keyed)3× then manualreversal needed if disputed1–2 weeks post claimDP consoleCDSL/NSDL transmission circulars
LC-TR-DECISIONClose BO or continue under nominee/heirLC-TR-BO_TRANSFER[exit or → modification flow][none]n/a (human)n/an/aclient-drivenclient UI[industry typical]
LC-DM-DETECTMonthly scan for 12-month no-trade[time-trigger monthly]LC-DM-FLAG[none]yes (date-keyed)nonen/ascheduledops console[industry typical]
LC-DM-FLAGFlag account dormant; disable segmentsLC-DM-DETECTLC-DM-MIS_REPORTparallel-with MIS pathyes (account-keyed)1× then manualun-flag on review< 1hops console + RMS[industry typical]
LC-DM-MIS_REPORTMonthly dormant-account MIS to exchangeLC-DM-FLAG[exit][none]yes (month-keyed)3× then manualre-submitby month-endexchange portalReporting domain
LC-RA-REQUESTClient reactivation requestclient-initiatedLC-RA-REKYC[none]non/an/a< 1mclient UI[industry typical]
LC-RA-REKYCRe-KYC if >12m dormantLC-RA-REQUESTLC-RA-UCC_UNFREEZE[none]yes (PAN+ref-id keyed)3× then manualre-request1–3 daysops queue + KRAKYC lifecycle domain
LC-RA-UCC_UNFREEZEExchange UCC unfreezeLC-RA-REKYCLC-RA-BO_REACTIVATE[none]yes3× then manualre-submit1–2 daysUCC rejectexchange circulars
LC-RA-BO_REACTIVATEDepository BO reactivateLC-RA-UCC_UNFREEZELC-RA-COMPLETE[none]yes3× then manualre-submit1–2 daysDP rejectCDSL/NSDL circulars
LC-RA-COMPLETEClient notified; trading resumedLC-RA-BO_REACTIVATE[exit][none]yesre-dispatch< 1hDLT comms[industry typical]
LC-CL-REQUESTClient closure request[entry]LC-CL-PENDING_CHECK[none]non/an/a< 1mclient UI[industry typical]
LC-CL-PENDING_CHECKOutstanding trades / MTF / payouts?LC-CL-REQUESTLC-CL-FUND_WITHDRAW[none]yesnonewait/notify on pending< 1hops queue[industry typical]
LC-CL-FUND_WITHDRAWRefund client funds bank balanceLC-CL-PENDING_CHECKLC-CL-PLEDGE_RELEASE[none]no (money)1× then criticalreversal on bank errorT+1back-office + bank[industry typical]
LC-CL-PLEDGE_RELEASERelease margin + MTF pledgesLC-CL-FUND_WITHDRAWLC-CL-BO_CLOSE[none]yes3× then manualreverse if disputed< 1 dayDP consoleCDSL pledge circulars
LC-CL-BO_CLOSECDSL / NSDL BO closureLC-CL-PLEDGE_RELEASELC-CL-UCC_DEACTIVATE[none]yes (BO-keyed)3× then manualre-submit on rejection1–2 daysDP rejectCDSL/NSDL circulars
LC-CL-UCC_DEACTIVATEExchange UCC deactivationLC-CL-BO_CLOSELC-CL-KRA_CLOSURE[none]yes3× then manualre-submit1–2 daysUCC rejectexchange circulars
LC-CL-KRA_CLOSUREKRA status → “closed” (CKYC retained)LC-CL-UCC_DEACTIVATELC-CL-COMPLETE[none]yesre-submitwithin 7dKRA rejectSEBI KYC master circular
LC-CL-COMPLETEFinal acknowledgement to clientLC-CL-KRA_CLOSURE[exit][none]yesre-dispatch< 1hDLT comms[industry typical]
  • [gotcha] Modification ordering is sequential, not parallel — unlike onboarding’s parallel KRA/CKYC/UCC/BO fan-out. New ops engineers sometimes try to fire all four updates concurrently for a modification and see exchange/UCC rejections because they hit the exchange before KRA’s new state propagated. Strict KRA → CKYC → UCC → BO is the rule.
  • [industry practice] LC-TR-SUCCESSION path (no-nominee transmission) is operationally one of the longest lifecycle flows — succession certificates can take months. Brokers maintain a separate “succession queue” for these cases, distinct from the active operational ops queue, with quarterly progress reviews rather than daily.
  • [risk trade-off] LC-DM-FLAG auto-disables segments when dormancy detected. Tightening detection (e.g., 6 months instead of 12) reduces credit/abuse risk for inactive accounts but increases legitimate-customer friction when they return. Most brokers use 12 months (industry default) and accept the trailing risk window.
  • [cost optimization] LC-CL-* closure path can generate substantial cost if not optimized. Some brokers offer a “closure-with-securities-transfer” path that lets the client transfer securities to another broker without a sale — bypassing LC-CL-PLEDGE_RELEASE → securities pay-in cycle and saving the client’s STT / capital gains hit.

2026-05-14


AI-generated and not legal, financial, or compliance advice. See the project README for full disclaimer.