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:
- Provider places an order in the EHR. The EHR generates an
ORM^O01message and sends it to the LIS. - LIS accepts the order, returns an acknowledgement (ACK), and queues the work.
- Phlebotomy collects the specimen. LIS may send an
OUL^R21(unsolicited observation) for specimen collected, depending on the vendor. - Instrument runs the test. Result is captured by LIS, typically as preliminary (
OBR-25 = P). - LIS sends the preliminary
ORU^R01back to the EHR. - Tech verifies. LIS sends final
ORU^R01withOBR-25 = F. - If correction needed later: LIS sends
ORU^R01withORC-1 = CRandOBR-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 HOURSOrdering 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|||202604210945003. OBR and ORC Segments
ORC - Common Order
Key ORC fields:
- ORC-1 Order control code — the action being taken (
NWnew,CAcancel,DCdiscontinue,CRcorrected, 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
| Code | Meaning |
|---|---|
| NW | New order |
| OK | Order accepted and OK |
| OC | Order cancelled |
| CA | Cancel order request |
| OD | Order discontinued |
| DC | Discontinue order request |
| OR | Released that is no longer on hold |
| HD | Hold order request |
| RE | Observations/Performed Service to follow |
| RF | Refill order request |
| RP | Order has been replaced by |
| SC | Status changed |
| CR | Corrected (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
| Code | Meaning |
|---|---|
| O | Order received (specimen not yet received by lab) |
| I | No results available; specimen received, procedure incomplete |
| S | No results available; procedure scheduled, but not done |
| A | Some, but not all, results available |
| P | Preliminary - verified by a tech but not yet finalized |
| C | Corrected, final |
| R | Results stored, not yet verified |
| F | Final results; results stored and verified. Can only be changed with a corrected result |
| X | No results available; order canceled |
| Y | No order on record for this test |
| Z | No 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|||20260421134500Full 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|||F5. 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 (
NMnumeric,STstring,TXtext,CEcoded element,SNstructured numeric,EDencapsulated data,DTdate,TStimestamp) - 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
| LOINC | Test |
|---|---|
| 2345-7 | Glucose [Mass/volume] in Serum or Plasma |
| 718-7 | Hemoglobin [Mass/volume] in Blood |
| 2160-0 | Creatinine [Mass/volume] in Serum or Plasma |
| 2093-3 | Cholesterol [Mass/volume] in Serum or Plasma |
| 2339-0 | Glucose [Mass/volume] in Blood |
| 777-3 | Platelets [#/volume] in Blood |
| 6690-2 | Leukocytes [#/volume] in Blood |
| 6301-6 | INR in Platelet poor plasma by Coagulation assay |
| 10834-0 | Globulin [Mass/volume] in Serum by calculation |
| 33914-3 | Glomerular filtration rate/1.73 sq M.predicted |
| 6598-7 | Troponin T.cardiac [Mass/volume] in Serum or Plasma |
| 89579-7 | Troponin 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).
| Flag | Meaning |
|---|---|
| L | Below low normal |
| H | Above high normal |
| LL | Below lower panic limit (critical low) |
| HH | Above upper panic limit (critical high) |
| < | Below absolute low-off instrument scale |
| > | Above absolute high-off instrument scale |
| N | Normal (for non-numeric observations) |
| A | Abnormal (general) |
| AA | Very abnormal (panic) |
| R | Resistant (for micro susceptibilities) |
| S | Susceptible |
| I | Intermediate |
| W | Worse |
| B | Better |
| U | Significant change up |
| D | Significant 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 verified7. 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^LAB8. 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 drawReceiver-side correction handling
- Key results by
ORC-3(filler order number) +OBX-3(LOINC), not by placer order number alone. - When
ORC-1 = CRorOBX-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|20260421100300Microbiology - 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
- HL7 Integration: The Complete Guide
- FHIR Integration Guide
- EHR Integration Guide
- Healthcare Interoperability Guide
- Mirth Connect: The Complete Guide
- HL7 v2 Message Structure Explained
- HL7 v2 vs v3 vs FHIR
- HL7 ACK/NAK Explained
- MLLP Protocol Explained
- HL7 Testing Tools & Sample Messages
- Common HL7 Integration Errors
- HL7 ADT Messages Complete Reference
- HL7 SIU Scheduling Messages
- HL7 MDM Document Messages
- Mirth Connect MLLP Connection Refused
- Mirth Helpdesk
- Services
- Contact Us