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

HL7 Table HL70438: Allergy Clinical Status

HL70438 is the HL7-defined code table that answers how confidently a recorded allergy has been clinically verified. It is the binding for IAM-13 Allergy Clinical Status on the IAM patient-adverse-reaction segment, introduced in HL7 v2.4. The five-code set lets receiving systems distinguish a lab-confirmed peanut allergy from a self-reported one — a distinction that matters for decision support, anesthesia pre-op review, and immunotherapy planning.

Purpose

HL70438 captures the verification state of an allergy: is it confirmed, refuted, still pending workup, merely suspected, or simply unknown? The codes describe the evidence behind the allergy assertion, not its severity (HL70128) or its substance class (HL70127). A C Confirmed peanut allergy and an S Suspect peanut allergy carry the same FA allergen type and may carry the same severity; the difference is how much weight a clinician should give the assertion when making a treatment decision.

Because HL70438 is HL7-defined, every conformant v2 receiver is expected to recognize all five codes without local extension. Sites that need richer verification semantics (for example, "confirmed by skin test" vs "confirmed by oral challenge") carry that detail on a separate observation linked to the allergy rather than coining new HL70438 codes.

Where it's used

  • IAM-13 Allergy Clinical Status — the canonical home of HL70438, populated on every modern patient-allergy segment.
  • A handful of derivative profiles that copy IAM-13 semantics onto problem-list or pre-op-checklist segments.

Code list

CodeDisplayComment/Description
CConfirmed (verified)The allergy has been clinically verified — by oral challenge, skin test, lab assay, or documented clinical reaction.
DDoubt raisedA clinician has actively questioned the allergy; the assertion is suspected to be incorrect but has not yet been formally refuted.
PPendingThe allergy is being investigated; workup is in progress and a definitive status has not been determined.
SSuspectThe allergy is suspected — usually self-reported by the patient — but has not been confirmed.
UUnknownThe verification state is not known or has not been recorded.

Code system OID

  • OID: 2.16.840.1.113883.18.281
  • Canonical URI: http://terminology.hl7.org/CodeSystem/v2-0438

The OID resolves on the HL7 Terminology server and is the value Vorro emits in CWE.14 when a downstream profile demands OID-bound coded values for IAM-13.

HL7-defined vs user-defined

HL70438 is HL7-defined. The table number falls inside the HL7-reserved range (HL70001–HL70999) and the code set is normative — receivers must accept all five values without local extension, and senders must not invent additional codes. Sites that need richer verification semantics layer that onto a separate observation (allergy challenge test result, skin test result) rather than extending HL70438.

Version differences

  • v2.4 — HL70438 introduced alongside the IAM segment for the first formal patient-adverse-reaction profile. Initial values: C, S, U.
  • v2.5P (Pending) added so allergies under active workup could be distinguished from never-investigated S (Suspect) and definitively-investigated C (Confirmed).
  • v2.6D (Doubt raised) added to capture the common clinical workflow where a previously-confirmed allergy is being actively questioned.
  • v2.7 – v2.8.1 — Set frozen at five codes; no further additions.
  • v2.9 — Table unchanged. FHIR mapping clarified in the v2-to-FHIR IG to handle the S/D distinction that has no direct FHIR equivalent.

Common mistakes

  • Sending C for every allergy because the EHR has no UI for verification status. Confirmation has a specific clinical meaning (test or documented reaction); using S (Suspect) for self-reported allergies is the correct default.
  • Confusing S (Suspect) with D (Doubt raised). S is the initial state of a self-reported allergy that has not yet been investigated; D is the active state of a previously-recorded allergy that a clinician is now questioning.
  • Treating U (Unknown) as equivalent to S (Suspect). U says "we have no information about verification"; S says "this is reported but unverified." They have different downstream consequences for decision support.
  • Mapping D to FHIR refuted. D is "doubt raised" — the refutation is not yet complete. The correct FHIR mapping is unconfirmed with a doubt-raised qualifier; full refutation lives in a separate workflow.
  • Extending HL70438 locally with R for "refuted." HL70438 has no refuted code; a refuted allergy should be marked entered-in-error on the FHIR side or removed from the active allergy list on the v2 side via a delete IAM segment.

Examples

A minimal IAM reporting a confirmed peanut allergy:

