5.4 KiB
5.4 KiB
// 考核规则数据模型设计 // 基于当前已有表结构(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 | 创建时间 |
三、评分计算流程
- 规则激活:总部在后台发布规则,
rules.status = 'active',设置period_start/period_end。 - 触发评分:工作记录从
returned重新提交后,或在考核周期结束时批量计算。 - 指标聚合:对指定记者、站点、周期内的所有
archived状态记录,按rule_items.metric_key聚合。 - 加权求和:(\text{total} = \sum_i \text{weight}_i \times \text{score}_i)
- 结果记录:写入
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— 插入默认考核指标模板
六、前端配置界面
总部角色可访问"考核规则管理"页面:
- 规则列表:显示规则名称、周期类型、状态、发布时间
- 规则编辑器:拖拽排序指标项,设置权重滑块,预览计算结果
- 规则试算:用历史数据模拟评分,预估变化幅度
七、待确认事项
- 考核周期如何定义:按日历季度,还是自定义起止日期?
→ 日历季度 + 自定义起止日期两种都支持。
period_type字段:monthly/quarterly/annual/custom - 指标计算字段(
metric_key)具体映射到哪些work_records字段? → 见下表:- 数量:
COUNT(*)按 reporter+station+period 聚合 - 质量:
AVG(score)从work_records或audit_logs聚合 - 时效:
occurred_date与created_at差值判断 - 合规:
status = 'archived'占比
- 数量:
- 规则激活后,历史已评分记录是否重新计算? → 不自动重算。已归档记录保留原分;新增记录使用激活规则;提供手动重算入口
- 是否支持规则版本管理(每次修改生成新版本)?
→ 编辑生成新版本。旧版本状态变为
archived,新版本为draft;已有scores记录绑定旧规则版本,不受影响