Files
performance-evaluation-system/.kiro/specs/employee-performance-system/tasks.md
2026-04-11 11:51:54 +08:00

193 lines
9.5 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.

# 实施计划 - 员工月度绩效考核系统
## 概述
按照前后端分离架构,分阶段实施:先搭建后端基础设施和核心业务逻辑,再实现前端各角色页面,最后集成 AI 评分和统计分析功能。
## 任务
- [x] 1. 项目初始化与基础设施搭建
- 初始化后端 Node.js + TypeScript + Express 项目结构
- 初始化前端 React + TypeScript + Ant Design 项目结构
- 配置 MySQL 数据库连接(使用 mysql2 驱动)
- 创建数据库初始化脚本6张表的 DDL
- 配置环境变量(.envDB连接、JWT密钥、FastGPT API Key
- _Requirements: 9.1, 10.5_
- [x] 2. 用户认证模块
- [x] 2.1 实现用户登录接口 `/api/user/login`
- 查询用户表验证用户名、密码bcrypt 比对)和角色
- 生成 JWT token有效期 24 小时),返回 userInfo
- _Requirements: 1.1, 1.2_
- [x] 2.2 实现 JWT 认证中间件
- 验证请求头中的 token解析用户信息注入 req.user
- token 过期或无效时返回 401
- _Requirements: 1.4_
- [x] 2.3 实现角色权限中间件
- 根据路由配置允许的角色列表,验证当前用户角色
- 权限不足时返回 403
- _Requirements: 1.3, 1.5_
- [x] 2.4 编写认证模块属性测试
- **属性 1: 认证正确性** — 对任意凭据,认证结果与凭据有效性一致
- **属性 2: 权限隔离不变量** — 员工无法访问他人数据
- **Validates: Requirements 1.1, 1.2, 1.5**
- [x] 3. 数据库访问层DAO
- [x] 3.1 实现 UserDAO
- `findByUsername(username)`: 按用户名查询
- `findSubordinates(managerId)`: 查询下属列表
- _Requirements: 1.1, 4.1_
- [x] 3.2 实现 PerformanceDAO
- `upsert(data)`: 创建或更新绩效记录(支持暂存/提交)
- `findByUserAndMonth(userId, month)`: 查询指定月份绩效
- `findByManagerId(managerId, filters, page)`: 查询下属绩效列表
- `updateStatus(perfId, status)`: 更新绩效状态
- `updateReview(perfId, reviewData)`: 更新审核结果
- _Requirements: 2.5, 2.6, 4.1, 4.5, 9.1_
- [x] 3.3 实现 AIResultDAO
- `save(aiResult)`: 保存 AI 评分结果
- `findByPerfId(perfId)`: 查询绩效对应的 AI 结果
- _Requirements: 3.2, 3.3_
- [x] 4. 考勤分数计算与绩效等级模块
- [x] 4.1 实现考勤分数计算函数 `calculateAttendanceScore`
- 基础分 10 分,事假每天扣 5 分,迟到/缺卡每次扣 2 分,下限 0 分
- _Requirements: 11.1, 11.2, 11.3, 11.5_
- [x] 4.2 实现绩效等级与奖惩计算函数 `calculateLevelAndReward`
- 根据总分返回等级excellent/qualified/need_motivation/unqualified和奖惩说明
- _Requirements: 5.1, 5.2, 5.3, 5.4, 5.5_
- [x] 4.3 实现连续低分预警检测函数 `checkConsecutiveLowScore`
- 查询员工最近 N 个月记录,检测连续低于 60 分的情况
- _Requirements: 5.6, 5.7_
- [x] 4.4 编写计算模块属性测试
- **属性 5: 绩效等级与奖惩计算正确性** — 对任意分数,等级和奖惩符合规则
- **属性 6: 连续低分预警正确性** — 连续低分正确触发预警
- **属性 8: 考勤分数计算正确性** — 对任意考勤数据,分数计算正确且不低于 0
- **Validates: Requirements 5.1-5.7, 11.1-11.5**
- [x] 5. 检查点 — 确保所有测试通过,如有问题请告知
- [x] 6. 员工端绩效填报接口
- [x] 6.1 实现绩效提交接口 `/api/performance/submit`
- 支持 draft暂存和 submit提交两种状态
- 使用数据库事务同时写入 performance_month、perf_item、attendance 三张表
- 提交时触发异步 AI 评分(不阻塞响应)
- _Requirements: 2.1, 2.2, 2.3, 2.5, 2.6_
- [x] 6.2 实现个人绩效查询接口 `/api/performance/employee/get`
- 支持按月份筛选和分页
- 返回绩效记录含 AI 结果、考勤、审核意见
- _Requirements: 6.1, 6.2, 6.3, 6.4, 6.5_
- [x] 6.3 实现修改申请接口 `/api/performance/request-modification`
- 员工发起申请,记录申请原因,通知管理层
- _Requirements: 12.1, 12.2_
- [x] 6.4 编写员工端接口属性测试
- **属性 3: 草稿暂存往返一致性** — 暂存后读取数据一致
- **属性 4: 提交幂等性** — 同一用户同月不可重复提交
- **属性 7: 绩效记录查询完整性** — 提交后查询必能找到
- **Validates: Requirements 2.5, 2.6, 6.1**
- [x] 7. AI 评分模块
- [x] 7.1 实现 FastGPT 调用服务 `AIEvaluationService`
- 构建包含岗位、月份、填报内容、考核规则的 Prompt
- 调用 FastGPT API超时 10s
- _Requirements: 13.1, 13.2_
- [x] 7.2 实现 AI 响应解析函数 `parseAIResponse`
- 解析 JSON 格式响应,提取 ai_score_detail、ai_total_score、ai_problems、ai_suggestions
- 验证格式合法性,异常时记录原始响应并抛出错误
- _Requirements: 3.2, 3.3, 3.4, 13.3, 13.4_
- [x] 7.3 实现重试机制(最多 3 次)和错误降级处理
- _Requirements: 3.5_
- [x] 7.4 编写 AI 模块属性测试
- **属性 9: AI 响应 JSON 解析往返一致性** — 解析后序列化得到等价对象
- **属性 10: AI 输出格式约束** — problems 和 suggestions 数组长度在 3-5 之间
- **Validates: Requirements 3.3, 3.4, 3.6**
- [x] 8. 管理层审核接口
- [x] 8.1 实现下属绩效列表接口 `/api/performance/manager/list`
- 支持按月份、部门、员工姓名、状态筛选和分页
- _Requirements: 4.1, 7.1, 7.2_
- [x] 8.2 实现绩效审核接口 `/api/performance/manager/review`
- 更新各考核项管理层评分和说明
- 计算最终总分、等级、奖惩,归档绩效记录(状态改为 completed
- _Requirements: 4.3, 4.4, 4.5, 4.7_
- [x] 8.3 实现绩效驳回接口 `/api/performance/manager/reject`
- 记录驳回原因,状态改为 rejected
- _Requirements: 4.6_
- [x] 8.4 实现修改申请审批接口 `/api/performance/manager/approve-modification`
- 同意时解锁绩效记录,拒绝时通知员工
- _Requirements: 12.3, 12.4_
- [x] 9. 检查点 — 确保所有测试通过,如有问题请告知
- [x] 10. 统计分析与导出接口
- [x] 10.1 实现团队统计接口 `/api/statistics/team`
- 统计下属团队平均分、优秀/合格/需激励人数及占比
- _Requirements: 7.4, 7.5_
- [x] 10.2 实现全公司统计接口 `/api/statistics/company`
- 按部门、岗位、绩效等级多维度统计
- _Requirements: 8.1, 8.2_
- [x] 10.3 实现 Excel 导出接口 `/api/performance/export`
- 使用 exceljs 生成 Excel 文件,支持单员工历史和团队批量导出
- _Requirements: 7.3, 7.6, 8.4_
- [x] 11. 总经理端接口
- [x] 11.1 实现考核规则配置接口 `/api/config/rules`
- 支持修改考核指标权重、评分标准、奖惩金额
- 修改后记录操作日志,应用于后续考核周期
- _Requirements: 8.5, 8.6_
- [x] 12. 前端基础框架搭建
- [x] 12.1 配置 React Router定义三类角色的路由结构
- 员工路由:`/employee/*`,管理层路由:`/manager/*`,总经理路由:`/gm/*`
- _Requirements: 1.3_
- [x] 12.2 实现登录页面和 AuthContext
- 登录表单(用户名、密码、角色选择),登录成功后存储 token 跳转对应角色首页
- _Requirements: 1.1, 1.2_
- [x] 12.3 实现 Axios 请求拦截器
- 自动携带 token处理 401/403 响应(跳转登录页)
- _Requirements: 1.4_
- [x] 13. 员工端前端页面
- [x] 13.1 实现绩效填报页面 `PerformanceForm`
- 自动带出考核月份、员工基础信息
- 17 项考核指标逐项填写(完成情况描述 + 自评分 + 可选佐证上传)
- 考勤数据填写区域、工作汇总文本区域、暂存和提交按钮
- _Requirements: 2.1, 2.2, 2.3, 2.4, 2.5, 2.6_
- [x] 13.2 实现个人绩效历史页面 `PerformanceHistory`
- 绩效记录列表(含状态、总分、等级),月份筛选和分页
- 点击查看详情(含 AI 评分、AI 问题/建议、审核意见、奖惩说明)
- _Requirements: 6.1, 6.2, 6.3, 6.4, 6.5_
- [x] 14. 管理层端前端页面
- [x] 14.1 实现下属绩效列表页面 `SubordinateList`
- 列表展示员工绩效状态,筛选条件(月份、部门、姓名、状态)
- _Requirements: 4.1, 7.1, 7.2_
- [x] 14.2 实现绩效审核页面 `PerformanceReview`
- 展示员工填报内容、自评分、AI 评分及 AI 反馈
- 可调整各考核项分数并填写说明,提交审核通过或驳回
- _Requirements: 4.2, 4.3, 4.4, 4.5, 4.6_
- [x] 14.3 实现团队统计页面 `TeamStatistics`
- 显示团队平均分、各等级人数及占比Excel 导出按钮
- _Requirements: 7.3, 7.4, 7.5_
- [x] 15. 总经理端前端页面
- [x] 15.1 实现全公司绩效总览页面 `CompanyOverview`
- 各部门、各岗位绩效整体情况ECharts 柱状图和饼图,多维度筛选
- _Requirements: 8.1, 8.2, 8.3_
- [x] 15.2 实现全量数据导出和考核规则配置页面
- 全量 Excel 导出,考核指标权重和奖惩金额配置表单
- _Requirements: 8.4, 8.5, 8.6_
- [x] 16. 最终检查点 — 确保所有测试通过,前后端联调完成,如有问题请告知
## 备注
- 标有 `*` 的任务为可选测试任务,可跳过以加快 MVP 交付
- 每个任务引用了具体的需求条目,便于追溯
- 检查点任务确保每个阶段的增量验证
- 属性测试使用 fast-check 库,每个属性最少运行 100 次迭代