Skip to content

Attendance month matrix + export (1.9.0) — Production Readiness Audit ​

FieldValue
Date2026-10-14
StatusGo for production (migrate permission + catalog bump; deploy Frontend)
ScopeMonth employee×day matrix UI, GET /attendance-records/matrix, CSV/XLSX export, attendance.export; catalog attendance 1.8.0 → 1.9.0
CompanionAttendance deployment · CHANGELOG · User guide

Executive summary ​

Attendance gains a Month view (Table | Month) that shows every visible employee as a row and each calendar day as a column, plus CSV/Excel export of the same matrix. Visibility matches list/stats (AttendanceRecordPolicy::visibleEmployeeIds). Export requires new attendance.export (default Admin + Manager). Empty cells mean no record (Absent is never auto-filled).

Go / No-Go: Go after migrate through 2026_10_14_205701 and Frontend hard-refresh.

GateResult
Platform freezePass (Attendance module page; no shell/auth redesign)
Migrate-only catalog 1.9.0 + attendance.exportPass
Matrix/export scoped via visibleEmployeeIdsPass
Month navigation calendar-safe (no TZ day shift)Pass (fixed before ship)
Pest matrix/export/visibility + catalog bumpPass (local PHP 8.5)
Headed Playwright attendance modules (shared session)Pass (7/7; authz skipped when demo already entitled)
Docs/CHANGELOGPass

Audit findings (resolved) ​

SeverityFindingResolution
HighMonth stepper used appDayjs('YYYY-MM-01') and shifted calendar months under non-UTC workspace TZNavigate/label with calendar dayjs(..., 'YYYY-MM-DD', true); current month via monthStartAppDate()
MediumPlan assumed catalog 1.7.0 → 1.8.0 but digests already shipped 1.8.0Shipped 1.8.0 → 1.9.0
MediumPlaywright video required missing ffmpeg binaryAttendance e2e video/screenshot/trace: 'off'
LowValidation assertion matched toast + field error (strict mode)Assert p.text-destructive only
LowExport filename / matrix month after prev/nextStabilized by calendar-safe month state

Deploy checklist ​

  1. Deploy Backend + Frontend + Docs from the attendance month-matrix branches (or main after merge).
  2. Migrate: php artisan migrate --force through:
    • 2026_10_14_205700_add_attendance_export_permission
    • 2026_10_14_205701_bump_attendance_module_version_to_1_9_0
  3. Confirm default roles: admin + manager have attendance.export; staff does not.
  4. Smoke:
    • Attendance → Month → employee rows + day columns; today column highlighted
    • Prev/next month keeps correct month names (no Jul/Sep jump)
    • Export CSV / Excel → attendance_MM_YYYY.* with legend + codes
    • Department manager sees only their team; staff without export gets 403 on export API
  5. Pest: tests/Feature/Tenant/Attendance/AttendanceMatrixTest.php, AttendanceModuleVersion190BumpTest
  6. Frontend: npm run test:e2e:attendance:headed (shared-session modules suite)

Residual risk ​

RiskNotes
Large workspaces (hundreds of employees × 31 days)Single matrix payload; monitor response size; pagination not in 1.9.0
Custom rolesMust grant attendance.export explicitly if they need download
Authz e2e skips when demo already entitledExpected; Pest covers 403 without export

Sign-off ​

RoleStatus
EngineeringGo
Headed e2e (modules shared session)Pass
Staging smoke (Month + Export)Recommended before wide rollout

Official documentation for the EloSync SaaS Platform.