绩效打分系统_详细设计文档.md 26 KB

绩效打分系统详细设计文档

版本:V1.0 | 日期:2026-04-13 | 编制:AI 助理


一、设计背景与目标

1.1 项目背景

公司已有一套 OA 系统,现基于 OA 低码平台开发绩效管理模块,打通现有员工、部门、岗位、上下级关系数据,不独立维护。

1.2 设计目标

  • 统一指标管理:所有考核指标集中维护,支持分组管理
  • 岗位指标卡:不同岗位绑定不同指标组合与权重
  • 自动化考核:每月固定时间自动生成考核任务
  • 四段式流程:自评 → 上级考评 → 确认/申诉 → HR处理 → 关闭
  • HR 兜底:申诉由 HR 介入处理,保证公正性

二、数据模型设计

2.1 数据架构说明

OA 系统(复用)          绩效系统(新建)
─────────────────────────────────────────
sys_dept          ←      [复用,无需新建]
sys_user          ←      [复用,无需新建]
sys_position      ←      [复用,无需新建]
sys_user_position ←     [复用,无需新建](含上下级关系)
─────────────────────────────────────────
kpi_indicator              [新建]  指标表
kpi_indicator_group        [新建]  指标分组表
kpi_position_template      [新建]  岗位指标卡模板
kpi_task                   [新建]  考核任务主表
kpi_task_detail            [新建]  考核任务明细表
kpi_task_log               [新建]  流程日志表
kpi_appeal                 [新建]  申诉表
kpi_schedule_config        [新建]  定时任务配置表

2.2 指标相关表

2.2.1 指标分组表 kpi_indicator_group

用于对指标进行分类,如"工作态度"、"业务能力"、"管理能力"等。

字段 字段名 类型 说明
id 主键 BIGINT 主键
group_name 分组名称 VARCHAR(50) 如"工作态度"、"业务能力"
group_code 分组编码 VARCHAR(20) 唯一编码
sort_order 排序号 INT 越大越靠前
parent_id 父分组ID BIGINT 顶级为0,支持二级分组
remark 备注 VARCHAR(200)
status 状态 TINYINT 1=启用 0=停用
create_by 创建人 VARCHAR(64)
create_time 创建时间 DATETIME

2.2.2 指标表 kpi_indicator

存放具体考核指标,如"工作质量"、"沟通协作"、"考勤表现"等。

字段 字段名 类型 说明
id 主键 BIGINT 主键
indicator_name 指标名称 VARCHAR(100) 如"工作质量"
indicator_code 指标编码 VARCHAR(30) 唯一编码
group_id 所属分组ID BIGINT 关联 kpi_indicator_group.id
description 指标说明 VARCHAR(500) 考核标准描述
max_score 满分值 DECIMAL(5,1) 默认100,可调整
status 状态 TINYINT 1=启用 0=停用
create_by 创建人 VARCHAR(64)
create_time 创建时间 DATETIME

2.3 岗位指标卡相关表

2.3.1 岗位指标卡模板表 kpi_position_template

某岗位对应一套指标组合及权重,权重总和须为100%。

主表:

字段 字段名 类型 说明
id 主键 BIGINT 主键
template_name 模板名称 VARCHAR(100) 如"客服专员绩效模板"
position_id 绑定岗位ID BIGINT 关联 OA 的 sys_position.id
position_name 岗位名称 VARCHAR(50) 冗余字段,方便展示
cycle_type 考核周期 VARCHAR(20) monthly/quarterly/annual
status 状态 TINYINT 1=启用 0=停用
create_by 创建人 VARCHAR(64)
create_time 创建时间 DATETIME

明细表:

字段 字段名 类型 说明
id 主键 BIGINT 主键
template_id 模板ID BIGINT 关联 kpi_position_template.id
indicator_id 指标ID BIGINT 关联 kpi_indicator.id
indicator_name 指标名称 VARCHAR(100) 冗余展示
weight 权重 DECIMAL(5,2) 如 20.00 表示20%
sort_order 排序号 INT

