diff --git a/docs/superpowers/specs/2026-08-25-market-structure-and-turnover-design.md b/docs/superpowers/specs/2026-08-25-market-structure-and-turnover-design.md new file mode 100644 index 0000000..983e96a --- /dev/null +++ b/docs/superpowers/specs/2026-08-25-market-structure-and-turnover-design.md @@ -0,0 +1,159 @@ +# 市场结构与成交额趋势设计 + +- 关联功能:FEAT-MO-005 +- 设计状态:待用户审阅 +- 日期:2026-08-25 + +## 1. 目标 + +把综合概览的重点从可选分时图调整为盘面结构总结,优先回答:市场强弱如何、行业和题材资金及涨跌方向如何、全市场成交额是在放大还是收缩。 + +本切片继续采用 Nest 服务端聚合、Vue 通过 Axios 访问业务 API 的边界。TDX 保持指数、市场宽度和基础行情主链路;AKTools/AKShare 只作为行业、题材和资金流向的候选补充源,必须先通过实际能力探针。 + +## 2. 用户范围 + +### 首屏展示 + +1. 市场结论和主要指数。 +2. 上涨、下跌、平盘、涨停、跌停、炸板等市场宽度与短线情绪。 +3. 行业和题材的涨跌排行。 +4. 行业和题材资金净流入、净流出排行。 +5. 全市场成交额趋势图和累计成交额。 +6. 每个模块的交易日期、最后更新时间、数据源和 `fresh/delayed/partial/unavailable` 状态。 + +### 交互范围 + +- 首屏每个排行模块只展示重点名次,并提供“查看全部”入口。 +- 排行支持行业/题材切换,以及涨幅、跌幅、成交额、净流入、净流出排序。 +- 点击行业或题材进入现有详情页体系;无法识别的 provider 原始分类不得生成错误详情链接。 +- 成交额趋势支持盘中增量和累计值;收盘后保留完整交易日曲线。 + +## 3. 明确不在本切片范围 + +- 不把分时 K 线作为首页核心视图;详情页分时仍保持独立能力验证状态。 +- 不提供交易指令、荐股、目标价、仓位建议或自动下单。 +- 不启用用户体系、MySQL、Redis、RocketMQ 或 AI 运行链路。 +- 不把价格涨跌、成交额或成交量推导成主力净流入;资金净流入必须来自有明确字段口径的数据源。 +- 不把单个行业指数代表全市场资金;全市场成交额与板块资金流必须分别标识。 + +## 4. 数据源与口径 + +### 4.1 TDX 主链路 + +- 指数、市场宽度、核心行情和已验证的日成交额继续使用 TDX。 +- 当前已有的日成交额趋势只能作为收盘后及历史对比口径,不能直接冒充盘中 5/15 分钟趋势。 +- 盘中成交额趋势必须先验证 TDX 是否能返回多市场、带时间戳的分时 Amount;若 TDX 不支持,再评估 AKTools 或快照聚合方案。 + +### 4.2 AKTools/AKShare 补充链路 + +优先探测以下能力: + +- 行业板块涨跌幅和成交额排行。 +- 概念题材涨跌幅和成交额排行。 +- 行业/题材资金净流入和净流出排行。 +- 全市场或指数的分时成交额字段。 + +探针必须记录接口参数、HTTP 状态、字段结构、交易日期、更新时间和重复请求稳定性;不保存原始载荷。探针失败时只记录 `unavailable`,不生成示例数据。 + +### 4.3 分类口径 + +- `industry`:供应商的行业板块分类。 +- `concept`:供应商的概念/题材分类。 +- `board`:仅在数据源明确提供独立板块分类时启用;不能把行业或概念重复映射成第三种分类。 +- 每条排行记录必须带 `category`、`code`、`name`、`tradeDate`、`asOf` 和 `source`。 + +### 4.4 资金口径 + +- `netInflow` 只能使用上游明确提供的净流入字段。 +- 无法确认主力、大单或统计方向时返回 `null` 并说明原因。 +- 不同数据源的资金字段不在服务端直接求和;跨源比较只在字段口径相同且文档明确时允许。 + +### 4.5 成交额趋势口径 + +- 基本单位统一为亿元;服务端负责单位转换,前端不根据字段名猜单位。 +- 每个点至少包含 `time`、`amount`、`cumulativeAmount`。 +- `amount` 表示该时间区间成交额,`cumulativeAmount` 表示当日截至该点累计成交额。 +- 缺少时间戳、金额为负数、时间倒序或区间重复时,该点被拒绝并将模块标记为 `partial`。 + +## 5. API 设计 + +继续使用统一响应外壳: + +```json +{ + "snapshotId": "20260825-101500", + "asOf": "2026-08-25T10:15:00+08:00", + "tradeDate": "20260825", + "source": "tdx", + "status": "fresh", + "data": {}, + "warnings": [] +} +``` + +新增或调整为以下独立接口,禁止把所有数据塞入一个首页接口: + +```text +GET /api/market-overview/sector-rankings +GET /api/market-overview/capital-flow +GET /api/market-overview/turnover-trend +``` + +### `sector-rankings` + +查询参数:`category=industry|concept|board`、`sort=rise|fall|turnover`、`limit=1..100`。 + +记录字段:`category`、`code`、`name`、`changePercent`、`turnoverAmount`、`advancingCount`、`decliningCount`、`leader`、`tradeDate`。 + +### `capital-flow` + +查询参数:`category=industry|concept|board`、`sort=inflow|outflow`、`limit=1..100`。 + +记录字段:`category`、`code`、`name`、`netInflow`、`netOutflow`、`turnoverAmount`、`tradeDate`、`flowDefinition`。 + +### `turnover-trend` + +查询参数:`interval=5|15`、`tradeDate=YYYYMMDD`(默认最近可用交易日)。 + +记录字段:`time`、`amount`、`cumulativeAmount`;响应额外返回 `unit=亿元`、`marketCount` 和 `granularity`。 + +所有参数使用白名单和范围校验;上游地址、原始异常和完整载荷不得进入响应。 + +## 6. 前端结构 + +```text +web/src/api/market-overview/index.ts +web/src/views/market-overview/ +├── components/MarketSummaryPanel.vue +├── components/MarketBreadthPanel.vue +├── components/SectorRankingPanel.vue +├── components/CapitalFlowPanel.vue +└── components/TurnoverTrendPanel.vue +``` + +组件只消费已生成的契约类型,不直连 AKTools/TDX。排行表格优先保证扫描效率,避免把全部分类堆叠在首屏;窄屏时改为分类标签和横向可滚动表格,不能出现页面级横向溢出。 + +## 7. 失败、时效和安全 + +- 四类状态沿用 `fresh`、`delayed`、`partial`、`unavailable`。 +- 单个上游接口失败只影响对应模块;其他模块继续展示。 +- 收盘后的最后记录不自动判定为延迟;必须结合上海交易时段和交易日期判断。 +- AKTools 仍只允许服务端固定白名单调用,设置超时、响应体上限、字段校验和错误脱敏。 +- 不保存行情原始载荷,不记录家庭网络地址、TDX 凭据或 AKTools 凭据。 + +## 8. 性能与验证目标 + +- 排行接口只返回请求的 `limit` 条记录;服务端拒绝超过 100 条的单次请求。 +- 首页模块并行请求,单个模块超时不阻塞首屏。 +- 成交额趋势默认最多返回一个交易日的 5 分钟点,必要时再支持 15 分钟降采样。 +- 单测覆盖字段映射、单位转换、排序、分类白名单、资金口径缺失、时间倒序、重复点和部分数据。 +- 真实联调至少覆盖交易时段一次和收盘后一次,分别记录最后时间、成功率、缺口率和状态判断。 +- 完成 HTTP/OpenAPI、前端状态、构建、Playwright 桌面/窄屏、代码 Review 和规范 Review。 + +## 9. 分阶段实施 + +1. 数据源能力探针:先确认行业/题材排行、资金流和盘中成交额接口。 +2. 服务端适配器与 DTO:固定数据源边界,先输出独立 API。 +3. 前端排行和成交额趋势组件:接入模块状态和点击详情。 +4. 盘中与收盘后联调:校验时间口径和数据质量。 +5. 完成治理档案、Review、GitNexus 前后对比和 Gitea 推送。