MedicationRequest — detail: e-prescription
FHIR modelling of the e-prescription (eRx). Core of US eRx workflow (NCPDP SCRIPT mapping) and EU national health records. Includes intent/status, structured dosage, dispensing, and prescriber traceability.
Intent & status workflow
intent distinguishes:
proposal— non-binding suggestion (e.g. CDSS).plan— theoretical protocol (before effective prescription).order— effective prescription (with legal authority).original-order— first prescription of a series.reflex-order— automatically triggered by a clinical rule.filler-order— pharmacy creating the internal order.instance-order— instance of a cyclic order.option— choice among multiple.
status: active | on-hold | cancelled | completed | entered-in-error | stopped | draft | unknown.
Key fields
| Field | Cardinality | Role |
|---|---|---|
status | 1..1 | Current state. |
intent | 1..1 | See above. |
category | 0..* | inpatient / outpatient / community / discharge. |
medication[x] | 1..1 | CodeableConcept (ATC, RxNorm, CIS) or Reference(Medication). |
subject | 1..1 | Patient / Group. |
requester | 0..1 | Practitioner / PractitionerRole / Organization / Patient. |
dosageInstruction | 0..* | Structured dosage (see dedicated section). |
dispenseRequest | 0..1 | Quantity, refills, duration. |
substitution | 0..1 | Generic substitution allowed or not. |
Structured dosageInstruction
R5 unifies dosage via the Dosage datatype. Components:
timing.repeat— frequency, period, duration.asNeeded[x]— boolean or CodeableConcept (PRN indication).route— SNOMED CT administration route.method— method (Inject, Inhale, Apply).doseAndRate.doseQuantity— dose per administration.maxDosePerPeriod— Ratio max dose/period (daily cap).maxDosePerAdministration— max dose per single dose.
Example: Acetaminophen 500 mg PRN for pain
{
"resourceType": "MedicationRequest",
"id": "rx-acetaminophen-2026-887",
"status": "active",
"intent": "order",
"category": [{
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/medicationrequest-admin-location",
"code": "outpatient"
}]
}],
"priority": "routine",
"medicationCodeableConcept": {
"coding": [{
"system": "http://www.whocc.no/atc",
"code": "N02BE01",
"display": "Paracetamol"
}, {
"system": "http://www.nlm.nih.gov/research/umls/rxnorm",
"code": "313988",
"display": "Acetaminophen 500 MG Oral Tablet"
}]
},
"subject": { "reference": "Patient/marie-durand-887" },
"encounter": { "reference": "Encounter/cons-2026-05-19-887" },
"authoredOn": "2026-05-19T15:30:00+02:00",
"requester": {
"reference": "Practitioner/dr-bernard-claude",
"display": "Dr Claude BERNARD - NPI 1234567890"
},
"courseOfTherapyType": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/medicationrequest-course-of-therapy",
"code": "acute"
}]
},
"dosageInstruction": [{
"sequence": 1,
"text": "1 tablet every 6 hours as needed for pain, max 6 per day",
"timing": {
"repeat": {
"boundsDuration": { "value": 5, "unit": "d", "system": "http://unitsofmeasure.org" },
"frequency": 4,
"period": 1,
"periodUnit": "d"
}
},
"asNeededCodeableConcept": {
"coding": [{ "system": "http://snomed.info/sct", "code": "22253000", "display": "Pain" }]
},
"route": {
"coding": [{ "system": "http://snomed.info/sct", "code": "26643006", "display": "Oral route" }]
},
"doseAndRate": [{
"doseQuantity": { "value": 500, "unit": "mg", "system": "http://unitsofmeasure.org" }
}],
"maxDosePerPeriod": [{
"numerator": { "value": 3000, "unit": "mg", "system": "http://unitsofmeasure.org" },
"denominator": { "value": 1, "unit": "d", "system": "http://unitsofmeasure.org" }
}]
}],
"dispenseRequest": {
"quantity": { "value": 20, "unit": "tablets" },
"numberOfRepeatsAllowed": 0,
"expectedSupplyDuration": { "value": 5, "unit": "d", "system": "http://unitsofmeasure.org" }
},
"substitution": {
"allowedBoolean": true,
"reason": {
"coding": [{ "system": "http://terminology.hl7.org/CodeSystem/v3-ActReason", "code": "FP" }]
}
}
} Common pitfalls
- Medication code without ATC + local identifier — for France, CIS (ANSM) is mandatory for the DMP. ATC is used for population monitoring but not dispensing.
- intent = proposal treated as order — frequent CDSS confusion: a "proposal" is pushed and the HIS dispenses it. Filter upstream.
- maxDosePerPeriod missing — acetaminophen dose must have a daily cap (3 g for adults, 60 mg/kg for children). Without cap, clinical alerts are ineffective.
- substitution.allowedBoolean=false without reason — "non-substitutable" mention must have a valid v3-ActReason.