Merge branch 'master' of https://github.com/taskinkemal/mustangproject
This commit is contained in:
@@ -3,13 +3,13 @@
|
||||
<parent>
|
||||
<groupId>org.mustangproject</groupId>
|
||||
<artifactId>core</artifactId>
|
||||
<version>2.15.2-SNAPSHOT</version>
|
||||
<version>2.15.3-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.mustangproject</groupId>
|
||||
<artifactId>library</artifactId>
|
||||
<version>2.15.2-SNAPSHOT</version>
|
||||
<version>2.15.3-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
<name>Library to write, read and validate e-invoices (Factur-X, ZUGFeRD, Order-X, XRechnung/CII)</name>
|
||||
<description>FOSS Java library to read, write and validate european electronic invoices and orders in the UN/CEFACT
|
||||
@@ -200,21 +200,51 @@
|
||||
</manifest>
|
||||
<manifestSections>
|
||||
<manifestSection>
|
||||
<name>FreeSans.ttf</name>
|
||||
<name>SourceSansPro-Regular.ttf</name>
|
||||
<manifestEntries>
|
||||
<Content-Type>font/ttf</Content-Type>
|
||||
</manifestEntries>
|
||||
</manifestSection>
|
||||
<manifestSection>
|
||||
<name>FreeSerif.ttf</name>
|
||||
<name>SourceSansPro-It.ttf</name>
|
||||
<manifestEntries>
|
||||
<Content-Type>application/x-font</Content-Type>
|
||||
<Content-Type>font/ttf</Content-Type>
|
||||
</manifestEntries>
|
||||
</manifestSection>
|
||||
<manifestSection>
|
||||
<name>Times-Bold.ttf</name>
|
||||
<name>SourceSansPro-Bold.ttf</name>
|
||||
<manifestEntries>
|
||||
<Content-Type>application/x-font</Content-Type>
|
||||
<Content-Type>font/ttf</Content-Type>
|
||||
</manifestEntries>
|
||||
</manifestSection>
|
||||
<manifestSection>
|
||||
<name>SourceSansPro-BoldIt.ttf</name>
|
||||
<manifestEntries>
|
||||
<Content-Type>font/ttf</Content-Type>
|
||||
</manifestEntries>
|
||||
</manifestSection>
|
||||
<manifestSection>
|
||||
<name>SourceSerifPro-Regular.ttf</name>
|
||||
<manifestEntries>
|
||||
<Content-Type>font/ttf</Content-Type>
|
||||
</manifestEntries>
|
||||
</manifestSection>
|
||||
<manifestSection>
|
||||
<name>SourceSerifPro-It.ttf</name>
|
||||
<manifestEntries>
|
||||
<Content-Type>font/ttf</Content-Type>
|
||||
</manifestEntries>
|
||||
</manifestSection>
|
||||
<manifestSection>
|
||||
<name>SourceSerifPro-Bold.ttf</name>
|
||||
<manifestEntries>
|
||||
<Content-Type>font/ttf</Content-Type>
|
||||
</manifestEntries>
|
||||
</manifestSection>
|
||||
<manifestSection>
|
||||
<name>SourceSerifPro-BoldIt.ttf</name>
|
||||
<manifestEntries>
|
||||
<Content-Type>font/ttf</Content-Type>
|
||||
</manifestEntries>
|
||||
</manifestSection>
|
||||
</manifestSections>
|
||||
|
||||
@@ -3,11 +3,14 @@ package org.mustangproject.Exceptions;
|
||||
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 ArithmetricException() {
|
||||
super(
|
||||
"Could not reproduce the invoice, this could mean that it could not be read properly", 0);
|
||||
this("");
|
||||
}
|
||||
|
||||
public ArithmetricException(String details) {
|
||||
super("Could not reproduce the invoice. " + details, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,10 +21,7 @@
|
||||
package org.mustangproject;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import org.mustangproject.ZUGFeRD.*;
|
||||
@@ -41,7 +38,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||
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 TradeParty sender = null, recipient = null, deliveryAddress = null, payee = null;
|
||||
protected ArrayList<CashDiscount> cashDiscounts = null;
|
||||
@@ -60,7 +57,12 @@ public class Invoice implements IExportableTransaction {
|
||||
protected ArrayList<IZUGFeRDAllowanceCharge> Allowances = new ArrayList<>(),
|
||||
Charges = new ArrayList<>(), LogisticsServiceCharges = new ArrayList<>();
|
||||
protected IZUGFeRDPaymentTerms paymentTerms = null;
|
||||
|
||||
protected String invoiceReferencedDocumentID = null;
|
||||
protected Date invoiceReferencedIssueDate;
|
||||
// New field for storing Invoiced Object Identifier (BG-3)
|
||||
protected ArrayList<ReferencedDocument> invoiceReferencedDocuments = null;
|
||||
|
||||
protected String specifiedProcuringProjectID = null;
|
||||
protected String specifiedProcuringProjectName = null;
|
||||
protected String despatchAdviceReferencedDocumentID = null;
|
||||
@@ -116,6 +118,16 @@ public class Invoice implements IExportableTransaction {
|
||||
|
||||
}
|
||||
|
||||
/***
|
||||
* setter in case e.g. jackson tries to map attachments (normal use embedFileInXML)
|
||||
* @param fileArr Array of FileAttachments
|
||||
* @return fluent setter
|
||||
*/
|
||||
public Invoice setAdditionalReferencedDocuments(FileAttachment[] fileArr) {
|
||||
xmlEmbeddedFiles = new ArrayList<>(Arrays.asList(fileArr));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IZUGFeRDCashDiscount[] getCashDiscounts() {
|
||||
return cashDiscounts.toArray(new IZUGFeRDCashDiscount[0]);
|
||||
@@ -141,6 +153,7 @@ public class Invoice implements IExportableTransaction {
|
||||
*/
|
||||
public Invoice setCorrection(String number) {
|
||||
setInvoiceReferencedDocumentID(number);
|
||||
addInvoiceReferencedDocument(new ReferencedDocument(number));
|
||||
documentCode = DocumentCodeTypeConstants.CORRECTEDINVOICE;
|
||||
return this;
|
||||
}
|
||||
@@ -539,6 +552,26 @@ public class Invoice implements IExportableTransaction {
|
||||
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
|
||||
public IZUGFeRDAllowanceCharge[] getZFAllowances() {
|
||||
if (Allowances.isEmpty()) {
|
||||
|
||||
@@ -352,7 +352,7 @@ public class Item implements IZUGFeRDExportableItem {
|
||||
|
||||
/***
|
||||
* Adds a item level addition to the price (will be multiplied by quantity)
|
||||
* @see org.mustangproject.Charge
|
||||
* @see Charge
|
||||
* @param izac a relative or absolute charge
|
||||
* @return fluent setter
|
||||
*/
|
||||
@@ -363,7 +363,7 @@ public class Item implements IZUGFeRDExportableItem {
|
||||
|
||||
/***
|
||||
* Adds a item level reduction the price (will be multiplied by quantity)
|
||||
* @see org.mustangproject.Allowance
|
||||
* @see Allowance
|
||||
* @param izac a relative or absolute allowance
|
||||
* @return fluent setter
|
||||
*/
|
||||
@@ -383,10 +383,23 @@ public class Item implements IZUGFeRDExportableItem {
|
||||
}
|
||||
notes.add(text);
|
||||
|
||||
addNote(IncludedNote.unspecifiedNote(text));
|
||||
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/***
|
||||
* adds categorized item level freetext fields (includednote)
|
||||
* @param theNote IncludedNote to add
|
||||
* @return fluent setter
|
||||
*/
|
||||
public Item addNote(IncludedNote theNote) {
|
||||
|
||||
if (includedNotes == null) {
|
||||
includedNotes = new ArrayList<>();
|
||||
}
|
||||
includedNotes.add(IncludedNote.unspecifiedNote(text));
|
||||
includedNotes.add(theNote);
|
||||
|
||||
|
||||
return this;
|
||||
|
||||
@@ -2,6 +2,8 @@ package org.mustangproject;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import java.util.Date;
|
||||
|
||||
import org.mustangproject.ZUGFeRD.IReferencedDocument;
|
||||
import org.mustangproject.util.NodeMap;
|
||||
import org.w3c.dom.Node;
|
||||
@@ -13,20 +15,33 @@ public class ReferencedDocument implements IReferencedDocument {
|
||||
String issuerAssignedID;
|
||||
String typeCode;
|
||||
String referenceTypeCode;
|
||||
Date formattedIssueDateTime;
|
||||
|
||||
public ReferencedDocument(String issuerAssignedID, String typeCode, String referenceTypeCode) {
|
||||
this.issuerAssignedID = issuerAssignedID;
|
||||
this(issuerAssignedID);
|
||||
this.typeCode = typeCode;
|
||||
this.referenceTypeCode = referenceTypeCode;
|
||||
}
|
||||
|
||||
public ReferencedDocument(String issuerAssignedID, String referenceTypeCode) {
|
||||
this.issuerAssignedID = issuerAssignedID;
|
||||
this.typeCode = "916"; // additional invoice related document
|
||||
this.referenceTypeCode = referenceTypeCode;
|
||||
public ReferencedDocument(String issuerAssignedID, String typeCode, String referenceTypeCode, Date formattedIssueDateTime) {
|
||||
this(issuerAssignedID, typeCode, referenceTypeCode);
|
||||
this.formattedIssueDateTime = formattedIssueDateTime;
|
||||
}
|
||||
|
||||
/***
|
||||
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
|
||||
* @param issuerAssignedID the ID as a string :-)
|
||||
*/
|
||||
@@ -50,6 +65,15 @@ public class ReferencedDocument implements IReferencedDocument {
|
||||
this.referenceTypeCode = referenceTypeCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* issue date of this line
|
||||
*
|
||||
* @param formattedIssueDateTime as Date
|
||||
*/
|
||||
public void setFormattedIssueDateTime(Date formattedIssueDateTime) {
|
||||
this.formattedIssueDateTime = formattedIssueDateTime;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getIssuerAssignedID() {
|
||||
return issuerAssignedID;
|
||||
@@ -65,6 +89,12 @@ public class ReferencedDocument implements IReferencedDocument {
|
||||
return referenceTypeCode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Date getFormattedIssueDateTime()
|
||||
{
|
||||
return formattedIssueDateTime;
|
||||
}
|
||||
|
||||
public static ReferencedDocument fromNode(Node node) {
|
||||
if (!node.hasChildNodes()) {
|
||||
return null;
|
||||
@@ -72,6 +102,7 @@ public class ReferencedDocument implements IReferencedDocument {
|
||||
NodeMap nodes = new NodeMap(node);
|
||||
return new ReferencedDocument(nodes.getAsStringOrNull("IssuerAssignedID", "ID"),
|
||||
nodes.getAsStringOrNull("TypeCode", "DocumentTypeCode"),
|
||||
nodes.getAsStringOrNull("ReferenceTypeCode"));
|
||||
nodes.getAsStringOrNull("ReferenceTypeCode"),
|
||||
XMLTools.tryDate(nodes.getAsStringOrNull("FormattedIssueDateTime")));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,11 +30,13 @@ package org.mustangproject.ZUGFeRD;
|
||||
* */
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import org.mustangproject.FileAttachment;
|
||||
import org.mustangproject.IncludedNote;
|
||||
import org.mustangproject.ReferencedDocument;
|
||||
import org.mustangproject.ZUGFeRD.model.DocumentCodeTypeConstants;
|
||||
|
||||
/***
|
||||
@@ -424,13 +426,23 @@ public interface IExportableTransaction {
|
||||
*
|
||||
* @return the ID of the document
|
||||
*/
|
||||
@Deprecated
|
||||
default String getInvoiceReferencedDocumentID() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
default Date getInvoiceReferencedIssueDate() {
|
||||
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
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package org.mustangproject.ZUGFeRD;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
public interface IReferencedDocument {
|
||||
|
||||
/***
|
||||
@@ -20,4 +22,12 @@ public interface IReferencedDocument {
|
||||
*/
|
||||
String getReferenceTypeCode();
|
||||
|
||||
/***
|
||||
*
|
||||
* issue date of this line
|
||||
*
|
||||
* @return date of the issue
|
||||
*/
|
||||
Date getFormattedIssueDateTime();
|
||||
|
||||
}
|
||||
|
||||
@@ -459,6 +459,19 @@ public class OXPullProvider extends ZUGFeRD2PullProvider {
|
||||
}
|
||||
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>";
|
||||
// + " <IncludedSupplyChainTradeLineItem>"
|
||||
|
||||
@@ -4,7 +4,10 @@ import static java.math.BigDecimal.ZERO;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/***
|
||||
@@ -91,17 +94,14 @@ public class TransactionCalculator implements IAbsoluteValueProvider {
|
||||
}
|
||||
|
||||
private String getAllowanceChargeReasonForPercent(BigDecimal percent, IZUGFeRDAllowanceCharge[] charges) {
|
||||
String res = " ";
|
||||
if ((charges != null) && (charges.length > 0)) {
|
||||
for (IZUGFeRDAllowanceCharge currentCharge : charges) {
|
||||
if ((percent == null) || (currentCharge.getTaxPercent().compareTo(percent) == 0)
|
||||
&& currentCharge.getReason() != null) {
|
||||
res += currentCharge.getReason() + " ";
|
||||
}
|
||||
}
|
||||
if (charges == null) {
|
||||
return "";
|
||||
}
|
||||
res = res.substring(0, res.length() - 1);
|
||||
return res;
|
||||
return Arrays.stream(charges)
|
||||
.filter(currentCharge -> (percent == null || currentCharge.getTaxPercent().compareTo(percent) == 0))
|
||||
.map(IZUGFeRDAllowanceCharge::getReason)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.joining(" "));
|
||||
}
|
||||
|
||||
/***
|
||||
|
||||
@@ -0,0 +1,148 @@
|
||||
package org.mustangproject.ZUGFeRD;
|
||||
|
||||
import org.apache.fop.apps.*;
|
||||
import org.apache.fop.apps.io.ResourceResolverFactory;
|
||||
import org.apache.fop.configuration.Configuration;
|
||||
import org.apache.fop.configuration.ConfigurationException;
|
||||
import org.apache.fop.configuration.DefaultConfigurationBuilder;
|
||||
import org.apache.xmlgraphics.util.MimeConstants;
|
||||
import org.mustangproject.ClasspathResolverURIAdapter;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
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;
|
||||
|
||||
public class ValidationLogVisualizer {
|
||||
public enum Language {
|
||||
EN,
|
||||
FR,
|
||||
DE
|
||||
}
|
||||
|
||||
static final ClassLoader CLASS_LOADER = ValidationLogVisualizer.class.getClassLoader();
|
||||
private static final String RESOURCE_PATH = "";
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(ValidationLogVisualizer.class);
|
||||
|
||||
private TransformerFactory mFactory = null;
|
||||
private Templates mXsltPDFTemplate = null;
|
||||
|
||||
|
||||
public ValidationLogVisualizer() {
|
||||
mFactory = new net.sf.saxon.TransformerFactoryImpl();
|
||||
// fact = TransformerFactory.newInstance();
|
||||
mFactory.setURIResolver(new ValidationLogVisualizer.ClasspathResourceURIResolver());
|
||||
}
|
||||
|
||||
protected void applyXSLTToPDF(final String xmlContent, final OutputStream PDFOutstream)
|
||||
throws TransformerException {
|
||||
Transformer transformer = mXsltPDFTemplate.newTransformer();
|
||||
|
||||
transformer.transform(new StreamSource(new StringReader(xmlContent)), new StreamResult(PDFOutstream));
|
||||
}
|
||||
|
||||
protected String toFOP(final String xmlContent)
|
||||
throws TransformerException {
|
||||
|
||||
try {
|
||||
if (mXsltPDFTemplate == null) {
|
||||
mXsltPDFTemplate = mFactory.newTemplates(
|
||||
new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/result-pdf.xsl")));
|
||||
}
|
||||
} catch (TransformerConfigurationException ex) {
|
||||
LOGGER.error("Failed to init XSLT templates", ex);
|
||||
}
|
||||
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
|
||||
try {
|
||||
|
||||
applyXSLTToPDF(xmlContent, baos);
|
||||
|
||||
} catch (Exception e1) {
|
||||
LOGGER.error("Failed to create PDF", e1);
|
||||
}
|
||||
|
||||
return baos.toString(StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
public void toPDF(String xmlLogfileContent, String pdfFilename) {
|
||||
|
||||
// the writing part
|
||||
|
||||
String result = null;
|
||||
|
||||
/* remove file endings so that tests can also pass after checking
|
||||
out from git with arbitrary options (which may include CSRF changes)
|
||||
*/
|
||||
try {
|
||||
result = this.toFOP(xmlLogfileContent);
|
||||
} catch ( TransformerException e) {
|
||||
LOGGER.error("Failed to apply FOP", e);
|
||||
}
|
||||
DefaultConfigurationBuilder cfgBuilder = new DefaultConfigurationBuilder();
|
||||
|
||||
Configuration cfg = null;
|
||||
try {
|
||||
cfg = cfgBuilder.build(CLASS_LOADER.getResourceAsStream("fop-config.xconf"));
|
||||
} catch (ConfigurationException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
FopFactoryBuilder builder = new FopFactoryBuilder(new File(".").toURI(), new ClasspathResolverURIAdapter()).setConfiguration(cfg);
|
||||
// Step 1: Construct a FopFactory by specifying a reference to the configuration file
|
||||
// (reuse if you plan to render multiple documents!)
|
||||
|
||||
FopFactory fopFactory = builder.build();
|
||||
|
||||
fopFactory.getFontManager().setResourceResolver(
|
||||
ResourceResolverFactory.createInternalResourceResolver(
|
||||
new File(".").toURI(),
|
||||
new ClasspathResolverURIAdapter()));
|
||||
|
||||
FOUserAgent userAgent = fopFactory.newFOUserAgent();
|
||||
|
||||
userAgent.getRendererOptions().put("pdf-a-mode", "PDF/A-3b");
|
||||
|
||||
// Step 2: Set up output stream.
|
||||
// Note: Using BufferedOutputStream for performance reasons (helpful with FileOutputStreams).
|
||||
|
||||
try (OutputStream out = new BufferedOutputStream(new FileOutputStream(pdfFilename))) {
|
||||
|
||||
// Step 3: Construct fop with desired output format
|
||||
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, userAgent, out);
|
||||
|
||||
// Step 4: Setup JAXP using identity transformer
|
||||
TransformerFactory factory = TransformerFactory.newInstance();
|
||||
Transformer transformer = factory.newTransformer(); // identity transformer
|
||||
|
||||
// Step 5: Setup input and output for XSLT transformation
|
||||
// Setup input stream
|
||||
Source src = new StreamSource(new ByteArrayInputStream(result.getBytes(StandardCharsets.UTF_8)));
|
||||
|
||||
// Resulting SAX events (the generated FO) must be piped through to FOP
|
||||
Result res = new SAXResult(fop.getDefaultHandler());
|
||||
|
||||
// Step 6: Start XSLT transformation and FOP processing
|
||||
transformer.transform(src, res);
|
||||
|
||||
} catch (FOPException | IOException | TransformerException e) {
|
||||
LOGGER.error("Failed to create PDF", e);
|
||||
}
|
||||
}
|
||||
|
||||
private static class ClasspathResourceURIResolver implements URIResolver {
|
||||
ClasspathResourceURIResolver() {
|
||||
// Do nothing, just prevents synthetic access warning.
|
||||
}
|
||||
|
||||
@Override
|
||||
public Source resolve(String href, String base) throws TransformerException {
|
||||
return new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/" + href));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -828,6 +828,12 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
|
||||
if (paymentTermsDescription != null) {
|
||||
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) {
|
||||
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>";
|
||||
} else {
|
||||
xml += buildPaymentTermsXml();
|
||||
@@ -893,6 +893,19 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
|
||||
}
|
||||
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>";
|
||||
// + "<IncludedSupplyChainTradeLineItem>\n"
|
||||
|
||||
@@ -83,8 +83,9 @@ public class ZUGFeRDExporterFromPDFA implements IZUGFeRDExporter {
|
||||
}
|
||||
|
||||
protected byte[] filenameToByteArray(String pdfFilename) throws IOException {
|
||||
FileInputStream fileInputStream = new FileInputStream(pdfFilename);
|
||||
return inputstreamToByteArray(fileInputStream);
|
||||
try (FileInputStream fileInputStream = new FileInputStream(pdfFilename)) {
|
||||
return inputstreamToByteArray(fileInputStream);
|
||||
}
|
||||
}
|
||||
|
||||
protected byte[] inputstreamToByteArray(InputStream fileInputStream) throws IOException {
|
||||
|
||||
@@ -262,7 +262,7 @@ public class ZUGFeRDImporter extends ZUGFeRDInvoiceImporter {
|
||||
* @return the Payment Terms
|
||||
*/
|
||||
public String getPaymentTerms() {
|
||||
return extractString("//*[local-name() = 'SpecifiedTradePaymentTerms']//*[local-name() = 'Description']");
|
||||
return importedInvoice.getPaymentTermDescription();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -659,6 +659,7 @@ public class ZUGFeRDImporter extends ZUGFeRDInvoiceImporter {
|
||||
*
|
||||
* @return a List of LineItem instances
|
||||
*/
|
||||
@Deprecated
|
||||
public List<Item> getLineItemList() {
|
||||
final List<Node> nodeList = getLineItemNodes();
|
||||
final List<Item> lineItemList = new ArrayList<>();
|
||||
|
||||
@@ -32,6 +32,9 @@ import java.nio.file.StandardOpenOption;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
|
||||
public class ZUGFeRDInvoiceImporter {
|
||||
|
||||
@@ -68,7 +71,6 @@ public class ZUGFeRDInvoiceImporter {
|
||||
protected CalculatedInvoice importedInvoice = null;
|
||||
protected boolean recalcPrice = false;
|
||||
protected boolean ignoreCalculationErrors = false;
|
||||
protected ArrayList<FileAttachment> fileAttachments = new ArrayList<>();
|
||||
|
||||
public ZUGFeRDInvoiceImporter() {
|
||||
//constructor for extending classes
|
||||
@@ -239,7 +241,7 @@ public class ZUGFeRDInvoiceImporter {
|
||||
|
||||
try {
|
||||
setDocument();
|
||||
} catch (ParserConfigurationException | SAXException e) {
|
||||
} catch (ParserConfigurationException | SAXException | ParseException e) {
|
||||
LOGGER.error("Failed to parse XML", e);
|
||||
throw new ZUGFeRDExportException(e);
|
||||
}
|
||||
@@ -255,7 +257,7 @@ public class ZUGFeRDInvoiceImporter {
|
||||
setRawXML(rawXML, true);
|
||||
}
|
||||
|
||||
private void setDocument() throws ParserConfigurationException, IOException, SAXException {
|
||||
private void setDocument() throws ParserConfigurationException, IOException, SAXException, ParseException {
|
||||
final DocumentBuilderFactory xmlFact = DocumentBuilderFactory.newInstance();
|
||||
xmlFact.setNamespaceAware(true);
|
||||
final DocumentBuilder builder = xmlFact.newDocumentBuilder();
|
||||
@@ -268,8 +270,6 @@ public class ZUGFeRDInvoiceImporter {
|
||||
extractInto(importedInvoice);
|
||||
} catch (XPathExpressionException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (ParseException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -475,9 +475,11 @@ public class ZUGFeRDInvoiceImporter {
|
||||
|
||||
xpr = xpath.compile("//*[local-name()=\"SpecifiedTradeSettlementHeaderMonetarySummation\"]/*[local-name()=\"DuePayableAmount\"]|//*[local-name()=\"LegalMonetaryTotal\"]/*[local-name()=\"PayableAmount\"]");
|
||||
NodeList lineDueNodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET);
|
||||
BigDecimal duePayableAmount = null;
|
||||
if (lineDueNodes.getLength() > 0) {
|
||||
duePayableAmount = new BigDecimal(XMLTools.trimOrNull(lineDueNodes.item(0)));
|
||||
if (zpp instanceof CalculatedInvoice) {
|
||||
((CalculatedInvoice) zpp).setDuePayable(new BigDecimal(XMLTools.trimOrNull(lineDueNodes.item(0))));
|
||||
((CalculatedInvoice) zpp).setDuePayable(duePayableAmount);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -647,6 +649,12 @@ public class ZUGFeRDInvoiceImporter {
|
||||
String currency = extractString("//*[local-name()=\"ApplicableHeaderTradeSettlement\"]/*[local-name()=\"InvoiceCurrencyCode\"]|//*[local-name()=\"DocumentCurrencyCode\"]");
|
||||
zpp.setCurrency(currency);
|
||||
|
||||
String paymentTermsDescription = extractString("//*[local-name()=\"SpecifiedTradePaymentTerms\"]/*[local-name()=\"Description\"]|//*[local-name()=\"PaymentTerms\"]/*[local-name()=\"Note\"]");
|
||||
if ((paymentTermsDescription!=null)&&(!paymentTermsDescription.isEmpty())) {
|
||||
zpp.setPaymentTermDescription(paymentTermsDescription);
|
||||
}
|
||||
|
||||
|
||||
xpr = xpath.compile("//*[local-name()=\"ApplicableHeaderTradeSettlement\"]|//*[local-name()=\"ApplicableSupplyChainTradeSettlement\"]");
|
||||
NodeList headerTradeSettlementNodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET);
|
||||
List<BankDetails> bankDetails = new ArrayList<>();
|
||||
@@ -663,6 +671,9 @@ public class ZUGFeRDInvoiceImporter {
|
||||
&& (headerTradeSettlementChilds.item(settlementChildIndex).getLocalName().equals("SpecifiedTradePaymentTerms"))) {
|
||||
NodeList paymentTermChilds = headerTradeSettlementChilds.item(settlementChildIndex).getChildNodes();
|
||||
for (int paymentTermChildIndex = 0; paymentTermChildIndex < paymentTermChilds.getLength(); paymentTermChildIndex++) {
|
||||
if ((paymentTermChilds.item(paymentTermChildIndex).getLocalName() != null) && (paymentTermChilds.item(paymentTermChildIndex).getLocalName().equals("Description"))) {
|
||||
zpp.setPaymentTermDescription(paymentTermChilds.item(paymentTermChildIndex).getTextContent());
|
||||
}
|
||||
if ((paymentTermChilds.item(paymentTermChildIndex).getLocalName() != null) && (paymentTermChilds.item(paymentTermChildIndex).getLocalName().equals("DueDateDateTime"))) {
|
||||
NodeList dueDateChilds = paymentTermChilds.item(paymentTermChildIndex).getChildNodes();
|
||||
for (int dueDateChildIndex = 0; dueDateChildIndex < dueDateChilds.getLength(); dueDateChildIndex++) {
|
||||
@@ -810,6 +821,23 @@ public class ZUGFeRDInvoiceImporter {
|
||||
}
|
||||
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());
|
||||
|
||||
String rounding = extractString("//*[local-name()=\"SpecifiedTradeSettlementHeaderMonetarySummation\"]/*[local-name()=\"RoundingAmount\"]|//*[local-name()=\"LegalMonetaryTotal\"]/*[local-name()=\"Party\"]/*[local-name()=\"PayableRoundingAmount\"]");
|
||||
@@ -828,7 +856,7 @@ public class ZUGFeRDInvoiceImporter {
|
||||
}
|
||||
|
||||
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) {
|
||||
for (int i = 0; i < nodes.getLength(); i++) {
|
||||
@@ -844,7 +872,7 @@ public class ZUGFeRDInvoiceImporter {
|
||||
NodeList attachmentNodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET);
|
||||
for (int i = 0; i < attachmentNodes.getLength(); i++) {
|
||||
FileAttachment fa = new FileAttachment(attachmentNodes.item(i).getAttributes().getNamedItem("filename").getNodeValue(), attachmentNodes.item(i).getAttributes().getNamedItem("mimeCode").getNodeValue(), "Data", Base64.getDecoder().decode(XMLTools.trimOrNull(attachmentNodes.item(i))));
|
||||
fileAttachments.add(fa);
|
||||
zpp.embedFileInXML(fa);
|
||||
// filename = "Aufmass.png" mimeCode = "image/png"
|
||||
//EmbeddedDocumentBinaryObject cbc:EmbeddedDocumentBinaryObject mimeCode="image/png" filename="Aufmass.png"
|
||||
}
|
||||
@@ -932,8 +960,7 @@ public class ZUGFeRDInvoiceImporter {
|
||||
|
||||
|
||||
TransactionCalculator tc = new TransactionCalculator(zpp);
|
||||
String expectedStringTotalGross = tc.getGrandTotal()
|
||||
.subtract(Objects.requireNonNullElse(zpp.getTotalPrepaidAmount(), BigDecimal.ZERO)).toPlainString();
|
||||
String calculatedPayableTotal = tc.getDuePayable().toPlainString();
|
||||
EStandard whichType;
|
||||
try {
|
||||
whichType = getStandard();
|
||||
@@ -941,10 +968,21 @@ public class ZUGFeRDInvoiceImporter {
|
||||
throw new StructureException("Could not find out if it's an invoice, order, or delivery advice", 0);
|
||||
}
|
||||
|
||||
if ((whichType != EStandard.despatchadvice)
|
||||
&& ((!expectedStringTotalGross.equals(XMLTools.nDigitFormat(expectedGrandTotal, 2)))
|
||||
&& (!ignoreCalculationErrors))) {
|
||||
throw new ArithmetricException();
|
||||
if (whichType != EStandard.despatchadvice && !ignoreCalculationErrors) {
|
||||
// Check calculation if document type allows it and calculation errors should not be ignored
|
||||
|
||||
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;
|
||||
@@ -1028,9 +1066,11 @@ public class ZUGFeRDInvoiceImporter {
|
||||
*
|
||||
* @return the file attachments embedded in XML (using base64) decoded as byte array,
|
||||
* for PDF embedded files in FX use getFileAttachmentsPDF()
|
||||
* @deprecated use invoice.getAdditionalReferencedDocuments
|
||||
*/
|
||||
@Deprecated
|
||||
public List<FileAttachment> getFileAttachmentsXML() {
|
||||
return fileAttachments;
|
||||
return new ArrayList<>(Arrays.asList(importedInvoice.getAdditionalReferencedDocuments()));
|
||||
}
|
||||
|
||||
/***
|
||||
@@ -1060,5 +1100,4 @@ public class ZUGFeRDInvoiceImporter {
|
||||
LOGGER.error(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -20,45 +20,9 @@
|
||||
*/
|
||||
package org.mustangproject.ZUGFeRD;
|
||||
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
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 java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
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 com.helger.commons.io.stream.StreamHelper;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.fop.apps.*;
|
||||
import org.apache.fop.apps.io.ResourceResolverFactory;
|
||||
import org.apache.fop.configuration.Configuration;
|
||||
import org.apache.fop.configuration.ConfigurationException;
|
||||
@@ -68,12 +32,22 @@ import org.mustangproject.ClasspathResolverURIAdapter;
|
||||
import org.mustangproject.EStandard;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.helger.commons.io.stream.StreamHelper;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
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;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class ZUGFeRDVisualizer {
|
||||
|
||||
@@ -116,7 +90,7 @@ public class ZUGFeRDVisualizer {
|
||||
* @param fis inputstream (will be consumed)
|
||||
* @return (facturx = cii)
|
||||
*/
|
||||
public EStandard findOutStandardFromRootNode(InputStream fis) {
|
||||
private EStandard findOutStandardFromRootNode(InputStream fis) {
|
||||
|
||||
String zf1Signature = "CrossIndustryDocument";
|
||||
String zf2Signature = "CrossIndustryInvoice";
|
||||
@@ -147,106 +121,97 @@ public class ZUGFeRDVisualizer {
|
||||
return null;
|
||||
}
|
||||
|
||||
public String visualize(String xmlFilename, Language lang)
|
||||
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
|
||||
*/
|
||||
public String visualize(String xmlFilename, Language lang) throws IOException, TransformerException {
|
||||
FileInputStream fis = new FileInputStream(xmlFilename);
|
||||
String fileContent = "";
|
||||
try {
|
||||
fileContent = new String(Files.readAllBytes(Paths.get(xmlFilename)), StandardCharsets.UTF_8);
|
||||
} catch (IOException e2) {
|
||||
LOGGER.error("Failed to read file content", e2);
|
||||
}
|
||||
return visualize(fis, lang);
|
||||
}
|
||||
|
||||
ByteArrayOutputStream iaos = new ByteArrayOutputStream();
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
public String visualize(InputStream inputXml, Language lang) throws IOException, TransformerException {
|
||||
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
|
||||
EStandard thestandard = findOutStandardFromRootNode(fis);
|
||||
fis = new FileInputStream(xmlFilename); // fis wont reset() so re-read from beginning
|
||||
ByteArrayInputStream xmlContentStream = new ByteArrayInputStream(fileContent.getBytes(StandardCharsets.UTF_8));
|
||||
|
||||
if (thestandard == EStandard.zugferd) {
|
||||
applyZF1XSLT(fis, baos);
|
||||
applyZF1XSLT(xmlContentStream, htmlOutput);
|
||||
return htmlOutput.toString(StandardCharsets.UTF_8);
|
||||
} else if (thestandard == EStandard.facturx) {
|
||||
//zf2 or fx
|
||||
applyZF2XSLT(fis, iaos);
|
||||
doPostProcessing = true;
|
||||
applyZF2XSLT(xmlContentStream, htmlOutput);
|
||||
} else if (thestandard == EStandard.ubl) {
|
||||
//zf2 or fx
|
||||
applyUBL2XSLT(fis, iaos);
|
||||
doPostProcessing = true;
|
||||
applyUBL2XSLT(xmlContentStream, htmlOutput);
|
||||
} else if (thestandard == EStandard.ubl_creditnote) {
|
||||
//zf2 or fx
|
||||
applyUBLCreditNote2XSLT(fis, iaos);
|
||||
doPostProcessing = true;
|
||||
applyUBLCreditNote2XSLT(xmlContentStream, htmlOutput);
|
||||
} else if (thestandard == EStandard.orderx) {
|
||||
//zf2 or fx
|
||||
applyCIO2XSLT(fis, iaos);
|
||||
doPostProcessing = true;
|
||||
applyCIO2XSLT(xmlContentStream, htmlOutput);
|
||||
} else {
|
||||
throw new IllegalArgumentException("File does not look like CII or UBL");
|
||||
}
|
||||
if (doPostProcessing) {
|
||||
// take the copy of the stream and re-write it to an InputStream
|
||||
PipedInputStream in = new PipedInputStream();
|
||||
PipedOutputStream out;
|
||||
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);
|
||||
}
|
||||
|
||||
Optional<InputStream> in = copyStream(htmlOutput);
|
||||
ByteArrayOutputStream htmlOutStream = new ByteArrayOutputStream();
|
||||
if (in.isPresent()) {
|
||||
applyXSLTToHTML(in.get(), htmlOutStream);
|
||||
}
|
||||
|
||||
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)
|
||||
throws FileNotFoundException, TransformerException {
|
||||
throws IOException, TransformerException {
|
||||
|
||||
FileInputStream fis = new FileInputStream(xmlFilename);
|
||||
EStandard theStandard = findOutStandardFromRootNode(fis);
|
||||
@@ -256,8 +221,8 @@ public class ZUGFeRDVisualizer {
|
||||
}
|
||||
|
||||
protected String toFOP(InputStream is, EStandard theStandard)
|
||||
throws FileNotFoundException, TransformerException {
|
||||
|
||||
throws TransformerException, IOException {
|
||||
|
||||
try {
|
||||
if (mXsltPDFTemplate == null) {
|
||||
mXsltPDFTemplate = mFactory.newTemplates(
|
||||
@@ -268,7 +233,6 @@ public class ZUGFeRDVisualizer {
|
||||
}
|
||||
|
||||
ByteArrayOutputStream iaos = new ByteArrayOutputStream();
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
|
||||
//zf2 or fx
|
||||
if (theStandard == EStandard.facturx) {
|
||||
@@ -280,33 +244,11 @@ public class ZUGFeRDVisualizer {
|
||||
}
|
||||
|
||||
|
||||
PipedInputStream in = new PipedInputStream();
|
||||
PipedOutputStream out;
|
||||
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();
|
||||
applyXSLTToPDF(in, baos);
|
||||
} catch (IOException e1) {
|
||||
LOGGER.error("Failed to create PDF", e1);
|
||||
Optional<InputStream> in = copyStream(iaos);
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
if (in.isPresent()) {
|
||||
applyXSLTToPDF(in.get(), baos);
|
||||
}
|
||||
|
||||
|
||||
return baos.toString(StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
@@ -322,7 +264,7 @@ public class ZUGFeRDVisualizer {
|
||||
*/
|
||||
try {
|
||||
fopInput = this.toFOP(XMLinputFile.getAbsolutePath());
|
||||
} catch (FileNotFoundException | TransformerException e) {
|
||||
} catch (TransformerException | IOException e) {
|
||||
LOGGER.error("Failed to apply FOP", e);
|
||||
}
|
||||
|
||||
@@ -349,7 +291,7 @@ public class ZUGFeRDVisualizer {
|
||||
fis = new ByteArrayInputStream(xmlContent.getBytes(StandardCharsets.UTF_8));//rewind :-(
|
||||
|
||||
fopInput = toFOP(fis, theStandard);
|
||||
} catch (FileNotFoundException | TransformerException e) {
|
||||
} catch (TransformerException | IOException e) {
|
||||
LOGGER.error("Failed to apply FOP", e);
|
||||
}
|
||||
|
||||
@@ -423,7 +365,7 @@ public class ZUGFeRDVisualizer {
|
||||
}
|
||||
}
|
||||
|
||||
protected void applyZF2XSLT(final InputStream xmlFile, final OutputStream HTMLOutstream)
|
||||
protected void applyZF2XSLT(final InputStream xmlFile, final OutputStream htmlOutStream)
|
||||
throws TransformerException {
|
||||
if (mXsltXRTemplate == null) {
|
||||
mXsltXRTemplate = mFactory.newTemplates(
|
||||
@@ -432,10 +374,10 @@ public class ZUGFeRDVisualizer {
|
||||
}
|
||||
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 {
|
||||
if (mXsltCIOTemplate == null) {
|
||||
mXsltCIOTemplate = mFactory.newTemplates(
|
||||
@@ -443,10 +385,10 @@ public class ZUGFeRDVisualizer {
|
||||
}
|
||||
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 {
|
||||
if (mXsltUBLTemplate == null) {
|
||||
mXsltUBLTemplate = mFactory.newTemplates(
|
||||
@@ -454,10 +396,10 @@ public class ZUGFeRDVisualizer {
|
||||
}
|
||||
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 {
|
||||
if (mXsltUBLTemplate == null) {
|
||||
mXsltUBLTemplate = mFactory.newTemplates(
|
||||
@@ -465,28 +407,30 @@ public class ZUGFeRDVisualizer {
|
||||
}
|
||||
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 {
|
||||
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)
|
||||
throws TransformerException {
|
||||
protected void applyXSLTToHTML(final InputStream xmlFile, final OutputStream htmlOutStream)
|
||||
throws TransformerException, IOException {
|
||||
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)
|
||||
throws TransformerException {
|
||||
throws TransformerException, IOException {
|
||||
Transformer transformer = mXsltPDFTemplate.newTransformer();
|
||||
|
||||
transformer.transform(new StreamSource(xmlFile), new StreamResult(PDFOutstream));
|
||||
xmlFile.close();
|
||||
}
|
||||
|
||||
private static class ClasspathResourceURIResolver implements URIResolver {
|
||||
@@ -495,7 +439,7 @@ public class ZUGFeRDVisualizer {
|
||||
}
|
||||
|
||||
@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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ public class TaxCategoryCodeTypeConstants {
|
||||
public static final String ZEROTAXPRODUCTS = "Z";
|
||||
public static final String UNTAXEDSERVICE = "O";
|
||||
public static final String INTRACOMMUNITY = "K";
|
||||
|
||||
public static Set<String> CATEGORY_CODES_WITH_EXEMPTION_REASON = Stream.of(INTRACOMMUNITY, REVERSECHARGE, TAXEXEMPT).collect(Collectors.toSet());
|
||||
public static final String FREEEXPORT = "G";
|
||||
|
||||
public static Set<String> CATEGORY_CODES_WITH_EXEMPTION_REASON = Stream.of(INTRACOMMUNITY, REVERSECHARGE, TAXEXEMPT, FREEEXPORT).collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
BIN
library/src/main/resources/fonts/SourceSansPro-Bold.ttf
Normal file
BIN
library/src/main/resources/fonts/SourceSansPro-Bold.ttf
Normal file
Binary file not shown.
BIN
library/src/main/resources/fonts/SourceSansPro-BoldIt.ttf
Normal file
BIN
library/src/main/resources/fonts/SourceSansPro-BoldIt.ttf
Normal file
Binary file not shown.
BIN
library/src/main/resources/fonts/SourceSansPro-It.ttf
Normal file
BIN
library/src/main/resources/fonts/SourceSansPro-It.ttf
Normal file
Binary file not shown.
BIN
library/src/main/resources/fonts/SourceSansPro-Regular.ttf
Normal file
BIN
library/src/main/resources/fonts/SourceSansPro-Regular.ttf
Normal file
Binary file not shown.
BIN
library/src/main/resources/fonts/SourceSerifPro-Bold.ttf
Normal file
BIN
library/src/main/resources/fonts/SourceSerifPro-Bold.ttf
Normal file
Binary file not shown.
BIN
library/src/main/resources/fonts/SourceSerifPro-BoldIt.ttf
Normal file
BIN
library/src/main/resources/fonts/SourceSerifPro-BoldIt.ttf
Normal file
Binary file not shown.
BIN
library/src/main/resources/fonts/SourceSerifPro-It.ttf
Normal file
BIN
library/src/main/resources/fonts/SourceSerifPro-It.ttf
Normal file
Binary file not shown.
BIN
library/src/main/resources/fonts/SourceSerifPro-Regular.ttf
Normal file
BIN
library/src/main/resources/fonts/SourceSerifPro-Regular.ttf
Normal file
Binary file not shown.
@@ -1,37 +1,57 @@
|
||||
<fop version="1.0">
|
||||
|
||||
<!-- Strict user configuration -->
|
||||
<strict-configuration>true</strict-configuration>
|
||||
|
||||
<!-- Strict FO validation -->
|
||||
<strict-validation>true</strict-validation>
|
||||
|
||||
<!-- Base URL for resolving relative URLs -->
|
||||
|
||||
<!-- Font Base URL for resolving relative font URLs -->
|
||||
|
||||
<!-- Source resolution in dpi (dots/pixels per inch) for determining the size of pixels in SVG and bitmap images, default: 72dpi -->
|
||||
<source-resolution>96</source-resolution>
|
||||
<!-- Target resolution in dpi (dots/pixels per inch) for specifying the target resolution for generated bitmaps, default: 72dpi -->
|
||||
<target-resolution>96</target-resolution>
|
||||
|
||||
<!-- default page-height and page-width, in case
|
||||
value is specified as auto -->
|
||||
<default-page-settings height="297mm" width="210mm"/><!-- DIN A/4 -->
|
||||
|
||||
<!-- etc. etc..... -->
|
||||
|
||||
<renderers>
|
||||
<renderer mime="application/pdf">
|
||||
<fonts><!-- https://xmlgraphics.apache.org/fop/1.1/fonts.html auto-embed -->
|
||||
<auto-detect/>
|
||||
<font kerning="no" embed-url="classpath:FreeSans.ttf" embedding-mode="subset">
|
||||
<font-triplet name="SourceSerifPro" style="normal" weight="normal" />
|
||||
<font-triplet name="Times-Bold" style="normal" weight="normal" />
|
||||
</font>
|
||||
</fonts>
|
||||
<output-profile>classpath:AdobeCompat-v2.icc</output-profile>
|
||||
</renderer>
|
||||
</renderers>
|
||||
|
||||
</fop>
|
||||
<fop version="1.0">
|
||||
|
||||
<!-- Strict user configuration -->
|
||||
<strict-configuration>true</strict-configuration>
|
||||
|
||||
<!-- Strict FO validation -->
|
||||
<strict-validation>true</strict-validation>
|
||||
|
||||
<!-- Base URL for resolving relative URLs -->
|
||||
|
||||
<!-- Font Base URL for resolving relative font URLs -->
|
||||
|
||||
<!-- Source resolution in dpi (dots/pixels per inch) for determining the size of pixels in SVG and bitmap images, default: 72dpi -->
|
||||
<source-resolution>96</source-resolution>
|
||||
<!-- Target resolution in dpi (dots/pixels per inch) for specifying the target resolution for generated bitmaps, default: 72dpi -->
|
||||
<target-resolution>96</target-resolution>
|
||||
|
||||
<!-- default page-height and page-width, in case
|
||||
value is specified as auto -->
|
||||
<default-page-settings height="297mm" width="210mm"/><!-- DIN A/4 -->
|
||||
|
||||
<!-- etc. etc..... -->
|
||||
|
||||
<renderers>
|
||||
<renderer mime="application/pdf">
|
||||
<fonts>
|
||||
<!-- https://xmlgraphics.apache.org/fop/1.1/fonts.html auto-embed -->
|
||||
<auto-detect/>
|
||||
<font kerning="yes" embed-url="classpath:fonts/SourceSansPro-Regular.ttf" embedding-mode="subset">
|
||||
<font-triplet name="SourceSansPro" style="normal" weight="400"/>
|
||||
</font>
|
||||
<font kerning="yes" embed-url="classpath:fonts/SourceSansPro-It.ttf" embedding-mode="subset">
|
||||
<font-triplet name="SourceSansPro" style="italic" weight="400"/>
|
||||
</font>
|
||||
<font kerning="yes" embed-url="classpath:fonts/SourceSansPro-Bold.ttf" embedding-mode="subset">
|
||||
<font-triplet name="SourceSansPro" style="normal" weight="700"/>
|
||||
</font>
|
||||
<font kerning="yes" embed-url="classpath:fonts/SourceSansPro-BoldIt.ttf" embedding-mode="subset">
|
||||
<font-triplet name="SourceSansPro" style="italic" weight="700"/>
|
||||
</font>
|
||||
<font kerning="yes" embed-url="classpath:fonts/SourceSerifPro-Regular.ttf" embedding-mode="subset">
|
||||
<font-triplet name="SourceSerifPro" style="normal" weight="400"/>
|
||||
</font>
|
||||
<font kerning="yes" embed-url="classpath:fonts/SourceSerifPro-It.ttf" embedding-mode="subset">
|
||||
<font-triplet name="SourceSerifPro" style="italic" weight="400"/>
|
||||
</font>
|
||||
<font kerning="yes" embed-url="classpath:fonts/SourceSerifPro-Bold.ttf" embedding-mode="subset">
|
||||
<font-triplet name="SourceSerifPro" style="normal" weight="700"/>
|
||||
</font>
|
||||
<font kerning="yes" embed-url="classpath:fonts/SourceSerifPro-BoldIt.ttf" embedding-mode="subset">
|
||||
<font-triplet name="SourceSerifPro" style="italic" weight="700"/>
|
||||
</font>
|
||||
</fonts>
|
||||
<output-profile>classpath:AdobeCompat-v2.icc</output-profile>
|
||||
</renderer>
|
||||
</renderers>
|
||||
</fop>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
243
library/src/main/resources/stylesheets/result-pdf.xsl
Normal file
243
library/src/main/resources/stylesheets/result-pdf.xsl
Normal file
@@ -0,0 +1,243 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xsl:stylesheet xmlns:axf="http://www.antennahouse.com/names/XSL/Extensions"
|
||||
xmlns:fo="http://www.w3.org/1999/XSL/Format"
|
||||
xmlns:pdf="http://xmlgraphics.apache.org/fop/extensions/pdf"
|
||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
version="2.0">
|
||||
<!-- Imports -->
|
||||
<xsl:import href="common-xr.xsl"/>
|
||||
<xsl:import href="xr-pdf/lib/konstanten.xsl"/>
|
||||
<!--
|
||||
FO engine used can be specified.
|
||||
Specific extensions will be then enabled.
|
||||
Supported values are:
|
||||
axf - Antenna House XSL Formatter
|
||||
fop - Apache FOP
|
||||
-->
|
||||
<xsl:param name="foengine"/>
|
||||
<xsl:param name="axf.extensions"
|
||||
select="if ($foengine eq 'axf') 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:if test="/validation/xml/summary/@status = 'valid'">
|
||||
<xsl:text>green</xsl:text>
|
||||
</xsl:if>
|
||||
<xsl:if test="/validation/xml/summary/@status = 'invalid'">
|
||||
<xsl:text>red</xsl:text>
|
||||
</xsl:if>
|
||||
</xsl:variable>
|
||||
<xsl:variable name="pdf_result_color">
|
||||
<xsl:if test="/validation/pdf/summary/@status = 'valid'">
|
||||
<xsl:text>green</xsl:text>
|
||||
</xsl:if>
|
||||
<xsl:if test="/validation/pdf/summary/@status = 'invalid'">
|
||||
<xsl:text>red</xsl:text>
|
||||
</xsl:if>
|
||||
</xsl:variable>
|
||||
<xsl:variable name="pdf_result_text">
|
||||
<xsl:if test="/validation/xml/summary/@status = 'valid'">
|
||||
<xsl:text>Das ZUGFeRD-PDF ist valide.</xsl:text>
|
||||
</xsl:if>
|
||||
<xsl:if test="/validation/xml/summary/@status = 'invalid'">
|
||||
<xsl:text>Das ZUGFeRD-PDF ist nicht valide.</xsl:text>
|
||||
</xsl:if>
|
||||
</xsl:variable>
|
||||
<xsl:variable name="result_text">
|
||||
<xsl:if test="/validation/xml/summary/@status = 'valid'">
|
||||
<xsl:text>Es wird empfohlen, das Dokument anzunehmen und weiterzuverarbeiten.</xsl:text>
|
||||
</xsl:if>
|
||||
<xsl:if test="/validation/xml/summary/@status = 'invalid'">
|
||||
<xsl:text>Es wird empfohlen, das Dokument zurückzuweisen.</xsl:text>
|
||||
</xsl:if>
|
||||
</xsl:variable>
|
||||
<xsl:template match="validation">
|
||||
<fo:root language="{$lang}"
|
||||
font-family="{$fontSans}">
|
||||
<fo:layout-master-set>
|
||||
<fo:simple-page-master master-name="DIN-A4"
|
||||
page-height="297mm"
|
||||
page-width="210mm">
|
||||
<fo:region-body region-name="body"
|
||||
margin="20mm 10mm 20mm 20mm"/>
|
||||
</fo:simple-page-master>
|
||||
</fo:layout-master-set>
|
||||
<fo:page-sequence master-reference="DIN-A4">
|
||||
<fo:flow flow-name="body">
|
||||
<fo:block font-size="24px"
|
||||
font-weight="bold">
|
||||
<xsl:text>Prüfbericht</xsl:text>
|
||||
</fo:block>
|
||||
<xsl:call-template name="SubHeader">
|
||||
<xsl:with-param name="text"
|
||||
select=""Angaben zum geprüften Dokument""/>
|
||||
<xsl:with-param name="color"
|
||||
select=""black""/>
|
||||
</xsl:call-template>
|
||||
<fo:block>
|
||||
<fo:block text-align="justify">
|
||||
<fo:float float="right">
|
||||
<fo:block>
|
||||
<xsl:value-of select="/validation/@filename"/>
|
||||
</fo:block>
|
||||
</fo:float>
|
||||
<xsl:text>Referenz:</xsl:text>
|
||||
</fo:block>
|
||||
</fo:block>
|
||||
<fo:block>
|
||||
<fo:block text-align="justify">
|
||||
<fo:float float="right">
|
||||
<fo:block>
|
||||
<xsl:value-of select="/validation/@datetime"/>
|
||||
</fo:block>
|
||||
</fo:float>
|
||||
<xsl:text>Zeitpunkt der Prüfung:</xsl:text>
|
||||
</fo:block>
|
||||
</fo:block>
|
||||
<fo:block>
|
||||
<fo:block text-align="justify">
|
||||
<fo:float float="right">
|
||||
<fo:block>
|
||||
<xsl:value-of select="/validation/xml/info/profile"/>
|
||||
</fo:block>
|
||||
</fo:float>
|
||||
<xsl:text>Erkannter Dokumenttyp:</xsl:text>
|
||||
</fo:block>
|
||||
</fo:block>
|
||||
<xsl:apply-templates select="/validation/pdf"/>
|
||||
<!--
|
||||
<xsl:call-template name="SubHeader">
|
||||
<xsl:with-param name="text"
|
||||
select='"Konformitätsprüfung:"'/>
|
||||
<xsl:with-param name="color"
|
||||
select='"black"'/>
|
||||
</xsl:call-template>
|
||||
-->
|
||||
<xsl:call-template name="SubHeader">
|
||||
<xsl:with-param name="text"
|
||||
select="concat('Bewertung: ', $result_text)"/>
|
||||
<xsl:with-param name="color"
|
||||
select="$xml_result_color"/>
|
||||
</xsl:call-template>
|
||||
<fo:block>Validierungsergebnisse im Detail:</fo:block>
|
||||
<fo:table>
|
||||
<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-header>
|
||||
<fo:table-row background-color="#E0E0E0"
|
||||
font-weight="bold">
|
||||
<fo:table-cell>
|
||||
<fo:block>Type</fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell>
|
||||
<fo:block>Code</fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell>
|
||||
<fo:block>Schwere</fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell>
|
||||
<fo:block>Text</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
</fo:table-header>
|
||||
<fo:table-body>
|
||||
<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>
|
||||
</fo:flow>
|
||||
</fo:page-sequence>
|
||||
</fo:root>
|
||||
</xsl:template>
|
||||
<xsl:template match="notice|error">
|
||||
<fo:table-row font-size="12px"
|
||||
border-style="solid">
|
||||
<fo:table-cell number-rows-spanned="2">
|
||||
<fo:block>
|
||||
<xsl:value-of select="@type"/>
|
||||
</fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell number-rows-spanned="2">
|
||||
<fo:block>
|
||||
<xsl:call-template name="SUBID">
|
||||
<xsl:with-param name="myparam"
|
||||
select="substring-after(.,' [ID ')"/>
|
||||
</xsl:call-template>
|
||||
</fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell number-rows-spanned="2">
|
||||
<fo:block>
|
||||
<xsl:choose>
|
||||
<xsl:when test="name() = 'error'">
|
||||
<xsl:attribute name="color">red</xsl:attribute>
|
||||
<xsl:text>Fehler</xsl:text>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:text>Hinweis</xsl:text>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell>
|
||||
<fo:block>
|
||||
<xsl:if test="name() = 'error'">
|
||||
<xsl:attribute name="color">red</xsl:attribute>
|
||||
</xsl:if>
|
||||
<xsl:value-of select="substring-before(.,' [ID')"/>
|
||||
</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row font-size="10px"
|
||||
border-style="solid">
|
||||
<fo:table-cell>
|
||||
<fo:block>
|
||||
<xsl:if test="name() = 'error'">
|
||||
<xsl:attribute name="color">red</xsl:attribute>
|
||||
</xsl:if>
|
||||
<xsl:value-of select="concat('Pfad: ', @location)"/>
|
||||
</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
</xsl:template>
|
||||
<xsl:template match="pdf">
|
||||
<xsl:call-template name="SubHeader">
|
||||
<xsl:with-param name="text"
|
||||
select="concat('ZUGFeRD-PDF: ', $pdf_result_text)"/>
|
||||
<xsl:with-param name="color"
|
||||
select=""black""/>
|
||||
</xsl:call-template>
|
||||
</xsl:template>
|
||||
<xsl:template name="SubHeader">
|
||||
<xsl:param name="text"/>
|
||||
<xsl:param name="color"/>
|
||||
<fo:block color="{$color}"
|
||||
background-color="#E0E0E0"
|
||||
margin-bottom="10px"
|
||||
padding="3px"
|
||||
font-weight="bold"
|
||||
margin-top="10px">
|
||||
<xsl:value-of select="$text"/>
|
||||
</fo:block>
|
||||
</xsl:template>
|
||||
<xsl:template name="SUBID">
|
||||
<xsl:param name="myparam"/>
|
||||
<xsl:variable name="myparam.end"
|
||||
select="substring-before($myparam, ']')"/>
|
||||
<xsl:value-of select="$myparam.end"/>
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
@@ -1,235 +1,235 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xsl:stylesheet xmlns:fo="http://www.w3.org/1999/XSL/Format"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns:axf="http://www.antennahouse.com/names/XSL/Extensions"
|
||||
xmlns:xr="urn:ce.eu:en16931:2017:xoev-de:kosit:standard:xrechnung-1"
|
||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:xrv="http://www.example.org/XRechnung-Viewer"
|
||||
xmlns:xrf="https://projekte.kosit.org/xrechnung/xrechnung-visualization/functions"
|
||||
version="2.0">
|
||||
|
||||
<!-- ==========================================================================
|
||||
== Schriften
|
||||
=========================================================================== -->
|
||||
|
||||
<xsl:variable name="fontSans">SourceSerifPro</xsl:variable>
|
||||
<xsl:variable name="fontSerif">SourceSerifPro</xsl:variable>
|
||||
|
||||
<xsl:variable name="amount-picture" select="xrf:_('amount-format')"/>
|
||||
<xsl:variable name="percentage-picture" select="xrf:_('percentage-format')"/>
|
||||
|
||||
|
||||
<!-- ==========================================================================
|
||||
== Attribute-Sets
|
||||
=========================================================================== -->
|
||||
|
||||
<!-- Fliesstext -->
|
||||
<xsl:attribute-set name="fliesstext">
|
||||
<xsl:attribute name="font-family"><xsl:value-of select="$fontSans"/></xsl:attribute>
|
||||
<xsl:attribute name="font-size">9pt</xsl:attribute>
|
||||
<xsl:attribute name="line-height">12pt</xsl:attribute>
|
||||
<xsl:attribute name="hyphenation-ladder-count">3</xsl:attribute>
|
||||
<xsl:attribute name="hyphenate">true</xsl:attribute>
|
||||
<xsl:attribute name="language">de</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- H1 Marker -->
|
||||
<xsl:attribute-set name="marker">
|
||||
<xsl:attribute name="font-size">18pt</xsl:attribute>
|
||||
<xsl:attribute name="font-family"><xsl:value-of select="$fontSerif"/></xsl:attribute>
|
||||
<xsl:attribute name="hyphenate">false</xsl:attribute>
|
||||
<xsl:attribute name="span">all</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- H1 -->
|
||||
<xsl:attribute-set name="h1">
|
||||
<xsl:attribute name="font-size">18pt</xsl:attribute>
|
||||
<xsl:attribute name="font-family"><xsl:value-of select="$fontSerif"/></xsl:attribute>
|
||||
<xsl:attribute name="font-weight">bold</xsl:attribute>
|
||||
<xsl:attribute name="margin-bottom">4mm</xsl:attribute>
|
||||
<xsl:attribute name="hyphenate">false</xsl:attribute>
|
||||
<xsl:attribute name="span">all</xsl:attribute>
|
||||
<xsl:attribute name="keep-with-next.within-page">always</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- H2-Container -->
|
||||
<xsl:attribute-set name="h2-container">
|
||||
<xsl:attribute name="border-top">0.5pt solid</xsl:attribute>
|
||||
<xsl:attribute name="padding-top">2.5pt</xsl:attribute>
|
||||
<xsl:attribute name="span">all</xsl:attribute>
|
||||
<xsl:attribute name="margin-bottom">4mm</xsl:attribute>
|
||||
<xsl:attribute name="keep-with-next.within-page">always</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- H2 -->
|
||||
<xsl:attribute-set name="h2">
|
||||
<xsl:attribute name="font-size">9pt</xsl:attribute>
|
||||
<xsl:attribute name="font-family"><xsl:value-of select="$fontSans"/></xsl:attribute>
|
||||
<xsl:attribute name="font-weight">bold</xsl:attribute>
|
||||
<xsl:attribute name="border">0.5pt solid</xsl:attribute>
|
||||
<xsl:attribute name="padding">4pt 6pt</xsl:attribute>
|
||||
<xsl:attribute name="keep-with-next.within-page">always</xsl:attribute>
|
||||
<xsl:attribute name="margin">0</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- H3 -->
|
||||
<xsl:attribute-set name="h3">
|
||||
<xsl:attribute name="font-size">10pt</xsl:attribute>
|
||||
<xsl:attribute name="font-family"><xsl:value-of select="$fontSans"/></xsl:attribute>
|
||||
<xsl:attribute name="font-weight">bold</xsl:attribute>
|
||||
<xsl:attribute name="margin-bottom">1mm</xsl:attribute>
|
||||
<xsl:attribute name="margin-left">2mm</xsl:attribute>
|
||||
<xsl:attribute name="margin-top">2mm</xsl:attribute>
|
||||
<xsl:attribute name="span">all</xsl:attribute>
|
||||
<xsl:attribute name="keep-with-next.within-page">always</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- Separator -->
|
||||
<xsl:attribute-set name="separator">
|
||||
<xsl:attribute name="margin-left">2mm</xsl:attribute>
|
||||
<xsl:attribute name="margin-bottom">3mm</xsl:attribute>
|
||||
<xsl:attribute name="border-bottom">0.5pt dotted</xsl:attribute>
|
||||
<xsl:attribute name="color">#999999</xsl:attribute>
|
||||
<xsl:attribute name="keep-with-next.within-page">always</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- Wert-Felder -->
|
||||
<xsl:variable name="wertHG">#eeeeee</xsl:variable>
|
||||
<xsl:variable name="wert-legende-breite">28</xsl:variable>
|
||||
|
||||
<xsl:attribute-set name="wert-legende">
|
||||
<xsl:attribute name="font-size">7pt</xsl:attribute>
|
||||
<xsl:attribute name="line-height">10pt</xsl:attribute>
|
||||
<xsl:attribute name="padding-top">1mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-bottom">1mm</xsl:attribute>
|
||||
<xsl:attribute name="margin-left">2mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-right">1mm</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="wert-ausgabe">
|
||||
<xsl:attribute name="font-size">9pt</xsl:attribute>
|
||||
<xsl:attribute name="line-height">10pt</xsl:attribute>
|
||||
<xsl:attribute name="background-color"><xsl:value-of select="$wertHG"/></xsl:attribute>
|
||||
<xsl:attribute name="padding-top">1mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-bottom">1mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-left">2mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-right">2mm</xsl:attribute>
|
||||
<xsl:attribute name="keep-together.within-column">always</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- Rechnung-Felder -->
|
||||
<xsl:attribute-set name="rechnung-legende">
|
||||
<xsl:attribute name="font-size">9pt</xsl:attribute>
|
||||
<xsl:attribute name="text-align">left</xsl:attribute>
|
||||
<xsl:attribute name="padding-top">0.2mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-bottom">0.2mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-left">0mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-right">1mm</xsl:attribute>
|
||||
<xsl:attribute name="margin-left">0mm</xsl:attribute>
|
||||
<xsl:attribute name="keep-with-next.within-page">always</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="rechnung-steuer">
|
||||
<xsl:attribute name="font-size">9pt</xsl:attribute>
|
||||
<xsl:attribute name="text-align">left</xsl:attribute>
|
||||
<xsl:attribute name="padding-top">0.2mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-bottom">0.2mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-left">0mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-right">1mm</xsl:attribute>
|
||||
<xsl:attribute name="margin-left">0mm</xsl:attribute>
|
||||
<xsl:attribute name="keep-with-next.within-page">always</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="rechnung-wert">
|
||||
<xsl:attribute name="font-size">9pt</xsl:attribute>
|
||||
<xsl:attribute name="text-align">right</xsl:attribute>
|
||||
<xsl:attribute name="padding-top">0.2mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-bottom">0.2mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-left">0mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-right">0mm</xsl:attribute>
|
||||
<xsl:attribute name="margin-left">0mm</xsl:attribute>
|
||||
<xsl:attribute name="keep-with-next.within-page">always</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="rechnung-legende-summe">
|
||||
<xsl:attribute name="font-size">9pt</xsl:attribute>
|
||||
<xsl:attribute name="text-align">left</xsl:attribute>
|
||||
<xsl:attribute name="padding-top">0.4mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-bottom">0.2mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-left">0mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-right">1mm</xsl:attribute>
|
||||
<xsl:attribute name="border-top">0.1pt solid #999999</xsl:attribute>
|
||||
<xsl:attribute name="keep-with-next.within-page">always</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="rechnung-steuer-summe">
|
||||
<xsl:attribute name="font-size">9pt</xsl:attribute>
|
||||
<xsl:attribute name="text-align">left</xsl:attribute>
|
||||
<xsl:attribute name="padding-top">0.4mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-bottom">0.2mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-left">0mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-right">1mm</xsl:attribute>
|
||||
<xsl:attribute name="border-top">0.1pt solid #999999</xsl:attribute>
|
||||
<xsl:attribute name="keep-with-next.within-page">always</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="rechnung-wert-summe">
|
||||
<xsl:attribute name="font-size">9pt</xsl:attribute>
|
||||
<xsl:attribute name="font-weight">bold</xsl:attribute>
|
||||
<xsl:attribute name="text-align">right</xsl:attribute>
|
||||
<xsl:attribute name="padding-top">0.4mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-bottom">0.2mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-left">0mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-right">0mm</xsl:attribute>
|
||||
<xsl:attribute name="border-top">0.1pt solid #999999</xsl:attribute>
|
||||
<xsl:attribute name="keep-with-next.within-page">always</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- Box-Container -->
|
||||
<xsl:attribute-set name="box-container-kapitel">
|
||||
<xsl:attribute name="margin-bottom">10mm</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="box-container-bereich">
|
||||
<xsl:attribute name="margin-bottom">2mm</xsl:attribute>
|
||||
<xsl:attribute name="keep-together.within-page">always</xsl:attribute>
|
||||
<xsl:attribute name="span">all</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="box-container-inner">
|
||||
<xsl:attribute name="margin-bottom">2mm</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- Tabular invoice lines -->
|
||||
<xsl:attribute-set name="invoicelines-table">
|
||||
<xsl:attribute name="padding-left">2pt</xsl:attribute>
|
||||
<xsl:attribute name="padding-right">2pt</xsl:attribute>
|
||||
<xsl:attribute name="width">100%</xsl:attribute>
|
||||
<xsl:attribute name="table-layout">fixed</xsl:attribute>
|
||||
<xsl:attribute name="margin-bottom">2mm</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="invoicelines-table-header">
|
||||
<xsl:attribute name="font-weight">bold</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="invoicelines-table-row">
|
||||
<!-- Nested sub-invoice lines will recursively decrease font-size -->
|
||||
<xsl:attribute name="font-size" select="if (self::xr:SUB_INVOICE_LINE) then '90%' else '100%'"/>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="invoicelines-nested-info">
|
||||
<xsl:attribute name="font-size">80%</xsl:attribute>
|
||||
<xsl:attribute name="font-style">italic</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="invoicelines-allowances-table">
|
||||
<xsl:attribute name="padding-left">2pt</xsl:attribute>
|
||||
<xsl:attribute name="padding-right">2pt</xsl:attribute>
|
||||
<xsl:attribute name="width">100%</xsl:attribute>
|
||||
<xsl:attribute name="table-layout">fixed</xsl:attribute>
|
||||
<xsl:attribute name="font-size">80%</xsl:attribute>
|
||||
<xsl:attribute name="font-style">italic</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
</xsl:stylesheet>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xsl:stylesheet xmlns:fo="http://www.w3.org/1999/XSL/Format"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns:axf="http://www.antennahouse.com/names/XSL/Extensions"
|
||||
xmlns:xr="urn:ce.eu:en16931:2017:xoev-de:kosit:standard:xrechnung-1"
|
||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:xrv="http://www.example.org/XRechnung-Viewer"
|
||||
xmlns:xrf="https://projekte.kosit.org/xrechnung/xrechnung-visualization/functions"
|
||||
version="2.0">
|
||||
|
||||
<!-- ==========================================================================
|
||||
== Schriften
|
||||
=========================================================================== -->
|
||||
|
||||
<xsl:variable name="fontSans">SourceSansPro</xsl:variable>
|
||||
<xsl:variable name="fontSerif">SourceSerifPro</xsl:variable>
|
||||
|
||||
<xsl:variable name="amount-picture" select="xrf:_('amount-format')"/>
|
||||
<xsl:variable name="percentage-picture" select="xrf:_('percentage-format')"/>
|
||||
|
||||
|
||||
<!-- ==========================================================================
|
||||
== Attribute-Sets
|
||||
=========================================================================== -->
|
||||
|
||||
<!-- Fliesstext -->
|
||||
<xsl:attribute-set name="fliesstext">
|
||||
<xsl:attribute name="font-family"><xsl:value-of select="$fontSans"/></xsl:attribute>
|
||||
<xsl:attribute name="font-size">9pt</xsl:attribute>
|
||||
<xsl:attribute name="line-height">12pt</xsl:attribute>
|
||||
<xsl:attribute name="hyphenation-ladder-count">3</xsl:attribute>
|
||||
<xsl:attribute name="hyphenate">true</xsl:attribute>
|
||||
<xsl:attribute name="language">de</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- H1 Marker -->
|
||||
<xsl:attribute-set name="marker">
|
||||
<xsl:attribute name="font-size">18pt</xsl:attribute>
|
||||
<xsl:attribute name="font-family"><xsl:value-of select="$fontSerif"/></xsl:attribute>
|
||||
<xsl:attribute name="hyphenate">false</xsl:attribute>
|
||||
<xsl:attribute name="span">all</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- H1 -->
|
||||
<xsl:attribute-set name="h1">
|
||||
<xsl:attribute name="font-size">18pt</xsl:attribute>
|
||||
<xsl:attribute name="font-family"><xsl:value-of select="$fontSerif"/></xsl:attribute>
|
||||
<xsl:attribute name="font-weight">bold</xsl:attribute>
|
||||
<xsl:attribute name="margin-bottom">4mm</xsl:attribute>
|
||||
<xsl:attribute name="hyphenate">false</xsl:attribute>
|
||||
<xsl:attribute name="span">all</xsl:attribute>
|
||||
<xsl:attribute name="keep-with-next.within-page">always</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- H2-Container -->
|
||||
<xsl:attribute-set name="h2-container">
|
||||
<xsl:attribute name="border-top">0.5pt solid</xsl:attribute>
|
||||
<xsl:attribute name="padding-top">2.5pt</xsl:attribute>
|
||||
<xsl:attribute name="span">all</xsl:attribute>
|
||||
<xsl:attribute name="margin-bottom">4mm</xsl:attribute>
|
||||
<xsl:attribute name="keep-with-next.within-page">always</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- H2 -->
|
||||
<xsl:attribute-set name="h2">
|
||||
<xsl:attribute name="font-size">9pt</xsl:attribute>
|
||||
<xsl:attribute name="font-family"><xsl:value-of select="$fontSans"/></xsl:attribute>
|
||||
<xsl:attribute name="font-weight">bold</xsl:attribute>
|
||||
<xsl:attribute name="border">0.5pt solid</xsl:attribute>
|
||||
<xsl:attribute name="padding">4pt 6pt</xsl:attribute>
|
||||
<xsl:attribute name="keep-with-next.within-page">always</xsl:attribute>
|
||||
<xsl:attribute name="margin">0</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- H3 -->
|
||||
<xsl:attribute-set name="h3">
|
||||
<xsl:attribute name="font-size">10pt</xsl:attribute>
|
||||
<xsl:attribute name="font-family"><xsl:value-of select="$fontSans"/></xsl:attribute>
|
||||
<xsl:attribute name="font-weight">bold</xsl:attribute>
|
||||
<xsl:attribute name="margin-bottom">1mm</xsl:attribute>
|
||||
<xsl:attribute name="margin-left">2mm</xsl:attribute>
|
||||
<xsl:attribute name="margin-top">2mm</xsl:attribute>
|
||||
<xsl:attribute name="span">all</xsl:attribute>
|
||||
<xsl:attribute name="keep-with-next.within-page">always</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- Separator -->
|
||||
<xsl:attribute-set name="separator">
|
||||
<xsl:attribute name="margin-left">2mm</xsl:attribute>
|
||||
<xsl:attribute name="margin-bottom">3mm</xsl:attribute>
|
||||
<xsl:attribute name="border-bottom">0.5pt dotted</xsl:attribute>
|
||||
<xsl:attribute name="color">#999999</xsl:attribute>
|
||||
<xsl:attribute name="keep-with-next.within-page">always</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- Wert-Felder -->
|
||||
<xsl:variable name="wertHG">#eeeeee</xsl:variable>
|
||||
<xsl:variable name="wert-legende-breite">28</xsl:variable>
|
||||
|
||||
<xsl:attribute-set name="wert-legende">
|
||||
<xsl:attribute name="font-size">7pt</xsl:attribute>
|
||||
<xsl:attribute name="line-height">10pt</xsl:attribute>
|
||||
<xsl:attribute name="padding-top">1mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-bottom">1mm</xsl:attribute>
|
||||
<xsl:attribute name="margin-left">2mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-right">1mm</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="wert-ausgabe">
|
||||
<xsl:attribute name="font-size">9pt</xsl:attribute>
|
||||
<xsl:attribute name="line-height">10pt</xsl:attribute>
|
||||
<xsl:attribute name="background-color"><xsl:value-of select="$wertHG"/></xsl:attribute>
|
||||
<xsl:attribute name="padding-top">1mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-bottom">1mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-left">2mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-right">2mm</xsl:attribute>
|
||||
<xsl:attribute name="keep-together.within-column">always</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- Rechnung-Felder -->
|
||||
<xsl:attribute-set name="rechnung-legende">
|
||||
<xsl:attribute name="font-size">9pt</xsl:attribute>
|
||||
<xsl:attribute name="text-align">left</xsl:attribute>
|
||||
<xsl:attribute name="padding-top">0.2mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-bottom">0.2mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-left">0mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-right">1mm</xsl:attribute>
|
||||
<xsl:attribute name="margin-left">0mm</xsl:attribute>
|
||||
<xsl:attribute name="keep-with-next.within-page">always</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="rechnung-steuer">
|
||||
<xsl:attribute name="font-size">9pt</xsl:attribute>
|
||||
<xsl:attribute name="text-align">left</xsl:attribute>
|
||||
<xsl:attribute name="padding-top">0.2mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-bottom">0.2mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-left">0mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-right">1mm</xsl:attribute>
|
||||
<xsl:attribute name="margin-left">0mm</xsl:attribute>
|
||||
<xsl:attribute name="keep-with-next.within-page">always</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="rechnung-wert">
|
||||
<xsl:attribute name="font-size">9pt</xsl:attribute>
|
||||
<xsl:attribute name="text-align">right</xsl:attribute>
|
||||
<xsl:attribute name="padding-top">0.2mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-bottom">0.2mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-left">0mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-right">0mm</xsl:attribute>
|
||||
<xsl:attribute name="margin-left">0mm</xsl:attribute>
|
||||
<xsl:attribute name="keep-with-next.within-page">always</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="rechnung-legende-summe">
|
||||
<xsl:attribute name="font-size">9pt</xsl:attribute>
|
||||
<xsl:attribute name="text-align">left</xsl:attribute>
|
||||
<xsl:attribute name="padding-top">0.4mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-bottom">0.2mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-left">0mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-right">1mm</xsl:attribute>
|
||||
<xsl:attribute name="border-top">0.1pt solid #999999</xsl:attribute>
|
||||
<xsl:attribute name="keep-with-next.within-page">always</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="rechnung-steuer-summe">
|
||||
<xsl:attribute name="font-size">9pt</xsl:attribute>
|
||||
<xsl:attribute name="text-align">left</xsl:attribute>
|
||||
<xsl:attribute name="padding-top">0.4mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-bottom">0.2mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-left">0mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-right">1mm</xsl:attribute>
|
||||
<xsl:attribute name="border-top">0.1pt solid #999999</xsl:attribute>
|
||||
<xsl:attribute name="keep-with-next.within-page">always</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="rechnung-wert-summe">
|
||||
<xsl:attribute name="font-size">9pt</xsl:attribute>
|
||||
<xsl:attribute name="font-weight">bold</xsl:attribute>
|
||||
<xsl:attribute name="text-align">right</xsl:attribute>
|
||||
<xsl:attribute name="padding-top">0.4mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-bottom">0.2mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-left">0mm</xsl:attribute>
|
||||
<xsl:attribute name="padding-right">0mm</xsl:attribute>
|
||||
<xsl:attribute name="border-top">0.1pt solid #999999</xsl:attribute>
|
||||
<xsl:attribute name="keep-with-next.within-page">always</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- Box-Container -->
|
||||
<xsl:attribute-set name="box-container-kapitel">
|
||||
<xsl:attribute name="margin-bottom">10mm</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="box-container-bereich">
|
||||
<xsl:attribute name="margin-bottom">2mm</xsl:attribute>
|
||||
<xsl:attribute name="keep-together.within-page">always</xsl:attribute>
|
||||
<xsl:attribute name="span">all</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="box-container-inner">
|
||||
<xsl:attribute name="margin-bottom">2mm</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- Tabular invoice lines -->
|
||||
<xsl:attribute-set name="invoicelines-table">
|
||||
<xsl:attribute name="padding-left">2pt</xsl:attribute>
|
||||
<xsl:attribute name="padding-right">2pt</xsl:attribute>
|
||||
<xsl:attribute name="width">100%</xsl:attribute>
|
||||
<xsl:attribute name="table-layout">fixed</xsl:attribute>
|
||||
<xsl:attribute name="margin-bottom">2mm</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="invoicelines-table-header">
|
||||
<xsl:attribute name="font-weight">bold</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="invoicelines-table-row">
|
||||
<!-- Nested sub-invoice lines will recursively decrease font-size -->
|
||||
<xsl:attribute name="font-size" select="if (self::xr:SUB_INVOICE_LINE) then '90%' else '100%'"/>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="invoicelines-nested-info">
|
||||
<xsl:attribute name="font-size">80%</xsl:attribute>
|
||||
<xsl:attribute name="font-style">italic</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="invoicelines-allowances-table">
|
||||
<xsl:attribute name="padding-left">2pt</xsl:attribute>
|
||||
<xsl:attribute name="padding-right">2pt</xsl:attribute>
|
||||
<xsl:attribute name="width">100%</xsl:attribute>
|
||||
<xsl:attribute name="table-layout">fixed</xsl:attribute>
|
||||
<xsl:attribute name="font-size">80%</xsl:attribute>
|
||||
<xsl:attribute name="font-style">italic</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
</xsl:stylesheet>
|
||||
|
||||
@@ -1,227 +1,229 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<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.bt44" select="'Name'"/>
|
||||
<xsl:variable name="i18n.title" select="'XRechnung'"/>
|
||||
<xsl:variable name="i18n.overview" select="'Übersicht'"/>
|
||||
<xsl:variable name="i18n.items" select="'Positionen'"/>
|
||||
<xsl:variable name="i18n.information" select="'Informationen'"/>
|
||||
<xsl:variable name="i18n.attachments" select="'Anhänge'"/>
|
||||
<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.recipientInfo" select="'Informationen zum Käufer'"/>
|
||||
<xsl:variable name="i18n.bt50" select="'Straße / Haus-Nr.'"/>
|
||||
<xsl:variable name="i18n.bt51" select="'Postfach'"/>
|
||||
<xsl:variable name="i18n.bt163" select="'Adresszusatz'"/>
|
||||
<xsl:variable name="i18n.bt53" select="'PLZ'"/>
|
||||
<xsl:variable name="i18n.bt52" select="'Ort'"/>
|
||||
<xsl:variable name="i18n.bt54" select="'Bundesland'"/>
|
||||
<xsl:variable name="i18n.bt55" select="'Land'"/>
|
||||
<xsl:variable name="i18n.bt46" select="'Kennung / Kunden-Nr.'"/>
|
||||
<xsl:variable name="i18n.bt46-id" select="'Schema der Kennung'"/>
|
||||
<xsl:variable name="i18n.bt56" select="'Name'"/>
|
||||
<xsl:variable name="i18n.bt57" select="'Telefon'"/>
|
||||
<xsl:variable name="i18n.bt58" select="'E-Mail-Adresse'"/>
|
||||
<xsl:variable name="i18n.bt27" select="'Firmenname'"/>
|
||||
<xsl:variable name="i18n.bt35" select="'Straße / Haus-Nr.'"/>
|
||||
<xsl:variable name="i18n.bt36" select="'Postfach'"/>
|
||||
<xsl:variable name="i18n.bt162" select="'Adresszusatz'"/>
|
||||
<xsl:variable name="i18n.bt38" select="'PLZ'"/>
|
||||
<xsl:variable name="i18n.bt37" select="'Ort'"/>
|
||||
<xsl:variable name="i18n.bt39" select="'Bundesland'"/>
|
||||
<xsl:variable name="i18n.bt40" select="'Ländercode'"/>
|
||||
<xsl:variable name="i18n.bt29" select="'Kennung'"/>
|
||||
<xsl:variable name="i18n.bt29-id" select="'Schema der Kennung'"/>
|
||||
<xsl:variable name="i18n.bt41" select="'Name'"/>
|
||||
<xsl:variable name="i18n.bt42" select="'Telefon'"/>
|
||||
<xsl:variable name="i18n.bt43" select="'E-Mail-Adresse'"/>
|
||||
<xsl:variable name="i18n.bt1" select="'Rechnungsnummer'"/>
|
||||
<xsl:variable name="i18n.bt2" select="'Rechnungsdatum'"/>
|
||||
<xsl:variable name="i18n.details" select="'Rechnungsdaten'"/>
|
||||
<xsl:variable name="i18n.period" select="'Abrechnungszeitraum'"/>
|
||||
<xsl:variable name="i18n.bt3" select="'Rechnungsart'"/>
|
||||
<xsl:variable name="i18n.bt5" select="'Währung'"/>
|
||||
<xsl:variable name="i18n.bt73" select="'von'"/>
|
||||
<xsl:variable name="i18n.bt74" select="'bis'"/>
|
||||
<xsl:variable name="i18n.bt11" select="'Projektnummer'"/>
|
||||
<xsl:variable name="i18n.bt12" select="'Vertragsnummer'"/>
|
||||
<xsl:variable name="i18n.bt13" select="'Bestellnummer'"/>
|
||||
<xsl:variable name="i18n.bt14" select="'Auftragsnummer'"/>
|
||||
<xsl:variable name="i18n.bt25" select="'Rechnungsnummer'"/>
|
||||
<xsl:variable name="i18n.bt26" select="'Rechnungsdatum'"/>
|
||||
<xsl:variable name="i18n.bg22" select="'Gesamtbeträge der Rechnung'"/>
|
||||
<xsl:variable name="i18n.bt106" select="'Summe aller Positionen'"/>
|
||||
<xsl:variable name="i18n.bt107" select="'Summe Nachlässe'"/>
|
||||
<xsl:variable name="i18n.bt108" select="'Summe Zuschläge'"/>
|
||||
<xsl:variable name="i18n.bt109" select="'Gesamtsumme'"/>
|
||||
<xsl:variable name="i18n.bt110" select="'Summe Umsatzsteuer'"/>
|
||||
<xsl:variable name="i18n.bt111" select="'Summe Umsatzsteuer in Abrechnungswährung'"/>
|
||||
<xsl:variable name="i18n.bt112" select="'Gesamtsumme'"/>
|
||||
<xsl:variable name="i18n.bt113" select="'Gezahlter Betrag'"/>
|
||||
<xsl:variable name="i18n.bt114" select="'Rundungsbetrag'"/>
|
||||
<xsl:variable name="i18n.bt115" select="'Fälliger Betrag'"/>
|
||||
<xsl:variable name="i18n.bg23" select="'Aufschlüsselung der Umsatzsteuer auf Ebene der Rechnung'"/>
|
||||
<xsl:variable name="i18n.bt118" select="'Umsatzsteuerkategorie'"/>
|
||||
<xsl:variable name="i18n.bt116" select="'Gesamtsumme'"/>
|
||||
<xsl:variable name="i18n.bt119" select="'Umsatzsteuersatz'"/>
|
||||
<xsl:variable name="i18n.bt117" select="'Umsatzsteuerbetrag'"/>
|
||||
<xsl:variable name="i18n.bt120" select="'Befreiungsgrund'"/>
|
||||
<xsl:variable name="i18n.bt121" select="'Kennung für den Befreiungsgrund'"/>
|
||||
<xsl:variable name="i18n.bg20" select="'Nachlass auf Ebene der Rechnung'"/>
|
||||
<xsl:variable name="i18n.bt95" select="'Umsatzsteuerkategorie des Nachlasses'"/>
|
||||
<xsl:variable name="i18n.bt93" select="'Grundbetrag'"/>
|
||||
<xsl:variable name="i18n.bt94" select="'Prozentsatz'"/>
|
||||
<xsl:variable name="i18n.bt92" select="'Nachlass'"/>
|
||||
<xsl:variable name="i18n.bt96" select="'Umsatzsteuersatz des Nachlasses'"/>
|
||||
<xsl:variable name="i18n.bt97" select="'Grund für den Nachlass'"/>
|
||||
<xsl:variable name="i18n.bt98" select="'Document level allowance reason code'"/>
|
||||
<xsl:variable name="i18n.bg21" select="'Zuschlag auf Ebene der Rechnung'"/>
|
||||
<xsl:variable name="i18n.bt102" select="'Umsatzsteuerkategorie des Zuschlages'"/>
|
||||
<xsl:variable name="i18n.bt100" select="'Grundbetrag'"/>
|
||||
<xsl:variable name="i18n.bt101" select="'Prozentsatz'"/>
|
||||
<xsl:variable name="i18n.bt99" select="'Zuschlag'"/>
|
||||
<xsl:variable name="i18n.bt103" select="'Umsatzsteuersatz des Zuschlages'"/>
|
||||
<xsl:variable name="i18n.bt104" select="'Grund für den Zuschlag'"/>
|
||||
<xsl:variable name="i18n.bt105" select="'Document level charge reason code'"/>
|
||||
<xsl:variable name="i18n.bgx42" select="'Versandkosten'"/>
|
||||
<xsl:variable name="i18n.btx274" select="'Umsatzsteuerkategorie der Versandkosten'"/>
|
||||
<xsl:variable name="i18n.btx272" select="'Betrag'"/>
|
||||
<xsl:variable name="i18n.btx273" select="'Umsatzsteuersatz der Versandkosten'"/>
|
||||
<xsl:variable name="i18n.btx271" select="'Versandkostenbeschreibung'"/>
|
||||
<xsl:variable name="i18n.bt20" select="'Skonto; weitere Zahlungsbed.'"/>
|
||||
<xsl:variable name="i18n.bt9" select="'Fälligkeitsdatum'"/>
|
||||
<xsl:variable name="i18n.bt81" select="'Code für das Zahlungsmittel'"/>
|
||||
<xsl:variable name="i18n.bt82" select="'Zahlungsmittel'"/>
|
||||
<xsl:variable name="i18n.bt83" select="'Verwendungszweck'"/>
|
||||
<xsl:variable name="i18n.bg18" select="'Karteninformation'"/>
|
||||
<xsl:variable name="i18n.bt87" select="'Kartennummer'"/>
|
||||
<xsl:variable name="i18n.bt88" select="'Karteninhaber'"/>
|
||||
<xsl:variable name="i18n.bg19" select="'Lastschrift'"/>
|
||||
<xsl:variable name="i18n.bt89" select="'Mandatsreferenznr.'"/>
|
||||
<xsl:variable name="i18n.bt91" select="'IBAN'"/>
|
||||
<xsl:variable name="i18n.bt90" select="'Gläubiger-ID'"/>
|
||||
<xsl:variable name="i18n.bg17" select="'Überweisung'"/>
|
||||
<xsl:variable name="i18n.bt85" select="'Kontoinhaber'"/>
|
||||
<xsl:variable name="i18n.bt84" select="'IBAN'"/>
|
||||
<xsl:variable name="i18n.bt86" select="'BIC'"/>
|
||||
<xsl:variable name="i18n.bg1" select="'Bemerkung zur Rechnung'"/>
|
||||
<xsl:variable name="i18n.bt21" select="'Betreff'"/>
|
||||
<xsl:variable name="i18n.bt22" select="'Bemerkung'"/>
|
||||
<xsl:variable name="i18n.bt126" select="'Position'"/>
|
||||
<xsl:variable name="i18n.bt127" select="'Freitext'"/>
|
||||
<xsl:variable name="i18n.bt128" select="'Objektkennung'"/>
|
||||
<xsl:variable name="i18n.bt128-id" select="'Schema der Objektkennung'"/>
|
||||
<xsl:variable name="i18n.bt132" select="'Nummer der Auftragsposition'"/>
|
||||
<xsl:variable name="i18n.bt133" select="'Kontierungshinweis /Kostenstelle'"/>
|
||||
<xsl:variable name="i18n.bg26" select="'Abrechnungszeitraum'"/>
|
||||
<xsl:variable name="i18n.bt134" select="'von'"/>
|
||||
<xsl:variable name="i18n.bt135" select="'bis'"/>
|
||||
<xsl:variable name="i18n.bg29" select="'Preiseinzelheiten'"/>
|
||||
<xsl:variable name="i18n.bt129" select="'Menge'"/>
|
||||
<xsl:variable name="i18n.bt130" select="'Einheit'"/>
|
||||
<xsl:variable name="i18n.bt146" select="'Preis pro Einheit (netto)'"/>
|
||||
<xsl:variable name="i18n.bt131" select="'Gesamtpreis (netto)'"/>
|
||||
<xsl:variable name="i18n.bt147" select="'Rabatt (netto)'"/>
|
||||
<xsl:variable name="i18n.bt148" select="'Listenpreis (netto)'"/>
|
||||
<xsl:variable name="i18n.bt149" select="'Anzahl der Einheit'"/>
|
||||
<xsl:variable name="i18n.bt150" select="'Code der Maßeinheit'"/>
|
||||
<xsl:variable name="i18n.bt151" select="'Umsatzsteuer'"/>
|
||||
<xsl:variable name="i18n.bt152" select="'Umsatzsteuersatz in %'"/>
|
||||
<xsl:variable name="i18n.bg27" select="'Nachlässe auf Ebene der Rechnungsposition'"/>
|
||||
<xsl:variable name="i18n.bt137" select="'Grundbetrag (netto)'"/>
|
||||
<xsl:variable name="i18n.bt138" select="'Prozentsatz'"/>
|
||||
<xsl:variable name="i18n.bt136" select="'Nachlass'"/>
|
||||
<xsl:variable name="i18n.bt139" select="'Grund des Nachlasses'"/>
|
||||
<xsl:variable name="i18n.bt140" select="'Code für den Nachlassgrund'"/>
|
||||
<xsl:variable name="i18n.bg28" select="'Zuschläge auf Ebene der Rechnungsposition'"/>
|
||||
<xsl:variable name="i18n.bt142" select="'Grundbetrag (netto)'"/>
|
||||
<xsl:variable name="i18n.bt143" select="'Prozentsatz'"/>
|
||||
<xsl:variable name="i18n.bt141" select="'Zuschlag (netto)'"/>
|
||||
<xsl:variable name="i18n.bt144" select="'Grund des Zuschlags'"/>
|
||||
<xsl:variable name="i18n.bt145" select="'Code für den Zuschlagsgrund'"/>
|
||||
<xsl:variable name="i18n.bg31" select="'Artikelinformationen'"/>
|
||||
<xsl:variable name="i18n.bt153" select="'Bezeichnung'"/>
|
||||
<xsl:variable name="i18n.bt154" select="'Beschreibung'"/>
|
||||
<xsl:variable name="i18n.bt155" select="'Artikelnummer'"/>
|
||||
<xsl:variable name="i18n.bt156" select="'Kunden-Material-Nr.'"/>
|
||||
<xsl:variable name="i18n.bg32" select="'Eigenschaften des Artikels'"/>
|
||||
<xsl:variable name="i18n.bt157" select="'Artikelkennung (EAN)'"/>
|
||||
<xsl:variable name="i18n.bt157-id" select="'Schema der Artikelkennung'"/>
|
||||
<xsl:variable name="i18n.bt158" select="'Code der Artikelklassifizierung'"/>
|
||||
<xsl:variable name="i18n.bt158-id" select="'Kennung zur Bildung des Schemas'"/>
|
||||
<xsl:variable name="i18n.bt157-vers-id" select="'Version zur Bildung des Schemas'"/>
|
||||
<xsl:variable name="i18n.bt159" select="'Code des Herkunftslandes'"/>
|
||||
<xsl:variable name="i18n.bg4" select="'Informationen zum Verkäufer'"/>
|
||||
<xsl:variable name="i18n.bt28" select="'Abweichender Handelsname'"/>
|
||||
<xsl:variable name="i18n.bt34" select="'Elektronische Adresse'"/>
|
||||
<xsl:variable name="i18n.bt34-id" select="'Schema der elektronischen Adresse'"/>
|
||||
<xsl:variable name="i18n.bt30" select="'Register-/Registriernummer'"/>
|
||||
<xsl:variable name="i18n.bt31" select="'Umsatzsteuer-ID'"/>
|
||||
<xsl:variable name="i18n.bt32" select="'Steuernummer'"/>
|
||||
<xsl:variable name="i18n.bt32-schema" select="'Schema der Steuernummer'"/>
|
||||
<xsl:variable name="i18n.bt33" select="'Weitere rechtliche Informationen'"/>
|
||||
<xsl:variable name="i18n.bt6" select="'Code der Umsatzsteuerwährung'"/>
|
||||
<xsl:variable name="i18n.bg11" select="'Steuervertreter des Verkäufers'"/>
|
||||
<xsl:variable name="i18n.bt62" select="'Name'"/>
|
||||
<xsl:variable name="i18n.bt64" select="'Straße / Hausnummer'"/>
|
||||
<xsl:variable name="i18n.bt65" select="'Postfach'"/>
|
||||
<xsl:variable name="i18n.bt164" select="'Adresszusatz'"/>
|
||||
<xsl:variable name="i18n.bt67" select="'PLZ'"/>
|
||||
<xsl:variable name="i18n.bt66" select="'Ort'"/>
|
||||
<xsl:variable name="i18n.bt68" select="'Bundesland'"/>
|
||||
<xsl:variable name="i18n.bt69" select="'Ländercode'"/>
|
||||
<xsl:variable name="i18n.bt63" select="'Umsatzsteuer-ID'"/>
|
||||
<xsl:variable name="i18n.bg7" select="'Informationen zum Käufer'"/>
|
||||
<xsl:variable name="i18n.bt45" select="'Abweichender Handelsname'"/>
|
||||
<xsl:variable name="i18n.bt49" select="'Elektronische Adresse'"/>
|
||||
<xsl:variable name="i18n.bt49-id" select="'Schema der elektronischen Adresse'"/>
|
||||
<xsl:variable name="i18n.bt47" select="'Register-/Registriernummer'"/>
|
||||
<xsl:variable name="i18n.bt47-id" select="'Schema der Register-/Registriernummer'"/>
|
||||
<xsl:variable name="i18n.bt48" select="'Umsatzsteuer-ID'"/>
|
||||
<xsl:variable name="i18n.bt7" select="'Abrechnungsdatum der Umsatzsteuer'"/>
|
||||
<xsl:variable name="i18n.bt8" select="'Code des Umsatzsteuer-Abrechnungsdatums'"/>
|
||||
<xsl:variable name="i18n.bt19" select="'Kontierungsinformation / Kostenstelle'"/>
|
||||
<xsl:variable name="i18n.bg13" select="'Lieferinformationen'"/>
|
||||
<xsl:variable name="i18n.bt71" select="'Kennung des Lieferorts'"/>
|
||||
<xsl:variable name="i18n.bt71-id" select="'Schema der Kennung'"/>
|
||||
<xsl:variable name="i18n.bt72" select="'Lieferdatum'"/>
|
||||
<xsl:variable name="i18n.bt70" select="'Name des Empfängers'"/>
|
||||
<xsl:variable name="i18n.bt75" select="'Straße / Haus-Nr.'"/>
|
||||
<xsl:variable name="i18n.bt76" select="'Postfach'"/>
|
||||
<xsl:variable name="i18n.bt165" select="'Adresszusatz'"/>
|
||||
<xsl:variable name="i18n.bt78" select="'PLZ'"/>
|
||||
<xsl:variable name="i18n.bt77" select="'Ort'"/>
|
||||
<xsl:variable name="i18n.bt79" select="'Bundesland'"/>
|
||||
<xsl:variable name="i18n.bt80" select="'Land'"/>
|
||||
<xsl:variable name="i18n.bt17" select="'Vergabenummer'"/>
|
||||
<xsl:variable name="i18n.bt15" select="'Kennung der Empfangsbestätigung'"/>
|
||||
<xsl:variable name="i18n.bt16" select="'Kennung der Versandanzeige'"/>
|
||||
<xsl:variable name="i18n.bt23" select="'Prozesskennung'"/>
|
||||
<xsl:variable name="i18n.bt24" select="'Spezifikationskennung'"/>
|
||||
<xsl:variable name="i18n.bt18" select="'Objektkennung'"/>
|
||||
<xsl:variable name="i18n.bt18-id" select="'Schema der Objektkennung'"/>
|
||||
<xsl:variable name="i18n.bg10" select="'Vom Verkäufer abweichender Zahlungsempfänger'"/>
|
||||
<xsl:variable name="i18n.bt59" select="'Name'"/>
|
||||
<xsl:variable name="i18n.bt60" select="'Kennung'"/>
|
||||
<xsl:variable name="i18n.bt60-id" select="'Schema der Kennung'"/>
|
||||
<xsl:variable name="i18n.bt61" select="'Register-/Registriernummer'"/>
|
||||
<xsl:variable name="i18n.bt61-id" select="'Schema der Register-/Registriernummer'"/>
|
||||
<xsl:variable name="i18n.bg24" select="'Rechnungsbegründende Unterlagen'"/>
|
||||
<xsl:variable name="i18n.bt122" select="'Kennung'"/>
|
||||
<xsl:variable name="i18n.bt123" select="'Beschreibung'"/>
|
||||
<xsl:variable name="i18n.bt124" select="'Verweis (z.B. Internetadresse)'"/>
|
||||
<xsl:variable name="i18n.bt125" select="'Anhangsdokument'"/>
|
||||
<xsl:variable name="i18n.bt125-format" select="'Format des Anhangdokuments'"/>
|
||||
<xsl:variable name="i18n.bt125-name" select="'Name des Anhangsdokuments'"/>
|
||||
<xsl:variable name="i18n.historyDate" select="'Datum/Uhrzeit'"/>
|
||||
<xsl:variable name="i18n.historySubject" select="'Betreff'"/>
|
||||
<xsl:variable name="i18n.historyText" select="'Text'"/>
|
||||
<xsl:variable name="i18n.historyDetails" select="'Details'"/>
|
||||
<xsl:variable name="i18n.payment" select="'Zahlungsdaten'"/>
|
||||
<xsl:variable name="i18n.contract_information" select="'Vertragsdaten'"/>
|
||||
<xsl:variable name="i18n.preceding_invoice_reference" select="'Vorausgegangene Rechnungen'"/>
|
||||
|
||||
<xsl:include href="xrechnung-html.univ.xsl"/>
|
||||
|
||||
</xsl:stylesheet>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<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.bt44" select="'Name'"/>
|
||||
<xsl:variable name="i18n.title" select="'XRechnung'"/>
|
||||
<xsl:variable name="i18n.overview" select="'Übersicht'"/>
|
||||
<xsl:variable name="i18n.items" select="'Positionen'"/>
|
||||
<xsl:variable name="i18n.information" select="'Informationen'"/>
|
||||
<xsl:variable name="i18n.attachments" select="'Anhänge'"/>
|
||||
<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.recipientInfo" select="'Informationen zum Käufer'"/>
|
||||
<xsl:variable name="i18n.dateOf" select="' vom '"/>
|
||||
<xsl:variable name="i18n.bt50" select="'Straße / Haus-Nr.'"/>
|
||||
<xsl:variable name="i18n.bt51" select="'Postfach'"/>
|
||||
<xsl:variable name="i18n.bt163" select="'Adresszusatz'"/>
|
||||
<xsl:variable name="i18n.bt53" select="'PLZ'"/>
|
||||
<xsl:variable name="i18n.bt52" select="'Ort'"/>
|
||||
<xsl:variable name="i18n.bt54" select="'Bundesland'"/>
|
||||
<xsl:variable name="i18n.bt55" select="'Land'"/>
|
||||
<xsl:variable name="i18n.bt46" select="'Kennung / Kunden-Nr.'"/>
|
||||
<xsl:variable name="i18n.bt46-id" select="'Schema der Kennung'"/>
|
||||
<xsl:variable name="i18n.bt56" select="'Name'"/>
|
||||
<xsl:variable name="i18n.bt57" select="'Telefon'"/>
|
||||
<xsl:variable name="i18n.bt58" select="'E-Mail-Adresse'"/>
|
||||
<xsl:variable name="i18n.bt27" select="'Firmenname'"/>
|
||||
<xsl:variable name="i18n.bt35" select="'Straße / Haus-Nr.'"/>
|
||||
<xsl:variable name="i18n.bt36" select="'Postfach'"/>
|
||||
<xsl:variable name="i18n.bt162" select="'Adresszusatz'"/>
|
||||
<xsl:variable name="i18n.bt38" select="'PLZ'"/>
|
||||
<xsl:variable name="i18n.bt37" select="'Ort'"/>
|
||||
<xsl:variable name="i18n.bt39" select="'Bundesland'"/>
|
||||
<xsl:variable name="i18n.bt40" select="'Ländercode'"/>
|
||||
<xsl:variable name="i18n.bt29" select="'Kennung'"/>
|
||||
<xsl:variable name="i18n.bt29-id" select="'Schema der Kennung'"/>
|
||||
<xsl:variable name="i18n.bt41" select="'Name'"/>
|
||||
<xsl:variable name="i18n.bt42" select="'Telefon'"/>
|
||||
<xsl:variable name="i18n.bt43" select="'E-Mail-Adresse'"/>
|
||||
<xsl:variable name="i18n.bt1" select="'Rechnungsnummer'"/>
|
||||
<xsl:variable name="i18n.bt2" select="'Rechnungsdatum'"/>
|
||||
<xsl:variable name="i18n.details" select="'Rechnungsdaten'"/>
|
||||
<xsl:variable name="i18n.period" select="'Abrechnungszeitraum'"/>
|
||||
<xsl:variable name="i18n.bt3" select="'Rechnungsart'"/>
|
||||
<xsl:variable name="i18n.bt5" select="'Währung'"/>
|
||||
<xsl:variable name="i18n.bt73" select="'von'"/>
|
||||
<xsl:variable name="i18n.bt74" select="'bis'"/>
|
||||
<xsl:variable name="i18n.bt11" select="'Projektnummer'"/>
|
||||
<xsl:variable name="i18n.bt12" select="'Vertragsnummer'"/>
|
||||
<xsl:variable name="i18n.bt13" select="'Bestellnummer'"/>
|
||||
<xsl:variable name="i18n.bt14" select="'Auftragsnummer'"/>
|
||||
<xsl:variable name="i18n.bt25" select="'Rechnungsnummer'"/>
|
||||
<xsl:variable name="i18n.bt26" select="'Rechnungsdatum'"/>
|
||||
<xsl:variable name="i18n.bg22" select="'Gesamtbeträge der Rechnung'"/>
|
||||
<xsl:variable name="i18n.bt106" select="'Summe aller Positionen'"/>
|
||||
<xsl:variable name="i18n.bt107" select="'Summe Nachlässe'"/>
|
||||
<xsl:variable name="i18n.bt108" select="'Summe Zuschläge'"/>
|
||||
<xsl:variable name="i18n.bt109" select="'Gesamtsumme'"/>
|
||||
<xsl:variable name="i18n.bt110" select="'Summe Umsatzsteuer'"/>
|
||||
<xsl:variable name="i18n.bt111" select="'Summe Umsatzsteuer in Abrechnungswährung'"/>
|
||||
<xsl:variable name="i18n.bt112" select="'Gesamtsumme'"/>
|
||||
<xsl:variable name="i18n.bt113" select="'Gezahlter Betrag'"/>
|
||||
<xsl:variable name="i18n.bt114" select="'Rundungsbetrag'"/>
|
||||
<xsl:variable name="i18n.bt115" select="'Fälliger Betrag'"/>
|
||||
<xsl:variable name="i18n.bg23" select="'Aufschlüsselung der Umsatzsteuer auf Ebene der Rechnung'"/>
|
||||
<xsl:variable name="i18n.bt118" select="'Umsatzsteuerkategorie'"/>
|
||||
<xsl:variable name="i18n.bt116" select="'Gesamtsumme'"/>
|
||||
<xsl:variable name="i18n.bt119" select="'Umsatzsteuersatz'"/>
|
||||
<xsl:variable name="i18n.bt117" select="'Umsatzsteuerbetrag'"/>
|
||||
<xsl:variable name="i18n.bt120" select="'Befreiungsgrund'"/>
|
||||
<xsl:variable name="i18n.bt121" select="'Kennung für den Befreiungsgrund'"/>
|
||||
<xsl:variable name="i18n.bg20" select="'Nachlass auf Ebene der Rechnung'"/>
|
||||
<xsl:variable name="i18n.bt95" select="'Umsatzsteuerkategorie des Nachlasses'"/>
|
||||
<xsl:variable name="i18n.bt93" select="'Grundbetrag'"/>
|
||||
<xsl:variable name="i18n.bt94" select="'Prozentsatz'"/>
|
||||
<xsl:variable name="i18n.bt92" select="'Nachlass'"/>
|
||||
<xsl:variable name="i18n.bt96" select="'Umsatzsteuersatz des Nachlasses'"/>
|
||||
<xsl:variable name="i18n.bt97" select="'Grund für den Nachlass'"/>
|
||||
<xsl:variable name="i18n.bt98" select="'Document level allowance reason code'"/>
|
||||
<xsl:variable name="i18n.bg21" select="'Zuschlag auf Ebene der Rechnung'"/>
|
||||
<xsl:variable name="i18n.bt102" select="'Umsatzsteuerkategorie des Zuschlages'"/>
|
||||
<xsl:variable name="i18n.bt100" select="'Grundbetrag'"/>
|
||||
<xsl:variable name="i18n.bt101" select="'Prozentsatz'"/>
|
||||
<xsl:variable name="i18n.bt99" select="'Zuschlag'"/>
|
||||
<xsl:variable name="i18n.bt103" select="'Umsatzsteuersatz des Zuschlages'"/>
|
||||
<xsl:variable name="i18n.bt104" select="'Grund für den Zuschlag'"/>
|
||||
<xsl:variable name="i18n.bt105" select="'Document level charge reason code'"/>
|
||||
<xsl:variable name="i18n.bgx42" select="'Versandkosten'"/>
|
||||
<xsl:variable name="i18n.btx274" select="'Umsatzsteuerkategorie der Versandkosten'"/>
|
||||
<xsl:variable name="i18n.btx272" select="'Betrag'"/>
|
||||
<xsl:variable name="i18n.btx273" select="'Umsatzsteuersatz der Versandkosten'"/>
|
||||
<xsl:variable name="i18n.btx271" select="'Versandkostenbeschreibung'"/>
|
||||
<xsl:variable name="i18n.bt20" select="'Skonto; weitere Zahlungsbed.'"/>
|
||||
<xsl:variable name="i18n.bt9" select="'Fälligkeitsdatum'"/>
|
||||
<xsl:variable name="i18n.bt81" select="'Code für das Zahlungsmittel'"/>
|
||||
<xsl:variable name="i18n.bt82" select="'Zahlungsmittel'"/>
|
||||
<xsl:variable name="i18n.bt83" select="'Verwendungszweck'"/>
|
||||
<xsl:variable name="i18n.bg18" select="'Karteninformation'"/>
|
||||
<xsl:variable name="i18n.bt87" select="'Kartennummer'"/>
|
||||
<xsl:variable name="i18n.bt88" select="'Karteninhaber'"/>
|
||||
<xsl:variable name="i18n.bg19" select="'Lastschrift'"/>
|
||||
<xsl:variable name="i18n.bt89" select="'Mandatsreferenznr.'"/>
|
||||
<xsl:variable name="i18n.bt91" select="'IBAN'"/>
|
||||
<xsl:variable name="i18n.bt90" select="'Gläubiger-ID'"/>
|
||||
<xsl:variable name="i18n.bg17" select="'Überweisung'"/>
|
||||
<xsl:variable name="i18n.bt85" select="'Kontoinhaber'"/>
|
||||
<xsl:variable name="i18n.bt84" select="'IBAN'"/>
|
||||
<xsl:variable name="i18n.bt86" select="'BIC'"/>
|
||||
<xsl:variable name="i18n.bg1" select="'Bemerkung zur Rechnung'"/>
|
||||
<xsl:variable name="i18n.bt21" select="'Betreff'"/>
|
||||
<xsl:variable name="i18n.bt22" select="'Bemerkung'"/>
|
||||
<xsl:variable name="i18n.bt126" select="'Position'"/>
|
||||
<xsl:variable name="i18n.bt127" select="'Freitext'"/>
|
||||
<xsl:variable name="i18n.bt128" select="'Objektkennung'"/>
|
||||
<xsl:variable name="i18n.bt128-id" select="'Schema der Objektkennung'"/>
|
||||
<xsl:variable name="i18n.bt132" select="'Nummer der Auftragsposition'"/>
|
||||
<xsl:variable name="i18n.bt133" select="'Kontierungshinweis /Kostenstelle'"/>
|
||||
<xsl:variable name="i18n.bg26" select="'Abrechnungszeitraum'"/>
|
||||
<xsl:variable name="i18n.bt134" select="'von'"/>
|
||||
<xsl:variable name="i18n.bt135" select="'bis'"/>
|
||||
<xsl:variable name="i18n.bg29" select="'Preiseinzelheiten'"/>
|
||||
<xsl:variable name="i18n.bt129" select="'Menge'"/>
|
||||
<xsl:variable name="i18n.bt130" select="'Einheit'"/>
|
||||
<xsl:variable name="i18n.bt146" select="'Preis pro Einheit (netto)'"/>
|
||||
<xsl:variable name="i18n.bt131" select="'Gesamtpreis (netto)'"/>
|
||||
<xsl:variable name="i18n.bt147" select="'Rabatt (netto)'"/>
|
||||
<xsl:variable name="i18n.bt148" select="'Listenpreis (netto)'"/>
|
||||
<xsl:variable name="i18n.bt149" select="'Anzahl der Einheit'"/>
|
||||
<xsl:variable name="i18n.bt150" select="'Code der Maßeinheit'"/>
|
||||
<xsl:variable name="i18n.bt151" select="'Umsatzsteuer'"/>
|
||||
<xsl:variable name="i18n.bt152" select="'Umsatzsteuersatz in %'"/>
|
||||
<xsl:variable name="i18n.bg27" select="'Nachlässe auf Ebene der Rechnungsposition'"/>
|
||||
<xsl:variable name="i18n.bt137" select="'Grundbetrag (netto)'"/>
|
||||
<xsl:variable name="i18n.bt138" select="'Prozentsatz'"/>
|
||||
<xsl:variable name="i18n.bt136" select="'Nachlass'"/>
|
||||
<xsl:variable name="i18n.bt139" select="'Grund des Nachlasses'"/>
|
||||
<xsl:variable name="i18n.bt140" select="'Code für den Nachlassgrund'"/>
|
||||
<xsl:variable name="i18n.bg28" select="'Zuschläge auf Ebene der Rechnungsposition'"/>
|
||||
<xsl:variable name="i18n.bt142" select="'Grundbetrag (netto)'"/>
|
||||
<xsl:variable name="i18n.bt143" select="'Prozentsatz'"/>
|
||||
<xsl:variable name="i18n.bt141" select="'Zuschlag (netto)'"/>
|
||||
<xsl:variable name="i18n.bt144" select="'Grund des Zuschlags'"/>
|
||||
<xsl:variable name="i18n.bt145" select="'Code für den Zuschlagsgrund'"/>
|
||||
<xsl:variable name="i18n.bg31" select="'Artikelinformationen'"/>
|
||||
<xsl:variable name="i18n.bt153" select="'Bezeichnung'"/>
|
||||
<xsl:variable name="i18n.bt154" select="'Beschreibung'"/>
|
||||
<xsl:variable name="i18n.bt155" select="'Artikelnummer'"/>
|
||||
<xsl:variable name="i18n.bt156" select="'Kunden-Material-Nr.'"/>
|
||||
<xsl:variable name="i18n.bg32" select="'Eigenschaften des Artikels'"/>
|
||||
<xsl:variable name="i18n.bt157" select="'Artikelkennung (EAN)'"/>
|
||||
<xsl:variable name="i18n.bt157-id" select="'Schema der Artikelkennung'"/>
|
||||
<xsl:variable name="i18n.bt158" select="'Code der Artikelklassifizierung'"/>
|
||||
<xsl:variable name="i18n.bt158-id" select="'Kennung zur Bildung des Schemas'"/>
|
||||
<xsl:variable name="i18n.bt157-vers-id" select="'Version zur Bildung des Schemas'"/>
|
||||
<xsl:variable name="i18n.bt159" select="'Code des Herkunftslandes'"/>
|
||||
<xsl:variable name="i18n.bg4" select="'Informationen zum Verkäufer'"/>
|
||||
<xsl:variable name="i18n.bt28" select="'Abweichender Handelsname'"/>
|
||||
<xsl:variable name="i18n.bt34" select="'Elektronische Adresse'"/>
|
||||
<xsl:variable name="i18n.bt34-id" select="'Schema der elektronischen Adresse'"/>
|
||||
<xsl:variable name="i18n.bt30" select="'Register-/Registriernummer'"/>
|
||||
<xsl:variable name="i18n.bt31" select="'Umsatzsteuer-ID'"/>
|
||||
<xsl:variable name="i18n.bt32" select="'Steuernummer'"/>
|
||||
<xsl:variable name="i18n.bt32-schema" select="'Schema der Steuernummer'"/>
|
||||
<xsl:variable name="i18n.bt33" select="'Weitere rechtliche Informationen'"/>
|
||||
<xsl:variable name="i18n.bt6" select="'Code der Umsatzsteuerwährung'"/>
|
||||
<xsl:variable name="i18n.bg11" select="'Steuervertreter des Verkäufers'"/>
|
||||
<xsl:variable name="i18n.bt62" select="'Name'"/>
|
||||
<xsl:variable name="i18n.bt64" select="'Straße / Hausnummer'"/>
|
||||
<xsl:variable name="i18n.bt65" select="'Postfach'"/>
|
||||
<xsl:variable name="i18n.bt164" select="'Adresszusatz'"/>
|
||||
<xsl:variable name="i18n.bt67" select="'PLZ'"/>
|
||||
<xsl:variable name="i18n.bt66" select="'Ort'"/>
|
||||
<xsl:variable name="i18n.bt68" select="'Bundesland'"/>
|
||||
<xsl:variable name="i18n.bt69" select="'Ländercode'"/>
|
||||
<xsl:variable name="i18n.bt63" select="'Umsatzsteuer-ID'"/>
|
||||
<xsl:variable name="i18n.bg7" select="'Informationen zum Käufer'"/>
|
||||
<xsl:variable name="i18n.bt45" select="'Abweichender Handelsname'"/>
|
||||
<xsl:variable name="i18n.bt49" select="'Elektronische Adresse'"/>
|
||||
<xsl:variable name="i18n.bt49-id" select="'Schema der elektronischen Adresse'"/>
|
||||
<xsl:variable name="i18n.bt47" select="'Register-/Registriernummer'"/>
|
||||
<xsl:variable name="i18n.bt47-id" select="'Schema der Register-/Registriernummer'"/>
|
||||
<xsl:variable name="i18n.bt48" select="'Umsatzsteuer-ID'"/>
|
||||
<xsl:variable name="i18n.bt7" select="'Abrechnungsdatum der Umsatzsteuer'"/>
|
||||
<xsl:variable name="i18n.bt8" select="'Code des Umsatzsteuer-Abrechnungsdatums'"/>
|
||||
<xsl:variable name="i18n.bt19" select="'Kontierungsinformation / Kostenstelle'"/>
|
||||
<xsl:variable name="i18n.bg13" select="'Lieferinformationen'"/>
|
||||
<xsl:variable name="i18n.bt71" select="'Kennung des Lieferorts'"/>
|
||||
<xsl:variable name="i18n.bt71-id" select="'Schema der Kennung'"/>
|
||||
<xsl:variable name="i18n.bt72" select="'Lieferdatum'"/>
|
||||
<xsl:variable name="i18n.bt70" select="'Name des Empfängers'"/>
|
||||
<xsl:variable name="i18n.bt75" select="'Straße / Haus-Nr.'"/>
|
||||
<xsl:variable name="i18n.bt76" select="'Postfach'"/>
|
||||
<xsl:variable name="i18n.bt165" select="'Adresszusatz'"/>
|
||||
<xsl:variable name="i18n.bt78" select="'PLZ'"/>
|
||||
<xsl:variable name="i18n.bt77" select="'Ort'"/>
|
||||
<xsl:variable name="i18n.bt79" select="'Bundesland'"/>
|
||||
<xsl:variable name="i18n.bt80" select="'Land'"/>
|
||||
<xsl:variable name="i18n.bt17" select="'Vergabenummer'"/>
|
||||
<xsl:variable name="i18n.bt15" select="'Kennung der Empfangsbestätigung'"/>
|
||||
<xsl:variable name="i18n.bt16" select="'Kennung der Versandanzeige'"/>
|
||||
<xsl:variable name="i18n.btx202" select="'Kennung des Lieferscheins'"/>
|
||||
<xsl:variable name="i18n.bt23" select="'Prozesskennung'"/>
|
||||
<xsl:variable name="i18n.bt24" select="'Spezifikationskennung'"/>
|
||||
<xsl:variable name="i18n.bt18" select="'Objektkennung'"/>
|
||||
<xsl:variable name="i18n.bt18-id" select="'Schema der Objektkennung'"/>
|
||||
<xsl:variable name="i18n.bg10" select="'Vom Verkäufer abweichender Zahlungsempfänger'"/>
|
||||
<xsl:variable name="i18n.bt59" select="'Name'"/>
|
||||
<xsl:variable name="i18n.bt60" select="'Kennung'"/>
|
||||
<xsl:variable name="i18n.bt60-id" select="'Schema der Kennung'"/>
|
||||
<xsl:variable name="i18n.bt61" select="'Register-/Registriernummer'"/>
|
||||
<xsl:variable name="i18n.bt61-id" select="'Schema der Register-/Registriernummer'"/>
|
||||
<xsl:variable name="i18n.bg24" select="'Rechnungsbegründende Unterlagen'"/>
|
||||
<xsl:variable name="i18n.bt122" select="'Kennung'"/>
|
||||
<xsl:variable name="i18n.bt123" select="'Beschreibung'"/>
|
||||
<xsl:variable name="i18n.bt124" select="'Verweis (z.B. Internetadresse)'"/>
|
||||
<xsl:variable name="i18n.bt125" select="'Anhangsdokument'"/>
|
||||
<xsl:variable name="i18n.bt125-format" select="'Format des Anhangdokuments'"/>
|
||||
<xsl:variable name="i18n.bt125-name" select="'Name des Anhangsdokuments'"/>
|
||||
<xsl:variable name="i18n.historyDate" select="'Datum/Uhrzeit'"/>
|
||||
<xsl:variable name="i18n.historySubject" select="'Betreff'"/>
|
||||
<xsl:variable name="i18n.historyText" select="'Text'"/>
|
||||
<xsl:variable name="i18n.historyDetails" select="'Details'"/>
|
||||
<xsl:variable name="i18n.payment" select="'Zahlungsdaten'"/>
|
||||
<xsl:variable name="i18n.contract_information" select="'Vertragsdaten'"/>
|
||||
<xsl:variable name="i18n.preceding_invoice_reference" select="'Vorausgegangene Rechnungen'"/>
|
||||
|
||||
<xsl:include href="xrechnung-html.univ.xsl"/>
|
||||
|
||||
</xsl:stylesheet>
|
||||
|
||||
@@ -1,227 +1,229 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<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.bt44" select="'Name'"/>
|
||||
<xsl:variable name="i18n.title" select="'XRechnung'"/>
|
||||
<xsl:variable name="i18n.overview" select="'Overview'"/>
|
||||
<xsl:variable name="i18n.items" select="'Items'"/>
|
||||
<xsl:variable name="i18n.information" select="'Information'"/>
|
||||
<xsl:variable name="i18n.attachments" select="'Attachments'"/>
|
||||
<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.recipientInfo" select="'Buyer Information'"/>
|
||||
<xsl:variable name="i18n.bt50" select="'Street / house number'"/>
|
||||
<xsl:variable name="i18n.bt51" select="'PO Box'"/>
|
||||
<xsl:variable name="i18n.bt163" select="'Address Addition'"/>
|
||||
<xsl:variable name="i18n.bt53" select="'Postcode'"/>
|
||||
<xsl:variable name="i18n.bt52" select="'Place'"/>
|
||||
<xsl:variable name="i18n.bt54" select="'State/Province'"/>
|
||||
<xsl:variable name="i18n.bt55" select="'Country'"/>
|
||||
<xsl:variable name="i18n.bt46" select="'ID'"/>
|
||||
<xsl:variable name="i18n.bt46-id" select="'ID scheme'"/>
|
||||
<xsl:variable name="i18n.bt56" select="'Name'"/>
|
||||
<xsl:variable name="i18n.bt57" select="'Phone'"/>
|
||||
<xsl:variable name="i18n.bt58" select="'E-mail address'"/>
|
||||
<xsl:variable name="i18n.bt27" select="'Company name'"/>
|
||||
<xsl:variable name="i18n.bt35" select="'Street / house number'"/>
|
||||
<xsl:variable name="i18n.bt36" select="'PO Box'"/>
|
||||
<xsl:variable name="i18n.bt162" select="'Address Addition'"/>
|
||||
<xsl:variable name="i18n.bt38" select="'Code postal'"/>
|
||||
<xsl:variable name="i18n.bt37" select="'Place'"/>
|
||||
<xsl:variable name="i18n.bt39" select="'State/Province'"/>
|
||||
<xsl:variable name="i18n.bt40" select="'Country code'"/>
|
||||
<xsl:variable name="i18n.bt29" select="'ID'"/>
|
||||
<xsl:variable name="i18n.bt29-id" select="'ID scheme'"/>
|
||||
<xsl:variable name="i18n.bt41" select="'Name'"/>
|
||||
<xsl:variable name="i18n.bt42" select="'Phone'"/>
|
||||
<xsl:variable name="i18n.bt43" select="'E-mail address'"/>
|
||||
<xsl:variable name="i18n.bt1" select="'Seller Information'"/>
|
||||
<xsl:variable name="i18n.bt2" select="'Invoice date'"/>
|
||||
<xsl:variable name="i18n.details" select="'Invoice details'"/>
|
||||
<xsl:variable name="i18n.period" select="'Billing period'"/>
|
||||
<xsl:variable name="i18n.bt3" select="'Invoice type'"/>
|
||||
<xsl:variable name="i18n.bt5" select="'Currency'"/>
|
||||
<xsl:variable name="i18n.bt73" select="'from'"/>
|
||||
<xsl:variable name="i18n.bt74" select="'to'"/>
|
||||
<xsl:variable name="i18n.bt11" select="'Project number'"/>
|
||||
<xsl:variable name="i18n.bt12" select="'Contract Number'"/>
|
||||
<xsl:variable name="i18n.bt13" select="'Order number'"/>
|
||||
<xsl:variable name="i18n.bt14" select="'Order number'"/>
|
||||
<xsl:variable name="i18n.bt25" select="'Invoice number'"/>
|
||||
<xsl:variable name="i18n.bt26" select="'Invoice date'"/>
|
||||
<xsl:variable name="i18n.bg22" select="'Total amounts of the invoice'"/>
|
||||
<xsl:variable name="i18n.bt106" select="'Line total'"/>
|
||||
<xsl:variable name="i18n.bt107" select="'Total discounts'"/>
|
||||
<xsl:variable name="i18n.bt108" select="'Total charges'"/>
|
||||
<xsl:variable name="i18n.bt109" select="'Grand total'"/>
|
||||
<xsl:variable name="i18n.bt110" select="'VAT amount'"/>
|
||||
<xsl:variable name="i18n.bt111" select="'Total VAT'"/>
|
||||
<xsl:variable name="i18n.bt112" select="'Grand total'"/>
|
||||
<xsl:variable name="i18n.bt113" select="'Amount paid'"/>
|
||||
<xsl:variable name="i18n.bt114" select="'rounding amount'"/>
|
||||
<xsl:variable name="i18n.bt115" select="'Amount Due'"/>
|
||||
<xsl:variable name="i18n.bg23" select="'Breakdown of VAT at invoice level'"/>
|
||||
<xsl:variable name="i18n.bt118" select="'VAT category'"/>
|
||||
<xsl:variable name="i18n.bt116" select="'Grand total'"/>
|
||||
<xsl:variable name="i18n.bt119" select="'VAT rate'"/>
|
||||
<xsl:variable name="i18n.bt117" select="'VAT amount'"/>
|
||||
<xsl:variable name="i18n.bt120" select="'Reason for exemption:'"/>
|
||||
<xsl:variable name="i18n.bt121" select="'ID for the exemption reason:'"/>
|
||||
<xsl:variable name="i18n.bg20" select="'Allowance at invoice level'"/>
|
||||
<xsl:variable name="i18n.bt95" select="'VAT category of the discount:'"/>
|
||||
<xsl:variable name="i18n.bt93" select="'Basic amount'"/>
|
||||
<xsl:variable name="i18n.bt94" select="'Percentage'"/>
|
||||
<xsl:variable name="i18n.bt92" select="'Allowance'"/>
|
||||
<xsl:variable name="i18n.bt96" select="'VAT rate on allowance'"/>
|
||||
<xsl:variable name="i18n.bt97" select="'Reason for the allowance'"/>
|
||||
<xsl:variable name="i18n.bt98" select="'Document level allowance reason code'"/>
|
||||
<xsl:variable name="i18n.bg21" select="'Charge amount at invoice level'"/>
|
||||
<xsl:variable name="i18n.bt102" select="'VAT category of the charge amount'"/>
|
||||
<xsl:variable name="i18n.bt100" select="'Basic amount'"/>
|
||||
<xsl:variable name="i18n.bt101" select="'Percentage'"/>
|
||||
<xsl:variable name="i18n.bt99" select="'Charge amount'"/>
|
||||
<xsl:variable name="i18n.bt103" select="'VAT rate of the charge amount'"/>
|
||||
<xsl:variable name="i18n.bt104" select="'Reason for the charge amount:'"/>
|
||||
<xsl:variable name="i18n.bt105" select="'Document level charge reason code'"/>
|
||||
<xsl:variable name="i18n.bgx42" select="'Shipping cost'"/>
|
||||
<xsl:variable name="i18n.btx274" select="'VAT category of the shipping cost'"/>
|
||||
<xsl:variable name="i18n.btx272" select="'Amount'"/>
|
||||
<xsl:variable name="i18n.btx273" select="'VAT rate of the shipping cost'"/>
|
||||
<xsl:variable name="i18n.btx271" select="'Shipping cost description'"/>
|
||||
<xsl:variable name="i18n.bt20" select="'Discount; other payment terms'"/>
|
||||
<xsl:variable name="i18n.bt9" select="'Due date'"/>
|
||||
<xsl:variable name="i18n.bt81" select="'Code for the means of payment'"/>
|
||||
<xsl:variable name="i18n.bt82" select="'Means of payment'"/>
|
||||
<xsl:variable name="i18n.bt83" select="'Usage'"/>
|
||||
<xsl:variable name="i18n.bg18" select="'Card information'"/>
|
||||
<xsl:variable name="i18n.bt87" select="'Card number'"/>
|
||||
<xsl:variable name="i18n.bt88" select="'Card holder'"/>
|
||||
<xsl:variable name="i18n.bg19" select="'Direct debit'"/>
|
||||
<xsl:variable name="i18n.bt89" select="'Mandate Reference No'"/>
|
||||
<xsl:variable name="i18n.bt91" select="'IBAN'"/>
|
||||
<xsl:variable name="i18n.bt90" select="'Creditor ID'"/>
|
||||
<xsl:variable name="i18n.bg17" select="'Transfer'"/>
|
||||
<xsl:variable name="i18n.bt85" select="'Account holder'"/>
|
||||
<xsl:variable name="i18n.bt84" select="'IBAN'"/>
|
||||
<xsl:variable name="i18n.bt86" select="'BIC'"/>
|
||||
<xsl:variable name="i18n.bg1" select="'Invoice Comment'"/>
|
||||
<xsl:variable name="i18n.bt21" select="'Subject'"/>
|
||||
<xsl:variable name="i18n.bt22" select="'Comment'"/>
|
||||
<xsl:variable name="i18n.bt126" select="'Line'"/>
|
||||
<xsl:variable name="i18n.bt127" select="'Free text'"/>
|
||||
<xsl:variable name="i18n.bt128" select="'Object ID'"/>
|
||||
<xsl:variable name="i18n.bt128-id" select="'Object ID schema'"/>
|
||||
<xsl:variable name="i18n.bt132" select="'Order line number'"/>
|
||||
<xsl:variable name="i18n.bt133" select="'Account assignment information'"/>
|
||||
<xsl:variable name="i18n.bg26" select="'Billing period'"/>
|
||||
<xsl:variable name="i18n.bt134" select="'from'"/>
|
||||
<xsl:variable name="i18n.bt135" select="'to'"/>
|
||||
<xsl:variable name="i18n.bg29" select="'Price details'"/>
|
||||
<xsl:variable name="i18n.bt129" select="'Quantity'"/>
|
||||
<xsl:variable name="i18n.bt130" select="'Unit'"/>
|
||||
<xsl:variable name="i18n.bt146" select="'Unit price (net)'"/>
|
||||
<xsl:variable name="i18n.bt131" select="'Total price (net)'"/>
|
||||
<xsl:variable name="i18n.bt147" select="'Discount (net)'"/>
|
||||
<xsl:variable name="i18n.bt148" select="'Net list price'"/>
|
||||
<xsl:variable name="i18n.bt149" select="'Number of units'"/>
|
||||
<xsl:variable name="i18n.bt150" select="'Unit of measure code'"/>
|
||||
<xsl:variable name="i18n.bt151" select="'VAT'"/>
|
||||
<xsl:variable name="i18n.bt152" select="'VAT rate in percent'"/>
|
||||
<xsl:variable name="i18n.bg27" select="'Allowances at line level'"/>
|
||||
<xsl:variable name="i18n.bt137" select="'Basic amount (net)'"/>
|
||||
<xsl:variable name="i18n.bt138" select="'Percentage'"/>
|
||||
<xsl:variable name="i18n.bt136" select="'Allowance (net)'"/>
|
||||
<xsl:variable name="i18n.bt139" select="'Reason for allowance'"/>
|
||||
<xsl:variable name="i18n.bt140" select="'Code for the reason for the estate'"/>
|
||||
<xsl:variable name="i18n.bg28" select="'Charges at invoice line level'"/>
|
||||
<xsl:variable name="i18n.bt142" select="'Basic amount (net)'"/>
|
||||
<xsl:variable name="i18n.bt143" select="'percentage'"/>
|
||||
<xsl:variable name="i18n.bt141" select="'Charge amount (net)'"/>
|
||||
<xsl:variable name="i18n.bt144" select="'Reason for the allowance'"/>
|
||||
<xsl:variable name="i18n.bt145" select="'Reason code'"/>
|
||||
<xsl:variable name="i18n.bg31" select="'Item Information'"/>
|
||||
<xsl:variable name="i18n.bt153" select="'Name'"/>
|
||||
<xsl:variable name="i18n.bt154" select="'Description'"/>
|
||||
<xsl:variable name="i18n.bt155" select="'Part number'"/>
|
||||
<xsl:variable name="i18n.bt156" select="'Customer''s material number'"/>
|
||||
<xsl:variable name="i18n.bg32" select="'Article properties'"/>
|
||||
<xsl:variable name="i18n.bt157" select="'Item ID'"/>
|
||||
<xsl:variable name="i18n.bt157-id" select="'Item ID schema'"/>
|
||||
<xsl:variable name="i18n.bt158" select="'Item classification code'"/>
|
||||
<xsl:variable name="i18n.bt158-id" select="'Identifier to form the schema'"/>
|
||||
<xsl:variable name="i18n.bt157-vers-id" select="'Version for creating the schema'"/>
|
||||
<xsl:variable name="i18n.bt159" select="'Country of origin code'"/>
|
||||
<xsl:variable name="i18n.bg4" select="'Seller Information'"/>
|
||||
<xsl:variable name="i18n.bt28" select="'Differing trade name'"/>
|
||||
<xsl:variable name="i18n.bt34" select="'Electronic address'"/>
|
||||
<xsl:variable name="i18n.bt34-id" select="'Electronic address scheme'"/>
|
||||
<xsl:variable name="i18n.bt30" select="'Register number'"/>
|
||||
<xsl:variable name="i18n.bt31" select="'VAT ID'"/>
|
||||
<xsl:variable name="i18n.bt32" select="'Tax ID'"/>
|
||||
<xsl:variable name="i18n.bt32-schema" select="'Tax ID scheme'"/>
|
||||
<xsl:variable name="i18n.bt33" select="'Further legal information'"/>
|
||||
<xsl:variable name="i18n.bt6" select="'VAT currency code'"/>
|
||||
<xsl:variable name="i18n.bg11" select="'seller''s tax representative'"/>
|
||||
<xsl:variable name="i18n.bt62" select="'Name'"/>
|
||||
<xsl:variable name="i18n.bt64" select="'Street / house number'"/>
|
||||
<xsl:variable name="i18n.bt65" select="'PO Box'"/>
|
||||
<xsl:variable name="i18n.bt164" select="'Address Addition'"/>
|
||||
<xsl:variable name="i18n.bt67" select="'Postcode'"/>
|
||||
<xsl:variable name="i18n.bt66" select="'Place'"/>
|
||||
<xsl:variable name="i18n.bt68" select="'State/Province'"/>
|
||||
<xsl:variable name="i18n.bt69" select="'Country code'"/>
|
||||
<xsl:variable name="i18n.bt63" select="'VAT ID'"/>
|
||||
<xsl:variable name="i18n.bg7" select="'Buyer Information'"/>
|
||||
<xsl:variable name="i18n.bt45" select="'Differing trade name'"/>
|
||||
<xsl:variable name="i18n.bt49" select="'E-mail address'"/>
|
||||
<xsl:variable name="i18n.bt49-id" select="'Electronic address scheme'"/>
|
||||
<xsl:variable name="i18n.bt47" select="'Register number'"/>
|
||||
<xsl:variable name="i18n.bt47-id" select="'Scheme of register/register number'"/>
|
||||
<xsl:variable name="i18n.bt48" select="'VAT ID'"/>
|
||||
<xsl:variable name="i18n.bt7" select="'VAT payday date'"/>
|
||||
<xsl:variable name="i18n.bt8" select="'VAT Statement Date Code'"/>
|
||||
<xsl:variable name="i18n.bt19" select="'Account assignment information'"/>
|
||||
<xsl:variable name="i18n.bg13" select="'Shipping information'"/>
|
||||
<xsl:variable name="i18n.bt71" select="'Identification of the place of delivery'"/>
|
||||
<xsl:variable name="i18n.bt71-id" select="'ID scheme'"/>
|
||||
<xsl:variable name="i18n.bt72" select="'Date of delivery'"/>
|
||||
<xsl:variable name="i18n.bt70" select="'Recipient name'"/>
|
||||
<xsl:variable name="i18n.bt75" select="'Street / house number'"/>
|
||||
<xsl:variable name="i18n.bt76" select="'PO Box'"/>
|
||||
<xsl:variable name="i18n.bt165" select="'Address Addition'"/>
|
||||
<xsl:variable name="i18n.bt78" select="'Code postal'"/>
|
||||
<xsl:variable name="i18n.bt77" select="'Place'"/>
|
||||
<xsl:variable name="i18n.bt79" select="'State/Province'"/>
|
||||
<xsl:variable name="i18n.bt80" select="'Country'"/>
|
||||
<xsl:variable name="i18n.bt17" select="'Assignment number'"/>
|
||||
<xsl:variable name="i18n.bt15" select="'Receipt confirmation ID'"/>
|
||||
<xsl:variable name="i18n.bt16" select="'Dispatch note ID'"/>
|
||||
<xsl:variable name="i18n.bt23" select="'Process ID'"/>
|
||||
<xsl:variable name="i18n.bt24" select="'Specification ID'"/>
|
||||
<xsl:variable name="i18n.bt18" select="'Object ID'"/>
|
||||
<xsl:variable name="i18n.bt18-id" select="'Object ID schema'"/>
|
||||
<xsl:variable name="i18n.bg10" select="'Payee other than Seller'"/>
|
||||
<xsl:variable name="i18n.bt59" select="'Name'"/>
|
||||
<xsl:variable name="i18n.bt60" select="'ID'"/>
|
||||
<xsl:variable name="i18n.bt60-id" select="'ID scheme'"/>
|
||||
<xsl:variable name="i18n.bt61" select="'Register number'"/>
|
||||
<xsl:variable name="i18n.bt61-id" select="'Scheme of register/register number'"/>
|
||||
<xsl:variable name="i18n.bg24" select="'Documents justifying the invoice'"/>
|
||||
<xsl:variable name="i18n.bt122" select="'ID'"/>
|
||||
<xsl:variable name="i18n.bt123" select="'Description'"/>
|
||||
<xsl:variable name="i18n.bt124" select="'Reference (e.g. Internet address)'"/>
|
||||
<xsl:variable name="i18n.bt125" select="'Attachment'"/>
|
||||
<xsl:variable name="i18n.bt125-format" select="'Format of attachment'"/>
|
||||
<xsl:variable name="i18n.bt125-name" select="'Name of attachment'"/>
|
||||
<xsl:variable name="i18n.historyDate" select="'Date/time'"/>
|
||||
<xsl:variable name="i18n.historySubject" select="'Subject'"/>
|
||||
<xsl:variable name="i18n.historyText" select="'Text'"/>
|
||||
<xsl:variable name="i18n.historyDetails" select="'Details:'"/>
|
||||
<xsl:variable name="i18n.payment" select="'Payment details'"/>
|
||||
<xsl:variable name="i18n.contract_information" select="'Contract Information'"/>
|
||||
<xsl:variable name="i18n.preceding_invoice_reference" select="'Previous invoices'"/>
|
||||
|
||||
<xsl:include href="xrechnung-html.univ.xsl"/>
|
||||
|
||||
</xsl:stylesheet>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<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.bt44" select="'Name'"/>
|
||||
<xsl:variable name="i18n.title" select="'XRechnung'"/>
|
||||
<xsl:variable name="i18n.overview" select="'Overview'"/>
|
||||
<xsl:variable name="i18n.items" select="'Items'"/>
|
||||
<xsl:variable name="i18n.information" select="'Information'"/>
|
||||
<xsl:variable name="i18n.attachments" select="'Attachments'"/>
|
||||
<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.recipientInfo" select="'Buyer Information'"/>
|
||||
<xsl:variable name="i18n.dateOf" select="' from '"/>
|
||||
<xsl:variable name="i18n.bt50" select="'Street / house number'"/>
|
||||
<xsl:variable name="i18n.bt51" select="'PO Box'"/>
|
||||
<xsl:variable name="i18n.bt163" select="'Address Addition'"/>
|
||||
<xsl:variable name="i18n.bt53" select="'Postcode'"/>
|
||||
<xsl:variable name="i18n.bt52" select="'Place'"/>
|
||||
<xsl:variable name="i18n.bt54" select="'State/Province'"/>
|
||||
<xsl:variable name="i18n.bt55" select="'Country'"/>
|
||||
<xsl:variable name="i18n.bt46" select="'ID'"/>
|
||||
<xsl:variable name="i18n.bt46-id" select="'ID scheme'"/>
|
||||
<xsl:variable name="i18n.bt56" select="'Name'"/>
|
||||
<xsl:variable name="i18n.bt57" select="'Phone'"/>
|
||||
<xsl:variable name="i18n.bt58" select="'E-mail address'"/>
|
||||
<xsl:variable name="i18n.bt27" select="'Company name'"/>
|
||||
<xsl:variable name="i18n.bt35" select="'Street / house number'"/>
|
||||
<xsl:variable name="i18n.bt36" select="'PO Box'"/>
|
||||
<xsl:variable name="i18n.bt162" select="'Address Addition'"/>
|
||||
<xsl:variable name="i18n.bt38" select="'Code postal'"/>
|
||||
<xsl:variable name="i18n.bt37" select="'Place'"/>
|
||||
<xsl:variable name="i18n.bt39" select="'State/Province'"/>
|
||||
<xsl:variable name="i18n.bt40" select="'Country code'"/>
|
||||
<xsl:variable name="i18n.bt29" select="'ID'"/>
|
||||
<xsl:variable name="i18n.bt29-id" select="'ID scheme'"/>
|
||||
<xsl:variable name="i18n.bt41" select="'Name'"/>
|
||||
<xsl:variable name="i18n.bt42" select="'Phone'"/>
|
||||
<xsl:variable name="i18n.bt43" select="'E-mail address'"/>
|
||||
<xsl:variable name="i18n.bt1" select="'Seller Information'"/>
|
||||
<xsl:variable name="i18n.bt2" select="'Invoice date'"/>
|
||||
<xsl:variable name="i18n.details" select="'Invoice details'"/>
|
||||
<xsl:variable name="i18n.period" select="'Billing period'"/>
|
||||
<xsl:variable name="i18n.bt3" select="'Invoice type'"/>
|
||||
<xsl:variable name="i18n.bt5" select="'Currency'"/>
|
||||
<xsl:variable name="i18n.bt73" select="'from'"/>
|
||||
<xsl:variable name="i18n.bt74" select="'to'"/>
|
||||
<xsl:variable name="i18n.bt11" select="'Project number'"/>
|
||||
<xsl:variable name="i18n.bt12" select="'Contract Number'"/>
|
||||
<xsl:variable name="i18n.bt13" select="'Order number'"/>
|
||||
<xsl:variable name="i18n.bt14" select="'Order number'"/>
|
||||
<xsl:variable name="i18n.bt25" select="'Invoice number'"/>
|
||||
<xsl:variable name="i18n.bt26" select="'Invoice date'"/>
|
||||
<xsl:variable name="i18n.bg22" select="'Total amounts of the invoice'"/>
|
||||
<xsl:variable name="i18n.bt106" select="'Line total'"/>
|
||||
<xsl:variable name="i18n.bt107" select="'Total discounts'"/>
|
||||
<xsl:variable name="i18n.bt108" select="'Total charges'"/>
|
||||
<xsl:variable name="i18n.bt109" select="'Grand total'"/>
|
||||
<xsl:variable name="i18n.bt110" select="'VAT amount'"/>
|
||||
<xsl:variable name="i18n.bt111" select="'Total VAT'"/>
|
||||
<xsl:variable name="i18n.bt112" select="'Grand total'"/>
|
||||
<xsl:variable name="i18n.bt113" select="'Amount paid'"/>
|
||||
<xsl:variable name="i18n.bt114" select="'rounding amount'"/>
|
||||
<xsl:variable name="i18n.bt115" select="'Amount Due'"/>
|
||||
<xsl:variable name="i18n.bg23" select="'Breakdown of VAT at invoice level'"/>
|
||||
<xsl:variable name="i18n.bt118" select="'VAT category'"/>
|
||||
<xsl:variable name="i18n.bt116" select="'Grand total'"/>
|
||||
<xsl:variable name="i18n.bt119" select="'VAT rate'"/>
|
||||
<xsl:variable name="i18n.bt117" select="'VAT amount'"/>
|
||||
<xsl:variable name="i18n.bt120" select="'Reason for exemption:'"/>
|
||||
<xsl:variable name="i18n.bt121" select="'ID for the exemption reason:'"/>
|
||||
<xsl:variable name="i18n.bg20" select="'Allowance at invoice level'"/>
|
||||
<xsl:variable name="i18n.bt95" select="'VAT category of the discount:'"/>
|
||||
<xsl:variable name="i18n.bt93" select="'Basic amount'"/>
|
||||
<xsl:variable name="i18n.bt94" select="'Percentage'"/>
|
||||
<xsl:variable name="i18n.bt92" select="'Allowance'"/>
|
||||
<xsl:variable name="i18n.bt96" select="'VAT rate on allowance'"/>
|
||||
<xsl:variable name="i18n.bt97" select="'Reason for the allowance'"/>
|
||||
<xsl:variable name="i18n.bt98" select="'Document level allowance reason code'"/>
|
||||
<xsl:variable name="i18n.bg21" select="'Charge amount at invoice level'"/>
|
||||
<xsl:variable name="i18n.bt102" select="'VAT category of the charge amount'"/>
|
||||
<xsl:variable name="i18n.bt100" select="'Basic amount'"/>
|
||||
<xsl:variable name="i18n.bt101" select="'Percentage'"/>
|
||||
<xsl:variable name="i18n.bt99" select="'Charge amount'"/>
|
||||
<xsl:variable name="i18n.bt103" select="'VAT rate of the charge amount'"/>
|
||||
<xsl:variable name="i18n.bt104" select="'Reason for the charge amount:'"/>
|
||||
<xsl:variable name="i18n.bt105" select="'Document level charge reason code'"/>
|
||||
<xsl:variable name="i18n.bgx42" select="'Shipping cost'"/>
|
||||
<xsl:variable name="i18n.btx274" select="'VAT category of the shipping cost'"/>
|
||||
<xsl:variable name="i18n.btx272" select="'Amount'"/>
|
||||
<xsl:variable name="i18n.btx273" select="'VAT rate of the shipping cost'"/>
|
||||
<xsl:variable name="i18n.btx271" select="'Shipping cost description'"/>
|
||||
<xsl:variable name="i18n.bt20" select="'Discount; other payment terms'"/>
|
||||
<xsl:variable name="i18n.bt9" select="'Due date'"/>
|
||||
<xsl:variable name="i18n.bt81" select="'Code for the means of payment'"/>
|
||||
<xsl:variable name="i18n.bt82" select="'Means of payment'"/>
|
||||
<xsl:variable name="i18n.bt83" select="'Usage'"/>
|
||||
<xsl:variable name="i18n.bg18" select="'Card information'"/>
|
||||
<xsl:variable name="i18n.bt87" select="'Card number'"/>
|
||||
<xsl:variable name="i18n.bt88" select="'Card holder'"/>
|
||||
<xsl:variable name="i18n.bg19" select="'Direct debit'"/>
|
||||
<xsl:variable name="i18n.bt89" select="'Mandate Reference No'"/>
|
||||
<xsl:variable name="i18n.bt91" select="'IBAN'"/>
|
||||
<xsl:variable name="i18n.bt90" select="'Creditor ID'"/>
|
||||
<xsl:variable name="i18n.bg17" select="'Transfer'"/>
|
||||
<xsl:variable name="i18n.bt85" select="'Account holder'"/>
|
||||
<xsl:variable name="i18n.bt84" select="'IBAN'"/>
|
||||
<xsl:variable name="i18n.bt86" select="'BIC'"/>
|
||||
<xsl:variable name="i18n.bg1" select="'Invoice Comment'"/>
|
||||
<xsl:variable name="i18n.bt21" select="'Subject'"/>
|
||||
<xsl:variable name="i18n.bt22" select="'Comment'"/>
|
||||
<xsl:variable name="i18n.bt126" select="'Line'"/>
|
||||
<xsl:variable name="i18n.bt127" select="'Free text'"/>
|
||||
<xsl:variable name="i18n.bt128" select="'Object ID'"/>
|
||||
<xsl:variable name="i18n.bt128-id" select="'Object ID schema'"/>
|
||||
<xsl:variable name="i18n.bt132" select="'Order line number'"/>
|
||||
<xsl:variable name="i18n.bt133" select="'Account assignment information'"/>
|
||||
<xsl:variable name="i18n.bg26" select="'Billing period'"/>
|
||||
<xsl:variable name="i18n.bt134" select="'from'"/>
|
||||
<xsl:variable name="i18n.bt135" select="'to'"/>
|
||||
<xsl:variable name="i18n.bg29" select="'Price details'"/>
|
||||
<xsl:variable name="i18n.bt129" select="'Quantity'"/>
|
||||
<xsl:variable name="i18n.bt130" select="'Unit'"/>
|
||||
<xsl:variable name="i18n.bt146" select="'Unit price (net)'"/>
|
||||
<xsl:variable name="i18n.bt131" select="'Total price (net)'"/>
|
||||
<xsl:variable name="i18n.bt147" select="'Discount (net)'"/>
|
||||
<xsl:variable name="i18n.bt148" select="'Net list price'"/>
|
||||
<xsl:variable name="i18n.bt149" select="'Number of units'"/>
|
||||
<xsl:variable name="i18n.bt150" select="'Unit of measure code'"/>
|
||||
<xsl:variable name="i18n.bt151" select="'VAT'"/>
|
||||
<xsl:variable name="i18n.bt152" select="'VAT rate in percent'"/>
|
||||
<xsl:variable name="i18n.bg27" select="'Allowances at line level'"/>
|
||||
<xsl:variable name="i18n.bt137" select="'Basic amount (net)'"/>
|
||||
<xsl:variable name="i18n.bt138" select="'Percentage'"/>
|
||||
<xsl:variable name="i18n.bt136" select="'Allowance (net)'"/>
|
||||
<xsl:variable name="i18n.bt139" select="'Reason for allowance'"/>
|
||||
<xsl:variable name="i18n.bt140" select="'Code for the reason for the estate'"/>
|
||||
<xsl:variable name="i18n.bg28" select="'Charges at invoice line level'"/>
|
||||
<xsl:variable name="i18n.bt142" select="'Basic amount (net)'"/>
|
||||
<xsl:variable name="i18n.bt143" select="'percentage'"/>
|
||||
<xsl:variable name="i18n.bt141" select="'Charge amount (net)'"/>
|
||||
<xsl:variable name="i18n.bt144" select="'Reason for the allowance'"/>
|
||||
<xsl:variable name="i18n.bt145" select="'Reason code'"/>
|
||||
<xsl:variable name="i18n.bg31" select="'Item Information'"/>
|
||||
<xsl:variable name="i18n.bt153" select="'Name'"/>
|
||||
<xsl:variable name="i18n.bt154" select="'Description'"/>
|
||||
<xsl:variable name="i18n.bt155" select="'Part number'"/>
|
||||
<xsl:variable name="i18n.bt156" select="'Customer''s material number'"/>
|
||||
<xsl:variable name="i18n.bg32" select="'Article properties'"/>
|
||||
<xsl:variable name="i18n.bt157" select="'Item ID'"/>
|
||||
<xsl:variable name="i18n.bt157-id" select="'Item ID schema'"/>
|
||||
<xsl:variable name="i18n.bt158" select="'Item classification code'"/>
|
||||
<xsl:variable name="i18n.bt158-id" select="'Identifier to form the schema'"/>
|
||||
<xsl:variable name="i18n.bt157-vers-id" select="'Version for creating the schema'"/>
|
||||
<xsl:variable name="i18n.bt159" select="'Country of origin code'"/>
|
||||
<xsl:variable name="i18n.bg4" select="'Seller Information'"/>
|
||||
<xsl:variable name="i18n.bt28" select="'Differing trade name'"/>
|
||||
<xsl:variable name="i18n.bt34" select="'Electronic address'"/>
|
||||
<xsl:variable name="i18n.bt34-id" select="'Electronic address scheme'"/>
|
||||
<xsl:variable name="i18n.bt30" select="'Register number'"/>
|
||||
<xsl:variable name="i18n.bt31" select="'VAT ID'"/>
|
||||
<xsl:variable name="i18n.bt32" select="'Tax ID'"/>
|
||||
<xsl:variable name="i18n.bt32-schema" select="'Tax ID scheme'"/>
|
||||
<xsl:variable name="i18n.bt33" select="'Further legal information'"/>
|
||||
<xsl:variable name="i18n.bt6" select="'VAT currency code'"/>
|
||||
<xsl:variable name="i18n.bg11" select="'seller''s tax representative'"/>
|
||||
<xsl:variable name="i18n.bt62" select="'Name'"/>
|
||||
<xsl:variable name="i18n.bt64" select="'Street / house number'"/>
|
||||
<xsl:variable name="i18n.bt65" select="'PO Box'"/>
|
||||
<xsl:variable name="i18n.bt164" select="'Address Addition'"/>
|
||||
<xsl:variable name="i18n.bt67" select="'Postcode'"/>
|
||||
<xsl:variable name="i18n.bt66" select="'Place'"/>
|
||||
<xsl:variable name="i18n.bt68" select="'State/Province'"/>
|
||||
<xsl:variable name="i18n.bt69" select="'Country code'"/>
|
||||
<xsl:variable name="i18n.bt63" select="'VAT ID'"/>
|
||||
<xsl:variable name="i18n.bg7" select="'Buyer Information'"/>
|
||||
<xsl:variable name="i18n.bt45" select="'Differing trade name'"/>
|
||||
<xsl:variable name="i18n.bt49" select="'E-mail address'"/>
|
||||
<xsl:variable name="i18n.bt49-id" select="'Electronic address scheme'"/>
|
||||
<xsl:variable name="i18n.bt47" select="'Register number'"/>
|
||||
<xsl:variable name="i18n.bt47-id" select="'Scheme of register/register number'"/>
|
||||
<xsl:variable name="i18n.bt48" select="'VAT ID'"/>
|
||||
<xsl:variable name="i18n.bt7" select="'VAT payday date'"/>
|
||||
<xsl:variable name="i18n.bt8" select="'VAT Statement Date Code'"/>
|
||||
<xsl:variable name="i18n.bt19" select="'Account assignment information'"/>
|
||||
<xsl:variable name="i18n.bg13" select="'Shipping information'"/>
|
||||
<xsl:variable name="i18n.bt71" select="'Identification of the place of delivery'"/>
|
||||
<xsl:variable name="i18n.bt71-id" select="'ID scheme'"/>
|
||||
<xsl:variable name="i18n.bt72" select="'Date of delivery'"/>
|
||||
<xsl:variable name="i18n.bt70" select="'Recipient name'"/>
|
||||
<xsl:variable name="i18n.bt75" select="'Street / house number'"/>
|
||||
<xsl:variable name="i18n.bt76" select="'PO Box'"/>
|
||||
<xsl:variable name="i18n.bt165" select="'Address Addition'"/>
|
||||
<xsl:variable name="i18n.bt78" select="'Code postal'"/>
|
||||
<xsl:variable name="i18n.bt77" select="'Place'"/>
|
||||
<xsl:variable name="i18n.bt79" select="'State/Province'"/>
|
||||
<xsl:variable name="i18n.bt80" select="'Country'"/>
|
||||
<xsl:variable name="i18n.bt17" select="'Assignment number'"/>
|
||||
<xsl:variable name="i18n.bt15" select="'Receipt confirmation ID'"/>
|
||||
<xsl:variable name="i18n.bt16" select="'Dispatch note ID'"/>
|
||||
<xsl:variable name="i18n.btx202" select="'Delivery note ID'"/>
|
||||
<xsl:variable name="i18n.bt23" select="'Process ID'"/>
|
||||
<xsl:variable name="i18n.bt24" select="'Specification ID'"/>
|
||||
<xsl:variable name="i18n.bt18" select="'Object ID'"/>
|
||||
<xsl:variable name="i18n.bt18-id" select="'Object ID schema'"/>
|
||||
<xsl:variable name="i18n.bg10" select="'Payee other than Seller'"/>
|
||||
<xsl:variable name="i18n.bt59" select="'Name'"/>
|
||||
<xsl:variable name="i18n.bt60" select="'ID'"/>
|
||||
<xsl:variable name="i18n.bt60-id" select="'ID scheme'"/>
|
||||
<xsl:variable name="i18n.bt61" select="'Register number'"/>
|
||||
<xsl:variable name="i18n.bt61-id" select="'Scheme of register/register number'"/>
|
||||
<xsl:variable name="i18n.bg24" select="'Documents justifying the invoice'"/>
|
||||
<xsl:variable name="i18n.bt122" select="'ID'"/>
|
||||
<xsl:variable name="i18n.bt123" select="'Description'"/>
|
||||
<xsl:variable name="i18n.bt124" select="'Reference (e.g. Internet address)'"/>
|
||||
<xsl:variable name="i18n.bt125" select="'Attachment'"/>
|
||||
<xsl:variable name="i18n.bt125-format" select="'Format of attachment'"/>
|
||||
<xsl:variable name="i18n.bt125-name" select="'Name of attachment'"/>
|
||||
<xsl:variable name="i18n.historyDate" select="'Date/time'"/>
|
||||
<xsl:variable name="i18n.historySubject" select="'Subject'"/>
|
||||
<xsl:variable name="i18n.historyText" select="'Text'"/>
|
||||
<xsl:variable name="i18n.historyDetails" select="'Details:'"/>
|
||||
<xsl:variable name="i18n.payment" select="'Payment details'"/>
|
||||
<xsl:variable name="i18n.contract_information" select="'Contract Information'"/>
|
||||
<xsl:variable name="i18n.preceding_invoice_reference" select="'Previous invoices'"/>
|
||||
|
||||
<xsl:include href="xrechnung-html.univ.xsl"/>
|
||||
|
||||
</xsl:stylesheet>
|
||||
|
||||
@@ -1,227 +1,229 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<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.bt44" select="'Nom'"/>
|
||||
<xsl:variable name="i18n.title" select="'XRechnung'"/>
|
||||
<xsl:variable name="i18n.overview" select="'Aperçu'"/>
|
||||
<xsl:variable name="i18n.items" select="'Détails'"/>
|
||||
<xsl:variable name="i18n.information" select="'Additif'"/>
|
||||
<xsl:variable name="i18n.attachments" select="'Pièces jointes'"/>
|
||||
<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.recipientInfo" select="'Informations sur l''acheteur'"/>
|
||||
<xsl:variable name="i18n.bt50" select="'Rue / Numéro de maison'"/>
|
||||
<xsl:variable name="i18n.bt51" select="'Boîte postale'"/>
|
||||
<xsl:variable name="i18n.bt163" select="'Supplément d''adresse'"/>
|
||||
<xsl:variable name="i18n.bt53" select="'Code postal'"/>
|
||||
<xsl:variable name="i18n.bt52" select="'Lieu'"/>
|
||||
<xsl:variable name="i18n.bt54" select="'Région'"/>
|
||||
<xsl:variable name="i18n.bt55" select="'Pays'"/>
|
||||
<xsl:variable name="i18n.bt46" select="'Identifiant'"/>
|
||||
<xsl:variable name="i18n.bt46-id" select="'Schéma de l''Identifiant'"/>
|
||||
<xsl:variable name="i18n.bt56" select="'Nom'"/>
|
||||
<xsl:variable name="i18n.bt57" select="'Téléphone'"/>
|
||||
<xsl:variable name="i18n.bt58" select="'Adresse électronique'"/>
|
||||
<xsl:variable name="i18n.bt27" select="'Nom de la société'"/>
|
||||
<xsl:variable name="i18n.bt35" select="'Rue / Numéro de maison'"/>
|
||||
<xsl:variable name="i18n.bt36" select="'Boîte postale'"/>
|
||||
<xsl:variable name="i18n.bt162" select="'Supplément d''adresse'"/>
|
||||
<xsl:variable name="i18n.bt38" select="'Code postal'"/>
|
||||
<xsl:variable name="i18n.bt37" select="'Lieu'"/>
|
||||
<xsl:variable name="i18n.bt39" select="'Région'"/>
|
||||
<xsl:variable name="i18n.bt40" select="'Code pays'"/>
|
||||
<xsl:variable name="i18n.bt29" select="'Identifiant'"/>
|
||||
<xsl:variable name="i18n.bt29-id" select="'Schéma de l''Identifiant'"/>
|
||||
<xsl:variable name="i18n.bt41" select="'Nom'"/>
|
||||
<xsl:variable name="i18n.bt42" select="'Téléphone'"/>
|
||||
<xsl:variable name="i18n.bt43" select="'Adresse électronique'"/>
|
||||
<xsl:variable name="i18n.bt1" select="'Informations sur le vendeur'"/>
|
||||
<xsl:variable name="i18n.bt2" select="'Date de facture'"/>
|
||||
<xsl:variable name="i18n.details" select="'Détails de la facturation'"/>
|
||||
<xsl:variable name="i18n.period" select="'Période de facturation'"/>
|
||||
<xsl:variable name="i18n.bt3" select="'Type de facture'"/>
|
||||
<xsl:variable name="i18n.bt5" select="'Devise'"/>
|
||||
<xsl:variable name="i18n.bt73" select="'de'"/>
|
||||
<xsl:variable name="i18n.bt74" select="'jusqu''à'"/>
|
||||
<xsl:variable name="i18n.bt11" select="'Numéro du projet'"/>
|
||||
<xsl:variable name="i18n.bt12" select="'Numéro du contrat'"/>
|
||||
<xsl:variable name="i18n.bt13" select="'Numéro de commande'"/>
|
||||
<xsl:variable name="i18n.bt14" select="'Numéro de commande'"/>
|
||||
<xsl:variable name="i18n.bt25" select="'Numéro de facture'"/>
|
||||
<xsl:variable name="i18n.bt26" select="'Date de facture'"/>
|
||||
<xsl:variable name="i18n.bg22" select="'Montants totaux de la facture'"/>
|
||||
<xsl:variable name="i18n.bt106" select="'Total de toutes les lignes'"/>
|
||||
<xsl:variable name="i18n.bt107" select="'Total de remises'"/>
|
||||
<xsl:variable name="i18n.bt108" select="'Total de suppléments'"/>
|
||||
<xsl:variable name="i18n.bt109" select="'Montant total'"/>
|
||||
<xsl:variable name="i18n.bt110" select="'montant de la TVA'"/>
|
||||
<xsl:variable name="i18n.bt111" select="'Montant total de TVA'"/>
|
||||
<xsl:variable name="i18n.bt112" select="'Montant total'"/>
|
||||
<xsl:variable name="i18n.bt113" select="'Montant payé'"/>
|
||||
<xsl:variable name="i18n.bt114" select="'Montant arrondi'"/>
|
||||
<xsl:variable name="i18n.bt115" select="'Montant dû'"/>
|
||||
<xsl:variable name="i18n.bg23" select="'Ventilation de la TVA au niveau de la facture'"/>
|
||||
<xsl:variable name="i18n.bt118" select="'Catégorie de TVA'"/>
|
||||
<xsl:variable name="i18n.bt116" select="'Montant total'"/>
|
||||
<xsl:variable name="i18n.bt119" select="'taux TVA'"/>
|
||||
<xsl:variable name="i18n.bt117" select="'montant de la TVA'"/>
|
||||
<xsl:variable name="i18n.bt120" select="'Motif d''exemption'"/>
|
||||
<xsl:variable name="i18n.bt121" select="'Identifiant pour motif d''exemption'"/>
|
||||
<xsl:variable name="i18n.bg20" select="'Allocation au niveau de la facture'"/>
|
||||
<xsl:variable name="i18n.bt95" select="'Catégorie de TVA de la remise'"/>
|
||||
<xsl:variable name="i18n.bt93" select="'Montant de base'"/>
|
||||
<xsl:variable name="i18n.bt94" select="'Pourcentage'"/>
|
||||
<xsl:variable name="i18n.bt92" select="'Allocation'"/>
|
||||
<xsl:variable name="i18n.bt96" select="'Taux de TVA de la allocation'"/>
|
||||
<xsl:variable name="i18n.bt97" select="'Motif de la remise'"/>
|
||||
<xsl:variable name="i18n.bt98" select="'Document level allowance reason code'"/>
|
||||
<xsl:variable name="i18n.bg21" select="'Supplément au niveau de la facture'"/>
|
||||
<xsl:variable name="i18n.bt102" select="'Catégorie de TVA du supplément'"/>
|
||||
<xsl:variable name="i18n.bt100" select="'Montant de base'"/>
|
||||
<xsl:variable name="i18n.bt101" select="'Pourcentage'"/>
|
||||
<xsl:variable name="i18n.bt99" select="'Supplément'"/>
|
||||
<xsl:variable name="i18n.bt103" select="'Taux de TVA du supplément'"/>
|
||||
<xsl:variable name="i18n.bt104" select="'Raison du supplément'"/>
|
||||
<xsl:variable name="i18n.bt105" select="'Document level charge reason code'"/>
|
||||
<xsl:variable name="i18n.bgx42" select="'Frais d''expédition'"/>
|
||||
<xsl:variable name="i18n.btx274" select="'Catégorie de TVA des frais de port'"/>
|
||||
<xsl:variable name="i18n.btx272" select="'Montant'"/>
|
||||
<xsl:variable name="i18n.btx273" select="'VAT rate of the shipping cost'"/>
|
||||
<xsl:variable name="i18n.btx271" select="'Taux de TVA des frais de port'"/>
|
||||
<xsl:variable name="i18n.bt20" select="'Rabais; autres conditions de paiement'"/>
|
||||
<xsl:variable name="i18n.bt9" select="'Date d''échéance'"/>
|
||||
<xsl:variable name="i18n.bt81" select="'Code du moyen de paiement'"/>
|
||||
<xsl:variable name="i18n.bt82" select="'Moyens de paiement'"/>
|
||||
<xsl:variable name="i18n.bt83" select="'Utilisation'"/>
|
||||
<xsl:variable name="i18n.bg18" select="'Information de la carte'"/>
|
||||
<xsl:variable name="i18n.bt87" select="'Numéro de carte'"/>
|
||||
<xsl:variable name="i18n.bt88" select="'Titulaire de la carte'"/>
|
||||
<xsl:variable name="i18n.bg19" select="'Prélèvement automatique'"/>
|
||||
<xsl:variable name="i18n.bt89" select="'Numéro de référence du mandat'"/>
|
||||
<xsl:variable name="i18n.bt91" select="'IBAN'"/>
|
||||
<xsl:variable name="i18n.bt90" select="'Identifiant du créancier'"/>
|
||||
<xsl:variable name="i18n.bg17" select="'Transfert'"/>
|
||||
<xsl:variable name="i18n.bt85" select="'Titulaire du compte'"/>
|
||||
<xsl:variable name="i18n.bt84" select="'IBAN'"/>
|
||||
<xsl:variable name="i18n.bt86" select="'BIC'"/>
|
||||
<xsl:variable name="i18n.bg1" select="'Commentaire sur la facture'"/>
|
||||
<xsl:variable name="i18n.bt21" select="'Objet'"/>
|
||||
<xsl:variable name="i18n.bt22" select="'Commentaire'"/>
|
||||
<xsl:variable name="i18n.bt126" select="'Position'"/>
|
||||
<xsl:variable name="i18n.bt127" select="'Texte libre'"/>
|
||||
<xsl:variable name="i18n.bt128" select="'Identifiant d''objet'"/>
|
||||
<xsl:variable name="i18n.bt128-id" select="'Schéma de l''Identifiant objet'"/>
|
||||
<xsl:variable name="i18n.bt132" select="'Numéro de ligne de commande'"/>
|
||||
<xsl:variable name="i18n.bt133" select="'Information sur l''attribution de compte'"/>
|
||||
<xsl:variable name="i18n.bg26" select="'Période de facturation'"/>
|
||||
<xsl:variable name="i18n.bt134" select="'de'"/>
|
||||
<xsl:variable name="i18n.bt135" select="'jusqu''à'"/>
|
||||
<xsl:variable name="i18n.bg29" select="'Détails de prix'"/>
|
||||
<xsl:variable name="i18n.bt129" select="'Quantité'"/>
|
||||
<xsl:variable name="i18n.bt130" select="'Unité'"/>
|
||||
<xsl:variable name="i18n.bt146" select="'Prix unitaire net'"/>
|
||||
<xsl:variable name="i18n.bt131" select="'Prix total net'"/>
|
||||
<xsl:variable name="i18n.bt147" select="'Remise nette'"/>
|
||||
<xsl:variable name="i18n.bt148" select="'Prix catalogue (net)'"/>
|
||||
<xsl:variable name="i18n.bt149" select="'Nombre d''unités'"/>
|
||||
<xsl:variable name="i18n.bt150" select="'Code de l''unité de mesure '"/>
|
||||
<xsl:variable name="i18n.bt151" select="'TVA'"/>
|
||||
<xsl:variable name="i18n.bt152" select="'Pourcentage de TVA'"/>
|
||||
<xsl:variable name="i18n.bg27" select="'Allocations au niveau de la ligne de facture'"/>
|
||||
<xsl:variable name="i18n.bt137" select="'Montant de base net'"/>
|
||||
<xsl:variable name="i18n.bt138" select="'Pourcentage'"/>
|
||||
<xsl:variable name="i18n.bt136" select="'Allocation nette'"/>
|
||||
<xsl:variable name="i18n.bt139" select="'Raison pour l''allocation '"/>
|
||||
<xsl:variable name="i18n.bt140" select="'Code de la raison pour l''allocation'"/>
|
||||
<xsl:variable name="i18n.bg28" select="'Supplément au niveau de la ligne de facture'"/>
|
||||
<xsl:variable name="i18n.bt142" select="'Montant de base net'"/>
|
||||
<xsl:variable name="i18n.bt143" select="'Pourcentage'"/>
|
||||
<xsl:variable name="i18n.bt141" select="'Supplément net'"/>
|
||||
<xsl:variable name="i18n.bt144" select="'Raison du supplément'"/>
|
||||
<xsl:variable name="i18n.bt145" select="'Code de la raison du supplément'"/>
|
||||
<xsl:variable name="i18n.bg31" select="'Informations sur l''article'"/>
|
||||
<xsl:variable name="i18n.bt153" select="'Nom'"/>
|
||||
<xsl:variable name="i18n.bt154" select="'Description'"/>
|
||||
<xsl:variable name="i18n.bt155" select="'Numéro d''article'"/>
|
||||
<xsl:variable name="i18n.bt156" select="'N° client / matériel'"/>
|
||||
<xsl:variable name="i18n.bg32" select="'Propriétés de l''article'"/>
|
||||
<xsl:variable name="i18n.bt157" select="'Identifiant article'"/>
|
||||
<xsl:variable name="i18n.bt157-id" select="'Schéma de l''Identifiant article'"/>
|
||||
<xsl:variable name="i18n.bt158" select="'Code de classification des articles'"/>
|
||||
<xsl:variable name="i18n.bt158-id" select="'Identifiant pour la création du schéma'"/>
|
||||
<xsl:variable name="i18n.bt157-vers-id" select="'Version de création du schéma'"/>
|
||||
<xsl:variable name="i18n.bt159" select="'Code du pays d''origine'"/>
|
||||
<xsl:variable name="i18n.bg4" select="'Informations sur le vendeur'"/>
|
||||
<xsl:variable name="i18n.bt28" select="'Nom commercial différent'"/>
|
||||
<xsl:variable name="i18n.bt34" select="'Adresse électronique'"/>
|
||||
<xsl:variable name="i18n.bt34-id" select="'Schéma de l''adresse électronique'"/>
|
||||
<xsl:variable name="i18n.bt30" select="'Numéro d''enregistrement'"/>
|
||||
<xsl:variable name="i18n.bt31" select="'Identifiant TVA'"/>
|
||||
<xsl:variable name="i18n.bt32" select="'Numéro fiscale'"/>
|
||||
<xsl:variable name="i18n.bt32-schema" select="'Schéma du numéro fiscal'"/>
|
||||
<xsl:variable name="i18n.bt33" select="'Autres informations légales'"/>
|
||||
<xsl:variable name="i18n.bt6" select="'Code devise de la TVA'"/>
|
||||
<xsl:variable name="i18n.bg11" select="'Représentant fiscal du vendeur'"/>
|
||||
<xsl:variable name="i18n.bt62" select="'Nom'"/>
|
||||
<xsl:variable name="i18n.bt64" select="'Rue / Numéro de maison'"/>
|
||||
<xsl:variable name="i18n.bt65" select="'Boîte postale'"/>
|
||||
<xsl:variable name="i18n.bt164" select="'Supplément d''adresse'"/>
|
||||
<xsl:variable name="i18n.bt67" select="'Code postal'"/>
|
||||
<xsl:variable name="i18n.bt66" select="'Lieu'"/>
|
||||
<xsl:variable name="i18n.bt68" select="'Région'"/>
|
||||
<xsl:variable name="i18n.bt69" select="'Code pays'"/>
|
||||
<xsl:variable name="i18n.bt63" select="'Identifiant TVA'"/>
|
||||
<xsl:variable name="i18n.bg7" select="'Informations sur l''acheteur'"/>
|
||||
<xsl:variable name="i18n.bt45" select="'Nom commercial différent '"/>
|
||||
<xsl:variable name="i18n.bt49" select="'Adresse électronique'"/>
|
||||
<xsl:variable name="i18n.bt49-id" select="'Schéma de l''adresse électronique'"/>
|
||||
<xsl:variable name="i18n.bt47" select="'Numéro d''enregistrement'"/>
|
||||
<xsl:variable name="i18n.bt47-id" select="'Schéma du numéro d''enregistrement'"/>
|
||||
<xsl:variable name="i18n.bt48" select="'Identifiant TVA'"/>
|
||||
<xsl:variable name="i18n.bt7" select="'Date de facturation de la TVA'"/>
|
||||
<xsl:variable name="i18n.bt8" select="'Code de date de règlement de la TVA'"/>
|
||||
<xsl:variable name="i18n.bt19" select="'Informations sur l''attribution de compte'"/>
|
||||
<xsl:variable name="i18n.bg13" select="'Informations de livraison'"/>
|
||||
<xsl:variable name="i18n.bt71" select="'Identification du lieu de livraison'"/>
|
||||
<xsl:variable name="i18n.bt71-id" select="'Schéma de l''Identifiant'"/>
|
||||
<xsl:variable name="i18n.bt72" select="'Date de livraison'"/>
|
||||
<xsl:variable name="i18n.bt70" select="'Nom du destinataire'"/>
|
||||
<xsl:variable name="i18n.bt75" select="'Rue / Numéro de maison'"/>
|
||||
<xsl:variable name="i18n.bt76" select="'Boîte postale'"/>
|
||||
<xsl:variable name="i18n.bt165" select="'Supplément d''adresse'"/>
|
||||
<xsl:variable name="i18n.bt78" select="'Code postal'"/>
|
||||
<xsl:variable name="i18n.bt77" select="'Lieu'"/>
|
||||
<xsl:variable name="i18n.bt79" select="'Région'"/>
|
||||
<xsl:variable name="i18n.bt80" select="'Pays'"/>
|
||||
<xsl:variable name="i18n.bt17" select="'Numéro d''attribution'"/>
|
||||
<xsl:variable name="i18n.bt15" select="'Identifiant de l''accusé de réception'"/>
|
||||
<xsl:variable name="i18n.bt16" select="'Identifiant du bordereau d''expédition'"/>
|
||||
<xsl:variable name="i18n.bt23" select="'Identifiant processus'"/>
|
||||
<xsl:variable name="i18n.bt24" select="'Identifiant spécification'"/>
|
||||
<xsl:variable name="i18n.bt18" select="'Identifiant objet'"/>
|
||||
<xsl:variable name="i18n.bt18-id" select="'Schéma de l''Identifiant objet'"/>
|
||||
<xsl:variable name="i18n.bg10" select="'bénéficiaire autre que le vendeur'"/>
|
||||
<xsl:variable name="i18n.bt59" select="'Nom'"/>
|
||||
<xsl:variable name="i18n.bt60" select="'Identifiant'"/>
|
||||
<xsl:variable name="i18n.bt60-id" select="'Schéma de l''Identifiant'"/>
|
||||
<xsl:variable name="i18n.bt61" select="'Numéro d''enregistrement'"/>
|
||||
<xsl:variable name="i18n.bt61-id" select="'Schéma du numéro d''enregistrement'"/>
|
||||
<xsl:variable name="i18n.bg24" select="'Documents justificatifs'"/>
|
||||
<xsl:variable name="i18n.bt122" select="'Identifiant'"/>
|
||||
<xsl:variable name="i18n.bt123" select="'Description'"/>
|
||||
<xsl:variable name="i18n.bt124" select="'Référence (par exemple l''adresse Internet)'"/>
|
||||
<xsl:variable name="i18n.bt125" select="'Document joint'"/>
|
||||
<xsl:variable name="i18n.bt125-format" select="'Format du document joint'"/>
|
||||
<xsl:variable name="i18n.bt125-name" select="'Nom du document joint '"/>
|
||||
<xsl:variable name="i18n.historyDate" select="'Date/heure'"/>
|
||||
<xsl:variable name="i18n.historySubject" select="'Objet'"/>
|
||||
<xsl:variable name="i18n.historyText" select="'Texte'"/>
|
||||
<xsl:variable name="i18n.historyDetails" select="'Détails'"/>
|
||||
<xsl:variable name="i18n.payment" select="'Détails de paiement'"/>
|
||||
<xsl:variable name="i18n.contract_information" select="'Informations sur le contrat'"/>
|
||||
<xsl:variable name="i18n.preceding_invoice_reference" select="'Factures précédentes'"/>
|
||||
|
||||
<xsl:include href="xrechnung-html.univ.xsl"/>
|
||||
|
||||
</xsl:stylesheet>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<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.bt44" select="'Nom'"/>
|
||||
<xsl:variable name="i18n.title" select="'XRechnung'"/>
|
||||
<xsl:variable name="i18n.overview" select="'Aperçu'"/>
|
||||
<xsl:variable name="i18n.items" select="'Détails'"/>
|
||||
<xsl:variable name="i18n.information" select="'Additif'"/>
|
||||
<xsl:variable name="i18n.attachments" select="'Pièces jointes'"/>
|
||||
<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.recipientInfo" select="'Informations sur l''acheteur'"/>
|
||||
<xsl:variable name="i18n.dateOf" select="' du '"/>
|
||||
<xsl:variable name="i18n.bt50" select="'Rue / Numéro de maison'"/>
|
||||
<xsl:variable name="i18n.bt51" select="'Boîte postale'"/>
|
||||
<xsl:variable name="i18n.bt163" select="'Supplément d''adresse'"/>
|
||||
<xsl:variable name="i18n.bt53" select="'Code postal'"/>
|
||||
<xsl:variable name="i18n.bt52" select="'Lieu'"/>
|
||||
<xsl:variable name="i18n.bt54" select="'Région'"/>
|
||||
<xsl:variable name="i18n.bt55" select="'Pays'"/>
|
||||
<xsl:variable name="i18n.bt46" select="'Identifiant'"/>
|
||||
<xsl:variable name="i18n.bt46-id" select="'Schéma de l''Identifiant'"/>
|
||||
<xsl:variable name="i18n.bt56" select="'Nom'"/>
|
||||
<xsl:variable name="i18n.bt57" select="'Téléphone'"/>
|
||||
<xsl:variable name="i18n.bt58" select="'Adresse électronique'"/>
|
||||
<xsl:variable name="i18n.bt27" select="'Nom de la société'"/>
|
||||
<xsl:variable name="i18n.bt35" select="'Rue / Numéro de maison'"/>
|
||||
<xsl:variable name="i18n.bt36" select="'Boîte postale'"/>
|
||||
<xsl:variable name="i18n.bt162" select="'Supplément d''adresse'"/>
|
||||
<xsl:variable name="i18n.bt38" select="'Code postal'"/>
|
||||
<xsl:variable name="i18n.bt37" select="'Lieu'"/>
|
||||
<xsl:variable name="i18n.bt39" select="'Région'"/>
|
||||
<xsl:variable name="i18n.bt40" select="'Code pays'"/>
|
||||
<xsl:variable name="i18n.bt29" select="'Identifiant'"/>
|
||||
<xsl:variable name="i18n.bt29-id" select="'Schéma de l''Identifiant'"/>
|
||||
<xsl:variable name="i18n.bt41" select="'Nom'"/>
|
||||
<xsl:variable name="i18n.bt42" select="'Téléphone'"/>
|
||||
<xsl:variable name="i18n.bt43" select="'Adresse électronique'"/>
|
||||
<xsl:variable name="i18n.bt1" select="'Informations sur le vendeur'"/>
|
||||
<xsl:variable name="i18n.bt2" select="'Date de facture'"/>
|
||||
<xsl:variable name="i18n.details" select="'Détails de la facturation'"/>
|
||||
<xsl:variable name="i18n.period" select="'Période de facturation'"/>
|
||||
<xsl:variable name="i18n.bt3" select="'Type de facture'"/>
|
||||
<xsl:variable name="i18n.bt5" select="'Devise'"/>
|
||||
<xsl:variable name="i18n.bt73" select="'de'"/>
|
||||
<xsl:variable name="i18n.bt74" select="'jusqu''à'"/>
|
||||
<xsl:variable name="i18n.bt11" select="'Numéro du projet'"/>
|
||||
<xsl:variable name="i18n.bt12" select="'Numéro du contrat'"/>
|
||||
<xsl:variable name="i18n.bt13" select="'Numéro de commande'"/>
|
||||
<xsl:variable name="i18n.bt14" select="'Numéro de commande'"/>
|
||||
<xsl:variable name="i18n.bt25" select="'Numéro de facture'"/>
|
||||
<xsl:variable name="i18n.bt26" select="'Date de facture'"/>
|
||||
<xsl:variable name="i18n.bg22" select="'Montants totaux de la facture'"/>
|
||||
<xsl:variable name="i18n.bt106" select="'Total de toutes les lignes'"/>
|
||||
<xsl:variable name="i18n.bt107" select="'Total de remises'"/>
|
||||
<xsl:variable name="i18n.bt108" select="'Total de suppléments'"/>
|
||||
<xsl:variable name="i18n.bt109" select="'Montant total'"/>
|
||||
<xsl:variable name="i18n.bt110" select="'montant de la TVA'"/>
|
||||
<xsl:variable name="i18n.bt111" select="'Montant total de TVA'"/>
|
||||
<xsl:variable name="i18n.bt112" select="'Montant total'"/>
|
||||
<xsl:variable name="i18n.bt113" select="'Montant payé'"/>
|
||||
<xsl:variable name="i18n.bt114" select="'Montant arrondi'"/>
|
||||
<xsl:variable name="i18n.bt115" select="'Montant dû'"/>
|
||||
<xsl:variable name="i18n.bg23" select="'Ventilation de la TVA au niveau de la facture'"/>
|
||||
<xsl:variable name="i18n.bt118" select="'Catégorie de TVA'"/>
|
||||
<xsl:variable name="i18n.bt116" select="'Montant total'"/>
|
||||
<xsl:variable name="i18n.bt119" select="'taux TVA'"/>
|
||||
<xsl:variable name="i18n.bt117" select="'montant de la TVA'"/>
|
||||
<xsl:variable name="i18n.bt120" select="'Motif d''exemption'"/>
|
||||
<xsl:variable name="i18n.bt121" select="'Identifiant pour motif d''exemption'"/>
|
||||
<xsl:variable name="i18n.bg20" select="'Allocation au niveau de la facture'"/>
|
||||
<xsl:variable name="i18n.bt95" select="'Catégorie de TVA de la remise'"/>
|
||||
<xsl:variable name="i18n.bt93" select="'Montant de base'"/>
|
||||
<xsl:variable name="i18n.bt94" select="'Pourcentage'"/>
|
||||
<xsl:variable name="i18n.bt92" select="'Allocation'"/>
|
||||
<xsl:variable name="i18n.bt96" select="'Taux de TVA de la allocation'"/>
|
||||
<xsl:variable name="i18n.bt97" select="'Motif de la remise'"/>
|
||||
<xsl:variable name="i18n.bt98" select="'Document level allowance reason code'"/>
|
||||
<xsl:variable name="i18n.bg21" select="'Supplément au niveau de la facture'"/>
|
||||
<xsl:variable name="i18n.bt102" select="'Catégorie de TVA du supplément'"/>
|
||||
<xsl:variable name="i18n.bt100" select="'Montant de base'"/>
|
||||
<xsl:variable name="i18n.bt101" select="'Pourcentage'"/>
|
||||
<xsl:variable name="i18n.bt99" select="'Supplément'"/>
|
||||
<xsl:variable name="i18n.bt103" select="'Taux de TVA du supplément'"/>
|
||||
<xsl:variable name="i18n.bt104" select="'Raison du supplément'"/>
|
||||
<xsl:variable name="i18n.bt105" select="'Document level charge reason code'"/>
|
||||
<xsl:variable name="i18n.bgx42" select="'Frais d''expédition'"/>
|
||||
<xsl:variable name="i18n.btx274" select="'Catégorie de TVA des frais de port'"/>
|
||||
<xsl:variable name="i18n.btx272" select="'Montant'"/>
|
||||
<xsl:variable name="i18n.btx273" select="'VAT rate of the shipping cost'"/>
|
||||
<xsl:variable name="i18n.btx271" select="'Taux de TVA des frais de port'"/>
|
||||
<xsl:variable name="i18n.bt20" select="'Rabais; autres conditions de paiement'"/>
|
||||
<xsl:variable name="i18n.bt9" select="'Date d''échéance'"/>
|
||||
<xsl:variable name="i18n.bt81" select="'Code du moyen de paiement'"/>
|
||||
<xsl:variable name="i18n.bt82" select="'Moyens de paiement'"/>
|
||||
<xsl:variable name="i18n.bt83" select="'Utilisation'"/>
|
||||
<xsl:variable name="i18n.bg18" select="'Information de la carte'"/>
|
||||
<xsl:variable name="i18n.bt87" select="'Numéro de carte'"/>
|
||||
<xsl:variable name="i18n.bt88" select="'Titulaire de la carte'"/>
|
||||
<xsl:variable name="i18n.bg19" select="'Prélèvement automatique'"/>
|
||||
<xsl:variable name="i18n.bt89" select="'Numéro de référence du mandat'"/>
|
||||
<xsl:variable name="i18n.bt91" select="'IBAN'"/>
|
||||
<xsl:variable name="i18n.bt90" select="'Identifiant du créancier'"/>
|
||||
<xsl:variable name="i18n.bg17" select="'Transfert'"/>
|
||||
<xsl:variable name="i18n.bt85" select="'Titulaire du compte'"/>
|
||||
<xsl:variable name="i18n.bt84" select="'IBAN'"/>
|
||||
<xsl:variable name="i18n.bt86" select="'BIC'"/>
|
||||
<xsl:variable name="i18n.bg1" select="'Commentaire sur la facture'"/>
|
||||
<xsl:variable name="i18n.bt21" select="'Objet'"/>
|
||||
<xsl:variable name="i18n.bt22" select="'Commentaire'"/>
|
||||
<xsl:variable name="i18n.bt126" select="'Position'"/>
|
||||
<xsl:variable name="i18n.bt127" select="'Texte libre'"/>
|
||||
<xsl:variable name="i18n.bt128" select="'Identifiant d''objet'"/>
|
||||
<xsl:variable name="i18n.bt128-id" select="'Schéma de l''Identifiant objet'"/>
|
||||
<xsl:variable name="i18n.bt132" select="'Numéro de ligne de commande'"/>
|
||||
<xsl:variable name="i18n.bt133" select="'Information sur l''attribution de compte'"/>
|
||||
<xsl:variable name="i18n.bg26" select="'Période de facturation'"/>
|
||||
<xsl:variable name="i18n.bt134" select="'de'"/>
|
||||
<xsl:variable name="i18n.bt135" select="'jusqu''à'"/>
|
||||
<xsl:variable name="i18n.bg29" select="'Détails de prix'"/>
|
||||
<xsl:variable name="i18n.bt129" select="'Quantité'"/>
|
||||
<xsl:variable name="i18n.bt130" select="'Unité'"/>
|
||||
<xsl:variable name="i18n.bt146" select="'Prix unitaire net'"/>
|
||||
<xsl:variable name="i18n.bt131" select="'Prix total net'"/>
|
||||
<xsl:variable name="i18n.bt147" select="'Remise nette'"/>
|
||||
<xsl:variable name="i18n.bt148" select="'Prix catalogue (net)'"/>
|
||||
<xsl:variable name="i18n.bt149" select="'Nombre d''unités'"/>
|
||||
<xsl:variable name="i18n.bt150" select="'Code de l''unité de mesure '"/>
|
||||
<xsl:variable name="i18n.bt151" select="'TVA'"/>
|
||||
<xsl:variable name="i18n.bt152" select="'Pourcentage de TVA'"/>
|
||||
<xsl:variable name="i18n.bg27" select="'Allocations au niveau de la ligne de facture'"/>
|
||||
<xsl:variable name="i18n.bt137" select="'Montant de base net'"/>
|
||||
<xsl:variable name="i18n.bt138" select="'Pourcentage'"/>
|
||||
<xsl:variable name="i18n.bt136" select="'Allocation nette'"/>
|
||||
<xsl:variable name="i18n.bt139" select="'Raison pour l''allocation '"/>
|
||||
<xsl:variable name="i18n.bt140" select="'Code de la raison pour l''allocation'"/>
|
||||
<xsl:variable name="i18n.bg28" select="'Supplément au niveau de la ligne de facture'"/>
|
||||
<xsl:variable name="i18n.bt142" select="'Montant de base net'"/>
|
||||
<xsl:variable name="i18n.bt143" select="'Pourcentage'"/>
|
||||
<xsl:variable name="i18n.bt141" select="'Supplément net'"/>
|
||||
<xsl:variable name="i18n.bt144" select="'Raison du supplément'"/>
|
||||
<xsl:variable name="i18n.bt145" select="'Code de la raison du supplément'"/>
|
||||
<xsl:variable name="i18n.bg31" select="'Informations sur l''article'"/>
|
||||
<xsl:variable name="i18n.bt153" select="'Nom'"/>
|
||||
<xsl:variable name="i18n.bt154" select="'Description'"/>
|
||||
<xsl:variable name="i18n.bt155" select="'Numéro d''article'"/>
|
||||
<xsl:variable name="i18n.bt156" select="'N° client / matériel'"/>
|
||||
<xsl:variable name="i18n.bg32" select="'Propriétés de l''article'"/>
|
||||
<xsl:variable name="i18n.bt157" select="'Identifiant article'"/>
|
||||
<xsl:variable name="i18n.bt157-id" select="'Schéma de l''Identifiant article'"/>
|
||||
<xsl:variable name="i18n.bt158" select="'Code de classification des articles'"/>
|
||||
<xsl:variable name="i18n.bt158-id" select="'Identifiant pour la création du schéma'"/>
|
||||
<xsl:variable name="i18n.bt157-vers-id" select="'Version de création du schéma'"/>
|
||||
<xsl:variable name="i18n.bt159" select="'Code du pays d''origine'"/>
|
||||
<xsl:variable name="i18n.bg4" select="'Informations sur le vendeur'"/>
|
||||
<xsl:variable name="i18n.bt28" select="'Nom commercial différent'"/>
|
||||
<xsl:variable name="i18n.bt34" select="'Adresse électronique'"/>
|
||||
<xsl:variable name="i18n.bt34-id" select="'Schéma de l''adresse électronique'"/>
|
||||
<xsl:variable name="i18n.bt30" select="'Numéro d''enregistrement'"/>
|
||||
<xsl:variable name="i18n.bt31" select="'Identifiant TVA'"/>
|
||||
<xsl:variable name="i18n.bt32" select="'Numéro fiscale'"/>
|
||||
<xsl:variable name="i18n.bt32-schema" select="'Schéma du numéro fiscal'"/>
|
||||
<xsl:variable name="i18n.bt33" select="'Autres informations légales'"/>
|
||||
<xsl:variable name="i18n.bt6" select="'Code devise de la TVA'"/>
|
||||
<xsl:variable name="i18n.bg11" select="'Représentant fiscal du vendeur'"/>
|
||||
<xsl:variable name="i18n.bt62" select="'Nom'"/>
|
||||
<xsl:variable name="i18n.bt64" select="'Rue / Numéro de maison'"/>
|
||||
<xsl:variable name="i18n.bt65" select="'Boîte postale'"/>
|
||||
<xsl:variable name="i18n.bt164" select="'Supplément d''adresse'"/>
|
||||
<xsl:variable name="i18n.bt67" select="'Code postal'"/>
|
||||
<xsl:variable name="i18n.bt66" select="'Lieu'"/>
|
||||
<xsl:variable name="i18n.bt68" select="'Région'"/>
|
||||
<xsl:variable name="i18n.bt69" select="'Code pays'"/>
|
||||
<xsl:variable name="i18n.bt63" select="'Identifiant TVA'"/>
|
||||
<xsl:variable name="i18n.bg7" select="'Informations sur l''acheteur'"/>
|
||||
<xsl:variable name="i18n.bt45" select="'Nom commercial différent '"/>
|
||||
<xsl:variable name="i18n.bt49" select="'Adresse électronique'"/>
|
||||
<xsl:variable name="i18n.bt49-id" select="'Schéma de l''adresse électronique'"/>
|
||||
<xsl:variable name="i18n.bt47" select="'Numéro d''enregistrement'"/>
|
||||
<xsl:variable name="i18n.bt47-id" select="'Schéma du numéro d''enregistrement'"/>
|
||||
<xsl:variable name="i18n.bt48" select="'Identifiant TVA'"/>
|
||||
<xsl:variable name="i18n.bt7" select="'Date de facturation de la TVA'"/>
|
||||
<xsl:variable name="i18n.bt8" select="'Code de date de règlement de la TVA'"/>
|
||||
<xsl:variable name="i18n.bt19" select="'Informations sur l''attribution de compte'"/>
|
||||
<xsl:variable name="i18n.bg13" select="'Informations de livraison'"/>
|
||||
<xsl:variable name="i18n.bt71" select="'Identification du lieu de livraison'"/>
|
||||
<xsl:variable name="i18n.bt71-id" select="'Schéma de l''Identifiant'"/>
|
||||
<xsl:variable name="i18n.bt72" select="'Date de livraison'"/>
|
||||
<xsl:variable name="i18n.bt70" select="'Nom du destinataire'"/>
|
||||
<xsl:variable name="i18n.bt75" select="'Rue / Numéro de maison'"/>
|
||||
<xsl:variable name="i18n.bt76" select="'Boîte postale'"/>
|
||||
<xsl:variable name="i18n.bt165" select="'Supplément d''adresse'"/>
|
||||
<xsl:variable name="i18n.bt78" select="'Code postal'"/>
|
||||
<xsl:variable name="i18n.bt77" select="'Lieu'"/>
|
||||
<xsl:variable name="i18n.bt79" select="'Région'"/>
|
||||
<xsl:variable name="i18n.bt80" select="'Pays'"/>
|
||||
<xsl:variable name="i18n.bt17" select="'Numéro d''attribution'"/>
|
||||
<xsl:variable name="i18n.bt15" select="'Identifiant de l''accusé de réception'"/>
|
||||
<xsl:variable name="i18n.bt16" select="'Identifiant du bordereau d''expédition'"/>
|
||||
<xsl:variable name="i18n.btx202" select="'Identifiant du bon de livraison'"/>
|
||||
<xsl:variable name="i18n.bt23" select="'Identifiant processus'"/>
|
||||
<xsl:variable name="i18n.bt24" select="'Identifiant spécification'"/>
|
||||
<xsl:variable name="i18n.bt18" select="'Identifiant objet'"/>
|
||||
<xsl:variable name="i18n.bt18-id" select="'Schéma de l''Identifiant objet'"/>
|
||||
<xsl:variable name="i18n.bg10" select="'bénéficiaire autre que le vendeur'"/>
|
||||
<xsl:variable name="i18n.bt59" select="'Nom'"/>
|
||||
<xsl:variable name="i18n.bt60" select="'Identifiant'"/>
|
||||
<xsl:variable name="i18n.bt60-id" select="'Schéma de l''Identifiant'"/>
|
||||
<xsl:variable name="i18n.bt61" select="'Numéro d''enregistrement'"/>
|
||||
<xsl:variable name="i18n.bt61-id" select="'Schéma du numéro d''enregistrement'"/>
|
||||
<xsl:variable name="i18n.bg24" select="'Documents justificatifs'"/>
|
||||
<xsl:variable name="i18n.bt122" select="'Identifiant'"/>
|
||||
<xsl:variable name="i18n.bt123" select="'Description'"/>
|
||||
<xsl:variable name="i18n.bt124" select="'Référence (par exemple l''adresse Internet)'"/>
|
||||
<xsl:variable name="i18n.bt125" select="'Document joint'"/>
|
||||
<xsl:variable name="i18n.bt125-format" select="'Format du document joint'"/>
|
||||
<xsl:variable name="i18n.bt125-name" select="'Nom du document joint '"/>
|
||||
<xsl:variable name="i18n.historyDate" select="'Date/heure'"/>
|
||||
<xsl:variable name="i18n.historySubject" select="'Objet'"/>
|
||||
<xsl:variable name="i18n.historyText" select="'Texte'"/>
|
||||
<xsl:variable name="i18n.historyDetails" select="'Détails'"/>
|
||||
<xsl:variable name="i18n.payment" select="'Détails de paiement'"/>
|
||||
<xsl:variable name="i18n.contract_information" select="'Informations sur le contrat'"/>
|
||||
<xsl:variable name="i18n.preceding_invoice_reference" select="'Factures précédentes'"/>
|
||||
|
||||
<xsl:include href="xrechnung-html.univ.xsl"/>
|
||||
|
||||
</xsl:stylesheet>
|
||||
|
||||
@@ -1144,17 +1144,29 @@ function downloadData (element_id) {
|
||||
<xsl:apply-templates select="./xr:VAT_BREAKDOWN"/>
|
||||
</div>
|
||||
|
||||
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig">
|
||||
<xsl:apply-templates select="./xr:DOCUMENT_LEVEL_ALLOWANCES"/>
|
||||
</div>
|
||||
<xsl:choose>
|
||||
<xsl:when test="./xr:DOCUMENT_LEVEL_ALLOWANCES">
|
||||
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig">
|
||||
<xsl:apply-templates select="./xr:DOCUMENT_LEVEL_ALLOWANCES"/>
|
||||
</div>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
|
||||
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig">
|
||||
<xsl:apply-templates select="./xr:DOCUMENT_LEVEL_CHARGES"/>
|
||||
</div>
|
||||
|
||||
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig">
|
||||
<xsl:apply-templates select="./xr:LOGISTICS_SERVICE_CHARGES"/>
|
||||
</div>
|
||||
<xsl:choose>
|
||||
<xsl:when test="./xr:DOCUMENT_LEVEL_CHARGES">
|
||||
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig">
|
||||
<xsl:apply-templates select="./xr:DOCUMENT_LEVEL_CHARGES"/>
|
||||
</div>
|
||||
</xsl:when>
|
||||
</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="boxzeile">
|
||||
@@ -2182,11 +2194,24 @@ function downloadData (element_id) {
|
||||
</div>
|
||||
<div class="boxzeile">
|
||||
<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 class="boxzeile">
|
||||
<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 class="boxzeile">
|
||||
<div class="boxdaten legende"><xsl:value-of select="$i18n.bt23"/>:</div>
|
||||
|
||||
@@ -166,11 +166,123 @@ public class DeSerializationTest extends ResourceCase {
|
||||
|
||||
}
|
||||
|
||||
public void testDeserializedFiles() {
|
||||
File inputUBL = getResourceAsFile("XRECHNUNG_Elektron.ubl.xml");
|
||||
ZUGFeRDInvoiceImporter zii = new ZUGFeRDInvoiceImporter();
|
||||
zii.doIgnoreCalculationErrors();
|
||||
Invoice i = new Invoice();
|
||||
String exText = null;
|
||||
|
||||
try {
|
||||
zii.fromXML(new String(Files.readAllBytes(inputUBL.toPath()), StandardCharsets.UTF_8));
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
zii.extractInto(i);
|
||||
String json = mapper.writeValueAsString(i);
|
||||
Invoice newInvoiceFromJSON = mapper.readValue(json, Invoice.class);
|
||||
|
||||
assertEquals("181301674", i.getNumber());
|
||||
assertEquals(newInvoiceFromJSON.getNumber(), i.getNumber());
|
||||
assertEquals(newInvoiceFromJSON.getAdditionalReferencedDocuments()[0].getFilename(), i.getAdditionalReferencedDocuments()[0].getFilename());
|
||||
assertEquals(newInvoiceFromJSON.getAdditionalReferencedDocuments().length, 2);
|
||||
|
||||
|
||||
} catch (IOException e) {
|
||||
exText = e.getMessage();
|
||||
} catch (XPathExpressionException e) {
|
||||
exText = e.getMessage();
|
||||
} catch (ParseException e) {
|
||||
exText = e.getMessage();
|
||||
}
|
||||
assertNull(exText);
|
||||
|
||||
}
|
||||
|
||||
public void testFileSerialization() {
|
||||
|
||||
String base64 = "b25ldHdvdGhyZWU=";
|
||||
String json = "{\n" +
|
||||
" \"additionalReferencedDocuments\": [\n" +
|
||||
" {\n" +
|
||||
" \"data\": \"" + base64 + "\",\n" +
|
||||
" \"description\": \"Additional file attachment\",\n" +
|
||||
" \"filename\": \"text.txt\",\n" +
|
||||
" \"mimetype\": \"text/plain\",\n" +
|
||||
" \"relation\": \"Data\"\n" +
|
||||
" }\n" +
|
||||
"],\n" +
|
||||
"\n" +
|
||||
" \"number\": \"471102\",\n" +
|
||||
" \"currency\": \"EUR\",\n" +
|
||||
" \"issueDate\": \"2018-03-04T00:00:00.000+01:00\",\n" +
|
||||
" \"dueDate\": \"2018-03-04T00:00:00.000+01:00\",\n" +
|
||||
" \"deliveryDate\": \"2018-03-04T00:00:00.000+01:00\",\n" +
|
||||
" \"sender\": {\n" +
|
||||
" \"name\": \"Lieferant GmbH\",\n" +
|
||||
" \"zip\": \"80333\",\n" +
|
||||
" \"street\": \"Lieferantenstraße 20\",\n" +
|
||||
" \"location\": \"München\",\n" +
|
||||
" \"country\": \"DE\",\n" +
|
||||
" \"taxID\": \"201/113/40209\",\n" +
|
||||
" \"vatID\": \"DE123456789\",\n" +
|
||||
" \"globalID\": \"4000001123452\",\n" +
|
||||
" \"globalIDScheme\": \"0088\"\n" +
|
||||
" },\n" +
|
||||
" \"recipient\": {\n" +
|
||||
" \"name\": \"Kunden AG Mitte\",\n" +
|
||||
" \"zip\": \"69876\",\n" +
|
||||
" \"street\": \"Kundenstraße 15\",\n" +
|
||||
" \"location\": \"Frankfurt\",\n" +
|
||||
" \"country\": \"DE\"\n" +
|
||||
" },\n" +
|
||||
" \"zfitems\": [\n" +
|
||||
" {\n" +
|
||||
" \"price\": 9.9,\n" +
|
||||
" \"quantity\": 20,\n" +
|
||||
" \"product\": {\n" +
|
||||
" \"unit\": \"H87\",\n" +
|
||||
" \"name\": \"Trennblätter A4\",\n" +
|
||||
" \"description\": \"\",\n" +
|
||||
" \"vatpercent\": 19,\n" +
|
||||
" \"taxCategoryCode\": \"S\"\n" +
|
||||
" }\n" +
|
||||
" },\n" +
|
||||
" {\n" +
|
||||
" \"price\": 5.5,\n" +
|
||||
" \"quantity\": 50,\n" +
|
||||
" \"product\": {\n" +
|
||||
" \"unit\": \"H87\",\n" +
|
||||
" \"name\": \"Joghurt Banane\",\n" +
|
||||
" \"description\": \"\",\n" +
|
||||
" \"vatpercent\": 7,\n" +
|
||||
" \"taxCategoryCode\": \"S\"\n" +
|
||||
" }\n" +
|
||||
" }\n" +
|
||||
" ]\n" +
|
||||
"}\n";
|
||||
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
|
||||
try {
|
||||
Invoice newInvoiceFromJSON = mapper.readValue(json, Invoice.class);
|
||||
ZUGFeRD2PullProvider zf2p = new ZUGFeRD2PullProvider();
|
||||
zf2p.setProfile(Profiles.getByName("XRechnung"));
|
||||
zf2p.generateXML(newInvoiceFromJSON);
|
||||
String theXML = new String(zf2p.getXML());
|
||||
assertTrue(theXML.contains("<udt:DateTimeString format=\"102\">20180304</udt:DateTimeString>"));
|
||||
assertTrue(theXML.contains(base64));
|
||||
|
||||
} catch (Exception e) {
|
||||
fail("No exception expected");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void testFull300Roundtrip() {
|
||||
File inputCII = getResourceAsFile("not_validating_full_invoice_based_onTest_EeISI_300_CENfullmodel.cii.xml");
|
||||
|
||||
Invoice i=new Invoice();
|
||||
String exText=null;
|
||||
Invoice i = new Invoice();
|
||||
String exText = null;
|
||||
ZUGFeRDInvoiceImporter zii = new ZUGFeRDInvoiceImporter();
|
||||
zii.doIgnoreCalculationErrors();
|
||||
try {
|
||||
@@ -180,15 +292,15 @@ public class DeSerializationTest extends ResourceCase {
|
||||
String json = mapper.writeValueAsString(i);
|
||||
Invoice newInvoiceFromJSON = mapper.readValue(json, Invoice.class);
|
||||
|
||||
assertEquals("Test_EeISI_100",i.getNumber());
|
||||
assertEquals(newInvoiceFromJSON.getNumber(),i.getNumber());
|
||||
assertEquals("Test_EeISI_100", i.getNumber());
|
||||
assertEquals(newInvoiceFromJSON.getNumber(), i.getNumber());
|
||||
|
||||
} catch (IOException e) {
|
||||
exText=e.getMessage();
|
||||
exText = e.getMessage();
|
||||
} catch (XPathExpressionException e) {
|
||||
exText=e.getMessage();
|
||||
exText = e.getMessage();
|
||||
} catch (ParseException e) {
|
||||
exText=e.getMessage();
|
||||
exText = e.getMessage();
|
||||
}
|
||||
assertNull(exText);
|
||||
|
||||
|
||||
@@ -1,289 +1,171 @@
|
||||
/**
|
||||
* *********************************************************************
|
||||
* <p>
|
||||
* Copyright 2019 Jochen Staerk
|
||||
* <p>
|
||||
* Use is subject to license terms.
|
||||
* <p>
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||
* use this file except in compliance with the License. You may obtain a copy
|
||||
* of the License at http://www.apache.org/licenses/LICENSE-2.0.
|
||||
* <p>
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* <p>
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* <p>
|
||||
* **********************************************************************
|
||||
*/
|
||||
package org.mustangproject.ZUGFeRD;
|
||||
|
||||
import org.junit.FixMethodOrder;
|
||||
import org.junit.runners.MethodSorters;
|
||||
import org.mustangproject.util.ByteArraySearcher;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import javax.xml.transform.TransformerException;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
|
||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||
public class VisualizationTest extends ResourceCase {
|
||||
|
||||
final String TARGET_PDF_CII = "./target/testout-Visualization-cii.pdf";
|
||||
final String TARGET_PDF_UBL = "./target/testout-Visualization-cii.pdf";
|
||||
|
||||
public void testCIIVisualizationBasic() {
|
||||
|
||||
// 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)
|
||||
.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() {
|
||||
|
||||
// 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).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() {
|
||||
|
||||
// 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).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() {
|
||||
|
||||
// the writing part
|
||||
File UBLinputFile = getResourceAsFile("ubl/01.01a-INVOICE.ubl.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).replace("\r", "").replace("\n", "")
|
||||
.replace("\t", "")
|
||||
.replace(" ", "");
|
||||
|
||||
File expectedResult = getResourceAsFile("factur-x-vis-ubl.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 testPDFVisualizationCII() {
|
||||
|
||||
File CIIinputFile = getResourceAsFile("cii/01.01a-INVOICE.cii.xml");
|
||||
|
||||
// the writing part
|
||||
|
||||
String expected = null;
|
||||
String result = null;
|
||||
try {
|
||||
ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer();
|
||||
zvi.toPDF(CIIinputFile.getAbsolutePath(), TARGET_PDF_CII);
|
||||
} catch (UnsupportedOperationException e) {
|
||||
fail("UnsupportedOperationException should not happen: " + e.getMessage());
|
||||
} catch (IllegalArgumentException e) {
|
||||
fail("IllegalArgumentException should not happen: " + e.getMessage());
|
||||
}
|
||||
|
||||
try {
|
||||
assertTrue(ByteArraySearcher.startsWith(Files.readAllBytes(Paths.get(TARGET_PDF_CII)), new byte[]{'%', 'P', 'D', 'F'}));
|
||||
} catch (IOException e) {
|
||||
fail("IOException should not occur");
|
||||
}
|
||||
}
|
||||
|
||||
public void testPDFVisualizationUBL() {
|
||||
|
||||
File UBLinputFile = getResourceAsFile("ubl/01.01a-INVOICE.ubl.xml");
|
||||
|
||||
// the writing part
|
||||
String sourceFilename = "factur-x.xml";
|
||||
|
||||
String expected = null;
|
||||
String result = null;
|
||||
try {
|
||||
ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer();
|
||||
zvi.toPDF(UBLinputFile.getAbsolutePath(), TARGET_PDF_UBL);
|
||||
} catch (UnsupportedOperationException e) {
|
||||
fail("UnsupportedOperationException should not happen: " + e.getMessage());
|
||||
} catch (IllegalArgumentException e) {
|
||||
fail("IllegalArgumentException should not happen: " + e.getMessage());
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
assertTrue(ByteArraySearcher.startsWith(Files.readAllBytes(Paths.get(TARGET_PDF_CII)), new byte[]{'%', 'P', 'D', 'F'}));
|
||||
} catch (IOException e) {
|
||||
fail("IOException should not occur");
|
||||
}
|
||||
}
|
||||
|
||||
public void testPDFVisualizationUBLCreditNote() {
|
||||
|
||||
File UBLinputFile = getResourceAsFile("ubl/UBL-CreditNote-2.1-Example.ubl.xml");
|
||||
|
||||
// the writing part
|
||||
String sourceFilename = "factur-x.xml";
|
||||
|
||||
String expected = null;
|
||||
String result = null;
|
||||
try {
|
||||
ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer();
|
||||
zvi.toPDF(UBLinputFile.getAbsolutePath(), TARGET_PDF_UBL);
|
||||
} catch (UnsupportedOperationException e) {
|
||||
fail("UnsupportedOperationException should not happen: " + e.getMessage());
|
||||
} catch (IllegalArgumentException e) {
|
||||
fail("IllegalArgumentException should not happen: " + e.getMessage());
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
assertTrue(ByteArraySearcher.startsWith(Files.readAllBytes(Paths.get(TARGET_PDF_CII)), new byte[]{'%', 'P', 'D', 'F'}));
|
||||
} catch (IOException e) {
|
||||
fail("IOException should not occur");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* *********************************************************************
|
||||
* <p>
|
||||
* Copyright 2019 Jochen Staerk
|
||||
* <p>
|
||||
* Use is subject to license terms.
|
||||
* <p>
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||
* use this file except in compliance with the License. You may obtain a copy
|
||||
* of the License at http://www.apache.org/licenses/LICENSE-2.0.
|
||||
* <p>
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* <p>
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* <p>
|
||||
* **********************************************************************
|
||||
*/
|
||||
package org.mustangproject.ZUGFeRD;
|
||||
|
||||
import org.junit.FixMethodOrder;
|
||||
import org.junit.runners.MethodSorters;
|
||||
import org.mustangproject.ZUGFeRD.ZUGFeRDVisualizer.Language;
|
||||
import org.mustangproject.util.ByteArraySearcher;
|
||||
|
||||
import javax.xml.transform.TransformerException;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
|
||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||
public class VisualizationTest extends ResourceCase {
|
||||
|
||||
final String TARGET_PDF_CII = "./target/testout-Visualization-cii.pdf";
|
||||
final String TARGET_PDF_UBL = "./target/testout-Visualization-cii.pdf";
|
||||
|
||||
public void testCIIVisualizationBasic() {
|
||||
this.runZUGFeRDVisualization("factur-x.xml", "factur-x-vis.fr.html", Language.FR);
|
||||
}
|
||||
|
||||
public void testCIIVisualizationExtended() {
|
||||
this.runZUGFeRDVisualization("factur-x-extended.xml", "factur-x-vis-extended.de.html", Language.DE);
|
||||
}
|
||||
|
||||
public void testUBLCreditNoteVisualizationBasic() {
|
||||
this.runZUGFeRDVisualization("ubl-creditnote.xml", "factur-x-vis-ubl-creditnote.en.html", Language.EN);
|
||||
}
|
||||
|
||||
public void testUBLVisualizationBasic() {
|
||||
this.runZUGFeRDVisualization("ubl/01.01a-INVOICE.ubl.xml", "factur-x-vis-ubl.en.html", Language.EN);
|
||||
}
|
||||
|
||||
private void runZUGFeRDVisualization(String inputFilename, String resultFileName, Language lang) {
|
||||
File CIIinputFile = getResourceAsFile(inputFilename);
|
||||
|
||||
String expected = null;
|
||||
String result = null;
|
||||
try {
|
||||
ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer();
|
||||
result = zvi.visualize(CIIinputFile.getAbsolutePath(), lang);
|
||||
Files.write(Paths.get("./target/testout-" + resultFileName), result.getBytes(StandardCharsets.UTF_8));
|
||||
|
||||
File expectedResult = getResourceAsFile(resultFileName);
|
||||
expected = new String(Files.readAllBytes(expectedResult.toPath()), StandardCharsets.UTF_8)
|
||||
;
|
||||
|
||||
} 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());
|
||||
}
|
||||
|
||||
|
||||
assertNotNull(result);
|
||||
/* remove file endings so that tests can also pass after checking
|
||||
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() {
|
||||
|
||||
File CIIinputFile = getResourceAsFile("cii/01.01a-INVOICE.cii.xml");
|
||||
|
||||
// the writing part
|
||||
|
||||
String expected = null;
|
||||
String result = null;
|
||||
try {
|
||||
ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer();
|
||||
zvi.toPDF(CIIinputFile.getAbsolutePath(), TARGET_PDF_CII);
|
||||
} catch (UnsupportedOperationException e) {
|
||||
fail("UnsupportedOperationException should not happen: " + e.getMessage());
|
||||
} catch (IllegalArgumentException e) {
|
||||
fail("IllegalArgumentException should not happen: " + e.getMessage());
|
||||
}
|
||||
|
||||
try {
|
||||
assertTrue(ByteArraySearcher.startsWith(Files.readAllBytes(Paths.get(TARGET_PDF_CII)), new byte[]{'%', 'P', 'D', 'F'}));
|
||||
} catch (IOException e) {
|
||||
fail("IOException should not occur");
|
||||
}
|
||||
}
|
||||
|
||||
public void testPDFVisualizationUBL() {
|
||||
|
||||
File UBLinputFile = getResourceAsFile("ubl/01.01a-INVOICE.ubl.xml");
|
||||
|
||||
// the writing part
|
||||
String sourceFilename = "factur-x.xml";
|
||||
|
||||
String expected = null;
|
||||
String result = null;
|
||||
try {
|
||||
ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer();
|
||||
zvi.toPDF(UBLinputFile.getAbsolutePath(), TARGET_PDF_UBL);
|
||||
} catch (UnsupportedOperationException e) {
|
||||
fail("UnsupportedOperationException should not happen: " + e.getMessage());
|
||||
} catch (IllegalArgumentException e) {
|
||||
fail("IllegalArgumentException should not happen: " + e.getMessage());
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
assertTrue(ByteArraySearcher.startsWith(Files.readAllBytes(Paths.get(TARGET_PDF_CII)), new byte[]{'%', 'P', 'D', 'F'}));
|
||||
} catch (IOException e) {
|
||||
fail("IOException should not occur");
|
||||
}
|
||||
}
|
||||
|
||||
public void testPDFVisualizationUBLCreditNote() {
|
||||
|
||||
File UBLinputFile = getResourceAsFile("ubl/UBL-CreditNote-2.1-Example.ubl.xml");
|
||||
|
||||
// the writing part
|
||||
String sourceFilename = "factur-x.xml";
|
||||
|
||||
String expected = null;
|
||||
String result = null;
|
||||
try {
|
||||
ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer();
|
||||
zvi.toPDF(UBLinputFile.getAbsolutePath(), TARGET_PDF_UBL);
|
||||
} catch (UnsupportedOperationException e) {
|
||||
fail("UnsupportedOperationException should not happen: " + e.getMessage());
|
||||
} catch (IllegalArgumentException e) {
|
||||
fail("IllegalArgumentException should not happen: " + e.getMessage());
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
assertTrue(ByteArraySearcher.startsWith(Files.readAllBytes(Paths.get(TARGET_PDF_CII)), new byte[]{'%', 'P', 'D', 'F'}));
|
||||
} catch (IOException e) {
|
||||
fail("IOException should not occur");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -136,11 +136,11 @@ public class XRTest extends TestCase {
|
||||
} catch (IOException e) {
|
||||
fail("IOException not expected");
|
||||
}
|
||||
List<FileAttachment> attachedFiles=zii.getFileAttachmentsXML();
|
||||
FileAttachment[] attachedFiles=readInvoice.getAdditionalReferencedDocuments();
|
||||
assertNotNull(attachedFiles);
|
||||
assertEquals(attachedFiles.size(), 1);
|
||||
assertEquals(attachedFiles.length, 1);
|
||||
|
||||
assertTrue(Arrays.equals(attachedFiles.get(0).getData(), b));
|
||||
assertTrue(Arrays.equals(attachedFiles[0].getData(), b));
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -261,7 +261,7 @@ public class ZF2PushTest extends TestCase {
|
||||
.setNumber(number)
|
||||
.addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(1.0)).addAllowance(new Allowance(new BigDecimal("0.1"))))
|
||||
.addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(1.0)).addAllowance(new Allowance().setPercent(new BigDecimal(50))))
|
||||
.addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(2.0)).addCharge(new Charge(new BigDecimal(1)).setReasonCode("AK")))
|
||||
.addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(2.0)).addCharge(new Charge(new BigDecimal(1)).setReasonCode("ABK")))
|
||||
.addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(1.0)).addCharge(new Charge(new BigDecimal(1))).addAllowance(new Allowance(new BigDecimal("1"))))
|
||||
);
|
||||
|
||||
@@ -542,7 +542,7 @@ public class ZF2PushTest extends TestCase {
|
||||
.addAllowance(new Allowance(new BigDecimal(0.2)).setReason("discount").setTaxPercent(new BigDecimal(16)))
|
||||
.addCashDiscount(new CashDiscount(new BigDecimal(2), 14))
|
||||
.setDeliveryDate(sdf.parse("2020-11-02")).setNumber(number).setVATDueDateTypeCode(EventTimeCodeTypeConstants.PAYMENT_DATE)
|
||||
.setInvoiceReferencedDocumentID("abc123")
|
||||
.setInvoiceReferencedDocumentID("abc123").addInvoiceReferencedDocument(new ReferencedDocument("abcd1234"))
|
||||
);
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
@@ -587,6 +587,8 @@ public class ZF2PushTest extends TestCase {
|
||||
Invoice i = zii.extractInvoice();
|
||||
|
||||
assertEquals("abc123", i.getInvoiceReferencedDocumentID());
|
||||
assertEquals(1, i.getInvoiceReferencedDocuments().size());
|
||||
assertEquals("abcd1234", i.getInvoiceReferencedDocuments().get(0).getIssuerAssignedID());
|
||||
assertEquals("4304171000002", i.getRecipient().getGlobalID());
|
||||
assertEquals("2001015001325", i.getZFItems()[0].getProduct().getGlobalID());
|
||||
assertEquals(orgID, i.getSender().getID());
|
||||
@@ -803,24 +805,5 @@ public class ZF2PushTest extends TestCase {
|
||||
match the read grand total */
|
||||
}
|
||||
}
|
||||
public void testRead() {
|
||||
|
||||
|
||||
|
||||
ZUGFeRDInvoiceImporter zii = new ZUGFeRDInvoiceImporter("\\Users\\jstaerk\\temp\\1424413_anonymized.xml");
|
||||
try {
|
||||
Invoice i = zii.extractInvoice();
|
||||
|
||||
TransactionCalculator tc=new TransactionCalculator(i);
|
||||
assertEquals(0,tc.getGrandTotal().compareTo(new BigDecimal("442.83")));
|
||||
|
||||
} catch (XPathExpressionException e) {
|
||||
fail("XPathExpressionException should not be raised");
|
||||
} catch (ParseException e) {
|
||||
fail("ParseException should not be raised");
|
||||
/* a parseException would also be fired if the calculated grand total does not
|
||||
match the read grand total */
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -76,6 +76,7 @@ public class ZF2ZInvoiceImporterTest extends ResourceCase {
|
||||
assertEquals("LTR", invoice.getZFItems()[2].getProduct().getUnit());
|
||||
assertEquals("7.00", invoice.getZFItems()[0].getProduct().getVATPercent().toString());
|
||||
assertEquals("RE-20170509/505", invoice.getNumber());
|
||||
assertEquals("Zahlbar ohne Abzug bis zum 30.05.2017", invoice.getPaymentTermDescription());
|
||||
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
||||
assertEquals("2017-05-09", sdf.format(invoice.getIssueDate()));
|
||||
@@ -127,7 +128,7 @@ public class ZF2ZInvoiceImporterTest extends ResourceCase {
|
||||
assertEquals(invoice.getZFItems()[0].getNotesWithSubjectCode().get(0).getContent(),"Something");
|
||||
assertEquals(invoice.getZFItems()[0].getNotesWithSubjectCode().size(),1);
|
||||
assertEquals("400", invoice.getZFItems()[1].getQuantity().toString());
|
||||
|
||||
assertEquals("Zahlbar ohne Abzug bis zum 30.05.2017", invoice.getPaymentTermDescription());
|
||||
assertEquals("AB321", invoice.getReferenceNumber());
|
||||
assertEquals("160", invoice.getZFItems()[0].getPrice().toString());
|
||||
assertEquals("Heiße Luft pro Liter", invoice.getZFItems()[2].getProduct().getName());
|
||||
@@ -465,4 +466,12 @@ public class ZF2ZInvoiceImporterTest extends ResourceCase {
|
||||
assertFalse(invoice.getZFItems()[0].getNotes() == null);
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
||||
309
library/src/test/resources/cii/02.03a-INVOICE_uncefact.xml
Normal file
309
library/src/test/resources/cii/02.03a-INVOICE_uncefact.xml
Normal file
File diff suppressed because one or more lines are too long
@@ -1,427 +1,430 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- English disclaimer below.-->
|
||||
<!--Nutzungsrechte
|
||||
ZUGFeRD Datenformat Version 2.3.0, 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
|
||||
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
|
||||
Technologien („ZUGFeRD Datenformat“).
|
||||
|
||||
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
|
||||
Lizenz für die Nutzung des urheberrechtlich geschützten ZUGFeRD-Datenformats zu fairen, sachgerechten und nicht
|
||||
diskriminierenden Bedingungen an.
|
||||
|
||||
Die Spezifikation des FeRD zur Implementierung des ZUGFeRD Datenformats ist in ihrer jeweils geltenden Fassung
|
||||
abrufbar unter www.ferd-net.de.
|
||||
|
||||
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
|
||||
geltenden und akzeptierten Fassung (www.ferd-net.de) ein.
|
||||
Die Lizenz beinhaltet ein unwiderrufliches Nutzungsrecht einschließlich des Rechts der Weiterentwicklung,
|
||||
Weiterbearbeitung und Verbindung mit anderen Produkten.
|
||||
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
|
||||
Anwendungen und Dienste.
|
||||
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
|
||||
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.
|
||||
Der Lizenznehmer ist berechtigt, seinen jeweiligen Konzerngesellschaften ein unbefristetes, weltweites, nicht übertragbares,
|
||||
unwiderrufliches Nutzungsrecht einschließlich des Rechts der Weiterentwicklung, Weiterbearbeitung und Verbindung mit
|
||||
anderen Produkten einzuräumen.
|
||||
|
||||
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
|
||||
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,
|
||||
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.-->
|
||||
|
||||
<!--Right of use
|
||||
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
|
||||
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
|
||||
technologies ("ZUGFeRD data format").
|
||||
|
||||
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
|
||||
License to use the copyrighted ZUGFeRD data format in a fair, appropriate and non
|
||||
discriminatory conditions.
|
||||
|
||||
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.
|
||||
|
||||
In detail, the grant of use includes
|
||||
=====================================
|
||||
|
||||
FeRD grants a license for the use of the copyrighted ZUGFeRD data format in the respective
|
||||
valid and accepted version (www.ferd-net.de).
|
||||
The license includes an irrevocable right of use including the right of further development,
|
||||
Further processing and connection with other products.
|
||||
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
|
||||
applications and services.
|
||||
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
|
||||
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 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
|
||||
other products.
|
||||
|
||||
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
|
||||
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,
|
||||
incidental, indirect, punitive or consequential damages, even if the possibility of
|
||||
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:ExchangedDocumentContext>
|
||||
<ram:TestIndicator>
|
||||
<udt:Indicator>true</udt:Indicator>
|
||||
</ram:TestIndicator>
|
||||
<ram:GuidelineSpecifiedDocumentContextParameter>
|
||||
<ram:ID>urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended</ram:ID>
|
||||
</ram:GuidelineSpecifiedDocumentContextParameter>
|
||||
</rsm:ExchangedDocumentContext>
|
||||
<rsm:ExchangedDocument>
|
||||
<ram:ID>KR87654321012</ram:ID>
|
||||
<ram:Name>KOSTENRECHNUNG</ram:Name>
|
||||
<ram:TypeCode>380</ram:TypeCode>
|
||||
<ram:IssueDateTime>
|
||||
<udt:DateTimeString format="102">20241115</udt:DateTimeString>
|
||||
</ram:IssueDateTime>
|
||||
<ram:IncludedNote>
|
||||
<ram:ContentCode>ST3</ram:ContentCode>
|
||||
<ram:Content>Es bestehen Rabatt- oder Bonusvereinbarungen.</ram:Content>
|
||||
<ram:SubjectCode>AAK</ram:SubjectCode>
|
||||
</ram:IncludedNote>
|
||||
<ram:IncludedNote>
|
||||
<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:SubjectCode>AAJ</ram:SubjectCode>
|
||||
</ram:IncludedNote>
|
||||
<ram:IncludedNote>
|
||||
<ram:Content>MUSTERLIEFERANT GMBH
|
||||
BAHNHOFSTRASSE 99
|
||||
99199 MUSTERHAUSEN
|
||||
Geschäftsführung:
|
||||
Max Mustermann
|
||||
USt-IdNr: DE123456789
|
||||
Telefon: +49 932 431 0
|
||||
www.musterlieferant.de
|
||||
HRB Nr. 372876
|
||||
Amtsgericht Musterstadt
|
||||
GLN 4304171000002
|
||||
</ram:Content>
|
||||
<ram:SubjectCode>REG</ram:SubjectCode>
|
||||
</ram:IncludedNote>
|
||||
</rsm:ExchangedDocument>
|
||||
<rsm:SupplyChainTradeTransaction>
|
||||
<ram:IncludedSupplyChainTradeLineItem>
|
||||
<ram:AssociatedDocumentLineDocument>
|
||||
<ram:LineID>1</ram:LineID>
|
||||
</ram:AssociatedDocumentLineDocument>
|
||||
<ram:SpecifiedTradeProduct>
|
||||
<ram:GlobalID schemeID="0088">4123456000014</ram:GlobalID>
|
||||
<ram:SellerAssignedID>WA997</ram:SellerAssignedID>
|
||||
<ram:Name>Wirkarbeit HT</ram:Name>
|
||||
<ram:ApplicableProductCharacteristic>
|
||||
<ram:Description>Zählpunkt</ram:Description>
|
||||
<ram:Value>DE0001346484600000000000000100038</ram:Value>
|
||||
</ram:ApplicableProductCharacteristic>
|
||||
</ram:SpecifiedTradeProduct>
|
||||
<ram:SpecifiedLineTradeAgreement>
|
||||
<ram:GrossPriceProductTradePrice>
|
||||
<ram:ChargeAmount>0.0520</ram:ChargeAmount>
|
||||
</ram:GrossPriceProductTradePrice>
|
||||
<ram:NetPriceProductTradePrice>
|
||||
<ram:ChargeAmount>0.0520</ram:ChargeAmount>
|
||||
</ram:NetPriceProductTradePrice>
|
||||
</ram:SpecifiedLineTradeAgreement>
|
||||
<ram:SpecifiedLineTradeDelivery>
|
||||
<ram:BilledQuantity unitCode="KWH">1000.0000</ram:BilledQuantity>
|
||||
</ram:SpecifiedLineTradeDelivery>
|
||||
<ram:SpecifiedLineTradeSettlement>
|
||||
<ram:ApplicableTradeTax>
|
||||
<ram:TypeCode>VAT</ram:TypeCode>
|
||||
<ram:CategoryCode>S</ram:CategoryCode>
|
||||
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
|
||||
</ram:ApplicableTradeTax>
|
||||
<ram:SpecifiedTradeSettlementLineMonetarySummation>
|
||||
<ram:LineTotalAmount>52.00</ram:LineTotalAmount>
|
||||
</ram:SpecifiedTradeSettlementLineMonetarySummation>
|
||||
</ram:SpecifiedLineTradeSettlement>
|
||||
</ram:IncludedSupplyChainTradeLineItem>
|
||||
<ram:IncludedSupplyChainTradeLineItem>
|
||||
<ram:AssociatedDocumentLineDocument>
|
||||
<ram:LineID>2</ram:LineID>
|
||||
</ram:AssociatedDocumentLineDocument>
|
||||
<ram:SpecifiedTradeProduct>
|
||||
<ram:GlobalID schemeID="0088">4123456000021</ram:GlobalID>
|
||||
<ram:SellerAssignedID>ÖST250</ram:SellerAssignedID>
|
||||
<ram:Name>Ökosteuer Lieferant</ram:Name>
|
||||
</ram:SpecifiedTradeProduct>
|
||||
<ram:SpecifiedLineTradeAgreement>
|
||||
<ram:GrossPriceProductTradePrice>
|
||||
<ram:ChargeAmount>0.0205</ram:ChargeAmount>
|
||||
</ram:GrossPriceProductTradePrice>
|
||||
<ram:NetPriceProductTradePrice>
|
||||
<ram:ChargeAmount>0.0205</ram:ChargeAmount>
|
||||
</ram:NetPriceProductTradePrice>
|
||||
</ram:SpecifiedLineTradeAgreement>
|
||||
<ram:SpecifiedLineTradeDelivery>
|
||||
<ram:BilledQuantity unitCode="KWH">1000.0000</ram:BilledQuantity>
|
||||
</ram:SpecifiedLineTradeDelivery>
|
||||
<ram:SpecifiedLineTradeSettlement>
|
||||
<ram:ApplicableTradeTax>
|
||||
<ram:TypeCode>VAT</ram:TypeCode>
|
||||
<ram:CategoryCode>S</ram:CategoryCode>
|
||||
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
|
||||
</ram:ApplicableTradeTax>
|
||||
<ram:SpecifiedTradeSettlementLineMonetarySummation>
|
||||
<ram:LineTotalAmount>20.50</ram:LineTotalAmount>
|
||||
</ram:SpecifiedTradeSettlementLineMonetarySummation>
|
||||
</ram:SpecifiedLineTradeSettlement>
|
||||
</ram:IncludedSupplyChainTradeLineItem>
|
||||
<ram:IncludedSupplyChainTradeLineItem>
|
||||
<ram:AssociatedDocumentLineDocument>
|
||||
<ram:LineID>3</ram:LineID>
|
||||
</ram:AssociatedDocumentLineDocument>
|
||||
<ram:SpecifiedTradeProduct>
|
||||
<ram:GlobalID schemeID="0088">4260331811362</ram:GlobalID>
|
||||
<ram:Name>Kommissionierer 1250032 D. Muster</ram:Name>
|
||||
<ram:Description>Besteller: Hr. Mayer, Personalnr. 4488</ram:Description>
|
||||
</ram:SpecifiedTradeProduct>
|
||||
<ram:SpecifiedLineTradeAgreement>
|
||||
<ram:GrossPriceProductTradePrice>
|
||||
<ram:ChargeAmount>15.0000</ram:ChargeAmount>
|
||||
<ram:AppliedTradeAllowanceCharge>
|
||||
<ram:ChargeIndicator>
|
||||
<udt:Indicator>false</udt:Indicator>
|
||||
</ram:ChargeIndicator>
|
||||
<ram:ActualAmount>4.50</ram:ActualAmount>
|
||||
<ram:Reason>Artikelrabatt 1</ram:Reason>
|
||||
</ram:AppliedTradeAllowanceCharge>
|
||||
</ram:GrossPriceProductTradePrice>
|
||||
<ram:NetPriceProductTradePrice>
|
||||
<ram:ChargeAmount>10.5000</ram:ChargeAmount>
|
||||
</ram:NetPriceProductTradePrice>
|
||||
</ram:SpecifiedLineTradeAgreement>
|
||||
<ram:SpecifiedLineTradeDelivery>
|
||||
<ram:BilledQuantity unitCode="HUR">27.5000</ram:BilledQuantity>
|
||||
</ram:SpecifiedLineTradeDelivery>
|
||||
<ram:SpecifiedLineTradeSettlement>
|
||||
<ram:ApplicableTradeTax>
|
||||
<ram:TypeCode>VAT</ram:TypeCode>
|
||||
<ram:CategoryCode>S</ram:CategoryCode>
|
||||
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
|
||||
</ram:ApplicableTradeTax>
|
||||
<ram:SpecifiedTradeSettlementLineMonetarySummation>
|
||||
<ram:LineTotalAmount>288.75</ram:LineTotalAmount>
|
||||
</ram:SpecifiedTradeSettlementLineMonetarySummation>
|
||||
</ram:SpecifiedLineTradeSettlement>
|
||||
</ram:IncludedSupplyChainTradeLineItem>
|
||||
<ram:IncludedSupplyChainTradeLineItem>
|
||||
<ram:AssociatedDocumentLineDocument>
|
||||
<ram:LineID>4</ram:LineID>
|
||||
</ram:AssociatedDocumentLineDocument>
|
||||
<ram:SpecifiedTradeProduct>
|
||||
<ram:GlobalID schemeID="0088">2001015001325</ram:GlobalID>
|
||||
<ram:SellerAssignedID>FB05</ram:SellerAssignedID>
|
||||
<ram:Name>FALTENBEUTEL 16x6x28 CM</ram:Name>
|
||||
</ram:SpecifiedTradeProduct>
|
||||
<ram:SpecifiedLineTradeAgreement>
|
||||
<ram:GrossPriceProductTradePrice>
|
||||
<ram:ChargeAmount>0.0105</ram:ChargeAmount>
|
||||
</ram:GrossPriceProductTradePrice>
|
||||
<ram:NetPriceProductTradePrice>
|
||||
<ram:ChargeAmount>0.0105</ram:ChargeAmount>
|
||||
</ram:NetPriceProductTradePrice>
|
||||
</ram:SpecifiedLineTradeAgreement>
|
||||
<ram:SpecifiedLineTradeDelivery>
|
||||
<ram:BilledQuantity unitCode="H87">3500.0000</ram:BilledQuantity>
|
||||
</ram:SpecifiedLineTradeDelivery>
|
||||
<ram:SpecifiedLineTradeSettlement>
|
||||
<ram:ApplicableTradeTax>
|
||||
<ram:TypeCode>VAT</ram:TypeCode>
|
||||
<ram:CategoryCode>S</ram:CategoryCode>
|
||||
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
|
||||
</ram:ApplicableTradeTax>
|
||||
<ram:SpecifiedTradeSettlementLineMonetarySummation>
|
||||
<ram:LineTotalAmount>36.75</ram:LineTotalAmount>
|
||||
</ram:SpecifiedTradeSettlementLineMonetarySummation>
|
||||
</ram:SpecifiedLineTradeSettlement>
|
||||
</ram:IncludedSupplyChainTradeLineItem>
|
||||
<ram:IncludedSupplyChainTradeLineItem>
|
||||
<ram:AssociatedDocumentLineDocument>
|
||||
<ram:LineID>5</ram:LineID>
|
||||
</ram:AssociatedDocumentLineDocument>
|
||||
<ram:SpecifiedTradeProduct>
|
||||
<ram:GlobalID schemeID="0088">4123456000038</ram:GlobalID>
|
||||
<ram:SellerAssignedID>KOP05</ram:SellerAssignedID>
|
||||
<ram:Name>Kopierpapier A4</ram:Name>
|
||||
<ram:Description>Zählerstand von-bis: 543210 - 544420</ram:Description>
|
||||
<ram:ApplicableProductCharacteristic>
|
||||
<ram:Description>Zähler-Nr.</ram:Description>
|
||||
<ram:Value>MG-X79318</ram:Value>
|
||||
</ram:ApplicableProductCharacteristic>
|
||||
</ram:SpecifiedTradeProduct>
|
||||
<ram:SpecifiedLineTradeAgreement>
|
||||
<ram:GrossPriceProductTradePrice>
|
||||
<ram:ChargeAmount>0.0100</ram:ChargeAmount>
|
||||
</ram:GrossPriceProductTradePrice>
|
||||
<ram:NetPriceProductTradePrice>
|
||||
<ram:ChargeAmount>0.0100</ram:ChargeAmount>
|
||||
</ram:NetPriceProductTradePrice>
|
||||
</ram:SpecifiedLineTradeAgreement>
|
||||
<ram:SpecifiedLineTradeDelivery>
|
||||
<ram:BilledQuantity unitCode="H87">1210.0000</ram:BilledQuantity>
|
||||
</ram:SpecifiedLineTradeDelivery>
|
||||
<ram:SpecifiedLineTradeSettlement>
|
||||
<ram:ApplicableTradeTax>
|
||||
<ram:TypeCode>VAT</ram:TypeCode>
|
||||
<ram:CategoryCode>S</ram:CategoryCode>
|
||||
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
|
||||
</ram:ApplicableTradeTax>
|
||||
<ram:SpecifiedTradeSettlementLineMonetarySummation>
|
||||
<ram:LineTotalAmount>12.10</ram:LineTotalAmount>
|
||||
</ram:SpecifiedTradeSettlementLineMonetarySummation>
|
||||
</ram:SpecifiedLineTradeSettlement>
|
||||
</ram:IncludedSupplyChainTradeLineItem>
|
||||
<ram:ApplicableHeaderTradeAgreement>
|
||||
<ram:SellerTradeParty>
|
||||
<ram:ID>549910</ram:ID>
|
||||
<ram:GlobalID schemeID="0088">4333741000005</ram:GlobalID>
|
||||
<ram:Name>MUSTERLIEFERANT GMBH</ram:Name>
|
||||
<ram:DefinedTradeContact>
|
||||
<ram:TelephoneUniversalCommunication>
|
||||
<ram:CompleteNumber>+49 932 431 500</ram:CompleteNumber>
|
||||
</ram:TelephoneUniversalCommunication>
|
||||
<ram:EmailURIUniversalCommunication>
|
||||
<ram:URIID>max.mustermann@musterlieferant.de</ram:URIID>
|
||||
</ram:EmailURIUniversalCommunication>
|
||||
</ram:DefinedTradeContact>
|
||||
<ram:PostalTradeAddress>
|
||||
<ram:PostcodeCode>99199</ram:PostcodeCode>
|
||||
<ram:LineOne>BAHNHOFSTRASSE 99</ram:LineOne>
|
||||
<ram:CityName>MUSTERHAUSEN</ram:CityName>
|
||||
<ram:CountryID>DE</ram:CountryID>
|
||||
</ram:PostalTradeAddress>
|
||||
<ram:SpecifiedTaxRegistration>
|
||||
<ram:ID schemeID="FC">201/113/40209</ram:ID>
|
||||
</ram:SpecifiedTaxRegistration>
|
||||
</ram:SellerTradeParty>
|
||||
<ram:BuyerTradeParty>
|
||||
<ram:ID>339420</ram:ID>
|
||||
<ram:GlobalID schemeID="0088">4304171000002</ram:GlobalID>
|
||||
<ram:Name>MUSTER-KUNDE GMBH</ram:Name>
|
||||
<ram:PostalTradeAddress>
|
||||
<ram:PostcodeCode>40235</ram:PostcodeCode>
|
||||
<ram:LineOne>KUNDENWEG 88</ram:LineOne>
|
||||
<ram:CityName>DUESSELDORF</ram:CityName>
|
||||
<ram:CountryID>DE</ram:CountryID>
|
||||
</ram:PostalTradeAddress>
|
||||
</ram:BuyerTradeParty>
|
||||
<ram:AdditionalReferencedDocument>
|
||||
<ram:IssuerAssignedID>A777123</ram:IssuerAssignedID>
|
||||
<ram:TypeCode>130</ram:TypeCode>
|
||||
</ram:AdditionalReferencedDocument>
|
||||
</ram:ApplicableHeaderTradeAgreement>
|
||||
<ram:ApplicableHeaderTradeDelivery>
|
||||
<ram:ShipToTradeParty>
|
||||
<ram:GlobalID schemeID="0088">4304171088093</ram:GlobalID>
|
||||
<ram:Name>MUSTER-MARKT</ram:Name>
|
||||
<ram:DefinedTradeContact>
|
||||
<ram:DepartmentName>7322</ram:DepartmentName>
|
||||
</ram:DefinedTradeContact>
|
||||
<ram:PostalTradeAddress>
|
||||
<ram:PostcodeCode>31157</ram:PostcodeCode>
|
||||
<ram:LineOne>HAUPTSTRASSE 44</ram:LineOne>
|
||||
<ram:CityName>SARSTEDT</ram:CityName>
|
||||
<ram:CountryID>DE</ram:CountryID>
|
||||
</ram:PostalTradeAddress>
|
||||
</ram:ShipToTradeParty>
|
||||
<ram:ActualDeliverySupplyChainEvent>
|
||||
<ram:OccurrenceDateTime>
|
||||
<udt:DateTimeString format="102">20241030</udt:DateTimeString>
|
||||
</ram:OccurrenceDateTime>
|
||||
</ram:ActualDeliverySupplyChainEvent>
|
||||
<ram:DeliveryNoteReferencedDocument>
|
||||
<ram:IssuerAssignedID>L87654321012</ram:IssuerAssignedID>
|
||||
</ram:DeliveryNoteReferencedDocument>
|
||||
</ram:ApplicableHeaderTradeDelivery>
|
||||
<ram:ApplicableHeaderTradeSettlement>
|
||||
<ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode>
|
||||
<ram:InvoiceeTradeParty>
|
||||
<ram:ID>339420</ram:ID>
|
||||
<ram:GlobalID schemeID="0088">4304171000002</ram:GlobalID>
|
||||
<ram:Name>MUSTER-KUNDE GMBH</ram:Name>
|
||||
<ram:PostalTradeAddress>
|
||||
<ram:PostcodeCode>40235</ram:PostcodeCode>
|
||||
<ram:LineOne>KUNDENWEG 88</ram:LineOne>
|
||||
<ram:CityName>DUESSELDORF</ram:CityName>
|
||||
<ram:CountryID>DE</ram:CountryID>
|
||||
</ram:PostalTradeAddress>
|
||||
</ram:InvoiceeTradeParty>
|
||||
<ram:ApplicableTradeTax>
|
||||
<ram:CalculatedAmount>76.67</ram:CalculatedAmount>
|
||||
<ram:TypeCode>VAT</ram:TypeCode>
|
||||
<ram:BasisAmount>403.55</ram:BasisAmount>
|
||||
<ram:LineTotalBasisAmount>410.10</ram:LineTotalBasisAmount>
|
||||
<ram:AllowanceChargeBasisAmount>-6.55</ram:AllowanceChargeBasisAmount>
|
||||
<ram:CategoryCode>S</ram:CategoryCode>
|
||||
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
|
||||
</ram:ApplicableTradeTax>
|
||||
<ram:SpecifiedTradeAllowanceCharge>
|
||||
<ram:ChargeIndicator>
|
||||
<udt:Indicator>false</udt:Indicator>
|
||||
</ram:ChargeIndicator>
|
||||
<ram:BasisAmount>410.10</ram:BasisAmount>
|
||||
<ram:ActualAmount>21.55</ram:ActualAmount>
|
||||
<ram:Reason>Sonderrabatt</ram:Reason>
|
||||
<ram:CategoryTradeTax>
|
||||
<ram:TypeCode>VAT</ram:TypeCode>
|
||||
<ram:CategoryCode>S</ram:CategoryCode>
|
||||
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
|
||||
</ram:CategoryTradeTax>
|
||||
</ram:SpecifiedTradeAllowanceCharge>
|
||||
<ram:SpecifiedLogisticsServiceCharge>
|
||||
<ram:Description>Transportkosten: Frachbetrag</ram:Description>
|
||||
<ram:AppliedAmount>15.00</ram:AppliedAmount>
|
||||
<ram:AppliedTradeTax>
|
||||
<ram:TypeCode>VAT</ram:TypeCode>
|
||||
<ram:CategoryCode>S</ram:CategoryCode>
|
||||
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
|
||||
</ram:AppliedTradeTax>
|
||||
</ram:SpecifiedLogisticsServiceCharge>
|
||||
<ram:SpecifiedTradePaymentTerms>
|
||||
<ram:Description>Skontovereinbarung: 2% bei Zahlung innerhalb 10 Tagen nach Rechnungsdatum</ram:Description>
|
||||
<ram:ApplicableTradePaymentDiscountTerms>
|
||||
<ram:BasisPeriodMeasure unitCode="DAY">10</ram:BasisPeriodMeasure>
|
||||
<ram:CalculationPercent>2.00</ram:CalculationPercent>
|
||||
</ram:ApplicableTradePaymentDiscountTerms>
|
||||
</ram:SpecifiedTradePaymentTerms>
|
||||
<ram:SpecifiedTradeSettlementHeaderMonetarySummation>
|
||||
<ram:LineTotalAmount>410.10</ram:LineTotalAmount>
|
||||
<ram:ChargeTotalAmount>15.00</ram:ChargeTotalAmount>
|
||||
<ram:AllowanceTotalAmount>21.55</ram:AllowanceTotalAmount>
|
||||
<ram:TaxBasisTotalAmount>403.55</ram:TaxBasisTotalAmount>
|
||||
<ram:TaxTotalAmount currencyID="EUR">76.67</ram:TaxTotalAmount>
|
||||
<ram:GrandTotalAmount>480.22</ram:GrandTotalAmount>
|
||||
<ram:TotalPrepaidAmount>0.00</ram:TotalPrepaidAmount>
|
||||
<ram:DuePayableAmount>480.22</ram:DuePayableAmount>
|
||||
</ram:SpecifiedTradeSettlementHeaderMonetarySummation>
|
||||
</ram:ApplicableHeaderTradeSettlement>
|
||||
</rsm:SupplyChainTradeTransaction>
|
||||
</rsm:CrossIndustryInvoice>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- English disclaimer below.-->
|
||||
<!--Nutzungsrechte
|
||||
ZUGFeRD Datenformat Version 2.3.0, 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
|
||||
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
|
||||
Technologien („ZUGFeRD Datenformat“).
|
||||
|
||||
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
|
||||
Lizenz für die Nutzung des urheberrechtlich geschützten ZUGFeRD-Datenformats zu fairen, sachgerechten und nicht
|
||||
diskriminierenden Bedingungen an.
|
||||
|
||||
Die Spezifikation des FeRD zur Implementierung des ZUGFeRD Datenformats ist in ihrer jeweils geltenden Fassung
|
||||
abrufbar unter www.ferd-net.de.
|
||||
|
||||
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
|
||||
geltenden und akzeptierten Fassung (www.ferd-net.de) ein.
|
||||
Die Lizenz beinhaltet ein unwiderrufliches Nutzungsrecht einschließlich des Rechts der Weiterentwicklung,
|
||||
Weiterbearbeitung und Verbindung mit anderen Produkten.
|
||||
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
|
||||
Anwendungen und Dienste.
|
||||
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
|
||||
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.
|
||||
Der Lizenznehmer ist berechtigt, seinen jeweiligen Konzerngesellschaften ein unbefristetes, weltweites, nicht übertragbares,
|
||||
unwiderrufliches Nutzungsrecht einschließlich des Rechts der Weiterentwicklung, Weiterbearbeitung und Verbindung mit
|
||||
anderen Produkten einzuräumen.
|
||||
|
||||
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
|
||||
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,
|
||||
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.-->
|
||||
|
||||
<!--Right of use
|
||||
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
|
||||
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
|
||||
technologies ("ZUGFeRD data format").
|
||||
|
||||
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
|
||||
License to use the copyrighted ZUGFeRD data format in a fair, appropriate and non
|
||||
discriminatory conditions.
|
||||
|
||||
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.
|
||||
|
||||
In detail, the grant of use includes
|
||||
=====================================
|
||||
|
||||
FeRD grants a license for the use of the copyrighted ZUGFeRD data format in the respective
|
||||
valid and accepted version (www.ferd-net.de).
|
||||
The license includes an irrevocable right of use including the right of further development,
|
||||
Further processing and connection with other products.
|
||||
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
|
||||
applications and services.
|
||||
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
|
||||
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 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
|
||||
other products.
|
||||
|
||||
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
|
||||
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,
|
||||
incidental, indirect, punitive or consequential damages, even if the possibility of
|
||||
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:ExchangedDocumentContext>
|
||||
<ram:TestIndicator>
|
||||
<udt:Indicator>true</udt:Indicator>
|
||||
</ram:TestIndicator>
|
||||
<ram:GuidelineSpecifiedDocumentContextParameter>
|
||||
<ram:ID>urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended</ram:ID>
|
||||
</ram:GuidelineSpecifiedDocumentContextParameter>
|
||||
</rsm:ExchangedDocumentContext>
|
||||
<rsm:ExchangedDocument>
|
||||
<ram:ID>KR87654321012</ram:ID>
|
||||
<ram:Name>KOSTENRECHNUNG</ram:Name>
|
||||
<ram:TypeCode>380</ram:TypeCode>
|
||||
<ram:IssueDateTime>
|
||||
<udt:DateTimeString format="102">20241115</udt:DateTimeString>
|
||||
</ram:IssueDateTime>
|
||||
<ram:IncludedNote>
|
||||
<ram:ContentCode>ST3</ram:ContentCode>
|
||||
<ram:Content>Es bestehen Rabatt- oder Bonusvereinbarungen.</ram:Content>
|
||||
<ram:SubjectCode>AAK</ram:SubjectCode>
|
||||
</ram:IncludedNote>
|
||||
<ram:IncludedNote>
|
||||
<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:SubjectCode>AAJ</ram:SubjectCode>
|
||||
</ram:IncludedNote>
|
||||
<ram:IncludedNote>
|
||||
<ram:Content>MUSTERLIEFERANT GMBH
|
||||
BAHNHOFSTRASSE 99
|
||||
99199 MUSTERHAUSEN
|
||||
Geschäftsführung:
|
||||
Max Mustermann
|
||||
USt-IdNr: DE123456789
|
||||
Telefon: +49 932 431 0
|
||||
www.musterlieferant.de
|
||||
HRB Nr. 372876
|
||||
Amtsgericht Musterstadt
|
||||
GLN 4304171000002
|
||||
</ram:Content>
|
||||
<ram:SubjectCode>REG</ram:SubjectCode>
|
||||
</ram:IncludedNote>
|
||||
</rsm:ExchangedDocument>
|
||||
<rsm:SupplyChainTradeTransaction>
|
||||
<ram:IncludedSupplyChainTradeLineItem>
|
||||
<ram:AssociatedDocumentLineDocument>
|
||||
<ram:LineID>1</ram:LineID>
|
||||
</ram:AssociatedDocumentLineDocument>
|
||||
<ram:SpecifiedTradeProduct>
|
||||
<ram:GlobalID schemeID="0088">4123456000014</ram:GlobalID>
|
||||
<ram:SellerAssignedID>WA997</ram:SellerAssignedID>
|
||||
<ram:Name>Wirkarbeit HT</ram:Name>
|
||||
<ram:ApplicableProductCharacteristic>
|
||||
<ram:Description>Zählpunkt</ram:Description>
|
||||
<ram:Value>DE0001346484600000000000000100038</ram:Value>
|
||||
</ram:ApplicableProductCharacteristic>
|
||||
</ram:SpecifiedTradeProduct>
|
||||
<ram:SpecifiedLineTradeAgreement>
|
||||
<ram:GrossPriceProductTradePrice>
|
||||
<ram:ChargeAmount>0.0520</ram:ChargeAmount>
|
||||
</ram:GrossPriceProductTradePrice>
|
||||
<ram:NetPriceProductTradePrice>
|
||||
<ram:ChargeAmount>0.0520</ram:ChargeAmount>
|
||||
</ram:NetPriceProductTradePrice>
|
||||
</ram:SpecifiedLineTradeAgreement>
|
||||
<ram:SpecifiedLineTradeDelivery>
|
||||
<ram:BilledQuantity unitCode="KWH">1000.0000</ram:BilledQuantity>
|
||||
</ram:SpecifiedLineTradeDelivery>
|
||||
<ram:SpecifiedLineTradeSettlement>
|
||||
<ram:ApplicableTradeTax>
|
||||
<ram:TypeCode>VAT</ram:TypeCode>
|
||||
<ram:CategoryCode>S</ram:CategoryCode>
|
||||
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
|
||||
</ram:ApplicableTradeTax>
|
||||
<ram:SpecifiedTradeSettlementLineMonetarySummation>
|
||||
<ram:LineTotalAmount>52.00</ram:LineTotalAmount>
|
||||
</ram:SpecifiedTradeSettlementLineMonetarySummation>
|
||||
</ram:SpecifiedLineTradeSettlement>
|
||||
</ram:IncludedSupplyChainTradeLineItem>
|
||||
<ram:IncludedSupplyChainTradeLineItem>
|
||||
<ram:AssociatedDocumentLineDocument>
|
||||
<ram:LineID>2</ram:LineID>
|
||||
</ram:AssociatedDocumentLineDocument>
|
||||
<ram:SpecifiedTradeProduct>
|
||||
<ram:GlobalID schemeID="0088">4123456000021</ram:GlobalID>
|
||||
<ram:SellerAssignedID>ÖST250</ram:SellerAssignedID>
|
||||
<ram:Name>Ökosteuer Lieferant</ram:Name>
|
||||
</ram:SpecifiedTradeProduct>
|
||||
<ram:SpecifiedLineTradeAgreement>
|
||||
<ram:GrossPriceProductTradePrice>
|
||||
<ram:ChargeAmount>0.0205</ram:ChargeAmount>
|
||||
</ram:GrossPriceProductTradePrice>
|
||||
<ram:NetPriceProductTradePrice>
|
||||
<ram:ChargeAmount>0.0205</ram:ChargeAmount>
|
||||
</ram:NetPriceProductTradePrice>
|
||||
</ram:SpecifiedLineTradeAgreement>
|
||||
<ram:SpecifiedLineTradeDelivery>
|
||||
<ram:BilledQuantity unitCode="KWH">1000.0000</ram:BilledQuantity>
|
||||
</ram:SpecifiedLineTradeDelivery>
|
||||
<ram:SpecifiedLineTradeSettlement>
|
||||
<ram:ApplicableTradeTax>
|
||||
<ram:TypeCode>VAT</ram:TypeCode>
|
||||
<ram:CategoryCode>S</ram:CategoryCode>
|
||||
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
|
||||
</ram:ApplicableTradeTax>
|
||||
<ram:SpecifiedTradeSettlementLineMonetarySummation>
|
||||
<ram:LineTotalAmount>20.50</ram:LineTotalAmount>
|
||||
</ram:SpecifiedTradeSettlementLineMonetarySummation>
|
||||
</ram:SpecifiedLineTradeSettlement>
|
||||
</ram:IncludedSupplyChainTradeLineItem>
|
||||
<ram:IncludedSupplyChainTradeLineItem>
|
||||
<ram:AssociatedDocumentLineDocument>
|
||||
<ram:LineID>3</ram:LineID>
|
||||
</ram:AssociatedDocumentLineDocument>
|
||||
<ram:SpecifiedTradeProduct>
|
||||
<ram:GlobalID schemeID="0088">4260331811362</ram:GlobalID>
|
||||
<ram:Name>Kommissionierer 1250032 D. Muster</ram:Name>
|
||||
<ram:Description>Besteller: Hr. Mayer, Personalnr. 4488</ram:Description>
|
||||
</ram:SpecifiedTradeProduct>
|
||||
<ram:SpecifiedLineTradeAgreement>
|
||||
<ram:GrossPriceProductTradePrice>
|
||||
<ram:ChargeAmount>15.0000</ram:ChargeAmount>
|
||||
<ram:AppliedTradeAllowanceCharge>
|
||||
<ram:ChargeIndicator>
|
||||
<udt:Indicator>false</udt:Indicator>
|
||||
</ram:ChargeIndicator>
|
||||
<ram:ActualAmount>4.50</ram:ActualAmount>
|
||||
<ram:Reason>Artikelrabatt 1</ram:Reason>
|
||||
</ram:AppliedTradeAllowanceCharge>
|
||||
</ram:GrossPriceProductTradePrice>
|
||||
<ram:NetPriceProductTradePrice>
|
||||
<ram:ChargeAmount>10.5000</ram:ChargeAmount>
|
||||
</ram:NetPriceProductTradePrice>
|
||||
</ram:SpecifiedLineTradeAgreement>
|
||||
<ram:SpecifiedLineTradeDelivery>
|
||||
<ram:BilledQuantity unitCode="HUR">27.5000</ram:BilledQuantity>
|
||||
</ram:SpecifiedLineTradeDelivery>
|
||||
<ram:SpecifiedLineTradeSettlement>
|
||||
<ram:ApplicableTradeTax>
|
||||
<ram:TypeCode>VAT</ram:TypeCode>
|
||||
<ram:CategoryCode>S</ram:CategoryCode>
|
||||
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
|
||||
</ram:ApplicableTradeTax>
|
||||
<ram:SpecifiedTradeSettlementLineMonetarySummation>
|
||||
<ram:LineTotalAmount>288.75</ram:LineTotalAmount>
|
||||
</ram:SpecifiedTradeSettlementLineMonetarySummation>
|
||||
</ram:SpecifiedLineTradeSettlement>
|
||||
</ram:IncludedSupplyChainTradeLineItem>
|
||||
<ram:IncludedSupplyChainTradeLineItem>
|
||||
<ram:AssociatedDocumentLineDocument>
|
||||
<ram:LineID>4</ram:LineID>
|
||||
</ram:AssociatedDocumentLineDocument>
|
||||
<ram:SpecifiedTradeProduct>
|
||||
<ram:GlobalID schemeID="0088">2001015001325</ram:GlobalID>
|
||||
<ram:SellerAssignedID>FB05</ram:SellerAssignedID>
|
||||
<ram:Name>FALTENBEUTEL 16x6x28 CM</ram:Name>
|
||||
</ram:SpecifiedTradeProduct>
|
||||
<ram:SpecifiedLineTradeAgreement>
|
||||
<ram:GrossPriceProductTradePrice>
|
||||
<ram:ChargeAmount>0.0105</ram:ChargeAmount>
|
||||
</ram:GrossPriceProductTradePrice>
|
||||
<ram:NetPriceProductTradePrice>
|
||||
<ram:ChargeAmount>0.0105</ram:ChargeAmount>
|
||||
</ram:NetPriceProductTradePrice>
|
||||
</ram:SpecifiedLineTradeAgreement>
|
||||
<ram:SpecifiedLineTradeDelivery>
|
||||
<ram:BilledQuantity unitCode="H87">3500.0000</ram:BilledQuantity>
|
||||
</ram:SpecifiedLineTradeDelivery>
|
||||
<ram:SpecifiedLineTradeSettlement>
|
||||
<ram:ApplicableTradeTax>
|
||||
<ram:TypeCode>VAT</ram:TypeCode>
|
||||
<ram:CategoryCode>S</ram:CategoryCode>
|
||||
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
|
||||
</ram:ApplicableTradeTax>
|
||||
<ram:SpecifiedTradeSettlementLineMonetarySummation>
|
||||
<ram:LineTotalAmount>36.75</ram:LineTotalAmount>
|
||||
</ram:SpecifiedTradeSettlementLineMonetarySummation>
|
||||
</ram:SpecifiedLineTradeSettlement>
|
||||
</ram:IncludedSupplyChainTradeLineItem>
|
||||
<ram:IncludedSupplyChainTradeLineItem>
|
||||
<ram:AssociatedDocumentLineDocument>
|
||||
<ram:LineID>5</ram:LineID>
|
||||
</ram:AssociatedDocumentLineDocument>
|
||||
<ram:SpecifiedTradeProduct>
|
||||
<ram:GlobalID schemeID="0088">4123456000038</ram:GlobalID>
|
||||
<ram:SellerAssignedID>KOP05</ram:SellerAssignedID>
|
||||
<ram:Name>Kopierpapier A4</ram:Name>
|
||||
<ram:Description>Zählerstand von-bis: 543210 - 544420</ram:Description>
|
||||
<ram:ApplicableProductCharacteristic>
|
||||
<ram:Description>Zähler-Nr.</ram:Description>
|
||||
<ram:Value>MG-X79318</ram:Value>
|
||||
</ram:ApplicableProductCharacteristic>
|
||||
</ram:SpecifiedTradeProduct>
|
||||
<ram:SpecifiedLineTradeAgreement>
|
||||
<ram:GrossPriceProductTradePrice>
|
||||
<ram:ChargeAmount>0.0100</ram:ChargeAmount>
|
||||
</ram:GrossPriceProductTradePrice>
|
||||
<ram:NetPriceProductTradePrice>
|
||||
<ram:ChargeAmount>0.0100</ram:ChargeAmount>
|
||||
</ram:NetPriceProductTradePrice>
|
||||
</ram:SpecifiedLineTradeAgreement>
|
||||
<ram:SpecifiedLineTradeDelivery>
|
||||
<ram:BilledQuantity unitCode="H87">1210.0000</ram:BilledQuantity>
|
||||
</ram:SpecifiedLineTradeDelivery>
|
||||
<ram:SpecifiedLineTradeSettlement>
|
||||
<ram:ApplicableTradeTax>
|
||||
<ram:TypeCode>VAT</ram:TypeCode>
|
||||
<ram:CategoryCode>S</ram:CategoryCode>
|
||||
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
|
||||
</ram:ApplicableTradeTax>
|
||||
<ram:SpecifiedTradeSettlementLineMonetarySummation>
|
||||
<ram:LineTotalAmount>12.10</ram:LineTotalAmount>
|
||||
</ram:SpecifiedTradeSettlementLineMonetarySummation>
|
||||
</ram:SpecifiedLineTradeSettlement>
|
||||
</ram:IncludedSupplyChainTradeLineItem>
|
||||
<ram:ApplicableHeaderTradeAgreement>
|
||||
<ram:SellerTradeParty>
|
||||
<ram:ID>549910</ram:ID>
|
||||
<ram:GlobalID schemeID="0088">4333741000005</ram:GlobalID>
|
||||
<ram:Name>MUSTERLIEFERANT GMBH</ram:Name>
|
||||
<ram:DefinedTradeContact>
|
||||
<ram:TelephoneUniversalCommunication>
|
||||
<ram:CompleteNumber>+49 932 431 500</ram:CompleteNumber>
|
||||
</ram:TelephoneUniversalCommunication>
|
||||
<ram:EmailURIUniversalCommunication>
|
||||
<ram:URIID>max.mustermann@musterlieferant.de</ram:URIID>
|
||||
</ram:EmailURIUniversalCommunication>
|
||||
</ram:DefinedTradeContact>
|
||||
<ram:PostalTradeAddress>
|
||||
<ram:PostcodeCode>99199</ram:PostcodeCode>
|
||||
<ram:LineOne>BAHNHOFSTRASSE 99</ram:LineOne>
|
||||
<ram:CityName>MUSTERHAUSEN</ram:CityName>
|
||||
<ram:CountryID>DE</ram:CountryID>
|
||||
</ram:PostalTradeAddress>
|
||||
<ram:SpecifiedTaxRegistration>
|
||||
<ram:ID schemeID="FC">201/113/40209</ram:ID>
|
||||
</ram:SpecifiedTaxRegistration>
|
||||
</ram:SellerTradeParty>
|
||||
<ram:BuyerTradeParty>
|
||||
<ram:ID>339420</ram:ID>
|
||||
<ram:GlobalID schemeID="0088">4304171000002</ram:GlobalID>
|
||||
<ram:Name>MUSTER-KUNDE GMBH</ram:Name>
|
||||
<ram:PostalTradeAddress>
|
||||
<ram:PostcodeCode>40235</ram:PostcodeCode>
|
||||
<ram:LineOne>KUNDENWEG 88</ram:LineOne>
|
||||
<ram:CityName>DUESSELDORF</ram:CityName>
|
||||
<ram:CountryID>DE</ram:CountryID>
|
||||
</ram:PostalTradeAddress>
|
||||
</ram:BuyerTradeParty>
|
||||
<ram:AdditionalReferencedDocument>
|
||||
<ram:IssuerAssignedID>A777123</ram:IssuerAssignedID>
|
||||
<ram:TypeCode>130</ram:TypeCode>
|
||||
</ram:AdditionalReferencedDocument>
|
||||
</ram:ApplicableHeaderTradeAgreement>
|
||||
<ram:ApplicableHeaderTradeDelivery>
|
||||
<ram:ShipToTradeParty>
|
||||
<ram:GlobalID schemeID="0088">4304171088093</ram:GlobalID>
|
||||
<ram:Name>MUSTER-MARKT</ram:Name>
|
||||
<ram:DefinedTradeContact>
|
||||
<ram:DepartmentName>7322</ram:DepartmentName>
|
||||
</ram:DefinedTradeContact>
|
||||
<ram:PostalTradeAddress>
|
||||
<ram:PostcodeCode>31157</ram:PostcodeCode>
|
||||
<ram:LineOne>HAUPTSTRASSE 44</ram:LineOne>
|
||||
<ram:CityName>SARSTEDT</ram:CityName>
|
||||
<ram:CountryID>DE</ram:CountryID>
|
||||
</ram:PostalTradeAddress>
|
||||
</ram:ShipToTradeParty>
|
||||
<ram:ActualDeliverySupplyChainEvent>
|
||||
<ram:OccurrenceDateTime>
|
||||
<udt:DateTimeString format="102">20241030</udt:DateTimeString>
|
||||
</ram:OccurrenceDateTime>
|
||||
</ram:ActualDeliverySupplyChainEvent>
|
||||
<ram:DeliveryNoteReferencedDocument>
|
||||
<ram:IssuerAssignedID>L87654321012</ram:IssuerAssignedID>
|
||||
<ram:FormattedIssueDateTime>
|
||||
<qdt:DateTimeString format="102">20241031</qdt:DateTimeString>
|
||||
</ram:FormattedIssueDateTime>
|
||||
</ram:DeliveryNoteReferencedDocument>
|
||||
</ram:ApplicableHeaderTradeDelivery>
|
||||
<ram:ApplicableHeaderTradeSettlement>
|
||||
<ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode>
|
||||
<ram:InvoiceeTradeParty>
|
||||
<ram:ID>339420</ram:ID>
|
||||
<ram:GlobalID schemeID="0088">4304171000002</ram:GlobalID>
|
||||
<ram:Name>MUSTER-KUNDE GMBH</ram:Name>
|
||||
<ram:PostalTradeAddress>
|
||||
<ram:PostcodeCode>40235</ram:PostcodeCode>
|
||||
<ram:LineOne>KUNDENWEG 88</ram:LineOne>
|
||||
<ram:CityName>DUESSELDORF</ram:CityName>
|
||||
<ram:CountryID>DE</ram:CountryID>
|
||||
</ram:PostalTradeAddress>
|
||||
</ram:InvoiceeTradeParty>
|
||||
<ram:ApplicableTradeTax>
|
||||
<ram:CalculatedAmount>76.67</ram:CalculatedAmount>
|
||||
<ram:TypeCode>VAT</ram:TypeCode>
|
||||
<ram:BasisAmount>403.55</ram:BasisAmount>
|
||||
<ram:LineTotalBasisAmount>410.10</ram:LineTotalBasisAmount>
|
||||
<ram:AllowanceChargeBasisAmount>-6.55</ram:AllowanceChargeBasisAmount>
|
||||
<ram:CategoryCode>S</ram:CategoryCode>
|
||||
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
|
||||
</ram:ApplicableTradeTax>
|
||||
<ram:SpecifiedTradeAllowanceCharge>
|
||||
<ram:ChargeIndicator>
|
||||
<udt:Indicator>false</udt:Indicator>
|
||||
</ram:ChargeIndicator>
|
||||
<ram:BasisAmount>410.10</ram:BasisAmount>
|
||||
<ram:ActualAmount>21.55</ram:ActualAmount>
|
||||
<ram:Reason>Sonderrabatt</ram:Reason>
|
||||
<ram:CategoryTradeTax>
|
||||
<ram:TypeCode>VAT</ram:TypeCode>
|
||||
<ram:CategoryCode>S</ram:CategoryCode>
|
||||
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
|
||||
</ram:CategoryTradeTax>
|
||||
</ram:SpecifiedTradeAllowanceCharge>
|
||||
<ram:SpecifiedLogisticsServiceCharge>
|
||||
<ram:Description>Transportkosten: Frachbetrag</ram:Description>
|
||||
<ram:AppliedAmount>15.00</ram:AppliedAmount>
|
||||
<ram:AppliedTradeTax>
|
||||
<ram:TypeCode>VAT</ram:TypeCode>
|
||||
<ram:CategoryCode>S</ram:CategoryCode>
|
||||
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
|
||||
</ram:AppliedTradeTax>
|
||||
</ram:SpecifiedLogisticsServiceCharge>
|
||||
<ram:SpecifiedTradePaymentTerms>
|
||||
<ram:Description>Skontovereinbarung: 2% bei Zahlung innerhalb 10 Tagen nach Rechnungsdatum</ram:Description>
|
||||
<ram:ApplicableTradePaymentDiscountTerms>
|
||||
<ram:BasisPeriodMeasure unitCode="DAY">10</ram:BasisPeriodMeasure>
|
||||
<ram:CalculationPercent>2.00</ram:CalculationPercent>
|
||||
</ram:ApplicableTradePaymentDiscountTerms>
|
||||
</ram:SpecifiedTradePaymentTerms>
|
||||
<ram:SpecifiedTradeSettlementHeaderMonetarySummation>
|
||||
<ram:LineTotalAmount>410.10</ram:LineTotalAmount>
|
||||
<ram:ChargeTotalAmount>15.00</ram:ChargeTotalAmount>
|
||||
<ram:AllowanceTotalAmount>21.55</ram:AllowanceTotalAmount>
|
||||
<ram:TaxBasisTotalAmount>403.55</ram:TaxBasisTotalAmount>
|
||||
<ram:TaxTotalAmount currencyID="EUR">76.67</ram:TaxTotalAmount>
|
||||
<ram:GrandTotalAmount>480.22</ram:GrandTotalAmount>
|
||||
<ram:TotalPrepaidAmount>0.00</ram:TotalPrepaidAmount>
|
||||
<ram:DuePayableAmount>480.22</ram:DuePayableAmount>
|
||||
</ram:SpecifiedTradeSettlementHeaderMonetarySummation>
|
||||
</ram:ApplicableHeaderTradeSettlement>
|
||||
</rsm:SupplyChainTradeTransaction>
|
||||
</rsm:CrossIndustryInvoice>
|
||||
|
||||
@@ -1085,7 +1085,6 @@
|
||||
</div>
|
||||
<div class="boxabstand"></div>
|
||||
</div>
|
||||
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig"></div>
|
||||
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig">
|
||||
<div class="boxzeile">
|
||||
<div id="uebersichtVersandkosten" class="box">
|
||||
@@ -2248,6 +2247,10 @@
|
||||
<div class="boxdaten legende">Kennung der Versandanzeige:</div>
|
||||
<div id="BT-16" title="BT-16" class="boxdaten wert"></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="boxdaten legende">Prozesskennung:</div>
|
||||
<div id="BT-23" title="BT-23" class="boxdaten wert"></div>
|
||||
|
||||
@@ -1359,7 +1359,6 @@
|
||||
</div>
|
||||
<div class="boxabstand"></div>
|
||||
</div>
|
||||
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig"></div>
|
||||
<div class="boxtabelle boxabstandtop boxtabelleZweispaltig first">
|
||||
<div class="boxzeile">
|
||||
<div id="uebersichtZahlungsinformationen" class="box subBox">
|
||||
@@ -1556,7 +1555,7 @@
|
||||
<div class="boxzeile">
|
||||
<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:
|
||||
3MB. Screen 1440x900</div>
|
||||
3MB. Screen 1440x900</div>
|
||||
</div>
|
||||
<div class="boxzeile">
|
||||
<div class="boxdaten legende ">Part number:</div>
|
||||
@@ -2355,6 +2354,10 @@
|
||||
<div class="boxdaten legende">Dispatch note ID:</div>
|
||||
<div id="BT-16" title="BT-16" class="boxdaten wert"></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="boxdaten legende">Process ID:</div>
|
||||
<div id="BT-23" title="BT-23" class="boxdaten wert"></div>
|
||||
|
||||
@@ -1219,9 +1219,6 @@
|
||||
</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="boxzeile">
|
||||
<div id="uebersichtZahlungsinformationen" class="box subBox">
|
||||
@@ -1755,6 +1752,10 @@
|
||||
<div class="boxdaten legende">Dispatch note ID:</div>
|
||||
<div id="BT-16" title="BT-16" class="boxdaten wert"></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="boxdaten legende">Process ID:</div>
|
||||
<div id="BT-23" title="BT-23" class="boxdaten wert"></div>
|
||||
|
||||
@@ -1250,9 +1250,6 @@
|
||||
</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="boxzeile">
|
||||
<div id="uebersichtZahlungsinformationen" class="box subBox">
|
||||
@@ -1927,6 +1924,10 @@
|
||||
<div class="boxdaten legende">Identifiant du bordereau d'expédition:</div>
|
||||
<div id="BT-16" title="BT-16" class="boxdaten wert"></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="boxdaten legende">Identifiant processus:</div>
|
||||
<div id="BT-23" title="BT-23" class="boxdaten wert"></div>
|
||||
|
||||
Reference in New Issue
Block a user