- 删除已落地的 improvement-roadmap、superpowers 计划与 ui-mockups 参考稿,删除早期 work-log(2026-05-06~08) - 新增 2026-05-23 起的 work-log 与 attachment-association-background-job、reimbursement-draft-action-branching 等开发文档及用户文档 - docker-compose(.full).yml 微调服务配置
138 lines
7.7 KiB
Markdown
138 lines
7.7 KiB
Markdown
# 报销草稿分支动作收口 概念文档
|
||
|
||
更新时间:2026-06-23
|
||
|
||
## 功能一句话
|
||
|
||
当用户发起报销且系统命中可继续的报销草稿时,只提供“查看草稿、继续关联草稿、独立新建报销单”三个明确入口,让用户能看详情、补附件/说明,或确认另起一张新草稿。
|
||
|
||
## 背景与问题
|
||
|
||
- 当前现状:AI 工作台和报销助手在“我要报销”后会先查询可继续报销草稿;命中草稿时,当前按钮把“继续草稿”和“打开详情”混在一起,并把跳过草稿描述成“关联申请单新建报销单”。
|
||
- 用户痛点:按钮语义不清,用户无法判断点击“继续草稿”是打开详情、继续补附件,还是进入申请单关联。
|
||
- 业务影响:报销草稿与新建报销单的路径混杂,容易造成重复草稿、附件归集错误或用户误以为已继续处理。
|
||
- 为什么现在需要做:截图中的草稿分支是报销入口的第一屏决策,需要先把按钮数量、文案和后续状态固定下来,再继续开发。
|
||
|
||
## 目标与非目标
|
||
|
||
### 目标
|
||
|
||
- [G1] 命中可继续报销草稿时,快捷按钮固定为三个:查看草稿、继续关联草稿、独立新建报销单。
|
||
- [G2] “查看草稿”只负责跳转详情页,不承担继续上传或新建逻辑。
|
||
- [G3] “继续关联草稿”只负责把当前会话切到“等待上传附件或补充说明”的状态,并锁定目标草稿。
|
||
- [G4] “独立新建报销单”先提示用户确认是否新建草稿单据,再进入新草稿创建流程。
|
||
|
||
### 非目标
|
||
|
||
- [NG1] 本轮不改后端草稿保存、附件 OCR、风险审核和审批流规则。
|
||
- [NG2] 本轮不改变申请单关联命中时的“选择申请单 / 单独新建报销单”逻辑。
|
||
- [NG3] 本轮不重做报销助手整体 UI,只收口草稿命中态的按钮和动作流。
|
||
|
||
## 用户与场景
|
||
|
||
- 目标用户:普通员工在个人工作台 AI 模式或报销助手中发起报销。
|
||
- 使用入口:快捷操作“发起报销”、输入“我要报销 / 发起报销 / 新建报销”。
|
||
- 核心场景:
|
||
1. 系统查到可继续报销草稿,展示草稿卡片和三个按钮。
|
||
2. 用户点击“查看草稿”,打开对应单据详情页。
|
||
3. 用户点击“继续关联草稿”,系统提示上传相关附件或补充说明。
|
||
4. 用户点击“独立新建报销单”,系统询问是否新建草稿单据。
|
||
- 异常场景:
|
||
- 草稿缺少 `claim_id` 时,“查看草稿”和“继续关联草稿”不能提交无目标动作。
|
||
- 历史会话里的旧动作仍可兼容处理,不影响新生成提示。
|
||
|
||
## 功能能力
|
||
|
||
- [C1] 输入能力:读取报销草稿候选单据,识别 `claim_id`、`claim_no`、状态、金额、时间和事由。
|
||
- [C2] 处理能力:将草稿命中态动作拆成查看、继续关联、独立新建三条互斥分支。
|
||
- [C3] 输出能力:输出固定三按钮,并在点击后生成明确的用户回显和助手提示。
|
||
- [C4] 状态与权限:继续关联时记录目标草稿,后续上传附件或补充说明应围绕该草稿继续。
|
||
- [C5] 边界与降级:保留旧 `skip_reimbursement_draft_check` 动作兼容,避免历史会话按钮失效。
|
||
|
||
## 方案设计
|
||
|
||
### 前端
|
||
|
||
- 页面/组件:
|
||
- `travelReimbursementAssociationGateModel.js` 负责生成草稿命中态文案和三个动作。
|
||
- `useWorkbenchAiActionRouter.js` 负责个人工作台 AI 模式的动作分流。
|
||
- `useWorkbenchAiExpenseFlow.js` 负责个人工作台中的继续关联提示和独立新建确认提示。
|
||
- `useTravelReimbursementSuggestedActions.js` 负责报销助手页面中的相同动作分流。
|
||
- 交互状态:
|
||
- 查看草稿:沿用 `open_application_detail`,只跳转详情。
|
||
- 继续关联草稿:新增动作类型,点击后提示“请上传相关附件,或补充说明”,并记录目标草稿。
|
||
- 独立新建报销单:新增动作类型,点击后提示“是否新建草稿单据”,确认后进入现有单独新建流程。
|
||
- 展示规则:
|
||
- 草稿命中态只显示三个按钮,不再出现“继续草稿”或“不用草稿,关联申请单新建报销单”。
|
||
- 按钮文案携带草稿编号,方便用户辨认目标。
|
||
- 降级处理:
|
||
- 历史旧动作仍走原有分支。
|
||
- 缺少草稿 ID 时给出 toast,不继续进入无目标关联。
|
||
|
||
### 后端
|
||
|
||
- 接口/服务:当前不新增接口。
|
||
- 权限与校验:沿用现有详情页与草稿操作权限。
|
||
- 持久化:当前不改后端持久化结构。
|
||
- 降级处理:后续上传附件或保存草稿仍使用现有 orchestrator 与附件归集能力。
|
||
|
||
### 算法与规则
|
||
|
||
- 输入:已筛选出的报销草稿候选。
|
||
- 流程:按更新时间排序后取首个草稿作为三按钮默认目标;草稿卡片仍展示候选详情。
|
||
- 输出:三个动作对象及后续提示文案。
|
||
- 解释:本轮不是匹配算法改造,只是草稿命中后的动作语义收口。
|
||
|
||
### 数据与契约
|
||
|
||
- 核心字段:`claim_id`、`claim_no`、`original_message`、`draft_claim_id`、`selected_claim_no`。
|
||
- 状态枚举:新增前端动作类型 `continue_reimbursement_draft_association`、`create_standalone_reimbursement_draft`、`cancel_standalone_reimbursement_draft`。
|
||
- 兼容策略:保留 `open_application_detail` 和旧跳过动作分支。
|
||
- 版本/审计:通过前端测试锁定动作数量、文案和路由行为。
|
||
|
||
## 算法与公式
|
||
|
||
当前功能不涉及显式数学公式。
|
||
|
||
## 测试方案
|
||
|
||
后端:
|
||
|
||
- 当前不新增后端测试;本轮没有修改后端服务或接口。
|
||
|
||
前端:
|
||
|
||
- 扩展 `workbench-ai-reimbursement-association-gate.test.mjs`,验证草稿命中态只输出三个动作和新文案。
|
||
- 扩展 `workbench-ai-action-router.test.mjs`,验证继续关联、独立新建确认的路由行为。
|
||
- 扩展 `travel-reimbursement-guided-flow.test.mjs` 或既有报销助手动作测试,验证旧报销助手使用相同动作语义。
|
||
|
||
集成:
|
||
|
||
- 运行相关 Node 测试,确认 AI 工作台和报销助手入口没有回退到旧按钮。
|
||
|
||
手工验证:
|
||
|
||
- 在个人工作台 AI 模式输入“我要报销”,命中草稿后检查按钮数量和点击行为。
|
||
|
||
## 指标与验收
|
||
|
||
- [A1] 功能验收:草稿命中态固定显示三个按钮,且第一个按钮跳详情,第二个按钮提示上传附件/说明,第三个按钮提示是否新建草稿单据。
|
||
- [A2] 性能指标:不增加额外接口查询;仍复用一次单据列表查询。
|
||
- [A3] 质量指标:定向前端测试通过,旧动作兼容测试不失效。
|
||
- [A4] 安全/权限指标:不绕过详情页和草稿操作原有权限。
|
||
- [A5] 可观测性:对话消息中能看到用户选择了哪个分支。
|
||
|
||
## 风险与开放问题
|
||
|
||
- 风险:多个草稿同时命中时,三个按钮默认指向最新草稿;用户如需其他草稿,可先通过卡片查看信息后进入详情页处理。
|
||
- 风险:全量 `code-size-limits` 当前仍会被既有 `TopBar.vue:824` 阻断;本轮新增和修改的文件均已控制在 800 行内。
|
||
- 已处理依赖:复用现有详情页跳转、报销场景选择和草稿保存链路。
|
||
- 待确认:后续是否要在草稿卡片内为每张草稿提供独立按钮;本轮先按截图中的三按钮入口收口。
|
||
- 降级策略:旧历史会话按钮保持可点击,不强制迁移旧消息。
|
||
|
||
## 本轮实现记录
|
||
|
||
- 2026-06-23:先落本文档和 TODO,再按测试驱动修改前端草稿分支动作。
|
||
- 2026-06-23:新增 `travelReimbursementDraftBranchModel.js` 承载草稿三分支动作,避免继续放大 `travelReimbursementAssociationGateModel.js`。
|
||
- 2026-06-23:个人工作台和报销助手页面均已接入“继续关联草稿”和“独立新建报销单”的后续提示。
|