PRICAT — Price/Sales Catalogue Message (D.96A)
The PRICAT message conveys price and catalogue details from a seller to a buyer for the goods and services on offer.
Purpose
Per the official UN/CEFACT definition, PRICAT is "a message to enable the transmission of information regarding pricing and catalogue details for goods and services offered by a seller to a buyer." The standard adds that sales and delivery conditions can apply to the entire catalogue, to a group of items, to a single item, or even to different price-basis occurrences within a single item.
PRICAT replaces PDF / Excel catalogues with a structured format directly actionable in the buyer's ERP. It is sized for real-world volumes: up to 999,999 item lines per message (SG33 loop).
Segment structure
PRICAT D.96A has two named sections: a Header (groups SG1 to SG15) and a Detail (groups SG16 to SG47 — products, prices, taxes, allowances, packaging). There is no formal Summary section in the UNECE spec: UNT comes right after the last item loop.
Header
Mandatory header segments: UNH M , BGM M , and DTM M .
Conditional header segments: ALI C , and FTX C .
Then the header groups:
- SG1
RFF+DTM— references (blanket contract, catalogue version number). - SG2
NAD+LOC— parties (mandatory in the spec, up to 99 occurrences) with SG3RFF+DTMand SG4CTA+COM. - SG5
TAX+MOA— header-level taxes. - SG6
CUX+DTM— currencies (mandatory to qualify the PRI segments). - SG7
PAT+DTM+PCD+MOA— payment terms. - SG8
TDT+LOCand SG9TOD+LOC— transport and delivery terms. - SG10
ALC+ALI+DTM— header-level allowances/charges with sub-groups SG11QTY+RNG, SG12PCD+RNG, SG13MOA+RNG, SG14RTE+RNG, SG15TAX+MOA.
Detail (catalogue lines)
The Detail section opens with the optional SG16 group
PGI+DTM+QTY+ALI+FTX (Product Group Information, up to 1,000 occurrences)
to bundle items logically, with SG17 CUX+DTM and a SG18
PRI+CUX+APR+RNG+DTM sub-loop for group prices, followed by SG19
TAX+MOA and SG20 ALC+ALI with its sub-groups (SG21 to SG25 —
range-based quantities/percentages/amounts/rates/taxes).
The business core is the SG33 loop (up to 999,999 occurrences) built around LIN M . Each line carries the conditionals: PIA C , IMD C , MEA C , QTY C , HAN C , ALI C , DTM C , NAD C , RFF C , LOC C , DOC C , and FTX C .
Under each LIN nest the line-level groups:
- SG34
CCI+CAV+MEA— classifications and characteristics (colour, size...). - SG35
TAX+MOA— item-specific taxes. - SG36
CUX+DTM— item-specific currency. - SG37
PRI+CUX+APR+RNG+DTM+PCD— item prices (up to 100 occurrences). This is where net price, list price, and promotional price live. - SG38
ALC+ALI+DTM— line-level allowances/charges, with sub-groups SG39 to SG43. - SG44
PAC+MEA+HAN— packaging. - SG45
PAT+DTM+PCD+MOA— payment terms. - SG46
TDT+LOCand SG47TOD+LOC— transport and delivery.
Trailer
PRICAT has no formal Summary section: no UNS, no CNT. After the last SG33 loop comes directly UNT M .
Mandatory / conditional
Four structural items are strictly mandatory in every D.96A PRICAT:
UNH— opens the message.BGM— gives the function code (9 = Original, 1 = Cancellation, 4 = Change, etc.) and the catalogue number.DTMin the header — at least one date (typically DTM+137 issue plus DTM+194 / DTM+206 validity range).- SG2 with its
NAD— at least one parties group (M in the spec).
On the business side you also need: NAD+SU (supplier), often
NAD+BY (specific buyer recipient), a CUX (SG6), at least one
LIN in SG33, and at least one PRI in SG37 per line —
otherwise the catalogue carries no price.
Real-world example
A quarterly catalogue from a manufacturer to a retailer, for two items with their list price (AAB), negotiated net price (AAA), and applicable VAT.
UNB+UNOC:3+5410000000456:14+5410000000123:14+260513:0900+CTRL000040'
UNH+1+PRICAT:D:96A:UN:EAN008'
BGM+9+PRICAT-2026-Q3+9'
DTM+137:20260513:102'
DTM+194:20260701:102'
DTM+206:20260930:102'
NAD+SU+5410000000456::9'
NAD+BY+5410000000123::9'
CUX+2:EUR:4'
LIN+1++3520000001234:EN'
PIA+5+SUP-REF-AC-001:SA'
IMD+F++:::Acoustic guitar, mahogany finish'
QTY+52:1'
PRI+AAB:899.00'
PRI+AAA:849.00:CA::1'
TAX+7+VAT+++:::20'
LIN+2++3520000005678:EN'
PIA+5+SUP-REF-CP-001:SA'
IMD+F++:::Capo, spring loaded'
QTY+52:1'
PRI+AAB:24.90'
PRI+AAA:19.50:CA::1'
TAX+7+VAT+++:::20'
UNT+22+1'
UNZ+1+CTRL000040' BGM+9+PRICAT-2026-Q3+9— function 9 (Original), number PRICAT-2026-Q3, status 9.DTM+137— issue date.DTM+194/DTM+206— start and end of the validity range.NAD+SU/NAD+BY— Supplier (sender) and Buyer (recipient).CUX+2:EUR:4— reference currency: EUR.- Two
LINwith theirPIA+5(supplier reference),IMD+F(free description),QTY+52(quantity per UoM = 1). - Each line carries two
PRI:AAB(list price) andAAA(net calculated price). TAX+7+VAT— applicable tax (qualifier 7 = tax) at 20%.UNT+22+1— 22 segments, reference "1" matching UNH.
Common errors
- PRI without currency — every
PRImust be qualified by aCUX(header SG6 or SG36 for item-specific scope). Without a currency, a price of "849.00" is ambiguous and will typically be rejected by the buyer's ERP. - AAA vs AAB swap —
PRI+AAAis the net price (calculation net),PRI+AABis the list price (calculation gross/list). Swapping the two makes the item appear at a loss on the buyer's ERP. - Missing validity period — a PRICAT without
DTM+194/206or any explicit range is interpreted as "indefinite", which almost never matches business intent. - Missing GTIN — a
LINwithout:EN(qualifier 3055 = EAN International) in the C212 composite cannot be matched against the buyer's orders, which always reference the GTIN. - No UNS — PRICAT has no UNS in its spec. Do not insert one.
- BGM function-code misuse — the BGM function code (9 Original, 1 Cancellation, 4 Change, 5 Replace, 31 Copy) must reflect the lifecycle. Always sending "9 Original" on deletion prevents the buyer from purging the old catalogue.
Related messages
PRICAT sits at the upstream end of the cycle:
- ORDERS D.96A — the order, which should reference the catalogue's GTINs.
- ORDRSP D.96A — the order response may carry a different PRI (renegotiation).
- INVOIC D.96A — the invoice, whose prices must match the PRICAT.
- INVRPT D.96A — the inventory report the supplier may send in parallel.
- CONTRL D.96A — the automatic syntactic acknowledgment.
JSON equivalent
JSON projection matching the example above. The mapping is not normative — it's an ediverse convention to ease integration in TypeScript / Python environments.
{
"interchange": {
"controlRef": "CTRL000040",
"from": { "id": "5410000000456", "qualifier": "14" },
"to": { "id": "5410000000123", "qualifier": "14" },
"datetime": "2026-05-13T09:00:00Z",
"syntax": { "id": "UNOC", "version": "3" }
},
"message": {
"ref": "1",
"type": "PRICAT",
"version": { "syntax": "D", "release": "96A", "agency": "UN", "association": "EAN008" }
},
"priceCatalogue": {
"number": "PRICAT-2026-Q3",
"function": "9",
"status": "9",
"issueDate": "2026-05-13",
"validity": { "from": "2026-07-01", "to": "2026-09-30" },
"parties": {
"supplier": { "gln": "5410000000456" },
"buyer": { "gln": "5410000000123" }
},
"currency": "EUR",
"items": [
{
"ref": 1,
"gtin": "3520000001234",
"supplierSku": "SUP-REF-AC-001",
"description": "Acoustic guitar, mahogany finish",
"uom": "EA",
"priceList": 899.00,
"priceNet": 849.00,
"vat": { "category": "VAT", "rate": 20 }
},
{
"ref": 2,
"gtin": "3520000005678",
"supplierSku": "SUP-REF-CP-001",
"description": "Capo, spring loaded",
"uom": "EA",
"priceList": 24.90,
"priceNet": 19.50,
"vat": { "category": "VAT", "rate": 20 }
}
]
}
}