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

9.0 KiB
Raw Blame History

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

文档编号: 20260723-优化-3.md 日期: 2026-07-23 来源: 对 Money.tsx、Termination.tsx、SocialInsurance.tsx、Roster.tsx 四个核心业务页面深入研究后得出


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

1. Money — 发薪批次创建后无法重命名

现状: 批次列表只显示自动生成的名称(如"2026-01 第1批 发薪"),创建后名称固定不可修改。当企业有多个批次(按部门/按职级分批发薪)时,列表难以区分。

建议:

  • 后端:PUT /payroll2/batches/:id 支持更新 name 字段
  • 前端:在 BatchDetail 右上角增加「重命名」按钮,弹出编辑框修改批次名称

涉及文件: backend/src/routes/payroll2.routes.tsfrontend/src/pages/Money.tsx


2. Termination — 费用计算与表单完全割裂

现状: costResult 是纯前端 useMemo 计算,但编辑表单字段(解聘日期、解聘原因)时不会实时触发重算。用户必须切到 Step 4 才能看到费用变化,导致操作反馈链路过长。

建议:

  • costResult 的依赖项(terminationDatesocialAvgWagereason)用 useEffect 驱动,每次表单变更实时展示费用预览
  • 在 Step 1(选择员工)和 Step 2(解聘方式)之间增加一个「实时费用预览区」,显示经济补偿金、赔偿金、代通知金的大致金额,降低误操作风险

涉及文件: frontend/src/pages/Termination.tsx


3. Termination — 模拟计算结果被静默覆盖

现状: handleSimulate 只将数据存入本地 state savedItemscostResult 依赖的是表单实时值。当用户修改参数后,之前的模拟结果会被静默覆盖,无法对比不同参数下的补偿金额。

建议:

  • savedItems 每条记录增加 version 字段和 isSimulated: boolean 标记
  • 每次模拟生成新版本而非覆盖,用户可在右侧列表查看多个版本的对比
  • 模拟结果与实际保存结果分开展示,避免混淆

涉及文件: frontend/src/pages/Termination.tsx


4. Roster — 批量续签无合规预检

现状: 批量续签直接提交 contractIds,无任何预览或合规检查。用户可能对已连续签订两次固定期限合同的员工续签固定期(法律上应签无固定期限)。

建议:

  • 选择员工后,先调用后端接口 GET /employees/contracts/preview-renew 返回每个员工的合规提示
  • 展示预览列表:每个员工一行,显示「可续签固定期」或「应签无固定期限(已连续签订X次)」等提示
  • 用户确认后再提交,避免法律风险

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


5. SocialInsurance — 社保基数调整只能一次性操作

现状: adjustmentDone 标志为 true 后无法再次调整基数。但实践中基数可能需要多次修正(员工投诉、基数算错、重新申报)。

建议:

  • 增加「重置调整」接口 POST /social/config/:id/reset-adjustment,允许管理员撤销本次调整重新来过
  • 或改为记录每次调整的版本历史,支持查看历史调整记录

涉及文件: backend/src/routes/social.routes.tsfrontend/src/pages/SocialInsurance.tsx


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

6. Roster — 员工搜索无分页、无法多选过滤

现状: 花名册仅支持姓名/部门 substring 搜索,无分页和高级过滤。添加人员到批次时取 pageSize: 100,超过 100 人就覆盖不全。

建议:

  • 花名册搜索增加状态过滤(在职/预入职/离职)、合同状态过滤(正常/即将到期/已过期/未签合同)、合同到期时间范围过滤
  • 添加人员到批次改为服务端搜索,支持分页 + 关键词搜索 + 多选,超 100 人场景也能覆盖

涉及文件: frontend/src/pages/Roster.tsxbackend/src/routes/roster.routes.tsbackend/src/routes/payroll2.routes.ts


7. Money — 批次列表无月份范围筛选

现状: 只有单月筛选,企业要查看历史所有批次只能逐月切换,且无状态(草稿/归档)过滤。

建议:

  • 批次列表增加月份范围选择器(开始月份 ~ 结束月份)
  • 增加状态过滤(全部/草稿/已归档)
  • 增加批次类型过滤(全部/常规发薪/离职结算/年终奖/补偿金)

涉及文件: frontend/src/pages/Money.tsxbackend/src/routes/payroll2.routes.ts


