Taction Software — FHIR Integration with Mirth Connect
HL7 Message Types · Pillar Reference

HL7 ORM & ORU:
The Complete Lab Workflow Guide

Updated April 2026 · Written by the Taction Software integration team

End-to-end reference for the HL7 lab order (ORM^O01) and result (ORU^R01) workflow — segments, LOINC coding, abnormal flags, reflex testing, corrected results, and the Mirth Connect channel patterns we run in production.

Lab integration is the second-highest volume HL7 traffic in a US hospital, trailing only ADT. Every CBC, every BMP, every troponin, every blood culture, every urinalysis — all of it flows over HL7 v2 as an ORM (order) on the way in and as one or more ORUs (results) on the way back. Done right, lab integration is boring and reliable. Done wrong, it produces clinical risk: missing results, duplicate results, wrong-patient results, old results displayed as new.

This guide covers the full HL7 v2 lab workflow end-to-end: ORM^O01 orders, ORU^R01 results, every critical segment (ORC, OBR, OBX, NTE, SPM), LOINC semantics, abnormal flags, reflex testing, and the corrected-result pattern that trips up every team on their first lab project. For the broader HL7 context, start with our HL7 integration guide.

If you are planning a LIS-to-EHR or EHR-to-reference-lab integration and want an experienced pair of hands, our Mirth Connect helpdesk and services team have built dozens of production lab pipelines for US hospitals, reference labs, and specialty practices.

1. Lab Workflow Overview

At a high level the HL7 lab workflow looks like this:

  +--------+   ORM^O01   +----------+   LIS collects   +---------+
  |  EHR   | ----------> |   LIS    |    specimen      |  Bench  |
  +--------+             +----------+ ----------------> +---------+
      ^                       |                             |
      |   ORU^R01 (prelim)    |                             |
      | <---------------------| <---------------------------|
      |                       |                             |
      |   ORU^R01 (final)     |       result verified       |
      | <---------------------| <---------------------------|
      |                       |                             |
      |   ORU^R01 (corrected) |       correction entered    |
      | <---------------------| <---------------------------|

Step-by-step:

  1. Provider places an order in the EHR. The EHR generates an ORM^O01 message and sends it to the LIS.
  2. LIS accepts the order, returns an acknowledgement (ACK), and queues the work.
  3. Phlebotomy collects the specimen. LIS may send an OUL^R21 (unsolicited observation) for specimen collected, depending on the vendor.
  4. Instrument runs the test. Result is captured by LIS, typically as preliminary (OBR-25 = P).
  5. LIS sends the preliminary ORU^R01 back to the EHR.
  6. Tech verifies. LIS sends final ORU^R01 with OBR-25 = F.
  7. If correction needed later: LIS sends ORU^R01 with ORC-1 = CR and OBR-25 = C.

2. ORM^O01 - The Order Message

ORM (Order Message) is the vehicle for new orders, cancellations, and order updates. O01 is the generic trigger for all general order events.

ORM^O01 segment structure

  • MSH — required
  • PID — required
  • PV1 — optional
  • IN1/IN2/IN3 — optional (insurance, for lab billing)
  • ORC — required (common order segment, one per order)
  • OBR — required (observation request)
  • NTE — optional, repeating (notes)
  • DG1 — optional (diagnosis for medical necessity)
  • OBX — optional (pre-order observations like last menstrual period)
  • SPM — optional (specimen details, v2.5+)

Full ORM^O01 sample - Basic Metabolic Panel order

MSH|^~\&|EPIC|GENERAL_HOSP|LAB|LAB_FACILITY|20260421094500||ORM^O01^ORM_O01|MSG0011234567|P|2.5
PID|1||MRN12345^^^GENERAL_HOSP^MR||DOE^JANE^MARIE^^MS^^L||19850412|F||2106-3|123 MAIN ST^^SEATTLE^WA^98101
PV1|1|I|7N^701^A^GENERAL_HOSP|E|||1234567890^SMITH^JOHN^A^^^MD|||MED||||||1234567890^SMITH^JOHN^A||||||||||||||||||||||||20260421143000
ORC|NW|ORD001234567^EPIC|FILL987654^LAB||||^^^20260421100000^^R||20260421094500|5678^ORDERER^CAROL|1234567890^SMITH^JOHN^A^^^MD|||20260421094500
OBR|1|ORD001234567^EPIC|FILL987654^LAB|BMP^Basic Metabolic Panel^L|||20260421094500|||||||||1234567890^SMITH^JOHN^A^^^MD||||||20260421094500|||F
DG1|1||I10^Essential hypertension^I10||A
NTE|1||FASTING x 8 HOURS

