Monday, 9 December 2013

Understanding EDI Structure

EDI Structure

Primary Levels are

1. Interchange Envelops
2. Functional Group
3. Transaction set


Data Element
A data element is equivalent to a field in a data dictionary. Data elements have a name, a data element number, a brief description, a data type, and a minimum and maximum length. For elements which represent codes, either a list of valid codes is included or a reference is included to a source outside of the X12 standard. Elements are separated by delimiters

Data Types

Data elements may have the following types:

N - Numeric with implied decimal point, signed.
Example: N2 indicates a numeric with two decimal places. 12.34 becomes 1234. N0 indicates in integer.
R - Decimal Number with explicit decimal point, signed.
Example: 12.34 represented in R format is 12.34. Starting with 4010, exponential notation is also supported.
ID - Identifier - A coded value, usually alphanumeric.
AN - String - alphanumeric.
DT - Date - YYMMDD. As of 4010, CCYYMMDD is also supported.
TM - Time - HHMM, with optional seconds and hundredths.
B - Binary - Any sequence of 8 bit bytes.


Composite Data Structure

A composite data structure consists of two or more simple data elements separated by a delimiter character known as the component data element separator. The individual component data elements in the composite may be designated as either mandatory or optional.

A segment is a logical grouping of data elements. A segment is equivalent to a record type. A segment is composed of one or more data elements or composite data structures, which are equivalent to the fields in a record. Segments start with a two or three character segment tag which identifies the segment, equivalent to a record type field. Data elements are separated by a delimiter character known as an element separator, and end with a different delimiter character known as the segment terminator.
Elements which are not assigned values in a particular instance of a segment are represented by consecutive delimiters, and such trailing delimiters are not transmitted. For example, if a segment XYX has five elements and in a particular transmission only the second has a value, it is represented as XYZ**123<CR>, where "*" is the element separator and <CR> is the segment terminator.



In an X12 message, the various delimiters are part of the syntax, dividing up the different elements of a message. The delimiters used in a message are defined in the interchange control header, the outermost layer enveloping the message.
For this reason, there is flexibility in the delimiters that are used. No suggested delimiters are recommended as part of the X12 standards, but the industry-specific implementation guides do have recommended delimiters.
The default delimiters  are:
Segment terminator
~ (tilde)
Data element separator
* (asterisk)
Subelement (component) separator
: (colon)
Repetition separator (version 4020 and later)
+ (plus sign)


Loop is a set of related segments in a Transaction Set. Segments are grouped together in this way to conveniently represent a block of related information. No formal Loops are defined, but several basic loop types, such as a Name/Address loop, appear with minor variations in many Transaction Sets. Different loops may be nested within each other, and loops may repeat up to the maximum loop occurrences specified within the Transaction Set.

Example for loop
1000A (Submitter) Loop
This loop contains submitter information.  A submitter is the entity that is sending the claims to the payer.  In most cases, this is the doctor or clinic name.

Example: NM1*41*2*DOCTORSOFFICE*****46*44444~

2010BA (Insured Patient) Loop
This loop contains the Patient (if the patient is the insured, otherwise Insured Person) Name, contract number, address, SSN (if used), and birthdate.

NM1*IL*1*DOE*JOHN*F***MI*ABC849559999~     ('MI' stands for member identification, followed by contract number)
DMG*D8*19750101*M~                   ('DMG' stands for Demographic (Birth date) information.  Date format is CCYYMMDD)

Understanding EDI-Loops, Segments, and Elements

The best way to think of an EDI claim file is like a page in a book:
The Loops tell you the paragraph
The Segments tell you the sentence
The Elements tell you the word
All of this information together tells you the exact location of the problem.
Here's an example:
Let's say you received a rejection on a 5010 Professional claim, that states Loop 2300, Segment CLM05, Element 1. 
In EDI we would read this as Loop 2300, CLM05-1.
But what does it mean?  Let's break it down--Loop 2300--this is the Claim Information loop (all information relating to the claim, including place of service, admit/discharge dates, etc.  Okay, so we know the problem is in the Claim Information Loop.
Next is the Segment-CLM05.  The 5010 837P Implementation Guide (available from Washington Publishing Company) states
that CLM05 is for Health Care Service Location Information.
Finally, the Element-1.  Again, we consult our implementation guide--CLM05, Element 1, is for Facility Code Value, or Place of Service.  We may not know exactly what the problem is, but we know where to locate the problem in our claim file; and, since we know the field for this Loop/Segment/Element is Place of Service, we should be able to locate this in our software system.

Questions or feedback are always welcome. You can email me at  


  1. Thanks for sharing this great blog with us. keep posting like this.

    Home Care Main Line

  2. Great source to learn EDI . Thanks a lot

  3. It's very generous of you to make this work available. Thank you!

  4. SOOOOOO Helpful! This made the murky world of 837 and 835s much clearer! Thank you!