feat(aihr): finalize practice growth and access boundaries

This commit is contained in:
2026-07-25 00:42:19 +08:00
parent a90f40e4d8
commit c9d2012ec1
87 changed files with 6804 additions and 2538 deletions
+50 -69
View File
@@ -1,92 +1,75 @@
# P0 试点验收执行清单
# P0 试点验收模板
> 版本: v1.0 | 日期: 2026-07-18 | 试点窗口: 2026-07-01 至 2026-07-31 | 项目: TEST_PROJECT_001
> 用途:每个正式试点窗口的执行清单。2026-07-18 的旧名单、旧时间窗和固定码说明不再在仓库留存;需要追溯时查 Git 历史。
>
> 当前范围和完成定义以 [AI陪练完整交付计划](AI陪练完整交付计划-20260724.md) 为准,生产发布/回归以 [BRD 生产迁移 Runbook](BRD_PRODUCTION_MIGRATION_RUNBOOK.md) 为准。本模板不能将本地开发固定验证码、seed 或测试账号写成正式试点证据。
## 一、试点名单(生产库实际数据)
## 一、试点批次与角色清单
### 管理侧(10人)
| 手机号 | 姓名 | 岗位 | 职级 | 验收角色 |
|---|---|---|---|---|
| 13800010004 | (空) | 项目经理 | 项目经理 | P0-1主管权限正例 |
| 13016991920 | (空) | 保洁主管 | 主管 | P0-1主管权限正例 |
| 13800010005 | (空) | 客服主管 | 主管 | P0-1主管权限正例 |
| 13900011001 | (空) | 客服主管 | 主管 | P0-1主管权限正例 |
| 13900012001 | (空) | 运营主管 | 主管 | P0-1主管权限正例 |
| 13900012002 | (空) | 品质主管 | 主管 | P0-1主管权限正例 |
| 13358160602 | (空) | 保洁主管 | 主管 | P0-1切换学员模式 |
| 13506235116 | (空) | 保洁主管 | 主管 | P0-1派发专项 |
| 13775002281 | (空) | 保洁主管 | 主管 | P0-1创建考试 |
| 13800010006 | (空) | 外包负责人 | 主管 | P0-1查看团队 |
在启动窗口前由项目负责人在受控系统登记项目、起止日、负责人和测试账号;本仓库只保留角色要求,不保存姓名、手机号、验证码或 token。
### 员工侧(10人)
| 手机号 | 姓名 | 岗位 | 职级 | 验收角色 |
|---|---|---|---|---|
| 13003451669 | (空) | 保洁员 | 一线 | P0-1员工权限正例 |
| 13003671780 | (空) | 保洁员 | 一线 | P0-2语音录音+播报 |
| 13003690513 | (空) | 保洁员 | 一线 | P0-2图片上传+下载 |
| 13032658127 | (空) | 保洁班长 | 一线 | P0-2视频上传 |
| 13052906326 | (空) | 保洁员 | 一线 | P0-2全局字号三档 |
| 13060783130 | (空) | 保洁员 | 一线 | P0-1每日题去重 |
| 13062915370 | (空) | 保洁员 | 一线 | P0-1问题榜提问 |
| 13063972397 | (空) | 保洁员 | 一线 | P0-1问题榜回答 |
| 13067806180 | (空) | 保洁员 | 一线 | P0-1问师傅+问AI |
| 13069016922 | (空) | 保洁员 | 一线 | P0-1答题+积分 |
| 验收角色 | 最小数量 | 必须具备的能力 |
|---|---:|---|
| 员工正例 | 1 | 当前项目在职、可完成训练与每日题 |
| 主管正例 | 1 | 当前项目带教范围、可查看复盘并派发专项 |
| 员工越权反例 | 1 | 无主管权限,用于验证主管页与写接口均被拒绝 |
| 真机体验样本 | iOS/Android 各 1 | 已获测试同意,用于媒体、下载、字号与读屏验证 |
### 越权反例(3人)
| 手机号 | 姓名 | 岗位 | 职级 | 验收角色 |
|---|---|---|---|---|
| 13075084167 | (空) | 保洁员 | 一线 | P0-1越权:员工访问主管工作台 |
| 13093179363 | (空) | 保洁员 | 一线 | P0-1越权:员工访问派发页 |
| 13101885639 | (空) | 保洁员 | 一线 | P0-1越权:员工访问考试管理 |
试点批次:`<项目名称>`
统计窗口:`<YYYY-MM-DD>` 至 `<YYYY-MM-DD>`
内容负责人 / 业务审核人 / 试点负责人:`<在受控系统登记>`
---
## 二、P0-1 正式 OTP 权限正反例
### 登录验收
**固定验证码**: 123456(生产环境 `AIHR_SMS_PROD_FIXED_CODE_ENABLED=true` 时生效)
使用生产短信 OTP 的实际流程,先触发获取验证码再登录。获明确风险批准的固定码试点可验证功能链路,但不能作为生产安全验收;手机号码和验证码仅留在受控测试系统,不能写入本文件、截图或提交记录。
#### 正例:员工端登录流程
- [ ] **13003451669**(保洁员) → 输入手机号 → 获取验证码 → 输入123456 → 登录成功
- [ ] **员工正例账号**(当前项目一线员工)→ 输入手机号 → 获取验证码 → 完成正式 OTP → 登录成功
- [ ] 自动跳转"同步岗位"页 → 匹配成功(岗位:保洁员,职级:一线) → 自动跳转"每日安排"(today页)
- [ ] 底部tabBar显示:每日安排、对练、问师傅、我的(4个tab,无主管工作台)
- [ ] "我的"页显示:岗位=保洁员,无"进入主管工作台"按钮
#### 正例:主管端登录流程
- [ ] **13800010004**(项目经理) → 输入手机号 → 获取验证码 → 输入123456 → 登录成功
- [ ] **主管正例账号**(当前项目主管/项目经理)→ 输入手机号 → 获取验证码 → 完成正式 OTP → 登录成功
- [ ] 自动跳转"同步岗位"页 → 匹配成功(岗位:项目经理,职级:项目经理) → 自动跳转"主管工作台"(supervisor/index页)
- [ ] 顶部显示:工作台、指派、团队、复盘(4个主管tab)
- [ ] "我的"页有"进入学员模式"按钮
#### 正例:主管切换学员模式
- [ ] **13358160602**(保洁主管) → 登录主管工作台 → 点击"我的" → "进入学员模式"
- [ ] **主管正例账号** → 登录主管工作台 → 点击"我的" → "进入学员模式"
- [ ] 跳转至员工端"每日安排"页,底部tabBar变为员工侧4个tab
- [ ] 左上角显示"当前为学员模式" + "返回主管工作台"按钮
- [ ] 点击"返回主管工作台" → 跳回主管工作台,岗位身份未改变(仍为主管)
### 权限正例:主管功能访问
- [ ] **13506235116**(保洁主管) → 主管工作台 → 点击"指派" → 进入派发专项页
- [ ] **主管正例账号** → 主管工作台 → 点击"指派" → 进入派发专项页
- [ ] 支持多选团队成员(≤100人),显示当前项目在职成员列表
- [ ] 快捷日期选择器显示:当天、明天、3天内、7天内
- [ ] 场景下拉框显示已启用场景(如生活顾问等)
- [ ] "派发"按钮可用,点击后显示loading → 成功提示"已派发给X人"
- [ ] **13775002281**(保洁主管) → 主管工作台 → 点击"考试" → 进入考试管理页
- [ ] **主管正例账号** → 主管工作台 → 点击"考试" → 进入考试管理页
- [ ] 点击"创建考试" → 输入考试标题、选择岗位、添加题目 → "发布"按钮可用
- [ ] 发布后显示"已发布" → 返回考试列表,新考试出现在列表中
- [ ] **13800010006**(外包负责人) → 主管工作台 → 点击"团队" → 显示团队成员列表
- [ ] **主管正例账号** → 主管工作台 → 点击"团队" → 显示团队成员列表
- [ ] 列表显示成员姓名(非编号)、岗位、最近训练时间
- [ ] 点击某成员 → 进入成员详情页,显示训练记录、得分趋势
### 权限反例:越权访问拦截
- [ ] **13075084167**(保洁员,员工权限) → 手动构造URL访问 `/pages/supervisor/index` → 被路由守卫拦截,跳转回员工端today页,显示toast"无权访问"
- [ ] **13093179363**(保洁员) → 手动构造URL访问 `/pages/supervisor/assign/index` → 被拦截,提示"无权访问"
- [ ] **13101885639**(保洁员) → 手动构造URL访问 `/pages/supervisor/exams/index` → 被拦截,提示"无权访问"
- [ ] **员工越权反例账号**(无主管权限)→ 手动构造URL访问 `/pages/supervisor/index` → 被路由守卫拦截,跳转回员工端today页,显示toast"无权访问"
- [ ] **员工越权反例账号** → 手动构造URL访问 `/pages/supervisor/assign/index` → 被拦截,提示"无权访问"
- [ ] **员工越权反例账号** → 手动构造URL访问 `/pages/supervisor/exams/index` → 被拦截,提示"无权访问"
- [ ] 验证后端接口:用员工token调用 `/api/aihr/mobile/practice/assignments/batch`(派发接口) → 返回403或业务错误"权限不足"
### 每日题去重与轮换
- [ ] **13060783130**(保洁员) → 连续7天登录 → 每天查看"每日安排"的每日题
- [ ] **员工正例账号** → 连续7天登录 → 每天查看"每日安排"的每日题
- [ ] 记录每天的3道题目(题面/场景),验证:
- 7天内无重复题面(即使同一场景)
- 同一天刷新页面,题目不变(确定性)
@@ -101,29 +84,29 @@
- Android真机(Android 10+,微信内置浏览器 + Chrome各一台)
### 语音输入与播报
- [ ] **13003671780**(保洁员) → 问师傅页 → 点击麦克风图标 → 允许麦克风权限
- [ ] **真机体验样本** → 问师傅页 → 点击麦克风图标 → 允许麦克风权限
- [ ] 说话5秒("今天客户投诉了停车费问题怎么处理") → 停止录音 → 文本框自动填入识别后的文字
- [ ] 点击"搜索" → 等待回答 → 点击"播报"按钮 → 听到TTS语音播报回答内容
- [ ] 真机验证降级:飞行模式 → 点击"播报" → 检查是否降级到浏览器`speechSynthesis`(iOS Safari可能无声,属已知限制)
- [ ] 真机验证录音兜底:长按5秒说话但ASR接口超时 → 检查是否显示"选择音频文件"兜底选项
### 图片/视频上传
- [ ] **13003690513**(保洁员) → 问师傅页 → 点击"上传图片"图标 → 从相册选择一张图片(≤10MB)
- [ ] **真机体验样本** → 问师傅页 → 点击"上传图片"图标 → 从相册选择一张图片(≤10MB)
- [ ] 页面显示图片预览缩略图 + "仅用于本次现场分析"提示
- [ ] 输入问题"这个地方怎么清洁" → 点击"搜索" → 回答中包含对图片内容的分析
- [ ] **13032658127**(保洁班长) → 问师傅页 → 点击"上传视频"图标 → 从相册选择一段视频(≤100MB,<30秒)
- [ ] **真机体验样本** → 问师傅页 → 点击"上传视频"图标 → 从相册选择一段视频(≤100MB,<30秒)
- [ ] 页面显示视频预览 + "仅用于本次现场分析"提示
- [ ] 输入问题"这个操作对吗" → 点击"搜索" → 回答中包含对视频内容的分析
### 总结卡下载
- [ ] **13003690513**(保洁员) → 完成一次对练 → 查看训练总结页
- [ ] **真机体验样本** → 完成一次对练 → 查看训练总结页
- [ ] 点击"下载总结卡"按钮 → loading状态显示
- [ ] iOS:检查是否弹出系统分享菜单,选择"存储图像" → 打开相册验证PNG图片已保存
- [ ] Android:检查是否弹出下载确认,点击"下载" → 打开文件管理器验证PNG图片已保存到Downloads目录
### 全局字号三档
- [ ] **13052906326**(保洁员) → 登录员工端 → 点击"我的" → 点击"字体大小"
- [ ] **真机体验样本** → 登录员工端 → 点击"我的" → 点击"字体大小"
- [ ] 选择"标准" → 返回today页,目测卡片标题、正文字号正常(16px/14px左右)
- [ ] 再次进入"字体大小" → 选择"大" → 返回today页,目测字号明显增大(约1.12倍)
- [ ] 再次进入"字体大小" → 选择"超大" → 返回today页,目测字号最大(约1.25倍)
@@ -140,23 +123,22 @@
## 四、P0-3 严格试点窗口统计
**试点窗口**: 2026-07-01 至 2026-07-31(31天)
**试点窗口**: 以本批已登记的起止日期为准
**完成定义**: 每人≥10次训练(对练 + 每日题,不含问师傅单次查询)
**样本目标**: 20人完成,≥80%完成率
### 训练量统计
- [ ] 截至2026-07-18,已有1人登录,2次训练,0人达标(当前完成率0%)
- [ ] 窗口结束前5天(2026-07-26)复查:已完成人数/目标20人,完成率是否≥80%
- [ ] 以正式 CSV 导出记录当前已完成人数、试点总人数和完成率,不把 seed 或旧批次数据计入
- [ ] 窗口结束前 5 天复查:已完成人数/目标20人,完成率是否≥80%
- [ ] 若完成率<80%,召集主管催促:每位主管至少带2名员工完成10次训练
### 人工校准样本
- [ ] 目标:20份对练录音 → 主管先打分 → AI再打分 → 对比分差
- [ ] 当前:0份校准样本
- [ ] 窗口结束前7天(2026-07-24)复查:已收集校准样本数/20,AI-人工分数段一致率是否≥70%
- [ ] 窗口结束前 7 天复查:已收集校准样本数/20,AI-人工分数段一致率是否≥70%
### SOP评审样本
- [ ] 目标:问师傅回答可用率≥80%
- [ ] 当前:2份样本,2份可用,可用率100%(已达标✅)
- [ ] 以本批已签字样本计算可用率,不沿用历史样本结论
- [ ] 窗口结束时再抽查20份问师傅记录,验证可用率稳定在80%+
### 满意度收集
@@ -192,27 +174,26 @@
## 六、验收执行时间表
| 日期 | 里程碑 | 责任人 | 状态 |
| 相对时间 | 里程碑 | 责任人 | 状态 |
|---|---|---|---|
| 2026-07-18 | P0清单起草完成 | 开发 | ✅ |
| 2026-07-19 | P0-1权限正反例全部验证 | 开发+测试 | 待执行 |
| 2026-07-19 | P0-2真机能力验证(iOS+Android各2台) | 测试 | 待执行 |
| 2026-07-24 | P0-3中期检查(完成率/校准样本) | 项目经理 | 待执行 |
| 2026-07-26 | P0-3末期检查(完成率冲刺) | 主管团队 | 待执行 |
| 2026-07-31 | 试点窗口结束,统计最终数据 | 项目经理 | 待执行 |
| 2026-08-07 | 满意度问卷收集完成 | 项目经理 | 待执行 |
| 2026-08-08 | P0验收报告输出 | 开发+项目经理 | 待执行 |
| 窗口开始前 | P0-1权限正反例全部验证 | 开发+测试 | 待执行 |
| 窗口开始前 | P0-2真机能力验证(iOS+Android各2台) | 测试 | 待执行 |
| 窗口中点 | P0-3中期检查(完成率/校准样本) | 项目经理 | 待执行 |
| 窗口结束前 5 天 | P0-3末期检查(完成率冲刺) | 主管团队 | 待执行 |
| 窗口结束日 | 统计最终数据 | 项目经理 | 待执行 |
| 窗口结束后 7 天 | 满意度问卷收集完成 | 项目经理 | 待执行 |
| 问卷完成后 | P0验收报告输出 | 开发+项目经理 | 待执行 |
---
## 七、风险与应急预案
### 风险1:完成率不达标
- **触发条件**: 2026-07-26时完成率<50%
- **触发条件**: 窗口结束前 5 天完成率<50%
- **应急预案**:
- 主管团队每人认领2-3名员工,1对1催促
- 开放"每日题+1次对练"任务包,完成即可算2次训练(加速达标)
- 必要时延长试点窗口至2026-08-07(+7天)
- 必要时经业务负责人批准延长窗口,并重新登记起止日期
### 风险2:真机能力不可用
- **触发条件**: P0-2验证时iOS/Android某项能力失败率>50%
@@ -231,4 +212,4 @@
---
**清单版本**: v1.0 | **最后更新**: 2026-07-18 02:45 | **下次更新**: 2026-07-19(P0-1执行后)
**模板状态**: 等待本批项目、窗口、受控测试身份和业务审核人登记;具体完成事实只回写到对应试点报告与 [BRD_IMPLEMENTATION_AUDIT.md](BRD_IMPLEMENTATION_AUDIT.md)。