Files

39 lines
2.0 KiB
Markdown
Raw Permalink Normal View History

2026-08-11 13:32:21 +08:00
# 实现市场数据完整性检查 API
## Goal
提供用户主动触发、可轮询的 PostgreSQL/CSV 完整性检查;检查不访问 Tushare、不修改市场事实,
只持久化检查进度与安全问题报告。
## Dependencies
- 依赖 `08-11-market-sync-concurrency-storage` 的连接池和共享 advisory lock 契约完成。
## Requirements
- 检查 current stock master、六年 qfq bars 和六年 daily_basic 的 PostgreSQL/CSV 一致性。
- 报告缺失、多余、解析失败、重复键、内容不一致和窗口越界;不把正常停牌误报为缺历史日期。
- 使用流式/分组比较,不能一次加载全市场约 700 万行。
- 使用独立检查表和状态 `running/passed/issues_found/failed`,不复用同步批次。
- 检查与同步使用同一 advisory lock;已有检查运行时禁止重复触发。
- `POST` 返回 202,`GET latest` 和 `GET by id` 返回进度、终态及分页问题。
- 后台异常和失去 worker 的陈旧 running 记录必须能收敛为 failed。
- 除检查表外,执行前后市场事实表内容和正式 CSV 必须完全不变。
## Acceptance Criteria
- [ ] 一致 fixture 得到 `passed`;各类不一致得到 `issues_found` 和稳定问题类型。
- [ ] CSV 解析失败被报告且不会中断其余对象检查。
- [ ] 检查只使用本地 DB/CSV adapters,测试能断言 Tushare port 未被构造或调用。
- [ ] 大数据 fixture/迭代器测试证明比较按股票/交易日分组流式消费。
- [ ] 同步持锁时检查安全失败,检查持锁时同步不能进入临界区。
- [ ] HTTP 测试覆盖 202、409、404、503、latest/no_data、轮询进度和问题分页。
- [ ] 迁移 upgrade/downgrade 和 schema metadata 一致;首页/selection 查询不选择检查记录。
- [ ] 后端 Ruff、Pyright、pytest 全部通过。
## Out of Scope
- 不检查 Tushare 当日是否出数。
- 不自动修复、重试或重新下载。
- 不引入外部队列;沿用当前进程内 BackgroundTasks。