NEWFree ROI Calculators — quantify what prior auth and siloed data are costing your organization.Prior Auth ROI Siloed Data ROI
HL7 v2Message11 min read

ORM — Order Message (general)

HL7 ORM messages carry orders — the requests one system makes of another to perform a service, whether a laboratory test, a radiology study, a medication, a diet, or a supply. ORM^O01 was the universal order message of HL7 v2 before v2.5, a single structure flexible enough to place, change, cancel, or hold an order across every clinical domain. It is still widespread in production interfaces despite being superseded for laboratory ordering by OML. This page explains what an ORM message represents, when it is sent, every segment the message can carry and what each one holds, and how an ORM message maps to a FHIR Bundle. Sample content is constructed for illustration with fictional identifiers.

What an ORM message represents

An ORM message — ORM stands for Order Message — communicates one or more orders and the action to take on each. The heart of the message is the repeating ORDER group, which opens with an ORC common order segment carrying the order control code that says what to do: place a new order (NW), cancel one (CA), hold it (HD), discontinue it (DC), or replace it. Beneath the ORC, an order-detail segment describes the thing being ordered — an OBR for a test or study, an RXO for a pharmacy order, an ODS for a diet.

The sender is the placer — the ordering application, typically the EHR or a departmental order-entry system — and the receiver is the filler, the ancillary system that will perform the service: the laboratory, radiology, or pharmacy. Because a single ORM message reports an action already decided by the placer, the ORC order control code is authoritative: the filler applies the requested action rather than negotiating it.

Every ORM message shares the same skeleton — an MSH header, an optional PATIENT group anchored by PID, and one or more ORDER groups each anchored by ORC. The order-detail segment chosen inside the ORDER group is what makes an ORM a lab order, a pharmacy order, or a diet order.

When an ORM message is sent

An ORM message is sent whenever the placer needs the filler to act on an order. A new order fires when a provider signs it; a cancellation or hold fires when the provider changes their mind or the patient's status changes; a status update fires as the order moves through its lifecycle. Because the ORDER group repeats, a single message can carry several orders placed together — a panel of labs, or a set of related studies.

Trigger event

The ORM message type carries a single trigger event:

  • ORM^O01 – General order message.

Because ORM has one trigger event, the receiver's handling turns on the order control code in ORC-1NW, CA, HD, DC, and so on — rather than on the trigger code in MSH-9. A new order and a cancellation both arrive as ORM^O01; the order control code distinguishes them. Note that ORM was retired after v2.3.1 in favour of domain-specific order messages such as OML for laboratory, but the structure persists in HL7 v2.5.1 for backward compatibility and remains common in the field.

Integration topology

The diagram shows the ordering application emitting an order through the integration engine to the ancillary system that fills it.

{{diagram: ordering application / EHR → ORM message → integration engine → laboratory / radiology / pharmacy / dietary}}

Typical senders: EHR, CPOE / order-entry application, departmental ordering system.

Typical receivers: laboratory information system, radiology (RIS), pharmacy system, dietary, and other ancillary fillers.

Direction: typically unidirectional from placer to filler, though order status and acknowledgement often flow back on a companion interface.

Segments in an ORM message

The ORM_O01 message is organised into an optional PATIENT group and one or more repeating ORDER groups. Each ORDER group opens with an ORC and contains an ORDER_DETAIL group whose first segment is a choice — exactly one of OBR, RQD, RQ1, RXO, ODS, or ODT — that determines the order's domain. 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.

