Files
TurboHR/20260723-优化-6.md
selfrelease 0df8aa77d9 feat: AIHR 智能人力资源管理系统初始提交
- 员工花名册管理(加密存储、导入导出)
- 薪酬管理(发薪批次、薪酬模版、加班费计算、工资条)
- 社保公积金(多城市配置、版本管理、基数调整)
- 解聘管理(6步流程、证据链、工作交接)
- AI 助手(合同审查、风险预测、RAG 知识库)
- Dashboard 仪表盘
- 设置与通知
2026-07-24 13:53:11 +08:00

9.7 KiB

劳动用工合规 SaaS — 功能层面优化清单(续三)

文档编号: 20260723-优化-6.md 日期: 2026-07-23 来源: 对 Portal 相关页面、AI 服务、RAG 服务深入研究后得出


一、高优先级(核心业务缺陷)

1. Portal — 工资条确认后无反馈机制

现状: 员工点击「确认已阅」后只更新 confirmedAt,没有通知 HR 已确认。如果 HR 期望所有员工都确认后才能完成工资条审核流程,当前系统无法感知确认状态。

建议:

  • 工资条确认后通过 WebSocket 或轮询通知 HR
  • 在 Money 页面展示各员工的工资条确认状态(已确认 / 未确认)
  • 未确认员工超过 N 人时,HR 收到系统通知
  • 员工确认后记录 IP 地址(已有),用于审计

涉及文件: frontend/src/pages/Money.tsxbackend/src/routes/portal.routes.tsfrontend/src/pages/portal/Payslip.tsx


2. AI — 会话上下文无企业数据关联

现状: buildOrgContext 只返回员工姓名、部门、入职日期和合同类型的摘要,过于粗略。HR 在问「我们公司有几个试用期还没签合同的员工」时,AI 无法基于这些数据准确回答。

建议:

  • 增强 buildOrgContext 的数据粒度:增加合同状态、即将到期天数、特殊状态(孕期/工伤)等
  • riskItem 的详细描述也传入,而非只传标题
  • 考虑将员工数据以结构化 JSON 传入,而非纯文本,便于 AI 理解

涉及文件: backend/src/routes/ai.routes.ts


3. Portal — 合同签署确认无电子签名

现状: 员工点击「确认签署」后只更新 status = 'CONFIRMED',没有电子签名或意愿确认机制。法律上电子合同需要可靠的电子签名(CA 证书或人脸识别),当前实现不具备法律效力。

建议:

  • 增加短信验证码二次确认:员工点击确认后,发送验证码到手机,输入后完成签署
  • 或对接第三方电子签名服务(如 e签宝、法大大)
  • 签署完成后生成带有时间戳的签署记录 PDF
  • 签署记录存储签名证据(IP、设备信息、地理位置),用于后续举证

涉及文件: backend/src/routes/portal.routes.tsfrontend/src/pages/portal/ContractConfirm.tsx


4. AI — 用量限制校验逻辑有误

现状: checkUsageLimit 函数用 prisma.auditLogdetail 字段(JSON 序列化后的字符串)做 count,但 JSON.stringify({ month }) 的结果与数据库中 recordUsage 时写入的 detail 字段格式可能不匹配(后者是对象直接存储)。查询条件无法正确匹配,导致限制失效。

建议:

  • 统一 auditLog.detail 字段的存储格式,要么都用 JSON 字符串,要么都用对象
  • 或者用独立的 aiUsage 表记录 AI 使用次数,按月统计更准确
  • checkUsageLimit 应在请求前调用,而非请求后(避免超限后才报错)

涉及文件: backend/src/routes/ai.routes.ts


二、中优先级(高频操作体验)

5. Portal — 入职填报无文件上传

现状: onboardingSchema 定义了身份证照片、银行流水等字段,但实际表单只提交文本数据,没有文件上传功能。员工入职时仍需线下提交证件复印件。

建议:

  • 增加文件上传功能(身份证正反面、学历证明、体检报告等)
  • 文件上传到 OSS/S3,返回 URL 后存入 formData
  • 支持员工端在「我的合同」页面查看已上传的入职材料
  • HR 在 Roster 页面可查看员工上传的入职材料

涉及文件: backend/src/routes/portal.routes.tsfrontend/src/pages/portal/Onboarding.tsx


6. AI — RAG 知识库无增量更新机制

现状: seedKnowledgeBase 初始化知识库后,没有提供增量更新接口。劳动法律法规更新后,系统无法自动同步新法规。addKnowledge 接口存在但没有在前端暴露入口。

建议:

  • 增加「知识库管理」页面,HR 可手动添加/编辑法规条文
  • 增加法规有效期字段,过期法规自动失效
  • 对接权威劳动法数据库(如北大法宝)的增量更新接口(可选)
  • 知识库更新后触发向量重索引

涉及文件: backend/src/routes/ai.routes.tsbackend/src/services/rag.service.ts


7. Portal — 工资条只能看当前月

现状: 员工只能通过月份选择器切换查看历史月份,但无法快速看到工资历史趋势。当员工想对比近半年收入变化时,只能逐月切换。

