Dose syntax implementation guidance for FHIR STU3

This guidance is under active development by NHS Digital and content may be added or updated on a regular basis.

Dosage

The Dosage structure used within STU3 and CareConnet implementations is unchanged from that published within the international R4 standard.

id0..1string
extensionI0..*Extension
sequenceΣ0..1integer
textΣ0..1string
additionalInstructionΣ0..*CodeableConcept
patientInstructionΣ0..1string
timingΣ0..1Timing
asNeededBooleanboolean
asNeededCodeableConceptCodeableConcept
siteΣ0..1CodeableConcept
routeΣ0..1CodeableConcept
methodΣ0..1CodeableConcept
doseRangeRange
doseQuantitySimpleQuantity
maxDosePerPeriodΣ I0..1Ratio
maxDosePerAdministrationΣ I0..1SimpleQuantity
maxDosePerLifetimeΣ I0..1SimpleQuantity
rateRatioRatio
rateRangeRange
rateQuantitySimpleQuantity
Dosage
DefinitionIndicates how the medication is/was taken or should be taken by the patient.
Cardinality0...*
Invariants
  • ele-1: All FHIR elements must have a @value or children
    hasValue() | (children().count() > id.count())
Mappings
  • rim: n/a
  • rim: .outboundRelationship[typeCode=COMP].target[classCode=SBADM, moodCode=INT]
Dosage.id
Definitionunique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
Cardinality0...1
Typestring
Comments

Note that FHIR strings may not exceed 1MB in size

Invariants
  • ele-1: All FHIR elements must have a @value or children
    hasValue() | (children().count() > id.count())
Mappings
  • rim: n/a
Dosage.extension
DefinitionMay be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
Cardinality0...*
TypeExtension
Aliasextensions, user content
Comments

There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.

SlicingUnordered, Open, by url(Value)
Invariants
  • ele-1: All FHIR elements must have a @value or children
    hasValue() | (children().count() > id.count())
  • ext-1: Must have either extensions or value[x], not both
    extension.exists() != value.exists()
Mappings
  • rim: n/a
  • rim: N/A
Dosage.sequence
DefinitionIndicates the order in which the dosage instructions should be applied or interpreted.
Cardinality0...1
Typeinteger
SummaryTrue
Requirements

If the sequence number of multiple Dosages is the same, then it is implied that the instructions are to be treated as concurrent. If the sequence number is different, then the Dosages are intended to be sequential.

Comments

32 bit number; for values larger than this, use decimal

Invariants
  • ele-1: All FHIR elements must have a @value or children
    hasValue() | (children().count() > id.count())
Mappings
  • rim: n/a
  • rim: .text
Dosage.text
DefinitionFree text dosage instructions e.g. SIG.
Cardinality0...1
Typestring
SummaryTrue
Requirements

Free text dosage instructions can be used for cases where the instructions are too complex to code. The content of this attribute does not include the name or description of the medication. When coded instructions are present, the free text instructions may still be present for display to humans taking or administering the medication. It is expected that the text instructions will always be populated. If the dosage.timing attribute is also populated, then the dosage.text should reflect the same information as the timing.

Comments

Note that FHIR strings may not exceed 1MB in size

Invariants
  • ele-1: All FHIR elements must have a @value or children
    hasValue() | (children().count() > id.count())
Mappings
  • rim: n/a
  • rim: .text
Dosage.additionalInstruction
DefinitionSupplemental instruction - e.g. "with meals".
Cardinality0...*
TypeCodeableConcept
Binding
A coded concept identifying additional instructions such as "take with water" or "avoid operating heavy machinery".
SNOMED CT Additional Dosage Instructions (example)
SummaryTrue
Requirements

Additional instruction such as "Swallow with plenty of water" which may or may not be coded.

Comments

Not all terminology uses fit this general pattern. In some cases, models should not use CodeableConcept and use Coding directly and provide their own structure for managing text, codings, translations and the relationship between elements and pre- and post-coordination.

Invariants
  • ele-1: All FHIR elements must have a @value or children
    hasValue() | (children().count() > id.count())
Mappings
  • rim: n/a
  • v2: CE/CNE/CWE
  • rim: CD
  • orim: fhir:CodeableConcept rdfs:subClassOf dt:CD
  • rim: .text
Dosage.patientInstruction
DefinitionInstructions in terms that are understood by the patient or consumer.
Cardinality0...1
Typestring
SummaryTrue
Comments

Note that FHIR strings may not exceed 1MB in size

Invariants
  • ele-1: All FHIR elements must have a @value or children
    hasValue() | (children().count() > id.count())
Mappings
  • rim: n/a
  • rim: .text
Dosage.timing
DefinitionWhen medication should be administered.
Cardinality0...1
TypeTiming
SummaryTrue
Requirements

The timing schedule for giving the medication to the patient. The Schedule data type allows many different expressions. For example: "Every 8 hours"; "Three times a day"; "1/2 an hour before breakfast for 10 days from 23-Dec 2011:"; "15 Oct 2013, 17 Oct 2013 and 1 Nov 2013". Sometimes, a rate can imply duration when expressed as total volume / duration (e.g. 500mL/2 hours implies a duration of 2 hours). However, when rate doesn't imply duration (e.g. 250mL/hour), then the timing.repeat.duration is needed to convey the infuse over time period.

Comments

This attribute may not always be populated while the Dosage.text is expected to be populated. If both are populated, then the Dosage.text should reflect the content of the Dosage.timing.

Invariants
  • ele-1: All FHIR elements must have a @value or children
    hasValue() | (children().count() > id.count())
Mappings
  • rim: n/a
  • v2: N/A
  • rim: QSET<TS> (GTS)
  • rim: .effectiveTime
Dosage.asNeeded[x]
DefinitionIndicates whether the Medication is only taken when needed within a specific dosing schedule (Boolean option), or it indicates the precondition for taking the Medication (CodeableConcept).
Cardinality0...1
Typeboolean, CodeableConcept
Binding
A coded concept identifying the precondition that should be met or evaluated prior to consuming or administering a medication dose. For example "pain", "30 minutes prior to sexual intercourse", "on flare-up" etc.
SNOMED CT Medication As Needed Reason Codes (example)
SummaryTrue
Comments

Can express "as needed" without a reason by setting the Boolean = True. In this case the CodeableConcept is not populated. Or you can express "as needed" with a reason by including the CodeableConcept. In this case the Boolean is assumed to be True. If you set the Boolean to False, then the dose is given according to the schedule and is not "prn" or "as needed".

Invariants
  • ele-1: All FHIR elements must have a @value or children
    hasValue() | (children().count() > id.count())
Mappings
  • rim: n/a
  • rim: .outboundRelationship[typeCode=PRCN].target[classCode=OBS, moodCode=EVN, code="as needed"].value=boolean or codable concept
Dosage.site
DefinitionBody site to administer to.
Cardinality0...1
TypeCodeableConcept
Binding
A coded concept describing the site location the medicine enters into or onto the body.
SNOMED CT Anatomical Structure for Administration Site Codes (example)
SummaryTrue
Requirements

A coded specification of the anatomic site where the medication first enters the body.

Comments

If the use case requires attributes from the BodySite resource (e.g. to identify and track separately) then use the standard extension body-site-instance. May be a summary code, or a reference to a very precise definition of the location, or both.

Invariants
  • ele-1: All FHIR elements must have a @value or children
    hasValue() | (children().count() > id.count())
Mappings
  • rim: n/a
  • v2: CE/CNE/CWE
  • rim: CD
  • orim: fhir:CodeableConcept rdfs:subClassOf dt:CD
  • rim: .approachSiteCode
Dosage.route
DefinitionHow drug should enter body.
Cardinality0...1
TypeCodeableConcept
Binding
A coded concept describing the route or physiological path of administration of a therapeutic agent into or onto the body of a subject.
SNOMED CT Route Codes (example)
SummaryTrue
Requirements

A code specifying the route or physiological path of administration of a therapeutic agent into or onto a patient's body.

Comments

Not all terminology uses fit this general pattern. In some cases, models should not use CodeableConcept and use Coding directly and provide their own structure for managing text, codings, translations and the relationship between elements and pre- and post-coordination.

Invariants
  • ele-1: All FHIR elements must have a @value or children
    hasValue() | (children().count() > id.count())
Mappings
  • rim: n/a
  • v2: CE/CNE/CWE
  • rim: CD
  • orim: fhir:CodeableConcept rdfs:subClassOf dt:CD
  • rim: .routeCode
Dosage.method
DefinitionTechnique for administering medication.
Cardinality0...1
TypeCodeableConcept
Binding
A coded concept describing the technique by which the medicine is administered.
SNOMED CT Administration Method Codes (example)
SummaryTrue
Requirements

