HL7 RRD_O14 Pharmacy/Treatment Dispense Acknowledgment

HL7 message structure RRD_O14 groups and segments from HL7 v2.5.1 Hide structure

These are the generated groups and segments for the version selected at the top of the page. The article explains the workflow, and this panel follows the chosen HL7 version.

Message Structure

SegmentNameRequiredRepeatable
Message Header Yes No
Message Acknowledgment Yes No
Error No Yes
Software Segment No Yes
Notes and Comments No Yes
RRD_O14.RESPONSE
Response group No No
RRD_O14.PATIENT
Patient group No No
Patient Identification Yes No
Notes and Comments No Yes
RRD_O14.ORDER
Order group Yes Yes
Common Order Yes No
RRD_O14.TIMING
Timing group No Yes
Timing/Quantity Yes No
Timing/Quantity Relationship No Yes
RRD_O14.DISPENSE
Dispense group No No
Pharmacy/Treatment Dispense Yes No
Notes and Comments No Yes
Pharmacy/Treatment Route Yes Yes
Pharmacy/Treatment Component Order No Yes

RRD_O14 is the application response to an RDS_O13 dispense message. It tells the dispense sender whether the receiving application accepted the dispense event, and it can optionally echo the patient, order, and dispense details that were processed.

In the real world this message is most useful when pharmacy, dispensing cabinets, inventory systems, eMAR systems, and billing workflows need a closed loop. The original RDS says "this was dispensed." RRD says whether the receiver could use that information.

A small RRD example

MSH|^~\&|MAR|CITYHOSP|PHARM|CITYHOSP|20260715122200||RRD^O14^RRD_O14|RRD00001|P|2.5.1 MSA|AA|RDS00001 PID|1||123456^^^CITYHOSP^MR||Smith^Jane^Anne^^Ms^^L||19800314|F ORC|OK|MED448811^EHR|RX998877^PHARM RXD|1|AMOX500^Amoxicillin 500 mg capsule^L|20260715121500|30|CAP^capsule^UCUM|RX998877^PHARM|MAINPHARM^Main Pharmacy^L RXR|PO^Oral^HL70162

What systems do with it

The sender is usually the application that received the RDS dispense message. The receiver is the original dispense sender. MSA carries the basic acknowledgment result, while ERR should explain application-level problems such as an unknown patient, unknown order, duplicate dispense event, unsupported dispense code, or a quantity/unit problem.

If the optional response group is populated, RXD is the important segment. It carries the dispense that was accepted or rejected in context, with ORC tying the response back to the order and RXR carrying route information when the dispense group is present.

How to read the structure

The required core is MSH and MSA. ERR, software, and notes can add operational detail. The optional response group contains an optional patient group and one or more order groups. Each order group requires ORC and may include timing and a dispense group.

Inside the dispense group, RXD is required, RXR repeats and is required, and RXC can carry component detail. This is useful for compound medications and inventory workflows where the receiver needs more than a single display label.

Implementation traps

Do not use RRD as the dispense event itself. The event is RDS. RRD is the response to that event. If the receiving system creates inventory, charge, or MAR updates from RRD alone, it is probably reacting to the wrong side of the conversation.

Also be precise about duplicate handling. A repeated RDS after a timeout may receive an RRD with the same accepted result, or it may receive an application error that means "already processed." Those are operationally different, so document the resend behavior.

Reference notes

The HL7 v2+ RRD_O14 page describes the pharmacy/treatment dispense acknowledgment and shows the optional response, patient, order, timing, dispense, RXD, RXR, and RXC structure.