# 实现市场数据完整性检查 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。