The transaction layer,
written down.

One thesis per post, a proof artifact in each: a spec citation, a validator output, a worked fixture. Written for the people named in each header — and for the agents reading the machine face.

2026-07-31  ·  ED-1 — the supply-chain ISV / traceability-vendor engineering org

Amazon's Vendor API is the EDI cycle wearing REST

getPurchaseOrders is an 850 analog, SubmitShipmentConfirmations is an 856 analog, submitInvoices is an 810 analog — Amazon's vendor surface re-skins the EDI transaction cycle as JSON. And its catalog is the industry's largest free ASIN-to-GTIN oracle, which makes it a connector and an identifier bridge at once.

2026-07-31  ·  ED-3 — the in-house supply-chain platform team

The 856 is a tree, a manifest, and a promise — anatomy of the ASN

The 856 is three claims at once — a packing tree, a shipment manifest, and a promise against a purchase order. Reading it claim by claim beats reading it segment by segment, and survives partner-guide variation.

2026-07-31  ·  ED-1 — the supply-chain ISV / traceability-vendor engineering org

bizTransaction is a core field, not a custom extension

CBV 2.0 ships po, desadv, inv, and recadv as first-class bizTransaction types, and bizTransactionList rides on every EPCIS event type. Carrying a customer's PO numbers needs zero extension namespaces.

2026-07-31  ·  ED-3 — the in-house supply-chain platform team

Business Central put item.gtin in the standard API — and forgot the webhook

Dynamics 365 Business Central exposes the full document cycle — purchaseOrders, salesShipments, purchaseReceipts, invoices — with a real GTIN field in the standard v2.0 API. Its webhook entity list just doesn't cover half of it, so the honest intake design is webhook-where-possible, poll-where-not, stated per entity.

2026-07-31  ·  ED-3 — the in-house supply-chain platform team

Byte 4 is the law — X12 delimiters are self-describing

An X12 interchange declares its own delimiters — element separator at byte 4, component separator at ISA16, terminator after ISA16, repetition separator at ISA11 in 005010. Three delimiter sets, one identical canonical JSON.

2026-07-31  ·  ED-3 — the in-house supply-chain platform team

One pivot, many faces — the canonical JSON contract

Every segment, element, component, and delimiter choice survives into one canonical JSON form, published as JSON Schema. Friendly shapes, event compiles, and re-emission are pure derivations from that pivot.

2026-07-31  ·  ED-3 — the in-house supply-chain platform team

The bill of lading went digital and brought an event model with it

DCSA's Apache-2.0 OpenAPI standards give ocean freight an open event vocabulary and a canonical eBL that compiles to CBV bol — and UN/CEFACT's multimodal track-and-trace standard explicitly adopted the EPCIS event model. Freight's open rails already lean on the record's native grammar.

2026-07-31  ·  ED-1 — the supply-chain ISV / traceability-vendor engineering org

A delivered webhook is evidence, not a receiving advice

Parcel aggregators are the cheapest event feed in the landscape and the poorest in identifiers — tracking number and carrier, no GTIN, no GLN, no SSCC. So a delivered webhook compiles to corroborating evidence on the record, and the pipeline refuses to mint a recadv or a receiving event from it.

2026-07-31  ·  ED-1 — the supply-chain ISV / traceability-vendor engineering org

desadv is the ASN — the spec says so in its own words

CBV 2.0 defines desadv with the sentence "Also called an 'Advanced Shipment Notice'" and rules that the value desadv is used regardless of local nomenclature. Every 856, every EANCOM DESADV, and every fulfillment webhook compiles to the same reference type.

2026-07-31  ·  ED-1 — the supply-chain ISV / traceability-vendor engineering org

The EANCOM DESADV: a full open-reference walkthrough with the EPCIS join

The EANCOM DESADV is the international ASN — GS1-published and freely documented — so this is the one despatch-advice walkthrough that can be complete on the page, from BGM to the CPS tree to validated AggregationEvents.

2026-07-31  ·  ED-1 — the supply-chain ISV / traceability-vendor engineering org

The retail dialect nobody blogs about: EANCOM, GS1 XML, and where volume lives

GS1's own adoption numbers put EANCOM at roughly 126,000 companies against GS1 XML's 47,000 — so an EDIFACT/EANCOM-first pipeline covers the larger installed base, and GS1 XML becomes a cheap add because both share one GS1 semantic dictionary.

2026-07-31  ·  ED-3 — the in-house supply-chain platform team

