# 20260815 优化批次 · 用户测试指南

> 面向测试人员的功能验证手册。覆盖 5 个批次共 43 项任务的完整测试用例。
> 测试环境：https://on.hr8ai.top/
> 测试账号：管理员 `13800000010 / 12345678`
> 文档版本：2026-08-16

---

## 目录

- [测试前准备](#测试前准备)
- [第一批 P0 紧急（6 项）](#第一批-p0-紧急6-项)
- [第二批 P1 高（14 项）](#第二批-p1-高14-项)
- [第三批 P2 中（9 项）](#第三批-p2-中9-项)
- [第四批 P3 规划（2 项）](#第四批-p3-规划2-项)
- [第五批 电子签署（12 项）](#第五批-电子签署12-项)
- [测试结果记录模板](#测试结果记录模板)

---

## 测试前准备

### 账号与权限

| 角色 | 账号 | 用途 |
|------|------|------|
| 管理员 | `13800000010 / 12345678` | 全部管理端功能测试 |
| 员工 | 通过管理员生成自动登录令牌 | 员工端签署功能测试 |

### 测试数据准备

1. **测试员工**：刘大壮（男，技术部，在职，月薪 ¥8500，有劳动合同）
2. **女员工**：李娜（女，技术部，在职）— 用于三期测试
3. **试用期员工**：需在花名册中确认有 `probationInfo.isProbation === true` 的员工
4. **合同即将到期员工**：合同结束日期距今 ≤ 30 天的员工

### 通用测试步骤

1. 登录管理端：访问 https://on.hr8ai.top/ ，使用管理员账号登录
2. 每个测试用例完成后，记录实际结果（通过/失败/有偏差）
3. 发现问题时截图保存，记录复现步骤

---

## 第一批 P0 紧急（6 项）

### TASK-001 · 草稿保存完整性

**前置条件**：花名册中有在职员工

**测试步骤**：

1. 进入「离职管理」→ 点击「新建解聘」（或从花名册操作栏点击「离职」→ 选择非主动离职类型）
2. 选择员工，填写至 step 3（补偿金）
3. 在补偿金区域手动调整任一分项金额
4. 切换到 step 4（工作交接），在交接清单的「备注」列填写文字（如"测试备注001"）
5. 点击「保存草稿」
6. 退出向导，回到离职管理列表，点击该草稿重新进入
7. 检查 step 3 的补偿金调整记录和 step 4 的交接备注是否完整保留

**预期结果**：
- ✅ 补偿金手动调整记录完整回读
- ✅ 工作交接清单的备注文字完整回读
- ✅ 合规检查的覆盖原因（如有填写）完整回读

---

### TASK-002 · 手动调整补偿金分项后合计同步

**前置条件**：已进入解聘向导 step 3

**测试步骤**：

1. 查看系统预估补偿金（如 ¥50000）
2. 手动调整 severance（经济补偿金）从 ¥50000 改为 ¥45000
3. 观察「合计应付」是否实时更新为 ¥45000
4. 点击「保存草稿」→ 重新进入 → 检查合计是否仍为 ¥45000
5. 进入确认步骤，检查是否显示"系统预估 ¥X + 手动调整 ¥Y = 实际补偿 ¥Z"

**预期结果**：
- ✅ 调整分项后「合计应付」实时刷新
- ✅ 保存后回读合计值正确
- ✅ 确认页显示系统预估 + 手动调整 = 实际补偿

---

### TASK-003 · 解聘驳回后修改内容更新

**前置条件**：已创建解聘草稿

**测试步骤**：

1. 创建解聘草稿（协商解除，补偿金 ¥50000）
2. 提交审批
3. 由管理员在审批列表中驳回该草稿
4. 回到草稿列表，点击该驳回草稿重新编辑
5. 修改解聘类型为「过错解除」，补偿金改为 ¥0
6. 保存 → 重新进入检查

**预期结果**：
- ✅ 驳回后可重新编辑（不是新建）
- ✅ 修改的解聘类型和补偿金正确覆盖
- ✅ 旧版本留有快照可查看

---

### TASK-004 · 违法解除降低补偿金风险提醒

**前置条件**：已进入解聘向导 step 3

**测试步骤**：

1. 选择解聘类型为「违法解除」
2. 查看法定 2N 金额（如 ¥100000）
3. 手动将实际补偿金改为 ¥80000（低于 2N）
4. 观察是否弹出合规风险提醒
5. 不勾选「已知风险并继续」→ 尝试下一步 → 应被阻断
6. 勾选「已知风险并继续」→ 可进入下一步
7. 进入 Dashboard 或风险中心，检查是否生成风险项

**预期结果**：
- ✅ 实际补偿金 < 2N 时强制弹出风险提醒
- ✅ 必须勾选「已知风险并继续」才能下一步
- ✅ Dashboard/风险中心出现对应风险项

---

### TASK-005 · 合同结束日期早于开始日期校验

**前置条件**：无

**测试步骤**：

1. **前端校验**：
   - 进入「批量流程」（原用工办理）→ 选择「签订合同」
   - 选择员工，填写合同开始日期 `2026-06-01`，结束日期 `2026-05-31`
   - 点击提交 → 应被阻断并提示"合同结束日期不能早于合同开始日期"

2. **续签校验**：
   - 选择「合同续签」→ 选择员工
   - 填写新合同开始日期 `2026-06-01`，结束日期 `2026-05-31`
   - 提交 → 应被阻断

3. **正常日期**：
   - 开始日期 `2026-06-01`，结束日期 `2026-12-31` → 应通过

**预期结果**：
- ✅ 倒置日期被前端阻断并提示
- ✅ 正常日期可提交

---

### TASK-006 · 补偿金批次数据源

**前置条件**：有已审批通过的离职记录且含补偿金

**测试步骤**：

1. 进入「薪税管理」→ 批次管理
2. 创建新批次，类型选择「补偿金」（SEVERANCE）
3. 选择月份 → 查看预览页
4. 检查预览中每位员工的补偿金明细（补偿金/代通知金/赔偿金/合计）
5. 确认创建批次
6. 检查批次数据是否与离职草稿的补偿金一致

**预期结果**：
- ✅ 预览页展示补偿金明细
- ✅ 数据来源为离职草稿的 `compensationBreakdown.grandTotal`（非工资数据）
- ✅ 仅包含已审批通过且有补偿金的离职员工

---

## 第二批 P1 高（14 项）

### TASK-007 · 离职日期联动社保/公积金截止月

**前置条件**：系统设置中 `socialInsCutoffDay` 默认为 15

**测试步骤**：

1. 创建离职草稿，离职日期填写 `2026-08-10`（10 日 < 15 日）
2. 检查社保截止月是否自动填为 `2026-07`
3. 检查公积金截止月是否自动填为 `2026-07`
4. 修改离职日期为 `2026-08-20`（20 日 > 15 日）
5. 检查社保截止月是否自动变为 `2026-08`
6. 手动修改社保截止月 → 应提示"与自动推导不一致"

**预期结果**：
- ✅ 15 日前离职 → 截止月 = 离职月 - 1
- ✅ 15 日后离职 → 截止月 = 离职月
- ✅ 手动覆盖时有提示

---

### TASK-008 · 合规检查软阻断 + 待办

**前置条件**：已进入解聘向导 step 2（合规检查）

**测试步骤**：

1. 在合规检查步骤，不勾选「已支付经济补偿金」
2. 点击下一步 → 应可进入（不硬阻断）
3. 完成解聘草稿保存
4. 进入 Dashboard → 检查是否出现待办"XX 解聘未支付经济补偿金"
5. 检查法定禁止情形（如孕期女职工）是否仍硬阻断

**预期结果**：
- ✅ 未勾选 required 项可下一步（软阻断）
- ✅ Dashboard 出现对应待办
- ✅ 法定禁止情形仍硬阻断

---

### TASK-009 · 补偿月数支持 N / N+1 / 2N / 其他

**前置条件**：已进入解聘向导 step 3

**测试步骤**：

1. 查看系统默认推荐月数 N（如 N=3）
2. 将补偿月数下拉改为「N+1」→ 月数变为 4 → 补偿金实时重算
3. 改为「2N」→ 月数变为 6 → 补偿金重算
4. 改为「其他」→ 输入 5 + 填写说明 → 补偿金重算
5. 保存草稿 → 重新进入 → 检查月数模式是否保留

**预期结果**：
- ✅ 下拉支持 N / N+1 / 2N / 其他
- ✅ 切换后补偿金实时重算
- ✅ 「其他」需填写说明
- ✅ 保存后月数模式可回读

---

### TASK-010 · 计算基数支持多种来源

**前置条件**：已进入解聘向导 step 3

**测试步骤**：

1. 默认计算基数为「近 12 月平均工资」（如 ¥10000）
2. 切换为「合同工资」（如 ¥8000）→ 补偿金实时重算
3. 切换为「其他」→ 手动输入 ¥12000 + 说明 → 重算
4. 检查近 12 月平均工资是否显示三倍社平封顶后的值
5. 保存草稿 → 重新进入 → 检查基数来源是否保留

**预期结果**：
- ✅ 下拉支持 3 种来源
- ✅ 切换后补偿金实时重算
- ✅ 基数来源可回读

---

### TASK-011 · 工作交接软阻断 + 待办

**前置条件**：已进入解聘向导 step 4（工作交接）

**测试步骤**：

1. 不勾选「工作交接完成」「设备归还」「权限收回」三项
2. 点击下一步 → 应可进入（不硬阻断）
3. 检查确认页是否提示"3 项未完成"
4. 保存草稿 → 进入 Dashboard → 检查是否出现待办

**预期结果**：
- ✅ 未完成交接可下一步（软阻断）
- ✅ 确认页强提示未完成项
- ✅ Dashboard 出现待办

---

### TASK-012 · 花名册操作栏离职入口

**前置条件**：花名册中有在职员工

**测试步骤**：

1. 进入「花名册」
2. 点击某员工操作栏的「离职」按钮
3. 检查是否弹出解聘类型选择（协商/过错/非过错/裁员/到期/违法/主动离职）
4. 选择「协商解除」→ 应跳转解聘向导，员工和类型已预填
5. 选择「主动离职」→ 应走快速离职流程
6. 进入「离职管理」列表页 → 检查是否已移除「新建解聘」按钮

**预期结果**：
- ✅ 操作栏「离职」按钮弹出类型选择
- ✅ 非主动离职跳转向导并预填
- ✅ 主动离职走快速流程
- ✅ 列表页无「新建解聘」按钮

---

### TASK-013 · 合同续签开始日期自动推导

**前置条件**：员工有已签合同且结束日期明确

**测试步骤**：

1. 进入「批量流程」→ 选择「合同续签」
2. 选择员工（如刘大壮，合同结束日期 2025-02-27）
3. 检查新合同开始日期是否自动填为 `2025-02-28`（结束日期 + 1 天）
4. 手动修改开始日期 → 应提示"建议开始日期为 YYYY-MM-DD"

**预期结果**：
- ✅ 新合同开始日期默认 = 上一份合同结束日期 + 1 天
- ✅ 偏离时有提示
- ✅ 无历史合同时默认为今天

---

### TASK-014 · 添加员工年龄合规筛查

**前置条件**：无

**测试步骤**：

1. 进入「花名册」→ 点击「添加员工」
2. 输入身份证号 `110105201501011234`（出生 2015-01-01，11 岁）
3. 检查是否阻断提示"禁止使用童工（未满 16 周岁）"
4. 输入身份证号 `110105196501011234`（出生 1965-01-01，61 岁男）
5. 检查是否提示"已达法定退休年龄" → 确认后可继续录入

**预期结果**：
- ✅ 童工（< 16 岁）阻断保存
- ✅ 退休年龄提示但允许确认后录入

---

### TASK-015 · 编辑入职日期后状态联动

**前置条件**：花名册中有在职员工

**测试步骤**：

1. 进入花名册 → 点击某在职员工查看详情
2. 编辑入职日期改为下月 1 日（未来日期）
3. 检查是否弹出确认窗"入职日期变更将导致状态从 在职 变为 待入职，是否继续？"
4. 确认 → 状态应变为「待入职」
5. 再次编辑入职日期改为今天
6. 检查是否弹窗确认 → 确认后状态变为「在职」

**预期结果**：
- ✅ 入职日期 > 今天 → 状态变「待入职」+ 二次确认
- ✅ 入职日期 ≤ 今天 → 状态变「在职」+ 二次确认

---

### TASK-016 · 花名册操作栏转正按钮

**前置条件**：花名册中有试用期员工

**测试步骤**：

1. 进入花名册
2. 找到试用期员工（状态标注试用期）
3. 检查操作栏是否显示「转正」按钮（CheckCircle 图标）
4. 非试用期员工不应显示转正按钮
5. 点击「转正」→ 弹出转正 Modal
6. 填写转正日期 + 转正薪资 → 确认
7. 检查员工状态是否变为正式

**预期结果**：
- ✅ 仅试用期员工显示转正按钮
- ✅ 转正 Modal 含日期和薪资
- ✅ 转正后状态变为正式

---

### TASK-017 · 转正薪资回写 + 合同一致性校验

**前置条件**：试用期员工有合同记录

**测试步骤**：

1. 试用期薪资 ¥8000 的员工，转正填写 ¥10000
2. 确认转正
3. 回到花名册 → 检查员工薪资是否更新为 ¥10000
4. 查看薪资变更记录是否显示"试用期 ¥8000 → 转正 ¥10000"
5. 如合同薪资为 ¥9000 → 检查是否提示"转正薪资 ¥10000 与合同薪资 ¥9000 不一致，是否发起合同变更？"

**预期结果**：
- ✅ 转正后员工薪资同步更新
- ✅ 薪资变更记录可查
- ✅ 与合同薪资不一致时提示

---

### TASK-018 · 合同变更/续签按员工过滤合同列表

**前置条件**：员工有已签合同

**测试步骤**：

1. 进入「批量流程」→ 选择「合同变更」
2. 选择员工 A → 点击原合同下拉
3. 检查下拉是否仅显示员工 A 的合同（非全部合同）
4. 下拉项应显示合同名称 + 起止日期 + 状态
5. 选择「合同续签」→ 选择员工 A → 原合同下拉同样仅显示员工 A 的合同

**预期结果**：
- ✅ 合同下拉按员工过滤
- ✅ 不再需要手动输入 UUID
- ✅ 下拉显示完整合同信息

---

### TASK-019 · 男职工无法选择三期

**前置条件**：花名册中有男职工和女职工

**测试步骤**：

1. 进入「特殊状态」→ 点击新增
2. 选择男职工（如刘大壮）
3. 检查类型下拉中「三期」选项是否置灰或移除
4. 置灰时应提示"三期仅适用于女性员工"
5. 选择女职工（如李娜）→ 「三期」选项应可选
6. 尝试通过 API 直接传男职工 + PREGNANCY → 应返回 400

**预期结果**：
- ✅ 男职工不可选三期
- ✅ 女职工可选三期
- ✅ 后端有双保险校验

---

## 第三批 P2 中（9 项）

### TASK-020 · "劳动合同"调整为"用工关系"

**测试步骤**：

1. 全域检查面向用户的菜单、标题、提示文案
2. 侧边栏、花名册、合同页面中"劳动合同"应改为"用工关系"或"用工协议"
3. 法律文书模板中的"劳动合同"保持不变（法定术语）
4. 进入合同详情 → 检查是否有「合同分类」字段（劳动合同/劳务协议/实习协议/灵活用工）

**预期结果**：
- ✅ 面向用户文案已替换
- ✅ 法律模板保持不变
- ✅ 合同分类字段存在

---

### TASK-021 · 费用结算新增剩余年假天数

**前置条件**：已进入解聘向导 step 3

**测试步骤**：

1. 在费用结算区找到「剩余年假天数」字段
2. 输入 5 天
3. 检查是否自动计算未休年假折算工资
4. 公式：日工资 = 月工资 / 21.75，折算 = 日工资 × 天数 × 300%
5. 如月工资 ¥10000 → 日工资 ¥460 → 折算 ¥6900
6. 检查折算金额是否计入「合计应付」
7. 确认页和文书中是否展示年假折算明细

**预期结果**：
- ✅ 年假天数可录入
- ✅ 按 300% 规则折算
- ✅ 计入合计应付
- ✅ 确认页展示明细

---

### TASK-022 · 身份证号全域改为"证件号码"

**测试步骤**：

1. 全域搜索面向用户的 label "身份证号"
2. 花名册添加/编辑员工、批量流程、特殊状态等页面 → label 应为"证件号码"
3. 检查是否有证件类型下拉（身份证/护照/港澳台通行证/其他）
4. 选择「身份证」→ 输入 18 位号码 → 保留校验 + 自动推导性别/年龄
5. 选择「护照」→ 输入非 18 位号码 → 应跳过 18 位校验
6. 搜索框 placeholder 应同步更新

**预期结果**：
- ✅ 全域 label 改为"证件号码"
- ✅ 证件类型下拉可用
- ✅ 非身份证类型跳过 18 位校验

---

### TASK-023 · 录入手机号查重

**前置条件**：花名册中已有员工手机号

**测试步骤**：

1. 进入花名册 → 添加员工
2. 输入已存在的手机号（如某员工的手机号）
3. 检查是否提示"该手机号已用于 XX 人员"
4. 允许继续保存（一人多号场景）
5. 输入不存在的手机号 → 无提示
6. 输入格式错误的手机号（非 11 位）→ 格式校验提示

**预期结果**：
- ✅ 已存在手机号有提示
- ✅ 允许继续保存
- ✅ 格式校验生效

---

### TASK-024 · 花名册操作栏开具证明

**前置条件**：花名册中有在职员工

**测试步骤**：

1. 进入花名册
2. 点击某员工操作栏的「证明」按钮（FileText 图标）
3. 检查是否弹出证明类型选择（收入证明/离职证明/在职证明）
4. 选择「收入证明」→ 填写信息 → 生成
5. 检查是否支持下载/打印

**预期结果**：
- ✅ 操作栏有「证明」按钮
- ✅ 弹出类型选择
- ✅ 生成后可下载

---

### TASK-025 · 花名册操作栏合同续签

**前置条件**：有合同即将到期（≤ 30 天）或已到期的员工

**测试步骤**：

1. 进入花名册
2. 找到合同即将到期的员工
3. 检查操作栏是否显示「续签」按钮
4. 合同未到期的员工不应显示续签按钮
5. 点击「续签」→ 应跳转续签流程，员工已预填
6. 检查新合同开始日期是否自动推导

**预期结果**：
- ✅ 仅即将到期/已到期员工显示续签按钮
- ✅ 点击后员工已预填
- ✅ 开始日期自动推导

---

### TASK-026 · 花名册多选批量转正

**前置条件**：花名册中有至少 2 名试用期员工

**测试步骤**：

1. 进入花名册 → 勾选多名试用期员工
2. 检查批量操作栏是否出现「批量转正」按钮
3. 点击「批量转正」→ 弹窗填写统一转正日期 + 转正薪资
4. 确认 → 检查所有选中员工状态是否均变为正式
5. 混选试用期 + 非试用期员工 → 批量转正仅对试用期员工生效

**预期结果**：
- ✅ 多选后显示批量转正按钮
- ✅ 统一填写日期和薪资
- ✅ 仅试用期员工生效

---

### TASK-027 · 花名册多选批量开具证明

**前置条件**：花名册中有多名员工

**测试步骤**：

1. 进入花名册 → 勾选多名员工
2. 检查批量操作栏是否出现「批量开具证明」按钮
3. 点击 → 选择证明类型（在职/收入/离职）
4. 确认 → 批量生成
5. 检查生成数量是否与选中人数一致
6. 检查是否支持批量下载或逐个下载

**预期结果**：
- ✅ 多选后显示批量证明按钮
- ✅ 选择类型后批量生成
- ✅ 生成数量正确

---

### TASK-028 · 去掉用工办理菜单

**测试步骤**：

1. 查看左侧侧边栏 → 应无「用工办理」菜单项
2. 确认各流程入口已下沉到花名册操作栏：
   - 转正 → 操作栏「转正」按钮
   - 续签 → 操作栏「续签」按钮
   - 变更 → 操作栏或合同页面
   - 证明 → 操作栏「证明」按钮
   - 入职 → 花名册「添加员工」
3. 直接访问 `/work-process` 路由 → 页面仍可访问（不丢数据）
4. 面包屑显示「批量流程」而非「用工办理」

**预期结果**：
- ✅ 侧边栏无「用工办理」
- ✅ 所有流程入口已下沉
- ✅ WorkProcess 页面仍可访问
- ✅ 面包屑文案已更新

---

## 第四批 P3 规划（2 项）

### TASK-029 · 组织架构 + 审批流

**前置条件**：管理员权限

**测试步骤**：

1. **部门管理**：
   - 进入「系统设置」→「组织架构」
   - 创建部门"技术部" → 创建子部门"前端组"
   - 编辑部门名称 → 删除无关联员工的部门

2. **岗位管理**：
   - 在组织架构中创建岗位"前端工程师"，归属"技术部"
   - 填写编制人数、职级
   - 编辑/删除岗位

3. **员工关联**：
   - 花名册编辑员工 → 关联部门和岗位
   - 设置直属上级

4. **审批流配置**：
   - 配置休假审批流：步骤1 直属上级 → 步骤2 部门负责人
   - 配置离职审批流：步骤1 HR 审批

5. **审批流执行**：
   - 提交休假申请 → 直属上级审批 → 部门负责人审批 → 通过

**预期结果**：
- ✅ 部门树形管理可用
- ✅ 岗位字典可增删改查
- ✅ 员工可关联部门/岗位/上级
- ✅ 审批流可配置最多 3 步
- ✅ 现有流程可接入审批流

---

### TASK-030 · 客服工作台

**前置条件**：需有客服角色账号（SUPPORT）

**测试步骤**：

1. **客服登录**：
   - 访问客服独立登录页 → 使用客服账号登录
   - 检查独立侧边栏（非管理端侧边栏）

2. **工单管理**：
   - 查看工单列表 → 创建工单 → 回复工单 → 关闭工单
   - 转派工单给其他客服

3. **客户会话**：
   - 查看会话列表 → 发送消息 → 未读消息提醒

4. **租户数据穿透**：
   - 选择租户 → 以只读模式查看该租户花名册/合同/薪税/风险
   - 检查请求头是否带 `X-Support-Tenant-Id`

5. **协助操作**：
   - 代客户重置密码
   - 代客户发起流程

6. **AI 辅助**：
   - 客服侧 AI 问答 → 检查会话隔离

7. **操作日志**：
   - 查看客服操作日志 → 检查留痕审计

**预期结果**：
- ✅ 客服独立登录和侧边栏
- ✅ 工单完整生命周期
- ✅ 租户数据穿透只读
- ✅ AI 会话隔离
- ✅ 操作留痕

---

## 第五批 电子签署（12 项）

### TASK-031 · 发起签署 + 模板自动渲染

**前置条件**：管理端登录

**测试步骤**：

1. 进入「电子签署」页面
2. 点击「发起签署」
3. 选择员工（如刘大壮）
4. 选择场景「劳动合同」
5. 检查文件标题是否自动填充
6. 提交创建
7. 在列表中找到该记录 → 点击查看详情
8. 检查文件内容是否已从模板自动渲染
9. 检查初始状态是否为「待签署」（PENDING）
10. 检查签署方式是否为「电子签署」（ELECTRONIC）

**预期结果**：
- ✅ 发起签署时校验组织开关
- ✅ 文件内容自动从模板渲染
- ✅ 创建时自动生成证据链（发起签署事件）
- ✅ 状态为 PENDING，签署方式为 ELECTRONIC

---

### TASK-032 · 员工端验证码签署

**前置条件**：管理端已发起签署，员工有待签文件

**测试步骤**：

1. 获取员工端自动登录令牌（管理端生成）
2. 员工端登录 → 进入「我的签署」
3. 查看待签文件列表
4. 点击某条待签记录 → 查看文件内容
5. 点击「获取验证码」
6. 开发模式下验证码直接显示（如 326292）
7. 输入验证码 → 点击「确认签署」
8. 检查签署状态是否变为「已完成」（COMPLETED）
9. 输入错误验证码 → 应被拒绝
10. 连续 5 次错误 → 应限制签署

**预期结果**：
- ✅ 验证码发送成功
- ✅ 正确验证码签署成功
- ✅ 错误验证码被拒绝
- ✅ 5 次错误后限制
- ✅ 60 秒限流

---

### TASK-033 · 签署全流程证据链

**前置条件**：完成 TASK-031 和 TASK-032 的完整签署流程

**测试步骤**：

1. 管理端进入签署记录详情页
2. 查看证据链时间线
3. 检查事件数量和类型：
   - 事件 1：发起签署（创建时）
   - 事件 2：验证码发送（员工端获取验证码时）
   - 事件 3：签署完成（含 IP/UA/时间戳/验证码/签署人）
4. 取消一条签署 → 检查证据链是否追加「取消签署」事件
5. 检查每个事件是否包含时间戳、IP、操作人
6. 检查证据链是否包含 hash 值用于完整性校验

**预期结果**：
- ✅ 完整签署流程证据链有 3 个事件
- ✅ 取消签署追加第 4 个事件
- ✅ 每个事件含时间戳/IP/操作人
- ✅ hash 值存在

---

### TASK-034 · 签署完成回写合同

**前置条件**：签署记录关联了合同 ID

**测试步骤**：

1. 管理端发起劳动合同签署（关联员工合同）
2. 员工端完成验证码签署
3. 回到管理端 → 进入花名册 → 查看该员工合同
4. 检查合同 `signMethod` 是否变为 `ELECTRONIC`
5. 检查合同 `attachmentName` 是否包含证据摘要（IP/UA/时间戳）

**预期结果**：
- ✅ 签署完成后合同 signMethod 回写为 ELECTRONIC
- ✅ attachmentName 包含证据摘要

---

### TASK-035 · 组织电子签开关校验

**前置条件**：系统设置中电子签开关默认关闭

**测试步骤**：

1. 发起签署，场景选择「规章制度」（POLICY）
2. 组织未开启 `esignPolicyEnabled` → 应返回错误"组织未开启规章制度电子签功能"
3. 发起签署，场景选择「工资条」（PAYSLIP）
4. 组织未开启 `esignPayslipEnabled` → 应返回错误
5. 发起签署，场景选择「劳动合同」（CONTRACT）
6. CONTRACT 场景不受开关限制 → 应通过
7. 进入系统设置 → 开启 `esignPolicyEnabled` → 再发起 POLICY 签署 → 应通过

**预期结果**：
- ✅ POLICY/PAYSLIP/ONBOARDING 场景受开关限制
- ✅ CONTRACT/RESIGNATION 场景不受限制
- ✅ 未开启时返回明确错误提示

---

### TASK-036 · scene 关联模板自动填充 + 过期处理

**测试步骤**：

1. 发起签署 → 选择场景「劳动合同」→ 检查文件标题是否自动填充
2. 选择场景「离职协议」→ 检查文件标题自动填充
3. 创建一条 PENDING 签署记录 → 修改数据库 `expiresAt` 为过去时间
4. 刷新列表 → 检查该记录是否自动标记为「已过期」（EXPIRED）

**预期结果**：
- ✅ 场景选择后自动填充默认标题
- ✅ 过期 PENDING 自动标记为 EXPIRED
- ✅ 过期时间默认 30 天

---

### TASK-037 · 管理端发起签署 UI

**测试步骤**：

1. 进入「电子签署」页面
2. 检查发起签署表单是否包含：
   - 场景选择（5 种：劳动合同/离职协议/规章制度/工资条/入职文件）
   - 员工选择
   - 文件标题（场景选择后自动填充）
3. 创建签署记录 → 点击查看详情
4. 检查详情页是否包含：
   - 文件内容预览
   - 证据链时间线
   - 签署流程说明（6 步流程图）
5. 检查列表页是否有「签署方式」列

**预期结果**：
- ✅ 5 种场景可选
- ✅ 场景选择后标题自动填充
- ✅ 详情页含文件预览和证据链
- ✅ 列表含签署方式列

---

### TASK-038 · 员工端签署 UI

**前置条件**：员工端有待签文件

**测试步骤**：

1. 员工端登录 → 进入「我的签署」
2. 检查待签文件列表
3. 点击某条记录 → 检查文件内容预览
4. 点击「获取验证码」→ 检查 60 秒倒计时
5. 输入验证码 → 确认签署
6. 检查签署完成状态展示
7. 检查线下手签记录是否只读展示（含扫描件链接）

**预期结果**：
- ✅ 验证码签署流程完整
- ✅ 60 秒倒计时限制
- ✅ 文件内容可预览
- ✅ 线下手签记录只读展示

---

### TASK-039 · 线下手签完整流程

**前置条件**：管理端登录

**测试步骤**：

1. 进入「电子签署」页面
2. 点击「线下手签登记」
3. 选择员工
4. 填写签署日期、签署地点、见证人姓名、见证人电话
5. 上传扫描件（PDF/图片）
6. 提交登记
7. 检查记录状态是否直接为「已完成」（COMPLETED）
8. 检查签署方式是否为「线下手签」（PAPER）
9. 查看证据链 → 检查是否记录线下手签事件
10. 员工端登录 → 检查线下手签记录是否可见且含扫描件链接

**预期结果**：
- ✅ 线下手签登记表单完整
- ✅ 登记后状态为 COMPLETED，方式为 PAPER
- ✅ 证据链记录
- ✅ 员工端可查看扫描件

---

### TASK-040 · 花名册操作自动创建电子签署

**前置条件**：花名册中有在职员工

**测试步骤**：

1. **主动离职**：
   - 花名册点击员工「离职」→ 选择「主动离职」
   - 完成离职草稿创建
   - 进入「电子签署」→ 检查是否自动创建「离职协议」签署记录
   - 员工端登录 → 检查是否可见该签署记录

2. **公司解聘执行**：
   - 创建解聘草稿 → 审批通过 → 执行解聘
   - 检查是否自动创建离职协议签署记录

**预期结果**：
- ✅ 主动离职自动创建离职协议签署
- ✅ 公司解聘执行后自动创建
- ✅ 员工端可见自动创建的签署记录
- ✅ 自动创建失败不阻断主流程

---

### TASK-041 · 通用签署方式选择弹窗 + 花名册 4 项联动

**前置条件**：花名册中有可操作的员工

**测试步骤**：

1. **重新入职**：
   - 花名册找到已离职员工 → 操作「重新入职」
   - 操作成功后 → 检查是否弹出签署方式选择（电子签/线下手签/稍后处理）
   - 选择「电子签」→ 检查是否自动创建劳动合同签署记录
   - 选择「线下手签」→ 检查是否跳转签署页面且信息已预填
   - 选择「稍后处理」→ 跳过

2. **合同续签**：
   - 花名册合同即将到期员工 → 操作「续签」
   - 操作成功后 → 弹窗选择签署方式
   - scene 应为 CONTRACT，文件标题为续签劳动合同

3. **薪酬变更**：
   - 花名册员工 → 操作「薪酬变更」
   - 操作成功后 → 弹窗选择签署方式
   - scene 应为 POLICY，文件标题为薪酬调整确认书

4. **调岗调动**：
   - 花名册员工 → 操作「调岗调动」
   - 操作成功后 → 弹窗选择签署方式
   - scene 应为 POLICY，文件标题为调岗确认书

5. **ESign 页面 URL 参数**：
   - 选择「线下手签」后跳转 ESign 页面
   - 检查 URL 是否包含预填参数
   - 检查线下手签 Modal 是否自动打开且信息已预填

**预期结果**：
- ✅ 4 项操作成功后均弹出签署方式选择
- ✅ 三种选择（电子签/线下手签/稍后处理）均可正确处理
- ✅ ESign 页面支持 URL 参数自动打开线下手签登记

---

### TASK-042 · 转正弹窗显示原薪资 + 薪资变化联动签署

**前置条件**：花名册中有试用期员工

**测试步骤**：

1. **薪资有变化**：
   - 试用期员工（薪资 ¥8000）→ 点击「转正」
   - 检查转正 Modal 是否显示原薪资（¥8000）
   - 检查转正薪资字段是否默认填入 ¥8000
   - 修改转正薪资为 ¥10000
   - 检查是否提示"将发起薪酬调整确认书签署"
   - 确认转正 → 操作成功后弹出签署方式选择
   - 检查签署文件标题是否为"转正薪酬调整确认书"
   - 检查备注是否记录"¥8000 → ¥10000"

2. **薪资无变化**：
   - 试用期员工（薪资 ¥8000）→ 点击「转正」
   - 不修改转正薪资（保持 ¥8000）
   - 确认转正 → 仅显示"转正已提交"，不弹窗

**预期结果**：
- ✅ 转正 Modal 显示原薪资
- ✅ 转正薪资默认填入原薪资
- ✅ 薪资变化时提示将发起签署
- ✅ 薪资有变化时弹窗选择签署方式
- ✅ 薪资未变化时不弹窗
- ✅ 签署文件标题和备注正确

---

## 测试结果记录模板

### 按任务记录

| 任务编号 | 任务名称 | 测试结果 | 实际情况说明 | 测试人 | 测试日期 |
|---------|---------|---------|-------------|-------|---------|
| TASK-001 | 草稿保存完整性 | ✅ 通过 / ❌ 失败 | | | |
| TASK-002 | 补偿金合计同步 | ✅ 通过 / ❌ 失败 | | | |
| ... | ... | ... | | | |

### 问题反馈模板

```
问题编号：BUG-001
对应任务：TASK-XXX
问题描述：（详细描述）
复现步骤：
1. ...
2. ...
3. ...
预期结果：...
实际结果：...
截图：（附截图）
严重程度：阻断 / 主要 / 次要 / 建议
测试人：
测试日期：
```

### 测试汇总

| 批次 | 任务数 | 通过 | 失败 | 有偏差 | 通过率 |
|------|--------|------|------|--------|--------|
| P0 紧急 | 6 | | | | |
| P1 高 | 14 | | | | |
| P2 中 | 9 | | | | |
| P3 规划 | 2 | | | | |
| 电子签署 | 12 | | | | |
| **合计** | **43** | | | | |

---

## 注意事项

1. **测试顺序**：建议按批次顺序测试，因部分任务有依赖关系（如 TASK-002 依赖 TASK-001）
2. **数据清理**：测试完成后请清理测试数据，避免影响生产环境
3. **电子签署验证码**：开发模式下验证码直接返回，生产环境需对接短信服务商
4. **线下手签扫描件**：测试上传的扫描件存储在服务器 `uploads/paper-sign/` 目录
5. **历史脏数据**：部分历史数据可能存在倒置日期、男职工三期等问题，属预期内
6. **法律效力提示**：当前电子签署证据链（IP/UA/时间戳/验证码）为初步举证材料，完整法律效力需配合第三方 CA 机构