IAM|1||FA^Food Allergy^HL70127|762952008^Peanut^SCT|SV^Severe^HL70128|||||C^Confirmed^HL70438

A self-reported, unverified penicillin allergy:

IAM|2||DA^Drug Allergy^HL70127|7980^Penicillin^RXNORM|MO^Moderate^HL70128|||||S^Suspect^HL70438

A previously-confirmed allergy that a clinician is now questioning:

IAM|3||DA^Drug Allergy^HL70127|7980^Penicillin^RXNORM|MO^Moderate^HL70128|||||D^Doubt raised^HL70438

Same confirmed peanut allergy translated to a FHIR AllergyIntolerance snippet:

{
  "resourceType": "AllergyIntolerance",
  "id": "ai-10456-peanut",
  "clinicalStatus": {
    "coding": [{
      "system": "http://terminology.hl7.org/CodeSystem/allergyintolerance-clinical",
      "code": "active"
    }]
  },
  "verificationStatus": {
    "coding": [{
      "system": "http://terminology.hl7.org/CodeSystem/allergyintolerance-verification",
      "code": "confirmed"
    }]
  },
  "category": ["food"],
  "code": {
    "coding": [{
      "system": "http://snomed.info/sct",
      "code": "762952008",
      "display": "Peanut"
    }]
  },
  "patient": {"reference": "Patient/10456"}
}

Mapping failure example — unknown verification code:

IAM|1||FA^Food Allergy^HL70127|762952008^Peanut^SCT|SV^Severe^HL70128|||||R^Refuted^L

R is not in HL70438. A conformant engine should route the message to a curation queue, preserve the original R in the audit log, and either emit FHIR verificationStatus of refuted (recognizing the intent) or treat the message as a delete signal — but never silently drop the allergy.

FHIR mapping

The v2-to-FHIR IG does not publish a ConceptMap for this table; the mapping below follows the obvious correspondence, mapping HL70438 onto the FHIR allergyintolerance-verification value set:

HL7 v2 (HL70438)FHIR (allergyintolerance-verification)Notes
CconfirmedDirect match.
DunconfirmedLossy — doubt-raised nuance preserved as extension.
PunconfirmedLossy — pending-workup nuance preserved as extension.
SunconfirmedLossy — suspect-but-not-investigated nuance preserved as extension.
U(null)No FHIR equivalent; emit verificationStatus absent with a data-absent-reason extension.

AllergyIntolerance.verificationStatus is a CodeableConcept bound to http://terminology.hl7.org/ValueSet/allergyintolerance-verification. Because three v2 codes (D, P, S) all map to FHIR unconfirmed, the original HL70438 code must be preserved as an extension if the receiver needs to round-trip back to HL7 v2.

Engine considerations

  • Single-character validation — IAM-13 codes are exactly one character; reject longer payloads.
  • Case sensitivity — HL70438 codes are uppercase; c is not valid. Normalize on ingest.
  • CWE upgrade path — In v2.7+ profiles IAM-13 is CWE with OID metadata in CWE.14 (2.16.840.1.113883.18.281). Engines must handle both IS and CWE shapes.
  • Round-trip preservation — When mapping D/P/S to FHIR unconfirmed, always store the original HL70438 code as an extension so the outbound v2 channel can restore the distinction.
  • Default policy — When an EHR omits IAM-13, do not default to C (Confirmed). The safe default is U (Unknown) or S (Suspect); silent promotion to Confirmed has caused real adverse events in production interfaces.

How Vorro handles HL70438

Vorro validates IAM-13 against the five HL70438 codes on ingest. Values that match are forwarded to all downstream channels untouched. Values that fail validation — including lowercase variants, vendor extensions like R for refuted, and accidental display strings — are routed to the terminology curation queue, where they either resolve to one of the five canonical codes (and a remap rule is created) or pass through with a soft warning.

On outbound to FHIR, Vorro emits the IG-recommended verificationStatus value and attaches the original HL70438 code as an extension so round-trip back to v2 is lossless. Null IAM-13 values are never silently promoted to C — they are emitted as FHIR verificationStatus absent with a data-absent-reason extension, preserving the safety property that an unverified allergy never appears confirmed to downstream decision-support engines.

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 HL70438: Allergy Clinical Status | Vorro Academy | Vorro