Merge branch 'master' of github.com:ZUGFeRD/mustangproject

This commit is contained in:
jstaerk
2025-01-06 10:25:44 +01:00
26 changed files with 4562 additions and 4191 deletions

View File

@@ -45,7 +45,7 @@
<dependency> <dependency>
<groupId>ch.qos.logback</groupId> <groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId> <artifactId>logback-core</artifactId>
<version>1.2.13</version> <version>1.5.13</version>
</dependency> </dependency>
<dependency> <dependency>
<!-- This library is needed so that logback stderr output is sent to, well, stderr, otherwise it lands in stdout --> <!-- This library is needed so that logback stderr output is sent to, well, stderr, otherwise it lands in stdout -->

View File

@@ -3,11 +3,14 @@ package org.mustangproject.Exceptions;
import java.text.ParseException; import java.text.ParseException;
/*** /***
* will be thrown if a invoice cant be reproduced numerically * will be thrown if an invoice cant be reproduced numerically
*/ */
public class ArithmetricException extends ParseException { public class ArithmetricException extends ParseException {
public ArithmetricException() { public ArithmetricException() {
super( this("");
"Could not reproduce the invoice, this could mean that it could not be read properly", 0); }
public ArithmetricException(String details) {
super("Could not reproduce the invoice. " + details, 0);
} }
} }

View File

