FHIR CI-Build

This is the Continuous Integration Build of FHIR (will be incorrect/inconsistent at times).
See the Directory of published versions icon

Responsible Owner: Pharmacy icon Work GroupStandards Status: Informative

This page presents a series of examples of how to use DosageDetails and related types to represent various complex dosing regimes.

Each of the examples below starts with a textural representation of the dosage. In general, these should be found in the renderedInstruction element, but this only shown explicitly in the first example; after that it is omitted for brevity. The examples below include some instances where details in the instruction cannot be represented in the dosage structure.

In regard to these examples, note that the focus here is around the dosage regimes. There is no attempt to populate the rest of the dosage with route, method etc, or a proper medication code, let alone the rest of the MedicationRequest resource content.

Take Perindopril, 1 tablet per day, for 3 months.

Structure

  • MedicationRequest.medication.concept = “Perindopril Arginine 2.5 mg tablet”
  • MedicationRequest.dosageInstruction.renderedDosageInstruction = “1 tablet per day for 3 months”
  • MedicationRequest.dosageInstruction.simple.timing.repeat.boundsDuration = 3 mo
  • …timing.repeat.frequency/period/periodUnit = 1 / 1 / d
  • …doseAndRate[0].doseQuantity = 1 tablet (or explicit mg if desired)
MedicationRequest
  medication 
    concept
      coding: Perindopril Arginine, 2.5mg tablets
  dosageInstruction
    renderedInstruction: 1 tablet per day for 3 months
    simple
      timing
        repeat 
          boundsDuration: 3 mo
          frequency : 1
          period: 1
          periodUnit: d
      doseAndRate
        doseQuantity: 10 mg

Notes:

  • If tablet strength is encoded in the product, keep dose as “1 tablet”

Methylphenidate 10 mg tablets — 10 mg at 07:30 and 12:00, 5 mg at 16:00 Mon–Fri; 10 mg at 08:00 Sat–Sun and holidays; 5 mg PRN after 17:00 (max 2×/week); do not exceed 150 mg per week.

Structure

  • Model as one step with multiple component entries (by dayOfWeek/timeOfDay) + one PRN componententry in that step.
  • Dosage.timing.repeat.dayOfWeek and ...timeOfDay for fixed administrations.
  • Dosage.asNeededBoolean for PRN (evening); optionally …when = EVE.
  • Dosage.maxDosePerPeriod (Ratio) for 150 mg per week.
  • MedicationRequest.dosageInstruction.safety.doseLimit (scope=period) for 150 mg per week.
MedicationRequest
  medication 
    concept
      coding: Methylphenidate 10 mg tablets
  dosageInstruction
    step
      component
        timing
          repeat 
            dayOfWeek: mon | tue | wed | thu | fri
            timeOfDay: 07:30 | 12:00
        doseAndRate
          doseQuantity: 10 mg
      component
        timing
          repeat 
            dayOfWeek: mon | tue | wed | thu | fri
            timeOfDay: 16:00
        doseAndRate
          doseQuantity: 5 mg
      component
        timing
          repeat 
            dayOfWeek: sat | sun
            timeOfDay: 08:00
        doseAndRate
          doseQuantity: 10 mg
      component
        asNeeded: true
        timing
          repeat 
            when: EVE
        doseAndRate
          doseQuantity: 5 mg
        safety
          doseLimit
            valueQuantity: 2 tablets
            scope: administration
    safety
      doseLimit
        valueQuantity: 150 mg
        scope: period
        period: 1 week

Not supported / Caveats: “and holidays” is ambiguous;this might be found in an extension, or in narrative.

Prednisone 10 mg tablets (oral)

  • 40 mg (4 × 10 mg) at 08:00 and 20:00 daily for 5 days;
  • then 30 mg at 08:00 and 20 mg at 20:00 for 5 days;
  • then 20 mg at 08:00 daily for 10 days;
  • then 10 mg at 08:00 daily for 5 days;
  • then 5 mg at 08:00 daily for 5 days;
  • then continue 5 mg at 08:00 every other day for 3 months (or as needed for flare-ups, max two courses per 6 months); then stop.

