ZKELETON//HL7 → FHIR Open converter

HL7 RXA → FHIR Immunization

In a VXU (vaccination) message, the RXA (administration) segment becomes a FHIR R4 Immunization. The mapping is gated on a vaccine signal — a CVX code or a VXU message — so a non-vaccine drug administration is surfaced rather than mislabeled as an immunization.

The short answer

An HL7 RXA segment (vaccine context) maps to a FHIR Immunization: RXA-5vaccineCode, RXA-3occurrenceDateTime, RXA-6/7doseQuantity, RXA-15lotNumber, RXA-16expirationDate, RXA-20status.

Field-by-field

HL7 fieldFHIR pathNotes
RXA-3Immunization.occurrenceDateTimeDate of administration. Required — if absent, the engine surfaces it instead of emitting an invalid resource.
RXA-5Immunization.vaccineCodeAdministered vaccine (CVX). Required 1..1.
RXA-6 / RXA-7Immunization.doseQuantityAmount + units (the “999” not-recorded sentinel is dropped).
RXA-15Immunization.lotNumberVaccine lot number.
RXA-16Immunization.expirationDateSubstance expiration date.
RXA-18Immunization.statusReasonOn a refusal, the reason for not administering.
RXA-20Immunization.statusCP/PA → completed, RE/NA → not-done.

Live example

This is produced by the actual converter — paste your own message and it runs the same way, entirely in your browser.

Live example — run by the actual engine Try this in the converter
HL7 v2 in
MSH|^~\&|EHR|HOSP|ZK|MERIDIAN|20240101103000||VXU^V04|MSG1|P|2.5.1
PID|1||MRN123^^^HOSP^MR||DOE^JANE||19850312|F
ORC|RE
RXA|0|1|20230615||08^Hep B^CVX|0.5|mL^^UCUM||||||||LOT42|20251231||||CP
FHIR R4 out
{
  "resourceType": "Immunization",
  "id": "immunization-1",
  "status": "completed",
  "vaccineCode": {
    "coding": [
      {
        "code": "08",
        "display": "Hep B"
      }
    ],
    "text": "Hep B"
  },
  "patient": {
    "reference": "urn:uuid:00000000-0000-4000-8000-000000000001"
  },
  "occurrenceDateTime": "2023-06-15",
  "lotNumber": "LOT42",
  "expirationDate": "2025-12-31",
  "doseQuantity": {
    "value": 0.5,
    "unit": "mL"
  }
}

Nothing needed review for this message

Every populated field above was mapped. When a field can’t be mapped, it appears here instead of being dropped — that’s the guarantee.

Related mappings

Built by Zkeleton

Zkeleton builds conversion and data infrastructure for healthcare. This converter is free, runs entirely in your browser, and never sends a message anywhere — we keep it open because clean data plumbing should be a commodity, not a toll.