diff --git a/FreeSans.ttf b/FreeSans.ttf new file mode 100644 index 00000000..2072cdaf Binary files /dev/null and b/FreeSans.ttf differ diff --git a/library/src/main/java/org/mustangproject/TradeParty.java b/library/src/main/java/org/mustangproject/TradeParty.java index 025d9668..c9164c1b 100644 --- a/library/src/main/java/org/mustangproject/TradeParty.java +++ b/library/src/main/java/org/mustangproject/TradeParty.java @@ -59,12 +59,175 @@ public class TradeParty implements IZUGFeRDExportableTradeParty { } + protected void parseFromUBL(NodeList nodes) { + if (nodes.getLength() > 0) { + + for (int nodeIndex = 0; nodeIndex < nodes.getLength(); nodeIndex++) { + //nodes.item(i).getTextContent())) { + Node currentItemNode = nodes.item(nodeIndex); + NodeList itemChilds = currentItemNode.getChildNodes(); + for (int itemChildIndex = 0; itemChildIndex < itemChilds.getLength(); itemChildIndex++) { + if (itemChilds.item(itemChildIndex).getLocalName() != null) { + + if (itemChilds.item(itemChildIndex).getLocalName().equals("Party")) { + + NodeList party = itemChilds.item(itemChildIndex).getChildNodes(); + for (int partyIndex = 0; partyIndex < party.getLength(); partyIndex++) { + if (party.item(partyIndex).getLocalName() != null) { + + if (party.item(partyIndex).getLocalName().equals("PartyName")) { + + NodeList partyName = party.item(partyIndex).getChildNodes(); + for (int partyNameIndex = 0; partyNameIndex < partyName.getLength(); partyNameIndex++) { + if (partyName.item(partyNameIndex).getLocalName() != null) { + + if (partyName.item(partyNameIndex).getLocalName().equals("Name")) { + setName(partyName.item(partyNameIndex).getTextContent()); + } + + } + } + } + if (party.item(partyIndex).getLocalName().equals("PostalAddress")) { + + NodeList postal = party.item(partyIndex).getChildNodes(); + for (int postalChildIndex = 0; postalChildIndex < postal.getLength(); postalChildIndex++) { + if (postal.item(postalChildIndex).getLocalName() != null) { + + if (postal.item(postalChildIndex).getLocalName().equals("StreetName")) { + setStreet(postal.item(postalChildIndex).getTextContent()); + } + if (postal.item(postalChildIndex).getLocalName().equals("AdditionalStreetName")) { + setAdditionalAddress(postal.item(postalChildIndex).getTextContent()); + } + //unknow correspondence if (postal.item(postalChildIndex).getLocalName().equals("LineThree")) { + + + if (postal.item(postalChildIndex).getLocalName().equals("CityName")) { + setLocation(postal.item(postalChildIndex).getTextContent()); + } + if (postal.item(postalChildIndex).getLocalName().equals("PostalZone")) { + setZIP(postal.item(postalChildIndex).getTextContent()); + } + if (postal.item(postalChildIndex).getLocalName().equals("Country")) { + NodeList country = postal.item(postalChildIndex).getChildNodes(); + for (int countryIndex = 0; countryIndex < country.getLength(); countryIndex++) { + if (country.item(countryIndex).getLocalName() != null) { + + if (country.item(countryIndex).getLocalName().equals("IdentificationCode")) { + setCountry(country.item(countryIndex).getTextContent()); + } + + } + } + + + } + + if (postal.item(postalChildIndex).getLocalName().equals("AddressLine")) { + NodeList AddressLine = postal.item(postalChildIndex).getChildNodes(); + for (int lineIndex = 0; lineIndex < AddressLine.getLength(); lineIndex++) { + if (AddressLine.item(lineIndex).getLocalName() != null) { + + if (AddressLine.item(lineIndex).getLocalName().equals("Line")) { + setAdditionalAddressExtension(AddressLine.item(lineIndex).getTextContent()); + } + + } + } + + + } + if (postal.item(postalChildIndex).getLocalName().equals("Name")) { + setName(postal.item(postalChildIndex).getTextContent()); + } + + } + } + } + } + } + + + } + + if (itemChilds.item(itemChildIndex).getLocalName().equals("GlobalID")) { + if (itemChilds.item(itemChildIndex).getAttributes().getNamedItem("schemeID") != null) { + SchemedID gid=new SchemedID().setScheme(itemChilds.item(itemChildIndex).getAttributes().getNamedItem("schemeID").getNodeValue()).setId(itemChilds.item(itemChildIndex).getTextContent()); + addGlobalID(gid); + } + + } + if (itemChilds.item(itemChildIndex).getLocalName().equals("DefinedTradeContact")) { + NodeList contact = itemChilds.item(itemChildIndex).getChildNodes(); + setContact(new Contact(contact)); + } + + if (itemChilds.item(itemChildIndex).getLocalName().equals("PostalTradeAddress")) { + NodeList postal = itemChilds.item(itemChildIndex).getChildNodes(); + for (int postalChildIndex = 0; postalChildIndex < postal.getLength(); postalChildIndex++) { + if (postal.item(postalChildIndex).getLocalName() != null) { + if (postal.item(postalChildIndex).getLocalName().equals("LineOne")) { + setStreet(postal.item(postalChildIndex).getTextContent()); + } + if (postal.item(postalChildIndex).getLocalName().equals("LineTwo")) { + setAdditionalAddress(postal.item(postalChildIndex).getTextContent()); + } + if (postal.item(postalChildIndex).getLocalName().equals("LineThree")) { + setAdditionalAddressExtension(postal.item(postalChildIndex).getTextContent()); + } + if (postal.item(postalChildIndex).getLocalName().equals("CityName")) { + setLocation(postal.item(postalChildIndex).getTextContent()); + } + if (postal.item(postalChildIndex).getLocalName().equals("PostcodeCode")) { + setZIP(postal.item(postalChildIndex).getTextContent()); + } + if (postal.item(postalChildIndex).getLocalName().equals("CountryID")) { + setCountry(postal.item(postalChildIndex).getTextContent()); + } + + } + } + + } + + if (itemChilds.item(itemChildIndex).getLocalName().equals("SpecifiedTaxRegistration")) { + NodeList taxChilds = itemChilds.item(itemChildIndex).getChildNodes(); + for (int taxChildIndex = 0; taxChildIndex < taxChilds.getLength(); taxChildIndex++) { + if (taxChilds.item(taxChildIndex).getLocalName() != null) { + if ((taxChilds.item(taxChildIndex).getLocalName().equals("ID"))) { + if (taxChilds.item(taxChildIndex).getAttributes().getNamedItem("schemeID") != null) { + Node firstChild = taxChilds.item(taxChildIndex).getFirstChild(); + if (firstChild != null) + { + if (taxChilds.item(taxChildIndex).getAttributes() + .getNamedItem("schemeID").getNodeValue().equals("VA")) { + setVATID(firstChild.getNodeValue()); + } + if (taxChilds.item(taxChildIndex).getAttributes() + .getNamedItem("schemeID").getNodeValue().equals("FC")) { + setTaxID(firstChild.getNodeValue()); + } + } + } + } + } + } + } + } + } + } + } + + } + /*** * XML parsing constructor * @param nodes the nodelist returned e.g. from xpath */ public TradeParty(NodeList nodes) { /** + * CII would be sth like * * LIEF-987654321 * Max Mustermann IT GmbH @@ -87,7 +250,37 @@ public class TradeParty implements IZUGFeRDExportableTradeParty { * DE123456789 * * - */ + * while UBL may be + * + * + * + * Theodor Est + * + * + * Bahnstr. 42 + * Hinterhaus + * Spielkreis + * 88802 + * + * Zweiter Stock + * + * + * DE + * + * + * + * DE999999999 + * + * VAT + * + * + * + * Theodor Est + * + * + * + * + * */ if (nodes.getLength() > 0) { for (int nodeIndex = 0; nodeIndex < nodes.getLength(); nodeIndex++) { @@ -97,6 +290,11 @@ public class TradeParty implements IZUGFeRDExportableTradeParty { for (int itemChildIndex = 0; itemChildIndex < itemChilds.getLength(); itemChildIndex++) { if (itemChilds.item(itemChildIndex).getLocalName() != null) { + if (itemChilds.item(itemChildIndex).getLocalName().equals("Party")) { + parseFromUBL(nodes); + return; + } + if (itemChilds.item(itemChildIndex).getLocalName().equals("Name")) { setName(itemChilds.item(itemChildIndex).getTextContent()); } diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java index a0d5b2ce..d637eece 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java @@ -664,13 +664,14 @@ public class ZUGFeRDImporter { throw new Exception("Not yet parsed"); } final String head = getUTF8(); - if (head.contains(" 0) { @@ -229,7 +229,7 @@ public class ZUGFeRDInvoiceImporter extends ZUGFeRDImporter { } //.addItem(new Item(new Product("Testprodukt","","C62",BigDecimal.ZERO),amount,new BigDecimal(1.0))) - zpp.setOwnOrganisationName(extractString("//*[local-name()=\"SellerTradeParty\"]/*[local-name()=\"Name\"]")); + zpp.setOwnOrganisationName(extractString("//*[local-name()=\"SellerTradeParty\"]/*[local-name()=\"Name\"]|//*[local-name()=\"AccountingSupplierParty\"]/*[local-name()=\"Party\"]/*[local-name()=\"PartyName\"]").trim()); xpr = xpath.compile("//*[local-name()=\"BuyerReference\"]"); String buyerReference = null; @@ -241,7 +241,7 @@ public class ZUGFeRDInvoiceImporter extends ZUGFeRDImporter { zpp.setReferenceNumber(buyerReference); } - xpr = xpath.compile("//*[local-name()=\"IncludedSupplyChainTradeLineItem\"]"); + xpr = xpath.compile("//*[local-name()=\"IncludedSupplyChainTradeLineItem\"]|//*[local-name()=\"InvoiceLine\"]"); NodeList nodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET); if (nodes.getLength() == 0) { @@ -311,7 +311,7 @@ public class ZUGFeRDInvoiceImporter extends ZUGFeRDImporter { } if ((netChilds.item(netIndex).getLocalName() != null) - && (netChilds.item(netIndex).getLocalName().equals("BasisQuantity"))) { + && ((netChilds.item(netIndex).getLocalName().equals("BasisQuantity"))||(netChilds.item(netIndex).getLocalName().equals("InvoicedQuantity")))) { basisQuantity = netChilds.item(netIndex).getTextContent();// ChargeAmount } diff --git a/library/src/main/resources/Times-Bold.ttf b/library/src/main/resources/Times-Bold.ttf new file mode 100644 index 00000000..889c594f Binary files /dev/null and b/library/src/main/resources/Times-Bold.ttf differ diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java index 23855d19..e81d1bc9 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java @@ -32,16 +32,14 @@ import org.xml.sax.SAXException; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.xpath.XPathExpressionException; -import java.io.BufferedWriter; -import java.io.FileWriter; -import java.io.IOException; -import java.io.StringReader; +import java.io.*; import java.math.BigDecimal; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.Scanner; /*** @@ -100,6 +98,61 @@ public class ZF2ZInvoiceImporterTest extends ResourceCase { } + public void testInvoiceImportUBL() { + + + boolean hasExceptions = false; + + ZUGFeRDInvoiceImporter zii = new ZUGFeRDInvoiceImporter(); + File expectedResult=getResourceAsFile("testout-ZF2new.ubl.xml"); + + Invoice invoice = null; + try { + String xml = new String(Files.readAllBytes(expectedResult.toPath()), StandardCharsets.UTF_8).replace("\r","").replace("\n",""); + + zii.fromXML(xml); + + invoice = zii.extractInvoice(); + } catch (XPathExpressionException | ParseException | IOException e) { + hasExceptions = true; + } + assertFalse(hasExceptions); + // Reading ZUGFeRD + assertEquals("Bei Spiel GmbH", invoice.getOwnOrganisationName()); + assertEquals(3, invoice.getZFItems().length); + assertEquals("400.0000", invoice.getZFItems()[1].getQuantity().toString()); + + assertEquals("AB321", invoice.getReferenceNumber()); + assertEquals("160.0000", invoice.getZFItems()[0].getPrice().toString()); + assertEquals("Heiße Luft pro Liter", invoice.getZFItems()[2].getProduct().getName()); + assertEquals("LTR", invoice.getZFItems()[2].getProduct().getUnit()); + assertEquals("7.00", invoice.getZFItems()[0].getProduct().getVATPercent().toString()); + assertEquals("RE-20170509/505", invoice.getNumber()); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + assertEquals("2017-05-09", sdf.format(invoice.getIssueDate())); + assertEquals("2017-05-07", sdf.format(invoice.getDeliveryDate())); + assertEquals("2017-05-30", sdf.format(invoice.getDueDate())); + + assertEquals("Bahnstr. 42", invoice.getRecipient().getStreet()); + assertEquals("Hinterhaus", invoice.getRecipient().getAdditionalAddress()); + assertEquals("Zweiter Stock", invoice.getRecipient().getAdditionalAddressExtension()); + assertEquals("88802", invoice.getRecipient().getZIP()); + assertEquals("DE", invoice.getRecipient().getCountry()); + assertEquals("Spielkreis", invoice.getRecipient().getLocation()); + + assertEquals("Ecke 12", invoice.getSender().getStreet()); + assertEquals("12345", invoice.getSender().getZIP()); + assertEquals("DE", invoice.getSender().getCountry()); + assertEquals("Stadthausen", invoice.getSender().getLocation()); + + TransactionCalculator tc = new TransactionCalculator(invoice); + assertEquals(new BigDecimal("571.04"), tc.getGrandTotal()); + + + // name street location zip country, contact name phone email, total amount + + } public void testEdgeInvoiceImport() { ZUGFeRDInvoiceImporter zii = new ZUGFeRDInvoiceImporter("./target/testout-ZF2PushEdge.pdf"); diff --git a/library/src/test/resources/testout-MustangGnuaccountingBeispielRE-20171118_506fx.ubl.xml b/library/src/test/resources/testout-MustangGnuaccountingBeispielRE-20171118_506fx.ubl.xml new file mode 100644 index 00000000..a5db6f68 --- /dev/null +++ b/library/src/test/resources/testout-MustangGnuaccountingBeispielRE-20171118_506fx.ubl.xml @@ -0,0 +1,176 @@ + + + urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0 + urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 + RE-20190610/507 + 2019-06-10 + 2019-07-01 + 380 + EUR + AB321 + + + + Bei Spiel GmbH + + + Ecke 12 + Stadthausen + 12345 + + DE + + + + DE0815 + + VAT + + + + 0815 + + FC + + + + Bei Spiel GmbH + + + + + + + Theodor Est + + + Bahnstr. 42 + Hinterhaus + Spielkreis + 88802 + + Zweiter Stock + + + DE + + + + DE999999999 + + VAT + + + + Theodor Est + + + + + 2019-06-10 + + + 58 + RE-20190610/507 + + DE88 2008 0000 0970 3757 00 + + COBADEFFXXX + + + + + Remit until 2019-07-01 + + + 75.04 + + 160 + 11.2 + + S + 7 + + VAT + + + + + 336 + 63.84 + + S + 19 + + VAT + + + + + + 496 + 496 + 571.04 + 0 + 0 + 0 + 571.04 + + + 1 + 1 + 160 + + Design (hours): Of a sample invoice + + S + 7 + + VAT + + + + + 160 + 1 + + + + 2 + 400 + 316 + + Ballons: various colors, ~2000ml + + S + 19 + + VAT + + + + + 0.79 + 1 + + + + 3 + 800 + 20 + + Hot air „heiße Luft“ (litres) + + S + 19 + + VAT + + + + + 0.025 + 1 + + + \ No newline at end of file diff --git a/library/src/test/resources/testout-XR-Edge.ubl.xml b/library/src/test/resources/testout-XR-Edge.ubl.xml new file mode 100644 index 00000000..ec6ea582 --- /dev/null +++ b/library/src/test/resources/testout-XR-Edge.ubl.xml @@ -0,0 +1,131 @@ + + + urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0 + urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 + 123 + 2023-09-09 + 2023-09-09 + 380 + EUR + 991-01484-64 + + one.pdf + Additional file attachment + + DA0= + + + + + + Test company + + + teststr + teststadt + 55232 + + DE + + + + DE0815 + + VAT + + + + DE4711 + + FC + + + + Test company + + + Hans Test + +49123456789 + test@example.org + + + + + + + Franz Müller + + + teststr.12 + Entenhausen + 55232 + + DE + + + + Franz Müller + + + + + 2023-09-09 + + + 58 + 123 + + DE12500105170648489890 + + COBADEFXXX + + + + + #SKONTO#TAGE=14#PROZENT=2.25# +#SKONTO#TAGE=28#PROZENT=1.00# + + + + 0 + + 1 + 0 + + Z + 0 + + VAT + + + + + + 1 + 1 + 1 + 0 + 0 + 0 + 1 + + + 1 + 1 + 1 + + Testprodukt + + Z + 0 + + VAT + + + + + 1 + 1 + + + \ No newline at end of file diff --git a/library/src/test/resources/testout-ZF2PushAllowances.ubl.xml b/library/src/test/resources/testout-ZF2PushAllowances.ubl.xml new file mode 100644 index 00000000..88d063a0 --- /dev/null +++ b/library/src/test/resources/testout-ZF2PushAllowances.ubl.xml @@ -0,0 +1,121 @@ + + + urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0 + urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 + 123 + 2023-09-09 + 380 + EUR + + + + Test company + + + teststr + teststadt + 55232 + + DE + + + + DE0815 + + VAT + + + + 4711 + + FC + + + + Test company + + + + + + + Franz Müller + + + teststr.12 + Entenhausen + 55232 + + DE + + + + Franz Müller + + + + + 2023-09-09 + + + Zahlbar ohne Abzug bis 09.09.2023 + + + false + Allowances + 600 + + S + 19 + + VAT + + + + + 646 + + 3400 + 646 + + S + 19 + + VAT + + + + + + 4000 + 3400 + 4046 + 600 + 0 + 0 + 4046 + + + 1 + 20 + 4000 + + Testprodukt + + S + 19 + + VAT + + + + + 200 + 1 + + false + 300 + + + + \ No newline at end of file diff --git a/library/src/test/resources/testout-ZF2PushEdge.ubl.xml b/library/src/test/resources/testout-ZF2PushEdge.ubl.xml new file mode 100644 index 00000000..225606f0 --- /dev/null +++ b/library/src/test/resources/testout-ZF2PushEdge.ubl.xml @@ -0,0 +1,188 @@ + + + urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0 + urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 + 123 + 2023-09-09 + 380 + document level 1/2 + document level 2/2 + CHF + + 2020-10-01 + 2020-10-05 + + + 28934 + 9384 + + + 376zreurzu0983 + + + + + 0009845 + + + Test company + + + teststr + teststadt + 55232 + + DE + + + + DE0815 + + VAT + + + + 9990815 + + FC + + + + Test company + + + + + + + 4304171000002 + + + Franz Müller + + + teststr.12 + Hinterhaus 3 + Entenhausen + 55232 + + DE + + + + DE4711 + + VAT + + + + Franz Müller + + + + + 2020-11-02 + + + teststr.12a + Entenhausen + 55232 + + DE + + + + + + just the other side of the street + + + + + Zahlbar ohne Abzug bis 09.09.2023 + + + true + quick delivery charge + 0.5 + + S + 16 + + VAT + + + + + false + discount + 0.2 + + S + 16 + + VAT + + + + + 0.2 + + 1.28 + 0.2 + + S + 16 + + VAT + + + + + + 0.98 + 1.28 + 1.48 + 0.2 + 0.5 + 0 + 1.48 + + + 1 + item level 1/1 + 1 + 0.98 + + 2020-01-13 + 2020-01-15 + + + xxx + + + Testprodukt + + 4711 + + + 2001015001325 + + + S + 16 + + VAT + + + + + 0.98 + 1 + + false + 0.02 + + + + \ No newline at end of file diff --git a/library/src/test/resources/testout-ZF2PushItemChargesAllowances.ubl.xml b/library/src/test/resources/testout-ZF2PushItemChargesAllowances.ubl.xml new file mode 100644 index 00000000..a923f659 --- /dev/null +++ b/library/src/test/resources/testout-ZF2PushItemChargesAllowances.ubl.xml @@ -0,0 +1,189 @@ + + + urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0 + urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 + 123 + 2023-09-09 + 380 + EUR + + + + Test company + + + teststr + teststadt + 55232 + + DE + + + + DE0815 + + VAT + + + + 4711 + + FC + + + + Test company + + + + + + + Franz Müller + + + teststr.12 + Entenhausen + 55232 + + DE + + + + Franz Müller + + + contact testname + 123456 + contact.testemail@example.org + + + + + 2023-09-09 + + + Zahlbar ohne Abzug bis 09.09.2023 + + + 2.93 + + 15.4 + 2.93 + + S + 19 + + VAT + + + + + + 15.4 + 15.4 + 18.33 + 0 + 0 + 0 + 18.33 + + + 1 + 1 + 2.9 + + Testprodukt + + S + 19 + + VAT + + + + + 2.9 + 1 + + false + 0.1 + + + + + 2 + 1 + 1.5 + + Testprodukt + + S + 19 + + VAT + + + + + 1.5 + 1 + + false + 50.00 + 1.5 + 3 + + + + + 3 + 2 + 8 + + Testprodukt + + S + 19 + + VAT + + + + + 4 + 1 + + true + 1 + + + + + 4 + 1 + 3 + + Testprodukt + + S + 19 + + VAT + + + + + 3 + 1 + + false + 1 + + + true + 1 + + + + \ No newline at end of file diff --git a/library/src/test/resources/testout-ZF2new.ubl.xml b/library/src/test/resources/testout-ZF2new.ubl.xml new file mode 100644 index 00000000..35eabf13 --- /dev/null +++ b/library/src/test/resources/testout-ZF2new.ubl.xml @@ -0,0 +1,176 @@ + + + urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0 + urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 + RE-20170509/505 + 2017-05-09 + 2017-05-30 + 380 + EUR + AB321 + + + + Bei Spiel GmbH + + + Ecke 12 + Stadthausen + 12345 + + DE + + + + DE0815 + + VAT + + + + 0815 + + FC + + + + Bei Spiel GmbH + + + + + + + Theodor Est + + + Bahnstr. 42 + Hinterhaus + Spielkreis + 88802 + + Zweiter Stock + + + DE + + + + DE999999999 + + VAT + + + + Theodor Est + + + + + 2017-05-07 + + + 58 + RE-20170509/505 + + DE88 2008 0000 0970 3757 00 + + COBADEFFXXX + + + + + Zahlbar ohne Abzug bis zum 30.05.2017 + + + 75.04 + + 160 + 11.2 + + S + 7 + + VAT + + + + + 336 + 63.84 + + S + 19 + + VAT + + + + + + 496 + 496 + 571.04 + 0 + 0 + 0 + 571.04 + + + 1 + 1 + 160 + + Künstlerische Gestaltung (Stunde): Einer Beispielrechnung + + S + 7 + + VAT + + + + + 160 + 1 + + + + 2 + 400 + 316 + + Bestellerweiterung für E&F Umbau + + S + 19 + + VAT + + + + + 0.79 + 1 + + + + 3 + 200 + 20 + + Heiße Luft pro Liter + + S + 19 + + VAT + + + + + 0.1 + 1 + + + \ No newline at end of file diff --git a/library/src/test/resources/testout-ZF2newEdge.ubl.xml b/library/src/test/resources/testout-ZF2newEdge.ubl.xml new file mode 100644 index 00000000..e7c32c9b --- /dev/null +++ b/library/src/test/resources/testout-ZF2newEdge.ubl.xml @@ -0,0 +1,192 @@ + + + urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0 + urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 + RE-20170509/505 + 2017-05-09 + 2022-02-28 + 380 + USD + AB321 + + 123 + + + + + Bei Spiel GmbH + + + Ecke 12 + Stadthausen + 12345 + + DE + + + + DE0815 + + VAT + + + + 0815 + + FC + + + + Bei Spiel GmbH + + + + + + + Theodor Est + + + Bahnstr. 42 + Hinterhaus + Spielkreis + 88802 + + Zweiter Stock + + + DE + + + + DE999999999 + + VAT + + + + Theodor Est + + + + + 2017-05-07 + + + Bahnstr. 42 + Hinterhaus + Spielkreis + 88802 + + Zweiter Stock + + + DE + + + + + + Theodor Est + + + + + 59 + RE-20170509/505 + + DE99XX12345 + + DE540815 + + + + + 14 Tage 2% Skonto, 30 Tage rein netto + + + 0 + + 337.6 + 0 + + K + 0 + Intra-community supply + + VAT + + + + + + 337.6 + 337.6 + 337.6 + 0 + 0 + 0 + 337.6 + + + 1 + 1 + 1.6 + + 1825 + 130 + + + Künstlerische Gestaltung (Stunde): Einer Beispielrechnung + + K + 0 + + VAT + + + + + 160 + 100 + + + + 2 + 400 + 316 + + Bestellerweiterung für E&F Umbau + + K + 0 + + VAT + + + + + 0.79 + 1 + + + + 3 + 200 + 20 + + Heiße Luft pro Liter + + K + 0 + + VAT + + + + + 0.1 + 1 + + + \ No newline at end of file