Files
TurboHR/20260728-优化.md
T
freedakgmail fb36b10402 feat: 工作日历/考勤管理重构/AI人力报告/工作台员工分布/筛选优化/导入导出增强
- 新增工作日历页面(月历视图、事件管理、自定义事件)
- 考勤管理重构为6 Tab模块(班次/排班/每日出勤/月度报表/休假记录)
- AI顾问新增人力报告Tab,支持流式生成+Word导出
- 工作台总览新增员工分布统计(性别/年龄/学历/司龄饼图)+部门成本拆分
- 花名册/合同/解聘补偿新增部门和状态筛选
- 薪税管理新增工资表导入模板下载、银行代发CSV导出
- 社保公积金支持多公积金账户类型显示
- 数据导出新增花名册/解聘记录导出,中文文件名编码修复
- 数据导入新增模板下载(员工/增减员/工资表)+错误日志导出
- 移除工作台日历卡片(已迁移至独立工作日历页面)
- 新增20260728/20260729更新测试指导文档
2026-07-29 08:35:29 +08:00

17 KiB
Raw Blame History

1、工作角色:是否只有HR,老板、员工是否也有小程序入口。 2、人力成本分析维度是什么,是否有按工资、社保分类;按部门、产品线分类; 3、人力信息总览不够详细:性别、年龄、学历等分类没看到 4、加班费、考勤:每个企业计算方法不同,是否有灵活的配置比如一小时多少钱的计算方法,不是按照比例 5、年度价值:好高端啊,教育客户会有时间成本,可以考虑简单粗暴点,使用程序前后的成本对比(比如预控风险支付的成本和没有预控风险支付的成本对比,比如没给这个员工上保险,但是有了小程序我及时上了。那么就用无赔付和双倍工资对比) 6、这个小程序主要解决用工的问题,主要角色也是HR,帮助HR去做工作,那么,考虑从不同行业的HR的工作调研入手。比如零工招聘,涉及到商险了,这里只有社保。制造业HR需要更详细的绩效配置,小程序是否可实现。有的计件、有的计时,发放工资的方式等等。有的侧重招聘端,有的侧重日常管理。目前看来,各项分类过于单薄。 7、HR如果报工伤、医疗、失业等,是否需要再小程序上线上处理或者留痕?这里只有一些医疗期计算等,作为工具来使用,那么作为HR,用这个小程序,并没有实现所有员工情况的数据和工作留痕。连接到人力成本分析,数据来源很少。 8、AI辅助这里,是否还需要接入人工端? 9、是否支持直接用AI出具单位人力分析报告? 10、是否考虑按产品付费分段来解锁模块? 11、是否考虑仲裁、出庭等法律服务的付费端口?或者连接人工端去选择其他相关联的服务。 12、工作台没有日历功能 13、创建公积金新政策没有反映 14、唐山社保医保基数上下限不一致,系统无法实现 15、唐山有多公积金比例的公积金账户,系统无法实现 16、批量导入人员,无法选择参保城市,需要逐个为员工添加参保城市,并且“参保城市变更原因(必填)”还是必填项,增加工作量 17、显示条目上限是50条,有些少 18、员工花名册不展示身份证号,也不支持身份证证号筛选,如果企业有重名员工,无法使用 19、“薪税管理”,中的下载模板功能,无法下载模板,点击跳转后打开新网页,显示{"success":false,"error":{"code":"UNAUTHORIZED","message":"未提供认证令牌"}} 20、人员:任职录入、晋升调动,离职,最好有审批流程,合同协议可以有到期提醒及续签审批流程 21、考勤因为看不到东西,我的需求是:班次设定,班表导入,每日出勤查询,月度出勤报表,休假、加班汇总,考勤流程审批及管控 22、薪资社保:需要调薪审核模块,薪资项目不够细化,薪资汇总表及明细表生成 各项查询可按照部门、工作职位,日期等进行细化筛选,并可以生成报表。


