Schedule a demo
Segment

Pharmacy/treatment dispense

Records the actual dispensing event for a medication, including the drug dispensed, actual dispense amount, dispense date and time, dispensing provider, lot number, and expiration date. It is sent by the pharmacy dispensing system to the EHR or nursing system in RDS (Pharmacy/Treatment Dispense) messages. RXD confirms that a specific quantity of medication was physically dispensed for a patient order.

34fields
5required
v2.9HL7 version
rxd.py
from zato.hl7v2 import RXD, CWE

rxd = RXD()
code = CWE(identifier='VIT01', text='Vitamin D 1000IU')
rxd.dispense_give_code = code

Build RXD segments in Python

How to construct and work with real-world RXD segments.

1

Vitamin D softgel dispense

Required counters, code, dispense time, amount, units, and prescription id

from zato.hl7v2.v2_9 import RXD
from zato.hl7v2.v2_9 import CWE

rxd = RXD()
rxd.dispense_sub_id_counter = '1'
rxd.dispense_give_code = CWE(
    identifier='VITD',
    text='Vitamin D3 1000 IU',
)
rxd.date_time_dispensed = '20240415120000'
rxd.actual_dispense_amount = '30'
rxd.actual_dispense_units = CWE(identifier='IU', text='IU')
rxd.prescription_number = 'RX-WELL-2024-01'
2

Probiotic bottle with refills and provider

Refill count, notes, dispensing provider, and substitution status

from zato.hl7v2.v2_9 import RXD
from zato.hl7v2.v2_9 import CWE, XCN

rxd = RXD()
rxd.dispense_sub_id_counter = '1'
rxd.dispense_give_code = CWE(
    identifier='PROB', text='Daily Probiotic')
rxd.date_time_dispensed = '20240415140000'
rxd.actual_dispense_amount = '90'
rxd.actual_dispense_units = CWE(
    identifier='BOT', text='Bottle')
rxd.actual_dosage_form = CWE(
    identifier='TAB', text='Tablet')
rxd.prescription_number = 'RX-WELL-PROB'
rxd.number_of_refills_remaining = '3'
rxd.dispense_notes = ['Shake gently', 'Refrigerate']
rxd.dispensing_provider = XCN(
    person_identifier='445566',
    family_name='RIVER',
    given_name='JORDAN',
    suffix='RPH'
)
rxd.substitution_status = 'G'
3

Multivitamin with package and pharmacy context

Daily dose, strength, package size, locations, pharmacy, and phone

from zato.hl7v2.v2_9 import RXD
from zato.hl7v2.v2_9 import (
    CQ, CWE, EI, XAD, XTN,
)

rxd = RXD()
rxd.dispense_sub_id_counter = '1'
rxd.dispense_give_code = CWE(
    identifier='MULTI', text='Daily Multivitamin')
rxd.date_time_dispensed = '20240401080000'
rxd.actual_dispense_amount = '60'
rxd.actual_dispense_units = CWE(
    identifier='TAB', text='Tablet')
rxd.actual_dosage_form = CWE(
    identifier='TAB', text='Tablet')
rxd.prescription_number = 'RX-MV-01'
rxd.number_of_refills_remaining = '2'
rxd.needs_human_review = 'N'
rxd.total_daily_dose = CQ(
    quantity='1',
    units=CWE(identifier='TAB'),
)
rxd.special_dispensing_instructions = [
    CWE(identifier='WELL', text='Wellness clinic'),
    CWE(identifier='SUPP', text='Nutrition bundle'),
]
rxd.substance_expiration_date = ['20261231']
rxd.substance_manufacturer_name = [
    CWE(identifier='VITCO', text='Vitamin Co')]
rxd.indication = [
    CWE(identifier='NUTR', text='Daily nutrition')]
rxd.dispense_package_size = '100'
rxd.dispense_package_size_unit = CWE(
    identifier='BOT', text='Bottle')
rxd.dispense_package_method = 'U'
rxd.supplementary_code = [
    CWE(identifier='PLAN', text='Wellness plan')]
rxd.initiating_location = CWE(
    identifier='INIT', text='Central fill')
rxd.packaging_assembly_location = CWE(
    identifier='PKG', text='Pack line')
rxd.actual_drug_strength_volume = '5'
rxd.actual_drug_strength_volume_units = CWE(
    identifier='ML', text='mL')
