# 报销草稿分支动作收口 概念文档 更新时间: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:个人工作台和报销助手页面均已接入“继续关联草稿”和“独立新建报销单”的后续提示。