⚠️ 约束:同一 template_id 下,weight 总和必须 = 100.00。OA低码平台可在保存时做前端校验。


2.4 考核任务相关表

2.4.1 考核任务主表 kpi_task

每次考核周期生成一条任务记录,贯穿整个考核生命周期。

字段 字段名 类型 说明
id 主键 BIGINT 主键
task_no 任务编号 VARCHAR(30) 格式:KPI-202604-001
cycle_year 考核年份 INT 如 2026
cycle_month 考核月份 INT 如 4
evaluatee_id 被考核人ID BIGINT 关联 OA sys_user.id
evaluatee_name 被考核人姓名 VARCHAR(50) 冗余
evaluator_id 考核人ID(直接上级) BIGINT 关联 OA sys_user.id
evaluator_name 考核人姓名 VARCHAR(50) 冗余
template_id 使用的模板ID BIGINT 关联 kpi_position_template.id
status 当前状态 VARCHAR(20) 见状态流转说明
self_score 自评总分 DECIMAL(5,1) 提交后写入
self_comment 自评备注 VARCHAR(500)
self_submit_time 自评提交时间 DATETIME
manager_score 上级评分总分 DECIMAL(5,1) 上级提交后写入
manager_comment 上级评语 VARCHAR(500)
manager_submit_time 上级提交时间 DATETIME
confirm_status 确认状态 VARCHAR(20) pending/confirmed/objection
confirm_time 确认时间 DATETIME
final_score 最终得分 DECIMAL(5,1) HR确认后写入
appeal_id 关联申诉ID BIGINT 关联 kpi_appeal.id,无则为NULL
close_time 关闭时间 DATETIME
remark 备注 VARCHAR(500)
create_by 创建人 VARCHAR(64)
create_time 创建时间 DATETIME

status 状态流转:

pending_self    → 待自评
pending_manager  → 待上级考评
pending_confirm  → 待被考核人确认
appealing        → 申诉中(HR处理中)
closed           → 已关闭(正常确认或申诉处理完成)

confirm_status 确认状态:

pending   → 待确认
confirmed → 已确认(无异议)
objection → 有异议(已发起申诉)

2.4.2 考核任务明细表 kpi_task_detail

考核任务中每个指标的具体得分记录。

字段 字段名 类型 说明
id 主键 BIGINT 主键
task_id 任务ID BIGINT 关联 kpi_task.id
indicator_id 指标ID BIGINT 关联 kpi_indicator.id
indicator_name 指标名称 VARCHAR(100) 冗余
indicator_group 所属分组 VARCHAR(50) 冗余,方便显示
weight 权重 DECIMAL(5,2) 20.00 表示20%
self_score 自评分 DECIMAL(5,1) 被考核人填写
self_score_weighted 自评加权分 DECIMAL(6,2) self_score × weight / 100
manager_score 上级评分 DECIMAL(5,1) 上级填写
manager_score_weighted 上级加权分 DECIMAL(6,2) manager_score × weight / 100
final_score 最终得分 DECIMAL(5,1) HR确认后写入
sort_order 排序号 INT

2.4.3 流程日志表 kpi_task_log

记录每个考核任务的完整操作轨迹。

字段 字段名 类型 说明
id 主键 BIGINT 主键
task_id 任务ID BIGINT 关联 kpi_task.id
operate_type 操作类型 VARCHAR(20) submit_self/manager_confirm/appeal/submit_final等
operator_id 操作人ID BIGINT 关联 sys_user.id
operator_name 操作人 VARCHAR(50)
operator_role 操作人角色 VARCHAR(20) employee/manager/hr
before_status 操作前状态 VARCHAR(20)
after_status 操作后状态 VARCHAR(20)
content 操作说明 VARCHAR(500)
create_time 操作时间 DATETIME

2.5 申诉相关表

2.5.1 申诉表 kpi_appeal