Ordering multiple tests in one message

Multiple orders can share a single ORM. Each order gets its own ORC + OBR group.

MSH|^~\&|EPIC|GENERAL_HOSP|LAB|LAB_FACILITY|20260421094500||ORM^O01^ORM_O01|MSG0012345678|P|2.5
PID|1||MRN12345^^^GENERAL_HOSP^MR||DOE^JANE^MARIE^^MS^^L||19850412|F
PV1|1|I|7N^701^A^GENERAL_HOSP|E|||1234567890^SMITH^JOHN^A^^^MD||||||||||||VN00045678
ORC|NW|ORD001234568^EPIC|||||^^^20260421100000^^R||20260421094500|5678^ORDERER^CAROL|1234567890^SMITH^JOHN^A^^^MD
OBR|1|ORD001234568^EPIC||CBC^Complete Blood Count^L|||20260421094500
ORC|NW|ORD001234569^EPIC|||||^^^20260421100000^^R||20260421094500|5678^ORDERER^CAROL|1234567890^SMITH^JOHN^A^^^MD
OBR|2|ORD001234569^EPIC||BMP^Basic Metabolic Panel^L|||20260421094500
ORC|NW|ORD001234570^EPIC|||||^^^20260421100000^^R||20260421094500|5678^ORDERER^CAROL|1234567890^SMITH^JOHN^A^^^MD
OBR|3|ORD001234570^EPIC||TSH^Thyroid Stimulating Hormone^L|||20260421094500

3. OBR and ORC Segments

ORC - Common Order

Key ORC fields:

  • ORC-1 Order control code — the action being taken (NW new, CA cancel, DC discontinue, CR corrected, etc.)
  • ORC-2 Placer order number — the EHR's order ID
  • ORC-3 Filler order number — the LIS's order ID
  • ORC-5 Order status
  • ORC-7 Quantity/timing (deprecated in v2.5+, use TQ1)
  • ORC-9 Date/time of transaction
  • ORC-10 Entered by
  • ORC-12 Ordering provider
  • ORC-14 Call back phone number

ORC-1 order control codes

CodeMeaning
NWNew order
OKOrder accepted and OK
OCOrder cancelled
CACancel order request
ODOrder discontinued
DCDiscontinue order request
ORReleased that is no longer on hold
HDHold order request
REObservations/Performed Service to follow
RFRefill order request
RPOrder has been replaced by
SCStatus changed
CRCorrected (often appears on ORC-1 in corrected results)

OBR - Observation Request

Key OBR fields:

  • OBR-1 Set ID
  • OBR-2 Placer order number
  • OBR-3 Filler order number
  • OBR-4 Universal service identifier — the test code (LOINC or local)
  • OBR-5 Priority (deprecated, use TQ1)
  • OBR-6 Requested date/time
  • OBR-7 Observation date/time — when specimen collected
  • OBR-8 Observation end date/time
  • OBR-14 Specimen received date/time
  • OBR-15 Specimen source (deprecated in v2.5+, use SPM)
  • OBR-16 Ordering provider
  • OBR-22 Results report/status change date/time
  • OBR-25 Result status — the field you key off of
  • OBR-29 Parent result identifier (used for reflex and child results)

OBR-25 result status codes

CodeMeaning
OOrder received (specimen not yet received by lab)
INo results available; specimen received, procedure incomplete
SNo results available; procedure scheduled, but not done
ASome, but not all, results available
PPreliminary - verified by a tech but not yet finalized
CCorrected, final
RResults stored, not yet verified
FFinal results; results stored and verified. Can only be changed with a corrected result
XNo results available; order canceled
YNo order on record for this test
ZNo record of this patient

4. ORU^R01 - The Result Message

