# 20260815 优化清单

> 来源：`20260815-优化.csv`（共 31 条）
> 结合 TurboHR 当期功能梳理，按模块归类，标注根因 / 修复方向 / 优先级 / 涉及文件。
> 优先级：P0 紧急（影响业务正确性/数据丢失）｜P1 高（流程阻塞或合规风险）｜P2 中（体验/增强）｜P3 规划（新模块）

---

## 一、离职管理（问题 2-11）

### 问题 2：离职日期调整后未联动社保/公积金截止年月
- **现状**：`Termination.tsx:1334-1338` 社保截止、公积金截止为 `<Input type="month">` 手动填写，默认值取 `terminationDate.slice(0,7)`，但修改离职日期后不会重算，也无"15 日前/后"规则。
- **修复方向**：
  1. 增加"离职日期 → 社保/公积金截止月"自动推导规则：每月 15 日（含）前离职不缴当月、15 日后离职缴纳当月，截止月 = 离职月 - 0 或 -1。
  2. 阈值日期（15 日）做成系统设置可配置项（`org_settings.socialInsCutoffDay`，默认 15）。
  3. 离职日期变更时自动回填两个截止月，同时保留手动覆盖入口。
- **优先级**：P1 高
- **涉及文件**：`frontend/src/pages/Termination.tsx`、`backend/src/services/termination.service.ts`、`backend/prisma/schema.prisma`（org_settings 增字段）

### 问题 3：合规检查"是否已支付经济补偿金"硬阻断
- **现状**：合规检查为必勾才能进入下一步，未勾选时无法继续，且未保存的检查项不进入待办/风险提醒。
- **修复方向**：
  1. 将"必勾才能下一步"改为"未勾选可下一步，但自动写入待办事项 + 风险提醒"。
  2. 待办项关联 `termination_draft`，在 Dashboard/风险中心展示"XX 员工解聘未支付经济补偿金"。
  3. 提交审批时若仍存在未闭环必检项，给出强提示但不阻断（除非法定禁止情形，如孕期/工伤）。
- **优先级**：P1 高
- **涉及文件**：`Termination.tsx`（step 2 校验逻辑）、`backend/src/services/notification.service.ts`、`frontend/src/pages/Dashboard.tsx`

### 问题 4：费用结算新增"剩余年假天数"
- **现状**：费用结算步骤仅展示补偿金/代通知金/赔偿金，未涉及年假折算。
- **修复方向**：
  1. 费用结算区新增"剩余年假天数"字段，支持手动录入或调用考勤模块年假余额（若有）。
  2. 按规则计算未休年假折算工资：`日工资 × 剩余年假天数 × 300%`（未休部分）。
  3. 折算金额计入"合计应付"。
- **优先级**：P2 中
- **涉及文件**：`Termination.tsx`（step 3）、`backend/src/services/termination.service.ts`（cost 计算扩展）

### 问题 5：补偿月数支持 N / N+1 / 2N / 其他
- **现状**：`Termination.tsx:1442` 补偿月数取 `costResult.cappedMonths`（系统按工龄自动算 N），不允许选择其他模式。
- **修复方向**：
  1. 补偿月数改为下拉：N、N+1、2N、其他（自定义输入）。
  2. 选择"协商解除"时允许修改月数并实时重算补偿金。
  3. 选择"其他"时需填写说明，留痕到 `compensationBreakdown.adjustments`。
- **优先级**：P1 高
- **涉及文件**：`Termination.tsx`（step 3 补偿金区）、`backend/src/services/termination.service.ts`

### 问题 6：计算基数支持多种来源
- **现状**：`Termination.tsx:1443` 计算基数固定取 `costResult.cappedWage`（近 12 月平均工资，且有三倍社平工资封顶）。
- **修复方向**：
  1. 计算基数改为下拉：近 12 月平均工资（默认）、合同工资、其他（手动填写）。
  2. 切换来源后实时重算补偿金，并记录选用算法到草稿。
  3. "其他"需填写说明，受三倍社平封顶提示但不强制。
- **优先级**：P1 高
- **涉及文件**：`Termination.tsx`、`termination.service.ts`

