7.3 KiB
7.3 KiB
| 1 | ID | Title | Description | Acceptance | Test_Method | Tools | Dev_Status | Review1_Status | Regression_Status | Files | Dependencies | Notes |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | A1 | R62 执行合同建档与范围冻结 | 创建并校验 R62 2026 年中国法定假期日历执行合同 CSV,冻结范围:1) seed-config 幂等灌入 2026 官方假期日历;2) leave_holiday_calendar 默认开启;3) 请假表单增加工作日预览提示;4) reviewer/QA 收口。不新增 Prisma 迁移。 | issues/2026-04-12_r62-holiday-calendar.csv 列完整、Dependencies 为 JSON 数组字符串,A2-A6 范围与当前方案一致;明确 2026 假期按国务院正式通知、总计 39 条日期记录。 | 命令:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-04-12_r62-holiday-calendar.csv。检查:1) 对照 AGENTS.md 确认 12 列完整;2) A2-A6 依赖链合理;3) Notes 明确无迁移与回滚路径。 | manual | DONE | DONE | DONE | issues/2026-04-12_r62-holiday-calendar.csv | [] | 回滚路径:删除本次 CSV 不影响业务。官方口径采用国务院办公厅 2026 节假日安排,修正原需求中的错误日期与错误总数。 |
| 3 | A2 | seed-config 补齐 2026 官方假期日历与默认法体绑定 | 在 server/src/scripts/seed-config.js 中新增 `CN_2026_STD` 正式日历及 39 条官方日期(33 holiday + 6 adjusted_workday),并以幂等更新方式写入;若存在启用且未归档的法体,则按 created_at 升序取首个,在其 default_holiday_calendar_id 为空时绑定默认日历。 | 1) seed-config 重复执行不会重复插入,且 `CN_2026_STD` 始终收敛到官方 2026 数据;2) 日历头信息为 `2026年中国法定节假日 / Asia/Shanghai`;3) `seed-dev.js` 演示数据不改;4) 首个启用法体在无默认日历时被绑定。 | 命令:export PATH=/home/shunli/.nvm/versions/node/v22.20.0/bin:$PATH && cd server && node --check src/scripts/seed-config.js。业务:执行 seed-config 后检查 `CN_2026_STD` 存在且日期数为 39,首个启用法体在原无默认日历时已绑定。 | manual | DONE | DONE | DONE | server/src/scripts/seed-config.js | ["A1"] | 回滚路径:移除 seed-config 中的 2026 假期日历 helper 与调用。无 Prisma 迁移。 |
| 4 | A3 | 启用 leave_holiday_calendar 默认开关与环境示例 | 将 deploy/trialrun/.env.example 中 `LEAVE_HOLIDAY_CALENDAR_ENABLED` 改为 true,并把 seed-config 里的 `leave_holiday_calendar` 默认记录调整为 `force_on`;同时补回归验证,确认 attendance 免打卡仍直接读取法体默认日历,不依赖该 flag。 | 1) trialrun `.env.example` 默认打开 `LEAVE_HOLIDAY_CALENDAR_ENABLED=true`;2) seed-config 执行后 `leave_holiday_calendar` 记录存在且 `override_mode=force_on`;3) attendance 行为不回归。 | 命令:export PATH=/home/shunli/.nvm/versions/node/v22.20.0/bin:$PATH && cd server && node --check src/scripts/seed-config.js && node --check src/services/attendance.js。业务:检查 feature flag 与 env 示例均已开启,并确认考勤节假日免打卡逻辑不依赖 leave 开关。 | manual | DONE | DONE | DONE | server/src/scripts/seed-config.js|deploy/trialrun/.env.example|server/tests/unit/routes/attendance.test.js | ["A2"] | 回滚路径:恢复 `.env.example` 和 seed-config 默认开关为关闭态。 |
| 5 | A4 | 请假工作日预览接口与表单法定假日提示 | 在 server/src/routes/leave.js 新增 `GET /api/leave-requests/working-days` 轻量预览接口,按当前登录员工法体默认日历返回 requestedDays/naturalRequestedDays/holidayDayCount/weekendDayCount/adjustedWorkdayCount/calendarApplied;前端 LeaveRequestPage 改为输入完整区间后调用预览接口,并在包含法定假日时显示提示。 | 1) 预览接口支持 startDate/endDate/startSession/endSession,复用与创建/编辑一致的工作日计算逻辑;2) 返回字段固定且半天场景正确;3) LeaveRequestPage 优先显示后端 requestedDays;4) `holidayDayCount > 0` 时展示“包含 X 天法定假日,实际请假天数为 Y 天”;5) 预览失败时表单保留编辑能力并提示将以后端结果为准。 | 命令:export PATH=/home/shunli/.nvm/versions/node/v22.20.0/bin:$PATH && cd server && node --check src/routes/leave.js && cd ../client && npm run typecheck && npm run build。业务:1) 在请假页选择 2026-10-01~2026-10-07 显示法定假日提示且预估天数非自然日 7 天;2) 选择 2026-10-10 因为是 adjusted_workday,预估按工作日处理;3) 半天请假预览正确。 | manual | DONE | DONE | DONE | server/src/routes/leave.js|server/src/services/leave.js|server/tests/unit/services/leave.test.js|server/tests/unit/routes/leave.working-days.test.js|client/src/api/leave.ts|client/src/pages/LeaveRequestPage.tsx | ["A2","A3"] | 回滚路径:移除 working-days 预览接口与前端提示,恢复纯前端自然日预估。 |
| 6 | A5 | Reviewer 复核官方日期、幂等 seed 与考勤口径 | 复核 2026 官方日期总数、seed-config 幂等更新策略、attendance 对假期日历的独立依赖,以及请假预览与创建/编辑共用工作日计算逻辑。 | 1) 官方日期为 33 holiday + 6 adjusted_workday;2) 重复执行 seed-config 后 `CN_2026_STD` 仍为官方数据;3) attendance 不受 leave_holiday_calendar 限制;4) working-days 预览与创建/编辑口径一致。 | Review:检查 seed-config、leave service/route、attendance tests 和前端请假页变更;必要时手工验证跨节假日请假与调休上班日预估。 | manual | DONE | DONE | DONE | server/src/scripts/seed-config.js|server/src/services/leave.js|server/src/routes/leave.js|server/tests/unit/services/leave.test.js|server/tests/unit/routes/leave.working-days.test.js|server/tests/unit/routes/attendance.test.js|client/src/pages/LeaveRequestPage.tsx | ["A2","A3","A4"] | 回滚路径:若 reviewer 发现关键日期错误或口径分叉,暂停提交并回退对应代码。 |
| 7 | A6 | QA、状态回填与提交收口 | 执行 R62 post-check 与手工验证,回填 CSV 状态并完成提交收口。 | 语法检查、类型检查、构建与新增/扩展单测通过;请假预览和 2026 假期 seed 生效;issues/2026-04-12_r62-holiday-calendar.csv 三列状态按结果回填。 | 命令:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-04-12_r62-holiday-calendar.csv && export PATH=/home/shunli/.nvm/versions/node/v22.20.0/bin:$PATH && cd server && node --check src/scripts/seed-config.js && node --check src/routes/leave.js && node --check src/services/attendance.js && npm test -- tests/unit/services/leave.test.js tests/unit/routes/leave.working-days.test.js tests/unit/routes/attendance.test.js && cd ../client && npm run typecheck && npm run build。业务:1) seed-config 后 `CN_2026_STD` 日期数为 39;2) 请假页跨法定假期显示提示;3) 调休上班日预估为工作日。 | manual | DONE | DONE | DONE | issues/2026-04-12_r62-holiday-calendar.csv|server/src/scripts/seed-config.js|server/src/routes/leave.js|server/src/services/leave.js|server/tests/unit/services/leave.test.js|server/tests/unit/routes/leave.working-days.test.js|server/tests/unit/routes/attendance.test.js|client/src/api/leave.ts|client/src/pages/LeaveRequestPage.tsx|deploy/trialrun/.env.example | ["A5"] | 回滚路径:若 post-check 或手工验证失败,暂停提交并回退 R62 代码。commit message:R62 A1-A6:2026年中国法定假期日历。 |