Ecommerce has orders and shipments — and no invoice, anywhere

Shopify's Admin API sources po-analog orders, desadv-grade fulfillments with tracking, and rma-shaped returns. What it cannot source — like every ecommerce platform — is an invoice, and its barcode field is free text. What an ecommerce-sourced record can and cannot claim, stated exactly.

2026-07-31  ·  ED-3 — the in-house supply-chain platform team

The directory you can actually vendor: UNTDID, sha256-pinned

UNECE publishes the complete UN/EDIFACT directories free of charge, so the transactions.dev reference goes dictionary-deep on EDIFACT and EANCOM — every vendored file pinned by digest, with the license reading journaled and dated.

2026-07-31  ·  ED-1 — the supply-chain ISV / traceability-vendor engineering org

The EDIFACT ORDERS message, and what po looks like from Brussels

ORDERS is the open-content purchase order — same commercial semantics as the 850, fully documentable from the pinned UNTDID directories — and its BGM document number is the po reference every later document in the cycle echoes.

2026-07-31  ·  ED-3 — the in-house supply-chain platform team

Every wire format is a dialect. The transaction is the noun.

X12, EDIFACT, and API-native JSON are three surface syntaxes for the same small CBV vocabulary. transactions.dev compiles all three to bizTransaction references that ride on EPCIS 2.0 events — conformant, and a superset only where the document carries more than the standard models.

2026-07-31  ·  ED-3 — the in-house supply-chain platform team

From 856 to EPCIS document: every byte accounted for

A complete ASN compiles to a shipping ObjectEvent plus an AggregationEvent tree — desadv, po, and bol on bizTransactionList, party GLNs on source and destination — and the output validates against the pinned official EPCIS 2.0 schema. The full fixture pair, inline.

2026-07-31  ·  ED-3 — the in-house supply-chain platform team

Grammars are data, and data has provenance — GRAMMAR-PINS.json

Every (transaction set × version) grammar is a self-authored data file with a provenance block, pinned by sha256, changed only by journaled human ruling — and the verify gate refuses a tampered file.

2026-07-31  ·  ED-1 — the supply-chain ISV / traceability-vendor engineering org

Shipment, Order, Pack, Item: where the HL mapping stops being derivation

Nearly every step from the 856's HL loop to an AggregationEvent is a derivation an engineer can check against the file. Exactly one step is a ruling — tare-versus-pack SSCC nesting — and a governed pipeline names it, pins it, and changes it only by journal.

2026-07-31  ·  ED-1 — the supply-chain ISV / traceability-vendor engineering org

INVOIC to inv: billing context on the record, disputes left where they belong

The EDIFACT INVOIC and its 810 twin compile to an inv reference that answers "which billing document covers this movement" — while payment status, disputes, and AP workflow stay deliberately out of the record's scope.

2026-07-31  ·  ED-1 — the supply-chain ISV / traceability-vendor engineering org

The ISA segment is 106 characters of load-bearing whitespace

X12's interchange header is fixed-width in a delimited format — padding is significant, byte 4 defines the element separator, and most real-world parse failures are envelope failures. The byte ruler, annotated.

2026-07-31  ·  ED-1 — the supply-chain ISV / traceability-vendor engineering org

N1 loops are your sourceList: party GLNs land in core fields

CBV 2.0 §7.4 defines exactly three source/destination types — owning_party, possessing_party, location — and the 856's GLN-qualified N1 loops map onto them without extensions. Seller to source, buyer to destination, ship-from and ship-to as locations.

2026-07-31  ·  ED-3 — the in-house supply-chain platform team

Naming the document itself — GDTI, Digital Link, and the hash fallback

CBV 2.0 gives bizTransaction references a complete identifier discipline — GDTI EPC URIs, GS1 Digital Link URIs, and a hash-URI fallback for documents with no issuer-assigned identity. Every reference the pipeline emits is checkable.

2026-07-31  ·  ED-3 — the in-house supply-chain platform team

NetSuite is the one system that already has all four documents

purchaseOrder, itemFulfillment, itemReceipt, invoice — NetSuite's REST record set carries the entire transaction cycle as first-class objects, which makes it the highest-strategic-weight connector in the matrix despite real friction.

2026-07-31  ·  ED-2 — the RFID systems-integrator / VAR practice

A thousand private PDFs — partner rules as an overlay you own

Every hub constrains the 856 differently, in implementation guides no corpus can cover. Partner rules are a user-authored JSON overlay on the base grammar — validated like the grammar, pinned like the grammar, never a code fork.