8. Termination — 无批量解聘能力

现状: 只能逐个处理。当企业裁员时(如一次性解除 20 人),需重复操作 20 次,体验极差。

建议:

  • 在「解聘补偿」页面增加「批量解聘」入口
  • 选择员工后批量填写共性参数(解聘日期、解聘原因、社保截止月份),差异项(补偿金金额)可逐个补充或批量默认
  • 批量提交后统一生成解聘记录和调薪批次

涉及文件: frontend/src/pages/Termination.tsxbackend/src/services/termination.service.ts


9. Roster — 合同到期预警机制缺失

现状: 花名册表头显示合同状态标签(expiringexpired),但系统无主动预警。用户需主动逐个查看。

建议:

  • Dashboard 增加合同到期预警卡片,显示 30 天内到期、60 天内到期、90 天内到期的员工数量
  • 点击卡片跳转花名册,预设筛选条件为「合同到期时间 ≤ N 天」
  • Roster 列表页增加「合同到期时间」列,支持按到期时间排序

涉及文件: frontend/src/pages/Dashboard.tsxfrontend/src/pages/Roster.tsxbackend/src/routes/roster.routes.ts


10. Money — 无工资条税率试算预览

现状: PayslipManager 只能从批次汇总生成工资条,无法单独查看某员工的个税明细和实发金额分解。

建议:

  • 在批次详情页或员工 profile 的 payslip tab 中,增加「税率试算」功能
  • 展示个税计算过程:应发金额 → 社保公积金扣除 → 个税起征点扣除 → 应纳税所得额 → 税率/速算扣除数 → 个税 → 实发金额
  • 支持单员工试算,不依赖批次

涉及文件: frontend/src/pages/Money.tsxfrontend/src/pages/Roster.tsxbackend/src/services/payroll.service.ts


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

11. SocialInsurance — 仅支持北京配置,无多城市扩展

现状: newVersion 硬编码北京配置,版本历史中城市字段存在但无人使用。

建议:

  • 后续扩展多城市时,社保配置表增加 cityCode 字段
  • 版本历史按城市分组展示
  • 城市列表可配置(新增城市配置时自动出现在下拉)

涉及文件: backend/prisma/schema.prismafrontend/src/pages/SocialInsurance.tsx


12. Termination — 离职与解聘入口分离不清晰

现状: ResignModal(员工主动离职)和解聘向导(公司主导)是两套流程,但在同一个「解聘补偿」模块中容易让用户困惑。

建议:

  • 在 Step 1 员工选择后,优先展示「员工主动离职」vs「公司解聘」两个入口
  • 选择「主动离职」则弹出简化版离职表单(仅需离职日期和原因)
  • 选择「公司解聘」则进入完整解聘向导

涉及文件: frontend/src/pages/Termination.tsxfrontend/src/pages/Roster.tsx


13. Roster — 员工附件上传无预览

现状: 合同扫描件以 DataURL 形式存储,无文件大小校验,无 PDF/Word 在线预览。

建议:

  • 附件上传增加文件类型限制(仅 PDF/图片)和大小限制(最大 10MB)
  • 员工 profile 附件 tab 增加文件预览功能(图片直接显示,PDF 用 iframe 或第三方预览组件)
  • 上传前显示文件大小提示

涉及文件: frontend/src/pages/Roster.tsx


14. Money — 加班费 CSV 导入无批量编辑

现状: CSV 导入后只能整体确认,无法逐条修改导入数据中的工时数值。

建议:

  • 导入预览阶段支持逐行编辑工时数据(工作日/休息日/节假日小时数)
  • 增加「校验」按钮,对齐员工姓名未匹配的记录高亮提示
  • 支持从预览中删除不需要的记录

涉及文件: frontend/src/pages/Money.tsxOvertimeCalculator 组件)


四、优先级总览

优先级 编号 功能 工作量
P0 1 发薪批次重命名
P0 2 费用计算实时预览
P0 4 批量续签合规预检
P0 5 社保基数调整可重复操作
P1 3 模拟计算版本管理
P1 6 员工搜索分页+多选过滤
P1 7 批次列表范围筛选
P1 8 批量解聘
P1 9 合同到期预警
P1 10 工资条税率试算
P2 12 离职/解聘入口分离
P2 13 附件上传预览
P2 14 加班费导入批量编辑
P3 11 多城市社保配置