The PSG (Product/Service Group) segment groups a collection of related product/service line items so they can be adjudicated, summarised, or billed as a single unit. PSG was introduced in HL7 v2.6 as part of the patient-billing chapter and continues unchanged in v2.8.1 — it is one of three companion segments (PSS section, PSG group, PSL line item) that together describe a structured billing breakdown.
Purpose
PSG identifies a billable grouping of services that providers and payers can reference jointly. It carries both the provider-assigned and payer-assigned group identifiers, a sequence number that orders groups within a section, a flag indicating whether the group is adjudicated as a single unit, the rolled-up billed amount, and a short human-readable description. PSG normally sits between a PSS (section) header and one or more PSL (line item) entries to form the section → group → line hierarchy used in product/service billing exchanges.
Used in
PSG is used in product/service billing flows carried by financial and master-file messages such as DFT (Detailed Financial Transaction) and PMU (Add/Update Personnel) variants that exchange billable activity. See DFT message for the typical envelope. PSG always travels with a parent PSS and child PSL segments.
Field-by-field reference
Source: HAPI HL7v2 v2.8.1 javadocs (https://hapifhir.github.io/hapi-hl7v2/v281/apidocs/ca/uhn/hl7v2/model/v281/segment/PSG.html) for sequence, name, data type, and repetition. Length is not published in the javadocs (—); Required and Table # are filled from the HL7 v2 standard where well-established.
| Seq | Name | Data Type | Length | Req | Repeat | Table # | Description |
|---|---|---|---|---|---|---|---|
| PSG-1 | Provider Product/Service Group Number | ei | — | R | — | — | Provider-assigned identifier for this group |
| PSG-2 | Payer Product/Service Group Number | ei | — | O | — | — | Payer-assigned identifier for the group |
| PSG-3 | Product/Service Group Sequence Number | si | — | R | — | — | Ordinal position of group within section |
| PSG-4 | Adjudicate as Group | id | — | O | — | [HL70136] | Flag: adjudicate the group as one unit |
| PSG-5 | Product/Service Group Billed Amount | cp | — | O | — | — | Total billed amount across the group |
| PSG-6 | Product/Service Group Description | st | — | O | — | — | Free-text description of the group |
Most-used fields
- PSG-1 Provider Product/Service Group Number is the primary key emitted by every sender; the value must be unique within the enclosing PSS and is referenced from each child PSL.
- PSG-3 Product/Service Group Sequence Number lets receivers preserve the original ordering of groups when displaying or reconciling the invoice.
- PSG-5 Product/Service Group Billed Amount is the rolled-up monetary total used by payer systems to cross-check the sum of child PSL billed amounts.
- PSG-4 Adjudicate as Group is the toggle that tells the payer whether to score the group atomically or line-by-line; misuse here is the most common source of split-adjudication disputes.
Version differences
- Introduced in HL7 v2.6 as part of the patient-billing additions.
- v2.7 stabilised the data types around CWE/EI in surrounding segments; PSG itself kept the same six fields.
- v2.7.1, v2.8, and v2.8.1 carry PSG forward unchanged.
- v2.8.2 (draft at the time of writing) continues to publish the same field list with no structural change.
Common mistakes
- Sending PSG without a parent PSS — most receivers reject the group because they cannot anchor it to a section.
- Letting PSG-1 collide across sections in the same message; the identifier is scoped per-message, not per-section, in many implementations.
- Putting the gross (pre-discount) amount in PSG-5 when the standard expects the billed (post-adjustment) amount.
- Setting PSG-4 to
Ywhile leaving child PSL-6 statuses inconsistent, which forces the payer to fall back to line-level adjudication. - Omitting PSG-3 and relying on segment order; many engines re-sort by sequence number on receipt.
Examples
Minimal:
PSG|GRP-7781^^VORRO^EI|||1
Fully populated:
PSG|GRP-7781^^VORRO^EI|PAYGRP-44120^^AETNA^EI|1|Y|425.00^USD|Imaging studies bundled for adjudication
Annotated breakdown:
PSG | GRP-7781^^VORRO^EI # PSG-1 Provider group number
| PAYGRP-44120^^AETNA^EI # PSG-2 Payer group number
| 1 # PSG-3 Sequence within section
| Y # PSG-4 Adjudicate as group
| 425.00^USD # PSG-5 Group billed amount
| Imaging studies bundled ... # PSG-6 Description
In-context excerpt, DFT P03 with section/group/line hierarchy:
MSH|^~&|VORRO|HOSP-A|AETNA|PAYER|20260610101500||DFT^P03^DFT_P03|MSG00045|P|2.8.1
EVN|P03|20260610101500
PID|1||MRN-99812^^^VORRO^MR||DOE^JANE^A||19720314|F
PV1|1|O|RAD-01^^^HOSP-A
PSS|SEC-301^^VORRO^EI||1|600.00^USD|Imaging
PSG|GRP-7781^^VORRO^EI||1|Y|425.00^USD|MRI bundled studies
PSL|LINE-9001^^VORRO^EI||1|||A^Active^HL70776|72148^MRI lumbar w/o contrast^CPT
PSL|LINE-9002^^VORRO^EI||2|||A^Active^HL70776|72149^MRI lumbar w/ contrast^CPT
In-context excerpt, DFT P11 with two groups under one section:
MSH|^~&|VORRO|CLINIC-B|UHG|PAYER|20260610113000||DFT^P11^DFT_P11|MSG00046|P|2.8.1
EVN|P11|20260610113000
PID|1||MRN-44021^^^VORRO^MR||SMITH^JOHN^Q||19601122|M
PSS|SEC-410^^VORRO^EI||1|980.00^USD|Outpatient visit
PSG|GRP-8810^^VORRO^EI||1|Y|240.00^USD|E/M services
PSL|LINE-9101^^VORRO^EI||1|||A^Active^HL70776|99213^Office visit^CPT
PSG|GRP-8811^^VORRO^EI||2|N|740.00^USD|Laboratory panel
PSL|LINE-9102^^VORRO^EI||1|||A^Active^HL70776|80053^Comp metabolic panel^CPT
PSL|LINE-9103^^VORRO^EI||2|||A^Active^HL70776|85025^CBC w/ diff^CPT
FHIR mapping
PSG has no segment-level ConceptMap in the official v2-to-FHIR Implementation Guide. Conceptually, a PSG aligns with a grouping of Claim.item or Invoice.lineItem entries that share a common Claim.item.subDetail or Invoice.lineItem.priceComponent rollup. Implementations typically:
- map PSG-1 to a
Claim.item.sequenceparent or to anInvoice.lineItemidentifier extension; - carry PSG-5 as the rolled-up
Claim.totalfor the group, when the receiving Claim resource models grouping explicitly; - preserve PSG-4 in a sender-specific extension because no FHIR boolean expresses "adjudicate as group" natively.
Engine considerations
- HAPI v2.8.1 exposes PSG via
ca.uhn.hl7v2.model.v281.segment.PSGwith typed accessorsgetProviderProductServiceGroupNumber(),getProductServiceGroupSequenceNumber(),getAdjudicateAsGroup(), etc. - Mirth Connect treats PSG inside a
PSS_PSG_PSLgroup; iterating requires nested loops because PSG repeats within PSS and PSL repeats within PSG. - Rhapsody and Cloverleaf both expose the segment but most published mappers stop at PSL — custom JavaScript is usually needed to surface PSG-4 and PSG-5.
- Ensure your engine carries PSG-5's CP currency identifier (
^USD,^EUR) end-to-end; stripping the second component is a frequent silent loss.
How Vorro parses and produces PSG
Vorro's HL7 parser normalises PSG into a ProductServiceGroup node anchored to its parent ProductServiceSection, preserving original sequence numbers in a separate _originalSequence attribute so downstream consumers can re-emit segments in the order they arrived. On the producer side, Vorro recomputes PSG-5 from the child PSL billed amounts and emits a warning when the recomputed total disagrees with an incoming PSG-5 by more than one cent, allowing operators to choose between trust-sender or recompute-on-egress modes per route. PSG-4 is mapped to a typed boolean and round-tripped without coercion.
Related pages
- PSL Segment — Product/Service Line Item
- PSS Segment — Product/Service Section
- DFT Message — Detailed Financial Transaction