TurboHR 优化方案(20260728

基于代码现状分析,按优先级分为 P0(紧急修复)、P1(核心功能补全)、P2(增强优化)三档。


P0:紧急修复(用户已遇到的阻断性问题)

1. 模板下载 401 错误(对应第19项)

现状Settings.tsx 中的 GET /import/templateGET /import/monthly-template 已修复(使用 fetch + Authorization header)。但 Money.tsx:657 中下载工资表模板仍使用 window.open('/api/v1/import/payroll-template', '_blank'),新窗口不携带 JWT token,后端 authMiddleware 返回 401。

修复方案:将 Money.tsx 中的 window.open() 改为 fetch + Blob 方式下载,携带 Authorization header。

涉及文件

  • frontend/src/pages/Money.tsx:657 — 修改工资表模板下载按钮的 onClick 逻辑
  • 涉及端点:GET /import/payroll-template

实现要点

// Money.tsx 中替换 window.open() 为:
const handleDownloadPayrollTemplate = async () => {
  const token = useAuthStore.getState().accessToken
  const res = await fetch('/api/v1/import/payroll-template', {
    headers: token ? { Authorization: `Bearer ${token}` } : {},
  })
  const blob = await res.blob()
  const url = URL.createObjectURL(blob)
  const a = document.createElement('a')
  a.href = url
  a.download = 'payroll-import-template.xlsx'
  a.click()
  URL.revokeObjectURL(url)
}

2. 员工花名册不展示身份证号、不支持身份证筛选(对应第18项)

根因:身份证号加密存储,列表接口返回时不解密;筛选逻辑未支持身份证号。

修复方案

  • 列表接口增加身份证号脱敏显示(138****1234 格式),仅管理员可查看完整号码
  • 列表查询支持按身份证号后4位或完整号码筛选

涉及文件

  • backend/src/routes/roster.routes.ts — 列表查询增加身份证号筛选参数
  • frontend/src/pages/Roster.tsxroster/ 子组件 — 列表增加身份证号脱敏列 + 筛选输入框

3. 分页上限50条过少(对应第17项)

现状:前端 Pagination.tsx 默认 pageSizeOptions = [10, 20, 50],最大选项仅50条。后端 roster.routes.ts 已支持 Math.min(pageSize, 999),但其他路由(audit.routes.tsnotification.routes.ts 等)默认20条且无上限校验。

修复方案

  • 前端 Pagination 组件 pageSizeOptions 增加 100、200 选项
  • 后端各列表接口统一增加 Math.min(pageSize, 200) 上限校验

涉及文件

  • frontend/src/components/ui/Pagination.tsx:19pageSizeOptions 默认值改为 [10, 20, 50, 100, 200]
  • 后端各路由文件 — 统一增加 pageSize 上限校验(roster.routes.ts 已支持,其余需补充)

P1:核心功能补全

4. 考勤模块完整化(对应第21项)

现状:仅有月度考勤确认(AttendanceConfirmation+ 员工维度考勤记录 CRUD,缺少班次、班表、日报、报表、休假、审批。

实施方案

4.1 班次设定

  • 新增 Shift 模型:班次名称、上班时间、下班时间、弹性时长、休息时长
  • 新增 GET/POST/PUT/DELETE /attendance/shifts 端点
  • 前端新增班次管理页面

4.2 班表导入

  • 导入模板增加"班表"sheet:员工姓名 + 日期 + 班次名称
  • 后端解析 Excel 批量创建排班记录
  • 新增 ShiftAssignment 模型:员工ID + 日期 + 班次ID

4.3 每日出勤查询

  • 前端新增日历视图,按日期查看全员出勤状态
  • 支持按部门、状态筛选
  • 后端新增 GET /attendance/daily?date=YYYY-MM-DD 端点

4.4 月度出勤报表

  • 后端新增 GET /attendance/monthly-report?month=YYYY-MM 端点
  • 汇总每员工:出勤天数、迟到次数、早退次数、缺勤天数、加班工时
  • 前端报表页面 + Excel 导出

4.5 休假/加班汇总

  • 休假申请流程:员工提交 → HR审批 → 记录到 AttendanceRecord
  • 加班汇总:从 OvertimeRecord 聚合,关联考勤确认

4.6 考勤审批流程

  • 请假申请:LeaveRequest 模型,状态机 PENDING → APPROVED/REJECTED
  • 加班申请:OvertimeRequest 模型,状态机同上
  • 前端新增审批列表页面

涉及文件

  • backend/prisma/schema.prisma — 新增 Shift、ShiftAssignment、LeaveRequest、OvertimeRequest 模型
  • backend/src/routes/attendance.routes.ts — 扩展端点
  • backend/src/services/attendance.service.ts — 扩展服务
  • frontend/src/pages/Attendance.tsx — 重构为多 Tab 页面(班次/排班/日报/月报/审批)

5. 人事审批流程(对应第20项)

现状:仅解聘有完整审批流程(DRAFT → PENDING_APPROVAL → APPROVED/REJECTED → EXECUTING → COMPLETED),晋升调动、薪资调整、合同续签均无审批。

实施方案

5.1 通用审批引擎

  • 新增 ApprovalFlow 模型:类型(PROMOTION/SALARY_CHANGE/CONTRACT_RENEW/TERMINATION)、状态、发起人、审批人、审批意见
  • 通用状态机:DRAFT → PENDING_APPROVAL → APPROVED/REJECTED → EXECUTED
  • 支持多级审批(可选)

5.2 晋升调动审批

  • 发起调动申请 → 审批通过后执行 updateEmployee 部门变更
  • 记录审批链到 EmployeeDepartmentRecord

5.3 薪资调整审批

  • 发起调薪申请 → 审批通过后执行薪资变更 + SalaryChangeRecord
  • 防止未审批直接改薪

5.4 合同续签审批

  • 合同到期提醒触发 → 发起续签申请 → 审批通过后执行 batchRenew
  • 续签记录关联审批流

涉及文件

  • backend/prisma/schema.prisma — 新增 ApprovalFlow 模型
  • backend/src/services/approval.service.ts — 新建通用审批服务
  • backend/src/routes/approval.routes.ts — 新建审批端点
  • frontend/src/pages/Approvals.tsx — 新建审批中心页面
  • frontend/src/pages/Termination.tsx — 解聘审批改用通用审批引擎

6. 薪资调薪审核 + 薪资项目细化 + 报表(对应第22项)

现状:薪资调整直接在 updateEmployee 中执行,无审核;薪资项目仅基本工资/加班费/津贴/扣款/奖金5项;无汇总表/明细表生成。

实施方案

6.1 调薪审核模块

  • 调薪申请走通用审批流程(与第5项联动)
  • 审批通过后才写入 SalaryChangeRecord 和员工月薪

6.2 薪资项目细化

  • BatchEntry 增加更多薪资项字段:岗位工资、绩效工资、工龄工资、交通补贴、餐补、住房补贴、通讯补贴、社保扣款、公积金扣款、个税、其他扣款
  • 薪资模板支持自定义项目配置

6.3 薪资汇总表及明细表

  • 后端新增 GET /payroll/batch/:id/summary — 汇总表(部门维度统计)
  • 后端新增 GET /payroll/batch/:id/detail — 明细表(全员明细)
  • 支持 Excel 导出

涉及文件

  • backend/prisma/schema.prisma — BatchEntry 扩展字段
  • backend/src/routes/payroll.routes.ts — 新增报表端点
  • backend/src/services/payroll.service.ts — 扩展计算逻辑
  • frontend/src/pages/Money.tsx — 薪资管理页面增加报表导出

7. 批量导入支持参保城市(对应第16项)

现状:导入模板"员工信息"sheet 无"参保城市"列;createEmployee 默认 city='北京'。

修复方案

  • 导入模板"员工信息"sheet 增加"参保城市"列
  • 导入逻辑读取城市值,传入 createEmployee
  • 批量导入场景下城市变更原因默认"批量导入",不要求逐个填写

涉及文件

  • backend/src/routes/import.routes.ts — 模板生成增加城市列 + 导入解析读取城市
  • backend/src/services/contract.service.tscreateEmployee 已支持 city 参数,无需改动

8. 社保医保基数上下限不一致(对应第14项)

现状SocialInsuranceConfig 已有 medicalBaseMin/medicalBaseMax 字段,calcSocialInsurance 已支持独立医疗基数上下限。

验证:功能已实现,需确认唐山配置数据是否正确录入。检查前端配置页面是否支持填写独立的医疗基数上下限。

涉及文件

  • frontend/src/pages/Money.tsx 或社保配置页面 — 确认 UI 暴露了 medicalBaseMin/medicalBaseMax 输入框

9. 多公积金比例账户(对应第15项)

现状HousingFundConfig 每个城市仅一条当前配置,不支持多比例账户。

修复方案

  • HousingFundConfig 增加 accountType 字段(如"基本公积金"/"补充公积金"
  • 同一城市可创建多条不同类型配置,各自独立比例
  • 员工可关联多个公积金账户

涉及文件

  • backend/prisma/schema.prisma — HousingFundConfig 增加 accountType
  • backend/src/routes/social.routes.ts — 查询/创建支持多账户
  • frontend 社保配置页面 — 展示多账户列表

P2:增强优化

10. 自定义工作日历功能(对应第12项)

现状Dashboard 已有只读的"本月关键日期"列表(展示合同到期、试用期到期等系统自动生成的事件),但不支持自定义工作日历,HR 无法手动添加、编辑或管理日历事件。

实施方案

  • 新增 CalendarEvent 模型:标题、日期、类型(自定义/系统)、提醒、关联人
  • HR 可手动创建/编辑/删除日历事件(如会议、团建、培训、面试等)
  • 日历视图从列表升级为月历网格视图,支持点击日期添加事件
  • 系统自动事件与自定义事件合并展示,用颜色区分
  • 支持按类型筛选

涉及文件

  • backend/prisma/schema.prisma — 新增 CalendarEvent 模型
  • backend/src/routes/calendar.routes.ts — 新建 CRUD 端点
  • frontend/src/pages/Dashboard.tsx — 日历列表升级为月历网格 + 自定义事件管理
  • frontend/src/components/Calendar.tsx — 新建日历组件

11. 人力信息总览增强(对应第3项)

实施方案

  • Dashboard 增加统计卡片:性别分布、年龄段分布、学历分布、司龄分布
  • Employee 模型确认已有 gender 字段;增加 educationbirthDate(可从身份证号提取)字段
  • 后端新增 GET /dashboard/workforce-stats 端点返回聚合数据

涉及文件

  • backend/prisma/schema.prisma — Employee 增加 education 字段
  • backend/src/routes/dashboard.routes.ts — 新增聚合统计端点
  • frontend/src/pages/Dashboard.tsx — 增加分布图表

12. 人力成本分析维度扩展(对应第2项)

现状risk.service.ts 中有成本分析,但维度有限。

实施方案

  • 按维度分类:工资成本、社保成本(企业部分)、公积金成本(企业部分)、补偿金成本
  • 按部门/岗位聚合
  • 支持时间趋势对比(月度/季度/年度)
  • 前端增加筛选器:部门、岗位、日期范围

涉及文件

  • backend/src/services/risk.service.ts — 扩展成本分析函数
  • backend/src/routes/dashboard.routes.ts — 新增维度查询端点
  • frontend 人力成本分析页面 — 增加筛选器和图表

13. 年度价值报告简化(对应第5项)

实施方案

  • 增加"前后对比"维度:无系统预估损失 vs 有系统实际损失
  • 具体案例:未缴社保双倍工资赔付风险 vs 系统提醒后及时缴纳的零赔付
  • 简化展示:用具体案例替代抽象 ROI 数字

涉及文件

  • backend/src/services/risk.service.tsgetAnnualValueReport 增加对比案例
  • frontend/src/pages/tools/AnnualValueReport.tsx — 增加"前后对比"卡片

14. AI 人力分析报告(对应第9项)

实施方案

  • 新增 POST /ai/hr-report 端点
  • 基于企业数据(员工概况、风险项、成本分析、考勤统计)自动生成结构化报告
  • 报告包含:人力概况、风险提示、成本分析、合规建议、改进方向
  • 支持 Markdown 导出

涉及文件

  • backend/src/services/ai.service.ts — 新增 generateHRReport 函数
  • backend/src/routes/ai.routes.ts — 新增端点
  • frontend/src/pages/AIAssistant.tsx — 增加"生成报告"Tab

15. AI 人工端接入(对应第8、11项)

实施方案

  • AI 问答中增加"转人工"入口
  • 新增 Consultation 模型:类型(法律咨询/仲裁代理/出庭服务)、状态、关联AI会话
  • 前端 AI 助手页面增加"联系专业律师"按钮
  • 付费服务入口(仲裁/出庭)跳转外部表单或显示联系方式

涉及文件

  • backend/prisma/schema.prisma — 新增 Consultation 模型
  • backend/src/routes/ai.routes.ts — 新增转人工端点
  • frontend/src/pages/AIAssistant.tsx — 增加转人工 UI

16. 查询筛选增强 + 报表生成(对应第23项)

实施方案

  • 各列表页面统一增加筛选器:部门、岗位、日期范围
  • 后端列表端点统一支持 departmentpositiondateFromdateTo 查询参数
  • 增加"导出报表"按钮,支持 Excel 导出筛选结果

涉及文件

  • 后端各路由文件 — 统一增加筛选参数
  • 前端各列表页面 — 增加筛选器组件
  • backend/src/services/export.service.ts — 新建通用导出服务

实施优先级排序

优先级 编号 项目 预估工作量
P0 1 工资表模板下载 401 修复(仅剩 Money.tsx 0.5天
P0 2 花名册身份证号显示+筛选 1天
P0 3 分页上限扩展 0.5天
P0 7 批量导入参保城市 0.5天
P0 8 社保医疗基数上下限验证 0.5天
P1 4 考勤模块完整化 5-7天
P1 5 人事审批流程 3-5天
P1 6 薪资调薪审核+报表 3-5天
P1 9 多公积金比例账户 2天
P2 10 自定义工作日历 2-3天
P2 11 人力信息总览增强 2天
P2 12 人力成本分析维度 2-3天
P2 13 年度价值报告简化 1天
P2 14 AI 人力分析报告 2天
P2 15 AI 人工端接入 2天
P2 16 查询筛选+报表 3天

P0 合计:约 3 天 P1 合计:约 13-19 天 P2 合计:约 13-16 天 总计:约 29-38 天