Quality Win Points
Quality win points are bonus points awarded for defeating ranked opponents. They are computed after position and per-win points, per participant, per draw.
How It Works
- For each participant, identify their won matchUps in the draw
- For each won matchUp, find the opponent
- Look up the opponent's ranking from their scale items (time items with
SCALE.RANKING.{eventType}.{scaleName}) - If the opponent is ranked and falls within a
rankingRange, award the corresponding bonus points - Sum all quality win bonuses, subject to
maxBonusPerTournamentcap
Quality Win Profile
Quality win behavior is defined in the qualityWinProfiles array of a ranking policy:
qualityWinProfiles: [
{
rankingScaleName: 'USTA_JUNIOR', // which ranking to look up
rankingSnapshot: 'tournamentStart', // when to snapshot the ranking
unrankedOpponentBehavior: 'noBonus', // what to do if opponent has no ranking
includeWalkovers: false, // count walkovers as quality wins?
maxBonusPerTournament: 500, // cap total quality win bonus per tournament
rankingRanges: [
{ rankRange: [1, 10], value: 225 },
{ rankRange: [11, 25], value: 203 },
{ rankRange: [26, 50], value: 169 },
{ rankRange: [51, 75], value: 135 },
{ rankRange: [76, 100], value: 101 },
{ rankRange: [101, 150], value: 68 },
{ rankRange: [151, 250], value: 45 },
{ rankRange: [251, 350], value: 23 },
{ rankRange: [351, 500], value: 11 },
],
},
],
Ranking Snapshot Strategies
The rankingSnapshot field controls which point-in-time ranking value is used for the opponent:
| Strategy | Behavior |
|---|---|
'tournamentStart' | Most recent scale item with scaleDate <= tournamentRecord.startDate |
'latestAvailable' | Most recent scale item regardless of date |
'matchDate' | Most recent scale item with scaleDate <= matchUp.endDate |
Use 'tournamentStart' (the default) for consistency — all opponents are evaluated against the rankings published before the tournament began. This prevents a player from earning quality win points based on rankings that changed mid-tournament.
Ranking Source
Opponent rankings are read from participant scale items, which are stored as time items on participant records. Rankings are typically:
- Imported by the organizer when setting up a tournament (from the ranking authority)
- Written by a prior call to applyTournamentRankingPoints
The rankingScaleName in the quality win profile must match the scaleName used when the ranking was stored.
Unranked Opponents
When an opponent has no ranking for the specified rankingScaleName:
| Setting | Behavior |
|---|---|
'noBonus' | No quality win points awarded (default) |
'useDefaultRank' | Use defaultRank value from the profile, then match against ranking ranges |
Walkovers and Defaults
By default, walkovers (WALKOVER) and defaults (DEFAULTED) are excluded from quality win calculation. Set includeWalkovers: true to count them.
Quality Win Output
Quality win awards are stored separately in personPoints:
{
qualityWinPoints: 394, // total quality win bonus for this draw
qualityWins: [
{
matchUpId: 'mu-123',
opponentParticipantId: 'opp-456',
opponentRank: 15,
points: 203,
},
{
matchUpId: 'mu-789',
opponentParticipantId: 'opp-012',
opponentRank: 42,
points: 169,
},
// ...additional entries capped at maxBonusPerTournament
],
eventType: 'SINGLES',
drawId: 'draw-abc',
}
Integration with Aggregation
Quality win points flow into multi-tournament aggregation through the pointComponents field on counting buckets:
countingBuckets: [
// Quality wins typically have their own bucket with no bestOfCount cap
{
bucketName: 'Quality Wins',
pointComponents: ['qualityWinPoints'],
bestOfCount: 0, // count all quality wins
},
],
Related Documentation
- Scale Engine Overview — Introduction and architecture
- Core API Reference — Complete method reference
- Ranking Points Pipeline — How position and per-win points work
- Multi-Tournament Aggregation — Counting buckets and ranking lists
- Ranking Policy — Full policy structure
- Scale Items — How rankings are stored