字段 字段名 类型 说明
id 主键 BIGINT 主键
appeal_no 申诉编号 VARCHAR(30) 格式:APL-202604-001
task_id 关联考核任务ID BIGINT 关联 kpi_task.id
appeal_type 申诉类型 VARCHAR(20) score(分数)/ process(流程)
appeal_reason 申诉原因 VARCHAR(500)
appeal_evidence 补充材料 VARCHAR(200) 附件路径或链接
handler_id 处理人HR BIGINT 关联 sys_user.id
handle_result 处理结果 VARCHAR(500)
adjust_score 调整后最终分 DECIMAL(5,1) HR填写
handle_status 处理状态 VARCHAR(20) pending/processing/closed
handle_time 处理时间 DATETIME
create_by 申诉人 VARCHAR(64) 冗余
create_time 申诉时间 DATETIME

2.6 系统配置表

2.6.1 定时任务配置表 kpi_schedule_config

配置每月自动生成考核任务的规则。

字段 字段名 类型 说明
id 主键 BIGINT
config_key 配置项编码 VARCHAR(50) 如 auto_generate_day / auto_generate_hour
config_value 配置值 VARCHAR(100) 如 2 / 09:00
description 配置说明 VARCHAR(200)
status 状态 TINYINT 1=启用 0=停用
update_by 更新人 VARCHAR(64)
update_time 更新时间 DATETIME

三、模块功能设计

3.1 模块总览

模块 功能 涉及角色
指标管理 指标分组、指标的增删改查 HR/管理员
岗位指标卡 岗位绑定指标模板,权重配置 HR/管理员
考核任务 任务列表、详情查看 全体员工
自评 自评打分与提交 全体员工
上级考评 查看自评、上级打分与提交 管理者
确认与申诉 确认结果或发起申诉 全体员工
HR申诉处理 查看申诉、处理、填写最终分 HR
定时任务配置 配置自动生成规则 管理员
统计报表 按月/部门/岗位查看得分 管理者/HR

3.2 指标管理模块

3.2.1 指标分组管理

功能描述: 按类别管理考核指标分组(如"工作态度"、"业务能力"、"管理能力")。

表单字段:

  • 分组名称(必填,最大50字)
  • 分组编码(必填,英文/数字唯一)
  • 父分组(下拉选择,顶级为空)
  • 排序号(整数,越大越靠前)
  • 状态(启用/停用)
  • 备注

列表页字段: 分组名称 | 分组编码 | 上级分组 | 指标数量 | 排序 | 状态 | 操作(编辑/删除/停用)

3.2.2 指标管理

功能描述: 维护具体考核指标。

表单字段:

  • 指标名称(必填)
  • 指标编码(必填,唯一)
  • 所属分组(下拉,必选)
  • 指标说明(考核标准描述,最大500字)
  • 满分值(默认100,可调整)
  • 状态

列表页字段: 指标名称 | 指标编码 | 所属分组 | 满分值 | 状态 | 操作


3.3 岗位指标卡模块

3.3.1 模板管理

功能描述: 将岗位与指标组合绑定,配置权重。

表单字段:

  • 模板名称(必填)
  • 绑定岗位(下拉,从OA的sys_position读取)
  • 考核周期(月度/季度/年度)
  • 状态

指标配置(明细行): | 指标 | 所属分组(只读)| 权重(%)| 操作 | |------|------|------|------|

  • 指标从 kpi_indicator 下拉选择
  • 选择后自动带出分组名称
  • 权重由人工填写
  • 前端校验:所有权重总和必须=100%,否则不允许保存
  • 可动态增删行

列表页字段: 模板名称 | 岗位名称 | 考核周期 | 指标数量 | 状态 | 操作


3.4 自动任务生成模块

3.4.1 定时任务配置

功能描述: 由 OA 平台定时器触发,每月自动生成考核任务。

配置项(存于 kpi_schedule_config):

  • 自动生成日:每月 N 号(默认 2)
  • 生成时间:如 09:00
  • 是否启用:开关

自动任务触发逻辑(OA低码脚本):

