Skip to main content

Workflow: Patient Management

"Patient" is the pet. Creating, editing and tracking their details is the most day-to-day workflow in the clinic.

Actors

  • Clinic Admin / Staff / Veterinarian

Preconditions

  • Clinic is active and the user has a tenant_user row for it.
  • A Client (owner) exists or will be created alongside the pet.

Create a new pet

Fields

FieldNotes
nameRequired
speciesRequired — free text today, enum a good future change
breedOptional
sexmale / female / unknown
date_of_birthOptional date
weight_kgOptional decimal(8,2)
color_markingsOptional text
allergiesOptional text
medical_flagsOptional text — e.g. "diabetes", "anxiety"
statusactive by default

Update an existing pet

All fields are optional on update (sometimes|…), so you can send only what changed. The response is the full updated resource.

Read patients

  • ListGET /api/v1/tenant/{tenant}/pets — paginated 20/page, with client eager-loaded. Sidebar uses this for table rows.
  • By ownerGET /api/v1/owner/me/pets?owner_user_id=… — owner-side portal.

Statuses

StatusMeaning
activeIn regular use
inactiveArchived (e.g. rehomed)
deceasedPet has passed; kept for records

Changing status to inactive or deceased hides the pet from scheduling dropdowns in the UI but preserves all history.

What the UI shows

  • TablePatientsModule.js renders: Name, Species, Breed, Age (calculated from date_of_birth in normalizePatient), Owner (client.full_name), Status, Last Visit, Actions.
  • ProfilePatientProfile.js shows demographics + medical flags + allergies + history of appointments.

Deletion

There is no soft-delete today; destructive operations would cascade through related appointments, invoices, etc. Recommended posture: flip status to inactive instead of deleting.