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
| Code | Display | Comment/Description |
|---|---|---|
| C | Confirmed (verified) | The allergy has been clinically verified — by oral challenge, skin test, lab assay, or documented clinical reaction. |
| D | Doubt raised | A clinician has actively questioned the allergy; the assertion is suspected to be incorrect but has not yet been formally refuted. |
| P | Pending | The allergy is being investigated; workup is in progress and a definitive status has not been determined. |
| S | Suspect | The allergy is suspected — usually self-reported by the patient — but has not been confirmed. |
| U | Unknown | The 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.5 —
P(Pending) added so allergies under active workup could be distinguished from never-investigatedS(Suspect) and definitively-investigatedC(Confirmed). - v2.6 —
D(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/Ddistinction that has no direct FHIR equivalent.
Common mistakes
- Sending
Cfor every allergy because the EHR has no UI for verification status. Confirmation has a specific clinical meaning (test or documented reaction); usingS(Suspect) for self-reported allergies is the correct default. - Confusing
S(Suspect) withD(Doubt raised).Sis the initial state of a self-reported allergy that has not yet been investigated;Dis the active state of a previously-recorded allergy that a clinician is now questioning. - Treating
U(Unknown) as equivalent toS(Suspect).Usays "we have no information about verification";Ssays "this is reported but unverified." They have different downstream consequences for decision support. - Mapping
Dto FHIRrefuted.Dis "doubt raised" — the refutation is not yet complete. The correct FHIR mapping isunconfirmedwith a doubt-raised qualifier; full refutation lives in a separate workflow. - Extending HL70438 locally with
Rfor "refuted." HL70438 has no refuted code; a refuted allergy should be markedentered-in-erroron 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 |
|---|---|---|
| C | confirmed | Direct match. |
| D | unconfirmed | Lossy — doubt-raised nuance preserved as extension. |
| P | unconfirmed | Lossy — pending-workup nuance preserved as extension. |
| S | unconfirmed | Lossy — 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;
cis 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/Sto FHIRunconfirmed, 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 isU(Unknown) orS(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.
Related pages
- IAM segment — Patient Adverse Reaction Information
- HL70127 code table — Allergen Type
- HL70128 code table — Allergy Severity