A coded value indicating the method by which the medication is introduced into or onto the body. Most commonly used for injections. For examples, Slow Push; Deep IV.

Comments

Terminologies used often pre-coordinate this term with the route and or form of administration.

Invariants
  • ele-1: All FHIR elements must have a @value or children
    hasValue() | (children().count() > id.count())
Mappings
  • rim: n/a
  • v2: CE/CNE/CWE
  • rim: CD
  • orim: fhir:CodeableConcept rdfs:subClassOf dt:CD
  • rim: .doseQuantity
Dosage.dose[x]
DefinitionAmount of medication per dose.
Cardinality0...1
TypeRange, SimpleQuantity
SummaryTrue
Requirements

The amount of therapeutic or other substance given at one administration event.

Comments

Note that this specifies the quantity of the specified medication, not the quantity for each active ingredient(s). Each ingredient amount can be communicated in the Medication resource. For example, if one wants to communicate that a tablet was 375 mg, where the dose was one tablet, you can use the Medication resource to document that the tablet was comprised of 375 mg of drug XYZ. Alternatively if the dose was 375 mg, then you may only need to use the Medication resource to indicate this was a tablet. If the example were an IV such as dopamine and you wanted to communicate that 400mg of dopamine was mixed in 500 ml of some IV solution, then this would all be communicated in the Medication resource. If the administration is not intended to be instantaneous (rate is present or timing has a duration), this can be specified to convey the total amount to be administered over the period of time as indicated by the schedule e.g. 500 ml in dose, with timing used to convey that this should be done over 4 hours.

Invariants
  • ele-1: All FHIR elements must have a @value or children
    hasValue() | (children().count() > id.count())
Mappings
  • rim: n/a
  • rim: .doseQuantity
Dosage.maxDosePerPeriod
DefinitionUpper limit on medication per unit of time.
Cardinality0...1
TypeRatio
SummaryTrue
Requirements

The maximum total quantity of a therapeutic substance that may be administered to a subject over the period of time. For example, 1000mg in 24 hours.

Comments

This is intended for use as an adjunct to the dosage when there is an upper cap. For example "2 tablets every 4 hours to a maximum of 8/day".

Invariants
  • ele-1: All FHIR elements must have a @value or children
    hasValue() | (children().count() > id.count())
  • rat-1: Numerator and denominator SHALL both be present, or both are absent. If both are absent, there SHALL be some extension present
    (numerator.empty() xor denominator.exists()) and (numerator.exists() or extension.exists())
Mappings
  • rim: n/a
  • v2: N/A
  • rim: RTO
  • rim: .maxDoseQuantity
Dosage.maxDosePerAdministration
DefinitionUpper limit on medication per administration.
Cardinality0...1
TypeSimpleQuantity
SummaryTrue
Requirements

The maximum total quantity of a therapeutic substance that may be administered to a subject per administration.

Comments

This is intended for use as an adjunct to the dosage when there is an upper cap. For example, a body surface area related dose with a maximum amount, such as 1.5 mg/m2 (maximum 2 mg) IV over 5 – 10 minutes would have doseQuantity of 1.5 mg/m2 and maxDosePerAdministration of 2 mg.

Invariants
  • ele-1: All FHIR elements must have a @value or children
    hasValue() | (children().count() > id.count())
  • qty-3: If a code for the unit is present, the system SHALL also be present
    code.empty() or system.exists()
  • sqty-1: The comparator is not used on a SimpleQuantity
    comparator.empty()
Mappings
  • rim: n/a
  • v2: SN (see also Range) or CQ
  • rim: PQ, IVL<PQ>, MO, CO, depending on the values
  • rim: not supported
Dosage.maxDosePerLifetime
DefinitionUpper limit on medication per lifetime of the patient.
Cardinality0...1
TypeSimpleQuantity
SummaryTrue
Requirements

The maximum total quantity of a therapeutic substance that may be administered per lifetime of the subject.

Comments

The context of use may frequently define what kind of quantity this is and therefore what kind of units can be used. The context of use may also restrict the values for the comparator.

Invariants
  • ele-1: All FHIR elements must have a @value or children
    hasValue() | (children().count() > id.count())
  • qty-3: If a code for the unit is present, the system SHALL also be present
    code.empty() or system.exists()
  • sqty-1: The comparator is not used on a SimpleQuantity
    comparator.empty()
Mappings
  • rim: n/a
  • v2: SN (see also Range) or CQ
  • rim: PQ, IVL<PQ>, MO, CO, depending on the values
  • rim: not supported
Dosage.rate[x]
DefinitionAmount of medication per unit of time.
Cardinality0...1
TypeRatio, Range, SimpleQuantity
SummaryTrue
Requirements

Identifies the speed with which the medication was or will be introduced into the patient. Typically the rate for an infusion e.g. 100 ml per 1 hour or 100 ml/hr. May also be expressed as a rate per unit of time e.g. 500 ml per 2 hours. Other examples: 200 mcg/min or 200 mcg/1 minute; 1 liter/8 hours. Sometimes, a rate can imply duration when expressed as total volume / duration (e.g. 500mL/2 hours implies a duration of 2 hours). However, when rate doesn't imply duration (e.g. 250mL/hour), then the timing.repeat.duration is needed to convey the infuse over time period.

Comments

It is possible to supply both a rate and a doseQuantity to provide full details about how the medication is to be administered and supplied. If the rate is intended to change over time, depending on local rules/regulations, each change should be captured as a new version of the MedicationRequest with an updated rate, or captured with a new MedicationRequest with the new rate.

Invariants
  • ele-1: All FHIR elements must have a @value or children
    hasValue() | (children().count() > id.count())
Mappings
  • rim: n/a
  • rim: .rateQuantity

Element: sequence

Multi-sequence dosage instructions.

A multi-sequence would be required where a dosage instruction changes over a given time schedule, where a dosage instruction includes optional follow-up doses or where a concurrent dosage instruction is required for the same medication at a different dose.

Examples below include Prednisolone to treat Bell’s palsy where a dose starts at 60 mg per day for a period of time then reduces by 10 mg per day. This would be described as a sequential dosage instruction. A concurrent dosage example is provided to describe a different dose in the morning to that at midday.


Sequential Instructions

Where the value of sequence is an incremental integer it defines a sequential instruction.

Example use of the FHIR STU3 Dosage using multiple sequential sequences

