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

138 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 报销草稿分支动作收口 概念文档
更新时间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个人工作台和报销助手页面均已接入“继续关联草稿”和“独立新建报销单”的后续提示。