MDR-TB Module Order Entry Design

Requirements:

  • Ability to group one or more drug orders together in an Order Group. Ability to store data about this Order Group as a whole, for example "What is the reason for Ordering this group?" (eg. standardized mdr-tb treatment, individualized mdr-tb treatment, etc)
  • Ability to model standard regimens for treatment of MDR-TB, for example standardized initial injectable treatment regimen, standardized continuation injectable treatment regimen, etc. These should allow specification of drug components at the generic drug level, and optionally include specifications for the specific drug, dosage and dosage units, and frequency.
  • Ability to link together the following things:
    • That we want to be able to treat a particular disease (eg. MDR-TB)
    • That there are 0-N standard regimens as defined above for this particular disease
    • That there are 0-N Drugs, Concept Drugs, and/or Concept Drug Sets that are commonly used to treat this particular disease
    • That 1-N drugs, used in conjunction, may represent a particular part of the treatment plan, with additional metadata describing it, like "what treatment plan is this group a part of?", "what part of the treatment plan does this group represent", etc
    • That there are a discrete number of "reasons for stopping treatment" supported for this particular treatment type
    • Ability to start, stop, continue, and otherwise treat a group of drug orders as a unit (eg. shift the start date by a week, close all of them with the same reason for stopping, etc.
  • Ability to order one of these standard regimens for a patient.

Design and Implementation:

We ended up with the following design to cover the above requirements. It does a passable job at it, and we would like to identify ways to improve it in a way that is consistent for how we want to model this for other treatment types - HIV treatment and Oncology treatment are 2 that come to mind immediately.

We modeled a RegimenType object, which attempts to provide the metadata linkages defined above. These are configured via XML:
class RegimenType {
  String name;  // eg. "mdrtb"
  String drugSet;  // refers to a concept set by uuid or name.  eg: "TUBERCULOSIS DRUGS"
  String reasonForStartingQuestion;  // refers to a concept by uuid or name.  eg. CURRENT MULTI-DRUG RESISTANT TUBERCULOSIS TREATMENT TYPE
  String reasonForStoppingQuestion;  // refers to a concept by uuid or name.  eg. REASON TUBERCULOSIS TREATMENT CHANGED OR STOPPED
  List<RegimenSuggestion> suggestions;  // defines one or more order group templates, each of which contains individual drug order templates
We modeled a "Regimen" object, which attempts to provide the data linkages defined above:
class Regimen {
    Date startDate;
    Date endDate;
    Obs reasonForStarting;
    Set<DrugOrder> drugOrders;
}