Skip to content
Protocolzone Protocolzone

Risk module

Risk management and liability control

Liability tracked where it accumulates, not where it was written.

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.

Exposure does not accumulate where bets are written. It accumulates on selections, and a book can look balanced market by market while carrying a concentrated position on one runner arriving through multi legs from several tenants.

The risk module tracks liability against selections and evaluates every incoming bet against the position it will create, not the position it was placed into.

Limits that compose

Limits are set at tenant, code, meeting, event, market, bet type and customer level. They are evaluated together and the tightest applicable limit governs the decision. When a stake is reduced or refused, the rule that caused it is written against the bet, which is the difference between answering a customer complaint in a minute and reconstructing it from logs for a day.

Accept, reduce, refer, reject

Acceptance is rules-driven at placement time. Stake, customer factor, market state and current book position decide the outcome. Anything the rules will not resolve goes to a referral queue with the context a trader needs already attached: the breached rule, current exposure on the selection, the customer’s history and the time left before the jump. Referrals carry an expiry, because an unanswered referral is a decision made by default.

Per tenant, and consolidated

Each tenant operates against its own limits and sees only its own liability. The platform operator sees the consolidated book across tenants, which is where correlated exposure across brands becomes visible at all.

What this module does not do

It does not set prices. Pricing lives in the odds and probabilities module, and keeping the two separate is deliberate: a price change and a risk decision have different audit requirements and different people accountable for them. It also does not make trading judgements. It surfaces the position, enforces the limits and records who decided what.

Module facts

Module group
Risk
Tenancy
Tenant-aware
Bet types
Fixed odds, Multi, Same-race multi, Starting price
Codes and verticals
Thoroughbred, Harness, Greyhound, Sports

Integration surfaces

  • Pricing and market state from the odds module
  • Bet stream from the wagering service
  • Account balances and settlement from the ledger
  • Per-tenant limit configuration from the tenant service
  • Live position feeds to the reporting and exposure module

Capabilities

What risk management actually does.

Layered exposure limits

Limits set at tenant, code, meeting, event, market, bet type and customer level, evaluated together rather than in isolation. The tightest applicable limit wins, and the reason a bet was cut is recorded against the bet.

Correlated liability

Liability from multi and same-race-multi legs is attributed back to the underlying selections, so exposure on a favourite is visible whether it arrived as a single or as a leg inside a combination.

Bet acceptance rules

Rules-based accept, reduce, refer or reject at the point of bet placement, evaluated against customer factor, market state, stake and current book position.

Referral queue

Bets that breach a rule land in a queue for a trader with the context attached: what the rule was, current exposure, customer history and time remaining before the event. Referrals expire rather than sitting unanswered.

Customer risk factoring

Per-customer stake factors and market permissions, adjustable by segment or individually, with an audit record of who changed a factor and when.

Tenant segregation

One tenant's exposure, limits and customer factors are never visible to or aggregated with another's. The platform operator sees the consolidated position; a tenant sees only its own.

Other risk 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.