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/staff

Who can access:

Action

Admin

Doctor

Receptionist

Nurse

View staff

Create staff record

Edit staff record

Delete staff record

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:

Concept

Table

Purpose

Users

users

System login accounts — email, password, role, dashboard access

Staff

staff

HR records — employment details, schedules, salary, qualifications

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

Field

Notes

Full Name

Staff member's complete name

Role

Their position in the clinic (e.g. Doctor, Nurse, Receptionist, Admin)

Optional Fields

Personal Details:

Field

Notes

First Name

First name separately from full name

Last Name

Last name separately from full name

Phone

Contact phone number

Email

Work or personal email address

Address

Home or work address

Employment:

Field

Notes

Department

Assign to a clinic department

Join Date

Date the staff member started

Status

active by default — set to inactive for former staff

Salary

Monthly or annual salary amount

Qualifications

Degrees, certifications, and professional qualifications

Notes

Any additional HR notes

Work Schedule:

Field

Notes

Work Schedule

JSON field storing working days and hours per day

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:

Example

Staff RolesNotes

Doctor

General practitioner

Dentist

Dental specialist

Ophthalmologist

Eye care specialist

Head Nurse

Senior nursing staff

Receptionist

Front desk

Lab Technician

Laboratory staff

Pharmacist

Dispensing staff

Administrator

Admin and management

Cleaner

Support staff

Security

Security personnel

The staff role field is for HR display purposes only. It does not affect dashboard access or permissions — those are controlled by the users.role field 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.view permission — currently Admin and Receptionist. If salary information should be restricted, adjust the staff.view permission 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-00123

Deactivating 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 staff table is separate from users — 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

Column

Type

Description

id

uuid

Unique staff record ID

full_name

text

Full name

first_name

varchar

First name

last_name

varchar

Last name

role

text

Job title or role

department_id

uuid

FK → departments (set null on delete)

phone

text

Contact phone

email

text

Email address

address

text

Address

salary

numeric

Salary amount

qualifications

text

Professional qualifications

work_schedule

jsonb

Working days and hours

status

text

active / inactive

joined_date

date

Employment start date

notes

text

Additional HR notes

created_at

timestamptz

Record creation timestamp

updated_at

timestamptz

Last updated timestamp

An index is set on department_id for department-based filtering.

Relationship to Other Modules

Module

Relationship

Departments

Staff assigned to departments

Payroll

Payroll records reference staff salary base

Users

Separate system login accounts for the same person

Workflow Examples

Onboarding a new doctor:

  1. Create user account — Supabase → Authentication → Add user (or via /signup flow)

  2. Approve user account — Dashboard → Pending Approval

  3. 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

  4. Both records now exist — user account for login, staff record for HR

Recording a salary update after annual review:

  1. Sidebar → Staff

  2. Find the staff member → Edit

  3. Update the Salary field

  4. Add a note in the Notes field with the review date and reason

  5. Save

Transferring a staff member to a different department:

  1. Sidebar → Staff

  2. Find the staff member → Edit

  3. Update the Department field

  4. Save

  5. Also update their user account department if needed — Supabase → Table Editor → users → update department_id

Offboarding a departing staff member:

  1. Sidebar → Staff → Edit

  2. Set Status to inactive

  3. Add a note with departure date and reason

  4. Save staff record

  5. Supabase → Authentication → Users → find the user → Ban user (prevents further login)

  6. Sidebar → Patients — reassign their patients to another doctor

  7. Review open appointments and reassign or cancel

Viewing all staff in a specific department:

  1. Sidebar → Staff

  2. The staff list shows the department column for each row

  3. 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.view permission in Dashboard → Permissions

  • Only 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 inactive in the Staff module only updates the HR record

  • To 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.view is granted to both Admin and Receptionist

  • To restrict salary visibility to Admin only, go to Dashboard → Permissions and remove staff.view from 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 false or empty string

  • Check 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.