### 问题 7：手动调整补偿金分项后合计未同步
- **现状**：`Termination.tsx:530` 注释提到"系统预估 + 手动调整差额"，但 `handleSave`（578 行附近）仍使用 `costResult.grandTotal`，未叠加 `compAdjustments`。20260803 问题 13 已识别但未闭环。
- **修复方向**：
  1. 实际合计 = `costResult.grandTotal + Σ(adjustments.to - adjustments.from)`，保存与确认页统一使用此值。
  2. 调整任一分项后实时刷新"合计应付"显示。
  3. 后端 `compensationBreakdown.adjustments` 已支持，前端需正确传递并回显。
- **优先级**：P0 紧急
- **涉及文件**：`Termination.tsx`（`handleSave`、确认步骤、step 3 合计显示）

### 问题 8：工作交接未完成无法下一步
- **现状**：`Termination.tsx:552-554` step 4 校验 `work_handover/equipment_return/access_revoke` 三项必须完成才能下一步。
- **修复方向**：
  1. 改为可下一步，未完成事项自动写入待办（关联离职草稿）。
  2. 交接清单前三项标注"离职必办"，未完成时在确认页和风险中心强提示。
  3. 待办在到达离职日期前持续提醒，超期升级为风险。
- **优先级**：P1 高
- **涉及文件**：`Termination.tsx`（step 4 校验）、`notification.service.ts`、`Dashboard.tsx`

### 问题 9：离职管理"新建解聘"并入花名册操作栏
- **现状**：花名册操作栏已有"离职"按钮（`Roster.tsx:734-746`，触发 `ResignModal` 创建 RESIGNATION 草稿），但"新建解聘"仍在离职管理列表页独立入口，且仅支持 RESIGNATION 类型。
- **修复方向**：
  1. 花名册操作栏"离职"按钮扩展为支持所有解聘类型（协商/过错/非过错/裁员/到期/违法），弹出类型选择后跳转 Termination 向导并预填员工。
  2. 离职管理列表页移除"新建解聘"按钮，仅保留草稿列表与审批。
- **优先级**：P1 高
- **涉及文件**：`Roster.tsx`、`roster/modals.tsx`（`ResignModal`）、`Termination.tsx`（支持 URL 参数预填）

### 问题 10：解聘驳回后修改内容未更新
- **现状**：驳回后重新修改解聘类型、金额等，系统未按新内容更新（疑似使用旧草稿快照或前端未刷新）。
- **修复方向**：
  1. 排查 `updateDraft` 是否正确覆盖 `reason/compensationBreakdown/terminationDate`。
  2. 驳回后再编辑走 `updateDraft`（而非新建），版本号 +1，旧版本留快照。
  3. 前端进入驳回草稿时强制重新拉取最新数据。
- **优先级**：P0 紧急
- **涉及文件**：`Termination.tsx`（编辑驳回草稿逻辑）、`backend/src/services/termination.service.ts`、`backend/src/routes/termination.routes.ts`

### 问题 11：违法解除降低补偿金后无合规风险提醒
- **现状**：选择 ILLEGAL（2N）后手动降低补偿金金额，`acknowledgeRisk` 仅在初始选择违法解除时提示，金额变动后不再校验。
- **修复方向**：
  1. 实际补偿金 < 法定 2N 时，强制弹出合规风险提醒，需勾选"已知风险并继续"才能下一步。
  2. 风险提醒记录到 `compensationBreakdown.riskAcknowledged`，留痕可审计。
  3. 同步推送风险中心。
- **优先级**：P0 紧急
- **涉及文件**：`Termination.tsx`（step 3 风险校验）、`risk-center`

---

## 二、用工办理 / 合同（问题 12-13、18、20-23、26）

### 问题 12：合同续签新增合同开始日期应为上一份结束日期 +1
- **现状**：`WorkProcess.tsx:93-99` RENEW 表单 `newStartDate` 为手动填写，无自动推导。
- **修复方向**：
  1. 选择员工后自动拉取最新已签合同，`newStartDate` 默认 = 上一份合同 `endDate + 1 天`。
  2. 允许手动覆盖，但偏离时提示。
- **优先级**：P1 高
- **涉及文件**：`WorkProcess.tsx`（RENEW 字段）、`backend/src/services/work-process.service.ts`

