Bookable resources & procedure roles
Add doctors, staff, rooms, and equipment to your resource catalogue, then define which roles each procedure needs and which one is the primary role.
Bookable resources & procedure roles
Before the booking engine can offer a slot, it needs to know two things: what you have (your resource catalogue) and what each procedure needs (its procedure template). This page covers both, and the link between them.
The resource catalogue
Open Core → Resources. Every bookable thing in your clinic lives here, in one of four kinds:
| Kind | What it covers |
|---|---|
| Doctor | Physicians |
| Staff | Nurses, technicians, anesthetists, interpreters, chaperones |
| Room | Consultation rooms, operating theatres |
| Equipment | Lasers, scanners, and other schedulable devices |
Use the kind filter in the sidebar to narrow the list, and the search box to find a resource by name.
Adding a resource
- Pick the branch the resource belongs to. The Add resource button stays disabled until you do — every resource is branch-scoped.
- Click Add resource and choose the kind.
- Fill in the form. Every kind needs a name and a concurrency limit (how many appointments it can hold at once — usually 1).
Doctor and Staff additionally require a team member. That link is what connects the bookable resource to a real person in your organization, so the Create button stays disabled until you pick one.
Doctors have optional specialties — pick as many as the doctor actually practises, since a template requiring any one of them will then find them — and staff an optional staff role. Both are pickers drawn from your organization's managed lists (see Managing resource attribute lists below) rather than plain text boxes — you pick an existing entry, or type a new one to add it to the list on the spot. Free text that doesn't match a list entry is no longer accepted here: this is what makes the consistency guarantee below actually hold, instead of just being good advice.
Consistency here is not cosmetic. A procedure template can require, say, a doctor whose specialty is "Ophthalmology". Before this list existed, if half your ophthalmologists were recorded as "Ophthalmology" and half as "ophthalmology" or "Eye", the template only ever found the matching half — and the failure showed up as "no available slots" when someone tried to book, not as an error on the template. Picking from one shared list is what prevents that split from happening again.
Rooms take a capabilities picker — the same managed list, so you can select several values, or type a new one and add it on the spot. A room's Sterile flag is a separate checkbox, not a capability. Equipment takes a model and serial, both still plain text.
Changing a resource
Click Edit on any row in the resource list, or open the resource and use the Edit button in its header. You can change the name, the concurrency limit, the linked team member, and the kind-specific fields — including a a doctor's specialties, so a resource entered with the wrong one can be corrected rather than recreated.
Clearing a specialty or staff role is allowed: reopen the picker and click the selected value again to deselect it, then save. A doctor with no specialties at all is valid — they simply won't match a template that requires one.
Two things the edit form deliberately does not change: a resource's kind and its branch. Both are structural — schedules, appointments and templates are all anchored to them — so a resource that needs a different kind or branch should be deactivated and replaced. Schedules and time off stay on the resource's own page, not in this form.
A brand-new resource has no schedule, and the booking engine only ever offers slots from a recurring schedule. Until you open the resource and add one, it will never be suggested — the catalogue flags these with a No schedule badge. Add the schedule as soon as you create the resource.
Managing resource attribute lists
Open Core → Resource attributes. This page holds the four lists staff choose from when describing a doctor, room, or piece of equipment — specialty, subspecialty, staff role, and capability. Keeping each list tidy is what lets procedure templates actually find the right resources, rather than silently finding none.
Pick a list from the sidebar on the left. Each list shows every entry's Name (what staff see), Identifier (the fixed value your resources and templates actually store — see below), whether it's currently in use, and a status switch.
Adding a value from inside a form
You don't have to come to this page to add a new specialty, staff role, or similar — type it directly into the picker on the resource form (or a procedure template's narrowing filters) and choose Create "…". It's added to the shared list immediately and selected on the spot. Values added this way show up here too, so this page is also where you go to tidy up anything that got added a little too casually.
Renaming is always safe
Editing a value's Name changes only how it's displayed — every resource and procedure template already using it keeps working, unaffected, and immediately shows the new wording everywhere it appears. That's because what's actually stored on your resources and templates is the row's Identifier, not the name, and renaming never touches the identifier. Use this to fix a typo or clean up wording without worrying about breaking anything currently in use.
Deactivating vs. deleting
- Deactivating a value (the status switch) removes it from the picker for anything new — staff creating or editing a resource or template won't be offered it going forward. It changes nothing else: any resource or template already using it keeps working exactly as before, and still displays its name normally.
- Deleting a value removes it permanently, but only once nothing is using it. If any resource or procedure template still references it, the delete is refused and you're shown exactly how many resources and how many procedure requirements are still using it. Deactivate instead if you want to retire a value without hunting down every place it's used first.
Prefer deactivating over deleting unless you're sure a value was created by mistake and never used. Deactivated values stay available for cleanup or reactivation later; deleted ones are gone.
The In use count is fetched one row at a time, so a very long list can take a moment to fully populate. This doesn't affect accuracy — each count that appears is live — it's only a loading-speed note for organizations with unusually large lists.
Procedure templates and roles
Open Core → Procedure templates. A template describes what a procedure needs: how long it runs, which checks are required, and one requirement row per role.
Each requirement row sets:
- Role — a label you choose, e.g. "Surgeon", "Assistant", "OR". The field suggests roles your clinic already uses elsewhere, grouped under Already used in this organization, plus a few common starters. You can still type anything you like — pick from the list where one fits, so the same job keeps the same name everywhere and your reports don't split "Surgeon" across two spellings.
- Kind — which kind of resource fills this role.
- How many — how many resources of this role each booking reserves.
- Pre-buffer / post-buffer — extra minutes the resource stays held before and after the appointment, for setup, cleaning or turnaround.
Two rows on the same template can't share a role name — the name is how a booking reports which resource filled which slot. If you need two of the same thing, either raise How many on one row, or give the rows distinct names like "Surgeon" and "Assisting surgeon".
If a template asks for a kind you have no matching resources for, the template looks fine but can never actually be booked — the booking screen simply finds no available slots. If you add a Staff role, make sure you have staff resources (with schedules) that can fill it.
The primary role
One requirement row can be marked as the primary role. That row's resource becomes the appointment's doctor of record — the name shown in appointment lists, detail views, and reporting.
A few rules worth knowing:
- Only Doctor and Staff rows can be primary. The radio button is disabled for rooms and equipment, and switching an already-primary row to a room or equipment kind clears the mark.
- Only one row can be primary at a time. Marking a second row moves the mark rather than adding one.
- If a template has exactly one human role and you don't mark anything, it is treated as the primary automatically.
- If a template has several human roles and none is marked, appointments fall back to a doctor row ahead of a staff row. Which one is picked beyond that is not something you can influence by naming — renaming a role never changes who is reported as the main provider. Mark one explicitly if reporting matters to you; it is the only way to control the outcome.
- A template with only rooms and equipment has no primary role at all. That's perfectly valid.
Editing a template's primary role does not change appointments that were already booked. They keep the doctor of record they were booked with until someone reschedules them, at which point the current template is re-applied.
Editing a procedure template
Open Core → Procedure templates, then choose Edit on any row. The drawer opens with the template's current details.
You can change the name, duration, description, required checks, whether the template is Active, and the list of resource requirements.
The code can't be changed. It identifies the procedure across billing and reporting, so it's fixed once the template is created — the field is shown but disabled in the edit drawer. If a code is wrong, create a replacement template with the right code and deactivate the old one instead.
Active controls whether the template can be used for a new booking. Turning it off doesn't touch appointments already booked against it — it just stops new appointments from being booked against it going forward. Use this instead of deleting a template you may need again.
Removing or renaming a requirement asks you to confirm. Adding a row, or adjusting a row's count, buffers or resource filters, saves straight away. Saving only pauses for a confirmation when you've removed a row or changed an existing row's role or kind — the changes where something you had before is going away. It's safe to confirm: appointments already booked keep the resources and roles they were booked with, so past and upcoming bookings are unaffected. New bookings use the updated requirements right away; older appointments only pick them up if they're rescheduled.
Closing with unsaved changes asks first. If you've edited anything and then press Escape, click outside the drawer, or hit Cancel, you'll be asked whether to discard your changes — choose Keep editing to go back. Closing a drawer you haven't touched just closes it, with no prompt.