VDA 4905 is the delivery instruction (Lieferabruf) of the German Association of the Automotive Industry. Car manufacturers send it to suppliers with forecast and call-off quantities per part and plant.
It is a fixed-length format: 128-character records identified by a three-digit record type. 511 is the header, each 512 group covers one part with 513 and 514 call-off dates and quantities, and 519 is the trailer with record counts.
4905/2TS4905 in EdiFabric.Templates.VdaThe full VDA 4905 layout from its OpenEDI definition, the same model ediFabric uses to parse, validate and generate it: 1 loop and 8 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 |
|---|---|---|---|
511 | Header | Mandatory | 1 |
| 512 loop | Delivery instruction data | Mandatory | 1 |
512 | Delivery instruction data | Mandatory | 1 |
513 | Call-off dates and quantities | Mandatory | 1 |
514 | Additional call-off dates and quantities | Optional | >1 |
515 | Manufacturing and material release | Optional | 1 |
517 | Packaging data | Optional | >1 |
518 | Delivery instruction text | Optional | 5 |
519 | 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.
A delivery instruction for one part with call-off dates, quantities and text records. Paste it into EdiNation to see every element named and validated.
5110259012 00323625 0002200023121115111231 5120103 187 121115186 1211091514280009100 CGF-56026482A 13 STL 51301121113432701 0000003460000000019427121115000000000000000 5150100000013021300000000000000001303150000000000 000000 5180107-08140295/04 23-09140029 51801 5190100000010000001000000100000000000000000000200000010000001
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.
{
"S511": {
"RecordType_01": "511",
"Version_02": "02",
"CustomerCode_03": "59012",
"SupplierCode_04": "00323625",
"TransmissionNumberOld_05": "00022",
"TransmissionNumberNew_06": "00023",
"TransmissionDate_07": "121115",
"StartingDate_08": "111231"
},
"S512Loop": [
{
"S512": {
"RecordType_01": "512",
"Version_02": "01",
"CustomerPlantCode_03": "03",
"DeliveryCallOffNumberNew_04": "187",
"DeliveryCallOffDateNew_05": "121115",
"DeliveryCallOffNumberOld_06": "186",
"DeliveryCallOffDateOld_07": "121109",
"ArticleCodeCustomer_08": "1514280009100",
"OrderNumber_10": "CGF-56026482",
"DockGate_11": "A 13",
"QuantityUnitOfMeasure_13": "ST",
"DeliveryFrequency_14": "L"
},
"S513": {
"RecordType_01": "513",
"Version_02": "01",
"DateOfLastRecordedReceipt_03": "121113",
"LastRecordedDeliveryNoteNumber_04": "432701",
"QuantityLastRecordedReceipt_06": "000000346000",
"CommulativeFigureReceipt_07": "0000019427",
"CallOffDate1_08": "121115",
"CallOffQuantity1_09": "000000000",
"CallOffDate2_10": "000000"
},
"S515": {
"RecordType_01": "515",
"Version_02": "01",
"ManufacturingReleaseStartDate_03": "000000",
"ManufacturingReleaseFinalDate_04": "130213",
"ManufacturingReleaseCumulatedRequirements_05": "0000000000",
"MaterialReleaseStartDate_06": "000000",
"MaterialReleaseFinalDate_07": "130315",
"MaterialReleaseCumulatedRequirements_08": "0000000000",
"DatePlanningHorizon_11": "000000"
},
"S518": [
{
"RecordType_01": "518",
"Version_02": "01",
"DeliveryInstructionText1_03": "07-08140295/04",
"DeliveryInstructionText2_04": "23-09140029"
},
{
"RecordType_01": "518",
"Version_02": "01"
}
]
}
],
"S519": {
"RecordType_01": "519",
"Version_02": "01",
"CounterRecordType511_03": "0000001",
"CounterRecordType512_04": "0000001",
"CounterRecordType513_05": "0000001",
"CounterRecordType514_06": "0000000",
"CounterRecordType517_07": "0000000",
"CounterRecordType518_08": "0000002",
"CounterRecordType519_09": "0000001",
"CounterRecordType515_10": "0000001"
}
}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.Vda; License.SetSerial("YOUR_SERIAL_KEY"); using (var stream = File.OpenRead(@"C:\edi\Vda_4905_02.txt")) using (var reader = new VdaReader(stream, MessageContextFactory)) { var items = await reader.ReadToEndAsync(); foreach (var transaction in items.OfType<TS4905>()) { if (transaction.IsValid(out MessageErrorContext errors)) Console.WriteLine($"{transaction.S511.TransmissionNumberNew_06} is valid"); else Console.WriteLine(string.Join(Environment.NewLine, errors.Flatten())); } } static MessageContext MessageContextFactory(string segment) { if (!segment.StartsWith("51102")) return null; return new MessageContext("4905", segment.Substring(29, 5), "1", null, "VDA", null, segment.Substring(15, 9), "", segment.Substring(6, 9), "", mc => Assembly.Load(new AssemblyName("EdiFabric.Templates.Vda"))); }
curl -X POST 'https://api.edination.com/v2/vda/read' \ -H 'Ocp-Apim-Subscription-Key: YOUR_SERIAL_KEY' \ -H 'Content-Type: application/octet-stream' \ --data-binary '@Vda_4905_02.txt'
Populate a TS4905 object in .NET, or post JSON in the shape shown above to ediFabric Cloud, and get a valid VDA 4905 file back.
using EdiFabric.Templates.Vda; License.SetSerial("YOUR_SERIAL_KEY"); var transaction = new TS4905(); // 511 header: customer 59012 sends call-off transmission 00023 to supplier 00323625 transaction.S511 = new S511(); transaction.S511.RecordType_01 = "511"; transaction.S511.Version_02 = "02"; transaction.S511.CustomerCode_03 = "59012"; transaction.S511.SupplierCode_04 = "00323625"; transaction.S511.TransmissionNumberOld_05 = "00022"; transaction.S511.TransmissionNumberNew_06 = "00023"; transaction.S511.TransmissionDate_07 = "121115"; // 512 call-off for plant 03, replacing call-off 186 with call-off 187 transaction.S512Loop = new List<TS4905_S512Loop>(); var callOff = new TS4905_S512Loop(); callOff.S512 = new S512(); callOff.S512.RecordType_01 = "512"; callOff.S512.Version_02 = "01"; callOff.S512.CustomerPlantCode_03 = "03"; callOff.S512.DeliveryCallOffNumberNew_04 = "187"; callOff.S512.DeliveryCallOffDateNew_05 = "121115"; callOff.S512.DeliveryCallOffNumberOld_06 = "186"; callOff.S512.DeliveryCallOffDateOld_07 = "121109"; transaction.S512Loop.Add(callOff); // ... set the remaining loops and segments the same way using (var stream = new MemoryStream()) { using (var writer = new VdaWriter(stream, Environment.NewLine)) 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/vda/write' \ -H 'Ocp-Apim-Subscription-Key: YOUR_SERIAL_KEY' \ -H 'Content-Type: application/json' \ --data-binary '@Vda_4905_02.json' \ -o 'Vda_4905_02.txt'
Yes, across the German automotive supply chain, although many OEMs are moving to the EDIFACT-based Global DELFOR and VDA 4984.
Every record is 128 characters. The first three digits are the record type (511 to 519) and the next two the record version. Fields are positional with fixed widths.
The shipment is announced with a VDA 4913 delivery note and transport data message.
In .NET, install EdiFabric and EdiFabric.Templates.Vda, read the file with VdaReader into TS4905 objects and write them back with VdaWriter. 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 VDA.