### 问题 13：合同结束日期早于开始日期未校验
- **现状**：`WorkProcess.tsx` 表单提交前无日期前后关系校验，已产生时间倒置数据。
- **修复方向**：
  1. 前端表单提交前校验 `endDate >= startDate`，否则阻断并提示。
  2. 后端 `work-process.service.ts` 增加同样校验，双保险。
  3. 历史倒置数据提供修复脚本/列表提示。
- **优先级**：P0 紧急
- **涉及文件**：`WorkProcess.tsx`、`work-process.service.ts`

### 问题 18：员工转正移植到花名册操作栏，替换发薪
- **现状**：花名册操作栏（`Roster.tsx:694-747`）有调薪/发薪/调部门/离职，无转正入口；转正仍在用工办理 CONFIRM 流程。
- **修复方向**：
  1. 操作栏"发薪"按钮（`Wallet`，711-720 行）替换为"转正"按钮（`CheckCircle`），点击弹出转正 Modal（转正日期 + 转正薪资）。
  2. 仅试用期员工（`probationInfo.isProbation`）显示转正按钮。
  3. 发薪入口保留在薪税管理模块。
- **优先级**：P1 高
- **涉及文件**：`Roster.tsx`、`roster/modals.tsx`（新增 `ConfirmModal`）

### 问题 19：转正薪资未回写花名册，未与用工协议匹配校验
- **现状**：CONFIRM 流程填写 `regularSalary` 后未同步到员工 `monthlySalary`，也未校验与已签合同薪资是否一致。
- **修复方向**：
  1. 转正完成后同步更新员工 `monthlySalary`，并在花名册明细展示"试用期薪资 → 转正薪资"变更记录。
  2. 校验转正薪资与最新合同 `monthlySalary` 是否一致，不一致时提示并支持发起合同变更流程（CHANGE）。
- **优先级**：P1 高
- **涉及文件**：`work-process.service.ts`（CONFIRM 完成回调）、`Roster.tsx`、`roster/SalaryInfo.tsx`

### 问题 20：开具证明移植到花名册操作栏
- **现状**：操作栏无开具证明入口，需进用工办理 INCOME_CERT/LEAVING_CERT 流程。
- **修复方向**：操作栏新增"证明"按钮（`FileText`），点击弹出证明类型选择（收入证明/离职证明/在职证明），复用 WorkProcess 的 INCOME_CERT/LEAVING_CERT 表单。
- **优先级**：P2 中
- **涉及文件**：`Roster.tsx`、`roster/modals.tsx`

### 问题 21：合同续签移植到花名册操作栏
- **现状**：操作栏无续签入口，批量续签在列表顶部（`Roster.tsx:444`），单人续签需进用工办理。
- **修复方向**：操作栏新增"续签"按钮（`Repeat`），仅合同即将到期（≤30 天）或已到期员工显示，点击跳转 WorkProcess RENEW 并预填员工。
- **优先级**：P2 中
- **涉及文件**：`Roster.tsx`、`WorkProcess.tsx`（支持 URL 参数预填）

### 问题 22：合同变更选择员工无法查询到对应合同
- **现状**：`WorkProcess.tsx:88-92` CHANGE 表单 `contractId` 为 `contract-select` 类型，但选择员工后未按员工过滤合同列表，导致查不到。
- **修复方向**：
  1. `contract-select` 组件接收 `employeeId` 参数，仅返回该员工的有效合同。
  2. 后端合同查询接口支持 `employeeId` 过滤。
- **优先级**：P1 高
- **涉及文件**：`WorkProcess.tsx`（contract-select 组件）、`backend/src/routes/contract.routes.ts`

### 问题 23：合同续签原合同 ID 无法查询，改为选择已存在合同
- **现状**：`WorkProcess.tsx:95` RENEW 表单 `oldContractId` 为 `text` 类型，需手动输入 UUID，无法查询。
- **修复方向**：将 `oldContractId` 改为 `contract-select`（同问题 22），选择员工后下拉展示该员工已存在合同。
- **优先级**：P1 高
- **涉及文件**：`WorkProcess.tsx`（RENEW 字段类型）

