Files
cma-management/docs/req-kpi-target-multi-granularity.md
Hermes CI Fix dd53212bcc feat: KPI多粒度目标值补提交 — dashboard API + 前端3视图(目标值月/季/年)
已上线未提交的历史功能(2026-08-17): kpi_target_by_frequency + target_monthly/quarterly/yearly 字段透传
2026-08-20 06:57:13 +08:00

156 lines
5.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# KPI目标值多粒度改造(月/季/年分离)
> 需求提出:2026-08-17 | 提出人:任总(工作台使用中发现混淆)
> 文档版本:v1.0 | 状态:待评审
> 类型:后端改表 + 前端改造 + 数据清洗
## 一、问题描述
### 用户故事
作为CMA系统的操作人员,我在工作台看到"目标 1200"时,**无法判断这个目标是月度、季度还是年度**;当我点击进入KPI详情调整目标值时,**不知道该改的是月目标、季目标还是年目标**——系统只有一个单值 target_value,三个周期的目标混在一起,必然造成操作混淆。
### 现状痛点
```
① KPI定义的frequency字段:monthly 63个 / quarterly 11个 / weekly 2个 / half_year 10个
→ 定义了"考核频率",但target_value是单值,没说清对应哪个周期
② target_value单值无法表达多周期目标:
同一KPI(如F_REVENUE营收):
frequency=quarterly(季度考核)
target_value=1200(单值)
kpi_values.period=2026.06(月度数据!)
→ 1200到底是月目标?季目标?年度目标?三个信息互相矛盾
③ period格式混乱:
2026.06 / 2025.1(缺零)/ 2026H1 / 2026-06 / 2021(年)
→ 前端排序、环比计算、图表展示不可靠
```
### 核心矛盾
```
考核频率(月/季/年)× 目标值(单值)× 实际数据周期(混合格式)
三者不对齐 = 数据粒度不匹配 = 使用者必然混淆
```
## 二、解决方案
### 方案总览:目标值分级 + period格式化
```
① 数据库:kpi_definitions 增加三列
target_monthly / target_quarterly / target_yearly
② 数据迁移:现有target_value按frequency归入对应列
③ 前端显示:按frequency显示对应目标值 + 周期标签
④ period格式统一:kpi_values.period 标准化为 YYYY-MM / YYYY-Qn / YYYY
```
## 三、功能列表
### 后端(backend
- [ ] 1. `kpi_definitions` 表加3列(target_monthly / target_quarterly / target_yearlydecimal(15,2) 可空)
- [ ] 2. 数据迁移脚本:`UPDATE ... SET target_monthly=target_value WHERE frequency='monthly'`quarterly/yearly同理);weekly/half_year归入最接近周期(weekly→monthlyhalf_year→quarterly)并记录
- [ ] 3. API改造:KPI详情/列表接口返回 `target_monthly``target_quarterly``target_yearly` + `frequency`
- [ ] 4. 前端保存KPI时,按frequency写入对应目标列(如frequency=monthly则写target_monthly
- [ ] 5. 新增period标准化工具脚本(清洗历史数据)
### 前端(frontend
- [ ] 6. 工作台KPI卡:目标值旁显示周期标签"目标(月)"/"目标(季)"/"目标(年)"
- [ ] 7. KPI详情页"目标值"编辑:显示当前frequency对应的目标字段,明确标注周期
- [ ] 8. 历史数据tabperiod统一展示格式(YYYY-MM
### 数据(data
- [ ] 9. 清洗kpi_values.period历史数据(2025.1→2025-012026H1→2026-H1,等)
## 四、数据流
```
展示流:
工作台/详情页 GET /kpis/:id
→ 返回 kpi + target_monthly/quarterly/yearly + frequency
→ 前端按frequency取对应目标值
→ 显示"目标(月): 18%" 或 "目标(季): 1200"
编辑流:
用户在详情页改目标值
→ 前端按frequency路由到对应字段(monthly→target_monthly
→ PUT /kpis/:id { target_monthly: 20 }
→ 后端只更新该列,其他周期目标不受影响
```
## 五、界面设计
### 工作台KPI卡(改动)
```
┌─────────────────────────────────┐
│ 毛利率 [达标] │
│ 18.5% 目标(月): 18% │ ← 加频率标签
│ ████████████░░░░░ │
└─────────────────────────────────┘
```
### KPI详情页-基本信息(改动)
```
目标值(月度): [ 18 ] % ← frequency=monthly时显示这个
目标值(季度): [ ] ← 季度目标可另行填写
目标值(年度): [ ] ← 年度目标可另行填写
```
## 六、验收标准
1. 工作台KPI卡显示带周期标签的目标值(如"目标(月): 18%"
2. 月度KPI改目标只改target_monthly,季度/年度目标不受影响
3. frequency=quarterly的KPI(如F_REVENUE)工作台显示季度目标
4. kpi_values.period全部为标准格式(无2025.1、2026H1等异常格式)
5. 数据迁移后:原monthly的target_value已迁入target_monthly,无丢失
6. 一致性检查通过(consistency-check不报新错误)
## 七、工作量评估
| 项 | 内容 | 人天 |
|:--|:----|:---:|
| 后端 | 加列+迁移脚本+API改造 | 0.5 |
| 前端 | 工作台标签+详情页多周期目标 | 0.5 |
| 数据 | period清洗脚本+执行 | 0.3 |
| 测试 | 验收用例(多frequency验证) | 0.2 |
| **合计** | | **1.5天** |
## 八、关联模块
- 工作台(MyDashboard.vue)—— KPI卡显示
- KPI详情页(KPIDetail.vue)—— 目标值编辑
- KPI字典列表(KPIList.vue)—— 列表目标值列
- kpis.py API —— 目标值读写
- dashboard.py API —— my-dashboard返回
- 与"科目≠KPI"规范(kpi-account-governance-rule.md)配套:本需求解决"时间粒度",前者解决"类型混用"
## 九、风险与注意
```
⚠️ 迁移不可逆:先备份kpi_definitions表(参考2026-08-17备份流程)
⚠️ weekly/half_year归并需人工确认映射规则
⚠️ period清洗会影响历史报表展示,需回归测试
⚠️ 前端所有"目标值"引用点需全局搜索(不止工作台和详情页)
```
## 十、执行分工建议
```
方案评审:研学(已分析)
需求文档:研学(本文档)
开发实施:项目Bot或全栈Bot(按此文档)
数据迁移:开发时一起做(备份先行)
验收:研学(按验收标准逐条验证,铁律七)
```