<!--  Example use of the FHIR STU3 Dosage using multiple sequential sequences  -->
<!--  Prednisolone, 60mg daily for 4 days, then 50mg next day, then 40mg, then 30mg, then 20mg, then 10mg, then stop  -->
<MedicationRequest xmlns="http://hl7.org/fhir">
    <id value="43955772-3136-49be-829e-ac04b56894d5" />
    <contained>
        <Medication>
            <id value="med1" />
            <code>
                <coding>
                    <system value="http://snomed.info/sct" />
                    <code value="52388000" />
                    <display value="Prednisolone" />
                </coding>
            </code>
        </Medication>
    </contained>
    <status value="active" />
    <intent value="order" />
    <medicationReference>
        <reference value="#med1" />
    </medicationReference>
    <subject>
        <identifier>
            <system value="https://fhir.nhs.uk/Id/nhs-number" />
            <value value="9999999999" />
        </identifier>
    </subject>
    <dosageInstruction>
        <sequence value="1" />
        <timing>
            <repeat>
                <boundsDuration>
                    <value value="4" />
                    <unit value="day" />
                    <system value="http://unitsofmeasure.org" />
                    <code value="d" />
                </boundsDuration>
                <frequency value="1" />
                <period value="1" />
                <periodUnit value="d" />
            </repeat>
        </timing>
        <doseQuantity>
            <value value="60" />
            <unit value="milligram" />
            <system value="http://unitsofmeasure.org" />
            <code value="mg" />
        </doseQuantity>
    </dosageInstruction>
    <dosageInstruction>
        <sequence value="2" />
        <timing>
            <repeat>
                <boundsDuration>
                    <value value="1" />
                    <unit value="day" />
                    <system value="http://unitsofmeasure.org" />
                    <code value="d" />
                </boundsDuration>
                <frequency value="1" />
                <period value="1" />
                <periodUnit value="d" />
            </repeat>
        </timing>
        <doseQuantity>
            <value value="50" />
            <unit value="milligram" />
            <system value="http://unitsofmeasure.org" />
            <code value="mg" />
        </doseQuantity>
    </dosageInstruction>
    <dosageInstruction>
        <sequence value="3" />
        <timing>
            <repeat>
                <boundsDuration>
                    <value value="1" />
                    <unit value="day" />
                    <system value="http://unitsofmeasure.org" />
                    <code value="d" />
                </boundsDuration>
                <frequency value="1" />
                <period value="1" />
                <periodUnit value="d" />
            </repeat>
        </timing>
        <doseQuantity>
            <value value="40" />
            <unit value="milligram" />
            <system value="http://unitsofmeasure.org" />
            <code value="mg" />
        </doseQuantity>
    </dosageInstruction>
    <dosageInstruction>
        <sequence value="4" />
        <timing>
            <repeat>
                <boundsDuration>
                    <value value="1" />
                    <unit value="day" />
                    <system value="http://unitsofmeasure.org" />
                    <code value="d" />
                </boundsDuration>
                <frequency value="1" />
                <period value="1" />
                <periodUnit value="d" />
            </repeat>
        </timing>
        <doseQuantity>
            <value value="30" />
            <unit value="milligram" />
            <system value="http://unitsofmeasure.org" />
            <code value="mg" />
        </doseQuantity>
    </dosageInstruction>
    <dosageInstruction>
        <sequence value="5" />
        <timing>
            <repeat>
                <boundsDuration>
                    <value value="1" />
                    <unit value="day" />
                    <system value="http://unitsofmeasure.org" />
                    <code value="d" />
                </boundsDuration>
                <frequency value="1" />
                <period value="1" />
                <periodUnit value="d" />
            </repeat>
        </timing>
        <doseQuantity>
            <value value="20" />
            <unit value="milligram" />
            <system value="http://unitsofmeasure.org" />
            <code value="mg" />
        </doseQuantity>
    </dosageInstruction>
    <dosageInstruction>
        <sequence value="6" />
        <additionalInstruction>
            <coding>
                <system value="http://snomed.info/sct" />
                <code value="422327006" />
                <display value="Then stop" />
            </coding>
        </additionalInstruction>
        <timing>
            <repeat>
                <boundsDuration>
                    <value value="1" />
                    <unit value="day" />
                    <system value="http://unitsofmeasure.org" />
                    <code value="d" />
                </boundsDuration>
                <frequency value="1" />
                <period value="1" />
                <periodUnit value="d" />
            </repeat>
        </timing>
        <doseQuantity>
            <value value="10" />
            <unit value="milligram" />
            <system value="http://unitsofmeasure.org" />
            <code value="mg" />
        </doseQuantity>
    </dosageInstruction>
</MedicationRequest>
{
    "resourceType": "MedicationRequest",
    "id": "43955772-3136-49be-829e-ac04b56894d5",
    "contained":  [
        {
            "resourceType": "Medication",
            "id": "med1",
            "code": {
                "coding":  [
                    {
                        "system": "http://snomed.info/sct",
                        "code": "52388000",
                        "display": "Prednisolone"
                    }
                ]
            }
        }
    ],
    "status": "active",
    "intent": "order",
    "medicationReference": {
        "reference": "#med1"
    },
    "subject": {
        "identifier": {
            "system": "https://fhir.nhs.uk/Id/nhs-number",
            "value": "9999999999"
        }
    },
    "dosageInstruction":  [
        {
            "sequence": 1,
            "timing": {
                "repeat": {
                    "boundsDuration": {
                        "value": 4,
                        "unit": "day",
                        "system": "http://unitsofmeasure.org",
                        "code": "d"
                    },
                    "frequency": 1,
                    "period": 1,
                    "periodUnit": "d"
                }
            },
            "doseQuantity": {
                "value": 60,
                "unit": "milligram",
                "system": "http://unitsofmeasure.org",
                "code": "mg"
            }
        },
        {
            "sequence": 2,
            "timing": {
                "repeat": {
                    "boundsDuration": {
                        "value": 1,
                        "unit": "day",
                        "system": "http://unitsofmeasure.org",
                        "code": "d"
                    },
                    "frequency": 1,
                    "period": 1,
                    "periodUnit": "d"
                }
            },
            "doseQuantity": {
                "value": 50,
                "unit": "milligram",
                "system": "http://unitsofmeasure.org",
                "code": "mg"
            }
        },
        {
            "sequence": 3,
            "timing": {
                "repeat": {
                    "boundsDuration": {
                        "value": 1,
                        "unit": "day",
                        "system": "http://unitsofmeasure.org",
                        "code": "d"
                    },
                    "frequency": 1,
                    "period": 1,
                    "periodUnit": "d"
                }
            },
            "doseQuantity": {
                "value": 40,
                "unit": "milligram",
                "system": "http://unitsofmeasure.org",
                "code": "mg"
            }
        },
        {
            "sequence": 4,
            "timing": {
                "repeat": {
                    "boundsDuration": {
                        "value": 1,
                        "unit": "day",
                        "system": "http://unitsofmeasure.org",
                        "code": "d"
                    },
                    "frequency": 1,
                    "period": 1,
                    "periodUnit": "d"
                }
            },
            "doseQuantity": {
                "value": 30,
                "unit": "milligram",
                "system": "http://unitsofmeasure.org",
                "code": "mg"
            }
        },
        {
            "sequence": 5,
            "timing": {
                "repeat": {
                    "boundsDuration": {
                        "value": 1,
                        "unit": "day",
                        "system": "http://unitsofmeasure.org",
                        "code": "d"
                    },
                    "frequency": 1,
                    "period": 1,
                    "periodUnit": "d"
                }
            },
            "doseQuantity": {
                "value": 20,
                "unit": "milligram",
                "system": "http://unitsofmeasure.org",
                "code": "mg"
            }
        },
        {
            "sequence": 6,
            "additionalInstruction":  [
                {
                    "coding":  [
                        {
                            "system": "http://snomed.info/sct",
                            "code": "422327006",
                            "display": "Then stop"
                        }
                    ]
                }
            ],
            "timing": {
                "repeat": {
                    "boundsDuration": {
                        "value": 1,
                        "unit": "day",
                        "system": "http://unitsofmeasure.org",
                        "code": "d"
                    },
                    "frequency": 1,
                    "period": 1,
                    "periodUnit": "d"
                }
            },
            "doseQuantity": {
                "value": 10,
                "unit": "milligram",
                "system": "http://unitsofmeasure.org",
                "code": "mg"
            }
        }
    ]
}
MedicationRequest.id[0]43955772-3136-49be-829e-ac04b56894d5
MedicationRequest.contained[0].id[0]med1
MedicationRequest.contained[0].code[0].coding[0].system[0]http://snomed.info/sct
MedicationRequest.contained[0].code[0].coding[0].code[0]52388000
MedicationRequest.contained[0].code[0].coding[0].display[0]Prednisolone
MedicationRequest.status[0]active
MedicationRequest.intent[0]order
MedicationRequest.medication[0].reference[0]#med1
MedicationRequest.subject[0].identifier[0].system[0]https://fhir.nhs.uk/Id/nhs-number
MedicationRequest.subject[0].identifier[0].value[0]9999999999
MedicationRequest.dosageInstruction[0].sequence[0]1
MedicationRequest.dosageInstruction[0].timing[0].repeat[0].bounds[0].value[0]4
MedicationRequest.dosageInstruction[0].timing[0].repeat[0].bounds[0].unit[0]day
MedicationRequest.dosageInstruction[0].timing[0].repeat[0].bounds[0].system[0]http://unitsofmeasure.org
MedicationRequest.dosageInstruction[0].timing[0].repeat[0].bounds[0].code[0]d
MedicationRequest.dosageInstruction[0].timing[0].repeat[0].frequency[0]1
MedicationRequest.dosageInstruction[0].timing[0].repeat[0].period[0]1
MedicationRequest.dosageInstruction[0].timing[0].repeat[0].periodUnit[0]d
MedicationRequest.dosageInstruction[0].dose[0].value[0]60
MedicationRequest.dosageInstruction[0].dose[0].unit[0]milligram
MedicationRequest.dosageInstruction[0].dose[0].system[0]http://unitsofmeasure.org
MedicationRequest.dosageInstruction[0].dose[0].code[0]mg
MedicationRequest.dosageInstruction[1].sequence[0]2
MedicationRequest.dosageInstruction[1].timing[0].repeat[0].bounds[0].value[0]1
MedicationRequest.dosageInstruction[1].timing[0].repeat[0].bounds[0].unit[0]day
MedicationRequest.dosageInstruction[1].timing[0].repeat[0].bounds[0].system[0]http://unitsofmeasure.org
MedicationRequest.dosageInstruction[1].timing[0].repeat[0].bounds[0].code[0]d
MedicationRequest.dosageInstruction[1].timing[0].repeat[0].frequency[0]1
MedicationRequest.dosageInstruction[1].timing[0].repeat[0].period[0]1
MedicationRequest.dosageInstruction[1].timing[0].repeat[0].periodUnit[0]d
MedicationRequest.dosageInstruction[1].dose[0].value[0]50
MedicationRequest.dosageInstruction[1].dose[0].unit[0]milligram
MedicationRequest.dosageInstruction[1].dose[0].system[0]http://unitsofmeasure.org
MedicationRequest.dosageInstruction[1].dose[0].code[0]mg
MedicationRequest.dosageInstruction[2].sequence[0]3
MedicationRequest.dosageInstruction[2].timing[0].repeat[0].bounds[0].value[0]1
MedicationRequest.dosageInstruction[2].timing[0].repeat[0].bounds[0].unit[0]day
MedicationRequest.dosageInstruction[2].timing[0].repeat[0].bounds[0].system[0]http://unitsofmeasure.org
MedicationRequest.dosageInstruction[2].timing[0].repeat[0].bounds[0].code[0]d
MedicationRequest.dosageInstruction[2].timing[0].repeat[0].frequency[0]1
MedicationRequest.dosageInstruction[2].timing[0].repeat[0].period[0]1
MedicationRequest.dosageInstruction[2].timing[0].repeat[0].periodUnit[0]d
MedicationRequest.dosageInstruction[2].dose[0].value[0]40
MedicationRequest.dosageInstruction[2].dose[0].unit[0]milligram
MedicationRequest.dosageInstruction[2].dose[0].system[0]http://unitsofmeasure.org
MedicationRequest.dosageInstruction[2].dose[0].code[0]mg
MedicationRequest.dosageInstruction[3].sequence[0]4
MedicationRequest.dosageInstruction[3].timing[0].repeat[0].bounds[0].value[0]1
MedicationRequest.dosageInstruction[3].timing[0].repeat[0].bounds[0].unit[0]day
MedicationRequest.dosageInstruction[3].timing[0].repeat[0].bounds[0].system[0]http://unitsofmeasure.org
MedicationRequest.dosageInstruction[3].timing[0].repeat[0].bounds[0].code[0]d
MedicationRequest.dosageInstruction[3].timing[0].repeat[0].frequency[0]1
MedicationRequest.dosageInstruction[3].timing[0].repeat[0].period[0]1
MedicationRequest.dosageInstruction[3].timing[0].repeat[0].periodUnit[0]d
MedicationRequest.dosageInstruction[3].dose[0].value[0]30
MedicationRequest.dosageInstruction[3].dose[0].unit[0]milligram
MedicationRequest.dosageInstruction[3].dose[0].system[0]http://unitsofmeasure.org
MedicationRequest.dosageInstruction[3].dose[0].code[0]mg
MedicationRequest.dosageInstruction[4].sequence[0]5
MedicationRequest.dosageInstruction[4].timing[0].repeat[0].bounds[0].value[0]1
MedicationRequest.dosageInstruction[4].timing[0].repeat[0].bounds[0].unit[0]day
MedicationRequest.dosageInstruction[4].timing[0].repeat[0].bounds[0].system[0]http://unitsofmeasure.org
MedicationRequest.dosageInstruction[4].timing[0].repeat[0].bounds[0].code[0]d
MedicationRequest.dosageInstruction[4].timing[0].repeat[0].frequency[0]1
MedicationRequest.dosageInstruction[4].timing[0].repeat[0].period[0]1
MedicationRequest.dosageInstruction[4].timing[0].repeat[0].periodUnit[0]d
MedicationRequest.dosageInstruction[4].dose[0].value[0]20
MedicationRequest.dosageInstruction[4].dose[0].unit[0]milligram
MedicationRequest.dosageInstruction[4].dose[0].system[0]http://unitsofmeasure.org
MedicationRequest.dosageInstruction[4].dose[0].code[0]mg
MedicationRequest.dosageInstruction[5].sequence[0]6
MedicationRequest.dosageInstruction[5].additionalInstruction[0].coding[0].system[0]http://snomed.info/sct
MedicationRequest.dosageInstruction[5].additionalInstruction[0].coding[0].code[0]422327006
MedicationRequest.dosageInstruction[5].additionalInstruction[0].coding[0].display[0]Then stop
MedicationRequest.dosageInstruction[5].timing[0].repeat[0].bounds[0].value[0]1
MedicationRequest.dosageInstruction[5].timing[0].repeat[0].bounds[0].unit[0]day
MedicationRequest.dosageInstruction[5].timing[0].repeat[0].bounds[0].system[0]http://unitsofmeasure.org
MedicationRequest.dosageInstruction[5].timing[0].repeat[0].bounds[0].code[0]d
MedicationRequest.dosageInstruction[5].timing[0].repeat[0].frequency[0]1
MedicationRequest.dosageInstruction[5].timing[0].repeat[0].period[0]1
MedicationRequest.dosageInstruction[5].timing[0].repeat[0].periodUnit[0]d
MedicationRequest.dosageInstruction[5].dose[0].value[0]10
MedicationRequest.dosageInstruction[5].dose[0].unit[0]milligram
MedicationRequest.dosageInstruction[5].dose[0].system[0]http://unitsofmeasure.org
MedicationRequest.dosageInstruction[5].dose[0].code[0]mg
MedicationRequest