### 问题 26：去掉用工办理模块
- **现状**：侧边栏"团队"分组有"用工办理"入口（`SidebarNav.tsx:47`），承载 HIRE/ONBOARD/CONFIRM/CHANGE/RENEW/SUSPEND/INCOME_CERT/LEAVING_CERT/FLEXIBLE 等流程。
- **修复方向**：
  1. 将各流程入口下沉到花名册操作栏（转正/续签/变更/开具证明/入职）和独立页面（合同管理/电子签署）。
  2. 侧边栏移除"用工办理"菜单项，保留 WorkProcess 页面作为批量流程入口（或迁移到"更多"分组）。
  3. 需先完成问题 18/20/21/22/23 的入口下沉，再移除菜单。
- **优先级**：P2 中（依赖前置问题完成）
- **涉及文件**：`SidebarNav.tsx`、`Roster.tsx`、`WorkProcess.tsx`、`App.tsx`（路由）

---

## 三、花名册（问题 14-17、24-25）

### 问题 14：身份证号全域改为"证件号码"
- **现状**：`roster/modals.tsx:687`、`WorkProcess.tsx:60/109/132/140` 等多处 label 为"身份证号"。
- **修复方向**：全域搜索替换 label "身份证号" → "证件号码"，字段名 `idCardNumber` 保持不变（兼容历史数据），同时支持证件类型下拉（身份证/护照/港澳台通行证）。
- **优先级**：P2 中
- **涉及文件**：`roster/modals.tsx`、`WorkProcess.tsx`、`Roster.tsx`（搜索 placeholder）、`SpecialStatus.tsx` 等

### 问题 15：添加员工根据证件号码进行年龄合规筛查
- **现状**：`roster/modals.tsx:557` 已根据身份证号自动计算性别，未做年龄校验。
- **修复方向**：
  1. 解析证件号码出生日期，计算年龄。
  2. 年龄 < 16 岁禁止录入（童工红线），强提示并阻断。
  3. 年龄 ≥ 60（男）/55（女干部）/50（女工人）提示已达法定退休年龄，确认后允许录入但标记"退休返聘"。
- **优先级**：P1 高
- **涉及文件**：`roster/modals.tsx`（`handleIdCardChange`）

### 问题 16：编辑入职日期后状态未变更
- **现状**：花名册明细编辑入职日期后，员工状态未联动（如改为下月 1 日入职，状态应从"在职"变为"待入职"）。
- **修复方向**：
  1. 编辑入职日期时，若新入职日期 > 今天，状态自动设为 `PENDING_ONBOARD`（待入职）；若 ≤ 今天，设为 `ACTIVE`。
  2. 状态变更需二次确认，避免误操作。
  3. 变更记录留痕到员工档案。
- **优先级**：P1 高
- **涉及文件**：`roster/BasicInfo.tsx`、`backend/src/services/employee.service.ts`

### 问题 17：录入手机号查重
- **现状**：`roster/modals.tsx:702` 手机号为选填，无查重；身份证号已有查重（691 行）。
- **修复方向**：
  1. 手机号录入时调用查重接口，已存在则提示"该手机号已用于 XX 人员"。
  2. 允许继续保存（一人多号/家庭号场景），但强提示确认。
- **优先级**：P2 中
- **涉及文件**：`roster/modals.tsx`、`backend/src/routes/employee.routes.ts`（新增手机号查重接口）

### 问题 24：花名册多选增加批量转正
- **现状**：`Roster.tsx:444-447` 批量操作仅有"批量续签""批量解聘"，无批量转正。
- **修复方向**：
  1. 多选后新增"批量转正"按钮，仅对试用期员工生效。
  2. 弹窗统一填写转正日期（默认今天）和转正薪资（可按原薪资倍数/手动逐人填写）。
  3. 调用后端批量转正接口，复用问题 18 的转正逻辑。
- **优先级**：P2 中
- **涉及文件**：`Roster.tsx`、`roster/modals.tsx`、`backend/src/services/employee.service.ts`

### 问题 25：花名册多选增加批量开具证明
- **现状**：无批量开具证明入口。
- **修复方向**：
  1. 多选后新增"批量开具证明"按钮，选择证明类型（在职/收入）后批量生成。
  2. 支持批量下载（ZIP）或逐个下载。
- **优先级**：P2 中
- **涉及文件**：`Roster.tsx`、`backend/src/services/work-process.service.ts`（批量生成接口）

---

## 四、薪税管理（问题 28）

