## 2025-11-06 开发日志 **今日概览** - 多市场“昨日快照”接口落地(CN/US/HK/JP)并在报告页新增快照卡片 - 美股数据链路增强:Finnhub 支持 SDK+HTTP 兜底与标准化映射,YFinance 兼容CN代码规则 - 财务报表聚合与 period 统一(YYYYMMDD),去重并按年限裁剪;日度行情/估值按报告期对齐 - 分析执行体验优化:顺序流式、可停止/继续、单模块重试、耗时/进度统计 - 配置与文档:Prisma 读取 `config/config.json` 数据库URL;补充“财务数据字典”和项目状态说明 --- ### 后端(FastAPI) **DataManager 与数据源策略** - `backend/app/data_manager.py` - 只从 `config/config.json` 读取各 Provider 的 `api_key`(不再读取环境变量),初始化受控更清晰 - 依据 `config/data_sources.yaml` 的市场优先级,按序尝试 `tushare`、`yfinance`、`finnhub` 等 Provider - 统一 `get_data` 成功判定与异常兜底,支持多返回类型(list/dict/标量) - `get_financial_statements`:将扁平报表数据规范化为 `series` 结构,确保数值可序列化 **Finnhub Provider(美股重点)** - `backend/app/data_providers/finnhub.py` - 初始化增加 Token 掩码日志;SDK 失败时自动回退到 HTTP 接口(`profile2`、`financials-reported`) - `get_stock_basic` 标准化公司基本信息;`get_daily_price` 输出 `{trade_date, open, high, low, close, vol}` - `get_financial_statements` 将 `financials-reported` 年度数据映射为内部字段,计算派生比率:`grossprofit_margin`、`netprofit_margin`、`roa`、`roe`,并直接输出 `series` **YFinance Provider(兼容与映射)** - `backend/app/data_providers/yfinance.py` - 适配中国代码:`.SH -> .SS`,`.SZ` 优先尝试无后缀 - 规范化 `stock_basic`、日线行情与年度财务(合并利润表/资产负债表/现金流),提供基础字段重命名 **财务与分析路由** - `backend/app/routers/financial.py` - 新增“昨日快照”接口: - `GET /api/financials/china/{ts_code}/snapshot`:优先 `daily_basic`,兜底 `daily` - `GET /api/financials/{market}/{stock_code}/snapshot`:CN 复用上式;其他市场用日线在近10日内回看最近交易日 - `GET /api/financials/{market}/{stock_code}`: - 一次性拉取并聚合年度财报 `series`;识别当年最新报告期,将估值/股价按报告期映射 - 统一 `period`(优先 YYYYMMDD,缺失则由 `year` 映射为 `YYYY1231`),去重、排序并按 `years` 裁剪 - 保持分析编排/单模块/流式接口与分析配置读写接口,便于前端顺序流式展示 --- ### 前端(Next.js 15 / React 19) **报告页体验** - `frontend/src/app/report/[symbol]/page.tsx` - 新增“昨日快照”卡片:日期、股价、PE、PB、股息率、总市值(亿元) - 分析执行:顺序流式、可停止/继续、总进度与耗时、单模块“重新生成分析” - 财务表格:统一 `period`,扩充指标(人均效率、费用率、资产占比、周转能力、市场表现等)并突出关键阈值 **数据获取 Hooks** - `frontend/src/hooks/useApi.ts` - 新增 `useChinaSnapshot`、`useSnapshot`;统一市场参数(china/us/hk/jp)与 SWR 策略 - `fetcher` 强化:兼容非标准 JSON 的错误返回,统一抛出可读错误 **Prisma 适配** - `frontend/src/lib/prisma.ts` - 从 `config/config.json` 动态解析数据库URL;将 `postgresql+asyncpg://` 转换为 Prisma 需要的 `postgresql://`,默认追加 `schema=public` - 开发环境下复用单例,减少连接开销 --- ### 文档 - 新增:`docs/financial_data_dictionary.md`(统一字段口径与来源映射) - 更新:`docs/project-status.md`(现状、限制与后续计划);`docs/user-guide.md`(报告页、快照与分析流程) - 清理:删除 `docs/tasks.md` --- ### 风险与注意事项 - Provider 密钥现仅从 `config/config.json` 读取;未配置将跳过需密钥的数据源(日志有警告) - 美股字段映射存在口径差异,个别指标为近似计算,需结合“财务数据字典”持续校验 - 单模块分析尝试附带最近年度财报上下文,边界与稳定性需结合真实数据回归 --- ### 验收建议 - 快照: - CN: `GET /api/financials/china/600519.SH/snapshot` - US: `GET /api/financials/us/AAPL/snapshot` - 报告页:访问 `/report/600519?market=china` 验证快照卡片、顺序流式与保存按钮 - 多源融合:调整 `config/data_sources.yaml` 优先级,观察回退与成功率日志 - 数据库:在无 `.env` 的场景下,确认 Prisma 能从 `config/config.json` 正确加载连接串