触发时机:每月2日 09:00(OA定时器)
执 行 步 骤:
  1. 读取 kpi_schedule_config,确认是否启用
  2. 获取上一个自然月的年月(如 2026年3月)
  3. 查询 sys_user_position,获取所有在职员工及其上级
  4. 对每个员工:
     a. 查找其岗位对应的 kpi_position_template(status=1)
     b. 若找到模板,则在 kpi_task 中插入记录(status=pending_self)
     c. 同时在 kpi_task_detail 中插入该模板下的所有指标行
  5. 记录执行日志

OA低码平台实现建议:

  • 建议使用 OA 的「定时触发器」或「Webhook + 外部脚本」
  • 也可在 OA 表单中手动增加"生成考核任务"按钮,由管理员触发

3.5 自评模块

3.5.1 待自评列表

入口: 员工工作台 → 我的考核

列表页字段: 考核月份 | 被考核人 | 考核人 | 状态 | 操作

列表默认显示当前用户 evaluatee_id = 当前登录人 的任务

状态筛选: 全部 / 待自评 / 待上级考评 / 待确认 / 申诉中 / 已结束

3.5.2 自评表单

触发条件: status = pending_self 时可填写

页面布局:

┌─────────────────────────────────────────┐
│ 考核月份:2026年3月                       │
│ 被考核人:张三(客服专员)                  │
│ 考核人:李四(客服主管)                   │
├─────────────────────────────────────────┤
│ 考核指标                                 │
├────┬──────┬──────┬──────┬──────┬───────┤
│ #  │ 分组  │ 指标  │ 权重  │ 满分  │ 自评分 │
├────┼──────┼──────┼──────┼──────┼───────┤
│ 1  │工作态度│ 考勤  │ 20%  │ 100  │ [  ]  │
│ 2  │工作态度│ 协作  │ 20%  │ 100  │ [  ]  │
│ 3  │业务能力│ 业务  │ 40%  │ 100  │ [  ]  │
│ 4  │业务能力│ 质量  │ 20%  │ 100  │ [  ]  │
├────┴──────┴──────┴──────┴──────┴───────┤
│ 自评备注:[                          ]   │
├─────────────────────────────────────────┤
│ [保存草稿]              [提交自评]        │
└─────────────────────────────────────────┘

功能说明:

  • 必填项:每个指标的自评分(0~满分)
  • 可保存草稿(不校验所有必填)
  • 提交自评时校验:所有指标分数均已填写
  • 提交后:更新 kpi_task.status → pending_manager
  • 提交后:插入 kpi_task_log(submit_self)
  • 提交后:发送 OA 消息通知考核人(上级)

3.6 上级考评模块

3.6.1 待考评列表

入口: 管理者工作台 → 考核管理 → 待考评

列表页字段: 考核月份 | 被考核人 | 岗位 | 状态 | 操作

列表显示 evaluator_id = 当前登录人的任务

列表字段说明:

  • 状态:待自评(显示等待中)/ 待考评 / 已完成

3.6.2 上级考评表单

触发条件: status = pending_manager 时可填写

页面布局:

┌─────────────────────────────────────────┐
│ 考核月份:2026年3月                       │
│ 被考核人:张三(客服专员)                  │
│ 考核人:李四(客服主管)[当前登录人]         │
├─────────────────────────────────────────┤
│ 【自评参考】                             │
├────┬──────┬──────┬──────┬──────┬───────┤
│ #  │ 分组  │ 指标  │ 权重  │ 自评分 │ 上级评分│
├────┼──────┼──────┼──────┼──────┼───────┤
│ 1  │工作态度│ 考勤  │ 20%  │  85   │ [  ]  │
│ 2  │工作态度│ 协作  │ 20%  │  90   │ [  ]  │
│ 3  │业务能力│ 业务  │ 40%  │  88   │ [  ]  │
│ 4  │业务能力│ 质量  │ 20%  │  92   │ [  ]  │
├────┴──────┴──────┴──────┴──────┴───────┤
│ 指标总分:      --  加权总分:--           │
│ 上级评语:[                          ]   │
├─────────────────────────────────────────┤
│ [保存草稿]              [提交考评]         │
└─────────────────────────────────────────┘

