Files
TurboHR/docs/test-scenarios-e2e.md
T

38 KiB
Raw Blame History

TurboHR 企业全流程端到端测试场景

场景背景:模拟一家新企业「上海明远制造有限公司」从零开始使用 TurboHR 的完整过程。
包括:平台创建租户 → 企业管理员首次登录 → 企业配置 → 线下数据导入 → 日常操作 → 月度闭环 → 员工端使用
测试环境: https://on.hr8ai.top
日期范围: 2026-08-01 ~ 2026-08-31


角色与账号

角色 手机号 密码 说明
平台超管 superadmin (平台管理端密码) SUPER_ADMIN,创建租户
企业管理员 13900005555 Init123456 新建租户的管理员
HR 李萍 13900006666 Hr123456 企业内新增的 HR 用户
员工 张伟 13900007777 (初始密码/验证码) 生产车间,通过导入创建
员工 王芳 13900007888 (初始密码/验证码) 行政部,通过导入创建

阶段一:租户创建与初始化

E2E-001 平台管理员创建新企业

项目 内容
角色 平台超管(SUPER_ADMIN
Input POST /api/v1/auth/platform-login { phone: "superadmin", password: "xxx" }
Process 1. 平台超管登录 → 2. 进入 /platform/orgs → 3. 点击「新建组织」→ 4. 填写企业信息并提交
Input(创建组织) POST /api/v1/platform/orgs { name: "上海明远制造有限公司", contactName: "刘明远", contactPhone: "13900005555", adminName: "刘明远", adminPhone: "13900005555", adminPassword: "Init123456", city: "上海", plan: "PRO", maxEmployees: 50, payrollFrequency: 1 }
Output HTTP 201{ success: true, data: { id: "org-new-id", name: "上海明远制造有限公司", plan: "PRO", maxEmployees: 50 } }
验证 组织列表中出现「上海明远制造有限公司」,套餐 PRO,员工上限 50

E2E-002 企业管理员首次登录

项目 内容
角色 企业管理员(刘明远)
Input POST /api/v1/auth/login { phone: "13900005555", password: "Init123456" }
Process 1. 访问登录页 → 2. 输入手机号和初始密码 → 3. 点击登录
Output HTTP 200{ success: true, data: { user: { id: "u-new", name: "刘明远", role: "ADMIN", phone: "13900005555" }, accessToken: "jwt-xxx", refreshToken: "jwt-refresh-xxx" } }
验证 跳转至 /dashboard,仪表盘显示空数据(0 员工、0 待办、0 风险)

E2E-003 完善企业信息

项目 内容
角色 企业管理员
Input PUT /api/v1/settings/org { name: "上海明远制造有限公司", contactName: "刘明远", contactPhone: "13900005555", city: "上海", payrollFrequency: 1, retirementReminderEnabled: true }
Process 进入 /settings → 企业信息 → 修改/完善信息 → 保存
Output HTTP 200{ success: true }
验证 设置页显示更新后的企业名称「上海明远制造有限公司」,城市「上海」,发薪次数 1 次/月

E2E-004 添加 HR 用户

项目 内容
角色 企业管理员
Input POST /api/v1/settings/users { name: "李萍", phone: "13900006666", password: "Hr123456", role: "HR" }
Process 进入 /settings → 用户管理 → 点击「添加用户」→ 填写 HR 信息 → 保存
Output HTTP 201{ success: true, data: { id: "u-hr", name: "李萍", phone: "13900006666", role: "HR" } }
验证 用户列表显示 2 人:刘明远(ADMIN)、李萍(HR)

E2E-005 HR 用户登录验证

项目 内容
角色 HR(李萍)
Input POST /api/v1/auth/login { phone: "13900006666", password: "Hr123456" }
Process 退出管理员账号 → 用 HR 账号登录
Output HTTP 200{ success: true, data: { user: { name: "李萍", role: "HR" } } }
验证 成功登录,跳转至 /dashboard,HR 角色可访问花名册、考勤、薪酬等模块

阶段二:线下数据导入

E2E-006 批量导入员工花名册

项目 内容
角色 HR
Input FormData { file: 明远制造_花名册.xlsx }
文件内容 Excel 包含以下列:姓名、性别、身份证号、手机号、部门、岗位、入职日期、月薪、合同类型、合同开始、合同结束
示例数据 张伟, 男, 310101199001011234, 13900007777, 生产车间, 操作工, 2022-03-01, 8000, 固定期限, 2022-03-01, 2025-02-28
王芳, 女, 310102199505052345, 13900007888, 行政部, 行政专员, 2023-06-01, 9000, 固定期限, 2023-06-01, 2026-05-31
陈强, 男, 310103199207073456, 13900007999, 生产车间, 技术员, 2021-01-01, 10000, 无固定期限, 2021-01-01,
赵敏, 女, 310104199808084567, 13900008000, 质检部, 质检员, 2024-01-01, 8500, 固定期限, 2024-01-01, 2027-12-31
Process 进入 /roster → 点击「批量导入」→ 上传 Excel 文件 → 确认导入
Output HTTP 200{ success: true, data: { total: 4, success: 4, failed: 0, errors: [] } }
验证 花名册列表显示 4 名员工,部门分布:生产车间 2 人、行政部 1 人、质检部 1 人

E2E-007 验证导入数据完整性

项目 内容
角色 HR
Input GET /api/v1/employees?page=1&pageSize=10
Process 进入花名册 → 逐条检查员工信息
Output { data: [{ id: "e1", name: "张伟", gender: "男", phone: "13900007777", department: "生产车间", position: "操作工", hireDate: "2022-03-01", monthlySalary: 8000, contractType: "FIXED", contractStart: "2022-03-01", contractEnd: "2025-02-28", status: "ACTIVE" }, { id: "e2", name: "王芳", ... }, { id: "e3", name: "陈强", ... }, { id: "e4", name: "赵敏", ... }], pagination: { total: 4 } }
验证 4 名员工信息与导入文件一致,状态均为 ACTIVE

E2E-008 手动补充员工档案详情

项目 内容
角色 HR
Input PUT /api/v1/employees/e1 { emergencyContact: "张父", emergencyPhone: "13800001111", bank: "工商银行", account: "6222020100011234", address: "上海市浦东新区测试路100号", education: "高中", nativePlace: "安徽合肥" }
Process 花名册 → 点击「张伟」→ 员工详情 → 编辑档案 → 补充紧急联系人、银行账户、地址等 → 保存
Output HTTP 200{ success: true }
验证 员工详情页显示完整的档案信息

E2E-009 导入考勤数据

项目 内容
角色 HR
Input FormData { file: 明远制造_考勤_2026-07.xlsx, month: "2026-07" }
文件内容 Excel 包含:员工姓名、日期、上班打卡、下班打卡、状态
示例数据 张伟, 2026-07-01, 08:50, 18:10, 正常; 张伟, 2026-07-02, 09:05, 18:00, 迟到; 王芳, 2026-07-01, 08:45, 18:30, 正常; ...
Process 进入 /attendance → 点击「导入考勤」→ 选择月份 2026-07 → 上传文件 → 确认
Output HTTP 200{ success: true, data: { total: 88, success: 86, failed: 2, errors: [{ row: 45, message: "2026-07-15 为周末,非排班日" }, { row: 88, message: "下班打卡时间早于上班打卡" }] } }
验证 考勤列表显示 2026-07 月数据,统计:张伟迟到 1 次,王芳全勤

E2E-010 配置考勤班次

项目 内容
角色 HR
Input POST /api/v1/attendance/shifts { name: "白班", startTime: "08:00", endTime: "17:00", restMinutes: 60, color: "#4CAF50" }
Process 进入 /attendance → 班次管理 → 新建班次 → 填写信息 → 保存
Output HTTP 201{ success: true, data: { id: "shift1", name: "白班", startTime: "08:00", endTime: "17:00" } }
验证 班次列表显示「白班」

E2E-011 分配班次

项目 内容
角色 HR
Input POST /api/v1/attendance/shift-assignments { employeeId: "e1", shiftId: "shift1", startDate: "2026-08-01", endDate: "2026-08-31" }
Process 考勤 → 排班 → 选择员工张伟 → 分配白班 → 保存
Output HTTP 201{ success: true }
验证 排班表显示张伟 8 月全月白班

阶段三:社保与薪酬配置

E2E-012 配置社保公积金

项目 内容
角色 HR
Input POST /api/v1/social/config { city: "上海", effectiveFrom: "2026-07-01", type: "social", baseMin: 7384, baseMax: 36921, pension: { emp: 8, corp: 16 }, medical: { emp: 2, corp: 10 }, unemployment: { emp: 0.5, corp: 0.5 }, injury: { emp: 0, corp: 0.26 }, maternity: { emp: 0, corp: 1 } }
Process 进入 /social-insurance → 社保配置 → 新建配置 → 选择城市「上海」→ 填写基数和比例 → 保存
Output HTTP 201{ success: true, data: { id: "sc1", city: "上海", isCurrent: true } }
验证 社保配置页显示上海当前生效配置,下限 7384,上限 36921

E2E-013 配置公积金

项目 内容
角色 HR
Input POST /api/v1/social/config { city: "上海", effectiveFrom: "2026-07-01", type: "housing", baseMin: 2800, baseMax: 36921, empRate: 7, corpRate: 7, supplementRate: 0 }
Process 社保公积金页 → 公积金配置 tab → 新建 → 填写 → 保存
Output HTTP 201{ success: true, data: { id: "hc1", city: "上海", type: "housing", isCurrent: true } }
验证 公积金配置显示上海当前配置,个人 7%,企业 7%

E2E-014 创建薪酬模板

项目 内容
角色 HR
Input POST /api/v1/payroll/templates { name: "明远制造标准模板", items: [{ name: "基本工资", type: "INCOME", formula: "monthlySalary", taxable: true }, { name: "岗位津贴", type: "INCOME", formula: "500", taxable: true }, { name: "交通补贴", type: "INCOME", formula: "200", taxable: false }, { name: "社保个人", type: "DEDUCT", formula: "socialEmp", taxable: false }, { name: "公积金个人", type: "DEDUCT", formula: "housingEmp", taxable: false }, { name: "个人所得税", type: "DEDUCT", formula: "tax", taxable: false }] }
Process 进入 /money → 薪酬模板 → 新建模板 → 添加薪资项 → 保存
Output HTTP 201{ success: true, data: { id: "pt1", name: "明远制造标准模板" } }
验证 模板列表显示「明远制造标准模板」,包含 6 个薪资项

阶段四:制度发布与员工端启用

E2E-015 创建考勤管理制度

项目 内容
角色 HR
Input POST /api/v1/policies { title: "上海明远制造考勤管理制度", category: "考勤", content: "第一章 总则\n第一条 为规范公司考勤管理...\n第二章 工作时间\n第二条 工作时间为每日8:00-17:00,午休1小时...\n第三章 请假\n第三条 请假需提前1天通过系统提交..." }
Process 进入 /policies → 新建制度 → 填写标题、分类、正文 → 保存草稿
Output HTTP 201{ success: true, data: { id: "p1", title: "上海明远制造考勤管理制度", status: "DRAFT", currentStep: 1 } }
验证 制度列表显示草稿状态,当前步骤 1/4(起草)

E2E-016 推进民主程序

项目 内容
角色 HR
Input 依次调用:POST /api/v1/policies/p1/advance-step { step: 2, note: "已组织全体职工讨论" } → POST /api/v1/policies/p1/advance-step { step: 3, note: "已与工会代表协商一致" } → POST /api/v1/policies/p1/advance-step { step: 4, note: "已通过企业微信公示5个工作日" }
Process 制度详情 → 依次完成「讨论」「协商」「公示」三个步骤,每步添加备注 → 发布
Output 每步返回 HTTP 200 { success: true },最终 currentStep = 4status = PUBLISHED
验证 制度状态变为「已发布」,4 个步骤全部完成

E2E-017 生成员工端自动登录令牌

项目 内容
角色 HR
Input POST /api/v1/portal/auto-login-token { employeeId: "e1" }
Process 花名册 → 点击「张伟」→ 更多操作 → 「生成员工端登录链接」
Output HTTP 200{ success: true, data: { token: "auto-login-xxx-e1", url: "/portal/auto-login?token=auto-login-xxx-e1" } }
验证 生成可分享的员工端登录链接

E2E-018 员工首次登录员工端

项目 内容
角色 员工(张伟)
Input GET /api/v1/portal/auto-login?token=auto-login-xxx-e1
Process 员工通过手机浏览器打开链接 → 自动登录
Output HTTP 200{ success: true, data: { employee: { id: "e1", name: "张伟", department: "生产车间" }, token: "portal-token-xxx" } }
验证 跳转至 /portal/home,首页显示张伟的个人信息概览

E2E-019 员工查看并确认制度

项目 内容
角色 员工(张伟)
Input 1. GET /api/v1/portal/policies → 2. GET /api/v1/portal/policies/p1 → 3. POST /api/v1/portal/policies/p1/read
Process 员工端 → 制度 tab → 查看考勤管理制度 → 阅读完毕 → 点击「已阅读」
Output 第一步:[{ id: "p1", title: "上海明远制造考勤管理制度", read: false }];第三步:HTTP 200 { success: true }
验证 制度列表中该制度标记为已读,管理端阅读统计显示张伟已读

E2E-020 员工查看合同

项目 内容
角色 员工(张伟)
Input GET /api/v1/portal/contract
Process 员工端 → 合同 tab → 查看合同信息
Output { contract: { id: "c1", type: "FIXED", startDate: "2022-03-01", endDate: "2025-02-28", status: "EXPIRED", monthlySalary: 8000 } }
验证 显示合同已过期(2025-02-28 到期),状态 EXPIRED

阶段五:日常操作(8月)

E2E-021 仪表盘风险检查

项目 内容
角色 HR
Input GET /api/v1/dashboard
Process 登录后查看仪表盘
Output { greeting: "上午好!今天有 2 件事需要处理", stats: { employeeCount: 4, highRiskCount: 1, todoCount: 2 }, todos: [{ id: "r1", type: "CONTRACT", priority: "URGENT", title: "张伟的合同已过期,请尽快续签", employeeName: "张伟", deadline: "2026-08-15" }, { id: "r2", type: "CONTRACT", priority: "MEDIUM", title: "王芳的合同将于2027-05-31到期", employeeName: "王芳" }] }
验证 仪表盘显示 4 名员工,1 条紧急待办(张伟合同过期),1 条中等待办(王芳合同即将到期)

E2E-022 处理合同续签待办

项目 内容
角色 HR
Input 1. PATCH /api/v1/dashboard/todos/r1/resolve → 2. PUT /api/v1/employees/e1 { contractType: "FIXED", contractStart: "2025-03-01", contractEnd: "2028-02-28", monthlySalary: 9000 }
Process 1. 仪表盘 → 点击张伟的待办 → 标记已处理 → 2. 进入花名册 → 张伟详情 → 编辑合同信息 → 续签 3 年,月薪调整为 9000 → 保存
Output 第一步:HTTP 200 { success: true };第二步:HTTP 200 { success: true }
验证 待办消失,张伟合同状态更新为正常(2025-03-01 至 2028-02-28),月薪 9000

E2E-023 录入考勤(8月每日)

项目 内容
角色 HR
Input POST /api/v1/attendance/daily { employeeId: "e1", date: "2026-08-01", checkIn: "07:55", checkOut: "17:05", shiftId: "shift1", status: "NORMAL", overtime: 0 }
Process 考勤 → 每日考勤 → 逐日录入或批量导入 8 月考勤数据
Output HTTP 201{ success: true }
验证 考勤月报显示张伟 8 月出勤 22 天,迟到 0 次

E2E-024 请假审批

项目 内容
角色 HR
Input POST /api/v1/attendance/leave { employeeId: "e2", type: "事假", startDate: "2026-08-10", endDate: "2026-08-12", reason: "家中有事", days: 3 }
Process 考勤 → 请假记录 → 新建请假 → 选择王芳 → 事假 3 天 → 提交
Output HTTP 201{ success: true, data: { id: "lv1", status: "APPROVED" } }
验证 请假记录显示王芳 8 月 10-12 日事假,考勤统计扣除 3 天出勤

E2E-025 发布考勤月报

项目 内容
角色 HR
Input POST /api/v1/attendance/monthly-report/publish { month: "2026-08" }
Process 考勤 → 月度报表 → 选择 2026-08 → 确认数据无误 → 点击「发布」
Output HTTP 200{ success: true }
验证 考勤月报状态变为「已发布」,员工端可查看当月考勤

阶段六:月度薪酬闭环(8月发薪)

E2E-026 创建发薪批次

项目 内容
角色 HR
Input POST /api/v1/payroll/batches { month: "2026-08", templateId: "pt1", name: "2026年8月工资", payDate: "2026-09-10" }
Process 进入 /money → 发薪批次 → 新建批次 → 选择月份 8 月 → 选择模板「明远制造标准模板」→ 设置发薪日 → 保存
Output HTTP 201{ success: true, data: { id: "b1", month: "2026-08", status: "DRAFT", employeeCount: 4 } }
验证 批次列表显示 8 月发薪批次,状态 DRAFT,包含 4 名员工

E2E-027 计算工资

项目 内容
角色 HR
Input POST /api/v1/payroll/batches/b1/calculate
Process 发薪批次 → 选择 8 月批次 → 点击「计算」→ 系统自动计算所有员工工资
Output HTTP 200{ success: true, data: { results: [{ employeeId: "e1", employeeName: "张伟", baseSalary: 9000, allowance: 500, transport: 200, grossPay: 9700, socialEmp: 759.36, housingEmp: 630, tax: 421.32, netPay: 7889.32 }, { employeeId: "e2", employeeName: "王芳", baseSalary: 9000, allowance: 500, transport: 200, grossPay: 9700, socialEmp: 759.36, housingEmp: 630, tax: 421.32, netPay: 7889.32, leaveDeduction: 966.67, adjustedNetPay: 6922.65 }, { employeeId: "e3", employeeName: "陈强", baseSalary: 10000, allowance: 500, transport: 200, grossPay: 10700, socialEmp: 830.72, housingEmp: 700, tax: 533.28, netPay: 8636.00 }, { employeeId: "e4", employeeName: "赵敏", baseSalary: 8500, allowance: 500, transport: 200, grossPay: 9200, socialEmp: 712.64, housingEmp: 595, tax: 371.52, netPay: 7520.84 }] } }
验证 4 名员工工资计算完成,王芳因事假 3 天扣除 966.67 元,个税按累计预扣法计算

E2E-028 个税试算

项目 内容
角色 HR
Input POST /api/v1/payroll/tax-trial { employeeId: "e1", month: "2026-08", grossPay: 9700, socialEmp: 759.36, housingEmp: 630, specialDeduction: 0, accumulatedIncome: 67900, accumulatedTaxPaid: 2946.24 }
Process 薪酬 → 个税试算 → 选择张伟 → 输入累计数据 → 计算
Output { tax: 421.32, accumulatedIncome: 77600, accumulatedTax: 3367.56, accumulatedTaxPaid: 2946.24, thisMonthTax: 421.32 }
验证 个税计算结果与发薪批次中一致

E2E-029 提交审批

项目 内容
角色 HR
Input POST /api/v1/payroll/batches/b1/submit
Process 发薪批次 → 确认数据 → 点击「提交审批」
Output HTTP 200{ success: true }。状态变为 PENDING_APPROVAL
验证 批次状态变为待审批

E2E-030 管理员审批发薪

项目 内容
角色 企业管理员(刘明远)
Input POST /api/v1/payroll/batches/b1/approve { comment: "核对无误,同意发放" }
Process 管理员登录 → 薪酬 → 发薪批次 → 查看 8 月批次 → 审批通过
Output HTTP 200{ success: true }。状态变为 APPROVED
验证 批次状态变为已审批,工资条生成

E2E-031 员工查看工资条

项目 内容
角色 员工(张伟)
Input GET /api/v1/portal/payslip?month=2026-08
Process 员工端 → 工资条 tab → 选择 2026-08
Output { id: "ps1", month: "2026-08", baseSalary: 9000, allowance: 500, transport: 200, grossPay: 9700, socialEmp: 759.36, housingEmp: 630, tax: 421.32, netPay: 7889.32, confirmed: false }
验证 工资条显示完整明细,实发 7889.32 元,状态未确认

E2E-032 员工确认工资条

项目 内容
角色 员工(张伟)
Input POST /api/v1/portal/payslip/ps1/confirm
Process 员工端 → 工资条 → 点击「确认无误」
Output HTTP 200{ success: true }
验证 工资条状态变为 CONFIRMED

阶段七:社保月度办理

E2E-033 查看社保月度变动

项目 内容
角色 HR
Input GET /api/v1/social/monthly-changes?month=2026-08
Process 进入 /social-insurance → 月度办理 → 选择 2026-08
Output { additions: [{ employeeId: "e1", employeeName: "张伟", reason: "已参保", base: 9000 }, { employeeId: "e2", employeeName: "王芳", reason: "已参保", base: 9000 }, { employeeId: "e3", employeeName: "陈强", reason: "已参保", base: 10000 }, { employeeId: "e4", employeeName: "赵敏", reason: "已参保", base: 8500 }], reductions: [], current: [...] }
验证 4 名员工均在参保列表中,无减员

E2E-034 完成社保月度办理

项目 内容
角色 HR
Input POST /api/v1/social/monthly-process/complete { month: "2026-08", type: "social" }
Process 社保页 → 月度办理 → 确认增减员无误 → 点击「完成社保办理」
Output HTTP 200{ success: true }
验证 社保办理状态变为已完成

E2E-035 完成公积金月度办理

项目 内容
角色 HR
Input POST /api/v1/social/monthly-process/complete { month: "2026-08", type: "housing" }
Process 社保页 → 公积金 tab → 月度办理 → 点击「完成公积金办理」
Output HTTP 200{ success: true }
验证 公积金办理状态变为已完成

阶段八:风险检查与合规

E2E-036 用工体检诊断

项目 内容
角色 HR
Input GET /api/v1/dashboard/health-check
Process 进入 /tools/health-check → 点击「开始诊断」
Output { year: 2026, totalScore: 90, level: "healthy", dimensions: { contract: 100, salary_social: 100, attendance: 100, policy: 80, termination: 100, evidence: 60 }, summary: "整体用工合规状况良好,建议完善证据链管理" }
验证 6 维度评分显示,总分 90,等级 healthy,证据链维度较低(60 分)

E2E-037 保存体检诊断

项目 内容
角色 HR
Input POST /api/v1/dashboard/health-check/save
Process 诊断结果页 → 点击「保存诊断报告」
Output HTTP 200{ success: true, data: { id: "hc-new", year: 2026, totalScore: 90 } }
验证 诊断历史中出现 2026 年记录

E2E-038 AI 顾问咨询

项目 内容
角色 HR
Input POST /api/v1/ai/consultation { type: "CHAT", question: "我们公司有员工合同过期了未续签,有什么法律风险?" }
Process 进入 /ai-assistant → 输入问题 → 发送
Output { conversationId: "conv-e2e", answer: "根据《劳动合同法》第十条和第八十二条,已建立劳动关系未同时订立书面劳动合同的,应当自用工之日起一个月内订立。超过一个月未续签的,应当向劳动者每月支付二倍工资。建议您尽快为合同过期的员工续签劳动合同...", confidence: 0.92, sources: [{ title: "劳动合同法第十条", url: "" }, { title: "劳动合同法第八十二条", url: "" }] }
验证 AI 回答包含法律依据和操作建议,置信度 > 0.9

阶段九:新员工入职流程

E2E-039 创建入职工作流程

项目 内容
角色 HR
Input POST /api/v1/work-processes { type: "ONBOARDING", title: "8月新员工入职-孙磊", data: { name: "孙磊", phone: "13900008888", department: "生产车间", position: "操作工", hireDate: "2026-08-15", salary: 8000, contractType: "FIXED", contractEnd: "2029-08-14" } }
Process 进入 /work-process → 新建 → 选择类型「入职」→ 填写新员工信息 → 保存
Output HTTP 201{ success: true, data: { id: "wp1", title: "8月新员工入职-孙磊", type: "ONBOARDING", status: "DRAFT" } }
验证 工作流程列表显示新入职流程

E2E-040 生成入职链接并发送

项目 内容
角色 HR
Input POST /api/v1/portal/auto-login-token { employeeId: "e-new" }(系统自动创建员工记录后)
Process 工作流程详情 → 点击「生成入职链接」→ 将链接发送给新员工
Output { success: true, data: { token: "onboarding-token-sunlei", url: "/portal/onboarding?token=onboarding-token-sunlei" } }
验证 生成入职链接

E2E-041 新员工填写入职信息

项目 内容
角色 新员工(孙磊)
Input 1. GET /api/v1/portal/onboarding/onboarding-token-sunlei → 2. POST /api/v1/portal/onboarding { token: "onboarding-token-sunlei", name: "孙磊", gender: "男", idCard: "310105200001015678", phone: "13900008888", bank: "建设银行", account: "6227000100025678", emergencyContact: "孙母", emergencyPhone: "13800002222", address: "上海市闵行区测试路200号" }
Process 新员工打开链接 → 查看入职须知 → 填写个人信息 → 提交
Output 第一步:{ orgName: "上海明远制造有限公司", position: "操作工", expectedHireDate: "2026-08-15" };第二步:HTTP 200 { success: true, message: "入职信息提交成功" }
验证 入职信息提交成功

E2E-042 新员工上传入职文件

项目 内容
角色 新员工(孙磊)
Input FormData { file: 身份证正面.jpg }FormData { file: 体检报告.pdf }
Process 入职页面 → 文件上传 → 上传身份证照片和体检报告
Output HTTP 200{ success: true, data: { url: "/uploads/onboarding/id-front.jpg" } }
验证 文件上传成功

E2E-043 HR 审核入职

项目 内容
角色 HR
Input POST /api/v1/work-processes/wp1/submit
Process 工作流程 → 入职流程 → 检查新员工提交的信息和文件 → 确认无误 → 提交
Output HTTP 200{ success: true }。状态变为 SUBMITTED
验证 入职流程完成,花名册新增孙磊(5 名员工),合同自动创建

阶段十:解聘流程

E2E-044 创建解聘草稿

项目 内容
角色 HR
Input POST /api/v1/termination/draft { employeeId: "e3", reason: "协商解除", reasonDetail: "公司业务调整,岗位裁撤", lastDay: "2026-08-31" }
Process 进入 /termination → 新建解聘 → 选择陈强 → 选择原因「协商解除」→ 填写最后工作日 → 保存
Output HTTP 201{ success: true, data: { id: "td1", employeeId: "e3", employeeName: "陈强", reason: "协商解除", status: "DRAFT" } }
验证 解聘列表显示陈强的草稿

E2E-045 解聘风险评估

项目 内容
角色 HR
Input GET /api/v1/termination/assess/e3?reason=协商解除
Process 解聘详情 → 点击「风险评估」
Output { riskLevel: "LOW", riskScore: 15, factors: [{ factor: "入职年限", description: "入职5.5年", impact: "medium" }, { factor: "合同状态", description: "无固定期限合同", impact: "medium" }, { factor: "协商解除", description: "双方协商一致", impact: "low" }], recommendations: ["建议支付N经济补偿(5.5个月)", "签署协商解除协议", "办理社保减员"] }
验证 风险等级 LOW,建议支付 5.5 个月补偿

E2E-046 查看解聘清单

项目 内容
角色 HR
Input GET /api/v1/termination/checklist/协商解除?employeeId=e3
Process 解聘详情 → 查看「办理清单」
Output { items: [{ id: "cl1", title: "签署解除协议", required: true, completed: false }, { id: "cl2", title: "支付经济补偿(5.5个月×10000=55000元)", required: true, completed: false }, { id: "cl3", title: "工作交接", required: true, completed: false }, { id: "cl4", title: "社保公积金减员", required: true, completed: false }, { id: "cl5", title: "出具离职证明", required: true, completed: false }] }
验证 清单包含 5 项必须操作

E2E-047 更新解聘草稿

项目 内容
角色 HR
Input PUT /api/v1/termination/draft/td1 { compensation: 55000, compensationMonths: 5.5, lastDay: "2026-08-31", checklist: [{ id: "cl1", completed: true }, { id: "cl2", completed: true }, { id: "cl3", completed: true }] }
Process 解聘详情 → 填写补偿金额 55000 → 逐项勾选已完成清单项 → 保存
Output HTTP 200{ success: true }
验证 草稿更新成功,3/5 清单项已完成

E2E-048 提交解聘审批

项目 内容
角色 HR
Input POST /api/v1/termination/draft/td1/submit
Process 解聘详情 → 确认信息 → 点击「提交审批」
Output HTTP 200{ success: true }。状态变为 PENDING_APPROVAL
验证 解聘状态变为待审批

E2E-049 管理员审批解聘

项目 内容
角色 企业管理员(刘明远)
Input POST /api/v1/termination/draft/td1/approve { comment: "同意协商解除,补偿金额合理" }
Process 管理员登录 → 解聘管理 → 查看陈强解聘申请 → 审批通过
Output HTTP 200{ success: true }。状态变为 APPROVED
验证 解聘状态变为已审批

E2E-050 执行解聘

项目 内容
角色 HR
Input POST /api/v1/termination/draft/td1/execute
Process 解聘详情 → 完成剩余清单项(社保减员、离职证明)→ 点击「执行解聘」
Output HTTP 200{ success: true }。状态变为 EXECUTED
验证 陈强员工状态变为 RESIGNED,社保公积金自动减员,花名册显示 4 名在职员工

阶段十一:月末检查与审计

E2E-051 查看薪酬仪表盘

项目 内容
角色 HR
Input GET /api/v1/salary/dashboard?year=2026
Process 进入 /money → 薪酬分析 → 查看 2026 年数据
Output { year: 2026, monthly: [{ month: "2026-08", totalPay: 34200, avgPay: 8550, headcount: 4 }], departmentSalary: [{ department: "生产车间", avgSalary: 8500 }, { department: "行政部", avgSalary: 9000 }, { department: "质检部", avgSalary: 8500 }], salaryDistribution: [{ range: "8K-10K", count: 4 }], yoyChange: 0 }
验证 8 月总薪酬 34200 元,平均 8550 元,4 名员工

E2E-052 查看审计日志

项目 内容
角色 企业管理员
Input GET /api/v1/audit?page=1&pageSize=20
Process 进入 /audit → 查看操作日志
Output { data: [{ id: "al1", entity: "EMPLOYEE", action: "IMPORT", operator: "李萍", target: "批量导入4名员工", timestamp: "2026-08-01T09:30:00Z" }, { id: "al2", entity: "PAYROLL", action: "APPROVE", operator: "刘明远", target: "2026年8月工资批次", timestamp: "2026-08-28T14:00:00Z" }, { id: "al3", entity: "TERMINATION", action: "EXECUTE", operator: "李萍", target: "陈强协商解除", timestamp: "2026-08-31T16:00:00Z" }], pagination: { total: 25 } }
验证 审计日志完整记录了导入、审批、解聘等关键操作

E2E-053 导出花名册

项目 内容
角色 HR
Input GET /api/v1/export/roster?status=ACTIVE
Process 花名册 → 点击「导出」→ 选择在职员工 → 下载
Output HTTP 200,下载 花名册_2026-08-31.xlsx,包含 4 条在职员工记录(陈强已离职)
验证 导出文件包含 4 名在职员工,不含已离职的陈强

E2E-054 导出工资条

项目 内容
角色 HR
Input GET /api/v1/export/payslip?batchId=b1
Process 薪酬 → 8 月批次 → 点击「导出工资条」→ 下载
Output HTTP 200,下载 工资条_2026-08.xlsx,包含 4 条工资明细
验证 导出文件包含 4 名员工的完整工资明细

阶段十二:员工离职申请(员工端发起)

E2E-055 员工提交离职申请

项目 内容
角色 员工(王芳)
Input POST /api/v1/portal/resignation/submit { reason: "个人发展", expectedLastDay: "2026-09-30", description: "感谢公司三年培养,因个人职业规划调整申请离职" }
Process 员工端 → 离职申请 → 填写离职原因和期望最后工作日 → 提交
Output HTTP 201{ success: true, data: { id: "rg1", status: "PENDING" } }
验证 离职申请提交成功,状态待处理

E2E-056 HR 查看离职申请

项目 内容
角色 HR
Input GET /api/v1/portal/resignation/status(或管理端查看)
Process 管理端 → 解聘管理 → 查看员工发起的离职申请
Output [{ id: "rg1", employeeName: "王芳", reason: "个人发展", expectedLastDay: "2026-09-30", status: "PENDING", submittedAt: "2026-08-31T10:00:00Z" }]
验证 离职申请列表显示王芳的申请

E2E-057 员工撤回离职申请

项目 内容
角色 员工(王芳)
Input POST /api/v1/portal/resignation/rg1/withdraw
Process 员工端 → 离职申请 → 点击「撤回」
Output HTTP 200{ success: true }。状态变为 WITHDRAWN
验证 离职申请状态变为已撤回

全流程验证检查清单

# 检查项 预期结果 实际结果
1 租户创建成功 组织列表可见,管理员可登录
2 企业信息配置完成 设置页显示完整企业信息
3 HR 子账号可登录 HR 角色可访问各功能模块
4 花名册导入成功 4 名员工数据完整
5 考勤数据导入成功 考勤月报数据正确
6 社保公积金配置生效 上海基数和比例正确
7 薪酬模板创建成功 模板包含 6 个薪资项
8 制度发布流程完整 4 步民主程序全部完成
9 员工端可登录 自动登录成功,首页正常
10 员工可查看制度并签收 制度标记为已读
11 仪表盘风险提示正确 合同过期风险准确
12 合同续签成功 员工合同状态更新
13 考勤月报发布成功 员工端可查看当月考勤
14 发薪批次计算正确 工资明细金额准确
15 个税计算正确 累计预扣法计算无误
16 发薪审批流程完整 HR 提交 → 管理员审批
17 员工可查看并确认工资条 工资条状态 CONFIRMED
18 社保月度办理完成 社保和公积金均已完成
19 用工体检诊断正常 总分 ≥ 80,等级 healthy
20 AI 顾问可咨询 回答包含法律依据
21 新员工入职流程完整 入职 → 填信息 → 上传 → 审核
22 解聘流程完整 草稿 → 风险评估 → 审批 → 执行
23 解聘后员工状态正确 状态 RESIGNED,社保减员
24 审计日志完整 关键操作均有记录
25 数据导出正确 花名册和工资条导出无误
26 员工离职申请流程 提交 → 查看 → 撤回

流程时间线

日期 操作 角色
2026-08-01 09:00 平台超管创建租户 SUPER_ADMIN
2026-08-01 09:15 企业管理员首次登录,完善信息 刘明远
2026-08-01 09:30 添加 HR 用户 刘明远
2026-08-01 09:45 HR 登录,批量导入花名册 李萍
2026-08-01 10:00 导入 7 月考勤数据 李萍
2026-08-01 10:15 配置考勤班次和排班 李萍
2026-08-01 10:30 配置社保公积金 李萍
2026-08-01 11:00 创建薪酬模板 李萍
2026-08-01 14:00 创建考勤管理制度并推进民主程序 李萍
2026-08-01 15:00 生成员工端登录链接,员工首次登录 李萍 → 张伟
2026-08-01 15:30 员工查看制度并签收 张伟
2026-08-02 09:00 查看仪表盘风险,处理合同续签 李萍
2026-08-04~08-30 每日录入考勤 李萍
2026-08-10 王芳请假 3 天 李萍
2026-08-15 新员工孙磊入职 李萍 → 孙磊
2026-08-28 创建发薪批次,计算工资,提交审批 李萍
2026-08-28 14:00 管理员审批发薪 刘明远
2026-08-29 员工查看并确认工资条 张伟
2026-08-30 社保公积金月度办理 李萍
2026-08-30 用工体检诊断 李萍
2026-08-31 陈强协商解除解聘执行 李萍 → 刘明远
2026-08-31 导出花名册和工资条 李萍
2026-08-31 17:00 王芳提交离职申请后撤回 王芳