Structure

  • Represent each step as a separate dosageDetails.step with its own timing.repeat and dose.
  • “Every other day” → period=2, periodUnit=d.
  • Optional PRN course as a separate PRN dosageDetails.step (narrative driven).
MedicationRequest
  medication 
    concept
      coding: Prednisone 10 mg tablets
  dosageInstruction 
    step 
      component
        timing
          repeat
            boundsDuration: 5 days
            frequency: 2
            period: 1
            periodUnit: d
            timeOfDay: 08:00 | 20:00
        doseAndRate
          doseQuantity: 40 mg
    step 
      component
        timing
          repeat
            count: 5
            period: 1
            periodUnit: d
            timeOfDay: 08:00
        doseAndRate
          doseQuantity: 30 mg
      component
        timing
          repeat
            count: 5
            period: 1
            periodUnit: d
            timeOfDay: 20:00
        doseAndRate
          doseQuantity: 20 mg
    step 
      component
        timing
          repeat
            count: 10
            period: 1
            periodUnit: d
            timeOfDay: 08:00
        doseAndRate
          doseQuantity: 20 mg
    step 
      component
        timing
          repeat
            count: 5
            period: 1
            periodUnit: d
            timeOfDay: 08:00
        doseAndRate
          doseQuantity: 10 mg
    step 
      component
        timing
          repeat
            count: 5
            period: 1
            periodUnit: d
            timeOfDay: 08:00
        doseAndRate
          doseQuantity: 5 mg
    step 
      component
        timing
          repeat
            boundsDuration: 3 m
            period: 2
            periodUnit: d
            timeOfDay: 08:00
        doseAndRate
          doseQuantity: 5 mg
    step 
      component
        asNeeded : true
        timing
          repeat
            boundsDuration: 3 m
        doseAndRate
          doseQuantity: 5 mg
    safety
      doseLimit
        valueInteger: 2
        Period: 6 months

Notes:

  • The instructions are ambiguous with regard to flare-ups - is this just straight PRN? or is the intent to repeat the whole course? Humans differ in their understanding of this, and the ambiguity has been preserved as a good example of the real world challenges involved here
  • For the purpose of this example, it has been interpreted as an instruction to repeat the whole course.

Epirubicin 45 mg/m² IV on Days 1 & 8 every 28 days × 6 cycles; infuse over 20 min at 09:00; do not exceed 90 mg/m² per 28-day cycle or 900 mg/m² lifetime cumulative dose.

Structure

  • Two dosageDetails.step.component entries for Day 1 and Day 8 of each 28-day period (×6 cycles).
  • Infusion duration → Dosage.timing.repeat.duration=20, durationUnit=min; or encode under doseAndRate.rate[x] if modeled as rate.
  • Maxima via MedicationRequest.dosageInstruction.safety.doseLimit with scopes period (per cycle) and lifetime.
  • Day-8 offset is expressed via a Timing.repeat extension (e.g., startOffset=8 d).
MedicationRequest
  medication 
    concept
      coding: Epirubicin 
  dosageInstruction 
    step
      component
        timing
          repeat
            count: 6
            duration: 20
            durationUnit: min
            period: 28
            periodUnit: d
            timeOfDay: 09:00
        doseAndRate
          rateQuantity: 45 mg/m² 
      component
        timing
          repeat
            count: 6
            duration: 20
            durationUnit: min
            period: 28
            periodUnit: d
            startOffset = 8 d
            timeOfDay: 09:00
        doseAndRate
          rateQuantity: 45 mg/m² 
    safety
      doseLimit[0]
        valueQuantity: 90 mg/m2  
        scope: dosage
      doseLimit[1]
        valueQuantity: 900 mg/m²
        scope: lifetime

