feat: P0/P1/P2全部功能 — 四层泳道/视角切换/KPI看板/预警/差异反打/预算/知识面板/回顾会/情景预测/Excel导入/角色权限

This commit is contained in:
Hermes CI Fix
2026-07-12 17:46:08 +08:00
parent cdf00efd69
commit ee25d5fa1d
8871 changed files with 1778433 additions and 0 deletions
+207
View File
@@ -0,0 +1,207 @@
"""播种知识库文章(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()