HL70128 is a tiny but clinically important table — four codes that describe how severe an allergic reaction has been, or is expected to be. It sits behind AL1-4 Allergy Severity Code on every AL1 segment, and on the newer IAR-2 Allergy Severity Code (introduced in v2.6) on the IAR segment. The values are short two-character codes drawn from the IS data type — four total in v2.8.1, unchanged since v2.3.
Purpose
HL70128 carries the severity of the patient's documented allergic reaction. A receiver reads this code to decide how prominently to surface the allergy in the EHR (a SV peanut allergy gets a red banner; an MI cat allergy is a quiet note in the chart), to decide whether to fire decision-support alerts on prescribing, and to populate downstream FHIR AllergyIntolerance.reaction.severity elements.
The table answers one question — how bad — and is intentionally coarse. Subtler distinctions (life-threatening vs anaphylactic vs hospitalization-required) belong on adjacent fields like AL1-5 Allergy Reaction Code (HL70127) or in a structured observation, not on HL70128.
Where it's used
- AL1-4 Allergy Severity Code — the canonical home of HL70128, populated on every ADT message that carries an allergy list.
- IAR-2 Allergy Severity Code — same code set on the v2.6+ IAR (Patient Adverse Reaction) segment.
- IAM-11 Allergy Severity Code — the v2.6+ replacement for AL1, used on patient master-file and admission profiles that have migrated to the richer IAM segment.
Code list
| Code | Display | Comment/Description |
|---|---|---|
| MI | Mild | Reaction is bothersome but does not interfere with normal activity or require intervention. |
| MO | Moderate | Reaction interferes with normal activity or requires symptomatic treatment, but is not life-threatening. |
| SV | Severe | Reaction is life-threatening, requires emergency intervention, or has historically caused hospitalization. |
| U | Unknown | Severity is not recorded; receiver should treat the allergy as present but unprioritized. |
Code system OID
- OID:
2.16.840.1.113883.18.50 - Canonical URI:
http://terminology.hl7.org/CodeSystem/v2-0128
HL7-defined vs user-defined
HL70128 is HL7-defined. The four-code set is closed and normative — receivers must accept all four values without local extension, and senders must not invent additional codes inside this table. Sites that need a richer severity scale (life-threatening vs anaphylactic, for instance) must either carry the extra concept on AL1-5 (HL70127) or use the IAR segment's richer reaction model; they do not extend HL70128.
Version differences
- v2.1 – v2.2 — Table did not yet exist; AL1-4 was free text.
- v2.3 — Table introduced with the current four codes (
MI,MO,SV,U). Set has not changed since. - v2.4 – v2.5 — Set stable; AL1 segment slightly restructured but AL1-4 still binds to HL70128.
- v2.6 — IAR and IAM segments added with their own allergy severity fields, all bound to the same HL70128.
- v2.7 – v2.8.1 — Set stable; no additions or deprecations.
Common mistakes
- Treating "life-threatening" as a fifth code. HL70128 has exactly four values:
MI,MO,SV,U. Life-threatening reactions map toSV(Severe). Some legacy interfaces emitLTorLIFETHREATENINGas if it were a code — these are non-conformant and must be normalized toSVon ingest. - Using the display string instead of the code.
Mildis not valid in AL1-4;MIis. The field isIS-typed and expects the symbolic code. - Defaulting unknown severity to
MI.Uexists for this case. Defaulting toMIsilently downgrades severe allergies whose severity simply wasn't recorded at intake, which is clinically dangerous. - Confusing severity with criticality. HL70128 describes how bad a past reaction was. FHIR
AllergyIntolerance.criticalitydescribes how bad a future reaction is expected to be. The two are correlated but not identical, and a one-to-one mapping is wrong — Vorro maps HL70128 toreaction.severity, not tocriticality. - Extending HL70128 locally.
LT,AN,HOSP, vendor-specific values — all non-conformant. Use AL1-5 / IAR-3 reaction codes for richer reaction semantics. - Lowercase codes.
mi,mo,sv,uare not valid; HL70128 is case-sensitive uppercase.
Examples
A minimal AL1 with a severe peanut allergy:
AL1|1|FA|^Peanut|SV|Anaphylaxis|20200315
Mild seasonal allergy:
AL1|1|EA|^Pollen|MI|Sneezing, watery eyes
Unknown severity — patient knows they react to penicillin but can't remember how badly:
AL1|1|DA|^Penicillin|U|Rash (per patient recall)
A v2.6 IAM segment carrying the same severe peanut allergy:
IAM|1|FA|^Peanut^|SV|Anaphylaxis|20200315||A|||||CONFIRMED
FHIR projection — HL70128 SV → reaction-event-severity severe:
{
"resourceType": "AllergyIntolerance",
"patient": { "reference": "Patient/10456" },
"code": {
"coding": [{
"system": "http://www.nlm.nih.gov/research/umls/rxnorm",
"code": "1191",
"display": "Peanut"
}]
},
"reaction": [{
"manifestation": [{ "text": "Anaphylaxis" }],
"severity": "severe"
}]
}
When HL70128 is U, FHIR omits reaction.severity and applies a data-absent-reason extension:
{
"reaction": [{
"manifestation": [{ "text": "Rash (per patient recall)" }],
"_severity": {
"extension": [{
"url": "http://hl7.org/fhir/StructureDefinition/data-absent-reason",
"valueCode": "unknown"
}]
}
}]
}
FHIR mapping
The HL7 v2-to-FHIR Implementation Guide publishes ConceptMap-table-hl70128-to-reaction-event-severity, which maps three of the four HL70128 codes onto the FHIR reaction-event-severity ValueSet:
| HL7 v2 (HL70128) | FHIR (reaction-event-severity) |
|---|---|
| MI | mild |
| MO | moderate |
| SV | severe |
| U | (no target — omit element + data-absent-reason) |
AllergyIntolerance.reaction.severity is a code element bound to http://hl7.org/fhir/ValueSet/reaction-event-severity. The mapping is lossless for the three known severities; U cannot round-trip without preserving the original v2 code as an extension.
Engine considerations
- Two-character validation. AL1-4 is one or two characters. Engines should reject longer payloads outright rather than truncate.
- Case sensitivity. Codes are case-sensitive uppercase;
miis not valid. Normalize on ingest and log every normalization. - Don't default to MI. Missing severity is
U, notMI. Defaulting to mild silently downgrades severe allergies whose severity wasn't recorded. - Preserve U through FHIR round-trip. Because FHIR has no target for
U, store the original HL70128 code as an extension onAllergyIntoleranceso the v2 outbound channel can restore it. - Reject local extensions.
LT,AN, vendor-specific codes should be quarantined to the terminology curation queue, not silently passed through.
How Vorro handles HL70128
Vorro validates AL1-4, IAR-2, and IAM-11 against the four HL70128 codes on ingest. Conformant values are forwarded untouched. Non-conformant values — LT, LIFETHREATENING, lowercase variants, display strings — are routed to the terminology curation queue, where they either resolve to one of the four canonical codes (and a remap rule is created) or pass through with a soft warning so downstream consumers are not silently fed bad data.
On outbound, Vorro emits HL70128 as IS for v2.5 and earlier profiles and as CWE with CWE.14 populated for v2.7+ destinations that advertise OID-bound coded values. The original HL70128 code is always preserved when round-tripping through FHIR AllergyIntolerance.reaction.severity.
Related pages
- AL1 segment — Patient Allergy Information
- IAM segment — Patient Adverse Reaction Information
- HL70127 code table — Allergen Type
