Files
X-Financial/document/development/reimbursement-draft-action-branching/CONCEPT.md
caoxiaozhu f9553a6a1a docs: 清理过期计划文档并补全 work-log 与开发/用户文档
- 删除已落地的 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 微调服务配置
2026-06-24 10:42:57 +08:00

7.7 KiB
Raw Blame History

报销草稿分支动作收口 概念文档

更新时间2026-06-23

功能一句话

当用户发起报销且系统命中可继续的报销草稿时,只提供“查看草稿、继续关联草稿、独立新建报销单”三个明确入口,让用户能看详情、补附件/说明,或确认另起一张新草稿。

背景与问题

  • 当前现状AI 工作台和报销助手在“我要报销”后会先查询可继续报销草稿;命中草稿时,当前按钮把“继续草稿”和“打开详情”混在一起,并把跳过草稿描述成“关联申请单新建报销单”。
  • 用户痛点:按钮语义不清,用户无法判断点击“继续草稿”是打开详情、继续补附件,还是进入申请单关联。
  • 业务影响:报销草稿与新建报销单的路径混杂,容易造成重复草稿、附件归集错误或用户误以为已继续处理。
  • 为什么现在需要做:截图中的草稿分支是报销入口的第一屏决策,需要先把按钮数量、文案和后续状态固定下来,再继续开发。

目标与非目标

目标

  • [G1] 命中可继续报销草稿时,快捷按钮固定为三个:查看草稿、继续关联草稿、独立新建报销单。
  • [G2] “查看草稿”只负责跳转详情页,不承担继续上传或新建逻辑。
  • [G3] “继续关联草稿”只负责把当前会话切到“等待上传附件或补充说明”的状态,并锁定目标草稿。
  • [G4] “独立新建报销单”先提示用户确认是否新建草稿单据,再进入新草稿创建流程。

非目标

  • [NG1] 本轮不改后端草稿保存、附件 OCR、风险审核和审批流规则。
  • [NG2] 本轮不改变申请单关联命中时的“选择申请单 / 单独新建报销单”逻辑。
  • [NG3] 本轮不重做报销助手整体 UI只收口草稿命中态的按钮和动作流。

用户与场景

  • 目标用户:普通员工在个人工作台 AI 模式或报销助手中发起报销。
  • 使用入口:快捷操作“发起报销”、输入“我要报销 / 发起报销 / 新建报销”。
  • 核心场景:
    1. 系统查到可继续报销草稿,展示草稿卡片和三个按钮。
    2. 用户点击“查看草稿”,打开对应单据详情页。
    3. 用户点击“继续关联草稿”,系统提示上传相关附件或补充说明。
    4. 用户点击“独立新建报销单”,系统询问是否新建草稿单据。
  • 异常场景:
    • 草稿缺少 claim_id 时,“查看草稿”和“继续关联草稿”不能提交无目标动作。
    • 历史会话里的旧动作仍可兼容处理,不影响新生成提示。

功能能力

  • [C1] 输入能力:读取报销草稿候选单据,识别 claim_idclaim_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_idclaim_nooriginal_messagedraft_claim_idselected_claim_no
  • 状态枚举:新增前端动作类型 continue_reimbursement_draft_associationcreate_standalone_reimbursement_draftcancel_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个人工作台和报销助手页面均已接入“继续关联草稿”和“独立新建报销单”的后续提示。