Order Entry API Scenarios
This page is a work in progress and subject to (drastic) change.
PurposeThis page is an attempt to use stories (use cases) to drive our order entry API design. Initial use cases will focus on the more fundamental features of the order service. Subsequent scenarios can expand on desired functionality.
Scenarios
Find Orderable Concepts
Retrieve a list of the things that can be ordered that start with "AMP".
Get the List of Active Medications
Retrieve a list of "active" orders (started, but not yet ended/expired/discontinued) of a specific type (medications).
List<Order> activeOrders = Context.getOrderService().getActiveOrders(myPatient);
or
Date date = // date for 15 June, 2010
List<Order> activeOrdersAsOf15June2010 = Context.getOrderService().getActiveOrdersAtPointInTime(myPatient, date);
Also want to be able to get orders by user, by order number.
Creating a Medication Order With Unstructured Dosing
Order AMPICILLIN 500 MG AS DIRECTED.
Concept drugConcept = conceptService.getConcept("AMPICILLIN");
DrugOrder order1 = new DrugOrder(drugConcept);
order1.setUnstructuredDosing("500 MG AS DIRECTED");
try {
orderEntryService.signAndActivateOrder(patient, drugOrder);
} catch (APIException e) {
// deal with failure
}
Creating a Medication Order With Structured Dosing
In this scenario, we just want to add a (new) medication order to a patient's list of active orders.
Concept drugConcept = conceptService.getConcept("ACETAMINOPHEN");
DrugOrder order1 = new DrugOrder(drugConcept);
order1.setUrgency(Urgency.ROUTINE); // Not needed, since ROUTINE would be default
order1.setDose(new Dose(500, Dose.MG));
order1.setRoute(Route.PO);
order1.setFrequency(Frequency.DAILY);
order1.setDuration(Duration.INDEFINITE);
order1.setPrn("pain");
try {
orderEntryService.signAndActivateOrder(patient, drugOrder);
} catch (APIException e) {
// deal with failure
}
When the order is first signed, it gets a new (next available) order number.
Revise an Order
TBD
Discontinue an Order
TBD
Define a Medication Regimen
Define a regimen of two drugs that can be ordered together. For example, ATAZANAVIR 300 MG ONCE DAILY + RITONAVIR 100 MG ONCE DAILY ordered as a single HIV TREATMENT REGIMEN.
Concept hivTreatmentRegimen = conceptService.getConcept(1432); // HIV TREATMENT REGIMEN
Drug atazanavir = conceptService.getDrug(123); // ATAZANAVIR 300 MG
Drug ritonavir = conceptService.getDrug(456); // RITONAVIR 100 MG
OrderTemplate atazanavirOrder = new DrugOrderTemplate(atazanavir);
atazanavirTemplate.setDoseChoices( new DoseChoice[] { new Dose(300, Dose.MG) } );
atazanavirTemplate.setFrequencyChoices( new FrequencyChoice[] { Frequency.ONCE_DAILY } );
OrderTemplate ritonavirOrder = new DrugOrderTemplate(atazanavir);
ritonavirTemplate.setDoseChoices( new DoseChoice[] { new Dose(100, Dose.MG) } );
ritonavirTemplate.setFrequencyChoices( new FrequencyChoice[] { Frequency.ONCE_DAILY } );
OrderSet orderSet = new OrderSet(hivTreatmentRegimen);
orderSet.addMember(atazanavirTemplate);
orderSet.addMember(ritonavirTemplate);
try {
orderEntryService.saveOrderSet(orderSet);
} catch (APIException e) {
// deal with failure
}
Order a Medication Regimen
Order the regimen defined above (HIV TREATMENT REGIMEN) and have the individual drug orders become active orders that are linked through the regimen.