Concurrent Instructions

Where the same integer value of sequence is defines it means a concurrent instruction.

<!--  Example use of the FHIR STU3 Dosage using multiple parallel sequences  -->
<!--  Furosemide 40mg tablets, take two in the morning and one at midday for one week  -->
<!--  Using a contained Medication resource  -->
<MedicationRequest xmlns="http://hl7.org/fhir">
    <id value="79159c4f-13c4-457a-8962-67fa22432c15" />
    <contained>
        <Medication>
            <id value="med1" />
            <code>
                <coding>
                    <system value="http://snomed.info/sct" />
                    <code value="317972000" />
                    <display value="Furosemide 40mg tablets" />
                </coding>
            </code>
        </Medication>
    </contained>
    <status value="active" />
    <intent value="order" />
    <medicationReference>
        <reference value="#med1" />
    </medicationReference>
    <subject>
        <identifier>
            <system value="https://fhir.nhs.uk/Id/nhs-number" />
            <value value="9999999999" />
        </identifier>
    </subject>
    <dosageInstruction>
        <sequence value="1" />
        <timing>
            <repeat>
                <boundsDuration>
                    <value value="1" />
                    <unit value="week" />
                    <system value="http://unitsofmeasure.org" />
                    <code value="wk" />
                </boundsDuration>
                <frequency value="1" />
                <period value="1" />
                <periodUnit value="d" />
                <when value="MORN" />
            </repeat>
        </timing>
        <doseQuantity>
            <value value="2" />
            <unit value="tablet" />
            <system value="http://snomed.info/sct" />
            <code value="428673006" />
        </doseQuantity>
    </dosageInstruction>
    <dosageInstruction>
        <sequence value="1" />
        <timing>
            <repeat>
                <boundsDuration>
                    <value value="1" />
                    <unit value="week" />
                    <system value="http://unitsofmeasure.org" />
                    <code value="wk" />
                </boundsDuration>
                <frequency value="1" />
                <period value="1" />
                <periodUnit value="d" />
                <timeOfDay value="12:00:00" />
            </repeat>
        </timing>
        <doseQuantity>
            <value value="1" />
            <unit value="tablet" />
            <system value="http://snomed.info/sct" />
            <code value="428673006" />
        </doseQuantity>
    </dosageInstruction>
