Files
Scoreboard/devdocs/02-积分与排名规则.md
T

4.9 KiB
Raw Blame History

02 · 积分与排名规则 ★

所属:运动会积分榜系统 · 开发文档集 版本:v0.1(讨论稿) · 2026-09-09 上游:README · 相关:04-数据模型、09-测试策略 本篇是系统的心脏:规则一变,数据模型与积分引擎都要跟着改,所以必须先定稿。


1. 总分构成

单位总分 = Σ 成绩积分 + Σ 破纪录加分 + Σ 人工调整

对应积分流水表 score_ledger 的三种来源类型:result / record_bonus / adjustment。


2. 成绩积分

成绩积分 = 名次积分表[名次] × 小项权重(multiplier)
  • 名次积分表由「积分模板」定义,可被大项引用,也可被单个小项覆盖。
  • 未取得名次(未完赛、未录取、弃权、DQ)→ 0 分。
  • 小项权重 multiplier:普通项目 1,团体/接力/球类项目 2(见 D2)。

2.1 默认名次积分表

名次 1 2 3 4 5 6 7 8
积分 9 7 6 5 4 3 2 1

2.2 并列名次(三种口径,系统可配置)

模式 例:两人并列第 2(积分表 9/7/6/5) 说明
skip 顺延 ✅默认 两人各 7 分,无第 3 名,下一名是第 4 名得 5 分 国内运动会最常见
average 平均 两人各 (7+6)/2 = 6.5 分,下一名第 4 名得 5 分 部分规程采用
higher 就高 两人各 7 分,下一名第 3 名得 6 分 少见

2.3 特殊情形

情形 处理
报名不足 8 人 按实际名次取分,空缺名次分值作废
弃权 / DNS / DSQ 0 分,且不占名次(名次顺延)
团体项目积分归属 计入所属单位总分;个人积分榜不计入成员个人(待 D3 确认是否要给成员各记一份)
一人多项参赛 各项独立计分,个人总分累加
积分手工覆盖 允许,但必须填理由并记入审计

3. 破纪录加分

项 规则
加分档位 赛会纪录 +2 / 市级 +5 / 省级 +8
同时破多级 取最高档,不累加(可配置为累加,见 record_bonus_mode)
是否随权重翻倍 不翻倍:破纪录加分与成绩积分相互独立
确认流程 系统自动提示「疑似破纪录」→ 裁判长确认 → 生成加分流水 → 更新纪录库
撤销 支持作废该条破纪录记录,加分流水一并作废

4. 人工调整(扣分 / 补分)

  • 字段:单位、分值(可正可负)、类别(处罚 / 补分 / 更正)、理由(必填)、操作人。
  • 支持作废(不物理删除),作废后总分自动重算。
  • 典型场景:违反纪律扣分、跨单位联队积分拆分、漏录补分。

5. 排名规则

5.1 总积分榜排序键

总分 DESC → 金牌数 DESC → 银牌数 DESC → 铜牌数 DESC → 单位编码 ASC

5.2 奖牌判定

  • 名次 = 1 → 金,= 2 → 银,= 3 → 铜。
  • 并列第 1 → 两人各记 1 金,无银牌(与名次顺延口径一致)。
  • 团体/球类项目是否计入奖牌榜 → 见 D3(建议计入)。

5.3 并列展示

  • 名次相同则显示同一名次(如两个「2」),不强行拆开。
  • 同分不同名次时按 tie-break 拆开,并在界面标注 tie-break 依据(便于解释给参赛单位)。

6. 积分流水原则(实现红线)

  1. 所有积分变化只追加、不修改;修改 = 作废旧流水 + 追加新流水。
  2. 总分永远是 SUM(未作废流水),禁止使用「总分字段 += 分数」这类原地累加。
  3. 每条流水必须可溯源到:成绩 / 破纪录 / 人工调整。
  4. 排名缓存(standings_cache)永远可由流水重建,缓存只是加速,不是真相。

7. 待确认(🔴)

编号 问题 建议默认
D2 积分表分值 / 是否双倍 / 破纪录加分档位 见第 2、3 节
D3 并列奖牌、个人积分榜、团体成员是否各记个人分 见第 5 节
— 是否存在「同一小项每单位限报 2 人」这类报名限制 建议由报名导入时校验,不进积分引擎

附录 · 积分计算示例

示例 1:男子100米,8 人参赛,无并列

名次 单位 成绩 积分
1 第一分公司 11.58 9
2 机关本部 11.92 7
3 第二分公司 12.01 6
… … … …
8 第六分公司 13.40 1

示例 2:两人并列第 2(skip 模式)

名次 单位 成绩 积分
1 A 11.58 9
2 B 11.92 7
2 C 11.92 7
4 D 12.01 5
5 E 12.10 4

示例 3:4×100米接力(双倍)+ 破赛会纪录

项 分值
第 1 名成绩分 9 × 2 = 18
破赛会纪录加分 +2(不翻倍)
该单位合计 20