# 实施计划：财务数据获取与分析系统 (V3.0) - Refactored

## 1. 目标描述
开发一个可扩展的后端工具，通过策略模式（Strategy Pattern）支持多市场（当前为中国A股、美股、港股）的财务数据分析。工具能够为每个市场定制数据获取、分析和报告生成的全过程，同时保持核心流程的统一和代码的清晰。

## 2. 核心架构：策略模式
系统采用策略模式，将每个市场的完整业务流程（“获取-存储-分析-报告”）封装在独立的策略类中。`main.py` 作为上下文，根据用户指定的市场，选择并执行相应的策略。

- **基础策略 (Base Strategy)**: 定义在 `src/strategies/base_strategy.py`，提供了一个所有具体策略都必须遵循的通用接口，如 `execute()` 方法，该方法依次调用 `fetch_data()`、`analyze_data()` 和 `generate_report()`。
- **中国市场策略 (CN_Strategy)**: `src/strategies/cn_strategy.py`，封装了针对A股的完整处理流程。
- **美国市场策略 (US_Strategy)**: `src/strategies/us_strategy.py`，封装了针对美股的完整处理流程。
- **香港市场策略 (HK_Strategy)**: `src/strategies/hk_strategy.py`，封装了针对港股的完整处理流程。

## 3. 核心执行流程 (通过策略)

### 步骤 1: 初始化与策略选择
- **目的**: 准备环境并根据市场选择合适的策略。
- **动作**:
    - 加载 `.env` 文件中的 `TUSHARE_TOKEN` 和 `ALPHA_VANTAGE_KEY`。
    - `main.py` 根据用户输入的 `market` 参数，通过一个简单的工厂函数 `get_strategy`，实例化 `CN_Strategy`、`US_Strategy` 或 `HK_Strategy`。

### 步骤 2: 策略执行流程
`main.py` 调用所选策略实例的 `execute` 方法，触发完整的分析流程。根据市场选择，执行路径如下：

---

#### **场景 A: 中国市场 (market='CN')**
选择中国市场时，`CN_Strategy` 的 `execute` 方法会按顺序执行以下操作：

1.  **数据获取 (`fetch_data`)**:
    - **执行**: `CN_Strategy` 实例化并调用 `CnFetcher` 来获取数据。
    - **API调用序列 (共7次)**:
        1. **获取利润表**: 调用 Tushare 的 `income` 接口 (1次)。
        2. **获取资产负债表**: 调用 Tushare 的 `balancesheet` 接口 (1次)。
        3. **获取现金流量表**: 调用 Tushare 的 `cashflow` 接口 (1次)。
        4. **获取市场指标 (PE/PB等)**: 调用 Tushare 的 `daily_basic` 接口 (1次)。
        5. **获取基本信息 (名称/日期)**: 调用 Tushare 的 `stock_basic` 接口 (1次)。
        6. **获取公司信息 (员工数)**: 调用 Tushare 的 `stock_company` 接口 (1次)。
        7. **获取股东信息**: 调用 Tushare 的 `stk_holdernumber` 接口 (1次)。
    - **数据存储 (两阶段缓存)**:
        - **1. 原始数据缓存**: `CnFetcher` 将API返回的原始数据保存为 `raw_*.csv`。
        - **2. 处理后数据缓存**: `CN_Strategy` 将初步处理过的数据保存为 `income_statement.csv` 等文件。

2.  **数据分析 (`analyze_data`)**:
    - **执行**: `CN_Strategy` 实例化 `CN_Analyzer`。
    - **动作**: `CN_Analyzer` 对获取的数据进行合并、列名映射 (`_map_columns`) 和A股特定的财务指标计算。

3.  **报告生成 (`generate_report`)**:
    - **调用**: `CN_Strategy` 调用 `CN_ReportGenerator` 实例的 `generate_report` 方法，传递分析数据和输出路径。
    - **核心动作**: `CN_ReportGenerator` 全权负责报告的生成与保存：
        1. **生成Markdown**: 调用继承自 `BaseReporter` 的 `_generate_markdown_content` 方法创建报告内容。
        2. **保存Markdown**: 将内容写入 `data/CN/{symbol}/report.md`。
        3. **生成HTML**: 使用 `markdown` 库将内容转换为 HTML，并嵌入预设的 CSS 样式。
        4. **保存HTML**: 将最终的 HTML 内容写入 `data/CN/{symbol}/report.html`。

---

#### **场景 B: 香港市场 (market='HK')**
选择香港市场时，`HK_Strategy` 的 `execute` 方法会按顺序执行以下操作：

