Introducing "appointment category" in Bahmni appointments module

Hello community,

As part of a client engagement, we had a specific requirement to categorize patient’s appointment type.

Business context : At one of the facilities, a large number of patients report for the initial triage. After the triage is completed, the doctor categories the patients based on their criticality. There are three groups patients are categorised into :

  1. Urgent - These are patients who are provided an appointment slot (date and time)
  2. Priority - These patients are put on a waiting list / awaiting appointment list and are provided a slot at a later stage
  3. Routine - Same as priority. The need for categorisation of routine and priority arises due to internal workflow processes.

Proposed changes in appointment’s module :

Note : All new changes would be behind configuration and implementors can choose to enable or disable the configurations .

  1. In the appointment’s module, we are introducing a new mandatory field in the appointment’s table called “appointment category” .

    This is a mandatory field to be selected.

  2. Once the appointment category is selected as ‘urgent’ the workflow would continue to be as it is . The user would have to fill in the mandatory details (service, appointment date & time) and once done, the user can save and it would be reflected on the existing appointment lists (list view and calendar view) .

  3. When the appointment category is selected as ‘Routine’ or ‘Priority’ , then the other fields become optional (except speciality, since the assumption is that for patients in the waiting list, the hospital would not have a view on the exact service which would be required , but will have insights on the speciality). Therefore, for these two categories, the user can put the patients in the waiting list/awaiting appointment list without allocating a specific date and time.

  4. The waiting list / awaiting appointment list would appear in another tab as seen in the screenshot below. Few columns would be removed from the table such as the date and time of appointment. Two new columns would appear in the table, ie, A. “date of registration” , the list would be sorted on date of registration basis (earliest first) B. Appointment category .

Note: Once the user edits and adds a specific date and time for patients on the waiting list, they would be removed from the list and appear on the appointments list.

@gsluthra @angshuonline @binduak @akhilmalhotra @umairfayaz @kavitha11 @mohant @gokul @deepthi @grace


Appointment was modeled along with FHIR appointment (DSTU3 I think to start with) … but still inline. So I would suggest keeping true to that as model. What I see you need is

  1. A separate field “priority” (Appointment.priority) - and have subset of value like (stat, routine, emergency). in FHIR R5, this is from ActPriority valueset but R4 it was an int. You may display “stat” as priority on screen but that just a label translation.

  2. enhance the existing model “status” field to also include “waitlist” - again inline with FHIR Appointment.status - just introduce another enum “waitlist”. the status changes alongwith workflow of the appointment itself - so maybe on the create new appointment screen, you can capture using a simple checkbox - but the status will be “scheduled” if its slotted in future, on “cancelled”.

  3. Having start and enddate will probably have to change as being conditional - again inline with FHIR appointment.start

  • where startdate can be empty only if its “waitlist” or “cancelled”
  1. Am ok with the “wait list” view … I am wondering instead of a new page, can’t we figure out an UX to apply filter seamlessly? I am not particularly fond of unnecessary tabs - unless you are going to make a completely different experience.

“Appointment Category” is too generic a terminology. As @angshuonline suggested, this seems to indicate priority of the appointment HL7, and should likely be shown as “Priority” field in the UI (routine, emergency/stat, etc).

Routine: can be the default value (config).

The translation strings on screen can be chosen appropriately by an implementation to communicate exact action (for instance mapping stat → Urgent).

Any appointment created without date, is unscheduled (and could be considered on waitlist).

Hello @angshuonline We haven’t introduced any checkbox as “waitlist” in the appointments UI. Based on the value we select from Appointment.priority dropdown (Routine, Priority, Urgent) the appointment would be created as either dateless appointment or normal appointment. We feel that having the “waitlist” checkbox is redundant here.

The followup question on the same. Shall we have appoinment.status set to “waitlist” instead of “scheduled” if the appointment is dateless appointment ? cc/ @kavitha11

waitlist is status, and different from priority. I can still have something as waitlist, but mark it as urgent, no? then the process may be someone needs to slot such urgent waitlisted ones immediately.

if you want to default to waitlist if start date is not specified - I am not sure of that. To me, its the other way around - dates can be optional if status is waitlist. But maybe I want to set a tentative date and still mark it as waitlist … FHIR appointment has a proposed, which probably makes more sense, in this case - but AFAIK, appointment does not have it yet