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

HL7 Table HL70080: Nature of Abnormal Testing

HL70080 explains how the abnormal range emitted in OBX-7 was derived — was it stratified by age, by sex, by race, by species, or by nothing at all. The table is small (six codes) but it does important work: it tells the receiving system that an "H" abnormal flag against a creatinine result reflects an age-and-sex-adjusted threshold, not a generic adult range. The codes are short ID values drawn from the ID data type and have been stable since v2.3.

Purpose

HL70080 records the population basis on which the lab established the reference range carried by OBX-7. It is metadata about the range, not about the result. A single OBX may declare multiple natures — a creatinine reference range typically depends on both age and sex, so OBX-10 repeats with A and S. Veterinary labs additionally stratify by species and breed, which is why SP and B exist in the same table as the human-facing codes.

The field is descriptive, not algorithmic: HL70080 does not tell the receiver how to recompute the range, only which population dimensions the sending lab considered when it picked one.

Where it's used

  • OBX-10 Nature of Abnormal Test — the canonical and effectively only home of HL70080. The field is repeating, so a single observation may declare several natures at once (e.g. A~S for an age-and-sex-adjusted range).

Code list

CodeDisplayComment/Description
AAn age-based populationReference range stratified by patient age (pediatric, adult, geriatric bands).
BBreed (veterinary)Range chosen by animal breed; veterinary labs only.
NNone — generic normal rangeNo stratification; the range is the lab's generic adult normal.
RA race-based populationRange stratified by patient race (rare in modern practice, retained for legacy compatibility).
SA sex-based populationRange stratified by administrative or biological sex.
SPSpecies (veterinary)Range chosen by animal species; veterinary labs only.

Code system OID

  • OID: 2.16.840.1.113883.18.26
  • Canonical URI: http://terminology.hl7.org/CodeSystem/v2-0080

The OID is published on the HL7 Terminology server and is the value Vorro emits when a profile requires OID-bound coded metadata on OBX-10.

HL7-defined vs user-defined

HL70080 is HL7-defined. The table number falls inside the HL7-reserved range (HL70001–HL70999), the code set is normative, and receivers must accept all six values without local extension. Sites that need a richer stratification (BMI band, gestational age, pregnancy status) cannot extend HL70080 — they instead carry the additional metadata in a separate observation or in the reference-range comment field.

Version differences

  • v2.2 – v2.3 — Four values present: A, N, R, S.
  • v2.3.1 — Veterinary codes B (Breed) and SP (Species) added to support veterinary lab integrations.
  • v2.4 – v2.8.1 — Set frozen at six codes; no further additions, no deprecations.
  • v2.9 — HL70080 unchanged. FHIR cross-mapping discussion is ongoing but no normative ConceptMap has been published.

Common mistakes

  • Sending the display word in OBX-10 — Age instead of A. OBX-10 carries the code, not the label.
  • Treating OBX-10 as non-repeating. The field is ID repeating; an age-and-sex-adjusted range legitimately emits A~S and the receiver must accept both.
  • Defaulting to N (None) when the range actually was stratified, just because the LIS does not expose the stratification metadata. N is an affirmative claim of "no stratification," not a fallback for "unknown."
  • Confusing HL70080 with HL70078 Abnormal Flags. HL70078 says whether a value is abnormal (H, L, HH); HL70080 says how the threshold was set.
  • Extending HL70080 locally with BMI, PREG, or GA codes. HL70080 is HL7-defined and locally invented codes will fail conformance and downstream FHIR mapping.

Examples

A creatinine OBX with an age-and-sex-stratified range — OBX-10 repeats:

OBX|1|NM|2160-0^Creatinine^LN||1.4|mg/dL|0.7-1.3|H|||F|||20260610|||A~S

A veterinary canine ALT result where the range depends on species and breed:

OBX|1|NM|1742-6^ALT^LN||95|U/L|10-100|N|||F|||20260610|||SP~B

Same age-stratified concept rendered as a FHIR Observation.referenceRange snippet:

{
  "referenceRange": [{
    "low":  { "value": 0.7, "unit": "mg/dL" },
    "high": { "value": 1.3, "unit": "mg/dL" },
    "appliesTo": [{
      "coding": [{
        "system": "http://terminology.hl7.org/CodeSystem/v2-0080",
        "code": "A",
        "display": "An age-based population"
      }]
    }],
    "age": { "low": { "value": 18, "unit": "a" }, "high": { "value": 65, "unit": "a" } }
  }]
}

Mapping failure example — unknown code:

OBX|1|NM|2160-0^Creatinine^LN||1.4|mg/dL|0.7-1.3|H|||F|||20260610|||BMI

BMI is not in HL70080. A conformant engine should route the message to a terminology curation queue, preserve the original BMI in the audit log, and either drop OBX-10 with a warning or hold the message pending operator review — silently emitting N would misrepresent the lab's intent.

FHIR mapping

The v2-to-FHIR Implementation Guide does not publish a normative ConceptMap for HL70080 because FHIR Observation.referenceRange already exposes the relevant axes as structured fields: referenceRange.age for age stratification, referenceRange.appliesTo for everything else. The conventional mapping is:

HL7 v2 (HL70080)FHIR target
AreferenceRange.age populated, plus appliesTo Coding for round-trip
SappliesTo Coding bound to administrative-gender or sex-for-clinical-use
RappliesTo Coding bound to a race ValueSet
BappliesTo Coding bound to a veterinary breed ValueSet
SPappliesTo Coding bound to a species ValueSet
NappliesTo omitted

Because FHIR has no single ValueSet that covers all five non-N axes, round-trip integrators typically preserve the original HL70080 code as an extension on referenceRange.

Engine considerations

  • Repeating field — OBX-10 is ID repeating. Engines that flatten the field to a single value will lose the age-and-sex case, which is the single most common real-world pattern.
  • Case sensitivity — HL70080 codes are case-sensitive uppercase. sp is not valid.
  • Veterinary routingB and SP should only appear on veterinary feeds; their presence on a human-care channel is a strong signal of a mis-routed message and Vorro flags it.
  • Round-trip preservation — When mapping to FHIR referenceRange, store the original HL70080 code as an extension so the outbound v2 channel can restore the exact repeating set.

How Vorro handles HL70080

Vorro validates OBX-10 against the six HL70080 codes on ingest, repetition by repetition. Values that match are forwarded unchanged. Veterinary codes (B, SP) on a feed declared as human-care are flagged and routed to operations for review. Unknown codes (BMI, PREG, vendor extensions) are quarantined in the terminology curation queue, where they either resolve to one of the six canonical codes plus a structured comment, or pass through with a soft warning so downstream systems are not silently fed unsupported stratification metadata.

On outbound, Vorro emits HL70080 as repeating ID for all v2 destinations and preserves the original code list as a FHIR extension on Observation.referenceRange so v2-to-FHIR-to-v2 round-trips do not lose stratification detail.

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 Table HL70080: Nature of Abnormal Testing | Vorro Academy | Vorro