diff --git a/fusion_clock/docs/superpowers/specs/2026-05-31-dashboard-redesign-design.md b/fusion_clock/docs/superpowers/specs/2026-05-31-dashboard-redesign-design.md index 98e50047..add45589 100644 --- a/fusion_clock/docs/superpowers/specs/2026-05-31-dashboard-redesign-design.md +++ b/fusion_clock/docs/superpowers/specs/2026-05-31-dashboard-redesign-design.md @@ -35,7 +35,7 @@ The dashboard renders **bands**, gated by role. The hard rule: **a regular emplo | **— employee view ends here —** | | | | | Team KPIs — Present / Absent / Late / Pending | ❌ | ✅ direct reports | ✅ org-wide | | Currently Clocked In roster | ❌ | ✅ direct reports | ✅ everyone | -| Needs Attention (absences, pending reasons, requests, very-late) | ❌ | ✅ their team | ✅ org-wide | +| Needs Attention (genuine absences, pending reasons, pending corrections) | ❌ | ✅ their team | ✅ org-wide | | Quick Actions | own (clock/leave/correction/timesheets) | + team views | + Reports / Settings | **Scoping rule (server-side, never client-trusted):** @@ -97,12 +97,13 @@ Single endpoint, reworked: **`POST /fusion_clock/dashboard_data`** (`type='jsonr "team": null | { # present ONLY for team_lead / manager "scope": "team" | "org", "total_employees": int, - "present_count": int, - "absent_count": int, + "present_count": int, # distinct employees with an attendance today + "on_leave_count": int, # approved leave covering today (leave_date <= today <= date_to) + "absent_count": int, # genuine no-shows = total - present - on_leave (matches absence cron) "late_count": int, # late_clock_in logs today, scoped - "pending_reasons": int, # scoped - "pending_approvals": int, # scoped: pending corrections + pending leaves - "very_late_count": int, # scoped, today + "pending_reasons": int, # scoped (owe an auto-clock-out explanation) + "pending_approvals": int, # scoped: fusion.clock.correction state='pending' + # (leaves are auto-approved — nothing to approve) "clocked_in": [ {"employee": str, "check_in": str, "location": str, "late": bool} ]