feat: 补齐报销付款待办交接(09-11-reimbursement-payment-handoffs)
这个提交包含在:
@@ -0,0 +1,9 @@
|
||||
# 最小待办交接投影
|
||||
|
||||
服务端服务 `loadReimbursementPaymentHandoffs` 从业务记录只读构造 `{ total, items }`,挂在现有 portal home DTO。项目为小团队,四类活动对象按稳定 key 去重,total 从返回 items 计算;不新建队列数据库或通用任务系统。资料未齐不是忽略该报销的理由,点击进入原业务页由权威 readiness/写事务决定能否组批。
|
||||
|
||||
只选择必要字段。退回检查最新流程最后的 return/reject 事实,禁止把历史曾退回但当前主动撤回的草稿重新标成待修改。付款查询限 reimbursement,exclude deleted/paid,排除非取消批次占用;部门 gate 在本次加载内缓存,不解密银行资料。批次复核使用原 manager/ceo+review 资格及非制单人条件;付款处理仅 manage。
|
||||
|
||||
门户行动行复用现有组件,旧 finance pending/failed 聚合行只作为旧服务端 DTO 兼容,收到新投影时不重复列入行动计数;独立风险提醒不冒充付款复核。移动端复用同一 items,报销使用 mobile 深链,付款沿既有移动边界。只读查询错误使用页面已有错误反馈,不回落成零待办。
|
||||
|
||||
无 schema/迁移/seed/业务写入/消息发送;已有通知机制不变,通知丢失不丢业务事实。每次渲染不是批准执行,写接口仍独立授权。代码回退恢复旧门户,不改业务记录。独立 reviewer 受 inline 限制时明确 pending。
|
||||
@@ -0,0 +1,29 @@
|
||||
# 执行清单
|
||||
|
||||
已获 2026-09-11 综合规划实施批准;独立工作树基线 fe025e65。复用已读 backend/frontend/权限规约;未授权生产操作、提交、推送或归档。
|
||||
|
||||
- [x] 只读事实加载与四类投影,最小 DTO 和正反例。
|
||||
- [x] 接入 PC/手机既有门户,避免新旧聚合重复,聚焦/重入刷新。
|
||||
- [x] Vitest 服务/路由、客户端 typecheck/build、合成 Playwright、真实隔离业务状态演进验证。
|
||||
- [x] 主会话只读检查和规约更新;与详情修复按补丁形成联合工作树,不整文件覆盖。
|
||||
- [ ] 独立只读 review,inline 主会话自检不抵扣。
|
||||
- [ ] 明确授权后分别提交推送、冻结新候选。
|
||||
- [ ] 最新生产/备份只读预检、就绪/恢复、获批发布及公网受控验收,分别登记,不由本地 PASS 推导。
|
||||
|
||||
## 2026-09-11 实施与联合验收回执
|
||||
|
||||
代码完成但未提交。原独立副本为 artifacts/isolated-worktrees/20260911-payment-handoffs;联合副本为 artifacts/isolated-worktrees/20260910-reimbursement-payment-integration,基线同为 fe025e65。联合副本包含 09-04 详情修复与本任务,两个共享 QA 文件按补丁合并;根 checkout 既有改动、旧已审包与干净发布 clone 未动。正式 current 分别与各自任务一致;没有将旧 HEAD 冒充包含本轮改动的候选 SHA。
|
||||
|
||||
- 服务端只读事务派生四类事项,不存 todo、不发通知、不解密账户;来源/部门 gate、角色/权限、非本人制单及删除/撤回排除均有正反例。缺银行资料仍是待组批事项,不声称能成功创建批次。
|
||||
- PC/手机使用同一 DTO,total 与全部明细一致;收到新投影不重复叠加旧财务聚合。移除 PC 行动前八项截断,增加超过八条回归。加载失败与空态分开,局部重入/聚焦重新查询。
|
||||
- 联合单测:6 文件 135/135,unit.log;联合页面:39/39、退出 0,ui.log;build.log 包含 typecheck/build/PWA。这些是联合数量,不与分项 16/16、3/3 重复相加。
|
||||
- real-db-browser.log:PASS_REAL_DB_HTTP、退出 0。真实一次性 PostgreSQL、密码登录/JWT、HTTP、桌面/手机,按退回→重提→审批→组批→独立复核→导出→合成回单→登记推进;门户事项随状态出现/消失,重复读取稳定且不写审计。并行保留原退回留痕删除、授权、历史材料与发票重用回归。
|
||||
- 最终证据在联合副本 artifacts/qa-flow/20260911-combined/;独立分项记录保留在原副本 artifacts/qa-flow/20260911-handoffs/。已查看联合 PC/手机门户合成截图,复用既有组件,不宣称新视觉体系已审。
|
||||
- 测试修正仅为真实 CJS require/feature flag fixture、has_session cookie 及合成回单字段对齐;没有放宽认证、资料门禁或产品付款约束。初次失败日志留存,以最终联合退出 0 为准。
|
||||
- 主会话已只读复核投影最小字段、只读事务、来源排除、目标入口、maker-checker、无新增写入及新旧聚合去重。独立 reviewer 未执行,旧候选审查不自动覆盖本轮。
|
||||
|
||||
测试不用真实员工或银行数据;OCR 为真实 worker + mock provider,长审批历史为合成 fixture。回单登记只发生在隔离合成库,没有银行连接。数据库和合成文件已清理;未调用真实腾讯 OCR、未恢复正式备份、未查询/修改生产、未发送消息。正式就绪与配对恢复准备仍归原付款/备份任务,不假报首批员工启用完成。
|
||||
|
||||
## 下一步与提交边界
|
||||
|
||||
先以联合 changes.diff/manifest 固定未提交输入供只读复核。建议与 09-04 拆为两笔,各引用 task;共享 QA 的先后补丁必须保留,不能整文件覆盖。无 schema/migration/seed/角色修改,本任务代码回退不修改业务记录;整站既有留痕删除回退语义仍有效。获批提交推送后冻结真实候选,再刷新生产和恢复前置、另批部署与公网合成验收,不让真人代测。
|
||||
@@ -0,0 +1,38 @@
|
||||
# 报销付款四类待办交接投影
|
||||
|
||||
## Goal
|
||||
|
||||
以现有业务状态只读投影退回修改、财务待组批、独立付款复核、财务付款登记四类待办,统一门户入口和计数;不新增审批状态机或生产写入。
|
||||
|
||||
## Requirements
|
||||
|
||||
- 用户已批准综合规划连续本地实施。本任务只承接四次业务交接,不改通用 todo 手工事项、审批状态机、角色、银行渠道或资料。
|
||||
- 退回/驳回报销向有维护资格的 owner/submitter 投影待修改;从未提交的私人草稿、已撤回和留痕删除不算退回待办。
|
||||
- 财务看到未付款且未被有效批次占用的已审批报销;缺资料仍是待处理,不把待组批投影说成已通过创建门禁。部门功能开关与真实批次入口权限保持一致。
|
||||
- 经理/CEO 的付款复核待办排除本人制单;财务看到 reviewed/failed 批次的付款/回单登记待办,不把 draft 的复核动作交给制单人。
|
||||
- 门户 PC/手机消费同一服务端投影;每个对象/阶段稳定唯一,数量与列表一致,处理后重新查询即消失,不依赖通知送达或复制出持久化待办。
|
||||
- 不输出金额、事由、姓名、银行卡或原始错误。只展示业务编号、阶段、责任职责和有权限的目标入口。手机不新增批量付款能力。
|
||||
|
||||
## Scope
|
||||
|
||||
报销/付款四类交接的服务端只读投影、现有 PC/手机门户展示、计数与刷新及定向验证。
|
||||
|
||||
## Out of Scope
|
||||
|
||||
新审批引擎、手工 todo 改造、schema/migration、角色变更、自动付款、真实业务资料读取/回填、企业微信发送、生产部署、批量归档。
|
||||
|
||||
## Test Plan
|
||||
|
||||
Vitest 四类服务与 portal route;真实隔离 PostgreSQL/认证/HTTP 退回、重提、审批、组批、复核、合成回单与付款登记;Playwright 合成 PC/手机门户(含 refresh、空态、重复聚合排除);client typecheck/build、UI strict、Trellis governance、git diff --check。真实腾讯 OCR 与正式恢复未覆盖。
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
- [x] 四类状态正反例、真实角色/权限、maker-checker、部门开关、删除/撤回/新草稿排除有回归。
|
||||
- [x] 同一响应的 total 与实际 items 一致,无计数截断伪装;旧财务汇总不重复算作行动。
|
||||
- [x] 真实隔离库推进退回→重提→审批→组批→复核→登记,重复读取不写库,不依赖通知发送。
|
||||
- [x] PC/手机入口、错误与空态、查询刷新及最终联合工作树回归通过。
|
||||
- [ ] 独立只读 review、授权提交和部署后的受控验收,不以主会话本地测试抵扣。
|
||||
|
||||
## Notes
|
||||
|
||||
- 复用 09-04/09-08 真实交接证据。本独立跨模块交付与详情一致性分工作树,不为每个页面/按钮新建 task。
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"id": "reimbursement-payment-handoffs",
|
||||
"name": "reimbursement-payment-handoffs",
|
||||
"title": "报销付款四类待办交接投影",
|
||||
"description": "以现有业务状态只读投影退回修改、财务待组批、独立付款复核、财务付款登记四类待办,统一门户入口和计数;不新增审批状态机或生产写入。",
|
||||
"status": "in_progress",
|
||||
"dev_type": "fullstack",
|
||||
"scope": "portal-reimbursement-payment",
|
||||
"package": null,
|
||||
"priority": "P2",
|
||||
"creator": "shunli",
|
||||
"assignee": "shunli",
|
||||
"createdAt": "2026-09-11",
|
||||
"completedAt": null,
|
||||
"branch": null,
|
||||
"base_branch": "main",
|
||||
"worktree_path": null,
|
||||
"commit": null,
|
||||
"pr_url": null,
|
||||
"subtasks": [],
|
||||
"children": [],
|
||||
"parent": null,
|
||||
"relatedFiles": [],
|
||||
"notes": "09-11本地实施完成,与09-04详情修复按补丁联合;135单测、39页面及真实隔离HTTP/双端状态演进通过,未调用真实银行/OCR或生产。基线fe025e65不含本次未提交改动;独立复核、授权提交推送、新鲜预检/配对恢复与部署验收待执行。证据与副本位置见implement,不归档。",
|
||||
"meta": {}
|
||||
}
|
||||
在新工单中引用
屏蔽一个用户