Most EDI tools translate EDIFACT into something slightly less painful. CleanEDI does something different. It acts as an anti-corruption layer, a hard architectural boundary that absorbs everything messy on one side and only lets clean, stable business data through the other.
Your systems never know EDIFACT exists.
CleanEDI owns the left side completely. You own the right side completely. Nothing crosses without being transformed into a clean business object first.
The canonical output is a typed business object that maps directly to how your domain thinks about the transaction. An ORDERS message becomes a PurchaseOrder with a Buyer, a Supplier, and a list of OrderLines.
Every field has a defined type. Dates are DateOnly. Amounts are decimal. Nullable fields are explicitly nullable. Your code can rely on the schema.
Cross-validation runs automatically. If the line count in CNT does not match the actual LIN count, a warning is added. If line totals do not reconcile with the summary MOA, a warning is added. You get good data with context, not a silent failure.
{ "orderId": "PO-2026-98745", "documentType": "220", "messageFunction": "9", "orderDate": "2026-08-23", "requestedDeliveryDate": "2026-09-05", "currency": "AUD", "paymentTerms": "Net 30 days", "buyer": { "gln": "9311000000123", "name": "MEGA MART PTY LTD", "abn": "61123456789", "address": { "street": "100 RETAIL WAY", "city": "MELBOURNE", "state": "VIC", "postalCode": "3000", "countryCode": "AU" }, "contact": { "name": "JANE SMITH", "email": "jane@retailer.example" } }, "supplier": { ... }, "lines": [ { "lineNumber": 1, "gtin": "9312345678901", "productDescription": "PREMIUM CHOCOLATE BOX 250G", "quantity": 120, "unitOfMeasure": "PCE", "unitPrice": 8.45, "lineAmount": 1014.00, "tax": { "taxType": "VAT", "rate": 10 } } ], "summary": { "totalLines": 4, "totalAmount": 2405.00, "totalAmountExcludingTax": 2186.36, "totalTaxAmount": 218.64 }}
The canonical model is CleanEDI's internal representation. What your system receives is your version of it, shaped entirely by your transformation rules. Six rule types let you define the exact contract between CleanEDI and your system.
Paste any EDIFACT message into the free decoder. See what the canonical model produces and how transformation rules reshape it for your system.