Typical X12/EDIFACT/SAP IDoc mapping: transportation stages in logistics EDI

(Disclaimer ๐Ÿ™‚ I’ve been working with logistics documents (Ocean and Road primarily, plus some Rail and Air) a lot recently, but I see them from the EDI prospective and might not fully understand business behind them. So I probably not always use the right terms, or misunderstand some details. This technical article is more about the structures used to describe transportation stages and related data.)

Another complex EDI case, related to the logistics EDI documents, is how different formats describe transportation stages (legs, conveyances, …). There are 2 main ways of describing transportation legs: stages and stops. For example, we need to move cargo from point A to point D, with points B and C in between.

A -> B -> C -> D

In case of Ocean Logistics it might be:

  • A-B, pre-carriage (warehouse to loading port)
  • B-C, main-carriage (loading to unloading ports)
  • C-D, on-carriage (unloading port to delivery destination)

In case of Motor it might be A as the loading point (warehouse) and B, C and D as Ship To store locations.

So, we could describe this route (A->D) as a set of stops (A, B, C and D) or as a set of legs (stages, conveyances, โ€ฆ) (AB, BC and CD). As we’ll see, different formats use one of these approaches.

Of course, for very simple cases, when we are interested in the first and last points only, we can always use Ship From and Ship To locations (N1 in X12, NAD in EDIFACT and something like E1EDKA1 in SAP Idoc (depends on the document)). It is typical for Orders or ASNs. But when it comes to Logistics, especially complex scenarios (like Ocean) and such things as Booking Request/Response, Shipping Instructions or Load Tender Motor documents, we need to know much more details – locations, requested/estimated/scheduled/actual dates of departure/arrival, carriers and sub-carriers, information about consignments/products loaded/unloaded in different points and so on. And logistic-specific documents contain structures for them.

Let’s use this example – there are 3 stages (4 stops):

  1. A, Loading point for Product A, 01 Jun 2017
  2. B, Loading point for Product B, 02 Jun 2017
  3. C, Unloading point for Product A, 20 Jun 2017
  4. D, Unloading point for Product B, 22 Jun 2017


Let’s start with SAP IDoc, SHPMNT05. It uses stages, not stops – i.e. three (AB, BC and CD) legs for our example. E1EDK33 (Shipment Stage) group is used to describe them

    QUALF (002 pickup)
    QUALF (005 delivery)

