"""播种知识库文章（P1-3 嵌入用）"""
from app.database import get_session_local
from app.models.knowledge_article import KnowledgeArticle
import logging

logger = logging.getLogger("cma.seed_kb")


def seed_knowledge_articles():
    session = get_session_local()()
    try:
        cnt = session.query(KnowledgeArticle).count()
        if cnt > 0:
            logger.info(f"知识库文章已存在 {cnt} 条，跳过播种")
            return

        articles = [
            # ── 战略地图画布 ──
            KnowledgeArticle(
                title="CMA四层因果链",
                summary="财务→客户→流程→学习成长的因果驱动关系",
                content="""### CMA四层因果链

管理会计OS基于平衡计分卡（BSC）的四层架构：

| 层级 | 说明 | 典型指标 |
|:----|:----|:--------|
| **财务** | 最终结果层，衡量企业价值的实现 | 收入、利润、ROI |
| **客户** | 市场反馈层，反映客户价值的创造 | 满意度、客户数、市场份额 |
| **流程** | 运营效率层，体现运营能力的支撑 | 交付及时率、不良率 |
| **学习** | 基础驱动层，驱动组织能力的成长 | 培训时长、人才梯队 |

**因果链方向**：学习成长 → 内部流程 → 客户 → 财务

**战略地图使用技巧**：
- 每个维度设 2-4 个目标
- 每个目标关联 1-2 个 KPI
- 用从下到上的箭头标注驱动关系""",
                category="practice",
                icon="🗺️",
                related_page="/maps/canvas",
                sort_order=1,
            ),
            # ── KPI列表 ──
            KnowledgeArticle(
                title="领先指标 vs 滞后指标",
                summary="如何区分和运用领先指标与滞后指标进行管理",
                content="""### 领先指标 vs 滞后指标

| 类型 | 定义 | 示例 | 管理用途 |
|:----|:----|:----|:---------|
| **滞后指标** | 衡量结果的历史指标 | 收入、利润、客户数 | 评估过去表现 |
| **领先指标** | 预测未来结果的指标 | 客户接触次数、培训完成率 | 指导当前行动 |

**管理原则**：
- 每个滞后指标配套 1-2 个领先指标
- 领先指标的变化先于滞后指标 3-6 个月
- 日常管理聚焦领先指标，月度复盘看滞后指标""",
                category="term",
                icon="📊",
                related_page="/kpis",
                sort_order=1,
            ),
            # ── 预算编制 ──
            KnowledgeArticle(
                title="全面预算编制方法",
                summary="从战略到预算的完整编制方法论",
                content="""### 全面预算编制方法

**四种主流预算方法**：

| 方法 | 适用场景 | 优点 | 缺点 |
|:----|:---------|:----|:-----|
| **增量预算** | 稳定业务 | 简单易行 | 忽略变化 |
| **零基预算** | 转型期 | 资源优化 | 工作量大 |
| **弹性预算** | 波动业务 | 适应性强 | 编制复杂 |
| **滚动预算** | 快速变化 | 持续更新 | 维护成本高 |

**管理会计OS的预算流程**：
1. KPI目标值设定 → 2. 预算推算（从KPI自动生成）→ 3. 人工审核调整 → 4. 审批发布 → 5. 执行跟踪""",
                category="practice",
                icon="💰",
                related_page="/budget",
                sort_order=1,
            ),
            # ── 差异分析 ──
            KnowledgeArticle(
                title="弹性预算差异分解",
                summary="将总差异分解为价差和量差的系统方法",
                content="""### 弹性预算差异分解

弹性预算分析的三步法：

**① 计算总差异**：实际值 - 静态预算值

**② 拆分为量差和价差**：
- **量差** = (实际量 - 预算量) × 标准价格
- **价差** = (实际价格 - 标准价格) × 实际量

**③ 判断责任归属**：
- 量差 → 销售/生产部门
- 价差 → 采购/定价部门
- 混合差异 → 按比例分摊

**红黄绿灯判定**：
| 差异率 | 等级 | 动作 |
|:------|:-----|:-----|
| < 10% | 🟢 正常 | 关注即可 |
| 10%-20% | 🟡 预警 | 分析原因 |
| > 20% | 🔴 异常 | 立即改善 |""",
                category="formula",
                icon="📐",
                related_page="/deviations",
                sort_order=1,
            ),
            # ── 预测模拟 ──
            KnowledgeArticle(
                title="情景分析法",
                summary="基于多种假设情景预判财务结果的规划工具",
                content="""### 情景分析法

**三种标准情景**：

| 情景 | 定义 | 参数设定 |
|:----|:-----|:---------|
| **乐观** | 最优可能结果 | 收入+20%，成本-10% |
| **基准** | 最可能结果 | 按历史趋势外推 |
| **悲观** | 最差可能结果 | 收入-15%，成本+10% |

**使用方法**：
1. 确定关键变量（收入、成本、销量）
2. 设置变量的乐观/基准/悲观值
3. 系统自动计算各情景下的财务结果
4. 比较差异，制定风险应对方案

**管理会计OS支持**：CVP分析、投资回报预测、敏感性分析""",
                category="term",
                icon="🔮",
                related_page="/predict",
                sort_order=1,
            ),
            # ── 战略回顾会 ──
            KnowledgeArticle(
                title="战略回顾会最佳实践",
                summary="如何高效召开月度战略回顾会的实操指南",
                content="""### 战略回顾会最佳实践

**标准议程（60分钟）**：

| 序号 | 议程 | 时长 | 准备材料 |
|:---:|:----|:----|:---------|
| 1 | 战略地图状态检查 | 10min | 四层指标达标率 |
| 2 | TOP3偏差讨论 | 20min | 差异分析报告 |
| 3 | 改善行动确认 | 15min | 行动方案清单 |
| 4 | 资源调配决策 | 10min | 预算执行报告 |
| 5 | 会议结论 | 5min | 行动决议 |

**成功要素**：
- 会前：系统自动生成数据看板
- 会中：聚焦差异而非全面汇报
- 会后：结论写入改善行动计划

**管理会计OS**：自动拉取差异分析和预警数据，生成议程草稿""",
                category="practice",
                icon="📋",
                related_page="/maps-review",
                sort_order=1,
            ),
            # ── 预警中心 ──
            KnowledgeArticle(
                title="红黄绿灯预警机制详解",
                summary="预警规则、阈值设置和响应流程的完整说明",
                content="""### 红黄绿灯预警机制

**计算逻辑**：达成率 = 实际值 / 目标值 × 100%

| 达成率 | 颜色 | 含义 | 建议动作 |
|:------|:-----|:-----|:---------|
| ≥ 90% | 🟢 绿灯 | 正常 | 保持 |
| 70%-90% | 🟡 黄灯 | 预警 | 制定改善计划 |
| < 70% | 🔴 红灯 | 异常 | 立即行动 |

**阈值设置建议**：
- 正向指标（收入）：达成率越高越好
- 反向指标（成本）：超额越少越好
- 差异化设定：根据历史数据调整阈值""",
                category="term",
                icon="⚠️",
                related_page="/alerts",
                sort_order=1,
            ),
        ]

        session.add_all(articles)
        session.commit()
        logger.info(f"已播种 {len(articles)} 条知识库文章")

    except Exception as e:
        session.rollback()
        logger.error(f"知识库文章播种失败: {e}")
        raise
    finally:
        session.close()


if __name__ == "__main__":
    seed_knowledge_articles()