建议:

  • 在工资条页面增加「工资趋势」图表(近 6 个月应发金额折线图)
  • 增加「收入明细导出」功能,员工可下载自己的历史工资条
  • 增加「电子工资条存档」功能,每年自动生成 PDF 年度收入证明(用于贷款、签证等场景)

涉及文件: frontend/src/pages/portal/Payslip.tsxbackend/src/routes/portal.routes.ts


8. AI — 对话流异常时 token 不回收

现状: /chat-stream 在流式响应中途发生错误时,recordUsage 可能不会被调用(因为它在 res.end() 之后才调用),导致用户使用了 AI 但次数未记录。

建议:

  • recordUsage 移到请求处理开始前,用 try/finally 确保无论成功失败都记录
  • 或者使用中间件在响应完成后统一记录
  • 增加 aiUsage 独立表,用事务保证计数准确性

涉及文件: backend/src/routes/ai.routes.ts


三、低优先级(功能补全)

9. Portal — 验证码登录安全性不足

现状: codeStore 使用内存 Map 存储验证码,重启服务器后失效,且在多实例部署时无法共享。5 分钟过期时间也较长,存在被暴力破解风险。

建议:

  • 生产环境使用 Redis 存储验证码,支持多实例共享和自动过期
  • 增加验证码错误次数限制(5 次错误后锁定 15 分钟)
  • 验证码增加图形验证码或行为验证码(如滑动拼图)防止机器攻击
  • 增加登录失败日志记录

涉及文件: backend/src/routes/portal.routes.ts


10. AI — 合同审查结果无结构化存储

现状: reviewContract 返回纯文本审查结果,用户无法按风险类型检索,也无法统计一段时间内的合同合规趋势。

建议:

  • 将审查结果结构化存储(风险项、条款位置、严重程度、建议)
  • 增加 contractReviewHistory 表,记录每次审查的时间、内容摘要
  • 前端展示审查结果时,按风险等级分类展示,支持按条款搜索

涉及文件: backend/src/routes/ai.routes.tsbackend/prisma/schema.prisma


11. Portal — 入职链接无撤回机制

现状: HR 生成入职填报链接后无法撤回。如果员工已经收到链接但临时不入职,链接过期前仍然有效,可能被误用。

建议:

  • 增加「撤销链接」功能,HR 可将已发送的链接置为无效
  • 链接撤销后员工访问时提示「该链接已失效,请联系 HR」
  • 链接状态增加「已发送」「已使用」「已过期」「已撤销」四种状态

涉及文件: backend/src/routes/employee.routes.tsbackend/prisma/schema.prisma


12. AI — 对话未设置超时机制

现状: AI 服务调用(特别是 qwen-max 模型)可能响应很慢,前端没有超时处理。当 AI 服务不可用时,用户只能等待 30 秒才看到错误。

建议:

  • 后端设置请求超时(如 30 秒),超时时返回友好的错误提示
  • 前端增加加载状态超时提示(如 15 秒无响应时显示「AI 服务响应较慢」)
  • 增加 AI 服务健康检查接口,前端可在发送请求前检查服务状态

涉及文件: backend/src/services/ai.service.tsfrontend/src/pages/AIAssistant.tsx


13. Portal — 合同确认链接无重发功能

现状: 员工收到合同确认邮件/短信后,如果链接过期或未收到,只能让 HR 重新生成一次。员工端没有「重新发送确认链接」的功能。

建议:

  • 在员工登录 Portal 后,如果存在待确认合同,显示「合同待确认」提示
  • 增加「重新发送确认链接」按钮,员工可自行触发重发
  • 链接重发记录需要 HR 审批或系统自动发送(根据企业配置)

涉及文件: frontend/src/pages/portal/MyContract.tsxbackend/src/routes/employee.routes.ts


14. AI — 案例匹配结果无后续操作

现状: matchCase 返回的案例分析和建议是纯文本展示,用户无法基于建议快速创建相应的待办事项或调整员工状态。

建议:

  • 解析案例匹配结果中的「建议」部分,生成可执行的待办事项列表
  • 支持用户点击「采纳建议」后,系统自动创建对应操作(如「与员工协商续签」待办)
  • 案例匹配结果存入 AICaseMatch 表,便于后续审计和分析

涉及文件: backend/src/routes/ai.routes.tsfrontend/src/pages/AIAssistant.tsxbackend/prisma/schema.prisma


四、优先级总览

优先级 编号 功能 工作量
P0 1 工资条确认通知 HR
P0 2 AI 会话上下文数据增强
P0 3 合同签署电子签名
P0 4 AI 用量限制校验修复
P1 5 入职材料文件上传
P1 6 RAG 知识库管理界面
P1 7 工资趋势图表+导出
P1 8 AI 用量记录事务保证
P2 9 验证码登录安全加固
P2 10 合同审查结构化存储
P2 11 入职链接撤回功能
P2 12 AI 服务超时机制
P2 13 合同确认链接重发
P2 14 案例匹配结果转待办