</MedicationRequest>
{
    "resourceType": "MedicationRequest",
    "id": "79159c4f-13c4-457a-8962-67fa22432c15",
    "contained":  [
        {
            "resourceType": "Medication",
            "id": "med1",
            "code": {
                "coding":  [
                    {
                        "system": "http://snomed.info/sct",
                        "code": "317972000",
                        "display": "Furosemide 40mg tablets"
                    }
                ]
            }
        }
    ],
    "status": "active",
    "intent": "order",
    "medicationReference": {
        "reference": "#med1"
    },
    "subject": {
        "identifier": {
            "system": "https://fhir.nhs.uk/Id/nhs-number",
            "value": "9999999999"
        }
    },
    "dosageInstruction":  [
        {
            "sequence": 1,
            "timing": {
                "repeat": {
                    "boundsDuration": {
                        "value": 1,
                        "unit": "week",
                        "system": "http://unitsofmeasure.org",
                        "code": "wk"
                    },
                    "frequency": 1,
                    "period": 1,
                    "periodUnit": "d",
                    "when":  [
                        "MORN"
                    ]
                }
            },
            "doseQuantity": {
                "value": 2,
                "unit": "tablet",
                "system": "http://snomed.info/sct",
                "code": "428673006"
            }
        },
        {
            "sequence": 1,
            "timing": {
                "repeat": {
                    "boundsDuration": {
                        "value": 1,
                        "unit": "week",
                        "system": "http://unitsofmeasure.org",
                        "code": "wk"
                    },
                    "frequency": 1,
                    "period": 1,
                    "periodUnit": "d",
                    "timeOfDay":  [
                        "12:00:00"
                    ]
                }
            },
            "doseQuantity": {
                "value": 1,
                "unit": "tablet",
                "system": "http://snomed.info/sct",
                "code": "428673006"
            }
        }
    ]
}
MedicationRequest.id[0]79159c4f-13c4-457a-8962-67fa22432c15
MedicationRequest.contained[0].id[0]med1
MedicationRequest.contained[0].code[0].coding[0].system[0]http://snomed.info/sct
MedicationRequest.contained[0].code[0].coding[0].code[0]317972000
MedicationRequest.contained[0].code[0].coding[0].display[0]Furosemide 40mg tablets
MedicationRequest.status[0]active
MedicationRequest.intent[0]order
MedicationRequest.medication[0].reference[0]#med1
MedicationRequest.subject[0].identifier[0].system[0]https://fhir.nhs.uk/Id/nhs-number
MedicationRequest.subject[0].identifier[0].value[0]9999999999
MedicationRequest.dosageInstruction[0].sequence[0]1
MedicationRequest.dosageInstruction[0].timing[0].repeat[0].bounds[0].value[0]1
MedicationRequest.dosageInstruction[0].timing[0].repeat[0].bounds[0].unit[0]week
MedicationRequest.dosageInstruction[0].timing[0].repeat[0].bounds[0].system[0]http://unitsofmeasure.org
MedicationRequest.dosageInstruction[0].timing[0].repeat[0].bounds[0].code[0]wk
MedicationRequest.dosageInstruction[0].timing[0].repeat[0].frequency[0]1
MedicationRequest.dosageInstruction[0].timing[0].repeat[0].period[0]1
MedicationRequest.dosageInstruction[0].timing[0].repeat[0].periodUnit[0]d
MedicationRequest.dosageInstruction[0].timing[0].repeat[0].when[0]MORN
MedicationRequest.dosageInstruction[0].dose[0].value[0]2
MedicationRequest.dosageInstruction[0].dose[0].unit[0]tablet
MedicationRequest.dosageInstruction[0].dose[0].system[0]http://snomed.info/sct
MedicationRequest.dosageInstruction[0].dose[0].code[0]428673006
MedicationRequest.dosageInstruction[1].sequence[0]1
MedicationRequest.dosageInstruction[1].timing[0].repeat[0].bounds[0].value[0]1
MedicationRequest.dosageInstruction[1].timing[0].repeat[0].bounds[0].unit[0]week
MedicationRequest.dosageInstruction[1].timing[0].repeat[0].bounds[0].system[0]http://unitsofmeasure.org
MedicationRequest.dosageInstruction[1].timing[0].repeat[0].bounds[0].code[0]wk
MedicationRequest.dosageInstruction[1].timing[0].repeat[0].frequency[0]1
MedicationRequest.dosageInstruction[1].timing[0].repeat[0].period[0]1
MedicationRequest.dosageInstruction[1].timing[0].repeat[0].periodUnit[0]d
MedicationRequest.dosageInstruction[1].timing[0].repeat[0].timeOfDay[0]12:00:00
MedicationRequest.dosageInstruction[1].dose[0].value[0]1
MedicationRequest.dosageInstruction[1].dose[0].unit[0]tablet
MedicationRequest.dosageInstruction[1].dose[0].system[0]http://snomed.info/sct
MedicationRequest.dosageInstruction[1].dose[0].code[0]428673006
MedicationRequest

Element: text

Free text dosage instructions.

Recommendation: Use the text element to convey a dosage in a human readable format.

In the future, a nationally available Dose to Text Service (similiar to the one in our Demonstrator) will be available, and will be recommended to be used.

In the interim - if the text element is used:

Information to clinicians about administration or preparation of the medication (e.g. “infuse as rapidly as possibly via intraperitoneal port” or “immediately following drug x”) should be populated in dosage.text. It may also be be used (rarely) for cases where the instructions to patient are too complex to code.

The use of the Dosage.text element is discouraged to maximise dosage instructions defined using the coded structures. This position may be subject to change as a result of initial clinical and implementation experience or feedback from the FHIR community.

The Dosage.text element would also be populated in an implementation which does not support the coded structures.

In some cases, where the same instruction is relevant to both a clinician and patient, then the instructions may be repeated using several dosage structures - additionalInstruction or patientInstruction toward patient, text toward the clinician. This will ensure the receiving system makes the information available to the appropriate person.


Element: additionalInstruction

Additional dosage instructions that can be either SNOMED-CT coded terms or free-text instructions.

Where suitable SNOMED-CT coded terms exist, use them instead of free-text instructions. See the SNOMED-CT hierarchy descendants of 419492006 Additional dosage instructions (qualifier value). These terms are also available from the example FHIR valueset binding.

Important: Where no code exists, additionalInstructions can be conveyed as free-text; however, if free-text is used rather than a SNOMED-CT coded term, the `MedicationRequest` cannot be computable, and requires human intervention in the case of conditional or contradictory instructions.

Coded instruction

<additionalInstruction>
    <coding> 
        <system value="http://snomed.info/sct"/> 
        <code value="419529008"/> 
        <display value="Dissolved under the tongue "/> 
    </coding>
</additionalInstruction>

Multiple coded instructions

<additionalInstruction>
    <coding> 
        <system value="http://snomed.info/sct"/> 
        <code value="417995008"/> 
        <display value="Dissolve or mix with water before taking"/> 
    </coding>
</additionalInstruction>
<additionalInstruction>
    <coding> 
        <system value="http://snomed.info/sct"/> 
        <code value="417980006"/> 
        <display value="Contains aspirin"/> 
    </coding>
</additionalInstruction>

Free-text instruction (try to avoid using free-text where possible)

<additionalInstruction>
    <text value="with dialysis"/>
</additionalInstruction>


additionalInstruction / when overlap

Note: The value-sets for Timing.when and Dosage.additionalInstruction do contain some overlapping values.

For example, they can both describe “with or after food”.

In such cases, use Timing.when instead of a coded Dosage.additionalInstruction.


continue / stop instructions

There may be the need for a clinician to give explicit instructions to either stop or continue taking medication. This could be applicable for discharge medication where one medicine may be for short term pain relief and should be stopped after the prescribed quantity has been taken, while another medicine must be continued until further notice.

The patient’s GP would be informed of this as part of the discharge letter but having these instructions explicitly coded provides a more robust solution.

Three SNOMED-CT codes exist that can be used for this purpose.

  • “Then stop” (SNOMED concept identifier = 422327006)
  • “Then discontinue” (SNOMED concept identifier = 421484000)
  • “Do not stop taking this medicine except on your doctor’s advice” (SNOMED concept identifier = 419444006)
Note: It is recognised that such coded terms are akin to timing instructions so may be more logically containing within the various Dosage.timing structures. These do not currently support coded concept terms. Implementation experience will provide evidence to support any future change to the underlying FHIR specification.

as directed

The use of a dosage instruction akin to “as directed” should be avoided wherever possible; however, if required then this can be SNOMED coded using 421769005 Follow directions (qualifier value) or conveyed as text as a patient instruction.


Element: patientInstruction

Free-text instructions for the patient. Patient instructions can only be defined as one text string per dosage instruction.

Note: This field is not intended to provide instructions for a medication dispensing label.
<patientInstruction value="Some relevant instructions for the patient"/>


Timing Elements: frequency and period

A large proportion of cases, especially those where the medication are described using a VMP or AMP concept, can have a dosage instruction defined with a combination of frequency and period elements within the Timing structure.

Simple dosage timing instructions can be described using frequency and period.

The combination of frequency and period allows for the two commonly used expressions of:

  • x times a period
  • every x period

The unit of the period must be one of the UCUM units:

UCUM Unit Definition
s second
min minute
h hour
d day
wk week
mo month
a year

A frequencyMax and/or periodMax can also be used to define ranges. The FHIR specification states if there's a periodMax, there must be a period.

Every 8 hours

<timing>
    <repeat>
        <frequency value="1"/>
        <period value="8"/>
        <periodUnit value="h"/>
    </repeat>
</timing>

4 times a day

<timing>
    <repeat>
        <frequency value="4"/>
        <period value="1"/>
        <periodUnit value="d"/>
    </repeat>
</timing>

2 to 4 times a day