SegmentDescription
MSHMessage Header. Opens every ORM message. It names the sending and receiving applications and facilities, stamps the creation time, declares the trigger event in MSH-9 (ORM^O01), carries the message control id in MSH-10, and pins the HL7 version. Receivers route on MSH-9 and deduplicate on MSH-10.
[{NTE}]Notes and Comments. Message-level notes carried before the patient and order detail. Optional and repeating.
[PID]Patient Identification. Opens the optional PATIENT group and identifies the patient the orders are placed for — the identifier list in PID-3, the name in PID-5. The PATIENT group as a whole is optional, allowing an order message that references a patient established by a prior context.
[PD1]Patient Additional Demographic. Supplements PID with data such as the patient's primary-care facility. Present only within the PATIENT group.
[{NTE}]Notes and Comments. Patient-level notes within the PATIENT group. Optional and repeating.
[PV1]Patient Visit. Opens the optional PATIENT_VISIT group inside the PATIENT group — the encounter the orders belong to: patient class, assigned location, and providers.
[PV2]Patient Visit Additional. Companion to PV1 with admit reason and expected dates. Optional, within the PATIENT_VISIT group.
[{ INSURANCE }]Insurance group. Optional and repeating coverage context within the PATIENT group. Opens with IN1 insurance, with optional IN2 and IN3. Multiple groups establish primary, secondary, and tertiary coverage.
[GT1]Guarantor. The financially responsible party for the orders. Optional, within the PATIENT group.
[{AL1}]Allergy Information. Patient allergies carried with the order — one allergy per segment. Optional and repeating, within the PATIENT group.
ORCCommon Order. Opens each ORDER group and is the structural anchor of the message. It carries the order control code in ORC-1 (NW new, CA cancel, HD hold, DC discontinue, and so on), the placer order number in ORC-2, the filler order number in ORC-3, the order status in ORC-5, the ordering provider in ORC-12, and the order date/time in ORC-9. Required; the ORDER group repeats once per order.
OBR / RQD / RQ1 / RXO / ODS / ODTOrder detail (choice). Opens the ORDER_DETAIL group; exactly one of these six must be present and no more than one. OBR is the observation request for a lab test or study — universal service identifier in OBR-4. RQD/RQ1 are requisition detail for materials management. RXO is the pharmacy/treatment order. ODS/ODT are dietary orders and tray instructions. The choice made here determines the order's domain.
[{NTE}]Notes and Comments. Order-detail notes — instructions to the filler. Optional and repeating, within the ORDER_DETAIL group.
[CTD]Contact Data. Contact detail for the order — for example a referral contact. Optional, within the ORDER_DETAIL group.
[{DG1}]Diagnosis. Diagnoses that justify the order, coded in ICD-10, SNOMED CT, or a local system. Optional and repeating, within the ORDER_DETAIL group.
[{OBX}]Observation/Result. Order-associated observations — for example a reason-for-study answer or a clinical indication — carried in the OBSERVATION group. Each OBX may be followed by its own [{NTE}]. Optional and repeating.
[{FT1}]Financial Transaction. Charges associated with the order, carried within the ORDER group after the order detail. Optional and repeating.
[{CTI}]Clinical Trial Identification. Links the order to a clinical trial, phase, and study arm. Optional and repeating, within the ORDER group.
[BLG]Billing. Billing information for the order — cost centre and billing type. Optional, closes the ORDER group.

[ ] = optional, { } = repeating

The ORDER group from ORC through BLG repeats once per order, so a single ORM message can place, cancel, or update several orders together. Exactly one order-detail segment opens each ORDER_DETAIL group, and that choice determines whether the order is a test, a medication, or a diet. The canonical segment pages carry the full field-by-field detail.

Sample ORM message

Note. Constructed for illustration. Patient identifiers, order numbers, dates, and names are fictional.

MSH|^~&|EHR|MERCYGEN|LIS|MERCYGEN|20260701093000||ORM^O01^ORM_O01|MSG00031|P|2.5.1
PID|1||MR12345^^^MERCYGEN^MR||DOE^JOHN^Q||19800101|M
PV1|1|O|LAB^^^MERCYGEN||||1234^SMITH^JANE^A^^^MD|||MED
ORC|NW|ORD5501^EHR|||||||20260701093000|||1234^SMITH^JANE^A^^^MD
OBR|1|ORD5501^EHR||58410-2^CBC WITH DIFFERENTIAL^LN|||20260701093000|||||||||1234^SMITH^JANE^A^^^MD
DG1|1|ICD-10|D64.9^Anemia, unspecified^I10|ANEMIA|20260701093000|A

What this sample shows