功能说明:

  • 左侧显示被考核人自评分(仅供参照,不可编辑)
  • 右侧填写上级评分
  • 上级可参考自评分,与自评分差异过大时需填写评语
  • 提交后:更新 kpi_task.manager_score,更新 status → pending_confirm
  • 提交后:插入 kpi_task_log(manager_submit)
  • 提交后:发送 OA 消息通知被考核人(确认)

3.7 确认与申诉模块

3.7.1 待确认列表

入口: 员工工作台 → 我的考核

触发条件: status = pending_confirm 时

确认页面:

┌─────────────────────────────────────────┐
│ 考核月份:2026年3月                       │
│ 上级评分总分:88.0分                      │
├─────────────────────────────────────────┤
│ 考核指标明细                             │
├────┬──────┬──────┬──────┬──────┬───────┤
│ #  │ 指标  │ 权重  │ 自评分 │ 上级评分│ 得分   │
├────┼──────┼──────┼──────┼──────┼───────┤
│ 1  │ 考勤  │ 20%  │  85   │  80   │  16.0  │
│ 2  │ 协作  │ 20%  │  90   │  88   │  17.6  │
│ 3  │ 业务  │ 40%  │  88   │  92   │  36.8  │
│ 4  │ 质量  │ 20%  │  92   │  90   │  18.0  │
├────┴──────┴──────┴──────┴──────┴───────┤
│ 上级评语:表现良好,工作细致                │
├─────────────────────────────────────────┤
│   [ 确认结果 ]      [ 有异议,申请申诉 ]    │
└─────────────────────────────────────────┘

3.7.2 确认功能

确认后:

  • 更新 kpi_task.confirm_status → confirmed
  • 更新 kpi_task.status → closed
  • 更新 kpi_task.final_score = manager_score(取上级评分)
  • 插入 kpi_task_log(employee_confirmed)
  • 流程结束

3.7.3 申诉功能

点击"有异议,申请申诉"后:

┌─────────────────────────────────────────┐
│ 申诉类型:○ 分数异议  ○ 流程异议          │
│ 申诉原因:[                          ]   │
│ 补充材料:  [上传附件]                   │
├─────────────────────────────────────────┤
│ [取消]              [提交申诉]            │
└─────────────────────────────────────────┘

提交后:

  • 在 kpi_appeal 中新增记录(handle_status=pending)
  • 更新 kpi_task.confirm_status → objection
  • 更新 kpi_task.status → appealing
  • 插入 kpi_task_log(employee_appeal)
  • 发送 OA 消息通知 HR(待处理申诉列表)

3.8 HR 申诉处理模块

3.8.1 待处理申诉列表

入口: HR工作台 → 绩效管理 → 申诉处理

列表页字段: 申诉编号 | 考核月份 | 申诉人 | 被考核人 | 申诉类型 | 申诉时间 | 处理状态 | 操作

3.8.2 申诉处理表单

HR操作:

┌─────────────────────────────────────────┐
│ 申诉编号:APL-202604-001                │
│ 申诉人:张三    申诉时间:2026-04-03      │
│ 申诉类型:分数异议                       │
│ 申诉原因:业务能力项评分过低……             │
│ 附件:[查看]                            │
├─────────────────────────────────────────┤
│ 【考核记录】                             │
│ 指标    │ 权重 │ 自评分 │ 上级评分        │
│ 考勤    │ 20%  │  85    │  80           │
│ 协作    │ 20%  │  90    │  88           │
│ 业务    │ 40%  │  88    │  70[红色]      │
│ 质量    │ 20%  │  92    │  90           │
├─────────────────────────────────────────┤
│ 处理意见:[                          ]   │
│ 最终得分调整:[  ](不调整则留空)         │
├─────────────────────────────────────────┤
│ [驳回申诉]          [确认申诉,调整分数]   │
└─────────────────────────────────────────┘

