Advance ship notice
nutrab2b.logistics.shipped.v2 · Logistics & customs
- Purpose
- What shipped, in which pallets/cases (SSCC hierarchy), which lots, with dates, carrier and cold-chain readings.
- When to send
- Goods leave the ship-from location.
- Sender → receiver
- Supplier → Buyer
- Expected responses
- RECEIPT, ACK
- Equivalent standards
- X12: 856 · EDIFACT: DESADV · GS1: DespatchAdvice · EPCIS: ObjectEvent shipping + AggregationEvent · SAP: DESADV / DELVRY IDoc
- Scenarios using it
- Full order-to-cash · Partial acceptance with back-order · Quantity change after acknowledgement · Cancel race after shipment · Split shipment, two lots · Over-shipment beyond tolerance · Multi-pallet, multi-lot SSCC hierarchy · Release against blanket contract · Failed CoA blocks shipment · Out-of-spec lot ships under deviation · Hold blocks shipment until release · Organic certificate expired before shipment · Remaining shelf life too short · Cold-chain excursion · Out-of-order events are parked and released · Dropped event, gap detected, replay · Ship notice for an unknown PO · Three-way match failures · Short receipt settled with credit note
Fields and mappings
| Field | Type | Req | Description | Code list / format | EDI / GS1 / SAP mapping |
|---|---|---|---|---|---|
| asn_id | string | yes | Shipment id | x12: BSN02 edifact: BGM 1004 | |
| po_number | string | yes | PO | ||
| shipped_at | datetime | yes | Ship date-time | ||
| eta | date | Estimated arrival | |||
| transport_mode | string | yes | ModeNB-R006 | transport_mode | |
| carrier_gln | string | Carrier GLN | |||
| tracking_ref | string | BOL / AWB / tracking | |||
| ship_from | object | yes | Ship-from | ||
| gln | string | yes | Location GLN | ^\d{13}$ | x12: N1 ST/SF N104 edifact: NAD+ST/SF |
| name | string | Name | |||
| address | object | Postal address | |||
| lines | array<string> | Street lines | |||
| city | string | City | |||
| postal_code | string | Postal code | |||
| region | string | State / province (ISO 3166-2 subdivision) | |||
| country | string | yes | Country | country | |
| ship_to | object | yes | Ship-to | ||
| gln | string | yes | Location GLN | ^\d{13}$ | x12: N1 ST/SF N104 edifact: NAD+ST/SF |
| name | string | Name | |||
| address | object | Postal address | |||
| lines | array<string> | Street lines | |||
| city | string | City | |||
| postal_code | string | Postal code | |||
| region | string | State / province (ISO 3166-2 subdivision) | |||
| country | string | yes | Country | country | |
| storage | string | Required storage classNB-R020 | storage | ||
| packages | array<object> | yes | Logistic units (pallet → case) | ||
| sscc | string | yes | SSCC | ^\d{18}$ | x12: MAN02 (GM) edifact: GIN+BJ epcis: urn:epc:id:sscc |
| parent_sscc | string | Parent pallet SSCC | ^\d{18}$ | ||
| package_type | string | yes | Package | package | |
| gross_kg | number | Gross weight kg | |||
| contents | array<object> | Items in this unit | |||
| po_line_no | integer | yes | PO lineNB-R014 | ||
| item_id | string | yes | Item | ||
| lot_number | string | yes | Lot / batchNB-R003 | x12: LIN (LT) edifact: PIA/GIR epcis: lgtin | |
| quantity | object | yes | Net quantity | ||
| value | number | yes | Quantity | ||
| uom | string | yes | Unit of measure | uom | |
| mfg_date | date | yes | Manufacture dateNB-R007 | ||
| expiry_date | date | yes | Expiry / retestNB-R007 NB-R008 | ||
| temperature_log | array<object> | Logger readings | |||
| at | datetime | yes | Time | ||
| celsius | number | yes | °CNB-R020 |
Business rules
- NB-R002 Over-shipment, shipped quantity exceeds ordered quantity beyond tolerance.
- NB-R003 Lot without passing CoA, every shipped lot needs a CoA with all results PASS/ND/BLQ.
- NB-R004 Certificate not valid, a required certificate is expired or not yet valid on the ship date.
- NB-R006 Incoterm vs transport mode, sea-only Incoterm (FAS/FOB/CFR/CIF) used with non-sea mode.
- NB-R007 Expiry before manufacture, expiry date must be after manufacture date.
- NB-R008 Shelf life below minimum, remaining shelf life at ship date is below the agreed minimum.
- NB-R014 Line reference unknown, response, ship notice or invoice line refers to a PO line that does not exist.
- NB-R020 Cold-chain excursion, temperature readings outside the storage class range.
Implementation notes
- Send the ASN when goods leave, before they arrive; one ASN per physical shipment.
- Pallet → case hierarchy uses parent_sscc; contents sit on the lowest level only.
- Every lot needs a passing CoA (or approved deviation) before shipping (NB-R003).
Example
{
"specversion": "2.0",
"id": "evt-asn-PO-55012-1",
"type": "nutrab2b.logistics.shipped.v2",
"source": "urn:gln:4012345000009:erp",
"subject": "PO-55012",
"time": "2026-11-02T09:00:00Z",
"datacontenttype": "application/json",
"dataschema": "https://nutrab2b.org/schemas/2.0/ASN.json",
"sender": {
"gln": "4012345000009"
},
"receiver": {
"gln": "0614141000012"
},
"correlationid": "CONV-RFQ-1001",
"idempotencykey": "ASN:PO-55012:1",
"sequence": 1,
"env": "test",
"data": {
"asn_id": "ASN-9001",
"po_number": "PO-55012",
"shipped_at": "2026-11-25T08:00:00+05:30",
"eta": "2026-12-02",
"transport_mode": "4",
"carrier_gln": "5412345000013",
"tracking_ref": "AWB 176-12345675",
"ship_from": {
"gln": "4012345000016",
"address": {
"country": "IN"
}
},
"ship_to": {
"gln": "0614141000012",
"address": {
"country": "US"
}
},
"storage": "AMBIENT",
"packages": [
{
"sscc": "340123450000000017",
"package_type": "PX",
"gross_kg": 540
},
{
"sscc": "340123450000000024",
"parent_sscc": "340123450000000017",
"package_type": "1G",
"gross_kg": 26.5,
"contents": [
{
"po_line_no": 1,
"item_id": "ASH-KSM-5",
"lot_number": "ASH-26-118",
"quantity": {
"value": 500,
"uom": "KGM"
},
"mfg_date": "2026-10-01",
"expiry_date": "2029-09-30"
}
]
}
],
"temperature_log": [
{
"at": "2026-11-25T10:00:00Z",
"celsius": 22
}
]
}
}Mapping checklist
- Every required field populated from your system of record
- Coded fields mapped to the Bodylia OpenB2B code lists
- GLN, GTIN and SSCC check digits validated
- Rules above pass in the validator
- Idempotency key and per-subject sequence generated
- Expected responses, including rejections, handled
