Skip to content

Integration DAG: BOD

Why this page is structured this way: BOD is the most-paralleled phase of the day after the post-eSign batch zone. The fan-out is shallow but wide — dozens of file fetches and parameter loads run concurrently because they’re independent. The fan-in is to a single readiness gate that has to be green by 09:00 or the broker cannot trade.

  • 2 ASCII DAGs: main file-ingestion graph + parallel operational-health-check subgraph.
  • 22 unique integration nodes; most are file fetches with independent retry policies.
  • Final fan-in is market-open readiness — AND of RMS-ready + surveillance-ready + health-pass.
  • BOD failure (incomplete by 09:00) is a hard incident; runbooks escalate immediately to clearing-corp helpdesk + DR-site failover.

The broker doesn’t do anything during BOD that’s strictly required by the exchange — exchanges open at 09:00 regardless. BOD is the broker’s prep: pulling the day’s files (so the OMS knows valid contracts, valid prices, the day’s margin parameters), reloading the RMS so client positions are correctly marked, arming the surveillance system, and running a battery of health checks (FIX login, DR replication, CSCRF log feeds). If any of this fails by 09:00, the broker has a choice — trade with a degraded system (a regulatory-fine-eligible offense) or refuse trades (a customer-experience-fine-eligible offense). Most brokers refuse.

DAG 1 — File ingestion + RMS reload + surveillance setup

