Summary of the Problem
- Implementers are looking for a simple tool to track medication dispensed, within OpenMRS.
- Larger sites tend to handle dispensing by integrating OpenMRS with dedicated external supply chain/ERP systems, such as Odoo - inventory is a core competency for those systems. But we need a solution for smaller sites where you don't want to deal with implementing a whole other system - all you want is help with tracking what needs to be dispensed vs what has already been dispensed.
- The primary target users for this functionality are implementations and facilities that have an on-site pharmacy and which don't charge the patient/customer for the services, who want to dispense medications based on orders within the same OpenMRS instance. Billing and inventory are out of scope.
Links to Know
- Eudson Bambo (UCSF) & Mike Seaton (PIH) Key Contacts:
- #dispensing (most discussion and updates are happening in slack; related architecture discussions & posts are tagged drug-dispense in the OpenMRS Talk forum) Communication: Slack channel,
- in Zeplin here; accountless view here Designs:
- frontend: github.com/openmrs/openmrs-esm-dispensing (note the FHIR module has also been worked on to support necessary endpoints) Code:
In this page:
In this wiki:
- Dispensing Design Components
- Prescribing-Dispensing Use Cases
- View Patient Details
- Component Overlap for Pharmacy and Queue features
- Technical Design and Project Plan
- Questions about Pharmacy designs
- Dispensing Testing on a Tablet
- Sierra Leone Site Visit Dispensing Feedback
- Prescribing/Dispensing data analysis
- Medication Level Dispensing Mock Up
Specifically, PIH has already had a very lightweight Dispensing feature available via a 2.x RefApp model for a while (see screenshot below); however, it's not well connected to e-prescribing.
More detailed use cases documented here: https://wiki.openmrs.org/x/-gLDDw
- As a Pharmacy staff, I need to see all medications prescribed for a patient, so I can see what medications I need to prepare for them.
- I need to see: Drug type and strength, dose, duration, quantity to dispense at a time, and how many refills are available.
- As a Pharmacy staff, to be able to indicate what/how much is dispensed (at point of dispensing), so that we can track what the patient has and has not received.
- e.g.: Partial Dispensing problem: Only had 20 tablets available but patient is owed an additional 100.
- e.g. Seems Partial but wasn't: e.g. Have doubled strength tablets so not as many were needed to be dispensed.
- As a Clinician, I need to be able to see what was prescribed/dispensed in a convenient, consolidated place, so that the patient's active drug regimens are more obvious, and we can have a more informed conversation about adherence and other active medical conditions they are receiving treatment for. This also helps prevent me from prescribing medications that may react poorly with other medications the patient is taking.
We will build a new OpenMRS Module "Medication Dispense" that will have the following components
- Addition of new "Medication Dispense" domain object (see: Medication Dispense Data Model)
- Addition of new MedicationDispense" service (see: Medication Dispense Java API)
- Addition of new OpenMRS REST and/or FHIR endpoints for "MedicationDispense" (see: Medication Dispense Java API)
- OpenMRS 3.0 UI (build as a microfrontend)
First draft mockups here: Pharmacy page mockup
- Better name for the module? Should it be called "Pharmacy" or "Dispensing"? Should we repurpose or deprecate the existing RefApp 2.x Dispensing module?
- Or do we want to consider building this in OpenMRS Core directly? (probably in the above module for now)
- Should we build out RESTful API in OpenMRS REST or FHIR (or some combination) (probably FHIR)
- The API and display we've been coming up with to-date has been very "Order" specific... do we need a way to dispense drugs without an order?
- Do have a means/pattern for deploying a MFE via a Module? Do we even want this? If not, how do we "bundle" the MFE with the OpenMRS module? Or is it okay (or even beter) to keep these two things separate?