### 问题 28：补偿金批次经济补偿金发放数据读取错误
- **现状**：`money/BatchTab.tsx:110` 批次类型支持 `SEVERANCE`（补偿金），但创建补偿金批次时经济补偿金发放数据读取逻辑有误（疑似读取了工资数据或未关联离职草稿的 `compensationBreakdown`）。
- **修复方向**：
  1. 排查 `createBatch` 当 `type=SEVERANCE` 时的数据源，应从已审批通过的 `termination_draft` 读取 `compensationBreakdown.grandTotal`。
  2. 校验员工范围：仅包含有未发放补偿金的离职员工。
  3. 增加预览页展示每位员工的补偿金明细，确认后再创建批次。
- **优先级**：P0 紧急
- **涉及文件**：`money/BatchTab.tsx`、`backend/src/services/payroll.service.ts`（SEVERANCE 分支）

---

## 五、特殊员工（问题 29）

### 问题 29：男职工应无法选择三期
- **现状**：`SpecialStatus.tsx:123` 默认 `type: 'PREGNANCY'`，新增/编辑表单未根据员工性别过滤类型，男职工也可选"三期"。
- **修复方向**：
  1. 选择员工后，若 `gender === '男'`，类型下拉移除"三期"选项或置灰并提示"三期仅适用于女性员工"。
  2. 后端保存时增加校验，男职工 + PREGNANCY 组合拒绝并返回 400。
- **优先级**：P1 高
- **涉及文件**：`SpecialStatus.tsx`（表单 type 下拉）、`backend/src/services/special-status.service.ts`

---

## 六、系统设置 / 组织架构（问题 27）

### 问题 27：增加简单组织架构，支持三步以内审批流转
- **现状**：系统无组织架构模块，`LeaveApproval.tsx:90` 仅有简单审批，无层级流转；`settingsApi.org()` 仅返回企业基本信息。当前员工仅有 `department`（字符串）和 `position`（字符串，前端 label "职务/岗位"）两个字段，无上下级关系。
- **职位/岗位设计决策**：
  - **现状**：数据库只有一个 `position` 字段（`schema.prisma:225`，注释"岗位"），前端 label 统一为"职务/岗位"（`roster/modals.tsx:686`、`roster/BasicInfo.tsx:153/328`），已合并为一个字段。
  - **建议方案 A（推荐，保留一个字段）**：维持 `position` 单字段，label 保持"职务/岗位"。组织架构中"岗位"作为独立实体管理（岗位字典，含岗位名称、职级、编制人数），员工 `position` 关联到岗位字典。优点：改动小，兼容历史数据，符合当前使用习惯。
  - **方案 B（拆分两个字段）**：新增 `jobTitle`（职位，如"经理/主管/专员"）+ `position`（岗位，如"前端工程师"）。优点：职级体系更清晰；缺点：需改 schema + 全域表单 + 历史 position 数据需清洗归类，工作量大。
  - **结论**：建议采用方案 A，组织架构模块中"岗位"独立建表（`Position` 字典），员工 `position` 字段值关联岗位字典 ID 或保持文本（兼容旧数据），审批流按"直属上级 → 部门负责人"两级流转，无需引入职级。
- **修复方向**：
  1. 系统设置新增"组织架构"子页：树形部门（`Department` 自引用 parent）+ 岗位字典（`Position`，含名称/所属部门/编制）+ 上下级关系（`Employee.supervisorId`）。
  2. 新建简单审批流配置：最多 3 步（发起人 → 直属上级 → 部门负责人），支持按流程类型（休假/离职/调薪）配置是否启用某步。
  3. 现有 `LeaveApproval` 接入审批流引擎，离职/调薪等流程可选启用。
  4. 数据模型：`Department`（树形，parent 自引用）、`Position`（岗位字典）、`Employee.supervisorId`、`ApprovalFlow`（type + steps）。
- **优先级**：P3 规划（新模块，建议单独排期）
- **涉及文件**：`Settings.tsx`、新增 `pages/OrgChart.tsx`、`backend/prisma/schema.prisma`、`backend/src/services/approval.service.ts`

---

## 七、全域问题（问题 1、30、31）

### 问题 1："劳动合同"调整为更宽泛的"用工关系"
- **现状**：系统多处文案使用"劳动合同"（合同管理、离职管理、WorkProcess 等）。
- **修复方向**：
  1. 全域文案审计：将面向用户的"劳动合同"在合适场景改为"用工关系"或"用工协议"（涵盖劳动合同/劳务协议/实习协议/灵活用工协议）。
  2. 数据层 `Contract` 模型保持不变，新增 `contractCategory` 字段区分劳动关系类型。
  3. 注意法律文书模板中的"劳动合同"为法定术语，不可改。
