RoundSummary

Type: object

Sent with QoS 1, retained.

Sent exactly once per final round, at the same time as round_over. Whereas
round_over carries the full, blackjack-specific table state, this is a compact,
derived, game-agnostic summary meant to be forwarded to a casino management system.
The same topic and shape is intended to be reused for other game types (e.g. Baccarat,
UTH).

We pre-compute the win/loss, side bet utilization, participation and timing so you do
not have to re-implement the game rules. All monetary results are payout multipliers
per unit bet (-1 loss, 0 push, +1 win, +1.5 blackjack), not currency: we detect bet
presence, not chip denomination. Multiply by your own bet amounts downstream.

See TcsRoundSummary for the full field documentation.

TcsRoundSummary

Type: object

Game-agnostic summary of a finished round, intended for casino management systems.

All monetary results are payout multipliers per unit bet, not currency: the system
detects bet presence, not chip denomination. Multiply by your own known bet amounts
downstream. The shape is intended to be reused across game types (Blackjack, Baccarat,
UTH), so "box" means a betting position rather than a person.

round_id
The round UUID; matches the id used on the other topics.

game_type / machine_id
Identify the source of the summary (there is no per-table id yet).

gaming_day
The gaming day (ISO date) the round belongs to; casinos bucket revenue by this.

timing
Timestamps and per-phase durations, see RoundTiming.

house_hand_value / house_outcome
The dealer/banker final total and its high-level classification (a value 17-21, BJ,
BUST, PLAYER_BUST, or UNFINISHED).

boxes
Per-box main-bet results, only for boxes that were in play.

house_result_multiplier
The house result in units this round: the sum of the negated box results.

active_boxes / total_hands
Boxes in play (before splits) and hands played (splits counted separately). These are
the ingredients for hands-per-hour, which is aggregated downstream.

side_bets
Utilization and result per configured side bet, see SideBetUtilization.

diagnostics
De-duplicated names of detected procedure or system issues; use these to flag or
exclude a round.

Type: stringFormat: uuid

Type: enum (of string)

Must be one of:

  • "Baccarat"
  • "Blackjack"
  • "Other"
  • "UTH"

Type: string

Type: string

RoundTiming

Type: object

Timestamps and per-phase durations for a round.

All timestamps are ISO 8601 strings in the configured local timezone, or None when
the corresponding phase was never reached. When a phase occurs more than once (the
tracker can step back when cards are occluded) the first occurrence is used.

started_at
First relevant detection of the round (bet or card); the round's initialization time.

first_cards_at
Dealing begins (first card assigned).

players_turn_at
Initial deal complete; boxes begin their decisions.

dealers_turn_at
Boxes are done; the house draws.

house_finished_at
The house finished drawing.

ended_at
All cards removed from the table (payouts done).

The *_seconds fields are the durations of each phase, each None when either
bounding timestamp is missing:
betting_seconds (started -> firstcards), initial_deal_seconds
(first
cards -> playersturn), player_decision_seconds (playersturn ->
dealersturn), dealer_play_seconds (dealersturn -> housefinished),
settlement_seconds (house
finished -> ended), and total_seconds (started -> ended).

Type: integer

HouseOutcome

Type: enum (of string)

The house (dealer/banker) result for the round.

The numeric variants are the final hand value. The rest are special cases:
- BUST: the house drew over 21.
- PLAYER_BUST: the house never completed its hand because every active box had
already lost (all hands busted), so it did not need to draw.
- UNFINISHED: the house hand could not be classified (procedure or data issue,
e.g. a likely surrender). Distinct from PLAYER_BUST.

Must be one of:

  • "17"
  • "18"
  • "19"
  • "20"
  • "21"
  • "BJ"
  • "BUST"
  • "PLAYER_BUST"
  • "UNFINISHED"

Type: array
No Additional Items

Each item of this array must be:

BoxRoundResult

Type: object

Main-bet result for one active betting box.

box_index is the 0-based position, left to right. num_hands is the number of
hands played at the box (> 1 after a split). hand_values lists the final value of
each hand. hands_won / hands_lost / hands_pushed break down those hands versus
the house (their sum can be below num_hands if a hand could not be settled).

result_multiplier is the net units won or lost on the main bet across the box,
per unit bet (e.g. +1.5 for a single blackjack, -2 for a lost doubled hand).

Type: array of integer
No Additional Items

Each item of this array must be:

Type: number

Type: integer

Type: integer

Type: array
No Additional Items

Each item of this array must be:

SideBetUtilization

Type: object

Utilization and result for one configured side bet across the round.

scope is "player" for per-box side bets or "layout" for table-wide ones.

opportunities counts the betting entities that could have placed this side bet: each
active box's main better plus every back better present on it (occupied back-bet
positions, de-duplicated across split stacks). A layout side bet only contributes
opportunities on rounds where the game offered it (e.g. Insurance only when the dealer
shows an Ace). played is how many of those opportunities actually placed it (capped at
opportunities to absorb misdetections).

total_payout_multiplier sums the numeric payout multipliers over the placed bets.
Progressive jackpot tiers ("GRAND" / "MAJOR" / "MINOR") are resolved by the casino's
own system and are excluded from this sum.

Type: enum (of string)

Must be one of:

  • "layout"
  • "player"

Type: array of string
No Additional Items

Each item of this array must be: