初始提交:全国记者站管理系统

This commit is contained in:
selfrelease
2026-08-01 23:09:49 +08:00
commit 45fbba0308
96 changed files with 21514 additions and 0 deletions
@@ -0,0 +1,111 @@
// 考核规则数据模型设计
// 基于当前已有表结构(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` 记录绑定旧规则版本,不受影响