- 新增 AttendanceRecord 与 AttendancePolicy 模型 - 上下班打卡、今日状态、月度统计端点 - 考勤管理页面(我的/团队/设置三 Tab) - 移动端快速打卡入口 - 管理员补卡与审计日志 - 单测覆盖打卡幂等、迟到计算、工时计算、权限边界
8 行
7.2 KiB
CSV
8 行
7.2 KiB
CSV
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
|
|
"A1","R59 执行合同建档与范围冻结","创建并校验 R59 极简考勤打卡执行合同 CSV,冻结范围仅包含 AttendanceRecord/AttendancePolicy、attendance_v1、打卡/查询后端、考勤页、移动端快捷打卡与 QA 收口。","issues/2026-04-09_r59-attendance-clockin.csv 12 列完整、Dependencies 为 JSON 数组字符串、Test_Method 可复现;范围仅覆盖 A1-A6,不混入班次管理、地理围栏、生物识别或 EmployeePresence 模型改造。","命令:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-04-09_r59-attendance-clockin.csv。检查:1) 对照 AGENTS.md 与 issues/README.md 校验字段完整;2) A2-A6 依赖链正确;3) Notes 写明单个迁移目录、seed 和回滚路径。","manual","DONE","DONE","DONE","issues/2026-04-09_r59-attendance-clockin.csv","[]","回滚路径:删除本次 CSV 不影响业务。"
|
|
"A2","AttendanceRecord/AttendancePolicy 模型、seed 与功能开关","在单个 Prisma 迁移目录中新增 AttendanceRecord 和 AttendancePolicy,补齐默认 seed、attendance_v1 feature flag、环境变量和导航注册依赖。","schema.prisma 含 AttendanceRecord、AttendancePolicy 与 relation;迁移目录固定为 20260409090000_r59_attendance;seed 会幂等插入一条 09:00-18:00 默认策略;featureFlags/config/seed/workspace navigation 同步补齐 attendance_v1 与 ATTENDANCE_ENABLED。","命令:export PATH=/home/shunli/.nvm/versions/node/v22.20.0/bin:$PATH && cd server && npx prisma validate && npx prisma migrate status。检查:1) AttendanceRecord 唯一键为 employee_id+work_date;2) AttendancePolicy 仅按首条记录语义读写;3) seed 与 feature flag 默认值生效。","manual","DONE","DONE","DONE","server/prisma/schema.prisma|server/prisma/migrations/20260409090000_r59_attendance/*|server/src/config.js|server/src/services/featureFlags/index.js|server/src/scripts/seed-config.js|server/src/services/workspaceSettings.js|client/src/api/featureFlags.ts|client/src/pages/FeatureFlagsPage.tsx|client/src/api/errorMessages.ts","[""A1""]","回滚路径:回退代码并在迁移回滚中 DROP TABLE attendance_records、DROP TABLE attendance_policies;本轮物理上只生成一个迁移目录。补充:本地主库 migration history 早已分叉,本轮 `migrate deploy/status` 改在临时库 `hyb_oa_r59_tmp` 验证通过,seed-config 也确认写入默认 attendance policy。"
|
|
"A3","考勤后端路由、共享计算与单测","新增 attendance.js 路由和共享计算 helper,提供上下班打卡、今日状态、月度统计、团队查询、策略读写与管理员补卡,并覆盖单测。","/api/attendance/clock-in、clock-out、me/today、me/month、team、policy、admin/backfill 均可用;clock-in 幂等、clock-out 可覆盖重算、午休扣减和迟到早退计算正确;请假/差旅/节假日/周末不计缺卡;管理员补卡写审计日志。","命令:export PATH=/home/shunli/.nvm/versions/node/v22.20.0/bin:$PATH && cd server && node --check src/routes/attendance.js && npm test -- tests/unit/routes/attendance.test.js。业务:1) 工作日可正常上班/下班打卡;2) 免打卡日返回 needClockIn=false;3) 月度统计包含逐日 items 和 summary;4) system.users 可补卡并看到审计。","manual","DONE","DONE","DONE","server/src/routes/attendance.js|server/src/services/attendance.js|server/src/app.js|server/tests/unit/routes/attendance.test.js","[""A1"",""A2""]","回滚路径:移除 attendance 路由、服务和单测,恢复仅有 EmployeePresence 的日级状态能力。"
|
|
"A4","考勤页面、路由与导航入口","新增 AttendancePage、前端 attendance API、路由懒加载和主导航入口,提供我的考勤/团队考勤/考勤设置三 Tab。","/attendance 对 authenticated 可访问;我的考勤可展示今日状态、本月统计和逐日记录;团队考勤仅 system.users 可见并支持补卡;考勤设置仅 system.settings 可见;attendance_v1 关闭时导航不展示且页面显示未启用空态。","命令:export PATH=/home/shunli/.nvm/versions/node/v22.20.0/bin:$PATH && cd client && npm run typecheck && npm run build。业务:1) 我的考勤可完成上班、下班和月度查看;2) 团队列表支持日期/部门筛选和补卡;3) 设置保存后影响迟到早退判断。","manual","DONE","DONE","DONE","client/src/api/attendance.ts|client/src/pages/AttendancePage.tsx|client/src/router/index.tsx|client/src/router/lazy/AttendancePage.ts|client/src/router/lazy/index.ts|client/src/components/navigation/NavLinks.tsx","[""A1"",""A2"",""A3""]","回滚路径:移除考勤 API、页面、路由与导航入口。"
|
|
"A5","移动端快捷打卡入口","在 MobilePortalPage 顶部增加真实考勤卡片,支持上班/下班一键打卡、迟到提示和免打卡提示,同时保留原有 Presence 快速状态卡。","移动首页工作日显示对应打卡按钮并在成功后刷新;迟到时 toast 展示迟到分钟数;请假/差旅/节假日/周末显示免打卡提示;attendance_v1 关闭时该卡片不渲染。","命令:export PATH=/home/shunli/.nvm/versions/node/v22.20.0/bin:$PATH && cd client && npm run typecheck && npm run build。业务:1) 未打上班卡显示上班打卡;2) 已上班未下班显示下班打卡;3) 已完成显示工时;4) 免打卡日不出现打卡按钮。","manual","DONE","DONE","DONE","client/src/pages/MobilePortalPage.tsx|client/src/api/attendance.ts","[""A1"",""A2"",""A3""]","回滚路径:移除移动端考勤卡片,恢复仅有 Presence 快速更新。"
|
|
"A6","Reviewer、QA、CSV 回填与提交收口","执行 reviewer 自检、post-check、部署前说明与 CSV 三列状态回填,完成提交。","review 覆盖唯一约束、幂等与覆盖语义、午休扣减、免打卡口径、审计日志、单例策略和时区处理;post-check 全通过;CSV 状态已按实测回填;完成 git commit。","命令:export PATH=/home/shunli/.nvm/versions/node/v22.20.0/bin:$PATH && cd server && npx prisma validate && npx prisma migrate status && node --check src/routes/attendance.js && npm test -- tests/unit/routes/attendance.test.js && cd ../client && npm run typecheck && npm run build。部署后:远端执行 npx prisma migrate status,确认 attendance_policies 存在默认记录,并在 .env 中设置 ATTENDANCE_ENABLED=true 与 attendance_v1=force_on_global。","manual","DONE","DONE","DONE","issues/2026-04-09_r59-attendance-clockin.csv|server/prisma/schema.prisma|server/prisma/migrations/20260409090000_r59_attendance/*|server/src/routes/attendance.js|server/src/services/attendance.js|server/tests/unit/routes/attendance.test.js|client/src/api/attendance.ts|client/src/pages/AttendancePage.tsx|client/src/pages/MobilePortalPage.tsx|client/src/router/index.tsx|client/src/router/lazy/AttendancePage.ts|client/src/router/lazy/index.ts|client/src/components/navigation/NavLinks.tsx","[""A2"",""A3"",""A4"",""A5""]","回滚路径:若 QA 或 post-check 失败,暂停提交并回退对应代码与迁移;部署后需额外确认 feature flag 和默认策略记录存在。补充:`prisma migrate status` 在临时库 `hyb_oa_r59_tmp` 顺序执行 `migrate deploy` 后验证为 `Database schema is up to date`。"
|