United Nations/Electronic Data Interchange for Administration, Commerce and Transport (UN/EDIFACT) is an international standard for electronic data interchange (EDI) developed for the United Nations and approved and published by UNECE, the UN Economic Commission for Europe.
In 1987, following the convergence of the UN and US/ANSI syntax proposals, the UN/EDIFACT Syntax Rules were approved as the ISO standard ISO 9735 by the International Organization for Standardization.
The EDIFACT standard provides:
The work of maintenance and further development of this standard is done through the United Nations Centre for Trade Facilitation and Electronic Business (UN/CEFACT) under the UN Economic Commission for Europe, in the Finance Domain working group UN CEFACT TBG5.
See below for an example of an EDIFACT message used to answer a flight ticket (FRA-JFK-MIA) availability request:
UNA:+.? ' UNB+IATB:1+6XPPC:ZZ+LHPPC:ZZ+940101:0950+1' UNH+1+PAORES:93:1:IA' MSG+1:45' IFT+3+XYZCOMPANY AVAILABILITY' ERC+A7V:1:AMD' IFT+3+NO MORE FLIGHTS' ODI' TVL+240493:1000::1220+FRA+JFK+DL+400+C' PDI++C:3+Y::3+F::1' APD+74C:0:::6++++++6X' TVL+240493:1740::2030+JFK+MIA+DL+081+C' PDI++C:4' APD+EM2:0:1630::6+++++++DA' UNT+13+1' UNZ+1+1'
The UNA segment is optional. If present, it specifies the special characters that are to be used to interpret the remainder of the message. There are six characters following
UNA in this order:
With the exception of the decimal mark (see below), the special characters in the sample UNA segment above are also the default values.
The component data element separator and data element separator are the "first level" and "second level" separators of data elements within a message segment. Referring to them as + and : for brevity, the + separates top-level or composite data elements, and : separates second-level data elements nested within composite data elements. Trailing empty (or null) data elements and their leading separators are omitted to reduce message size.
The decimal mark is used to separate the integer from the fractional part of non-integer numbers. The optional nature of the UNA segment and the initial choice of the comma (",") as the default decimal mark provide a source of common confusion. Versions 1 through 3 of the ISO 9735 syntax rules specify the comma as the default; version 4 states that the decimal mark position in the UNA segment is to be ignored and that the comma and the dot (".") may be used indifferently in numeric data values. The UNB segment indicates which version of the syntax rules is in effect.
Release character (analogous to the \ in regular expressions) is used as a prefix to remove special meaning from the separator, segment termination, and release characters when they are used as plain text.
Segment terminator indicates the end of a message segment.
Note: The line breaks after each segment in this example have been added for readability. There are typically no line breaks in EDI data.
UNH+1+PAORES:93:1:IA'- This is the message header segment which is required at the start of every message. This code specifies that the message name and version is PAORES 93 revision 1 and it was defined by the organisation IA (IATA).
IFT+3+NO MORE FLIGHTS' - This is an "Interactive Free Text" segment containing the text "NO MORE FLIGHTS".
UNT+13+1' - This is the message trailer segment. It indicated that the message sent contains 13 segments.
EDIFACT has a hierarchical structure where the top level is referred to as an interchange, and lower levels contain multiple messages which consist of segments, which in turn consist of composites. The final iteration is an element which is derived from the United Nations Trade Data Element Directory (UNTDED); these are normalised throughout the EDIFACT standard.
A group or segment can be mandatory (M) or conditional (C) and can be specified to repeat. For example :
- C99 indicates between 0 and 99 repetitions of a segment or group - M99 signifies between 1 and 99 repetitions of a segment or group
A group, like a message, is a sequence of segments or groups. The first segment or group beneath a group must be mandatory, and the group should be made conditional if the logic of the situation demands it.
|_Service String Advice UNA Optional |____Interchange Header UNB Mandatory : |___Functional Group Header UNG Conditional : : |___Message Header UNH Mandatory : : : |__ User Data Segments As required : : |__ Message Trailer UNT Mandatory : |__ Functional Group Trailer UNE Conditional |___ Interchange Trailer UNZ Mandatory