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

HL7 OBX Segment: Observation / Result

The OBX segment carries one observation — one lab analyte, one vital sign, one document line, one discrete result. Its design is a small self-describing record: OBX-2 (value type) tells you how to read OBX-5 (the value), OBX-3 says what was observed (usually a LOINC code), OBX-6 gives units, OBX-7 the reference range, OBX-8 the abnormal flag, and OBX-11 the status. Multiple OBX segments stack under one OBR to form a full result report.

Purpose

OBX carries a single observation and describes how to interpret it. OBX-2 declares the data type of the value in OBX-5, OBX-3 identifies what was observed, and OBX-11 reports the result status. Stacked OBX segments under an OBR make up a complete report.

Used in

OBX appears wherever discrete results or observations are reported: ORU (lab and clinical results — its primary home), ORM/OML (order-associated observations), MDM (document content), VXU (immunization observations), REF (referrals), and DFT. See ORU, ORM, MDM, and VXU.

Field-by-field reference

Source: official HL7 v2-to-FHIR IG. R = required (cardinality min ≥ 1). Repeat = field may repeat. Length pending authoritative v2.5.1 data.

SeqNameData TypeLengthReqRepeatTable #Description
OBX-1Set ID – OBXSIOSequence number within the OBR group (1, 2, ...).
OBX-2Value TypeIDOHL70125Type of OBX-5: NM, ST, CWE, TX, SN, DT, ED, etc. Controls how OBX-5 is read.
OBX-3Observation IdentifierCWERWhat was observed — usually a LOINC code, e.g. 718-7^Hemoglobin^LN.
OBX-4Observation Sub-IDOGODistinguishes repeated OBX with the same OBX-3; groups related results.
OBX-5Observation ValuevariesOYThe value. Its data type is whatever OBX-2 declares.
OBX-6UnitsCWEOUnits of measure (prefer UCUM), e.g. g/dL.
OBX-7References RangeSTONormal or reference range as text, e.g. 13.0-17.0.
OBX-8Interpretation CodesCWEOYHL70078Abnormal flags: N, H, L, HH, LL, A, etc.
OBX-9ProbabilityNMOProbability of an interpretation.
OBX-10Nature of Abnormal TestIDOYHL70080Nature of the abnormal test.
OBX-11Observation Result StatusIDRHL70085F final, P preliminary, C corrected, X cannot obtain, etc.
OBX-12Effective Date of Reference RangeDTMOWhen the reference range applies.
OBX-13User Defined Access ChecksSTOSite-specific.
OBX-14Date/Time of the ObservationDTMOWhen the observation was made.
OBX-15Producer's IDCWEOProducing lab or section.
OBX-16Responsible ObserverXCNOYPerson who performed or verified.
OBX-17Observation MethodCWEOYMethod or instrument used.
OBX-18Equipment Instance IdentifierEIOYDevice or instrument identifier.
OBX-19Date/Time of the AnalysisDTMOWhen analysis ran.
OBX-20Observation SiteCWEOYBody site.
OBX-21Observation Instance IdentifierEIOUnique id for this observation instance.
OBX-22Mood CodeCNEOHL70725Mood (rarely used).
OBX-23Performing Organization NameXONOPerforming org.
OBX-24Performing Organization AddressXADOPerforming org address.
OBX-25Performing Organization Medical DirectorXCNOMedical director.
OBX-26Patient Results Release CategoryIDOHL70909Release category.
OBX-27Root CauseCWEORoot cause (corrections).
OBX-28Local Process ControlCWEOYLocal process control.
OBX-29Observation TypeIDOHL70936Observation category.
OBX-30Observation Sub-TypeIDOHL70937Observation sub-type.
OBX-31Action CodeIDOHL70206Add, update, or delete action.
OBX-32Observation Value Absent ReasonCWEOYWhy a value is absent.
OBX-33Observation Related Specimen IdentifierEIPOYRelated specimen.

Most-used fields

OBX-2 Value Type is the switch. NM numeric, ST/TX text, CWE/CE coded, SN structured numeric (e.g. >^100), DT/TM/TS dates, ED encapsulated data (e.g. a PDF). You must read OBX-2 before OBX-5, because OBX-5's data type changes per row.

OBX-3 Observation Identifier is the what. It is usually LOINC: 718-7^Hemoglobin^LN. The third component is the coding system (LN is LOINC).

OBX-5 Observation Value is the result itself; it repeats for multi-part values. OBX-11 Result Status — P preliminary versus F final versus C corrected — drives whether a result should display, alert, or supersede a prior one.

Version differences (2.3 to 2.8.2)

  • 2.3/2.3.1: OBX-3 and OBX-6 used data type CE; coded fields were CE.
  • 2.5+: coded fields migrate from CE to CWE; OBX gains fields through OBX-17/18.
  • 2.7: OBX extended to OBX-25 (performing-org details).
  • 2.8 / 2.8.2: OBX extended to OBX-33 (observation type and sub-type, action code, value-absent reason, related specimen). Older receivers ignore trailing fields.
  • Across versions, interpret OBX-2 against the version — CE versus CWE parsing differs.

Common mistakes

  • Parsing OBX-5 with a fixed data type instead of branching on OBX-2.
  • Treating a P (preliminary) result as final and not replacing it when the F/C arrives.
  • Ignoring OBX-4 (Sub-ID) and collapsing grouped or repeating observations into one.
  • Assuming units are UCUM — many feeds send free-text units in OBX-6.