The ORM^O01 in MSH-9 marks a general order message. PID carries the medical record number MR12345, and PV1 places the patient as an outpatient (O) in the lab with an ordering provider, giving the order its visit context. The ORC carries the order control code NW (new order) in ORC-1 and the placer order number ORD5501 in ORC-2. The OBR — the order-detail choice for this domain — identifies the CBC With Differential panel (LOINC 58410-2) in OBR-4. The DG1 carries the diagnosis that justifies the order.

Working with ORM messages

Read the order control code, not just the trigger event

Every ORM arrives as ORM^O01, so the trigger event tells you nothing about the action. Switch on the order control code in ORC-1: NW places a new order, CA cancels, HD holds, DC discontinues, XO changes an order. Treating every ORM as a new order duplicates orders the placer meant to cancel or change.

Idempotency and deduplication

Use MSH-10, the message control id, as the deduplication key, and treat the placer order number in ORC-2 and filler order number in ORC-3 as the natural business key for an order. Order feeds are replayed after outages; treating a repeated control id as a duplicate prevents a replayed new-order message from placing the same order twice.

The order-detail choice determines the domain

Exactly one of OBR, RQD, RQ1, RXO, ODS, or ODT opens each ORDER_DETAIL group. Inspect which one is present before parsing the order detail — an RXO pharmacy order and an OBR lab order carry entirely different fields, and a parser expecting OBR will misread a medication order.

Multiple orders per message

The ORDER group repeats, so a single ORM message can carry several orders. Process each ORC/order-detail pair independently rather than reading only the first — a panel ordered together arrives in one message.

Vendor variance. ORM predates the domain-specific order messages, and senders differ widely in which optional groups and order-detail segments they populate; many lab interfaces still emit ORM^O01 where the standard now recommends OML^O21. Confirm a partner's order control codes and segment usage against their interface specification rather than assuming the base standard.

FHIR equivalent

An ORM message maps to a FHIR Bundle whose backbone is a MessageHeader plus the Patient and one ServiceRequest per order. The v2-to-FHIR Implementation Guide derives the MessageHeader and Provenance from MSH, the Patient from PID and PD1, and a ServiceRequest from each ORC/OBR pair, with optional Encounter from the visit segments, Coverage from insurance, AllergyIntolerance from AL1, and Condition from DG1. A pharmacy order (RXO) produces a MedicationRequest, and a dietary or supply order can produce a SupplyRequest.

The Implementation Guide publishes an official Bundle map for ORM_O01.

Trigger eventFHIR Bundle contentsOfficial IG map
ORM_O01MessageHeader + Patient + ServiceRequest + Provenance (+ optional Encounter, Coverage, AllergyIntolerance, Condition, MedicationRequest, SupplyRequest, Observation, Task)yes

Common pitfalls

Pitfall. Treating every ORM as a new order. The action lives in the order control code in ORC-1, not the trigger event; ignoring it turns cancellations and holds into duplicate new orders.

Pitfall. Assuming the order detail is always an OBR. The ORDER_DETAIL group opens with a choice of six segment types; a pharmacy (RXO) or dietary (ODS) order carries none of the fields an OBR parser expects.

Pitfall. Reading only the first order. The ORDER group repeats, so a message can carry several orders; processing only the first drops the rest.

How Vorro handles ORM messages

Vorro ingests the ORM feed over MLLP or another transport, deduplicates on MSH-10, and routes each order to the filler that performs it. Vorro switches on the order control code in ORC-1 to apply the correct action — new, cancel, hold, discontinue, or change — inspects the order-detail choice to determine the domain, and processes every order in the repeating ORDER group rather than only the first. Where a FHIR destination is configured, Vorro emits the corresponding Bundle using the Implementation Guide's published ORM_O01 map, producing one ServiceRequest per order and the appropriate MedicationRequest or SupplyRequest for pharmacy and supply orders.

  • OML — the laboratory order message that replaced ORM for lab ordering in v2.5+; carries first-class specimen and container detail.
  • ORU — the observation result message that returns results against the order an ORM placed.
  • ORC — the common order segment that anchors every ORDER group and carries the order control code.

Sources

← Back to HL7 v2 Guide

Ready to Integrate This Into Your Workflow?

Talk to a Vorro expert about implementing HL7 v2 in your specific environment.

Browse HL7 v2 Guides
ORM — Order Message (general) | Vorro Academy | Vorro