diff --git a/Mustang-CLI/pom.xml b/Mustang-CLI/pom.xml index d5b924e99..655b351bf 100644 --- a/Mustang-CLI/pom.xml +++ b/Mustang-CLI/pom.xml @@ -1,159 +1,137 @@ - - + + + 4.0.0 org.mustangproject core 2.16.2-SNAPSHOT - 4.0.0 - org.mustangproject Mustang-CLI - e-invoices commandline tool, allowing to create(embed), split and validate Factur-X/ZUGFeRD files. Validation - should also work for XRechnung/CII. - jar - 2.16.2-SNAPSHOT + e-invoices commandline tool, allowing to create(embed), split and validate Factur-X/ZUGFeRD files. Validation should also work for XRechnung/CII. + + + Apache License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + A business-friendly OSS license + + + + + Jochen Stärk + jstaerk@usegroup.de + + architect + developer + + + - UTF-8 - 11 - 11 - 11 + false - org.mustangproject + ${project.groupId} + library + ${project.version} + + + ${project.groupId} validator - 2.16.2-SNAPSHOT + ${project.version} - - - commons-cli - commons-cli - 1.8.0 + + --> ch.qos.logback logback-core - 1.5.16 - + commons-cli + commons-cli + + + commons-io + commons-io + + + org.assertj + assertj-core + + org.codehaus.janino janino - 3.1.7 - - org.slf4j - slf4j-simple - 2.0.12 - - - - org.junit.jupiter - junit-jupiter-api - 5.10.2 - test + org.slf4j + slf4j-api - org.junit.vintage - junit-vintage-engine - 5.10.2 - test + org.slf4j + slf4j-simple - org.xmlunit - xmlunit-core - 2.10.0 + xmlunit-assertj - org.xmlunit - xmlunit-assertj - 2.10.0 + xml-apis + xml-apis - - - + - jakarta.xml.bind - jakarta.xml.bind-api - 4.0.2 + org.junit.jupiter + junit-jupiter-api + test - - - - - - - org.apache.maven.plugins - maven-release-plugin - 2.5.3 - - - org.apache.maven.plugins - maven-surefire-plugin - - alphabetical - + maven-compiler-plugin - org.apache.maven.plugins - maven-jar-plugin - 3.4.2 + maven-dependency-plugin - - - true - true - - - + + + ch.qos.logback:logback-core + org.codehaus.janino:janino + org.slf4j:slf4j-simple + org.apache.maven.plugins - maven-compiler-plugin - 2.3.2 + maven-jar-plugin - true - org.mustangproject.commandline.main + true + true - - jar-with-dependencies - - - - 11 - 11 org.apache.maven.plugins maven-shade-plugin - 3.5.3 - org.mustangproject.commandline.Main + ${project.groupId}.commandline.Main false @@ -196,18 +174,20 @@ - + + + org.apache.maven.plugins + maven-surefire-plugin + - + release-sign-artifacts @@ -220,43 +200,9 @@ org.apache.maven.plugins maven-toolchains-plugin - 3.1.0 - - - - toolchain - - - - - - - 11 - adopt - - - - - - Apache License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - repo - A business-friendly OSS license - - - - - Jochen Stärk - jstaerk@usegroup.de - - architect - developer - - - diff --git a/Mustang-CLI/src/main/java/org/mustangproject/commandline/Main.java b/Mustang-CLI/src/main/java/org/mustangproject/commandline/Main.java index 275da4454..d29e03737 100755 --- a/Mustang-CLI/src/main/java/org/mustangproject/commandline/Main.java +++ b/Mustang-CLI/src/main/java/org/mustangproject/commandline/Main.java @@ -44,63 +44,64 @@ private static void printUsage() { private static String getUsage() { return "Usage: --action metrics|combine|extract|a3only|ubl|validate|validateExpectInvalid|validateExpectValid|visualize [-d,--directory] [-l,--listfromstdin] [-i,--ignore fileextension, PDF/A errors] [--disable-file-logging] | [-h,--help] \r\n" - + " --action license display open source license and notice\n" - + " --action metrics\n" - + " -d, --directory count ZUGFeRD files in directory to be scanned\n" - + " If it is a directory, it will recurse.\n" - + " -l, --listfromstdin count ZUGFeRD files from a list of linefeed separated files on runtime.\n" - + " It will start once a blank line has been entered.\n" + "\n" - + " Additional parameter for both count operations\n" - + " [-i, --ignorefileextension] Check for all files (*.*) instead of PDF files only (*.pdf) in metrics, ignore PDF/A input file errors in combine\n" - + " [--disable-file-logging] disable logging to file.\n" - + " --action extract extract Factur-X PDF to XML file\n" - + " Additional parameters (optional - user will be prompted if not defined)\n" - + " [--source ]: set input PDF file\n" - + " [--out ]: set output XML file\n" - + " --action a3only upgrade from PDF/A1 to A3 only (no ZUGFeRD data attached)\n" - + " Additional parameters (optional - user will be prompted if not defined)\n" - + " [--source ]: set input PDF file\n" - + " [--out ]: set output PDF file\n" - + " --action combine combine XML and PDF file to Factur-X PDF file\n" - + " Additional parameters (optional - user will be prompted if not defined)\n" - + " [--source ]: set input PDF file\n" - + " [--source-xml ]: set input XML file\n" - + " [--out ]: set output PDF file\n" - + " [--format ]: set Factur-X, ZUGFeRD, Order-X or Cross Industry Despatch Advice\n" - + " [--version <1|2>]: set ZUGFeRD version\n" - + " [--profile <...>]: set ZUGFeRD profile\n" - + " For ZUGFeRD v1 or Order-X: ASIC, OMFORT or EXENDED\n" - + " For ZUGFeRD v2: INIMUM, BASIC L, ASIC, IUS, N16931, Rechnung, EXENDED\n" - + " [--attachments ]: list of file attachments (passing a single empty file name prevents prompting)\n" - + " [--no-additional-attachments]: prevent prompting for attachments\n" - + " --action ubl convert UN/CEFACT 2016b CII XML to UBL XML\n" - + " [--source ]: set input XML file\n" - + " [--out ]: set output XML file\n" - + " --action upgrade upgrade ZUGFeRD XML to ZUGFeRD 2 XML\n" - + " Additional parameters (optional - user will be prompted if not defined)\n" - + " [--source ]: set input XML ZUGFeRD 1 file\n" - + " [--out ]: set output XML ZUGFeRD 2 file\n" - + " --action validate validate XML or PDF file \n" - + " [--no-notices]: refrain from reporting notices\n" - + " [--logAppend ]: text to be added to log line\n" - + " Additional parameters (optional - user will be prompted if not defined)\n" - + " [--source ]: input PDF or XML file\n" - + " [--log-as-pdf]: save log output as pdf\n" - + " --action validateExpectInvalid validate directory expecting negative results \n" - + " [--no-notices]: refrain from reporting notices\n" - + " Additional parameters (optional - user will be prompted if not defined)\n" - + " -d, --directory to check recursively\n" - + " --action validateExpectValid validate directory expecting positive results \n" - + " [--no-notices]: refrain from reporting notices\n" - + " Additional parameters (optional - user will be prompted if not defined)\n" - + " -d, --directory to check recursively \n" - + " --action visualize convert XML to HTML \n" - + " [--language ]: set output lang (en, fr or de)\n" - + " [--source ]: set input XML file\n" - + " [--out ]: set output HTML file\n" - + " --action pdf convert XML to PDF \n" - + " [--source ]: set input XML file\n" - + " [--out ]: set output PDF file\n" + + " --action license display open source license and notice\n" + + " --action metrics\n" + + " -d, --directory count ZUGFeRD files in directory to be scanned\n" + + " If it is a directory, it will recurse.\n" + + " -l, --listfromstdin count ZUGFeRD files from a list of linefeed separated files on runtime.\n" + + " It will start once a blank line has been entered.\n" + "\n" + + " Additional parameter for both count operations\n" + + " [-i, --ignorefileextension] Check for all files (*.*) instead of PDF files only (*.pdf) in metrics, ignore PDF/A input file errors in combine\n" + + " [--disable-file-logging] disable logging to file.\n" + + " --action extract extract Factur-X PDF to XML file\n" + + " Additional parameters (optional - user will be prompted if not defined)\n" + + " [--source ]: set input PDF file\n" + + " [--out ]: set output XML file\n" + + " --action a3only upgrade from PDF/A1 to A3 only (no ZUGFeRD data attached)\n" + + " Additional parameters (optional - user will be prompted if not defined)\n" + + " [--source ]: set input PDF file\n" + + " [--out ]: set output PDF file\n" + + " --action combine combine XML and PDF file to Factur-X PDF file\n" + + " Additional parameters (optional - user will be prompted if not defined)\n" + + " [--source ]: set input PDF file\n" + + " [--source-xml ]: set input XML file\n" + + " [--out ]: set output PDF file\n" + + " [--format ]: set Factur-X, ZUGFeRD, Order-X or Cross Industry Despatch Advice\n" + + " [--version <1|2>]: set ZUGFeRD version\n" + + " [--profile <...>]: set ZUGFeRD profile\n" + + " For ZUGFeRD v1 or Order-X: ASIC, OMFORT or EXENDED\n" + + " For ZUGFeRD v2: INIMUM, BASIC L, ASIC, IUS, N16931, Rechnung, EXENDED\n" + + " [--attachments ]: list of file attachments (passing a single empty file name prevents prompting)\n" + + " [--no-additional-attachments]: prevent prompting for attachments\n" + + " --action ubl convert UN/CEFACT 2016b CII XML to UBL XML\n" + + " [--source ]: set input XML file\n" + + " [--out ]: set output XML file\n" + + " --action upgrade upgrade ZUGFeRD XML to ZUGFeRD 2 XML\n" + + " Additional parameters (optional - user will be prompted if not defined)\n" + + " [--source ]: set input XML ZUGFeRD 1 file\n" + + " [--out ]: set output XML ZUGFeRD 2 file\n" + + " --action validate validate XML or PDF file \n" + + " [--no-notices]: refrain from reporting notices\n" + + " [--logAppend ]: text to be added to log line\n" + + " Additional parameters (optional - user will be prompted if not defined)\n" + + " [--source ]: input PDF or XML file\n" + + " [--log-as-pdf]: save log output as pdf\n" + + " --action validateExpectInvalid validate directory expecting negative results \n" + + " [--no-notices]: refrain from reporting notices\n" + + " Additional parameters (optional - user will be prompted if not defined)\n" + + " -d, --directory to check recursively\n" + + " --action validateExpectValid validate directory expecting positive results \n" + + " [--no-notices]: refrain from reporting notices\n" + + " Additional parameters (optional - user will be prompted if not defined)\n" + + " -d, --directory to check recursively \n" + + " --action visualize convert XML to HTML \n" + + " [--language ]: set output lang (en, fr or de)\n" + + " [--source ]: set input XML file\n" + + " [--out ]: set output HTML file\n" + + " --action pdf convert XML to PDF \n" + + " [--language ]: set output lang (en, fr or de)\n" + + " [--source ]: set input XML file\n" + + " [--out ]: set output PDF file\n" ; } @@ -111,14 +112,14 @@ private static void printHelp() { } /** - * Asks the user (repeatedly, if neccessary) on the command line for a String + * Asks the user (repeatedly, if necessary) on the command line for a String * (offering a defaultValue) conforming to a Regex pattern * * @param prompt the question to be asked to the user * @param defaultValue the default return value if user hits enter * @param pattern a regex of acceptable values * @return the user answer conforming to pattern - * @throws Exception if pattern not compielable or IOexception on input + * @throws Exception if pattern not compilable or IOException on input */ protected static String getStringFromUser(String prompt, String defaultValue, String pattern) throws Exception { String input = ""; @@ -431,7 +432,7 @@ public static void main(String[] args) { performUBL(sourceName, outName); optionsRecognized = true; } else if ((action != null) && (action.equals("validate"))) { - optionsRecognized = performValidate(sourceName, noNotices, cmd.getOptionValue("logAppend"), LogAsPDF); + optionsRecognized = performValidate(sourceName, lang, noNotices, cmd.getOptionValue("logAppend"), LogAsPDF); } else if ((action != null) && (action.equals("validateExpectValid"))) { optionsRecognized = performValidateExpect(true, directoryName); } else if ((action != null) && (action.equals("validateExpectInvalid"))) { @@ -458,7 +459,7 @@ public static void main(String[] args) { } - private static boolean performValidate(String sourceName, boolean noNotices, String logAppend, boolean createLogAsPDF) { + private static boolean performValidate(String sourceName, String lang, boolean noNotices, String logAppend, boolean createLogAsPDF) { boolean optionsRecognized; if (sourceName == null) { sourceName = getFilenameFromUser("Source PDF or XML", "invoice.pdf", "pdf|xml", true, false); @@ -474,11 +475,11 @@ private static boolean performValidate(String sourceName, boolean noNotices, Str String validationResultXML = zfv.validate(sourceName); System.out.println(validationResultXML); - if( createLogAsPDF) { + if (createLogAsPDF) { ValidationLogVisualizer vlvi = new ValidationLogVisualizer(); String fileBasename = FilenameUtils.getBaseName(sourceName); - vlvi.toPDF(validationResultXML, fileBasename + "_result.pdf"); + vlvi.toPDF(validationResultXML, fileBasename + "_result.pdf", getLanguage(lang)); } optionsRecognized = !zfv.hasOptionsError(); if (!zfv.wasCompletelyValid()) { @@ -533,9 +534,9 @@ private static void performConvert(String pdfName, String outName) throws IOExce // All params are good! continue... try (ZUGFeRDExporterFromA1 ze = new ZUGFeRDExporterFromA1()) { - ze.convertOnly().load(pdfName); - ze.export(outName); - System.out.println("Written to " + outName); + ze.convertOnly().load(pdfName); + ze.export(outName); + System.out.println("Written to " + outName); } } @@ -609,8 +610,7 @@ private static void performCombine(String pdfName, String xmlName, String outNam } } } else { - for (int i = 0; i < attachmentFilenames.length; i++) { - String attachmentFilename = attachmentFilenames[i]; + for (String attachmentFilename : attachmentFilenames) { if (!attachmentFilename.isEmpty()) { byte[] attachmentContents = Files.readAllBytes(Paths.get(attachmentFilename)); String attachmentMime = Files.probeContentType(Paths.get(attachmentFilename)); @@ -639,7 +639,7 @@ private static void performCombine(String pdfName, String xmlName, String outNam } else { System.out.println("Version set to " + zfVersion); } - zfIntVersion = Integer.valueOf(zfVersion); + zfIntVersion = Integer.parseInt(zfVersion); if (zfProfile == null) { try { @@ -682,35 +682,47 @@ private static void performCombine(String pdfName, String xmlName, String outNam if (format.equals("ox")) { standard = EStandard.orderx; } - if (zfProfile.equals("b")) { - zfConformanceLevelProfile = Profiles.getByName(standard, "BASIC", zfIntVersion); - } else if (zfProfile.equals("c")) { - zfConformanceLevelProfile = Profiles.getByName(standard, "COMFORT", zfIntVersion); - } else if (zfProfile.equals("t")) { - zfConformanceLevelProfile = Profiles.getByName(standard, "EXTENDED", zfIntVersion); - } else { - throw new Exception(String.format("Unknown ZUGFeRD profile '%s'", zfProfile)); + switch (zfProfile) { + case "b": + zfConformanceLevelProfile = Profiles.getByName(standard, "BASIC", zfIntVersion); + break; + case "c": + zfConformanceLevelProfile = Profiles.getByName(standard, "COMFORT", zfIntVersion); + break; + case "t": + zfConformanceLevelProfile = Profiles.getByName(standard, "EXTENDED", zfIntVersion); + break; + default: + throw new Exception(String.format("Unknown ZUGFeRD profile '%s'", zfProfile)); } } else if (((format.equals("zf")) && (zfIntVersion == 2)) || (format.equals("fx"))) { - if (zfProfile.equals("m")) { - zfConformanceLevelProfile = Profiles.getByName(standard, "MINIMUM", zfIntVersion); - } else if (zfProfile.equals("w")) { - zfConformanceLevelProfile = Profiles.getByName(standard, "BASICWL", zfIntVersion); - } else if (zfProfile.equals("b")) { - zfConformanceLevelProfile = Profiles.getByName(standard, "BASIC", zfIntVersion); - } else if (zfProfile.equals("c")) { - zfConformanceLevelProfile = Profiles.getByName(standard, "CIUS", zfIntVersion); - } else if (zfProfile.equals("e")) { - zfConformanceLevelProfile = Profiles.getByName(standard, "EN16931", zfIntVersion); - } else if (zfProfile.equals("t")) { - zfConformanceLevelProfile = Profiles.getByName(standard, "EXTENDED", zfIntVersion); - } else if (zfProfile.equals("x")) { - zfConformanceLevelProfile = Profiles.getByName(standard, "XRECHNUNG", zfIntVersion); - } else { - throw new Exception(String.format("Unknown ZUGFeRD profile '%s'", zfProfile)); + switch (zfProfile) { + case "m": + zfConformanceLevelProfile = Profiles.getByName(standard, "MINIMUM", zfIntVersion); + break; + case "w": + zfConformanceLevelProfile = Profiles.getByName(standard, "BASICWL", zfIntVersion); + break; + case "b": + zfConformanceLevelProfile = Profiles.getByName(standard, "BASIC", zfIntVersion); + break; + case "c": + zfConformanceLevelProfile = Profiles.getByName(standard, "CIUS", zfIntVersion); + break; + case "e": + zfConformanceLevelProfile = Profiles.getByName(standard, "EN16931", zfIntVersion); + break; + case "t": + zfConformanceLevelProfile = Profiles.getByName(standard, "EXTENDED", zfIntVersion); + break; + case "x": + zfConformanceLevelProfile = Profiles.getByName(standard, "XRECHNUNG", zfIntVersion); + break; + default: + throw new Exception(String.format("Unknown ZUGFeRD profile '%s'", zfProfile)); } } else { - throw new Exception(String.format("Unknown version '%i'", zfIntVersion)); + throw new Exception(String.format("Unknown version '%d'", zfIntVersion)); } IZUGFeRDExporter ze = null; @@ -814,11 +826,15 @@ private static void performVisualization(String sourceName, String lang, String lang = getStringFromUser("Output language", "en", "en|de|fr"); } catch (Exception e) { LOGGER.error(e.getMessage(), e); + lang = "en"; } - } else { - System.out.println("Output language set to " + lang); + } + } else { + if (lang == null) { + lang = "en"; } } + System.out.println("Output language set to " + lang); if (outName == null) { String defaultFilename = "factur-x.html"; @@ -836,8 +852,6 @@ private static void performVisualization(String sourceName, String lang, String try { ensureFileExists(sourceName); ensureFileNotExists(outName); - - // stylesheets/ZUGFeRD_1p0_c1p0_s1p0.xslt } catch (IOException e) { LOGGER.error(e.getMessage(), e); } @@ -845,38 +859,44 @@ private static void performVisualization(String sourceName, String lang, String ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer(); String xml = null; try { + ELanguage langCode = getLanguage(lang); if (!intoPDF) { - ZUGFeRDVisualizer.Language langCode = ZUGFeRDVisualizer.Language.EN; - if (lang.equalsIgnoreCase("de")) { - langCode = ZUGFeRDVisualizer.Language.DE; - } - if (lang.equalsIgnoreCase("fr")) { - langCode = ZUGFeRDVisualizer.Language.FR; - } xml = zvi.visualize(sourceName, langCode); Files.write(Paths.get(outName), xml.getBytes()); } else { - zvi.toPDF(sourceName, outName); + zvi.toPDF(sourceName, outName, langCode); } + System.out.println("Written to " + outName); } catch (Exception e) { LOGGER.error(e.getMessage(), e); System.err.println(e.getMessage()); } - System.out.println("Written to " + outName); + // The following is not needed anymore: + /* if (!intoPDF) { - try { - ExportResource("/xrechnung-viewer.css"); - ExportResource("/xrechnung-viewer.js"); - - System.out.println("xrechnung-viewer.css and xrechnung-viewer.js written as well (to local working dir)"); + ExportResource("xrechnung-viewer.css"); + ExportResource("xrechnung-viewer.js"); + ExportResource("FileSaver-v2.0.5.js"); } catch (Exception e) { LOGGER.error(e.getMessage(), e); } } + */ + } - + private static ELanguage getLanguage(final String s) { + ELanguage rv = ELanguage.EN; + if (s != null && !s.isEmpty()) { + if (s.equalsIgnoreCase("de")) { + rv = ELanguage.DE; + } + if (s.equalsIgnoreCase("fr")) { + rv = ELanguage.FR; + } + } + return rv; } /** @@ -886,29 +906,31 @@ private static void performVisualization(String sourceName, String lang, String * @return The path to the exported resource * @throws Exception e.g. if the specified resource does not exist at the specified location */ - static public String ExportResource(String resourceName) throws Exception { - String jarFolder; - try (InputStream stream = Main.class.getResourceAsStream(resourceName)) {//note that each / is a directory down in the "jar tree" been the jar the root of the tree - if (stream == null) { - throw new Exception("Cannot get resource \"" + resourceName + "\" from Jar file."); - } - - int readBytes; - byte[] buffer = new byte[4096]; - jarFolder = System.getProperty("user.dir"); - try (FileOutputStream resStreamOut = new FileOutputStream(jarFolder + resourceName)) { - while ((readBytes = stream.read(buffer)) > 0) { - resStreamOut.write(buffer, 0, readBytes); - } + @SuppressWarnings("unused") + public static String ExportResource(final String resourceName) throws Exception { + String jarFolder = System.getProperty("user.dir"); + String resourcePath = ClasspathResourceURIResolver.MAIN_BASE_PATH + resourceName; + try (InputStream is = Main.class.getClassLoader().getResourceAsStream(resourcePath)) { + // note that each / is a directory down in the "jar tree" been the jar the root of the tree + if (is != null) { + int readBytes; + byte[] buffer = new byte[4096]; + try (FileOutputStream fos = new FileOutputStream(jarFolder + resourceName)) { + while ((readBytes = is.read(buffer)) > 0) { + fos.write(buffer, 0, readBytes); + } + } + } else { + throw new Exception(String.format("Cannot get resource '%s' from JAR file.", resourceName)); } } - + System.out.printf("'%s' written (to local working directory).%n", resourceName); return jarFolder + resourceName; } private static void ensureFileExists(String fileName) throws IOException { if (!fileExists(fileName)) { - throw new IOException(String.format("File %s does not exists", fileName)); + throw new IOException(String.format("File %s does not exist.", fileName)); } } diff --git a/Mustang-CLI/src/main/java/org/mustangproject/commandline/ValidatorFileWalker.java b/Mustang-CLI/src/main/java/org/mustangproject/commandline/ValidatorFileWalker.java index 5b5d8340e..ef07b705d 100644 --- a/Mustang-CLI/src/main/java/org/mustangproject/commandline/ValidatorFileWalker.java +++ b/Mustang-CLI/src/main/java/org/mustangproject/commandline/ValidatorFileWalker.java @@ -61,7 +61,7 @@ public FileVisitResult visitFile(Path file, thisResultString="invalid"; allValid=false; } - LOGGER.info(String.format("\n@%s Testing file %d: %s (%s)", dateFormat.format(date), fileCount++, thisResultString, file)); + LOGGER.info(String.format("%n@%s Testing file %d: %s (%s)", dateFormat.format(date), fileCount++, thisResultString, file)); } } @@ -72,7 +72,7 @@ public FileVisitResult visitFile(Path file, @Override public FileVisitResult postVisitDirectory(Path dir, IOException exc) { - LOGGER.info("\nDirectory: %s%n", dir); + LOGGER.info("%nDirectory: {}%n", dir); return FileVisitResult.CONTINUE; } diff --git a/Mustang-CLI/src/test/java/org/mustangproject/commandline/CliIT.java b/Mustang-CLI/src/test/java/org/mustangproject/commandline/CliIT.java index a6cf0bd9f..24060bc50 100644 --- a/Mustang-CLI/src/test/java/org/mustangproject/commandline/CliIT.java +++ b/Mustang-CLI/src/test/java/org/mustangproject/commandline/CliIT.java @@ -1,7 +1,6 @@ package org.mustangproject.commandline; import java.io.*; -import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -52,7 +51,7 @@ public void testCii2Ubl() throws Exception { if (!result.isEmpty()) { System.out.println(result); } - assertTrue(new String(Files.readAllBytes(output), StandardCharsets.UTF_8).contains("Invoice")); + assertTrue(Files.readString(output).contains("Invoice")); } private String getOutput(Process process) throws IOException { @@ -61,7 +60,7 @@ private String getOutput(Process process) throws IOException { String line; while ((line = reader.readLine()) != null) { builder.append(line); - builder.append(System.getProperty("line.separator")); + builder.append(System.lineSeparator()); } return builder.toString(); } diff --git a/NOTICE b/NOTICE index 2292b99c9..57d239954 100644 --- a/NOTICE +++ b/NOTICE @@ -36,3 +36,26 @@ Based on EN16931 validation artefacts https://github.com/ConnectingEurope/eInvoi Based on https://xmlgraphics.apache.org/fop under the APL2.0 Based on https://github.com/saucecontrol/Compact-ICC-Profiles/ under the Public Domain http://ftp.gnu.org/gnu/freefont/ + +Based on http://4s4u.de/additional_data/_downloads/5743e086b174b29d6a14cc71d9e3f916/logistics_invoice_0.1.zip +Based on http://docs.oasis-open.org/ubl/os-UBL-2.1/UBL-2.1.zip +Based on http://docs.oasis-open.org/ubl/os-UBL-2.2/UBL-2.2.zip +Based on http://docs.oasis-open.org/ubl/os-UBL-2.3/UBL-2.3.zip +Based on http://docs.oasis-open.org/ubl/os-UBL-2.4/UBL-2.4.zip +Based on https://github.com/ConnectingEurope/eInvoicing-EN16931/releases/download/validation-1.3.13/en16931-cii-1.3.13.zip +Based on https://github.com/ConnectingEurope/eInvoicing-EN16931/releases/download/validation-1.3.13/en16931-ubl-1.3.13.zip +Based on https://github.com/adobe-fonts/source-sans/releases/download/3.006R/source-sans-pro-3.006R.zip +Based on https://github.com/adobe-fonts/source-serif/releases/download/3.001R/source-serif-pro-3.001R.zip +Based on https://github.com/itplr-kosit/xrechnung-schematron/releases/download/release-1.3.0/xrechnung-1.2.2-schematron-1.3.0.zip +Based on https://github.com/itplr-kosit/xrechnung-schematron/releases/download/release-1.5.0/xrechnung-2.0.1-schematron-1.5.0.zip +Based on https://github.com/itplr-kosit/xrechnung-schematron/releases/download/release-1.6.1/xrechnung-2.1.1-schematron-1.6.1.zip +Based on https://github.com/itplr-kosit/xrechnung-schematron/releases/download/release-1.7.3/xrechnung-2.2.0-schematron-1.7.3.zip +Based on https://github.com/itplr-kosit/xrechnung-schematron/releases/download/release-1.8.2/xrechnung-2.3.1-schematron-1.8.2.zip +Based on https://github.com/itplr-kosit/xrechnung-schematron/releases/download/release-2.0.2/xrechnung-3.0.1-schematron-2.0.2.zip +Based on https://github.com/itplr-kosit/xrechnung-schematron/releases/download/release-2.1.0/xrechnung-3.0.2-schematron-2.1.0.zip +Based on https://github.com/itplr-kosit/xrechnung-schematron/releases/download/release-2.2.0/xrechnung-3.0.2-schematron-2.2.0.zip +Based on https://github.com/itplr-kosit/xrechnung-visualization/releases/download/v2024-06-20/xrechnung-3.0.2-xrechnung-visualization-2024-06-20.zip +Based on https://github.com/jcthiele/xrechnung-visualization-codelist-resolve/releases/download/v2024-09-28/2024-09-28_build.zip +Based on https://www.ferd-net.de/fileadmin/user_upload/FeRD/Downloads/ZF232_EN.zip +Based on https://www.ferd-net.de/fileadmin/user_upload/FeRD/Downloads/orderx10en.zip +Based on https://www.ferd-net.de/fileadmin/user_upload/FeRD/Downloads/zugferd10-en.zip diff --git a/library/pom.xml b/library/pom.xml index 6045292a3..bd7591322 100644 --- a/library/pom.xml +++ b/library/pom.xml @@ -1,164 +1,152 @@ - - + + + 4.0.0 org.mustangproject core 2.16.2-SNAPSHOT - - 4.0.0 - org.mustangproject library - 2.16.2-SNAPSHOT jar Library to write, read and validate e-invoices (Factur-X, ZUGFeRD, Order-X, XRechnung/CII) - FOSS Java library to read, write and validate european electronic invoices and orders in the UN/CEFACT - Cross Industry Invoice based formats Factur-X/ZUGFeRD, XRechnung and Order-X in your invoice PDFs. - + FOSS Java library to read, write and validate european electronic invoices and orders in the UN/CEFACT Cross Industry Invoice based formats Factur-X/ZUGFeRD, XRechnung and Order-X in your invoice PDFs. http://www.mustangproject.org/ - - scm:git:https://github.com/ZUGFeRD/mustangproject.git - scm:git:https://github.com/ZUGFeRD/mustangproject.git - https://github.com/ZUGFeRD/mustangproject - core-2.3.2 - - - - sonatype-oss-public - https://oss.sonatype.org/content/groups/public/ - - true - - - true - - - - - - internal.repo - Temporary Staging Repository - file://${project.build.directory}/mvn-repo - - + + + Apache License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + A business-friendly OSS license + + + + + Jochen Stärk + jstaerk@usegroup.de + + architect + developer + + + + Alexander Schmidt + schmidt.alexander@mail.de + + developer + + + - UTF-8 - github - -Xdoclint:none - - 11 - 11 - 11 - true - - + false - org.slf4j - slf4j-api - 2.0.9 - - - - net.sf.saxon - Saxon-HE - 12.4 + com.fasterxml.jackson.core + jackson-annotations - com.fasterxml.jackson.core jackson-databind - 2.17.1 - - org.apache.xmlgraphics - fop - 2.10 - - - xml-apis - xml-apis - - + com.helger + en16931-cii2ubl - - jakarta.xml.bind - jakarta.xml.bind-api - 4.0.2 + com.helger.commons + ph-commons - - - org.glassfish.jaxb - jaxb-runtime - 4.0.5 - - - org.eclipse.angus - angus-activation - 2.0.2 + + com.helger.commons + ph-jaxb + + + com.helger.ubl + ph-ubl23 + + + commons-io + commons-io + + + jakarta.activation + jakarta.activation-api + + + net.sf.saxon + Saxon-HE + + + org.apache.pdfbox + pdfbox + + + org.apache.pdfbox + pdfbox-io - org.apache.pdfbox preflight - 3.0.2 org.apache.pdfbox - pdfbox - 3.0.2 + xmpbox + + + org.apache.xmlgraphics + fop-core + + + org.apache.xmlgraphics + xmlgraphics-commons - org.dom4j dom4j - 2.1.4 - - - * - * - - - - - com.helger - en16931-cii2ubl - 2.2.4 - - - - org.junit.jupiter - junit-jupiter-api - 5.10.2 + org.glassfish.jaxb + jaxb-runtime + + + org.slf4j + slf4j-api + + + xml-apis + xml-apis + + + + com.fasterxml.jackson.core + jackson-core test - org.junit.vintage - junit-vintage-engine - 5.10.2 + junit + junit test - org.xmlunit - xmlunit-core - 2.10.0 + org.assertj + assertj-core test - org.xmlunit - xmlunit-assertj - 2.10.0 + org.junit.jupiter + junit-jupiter-api test org.slf4j slf4j-simple - 2.0.9 + test + + + org.xmlunit + xmlunit-assertj test @@ -166,30 +154,21 @@ org.apache.maven.plugins - maven-surefire-plugin - - alphabetical - + maven-compiler-plugin org.apache.maven.plugins - maven-compiler-plugin - 3.13.0 + maven-dependency-plugin - - jar-with-dependencies - - - - 11 - 11 + + org.glassfish.jaxb:jaxb-runtime + org.slf4j:slf4j-simple + org.apache.maven.plugins maven-jar-plugin - 3.2.0 **/logback.xml @@ -251,26 +230,12 @@ - - org.apache.maven.plugins - maven-source-plugin - 3.3.1 - - - attach-sources - - jar-no-fork - - - - org.apache.maven.plugins maven-shade-plugin - 3.5.3 - true - false + true + false *:* @@ -292,24 +257,47 @@ - org.codehaus.mojo - templating-maven-plugin - 1.0.0 + org.apache.maven.plugins + maven-source-plugin - filtering-java-templates + attach-sources - filter-sources + jar-no-fork + + org.apache.maven.plugins + maven-surefire-plugin + + + org.codehaus.mojo + templating-maven-plugin + + + org.codehaus.mojo + xml-maven-plugin + + + + src/main/resources + + **/*.css + **/*.icc + **/*.js + **/*.ttf + + + + target/generated-resources + + - - - + release-sign-artifacts @@ -322,56 +310,9 @@ org.apache.maven.plugins maven-toolchains-plugin - 3.1.0 - - - - toolchain - - - - - - - 11 - adopt - - - - - - User List - https://groups.google.com/forum/?hl=de#!forum/mustangproject - - - - - Apache License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - repo - A business-friendly OSS license - - - - - Jochen Stärk - jstaerk@usegroup.de - - architect - developer - - - - Alexander Schmidt - schmidt.alexander@mail.de - - developer - - - diff --git a/library/src/main/java/org/mustangproject/CalculatedInvoice.java b/library/src/main/java/org/mustangproject/CalculatedInvoice.java index 194441b17..d76d64523 100644 --- a/library/src/main/java/org/mustangproject/CalculatedInvoice.java +++ b/library/src/main/java/org/mustangproject/CalculatedInvoice.java @@ -5,8 +5,6 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import org.mustangproject.ZUGFeRD.TransactionCalculator; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.io.Serializable; import java.math.BigDecimal; diff --git a/library/src/main/java/org/mustangproject/ClasspathResolverURIAdapter.java b/library/src/main/java/org/mustangproject/ClasspathResolverURIAdapter.java index 721c45de1..f5076eba4 100644 --- a/library/src/main/java/org/mustangproject/ClasspathResolverURIAdapter.java +++ b/library/src/main/java/org/mustangproject/ClasspathResolverURIAdapter.java @@ -7,9 +7,12 @@ import org.apache.fop.apps.io.ResourceResolverFactory; import org.apache.xmlgraphics.io.Resource; import org.apache.xmlgraphics.io.ResourceResolver; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class ClasspathResolverURIAdapter implements ResourceResolver { + private static final Logger LOGGER = LoggerFactory.getLogger(ClasspathResolverURIAdapter.class); private final ResourceResolver wrapped; @@ -20,6 +23,7 @@ public ClasspathResolverURIAdapter() { @Override public Resource getResource(URI uri) throws IOException { + LOGGER.debug("public Resource getResource(URI uri='{}')", uri); if (uri.getScheme().equals("classpath")) { URL url = getClass().getClassLoader().getResource(uri.getSchemeSpecificPart()); diff --git a/library/src/main/java/org/mustangproject/Exceptions/ArithmeticException.java b/library/src/main/java/org/mustangproject/Exceptions/ArithmeticException.java new file mode 100644 index 000000000..f64b46e62 --- /dev/null +++ b/library/src/main/java/org/mustangproject/Exceptions/ArithmeticException.java @@ -0,0 +1,16 @@ +package org.mustangproject.Exceptions; + +import java.text.ParseException; + +/** + * will be thrown if an invoice cannot be reproduced numerically + */ +public class ArithmeticException extends ParseException { + @SuppressWarnings("unused") + public ArithmeticException() { + this(""); + } + public ArithmeticException(final String msg) { + super("Could not reproduce the invoice. " + msg, 0); + } +} diff --git a/library/src/main/java/org/mustangproject/Exceptions/ArithmetricException.java b/library/src/main/java/org/mustangproject/Exceptions/ArithmetricException.java deleted file mode 100644 index e5b4071d8..000000000 --- a/library/src/main/java/org/mustangproject/Exceptions/ArithmetricException.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.mustangproject.Exceptions; - -import java.text.ParseException; - -/*** - * will be thrown if an invoice cant be reproduced numerically - */ -public class ArithmetricException extends ParseException { - public ArithmetricException() { - this(""); - } - - public ArithmetricException(String details) { - super("Could not reproduce the invoice. " + details, 0); - } -} diff --git a/library/src/main/java/org/mustangproject/Exceptions/StructureException.java b/library/src/main/java/org/mustangproject/Exceptions/StructureException.java index 1859da7ae..25f8052e7 100644 --- a/library/src/main/java/org/mustangproject/Exceptions/StructureException.java +++ b/library/src/main/java/org/mustangproject/Exceptions/StructureException.java @@ -3,10 +3,10 @@ import java.text.ParseException; /*** - * will be thrown if a invoice cant be read + * will be thrown if an invoice cannot be read */ public class StructureException extends ParseException { - public StructureException(String message, int line) { - super(message, line); - } + public StructureException(String message, int line) { + super(message, line); + } } diff --git a/library/src/main/java/org/mustangproject/Item.java b/library/src/main/java/org/mustangproject/Item.java index c73a7b7ff..d95441897 100644 --- a/library/src/main/java/org/mustangproject/Item.java +++ b/library/src/main/java/org/mustangproject/Item.java @@ -15,8 +15,6 @@ import java.util.Collection; import java.util.Date; import java.util.List; -import java.util.HashMap; -import java.util.Map; /*** * describes any invoice line @@ -77,13 +75,9 @@ public Item(NodeList itemChilds, boolean recalcPrice) { icnm.getAsString("Name").ifPresent(product::setName); icnm.getAsString("Description").ifPresent(product::setDescription); - icnm.getAsNodeMap("SellersItemIdentification").ifPresent(SellersItemIdentification -> { - SellersItemIdentification.getAsString("ID").ifPresent(product::setSellerAssignedID); - }); + icnm.getAsNodeMap("SellersItemIdentification").ifPresent(SellersItemIdentification -> SellersItemIdentification.getAsString("ID").ifPresent(product::setSellerAssignedID)); - icnm.getAsNodeMap("BuyersItemIdentification").ifPresent(BuyersItemIdentification -> { - BuyersItemIdentification.getAsString("ID").ifPresent(product::setBuyerAssignedID); - }); + icnm.getAsNodeMap("BuyersItemIdentification").ifPresent(BuyersItemIdentification -> BuyersItemIdentification.getAsString("ID").ifPresent(product::setBuyerAssignedID)); // String name = icnm.getAsStringOrNull("Name"); // String val = icnm.getAsStringOrNull("Value"); @@ -100,9 +94,7 @@ public Item(NodeList itemChilds, boolean recalcPrice) { icnm.getAsNodeMap("ClassifiedTaxCategory").flatMap(m -> m.getAsBigDecimal("Percent")) .ifPresent(product::setVATPercent); }); - itemMap.getAsNodeMap("AssociatedDocumentLineDocument").ifPresent(icnm -> { - icnm.getAsString("LineID").ifPresent(this::setId); - }); + itemMap.getAsNodeMap("AssociatedDocumentLineDocument").ifPresent(icnm -> icnm.getAsString("LineID").ifPresent(this::setId)); itemMap.getAsNodeMap("Price").ifPresent(icnm -> { // ubl @@ -201,7 +193,12 @@ public Item(NodeList itemChilds, boolean recalcPrice) { } }); - }); + if (isChargeString.equalsIgnoreCase("false")) { + addAllowance(izac); + } else { + addCharge(izac); + } + })); if (recalcPrice && !BigDecimal.ZERO.equals(quantity)) { icnm.getAsNodeMap("SpecifiedTradeSettlementLineMonetarySummation") diff --git a/library/src/main/java/org/mustangproject/Product.java b/library/src/main/java/org/mustangproject/Product.java index 4bbde404b..5c1e4508f 100644 --- a/library/src/main/java/org/mustangproject/Product.java +++ b/library/src/main/java/org/mustangproject/Product.java @@ -7,14 +7,9 @@ import org.mustangproject.ZUGFeRD.IZUGFeRDExportableProduct; import org.mustangproject.util.NodeMap; import org.w3c.dom.Node; -import org.w3c.dom.NodeList; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /*** * describes a product, good or service used in an invoice item line @@ -304,11 +299,7 @@ public BigDecimal getVATPercent() { * @return fluent setter */ public Product setVATPercent(BigDecimal VATPercent) { - if (VATPercent == null) { - this.VATPercent = BigDecimal.ZERO; - } else { - this.VATPercent = VATPercent; - } + this.VATPercent = Objects.requireNonNullElse(VATPercent, BigDecimal.ZERO); return this; } diff --git a/library/src/main/java/org/mustangproject/SubjectCode.java b/library/src/main/java/org/mustangproject/SubjectCode.java index 808c09d40..a04bc7f32 100644 --- a/library/src/main/java/org/mustangproject/SubjectCode.java +++ b/library/src/main/java/org/mustangproject/SubjectCode.java @@ -5,40 +5,40 @@ * In the first step only the recommended codes are implemented. */ public enum SubjectCode { - /** - * general information - */ - AAI, - /** - * seller notes - */ - SUR, - /** - * regulatory information - */ - REG, - /** - * legal information - */ - ABL, - /** - * tax information - */ - TXD, - /** - * Customs information - */ - CUS, - /** - * introduction - */ - ACY, - /** - * Discount and bonus agreements - */ - AAK, - /** - * Vehicle licence number - */ - ABZ + /** + * general information + */ + AAI, + /** + * seller notes + */ + SUR, + /** + * regulatory information + */ + REG, + /** + * legal information + */ + ABL, + /** + * tax information + */ + TXD, + /** + * Customs information + */ + CUS, + /** + * introduction + */ + ACY, + /** + * Discount and bonus agreements + */ + AAK, + /** + * Vehicle licence number + */ + ABZ } diff --git a/library/src/main/java/org/mustangproject/TradeParty.java b/library/src/main/java/org/mustangproject/TradeParty.java index 73b1ae818..dfd9e2bff 100644 --- a/library/src/main/java/org/mustangproject/TradeParty.java +++ b/library/src/main/java/org/mustangproject/TradeParty.java @@ -2,7 +2,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.Objects; import java.util.stream.Collectors; import java.util.stream.Stream; diff --git a/library/src/main/java/org/mustangproject/XMLTools.java b/library/src/main/java/org/mustangproject/XMLTools.java index d890c3d1c..ed312cc01 100644 --- a/library/src/main/java/org/mustangproject/XMLTools.java +++ b/library/src/main/java/org/mustangproject/XMLTools.java @@ -68,7 +68,7 @@ public static BigDecimal tryBigDecimal(String nodeValue) { return new BigDecimal(nodeValue); } catch (final Exception e) { try { - return BigDecimal.valueOf(Float.valueOf(nodeValue)); + return BigDecimal.valueOf(Float.parseFloat(nodeValue)); } catch (final Exception ex) { return new BigDecimal("0.00"); } diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ClasspathResourceURIResolver.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ClasspathResourceURIResolver.java new file mode 100644 index 000000000..1fef9c19a --- /dev/null +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ClasspathResourceURIResolver.java @@ -0,0 +1,85 @@ +package org.mustangproject.ZUGFeRD; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.xml.transform.Source; +import javax.xml.transform.URIResolver; +import javax.xml.transform.stream.StreamSource; +import java.io.InputStream; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.file.InvalidPathException; +import java.util.regex.PatternSyntaxException; + +public class ClasspathResourceURIResolver implements URIResolver { + public static final ClassLoader CLASS_LOADER = ZUGFeRDVisualizer.class.getClassLoader(); + + public static final String CUSTOM_BASE_PATH = "stylesheets/"; + public static final String MAIN_BASE_PATH = "xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/"; + public static final String RESOURCE_PATH = ""; + public static final String ZF10_BASE_PATH = "zugferd10-en/Stylesheet/"; + + private static final Logger LOGGER = LoggerFactory.getLogger(ClasspathResourceURIResolver.class); + + ClasspathResourceURIResolver() { + // Do nothing, just prevents synthetic access warning. + } + + public static Source getSource(final String path) { + LOGGER.debug("private static Source getSource(final String path='{}')", path); + Source rv = null; + if (path != null && !path.isEmpty()) { + InputStream is = CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + path); + if (is != null) { + rv = new StreamSource(is); + } else { + LOGGER.error("Cannot get resource '{}'.", path); + } + } + return rv; + } + + @Override + public Source resolve(String href, String base) { + LOGGER.debug("Resolving base='{}', href='{}' ...", base, href); + Source rv = null; + if (href != null && !href.isEmpty()) { + if (!href.endsWith("xrechnung-html.univ.xsl")) { + rv = getSource(MAIN_BASE_PATH + getLastPathSegment(href)); + } else { + rv = getSource(CUSTOM_BASE_PATH + href); + } + } + return rv; + } + + private String getLastPathSegment(final String href) { + String rv = href; + if (href.endsWith(".css") || href.endsWith(".js") || href.startsWith("./")) { + try { + URI uri = new URI(href); + rv = getLastItem(uri.getPath(), "/"); + } catch (URISyntaxException | InvalidPathException e) { + LOGGER.error("Cannot parse URI string '{}'.", href); + } + } + return rv; + } + + @SuppressWarnings("SameParameterValue") + private String getLastItem(final String s, final String separator) { + String rv = s; + if (s != null && separator != null) { + try { + String[] items = s.split(separator); + if (items.length > 0) { + rv = items[items.length - 1]; + } + } catch (PatternSyntaxException e) { + LOGGER.error("Cannot split string '{}' using separator '{}'.", s, separator); + } + } + return rv; + } +} diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ELanguage.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ELanguage.java new file mode 100644 index 000000000..e40f5f954 --- /dev/null +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ELanguage.java @@ -0,0 +1,7 @@ +package org.mustangproject.ZUGFeRD; + +public enum ELanguage { + EN, + FR, + DE +} diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/PDFBoxUpdateMitigation.java b/library/src/main/java/org/mustangproject/ZUGFeRD/PDFBoxUpdateMitigation.java index 652051b69..c7becee4e 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/PDFBoxUpdateMitigation.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/PDFBoxUpdateMitigation.java @@ -16,84 +16,84 @@ // Copied from PDFBox preflight 2.0.x final class ByteArrayDataSource implements DataSource { - private ByteArrayOutputStream data; - private String type = null; - private String name = null; + private ByteArrayOutputStream data; + private String type = null; + private String name = null; - public ByteArrayDataSource (InputStream is) throws IOException - { - data = new ByteArrayOutputStream (); - IOUtils.copy (is, data); - IOUtils.closeQuietly (is); - } + public ByteArrayDataSource (InputStream is) throws IOException + { + data = new ByteArrayOutputStream (); + IOUtils.copy (is, data); + IOUtils.closeQuietly (is); + } - public String getContentType () - { - return this.type; - } + public String getContentType () + { + return this.type; + } - /** - * @param type - * the type to set - */ - public void setType (String type) - { - this.type = type; - } + /** + * @param type + * the type to set + */ + public void setType (String type) + { + this.type = type; + } - /** - * @param name - * the name to set - */ - public void setName (String name) - { - this.name = name; - } + /** + * @param name + * the name to set + */ + public void setName (String name) + { + this.name = name; + } - public InputStream getInputStream () throws IOException - { - return new ByteArrayInputStream (data.toByteArray ()); - } + public InputStream getInputStream () throws IOException + { + return new ByteArrayInputStream (data.toByteArray ()); + } - public String getName () - { - return this.name; - } + public String getName () + { + return this.name; + } - public OutputStream getOutputStream () throws IOException - { - this.data = new ByteArrayOutputStream (); - return data; - } + public OutputStream getOutputStream () throws IOException + { + this.data = new ByteArrayOutputStream (); + return data; + } } // Try to create an API similar to the 2.x one final class PreflightParserHelper { - private static File createTmpFile (InputStream input) throws IOException - { - FileOutputStream fos = null; - try - { - File tmpFile = File.createTempFile ("mustang-pdf", ".pdf"); - fos = new FileOutputStream (tmpFile); - IOUtils.copy (input, fos); - return tmpFile; - } - finally - { - IOUtils.closeQuietly (input); - IOUtils.closeQuietly (fos); - } - } + private static File createTmpFile (InputStream input) throws IOException + { + FileOutputStream fos = null; + try + { + File tmpFile = File.createTempFile ("mustang-pdf", ".pdf"); + fos = new FileOutputStream (tmpFile); + IOUtils.copy (input, fos); + return tmpFile; + } + finally + { + IOUtils.closeQuietly (input); + IOUtils.closeQuietly (fos); + } + } - public static PreflightParser createPreflightParser (DataSource dataSource) throws IOException - { - return new PreflightParser (createTmpFile (dataSource.getInputStream ())); - } + public static PreflightParser createPreflightParser (DataSource dataSource) throws IOException + { + return new PreflightParser (createTmpFile (dataSource.getInputStream ())); + } } final class PDFBoxUpdateMitigation { - // Dummy for the name only + // Dummy for the name only } diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ValidationLogVisualizer.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ValidationLogVisualizer.java index 686daa7cc..d45a51f9c 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ValidationLogVisualizer.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ValidationLogVisualizer.java @@ -16,133 +16,110 @@ import javax.xml.transform.stream.StreamSource; import java.io.*; import java.nio.charset.StandardCharsets; +import java.util.LinkedHashMap; +import java.util.Map; 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); + public static final String LOG_FO_XSL = "result-pdf.xsl"; - private TransformerFactory mFactory = null; - private Templates mXsltPDFTemplate = null; - + private final TransformerFactory mFactory; + private final Map mapOfTemplates = new LinkedHashMap<>(); 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); + // fact = TransformerFactory.newInstance() + mFactory.setURIResolver(new ClasspathResourceURIResolver()); } + @SuppressWarnings("unused") public void toPDF(String xmlLogfileContent, String pdfFilename) { + toPDF(xmlLogfileContent, pdfFilename, ELanguage.EN); + } + public void toPDF(String xmlLogfileContent, String pdfFilename, final ELanguage lang) { // 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); + String result = this.toFOP(xmlLogfileContent, lang); + if (result == null) { + throw new IllegalArgumentException("FOP cannot process XML content."); } DefaultConfigurationBuilder cfgBuilder = new DefaultConfigurationBuilder(); - - Configuration cfg = null; + Configuration cfg; try { - cfg = cfgBuilder.build(CLASS_LOADER.getResourceAsStream("fop-config.xconf")); + cfg = cfgBuilder.build(ClasspathResourceURIResolver.CLASS_LOADER.getResourceAsStream("fop-config.xconf")); } catch (ConfigurationException e) { - throw new RuntimeException(e); + throw new IllegalArgumentException("Cannot parse FOP configuration.", 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!) - + // 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())); - + 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). - + // 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. + protected String toFOP(final String xmlContent, final ELanguage lang) { + initTemplates(); + ByteArrayOutputStream outputStream; + outputStream = applyXSLT(LOG_FO_XSL, new StringReader(xmlContent), lang); + return outputStream != null ? outputStream.toString(StandardCharsets.UTF_8) : null; + } + + private void initTemplates() { + initTemplates(ClasspathResourceURIResolver.CUSTOM_BASE_PATH, LOG_FO_XSL); + } + + @SuppressWarnings("SameParameterValue") + private void initTemplates(final String basePath, final String fileName) { + if (!mapOfTemplates.containsKey(fileName)) { + try { + mapOfTemplates.put( + fileName, + mFactory.newTemplates( + ClasspathResourceURIResolver.getSource(basePath + fileName) + ) + ); + } catch (TransformerConfigurationException e) { + LOGGER.error("Cannot retrieve transformation script '{}'.", fileName); + } } + } - @Override - public Source resolve(String href, String base) throws TransformerException { - return new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/" + href)); + @SuppressWarnings("SameParameterValue") + protected ByteArrayOutputStream applyXSLT(final String fileName, final StringReader reader, final ELanguage lang) { + ByteArrayOutputStream rv = new ByteArrayOutputStream(); + if (mapOfTemplates.containsKey(fileName)) { + try { + Templates templates = mapOfTemplates.get(fileName); + Transformer transformer = templates.newTransformer(); + transformer.setParameter("lang", lang.name().toLowerCase()); + transformer.transform(new StreamSource(reader), new StreamResult(rv)); + } catch (TransformerException e) { + LOGGER.error("Cannot apply transformation script '{}'.", fileName); + } } + return rv; } } diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java index a1cd2d8df..d1bbc4102 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java @@ -9,7 +9,7 @@ import org.apache.pdfbox.pdmodel.common.filespecification.PDComplexFileSpecification; import org.apache.pdfbox.pdmodel.common.filespecification.PDEmbeddedFile; import org.mustangproject.*; -import org.mustangproject.Exceptions.ArithmetricException; +import org.mustangproject.Exceptions.ArithmeticException; import org.mustangproject.Exceptions.StructureException; import org.mustangproject.util.NodeMap; import org.slf4j.Logger; @@ -309,7 +309,7 @@ public Invoice extractInto(Invoice zpp) throws XPathExpressionException, ParseEx List includedNotes = new ArrayList<>(); //UBL... - XPathExpression UBLNotesEx = xpath.compile("/*[local-name()=\"Invoice\" or local-name()=\"CreditNote\"]/*[local-name()=\"Note\"]"); + XPathExpression UBLNotesEx = xpath.compile("/*[local-name()=\"Invoice\" or local-name()=\"CreditNote\"]/*[local-name()=\"Note\"]"); NodeList UBLNotesNd = (NodeList) UBLNotesEx.evaluate(getDocument(), XPathConstants.NODESET); if ((UBLNotesNd != null) && (UBLNotesNd.getLength() > 0)) { for (int nodeIndex = 0; nodeIndex < UBLNotesNd.getLength(); nodeIndex++) { @@ -332,38 +332,18 @@ public Invoice extractInto(Invoice zpp) throws XPathExpressionException, ParseEx delivery.addGlobalID(sID); } }); - deliveryLocationNodeMap.getAsNodeMap("Address").ifPresent(s -> { - s.getAsString("StreetName").ifPresent(t -> delivery.setStreet(t)); - }); - deliveryLocationNodeMap.getAsNodeMap("Address").ifPresent(s -> { - s.getAsString("AdditionalStreetName").ifPresent(t -> delivery.setAdditionalAddress(t)); - }); - deliveryLocationNodeMap.getAsNodeMap("Address").ifPresent(s -> { - s.getAsString("CityName").ifPresent(t -> delivery.setLocation(t)); - }); - deliveryLocationNodeMap.getAsNodeMap("Address").ifPresent(s -> { - s.getAsString("PostalZone").ifPresent(t -> delivery.setZIP(t)); - }); - deliveryLocationNodeMap.getAsNodeMap("Address").ifPresent(s -> { - s.getAsNodeMap("Country").ifPresent(t -> t.getAsString("IdentificationCode").ifPresent(u -> delivery.setCountry(u))); - }); - deliveryLocationNodeMap.getAsNodeMap("Address").ifPresent(s -> { - s.getAsNodeMap("AddressLine").ifPresent(t -> t.getAsString("Line").ifPresent(u -> delivery.setAdditionalAddressExtension(u))); - }); - deliveryLocationNodeMap.getAsNodeMap("Address").ifPresent(s -> { - s.getAsString("AdditionalStreetName").ifPresent(t -> delivery.setAdditionalAddress(t)); - }); - deliveryLocationNodeMap.getAsNodeMap("Address").ifPresent(s -> { - s.getAsString("AdditionalStreetName").ifPresent(t -> delivery.setAdditionalAddress(t)); - }); + deliveryLocationNodeMap.getAsNodeMap("Address").ifPresent(s -> s.getAsString("StreetName").ifPresent(delivery::setStreet)); + deliveryLocationNodeMap.getAsNodeMap("Address").ifPresent(s -> s.getAsString("AdditionalStreetName").ifPresent(delivery::setAdditionalAddress)); + deliveryLocationNodeMap.getAsNodeMap("Address").ifPresent(s -> s.getAsString("CityName").ifPresent(delivery::setLocation)); + deliveryLocationNodeMap.getAsNodeMap("Address").ifPresent(s -> s.getAsString("PostalZone").ifPresent(delivery::setZIP)); + deliveryLocationNodeMap.getAsNodeMap("Address").ifPresent(s -> s.getAsNodeMap("Country").ifPresent(t -> t.getAsString("IdentificationCode").ifPresent(delivery::setCountry))); + deliveryLocationNodeMap.getAsNodeMap("Address").ifPresent(s -> s.getAsNodeMap("AddressLine").ifPresent(t -> t.getAsString("Line").ifPresent(delivery::setAdditionalAddressExtension))); + deliveryLocationNodeMap.getAsNodeMap("Address").ifPresent(s -> s.getAsString("AdditionalStreetName").ifPresent(delivery::setAdditionalAddress)); + deliveryLocationNodeMap.getAsNodeMap("Address").ifPresent(s -> s.getAsString("AdditionalStreetName").ifPresent(delivery::setAdditionalAddress)); }); - new NodeMap(deliveryNode).getAsNodeMap("DeliveryParty").ifPresent(partyMap -> { - partyMap.getAsNodeMap("PartyName").ifPresent(s -> { - s.getAsString("Name").ifPresent(t -> delivery.setName(t)); - }); - }); + new NodeMap(deliveryNode).getAsNodeMap("DeliveryParty").ifPresent(partyMap -> partyMap.getAsNodeMap("PartyName").ifPresent(s -> s.getAsString("Name").ifPresent(delivery::setName))); String street, name, additionalStreet, city, postal, countrySubentity, line, country = null; /* String idx = extractString("//*[local-name()=\"DeliveryLocation\"]/*[local-name() = \"ID\"]"); @@ -912,38 +892,48 @@ public Invoice extractInto(Invoice zpp) throws XPathExpressionException, ParseEx String chargeChildName = chargeNodeChilds.item(chargeChildIndex).getLocalName(); if (chargeChildName != null) { - if (chargeChildName.equals("ChargeIndicator")) { - if (chargeNodeChilds.item(chargeChildIndex).getTextContent().trim().equalsIgnoreCase("false")) { - // UBL - isCharge = false; - } else if (chargeNodeChilds.item(chargeChildIndex).getTextContent().trim().equalsIgnoreCase("true")) { - // still UBL - isCharge = true; - } else { - //CII - NodeList indicatorChilds = chargeNodeChilds.item(chargeChildIndex).getChildNodes(); - for (int indicatorChildIndex = 0; indicatorChildIndex < indicatorChilds.getLength(); indicatorChildIndex++) { - if ((indicatorChilds.item(indicatorChildIndex).getLocalName() != null) - && (indicatorChilds.item(indicatorChildIndex).getLocalName().equals("Indicator"))) { - isCharge = XMLTools.trimOrNull(indicatorChilds.item(indicatorChildIndex)).equalsIgnoreCase("true"); + switch (chargeChildName) { + case "ChargeIndicator": + if (chargeNodeChilds.item(chargeChildIndex).getTextContent().trim().equalsIgnoreCase("false")) { + // UBL + isCharge = false; + } else if (chargeNodeChilds.item(chargeChildIndex).getTextContent().trim().equalsIgnoreCase("true")) { + // still UBL + isCharge = true; + } else { + //CII + NodeList indicatorChilds = chargeNodeChilds.item(chargeChildIndex).getChildNodes(); + for (int indicatorChildIndex = 0; indicatorChildIndex < indicatorChilds.getLength(); indicatorChildIndex++) { + if ((indicatorChilds.item(indicatorChildIndex).getLocalName() != null) + && (indicatorChilds.item(indicatorChildIndex).getLocalName().equals("Indicator"))) { + isCharge = XMLTools.trimOrNull(indicatorChilds.item(indicatorChildIndex)).equalsIgnoreCase("true"); + } } } - } - } else if (chargeChildName.equals("ActualAmount") || chargeChildName.equals("Amount")) { - chargeAmount = XMLTools.trimOrNull(chargeNodeChilds.item(chargeChildIndex)); - } else if (chargeChildName.equals("Reason") || chargeChildName.equals("AllowanceChargeReason")) { - reason = XMLTools.trimOrNull(chargeNodeChilds.item(chargeChildIndex)); - } else if (chargeChildName.equals("ReasonCode") || chargeChildName.equals("AllowanceChargeReasonCode")) { - reasonCode = XMLTools.trimOrNull(chargeNodeChilds.item(chargeChildIndex)); - } else if (chargeChildName.equals("CategoryTradeTax") || chargeChildName.equals("TaxCategory")) { - NodeList taxChilds = chargeNodeChilds.item(chargeChildIndex).getChildNodes(); - for (int taxChildIndex = 0; taxChildIndex < taxChilds.getLength(); taxChildIndex++) { - String taxItemName = taxChilds.item(taxChildIndex).getLocalName(); - if ((taxItemName != null) && (taxItemName.equals("RateApplicablePercent") || taxItemName.equals("ApplicablePercent") || taxItemName.equals("Percent"))) { - taxPercent = XMLTools.trimOrNull(taxChilds.item(taxChildIndex)); + break; + case "ActualAmount": + case "Amount": + chargeAmount = XMLTools.trimOrNull(chargeNodeChilds.item(chargeChildIndex)); + break; + case "Reason": + case "AllowanceChargeReason": + reason = XMLTools.trimOrNull(chargeNodeChilds.item(chargeChildIndex)); + break; + case "ReasonCode": + case "AllowanceChargeReasonCode": + reasonCode = XMLTools.trimOrNull(chargeNodeChilds.item(chargeChildIndex)); + break; + case "CategoryTradeTax": + case "TaxCategory": + NodeList taxChilds = chargeNodeChilds.item(chargeChildIndex).getChildNodes(); + for (int taxChildIndex = 0; taxChildIndex < taxChilds.getLength(); taxChildIndex++) { + String taxItemName = taxChilds.item(taxChildIndex).getLocalName(); + if ((taxItemName != null) && (taxItemName.equals("RateApplicablePercent") || taxItemName.equals("ApplicablePercent") || taxItemName.equals("Percent"))) { + taxPercent = XMLTools.trimOrNull(taxChilds.item(taxChildIndex)); + } } - } + break; } } } @@ -1031,7 +1021,7 @@ public Invoice extractInto(Invoice zpp) throws XPathExpressionException, ParseEx .collect(Collectors.joining(" + ")); } catch (Exception ignored) { } - throw new ArithmetricException("Payable total in XML is " + payableTotalFromXml + ", but calculated total is " + calculatedPayableTotal + moreDetails); + throw new ArithmeticException("Payable total in XML is " + payableTotalFromXml + ", but calculated total is " + calculatedPayableTotal + moreDetails); } } } diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDVisualizer.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDVisualizer.java index 9b5c1e735..eec6dfcc9 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDVisualizer.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDVisualizer.java @@ -20,8 +20,6 @@ */ package org.mustangproject.ZUGFeRD; -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; @@ -35,362 +33,277 @@ 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.parsers.ParserConfigurationException; 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.LinkedHashMap; +import java.util.Map; public class ZUGFeRDVisualizer { + private static final Logger LOGGER = LoggerFactory.getLogger(ZUGFeRDVisualizer.class); - public enum Language { - EN, - FR, - DE - } + private static final String CANNOT_OPEN_XML_FILE = "Cannot open XML file '{}'."; + private static final String CII_XR_XSL = "cii-xr.xsl"; + private static final String CIO_XR_XSL = "cio-xr.xsl"; + private static final String UBL_CREDIT_NOTE_XR_XSL = "ubl-creditnote-xr.xsl"; + private static final String UBL_INVOICE_XR_XSL = "ubl-invoice-xr.xsl"; + private static final String XR_HTML_XSL = "xrechnung-html.xsl"; + private static final String XR_PDF_XSL = "xr-pdf.xsl"; + private static final String ZF1_HTML_XSL = "ZUGFeRD_1p0_c1p0_s1p0.xslt"; - static final ClassLoader CLASS_LOADER = ZUGFeRDVisualizer.class.getClassLoader(); - private static final String RESOURCE_PATH = ""; - private static final Logger LOGGER = LoggerFactory.getLogger(ZUGFeRDVisualizer.class); - // private static File createTempFileResult(final Transformer transformer, final - // StreamSource toTransform, - // final String suffix) throws TransformerException, IOException { - // File result = File.createTempFile("ZUV_", suffix); - // result.deleteOnExit(); - // - // try (FileOutputStream fos = new FileOutputStream(result)) { - // transformer.transform(toTransform, new StreamResult(fos)); - // } - // return result; - // } - private TransformerFactory mFactory = null; - private Templates mXsltXRTemplate = null; - private Templates mXsltUBLTemplate = null; - private Templates mXsltCIOTemplate = null; - private Templates mXsltHTMLTemplate = null; - private Templates mXsltPDFTemplate = null; - private Templates mXsltZF1HTMLTemplate = null; + private final TransformerFactory mFactory; + private final Map mapOfTemplates = new LinkedHashMap<>(); + + private EStandard eStandard; public ZUGFeRDVisualizer() { mFactory = new net.sf.saxon.TransformerFactoryImpl(); - // fact = TransformerFactory.newInstance(); + // fact = TransformerFactory.newInstance() mFactory.setURIResolver(new ClasspathResourceURIResolver()); } - /*** - * returns which standard is used, CII or UBL - * @param fis inputstream (will be consumed) - * @return (facturx = cii) - */ - private EStandard findOutStandardFromRootNode(InputStream fis) { - - String zf1Signature = "CrossIndustryDocument"; - String zf2Signature = "CrossIndustryInvoice"; - String ublSignature = "Invoice"; - String ublCreditNoteSignature = "CreditNote"; - String cioSignature = "SCRDMCCBDACIOMessageStructure"; - - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - dbf.setNamespaceAware(true); - try { - DocumentBuilder db = dbf.newDocumentBuilder(); - Document doc = db.parse(new InputSource(fis)); - Element root = doc.getDocumentElement(); - if (root.getLocalName().equals(zf1Signature)) { - return EStandard.zugferd; - } else if (root.getLocalName().equals(zf2Signature)) { - return EStandard.facturx; - } else if (root.getLocalName().equals(ublSignature)) { - return EStandard.ubl; - } else if (root.getLocalName().equals(ublCreditNoteSignature)) { - return EStandard.ubl_creditnote; - } else if (root.getLocalName().equals(cioSignature)) { - return EStandard.orderx; - } - } catch (Exception e) { - LOGGER.error("Failed to recognize standard", e); + public String visualize(String xmlFilename, ELanguage lang) + throws IOException, TransformerException { + String rv = null; + eStandard = getEStandard(xmlFilename); + try (FileInputStream fis = new FileInputStream(xmlFilename)) { + rv = visualize(fis, lang); + } catch (IOException | SecurityException e) { + LOGGER.error(CANNOT_OPEN_XML_FILE, xmlFilename); } - return null; - } - - public String visualize(String xmlFilename, Language lang) throws IOException, TransformerException { - FileInputStream fis = new FileInputStream(xmlFilename); - return visualize(fis, lang); + return rv; } - public String visualize(InputStream inputXml, Language lang) throws IOException, TransformerException { - initTemplates(lang); - - String fileContent = new String(IOUtils.toByteArray(inputXml), StandardCharsets.UTF_8); - EStandard thestandard = findOutStandardFromRootNode(new ByteArrayInputStream(fileContent.getBytes(StandardCharsets.UTF_8))); - ByteArrayOutputStream htmlOutput = new ByteArrayOutputStream(); - - - ByteArrayInputStream xmlContentStream = new ByteArrayInputStream(fileContent.getBytes(StandardCharsets.UTF_8)); - - if (thestandard == EStandard.zugferd) { - applyZF1XSLT(xmlContentStream, htmlOutput); - return htmlOutput.toString(StandardCharsets.UTF_8); - } else if (thestandard == EStandard.facturx) { - //zf2 or fx - applyZF2XSLT(xmlContentStream, htmlOutput); - } else if (thestandard == EStandard.ubl) { - //zf2 or fx - applyUBL2XSLT(xmlContentStream, htmlOutput); - } else if (thestandard == EStandard.ubl_creditnote) { - //zf2 or fx - applyUBLCreditNote2XSLT(xmlContentStream, htmlOutput); - } else if (thestandard == EStandard.orderx) { - //zf2 or fx - applyCIO2XSLT(xmlContentStream, htmlOutput); - } else { - throw new IllegalArgumentException("File does not look like CII or UBL"); - } - Optional in = copyStream(htmlOutput); - ByteArrayOutputStream htmlOutStream = new ByteArrayOutputStream(); - if (in.isPresent()) { - applyXSLTToHTML(in.get(), htmlOutStream); + public String visualize(InputStream inputStream, ELanguage lang) { + initTemplates(); + ByteArrayOutputStream outputStream; + switch (eStandard) { + case zugferd: + outputStream = applyXSLT(ZF1_HTML_XSL, inputStream); + break; + case orderx: + outputStream = applyXSLT(CIO_XR_XSL, inputStream); + outputStream = applyXSLT(XR_HTML_XSL, outputStream, lang); + break; + case facturx: + outputStream = applyXSLT(CII_XR_XSL, inputStream); + outputStream = applyXSLT(XR_HTML_XSL, outputStream, lang); + break; + case ubl: + outputStream = applyXSLT(UBL_INVOICE_XR_XSL, inputStream); + outputStream = applyXSLT(XR_HTML_XSL, outputStream, lang); + break; + case ubl_creditnote: + outputStream = applyXSLT(UBL_CREDIT_NOTE_XR_XSL, inputStream); + outputStream = applyXSLT(XR_HTML_XSL, outputStream, lang); + break; + default: + throw new IllegalArgumentException(String.format("Cannot process doc type '%s'.", eStandard)); } - - return htmlOutStream.toString(StandardCharsets.UTF_8); + return outputStream != null ? outputStream.toString(StandardCharsets.UTF_8) : null; } - /** - * TODO: jstaerk: why not copy with that simple call: new ByteArrayInputStream(byteArrayOutputStream.toByteArray()) ? + /*** + * @param path to XML file + * @return EStandard */ - private Optional 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(); + private EStandard getEStandard(final String path) { + EStandard rv; + String localName = getRootName(path); + switch (localName) { + case "CrossIndustryDocument": + rv = EStandard.zugferd; + break; + case "CrossIndustryInvoice": + rv = EStandard.facturx; + break; + case "Invoice": + rv = EStandard.ubl; + break; + case "CreditNote": + rv = EStandard.ubl_creditnote; + break; + case "SCRDMCCBDACIOMessageStructure": + rv = EStandard.orderx; + break; + default: + LOGGER.error("Unknown document type '{}'.", localName); + rv = null; + break; } - return Optional.of(in); + return rv; } - - private void initTemplates(Language lang) throws TransformerConfigurationException { - if (mXsltXRTemplate == null) { - mXsltXRTemplate = mFactory.newTemplates( - new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/cii-xr.xsl"))); + private String getRootName(final String path) { + String rv = ""; + try (FileInputStream fis = new FileInputStream(path)) { + rv = getRootName(fis); + } catch (IOException | SecurityException e) { + LOGGER.error(CANNOT_OPEN_XML_FILE, path); } + return rv; + } - 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"))); + private String getRootName(final InputStream inputStream) { + String rv = ""; + try { + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + dbf.setNamespaceAware(true); + DocumentBuilder db = dbf.newDocumentBuilder(); + Document doc = db.parse(new InputSource(inputStream)); + Element root = doc.getDocumentElement(); + rv = root.getLocalName(); + } catch (ParserConfigurationException | SAXException | IOException e) { + LOGGER.error("Cannot parse XML file.", e); } + return rv; } - protected String toFOP(String xmlFilename) - throws IOException, TransformerException { - - FileInputStream fis = new FileInputStream(xmlFilename); - EStandard theStandard = findOutStandardFromRootNode(fis); - fis = new FileInputStream(xmlFilename);//rewind :-( - - return toFOP(fis, theStandard); + private void initTemplates() { + initTemplates(ClasspathResourceURIResolver.CUSTOM_BASE_PATH, CIO_XR_XSL); + initTemplates(ClasspathResourceURIResolver.MAIN_BASE_PATH, CII_XR_XSL); + initTemplates(ClasspathResourceURIResolver.MAIN_BASE_PATH, UBL_CREDIT_NOTE_XR_XSL); + initTemplates(ClasspathResourceURIResolver.MAIN_BASE_PATH, UBL_INVOICE_XR_XSL); + initTemplates(ClasspathResourceURIResolver.MAIN_BASE_PATH, XR_PDF_XSL); + initTemplates(ClasspathResourceURIResolver.MAIN_BASE_PATH, XR_HTML_XSL); + initTemplates(ClasspathResourceURIResolver.ZF10_BASE_PATH, ZF1_HTML_XSL); } - protected String toFOP(InputStream is, EStandard theStandard) - throws TransformerException, IOException { - - try { - if (mXsltPDFTemplate == null) { - mXsltPDFTemplate = mFactory.newTemplates( - new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/xr-pdf.xsl"))); + private void initTemplates(final String basePath, final String fileName) { + if (!mapOfTemplates.containsKey(fileName)) { + try { + mapOfTemplates.put( + fileName, + mFactory.newTemplates( + ClasspathResourceURIResolver.getSource(basePath + fileName) + ) + ); + } catch (TransformerConfigurationException e) { + LOGGER.error("Cannot retrieve transformation script '{}'.", fileName); } - } catch (TransformerConfigurationException ex) { - LOGGER.error("Failed to init XSLT templates", ex); } + } - ByteArrayOutputStream iaos = new ByteArrayOutputStream(); - - //zf2 or fx - if (theStandard == EStandard.facturx) { - applyZF2XSLT(is, iaos); - } else if (theStandard == EStandard.ubl) { - applyUBL2XSLT(is, iaos); - } else if (theStandard == EStandard.ubl_creditnote) { - applyUBLCreditNote2XSLT(is, iaos); + protected ByteArrayOutputStream applyXSLT(final String fileName, final InputStream inputStream) { + ByteArrayOutputStream rv = new ByteArrayOutputStream(); + if (mapOfTemplates.containsKey(fileName)) { + try { + Templates templates = mapOfTemplates.get(fileName); + Transformer transformer = templates.newTransformer(); + transformer.transform(new StreamSource(inputStream), new StreamResult(rv)); + } catch (TransformerException e) { + LOGGER.error("Cannot apply 1st pass transformation script '{}'.", fileName); + } } + return rv; + } + protected ByteArrayOutputStream applyXSLT(final String fileName, final ByteArrayOutputStream outputStream, final ELanguage lang) { + return applyXSLT(fileName, new ByteArrayInputStream(outputStream.toByteArray()), lang); + } - Optional in = copyStream(iaos); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - if (in.isPresent()) { - applyXSLTToPDF(in.get(), baos); + protected ByteArrayOutputStream applyXSLT(final String fileName, final InputStream inputStream, final ELanguage lang) { + ByteArrayOutputStream rv = new ByteArrayOutputStream(); + if (mapOfTemplates.containsKey(fileName)) { + try { + Templates templates = mapOfTemplates.get(fileName); + Transformer transformer = templates.newTransformer(); + transformer.setParameter("lang", lang.name().toLowerCase()); + transformer.transform(new StreamSource(inputStream), new StreamResult(rv)); + } catch (TransformerException e) { + LOGGER.error("Cannot apply 2nd pass transformation script '{}'.", fileName); + } } - return baos.toString(StandardCharsets.UTF_8); + return rv; } public void toPDF(String xmlFilename, String pdfFilename) { + toPDF(xmlFilename, pdfFilename, ELanguage.EN); + } + public void toPDF(String xmlFilename, String pdfFilename, final ELanguage lang) { // the writing part - File XMLinputFile = new File(xmlFilename); - - 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(XMLinputFile.getAbsolutePath()); - } catch (TransformerException | IOException e) { - LOGGER.error("Failed to apply FOP", e); + File xmlFile = new File(xmlFilename); + String result = this.toFOP(xmlFile.getAbsolutePath(), lang); + if (result == null) { + throw new IllegalArgumentException(String.format("FOP cannot process XML file '%s'.", xmlFilename)); } DefaultConfigurationBuilder cfgBuilder = new DefaultConfigurationBuilder(); - - Configuration cfg = null; + Configuration cfg; try { - cfg = cfgBuilder.build(CLASS_LOADER.getResourceAsStream("fop-config.xconf")); + cfg = cfgBuilder.build(ClasspathResourceURIResolver.CLASS_LOADER.getResourceAsStream("fop-config.xconf")); } catch (ConfigurationException e) { - throw new RuntimeException(e); + throw new IllegalArgumentException("Cannot parse FOP configuration.", 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.newInstance(new File("c:\\Users\\jstaerk\\temp\\fop-config.xconf")); - + // 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.newInstance(new File("c:\\Users\\jstaerk\\temp\\fop-config.xconf")) fopFactory.getFontManager().setResourceResolver( - ResourceResolverFactory.createInternalResourceResolver( - new File(".").toURI(), - new ClasspathResolverURIAdapter())); - + 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). - + // 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); } } - protected void applyZF2XSLT(final InputStream xmlFile, final OutputStream htmlOutStream) - throws TransformerException { - if (mXsltXRTemplate == null) { - mXsltXRTemplate = mFactory.newTemplates( - new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/cii-xr.xsl"))); - - } - Transformer transformer = mXsltXRTemplate.newTransformer(); - - transformer.transform(new StreamSource(xmlFile), new StreamResult(htmlOutStream)); - } - - protected void applyCIO2XSLT(final InputStream xmlFile, final OutputStream htmlOutstream) - throws TransformerException { - if (mXsltCIOTemplate == null) { - mXsltCIOTemplate = mFactory.newTemplates( - new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/cio-xr.xsl"))); - } - Transformer transformer = mXsltCIOTemplate.newTransformer(); - - transformer.transform(new StreamSource(xmlFile), new StreamResult(htmlOutstream)); - } - - protected void applyUBL2XSLT(final InputStream xmlFile, final OutputStream htmlOutStream) - throws TransformerException { - if (mXsltUBLTemplate == null) { - mXsltUBLTemplate = mFactory.newTemplates( - new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/ubl-invoice-xr.xsl"))); - } - Transformer transformer = mXsltUBLTemplate.newTransformer(); - - transformer.transform(new StreamSource(xmlFile), new StreamResult(htmlOutStream)); - } - - protected void applyUBLCreditNote2XSLT(final InputStream xmlFile, final OutputStream htmlOutStream) - throws TransformerException { - if (mXsltUBLTemplate == null) { - mXsltUBLTemplate = mFactory.newTemplates( - new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/ubl-creditnote-xr.xsl"))); + protected String toFOP(final String path, final ELanguage lang) { + String rv = null; + eStandard = getEStandard(path); + try (FileInputStream fis = new FileInputStream(path)) { + rv = toFOP(fis, lang); + } catch (IOException | SecurityException e) { + LOGGER.error(CANNOT_OPEN_XML_FILE, path); } - Transformer transformer = mXsltUBLTemplate.newTransformer(); - - transformer.transform(new StreamSource(xmlFile), new StreamResult(htmlOutStream)); - } - - protected void applyZF1XSLT(final InputStream xmlFile, final OutputStream htmlOutStream) - throws TransformerException { - Transformer transformer = mXsltZF1HTMLTemplate.newTransformer(); - - transformer.transform(new StreamSource(xmlFile), new StreamResult(htmlOutStream)); - } - - protected void applyXSLTToHTML(final InputStream xmlFile, final OutputStream htmlOutStream) - throws TransformerException, IOException { - Transformer transformer = mXsltHTMLTemplate.newTransformer(); - - transformer.transform(new StreamSource(xmlFile), new StreamResult(htmlOutStream)); - xmlFile.close(); + return rv; } - protected void applyXSLTToPDF(final InputStream xmlFile, final OutputStream PDFOutstream) - throws TransformerException, IOException { - Transformer transformer = mXsltPDFTemplate.newTransformer(); - - transformer.transform(new StreamSource(xmlFile), new StreamResult(PDFOutstream)); - xmlFile.close(); - } - - private static class ClasspathResourceURIResolver implements URIResolver { - ClasspathResourceURIResolver() { - // Do nothing, just prevents synthetic access warning. - } - - @Override - public Source resolve(String href, String base) { - return new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/" + href)); + protected String toFOP(InputStream inputStream, final ELanguage lang) { + initTemplates(); + ByteArrayOutputStream outputStream; + switch (eStandard) { + case facturx: + outputStream = applyXSLT(CII_XR_XSL, inputStream); + outputStream = applyXSLT(XR_PDF_XSL, outputStream, lang); + break; + case ubl: + outputStream = applyXSLT(UBL_INVOICE_XR_XSL, inputStream); + outputStream = applyXSLT(XR_PDF_XSL, outputStream, lang); + break; + case ubl_creditnote: + outputStream = applyXSLT(UBL_CREDIT_NOTE_XR_XSL, inputStream); + outputStream = applyXSLT(XR_PDF_XSL, outputStream, lang); + break; + default: + throw new IllegalArgumentException(String.format("Cannot process doc type '%s'.", eStandard)); } + return outputStream != null ? outputStream.toString(StandardCharsets.UTF_8) : null; } } diff --git a/library/src/main/java/org/mustangproject/util/NodeMap.java b/library/src/main/java/org/mustangproject/util/NodeMap.java index 77064d074..b92b7e0d4 100644 --- a/library/src/main/java/org/mustangproject/util/NodeMap.java +++ b/library/src/main/java/org/mustangproject/util/NodeMap.java @@ -30,7 +30,6 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; diff --git a/library/src/main/resources/FreeSans.ttf b/library/src/main/resources/FreeSans.ttf deleted file mode 100644 index 9db958532..000000000 Binary files a/library/src/main/resources/FreeSans.ttf and /dev/null differ diff --git a/library/src/main/resources/Normalize.xslt b/library/src/main/resources/Normalize.xslt new file mode 100644 index 000000000..fe3fae81e --- /dev/null +++ b/library/src/main/resources/Normalize.xslt @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/library/src/main/resources/stylesheets/cii-xr.xsl b/library/src/main/resources/stylesheets/cii-xr.xsl deleted file mode 100644 index f741c9039..000000000 --- a/library/src/main/resources/stylesheets/cii-xr.xsl +++ /dev/null @@ -1,2650 +0,0 @@ - - - - - - Author: - KoSIT Bremen (kosit@finanzen.bremen.de) - - Fassung vom: 2020-06-30+02:00 - modifiziert durch Dr. Jan Thiele am: 2021-02-11+01:00 - Überführt eine zur EN 16931 konforme elektronische Rechnung in der konkreten Syntax UNCEFACT.CII.D16B - in eine Instanz gemäß des Schemas für den Namensraum - urn:ce.eu:en16931:2017:xoev-de:kosit:standard:xrechnung-1. - - Das Skript setzt voraus, dass das zu verarbeitende Dokument valide bzgl. des XML Schemas und der - Schematron-Regeln der Quelle ist. Für nicht valide Dokumente ist das Ergebnis nicht definiert. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ; - - - - - - - - - - - - - - - - - - - ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #SKONTO# - - TAGE - WOCHEN - - =#PROZENT=# - - - - - - - ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ILLEGAL DATE FORMAT: <para>Mit diesem Datentyp wird ein kalendarisches Datum - abgebildet, wie es in der ISO 8601 Spezifikation <quote>Calendar date complete representation</quote> - beschrieben ist (siehe ISO 8601:2004, Abschnitt 5.2.1.1). Das Datum beinhaltet keine Zeitangabe. Das - konkret zu verwendende Format ist abhängig von der genutzten Syntax.</para> - <para>Der Datentyp basiert auf dem Typ <quote>Date Time. Type</quote>, wie in ISO - 15000-5:2014 Anhang B definiert.</para> - - - - - - - - - - - - ILLEGAL DATE FORMAT: <para>Mit diesem Datentyp wird ein kalendarisches Datum - abgebildet, wie es in der ISO 8601 Spezifikation <quote>Calendar date complete representation</quote> - beschrieben ist (siehe ISO 8601:2004, Abschnitt 5.2.1.1). Das Datum beinhaltet keine Zeitangabe. Das - konkret zu verwendende Format ist abhängig von der genutzten Syntax.</para> - <para>Der Datentyp basiert auf dem Typ <quote>Date Time. Type</quote>, wie in ISO - 15000-5:2014 Anhang B definiert.</para> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Liefert einen XPath-Pfad, welches $n eindeutig identifiziert. - - - - - - - - - - - Liefert einen XPath-Pfad, welches $n eindeutig identifiziert. - - - - - / - - - [ - - ] - - - - /@ - - - diff --git a/library/src/main/resources/stylesheets/xr-mapping.xsl b/library/src/main/resources/stylesheets/xr-mapping.xsl deleted file mode 100644 index be261921f..000000000 --- a/library/src/main/resources/stylesheets/xr-mapping.xsl +++ /dev/null @@ -1,898 +0,0 @@ - - - - - - - - - BT-10 - - - - BT-44 - - - - BT-50 - - - - BT-51 - - - - BT-163 - - - - BT-53 - - - - BT-52 - - - - BT-55 - - - - BT-46 - - - - BT-46 - - - - BT-56 - - - - BT-57 - - - - BT-58 - - - - BT-27 - - - - BT-35 - - - - BT-36 - - - - - - - - BT-38 - - - - BT-37 - - - - BT-39 - - - - BT-40 - - - - BT-29 - - - - BT-29 - - - - BT-41 - - - - BT-42 - - - - BT-43 - - - - BT-1 - - - - BT-2 - - - - BT-3 - - - - BT-5 - - - - BT-11 - - - - BT-12 - - - - BT-13 - - - - BT-14 - - - - BT-73 - - - - BT-74 - - - - BT-25 - - - - BT-26 - - - - BT-106 - netto - - - - BT-107 - netto - - - - BT-108 - netto - - - - BT-109 - netto - - - - BT-110 - - - - BT-111 - - - - BT-112 - brutto - - - - BT-113 - brutto - - - - BT-114 - brutto - - - - BT-115 - brutto - - - - BT-118 - - - - BT-116 - netto - - - - BT-119 - - - - BT-117 - - - - BT-120 - - - - BT-121 - - - - BT-95 - - - - BT-93 - netto - - - - BT-94% - - - - BT-92 - netto - - - - BT-96 - - - - BT-97 - - - - BT-98 - - - - BT-102 - - - - BT-100 - netto - - - - BT-101 - - - - BT-99 - netto - - - - BT-103 - - - - BT-104 - - - - BT-105 - - - - BT-20 - - - - BT-9 - - - - BT-81 - - - - BT-82 - - - - BT-83 - - - - BT-87 - - - - BT-88 - - - - BT-89 - - - - BT-91 - - - - BT-90 - - - - BT-85 - - - - BT-84 - - - - BT-86 - - - - BT-21 - - - - BT-22 - - - - BT-28 - - - - BT-34 - - - - BT-34 - - - - BT-30 - - - - BT-31 - - - - BT-32 - - - - BT-32 - - - - BT-33 - - - - BT-6 - - - - BT-62 - - - - BT-64 - - - - BT-65 - - - - BT-164 - - - - BT-67 - - - - BT-66 - - - - BT-68 - - - - BT-69 - - - - BT-63 - - - - BT-45 - - - - BT-54 - - - - BT-49 - - - - BT-49 - - - - BT-47 - - - - BT-47 - - - - BT-48 - - - - BT-7 - - - - BT-8 - - - - BT-19 - - - - BT-71 - - - - BT-71 - - - - BT-72 - - - - BT-70 - - - - BT-75 - - - - BT-76 - - - - BT-165 - - - - BT-78 - - - - BT-77 - - - - BT-79 - - - - BT-80 - - - - BT-17 - - - - BT-15 - - - - BT-16 - - - - BT-23 - - - - BT-24 - - - - BT-18 - - - - BT-18 - - - - BT-59 - - - - BT-60 - - - - BT-60 - - - - BT-61 - - - - BT-61 - - - - BT-122 - - - - BT-123 - - - - BT-124 - - - - BT-125 - - - - BT-125 - - - - BT-125 - - - - - - - - - - - - - - - - - - - - BT-127 - - - - BT-128 - - - - BT-128 - - - - BT-132 - - - - BT-133 - - - - BT-133 - - - - BT-134 - - - - BT-135 - - - - BT-135 - - - - BT-129 - - - - BT-130 - - - - BT-146 - - - - BT-131 - - - - BT-147 - - - - BT-148 - - - - BT-149 - - - - BT-150 - - - - BT-151 - - - - BT-152 - - - - BT-153 - - - - BT-154 - - - - BT-155 - - - - BT-156 - - - - BT-157 - - - - BT-157 - - - - BT-158 - - - - BT-158 - - - - BT-158 - - - - BT-159 - - - - BT-137 - - - - BT-138 - - - - BT-136 - - - - BT-139 - - - - BT-140 - - - - BT-142 - - - - BT-143 - - - - BT-141 - - - - BT-144 - - - - BT-145 - - - - - - - - - - - BG-7 - - - - BG-4 - - - - BG-4 - - - - BG-22 - - - - BG-23 - - - - BG-20 - - - - BG-21 - - - - - - - - - - BG-4 - - - - BG-18 - - - - BG-19 - - - - BG-17 - - - - BG-1 - - - - - - - - BG-26 - - - - BG-29 - - - - BG-27 - - - - BG-28 - - - - BG-31 - - - - BG-32 - - - - - - - - BG-4 - - - - BG-11 - - - - BG-7 - - - - BG-13 - - - - - - - - BG-10 - - - - - - - - - - - - - - - - - - - - - - unknown - - - - - diff --git a/library/src/main/resources/stylesheets/xrechnung-html.de.ids.xsl b/library/src/main/resources/stylesheets/xrechnung-html.de.ids.xsl deleted file mode 100644 index ab453b511..000000000 --- a/library/src/main/resources/stylesheets/xrechnung-html.de.ids.xsl +++ /dev/null @@ -1,2297 +0,0 @@ - - - - - - - - - - - - - - - XRechnung - - - - -
- -
-
-
- - - - - -
-
- - - -
- - - -
-
Wir übernehmen keine Haftung für die Richtigkeit der Daten.
-
-
- - - -
- - - -
-
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
-
- - -
-
- -
-
- - -
-
- -
-
- -
-
-
-
- - - -
-
Informationen zum Käufer
-
-
-
Leitweg-ID (BT-10):
-
-
-
-
Name (BT-44):
-
-
-
-
Straße / Haus-Nr. (BT-50):
-
-
-
-
Postfach (BT-51):
-
-
-
-
Adresszusatz (BT-163):
-
-
-
-
PLZ (BT-53):
-
-
-
-
Ort (BT-52):
-
-
-
-
Bundesland (BT-54):
-
-
-
-
Land (BT-55):
-
-
-
-
Kennung / Kunden-Nr. (BT-46):
-
-
-
-
Schema der Kennung (BT-46-ID):
-
-
-
-
Name (BT-56):
-
-
-
-
Telefon (BT-57):
-
-
-
-
E-Mail-Adresse (BT-58):
-
-
-
-
-
- - - -
-
Informationen zum Verkäufer
-
-
-
-
-
-
-
Firmenname (BT-27):
-
-
-
-
Straße / Haus-Nr. (BT-35):
-
-
-
-
Postfach (BT-36):
-
-
-
-
Adresszusatz (BT-162):
-
-
-
-
PLZ (BT-38):
-
-
-
-
Ort (BT-37):
-
-
-
-
Bundesland (BT-39):
-
-
-
-
Ländercode (BT-40):
-
-
-
-
Kennung BT-29):
-
-
-
-
Schema der Kennung (BT-29-ID):
-
-
-
-
Name: (BT-41)
-
-
-
-
Telefon (BT-42):
-
-
-
-
E-Mail-Adresse (BT-43):
-
-
-
-
-
- - - -
-
-
Rechnungsdaten
-
-
-
-
-
Rechnungsnummer (BT-1):
-
-
-
-
Rechnungsdatum (BT-2):
-
-
-
-
Rechnungsart (BT-3):
-
-
-
-
Währung: (BT-5)
-
-
-
-

Abrechnungszeitraum:

-
-
-
von: (BT-73)
-
-
-
-
bis: (BT-74)
-
-
-
-
-
-
-
-
-
Projektnummer (BT-11):
-
-
-
-
Vertragsnummer (BT-12):
-
-
-
-
Bestellnummer (BT-13):
-
-
-
-
Auftragsnummer (BT-14):
-
-
-
-

Vorausgegangene Rechnungen:

- -
-
-
-
-
- - -
-
-
Rechnungsnummer (BT-25):
-
-
-
-
Rechnungsdatum (BT-26):
-
-
-
-
- - - -
-
-
Gesamtbeträge der Rechnung (BG-22)
-
-
-
Summe aller Positionen (BT-106)
-
netto
-
-
-
-
Summe Nachlässe (BT-107)
-
netto
-
-
-
-
Summe Zuschläge (BT-108)
-
netto
-
-
-
-
Gesamtsumme (BT-109)
-
netto
-
-
-
-
Summe Umsatzsteuer (BT-110)
-
-
-
-
-
Summe Umsatzsteuer in Abrechnungswährung (BT-111)
-
-
-
-
-
Gesamtsumme (BT-112)
-
brutto
-
-
-
-
Gezahlter Betrag (BT-113)
-
brutto
-
-
-
-
Rundungsbetrag (BT-114)
-
brutto
-
-
-
-
Fälliger Betrag (BT-115)
-
brutto
-
-
-
-
-
-
- - - -
-
-
Aufschlüsselung der Umsatzsteuer auf Ebene der Rechnung (BG-23)
-
-
-
Umsatzsteuerkategorie (BT-118):
-
-
-
-
-
Gesamtsumme (BT-116)
-
netto
-
-
-
-
Umsatzsteuersatz (BT-119)
-
-
%
-
-
-
Umsatzsteuerbetrag (BT-117)
-
-
-
-
- -
-
Befreiungsgrund (BT-120):
-
Kennung für den Befreiungsgrund (BT-121):
-
-
-
-
- - - -
-
-
Nachlass auf Ebene der Rechnung (BG-20)
-
-
-
Umsatzsteuerkategorie des Nachlasses (BT-95):
-
-
-
-
-
Grundbetrag (BT-93)
-
netto
-
-
-
-
Prozentsatz (BT-94)
-
-
%
-
-
-
Nachlass (BT-92)
-
netto
-
-
-
-
Umsatzsteuersatz des Nachlasses (BT-96)
-
-
-
-
-
-
Grund für den Nachlass (BT-97):
-
Document level allowance reason code (BT-98):
-
-
-
-
-
- - - -
-
-
Zuschlag auf Ebene der Rechnung (BG-21)
-
-
-
Umsatzsteuerkategorie des Zuschlages BT-102):
-
-
-
-
-
Grundbetrag (BT-100)
-
netto
-
-
-
-
Prozentsatz (BT-101)
-
-
%
-
-
-
Zuschlag (BT-99)
-
netto
-
-
-
-
Umsatzsteuersatz des Zuschlages (BT-103)
-
-
-
-
-
-
Grund für den Zuschlag (BT-104):
-
Document level charge reason code (BT-105):
-
-
-
-
-
- - - -
-
Zahlungsdaten
-
-
-
Skonto; weitere Zahlungsbed. (BT-20):
-
- - - -
-
-
-
-
-
-
Fälligkeitsdatum: (BT-9)
-
- - - -
-
-
-
-
-
-
Code für das Zahlungsmittel (BT-81):
-
-
-
-
Zahlungsmittel (BT-82):
-
-
-
-
Verwendungszweck (BT-83):
-
-
-
-
-
- - - -
-
Karteninformation (BG-18)
-
-
-
Kartennummer (BT-87):
-
-
-
-
Karteninhaber (BT-88):
-
-
-
-
-
- - - -
-
Lastschrift (BG-19)
-
-
-
Mandatsreferenznr. (BT-89):
-
-
-
-
IBAN (BT-91):
-
-
-
-
Gläubiger-ID (BT-90):
-
-
-
-
-
- - - -
-
Überweisung (BG-17)
- -
-
-
Kontoinhaber (BT-85):
-
-
-
-
IBAN (BT-84):
-
-
-
-
BIC (BT-86):
-
-
-
-
-
-
- - - -
-
Bemerkung zur Rechnung (BG-1)
-
-
-
Betreff (BT-21):
-
-
-
-
Bemerkung (BT-22):
-
-
-
-
-
- - - -
-
Wir übernehmen keine Haftung für die Richtigkeit der Daten.
- -
-
- - - -
-
-
-
Position (BT-126)
-
-
-
Freitext (BT-127):
-
-
-
-
Objektkennung (BT-128):
-
-
-
-
Schema der Objektkennung (BT-128-ID):
-
-
-
-
Nummer der Auftragsposition (BT-132):
-
-
-
-
Kontierungshinweis /Kostenstelle (BT-133):
-
-
-

Abrechnungszeitraum (BG-26):

-
-
von (BT-134):
-
-
-
-
bis (BT-135):
-
-
-
-
-
-
Preiseinzelheiten (BG-29)
-
-
-
Menge (BT-129)
-
-
-
-
Einheit (BT-130)
-
-
-
-
Preis pro Einheit (netto) (BT-146)
-
-
-
-
Gesamtpreis (netto) (BT-131)
-
-
-
-
-
-
Rabatt (netto) (BT-147):
-
-
-
-
Listenpreis (netto) BT-148):
-
-
-
-
Anzahl der Einheit (BT-149):
-
-
-
-
Code der Maßeinheit (BT-150):
-
-
-
-
Umsatzsteuer (BT-151):
-
-
-
-
Umsatzsteuersatz in % (BT-152):
-
%
-
-
-
-
-
-
-
-
-
Nachlässe auf Ebene der Rechnungsposition (BG-27)
- -
-
-
Grundbetrag (netto) (BT-137)
-
-
-
-
Prozentsatz (BT-138)
-
%
-
-
-
Nachlass (netto) (BT-136)
-
-
-
-
-
Grund des Nachlasses (BT-139):
-
Code für den Nachlassgrund (BT-140):
-
-
-
-
-
Zuschläge auf Ebene der Rechnungsposition (BG-28)
- -
-
-
Grundbetrag (netto) (BT-142)
-
-
-
-
Prozentsatz (BT-143)
-
%
-
-
-
Zuschlag (netto) (BT-141)
-
-
-
-
-
Grund des Zuschlags (BT-144):
-
Code für den Zuschlagsgrund (BT-145):
-
-
-
-
-
-
-
-
-
Artikelinformationen (BG-31)
-
-
-
-
-
-
Bezeichnung (BT-153):
-
-
-
-
Beschreibung (BT-154):
-
-
-
-
Artikelnummer (BT-155):
-
-
-
-
Kunden-Material-Nr. (BT-156):
-
-
-

Eigenschaften des Artikels (BG-32):

- -
-
-
-
-
-
-
Artikelkennung (EAN)(BT-157):
-
-
-
-
Schema der Artikelkennung (BT-157-ID)):
-
-
-
-
Code der Artikelklassifizierung (BT-158):
-
-
-
-
Kennung zur Bildung des Schemas (BT-158-ID):
-
-
-
-
Version zur Bildung des Schemas (BT-158-Vers-ID):
-
-
-
-
Code des Herkunftslandes (BT-159):
-
-
-
-
-
-
-
-
-
- -
- - -
-
-
-
-
- - -
-
-
-
-
- - - -
-
Wir übernehmen keine Haftung für die Richtigkeit der Daten.
-
-
- -
- -
-
-
-
- -
- -
-
-
-
- -
- -
-
-
-
- - - -
-
Informationen zum Verkäufer (BG-4)
-
-
-
Abweichender Handelsname (BT-28):
-
-
-
-
Bundesland (BT-39):
-
-
-
-
Elektronische Adresse BT-34):
-
-
-
-
Schema der elektronischen Adresse (BT-34-ID):
-
-
-
-
Register-/Registriernummer (BT-30):
-
-
-
-
Umsatzsteuer-ID (BT-31):
-
-
-
-
Steuernummer (BT-32):
-
-
-
-
Schema der Steuernummer (BT-32-Schema):
-
-
-
-
Weitere rechtliche Informationen (BT-33):
-
-
-
-
Code der Umsatzsteuerwährung (BT-6):
-
-
-
-
-
- - - -
-
Steuervertreter des Verkäufers (BG-11)
-
-
-
Name (BT-62):
-
-
-
-
Straße / Hausnummer (BT-64):
-
-
-
-
Postfach (BT-65):
-
-
-
-
Adresszusatz (BT-164):
-
-
-
-
PLZ (BT-67):
-
-
-
-
Ort (BT-66):
-
-
-
-
Bundesland (BT-68):
-
-
-
-
Ländercode (BT-69):
-
-
-
-
Umsatzsteuer-ID (BT-63):
-
-
-
-
-
- - - -
-
Informationen zum Käufer (BG-7)
-
-
-
Abweichender Handelsname (BT-45):
-
-
-
-
Bundesland (BT-54):
-
-
-
-
Elektronische Adresse (BT-49):
-
-
-
-
Schema der elektronischen Adresse (BT-49-ID):
-
-
-
-
Register-/Registriernummer (BT-47):
-
-
-
-
Schema der Register-/Registriernummer (BT-47-ID):
-
-
-
-
Umsatzsteuer-ID (BT-48):
-
-
-
-
Abrechnungsdatum der Umsatzsteuer (BT-7):
-
- - - -
-
-
-
-
-
-
Code des Umsatzsteuer-Abrechnungsdatums (BT-8):
-
-
-
-
Kontierungsinformation / Kostenstelle (BT-19):
-
-
-
-
-
- - - -
-
Lieferinformationen (BG-13)
-
-
-
Kennung des Lieferorts (BT-71):
-
-
-
-
Schema der Kennung (BT-71-ID):
-
-
-
-
Lieferdatum /BT-72):
-
-
-
-
Name des Empfängers (BT-70):
-
-
-
-
Straße / Haus-Nr. (BT-75):
-
-
-
-
Postfach (BT-76):
-
-
-
-
Adresszusatz (BT-165):
-
-
-
-
PLZ (BT-78):
-
-
-
-
Ort (BT-77):
-
-
-
-
Bundesland (BT-79):
-
-
-
-
Land (BT-80):
-
-
-
-
-
- - - -
-
Informationen zum Vertrag
-
-
-
Vergabenummer (BT-17):
-
-
-
-
Kennung der Empfangsbestätigung (BT-15):
-
-
-
-
Kennung der Versandanzeige (BT-16):
-
-
-
-
Prozesskennung (BT-23):
-
-
-
-
Spezifikationskennung BT-24):
-
-
-
-
Objektkennung (BT-18):
-
-
-
-
Schema der Objektkennung (BT-18):
-
-
-
-
-
- - - -
-
Vom Verkäufer abweichender Zahlungsempfänger (BG-10)
-
-
-
Name (BT-59):
-
-
-
-
Kennung (BT-60):
-
-
-
-
Schema der Kennung (BT-60-ID):
-
-
-
-
Register-/Registriernummer (BT-61):
-
-
-
-
Schema der Register-/Registriernummer (BT-61-ID):
-
-
-
-
-
- - - -
-
Wir übernehmen keine Haftung für die Richtigkeit der Daten.
-
-
-
-
Rechnungsbegründende Unterlagen (BG-24)
- -
-
-
-
-
- - - -
-
-
Kennung (BT-122):
-
-
-
-
Beschreibung (BT-123):
-
-
-
-
Verweis (z.B. Internetadresse)(BT-124):
-
-
-
-
Anhangsdokument (BT-125):
-
- Öffnen -
- - -
-
-
Format des Anhangdokuments (BT-125):
-
-
-
-
Name des Anhangsdokuments (BT-125):
-
-
-
-
- - - -
-
-
-
-
Bearbeitungshistorie
- -
-
-
-
-
- - - -
-
-
Datum/Uhrzeit:
-
-
-
-
Betreff:
-
-
-
-
Text:
-
-
-
-
Details:
-
-
-
-
- -
diff --git a/library/src/main/resources/stylesheets/xrechnung-html.de.xsl b/library/src/main/resources/stylesheets/xrechnung-html.de.xsl index e2a2e930d..944986d69 100644 --- a/library/src/main/resources/stylesheets/xrechnung-html.de.xsl +++ b/library/src/main/resources/stylesheets/xrechnung-html.de.xsl @@ -1,229 +1,229 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/library/src/main/resources/stylesheets/xrechnung-html.en.xsl b/library/src/main/resources/stylesheets/xrechnung-html.en.xsl index c989a430a..0a076b29b 100644 --- a/library/src/main/resources/stylesheets/xrechnung-html.en.xsl +++ b/library/src/main/resources/stylesheets/xrechnung-html.en.xsl @@ -1,229 +1,229 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/library/src/main/resources/stylesheets/xrechnung-html.fr.xsl b/library/src/main/resources/stylesheets/xrechnung-html.fr.xsl index 5be83bab3..2c6ad7bea 100644 --- a/library/src/main/resources/stylesheets/xrechnung-html.fr.xsl +++ b/library/src/main/resources/stylesheets/xrechnung-html.fr.xsl @@ -1,229 +1,229 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/library/src/main/resources/stylesheets/xrechnung-html.xsl b/library/src/main/resources/stylesheets/xrechnung-html.xsl deleted file mode 100644 index 54a0de84d..000000000 --- a/library/src/main/resources/stylesheets/xrechnung-html.xsl +++ /dev/null @@ -1,1184 +0,0 @@ - - - - - - - - - - - - - - - XRechnung - - - - -
- -
-
-
- - - - - -
-
- - - -
- - - -
-
Wir übernehmen keine Haftung für die Richtigkeit der Daten.
-
-
- - - -
- - - -
-
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
-
- - -
-
- -
-
- - -
-
- -
-
- -
-
-
-
- - - -
-
Informationen zum Käufer
-
-
-
Leitweg-ID:
-
-
-
-
Name:
-
-
-
-
Straße / Hausnummer:
-
-
-
-
Postfach:
-
-
-
-
Adresszusatz:
-
-
-
-
PLZ:
-
-
-
-
Ort:
-
-
-
-
Land:
-
-
-
-
Kennung:
-
-
-
-
Schema der Kennung:
-
-
-
-
Name:
-
-
-
-
Telefon:
-
-
-
-
E-Mail-Adresse:
-
-
-
-
-
- - - -
-
Informationen zum Verkäufer
-
-
-
Firmenname:
-
-
-
-
Straße / Hausnummer:
-
-
-
-
Postfach:
-
-
-
-
Adresszusatz:
-
-
-
-
PLZ:
-
-
-
-
Ort:
-
-
-
-
Bundesland:
-
-
-
-
Ländercode:
-
-
-
-
Kennung:
-
-
-
-
Schema der Kennung:
-
-
-
-
Name:
-
-
-
-
Telefon:
-
-
-
-
E-Mail-Adresse:
-
-
-
-
-
- - - -
-
-
Rechnungsdaten
-
-
-
-
-
Rechnungsnummer:
-
-
-
-
Rechnungsdatum:
-
-
-
-
Rechnungsart:
-
-
-
-
Währung:
-
-
-
-

Abrechnungszeitraum:

-
-
-
von:
-
-
-
-
bis:
-
-
-
-
-
-
-
-
-
Projektnummer:
-
-
-
-
Vertragsnummer:
-
-
-
-
Bestellnummer:
-
-
-
-
Auftragsnummer:
-
-
-
-

Vorausgegangene Rechnungen:

- -
-
-
-
-
- - -
-
-
Rechnungsnummer:
-
-
-
-
Rechnungsdatum:
-
-
-
-
- - - -
-
-
Gesamtbeträge der Rechnung
-
-
-
Summe aller Positionen
-
netto
-
-
-
-
Summe Nachlässe
-
netto
-
-
-
-
Summe Zuschläge
-
netto
-
-
-
-
Gesamtsumme
-
netto
-
-
-
-
Summe Umsatzsteuer
-
-
-
-
-
Summe Umsatzsteuer in Abrechnungswährung
-
-
-
-
-
Gesamtsumme
-
brutto
-
-
-
-
Gezahlter Betrag
-
brutto
-
-
-
-
Rundungsbetrag
-
brutto
-
-
-
-
Fälliger Betrag
-
brutto
-
-
-
-
-
-
- - - -
-
-
Aufschlüsselung der Umsatzsteuer auf Ebene der Rechnung
-
-
-
Umsatzsteuerkategorie:
-
-
-
-
-
Gesamtsumme
-
netto
-
-
-
-
Umsatzsteuersatz
-
-
%
-
-
-
Umsatzsteuerbetrag
-
-
-
-
- -
-
Befreiungsgrund:
-
Kennung für den Befreiungsgrund:
-
-
-
-
- - - -
-
-
Nachlass auf Ebene der Rechnung
-
-
-
Umsatzsteuerkategorie des Nachlasses:
-
-
-
-
-
Grundbetrag
-
netto
-
-
-
-
Prozentsatz
-
-
%
-
-
-
Nachlass
-
netto
-
-
-
-
Umsatzsteuersatz des Nachlasses
-
-
-
-
-
-
Grund für den Nachlass:
-
Document level allowance reason code:
-
-
-
-
-
- - - -
-
-
Zuschlag auf Ebene der Rechnung
-
-
-
Umsatzsteuerkategorie des Zuschlages:
-
-
-
-
-
Grundbetrag
-
netto
-
-
-
-
Prozentsatz
-
-
%
-
-
-
Zuschlag
-
netto
-
-
-
-
Umsatzsteuersatz des Zuschlages
-
-
-
-
-
-
Grund für den Zuschlag:
-
Document level charge reason code:
-
-
-
-
-
- - - -
-
Zahlungsdaten
-
-
-
Skonto; weitere Zahlungsbedingungen:
-
-
-
-
Fälligkeitsdatum:
-
-
-
-
Code für das Zahlungsmittel:
-
-
-
-
Zahlungsmittel:
-
-
-
-
Verwendungszweck:
-
-
-
-
-
- - - -
-
Karteninformation
-
-
-
Kartennummer:
-
-
-
-
Karteninhaber:
-
-
-
-
-
- - - -
-
Lastschrift
-
-
-
Mandatsreferenznr.:
-
-
-
-
IBAN:
-
-
-
-
Gläubiger-ID:
-
-
-
-
-
- - - -
-
Überweisung
-
-
-
Kontoinhaber:
-
-
-
-
IBAN:
-
-
-
-
BIC:
-
-
-
-
-
- - - -
-
Bemerkung zur Rechnung
-
-
-
Betreff:
-
-
-
-
Bemerkung:
-
-
-
-
-
- - - -
-
Wir übernehmen keine Haftung für die Richtigkeit der Daten.
- -
-
- - - -
-
-
-
Position
-
-
-
Freitext:
-
-
-
-
Objektkennung:
-
-
-
-
Schema der Objektkennung:
-
-
-
-
Nummer der Auftragsposition:
-
-
-
-
Kontierungshinweis:
-
-
-

Abrechnungszeitraum:

-
-
von:
-
-
-
-
bis:
-
-
-
-
-
-
Preiseinzelheiten
-
-
-
Menge
-
-
-
-
Einheit
-
-
-
-
Preis pro Einheit (netto)
-
-
-
-
Gesamtpreis (netto)
-
-
-
-
-
-
Rabatt (netto):
-
-
-
-
Listenpreis (netto):
-
-
-
-
Anzahl der Einheit:
-
-
-
-
Code der Maßeinheit:
-
-
-
-
Umsatzsteuer:
-
-
-
-
Umsatzsteuersatz in Prozent:
-
%
-
-
-
-
-
-
-
-
-
Nachlässe auf Ebene der Rechnungsposition
-
-
-
Grundbetrag (netto)
-
-
-
-
Prozentsatz
-
%
-
-
-
Nachlass (netto)
-
-
-
-
-
Grund des Nachlasses:
-
Code für den Nachlassgrund:
-
-
-
-
Zuschläge auf Ebene der Rechnungsposition
-
-
-
Grundbetrag (netto)
-
-
-
-
Prozentsatz
-
%
-
-
-
Zuschlag (netto)
-
-
-
-
-
Grund des Zuschlags:
-
Code für den Zuschlagsgrund:
-
-
-
-
-
-
-
-
Artikelinformationen
-
-
-
-
-
-
Bezeichnung:
-
-
-
-
Beschreibung:
-
-
-
-
Artikelnummer:
-
-
-
-
Artikelkennung des Käufers:
-
-
-

Eigenschaften des Artikels:

- -
-
-
-
-
-
-
Artikelkennung:
-
-
-
-
Schema der Artikelkennung:
-
-
-
-
Code der Artikelklassifizierung:
-
-
-
-
Kennung zur Bildung des Schemas:
-
-
-
-
Version zur Bildung des Schemas:
-
-
-
-
Code des Herkunftslandes:
-
-
-
-
-
-
-
-
-
-
- - - -
-
-
-
-
- - - -
-
Wir übernehmen keine Haftung für die Richtigkeit der Daten.
-
-
- -
- -
-
-
-
- -
- -
-
-
-
- -
- -
-
-
-
- - - -
-
Informationen zum Verkäufer
-
-
-
Abweichender Handelsname:
-
-
-
-
Bundesland:
-
-
-
-
Elektronische Adresse:
-
-
-
-
Schema der elektronischen Adresse:
-
-
-
-
Register-/Registriernummer:
-
-
-
-
Umsatzsteuer-ID:
-
-
-
-
Steuernummer:
-
-
-
-
Schema der Steuernummer:
-
-
-
-
Weitere rechtliche Informationen:
-
-
-
-
Code der Umsatzsteuerwährung:
-
-
-
-
-
- - - -
-
Steuervertreter des Verkäufers
-
-
-
Name:
-
-
-
-
Straße / Hausnummer:
-
-
-
-
Postfach:
-
-
-
-
Adresszusatz:
-
-
-
-
PLZ:
-
-
-
-
Ort:
-
-
-
-
Bundesland:
-
-
-
-
Ländercode:
-
-
-
-
Umsatzsteuer-ID:
-
-
-
-
-
- - - -
-
Informationen zum Käufer
-
-
-
Abweichender Handelsname:
-
-
-
-
Bundesland:
-
-
-
-
Elektronische Adresse:
-
-
-
-
Schema der elektronischen Adresse:
-
-
-
-
Register-/Registriernummer:
-
-
-
-
Schema der Register-/Registriernummer:
-
-
-
-
Umsatzsteuer-ID:
-
-
-
-
Abrechnungsdatum der Umsatzsteuer:
-
-
-
-
Code des Umsatzsteuer-Abrechnungsdatums:
-
-
-
-
Kontierungsinformation:
-
-
-
-
-
- - - -
-
Lieferinformationen
-
-
-
Kennung des Lieferorts:
-
-
-
-
Schema der Kennung:
-
-
-
-
Lieferdatum:
-
-
-
-
Name des Empfängers:
-
-
-
-
Straße / Hausnummer:
-
-
-
-
Postfach:
-
-
-
-
Adresszusatz:
-
-
-
-
PLZ:
-
-
-
-
Ort:
-
-
-
-
Bundesland:
-
-
-
-
Land:
-
-
-
-
-
- - - -
-
Informationen zum Vertrag
-
-
-
Vergabenummer:
-
-
-
-
Kennung der Empfangsbestätigung:
-
-
-
-
Kennung der Versandanzeige:
-
-
-
-
Prozesskennung:
-
-
-
-
Spezifikationskennung:
-
-
-
-
Objektkennung:
-
-
-
-
Schema der Objektkennung:
-
-
-
-
-
- - - -
-
Vom Verkäufer abweichender Zahlungsempfänger
-
-
-
Name:
-
-
-
-
Kennung:
-
-
-
-
Schema der Kennung:
-
-
-
-
Register-/Registriernummer:
-
-
-
-
Schema der Register-/Registriernummer:
-
-
-
-
-
- - - -
-
Wir übernehmen keine Haftung für die Richtigkeit der Daten.
-
-
-
-
Rechnungsbegründende Unterlagen
- -
-
-
-
-
- - - -
-
-
Kennung:
-
-
-
-
Beschreibung:
-
-
-
-
Verweis (z.B. Internetadresse):
-
-
-
-
Anhangsdokument:
-
- Öffnen -
- - -
-
-
Format des Anhangdokuments:
-
-
-
-
Name des Anhangsdokuments:
-
-
-
-
- - - -
-
-
-
-
Bearbeitungshistorie
- -
-
-
-
-
- - - -
-
-
Datum/Uhrzeit:
-
-
-
-
Betreff:
-
-
-
-
Text:
-
-
-
-
Details:
-
-
-
-
- -
diff --git a/library/src/main/resources/stylesheets/1001.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/1001.xsl similarity index 99% rename from library/src/main/resources/stylesheets/1001.xsl rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/1001.xsl index 951df89fb..c4ef8d9b2 100644 --- a/library/src/main/resources/stylesheets/1001.xsl +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/1001.xsl @@ -751,7 +751,14 @@ (Purchase Order Financing Request Cancellation) (Statistical document, export) (INTRASTAT declaration) + (Transit certificate of approval) + (Pre-packed cross docking consignment order) + (Traceability event declaration) + (Sustainability data request) (Delivery verification certificate) + (Sustainability data response) + (Sustainability Inspection request) + (Sustainability Inspection response) (Import licence, application for) (Import licence) (Customs declaration without commercial detail) @@ -805,4 +812,4 @@ - \ No newline at end of file + diff --git a/library/src/main/resources/stylesheets/1153.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/1153.xsl similarity index 99% rename from library/src/main/resources/stylesheets/1153.xsl rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/1153.xsl index b348982db..86577a68b 100644 --- a/library/src/main/resources/stylesheets/1153.xsl +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/1153.xsl @@ -827,4 +827,4 @@ - \ No newline at end of file + diff --git a/library/src/main/resources/stylesheets/2005.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/2005.xsl similarity index 99% rename from library/src/main/resources/stylesheets/2005.xsl rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/2005.xsl index 5d3ded5f5..587349db4 100644 --- a/library/src/main/resources/stylesheets/2005.xsl +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/2005.xsl @@ -818,9 +818,12 @@ (Vessel arrival at pilot area date/time, actual) (Delivery place booking date/time) (Pickup place booking date/time) + (Discharge date/time, ended) + (Loading date/time, ended) + (Loading date/time, started) (Mutually defined) - \ No newline at end of file + diff --git a/library/src/main/resources/stylesheets/3166.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/3166.xsl similarity index 98% rename from library/src/main/resources/stylesheets/3166.xsl rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/3166.xsl index 8c8821b46..c36935e7d 100644 --- a/library/src/main/resources/stylesheets/3166.xsl +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/3166.xsl @@ -6,257 +6,259 @@ + (Andorra) + (Vereinigte Arabische Emirate) (Afghanistan) - (Ägypten) - (Ålandinseln) + (Antigua und Barbuda) + (Anguilla) (Albanien) - (Algerien) - (Amerikanische Jungferninseln) - (Amerikanische Überseeinseln, Kleinere) - (Amerikanisch-Samoa) - (Andorra) + (Armenien) (Angola) - (Anguilla) (Antarktis) - (Antigua und Barbuda) - (Äquatorialguinea) - (Arabische Republik Syrien) (Argentinien) - (Armenien) + (Amerikanisch-Samoa) + (Österreich) + (Australien) (Aruba) + (Ålandinseln) (Aserbaidschan) - (Äthiopien) - (Australien) - (Bahamas) - (Bahrain) - (Bangladesch) + (Bosnien und Herzegowina) (Barbados) + (Bangladesch) (Belgien) - (Belize) + (Burkina Faso) + (Bulgarien) + (Bahrain) + (Burundi) (Benin) + (St. Barthélemy) (Bermuda) - (Bhutan) - (Bolivarische Republik Venezuela) + (Brunei Darussalam) + (Plurinationaler Staat Bolivien) (Bonaire, St. Eustatius und Saba) - (Bosnien und Herzegowina) - (Botsuana) - (Bouvetinsel) (Brasilien) - (Britische Jungferninseln) - (Britisches Territorium im Indischen Ozean) - (Brunei Darussalam) - (Bulgarien) - (Burkina Faso) - (Burundi) - (Cabo Verde) + (Bahamas) + (Bhutan) + (Bouvetinsel) + (Botsuana) + (Belarus) + (Belize) + (Kanada) + (Kokosinseln (Keeling)) + (Demokratische Republik Kongo) + (Zentralafrikanische Republik) + (Kongo) + (Schweiz) + (Côte d’Ivoire) + (Cookinseln) (Chile) + (Kamerun) (China) - (Cookinseln) + (Kolumbien) (Costa Rica) - (Côte d’Ivoire) + (Kuba) + (Cabo Verde) (Curaçao) - (Dänemark) - (Demokratische Republik Kongo) - (Demokratische Volksrepublik Korea) - (Demokratische Volksrepublik Laos) + (Weihnachtsinsel) + (Zypern) + (Tschechien) (Deutschland) + (Dschibuti) + (Dänemark) (Dominica) (Dominikanische Republik) - (Dschibuti) + (Algerien) (Ecuador) - (Nordmazedonien) - (El Salvador) - (Eritrea) (Estland) - (Falklandinseln (Malwinen)) - (Färöer) - (Fidschi) + (Ägypten) + (Westsahara) + (Eritrea) + (Spanien) + (Äthiopien) (Finnland) + (Fidschi) + (Falklandinseln (Malwinen)) (Föderierte Staaten von Mikronesien) + (Färöer) (Frankreich) - (Französische Süd- und Antarktisgebiete) - (Französisch-Guayana) - (Französisch-Polynesien) (Gabun) - (Gambia) + (Vereinigtes Königreich) + (Grenada) (Georgien) + (Französisch-Guayana) + (Guernsey) (Ghana) (Gibraltar) - (Grenada) - (Griechenland) (Grönland) + (Gambia) + (Guinea) (Guadeloupe) - (Guam) + (Äquatorialguinea) + (Griechenland) + (Südgeorgien und die Südlichen Sandwichinseln) (Guatemala) - (Guernsey) - (Guinea) + (Guam) (Guinea-Bissau) (Guyana) - (Haiti) + (Hongkong) (Heard und die McDonaldinseln) (Honduras) - (Hongkong) - (Indien) + (Kroatien) + (Haiti) + (Ungarn) (Indonesien) + (Irland) + (Israel) (Insel Man) + (Indien) + (Britisches Territorium im Indischen Ozean) (Irak) - (Irland) (Islamische Republik Iran) (Island) - (Israel) (Italien) - (Jamaika) - (Japan) - (Jemen) (Jersey) + (Jamaika) (Jordanien) - (Kaimaninseln) - (Kambodscha) - (Kamerun) - (Kanada) - (Kasachstan) - (Katar) + (Japan) (Kenia) (Kirgisistan) + (Kambodscha) (Kiribati) - (Kokosinseln (Keeling)) - (Kolumbien) (Komoren) - (Kongo) - (Kroatien) - (Kuba) + (St. Kitts und Nevis) + (Demokratische Volksrepublik Korea) + (Republik Korea) (Kuwait) - (Lesotho) - (Lettland) + (Kaimaninseln) + (Kasachstan) + (Demokratische Volksrepublik Laos) (Libanon) - (Liberia) - (Libyen) + (St. Lucia) (Liechtenstein) + (Sri Lanka) + (Liberia) + (Lesotho) (Litauen) (Luxemburg) - (Macau) + (Lettland) + (Libyen) + (Marokko) + (Monaco) + (Republik Moldau) + (Montenegro) + (St. Martin (französischer Teil)) (Madagaskar) - (Malawi) - (Malaysia) - (Malediven) + (Marshallinseln) + (Nordmazedonien) (Mali) - (Malta) + (Myanmar) + (Mongolei) + (Macau) (Marianen, Nördliche) - (Marokko) - (Marshallinseln) (Martinique) (Mauretanien) + (Montserrat) + (Malta) (Mauritius) - (Mayotte) + (Malediven) + (Malawi) (Mexiko) - (Monaco) - (Mongolei) - (Monserrat) - (Montenegro) + (Malaysia) (Mosambik) - (Myanmar) (Namibia) - (Nauru) - (Nepal) (Neukaledonien) - (Neuseeland) - (Nicaragua) - (Niederlande) (Niger) - (Nigeria) - (Niue) (Norfolkinsel) + (Nigeria) + (Nicaragua) + (Niederlande) (Norwegen) + (Nepal) + (Nauru) + (Niue) + (Neuseeland) (Oman) - (Österreich) - (Pakistan) - (Palau) - (Palestine, State of) (Panama) - (Papua-Neuguinea) - (Paraguay) (Peru) + (Französisch-Polynesien) + (Papua-Neuguinea) (Philippinen) - (Pitcairninseln) - (Plurinationaler Staat Bolivien) + (Pakistan) (Polen) - (Portugal) + (St. Pierre und Miquelon) + (Pitcairninseln) (Puerto Rico) - (Republik Korea) - (Republik Moldau) + (Palästinensische Gebiete) + (Portugal) + (Palau) + (Paraguay) + (Katar) + (Unbekannt) (Réunion) - (Ruanda) (Rumänien) + (Serbien) (Russische Föderation) - (Salomonen) - (Sambia) - (Samoa) - (San Marino) - (São Tomé und Príncipe) + (Ruanda) (Saudi-Arabien) - (Schweden) - (Schweiz) - (Senegal) - (Serbien) + (Salomonen) (Seychellen) - (Sierra Leone) - (Simbabwe) + (Sudan) + (Schweden) (Singapur) - (Slowakei) + (St. Helena, Ascension und Tristan da Cunha) (Slowenien) + (Svalbard und Jan Mayen) + (Slowakei) + (Sierra Leone) + (San Marino) + (Senegal) (Somalia) - (Spanien) - (Sri Lanka) - (St. Barthélemy) - (St. Helena, Ascension und Tristan da Cunha) - (St. Kitts und Nevis) - (St. Lucia) - (St. Martin (französischer Teil)) - (St. Martin (Niederländischer Teil)) - (St. Pierre und Miquelon) - (St. Vincent und die Grenadinen) - (Südafrika) - (Sudan) - (Südgeorgien und die Südlichen Sandwichinseln) - (Südsudan) (Suriname) - (Svalbard und Jan Mayen) + (Südsudan) + (São Tomé und Príncipe) + (El Salvador) + (St. Martin (Niederländischer Teil)) + (Arabische Republik Syrien) (Eswatini) - (Tadschikistan) - (Taiwan) - (Thailand) - (Timor-Leste) + (Turks- und Caicosinseln) + (Tschad) + (Französische Süd- und Antarktisgebiete) (Togo) + (Thailand) + (Tadschikistan) (Tokelau) - (Tonga) - (Trinidad und Tobago) - (Tschad) - (Tschechien) + (Timor-Leste) + (Turkmenistan) (Tunesien) + (Tonga) (Türkei) - (Turkmenistan) - (Turks- und Caicosinseln) + (Trinidad und Tobago) (Tuvalu) - (Uganda) + (Taiwan) + (Vereinigte Republik Tansania) (Ukraine) - (Ungarn) + (Uganda) + (Amerikanische Überseeinseln, Kleinere) + (Vereinigte Staaten) (Uruguay) (Usbekistan) - (Vanuatu) (Vatikanstadt) - (Vereinigte Arabische Emirate) - (Vereinigte Republik Tansania) - (Vereinigte Staaten) - (Vereinigtes Königreich) + (St. Vincent und die Grenadinen) + (Bolivarische Republik Venezuela) + (Britische Jungferninseln) + (Amerikanische Jungferninseln) (Vietnam) + (Vanuatu) (Wallis und Futuna) - (Weihnachtsinsel) - (Weißrussland) - (Westsahara) - (Zentralafrikanische Republik) - (Zypern) + (Samoa) + (Kosovo) + (Jemen) + (Mayotte) + (Südafrika) + (Sambia) + (Simbabwe) - \ No newline at end of file + diff --git a/library/src/main/resources/stylesheets/4217.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/4217.xsl similarity index 97% rename from library/src/main/resources/stylesheets/4217.xsl rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/4217.xsl index 15aa490bf..ec7ca5519 100644 --- a/library/src/main/resources/stylesheets/4217.xsl +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/4217.xsl @@ -101,7 +101,7 @@ (Kyat) (Tugrik) (Pataca) - (Ouguiya) + (Ouguiya) (Mauritius Rupee) (Rufiyaa) (Malawi Kwacha) @@ -119,7 +119,7 @@ (Balboa) (Sol) (Kina) - (Philippine Piso) + (Philippine Peso) (Pakistan Rupee) (Zloty) (Guarani) @@ -139,7 +139,7 @@ (Somali Shilling) (Surinam Dollar) (South Sudanese Pound) - (Dobra) + (Dobra) (El Salvador Colon) (Syrian Pound) (Lilangeni) @@ -156,10 +156,11 @@ (Uganda Shilling) (US Dollar) (US Dollar (Next day)) - (Uruguay Peso en Unidades Indexadas (URUIURUI)) + (Uruguay Peso en Unidades Indexadas (UI)) (Peso Uruguayo) + (Unidad Previsional) (Uzbekistan Sum) - (Bolívar) + (Bolívar Soberano) (Dong) (Vatu) (Tala) @@ -188,4 +189,4 @@ - \ No newline at end of file + diff --git a/library/src/main/resources/stylesheets/4451.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/4451.xsl similarity index 95% rename from library/src/main/resources/stylesheets/4451.xsl rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/4451.xsl index 6ebf196d6..1e0d9b1ab 100644 --- a/library/src/main/resources/stylesheets/4451.xsl +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/4451.xsl @@ -283,6 +283,15 @@ (VAT exemption reason) (Processing Instructions) (Relay Instructions) + (SIMA applicable) + (Appeals program code) + (SIMA subject) + (Surtax applicable) + (SIMA security bond) + (Surtax subject) + (Safeguard applicable) + (Safeguard applicable) + (Safeguard subject) (Transport contract document clause) (Instruction to prepare the patient) (Medicine treatment comment) @@ -312,7 +321,16 @@ (Ship-to-ship activity information) (Package material description) (Consumer level package marking) + (SIMA measure in force) + (Pre-CARM) + (SIMA measure type) (Customs clearance instructions) + (Sub Type Code) + (SIMA information) + (Time limit end) + (Time limit start) + (Warehouse time limit) + (Value for duty information) (Customs clearance instructions export) (Change information) (Customs clearance instruction import) @@ -393,4 +411,4 @@ - \ No newline at end of file + diff --git a/library/src/main/resources/stylesheets/4461.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/4461.xsl similarity index 99% rename from library/src/main/resources/stylesheets/4461.xsl rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/4461.xsl index 0e961d3ee..ac275de21 100644 --- a/library/src/main/resources/stylesheets/4461.xsl +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/4461.xsl @@ -93,4 +93,4 @@ - \ No newline at end of file + diff --git a/library/src/main/resources/stylesheets/5189.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/5189.xsl similarity index 99% rename from library/src/main/resources/stylesheets/5189.xsl rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/5189.xsl index 85994c639..706fe4adf 100644 --- a/library/src/main/resources/stylesheets/5189.xsl +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/5189.xsl @@ -115,4 +115,4 @@ - \ No newline at end of file + diff --git a/library/src/main/resources/stylesheets/5305.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/5305.xsl similarity index 99% rename from library/src/main/resources/stylesheets/5305.xsl rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/5305.xsl index 53cb36961..e5446c0cf 100644 --- a/library/src/main/resources/stylesheets/5305.xsl +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/5305.xsl @@ -31,4 +31,4 @@ - \ No newline at end of file + diff --git a/library/src/main/resources/stylesheets/6523.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/6523.xsl similarity index 95% rename from library/src/main/resources/stylesheets/6523.xsl rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/6523.xsl index cbcc540dc..1565a0ddf 100644 --- a/library/src/main/resources/stylesheets/6523.xsl +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/6523.xsl @@ -160,7 +160,7 @@ (Global Crossing AESA (ATM End System Address)) (AUNA) (ATM interconnection with the Dutch KPN Telecom) - (Identification number of economic subject (ICO) Act on State Statistics of 29 November 2'001, § 27) + (Identification number of economic subject (ICO) Act on State Statistics of 29 November 2001, § 27) (ACTALIS Object Identifiers) (GTIN - Global Trade Item Number) (ECCMA Open Technical Directory) @@ -210,8 +210,18 @@ (PiLog Ontology Codification Identifier (POCI)) (Numero d'entreprise / ondernemingsnummer / Unternehmensnummer) (GS1 identification keys) + (CODICE FISCALE) + (PARTITA IVA) + (Finnish Organization Identifier) + (Finnish Organization Value Add Tax Identifier) + (Tradeplace TradePI Standard) + (Net service ID) + (OVTcode) + (DiGAVEID) + (Freischaltcode) + (IK) - \ No newline at end of file + diff --git a/library/src/main/resources/stylesheets/7143.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/7143.xsl similarity index 99% rename from library/src/main/resources/stylesheets/7143.xsl rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/7143.xsl index fed54072f..f8a012cbd 100644 --- a/library/src/main/resources/stylesheets/7143.xsl +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/7143.xsl @@ -180,6 +180,7 @@ (European Waste Catalogue) (Price grouping code) (UNSPSC) + (EU RoHS Directive) (Ultimate customer's article number) (UPC (Universal product code)) (Vendor item number) @@ -191,4 +192,4 @@ - \ No newline at end of file + diff --git a/library/src/main/resources/stylesheets/7161.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/7161.xsl similarity index 99% rename from library/src/main/resources/stylesheets/7161.xsl rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/7161.xsl index bae3e46db..8c4a80134 100644 --- a/library/src/main/resources/stylesheets/7161.xsl +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/7161.xsl @@ -187,4 +187,4 @@ - \ No newline at end of file + diff --git a/library/src/main/resources/stylesheets/EAS.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/EAS.xsl similarity index 84% rename from library/src/main/resources/stylesheets/EAS.xsl rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/EAS.xsl index 79b126c35..12bdd52bf 100644 --- a/library/src/main/resources/stylesheets/EAS.xsl +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/EAS.xsl @@ -7,7 +7,7 @@ (System Information et Repertoire des Entreprise et des Etablissements: SIRENE) - (Organisationsnumme) + (Organisationsnummer) (SIRET-CODE) (LY-tunnus) (Data Universal Numbering System (D-U-N-S Number)) @@ -18,13 +18,17 @@ (Directorates of the European Commission) (SIA Object Identifiers) (SECETI Object Identifiers) + (Standard Company Code) (Australian Business Number (ABN) Scheme) + (Teikoku Company Code) (Numéro d'identification suisse des enterprises (IDE), Swiss Unique Business Identification Number (UIDB)) (DIGSTORG) + (Corporate Number of The Social Security and Tax Number System) (Dutch Originator's Identification Number) (Centre of Registers and Information Systems of the Ministry of Justice) (Enhetsregisteret ved Bronnoysundregisterne) (UBL.BE party identifier) + (KOIOS Open Technical Dictionary) (Singapore UEN identifier) (Kennitala - Iceland legal id for individuals and legal entities) (ERSTORG) @@ -34,6 +38,15 @@ (Indirizzo di Posta Elettronica Certificata) (eDelivery Network Participant identifier) (Leitweg-ID) + (CODDEST) + (Numero d'entreprise / ondernemingsnummer / Unternehmensnummer) + (GS1 identification keys) + (CODICE FISCALE) + (PARTITA IVA) + (Finnish Organization Identifier) + (Finnish Organization Value Add Tax Identifier) + (Net service ID) + (OVTcode) (Danish Ministry of the Interior and Health) (The Danish Commerce and Companies Agency) (Danish Ministry of Taxation, Central Customs and Tax Administration) @@ -90,8 +103,11 @@ (AS2 exchange) (File Transfer Protocol) (Electronic mail) + (DiGAVEID) + (Freischaltcode) + (IK) - \ No newline at end of file + diff --git a/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/FileSaver-v2.0.5.js b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/FileSaver-v2.0.5.js new file mode 100644 index 000000000..e07c9805b --- /dev/null +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/FileSaver-v2.0.5.js @@ -0,0 +1,188 @@ +(function (global, factory) { + if (typeof define === "function" && define.amd) { + define([], factory); + } else if (typeof exports !== "undefined") { + factory(); + } else { + var mod = { + exports: {} + }; + factory(); + global.FileSaver = mod.exports; + } +})(this, function () { + "use strict"; + + /* + * FileSaver.js + * A saveAs() FileSaver implementation. + * + * By Eli Grey, http://eligrey.com + * + * License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT) + * source : http://purl.eligrey.com/github/FileSaver.js + */ + // The one and only way of getting global scope in all environments + // https://stackoverflow.com/q/3277182/1008999 + var _global = typeof window === 'object' && window.window === window ? window : typeof self === 'object' && self.self === self ? self : typeof global === 'object' && global.global === global ? global : void 0; + + function bom(blob, opts) { + if (typeof opts === 'undefined') opts = { + autoBom: false + };else if (typeof opts !== 'object') { + console.warn('Deprecated: Expected third argument to be a object'); + opts = { + autoBom: !opts + }; + } // prepend BOM for UTF-8 XML and text/* types (including HTML) + // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF + + if (opts.autoBom && /^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) { + return new Blob([String.fromCharCode(0xFEFF), blob], { + type: blob.type + }); + } + + return blob; + } + + function download(url, name, opts) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url); + xhr.responseType = 'blob'; + + xhr.onload = function () { + saveAs(xhr.response, name, opts); + }; + + xhr.onerror = function () { + console.error('could not download file'); + }; + + xhr.send(); + } + + function corsEnabled(url) { + var xhr = new XMLHttpRequest(); // use sync to avoid popup blocker + + xhr.open('HEAD', url, false); + + try { + xhr.send(); + } catch (e) {} + + return xhr.status >= 200 && xhr.status <= 299; + } // `a.click()` doesn't work for all browsers (#465) + + + function click(node) { + try { + node.dispatchEvent(new MouseEvent('click')); + } catch (e) { + var evt = document.createEvent('MouseEvents'); + evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null); + node.dispatchEvent(evt); + } + } // Detect WebView inside a native macOS app by ruling out all browsers + // We just need to check for 'Safari' because all other browsers (besides Firefox) include that too + // https://www.whatismybrowser.com/guides/the-latest-user-agent/macos + + + var isMacOSWebView = _global.navigator && /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent); + var saveAs = _global.saveAs || ( // probably in some web worker + typeof window !== 'object' || window !== _global ? function saveAs() {} + /* noop */ + // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView + : 'download' in HTMLAnchorElement.prototype && !isMacOSWebView ? function saveAs(blob, name, opts) { + var URL = _global.URL || _global.webkitURL; + var a = document.createElement('a'); + name = name || blob.name || 'download'; + a.download = name; + a.rel = 'noopener'; // tabnabbing + // TODO: detect chrome extensions & packaged apps + // a.target = '_blank' + + if (typeof blob === 'string') { + // Support regular links + a.href = blob; + + if (a.origin !== location.origin) { + corsEnabled(a.href) ? download(blob, name, opts) : click(a, a.target = '_blank'); + } else { + click(a); + } + } else { + // Support blobs + a.href = URL.createObjectURL(blob); + setTimeout(function () { + URL.revokeObjectURL(a.href); + }, 4E4); // 40s + + setTimeout(function () { + click(a); + }, 0); + } + } // Use msSaveOrOpenBlob as a second approach + : 'msSaveOrOpenBlob' in navigator ? function saveAs(blob, name, opts) { + name = name || blob.name || 'download'; + + if (typeof blob === 'string') { + if (corsEnabled(blob)) { + download(blob, name, opts); + } else { + var a = document.createElement('a'); + a.href = blob; + a.target = '_blank'; + setTimeout(function () { + click(a); + }); + } + } else { + navigator.msSaveOrOpenBlob(bom(blob, opts), name); + } + } // Fallback to using FileReader and a popup + : function saveAs(blob, name, opts, popup) { + // Open a popup immediately do go around popup blocker + // Mostly only available on user interaction and the fileReader is async so... + popup = popup || open('', '_blank'); + + if (popup) { + popup.document.title = popup.document.body.innerText = 'downloading...'; + } + + if (typeof blob === 'string') return download(blob, name, opts); + var force = blob.type === 'application/octet-stream'; + + var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari; + + var isChromeIOS = /CriOS\/[\d]+/.test(navigator.userAgent); + + if ((isChromeIOS || force && isSafari || isMacOSWebView) && typeof FileReader !== 'undefined') { + // Safari doesn't allow downloading of blob URLs + var reader = new FileReader(); + + reader.onloadend = function () { + var url = reader.result; + url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;'); + if (popup) popup.location.href = url;else location = url; + popup = null; // reverse-tabnabbing #460 + }; + + reader.readAsDataURL(blob); + } else { + var URL = _global.URL || _global.webkitURL; + var url = URL.createObjectURL(blob); + if (popup) popup.location = url;else location.href = url; + popup = null; // reverse-tabnabbing #460 + + setTimeout(function () { + URL.revokeObjectURL(url); + }, 4E4); // 40s + } + }); + _global.saveAs = saveAs.saveAs = saveAs; + + if (typeof module !== 'undefined') { + module.exports = saveAs; + } +}); diff --git a/library/src/main/resources/stylesheets/UNECE-RE-20.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/UNECE-RE-20.xsl similarity index 98% rename from library/src/main/resources/stylesheets/UNECE-RE-20.xsl rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/UNECE-RE-20.xsl index 36008074d..a417b6c19 100644 --- a/library/src/main/resources/stylesheets/UNECE-RE-20.xsl +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/UNECE-RE-20.xsl @@ -468,6 +468,8 @@ (ten day) (day) (dry pound) + (Decibel-milliwatts) + (Decibel watt) (degree [unit of angle]) (decade) (decigram) @@ -689,6 +691,7 @@ (micromole) (failures in time) (flake ton) + (Formazin nephelometric unit) (foot) (pound per square foot) (foot per minute) @@ -911,6 +914,7 @@ (percent per inch) (percent per metre) (hank) + (Piece Day) (hectobar) (hundred boxes) (hundred count) @@ -922,11 +926,13 @@ (hundred kilogram, net mass) (hectolitre) (mile per hour (statute mile)) + (Piece Month) (million cubic metre) (hectometre) (hectolitre of pure alcohol) (hertz) (hour) + (Piece Week) (inch pound (pound inch)) (person) (inch) @@ -1161,6 +1167,7 @@ (kilogram of tungsten trioxide) (Kilowatt hour per standard cubic metre) (kilowatt) + (kilowatt year) (millilitre per kilogram) (quart (US liquid) per minute) (quart (US liquid) per second) @@ -1382,21 +1389,32 @@ (minute [unit of time]) (million) (million international unit) + (Square Metre Day) + (Square Metre Month) + (Square Metre Week) (milliard) (millilitre) (square millimetre) (cubic millimetre) (millimetre) (kilogram, dry weight) + (Mega Joule per Normalised cubic Metre) (month) (megapascal) + (Cubic Metre Day) (cubic metre per hour) + (Cubic Metre Month) (cubic metre per second) + (Cubic Metre Week) + (Metre Day) + (Metre Month) + (Metre Week) (metre per second squared) (square metre) (cubic metre) (metre) (metre per second) + (millihertz) (megavolt - ampere) (megawatt hour (1000 kW.h)) (pen calorie) @@ -1504,6 +1522,7 @@ (number of packs) (number of parts) (net ton) + (Nephelometric turbidity unit) (newton metre) (part per thousand) (panel) @@ -1645,6 +1664,7 @@ (newton metre per metre) (kilogram per square metre pascal second) (microgram per hectogram) + (meal) (pH (potential of Hydrogen)) (kilojoule per gram) (femtolitre) @@ -1658,7 +1678,6 @@ (Normalized cubic metre per hour) (Joule per normalised cubic metre) (Joule per standard cubic metre) - (meal) (page - facsimile) (quarter (of a year)) (page - hardcopy) @@ -1740,10 +1759,11 @@ (cubic yard) (yard) (hanging container) + (nanomole) (page) (mutually defined) - \ No newline at end of file + diff --git a/library/src/main/resources/stylesheets/UNECE-RE-21.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/UNECE-RE-21.xsl similarity index 99% rename from library/src/main/resources/stylesheets/UNECE-RE-21.xsl rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/UNECE-RE-21.xsl index 8a680d8b2..6e668b17f 100644 --- a/library/src/main/resources/stylesheets/UNECE-RE-21.xsl +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/UNECE-RE-21.xsl @@ -301,7 +301,6 @@ (Suitcase) (Envelope, steel) (Shrinkwrapped) - (Set) (Sleeve) (Sheets, in bundle/bunch/truss) (Tablet) @@ -422,4 +421,4 @@ - \ No newline at end of file + diff --git a/library/src/main/resources/stylesheets/VATEX.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/VATEX.xsl similarity index 99% rename from library/src/main/resources/stylesheets/VATEX.xsl rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/VATEX.xsl index 29cbc22c4..042f24c24 100644 --- a/library/src/main/resources/stylesheets/VATEX.xsl +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/VATEX.xsl @@ -66,4 +66,4 @@ - \ No newline at end of file + diff --git a/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/cii-xr.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/cii-xr.xsl new file mode 100644 index 000000000..4c4ca3ac5 --- /dev/null +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/cii-xr.xsl @@ -0,0 +1,2318 @@ + + + + + + Author: KoSIT Bremen (kosit@finanzen.bremen.de) + Fassung vom: 2020-06-30+02:00 + modifiziert durch Dr. Jan Thiele am: 2024-09-26+01:00 + Überführt eine zur EN 16931 konforme elektronische Rechnung in der konkreten Syntax UNCEFACT.CII.D16B in eine Instanz gemäß des Schemas für den Namensraum urn:ce.eu:en16931:2017:xoev-de:kosit:standard:xrechnung-1. + Das Skript setzt voraus, dass das zu verarbeitende Dokument valide bzgl. des XML Schemas und der Schematron-Regeln der Quelle ist. Für nicht valide Dokumente ist das Ergebnis nicht definiert. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ; + + + + + + + + + + + + + + + + + + + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/library/src/main/resources/stylesheets/common-xr.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/common-xr.xsl similarity index 65% rename from library/src/main/resources/stylesheets/common-xr.xsl rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/common-xr.xsl index 6677599d5..e3bc4e7cb 100644 --- a/library/src/main/resources/stylesheets/common-xr.xsl +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/common-xr.xsl @@ -5,7 +5,24 @@ exclude-result-prefixes="xs" version="2.0"> - + + + + + + + + + + + + + + + + + + @@ -50,7 +67,7 @@ ILLEGAL DATE FORMAT of "". @@ -74,6 +91,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/library/src/main/resources/stylesheets/functions.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/functions.xsl similarity index 89% rename from library/src/main/resources/stylesheets/functions.xsl rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/functions.xsl index d952c9024..de0e8041f 100644 --- a/library/src/main/resources/stylesheets/functions.xsl +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/functions.xsl @@ -135,4 +135,17 @@ - \ No newline at end of file + + + + + + + + + + + + + + diff --git a/library/src/main/resources/stylesheets/l10n/de.xml b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/l10n/de.xml similarity index 94% rename from library/src/main/resources/stylesheets/l10n/de.xml rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/l10n/de.xml index fa975bb66..c97ed2ae6 100644 --- a/library/src/main/resources/stylesheets/l10n/de.xml +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/l10n/de.xml @@ -1,6 +1,6 @@ - + - Leitweg-ID + Käuferreferenz Name Adresszeile 1 Adresszeile 2 @@ -37,7 +37,7 @@ Von Bis - Rechnungsnummer + Rechnungsnummer Rechnungsdatum Summe aller Positionen Summe Nachlässe @@ -55,19 +55,16 @@ Umsatzsteuerbetrag Befreiungsgrund Kennung für den Befreiungsgrund - - Umsatzsteuerkategorie des - Nachlasses + + Umsatzsteuerkategorie des Nachlasses Grundbetrag Prozentsatz Nachlass - Umsatzsteuersatz des - Nachlasses + Umsatzsteuersatz des Nachlasses Grund für den Nachlass Kennung für den Nachlassgrund - - Umsatzsteuerkategorie des - Zuschlages + + Umsatzsteuerkategorie des Zuschlages Grundbetrag Prozentsatz Zuschlag @@ -85,7 +82,7 @@ Mandatsreferenznr. IBAN Gläubiger-ID - + Kontoinhaber IBAN BIC @@ -136,6 +133,7 @@ Vergabenummer Kennung der Empfangsbestätigung Kennung der Versandanzeige + Prozesskennung Prozesskennung Spezifikationskennung Objektkennung @@ -180,7 +178,7 @@ Artikelnummer Artikelkennung des Käufers Artikelkennung - Schema der Artikelkennung + Schema der Artikelkennung Code der Artikelklassifizierung Kennung zur Bildung des Schemas Version zur Bildung des Schemas @@ -198,7 +196,7 @@ Art der Fremdforderung Betrag der Fremdforderung Beschreibung der Fremdforderung - Daten der E-Rechnung + Übersicht Informationen zum Käufer Informationen zum Verkäufer Rechnungsdaten @@ -214,7 +212,7 @@ Lastschrift Überweisung Bemerkungen zur Rechnung - Rechnungspositionen + Details Abrechnungszeitraum Preiseinzelheiten Nachlässe auf Ebene der Rechnungsposition @@ -232,14 +230,14 @@ Bearbeitungshistorie Anlagen Rechnungsbegründende Unterlagen - [D].[M].[Y] - [D].[M].[Y] [H]:[m]:[s] + Artikelklassifizierung + [D].[M].[Y,4] + [D].[M].[Y,4] [H]:[m]:[s] ###.##0,00 ##0,00 ###.##0,################# - - Summe Fremdforderungen - + Summe Fremdforderungen + Inhalte auf dieser Seite sind ohne JavaScript nur eingeschränkt darstellbar. Wir übernehmen keine Haftung für die Richtigkeit der Daten. Bemerkungen zur Rechnung Öffnen diff --git a/library/src/main/resources/stylesheets/l10n/en.xml b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/l10n/en.xml similarity index 95% rename from library/src/main/resources/stylesheets/l10n/en.xml rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/l10n/en.xml index 24f69ed89..6d852460f 100644 --- a/library/src/main/resources/stylesheets/l10n/en.xml +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/l10n/en.xml @@ -1,4 +1,4 @@ - + Buyer reference Name @@ -16,7 +16,7 @@ Company name Address line 1 Address line 2 - Address line 3 + Address line 3 ZIP Location State @@ -45,7 +45,7 @@ Total amount Total VAT Total VAT in accounting currency - Total + Total Already paid Rounding amount Amount due @@ -82,7 +82,7 @@ Mandate reference no. Debited account identifier Creditor ID - + Account holder Account identifier BIC @@ -91,8 +91,7 @@ Different trading name Electronic address - Electronic address - scheme + Electronic address scheme Legal registration identifier Legal registration identifier scheme VAT ID @@ -135,6 +134,7 @@ Receiving advice reference Despatch advice reference Process identifier + Process identifier Specification identifier Object identifier Object identifier scheme @@ -151,8 +151,8 @@ Attached document MIME type of the attached document Name of the attachment document - Date / time - Subject + Date / time + Subject Text Details Identifier @@ -230,18 +230,18 @@ Processing history Attachments Documents justifying the invoice - [Y]-[M,2]-[D,2] - [Y]-[M,2]-[D,2] [H]:[m]:[s] + Item classification + [Y,4]-[M,2]-[D,2] + [Y,4]-[M,2]-[D,2] [H]:[m]:[s] ###,##0.00 ##0.00 ###,##0.################# - - Third party payment total - + Third party payment total + The display of content on this page is limited without JavaScript. We assume no liability for the accuracy of the data. Notes on the invoice Open - No data available + No data available net gross Areas without content are not displayed! diff --git a/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/l10n/fr.xml b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/l10n/fr.xml new file mode 100644 index 000000000..4590183c1 --- /dev/null +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/l10n/fr.xml @@ -0,0 +1,255 @@ + + + Identifiant d'itinéraire + Nom + Rue / Numéro de maison + Boîte postale + Supplément d'adresse + Code postal + Lieu + Pays + Identifiant + Schéma de l'Identifiant + Nom + Téléphone + Adresse électronique + Nom de la société + Rue / Numéro de maison + Boîte postale + Supplément d'adresse + Code postal + Lieu + Région + Code pays + Identifiant + Schéma de l'Identifiant + Nom + Téléphone + Adresse électronique + Informations sur le vendeur + Date de facture + Type de facture + Devise + Numéro du projet + Numéro du contrat + Numéro de commande + Numéro de commande + + de + jusqu'à + Numéro de facture + Date de facture + Total de toutes les lignes + Total de remises + Total de suppléments + Montant total + montant de la TVA + Montant total de TVA + Montant total + Montant payé + Montant arrondi + Montant dû + Catégorie de TVA + Montant total + taux TVA + montant de la TVA + Motif d'exemption + Identifiant pour motif d'exemption + + Catégorie de TVA de la remise + Montant de base + Pourcentage + Allocation + Taux de TVA de la allocation + Motif de la remise + Document level allowance reason code + + Catégorie de TVA du supplément + Montant de base + Pourcentage + Supplément + Taux de TVA du supplément + Raison du supplément + Document level charge reason code + Rabais; autres conditions de paiement + Date d'échéance + Code du moyen de paiement + Moyens de paiement + Utilisation + Numéro de carte + Titulaire de la carte + + Numéro de référence du mandat + IBAN + Identifiant du créancier + + Titulaire du compte + IBAN + BIC + Objet + Commentaire + + Nom commercial différent + Adresse électronique + Schéma de l'adresse électronique + Numéro d'enregistrement + Schéma d'identification de l'enregistrement légal + Identifiant TVA + Numéro fiscale + Autres informations légales + Code devise de la TVA + + Nom + Rue / Numéro de maison + Boîte postale + Supplément d'adresse + Code postal + Lieu + Région + Code pays + Identifiant TVA + + Nom commercial différent + Région + Adresse électronique + Schéma de l'adresse électronique + Numéro d'enregistrement + Schéma du numéro d'enregistrement + Identifiant TVA + Date de facturation de la TVA + Code de date de règlement de la TVA + Informations sur l'attribution de compte + Identification du lieu de livraison + Schéma de l'Identifiant + Date de livraison + Nom du destinataire + Rue / Numéro de maison + Boîte postale + Supplément d'adresse + Code postal + Lieu + Région + Pays + Numéro d'attribution + Identifiant de l'accusé de réception + Identifiant du bordereau d'expédition + Identifiant processus + Identifiant de processus + Identifiant spécification + Identifiant objet + Schéma de l'Identifiant objet + + Nom + Identifiant + Schéma de l'Identifiant + Numéro d'enregistrement + Schéma du numéro d'enregistrement + + Identifiant + Description + Référence (par exemple l'adresse Internet) + Document joint + Format du document joint + Nom du document joint + Date / heure + Sujet + Texte + Détails + Position + Texte libre + Identifiant d'objet + Schéma de l'Identifiant objet + Numéro de ligne de commande + Information sur l'attribution de compte + de + jusqu'à + Quantité + Unité + Prix unitaire net + Prix total net + Remise nette + Prix catalogue (net) + Nombre d'unités + Code de l'unité de mesure + TVA + Pourcentage de TVA + Nom + Description + Numéro d'article + N° client / matériel + Identifiant article + Schéma de l'Identifiant article + Code de classification des articles + Identifiant pour la création du schéma + Version du schéma + Code du pays d'origine + Montant de base net + Pourcentage + Allocation nette + Raison pour l'allocation + Code de la raison pour l'allocation + Montant de base net + Pourcentage + Supplément net + Raison du supplément + Code de la raison du supplément + Type de paiement à un tiers + Montant du paiement à un tiers + Description du paiement à un tiers + Aperçu + Informations sur l'acheteur + Informations sur le vendeur + Données de la facture + Montants totaux de la facture + Tiers payant + Ventilation de la TVA au niveau de la facture + Allocation au niveau de la facture + Supplément au niveau de la facture + Période de facturation + Factures précédentes + Données de paiement + Information de la carte + Prélèvement automatique + Transfert + Commentaire sur la facture + Détails + Période de facturation + Détails de prix + Allocations au niveau de la ligne de facture + Supplément au niveau de la ligne de facture + Informations sur l'article + Propriétés de l'article + Additif + Informations sur le vendeur + Représentant fiscal du vendeur + Informations sur l'acheteur + Informations de livraison + Informations sur le contrat + bénéficiaire autre que le vendeur + Historique de traitement + Historique du traitement + Pièces jointes + Documents justifiant la facture + Classification des articles + [D]/[M]/[Y,4] + [D]/[M]/[Y,4] [H]:[m]:[s] + ###.##0,00 + ##0,00 + ###.##0,################# + Total des paiements de tiers + L'affichage du contenu de cette page est limité sans JavaScript. + Nous n'assumons aucune responsabilité quant à l'exactitude des données. + Notes sur la facture + Ouvrir + Aucune donnée disponible + net + brut + Les zones sans contenu ne sont pas affichées ! + Description des données + Prix + Unité de prix + TVA + Code + Total + Page + diff --git a/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/normalization.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/normalization.xsl new file mode 100644 index 000000000..db3051006 --- /dev/null +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/normalization.xsl @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/library/src/main/resources/stylesheets/ubl-creditnote-xr.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/ubl-creditnote-xr.xsl similarity index 93% rename from library/src/main/resources/stylesheets/ubl-creditnote-xr.xsl rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/ubl-creditnote-xr.xsl index da2b18c8a..2c44426cb 100644 --- a/library/src/main/resources/stylesheets/ubl-creditnote-xr.xsl +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/ubl-creditnote-xr.xsl @@ -15,31 +15,15 @@ Author: KoSIT Bremen (kosit@finanzen.bremen.de) Fassung vom: 2020-06-30+02:00 - modifiziert durch Dr. Jan Thiele am: 2021-02-11+01:00 + modifiziert durch Dr. Jan Thiele am: 2024-09-26+01:00 Überführt eine zur EN 16931 konforme elektronische Rechnung in der konkreten Syntax UBL.2_1.CreditNote in eine Instanz gemäß des Schemas für den Namensraum urn:ce.eu:en16931:2017:xoev-de:kosit:standard:xrechnung-1. Das Skript setzt voraus, dass das zu verarbeitende Dokument valide bzgl. des XML Schemas und der Schematron-Regeln der Quelle ist. Für nicht valide Dokumente ist das Ergebnis nicht definiert. - - - - - - - - - - - - - - - - - - + + @@ -126,6 +110,7 @@ + @@ -289,9 +274,9 @@ - + - + @@ -344,7 +329,7 @@ - + @@ -381,13 +366,13 @@ + match="/CreditNote:CreditNote/cac:AccountingSupplierParty/cac:Party/cac:PartyIdentification/cbc:ID[not(@schemeID = 'SEPA')]"> - + - + @@ -396,9 +381,9 @@ - + - + @@ -431,9 +416,9 @@ - + - + @@ -563,8 +548,6 @@ - @@ -600,25 +583,14 @@ - + - + - - - - - - - - - - @@ -638,9 +610,9 @@ - + - + @@ -766,7 +738,7 @@ - + @@ -786,13 +758,13 @@ + match="/CreditNote:CreditNote/cac:PayeeParty/cac:PartyIdentification/cbc:ID[not(@schemeID = 'SEPA')]"> - + - + @@ -801,9 +773,9 @@ - + - + @@ -947,9 +919,9 @@ - + - + @@ -1084,7 +1056,7 @@ + match="/CreditNote:CreditNote/cac:PaymentMeans/cbc:PaymentMeansCode/@name"> @@ -1409,9 +1381,9 @@ + select="/CreditNote:CreditNote/cac:TaxTotal/cbc:TaxAmount[/CreditNote:CreditNote/cbc:DocumentCurrencyCode = @currencyID]"/> + select="/CreditNote:CreditNote/cac:TaxTotal/cbc:TaxAmount[/CreditNote:CreditNote/cbc:TaxCurrencyCode = @currencyID]"/> @@ -1678,9 +1650,9 @@ - + - + @@ -2050,9 +2022,9 @@ - + - + @@ -2061,9 +2033,9 @@ - + - + @@ -2282,151 +2254,5 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Liefert einen XPath-Pfad, welches $n eindeutig identifiziert. - - - - - - - - - - - Liefert einen XPath-Pfad, welches $n eindeutig identifiziert. - - - - - / - - - [ - - ] - - - - /@ - - - + + diff --git a/library/src/main/resources/stylesheets/ubl-invoice-xr.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/ubl-invoice-xr.xsl similarity index 69% rename from library/src/main/resources/stylesheets/ubl-invoice-xr.xsl rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/ubl-invoice-xr.xsl index 7bdec35dc..015ef24e9 100644 --- a/library/src/main/resources/stylesheets/ubl-invoice-xr.xsl +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/ubl-invoice-xr.xsl @@ -1,46 +1,32 @@ + xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:xr="urn:ce.eu:en16931:2017:xoev-de:kosit:standard:xrechnung-1" + xmlns:Invoice="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" + xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" + xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" + xmlns:saxon="http://saxon.sf.net/" exclude-result-prefixes="#all" version="2.0"> Author: KoSIT Bremen (kosit@finanzen.bremen.de) Fassung vom: 2020-06-30+02:00 - modifiziert durch Dr. Jan Thiele am: 2021-02-11+01:00 - Überführt eine zur EN 16931 konforme elektronische Rechnung in der konkreten Syntax UBL.2_1.Invoice in eine Instanz gemäß des Schemas für den Namensraum urn:ce.eu:en16931:2017:xoev-de:kosit:standard:xrechnung-1. - Das Skript setzt voraus, dass das zu verarbeitende Dokument valide bzgl. des XML Schemas und der Schematron-Regeln der Quelle ist. Für nicht valide Dokumente ist das Ergebnis nicht definiert. + modifiziert durch Dr. Jan Thiele am: 2024-09-26+01:00 + Überführt eine zur EN 16931 konforme elektronische Rechnung in der konkreten Syntax + UBL.2_1.Invoice in eine Instanz gemäß des Schemas für den Namensraum + urn:ce.eu:en16931:2017:xoev-de:kosit:standard:xrechnung-1. + Das Skript setzt voraus, dass das zu verarbeitende Dokument valide bzgl. des XML + Schemas und der Schematron-Regeln der Quelle ist. Für nicht valide Dokumente ist das + Ergebnis nicht definiert. - - - - - - - - - - - - - - - - - - + + + @@ -61,12 +47,15 @@ + select="./cac:AdditionalDocumentReference/cbc:ID[following-sibling::cbc:DocumentTypeCode = '130']"/> - + @@ -111,7 +100,7 @@ + select="./cac:BillingReference/cac:InvoiceDocumentReference"/> @@ -125,6 +114,7 @@ + @@ -134,13 +124,14 @@ + select="./cac:AllowanceCharge[cbc:ChargeIndicator = 'false']"/> + select="./cac:AllowanceCharge[cbc:ChargeIndicator = 'true']"/> + @@ -200,8 +191,7 @@ - + @@ -234,8 +224,7 @@ - + @@ -249,32 +238,28 @@ - + - + - + - + @@ -282,13 +267,13 @@ + match="/Invoice:Invoice/cac:AdditionalDocumentReference/cbc:ID[following-sibling::cbc:DocumentTypeCode = '130']"> - + @@ -307,8 +292,9 @@ - + match="/Invoice:Invoice/cac:BillingReference/cac:InvoiceDocumentReference"> + + @@ -321,7 +307,7 @@ + match="/Invoice:Invoice/cac:BillingReference/cac:InvoiceDocumentReference/cbc:ID"> @@ -329,7 +315,7 @@ + match="/Invoice:Invoice/cac:BillingReference/cac:InvoiceDocumentReference/cbc:IssueDate"> @@ -337,18 +323,19 @@ - + + + select="./cac:Party/cac:PartyLegalEntity/cbc:RegistrationName"/> - + + select="./cac:Party/cac:PartyTaxScheme/cbc:CompanyID[following-sibling::cac:TaxScheme/cbc:ID = 'VAT']"/> + select="./cac:Party/cac:PartyTaxScheme/cbc:CompanyID[following-sibling::cac:TaxScheme/cbc:ID != 'VAT']"/> + select="./cac:Party/cac:PartyLegalEntity/cbc:CompanyLegalForm"/> @@ -362,7 +349,7 @@ + match="/Invoice:Invoice/cac:AccountingSupplierParty/cac:Party/cac:PartyLegalEntity/cbc:RegistrationName"> @@ -370,7 +357,7 @@ + match="/Invoice:Invoice/cac:AccountingSupplierParty/cac:Party/cac:PartyName/cbc:Name"> @@ -378,29 +365,29 @@ + match="/Invoice:Invoice/cac:AccountingSupplierParty/cac:Party/cac:PartyIdentification/cbc:ID[not(@schemeID = 'SEPA')]"> - + + match="/Invoice:Invoice/cac:AccountingSupplierParty/cac:Party/cac:PartyLegalEntity/cbc:CompanyID"> - + + match="/Invoice:Invoice/cac:AccountingSupplierParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyID[following-sibling::cac:TaxScheme/cbc:ID = 'VAT']"> @@ -408,7 +395,7 @@ + match="/Invoice:Invoice/cac:AccountingSupplierParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyID[following-sibling::cac:TaxScheme/cbc:ID != 'VAT']"> @@ -416,7 +403,7 @@ + match="/Invoice:Invoice/cac:AccountingSupplierParty/cac:Party/cac:PartyLegalEntity/cbc:CompanyLegalForm"> @@ -424,19 +411,20 @@ + match="/Invoice:Invoice/cac:AccountingSupplierParty/cac:Party/cbc:EndpointID"> - + - + match="/Invoice:Invoice/cac:AccountingSupplierParty/cac:Party/cac:PostalAddress"> + + @@ -454,7 +442,7 @@ + match="/Invoice:Invoice/cac:AccountingSupplierParty/cac:Party/cac:PostalAddress/cbc:StreetName"> @@ -462,7 +450,7 @@ + match="/Invoice:Invoice/cac:AccountingSupplierParty/cac:Party/cac:PostalAddress/cbc:AdditionalStreetName"> @@ -470,7 +458,7 @@ + match="/Invoice:Invoice/cac:AccountingSupplierParty/cac:Party/cac:PostalAddress/cac:AddressLine/cbc:Line"> @@ -478,7 +466,7 @@ + match="/Invoice:Invoice/cac:AccountingSupplierParty/cac:Party/cac:PostalAddress/cbc:CityName"> @@ -486,7 +474,7 @@ + match="/Invoice:Invoice/cac:AccountingSupplierParty/cac:Party/cac:PostalAddress/cbc:PostalZone"> @@ -494,7 +482,7 @@ + match="/Invoice:Invoice/cac:AccountingSupplierParty/cac:Party/cac:PostalAddress/cbc:CountrySubentity"> @@ -502,7 +490,7 @@ + match="/Invoice:Invoice/cac:AccountingSupplierParty/cac:Party/cac:PostalAddress/cac:Country/cbc:IdentificationCode"> @@ -515,8 +503,9 @@ - + match="/Invoice:Invoice/cac:AccountingSupplierParty/cac:Party/cac:Contact"> + + @@ -530,7 +519,7 @@ + match="/Invoice:Invoice/cac:AccountingSupplierParty/cac:Party/cac:Contact/cbc:Name"> @@ -538,7 +527,7 @@ + match="/Invoice:Invoice/cac:AccountingSupplierParty/cac:Party/cac:Contact/cbc:Telephone"> @@ -546,7 +535,7 @@ + match="/Invoice:Invoice/cac:AccountingSupplierParty/cac:Party/cac:Contact/cbc:ElectronicMail"> @@ -554,16 +543,17 @@ - + + + select="./cac:Party/cac:PartyLegalEntity/cbc:RegistrationName"/> + select="./cac:Party/cac:PartyTaxScheme/cbc:CompanyID[following-sibling::cac:TaxScheme/cbc:ID = 'VAT']"/> @@ -577,7 +567,7 @@ + match="/Invoice:Invoice/cac:AccountingCustomerParty/cac:Party/cac:PartyLegalEntity/cbc:RegistrationName"> @@ -585,7 +575,7 @@ + match="/Invoice:Invoice/cac:AccountingCustomerParty/cac:Party/cac:PartyName/cbc:Name"> @@ -593,29 +583,29 @@ + match="/Invoice:Invoice/cac:AccountingCustomerParty/cac:Party/cac:PartyIdentification/cbc:ID"> - + + match="/Invoice:Invoice/cac:AccountingCustomerParty/cac:Party/cac:PartyLegalEntity/cbc:CompanyID"> - + + match="/Invoice:Invoice/cac:AccountingCustomerParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyID[following-sibling::cac:TaxScheme/cbc:ID = 'VAT']"> @@ -623,19 +613,20 @@ + match="/Invoice:Invoice/cac:AccountingCustomerParty/cac:Party/cbc:EndpointID"> - + - + match="/Invoice:Invoice/cac:AccountingCustomerParty/cac:Party/cac:PostalAddress"> + + @@ -653,7 +644,7 @@ + match="/Invoice:Invoice/cac:AccountingCustomerParty/cac:Party/cac:PostalAddress/cbc:StreetName"> @@ -661,7 +652,7 @@ + match="/Invoice:Invoice/cac:AccountingCustomerParty/cac:Party/cac:PostalAddress/cbc:AdditionalStreetName"> @@ -669,7 +660,7 @@ + match="/Invoice:Invoice/cac:AccountingCustomerParty/cac:Party/cac:PostalAddress/cac:AddressLine/cbc:Line"> @@ -677,7 +668,7 @@ + match="/Invoice:Invoice/cac:AccountingCustomerParty/cac:Party/cac:PostalAddress/cbc:CityName"> @@ -685,7 +676,7 @@ + match="/Invoice:Invoice/cac:AccountingCustomerParty/cac:Party/cac:PostalAddress/cbc:PostalZone"> @@ -693,7 +684,7 @@ + match="/Invoice:Invoice/cac:AccountingCustomerParty/cac:Party/cac:PostalAddress/cbc:CountrySubentity"> @@ -701,7 +692,7 @@ + match="/Invoice:Invoice/cac:AccountingCustomerParty/cac:Party/cac:PostalAddress/cac:Country/cbc:IdentificationCode"> @@ -714,8 +705,9 @@ - + match="/Invoice:Invoice/cac:AccountingCustomerParty/cac:Party/cac:Contact"> + + @@ -729,7 +721,7 @@ + match="/Invoice:Invoice/cac:AccountingCustomerParty/cac:Party/cac:Contact/cbc:Name"> @@ -737,7 +729,7 @@ + match="/Invoice:Invoice/cac:AccountingCustomerParty/cac:Party/cac:Contact/cbc:Telephone"> @@ -745,7 +737,7 @@ + match="/Invoice:Invoice/cac:AccountingCustomerParty/cac:Party/cac:Contact/cbc:ElectronicMail"> @@ -753,9 +745,10 @@ - + + - + @@ -766,41 +759,40 @@ - + - + - + + match="/Invoice:Invoice/cac:PayeeParty/cac:PartyLegalEntity/cbc:CompanyID"> - + - + + + select="./cac:PartyTaxScheme/cbc:CompanyID[following-sibling::cac:TaxScheme/cbc:ID = 'VAT']"/> @@ -812,7 +804,7 @@ + match="/Invoice:Invoice/cac:TaxRepresentativeParty/cac:PartyName/cbc:Name"> @@ -820,16 +812,16 @@ + match="/Invoice:Invoice/cac:TaxRepresentativeParty/cac:PartyTaxScheme/cbc:CompanyID[following-sibling::cac:TaxScheme/cbc:ID = 'VAT']"> - - + + + @@ -847,7 +839,7 @@ + match="/Invoice:Invoice/cac:TaxRepresentativeParty/cac:PostalAddress/cbc:StreetName"> @@ -855,7 +847,7 @@ + match="/Invoice:Invoice/cac:TaxRepresentativeParty/cac:PostalAddress/cbc:AdditionalStreetName"> @@ -863,7 +855,7 @@ + match="/Invoice:Invoice/cac:TaxRepresentativeParty/cac:PostalAddress/cac:AddressLine/cbc:Line"> @@ -871,7 +863,7 @@ + match="/Invoice:Invoice/cac:TaxRepresentativeParty/cac:PostalAddress/cbc:CityName"> @@ -879,7 +871,7 @@ + match="/Invoice:Invoice/cac:TaxRepresentativeParty/cac:PostalAddress/cbc:PostalZone"> @@ -887,7 +879,7 @@ + match="/Invoice:Invoice/cac:TaxRepresentativeParty/cac:PostalAddress/cbc:CountrySubentity"> @@ -895,7 +887,7 @@ + match="/Invoice:Invoice/cac:TaxRepresentativeParty/cac:PostalAddress/cac:Country/cbc:IdentificationCode"> @@ -908,7 +900,8 @@ - + + @@ -924,26 +917,24 @@ + match="/Invoice:Invoice/cac:Delivery/cac:DeliveryParty/cac:PartyName/cbc:Name"> - + - + - + @@ -951,7 +942,8 @@ - + + @@ -977,9 +969,9 @@ - - + + + @@ -997,7 +989,7 @@ + match="/Invoice:Invoice/cac:Delivery/cac:DeliveryLocation/cac:Address/cbc:StreetName"> @@ -1005,7 +997,7 @@ + match="/Invoice:Invoice/cac:Delivery/cac:DeliveryLocation/cac:Address/cbc:AdditionalStreetName"> @@ -1013,7 +1005,7 @@ + match="/Invoice:Invoice/cac:Delivery/cac:DeliveryLocation/cac:Address/cac:AddressLine/cbc:Line"> @@ -1021,7 +1013,7 @@ + match="/Invoice:Invoice/cac:Delivery/cac:DeliveryLocation/cac:Address/cbc:CityName"> @@ -1029,7 +1021,7 @@ + match="/Invoice:Invoice/cac:Delivery/cac:DeliveryLocation/cac:Address/cbc:PostalZone"> @@ -1037,7 +1029,7 @@ + match="/Invoice:Invoice/cac:Delivery/cac:DeliveryLocation/cac:Address/cbc:CountrySubentity"> @@ -1045,7 +1037,7 @@ + match="/Invoice:Invoice/cac:Delivery/cac:DeliveryLocation/cac:Address/cac:Country/cbc:IdentificationCode"> @@ -1057,8 +1049,7 @@ - + @@ -1070,8 +1061,7 @@ - + @@ -1085,9 +1075,9 @@ - - + + + @@ -1101,7 +1091,7 @@ + match="/Invoice:Invoice/cac:PaymentMeans/cac:PayeeFinancialAccount/cbc:ID"> @@ -1109,7 +1099,7 @@ + match="/Invoice:Invoice/cac:PaymentMeans/cac:PayeeFinancialAccount/cbc:Name"> @@ -1117,7 +1107,7 @@ + match="/Invoice:Invoice/cac:PaymentMeans/cac:PayeeFinancialAccount/cac:FinancialInstitutionBranch/cbc:ID"> @@ -1125,7 +1115,8 @@ - + + @@ -1138,7 +1129,7 @@ + match="/Invoice:Invoice/cac:PaymentMeans/cac:CardAccount/cbc:PrimaryAccountNumberID"> @@ -1146,21 +1137,21 @@ + match="/Invoice:Invoice/cac:PaymentMeans/cac:CardAccount/cbc:HolderName"> - - + + + + select="/Invoice:Invoice/cac:PayeeParty/cac:PartyIdentification/cbc:ID[@schemeID = 'SEPA']"/> + select="/Invoice:Invoice/cac:AccountingSupplierParty/cac:Party/cac:PartyIdentification/cbc:ID[@schemeID = 'SEPA']"/> @@ -1171,8 +1162,7 @@ - + @@ -1180,7 +1170,7 @@ + match="/Invoice:Invoice/cac:PayeeParty/cac:PartyIdentification/cbc:ID[@schemeID = 'SEPA']"> @@ -1188,7 +1178,7 @@ + match="/Invoice:Invoice/cac:AccountingSupplierParty/cac:Party/cac:PartyIdentification/cbc:ID[@schemeID = 'SEPA']"> @@ -1196,7 +1186,7 @@ + match="/Invoice:Invoice/cac:PaymentMeans/cac:PaymentMandate/cac:PayerFinancialAccount/cbc:ID"> @@ -1204,22 +1194,24 @@ - + match="/Invoice:Invoice/cac:AllowanceCharge[cbc:ChargeIndicator = 'false']"> + + + select="./cbc:Amount[preceding-sibling::cbc:ChargeIndicator = 'false']"/> + select="./cbc:BaseAmount[preceding-sibling::cbc:ChargeIndicator = 'false']"/> + select="./cbc:MultiplierFactorNumeric[preceding-sibling::cbc:ChargeIndicator = 'false']"/> + select="./cac:TaxCategory/cbc:ID[ancestor::cac:AllowanceCharge/cbc:ChargeIndicator = 'false' and following-sibling::cac:TaxScheme/cbc:ID = 'VAT']"/> + select="./cac:TaxCategory/cbc:Percent[ancestor::cac:AllowanceCharge/cbc:ChargeIndicator = 'false']"/> + select="./cbc:AllowanceChargeReason[preceding-sibling::cbc:ChargeIndicator = 'false']"/> + select="./cbc:AllowanceChargeReasonCode[preceding-sibling::cbc:ChargeIndicator = 'false']" + /> @@ -1230,7 +1222,7 @@ + match="/Invoice:Invoice/cac:AllowanceCharge/cbc:Amount[preceding-sibling::cbc:ChargeIndicator = 'false']"> @@ -1238,7 +1230,7 @@ + match="/Invoice:Invoice/cac:AllowanceCharge/cbc:BaseAmount[preceding-sibling::cbc:ChargeIndicator = 'false']"> @@ -1246,7 +1238,7 @@ + match="/Invoice:Invoice/cac:AllowanceCharge/cbc:MultiplierFactorNumeric[preceding-sibling::cbc:ChargeIndicator = 'false']"> @@ -1254,7 +1246,7 @@ + match="/Invoice:Invoice/cac:AllowanceCharge/cac:TaxCategory/cbc:ID[ancestor::cac:AllowanceCharge/cbc:ChargeIndicator = 'false' and following-sibling::cac:TaxScheme/cbc:ID = 'VAT']"> @@ -1267,7 +1259,7 @@ + match="/Invoice:Invoice/cac:AllowanceCharge/cac:TaxCategory/cbc:Percent[ancestor::cac:AllowanceCharge/cbc:ChargeIndicator = 'false']"> @@ -1275,7 +1267,7 @@ + match="/Invoice:Invoice/cac:AllowanceCharge/cbc:AllowanceChargeReason[preceding-sibling::cbc:ChargeIndicator = 'false']"> @@ -1283,7 +1275,7 @@ + match="/Invoice:Invoice/cac:AllowanceCharge/cbc:AllowanceChargeReasonCode[preceding-sibling::cbc:ChargeIndicator = 'false']"> @@ -1296,22 +1288,24 @@ - + match="/Invoice:Invoice/cac:AllowanceCharge[cbc:ChargeIndicator = 'true']"> + + + select="./cbc:Amount[preceding-sibling::cbc:ChargeIndicator = 'true']"/> + select="./cbc:BaseAmount[preceding-sibling::cbc:ChargeIndicator = 'true']"/> + select="./cbc:MultiplierFactorNumeric[preceding-sibling::cbc:ChargeIndicator = 'true']"/> + select="./cac:TaxCategory/cbc:ID[ancestor::cac:AllowanceCharge/cbc:ChargeIndicator = 'true']"/> + select="./cac:TaxCategory/cbc:Percent[ancestor::cac:AllowanceCharge/cbc:ChargeIndicator = 'true']"/> + select="./cbc:AllowanceChargeReason[preceding-sibling::cbc:ChargeIndicator = 'true']"/> + select="./cbc:AllowanceChargeReasonCode[preceding-sibling::cbc:ChargeIndicator = 'true']" + /> @@ -1322,7 +1316,7 @@ + match="/Invoice:Invoice/cac:AllowanceCharge/cbc:Amount[preceding-sibling::cbc:ChargeIndicator = 'true']"> @@ -1330,7 +1324,7 @@ + match="/Invoice:Invoice/cac:AllowanceCharge/cbc:BaseAmount[preceding-sibling::cbc:ChargeIndicator = 'true']"> @@ -1338,7 +1332,7 @@ + match="/Invoice:Invoice/cac:AllowanceCharge/cbc:MultiplierFactorNumeric[preceding-sibling::cbc:ChargeIndicator = 'true']"> @@ -1346,7 +1340,7 @@ + match="/Invoice:Invoice/cac:AllowanceCharge/cac:TaxCategory/cbc:ID[ancestor::cac:AllowanceCharge/cbc:ChargeIndicator = 'true']"> @@ -1359,7 +1353,7 @@ + match="/Invoice:Invoice/cac:AllowanceCharge/cac:TaxCategory/cbc:Percent[ancestor::cac:AllowanceCharge/cbc:ChargeIndicator = 'true']"> @@ -1367,7 +1361,7 @@ + match="/Invoice:Invoice/cac:AllowanceCharge/cbc:AllowanceChargeReason[preceding-sibling::cbc:ChargeIndicator = 'true']"> @@ -1375,7 +1369,7 @@ + match="/Invoice:Invoice/cac:AllowanceCharge/cbc:AllowanceChargeReasonCode[preceding-sibling::cbc:ChargeIndicator = 'true']"> @@ -1388,13 +1382,16 @@ - + + - - + + @@ -1409,7 +1406,7 @@ + match="/Invoice:Invoice/cac:LegalMonetaryTotal/cbc:LineExtensionAmount"> @@ -1417,15 +1414,14 @@ + match="/Invoice:Invoice/cac:LegalMonetaryTotal/cbc:AllowanceTotalAmount"> - + @@ -1433,7 +1429,7 @@ + match="/Invoice:Invoice/cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount"> @@ -1455,15 +1451,14 @@ + match="/Invoice:Invoice/cac:LegalMonetaryTotal/cbc:TaxInclusiveAmount"> - + @@ -1471,15 +1466,14 @@ + match="/Invoice:Invoice/cac:LegalMonetaryTotal/cbc:PayableRoundingAmount"> - + @@ -1487,11 +1481,12 @@ - + + + select="./cac:TaxCategory/cbc:ID[following-sibling::cac:TaxScheme/cbc:ID = 'VAT']"/> @@ -1505,15 +1500,14 @@ + match="/Invoice:Invoice/cac:TaxTotal/cac:TaxSubtotal/cbc:TaxableAmount"> - + @@ -1521,7 +1515,7 @@ + match="/Invoice:Invoice/cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:ID[following-sibling::cac:TaxScheme/cbc:ID = 'VAT']"> @@ -1534,7 +1528,7 @@ + match="/Invoice:Invoice/cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:Percent"> @@ -1542,7 +1536,7 @@ + match="/Invoice:Invoice/cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:TaxExemptionReason"> @@ -1550,7 +1544,7 @@ + match="/Invoice:Invoice/cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:TaxExemptionReasonCode"> @@ -1563,12 +1557,13 @@ - + + + select="./cac:Attachment/cbc:EmbeddedDocumentBinaryObject"/> @@ -1578,8 +1573,7 @@ - + @@ -1587,7 +1581,7 @@ + match="/Invoice:Invoice/cac:AdditionalDocumentReference/cbc:DocumentDescription"> @@ -1595,7 +1589,7 @@ + match="/Invoice:Invoice/cac:AdditionalDocumentReference/cac:Attachment/cac:ExternalReference/cbc:URI"> @@ -1603,7 +1597,7 @@ + match="/Invoice:Invoice/cac:AdditionalDocumentReference/cac:Attachment/cbc:EmbeddedDocumentBinaryObject"> @@ -1611,11 +1605,13 @@ - + + + select="./cac:DocumentReference/cbc:ID[following-sibling::cbc:DocumentTypeCode = '130']"/> + @@ -1623,9 +1619,9 @@ + select="./cac:AllowanceCharge[cbc:ChargeIndicator = 'false']"/> + select="./cac:AllowanceCharge[cbc:ChargeIndicator = 'true']"/> @@ -1654,26 +1650,24 @@ + match="cac:DocumentReference/cbc:ID[following-sibling::cbc:DocumentTypeCode = '130']"> - + - + - + @@ -1685,24 +1679,21 @@ - + - + - + @@ -1710,7 +1701,8 @@ - + + @@ -1722,35 +1714,34 @@ - + - + - - + + + + select="./cbc:Amount[preceding-sibling::cbc:ChargeIndicator = 'false']"/> + select="./cbc:BaseAmount[preceding-sibling::cbc:ChargeIndicator = 'false']"/> + select="./cbc:MultiplierFactorNumeric[preceding-sibling::cbc:ChargeIndicator = 'false']"/> + select="./cbc:AllowanceChargeReason[preceding-sibling::cbc:ChargeIndicator = 'false']"/> + select="./cbc:AllowanceChargeReasonCode[preceding-sibling::cbc:ChargeIndicator = 'false']" + /> @@ -1761,7 +1752,7 @@ + match="cac:AllowanceCharge/cbc:Amount[preceding-sibling::cbc:ChargeIndicator = 'false']"> @@ -1769,7 +1760,7 @@ + match="cac:AllowanceCharge/cbc:BaseAmount[preceding-sibling::cbc:ChargeIndicator = 'false']"> @@ -1777,7 +1768,7 @@ + match="cac:AllowanceCharge/cbc:MultiplierFactorNumeric[preceding-sibling::cbc:ChargeIndicator = 'false']"> @@ -1785,7 +1776,7 @@ + match="cac:AllowanceCharge/cbc:AllowanceChargeReason[preceding-sibling::cbc:ChargeIndicator = 'false']"> @@ -1793,7 +1784,7 @@ + match="cac:AllowanceCharge/cbc:AllowanceChargeReasonCode[preceding-sibling::cbc:ChargeIndicator = 'false']"> @@ -1805,19 +1796,20 @@ - - + + + + select="./cbc:Amount[preceding-sibling::cbc:ChargeIndicator = 'true']"/> + select="./cbc:BaseAmount[preceding-sibling::cbc:ChargeIndicator = 'true']"/> + select="./cbc:MultiplierFactorNumeric[preceding-sibling::cbc:ChargeIndicator = 'true']"/> + select="./cbc:AllowanceChargeReason[preceding-sibling::cbc:ChargeIndicator = 'true']"/> + select="./cbc:AllowanceChargeReasonCode[preceding-sibling::cbc:ChargeIndicator = 'true']" + /> @@ -1828,7 +1820,7 @@ + match="cac:AllowanceCharge/cbc:Amount[preceding-sibling::cbc:ChargeIndicator = 'true']"> @@ -1836,7 +1828,7 @@ + match="cac:AllowanceCharge/cbc:BaseAmount[preceding-sibling::cbc:ChargeIndicator = 'true']"> @@ -1844,7 +1836,7 @@ + match="cac:AllowanceCharge/cbc:MultiplierFactorNumeric[preceding-sibling::cbc:ChargeIndicator = 'true']"> @@ -1852,7 +1844,7 @@ + match="cac:AllowanceCharge/cbc:AllowanceChargeReason[preceding-sibling::cbc:ChargeIndicator = 'true']"> @@ -1860,7 +1852,7 @@ + match="cac:AllowanceCharge/cbc:AllowanceChargeReasonCode[preceding-sibling::cbc:ChargeIndicator = 'true']"> @@ -1873,12 +1865,13 @@ - + + + select="./cac:AllowanceCharge/cbc:Amount[preceding-sibling::cbc:ChargeIndicator = 'false']"/> + select="./cac:AllowanceCharge/cbc:BaseAmount[preceding-sibling::cbc:ChargeIndicator = 'false']"/> @@ -1890,8 +1883,7 @@ - + @@ -1899,7 +1891,7 @@ + match="cac:Price/cac:AllowanceCharge/cbc:Amount[preceding-sibling::cbc:ChargeIndicator = 'false']"> @@ -1907,23 +1899,21 @@ + match="cac:Price/cac:AllowanceCharge/cbc:BaseAmount[preceding-sibling::cbc:ChargeIndicator = 'false']"> - + - + @@ -1935,9 +1925,9 @@ - - + + + @@ -1949,8 +1939,7 @@ - + @@ -1962,8 +1951,7 @@ - + @@ -1971,14 +1959,15 @@ - + + + select="./cac:CommodityClassification/cbc:ItemClassificationCode"/> @@ -1990,62 +1979,56 @@ - + - + - + - + - + - + + match="cac:Item/cac:CommodityClassification/cbc:ItemClassificationCode"> - + - + @@ -2057,9 +2040,9 @@ - - + + + @@ -2071,16 +2054,14 @@ - + - + @@ -2088,7 +2069,8 @@ - + + - + - + + + select="cac:Item/cac:CommodityClassification/cbc:ItemClassificationCode"/> + select="cac:Item/cac:OriginCountry/cbc:IdentificationCode"/> @@ -2136,10 +2119,10 @@ - - - + + + + @@ -2150,20 +2133,22 @@ - + - + match="cac:SubInvoiceLine/cac:AllowanceCharge[cbc:ChargeIndicator = 'false']"> + + + select="cac:AllowanceCharge/cbc:Amount[preceding-sibling::cbc:ChargeIndicator = 'false']"/> + select="cac:AllowanceCharge/cbc:BaseAmount[preceding-sibling::cbc:ChargeIndicator = 'false']"/> + select="cac:AllowanceCharge/cbc:MultiplierFactorNumeric[preceding-sibling::cbc:ChargeIndicator = 'false']"/> + select="cac:AllowanceCharge/cbc:AllowanceChargeReason[preceding-sibling::cbc:ChargeIndicator = 'false']"/> + select="cac:AllowanceCharge/cbc:AllowanceChargeReasonCode[preceding-sibling::cbc:ChargeIndicator = 'false']" + /> @@ -2174,18 +2159,20 @@ - + match="cac:SubInvoiceLine/cac:AllowanceCharge[cbc:ChargeIndicator = 'true']"> + + + select="cac:AllowanceCharge/cbc:Amount[preceding-sibling::cbc:ChargeIndicator = 'true']"/> + select="cac:AllowanceCharge/cbc:BaseAmount[preceding-sibling::cbc:ChargeIndicator = 'true']"/> + select="cac:AllowanceCharge/cbc:MultiplierFactorNumeric[preceding-sibling::cbc:ChargeIndicator = 'true']"/> + select="cac:AllowanceCharge/cbc:AllowanceChargeReason[preceding-sibling::cbc:ChargeIndicator = 'true']"/> + select="cac:AllowanceCharge/cbc:AllowanceChargeReasonCode[preceding-sibling::cbc:ChargeIndicator = 'true']" + /> @@ -2196,7 +2183,8 @@ - + + @@ -2209,9 +2197,11 @@ - + + - + @@ -2220,14 +2210,15 @@ - + - + + + select="cac:Price/cac:AllowanceCharge/cbc:Amount[preceding-sibling::cbc:ChargeIndicator = 'false']"/> + select="cac:Price/cac:AllowanceCharge/cbc:BaseAmount[preceding-sibling::cbc:ChargeIndicator = 'false']"/> @@ -2239,140 +2230,39 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - + + + + + + - - + + + + + + - - Liefert einen XPath-Pfad, welches $n eindeutig identifiziert. - - - - - - - - - - - Liefert einen XPath-Pfad, welches $n eindeutig identifiziert. - - - - - / - - - [ - - ] - - - - /@ - + + + + + + diff --git a/library/src/main/resources/stylesheets/xr-content.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/xr-content.xsl similarity index 99% rename from library/src/main/resources/stylesheets/xr-content.xsl rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/xr-content.xsl index 4b8adb6f0..bb5c3abb5 100644 --- a/library/src/main/resources/stylesheets/xr-content.xsl +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/xr-content.xsl @@ -9,6 +9,7 @@ + @@ -261,12 +262,14 @@ + + @@ -811,13 +814,14 @@ - - + + + diff --git a/library/src/main/resources/stylesheets/xr-pdf.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/xr-pdf.xsl similarity index 96% rename from library/src/main/resources/stylesheets/xr-pdf.xsl rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/xr-pdf.xsl index 406e40444..153dba41d 100644 --- a/library/src/main/resources/stylesheets/xr-pdf.xsl +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/xr-pdf.xsl @@ -64,7 +64,7 @@ - + - - SourceSansPro - SourceSerifPro - - - - - - - - - - - 9pt - 12pt - 3 - true - de - - - - - 18pt - - false - all - - - - - 18pt - - bold - 4mm - false - all - always - - - - - 0.5pt solid - 2.5pt - all - 4mm - always - - - - - 9pt - - bold - 0.5pt solid - 4pt 6pt - always - 0 - - - - - 10pt - - bold - 1mm - 2mm - 2mm - all - always - - - - - 2mm - 3mm - 0.5pt dotted - #999999 - always - - - - #eeeeee - 28 - - - 7pt - 10pt - 1mm - 1mm - 2mm - 1mm - - - - 9pt - 10pt - - 1mm - 1mm - 2mm - 2mm - always - - - - - 9pt - left - 0.2mm - 0.2mm - 0mm - 1mm - 0mm - always - - - - 9pt - left - 0.2mm - 0.2mm - 0mm - 1mm - 0mm - always - - - - 9pt - right - 0.2mm - 0.2mm - 0mm - 0mm - 0mm - always - - - - 9pt - left - 0.4mm - 0.2mm - 0mm - 1mm - 0.1pt solid #999999 - always - - - - 9pt - left - 0.4mm - 0.2mm - 0mm - 1mm - 0.1pt solid #999999 - always - - - - 9pt - bold - right - 0.4mm - 0.2mm - 0mm - 0mm - 0.1pt solid #999999 - always - - - - - 10mm - - - - 2mm - always - all - - - - 2mm - - - - - 2pt - 2pt - 100% - fixed - 2mm - - - - bold - - - - - - - - - 80% - italic - - - - 2pt - 2pt - 100% - fixed - 80% - italic - - - + + + + + + SourceSerifPro + SourceSerifPro + + + + + + + + + + + 9pt + 12pt + 3 + true + de + + + + + 18pt + + false + all + + + + + 18pt + + bold + 4mm + false + all + always + + + + + 0.5pt solid + 2.5pt + all + 4mm + always + + + + + 9pt + + bold + 0.5pt solid + 4pt 6pt + always + 0 + + + + + 10pt + + bold + 1mm + 2mm + 2mm + all + always + + + + + 2mm + 3mm + 0.5pt dotted + #999999 + always + + + + #eeeeee + 30 + + + 7pt + 10pt + 1mm + 1mm + 2mm + 1mm + + + + 9pt + 10pt + + 1mm + 1mm + 2mm + 2mm + always + + + + + 9pt + left + 0.2mm + 0.2mm + 0mm + 1mm + 0mm + always + + + + 9pt + left + 0.2mm + 0.2mm + 0mm + 1mm + 0mm + always + + + + 9pt + right + 0.2mm + 0.2mm + 0mm + 0mm + 0mm + always + + + + 9pt + left + 0.4mm + 0.2mm + 0mm + 1mm + 0.1pt solid #999999 + always + + + + 9pt + left + 0.4mm + 0.2mm + 0mm + 1mm + 0.1pt solid #999999 + always + + + + 9pt + bold + right + 0.4mm + 0.2mm + 0mm + 0mm + 0.1pt solid #999999 + always + + + + + 10mm + + + + 2mm + always + all + + + + 2mm + + + + + 2pt + 2pt + 100% + fixed + 2mm + + + + bold + + + + + + + + + 80% + italic + + + + 2pt + 2pt + 100% + fixed + 80% + italic + + + diff --git a/library/src/main/resources/stylesheets/xr-pdf/lib/structure/content-templates.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/xr-pdf/lib/structure/content-templates.xsl similarity index 99% rename from library/src/main/resources/stylesheets/xr-pdf/lib/structure/content-templates.xsl rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/xr-pdf/lib/structure/content-templates.xsl index de3c25aa3..d0ebbcb9a 100644 --- a/library/src/main/resources/stylesheets/xr-pdf/lib/structure/content-templates.xsl +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/xr-pdf/lib/structure/content-templates.xsl @@ -480,7 +480,7 @@ - + : diff --git a/library/src/main/resources/stylesheets/xr-pdf/lib/structure/layout-master-set.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/xr-pdf/lib/structure/layout-master-set.xsl similarity index 100% rename from library/src/main/resources/stylesheets/xr-pdf/lib/structure/layout-master-set.xsl rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/xr-pdf/lib/structure/layout-master-set.xsl diff --git a/library/src/main/resources/stylesheets/xr-pdf/lib/structure/page-sequence.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/xr-pdf/lib/structure/page-sequence.xsl similarity index 99% rename from library/src/main/resources/stylesheets/xr-pdf/lib/structure/page-sequence.xsl rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/xr-pdf/lib/structure/page-sequence.xsl index 864c29dbe..1b6d6df85 100644 --- a/library/src/main/resources/stylesheets/xr-pdf/lib/structure/page-sequence.xsl +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/xr-pdf/lib/structure/page-sequence.xsl @@ -65,4 +65,4 @@ - \ No newline at end of file + diff --git a/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/xrechnung-html.xsl b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/xrechnung-html.xsl new file mode 100644 index 000000000..15f5a21b8 --- /dev/null +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/xrechnung-html.xsl @@ -0,0 +1,2260 @@ + + + + + + + + + + + + + + + + + + + + XRechnung + + + + + + + +
+
+ +
+
+
+ + + + + +
+
+
+ + + +
+ + + +
+ +
+ +
+
+
+ + + +
+ + + +
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ +
+
+
+
+ + + +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+
+ + + +
+
+ +
+
+
+
+
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+ +
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+
+ + + +
+
+
+ +
+
+
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ + + +
+
+
+
+
+
+
+ : +
+
+ +
+
+
+ + : + +
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+
+
+
+
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+ +
+
+
+
+ + + + +
+ + : + +
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+
+ + +
+
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+
+
+ + +
+
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+
+ +
+
+
+
+ +
+
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+ + +
+
+
+ +
+
+
+
+ : + + + +
+
+
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+
+ % +
+
+
+
+ +
+
+
+ +
+
+
+ + +
+
+ : + + + +
+
+ : + + + +
+
+
+
+
+
+ + + +
+
+
+ +
+
+
+
+ : + + + +
+
+
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+
+ % +
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+
+ +
+
+
+
+
+ : + + + +
+
+ : + + + +
+
+
+
+
+
+ + + +
+
+
+ +
+
+
+
+ : + + + +
+
+
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+
+ % +
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+
+ +
+
+
+
+
+ : + + + +
+
+ : + + + +
+
+
+
+
+
+ + + +
+
+ +
+
+
+
+ : +
+
+ + + +
+
+
+
+
+
+
+ : +
+
+ + + +
+
+
+
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+
+ + + +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+
+ + + +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+
+ + + +
+
+ +
+ +
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+
+
+ + + +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+
+ + + +
+
+ +
+ +
+
+ + + +
+
+
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+ + : + +
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ % +
+
+
+
+
+
+
+
+
+
+ +
+ +
+
+
+ +
+
+ +
+
+
+
+ +
+
+ % +
+
+
+
+ +
+
+ +
+
+
+
+
+ : + + + +
+
+ : + + + +
+
+
+
+
+
+ +
+ +
+
+
+ +
+
+ +
+
+
+
+ +
+
+ % +
+
+
+
+ +
+
+ +
+
+
+
+
+ : + + + +
+
+ : + + + +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+ + : + + +
+
+
+
+
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+ +
+
+
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+ + +
+
+ : +
+
+ +
+
+
+ + +
+
+ : +
+
+ +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+
+
+ +
+ +
+
+
+
+ +
+ +
+
+
+
+ + + +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+ +
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+
+ + + +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+
+ + + +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+
+ + + +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+
+ + + +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+
+ + + +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+
+ + + +
+
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ + + +
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ + + +
+
+ +
+
+ : +
+ + + +
+ + + + + + + + + + +
+ + +
+ + +
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ + + +
+
+
+
+
+ +
+ +
+
+
+
+
+ + + +
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ : +
+
+ +
+
+
+
+ + diff --git a/library/src/main/resources/xrechnung-viewer.css b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/xrechnung-viewer.css similarity index 97% rename from library/src/main/resources/xrechnung-viewer.css rename to library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/xrechnung-viewer.css index adea4c9bb..c2dda2b96 100644 --- a/library/src/main/resources/xrechnung-viewer.css +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/xrechnung-viewer.css @@ -59,6 +59,10 @@ h4 padding: 0 2%; } +.menue .innen div { + display: inline-block; + margin: 0 16px; +} /* Formatierungen *************************************************/ @@ -181,6 +185,17 @@ button margin-bottom: 30px; } +.noscript +{ + color: #000; + text-align: center; + padding: 20px; + margin-bottom: 30px; + width: 100%; + border: 1px solid #ff6347; + background-color: #ffd5ce; +} + .haftungausschluss { color: #000; diff --git a/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/xrechnung-viewer.js b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/xrechnung-viewer.js new file mode 100644 index 000000000..ae5a3057d --- /dev/null +++ b/library/src/main/resources/xrechnung-3.0.2-xrechnung-visualization-2024-06-20/xsl/xrechnung-viewer.js @@ -0,0 +1,148 @@ + +/* Tab-Container aufbauen **************************************************/ + +var a = new Array("uebersicht", "details", "zusaetze", "anlagen", "laufzettel"); +var b = new Array("menueUebersicht", "menueDetails", "menueZusaetze", "menueAnlagen", "menueLaufzettel"); + +function show(e) { + var i = 0; + var j = 1; + for (var t = 0; t < b.length; t++) { + if (b[t] === e.id) { + i = t; + if (i > 0) { + j = 0; + } else { + j = i + 1; + } + break; + } + } + e.setAttribute("class", "btnAktiv"); + e.setAttribute("aria-selected", "true"); + for (var k = 0; k < b.length; k++) { + if (k === i && (document.getElementById(a[k]) != null)) { + document.getElementById(a[k]).style.display = "block"; + if (i === j) + j = i + 1; + } else { + if (document.getElementById(a[k]) != null) { + document.getElementById(a[j]).style.display = "none"; + document.getElementById(b[j]).setAttribute("class", "btnInaktiv"); + document.getElementById(b[j]).setAttribute("aria-selected", "false"); + j += 1; + } + } + } +} + +window.onload = function () { + document.getElementById(b[0]).setAttribute("class", "btnAktiv"); + document.getElementById(b[0]).setAttribute("aria-selected", "true"); + // could be substituted by an xslt solution + document.body.querySelectorAll('[data-title]').forEach(function(element, index) { + element.setAttribute('title', element.getAttribute('data-title')); + }); +} + +/* Eingebettete Binaerdaten runterladen ************************************/ + + +function base64_to_binary(data) { + var chars = atob(data); + var bytes = new Array(chars.length); + for (var i = 0; i < chars.length; i++) { + bytes[i] = chars.charCodeAt(i); + } + return new Uint8Array(bytes); +} + +function downloadData(element_id, mimetype, filename) { + var data_element = document.getElementById(element_id); + var text = data_element.innerHTML; + var binary = base64_to_binary(text); + var blob = new Blob([binary], { + type: mimetype, size: binary.length + }); + + if (window.navigator && window.navigator.msSaveOrOpenBlob) { + // IE + window.navigator.msSaveOrOpenBlob(blob, filename); + } else { + saveAs(blob, filename); + } +} + + +/* Polyfill IE atob/btoa ************************************/ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([], function () { + factory(root); + }); + } else factory(root); + // node.js has always supported base64 conversions, while browsers that support + // web workers support base64 too, but you may never know. +})(typeof exports !== "undefined" ? exports : this, function (root) { + if (root.atob) { + // Some browsers' implementation of atob doesn't support whitespaces + // in the encoded string (notably, IE). This wraps the native atob + // in a function that strips the whitespaces. + // The original function can be retrieved in atob.original + try { + root.atob(" "); + } catch (e) { + root.atob = (function (atob) { + var func = function (string) { + return atob(String(string).replace(/[\t\n\f\r ]+/g, "")); + }; + func.original = atob; + return func; + })(root.atob); + } + return; + } + + // base64 character set, plus padding character (=) + var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", + // Regular expression to check formal correctness of base64 encoded strings + b64re = /^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/; + + root.btoa = function (string) { + string = String(string); + var bitmap, a, b, c, + result = "", i = 0, + rest = string.length % 3; // To determine the final padding + + for (; i < string.length;) { + if ((a = string.charCodeAt(i++)) > 255 || (b = string.charCodeAt(i++)) > 255 || (c = string.charCodeAt(i++)) > 255) + throw new TypeError("Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range."); + + bitmap = (a << 16) | (b << 8) | c; + result += b64.charAt(bitmap >> 18 & 63) + b64.charAt(bitmap >> 12 & 63) + b64.charAt(bitmap >> 6 & 63) + b64.charAt(bitmap & 63); + } + + // If there's need of padding, replace the last 'A's with equal signs + return rest ? result.slice(0, rest - 3) + "===".substring(rest) : result; + }; + + root.atob = function (string) { + // atob can work with strings with whitespaces, even inside the encoded part, + // but only \t, \n, \f, \r and ' ', which can be stripped. + string = String(string).replace(/[\t\n\f\r ]+/g, ""); + if (!b64re.test(string)) + throw new TypeError("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded."); + + // Adding the padding if missing, for semplicity + string += "==".slice(2 - (string.length & 3)); + var bitmap, result = "", r1, r2, i = 0; + for (; i < string.length;) { + bitmap = b64.indexOf(string.charAt(i++)) << 18 | b64.indexOf(string.charAt(i++)) << 12 | (r1 = b64.indexOf(string.charAt(i++))) << 6 | (r2 = b64.indexOf(string.charAt(i++))); + + result += r1 === 64 ? String.fromCharCode(bitmap >> 16 & 255) : r2 === 64 ? String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255) : String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255, bitmap & 255); + } + return result; + }; +}); diff --git a/library/src/main/resources/xrechnung-viewer.js b/library/src/main/resources/xrechnung-viewer.js deleted file mode 100644 index 2d547b86e..000000000 --- a/library/src/main/resources/xrechnung-viewer.js +++ /dev/null @@ -1,145 +0,0 @@ - -/* Tab-Container aufbauen **************************************************/ - -var a = new Array("uebersicht", "details", "zusaetze", "anlagen", "laufzettel"); -var b = new Array("menueUebersicht", "menueDetails", "menueZusaetze", "menueAnlagen", "menueLaufzettel"); - -function show(e) { - var i = 0; - var j = 1; - for (var t = 0; t < b.length; t++) { - if (b[t] === e.id) { - i = t; - if (i > 0) { - j = 0; - } else { - j = i + 1; - } - break; - } - } - e.setAttribute("class", "btnAktiv"); - for (var k = 0; k < b.length; k++) { - if (k === i && (document.getElementById(a[k]) != null)) { - document.getElementById(a[k]).style.display = "block"; - if (i === j) - j = i + 1; - } else { - if (document.getElementById(a[k]) != null) { - document.getElementById(a[j]).style.display = "none"; - document.getElementById(b[j]).setAttribute("class", "btnInaktiv"); - j += 1; - } - } - } -} -window.onload = function () { - document.getElementById(b[0]).setAttribute("class", "btnAktiv"); -} - -/* Eingebettete Binaerdaten runterladen ************************************/ - - -function base64_to_binary (data) { - var chars = atob(data); - var bytes = new Array(chars.length); - for (var i = 0; i < chars.length; i++) { - bytes[i] = chars.charCodeAt(i); - } - return new Uint8Array(bytes); -} - -function downloadData (element_id) { - var data_element = document.getElementById(element_id); - var mimetype = data_element.getAttribute('mimeType'); - var filename = data_element.getAttribute('filename'); - var text = data_element.innerHTML; - var binary = base64_to_binary(text); - var blob = new Blob([binary], { - type: mimetype, size: binary.length - }); - - if (window.navigator && window.navigator.msSaveOrOpenBlob) { - // IE - window.navigator.msSaveOrOpenBlob(blob, filename); - } else { - // Non-IE - var url = window.URL.createObjectURL(blob); - window.open(url); - } -} - - -/* Polyfill IE atob/btoa ************************************/ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define([], function () { - factory(root); - }); - } else factory(root); - // node.js has always supported base64 conversions, while browsers that support - // web workers support base64 too, but you may never know. -})(typeof exports !== "undefined" ? exports: this, function (root) { - if (root.atob) { - // Some browsers' implementation of atob doesn't support whitespaces - // in the encoded string (notably, IE). This wraps the native atob - // in a function that strips the whitespaces. - // The original function can be retrieved in atob.original - try { - root.atob(" "); - } - catch (e) { - root.atob = (function (atob) { - var func = function (string) { - return atob(String(string).replace(/[\t\n\f\r ]+/g, "")); - }; - func.original = atob; - return func; - })(root.atob); - } - return; - } - - // base64 character set, plus padding character (=) - var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", - // Regular expression to check formal correctness of base64 encoded strings - b64re = /^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/; - - root.btoa = function (string) { - string = String(string); - var bitmap, a, b, c, - result = "", i = 0, - rest = string.length % 3; // To determine the final padding - - for (; i < string.length;) { - if ((a = string.charCodeAt(i++)) > 255 || (b = string.charCodeAt(i++)) > 255 || (c = string.charCodeAt(i++)) > 255) - throw new TypeError("Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range."); - - bitmap = (a << 16) | (b << 8) | c; - result += b64.charAt(bitmap >> 18 & 63) + b64.charAt(bitmap >> 12 & 63) + b64.charAt(bitmap >> 6 & 63) + b64.charAt(bitmap & 63); - } - - // If there's need of padding, replace the last 'A's with equal signs - return rest ? result.slice(0, rest - 3) + "===".substring(rest): result; - }; - - root.atob = function (string) { - // atob can work with strings with whitespaces, even inside the encoded part, - // but only \t, \n, \f, \r and ' ', which can be stripped. - string = String(string).replace(/[\t\n\f\r ]+/g, ""); - if (! b64re.test(string)) - throw new TypeError("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded."); - - // Adding the padding if missing, for semplicity - string += "==".slice(2 - (string.length & 3)); - var bitmap, result = "", r1, r2, i = 0; - for (; i < string.length;) { - bitmap = b64.indexOf(string.charAt(i++)) << 18 | b64.indexOf(string.charAt(i++)) << 12 | (r1 = b64.indexOf(string.charAt(i++))) << 6 | (r2 = b64.indexOf(string.charAt(i++))); - - result += r1 === 64 ? String.fromCharCode(bitmap >> 16 & 255): r2 === 64 ? String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255): String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255, bitmap & 255); - } - return result; - }; -}); \ No newline at end of file diff --git a/library/src/main/resources/stylesheets/ZUGFeRD_1p0_c1p0_s1p0.xslt b/library/src/main/resources/zugferd10-en/Stylesheet/ZUGFeRD_1p0_c1p0_s1p0.xslt similarity index 98% rename from library/src/main/resources/stylesheets/ZUGFeRD_1p0_c1p0_s1p0.xslt rename to library/src/main/resources/zugferd10-en/Stylesheet/ZUGFeRD_1p0_c1p0_s1p0.xslt index bf0b71e40..21e87cb57 100644 --- a/library/src/main/resources/stylesheets/ZUGFeRD_1p0_c1p0_s1p0.xslt +++ b/library/src/main/resources/zugferd10-en/Stylesheet/ZUGFeRD_1p0_c1p0_s1p0.xslt @@ -1,3008 +1,3008 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - <meta http-equiv="X-UA-Compatible" content="IE=9"/> - <xsl:comment>[if IE]><STYLE type="text/css">.altova-rotate-left-textbox{filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3)} .altova-rotate-right-textbox{filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1)} </STYLE><![endif]</xsl:comment> - <xsl:comment>[if !IE]><!</xsl:comment> - <style type="text/css">.altova-rotate-left-textbox{-webkit-transform: rotate(-90deg) translate(-100%, 0%); -webkit-transform-origin: 0% 0%;-moz-transform: rotate(-90deg) translate(-100%, 0%); -moz-transform-origin: 0% 0%;-ms-transform: rotate(-90deg) translate(-100%, 0%); -ms-transform-origin: 0% 0%;}.altova-rotate-right-textbox{-webkit-transform: rotate(90deg) translate(0%, -100%); -webkit-transform-origin: 0% 0%;-moz-transform: rotate(90deg) translate(0%, -100%); -moz-transform-origin: 0% 0%;-ms-transform: rotate(90deg) translate(0%, -100%); -ms-transform-origin: 0% 0%;}</style> - <xsl:comment><![endif]</xsl:comment> - <style type="text/css">@page { margin-left:0.60in; margin-right:0.60in; margin-top:0.79in; margin-bottom:0.79in } @media print { br.altova-page-break { page-break-before: always; } }</style> - </head> - <body style="font-family:Courier; font-size:small; "> - <xsl:for-each select="$XML"> - <xsl:for-each select="rsm:CrossIndustryDocument"> - <span> - <xsl:text>Stylesheet Lesbarmachung der XML-Daten von ZUGFeRD-Rechnungen</xsl:text> - </span> - <br/> - <span> - <xsl:text>ZUGFeRD-Version   : 1.0 vom 25.06.2014 </xsl:text> - </span> - <br/> - <span> - <xsl:text>Stylesheet-Version: 1.0 vom 25.06.2014</xsl:text> - </span> - <br/> - <span> - <xsl:text>Codelisten-Version: 1.0 vom 25.06.2014</xsl:text> - </span> - <br/> - <span> - <xsl:text>(c) AWV e.V. 2014</xsl:text> - </span> - <xsl:variable name="altova:table"> - <table style="border-collapse:collapse; " border="1" width="100%"> - <xsl:variable name="altova:CurrContextGrid_0" select="."/> - <xsl:variable name="altova:ColumnData"/> - <tbody> - <tr> - <td> - <br/> - <h2> - <xsl:for-each select="rsm:HeaderExchangedDocument"> - <xsl:for-each select="ram:Name"> - <span style="font-weight:bold; "> - <xsl:apply-templates/> - </span> - </xsl:for-each> - <span style="empty-cells:hide; font-weight:bold; "> - <xsl:text>(</xsl:text> - </span> - <xsl:for-each select="ram:TypeCode"> - <xsl:apply-templates/> - </xsl:for-each> - <span style="empty-cells:hide; font-weight:bold; "> - <xsl:text>) Nr. </xsl:text> - </span> - <xsl:for-each select="ram:ID"> - <span style="font-weight:bold; "> - <xsl:apply-templates/> - </span> - </xsl:for-each> - <span style="empty-cells:hide; font-weight:bold; "> - <xsl:text> vom </xsl:text> - </span> - <xsl:for-each select="ram:IssueDateTime"> - <xsl:for-each select="udt:DateTimeString"> - <xsl:call-template name="ram:Datum"/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </h2> - <xsl:for-each select="rsm:SpecifiedExchangedDocumentContext"> - <br/> - <xsl:for-each select="ram:TestIndicator"> - <xsl:for-each select="udt:Indicator"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Testkennzeichen      : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="ram:BusinessProcessSpecifiedDocumentContextParameter"> - <xsl:for-each select="ram:ID"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Geschäftsprozess     : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="rsm:SpecifiedExchangedDocumentContext"> - <xsl:for-each select="ram:GuidelineSpecifiedDocumentContextParameter"> - <xsl:for-each select="ram:ID"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Anwendungsempfehlung : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="rsm:HeaderExchangedDocument"> - <xsl:for-each select="ram:CopyIndicator"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Kopie                : </xsl:text> - </span> - <xsl:for-each select="udt:Indicator"> - <xsl:apply-templates/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="rsm:HeaderExchangedDocument"> - <xsl:for-each select="ram:LanguageID"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Sprache              : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeSettlement"> - <xsl:for-each select="ram:InvoiceCurrencyCode"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Währung              : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <br/> - </td> - </tr> - <tr> - <td> - <xsl:for-each select="rsm:HeaderExchangedDocument"> - <xsl:for-each select="ram:EffectiveSpecifiedPeriod"> - <xsl:for-each select="ram:CompleteDateTime"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Vertragliches Fälligkeitsdatum: </xsl:text> - </span> - <xsl:for-each select="udt:DateTimeString"> - <xsl:call-template name="ram:Datum"/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeDelivery"> - <xsl:for-each select="ram:ActualDeliverySupplyChainEvent"> - <xsl:for-each select="ram:OccurrenceDateTime"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Liefer- und Leistungsdatum    : </xsl:text> - </span> - <xsl:for-each select="udt:DateTimeString"> - <xsl:call-template name="ram:Datum"/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeSettlement"> - <xsl:for-each select="ram:BillingSpecifiedPeriod"> - <xsl:for-each select="ram:StartDateTime"> - <br/> - <span> - <xsl:text>Abrechnungszeitraum           : </xsl:text> - </span> - <xsl:for-each select="udt:DateTimeString"> - <xsl:call-template name="ram:Datum"/> - </xsl:for-each> - </xsl:for-each> - <span> - <xsl:text> bis </xsl:text> - </span> - <xsl:for-each select="ram:EndDateTime"> - <xsl:for-each select="udt:DateTimeString"> - <xsl:call-template name="ram:Datum"/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <br/> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeAgreement"> - <xsl:for-each select="ram:BuyerReference"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Referenz des Käufers          : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeSettlement"> - <xsl:for-each select="ram:PaymentReference"> - <br/> - <span style="empty-cells:hide; font-weight:bold; "> - <xsl:text>Zahlungsreferenz              : </xsl:text> - </span> - <span style="font-weight:bold; "> - <xsl:apply-templates/> - </span> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeSettlement"> - <xsl:for-each select="ram:ReceivableSpecifiedTradeAccountingAccount"> - <xsl:for-each select="ram:ID"> - <br/> - <span> - <xsl:text>Buchungsreferenz              : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeAgreement"> - <xsl:for-each select="ram:ApplicableTradeDeliveryTerms"> - <xsl:for-each select="ram:DeliveryTypeCode"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Lieferbedingung (codiert)     : </xsl:text> - </span> - <xsl:call-template name="DeliveryTypeCode"/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeDelivery"> - <xsl:for-each select="ram:RelatedSupplyChainConsignment"> - <xsl:for-each select="ram:SpecifiedLogisticsTransportMovement"> - <xsl:for-each select="ram:ModeCode"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Versandart (codiert)          : </xsl:text> - </span> - <xsl:call-template name="ram:VersandMode"/> - </xsl:for-each> - <xsl:for-each select="ram:ID"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Versand-ID                    : </xsl:text> - </span> - <xsl:apply-templates/> - <xsl:for-each select="@schemeID"> - <span style="empty-cells:hide; "> - <xsl:text>, Art: </xsl:text> - </span> - <xsl:call-template name="ram:Versand_Identifer"/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <br/> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeAgreement"> - <xsl:for-each select="ram:BuyerOrderReferencedDocument"> - <xsl:for-each select="ram:ID"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Bestellung                    : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - <span style="empty-cells:hide; "> - <xsl:text> vom </xsl:text> - </span> - <xsl:for-each select="ram:IssueDateTime"> - <span> - <xsl:variable name="altova:seqContentStrings_1"> - <xsl:value-of select="format-number(number(substring(string(string(.)), 9, 2)), '00', 'format1')"/> - <xsl:variable name="sText" as="xs:string?"> - <xsl:text>. </xsl:text> - </xsl:variable> - <xsl:value-of select="$sText"/> - <xsl:value-of select="format-number(number(substring(string(string(.)), 6, 2)), '00', 'format1')"/> - <xsl:variable name="sText" as="xs:string?"> - <xsl:text>. </xsl:text> - </xsl:variable> - <xsl:value-of select="$sText"/> - <xsl:value-of select="format-number(number(substring(string(string(string(.))), 1, 4)), '0000', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_1" select="string($altova:seqContentStrings_1)"/> - <xsl:value-of select="$altova:sContent_1"/> - </span> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeDelivery"> - <xsl:for-each select="ram:DespatchAdviceReferencedDocument"> - <xsl:for-each select="ram:ID"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Lieferavis                    : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - <span style="empty-cells:hide; "> - <xsl:text> vom </xsl:text> - </span> - <xsl:for-each select="ram:IssueDateTime"> - <span> - <xsl:variable name="altova:seqContentStrings_2"> - <xsl:value-of select="format-number(number(substring(string(string(.)), 9, 2)), '00', 'format1')"/> - <xsl:variable name="sText" as="xs:string?"> - <xsl:text>. </xsl:text> - </xsl:variable> - <xsl:value-of select="$sText"/> - <xsl:value-of select="format-number(number(substring(string(string(.)), 6, 2)), '00', 'format1')"/> - <xsl:variable name="sText" as="xs:string?"> - <xsl:text>. </xsl:text> - </xsl:variable> - <xsl:value-of select="$sText"/> - <xsl:value-of select="format-number(number(substring(string(string(string(.))), 1, 4)), '0000', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_2" select="string($altova:seqContentStrings_2)"/> - <xsl:value-of select="$altova:sContent_2"/> - </span> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeDelivery"> - <xsl:for-each select="ram:DeliveryNoteReferencedDocument"> - <xsl:for-each select="ram:ID"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Lieferschein                  : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - <span style="empty-cells:hide; "> - <xsl:text> vom </xsl:text> - </span> - <xsl:for-each select="ram:IssueDateTime"> - <span> - <xsl:variable name="altova:seqContentStrings_3"> - <xsl:value-of select="format-number(number(substring(string(string(.)), 9, 2)), '00', 'format1')"/> - <xsl:variable name="sText" as="xs:string?"> - <xsl:text>. </xsl:text> - </xsl:variable> - <xsl:value-of select="$sText"/> - <xsl:value-of select="format-number(number(substring(string(string(.)), 6, 2)), '00', 'format1')"/> - <xsl:variable name="sText" as="xs:string?"> - <xsl:text>. </xsl:text> - </xsl:variable> - <xsl:value-of select="$sText"/> - <xsl:value-of select="format-number(number(substring(string(string(string(.))), 1, 4)), '0000', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_3" select="string($altova:seqContentStrings_3)"/> - <xsl:value-of select="$altova:sContent_3"/> - </span> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeAgreement"> - <xsl:for-each select="ram:ContractReferencedDocument"> - <xsl:for-each select="ram:ID"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Vertrag                       : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - <span style="empty-cells:hide; "> - <xsl:text> vom </xsl:text> - </span> - <xsl:for-each select="ram:IssueDateTime"> - <span> - <xsl:variable name="altova:seqContentStrings_4"> - <xsl:value-of select="format-number(number(substring(string(string(.)), 9, 2)), '00', 'format1')"/> - <xsl:variable name="sText" as="xs:string?"> - <xsl:text>. </xsl:text> - </xsl:variable> - <xsl:value-of select="$sText"/> - <xsl:value-of select="format-number(number(substring(string(string(.)), 6, 2)), '00', 'format1')"/> - <xsl:variable name="sText" as="xs:string?"> - <xsl:text>. </xsl:text> - </xsl:variable> - <xsl:value-of select="$sText"/> - <xsl:value-of select="format-number(number(substring(string(string(string(.))), 1, 4)), '0000', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_4" select="string($altova:seqContentStrings_4)"/> - <xsl:value-of select="$altova:sContent_4"/> - </span> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeAgreement"> - <xsl:for-each select="ram:CustomerOrderReferencedDocument"> - <xsl:for-each select="ram:ID"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Kundenbestellung              : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - <span style="empty-cells:hide; "> - <xsl:text> vom </xsl:text> - </span> - <xsl:for-each select="ram:IssueDateTime"> - <span> - <xsl:variable name="altova:seqContentStrings_5"> - <xsl:value-of select="format-number(number(substring(string(string(.)), 9, 2)), '00', 'format1')"/> - <xsl:variable name="sText" as="xs:string?"> - <xsl:text>. </xsl:text> - </xsl:variable> - <xsl:value-of select="$sText"/> - <xsl:value-of select="format-number(number(substring(string(string(.)), 6, 2)), '00', 'format1')"/> - <xsl:variable name="sText" as="xs:string?"> - <xsl:text>. </xsl:text> - </xsl:variable> - <xsl:value-of select="$sText"/> - <xsl:value-of select="format-number(number(substring(string(string(string(.))), 1, 4)), '0000', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_5" select="string($altova:seqContentStrings_5)"/> - <xsl:value-of select="$altova:sContent_5"/> - </span> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeAgreement"> - <xsl:for-each select="ram:AdditionalReferencedDocument"> - <xsl:for-each select="ram:ID"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Weitere Referenz              : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - <span style="empty-cells:hide; "> - <xsl:text> vom </xsl:text> - </span> - <xsl:for-each select="ram:IssueDateTime"> - <span> - <xsl:variable name="altova:seqContentStrings_6"> - <xsl:value-of select="format-number(number(substring(string(string(.)), 9, 2)), '00', 'format1')"/> - <xsl:variable name="sText" as="xs:string?"> - <xsl:text>. </xsl:text> - </xsl:variable> - <xsl:value-of select="$sText"/> - <xsl:value-of select="format-number(number(substring(string(string(.)), 6, 2)), '00', 'format1')"/> - <xsl:variable name="sText" as="xs:string?"> - <xsl:text>. </xsl:text> - </xsl:variable> - <xsl:value-of select="$sText"/> - <xsl:value-of select="format-number(number(substring(string(string(string(.))), 1, 4)), '0000', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_6" select="string($altova:seqContentStrings_6)"/> - <xsl:value-of select="$altova:sContent_6"/> - </span> - </xsl:for-each> - <xsl:for-each select="ram:TypeCode"> - <span style="empty-cells:hide; "> - <xsl:text>, Art der Referenz: </xsl:text> - </span> - <xsl:call-template name="ram:Referenz"/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <br/> - <span style="empty-cells:hide; "> - <xsl:text> </xsl:text> - </span> - </td> - </tr> - <tr> - <td> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeAgreement"> - <xsl:for-each select="ram:SellerTradeParty"> - <br/> - <span style="empty-cells:hide; font-weight:bold; text-decoration:underline; "> - <xsl:text>Verkäufer:</xsl:text> - </span> - <br/> - <xsl:call-template name="ram:Party"/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeAgreement"> - <xsl:for-each select="ram:BuyerTradeParty"> - <br/> - <span style="empty-cells:hide; font-weight:bold; text-decoration:underline; "> - <xsl:text>Käufer:</xsl:text> - </span> - <br/> - <xsl:call-template name="ram:Party"/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeAgreement"> - <xsl:for-each select="ram:ProductEndUserTradeParty"> - <br/> - <span style="empty-cells:hide; font-weight:bold; text-decoration:underline; "> - <xsl:text>Endverbraucher:</xsl:text> - </span> - <br/> - <xsl:call-template name="ram:Party"/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeDelivery"> - <xsl:for-each select="ram:ShipToTradeParty"> - <br/> - <span style="empty-cells:hide; font-weight:bold; text-decoration:underline; "> - <xsl:text>Abweichender Warenempfänger:</xsl:text> - </span> - <br/> - <xsl:call-template name="ram:Party"/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeDelivery"> - <xsl:for-each select="ram:UltimateShipToTradeParty"> - <br/> - <span style="empty-cells:hide; font-weight:bold; text-decoration:underline; "> - <xsl:text>Abweichender Endempfänger:</xsl:text> - </span> - <br/> - <xsl:call-template name="ram:Party"/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeDelivery"> - <xsl:for-each select="ram:ShipFromTradeParty"> - <br/> - <span style="empty-cells:hide; font-weight:bold; text-decoration:underline; "> - <xsl:text>Abweichender Versender:</xsl:text> - </span> - <br/> - <xsl:call-template name="ram:Party"/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeSettlement"> - <xsl:for-each select="ram:InvoiceeTradeParty"> - <br/> - <span style="empty-cells:hide; font-weight:bold; text-decoration:underline; "> - <xsl:text>Abweichender Rechnungsempfänger:</xsl:text> - </span> - <br/> - <xsl:call-template name="ram:Party"/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeSettlement"> - <xsl:for-each select="ram:PayeeTradeParty"> - <br/> - <span style="empty-cells:hide; font-weight:bold; text-decoration:underline; "> - <xsl:text>Abweichender Zahlungsempfänger:</xsl:text> - </span> - <br/> - <xsl:call-template name="ram:Party"/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </td> - </tr> - <tr> - <td> - <xsl:for-each select="rsm:HeaderExchangedDocument"> - <br/> - <xsl:for-each select="ram:IncludedNote"> - <xsl:for-each select="ram:SubjectCode"> - <span style="color:gray; empty-cells:hide; "> - <xsl:text>Qualifizierung der Textart: </xsl:text> - </span> - <span style="font-weight:bold; "> - <xsl:apply-templates/> - </span> - </xsl:for-each> - <xsl:for-each select="ram:ContentCode"> - <span style="color:gray; empty-cells:hide; "> - <xsl:text>, Qualifizierung des Textes: </xsl:text> - </span> - <span style="font-weight:bold; "> - <xsl:apply-templates/> - </span> - </xsl:for-each> - <xsl:for-each select="ram:Content"> - <br/> - <span style="font-weight:bold; white-space:pre-wrap; "> - <xsl:apply-templates/> - </span> - <br/> - <br/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </td> - </tr> - <tr> - <td style="border-bottom-style:none; "> - <xsl:variable name="altova:table"> - <table style="border:0px; border-collapse:collapse; border-spacing:0px; padding:0px; width:100%; " border="1"> - <xsl:variable name="altova:CurrContextGrid_7" select="."/> - <xsl:variable name="altova:ColumnData"/> - <tbody> - <tr style="text-align:center; vertical-align:middle; "> - <td style="border-bottom-style:solid; border-collapse:collapse; border-left-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:center; width:30px; "> - <span style="font-weight:bold; "> - <xsl:text>Pos</xsl:text> - </span> - </td> - <td style="border-bottom-style:solid; border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:left; width:110px; "> - <span style="font-weight:bold; "> - <xsl:text>Art-Nr-Kunde</xsl:text> - </span> - <br/> - <span style="font-weight:bold; "> - <xsl:text>Art-Nr-Lief.</xsl:text> - </span> - <br/> - <span style="font-weight:bold; "> - <xsl:text>Art-Nr</xsl:text> - </span> - <br/> - <span style="font-weight:bold; "> - <xsl:text>(Art)</xsl:text> - </span> - </td> - <td style="border-bottom-style:solid; border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; "> - <span style="font-weight:bold; "> - <xsl:text>Beschreibung</xsl:text> - </span> - </td> - <td style="border-bottom-style:solid; border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; width:110px; "> - <span style="font-weight:bold; "> - <xsl:text>E-Preis</xsl:text> - </span> - </td> - <td style="border-bottom-style:solid; border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; width:120px; "> - <span style="font-weight:bold; "> - <xsl:text>Menge</xsl:text> - </span> - </td> - <td style="border-bottom-style:solid; border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; width:110px; "> - <span style="font-weight:bold; "> - <xsl:text>Steuer</xsl:text> - </span> - </td> - <td style="border-bottom-style:solid; border-collapse:collapse; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; width:110px; "> - <span style="font-weight:bold; "> - <xsl:text>Entgelt</xsl:text> - </span> - </td> - </tr> - </tbody> - </table> - </xsl:variable> - <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> - <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> - <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> - <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> - </xsl:apply-templates> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:IncludedSupplyChainTradeLineItem"> - <xsl:if test="fn:not( fn:empty(ram:SpecifiedTradeProduct))"> - <xsl:variable name="altova:table"> - <table style="border:0px; border-collapse:collapse; border-spacing:0px; padding:0px; width:100%; " border="1"> - <xsl:variable name="altova:CurrContextGrid_8" select="."/> - <xsl:variable name="altova:ColumnData"/> - <tbody> - <tr style="vertical-align:top; "> - <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:center; width:30px; "> - <xsl:for-each select="ram:AssociatedDocumentLineDocument"> - <xsl:if test="fn:empty(ram:IncludedNote)"> - <xsl:for-each select="ram:LineID"> - <xsl:apply-templates/> - </xsl:for-each> - </xsl:if> - </xsl:for-each> - </td> - <td style="border-bottom-style:none; border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; width:110px; "> - <xsl:for-each select="ram:SpecifiedTradeProduct"> - <xsl:for-each select="ram:BuyerAssignedID"> - <xsl:apply-templates/> - </xsl:for-each> - <br/> - <xsl:for-each select="ram:SellerAssignedID"> - <xsl:apply-templates/> - </xsl:for-each> - <br/> - <xsl:for-each select="ram:GlobalID"> - <xsl:apply-templates/> - <br/> - <xsl:for-each select="@schemeID"> - <xsl:call-template name="ram:Global_Identifier"/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </td> - <td style="border-bottom-style:none; border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; "> - <xsl:for-each select="ram:SpecifiedTradeProduct"> - <xsl:for-each select="ram:Name"> - <span style="white-space:pre-wrap; "> - <xsl:apply-templates/> - </span> - <br/> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="ram:SpecifiedSupplyChainTradeAgreement"> - <xsl:if test="fn:exists(ram:GrossPriceProductTradePrice)"> - <xsl:for-each select="ram:GrossPriceProductTradePrice"> - <xsl:for-each select="ram:BasisQuantity"> - <span> - <xsl:text>Preisbasismenge: </xsl:text> - </span> - <xsl:call-template name="ram:Menge"/> - </xsl:for-each> - </xsl:for-each> - </xsl:if> - <xsl:if test="fn:not(fn:exists(ram:GrossPriceProductTradePrice))"> - <xsl:for-each select="ram:NetPriceProductTradePrice"> - <xsl:for-each select="ram:BasisQuantity"> - <br/> - <span> - <xsl:text>Preisbasismenge: </xsl:text> - </span> - <xsl:call-template name="ram:Menge"/> - </xsl:for-each> - </xsl:for-each> - </xsl:if> - </xsl:for-each> - </td> - <td style="border-bottom-style:solid; border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; width:110px; "> - <xsl:for-each select="ram:SpecifiedSupplyChainTradeAgreement"> - <xsl:if test="fn:exists(ram:GrossPriceProductTradePrice)"> - <xsl:for-each select="ram:GrossPriceProductTradePrice"> - <xsl:for-each select="ram:ChargeAmount"> - <span> - <xsl:variable name="altova:seqContentStrings_9"> - <xsl:value-of select="format-number(number(string(.)), '##0,0000', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_9" select="string($altova:seqContentStrings_9)"/> - <xsl:value-of select="$altova:sContent_9"/> - </span> - </xsl:for-each> - </xsl:for-each> - </xsl:if> - <xsl:if test="not(fn:exists(ram:GrossPriceProductTradePrice))"> - <xsl:for-each select="ram:NetPriceProductTradePrice"> - <xsl:for-each select="ram:ChargeAmount"> - <span> - <xsl:variable name="altova:seqContentStrings_10"> - <xsl:value-of select="format-number(number(string(.)), '###.##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_10" select="string($altova:seqContentStrings_10)"/> - <xsl:value-of select="$altova:sContent_10"/> - </span> - </xsl:for-each> - </xsl:for-each> - </xsl:if> - </xsl:for-each> - </td> - <td style="border-bottom-style:solid; border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; width:120px; "> - <xsl:for-each select="ram:SpecifiedSupplyChainTradeDelivery"> - <xsl:for-each select="ram:BilledQuantity"> - <xsl:call-template name="ram:Menge"/> - </xsl:for-each> - <xsl:for-each select="ram:ChargeFreeQuantity"> - <br/> - <span> - <xsl:text>kostenfrei:</xsl:text> - </span> - <br/> - <xsl:call-template name="ram:Menge"/> - </xsl:for-each> - </xsl:for-each> - </td> - <td style="border-bottom-style:solid; border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; width:110px; "> - <xsl:for-each select="ram:SpecifiedSupplyChainTradeSettlement"> - <xsl:for-each select="ram:ApplicableTradeTax"> - <xsl:call-template name="ram:TradeTax"/> - </xsl:for-each> - </xsl:for-each> - </td> - <td style="border-bottom-style:solid; border-collapse:collapse; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; width:110px; "> - <xsl:for-each select="ram:SpecifiedSupplyChainTradeSettlement"> - <xsl:for-each select="ram:SpecifiedTradeSettlementMonetarySummation"> - <xsl:for-each select="ram:LineTotalAmount"> - <span> - <xsl:variable name="altova:seqContentStrings_11"> - <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_11" select="string($altova:seqContentStrings_11)"/> - <xsl:value-of select="$altova:sContent_11"/> - </span> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </td> - </tr> - </tbody> - </table> - </xsl:variable> - <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> - <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> - <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> - <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> - </xsl:apply-templates> - </xsl:if> - <xsl:for-each select="ram:AssociatedDocumentLineDocument"> - <xsl:if test="fn:not( fn:empty(ram:IncludedNote))"> - <xsl:variable name="altova:table"> - <table style="border:0px; border-collapse:collapse; border-spacing:0px; border-top-style:none; padding:0px; width:100%; " border="1"> - <xsl:variable name="altova:CurrContextGrid_12" select="."/> - <xsl:variable name="altova:ColumnData"/> - <tbody> - <tr style="empty-cells:hide; vertical-align:top; "> - <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:center; width:30px; "> - <xsl:for-each select="ram:LineID"> - <xsl:apply-templates/> - </xsl:for-each> - </td> - <td style="border-bottom-style:none; border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; width:110px; "/> - <td style="border-bottom-style:none; border-collapse:collapse; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; "> - <xsl:for-each select="ram:IncludedNote"> - <xsl:for-each select="ram:Content"> - <span style="white-space:pre-wrap; "> - <xsl:apply-templates/> - </span> - </xsl:for-each> - <xsl:for-each select="ram:SubjectCode"> - <br/> - <span style="color:gray; empty-cells:hide; "> - <xsl:text>Qualifizierung der Textart: </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - <xsl:for-each select="ram:ContentCode"> - <span style="color:gray; empty-cells:hide; "> - <xsl:text>, Qualifizierung des Textes: </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - <br/> - </xsl:for-each> - </td> - <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; width:110px; "/> - </tr> - </tbody> - </table> - </xsl:variable> - <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> - <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> - <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> - <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> - </xsl:apply-templates> - </xsl:if> - </xsl:for-each> - <xsl:for-each select="ram:SpecifiedSupplyChainTradeAgreement"> - <xsl:for-each select="ram:GrossPriceProductTradePrice"> - <xsl:if test="fn:not( fn:empty(ram:AppliedTradeAllowanceCharge))"> - <xsl:variable name="altova:table"> - <table style="border:0px; border-collapse:collapse; border-spacing:0px; padding:0px; width:100%; " border="1"> - <xsl:variable name="altova:CurrContextGrid_13" select="."/> - <xsl:variable name="altova:ColumnData"/> - <tbody> - <tr style="empty-cells:hide; vertical-align:top; "> - <td style="border-bottom-style:none; border-left-style:none; border-top-style:none; width:30px; "/> - <td style="border-bottom-style:none; border-top-style:none; width:110px; "/> - <td style="border-bottom-style:none; border-right-style:none; border-top-style:none; "> - <xsl:variable name="altova:table"> - <table style="border:0px; border-style:none; padding:0px; width:100%; " border="1"> - <xsl:variable name="altova:CurrContextGrid_14" select="."/> - <xsl:variable name="altova:ColumnData"/> - <thead> - <tr> - <th style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; font-weight:normal; text-align:left; width:70px; "> - <span style="font-style:italic; "> - <xsl:text>Art</xsl:text> - </span> - </th> - <th style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; font-weight:normal; text-align:left; "> - <span style="font-style:italic; "> - <xsl:text>Grund</xsl:text> - </span> - </th> - <th style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; font-weight:normal; text-align:right; width:70px; "> - <span style="font-style:italic; "> - <xsl:text>%</xsl:text> - </span> - </th> - <th style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; font-weight:normal; text-align:right; width:110px; "> - <span style="font-style:italic; "> - <xsl:text>Basisbetrag</xsl:text> - </span> - </th> - <th style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; font-weight:normal; text-align:right; width:120px; "> - <span style="font-style:italic; "> - <xsl:text>Basismenge</xsl:text> - </span> - </th> - <th style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; font-weight:normal; text-align:right; width:110px; "> - <span style="font-style:italic; "> - <xsl:text>Betrag</xsl:text> - </span> - </th> - <th style="border-bottom-style:none; border-left-style:none; border-right-style:none; border-top-style:none; width:112px; "/> - </tr> - </thead> - <tbody> - <xsl:for-each select="ram:AppliedTradeAllowanceCharge"> - <xsl:sort select="ram:SequenceNumeric" data-type="text" order="ascending"/> - <tr> - <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; vertical-align:top; width:70px; "> - <xsl:for-each select="ram:ChargeIndicator"> - <xsl:for-each select="udt:Indicator"> - <span> - <xsl:value-of select="if (. eq fn:true())then 'Zuschlag' else 'Abschlag'"/> - </span> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="ram:SequenceNumeric"> - <span> - <xsl:text> Nr. </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - </td> - <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; vertical-align:top; "> - <xsl:for-each select="ram:Reason"> - <xsl:apply-templates/> - </xsl:for-each> - <xsl:for-each select="ram:ReasonCode"> - <span> - <xsl:text> </xsl:text> - </span> - <xsl:call-template name="AllowanceChargeReasonCode"/> - </xsl:for-each> - </td> - <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; vertical-align:top; width:70px; "> - <xsl:for-each select="ram:CalculationPercent"> - <span> - <xsl:variable name="altova:seqContentStrings_15"> - <xsl:value-of select="format-number(number(string(.)), '###.##0,####', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_15" select="string($altova:seqContentStrings_15)"/> - <xsl:value-of select="$altova:sContent_15"/> - </span> - </xsl:for-each> - </td> - <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; vertical-align:top; width:110px; "> - <xsl:for-each select="ram:BasisAmount"> - <span> - <xsl:variable name="altova:seqContentStrings_16"> - <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_16" select="string($altova:seqContentStrings_16)"/> - <xsl:value-of select="$altova:sContent_16"/> - </span> - </xsl:for-each> - </td> - <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; vertical-align:top; width:120px; "> - <xsl:for-each select="ram:BasisQuantity"> - <xsl:call-template name="ram:Menge"/> - </xsl:for-each> - </td> - <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; vertical-align:top; width:110px; "> - <xsl:for-each select="ram:ActualAmount"> - <span> - <xsl:variable name="altova:seqContentStrings_17"> - <xsl:value-of select="format-number(number(if(../ram:ChargeIndicator/udt:Indicator = fn:false()) then -1*. else .), '##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_17" select="string($altova:seqContentStrings_17)"/> - <xsl:value-of select="$altova:sContent_17"/> - </span> - </xsl:for-each> - </td> - <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; width:108px; "/> - </tr> - </xsl:for-each> - </tbody> - </table> - </xsl:variable> - <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> - <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> - <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> - <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> - </xsl:apply-templates> - </td> - </tr> - </tbody> - </table> - </xsl:variable> - <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> - <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> - <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> - <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> - </xsl:apply-templates> - </xsl:if> - <xsl:if test="fn:exists(../../ram:SpecifiedSupplyChainTradeSettlement/ram:SpecifiedTradeSettlementMonetarySummation/ram:TotalAllowanceChargeAmount)"> - <xsl:variable name="altova:table"> - <table style="border:0px; border-collapse:collapse; border-spacing:0px; padding:0px; width:100%; " border="1"> - <xsl:variable name="altova:CurrContextGrid_18" select="."/> - <xsl:variable name="altova:ColumnData"/> - <tbody> - <tr style="empty-cells:hide; vertical-align:top; "> - <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; width:30px; "/> - <td style="border-bottom-style:none; border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; width:110px; "/> - <td style="border-bottom-style:none; border-collapse:collapse; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; "> - <br/> - </td> - <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; width:110px; "> - <span> - <xsl:text>Summe:</xsl:text> - </span> - </td> - <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-right-style:none; border-spacing:0px; border-top-style:double; empty-cells:hide; text-align:right; width:110px; "> - <xsl:for-each select="$XML"> - <xsl:for-each select="rsm:CrossIndustryDocument"> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:IncludedSupplyChainTradeLineItem"> - <xsl:for-each select="ram:SpecifiedSupplyChainTradeSettlement"> - <xsl:for-each select="ram:SpecifiedTradeSettlementMonetarySummation"> - <xsl:for-each select="ram:TotalAllowanceChargeAmount"> - <span> - <xsl:variable name="altova:seqContentStrings_19"> - <xsl:value-of select="format-number(number(-1*.), '##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_19" select="string($altova:seqContentStrings_19)"/> - <xsl:value-of select="$altova:sContent_19"/> - </span> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </td> - <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; width:110px; "/> - </tr> - </tbody> - </table> - </xsl:variable> - <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> - <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> - <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> - <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> - </xsl:apply-templates> - </xsl:if> - </xsl:for-each> - </xsl:for-each> - <xsl:variable name="altova:table"> - <table style="border:0px; border-collapse:collapse; border-spacing:0px; border-top-style:none; padding:0px; width:100%; " border="1"> - <xsl:variable name="altova:CurrContextGrid_20" select="."/> - <xsl:variable name="altova:ColumnData"/> - <tbody> - <tr style="empty-cells:hide; vertical-align:top; "> - <td style="border-collapse:collapse; border-left-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; width:30px; "/> - <td style="border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; width:110px; "/> - <td style="border-collapse:collapse; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; "> - <xsl:for-each select="ram:SpecifiedTradeProduct"> - <xsl:for-each select="ram:Description"> - <br/> - <span style="white-space:pre-wrap; "> - <xsl:apply-templates/> - </span> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="ram:SpecifiedSupplyChainTradeDelivery"> - <xsl:for-each select="ram:ActualDeliverySupplyChainEvent"> - <xsl:for-each select="ram:OccurrenceDateTime"> - <br/> - <span> - <xsl:text>* Leistungsdatum: </xsl:text> - </span> - <xsl:for-each select="udt:DateTimeString"> - <xsl:call-template name="ram:Datum"/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="ram:SpecifiedSupplyChainTradeSettlement"> - <xsl:for-each select="ram:BillingSpecifiedPeriod"> - <br/> - <span> - <xsl:text>* Berechnungszeitraum: </xsl:text> - </span> - <xsl:for-each select="ram:StartDateTime"> - <xsl:for-each select="udt:DateTimeString"> - <xsl:call-template name="ram:Datum"/> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="ram:EndDateTime"> - <span> - <xsl:text> bis </xsl:text> - </span> - <xsl:for-each select="udt:DateTimeString"> - <xsl:call-template name="ram:Datum"/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="ram:SpecifiedTradeProduct"> - <xsl:for-each select="ram:OriginTradeCountry"> - <xsl:for-each select="ram:ID"> - <br/> - <span> - <xsl:text>* Herkunftsland: </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="ram:SpecifiedSupplyChainTradeDelivery"> - <xsl:for-each select="ram:PackageQuantity"> - <br/> - <span> - <xsl:text>* Anzahl Packstücke: </xsl:text> - </span> - <span> - <xsl:variable name="altova:seqContentStrings_21"> - <xsl:value-of select="format-number(number(string(.)), '##0', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_21" select="string($altova:seqContentStrings_21)"/> - <xsl:value-of select="$altova:sContent_21"/> - </span> - </xsl:for-each> - <xsl:call-template name="PackageQuantity"/> - </xsl:for-each> - <xsl:for-each select="ram:SpecifiedSupplyChainTradeAgreement"> - <xsl:for-each select="ram:BuyerOrderReferencedDocument"> - <br/> - <span> - <xsl:text>* Bestellung</xsl:text> - </span> - <xsl:call-template name="ram:Positionsreferenz"/> - </xsl:for-each> - <xsl:for-each select="ram:ContractReferencedDocument"> - <br/> - <span> - <xsl:text>* Vertrag</xsl:text> - </span> - <xsl:call-template name="ram:Positionsreferenz"/> - </xsl:for-each> - <xsl:for-each select="ram:AdditionalReferencedDocument"> - <br/> - <span> - <xsl:text>* Dokument (</xsl:text> - </span> - <xsl:for-each select="ram:ReferenceTypeCode"> - <xsl:call-template name="ram:Referenz"/> - </xsl:for-each> - <span> - <xsl:text>)</xsl:text> - </span> - <xsl:call-template name="ram:Positionsreferenz"/> - </xsl:for-each> - <xsl:for-each select="ram:CustomerOrderReferencedDocument"> - <br/> - <span> - <xsl:text>* Kundenbestellung</xsl:text> - </span> - <xsl:call-template name="ram:Positionsreferenz"/> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="ram:SpecifiedSupplyChainTradeDelivery"> - <xsl:for-each select="ram:DespatchAdviceReferencedDocument"> - <br/> - <span> - <xsl:text>* Lieferavis</xsl:text> - </span> - <xsl:call-template name="ram:Positionsreferenz"/> - </xsl:for-each> - <xsl:for-each select="ram:ReceivingAdviceReferencedDocument"> - <br/> - <span> - <xsl:text>* Wareneingang </xsl:text> - </span> - <xsl:call-template name="ram:Positionsreferenz"/> - </xsl:for-each> - <xsl:for-each select="ram:DeliveryNoteReferencedDocument"> - <br/> - <span> - <xsl:text>* Lieferschein</xsl:text> - </span> - <xsl:call-template name="ram:Positionsreferenz"/> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="ram:SpecifiedSupplyChainTradeSettlement"> - <xsl:for-each select="ram:SpecifiedTradeAccountingAccount"> - <xsl:for-each select="ram:ID"> - <br/> - <span> - <xsl:text>* Buchungsreferenz: </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="ram:SpecifiedTradeProduct"> - <xsl:for-each select="ram:DesignatedProductClassification"> - <br/> - <span> - <xsl:text>* Klassifikation: </xsl:text> - </span> - <xsl:for-each select="ram:ClassCode"> - <span> - <xsl:text>[</xsl:text> - </span> - <xsl:apply-templates/> - <span> - <xsl:text>] </xsl:text> - </span> - </xsl:for-each> - <xsl:for-each select="ram:ClassName"> - <xsl:apply-templates/> - </xsl:for-each> - <xsl:for-each select="ram:ClassCode"> - <xsl:call-template name="Klassifikationsart"/> - <xsl:for-each select="@listVersionID"> - <span> - <xsl:text>, Version: </xsl:text> - </span> - <span> - <xsl:value-of select="string(.)"/> - </span> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="ram:SpecifiedSupplyChainTradeDelivery"> - <xsl:for-each select="ram:ShipToTradeParty"> - <br/> - <span style="text-decoration:underline; "> - <xsl:text>Abweichender Warenempfänger:</xsl:text> - </span> - <br/> - <xsl:call-template name="ram:Party"/> - </xsl:for-each> - <xsl:for-each select="ram:UltimateShipToTradeParty"> - <br/> - <span style="text-decoration:underline; "> - <xsl:text>Abweichender Endempfänger:</xsl:text> - </span> - <br/> - <xsl:call-template name="ram:Party"/> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="ram:SpecifiedTradeProduct"> - <xsl:if test="fn:exists(ram:ApplicableProductCharacteristic)"> - <br/> - <br/> - <span style="text-decoration:underline; "> - <xsl:text>Weitere Eigenschaften:</xsl:text> - </span> - <br/> - </xsl:if> - <xsl:for-each select="ram:ApplicableProductCharacteristic"> - <xsl:for-each select="ram:Description"> - <br/> - <xsl:apply-templates/> - </xsl:for-each> - <span> - <xsl:text>: </xsl:text> - </span> - <xsl:for-each select="ram:TypeCode"> - <xsl:apply-templates/> - </xsl:for-each> - <span> - <xsl:text> = </xsl:text> - </span> - <xsl:for-each select="ram:Value"> - <xsl:apply-templates/> - </xsl:for-each> - <xsl:for-each select="ram:ValueMeasure"> - <xsl:call-template name="ram:Menge"/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:if test="fn:exists(ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct)"> - <br/> - <br/> - <span style="text-decoration:underline; "> - <xsl:text>Basisartikel:</xsl:text> - </span> - <br/> - </xsl:if> - <xsl:for-each select="ram:SpecifiedTradeProduct"> - <xsl:if test="fn:exists(ram:IncludedReferencedProduct)"> - <xsl:variable name="altova:table"> - <table style="border:0px; width:100%; " border="1"> - <xsl:variable name="altova:CurrContextGrid_22" select="."/> - <xsl:variable name="altova:ColumnData"/> - <thead> - <tr> - <th style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; text-align:left; width:110px; "> - <span style="font-weight:bold; "> - <xsl:text>Art-Nr-Kunde</xsl:text> - </span> - <br/> - </th> - <th style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; width:110px; "> - <span style="font-weight:bold; "> - <xsl:text>Art-Nr-Lief.</xsl:text> - </span> - </th> - <th style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; width:110px; "> - <span> - <xsl:text>Art-Nr. (Art)</xsl:text> - </span> - </th> - <th style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; "> - <span> - <xsl:text>Beschreibung</xsl:text> - </span> - </th> - <th style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; text-align:right; width:120px; "> - <span> - <xsl:text>Menge</xsl:text> - </span> - </th> - </tr> - </thead> - <tbody> - <xsl:for-each select="ram:IncludedReferencedProduct"> - <tr> - <td style="border-bottom-style:none; border-left-style:none; border-right-style:none; border-top-style:none; text-align:left; vertical-align:top; width:110px; "> - <xsl:for-each select="ram:BuyerAssignedID"> - <xsl:apply-templates/> - </xsl:for-each> - </td> - <td style="border-bottom-style:none; border-left-style:none; border-right-style:none; border-top-style:none; vertical-align:top; width:110px; "> - <xsl:for-each select="ram:SellerAssignedID"> - <xsl:apply-templates/> - </xsl:for-each> - </td> - <td style="border-bottom-style:none; border-left-style:none; border-right-style:none; border-top-style:none; vertical-align:top; width:110px; "> - <xsl:for-each select="ram:GlobalID"> - <xsl:apply-templates/> - </xsl:for-each> - <xsl:for-each select="ram:GlobalID"> - <xsl:for-each select="@schemeID"> - <xsl:call-template name="ram:Global_Identifier"/> - </xsl:for-each> - </xsl:for-each> - </td> - <td style="border-bottom-style:none; border-left-style:none; border-right-style:none; border-top-style:none; vertical-align:top; "> - <xsl:for-each select="ram:Name"> - <xsl:apply-templates/> - </xsl:for-each> - <br/> - <xsl:for-each select="ram:Description"> - <xsl:apply-templates/> - </xsl:for-each> - </td> - <td style="border-bottom-style:none; border-left-style:none; border-right-style:none; border-top-style:none; text-align:right; vertical-align:top; width:120px; "> - <xsl:for-each select="ram:UnitQuantity"> - <xsl:call-template name="ram:Menge"/> - </xsl:for-each> - </td> - </tr> - </xsl:for-each> - </tbody> - </table> - </xsl:variable> - <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> - <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> - <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> - <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> - </xsl:apply-templates> - </xsl:if> - </xsl:for-each> - </td> - <td style="border-collapse:collapse; border-left-style:none; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; width:110px; "/> - </tr> - </tbody> - </table> - </xsl:variable> - <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> - <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> - <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> - <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> - </xsl:apply-templates> - </xsl:for-each> - </xsl:for-each> - <br/> - </td> - </tr> - <tr> - <td style="border-bottom-style:none; border-top-style:none; "> - <xsl:if test="fn:exists(rsm:SpecifiedSupplyChainTradeTransaction/ram:ApplicableSupplyChainTradeSettlement/ram:SpecifiedTradePaymentTerms)"> - <br/> - <span style="empty-cells:hide; font-weight:bold; text-decoration:underline; "> - <xsl:text>Zahlungsbedingungen:</xsl:text> - </span> - <br/> - <br/> - <xsl:variable name="altova:table"> - <table style="border:0px; border-collapse:collapse; border-right-style:none; width:100%; " border="1"> - <xsl:variable name="altova:CurrContextGrid_23" select="."/> - <xsl:variable name="altova:ColumnData"/> - <thead> - <tr> - <th style="border-left-style:none; "> - <span> - <xsl:text>Beschreibung</xsl:text> - </span> - </th> - <th style="width:110px; "> - <span> - <xsl:text>Fälligkeit</xsl:text> - </span> - </th> - <th style="border-right-style:none; width:110px; "> - <span> - <xsl:text>Teilzahlung</xsl:text> - </span> - </th> - </tr> - </thead> - <tbody> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeSettlement"> - <xsl:for-each select="ram:SpecifiedTradePaymentTerms"> - <tr> - <td style="border-bottom-style:none; border-left-style:none; "> - <xsl:for-each select="ram:Description"> - <span style="white-space:pre-wrap; "> - <xsl:apply-templates/> - </span> - </xsl:for-each> - </td> - <td style="border-bottom-style:none; text-align:center; width:110px; "> - <xsl:for-each select="ram:DueDateDateTime"> - <xsl:for-each select="udt:DateTimeString"> - <xsl:call-template name="ram:Datum"/> - </xsl:for-each> - </xsl:for-each> - </td> - <td style="border-bottom-style:none; border-right-style:none; text-align:right; width:110px; "> - <xsl:for-each select="ram:PartialPaymentAmount"> - <span> - <xsl:variable name="altova:seqContentStrings_24"> - <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_24" select="string($altova:seqContentStrings_24)"/> - <xsl:value-of select="$altova:sContent_24"/> - </span> - </xsl:for-each> - </td> - </tr> - <tr> - <td colspan="3" style="border-left-style:none; border-right-style:none; border-top-style:none; min-height:0px; "> - <xsl:if test="fn:exists(ram:ApplicableTradePaymentPenaltyTerms) or fn:exists(ram:ApplicableTradePaymentDiscountTerms)"> - <xsl:variable name="altova:table"> - <table style="border:0px; border-collapse:collapse; border-left-style:none; border-top-style:none; margin:0px; padding:0px; " border="1" width="100%"> - <xsl:variable name="altova:CurrContextGrid_25" select="."/> - <xsl:variable name="altova:ColumnData"/> - <tbody> - <tr style="border-bottom-style:none; border-top-style:none; "> - <td style="border-bottom-style:none; border-left-style:none; border-top-style:none; min-height:0px; "/> - <td style="border-bottom-style:none; min-height:0px; text-align:center; width:110px; "> - <span style="font-weight:bold; "> - <xsl:text>Bezug</xsl:text> - </span> - </td> - <td style="border-bottom-style:none; min-height:0px; text-align:center; width:110px; "> - <span style="font-weight:bold; "> - <xsl:text>Innerhalb</xsl:text> - </span> - </td> - <td style="border-bottom-style:none; min-height:0px; text-align:center; width:110px; "> - <span style="font-weight:bold; "> - <xsl:text>Basisbetrag</xsl:text> - </span> - </td> - <td style="border-bottom-style:none; min-height:0px; text-align:center; width:110px; "> - <span style="font-weight:bold; "> - <xsl:text>%</xsl:text> - </span> - </td> - <td style="border-bottom-style:none; border-right-style:none; min-height:0px; text-align:center; width:108px; "> - <span style="font-weight:bold; "> - <xsl:text>Betrag</xsl:text> - </span> - </td> - </tr> - </tbody> - </table> - </xsl:variable> - <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> - <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> - <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> - <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> - </xsl:apply-templates> - </xsl:if> - <xsl:if test="fn:exists(ram:ApplicableTradePaymentPenaltyTerms)"> - <xsl:variable name="altova:table"> - <table style="border:0px; border-bottom-style:none; border-collapse:collapse; margin:0px; padding:0px; width:100%; " border="1"> - <xsl:variable name="altova:CurrContextGrid_26" select="."/> - <xsl:variable name="altova:ColumnData"/> - <tbody> - <xsl:for-each select="ram:ApplicableTradePaymentPenaltyTerms"> - <tr> - <td style="border-bottom-style:none; border-left-style:none; min-height:0px; text-align:right; "> - <span> - <xsl:text>Zuschlag  </xsl:text> - </span> - </td> - <td style="border-bottom-style:none; min-height:0px; text-align:center; width:110px; "> - <xsl:for-each select="ram:BasisDateTime"> - <xsl:for-each select="udt:DateTimeString"> - <xsl:call-template name="ram:Datum"/> - </xsl:for-each> - </xsl:for-each> - </td> - <td style="border-bottom-style:none; min-height:0px; text-align:right; width:110px; "> - <xsl:for-each select="ram:BasisPeriodMeasure"> - <xsl:call-template name="ram:Menge"/> - </xsl:for-each> - </td> - <td style="border-bottom-style:none; min-height:0px; text-align:right; width:110px; "> - <xsl:for-each select="ram:BasisAmount"> - <span> - <xsl:variable name="altova:seqContentStrings_27"> - <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_27" select="string($altova:seqContentStrings_27)"/> - <xsl:value-of select="$altova:sContent_27"/> - </span> - </xsl:for-each> - </td> - <td style="border-bottom-style:none; min-height:0px; text-align:right; width:110px; "> - <xsl:for-each select="ram:CalculationPercent"> - <span> - <xsl:variable name="altova:seqContentStrings_28"> - <xsl:value-of select="format-number(number(string(.)), '###.##0,####', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_28" select="string($altova:seqContentStrings_28)"/> - <xsl:value-of select="$altova:sContent_28"/> - </span> - </xsl:for-each> - </td> - <td style="border-bottom-style:none; border-right-style:none; min-height:0px; text-align:right; width:108px; "> - <xsl:for-each select="ram:ActualPenaltyAmount"> - <span> - <xsl:variable name="altova:seqContentStrings_29"> - <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_29" select="string($altova:seqContentStrings_29)"/> - <xsl:value-of select="$altova:sContent_29"/> - </span> - </xsl:for-each> - </td> - </tr> - </xsl:for-each> - </tbody> - </table> - </xsl:variable> - <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> - <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> - <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> - <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> - </xsl:apply-templates> - </xsl:if> - <xsl:if test="fn:exists(ram:ApplicableTradePaymentDiscountTerms)"> - <xsl:variable name="altova:table"> - <table style="border:0px; border-collapse:collapse; margin:0px; padding:0px; width:100%; " border="1"> - <xsl:variable name="altova:CurrContextGrid_30" select="."/> - <xsl:variable name="altova:ColumnData"/> - <tbody> - <xsl:for-each select="ram:ApplicableTradePaymentDiscountTerms"> - <tr> - <td style="border-bottom-style:none; border-left-style:none; min-height:0px; text-align:right; "> - <span> - <xsl:text>Skonto  </xsl:text> - </span> - </td> - <td style="border-bottom-style:none; min-height:0px; text-align:center; width:110px; "> - <xsl:for-each select="ram:BasisDateTime"> - <xsl:for-each select="udt:DateTimeString"> - <xsl:call-template name="ram:Datum"/> - </xsl:for-each> - </xsl:for-each> - </td> - <td style="border-bottom-style:none; min-height:0px; text-align:right; width:110px; "> - <xsl:for-each select="ram:BasisPeriodMeasure"> - <xsl:call-template name="ram:Menge"/> - </xsl:for-each> - </td> - <td style="border-bottom-style:none; min-height:0px; text-align:right; width:110px; "> - <xsl:for-each select="ram:BasisAmount"> - <span> - <xsl:variable name="altova:seqContentStrings_31"> - <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_31" select="string($altova:seqContentStrings_31)"/> - <xsl:value-of select="$altova:sContent_31"/> - </span> - </xsl:for-each> - </td> - <td style="border-bottom-style:none; min-height:0px; text-align:right; width:110px; "> - <xsl:for-each select="ram:CalculationPercent"> - <span> - <xsl:variable name="altova:seqContentStrings_32"> - <xsl:value-of select="format-number(number(string(.)), '###.##0,####', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_32" select="string($altova:seqContentStrings_32)"/> - <xsl:value-of select="$altova:sContent_32"/> - </span> - </xsl:for-each> - </td> - <td style="border-bottom-style:none; border-right-style:none; min-height:0px; text-align:right; width:108px; "> - <xsl:for-each select="ram:ActualDiscountAmount"> - <span> - <xsl:variable name="altova:seqContentStrings_33"> - <xsl:value-of select="format-number(number(-1 * .), '##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_33" select="string($altova:seqContentStrings_33)"/> - <xsl:value-of select="$altova:sContent_33"/> - </span> - </xsl:for-each> - </td> - </tr> - </xsl:for-each> - </tbody> - </table> - </xsl:variable> - <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> - <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> - <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> - <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> - </xsl:apply-templates> - </xsl:if> - </td> - </tr> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </tbody> - </table> - </xsl:variable> - <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> - <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> - <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> - <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> - </xsl:apply-templates> - </xsl:if> - <xsl:if test="fn:exists(rsm:SpecifiedSupplyChainTradeTransaction/ram:ApplicableSupplyChainTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans)"> - <br/> - <span style="font-weight:bold; text-decoration:underline; "> - <xsl:text>Zahlungsart:</xsl:text> - </span> - <br/> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeSettlement"> - <xsl:for-each select="ram:SpecifiedTradeSettlementPaymentMeans"> - <xsl:for-each select="ram:Information"> - <br/> - <xsl:apply-templates/> - </xsl:for-each> - <xsl:for-each select="ram:TypeCode"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Zahlungstyp (codiert): </xsl:text> - </span> - <xsl:call-template name="ram:PaymentType"/> - </xsl:for-each> - <xsl:for-each select="ram:ID"> - <xsl:for-each select="@schemeAgencyID"> - <br/> - <span> - <xsl:text>Gläubiger-ID         : </xsl:text> - </span> - <span> - <xsl:value-of select="string(.)"/> - </span> - </xsl:for-each> - <br/> - <span> - <xsl:text>Mandatsreferenz      : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - <xsl:for-each select="ram:PayerPartyDebtorFinancialAccount"> - <xsl:for-each select="ram:IBANID"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Käufer-IBAN          : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - <xsl:for-each select="ram:ProprietaryID"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Käufer-Kontonummer   : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="ram:PayerSpecifiedDebtorFinancialInstitution"> - <xsl:for-each select="ram:BICID"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Käufer-BIC           : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - <xsl:for-each select="ram:GermanBankleitzahlID"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Käufer-Bankleitzahl  : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - <xsl:for-each select="ram:Name"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Käufer-Kreditinstitut: </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - </xsl:for-each> - <br/> - <xsl:for-each select="ram:PayeePartyCreditorFinancialAccount"> - <xsl:for-each select="ram:AccountName"> - <br/> - <span> - <xsl:text>Verkäufer-Kontoname  : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - <xsl:for-each select="ram:IBANID"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Verkäufer-IBAN       : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - <xsl:for-each select="ram:ProprietaryID"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Verkäufer-Kontonummer: </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="ram:PayeeSpecifiedCreditorFinancialInstitution"> - <xsl:for-each select="ram:BICID"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Verkäufer-BIC        : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - <xsl:for-each select="ram:GermanBankleitzahlID"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Verkäufer-BLZ        : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - <xsl:for-each select="ram:Name"> - <br/> - <span style="empty-cells:hide; "> - <xsl:text>Verkäufer-Kreditinst.: </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </xsl:if> - </td> - </tr> - <tr> - <td style="border-bottom-style:none; border-right-style:none; border-top-style:none; "> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeSettlement"> - <br/> - <xsl:if test="fn:exists(ram:SpecifiedTradeAllowanceCharge) or fn:exists(ram:SpecifiedLogisticsServiceCharge)"> - <span style="font-weight:bold; text-decoration:underline; "> - <xsl:text>Zu- und Abschläge:</xsl:text> - </span> - <br/> - <br/> - <xsl:variable name="altova:table"> - <table style="border:0px; border-collapse:collapse; empty-cells:hide; width:100%; " border="1"> - <xsl:variable name="altova:CurrContextGrid_34" select="."/> - <xsl:variable name="altova:ColumnData"/> - <thead> - <tr> - <th colspan="2" style="border-left-style:none; "> - <span> - <xsl:text>Art</xsl:text> - </span> - </th> - <th> - <span> - <xsl:text>%</xsl:text> - </span> - </th> - <th> - <span> - <xsl:text>Basisbetrag</xsl:text> - </span> - </th> - <th style="width:110px; "> - <span> - <xsl:text>Basismenge</xsl:text> - </span> - </th> - <th style="width:110px; "> - <span> - <xsl:text>Steuer</xsl:text> - </span> - </th> - <th style="border-right-style:none; width:110px; "> - <span> - <xsl:text>Betrag</xsl:text> - </span> - </th> - </tr> - </thead> - <tbody> - <xsl:for-each select="ram:SpecifiedTradeAllowanceCharge"> - <xsl:sort select="ram:SequenceNumeric" data-type="text" order="ascending"/> - <tr> - <td style="border-left-style:none; "> - <xsl:for-each select="ram:ChargeIndicator"> - <xsl:for-each select="udt:Indicator"> - <span> - <xsl:value-of select="if (. eq fn:true())then 'Zuschlag' else 'Abschlag'"/> - </span> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="ram:SequenceNumeric"> - <span> - <xsl:text> Nr. </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - </td> - <td> - <xsl:for-each select="ram:Reason"> - <xsl:apply-templates/> - </xsl:for-each> - <xsl:for-each select="ram:ReasonCode"> - <span> - <xsl:text> </xsl:text> - </span> - <xsl:call-template name="AllowanceChargeReasonCode"/> - </xsl:for-each> - </td> - <td style="text-align:right; "> - <xsl:for-each select="ram:CalculationPercent"> - <span> - <xsl:variable name="altova:seqContentStrings_35"> - <xsl:value-of select="format-number(number(string(.)), '###.##0,####', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_35" select="string($altova:seqContentStrings_35)"/> - <xsl:value-of select="$altova:sContent_35"/> - </span> - </xsl:for-each> - </td> - <td style="text-align:right; "> - <xsl:for-each select="ram:BasisAmount"> - <span> - <xsl:variable name="altova:seqContentStrings_36"> - <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_36" select="string($altova:seqContentStrings_36)"/> - <xsl:value-of select="$altova:sContent_36"/> - </span> - </xsl:for-each> - </td> - <td style="text-align:right; width:110px; "> - <xsl:for-each select="ram:BasisQuantity"> - <xsl:call-template name="ram:Menge"/> - </xsl:for-each> - </td> - <td style="text-align:right; width:110px; "> - <xsl:for-each select="ram:CategoryTradeTax"> - <xsl:call-template name="ram:TradeTax"/> - </xsl:for-each> - </td> - <td style="border-right-style:none; text-align:right; width:110px; "> - <xsl:for-each select="ram:ActualAmount"> - <span> - <xsl:variable name="altova:seqContentStrings_37"> - <xsl:value-of select="format-number(number(if (../ram:ChargeIndicator/udt:Indicator eq fn:true()) then . else -1 * .), '##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_37" select="string($altova:seqContentStrings_37)"/> - <xsl:value-of select="$altova:sContent_37"/> - </span> - </xsl:for-each> - </td> - </tr> - </xsl:for-each> - </tbody> - </table> - </xsl:variable> - <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> - <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> - <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> - <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> - </xsl:apply-templates> - <xsl:if test="fn:exists(ram:SpecifiedLogisticsServiceCharge)"> - <xsl:if test="fn:not(fn:exists(ram:SpecifiedTradeAllowanceCharge))"> - <xsl:variable name="altova:table"> - <table style="border:0px; border-top-style:none; width:100%; " border="1"> - <xsl:variable name="altova:CurrContextGrid_38" select="."/> - <xsl:variable name="altova:ColumnData"/> - <tbody> - <xsl:for-each select="ram:SpecifiedLogisticsServiceCharge"> - <tr> - <td style="border-left-style:none; border-top-style:solid; text-align:center; "> - <span style="font-weight:bold; "> - <xsl:text>Art</xsl:text> - </span> - </td> - <td style="border-top-style:solid; text-align:center; width:110px; "> - <span style="font-weight:bold; "> - <xsl:text>Steuer</xsl:text> - </span> - </td> - <td style="border-right-style:none; border-top-style:solid; text-align:center; width:110px; "> - <span style="font-weight:bold; "> - <xsl:text>Betrag</xsl:text> - </span> - </td> - </tr> - </xsl:for-each> - </tbody> - </table> - </xsl:variable> - <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> - <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> - <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> - <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> - </xsl:apply-templates> - </xsl:if> - <xsl:variable name="altova:table"> - <table style="border:0px; border-top-style:none; width:100%; " border="1"> - <xsl:variable name="altova:CurrContextGrid_39" select="."/> - <xsl:variable name="altova:ColumnData"/> - <tbody> - <xsl:for-each select="ram:SpecifiedLogisticsServiceCharge"> - <tr> - <td style="border-left-style:none; border-top-style:none; "> - <xsl:for-each select="ram:Description"> - <span style="white-space:pre-wrap; "> - <xsl:apply-templates/> - </span> - </xsl:for-each> - </td> - <td style="border-top-style:none; text-align:right; width:110px; "> - <xsl:for-each select="ram:AppliedTradeTax"> - <xsl:call-template name="ram:TradeTax"/> - </xsl:for-each> - </td> - <td style="border-right-style:none; border-top-style:none; text-align:right; width:110px; "> - <xsl:for-each select="ram:AppliedAmount"> - <span> - <xsl:variable name="altova:seqContentStrings_40"> - <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_40" select="string($altova:seqContentStrings_40)"/> - <xsl:value-of select="$altova:sContent_40"/> - </span> - </xsl:for-each> - </td> - </tr> - </xsl:for-each> - </tbody> - </table> - </xsl:variable> - <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> - <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> - <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> - <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> - </xsl:apply-templates> - </xsl:if> - </xsl:if> - <br/> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeSettlement"/> - </xsl:for-each> - </td> - </tr> - <tr> - <td style="border-bottom-style:none; border-top-style:none; "> - <xsl:if test="fn:exists(rsm:SpecifiedSupplyChainTradeTransaction/ram:ApplicableSupplyChainTradeSettlement/ram:ApplicableTradeTax)"> - <br/> - <span style="font-weight:bold; text-decoration:underline; "> - <xsl:text>Steuern:</xsl:text> - </span> - <br/> - <br/> - <xsl:variable name="altova:table"> - <table style="border:0px; border-collapse:collapse; border-right-style:none; width:100%; " border="1"> - <xsl:variable name="altova:CurrContextGrid_41" select="."/> - <xsl:variable name="altova:ColumnData"/> - <thead> - <tr> - <th style="border-left-style:none; "> - <span> - <xsl:text>Art (Kategorie)</xsl:text> - </span> - </th> - <th> - <span> - <xsl:text>Warenwert</xsl:text> - </span> - </th> - <th> - <span> - <xsl:text>Zu-/Abschlag</xsl:text> - </span> - </th> - <th style="width:110px; "> - <span> - <xsl:text>Nettobetrag</xsl:text> - </span> - </th> - <th style="width:110px; "> - <span> - <xsl:text>USt. %</xsl:text> - </span> - </th> - <th style="border-right-style:none; width:110px; "> - <span> - <xsl:text>USt.-Betrag</xsl:text> - </span> - </th> - </tr> - </thead> - <tbody> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeSettlement"> - <xsl:for-each select="ram:ApplicableTradeTax"> - <tr> - <td style="border-left-style:none; "> - <xsl:for-each select="ram:TypeCode"> - <xsl:apply-templates/> - </xsl:for-each> - <span> - <xsl:text> </xsl:text> - </span> - <xsl:for-each select="ram:CategoryCode"> - <span> - <xsl:text>(</xsl:text> - </span> - <xsl:apply-templates/> - <span> - <xsl:text>)</xsl:text> - </span> - </xsl:for-each> - <xsl:for-each select="ram:ExemptionReason"> - <br/> - <xsl:apply-templates/> - </xsl:for-each> - </td> - <td style="text-align:right; "> - <xsl:for-each select="ram:LineTotalBasisAmount"> - <span> - <xsl:variable name="altova:seqContentStrings_42"> - <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_42" select="string($altova:seqContentStrings_42)"/> - <xsl:value-of select="$altova:sContent_42"/> - </span> - </xsl:for-each> - </td> - <td style="text-align:right; "> - <xsl:for-each select="ram:AllowanceChargeBasisAmount"> - <span> - <xsl:variable name="altova:seqContentStrings_43"> - <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_43" select="string($altova:seqContentStrings_43)"/> - <xsl:value-of select="$altova:sContent_43"/> - </span> - </xsl:for-each> - </td> - <td style="text-align:right; width:110px; "> - <xsl:for-each select="ram:BasisAmount"> - <span> - <xsl:variable name="altova:seqContentStrings_44"> - <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_44" select="string($altova:seqContentStrings_44)"/> - <xsl:value-of select="$altova:sContent_44"/> - </span> - </xsl:for-each> - </td> - <td style="text-align:right; width:110px; "> - <xsl:for-each select="ram:ApplicablePercent"> - <span> - <xsl:variable name="altova:seqContentStrings_45"> - <xsl:value-of select="format-number(number(string(.)), '###.##0,####', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_45" select="string($altova:seqContentStrings_45)"/> - <xsl:value-of select="$altova:sContent_45"/> - </span> - </xsl:for-each> - </td> - <td style="border-right-style:none; text-align:right; width:110px; "> - <xsl:for-each select="ram:CalculatedAmount"> - <span> - <xsl:variable name="altova:seqContentStrings_46"> - <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_46" select="string($altova:seqContentStrings_46)"/> - <xsl:value-of select="$altova:sContent_46"/> - </span> - </xsl:for-each> - </td> - </tr> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </tbody> - </table> - </xsl:variable> - <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> - <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> - <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> - <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> - </xsl:apply-templates> - </xsl:if> - </td> - </tr> - <tr> - <td style="border-bottom-style:none; text-align:left; "> - <br/> - <span style="font-weight:bold; text-decoration:underline; "> - <xsl:text>Belegsummen:</xsl:text> - </span> - <br/> - <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> - <xsl:for-each select="ram:ApplicableSupplyChainTradeSettlement"> - <xsl:for-each select="ram:SpecifiedTradeSettlementMonetarySummation"> - <xsl:variable name="altova:table"> - <table style="border:0px; " border="1" width="100%"> - <xsl:variable name="altova:CurrContextGrid_47" select="."/> - <xsl:variable name="altova:ColumnData"/> - <tbody> - <tr> - <td style="border-style:none; "/> - <td style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; padding:1px; text-align:left; width:220px; "> - <span style="font-weight:bold; "> - <xsl:text>Positionssumme</xsl:text> - </span> - </td> - <td style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; padding:1px; text-align:right; width:110px; "> - <xsl:for-each select="ram:LineTotalAmount"> - <span style="font-weight:bold; "> - <xsl:variable name="altova:seqContentStrings_48"> - <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_48" select="string($altova:seqContentStrings_48)"/> - <xsl:value-of select="$altova:sContent_48"/> - </span> - </xsl:for-each> - </td> - </tr> - <tr> - <td style="border-style:none; "/> - <td style="border:0px; border-top-style:double; padding:1px; text-align:left; width:220px; "> - <span> - <xsl:text>Gesamtbetrag der Zuschläge</xsl:text> - </span> - </td> - <td style="border:0px; border-top-style:double; padding:1px; text-align:right; width:110px; "> - <xsl:for-each select="ram:ChargeTotalAmount"> - <span> - <xsl:variable name="altova:seqContentStrings_49"> - <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_49" select="string($altova:seqContentStrings_49)"/> - <xsl:value-of select="$altova:sContent_49"/> - </span> - </xsl:for-each> - </td> - </tr> - <tr> - <td style="border-style:none; "/> - <td style="border:0px; border-top-style:double; padding:1px; text-align:left; width:220px; "> - <span> - <xsl:text>Gesamtbetrag der Abschläge</xsl:text> - </span> - </td> - <td style="border:0px; border-top-style:double; padding:1px; text-align:right; width:110px; "> - <xsl:for-each select="ram:AllowanceTotalAmount"> - <span> - <xsl:variable name="altova:seqContentStrings_50"> - <xsl:value-of select="format-number(number(-1*.), '##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_50" select="string($altova:seqContentStrings_50)"/> - <xsl:value-of select="$altova:sContent_50"/> - </span> - </xsl:for-each> - </td> - </tr> - <tr> - <td style="border-style:none; "/> - <td style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; padding:1px; text-align:left; width:220px; "> - <span style="font-weight:bold; "> - <xsl:text>Rechnungssumme ohne USt.</xsl:text> - </span> - </td> - <td style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; padding:1px; text-align:right; width:110px; "> - <xsl:for-each select="ram:TaxBasisTotalAmount"> - <span style="font-weight:bold; "> - <xsl:variable name="altova:seqContentStrings_51"> - <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_51" select="string($altova:seqContentStrings_51)"/> - <xsl:value-of select="$altova:sContent_51"/> - </span> - </xsl:for-each> - </td> - </tr> - <tr> - <td style="border-style:none; "/> - <td style="border:0px; border-top-style:double; padding:1px; text-align:left; width:220px; "> - <span> - <xsl:text>Steuerbetrag</xsl:text> - </span> - </td> - <td style="border:0px; border-top-style:double; padding:1px; text-align:right; width:110px; "> - <xsl:for-each select="ram:TaxTotalAmount"> - <span> - <xsl:variable name="altova:seqContentStrings_52"> - <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_52" select="string($altova:seqContentStrings_52)"/> - <xsl:value-of select="$altova:sContent_52"/> - </span> - </xsl:for-each> - </td> - </tr> - <tr> - <td style="border-style:none; "/> - <td style="border-bottom-style:double; border-bottom-width:medium; border-left-style:none; border-right-style:none; border-top-style:none; padding:1px; text-align:left; width:220px; "> - <span style="font-weight:bold; "> - <xsl:text>Bruttosumme</xsl:text> - </span> - </td> - <td style="border-bottom-style:double; border-bottom-width:medium; border-left-style:none; border-right-style:none; border-top-style:none; padding:1px; text-align:right; width:110px; "> - <xsl:for-each select="ram:GrandTotalAmount"> - <span style="font-weight:bold; "> - <xsl:variable name="altova:seqContentStrings_53"> - <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_53" select="string($altova:seqContentStrings_53)"/> - <xsl:value-of select="$altova:sContent_53"/> - </span> - </xsl:for-each> - </td> - </tr> - <tr> - <td style="border-style:none; "/> - <td style="border:0px; border-top-style:double; padding:1px; text-align:left; width:220px; "> - <xsl:if test="(ram:TotalPrepaidAmount>=0 and fn:exists(ram:TotalPrepaidAmount)) or(fn:not(fn:exists(ram:TotalPrepaidAmount)) and fn:not(ends-with( ../../../rsm:SpecifiedExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID , 'basic' )))"> - <span> - <xsl:text>Erhaltene Anzahlungen</xsl:text> - </span> - <br/> - </xsl:if> - <xsl:if test="ram:TotalPrepaidAmount<0 and fn:exists(ram:TotalPrepaidAmount)"> - <span> - <xsl:text>Offene Zahlungen</xsl:text> - </span> - <br/> - </xsl:if> - </td> - <td style="border:0px; border-top-style:double; padding:1px; text-align:right; width:110px; "> - <xsl:if test="fn:exists(TotalPrepaidAmount) or fn:not(ends-with( ../../../rsm:SpecifiedExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID , 'basic' ))"> - <xsl:for-each select="ram:TotalPrepaidAmount"> - <span> - <xsl:variable name="altova:seqContentStrings_54"> - <xsl:value-of select="format-number(number(-1*.), '##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_54" select="string($altova:seqContentStrings_54)"/> - <xsl:value-of select="$altova:sContent_54"/> - </span> - </xsl:for-each> - </xsl:if> - </td> - </tr> - <tr> - <td style="border-style:none; "/> - <td style="border:0px; border-top-style:double; padding:1px; text-align:left; width:220px; "> - <xsl:if test="fn:exists(ram:DuePayableAmount) or fn:not(ends-with( ../../../rsm:SpecifiedExchangedDocumentContext/GuidelineSpecifiedDocumentContextParameter/ID , 'basic' ))"> - <span style="font-weight:bold; "> - <xsl:text>Zahlbetrag</xsl:text> - </span> - </xsl:if> - </td> - <td style="border:0px; border-top-style:double; padding:1px; text-align:right; width:110px; "> - <xsl:if test="fn:exists(ram:DuePayableAmount) or fn:not(ends-with( ../../../rsm:SpecifiedExchangedDocumentContext/GuidelineSpecifiedDocumentContextParameter/ID , 'basic' ))"> - <xsl:for-each select="ram:DuePayableAmount"> - <span style="font-weight:bold; "> - <xsl:variable name="altova:seqContentStrings_55"> - <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_55" select="string($altova:seqContentStrings_55)"/> - <xsl:value-of select="$altova:sContent_55"/> - </span> - </xsl:for-each> - </xsl:if> - </td> - </tr> - </tbody> - </table> - </xsl:variable> - <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> - <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> - <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> - <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> - </xsl:apply-templates> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - </td> - </tr> - </tbody> - </table> - </xsl:variable> - <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> - <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> - <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> - <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> - </xsl:apply-templates> - <br/> - </xsl:for-each> - </xsl:for-each> - <br/> - <br/> - </body> - </html> - </xsl:template> - <xsl:template name="ram:Party"> - <xsl:for-each select="ram:ID"> - <span> - <xsl:text>Nummer        : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - <xsl:for-each select="@schemeID"> - <xsl:call-template name="local_Identifier"/> - </xsl:for-each> - <xsl:for-each select="ram:GlobalID"> - <br/> - <span> - <xsl:text>Globale Nummer: </xsl:text> - </span> - <xsl:apply-templates/> - <xsl:for-each select="@schemeID"> - <span> - <xsl:text> </xsl:text> - </span> - <xsl:call-template name="ram:Global_Identifier"/> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="ram:Name"> - <br/> - <span style="font-weight:bold; white-space:pre-wrap; "> - <xsl:apply-templates/> - </span> - </xsl:for-each> - <xsl:for-each select="ram:DefinedTradeContact"> - <xsl:for-each select="ram:PersonName"> - <br/> - <xsl:apply-templates/> - </xsl:for-each> - <xsl:for-each select="ram:DepartmentName"> - <br/> - <xsl:apply-templates/> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="ram:PostalTradeAddress"> - <xsl:for-each select="ram:LineOne"> - <br/> - <xsl:apply-templates/> - </xsl:for-each> - <xsl:for-each select="ram:LineTwo"> - <br/> - <xsl:apply-templates/> - </xsl:for-each> - <xsl:for-each select="ram:CountryID"> - <br/> - <xsl:apply-templates/> - <span> - <xsl:text> </xsl:text> - </span> - </xsl:for-each> - <xsl:for-each select="ram:PostcodeCode"> - <xsl:apply-templates/> - <span> - <xsl:text> </xsl:text> - </span> - </xsl:for-each> - <xsl:for-each select="ram:CityName"> - <xsl:apply-templates/> - </xsl:for-each> - </xsl:for-each> - <br/> - <xsl:for-each select="ram:DefinedTradeContact"> - <xsl:for-each select="ram:TelephoneUniversalCommunication"> - <xsl:for-each select="ram:CompleteNumber"> - <br/> - <span> - <xsl:text>Telefon      : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="ram:FaxUniversalCommunication"> - <xsl:for-each select="ram:CompleteNumber"> - <br/> - <span> - <xsl:text>Fax          : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="ram:EmailURIUniversalCommunication"> - <xsl:for-each select="ram:URIID"> - <br/> - <span> - <xsl:text>E-Mail       : </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="ram:SpecifiedTaxRegistration"> - <xsl:for-each select="ram:ID"> - <br/> - <xsl:call-template name="ram:TaxRegistration"/> - </xsl:for-each> - </xsl:for-each> - <br/> - </xsl:template> - <xsl:template name="ram:TradeTax"> - <xsl:for-each select="ram:ApplicablePercent"> - <span> - <xsl:variable name="altova:seqContentStrings_56"> - <xsl:value-of select="format-number(number(string(.)), '###.##0,####', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_56" select="string($altova:seqContentStrings_56)"/> - <xsl:value-of select="$altova:sContent_56"/> - </span> - <span> - <xsl:text> %</xsl:text> - </span> - </xsl:for-each> - <xsl:for-each select="ram:TypeCode"> - <span> - <xsl:text> </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - <xsl:for-each select="ram:CategoryCode"> - <span> - <xsl:text> (</xsl:text> - </span> - <xsl:apply-templates/> - <span> - <xsl:text>)</xsl:text> - </span> - </xsl:for-each> - <xsl:for-each select="ram:CalculatedAmount"> - <span> - <xsl:text> entspricht </xsl:text> - </span> - <span> - <xsl:variable name="altova:seqContentStrings_57"> - <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_57" select="string($altova:seqContentStrings_57)"/> - <xsl:value-of select="$altova:sContent_57"/> - </span> - </xsl:for-each> - <xsl:for-each select="ram:ExemptionReason"> - <br/> - <xsl:apply-templates/> - </xsl:for-each> - </xsl:template> - <xsl:template name="ram:Positionsreferenz"> - <xsl:for-each select="ram:ID"> - <span> - <xsl:text> Nr. </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - <xsl:for-each select="ram:IssueDateTime"> - <span> - <xsl:text> vom </xsl:text> - </span> - <span> - <xsl:variable name="altova:seqContentStrings_58"> - <xsl:value-of select="format-number(number(substring(string(string(.)), 9, 2)), '00', 'format1')"/> - <xsl:variable name="sText" as="xs:string?"> - <xsl:text>. </xsl:text> - </xsl:variable> - <xsl:value-of select="$sText"/> - <xsl:value-of select="format-number(number(substring(string(string(.)), 6, 2)), '00', 'format1')"/> - <xsl:variable name="sText" as="xs:string?"> - <xsl:text>. </xsl:text> - </xsl:variable> - <xsl:value-of select="$sText"/> - <xsl:value-of select="format-number(number(substring(string(string(string(.))), 1, 4)), '0000', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_58" select="string($altova:seqContentStrings_58)"/> - <xsl:value-of select="$altova:sContent_58"/> - </span> - </xsl:for-each> - <xsl:for-each select="ram:LineID"> - <span> - <xsl:text> Zeile </xsl:text> - </span> - <xsl:apply-templates/> - </xsl:for-each> - </xsl:template> - <xsl:template name="ram:Datum"> - <span> - <xsl:value-of select="if ( @format = '102') then concat(substring(.,7,2),'.',substring(.,5,2),'.',substring(.,1,4)) else -if ( @format = '610') then concat(substring(.,5,2),'-',substring(.,1,4)) else -if ( @format = '616') then concat('KW ',substring(.,5,2),' ',substring(.,1,4)) else -concat('Ungültiges Datumsformat für: ', .)"/> - </span> - </xsl:template> - <xsl:template name="ram:Versand_Identifer"> - <span> - <xsl:value-of select="if(. eq 'GSIN') then . else -if(. eq 'GINC') then . else -if(. eq 'SSCC') then 'Nummer der Versandeinheit' else -if(. eq 'FLIGHT_NO') then 'Flugnummer' else -if(. eq 'NUMBER_PLATE') then 'Nummernschild' else -if(. eq 'SHIPMENT_REFERENCE') then 'Sendungs-/Ladungsbezugsnummer' else -."/> - </span> - </xsl:template> - <xsl:template name="ram:Global_Identifier"> - <span> - <xsl:text>(</xsl:text> - </span> - <span> - <xsl:value-of select="if (. eq '0021') then 'BIC' else -if (. eq '0060') then 'DUNS' else -if (. eq '0088') then 'GTIN' else -if (. eq '0160') then 'GLN' else -if (. eq '0177') then 'OSCAR' else -."/> - </span> - <span> - <xsl:text>)</xsl:text> - </span> - </xsl:template> - <xsl:template name="ram:Menge"> - <span> - <xsl:variable name="altova:seqContentStrings_59"> - <xsl:value-of select="format-number(number(string(.)), '##0', 'format1')"/> - </xsl:variable> - <xsl:variable name="altova:sContent_59" select="string($altova:seqContentStrings_59)"/> - <xsl:value-of select="$altova:sContent_59"/> - </span> - <xsl:for-each select="@unitCode"> - <span> - <xsl:text> </xsl:text> - </span> - <span> - <xsl:value-of select="if (. eq 'C62') then 'Stk' else -if (. eq 'DAY') then 'Tag(e)' else -if (. eq 'HAR') then 'ha' else -if (. eq 'HUR') then 'Std' else -if (. eq 'KGM') then 'kg' else -if (. eq 'KTM') then 'km' else -if (. eq 'LS') then 'pausch' else -if (. eq 'LTR') then 'l' else -if (. eq 'MIN') then 'min' else -if (. eq 'MMK') then 'mm²' else -if (. eq 'MMT') then 'mm' else -if (. eq 'MTK') then 'm²' else -if (. eq 'MTQ') then 'm³' else -if (. eq 'MTR') then 'm' else -if (. eq 'NAR') then 'Anz' else -if (. eq 'NPR') then 'Paar' else -if (. eq 'P1') then '%' else -if (. eq 'SET') then 'Set' else -if (. eq 'TNE') then 't' else -if (. eq 'WEE') then 'Woche(n)' else -."/> - </span> - </xsl:for-each> - </xsl:template> - <xsl:template name="ram:TaxRegistration"> - <span> - <xsl:value-of select="if ( @schemeID = 'FC') then concat('Steuernummer : ', .) else -if ( @schemeID = 'VA') then concat('USt.-Id.-Nr. : ', .) else -concat('Unbekannte Steuernummer (', @schemeID , '): ', .)"/> - </span> - </xsl:template> - <xsl:template name="ram:VersandMode"> - <span> - <xsl:value-of select="if (. eq '0')then '0 - Nicht spezifiziert' else -if (. eq '1')then '1 - Seefracht' else -if (. eq '2')then '2 - Schiene' else -if (. eq '3')then '3 - Straße' else -if (. eq '4')then '4 - Luftfracht' else -if (. eq '5')then '5 - Post/Paketversand' else -if (. eq '6')then '6 - Multimodaler Transport/kombinierter Verkehr' else -if (. eq '7')then '7 - Feste Transportinstallation' else -if (. eq '8')then '8 - Transport auf Binnengewässern' else -if (. eq '9')then '9 - Nicht anwendbar' else -fn:concat(.,' - unbekannte Transportart')"/> - </span> - </xsl:template> - <xsl:template name="ram:PaymentType"> - <span> - <xsl:value-of select="if(. eq '1') then concat(.,' - nicht definiert') else -if(. eq '3') then concat(.,' - Belastung durch automatisierte Clearingstelle') else -if(. eq '10') then concat(.,' - Barzahlung') else -if(. eq '20') then concat(.,' - per Scheck') else -if(. eq '31') then concat(.,' - per Überweisung (SEPA)') else -if(. eq '42') then concat(.,' - per Überweisung (nicht SEPA)') else -if(. eq '48') then concat(.,' - per Kreditkarte') else -if(. eq '49') then concat(.,' - per Lastschrift') else -if(. eq '97') then concat(.,' - per Ausgleich zwischen Partnern') else -."/> - </span> - </xsl:template> - <xsl:template name="ram:Referenz"> - <span> - <xsl:value-of select="if (. eq 'AAA')then 'Auftragsbestätigung' else -if (. eq 'AAB')then 'Proforma-Rechnung' else -if (. eq 'AAG') then 'Angebot' else -if (. eq 'AAJ') then 'Lieferauftrag' else -if (. eq 'AAL') then 'Zeichnung' else -if (. eq 'AAM') then 'Frachtbrief' else -if (. eq 'AAS') then 'Transportdokument' else -if (. eq 'ABT') then 'Zollerklärung' else -if (. eq 'AER') then 'Projektspezifikation' else -if (. eq 'AGG') then 'Reklamation' else -if (. eq 'AJS') then 'Vereinbarung' else -if (. eq 'ALO') then 'Wareneingang' else -if (. eq 'ALQ') then 'Rücksendungsanzeige' else -if (. eq 'API') then 'Bestandsbericht' else -if (. eq 'ASI') then 'Abliefernachweis' else -if (. eq 'AUD') then 'Inkasso-Referenz' else -if (. eq 'AWR') then 'Ursprungsbeleg' else -if (. eq 'BO') then 'Rahmenauftrag' else -if (. eq 'BC') then 'Vertrag (Käufer)' else -if (. eq 'CD') then 'Gutschrift' else -if (. eq 'DL') then 'Belastungsanzeige' else -if (. eq 'MG') then 'Zählernummer' else -if (. eq 'OI') then 'Vorherige Rechnung' else -if (. eq 'PK') then 'Packliste' else -if (. eq 'PL') then 'Preisliste' else -if (. eq 'POR') then 'Bestellantwort' else -if (. eq 'PP') then 'Bestelländerung' else -if (. eq 'TIN') then 'Transportauftrag' else -if (. eq 'VN') then 'Auftragsnummer (Lieferant)' else -."/> - </span> - </xsl:template> - <xsl:template name="PackageQuantity"> - <xsl:for-each select="ram:PackageQuantity"> - <xsl:for-each select="@unitCode"> - <span> - <xsl:text> </xsl:text> - </span> - <span> - <xsl:value-of select="if (. eq 'BA') then 'Tonne' else -if (. eq 'BC') then 'Getränkekiste' else -if (. eq 'BG') then 'Tüte, Beutel' else -if (. eq 'BO') then 'Flasche' else -if (. eq 'BX') then 'Schachtel' else -if (. eq 'CS') then 'Kiste' else -if (. eq 'CT') then 'Karton' else -if (. eq 'CX') then 'Dose' else -if (. eq 'NE') then 'Unverpackt oder ausgepackt' else -if (. eq 'PX') then 'Palette' else -if (. eq 'RO') then 'Rolle' else -if (. eq 'SA') then 'Sack' -else ."/> - </span> - </xsl:for-each> - </xsl:for-each> - </xsl:template> - <xsl:template name="local_Identifier"> - <span> - <xsl:text>(</xsl:text> - </span> - <xsl:choose> - <xsl:when test=". instance of element()"> - <xsl:apply-templates/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="."/> - </xsl:otherwise> - </xsl:choose> - <span> - <xsl:text>)</xsl:text> - </span> - </xsl:template> - <xsl:template name="Klassifikationsart"> - <xsl:for-each select="@listID"> - <span> - <xsl:text>, Art: </xsl:text> - </span> - <span> - <xsl:value-of select="if (. eq 'GPC') then 'Global Product Classification (GS1)' else -if (. eq 'ECL') then 'eCl@ass' else -if (. eq 'UNSPSC') then 'United Nations Standard Products and Services Code® (UNSPSC®)' else -if (. eq 'HS') then 'Zolltarifnummer (Harmonised System)' else -if (. eq 'CBV') then 'Gemeinsames Vokabular für öffentliche Aufträge (Common Procurement Vocabulary - CPV)' else -if (. eq 'SELLER_ASSIGNED') then 'vom Verkäufer vergeben' else -if (. eq 'BUYER_ASSIGNED') then 'vom Käufer vergeben' else -."/> - </span> - </xsl:for-each> - </xsl:template> - <xsl:template name="DeliveryTypeCode"> - <span> - <xsl:value-of select="if (. eq 'XW') then 'ab Werk' else -if (. eq 'FCA') then 'frei Frachtführer' else -if (. eq 'FAS') then 'frei längsseits Schiff' else -if (. eq 'FOB') then 'frei an Bord' else -if (. eq 'CFR') then 'Kosten und Fracht' else -if (. eq 'CIF') then 'Kosten, Versicherung und Fracht bis zum Bestimmungshafen' else -if (. eq 'DAT') then 'geliefert Terminal' else -if (. eq 'DAP') then 'geliefert benannter Ort' else -if (. eq 'CPT') then 'Fracht bezahlt bis' else -if (. eq 'CIP') then 'Fracht und Versicherung bezahlt' else -if (. eq 'DDP') then 'geliefert Zoll bezahlt' else -."/> - </span> - </xsl:template> - <xsl:template name="AllowanceChargeReasonCode"> - <span> - <xsl:text>(</xsl:text> - </span> - <span> - <xsl:value-of select="if (. eq 'AA') then 'Werbekostenzuschuß' else -if (. eq 'ADR') then 'Andere Dienste' else -if (. eq 'AEO') then 'Sammel- und Recyclingservice' else -if (. eq 'DI') then 'Abzug (Rabatt)' else -if (. eq 'EAB') then 'Skonto' else -if (. eq 'FC') then 'Frachtgebühren' else -if (. eq 'IN') then 'Versicherung' else -if (. eq 'MAC') then 'Mindermengenzuschlag' else -if (. eq 'NAA') then 'Einwegbehälter' else -if (. eq 'PC') then 'Verpacken' else -if (. eq 'RAA') then 'Rückvergütung' else -if (. eq 'SH') then 'Spezielle Handhabungsdienstleistungen' else -."/> - </span> - <span> - <xsl:text>)</xsl:text> - </span> - </xsl:template> - <xsl:function name="altova:is-cell-empty" as="xs:boolean"> - <xsl:param name="altova:cell" as="element()"/> - <xsl:sequence select="altova:is-node-empty( $altova:cell )"/> - </xsl:function> - <xsl:function name="altova:is-node-empty" as="xs:boolean"> - <xsl:param name="altova:node" as="element()"/> - <xsl:sequence select="every $altova:child in $altova:node/child::node() satisfies ( ( boolean( $altova:child/self::text() ) and string-length( $altova:child ) = 0 ) or ( ( boolean( $altova:child/self::div ) or boolean( $altova:child/self::span ) or boolean( $altova:child/self::a ) ) and altova:is-node-empty( $altova:child ) ) )"/> - </xsl:function> - <xsl:function name="altova:col-span" as="xs:integer"> - <xsl:param name="altova:cell" as="element()"/> - <xsl:sequence select="if ( exists( $altova:cell/@colspan ) ) then xs:integer( $altova:cell/@colspan ) else 1"/> - </xsl:function> - <xsl:template match="@* | node()" mode="altova:generate-table"> - <xsl:param name="altova:generate-cols"/> - <xsl:copy> - <xsl:apply-templates select="@* | node()" mode="#current"> - <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> - </xsl:apply-templates> - </xsl:copy> - </xsl:template> - <xsl:template match="tbody" mode="altova:generate-table"> - <xsl:param name="altova:generate-cols"/> - <xsl:choose> - <xsl:when test="empty(tr)"> - <xsl:copy> - <tr> - <td/> - </tr> - </xsl:copy> - </xsl:when> - <xsl:otherwise> - <xsl:copy> - <xsl:apply-templates select="@* | node()" mode="#current"> - <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> - </xsl:apply-templates> - </xsl:copy> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - <xsl:template match="th | td" mode="altova:generate-table"> - <xsl:choose> - <xsl:when test="altova:is-cell-empty( . )"> - <xsl:copy> - <xsl:apply-templates select="@*" mode="#current"/> - <xsl:text> </xsl:text> - </xsl:copy> - </xsl:when> - <xsl:otherwise> - <xsl:copy> - <xsl:apply-templates select="@* | node()" mode="#current"/> - </xsl:copy> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - <xsl:function name="altova:GetChartYValuesForSingleSeries"> - <xsl:param name="seqCategoryLeafPos" as="node()*"/> - <xsl:param name="nodeSeriesLeafPos" as="node()"/> - <xsl:param name="bValuesInCategory" as="xs:boolean"/> - <xsl:for-each select="$seqCategoryLeafPos"> - <xsl:element name="altova:Value"> - <xsl:value-of select="altova:GetChartYValueForSingleSeriesPos($nodeSeriesLeafPos, ., $bValuesInCategory)"/> - </xsl:element> - </xsl:for-each> - </xsl:function> - <xsl:function name="altova:GetChartYValueForSingleSeriesPos"> - <xsl:param name="nodeSeriesLeafPos" as="node()"/> - <xsl:param name="nodeCategoryLeafPos" as="node()"/> - <xsl:param name="bValuesInCategory" as="xs:boolean"/> - <xsl:variable name="altova:seqCategoryContextIds" select="$nodeCategoryLeafPos/altova:Context/@altova:ContextId" as="xs:string*"/> - <xsl:variable name="altova:seqSeriesContextIds" select="$nodeSeriesLeafPos/altova:Context/@altova:ContextId" as="xs:string*"/> - <xsl:variable name="altova:sCommonContextId" select="for $i in $altova:seqCategoryContextIds return if (some $j in $altova:seqSeriesContextIds satisfies $i eq $j) then $i else ()" as="xs:string*"/> - <xsl:choose> - <xsl:when test="count($altova:sCommonContextId) gt 1"> - <xsl:message select="concat('Es wurden mehrere Werte anstatt eines einzigen gefunden (Contexts: ', string-join($altova:sCommonContextId, ', '), ').')" terminate="yes"/> - </xsl:when> - <xsl:when test="count($altova:sCommonContextId) lt 1"> - <xsl:message select="concat('XBRL Chart: Info: No value found for position labeled "', $nodeCategoryLeafPos/@altova:sLabel, '"')" terminate="no"/> - <xsl:sequence select="'altova:no-value'"/> - </xsl:when> - <xsl:when test="$bValuesInCategory"> - <xsl:sequence select="xs:string($nodeCategoryLeafPos/altova:Context[@altova:ContextId eq $altova:sCommonContextId]/@altova:Value)"/> - </xsl:when> - <xsl:otherwise> - <xsl:sequence select="xs:string($nodeSeriesLeafPos/altova:Context[@altova:ContextId eq $altova:sCommonContextId]/@altova:Value)"/> - </xsl:otherwise> - </xsl:choose> - </xsl:function> - <xsl:function name="altova:GetChartLabelForPos" as="xs:string"> - <xsl:param name="nodeParam" as="node()"/> - <xsl:value-of select="string-join($nodeParam/ancestor-or-self::altova:Pos/@altova:sLabel, ' ')"/> - </xsl:function> - <xsl:function name="altova:convert-length-to-pixel" as="xs:decimal"> - <xsl:param name="altova:length"/> - <xsl:variable name="normLength" select="normalize-space($altova:length)"/> - <xsl:choose> - <xsl:when test="ends-with($normLength, 'px')"> - <xsl:value-of select="substring-before($normLength, 'px')"/> - </xsl:when> - <xsl:when test="ends-with($normLength, 'in')"> - <xsl:value-of select="xs:decimal(substring-before($normLength, 'in')) * $altova:nPxPerIn"/> - </xsl:when> - <xsl:when test="ends-with($normLength, 'cm')"> - <xsl:value-of select="xs:decimal(substring-before($normLength, 'cm')) * $altova:nPxPerIn div 2.54"/> - </xsl:when> - <xsl:when test="ends-with($normLength, 'mm')"> - <xsl:value-of select="xs:decimal(substring-before($normLength, 'mm')) * $altova:nPxPerIn div 25.4"/> - </xsl:when> - <xsl:when test="ends-with($normLength, 'pt')"> - <xsl:value-of select="xs:decimal(substring-before($normLength, 'pt')) * $altova:nPxPerIn div 72.0"/> - </xsl:when> - <xsl:when test="ends-with($normLength, 'pc')"> - <xsl:value-of select="xs:decimal(substring-before($normLength, 'pc')) * $altova:nPxPerIn div 6.0"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="$normLength"/> - </xsl:otherwise> - </xsl:choose> - </xsl:function> - <xsl:function name="altova:convert-length-to-mm" as="xs:decimal"> - <xsl:param name="altova:length"/> - <xsl:variable name="normLength" select="normalize-space($altova:length)"/> - <xsl:choose> - <xsl:when test="ends-with($normLength, 'px')"> - <xsl:value-of select="xs:decimal(substring-before($normLength, 'px')) div $altova:nPxPerIn * 25.4"/> - </xsl:when> - <xsl:when test="ends-with($normLength, 'in')"> - <xsl:value-of select="xs:decimal(substring-before($normLength, 'in')) * 25.4"/> - </xsl:when> - <xsl:when test="ends-with($normLength, 'cm')"> - <xsl:value-of select="xs:decimal(substring-before($normLength, 'cm')) * 10"/> - </xsl:when> - <xsl:when test="ends-with($normLength, 'mm')"> - <xsl:value-of select="substring-before($normLength, 'mm') "/> - </xsl:when> - <xsl:when test="ends-with($normLength, 'pt')"> - <xsl:value-of select="xs:decimal(substring-before($normLength, 'pt')) * 25.4 div 72.0"/> - </xsl:when> - <xsl:when test="ends-with($normLength, 'pc')"> - <xsl:value-of select="xs:decimal(substring-before($normLength, 'pc')) * 25.4 div 6.0"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="number($normLength) div $altova:nPxPerIn * 25.4"/> - </xsl:otherwise> - </xsl:choose> - </xsl:function> -</xsl:stylesheet> +<?xml version="1.0" encoding="UTF-8"?> +<!-- + +Nutzungsrechte +ZUGFeRD Datenformat Version 1.0, 25.6.2014 + +Zweck des Forums für elektronische Rechnungen bei der AWV e.V („FeRD“) ist u.a. die Schaffung und Spezifizierung +eines offenen Datenformats für strukturierten elektronischen Datenaustausch auf der Grundlage offener und nicht +diskriminierender, standardisierter Technologien („ZUGFeRD Datenformat“) + +Das ZUGFeRD Datenformat wird nach Maßgabe des FeRD sowohl Unternehmen als auch der öffentlichen Verwaltung +frei zugänglich gemacht. Hierfür bietet FeRD allen Unternehmen und Organisationen der öffentlichen Verwaltung eine +Lizenz für die Nutzung des urheberrechtlich geschützten ZUGFeRD-Datenformats zu fairen, sachgerechten und nicht +diskriminierenden Bedingungen an. + +Die Spezifikation des FeRD zur Implementierung des ZUGFeRD Datenformats ist in ihrer jeweils geltenden Fassung +abrufbar unter www.ferd-net.de. + +Im Einzelnen schließt die Nutzungsgewährung ein: +===================================== + +FeRD räumt eine Lizenz für die Nutzung des urheberrechtlich geschützten ZUGFeRD Datenformats in der jeweils +geltenden und akzeptierten Fassung (www.ferd-net.de) ein. +Die Lizenz beinhaltet ein unwiderrufliches Nutzungsrecht einschließlich des Rechts der Weiterentwicklung, +Weiterbearbeitung und Verbindung mit anderen Produkten. +Die Lizenz gilt insbesondere für die Entwicklung, die Gestaltung, die Herstellung, den Verkauf, die Nutzung oder +anderweitige Verwendung des ZUGFeRD Datenformats für Hardware- und/oder Softwareprodukte sowie sonstige +Anwendungen und Dienste. +Diese Lizenz schließt nicht die wesentlichen Patente der Mitglieder von FeRD ein. Als wesentliche Patente sind Patente +und Patentanmeldungen weltweit zu verstehen, die einen oder mehrere Patentansprüche beinhalten, bei denen es sich um +notwendige Ansprüche handelt. Notwendige Ansprüche sind lediglich jene Ansprüche der Wesentlichen Patente, die durch +die Implementierung des ZUGFeRD Datenformats notwendigerweise verletzt würden. +Der Lizenznehmer ist berechtigt, seinen jeweiligen Konzerngesellschaften ein unbefristetes, weltweites, nicht übertragbares, +unwiderrufliches Nutzungsrecht einschließlich des Rechts der Weiterentwicklung, Weiterbearbeitung und Verbindung mit +anderen Produkten einzuräumen. + +Die Lizenz wird kostenfrei zur Verfügung gestellt. + +Außer im Falle vorsätzlichen Verschuldens oder grober Fahrlässigkeit haftet FeRD weder für Nutzungsausfall, entgangenen +Gewinn, Datenverlust, Kommunikationsverlust, Einnahmeausfall, Vertragseinbußen, Geschäftsausfall oder für Kosten, +Schäden, Verluste oder Haftpflichten im Zusammenhang mit einer Unterbrechung der Geschäftstätigkeit, noch für konkrete, +beiläufig entstandene, mittelbare Schäden, Straf- oder Folgeschäden und zwar auch dann nicht, wenn die Möglichkeit der +Kosten, Verluste bzw. Schäden hätte normalerweise vorhergesehen werden können. + +--> +<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:altova="http://www.altova.com" xmlns:altovaext="http://www.altova.com/xslt-extensions" xmlns:clitype="clitype" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:iso4217="http://www.xbrl.org/2003/iso4217" xmlns:ix="http://www.xbrl.org/2008/inlineXBRL" xmlns:java="java" xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:12" xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:12" xmlns:rsm="urn:ferd:CrossIndustryDocument:invoice:1p0" xmlns:sps="http://www.altova.com/StyleVision/user-xpath-functions" xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:15" xmlns:xbrldi="http://xbrl.org/2006/xbrldi" xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exclude-result-prefixes="#all"> + <xsl:output version="4.0" method="html" indent="no" encoding="UTF-8" use-character-maps="spaces" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" doctype-system="http://www.w3.org/TR/html4/loose.dtd"/> + <xsl:character-map name="spaces"> + <xsl:output-character character=" " string="&nbsp;"/> + </xsl:character-map> + <xsl:param name="altova:bGeneratingFromPxf" select="false()"/> + <xsl:param name="SV_OutputFormat" select="'HTML'"/> + <xsl:param name="SV_BaseOutputFileName" as="xs:string?"> + <xsl:sequence select="for $i in altovaext:get-base-output-uri(), $j in tokenize( $i, '[/\\]' )[last()] return replace( $j, '\.[^\.\s#%;]*$', '' )" use-when="function-available('altovaext:get-base-output-uri')"/> + </xsl:param> + <xsl:param name="SV_GeneratedFileNamePrefix" select="if ( $SV_BaseOutputFileName ) then $SV_BaseOutputFileName else 'zugferd_1p0_s1p0_c1p0'" as="xs:string?"/> + <xsl:variable name="XML" select="/"/> + <xsl:variable name="altova:nPxPerIn" select="96"/> + <xsl:decimal-format name="format1" grouping-separator="." decimal-separator=","/> + <xsl:import-schema schema-location="ZUGFeRD_1p0.xsd" use-when="system-property('xsl:is-schema-aware')='yes'" namespace="urn:ferd:CrossIndustryDocument:invoice:1p0"/> + <xsl:variable name="altova:CssImages" select="()"/> + <xsl:template match="/"> + <xsl:call-template name="altova:Root"/> + </xsl:template> + <xsl:template name="altova:Root"> + <html> + <head> + <title/> + <meta http-equiv="X-UA-Compatible" content="IE=9"/> + <xsl:comment>[if IE]><STYLE type="text/css">.altova-rotate-left-textbox{filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3)} .altova-rotate-right-textbox{filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1)} </STYLE><![endif]</xsl:comment> + <xsl:comment>[if !IE]><!</xsl:comment> + <style type="text/css">.altova-rotate-left-textbox{-webkit-transform: rotate(-90deg) translate(-100%, 0%); -webkit-transform-origin: 0% 0%;-moz-transform: rotate(-90deg) translate(-100%, 0%); -moz-transform-origin: 0% 0%;-ms-transform: rotate(-90deg) translate(-100%, 0%); -ms-transform-origin: 0% 0%;}.altova-rotate-right-textbox{-webkit-transform: rotate(90deg) translate(0%, -100%); -webkit-transform-origin: 0% 0%;-moz-transform: rotate(90deg) translate(0%, -100%); -moz-transform-origin: 0% 0%;-ms-transform: rotate(90deg) translate(0%, -100%); -ms-transform-origin: 0% 0%;}</style> + <xsl:comment><![endif]</xsl:comment> + <style type="text/css">@page { margin-left:0.60in; margin-right:0.60in; margin-top:0.79in; margin-bottom:0.79in } @media print { br.altova-page-break { page-break-before: always; } }</style> + </head> + <body style="font-family:Courier; font-size:small; "> + <xsl:for-each select="$XML"> + <xsl:for-each select="rsm:CrossIndustryDocument"> + <span> + <xsl:text>Stylesheet Lesbarmachung der XML-Daten von ZUGFeRD-Rechnungen</xsl:text> + </span> + <br/> + <span> + <xsl:text>ZUGFeRD-Version   : 1.0 vom 25.06.2014 </xsl:text> + </span> + <br/> + <span> + <xsl:text>Stylesheet-Version: 1.0 vom 25.06.2014</xsl:text> + </span> + <br/> + <span> + <xsl:text>Codelisten-Version: 1.0 vom 25.06.2014</xsl:text> + </span> + <br/> + <span> + <xsl:text>(c) AWV e.V. 2014</xsl:text> + </span> + <xsl:variable name="altova:table"> + <table style="border-collapse:collapse; " border="1" width="100%"> + <xsl:variable name="altova:CurrContextGrid_0" select="."/> + <xsl:variable name="altova:ColumnData"/> + <tbody> + <tr> + <td> + <br/> + <h2> + <xsl:for-each select="rsm:HeaderExchangedDocument"> + <xsl:for-each select="ram:Name"> + <span style="font-weight:bold; "> + <xsl:apply-templates/> + </span> + </xsl:for-each> + <span style="empty-cells:hide; font-weight:bold; "> + <xsl:text>(</xsl:text> + </span> + <xsl:for-each select="ram:TypeCode"> + <xsl:apply-templates/> + </xsl:for-each> + <span style="empty-cells:hide; font-weight:bold; "> + <xsl:text>) Nr. </xsl:text> + </span> + <xsl:for-each select="ram:ID"> + <span style="font-weight:bold; "> + <xsl:apply-templates/> + </span> + </xsl:for-each> + <span style="empty-cells:hide; font-weight:bold; "> + <xsl:text> vom </xsl:text> + </span> + <xsl:for-each select="ram:IssueDateTime"> + <xsl:for-each select="udt:DateTimeString"> + <xsl:call-template name="ram:Datum"/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </h2> + <xsl:for-each select="rsm:SpecifiedExchangedDocumentContext"> + <br/> + <xsl:for-each select="ram:TestIndicator"> + <xsl:for-each select="udt:Indicator"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Testkennzeichen      : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="ram:BusinessProcessSpecifiedDocumentContextParameter"> + <xsl:for-each select="ram:ID"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Geschäftsprozess     : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="rsm:SpecifiedExchangedDocumentContext"> + <xsl:for-each select="ram:GuidelineSpecifiedDocumentContextParameter"> + <xsl:for-each select="ram:ID"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Anwendungsempfehlung : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="rsm:HeaderExchangedDocument"> + <xsl:for-each select="ram:CopyIndicator"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Kopie                : </xsl:text> + </span> + <xsl:for-each select="udt:Indicator"> + <xsl:apply-templates/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="rsm:HeaderExchangedDocument"> + <xsl:for-each select="ram:LanguageID"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Sprache              : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeSettlement"> + <xsl:for-each select="ram:InvoiceCurrencyCode"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Währung              : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <br/> + </td> + </tr> + <tr> + <td> + <xsl:for-each select="rsm:HeaderExchangedDocument"> + <xsl:for-each select="ram:EffectiveSpecifiedPeriod"> + <xsl:for-each select="ram:CompleteDateTime"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Vertragliches Fälligkeitsdatum: </xsl:text> + </span> + <xsl:for-each select="udt:DateTimeString"> + <xsl:call-template name="ram:Datum"/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeDelivery"> + <xsl:for-each select="ram:ActualDeliverySupplyChainEvent"> + <xsl:for-each select="ram:OccurrenceDateTime"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Liefer- und Leistungsdatum    : </xsl:text> + </span> + <xsl:for-each select="udt:DateTimeString"> + <xsl:call-template name="ram:Datum"/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeSettlement"> + <xsl:for-each select="ram:BillingSpecifiedPeriod"> + <xsl:for-each select="ram:StartDateTime"> + <br/> + <span> + <xsl:text>Abrechnungszeitraum           : </xsl:text> + </span> + <xsl:for-each select="udt:DateTimeString"> + <xsl:call-template name="ram:Datum"/> + </xsl:for-each> + </xsl:for-each> + <span> + <xsl:text> bis </xsl:text> + </span> + <xsl:for-each select="ram:EndDateTime"> + <xsl:for-each select="udt:DateTimeString"> + <xsl:call-template name="ram:Datum"/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <br/> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeAgreement"> + <xsl:for-each select="ram:BuyerReference"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Referenz des Käufers          : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeSettlement"> + <xsl:for-each select="ram:PaymentReference"> + <br/> + <span style="empty-cells:hide; font-weight:bold; "> + <xsl:text>Zahlungsreferenz              : </xsl:text> + </span> + <span style="font-weight:bold; "> + <xsl:apply-templates/> + </span> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeSettlement"> + <xsl:for-each select="ram:ReceivableSpecifiedTradeAccountingAccount"> + <xsl:for-each select="ram:ID"> + <br/> + <span> + <xsl:text>Buchungsreferenz              : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeAgreement"> + <xsl:for-each select="ram:ApplicableTradeDeliveryTerms"> + <xsl:for-each select="ram:DeliveryTypeCode"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Lieferbedingung (codiert)     : </xsl:text> + </span> + <xsl:call-template name="DeliveryTypeCode"/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeDelivery"> + <xsl:for-each select="ram:RelatedSupplyChainConsignment"> + <xsl:for-each select="ram:SpecifiedLogisticsTransportMovement"> + <xsl:for-each select="ram:ModeCode"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Versandart (codiert)          : </xsl:text> + </span> + <xsl:call-template name="ram:VersandMode"/> + </xsl:for-each> + <xsl:for-each select="ram:ID"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Versand-ID                    : </xsl:text> + </span> + <xsl:apply-templates/> + <xsl:for-each select="@schemeID"> + <span style="empty-cells:hide; "> + <xsl:text>, Art: </xsl:text> + </span> + <xsl:call-template name="ram:Versand_Identifer"/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <br/> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeAgreement"> + <xsl:for-each select="ram:BuyerOrderReferencedDocument"> + <xsl:for-each select="ram:ID"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Bestellung                    : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + <span style="empty-cells:hide; "> + <xsl:text> vom </xsl:text> + </span> + <xsl:for-each select="ram:IssueDateTime"> + <span> + <xsl:variable name="altova:seqContentStrings_1"> + <xsl:value-of select="format-number(number(substring(string(string(.)), 9, 2)), '00', 'format1')"/> + <xsl:variable name="sText" as="xs:string?"> + <xsl:text>. </xsl:text> + </xsl:variable> + <xsl:value-of select="$sText"/> + <xsl:value-of select="format-number(number(substring(string(string(.)), 6, 2)), '00', 'format1')"/> + <xsl:variable name="sText" as="xs:string?"> + <xsl:text>. </xsl:text> + </xsl:variable> + <xsl:value-of select="$sText"/> + <xsl:value-of select="format-number(number(substring(string(string(string(.))), 1, 4)), '0000', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_1" select="string($altova:seqContentStrings_1)"/> + <xsl:value-of select="$altova:sContent_1"/> + </span> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeDelivery"> + <xsl:for-each select="ram:DespatchAdviceReferencedDocument"> + <xsl:for-each select="ram:ID"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Lieferavis                    : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + <span style="empty-cells:hide; "> + <xsl:text> vom </xsl:text> + </span> + <xsl:for-each select="ram:IssueDateTime"> + <span> + <xsl:variable name="altova:seqContentStrings_2"> + <xsl:value-of select="format-number(number(substring(string(string(.)), 9, 2)), '00', 'format1')"/> + <xsl:variable name="sText" as="xs:string?"> + <xsl:text>. </xsl:text> + </xsl:variable> + <xsl:value-of select="$sText"/> + <xsl:value-of select="format-number(number(substring(string(string(.)), 6, 2)), '00', 'format1')"/> + <xsl:variable name="sText" as="xs:string?"> + <xsl:text>. </xsl:text> + </xsl:variable> + <xsl:value-of select="$sText"/> + <xsl:value-of select="format-number(number(substring(string(string(string(.))), 1, 4)), '0000', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_2" select="string($altova:seqContentStrings_2)"/> + <xsl:value-of select="$altova:sContent_2"/> + </span> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeDelivery"> + <xsl:for-each select="ram:DeliveryNoteReferencedDocument"> + <xsl:for-each select="ram:ID"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Lieferschein                  : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + <span style="empty-cells:hide; "> + <xsl:text> vom </xsl:text> + </span> + <xsl:for-each select="ram:IssueDateTime"> + <span> + <xsl:variable name="altova:seqContentStrings_3"> + <xsl:value-of select="format-number(number(substring(string(string(.)), 9, 2)), '00', 'format1')"/> + <xsl:variable name="sText" as="xs:string?"> + <xsl:text>. </xsl:text> + </xsl:variable> + <xsl:value-of select="$sText"/> + <xsl:value-of select="format-number(number(substring(string(string(.)), 6, 2)), '00', 'format1')"/> + <xsl:variable name="sText" as="xs:string?"> + <xsl:text>. </xsl:text> + </xsl:variable> + <xsl:value-of select="$sText"/> + <xsl:value-of select="format-number(number(substring(string(string(string(.))), 1, 4)), '0000', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_3" select="string($altova:seqContentStrings_3)"/> + <xsl:value-of select="$altova:sContent_3"/> + </span> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeAgreement"> + <xsl:for-each select="ram:ContractReferencedDocument"> + <xsl:for-each select="ram:ID"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Vertrag                       : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + <span style="empty-cells:hide; "> + <xsl:text> vom </xsl:text> + </span> + <xsl:for-each select="ram:IssueDateTime"> + <span> + <xsl:variable name="altova:seqContentStrings_4"> + <xsl:value-of select="format-number(number(substring(string(string(.)), 9, 2)), '00', 'format1')"/> + <xsl:variable name="sText" as="xs:string?"> + <xsl:text>. </xsl:text> + </xsl:variable> + <xsl:value-of select="$sText"/> + <xsl:value-of select="format-number(number(substring(string(string(.)), 6, 2)), '00', 'format1')"/> + <xsl:variable name="sText" as="xs:string?"> + <xsl:text>. </xsl:text> + </xsl:variable> + <xsl:value-of select="$sText"/> + <xsl:value-of select="format-number(number(substring(string(string(string(.))), 1, 4)), '0000', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_4" select="string($altova:seqContentStrings_4)"/> + <xsl:value-of select="$altova:sContent_4"/> + </span> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeAgreement"> + <xsl:for-each select="ram:CustomerOrderReferencedDocument"> + <xsl:for-each select="ram:ID"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Kundenbestellung              : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + <span style="empty-cells:hide; "> + <xsl:text> vom </xsl:text> + </span> + <xsl:for-each select="ram:IssueDateTime"> + <span> + <xsl:variable name="altova:seqContentStrings_5"> + <xsl:value-of select="format-number(number(substring(string(string(.)), 9, 2)), '00', 'format1')"/> + <xsl:variable name="sText" as="xs:string?"> + <xsl:text>. </xsl:text> + </xsl:variable> + <xsl:value-of select="$sText"/> + <xsl:value-of select="format-number(number(substring(string(string(.)), 6, 2)), '00', 'format1')"/> + <xsl:variable name="sText" as="xs:string?"> + <xsl:text>. </xsl:text> + </xsl:variable> + <xsl:value-of select="$sText"/> + <xsl:value-of select="format-number(number(substring(string(string(string(.))), 1, 4)), '0000', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_5" select="string($altova:seqContentStrings_5)"/> + <xsl:value-of select="$altova:sContent_5"/> + </span> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeAgreement"> + <xsl:for-each select="ram:AdditionalReferencedDocument"> + <xsl:for-each select="ram:ID"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Weitere Referenz              : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + <span style="empty-cells:hide; "> + <xsl:text> vom </xsl:text> + </span> + <xsl:for-each select="ram:IssueDateTime"> + <span> + <xsl:variable name="altova:seqContentStrings_6"> + <xsl:value-of select="format-number(number(substring(string(string(.)), 9, 2)), '00', 'format1')"/> + <xsl:variable name="sText" as="xs:string?"> + <xsl:text>. </xsl:text> + </xsl:variable> + <xsl:value-of select="$sText"/> + <xsl:value-of select="format-number(number(substring(string(string(.)), 6, 2)), '00', 'format1')"/> + <xsl:variable name="sText" as="xs:string?"> + <xsl:text>. </xsl:text> + </xsl:variable> + <xsl:value-of select="$sText"/> + <xsl:value-of select="format-number(number(substring(string(string(string(.))), 1, 4)), '0000', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_6" select="string($altova:seqContentStrings_6)"/> + <xsl:value-of select="$altova:sContent_6"/> + </span> + </xsl:for-each> + <xsl:for-each select="ram:TypeCode"> + <span style="empty-cells:hide; "> + <xsl:text>, Art der Referenz: </xsl:text> + </span> + <xsl:call-template name="ram:Referenz"/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <br/> + <span style="empty-cells:hide; "> + <xsl:text> </xsl:text> + </span> + </td> + </tr> + <tr> + <td> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeAgreement"> + <xsl:for-each select="ram:SellerTradeParty"> + <br/> + <span style="empty-cells:hide; font-weight:bold; text-decoration:underline; "> + <xsl:text>Verkäufer:</xsl:text> + </span> + <br/> + <xsl:call-template name="ram:Party"/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeAgreement"> + <xsl:for-each select="ram:BuyerTradeParty"> + <br/> + <span style="empty-cells:hide; font-weight:bold; text-decoration:underline; "> + <xsl:text>Käufer:</xsl:text> + </span> + <br/> + <xsl:call-template name="ram:Party"/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeAgreement"> + <xsl:for-each select="ram:ProductEndUserTradeParty"> + <br/> + <span style="empty-cells:hide; font-weight:bold; text-decoration:underline; "> + <xsl:text>Endverbraucher:</xsl:text> + </span> + <br/> + <xsl:call-template name="ram:Party"/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeDelivery"> + <xsl:for-each select="ram:ShipToTradeParty"> + <br/> + <span style="empty-cells:hide; font-weight:bold; text-decoration:underline; "> + <xsl:text>Abweichender Warenempfänger:</xsl:text> + </span> + <br/> + <xsl:call-template name="ram:Party"/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeDelivery"> + <xsl:for-each select="ram:UltimateShipToTradeParty"> + <br/> + <span style="empty-cells:hide; font-weight:bold; text-decoration:underline; "> + <xsl:text>Abweichender Endempfänger:</xsl:text> + </span> + <br/> + <xsl:call-template name="ram:Party"/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeDelivery"> + <xsl:for-each select="ram:ShipFromTradeParty"> + <br/> + <span style="empty-cells:hide; font-weight:bold; text-decoration:underline; "> + <xsl:text>Abweichender Versender:</xsl:text> + </span> + <br/> + <xsl:call-template name="ram:Party"/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeSettlement"> + <xsl:for-each select="ram:InvoiceeTradeParty"> + <br/> + <span style="empty-cells:hide; font-weight:bold; text-decoration:underline; "> + <xsl:text>Abweichender Rechnungsempfänger:</xsl:text> + </span> + <br/> + <xsl:call-template name="ram:Party"/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeSettlement"> + <xsl:for-each select="ram:PayeeTradeParty"> + <br/> + <span style="empty-cells:hide; font-weight:bold; text-decoration:underline; "> + <xsl:text>Abweichender Zahlungsempfänger:</xsl:text> + </span> + <br/> + <xsl:call-template name="ram:Party"/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </td> + </tr> + <tr> + <td> + <xsl:for-each select="rsm:HeaderExchangedDocument"> + <br/> + <xsl:for-each select="ram:IncludedNote"> + <xsl:for-each select="ram:SubjectCode"> + <span style="color:gray; empty-cells:hide; "> + <xsl:text>Qualifizierung der Textart: </xsl:text> + </span> + <span style="font-weight:bold; "> + <xsl:apply-templates/> + </span> + </xsl:for-each> + <xsl:for-each select="ram:ContentCode"> + <span style="color:gray; empty-cells:hide; "> + <xsl:text>, Qualifizierung des Textes: </xsl:text> + </span> + <span style="font-weight:bold; "> + <xsl:apply-templates/> + </span> + </xsl:for-each> + <xsl:for-each select="ram:Content"> + <br/> + <span style="font-weight:bold; white-space:pre-wrap; "> + <xsl:apply-templates/> + </span> + <br/> + <br/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </td> + </tr> + <tr> + <td style="border-bottom-style:none; "> + <xsl:variable name="altova:table"> + <table style="border:0px; border-collapse:collapse; border-spacing:0px; padding:0px; width:100%; " border="1"> + <xsl:variable name="altova:CurrContextGrid_7" select="."/> + <xsl:variable name="altova:ColumnData"/> + <tbody> + <tr style="text-align:center; vertical-align:middle; "> + <td style="border-bottom-style:solid; border-collapse:collapse; border-left-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:center; width:30px; "> + <span style="font-weight:bold; "> + <xsl:text>Pos</xsl:text> + </span> + </td> + <td style="border-bottom-style:solid; border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:left; width:110px; "> + <span style="font-weight:bold; "> + <xsl:text>Art-Nr-Kunde</xsl:text> + </span> + <br/> + <span style="font-weight:bold; "> + <xsl:text>Art-Nr-Lief.</xsl:text> + </span> + <br/> + <span style="font-weight:bold; "> + <xsl:text>Art-Nr</xsl:text> + </span> + <br/> + <span style="font-weight:bold; "> + <xsl:text>(Art)</xsl:text> + </span> + </td> + <td style="border-bottom-style:solid; border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; "> + <span style="font-weight:bold; "> + <xsl:text>Beschreibung</xsl:text> + </span> + </td> + <td style="border-bottom-style:solid; border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; width:110px; "> + <span style="font-weight:bold; "> + <xsl:text>E-Preis</xsl:text> + </span> + </td> + <td style="border-bottom-style:solid; border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; width:120px; "> + <span style="font-weight:bold; "> + <xsl:text>Menge</xsl:text> + </span> + </td> + <td style="border-bottom-style:solid; border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; width:110px; "> + <span style="font-weight:bold; "> + <xsl:text>Steuer</xsl:text> + </span> + </td> + <td style="border-bottom-style:solid; border-collapse:collapse; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; width:110px; "> + <span style="font-weight:bold; "> + <xsl:text>Entgelt</xsl:text> + </span> + </td> + </tr> + </tbody> + </table> + </xsl:variable> + <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> + <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> + <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> + <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> + </xsl:apply-templates> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:IncludedSupplyChainTradeLineItem"> + <xsl:if test="fn:not( fn:empty(ram:SpecifiedTradeProduct))"> + <xsl:variable name="altova:table"> + <table style="border:0px; border-collapse:collapse; border-spacing:0px; padding:0px; width:100%; " border="1"> + <xsl:variable name="altova:CurrContextGrid_8" select="."/> + <xsl:variable name="altova:ColumnData"/> + <tbody> + <tr style="vertical-align:top; "> + <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:center; width:30px; "> + <xsl:for-each select="ram:AssociatedDocumentLineDocument"> + <xsl:if test="fn:empty(ram:IncludedNote)"> + <xsl:for-each select="ram:LineID"> + <xsl:apply-templates/> + </xsl:for-each> + </xsl:if> + </xsl:for-each> + </td> + <td style="border-bottom-style:none; border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; width:110px; "> + <xsl:for-each select="ram:SpecifiedTradeProduct"> + <xsl:for-each select="ram:BuyerAssignedID"> + <xsl:apply-templates/> + </xsl:for-each> + <br/> + <xsl:for-each select="ram:SellerAssignedID"> + <xsl:apply-templates/> + </xsl:for-each> + <br/> + <xsl:for-each select="ram:GlobalID"> + <xsl:apply-templates/> + <br/> + <xsl:for-each select="@schemeID"> + <xsl:call-template name="ram:Global_Identifier"/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </td> + <td style="border-bottom-style:none; border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; "> + <xsl:for-each select="ram:SpecifiedTradeProduct"> + <xsl:for-each select="ram:Name"> + <span style="white-space:pre-wrap; "> + <xsl:apply-templates/> + </span> + <br/> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="ram:SpecifiedSupplyChainTradeAgreement"> + <xsl:if test="fn:exists(ram:GrossPriceProductTradePrice)"> + <xsl:for-each select="ram:GrossPriceProductTradePrice"> + <xsl:for-each select="ram:BasisQuantity"> + <span> + <xsl:text>Preisbasismenge: </xsl:text> + </span> + <xsl:call-template name="ram:Menge"/> + </xsl:for-each> + </xsl:for-each> + </xsl:if> + <xsl:if test="fn:not(fn:exists(ram:GrossPriceProductTradePrice))"> + <xsl:for-each select="ram:NetPriceProductTradePrice"> + <xsl:for-each select="ram:BasisQuantity"> + <br/> + <span> + <xsl:text>Preisbasismenge: </xsl:text> + </span> + <xsl:call-template name="ram:Menge"/> + </xsl:for-each> + </xsl:for-each> + </xsl:if> + </xsl:for-each> + </td> + <td style="border-bottom-style:solid; border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; width:110px; "> + <xsl:for-each select="ram:SpecifiedSupplyChainTradeAgreement"> + <xsl:if test="fn:exists(ram:GrossPriceProductTradePrice)"> + <xsl:for-each select="ram:GrossPriceProductTradePrice"> + <xsl:for-each select="ram:ChargeAmount"> + <span> + <xsl:variable name="altova:seqContentStrings_9"> + <xsl:value-of select="format-number(number(string(.)), '##0,0000', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_9" select="string($altova:seqContentStrings_9)"/> + <xsl:value-of select="$altova:sContent_9"/> + </span> + </xsl:for-each> + </xsl:for-each> + </xsl:if> + <xsl:if test="not(fn:exists(ram:GrossPriceProductTradePrice))"> + <xsl:for-each select="ram:NetPriceProductTradePrice"> + <xsl:for-each select="ram:ChargeAmount"> + <span> + <xsl:variable name="altova:seqContentStrings_10"> + <xsl:value-of select="format-number(number(string(.)), '###.##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_10" select="string($altova:seqContentStrings_10)"/> + <xsl:value-of select="$altova:sContent_10"/> + </span> + </xsl:for-each> + </xsl:for-each> + </xsl:if> + </xsl:for-each> + </td> + <td style="border-bottom-style:solid; border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; width:120px; "> + <xsl:for-each select="ram:SpecifiedSupplyChainTradeDelivery"> + <xsl:for-each select="ram:BilledQuantity"> + <xsl:call-template name="ram:Menge"/> + </xsl:for-each> + <xsl:for-each select="ram:ChargeFreeQuantity"> + <br/> + <span> + <xsl:text>kostenfrei:</xsl:text> + </span> + <br/> + <xsl:call-template name="ram:Menge"/> + </xsl:for-each> + </xsl:for-each> + </td> + <td style="border-bottom-style:solid; border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; width:110px; "> + <xsl:for-each select="ram:SpecifiedSupplyChainTradeSettlement"> + <xsl:for-each select="ram:ApplicableTradeTax"> + <xsl:call-template name="ram:TradeTax"/> + </xsl:for-each> + </xsl:for-each> + </td> + <td style="border-bottom-style:solid; border-collapse:collapse; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; width:110px; "> + <xsl:for-each select="ram:SpecifiedSupplyChainTradeSettlement"> + <xsl:for-each select="ram:SpecifiedTradeSettlementMonetarySummation"> + <xsl:for-each select="ram:LineTotalAmount"> + <span> + <xsl:variable name="altova:seqContentStrings_11"> + <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_11" select="string($altova:seqContentStrings_11)"/> + <xsl:value-of select="$altova:sContent_11"/> + </span> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </td> + </tr> + </tbody> + </table> + </xsl:variable> + <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> + <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> + <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> + <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> + </xsl:apply-templates> + </xsl:if> + <xsl:for-each select="ram:AssociatedDocumentLineDocument"> + <xsl:if test="fn:not( fn:empty(ram:IncludedNote))"> + <xsl:variable name="altova:table"> + <table style="border:0px; border-collapse:collapse; border-spacing:0px; border-top-style:none; padding:0px; width:100%; " border="1"> + <xsl:variable name="altova:CurrContextGrid_12" select="."/> + <xsl:variable name="altova:ColumnData"/> + <tbody> + <tr style="empty-cells:hide; vertical-align:top; "> + <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:center; width:30px; "> + <xsl:for-each select="ram:LineID"> + <xsl:apply-templates/> + </xsl:for-each> + </td> + <td style="border-bottom-style:none; border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; width:110px; "/> + <td style="border-bottom-style:none; border-collapse:collapse; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; "> + <xsl:for-each select="ram:IncludedNote"> + <xsl:for-each select="ram:Content"> + <span style="white-space:pre-wrap; "> + <xsl:apply-templates/> + </span> + </xsl:for-each> + <xsl:for-each select="ram:SubjectCode"> + <br/> + <span style="color:gray; empty-cells:hide; "> + <xsl:text>Qualifizierung der Textart: </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + <xsl:for-each select="ram:ContentCode"> + <span style="color:gray; empty-cells:hide; "> + <xsl:text>, Qualifizierung des Textes: </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + <br/> + </xsl:for-each> + </td> + <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; width:110px; "/> + </tr> + </tbody> + </table> + </xsl:variable> + <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> + <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> + <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> + <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> + </xsl:apply-templates> + </xsl:if> + </xsl:for-each> + <xsl:for-each select="ram:SpecifiedSupplyChainTradeAgreement"> + <xsl:for-each select="ram:GrossPriceProductTradePrice"> + <xsl:if test="fn:not( fn:empty(ram:AppliedTradeAllowanceCharge))"> + <xsl:variable name="altova:table"> + <table style="border:0px; border-collapse:collapse; border-spacing:0px; padding:0px; width:100%; " border="1"> + <xsl:variable name="altova:CurrContextGrid_13" select="."/> + <xsl:variable name="altova:ColumnData"/> + <tbody> + <tr style="empty-cells:hide; vertical-align:top; "> + <td style="border-bottom-style:none; border-left-style:none; border-top-style:none; width:30px; "/> + <td style="border-bottom-style:none; border-top-style:none; width:110px; "/> + <td style="border-bottom-style:none; border-right-style:none; border-top-style:none; "> + <xsl:variable name="altova:table"> + <table style="border:0px; border-style:none; padding:0px; width:100%; " border="1"> + <xsl:variable name="altova:CurrContextGrid_14" select="."/> + <xsl:variable name="altova:ColumnData"/> + <thead> + <tr> + <th style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; font-weight:normal; text-align:left; width:70px; "> + <span style="font-style:italic; "> + <xsl:text>Art</xsl:text> + </span> + </th> + <th style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; font-weight:normal; text-align:left; "> + <span style="font-style:italic; "> + <xsl:text>Grund</xsl:text> + </span> + </th> + <th style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; font-weight:normal; text-align:right; width:70px; "> + <span style="font-style:italic; "> + <xsl:text>%</xsl:text> + </span> + </th> + <th style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; font-weight:normal; text-align:right; width:110px; "> + <span style="font-style:italic; "> + <xsl:text>Basisbetrag</xsl:text> + </span> + </th> + <th style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; font-weight:normal; text-align:right; width:120px; "> + <span style="font-style:italic; "> + <xsl:text>Basismenge</xsl:text> + </span> + </th> + <th style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; font-weight:normal; text-align:right; width:110px; "> + <span style="font-style:italic; "> + <xsl:text>Betrag</xsl:text> + </span> + </th> + <th style="border-bottom-style:none; border-left-style:none; border-right-style:none; border-top-style:none; width:112px; "/> + </tr> + </thead> + <tbody> + <xsl:for-each select="ram:AppliedTradeAllowanceCharge"> + <xsl:sort select="ram:SequenceNumeric" data-type="text" order="ascending"/> + <tr> + <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; vertical-align:top; width:70px; "> + <xsl:for-each select="ram:ChargeIndicator"> + <xsl:for-each select="udt:Indicator"> + <span> + <xsl:value-of select="if (. eq fn:true())then 'Zuschlag' else 'Abschlag'"/> + </span> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="ram:SequenceNumeric"> + <span> + <xsl:text> Nr. </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + </td> + <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; vertical-align:top; "> + <xsl:for-each select="ram:Reason"> + <xsl:apply-templates/> + </xsl:for-each> + <xsl:for-each select="ram:ReasonCode"> + <span> + <xsl:text> </xsl:text> + </span> + <xsl:call-template name="AllowanceChargeReasonCode"/> + </xsl:for-each> + </td> + <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; vertical-align:top; width:70px; "> + <xsl:for-each select="ram:CalculationPercent"> + <span> + <xsl:variable name="altova:seqContentStrings_15"> + <xsl:value-of select="format-number(number(string(.)), '###.##0,####', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_15" select="string($altova:seqContentStrings_15)"/> + <xsl:value-of select="$altova:sContent_15"/> + </span> + </xsl:for-each> + </td> + <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; vertical-align:top; width:110px; "> + <xsl:for-each select="ram:BasisAmount"> + <span> + <xsl:variable name="altova:seqContentStrings_16"> + <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_16" select="string($altova:seqContentStrings_16)"/> + <xsl:value-of select="$altova:sContent_16"/> + </span> + </xsl:for-each> + </td> + <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; vertical-align:top; width:120px; "> + <xsl:for-each select="ram:BasisQuantity"> + <xsl:call-template name="ram:Menge"/> + </xsl:for-each> + </td> + <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; vertical-align:top; width:110px; "> + <xsl:for-each select="ram:ActualAmount"> + <span> + <xsl:variable name="altova:seqContentStrings_17"> + <xsl:value-of select="format-number(number(if(../ram:ChargeIndicator/udt:Indicator = fn:false()) then -1*. else .), '##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_17" select="string($altova:seqContentStrings_17)"/> + <xsl:value-of select="$altova:sContent_17"/> + </span> + </xsl:for-each> + </td> + <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; width:108px; "/> + </tr> + </xsl:for-each> + </tbody> + </table> + </xsl:variable> + <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> + <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> + <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> + <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> + </xsl:apply-templates> + </td> + </tr> + </tbody> + </table> + </xsl:variable> + <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> + <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> + <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> + <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> + </xsl:apply-templates> + </xsl:if> + <xsl:if test="fn:exists(../../ram:SpecifiedSupplyChainTradeSettlement/ram:SpecifiedTradeSettlementMonetarySummation/ram:TotalAllowanceChargeAmount)"> + <xsl:variable name="altova:table"> + <table style="border:0px; border-collapse:collapse; border-spacing:0px; padding:0px; width:100%; " border="1"> + <xsl:variable name="altova:CurrContextGrid_18" select="."/> + <xsl:variable name="altova:ColumnData"/> + <tbody> + <tr style="empty-cells:hide; vertical-align:top; "> + <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; width:30px; "/> + <td style="border-bottom-style:none; border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; width:110px; "/> + <td style="border-bottom-style:none; border-collapse:collapse; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; "> + <br/> + </td> + <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; width:110px; "> + <span> + <xsl:text>Summe:</xsl:text> + </span> + </td> + <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-right-style:none; border-spacing:0px; border-top-style:double; empty-cells:hide; text-align:right; width:110px; "> + <xsl:for-each select="$XML"> + <xsl:for-each select="rsm:CrossIndustryDocument"> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:IncludedSupplyChainTradeLineItem"> + <xsl:for-each select="ram:SpecifiedSupplyChainTradeSettlement"> + <xsl:for-each select="ram:SpecifiedTradeSettlementMonetarySummation"> + <xsl:for-each select="ram:TotalAllowanceChargeAmount"> + <span> + <xsl:variable name="altova:seqContentStrings_19"> + <xsl:value-of select="format-number(number(-1*.), '##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_19" select="string($altova:seqContentStrings_19)"/> + <xsl:value-of select="$altova:sContent_19"/> + </span> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </td> + <td style="border-bottom-style:none; border-collapse:collapse; border-left-style:none; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; text-align:right; width:110px; "/> + </tr> + </tbody> + </table> + </xsl:variable> + <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> + <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> + <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> + <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> + </xsl:apply-templates> + </xsl:if> + </xsl:for-each> + </xsl:for-each> + <xsl:variable name="altova:table"> + <table style="border:0px; border-collapse:collapse; border-spacing:0px; border-top-style:none; padding:0px; width:100%; " border="1"> + <xsl:variable name="altova:CurrContextGrid_20" select="."/> + <xsl:variable name="altova:ColumnData"/> + <tbody> + <tr style="empty-cells:hide; vertical-align:top; "> + <td style="border-collapse:collapse; border-left-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; width:30px; "/> + <td style="border-collapse:collapse; border-spacing:0px; border-top-style:none; empty-cells:hide; width:110px; "/> + <td style="border-collapse:collapse; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; "> + <xsl:for-each select="ram:SpecifiedTradeProduct"> + <xsl:for-each select="ram:Description"> + <br/> + <span style="white-space:pre-wrap; "> + <xsl:apply-templates/> + </span> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="ram:SpecifiedSupplyChainTradeDelivery"> + <xsl:for-each select="ram:ActualDeliverySupplyChainEvent"> + <xsl:for-each select="ram:OccurrenceDateTime"> + <br/> + <span> + <xsl:text>* Leistungsdatum: </xsl:text> + </span> + <xsl:for-each select="udt:DateTimeString"> + <xsl:call-template name="ram:Datum"/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="ram:SpecifiedSupplyChainTradeSettlement"> + <xsl:for-each select="ram:BillingSpecifiedPeriod"> + <br/> + <span> + <xsl:text>* Berechnungszeitraum: </xsl:text> + </span> + <xsl:for-each select="ram:StartDateTime"> + <xsl:for-each select="udt:DateTimeString"> + <xsl:call-template name="ram:Datum"/> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="ram:EndDateTime"> + <span> + <xsl:text> bis </xsl:text> + </span> + <xsl:for-each select="udt:DateTimeString"> + <xsl:call-template name="ram:Datum"/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="ram:SpecifiedTradeProduct"> + <xsl:for-each select="ram:OriginTradeCountry"> + <xsl:for-each select="ram:ID"> + <br/> + <span> + <xsl:text>* Herkunftsland: </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="ram:SpecifiedSupplyChainTradeDelivery"> + <xsl:for-each select="ram:PackageQuantity"> + <br/> + <span> + <xsl:text>* Anzahl Packstücke: </xsl:text> + </span> + <span> + <xsl:variable name="altova:seqContentStrings_21"> + <xsl:value-of select="format-number(number(string(.)), '##0', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_21" select="string($altova:seqContentStrings_21)"/> + <xsl:value-of select="$altova:sContent_21"/> + </span> + </xsl:for-each> + <xsl:call-template name="PackageQuantity"/> + </xsl:for-each> + <xsl:for-each select="ram:SpecifiedSupplyChainTradeAgreement"> + <xsl:for-each select="ram:BuyerOrderReferencedDocument"> + <br/> + <span> + <xsl:text>* Bestellung</xsl:text> + </span> + <xsl:call-template name="ram:Positionsreferenz"/> + </xsl:for-each> + <xsl:for-each select="ram:ContractReferencedDocument"> + <br/> + <span> + <xsl:text>* Vertrag</xsl:text> + </span> + <xsl:call-template name="ram:Positionsreferenz"/> + </xsl:for-each> + <xsl:for-each select="ram:AdditionalReferencedDocument"> + <br/> + <span> + <xsl:text>* Dokument (</xsl:text> + </span> + <xsl:for-each select="ram:ReferenceTypeCode"> + <xsl:call-template name="ram:Referenz"/> + </xsl:for-each> + <span> + <xsl:text>)</xsl:text> + </span> + <xsl:call-template name="ram:Positionsreferenz"/> + </xsl:for-each> + <xsl:for-each select="ram:CustomerOrderReferencedDocument"> + <br/> + <span> + <xsl:text>* Kundenbestellung</xsl:text> + </span> + <xsl:call-template name="ram:Positionsreferenz"/> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="ram:SpecifiedSupplyChainTradeDelivery"> + <xsl:for-each select="ram:DespatchAdviceReferencedDocument"> + <br/> + <span> + <xsl:text>* Lieferavis</xsl:text> + </span> + <xsl:call-template name="ram:Positionsreferenz"/> + </xsl:for-each> + <xsl:for-each select="ram:ReceivingAdviceReferencedDocument"> + <br/> + <span> + <xsl:text>* Wareneingang </xsl:text> + </span> + <xsl:call-template name="ram:Positionsreferenz"/> + </xsl:for-each> + <xsl:for-each select="ram:DeliveryNoteReferencedDocument"> + <br/> + <span> + <xsl:text>* Lieferschein</xsl:text> + </span> + <xsl:call-template name="ram:Positionsreferenz"/> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="ram:SpecifiedSupplyChainTradeSettlement"> + <xsl:for-each select="ram:SpecifiedTradeAccountingAccount"> + <xsl:for-each select="ram:ID"> + <br/> + <span> + <xsl:text>* Buchungsreferenz: </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="ram:SpecifiedTradeProduct"> + <xsl:for-each select="ram:DesignatedProductClassification"> + <br/> + <span> + <xsl:text>* Klassifikation: </xsl:text> + </span> + <xsl:for-each select="ram:ClassCode"> + <span> + <xsl:text>[</xsl:text> + </span> + <xsl:apply-templates/> + <span> + <xsl:text>] </xsl:text> + </span> + </xsl:for-each> + <xsl:for-each select="ram:ClassName"> + <xsl:apply-templates/> + </xsl:for-each> + <xsl:for-each select="ram:ClassCode"> + <xsl:call-template name="Klassifikationsart"/> + <xsl:for-each select="@listVersionID"> + <span> + <xsl:text>, Version: </xsl:text> + </span> + <span> + <xsl:value-of select="string(.)"/> + </span> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="ram:SpecifiedSupplyChainTradeDelivery"> + <xsl:for-each select="ram:ShipToTradeParty"> + <br/> + <span style="text-decoration:underline; "> + <xsl:text>Abweichender Warenempfänger:</xsl:text> + </span> + <br/> + <xsl:call-template name="ram:Party"/> + </xsl:for-each> + <xsl:for-each select="ram:UltimateShipToTradeParty"> + <br/> + <span style="text-decoration:underline; "> + <xsl:text>Abweichender Endempfänger:</xsl:text> + </span> + <br/> + <xsl:call-template name="ram:Party"/> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="ram:SpecifiedTradeProduct"> + <xsl:if test="fn:exists(ram:ApplicableProductCharacteristic)"> + <br/> + <br/> + <span style="text-decoration:underline; "> + <xsl:text>Weitere Eigenschaften:</xsl:text> + </span> + <br/> + </xsl:if> + <xsl:for-each select="ram:ApplicableProductCharacteristic"> + <xsl:for-each select="ram:Description"> + <br/> + <xsl:apply-templates/> + </xsl:for-each> + <span> + <xsl:text>: </xsl:text> + </span> + <xsl:for-each select="ram:TypeCode"> + <xsl:apply-templates/> + </xsl:for-each> + <span> + <xsl:text> = </xsl:text> + </span> + <xsl:for-each select="ram:Value"> + <xsl:apply-templates/> + </xsl:for-each> + <xsl:for-each select="ram:ValueMeasure"> + <xsl:call-template name="ram:Menge"/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:if test="fn:exists(ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct)"> + <br/> + <br/> + <span style="text-decoration:underline; "> + <xsl:text>Basisartikel:</xsl:text> + </span> + <br/> + </xsl:if> + <xsl:for-each select="ram:SpecifiedTradeProduct"> + <xsl:if test="fn:exists(ram:IncludedReferencedProduct)"> + <xsl:variable name="altova:table"> + <table style="border:0px; width:100%; " border="1"> + <xsl:variable name="altova:CurrContextGrid_22" select="."/> + <xsl:variable name="altova:ColumnData"/> + <thead> + <tr> + <th style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; text-align:left; width:110px; "> + <span style="font-weight:bold; "> + <xsl:text>Art-Nr-Kunde</xsl:text> + </span> + <br/> + </th> + <th style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; width:110px; "> + <span style="font-weight:bold; "> + <xsl:text>Art-Nr-Lief.</xsl:text> + </span> + </th> + <th style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; width:110px; "> + <span> + <xsl:text>Art-Nr. (Art)</xsl:text> + </span> + </th> + <th style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; "> + <span> + <xsl:text>Beschreibung</xsl:text> + </span> + </th> + <th style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; text-align:right; width:120px; "> + <span> + <xsl:text>Menge</xsl:text> + </span> + </th> + </tr> + </thead> + <tbody> + <xsl:for-each select="ram:IncludedReferencedProduct"> + <tr> + <td style="border-bottom-style:none; border-left-style:none; border-right-style:none; border-top-style:none; text-align:left; vertical-align:top; width:110px; "> + <xsl:for-each select="ram:BuyerAssignedID"> + <xsl:apply-templates/> + </xsl:for-each> + </td> + <td style="border-bottom-style:none; border-left-style:none; border-right-style:none; border-top-style:none; vertical-align:top; width:110px; "> + <xsl:for-each select="ram:SellerAssignedID"> + <xsl:apply-templates/> + </xsl:for-each> + </td> + <td style="border-bottom-style:none; border-left-style:none; border-right-style:none; border-top-style:none; vertical-align:top; width:110px; "> + <xsl:for-each select="ram:GlobalID"> + <xsl:apply-templates/> + </xsl:for-each> + <xsl:for-each select="ram:GlobalID"> + <xsl:for-each select="@schemeID"> + <xsl:call-template name="ram:Global_Identifier"/> + </xsl:for-each> + </xsl:for-each> + </td> + <td style="border-bottom-style:none; border-left-style:none; border-right-style:none; border-top-style:none; vertical-align:top; "> + <xsl:for-each select="ram:Name"> + <xsl:apply-templates/> + </xsl:for-each> + <br/> + <xsl:for-each select="ram:Description"> + <xsl:apply-templates/> + </xsl:for-each> + </td> + <td style="border-bottom-style:none; border-left-style:none; border-right-style:none; border-top-style:none; text-align:right; vertical-align:top; width:120px; "> + <xsl:for-each select="ram:UnitQuantity"> + <xsl:call-template name="ram:Menge"/> + </xsl:for-each> + </td> + </tr> + </xsl:for-each> + </tbody> + </table> + </xsl:variable> + <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> + <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> + <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> + <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> + </xsl:apply-templates> + </xsl:if> + </xsl:for-each> + </td> + <td style="border-collapse:collapse; border-left-style:none; border-right-style:none; border-spacing:0px; border-top-style:none; empty-cells:hide; width:110px; "/> + </tr> + </tbody> + </table> + </xsl:variable> + <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> + <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> + <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> + <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> + </xsl:apply-templates> + </xsl:for-each> + </xsl:for-each> + <br/> + </td> + </tr> + <tr> + <td style="border-bottom-style:none; border-top-style:none; "> + <xsl:if test="fn:exists(rsm:SpecifiedSupplyChainTradeTransaction/ram:ApplicableSupplyChainTradeSettlement/ram:SpecifiedTradePaymentTerms)"> + <br/> + <span style="empty-cells:hide; font-weight:bold; text-decoration:underline; "> + <xsl:text>Zahlungsbedingungen:</xsl:text> + </span> + <br/> + <br/> + <xsl:variable name="altova:table"> + <table style="border:0px; border-collapse:collapse; border-right-style:none; width:100%; " border="1"> + <xsl:variable name="altova:CurrContextGrid_23" select="."/> + <xsl:variable name="altova:ColumnData"/> + <thead> + <tr> + <th style="border-left-style:none; "> + <span> + <xsl:text>Beschreibung</xsl:text> + </span> + </th> + <th style="width:110px; "> + <span> + <xsl:text>Fälligkeit</xsl:text> + </span> + </th> + <th style="border-right-style:none; width:110px; "> + <span> + <xsl:text>Teilzahlung</xsl:text> + </span> + </th> + </tr> + </thead> + <tbody> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeSettlement"> + <xsl:for-each select="ram:SpecifiedTradePaymentTerms"> + <tr> + <td style="border-bottom-style:none; border-left-style:none; "> + <xsl:for-each select="ram:Description"> + <span style="white-space:pre-wrap; "> + <xsl:apply-templates/> + </span> + </xsl:for-each> + </td> + <td style="border-bottom-style:none; text-align:center; width:110px; "> + <xsl:for-each select="ram:DueDateDateTime"> + <xsl:for-each select="udt:DateTimeString"> + <xsl:call-template name="ram:Datum"/> + </xsl:for-each> + </xsl:for-each> + </td> + <td style="border-bottom-style:none; border-right-style:none; text-align:right; width:110px; "> + <xsl:for-each select="ram:PartialPaymentAmount"> + <span> + <xsl:variable name="altova:seqContentStrings_24"> + <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_24" select="string($altova:seqContentStrings_24)"/> + <xsl:value-of select="$altova:sContent_24"/> + </span> + </xsl:for-each> + </td> + </tr> + <tr> + <td colspan="3" style="border-left-style:none; border-right-style:none; border-top-style:none; min-height:0px; "> + <xsl:if test="fn:exists(ram:ApplicableTradePaymentPenaltyTerms) or fn:exists(ram:ApplicableTradePaymentDiscountTerms)"> + <xsl:variable name="altova:table"> + <table style="border:0px; border-collapse:collapse; border-left-style:none; border-top-style:none; margin:0px; padding:0px; " border="1" width="100%"> + <xsl:variable name="altova:CurrContextGrid_25" select="."/> + <xsl:variable name="altova:ColumnData"/> + <tbody> + <tr style="border-bottom-style:none; border-top-style:none; "> + <td style="border-bottom-style:none; border-left-style:none; border-top-style:none; min-height:0px; "/> + <td style="border-bottom-style:none; min-height:0px; text-align:center; width:110px; "> + <span style="font-weight:bold; "> + <xsl:text>Bezug</xsl:text> + </span> + </td> + <td style="border-bottom-style:none; min-height:0px; text-align:center; width:110px; "> + <span style="font-weight:bold; "> + <xsl:text>Innerhalb</xsl:text> + </span> + </td> + <td style="border-bottom-style:none; min-height:0px; text-align:center; width:110px; "> + <span style="font-weight:bold; "> + <xsl:text>Basisbetrag</xsl:text> + </span> + </td> + <td style="border-bottom-style:none; min-height:0px; text-align:center; width:110px; "> + <span style="font-weight:bold; "> + <xsl:text>%</xsl:text> + </span> + </td> + <td style="border-bottom-style:none; border-right-style:none; min-height:0px; text-align:center; width:108px; "> + <span style="font-weight:bold; "> + <xsl:text>Betrag</xsl:text> + </span> + </td> + </tr> + </tbody> + </table> + </xsl:variable> + <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> + <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> + <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> + <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> + </xsl:apply-templates> + </xsl:if> + <xsl:if test="fn:exists(ram:ApplicableTradePaymentPenaltyTerms)"> + <xsl:variable name="altova:table"> + <table style="border:0px; border-bottom-style:none; border-collapse:collapse; margin:0px; padding:0px; width:100%; " border="1"> + <xsl:variable name="altova:CurrContextGrid_26" select="."/> + <xsl:variable name="altova:ColumnData"/> + <tbody> + <xsl:for-each select="ram:ApplicableTradePaymentPenaltyTerms"> + <tr> + <td style="border-bottom-style:none; border-left-style:none; min-height:0px; text-align:right; "> + <span> + <xsl:text>Zuschlag  </xsl:text> + </span> + </td> + <td style="border-bottom-style:none; min-height:0px; text-align:center; width:110px; "> + <xsl:for-each select="ram:BasisDateTime"> + <xsl:for-each select="udt:DateTimeString"> + <xsl:call-template name="ram:Datum"/> + </xsl:for-each> + </xsl:for-each> + </td> + <td style="border-bottom-style:none; min-height:0px; text-align:right; width:110px; "> + <xsl:for-each select="ram:BasisPeriodMeasure"> + <xsl:call-template name="ram:Menge"/> + </xsl:for-each> + </td> + <td style="border-bottom-style:none; min-height:0px; text-align:right; width:110px; "> + <xsl:for-each select="ram:BasisAmount"> + <span> + <xsl:variable name="altova:seqContentStrings_27"> + <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_27" select="string($altova:seqContentStrings_27)"/> + <xsl:value-of select="$altova:sContent_27"/> + </span> + </xsl:for-each> + </td> + <td style="border-bottom-style:none; min-height:0px; text-align:right; width:110px; "> + <xsl:for-each select="ram:CalculationPercent"> + <span> + <xsl:variable name="altova:seqContentStrings_28"> + <xsl:value-of select="format-number(number(string(.)), '###.##0,####', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_28" select="string($altova:seqContentStrings_28)"/> + <xsl:value-of select="$altova:sContent_28"/> + </span> + </xsl:for-each> + </td> + <td style="border-bottom-style:none; border-right-style:none; min-height:0px; text-align:right; width:108px; "> + <xsl:for-each select="ram:ActualPenaltyAmount"> + <span> + <xsl:variable name="altova:seqContentStrings_29"> + <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_29" select="string($altova:seqContentStrings_29)"/> + <xsl:value-of select="$altova:sContent_29"/> + </span> + </xsl:for-each> + </td> + </tr> + </xsl:for-each> + </tbody> + </table> + </xsl:variable> + <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> + <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> + <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> + <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> + </xsl:apply-templates> + </xsl:if> + <xsl:if test="fn:exists(ram:ApplicableTradePaymentDiscountTerms)"> + <xsl:variable name="altova:table"> + <table style="border:0px; border-collapse:collapse; margin:0px; padding:0px; width:100%; " border="1"> + <xsl:variable name="altova:CurrContextGrid_30" select="."/> + <xsl:variable name="altova:ColumnData"/> + <tbody> + <xsl:for-each select="ram:ApplicableTradePaymentDiscountTerms"> + <tr> + <td style="border-bottom-style:none; border-left-style:none; min-height:0px; text-align:right; "> + <span> + <xsl:text>Skonto  </xsl:text> + </span> + </td> + <td style="border-bottom-style:none; min-height:0px; text-align:center; width:110px; "> + <xsl:for-each select="ram:BasisDateTime"> + <xsl:for-each select="udt:DateTimeString"> + <xsl:call-template name="ram:Datum"/> + </xsl:for-each> + </xsl:for-each> + </td> + <td style="border-bottom-style:none; min-height:0px; text-align:right; width:110px; "> + <xsl:for-each select="ram:BasisPeriodMeasure"> + <xsl:call-template name="ram:Menge"/> + </xsl:for-each> + </td> + <td style="border-bottom-style:none; min-height:0px; text-align:right; width:110px; "> + <xsl:for-each select="ram:BasisAmount"> + <span> + <xsl:variable name="altova:seqContentStrings_31"> + <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_31" select="string($altova:seqContentStrings_31)"/> + <xsl:value-of select="$altova:sContent_31"/> + </span> + </xsl:for-each> + </td> + <td style="border-bottom-style:none; min-height:0px; text-align:right; width:110px; "> + <xsl:for-each select="ram:CalculationPercent"> + <span> + <xsl:variable name="altova:seqContentStrings_32"> + <xsl:value-of select="format-number(number(string(.)), '###.##0,####', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_32" select="string($altova:seqContentStrings_32)"/> + <xsl:value-of select="$altova:sContent_32"/> + </span> + </xsl:for-each> + </td> + <td style="border-bottom-style:none; border-right-style:none; min-height:0px; text-align:right; width:108px; "> + <xsl:for-each select="ram:ActualDiscountAmount"> + <span> + <xsl:variable name="altova:seqContentStrings_33"> + <xsl:value-of select="format-number(number(-1 * .), '##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_33" select="string($altova:seqContentStrings_33)"/> + <xsl:value-of select="$altova:sContent_33"/> + </span> + </xsl:for-each> + </td> + </tr> + </xsl:for-each> + </tbody> + </table> + </xsl:variable> + <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> + <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> + <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> + <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> + </xsl:apply-templates> + </xsl:if> + </td> + </tr> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </tbody> + </table> + </xsl:variable> + <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> + <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> + <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> + <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> + </xsl:apply-templates> + </xsl:if> + <xsl:if test="fn:exists(rsm:SpecifiedSupplyChainTradeTransaction/ram:ApplicableSupplyChainTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans)"> + <br/> + <span style="font-weight:bold; text-decoration:underline; "> + <xsl:text>Zahlungsart:</xsl:text> + </span> + <br/> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeSettlement"> + <xsl:for-each select="ram:SpecifiedTradeSettlementPaymentMeans"> + <xsl:for-each select="ram:Information"> + <br/> + <xsl:apply-templates/> + </xsl:for-each> + <xsl:for-each select="ram:TypeCode"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Zahlungstyp (codiert): </xsl:text> + </span> + <xsl:call-template name="ram:PaymentType"/> + </xsl:for-each> + <xsl:for-each select="ram:ID"> + <xsl:for-each select="@schemeAgencyID"> + <br/> + <span> + <xsl:text>Gläubiger-ID         : </xsl:text> + </span> + <span> + <xsl:value-of select="string(.)"/> + </span> + </xsl:for-each> + <br/> + <span> + <xsl:text>Mandatsreferenz      : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + <xsl:for-each select="ram:PayerPartyDebtorFinancialAccount"> + <xsl:for-each select="ram:IBANID"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Käufer-IBAN          : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + <xsl:for-each select="ram:ProprietaryID"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Käufer-Kontonummer   : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="ram:PayerSpecifiedDebtorFinancialInstitution"> + <xsl:for-each select="ram:BICID"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Käufer-BIC           : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + <xsl:for-each select="ram:GermanBankleitzahlID"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Käufer-Bankleitzahl  : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + <xsl:for-each select="ram:Name"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Käufer-Kreditinstitut: </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + </xsl:for-each> + <br/> + <xsl:for-each select="ram:PayeePartyCreditorFinancialAccount"> + <xsl:for-each select="ram:AccountName"> + <br/> + <span> + <xsl:text>Verkäufer-Kontoname  : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + <xsl:for-each select="ram:IBANID"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Verkäufer-IBAN       : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + <xsl:for-each select="ram:ProprietaryID"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Verkäufer-Kontonummer: </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="ram:PayeeSpecifiedCreditorFinancialInstitution"> + <xsl:for-each select="ram:BICID"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Verkäufer-BIC        : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + <xsl:for-each select="ram:GermanBankleitzahlID"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Verkäufer-BLZ        : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + <xsl:for-each select="ram:Name"> + <br/> + <span style="empty-cells:hide; "> + <xsl:text>Verkäufer-Kreditinst.: </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </xsl:if> + </td> + </tr> + <tr> + <td style="border-bottom-style:none; border-right-style:none; border-top-style:none; "> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeSettlement"> + <br/> + <xsl:if test="fn:exists(ram:SpecifiedTradeAllowanceCharge) or fn:exists(ram:SpecifiedLogisticsServiceCharge)"> + <span style="font-weight:bold; text-decoration:underline; "> + <xsl:text>Zu- und Abschläge:</xsl:text> + </span> + <br/> + <br/> + <xsl:variable name="altova:table"> + <table style="border:0px; border-collapse:collapse; empty-cells:hide; width:100%; " border="1"> + <xsl:variable name="altova:CurrContextGrid_34" select="."/> + <xsl:variable name="altova:ColumnData"/> + <thead> + <tr> + <th colspan="2" style="border-left-style:none; "> + <span> + <xsl:text>Art</xsl:text> + </span> + </th> + <th> + <span> + <xsl:text>%</xsl:text> + </span> + </th> + <th> + <span> + <xsl:text>Basisbetrag</xsl:text> + </span> + </th> + <th style="width:110px; "> + <span> + <xsl:text>Basismenge</xsl:text> + </span> + </th> + <th style="width:110px; "> + <span> + <xsl:text>Steuer</xsl:text> + </span> + </th> + <th style="border-right-style:none; width:110px; "> + <span> + <xsl:text>Betrag</xsl:text> + </span> + </th> + </tr> + </thead> + <tbody> + <xsl:for-each select="ram:SpecifiedTradeAllowanceCharge"> + <xsl:sort select="ram:SequenceNumeric" data-type="text" order="ascending"/> + <tr> + <td style="border-left-style:none; "> + <xsl:for-each select="ram:ChargeIndicator"> + <xsl:for-each select="udt:Indicator"> + <span> + <xsl:value-of select="if (. eq fn:true())then 'Zuschlag' else 'Abschlag'"/> + </span> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="ram:SequenceNumeric"> + <span> + <xsl:text> Nr. </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + </td> + <td> + <xsl:for-each select="ram:Reason"> + <xsl:apply-templates/> + </xsl:for-each> + <xsl:for-each select="ram:ReasonCode"> + <span> + <xsl:text> </xsl:text> + </span> + <xsl:call-template name="AllowanceChargeReasonCode"/> + </xsl:for-each> + </td> + <td style="text-align:right; "> + <xsl:for-each select="ram:CalculationPercent"> + <span> + <xsl:variable name="altova:seqContentStrings_35"> + <xsl:value-of select="format-number(number(string(.)), '###.##0,####', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_35" select="string($altova:seqContentStrings_35)"/> + <xsl:value-of select="$altova:sContent_35"/> + </span> + </xsl:for-each> + </td> + <td style="text-align:right; "> + <xsl:for-each select="ram:BasisAmount"> + <span> + <xsl:variable name="altova:seqContentStrings_36"> + <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_36" select="string($altova:seqContentStrings_36)"/> + <xsl:value-of select="$altova:sContent_36"/> + </span> + </xsl:for-each> + </td> + <td style="text-align:right; width:110px; "> + <xsl:for-each select="ram:BasisQuantity"> + <xsl:call-template name="ram:Menge"/> + </xsl:for-each> + </td> + <td style="text-align:right; width:110px; "> + <xsl:for-each select="ram:CategoryTradeTax"> + <xsl:call-template name="ram:TradeTax"/> + </xsl:for-each> + </td> + <td style="border-right-style:none; text-align:right; width:110px; "> + <xsl:for-each select="ram:ActualAmount"> + <span> + <xsl:variable name="altova:seqContentStrings_37"> + <xsl:value-of select="format-number(number(if (../ram:ChargeIndicator/udt:Indicator eq fn:true()) then . else -1 * .), '##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_37" select="string($altova:seqContentStrings_37)"/> + <xsl:value-of select="$altova:sContent_37"/> + </span> + </xsl:for-each> + </td> + </tr> + </xsl:for-each> + </tbody> + </table> + </xsl:variable> + <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> + <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> + <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> + <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> + </xsl:apply-templates> + <xsl:if test="fn:exists(ram:SpecifiedLogisticsServiceCharge)"> + <xsl:if test="fn:not(fn:exists(ram:SpecifiedTradeAllowanceCharge))"> + <xsl:variable name="altova:table"> + <table style="border:0px; border-top-style:none; width:100%; " border="1"> + <xsl:variable name="altova:CurrContextGrid_38" select="."/> + <xsl:variable name="altova:ColumnData"/> + <tbody> + <xsl:for-each select="ram:SpecifiedLogisticsServiceCharge"> + <tr> + <td style="border-left-style:none; border-top-style:solid; text-align:center; "> + <span style="font-weight:bold; "> + <xsl:text>Art</xsl:text> + </span> + </td> + <td style="border-top-style:solid; text-align:center; width:110px; "> + <span style="font-weight:bold; "> + <xsl:text>Steuer</xsl:text> + </span> + </td> + <td style="border-right-style:none; border-top-style:solid; text-align:center; width:110px; "> + <span style="font-weight:bold; "> + <xsl:text>Betrag</xsl:text> + </span> + </td> + </tr> + </xsl:for-each> + </tbody> + </table> + </xsl:variable> + <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> + <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> + <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> + <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> + </xsl:apply-templates> + </xsl:if> + <xsl:variable name="altova:table"> + <table style="border:0px; border-top-style:none; width:100%; " border="1"> + <xsl:variable name="altova:CurrContextGrid_39" select="."/> + <xsl:variable name="altova:ColumnData"/> + <tbody> + <xsl:for-each select="ram:SpecifiedLogisticsServiceCharge"> + <tr> + <td style="border-left-style:none; border-top-style:none; "> + <xsl:for-each select="ram:Description"> + <span style="white-space:pre-wrap; "> + <xsl:apply-templates/> + </span> + </xsl:for-each> + </td> + <td style="border-top-style:none; text-align:right; width:110px; "> + <xsl:for-each select="ram:AppliedTradeTax"> + <xsl:call-template name="ram:TradeTax"/> + </xsl:for-each> + </td> + <td style="border-right-style:none; border-top-style:none; text-align:right; width:110px; "> + <xsl:for-each select="ram:AppliedAmount"> + <span> + <xsl:variable name="altova:seqContentStrings_40"> + <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_40" select="string($altova:seqContentStrings_40)"/> + <xsl:value-of select="$altova:sContent_40"/> + </span> + </xsl:for-each> + </td> + </tr> + </xsl:for-each> + </tbody> + </table> + </xsl:variable> + <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> + <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> + <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> + <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> + </xsl:apply-templates> + </xsl:if> + </xsl:if> + <br/> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeSettlement"/> + </xsl:for-each> + </td> + </tr> + <tr> + <td style="border-bottom-style:none; border-top-style:none; "> + <xsl:if test="fn:exists(rsm:SpecifiedSupplyChainTradeTransaction/ram:ApplicableSupplyChainTradeSettlement/ram:ApplicableTradeTax)"> + <br/> + <span style="font-weight:bold; text-decoration:underline; "> + <xsl:text>Steuern:</xsl:text> + </span> + <br/> + <br/> + <xsl:variable name="altova:table"> + <table style="border:0px; border-collapse:collapse; border-right-style:none; width:100%; " border="1"> + <xsl:variable name="altova:CurrContextGrid_41" select="."/> + <xsl:variable name="altova:ColumnData"/> + <thead> + <tr> + <th style="border-left-style:none; "> + <span> + <xsl:text>Art (Kategorie)</xsl:text> + </span> + </th> + <th> + <span> + <xsl:text>Warenwert</xsl:text> + </span> + </th> + <th> + <span> + <xsl:text>Zu-/Abschlag</xsl:text> + </span> + </th> + <th style="width:110px; "> + <span> + <xsl:text>Nettobetrag</xsl:text> + </span> + </th> + <th style="width:110px; "> + <span> + <xsl:text>USt. %</xsl:text> + </span> + </th> + <th style="border-right-style:none; width:110px; "> + <span> + <xsl:text>USt.-Betrag</xsl:text> + </span> + </th> + </tr> + </thead> + <tbody> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeSettlement"> + <xsl:for-each select="ram:ApplicableTradeTax"> + <tr> + <td style="border-left-style:none; "> + <xsl:for-each select="ram:TypeCode"> + <xsl:apply-templates/> + </xsl:for-each> + <span> + <xsl:text> </xsl:text> + </span> + <xsl:for-each select="ram:CategoryCode"> + <span> + <xsl:text>(</xsl:text> + </span> + <xsl:apply-templates/> + <span> + <xsl:text>)</xsl:text> + </span> + </xsl:for-each> + <xsl:for-each select="ram:ExemptionReason"> + <br/> + <xsl:apply-templates/> + </xsl:for-each> + </td> + <td style="text-align:right; "> + <xsl:for-each select="ram:LineTotalBasisAmount"> + <span> + <xsl:variable name="altova:seqContentStrings_42"> + <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_42" select="string($altova:seqContentStrings_42)"/> + <xsl:value-of select="$altova:sContent_42"/> + </span> + </xsl:for-each> + </td> + <td style="text-align:right; "> + <xsl:for-each select="ram:AllowanceChargeBasisAmount"> + <span> + <xsl:variable name="altova:seqContentStrings_43"> + <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_43" select="string($altova:seqContentStrings_43)"/> + <xsl:value-of select="$altova:sContent_43"/> + </span> + </xsl:for-each> + </td> + <td style="text-align:right; width:110px; "> + <xsl:for-each select="ram:BasisAmount"> + <span> + <xsl:variable name="altova:seqContentStrings_44"> + <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_44" select="string($altova:seqContentStrings_44)"/> + <xsl:value-of select="$altova:sContent_44"/> + </span> + </xsl:for-each> + </td> + <td style="text-align:right; width:110px; "> + <xsl:for-each select="ram:ApplicablePercent"> + <span> + <xsl:variable name="altova:seqContentStrings_45"> + <xsl:value-of select="format-number(number(string(.)), '###.##0,####', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_45" select="string($altova:seqContentStrings_45)"/> + <xsl:value-of select="$altova:sContent_45"/> + </span> + </xsl:for-each> + </td> + <td style="border-right-style:none; text-align:right; width:110px; "> + <xsl:for-each select="ram:CalculatedAmount"> + <span> + <xsl:variable name="altova:seqContentStrings_46"> + <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_46" select="string($altova:seqContentStrings_46)"/> + <xsl:value-of select="$altova:sContent_46"/> + </span> + </xsl:for-each> + </td> + </tr> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </tbody> + </table> + </xsl:variable> + <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> + <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> + <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> + <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> + </xsl:apply-templates> + </xsl:if> + </td> + </tr> + <tr> + <td style="border-bottom-style:none; text-align:left; "> + <br/> + <span style="font-weight:bold; text-decoration:underline; "> + <xsl:text>Belegsummen:</xsl:text> + </span> + <br/> + <xsl:for-each select="rsm:SpecifiedSupplyChainTradeTransaction"> + <xsl:for-each select="ram:ApplicableSupplyChainTradeSettlement"> + <xsl:for-each select="ram:SpecifiedTradeSettlementMonetarySummation"> + <xsl:variable name="altova:table"> + <table style="border:0px; " border="1" width="100%"> + <xsl:variable name="altova:CurrContextGrid_47" select="."/> + <xsl:variable name="altova:ColumnData"/> + <tbody> + <tr> + <td style="border-style:none; "/> + <td style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; padding:1px; text-align:left; width:220px; "> + <span style="font-weight:bold; "> + <xsl:text>Positionssumme</xsl:text> + </span> + </td> + <td style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; padding:1px; text-align:right; width:110px; "> + <xsl:for-each select="ram:LineTotalAmount"> + <span style="font-weight:bold; "> + <xsl:variable name="altova:seqContentStrings_48"> + <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_48" select="string($altova:seqContentStrings_48)"/> + <xsl:value-of select="$altova:sContent_48"/> + </span> + </xsl:for-each> + </td> + </tr> + <tr> + <td style="border-style:none; "/> + <td style="border:0px; border-top-style:double; padding:1px; text-align:left; width:220px; "> + <span> + <xsl:text>Gesamtbetrag der Zuschläge</xsl:text> + </span> + </td> + <td style="border:0px; border-top-style:double; padding:1px; text-align:right; width:110px; "> + <xsl:for-each select="ram:ChargeTotalAmount"> + <span> + <xsl:variable name="altova:seqContentStrings_49"> + <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_49" select="string($altova:seqContentStrings_49)"/> + <xsl:value-of select="$altova:sContent_49"/> + </span> + </xsl:for-each> + </td> + </tr> + <tr> + <td style="border-style:none; "/> + <td style="border:0px; border-top-style:double; padding:1px; text-align:left; width:220px; "> + <span> + <xsl:text>Gesamtbetrag der Abschläge</xsl:text> + </span> + </td> + <td style="border:0px; border-top-style:double; padding:1px; text-align:right; width:110px; "> + <xsl:for-each select="ram:AllowanceTotalAmount"> + <span> + <xsl:variable name="altova:seqContentStrings_50"> + <xsl:value-of select="format-number(number(-1*.), '##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_50" select="string($altova:seqContentStrings_50)"/> + <xsl:value-of select="$altova:sContent_50"/> + </span> + </xsl:for-each> + </td> + </tr> + <tr> + <td style="border-style:none; "/> + <td style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; padding:1px; text-align:left; width:220px; "> + <span style="font-weight:bold; "> + <xsl:text>Rechnungssumme ohne USt.</xsl:text> + </span> + </td> + <td style="border-bottom-style:solid; border-left-style:none; border-right-style:none; border-top-style:none; padding:1px; text-align:right; width:110px; "> + <xsl:for-each select="ram:TaxBasisTotalAmount"> + <span style="font-weight:bold; "> + <xsl:variable name="altova:seqContentStrings_51"> + <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_51" select="string($altova:seqContentStrings_51)"/> + <xsl:value-of select="$altova:sContent_51"/> + </span> + </xsl:for-each> + </td> + </tr> + <tr> + <td style="border-style:none; "/> + <td style="border:0px; border-top-style:double; padding:1px; text-align:left; width:220px; "> + <span> + <xsl:text>Steuerbetrag</xsl:text> + </span> + </td> + <td style="border:0px; border-top-style:double; padding:1px; text-align:right; width:110px; "> + <xsl:for-each select="ram:TaxTotalAmount"> + <span> + <xsl:variable name="altova:seqContentStrings_52"> + <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_52" select="string($altova:seqContentStrings_52)"/> + <xsl:value-of select="$altova:sContent_52"/> + </span> + </xsl:for-each> + </td> + </tr> + <tr> + <td style="border-style:none; "/> + <td style="border-bottom-style:double; border-bottom-width:medium; border-left-style:none; border-right-style:none; border-top-style:none; padding:1px; text-align:left; width:220px; "> + <span style="font-weight:bold; "> + <xsl:text>Bruttosumme</xsl:text> + </span> + </td> + <td style="border-bottom-style:double; border-bottom-width:medium; border-left-style:none; border-right-style:none; border-top-style:none; padding:1px; text-align:right; width:110px; "> + <xsl:for-each select="ram:GrandTotalAmount"> + <span style="font-weight:bold; "> + <xsl:variable name="altova:seqContentStrings_53"> + <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_53" select="string($altova:seqContentStrings_53)"/> + <xsl:value-of select="$altova:sContent_53"/> + </span> + </xsl:for-each> + </td> + </tr> + <tr> + <td style="border-style:none; "/> + <td style="border:0px; border-top-style:double; padding:1px; text-align:left; width:220px; "> + <xsl:if test="(ram:TotalPrepaidAmount>=0 and fn:exists(ram:TotalPrepaidAmount)) or(fn:not(fn:exists(ram:TotalPrepaidAmount)) and fn:not(ends-with( ../../../rsm:SpecifiedExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID , 'basic' )))"> + <span> + <xsl:text>Erhaltene Anzahlungen</xsl:text> + </span> + <br/> + </xsl:if> + <xsl:if test="ram:TotalPrepaidAmount<0 and fn:exists(ram:TotalPrepaidAmount)"> + <span> + <xsl:text>Offene Zahlungen</xsl:text> + </span> + <br/> + </xsl:if> + </td> + <td style="border:0px; border-top-style:double; padding:1px; text-align:right; width:110px; "> + <xsl:if test="fn:exists(TotalPrepaidAmount) or fn:not(ends-with( ../../../rsm:SpecifiedExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID , 'basic' ))"> + <xsl:for-each select="ram:TotalPrepaidAmount"> + <span> + <xsl:variable name="altova:seqContentStrings_54"> + <xsl:value-of select="format-number(number(-1*.), '##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_54" select="string($altova:seqContentStrings_54)"/> + <xsl:value-of select="$altova:sContent_54"/> + </span> + </xsl:for-each> + </xsl:if> + </td> + </tr> + <tr> + <td style="border-style:none; "/> + <td style="border:0px; border-top-style:double; padding:1px; text-align:left; width:220px; "> + <xsl:if test="fn:exists(ram:DuePayableAmount) or fn:not(ends-with( ../../../rsm:SpecifiedExchangedDocumentContext/GuidelineSpecifiedDocumentContextParameter/ID , 'basic' ))"> + <span style="font-weight:bold; "> + <xsl:text>Zahlbetrag</xsl:text> + </span> + </xsl:if> + </td> + <td style="border:0px; border-top-style:double; padding:1px; text-align:right; width:110px; "> + <xsl:if test="fn:exists(ram:DuePayableAmount) or fn:not(ends-with( ../../../rsm:SpecifiedExchangedDocumentContext/GuidelineSpecifiedDocumentContextParameter/ID , 'basic' ))"> + <xsl:for-each select="ram:DuePayableAmount"> + <span style="font-weight:bold; "> + <xsl:variable name="altova:seqContentStrings_55"> + <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_55" select="string($altova:seqContentStrings_55)"/> + <xsl:value-of select="$altova:sContent_55"/> + </span> + </xsl:for-each> + </xsl:if> + </td> + </tr> + </tbody> + </table> + </xsl:variable> + <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> + <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> + <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> + <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> + </xsl:apply-templates> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </td> + </tr> + </tbody> + </table> + </xsl:variable> + <xsl:variable name="altova:col-count" select="sum( for $altova:cell in $altova:table/table/(thead | tbody | tfoot)[ 1 ]/tr[ 1 ]/(th | td) return altova:col-span( $altova:cell ) )"/> + <xsl:variable name="altova:generate-cols" as="xs:boolean*" select="for $altova:pos in 1 to $altova:col-count return true()"/> + <xsl:apply-templates select="$altova:table" mode="altova:generate-table"> + <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> + </xsl:apply-templates> + <br/> + </xsl:for-each> + </xsl:for-each> + <br/> + <br/> + </body> + </html> + </xsl:template> + <xsl:template name="ram:Party"> + <xsl:for-each select="ram:ID"> + <span> + <xsl:text>Nummer        : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + <xsl:for-each select="@schemeID"> + <xsl:call-template name="local_Identifier"/> + </xsl:for-each> + <xsl:for-each select="ram:GlobalID"> + <br/> + <span> + <xsl:text>Globale Nummer: </xsl:text> + </span> + <xsl:apply-templates/> + <xsl:for-each select="@schemeID"> + <span> + <xsl:text> </xsl:text> + </span> + <xsl:call-template name="ram:Global_Identifier"/> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="ram:Name"> + <br/> + <span style="font-weight:bold; white-space:pre-wrap; "> + <xsl:apply-templates/> + </span> + </xsl:for-each> + <xsl:for-each select="ram:DefinedTradeContact"> + <xsl:for-each select="ram:PersonName"> + <br/> + <xsl:apply-templates/> + </xsl:for-each> + <xsl:for-each select="ram:DepartmentName"> + <br/> + <xsl:apply-templates/> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="ram:PostalTradeAddress"> + <xsl:for-each select="ram:LineOne"> + <br/> + <xsl:apply-templates/> + </xsl:for-each> + <xsl:for-each select="ram:LineTwo"> + <br/> + <xsl:apply-templates/> + </xsl:for-each> + <xsl:for-each select="ram:CountryID"> + <br/> + <xsl:apply-templates/> + <span> + <xsl:text> </xsl:text> + </span> + </xsl:for-each> + <xsl:for-each select="ram:PostcodeCode"> + <xsl:apply-templates/> + <span> + <xsl:text> </xsl:text> + </span> + </xsl:for-each> + <xsl:for-each select="ram:CityName"> + <xsl:apply-templates/> + </xsl:for-each> + </xsl:for-each> + <br/> + <xsl:for-each select="ram:DefinedTradeContact"> + <xsl:for-each select="ram:TelephoneUniversalCommunication"> + <xsl:for-each select="ram:CompleteNumber"> + <br/> + <span> + <xsl:text>Telefon      : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="ram:FaxUniversalCommunication"> + <xsl:for-each select="ram:CompleteNumber"> + <br/> + <span> + <xsl:text>Fax          : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="ram:EmailURIUniversalCommunication"> + <xsl:for-each select="ram:URIID"> + <br/> + <span> + <xsl:text>E-Mail       : </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + <xsl:for-each select="ram:SpecifiedTaxRegistration"> + <xsl:for-each select="ram:ID"> + <br/> + <xsl:call-template name="ram:TaxRegistration"/> + </xsl:for-each> + </xsl:for-each> + <br/> + </xsl:template> + <xsl:template name="ram:TradeTax"> + <xsl:for-each select="ram:ApplicablePercent"> + <span> + <xsl:variable name="altova:seqContentStrings_56"> + <xsl:value-of select="format-number(number(string(.)), '###.##0,####', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_56" select="string($altova:seqContentStrings_56)"/> + <xsl:value-of select="$altova:sContent_56"/> + </span> + <span> + <xsl:text> %</xsl:text> + </span> + </xsl:for-each> + <xsl:for-each select="ram:TypeCode"> + <span> + <xsl:text> </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + <xsl:for-each select="ram:CategoryCode"> + <span> + <xsl:text> (</xsl:text> + </span> + <xsl:apply-templates/> + <span> + <xsl:text>)</xsl:text> + </span> + </xsl:for-each> + <xsl:for-each select="ram:CalculatedAmount"> + <span> + <xsl:text> entspricht </xsl:text> + </span> + <span> + <xsl:variable name="altova:seqContentStrings_57"> + <xsl:value-of select="format-number(number(string(.)), '##0,00', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_57" select="string($altova:seqContentStrings_57)"/> + <xsl:value-of select="$altova:sContent_57"/> + </span> + </xsl:for-each> + <xsl:for-each select="ram:ExemptionReason"> + <br/> + <xsl:apply-templates/> + </xsl:for-each> + </xsl:template> + <xsl:template name="ram:Positionsreferenz"> + <xsl:for-each select="ram:ID"> + <span> + <xsl:text> Nr. </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + <xsl:for-each select="ram:IssueDateTime"> + <span> + <xsl:text> vom </xsl:text> + </span> + <span> + <xsl:variable name="altova:seqContentStrings_58"> + <xsl:value-of select="format-number(number(substring(string(string(.)), 9, 2)), '00', 'format1')"/> + <xsl:variable name="sText" as="xs:string?"> + <xsl:text>. </xsl:text> + </xsl:variable> + <xsl:value-of select="$sText"/> + <xsl:value-of select="format-number(number(substring(string(string(.)), 6, 2)), '00', 'format1')"/> + <xsl:variable name="sText" as="xs:string?"> + <xsl:text>. </xsl:text> + </xsl:variable> + <xsl:value-of select="$sText"/> + <xsl:value-of select="format-number(number(substring(string(string(string(.))), 1, 4)), '0000', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_58" select="string($altova:seqContentStrings_58)"/> + <xsl:value-of select="$altova:sContent_58"/> + </span> + </xsl:for-each> + <xsl:for-each select="ram:LineID"> + <span> + <xsl:text> Zeile </xsl:text> + </span> + <xsl:apply-templates/> + </xsl:for-each> + </xsl:template> + <xsl:template name="ram:Datum"> + <span> + <xsl:value-of select="if ( @format = '102') then concat(substring(.,7,2),'.',substring(.,5,2),'.',substring(.,1,4)) else +if ( @format = '610') then concat(substring(.,5,2),'-',substring(.,1,4)) else +if ( @format = '616') then concat('KW ',substring(.,5,2),' ',substring(.,1,4)) else +concat('Ungültiges Datumsformat für: ', .)"/> + </span> + </xsl:template> + <xsl:template name="ram:Versand_Identifer"> + <span> + <xsl:value-of select="if(. eq 'GSIN') then . else +if(. eq 'GINC') then . else +if(. eq 'SSCC') then 'Nummer der Versandeinheit' else +if(. eq 'FLIGHT_NO') then 'Flugnummer' else +if(. eq 'NUMBER_PLATE') then 'Nummernschild' else +if(. eq 'SHIPMENT_REFERENCE') then 'Sendungs-/Ladungsbezugsnummer' else +."/> + </span> + </xsl:template> + <xsl:template name="ram:Global_Identifier"> + <span> + <xsl:text>(</xsl:text> + </span> + <span> + <xsl:value-of select="if (. eq '0021') then 'BIC' else +if (. eq '0060') then 'DUNS' else +if (. eq '0088') then 'GTIN' else +if (. eq '0160') then 'GLN' else +if (. eq '0177') then 'OSCAR' else +."/> + </span> + <span> + <xsl:text>)</xsl:text> + </span> + </xsl:template> + <xsl:template name="ram:Menge"> + <span> + <xsl:variable name="altova:seqContentStrings_59"> + <xsl:value-of select="format-number(number(string(.)), '##0', 'format1')"/> + </xsl:variable> + <xsl:variable name="altova:sContent_59" select="string($altova:seqContentStrings_59)"/> + <xsl:value-of select="$altova:sContent_59"/> + </span> + <xsl:for-each select="@unitCode"> + <span> + <xsl:text> </xsl:text> + </span> + <span> + <xsl:value-of select="if (. eq 'C62') then 'Stk' else +if (. eq 'DAY') then 'Tag(e)' else +if (. eq 'HAR') then 'ha' else +if (. eq 'HUR') then 'Std' else +if (. eq 'KGM') then 'kg' else +if (. eq 'KTM') then 'km' else +if (. eq 'LS') then 'pausch' else +if (. eq 'LTR') then 'l' else +if (. eq 'MIN') then 'min' else +if (. eq 'MMK') then 'mm²' else +if (. eq 'MMT') then 'mm' else +if (. eq 'MTK') then 'm²' else +if (. eq 'MTQ') then 'm³' else +if (. eq 'MTR') then 'm' else +if (. eq 'NAR') then 'Anz' else +if (. eq 'NPR') then 'Paar' else +if (. eq 'P1') then '%' else +if (. eq 'SET') then 'Set' else +if (. eq 'TNE') then 't' else +if (. eq 'WEE') then 'Woche(n)' else +."/> + </span> + </xsl:for-each> + </xsl:template> + <xsl:template name="ram:TaxRegistration"> + <span> + <xsl:value-of select="if ( @schemeID = 'FC') then concat('Steuernummer : ', .) else +if ( @schemeID = 'VA') then concat('USt.-Id.-Nr. : ', .) else +concat('Unbekannte Steuernummer (', @schemeID , '): ', .)"/> + </span> + </xsl:template> + <xsl:template name="ram:VersandMode"> + <span> + <xsl:value-of select="if (. eq '0')then '0 - Nicht spezifiziert' else +if (. eq '1')then '1 - Seefracht' else +if (. eq '2')then '2 - Schiene' else +if (. eq '3')then '3 - Straße' else +if (. eq '4')then '4 - Luftfracht' else +if (. eq '5')then '5 - Post/Paketversand' else +if (. eq '6')then '6 - Multimodaler Transport/kombinierter Verkehr' else +if (. eq '7')then '7 - Feste Transportinstallation' else +if (. eq '8')then '8 - Transport auf Binnengewässern' else +if (. eq '9')then '9 - Nicht anwendbar' else +fn:concat(.,' - unbekannte Transportart')"/> + </span> + </xsl:template> + <xsl:template name="ram:PaymentType"> + <span> + <xsl:value-of select="if(. eq '1') then concat(.,' - nicht definiert') else +if(. eq '3') then concat(.,' - Belastung durch automatisierte Clearingstelle') else +if(. eq '10') then concat(.,' - Barzahlung') else +if(. eq '20') then concat(.,' - per Scheck') else +if(. eq '31') then concat(.,' - per Überweisung (SEPA)') else +if(. eq '42') then concat(.,' - per Überweisung (nicht SEPA)') else +if(. eq '48') then concat(.,' - per Kreditkarte') else +if(. eq '49') then concat(.,' - per Lastschrift') else +if(. eq '97') then concat(.,' - per Ausgleich zwischen Partnern') else +."/> + </span> + </xsl:template> + <xsl:template name="ram:Referenz"> + <span> + <xsl:value-of select="if (. eq 'AAA')then 'Auftragsbestätigung' else +if (. eq 'AAB')then 'Proforma-Rechnung' else +if (. eq 'AAG') then 'Angebot' else +if (. eq 'AAJ') then 'Lieferauftrag' else +if (. eq 'AAL') then 'Zeichnung' else +if (. eq 'AAM') then 'Frachtbrief' else +if (. eq 'AAS') then 'Transportdokument' else +if (. eq 'ABT') then 'Zollerklärung' else +if (. eq 'AER') then 'Projektspezifikation' else +if (. eq 'AGG') then 'Reklamation' else +if (. eq 'AJS') then 'Vereinbarung' else +if (. eq 'ALO') then 'Wareneingang' else +if (. eq 'ALQ') then 'Rücksendungsanzeige' else +if (. eq 'API') then 'Bestandsbericht' else +if (. eq 'ASI') then 'Abliefernachweis' else +if (. eq 'AUD') then 'Inkasso-Referenz' else +if (. eq 'AWR') then 'Ursprungsbeleg' else +if (. eq 'BO') then 'Rahmenauftrag' else +if (. eq 'BC') then 'Vertrag (Käufer)' else +if (. eq 'CD') then 'Gutschrift' else +if (. eq 'DL') then 'Belastungsanzeige' else +if (. eq 'MG') then 'Zählernummer' else +if (. eq 'OI') then 'Vorherige Rechnung' else +if (. eq 'PK') then 'Packliste' else +if (. eq 'PL') then 'Preisliste' else +if (. eq 'POR') then 'Bestellantwort' else +if (. eq 'PP') then 'Bestelländerung' else +if (. eq 'TIN') then 'Transportauftrag' else +if (. eq 'VN') then 'Auftragsnummer (Lieferant)' else +."/> + </span> + </xsl:template> + <xsl:template name="PackageQuantity"> + <xsl:for-each select="ram:PackageQuantity"> + <xsl:for-each select="@unitCode"> + <span> + <xsl:text> </xsl:text> + </span> + <span> + <xsl:value-of select="if (. eq 'BA') then 'Tonne' else +if (. eq 'BC') then 'Getränkekiste' else +if (. eq 'BG') then 'Tüte, Beutel' else +if (. eq 'BO') then 'Flasche' else +if (. eq 'BX') then 'Schachtel' else +if (. eq 'CS') then 'Kiste' else +if (. eq 'CT') then 'Karton' else +if (. eq 'CX') then 'Dose' else +if (. eq 'NE') then 'Unverpackt oder ausgepackt' else +if (. eq 'PX') then 'Palette' else +if (. eq 'RO') then 'Rolle' else +if (. eq 'SA') then 'Sack' +else ."/> + </span> + </xsl:for-each> + </xsl:for-each> + </xsl:template> + <xsl:template name="local_Identifier"> + <span> + <xsl:text>(</xsl:text> + </span> + <xsl:choose> + <xsl:when test=". instance of element()"> + <xsl:apply-templates/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="."/> + </xsl:otherwise> + </xsl:choose> + <span> + <xsl:text>)</xsl:text> + </span> + </xsl:template> + <xsl:template name="Klassifikationsart"> + <xsl:for-each select="@listID"> + <span> + <xsl:text>, Art: </xsl:text> + </span> + <span> + <xsl:value-of select="if (. eq 'GPC') then 'Global Product Classification (GS1)' else +if (. eq 'ECL') then 'eCl@ass' else +if (. eq 'UNSPSC') then 'United Nations Standard Products and Services Code® (UNSPSC®)' else +if (. eq 'HS') then 'Zolltarifnummer (Harmonised System)' else +if (. eq 'CBV') then 'Gemeinsames Vokabular für öffentliche Aufträge (Common Procurement Vocabulary - CPV)' else +if (. eq 'SELLER_ASSIGNED') then 'vom Verkäufer vergeben' else +if (. eq 'BUYER_ASSIGNED') then 'vom Käufer vergeben' else +."/> + </span> + </xsl:for-each> + </xsl:template> + <xsl:template name="DeliveryTypeCode"> + <span> + <xsl:value-of select="if (. eq 'XW') then 'ab Werk' else +if (. eq 'FCA') then 'frei Frachtführer' else +if (. eq 'FAS') then 'frei längsseits Schiff' else +if (. eq 'FOB') then 'frei an Bord' else +if (. eq 'CFR') then 'Kosten und Fracht' else +if (. eq 'CIF') then 'Kosten, Versicherung und Fracht bis zum Bestimmungshafen' else +if (. eq 'DAT') then 'geliefert Terminal' else +if (. eq 'DAP') then 'geliefert benannter Ort' else +if (. eq 'CPT') then 'Fracht bezahlt bis' else +if (. eq 'CIP') then 'Fracht und Versicherung bezahlt' else +if (. eq 'DDP') then 'geliefert Zoll bezahlt' else +."/> + </span> + </xsl:template> + <xsl:template name="AllowanceChargeReasonCode"> + <span> + <xsl:text>(</xsl:text> + </span> + <span> + <xsl:value-of select="if (. eq 'AA') then 'Werbekostenzuschuß' else +if (. eq 'ADR') then 'Andere Dienste' else +if (. eq 'AEO') then 'Sammel- und Recyclingservice' else +if (. eq 'DI') then 'Abzug (Rabatt)' else +if (. eq 'EAB') then 'Skonto' else +if (. eq 'FC') then 'Frachtgebühren' else +if (. eq 'IN') then 'Versicherung' else +if (. eq 'MAC') then 'Mindermengenzuschlag' else +if (. eq 'NAA') then 'Einwegbehälter' else +if (. eq 'PC') then 'Verpacken' else +if (. eq 'RAA') then 'Rückvergütung' else +if (. eq 'SH') then 'Spezielle Handhabungsdienstleistungen' else +."/> + </span> + <span> + <xsl:text>)</xsl:text> + </span> + </xsl:template> + <xsl:function name="altova:is-cell-empty" as="xs:boolean"> + <xsl:param name="altova:cell" as="element()"/> + <xsl:sequence select="altova:is-node-empty( $altova:cell )"/> + </xsl:function> + <xsl:function name="altova:is-node-empty" as="xs:boolean"> + <xsl:param name="altova:node" as="element()"/> + <xsl:sequence select="every $altova:child in $altova:node/child::node() satisfies ( ( boolean( $altova:child/self::text() ) and string-length( $altova:child ) = 0 ) or ( ( boolean( $altova:child/self::div ) or boolean( $altova:child/self::span ) or boolean( $altova:child/self::a ) ) and altova:is-node-empty( $altova:child ) ) )"/> + </xsl:function> + <xsl:function name="altova:col-span" as="xs:integer"> + <xsl:param name="altova:cell" as="element()"/> + <xsl:sequence select="if ( exists( $altova:cell/@colspan ) ) then xs:integer( $altova:cell/@colspan ) else 1"/> + </xsl:function> + <xsl:template match="@* | node()" mode="altova:generate-table"> + <xsl:param name="altova:generate-cols"/> + <xsl:copy> + <xsl:apply-templates select="@* | node()" mode="#current"> + <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> + </xsl:apply-templates> + </xsl:copy> + </xsl:template> + <xsl:template match="tbody" mode="altova:generate-table"> + <xsl:param name="altova:generate-cols"/> + <xsl:choose> + <xsl:when test="empty(tr)"> + <xsl:copy> + <tr> + <td/> + </tr> + </xsl:copy> + </xsl:when> + <xsl:otherwise> + <xsl:copy> + <xsl:apply-templates select="@* | node()" mode="#current"> + <xsl:with-param name="altova:generate-cols" select="$altova:generate-cols"/> + </xsl:apply-templates> + </xsl:copy> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + <xsl:template match="th | td" mode="altova:generate-table"> + <xsl:choose> + <xsl:when test="altova:is-cell-empty( . )"> + <xsl:copy> + <xsl:apply-templates select="@*" mode="#current"/> + <xsl:text> </xsl:text> + </xsl:copy> + </xsl:when> + <xsl:otherwise> + <xsl:copy> + <xsl:apply-templates select="@* | node()" mode="#current"/> + </xsl:copy> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + <xsl:function name="altova:GetChartYValuesForSingleSeries"> + <xsl:param name="seqCategoryLeafPos" as="node()*"/> + <xsl:param name="nodeSeriesLeafPos" as="node()"/> + <xsl:param name="bValuesInCategory" as="xs:boolean"/> + <xsl:for-each select="$seqCategoryLeafPos"> + <xsl:element name="altova:Value"> + <xsl:value-of select="altova:GetChartYValueForSingleSeriesPos($nodeSeriesLeafPos, ., $bValuesInCategory)"/> + </xsl:element> + </xsl:for-each> + </xsl:function> + <xsl:function name="altova:GetChartYValueForSingleSeriesPos"> + <xsl:param name="nodeSeriesLeafPos" as="node()"/> + <xsl:param name="nodeCategoryLeafPos" as="node()"/> + <xsl:param name="bValuesInCategory" as="xs:boolean"/> + <xsl:variable name="altova:seqCategoryContextIds" select="$nodeCategoryLeafPos/altova:Context/@altova:ContextId" as="xs:string*"/> + <xsl:variable name="altova:seqSeriesContextIds" select="$nodeSeriesLeafPos/altova:Context/@altova:ContextId" as="xs:string*"/> + <xsl:variable name="altova:sCommonContextId" select="for $i in $altova:seqCategoryContextIds return if (some $j in $altova:seqSeriesContextIds satisfies $i eq $j) then $i else ()" as="xs:string*"/> + <xsl:choose> + <xsl:when test="count($altova:sCommonContextId) gt 1"> + <xsl:message select="concat('Es wurden mehrere Werte anstatt eines einzigen gefunden (Contexts: ', string-join($altova:sCommonContextId, ', '), ').')" terminate="yes"/> + </xsl:when> + <xsl:when test="count($altova:sCommonContextId) lt 1"> + <xsl:message select="concat('XBRL Chart: Info: No value found for position labeled "', $nodeCategoryLeafPos/@altova:sLabel, '"')" terminate="no"/> + <xsl:sequence select="'altova:no-value'"/> + </xsl:when> + <xsl:when test="$bValuesInCategory"> + <xsl:sequence select="xs:string($nodeCategoryLeafPos/altova:Context[@altova:ContextId eq $altova:sCommonContextId]/@altova:Value)"/> + </xsl:when> + <xsl:otherwise> + <xsl:sequence select="xs:string($nodeSeriesLeafPos/altova:Context[@altova:ContextId eq $altova:sCommonContextId]/@altova:Value)"/> + </xsl:otherwise> + </xsl:choose> + </xsl:function> + <xsl:function name="altova:GetChartLabelForPos" as="xs:string"> + <xsl:param name="nodeParam" as="node()"/> + <xsl:value-of select="string-join($nodeParam/ancestor-or-self::altova:Pos/@altova:sLabel, ' ')"/> + </xsl:function> + <xsl:function name="altova:convert-length-to-pixel" as="xs:decimal"> + <xsl:param name="altova:length"/> + <xsl:variable name="normLength" select="normalize-space($altova:length)"/> + <xsl:choose> + <xsl:when test="ends-with($normLength, 'px')"> + <xsl:value-of select="substring-before($normLength, 'px')"/> + </xsl:when> + <xsl:when test="ends-with($normLength, 'in')"> + <xsl:value-of select="xs:decimal(substring-before($normLength, 'in')) * $altova:nPxPerIn"/> + </xsl:when> + <xsl:when test="ends-with($normLength, 'cm')"> + <xsl:value-of select="xs:decimal(substring-before($normLength, 'cm')) * $altova:nPxPerIn div 2.54"/> + </xsl:when> + <xsl:when test="ends-with($normLength, 'mm')"> + <xsl:value-of select="xs:decimal(substring-before($normLength, 'mm')) * $altova:nPxPerIn div 25.4"/> + </xsl:when> + <xsl:when test="ends-with($normLength, 'pt')"> + <xsl:value-of select="xs:decimal(substring-before($normLength, 'pt')) * $altova:nPxPerIn div 72.0"/> + </xsl:when> + <xsl:when test="ends-with($normLength, 'pc')"> + <xsl:value-of select="xs:decimal(substring-before($normLength, 'pc')) * $altova:nPxPerIn div 6.0"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$normLength"/> + </xsl:otherwise> + </xsl:choose> + </xsl:function> + <xsl:function name="altova:convert-length-to-mm" as="xs:decimal"> + <xsl:param name="altova:length"/> + <xsl:variable name="normLength" select="normalize-space($altova:length)"/> + <xsl:choose> + <xsl:when test="ends-with($normLength, 'px')"> + <xsl:value-of select="xs:decimal(substring-before($normLength, 'px')) div $altova:nPxPerIn * 25.4"/> + </xsl:when> + <xsl:when test="ends-with($normLength, 'in')"> + <xsl:value-of select="xs:decimal(substring-before($normLength, 'in')) * 25.4"/> + </xsl:when> + <xsl:when test="ends-with($normLength, 'cm')"> + <xsl:value-of select="xs:decimal(substring-before($normLength, 'cm')) * 10"/> + </xsl:when> + <xsl:when test="ends-with($normLength, 'mm')"> + <xsl:value-of select="substring-before($normLength, 'mm') "/> + </xsl:when> + <xsl:when test="ends-with($normLength, 'pt')"> + <xsl:value-of select="xs:decimal(substring-before($normLength, 'pt')) * 25.4 div 72.0"/> + </xsl:when> + <xsl:when test="ends-with($normLength, 'pc')"> + <xsl:value-of select="xs:decimal(substring-before($normLength, 'pc')) * 25.4 div 6.0"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="number($normLength) div $altova:nPxPerIn * 25.4"/> + </xsl:otherwise> + </xsl:choose> + </xsl:function> +</xsl:stylesheet> diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/BackwardCompatibilityTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/BackwardCompatibilityTest.java index b0dbecb70..4549a79d3 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/BackwardCompatibilityTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/BackwardCompatibilityTest.java @@ -67,7 +67,7 @@ public void testZF1Export() { ze.export(baos); ze.close(); String pdfContent = baos.toString(StandardCharsets.UTF_8); - assertFalse(pdfContent.indexOf("(via mustangproject.org") == -1); + assertFalse(!pdfContent.contains("(via mustangproject.org")); // check for pdf-a schema extension // assertFalse(pdfContent.indexOf("<zf:ConformanceLevel>EN 16931</zf:ConformanceLevel>") == -1); // assertFalse(pdfContent.indexOf("<pdfaSchema:prefix>zf</pdfaSchema:prefix>") == -1); @@ -107,7 +107,7 @@ public void testZF2Export() { ze.export(baos); ze.close(); String pdfContent = baos.toString(StandardCharsets.UTF_8); - assertFalse(pdfContent.indexOf("(via mustangproject.org") == -1); + assertFalse(!pdfContent.contains("(via mustangproject.org")); // check for pdf-a schema extension // assertFalse(pdfContent.indexOf("<zf:ConformanceLevel>EN 16931</zf:ConformanceLevel>") == -1); // assertFalse(pdfContent.indexOf("<pdfaSchema:prefix>zf</pdfaSchema:prefix>") == -1); @@ -145,7 +145,7 @@ public void testFXExport() { ze.export(baos); ze.close(); String pdfContent = baos.toString(StandardCharsets.UTF_8); - assertFalse(pdfContent.indexOf("(via mustangproject.org") == -1); + assertFalse(!pdfContent.contains("(via mustangproject.org")); // check for pdf-a schema extension // assertFalse(pdfContent.indexOf("<zf:ConformanceLevel>EN 16931</zf:ConformanceLevel>") == -1); // assertFalse(pdfContent.indexOf("<pdfaSchema:prefix>zf</pdfaSchema:prefix>") == -1); diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ByteArraySearcherTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ByteArraySearcherTest.java index df752f5a3..193d155ed 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ByteArraySearcherTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ByteArraySearcherTest.java @@ -11,33 +11,33 @@ public class ByteArraySearcherTest { - @Test - public void testIndexOf () { - byte [] haystack = "Hello World".getBytes (StandardCharsets.ISO_8859_1); - assertEquals (0, ByteArraySearcher.indexOf (haystack, new byte [] { 'H' })); - assertEquals (1, ByteArraySearcher.indexOf (haystack, new byte [] { 'e' })); - assertEquals (0, ByteArraySearcher.indexOf (haystack, new byte [] { 'H', 'e' })); - assertEquals (0, ByteArraySearcher.indexOf (haystack, new byte [] { 'H', 'e' })); - assertEquals (0, ByteArraySearcher.indexOf (haystack, new byte [] { 'H', 'e', 'l', 'l' })); - assertEquals (0, ByteArraySearcher.indexOf (haystack, haystack)); - assertEquals (-1, ByteArraySearcher.indexOf (haystack, new byte [0])); - assertEquals (-1, ByteArraySearcher.indexOf (haystack, new byte [] { 'a' })); - assertEquals (-1, ByteArraySearcher.indexOf (haystack, new byte [] { 'h' })); - assertEquals (-1, ByteArraySearcher.indexOf (haystack, new byte [] { 'r', 'o' })); - } + @Test + public void testIndexOf () { + byte [] haystack = "Hello World".getBytes (StandardCharsets.ISO_8859_1); + assertEquals (0, ByteArraySearcher.indexOf (haystack, new byte [] { 'H' })); + assertEquals (1, ByteArraySearcher.indexOf (haystack, new byte [] { 'e' })); + assertEquals (0, ByteArraySearcher.indexOf (haystack, new byte [] { 'H', 'e' })); + assertEquals (0, ByteArraySearcher.indexOf (haystack, new byte [] { 'H', 'e' })); + assertEquals (0, ByteArraySearcher.indexOf (haystack, new byte [] { 'H', 'e', 'l', 'l' })); + assertEquals (0, ByteArraySearcher.indexOf (haystack, haystack)); + assertEquals (-1, ByteArraySearcher.indexOf (haystack, new byte [0])); + assertEquals (-1, ByteArraySearcher.indexOf (haystack, new byte [] { 'a' })); + assertEquals (-1, ByteArraySearcher.indexOf (haystack, new byte [] { 'h' })); + assertEquals (-1, ByteArraySearcher.indexOf (haystack, new byte [] { 'r', 'o' })); + } - @Test - public void testStartsWith () { - byte [] haystack = "Hello World".getBytes (StandardCharsets.ISO_8859_1); - assertTrue (ByteArraySearcher.startsWith (haystack, new byte [] { 'H' })); - assertFalse (ByteArraySearcher.startsWith (haystack, new byte [] { 'e' })); - assertTrue (ByteArraySearcher.startsWith (haystack, new byte [] { 'H', 'e' })); - assertTrue (ByteArraySearcher.startsWith (haystack, new byte [] { 'H', 'e' })); - assertTrue (ByteArraySearcher.startsWith (haystack, new byte [] { 'H', 'e', 'l', 'l' })); - assertTrue (ByteArraySearcher.startsWith (haystack, haystack)); - assertFalse (ByteArraySearcher.startsWith (haystack, new byte [0])); - assertFalse (ByteArraySearcher.startsWith (haystack, new byte [] { 'a' })); - assertFalse (ByteArraySearcher.startsWith (haystack, new byte [] { 'h' })); - assertFalse (ByteArraySearcher.startsWith (haystack, new byte [] { 'r', 'o' })); - } + @Test + public void testStartsWith () { + byte [] haystack = "Hello World".getBytes (StandardCharsets.ISO_8859_1); + assertTrue (ByteArraySearcher.startsWith (haystack, new byte [] { 'H' })); + assertFalse (ByteArraySearcher.startsWith (haystack, new byte [] { 'e' })); + assertTrue (ByteArraySearcher.startsWith (haystack, new byte [] { 'H', 'e' })); + assertTrue (ByteArraySearcher.startsWith (haystack, new byte [] { 'H', 'e' })); + assertTrue (ByteArraySearcher.startsWith (haystack, new byte [] { 'H', 'e', 'l', 'l' })); + assertTrue (ByteArraySearcher.startsWith (haystack, haystack)); + assertFalse (ByteArraySearcher.startsWith (haystack, new byte [0])); + assertFalse (ByteArraySearcher.startsWith (haystack, new byte [] { 'a' })); + assertFalse (ByteArraySearcher.startsWith (haystack, new byte [] { 'h' })); + assertFalse (ByteArraySearcher.startsWith (haystack, new byte [] { 'r', 'o' })); + } } diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/DeSerializationTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/DeSerializationTest.java index 24f4044aa..26bd9beaf 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/DeSerializationTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/DeSerializationTest.java @@ -21,11 +21,8 @@ */ package org.mustangproject.ZUGFeRD; -import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import junit.framework.TestCase; -import org.junit.Assert; import org.junit.FixMethodOrder; import org.junit.runners.MethodSorters; import org.mustangproject.*; @@ -34,9 +31,7 @@ import javax.xml.xpath.XPathExpressionException; import java.io.File; import java.io.IOException; -import java.io.InputStream; import java.math.BigDecimal; -import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -67,7 +62,7 @@ public void testInvoiceLine() throws JsonProcessingException { ZUGFeRDInvoiceImporter zii = new ZUGFeRDInvoiceImporter(); try { - zii.fromXML(new String(Files.readAllBytes(inputCII.toPath()), StandardCharsets.UTF_8)); + zii.fromXML(Files.readString(inputCII.toPath())); } catch (IOException e) { hasExceptions = true; @@ -76,9 +71,7 @@ public void testInvoiceLine() throws JsonProcessingException { CalculatedInvoice ci = new CalculatedInvoice(); try { zii.extractInto(ci); - } catch (XPathExpressionException e) { - hasExceptions = true; - } catch (ParseException e) { + } catch (XPathExpressionException | ParseException e) { hasExceptions = true; } ObjectMapper mapper = new ObjectMapper(); @@ -184,7 +177,7 @@ public void testDeserializedFiles() { String exText = null; try { - zii.fromXML(new String(Files.readAllBytes(inputUBL.toPath()), StandardCharsets.UTF_8)); + zii.fromXML(Files.readString(inputUBL.toPath())); ObjectMapper mapper = new ObjectMapper(); zii.extractInto(i); String json = mapper.writeValueAsString(i); @@ -196,11 +189,7 @@ public void testDeserializedFiles() { assertEquals(newInvoiceFromJSON.getAdditionalReferencedDocuments().length, 2); - } catch (IOException e) { - exText = e.getMessage(); - } catch (XPathExpressionException e) { - exText = e.getMessage(); - } catch (ParseException e) { + } catch (IOException | ParseException | XPathExpressionException e) { exText = e.getMessage(); } assertNull(exText); @@ -296,7 +285,7 @@ public void testFull300Roundtrip() { ZUGFeRDInvoiceImporter zii = new ZUGFeRDInvoiceImporter(); zii.doIgnoreCalculationErrors(); try { - zii.fromXML(new String(Files.readAllBytes(inputCII.toPath()), StandardCharsets.UTF_8)); + zii.fromXML(Files.readString(inputCII.toPath())); ObjectMapper mapper = new ObjectMapper(); zii.extractInto(i); String json = mapper.writeValueAsString(i); @@ -305,11 +294,7 @@ public void testFull300Roundtrip() { assertEquals("Test_EeISI_100", i.getNumber()); assertEquals(newInvoiceFromJSON.getNumber(), i.getNumber()); - } catch (IOException e) { - exText = e.getMessage(); - } catch (XPathExpressionException e) { - exText = e.getMessage(); - } catch (ParseException e) { + } catch (IOException | ParseException | XPathExpressionException e) { exText = e.getMessage(); } assertNull(exText); @@ -350,9 +335,7 @@ public void testIssuerAssignedIDRoundtrip() { ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(i); newInvoiceFromJSON = mapper.readValue(json, Invoice.class); - } catch (ParseException e) { - hasExceptions = true; - } catch (JsonProcessingException e) { + } catch (ParseException | JsonProcessingException e) { hasExceptions = true; } assertEquals(newInvoiceFromJSON.getBuyerOrderReferencedDocumentID(), "28934"); diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/InvoicingPeriodTestCase.java b/library/src/test/java/org/mustangproject/ZUGFeRD/InvoicingPeriodTestCase.java index 42f0c0e03..30584c391 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/InvoicingPeriodTestCase.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/InvoicingPeriodTestCase.java @@ -10,34 +10,34 @@ import org.junit.Test; public class InvoicingPeriodTestCase { - @Test - public void readBillingSpecification() throws IOException { - final String file = ResourceUtilities.readFile(Charset.defaultCharset(), - "src/test/resources/factur-x_invoicingPeriod.xml"); - final ZUGFeRDImporter zi = new XRechnungImporter(file.getBytes()); + @Test + public void readBillingSpecification() throws IOException { + final String file = ResourceUtilities.readFile(Charset.defaultCharset(), + "src/test/resources/factur-x_invoicingPeriod.xml"); + final ZUGFeRDImporter zi = new XRechnungImporter(file.getBytes()); - // Reading ZUGFeRD - assertEquals(date("20220829"), zi.getLineItemList().get(0).getDetailedDeliveryPeriodFrom()); - assertEquals(date("20220831"), zi.getLineItemList().get(0).getDetailedDeliveryPeriodTo()); - assertEquals(date("20220901"), zi.getLineItemList().get(1).getDetailedDeliveryPeriodFrom()); - assertEquals(date("20220902"), zi.getLineItemList().get(1).getDetailedDeliveryPeriodTo()); - assertEquals(null, zi.getLineItemList().get(2).getDetailedDeliveryPeriodFrom()); - assertEquals(date("20220909"), zi.getLineItemList().get(2).getDetailedDeliveryPeriodTo()); - assertEquals(date("20220826"), zi.getDetailedDeliveryPeriodFrom()); - assertEquals(date("20220902"), zi.getDetailedDeliveryPeriodTo()); - //general asserts - assertEquals("1634.76", zi.getAmount()); - assertEquals("RE1000", zi.getInvoiceID()); - assertEquals("Sell", zi.getSellerTradePartyAddress().getCityName()); - assertEquals("Beier", zi.getBuyerTradePartyName()); - } - - private Date date(String toParse){ - try { - return ZUGFeRDDateFormat.DATE.getFormatter().parse(toParse); - } - catch (final ParseException e) { - return null; - } - } + // Reading ZUGFeRD + assertEquals(date("20220829"), zi.getLineItemList().get(0).getDetailedDeliveryPeriodFrom()); + assertEquals(date("20220831"), zi.getLineItemList().get(0).getDetailedDeliveryPeriodTo()); + assertEquals(date("20220901"), zi.getLineItemList().get(1).getDetailedDeliveryPeriodFrom()); + assertEquals(date("20220902"), zi.getLineItemList().get(1).getDetailedDeliveryPeriodTo()); + assertEquals(null, zi.getLineItemList().get(2).getDetailedDeliveryPeriodFrom()); + assertEquals(date("20220909"), zi.getLineItemList().get(2).getDetailedDeliveryPeriodTo()); + assertEquals(date("20220826"), zi.getDetailedDeliveryPeriodFrom()); + assertEquals(date("20220902"), zi.getDetailedDeliveryPeriodTo()); + //general asserts + assertEquals("1634.76", zi.getAmount()); + assertEquals("RE1000", zi.getInvoiceID()); + assertEquals("Sell", zi.getSellerTradePartyAddress().getCityName()); + assertEquals("Beier", zi.getBuyerTradePartyName()); + } + + private Date date(String toParse){ + try { + return ZUGFeRDDateFormat.DATE.getFormatter().parse(toParse); + } + catch (final ParseException e) { + return null; + } + } } diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java index 4c572aa72..e68724e87 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java @@ -263,8 +263,8 @@ public void testCustomZF2Export() { zea1.export(baos); zea1.close(); String pdfContent = baos.toString(StandardCharsets.UTF_8); - assertFalse(pdfContent.indexOf("(via mustangproject.org") == -1); - assertFalse(pdfContent.indexOf("<fx:ConformanceLevel>EN 16931</fx:ConformanceLevel>") == -1); + assertFalse(!pdfContent.contains("(via mustangproject.org")); + assertFalse(!pdfContent.contains("<fx:ConformanceLevel>EN 16931</fx:ConformanceLevel>")); } catch (IOException e) { e.printStackTrace(); @@ -445,8 +445,8 @@ public void testCustomZF1Export() { zea1.export(baos); zea1.close(); String pdfContent = baos.toString(StandardCharsets.UTF_8); - assertFalse(pdfContent.indexOf("(via mustangproject.org") == -1); - assertFalse(pdfContent.indexOf("<zf:ConformanceLevel>BASIC</zf:ConformanceLevel>") == -1); + assertFalse(!pdfContent.contains("(via mustangproject.org")); + assertFalse(!pdfContent.contains("<zf:ConformanceLevel>BASIC</zf:ConformanceLevel>")); } catch (IOException e) { e.printStackTrace(); diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java index b7fbede69..ed4cd0728 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java @@ -372,7 +372,7 @@ public void testZExport() { ze.export(baos); ze.close(); String pdfContent = baos.toString(StandardCharsets.UTF_8); - assertFalse(pdfContent.indexOf("(via mustangproject.org") == -1); + assertFalse(!pdfContent.contains("(via mustangproject.org")); // check for pdf-a schema extension // assertFalse(pdfContent.indexOf("<zf:ConformanceLevel>EN 16931</zf:ConformanceLevel>") == -1); // assertFalse(pdfContent.indexOf("<pdfaSchema:prefix>zf</pdfaSchema:prefix>") == -1); @@ -416,9 +416,9 @@ public void testZExportv1Profile() { ze.export(baos); ze.close(); String pdfContent = baos.toString(StandardCharsets.UTF_8); - assertFalse(pdfContent.indexOf(DocumentContextParameterTypeConstants.BASIC) >= 0); - assertFalse(pdfContent.indexOf(DocumentContextParameterTypeConstants.EXTENDED) >= 0); - assertTrue(pdfContent.indexOf(DocumentContextParameterTypeConstants.COMFORT) >= 0); + assertFalse(pdfContent.contains(DocumentContextParameterTypeConstants.BASIC)); + assertFalse(pdfContent.contains(DocumentContextParameterTypeConstants.EXTENDED)); + assertTrue(pdfContent.contains(DocumentContextParameterTypeConstants.COMFORT)); } catch (IOException e) { fail("IOException should not happen in testZExport"); @@ -452,11 +452,11 @@ public void testFXExport() throws Exception { ze.export(baos); ze.close(); String pdfContent = baos.toString(StandardCharsets.UTF_8); - assertFalse(pdfContent.indexOf("(via mustangproject.org") == -1); + assertFalse(!pdfContent.contains("(via mustangproject.org")); // check for pdf-a schema extension - assertFalse(pdfContent.indexOf("<fx:ConformanceLevel>EN 16931</fx:ConformanceLevel>") == -1); - assertFalse(pdfContent.indexOf("<pdfaSchema:prefix>fx</pdfaSchema:prefix>") == -1); - assertFalse(pdfContent.indexOf("urn:cen.eu:en16931:2017") == -1); + assertFalse(!pdfContent.contains("<fx:ConformanceLevel>EN 16931</fx:ConformanceLevel>")); + assertFalse(!pdfContent.contains("<pdfaSchema:prefix>fx</pdfaSchema:prefix>")); + assertFalse(!pdfContent.contains("urn:cen.eu:en16931:2017")); } // now check the contents (like MustangReaderTest) diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/VisualizationTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/VisualizationTest.java index 88c4fccf3..496bf0570 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/VisualizationTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/VisualizationTest.java @@ -1,171 +1,170 @@ -/** - * ********************************************************************* - * <p> - * Copyright 2019 Jochen Staerk - * <p> - * Use is subject to license terms. - * <p> - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at http://www.apache.org/licenses/LICENSE-2.0. - * <p> - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * <p> - * See the License for the specific language governing permissions and - * limitations under the License. - * <p> - * ********************************************************************** - */ -package org.mustangproject.ZUGFeRD; - -import org.junit.FixMethodOrder; -import org.junit.runners.MethodSorters; -import org.mustangproject.ZUGFeRD.ZUGFeRDVisualizer.Language; -import org.mustangproject.util.ByteArraySearcher; - -import javax.xml.transform.TransformerException; -import java.io.File; -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Paths; - -@FixMethodOrder(MethodSorters.NAME_ASCENDING) -public class VisualizationTest extends ResourceCase { - - final String TARGET_PDF_CII = "./target/testout-Visualization-cii.pdf"; - final String TARGET_PDF_UBL = "./target/testout-Visualization-cii.pdf"; - - public void testCIIVisualizationBasic() { - this.runZUGFeRDVisualization("factur-x.xml", "factur-x-vis.fr.html", Language.FR); - } - - public void testCIIVisualizationExtended() { - this.runZUGFeRDVisualization("factur-x-extended.xml", "factur-x-vis-extended.de.html", Language.DE); - } - - public void testUBLCreditNoteVisualizationBasic() { - this.runZUGFeRDVisualization("ubl-creditnote.xml", "factur-x-vis-ubl-creditnote.en.html", Language.EN); - } - - public void testUBLVisualizationBasic() { - this.runZUGFeRDVisualization("ubl/01.01a-INVOICE.ubl.xml", "factur-x-vis-ubl.en.html", Language.EN); - } - - private void runZUGFeRDVisualization(String inputFilename, String resultFileName, Language lang) { - File CIIinputFile = getResourceAsFile(inputFilename); - - String expected = null; - String result = null; - try { - ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer(); - result = zvi.visualize(CIIinputFile.getAbsolutePath(), lang); - Files.write(Paths.get("./target/testout-" + resultFileName), result.getBytes(StandardCharsets.UTF_8)); - - File expectedResult = getResourceAsFile(resultFileName); - expected = new String(Files.readAllBytes(expectedResult.toPath()), StandardCharsets.UTF_8) - ; - - } catch (UnsupportedOperationException e) { - fail("UnsupportedOperationException should not happen: " + e.getMessage()); - } catch (IllegalArgumentException e) { - fail("IllegalArgumentException should not happen: " + e.getMessage()); - } catch (TransformerException e) { - fail("TransformerException should not happen: " + e.getMessage()); - } catch (IOException e) { - fail("IOException should not happen: " + e.getMessage()); - } - - - assertNotNull(result); - /* remove file endings so that tests can also pass after checking - out from git with arbitrary options (which may include CSRF changes) - */ - assertEquals(expected.replace("\r", "") - .replace("\n", "") - .replace("\t", "") - .replace(" ", ""), result.replace("\r", "") - .replace("\n", "") - .replace("\t", "") - .replace(" ", "")); - } - - public void testPDFVisualizationCII() { - - File CIIinputFile = getResourceAsFile("cii/01.01a-INVOICE.cii.xml"); - - // the writing part - - String expected = null; - String result = null; - try { - ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer(); - zvi.toPDF(CIIinputFile.getAbsolutePath(), TARGET_PDF_CII); - } catch (UnsupportedOperationException e) { - fail("UnsupportedOperationException should not happen: " + e.getMessage()); - } catch (IllegalArgumentException e) { - fail("IllegalArgumentException should not happen: " + e.getMessage()); - } - - try { - assertTrue(ByteArraySearcher.startsWith(Files.readAllBytes(Paths.get(TARGET_PDF_CII)), new byte[]{'%', 'P', 'D', 'F'})); - } catch (IOException e) { - fail("IOException should not occur"); - } - } - - public void testPDFVisualizationUBL() { - - File UBLinputFile = getResourceAsFile("ubl/01.01a-INVOICE.ubl.xml"); - - // the writing part - String sourceFilename = "factur-x.xml"; - - String expected = null; - String result = null; - try { - ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer(); - zvi.toPDF(UBLinputFile.getAbsolutePath(), TARGET_PDF_UBL); - } catch (UnsupportedOperationException e) { - fail("UnsupportedOperationException should not happen: " + e.getMessage()); - } catch (IllegalArgumentException e) { - fail("IllegalArgumentException should not happen: " + e.getMessage()); - } - - - try { - assertTrue(ByteArraySearcher.startsWith(Files.readAllBytes(Paths.get(TARGET_PDF_CII)), new byte[]{'%', 'P', 'D', 'F'})); - } catch (IOException e) { - fail("IOException should not occur"); - } - } - - public void testPDFVisualizationUBLCreditNote() { - - File UBLinputFile = getResourceAsFile("ubl/UBL-CreditNote-2.1-Example.ubl.xml"); - - // the writing part - String sourceFilename = "factur-x.xml"; - - String expected = null; - String result = null; - try { - ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer(); - zvi.toPDF(UBLinputFile.getAbsolutePath(), TARGET_PDF_UBL); - } catch (UnsupportedOperationException e) { - fail("UnsupportedOperationException should not happen: " + e.getMessage()); - } catch (IllegalArgumentException e) { - fail("IllegalArgumentException should not happen: " + e.getMessage()); - } - - - try { - assertTrue(ByteArraySearcher.startsWith(Files.readAllBytes(Paths.get(TARGET_PDF_CII)), new byte[]{'%', 'P', 'D', 'F'})); - } catch (IOException e) { - fail("IOException should not occur"); - } - } - -} +/** + * ********************************************************************* + * <p> + * Copyright 2019 Jochen Staerk + * <p> + * Use is subject to license terms. + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0. + * <p> + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * <p> + * See the License for the specific language governing permissions and + * limitations under the License. + * <p> + * ********************************************************************** + */ +package org.mustangproject.ZUGFeRD; + +import org.junit.FixMethodOrder; +import org.junit.runners.MethodSorters; +import org.mustangproject.util.ByteArraySearcher; + +import javax.xml.transform.TransformerException; +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; + +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +public class VisualizationTest extends ResourceCase { + + final String TARGET_PDF_CII = "./target/testout-Visualization-cii.pdf"; + final String TARGET_PDF_UBL = "./target/testout-Visualization-cii.pdf"; + + public void testCIIVisualizationBasic() { + this.runZUGFeRDVisualization("factur-x.xml", "factur-x-vis.fr.html", ELanguage.FR); + } + + public void testCIIVisualizationExtended() { + this.runZUGFeRDVisualization("factur-x-extended.xml", "factur-x-vis-extended.de.html", ELanguage.DE); + } + + public void testUBLCreditNoteVisualizationBasic() { + this.runZUGFeRDVisualization("ubl-creditnote.xml", "factur-x-vis-ubl-creditnote.en.html", ELanguage.EN); + } + + public void testUBLVisualizationBasic() { + this.runZUGFeRDVisualization("ubl/01.01a-INVOICE.ubl.xml", "factur-x-vis-ubl.en.html", ELanguage.EN); + } + + private void runZUGFeRDVisualization(String inputFilename, String resultFileName, ELanguage lang) { + File CIIinputFile = getResourceAsFile(inputFilename); + + String expected = null; + String result = null; + try { + ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer(); + result = zvi.visualize(CIIinputFile.getAbsolutePath(), lang); + Files.write(Paths.get("./target/testout-" + resultFileName), result.getBytes(StandardCharsets.UTF_8)); + + File expectedResult = getResourceAsFile(resultFileName); + expected = Files.readString(expectedResult.toPath()) + ; + + } catch (UnsupportedOperationException e) { + fail("UnsupportedOperationException should not happen: " + e.getMessage()); + } catch (IllegalArgumentException e) { + fail("IllegalArgumentException should not happen: " + e.getMessage()); + } catch (TransformerException e) { + fail("TransformerException should not happen: " + e.getMessage()); + } catch (IOException e) { + fail("IOException should not happen: " + e.getMessage()); + } + + + assertNotNull(result); + /* remove file endings so that tests can also pass after checking + out from git with arbitrary options (which may include CSRF changes) + */ + assertEquals(expected.replace("\r", "") + .replace("\n", "") + .replace("\t", "") + .replace(" ", ""), result.replace("\r", "") + .replace("\n", "") + .replace("\t", "") + .replace(" ", "")); + } + + public void testPDFVisualizationCII() { + + File CIIinputFile = getResourceAsFile("cii/01.01a-INVOICE.cii.xml"); + + // the writing part + + String expected = null; + String result = null; + try { + ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer(); + zvi.toPDF(CIIinputFile.getAbsolutePath(), TARGET_PDF_CII); + } catch (UnsupportedOperationException e) { + fail("UnsupportedOperationException should not happen: " + e.getMessage()); + } catch (IllegalArgumentException e) { + fail("IllegalArgumentException should not happen: " + e.getMessage()); + } + + try { + assertTrue(ByteArraySearcher.startsWith(Files.readAllBytes(Paths.get(TARGET_PDF_CII)), new byte[]{'%', 'P', 'D', 'F'})); + } catch (IOException e) { + fail("IOException should not occur"); + } + } + + public void testPDFVisualizationUBL() { + + File UBLinputFile = getResourceAsFile("ubl/01.01a-INVOICE.ubl.xml"); + + // the writing part + String sourceFilename = "factur-x.xml"; + + String expected = null; + String result = null; + try { + ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer(); + zvi.toPDF(UBLinputFile.getAbsolutePath(), TARGET_PDF_UBL); + } catch (UnsupportedOperationException e) { + fail("UnsupportedOperationException should not happen: " + e.getMessage()); + } catch (IllegalArgumentException e) { + fail("IllegalArgumentException should not happen: " + e.getMessage()); + } + + + try { + assertTrue(ByteArraySearcher.startsWith(Files.readAllBytes(Paths.get(TARGET_PDF_CII)), new byte[]{'%', 'P', 'D', 'F'})); + } catch (IOException e) { + fail("IOException should not occur"); + } + } + + public void testPDFVisualizationUBLCreditNote() { + + File UBLinputFile = getResourceAsFile("ubl/UBL-CreditNote-2.1-Example.ubl.xml"); + + // the writing part + String sourceFilename = "factur-x.xml"; + + String expected = null; + String result = null; + try { + ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer(); + zvi.toPDF(UBLinputFile.getAbsolutePath(), TARGET_PDF_UBL); + } catch (UnsupportedOperationException e) { + fail("UnsupportedOperationException should not happen: " + e.getMessage()); + } catch (IllegalArgumentException e) { + fail("IllegalArgumentException should not happen: " + e.getMessage()); + } + + + try { + assertTrue(ByteArraySearcher.startsWith(Files.readAllBytes(Paths.get(TARGET_PDF_CII)), new byte[]{'%', 'P', 'D', 'F'})); + } catch (IOException e) { + fail("IOException should not occur"); + } + } + +} diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/XRTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/XRTest.java index 3efa4ccff..ce8988a6e 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/XRTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/XRTest.java @@ -36,7 +36,6 @@ import java.text.ParseException; import java.util.Arrays; import java.util.Date; -import java.util.List; import static org.xmlunit.assertj.XmlAssert.assertThat; diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java index 412d334a8..5b1e91c99 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java @@ -22,7 +22,6 @@ package org.mustangproject.ZUGFeRD; import java.io.ByteArrayInputStream; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; @@ -30,7 +29,6 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; -import java.util.List; import org.mustangproject.*; import org.junit.FixMethodOrder; @@ -102,9 +100,7 @@ public void testPushExport() { Invoice i = new Invoice(); try { zii.extractInto(i); - } catch (XPathExpressionException e) { - throw new RuntimeException(e); - } catch (ParseException e) { + } catch (XPathExpressionException | ParseException e) { throw new RuntimeException(e); } @@ -170,9 +166,7 @@ public void testAttachmentsExport() { Invoice i = null; try { i = zii.extractInvoice(); - } catch (XPathExpressionException e) { - throw new RuntimeException(e); - } catch (ParseException e) { + } catch (XPathExpressionException | ParseException e) { throw new RuntimeException(e); } @@ -384,9 +378,7 @@ public void testIntraCommunitySupplyManualExport() { Invoice i = null; try { i = zii.extractInvoice(); - } catch (XPathExpressionException e) { - throw new RuntimeException(e); - } catch (ParseException e) { + } catch (XPathExpressionException | ParseException e) { throw new RuntimeException(e); } diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java index 1e918395a..e5baf74f7 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java @@ -20,10 +20,8 @@ */ package org.mustangproject.ZUGFeRD; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.commons.codec.binary.StringUtils; import org.junit.jupiter.api.Test; import org.mustangproject.*; @@ -34,7 +32,6 @@ import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; -import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.text.ParseException; @@ -113,7 +110,7 @@ public void testInvoiceImportUBL() { Invoice invoice = null; try { - String xml = new String(Files.readAllBytes(expectedResult.toPath()), StandardCharsets.UTF_8).replace("\r", "").replace("\n", ""); + String xml = Files.readString(expectedResult.toPath()).replace("\r", "").replace("\n", ""); zii.fromXML(xml); @@ -307,8 +304,8 @@ public void testXRImport() { int version = -1; try { - zii.fromXML(new String(Files.readAllBytes(Paths.get("./target/testout-XR-Edge.xml")), StandardCharsets.UTF_8)); - version = zii.getVersion(); + zii.fromXML(Files.readString(Paths.get("./target/testout-XR-Edge.xml"))); + version=zii.getVersion(); } catch (IOException e) { hasExceptions = true; } catch (Exception e) { @@ -384,9 +381,7 @@ public void testImportDebit() { } catch (IOException e) { fail("IOException not expected"); - } catch (XPathExpressionException e) { - throw new RuntimeException(e); - } catch (ParseException e) { + } catch (XPathExpressionException | ParseException e) { throw new RuntimeException(e); } @@ -405,9 +400,27 @@ public void testImportMinimum() { } catch (IOException e) { fail("IOException not expected"); - } catch (XPathExpressionException e) { + } catch (XPathExpressionException | ParseException e) { throw new RuntimeException(e); - } catch (ParseException e) { + } + + + } + + public void testImportUBLCreditnote() { // Confirm some basics also work with UBL credit notes + File CIIinputFile = getResourceAsFile("ubl/UBL-CreditNote-2.1-Example.ubl.xml"); + try { + ZUGFeRDInvoiceImporter zii = new ZUGFeRDInvoiceImporter(new FileInputStream(CIIinputFile)); + + + CalculatedInvoice i = new CalculatedInvoice(); + zii.extractInto(i); + assertEquals("TOSL108", i.getNumber()); + assertEquals("729", i.getGrandTotal().toString()); + + } catch (IOException e) { + fail("IOException not expected"); + } catch (XPathExpressionException | ParseException e) { throw new RuntimeException(e); } @@ -437,6 +450,7 @@ public void testImportUBLCreditnote() { // Confirm some basics also work with UB } + @Test public void testImportPrepaid() throws XPathExpressionException, ParseException { InputStream inputStream = this.getClass() diff --git a/library/src/test/resources/factur-x-vis-extended.de.html b/library/src/test/resources/factur-x-vis-extended.de.html index ed5a147dd..d131da827 100644 --- a/library/src/test/resources/factur-x-vis-extended.de.html +++ b/library/src/test/resources/factur-x-vis-extended.de.html @@ -1,2422 +1,2921 @@ <!DOCTYPE HTML> -<html xmlns:xr="urn:ce.eu:en16931:2017:xoev-de:kosit:standard:xrechnung-1" - xmlns:xrv="http://www.example.org/XRechnung-Viewer" xmlns:xs="http://www.w3.org/2001/XMLSchema" lang="de"> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>XRechnung - - + +
+
+ -
-
-
-
Gesamtbeträge der Rechnung
-
-
-
Summe aller Positionen
-
netto
-
410,10
-
-
-
Summe Nachlässe
-
netto
-
21,55
-
-
-
Summe Zuschläge
-
netto
-
- 15,00 -
-
-
-
Gesamtsumme
-
netto
-
403,55
-
-
-
Summe Umsatzsteuer
-
-
-
-
-
Summe Umsatzsteuer in - Abrechnungswährung -
-
-
- 76,67 -
-
-
-
Gesamtsumme
-
brutto
-
480,22
-
-
-
Gezahlter Betrag
-
brutto
-
0,00
-
-
-
Rundungsbetrag
-
brutto
-
-
-
-
Fälliger Betrag
-
brutto
-
480,22 -
-
-
-
-
-
-
-
-
-
Aufschlüsselung der Umsatzsteuer auf Ebene der - Rechnung + +
+
+
Wir übernehmen keine Haftung für die Richtigkeit der Daten.
+
+
+
+
Informationen zum Käufer
+
+
+
Käuferreferenz: +
+
+
+
+
Name: +
+
MUSTER-KUNDE GMBH
+
+
+
Adresszeile 1: +
+
KUNDENWEG 88
+
+
+
Adresszeile 2: +
+
+
+
+
Adresszeile 3: +
+
+
+
+
PLZ: +
+
40235
+
+
+
Ort: +
+
DUESSELDORF
+
+
+
Bundesland: +
+
+
+
+
Ländercode: +
+
DE (Deutschland)
+
+
+
Kennung: +
+
4304171000002
+
+
+
Schema der Kennung: +
+
0088 (EAN Location Code)
+
+
+
Name: +
+
+
+
+
Telefon: +
+
+
+
+
E-Mail-Adresse: +
+
+
+
-
-
-
Umsatzsteuerkategorie: S (Standard rate) -
-
-
-
-
-
Gesamtsumme
-
netto
-
403,55
-
-
-
Umsatzsteuersatz
-
-
19.00%
-
-
-
Umsatzsteuerbetrag
-
-
76,67
-
+
+
+
Informationen zum Verkäufer
+
+
+
+
+
+
+
Firmenname: +
+
MUSTERLIEFERANT GMBH
+
+
+
Adresszeile 1: +
+
BAHNHOFSTRASSE 99
+
+
+
Adresszeile 2: +
+
+
+
+
Adresszeile 3: +
+
+
+
+
PLZ: +
+
99199
+
+
+
Ort: +
+
MUSTERHAUSEN
+
+
+
Bundesland: +
+
+
+
+
Ländercode: +
+
DE (Deutschland)
+
+
+
Kennung: +
+
549910
+
+
+
Schema der Kennung: +
+
+
+
+
Kennung: +
+
4333741000005
+
+
+
Schema der Kennung: +
+
0088 (EAN Location Code)
+
+
+
Name: +
+
+
+
+
Telefon: +
+
+49 932 431 500
+
+
+
E-Mail-Adresse: +
+
max.mustermann@musterlieferant.de
+
+
-
-
Befreiungsgrund:
-
Kennung für den Befreiungsgrund: -
+
+
+
+
+
+
Rechnungsdaten
+
+
+
+
+
Rechnungsnummer: +
+
KR87654321012
+
+
+
Rechnungsdatum: +
+
15.11.2024
+
+
+
Rechnungsart: +
+
380 (Commercial invoice)
+
+
+
Währung: +
+
EUR (Euro)
+
+
+
Abrechnungsdatum der Umsatzsteuer: +
+
+
+
+
Code des Umsatzsteuer-Abrechnungsdatums: +
+
+
+
Abrechnungszeitraum: +
+
+
Von: +
+
+
+
+
Bis: +
+
+
+
+
+
+
+
+
+
+
+
Projektnummer: +
+
+
+
+
Vertragsnummer: +
+
+
+
+
Bestellnummer: +
+
+
+
+
Auftragsnummer: +
+
+
+
+
+
-
-
-
-
-
-
-
Nachlass auf Ebene der Rechnung
-
-
-
Umsatzsteuerkategorie des Nachlasses: S (Standard rate)
-
-
-
-
-
Grundbetrag
-
netto
-
410,10
-
-
-
Prozentsatz
-
-
%
-
-
-
Nachlass
-
netto
-
21,55
-
-
-
Umsatzsteuersatz des Nachlasses
-
-
19.00
-
+
+
+
+
+
+
+
Gesamtbeträge der Rechnung
+
+
+
Summe aller Positionen
+
netto
+
410,10
+
+
+
Summe Nachlässe
+
netto
+
21,55
+
+
+
Summe Zuschläge
+
netto
+
15,00
+
+
+
Gesamtsumme
+
netto
+
403,55
+
+
+
Summe Umsatzsteuer
+
+
76,67
+
+
+
Summe Umsatzsteuer in Abrechnungswährung
+
+
+
+
+
Gesamtsumme
+
brutto
+
480,22
+
+
+
Gezahlter Betrag
+
brutto
+
0,00
+
+
+
Rundungsbetrag
+
brutto
+
+
+
+
Summe Fremdforderungen
+
+
0,00
+
+
+
Fälliger Betrag
+
brutto
+
480,22
+
+
-
-
Grund für den Nachlass: Sonderrabatt -
-
Document level allowance reason code:
+
+
+
+
+
+
Aufschlüsselung der Umsatzsteuer auf Ebene der Rechnung
+
+
+
Umsatzsteuerkategorie: + S (Standard rate)
+
+
+
+
+
Gesamtsumme
+
netto
+
403,55
+
+
+
Umsatzsteuersatz
+
+
19.00 % +
+
+
+
Umsatzsteuerbetrag
+
+
76,67
+
+
+
+
Befreiungsgrund: +
+
Kennung für den Befreiungsgrund: +
+
-
-
-
-
-
-
-
-
Versandkosten
-
-
-
Umsatzsteuerkategorie der Versandkosten: S (Standard rate)
-
-
-
-
-
Betrag
-
netto
-
15,00
-
-
-
Umsatzsteuersatz der Versandkosten
-
-
19.00
-
+
+
+
+
+
+
Nachlass auf Ebene der Rechnung
+
+
+
Umsatzsteuerkategorie des Nachlasses: + S (Standard rate)
+
+
+
+
+
Grundbetrag
+
netto
+
410,10
+
+
+
Prozentsatz
+
+
% +
+
+
+
Nachlass
+
netto
+
21,55
+
+
+
Umsatzsteuersatz des Nachlasses
+
+
19.00
+
+
+
+
Grund für den Nachlass: + Sonderrabatt
+
Kennung für den Nachlassgrund: +
+
-
-
Versandkostenbeschreibung: Transportkosten: Frachbetrag -
+
+
+
+
+
+
+
+
Zahlungsdaten
+
+
+
Skonto; weitere Zahlungsbedingungen: +
+
Skontovereinbarung: 2% bei Zahlung innerhalb 10 Tagen nach Rechnungsdatum
+
+
+
Fälligkeitsdatum: +
+
+
+
+
Code für das Zahlungsmittel: +
+
+
+
+
Zahlungsmittel: +
+
+
+
+
Verwendungszweck: +
+
+
+
-
-
-
-
-
-
-
-
Zahlungsdaten
-
-
-
Skonto; weitere Zahlungsbed.:
-
#SKONTO# TAGE =10#PROZENT=2.00# - Skontovereinbarung: 2% bei Zahlung innerhalb 10 Tagen nach Rechnungsdatum -
-
-
-
Fälligkeitsdatum:
-
-
-
-
Code für das Zahlungsmittel:
-
-
-
-
Zahlungsmittel:
-
-
-
-
Verwendungszweck:
-
-
+
+
Karteninformation
+
+
+
Kartennummer: +
+
+
+
+
Karteninhaber: +
+
+
+
-
-
-
Karteninformation
-
-
-
Kartennummer:
-
-
-
-
Karteninhaber:
-
-
+
+
+
+
+
+
Lastschrift
+
+
+
Mandatsreferenznr.: +
+
+
+
+
IBAN: +
+
+
+
+
Gläubiger-ID: +
+
+
+
-
-
-
-
-
-
-
Lastschrift
-
-
-
Mandatsreferenznr.:
-
-
-
-
IBAN:
-
-
-
-
Gläubiger-ID:
-
-
+
+
Überweisung
-
-
-
Überweisung
-
-
-
-
-
-
-
Bemerkung zur Rechnung
-
-
-
Betreff:
-
AAK (Price conditions)
-
-
-
Bemerkung:
-
Es bestehen Rabatt- oder - Bonusvereinbarungen. -
-
+
+
+
+
+
+
Bemerkungen zur Rechnung
+
+
+
Betreff: +
+
AAK (Price conditions)
+
+
+
Bemerkung: +
+
Es bestehen Rabatt- oder Bonusvereinbarungen.
+
+
-
-
-
Bemerkung zur Rechnung
-
-
-
Betreff:
-
AAJ (Additional conditions of - sale/purchase) -
-
-
-
Bemerkung:
-
Der Verkäufer bleibt Eigentümer der - Waren bis zur vollständigen Erfüllung der Kaufpreisforderung. -
-
+
+
Bemerkungen zur Rechnung
+
+
+
Betreff: +
+
AAJ (Additional conditions of sale/purchase)
+
+
+
Bemerkung: +
+
Der Verkäufer bleibt Eigentümer der Waren bis zur vollständigen Erfüllung der Kaufpreisforderung.
+
+
-
-
-
Bemerkung zur Rechnung
-
-
-
Betreff:
-
REG (Regulatory information)
-
-
-
Bemerkung:
-
MUSTERLIEFERANT GMBH BAHNHOFSTRASSE - 99 99199 MUSTERHAUSEN Geschäftsführung: Max Mustermann USt-IdNr: DE123456789 - Telefon: +49 932 431 0 www.musterlieferant.de HRB Nr. 372876 Amtsgericht Musterstadt +
+
Bemerkungen zur Rechnung
+
+
+
Betreff: +
+
REG (Regulatory information)
+
+
+
Bemerkung: +
+
MUSTERLIEFERANT GMBH + BAHNHOFSTRASSE 99 + 99199 MUSTERHAUSEN + Geschäftsführung: + Max Mustermann + USt-IdNr: DE123456789 + Telefon: +49 932 431 0 + www.musterlieferant.de + HRB Nr. 372876 + Amtsgericht Musterstadt GLN 4304171000002 -
-
-
-
-
-
-
-
-
Wir übernehmen keine Haftung für die Richtigkeit der Daten.
-
-
-
-
Position1
-
-
-
Freitext:
-
-
-
-
Objektkennung:
-
-
-
-
Schema der Objektkennung:
-
-
-
-
Nummer der Auftragsposition:
-
-
-
-
Kontierungshinweis /Kostenstelle:
-
-
-

Abrechnungszeitraum:

-
-
von:
-
-
-
-
bis:
-
-
-
-
-
-
Preiseinzelheiten
-
-
-
Menge
-
1000.0000
-
-
-
Einheit
-
KWH (kilowatt hour)
-
-
-
Preis pro Einheit (netto)
-
0,05
-
-
-
Gesamtpreis (netto)
-
52,00
-
-
-
-
-
Rabatt (netto):
-
-
-
-
Listenpreis (netto):
-
0,05
-
-
-
Anzahl der Einheit:
-
-
-
-
Code der Maßeinheit:
-
-
-
-
Umsatzsteuer:
-
S (Standard rate)
-
-
-
Umsatzsteuersatz in %:
-
19%
-
+
+
+
-
-
-
-
-
-
-
Nachlässe auf Ebene der - Rechnungsposition +
+
+
+
+
Wir übernehmen keine Haftung für die Richtigkeit der Daten.
+
+
+
+
Position: 1
+
+
+
Freitext: +
+
+
+
+
Objektkennung: +
+
+
+
+
Schema der Objektkennung: +
+
+
+
+
Nummer der Auftragsposition: +
+
+
+
+
Kontierungshinweis: +
+
+
+
Abrechnungszeitraum: +
+
+
Von: +
+
+
+
+
Bis: +
+
+
+
+
+
-
-
-
Zuschläge auf Ebene der - Rechnungsposition +
+
Preiseinzelheiten
+
+
+
Menge
+
1000.0000
+
+
+
Einheit
+
KWH (kilowatt hour)
+
+
+
Preis pro Einheit (netto)
+
0,052
+
+
+
Gesamtpreis (netto)
+
52,00
+
+
+
+
+
Rabatt (netto): +
+
+
+
+
Listenpreis (netto): +
+
0,052
+
+
+
Basismenge zum Artikelpreis: +
+
+
+
+
Code der Maßeinheit: +
+
+
+
+
Umsatzsteuer: +
+
S (Standard rate)
+
+
+
Umsatzsteuersatz: +
+
19,00 % +
+
+
-
-
-
-
-
-
-
Artikelinformationen
-
-
-
-
-
-
Bezeichnung:
-
Wirkarbeit HT -
-
-
-
Beschreibung:
-
-
-
-
Artikelnummer:
-
WA997
-
-
-
Kunden-Material-Nr.:
-
-
-

Eigenschaften des Artikels:

-
-
Zählpunkt
-
- DE0001346484600000000000000100038 -
-
-
-
-
-
-
-
-
Artikelkennung (EAN):
-
4123456000014
-
-
-
Schema der Artikelkennung:
-
- 0088 (EAN Location Code) -
-
-
-
Code der Artikelklassifizierung:
-
-
-
-
Kennung zur Bildung des Schemas:
-
-
-
-
Version zur Bildung des Schemas:
-
-
-
-
Code des Herkunftslandes:
-
-
-
-
-
+
+
+
+
+
+
Nachlässe auf Ebene der Rechnungsposition
-
-
-
-
-
-
-
Position2
-
-
-
Freitext:
-
-
-
-
Objektkennung:
-
-
-
-
Schema der Objektkennung:
-
-
-
-
Nummer der Auftragsposition:
-
-
-
-
Kontierungshinweis /Kostenstelle:
-
-
-

Abrechnungszeitraum:

-
-
von:
-
-
-
-
bis:
-
-
+
+
Zuschläge auf Ebene der Rechnungsposition
-
-
-
Preiseinzelheiten
-
-
-
Menge
-
1000.0000
-
-
-
Einheit
-
KWH (kilowatt hour)
-
-
-
Preis pro Einheit (netto)
-
0,02
-
-
-
Gesamtpreis (netto)
-
20,50
-
+
+
+
+
+
+
Artikelinformationen
+
+
+
+
+
+
Bezeichnung: +
+
Wirkarbeit HT
+
+
+
Beschreibung: +
+
+
+
+
Artikelnummer: +
+
WA997
+
+
+
Artikelkennung des Käufers: +
+
+
+
Eigenschaften des Artikels: +
+
Zählpunkt: +
+
DE0001346484600000000000000100038
+
+
+
+
+
+
+
+
+
Artikelkennung: +
+
4123456000014
+
+
+
Schema der Artikelkennung: +
+
0088 (EAN Location Code)
+
+
+
Code des Herkunftslandes: +
+
+
+
+
+
+
-
-
-
Rabatt (netto):
-
-
-
-
Listenpreis (netto):
-
0,02
-
-
-
Anzahl der Einheit:
-
-
-
-
Code der Maßeinheit:
-
-
-
-
Umsatzsteuer:
-
S (Standard rate)
-
-
-
Umsatzsteuersatz in %:
-
19%
-
+
+
+
+
+
+
Position: 2
+
+
+
Freitext: +
+
+
+
+
Objektkennung: +
+
+
+
+
Schema der Objektkennung: +
+
+
+
+
Nummer der Auftragsposition: +
+
+
+
+
Kontierungshinweis: +
+
+
+
Abrechnungszeitraum: +
+
+
Von: +
+
+
+
+
Bis: +
+
+
+
+
+
-
-
-
-
-
-
-
Nachlässe auf Ebene der - Rechnungsposition +
+
Preiseinzelheiten
+
+
+
Menge
+
1000.0000
+
+
+
Einheit
+
KWH (kilowatt hour)
+
+
+
Preis pro Einheit (netto)
+
0,0205
+
+
+
Gesamtpreis (netto)
+
20,50
+
+
+
+
+
Rabatt (netto): +
+
+
+
+
Listenpreis (netto): +
+
0,0205
+
+
+
Basismenge zum Artikelpreis: +
+
+
+
+
Code der Maßeinheit: +
+
+
+
+
Umsatzsteuer: +
+
S (Standard rate)
+
+
+
Umsatzsteuersatz: +
+
19,00 % +
+
+
-
-
-
Zuschläge auf Ebene der - Rechnungsposition +
+
+
+
+
+
Nachlässe auf Ebene der Rechnungsposition
-
-
-
-
-
-
-
Artikelinformationen
-
-
-
-
-
-
Bezeichnung:
-
Ökosteuer - Lieferant -
-
-
-
Beschreibung:
-
-
-
-
Artikelnummer:
-
ÖST250
-
-
-
Kunden-Material-Nr.:
-
-
-

Eigenschaften des Artikels:

-
-
-
-
-
-
Artikelkennung (EAN):
-
4123456000021
-
-
-
Schema der Artikelkennung:
-
- 0088 (EAN Location Code) -
-
-
-
Code der Artikelklassifizierung:
-
-
-
-
Kennung zur Bildung des Schemas:
-
-
-
-
Version zur Bildung des Schemas:
-
-
-
-
Code des Herkunftslandes:
-
-
-
-
-
+
+
Zuschläge auf Ebene der Rechnungsposition
-
-
-
-
-
-
-
Position3
-
-
-
Freitext:
-
-
-
-
Objektkennung:
-
-
-
-
Schema der Objektkennung:
-
-
-
-
Nummer der Auftragsposition:
-
-
-
-
Kontierungshinweis /Kostenstelle:
-
-
-

Abrechnungszeitraum:

-
-
von:
-
-
-
-
bis:
-
-
+
+
+
+
+
+
Artikelinformationen
+
+
+
+
+
+
Bezeichnung: +
+
Ökosteuer Lieferant
+
+
+
Beschreibung: +
+
+
+
+
Artikelnummer: +
+
ÖST250
+
+
+
Artikelkennung des Käufers: +
+
+
+
Eigenschaften des Artikels: +
+
+
+
+
+
+
+
Artikelkennung: +
+
4123456000021
+
+
+
Schema der Artikelkennung: +
+
0088 (EAN Location Code)
+
+
+
Code des Herkunftslandes: +
+
+
+
+
+
+
-
-
-
Preiseinzelheiten
-
-
-
Menge
-
27.5000
-
-
-
Einheit
-
HUR (hour)
-
-
-
Preis pro Einheit (netto)
-
10,50
-
-
-
Gesamtpreis (netto)
-
288,75
-
+
+
+
+
+
+
Position: 3
+
+
+
Freitext: +
+
+
+
+
Objektkennung: +
+
+
+
+
Schema der Objektkennung: +
+
+
+
+
Nummer der Auftragsposition: +
+
+
+
+
Kontierungshinweis: +
+
+
+
Abrechnungszeitraum: +
+
+
Von: +
+
+
+
+
Bis: +
+
+
+
+
+
-
-
-
Rabatt (netto):
-
4,50
-
-
-
Listenpreis (netto):
-
15,00
-
-
-
Anzahl der Einheit:
-
-
-
-
Code der Maßeinheit:
-
-
-
-
Umsatzsteuer:
-
S (Standard rate)
-
-
-
Umsatzsteuersatz in %:
-
19%
-
+
+
Preiseinzelheiten
+
+
+
Menge
+
27.5000
+
+
+
Einheit
+
HUR (hour)
+
+
+
Preis pro Einheit (netto)
+
10,5
+
+
+
Gesamtpreis (netto)
+
288,75
+
+
+
+
+
Rabatt (netto): +
+
4,50
+
+
+
Listenpreis (netto): +
+
15
+
+
+
Basismenge zum Artikelpreis: +
+
+
+
+
Code der Maßeinheit: +
+
+
+
+
Umsatzsteuer: +
+
S (Standard rate)
+
+
+
Umsatzsteuersatz: +
+
19,00 % +
+
+
-
-
-
-
-
-
-
Nachlässe auf Ebene der - Rechnungsposition +
+
+
+
+
+
Nachlässe auf Ebene der Rechnungsposition
-
-
-
Zuschläge auf Ebene der - Rechnungsposition +
+
Zuschläge auf Ebene der Rechnungsposition
-
-
-
-
-
-
-
Artikelinformationen
-
-
-
-
-
-
Bezeichnung:
-
Kommissionierer - 1250032 D. Muster -
-
-
-
Beschreibung:
-
Besteller: Hr. Mayer, - Personalnr. 4488 -
-
-
-
Artikelnummer:
-
-
-
-
Kunden-Material-Nr.:
-
-
-

Eigenschaften des Artikels:

-
-
-
-
-
-
Artikelkennung (EAN):
-
4260331811362
-
-
-
Schema der Artikelkennung:
-
- 0088 (EAN Location Code) -
-
-
-
Code der Artikelklassifizierung:
-
-
-
-
Kennung zur Bildung des Schemas:
-
-
-
-
Version zur Bildung des Schemas:
-
-
-
-
Code des Herkunftslandes:
-
-
-
-
-
+
+
+
+
+
+
Artikelinformationen
+
+
+
+
+
+
Bezeichnung: +
+
Kommissionierer 1250032 D. Muster
+
+
+
Beschreibung: +
+
Besteller: Hr. Mayer, Personalnr. 4488
+
+
+
Artikelnummer: +
+
+
+
+
Artikelkennung des Käufers: +
+
+
+
Eigenschaften des Artikels: +
+
+
+
+
+
+
+
Artikelkennung: +
+
4260331811362
+
+
+
Schema der Artikelkennung: +
+
0088 (EAN Location Code)
+
+
+
Code des Herkunftslandes: +
+
+
+
+
+
+
-
-
-
-
-
-
-
Position4
-
-
-
Freitext:
-
-
-
-
Objektkennung:
-
-
-
-
Schema der Objektkennung:
-
-
-
-
Nummer der Auftragsposition:
-
-
-
-
Kontierungshinweis /Kostenstelle:
-
-
-

Abrechnungszeitraum:

-
-
von:
-
-
-
-
bis:
-
-
+
+
+
+
+
+
Position: 4
+
+
+
Freitext: +
+
+
+
+
Objektkennung: +
+
+
+
+
Schema der Objektkennung: +
+
+
+
+
Nummer der Auftragsposition: +
+
+
+
+
Kontierungshinweis: +
+
+
+
Abrechnungszeitraum: +
+
+
Von: +
+
+
+
+
Bis: +
+
+
+
+
+
-
-
-
Preiseinzelheiten
-
-
-
Menge
-
3500.0000
-
-
-
Einheit
-
H87 (piece)
-
-
-
Preis pro Einheit (netto)
-
0,01
-
-
-
Gesamtpreis (netto)
-
36,75
-
+
+
Preiseinzelheiten
+
+
+
Menge
+
3500.0000
+
+
+
Einheit
+
H87 (piece)
+
+
+
Preis pro Einheit (netto)
+
0,0105
+
+
+
Gesamtpreis (netto)
+
36,75
+
+
+
+
+
Rabatt (netto): +
+
+
+
+
Listenpreis (netto): +
+
0,0105
+
+
+
Basismenge zum Artikelpreis: +
+
+
+
+
Code der Maßeinheit: +
+
+
+
+
Umsatzsteuer: +
+
S (Standard rate)
+
+
+
Umsatzsteuersatz: +
+
19,00 % +
+
+
-
-
-
Rabatt (netto):
-
-
-
-
Listenpreis (netto):
-
0,01
-
-
-
Anzahl der Einheit:
-
-
-
-
Code der Maßeinheit:
-
-
-
-
Umsatzsteuer:
-
S (Standard rate)
-
-
-
Umsatzsteuersatz in %:
-
19%
-
+
+
+
+
+
+
Nachlässe auf Ebene der Rechnungsposition
-
-
-
-
-
-
-
Nachlässe auf Ebene der - Rechnungsposition +
+
Zuschläge auf Ebene der Rechnungsposition
-
-
-
Zuschläge auf Ebene der - Rechnungsposition +
+
+
+
+
+
Artikelinformationen
+
+
+
+
+
+
Bezeichnung: +
+
FALTENBEUTEL 16x6x28 CM
+
+
+
Beschreibung: +
+
+
+
+
Artikelnummer: +
+
FB05
+
+
+
Artikelkennung des Käufers: +
+
+
+
Eigenschaften des Artikels: +
+
+
+
+
+
+
+
Artikelkennung: +
+
2001015001325
+
+
+
Schema der Artikelkennung: +
+
0088 (EAN Location Code)
+
+
+
Code des Herkunftslandes: +
+
+
+
+
+
+
-
-
-
-
-
-
-
Artikelinformationen
-
-
-
-
-
-
Bezeichnung:
-
FALTENBEUTEL - 16x6x28 CM -
-
-
-
Beschreibung:
-
-
-
-
Artikelnummer:
-
FB05
-
-
-
Kunden-Material-Nr.:
-
-
-

Eigenschaften des Artikels:

-
-
-
-
-
-
Artikelkennung (EAN):
-
2001015001325
-
-
-
Schema der Artikelkennung:
-
- 0088 (EAN Location Code) -
-
-
-
Code der Artikelklassifizierung:
-
-
-
-
Kennung zur Bildung des Schemas:
-
-
-
-
Version zur Bildung des Schemas:
-
-
-
-
Code des Herkunftslandes:
-
-
-
-
-
+
+
+
+
+
+
Position: 5
+
+
+
Freitext: +
+
+
+
+
Objektkennung: +
+
+
+
+
Schema der Objektkennung: +
+
+
+
+
Nummer der Auftragsposition: +
+
+
+
+
Kontierungshinweis: +
+
+
+
Abrechnungszeitraum: +
+
+
Von: +
+
+
+
+
Bis: +
+
+
+
+
+
-
-
-
-
-
-
-
Position5
-
-
-
Freitext:
-
-
-
-
Objektkennung:
-
-
-
-
Schema der Objektkennung:
-
-
-
-
Nummer der Auftragsposition:
-
-
-
-
Kontierungshinweis /Kostenstelle:
-
-
-

Abrechnungszeitraum:

-
-
von:
-
-
-
-
bis:
-
-
+
+
Preiseinzelheiten
+
+
+
Menge
+
1210.0000
+
+
+
Einheit
+
H87 (piece)
+
+
+
Preis pro Einheit (netto)
+
0,01
+
+
+
Gesamtpreis (netto)
+
12,10
+
+
+
+
+
Rabatt (netto): +
+
+
+
+
Listenpreis (netto): +
+
0,01
+
+
+
Basismenge zum Artikelpreis: +
+
+
+
+
Code der Maßeinheit: +
+
+
+
+
Umsatzsteuer: +
+
S (Standard rate)
+
+
+
Umsatzsteuersatz: +
+
19,00 % +
+
+
-
-
-
Preiseinzelheiten
-
-
-
Menge
-
1210.0000
-
-
-
Einheit
-
H87 (piece)
-
-
-
Preis pro Einheit (netto)
-
0,01
-
-
-
Gesamtpreis (netto)
-
12,10
-
+
+
+
+
+
+
Nachlässe auf Ebene der Rechnungsposition
-
-
-
Rabatt (netto):
-
-
-
-
Listenpreis (netto):
-
0,01
-
-
-
Anzahl der Einheit:
-
-
-
-
Code der Maßeinheit:
-
-
-
-
Umsatzsteuer:
-
S (Standard rate)
-
-
-
Umsatzsteuersatz in %:
-
19%
-
+
+
Zuschläge auf Ebene der Rechnungsposition
-
-
-
-
-
-
-
Nachlässe auf Ebene der - Rechnungsposition +
+
+
+
+
+
Artikelinformationen
+
+
+
+
+
+
Bezeichnung: +
+
Kopierpapier A4
+
+
+
Beschreibung: +
+
Zählerstand von-bis: 543210 - 544420
+
+
+
Artikelnummer: +
+
KOP05
+
+
+
Artikelkennung des Käufers: +
+
+
+
Eigenschaften des Artikels: +
+
Zähler-Nr.: +
+
MG-X79318
+
+
+
+
+
+
+
+
+
Artikelkennung: +
+
4123456000038
+
+
+
Schema der Artikelkennung: +
+
0088 (EAN Location Code)
+
+
+
Code des Herkunftslandes: +
+
+
+
+
+
+
-
-
-
Zuschläge auf Ebene der - Rechnungsposition +
+
+
+
+
Wir übernehmen keine Haftung für die Richtigkeit der Daten.
+
+
+
+
Informationen zum Verkäufer
+
+
+
Abweichender Handelsname: +
+
+
+
+
Bundesland: +
+
+
+
+
Elektronische Adresse: +
+
+
+
+
Schema der elektronischen Adresse: +
+
+
+
+
Register-/Registriernummer: +
+
+
+
+
Schema der Registernummer: +
+
+
+
+
Umsatzsteuer-ID: +
+
+
+
+
Steuernummer: +
+
201/113/40209
+
+
+
Weitere rechtliche Informationen: +
+
+
+
+
Code der Umsatzsteuerwährung: +
+
+
+
-
-
-
-
-
-
-
Artikelinformationen
-
-
-
-
-
-
Bezeichnung:
-
Kopierpapier A4 -
-
-
-
Beschreibung:
-
Zählerstand von-bis: - 543210 - 544420 -
-
-
-
Artikelnummer:
-
KOP05
-
-
-
Kunden-Material-Nr.:
-
-
-

Eigenschaften des Artikels:

-
-
Zähler-Nr.
-
MG-X79318
-
-
-
-
-
-
-
-
Artikelkennung (EAN):
-
4123456000038
-
-
-
Schema der Artikelkennung:
-
- 0088 (EAN Location Code) -
-
-
-
Code der Artikelklassifizierung:
-
-
-
-
Kennung zur Bildung des Schemas:
-
-
-
-
Version zur Bildung des Schemas:
-
-
-
-
Code des Herkunftslandes:
-
-
-
-
-
+
+
+
+
+
+
+
Informationen zum Käufer
+
+
+
Abweichender Handelsname: +
+
+
+
+
Bundesland: +
+
+
+
+
Elektronische Adresse: +
+
+
+
+
Schema der elektronischen Adresse: +
+
+
+
+
Register-/Registriernummer: +
+
+
+
+
Schema der Register-/Registriernummer: +
+
+
+
+
Umsatzsteuer-ID: +
+
+
+
+
Kontierungsinformation: +
+
+
+
-
-
-
-
-
-
Wir übernehmen keine Haftung für die Richtigkeit der Daten.
-
-
-
-
Informationen zum Verkäufer
-
-
-
Abweichender Handelsname:
-
-
-
-
Bundesland:
-
-
-
-
Elektronische Adresse:
-
-
-
-
Schema der elektronischen Adresse:
-
-
-
-
Register-/Registriernummer:
-
-
-
-
Umsatzsteuer-ID:
-
-
-
-
Steuernummer:
-
201/113/40209
-
-
-
Schema der Steuernummer:
-
-
-
-
Weitere rechtliche Informationen:
-
-
-
-
Code der Umsatzsteuerwährung:
-
-
+
+
+
Lieferinformationen
+
+
+
Kennung des Lieferorts: +
+
4304171088093
+
+
+
Schema der Kennung: +
+
0088
+
+
+
Lieferdatum: +
+
30.10.2024
+
+
+
Name des Empfängers: +
+
MUSTER-MARKT
+
+
+
Adresszeile 1: +
+
HAUPTSTRASSE 44
+
+
+
Adresszeile 2: +
+
+
+
+
Adresszeile 3: +
+
+
+
+
PLZ: +
+
31157
+
+
+
Ort: +
+
SARSTEDT
+
+
+
Bundesland: +
+
+
+
+
Ländercode: +
+
DE (Deutschland)
+
+
-
-
-
-
-
-
-
-
Informationen zum Käufer
-
-
-
Abweichender Handelsname:
-
-
-
-
Bundesland:
-
-
-
-
Elektronische Adresse:
-
-
-
-
Schema der elektronischen Adresse:
-
-
-
-
Register-/Registriernummer:
-
-
-
-
Schema der Register-/Registriernummer:
-
-
-
-
Umsatzsteuer-ID:
-
-
-
-
Abrechnungsdatum der Umsatzsteuer:
-
-
-
-
Code des Umsatzsteuer-Abrechnungsdatums:
-
-
-
-
Kontierungsinformation / Kostenstelle:
-
-
+
+
+
+
+
+
Informationen zum Vertrag
+
+
+
Vergabenummer: +
+
+
+
+
Kennung der Empfangsbestätigung: +
+
+
+
+
Kennung der Versandanzeige: +
+
+
+
+
Prozesskennung: +
+
+
+
+
Spezifikationskennung: +
+
urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended
+
+
+
Objektkennung: +
+
A777123
+
+
+
Schema der Objektkennung: +
+
+
+
-
-
-
-
Lieferinformationen
-
-
-
Kennung des Lieferorts:
-
4304171088093
-
-
-
Schema der Kennung:
-
0088
-
-
-
Lieferdatum:
-
30.10.2024
-
-
-
Name des Empfängers:
-
MUSTER-MARKT
-
-
-
Straße / Haus-Nr.:
-
HAUPTSTRASSE 44
-
-
-
Postfach:
-
-
-
-
Adresszusatz:
-
-
-
-
PLZ:
-
31157
-
-
-
Ort:
-
SARSTEDT
-
-
-
Bundesland:
-
-
-
-
Land:
-
DE (Deutschland)
-
+
+
+
+
+
+
Wir übernehmen keine Haftung für die Richtigkeit der Daten.
+
+
+
+
Rechnungsbegründende Unterlagen
-
-
-
-
-
-
-
Vertragsdaten
-
-
-
Vergabenummer:
-
-
-
-
Kennung der Empfangsbestätigung:
-
-
-
-
Kennung der Versandanzeige:
-
-
-
-
Kennung des Lieferscheins:
-
L87654321012 vom 31.10.2024
-
-
-
Prozesskennung:
-
-
-
-
Spezifikationskennung:
-
- urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended -
-
-
-
Objektkennung:
-
A777123
-
-
-
Schema der Objektkennung:
-
-
+
+
+
+
+
+
+
+
Bearbeitungshistorie
-
-
-
+
+
+
-
-
-
Wir übernehmen keine Haftung für die Richtigkeit der Daten.
-
-
-
-
Rechnungsbegründende Unterlagen
-
-
-
-
-
-
-
-
-
Bearbeitungshistorie
-
-
-
-
-
-
- - +
+
+ diff --git a/library/src/test/resources/factur-x-vis-extended.de.html.bak b/library/src/test/resources/factur-x-vis-extended.de.html.bak new file mode 100644 index 000000000..ed5a147dd --- /dev/null +++ b/library/src/test/resources/factur-x-vis-extended.de.html.bak @@ -0,0 +1,2422 @@ + + + + + XRechnung + + + + +
+ +
+
+
+
+
Wir übernehmen keine Haftung für die Richtigkeit der Daten.
+
+
+
+
Informationen zum Käufer
+
+
+
Leitweg-ID:
+
+
+
+
Name:
+
MUSTER-KUNDE GMBH
+
+
+
Straße / Haus-Nr.:
+
KUNDENWEG 88
+
+
+
Postfach:
+
+
+
+
Adresszusatz:
+
+
+
+
PLZ:
+
40235
+
+
+
Ort:
+
DUESSELDORF
+
+
+
Bundesland:
+
+
+
+
Land:
+
DE (Deutschland)
+
+
+
Kennung / Kunden-Nr.:
+
4304171000002
+
+
+
Schema der Kennung:
+
0088 (EAN + Location Code) +
+
+
+
Name:
+
+
+
+
Telefon:
+
+
+
+
E-Mail-Adresse:
+
+
+
+
+
+
+
Informationen zum Verkäufer
+
+
+
+
+
+
+
Firmenname:
+
MUSTERLIEFERANT GMBH
+
+
+
Straße / Haus-Nr.:
+
BAHNHOFSTRASSE 99
+
+
+
Postfach:
+
+
+
+
Adresszusatz:
+
+
+
+
PLZ:
+
99199
+
+
+
Ort:
+
MUSTERHAUSEN
+
+
+
Bundesland:
+
+
+
+
Ländercode:
+
DE (Deutschland)
+
+
+
Kennung:
+
4333741000005
+
+
+
Schema der Kennung:
+
0088 (EAN + Location Code) +
+
+
+
Name:
+
+
+
+
Telefon:
+
+49 932 431 500
+
+
+
E-Mail-Adresse:
+
max.mustermann@musterlieferant.de +
+
+
+
+
+
+
+
+
+
Rechnungsdaten
+
+
+
+
+
Rechnungsnummer:
+
KR87654321012
+
+
+
Rechnungsdatum:
+
15.11.2024
+
+
+
Rechnungsart:
+
380 (Commercial invoice)
+
+
+
Währung
+
EUR (Euro)
+
+
+

Abrechnungszeitraum:

+
+
+
von:
+
+
+
+
bis:
+
+
+
+
+
+
+
+
+
Projektnummer:
+
+
+
+
Vertragsnummer:
+
+
+
+
Bestellnummer:
+
+
+
+
Auftragsnummer:
+
+
+
+

Vorausgegangene Rechnungen:

+
+
+
+
+
+
+
+
+
Gesamtbeträge der Rechnung
+
+
+
Summe aller Positionen
+
netto
+
410,10
+
+
+
Summe Nachlässe
+
netto
+
21,55
+
+
+
Summe Zuschläge
+
netto
+
+ 15,00 +
+
+
+
Gesamtsumme
+
netto
+
403,55
+
+
+
Summe Umsatzsteuer
+
+
+
+
+
Summe Umsatzsteuer in + Abrechnungswährung +
+
+
+ 76,67 +
+
+
+
Gesamtsumme
+
brutto
+
480,22
+
+
+
Gezahlter Betrag
+
brutto
+
0,00
+
+
+
Rundungsbetrag
+
brutto
+
+
+
+
Fälliger Betrag
+
brutto
+
480,22 +
+
+
+
+
+
+
+
+
+
Aufschlüsselung der Umsatzsteuer auf Ebene der + Rechnung +
+
+
+
Umsatzsteuerkategorie: S (Standard rate) +
+
+
+
+
+
Gesamtsumme
+
netto
+
403,55
+
+
+
Umsatzsteuersatz
+
+
19.00%
+
+
+
Umsatzsteuerbetrag
+
+
76,67
+
+
+
+
Befreiungsgrund:
+
Kennung für den Befreiungsgrund: +
+
+
+
+
+
+
+
+
Nachlass auf Ebene der Rechnung
+
+
+
Umsatzsteuerkategorie des Nachlasses: S (Standard rate)
+
+
+
+
+
Grundbetrag
+
netto
+
410,10
+
+
+
Prozentsatz
+
+
%
+
+
+
Nachlass
+
netto
+
21,55
+
+
+
Umsatzsteuersatz des Nachlasses
+
+
19.00
+
+
+
+
Grund für den Nachlass: Sonderrabatt +
+
Document level allowance reason code:
+
+
+
+
+
+
+
+
+
Versandkosten
+
+
+
Umsatzsteuerkategorie der Versandkosten: S (Standard rate)
+
+
+
+
+
Betrag
+
netto
+
15,00
+
+
+
Umsatzsteuersatz der Versandkosten
+
+
19.00
+
+
+
+
Versandkostenbeschreibung: Transportkosten: Frachbetrag +
+
+
+
+
+
+
+
+
+
Zahlungsdaten
+
+
+
Skonto; weitere Zahlungsbed.:
+
#SKONTO# TAGE =10#PROZENT=2.00# + Skontovereinbarung: 2% bei Zahlung innerhalb 10 Tagen nach Rechnungsdatum +
+
+
+
Fälligkeitsdatum:
+
+
+
+
Code für das Zahlungsmittel:
+
+
+
+
Zahlungsmittel:
+
+
+
+
Verwendungszweck:
+
+
+
+
+
+
Karteninformation
+
+
+
Kartennummer:
+
+
+
+
Karteninhaber:
+
+
+
+
+
+
+
+
+
+
Lastschrift
+
+
+
Mandatsreferenznr.:
+
+
+
+
IBAN:
+
+
+
+
Gläubiger-ID:
+
+
+
+
+
+
Überweisung
+
+
+
+
+
+
+
Bemerkung zur Rechnung
+
+
+
Betreff:
+
AAK (Price conditions)
+
+
+
Bemerkung:
+
Es bestehen Rabatt- oder + Bonusvereinbarungen. +
+
+
+
+
+
Bemerkung zur Rechnung
+
+
+
Betreff:
+
AAJ (Additional conditions of + sale/purchase) +
+
+
+
Bemerkung:
+
Der Verkäufer bleibt Eigentümer der + Waren bis zur vollständigen Erfüllung der Kaufpreisforderung. +
+
+
+
+
+
Bemerkung zur Rechnung
+
+
+
Betreff:
+
REG (Regulatory information)
+
+
+
Bemerkung:
+
MUSTERLIEFERANT GMBH BAHNHOFSTRASSE + 99 99199 MUSTERHAUSEN Geschäftsführung: Max Mustermann USt-IdNr: DE123456789 + Telefon: +49 932 431 0 www.musterlieferant.de HRB Nr. 372876 Amtsgericht Musterstadt + GLN 4304171000002 +
+
+
+
+
+
+
+
+
Wir übernehmen keine Haftung für die Richtigkeit der Daten.
+
+
+
+
Position1
+
+
+
Freitext:
+
+
+
+
Objektkennung:
+
+
+
+
Schema der Objektkennung:
+
+
+
+
Nummer der Auftragsposition:
+
+
+
+
Kontierungshinweis /Kostenstelle:
+
+
+

Abrechnungszeitraum:

+
+
von:
+
+
+
+
bis:
+
+
+
+
+
+
Preiseinzelheiten
+
+
+
Menge
+
1000.0000
+
+
+
Einheit
+
KWH (kilowatt hour)
+
+
+
Preis pro Einheit (netto)
+
0,05
+
+
+
Gesamtpreis (netto)
+
52,00
+
+
+
+
+
Rabatt (netto):
+
+
+
+
Listenpreis (netto):
+
0,05
+
+
+
Anzahl der Einheit:
+
+
+
+
Code der Maßeinheit:
+
+
+
+
Umsatzsteuer:
+
S (Standard rate)
+
+
+
Umsatzsteuersatz in %:
+
19%
+
+
+
+
+
+
+
+
+
Nachlässe auf Ebene der + Rechnungsposition +
+
+
+
Zuschläge auf Ebene der + Rechnungsposition +
+
+
+
+
+
+
+
Artikelinformationen
+
+
+
+
+
+
Bezeichnung:
+
Wirkarbeit HT +
+
+
+
Beschreibung:
+
+
+
+
Artikelnummer:
+
WA997
+
+
+
Kunden-Material-Nr.:
+
+
+

Eigenschaften des Artikels:

+
+
Zählpunkt
+
+ DE0001346484600000000000000100038 +
+
+
+
+
+
+
+
+
Artikelkennung (EAN):
+
4123456000014
+
+
+
Schema der Artikelkennung:
+
+ 0088 (EAN Location Code) +
+
+
+
Code der Artikelklassifizierung:
+
+
+
+
Kennung zur Bildung des Schemas:
+
+
+
+
Version zur Bildung des Schemas:
+
+
+
+
Code des Herkunftslandes:
+
+
+
+
+
+
+
+
+
+
+
+
+
Position2
+
+
+
Freitext:
+
+
+
+
Objektkennung:
+
+
+
+
Schema der Objektkennung:
+
+
+
+
Nummer der Auftragsposition:
+
+
+
+
Kontierungshinweis /Kostenstelle:
+
+
+

Abrechnungszeitraum:

+
+
von:
+
+
+
+
bis:
+
+
+
+
+
+
Preiseinzelheiten
+
+
+
Menge
+
1000.0000
+
+
+
Einheit
+
KWH (kilowatt hour)
+
+
+
Preis pro Einheit (netto)
+
0,02
+
+
+
Gesamtpreis (netto)
+
20,50
+
+
+
+
+
Rabatt (netto):
+
+
+
+
Listenpreis (netto):
+
0,02
+
+
+
Anzahl der Einheit:
+
+
+
+
Code der Maßeinheit:
+
+
+
+
Umsatzsteuer:
+
S (Standard rate)
+
+
+
Umsatzsteuersatz in %:
+
19%
+
+
+
+
+
+
+
+
+
Nachlässe auf Ebene der + Rechnungsposition +
+
+
+
Zuschläge auf Ebene der + Rechnungsposition +
+
+
+
+
+
+
+
Artikelinformationen
+
+
+
+
+
+
Bezeichnung:
+
Ökosteuer + Lieferant +
+
+
+
Beschreibung:
+
+
+
+
Artikelnummer:
+
ÖST250
+
+
+
Kunden-Material-Nr.:
+
+
+

Eigenschaften des Artikels:

+
+
+
+
+
+
Artikelkennung (EAN):
+
4123456000021
+
+
+
Schema der Artikelkennung:
+
+ 0088 (EAN Location Code) +
+
+
+
Code der Artikelklassifizierung:
+
+
+
+
Kennung zur Bildung des Schemas:
+
+
+
+
Version zur Bildung des Schemas:
+
+
+
+
Code des Herkunftslandes:
+
+
+
+
+
+
+
+
+
+
+
+
+
Position3
+
+
+
Freitext:
+
+
+
+
Objektkennung:
+
+
+
+
Schema der Objektkennung:
+
+
+
+
Nummer der Auftragsposition:
+
+
+
+
Kontierungshinweis /Kostenstelle:
+
+
+

Abrechnungszeitraum:

+
+
von:
+
+
+
+
bis:
+
+
+
+
+
+
Preiseinzelheiten
+
+
+
Menge
+
27.5000
+
+
+
Einheit
+
HUR (hour)
+
+
+
Preis pro Einheit (netto)
+
10,50
+
+
+
Gesamtpreis (netto)
+
288,75
+
+
+
+
+
Rabatt (netto):
+
4,50
+
+
+
Listenpreis (netto):
+
15,00
+
+
+
Anzahl der Einheit:
+
+
+
+
Code der Maßeinheit:
+
+
+
+
Umsatzsteuer:
+
S (Standard rate)
+
+
+
Umsatzsteuersatz in %:
+
19%
+
+
+
+
+
+
+
+
+
Nachlässe auf Ebene der + Rechnungsposition +
+
+
+
Zuschläge auf Ebene der + Rechnungsposition +
+
+
+
+
+
+
+
Artikelinformationen
+
+
+
+
+
+
Bezeichnung:
+
Kommissionierer + 1250032 D. Muster +
+
+
+
Beschreibung:
+
Besteller: Hr. Mayer, + Personalnr. 4488 +
+
+
+
Artikelnummer:
+
+
+
+
Kunden-Material-Nr.:
+
+
+

Eigenschaften des Artikels:

+
+
+
+
+
+
Artikelkennung (EAN):
+
4260331811362
+
+
+
Schema der Artikelkennung:
+
+ 0088 (EAN Location Code) +
+
+
+
Code der Artikelklassifizierung:
+
+
+
+
Kennung zur Bildung des Schemas:
+
+
+
+
Version zur Bildung des Schemas:
+
+
+
+
Code des Herkunftslandes:
+
+
+
+
+
+
+
+
+
+
+
+
+
Position4
+
+
+
Freitext:
+
+
+
+
Objektkennung:
+
+
+
+
Schema der Objektkennung:
+
+
+
+
Nummer der Auftragsposition:
+
+
+
+
Kontierungshinweis /Kostenstelle:
+
+
+

Abrechnungszeitraum:

+
+
von:
+
+
+
+
bis:
+
+
+
+
+
+
Preiseinzelheiten
+
+
+
Menge
+
3500.0000
+
+
+
Einheit
+
H87 (piece)
+
+
+
Preis pro Einheit (netto)
+
0,01
+
+
+
Gesamtpreis (netto)
+
36,75
+
+
+
+
+
Rabatt (netto):
+
+
+
+
Listenpreis (netto):
+
0,01
+
+
+
Anzahl der Einheit:
+
+
+
+
Code der Maßeinheit:
+
+
+
+
Umsatzsteuer:
+
S (Standard rate)
+
+
+
Umsatzsteuersatz in %:
+
19%
+
+
+
+
+
+
+
+
+
Nachlässe auf Ebene der + Rechnungsposition +
+
+
+
Zuschläge auf Ebene der + Rechnungsposition +
+
+
+
+
+
+
+
Artikelinformationen
+
+
+
+
+
+
Bezeichnung:
+
FALTENBEUTEL + 16x6x28 CM +
+
+
+
Beschreibung:
+
+
+
+
Artikelnummer:
+
FB05
+
+
+
Kunden-Material-Nr.:
+
+
+

Eigenschaften des Artikels:

+
+
+
+
+
+
Artikelkennung (EAN):
+
2001015001325
+
+
+
Schema der Artikelkennung:
+
+ 0088 (EAN Location Code) +
+
+
+
Code der Artikelklassifizierung:
+
+
+
+
Kennung zur Bildung des Schemas:
+
+
+
+
Version zur Bildung des Schemas:
+
+
+
+
Code des Herkunftslandes:
+
+
+
+
+
+
+
+
+
+
+
+
+
Position5
+
+
+
Freitext:
+
+
+
+
Objektkennung:
+
+
+
+
Schema der Objektkennung:
+
+
+
+
Nummer der Auftragsposition:
+
+
+
+
Kontierungshinweis /Kostenstelle:
+
+
+

Abrechnungszeitraum:

+
+
von:
+
+
+
+
bis:
+
+
+
+
+
+
Preiseinzelheiten
+
+
+
Menge
+
1210.0000
+
+
+
Einheit
+
H87 (piece)
+
+
+
Preis pro Einheit (netto)
+
0,01
+
+
+
Gesamtpreis (netto)
+
12,10
+
+
+
+
+
Rabatt (netto):
+
+
+
+
Listenpreis (netto):
+
0,01
+
+
+
Anzahl der Einheit:
+
+
+
+
Code der Maßeinheit:
+
+
+
+
Umsatzsteuer:
+
S (Standard rate)
+
+
+
Umsatzsteuersatz in %:
+
19%
+
+
+
+
+
+
+
+
+
Nachlässe auf Ebene der + Rechnungsposition +
+
+
+
Zuschläge auf Ebene der + Rechnungsposition +
+
+
+
+
+
+
+
Artikelinformationen
+
+
+
+
+
+
Bezeichnung:
+
Kopierpapier A4 +
+
+
+
Beschreibung:
+
Zählerstand von-bis: + 543210 - 544420 +
+
+
+
Artikelnummer:
+
KOP05
+
+
+
Kunden-Material-Nr.:
+
+
+

Eigenschaften des Artikels:

+
+
Zähler-Nr.
+
MG-X79318
+
+
+
+
+
+
+
+
Artikelkennung (EAN):
+
4123456000038
+
+
+
Schema der Artikelkennung:
+
+ 0088 (EAN Location Code) +
+
+
+
Code der Artikelklassifizierung:
+
+
+
+
Kennung zur Bildung des Schemas:
+
+
+
+
Version zur Bildung des Schemas:
+
+
+
+
Code des Herkunftslandes:
+
+
+
+
+
+
+
+
+
+
+
+
Wir übernehmen keine Haftung für die Richtigkeit der Daten.
+
+
+
+
Informationen zum Verkäufer
+
+
+
Abweichender Handelsname:
+
+
+
+
Bundesland:
+
+
+
+
Elektronische Adresse:
+
+
+
+
Schema der elektronischen Adresse:
+
+
+
+
Register-/Registriernummer:
+
+
+
+
Umsatzsteuer-ID:
+
+
+
+
Steuernummer:
+
201/113/40209
+
+
+
Schema der Steuernummer:
+
+
+
+
Weitere rechtliche Informationen:
+
+
+
+
Code der Umsatzsteuerwährung:
+
+
+
+
+
+
+
+
+
+
+
Informationen zum Käufer
+
+
+
Abweichender Handelsname:
+
+
+
+
Bundesland:
+
+
+
+
Elektronische Adresse:
+
+
+
+
Schema der elektronischen Adresse:
+
+
+
+
Register-/Registriernummer:
+
+
+
+
Schema der Register-/Registriernummer:
+
+
+
+
Umsatzsteuer-ID:
+
+
+
+
Abrechnungsdatum der Umsatzsteuer:
+
+
+
+
Code des Umsatzsteuer-Abrechnungsdatums:
+
+
+
+
Kontierungsinformation / Kostenstelle:
+
+
+
+
+
+
+
Lieferinformationen
+
+
+
Kennung des Lieferorts:
+
4304171088093
+
+
+
Schema der Kennung:
+
0088
+
+
+
Lieferdatum:
+
30.10.2024
+
+
+
Name des Empfängers:
+
MUSTER-MARKT
+
+
+
Straße / Haus-Nr.:
+
HAUPTSTRASSE 44
+
+
+
Postfach:
+
+
+
+
Adresszusatz:
+
+
+
+
PLZ:
+
31157
+
+
+
Ort:
+
SARSTEDT
+
+
+
Bundesland:
+
+
+
+
Land:
+
DE (Deutschland)
+
+
+
+
+
+
+
+
+
Vertragsdaten
+
+
+
Vergabenummer:
+
+
+
+
Kennung der Empfangsbestätigung:
+
+
+
+
Kennung der Versandanzeige:
+
+
+
+
Kennung des Lieferscheins:
+
L87654321012 vom 31.10.2024
+
+
+
Prozesskennung:
+
+
+
+
Spezifikationskennung:
+
+ urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended +
+
+
+
Objektkennung:
+
A777123
+
+
+
Schema der Objektkennung:
+
+
+
+
+
+
+
+
+
+
Wir übernehmen keine Haftung für die Richtigkeit der Daten.
+
+
+
+
Rechnungsbegründende Unterlagen
+
+
+
+
+
+
+
+
+
Bearbeitungshistorie
+
+
+
+
+
+
+ + + diff --git a/library/src/test/resources/factur-x-vis-ubl-creditnote.en.html b/library/src/test/resources/factur-x-vis-ubl-creditnote.en.html index 4c63e9c9f..1134c4574 100644 --- a/library/src/test/resources/factur-x-vis-ubl-creditnote.en.html +++ b/library/src/test/resources/factur-x-vis-ubl-creditnote.en.html @@ -1,2632 +1,3199 @@ - + - + XRechnung - - + -
- -
-
-
-
-
We accept no liability for the correctness of the data
-
-
-
-
Buyer Information
-
-
-
Routing ID:
-
-
-
-
Name:
-
The buyercompany inc.
-
-
-
Street / house number:
-
Anystreet
-
-
-
PO Box:
-
Back door
-
-
-
Address Addition:
-
-
-
-
Postcode:
-
101
-
-
-
Place:
-
Anytown
-
-
-
State/Province:
-
RegionB
-
-
-
Country:
-
BE (Belgien)
-
-
-
ID:
-
345KS5324
-
-
-
ID scheme:
-
ZZZ
-
-
-
Name:
-
-
-
-
Phone:
-
5121230
-
-
-
E-mail address:
-
john@buyercompany.eu
-
-
-
-
-
-
Seller Information
-
-
-
-
-
-
-
Company name:
-
The Sellercompany Incorporated
-
-
-
Street / house number:
-
Main street
-
-
-
PO Box:
-
Suite 123
-
-
-
Address Addition:
-
-
-
-
Code postal:
-
54321
-
-
-
Place:
-
Big city
-
-
-
State/Province:
-
-
-
-
Country code:
-
DK (Dänemark)
-
-
-
ID:
-
Supp123
-
-
-
ID scheme:
-
ZZZ
-
-
-
Name:
-
-
-
-
Phone:
-
4621230
-
-
-
E-mail address:
-
antonio@salescompany.dk
-
-
-
-
+
+
+