- **优先级**：P2 中
- **涉及文件**：`SidebarNav.tsx`、`Contracts.tsx`、`WorkProcess.tsx`、`Termination.tsx` 等文案

### 问题 30：全域保存草稿后部分录入数据未保存（BUG）
- **现状**：多个流程页面支持"保存草稿"，但部分字段（如 `compAdjustments`、`handoverItems` 备注、`checklistOverrides`）未持久化。
- **修复方向**：
  1. 排查各流程 `saveDraft` 的 payload，确保覆盖所有前端 state。
  2. 后端 `draft` 表 schema 检查是否有字段缺失（`compensationBreakdown.adjustments`、`handoverItems.remark` 等）。
  3. 增加"草稿完整性校验"：保存后立即回读对比，缺失字段告警。
  4. 重点排查：Termination（补偿金调整/交接备注）、WorkProcess（自定义字段）。
- **优先级**：P0 紧急
- **涉及文件**：`Termination.tsx`（`handleSaveDraft`）、`WorkProcess.tsx`、`backend/src/services/termination.service.ts`、`backend/src/services/work-process.service.ts`

### 问题 31：单立户客服端

#### 已实现部分（平台管理端，代码完整可运行）

系统已有完整的"平台管理端"（Platform），前后端代码均已实现：

**前端（4 页面 + 1 侧边栏）**：
- `frontend/src/pages/platform/PlatformLogin.tsx` — 独立登录页
- `frontend/src/pages/platform/PlatformDashboard.tsx` — 数据总览（企业数/用户数/员工数/合同数/工资条数 + 套餐分布 + 最近注册企业）
- `frontend/src/pages/platform/PlatformOrgs.tsx` — 企业租户管理（创建/搜索/编辑套餐/删除/管理员账号管理）
- `frontend/src/pages/platform/PlatformUsers.tsx` — 用户管理（启用/禁用）
- `frontend/src/components/layout/PlatformSidebar.tsx` — 独立侧边栏（带 ADMIN 徽章）
- `frontend/src/lib/api-services.ts:938-965` — `platformApi` 完整定义
- `frontend/src/App.tsx:217-220` — 四条路由注册 + `PlatformRoute` 角色校验（`SUPER_ADMIN`）

**后端（1 路由文件 437 行 + 1 schema）**：
- `backend/src/routes/platform.routes.ts` — 完整实现 11 个接口：
  - `GET /platform/dashboard` — 平台总览数据
  - `GET /platform/orgs` — 企业列表（分页+搜索+套餐筛选）
  - `POST /platform/orgs` — 创建企业（含管理员账号自动创建）
  - `GET /platform/orgs/:id` — 企业详情（含用户列表）
  - `PUT /platform/orgs/:id` — 编辑企业（套餐/上限/联系人）
  - `PUT /platform/orgs/:id/admin` — 编辑企业管理员（姓名/手机号/重置密码）
  - `DELETE /platform/orgs/:id` — 删除企业（级联）
  - `GET /platform/users` — 全平台用户列表
  - `PUT /platform/users/:id/toggle` — 启用/禁用用户
  - `GET /platform/admins` — 平台管理员列表
  - `POST /platform/admins` — 创建平台管理员
- `backend/src/schemas/platform.schema.ts` — 入参校验
- `backend/src/middleware/auth.ts` — `platformAdminMiddleware` 权限校验

**数据模型**：
- `Organization` 模型支持多租户（`plan`/`maxEmployees`/`city`/`contactName`/`contactPhone`）
- `User.role` 含 `SUPER_ADMIN` 角色，`orgId` 为 null（平台管理员不归属任何租户）
- `backend/prisma/seed-multi-org.ts` — 多租户种子数据

**结论**：单立户服务（开户+租户管理+用户管理+数据总览）**已完整实现**，CSV 标注为"调整"类型也印证了该功能已存在。

#### 可增强部分（客服工作台，尚未实现）

当前平台管理端是"运营管理后台"，定位为超级管理员/运营使用。如需扩展为客服人员日常服务客户的工作台，以下功能尚未实现：

