IFTMIN is the instruction message for transport. Shippers and forwarders send it to a carrier or logistics provider with everything needed to move a consignment. This sample follows EANCOM D96A.
It identifies the parties, the transport stages in TDT groups, the places of loading and delivery, and the goods items with their packages, weights and dangerous goods information.
D96A EAN004TSIFTMIN in EdiFabric.Templates.EdifactThe full EANCOM IFTMIN layout from its OpenEDI definition, the same model ediFabric uses to parse, validate and generate it: 21 loops and 55 segment positions, in file order. Loops are shaded and their segments indented; Max use is how many times a segment or loop may repeat.
| Segment / loop | Name | Usage | Max use |
|---|---|---|---|
UNH | Message header | Mandatory | 1 |
BGM | Beginning of message | Mandatory | 1 |
DTM | Date/time/period | Optional | 9 |
TSR | Transport service requirements | Optional | 9 |
MOA | Monetary amount | Optional | 99 |
FTX | Free text | Optional | 99 |
CNT | Control total | Optional | 9 |
| TOD loop | Terms of delivery or transport | Optional | 2 |
TOD | Terms of delivery or transport | Mandatory | 1 |
LOC | Place/location identification | Optional | 9 |
| RFF loop | Reference | Optional | 99 |
RFF | Reference | Mandatory | 1 |
DTM | Date/time/period | Optional | 9 |
| TDT loop | Details of transport | Optional | 99 |
TDT | Details of transport | Mandatory | 1 |
DTM | Date/time/period | Optional | 9 |
| LOC loop | Place/location identification | Optional | 99 |
LOC | Place/location identification | Mandatory | 1 |
| NAD loop | Name and address | Mandatory | 99 |
NAD | Name and address | Mandatory | 1 |
| CTA loop | Contact information | Optional | 9 |
CTA | Contact information | Mandatory | 1 |
COM | Communication contact | Optional | 9 |
| DOC loop | Document/message details | Optional | 9 |
DOC | Document/message details | Mandatory | 1 |
DTM | Date/time/period | Optional | 1 |
| RFF loop | Reference | Optional | 9 |
RFF | Reference | Mandatory | 1 |
DTM | Date/time/period | Optional | 9 |
| GID loop | Goods item details | Optional | 999 |
GID | Goods item details | Mandatory | 1 |
HAN | Handling instructions | Optional | 1 |
TMP | Temperature | Optional | 1 |
RNG | Range details | Optional | 1 |
LOC | Place/location identification | Optional | 9 |
MOA | Monetary amount | Optional | 9 |
PIA | Additional product id | Optional | 9 |
FTX | Free text | Optional | 9 |
| NAD loop | Name and address | Optional | 9 |
NAD | Name and address | Mandatory | 1 |
DTM | Date/time/period | Optional | 1 |
| MEA loop | Measurements | Optional | 99 |
MEA | Measurements | Mandatory | 1 |
EQN | Number of units | Optional | 1 |
| DIM loop | Dimensions | Optional | 99 |
DIM | Dimensions | Mandatory | 1 |
EQN | Number of units | Optional | 1 |
| RFF loop | Reference | Optional | 9 |
RFF | Reference | Mandatory | 1 |
DTM | Date/time/period | Optional | 9 |
| PCI loop | Package identification | Optional | 9 |
PCI | Package identification | Mandatory | 1 |
GIN | Goods identity number | Optional | 10 |
| DOC loop | Document/message details | Optional | 9 |
DOC | Document/message details | Mandatory | 1 |
DTM | Date/time/period | Optional | 9 |
| SGP loop | Split goods placement | Optional | 999 |
SGP | Split goods placement | Mandatory | 1 |
| DGS loop | Dangerous goods | Optional | 9 |
DGS | Dangerous goods | Mandatory | 1 |
FTX | Free text | Optional | 99 |
| CTA loop | Contact information | Optional | 9 |
CTA | Contact information | Mandatory | 1 |
COM | Communication contact | Optional | 9 |
| MEA loop | Measurements | Optional | 9 |
MEA | Measurements | Mandatory | 1 |
EQN | Number of units | Optional | 1 |
| EQD loop | Equipment details | Optional | 999 |
EQD | Equipment details | Mandatory | 1 |
MEA | Measurements | Optional | 9 |
DIM | Dimensions | Optional | 9 |
SEL | Seal number | Optional | 99 |
| NAD loop | Name and address | Optional | 9 |
NAD | Name and address | Mandatory | 1 |
DTM | Date/time/period | Optional | 1 |
UNT | Message trailer | Mandatory | 1 |
Mandatory segments must be sent, Optional ones only when the data applies. Trading partners often add their own rules in companion guides - ediFabric templates can be adjusted to match. Open the element-level definition in the EdiNation spec library.
An EANCOM transport instruction for one consignment. Paste it into EdiNation to see every element named and validated.
UNB+UNOA:2+SID+RID+20130430:1159+I-EX1/1+++++T01' UNH+ME000001+IFTMIN:D:96A:UN:EAN004' BGM+610+569952+9' DTM+137:20020301:102' DTM+2:200203081100:203' CNT+11:1' RFF+CU:TI1284' TDT+20++30+31' DTM+133:200203051100:203' LOC+9+5412345678908::9' NAD+CZ+5412345123453::9' NAD+CA+5411234512309::9' NAD+CN+5411234444402::9' NAD+DP+5412345145660::9' GID+1+1:09::9+14:PK' HAN+EAT::9' TMP+2+000:CEL' RNG+5+CEL:-5:5' MOA+44:45000:EUR' PIA+5+5410738377117:SRV' MEA+AAE+X7E+KGM:250' PCI+33E' GIN+BJ+354123450000000014' UNT+23+ME000001' UNZ+1+I-EX1/1'
ediFabric turns every loop, segment and element into a named field. This is the transaction from the sample, in the JSON that ediFabric Native and Cloud return and accept.
{
"UNH": {
"MessageReferenceNumber_01": "ME000001",
"MessageIdentifier_02": {
"MessageType_01": "IFTMIN",
"MessageVersionNumber_02": "D",
"MessageReleaseNumber_03": "96A",
"ControllingAgencyCoded_04": "UN",
"AssociationAssignedCode_05": "EAN004"
}
},
"BGM": {
"DOCUMENTMESSAGENAME_01": {
"Documentmessagenamecoded_01": "610"
},
"DOCUMENTMESSAGENUMBER_02": "569952",
"MESSAGEFUNCTIONCODED_03": "9"
},
"DTM": [
{
"DATETIMEPERIOD_01": {
"Datetimeperiodqualifier_01": "137",
"Datetimeperiod_02": "20020301",
"Datetimeperiodformatqualifier_03": "102"
}
},
{
"DATETIMEPERIOD_01": {
"Datetimeperiodqualifier_01": "2",
"Datetimeperiod_02": "200203081100",
"Datetimeperiodformatqualifier_03": "203"
}
}
],
"CNT": [
{
"CONTROL_01": {
"Controlqualifier_01": "11",
"Controlvalue_02": "1"
}
}
],
"RFFLoop": [
{
"RFF": {
"REFERENCE_01": {
"Referencequalifier_01": "CU",
"Referencenumber_02": "TI1284"
}
}
}
],
"TDTLoop": [
{
"TDT": {
"TRANSPORTSTAGEQUALIFIER_01": "20",
"MODEOFTRANSPORT_03": {
"Modeoftransportcoded_01": "30"
},
"TRANSPORTMEANS_04": {
"Typeofmeansoftransportidentification_01": "31"
}
},
"DTM": [
{
"DATETIMEPERIOD_01": {
"Datetimeperiodqualifier_01": "133",
"Datetimeperiod_02": "200203051100",
"Datetimeperiodformatqualifier_03": "203"
}
}
],
"LOCLoop": [
{
"LOC": {
"PLACELOCATIONQUALIFIER_01": "9",
"LOCATIONIDENTIFICATION_02": {
"Placelocationidentification_01": "5412345678908",
"Codelistresponsibleagencycoded_03": "9"
}
}
}
]
}
],
"NADLoop": [
{
"NAD": {
"PARTYQUALIFIER_01": "CZ",
"PARTYIDENTIFICATIONDETAILS_02": {
"Partyididentification_01": "5412345123453",
"Codelistresponsibleagencycoded_03": "9"
}
}
},
{
"NAD": {
"PARTYQUALIFIER_01": "CA",
"PARTYIDENTIFICATIONDETAILS_02": {
"Partyididentification_01": "5411234512309",
"Codelistresponsibleagencycoded_03": "9"
}
}
},
{
"NAD": {
"PARTYQUALIFIER_01": "CN",
"PARTYIDENTIFICATIONDETAILS_02": {
"Partyididentification_01": "5411234444402",
"Codelistresponsibleagencycoded_03": "9"
}
}
},
{
"NAD": {
"PARTYQUALIFIER_01": "DP",
"PARTYIDENTIFICATIONDETAILS_02": {
"Partyididentification_01": "5412345145660",
"Codelistresponsibleagencycoded_03": "9"
}
}
}
],
"GIDLoop": [
{
"GID": {
"GOODSITEMNUMBER_01": "1",
"NUMBERANDTYPEOFPACKAGES_02": {
"Numberofpackages_01": "1",
"Typeofpackagesidentification_02": "09",
"Codelistresponsibleagencycoded_04": "9"
},
"NUMBERANDTYPEOFPACKAGES_03": {
"Numberofpackages_01": "14",
"Typeofpackagesidentification_02": "PK"
}
},
"HAN": {
"HANDLINGINSTRUCTIONS_01": {
"Handlinginstructionscoded_01": "EAT",
"Codelistresponsibleagencycoded_03": "9"
}
},
"TMP": {
"TEMPERATUREQUALIFIER_01": "2",
"TEMPERATURESETTING_02": {
"Temperaturesetting_01": "000",
"Measureunitqualifier_02": "CEL"
}
},
"RNG": {
"RANGETYPEQUALIFIER_01": "5",
"RANGE_02": {
"Measureunitqualifier_01": "CEL",
"Rangeminimum_02": "-5",
"Rangemaximum_03": "5"
}
},
"MOA": [
{
"MONETARYAMOUNT_01": {
"Monetaryamounttypequalifier_01": "44",
"Monetaryamount_02": "45000",
"Currencycoded_03": "EUR"
}
}
],
"PIA": [
{
"PRODUCTIDFUNCTIONQUALIFIER_01": "5",
"ITEMNUMBERIDENTIFICATION_02": {
"Itemnumber_01": "5410738377117",
"Itemnumbertypecoded_02": "SRV"
}
}
],
"MEALoop": [
{
"MEA": {
"MEASUREMENTAPPLICATIONQUALIFIER_01": "AAE",
"MEASUREMENTDETAILS_02": {
"Measurementdimensioncoded_01": "X7E"
},
"VALUERANGE_03": {
"Measureunitqualifier_01": "KGM",
"Measurementvalue_02": "250"
}
}
}
],
"PCILoop": [
{
"PCI": {
"MARKINGINSTRUCTIONSCODED_01": "33E"
},
"GIN": [
{
"IDENTITYNUMBERQUALIFIER_01": "BJ",
"IDENTITYNUMBERRANGE_02": {
"Identitynumber_01": "354123450000000014"
}
}
]
}
]
}
],
"UNT": {
"NumberofSegmentsinaMessage_01": "23",
"MessageReferenceNumber_02": "ME000001"
}
}Read the file into typed objects with ediFabric .NET, or post it to the ediFabric Cloud REST API from any language and get JSON back.
using EdiFabric.Templates.EdifactD96A; License.SetSerial("YOUR_SERIAL_KEY"); using (var stream = File.OpenRead(@"C:\edi\Instruction.txt")) using (var reader = new EdifactReader(stream, "EdiFabric.Templates.Edifact")) { var items = await reader.ReadToEndAsync(); foreach (var transaction in items.OfType<TSIFTMIN>()) { if (transaction.IsValid(out MessageErrorContext errors)) Console.WriteLine($"{transaction.UNH.MessageReferenceNumber_01} is valid"); else Console.WriteLine(string.Join(Environment.NewLine, errors.Flatten())); } }
curl -X POST 'https://api.edination.com/v2/edifact/read' \ -H 'Ocp-Apim-Subscription-Key: YOUR_SERIAL_KEY' \ -H 'Content-Type: application/octet-stream' \ --data-binary '@Instruction.txt'
Populate a TSIFTMIN object in .NET, or post JSON in the shape shown above to ediFabric Cloud, and get a valid IFTMIN file back.
using EdiFabric.Templates.EdifactD96A; License.SetSerial("YOUR_SERIAL_KEY"); var transaction = new TSIFTMIN(); // Message header transaction.UNH = new UNH(); transaction.UNH.MessageReferenceNumber_01 = "0001"; transaction.UNH.MessageIdentifier_02 = new S009(); transaction.UNH.MessageIdentifier_02.MessageType_01 = "IFTMIN"; transaction.UNH.MessageIdentifier_02.MessageVersionNumber_02 = "D"; transaction.UNH.MessageIdentifier_02.MessageReleaseNumber_03 = "96A"; transaction.UNH.MessageIdentifier_02.ControllingAgencyCoded_04 = "UN"; // Transport instruction number transaction.BGM = new BGM(); transaction.BGM.DOCUMENTMESSAGENAME_01 = new C002(); transaction.BGM.DOCUMENTMESSAGENAME_01.Documentmessagenamecoded_01 = "610"; transaction.BGM.Documentmessagenumber_02 = "569952"; transaction.BGM.Messagefunctioncoded_03 = "9"; // Repeating DTM transaction.DTM = new List<DTM>(); // ... set the remaining loops and segments the same way // SegmentBuilders is in the Common project of the example repository using (var stream = new MemoryStream()) { using (var writer = new EdifactWriter(stream)) { writer.Write(SegmentBuilders.BuildUnb("1")); writer.Write(transaction); } Console.WriteLine(Encoding.UTF8.GetString(stream.ToArray())); }
# the JSON returned by /read, edited or produced by your application curl -X POST 'https://api.edination.com/v2/edifact/write' \ -H 'Ocp-Apim-Subscription-Key: YOUR_SERIAL_KEY' \ -H 'Content-Type: application/json' \ --data-binary '@Instruction.json' \ -o 'Instruction.txt'
It is the firm instruction. Some partners use IFTMBF or IFTMBC for booking requests and confirmations, and IFTMIN once the shipment is ready.
With IFTSTA status reports for each event.
The 204 motor carrier load tender, or the 404 for rail.
In .NET, install EdiFabric and EdiFabric.Templates.Edifact, read the file with EdifactReader into TSIFTMIN objects and write them back with EdifactWriter. From any other language, post the file to the ediFabric Cloud REST API, which returns the same structure as JSON and converts JSON back to EANCOM.