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.