2026-07-31  ·  ED-1 — the supply-chain ISV / traceability-vendor engineering org

The document nobody sends: recadv, the 861, and the close of the cycle

The receiving advice is the least-implemented, most spec-supported document in the transaction cycle. CBV defines recadv beside po, desadv, and inv — and its natural modern source is not an 861 but a WMS goods-receipt object compiled to the same reference.

2026-07-31  ·  ED-3 — the in-house supply-chain platform team

RECADV in full: the open receiving advice, and the reconcile it encodes

RECADV is the discrepancy-bearing document of the cycle — received versus accepted versus rejected, per line — and because it is UNTDID-open it can be fully documented, making it the natural output format for a reconcile verdict.

2026-07-31  ·  ED-2 — the RFID systems-integrator / VAR practice

Reconcile is a verdict, not a report

Shipped-versus-seen is only useful as a machine verdict — a typed diff between what the ASN claimed and what the events observed, with an exit code an integrator can wire a go-live gate to.

2026-07-31  ·  ED-1 — the supply-chain ISV / traceability-vendor engineering org

SAP still speaks IDoc, and IDoc is our home game

S/4HANA's OData catalog and its IDoc traffic are two faces of one transaction cycle. ORDERS05, DELVRY03, and INVOIC02 are EDI semantics in SAP syntax, and the same compile that lands an 856 as events lands them too — beside the strongest GS1 identifier posture of any ERP.

2026-07-31  ·  ED-3 — the in-house supply-chain platform team

The only 3PL that hands you GTIN, lot, and a receiving object

ShipBob's Warehouse Receiving Order is the rarest document in the API landscape — a first-class receiving object that compiles to recadv — next to product-level gtin, upc, barcodes, and lot support, behind self-serve keys and a full sandbox. The receiving side of the record, without asking anyone's permission.

2026-07-31  ·  ED-1 — the supply-chain ISV / traceability-vendor engineering org

The 214 is not an event record — and that's fine

Carrier status messages carry no EPCs and no performer, so the honest compile is thin — a bol reference plus transport context on the record, never a fabricated ObjectEvent. Both candidate compiles shown, one of them refused.

2026-07-31  ·  ED-1 — the supply-chain ISV / traceability-vendor engineering org

The 850 asks, the 810 settles — anatomy of the commercial bookends

BEG03's purchase-order number is the reference every later document echoes, and the three-way match — ordered versus shipped versus billed — is a join across po, desadv, and inv references the event record can hold on one spine.

2026-07-31  ·  ED-3 — the in-house supply-chain platform team

The 856 is already an aggregation tree

The ASN's HL hierarchy — Shipment, Order, Tare, Pack, Item — is structurally an EPCIS aggregation tree. Compiling one into AggregationEvents is a projection, not an interpretation.

2026-07-31  ·  ED-2 — the RFID systems-integrator / VAR practice

940 and 945 — the warehouse speaks a different dialect of shipping

The warehouse-fulfillment pair compiles to picking and shipping ObjectEvents, but which date becomes eventTime and what a 945 means are semantic rulings — so the mapping itself is pinned data, changed only by journaled ruling.

2026-07-31  ·  ED-2 — the RFID systems-integrator / VAR practice

The ASN said 48 cases. The dock saw 47. Now what?

Once both sides speak GTIN and SSCC, reconciling an ASN against captured events is a deterministic set comparison — matched, missing, unexpected, lot-mismatch — and its typed output is precisely the input a receiving advice needs.

2026-07-31  ·  ED-2 — the RFID systems-integrator / VAR practice

The envelope must agree with itself — control numbers and counts

X12's three-level envelope carries redundant self-checks — control-number echoes and segment and group counts. Validating them catches truncation, splicing, and duplication before any grammar work begins.

2026-07-31  ·  ED-1 — the supply-chain ISV / traceability-vendor engineering org

Almost nothing on the wire carries a GLN — the identifier gap is the product

We audited thirty-seven developer surfaces across ecommerce, parcel, freight, WMS, ERP, and POS against one question — what GS1 identity actually rides the API? The census — zero commercial APIs carry SSCC, two carry GLN — is the verified finding that makes an enrichment layer necessary rather than nice-to-have.

2026-07-31  ·  ED-3 — the in-house supply-chain platform team

The GTIN is the join key: attaching ASN lines to serial-level events