Notes:

  • The structure does not say what /m2 is of - that does not appear to be computable (it’s skin surface area for the patient)
  • Even when understood, mg/m² requires external patient BSA

Microgynon tab (contraceptives): 1 tablet daily for 21 days, then 7 days off. Then repeat

Structure

  • Express repeating 28-day cycles with Timing.repeat.endOffset = 7 d for the off-interval.
  • Alternative: two steps—21 daily doses followed by a “break” step with 0 dose; then repeat via new order or plan definition.
  • Narrative should clarify if placebos are present (daily intake without true off days).
MedicationRequest
  medication 
    concept
      coding: Microgynon tab
  dosageInstruction 
    simple
      timing
        repeat
          endOffset = 7 d
          frequency: 21
          period: 28
          periodUnit: d
       doseAndRate
         doseQuantity: 1 tablet

Notes:

  • Retail tri-phase contraceptives don’t work like this - they have placebos so that you take a pill every day, and the pills are all day-numbered. There's no way to represent 'take the right numbered pill for the day of your cycle' in the DosageDetails structure

Iron sucrose: “Mon/Wed/Fri 09:00 × 5 doses total.

Structure

  • timing.repeat.dayOfWeek = Mon|Wed|Fri; timeOfDay = 09:00; count = 5.
MedicationRequest
  medication 
    concept
      coding: Iron sucrose
  dosageInstruction 
    simple
      timing
        repeat
          count: 5
          period: 1
          periodUnit: d
          dayOfWeek = Mon|Wed|Fri
          timeOfDay: 09:00

Symbicort (budesonide/formoterol):

  • 2 inhalations per day either as 1 in the morning and in the evening; or 2 in either the morning or evening
  • 1 additional inhalation as need (PRN)
  • Maximum dose in a single administration no more than 6 inhalations (upper limit per administration)
  • Maximum daily dose = no more than 12 inhalations (upper limit per day)

Structure

  • Model planned daily dosing and PRN as separate dosageDetails.step.component entries.
  • Use MedicationRequest.dosageInstruction.safety.doseLimit with scope=administration (6 puffs) and scope=period (12 puffs / 1 day).
MedicationRequest
  medication 
    concept
      coding: Symbicort
  dosageInstruction 
    step
      component
        timing
          when: MORN | EVE
        doseAndRate
          rateQuantity: 2 puffs/day
      component
          asNeeded: true
    safety
      doseLimit[0]
        valueQuantity: 12 puffs
        scope: period
        period: 1 day
      doseLimit[1]
        valueQuantity: 6 puffs
        scope: administration

Vitamin D 1 vial the first day of each month.

Structure

  • Use extension timing-dayOfMonth with value 1.
  • frequency=1, period=1, periodUnit=mo.
MedicationRequest
  medication 
    concept
      coding: Vitamin D
  dosageInstruction 
    simple
      timing
        repeat
          extension['%timing-dayOfMonth'].valueInteger: 1
          frequency: 1
          period: 1
          periodUnit: mo

Notes:

  • This uses the extension http://hl7.org/fhir/StructureDefinition/timing-dayOfMonth to pin the recurrent event to a day of the month (like day of week). This extension is defined in the Extensions Pack icon (or will be)

1 tablet a day for a week, then 3 days break, then 1 tablet a day for 3 days

Structure

  • Model as three steps (7 doses → break → 3 doses). A “break” can be expressed as a component with dose=0.
MedicationRequest
  medication 
    concept
      coding: Vitamin D
  dosageInstruction 
    step
      component
        timing
          repeat
            count : 7
            period: 1
            periodUnit: d
       doseAndRate
         doseQuantity: 1 tablet
    step
      component
        timing
          repeat
            count : 3
            period: 1
            periodUnit: d
       doseAndRate
         doseQuantity: 0 tablet
    step
      component
        timing
          repeat
            count : 3
            period: 1
            periodUnit: d
       doseAndRate
         doseQuantity: 1 tablet

