文件
hyb-oa/issues/2026-04-12_r62-holiday-calendar.csv
T

7.3 KiB

1IDTitleDescriptionAcceptanceTest_MethodToolsDev_StatusReview1_StatusRegression_StatusFilesDependenciesNotes
2A1R62 执行合同建档与范围冻结创建并校验 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 明确无迁移与回滚路径。manualDONEDONEDONEissues/2026-04-12_r62-holiday-calendar.csv[]回滚路径:删除本次 CSV 不影响业务。官方口径采用国务院办公厅 2026 节假日安排,修正原需求中的错误日期与错误总数。
3A2seed-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,首个启用法体在原无默认日历时已绑定。manualDONEDONEDONEserver/src/scripts/seed-config.js["A1"]回滚路径:移除 seed-config 中的 2026 假期日历 helper 与调用。无 Prisma 迁移。
4A3启用 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 开关。manualDONEDONEDONEserver/src/scripts/seed-config.js|deploy/trialrun/.env.example|server/tests/unit/routes/attendance.test.js["A2"]回滚路径:恢复 `.env.example` 和 seed-config 默认开关为关闭态。
5A4请假工作日预览接口与表单法定假日提示在 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) 半天请假预览正确。manualDONEDONEDONEserver/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 预览接口与前端提示,恢复纯前端自然日预估。
6A5Reviewer 复核官方日期、幂等 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 和前端请假页变更;必要时手工验证跨节假日请假与调休上班日预估。manualDONEDONEDONEserver/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 发现关键日期错误或口径分叉,暂停提交并回退对应代码。
7A6QA、状态回填与提交收口执行 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) 调休上班日预估为工作日。manualDONEDONEDONEissues/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年中国法定假期日历。