| 增强项 | 现状 | 说明 |
|--------|------|------|
| 工单管理 | 缺失 | 无 `Ticket` 模型、无工单页面，客服无法接收/分派/跟进客户问题 |
| 客户会话 | 缺失 | 无会话模块，客服无法与客户企业管理员实时沟通或留言 |
| 租户数据穿透 | 缺失 | `SUPER_ADMIN` 仅能看租户列表和统计，无法穿透查看指定租户的花名册/合同/薪税/风险等业务数据 |
| 协助操作 | 部分已有 | 管理员重置密码已有，代客户发起流程/调整套餐等未实现 |
| AI 辅助 | 缺失 | 当前 AI 仅在企业端，客服侧无 AI 问答辅助 |
| 操作日志 | 缺失 | 当前 `AuditLog` 仅在企业端，客服操作无留痕 |

**增强修复方向（如需）**：
1. 新增角色 `SUPPORT`（客服），独立路由 `/support/*`，独立登录页 `/support/login`。
2. 客服端侧边栏含：工单中心、客户会话、租户数据查看、协助操作、AI 辅助、操作日志。
3. 数据模型新增：`Ticket`（工单：标题/内容/状态/优先级/归属租户/处理人）、`TicketMessage`（工单回复）、`ChatSession`（客户会话）。
4. 租户数据穿透：客服选择租户后，以"只读+代操作"模式访问该租户的业务数据（复用现有 API，请求头带 `X-Support-Tenant-Id`，后端中间件切换租户上下文）。
5. AI 辅助复用现有 AI 接口，独立会话隔离。
6. MVP 建议：先做工单 + 租户数据查看 + AI 辅助三项。

- **优先级**：核心功能已完成；增强部分 P3 规划（新模块，建议单独排期）
- **涉及文件（增强部分）**：新增 `frontend/src/pages/support/*`、`frontend/src/components/layout/SupportSidebar.tsx`、`backend/prisma/schema.prisma`（Ticket/ChatSession 模型）、`backend/src/routes/support.routes.ts`、`backend/src/middleware/support-tenant.ts`

---

## 优先级汇总

| 优先级 | 问题 | 说明 |
|--------|------|------|
| **P0 紧急** | 7、10、11、13、28、30 | 数据丢失/业务正确性/合规风险 |
| **P1 高** | 2、3、5、6、8、9、12、15、16、18、19、22、23、29 | 流程阻塞或合规校验缺失 |
| **P2 中** | 1、4、14、17、20、21、24、25、26 | 体验优化/功能增强 |
| **P3 规划** | 27、31增强 | 新模块（组织架构+审批流 / 客服工作台增强），需单独排期 |
| **已完成** | 31核心 | 单立户服务（平台管理端）已完整实现，前后端代码可运行 |

---

## 建议执行顺序

1. **第一批（P0，立即）**：问题 30（草稿丢失）→ 问题 7（补偿金合计）→ 问题 10（驳回未更新）→ 问题 11（违法解除风险）→ 问题 13（合同日期校验）→ 问题 28（补偿金批次数据）
2. **第二批（P1，本迭代）**：离职管理联动（2/3/5/6/8/9）→ 花名册校验（15/16）→ 用工办理入口下沉（18/19/22/23）→ 特殊员工性别校验（29）
3. **第三批（P2，排期）**：花名册批量操作（24/25）→ 文案统一（1/14）→ 入口下沉收尾（20/21/26）→ 年假折算（4）→ 手机号查重（17）
4. **第四批（P3，规划）**：组织架构与审批流（27）→ 客服工作台增强（31增强，MVP = 工单 + 租户数据查看 + AI 辅助）
   - 问题 31 核心功能（单立户服务/平台管理端）已完整实现，无需开发

---

## 备注

- 本清单基于当期代码梳理，部分"根因"为基于代码静态分析的推断，实际修复前需运行复现确认。
- 涉及数据库 schema 变更的（问题 2/27/31），需走 migration + 回滚方案，符合数据 8 铁律。
- 涉及文案全域替换的（问题 1/14），需同步更新 HelpModal、OnboardingGuide 等帮助文案。
- 问题 26（去掉用工办理模块）依赖问题 18/20/21/22/23 完成，不可先行移除。