<timing>
    <repeat>
        <frequency value="2"/>
        <frequencyMax value="4"/>
        <period value="1"/>
        <periodUnit value="d"/>
    </repeat>
</timing>

every 3 to 4 weeks

<timing>
    <repeat>
        <frequency value="1"/>
        <period value="3"/>
        <periodMax value="4"/>
        <periodUnit value="wk"/>
    </repeat>
</timing>

3 to 4 times every 1 to 2 weeks

<timing>
    <repeat>
        <frequency value="3"/>
        <frequencyMax value="4"/>
        <period value="1"/>
        <periodMax value="2"/>
        <periodUnit value="wk"/>
    </repeat>
</timing>

daily

<timing>
    <repeat>
        <frequencyvalue="1"/>
        <periodvalue="1"/>
        <periodUnitvalue="d"/>
    </repeat>
</timing>

twice a week

<timing>
    <repeat>
        <frequencyvalue="2"/>
        <periodvalue="1"/>
        <periodUnitvalue="wk"/>
    </repeat>
</timing>

Examples of potentially confusing timing instructions

When converting the information into a FHIR message to a human readable version the frequency could be misconstrued.

For example:

take twice a week on a Monday and Thursday

Is the patient being instructed to take the medication twice per day on a Monday and Thursday (4 individual doses), or twice per week on a Monday and Thursday (2 individual doses)?

Bad ambiguious example: on Monday and Thursday - take twice
<timing>
    <repeat>
        <count value="2" />
        <dayOfWeek value="mon" />
        <dayOfWeek value="thu" />
    </repeat>
</timing>

Using the dose-to-text guidance within this documentation the above would be displayed as:

on Monday and Thursday - take twice

Better specific example: twice a week - on Monday and Thursday
<timing>
    <repeat>
        <frequency value="2"/>
        <period value="1" />
        <periodUnit value="wk"/>
        <dayOfWeek value="mon" />
        <dayOfWeek value="thu" />
    </repeat>
</timing>

Using the dose-to-text guidance within this documentation the above would be displayed as:

twice a week - on Monday and Thursday

Alternative better specific example: on Monday and Thursday
<timing>
    <repeat>
        <dayOfWeek value="mon" />
        <dayOfWeek value="thu" />
    </repeat>
</timing>

Using the dose-to-text guidance within this documentation the above would be displayed as:

on Monday and Thursday


Real-World Example

Co-trimoxazole 80mg/400mg tablets (Actavis UK Ltd) - 1 tablet - twice a day - on Monday, Wednesday and Friday.
This prescription is used for immunocompromised patients to provide prophylaxis against a particular strain of pneumonia.


Timing Elements: when, offset, dayOfWeek, timeOfDay, event and code

A dosage instruction can be tied to the specific days, dates and times, plus life events related to eating or sleeping.

when and offset

The when element ties to the regular life events of sleeping and eating, for example:

  • C = event occurs at a meal
  • WAKE = event occurs [offset] after waking

An offset allows the event to be tied x minutes before or after.

The offset is an unsigned integer value so different codes within the when value-set are used to define before or after.

Event occurs at breakfast

<timing>
    <repeat>
        <when value="CM"/>
    </repeat>
</timing>

Event occurs at 1 hour before breakfast

<timing>
    <repeat>
        <when value="ACM"/>
        <offset value="60" />
    </repeat>
</timing>

Event occurs at 1 hour after breakfast

<timing>
    <repeat>
        <when value="PCM"/>
        <offset value="60" />
    </repeat>
</timing>


dayOfWeek and timeOfDay

A dosage instruction can specify days of a week and/or specific times within a day for administration.

on Monday and Thursday at 09:00 and 15:00

<timing>
    <repeat>
        <dayOfWeek value="mon" />
        <dayOfWeek value="thu" />
        <timeOfDay value="09:00:00" />
        <timeOfDay value="15:00:00" />
    </repeat>
</timing>

Note the FHIR standard states that the elements frequency and period cannot be used as well as dayOfWeek, and the elements when, frequency and period cannot be used as well as timeOfDay.


event

A dosage instruction can specify specific dates and times for administration.

on 1st Nov 2019

<timing>
    <event value="2019-11-01" />
</timing>

on 1st Nov 2019 at 10:30 and again on 1st Dec 2019 at 22:30

<timing>
    <event value="2019-11-01T10:30" />
    <event value="2019-12-01T22:30" />
</timing>


code

Allows a code, often a Latin abbreviation, for a timing schedule to be specified, for example: BID = twice a day

Note:
It is recommended that such codes are not used when the rest of the Dosage structure is supported by the system.
Use the structures like frequency and period instead, so that a timing schedule can be computable.

Timing Elements: duration, bounds and count

Adding constraints, bounds or limits to a dosage instruction.

duration and durationMax

A dosage instruction to be administered over a period of time is defined by a duration and / or a durationMax. These relate to the duration of a single administration so would be applicable for an infusion or potentially a transdermal patch.

The FHIR specification states that if there is a durationMax, there must be a duration.

The use of duration does not apply to medicines that are swallowed or otherwise instantly administered.

over 8 hours

<timing>
	<repeat>
		<duration value="8"/>
		<durationUnit value="h" />
	</repeat>
</timing>

over 10 to 15 minutes

<timing>
	<repeat>
		<duration value="10"/>
		<durationMax value="15"/>
		<durationUnit value="min"/>
	</repeat>
</timing>

boundsDuration

An instruction to limit a single course of medication uses the bounds structure. This can be implemented in three ways;

  • boundsDuration - a period of time, for example: for 7 days
  • boundsRange - a low / high quantity, for example: for 2 to 3 weeks
  • boundsPeriod - a date / time start to end period, for example: from 22/02/2021 to 04/03/2021

for 7 days

<timing>
	<repeat>
		<boundsDuration>
			<value value="7"/>
			<unit value="day"/> 
			<system value="http://unitsofmeasure.org"/>
			<code value="d"/>
		</boundsDuration>

	</repeat>
</timing>

for 2 to 3 weeks

<timing> 
	<repeat>
		<boundsRange>
			<low>
				<value value="2"/>
				<unit value="week"/> 
				<system value="http://unitsofmeasure.org"/>
				<code value="wk"/>
			</low>
			<high>
				<value value="3"/>
				<unit value="week"/>
				<system value="http://unitsofmeasure.org"/>
				<code value="wk"/>
			</high>
		</boundsRange>
	</repeat>
</timing>

from 22/02/2021 to 04/03/2021

<timing>  
	<repeat>
        <boundsPeriod>
            <start value="2021-02-22"/>
            <end value="2021-03-04"/>
        </boundsPeriod>
	</repeat>	
</timing>

count and countMax

Note: Use count and countMax with caution as there are other elements within the Dosage structure that will often be more appropriate.

An instruction for a set number of doses, including the use case of “once”, plus also any maximum number of doses, is defined by count and countMax.

Whilst the count is within repeat it does not mean repeat a number of additional times.

  • A count of 1 means adminster a dose once.
  • A count of 3 means administer 3 doses.

The FHIR specification states if there is a countMax, there must be a count.

take once

<timing>
	<repeat>
		<count value="1"/>
	</repeat>
</timing>

take twice

<timing>
	<repeat>
		<count value="2"/>
	</repeat>
</timing>

take three times

Clincal Example: Teicoplanin - 10 mg/kg - every 12 hours - for 3 doses, then 6 to 10 mg/kg - daily

<timing>
	<repeat>
		<count value="3"/>
	</repeat>
</timing>

take three to five times

<timing>
	<repeat>
		<count value="3"/>
		<countMax value="5"/>
	</repeat>
</timing>


Alternatives: Examples where alternatives to using count within a Dosage instruction would be more appropriate.

take once

Instead of using <count value="1"/> use <frequency value="1"/>.

an oral solid - 2 tablets - twice a day - take 14 times

Using a <count value="14"/> is confusing. Is this "take 2 tablets twice a day for 14 days" or "take 2 tablets twice a day and take 14 tablets in total, hence for 7 days"? It would be better to express as a duration.

<duration value="7"/>
<durationUnit value="d" />


Element: asNeeded

Dosing 'asNeeded' and 'asNeededCodeableConcept' instructions.

Dosage.asNeeded[x]

The asNeeded structure can be used to define a simple “as required” (or “pro re nata” expressed as “PRN” for those who still prefer to use Latin abbreviations) instructions.

In this case use the asNeededBoolean option. The absence of asNeededBoolean is equivalent to where asNeededBoolean has a value of false.

The asNeededCodeableConcept option is used to bound the dosage instruction to a coded term. Any number of coded terms can be used from the SNOMED-CT hierarchy as a descendant of 404684003 Clinical Finding (finding). An extensive medication-as-needed-reason value-set is defined within FHIR which is a subset of the SNOMED-CT clinical findings hierarchy.

