Skip to content
Protocolzone Protocolzone

Data module

Race and runner statistics

One form record, read by the punter and by the pricing model.

Part of the Ashva module inventory — a multi-tenant tote and fixed-odds betting platform we built and operate. The engineering practice behind it is our platform build and integration service line.

Two systems that disagree about a runner’s last-start margin will eventually embarrass an operator. One number is on the form guide the customer reads, the other is inside the model that priced the race.

This module holds one statistics record and serves both.

Keyed to the platform, not the provider

Form is attached to the platform’s runner identifier, held by the schedule module. Provider identifiers change, providers get replaced, and horses race under name changes and across codes and jurisdictions. Keying form to a provider’s identifier means losing history the day the contract changes.

The splits that matter

Australian racing rewards specific splits: track, distance, barrier, going, class, and connections in recent form rather than across a career. The module holds those slices directly instead of computing them on demand from raw results, and it records sample size alongside each figure. A one-from-one strike rate and a nine-from-twenty strike rate should not present as comparable numbers.

Missing data is data

Sectional times and speed data are not available for every meeting or every code. The module records which races have them rather than defaulting a gap to zero or interpolating one. A model fed silently imputed sectionals is harder to debug than one that knows the field is absent.

Ratings are versioned

Derived ratings carry a version. When pricing is reviewed weeks later, the rating that produced the price can be reproduced instead of approximated by whatever the current rating logic returns.

What this module does not do

It does not price and it does not publish tips or selections. It supplies the inputs the odds module prices from and the form the front end displays.

Module facts

Module group
Data
Tenancy
Tenant-aware
Bet types
Fixed odds, Tote, Exotics
Codes and verticals
Thoroughbred, Harness, Greyhound

Integration surfaces

  • Form and statistics data providers
  • Official result and sectional feeds
  • Schedule module for runner and race identifiers
  • Odds module as a pricing input
  • Front end and content surfaces for form display

Capabilities

What race and runner stats actually does.

Runner form record

Career and recent-start history per runner: finishing positions, margins, barriers, weights, class, distance, track and going, with the record keyed to the platform's own runner identifier rather than a provider's.

Connections statistics

Jockey, driver, trainer and sire records, sliced by track, distance, class and going, including strike rate over defined recent windows rather than career totals alone.

Track and condition splits

Performance by track, distance, barrier and going, which is where most of the explanatory power sits for Australian racing and where thin datasets mislead most easily.

Sectionals and speed data

Sectional times and speed-map inputs where the provider supplies them, held with an explicit record of which races have them and which do not.

Derived ratings

Ratings computed from the underlying history, versioned so a price can be tied to the rating version that produced it.

Punter-facing presentation

The same statistics served to the front end as form guides, head-to-head comparisons and last-start summaries, so what the customer reads and what the trader prices from cannot diverge.

Other data modules

Working on this problem yourself?

We will go through how this module handles it, what it deliberately does not do, and where we would make a different call today.