HL7 RRD messages acknowledge or respond to a pharmacy dispense order. An RRD message is sent from the pharmacy information system (PIS) back to the ordering application (such as an EHR) to confirm that the pharmacist has successfully dispensed a medication, updating the clinical chart with details of the dispense transaction (like quantity dispensed, package reference codes, and time of dispensing). This page explains what an RRD message represents, the trigger event that carries it, every segment the message can contain and what each one holds, and how an RRD response relates to FHIR. Sample content is constructed for illustration with fictional identifiers.
What an RRD message represents
An RRD message — RRD stands for Pharmacy Dispense Acknowledgement — communicates the pharmacy's final dispense transaction confirmation. The core of the message is the MSA segment, which provides the transaction-level acknowledgement status, and one or more repeating ORDER groups containing an echoed RXD segment (Pharmacy Dispense) to identify the specific medication dispensed, its package codes, the dispensed quantity, and the date and time of the dispense event.
The sender is the pharmacy information system (PIS) or pharmacy robotics system, and the receiver is the clinical application or EHR that raised the pharmacy order (often as an OMP or RDE message). RRD provides clinical confirmation that the medication has been prepared and is ready for clinical administration or pick-up.
When an RRD message is sent
An RRD message is sent asynchronously after a medication is dispensed from the pharmacy. It fires when the pharmacist completes a dispense transaction or when an automated dispensing cabinet verifies that a medication package has been picked, confirming that the order is complete.
Trigger event
The RRD message type carries a single trigger event:
RRD^O14– Pharmacy dispense acknowledgement message.
The receiving application matches the response to the original order using the placer order number in ORC-2 and the message control ID echoed in MSA-2.
Integration topology
The diagram shows the pharmacy system returning a dispense response through the integration engine to the ordering EHR.
{{diagram: pharmacy system → RRD message → integration engine → clinical system (EHR)}}
Typical senders: pharmacy information system (PIS), automated dispensing cabinet, pharmacy robotics system.
Typical receivers: EHR, inpatient clinical documentation software, medication administration record (MAR) client.
Direction: response in a request-response pattern — the PIS acknowledges and confirms the dispensing of the medication order.
Segments in an RRD message
The RRD_O14 message opens with a header block (MSH, MSA, and optional ERR segments) followed by optional patient/visit context and one or more repeating ORDER groups. Cardinality follows HL7 notation: [X] optional, {X} repeating, [{X}] optional and repeating; a bare code is required. Each segment code links to its canonical field-by-field reference.
| Segment | Description |
|---|---|
MSH | Message Header. Opens every RRD message. It names the sending and receiving applications, stamps the creation time, declares the trigger event in MSH-9 (RRD^O14), carries the message control id in MSH-10, and pins the HL7 version. |
MSA | Message Acknowledgement. Required. Echoes the original message control id in MSA-2 and carries the acknowledgement code (e.g., AA accepted, AE error). |
[{ERR}] | Error. Details validation or application errors encountered when processing the dispense transaction. Optional and repeating. |
[{NTE}] | Notes and Comments. Header-level comments or text notes. Optional and repeating. |
[PID] | Patient Identification. Patient associated with the dispense transaction. Optional. |
[PV1] | Patient Visit. Encounter details related to the patient. Optional. |
ORC | Common Order. Opens each ORDER group. It carries the order status, the placer order number, and the filler order number. Required within each repeating order group. |
[{TQ1}] | Timing/Quantity. Timing and frequency schedule. Optional and repeating. |
RXD | Pharmacy Dispense. Required. Carries the dispensed medication name/code, quantity, units, form, package details, and dispense date/time. |
[{RXR}] | Pharmacy Route. The route of administration (e.g., oral, intravenous). Optional and repeating. |
[{RXC}] | Pharmacy Component. Details of drug components or ingredients. Optional and repeating. |
[{NTE}] | Notes and Comments (Line). Notes or pharmacist instructions for this specific dispense line. Optional. |
[ ] = optional, { } = repeating
Sample RRD message
Note. Constructed for illustration. Medication codes, order numbers, and patient identifiers are fictional.
MSH|^~&|PHARMSYS|MERCY|EHRSYS|MERCY|20260604093000||RRD^O14^RRD_O14|MSG00048|P|2.5.1
MSA|AA|MSG00047
PID|1||MR98765^^^MERCY^MR||SMITH^PATRICIA^A||19720315|F
ORC|OK|REQ20260604-003^EHRSYS|FIL20260604-003^PHARMSYS
RXD|1|500^Amoxicillin^L|500|mg|capsule|||||||||||
RXR|PO^Oral^HL70162
NTE|1||Medication dispensed from central pharmacy; sent via courier.
What this sample shows
The RRD^O14 in MSH-9 marks a pharmacy dispense acknowledgement. MSA carries acknowledgement code AA (Application Accept) and acknowledges the original request control ID MSG00047. PID associates the response with patient MR98765. ORC carries order status OK (Order Accepted), links to placer order number REQ20260604-003, and supplies the pharmacy filler order number FIL20260604-003. The RXD segment carries the dispense details: medication Amoxicillin, quantity 500 mg, form capsule. RXR specifies route PO (Oral). The NTE notes that the item has been dispensed and dispatched via courier.
Working with RRD messages
Matching and Verification
When an RRD response is received, the ordering system correlates MSA-2 with the outbound request. The placer order number in ORC-2 is used to match individual lines. This correlation is essential for clinical staff to verify that the medication has been dispensed by the pharmacy before attempting pick-up.
Tracking Dispense Quantities
EHR applications must compare the dispensed quantities in the RXD segment against their original request details to ensure that nursing documentation and drug-administration records match the actual amount prepared by the pharmacy, preventing dosing errors.
Vendor variance. Different pharmacy systems use different coding systems in the
RXDsegment. Some systems return standard NDC codes inRXD-2, while others use hospital-specific formulary codes. Ensure your integration client parses both coding tables to support inventory tracking.
FHIR equivalent
A pharmacy dispense response maps conceptually to status changes on the FHIR MedicationDispense resource, representing updates to the status field (e.g. from preparation to completed or in-progress).
The HL7 v2-to-FHIR Implementation Guide publishes no message map for RRD_O14 and no ConceptMap for the RXD segment. Consequently, any FHIR translation must be mapped manually, using MSA-2 and ORC-2 to locate the existing MedicationDispense resource and updating its status or adding pharmacy filler identifiers as identifier elements.
Common pitfalls
Pitfall. Assuming the medication has been dispensed without checking
ORC-5orMSA-1. Presuming pharmacy acceptance on an error or rejection response can lead to clinical staff attempting to administer medication that was never dispensed.
Pitfall. Overlooking dispense status updates. Ignoring updates in the echoed
RXDsegment can result in the EHR displaying incorrect dispense records.
How Vorro handles RRD messages
Vorro ingests RRD responses over MLLP, validates the application acknowledgement code in MSA, and correlates each response to its originating request. Vorro updates the status of the medication dispense line items in the ordering EHR based on ORC-5 (Order Status) and passes through the pharmacy filler order number from ORC-3. Where a FHIR destination is configured, Vorro updates the corresponding MedicationDispense resource state manually, since the HL7 v2-to-FHIR guide provides no published map for this message.
Related messages
- RDS — the pharmacy dispense message.
- RDE — the pharmacy encoded order message.
- RAS — the pharmacy administration message.