1.  **数据获取 (`fetch_data`)**:
    - **执行**: `HK_Strategy` 实例化并调用 `HkFetcher` 来获取数据。
    - **API调用序列 (共7次)**:
        1. **获取利润表**: 调用 Tushare 的 `hk_income` 接口 (1次)。
        2. **获取资产负债表**: 调用 Tushare 的 `hk_balancesheet` 接口 (1次)。
        3. **获取现金流量表**: 调用 Tushare 的 `hk_cashflow` 接口 (1次)。
        4. **获取市场指标 (PE/PB等)**: 调用 Tushare 的 `daily_basic` 接口 (1次)。
        5. **获取基本信息 (名称/日期)**: 调用 Tushare 的 `stock_basic` 接口 (1次)。
        6. **获取公司信息 (员工数)**: 调用 Tushare 的 `stock_company` 接口 (1次)。
        7. **获取股东信息**: 调用 Tushare 的 `stk_holdernumber` 接口 (1次)。
    - **数据存储 (两阶段缓存)**:
        - **1. 原始数据缓存**: `HkFetcher` 将API返回的原始数据保存为 `raw_*.csv`。
        - **2. 处理后数据缓存**: `HK_Strategy` 将初步处理过的数据保存为 `income_statement.csv` 等文件。

2.  **数据分析 (`analyze_data`)**:
    - **执行**: `HK_Strategy` 实例化 `HK_Analyzer`。
    - **动作**: `HK_Analyzer` 对获取的数据进行合并、列名映射和港股特定的财务指标计算。

3.  **报告生成 (`generate_report`)**:
    - **调用**: `HK_Strategy` 调用 `HK_ReportGenerator` 实例的 `generate_report` 方法，传递分析数据和输出路径。
    - **核心动作**: `HK_ReportGenerator` 全权负责报告的生成与保存：
        1. **生成Markdown**: 调用继承自 `BaseReporter` 的 `_generate_markdown_content` 方法创建报告内容。
        2. **保存Markdown**: 将内容写入 `data/HK/{symbol}/report.md`。
        3. **生成HTML**: 使用 `markdown` 库将内容转换为 HTML，并嵌入预设的 CSS 样式。
        4. **保存HTML**: 将最终的 HTML 内容写入 `data/HK/{symbol}/report.html`。

---

#### **场景 C: 美国市场 (market='US')**
选择美国市场时，`US_Strategy` 的 `execute` 方法会按顺序执行以下操作：

1.  **数据获取 (`fetch_data`)**:
    - **执行**: `US_Strategy` 实例化并调用 `UsFetcher`。
    - **API调用序列 (共4次, 每次调用前有15秒延迟)**:
        1. **获取利润表**: 调用 Alpha Vantage 的 `INCOME_STATEMENT` 功能 (1次)。
        2. **获取资产负债表**: 调用 Alpha Vantage 的 `BALANCE_SHEET` 功能 (1次)。
        3. **获取现金流量表**: 调用 Alpha Vantage 的 `CASH_FLOW` 功能 (1次)。
        4. **获取公司概览**: 调用 Alpha Vantage 的 `OVERVIEW` 功能 (1次)，用于计算市值、PE、PB等核心指标。
    - **数据存储 (两阶段缓存)**:
        - **1. 原始数据缓存**: `UsFetcher` 将API返回的原始数据保存为 `raw_*.csv`。
        - **2. 处理后数据缓存**: `US_Strategy` 将初步处理过的数据保存为 `income_statement.csv` 等文件。

2.  **数据分析 (`analyze_data`)**:
    - **执行**: `US_Strategy` 实例化 `US_Analyzer`。
    - **动作**: `US_Analyzer` 对获取的数据进行合并、列名映射和美股特定的计算逻辑。

3.  **报告生成 (`generate_report`)**:
    - **调用**: `US_Strategy` 调用 `US_ReportGenerator` 实例的 `generate_report` 方法，传递分析数据和输出路径。
    - **核心动作**: `US_ReportGenerator` 全权负责报告的生成与保存：
        1. **生成Markdown**: 调用继承自 `BaseReporter` 的 `_generate_markdown_content` 方法创建报告内容。
        2. **保存Markdown**: 将内容写入 `data/US/{symbol}/report.md`。
        3. **生成HTML**: 使用 `markdown` 库将内容转换为 HTML，并嵌入预设的 CSS 样式。
        4. **保存HTML**: 将最终的 HTML 内容写入 `data/US/{symbol}/report.html`。

## 4. 验证计划
- **核心逻辑不变**: 由于核心的数据获取和指标计算逻辑是从旧代码平移而来，其准确性得以保留。
- **结构验证**: 
    1. **中国股票**: 运行 `python main.py CN 600519.SH`。检查程序是否无报错执行完毕，并生成 `data/CN/600519.SH/report.md` 文件。
    2. **香港股票**: 运行 `python main.py HK 00700.HK`。检查程序是否无报错执行完毕，并生成 `data/HK/00700.HK/report.md` 文件。
    3. **美国股票**: 运行 `python main.py US AAPL`。检查程序是否无报错执行完毕，并生成 `data/US/AAPL/report.md` 文件。
    4. **报告内容**: 打开生成的 `.md` 文件，确认内容与旧版报告基本一致，数据完整，格式正确。
