This commit is contained in:
Kemal Taskin
2025-01-06 15:00:22 +01:00
49 changed files with 5540 additions and 4562 deletions

View File

@@ -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);
}
}

View File

@@ -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()) {

View File

@@ -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;

View File

@@ -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")));
}
}

View File

@@ -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

View File

@@ -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();
}

View File

@@ -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>"

View File

@@ -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(" "));
}
/***

View File

@@ -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));
}
}
}

View File

@@ -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"

View File

@@ -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 {

View File

@@ -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<>();

View File

@@ -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);
}
}
}

View File

@@ -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));
}
}

View File

@@ -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());
}

Binary file not shown.

Binary file not shown.

View File

@@ -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

View 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="&#34;Angaben zum geprüften Dokument&#34;"/>
<xsl:with-param name="color"
select="&#34;black&#34;"/>
</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="&#34;black&#34;"/>
</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>

View File

@@ -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>

View File

@@ -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="'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="'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>

View File

@@ -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>

View File

@@ -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 '"/>
<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>

View File

@@ -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>