Files
TurboHR/docs/20260729-优化需求梳理-1.md
freedakgmail 0372cbe243 feat: 完成全部11项优化需求 + 模板必填项标注 + 归档重算个税
- 高优先级: 花名册导入模板必填项标注、性别自动识别、导入结果反馈、证据链Excel导出、身份证搜索修复、试用期区分与转正提醒、薪税批次流程优化
- 中优先级: 专项附加扣除批量导入、文本模板库完善(Word下载/复制/使用说明)、用工体检评分标准说明、考勤页面导入入口
- 所有导入模板表头标注必填项(*后缀)并含示例行
- 导入逻辑统一改用getField兼容*后缀列名
- 批次归档时强制重算所有条目个税和社保,解决多未归档批次并存时累计计算不准问题
- 更新需求梳理文档
2026-07-29 19:08:45 +08:00

293 lines
13 KiB
Markdown
Raw Permalink 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.
# 企业用工专家 — 20260729 用户反馈优化需求梳理
> 来源:用户测试反馈
> 整理日期:2026-07-29
> 优先级标注:🔴 高 / 🟡 中 / 🟢 低
---
## 需求 1:花名册导入模板优化 🔴
**问题描述**
- 导入模板中必填项没有标注,用户不清楚哪些字段必须填写
- 示例数据放在第一行,删除后看不到格式参考,来回测试麻烦
**优化方案**
1. 模板表头添加必填标注:必填字段列名加 `*` 号或红色标注(如 `姓名*``身份证号*``入职日期*`
2. 示例行使用浅灰色背景并标注「示例数据(导入时请删除本行)」
3. 或在导入页面展示「字段说明」折叠面板,列出每个字段的必填/选填、格式要求
**涉及模块**
- 后端:`backend/src/routes/import.routes.ts` — 模板生成逻辑
- 前端:`frontend/src/pages/Settings.tsx` — 数据导入 Tab
**完成方式**
- 模板表头必填字段加 `*` 号标注(`姓名*``身份证号*``入职日期*``月工资*`
- 新增 `getField()` 工具函数,兼容带 `*` 后缀列名和模糊匹配
- 性别列标注「选填,留空自动识别」,导入时从身份证号第 17 位自动提取
---
## 需求 2:工资专项附加扣除批量导入 🟡
**问题描述**
- 专项附加扣除信息在员工入职时可能尚未采集到
- 当前只能在薪税管理中逐月手动录入,没有单独的批量导入功能
**优化方案**
1. 在「薪税管理 → 专项附加扣除」Tab 新增「批量导入」按钮
2. 提供专项附加扣除导入模板(员工姓名/身份证号 + 各项扣除金额)
3. 支持「复制上月」基础上批量修改后导入
**涉及模块**
- 前端:`frontend/src/pages/Money.tsx` — 专项附加扣除 Tab
- 后端:`backend/src/routes/import.routes.ts` — 新增导入接口
**完成方式**
- 后端新增 `GET /import/special-deduction/template` 端点,下载专项附加扣除导入模板(含姓名、身份证号、5 项扣除金额列)
- 后端新增 `POST /import/special-deduction` 端点,支持 Excel 批量导入并按月 upsert
- 前端 `SocialInsurance.tsx` 专项附加扣除 Tab 工具栏新增「批量导入」按钮
- 导入弹窗包含:模板下载、文件上传、导入结果反馈(成功/跳过/错误明细)
- 身份证号优先匹配,未填时用姓名匹配
---
## 需求 3:导入结果反馈不明确 🔴
**问题描述**
- 导入后不显示成功提示,用户不知道是否已导入
- 显示了行错误但实际数据已导入,导致重复导入
**优化方案**
1. 导入完成后弹出结果摘要:`成功导入 N 条,失败 M 条,跳过 K 条`
2. 成功时 toast 提示「导入成功,共 N 条记录」
3. 部分成功时明确提示「部分成功:N 条成功,M 条失败」
4. 失败行可下载错误日志(已有),但需在页面显示失败汇总
**涉及模块**
- 前端:`frontend/src/pages/Settings.tsx` — 导入结果展示
- 后端:`backend/src/routes/import.routes.ts` — 返回导入统计
**完成方式**
- 后端返回 `skipped`(跳过)、`duplicates`(重复)、`details`(逐行明细)字段
- 前端显示分类汇总:成功 N 条、跳过 M 条、重复 K 条
- 新增「导出错误日志」按钮,下载 Excel 格式的逐行错误明细
---
## 需求 4:证据链导出格式优化(TXT → Excel)🔴
**问题描述**
- 证据链导出为 TXT 格式,排版混乱,无法直接使用
- 需要导出后二次加工,体验差
**优化方案**
1. 证据链导出改为 Excel(.xlsx)格式
2. 按证据类型分 Sheet 或分列展示:证据名称、类型、日期、内容摘要、附件链接
3. 支持导出为 Word 文档(可选),带格式排版
**涉及模块**
- 后端:`backend/src/routes/export.routes.ts` — 证据链导出逻辑
- 前端:`frontend/src/pages/Evidence.tsx` — 导出按钮
**完成方式**
- 后端新增 `GET /:id/evidence-chain/export` 端点,使用 ExcelJS 生成 `.xlsx` 文件
- Excel 包含 3 个 Sheet:员工信息、证据清单(含合同/工资条/加班/考勤/违纪/培训/绩效/解聘)、风险提醒
- 前端 `EvidenceChain.tsx` 导出按钮改为调用新端点下载 Excel
---
## 需求 5:花名册身份证后四位搜索不可用 🔴
**问题描述**
- 搜索框提示「搜索姓名、部门或身份证后4位」,但用后四位搜索显示无结果
**优化方案**
1. 后端搜索逻辑支持身份证号后四位模糊匹配(`LIKE '%XXXX'`
2. 前端搜索时自动识别纯数字输入,走身份证后四位匹配逻辑
3. 测试验证:输入身份证后四位能正确匹配到对应员工
**涉及模块**
- 后端:`backend/src/routes/roster.routes.ts` — 搜索查询逻辑
**完成方式**
- 搜索正则改为支持 2+ 位纯数字输入识别为身份证号搜索
- 后端解密完整身份证号后与搜索词做后缀匹配
---
## 需求 6:用工文本模板库功能不明确 🟡
**问题描述**
- 用户不清楚文本模板库的使用方式
- 想另存或下载劳动合同模板,没找到操作入口
**优化方案**
1. 模板列表页新增「下载 Word」按钮,可直接下载模板文件
2. 新增「复制为新模板」按钮,基于现有模板创建副本后编辑
3. 页面顶部添加使用说明:「选择模板 → 点击使用 →填充变量 → 生成文档 → 下载」
4. 模板预览支持在线查看完整内容
**涉及模块**
- 前端:`frontend/src/pages/Templates.tsx`
- 后端:`backend/src/routes/template.routes.ts`(如有)
**完成方式**
- 后端新增 `GET /templates/:id/download` 端点,返回模板内容为 Word(.doc)文件
- 前端 `Templates.tsx` 新增「下载 Word」按钮,可直接下载模板为 .doc 文件
- 新增「复制为新模板」按钮,将渲染结果复制到剪贴板,可粘贴到 Word 中编辑
- 页面顶部新增「使用说明」可折叠面板,引导用户完成模板选择→变量填充→渲染→下载流程
- 模板原文和渲染结果区域均支持下载 Word
---
## 需求 7:用工体检诊断评分标准说明 🟡
**问题描述**
- 用工体检只显示分数,没有评分标准和满分说明
- 用户不知道分数含义和计算规则
**优化方案**
1. 体检结果页面顶部展示评分说明卡片:
- 满分 100 分
- 分数等级:90-100 优秀(绿色)、75-89 良好(蓝色)、60-74 合格(黄色)、<60 风险(红色)
- 评分维度及权重说明
2. 每个扣分项展示扣分原因和对应的法规依据
3. 结果下方展示「改善建议」清单
**涉及模块**
- 前端:`frontend/src/pages/tools/HealthCheck.tsx`
**完成方式**
- 前端 `HealthCheck.tsx` 新增评分标准说明卡片,展示 3 级评分等级:85+ 健康(绿)、60-84 中等风险(黄)、<60 高风险(红)
- 卡片底部展示 6 维度评分构成说明:合同管理、薪酬社保、考勤加班、规章制度、解聘合规、证据链
- 每个维度列出具体评分要素(如合同签订率、社保覆盖率等)
---
## 需求 8:试用期员工区分与转正提醒 🔴
**问题描述**
- 导入员工时无法区分试用期和正式员工
- 系统没有试用期到期转正提醒
**优化方案**
1. 花名册导入模板新增「员工状态」列(试用期/正式),默认试用期
2. 花名册列表新增「员工状态」列和筛选
3. 试用期员工显示试用期到期日期,到期前 30/15/7 天自动提醒
4. 工作日历自动显示试用期到期事件
5. 总览待办事项中新增「试用期即将到期」提醒
**涉及模块**
- 后端:`backend/prisma/schema.prisma` — Employee 模型新增 status/probationEndDate 字段
- 后端:`backend/src/routes/roster.routes.ts` — 导入和查询支持
- 前端:`frontend/src/pages/Roster.tsx` — 列表展示和筛选
- 前端:`frontend/src/pages/Dashboard.tsx` — 待办提醒
**完成方式**
- 后端 `roster.routes.ts` 返回 `probationInfo` 对象:含 `isProbation``probationMonths``probationEndDate``daysToConfirmation``isExpiringSoon`
- 试用期状态从合同 `probationMonths` + `hireDate` 动态计算,无需新增 schema 字段
- 前端花名册列表试用期员工显示橙色标签(试用期 X 个月 · 剩余 Y 天)
- 前端状态筛选新增「试用期」选项,发送 `ACTIVE` 到后端后本地过滤 `probationInfo.isProbation`
---
## 需求 9:考勤页面增加导入入口 🟡
**问题描述**
- 考勤数据导入入口在「设置 → 数据导入」中,用户在考勤页面找不到导入功能
**优化方案**
1. 在「考勤管理」页面工具栏新增「导入考勤」按钮
2. 点击后弹出导入弹窗,包含:模板下载 + 文件上传 + 导入结果反馈
3. 各功能模块的导入入口就近放置(薪税管理也同步处理)
**涉及模块**
- 前端:`frontend/src/pages/Attendance.tsx` — 新增导入按钮和弹窗
- 后端:`backend/src/routes/import.routes.ts` — 考勤导入接口
**完成方式**
- 前端 `Attendance.tsx` 考勤确认 Tab 工具栏新增「导入考勤」按钮
- 点击弹出导入弹窗,包含:模板下载、文件上传、导入结果反馈(考勤记录/加班/员工/合同条数)
- 复用已有 `POST /import/excel` 端点,支持考勤记录 Sheet 导入
- 导入后自动刷新考勤列表和统计数据
---
## 需求 10:花名册导入体验优化 🔴
**问题描述**
- 模板繁琐,没有标注必填项
- 性别需要手动填写,但可从身份证号自动识别
**优化方案**
1. 同需求 1:模板标注必填项
2. 性别字段改为选填,后端导入时根据身份证号自动识别性别(身份证第 17 位奇数=男,偶数=女)
3. 若用户手动填写了性别且与身份证识别不一致,以身份证为准并提示
4. 导入模板中性别列标注「选填,留空自动识别」
**涉及模块**
- 后端:`backend/src/routes/import.routes.ts` — 导入逻辑
- 后端:`backend/src/services/` — 身份证解析工具函数
**完成方式** ✅(与需求 1 合并实现)
- 模板必填字段加 `*` 号标注
- 性别字段改为选填,导入时从身份证号第 17 位自动识别(奇数=男,偶数=女)
- 若用户未填性别则自动识别,若已填则以用户填写为准
---
## 需求 11:薪税发薪批次创建流程优化 🔴
**问题描述**
- 上一批次未归档就无法创建新批次,不便于处理多笔发薪
- 创建发薪只能选全部人员或空白创建后逐个勾选,效率低
**优化方案**
1. **允许多个未归档批次并存**:移除「上一批次未归档不能创建新批次」的限制
2. **创建发薪时支持先选人再创建**
- 新增「选择发薪人员」步骤:可按部门筛选、多选员工、搜索勾选
- 确认人员后点击「创建发薪批次」,仅包含选中员工
3. 保留「全部人员」快捷选项,同时支持「自定义选择」模式
**涉及模块**
- 前端:`frontend/src/pages/Money.tsx` — 发薪批次创建流程
- 后端:`backend/src/routes/payroll2.routes.ts` — 批次创建接口支持指定员工列表
- 后端:`backend/src/services/payroll.service.ts` — 批次创建逻辑
**完成方式**
- 后端移除「当月存在未归档批次则拒绝创建」的限制,允许多个未归档批次并存
- `createBatchSchema` 新增 `mode: 'custom'``employeeIds: string[]` 可选参数
- 后端新增 `custom` 模式分支:仅拉入 `employeeIds` 指定的员工创建批次
- 前端创建批次弹窗新增「自定义选择员工」选项
- 新增 `CustomEmployeeSelector` 组件:支持按部门筛选、姓名搜索、全选/取消全选、勾选指定员工
- 前端移除创建按钮上的未归档批次拦截逻辑
- **归档时强制重算**:批次归档前遍历所有条目调用 `calcBatchEntry` 重算个税和社保,确保累计预扣计算包含先前已归档批次的数据,解决多批次并存时累计个税不准的问题
- `calcBatchEntry` 内部仍只查询 `status: 'ARCHIVED'` 的批次做累计计算
- DRAFT 批次创建时基于已归档历史数据预计算(可能不包含同月其他 DRAFT 批次)
- 归档时重算确保最终值准确:批次A先归档 → 批次B归档时重算会包含A的累计数据
- 手动覆盖的社保值通过 `overrideSocial` 参数保留
- 重算后更新批次汇总金额,返回重算条目数和错误信息
---
## 优先级汇总
| 优先级 | 需求编号 | 需求名称 | 状态 |
|--------|----------|----------|------|
| 🔴 高 | 1 | 花名册导入模板标注必填项 | ✅ 已完成 |
| 🔴 高 | 3 | 导入结果反馈不明确 | ✅ 已完成 |
| 🔴 高 | 4 | 证据链导出改为 Excel | ✅ 已完成 |
| 🔴 高 | 5 | 身份证后四位搜索修复 | ✅ 已完成 |
| 🔴 高 | 8 | 试用期员工区分与转正提醒 | ✅ 已完成 |
| 🔴 高 | 10 | 导入性别自动识别 | ✅ 已完成 |
| 🔴 高 | 11 | 薪税发薪批次流程优化 | ✅ 已完成 |
| 🟡 中 | 2 | 专项附加扣除批量导入 | ✅ 已完成 |
| 🟡 中 | 6 | 文本模板库功能完善 | ✅ 已完成 |
| 🟡 中 | 7 | 用工体检评分标准说明 | ✅ 已完成 |
| 🟡 中 | 9 | 考勤页面增加导入入口 | ✅ 已完成 |
---
*以上需求按用户反馈整理,🔴 高优先级和 🟡 中优先级需求已全部完成(2026-07-29)。*