Examples

Minimal valid OBX (numeric result):

OBX|1|NM|718-7^Hemoglobin^LN||13.5|g/dL|13.0-17.0|N|||F

Fully-populated OBX (with method, observer, datetime):

OBX|1|NM|718-7^Hemoglobin^LN^^^^2.74||13.5|g/dL^gram per deciliter^UCUM|13.0-17.0|N|||F|||20260609130000|LAB01|SMITH^ANNA^^^^DR|Automated count^^L

Annotated breakdown of the minimal example:

OBX                  ← segment ID
1                    ← OBX-1  Set ID
NM                   ← OBX-2  Value Type (numeric) — tells us how to read OBX-5
718-7^Hemoglobin^LN  ← OBX-3  Observation Identifier (LOINC code^name^system)
                     ← OBX-4  empty (Sub-ID)
13.5                 ← OBX-5  Observation Value (read as a number per OBX-2)
g/dL                 ← OBX-6  Units
13.0-17.0            ← OBX-7  Reference Range
N                    ← OBX-8  Interpretation (Normal)
                     ← OBX-9, OBX-10 empty
F                    ← OBX-11 Result Status (Final)

In-context inside an ORU^R01 (CBC result, multiple OBX under one OBR):

MSH|^~&|LAB|HOSP_B|EHR|HOSP_A|20260609131500||ORU^R01^ORU_R01|CTRL-9931|P|2.5.1
PID|1||123456^^^HOSP^MR||DOE^JOHN^A||19800101|M
OBR|1||ORD123|CBC^Complete Blood Count^L|||20260609130000
OBX|1|NM|718-7^Hemoglobin^LN||13.5|g/dL|13.0-17.0|N|||F
OBX|2|NM|4544-3^Hematocrit^LN||40.1|%|38.0-50.0|N|||F
OBX|3|NM|6690-2^WBC^LN||11.8|10*3/uL|4.0-11.0|H|||F

In-context inside an MDM^T02 (document with embedded text OBX):

MSH|^~&|DOCMGR|HOSP_A|EHR|HOSP_A|20260609140000||MDM^T02^MDM_T02|DOC-5521|P|2.5.1
PID|1||123456^^^HOSP^MR||DOE^JOHN^A||19800101|M
TXA|1|CN^Consultation Note|TX||||20260609135500
OBX|1|TX|11488-4^Consultation Note^LN||Patient presents with...|||||F

FHIR mapping

Target resources: Observation (primary), and DocumentReference when carrying document content. Official ConceptMaps: ConceptMap-segment-obx-to-observation (JSON) and ConceptMap-segment-obx-to-documentreference.

OBX fieldFHIR target
OBX-3 Observation IdentifierObservation.code
OBX-4 Observation Sub-IDObservation.partOf / hasMember / derivedFrom
OBX-5 Observation ValueObservation.value[x] (type depends on OBX-2)
OBX-6 UnitsObservation.valueQuantity (with OBX-5 when numeric)
OBX-7 References RangeObservation.referenceRange.text
OBX-8 Interpretation CodesObservation.interpretation
OBX-11 Result StatusObservation.status
OBX-14 Date/Time of ObservationObservation.effectiveDateTime
OBX-15/23 Producer / Performing OrgObservation.performer (Organization)
OBX-16 Responsible ObserverObservation.performer (PractitionerRole)
OBX-17 Observation MethodObservation.method
OBX-18 Equipment Instance IdObservation.device
OBX-20 Observation SiteObservation.bodySite
OBX-21 Observation Instance IdObservation.identifier
OBX-29 Observation TypeObservation.category
OBX-33 Related SpecimenObservation.specimen

OBX-5 is conditional: its FHIR target (valueQuantity, valueString, valueCodeableConcept, valueRange, valuePeriod, valueAttachment, and so on) is chosen entirely from OBX-2. Not mapped: OBX-1, OBX-9, OBX-12, OBX-13, OBX-22, OBX-26, OBX-27, OBX-28, OBX-31, OBX-32.

Engine considerations

  • Branch on OBX-2 before reading OBX-5. A numeric parser pointed at an ED (PDF) value or an SN (>^100) value will throw or silently corrupt data.
  • Required in practice: OBX-3 and OBX-11 are required; most lab interfaces also require OBX-2, OBX-5, and OBX-14.
  • Status transitions: honor OBX-11 — a later C (corrected) must supersede an earlier F/P for the same OBX-3 and OBX-4, not append a duplicate.
  • Escape pitfalls: text values (TX/FT) frequently contain |, ^, &, and newlines; these must be escaped (F, S, T, .br) or they shatter the segment.

How Vorro parses and produces OBX

Vorro reads OBX-2 to select the value decoder for OBX-5, preserving repetitions and structured (SN) and encapsulated (ED) values without lossy coercion. Grouped results are kept together by OBX-4 Sub-ID, and status logic uses OBX-11 so corrected results replace rather than duplicate prior values — producing clean Observation.value[x] and Observation.status on the FHIR side.

  • OBR — the order/observation request that groups OBX segments.
  • ORC — the common order segment that precedes OBR.
  • ORU messages — the result message where OBX lives.

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
HL7 OBX Segment: Observation / Result | Vorro Academy | Vorro