Files
2026-08-11 13:32:21 +08:00

2.0 KiB
Raw Permalink Blame History

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