Role-based access control
Permissions enforced at view dispatch — before PHI is loaded.
Under all of it is the security model. Most platforms gate UI elements but leave the
underlying URL accessible. Carelytic's RolePermissionMixin runs the perm check in
dispatch() — if a user without the right perm types the URL, they get a 403
before any database query touches PHI.
Granular permission groups
Clients, Scheduling, Authorizations, Billing, Reconciliation, Payroll, Users & Settings, Reports, Intake, Clinical, EVV, HR, Compliance, Documents, Help Tickets, Audit, Tools — each with its own verbs.
Default role templates
Agency Admin · Manager · Scheduler · Biller · Skilled Nurse · Therapist · Clinical Manager/QA · Payroll/HR · Intake/Admissions · Office Staff/Read-Only, plus assisted-living direct-care roles.
Scope perms, not just verb perms
clients.view_assigned_only narrows the queryset for clinicians and aides — they only see clients they're assigned to. Defense in depth, not just UI gating.
Tenant scoping helper
visible_clients(user, tenant) is the canonical replacement for Client.objects.all(). Used in every list view, dropdown, autocomplete, and dashboard count.
Action-implies-read
Holding evv.checkin auto-grants evv.view — you can't perform the action without seeing the surface to navigate to it. Never the reverse.
Field-staff dashboard
Caregivers see a separate dashboard — no revenue numbers, no agency-wide KPIs. Routed automatically by clients.view_assigned_only.