rxd.dispense_to_pharmacy = CWE(
    identifier='PHARM',
    text='Green Valley Pharmacy',
)
rxd.dispense_to_pharmacy_address = XAD(
    street_address='100 Wellness Way',
    city='Portland',
    state_or_province='OR',
    zip_or_postal_code='97201',
    country='USA',
)
rxd.pharmacy_order_type = 'O'
rxd.dispense_type = CWE(
    identifier='RETAIL', text='Patient pickup')
rxd.pharmacy_phone_number = XTN(
    telephone_number='5551002000',
    telecommunication_use_code='PRN',
    telecommunication_equipment_type='PH'
)
rxd.dispense_tag_identifier = [
    EI(
        entity_identifier='TAG01',
        universal_id_type='WELL',
    ),
]

Learn by building

Step-by-step guides for working with HL7 v2 in Zato.

Frequently asked questions

RXD documents a dispense event: what product was released, when, how much, under which prescription or order identifiers, and with supporting notes, provider, substitution flags, strength, packaging, and pharmacy or pickup context for nutrition and wellness programs.

Use CWE for field 2 and assign it to dispense_give_code:

from zato.hl7v2.v2_9 import RXD, CWE

rxd = RXD()
rxd.dispense_give_code = CWE(
    identifier='VIT01', text='Vitamin D 1000IU')

HL7 reserves RXD field 13; leave it empty in ER7 so later fields stay aligned with your interface specification and Zato’s RXD layout.

Field 12 is a composite quantity with units. Use CQ with a numeric quantity and CWE units:

from zato.hl7v2.v2_9 import RXD, CQ, CWE

rxd = RXD()
rxd.total_daily_dose = CQ(
    quantity='2',
    units=CWE(identifier='TAB'))

Fields such as dispense_notes, special_dispensing_instructions, indication, supplementary_code, and dispense_tag_identifier may repeat in ER7. In Python, assign a list of values or typed instances as defined on the segment.

Zato connects to any system that speaks HL7v2 over MLLP or FHIR over REST. This includes Epic, Cerner, Meditech, Allscripts, and other EHR platforms.

Yes, Zato has built-in MLLP support for sending and receiving HL7v2 messages. MLLP channels handle the framing protocol automatically.

Zato supports HL7 v2.9, which is backward compatible with earlier versions including v2.3, v2.5, and v2.7. Standard segments and datatypes are available as typed Python classes.

Yes. Zato handles both HL7v2 and FHIR natively, so you can parse v2 messages and build FHIR resources with IG-specific extensions in the same service. Typed Python classes are available for both protocols, including extensions from US Core, UK Core, Da Vinci, and other Implementation Guides.

RXD field reference

Complete list of fields in the RXD segment, HL7 v2.9.

#Python nameDatatypeUsageRepeatableTable
1dispense_sub_id_counterNMRequiredNo-
2dispense_give_codeCWERequiredNoHL70292
3date_time_dispensedDTMRequiredNo-
4actual_dispense_amountNMRequiredNo-
5actual_dispense_unitsCWEOptionalNoHL70704
6actual_dosage_formCWEOptionalNoHL70705
7prescription_numberSTRequiredNo-
8number_of_refills_remainingNMOptionalNo-
9dispense_notesSTOptionalYes-
10dispensing_providerXCNOptionalYes-
11substitution_statusIDOptionalNoHL70167
12total_daily_doseCQOptionalNo-
14needs_human_reviewIDOptionalNoHL70136
15special_dispensing_instructionsCWEOptionalYesHL70706
16actual_strengthNMOptionalNo-
17actual_strength_unitCWEOptionalNoHL70707
18substance_lot_numberSTOptionalYes-
19substance_expiration_dateDTMOptionalYes-
20substance_manufacturer_nameCWEOptionalYes-
21indicationCWEOptionalYesHL70694
22dispense_package_sizeNMOptionalNo-
23dispense_package_size_unitCWEOptionalNoHL70709
24dispense_package_methodIDOptionalNoHL70321
25supplementary_codeCWEOptionalYesHL70700
26initiating_locationCWEOptionalNoHL70711
27packaging_assembly_locationCWEOptionalNoHL70712
28actual_drug_strength_volumeNMOptionalNo-
29actual_drug_strength_volume_unitsCWEOptionalNoHL70713
30dispense_to_pharmacyCWEOptionalNoHL70714
31dispense_to_pharmacy_addressXADOptionalNo-
32pharmacy_order_typeIDOptionalNoHL70480
33dispense_typeCWEOptionalNoHL70484
34pharmacy_phone_numberXTNOptionalYes-
35dispense_tag_identifierEIOptionalYes-

Ready to build integrations?

Get started with Zato and connect your systems in minutes.

Open source In Python