Example #1: Dosage.asNeeded

<!--  Zopiclone 3.75mg tablets, 1 tablet, at BEDTIME, PRN, oral  -->
<MedicationRequest xmlns="http://hl7.org/fhir">
    <id value="c804eca2-8b32-44d7-b654-b88bb9b1edd2" />
    <contained>
        <Medication>
            <id value="med1" />
            <code>
                <coding>
                    <system value="http://snomed.info/sct" />
                    <code value="321177003" />
                    <display value="Zopiclone 3.75mg tablets" />
                </coding>
            </code>
        </Medication>
    </contained>
    <status value="active" />
    <intent value="order" />
    <medicationReference>
        <reference value="#med1" />
    </medicationReference>
    <subject>
        <identifier>
            <system value="https://fhir.nhs.uk/Id/nhs-number" />
            <value value="9999999999" />
        </identifier>
    </subject>
    <dosageInstruction>
        <timing>
            <repeat>
                <frequency value="1" />
                <period value="1" />
                <periodUnit value="d" />
                <when value="HS" />
            </repeat>
        </timing>
        <asNeededBoolean value="true" />
        <route>
            <coding>
                <system value="http://snomed.info/sct" />
                <code value="26643006" />
                <display value="oral" />
            </coding>
        </route>
        <doseQuantity>
            <value value="1" />
            <unit value="tablet" />
            <system value="http://snomed.info/sct" />
            <code value="428673006" />
        </doseQuantity>
    </dosageInstruction>
</MedicationRequest>
{
    "resourceType": "MedicationRequest",
    "id": "c804eca2-8b32-44d7-b654-b88bb9b1edd2",
    "contained":  [
        {
            "resourceType": "Medication",
            "id": "med1",
            "code": {
                "coding":  [
                    {
                        "system": "http://snomed.info/sct",
                        "code": "321177003",
                        "display": "Zopiclone 3.75mg tablets"
                    }
                ]
            }
        }
    ],
    "status": "active",
    "intent": "order",
    "medicationReference": {
        "reference": "#med1"
    },
    "subject": {
        "identifier": {
            "system": "https://fhir.nhs.uk/Id/nhs-number",
            "value": "9999999999"
        }
    },
    "dosageInstruction":  [
        {
            "timing": {
                "repeat": {
                    "frequency": 1,
                    "period": 1,
                    "periodUnit": "d",
                    "when":  [
                        "HS"
                    ]
                }
            },
            "asNeededBoolean": true,
            "route": {
                "coding":  [
                    {
                        "system": "http://snomed.info/sct",
                        "code": "26643006",
                        "display": "oral"
                    }
                ]
            },
            "doseQuantity": {
                "value": 1,
                "unit": "tablet",
                "system": "http://snomed.info/sct",
                "code": "428673006"
            }
        }
    ]
}
MedicationRequest.id[0]c804eca2-8b32-44d7-b654-b88bb9b1edd2
MedicationRequest.contained[0].id[0]med1
MedicationRequest.contained[0].code[0].coding[0].system[0]http://snomed.info/sct
MedicationRequest.contained[0].code[0].coding[0].code[0]321177003
MedicationRequest.contained[0].code[0].coding[0].display[0]Zopiclone 3.75mg tablets
MedicationRequest.status[0]active
MedicationRequest.intent[0]order
MedicationRequest.medication[0].reference[0]#med1
MedicationRequest.subject[0].identifier[0].system[0]https://fhir.nhs.uk/Id/nhs-number
MedicationRequest.subject[0].identifier[0].value[0]9999999999
MedicationRequest.dosageInstruction[0].timing[0].repeat[0].frequency[0]1
MedicationRequest.dosageInstruction[0].timing[0].repeat[0].period[0]1
MedicationRequest.dosageInstruction[0].timing[0].repeat[0].periodUnit[0]d
MedicationRequest.dosageInstruction[0].timing[0].repeat[0].when[0]HS
MedicationRequest.dosageInstruction[0].asNeeded[0]True
MedicationRequest.dosageInstruction[0].route[0].coding[0].system[0]http://snomed.info/sct
MedicationRequest.dosageInstruction[0].route[0].coding[0].code[0]26643006
MedicationRequest.dosageInstruction[0].route[0].coding[0].display[0]oral
MedicationRequest.dosageInstruction[0].dose[0].value[0]1
MedicationRequest.dosageInstruction[0].dose[0].unit[0]tablet
MedicationRequest.dosageInstruction[0].dose[0].system[0]http://snomed.info/sct
MedicationRequest.dosageInstruction[0].dose[0].code[0]428673006
MedicationRequest

Zopiclone 3.75mg tablets, 1 tablet, at BEDTIME, PRN, oral


Example #2: Dosage.asNeededCodeableConcept

<!--  Metoclopramide, orally 10mg to be taken when required for nausea up to three times daily  -->
<MedicationRequest xmlns="http://hl7.org/fhir">
    <id value="e02e462c-12db-4162-95f6-0436a60c5bc4" />
    <contained>
        <Medication>
            <id value="med1" />
            <code>
                <coding>
                    <system value="http://snomed.info/sct" />
                    <code value="56549003" />
                    <display value="Metoclopramide" />
                </coding>
            </code>
        </Medication>
    </contained>
    <status value="active" />
    <intent value="order" />
    <medicationReference>
        <reference value="#med1" />
    </medicationReference>
    <subject>
        <identifier>
            <system value="https://fhir.nhs.uk/Id/nhs-number" />
            <value value="9999999999" />
        </identifier>
    </subject>
    <dosageInstruction>
        <timing>
            <repeat>
                <frequencyMax value="3" />
                <period value="1" />
                <periodUnit value="d" />
            </repeat>
        </timing>
        <asNeededCodeableConcept>
            <coding>
                <system value="http://snomed.info/sct" />
                <code value="422587007" />
                <display value="nausea" />
            </coding>
        </asNeededCodeableConcept>
        <route>
            <coding>
                <system value="http://snomed.info/sct" />
                <code value="26643006" />
                <display value="oral" />
            </coding>
        </route>
        <doseQuantity>
            <value value="10" />
            <unit value="milligram" />
            <system value="http://unitsofmeasure.org" />
            <code value="mg" />
        </doseQuantity>
    </dosageInstruction>
</MedicationRequest>
{
    "resourceType": "MedicationRequest",
    "id": "e02e462c-12db-4162-95f6-0436a60c5bc4",
    "contained":  [
        {
            "resourceType": "Medication",
            "id": "med1",
            "code": {
                "coding":  [
                    {
                        "system": "http://snomed.info/sct",
                        "code": "56549003",
                        "display": "Metoclopramide"
                    }
                ]
            }
        }
    ],
    "status": "active",
    "intent": "order",
    "medicationReference": {
        "reference": "#med1"
    },
    "subject": {
        "identifier": {
            "system": "https://fhir.nhs.uk/Id/nhs-number",
            "value": "9999999999"
        }
    },
    "dosageInstruction":  [
        {
            "timing": {
                "repeat": {
                    "frequencyMax": 3,
                    "period": 1,
                    "periodUnit": "d"
                }
            },
            "asNeededCodeableConcept": {
                "coding":  [
                    {
                        "system": "http://snomed.info/sct",
                        "code": "422587007",
                        "display": "nausea"
                    }
                ]
            },
            "route": {
                "coding":  [
                    {
                        "system": "http://snomed.info/sct",
                        "code": "26643006",
                        "display": "oral"
                    }
                ]
            },
            "doseQuantity": {
                "value": 10,
                "unit": "milligram",
                "system": "http://unitsofmeasure.org",
                "code": "mg"
            }
        }
    ]
}
MedicationRequest.id[0]e02e462c-12db-4162-95f6-0436a60c5bc4
MedicationRequest.contained[0].id[0]med1
MedicationRequest.contained[0].code[0].coding[0].system[0]http://snomed.info/sct
MedicationRequest.contained[0].code[0].coding[0].code[0]56549003
MedicationRequest.contained[0].code[0].coding[0].display[0]Metoclopramide
MedicationRequest.status[0]active
MedicationRequest.intent[0]order
MedicationRequest.medication[0].reference[0]#med1
MedicationRequest.subject[0].identifier[0].system[0]https://fhir.nhs.uk/Id/nhs-number
MedicationRequest.subject[0].identifier[0].value[0]9999999999
MedicationRequest.dosageInstruction[0].timing[0].repeat[0].frequencyMax[0]3
MedicationRequest.dosageInstruction[0].timing[0].repeat[0].period[0]1
MedicationRequest.dosageInstruction[0].timing[0].repeat[0].periodUnit[0]d
MedicationRequest.dosageInstruction[0].asNeeded[0].coding[0].system[0]http://snomed.info/sct
MedicationRequest.dosageInstruction[0].asNeeded[0].coding[0].code[0]422587007
MedicationRequest.dosageInstruction[0].asNeeded[0].coding[0].display[0]nausea
MedicationRequest.dosageInstruction[0].route[0].coding[0].system[0]http://snomed.info/sct
MedicationRequest.dosageInstruction[0].route[0].coding[0].code[0]26643006
MedicationRequest.dosageInstruction[0].route[0].coding[0].display[0]oral
MedicationRequest.dosageInstruction[0].dose[0].value[0]10
MedicationRequest.dosageInstruction[0].dose[0].unit[0]milligram
MedicationRequest.dosageInstruction[0].dose[0].system[0]http://unitsofmeasure.org
MedicationRequest.dosageInstruction[0].dose[0].code[0]mg
MedicationRequest
Metoclopramide, orally 10mg to be taken when required for nausea up to three times daily

