# 数据源、采集和纠错

## 当前状态

所有外部采集器的 `authorization` 均未设为 `approved`，生产模式不会抓取来源。已识别官方页面只用于后续评估，不表示已取得自动访问或再发布授权。不要改用竞品、未授权聚合 API、搜索摘要或猜测值补齐数据。开发环境只能显示 `fixture-sample-not-real` 样例。

| 数据 | 候选官方页面 | 计划频率 | 状态 / 待核对项 |
|---|---|---|---|
| SJC 金价 | [SJC 价格图表](https://sjc.com.vn/bieu-do-gia-vang) | 页面公布后按合理间隔采集，具体窗口待确认 | 页面已识别；访问条款、robots、字段/API 稳定性和复用权均待核实；adapter 关闭 |
| Vietcombank 汇率 | [Vietcombank 汇率](https://www.vietcombank.com.vn/To-chuc/Trang-chu-DCTC/KHTC---Ti-gia---DCTC) | 每个公布工作日，窗口待确认 | 页面已识别；XML/API 可用性、访问条款及再发布权待核实；adapter 关闭 |
| 北部彩票 | [北部彩票委员会](https://www.xosomb.com.vn/) | 官方开奖/公布时间待确认 | 官方页面已识别；robots、条款、结果格式和保留规则待核实；adapter 关闭 |
| Vietlott | [Vietlott 官方开奖结果](https://vietlott.vn/vi/trung-thuong/ket-qua-trung-thuong/so-ket-qua) | 官方公布时间待确认 | 官方结果页已识别；本次调研访问收到 403，自动访问方式及授权待核实；adapter 关闭 |
| 中部/南部彩票 | 各省市/公司官方网站 | 按各站公布时间 | 尚未逐家确认官方 URL、授权和统一格式；adapter 关闭 |
| 其他金店 | 各品牌官网 | 各来源公布后 | 尚未逐家确认 URL、访问和复用权限；adapter 关闭 |

调研日期：2026-10-26。启用来源前，记录官方 URL、条款/robots、许可、频率、署名、保留期限、字段/API、负责人和复核日期。

## 采集管道

Web 只读已验证数据库记录。Worker 执行 `fetch → normalize → validate → transaction upsert → quality log → cache invalidation → revalidate → optional push`。适配器必须显式标记 `authorization: "approved"` 才会调用。校验 ISO 日期、不可采未来日期、区域/币种白名单、奖项结构、价格关系、抓取时间和 HTTPS 来源。任务按 30/120/300 秒退避，首次执行后最多重试三次；第 4 次失败进入 dead-letter 并可告警。今日数据缺失时可回退到已验证上一期并标记过期，不能把旧数据说成今日数据。

## Fixture 和纠错

`npm run db:seed` 仅在 `DATA_MODE=fixtures` 写入确定性样例；Fixture 会标记、`noindex`，禁止用于生产推送。`npm run db:verify-ingest-idempotency` 检查重复采集不会增加业务表行数。

纠错 CLI 使用 `npm run data:repair -- --input /path/to/verified-record.json`。JSON 结构示例与所有边界见仓库 [`docs/data-sources.md`](../../docs/data-sources.md)。此页面是只读公开说明，不接受上传。
