Skip to content

Attendance — Production Guide ​

Licensing ​

  • Catalog slug: attendance
  • Category: hr, sort_order = 30
  • Free Marketplace opt-in
  • Hard dependency on employees (add_attendance_employees_dependency)
  • Current catalog version: 1.10.0 (holidays + auto-absent; prior 1.9.0 month matrix + export; 1.8.0 digest report recipients; 1.7.0 backdate permission)

Bootstrap ​

  1. Ensure Employees schema + catalog exist
  2. Migrate attendance_records + attendance_reasons (+ check-in reason / work_mode columns)
  3. Register module + permissions + dependency row
  4. Deploy Attendance UI under HR

Timezone ​

Self check-in “today”, the HH:MM timer, late classification, month matrix bounds, and daily digest send times use Settings → General → Timezone (same convention as Daily Reminder Time, meetings, and task/follow-up dues). Office start/end, remote start, late report time, and yesterday report time are workspace-local H:i values — not server UTC. See Workspace timezone convention.

Deploy checklist (1.10.0) ​

  1. Migrate through 2026_10_14_173200 (attendance_holidays + catalog attendance → 1.10.0). Do not db:seed.
  2. Smoke: Settings → Attendance → Manage holidays; Month day-header mark/clear holiday; past work day without record shows Absent; holiday shows H and is not deducted on a pay run
  3. Pest: tests/Feature/Tenant/Attendance/AttendanceHolidayAndMatrixInferenceTest.php, AttendanceMatrixTest.php, PayPeriodCalculatorTest.php
  4. Readiness: Attendance holidays + auto-absent 1.10.0

Deploy checklist (1.9.0) ​

  1. Migrate through 2026_10_14_205701 (grant attendance.export to default admin/manager + catalog attendance → 1.9.0)
  2. Confirm default roles: admin + manager have attendance.export; staff does not
  3. Smoke: Month view shows employee×day grid; Export CSV/XLSX downloads attendance_MM_YYYY.*; staff without export gets 403 on /attendance-records/export
  4. Pest: tests/Feature/Tenant/Attendance/AttendanceMatrixTest.php
  5. Readiness: Attendance month matrix 1.9.0

Deploy checklist (1.7.0) ​

  1. Migrate through 2026_10_08_203346 (grant attendance.backdate to default admin/manager + catalog attendance → 1.7.0)
  2. Confirm default roles: admin + manager have attendance.backdate; staff does not
  3. Smoke: staff manual create accepts today only and rejects yesterday; owner/admin can create past dates; staff with attendance.backdate can create past dates
  4. Pest: tests/Feature/Tenant/Attendance/AttendanceBackdateTest.php

Deploy checklist (1.6.0) ​

  1. Migrate through 2026_10_03_003500 (catalog attendance → 1.6.0)
  2. Confirm scheduler runs attendance:send-daily-reports every 5 minutes (withoutOverlapping, onOneServer) and emails queue workers are healthy
  3. Smoke: two departments with managers + late employees → department manager A only sees/receives A’s team; Owner sees all; Spatie manager without manager_id does not get digests and is self-scoped on list
  4. Pest: tests/Feature/Tenant/Attendance/AttendanceDailyReportDigestTest.php, AttendanceTest.php department-scope cases
  5. Readiness: Attendance department-scoped 1.6.0
  6. After Pulse slow-path indexes ship: migrate 2026_10_02_203742_add_attendance_records_list_stats_indexes (list/stats/today date predicates) — Pulse slow-path readiness

Deploy checklist (1.5.0) ​

  1. Migrate through 2026_09_30_013600 (catalog attendance → 1.5.0)
  2. Confirm scheduler runs attendance:send-daily-reports every 5 minutes (withoutOverlapping, onOneServer) and emails queue workers are healthy
  3. Settings → Attendance: optionally enable Daily late report email / Yesterday’s attendance email and set send times
  4. Smoke: create late + open checkout records → advance test clock past send time → php artisan attendance:send-daily-reports → owner receives digests once
  5. Pest: tests/Feature/Tenant/Attendance/AttendanceDailyReportDigestTest.php

Deploy checklist (1.2.0) ​

  1. Run migrations through 2026_08_28_203200 (reasons table, record columns, catalog bump) and 2026_08_29_003000 (attendance.force.delete grant for admin defaults)
  2. Confirm Marketplace blocks install when Employees is missing
  3. Confirm default roles: staff has attendance.create + attendance.update; admin has attendance.force.delete
  4. Smoke:
    • Enable Employees + Attendance
    • Linked user: Check in (on-site/remote) → timer survives reload → Check out
    • Late path: Other requires free text
    • Settings: self-check toggle, auto-login (default off), remote grace
  5. When Auto check-in on login is on and Require late check-in reason is on, late logins do not auto check-in (staff must use explicit Check in with a reason)
  6. Pest: tests/Feature/Tenant/Attendance
  7. Playwright: npm run test:e2e:attendance (modules suite; authz may skip on pre-entitled demo)
  8. Production Readiness · Security Audit

If shipping My salary slips in the same release: migrate 2026_08_28_204000 (payroll.view_own + payroll catalog 1.2.0) and smoke My salary slips PDF download for a linked staff user.

Official documentation for the EloSync SaaS Platform.