ORU (Observation Result, Unsolicited) carries results back from the lab. R01 is the generic trigger.

ORU^R01 segment structure

  • MSH — required
  • PID — required
  • PV1 — optional
  • ORC — optional but recommended
  • OBR — required
  • NTE — optional, repeating (clinical notes on the order)
  • OBX — required, repeating (the actual results)
  • NTE — optional, repeating (notes on individual OBX values)
  • SPM — optional (v2.5+ specimen)

Full ORU^R01 sample - BMP results

MSH|^~\&|LAB|LAB_FACILITY|EPIC|GENERAL_HOSP|20260421134500||ORU^R01^ORU_R01|MSG0021234567|P|2.5
PID|1||MRN12345^^^GENERAL_HOSP^MR||DOE^JANE^MARIE^^MS^^L||19850412|F
PV1|1|I|7N^701^A^GENERAL_HOSP|E|||1234567890^SMITH^JOHN^A^^^MD||||||||||||VN00045678
ORC|RE|ORD001234567^EPIC|FILL987654^LAB||CM
OBR|1|ORD001234567^EPIC|FILL987654^LAB|BMP^Basic Metabolic Panel^L|||20260421094500|||||||20260421100300||1234567890^SMITH^JOHN^A^^^MD|||||20260421134500|||F
OBX|1|NM|2345-7^Glucose^LN||98|mg/dL^milligrams per deciliter^UCUM|70-99|N|||F|||20260421134500
OBX|2|NM|3094-0^Urea Nitrogen^LN||14|mg/dL^milligrams per deciliter^UCUM|7-20|N|||F|||20260421134500
OBX|3|NM|2160-0^Creatinine^LN||0.9|mg/dL^milligrams per deciliter^UCUM|0.6-1.1|N|||F|||20260421134500
OBX|4|NM|2951-2^Sodium^LN||141|mmol/L^millimoles per liter^UCUM|135-145|N|||F|||20260421134500
OBX|5|NM|2823-3^Potassium^LN||4.0|mmol/L^millimoles per liter^UCUM|3.5-5.0|N|||F|||20260421134500
OBX|6|NM|2075-0^Chloride^LN||103|mmol/L^millimoles per liter^UCUM|98-107|N|||F|||20260421134500
OBX|7|NM|2028-9^Carbon Dioxide^LN||26|mmol/L^millimoles per liter^UCUM|22-29|N|||F|||20260421134500
OBX|8|NM|17861-6^Calcium^LN||9.4|mg/dL^milligrams per deciliter^UCUM|8.6-10.2|N|||F|||20260421134500

Full ORU^R01 sample - CBC with differential

MSH|^~\&|LAB|LAB_FACILITY|EPIC|GENERAL_HOSP|20260421135200||ORU^R01^ORU_R01|MSG0022345678|P|2.5
PID|1||MRN12345^^^GENERAL_HOSP^MR||DOE^JANE^MARIE^^MS^^L||19850412|F
ORC|RE|ORD001234568^EPIC|FILL987655^LAB||CM
OBR|1|ORD001234568^EPIC|FILL987655^LAB|CBC-D^Complete Blood Count with Differential^L|||20260421094500|||||||20260421100300||1234567890^SMITH^JOHN^A^^^MD|||||20260421135200|||F
OBX|1|NM|6690-2^WBC^LN||7.8|10*3/uL|4.5-11.0|N|||F
OBX|2|NM|789-8^RBC^LN||4.5|10*6/uL|4.2-5.4|N|||F
OBX|3|NM|718-7^Hemoglobin^LN||13.8|g/dL|12.0-16.0|N|||F
OBX|4|NM|4544-3^Hematocrit^LN||41.2|%|37.0-47.0|N|||F
OBX|5|NM|787-2^MCV^LN||91.5|fL|80.0-100.0|N|||F
OBX|6|NM|785-6^MCH^LN||30.6|pg|27.0-33.0|N|||F
OBX|7|NM|786-4^MCHC^LN||33.5|g/dL|32.0-36.0|N|||F
OBX|8|NM|788-0^RDW^LN||13.2|%|11.5-14.5|N|||F
OBX|9|NM|777-3^Platelet^LN||245|10*3/uL|150-400|N|||F
OBX|10|NM|770-8^Neutrophils %^LN||62.0|%|40.0-70.0|N|||F
OBX|11|NM|736-9^Lymphocytes %^LN||28.0|%|20.0-45.0|N|||F
OBX|12|NM|5905-5^Monocytes %^LN||7.0|%|2.0-10.0|N|||F
OBX|13|NM|713-8^Eosinophils %^LN||2.5|%|0.0-6.0|N|||F
OBX|14|NM|706-2^Basophils %^LN||0.5|%|0.0-2.0|N|||F

