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
| Code | Display | Comment/Description |
|---|---|---|
| CP | Complete | The action was performed in full. For an immunization, the full intended dose was administered. |
| IP | In Process | The action has begun and is still under way at the time the message was generated. |
| NA | Not Available | The action could not be performed because the substance, equipment, or appointment was unavailable. |
| PA | Partially Performed | Part of the dose or procedure was performed (for example, a partial vaccine dose given before the patient withdrew). |
| RE | Refused | The 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.4 —
PA(Partially Performed) added to cover real-world partial-dose scenarios reported by state immunization registries. - v2.5 —
IP(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
partialperformance extension forPA.
Common mistakes
- Sending
CPfor a partial dose because the EHR has no UI for "partial."PAexists for exactly this case and is required by CDC immunization profiles when only part of the intended dose was administered. - Using
NAto mean "not applicable" rather than "not available." HL70322NAspecifically means the action could not be performed because the substance/equipment was unavailable; "not applicable" is not a concept this table supports. - Mapping
REto FHIRevent-statuscompletedwith a refusal note. The correct mapping isnot-donewith astatusReasonofrefused; collapsing it tocompletedcauses immunization registries to count the dose. - Treating
IPas a synonym for "scheduled." A scheduled-but-not-started action is notIP; it should be carried on an order segment with the appropriate ORC-5 status, not on RXA-20. - Defaulting RXA-20 to
CPwhen 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 |
|---|---|---|
| CP | completed | Direct match. |
| IP | in-progress | Direct match. |
| RE | not-done | Plus statusReason = refused on the Immunization. |
| PA | completed | Plus a partial-performance extension; lossy — registries that need partial-dose semantics must read the extension. |
| NA | not-done | Plus 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;
cpis 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
PAto FHIRcompleted, always emit the partial-performance extension so the outbound v2 channel can restorePArather than collapsing it toCP. - Pairing with reason fields —
REandNAshould 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.
Related pages
- RXA segment — Pharmacy/Treatment Administration
- HL70323 code table — Action Code
- CWE data type — Coded with Exceptions