An ASN line's GTIN matches the GTIN inside sgtin EPCs and lot-level epcClass URIs, so PO-line and ASN-line context attaches to each shipped serial by a deterministic join, not a heuristic match. The anatomy, the normalization traps, and what honestly refuses to join.

2026-07-31  ·  ED-4 — the arriving self-principal agent

Everyone shipped an MCP server that stops at parse

Every MCP-EDI repo in the field census stops at parse/validate/997. The transactions.dev MCP door re-dispatches the same verbs through the same core, and its output is a conformant event record with trading-partner context.

2026-07-31  ·  ED-1 — the supply-chain ISV / traceability-vendor engineering org

emit(parse(x)) === x, byte for byte, or the job says why not

Every parse ships with an emit-and-diff fidelity report. Byte-exact is the baseline; the two legal normalizations are recorded as canonical-equal with diff positions, never silently passed.

2026-07-31  ·  ED-1 — the supply-chain ISV / traceability-vendor engineering org

The standard already named your paperwork: a §7.3 close reading

The CBV business-transaction vocabulary was written with EDI document types as first-class values — po, desadv, inv, recadv, bol, prodorder, rma. Joining EDI context onto events is core spec machinery, not a vendor extension, and this post reads the enumeration line by line.

2026-07-31  ·  ED-1 — the supply-chain ISV / traceability-vendor engineering org

Stedi went to healthcare. The supply-chain layer is open ground.

The best EDI reference on the internet belongs to a healthcare clearinghouse now, and our audit of five developer-EDI vendors found no EPCIS product anywhere. The EDI-to-events layer is verifiably unoccupied.

2026-07-31  ·  ED-1 — the supply-chain ISV / traceability-vendor engineering org

When there's no official test suite, make the parsers vote

X12 publishes no conformance suite and runs no certification program. Ground truth here is what independent open parsers agree on — disagreements go to a journaled adjudication queue, and the agreement rate is a published number.

2026-07-31  ·  ED-3 — the in-house supply-chain platform team

Exit 0, exit 1, exit 2 — a CLI contract agents can bet on

Every verb honors one contract — exit 0 ok, exit 1 negative domain verdict, exit 2 usage; payload-only stdout; typed errors on stderr — because a negative verdict is a result, not a failure, and an agent must tell the difference mechanically.

2026-07-31  ·  ED-3 — the in-house supply-chain platform team

The why dimension has a field on every event type

CBV 2.0 §8.5 puts bizTransactionList on every EPCIS event type — Object, Aggregation, Transaction, Transformation, Association. Business-document context is an event field, not a side system you reconcile against at night.

2026-07-31  ·  ED-1 — the supply-chain ISV / traceability-vendor engineering org

997, 999, CONTRL — three acknowledgments, one question

The 997, the 999, and EDIFACT's CONTRL all answer the same layered question — received, syntactically valid, accepted. Generating them is a pure function of a validation result, which is why acknowledging a bad document is a successful operation.

2026-07-31  ·  ED-3 — the in-house supply-chain platform team

Order, DespatchAdvice, Invoice, ReceiptAdvice: UBL's four are CBV's four

OASIS UBL 2.3's document library maps one-to-one onto the CBV core four — Order to po, DespatchAdvice to desadv, Invoice to inv, ReceiptAdvice to recadv — with royalty-free schemas, making UBL the cleanest standards bridge in the landscape.

2026-07-31  ·  ED-3 — the in-house supply-chain platform team

The full document cycle exists in exactly one place, and it isn't your storefront

Only the top ERPs carry po, desadv, inv, and recadv as API objects. Ecommerce stops at order plus fulfillment; small-business accounting stops at po plus inv with no shipment or receipt objects at all. Intake architecture is decided by where each reference type actually lives — a decision brief with the coverage matrix.

2026-07-31  ·  ED-3 — the in-house supply-chain platform team

The record knows a case arrived. It should know who received it.

A receiving event that names its ASN and PO answers the auditor's first question and not the second. EPCIS 2.0's five dimensions carry no performer — so the record carries who, the attested observer, permanently distinct from capturedBy, the warrantor account, beside the same bizTransactionList.

2026-07-31  ·  ED-3 — the in-house supply-chain platform team

The reference we won't clone: X12 licensing, stated plainly

X12's copyright regime makes a free segment dictionary legally unbuildable without a negotiated partner deal — Stedi has one; we don't pretend to. Our X12 pages are original prose plus deep links, and the constraint is stated on the page.