docs(work-report): define voice-first reporting flow

This commit is contained in:
2026-07-19 03:17:16 +08:00
parent 9210b7dde6
commit 6074258ea6
5 changed files with 98 additions and 9 deletions
@@ -1,11 +1,12 @@
# 物业行业 AI 人力资源系统 · 开发规格(Tech Spec)
> 版本:v1.4 | 日期:2026-07-03
> 版本:v1.5 | 日期:2026-07-19
> 定位:**开发层唯一依据**。回答"怎么建"——工程结构、数据表、API 契约、Prompt 规格、集成适配。
> v1.1 变更:数据模型对齐《手册》卷1 第9章 HR 主干,补 3 张 backbone 表(职位职责/雇员绩效/雇用终止),新增附录 D 对照表。
> v1.2 变更:第 6 章按 Codex 设计评审重写——状态机补异常/终止态、COACH_CHECK 工程化、评分引擎分层(P0 单 LLM / P1 融合)、澄清"单场对练评分 vs 跨期能力画像"两套评分、Prompt 加固 + RAG 硬约束、新增 6.5 P0/P1 切分。
> v1.3 变更:Qdrant 作为一期向量索引层落地;SOP 知识库检索升级为 MySQL Fulltext + Qdrant RRF 融合,MySQL/MinIO 仍是事实源。
> v1.4 变更:移动端拆为独立 `mobile/` Vue/Vite Web/H5 工程,承载员工端、候选人端、主管端;后台管理端继续在 `frontend/`。
> v1.5 变更:当前用户侧以 `mobile-uni/` 为准;员工工作上报复用 `ChatComposer` 改为语音优先会话,增加无状态 AI 整理草稿契约,确认后继续提交既有 `aihr_work_report` 审核链。
> 配套:需求见[《物业AI人力资源系统业务需求文档BRD》](物业AI人力资源系统业务需求文档BRD.md);2026-07 MVP 执行计划已归档到[《AI人力资源系统一期MVP版作战清单》](archive/2026-07-mvp-delivery/AI人力资源系统一期MVP版作战清单.md)。
> **优先级图例**:`P0`=2026-07-05 MVP 演示必需 · `P1`=一期必需 · `P2`=二期/推迟。
> 决策基线:若依基座 / 集中式前后端分离 / 本地登录 / 公有大模型API / 一期RAG / 组织人员外部同步(MVP 用快照) / 数据范围以项目为主体。
@@ -176,6 +177,7 @@ mobile/
| `/h5/#/pages/user/today/index` | 员工端首页,手机号登录后可“开始训练”并同步主管待复盘计数;旧 `/h5/user` 兼容重定向 | P0跑通 |
| `/h5/#/pages/candidate/index/index` | 候选人端首页,手机号登录后可面试练习、查岗位 SOP/案例、上传补充资料;旧 `/h5/candidate` 兼容重定向 | P0跑通 |
| `/h5/#/pages/supervisor/index/index` | 主管端首页,查看团队、待复盘、案例/SOP 工具;旧 `/h5/supervisor` 兼容重定向 | P0跑通 |
| `/h5/#/pages/user/report/index` | 员工工作上报;目标交互复用「问」的微信式语音会话,AI 整理确认后提交既有审核链 | 已有表单链路,待交互升级 |
| `/train/daily` | 每日一练 | P1 |
| `/train/camp` | 专项训练营 | P1 |
| `/train/mistakes` | 错题本 | P1 |
@@ -254,6 +256,65 @@ POST /api/knowledge/case/organize req: { caseId } resp
POST /api/knowledge/case/curate req: { criteria, limit } resp: { selectedCaseIds[] } // 从多案例筛选
```
#### 5.3.1 员工工作上报会话化交互
实现基准:[work-report-voice-conversation-v1.png](prototypes/work-report-voice-conversation-v1.png)。后续 Agent 应复用图中的语音主入口、必要追问、结构化确认卡和显式“确认上报”,但安全、权限、长度校验和审核状态以本 TechSpec 与后端契约为准。
员工端 `mobile-uni/src/pages/user/report/index.vue` 的目标形态复用现有 `ChatComposer` 和「问」页消息语言,不再让四类选择、标题和说明字段占据首屏。后台仍使用 `aihr_work_report` 及现有审核链,避免为视觉改版复制数据模型。
```text
进入工作上报
→ 默认语音模式,可切换键盘或添加图片/视频
→ ASR 转写进入当前页面草稿
→ AI 从自然表达推断 CASE / VIDEO / SOP / KNOWLEDGE
→ 信息不足时只追问必要字段
→ 返回可编辑确认卡
→ 用户点击“确认上报”
→ POST /api/aihr/work-report/reports
→ 返回 PENDING,并在会话与“我的上报”中展示审核状态
```
最小接口策略:附件继续复用 `POST /api/aihr/work-report/attachment`,正式提交继续复用 `POST /api/aihr/work-report/reports`,历史继续复用 `GET /api/aihr/work-report/reports/mine`。只增加一个无状态整理接口,不新增草稿表或第二套会话表:
```text
POST /api/aihr/work-report/organize
req: { transcript, currentDraft?, attachmentOssId?, attachmentName? }
resp: { suggestedType, title, content, missingQuestions[], privacyWarnings[], confidence }
```
- `organize` 只返回结构化草稿,不得写 `aihr_work_report`;页面刷新前草稿保存在前端当前会话状态,只有确认后的正式记录持久化。
- 类型由 AI 建议但必须允许员工修改;`VIDEO` 仍由后端校验视频附件,标题和说明长度继续执行现有边界。
- 语音、文字和附件输入复用 `mobile-uni/src/components/chat/ChatComposer.vue`、`services/speech.ts` 与现有上传接口,不新增录音框架。
- 住户敏感信息应在确认卡中提示脱敏;提交、附件读取、我的上报与审核接口继续从登录态解析租户和用户,不接受客户端伪造提交人。
- 审核通过不自动写案例库或企业知识库;运营最终入库沿用现有人工流程。
#### 5.3.2 高保真评审实施细则
设计图用于确定结构和视觉方向,代码实现必须吸收以下评审修订,不得逐像素复制图中的矛盾文案:
1. **语音与文字状态唯一**
- 用户语音经 ASR 后始终显示带“语音转文字”标记的文字气泡。
- 师傅短追问直接显示文字,并在气泡内提供播放按钮;此时不显示“转文字”。
- 师傅长回答默认显示语音条,正文折叠;按钮状态只能在“转文字 / 收起文字”之间切换。
2. **分类可确认**
- `organize` 返回 `suggestedType`,确认卡展示“建议类型:{typeLabel}”和修改入口。
- `POST /reports` 使用员工最后确认的 `type`,不得直接使用模型建议值提交。
3. **脱敏提示必须真实**
- `privacyWarnings` 只描述检测结果,不代表系统已经完成脱敏。
- P0 若没有服务端脱敏能力,提示“检测到具体房号,请修改后再提交”,用户修改后确认卡重新展示最终提交文本。
- 只有服务端确实生成脱敏内容、且确认卡展示的就是该提交内容时,才允许出现“已隐藏”或自动脱敏开关。
4. **补充入口唯一**
- 确认卡只保留“修改 / 确认上报”;底部 `ChatComposer` 继续承担语音、文字和附件补充。
- 不同时展示“继续补充”按钮和可用的底部输入栏;需要引导时只显示弱提示“还可以继续说话补充”。
视觉与交互验收:
- 在 390×844 视口下,确认卡可滚动且底部输入栏不遮挡“修改 / 确认上报”。
- 页面不存在“文字追问已展开但按钮仍写转文字”的状态。
- 类型标签包含“建议类型”语义并可修改,确认提交请求使用修改后的类型。
- 未实现服务端脱敏时,页面不得出现“提交后将自动隐藏具体房号”等承诺性文案。
- 页面只有一个继续补充入口;确认提交后返回 `PENDING` 状态卡并可从“我的上报”查到同一记录。
### 5.4 AI 适配层(P0)
```