@@ -38,7 +38,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@JsonInclude(JsonInclude.Include.NON_EMPTY) @JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Invoice implements IExportableTransaction { public class Invoice implements IExportableTransaction {
protected String documentName = null, documentCode = null, number = null, ownOrganisationFullPlaintextInfo = null, referenceNumber = null, shipToOrganisationID = null, shipToOrganisationName = null, shipToStreet = null, shipToZIP = null, shipToLocation = null, shipToCountry = null, buyerOrderReferencedDocumentID = null, invoiceReferencedDocumentID = null, buyerOrderReferencedDocumentIssueDateTime = null, ownForeignOrganisationID = null, ownOrganisationName = null, currency = null, paymentTermDescription = null; protected String documentName = null, documentCode = null, number = null, ownOrganisationFullPlaintextInfo = null, referenceNumber = null, shipToOrganisationID = null, shipToOrganisationName = null, shipToStreet = null, shipToZIP = null, shipToLocation = null, shipToCountry = null, buyerOrderReferencedDocumentID = null, buyerOrderReferencedDocumentIssueDateTime = null, ownForeignOrganisationID = null, ownOrganisationName = null, currency = null, paymentTermDescription = null;
protected Date issueDate = null, dueDate = null, deliveryDate = null; protected Date issueDate = null, dueDate = null, deliveryDate = null;
protected TradeParty sender = null, recipient = null, deliveryAddress = null, payee = null; protected TradeParty sender = null, recipient = null, deliveryAddress = null, payee = null;
protected ArrayList<CashDiscount> cashDiscounts = null; protected ArrayList<CashDiscount> cashDiscounts = null;
@@ -57,7 +57,12 @@ public class Invoice implements IExportableTransaction {
protected ArrayList<IZUGFeRDAllowanceCharge> Allowances = new ArrayList<>(), protected ArrayList<IZUGFeRDAllowanceCharge> Allowances = new ArrayList<>(),
Charges = new ArrayList<>(), LogisticsServiceCharges = new ArrayList<>(); Charges = new ArrayList<>(), LogisticsServiceCharges = new ArrayList<>();
protected IZUGFeRDPaymentTerms paymentTerms = null; protected IZUGFeRDPaymentTerms paymentTerms = null;
protected String invoiceReferencedDocumentID = null;
protected Date invoiceReferencedIssueDate; protected Date invoiceReferencedIssueDate;
// New field for storing Invoiced Object Identifier (BG-3)
protected ArrayList<ReferencedDocument> invoiceReferencedDocuments = null;
protected String specifiedProcuringProjectID = null; protected String specifiedProcuringProjectID = null;
protected String specifiedProcuringProjectName = null; protected String specifiedProcuringProjectName = null;
protected String despatchAdviceReferencedDocumentID = null; protected String despatchAdviceReferencedDocumentID = null;
@@ -148,6 +153,7 @@ public class Invoice implements IExportableTransaction {
*/ */
public Invoice setCorrection(String number) { public Invoice setCorrection(String number) {
setInvoiceReferencedDocumentID(number); setInvoiceReferencedDocumentID(number);
addInvoiceReferencedDocument(new ReferencedDocument(number));
documentCode = DocumentCodeTypeConstants.CORRECTEDINVOICE; documentCode = DocumentCodeTypeConstants.CORRECTEDINVOICE;
return this; return this;
} }
@@ -546,6 +552,26 @@ public class Invoice implements IExportableTransaction {
return this; return this;
} }
// Getter for BG-3
@Override
public ArrayList<ReferencedDocument> getInvoiceReferencedDocuments() {
return invoiceReferencedDocuments;
}
// Setter for BG-3
public void setInvoiceReferencedDocuments(ArrayList<ReferencedDocument> invoiceReferencedDocuments) {
this.invoiceReferencedDocuments = invoiceReferencedDocuments;
}
// Method to add a single ReferencedDocument for BG-3
public Invoice addInvoiceReferencedDocument(ReferencedDocument doc) {
if (invoiceReferencedDocuments == null) {
invoiceReferencedDocuments = new ArrayList<>();
}
invoiceReferencedDocuments.add(doc);
return this;
}
@Override @Override
public IZUGFeRDAllowanceCharge[] getZFAllowances() { public IZUGFeRDAllowanceCharge[] getZFAllowances() {
if (Allowances.isEmpty()) { if (Allowances.isEmpty()) {

View File

@@ -2,6 +2,8 @@ package org.mustangproject;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.Date;
import org.mustangproject.ZUGFeRD.IReferencedDocument; import org.mustangproject.ZUGFeRD.IReferencedDocument;
import org.mustangproject.util.NodeMap; import org.mustangproject.util.NodeMap;
import org.w3c.dom.Node; import org.w3c.dom.Node;
@@ -13,20 +15,33 @@ public class ReferencedDocument implements IReferencedDocument {
String issuerAssignedID; String issuerAssignedID;
String typeCode; String typeCode;
String referenceTypeCode; String referenceTypeCode;
Date formattedIssueDateTime;
public ReferencedDocument(String issuerAssignedID, String typeCode, String referenceTypeCode) { public ReferencedDocument(String issuerAssignedID, String typeCode, String referenceTypeCode) {
this.issuerAssignedID = issuerAssignedID; this(issuerAssignedID);
this.typeCode = typeCode; this.typeCode = typeCode;
this.referenceTypeCode = referenceTypeCode; this.referenceTypeCode = referenceTypeCode;
} }
public ReferencedDocument(String issuerAssignedID, String referenceTypeCode) { public ReferencedDocument(String issuerAssignedID, String typeCode, String referenceTypeCode, Date formattedIssueDateTime) {
this.issuerAssignedID = issuerAssignedID; this(issuerAssignedID, typeCode, referenceTypeCode);
this.typeCode = "916"; // additional invoice related document this.formattedIssueDateTime = formattedIssueDateTime;
this.referenceTypeCode = referenceTypeCode;
} }
/*** public ReferencedDocument(String issuerAssignedID, String referenceTypeCode) {
this(issuerAssignedID, "916", referenceTypeCode); // additional invoice related document
}
public ReferencedDocument(String issuerAssingedID, Date formattedIssueDateTime) {
this(issuerAssingedID);
this.formattedIssueDateTime = formattedIssueDateTime;
}
public ReferencedDocument(String issuerAssignedID) {
this.issuerAssignedID = issuerAssignedID;
}
/***
* sets an ID assigned by the sender * sets an ID assigned by the sender
* @param issuerAssignedID the ID as a string :-) * @param issuerAssignedID the ID as a string :-)
*/ */
@@ -50,6 +65,15 @@ public class ReferencedDocument implements IReferencedDocument {
this.referenceTypeCode = referenceTypeCode; this.referenceTypeCode = referenceTypeCode;
} }
/**
* issue date of this line
*
* @param formattedIssueDateTime as Date
*/
public void setFormattedIssueDateTime(Date formattedIssueDateTime) {
this.formattedIssueDateTime = formattedIssueDateTime;
}
@Override @Override
public String getIssuerAssignedID() { public String getIssuerAssignedID() {
return issuerAssignedID; return issuerAssignedID;
@@ -65,6 +89,12 @@ public class ReferencedDocument implements IReferencedDocument {
return referenceTypeCode; return referenceTypeCode;
} }
@Override
public Date getFormattedIssueDateTime()
{
return formattedIssueDateTime;
}
public static ReferencedDocument fromNode(Node node) { public static ReferencedDocument fromNode(Node node) {
if (!node.hasChildNodes()) { if (!node.hasChildNodes()) {
return null; return null;
@@ -72,6 +102,7 @@ public class ReferencedDocument implements IReferencedDocument {
NodeMap nodes = new NodeMap(node); NodeMap nodes = new NodeMap(node);
return new ReferencedDocument(nodes.getAsStringOrNull("IssuerAssignedID", "ID"), return new ReferencedDocument(nodes.getAsStringOrNull("IssuerAssignedID", "ID"),
nodes.getAsStringOrNull("TypeCode", "DocumentTypeCode"), nodes.getAsStringOrNull("TypeCode", "DocumentTypeCode"),
nodes.getAsStringOrNull("ReferenceTypeCode")); nodes.getAsStringOrNull("ReferenceTypeCode"),
XMLTools.tryDate(nodes.getAsStringOrNull("FormattedIssueDateTime")));
} }
} }

View File

@@ -30,11 +30,13 @@ package org.mustangproject.ZUGFeRD;
* */ * */
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import org.mustangproject.FileAttachment; import org.mustangproject.FileAttachment;
import org.mustangproject.IncludedNote; import org.mustangproject.IncludedNote;
import org.mustangproject.ReferencedDocument;
import org.mustangproject.ZUGFeRD.model.DocumentCodeTypeConstants; import org.mustangproject.ZUGFeRD.model.DocumentCodeTypeConstants;
/*** /***
@@ -424,13 +426,23 @@ public interface IExportableTransaction {
* *
* @return the ID of the document * @return the ID of the document
*/ */
@Deprecated
default String getInvoiceReferencedDocumentID() { default String getInvoiceReferencedDocumentID() {
return null; return null;
} }
@Deprecated
default Date getInvoiceReferencedIssueDate() { default Date getInvoiceReferencedIssueDate() {
return null; return null;
} }
/**
* Getter for BG-3
* @return list of documents
*/
default ArrayList<ReferencedDocument> getInvoiceReferencedDocuments() {
return null;
}
/** /**
* get the issue timestamp of the BuyerOrderReferencedDocument, which sits in * get the issue timestamp of the BuyerOrderReferencedDocument, which sits in

View File

@@ -1,5 +1,7 @@
package org.mustangproject.ZUGFeRD; package org.mustangproject.ZUGFeRD;
import java.util.Date;
public interface IReferencedDocument { public interface IReferencedDocument {
/*** /***
@@ -20,4 +22,12 @@ public interface IReferencedDocument {
*/ */
String getReferenceTypeCode(); String getReferenceTypeCode();
/***
*
* issue date of this line
*
* @return date of the issue
*/
Date getFormattedIssueDateTime();
} }

View File

@@ -459,6 +459,19 @@ public class OXPullProvider extends ZUGFeRD2PullProvider {
} }
xml += "</ram:InvoiceReferencedDocument>"; xml += "</ram:InvoiceReferencedDocument>";
} }
if (trans.getInvoiceReferencedDocuments() != null) {
for (var doc : trans.getInvoiceReferencedDocuments()) {
xml += "<ram:InvoiceReferencedDocument>"
+ "<ram:IssuerAssignedID>"
+ XMLTools.encodeXML(doc.getIssuerAssignedID()) + "</ram:IssuerAssignedID>";
if (doc.getFormattedIssueDateTime() != null) {
xml += "<ram:FormattedIssueDateTime>"
+ DATE.qdtFormat(doc.getFormattedIssueDateTime())
+ "</ram:FormattedIssueDateTime>";
}
xml += "</ram:InvoiceReferencedDocument>";
}
}
xml += "</ram:ApplicableHeaderTradeSettlement>"; xml += "</ram:ApplicableHeaderTradeSettlement>";
// + " <IncludedSupplyChainTradeLineItem>" // + " <IncludedSupplyChainTradeLineItem>"

View File

@@ -4,7 +4,10 @@ import static java.math.BigDecimal.ZERO;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
/*** /***
@@ -91,17 +94,14 @@ public class TransactionCalculator implements IAbsoluteValueProvider {
} }
private String getAllowanceChargeReasonForPercent(BigDecimal percent, IZUGFeRDAllowanceCharge[] charges) { private String getAllowanceChargeReasonForPercent(BigDecimal percent, IZUGFeRDAllowanceCharge[] charges) {
String res = " "; if (charges == null) {
if ((charges != null) && (charges.length > 0)) { return "";
for (IZUGFeRDAllowanceCharge currentCharge : charges) {
if ((percent == null) || (currentCharge.getTaxPercent().compareTo(percent) == 0)
&& currentCharge.getReason() != null) {
res += currentCharge.getReason() + " ";
}
}
} }
res = res.substring(0, res.length() - 1); return Arrays.stream(charges)
return res; .filter(currentCharge -> (percent == null || currentCharge.getTaxPercent().compareTo(percent) == 0))
.map(IZUGFeRDAllowanceCharge::getReason)
.filter(Objects::nonNull)
.collect(Collectors.joining(" "));
} }
/*** /***

View File

@@ -828,6 +828,12 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
if (paymentTermsDescription != null) { if (paymentTermsDescription != null) {
xml += "<ram:Description>" + paymentTermsDescription + "</ram:Description>"; xml += "<ram:Description>" + paymentTermsDescription + "</ram:Description>";
} }
if (trans.getDueDate() != null) {
xml += "<ram:DueDateDateTime>" // $NON-NLS-2$
+ DATE.udtFormat(trans.getDueDate())
+ "</ram:DueDateDateTime>";// 20130704
}
if (trans.getTradeSettlement() != null) { if (trans.getTradeSettlement() != null) {
for (final IZUGFeRDTradeSettlement payment : trans.getTradeSettlement()) { for (final IZUGFeRDTradeSettlement payment : trans.getTradeSettlement()) {
@@ -837,12 +843,6 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
} }
} }
if (trans.getDueDate() != null) {
xml += "<ram:DueDateDateTime>" // $NON-NLS-2$
+ DATE.udtFormat(trans.getDueDate())
+ "</ram:DueDateDateTime>";// 20130704
}
xml += "</ram:SpecifiedTradePaymentTerms>"; xml += "</ram:SpecifiedTradePaymentTerms>";
} else { } else {
xml += buildPaymentTermsXml(); xml += buildPaymentTermsXml();
@@ -893,6 +893,19 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
} }
xml += "</ram:InvoiceReferencedDocument>"; xml += "</ram:InvoiceReferencedDocument>";
} }
if (trans.getInvoiceReferencedDocuments() != null) {
for (var doc : trans.getInvoiceReferencedDocuments()) {
xml += "<ram:InvoiceReferencedDocument>"
+ "<ram:IssuerAssignedID>"
+ XMLTools.encodeXML(doc.getIssuerAssignedID()) + "</ram:IssuerAssignedID>";
if (doc.getFormattedIssueDateTime() != null) {
xml += "<ram:FormattedIssueDateTime>"
+ DATE.qdtFormat(doc.getFormattedIssueDateTime())
+ "</ram:FormattedIssueDateTime>";
}
xml += "</ram:InvoiceReferencedDocument>";
}
}
xml += "</ram:ApplicableHeaderTradeSettlement>"; xml += "</ram:ApplicableHeaderTradeSettlement>";
// + "<IncludedSupplyChainTradeLineItem>\n" // + "<IncludedSupplyChainTradeLineItem>\n"

View File

@@ -32,6 +32,9 @@ import java.nio.file.StandardOpenOption;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class ZUGFeRDInvoiceImporter { public class ZUGFeRDInvoiceImporter {
@@ -472,9 +475,11 @@ public class ZUGFeRDInvoiceImporter {
xpr = xpath.compile("//*[local-name()=\"SpecifiedTradeSettlementHeaderMonetarySummation\"]/*[local-name()=\"DuePayableAmount\"]|//*[local-name()=\"LegalMonetaryTotal\"]/*[local-name()=\"PayableAmount\"]"); xpr = xpath.compile("//*[local-name()=\"SpecifiedTradeSettlementHeaderMonetarySummation\"]/*[local-name()=\"DuePayableAmount\"]|//*[local-name()=\"LegalMonetaryTotal\"]/*[local-name()=\"PayableAmount\"]");
NodeList lineDueNodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET); NodeList lineDueNodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET);
BigDecimal duePayableAmount = null;
if (lineDueNodes.getLength() > 0) { if (lineDueNodes.getLength() > 0) {
duePayableAmount = new BigDecimal(XMLTools.trimOrNull(lineDueNodes.item(0)));
if (zpp instanceof CalculatedInvoice) { if (zpp instanceof CalculatedInvoice) {
((CalculatedInvoice) zpp).setDuePayable(new BigDecimal(XMLTools.trimOrNull(lineDueNodes.item(0)))); ((CalculatedInvoice) zpp).setDuePayable(duePayableAmount);
} }
} }
@@ -816,6 +821,23 @@ public class ZUGFeRDInvoiceImporter {
} }
zpp.setInvoiceReferencedDocumentID(extractString("//*[local-name()=\"InvoiceReferencedDocument\"]/*[local-name()=\"IssuerAssignedID\"]|//*[local-name()=\"BillingReference\"]/*[local-name()=\"InvoiceDocumentReference\"]/*[local-name()=\"ID\"]")); zpp.setInvoiceReferencedDocumentID(extractString("//*[local-name()=\"InvoiceReferencedDocument\"]/*[local-name()=\"IssuerAssignedID\"]|//*[local-name()=\"BillingReference\"]/*[local-name()=\"InvoiceDocumentReference\"]/*[local-name()=\"ID\"]"));
xpr = xpath.compile("//*[local-name()=\"InvoiceReferencedDocument\"]");
NodeList nodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET);
if (nodes.getLength() != 0) {
for (int i = 0; i < nodes.getLength(); i++) {
Node currentItemNode = nodes.item(i);
ReferencedDocument doc = ReferencedDocument.fromNode(currentItemNode);
if (doc != null
&& (!Objects.equals(zpp.getInvoiceReferencedDocumentID(), doc.getIssuerAssignedID())
|| !Objects.equals(zpp.getInvoiceReferencedIssueDate(), doc.getFormattedIssueDateTime())))
{
zpp.addInvoiceReferencedDocument(doc);
}
}
}
zpp.setOwnOrganisationName(extractString("//*[local-name()=\"SellerTradeParty\"]/*[local-name()=\"Name\"]|//*[local-name()=\"AccountingSupplierParty\"]/*[local-name()=\"Party\"]/*[local-name()=\"PartyName\"]").trim()); zpp.setOwnOrganisationName(extractString("//*[local-name()=\"SellerTradeParty\"]/*[local-name()=\"Name\"]|//*[local-name()=\"AccountingSupplierParty\"]/*[local-name()=\"Party\"]/*[local-name()=\"PartyName\"]").trim());
String rounding = extractString("//*[local-name()=\"SpecifiedTradeSettlementHeaderMonetarySummation\"]/*[local-name()=\"RoundingAmount\"]|//*[local-name()=\"LegalMonetaryTotal\"]/*[local-name()=\"Party\"]/*[local-name()=\"PayableRoundingAmount\"]"); String rounding = extractString("//*[local-name()=\"SpecifiedTradeSettlementHeaderMonetarySummation\"]/*[local-name()=\"RoundingAmount\"]|//*[local-name()=\"LegalMonetaryTotal\"]/*[local-name()=\"Party\"]/*[local-name()=\"PayableRoundingAmount\"]");
@@ -834,7 +856,7 @@ public class ZUGFeRDInvoiceImporter {
} }
xpr = xpath.compile("//*[local-name()=\"IncludedSupplyChainTradeLineItem\"]|//*[local-name()=\"InvoiceLine\"]"); xpr = xpath.compile("//*[local-name()=\"IncludedSupplyChainTradeLineItem\"]|//*[local-name()=\"InvoiceLine\"]");
NodeList nodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET); nodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET);
if (nodes.getLength() != 0) { if (nodes.getLength() != 0) {
for (int i = 0; i < nodes.getLength(); i++) { for (int i = 0; i < nodes.getLength(); i++) {
@@ -938,8 +960,7 @@ public class ZUGFeRDInvoiceImporter {
TransactionCalculator tc = new TransactionCalculator(zpp); TransactionCalculator tc = new TransactionCalculator(zpp);
String expectedStringTotalGross = tc.getGrandTotal() String calculatedPayableTotal = tc.getDuePayable().toPlainString();
.subtract(Objects.requireNonNullElse(zpp.getTotalPrepaidAmount(), BigDecimal.ZERO)).toPlainString();
EStandard whichType; EStandard whichType;
try { try {
whichType = getStandard(); whichType = getStandard();
@@ -947,10 +968,21 @@ public class ZUGFeRDInvoiceImporter {
throw new StructureException("Could not find out if it's an invoice, order, or delivery advice", 0); throw new StructureException("Could not find out if it's an invoice, order, or delivery advice", 0);
} }
if ((whichType != EStandard.despatchadvice) if (whichType != EStandard.despatchadvice && !ignoreCalculationErrors) {
&& ((!expectedStringTotalGross.equals(XMLTools.nDigitFormat(expectedGrandTotal, 2))) // Check calculation if document type allows it and calculation errors should not be ignored
&& (!ignoreCalculationErrors))) {
throw new ArithmetricException(); String payableTotalFromXml = XMLTools.nDigitFormat(Objects.requireNonNullElse(duePayableAmount, expectedGrandTotal), 2);
if (!calculatedPayableTotal.equals(payableTotalFromXml)) {
String moreDetails = "";
try {
moreDetails = " with tax basis " + tc.getTaxBasis() + " and with positions " + tc.getTotal() + " = "
+ Stream.of(tc.trans.getZFItems())
.map(item -> new LineCalculator(item).getItemTotalNetAmount().toPlainString())
.collect(Collectors.joining(" + "));
} catch (Exception ignored) {
}
throw new ArithmetricException("Payable total in XML is " + payableTotalFromXml + ", but calculated total is " + calculatedPayableTotal + moreDetails);
}
} }
} }
return zpp; return zpp;
@@ -1068,5 +1100,4 @@ public class ZUGFeRDInvoiceImporter {
LOGGER.error(e.getMessage(), e); LOGGER.error(e.getMessage(), e);
} }
} }
} }

View File

@@ -20,42 +20,9 @@
*/ */
package org.mustangproject.ZUGFeRD; package org.mustangproject.ZUGFeRD;
import java.io.BufferedOutputStream; import com.helger.commons.io.stream.StreamHelper;
import java.io.ByteArrayInputStream; import org.apache.commons.io.IOUtils;
import java.io.ByteArrayOutputStream; import org.apache.fop.apps.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Templates;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.URIResolver;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.apache.fop.apps.FOPException;
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.Fop;
import org.apache.fop.apps.FopFactory;
import org.apache.fop.apps.FopFactoryBuilder;
import org.apache.fop.apps.io.ResourceResolverFactory; import org.apache.fop.apps.io.ResourceResolverFactory;
import org.apache.fop.configuration.Configuration; import org.apache.fop.configuration.Configuration;
import org.apache.fop.configuration.ConfigurationException; import org.apache.fop.configuration.ConfigurationException;
@@ -65,12 +32,19 @@ import org.mustangproject.ClasspathResolverURIAdapter;
import org.mustangproject.EStandard; import org.mustangproject.EStandard;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import com.helger.commons.io.stream.StreamHelper;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.Element; import org.w3c.dom.Element;
import org.xml.sax.InputSource; import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.*;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Optional;
public class ZUGFeRDVisualizer { public class ZUGFeRDVisualizer {
@@ -113,7 +87,7 @@ public class ZUGFeRDVisualizer {
* @param fis inputstream (will be consumed) * @param fis inputstream (will be consumed)
* @return (facturx = cii) * @return (facturx = cii)
*/ */
public EStandard findOutStandardFromRootNode(InputStream fis) { private EStandard findOutStandardFromRootNode(InputStream fis) {
String zf1Signature = "CrossIndustryDocument"; String zf1Signature = "CrossIndustryDocument";
String zf2Signature = "CrossIndustryInvoice"; String zf2Signature = "CrossIndustryInvoice";
@@ -144,106 +118,97 @@ public class ZUGFeRDVisualizer {
return null; return null;
} }
public String visualize(String xmlFilename, Language lang) public String visualize(String xmlFilename, Language lang) throws IOException, TransformerException {
throws FileNotFoundException, TransformerException, IOException, SAXException, ParserConfigurationException {
try {
if (mXsltPDFTemplate == null) {
mXsltPDFTemplate = mFactory.newTemplates(
new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/xr-pdf.xsl")));
}
if (mXsltHTMLTemplate == null) {
mXsltHTMLTemplate = mFactory.newTemplates(new StreamSource(
CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/xrechnung-html." + lang.name().toLowerCase() + ".xsl")));
}
if (mXsltZF1HTMLTemplate == null) {
mXsltZF1HTMLTemplate = mFactory.newTemplates(new StreamSource(
CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/ZUGFeRD_1p0_c1p0_s1p0.xslt")));
}
} catch (TransformerConfigurationException ex) {
LOGGER.error("Failed to init XSLT templates", ex);
}
/**
* *
* http://www.unece.org/fileadmin/DAM/cefact/xml/XML-Naming-And-Design-Rules-V2_1.pdf
* http://www.ferd-net.de/upload/Dokumente/FACTUR-X_ZUGFeRD_2p0_Teil1_Profil_EN16931_1p03.pdf
* http://countwordsfree.com/xmlviewer
*/
FileInputStream fis = new FileInputStream(xmlFilename); FileInputStream fis = new FileInputStream(xmlFilename);
String fileContent = ""; return visualize(fis, lang);
try { }
fileContent = new String(Files.readAllBytes(Paths.get(xmlFilename)), StandardCharsets.UTF_8);
} catch (IOException e2) {
LOGGER.error("Failed to read file content", e2);
}
ByteArrayOutputStream iaos = new ByteArrayOutputStream(); public String visualize(InputStream inputXml, Language lang) throws IOException, TransformerException {
ByteArrayOutputStream baos = new ByteArrayOutputStream(); initTemplates(lang);
boolean doPostProcessing = false; String fileContent = new String(IOUtils.toByteArray(inputXml), StandardCharsets.UTF_8);
EStandard thestandard = findOutStandardFromRootNode(new ByteArrayInputStream(fileContent.getBytes(StandardCharsets.UTF_8)));
ByteArrayOutputStream htmlOutput = new ByteArrayOutputStream();
fis = new FileInputStream(xmlFilename); // fis wont reset() so re-read from beginning ByteArrayInputStream xmlContentStream = new ByteArrayInputStream(fileContent.getBytes(StandardCharsets.UTF_8));
EStandard thestandard = findOutStandardFromRootNode(fis);
fis = new FileInputStream(xmlFilename); // fis wont reset() so re-read from beginning
if (thestandard == EStandard.zugferd) { if (thestandard == EStandard.zugferd) {
applyZF1XSLT(fis, baos); applyZF1XSLT(xmlContentStream, htmlOutput);
return htmlOutput.toString(StandardCharsets.UTF_8);
} else if (thestandard == EStandard.facturx) { } else if (thestandard == EStandard.facturx) {
//zf2 or fx //zf2 or fx
applyZF2XSLT(fis, iaos); applyZF2XSLT(xmlContentStream, htmlOutput);
doPostProcessing = true;
} else if (thestandard == EStandard.ubl) { } else if (thestandard == EStandard.ubl) {
//zf2 or fx //zf2 or fx
applyUBL2XSLT(fis, iaos); applyUBL2XSLT(xmlContentStream, htmlOutput);
doPostProcessing = true;
} else if (thestandard == EStandard.ubl_creditnote) { } else if (thestandard == EStandard.ubl_creditnote) {
//zf2 or fx //zf2 or fx
applyUBLCreditNote2XSLT(fis, iaos); applyUBLCreditNote2XSLT(xmlContentStream, htmlOutput);
doPostProcessing = true;
} else if (thestandard == EStandard.orderx) { } else if (thestandard == EStandard.orderx) {
//zf2 or fx //zf2 or fx
applyCIO2XSLT(fis, iaos); applyCIO2XSLT(xmlContentStream, htmlOutput);
doPostProcessing = true;
} else { } else {
throw new IllegalArgumentException("File does not look like CII or UBL"); throw new IllegalArgumentException("File does not look like CII or UBL");
} }
if (doPostProcessing) { Optional<InputStream> in = copyStream(htmlOutput);
// take the copy of the stream and re-write it to an InputStream ByteArrayOutputStream htmlOutStream = new ByteArrayOutputStream();
PipedInputStream in = new PipedInputStream(); if (in.isPresent()) {
PipedOutputStream out; applyXSLTToHTML(in.get(), htmlOutStream);
try {
out = new PipedOutputStream(in);
new Thread(new Runnable() {
public void run() {
try {
// write the original OutputStream to the PipedOutputStream
// note that in order for the below method to work, you need
// to ensure that the data has finished writing to the
// ByteArrayOutputStream
iaos.writeTo(out);
} catch (IOException e) {
LOGGER.error("Failed to write to stream", e);
} finally {
// close the PipedOutputStream here because we're done writing data
// once this thread has completed its run
StreamHelper.close(out);
}
}
}).start();
applyXSLTToHTML(in, baos);
} catch (IOException e1) {
LOGGER.error("Failed to create HTML", e1);
}
} }
return baos.toString(StandardCharsets.UTF_8); return htmlOutStream.toString(StandardCharsets.UTF_8);
}
/**
* TODO: jstaerk: why not copy with that simple call: new ByteArrayInputStream(byteArrayOutputStream.toByteArray()) ?
*/
private Optional<InputStream> copyStream(ByteArrayOutputStream byteArrayOutputStream) {
// take the copy of the stream and re-write it to an InputStream
PipedInputStream in = new PipedInputStream();
try {
PipedOutputStream out = new PipedOutputStream(in);
new Thread(() -> {
try {
// write the original OutputStream to the PipedOutputStream
// note that in order for the below method to work, you need
// to ensure that the data has finished writing to the
// ByteArrayOutputStream
byteArrayOutputStream.writeTo(out);
} catch (IOException e) {
LOGGER.error("Failed to write to stream", e);
} finally {
// close the PipedOutputStream here because we're done writing data
// once this thread has completed its run
StreamHelper.close(out);
}
}).start();
} catch (IOException e1) {
LOGGER.error("Failed to create HTML", e1);
return Optional.empty();
}
return Optional.of(in);
}
private void initTemplates(Language lang) throws TransformerConfigurationException {
if (mXsltXRTemplate == null) {
mXsltXRTemplate = mFactory.newTemplates(
new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/cii-xr.xsl")));
}
if (mXsltHTMLTemplate == null) {
mXsltHTMLTemplate = mFactory.newTemplates(new StreamSource(
CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/xrechnung-html." + lang.name().toLowerCase() + ".xsl")));
}
if (mXsltZF1HTMLTemplate == null) {
mXsltZF1HTMLTemplate = mFactory.newTemplates(new StreamSource(
CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/ZUGFeRD_1p0_c1p0_s1p0.xslt")));
}
} }
protected String toFOP(String xmlFilename) protected String toFOP(String xmlFilename)
throws FileNotFoundException, TransformerException { throws IOException, TransformerException {
FileInputStream fis = new FileInputStream(xmlFilename); FileInputStream fis = new FileInputStream(xmlFilename);
EStandard theStandard = findOutStandardFromRootNode(fis); EStandard theStandard = findOutStandardFromRootNode(fis);
@@ -253,8 +218,8 @@ public class ZUGFeRDVisualizer {
} }
protected String toFOP(InputStream is, EStandard theStandard) protected String toFOP(InputStream is, EStandard theStandard)
throws FileNotFoundException, TransformerException { throws TransformerException, IOException {
try { try {
if (mXsltPDFTemplate == null) { if (mXsltPDFTemplate == null) {
mXsltPDFTemplate = mFactory.newTemplates( mXsltPDFTemplate = mFactory.newTemplates(
@@ -265,7 +230,6 @@ public class ZUGFeRDVisualizer {
} }
ByteArrayOutputStream iaos = new ByteArrayOutputStream(); ByteArrayOutputStream iaos = new ByteArrayOutputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//zf2 or fx //zf2 or fx
if (theStandard == EStandard.facturx) { if (theStandard == EStandard.facturx) {
@@ -277,33 +241,11 @@ public class ZUGFeRDVisualizer {
} }
PipedInputStream in = new PipedInputStream(); Optional<InputStream> in = copyStream(iaos);
PipedOutputStream out; ByteArrayOutputStream baos = new ByteArrayOutputStream();
try { if (in.isPresent()) {
out = new PipedOutputStream(in); applyXSLTToPDF(in.get(), baos);
new Thread(new Runnable() {
public void run() {
try {
// write the original OutputStream to the PipedOutputStream
// note that in order for the below method to work, you need
// to ensure that the data has finished writing to the
// ByteArrayOutputStream
iaos.writeTo(out);
} catch (IOException e) {
LOGGER.error("Failed to write to stream", e);
} finally {
// close the PipedOutputStream here because we're done writing data
// once this thread has completed its run
StreamHelper.close(out);
}
}
}).start();
applyXSLTToPDF(in, baos);
} catch (IOException e1) {
LOGGER.error("Failed to create PDF", e1);
} }
return baos.toString(StandardCharsets.UTF_8); return baos.toString(StandardCharsets.UTF_8);
} }
@@ -319,7 +261,7 @@ public class ZUGFeRDVisualizer {
*/ */
try { try {
result = this.toFOP(XMLinputFile.getAbsolutePath()); result = this.toFOP(XMLinputFile.getAbsolutePath());
} catch (FileNotFoundException | TransformerException e) { } catch (TransformerException | IOException e) {
LOGGER.error("Failed to apply FOP", e); LOGGER.error("Failed to apply FOP", e);
} }
DefaultConfigurationBuilder cfgBuilder = new DefaultConfigurationBuilder(); DefaultConfigurationBuilder cfgBuilder = new DefaultConfigurationBuilder();
@@ -373,7 +315,7 @@ public class ZUGFeRDVisualizer {
} }
} }
protected void applyZF2XSLT(final InputStream xmlFile, final OutputStream HTMLOutstream) protected void applyZF2XSLT(final InputStream xmlFile, final OutputStream htmlOutStream)
throws TransformerException { throws TransformerException {
if (mXsltXRTemplate == null) { if (mXsltXRTemplate == null) {
mXsltXRTemplate = mFactory.newTemplates( mXsltXRTemplate = mFactory.newTemplates(
@@ -382,10 +324,10 @@ public class ZUGFeRDVisualizer {
} }
Transformer transformer = mXsltXRTemplate.newTransformer(); Transformer transformer = mXsltXRTemplate.newTransformer();
transformer.transform(new StreamSource(xmlFile), new StreamResult(HTMLOutstream)); transformer.transform(new StreamSource(xmlFile), new StreamResult(htmlOutStream));
} }
protected void applyCIO2XSLT(final InputStream xmlFile, final OutputStream HTMLOutstream) protected void applyCIO2XSLT(final InputStream xmlFile, final OutputStream htmlOutstream)
throws TransformerException { throws TransformerException {
if (mXsltCIOTemplate == null) { if (mXsltCIOTemplate == null) {
mXsltCIOTemplate = mFactory.newTemplates( mXsltCIOTemplate = mFactory.newTemplates(
@@ -393,10 +335,10 @@ public class ZUGFeRDVisualizer {
} }
Transformer transformer = mXsltCIOTemplate.newTransformer(); Transformer transformer = mXsltCIOTemplate.newTransformer();
transformer.transform(new StreamSource(xmlFile), new StreamResult(HTMLOutstream)); transformer.transform(new StreamSource(xmlFile), new StreamResult(htmlOutstream));
} }
protected void applyUBL2XSLT(final InputStream xmlFile, final OutputStream HTMLOutstream) protected void applyUBL2XSLT(final InputStream xmlFile, final OutputStream htmlOutStream)
throws TransformerException { throws TransformerException {
if (mXsltUBLTemplate == null) { if (mXsltUBLTemplate == null) {
mXsltUBLTemplate = mFactory.newTemplates( mXsltUBLTemplate = mFactory.newTemplates(
@@ -404,10 +346,10 @@ public class ZUGFeRDVisualizer {
} }
Transformer transformer = mXsltUBLTemplate.newTransformer(); Transformer transformer = mXsltUBLTemplate.newTransformer();
transformer.transform(new StreamSource(xmlFile), new StreamResult(HTMLOutstream)); transformer.transform(new StreamSource(xmlFile), new StreamResult(htmlOutStream));
} }
protected void applyUBLCreditNote2XSLT(final InputStream xmlFile, final OutputStream HTMLOutstream) protected void applyUBLCreditNote2XSLT(final InputStream xmlFile, final OutputStream htmlOutStream)
throws TransformerException { throws TransformerException {
if (mXsltUBLTemplate == null) { if (mXsltUBLTemplate == null) {
mXsltUBLTemplate = mFactory.newTemplates( mXsltUBLTemplate = mFactory.newTemplates(
@@ -415,28 +357,30 @@ public class ZUGFeRDVisualizer {
} }
Transformer transformer = mXsltUBLTemplate.newTransformer(); Transformer transformer = mXsltUBLTemplate.newTransformer();
transformer.transform(new StreamSource(xmlFile), new StreamResult(HTMLOutstream)); transformer.transform(new StreamSource(xmlFile), new StreamResult(htmlOutStream));
} }
protected void applyZF1XSLT(final InputStream xmlFile, final OutputStream HTMLOutstream) protected void applyZF1XSLT(final InputStream xmlFile, final OutputStream htmlOutStream)
throws TransformerException { throws TransformerException {
Transformer transformer = mXsltZF1HTMLTemplate.newTransformer(); Transformer transformer = mXsltZF1HTMLTemplate.newTransformer();
transformer.transform(new StreamSource(xmlFile), new StreamResult(HTMLOutstream)); transformer.transform(new StreamSource(xmlFile), new StreamResult(htmlOutStream));
} }
protected void applyXSLTToHTML(final InputStream xmlFile, final OutputStream HTMLOutstream) protected void applyXSLTToHTML(final InputStream xmlFile, final OutputStream htmlOutStream)
throws TransformerException { throws TransformerException, IOException {
Transformer transformer = mXsltHTMLTemplate.newTransformer(); Transformer transformer = mXsltHTMLTemplate.newTransformer();
transformer.transform(new StreamSource(xmlFile), new StreamResult(HTMLOutstream)); transformer.transform(new StreamSource(xmlFile), new StreamResult(htmlOutStream));
xmlFile.close();
} }
protected void applyXSLTToPDF(final InputStream xmlFile, final OutputStream PDFOutstream) protected void applyXSLTToPDF(final InputStream xmlFile, final OutputStream PDFOutstream)
throws TransformerException { throws TransformerException, IOException {
Transformer transformer = mXsltPDFTemplate.newTransformer(); Transformer transformer = mXsltPDFTemplate.newTransformer();
transformer.transform(new StreamSource(xmlFile), new StreamResult(PDFOutstream)); transformer.transform(new StreamSource(xmlFile), new StreamResult(PDFOutstream));
xmlFile.close();
} }
private static class ClasspathResourceURIResolver implements URIResolver { private static class ClasspathResourceURIResolver implements URIResolver {
@@ -445,7 +389,7 @@ public class ZUGFeRDVisualizer {
} }
@Override @Override
public Source resolve(String href, String base) throws TransformerException { public Source resolve(String href, String base) {
return new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/" + href)); return new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/" + href));
} }
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,135 +1,135 @@
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:fo="http://www.w3.org/1999/XSL/Format" <xsl:stylesheet xmlns:axf="http://www.antennahouse.com/names/XSL/Extensions"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:axf="http://www.antennahouse.com/names/XSL/Extensions" xmlns:pdf="http://xmlgraphics.apache.org/fop/extensions/pdf"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="2.0"> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
<!-- ========================================================================== version="2.0">
== Imports <!-- Imports -->
=========================================================================== -->
<xsl:import href="common-xr.xsl"/> <xsl:import href="common-xr.xsl"/>
<xsl:import href="xr-pdf/lib/konstanten.xsl"/> <xsl:import href="xr-pdf/lib/konstanten.xsl"/>
<!--
<!-- FO engine used can be specified. Specific extensions will be then enabled. FO engine used can be specified.
Supported values are: Specific extensions will be then enabled.
axf - Antenna House XSL Formatter Supported values are:
fop - Apache FOP axf - Antenna House XSL Formatter
--> fop - Apache FOP
-->
<xsl:param name="foengine"/> <xsl:param name="foengine"/>
<xsl:param name="axf.extensions"
<xsl:param name="axf.extensions" select="if ($foengine eq 'axf') then true() else false()"/> select="if ($foengine eq 'axf') then true() else false()"/>
<xsl:param name="fop.extensions" select="if ($foengine eq 'fop') then true() else false()"/> <xsl:param name="fop.extensions"
select="if ($foengine eq 'fop') then true() else false()"/>
<xsl:variable name="xml_result_color"> <xsl:variable name="xml_result_color">
<xsl:if test="/validation/xml/summary/@status = 'valid' "> <xsl:if test="/validation/xml/summary/@status = 'valid'">
<xsl:text>green</xsl:text> <xsl:text>green</xsl:text>
</xsl:if> </xsl:if>
<xsl:if test="/validation/xml/summary/@status = 'invalid' "> <xsl:if test="/validation/xml/summary/@status = 'invalid'">
<xsl:text>red</xsl:text> <xsl:text>red</xsl:text>
</xsl:if> </xsl:if>
</xsl:variable> </xsl:variable>
<xsl:variable name="pdf_result_color"> <xsl:variable name="pdf_result_color">
<xsl:if test="/validation/pdf/summary/@status = 'valid' "> <xsl:if test="/validation/pdf/summary/@status = 'valid'">
<xsl:text>green</xsl:text> <xsl:text>green</xsl:text>
</xsl:if> </xsl:if>
<xsl:if test="/validation/pdf/summary/@status = 'invalid' "> <xsl:if test="/validation/pdf/summary/@status = 'invalid'">
<xsl:text>red</xsl:text> <xsl:text>red</xsl:text>
</xsl:if> </xsl:if>
</xsl:variable> </xsl:variable>
<xsl:variable name="pdf_result_text"> <xsl:variable name="pdf_result_text">
<xsl:if test="/validation/xml/summary/@status = 'valid' "> <xsl:if test="/validation/xml/summary/@status = 'valid'">
<xsl:text>Das ZUGFeRD-PDF ist valide.</xsl:text> <xsl:text>Das ZUGFeRD-PDF ist valide.</xsl:text>
</xsl:if> </xsl:if>
<xsl:if test="/validation/xml/summary/@status = 'invalid' "> <xsl:if test="/validation/xml/summary/@status = 'invalid'">
<xsl:text>Das ZUGFeRD-PDF ist nicht valide.</xsl:text> <xsl:text>Das ZUGFeRD-PDF ist nicht valide.</xsl:text>
</xsl:if> </xsl:if>
</xsl:variable> </xsl:variable>
<xsl:variable name="result_text"> <xsl:variable name="result_text">
<xsl:if test="/validation/xml/summary/@status = 'valid' "> <xsl:if test="/validation/xml/summary/@status = 'valid'">
<xsl:text>Es wird empfohlen das Dokument anzunehmen und weiter zu verarbeiten.</xsl:text> <xsl:text>Es wird empfohlen, das Dokument anzunehmen und weiterzuverarbeiten.</xsl:text>
</xsl:if> </xsl:if>
<xsl:if test="/validation/xml/summary/@status = 'invalid' "> <xsl:if test="/validation/xml/summary/@status = 'invalid'">
<xsl:text>Es wird empfohlen das Dokument zurückzuweisen.</xsl:text> <xsl:text>Es wird empfohlen, das Dokument zurückzuweisen.</xsl:text>
</xsl:if> </xsl:if>
</xsl:variable> </xsl:variable>
<xsl:template match="validation"> <xsl:template match="validation">
<fo:root xmlns:pdf="http://xmlgraphics.apache.org/fop/extensions/pdf" <fo:root language="{$lang}"
language="{$lang}" font-family="{$fontSans}"> font-family="{$fontSans}">
<fo:layout-master-set> <fo:layout-master-set>
<fo:simple-page-master master-name="DIN-A4" page-height="297mm" page-width="210mm"> <fo:simple-page-master master-name="DIN-A4"
<fo:region-body region-name="body" margin="20mm 10mm 20mm 20mm" /> page-height="297mm"
page-width="210mm">
<fo:region-body region-name="body"
margin="20mm 10mm 20mm 20mm"/>
</fo:simple-page-master> </fo:simple-page-master>
</fo:layout-master-set> </fo:layout-master-set>
<fo:page-sequence master-reference="DIN-A4"> <fo:page-sequence master-reference="DIN-A4">
<fo:flow flow-name="body"> <fo:flow flow-name="body">
<fo:block font-size="24px" font-weight="bold"> <fo:block font-size="24px"
Prüfbericht font-weight="bold">
<xsl:text>Prüfbericht</xsl:text>
</fo:block> </fo:block>
<xsl:call-template name="SubHeader"> <xsl:call-template name="SubHeader">
<xsl:with-param name="text" select='"Angaben zum geprüften Dokument"' /> <xsl:with-param name="text"
<xsl:with-param name="color" select='"black"' /> select="&#34;Angaben zum geprüften Dokument&#34;"/>
<xsl:with-param name="color"
select="&#34;black&#34;"/>
</xsl:call-template> </xsl:call-template>
<fo:block> <fo:block>
<fo:block text-align="justify"> <fo:block text-align="justify">
<fo:float float="right"> <fo:float float="right">
<fo:block > <fo:block>
<xsl:value-of select="/validation/@filename" /> <xsl:value-of select="/validation/@filename"/>
</fo:block> </fo:block>
</fo:float> </fo:float>
Referenz: <xsl:text>Referenz:</xsl:text>
</fo:block> </fo:block>
</fo:block> </fo:block>
<fo:block> <fo:block>
<fo:block text-align="justify"> <fo:block text-align="justify">
<fo:float float="right"> <fo:float float="right">
<fo:block > <fo:block>
<xsl:value-of select="/validation/@datetime" /> <xsl:value-of select="/validation/@datetime"/>
</fo:block> </fo:block>
</fo:float> </fo:float>
Zeitpunkt der Prüfung: <xsl:text>Zeitpunkt der Prüfung:</xsl:text>
</fo:block> </fo:block>
</fo:block> </fo:block>
<fo:block> <fo:block>
<fo:block text-align="justify"> <fo:block text-align="justify">
<fo:float float="right"> <fo:float float="right">
<fo:block > <fo:block>
<xsl:value-of select="/validation/xml/info/profile" /> <xsl:value-of select="/validation/xml/info/profile"/>
</fo:block> </fo:block>
</fo:float> </fo:float>
Erkannter Dokumenttyp: <xsl:text>Erkannter Dokumenttyp:</xsl:text>
</fo:block> </fo:block>
</fo:block> </fo:block>
<xsl:apply-templates select="/validation/pdf"/>
<xsl:apply-templates select="/validation/pdf" /> <!--
<xsl:call-template name="SubHeader">
<!--<xsl:call-template name="SubHeader" > <xsl:with-param name="text"
<xsl:with-param name="text" select='"Konformitätsprüfung:"' /> select='"Konformitätsprüfung:"'/>
<xsl:with-param name="color" select='"black"' /> <xsl:with-param name="color"
</xsl:call-template>--> select='"black"'/>
</xsl:call-template>
<xsl:call-template name="SubHeader" > -->
<xsl:with-param name="text" select="concat('Bewertung: ', $result_text)" /> <xsl:call-template name="SubHeader">
<xsl:with-param name="color" select="$xml_result_color" /> <xsl:with-param name="text"
select="concat('Bewertung: ', $result_text)"/>
<xsl:with-param name="color"
select="$xml_result_color"/>
</xsl:call-template> </xsl:call-template>
<fo:block>Validierungsergebnisse im Detail:</fo:block> <fo:block>Validierungsergebnisse im Detail:</fo:block>
<fo:table> <fo:table>
<fo:table-column border-style="solid" /> <fo:table-column border-style="solid"/>
<fo:table-column border-style="solid" /> <fo:table-column border-style="solid"/>
<fo:table-column border-style="solid" /> <fo:table-column border-style="solid"/>
<fo:table-column column-width="70%" border-style="solid" /> <fo:table-column column-width="70%"
border-style="solid"/>
<fo:table-header> <fo:table-header>
<fo:table-row background-color="#E0E0E0" font-weight="bold"> <fo:table-row background-color="#E0E0E0"
font-weight="bold">
<fo:table-cell> <fo:table-cell>
<fo:block>Type</fo:block> <fo:block>Type</fo:block>
</fo:table-cell> </fo:table-cell>
@@ -145,38 +145,50 @@
</fo:table-row> </fo:table-row>
</fo:table-header> </fo:table-header>
<fo:table-body> <fo:table-body>
<xsl:apply-templates select="/validation/xml/messages" /> <xsl:choose>
<xsl:when test="/validation/xml/messages">
<xsl:apply-templates select="/validation/xml/messages"/>
</xsl:when>
<xsl:otherwise>
<fo:table-row font-size="12px"
border-style="solid">
<fo:table-cell number-columns-spanned="4">
<fo:block text-align="center">Es gibt weder Hinweise noch Fehler.</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:otherwise>
</xsl:choose>
</fo:table-body> </fo:table-body>
</fo:table> </fo:table>
</fo:flow> </fo:flow>
</fo:page-sequence> </fo:page-sequence>
</fo:root> </fo:root>
</xsl:template> </xsl:template>
<xsl:template match="notice|error"> <xsl:template match="notice|error">
<fo:table-row font-size="12px" border-style="solid"> <fo:table-row font-size="12px"
border-style="solid">
<fo:table-cell number-rows-spanned="2"> <fo:table-cell number-rows-spanned="2">
<fo:block> <fo:block>
<xsl:value-of select="@type" /> <xsl:value-of select="@type"/>
</fo:block> </fo:block>
</fo:table-cell> </fo:table-cell>
<fo:table-cell number-rows-spanned="2"> <fo:table-cell number-rows-spanned="2">
<fo:block> <fo:block>
<xsl:call-template name="SUBID" > <xsl:call-template name="SUBID">
<xsl:with-param name="myparam" select="substring-after(.,' [ID ')" /> <xsl:with-param name="myparam"
select="substring-after(.,' [ID ')"/>
</xsl:call-template> </xsl:call-template>
</fo:block> </fo:block>
</fo:table-cell> </fo:table-cell>
<fo:table-cell number-rows-spanned="2"> <fo:table-cell number-rows-spanned="2">
<fo:block > <fo:block>
<xsl:choose> <xsl:choose>
<xsl:when test="name() = 'error'"> <xsl:when test="name() = 'error'">
<xsl:attribute name="color">red</xsl:attribute> <xsl:attribute name="color">red</xsl:attribute>
Fehler <xsl:text>Fehler</xsl:text>
</xsl:when> </xsl:when>
<xsl:otherwise> <xsl:otherwise>
Hinweis <xsl:text>Hinweis</xsl:text>
</xsl:otherwise> </xsl:otherwise>
</xsl:choose> </xsl:choose>
</fo:block> </fo:block>
@@ -186,42 +198,46 @@
<xsl:if test="name() = 'error'"> <xsl:if test="name() = 'error'">
<xsl:attribute name="color">red</xsl:attribute> <xsl:attribute name="color">red</xsl:attribute>
</xsl:if> </xsl:if>
<xsl:value-of select="substring-before(.,' [ID')" /> <xsl:value-of select="substring-before(.,' [ID')"/>
</fo:block> </fo:block>
</fo:table-cell> </fo:table-cell>
</fo:table-row> </fo:table-row>
<fo:table-row font-size="12px" border-style="solid"> <fo:table-row font-size="10px"
border-style="solid">
<fo:table-cell> <fo:table-cell>
<fo:block> <fo:block>
<xsl:if test="name() = 'error'"> <xsl:if test="name() = 'error'">
<xsl:attribute name="color">red</xsl:attribute> <xsl:attribute name="color">red</xsl:attribute>
</xsl:if> </xsl:if>
Pfad: <xsl:value-of select="concat('Pfad: ', @location)"/>
<xsl:value-of select="@location" />
</fo:block> </fo:block>
</fo:table-cell> </fo:table-cell>
</fo:table-row> </fo:table-row>
</xsl:template> </xsl:template>
<xsl:template match="pdf"> <xsl:template match="pdf">
<xsl:call-template name="SubHeader" > <xsl:call-template name="SubHeader">
<xsl:with-param name="text" select="concat('ZUGFeRD-PDF: ', $pdf_result_text)" /> <xsl:with-param name="text"
<xsl:with-param name="color" select='"black"' /> select="concat('ZUGFeRD-PDF: ', $pdf_result_text)"/>
<xsl:with-param name="color"
select="&#34;black&#34;"/>
</xsl:call-template> </xsl:call-template>
</xsl:template> </xsl:template>
<xsl:template name="SubHeader"> <xsl:template name="SubHeader">
<xsl:param name="text" /> <xsl:param name="text"/>
<xsl:param name="color" /> <xsl:param name="color"/>
<fo:block color="{$color}" background-color="#E0E0E0" margin-bottom="10px" padding="3px" font-weight="bold" margin-top="10px"> <fo:block color="{$color}"
<xsl:value-of select="$text" /> background-color="#E0E0E0"
margin-bottom="10px"
padding="3px"
font-weight="bold"
margin-top="10px">
<xsl:value-of select="$text"/>
</fo:block> </fo:block>
</xsl:template> </xsl:template>
<xsl:template name="SUBID"> <xsl:template name="SUBID">
<xsl:param name="myparam" /> <xsl:param name="myparam"/>
<xsl:variable name="myparam.end" select="substring-before($myparam, ']')"/> <xsl:variable name="myparam.end"
select="substring-before($myparam, ']')"/>
<xsl:value-of select="$myparam.end"/> <xsl:value-of select="$myparam.end"/>
</xsl:template> </xsl:template>
</xsl:stylesheet> </xsl:stylesheet>

View File

@@ -1,227 +1,229 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:variable name="i18n.bt10" select="'Leitweg-ID'"/> <xsl:variable name="i18n.bt10" select="'Leitweg-ID'"/>
<xsl:variable name="i18n.bt44" select="'Name'"/> <xsl:variable name="i18n.bt44" select="'Name'"/>
<xsl:variable name="i18n.title" select="'XRechnung'"/> <xsl:variable name="i18n.title" select="'XRechnung'"/>
<xsl:variable name="i18n.overview" select="'Übersicht'"/> <xsl:variable name="i18n.overview" select="'Übersicht'"/>
<xsl:variable name="i18n.items" select="'Positionen'"/> <xsl:variable name="i18n.items" select="'Positionen'"/>
<xsl:variable name="i18n.information" select="'Informationen'"/> <xsl:variable name="i18n.information" select="'Informationen'"/>
<xsl:variable name="i18n.attachments" select="'Anhänge'"/> <xsl:variable name="i18n.attachments" select="'Anhänge'"/>
<xsl:variable name="i18n.history" select="'Bearbeitungshistorie'"/> <xsl:variable name="i18n.history" select="'Bearbeitungshistorie'"/>
<xsl:variable name="i18n.disclaimer" select="'Wir übernehmen keine Haftung für die Richtigkeit der Daten.'"/> <xsl:variable name="i18n.disclaimer" select="'Wir übernehmen keine Haftung für die Richtigkeit der Daten.'"/>
<xsl:variable name="i18n.recipientInfo" select="'Informationen zum Käufer'"/> <xsl:variable name="i18n.recipientInfo" select="'Informationen zum Käufer'"/>
<xsl:variable name="i18n.bt50" select="'Straße / Haus-Nr.'"/> <xsl:variable name="i18n.dateOf" select="' vom '"/>
<xsl:variable name="i18n.bt51" select="'Postfach'"/> <xsl:variable name="i18n.bt50" select="'Straße / Haus-Nr.'"/>
<xsl:variable name="i18n.bt163" select="'Adresszusatz'"/> <xsl:variable name="i18n.bt51" select="'Postfach'"/>
<xsl:variable name="i18n.bt53" select="'PLZ'"/> <xsl:variable name="i18n.bt163" select="'Adresszusatz'"/>
<xsl:variable name="i18n.bt52" select="'Ort'"/> <xsl:variable name="i18n.bt53" select="'PLZ'"/>
<xsl:variable name="i18n.bt54" select="'Bundesland'"/> <xsl:variable name="i18n.bt52" select="'Ort'"/>
<xsl:variable name="i18n.bt55" select="'Land'"/> <xsl:variable name="i18n.bt54" select="'Bundesland'"/>
<xsl:variable name="i18n.bt46" select="'Kennung / Kunden-Nr.'"/> <xsl:variable name="i18n.bt55" select="'Land'"/>
<xsl:variable name="i18n.bt46-id" select="'Schema der Kennung'"/> <xsl:variable name="i18n.bt46" select="'Kennung / Kunden-Nr.'"/>
<xsl:variable name="i18n.bt56" select="'Name'"/> <xsl:variable name="i18n.bt46-id" select="'Schema der Kennung'"/>
<xsl:variable name="i18n.bt57" select="'Telefon'"/> <xsl:variable name="i18n.bt56" select="'Name'"/>
<xsl:variable name="i18n.bt58" select="'E-Mail-Adresse'"/> <xsl:variable name="i18n.bt57" select="'Telefon'"/>
<xsl:variable name="i18n.bt27" select="'Firmenname'"/> <xsl:variable name="i18n.bt58" select="'E-Mail-Adresse'"/>
<xsl:variable name="i18n.bt35" select="'Straße / Haus-Nr.'"/> <xsl:variable name="i18n.bt27" select="'Firmenname'"/>
<xsl:variable name="i18n.bt36" select="'Postfach'"/> <xsl:variable name="i18n.bt35" select="'Straße / Haus-Nr.'"/>
<xsl:variable name="i18n.bt162" select="'Adresszusatz'"/> <xsl:variable name="i18n.bt36" select="'Postfach'"/>
<xsl:variable name="i18n.bt38" select="'PLZ'"/> <xsl:variable name="i18n.bt162" select="'Adresszusatz'"/>
<xsl:variable name="i18n.bt37" select="'Ort'"/> <xsl:variable name="i18n.bt38" select="'PLZ'"/>
<xsl:variable name="i18n.bt39" select="'Bundesland'"/> <xsl:variable name="i18n.bt37" select="'Ort'"/>
<xsl:variable name="i18n.bt40" select="'ndercode'"/> <xsl:variable name="i18n.bt39" select="'Bundesland'"/>
<xsl:variable name="i18n.bt29" select="'Kennung'"/> <xsl:variable name="i18n.bt40" select="'Ländercode'"/>
<xsl:variable name="i18n.bt29-id" select="'Schema der Kennung'"/> <xsl:variable name="i18n.bt29" select="'Kennung'"/>
<xsl:variable name="i18n.bt41" select="'Name'"/> <xsl:variable name="i18n.bt29-id" select="'Schema der Kennung'"/>
<xsl:variable name="i18n.bt42" select="'Telefon'"/> <xsl:variable name="i18n.bt41" select="'Name'"/>
<xsl:variable name="i18n.bt43" select="'E-Mail-Adresse'"/> <xsl:variable name="i18n.bt42" select="'Telefon'"/>
<xsl:variable name="i18n.bt1" select="'Rechnungsnummer'"/> <xsl:variable name="i18n.bt43" select="'E-Mail-Adresse'"/>
<xsl:variable name="i18n.bt2" select="'Rechnungsdatum'"/> <xsl:variable name="i18n.bt1" select="'Rechnungsnummer'"/>
<xsl:variable name="i18n.details" select="'Rechnungsdaten'"/> <xsl:variable name="i18n.bt2" select="'Rechnungsdatum'"/>
<xsl:variable name="i18n.period" select="'Abrechnungszeitraum'"/> <xsl:variable name="i18n.details" select="'Rechnungsdaten'"/>
<xsl:variable name="i18n.bt3" select="'Rechnungsart'"/> <xsl:variable name="i18n.period" select="'Abrechnungszeitraum'"/>
<xsl:variable name="i18n.bt5" select="'Währung'"/> <xsl:variable name="i18n.bt3" select="'Rechnungsart'"/>
<xsl:variable name="i18n.bt73" select="'von'"/> <xsl:variable name="i18n.bt5" select="'Währung'"/>
<xsl:variable name="i18n.bt74" select="'bis'"/> <xsl:variable name="i18n.bt73" select="'von'"/>
<xsl:variable name="i18n.bt11" select="'Projektnummer'"/> <xsl:variable name="i18n.bt74" select="'bis'"/>
<xsl:variable name="i18n.bt12" select="'Vertragsnummer'"/> <xsl:variable name="i18n.bt11" select="'Projektnummer'"/>
<xsl:variable name="i18n.bt13" select="'Bestellnummer'"/> <xsl:variable name="i18n.bt12" select="'Vertragsnummer'"/>
<xsl:variable name="i18n.bt14" select="'Auftragsnummer'"/> <xsl:variable name="i18n.bt13" select="'Bestellnummer'"/>
<xsl:variable name="i18n.bt25" select="'Rechnungsnummer'"/> <xsl:variable name="i18n.bt14" select="'Auftragsnummer'"/>
<xsl:variable name="i18n.bt26" select="'Rechnungsdatum'"/> <xsl:variable name="i18n.bt25" select="'Rechnungsnummer'"/>
<xsl:variable name="i18n.bg22" select="'Gesamtbeträge der Rechnung'"/> <xsl:variable name="i18n.bt26" select="'Rechnungsdatum'"/>
<xsl:variable name="i18n.bt106" select="'Summe aller Positionen'"/> <xsl:variable name="i18n.bg22" select="'Gesamtbeträge der Rechnung'"/>
<xsl:variable name="i18n.bt107" select="'Summe Nachlässe'"/> <xsl:variable name="i18n.bt106" select="'Summe aller Positionen'"/>
<xsl:variable name="i18n.bt108" select="'Summe Zuschläge'"/> <xsl:variable name="i18n.bt107" select="'Summe Nachlässe'"/>
<xsl:variable name="i18n.bt109" select="'Gesamtsumme'"/> <xsl:variable name="i18n.bt108" select="'Summe Zuschläge'"/>
<xsl:variable name="i18n.bt110" select="'Summe Umsatzsteuer'"/> <xsl:variable name="i18n.bt109" select="'Gesamtsumme'"/>
<xsl:variable name="i18n.bt111" select="'Summe Umsatzsteuer in Abrechnungswährung'"/> <xsl:variable name="i18n.bt110" select="'Summe Umsatzsteuer'"/>
<xsl:variable name="i18n.bt112" select="'Gesamtsumme'"/> <xsl:variable name="i18n.bt111" select="'Summe Umsatzsteuer in Abrechnungswährung'"/>
<xsl:variable name="i18n.bt113" select="'Gezahlter Betrag'"/> <xsl:variable name="i18n.bt112" select="'Gesamtsumme'"/>
<xsl:variable name="i18n.bt114" select="'Rundungsbetrag'"/> <xsl:variable name="i18n.bt113" select="'Gezahlter Betrag'"/>
<xsl:variable name="i18n.bt115" select="'Fälliger Betrag'"/> <xsl:variable name="i18n.bt114" select="'Rundungsbetrag'"/>
<xsl:variable name="i18n.bg23" select="'Aufschlüsselung der Umsatzsteuer auf Ebene der Rechnung'"/> <xsl:variable name="i18n.bt115" select="'Fälliger Betrag'"/>
<xsl:variable name="i18n.bt118" select="'Umsatzsteuerkategorie'"/> <xsl:variable name="i18n.bg23" select="'Aufschlüsselung der Umsatzsteuer auf Ebene der Rechnung'"/>
<xsl:variable name="i18n.bt116" select="'Gesamtsumme'"/> <xsl:variable name="i18n.bt118" select="'Umsatzsteuerkategorie'"/>
<xsl:variable name="i18n.bt119" select="'Umsatzsteuersatz'"/> <xsl:variable name="i18n.bt116" select="'Gesamtsumme'"/>
<xsl:variable name="i18n.bt117" select="'Umsatzsteuerbetrag'"/> <xsl:variable name="i18n.bt119" select="'Umsatzsteuersatz'"/>
<xsl:variable name="i18n.bt120" select="'Befreiungsgrund'"/> <xsl:variable name="i18n.bt117" select="'Umsatzsteuerbetrag'"/>
<xsl:variable name="i18n.bt121" select="'Kennung für den Befreiungsgrund'"/> <xsl:variable name="i18n.bt120" select="'Befreiungsgrund'"/>
<xsl:variable name="i18n.bg20" select="'Nachlass auf Ebene der Rechnung'"/> <xsl:variable name="i18n.bt121" select="'Kennung für den Befreiungsgrund'"/>
<xsl:variable name="i18n.bt95" select="'Umsatzsteuerkategorie des Nachlasses'"/> <xsl:variable name="i18n.bg20" select="'Nachlass auf Ebene der Rechnung'"/>
<xsl:variable name="i18n.bt93" select="'Grundbetrag'"/> <xsl:variable name="i18n.bt95" select="'Umsatzsteuerkategorie des Nachlasses'"/>
<xsl:variable name="i18n.bt94" select="'Prozentsatz'"/> <xsl:variable name="i18n.bt93" select="'Grundbetrag'"/>
<xsl:variable name="i18n.bt92" select="'Nachlass'"/> <xsl:variable name="i18n.bt94" select="'Prozentsatz'"/>
<xsl:variable name="i18n.bt96" select="'Umsatzsteuersatz des Nachlasses'"/> <xsl:variable name="i18n.bt92" select="'Nachlass'"/>
<xsl:variable name="i18n.bt97" select="'Grund für den Nachlass'"/> <xsl:variable name="i18n.bt96" select="'Umsatzsteuersatz des Nachlasses'"/>
<xsl:variable name="i18n.bt98" select="'Document level allowance reason code'"/> <xsl:variable name="i18n.bt97" select="'Grund für den Nachlass'"/>
<xsl:variable name="i18n.bg21" select="'Zuschlag auf Ebene der Rechnung'"/> <xsl:variable name="i18n.bt98" select="'Document level allowance reason code'"/>
<xsl:variable name="i18n.bt102" select="'Umsatzsteuerkategorie des Zuschlages'"/> <xsl:variable name="i18n.bg21" select="'Zuschlag auf Ebene der Rechnung'"/>
<xsl:variable name="i18n.bt100" select="'Grundbetrag'"/> <xsl:variable name="i18n.bt102" select="'Umsatzsteuerkategorie des Zuschlages'"/>
<xsl:variable name="i18n.bt101" select="'Prozentsatz'"/> <xsl:variable name="i18n.bt100" select="'Grundbetrag'"/>
<xsl:variable name="i18n.bt99" select="'Zuschlag'"/> <xsl:variable name="i18n.bt101" select="'Prozentsatz'"/>
<xsl:variable name="i18n.bt103" select="'Umsatzsteuersatz des Zuschlages'"/> <xsl:variable name="i18n.bt99" select="'Zuschlag'"/>
<xsl:variable name="i18n.bt104" select="'Grund für den Zuschlag'"/> <xsl:variable name="i18n.bt103" select="'Umsatzsteuersatz des Zuschlages'"/>
<xsl:variable name="i18n.bt105" select="'Document level charge reason code'"/> <xsl:variable name="i18n.bt104" select="'Grund für den Zuschlag'"/>
<xsl:variable name="i18n.bgx42" select="'Versandkosten'"/> <xsl:variable name="i18n.bt105" select="'Document level charge reason code'"/>
<xsl:variable name="i18n.btx274" select="'Umsatzsteuerkategorie der Versandkosten'"/> <xsl:variable name="i18n.bgx42" select="'Versandkosten'"/>
<xsl:variable name="i18n.btx272" select="'Betrag'"/> <xsl:variable name="i18n.btx274" select="'Umsatzsteuerkategorie der Versandkosten'"/>
<xsl:variable name="i18n.btx273" select="'Umsatzsteuersatz der Versandkosten'"/> <xsl:variable name="i18n.btx272" select="'Betrag'"/>
<xsl:variable name="i18n.btx271" select="'Versandkostenbeschreibung'"/> <xsl:variable name="i18n.btx273" select="'Umsatzsteuersatz der Versandkosten'"/>
<xsl:variable name="i18n.bt20" select="'Skonto; weitere Zahlungsbed.'"/> <xsl:variable name="i18n.btx271" select="'Versandkostenbeschreibung'"/>
<xsl:variable name="i18n.bt9" select="'Fälligkeitsdatum'"/> <xsl:variable name="i18n.bt20" select="'Skonto; weitere Zahlungsbed.'"/>
<xsl:variable name="i18n.bt81" select="'Code für das Zahlungsmittel'"/> <xsl:variable name="i18n.bt9" select="'Fälligkeitsdatum'"/>
<xsl:variable name="i18n.bt82" select="'Zahlungsmittel'"/> <xsl:variable name="i18n.bt81" select="'Code für das Zahlungsmittel'"/>
<xsl:variable name="i18n.bt83" select="'Verwendungszweck'"/> <xsl:variable name="i18n.bt82" select="'Zahlungsmittel'"/>
<xsl:variable name="i18n.bg18" select="'Karteninformation'"/> <xsl:variable name="i18n.bt83" select="'Verwendungszweck'"/>
<xsl:variable name="i18n.bt87" select="'Kartennummer'"/> <xsl:variable name="i18n.bg18" select="'Karteninformation'"/>
<xsl:variable name="i18n.bt88" select="'Karteninhaber'"/> <xsl:variable name="i18n.bt87" select="'Kartennummer'"/>
<xsl:variable name="i18n.bg19" select="'Lastschrift'"/> <xsl:variable name="i18n.bt88" select="'Karteninhaber'"/>
<xsl:variable name="i18n.bt89" select="'Mandatsreferenznr.'"/> <xsl:variable name="i18n.bg19" select="'Lastschrift'"/>
<xsl:variable name="i18n.bt91" select="'IBAN'"/> <xsl:variable name="i18n.bt89" select="'Mandatsreferenznr.'"/>
<xsl:variable name="i18n.bt90" select="'Gläubiger-ID'"/> <xsl:variable name="i18n.bt91" select="'IBAN'"/>
<xsl:variable name="i18n.bg17" select="'Überweisung'"/> <xsl:variable name="i18n.bt90" select="'Gläubiger-ID'"/>
<xsl:variable name="i18n.bt85" select="'Kontoinhaber'"/> <xsl:variable name="i18n.bg17" select="'Überweisung'"/>
<xsl:variable name="i18n.bt84" select="'IBAN'"/> <xsl:variable name="i18n.bt85" select="'Kontoinhaber'"/>
<xsl:variable name="i18n.bt86" select="'BIC'"/> <xsl:variable name="i18n.bt84" select="'IBAN'"/>
<xsl:variable name="i18n.bg1" select="'Bemerkung zur Rechnung'"/> <xsl:variable name="i18n.bt86" select="'BIC'"/>
<xsl:variable name="i18n.bt21" select="'Betreff'"/> <xsl:variable name="i18n.bg1" select="'Bemerkung zur Rechnung'"/>
<xsl:variable name="i18n.bt22" select="'Bemerkung'"/> <xsl:variable name="i18n.bt21" select="'Betreff'"/>
<xsl:variable name="i18n.bt126" select="'Position'"/> <xsl:variable name="i18n.bt22" select="'Bemerkung'"/>
<xsl:variable name="i18n.bt127" select="'Freitext'"/> <xsl:variable name="i18n.bt126" select="'Position'"/>
<xsl:variable name="i18n.bt128" select="'Objektkennung'"/> <xsl:variable name="i18n.bt127" select="'Freitext'"/>
<xsl:variable name="i18n.bt128-id" select="'Schema der Objektkennung'"/> <xsl:variable name="i18n.bt128" select="'Objektkennung'"/>
<xsl:variable name="i18n.bt132" select="'Nummer der Auftragsposition'"/> <xsl:variable name="i18n.bt128-id" select="'Schema der Objektkennung'"/>
<xsl:variable name="i18n.bt133" select="'Kontierungshinweis /Kostenstelle'"/> <xsl:variable name="i18n.bt132" select="'Nummer der Auftragsposition'"/>
<xsl:variable name="i18n.bg26" select="'Abrechnungszeitraum'"/> <xsl:variable name="i18n.bt133" select="'Kontierungshinweis /Kostenstelle'"/>
<xsl:variable name="i18n.bt134" select="'von'"/> <xsl:variable name="i18n.bg26" select="'Abrechnungszeitraum'"/>
<xsl:variable name="i18n.bt135" select="'bis'"/> <xsl:variable name="i18n.bt134" select="'von'"/>
<xsl:variable name="i18n.bg29" select="'Preiseinzelheiten'"/> <xsl:variable name="i18n.bt135" select="'bis'"/>
<xsl:variable name="i18n.bt129" select="'Menge'"/> <xsl:variable name="i18n.bg29" select="'Preiseinzelheiten'"/>
<xsl:variable name="i18n.bt130" select="'Einheit'"/> <xsl:variable name="i18n.bt129" select="'Menge'"/>
<xsl:variable name="i18n.bt146" select="'Preis pro Einheit (netto)'"/> <xsl:variable name="i18n.bt130" select="'Einheit'"/>
<xsl:variable name="i18n.bt131" select="'Gesamtpreis (netto)'"/> <xsl:variable name="i18n.bt146" select="'Preis pro Einheit (netto)'"/>
<xsl:variable name="i18n.bt147" select="'Rabatt (netto)'"/> <xsl:variable name="i18n.bt131" select="'Gesamtpreis (netto)'"/>
<xsl:variable name="i18n.bt148" select="'Listenpreis (netto)'"/> <xsl:variable name="i18n.bt147" select="'Rabatt (netto)'"/>
<xsl:variable name="i18n.bt149" select="'Anzahl der Einheit'"/> <xsl:variable name="i18n.bt148" select="'Listenpreis (netto)'"/>
<xsl:variable name="i18n.bt150" select="'Code der Maßeinheit'"/> <xsl:variable name="i18n.bt149" select="'Anzahl der Einheit'"/>
<xsl:variable name="i18n.bt151" select="'Umsatzsteuer'"/> <xsl:variable name="i18n.bt150" select="'Code der Maßeinheit'"/>
<xsl:variable name="i18n.bt152" select="'Umsatzsteuersatz in %'"/> <xsl:variable name="i18n.bt151" select="'Umsatzsteuer'"/>
<xsl:variable name="i18n.bg27" select="'Nachlässe auf Ebene der Rechnungsposition'"/> <xsl:variable name="i18n.bt152" select="'Umsatzsteuersatz in %'"/>
<xsl:variable name="i18n.bt137" select="'Grundbetrag (netto)'"/> <xsl:variable name="i18n.bg27" select="'Nachlässe auf Ebene der Rechnungsposition'"/>
<xsl:variable name="i18n.bt138" select="'Prozentsatz'"/> <xsl:variable name="i18n.bt137" select="'Grundbetrag (netto)'"/>
<xsl:variable name="i18n.bt136" select="'Nachlass'"/> <xsl:variable name="i18n.bt138" select="'Prozentsatz'"/>
<xsl:variable name="i18n.bt139" select="'Grund des Nachlasses'"/> <xsl:variable name="i18n.bt136" select="'Nachlass'"/>
<xsl:variable name="i18n.bt140" select="'Code für den Nachlassgrund'"/> <xsl:variable name="i18n.bt139" select="'Grund des Nachlasses'"/>
<xsl:variable name="i18n.bg28" select="'Zuschläge auf Ebene der Rechnungsposition'"/> <xsl:variable name="i18n.bt140" select="'Code für den Nachlassgrund'"/>
<xsl:variable name="i18n.bt142" select="'Grundbetrag (netto)'"/> <xsl:variable name="i18n.bg28" select="'Zuschläge auf Ebene der Rechnungsposition'"/>
<xsl:variable name="i18n.bt143" select="'Prozentsatz'"/> <xsl:variable name="i18n.bt142" select="'Grundbetrag (netto)'"/>
<xsl:variable name="i18n.bt141" select="'Zuschlag (netto)'"/> <xsl:variable name="i18n.bt143" select="'Prozentsatz'"/>
<xsl:variable name="i18n.bt144" select="'Grund des Zuschlags'"/> <xsl:variable name="i18n.bt141" select="'Zuschlag (netto)'"/>
<xsl:variable name="i18n.bt145" select="'Code für den Zuschlagsgrund'"/> <xsl:variable name="i18n.bt144" select="'Grund des Zuschlags'"/>
<xsl:variable name="i18n.bg31" select="'Artikelinformationen'"/> <xsl:variable name="i18n.bt145" select="'Code für den Zuschlagsgrund'"/>
<xsl:variable name="i18n.bt153" select="'Bezeichnung'"/> <xsl:variable name="i18n.bg31" select="'Artikelinformationen'"/>
<xsl:variable name="i18n.bt154" select="'Beschreibung'"/> <xsl:variable name="i18n.bt153" select="'Bezeichnung'"/>
<xsl:variable name="i18n.bt155" select="'Artikelnummer'"/> <xsl:variable name="i18n.bt154" select="'Beschreibung'"/>
<xsl:variable name="i18n.bt156" select="'Kunden-Material-Nr.'"/> <xsl:variable name="i18n.bt155" select="'Artikelnummer'"/>
<xsl:variable name="i18n.bg32" select="'Eigenschaften des Artikels'"/> <xsl:variable name="i18n.bt156" select="'Kunden-Material-Nr.'"/>
<xsl:variable name="i18n.bt157" select="'Artikelkennung (EAN)'"/> <xsl:variable name="i18n.bg32" select="'Eigenschaften des Artikels'"/>
<xsl:variable name="i18n.bt157-id" select="'Schema der Artikelkennung'"/> <xsl:variable name="i18n.bt157" select="'Artikelkennung (EAN)'"/>
<xsl:variable name="i18n.bt158" select="'Code der Artikelklassifizierung'"/> <xsl:variable name="i18n.bt157-id" select="'Schema der Artikelkennung'"/>
<xsl:variable name="i18n.bt158-id" select="'Kennung zur Bildung des Schemas'"/> <xsl:variable name="i18n.bt158" select="'Code der Artikelklassifizierung'"/>
<xsl:variable name="i18n.bt157-vers-id" select="'Version zur Bildung des Schemas'"/> <xsl:variable name="i18n.bt158-id" select="'Kennung zur Bildung des Schemas'"/>
<xsl:variable name="i18n.bt159" select="'Code des Herkunftslandes'"/> <xsl:variable name="i18n.bt157-vers-id" select="'Version zur Bildung des Schemas'"/>
<xsl:variable name="i18n.bg4" select="'Informationen zum Verkäufer'"/> <xsl:variable name="i18n.bt159" select="'Code des Herkunftslandes'"/>
<xsl:variable name="i18n.bt28" select="'Abweichender Handelsname'"/> <xsl:variable name="i18n.bg4" select="'Informationen zum Verkäufer'"/>
<xsl:variable name="i18n.bt34" select="'Elektronische Adresse'"/> <xsl:variable name="i18n.bt28" select="'Abweichender Handelsname'"/>
<xsl:variable name="i18n.bt34-id" select="'Schema der elektronischen Adresse'"/> <xsl:variable name="i18n.bt34" select="'Elektronische Adresse'"/>
<xsl:variable name="i18n.bt30" select="'Register-/Registriernummer'"/> <xsl:variable name="i18n.bt34-id" select="'Schema der elektronischen Adresse'"/>
<xsl:variable name="i18n.bt31" select="'Umsatzsteuer-ID'"/> <xsl:variable name="i18n.bt30" select="'Register-/Registriernummer'"/>
<xsl:variable name="i18n.bt32" select="'Steuernummer'"/> <xsl:variable name="i18n.bt31" select="'Umsatzsteuer-ID'"/>
<xsl:variable name="i18n.bt32-schema" select="'Schema der Steuernummer'"/> <xsl:variable name="i18n.bt32" select="'Steuernummer'"/>
<xsl:variable name="i18n.bt33" select="'Weitere rechtliche Informationen'"/> <xsl:variable name="i18n.bt32-schema" select="'Schema der Steuernummer'"/>
<xsl:variable name="i18n.bt6" select="'Code der Umsatzsteuerwährung'"/> <xsl:variable name="i18n.bt33" select="'Weitere rechtliche Informationen'"/>
<xsl:variable name="i18n.bg11" select="'Steuervertreter des Verkäufers'"/> <xsl:variable name="i18n.bt6" select="'Code der Umsatzsteuerwährung'"/>
<xsl:variable name="i18n.bt62" select="'Name'"/> <xsl:variable name="i18n.bg11" select="'Steuervertreter des Verkäufers'"/>
<xsl:variable name="i18n.bt64" select="'Straße / Hausnummer'"/> <xsl:variable name="i18n.bt62" select="'Name'"/>
<xsl:variable name="i18n.bt65" select="'Postfach'"/> <xsl:variable name="i18n.bt64" select="'Straße / Hausnummer'"/>
<xsl:variable name="i18n.bt164" select="'Adresszusatz'"/> <xsl:variable name="i18n.bt65" select="'Postfach'"/>
<xsl:variable name="i18n.bt67" select="'PLZ'"/> <xsl:variable name="i18n.bt164" select="'Adresszusatz'"/>
<xsl:variable name="i18n.bt66" select="'Ort'"/> <xsl:variable name="i18n.bt67" select="'PLZ'"/>
<xsl:variable name="i18n.bt68" select="'Bundesland'"/> <xsl:variable name="i18n.bt66" select="'Ort'"/>
<xsl:variable name="i18n.bt69" select="'ndercode'"/> <xsl:variable name="i18n.bt68" select="'Bundesland'"/>
<xsl:variable name="i18n.bt63" select="'Umsatzsteuer-ID'"/> <xsl:variable name="i18n.bt69" select="'Ländercode'"/>
<xsl:variable name="i18n.bg7" select="'Informationen zum Käufer'"/> <xsl:variable name="i18n.bt63" select="'Umsatzsteuer-ID'"/>
<xsl:variable name="i18n.bt45" select="'Abweichender Handelsname'"/> <xsl:variable name="i18n.bg7" select="'Informationen zum Käufer'"/>
<xsl:variable name="i18n.bt49" select="'Elektronische Adresse'"/> <xsl:variable name="i18n.bt45" select="'Abweichender Handelsname'"/>
<xsl:variable name="i18n.bt49-id" select="'Schema der elektronischen Adresse'"/> <xsl:variable name="i18n.bt49" select="'Elektronische Adresse'"/>
<xsl:variable name="i18n.bt47" select="'Register-/Registriernummer'"/> <xsl:variable name="i18n.bt49-id" select="'Schema der elektronischen Adresse'"/>
<xsl:variable name="i18n.bt47-id" select="'Schema der Register-/Registriernummer'"/> <xsl:variable name="i18n.bt47" select="'Register-/Registriernummer'"/>
<xsl:variable name="i18n.bt48" select="'Umsatzsteuer-ID'"/> <xsl:variable name="i18n.bt47-id" select="'Schema der Register-/Registriernummer'"/>
<xsl:variable name="i18n.bt7" select="'Abrechnungsdatum der Umsatzsteuer'"/> <xsl:variable name="i18n.bt48" select="'Umsatzsteuer-ID'"/>
<xsl:variable name="i18n.bt8" select="'Code des Umsatzsteuer-Abrechnungsdatums'"/> <xsl:variable name="i18n.bt7" select="'Abrechnungsdatum der Umsatzsteuer'"/>
<xsl:variable name="i18n.bt19" select="'Kontierungsinformation / Kostenstelle'"/> <xsl:variable name="i18n.bt8" select="'Code des Umsatzsteuer-Abrechnungsdatums'"/>
<xsl:variable name="i18n.bg13" select="'Lieferinformationen'"/> <xsl:variable name="i18n.bt19" select="'Kontierungsinformation / Kostenstelle'"/>
<xsl:variable name="i18n.bt71" select="'Kennung des Lieferorts'"/> <xsl:variable name="i18n.bg13" select="'Lieferinformationen'"/>
<xsl:variable name="i18n.bt71-id" select="'Schema der Kennung'"/> <xsl:variable name="i18n.bt71" select="'Kennung des Lieferorts'"/>
<xsl:variable name="i18n.bt72" select="'Lieferdatum'"/> <xsl:variable name="i18n.bt71-id" select="'Schema der Kennung'"/>
<xsl:variable name="i18n.bt70" select="'Name des Empfängers'"/> <xsl:variable name="i18n.bt72" select="'Lieferdatum'"/>
<xsl:variable name="i18n.bt75" select="'Straße / Haus-Nr.'"/> <xsl:variable name="i18n.bt70" select="'Name des Empfängers'"/>
<xsl:variable name="i18n.bt76" select="'Postfach'"/> <xsl:variable name="i18n.bt75" select="'Straße / Haus-Nr.'"/>
<xsl:variable name="i18n.bt165" select="'Adresszusatz'"/> <xsl:variable name="i18n.bt76" select="'Postfach'"/>
<xsl:variable name="i18n.bt78" select="'PLZ'"/> <xsl:variable name="i18n.bt165" select="'Adresszusatz'"/>
<xsl:variable name="i18n.bt77" select="'Ort'"/> <xsl:variable name="i18n.bt78" select="'PLZ'"/>
<xsl:variable name="i18n.bt79" select="'Bundesland'"/> <xsl:variable name="i18n.bt77" select="'Ort'"/>
<xsl:variable name="i18n.bt80" select="'Land'"/> <xsl:variable name="i18n.bt79" select="'Bundesland'"/>
<xsl:variable name="i18n.bt17" select="'Vergabenummer'"/> <xsl:variable name="i18n.bt80" select="'Land'"/>
<xsl:variable name="i18n.bt15" select="'Kennung der Empfangsbestätigung'"/> <xsl:variable name="i18n.bt17" select="'Vergabenummer'"/>
<xsl:variable name="i18n.bt16" select="'Kennung der Versandanzeige'"/> <xsl:variable name="i18n.bt15" select="'Kennung der Empfangsbestätigung'"/>
<xsl:variable name="i18n.bt23" select="'Prozesskennung'"/> <xsl:variable name="i18n.bt16" select="'Kennung der Versandanzeige'"/>
<xsl:variable name="i18n.bt24" select="'Spezifikationskennung'"/> <xsl:variable name="i18n.btx202" select="'Kennung des Lieferscheins'"/>
<xsl:variable name="i18n.bt18" select="'Objektkennung'"/> <xsl:variable name="i18n.bt23" select="'Prozesskennung'"/>
<xsl:variable name="i18n.bt18-id" select="'Schema der Objektkennung'"/> <xsl:variable name="i18n.bt24" select="'Spezifikationskennung'"/>
<xsl:variable name="i18n.bg10" select="'Vom Verkäufer abweichender Zahlungsempfänger'"/> <xsl:variable name="i18n.bt18" select="'Objektkennung'"/>
<xsl:variable name="i18n.bt59" select="'Name'"/> <xsl:variable name="i18n.bt18-id" select="'Schema der Objektkennung'"/>
<xsl:variable name="i18n.bt60" select="'Kennung'"/> <xsl:variable name="i18n.bg10" select="'Vom Verkäufer abweichender Zahlungsempfänger'"/>
<xsl:variable name="i18n.bt60-id" select="'Schema der Kennung'"/> <xsl:variable name="i18n.bt59" select="'Name'"/>
<xsl:variable name="i18n.bt61" select="'Register-/Registriernummer'"/> <xsl:variable name="i18n.bt60" select="'Kennung'"/>
<xsl:variable name="i18n.bt61-id" select="'Schema der Register-/Registriernummer'"/> <xsl:variable name="i18n.bt60-id" select="'Schema der Kennung'"/>
<xsl:variable name="i18n.bg24" select="'Rechnungsbegründende Unterlagen'"/> <xsl:variable name="i18n.bt61" select="'Register-/Registriernummer'"/>
<xsl:variable name="i18n.bt122" select="'Kennung'"/> <xsl:variable name="i18n.bt61-id" select="'Schema der Register-/Registriernummer'"/>
<xsl:variable name="i18n.bt123" select="'Beschreibung'"/> <xsl:variable name="i18n.bg24" select="'Rechnungsbegründende Unterlagen'"/>
<xsl:variable name="i18n.bt124" select="'Verweis (z.B. Internetadresse)'"/> <xsl:variable name="i18n.bt122" select="'Kennung'"/>
<xsl:variable name="i18n.bt125" select="'Anhangsdokument'"/> <xsl:variable name="i18n.bt123" select="'Beschreibung'"/>
<xsl:variable name="i18n.bt125-format" select="'Format des Anhangdokuments'"/> <xsl:variable name="i18n.bt124" select="'Verweis (z.B. Internetadresse)'"/>
<xsl:variable name="i18n.bt125-name" select="'Name des Anhangsdokuments'"/> <xsl:variable name="i18n.bt125" select="'Anhangsdokument'"/>
<xsl:variable name="i18n.historyDate" select="'Datum/Uhrzeit'"/> <xsl:variable name="i18n.bt125-format" select="'Format des Anhangdokuments'"/>
<xsl:variable name="i18n.historySubject" select="'Betreff'"/> <xsl:variable name="i18n.bt125-name" select="'Name des Anhangsdokuments'"/>
<xsl:variable name="i18n.historyText" select="'Text'"/> <xsl:variable name="i18n.historyDate" select="'Datum/Uhrzeit'"/>
<xsl:variable name="i18n.historyDetails" select="'Details'"/> <xsl:variable name="i18n.historySubject" select="'Betreff'"/>
<xsl:variable name="i18n.payment" select="'Zahlungsdaten'"/> <xsl:variable name="i18n.historyText" select="'Text'"/>
<xsl:variable name="i18n.contract_information" select="'Vertragsdaten'"/> <xsl:variable name="i18n.historyDetails" select="'Details'"/>
<xsl:variable name="i18n.preceding_invoice_reference" select="'Vorausgegangene Rechnungen'"/> <xsl:variable name="i18n.payment" select="'Zahlungsdaten'"/>
<xsl:variable name="i18n.contract_information" select="'Vertragsdaten'"/>
<xsl:include href="xrechnung-html.univ.xsl"/> <xsl:variable name="i18n.preceding_invoice_reference" select="'Vorausgegangene Rechnungen'"/>
</xsl:stylesheet> <xsl:include href="xrechnung-html.univ.xsl"/>
</xsl:stylesheet>

View File

@@ -1,227 +1,229 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:variable name="i18n.bt10" select="'Routing ID'"/> <xsl:variable name="i18n.bt10" select="'Routing ID'"/>
<xsl:variable name="i18n.bt44" select="'Name'"/> <xsl:variable name="i18n.bt44" select="'Name'"/>
<xsl:variable name="i18n.title" select="'XRechnung'"/> <xsl:variable name="i18n.title" select="'XRechnung'"/>
<xsl:variable name="i18n.overview" select="'Overview'"/> <xsl:variable name="i18n.overview" select="'Overview'"/>
<xsl:variable name="i18n.items" select="'Items'"/> <xsl:variable name="i18n.items" select="'Items'"/>
<xsl:variable name="i18n.information" select="'Information'"/> <xsl:variable name="i18n.information" select="'Information'"/>
<xsl:variable name="i18n.attachments" select="'Attachments'"/> <xsl:variable name="i18n.attachments" select="'Attachments'"/>
<xsl:variable name="i18n.history" select="'History'"/> <xsl:variable name="i18n.history" select="'History'"/>
<xsl:variable name="i18n.disclaimer" select="'We accept no liability for the correctness of the data'"/> <xsl:variable name="i18n.disclaimer" select="'We accept no liability for the correctness of the data'"/>
<xsl:variable name="i18n.recipientInfo" select="'Buyer Information'"/> <xsl:variable name="i18n.recipientInfo" select="'Buyer Information'"/>
<xsl:variable name="i18n.bt50" select="'Street / house number'"/> <xsl:variable name="i18n.dateOf" select="' from '"/>
<xsl:variable name="i18n.bt51" select="'PO Box'"/> <xsl:variable name="i18n.bt50" select="'Street / house number'"/>
<xsl:variable name="i18n.bt163" select="'Address Addition'"/> <xsl:variable name="i18n.bt51" select="'PO Box'"/>
<xsl:variable name="i18n.bt53" select="'Postcode'"/> <xsl:variable name="i18n.bt163" select="'Address Addition'"/>
<xsl:variable name="i18n.bt52" select="'Place'"/> <xsl:variable name="i18n.bt53" select="'Postcode'"/>
<xsl:variable name="i18n.bt54" select="'State/Province'"/> <xsl:variable name="i18n.bt52" select="'Place'"/>
<xsl:variable name="i18n.bt55" select="'Country'"/> <xsl:variable name="i18n.bt54" select="'State/Province'"/>
<xsl:variable name="i18n.bt46" select="'ID'"/> <xsl:variable name="i18n.bt55" select="'Country'"/>
<xsl:variable name="i18n.bt46-id" select="'ID scheme'"/> <xsl:variable name="i18n.bt46" select="'ID'"/>
<xsl:variable name="i18n.bt56" select="'Name'"/> <xsl:variable name="i18n.bt46-id" select="'ID scheme'"/>
<xsl:variable name="i18n.bt57" select="'Phone'"/> <xsl:variable name="i18n.bt56" select="'Name'"/>
<xsl:variable name="i18n.bt58" select="'E-mail address'"/> <xsl:variable name="i18n.bt57" select="'Phone'"/>
<xsl:variable name="i18n.bt27" select="'Company name'"/> <xsl:variable name="i18n.bt58" select="'E-mail address'"/>
<xsl:variable name="i18n.bt35" select="'Street / house number'"/> <xsl:variable name="i18n.bt27" select="'Company name'"/>
<xsl:variable name="i18n.bt36" select="'PO Box'"/> <xsl:variable name="i18n.bt35" select="'Street / house number'"/>
<xsl:variable name="i18n.bt162" select="'Address Addition'"/> <xsl:variable name="i18n.bt36" select="'PO Box'"/>
<xsl:variable name="i18n.bt38" select="'Code postal'"/> <xsl:variable name="i18n.bt162" select="'Address Addition'"/>
<xsl:variable name="i18n.bt37" select="'Place'"/> <xsl:variable name="i18n.bt38" select="'Code postal'"/>
<xsl:variable name="i18n.bt39" select="'State/Province'"/> <xsl:variable name="i18n.bt37" select="'Place'"/>
<xsl:variable name="i18n.bt40" select="'Country code'"/> <xsl:variable name="i18n.bt39" select="'State/Province'"/>
<xsl:variable name="i18n.bt29" select="'ID'"/> <xsl:variable name="i18n.bt40" select="'Country code'"/>
<xsl:variable name="i18n.bt29-id" select="'ID scheme'"/> <xsl:variable name="i18n.bt29" select="'ID'"/>
<xsl:variable name="i18n.bt41" select="'Name'"/> <xsl:variable name="i18n.bt29-id" select="'ID scheme'"/>
<xsl:variable name="i18n.bt42" select="'Phone'"/> <xsl:variable name="i18n.bt41" select="'Name'"/>
<xsl:variable name="i18n.bt43" select="'E-mail address'"/> <xsl:variable name="i18n.bt42" select="'Phone'"/>
<xsl:variable name="i18n.bt1" select="'Seller Information'"/> <xsl:variable name="i18n.bt43" select="'E-mail address'"/>
<xsl:variable name="i18n.bt2" select="'Invoice date'"/> <xsl:variable name="i18n.bt1" select="'Seller Information'"/>
<xsl:variable name="i18n.details" select="'Invoice details'"/> <xsl:variable name="i18n.bt2" select="'Invoice date'"/>
<xsl:variable name="i18n.period" select="'Billing period'"/> <xsl:variable name="i18n.details" select="'Invoice details'"/>
<xsl:variable name="i18n.bt3" select="'Invoice type'"/> <xsl:variable name="i18n.period" select="'Billing period'"/>
<xsl:variable name="i18n.bt5" select="'Currency'"/> <xsl:variable name="i18n.bt3" select="'Invoice type'"/>
<xsl:variable name="i18n.bt73" select="'from'"/> <xsl:variable name="i18n.bt5" select="'Currency'"/>
<xsl:variable name="i18n.bt74" select="'to'"/> <xsl:variable name="i18n.bt73" select="'from'"/>
<xsl:variable name="i18n.bt11" select="'Project number'"/> <xsl:variable name="i18n.bt74" select="'to'"/>
<xsl:variable name="i18n.bt12" select="'Contract Number'"/> <xsl:variable name="i18n.bt11" select="'Project number'"/>
<xsl:variable name="i18n.bt13" select="'Order number'"/> <xsl:variable name="i18n.bt12" select="'Contract Number'"/>
<xsl:variable name="i18n.bt14" select="'Order number'"/> <xsl:variable name="i18n.bt13" select="'Order number'"/>
<xsl:variable name="i18n.bt25" select="'Invoice number'"/> <xsl:variable name="i18n.bt14" select="'Order number'"/>
<xsl:variable name="i18n.bt26" select="'Invoice date'"/> <xsl:variable name="i18n.bt25" select="'Invoice number'"/>
<xsl:variable name="i18n.bg22" select="'Total amounts of the invoice'"/> <xsl:variable name="i18n.bt26" select="'Invoice date'"/>
<xsl:variable name="i18n.bt106" select="'Line total'"/> <xsl:variable name="i18n.bg22" select="'Total amounts of the invoice'"/>
<xsl:variable name="i18n.bt107" select="'Total discounts'"/> <xsl:variable name="i18n.bt106" select="'Line total'"/>
<xsl:variable name="i18n.bt108" select="'Total charges'"/> <xsl:variable name="i18n.bt107" select="'Total discounts'"/>
<xsl:variable name="i18n.bt109" select="'Grand total'"/> <xsl:variable name="i18n.bt108" select="'Total charges'"/>
<xsl:variable name="i18n.bt110" select="'VAT amount'"/> <xsl:variable name="i18n.bt109" select="'Grand total'"/>
<xsl:variable name="i18n.bt111" select="'Total VAT'"/> <xsl:variable name="i18n.bt110" select="'VAT amount'"/>
<xsl:variable name="i18n.bt112" select="'Grand total'"/> <xsl:variable name="i18n.bt111" select="'Total VAT'"/>
<xsl:variable name="i18n.bt113" select="'Amount paid'"/> <xsl:variable name="i18n.bt112" select="'Grand total'"/>
<xsl:variable name="i18n.bt114" select="'rounding amount'"/> <xsl:variable name="i18n.bt113" select="'Amount paid'"/>
<xsl:variable name="i18n.bt115" select="'Amount Due'"/> <xsl:variable name="i18n.bt114" select="'rounding amount'"/>
<xsl:variable name="i18n.bg23" select="'Breakdown of VAT at invoice level'"/> <xsl:variable name="i18n.bt115" select="'Amount Due'"/>
<xsl:variable name="i18n.bt118" select="'VAT category'"/> <xsl:variable name="i18n.bg23" select="'Breakdown of VAT at invoice level'"/>
<xsl:variable name="i18n.bt116" select="'Grand total'"/> <xsl:variable name="i18n.bt118" select="'VAT category'"/>
<xsl:variable name="i18n.bt119" select="'VAT rate'"/> <xsl:variable name="i18n.bt116" select="'Grand total'"/>
<xsl:variable name="i18n.bt117" select="'VAT amount'"/> <xsl:variable name="i18n.bt119" select="'VAT rate'"/>
<xsl:variable name="i18n.bt120" select="'Reason for exemption:'"/> <xsl:variable name="i18n.bt117" select="'VAT amount'"/>
<xsl:variable name="i18n.bt121" select="'ID for the exemption reason:'"/> <xsl:variable name="i18n.bt120" select="'Reason for exemption:'"/>
<xsl:variable name="i18n.bg20" select="'Allowance at invoice level'"/> <xsl:variable name="i18n.bt121" select="'ID for the exemption reason:'"/>
<xsl:variable name="i18n.bt95" select="'VAT category of the discount:'"/> <xsl:variable name="i18n.bg20" select="'Allowance at invoice level'"/>
<xsl:variable name="i18n.bt93" select="'Basic amount'"/> <xsl:variable name="i18n.bt95" select="'VAT category of the discount:'"/>
<xsl:variable name="i18n.bt94" select="'Percentage'"/> <xsl:variable name="i18n.bt93" select="'Basic amount'"/>
<xsl:variable name="i18n.bt92" select="'Allowance'"/> <xsl:variable name="i18n.bt94" select="'Percentage'"/>
<xsl:variable name="i18n.bt96" select="'VAT rate on allowance'"/> <xsl:variable name="i18n.bt92" select="'Allowance'"/>
<xsl:variable name="i18n.bt97" select="'Reason for the allowance'"/> <xsl:variable name="i18n.bt96" select="'VAT rate on allowance'"/>
<xsl:variable name="i18n.bt98" select="'Document level allowance reason code'"/> <xsl:variable name="i18n.bt97" select="'Reason for the allowance'"/>
<xsl:variable name="i18n.bg21" select="'Charge amount at invoice level'"/> <xsl:variable name="i18n.bt98" select="'Document level allowance reason code'"/>
<xsl:variable name="i18n.bt102" select="'VAT category of the charge amount'"/> <xsl:variable name="i18n.bg21" select="'Charge amount at invoice level'"/>
<xsl:variable name="i18n.bt100" select="'Basic amount'"/> <xsl:variable name="i18n.bt102" select="'VAT category of the charge amount'"/>
<xsl:variable name="i18n.bt101" select="'Percentage'"/> <xsl:variable name="i18n.bt100" select="'Basic amount'"/>
<xsl:variable name="i18n.bt99" select="'Charge amount'"/> <xsl:variable name="i18n.bt101" select="'Percentage'"/>
<xsl:variable name="i18n.bt103" select="'VAT rate of the charge amount'"/> <xsl:variable name="i18n.bt99" select="'Charge amount'"/>
<xsl:variable name="i18n.bt104" select="'Reason for the charge amount:'"/> <xsl:variable name="i18n.bt103" select="'VAT rate of the charge amount'"/>
<xsl:variable name="i18n.bt105" select="'Document level charge reason code'"/> <xsl:variable name="i18n.bt104" select="'Reason for the charge amount:'"/>
<xsl:variable name="i18n.bgx42" select="'Shipping cost'"/> <xsl:variable name="i18n.bt105" select="'Document level charge reason code'"/>
<xsl:variable name="i18n.btx274" select="'VAT category of the shipping cost'"/> <xsl:variable name="i18n.bgx42" select="'Shipping cost'"/>
<xsl:variable name="i18n.btx272" select="'Amount'"/> <xsl:variable name="i18n.btx274" select="'VAT category of the shipping cost'"/>
<xsl:variable name="i18n.btx273" select="'VAT rate of the shipping cost'"/> <xsl:variable name="i18n.btx272" select="'Amount'"/>
<xsl:variable name="i18n.btx271" select="'Shipping cost description'"/> <xsl:variable name="i18n.btx273" select="'VAT rate of the shipping cost'"/>
<xsl:variable name="i18n.bt20" select="'Discount; other payment terms'"/> <xsl:variable name="i18n.btx271" select="'Shipping cost description'"/>
<xsl:variable name="i18n.bt9" select="'Due date'"/> <xsl:variable name="i18n.bt20" select="'Discount; other payment terms'"/>
<xsl:variable name="i18n.bt81" select="'Code for the means of payment'"/> <xsl:variable name="i18n.bt9" select="'Due date'"/>
<xsl:variable name="i18n.bt82" select="'Means of payment'"/> <xsl:variable name="i18n.bt81" select="'Code for the means of payment'"/>
<xsl:variable name="i18n.bt83" select="'Usage'"/> <xsl:variable name="i18n.bt82" select="'Means of payment'"/>
<xsl:variable name="i18n.bg18" select="'Card information'"/> <xsl:variable name="i18n.bt83" select="'Usage'"/>
<xsl:variable name="i18n.bt87" select="'Card number'"/> <xsl:variable name="i18n.bg18" select="'Card information'"/>
<xsl:variable name="i18n.bt88" select="'Card holder'"/> <xsl:variable name="i18n.bt87" select="'Card number'"/>
<xsl:variable name="i18n.bg19" select="'Direct debit'"/> <xsl:variable name="i18n.bt88" select="'Card holder'"/>
<xsl:variable name="i18n.bt89" select="'Mandate Reference No'"/> <xsl:variable name="i18n.bg19" select="'Direct debit'"/>
<xsl:variable name="i18n.bt91" select="'IBAN'"/> <xsl:variable name="i18n.bt89" select="'Mandate Reference No'"/>
<xsl:variable name="i18n.bt90" select="'Creditor ID'"/> <xsl:variable name="i18n.bt91" select="'IBAN'"/>
<xsl:variable name="i18n.bg17" select="'Transfer'"/> <xsl:variable name="i18n.bt90" select="'Creditor ID'"/>
<xsl:variable name="i18n.bt85" select="'Account holder'"/> <xsl:variable name="i18n.bg17" select="'Transfer'"/>
<xsl:variable name="i18n.bt84" select="'IBAN'"/> <xsl:variable name="i18n.bt85" select="'Account holder'"/>
<xsl:variable name="i18n.bt86" select="'BIC'"/> <xsl:variable name="i18n.bt84" select="'IBAN'"/>
<xsl:variable name="i18n.bg1" select="'Invoice Comment'"/> <xsl:variable name="i18n.bt86" select="'BIC'"/>
<xsl:variable name="i18n.bt21" select="'Subject'"/> <xsl:variable name="i18n.bg1" select="'Invoice Comment'"/>
<xsl:variable name="i18n.bt22" select="'Comment'"/> <xsl:variable name="i18n.bt21" select="'Subject'"/>
<xsl:variable name="i18n.bt126" select="'Line'"/> <xsl:variable name="i18n.bt22" select="'Comment'"/>
<xsl:variable name="i18n.bt127" select="'Free text'"/> <xsl:variable name="i18n.bt126" select="'Line'"/>
<xsl:variable name="i18n.bt128" select="'Object ID'"/> <xsl:variable name="i18n.bt127" select="'Free text'"/>
<xsl:variable name="i18n.bt128-id" select="'Object ID schema'"/> <xsl:variable name="i18n.bt128" select="'Object ID'"/>
<xsl:variable name="i18n.bt132" select="'Order line number'"/> <xsl:variable name="i18n.bt128-id" select="'Object ID schema'"/>
<xsl:variable name="i18n.bt133" select="'Account assignment information'"/> <xsl:variable name="i18n.bt132" select="'Order line number'"/>
<xsl:variable name="i18n.bg26" select="'Billing period'"/> <xsl:variable name="i18n.bt133" select="'Account assignment information'"/>
<xsl:variable name="i18n.bt134" select="'from'"/> <xsl:variable name="i18n.bg26" select="'Billing period'"/>
<xsl:variable name="i18n.bt135" select="'to'"/> <xsl:variable name="i18n.bt134" select="'from'"/>
<xsl:variable name="i18n.bg29" select="'Price details'"/> <xsl:variable name="i18n.bt135" select="'to'"/>
<xsl:variable name="i18n.bt129" select="'Quantity'"/> <xsl:variable name="i18n.bg29" select="'Price details'"/>
<xsl:variable name="i18n.bt130" select="'Unit'"/> <xsl:variable name="i18n.bt129" select="'Quantity'"/>
<xsl:variable name="i18n.bt146" select="'Unit price (net)'"/> <xsl:variable name="i18n.bt130" select="'Unit'"/>
<xsl:variable name="i18n.bt131" select="'Total price (net)'"/> <xsl:variable name="i18n.bt146" select="'Unit price (net)'"/>
<xsl:variable name="i18n.bt147" select="'Discount (net)'"/> <xsl:variable name="i18n.bt131" select="'Total price (net)'"/>
<xsl:variable name="i18n.bt148" select="'Net list price'"/> <xsl:variable name="i18n.bt147" select="'Discount (net)'"/>
<xsl:variable name="i18n.bt149" select="'Number of units'"/> <xsl:variable name="i18n.bt148" select="'Net list price'"/>
<xsl:variable name="i18n.bt150" select="'Unit of measure code'"/> <xsl:variable name="i18n.bt149" select="'Number of units'"/>
<xsl:variable name="i18n.bt151" select="'VAT'"/> <xsl:variable name="i18n.bt150" select="'Unit of measure code'"/>
<xsl:variable name="i18n.bt152" select="'VAT rate in percent'"/> <xsl:variable name="i18n.bt151" select="'VAT'"/>
<xsl:variable name="i18n.bg27" select="'Allowances at line level'"/> <xsl:variable name="i18n.bt152" select="'VAT rate in percent'"/>
<xsl:variable name="i18n.bt137" select="'Basic amount (net)'"/> <xsl:variable name="i18n.bg27" select="'Allowances at line level'"/>
<xsl:variable name="i18n.bt138" select="'Percentage'"/> <xsl:variable name="i18n.bt137" select="'Basic amount (net)'"/>
<xsl:variable name="i18n.bt136" select="'Allowance (net)'"/> <xsl:variable name="i18n.bt138" select="'Percentage'"/>
<xsl:variable name="i18n.bt139" select="'Reason for allowance'"/> <xsl:variable name="i18n.bt136" select="'Allowance (net)'"/>
<xsl:variable name="i18n.bt140" select="'Code for the reason for the estate'"/> <xsl:variable name="i18n.bt139" select="'Reason for allowance'"/>
<xsl:variable name="i18n.bg28" select="'Charges at invoice line level'"/> <xsl:variable name="i18n.bt140" select="'Code for the reason for the estate'"/>
<xsl:variable name="i18n.bt142" select="'Basic amount (net)'"/> <xsl:variable name="i18n.bg28" select="'Charges at invoice line level'"/>
<xsl:variable name="i18n.bt143" select="'percentage'"/> <xsl:variable name="i18n.bt142" select="'Basic amount (net)'"/>
<xsl:variable name="i18n.bt141" select="'Charge amount (net)'"/> <xsl:variable name="i18n.bt143" select="'percentage'"/>
<xsl:variable name="i18n.bt144" select="'Reason for the allowance'"/> <xsl:variable name="i18n.bt141" select="'Charge amount (net)'"/>
<xsl:variable name="i18n.bt145" select="'Reason code'"/> <xsl:variable name="i18n.bt144" select="'Reason for the allowance'"/>
<xsl:variable name="i18n.bg31" select="'Item Information'"/> <xsl:variable name="i18n.bt145" select="'Reason code'"/>
<xsl:variable name="i18n.bt153" select="'Name'"/> <xsl:variable name="i18n.bg31" select="'Item Information'"/>
<xsl:variable name="i18n.bt154" select="'Description'"/> <xsl:variable name="i18n.bt153" select="'Name'"/>
<xsl:variable name="i18n.bt155" select="'Part number'"/> <xsl:variable name="i18n.bt154" select="'Description'"/>
<xsl:variable name="i18n.bt156" select="'Customer''s material number'"/> <xsl:variable name="i18n.bt155" select="'Part number'"/>
<xsl:variable name="i18n.bg32" select="'Article properties'"/> <xsl:variable name="i18n.bt156" select="'Customer''s material number'"/>
<xsl:variable name="i18n.bt157" select="'Item ID'"/> <xsl:variable name="i18n.bg32" select="'Article properties'"/>
<xsl:variable name="i18n.bt157-id" select="'Item ID schema'"/> <xsl:variable name="i18n.bt157" select="'Item ID'"/>
<xsl:variable name="i18n.bt158" select="'Item classification code'"/> <xsl:variable name="i18n.bt157-id" select="'Item ID schema'"/>
<xsl:variable name="i18n.bt158-id" select="'Identifier to form the schema'"/> <xsl:variable name="i18n.bt158" select="'Item classification code'"/>
<xsl:variable name="i18n.bt157-vers-id" select="'Version for creating the schema'"/> <xsl:variable name="i18n.bt158-id" select="'Identifier to form the schema'"/>
<xsl:variable name="i18n.bt159" select="'Country of origin code'"/> <xsl:variable name="i18n.bt157-vers-id" select="'Version for creating the schema'"/>
<xsl:variable name="i18n.bg4" select="'Seller Information'"/> <xsl:variable name="i18n.bt159" select="'Country of origin code'"/>
<xsl:variable name="i18n.bt28" select="'Differing trade name'"/> <xsl:variable name="i18n.bg4" select="'Seller Information'"/>
<xsl:variable name="i18n.bt34" select="'Electronic address'"/> <xsl:variable name="i18n.bt28" select="'Differing trade name'"/>
<xsl:variable name="i18n.bt34-id" select="'Electronic address scheme'"/> <xsl:variable name="i18n.bt34" select="'Electronic address'"/>
<xsl:variable name="i18n.bt30" select="'Register number'"/> <xsl:variable name="i18n.bt34-id" select="'Electronic address scheme'"/>
<xsl:variable name="i18n.bt31" select="'VAT ID'"/> <xsl:variable name="i18n.bt30" select="'Register number'"/>
<xsl:variable name="i18n.bt32" select="'Tax ID'"/> <xsl:variable name="i18n.bt31" select="'VAT ID'"/>
<xsl:variable name="i18n.bt32-schema" select="'Tax ID scheme'"/> <xsl:variable name="i18n.bt32" select="'Tax ID'"/>
<xsl:variable name="i18n.bt33" select="'Further legal information'"/> <xsl:variable name="i18n.bt32-schema" select="'Tax ID scheme'"/>
<xsl:variable name="i18n.bt6" select="'VAT currency code'"/> <xsl:variable name="i18n.bt33" select="'Further legal information'"/>
<xsl:variable name="i18n.bg11" select="'seller''s tax representative'"/> <xsl:variable name="i18n.bt6" select="'VAT currency code'"/>
<xsl:variable name="i18n.bt62" select="'Name'"/> <xsl:variable name="i18n.bg11" select="'seller''s tax representative'"/>
<xsl:variable name="i18n.bt64" select="'Street / house number'"/> <xsl:variable name="i18n.bt62" select="'Name'"/>
<xsl:variable name="i18n.bt65" select="'PO Box'"/> <xsl:variable name="i18n.bt64" select="'Street / house number'"/>
<xsl:variable name="i18n.bt164" select="'Address Addition'"/> <xsl:variable name="i18n.bt65" select="'PO Box'"/>
<xsl:variable name="i18n.bt67" select="'Postcode'"/> <xsl:variable name="i18n.bt164" select="'Address Addition'"/>
<xsl:variable name="i18n.bt66" select="'Place'"/> <xsl:variable name="i18n.bt67" select="'Postcode'"/>
<xsl:variable name="i18n.bt68" select="'State/Province'"/> <xsl:variable name="i18n.bt66" select="'Place'"/>
<xsl:variable name="i18n.bt69" select="'Country code'"/> <xsl:variable name="i18n.bt68" select="'State/Province'"/>
<xsl:variable name="i18n.bt63" select="'VAT ID'"/> <xsl:variable name="i18n.bt69" select="'Country code'"/>
<xsl:variable name="i18n.bg7" select="'Buyer Information'"/> <xsl:variable name="i18n.bt63" select="'VAT ID'"/>
<xsl:variable name="i18n.bt45" select="'Differing trade name'"/> <xsl:variable name="i18n.bg7" select="'Buyer Information'"/>
<xsl:variable name="i18n.bt49" select="'E-mail address'"/> <xsl:variable name="i18n.bt45" select="'Differing trade name'"/>
<xsl:variable name="i18n.bt49-id" select="'Electronic address scheme'"/> <xsl:variable name="i18n.bt49" select="'E-mail address'"/>
<xsl:variable name="i18n.bt47" select="'Register number'"/> <xsl:variable name="i18n.bt49-id" select="'Electronic address scheme'"/>
<xsl:variable name="i18n.bt47-id" select="'Scheme of register/register number'"/> <xsl:variable name="i18n.bt47" select="'Register number'"/>
<xsl:variable name="i18n.bt48" select="'VAT ID'"/> <xsl:variable name="i18n.bt47-id" select="'Scheme of register/register number'"/>
<xsl:variable name="i18n.bt7" select="'VAT payday date'"/> <xsl:variable name="i18n.bt48" select="'VAT ID'"/>
<xsl:variable name="i18n.bt8" select="'VAT Statement Date Code'"/> <xsl:variable name="i18n.bt7" select="'VAT payday date'"/>
<xsl:variable name="i18n.bt19" select="'Account assignment information'"/> <xsl:variable name="i18n.bt8" select="'VAT Statement Date Code'"/>
<xsl:variable name="i18n.bg13" select="'Shipping information'"/> <xsl:variable name="i18n.bt19" select="'Account assignment information'"/>
<xsl:variable name="i18n.bt71" select="'Identification of the place of delivery'"/> <xsl:variable name="i18n.bg13" select="'Shipping information'"/>
<xsl:variable name="i18n.bt71-id" select="'ID scheme'"/> <xsl:variable name="i18n.bt71" select="'Identification of the place of delivery'"/>
<xsl:variable name="i18n.bt72" select="'Date of delivery'"/> <xsl:variable name="i18n.bt71-id" select="'ID scheme'"/>
<xsl:variable name="i18n.bt70" select="'Recipient name'"/> <xsl:variable name="i18n.bt72" select="'Date of delivery'"/>
<xsl:variable name="i18n.bt75" select="'Street / house number'"/> <xsl:variable name="i18n.bt70" select="'Recipient name'"/>
<xsl:variable name="i18n.bt76" select="'PO Box'"/> <xsl:variable name="i18n.bt75" select="'Street / house number'"/>
<xsl:variable name="i18n.bt165" select="'Address Addition'"/> <xsl:variable name="i18n.bt76" select="'PO Box'"/>
<xsl:variable name="i18n.bt78" select="'Code postal'"/> <xsl:variable name="i18n.bt165" select="'Address Addition'"/>
<xsl:variable name="i18n.bt77" select="'Place'"/> <xsl:variable name="i18n.bt78" select="'Code postal'"/>
<xsl:variable name="i18n.bt79" select="'State/Province'"/> <xsl:variable name="i18n.bt77" select="'Place'"/>
<xsl:variable name="i18n.bt80" select="'Country'"/> <xsl:variable name="i18n.bt79" select="'State/Province'"/>
<xsl:variable name="i18n.bt17" select="'Assignment number'"/> <xsl:variable name="i18n.bt80" select="'Country'"/>
<xsl:variable name="i18n.bt15" select="'Receipt confirmation ID'"/> <xsl:variable name="i18n.bt17" select="'Assignment number'"/>
<xsl:variable name="i18n.bt16" select="'Dispatch note ID'"/> <xsl:variable name="i18n.bt15" select="'Receipt confirmation ID'"/>
<xsl:variable name="i18n.bt23" select="'Process ID'"/> <xsl:variable name="i18n.bt16" select="'Dispatch note ID'"/>
<xsl:variable name="i18n.bt24" select="'Specification ID'"/> <xsl:variable name="i18n.btx202" select="'Delivery note ID'"/>
<xsl:variable name="i18n.bt18" select="'Object ID'"/> <xsl:variable name="i18n.bt23" select="'Process ID'"/>
<xsl:variable name="i18n.bt18-id" select="'Object ID schema'"/> <xsl:variable name="i18n.bt24" select="'Specification ID'"/>
<xsl:variable name="i18n.bg10" select="'Payee other than Seller'"/> <xsl:variable name="i18n.bt18" select="'Object ID'"/>
<xsl:variable name="i18n.bt59" select="'Name'"/> <xsl:variable name="i18n.bt18-id" select="'Object ID schema'"/>
<xsl:variable name="i18n.bt60" select="'ID'"/> <xsl:variable name="i18n.bg10" select="'Payee other than Seller'"/>
<xsl:variable name="i18n.bt60-id" select="'ID scheme'"/> <xsl:variable name="i18n.bt59" select="'Name'"/>
<xsl:variable name="i18n.bt61" select="'Register number'"/> <xsl:variable name="i18n.bt60" select="'ID'"/>
<xsl:variable name="i18n.bt61-id" select="'Scheme of register/register number'"/> <xsl:variable name="i18n.bt60-id" select="'ID scheme'"/>
<xsl:variable name="i18n.bg24" select="'Documents justifying the invoice'"/> <xsl:variable name="i18n.bt61" select="'Register number'"/>
<xsl:variable name="i18n.bt122" select="'ID'"/> <xsl:variable name="i18n.bt61-id" select="'Scheme of register/register number'"/>
<xsl:variable name="i18n.bt123" select="'Description'"/> <xsl:variable name="i18n.bg24" select="'Documents justifying the invoice'"/>
<xsl:variable name="i18n.bt124" select="'Reference (e.g. Internet address)'"/> <xsl:variable name="i18n.bt122" select="'ID'"/>
<xsl:variable name="i18n.bt125" select="'Attachment'"/> <xsl:variable name="i18n.bt123" select="'Description'"/>
<xsl:variable name="i18n.bt125-format" select="'Format of attachment'"/> <xsl:variable name="i18n.bt124" select="'Reference (e.g. Internet address)'"/>
<xsl:variable name="i18n.bt125-name" select="'Name of attachment'"/> <xsl:variable name="i18n.bt125" select="'Attachment'"/>
<xsl:variable name="i18n.historyDate" select="'Date/time'"/> <xsl:variable name="i18n.bt125-format" select="'Format of attachment'"/>
<xsl:variable name="i18n.historySubject" select="'Subject'"/> <xsl:variable name="i18n.bt125-name" select="'Name of attachment'"/>
<xsl:variable name="i18n.historyText" select="'Text'"/> <xsl:variable name="i18n.historyDate" select="'Date/time'"/>
<xsl:variable name="i18n.historyDetails" select="'Details:'"/> <xsl:variable name="i18n.historySubject" select="'Subject'"/>
<xsl:variable name="i18n.payment" select="'Payment details'"/> <xsl:variable name="i18n.historyText" select="'Text'"/>
<xsl:variable name="i18n.contract_information" select="'Contract Information'"/> <xsl:variable name="i18n.historyDetails" select="'Details:'"/>
<xsl:variable name="i18n.preceding_invoice_reference" select="'Previous invoices'"/> <xsl:variable name="i18n.payment" select="'Payment details'"/>
<xsl:variable name="i18n.contract_information" select="'Contract Information'"/>
<xsl:include href="xrechnung-html.univ.xsl"/> <xsl:variable name="i18n.preceding_invoice_reference" select="'Previous invoices'"/>
</xsl:stylesheet> <xsl:include href="xrechnung-html.univ.xsl"/>
</xsl:stylesheet>

View File

@@ -1,227 +1,229 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:variable name="i18n.bt10" select="'Identifiant d''itinéraire'"/> <xsl:variable name="i18n.bt10" select="'Identifiant d''itinéraire'"/>
<xsl:variable name="i18n.bt44" select="'Nom'"/> <xsl:variable name="i18n.bt44" select="'Nom'"/>
<xsl:variable name="i18n.title" select="'XRechnung'"/> <xsl:variable name="i18n.title" select="'XRechnung'"/>
<xsl:variable name="i18n.overview" select="'Aperçu'"/> <xsl:variable name="i18n.overview" select="'Aperçu'"/>
<xsl:variable name="i18n.items" select="'Détails'"/> <xsl:variable name="i18n.items" select="'Détails'"/>
<xsl:variable name="i18n.information" select="'Additif'"/> <xsl:variable name="i18n.information" select="'Additif'"/>
<xsl:variable name="i18n.attachments" select="'Pièces jointes'"/> <xsl:variable name="i18n.attachments" select="'Pièces jointes'"/>
<xsl:variable name="i18n.history" select="'Historique de traitement'"/> <xsl:variable name="i18n.history" select="'Historique de traitement'"/>
<xsl:variable name="i18n.disclaimer" select="'Nous n''assumons aucune responsabilité quant à l''exactitude des données.'"/> <xsl:variable name="i18n.disclaimer" select="'Nous n''assumons aucune responsabilité quant à l''exactitude des données.'"/>
<xsl:variable name="i18n.recipientInfo" select="'Informations sur l''acheteur'"/> <xsl:variable name="i18n.recipientInfo" select="'Informations sur l''acheteur'"/>
<xsl:variable name="i18n.bt50" select="'Rue / Numéro de maison'"/> <xsl:variable name="i18n.dateOf" select="' du '"/>
<xsl:variable name="i18n.bt51" select="'Boîte postale'"/> <xsl:variable name="i18n.bt50" select="'Rue / Numéro de maison'"/>
<xsl:variable name="i18n.bt163" select="'Supplément d''adresse'"/> <xsl:variable name="i18n.bt51" select="'Boîte postale'"/>
<xsl:variable name="i18n.bt53" select="'Code postal'"/> <xsl:variable name="i18n.bt163" select="'Supplément d''adresse'"/>
<xsl:variable name="i18n.bt52" select="'Lieu'"/> <xsl:variable name="i18n.bt53" select="'Code postal'"/>
<xsl:variable name="i18n.bt54" select="'Région'"/> <xsl:variable name="i18n.bt52" select="'Lieu'"/>
<xsl:variable name="i18n.bt55" select="'Pays'"/> <xsl:variable name="i18n.bt54" select="'Région'"/>
<xsl:variable name="i18n.bt46" select="'Identifiant'"/> <xsl:variable name="i18n.bt55" select="'Pays'"/>
<xsl:variable name="i18n.bt46-id" select="'Schéma de l''Identifiant'"/> <xsl:variable name="i18n.bt46" select="'Identifiant'"/>
<xsl:variable name="i18n.bt56" select="'Nom'"/> <xsl:variable name="i18n.bt46-id" select="'Schéma de l''Identifiant'"/>
<xsl:variable name="i18n.bt57" select="'Téléphone'"/> <xsl:variable name="i18n.bt56" select="'Nom'"/>
<xsl:variable name="i18n.bt58" select="'Adresse électronique'"/> <xsl:variable name="i18n.bt57" select="'Téléphone'"/>
<xsl:variable name="i18n.bt27" select="'Nom de la société'"/> <xsl:variable name="i18n.bt58" select="'Adresse électronique'"/>
<xsl:variable name="i18n.bt35" select="'Rue / Numéro de maison'"/> <xsl:variable name="i18n.bt27" select="'Nom de la société'"/>
<xsl:variable name="i18n.bt36" select="'Boîte postale'"/> <xsl:variable name="i18n.bt35" select="'Rue / Numéro de maison'"/>
<xsl:variable name="i18n.bt162" select="'Supplément d''adresse'"/> <xsl:variable name="i18n.bt36" select="'Boîte postale'"/>
<xsl:variable name="i18n.bt38" select="'Code postal'"/> <xsl:variable name="i18n.bt162" select="'Supplément d''adresse'"/>
<xsl:variable name="i18n.bt37" select="'Lieu'"/> <xsl:variable name="i18n.bt38" select="'Code postal'"/>
<xsl:variable name="i18n.bt39" select="'Région'"/> <xsl:variable name="i18n.bt37" select="'Lieu'"/>
<xsl:variable name="i18n.bt40" select="'Code pays'"/> <xsl:variable name="i18n.bt39" select="'Région'"/>
<xsl:variable name="i18n.bt29" select="'Identifiant'"/> <xsl:variable name="i18n.bt40" select="'Code pays'"/>
<xsl:variable name="i18n.bt29-id" select="'Schéma de l''Identifiant'"/> <xsl:variable name="i18n.bt29" select="'Identifiant'"/>
<xsl:variable name="i18n.bt41" select="'Nom'"/> <xsl:variable name="i18n.bt29-id" select="'Schéma de l''Identifiant'"/>
<xsl:variable name="i18n.bt42" select="'Téléphone'"/> <xsl:variable name="i18n.bt41" select="'Nom'"/>
<xsl:variable name="i18n.bt43" select="'Adresse électronique'"/> <xsl:variable name="i18n.bt42" select="'Téléphone'"/>
<xsl:variable name="i18n.bt1" select="'Informations sur le vendeur'"/> <xsl:variable name="i18n.bt43" select="'Adresse électronique'"/>
<xsl:variable name="i18n.bt2" select="'Date de facture'"/> <xsl:variable name="i18n.bt1" select="'Informations sur le vendeur'"/>
<xsl:variable name="i18n.details" select="'Détails de la facturation'"/> <xsl:variable name="i18n.bt2" select="'Date de facture'"/>
<xsl:variable name="i18n.period" select="'Période de facturation'"/> <xsl:variable name="i18n.details" select="'Détails de la facturation'"/>
<xsl:variable name="i18n.bt3" select="'Type de facture'"/> <xsl:variable name="i18n.period" select="'Période de facturation'"/>
<xsl:variable name="i18n.bt5" select="'Devise'"/> <xsl:variable name="i18n.bt3" select="'Type de facture'"/>
<xsl:variable name="i18n.bt73" select="'de'"/> <xsl:variable name="i18n.bt5" select="'Devise'"/>
<xsl:variable name="i18n.bt74" select="'jusqu''à'"/> <xsl:variable name="i18n.bt73" select="'de'"/>
<xsl:variable name="i18n.bt11" select="'Numéro du projet'"/> <xsl:variable name="i18n.bt74" select="'jusqu''à'"/>
<xsl:variable name="i18n.bt12" select="'Numéro du contrat'"/> <xsl:variable name="i18n.bt11" select="'Numéro du projet'"/>
<xsl:variable name="i18n.bt13" select="'Numéro de commande'"/> <xsl:variable name="i18n.bt12" select="'Numéro du contrat'"/>
<xsl:variable name="i18n.bt14" select="'Numéro de commande'"/> <xsl:variable name="i18n.bt13" select="'Numéro de commande'"/>
<xsl:variable name="i18n.bt25" select="'Numéro de facture'"/> <xsl:variable name="i18n.bt14" select="'Numéro de commande'"/>
<xsl:variable name="i18n.bt26" select="'Date de facture'"/> <xsl:variable name="i18n.bt25" select="'Numéro de facture'"/>
<xsl:variable name="i18n.bg22" select="'Montants totaux de la facture'"/> <xsl:variable name="i18n.bt26" select="'Date de facture'"/>
<xsl:variable name="i18n.bt106" select="'Total de toutes les lignes'"/> <xsl:variable name="i18n.bg22" select="'Montants totaux de la facture'"/>
<xsl:variable name="i18n.bt107" select="'Total de remises'"/> <xsl:variable name="i18n.bt106" select="'Total de toutes les lignes'"/>
<xsl:variable name="i18n.bt108" select="'Total de suppléments'"/> <xsl:variable name="i18n.bt107" select="'Total de remises'"/>
<xsl:variable name="i18n.bt109" select="'Montant total'"/> <xsl:variable name="i18n.bt108" select="'Total de suppléments'"/>
<xsl:variable name="i18n.bt110" select="'montant de la TVA'"/> <xsl:variable name="i18n.bt109" select="'Montant total'"/>
<xsl:variable name="i18n.bt111" select="'Montant total de TVA'"/> <xsl:variable name="i18n.bt110" select="'montant de la TVA'"/>
<xsl:variable name="i18n.bt112" select="'Montant total'"/> <xsl:variable name="i18n.bt111" select="'Montant total de TVA'"/>
<xsl:variable name="i18n.bt113" select="'Montant payé'"/> <xsl:variable name="i18n.bt112" select="'Montant total'"/>
<xsl:variable name="i18n.bt114" select="'Montant arrondi'"/> <xsl:variable name="i18n.bt113" select="'Montant payé'"/>
<xsl:variable name="i18n.bt115" select="'Montant '"/> <xsl:variable name="i18n.bt114" select="'Montant arrondi'"/>
<xsl:variable name="i18n.bg23" select="'Ventilation de la TVA au niveau de la facture'"/> <xsl:variable name="i18n.bt115" select="'Montant dû'"/>
<xsl:variable name="i18n.bt118" select="'Catégorie de TVA'"/> <xsl:variable name="i18n.bg23" select="'Ventilation de la TVA au niveau de la facture'"/>
<xsl:variable name="i18n.bt116" select="'Montant total'"/> <xsl:variable name="i18n.bt118" select="'Catégorie de TVA'"/>
<xsl:variable name="i18n.bt119" select="'taux TVA'"/> <xsl:variable name="i18n.bt116" select="'Montant total'"/>
<xsl:variable name="i18n.bt117" select="'montant de la TVA'"/> <xsl:variable name="i18n.bt119" select="'taux TVA'"/>
<xsl:variable name="i18n.bt120" select="'Motif d''exemption'"/> <xsl:variable name="i18n.bt117" select="'montant de la TVA'"/>
<xsl:variable name="i18n.bt121" select="'Identifiant pour motif d''exemption'"/> <xsl:variable name="i18n.bt120" select="'Motif d''exemption'"/>
<xsl:variable name="i18n.bg20" select="'Allocation au niveau de la facture'"/> <xsl:variable name="i18n.bt121" select="'Identifiant pour motif d''exemption'"/>
<xsl:variable name="i18n.bt95" select="'Catégorie de TVA de la remise'"/> <xsl:variable name="i18n.bg20" select="'Allocation au niveau de la facture'"/>
<xsl:variable name="i18n.bt93" select="'Montant de base'"/> <xsl:variable name="i18n.bt95" select="'Catégorie de TVA de la remise'"/>
<xsl:variable name="i18n.bt94" select="'Pourcentage'"/> <xsl:variable name="i18n.bt93" select="'Montant de base'"/>
<xsl:variable name="i18n.bt92" select="'Allocation'"/> <xsl:variable name="i18n.bt94" select="'Pourcentage'"/>
<xsl:variable name="i18n.bt96" select="'Taux de TVA de la allocation'"/> <xsl:variable name="i18n.bt92" select="'Allocation'"/>
<xsl:variable name="i18n.bt97" select="'Motif de la remise'"/> <xsl:variable name="i18n.bt96" select="'Taux de TVA de la allocation'"/>
<xsl:variable name="i18n.bt98" select="'Document level allowance reason code'"/> <xsl:variable name="i18n.bt97" select="'Motif de la remise'"/>
<xsl:variable name="i18n.bg21" select="'Supplément au niveau de la facture'"/> <xsl:variable name="i18n.bt98" select="'Document level allowance reason code'"/>
<xsl:variable name="i18n.bt102" select="'Catégorie de TVA du supplément'"/> <xsl:variable name="i18n.bg21" select="'Supplément au niveau de la facture'"/>
<xsl:variable name="i18n.bt100" select="'Montant de base'"/> <xsl:variable name="i18n.bt102" select="'Catégorie de TVA du supplément'"/>
<xsl:variable name="i18n.bt101" select="'Pourcentage'"/> <xsl:variable name="i18n.bt100" select="'Montant de base'"/>
<xsl:variable name="i18n.bt99" select="'Supplément'"/> <xsl:variable name="i18n.bt101" select="'Pourcentage'"/>
<xsl:variable name="i18n.bt103" select="'Taux de TVA du supplément'"/> <xsl:variable name="i18n.bt99" select="'Supplément'"/>
<xsl:variable name="i18n.bt104" select="'Raison du supplément'"/> <xsl:variable name="i18n.bt103" select="'Taux de TVA du supplément'"/>
<xsl:variable name="i18n.bt105" select="'Document level charge reason code'"/> <xsl:variable name="i18n.bt104" select="'Raison du supplément'"/>
<xsl:variable name="i18n.bgx42" select="'Frais d''expédition'"/> <xsl:variable name="i18n.bt105" select="'Document level charge reason code'"/>
<xsl:variable name="i18n.btx274" select="'Catégorie de TVA des frais de port'"/> <xsl:variable name="i18n.bgx42" select="'Frais d''expédition'"/>
<xsl:variable name="i18n.btx272" select="'Montant'"/> <xsl:variable name="i18n.btx274" select="'Catégorie de TVA des frais de port'"/>
<xsl:variable name="i18n.btx273" select="'VAT rate of the shipping cost'"/> <xsl:variable name="i18n.btx272" select="'Montant'"/>
<xsl:variable name="i18n.btx271" select="'Taux de TVA des frais de port'"/> <xsl:variable name="i18n.btx273" select="'VAT rate of the shipping cost'"/>
<xsl:variable name="i18n.bt20" select="'Rabais; autres conditions de paiement'"/> <xsl:variable name="i18n.btx271" select="'Taux de TVA des frais de port'"/>
<xsl:variable name="i18n.bt9" select="'Date d''échéance'"/> <xsl:variable name="i18n.bt20" select="'Rabais; autres conditions de paiement'"/>
<xsl:variable name="i18n.bt81" select="'Code du moyen de paiement'"/> <xsl:variable name="i18n.bt9" select="'Date d''échéance'"/>
<xsl:variable name="i18n.bt82" select="'Moyens de paiement'"/> <xsl:variable name="i18n.bt81" select="'Code du moyen de paiement'"/>
<xsl:variable name="i18n.bt83" select="'Utilisation'"/> <xsl:variable name="i18n.bt82" select="'Moyens de paiement'"/>
<xsl:variable name="i18n.bg18" select="'Information de la carte'"/> <xsl:variable name="i18n.bt83" select="'Utilisation'"/>
<xsl:variable name="i18n.bt87" select="'Numéro de carte'"/> <xsl:variable name="i18n.bg18" select="'Information de la carte'"/>
<xsl:variable name="i18n.bt88" select="'Titulaire de la carte'"/> <xsl:variable name="i18n.bt87" select="'Numéro de carte'"/>
<xsl:variable name="i18n.bg19" select="'Prélèvement automatique'"/> <xsl:variable name="i18n.bt88" select="'Titulaire de la carte'"/>
<xsl:variable name="i18n.bt89" select="'Numéro de référence du mandat'"/> <xsl:variable name="i18n.bg19" select="'Prélèvement automatique'"/>
<xsl:variable name="i18n.bt91" select="'IBAN'"/> <xsl:variable name="i18n.bt89" select="'Numéro de référence du mandat'"/>
<xsl:variable name="i18n.bt90" select="'Identifiant du créancier'"/> <xsl:variable name="i18n.bt91" select="'IBAN'"/>
<xsl:variable name="i18n.bg17" select="'Transfert'"/> <xsl:variable name="i18n.bt90" select="'Identifiant du créancier'"/>
<xsl:variable name="i18n.bt85" select="'Titulaire du compte'"/> <xsl:variable name="i18n.bg17" select="'Transfert'"/>
<xsl:variable name="i18n.bt84" select="'IBAN'"/> <xsl:variable name="i18n.bt85" select="'Titulaire du compte'"/>
<xsl:variable name="i18n.bt86" select="'BIC'"/> <xsl:variable name="i18n.bt84" select="'IBAN'"/>
<xsl:variable name="i18n.bg1" select="'Commentaire sur la facture'"/> <xsl:variable name="i18n.bt86" select="'BIC'"/>
<xsl:variable name="i18n.bt21" select="'Objet'"/> <xsl:variable name="i18n.bg1" select="'Commentaire sur la facture'"/>
<xsl:variable name="i18n.bt22" select="'Commentaire'"/> <xsl:variable name="i18n.bt21" select="'Objet'"/>
<xsl:variable name="i18n.bt126" select="'Position'"/> <xsl:variable name="i18n.bt22" select="'Commentaire'"/>
<xsl:variable name="i18n.bt127" select="'Texte libre'"/> <xsl:variable name="i18n.bt126" select="'Position'"/>
<xsl:variable name="i18n.bt128" select="'Identifiant d''objet'"/> <xsl:variable name="i18n.bt127" select="'Texte libre'"/>
<xsl:variable name="i18n.bt128-id" select="'Schéma de l''Identifiant objet'"/> <xsl:variable name="i18n.bt128" select="'Identifiant d''objet'"/>
<xsl:variable name="i18n.bt132" select="'Numéro de ligne de commande'"/> <xsl:variable name="i18n.bt128-id" select="'Schéma de l''Identifiant objet'"/>
<xsl:variable name="i18n.bt133" select="'Information sur l''attribution de compte'"/> <xsl:variable name="i18n.bt132" select="'Numéro de ligne de commande'"/>
<xsl:variable name="i18n.bg26" select="'Période de facturation'"/> <xsl:variable name="i18n.bt133" select="'Information sur l''attribution de compte'"/>
<xsl:variable name="i18n.bt134" select="'de'"/> <xsl:variable name="i18n.bg26" select="'Période de facturation'"/>
<xsl:variable name="i18n.bt135" select="'jusqu''à'"/> <xsl:variable name="i18n.bt134" select="'de'"/>
<xsl:variable name="i18n.bg29" select="'Détails de prix'"/> <xsl:variable name="i18n.bt135" select="'jusqu''à'"/>
<xsl:variable name="i18n.bt129" select="'Quantité'"/> <xsl:variable name="i18n.bg29" select="'Détails de prix'"/>
<xsl:variable name="i18n.bt130" select="'Unité'"/> <xsl:variable name="i18n.bt129" select="'Quantité'"/>
<xsl:variable name="i18n.bt146" select="'Prix unitaire net'"/> <xsl:variable name="i18n.bt130" select="'Unité'"/>
<xsl:variable name="i18n.bt131" select="'Prix total net'"/> <xsl:variable name="i18n.bt146" select="'Prix unitaire net'"/>
<xsl:variable name="i18n.bt147" select="'Remise nette'"/> <xsl:variable name="i18n.bt131" select="'Prix total net'"/>
<xsl:variable name="i18n.bt148" select="'Prix catalogue (net)'"/> <xsl:variable name="i18n.bt147" select="'Remise nette'"/>
<xsl:variable name="i18n.bt149" select="'Nombre d''unités'"/> <xsl:variable name="i18n.bt148" select="'Prix catalogue (net)'"/>
<xsl:variable name="i18n.bt150" select="'Code de l''unité de mesure '"/> <xsl:variable name="i18n.bt149" select="'Nombre d''unités'"/>
<xsl:variable name="i18n.bt151" select="'TVA'"/> <xsl:variable name="i18n.bt150" select="'Code de l''unité de mesure '"/>
<xsl:variable name="i18n.bt152" select="'Pourcentage de TVA'"/> <xsl:variable name="i18n.bt151" select="'TVA'"/>
<xsl:variable name="i18n.bg27" select="'Allocations au niveau de la ligne de facture'"/> <xsl:variable name="i18n.bt152" select="'Pourcentage de TVA'"/>
<xsl:variable name="i18n.bt137" select="'Montant de base net'"/> <xsl:variable name="i18n.bg27" select="'Allocations au niveau de la ligne de facture'"/>
<xsl:variable name="i18n.bt138" select="'Pourcentage'"/> <xsl:variable name="i18n.bt137" select="'Montant de base net'"/>
<xsl:variable name="i18n.bt136" select="'Allocation nette'"/> <xsl:variable name="i18n.bt138" select="'Pourcentage'"/>
<xsl:variable name="i18n.bt139" select="'Raison pour l''allocation '"/> <xsl:variable name="i18n.bt136" select="'Allocation nette'"/>
<xsl:variable name="i18n.bt140" select="'Code de la raison pour l''allocation'"/> <xsl:variable name="i18n.bt139" select="'Raison pour l''allocation '"/>
<xsl:variable name="i18n.bg28" select="'Supplément au niveau de la ligne de facture'"/> <xsl:variable name="i18n.bt140" select="'Code de la raison pour l''allocation'"/>
<xsl:variable name="i18n.bt142" select="'Montant de base net'"/> <xsl:variable name="i18n.bg28" select="'Supplément au niveau de la ligne de facture'"/>
<xsl:variable name="i18n.bt143" select="'Pourcentage'"/> <xsl:variable name="i18n.bt142" select="'Montant de base net'"/>
<xsl:variable name="i18n.bt141" select="'Supplément net'"/> <xsl:variable name="i18n.bt143" select="'Pourcentage'"/>
<xsl:variable name="i18n.bt144" select="'Raison du supplément'"/> <xsl:variable name="i18n.bt141" select="'Supplément net'"/>
<xsl:variable name="i18n.bt145" select="'Code de la raison du supplément'"/> <xsl:variable name="i18n.bt144" select="'Raison du supplément'"/>
<xsl:variable name="i18n.bg31" select="'Informations sur l''article'"/> <xsl:variable name="i18n.bt145" select="'Code de la raison du supplément'"/>
<xsl:variable name="i18n.bt153" select="'Nom'"/> <xsl:variable name="i18n.bg31" select="'Informations sur l''article'"/>
<xsl:variable name="i18n.bt154" select="'Description'"/> <xsl:variable name="i18n.bt153" select="'Nom'"/>
<xsl:variable name="i18n.bt155" select="'Numéro d''article'"/> <xsl:variable name="i18n.bt154" select="'Description'"/>
<xsl:variable name="i18n.bt156" select="'N° client / matériel'"/> <xsl:variable name="i18n.bt155" select="'Numéro d''article'"/>
<xsl:variable name="i18n.bg32" select="'Propriétés de l''article'"/> <xsl:variable name="i18n.bt156" select="'N° client / matériel'"/>
<xsl:variable name="i18n.bt157" select="'Identifiant article'"/> <xsl:variable name="i18n.bg32" select="'Propriétés de l''article'"/>
<xsl:variable name="i18n.bt157-id" select="'Schéma de l''Identifiant article'"/> <xsl:variable name="i18n.bt157" select="'Identifiant article'"/>
<xsl:variable name="i18n.bt158" select="'Code de classification des articles'"/> <xsl:variable name="i18n.bt157-id" select="'Schéma de l''Identifiant article'"/>
<xsl:variable name="i18n.bt158-id" select="'Identifiant pour la création du schéma'"/> <xsl:variable name="i18n.bt158" select="'Code de classification des articles'"/>
<xsl:variable name="i18n.bt157-vers-id" select="'Version de création du schéma'"/> <xsl:variable name="i18n.bt158-id" select="'Identifiant pour la création du schéma'"/>
<xsl:variable name="i18n.bt159" select="'Code du pays d''origine'"/> <xsl:variable name="i18n.bt157-vers-id" select="'Version de création du schéma'"/>
<xsl:variable name="i18n.bg4" select="'Informations sur le vendeur'"/> <xsl:variable name="i18n.bt159" select="'Code du pays d''origine'"/>
<xsl:variable name="i18n.bt28" select="'Nom commercial différent'"/> <xsl:variable name="i18n.bg4" select="'Informations sur le vendeur'"/>
<xsl:variable name="i18n.bt34" select="'Adresse électronique'"/> <xsl:variable name="i18n.bt28" select="'Nom commercial différent'"/>
<xsl:variable name="i18n.bt34-id" select="'Schéma de l''adresse électronique'"/> <xsl:variable name="i18n.bt34" select="'Adresse électronique'"/>
<xsl:variable name="i18n.bt30" select="'Numéro d''enregistrement'"/> <xsl:variable name="i18n.bt34-id" select="'Schéma de l''adresse électronique'"/>
<xsl:variable name="i18n.bt31" select="'Identifiant TVA'"/> <xsl:variable name="i18n.bt30" select="'Numéro d''enregistrement'"/>
<xsl:variable name="i18n.bt32" select="'Numéro fiscale'"/> <xsl:variable name="i18n.bt31" select="'Identifiant TVA'"/>
<xsl:variable name="i18n.bt32-schema" select="'Schéma du numéro fiscal'"/> <xsl:variable name="i18n.bt32" select="'Numéro fiscale'"/>
<xsl:variable name="i18n.bt33" select="'Autres informations légales'"/> <xsl:variable name="i18n.bt32-schema" select="'Schéma du numéro fiscal'"/>
<xsl:variable name="i18n.bt6" select="'Code devise de la TVA'"/> <xsl:variable name="i18n.bt33" select="'Autres informations légales'"/>
<xsl:variable name="i18n.bg11" select="'Représentant fiscal du vendeur'"/> <xsl:variable name="i18n.bt6" select="'Code devise de la TVA'"/>
<xsl:variable name="i18n.bt62" select="'Nom'"/> <xsl:variable name="i18n.bg11" select="'Représentant fiscal du vendeur'"/>
<xsl:variable name="i18n.bt64" select="'Rue / Numéro de maison'"/> <xsl:variable name="i18n.bt62" select="'Nom'"/>
<xsl:variable name="i18n.bt65" select="'Boîte postale'"/> <xsl:variable name="i18n.bt64" select="'Rue / Numéro de maison'"/>
<xsl:variable name="i18n.bt164" select="'Supplément d''adresse'"/> <xsl:variable name="i18n.bt65" select="'Boîte postale'"/>
<xsl:variable name="i18n.bt67" select="'Code postal'"/> <xsl:variable name="i18n.bt164" select="'Supplément d''adresse'"/>
<xsl:variable name="i18n.bt66" select="'Lieu'"/> <xsl:variable name="i18n.bt67" select="'Code postal'"/>
<xsl:variable name="i18n.bt68" select="'Région'"/> <xsl:variable name="i18n.bt66" select="'Lieu'"/>
<xsl:variable name="i18n.bt69" select="'Code pays'"/> <xsl:variable name="i18n.bt68" select="'Région'"/>
<xsl:variable name="i18n.bt63" select="'Identifiant TVA'"/> <xsl:variable name="i18n.bt69" select="'Code pays'"/>
<xsl:variable name="i18n.bg7" select="'Informations sur l''acheteur'"/> <xsl:variable name="i18n.bt63" select="'Identifiant TVA'"/>
<xsl:variable name="i18n.bt45" select="'Nom commercial différent '"/> <xsl:variable name="i18n.bg7" select="'Informations sur l''acheteur'"/>
<xsl:variable name="i18n.bt49" select="'Adresse électronique'"/> <xsl:variable name="i18n.bt45" select="'Nom commercial différent '"/>
<xsl:variable name="i18n.bt49-id" select="'Schéma de l''adresse électronique'"/> <xsl:variable name="i18n.bt49" select="'Adresse électronique'"/>
<xsl:variable name="i18n.bt47" select="'Numéro d''enregistrement'"/> <xsl:variable name="i18n.bt49-id" select="'Schéma de l''adresse électronique'"/>
<xsl:variable name="i18n.bt47-id" select="'Schéma du numéro d''enregistrement'"/> <xsl:variable name="i18n.bt47" select="'Numéro d''enregistrement'"/>
<xsl:variable name="i18n.bt48" select="'Identifiant TVA'"/> <xsl:variable name="i18n.bt47-id" select="'Schéma du numéro d''enregistrement'"/>
<xsl:variable name="i18n.bt7" select="'Date de facturation de la TVA'"/> <xsl:variable name="i18n.bt48" select="'Identifiant TVA'"/>
<xsl:variable name="i18n.bt8" select="'Code de date de règlement de la TVA'"/> <xsl:variable name="i18n.bt7" select="'Date de facturation de la TVA'"/>
<xsl:variable name="i18n.bt19" select="'Informations sur l''attribution de compte'"/> <xsl:variable name="i18n.bt8" select="'Code de date de règlement de la TVA'"/>
<xsl:variable name="i18n.bg13" select="'Informations de livraison'"/> <xsl:variable name="i18n.bt19" select="'Informations sur l''attribution de compte'"/>
<xsl:variable name="i18n.bt71" select="'Identification du lieu de livraison'"/> <xsl:variable name="i18n.bg13" select="'Informations de livraison'"/>
<xsl:variable name="i18n.bt71-id" select="'Schéma de l''Identifiant'"/> <xsl:variable name="i18n.bt71" select="'Identification du lieu de livraison'"/>
<xsl:variable name="i18n.bt72" select="'Date de livraison'"/> <xsl:variable name="i18n.bt71-id" select="'Schéma de l''Identifiant'"/>
<xsl:variable name="i18n.bt70" select="'Nom du destinataire'"/> <xsl:variable name="i18n.bt72" select="'Date de livraison'"/>
<xsl:variable name="i18n.bt75" select="'Rue / Numéro de maison'"/> <xsl:variable name="i18n.bt70" select="'Nom du destinataire'"/>
<xsl:variable name="i18n.bt76" select="'Boîte postale'"/> <xsl:variable name="i18n.bt75" select="'Rue / Numéro de maison'"/>
<xsl:variable name="i18n.bt165" select="'Supplément d''adresse'"/> <xsl:variable name="i18n.bt76" select="'Boîte postale'"/>
<xsl:variable name="i18n.bt78" select="'Code postal'"/> <xsl:variable name="i18n.bt165" select="'Supplément d''adresse'"/>
<xsl:variable name="i18n.bt77" select="'Lieu'"/> <xsl:variable name="i18n.bt78" select="'Code postal'"/>
<xsl:variable name="i18n.bt79" select="'Région'"/> <xsl:variable name="i18n.bt77" select="'Lieu'"/>
<xsl:variable name="i18n.bt80" select="'Pays'"/> <xsl:variable name="i18n.bt79" select="'Région'"/>
<xsl:variable name="i18n.bt17" select="'Numéro d''attribution'"/> <xsl:variable name="i18n.bt80" select="'Pays'"/>
<xsl:variable name="i18n.bt15" select="'Identifiant de l''accusé de réception'"/> <xsl:variable name="i18n.bt17" select="'Numéro d''attribution'"/>
<xsl:variable name="i18n.bt16" select="'Identifiant du bordereau d''expédition'"/> <xsl:variable name="i18n.bt15" select="'Identifiant de l''accusé de réception'"/>
<xsl:variable name="i18n.bt23" select="'Identifiant processus'"/> <xsl:variable name="i18n.bt16" select="'Identifiant du bordereau d''expédition'"/>
<xsl:variable name="i18n.bt24" select="'Identifiant spécification'"/> <xsl:variable name="i18n.btx202" select="'Identifiant du bon de livraison'"/>
<xsl:variable name="i18n.bt18" select="'Identifiant objet'"/> <xsl:variable name="i18n.bt23" select="'Identifiant processus'"/>
<xsl:variable name="i18n.bt18-id" select="'Schéma de l''Identifiant objet'"/> <xsl:variable name="i18n.bt24" select="'Identifiant spécification'"/>
<xsl:variable name="i18n.bg10" select="'bénéficiaire autre que le vendeur'"/> <xsl:variable name="i18n.bt18" select="'Identifiant objet'"/>
<xsl:variable name="i18n.bt59" select="'Nom'"/> <xsl:variable name="i18n.bt18-id" select="'Schéma de l''Identifiant objet'"/>
<xsl:variable name="i18n.bt60" select="'Identifiant'"/> <xsl:variable name="i18n.bg10" select="'bénéficiaire autre que le vendeur'"/>
<xsl:variable name="i18n.bt60-id" select="'Schéma de l''Identifiant'"/> <xsl:variable name="i18n.bt59" select="'Nom'"/>
<xsl:variable name="i18n.bt61" select="'Numéro d''enregistrement'"/> <xsl:variable name="i18n.bt60" select="'Identifiant'"/>
<xsl:variable name="i18n.bt61-id" select="'Schéma du numéro d''enregistrement'"/> <xsl:variable name="i18n.bt60-id" select="'Schéma de l''Identifiant'"/>
<xsl:variable name="i18n.bg24" select="'Documents justificatifs'"/> <xsl:variable name="i18n.bt61" select="'Numéro d''enregistrement'"/>
<xsl:variable name="i18n.bt122" select="'Identifiant'"/> <xsl:variable name="i18n.bt61-id" select="'Schéma du numéro d''enregistrement'"/>
<xsl:variable name="i18n.bt123" select="'Description'"/> <xsl:variable name="i18n.bg24" select="'Documents justificatifs'"/>
<xsl:variable name="i18n.bt124" select="'Référence (par exemple l''adresse Internet)'"/> <xsl:variable name="i18n.bt122" select="'Identifiant'"/>
<xsl:variable name="i18n.bt125" select="'Document joint'"/> <xsl:variable name="i18n.bt123" select="'Description'"/>
<xsl:variable name="i18n.bt125-format" select="'Format du document joint'"/> <xsl:variable name="i18n.bt124" select="'Référence (par exemple l''adresse Internet)'"/>
<xsl:variable name="i18n.bt125-name" select="'Nom du document joint '"/> <xsl:variable name="i18n.bt125" select="'Document joint'"/>
<xsl:variable name="i18n.historyDate" select="'Date/heure'"/> <xsl:variable name="i18n.bt125-format" select="'Format du document joint'"/>
<xsl:variable name="i18n.historySubject" select="'Objet'"/> <xsl:variable name="i18n.bt125-name" select="'Nom du document joint '"/>
<xsl:variable name="i18n.historyText" select="'Texte'"/> <xsl:variable name="i18n.historyDate" select="'Date/heure'"/>
<xsl:variable name="i18n.historyDetails" select="'Détails'"/> <xsl:variable name="i18n.historySubject" select="'Objet'"/>
<xsl:variable name="i18n.payment" select="'Détails de paiement'"/> <xsl:variable name="i18n.historyText" select="'Texte'"/>
<xsl:variable name="i18n.contract_information" select="'Informations sur le contrat'"/> <xsl:variable name="i18n.historyDetails" select="'Détails'"/>
<xsl:variable name="i18n.preceding_invoice_reference" select="'Factures précédentes'"/> <xsl:variable name="i18n.payment" select="'Détails de paiement'"/>
<xsl:variable name="i18n.contract_information" select="'Informations sur le contrat'"/>
<xsl:include href="xrechnung-html.univ.xsl"/> <xsl:variable name="i18n.preceding_invoice_reference" select="'Factures précédentes'"/>
</xsl:stylesheet> <xsl:include href="xrechnung-html.univ.xsl"/>
</xsl:stylesheet>

View File

@@ -1144,17 +1144,29 @@ function downloadData (element_id) {
<xsl:apply-templates select="./xr:VAT_BREAKDOWN"/> <xsl:apply-templates select="./xr:VAT_BREAKDOWN"/>
</div> </div>
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig"> <xsl:choose>
<xsl:apply-templates select="./xr:DOCUMENT_LEVEL_ALLOWANCES"/> <xsl:when test="./xr:DOCUMENT_LEVEL_ALLOWANCES">
</div> <div class="boxtabelle boxabstandtop boxtabelleZweispaltig">
<xsl:apply-templates select="./xr:DOCUMENT_LEVEL_ALLOWANCES"/>
</div>
</xsl:when>
</xsl:choose>
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig"> <xsl:choose>
<xsl:apply-templates select="./xr:DOCUMENT_LEVEL_CHARGES"/> <xsl:when test="./xr:DOCUMENT_LEVEL_CHARGES">
</div> <div class="boxtabelle boxabstandtop boxtabelleZweispaltig">
<xsl:apply-templates select="./xr:DOCUMENT_LEVEL_CHARGES"/>
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig"> </div>
<xsl:apply-templates select="./xr:LOGISTICS_SERVICE_CHARGES"/> </xsl:when>
</div> </xsl:choose>
<xsl:choose>
<xsl:when test="./xr:LOGISTICS_SERVICE_CHARGES">
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig">
<xsl:apply-templates select="./xr:LOGISTICS_SERVICE_CHARGES"/>
</div>
</xsl:when>
</xsl:choose>
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig first"> <div class="boxtabelle boxabstandtop boxtabelleZweispaltig first">
<div class="boxzeile"> <div class="boxzeile">
@@ -2182,11 +2194,24 @@ function downloadData (element_id) {
</div> </div>
<div class="boxzeile"> <div class="boxzeile">
<div class="boxdaten legende"><xsl:value-of select="$i18n.bt15"/>:</div> <div class="boxdaten legende"><xsl:value-of select="$i18n.bt15"/>:</div>
<div id="BT-15" title="BT-15" class="boxdaten wert"><xsl:value-of select="xr:Receiving_advice_reference"/></div> <div id="BT-15" title="BT-15" class="boxdaten wert">
<xsl:value-of select="xr:Receiving_advice_reference"/>
<xsl:if test="xr:Receiving_advice_reference/@bt-x-201"><xsl:value-of select="concat($i18n.dateOf, format-date(xr:Receiving_advice_reference/@bt-x-201,'[D].[M].[Y]'))"/></xsl:if>
</div>
</div> </div>
<div class="boxzeile"> <div class="boxzeile">
<div class="boxdaten legende"><xsl:value-of select="$i18n.bt16"/>:</div> <div class="boxdaten legende"><xsl:value-of select="$i18n.bt16"/>:</div>
<div id="BT-16" title="BT-16" class="boxdaten wert"><xsl:value-of select="xr:Despatch_advice_reference"/></div> <div id="BT-16" title="BT-16" class="boxdaten wert">
<xsl:value-of select="xr:Despatch_advice_reference"/>
<xsl:if test="xr:Despatch_advice_reference/@bt-x-200"><xsl:value-of select="concat($i18n.dateOf, format-date(xr:Despatch_advice_reference/@bt-x-200,'[D].[M].[Y]'))"/></xsl:if>
</div>
</div>
<div class="boxzeile">
<div class="boxdaten legende"><xsl:value-of select="$i18n.btx202"/>:</div>
<div id="BT-X-202" title="BT-X-202" class="boxdaten wert">
<xsl:value-of select="xr:Delivery_note_reference"/>
<xsl:if test="xr:Delivery_note_reference/@bt-x-203"><xsl:value-of select="concat($i18n.dateOf, format-date(xr:Delivery_note_reference/@bt-x-203,'[D].[M].[Y]'))"/></xsl:if>
</div>
</div> </div>
<div class="boxzeile"> <div class="boxzeile">
<div class="boxdaten legende"><xsl:value-of select="$i18n.bt23"/>:</div> <div class="boxdaten legende"><xsl:value-of select="$i18n.bt23"/>:</div>

View File

@@ -22,10 +22,9 @@ package org.mustangproject.ZUGFeRD;
import org.junit.FixMethodOrder; import org.junit.FixMethodOrder;
import org.junit.runners.MethodSorters; import org.junit.runners.MethodSorters;
import org.mustangproject.ZUGFeRD.ZUGFeRDVisualizer.Language;
import org.mustangproject.util.ByteArraySearcher; import org.mustangproject.util.ByteArraySearcher;
import org.xml.sax.SAXException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerException;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@@ -40,179 +39,34 @@ public class VisualizationTest extends ResourceCase {
final String TARGET_PDF_UBL = "./target/testout-Visualization-cii.pdf"; final String TARGET_PDF_UBL = "./target/testout-Visualization-cii.pdf";
public void testCIIVisualizationBasic() { public void testCIIVisualizationBasic() {
this.runZUGFeRDVisualization("factur-x.xml", "factur-x-vis.fr.html", Language.FR);
// the writing part
String sourceFilename = "factur-x.xml";
File CIIinputFile = getResourceAsFile(sourceFilename);
String expected = null;
String result = null;
try {
ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer();
/* remove file endings so that tests can also pass after checking
out from git with arbitrary options (which may include CSRF changes)
*/
result = zvi.visualize(CIIinputFile.getAbsolutePath(), ZUGFeRDVisualizer.Language.FR);
Files.write(Paths.get("./target/testout-factur-x-vis.fr.html"), result.getBytes(StandardCharsets.UTF_8));
result = result
.replace("\r", "")
.replace("\n", "")
.replace("\t", "")
.replace(" ", "");
File expectedResult = getResourceAsFile("factur-x-vis.fr.html");
expected = new String(Files.readAllBytes(expectedResult.toPath()), StandardCharsets.UTF_8)
.replace("\r", "")
.replace("\n", "")
.replace("\t", "")
.replace(" ", "");
// remove linebreaks as well...
} catch (UnsupportedOperationException e) {
fail("UnsupportedOperationException should not happen: " + e.getMessage());
} catch (IllegalArgumentException e) {
fail("IllegalArgumentException should not happen: " + e.getMessage());
} catch (TransformerException e) {
fail("TransformerException should not happen: " + e.getMessage());
} catch (IOException e) {
fail("IOException should not happen: " + e.getMessage());
} catch (ParserConfigurationException e) {
fail("ParserConfigurationException should not happen: " + e.getMessage());
} catch (SAXException e) {
fail("SAXException should not happen: " + e.getMessage());
}
assertNotNull(result);
// Reading ZUGFeRD
assertEquals(expected, result);
} }
public void testCIIVisualizationExtended() { public void testCIIVisualizationExtended() {
this.runZUGFeRDVisualization("factur-x-extended.xml", "factur-x-vis-extended.de.html", Language.DE);
// the writing part
String sourceFilename = "factur-x-extended.xml";
File CIIinputFile = getResourceAsFile(sourceFilename);
String expected = null;
String result = null;
try {
ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer();
/* remove file endings so that tests can also pass after checking
out from git with arbitrary options (which may include CSRF changes)
*/
result = zvi.visualize(CIIinputFile.getAbsolutePath(), ZUGFeRDVisualizer.Language.DE);
Files.write(Paths.get("./target/testout-factur-x-vis-extended.de.html"), result.getBytes(StandardCharsets.UTF_8));
result = result
.replace("\r", "")
.replace("\n", "")
.replace("\t", "")
.replace(" ", "");
File expectedResult = getResourceAsFile("factur-x-vis-extended.de.html");
expected = new String(Files.readAllBytes(expectedResult.toPath()), StandardCharsets.UTF_8)
.replace("\r", "")
.replace("\n", "")
.replace("\t", "")
.replace(" ", "");
// remove linebreaks as well...
} catch (UnsupportedOperationException e) {
fail("UnsupportedOperationException should not happen: " + e.getMessage());
} catch (IllegalArgumentException e) {
fail("IllegalArgumentException should not happen: " + e.getMessage());
} catch (TransformerException e) {
fail("TransformerException should not happen: " + e.getMessage());
} catch (IOException e) {
fail("IOException should not happen: " + e.getMessage());
} catch (ParserConfigurationException e) {
fail("ParserConfigurationException should not happen: " + e.getMessage());
} catch (SAXException e) {
fail("SAXException should not happen: " + e.getMessage());
}
assertNotNull(result);
// Reading ZUGFeRD
assertEquals(expected, result);
} }
public void testUBLCreditNoteVisualizationBasic() { public void testUBLCreditNoteVisualizationBasic() {
this.runZUGFeRDVisualization("ubl-creditnote.xml", "factur-x-vis-ubl-creditnote.en.html", Language.EN);
// the writing part
File UBLinputFile = getResourceAsFile("ubl-creditnote.xml");
String expected = null;
String result = null;
try {
ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer();
/* remove file endings so that tests can also pass after checking
out from git with arbitrary options (which may include CSRF changes)
*/
result = zvi.visualize(UBLinputFile.getAbsolutePath(), ZUGFeRDVisualizer.Language.EN);
Files.write(Paths.get("./target/testout-factur-x-vis-ubl-creditnote.en.html"), result.getBytes(StandardCharsets.UTF_8));
result = result
.replace("\r", "")
.replace("\n", "")
.replace("\t", "")
.replace(" ", "");
File expectedResult = getResourceAsFile("factur-x-vis-ubl-creditnote.en.html");
expected = new String(Files.readAllBytes(expectedResult.toPath()), StandardCharsets.UTF_8)
.replace("\r", "")
.replace("\n", "")
.replace("\t", "")
.replace(" ", "");
// remove linebreaks as well...
} catch (UnsupportedOperationException e) {
fail("UnsupportedOperationException should not happen: " + e.getMessage());
} catch (IllegalArgumentException e) {
fail("IllegalArgumentException should not happen: " + e.getMessage());
} catch (TransformerException e) {
fail("TransformerException should not happen: " + e.getMessage());
} catch (IOException e) {
fail("IOException should not happen: " + e.getMessage());
} catch (ParserConfigurationException e) {
fail("ParserConfigurationException should not happen: " + e.getMessage());
} catch (SAXException e) {
fail("SAXException should not happen: " + e.getMessage());
}
assertNotNull(result);
// Reading ZUGFeRD
assertEquals(expected, result);
} }
public void testUBLVisualizationBasic() { public void testUBLVisualizationBasic() {
this.runZUGFeRDVisualization("ubl/01.01a-INVOICE.ubl.xml", "factur-x-vis-ubl.en.html", Language.EN);
}
// the writing part private void runZUGFeRDVisualization(String inputFilename, String resultFileName, Language lang) {
File UBLinputFile = getResourceAsFile("ubl/01.01a-INVOICE.ubl.xml"); File CIIinputFile = getResourceAsFile(inputFilename);
String expected = null; String expected = null;
String result = null; String result = null;
try { try {
ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer(); ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer();
/* remove file endings so that tests can also pass after checking result = zvi.visualize(CIIinputFile.getAbsolutePath(), lang);
out from git with arbitrary options (which may include CSRF changes) Files.write(Paths.get("./target/testout-" + resultFileName), result.getBytes(StandardCharsets.UTF_8));
*/
result = zvi.visualize(UBLinputFile.getAbsolutePath(), ZUGFeRDVisualizer.Language.EN);
Files.write(Paths.get("./target/testout-factur-x-vis-ubl.en.html"), result.getBytes(StandardCharsets.UTF_8));
result = result
.replace("\r", "")
.replace("\n", "")
.replace("\t", "")
.replace(" ", "");
File expectedResult = getResourceAsFile("factur-x-vis-ubl.en.html"); File expectedResult = getResourceAsFile(resultFileName);
expected = new String(Files.readAllBytes(expectedResult.toPath()), StandardCharsets.UTF_8) expected = new String(Files.readAllBytes(expectedResult.toPath()), StandardCharsets.UTF_8)
.replace("\r", "") ;
.replace("\n", "")
.replace("\t", "")
.replace(" ", "");
// remove linebreaks as well...
} catch (UnsupportedOperationException e) { } catch (UnsupportedOperationException e) {
fail("UnsupportedOperationException should not happen: " + e.getMessage()); fail("UnsupportedOperationException should not happen: " + e.getMessage());
@@ -222,16 +76,20 @@ public class VisualizationTest extends ResourceCase {
fail("TransformerException should not happen: " + e.getMessage()); fail("TransformerException should not happen: " + e.getMessage());
} catch (IOException e) { } catch (IOException e) {
fail("IOException should not happen: " + e.getMessage()); fail("IOException should not happen: " + e.getMessage());
} catch (ParserConfigurationException e) {
fail("ParserConfigurationException should not happen: " + e.getMessage());
} catch (SAXException e) {
fail("SAXException should not happen: " + e.getMessage());
} }
assertNotNull(result); assertNotNull(result);
// Reading ZUGFeRD /* remove file endings so that tests can also pass after checking
assertEquals(expected, result); out from git with arbitrary options (which may include CSRF changes)
*/
assertEquals(expected.replace("\r", "")
.replace("\n", "")
.replace("\t", "")
.replace(" ", ""), result.replace("\r", "")
.replace("\n", "")
.replace("\t", "")
.replace(" ", ""));
} }
public void testPDFVisualizationCII() { public void testPDFVisualizationCII() {

View File

@@ -542,7 +542,7 @@ public class ZF2PushTest extends TestCase {
.addAllowance(new Allowance(new BigDecimal(0.2)).setReason("discount").setTaxPercent(new BigDecimal(16))) .addAllowance(new Allowance(new BigDecimal(0.2)).setReason("discount").setTaxPercent(new BigDecimal(16)))
.addCashDiscount(new CashDiscount(new BigDecimal(2), 14)) .addCashDiscount(new CashDiscount(new BigDecimal(2), 14))
.setDeliveryDate(sdf.parse("2020-11-02")).setNumber(number).setVATDueDateTypeCode(EventTimeCodeTypeConstants.PAYMENT_DATE) .setDeliveryDate(sdf.parse("2020-11-02")).setNumber(number).setVATDueDateTypeCode(EventTimeCodeTypeConstants.PAYMENT_DATE)
.setInvoiceReferencedDocumentID("abc123") .setInvoiceReferencedDocumentID("abc123").addInvoiceReferencedDocument(new ReferencedDocument("abcd1234"))
); );
} catch (ParseException e) { } catch (ParseException e) {
e.printStackTrace(); e.printStackTrace();
@@ -587,6 +587,8 @@ public class ZF2PushTest extends TestCase {
Invoice i = zii.extractInvoice(); Invoice i = zii.extractInvoice();
assertEquals("abc123", i.getInvoiceReferencedDocumentID()); assertEquals("abc123", i.getInvoiceReferencedDocumentID());
assertEquals(1, i.getInvoiceReferencedDocuments().size());
assertEquals("abcd1234", i.getInvoiceReferencedDocuments().get(0).getIssuerAssignedID());
assertEquals("4304171000002", i.getRecipient().getGlobalID()); assertEquals("4304171000002", i.getRecipient().getGlobalID());
assertEquals("2001015001325", i.getZFItems()[0].getProduct().getGlobalID()); assertEquals("2001015001325", i.getZFItems()[0].getProduct().getGlobalID());
assertEquals(orgID, i.getSender().getID()); assertEquals(orgID, i.getSender().getID());

View File

@@ -466,4 +466,12 @@ public class ZF2ZInvoiceImporterTest extends ResourceCase {
assertFalse(invoice.getZFItems()[0].getNotes() == null); assertFalse(invoice.getZFItems()[0].getNotes() == null);
assertEquals(1, invoice.getZFItems()[0].getNotes().length); assertEquals(1, invoice.getZFItems()[0].getNotes().length);
} }
@Test
public void testImportXRechnungWithoutCalculationErrors() throws FileNotFoundException, XPathExpressionException, ParseException {
File inputFile = getResourceAsFile("cii/02.03a-INVOICE_uncefact.xml");
ZUGFeRDInvoiceImporter zii = new ZUGFeRDInvoiceImporter(new FileInputStream(inputFile));
assertEquals("0", zii.importedInvoice.getDuePayable().toPlainString());
}
} }

File diff suppressed because one or more lines are too long

View File

@@ -1,427 +1,430 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- English disclaimer below.--> <!-- English disclaimer below.-->
<!--Nutzungsrechte <!--Nutzungsrechte
ZUGFeRD Datenformat Version 2.3.0, 18.09.2024 ZUGFeRD Datenformat Version 2.3.0, 18.09.2024
Beispiel Version 18.09.2024 Beispiel Version 18.09.2024
Zweck des Forums elektronisch Rechnung Deutschland, welches am 31. März 2010 unter der Arbeitsgemeinschaft für Zweck des Forums elektronisch Rechnung Deutschland, welches am 31. März 2010 unter der Arbeitsgemeinschaft für
wirtschaftliche Verwaltung e. V. gegründet wurde, ist u. a. die Schaffung und Spezifizierung eines offenen Datenformats wirtschaftliche Verwaltung e. V. gegründet wurde, ist u. a. die Schaffung und Spezifizierung eines offenen Datenformats
für strukturierten elektronischen Datenaustausch auf der Grundlage offener und nicht diskriminierender, standardisierter für strukturierten elektronischen Datenaustausch auf der Grundlage offener und nicht diskriminierender, standardisierter
Technologien („ZUGFeRD Datenformat“). Technologien („ZUGFeRD Datenformat“).
Das ZUGFeRD Datenformat wird nach Maßgabe des FeRD sowohl Unternehmen als auch der öffentlichen Verwaltung Das ZUGFeRD Datenformat wird nach Maßgabe des FeRD sowohl Unternehmen als auch der öffentlichen Verwaltung
frei zugänglich gemacht. Hierfür bietet FeRD allen Unternehmen und Organisationen der öffentlichen Verwaltung eine frei zugänglich gemacht. Hierfür bietet FeRD allen Unternehmen und Organisationen der öffentlichen Verwaltung eine
Lizenz für die Nutzung des urheberrechtlich geschützten ZUGFeRD-Datenformats zu fairen, sachgerechten und nicht Lizenz für die Nutzung des urheberrechtlich geschützten ZUGFeRD-Datenformats zu fairen, sachgerechten und nicht
diskriminierenden Bedingungen an. diskriminierenden Bedingungen an.
Die Spezifikation des FeRD zur Implementierung des ZUGFeRD Datenformats ist in ihrer jeweils geltenden Fassung Die Spezifikation des FeRD zur Implementierung des ZUGFeRD Datenformats ist in ihrer jeweils geltenden Fassung
abrufbar unter www.ferd-net.de. abrufbar unter www.ferd-net.de.
Im Einzelnen schließt die Nutzungsgewährung ein: Im Einzelnen schließt die Nutzungsgewährung ein:
===================================== =====================================
FeRD räumt eine Lizenz für die Nutzung des urheberrechtlich geschützten ZUGFeRD Datenformats in der jeweils FeRD räumt eine Lizenz für die Nutzung des urheberrechtlich geschützten ZUGFeRD Datenformats in der jeweils
geltenden und akzeptierten Fassung (www.ferd-net.de) ein. geltenden und akzeptierten Fassung (www.ferd-net.de) ein.
Die Lizenz beinhaltet ein unwiderrufliches Nutzungsrecht einschließlich des Rechts der Weiterentwicklung, Die Lizenz beinhaltet ein unwiderrufliches Nutzungsrecht einschließlich des Rechts der Weiterentwicklung,
Weiterbearbeitung und Verbindung mit anderen Produkten. Weiterbearbeitung und Verbindung mit anderen Produkten.
Die Lizenz gilt insbesondere für die Entwicklung, die Gestaltung, die Herstellung, den Verkauf, die Nutzung oder Die Lizenz gilt insbesondere für die Entwicklung, die Gestaltung, die Herstellung, den Verkauf, die Nutzung oder
anderweitige Verwendung des ZUGFeRD Datenformats für Hardware- und/oder Softwareprodukte sowie sonstige anderweitige Verwendung des ZUGFeRD Datenformats für Hardware- und/oder Softwareprodukte sowie sonstige
Anwendungen und Dienste. Anwendungen und Dienste.
Diese Lizenz schließt nicht die wesentlichen Patente der Mitglieder von FeRD ein. Als wesentliche Patente sind Patente Diese Lizenz schließt nicht die wesentlichen Patente der Mitglieder von FeRD ein. Als wesentliche Patente sind Patente
und Patentanmeldungen weltweit zu verstehen, die einen oder mehrere Patentansprüche beinhalten, bei denen es sich um und Patentanmeldungen weltweit zu verstehen, die einen oder mehrere Patentansprüche beinhalten, bei denen es sich um
notwendige Ansprüche handelt. Notwendige Ansprüche sind lediglich jene Ansprüche der Wesentlichen Patente, die durch notwendige Ansprüche handelt. Notwendige Ansprüche sind lediglich jene Ansprüche der Wesentlichen Patente, die durch
die Implementierung des ZUGFeRD Datenformats notwendigerweise verletzt würden. die Implementierung des ZUGFeRD Datenformats notwendigerweise verletzt würden.
Der Lizenznehmer ist berechtigt, seinen jeweiligen Konzerngesellschaften ein unbefristetes, weltweites, nicht übertragbares, Der Lizenznehmer ist berechtigt, seinen jeweiligen Konzerngesellschaften ein unbefristetes, weltweites, nicht übertragbares,
unwiderrufliches Nutzungsrecht einschließlich des Rechts der Weiterentwicklung, Weiterbearbeitung und Verbindung mit unwiderrufliches Nutzungsrecht einschließlich des Rechts der Weiterentwicklung, Weiterbearbeitung und Verbindung mit
anderen Produkten einzuräumen. anderen Produkten einzuräumen.
Die Lizenz wird kostenfrei zur Verfügung gestellt. Die Lizenz wird kostenfrei zur Verfügung gestellt.
Außer im Falle vorsätzlichen Verschuldens oder grober Fahrlässigkeit haftet FeRD weder für Nutzungsausfall, entgangenen Außer im Falle vorsätzlichen Verschuldens oder grober Fahrlässigkeit haftet FeRD weder für Nutzungsausfall, entgangenen
Gewinn, Datenverlust, Kommunikationsverlust, Einnahmeausfall, Vertragseinbußen, Geschäftsausfall oder für Kosten, Gewinn, Datenverlust, Kommunikationsverlust, Einnahmeausfall, Vertragseinbußen, Geschäftsausfall oder für Kosten,
Schäden, Verluste oder Haftpflichten im Zusammenhang mit einer Unterbrechung der Geschäftstätigkeit, noch für konkrete, Schäden, Verluste oder Haftpflichten im Zusammenhang mit einer Unterbrechung der Geschäftstätigkeit, noch für konkrete,
beiläufig entstandene, mittelbare Schäden, Straf- oder Folgeschäden und zwar auch dann nicht, wenn die Möglichkeit der beiläufig entstandene, mittelbare Schäden, Straf- oder Folgeschäden und zwar auch dann nicht, wenn die Möglichkeit der
Kosten, Verluste bzw. Schäden hätte normalerweise vorhergesehen werden können.--> Kosten, Verluste bzw. Schäden hätte normalerweise vorhergesehen werden können.-->
<!--Right of use <!--Right of use
ZUGFeRD Data format version 2.3.0, September 18th, 2024 ZUGFeRD Data format version 2.3.0, September 18th, 2024
The purpose of the Forum elektronische Rechnung Deutschland (FeRD), which was founded on March 31, 2010 under the The purpose of the Forum elektronische Rechnung Deutschland (FeRD), which was founded on March 31, 2010 under the
umbrella of Arbeitsgemeinschaft für wirtschaftliche Verwaltung e. V., is, among other things, to create and specify an umbrella of Arbeitsgemeinschaft für wirtschaftliche Verwaltung e. V., is, among other things, to create and specify an
open data format for structured electronic data exchange on the basis of open and non discriminatory, standardised open data format for structured electronic data exchange on the basis of open and non discriminatory, standardised
technologies ("ZUGFeRD data format"). technologies ("ZUGFeRD data format").
The ZUGFeRD data format is used by both companies and public administration according to the FeRD The ZUGFeRD data format is used by both companies and public administration according to the FeRD
made freely accessible. For this purpose FeRD offers all companies and organisations of the public administration a made freely accessible. For this purpose FeRD offers all companies and organisations of the public administration a
License to use the copyrighted ZUGFeRD data format in a fair, appropriate and non License to use the copyrighted ZUGFeRD data format in a fair, appropriate and non
discriminatory conditions. discriminatory conditions.
The specification of the FeRD for the implementation of the ZUGFeRD data format is, in its currently valid version The specification of the FeRD for the implementation of the ZUGFeRD data format is, in its currently valid version
available at www.ferd-net.de. available at www.ferd-net.de.
In detail, the grant of use includes In detail, the grant of use includes
===================================== =====================================
FeRD grants a license for the use of the copyrighted ZUGFeRD data format in the respective FeRD grants a license for the use of the copyrighted ZUGFeRD data format in the respective
valid and accepted version (www.ferd-net.de). valid and accepted version (www.ferd-net.de).
The license includes an irrevocable right of use including the right of further development, The license includes an irrevocable right of use including the right of further development,
Further processing and connection with other products. Further processing and connection with other products.
The license applies in particular to the development, design, production, sale, use or The license applies in particular to the development, design, production, sale, use or
other use of the ZUGFeRD data format for hardware and/or software products and other other use of the ZUGFeRD data format for hardware and/or software products and other
applications and services. applications and services.
This license does not include the essential patents of the members of FeRD. The essential patents are patents This license does not include the essential patents of the members of FeRD. The essential patents are patents
and patent applications worldwide which contain one or more claims that are and patent applications worldwide which contain one or more claims that are
necessary claims. Necessary claims are only those claims of the essential patents which are necessary claims. Necessary claims are only those claims of the essential patents which are
the implementation of the ZUGFeRD data format would necessarily be violated. the implementation of the ZUGFeRD data format would necessarily be violated.
The Licensee is entitled to provide its respective group companies with an unlimited, worldwide, non-transferable, The Licensee is entitled to provide its respective group companies with an unlimited, worldwide, non-transferable,
irrevocable right of use including the right of further development, further processing and connection with irrevocable right of use including the right of further development, further processing and connection with
other products. other products.
The license is provided free of charge. The license is provided free of charge.
Except in the case of intentional fault or gross negligence, FeRD is not liable for loss of use, loss of Except in the case of intentional fault or gross negligence, FeRD is not liable for loss of use, loss of
Profit, loss of data, loss of communication, loss of revenue, loss of contracts, loss of business or for costs Profit, loss of data, loss of communication, loss of revenue, loss of contracts, loss of business or for costs
damages, losses or liabilities in connection with an interruption of business, nor for concrete, damages, losses or liabilities in connection with an interruption of business, nor for concrete,
incidental, indirect, punitive or consequential damages, even if the possibility of incidental, indirect, punitive or consequential damages, even if the possibility of
costs, losses or damages could normally have been foreseen.--> costs, losses or damages could normally have been foreseen.-->
<rsm:CrossIndustryInvoice xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100" xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"> <rsm:CrossIndustryInvoice xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100" xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100">
<rsm:ExchangedDocumentContext> <rsm:ExchangedDocumentContext>
<ram:TestIndicator> <ram:TestIndicator>
<udt:Indicator>true</udt:Indicator> <udt:Indicator>true</udt:Indicator>
</ram:TestIndicator> </ram:TestIndicator>
<ram:GuidelineSpecifiedDocumentContextParameter> <ram:GuidelineSpecifiedDocumentContextParameter>
<ram:ID>urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended</ram:ID> <ram:ID>urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended</ram:ID>
</ram:GuidelineSpecifiedDocumentContextParameter> </ram:GuidelineSpecifiedDocumentContextParameter>
</rsm:ExchangedDocumentContext> </rsm:ExchangedDocumentContext>
<rsm:ExchangedDocument> <rsm:ExchangedDocument>
<ram:ID>KR87654321012</ram:ID> <ram:ID>KR87654321012</ram:ID>
<ram:Name>KOSTENRECHNUNG</ram:Name> <ram:Name>KOSTENRECHNUNG</ram:Name>
<ram:TypeCode>380</ram:TypeCode> <ram:TypeCode>380</ram:TypeCode>
<ram:IssueDateTime> <ram:IssueDateTime>
<udt:DateTimeString format="102">20241115</udt:DateTimeString> <udt:DateTimeString format="102">20241115</udt:DateTimeString>
</ram:IssueDateTime> </ram:IssueDateTime>
<ram:IncludedNote> <ram:IncludedNote>
<ram:ContentCode>ST3</ram:ContentCode> <ram:ContentCode>ST3</ram:ContentCode>
<ram:Content>Es bestehen Rabatt- oder Bonusvereinbarungen.</ram:Content> <ram:Content>Es bestehen Rabatt- oder Bonusvereinbarungen.</ram:Content>
<ram:SubjectCode>AAK</ram:SubjectCode> <ram:SubjectCode>AAK</ram:SubjectCode>
</ram:IncludedNote> </ram:IncludedNote>
<ram:IncludedNote> <ram:IncludedNote>
<ram:ContentCode>EEV</ram:ContentCode> <ram:ContentCode>EEV</ram:ContentCode>
<ram:Content>Der Verkäufer bleibt Eigentümer der Waren bis zur vollständigen Erfüllung der Kaufpreisforderung.</ram:Content> <ram:Content>Der Verkäufer bleibt Eigentümer der Waren bis zur vollständigen Erfüllung der Kaufpreisforderung.</ram:Content>
<ram:SubjectCode>AAJ</ram:SubjectCode> <ram:SubjectCode>AAJ</ram:SubjectCode>
</ram:IncludedNote> </ram:IncludedNote>
<ram:IncludedNote> <ram:IncludedNote>
<ram:Content>MUSTERLIEFERANT GMBH <ram:Content>MUSTERLIEFERANT GMBH
BAHNHOFSTRASSE 99 BAHNHOFSTRASSE 99
99199 MUSTERHAUSEN 99199 MUSTERHAUSEN
Geschäftsführung: Geschäftsführung:
Max Mustermann Max Mustermann
USt-IdNr: DE123456789 USt-IdNr: DE123456789
Telefon: +49 932 431 0 Telefon: +49 932 431 0
www.musterlieferant.de www.musterlieferant.de
HRB Nr. 372876 HRB Nr. 372876
Amtsgericht Musterstadt Amtsgericht Musterstadt
GLN 4304171000002 GLN 4304171000002
</ram:Content> </ram:Content>
<ram:SubjectCode>REG</ram:SubjectCode> <ram:SubjectCode>REG</ram:SubjectCode>
</ram:IncludedNote> </ram:IncludedNote>
</rsm:ExchangedDocument> </rsm:ExchangedDocument>
<rsm:SupplyChainTradeTransaction> <rsm:SupplyChainTradeTransaction>
<ram:IncludedSupplyChainTradeLineItem> <ram:IncludedSupplyChainTradeLineItem>
<ram:AssociatedDocumentLineDocument> <ram:AssociatedDocumentLineDocument>
<ram:LineID>1</ram:LineID> <ram:LineID>1</ram:LineID>
</ram:AssociatedDocumentLineDocument> </ram:AssociatedDocumentLineDocument>
<ram:SpecifiedTradeProduct> <ram:SpecifiedTradeProduct>
<ram:GlobalID schemeID="0088">4123456000014</ram:GlobalID> <ram:GlobalID schemeID="0088">4123456000014</ram:GlobalID>
<ram:SellerAssignedID>WA997</ram:SellerAssignedID> <ram:SellerAssignedID>WA997</ram:SellerAssignedID>
<ram:Name>Wirkarbeit HT</ram:Name> <ram:Name>Wirkarbeit HT</ram:Name>
<ram:ApplicableProductCharacteristic> <ram:ApplicableProductCharacteristic>
<ram:Description>Zählpunkt</ram:Description> <ram:Description>Zählpunkt</ram:Description>
<ram:Value>DE0001346484600000000000000100038</ram:Value> <ram:Value>DE0001346484600000000000000100038</ram:Value>
</ram:ApplicableProductCharacteristic> </ram:ApplicableProductCharacteristic>
</ram:SpecifiedTradeProduct> </ram:SpecifiedTradeProduct>
<ram:SpecifiedLineTradeAgreement> <ram:SpecifiedLineTradeAgreement>
<ram:GrossPriceProductTradePrice> <ram:GrossPriceProductTradePrice>
<ram:ChargeAmount>0.0520</ram:ChargeAmount> <ram:ChargeAmount>0.0520</ram:ChargeAmount>
</ram:GrossPriceProductTradePrice> </ram:GrossPriceProductTradePrice>
<ram:NetPriceProductTradePrice> <ram:NetPriceProductTradePrice>
<ram:ChargeAmount>0.0520</ram:ChargeAmount> <ram:ChargeAmount>0.0520</ram:ChargeAmount>
</ram:NetPriceProductTradePrice> </ram:NetPriceProductTradePrice>
</ram:SpecifiedLineTradeAgreement> </ram:SpecifiedLineTradeAgreement>
<ram:SpecifiedLineTradeDelivery> <ram:SpecifiedLineTradeDelivery>
<ram:BilledQuantity unitCode="KWH">1000.0000</ram:BilledQuantity> <ram:BilledQuantity unitCode="KWH">1000.0000</ram:BilledQuantity>
</ram:SpecifiedLineTradeDelivery> </ram:SpecifiedLineTradeDelivery>
<ram:SpecifiedLineTradeSettlement> <ram:SpecifiedLineTradeSettlement>
<ram:ApplicableTradeTax> <ram:ApplicableTradeTax>
<ram:TypeCode>VAT</ram:TypeCode> <ram:TypeCode>VAT</ram:TypeCode>
<ram:CategoryCode>S</ram:CategoryCode> <ram:CategoryCode>S</ram:CategoryCode>
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent> <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
</ram:ApplicableTradeTax> </ram:ApplicableTradeTax>
<ram:SpecifiedTradeSettlementLineMonetarySummation> <ram:SpecifiedTradeSettlementLineMonetarySummation>
<ram:LineTotalAmount>52.00</ram:LineTotalAmount> <ram:LineTotalAmount>52.00</ram:LineTotalAmount>
</ram:SpecifiedTradeSettlementLineMonetarySummation> </ram:SpecifiedTradeSettlementLineMonetarySummation>
</ram:SpecifiedLineTradeSettlement> </ram:SpecifiedLineTradeSettlement>
</ram:IncludedSupplyChainTradeLineItem> </ram:IncludedSupplyChainTradeLineItem>
<ram:IncludedSupplyChainTradeLineItem> <ram:IncludedSupplyChainTradeLineItem>
<ram:AssociatedDocumentLineDocument> <ram:AssociatedDocumentLineDocument>
<ram:LineID>2</ram:LineID> <ram:LineID>2</ram:LineID>
</ram:AssociatedDocumentLineDocument> </ram:AssociatedDocumentLineDocument>
<ram:SpecifiedTradeProduct> <ram:SpecifiedTradeProduct>
<ram:GlobalID schemeID="0088">4123456000021</ram:GlobalID> <ram:GlobalID schemeID="0088">4123456000021</ram:GlobalID>
<ram:SellerAssignedID>ÖST250</ram:SellerAssignedID> <ram:SellerAssignedID>ÖST250</ram:SellerAssignedID>
<ram:Name>Ökosteuer Lieferant</ram:Name> <ram:Name>Ökosteuer Lieferant</ram:Name>
</ram:SpecifiedTradeProduct> </ram:SpecifiedTradeProduct>
<ram:SpecifiedLineTradeAgreement> <ram:SpecifiedLineTradeAgreement>
<ram:GrossPriceProductTradePrice> <ram:GrossPriceProductTradePrice>
<ram:ChargeAmount>0.0205</ram:ChargeAmount> <ram:ChargeAmount>0.0205</ram:ChargeAmount>
</ram:GrossPriceProductTradePrice> </ram:GrossPriceProductTradePrice>
<ram:NetPriceProductTradePrice> <ram:NetPriceProductTradePrice>
<ram:ChargeAmount>0.0205</ram:ChargeAmount> <ram:ChargeAmount>0.0205</ram:ChargeAmount>
</ram:NetPriceProductTradePrice> </ram:NetPriceProductTradePrice>
</ram:SpecifiedLineTradeAgreement> </ram:SpecifiedLineTradeAgreement>
<ram:SpecifiedLineTradeDelivery> <ram:SpecifiedLineTradeDelivery>
<ram:BilledQuantity unitCode="KWH">1000.0000</ram:BilledQuantity> <ram:BilledQuantity unitCode="KWH">1000.0000</ram:BilledQuantity>
</ram:SpecifiedLineTradeDelivery> </ram:SpecifiedLineTradeDelivery>
<ram:SpecifiedLineTradeSettlement> <ram:SpecifiedLineTradeSettlement>
<ram:ApplicableTradeTax> <ram:ApplicableTradeTax>
<ram:TypeCode>VAT</ram:TypeCode> <ram:TypeCode>VAT</ram:TypeCode>
<ram:CategoryCode>S</ram:CategoryCode> <ram:CategoryCode>S</ram:CategoryCode>
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent> <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
</ram:ApplicableTradeTax> </ram:ApplicableTradeTax>
<ram:SpecifiedTradeSettlementLineMonetarySummation> <ram:SpecifiedTradeSettlementLineMonetarySummation>
<ram:LineTotalAmount>20.50</ram:LineTotalAmount> <ram:LineTotalAmount>20.50</ram:LineTotalAmount>
</ram:SpecifiedTradeSettlementLineMonetarySummation> </ram:SpecifiedTradeSettlementLineMonetarySummation>
</ram:SpecifiedLineTradeSettlement> </ram:SpecifiedLineTradeSettlement>
</ram:IncludedSupplyChainTradeLineItem> </ram:IncludedSupplyChainTradeLineItem>
<ram:IncludedSupplyChainTradeLineItem> <ram:IncludedSupplyChainTradeLineItem>
<ram:AssociatedDocumentLineDocument> <ram:AssociatedDocumentLineDocument>
<ram:LineID>3</ram:LineID> <ram:LineID>3</ram:LineID>
</ram:AssociatedDocumentLineDocument> </ram:AssociatedDocumentLineDocument>
<ram:SpecifiedTradeProduct> <ram:SpecifiedTradeProduct>
<ram:GlobalID schemeID="0088">4260331811362</ram:GlobalID> <ram:GlobalID schemeID="0088">4260331811362</ram:GlobalID>
<ram:Name>Kommissionierer 1250032 D. Muster</ram:Name> <ram:Name>Kommissionierer 1250032 D. Muster</ram:Name>
<ram:Description>Besteller: Hr. Mayer, Personalnr. 4488</ram:Description> <ram:Description>Besteller: Hr. Mayer, Personalnr. 4488</ram:Description>
</ram:SpecifiedTradeProduct> </ram:SpecifiedTradeProduct>
<ram:SpecifiedLineTradeAgreement> <ram:SpecifiedLineTradeAgreement>
<ram:GrossPriceProductTradePrice> <ram:GrossPriceProductTradePrice>
<ram:ChargeAmount>15.0000</ram:ChargeAmount> <ram:ChargeAmount>15.0000</ram:ChargeAmount>
<ram:AppliedTradeAllowanceCharge> <ram:AppliedTradeAllowanceCharge>
<ram:ChargeIndicator> <ram:ChargeIndicator>
<udt:Indicator>false</udt:Indicator> <udt:Indicator>false</udt:Indicator>
</ram:ChargeIndicator> </ram:ChargeIndicator>
<ram:ActualAmount>4.50</ram:ActualAmount> <ram:ActualAmount>4.50</ram:ActualAmount>
<ram:Reason>Artikelrabatt 1</ram:Reason> <ram:Reason>Artikelrabatt 1</ram:Reason>
</ram:AppliedTradeAllowanceCharge> </ram:AppliedTradeAllowanceCharge>
</ram:GrossPriceProductTradePrice> </ram:GrossPriceProductTradePrice>
<ram:NetPriceProductTradePrice> <ram:NetPriceProductTradePrice>
<ram:ChargeAmount>10.5000</ram:ChargeAmount> <ram:ChargeAmount>10.5000</ram:ChargeAmount>
</ram:NetPriceProductTradePrice> </ram:NetPriceProductTradePrice>
</ram:SpecifiedLineTradeAgreement> </ram:SpecifiedLineTradeAgreement>
<ram:SpecifiedLineTradeDelivery> <ram:SpecifiedLineTradeDelivery>
<ram:BilledQuantity unitCode="HUR">27.5000</ram:BilledQuantity> <ram:BilledQuantity unitCode="HUR">27.5000</ram:BilledQuantity>
</ram:SpecifiedLineTradeDelivery> </ram:SpecifiedLineTradeDelivery>
<ram:SpecifiedLineTradeSettlement> <ram:SpecifiedLineTradeSettlement>
<ram:ApplicableTradeTax> <ram:ApplicableTradeTax>
<ram:TypeCode>VAT</ram:TypeCode> <ram:TypeCode>VAT</ram:TypeCode>
<ram:CategoryCode>S</ram:CategoryCode> <ram:CategoryCode>S</ram:CategoryCode>
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent> <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
</ram:ApplicableTradeTax> </ram:ApplicableTradeTax>
<ram:SpecifiedTradeSettlementLineMonetarySummation> <ram:SpecifiedTradeSettlementLineMonetarySummation>
<ram:LineTotalAmount>288.75</ram:LineTotalAmount> <ram:LineTotalAmount>288.75</ram:LineTotalAmount>
</ram:SpecifiedTradeSettlementLineMonetarySummation> </ram:SpecifiedTradeSettlementLineMonetarySummation>
</ram:SpecifiedLineTradeSettlement> </ram:SpecifiedLineTradeSettlement>
</ram:IncludedSupplyChainTradeLineItem> </ram:IncludedSupplyChainTradeLineItem>
<ram:IncludedSupplyChainTradeLineItem> <ram:IncludedSupplyChainTradeLineItem>
<ram:AssociatedDocumentLineDocument> <ram:AssociatedDocumentLineDocument>
<ram:LineID>4</ram:LineID> <ram:LineID>4</ram:LineID>
</ram:AssociatedDocumentLineDocument> </ram:AssociatedDocumentLineDocument>
<ram:SpecifiedTradeProduct> <ram:SpecifiedTradeProduct>
<ram:GlobalID schemeID="0088">2001015001325</ram:GlobalID> <ram:GlobalID schemeID="0088">2001015001325</ram:GlobalID>
<ram:SellerAssignedID>FB05</ram:SellerAssignedID> <ram:SellerAssignedID>FB05</ram:SellerAssignedID>
<ram:Name>FALTENBEUTEL 16x6x28 CM</ram:Name> <ram:Name>FALTENBEUTEL 16x6x28 CM</ram:Name>
</ram:SpecifiedTradeProduct> </ram:SpecifiedTradeProduct>
<ram:SpecifiedLineTradeAgreement> <ram:SpecifiedLineTradeAgreement>
<ram:GrossPriceProductTradePrice> <ram:GrossPriceProductTradePrice>
<ram:ChargeAmount>0.0105</ram:ChargeAmount> <ram:ChargeAmount>0.0105</ram:ChargeAmount>
</ram:GrossPriceProductTradePrice> </ram:GrossPriceProductTradePrice>
<ram:NetPriceProductTradePrice> <ram:NetPriceProductTradePrice>
<ram:ChargeAmount>0.0105</ram:ChargeAmount> <ram:ChargeAmount>0.0105</ram:ChargeAmount>
</ram:NetPriceProductTradePrice> </ram:NetPriceProductTradePrice>
</ram:SpecifiedLineTradeAgreement> </ram:SpecifiedLineTradeAgreement>
<ram:SpecifiedLineTradeDelivery> <ram:SpecifiedLineTradeDelivery>
<ram:BilledQuantity unitCode="H87">3500.0000</ram:BilledQuantity> <ram:BilledQuantity unitCode="H87">3500.0000</ram:BilledQuantity>
</ram:SpecifiedLineTradeDelivery> </ram:SpecifiedLineTradeDelivery>
<ram:SpecifiedLineTradeSettlement> <ram:SpecifiedLineTradeSettlement>
<ram:ApplicableTradeTax> <ram:ApplicableTradeTax>
<ram:TypeCode>VAT</ram:TypeCode> <ram:TypeCode>VAT</ram:TypeCode>
<ram:CategoryCode>S</ram:CategoryCode> <ram:CategoryCode>S</ram:CategoryCode>
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent> <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
</ram:ApplicableTradeTax> </ram:ApplicableTradeTax>
<ram:SpecifiedTradeSettlementLineMonetarySummation> <ram:SpecifiedTradeSettlementLineMonetarySummation>
<ram:LineTotalAmount>36.75</ram:LineTotalAmount> <ram:LineTotalAmount>36.75</ram:LineTotalAmount>
</ram:SpecifiedTradeSettlementLineMonetarySummation> </ram:SpecifiedTradeSettlementLineMonetarySummation>
</ram:SpecifiedLineTradeSettlement> </ram:SpecifiedLineTradeSettlement>
</ram:IncludedSupplyChainTradeLineItem> </ram:IncludedSupplyChainTradeLineItem>
<ram:IncludedSupplyChainTradeLineItem> <ram:IncludedSupplyChainTradeLineItem>
<ram:AssociatedDocumentLineDocument> <ram:AssociatedDocumentLineDocument>
<ram:LineID>5</ram:LineID> <ram:LineID>5</ram:LineID>
</ram:AssociatedDocumentLineDocument> </ram:AssociatedDocumentLineDocument>
<ram:SpecifiedTradeProduct> <ram:SpecifiedTradeProduct>
<ram:GlobalID schemeID="0088">4123456000038</ram:GlobalID> <ram:GlobalID schemeID="0088">4123456000038</ram:GlobalID>
<ram:SellerAssignedID>KOP05</ram:SellerAssignedID> <ram:SellerAssignedID>KOP05</ram:SellerAssignedID>
<ram:Name>Kopierpapier A4</ram:Name> <ram:Name>Kopierpapier A4</ram:Name>
<ram:Description>Zählerstand von-bis: 543210 - 544420</ram:Description> <ram:Description>Zählerstand von-bis: 543210 - 544420</ram:Description>
<ram:ApplicableProductCharacteristic> <ram:ApplicableProductCharacteristic>
<ram:Description>Zähler-Nr.</ram:Description> <ram:Description>Zähler-Nr.</ram:Description>
<ram:Value>MG-X79318</ram:Value> <ram:Value>MG-X79318</ram:Value>
</ram:ApplicableProductCharacteristic> </ram:ApplicableProductCharacteristic>
</ram:SpecifiedTradeProduct> </ram:SpecifiedTradeProduct>
<ram:SpecifiedLineTradeAgreement> <ram:SpecifiedLineTradeAgreement>
<ram:GrossPriceProductTradePrice> <ram:GrossPriceProductTradePrice>
<ram:ChargeAmount>0.0100</ram:ChargeAmount> <ram:ChargeAmount>0.0100</ram:ChargeAmount>
</ram:GrossPriceProductTradePrice> </ram:GrossPriceProductTradePrice>
<ram:NetPriceProductTradePrice> <ram:NetPriceProductTradePrice>
<ram:ChargeAmount>0.0100</ram:ChargeAmount> <ram:ChargeAmount>0.0100</ram:ChargeAmount>
</ram:NetPriceProductTradePrice> </ram:NetPriceProductTradePrice>
</ram:SpecifiedLineTradeAgreement> </ram:SpecifiedLineTradeAgreement>
<ram:SpecifiedLineTradeDelivery> <ram:SpecifiedLineTradeDelivery>
<ram:BilledQuantity unitCode="H87">1210.0000</ram:BilledQuantity> <ram:BilledQuantity unitCode="H87">1210.0000</ram:BilledQuantity>
</ram:SpecifiedLineTradeDelivery> </ram:SpecifiedLineTradeDelivery>
<ram:SpecifiedLineTradeSettlement> <ram:SpecifiedLineTradeSettlement>
<ram:ApplicableTradeTax> <ram:ApplicableTradeTax>
<ram:TypeCode>VAT</ram:TypeCode> <ram:TypeCode>VAT</ram:TypeCode>
<ram:CategoryCode>S</ram:CategoryCode> <ram:CategoryCode>S</ram:CategoryCode>
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent> <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
</ram:ApplicableTradeTax> </ram:ApplicableTradeTax>
<ram:SpecifiedTradeSettlementLineMonetarySummation> <ram:SpecifiedTradeSettlementLineMonetarySummation>
<ram:LineTotalAmount>12.10</ram:LineTotalAmount> <ram:LineTotalAmount>12.10</ram:LineTotalAmount>
</ram:SpecifiedTradeSettlementLineMonetarySummation> </ram:SpecifiedTradeSettlementLineMonetarySummation>
</ram:SpecifiedLineTradeSettlement> </ram:SpecifiedLineTradeSettlement>
</ram:IncludedSupplyChainTradeLineItem> </ram:IncludedSupplyChainTradeLineItem>
<ram:ApplicableHeaderTradeAgreement> <ram:ApplicableHeaderTradeAgreement>
<ram:SellerTradeParty> <ram:SellerTradeParty>
<ram:ID>549910</ram:ID> <ram:ID>549910</ram:ID>
<ram:GlobalID schemeID="0088">4333741000005</ram:GlobalID> <ram:GlobalID schemeID="0088">4333741000005</ram:GlobalID>
<ram:Name>MUSTERLIEFERANT GMBH</ram:Name> <ram:Name>MUSTERLIEFERANT GMBH</ram:Name>
<ram:DefinedTradeContact> <ram:DefinedTradeContact>
<ram:TelephoneUniversalCommunication> <ram:TelephoneUniversalCommunication>
<ram:CompleteNumber>+49 932 431 500</ram:CompleteNumber> <ram:CompleteNumber>+49 932 431 500</ram:CompleteNumber>
</ram:TelephoneUniversalCommunication> </ram:TelephoneUniversalCommunication>
<ram:EmailURIUniversalCommunication> <ram:EmailURIUniversalCommunication>
<ram:URIID>max.mustermann@musterlieferant.de</ram:URIID> <ram:URIID>max.mustermann@musterlieferant.de</ram:URIID>
</ram:EmailURIUniversalCommunication> </ram:EmailURIUniversalCommunication>
</ram:DefinedTradeContact> </ram:DefinedTradeContact>
<ram:PostalTradeAddress> <ram:PostalTradeAddress>
<ram:PostcodeCode>99199</ram:PostcodeCode> <ram:PostcodeCode>99199</ram:PostcodeCode>
<ram:LineOne>BAHNHOFSTRASSE 99</ram:LineOne> <ram:LineOne>BAHNHOFSTRASSE 99</ram:LineOne>
<ram:CityName>MUSTERHAUSEN</ram:CityName> <ram:CityName>MUSTERHAUSEN</ram:CityName>
<ram:CountryID>DE</ram:CountryID> <ram:CountryID>DE</ram:CountryID>
</ram:PostalTradeAddress> </ram:PostalTradeAddress>
<ram:SpecifiedTaxRegistration> <ram:SpecifiedTaxRegistration>
<ram:ID schemeID="FC">201/113/40209</ram:ID> <ram:ID schemeID="FC">201/113/40209</ram:ID>
</ram:SpecifiedTaxRegistration> </ram:SpecifiedTaxRegistration>
</ram:SellerTradeParty> </ram:SellerTradeParty>
<ram:BuyerTradeParty> <ram:BuyerTradeParty>
<ram:ID>339420</ram:ID> <ram:ID>339420</ram:ID>
<ram:GlobalID schemeID="0088">4304171000002</ram:GlobalID> <ram:GlobalID schemeID="0088">4304171000002</ram:GlobalID>
<ram:Name>MUSTER-KUNDE GMBH</ram:Name> <ram:Name>MUSTER-KUNDE GMBH</ram:Name>
<ram:PostalTradeAddress> <ram:PostalTradeAddress>
<ram:PostcodeCode>40235</ram:PostcodeCode> <ram:PostcodeCode>40235</ram:PostcodeCode>
<ram:LineOne>KUNDENWEG 88</ram:LineOne> <ram:LineOne>KUNDENWEG 88</ram:LineOne>
<ram:CityName>DUESSELDORF</ram:CityName> <ram:CityName>DUESSELDORF</ram:CityName>
<ram:CountryID>DE</ram:CountryID> <ram:CountryID>DE</ram:CountryID>
</ram:PostalTradeAddress> </ram:PostalTradeAddress>
</ram:BuyerTradeParty> </ram:BuyerTradeParty>
<ram:AdditionalReferencedDocument> <ram:AdditionalReferencedDocument>
<ram:IssuerAssignedID>A777123</ram:IssuerAssignedID> <ram:IssuerAssignedID>A777123</ram:IssuerAssignedID>
<ram:TypeCode>130</ram:TypeCode> <ram:TypeCode>130</ram:TypeCode>
</ram:AdditionalReferencedDocument> </ram:AdditionalReferencedDocument>
</ram:ApplicableHeaderTradeAgreement> </ram:ApplicableHeaderTradeAgreement>
<ram:ApplicableHeaderTradeDelivery> <ram:ApplicableHeaderTradeDelivery>
<ram:ShipToTradeParty> <ram:ShipToTradeParty>
<ram:GlobalID schemeID="0088">4304171088093</ram:GlobalID> <ram:GlobalID schemeID="0088">4304171088093</ram:GlobalID>
<ram:Name>MUSTER-MARKT</ram:Name> <ram:Name>MUSTER-MARKT</ram:Name>
<ram:DefinedTradeContact> <ram:DefinedTradeContact>
<ram:DepartmentName>7322</ram:DepartmentName> <ram:DepartmentName>7322</ram:DepartmentName>
</ram:DefinedTradeContact> </ram:DefinedTradeContact>
<ram:PostalTradeAddress> <ram:PostalTradeAddress>
<ram:PostcodeCode>31157</ram:PostcodeCode> <ram:PostcodeCode>31157</ram:PostcodeCode>
<ram:LineOne>HAUPTSTRASSE 44</ram:LineOne> <ram:LineOne>HAUPTSTRASSE 44</ram:LineOne>
<ram:CityName>SARSTEDT</ram:CityName> <ram:CityName>SARSTEDT</ram:CityName>
<ram:CountryID>DE</ram:CountryID> <ram:CountryID>DE</ram:CountryID>
</ram:PostalTradeAddress> </ram:PostalTradeAddress>
</ram:ShipToTradeParty> </ram:ShipToTradeParty>
<ram:ActualDeliverySupplyChainEvent> <ram:ActualDeliverySupplyChainEvent>
<ram:OccurrenceDateTime> <ram:OccurrenceDateTime>
<udt:DateTimeString format="102">20241030</udt:DateTimeString> <udt:DateTimeString format="102">20241030</udt:DateTimeString>
</ram:OccurrenceDateTime> </ram:OccurrenceDateTime>
</ram:ActualDeliverySupplyChainEvent> </ram:ActualDeliverySupplyChainEvent>
<ram:DeliveryNoteReferencedDocument> <ram:DeliveryNoteReferencedDocument>
<ram:IssuerAssignedID>L87654321012</ram:IssuerAssignedID> <ram:IssuerAssignedID>L87654321012</ram:IssuerAssignedID>
</ram:DeliveryNoteReferencedDocument> <ram:FormattedIssueDateTime>
</ram:ApplicableHeaderTradeDelivery> <qdt:DateTimeString format="102">20241031</qdt:DateTimeString>
<ram:ApplicableHeaderTradeSettlement> </ram:FormattedIssueDateTime>
<ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode> </ram:DeliveryNoteReferencedDocument>
<ram:InvoiceeTradeParty> </ram:ApplicableHeaderTradeDelivery>
<ram:ID>339420</ram:ID> <ram:ApplicableHeaderTradeSettlement>
<ram:GlobalID schemeID="0088">4304171000002</ram:GlobalID> <ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode>
<ram:Name>MUSTER-KUNDE GMBH</ram:Name> <ram:InvoiceeTradeParty>
<ram:PostalTradeAddress> <ram:ID>339420</ram:ID>
<ram:PostcodeCode>40235</ram:PostcodeCode> <ram:GlobalID schemeID="0088">4304171000002</ram:GlobalID>
<ram:LineOne>KUNDENWEG 88</ram:LineOne> <ram:Name>MUSTER-KUNDE GMBH</ram:Name>
<ram:CityName>DUESSELDORF</ram:CityName> <ram:PostalTradeAddress>
<ram:CountryID>DE</ram:CountryID> <ram:PostcodeCode>40235</ram:PostcodeCode>
</ram:PostalTradeAddress> <ram:LineOne>KUNDENWEG 88</ram:LineOne>
</ram:InvoiceeTradeParty> <ram:CityName>DUESSELDORF</ram:CityName>
<ram:ApplicableTradeTax> <ram:CountryID>DE</ram:CountryID>
<ram:CalculatedAmount>76.67</ram:CalculatedAmount> </ram:PostalTradeAddress>
<ram:TypeCode>VAT</ram:TypeCode> </ram:InvoiceeTradeParty>
<ram:BasisAmount>403.55</ram:BasisAmount> <ram:ApplicableTradeTax>
<ram:LineTotalBasisAmount>410.10</ram:LineTotalBasisAmount> <ram:CalculatedAmount>76.67</ram:CalculatedAmount>
<ram:AllowanceChargeBasisAmount>-6.55</ram:AllowanceChargeBasisAmount> <ram:TypeCode>VAT</ram:TypeCode>
<ram:CategoryCode>S</ram:CategoryCode> <ram:BasisAmount>403.55</ram:BasisAmount>
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent> <ram:LineTotalBasisAmount>410.10</ram:LineTotalBasisAmount>
</ram:ApplicableTradeTax> <ram:AllowanceChargeBasisAmount>-6.55</ram:AllowanceChargeBasisAmount>
<ram:SpecifiedTradeAllowanceCharge> <ram:CategoryCode>S</ram:CategoryCode>
<ram:ChargeIndicator> <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
<udt:Indicator>false</udt:Indicator> </ram:ApplicableTradeTax>
</ram:ChargeIndicator> <ram:SpecifiedTradeAllowanceCharge>
<ram:BasisAmount>410.10</ram:BasisAmount> <ram:ChargeIndicator>
<ram:ActualAmount>21.55</ram:ActualAmount> <udt:Indicator>false</udt:Indicator>
<ram:Reason>Sonderrabatt</ram:Reason> </ram:ChargeIndicator>
<ram:CategoryTradeTax> <ram:BasisAmount>410.10</ram:BasisAmount>
<ram:TypeCode>VAT</ram:TypeCode> <ram:ActualAmount>21.55</ram:ActualAmount>
<ram:CategoryCode>S</ram:CategoryCode> <ram:Reason>Sonderrabatt</ram:Reason>
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent> <ram:CategoryTradeTax>
</ram:CategoryTradeTax> <ram:TypeCode>VAT</ram:TypeCode>
</ram:SpecifiedTradeAllowanceCharge> <ram:CategoryCode>S</ram:CategoryCode>
<ram:SpecifiedLogisticsServiceCharge> <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
<ram:Description>Transportkosten: Frachbetrag</ram:Description> </ram:CategoryTradeTax>
<ram:AppliedAmount>15.00</ram:AppliedAmount> </ram:SpecifiedTradeAllowanceCharge>
<ram:AppliedTradeTax> <ram:SpecifiedLogisticsServiceCharge>
<ram:TypeCode>VAT</ram:TypeCode> <ram:Description>Transportkosten: Frachbetrag</ram:Description>
<ram:CategoryCode>S</ram:CategoryCode> <ram:AppliedAmount>15.00</ram:AppliedAmount>
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent> <ram:AppliedTradeTax>
</ram:AppliedTradeTax> <ram:TypeCode>VAT</ram:TypeCode>
</ram:SpecifiedLogisticsServiceCharge> <ram:CategoryCode>S</ram:CategoryCode>
<ram:SpecifiedTradePaymentTerms> <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
<ram:Description>Skontovereinbarung: 2% bei Zahlung innerhalb 10 Tagen nach Rechnungsdatum</ram:Description> </ram:AppliedTradeTax>
<ram:ApplicableTradePaymentDiscountTerms> </ram:SpecifiedLogisticsServiceCharge>
<ram:BasisPeriodMeasure unitCode="DAY">10</ram:BasisPeriodMeasure> <ram:SpecifiedTradePaymentTerms>
<ram:CalculationPercent>2.00</ram:CalculationPercent> <ram:Description>Skontovereinbarung: 2% bei Zahlung innerhalb 10 Tagen nach Rechnungsdatum</ram:Description>
</ram:ApplicableTradePaymentDiscountTerms> <ram:ApplicableTradePaymentDiscountTerms>
</ram:SpecifiedTradePaymentTerms> <ram:BasisPeriodMeasure unitCode="DAY">10</ram:BasisPeriodMeasure>
<ram:SpecifiedTradeSettlementHeaderMonetarySummation> <ram:CalculationPercent>2.00</ram:CalculationPercent>
<ram:LineTotalAmount>410.10</ram:LineTotalAmount> </ram:ApplicableTradePaymentDiscountTerms>
<ram:ChargeTotalAmount>15.00</ram:ChargeTotalAmount> </ram:SpecifiedTradePaymentTerms>
<ram:AllowanceTotalAmount>21.55</ram:AllowanceTotalAmount> <ram:SpecifiedTradeSettlementHeaderMonetarySummation>
<ram:TaxBasisTotalAmount>403.55</ram:TaxBasisTotalAmount> <ram:LineTotalAmount>410.10</ram:LineTotalAmount>
<ram:TaxTotalAmount currencyID="EUR">76.67</ram:TaxTotalAmount> <ram:ChargeTotalAmount>15.00</ram:ChargeTotalAmount>
<ram:GrandTotalAmount>480.22</ram:GrandTotalAmount> <ram:AllowanceTotalAmount>21.55</ram:AllowanceTotalAmount>
<ram:TotalPrepaidAmount>0.00</ram:TotalPrepaidAmount> <ram:TaxBasisTotalAmount>403.55</ram:TaxBasisTotalAmount>
<ram:DuePayableAmount>480.22</ram:DuePayableAmount> <ram:TaxTotalAmount currencyID="EUR">76.67</ram:TaxTotalAmount>
</ram:SpecifiedTradeSettlementHeaderMonetarySummation> <ram:GrandTotalAmount>480.22</ram:GrandTotalAmount>
</ram:ApplicableHeaderTradeSettlement> <ram:TotalPrepaidAmount>0.00</ram:TotalPrepaidAmount>
</rsm:SupplyChainTradeTransaction> <ram:DuePayableAmount>480.22</ram:DuePayableAmount>
</rsm:CrossIndustryInvoice> </ram:SpecifiedTradeSettlementHeaderMonetarySummation>
</ram:ApplicableHeaderTradeSettlement>
</rsm:SupplyChainTradeTransaction>
</rsm:CrossIndustryInvoice>

View File

@@ -1085,7 +1085,6 @@
</div> </div>
<div class="boxabstand"></div> <div class="boxabstand"></div>
</div> </div>
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig"></div>
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig"> <div class="boxtabelle boxabstandtop boxtabelleZweispaltig">
<div class="boxzeile"> <div class="boxzeile">
<div id="uebersichtVersandkosten" class="box"> <div id="uebersichtVersandkosten" class="box">
@@ -2248,6 +2247,10 @@
<div class="boxdaten legende">Kennung der Versandanzeige:</div> <div class="boxdaten legende">Kennung der Versandanzeige:</div>
<div id="BT-16" title="BT-16" class="boxdaten wert"></div> <div id="BT-16" title="BT-16" class="boxdaten wert"></div>
</div> </div>
<div class="boxzeile">
<div class="boxdaten legende">Kennung des Lieferscheins:</div>
<div id="BT-X-202" title="BT-X-202" class="boxdaten wert">L87654321012 vom 31.10.2024</div>
</div>
<div class="boxzeile"> <div class="boxzeile">
<div class="boxdaten legende">Prozesskennung:</div> <div class="boxdaten legende">Prozesskennung:</div>
<div id="BT-23" title="BT-23" class="boxdaten wert"></div> <div id="BT-23" title="BT-23" class="boxdaten wert"></div>

View File

@@ -1359,7 +1359,6 @@
</div> </div>
<div class="boxabstand"></div> <div class="boxabstand"></div>
</div> </div>
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig"></div>
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig first"> <div class="boxtabelle boxabstandtop boxtabelleZweispaltig first">
<div class="boxzeile"> <div class="boxzeile">
<div id="uebersichtZahlungsinformationen" class="box subBox"> <div id="uebersichtZahlungsinformationen" class="box subBox">
@@ -1556,7 +1555,7 @@
<div class="boxzeile"> <div class="boxzeile">
<div class="boxdaten legende ">Description:</div> <div class="boxdaten legende ">Description:</div>
<div id="BT-154" title="BT-154" class="boxdaten wert">Processor: Intel Core 2 Duo SU9400 LV (1.4GHz). RAM: <div id="BT-154" title="BT-154" class="boxdaten wert">Processor: Intel Core 2 Duo SU9400 LV (1.4GHz). RAM:
3MB. Screen 1440x900</div> 3MB. Screen 1440x900</div>
</div> </div>
<div class="boxzeile"> <div class="boxzeile">
<div class="boxdaten legende ">Part number:</div> <div class="boxdaten legende ">Part number:</div>
@@ -2355,6 +2354,10 @@
<div class="boxdaten legende">Dispatch note ID:</div> <div class="boxdaten legende">Dispatch note ID:</div>
<div id="BT-16" title="BT-16" class="boxdaten wert"></div> <div id="BT-16" title="BT-16" class="boxdaten wert"></div>
</div> </div>
<div class="boxzeile">
<div class="boxdaten legende">Delivery note ID:</div>
<div id="BT-X-202" title="BT-X-202" class="boxdaten wert"></div>
</div>
<div class="boxzeile"> <div class="boxzeile">
<div class="boxdaten legende">Process ID:</div> <div class="boxdaten legende">Process ID:</div>
<div id="BT-23" title="BT-23" class="boxdaten wert"></div> <div id="BT-23" title="BT-23" class="boxdaten wert"></div>

View File

@@ -1219,9 +1219,6 @@
</div> </div>
</div> </div>
</div> </div>
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig"></div>
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig"></div>
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig"></div>
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig first"> <div class="boxtabelle boxabstandtop boxtabelleZweispaltig first">
<div class="boxzeile"> <div class="boxzeile">
<div id="uebersichtZahlungsinformationen" class="box subBox"> <div id="uebersichtZahlungsinformationen" class="box subBox">
@@ -1755,6 +1752,10 @@
<div class="boxdaten legende">Dispatch note ID:</div> <div class="boxdaten legende">Dispatch note ID:</div>
<div id="BT-16" title="BT-16" class="boxdaten wert"></div> <div id="BT-16" title="BT-16" class="boxdaten wert"></div>
</div> </div>
<div class="boxzeile">
<div class="boxdaten legende">Delivery note ID:</div>
<div id="BT-X-202" title="BT-X-202" class="boxdaten wert"></div>
</div>
<div class="boxzeile"> <div class="boxzeile">
<div class="boxdaten legende">Process ID:</div> <div class="boxdaten legende">Process ID:</div>
<div id="BT-23" title="BT-23" class="boxdaten wert"></div> <div id="BT-23" title="BT-23" class="boxdaten wert"></div>

View File

@@ -1250,9 +1250,6 @@
</div> </div>
</div> </div>
</div> </div>
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig"></div>
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig"></div>
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig"></div>
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig first"> <div class="boxtabelle boxabstandtop boxtabelleZweispaltig first">
<div class="boxzeile"> <div class="boxzeile">
<div id="uebersichtZahlungsinformationen" class="box subBox"> <div id="uebersichtZahlungsinformationen" class="box subBox">
@@ -1927,6 +1924,10 @@
<div class="boxdaten legende">Identifiant du bordereau d'expédition:</div> <div class="boxdaten legende">Identifiant du bordereau d'expédition:</div>
<div id="BT-16" title="BT-16" class="boxdaten wert"></div> <div id="BT-16" title="BT-16" class="boxdaten wert"></div>
</div> </div>
<div class="boxzeile">
<div class="boxdaten legende">Identifiant du bon de livraison:</div>
<div id="BT-X-202" title="BT-X-202" class="boxdaten wert"></div>
</div>
<div class="boxzeile"> <div class="boxzeile">
<div class="boxdaten legende">Identifiant processus:</div> <div class="boxdaten legende">Identifiant processus:</div>
<div id="BT-23" title="BT-23" class="boxdaten wert"></div> <div id="BT-23" title="BT-23" class="boxdaten wert"></div>