The PAC (Shipment Package) segment was introduced in HL7 v2.7 and describes a single physical package — a carton, cooler, tote, or pallet — that is part of an SHP Shipment. Each PAC sits beneath its parent SHP and may itself be nested inside another PAC to model pallets-of-cartons or coolers-of-totes.
Purpose
PAC tells the receiver how a shipment is physically packed. It groups together:
- A Set ID (PAC-1) that orders packages within the shipment.
- A Package ID (PAC-2) plus an optional Parent Package ID (PAC-3) and Position in Parent (PAC-4) for nested packaging.
- The Package Type (PAC-5) — e.g. cooler, carton, pallet — together with repeating Condition, Handling Code, and Risk Code fields.
PAC is typically followed by the line-item segments (such as IIM for inventory items or specimen segments for lab shipments) that describe what is inside the package.
Used in
PAC appears wherever physical packaging detail is exchanged inside a shipment message, including:
- Specimen shipment updates and inventory transfers — see INV (specimen/inventory shipment update).
- Materials management messages that report packing detail at the carton or cooler level.
- Cold-chain workflows where condition and handling codes need to be recorded per package, not just per shipment.
Inside an INV / SSU-style message, PAC follows the parent SHP and precedes the item-level segments for that package.
Field-by-field reference
The table below lists each PAC field in segment order. The "Seq" column is the HL7 field position used in pipe-delimited messages (e.g. PAC-5 is Package Type). Data types link to their HL7 v2.8.1 reference page. "R" marks fields the HL7 standard requires; "O" marks optional fields. "Repeat = Y" means the field may carry multiple repetitions separated by ~.
| Seq | Name | Data Type | Length | Req | Repeat | Table # | Description |
|---|---|---|---|---|---|---|---|
| PAC-1 | Set ID - PAC | si | — | R | — | — | Sequence number of the PAC segment |
| PAC-2 | Package ID | ei | — | O | — | — | Unique identifier for this package |
| PAC-3 | Parent Package ID | ei | — | O | — | — | Identifier of enclosing package, when nested |
| PAC-4 | Position in Parent Package | na | — | O | — | — | Numeric position inside the parent package |
| PAC-5 | Package Type | cwe | — | O | — | — | Coded package type such as cooler or carton |
| PAC-6 | Package Condition | cwe | — | O | Y | — | Observed condition of this package |
| PAC-7 | Package Handling Code | cwe | — | O | Y | — | Special handling instructions for the package |
| PAC-8 | Package Risk Code | cwe | — | O | Y | — | Hazard or risk codes that apply to package |
Most-used fields
A handful of PAC fields carry the bulk of the integration value:
- PAC-1 Set ID — the only required field; orders PAC segments within a shipment and is used by engines for grouping.
- PAC-2 Package ID — the durable identifier scanned on the package label.
- PAC-3 / PAC-4 — together describe nested packing (e.g. tote 3 inside cooler A).
- PAC-5 Package Type and PAC-7 Package Handling Code — drive cold-chain and hazardous-materials behaviour at the package level.
Version differences (2.7 to 2.8.2)
- PAC was introduced in HL7 v2.7 alongside SHP as part of the Materials Management chapter.
- v2.7.1 and v2.8 left the field list unchanged; vocabulary tables for Package Type were extended.
- v2.8.1 (this page) keeps the 8-field structure and standardises Package Condition (PAC-6), Handling Code (PAC-7), and Risk Code (PAC-8) as repeating CWE.
- v2.8.2 carries the segment forward without structural changes.
Common mistakes
- Omitting PAC-1 Set ID. Even when only one package is sent, the Set ID is required.
- Reusing the same Package ID (PAC-2) across shipments. Treat PAC-2 as globally unique within the sender namespace.
- Forgetting to set PAC-3 / PAC-4 when packages are nested, which leaves the receiver unable to reconstruct the physical hierarchy.
- Putting hazardous-materials information into PAC-7 (Handling Code) when it really belongs in PAC-8 (Risk Code). Handling Code is operational ("keep upright"); Risk Code is regulatory ("Category B biological").
- Sending one PAC for the whole shipment when multiple packages exist. PAC repeats — use one segment per physical package.
Examples
Minimal PAC — only the required Set ID:
PAC|1
Fully-populated PAC describing a refrigerated cooler nested inside a pallet:
PAC|2|PKG-7781-02^VORRO_PKG|PLT-7781-A^VORRO_PKG|3|COOLER^Insulated cooler^HL70908|INTACT^Intact^HL70544|REFRIGERATE^Keep refrigerated 2-8C^HL70549|BIO^Biological substance Category B^HL70489
Annotated breakdown of the populated example:
PAC| -- Segment ID
2 -- PAC-1 Set ID - PAC (SI)
| PKG-7781-02^VORRO_PKG -- PAC-2 Package ID (EI)
| PLT-7781-A^VORRO_PKG -- PAC-3 Parent Package ID (EI)
| 3 -- PAC-4 Position in Parent Package (NA)
| COOLER^Insulated cooler^HL70908 -- PAC-5 Package Type (CWE)
| INTACT^Intact^HL70544 -- PAC-6 Package Condition (CWE, repeats)
| REFRIGERATE^Keep refrigerated 2-8C^HL70549 -- PAC-7 Package Handling Code (CWE, repeats)
| BIO^Biological substance Category B^HL70489 -- PAC-8 Package Risk Code (CWE, repeats)
In-context excerpt 1 — two PAC segments under a shipment, each carrying its own handling code:
MSH|^~&|VORRO_LIS|LAB_A|VORRO_LIS|LAB_B|20260610081500||SSU^U03^SSU_U03|7781|P|2.8.1
SHP|SHP-2026-000841^VORRO_SHIP|CARRIER-7781^FEDEX|IN_TRANSIT^In Transit^HL70905|20260610081500||STAT^Stat^HL70905||2
PAC|1|PKG-7781-01^VORRO_PKG||1|COOLER^Insulated cooler^HL70908|INTACT^Intact^HL70544|REFRIGERATE^Keep refrigerated 2-8C^HL70549|BIO^Biological substance Category B^HL70489
PAC|2|PKG-7781-02^VORRO_PKG||2|CARTON^Carton^HL70908|INTACT^Intact^HL70544|ROOMTEMP^Room temperature^HL70549
In-context excerpt 2 — nested packaging: two coolers inside a pallet, all inside one shipment:
MSH|^~&|VORRO_INV|WAREHOUSE_W|VORRO_INV|HOSPITAL_H|20260610161200||SSU^U03^SSU_U03|7782|P|2.8.1
SHP|SHP-2026-000842^VORRO_SHIP|CARRIER-7782^UPS|IN_TRANSIT^In Transit^HL70905|20260610161200||N^Normal^HL70177||3|SEALED^Sealed^HL70544
PAC|1|PLT-7782-A^VORRO_PKG||1|PALLET^Pallet^HL70908|INTACT^Intact^HL70544|STACKABLE^Stackable^HL70549
PAC|2|PKG-7782-01^VORRO_PKG|PLT-7782-A^VORRO_PKG|1|COOLER^Insulated cooler^HL70908|INTACT^Intact^HL70544|REFRIGERATE^Keep refrigerated 2-8C^HL70549
PAC|3|PKG-7782-02^VORRO_PKG|PLT-7782-A^VORRO_PKG|2|COOLER^Insulated cooler^HL70908|INTACT^Intact^HL70544|REFRIGERATE^Keep refrigerated 2-8C^HL70549
FHIR mapping
No segment-level ConceptMap is published in the v2-to-FHIR IG for PAC. Conceptually, a PAC carrying package-level identification and handling aligns with FHIR SupplyDelivery.suppliedItem plus extensions:
- PAC-2 Package ID →
SupplyDelivery.identifieror a containedDevicerepresenting the package. - PAC-3 / PAC-4 →
SupplyDelivery.partOfplus a sequence extension for position. - PAC-5 Package Type → a
Codingon the containedDevice.typeorSupplyDelivery.suppliedItem.itemCodeableConcept. - PAC-7 Handling Code →
SupplyDelivery.extensionfor handling instructions.
Implementers building bridges should agree on a project-specific mapping rather than expecting a standard ConceptMap.
Engine considerations
- Group PAC segments under their parent SHP using the SHP-1 join key, then sort by PAC-1 Set ID before processing — engines that rely on physical message order tend to break when intermediaries re-serialise.
- For nested packaging (PAC-3 set), build the hierarchy in memory before mapping; flattening loses critical packing detail used by receiving warehouses.
- PAC-6, PAC-7, and PAC-8 are repeating CWE — ensure mapping rules iterate per repetition rather than taking only the first code.
- When mapping into a warehouse management system, treat PAC-2 as the scannable label barcode and validate uniqueness against the sender namespace.
How Vorro parses and produces PAC
Vorro's HL7 v2 parser builds a typed model of PAC directly from the HAPI v2.8.1 structure definitions, exposing all 8 fields by name (PAC-1, PAC-5.2, etc.) and surfacing repeating fields as ordered lists. Common workflows include:
- Resolving nested PAC hierarchies (PAC-3 → PAC-2) at parse time so downstream channels see a real tree rather than a flat list.
- Validating that PAC-1 Set IDs are contiguous starting at 1 within a shipment and raising a structured exception when they are not.
- Producing outbound PAC segments from warehouse pick records, automatically populating PAC-4 from the slot index of the parent pallet or cooler.
- Mapping PAC-5, PAC-7, and PAC-8 against configured v2.8.1 vocabularies so unmapped codes never silently leave the engine.
Related pages
- SHP — Shipment segment
- IIM — Inventory Item Master segment
- INV / SSU — specimen and inventory shipment update messages
