Staff
A complete guide to the Staff module — managing clinic staff records, roles, work schedules, salary information, and department assignments.
Written By Dev010
Last updated 19 days ago
The Staff module maintains the clinic's operational HR roster. Staff records store employment details, work schedules, qualifications, and salary information for every member of the clinic team. This is separate from user accounts — a staff record is an HR record while a user account is a system login credential.
Accessing the Module
Sidebar → Staff
Direct URL:
https://yourdomain.com/dashboard/staffWho can access:
Staff management is restricted to Admin role for create, edit, and delete. Receptionist has view-only access. Doctor and Nurse accounts do not see the Staff module in the sidebar.
Staff vs Users — Important Distinction
CareNova maintains two separate but related concepts:
A person can exist in both tables — their users record gives them system access while their staff record stores their employment information.
A staff record does not automatically create a user account, and a user account does not automatically create a staff record. They are managed independently.
When onboarding a new team member, create both a user account (so they can log in) and a staff record (for HR tracking). See the First-Time Setup Checklist for the recommended onboarding workflow.
Staff List
The main staff page shows a complete list of all staff records.
Each row displays:
Full name
Role
Department
Phone
Email
Join date
Status badge (active / inactive)
Salary
Action buttons (edit, delete)
Creating a Staff Record
Click the Add Staff button on the staff list page. A sheet slides in with the staff creation form.
Required Fields
Optional Fields
Personal Details:
Employment:
Work Schedule:
Work schedule is stored as a structured JSON object. See the Work Schedule section below for the format.
Saving the Staff Record
Click Save to create the record. It appears immediately in the staff list.
Editing a Staff Record
Click the Edit button on any staff row. The edit sheet opens with all existing values pre-filled.
All fields are editable. Common edit operations include:
Updating salary after a pay review
Changing department after a transfer
Updating qualifications after completing a certification
Setting status to inactive when a staff member leaves
Work Schedule
The work schedule field stores a JSON object defining which days a staff member works and their hours for each day.
Work Schedule Format
{
"monday": { "start": "08:00", "end": "17:00" },
"tuesday": { "start": "08:00", "end": "17:00" },
"wednesday": { "start": "08:00", "end": "17:00" },
"thursday": { "start": "08:00", "end": "17:00" },
"friday": { "start": "08:00", "end": "14:00" },
"saturday": null,
"sunday": null
}Set a day to null for days the staff member does not work. This schedule is used for HR reference and visibility — CareNova does not currently enforce work schedule constraints when booking appointments.
Part-time Schedule Example
{
"monday": { "start": "09:00", "end": "13:00" },
"tuesday": null,
"wednesday": { "start": "09:00", "end": "13:00" },
"thursday": null,
"friday": { "start": "09:00", "end": "13:00" },
"saturday": null,
"sunday": null
}On-call Schedule Example
{
"monday": { "start": "00:00", "end": "23:59" },
"tuesday": { "start": "00:00", "end": "23:59" },
"wednesday": null,
"thursday": null,
"friday": null,
"saturday": null,
"sunday": null
}Staff Roles
The role field in the staff table is a free text field — it is not restricted to the four system roles (admin, doctor, receptionist, nurse). This allows you to record more granular job titles:
The staff
rolefield is for HR display purposes only. It does not affect dashboard access or permissions — those are controlled by theusers.rolefield on the user account.
Salary Tracking
The salary field stores the staff member's salary as a numeric value. This is a reference field — CareNova does not currently calculate payroll automatically from this value.
For payroll processing, see the Payroll module which manages pay periods, bonuses, deductions, and net salary calculations.
The salary field is visible to all users with
staff.viewpermission — currently Admin and Receptionist. If salary information should be restricted, adjust thestaff.viewpermission in Dashboard → Permissions to limit access to Admin only.
Qualifications
The qualifications field is a free text area for recording a staff member's professional credentials:
Medical degrees (MBBS, MD, BDS)
Specialist certifications
Nursing qualifications (RN, BSN)
Professional registrations (license numbers)
CPD certificates
Language certifications
Example:
MBBS - University of Medicine, 2015
MD Cardiology - Royal College, 2018
BLS/ACLS Certified - 2023
Medical License: ML-2024-00123Deactivating a Staff Member
When a staff member leaves the clinic, deactivate their record rather than deleting it to preserve historical records.
Edit the staff record → set Status to inactive → Save.
Also remember to:
Disable their user account login in Supabase → Authentication → Users — click the user and select Ban user to prevent further logins
Reassign their patients to another doctor if they were a primary doctor
Review any open appointments assigned to them
Deleting a Staff Record
Click the Delete option from the staff row action menu.
A confirmation dialog appears before deletion.
⚠️ Deleting a staff record is permanent. The
stafftable is separate fromusers— deleting a staff record does not delete the user's login account. Manage user account access separately in Supabase Authentication. Deactivate instead of delete to preserve HR history.
Database Schema Reference
staff
An index is set on department_id for department-based filtering.
Relationship to Other Modules
Workflow Examples
Onboarding a new doctor:
Create user account — Supabase → Authentication → Add user (or via /signup flow)
Approve user account — Dashboard → Pending Approval
Create staff record — Sidebar → Staff → Add Staff
Full name, role: Doctor
Department: assign appropriately
Join date: start date
Salary: agreed amount
Qualifications: degrees and licenses
Work schedule: their working days
Both records now exist — user account for login, staff record for HR
Recording a salary update after annual review:
Sidebar → Staff
Find the staff member → Edit
Update the Salary field
Add a note in the Notes field with the review date and reason
Save
Transferring a staff member to a different department:
Sidebar → Staff
Find the staff member → Edit
Update the Department field
Save
Also update their user account department if needed — Supabase → Table Editor → users → update
department_id
Offboarding a departing staff member:
Sidebar → Staff → Edit
Set Status to
inactiveAdd a note with departure date and reason
Save staff record
Supabase → Authentication → Users → find the user → Ban user (prevents further login)
Sidebar → Patients — reassign their patients to another doctor
Review open appointments and reassign or cancel
Viewing all staff in a specific department:
Sidebar → Staff
The staff list shows the department column for each row
Visually filter by department name in the list
Or query directly in SQL Editor:
SELECT s.full_name, s.role,
s.phone, s.email,
s.joined_date, s.status
FROM staff s
JOIN departments d ON s.department_id = d.id
WHERE d.name = 'Dental'
ORDER BY s.full_name;Troubleshooting
Staff module not visible in sidebar:
Confirm your role has
staff.viewpermission in Dashboard → PermissionsOnly Admin and Receptionist have view access by default
Doctor and Nurse do not see this module
Cannot create or edit staff records:
Staff create and edit is restricted to Admin only
Receptionist has view-only access
Department dropdown empty when creating a staff record:
No active departments exist yet
Go to Sidebar → Departments and create departments first
Confirm departments are set to Active
Staff member can still log in after being set to inactive:
Setting status to
inactivein the Staff module only updates the HR recordTo prevent login, go to Supabase → Authentication → Users → find the user → Ban user
These are two separate actions that must both be completed
Salary visible to Receptionist:
By default
staff.viewis granted to both Admin and ReceptionistTo restrict salary visibility to Admin only, go to Dashboard → Permissions and remove
staff.viewfrom Receptionist role
Work schedule not saving correctly:
Confirm the JSON is valid — check for missing commas, brackets, or quotes
Use null for days off — not
falseor empty stringCheck browser console for validation errors on save
Next Step
Continue to the Lab Vendors module guide to learn how to manage external laboratory suppliers in CareNova.