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 HL70322: Completion Status

HL70322 is the HL7-defined code table that answers a single question about a performed action: did it finish, partially finish, never start, or get refused? It is best known as the binding for RXA-20 Completion Status on immunization administration messages (VXU and ORU/VXR), where state immunization registries depend on it to distinguish a fully administered dose from a refused or partially administered one. The same five-code set is also referenced from procedure-performance fields and several pharmacy administration contexts in v2.8.1.

Purpose

HL70322 records whether the action described by the containing segment was completed. The codes capture process state — not clinical outcome and not appropriateness. A dose that was administered but later proved ineffective is still CP (Complete); a dose that the patient refused is RE, regardless of whether refusal was clinically reasonable. The table is deliberately small (five values) so registries and downstream FHIR servers can branch on the value without needing a richer state machine.

Because HL70322 is HL7-defined, every conformant v2 receiver is expected to recognize all five codes without local extension. Sites that want richer state semantics (for example, "stopped due to adverse event") layer that onto a separate reason field rather than extending HL70322.

Where it's used

  • RXA-20 Completion Status — the canonical home, carried on every VXU_V04 immunization administration message and on pharmacy administration ORU profiles.
  • PVA procedure-performance fields where the action is a discrete event with a completion outcome.
  • A handful of order-related segments that need to flag "scheduled but never performed" without using the richer ORC-5 order status set.

Code list

CodeDisplayComment/Description
CPCompleteThe action was performed in full. For an immunization, the full intended dose was administered.
IPIn ProcessThe action has begun and is still under way at the time the message was generated.
NANot AvailableThe action could not be performed because the substance, equipment, or appointment was unavailable.
PAPartially PerformedPart of the dose or procedure was performed (for example, a partial vaccine dose given before the patient withdrew).
RERefusedThe patient (or surrogate) refused the action; nothing was administered.

Code system OID

  • OID: 2.16.840.1.113883.18.221
  • Canonical URI: http://terminology.hl7.org/CodeSystem/v2-0322

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 RXA-20.

HL7-defined vs user-defined

HL70322 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 inside this table. Sites that need to distinguish, for example, "refused due to religious objection" from "refused due to prior adverse event" carry that distinction on a separate reason field (such as RXA-18 Substance/Treatment Refusal Reason) rather than coining new HL70322 codes.

Version differences

  • v2.3.1 — HL70322 introduced alongside the RXA segment for the first formal immunization administration profile. Initial values: CP, RE, NA.
  • v2.4PA (Partially Performed) added to cover real-world partial-dose scenarios reported by state immunization registries.
  • v2.5IP (In Process) added so long-running administrations (infusions, multi-step procedures) could be reported mid-flight without misusing CP.
  • v2.6 – v2.8.1 — Set frozen at five codes; no further additions.
  • v2.9 — Table unchanged. FHIR mapping clarified in the v2-to-FHIR IG, with explicit guidance to use the partial performance extension for PA.

Common mistakes

  • Sending CP for a partial dose because the EHR has no UI for "partial." PA exists for exactly this case and is required by CDC immunization profiles when only part of the intended dose was administered.
  • Using NA to mean "not applicable" rather than "not available." HL70322 NA specifically means the action could not be performed because the substance/equipment was unavailable; "not applicable" is not a concept this table supports.
  • Mapping RE to FHIR event-status completed with a refusal note. The correct mapping is not-done with a statusReason of refused; collapsing it to completed causes immunization registries to count the dose.
  • Treating IP as a synonym for "scheduled." A scheduled-but-not-started action is not IP; it should be carried on an order segment with the appropriate ORC-5 status, not on RXA-20.
  • Defaulting RXA-20 to CP when the source EHR leaves it null. A null completion status must be carried as null (or routed to curation) rather than silently coerced to Complete.

Examples

A minimal RXA reporting a completed influenza vaccine administration:

RXA|0|1|20260315103000|20260315103000|88^Influenza, unspecified^CVX|0.5|mL^^UCUM||00^New immunization record^NIP001|||||||||||CP

A partially administered dose (patient withdrew after 0.25 mL):

RXA|0|1|20260315103000|20260315103000|88^Influenza^CVX|0.25|mL^^UCUM||00^New immunization record^NIP001|||||||||||PA

A refusal recorded for audit (zero volume, RE in field 20):

RXA|0|1|20260315103000|20260315103000|88^Influenza^CVX|999|||00^New immunization record^NIP001|||||||||||RE

Same CP value translated to a FHIR Immunization.status Coding:

{
  "resourceType": "Immunization",
  "id": "imm-10456",
  "status": "completed",
  "vaccineCode": {
    "coding": [{
      "system": "http://hl7.org/fhir/sid/cvx",
      "code": "88",
      "display": "Influenza, unspecified"
    }]
  }
}

Mapping failure example — unknown completion code:

RXA|0|1|20260315103000|20260315103000|88^Influenza^CVX|0.5|mL||00^New immunization record^NIP001|||||||||||XX

XX is not in HL70322. A conformant engine should route the message to a curation queue, preserve the original XX in the audit log, and emit FHIR Immunization.status as entered-in-error with the original code preserved as an extension rather than silently dropping the dose.

FHIR mapping

The HL7 v2-to-FHIR Implementation Guide publishes ConceptMap-table-hl70322-to-event-status, which maps HL70322 onto the FHIR event-status value set used by Immunization.status and other event resources:

HL7 v2 (HL70322)FHIR (event-status)Notes
CPcompletedDirect match.
IPin-progressDirect match.
REnot-donePlus statusReason = refused on the Immunization.
PAcompletedPlus a partial-performance extension; lossy — registries that need partial-dose semantics must read the extension.
NAnot-donePlus statusReason describing unavailability.

The mapping is intentionally one-directional. Round-tripping FHIR not-done back to v2 requires reading statusReason to decide between RE and NA.

Engine considerations

  • Two-character validation — RXA-20 codes are exactly two characters; reject longer payloads rather than truncating.
  • Case sensitivity — HL70322 codes are uppercase; cp is not valid. Normalize on ingest.
  • CWE upgrade path — In v2.7+ profiles RXA-20 may be transmitted as CWE with OID metadata in CWE.14 (2.16.840.1.113883.18.221). Engines must handle both IS and CWE shapes.
  • Round-trip preservation — When mapping PA to FHIR completed, always emit the partial-performance extension so the outbound v2 channel can restore PA rather than collapsing it to CP.
  • Pairing with reason fieldsRE and NA should always be paired with the appropriate reason field (RXA-18 Substance/Treatment Refusal Reason for refusals); engines should warn if the reason is missing.

How Vorro handles HL70322

Vorro validates RXA-20 against the five HL70322 codes on ingest. Values that match are forwarded to all downstream channels untouched. Values that fail validation — including lowercase variants, vendor extensions, and the common mistake of sending C instead of CP — 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 event-status value and attaches the original HL70322 code as an extension so round-trip back to v2 is lossless. PA always travels with a partial-performance extension; RE always travels with a statusReason of refused. Vorro also enforces the "RE requires a refusal reason" guard so downstream registries never receive an unexplained refusal.

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 HL70322: Completion Status | Vorro Academy | Vorro