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_userrow for it. - A
Client(owner) exists or will be created alongside the pet.
Create a new pet
Fields
| Field | Notes |
|---|---|
name | Required |
species | Required — free text today, enum a good future change |
breed | Optional |
sex | male / female / unknown |
date_of_birth | Optional date |
weight_kg | Optional decimal(8,2) |
color_markings | Optional text |
allergies | Optional text |
medical_flags | Optional text — e.g. "diabetes", "anxiety" |
status | active 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
- List —
GET /api/v1/tenant/{tenant}/pets— paginated 20/page, withclienteager-loaded. Sidebar uses this for table rows. - By owner —
GET /api/v1/owner/me/pets?owner_user_id=…— owner-side portal.
Statuses
| Status | Meaning |
|---|---|
active | In regular use |
inactive | Archived (e.g. rehomed) |
deceased | Pet 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
- Table —
PatientsModule.jsrenders: Name, Species, Breed, Age (calculated fromdate_of_birthinnormalizePatient), Owner (client.full_name), Status, Last Visit, Actions. - Profile —
PatientProfile.jsshows 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.