Format · Output
Generate openTRANS 2.1 purchase orders
openTRANS is an open XML standard for business documents from Germany and fits BMEcat catalogues. every-edi generates purchase orders in openTRANS 2.1 format, from PDF, email, CSV, EDIFACT or cXML, for ERP and merchandise management systems that import openTRANS.
At a glance
- Standard
- openTRANS
- Version
- 2.1
- Document
- ORDER (purchase order)
- every-edi
- Write only (output format)
- Related to
- BMEcat 2005 (catalogue data)
What openTRANS is for
openTRANS describes business documents such as purchase order, order confirmation, delivery note and invoice as XML. Version 2.1 is the widely used release.
The main reason for openTRANS is its close link to BMEcat, the standard for electronic product catalogues: item numbers, descriptions, units and prices use the same elements as the catalogue. An order can therefore refer one to one to the items the supplier published via BMEcat.
Who uses openTRANS
openTRANS is most common among German mid-sized companies: in ERP and merchandise management systems with an openTRANS import, in procurement and shop solutions from German-speaking countries, and at companies that already maintain their catalogue data as BMEcat. Compared with EDIFACT it is easier to read and to validate against a schema.
Why every-edi only writes openTRANS
In practice openTRANS is more often the format an ERP imports orders in than the format customers order in. every-edi therefore uses openTRANS as an output format: orders in any supported input format are handed to your ERP as an openTRANS 2.1 ORDER.
Example
A fictitious openTRANS 2.1 order with two lines.
<?xml version="1.0" encoding="UTF-8"?>
<ORDER xmlns="http://www.opentrans.org/XMLSchema/2.1"
xmlns:bmecat="http://www.bmecat.org/bmecat/2005"
version="2.1" type="standard">
<ORDER_HEADER>
<CONTROL_INFO>
<GENERATOR_INFO>every-edi</GENERATOR_INFO>
<GENERATION_DATE>2026-10-08T09:30:05</GENERATION_DATE>
</CONTROL_INFO>
<ORDER_INFO>
<ORDER_ID>B-26-0815</ORDER_ID>
<ORDER_DATE>2026-10-08</ORDER_DATE>
<DELIVERY_DATE type="optional">
<DELIVERY_START_DATE>2026-10-12</DELIVERY_START_DATE>
<DELIVERY_END_DATE>2026-10-16</DELIVERY_END_DATE>
</DELIVERY_DATE>
<PARTIES>
<PARTY>
<bmecat:PARTY_ID type="gln">4012345000009</bmecat:PARTY_ID>
<PARTY_ROLE>buyer</PARTY_ROLE>
</PARTY>
<PARTY>
<bmecat:PARTY_ID type="gln">4098765000003</bmecat:PARTY_ID>
<PARTY_ROLE>supplier</PARTY_ROLE>
</PARTY>
<PARTY>
<bmecat:PARTY_ID type="gln">4012345000016</bmecat:PARTY_ID>
<PARTY_ROLE>delivery</PARTY_ROLE>
<ADDRESS>
<bmecat:NAME>Beispiel Haustechnik GmbH</bmecat:NAME>
<bmecat:NAME2>Lager Nord, Tor 3</bmecat:NAME2>
<bmecat:STREET>Hafenstraße 40</bmecat:STREET>
<bmecat:ZIP>28217</bmecat:ZIP>
<bmecat:CITY>Bremen</bmecat:CITY>
<bmecat:COUNTRY_CODED>DE</bmecat:COUNTRY_CODED>
</ADDRESS>
</PARTY>
</PARTIES>
<ORDER_PARTIES_REFERENCE>
<bmecat:BUYER_IDREF type="gln">4012345000009</bmecat:BUYER_IDREF>
<bmecat:SUPPLIER_IDREF type="gln">4098765000003</bmecat:SUPPLIER_IDREF>
</ORDER_PARTIES_REFERENCE>
<SHIPMENT_PARTIES_REFERENCE>
<DELIVERY_IDREF type="gln">4012345000016</DELIVERY_IDREF>
</SHIPMENT_PARTIES_REFERENCE>
<bmecat:CURRENCY>EUR</bmecat:CURRENCY>
</ORDER_INFO>
</ORDER_HEADER>
<ORDER_ITEM_LIST>
<ORDER_ITEM>
<LINE_ITEM_ID>1</LINE_ITEM_ID>
<PRODUCT_ID>
<bmecat:SUPPLIER_PID type="supplier_specific">ART-7720</bmecat:SUPPLIER_PID>
<bmecat:INTERNATIONAL_PID type="gtin">4012345678901</bmecat:INTERNATIONAL_PID>
<bmecat:DESCRIPTION_SHORT>Hydraulikzylinder HZ-200/100</bmecat:DESCRIPTION_SHORT>
</PRODUCT_ID>
<QUANTITY>4</QUANTITY>
<bmecat:ORDER_UNIT>C62</bmecat:ORDER_UNIT>
<PRODUCT_PRICE_FIX>
<bmecat:PRICE_AMOUNT>285.00</bmecat:PRICE_AMOUNT>
</PRODUCT_PRICE_FIX>
<PRICE_LINE_AMOUNT>1140.00</PRICE_LINE_AMOUNT>
</ORDER_ITEM>
<ORDER_ITEM>
<LINE_ITEM_ID>2</LINE_ITEM_ID>
<PRODUCT_ID>
<bmecat:SUPPLIER_PID type="supplier_specific">ART-3381</bmecat:SUPPLIER_PID>
<bmecat:INTERNATIONAL_PID type="gtin">4012345678918</bmecat:INTERNATIONAL_PID>
<bmecat:DESCRIPTION_SHORT>Dichtungsset DS-200</bmecat:DESCRIPTION_SHORT>
</PRODUCT_ID>
<QUANTITY>4</QUANTITY>
<bmecat:ORDER_UNIT>SET</bmecat:ORDER_UNIT>
<PRODUCT_PRICE_FIX>
<bmecat:PRICE_AMOUNT>42.50</bmecat:PRICE_AMOUNT>
</PRODUCT_PRICE_FIX>
<PRICE_LINE_AMOUNT>170.00</PRICE_LINE_AMOUNT>
</ORDER_ITEM>
</ORDER_ITEM_LIST>
<ORDER_SUMMARY>
<TOTAL_ITEM_NUM>2</TOTAL_ITEM_NUM>
<TOTAL_AMOUNT>1310.00</TOTAL_AMOUNT>
</ORDER_SUMMARY>
</ORDER> All names, numbers and GLNs in the example are fictitious.
| Element | Meaning |
|---|---|
| <ORDER version="2.1" type="standard"> | Root element with version and order type (standard, express, release or consignment). |
| xmlns, xmlns:bmecat | Namespaces of openTRANS 2.1 and BMEcat 2005. Many elements come straight from BMEcat and carry the bmecat: prefix. |
| <CONTROL_INFO> | Generating system and time of generation. |
| <ORDER_ID>, <ORDER_DATE> | Order number and order date. |
| <DELIVERY_DATE type="optional"> | Delivery period; optional = requested date, fixed = firm date. |
| <PARTIES> / <PARTY> | All parties involved, with role (buyer, supplier, delivery) and ID, here a GLN. |
| <ORDER_PARTIES_REFERENCE> | Refers by ID to the buyer and supplier in PARTIES. |
| <SHIPMENT_PARTIES_REFERENCE> | Refers to the delivery address. |
| <bmecat:SUPPLIER_PID> | Your item number, the same as in the BMEcat catalogue. |
| <bmecat:INTERNATIONAL_PID type="gtin"> | The item’s GTIN. |
| <bmecat:ORDER_UNIT> | Order unit as a UN/ECE Recommendation 20 code: C62 = piece, SET = set. |
| <PRODUCT_PRICE_FIX>, <PRICE_LINE_AMOUNT> | Unit price and line amount. |
| <ORDER_SUMMARY> | Number of lines and order total as check values. |
Common pitfalls
-
openTRANS 1.0 is not 2.1
The versions differ in structure and element names. An import built for 1.0 does not understand 2.1, and vice versa.
-
Namespaces
openTRANS 2.1 uses elements from BMEcat 2005 in their own namespace. If the namespace is wrong, schema validation fails even though the data is correct.
-
Parties and references
Every ID in ORDER_PARTIES_REFERENCE and SHIPMENT_PARTIES_REFERENCE must point to a PARTY_ID in PARTIES, with a matching type (gln, supplier_specific, buyer_specific).
-
Units
ORDER_UNIT expects UN/ECE Recommendation 20 codes such as C62, MTR or KGM. In-house units like “pcs” are rejected by strict imports.
-
Totals and line count
TOTAL_ITEM_NUM and TOTAL_AMOUNT in ORDER_SUMMARY must match the lines. Rounding differences between line amounts and the total are a classic.
-
ERP vendor extensions
Many imports expect additional fields in their own extensions (UDX). Your ERP’s import documentation lists them; we sort this out before the first test import.
What every-edi does with it
- Generates openTRANS 2.1 purchase orders (ORDER) from PDF, email, CSV, EDIFACT ORDERS D96A and cXML.
- Delivery via import folder, SFTP, email or REST, wherever your ERP picks up the file.
- Known input formats (EDIFACT, cXML, known XML and CSV formats) are parsed by rules. Unknown formats are analysed once with AI on the first file; a person checks, and from then on the learned profile works for that sender without AI.
- Uncertain orders only reach your ERP after review in the dashboard.
What is not included (yet)
In every-edi, openTRANS is purely an output format. Incoming openTRANS files and other openTRANS documents such as order confirmation, delivery note or invoice are not currently processed.
Other formats
every-edi also handles GEVIS XML (GEVISEDI01), CSV with header and line records (HDR/POS), free-form CSV tables via learned CSV profiles, and JSON over a REST interface.
Send us a real file.
The quickest way to find out whether every-edi fits your customers is with real examples: three orders and, if you have one, your partner’s specification. You get the result back in the target format.
Request a demo