处理结果:

驳回时:

  • 更新 kpi_appeal.handle_status = closed,handle_result = 驳回原因
  • 更新 kpi_task.status = closed(申诉驳回后流程仍关闭)
  • 更新 kpi_task.final_score = manager_score
  • 插入 kpi_task_log(hr_rejected)
  • 发送 OA 消息通知被考核人

确认调整时:

  • 更新 kpi_appeal.handle_status = closed,adjust_score 写入最终分
  • 更新 kpi_task.final_score = adjust_score
  • 更新 kpi_task.status = closed
  • 插入 kpi_task_log(hr_adjusted)

3.9 统计报表模块

3.9.1 个人考核记录

入口: 员工工作台 → 考核记录

页面: 列表展示个人历史各月考核结果,含状态(正常/申诉已调整)

3.9.2 部门考核汇总

入口: 管理者/HR → 统计报表 → 部门汇总

字段: | 员工姓名 | 岗位 | 上级 | 考核月份 | 考核得分 | 状态 | 操作 |

支持筛选: 年月、部门、岗位

3.9.3 导出功能

支持导出 Excel:

  • 按月导出全公司考核结果
  • 按部门导出
  • 导出字段:员工姓名、岗位、部门、上级姓名、各指标得分、总分、状态

四、权限设计

角色 可操作模块
全体员工 自评填写、考核确认/申诉、查看个人考核记录
管理者 上级考评、管理下级考核记录、查看部门汇总
HR 全模块:指标管理、岗位指标卡、申诉处理、全部统计
系统管理员 定时任务配置、岗位指标卡配置

权限建议复用 OA 的角色体系,通过 OA 的权限控制实现。


五、消息通知设计

触发时机 通知对象 通知内容
考核任务自动生成后 被考核人 您有一项新的考核任务(2026年3月)待自评
自评提交后 考核人(上级) 员工张三已提交自评,请尽快完成上级考评
上级考评提交后 被考核人 您的考核已完成上级考评,请确认结果
申诉提交后 HR 收到一条绩效申诉(张三-2026年3月),请及时处理
申诉处理完成 被考核人 您的申诉已处理,结果为:[通过/驳回]

通知渠道:建议复用 OA 内部消息系统。


六、OA 低码平台实施建议

6.1 数据源配置

在 OA 低码平台新建以下数据模型(对应上文章节二中的表):

  1. 绩效_指标分组 — 对应 kpi_indicator_group
  2. 绩效_指标 — 对应 kpi_indicator
  3. 绩效_岗位指标卡 — 对应 kpi_position_template + 明细
  4. 绩效_考核任务 — 对应 kpi_task
  5. 绩效_考核明细 — 对应 kpi_task_detail
  6. 绩效_流程日志 — 对应 kpi_task_log
  7. 绩效_申诉 — 对应 kpi_appeal
  8. 绩效_配置 — 对应 kpi_schedule_config

6.2 表单与流程配置

功能 建议实现方式
指标/模板配置 使用 OA 表单设计器,新建配置型表单
自评/上级考评/确认/申诉 使用 OA 流程引擎,配置审批流程
统计报表 使用 OA 报表/统计图表组件
定时任务 使用 OA 定时触发器 或 外部脚本调用 OA API

6.3 外部脚本(定时任务)

若 OA 低码平台不支持复杂定时逻辑,建议写一个外部脚本(如 Python),由服务器定时触发(crontab/Windows计划任务),调用 OA 的开放 API 生成考核任务。


七、里程碑计划建议

阶段 内容 优先级
Phase 1 指标管理 + 岗位指标卡(基础配置)
Phase 2 自评 + 上级考评 + 确认(四段式流程)
Phase 3 申诉 + HR处理
Phase 4 定时任务自动生成
Phase 5 统计报表 + 导出

文档结束。如需进一步拆解为 OA 低码平台的具体表单配置步骤SQL建表语句,请告知。