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 微调服务配置
This commit is contained in:
@@ -0,0 +1,137 @@
|
||||
# 报销草稿分支动作收口 概念文档
|
||||
|
||||
更新时间: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:个人工作台和报销助手页面均已接入“继续关联草稿”和“独立新建报销单”的后续提示。
|
||||
@@ -0,0 +1,73 @@
|
||||
# 报销草稿分支动作收口 开发 TODO
|
||||
|
||||
更新时间:2026-06-23
|
||||
|
||||
## 使用规则
|
||||
|
||||
- 每个 TODO 必须对应 `CONCEPT.md` 中的目标、能力、方案或验收点。
|
||||
- 只有完成并验证后,才能把 `[ ]` 改成 `[x]`。
|
||||
- 勾选时在任务后补充简短证据,例如文件、接口、命令或验证结果。
|
||||
- 如果需求发生变化,先更新 `CONCEPT.md`,再调整本 TODO。
|
||||
|
||||
## 1. 调研与边界
|
||||
|
||||
- [x] [CONCEPT: 背景与问题] 阅读相关页面、动作模型和测试,确认当前“继续草稿”实际走详情打开,“不用草稿”走申请单关联。
|
||||
证据:`travelReimbursementAssociationGateModel.js`、`useWorkbenchAiActionRouter.js`、`useWorkbenchAiExpenseFlow.js`、`workbench-ai-reimbursement-association-gate.test.mjs`。
|
||||
- [x] [CONCEPT: 目标与非目标] 确认本轮只改草稿命中态按钮与点击流,不改后端草稿保存和风险审核。
|
||||
证据:`CONCEPT.md` 的目标与非目标章节。
|
||||
- [x] [CONCEPT: 风险与开放问题] 标记多草稿命中时默认指向最新草稿,历史旧动作保留兼容。
|
||||
证据:`CONCEPT.md` 的风险与开放问题章节。
|
||||
|
||||
## 2. 契约与设计
|
||||
|
||||
- [x] [CONCEPT: 功能能力] 定义三个动作分支:查看草稿、继续关联草稿、独立新建报销单。
|
||||
证据:`CONCEPT.md` 的功能能力和方案设计章节。
|
||||
- [x] [CONCEPT: 方案设计] 明确个人工作台 AI 模式与报销助手页面共用动作模型,但分别在各自 action router 中处理点击。
|
||||
证据:`CONCEPT.md` 的前端方案设计章节。
|
||||
- [x] [CONCEPT: 算法与公式] 明确本轮不涉及显式数学公式。
|
||||
证据:`CONCEPT.md` 的算法与公式章节。
|
||||
- [x] [CONCEPT: 指标与验收] 把验收标准拆成按钮数量、按钮文案、点击后提示和旧动作兼容。
|
||||
证据:`CONCEPT.md` 的指标与验收章节。
|
||||
|
||||
## 3. 后端实现
|
||||
|
||||
- [x] [CONCEPT: 后端] 本轮不新增后端 schema、service、endpoint、权限和持久化逻辑。
|
||||
证据:`CONCEPT.md` 明确当前不新增接口。
|
||||
- [x] [CONCEPT: 数据与契约] 后端响应结构不变,新增内容仅为前端动作类型。
|
||||
证据:`CONCEPT.md` 的数据与契约章节。
|
||||
|
||||
## 4. 算法/规则实现
|
||||
|
||||
- [x] [CONCEPT: 算法与规则] 本轮不改候选单据筛选算法,只改命中后的动作分支。
|
||||
证据:`CONCEPT.md` 的算法与规则章节。
|
||||
- [x] [CONCEPT: 功能能力] 明确旧动作保留兼容,不删除历史会话能力。
|
||||
证据:`CONCEPT.md` 的边界与降级说明。
|
||||
|
||||
## 5. 前端实现
|
||||
|
||||
- [x] [CONCEPT: 前端] 在草稿分支模型中新增动作类型和三按钮生成逻辑。
|
||||
证据:`travelReimbursementDraftBranchModel.js` 定义 `CONTINUE_REIMBURSEMENT_DRAFT_ACTION`、`CREATE_STANDALONE_REIMBURSEMENT_DRAFT_ACTION` 和三按钮构造;`travelReimbursementAssociationGateModel.js` re-export 保持兼容。
|
||||
- [x] [CONCEPT: 前端] 在个人工作台 AI 模式中处理继续关联草稿、独立新建确认和取消新建。
|
||||
证据:`useWorkbenchAiActionRouter.js` 分流新动作;`useWorkbenchAiExpenseFlow.js` 追加上传附件/说明提示和新建草稿确认提示。
|
||||
- [x] [CONCEPT: 前端] 在报销助手页面中处理同一批新动作,保持与工作台一致。
|
||||
证据:`useTravelReimbursementSuggestedActions.js` 接入继续关联、独立新建确认和取消新建;`TravelReimbursementCreateView.js` 传入 `draftClaimId` 与 `composerUploadIntent`。
|
||||
- [x] [CONCEPT: 前端] 保留旧动作兼容,不破坏历史会话按钮。
|
||||
证据:`SKIP_REIMBURSEMENT_DRAFT_CHECK_ACTION` 和 `SKIP_REQUIRED_APPLICATION_LINK_ACTION` 仍由原路径处理;相关旧链路测试通过。
|
||||
|
||||
## 6. 测试与验证
|
||||
|
||||
- [x] [CONCEPT: 测试方案] 先补充失败的前端单元测试,覆盖三按钮生成和路由行为。
|
||||
证据:RED 阶段 `workbench-ai-reimbursement-association-gate.test.mjs` 和 `workbench-ai-action-router.test.mjs` 因缺少 `CONTINUE_REIMBURSEMENT_DRAFT_ACTION` 导出失败。
|
||||
- [x] [CONCEPT: 测试方案] 实现后运行定向前端测试,记录通过结果。
|
||||
证据:`node --test web/tests/workbench-ai-reimbursement-association-gate.test.mjs`、`node --test web/tests/workbench-ai-action-router.test.mjs`、`node --test web/tests/travel-reimbursement-guided-flow.test.mjs`、`node --test web/tests/travel-reimbursement-review-drawer-switch.test.mjs`、`node --test web/tests/expense-attachment-draft-selection.test.mjs`、`node --test web/tests/attachment-association-confirmation.test.mjs` 均通过。
|
||||
- [x] [CONCEPT: 指标与验收] 回看验收点,确认没有旧文案继续出现在新草稿命中态。
|
||||
证据:`workbench-ai-reimbursement-association-gate.test.mjs` 断言新草稿命中态有且仅有三个动作,并不再出现“跳过草稿后再关联申请单”。
|
||||
|
||||
## 7. 文档收尾
|
||||
|
||||
- [x] [CONCEPT: 指标与验收] 实现完成后更新本 TODO 的证据。
|
||||
证据:本 TODO 已回填实现文件和测试命令。
|
||||
- [x] [CONCEPT: 风险与开放问题] 根据实现结果更新剩余风险。
|
||||
证据:`CONCEPT.md` 已记录全量 `code-size-limits` 仍被既有 `TopBar.vue:824` 阻断;本轮文件行数为 `travelReimbursementAssociationGateModel.js:714`、`travelReimbursementDraftBranchModel.js:143`。
|
||||
- [x] [CONCEPT: 功能一句话] 确认最终实现没有偏离原始目标。
|
||||
证据:新草稿命中态固定为查看草稿、继续关联草稿、独立新建报销单三个入口。
|
||||
Reference in New Issue
Block a user