Files
ReporterStationManagementSy…/pmdocs/changes/2026-08-01-001-V0.2考核规则配置.md
T
2026-08-01 23:09:49 +08:00

111 lines
5.4 KiB
Markdown
Raw 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.
// 考核规则数据模型设计
// 基于当前已有表结构(work_records, audit_logs, people, stations)和业务逻辑推导
## 一、设计背景
V0.1 工作记录审核流程中,每条记录由分站初审(station_review)、总部终审(headquarters_review)后归档(archived),分数由审核人手动给定。
V0.2 需要将分数评定从"手动输入"改为"规则驱动":总部配置考核规则(指标项、权重、上限下限),系统根据规则自动计算得分。
## 二、核心实体
### 2.1 考核规则(rules
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INTEGER PK | 自增 ID |
| code | TEXT UNIQUE | 规则编码,如 `RULE_2026_01` |
| name | TEXT NOT NULL | 规则名称,如"2026年第三季度考核规则" |
| description | TEXT | 规则说明 |
| period_type | TEXT NOT NULL | 考核周期类型:`monthly` / `quarterly` / `annual` |
| period_start | TEXT | 规则生效开始日期(YYYY-MM-DD |
| period_end | TEXT | 规则生效结束日期(YYYY-MM-DD |
| status | TEXT NOT NULL | 规则状态:`draft` / `active` / `archived` |
| created_by | TEXT | 创建人姓名 |
| created_at | TEXT | 创建时间 |
| updated_at | TEXT | 更新时间 |
### 2.2 考核指标项(rule_items
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INTEGER PK | 自增 ID |
| rule_id | INTEGER FK | 所属规则 ID |
| category | TEXT NOT NULL | 指标类别:`quality`(质量)/ `quantity`(数量)/ `efficiency`(时效)/ `compliance`(合规) |
| name | TEXT NOT NULL | 指标名称,如"原创报道数量" |
| metric_key | TEXT NOT NULL | 指标计算字段(映射到 work_records 的字段或聚合方式) |
| weight | REAL NOT NULL | 权重(0~1,所有 rule_item 权重之和应为 1 |
| min_score | REAL DEFAULT 0 | 最低分 |
| max_score | REAL DEFAULT 100 | 最高分 |
| formula_type | TEXT NOT NULL | 计算方式:`count`(计数)/ `rate`(比率)/ `avg_score`(均分)/ `custom`(自定义公式) |
| formula_params | TEXT | JSON,公式参数,如 `{"threshold": 10, "above_bonus": 5}` |
| display_order | INTEGER DEFAULT 0 | 显示顺序 |
| created_at | TEXT | 创建时间 |
### 2.3 评分结果(scores
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INTEGER PK | 自增 ID |
| code | TEXT UNIQUE | 评分编码,如 `SCORE_2026Q1_BJ_001` |
| rule_id | INTEGER FK | 使用的规则 ID |
| record_id | TEXT FK | 工作记录 ID |
| reporter | TEXT NOT NULL | 记者姓名 |
| station | TEXT NOT NULL | 站点名称 |
| period | TEXT NOT NULL | 考核周期标识,如 `2026-Q1` |
| total_score | REAL | 总分 |
| quality_score | REAL | 质量维度得分 |
| quantity_score | REAL | 数量维度得分 |
| efficiency_score | REAL | 时效维度得分 |
| compliance_score | REAL | 合规维度得分 |
| item_details | TEXT | JSON,每项指标的详细得分 |
| computed_at | TEXT | 计算时间 |
| created_at | TEXT | 创建时间 |
## 三、评分计算流程
1. **规则激活**:总部在后台发布规则,`rules.status = 'active'`,设置 `period_start` / `period_end`
2. **触发评分**:工作记录从 `returned` 重新提交后,或在考核周期结束时批量计算。
3. **指标聚合**:对指定记者、站点、周期内的所有 `archived` 状态记录,按 `rule_items.metric_key` 聚合。
4. **加权求和**\(\text{total} = \sum_i \text{weight}_i \times \text{score}_i\)
5. **结果记录**:写入 `scores` 表,同时更新 `work_records.score` 字段。
## 四、API 接口规划
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/rules | 查询规则列表 |
| GET | /api/rules/:id | 查询规则详情(含指标项) |
| POST | /api/rules | 创建规则(含指标项) |
| PATCH | /api/rules/:id | 更新规则 |
| POST | /api/rules/:id/activate | 激活规则 |
| GET | /api/scores | 查询评分结果(按记者/站点/周期筛选) |
| GET | /api/scores/:id | 评分详情 |
| POST | /api/scores/compute | 触发评分计算 |
## 五、Migration 规划
- `migrations/007_create_rules.sql``rules``rule_items`
- `migrations/008_create_scores.sql``scores`
- `migrations/009_seed_default_rules.sql` — 插入默认考核指标模板
## 六、前端配置界面
总部角色可访问"考核规则管理"页面:
- 规则列表:显示规则名称、周期类型、状态、发布时间
- 规则编辑器:拖拽排序指标项,设置权重滑块,预览计算结果
- 规则试算:用历史数据模拟评分,预估变化幅度
## 七、待确认事项
- [x] 考核周期如何定义:按日历季度,还是自定义起止日期?
**日历季度 + 自定义起止日期两种都支持**`period_type` 字段:`monthly` / `quarterly` / `annual` / `custom`
- [x] 指标计算字段(`metric_key`)具体映射到哪些 `work_records` 字段?
→ 见下表:
- 数量:`COUNT(*)` 按 reporter+station+period 聚合
- 质量:`AVG(score)``work_records``audit_logs` 聚合
- 时效:`occurred_date``created_at` 差值判断
- 合规:`status = 'archived'` 占比
- [x] 规则激活后,历史已评分记录是否重新计算?
**不自动重算**。已归档记录保留原分;新增记录使用激活规则;提供手动重算入口
- [x] 是否支持规则版本管理(每次修改生成新版本)?
**编辑生成新版本**。旧版本状态变为 `archived`,新版本为 `draft`;已有 `scores` 记录绑定旧规则版本,不受影响