Analytics

Type: object

Sent with QoS 1, not retained.

Sent on every changed card, but not continuously updated even without changes like the
blackjack/card_positions topic.

Contains higher level information that we extract from the current state of the table.
Most of it can be computed directly from the lower level data. Some of it also needs
details from the table and game configuration, e.g. the blackjack rules.

DealerOdds

Type: object

hand_odds is a mapping from the final value of the dealer hand to the probability
of that being the outcome. This is computed live based on the exact cards that
have already been played out of the shoe.

The keys are DealerValue, the same values the finished dealer hand is reported with
once the round is summarized. DEALER_UNFINISHED carries the probability that the
dealer has not yet drawn to a standing total, which is 0.0 for any hand that is played
out.

WARNING: As of today we pretend that the cards are drawn from a shoe with 6 decks
that is shuffled every round.

Type: array of array
No Additional Items

Each item of this array must be:

Type: array

Must contain a minimum of 2 items

Must contain a maximum of 2 items

No Additional Items

Tuple Validation

Item at 1 must be:

DealerValue

Type: enum (of string)

The dealer's hand as settlement and the odds tables see it.

This is both the internal type and the published one — the member values are the wire
values wherever we publish a dealer hand. DEALER_UNFINISHED means the dealer has not
drawn to a standing total yet, which for a finished round means they did not need to
(every hand busted).

display() / from_display() are the display form used by the panel, where an
unfinished hand shows as "·". Everywhere else the member value is the string.

Note that the totals are not the whole story: V21 and BJ are both 21 but BJ beats
it, which is what rank encodes.

Must be one of:

  • "17"
  • "18"
  • "19"
  • "20"
  • "21"
  • "BJ"
  • "BUST"
  • "DEALER_UNFINISHED"
Item at 2 must be: