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.
A wagering platform is only ever as correct as its calendar. If a scratching lands late, a market prices a runner that is not in the race. If two providers disagree on a jump time, one module suspends and another keeps taking bets. If an abandonment is not propagated, markets stay open on a meeting that will not happen.
The schedule module is the single calendar every other module reads.
Stable identifiers first
Meetings, races and runners get platform identifiers that do not change when a provider re-issues a file or a second provider describes the same race differently. Provider keys are held as mappings against the platform key, with a precedence order for conflicts. Without this, every downstream consumer invents its own matching logic and they gradually disagree.
Changes as events
Scratchings, emergency runners promoted into the field, rider and driver changes, barrier changes and going updates arrive as timestamped events rather than overwrites. That matters at settlement: whether a bet was placed before or after a scratching decides how it settles, and the calendar has to be able to answer what the field looked like at the moment of placement.
Timing drives market state
Market open, suspend and close times are held as offsets from the scheduled start. When a start time moves, the offsets move with it and market state follows automatically. Delayed starts, re-scheduled races and abandoned meetings all flow through to the betting automation module rather than requiring an operator to remember which markets are affected.
Per tenant and per jurisdiction
Codes, meetings and publication windows are configured per tenant. A brand that does not offer greyhounds or cannot take a particular jurisdiction’s meetings simply does not receive them.
What this module does not do
It holds no prices and no bets. It answers what is running, when, with whom, and in what condition. Everything else is downstream of that answer.