EDIFACT INVOIC Invoice Last updated: 2026-09-29
INVOIC is the UN/EDIFACT invoice message. A supplier sends it to claim payment for goods or services, and the same message also carries credit and debit notes.
BGM identifies the document (380 commercial invoice, 381 credit note), NAD groups name the parties, LIN groups list the items, and MOA and TAX segments in the summary carry the totals.
At a glance
- Standard
- EDIFACT
- Version
D96A- Sent by
- Supplier to buyer
- Responses
- CONTRL, APERAK, REMADV
- ediFabric .NET template
TSINVOICinEdiFabric.Templates.Edifact- OpenEDI definition
- View INVOIC in the spec library
INVOIC structure
The full EDIFACT INVOIC layout from its OpenEDI definition, the same model ediFabric uses to parse, validate and generate it: 51 loops and 142 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 | Mandatory | 35 |
PAI | Payment instructions | Optional | 1 |
ALI | Additional information | Optional | 5 |
IMD | Item description | Optional | 1 |
FTX | Free text | Optional | 10 |
| RFF loop | Reference | Optional | 99 |
RFF | Reference | Mandatory | 1 |
DTM | Date/time/period | Optional | 5 |
| NAD loop | Name and address | Optional | 99 |
NAD | Name and address | Mandatory | 1 |
LOC | Place/location identification | Optional | 25 |
FII | Financial institution information | Optional | 5 |
| RFF loop | Reference | Optional | 9999 |
RFF | Reference | Mandatory | 1 |
DTM | Date/time/period | Optional | 5 |
| DOC loop | Document/message details | Optional | 5 |
DOC | Document/message details | Mandatory | 1 |
DTM | Date/time/period | Optional | 5 |
| CTA loop | Contact information | Optional | 5 |
CTA | Contact information | Mandatory | 1 |
COM | Communication contact | Optional | 5 |
| TAX loop | Duty/tax/fee details | Optional | 5 |
TAX | Duty/tax/fee details | Mandatory | 1 |
MOA | Monetary amount | Optional | 1 |
LOC | Place/location identification | Optional | 5 |
| CUX loop | Currencies | Optional | 5 |
CUX | Currencies | Mandatory | 1 |
DTM | Date/time/period | Optional | 5 |
| PAT loop | Payment terms basis | Optional | 10 |
PAT | Payment terms basis | Mandatory | 1 |
DTM | Date/time/period | Optional | 5 |
PCD | Percentage details | Optional | 1 |
MOA | Monetary amount | Optional | 1 |
PAI | Payment instructions | Optional | 1 |
FII | Financial institution information | Optional | 1 |
| TDT loop | Details of transport | Optional | 10 |
TDT | Details of transport | Mandatory | 1 |
| LOC loop | Place/location identification | Optional | 10 |
LOC | Place/location identification | Mandatory | 1 |
DTM | Date/time/period | Optional | 5 |
| RFF loop | Reference | Optional | 9999 |
RFF | Reference | Mandatory | 1 |
DTM | Date/time/period | Optional | 5 |
| TOD loop | Terms of delivery or transport | Optional | 5 |
TOD | Terms of delivery or transport | Mandatory | 1 |
LOC | Place/location identification | Optional | 2 |
| PAC loop | Package | Optional | 1000 |
PAC | Package | Mandatory | 1 |
MEA | Measurements | Optional | 5 |
| PCI loop | Package identification | Optional | 5 |
PCI | Package identification | Mandatory | 1 |
RFF | Reference | Optional | 1 |
DTM | Date/time/period | Optional | 5 |
GIN | Goods identity number | Optional | 5 |
| ALC loop | Allowance or charge | Optional | 9999 |
ALC | Allowance or charge | Mandatory | 1 |
ALI | Additional information | Optional | 5 |
| RFF loop | Reference | Optional | 5 |
RFF | Reference | Mandatory | 1 |
DTM | Date/time/period | Optional | 5 |
| QTY loop | Quantity | Optional | 1 |
QTY | Quantity | Mandatory | 1 |
RNG | Range details | Optional | 1 |
| PCD loop | Percentage details | Optional | 1 |
PCD | Percentage details | Mandatory | 1 |
RNG | Range details | Optional | 1 |
| MOA loop | Monetary amount | Optional | 2 |
MOA | Monetary amount | Mandatory | 1 |
RNG | Range details | Optional | 1 |
| RTE loop | Rate details | Optional | 1 |
RTE | Rate details | Mandatory | 1 |
RNG | Range details | Optional | 1 |
| TAX loop | Duty/tax/fee details | Optional | 5 |
TAX | Duty/tax/fee details | Mandatory | 1 |
MOA | Monetary amount | Optional | 1 |
| RCS loop | Requirements and conditions | Optional | 100 |
RCS | Requirements and conditions | Mandatory | 1 |
RFF | Reference | Optional | 5 |
DTM | Date/time/period | Optional | 5 |
FTX | Free text | Optional | 5 |
| AJT loop | Adjustment details | Optional | 1 |
AJT | Adjustment details | Mandatory | 1 |
FTX | Free text | Optional | 5 |
| INP loop | Parties and instruction | Optional | 1 |
INP | Parties and instruction | Mandatory | 1 |
FTX | Free text | Optional | 5 |
| LIN loop | Line item | Optional | 9999999 |
LIN | Line item | Mandatory | 1 |
PIA | Additional product id | Optional | 25 |
IMD | Item description | Optional | 10 |
MEA | Measurements | Optional | 5 |
QTY | Quantity | Optional | 5 |
PCD | Percentage details | Optional | 1 |
ALI | Additional information | Optional | 5 |
DTM | Date/time/period | Optional | 35 |
GIN | Goods identity number | Optional | 1000 |
GIR | Related identification numbers | Optional | 1000 |
QVR | Quantity variances | Optional | 1 |
EQD | Equipment details | Optional | 1 |
FTX | Free text | Optional | 5 |
| MOA loop | Monetary amount | Optional | 5 |
MOA | Monetary amount | Mandatory | 1 |
CUX | Currencies | Optional | 1 |
| PAT loop | Payment terms basis | Optional | 10 |
PAT | Payment terms basis | Mandatory | 1 |
DTM | Date/time/period | Optional | 5 |
PCD | Percentage details | Optional | 1 |
MOA | Monetary amount | Optional | 1 |
| PRI loop | Price details | Optional | 25 |
PRI | Price details | Mandatory | 1 |
APR | Additional price information | Optional | 1 |
RNG | Range details | Optional | 1 |
DTM | Date/time/period | Optional | 5 |
| RFF loop | Reference | Optional | 10 |
RFF | Reference | Mandatory | 1 |
DTM | Date/time/period | Optional | 5 |
| PAC loop | Package | Optional | 10 |
PAC | Package | Mandatory | 1 |
MEA | Measurements | Optional | 5 |
| PCI loop | Package identification | Optional | 5 |
PCI | Package identification | Mandatory | 1 |
RFF | Reference | Optional | 1 |
DTM | Date/time/period | Optional | 5 |
GIN | Goods identity number | Optional | 5 |
| LOC loop | Place/location identification | Optional | 9999 |
LOC | Place/location identification | Mandatory | 1 |
QTY | Quantity | Optional | 100 |
DTM | Date/time/period | Optional | 5 |
| TAX loop | Duty/tax/fee details | Optional | 99 |
TAX | Duty/tax/fee details | Mandatory | 1 |
MOA | Monetary amount | Optional | 1 |
LOC | Place/location identification | Optional | 5 |
| NAD loop | Name and address | Optional | 20 |
NAD | Name and address | Mandatory | 1 |
LOC | Place/location identification | Optional | 5 |
| RFF loop | Reference | Optional | 5 |
RFF | Reference | Mandatory | 1 |
DTM | Date/time/period | Optional | 5 |
| DOC loop | Document/message details | Optional | 5 |
DOC | Document/message details | Mandatory | 1 |
DTM | Date/time/period | Optional | 5 |
| CTA loop | Contact information | Optional | 5 |
CTA | Contact information | Mandatory | 1 |
COM | Communication contact | Optional | 5 |
| ALC loop | Allowance or charge | Optional | 15 |
ALC | Allowance or charge | Mandatory | 1 |
ALI | Additional information | Optional | 5 |
DTM | Date/time/period | Optional | 5 |
| QTY loop | Quantity | Optional | 1 |
QTY | Quantity | Mandatory | 1 |
RNG | Range details | Optional | 1 |
| PCD loop | Percentage details | Optional | 1 |
PCD | Percentage details | Mandatory | 1 |
RNG | Range details | Optional | 1 |
| MOA loop | Monetary amount | Optional | 2 |
MOA | Monetary amount | Mandatory | 1 |
RNG | Range details | Optional | 1 |
| RTE loop | Rate details | Optional | 1 |
RTE | Rate details | Mandatory | 1 |
RNG | Range details | Optional | 1 |
| TAX loop | Duty/tax/fee details | Optional | 5 |
TAX | Duty/tax/fee details | Mandatory | 1 |
MOA | Monetary amount | Optional | 1 |
| TDT loop | Details of transport | Optional | 10 |
TDT | Details of transport | Mandatory | 1 |
| LOC loop | Place/location identification | Optional | 10 |
LOC | Place/location identification | Mandatory | 1 |
DTM | Date/time/period | Optional | 5 |
| TOD loop | Terms of delivery or transport | Optional | 5 |
TOD | Terms of delivery or transport | Mandatory | 1 |
LOC | Place/location identification | Optional | 2 |
| RCS loop | Requirements and conditions | Optional | 100 |
RCS | Requirements and conditions | Mandatory | 1 |
RFF | Reference | Optional | 5 |
DTM | Date/time/period | Optional | 5 |
FTX | Free text | Optional | 5 |
UNS | Section control | Mandatory | 1 |
CNT | Control total | Optional | 10 |
| MOA loop | Monetary amount | Mandatory | 100 |
MOA | Monetary amount | Mandatory | 1 |
| RFF loop | Reference | Optional | 1 |
RFF | Reference | Mandatory | 1 |
DTM | Date/time/period | Optional | 5 |
| TAX loop | Duty/tax/fee details | Optional | 10 |
TAX | Duty/tax/fee details | Mandatory | 1 |
MOA | Monetary amount | Optional | 2 |
| ALC loop | Allowance or charge | Optional | 15 |
ALC | Allowance or charge | Mandatory | 1 |
ALI | Additional information | Optional | 1 |
MOA | Monetary amount | Optional | 2 |
UNT | Message trailer | Mandatory | 1 |
Sample INVOIC file
A D96A invoice with parties, line items and totals. Paste it into EdiNation to see every element named and validated.
UNB+UNOB:1+SENDER1:1+RECEIVER1:1+071101:1701+131++INVOIC++1++1' UNG+INVOIC+2:1+3:4+971013:1040+5+UN+D:96A:UN+PASSPORT' UNH+509010117+INVOIC:D:96A:UN' BGM+380+IN432097' DTM+137:20020308:102' PAI+::42' RFF+ON:ORD9523' DTM+171:20020212:102' RFF+PL:PL99523' DTM+171:20020101:102' RFF+DQ:53662' DTM+171:20020215:102' NAD+BY+5412345000013::9' RFF+VA:4146023' NAD+SU+4012345500004::9' RFF+VA:VR12345' NAD+DP+5412345678908::9' CUX+2:EUR:4' PAT+1++5:3:M:2' PAT+22++5:3:D:10' PCD+12:2.5:13' ALC+C++6++FC' MOA+23:120' TAX+7+VAT+++:::19+S' MOA+124:22.80' LIN+1++4000862141404:SRS' QTY+47:40' MOA+203:2160' PRI+AAB:60:CA' TAX+7+VAT+++:::21+S' MOA+124:453.60' ALC+A' PCD+1:10' LIN+2++5412345111115:SRS' QTY+46:5' QTY+47:12.65:KGM' MOA+203:2530' PRI+AAA:200:CA::1:KGM' TAX+7+VAT+++:::19+S' MOA+124:480.70' UNS+S' CNT+2:2' MOA+86:5767.10' MOA+79:4690' MOA+129:5767.10' MOA+125:4810' MOA+176:957.10' MOA+131:120' TAX+7+VAT+++:::19+S' MOA+124:503.50' TAX+7+VAT+++:::21+S' MOA+124:453.60' ALC+C++++FC' MOA+131:120' UNT+53+509010117' UNE+1+5' UNZ+2+131'
The same INVOIC as JSON
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": "509010117",
"MessageIdentifier_02": {
"MessageType_01": "INVOIC",
"MessageVersionNumber_02": "D",
"MessageReleaseNumber_03": "96A",
"ControllingAgencyCoded_04": "UN"
}
},
"BGM": {
"DOCUMENTMESSAGENAME_01": {
"Documentmessagenamecoded_01": "380"
},
"Documentmessagenumber_02": "IN432097"
},
"DTM": [
{
"DATETIMEPERIOD_01": {
"Datetimeperiodqualifier_01": "137",
"Datetimeperiod_02": "20020308",
"Datetimeperiodformatqualifier_03": "102"
}
}
],
"PAI": {
"PAYMENTINSTRUCTIONDETAILS_01": {
"Paymentmeanscoded_03": "42"
}
},
"RFFLoop": [
{
"RFF": {
"REFERENCE_01": {
"Referencequalifier_01": "ON",
"Referencenumber_02": "ORD9523"
}
},
"DTM": [
{
"DATETIMEPERIOD_01": {
"Datetimeperiodqualifier_01": "171",
"Datetimeperiod_02": "20020212",
"Datetimeperiodformatqualifier_03": "102"
}
}
]
},
{
"RFF": {
"REFERENCE_01": {
"Referencequalifier_01": "PL",
"Referencenumber_02": "PL99523"
}
},
"DTM": [
{
"DATETIMEPERIOD_01": {
"Datetimeperiodqualifier_01": "171",
"Datetimeperiod_02": "20020101",
"Datetimeperiodformatqualifier_03": "102"
}
}
]
},
{
"RFF": {
"REFERENCE_01": {
"Referencequalifier_01": "DQ",
"Referencenumber_02": "53662"
}
},
"DTM": [
{
"DATETIMEPERIOD_01": {
"Datetimeperiodqualifier_01": "171",
"Datetimeperiod_02": "20020215",
"Datetimeperiodformatqualifier_03": "102"
}
}
]
}
],
"NADLoop": [
{
"NAD": {
"Partyqualifier_01": "BY",
"PARTYIDENTIFICATIONDETAILS_02": {
"Partyididentification_01": "5412345000013",
"Codelistresponsibleagencycoded_03": "9"
}
},
"RFFLoop": [
{
"RFF": {
"REFERENCE_01": {
"Referencequalifier_01": "VA",
"Referencenumber_02": "4146023"
}
}
}
]
},
{
"NAD": {
"Partyqualifier_01": "SU",
"PARTYIDENTIFICATIONDETAILS_02": {
"Partyididentification_01": "4012345500004",
"Codelistresponsibleagencycoded_03": "9"
}
},
"RFFLoop": [
{
"RFF": {
"REFERENCE_01": {
"Referencequalifier_01": "VA",
"Referencenumber_02": "VR12345"
}
}
}
]
},
{
"NAD": {
"Partyqualifier_01": "DP",
"PARTYIDENTIFICATIONDETAILS_02": {
"Partyididentification_01": "5412345678908",
"Codelistresponsibleagencycoded_03": "9"
}
}
}
],
"CUXLoop": [
{
"CUX": {
"CURRENCYDETAILS_01": {
"Currencydetailsqualifier_01": "2",
"Currencycoded_02": "EUR",
"Currencyqualifier_03": "4"
}
}
}
],
"PATLoop": [
{
"PAT": {
"Paymenttermstypequalifier_01": "1",
"TERMSTIMEINFORMATION_03": {
"Paymenttimereferencecoded_01": "5",
"Timerelationcoded_02": "3",
"Typeofperiodcoded_03": "M",
"Numberofperiods_04": "2"
}
}
},
{
"PAT": {
"Paymenttermstypequalifier_01": "22",
"TERMSTIMEINFORMATION_03": {
"Paymenttimereferencecoded_01": "5",
"Timerelationcoded_02": "3",
"Typeofperiodcoded_03": "D",
"Numberofperiods_04": "10"
}
},
"PCD": {
"PERCENTAGEDETAILS_01": {
"Percentagequalifier_01": "12",
"Percentage_02": "2.5",
"Percentagebasiscoded_03": "13"
}
}
}
],
"ALCLoop": [
{
"ALC": {
"Allowanceorchargequalifier_01": "C",
"Settlementcoded_03": "6",
"SPECIALSERVICESIDENTIFICATION_05": {
"Specialservicescoded_01": "FC"
}
},
"MOALoop": [
{
"MOA": {
"MONETARYAMOUNT_01": {
"Monetaryamounttypequalifier_01": "23",
"Monetaryamount_02": "120"
}
}
}
],
"TAXLoop": [
{
"TAX": {
"Dutytaxfeefunctionqualifier_01": "7",
"DUTYTAXFEETYPE_02": {
"Dutytaxfeetypecoded_01": "VAT"
},
"DUTYTAXFEEDETAIL_05": {
"Dutytaxfeerate_04": "19"
},
"Dutytaxfeecategorycoded_06": "S"
},
"MOA": {
"MONETARYAMOUNT_01": {
"Monetaryamounttypequalifier_01": "124",
"Monetaryamount_02": "22.80"
}
}
}
]
}
],
"LINLoop": [
{
"LIN": {
"Lineitemnumber_01": "1",
"ITEMNUMBERIDENTIFICATION_03": {
"Itemnumber_01": "4000862141404",
"Itemnumbertypecoded_02": "SRS"
}
},
"QTY": [
{
"QUANTITYDETAILS_01": {
"Quantityqualifier_01": "47",
"Quantity_02": "40"
}
}
],
"MOALoop": [
{
"MOA": {
"MONETARYAMOUNT_01": {
"Monetaryamounttypequalifier_01": "203",
"Monetaryamount_02": "2160"
}
}
}
],
"PRILoop": [
{
"PRI": {
"PRICEINFORMATION_01": {
"Pricequalifier_01": "AAB",
"Price_02": "60",
"Pricetypecoded_03": "CA"
}
}
}
],
"TAXLoop": [
{
"TAX": {
"Dutytaxfeefunctionqualifier_01": "7",
"DUTYTAXFEETYPE_02": {
"Dutytaxfeetypecoded_01": "VAT"
},
"DUTYTAXFEEDETAIL_05": {
"Dutytaxfeerate_04": "21"
},
"Dutytaxfeecategorycoded_06": "S"
},
"MOA": {
"MONETARYAMOUNT_01": {
"Monetaryamounttypequalifier_01": "124",
"Monetaryamount_02": "453.60"
}
}
}
],
"ALCLoop": [
{
"ALC": {
"Allowanceorchargequalifier_01": "A"
},
"PCDLoop": {
"PCD": {
"PERCENTAGEDETAILS_01": {
"Percentagequalifier_01": "1",
"Percentage_02": "10"
}
}
}
}
]
},
{
"LIN": {
"Lineitemnumber_01": "2",
"ITEMNUMBERIDENTIFICATION_03": {
"Itemnumber_01": "5412345111115",
"Itemnumbertypecoded_02": "SRS"
}
},
"QTY": [
{
"QUANTITYDETAILS_01": {
"Quantityqualifier_01": "46",
"Quantity_02": "5"
}
},
{
"QUANTITYDETAILS_01": {
"Quantityqualifier_01": "47",
"Quantity_02": "12.65",
"Measureunitqualifier_03": "KGM"
}
}
],
"MOALoop": [
{
"MOA": {
"MONETARYAMOUNT_01": {
"Monetaryamounttypequalifier_01": "203",
"Monetaryamount_02": "2530"
}
}
}
],
"PRILoop": [
{
"PRI": {
"PRICEINFORMATION_01": {
"Pricequalifier_01": "AAA",
"Price_02": "200",
"Pricetypecoded_03": "CA",
"Unitpricebasis_05": "1",
"Measureunitqualifier_06": "KGM"
}
}
}
],
"TAXLoop": [
{
"TAX": {
"Dutytaxfeefunctionqualifier_01": "7",
"DUTYTAXFEETYPE_02": {
"Dutytaxfeetypecoded_01": "VAT"
},
"DUTYTAXFEEDETAIL_05": {
"Dutytaxfeerate_04": "19"
},
"Dutytaxfeecategorycoded_06": "S"
},
"MOA": {
"MONETARYAMOUNT_01": {
"Monetaryamounttypequalifier_01": "124",
"Monetaryamount_02": "480.70"
}
}
}
]
}
],
"UNS": {
"Sectionidentification_01": "S"
},
"CNT": [
{
"CONTROL_01": {
"Controlqualifier_01": "2",
"Controlvalue_02": "2"
}
}
],
"MOALoop": [
{
"MOA": {
"MONETARYAMOUNT_01": {
"Monetaryamounttypequalifier_01": "86",
"Monetaryamount_02": "5767.10"
}
}
},
{
"MOA": {
"MONETARYAMOUNT_01": {
"Monetaryamounttypequalifier_01": "79",
"Monetaryamount_02": "4690"
}
}
},
{
"MOA": {
"MONETARYAMOUNT_01": {
"Monetaryamounttypequalifier_01": "129",
"Monetaryamount_02": "5767.10"
}
}
},
{
"MOA": {
"MONETARYAMOUNT_01": {
"Monetaryamounttypequalifier_01": "125",
"Monetaryamount_02": "4810"
}
}
},
{
"MOA": {
"MONETARYAMOUNT_01": {
"Monetaryamounttypequalifier_01": "176",
"Monetaryamount_02": "957.10"
}
}
},
{
"MOA": {
"MONETARYAMOUNT_01": {
"Monetaryamounttypequalifier_01": "131",
"Monetaryamount_02": "120"
}
}
}
],
"TAXLoop2": [
{
"TAX": {
"Dutytaxfeefunctionqualifier_01": "7",
"DUTYTAXFEETYPE_02": {
"Dutytaxfeetypecoded_01": "VAT"
},
"DUTYTAXFEEDETAIL_05": {
"Dutytaxfeerate_04": "19"
},
"Dutytaxfeecategorycoded_06": "S"
},
"MOA": [
{
"MONETARYAMOUNT_01": {
"Monetaryamounttypequalifier_01": "124",
"Monetaryamount_02": "503.50"
}
}
]
},
{
"TAX": {
"Dutytaxfeefunctionqualifier_01": "7",
"DUTYTAXFEETYPE_02": {
"Dutytaxfeetypecoded_01": "VAT"
},
"DUTYTAXFEEDETAIL_05": {
"Dutytaxfeerate_04": "21"
},
"Dutytaxfeecategorycoded_06": "S"
},
"MOA": [
{
"MONETARYAMOUNT_01": {
"Monetaryamounttypequalifier_01": "124",
"Monetaryamount_02": "453.60"
}
}
]
}
],
"ALCLoop2": [
{
"ALC": {
"Allowanceorchargequalifier_01": "C",
"SPECIALSERVICESIDENTIFICATION_05": {
"Specialservicescoded_01": "FC"
}
},
"MOA": [
{
"MONETARYAMOUNT_01": {
"Monetaryamounttypequalifier_01": "131",
"Monetaryamount_02": "120"
}
}
]
}
],
"UNT": {
"NumberofSegmentsinaMessage_01": "53",
"MessageReferenceNumber_02": "509010117"
}
}Parse and validate an INVOIC file
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\Invoice.txt")) using (var reader = new EdifactReader(stream, "EdiFabric.Templates.Edifact")) { var items = await reader.ReadToEndAsync(); foreach (var transaction in items.OfType<TSINVOIC>()) { 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 '@Invoice.txt'
Generate an INVOIC file
Populate a TSINVOIC object in .NET, or post JSON in the shape shown above to ediFabric Cloud, and get a valid INVOIC file back.
using EdiFabric.Templates.EdifactD96A; License.SetSerial("YOUR_SERIAL_KEY"); var transaction = new TSINVOIC(); // Message header transaction.UNH = new UNH(); transaction.UNH.MessageReferenceNumber_01 = "0001"; transaction.UNH.MessageIdentifier_02 = new S009(); transaction.UNH.MessageIdentifier_02.MessageType_01 = "INVOIC"; transaction.UNH.MessageIdentifier_02.MessageVersionNumber_02 = "D"; transaction.UNH.MessageIdentifier_02.MessageReleaseNumber_03 = "96A"; transaction.UNH.MessageIdentifier_02.ControllingAgencyCoded_04 = "UN"; // Commercial invoice number IN432097 transaction.BGM = new BGM(); transaction.BGM.DOCUMENTMESSAGENAME_01 = new C002(); transaction.BGM.DOCUMENTMESSAGENAME_01.Documentmessagenamecoded_01 = "380"; transaction.BGM.Documentmessagenumber_02 = "IN432097"; // 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 '@Invoice.json' \ -o 'Invoice.txt'
Complete ediFabric .NET example
A complete C# program for the EDIFACT INVOIC, built on TSINVOIC in EdiFabric.Templates.Edifact. The same code is in the ediFabric .NET examples on GitHub.
///
/// Build invoice.
/// Original from https://www.gs1.org/standards/edi-xml-gs1-eancom/eancom-invoic-s4/syntax-4
///
public static TSINVOIC BuildInvoice(string controlNumber)
{
var result = new TSINVOIC();
// Message header
result.UNH = new UNH();
result.UNH.MessageReferenceNumber_01 = controlNumber.PadLeft(14, '0');
result.UNH.MessageIdentifier_02 = new S009();
result.UNH.MessageIdentifier_02.MessageType_01 = "INVOIC";
result.UNH.MessageIdentifier_02.MessageVersionNumber_02 = "D";
result.UNH.MessageIdentifier_02.MessageReleaseNumber_03 = "96A";
result.UNH.MessageIdentifier_02.ControllingAgencyCoded_04 = "UN";
// Commercial invoice number IN432097
result.BGM = new BGM();
result.BGM.DOCUMENTMESSAGENAME_01 = new C002();
result.BGM.DOCUMENTMESSAGENAME_01.Documentmessagenamecoded_01 = "380";
result.BGM.Documentmessagenumber_02 = "IN432097";
// Repeating DTM
result.DTM = new List();
// Message date 8th March 2002
var dtm = new DTM();
dtm.DATETIMEPERIOD_01 = new C507();
dtm.DATETIMEPERIOD_01.Datetimeperiodqualifier_01 = "137";
dtm.DATETIMEPERIOD_01.Datetimeperiod_02 = "20020308";
dtm.DATETIMEPERIOD_01.Datetimeperiodformatqualifier_03 = "102";
result.DTM.Add(dtm);
// Instructions to pay in bank account
result.PAI = new PAI();
result.PAI.PAYMENTINSTRUCTIONDETAILS_01 = new C534();
result.PAI.PAYMENTINSTRUCTIONDETAILS_01.Paymentmeanscoded_03 = "42";
// Repeating RFF Groups
result.RFFLoop = new List();
// Begin RFF Group 1
var rffLoop1 = new Loop_RFF_INVOIC();
// Purchase order invoiced number ORD9523
rffLoop1.RFF = new RFF();
rffLoop1.RFF.REFERENCE_01 = new C506();
rffLoop1.RFF.REFERENCE_01.Referencequalifier_01 = "ON";
rffLoop1.RFF.REFERENCE_01.Referencenumber_02 = "ORD9523";
// Repeating DTM
rffLoop1.DTM = new List();
// Reference date 12th February 2002
var dtmRff1 = new DTM();
dtmRff1.DATETIMEPERIOD_01 = new C507();
dtmRff1.DATETIMEPERIOD_01.Datetimeperiodqualifier_01 = "171";
dtmRff1.DATETIMEPERIOD_01.Datetimeperiod_02 = "20020212";
dtmRff1.DATETIMEPERIOD_01.Datetimeperiodformatqualifier_03 = "102";
rffLoop1.DTM.Add(dtmRff1);
// End RFF Group 1
result.RFFLoop.Add(rffLoop1);
// Begin RFF Group 2
var rffLoop2 = new Loop_RFF_INVOIC();
// Price list reference number PL99523
rffLoop2.RFF = new RFF();
rffLoop2.RFF.REFERENCE_01 = new C506();
rffLoop2.RFF.REFERENCE_01.Referencequalifier_01 = "PL";
rffLoop2.RFF.REFERENCE_01.Referencenumber_02 = "PL99523";
// Repeating DTM
rffLoop2.DTM = new List();
// Reference date 1st January 2002
var dtmRff2 = new DTM();
dtmRff2.DATETIMEPERIOD_01 = new C507();
dtmRff2.DATETIMEPERIOD_01.Datetimeperiodqualifier_01 = "171";
dtmRff2.DATETIMEPERIOD_01.Datetimeperiod_02 = "20020101";
dtmRff2.DATETIMEPERIOD_01.Datetimeperiodformatqualifier_03 = "102";
rffLoop2.DTM.Add(dtmRff2);
// End RFF Group 2
result.RFFLoop.Add(rffLoop2);
// Begin RFF Group 3
var rffLoop3 = new Loop_RFF_INVOIC();
// Reference delivery note number 53662
rffLoop3.RFF = new RFF();
rffLoop3.RFF.REFERENCE_01 = new C506();
rffLoop3.RFF.REFERENCE_01.Referencequalifier_01 = "DQ";
rffLoop3.RFF.REFERENCE_01.Referencenumber_02 = "53662";
// Repeating DTM
rffLoop3.DTM = new List();
// Reference date 15th February 2002
var dtmRff3 = new DTM();
dtmRff3.DATETIMEPERIOD_01 = new C507();
dtmRff3.DATETIMEPERIOD_01.Datetimeperiodqualifier_01 = "171";
dtmRff3.DATETIMEPERIOD_01.Datetimeperiod_02 = "20020215";
dtmRff3.DATETIMEPERIOD_01.Datetimeperiodformatqualifier_03 = "102";
rffLoop3.DTM.Add(dtmRff3);
// End RFF Group 3
result.RFFLoop.Add(rffLoop3);
// Repeating NAD Groups
result.NADLoop = new List();
// Begin NAD Group 1
var nadLoop1 = new Loop_NAD_INVOIC();
// Buyer identified by GLN 5412345000013
nadLoop1.NAD = new NAD();
nadLoop1.NAD.Partyqualifier_01 = "BY";
nadLoop1.NAD.PARTYIDENTIFICATIONDETAILS_02 = new C082();
nadLoop1.NAD.PARTYIDENTIFICATIONDETAILS_02.Partyididentification_01 = "5412345000013";
nadLoop1.NAD.PARTYIDENTIFICATIONDETAILS_02.Codelistresponsibleagencycoded_03 = "9";
// Repeating RFF Groups
nadLoop1.RFFLoop = new List();
// Begin RFF Group 1
var rffNadLoop1 = new Loop_RFF_INVOIC();
// VAT reference number of the buyer 4146023
rffNadLoop1.RFF = new RFF();
rffNadLoop1.RFF.REFERENCE_01 = new C506();
rffNadLoop1.RFF.REFERENCE_01.Referencequalifier_01 = "VA";
rffNadLoop1.RFF.REFERENCE_01.Referencenumber_02 = "4146023";
// End RFF Group 1
nadLoop1.RFFLoop.Add(rffNadLoop1);
// End NAD Group 1
result.NADLoop.Add(nadLoop1);
// Begin NAD Group 2
var nadLoop2 = new Loop_NAD_INVOIC();
// Supplier identified by GLN 4012345500004
nadLoop2.NAD = new NAD();
nadLoop2.NAD.Partyqualifier_01 = "SU";
nadLoop2.NAD.PARTYIDENTIFICATIONDETAILS_02 = new C082();
nadLoop2.NAD.PARTYIDENTIFICATIONDETAILS_02.Partyididentification_01 = "4012345500004";
nadLoop2.NAD.PARTYIDENTIFICATIONDETAILS_02.Codelistresponsibleagencycoded_03 = "9";
// Repeating RFF Groups
nadLoop2.RFFLoop = new List();
// Begin RFF Group 1
var rffNadLoop2 = new Loop_RFF_INVOIC();
// VAT reference number of the supplier VR12345
rffNadLoop2.RFF = new RFF();
rffNadLoop2.RFF.REFERENCE_01 = new C506();
rffNadLoop2.RFF.REFERENCE_01.Referencequalifier_01 = "VA";
rffNadLoop2.RFF.REFERENCE_01.Referencenumber_02 = "VR12345";
// End RFF Group 1
nadLoop2.RFFLoop.Add(rffNadLoop2);
// End NAD Group 2
result.NADLoop.Add(nadLoop2);
// Begin NAD Group 3
var nadLoop3 = new Loop_NAD_INVOIC();
// Delivery party identified by GLN 5412345678908
nadLoop3.NAD = new NAD();
nadLoop3.NAD.Partyqualifier_01 = "DP";
nadLoop3.NAD.PARTYIDENTIFICATIONDETAILS_02 = new C082();
nadLoop3.NAD.PARTYIDENTIFICATIONDETAILS_02.Partyididentification_01 = "5412345678908";
nadLoop3.NAD.PARTYIDENTIFICATIONDETAILS_02.Codelistresponsibleagencycoded_03 = "9";
// End NAD Group 3
result.NADLoop.Add(nadLoop3);
// Repeating CUX Groups
result.CUXLoop = new List();
// Begin CUX Group
var cuxLoop = new Loop_CUX_INVOIC();
// Reference currency is Euros
cuxLoop.CUX = new CUX();
cuxLoop.CUX.CURRENCYDETAILS_01 = new C504();
cuxLoop.CUX.CURRENCYDETAILS_01.Currencydetailsqualifier_01 = "2";
cuxLoop.CUX.CURRENCYDETAILS_01.Currencycoded_02 = "EUR";
cuxLoop.CUX.CURRENCYDETAILS_01.Currencyqualifier_03 = "4";
// End CUX Group
result.CUXLoop.Add(cuxLoop);
// Repeating PAT Groups
result.PATLoop = new List();
// Begin PAT Group 1
var patLoop1 = new Loop_PAT_INVOIC();
// Payment terms 2 months after date of invoice
patLoop1.PAT = new PAT();
patLoop1.PAT.Paymenttermstypequalifier_01 = "1";
patLoop1.PAT.TERMSTIMEINFORMATION_03 = new C112();
patLoop1.PAT.TERMSTIMEINFORMATION_03.Paymenttimereferencecoded_01 = "5";
patLoop1.PAT.TERMSTIMEINFORMATION_03.Timerelationcoded_02 = "3";
patLoop1.PAT.TERMSTIMEINFORMATION_03.Typeofperiodcoded_03 = "M";
patLoop1.PAT.TERMSTIMEINFORMATION_03.Numberofperiods_04 = "2";
// End PAT Group 1
result.PATLoop.Add(patLoop1);
// Begin PAT Group 2
var patLoop2 = new Loop_PAT_INVOIC();
// Payment discount for payment 10 days after date of invoice
patLoop2.PAT = new PAT();
patLoop2.PAT.Paymenttermstypequalifier_01 = "22";
patLoop2.PAT.TERMSTIMEINFORMATION_03 = new C112();
patLoop2.PAT.TERMSTIMEINFORMATION_03.Paymenttimereferencecoded_01 = "5";
patLoop2.PAT.TERMSTIMEINFORMATION_03.Timerelationcoded_02 = "3";
patLoop2.PAT.TERMSTIMEINFORMATION_03.Typeofperiodcoded_03 = "D";
patLoop2.PAT.TERMSTIMEINFORMATION_03.Numberofperiods_04 = "10";
// Percentage information for the allowances or charges 2.5 %
patLoop2.PCD = new PCD();
patLoop2.PCD.PERCENTAGEDETAILS_01 = new C501();
patLoop2.PCD.PERCENTAGEDETAILS_01.Percentagequalifier_01 = "12";
patLoop2.PCD.PERCENTAGEDETAILS_01.Percentage_02 = "2.5";
patLoop2.PCD.PERCENTAGEDETAILS_01.Percentagebasiscoded_03 = "13";
// End PAT Group 2
result.PATLoop.Add(patLoop2);
// Repeating ALC Groups
result.ALCLoop = new List();
// Begin ALC Group
var alcLoop = new Loop_ALC_INVOIC();
// Charges to be paid by customer
alcLoop.ALC = new ALC();
alcLoop.ALC.Allowanceorchargequalifier_01 = "C";
alcLoop.ALC.Settlementcoded_03 = "6";
alcLoop.ALC.SPECIALSERVICESIDENTIFICATION_05 = new C214();
alcLoop.ALC.SPECIALSERVICESIDENTIFICATION_05.Specialservicescoded_01 = "FC";
// Repeating MOA Groups
alcLoop.MOALoop = new List();
// Begin MOA Group
var moaAlcLoop = new Loop_MOA_INVOIC();
// Monetary amount for the charge 120 EUR to be added
moaAlcLoop.MOA = new MOA();
moaAlcLoop.MOA.MONETARYAMOUNT_01 = new C516();
moaAlcLoop.MOA.MONETARYAMOUNT_01.Monetaryamounttypequalifier_01 = "23";
moaAlcLoop.MOA.MONETARYAMOUNT_01.Monetaryamount_02 = "120";
// End MOA Group
alcLoop.MOALoop.Add(moaAlcLoop);
// Repeating TAX Groups
alcLoop.TAXLoop = new List();
// Begin TAX Group
var taxAlcLoop = new Loop_TAX_INVOIC_2();
// Type of tax is value added tax at 19 %
taxAlcLoop.TAX = new TAX();
taxAlcLoop.TAX.Dutytaxfeefunctionqualifier_01 = "7";
taxAlcLoop.TAX.DUTYTAXFEETYPE_02 = new C241();
taxAlcLoop.TAX.DUTYTAXFEETYPE_02.Dutytaxfeetypecoded_01 = "VAT";
taxAlcLoop.TAX.DUTYTAXFEEDETAIL_05 = new C243();
taxAlcLoop.TAX.DUTYTAXFEEDETAIL_05.Dutytaxfeerate_04 = "19";
taxAlcLoop.TAX.Dutytaxfeecategorycoded_06 = "S";
// Tax monetary amount 22.80 EUR
taxAlcLoop.MOA = new MOA();
taxAlcLoop.MOA.MONETARYAMOUNT_01 = new C516();
taxAlcLoop.MOA.MONETARYAMOUNT_01.Monetaryamounttypequalifier_01 = "124";
taxAlcLoop.MOA.MONETARYAMOUNT_01.Monetaryamount_02 = "22.80";
// End TAX Group
alcLoop.TAXLoop.Add(taxAlcLoop);
// End ALC Group
result.ALCLoop.Add(alcLoop);
// Repeating LIN Groups
result.LINLoop = new List();
// Begin LIN Group 1
var linLoop1 = new Loop_LIN_INVOIC();
// Line item 1 identified by GTIN 4000862141404
linLoop1.LIN = new LIN();
linLoop1.LIN.Lineitemnumber_01 = "1";
linLoop1.LIN.ITEMNUMBERIDENTIFICATION_03 = new C212();
linLoop1.LIN.ITEMNUMBERIDENTIFICATION_03.Itemnumber_01 = "4000862141404";
linLoop1.LIN.ITEMNUMBERIDENTIFICATION_03.Itemnumbertypecoded_02 = "SRS";
// Repeating QTY
linLoop1.QTY = new List();
// Invoiced quantity 40
var qtyLin1 = new QTY();
qtyLin1.QUANTITYDETAILS_01 = new C186();
qtyLin1.QUANTITYDETAILS_01.Quantityqualifier_01 = "47";
qtyLin1.QUANTITYDETAILS_01.Quantity_02 = "40";
linLoop1.QTY.Add(qtyLin1);
// Repeating MOA Groups
linLoop1.MOALoop = new List();
// Begin MOA Group
var moaLinLoop1 = new Loop_MOA_INVOIC_2();
// Line item amount 2.160 EUR
moaLinLoop1.MOA = new MOA();
moaLinLoop1.MOA.MONETARYAMOUNT_01 = new C516();
moaLinLoop1.MOA.MONETARYAMOUNT_01.Monetaryamounttypequalifier_01 = "203";
moaLinLoop1.MOA.MONETARYAMOUNT_01.Monetaryamount_02 = "2160";
// End MOA Group
linLoop1.MOALoop.Add(moaLinLoop1);
// Repeating PRI Groups
linLoop1.PRILoop = new List();
// Begin PRI Group
var priLinLoop1 = new Loop_PRI_INVOIC();
// Gross calculation price of 60 which does not include any allowance or charges, from the catalogue.
priLinLoop1.PRI = new PRI();
priLinLoop1.PRI.PRICEINFORMATION_01 = new C509();
priLinLoop1.PRI.PRICEINFORMATION_01.Pricequalifier_01 = "AAB";
priLinLoop1.PRI.PRICEINFORMATION_01.Price_02 = "60";
priLinLoop1.PRI.PRICEINFORMATION_01.Pricetypecoded_03 = "CA";
// End PRI Group
linLoop1.PRILoop.Add(priLinLoop1);
// Repeating TAX Groups
linLoop1.TAXLoop = new List();
// Begin TAX Group
var taxLinLoop1 = new Loop_TAX_INVOIC();
// Type of tax for the line item is value added tax 21%
taxLinLoop1.TAX = new TAX();
taxLinLoop1.TAX.Dutytaxfeefunctionqualifier_01 = "7";
taxLinLoop1.TAX.DUTYTAXFEETYPE_02 = new C241();
taxLinLoop1.TAX.DUTYTAXFEETYPE_02.Dutytaxfeetypecoded_01 = "VAT";
taxLinLoop1.TAX.DUTYTAXFEEDETAIL_05 = new C243();
taxLinLoop1.TAX.DUTYTAXFEEDETAIL_05.Dutytaxfeerate_04 = "21";
taxLinLoop1.TAX.Dutytaxfeecategorycoded_06 = "S";
// Tax monetary amount 453.60 EUR
taxLinLoop1.MOA = new MOA();
taxLinLoop1.MOA.MONETARYAMOUNT_01 = new C516();
taxLinLoop1.MOA.MONETARYAMOUNT_01.Monetaryamounttypequalifier_01 = "124";
taxLinLoop1.MOA.MONETARYAMOUNT_01.Monetaryamount_02 = "453.60";
// End TAX Group
linLoop1.TAXLoop.Add(taxLinLoop1);
// Repeating ALC Groups
linLoop1.ALCLoop = new List();
// Begin ALC Group
var alcLinLoop1 = new Loop_ALC_INVOIC_2();
// Allowances
alcLinLoop1.ALC = new ALC();
alcLinLoop1.ALC.Allowanceorchargequalifier_01 = "A";
// PCD Group
alcLinLoop1.PCDLoop = new Loop_PCD_INVOIC();
// Percentage information for the allowances 10 %
alcLinLoop1.PCDLoop.PCD = new PCD();
alcLinLoop1.PCDLoop.PCD.PERCENTAGEDETAILS_01 = new C501();
alcLinLoop1.PCDLoop.PCD.PERCENTAGEDETAILS_01.Percentagequalifier_01 = "1";
alcLinLoop1.PCDLoop.PCD.PERCENTAGEDETAILS_01.Percentage_02 = "10";
// End ALC Group
linLoop1.ALCLoop.Add(alcLinLoop1);
// End LIN Group 1
result.LINLoop.Add(linLoop1);
// Begin LIN Group 2
var linLoop2 = new Loop_LIN_INVOIC();
// Line item 2 identified by GTIN 5412345111115
linLoop2.LIN = new LIN();
linLoop2.LIN.Lineitemnumber_01 = "2";
linLoop2.LIN.ITEMNUMBERIDENTIFICATION_03 = new C212();
linLoop2.LIN.ITEMNUMBERIDENTIFICATION_03.Itemnumber_01 = "5412345111115";
linLoop2.LIN.ITEMNUMBERIDENTIFICATION_03.Itemnumbertypecoded_02 = "SRS";
// Repeating QTY
linLoop2.QTY = new List();
// Delivered quantity 5
var qtyLin2 = new QTY();
qtyLin2.QUANTITYDETAILS_01 = new C186();
qtyLin2.QUANTITYDETAILS_01.Quantityqualifier_01 = "46";
qtyLin2.QUANTITYDETAILS_01.Quantity_02 = "5";
linLoop2.QTY.Add(qtyLin2);
// Invoiced quantity 12.65 Kg.
var qtyLin3 = new QTY();
qtyLin3.QUANTITYDETAILS_01 = new C186();
qtyLin3.QUANTITYDETAILS_01.Quantityqualifier_01 = "47";
qtyLin3.QUANTITYDETAILS_01.Quantity_02 = "12.65";
qtyLin3.QUANTITYDETAILS_01.Measureunitqualifier_03 = "KGM";
linLoop2.QTY.Add(qtyLin3);
// Repeating MOA Groups
linLoop2.MOALoop = new List();
// Begin MOA Group
var moaLinLoop2 = new Loop_MOA_INVOIC_2();
// Line item amount 2.530 EUR
moaLinLoop2.MOA = new MOA();
moaLinLoop2.MOA.MONETARYAMOUNT_01 = new C516();
moaLinLoop2.MOA.MONETARYAMOUNT_01.Monetaryamounttypequalifier_01 = "203";
moaLinLoop2.MOA.MONETARYAMOUNT_01.Monetaryamount_02 = "2530";
// End MOA Group
linLoop2.MOALoop.Add(moaLinLoop2);
// Repeating PRI Groups
linLoop2.PRILoop = new List();
// Begin PRI Group
var priLinLoop2 = new Loop_PRI_INVOIC();
// Net price of 200 per Kg from the catalogue, this price includes allowances and charges
priLinLoop2.PRI = new PRI();
priLinLoop2.PRI.PRICEINFORMATION_01 = new C509();
priLinLoop2.PRI.PRICEINFORMATION_01.Pricequalifier_01 = "AAA";
priLinLoop2.PRI.PRICEINFORMATION_01.Price_02 = "200";
priLinLoop2.PRI.PRICEINFORMATION_01.Pricetypecoded_03 = "CA";
priLinLoop2.PRI.PRICEINFORMATION_01.Unitpricebasis_05 = "1";
priLinLoop2.PRI.PRICEINFORMATION_01.Measureunitqualifier_06 = "KGM";
// End PRI Group
linLoop2.PRILoop.Add(priLinLoop2);
// Repeating TAX Groups
linLoop2.TAXLoop = new List();
// Begin TAX Group
var taxLinLoop2 = new Loop_TAX_INVOIC();
// Type of tax for the line item is value added tax 19 %
taxLinLoop2.TAX = new TAX();
taxLinLoop2.TAX.Dutytaxfeefunctionqualifier_01 = "7";
taxLinLoop2.TAX.DUTYTAXFEETYPE_02 = new C241();
taxLinLoop2.TAX.DUTYTAXFEETYPE_02.Dutytaxfeetypecoded_01 = "VAT";
taxLinLoop2.TAX.DUTYTAXFEEDETAIL_05 = new C243();
taxLinLoop2.TAX.DUTYTAXFEEDETAIL_05.Dutytaxfeerate_04 = "19";
taxLinLoop2.TAX.Dutytaxfeecategorycoded_06 = "S";
// Tax monetary amount 480.70 EUR
taxLinLoop2.MOA = new MOA();
taxLinLoop2.MOA.MONETARYAMOUNT_01 = new C516();
taxLinLoop2.MOA.MONETARYAMOUNT_01.Monetaryamounttypequalifier_01 = "124";
taxLinLoop2.MOA.MONETARYAMOUNT_01.Monetaryamount_02 = "480.70";
// End TAX Group
linLoop2.TAXLoop.Add(taxLinLoop2);
// End LIN Group 2
result.LINLoop.Add(linLoop2);
// To separate the detail section from the summary section
result.UNS = new UNS();
result.UNS.Sectionidentification_01 = "S";
// Repeating CNT
result.CNT = new List();
// Total number of line items 2
var cnt = new CNT();
cnt.CONTROL_01 = new C270();
cnt.CONTROL_01.Controlqualifier_01 = "2";
cnt.CONTROL_01.Controlvalue_02 = "2";
result.CNT.Add(cnt);
// Repeating MOA Groups
result.MOALoop = new List();
// Begin MOA Group 1
var moaLoop1 = new Loop_MOA_INVOIC_3();
// Message total monetary amount 5.767,10 EUR
moaLoop1.MOA = new MOA();
moaLoop1.MOA.MONETARYAMOUNT_01 = new C516();
moaLoop1.MOA.MONETARYAMOUNT_01.Monetaryamounttypequalifier_01 = "86";
moaLoop1.MOA.MONETARYAMOUNT_01.Monetaryamount_02 = "5767.10";
// End MOA Group 1
result.MOALoop.Add(moaLoop1);
// Begin MOA Group 2
var moaLoop2 = new Loop_MOA_INVOIC_3();
// Message total line items amount 4.690 EUR
moaLoop2.MOA = new MOA();
moaLoop2.MOA.MONETARYAMOUNT_01 = new C516();
moaLoop2.MOA.MONETARYAMOUNT_01.Monetaryamounttypequalifier_01 = "79";
moaLoop2.MOA.MONETARYAMOUNT_01.Monetaryamount_02 = "4690";
// End MOA Group 2
result.MOALoop.Add(moaLoop2);
// Begin MOA Group 3
var moaLoop3 = new Loop_MOA_INVOIC_3();
// Total amount subject to payment discount 5.767.10 EUR
moaLoop3.MOA = new MOA();
moaLoop3.MOA.MONETARYAMOUNT_01 = new C516();
moaLoop3.MOA.MONETARYAMOUNT_01.Monetaryamounttypequalifier_01 = "129";
moaLoop3.MOA.MONETARYAMOUNT_01.Monetaryamount_02 = "5767.10";
// End MOA Group 3
result.MOALoop.Add(moaLoop3);
// Begin MOA Group 4
var moaLoop4 = new Loop_MOA_INVOIC_3();
// Message total taxable amount 4.810 EUR
moaLoop4.MOA = new MOA();
moaLoop4.MOA.MONETARYAMOUNT_01 = new C516();
moaLoop4.MOA.MONETARYAMOUNT_01.Monetaryamounttypequalifier_01 = "125";
moaLoop4.MOA.MONETARYAMOUNT_01.Monetaryamount_02 = "4810";
// End MOA Group 4
result.MOALoop.Add(moaLoop4);
// Begin MOA Group 5
var moaLoop5 = new Loop_MOA_INVOIC_3();
// Message total tax amount 957,10 EUR
moaLoop5.MOA = new MOA();
moaLoop5.MOA.MONETARYAMOUNT_01 = new C516();
moaLoop5.MOA.MONETARYAMOUNT_01.Monetaryamounttypequalifier_01 = "176";
moaLoop5.MOA.MONETARYAMOUNT_01.Monetaryamount_02 = "957.10";
// End MOA Group 5
result.MOALoop.Add(moaLoop5);
// Begin MOA Group 6
var moaLoop6 = new Loop_MOA_INVOIC_3();
// Total charges/allowances 120 EUR
moaLoop6.MOA = new MOA();
moaLoop6.MOA.MONETARYAMOUNT_01 = new C516();
moaLoop6.MOA.MONETARYAMOUNT_01.Monetaryamounttypequalifier_01 = "131";
moaLoop6.MOA.MONETARYAMOUNT_01.Monetaryamount_02 = "120";
// End MOA Group 6
result.MOALoop.Add(moaLoop6);
// Repeating TAX Groups
result.TAXLoop2 = new List();
// Begin TAX Group 1
var taxLoop1 = new Loop_TAX_INVOIC_3();
// Type of tax for the total message is value added tax 19 %
taxLoop1.TAX = new TAX();
taxLoop1.TAX.Dutytaxfeefunctionqualifier_01 = "7";
taxLoop1.TAX.DUTYTAXFEETYPE_02 = new C241();
taxLoop1.TAX.DUTYTAXFEETYPE_02.Dutytaxfeetypecoded_01 = "VAT";
taxLoop1.TAX.DUTYTAXFEEDETAIL_05 = new C243();
taxLoop1.TAX.DUTYTAXFEEDETAIL_05.Dutytaxfeerate_04 = "19";
taxLoop1.TAX.Dutytaxfeecategorycoded_06 = "S";
// Repeating MOA
taxLoop1.MOA = new List();
// Tax monetary amount 503.50 EUR
var moaTax1 = new MOA();
moaTax1.MONETARYAMOUNT_01 = new C516();
moaTax1.MONETARYAMOUNT_01.Monetaryamounttypequalifier_01 = "124";
moaTax1.MONETARYAMOUNT_01.Monetaryamount_02 = "503.50";
taxLoop1.MOA.Add(moaTax1);
// End TAX Group 1
result.TAXLoop2.Add(taxLoop1);
// Begin TAX Group 2
var taxLoop2 = new Loop_TAX_INVOIC_3();
// Type of tax for the total message is value added tax 21 %
taxLoop2.TAX = new TAX();
taxLoop2.TAX.Dutytaxfeefunctionqualifier_01 = "7";
taxLoop2.TAX.DUTYTAXFEETYPE_02 = new C241();
taxLoop2.TAX.DUTYTAXFEETYPE_02.Dutytaxfeetypecoded_01 = "VAT";
taxLoop2.TAX.DUTYTAXFEEDETAIL_05 = new C243();
taxLoop2.TAX.DUTYTAXFEEDETAIL_05.Dutytaxfeerate_04 = "21";
taxLoop2.TAX.Dutytaxfeecategorycoded_06 = "S";
// Repeating MOA
taxLoop2.MOA = new List();
// Tax monetary amount 453.60 EUR
var moaTax2 = new MOA();
moaTax2.MONETARYAMOUNT_01 = new C516();
moaTax2.MONETARYAMOUNT_01.Monetaryamounttypequalifier_01 = "124";
moaTax2.MONETARYAMOUNT_01.Monetaryamount_02 = "453.60";
taxLoop2.MOA.Add(moaTax2);
// End TAX Group 2
result.TAXLoop2.Add(taxLoop2);
result.ALCLoop2 = new List();
// Begin ALC Group
var alcLoop2 = new Loop_ALC_INVOIC_3();
// Freight charge
alcLoop2.ALC = new ALC();
alcLoop2.ALC.Allowanceorchargequalifier_01 = "C";
alcLoop2.ALC.SPECIALSERVICESIDENTIFICATION_05 = new C214();
alcLoop2.ALC.SPECIALSERVICESIDENTIFICATION_05.Specialservicescoded_01 = "FC";
// Repeating MOA
alcLoop2.MOA = new List();
// Total charges 120 EUR
var moaAlc = new MOA();
moaAlc.MONETARYAMOUNT_01 = new C516();
moaAlc.MONETARYAMOUNT_01.Monetaryamounttypequalifier_01 = "131";
moaAlc.MONETARYAMOUNT_01.Monetaryamount_02 = "120";
alcLoop2.MOA.Add(moaAlc);
// End ALC Group
result.ALCLoop2.Add(alcLoop2);
return result;
}More operations in ediFabric .NET
- Parse EDIFACT files
- Generate EDIFACT files
- Validate EDIFACT messages
- Generate EDIFACT acknowledgments
- Save EDIFACT files to DB
- Convert between EDIFACT and JSON
- Convert between EDIFACT and XML
Template and sample downloads
ediFabric .NET parses, validates and generates the EDIFACT INVOIC with TSINVOIC in EdiFabric.Templates.Edifact. The template ships in the NuGet package; download the source to adapt it to a trading partner's implementation guide.
- EF_EDIFACT_D96A_Codes.cs 35.3 KB
- EF_EDIFACT_D96A_ComplexElements.cs 71.2 KB
- EF_EDIFACT_D96A_Segments.cs 38.2 KB
- EF_EDIFACT_D96A_INVOIC.cs 30.3 KB
INVOIC questions
How is a credit note sent with INVOIC?
With the same message and BGM document code 381. Debit notes use 383.
Where are the invoice totals?
After UNS, in MOA segments such as 77 invoice amount, 79 total line items amount and 125 taxable amount, with TAX and MOA for each tax rate.
What is the X12 equivalent?
The X12 810 invoice.
How do I parse and generate EDIFACT INVOIC files in .NET?
In .NET, install EdiFabric and EdiFabric.Templates.Edifact, read the file with EdifactReader into TSINVOIC 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 EDIFACT.
Resources
Parse your first EDIFACT INVOIC in five minutes
The Community plan is free forever and needs no credit card. It includes ediFabric .NET, Native and Cloud with one serial key.
Sign up free Validate EDI files free