文件
hyb-oa/issues/2026-04-08_r55-reimbursement-enhancements.csv
T

8 行
8.5 KiB
CSV
原始文件 Blame 文件历史

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
"A1","R55 执行合同建档与范围冻结","创建并校验 R55 报销统计仪表盘与批量审批执行合同 CSV,冻结范围仅包含报销统计四端点、报销仪表盘页面、报销批量审批/驳回端点与列表批量交互;明确本轮不新增 Prisma 迁移、不修改报销状态机、不改变现有单条 approve/reject 行为。","issues/2026-04-08_r55-reimbursement-enhancements.csv 列完整、Dependencies 为 JSON 数组字符串、Test_Method 可复现;范围仅覆盖 R55 A1-A6,不混入报销状态机调整、工作流核心逻辑重写、离线批处理或 Prisma schema 变更。","命令:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-04-08_r55-reimbursement-enhancements.csv。检查:1) 对照 AGENTS.md 与 issues/README.md 确认 12 列完整;2) A2-A6 依赖链符合 backend/frontend→reviewer→qa 收口;3) 方案明确批量接口仅处理 reimbursement 任务,仪表盘默认时间窗为当前月往前 2 个自然月的 1 号到今天。","manual","DONE","DONE","DONE","issues/2026-04-08_r55-reimbursement-enhancements.csv","[]","回滚路径:删除本次 CSV 不影响业务。2026-04-08:Issue CSV 已创建并通过 validate_issues_csv.py 校验,范围与依赖已冻结。"
"A2","报销统计四端点与聚合单测","在 reimbursements.js 新增 summary、trend、top-expense-types、approval-bottleneck 四个统计端点,并补 route 单测覆盖时间/部门筛选、空数据和权限边界。","4 个统计端点均要求 expense.view_all 权限并沿用现有本人/下属范围过滤;summary 返回 totalCount、totalAmount、零补齐 byStatus 与 avgProcessingDays;trend 用 SQL date_trunc 聚合返回 count/amount/paidCount/paidAmount;top-expense-types 返回费用类型前 N;approval-bottleneck 返回 reviewing 中待办审批人聚合且角色分配任务可用 assigneeName 兜底。","命令:export PATH=/home/shunli/.nvm/versions/node/v22.20.0/bin:$PATH && cd server && npx prisma validate && node --check src/routes/reimbursements.js && npm test -- tests/unit/routes/reimbursements.stats.test.js。业务:1) 使用 dateFrom/dateTo/departmentId 可筛出不同统计结果;2) 无数据时 byStatus 零补齐、avgProcessingDays 为 null、其他列表为空;3) 非 expense.view_all 用户访问返回 403。","manual","DONE","DONE","DONE","server/src/routes/reimbursements.js|server/tests/unit/routes/reimbursements.stats.test.js","[""A1""]","回滚路径:移除统计端点与对应单测,不影响既有报销 CRUD。2026-04-08:4 个统计端点与 reimbursements.stats.test.js 已完成,prisma validate、node --check、路由单测通过。"
"A3","报销统计仪表盘页面与路由入口","新增 ReimbursementDashboardPage、前端统计 API、懒加载路由,并在 ReimbursementsPage 顶部加入统计分析入口。","/reimbursements/dashboard 仅 expense.view_all 用户可访问;页面包含近 3 个自然月默认时间窗、部门筛选、刷新按钮、4 张摘要卡片、按月趋势双 bar、Top 10 费用类型排行和审批瓶颈列表;切换筛选后 4 组查询联动刷新,空数据有明确空态。","命令:export PATH=/home/shunli/.nvm/versions/node/v22.20.0/bin:$PATH && cd client && npm run typecheck && npm run build。业务:1) 财务用户从报销列表点击“统计分析”进入仪表盘;2) 默认看到近 3 个月摘要、趋势、排行、瓶颈;3) 切换日期与部门后数据刷新且平均处理天数无样本时显示 -。","manual","DONE","DONE","DONE","client/src/pages/ReimbursementDashboardPage.tsx|client/src/api/reimbursements.ts|client/src/pages/ReimbursementsPage.tsx|client/src/router/index.tsx|client/src/router/lazy/ReimbursementDashboardPage.ts|client/src/router/lazy/index.ts","[""A1"",""A2""]","回滚路径:移除 dashboard 路由/页面/API 与报销列表入口按钮。2026-04-08:仪表盘页面、懒加载路由、统计分析入口与前端统计 API 已完成,client typecheck/build 通过。"
"A4","报销批量审批与驳回端点","在 workflow.js 抽出单任务 approve/reject 共享 helper,并新增 batch-approve 与 batch-reject 端点,限制仅处理 reimbursement 任务且每个 task 独立事务执行。","POST /api/workflow/batch-approve 与 /api/workflow/batch-reject 仅 expense.approve 可访问,taskIds 上限 50;仅处理 reimbursement 的 pending 任务;每个 task 复用单条审批/驳回逻辑与通知副作用;已非 pending 返回 skipped;单条失败只记 error,不回滚整批。","命令:export PATH=/home/shunli/.nvm/versions/node/v22.20.0/bin:$PATH && cd server && node --check src/routes/workflow.js && npm test -- tests/unit/routes/workflow.batch.test.js。业务:1) 批量通过可同时处理多条报销待办;2) 批量驳回必须带 comment;3) 混入已处理 task 返回 skipped;4) 混入非 reimbursement task 返回 error;5) 超过 50 条返回 400。","manual","DONE","DONE","DONE","server/src/routes/workflow.js|server/tests/unit/routes/workflow.batch.test.js","[""A1""]","回滚路径:移除 batch 端点并保留共享 helper 给单条端点,或整体回退至改单前版本。2026-04-08:共享 approve/reject helper 与 batch 端点已完成,workflow.batch.test.js、node --check 通过。"
"A5","报销列表批量模式与结果回显","增强 ReimbursementsPage 的 reviewing/all 视图,支持基于当前用户可操作 pendingWorkflow 的多选批量通过/驳回、确认弹窗与结果弹窗。","当 status=reviewing 且 scope=all 且用户有 expense.approve 且列表中存在可操作 pendingWorkflow 时,页面可进入批量模式;仅可勾选有 pendingWorkflow.task.id 的行;批量通过意见可空、批量驳回理由必填;结果弹窗按报销单逐条展示 formNumber、taskId、outcome、reason,关闭后刷新列表。","命令:export PATH=/home/shunli/.nvm/versions/node/v22.20.0/bin:$PATH && cd client && npm run typecheck && npm run build。业务:1) 经理在 reviewing/all 视图进入批量模式只能勾选自己可处理的报销;2) 批量通过后已处理项消失或状态更新;3) 批量驳回无理由不可提交;4) 批量结果弹窗能区分 approved/skipped/error。","manual","DONE","DONE","DONE","client/src/pages/ReimbursementsPage.tsx|client/src/api/workflow.ts|client/src/api/reimbursements.ts","[""A1"",""A4""]","回滚路径:移除报销列表批量模式,恢复单条详情页处理。2026-04-08:ReimbursementsPage 批量模式、确认弹窗、结果弹窗与批量 API 接入已完成,client typecheck/build 通过。"
"A6","Reviewer、QA、状态回填与提交收口","执行 reviewer 自检、post-check 与业务回归,回填 CSV 所有状态并完成提交收口。","review 结论覆盖统计端点只读聚合、批量端点复用单条逻辑、单 task 失败不回滚整批、50 条上限有效、统计依赖现有索引、无 Prisma 迁移;post-check 与业务回归均通过;issues/2026-04-08_r55-reimbursement-enhancements.csv 的 Dev_Status/Review1_Status/Regression_Status 依据实测结果回填。","命令:export PATH=/home/shunli/.nvm/versions/node/v22.20.0/bin:$PATH && cd server && npx prisma validate && node --check src/routes/reimbursements.js && node --check src/routes/workflow.js && npm test -- tests/unit/routes/reimbursements.stats.test.js tests/unit/routes/workflow.batch.test.js && cd ../client && npm run typecheck && npm run build。业务:1) 财务用户可访问仪表盘并看到摘要、趋势、排行、瓶颈;2) 经理可在报销列表完成批量通过/驳回;3) reviewer 必查点均有结论;4) QA 后状态已回填。","manual","DONE","DONE","DONE","issues/2026-04-08_r55-reimbursement-enhancements.csv|server/src/routes/reimbursements.js|server/src/routes/workflow.js|server/tests/unit/routes/reimbursements.stats.test.js|server/tests/unit/routes/workflow.batch.test.js|client/src/api/reimbursements.ts|client/src/api/workflow.ts|client/src/pages/ReimbursementsPage.tsx|client/src/pages/ReimbursementDashboardPage.tsx|client/src/router/index.tsx|client/src/router/lazy/ReimbursementDashboardPage.ts|client/src/router/lazy/index.ts","[""A2"",""A3"",""A4"",""A5""]","回滚路径:若 QA 发现关键回归,暂停提交并回退对应代码。2026-04-08:reviewer 自检确认统计端点仅 SELECT 聚合、批量审批复用 executeApprove/executeReject 共享 helper、单 task 失败不回滚整批、50 条上限生效、reimbursement_date/status/workflow_tasks 现有索引可用、无 Prisma 迁移;post-check 全部通过。"