# 数据治理

## 基本原则

1. **缺失不猜测**：页面没有明确日期就不补“往年时间”；没有任何关键日期的记录不进入正式数据集。
2. **证据可追溯**：每条记录至少保存来源名称、URL、类型、权威等级、核验时间与支持字段。
3. **发现与确认分离**：赛氪、赛事目录和 CCFDDL 负责发现；官方 API、会议/主办方通知和学校官网优先，目录中的旧日期不作为证据。
4. **历史不物理删除**：来源短暂故障、列表下架或活动结束都不能让记录从仓库消失。
5. **自动化可审计**：来源故障、日期冲突、校验拒绝和人工覆盖均输出机器可读报告。

## 来源优先级

| 权威值 | 类型 | 例子 |
| --- | --- | --- |
| 5 | 官方 API / 官方平台 / 有来源的维护者核验 | MLH、赛事官网通知、人工核验 |
| 4 | 高质量社区数据库 | CS-BAOYAN、CCFDDL |
| 3 | 经验证的二级来源 | 预留 |
| 2 | 聚合平台 | 赛氪公开前端 API |
| 1 | 未验证发现 | 不直接进入正式数据集 |

同一事件首先采用更高权威来源，低权威来源只能补空字段。独立来源出现不同日期时不自动“投票平均”，而是保留优先值并把冲突写入 `quality-report.json`。

## 去重

- URL：统一移动/桌面域名、移除 fragment 和常见跟踪参数、规范尾斜杠。
- 标题：NFKC 归一化，移除空格、标点和平台 SEO 后缀。
- 身份：规范标题 + 事件类型 + 届次年份。跨年份同名赛事不会合并。
- 论文会议：名称显式包含会议届次年份；同一届多轮摘要/论文截止保存在 `schedule`，不拆成会互相误合并的同名记录。
- 期刊专题：必须包含可区分专题的完整 CFP 名称，不能只使用期刊名。
- 赛氪：URL 与标题双重去重；培训、咨询、考研、留学和扫码推广在入选前过滤。
- 展示标题会移除包含“今日、截止、领证书、热门、福利”等词的前置方括号营销标签；正式名称中的方括号不会被无条件删除。
- `★` 只表示清理年份、届次和“大赛/竞赛”写法后，赛事名称与指定 `college-competition-ddl/competitions.json` 条目严格相同或以规范名称开头；不作为官方认证或赛事质量评级。
- 黑客松：各来源先独立发现，再全局合并；MLH 的平台事件 ID 是稳定身份。

## 推免院校标签

- `985`、`211` 是历史工程名单标签，`双一流` 使用教育部 2022 年第二轮建设高校名单；三者不是互相替代关系。
- 标签只应用于 `summer_camp` / `pre_admission` 来源记录，并写入结构化字段 `university_tiers`，同时进入搜索标签。
- 校区继承必须在 `university_tiers.py` 中明列，例如“哈尔滨工业大学（深圳）”继承哈尔滨工业大学标签。
- 不使用模糊包含匹配。中国科学院研究所、独立学院、合作办学高校、香港高校内地校区不会因为名称相似自动继承标签。
- 名单或别名更新必须同时更新来源说明和测试；不能根据排行榜或惯用称呼临时打标。

## 时间线校验

- 所有时间必须可解析且带时区。
- `competition_end < competition_start` 时丢弃错误的结束字段并记录校验错误。
- `registration_deadline < registration_start` 时丢弃不可信的报名开始字段。
- 无报名、摘要、提交或比赛关键日期的记录不发布。
- 国际论文截止必须按来源给出的 AoE、UTC 偏移或地区时区转换；未知时区不能默认解释为北京时间。
- 赛氪接口的报名/比赛时间字段直接映射到统一时间线；仍按聚合来源处理并提示回主办方官网复核。
- 官网通用抓取器不接受新闻发布日期、更新时间、孤立日期或目录里的硬编码 DDL；无法明确归类就留空。

## 生命周期

| 条件 | 行为 |
| --- | --- |
| 本轮重新观测 | 更新 `last_seen_at`，清除 stale/archive |
| 7 天未观测 | `stale: true`，网站默认仍可按历史开关查看 |
| 30 天未观测 | `archived: true`，网站默认隐藏，JSON 保留 |
| 来源整轮失败 | 保留上一版该来源数据，不清空 |
| 活动结束 | `status: ended`，不删除 |

## 人工更正

`data/overrides.yml` 按事件 ID 覆盖自动字段。每个更正应包含 `source_url` 和 `checked_at`；更正会成为权威值 5 的新证据，并记录在质量报告的 `overrides_applied`。
