What you get
GET /venue-events/:id (or client.getVenueEventById(id)) now includes two fields:
type is an open enum — known values today are resolution_source, resolution_timing,
scope, threshold, start_date, end_date, edge_cases, and wording, with other as the
catch‑all. Map known types to an icon and fall back to a generic icon for anything else, so a new
type is never dropped.
Fetch it
Settlement data is returned on the single event‑detail endpoint only — it is intentionally
not included in the
/venue-events listing, where running a per‑event settlement lookup for
every row would be wasteful. Fetch it when a user opens an event.Render it
The fields map one‑to‑one to a settlement panel:- Key differences — one card per
settlementDiff.differences[]entry: thetitleas the heading, an icon chosen fromtype, and one row per venue fromperVenue(key = venue, value = the short per‑venue value). The card count isdifferences.length. - Empty / not‑yet‑computed — when
settlementDiffisnullordifferencesis[], the venues settle identically (or AGG hasn’t computed a diff yet); hide the “Key differences” block.
@agg-build/ui component for this panel is on the roadmap; until then, render from the
typed fields above.
How it’s built
The differences are produced by a small hybrid engine, computed once per matched cross‑venue cluster and persisted — it runs in the background, completely off the trade/quote path, so reading them never adds latency to execution.- Deterministic core (no model): the structured facts AGG already ingests — resolution dates, resolution sources, thresholds, market scope — are compared directly across venues. This is exact and grounds the timing/source/threshold/scope differences with zero ambiguity.
- Language model gap‑fill: for the nuances that only live in prose (edge cases like recounts, walkovers, void conditions, or a resolution source named only in the rules text), a cost‑efficient model reads each venue’s rules and fills the remaining differences — and is only invoked when a venue’s settlement genuinely isn’t captured structurally.