diff --git a/.kiro/specs/fundamental-stock-analysis/design.md b/.kiro/specs/fundamental-stock-analysis/design.md deleted file mode 100644 index 3764930..0000000 --- a/.kiro/specs/fundamental-stock-analysis/design.md +++ /dev/null @@ -1,351 +0,0 @@ -# 设计文档 - 基本面选股系统 - -## 概览 - -基本面选股系统是一个全栈Web应用,采用前后端分离架构。前端使用Next.js和shadcn/ui构建响应式中文界面,后端使用Python FastAPI提供API服务。系统通过多个专业分析模块,结合财务数据API、AI大模型和实时数据,为用户提供全面的股票基本面分析报告。 - -## 架构 - -### 系统架构图 - -```mermaid -graph TB - subgraph "前端层" - A[Next.js应用] --> B[shadcn/ui UI组件] - A --> C[TradingView图表组件] - end - - subgraph "后端层" - D[FastAPI服务器] --> E[报告生成引擎] - D --> F[数据获取服务] - D --> G[配置管理服务] - end - - subgraph "外部服务" - H[Tushare API] - I[Gemini API] - J[其他数据源APIs] - end - - subgraph "数据层" - K[PostgreSQL数据库] - end - - A --> D - F --> H - F --> I - F --> J - E --> K - G --> K -``` - -### 技术栈 - -**前端:** -- Next.js 14 (App Router) -- TypeScript -- shadcn/ui组件库 (https://ui.shadcn.com/) -- TradingView Charting Library -- Tailwind CSS -- Radix UI (shadcn/ui的底层组件) - -**后端:** -- Python 3.11+ -- FastAPI -- SQLAlchemy (ORM) -- Alembic (数据库迁移) -- Pydantic (数据验证) -- httpx (HTTP客户端) - -**数据库:** -- PostgreSQL 15+ - -**外部服务:** -- Tushare API (中国股票数据) -- Google Gemini API (AI分析) -- 其他市场数据源APIs - -## 组件和接口 - -### shadcn/ui组件使用规划 - -系统将使用shadcn/ui (https://ui.shadcn.com/) 的官方组件来构建一致的用户界面: - -**核心组件使用:** -- `Button`: 主要操作按钮(生成报告、保存配置等) -- `Input`: 证券代码输入框 -- `Select`: 交易市场选择器 -- `Card`: 分析模块容器、报告卡片 -- `Progress`: 报告生成进度条 -- `Badge`: 状态标识(完成、进行中、失败) -- `Tabs`: 分析模块切换 -- `Form`: 配置表单、搜索表单 -- `Alert`: 错误提示、成功消息 -- `Separator`: 内容分隔线 -- `Skeleton`: 加载占位符 -- `Toast`: 操作反馈通知 -- `Table`: 财务数据展示表格(资产负债表、利润表、现金流量表等) - -**主题配置:** -- 使用默认主题,支持深色/浅色模式切换 -- 自定义中文字体配置 -- 适配中文内容的间距和排版 - -### 前端组件结构 - -``` -src/ -├── app/ -│ ├── page.tsx # 首页 -│ ├── report/[symbol]/page.tsx # 报告页面 -│ ├── config/page.tsx # 配置页面 -│ └── layout.tsx # 根布局 -├── components/ -│ ├── ui/ # shadcn/ui基础组件 (Button, Input, Card, etc.) -│ ├── StockSearchForm.tsx # 股票搜索表单 (使用Form, Input, Select) -│ ├── ReportProgress.tsx # 报告生成进度 (使用Progress, Badge, Card) -│ ├── TradingViewChart.tsx # TradingView图表 -│ ├── AnalysisModule.tsx # 分析模块容器 (使用Card, Tabs, Separator) -│ ├── FinancialDataTable.tsx # 财务数据表格 (使用Table, TableHeader, TableBody, TableRow, TableCell) -│ └── ConfigForm.tsx # 配置表单 (使用Form, Input, Button, Alert) -├── lib/ -│ ├── api.ts # API客户端 -│ ├── types.ts # TypeScript类型定义 -│ └── utils.ts # 工具函数 -└── hooks/ - ├── useReport.ts # 报告数据钩子 - └── useProgress.ts # 进度追踪钩子 -``` - -### 后端API结构 - -``` -app/ -├── main.py # FastAPI应用入口 -├── models/ -│ ├── __init__.py -│ ├── report.py # 报告数据模型 -│ ├── config.py # 配置数据模型 -│ └── progress.py # 进度追踪模型 -├── schemas/ -│ ├── __init__.py -│ ├── report.py # 报告Pydantic模式 -│ ├── config.py # 配置Pydantic模式 -│ └── progress.py # 进度Pydantic模式 -├── services/ -│ ├── __init__.py -│ ├── data_fetcher.py # 数据获取服务 -│ ├── ai_analyzer.py # AI分析服务 -│ ├── report_generator.py # 报告生成服务 -│ └── config_manager.py # 配置管理服务 -├── routers/ -│ ├── __init__.py -│ ├── reports.py # 报告相关API -│ ├── config.py # 配置相关API -│ └── progress.py # 进度相关API -└── core/ - ├── __init__.py - ├── database.py # 数据库连接 - ├── config.py # 应用配置 - └── dependencies.py # 依赖注入 -``` - -### 核心API接口 - -#### 报告相关API - -```python -# GET /api/reports/{symbol}?market={market} -# 获取或生成股票报告 -class ReportResponse: - symbol: str - market: str - report_id: str - status: str # "existing" | "generating" | "completed" | "failed" - created_at: datetime - updated_at: datetime - modules: List[AnalysisModule] - -# POST /api/reports/{symbol}/regenerate?market={market} -# 重新生成报告 -class RegenerateRequest: - force: bool = False - -# GET /api/reports/{report_id}/progress -# 获取报告生成进度 -class ProgressResponse: - report_id: str - current_step: int - total_steps: int - current_step_name: str - status: str # "running" | "completed" | "failed" - step_timings: List[StepTiming] - estimated_remaining: Optional[int] -``` - -#### 配置相关API - -```python -# GET /api/config -# 获取系统配置 -class ConfigResponse: - database: DatabaseConfig - gemini_api: GeminiConfig - data_sources: Dict[str, DataSourceConfig] - -# PUT /api/config -# 更新系统配置 -class ConfigUpdateRequest: - database: Optional[DatabaseConfig] - gemini_api: Optional[GeminiConfig] - data_sources: Optional[Dict[str, DataSourceConfig]] - -# POST /api/config/test -# 测试配置连接 -class ConfigTestRequest: - config_type: str # "database" | "gemini" | "data_source" - config_data: Dict[str, Any] -``` - -## 数据模型 - -### 数据库表结构 - -```sql --- 报告表 -CREATE TABLE reports ( - id UUID PRIMARY KEY DEFAULT gen_random_uuid(), - symbol VARCHAR(20) NOT NULL, - market VARCHAR(20) NOT NULL, - status VARCHAR(20) NOT NULL DEFAULT 'generating', - created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), - updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), - UNIQUE(symbol, market) -); - --- 分析模块表 -CREATE TABLE analysis_modules ( - id UUID PRIMARY KEY DEFAULT gen_random_uuid(), - report_id UUID REFERENCES reports(id) ON DELETE CASCADE, - module_type VARCHAR(50) NOT NULL, - module_order INTEGER NOT NULL, - title VARCHAR(200) NOT NULL, - content JSONB, - status VARCHAR(20) NOT NULL DEFAULT 'pending', - started_at TIMESTAMP WITH TIME ZONE, - completed_at TIMESTAMP WITH TIME ZONE, - error_message TEXT -); - --- 进度追踪表 -CREATE TABLE progress_tracking ( - id UUID PRIMARY KEY DEFAULT gen_random_uuid(), - report_id UUID REFERENCES reports(id) ON DELETE CASCADE, - step_name VARCHAR(100) NOT NULL, - step_order INTEGER NOT NULL, - status VARCHAR(20) NOT NULL DEFAULT 'pending', - started_at TIMESTAMP WITH TIME ZONE, - completed_at TIMESTAMP WITH TIME ZONE, - duration_ms INTEGER, - error_message TEXT -); - --- 系统配置表 -CREATE TABLE system_config ( - id UUID PRIMARY KEY DEFAULT gen_random_uuid(), - config_key VARCHAR(100) UNIQUE NOT NULL, - config_value JSONB NOT NULL, - updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() -); -``` - -### 分析模块类型定义 - -```python -class AnalysisModuleType(Enum): - TRADING_VIEW_CHART = "trading_view_chart" - FINANCIAL_DATA = "financial_data" - BUSINESS_INFO = "business_info" - FUNDAMENTAL_ANALYSIS = "fundamental_analysis" - BULLISH_ANALYSIS = "bullish_analysis" - BEARISH_ANALYSIS = "bearish_analysis" - MARKET_ANALYSIS = "market_analysis" - NEWS_ANALYSIS = "news_analysis" - TRADING_ANALYSIS = "trading_analysis" - INSIDER_ANALYSIS = "insider_analysis" - FINAL_CONCLUSION = "final_conclusion" - -class AnalysisModule(BaseModel): - id: UUID - module_type: AnalysisModuleType - title: str - content: Dict[str, Any] - status: str - duration_ms: Optional[int] - error_message: Optional[str] -``` - -## 错误处理 - -### 错误类型定义 - -```python -class StockAnalysisError(Exception): - """基础异常类""" - pass - -class DataSourceError(StockAnalysisError): - """数据源错误""" - pass - -class AIAnalysisError(StockAnalysisError): - """AI分析错误""" - pass - -class ConfigurationError(StockAnalysisError): - """配置错误""" - pass - -class DatabaseError(StockAnalysisError): - """数据库错误""" - pass -``` - -### 错误处理策略 - -1. **数据获取失败**: 重试机制,最多3次重试,指数退避 -2. **AI分析失败**: 记录错误,继续其他模块,最后汇总失败信息 -3. **数据库连接失败**: 使用连接池,自动重连 -4. **配置错误**: 提供详细错误信息,阻止系统启动 -5. **前端错误**: Toast通知,错误边界组件 - -## 测试策略 - -### 测试层级 - -1. **单元测试** - - 后端服务函数测试 - - 前端组件测试 - - 数据模型验证测试 - -2. **集成测试** - - API端点测试 - - 数据库操作测试 - - 外部服务集成测试 - -3. **端到端测试** - - 完整报告生成流程测试 - - 用户界面交互测试 - -### 测试工具 - -- **后端**: pytest, pytest-asyncio, httpx -- **前端**: Jest, React Testing Library, Playwright -- **数据库**: pytest-postgresql -- **API测试**: FastAPI TestClient - -### 测试数据 - -- 使用测试数据库和模拟数据 -- 外部API使用mock响应 -- 测试用例覆盖各种市场和股票类型 \ No newline at end of file diff --git a/.kiro/specs/fundamental-stock-analysis/requirements.md b/.kiro/specs/fundamental-stock-analysis/requirements.md deleted file mode 100644 index 69bfc1f..0000000 --- a/.kiro/specs/fundamental-stock-analysis/requirements.md +++ /dev/null @@ -1,112 +0,0 @@ -# 需求文档 - MVP版本 - -## 介绍 - -基本面选股系统MVP是一个综合的中文网站,允许用户输入证券代码和交易市场,生成包含多维度分析的详细股票基本面报告。系统通过多个专业分析模块,结合财务数据、AI分析和市场信息,为用户提供全面的投资决策支持。 - -## 术语表 - -- **选股系统 (Stock_Selection_System)**: 提供基本面分析和报告生成的主要系统 -- **用户 (User)**: 使用系统进行股票分析的终端用户 -- **证券代码 (Security_Code)**: 股票在特定交易市场的唯一标识符 -- **交易市场 (Trading_Market)**: 股票交易的地理区域,包括中国、香港、美国、日本 -- **基本面报告 (Fundamental_Report)**: 包含九个分析模块的综合股票分析报告 -- **TradingView图表 (TradingView_Chart)**: 使用TradingView高级图表组件显示的股价图表 -- **Tushare_API**: 用于获取中国股票财务数据的数据源接口 -- **Gemini_Model**: Google的大语言模型,用于生成业务分析内容 -- **景林模型 (Jinglin_Model)**: 基本面分析师使用的问题集分析框架 -- **PostgreSQL数据库 (PostgreSQL_Database)**: 用于存储报告数据的关系型数据库 -- **分析模块 (Analysis_Module)**: 报告中的独立分析部分,每个模块对应一个显示页面 - -## 需求 - -### 需求 1 - -**用户故事:** 作为投资者,我希望能够输入股票代码和选择交易市场,以便获取该股票的综合基本面分析报告 - -#### 验收标准 - -1. 当用户访问首页时,选股系统应当显示证券代码输入框和交易市场选择器 -2. 当用户选择交易市场时,选股系统应当提供中国、香港、美国、日本四个选项 -3. 当用户提交证券代码和交易市场时,选股系统应当处理用户请求并跳转到报告页面 - -### 需求 2 - -**用户故事:** 作为投资者,我希望系统能够检查历史报告,以便决定是查看现有报告还是生成新报告 - -#### 验收标准 - -1. 当用户提交证券代码和交易市场后,选股系统应当在PostgreSQL数据库中查询对应的历史报告 -2. 如果存在历史报告,选股系统应当显示历史报告内容和"生成最新报告"按钮 -3. 如果不存在历史报告,选股系统应当自动启动九步报告生成流程 - -### 需求 3 - -**用户故事:** 作为投资者,我希望系统能够获取准确的财务数据,以便进行可靠的基本面分析 - -#### 验收标准 - -1. 当生成中国股票报告时,选股系统应当使用Tushare_API获取财务信息 -2. 当处理其他市场股票时,选股系统应当根据交易市场选择相应的数据源 -3. 当财务数据获取完成时,选股系统应当将数据作为后续分析的基础 - -### 需求 4 - -**用户故事:** 作为投资者,我希望系统能够通过AI分析获取公司业务信息,以便了解公司的全面情况 - -#### 验收标准 - -1. 当需要业务信息时,选股系统应当使用Gemini生成公司概览、主营业务、发展历程、核心团队、供应链、主要客户及销售模式、未来展望 -2. 当调用Gemini_Model时,选股系统应当使用配置的API密钥进行身份验证 -3. 当业务信息生成完成时,选股系统应当将内容整合到报告的第二部分 - -### 需求 5 - -**用户故事:** 作为投资者,我希望系统能够提供多维度的专业分析,以便获得全面的投资决策支持 - -#### 验收标准 - -1. 当生成报告时,选股系统应当按顺序执行10个分析模块:财务信息、业务信息、基本面分析、看涨分析、看跌分析、市场分析、新闻分析、交易分析、内部人与机构动向分析、最终结论 -2. 当执行基本面分析时,选股系统应当使用问题集进行分析 -3. 当执行看涨分析时,选股系统应当研究潜在隐藏资产和护城河竞争优势 -4. 当执行看跌分析时,选股系统应当分析公司价值底线和最坏情况 -5. 当执行市场分析时,选股系统应当研究市场情绪分歧点与变化驱动 -6. 当执行新闻分析时,选股系统应当研究股价催化剂与拐点预判 -7. 当执行交易分析时,选股系统应当研究市场体量与增长路径 -8. 当执行内部人分析时,选股系统应当研究内部人与机构动向 -9. 当生成最终结论时,选股系统应当指出关键矛盾与预期差以及拐点的临近 - -### 需求 6 - -**用户故事:** 作为投资者,我希望每个分析模块都能独立查看,以便专注于特定的分析维度 - -#### 验收标准 - -1. 当显示报告时,选股系统应当为每个分析模块提供独立的显示页面 -2. 当用户在模块间切换时,选股系统应当保持导航的流畅性 -3. 当所有模块完成时,选股系统应当将完整报告保存到PostgreSQL数据库 - -### 需求 7 - -**用户故事:** 作为投资者,我希望在报告生成过程中能够看到实时进度,以便了解当前状态和预估完成时间 - -#### 验收标准 - -1. 当开始生成报告时,选股系统应当显示进度指示器展示所有分析步骤 -2. 当执行每个分析步骤时,选股系统应当高亮显示当前正在进行的步骤 -3. 当每个步骤完成时,选股系统应当更新步骤状态为已完成 -4. 当执行分析步骤时,选股系统应当记录每个步骤的开始时间和完成时间 -5. 当显示进度时,选股系统应当展示每个步骤的耗时统计 -6. 当步骤执行失败时,选股系统应当显示错误状态和错误信息 - -### 需求 8 - -**用户故事:** 作为系统管理员,我希望能够配置系统参数,以便系统能够正常连接外部服务 - -#### 验收标准 - -1. 选股系统应当提供配置页面用于设置数据库连接参数 -2. 选股系统应当提供配置页面用于设置Gemini_API密钥 -3. 选股系统应当提供配置页面用于设置各市场的数据源配置 -4. 当配置更新时,选股系统应当验证配置的有效性 -5. 当配置保存时,选股系统应当将配置持久化存储 \ No newline at end of file diff --git a/.kiro/specs/fundamental-stock-analysis/tasks.md b/.kiro/specs/fundamental-stock-analysis/tasks.md deleted file mode 100644 index 4bbe191..0000000 --- a/.kiro/specs/fundamental-stock-analysis/tasks.md +++ /dev/null @@ -1,167 +0,0 @@ -# 实施计划 - -- [x] 1. 后端项目初始化和基础架构 - - 创建Python FastAPI项目结构 - - 设置虚拟环境和依赖管理(requirements.txt或pyproject.toml) - - 配置FastAPI应用入口(main.py) - - 创建核心目录结构(models, schemas, services, routers, core) - - 设置基础配置管理(core/config.py) - - _需求: 8.1, 8.2_ - -- [x] 2. 数据库设置和模型定义 - - 配置PostgreSQL数据库连接(core/database.py) - - 创建SQLAlchemy数据模型(reports, analysis_modules, progress_tracking, system_config) - - 设置Alembic数据库迁移工具 - - 创建初始数据库迁移脚本 - - 实现数据库会话管理和依赖注入 - - _需求: 6.3, 8.1_ - -- [x] 3. Pydantic模式和基础服务 - - 创建Pydantic数据验证模式(schemas/) - - 实现配置管理服务(services/config_manager.py) - - 创建数据获取服务基础架构(services/data_fetcher.py) - - 实现基础错误处理和异常类 - - _需求: 8.2, 8.3, 8.4, 8.5_ - -- [x] 4. 外部API集成服务 - - 实现Tushare API集成(中国股票数据获取) - - 实现Gemini API集成(AI分析服务) - - 创建数据源配置和切换逻辑 - - 添加API调用错误处理和重试机制 - - _需求: 3.1, 3.2, 4.1, 4.2_ - -- [x] 5. 报告生成引擎核心 - - 创建报告生成服务(services/report_generator.py) - - 实现分析模块执行框架 - - 创建进度追踪服务(services/progress_tracker.py) - - 实现步骤计时和状态管理 - - _需求: 5.1, 7.1, 7.2, 7.3, 7.4, 7.5_ - -- [x] 6. 后端API路由实现 - - 实现报告相关API端点(routers/reports.py) - - 创建配置管理API端点(routers/config.py) - - 实现进度追踪API端点(routers/progress.py) - - 添加API文档和验证 - - _需求: 2.1, 2.2, 2.3, 8.1, 8.2, 8.3_ - -- [x] 7. 前端项目初始化 - - 创建Next.js项目并配置TypeScript - - 安装和配置shadcn/ui组件库 - - 设置Tailwind CSS和基础样式 - - 配置项目文件夹结构(components, lib, hooks, app) - - 创建基础布局和主题配置 - - _需求: 1.1_ - -- [x] 8. 前端核心组件开发 - - 安装和配置shadcn/ui基础组件 - - 实现StockSearchForm组件(使用Form, Input, Select, Button) - - 创建ReportProgress组件(使用Progress, Badge, Card) - - 实现AnalysisModule组件(使用Card, Tabs, Separator) - - 创建FinancialDataTable组件(使用Table组件系列) - - _需求: 1.1, 1.2, 7.1, 7.2_ - -- [x] 9. 首页和股票搜索功能 - - 实现首页布局和设计(app/page.tsx) - - 创建股票代码输入和市场选择功能 - - 实现表单验证和提交逻辑 - - 添加中文界面文本和错误提示 - - 连接前端表单到后端API - - _需求: 1.1, 1.2, 1.3_ - -- [x] 10. 报告页面和历史报告功能 - - 实现报告页面路由(app/report/[symbol]/page.tsx) - - 创建历史报告检查和显示逻辑 - - 实现"生成最新报告"按钮功能 - - 添加报告加载状态和错误处理 - - _需求: 2.1, 2.2, 2.3_ - -- [x] 11. TradingView图表集成 - - 集成TradingView高级图表组件 - - 实现图表配置和参数设置 - - 根据证券代码和市场配置图表 - - 处理图表加载错误和异常情况 - - _需求: 5.1, 5.2, 5.3, 5.4_ - -- [x] 12. 财务数据分析模块 - - 实现财务数据获取和处理逻辑 - - 创建财务数据格式化和展示 - - 实现FinancialDataTable的数据绑定 - - 添加财务数据的错误处理和重试 - - _需求: 3.1, 3.2, 3.3_ - -- [x] 13. AI业务信息分析模块 - - 实现Gemini API调用逻辑和提示词模板 - - 创建业务信息分析内容生成 - - 实现公司概览、主营业务、发展历程等内容 - - 添加AI分析结果的格式化和展示 - - _需求: 4.1, 4.2, 4.3_ - -- [x] 14. 专业分析模块实现 - - 实现景林模型基本面分析模块 - - 创建看涨分析师模块(隐藏资产、护城河分析) - - 实现看跌分析师模块(价值底线、最坏情况分析) - - 创建市场分析师模块(市场情绪分歧点分析) - - 实现新闻分析师模块(股价催化剂分析) - - 创建交易分析模块(市场体量与增长路径) - - 实现内部人与机构动向分析模块 - - 创建最终结论模块(关键矛盾与拐点分析) - - _需求: 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9_ - -- [x] 15. 报告生成流程整合 - - 整合所有分析模块到报告生成引擎 - - 实现模块间的数据传递和依赖关系 - - 创建报告生成的错误处理和重试机制 - - 实现报告完成后的数据库保存 - - _需求: 5.1, 6.3_ - -- [x] 16. 实时进度显示功能 - - 实现前端进度追踪钩子(useProgress) - - 连接WebSocket或Server-Sent Events到进度显示 - - 添加步骤高亮和状态更新 - - 实现计时显示和预估完成时间 - - 添加错误状态显示 - - _需求: 7.1, 7.2, 7.3, 7.4, 7.5, 7.6_ - -- [x] 17. 配置管理页面 - - 创建配置页面布局和表单(app/config/page.tsx) - - 实现数据库配置界面 - - 添加Gemini API配置功能 - - 创建数据源配置管理 - - 实现配置验证和测试功能 - - _需求: 8.1, 8.2, 8.3, 8.4, 8.5_ - -- [x] 18. 报告展示和导航优化 - - 实现分析模块的独立页面展示 - - 创建模块间的流畅导航 - - 添加报告概览和目录功能 - - 优化移动端响应式显示 - - _需求: 6.1, 6.2_ - -- [x] 19. 错误处理和用户体验优化 - - 实现全局错误处理和错误边界 - - 添加Toast通知系统 - - 创建加载状态和骨架屏 - - 优化中文界面和用户反馈 - - 添加操作确认和提示 - - _需求: 7.6, 1.1_ - -- [x] 20. 测试实现 -- [x] 20.1 后端单元测试 - - 为数据获取服务编写单元测试 - - 为AI分析服务编写单元测试 - - 为报告生成引擎编写单元测试 - - 为配置管理服务编写单元测试 - -- [x] 20.2 前端组件测试 - - 为核心组件编写React Testing Library测试 - - 为表单组件编写交互测试 - - 为进度组件编写状态测试 - -- [x] 20.3 API集成测试 - - 为报告生成API编写集成测试 - - 为配置管理API编写集成测试 - - 为进度追踪API编写集成测试 - -- [x] 20.4 端到端测试 - - 编写完整报告生成流程的E2E测试 - - 编写配置管理流程的E2E测试 \ No newline at end of file