// 考核规则数据模型设计 // 基于当前已有表结构(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` 记录绑定旧规则版本,不受影响