Electronic prescription in FHIR
Electronic prescription is a priority category of the European Health Data Space (Article 14(1) point (b) of Regulation (EU) 2025/327). It applies from March 26, 2029. HL7 Europe covers it with mpd 1.0.0.
- Regulation
- Regulation (EU) 2025/327, Article 14(1)(b), Annex I
- Applies from
- March 26, 2029
- HL7 Europe guides
- hl7.fhir.eu.mpd 1.0.0, published
- Xt-EHR logical models
- EHDSMedicationPrescription
- Validator
- Open the EHDS profile validator
What the Regulation says
Annex I of the Regulation describes the main characteristics of this category. The text is the English original.
Electronic prescriptionsElectronic health data constituting a prescription for a medicinal product as defined in Article 3, point (k), of Directive 2011/24/EU.
FHIR profiles 3
Profiles defined by the guides above. The rules column counts the elements where the profile goes beyond base FHIR (required, forbidden or limited), which the validator checks; of the slices, only the required ones that a fixed value or the resource type identifies are checked.
| Profile | Resource | HL7 Europe guide | Rules checked | Slices checked / defined |
|---|---|---|---|---|
Medication: MPD http://hl7.eu/fhir/mpd/StructureDefinition/Medication-eu-mpd | Medication | mpd | 0 | 0 / 12 |
MedicationDispense: MPD http://hl7.eu/fhir/mpd/StructureDefinition/MedicationDispense-eu-mpd | MedicationDispense | mpd | 2 | 0 / 3 |
MedicationRequest: MPD http://hl7.eu/fhir/mpd/StructureDefinition/MedicationRequest-eu-mpd | MedicationRequest | mpd | 2 | 0 / 7 |
Terminology bindings 0
Value sets that the profiles of this category bind elements to with a required or extensible binding. A required binding only allows codes of the value set; an extensible one expects them unless none fits. Value sets that the HL7 Europe packages define are listed with their codes in the value set reference.
The profiles of this category state no required or extensible binding of their own. The profiles also state 0 preferred and 4 example bindings.
Extensions 1
HL7 Europe extensions that the profiles of this category carry, with the element that holds each one.
| Extension | Context | Value | Used in |
|---|---|---|---|
Medication: Package type http://hl7.eu/fhir/StructureDefinition/medication-package-type | Medication | CodeableConcept | MedicationEuMpd extension:packageType 0..1 |
Logical model EHDSMedicationPrescription 30
Elements of the Xt-EHR logical model with their cardinality and obligations. Obligations tell producers and consumers of the data what a system SHALL or SHOULD do with each element.
Obligations by actor
How many elements of EHDSMedicationPrescription carry each obligation for each actor.
| Obligation | Actor | Elements |
|---|---|---|
SHALL:able-to-populate | producer | 11 |
SHALL:process | consumer | 11 |
SHOULD:able-to-populate | producer | 5 |
SHOULD:display | consumer | 2 |
SHOULD:process | consumer | 3 |
Elements 30
| Element | Card. | Obligations | Description |
|---|---|---|---|
header | 1..1 | Prescription header | |
subject | 1..1 | SHALL:able-to-populate producerSHALL:process consumerSystem SHALL process the patient information for identification purposes. | The person for whom the medication is prescribed/ordered. [Used for searching] |
identifier | 1..* | SHALL:able-to-populate producerFor a single-item prescription these identifiers SHALL match prescriptionItem.identifier. SHALL:process consumerSystem SHALL use this prescription identifier for reference in the dispense record. | Business identifier(s) for the prescription. [Used for searching] |
author[x] | 1..* | SHALL:able-to-populate producerSystem SHALL support at least EHDSHealthProfessional data type for the element. SHALL:process consumer | The prescriber, the person who made the prescription, and who takes the responsibility for the treatment. [Used for searching] |
date | 1..1 | SHALL:able-to-populate producerSHALL:process consumer | Time of issuing (signing) the prescription by health care professional. [Used for searching] |
status | 1..1 | SHALL:able-to-populate producerSHALL:process consumerSystem SHALL process the prescription status together with other information to determine dispensability. | Status of authorisation for dispensing the prescription items. This should not be the status of treatment. For a multiple-item prescription, this conveys the aggregate status of the entire prescription. In case of a single-item prescription, prescriptionItem.status shall be the same as EHDSMedicationPrescription.header.status. [Used for searching] |
source | 0..0 | Source of information (e.g. patient, patient's proxy). Used in case the patient has authored the information or the author has submitted patient-stated information. | |
language | 0..1 | Language in which the resource is written. Language is expressed by the IETF language tag. | |
statusReason[x] | 0..1 | Reason for the current status of prescription, for example the reason why the prescription was made invalid or changed from a previous state. | |
presentedForm | 0..* | SHOULD:able-to-populate producerSystem SHOULD be able to provide a rendered, human-readable version of the prescription. SHOULD:display consumer | Entire prescription as issued. Various formats could be provided, PDF format is recommended. |
prescriptionItem | 1..* | SHALL:able-to-populate producerSHALL:process consumer | Prescription line for one medication. In many countries, only one item is allowed and there shall be no expectation to be able to manage multiple items. In case multiple medications are allowed, all items need to be authored together. |
identifier | 1..* | SHALL:able-to-populate producerFor a single-item prescription these identifiers SHALL match .identifier. SHALL:process consumerSystem SHALL use this prescription identifier for reference in the dispense record. | Identifier for a single item on prescription, if exists. In case of single-item prescription, this identifier is typically the same as prescription identifier. [Used for searching] |
status | 1..1 | SHALL:able-to-populate producerSHALL:process consumerSystem SHALL process the prescription status together with other information to determine dispensability. | Status of a single item of a multi-item prescription. In case of single-item prescriptions, the status of prescription has the same meaning as the status of the item. [Used for searching] |
statusReason[x] | 0..1 | Reason for the current status of prescription, for example the reason why the prescription was made invalid or why the prescription was changed from previous | |
medication | 1..1 | SHALL:able-to-populate producerSHALL:process consumer | Prescribed product, branded, generic, virtual, extemporal, etc |
indication[x] | 0..* | Reason for the prescription (typically diagnosis, or a procedure) | |
intendedUseType | 0..1 | Intent of the prescription - prophylaxis, treatment, anesthesia, etc | |
periodOfUse | 0..1 | Period over which the medication is to be taken (in case of multiple dosage schemes, this would be the overall period of all dosages.) | |
quantityPrescribed | 0..1 | SHOULD:able-to-populate producerSHOULD:process consumer | Overall quantity of prescribed product (e.g number of packages or number of tablets). |
dosageInstructions | 1..1 | SHALL:able-to-populate producerSHALL:process consumer | Dosage and administration instructions |
validityPeriod | 0..1 | SHOULD:able-to-populate producerSHOULD:process consumer | The period over which the prescription is considered valid and dispensable. validityPeriod.start is, if missing, is assumed to be the date of issuing the prescription. |
substitution | 0..1 | SHOULD:able-to-populate producerSHOULD:process consumer | Whether and which type of substitution is allowed for this prescription. The legislation in the country of dispense applies, e.g. if this information is missing. |
allowed[x] | 0..1 | SHALL:able-to-populate producerSystem SHALL support at least the boolean data type. SHALL:process consumerSystem SHALL support at least the boolean data type. | Whether and to what extent substitution is allowed. |
reason[x] | 0..1 | Reason for the substitution requirement (e.g. Biological product, Patient allergic to an excipient in alternative products, etc) | |
numberOfRepeats | 0..1 | Number of refills authorised - how many times the prescription item can be dispensed in addition to the original dispense. The default value is 0 (no repeats). | |
minimumDispenseInterval | 0..1 | Minimum dispense interval. If a prescription allows for repeated dispensations, the interval between dispensations shall be stated here. | |
offLabel | 0..1 | Indicates that the prescriber has knowingly prescribed the medication for an indication, age group, dosage, or route of administration that is not approved by the regulatory agencies and is not mentioned in the prescribing information for the drug | |
isOffLabelUse | 1..1 | Indicates off-label use. Must be 'true' when .reason is provided. | |
reason[x] | 0..* | Reason or related clarification for off-label use | |
note | 0..1 | SHOULD:able-to-populate producerSHOULD:display consumer | Additional information or comments, e.g. message to the dispenser |
Mapping of EHDSMedicationPrescription to FHIR 29
How each logical element lands in FHIR, as published in the HL7 Europe guide. Mapped to: MedicationRequestEuMpd.
| Element | Relation | FHIR resource | FHIR element | Notes |
|---|---|---|---|---|
header | related to | MedicationRequest | . | Backbone element |
subject | equivalent | MedicationRequest | subject | Reference to Patient. |
identifier | narrower than target | MedicationRequest | identifier | Prescription identifier and prescription item identifier are usually the same in environments using single-item prescriptions. |
identifier | narrower than target | MedicationRequest | groupIdentifier | Use as the shared prescription identifier for MedicationRequest instances that belong to the same multi-item prescription. |
author[x] | equivalent | MedicationRequest | requester | |
date | equivalent | MedicationRequest | authoredOn | |
status | equivalent | MedicationRequest | status | |
statusReason[x] | equivalent | MedicationRequest | statusReason | The model also allows string data type which maps to CodeableConcept.text , but note element may also be used for additional clarifications. |
presentedForm | no mapping | MedicationRequest | Reference a DocumentReference containing the rendered prescription. | |
prescriptionItem | equivalent | MedicationRequest | . | Create one MedicationRequest per prescription item. |
identifier | equivalent | MedicationRequest | identifier | |
status | equivalent | MedicationRequest | status | For single-item prescriptions, same meaning as header.status. |
statusReason[x] | equivalent | MedicationRequest | statusReason | The model also allows string data type which maps to CodeableConcept.text , but note element may also be used for additional clarifications. |
medication | equivalent | MedicationRequest | medication[x] 〔R4〕 medication 〔R5〕 | |
indication[x] | equivalent | MedicationRequest | reasonCode 〔R4〕 reason 〔R5〕 | The model also allows string data type which maps to CodeableConcept.text , but note element may also be used for additional clarifications. |
intendedUseType | narrower than target | MedicationRequest | category | Use dedicated category code or custom extension if additional granularity is required. |
periodOfUse | related to | MedicationRequest | extension:effectiveDosePeriod 〔R4〕 effectiveDosePeriod 〔R5〕 | |
quantityPrescribed | equivalent | MedicationRequest | dispenseRequest.extension:prescribedQuantity | |
dosageInstructions | equivalent | MedicationRequest | dosageInstruction | Map each EHDSDosage entry to dosageInstruction . |
validityPeriod | equivalent | MedicationRequest | dispenseRequest.validityPeriod | |
substitution | equivalent | MedicationRequest | substitution | |
allowed[x] | equivalent | MedicationRequest | substitution.allowed[x] | The guide requires support for at least Boolean data type. |
reason[x] | equivalent | MedicationRequest | substitution.reason | The model also allows string data type which maps to CodeableConcept.text , but note element may also be used for additional clarifications. |
numberOfRepeats | equivalent | MedicationRequest | dispenseRequest.numberOfRepeatsAllowed | |
minimumDispenseInterval | equivalent | MedicationRequest | dispenseRequest.dispenseInterval | |
offLabel | related to | MedicationRequest | extension:offLabelUse | |
isOffLabelUse | related to | MedicationRequest | extension:offLabelUse | |
reason[x] | related to | MedicationRequest | extension:offLabelUse.reason | The model also allows string data type which maps to CodeableConcept.text , but note element may also be used for additional clarifications. |
note | equivalent | MedicationRequest | note.text | Use note.author / note.time if available. |
CDA documents (eHDSI)
The same category is carried in CDA by these eHDSI document templates. Their structure, value sets and a validator for CDA documents are in the CDA guide.
Sources
Regulation (EU) 2025/327, Official Journal of the European Union; HL7 Europe FHIR implementation guides; Xt-EHR logical models (xtehr.eu.ehds.models). Ballot guides may still change. This guide is informational: it is not legal advice and not a certification of conformity.