E1EDK33 (Shipment Stage)
    VSART << type

    E1EDT44 (Shipment stages point)
        QUALI (Qualifier for stage point, 001 for Origin, 002 for Destination)
        E1ADRM6 (Address)

        PARTNER_Q (SP = Carrier)

    E1EDT45 (Date (shipment stage))
        QUALF (005 delivery)
        NTEND << delivery

    E1EDT01 (Shipment Item Assignment)
        VBELN (Delivery #)

For our case, there will be the following structure (it depends on implementation, but you should expect something similar):

    QUALF = 002
    NTANF = 20170601
    QUALF = 005
    NTANF = 20170622

E1EDK33 <<< leg AB
    TSRFO = 0001

        QUALI = 001
            NAME1 = A
        QUALI = 002
            NAME1 = B
        QUALF = 005
        NTEND = 20170602
E1EDK33 <<< leg BC
    TSRFO = 0002

        QUALI = 001
            NAME1 = B
        QUALI = 002
            NAME1 = C
        QUALF = 005
        NTEND = 20170620
E1EDK33 <<< leg CD
    TSRFO = 0003

        QUALI = 001
            NAME1 = C
        QUALI = 002
            NAME1 = D
        QUALF = 005
        NTEND = 20170622

I hope it is clear – every leg (AB, BC and CD) creates a separate E1EDK33 group. E1EDT44s are used to describe “points” (stops). E1EDT44 with QUALI of 001 describes start point of this leg, and E1EDT44 with QUALI of 002 – end.

There are some other important records under these E1EDK33s, which are out of scope of this article. But I want to mention them due to their importance:

  • E1ADRM7 (PARTNER_Q = SP) is used for the Carrier which is responsible for this stage.
  • E1EDT01(s) is used to connect this stage and delivery(ies) on this stage. Deliveries – E1EDL20(s). If Product A belongs to delivery DA, and Product B belongs to delivery DB, then
E1EDK33 (A to B)
        VBELN = DA <<< Delivery DA appears on this leg - it was loaded on stop A
E1EDK33 (B to C)
        VBELN = DA <<< Last stage for Delivery DA - it was unloaded on stop C
        VBELN = DB <<< Delivery DB appears on this leg - it was loaded on stop B
E1EDK33 (C to D)
        VBELN = DB <<< Last stage for Delivery DA - it was unloaded on stop D


There are many logistics messages in EDIFACT which use transportation stages, including IFTMBF (booking request), IFTMBC (booking response) and IFTMIN (instructions). All of them use the same structure – TDT group. Similar to IDoc, EDIFACT uses stages – not stops.

TDT <<< Details of transport
    TDT-01 (stage type)
    TDT-03 (transportation mode)
    TDT-04 (transportation means)
    TDT-05 (carrier)

    DTM (133) <<< Departure date, estimated
    DTM (132) <<< Arrival date, estimated

    LOC (9) <<< Place of loading
    LOC (11) <<< Place of discharge

TDT-01 might be 10 (pre-carriage), 20 (main-carriage) or 30 (on-carriage) for Ocean logistics; 1, 12 or 20 for inland and so on. Dates (DTM) might use 2 (Delivery date, requested), 10 (Shipment date, requested), 133 (Departure date, estimated), 132 (Arrival date, estimated) and others. Locations (LOC) might be 9 (Place of loading), 11 (Place of discharge) and others.

For our case it might be (depends on implementation, but something like this):






X12 uses different sets of documents depending on the means of transport. 2xx (204 for Load Tender Motor, 214 for Shipment Status) for Road, 3xx (300 for Booking Request, 301 for Booking Confirmation, 304 for Instructions and 315 for Shipment Status) for Ocean and 4xx (404 for Rail Carrier Shipment Information) for Rail. X12 uses stops/points, not legs. And since different documents use different groups/segments for transportation stages, we’ll review Road (204 Load Tender Motor) and Ocean (300 Ocean Booking Request) separately.

X12 204 Motor Carrier Load Tender

S5 <<< Stop Off Details
    G62 <<< DateTime
    N1 Group <<< Partner data

As I mentioned above, the X12 uses stops, so every S5 represents some point on the route. S5-01 (Stop Sequence number) is used to indicate the number of the stop in sequence (1, 2, 3, …). S5-02 (Stop Reason code) is used to indicate the nature of stop – typical values are PL (Partial Load), CL (Complete Load), PU (Partial Unload) and CU (Complete Unload). G62 is used for dates, for example 68 (Requested Delivery Date) and 69 (Scheduled Pick-Up Date). N1 is used for location, and typically they are either SF (Ship From) or ST (Ship To) locations. Our example might be represented by something like this:


As you can see, A is Partial Load point, B is Complete Load, C is Partial Unload and D is Complete Unload.

Here I want to step aside and tell a funny story from one of the projects I was working on. A client had been using X12 204 Motor Load Tender for a long time when I found that they use the reverse order of S5s – i.e. the first stop in their 204 was CU (Complete Unloading) and the last – CL (Complete Loading). I was about to “fix” it, but decided to ask. It turned out that a 3PL company they worked with used these 204 as the loading instructions – which pallets should be loaded first in truck and which – last. I.e. pallets which should be dropped off last should go into truck first (LIFO, last-in-first-out queue). So they asked to be sending S5s this way ๐Ÿ™‚

X12 300 Reservation (Booking Request) (Ocean)

R4 <<< Port or Terminal
    DTM <<< DateTime

Ocean logistics document use similar approach. R4 represents stops, and includes the type (L for Port of Loading, D for Port of Discharge, T for Transshipment port and so on). Also it includes location names/codes and other information. DTM is used for dates – and in Booking Request they often send delivery dates (for example, 071 is for Requested for Delivery (After and Including)), and Carrier/Forwarder sends Pickup/Cut Off/… dates back. So, it might be like this:


As always, it is an idea to help you to read and understand the EDI data ๐Ÿ™‚

Gennady Kim


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s