R72-A1 建档报销撤回释放发票执行合同
这个提交包含在:
@@ -0,0 +1,5 @@
|
||||
"ID","Title","Description","Acceptance","Test_Method","Tools","Dev_Status","Review1_Status","Regression_Status","Files","Dependencies","Notes"
|
||||
"A1","R72 执行合同建档与范围冻结","创建并校验 R72 合同,仅承接“报销撤回后释放已绑定发票回票池”这一条闭环修复,并补对应后端回归;不承接 OCR 提取、重复发票查重、票池工作台增强、Prisma 迁移或审批流重构。","issues/2026-04-28_19-34-41-r72-reimbursement-withdraw-invoice-release.csv 列完整且通过校验;A2-A4 依赖顺序清晰;Notes 明确本轮无 schema 变更且只做最小状态释放。","命令:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-04-28_19-34-41-r72-reimbursement-withdraw-invoice-release.csv。检查:12 列完整、Dependencies 为 JSON 数组字符串、Files 为实际路径或哨兵值。","manual","DONE","DONE","DONE","issues/2026-04-28_19-34-41-r72-reimbursement-withdraw-invoice-release.csv","[]","回滚路径:删除本 CSV;不影响业务运行。2026-04-28:合同已写入并通过 validate_issues_csv.py 校验。"
|
||||
"A2","报销撤回时释放已绑定发票并补后端回归","在 server 侧保持现有“仅 reviewing 可撤回、仅申请人/提交人可撤回、审批人已处理后不可撤回”规则不变;当报销从 reviewing 撤回到 draft 时,自动把 linked_reimbursement_id 命中的 bound 发票恢复为 available,并清空 linked_reimbursement_id / linked_item_id;补 focused route test 覆盖 submit 后撤回再重绑的核心闭环。","POST /api/reimbursements/:id/withdraw 成功后,关联 bound 发票状态回到 available,linked_reimbursement_id 与 linked_item_id 归空;原有 withdraw 拒绝条件不回归;同一张发票可再次用于该报销或其他草稿报销绑定;不新增数据库字段,不改变提交前必须绑定发票规则。","命令:cd server && npm run prisma:validate && node --check src/routes/reimbursements.js && npm test -- tests/unit/routes/reimbursements.withdraw.test.js。业务:员工已有 reviewing 报销且已绑定发票 -> 撤回 -> 发票回到票池可绑定 -> 再次绑定同张发票成功。","manual","DOING","TODO","TODO","server/src/routes/reimbursements.js|server/tests/unit/routes/reimbursements.withdraw.test.js","[""A1""]","涉及报销状态流与票据绑定关系,回滚路径:撤回 withdraw 中的 invoicePool.updateMany 释放逻辑及新增测试;无 schema 迁移。"
|
||||
"A3","撤回释放闭环 reviewer 复核","对 A2 做独立行为复核,确认修复只影响撤回成功路径,不放宽 withdraw 权限、不绕过审批已处理阻断,也不误释放其他报销单绑定的发票。","review 结论覆盖:withdraw 权限边界、reviewing->draft 状态转换、invoice_pool 释放 where 条件是否只命中当前报销、失败路径下发票状态是否保持原状、与 delete 释放逻辑是否一致。","人工 review:对照 server/src/routes/reimbursements.js 中 delete/withdraw 两段释放逻辑与新增测试断言,输出 reviewer 结论;若发现跨报销误释放、失败路径提前释放或权限回归,则 A4 前必须先修复。","manual","TODO","TODO","TODO","server/src/routes/reimbursements.js|server/tests/unit/routes/reimbursements.withdraw.test.js","[""A2""]","本 Issue 只输出 review 结论,不新增业务需求。"
|
||||
"A4","R72 定向回归与状态回填","执行 R72 定向自动化回归,并把本轮开发、review、regression 状态回填到 Issue CSV;确认该修复不影响既有报销详情与发票绑定能力。","A2/A3 测试与复核通过后,本 CSV 状态回填完整;withdraw 释放闭环通过;既有 invoice upload/bind 与 reimbursement detail 相关测试不回归。","命令:cd server && npm run prisma:validate && node --check src/routes/reimbursements.js && npm test -- tests/unit/routes/reimbursements.withdraw.test.js tests/unit/routes/reimbursements.detail.test.js tests/unit/routes/invoicePool.travel-bind.test.js。业务:撤回释放后,同张发票重新出现在可绑定集合,不影响已存在详情展示字段。","manual","TODO","TODO","TODO","issues/2026-04-28_19-34-41-r72-reimbursement-withdraw-invoice-release.csv|server/tests/unit/routes/reimbursements.withdraw.test.js|server/tests/unit/routes/reimbursements.detail.test.js|server/tests/unit/routes/invoicePool.travel-bind.test.js","[""A2"",""A3""]","已知不在本轮范围:client build chunk warnings、OCR 可信度分层、重复发票查重。"
|
||||
|
在新工单中引用
屏蔽一个用户