# 阶段5验收记录

## 范围

本阶段建立唯一数据网关、数据源准入策略、交易日期与真实快照契约、标的目录、全局搜索、日K和分时图基础。情绪计算、五类股池和完整个股业务详情仍分别属于阶段6及后续阶段，本阶段不提前复制旧业务。

## 数据真相

- 每条可持久化图表序列保留标的、真实交易日、观测时间、来源、用途、单位、复权、覆盖率和实时/最终/归档状态。
- Tushare负责交易日历、股票目录和日线；iFinD优先用于展示图表；东方财富只允许进入展示分时兜底，策略和情绪计算会被策略层拒绝。
- 今天没有有效开高低收、成交量和成交额时，日K删除空的今日柱，继续显示最后真实交易日。
- 历史快照只按实际交易日返回；沿用旧快照时，接口同时返回请求日期、实际数据日期和沿用说明。
- 计算数据覆盖率不达标时失败关闭；从未同步时显示等待首次同步，不产生模拟数据。

## 搜索与图表

- `Ctrl+K`搜索经唯一浏览器API出口请求，160毫秒防抖，按股票、板块、题材、指数固定分组。
- 支持键盘上下循环、Enter打开、Escape关闭，并区分无输入、加载、空结果和失败。
- 桌面搜索结果提供最新日K预览，可切换分时；点击进入共用行情详情基础页。移动端点击进入详情，不依赖Hover。
- 日K上涨柱为空心且影线不穿实体，下跌柱为实心；分时提供昨收零轴和均价线，横轴契约固定09:30至15:00。
- 普通用户响应不包含供应商名称；行情管理保留管理员可见的凭据与基础资料同步入口。

## 减法证据

- 未复制旧`TushareClient`、`IfindHttpClient`或`MarketChartClient`；只迁移通用协议、授权刷新和必要归一化规则。
- 所有外部源通过一个`DataGateway`和一份`DataSourcePolicy`进入系统；页面没有直接访问供应商。
- 搜索预览与详情复用同一个图表组件和同一接口，不创建股票、板块、题材、指数四套图表实现。
- 新增后端最长文件为379行，未超过章程400行目标；CSS色值只存在于`tokens.css`。
- 未将测试行情写入产品数据库，浏览器视觉样本由Playwright路由固定，仅用于前端验收。

## 自动验证

- Ruff：通过。
- pytest：46项通过，覆盖数据源准入、快照沿用、盘前空K线、iFinD顶层表格与过期授权刷新、搜索权限与固定分组、图表响应不泄露来源。
- Vue类型检查：通过。
- Vitest：2个文件、5项通过。
- Vite生产构建：通过。
- Playwright：3项通过，覆盖既有Shell回归，以及摘要、搜索、日K预览、详情、分时零轴、日夜主题、1920×1080和390×844视口。
- 密钥扫描：已提供账号密码与令牌均未进入`next/`；组件CSS未发现令牌外色值。

## 截图

- [日间搜索与日K预览 1920×1080](search-preview-light-1920x1080.jpg)
- [夜间分时详情 1920×1080](entity-detail-dark-1920x1080.jpg)
- [夜间移动分时详情 390×844](entity-detail-dark-390x844.jpg)

## 后续入口

阶段6将使用本阶段的交易日期、摘要存储和数据质量门实现情绪周期与五类股池。只有阶段6的确定性行情任务可以写入正式市场摘要，展示兜底源不能借图表接口进入计算。