Notes:

  • You can also use the endOffset element in Timing to give a regular break; this technique here is for irregular breaks

Malaria prophylaxis: start 1 day before start of (event), stop 7 days after end of (event)

Structure

  • event-relative offsets as extensions on the regimen step (e.g., start.offset = -1 d).
  • Duration/count of daily administrations by timing.repeat.
MedicationRequest
  medication 
    concept
      coding: Malaria XXX
  dosageInstruction 
    step
      start
        contextCode
          coding : [start of trip] 
        offsetDuration: -1 d
      end
        contextCode
          coding : [end of trip] 
        offsetDuration: 7 d
      component  
        timing
          repeat
            period: 1
            periodUnit: d

Caveat: Event semantics are primarily for rendering/coordination, not general computation.

PREDNISOLONE 20 mg : 60 mg morning until 3 negative urine strip then 50 mg morning for 1 week, then 40 mg morning for 1 week, then 30 mg morning for 1 week, then 20 mg morning for 1 week, then 10 mg morning for 2 weeks, then see doctor for stopping treatment depending on evolution

Structure

  • Use separate dosageDetails.step entries per step (weekly bounds).
  • reference an EventDefinition to describe the “3 negative strips” event
MedicationRequest
  medication 
    concept
      coding: PREDNISOLONE 20 mg
  dosageInstruction 
    step
      end
        contextDefinition: EventDefinition/example-data-with-profile 
      component
        timing
          repeat
            period: 1
            periodUnit: d
            when: MORN
        doseAndRate
          doseQuantity: 60mg
    step
      component
          timing
            repeat
              boundsDuration: 1 wk
              period: 1
              periodUnit: d
              when: MORN
          doseAndRate
            doseQuantity: 50mg
    step
      component
          timing
            repeat
              boundsDuration: 1 wk
              period: 1
              periodUnit: d
              when: MORN
          doseAndRate
            doseQuantity: 40mg
    step
      component
        timing
            repeat
              boundsDuration: 1 wk
              period: 1
              periodUnit: d
              when: MORN
          doseAndRate
            doseQuantity: 30mg
     
# etc

Notes:

  • Note that the computational space of events is absolutely massive, so implementations that try to use this extension shouldn’t expect the event to actually be understood, just rendered - so marginal utility over just putting it in text

Dovobet ointment: When needed a treatment period of 4 weeks starts. Applied once daily. Treatment period could be repeated if needed. When using calcipotriol containing medicinal products, the maximum daily dose should not exceed 15 g. The body surface area treated with calcipotriol containing medicinal products should not exceed 30 %

Structure

  • Two steps: an initial 4-week course and a repeatable “if needed” 4-week course.
  • Limits via MedicationRequest.dosageInstruction.safety.doseLimit: 15 g per 1 day (scope=period); “≤30% surface area” captured as narrative or profiled percent on scope=administration.
MedicationRequest
  medication 
    concept
      coding: Dovobet ointment
  dosageInstruction 
    step
      component
        timing
          boundsDuration: 4 wk
          repeat
            period: 1
            periodUnit: d
    step
      component
        condition
          code: http://hl7.org/fhir/CodeSystem/dosage-condition-code#if needed
        timing
          repeat
            boundsDuration: 4 wk
            period: 1
            periodUnit: d
    safety
      doseLimit[0]
        valueQuantity: 15g
        scope: period
        period: 1 day
      doseLimit[1]
        valueQuantity: 30%{surface area}
        scope: administration

Notes:

  • The contextCode = if needed is different to dosage.asNeeded because the latter is ‘take a dose if needed’, where as the former is ‘do this entire dosage if needed’
  • There’s no hint as to what the 30% is about - 30% of *what*? This will be found in the renderedInstruction
  • Event when understood, 30% of body surface area requires external context