Section titled “DAG 1 — File ingestion + RMS reload + surveillance setup”
BOD-START (06:00 IST, ops on call)
├──► BOD-EX-HOLIDAY_CAL (NSE/BSE/MCX — annual + amendments)
├──► BOD-EX-CONTRACT_CM (CM symbols, lot, tick)
├──► BOD-EX-CONTRACT_FO (F&O contracts + expiry)
├──► BOD-EX-CONTRACT_CD (CD contracts)
├──► BOD-CC-SPAN_SCANRANGE (clearing corp — NSCCL/ICCL/MCXCCL)
├──► BOD-CC-MTM_T1 (yesterday's close MTM)
├──► BOD-EX-CIRCUIT_FILTER (per-stock daily price band)
├──► BOD-EX-MEMBER_FILES (member status, suspensions)
├──► BOD-DP-OBLIGATION_T1 (yesterday's pending settlements)
├──► BOD-DP-PLEDGE_STATUS (overnight pledge updates)
├──► BOD-DP-DDPI_STATUS (DDPI activations finalized overnight)
├──► BOD-DP-TRANSMISSION (overnight transmission updates)
├──► BOD-SURV-GSM_LIST (Graded Surveillance Measure list)
├──► BOD-SURV-ASM_LIST (Additional + LT-ASM)
├──► BOD-SURV-T2T_LIST (Trade-to-Trade segment)
BOD-RMS-RELOAD (consumes SPAN scanrange + MTM T-1 + DP pledge + obligation)
BOD-SURV-ARM (consumes GSM + ASM + T2T)
BOD-READY-DATA (AND of: contracts loaded, RMS reloaded, surveillance armed)
└──► (parallel with health-check DAG 2)
BOD-MARKET_OPEN_GATE (09:00; readiness gate fired)

DAG 2 — Operational health checks (runs in parallel with DAG 1)

Section titled “DAG 2 — Operational health checks (runs in parallel with DAG 1)”
BOD-START
├──► BOD-HC-FIX_LOGIN (exchange FIX session up)
├──► BOD-HC-CTCL_STATUS (CTCL approval valid)
├──► BOD-HC-DR_REPLICATION (primary↔DR sync confirmed)
├──► BOD-HC-CSCRF_LOG_FEED (cyber log retention verified)
├──► BOD-HC-BCP_HEARTBEAT (BCP plan currency)
BOD-READY-HEALTH (AND of all health checks)
└──► joins BOD-MARKET_OPEN_GATE
node_idoperationdepends_onblocksparallel_eligibleidempotentretry_policyrollbackslafailure_surfacespec_source
BOD-START06:00 IST orchestrator trigger[entry]all BOD-* nodes[none]yes (date-keyed)none[none]scheduledops console[industry typical]
BOD-EX-HOLIDAY_CALFetch trading-day calendarBOD-STARTBOD-READY-DATAall BOD-EX-* / BOD-CC-* / BOD-DP-*yes3× then alternate FTP endpoint[none]< 1mops alertNSE/BSE/MCX circulars
BOD-EX-CONTRACT_CMCM contract fileBOD-STARTBOD-READY-DATAparallel-with siblingsyes3× then alternate endpoint; ops alert if all fail[none]< 5mops alert / market-open delayNSE circulars
BOD-EX-CONTRACT_FOF&O contracts + expiryBOD-STARTBOD-READY-DATAparallelyes3× then alternate[none]< 5mops alertNSE circulars
BOD-EX-CONTRACT_CDCD (currency derivatives) contractsBOD-STARTBOD-READY-DATAparallelyes3× then alternate[none]< 5mops alertNSE circulars
BOD-CC-SPAN_SCANRANGESPAN margin parameters from clearingBOD-STARTBOD-RMS-RELOADparallel-with other CC + EX fetchesyes3× exp backoff; ops alert + clearing-corp helpdesk if persistent[none]< 5mops alert (critical)Clearing-corp file specs
BOD-CC-MTM_T1Yesterday close MTM fileBOD-STARTBOD-RMS-RELOADparallelyes3× then alternate; ops alert[none]< 5mops alertClearing-corp file specs
BOD-EX-CIRCUIT_FILTERPer-stock daily price bandBOD-STARTBOD-READY-DATAparallelyes[none]< 2mops alert / OMS rejects on openingNSE circulars
BOD-EX-MEMBER_FILESActive members + suspensionsBOD-STARTBOD-READY-DATAparallelyes[none]< 2mops alertNSE/BSE/MCX circulars
BOD-DP-OBLIGATION_T1Yesterday pending settlementsBOD-STARTBOD-RMS-RELOADparallelyes (date+broker keyed)3× then ops alert[none]< 5mops alertCDSL/NSDL circulars
BOD-DP-PLEDGE_STATUSOvernight pledge updatesBOD-STARTBOD-RMS-RELOADparallelyes[none]< 5mops queueCDSL/NSDL circulars
BOD-DP-DDPI_STATUSDDPI activations finalizedBOD-STARTBOD-READY-DATAparallelyes[none]< 5mops queueCDSL DDPI
BOD-DP-TRANSMISSIONOvernight transmission updatesBOD-STARTBOD-READY-DATAparallelyes[none]< 5mops queueNSDL/CDSL circulars
BOD-SURV-GSM_LISTGSM list ingestionBOD-STARTBOD-SURV-ARMparallel-with ASM/T2Tyes3× then yesterday’s list (stale flag)[none]< 2mops alertNSE NORMS
BOD-SURV-ASM_LISTASM + LT-ASM listBOD-STARTBOD-SURV-ARMparallel-with GSM/T2Tyes3× then stale-list fallback[none]< 2mops alertNSE NORMS
BOD-SURV-T2T_LISTTrade-to-Trade segment listBOD-STARTBOD-SURV-ARMparallelyes3× then stale-list[none]< 2mops alertNSE NORMS
BOD-RMS-RELOADRecompute per-client margin envelopeBOD-CC-SPAN_SCANRANGE, BOD-CC-MTM_T1, BOD-DP-OBLIGATION_T1, BOD-DP-PLEDGE_STATUSBOD-READY-DATA[none]yes (date-keyed)retry on dependency-receipt; ops alert if dependency fails[none]< 10m typicalops console / OMS-margin layer[industry typical]
BOD-SURV-ARMLoad filters + accumulatorsBOD-SURV-GSM_LIST, BOD-SURV-ASM_LIST, BOD-SURV-T2T_LISTBOD-READY-DATA[none]yesretry on dependency-receipt[none]< 1mops console[industry typical]
BOD-HC-FIX_LOGINFIX session up to each exchangeBOD-STARTBOD-READY-HEALTHparallel-with other HCyesinfinite reconnect with backoff[none]< 2mops alert[industry typical]
BOD-HC-CTCL_STATUSCTCL approval validBOD-STARTBOD-READY-HEALTHparallelyes3× then exchange-portal check[none]< 1mops alertNSE/BSE/MCX CTCL circulars
BOD-HC-DR_REPLICATIONPrimary↔DR sync confirmBOD-STARTBOD-READY-HEALTHparallelyes3× then CISO alert[none]< 2mCISO alert (critical)BCP/DR blueprint domain
BOD-HC-CSCRF_LOG_FEEDCyber log retention verifyBOD-STARTBOD-READY-HEALTHparallelyes3× then CISO alert[none]< 1mCISO alertCyber security domain
BOD-HC-BCP_HEARTBEATBCP plan currency checkBOD-STARTBOD-READY-HEALTHparallelyes1× then ops alert[none]< 30sops alertBCP/DR blueprint domain
BOD-READY-DATAAND of EX + CC + DP + SURV-ARM(see depends_on above)BOD-MARKET_OPEN_GATE[none]yes (local)retry on dep-receipt[none]< 100msops console[industry typical]
BOD-READY-HEALTHAND of all health checksall BOD-HC-*BOD-MARKET_OPEN_GATE[none]yes (local)retry on dep-receipt[none]< 100msops console[industry typical]
BOD-MARKET_OPEN_GATEMarket-open readinessBOD-READY-DATA, BOD-READY-HEALTHTH-* (trading hours phase)[none]yesescalation runbook if not GREEN by 09:00[none]by 09:00 ISTops bridge / CISO escalation[industry typical]
  • [gotcha] SPAN scanrange comes from the clearing corp (NSCCL / ICCL / MCXCCL), not the exchange. Ops engineers new to the domain often look for it on the exchange FTP and assume their fetch is broken when it’s not there.
  • [industry practice] Most brokers run two FTP endpoints per source (primary + backup); if primary fails, the orchestrator auto-tries the backup before manual-queueing. This single change cuts ~80% of BOD-related pages.
  • [risk trade-off] Stale-list fallback (use yesterday’s GSM/ASM if today’s fetch fails) is a deliberate trade — better to trade with a slightly outdated surveillance list than refuse trades entirely. Most brokers tag stale-list trades for end-of-day review.
  • [cost optimization] Pre-warm DR-site replication starting 23:00 the night before — most BOD failures around DR-replication are caused by the broker’s overnight ledger batch contending with replication bandwidth. Staggering the two roughly eliminates that class of failure.

2026-05-14


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