Element: site

Any site can be used from the SNOMED-CT hierarchy as a descendant of the concept 123037004 Body structure (body structure).

<!-- Site -->
<site>
    <coding>
        <system value="http://snomed.info/sct"/>
        <code value="59380008"/>
        <display value="Anterior abdominal wall structure"/>
    </coding>
</site>


Element: route

Any route can be used from the SNOMED-CT hierarchy as a descendant of the concept 284009009 Route of administration value (qualifier value).

<!-- Route -->
<route>
    <coding>
        <system value="http://snomed.info/sct"/>
        <code value="78421000"/>
        <display value="intramuscular route"/>
    </coding>
</route>


Element: method

The 999000041000001103 ePrescribing method simple reference set (foundation metadata concept) reference set collates the commonly used terms for method for use in the United Kingdom.

Whilst a FHIR value-set for method does exist, together with two separate hierarchies within SNOMED-CT (Dose form administration method and Dosing instruction fragment), it is recommended to use the ePrescribing reference set in the first instance.

<!-- Method -->
<method>
    <coding>
        <system value="http://snomed.info/sct"/>
        <code value="129326001"/>
        <display value="Injection"/>
    </coding>
</method>


Use of synonyms

In most instances it is anticipated that the UK Preferred term should be the term applied to SNOMED CT concepts However for some cases, for example the anatomically correct SNOMED-CT term may not be easily understood by the patient or clinician, the use of a synonym may be preferred.

Guidance for using terms that are not preferred terms is available within the published document Guidance on the use of CodeableConcept.


Element: dose

A dosage can be described via one of the following methods. In both instances when considering Units of Measure note that UCUM is preferred.

Dosage.doseQuantity

The amount of medication per dose, as a simple coded quantity.

<!-- Examples of the FHIR STU3 Dosage.timing.doseQuantity -->

<!-- Example A: 1 capsule -->
<doseQuantity>
    <value value="1"/>
    <unit value="capsule"/>
    <system value="http://snomed.info/sct"/>
    <code value="732937005"/>
</doseQuantity>

<!-- Example B: 30 milligrams -->
<doseQuantity>
    <value value="30"/>
    <unit value="milligram"/>
    <system value="http://unitsofmeasure.org"/>
    <code value="mg"/>
</doseQuantity>

Dosage.doseRange

A dose that may be in a given low / high range.

<!-- Example use of the FHIR STU3 Dosage.timing.doseRange -->
<!-- for a dose between 7.5 to 30 milligram -->
<doseRange>
    <low>
        <value value="7.5"/>
        <unit value="milligram"/>
        <code value="mg"/>
        <system value="http://unitsofmeasure.org"/>
    </low>
    <high>
        <value value="30"/>
        <unit value="milligram"/>
        <code value="mg"/>
        <system value="http://unitsofmeasure.org"/>
    </high>
</doseRange>



Element: maxDosePer

Dosing maxDosePerPeriod, maxDosePerAdministration and 'maxDosePerLifetime' instructions

Dosage.maxDosePerPeriod

Used to define a maxiumum dose over a given time period.

An example would be a Sumatriptan 6mg injection which can be repeated after an hour but not again over a 24 hour period. The maxDosePerPeriod is defined as 12mg/24hours.

The maxDosePerPeriod is defined for each dosage instruction. For a multi-sequence instruction it would therefore be possible to define different maximum dosing periods within different sequences of the complete instruction.

A real-world example of where this would be required has not yet been identified.

Maximum dose per period of 12mg/24 hour

<maxDosePerPeriod>
    <numerator>
        <value value="12"/>
        <unit value="milligram"/>
        <system value="http://unitsofmeasure.org"/>
        <code value="mg"/>
    </numerator>
    <denominator>
        <value value="24"/>
        <unit value="hour"/>
        <system value="http://unitsofmeasure.org"/>
        <code value="h"/>
    </denominator>
</maxDosePerPeriod>


Dosage.maxDosePerAdministration

Used to define a maximum dose for a single administration.

An example would be Anagrelide for which a single dose should not exceed 2.5 mg. The maxDosePerAdministration is defined as 2.5mg.

In many scenarios it is expected that the dosage.doseRange would be used instead of maxDosePerAdministration.

The maxDosePerAdministration is defined for each dosage instruction. For a multi-sequence instruction it would therefore be possible to define different maximum dose administrations within different sequences of the complete instruction.

A real-world example of where this would be required has not yet been identified.

Maximum dose per administration of 2.5mg

<maxDosePerAdministration>
    <value value="2.5"/>
    <unit value="milligram"/>
    <system value="http://unitsofmeasure.org"/>
    <code value="mg"/>
</maxDosePerAdministration>


Dosage.maxDosePerLifetime

Used to define the maximum cumulative dose over the lifetime of a patient.

An example would be Daunorubicin which may have a maximum cumulative dose of 600mg/m2 (based on the size of the patient). The maxDosePerLifetime is defined as 600 mg/m2.

The maxDosePerLifetime can be defined for each dosage instruction; which, for a multi-sequence instruction is illogical, as any maxDosePerLifetime is equally applicable to all dosage sequence that relate to the single medication coded concept.

Note: If a maxDosePerLifetime statement is required with a multi-sequence instruction, it is recommended to define it within the last / final sequence to ensure that the information is presented at the end of a the complete instruction, rather than th middle which could be overlooked.

Maximum dose over lifetime of the patient of 600 mg/m2

<maxDosePerLifetime>
    <value value="600"/>
    <unit value="milligram per square metre"/>
    <system value="http://unitsofmeasure.org"/>
    <code value="mg/m2"/>
</maxDosePerLifetime>


Element: rate

A rate-based quantity, such as 30 ml per hour, can be expressed as a rateRatio with coded numerator and denominator values.

Where the unit of measure for the ratio is defined within UCUM (see Common UCUM Units), for example, “milliliter per hour”, it can also be expressed using the simpler rateQuantity structure.


Dosage.rateRatio

Where the rate is expressed as coded numerator and denominator values.

at a rate of 30ml/hour using rateRatio

<rateRatio>
	<numerator>
		<value value="30"/>
		<unit value="millilitre"/>
		<system value="http://unitsofmeasure.org"/>
		<code value="mL"/>
	</numerator>
	<denominator>
		<value value="1"/>
		<unit value="hour"/>
		<system value="http://unitsofmeasure.org"/>
		<code value="h"/>
	</denominator>
</rateRatio>


Dosage.rateQuantity

Where the unit of measure applicable to a rate is defined within UCUM which is mathematically equivalent to defining the rate using the more complex rateRatio structure.

at a rate of 30ml/hour using rateQuantity

<rateQuantity>
	<value value="30"/>
	<unit value="milliliters per hour"/>
	<system value="http://unitsofmeasure.org"/>
	<code value="mL/h"/>
</rateQuantity>

at a rate of 1mcg/kg/hour using rateQuantity

<rateQuantity>
	<value value="1"/>
	<unit value="microgram per kilogram per hour"/>
	<system value="http://unitsofmeasure.org"/>
	<code value="ug/kg/h"/>
</rateQuantity>


Dosage.rateRange

Where the unit of measure applicable to a rate range is defined within UCUM the rateRange structure can be used.

give at 1-2 litres per minute using rateRange

<rateRange>
	<low>
		<value value="1"/>
		<unit value="liter per minute"/>
		<system value="http://unitsofmeasure.org"/>
		<code value="L/min"/>
	</low>
	<high>
		<value value="2"/>
		<unit value="liter per minute"/>
		<system value="http://unitsofmeasure.org"/>
		<code value="L/min"/>
	</high>
</rateRange>

back to top