5. OBX Segments and LOINC Coding

Every discrete result is one OBX. A panel produces N OBXs — BMP is 8, CBC-D is 14, CMP is 14. Microbiology cultures produce dozens.

OBX fields

  • OBX-1 Set ID (1, 2, 3...)
  • OBX-2 Value type (NM numeric, ST string, TX text, CE coded element, SN structured numeric, ED encapsulated data, DT date, TS timestamp)
  • OBX-3 Observation identifier — LOINC code^display^coding-system
  • OBX-4 Observation sub-ID (used for grouping micro)
  • OBX-5 Observation value
  • OBX-6 Units (usually UCUM)
  • OBX-7 References range (display string)
  • OBX-8 Abnormal flags (L, H, HH, LL, etc.)
  • OBX-11 Observation result status (same codes as OBR-25)
  • OBX-14 Date/time of observation
  • OBX-15 Producer's ID (performing lab CLIA)
  • OBX-16 Responsible observer (performer)
  • OBX-17 Observation method

Common LOINC codes

LOINCTest
2345-7Glucose [Mass/volume] in Serum or Plasma
718-7Hemoglobin [Mass/volume] in Blood
2160-0Creatinine [Mass/volume] in Serum or Plasma
2093-3Cholesterol [Mass/volume] in Serum or Plasma
2339-0Glucose [Mass/volume] in Blood
777-3Platelets [#/volume] in Blood
6690-2Leukocytes [#/volume] in Blood
6301-6INR in Platelet poor plasma by Coagulation assay
10834-0Globulin [Mass/volume] in Serum by calculation
33914-3Glomerular filtration rate/1.73 sq M.predicted
6598-7Troponin T.cardiac [Mass/volume] in Serum or Plasma
89579-7Troponin I.cardiac [Mass/volume] in Serum or Plasma by High sensitivity method

6. Abnormal Flags and Result Statuses

OBX-8 carries the abnormal flag. Receivers use this to render color (red for H/L, red bold for HH/LL, black for N).

FlagMeaning
LBelow low normal
HAbove high normal
LLBelow lower panic limit (critical low)
HHAbove upper panic limit (critical high)
<Below absolute low-off instrument scale
>Above absolute high-off instrument scale
NNormal (for non-numeric observations)
AAbnormal (general)
AAVery abnormal (panic)
RResistant (for micro susceptibilities)
SSusceptible
IIntermediate
WWorse
BBetter
USignificant change up
DSignificant change down

Critical value (panic) sample

MSH|^~\&|LAB|LAB_FACILITY|EPIC|GENERAL_HOSP|20260421141500||ORU^R01^ORU_R01|MSG0023456789|P|2.5
PID|1||MRN77788^^^GENERAL_HOSP^MR||SMITH^ROBERT^J^^MR^^L||19610203|M
ORC|RE|ORD001234900^EPIC|FILL987700^LAB||CM
OBR|1|ORD001234900^EPIC|FILL987700^LAB|BMP^Basic Metabolic Panel^L|||20260421134500|||||||20260421140000||||||20260421141500|||F
OBX|1|NM|2345-7^Glucose^LN||42|mg/dL|70-99|LL|||F|||20260421141500
NTE|1||CRITICAL LOW - called Dr. SMITH at 14:18, read-back verified

7. Reflex Testing and Add-On Orders

Reflex testing is where the lab automatically adds tests based on initial results. Classic examples:

  • Positive RPR reflexes to TPPA
  • Abnormal TSH reflexes to free T4
  • Positive HIV screen reflexes to HIV Western Blot or multispot
  • Positive hepatitis C antibody reflexes to HCV RNA
  • Positive urine culture reflexes to sensitivities

Reflex ORM sample - add-on from lab

MSH|^~\&|LAB|LAB_FACILITY|EPIC|GENERAL_HOSP|20260421161500||ORM^O01^ORM_O01|MSG0024567890|P|2.5
PID|1||MRN45654^^^GENERAL_HOSP^MR||JOHNSON^MICHAEL^R^^MR^^L||19780820|M
ORC|NW|REFLEX20260421-001^LAB|FILL987800^LAB||SC||^^^20260421161500^^R||20260421161500
OBR|1|REFLEX20260421-001^LAB|FILL987800^LAB|TPPA^Treponema Pallidum Particle Agglutination^L|||20260421161500||||||REFLEXED FROM POSITIVE RPR (ORD001234999)||||||||||||F||29^ORD001234999^LAB

8. Corrected Results and Cancellations

Corrections are the single most-bug-producing area of lab integration.

Corrected result sample

MSH|^~\&|LAB|LAB_FACILITY|EPIC|GENERAL_HOSP|20260421183000||ORU^R01^ORU_R01|MSG0025678901|P|2.5
PID|1||MRN12345^^^GENERAL_HOSP^MR||DOE^JANE^MARIE^^MS^^L||19850412|F
ORC|CR|ORD001234567^EPIC|FILL987654^LAB||CM
OBR|1|ORD001234567^EPIC|FILL987654^LAB|BMP^Basic Metabolic Panel^L|||20260421094500|||||||20260421100300||1234567890^SMITH^JOHN^A^^^MD|||||20260421183000|||C
OBX|1|NM|2345-7^Glucose^LN||188|mg/dL|70-99|H|||C|||20260421183000
NTE|1||CORRECTED RESULT - Previous value 98 was from a mislabeled specimen. Corrected value 188 from re-assay.

Cancelled order sample

MSH|^~\&|LAB|LAB_FACILITY|EPIC|GENERAL_HOSP|20260421113000||ORM^O01^ORM_O01|MSG0026789012|P|2.5
PID|1||MRN12345^^^GENERAL_HOSP^MR||DOE^JANE^MARIE^^MS^^L||19850412|F
ORC|CA|ORD001234567^EPIC|FILL987654^LAB||CA||^^^20260421094500||20260421113000|5678^CANCELLER^DAVE|1234567890^SMITH^JOHN^A^^^MD
OBR|1|ORD001234567^EPIC|FILL987654^LAB|BMP^Basic Metabolic Panel^L
NTE|1||Duplicate order - already performed on prior draw

Receiver-side correction handling

  • Key results by ORC-3 (filler order number) + OBX-3 (LOINC), not by placer order number alone.
  • When ORC-1 = CR or OBX-11 = C, overlay the new value while preserving audit history.
  • Display both the corrected value and a "previously reported as X" note.
  • Never duplicate: one final + one corrected = one result, not two.

9. SPM, NTE, and Microbiology Results

SPM - Specimen (v2.5+)

SPM carries specimen metadata — type, source, collection method, container, volume — that used to be squeezed into OBR-15.

SPM|1|SPEC0001234^LAB||BLD^Blood^HL70487|||PVEN^Peripheral vein^HL70371||||||||20260421100300|20260421100300

Microbiology - urine culture with sensitivities

MSH|^~\&|LAB|LAB_FACILITY|EPIC|GENERAL_HOSP|20260422091500||ORU^R01^ORU_R01|MSG0027890123|P|2.5
PID|1||MRN33445^^^GENERAL_HOSP^MR||WILLIAMS^SUSAN^T^^MRS^^L||19720517|F
ORC|RE|ORD001235000^EPIC|FILL987900^LAB||CM
OBR|1|ORD001235000^EPIC|FILL987900^LAB|UCULT^Urine Culture^L|||20260421094500|||||||20260421100300|URN^Urine^HL70070||1234567890^SMITH^JOHN^A^^^MD|||||20260422091500|||F
SPM|1|SPEC0001235^LAB||URN^Urine^HL70487|||CLN^Clean catch^HL70371
OBX|1|TX|634-6^Bacteria identified^LN|1|Escherichia coli||A|||F|||20260422091500
OBX|2|NM|563-3^Colony count^LN|1|>100000|cfu/mL||A|||F
OBX|3|ST|18864-9^Ampicillin susceptibility^LN|1.1|R||R|||F|||20260422091500
OBX|4|ST|18906-8^Cefazolin susceptibility^LN|1.2|S||S|||F|||20260422091500
OBX|5|ST|18928-2^Ciprofloxacin susceptibility^LN|1.3|R||R|||F|||20260422091500
OBX|6|ST|18996-9^Nitrofurantoin susceptibility^LN|1.4|S||S|||F|||20260422091500
OBX|7|ST|18903-5^Trimethoprim/Sulfamethoxazole susceptibility^LN|1.5|S||S|||F|||20260422091500
NTE|1|L|Isolate sensitive to recommended oral therapy. Resistance to ciprofloxacin noted.

10. Mirth Connect Lab Channel Patterns

10.1 Outbound order channel (EHR to LIS)

// Source: JavaScript reader from EHR DB or DB listener on order-submission table
// Transformer builds ORM
var orm = 'MSH|^~\\&|EPIC|GENERAL_HOSP|LAB|LAB_FACILITY|' +
         dateFormat(new Date(),'yyyyMMddHHmmss') + '||ORM^O01^ORM_O01|' +
         UUIDGenerator.getUUID() + '|P|2.5\r' +
  'PID|1||' + $('mrn') + '^^^GENERAL_HOSP^MR||' + $('familyName') + '^' + $('givenName') +
    '||' + $('dob') + '|' + $('sex') + '\r' +
  'ORC|NW|' + $('placerOrderId') + '^EPIC|||||^^^' + $('requestedDate') + '^^R||' +
    dateFormat(new Date(),'yyyyMMddHHmmss') + '|' + $('orderingProviderNpi') + '^' +
    $('orderingProviderLastName') + '\r' +
  'OBR|1|' + $('placerOrderId') + '^EPIC||' + $('testCode') + '^' + $('testName') + '^L';

// Destination: MLLP to LIS
channelMap.put('message', orm);

10.2 Inbound result channel (LIS to EHR)

  • Source: MLLP listener.
  • Filter: Accept only ORU^R01.
  • Preprocessor: Log raw, extract fillerOrderId, testCode, resultStatus.
  • Transformer: Iterate OBX, build structured result rows.
  • Destination 1: EHR database writer (JDBC).
  • Destination 2: Critical-value alerting (webhook to on-call paging).
  • Destination 3: FHIR Observation POST to FHIR server.
// Transformer - iterate OBX segments
var m = new XML(message);
var obxSegments = m..OBX;
var results = [];
for (var i = 0; i < obxSegments.length(); i++) {
  var obx = obxSegments[i];
  results.push({
    setId: obx['OBX.1'].toString(),
    valueType: obx['OBX.2'].toString(),
    loinc: obx['OBX.3']['OBX.3.1'].toString(),
    loincDisplay: obx['OBX.3']['OBX.3.2'].toString(),
    value: obx['OBX.5'].toString(),
    units: obx['OBX.6']['OBX.6.1'].toString(),
    refRange: obx['OBX.7'].toString(),
    abnormalFlag: obx['OBX.8'].toString(),
    resultStatus: obx['OBX.11'].toString(),
    observationDt: obx['OBX.14']['OBX.14.1'].toString()
  });
}
channelMap.put('results', JSON.stringify(results));

// Critical value branch
for (var j = 0; j < results.length; j++) {
  if (results[j].abnormalFlag === 'HH' || results[j].abnormalFlag === 'LL') {
    channelMap.put('criticalValueFlag', true);
    break;
  }
}

10.3 Handling corrections

// In the DB writer destination
if (msg..ORC['ORC.1'].toString() === 'CR') {
  // This is a corrected result - overlay
  channelMap.put('sqlOperation', 'UPDATE');
  channelMap.put('isCorrection', true);
} else {
  channelMap.put('sqlOperation', 'UPSERT');
  channelMap.put('isCorrection', false);
}

11. Common Lab Integration Pitfalls

11.1 Local test codes instead of LOINC

Many LIS systems default to local mnemonics (GLUC, TSH, HGB) in OBX-3 without LOINC. Insist on LOINC in the interface spec; local codes break every downstream reporting and CMS initiative.

11.2 Duplicate results on corrections

Receivers that insert instead of upsert end up with two glucose values (98 and 188) both displayed. See our common HL7 integration errors post for more.

11.3 Wrong timezone on OBR-7/OBX-14

Some LIS systems send timestamps in local time without offset. Results appear 3-5 hours off. Always negotiate timezone handling with the LIS vendor and normalize to UTC at ingestion.

11.4 Missing ACKs

A silent failure mode: Mirth accepts the result but never persists it. Always return application-level ACK (AA) only after durable persistence. See HL7 ACK/NAK explained.

11.5 Mishandling microbiology sub-IDs

Parent-child OBX via OBX-4 is often treated as a simple list. The result: a urine culture with E. coli and sensitivities becomes 8 disconnected rows in the EHR.

11.6 Free-text overflow in OBX-5

Some narrative reports (anatomic pathology, cytology) come as long TX values. Ensure your downstream can handle multi-kilobyte OBX-5 and does not truncate.

11.7 Ignoring OBR-29 parent result identifier

Reflex testing is invisible without parent-result linking. Make sure your model exposes the parent-child relationship.

12. Frequently Asked Questions

What is the difference between ORM and ORU?

ORM^O01 is the order message — EHR to lab, asking for a test to be performed. ORU^R01 is the result message — lab back to EHR, reporting the answer. One clinical order may generate multiple ORU messages over time as preliminary, corrected, and final results flow in.

What is the difference between OBR and ORC?

ORC is the common order segment — it carries order control information that is common across order message types (order status, order number, ordering provider, entered by, timing). OBR is the observation request — it carries the lab-specific information (what test, what specimen, what priority). Both appear in ORM and ORU messages.

What does ORC-1 = CR mean?

ORC-1 = CR means this is a corrected result. The lab is updating a previously reported result, usually because the original was wrong or has been re-verified. Downstream EHRs must overlay the new value on the old one and show the correction, not duplicate or lose the original record.

What field contains the LOINC code?

OBX-3 carries the observation identifier. In modern US labs this is a LOINC code — e.g., 2093-3 for cholesterol, 718-7 for hemoglobin, 2339-0 for glucose. The value is in OBX-5 and the units in OBX-6. LOINC adoption is a CMS requirement for many reporting programs.

Where are the reference ranges?

OBX-7 carries the reference range as a display string (e.g., 135-145 mmol/L). OBX-8 carries the abnormal flag (L, H, HH, LL, N, A). The actual numeric low/high bounds are not separately coded in v2 — the free-text OBX-7 is what you parse for display.

How do I represent a microbiology culture in HL7?

Microbiology uses parent-child OBX structure. A parent OBX describes the organism identified; child OBX segments describe the susceptibilities for each antibiotic. OBX-4 (Observation Sub-ID) ties children to their parent. Sensitivity interpretations use flags S (susceptible), I (intermediate), R (resistant).

What is a reflex test and how does it appear in HL7?

A reflex test is automatically ordered based on an initial result — e.g., a positive RPR reflexes to a confirmatory TPPA. In HL7, the reflex appears as a new OBR under the same ORC, or a separate OBR referencing the parent via OBR-29 (parent result identifier).

How do preliminary and final results interact?

A preliminary result (OBR-25 = P) is provisional — the tech has a reading but it is not verified. A final (F) supersedes the preliminary. Your EHR should display only the final once received; it should not show both. Corrected (C) supersedes final.

Related Reading

Planning a lab interface?

EHR to reference lab, EHR to in-house LIS, LIS to HIE — we have built and operate dozens of HL7 lab pipelines for US hospitals, reference labs, and specialty practices. LOINC mapping, critical value alerting, FHIR Observation bridges, and corrected-result handling are daily work.

  • ORM^O01 and ORU^R01 channel design and deployment
  • LOINC mapping and reference-range management
  • Corrected result and reflex handling
  • Lab-to-FHIR ServiceRequest and Observation bridges
Contact Us

Describe your lab integration

Tell us about the source, destination, expected volume, and any LOINC/critical-value requirements. We'll respond within one business day.

What is 3 + 9 ?