Giter VIP home page Giter VIP logo

Comments (5)

apenski avatar apenski commented on May 24, 2024

Ich erfasse momentan noch nicht, was mit createXR gemeint ist. Da brauchen wir noch mehr Input. Grundsätzlich besteht mit der bestehenden Umsetzung schon die Möglichkeit zur Visualisierung. Die XRechnung-Konfiguration nutzt beispielsweise intern HTML im Report (eingebettet in ein entsprechendes Element) um die Rechnung zu visualisieren (das XSLT erzeugt quasi XML, was innen drin wiederum HTML enthält). Es stehen darüberhinaus Funktionen zur Verfügung dieses HTML zu extrahieren:

  • per cmdline via Schalter
  • per API in dem Result auf DefaultResult gecasted wird und dann eine der extractHtml*-Methoden benutzt wird

from validator.

motom001 avatar motom001 commented on May 24, 2024

Danke für die Rückmeldung - da bin ich wohl etwas zu schnell eingestiegen.

Wie möchten die Komponente validator gern als REST-Webservice anbinden.
Im Webservice ist es möglich, die xRechung zu übergeben und einen entsprechenden Prüfbericht zurück zubekommen. In dem Prüfbericht ist auch HTML enthalten, das haben wir bereits gesehen.
Allerdings ist die Konvertierung zum zum einheitlichen Format (z.B. https://github.com/itplr-kosit/xrechnung-visualization/blob/master/src/xsl/cii-xr.xsl) nicht über den Webservice möglich.

Wir haben nach einer Möglichkeit gesucht, dass mit einer Webservice-Anfrage:

  1. xRechnung validiert
  2. Prüfbericht erstellt
  3. Dokument nach urn:ce.eu:en16931:2017:xoev-de:kosit:standard:xrechnung-1 erstellt
  4. die Visualisierung durchführt
  5. alle Informationen als ein Response zurückliefert

Deshalb war der erste Gedanke, neben dem vorhanden createReport Tag weitere Tags einzubauen.

  • createXR soll das Dokument nach urn:ce.eu:en16931:2017:xoev-de:kosit:standard:xrechnung-1 erstellen
  • createHTML soll die Visualisierung durchführen

Die ersten Versuche diese Anforderung selbst im Quellcode vorzunehmen, habe ich gestoppt.

  • XSD-Dateien müssten angepasst werden
  • ggf. neue createXrInput.xsd und createHtmlInput.xsd
  • neue CreateXrAction.java und CreateHtmlAction.java
  • die neuen Actions einbinden
    Das war zu viel Aufwand, für eine solche kleine Änderung.

Allerdings habe ich einen anderen Weg gefunden. Wenn die "Start-Templates" von z.B. cii-xr.xsl um einen mode="cii-to-xr-invoice-template" erweitert werden, dann kann diese cii-xr.xsl in die xrechnung-report.xsl importiert und im Template "documentData" eingebunden werden.

Import in der xrechnung-report.xsl erweitert um die entsprechenden xsl

    <xsl:import href="./default-report.xsl"/>
    <xsl:import href="./visualization/xsl/ubl-invoice-xr-org.xsl"/>
    <xsl:import href="./visualization/xsl/cii-xr.xsl"/>
    <xsl:import href="./visualization/xsl/xrechnung-html.xsl"/>

Möglichkeit für ein documentData

<xsl:template name="documentData">
        <rep:documentData>
            <xsl:call-template name="conversions">
                <xsl:with-param name="input-document"><xsl:copy-of select="$input-document"/></xsl:with-param>
                <xsl:with-param name="report-document"><xsl:copy-of select="."/></xsl:with-param>
            </xsl:call-template>
        </rep:documentData>
    </xsl:template>

Möglichkeit für ein conversions-Template

    <xsl:template name="conversions">
        <xsl:param name = "input-document" />
        <xsl:param name = "report-document" />
        <!-- 
            Suche nach //scenario/name
            allerdings sollen dabei die Namespaces ignoriert werden
            https://stackoverflow.com/a/4440519/10651549
        -->
        <xsl:variable name="ScenarioName" select="$report-document//*[local-name() = 'scenario']/*[local-name() = 'name']" as="xs:string"/>
        <Converions>
            <xsl:attribute name="scenario"><xsl:value-of select="$ScenarioName" /></xsl:attribute>
            <xsl:choose>
                <xsl:when test="$ScenarioName = 'EN16931 CIUS XRechnung (CII)'">
                    <xsl:variable name="ConversionToDefaultInvoice">
                        <xsl:apply-templates mode="cii-invoice-root" select="$input-document"/>
                    </xsl:variable>
                    <xsl:variable name="ConversionToHtmlInvoice">
                        <xsl:apply-templates mode="xr-to-html-template" select="$ConversionToDefaultInvoice"/>
                    </xsl:variable>
                    <Html>
                        <xsl:copy-of select="$ConversionToHtmlInvoice"/>
                    </Html>
                    <Default>
                        <xsl:copy-of select="$ConversionToDefaultInvoice"/>
                    </Default>
                </xsl:when>
                <xsl:when test="$ScenarioName = 'EN16931 CIUS XRechnung (UBL Invoice)'">
                    <xsl:variable name="ConversionToDefaultInvoice">
                        <xsl:apply-templates mode="ubl-invoice-root" select="$input-document"/>
                    </xsl:variable>
                    <xsl:variable name="ConversionToHtmlInvoice">
                        <xsl:apply-templates mode="xr-to-html-template" select="$ConversionToDefaultInvoice"/>
                    </xsl:variable>
                    <Html>
                        <xsl:copy-of select="$ConversionToHtmlInvoice"/>
                    </Html>
                    <Default>
                        <xsl:copy-of select="$ConversionToDefaultInvoice"/>
                    </Default>
                </xsl:when>
                <xsl:otherwise>
                    <Default status="failed" />
                    <Html status="failed" />
                </xsl:otherwise>
            </xsl:choose>
        </Converions>
    </xsl:template>

Dadurch werden mit einem Request alle Dokumente erstellt und als ein Response zurückgemeldet.

Probleme bisher sind allerdings noch unparsed-text() in der https://github.com/itplr-kosit/xrechnung-visualization/blob/master/src/xsl/xrechnung-html.xsl#L22

Diese führen dann zu

java.lang.NullPointerException: charsetName
        at java.base/java.io.InputStreamReader.<init>(InputStreamReader.java:99)
        at de.kosit.validationtool.impl.RelativeUriResolver.resolve(RelativeUriResolver.java:94)
        at net.sf.saxon.functions.UnparsedTextFunction.readFile(UnparsedTextFunction.java:69)

validator.log

Vielleicht kann man diesen issue #45 auch schließen und das Problem mit der NullPointerException in einem anderen aufnehmen, oder?

from validator.

apenski avatar apenski commented on May 24, 2024

beim NPE scheint es sich um einen Bug in Saxon zu handeln. Der RelativeUriResolver bekommt keinen charsetName von Saxon geliefert. Ich werd mir das bei Gelegenheit ansehen. Können Sie vielleicht ein Minimal-Beispiel mit dem Fehler zusammenstellen und gern ein neues Issue einstellen?

Es gibt einen rudimentären Daemon-Mode, der ein REST-Interface bereitstellt (siehe Doku). Für alles was darüberhinaus geht, gibt es aktuell keine Unterstützung durch die Kosit. Letztlich eine Frage der Finanzierung. Die KoSIT stellt mit dem validator und der Konfiguration eine Basis- bzw. Beispielimplementierung bereit. Sollte übergreifender Bedarf bestehen, dann bitte direkt an die KoSIT wenden.

from validator.

motom001 avatar motom001 commented on May 24, 2024

Das REST-Interface kennen wir bereits und haben dieses auch für einen Prototypen bei uns im Haus genutzt.

An den KoSIT an der Stelle ein großes Dankeschön. Die Bereitstellung des Validators, der Testsuite und der passenden Dokumentation hat uns sehr geholfen, das Thema überhaupt greifen und verstehen zu können. Mit Hilfe des Prüfberichtes und der Visualisierung konnte bisher jedem Buchhalter die Angst vor dem Unbekannten genommen werden. Danke!

Sofern der #46 gelöst werden könnte, könnten wir unsere Wünsche schon mit dem bestehenden validator abbilden. Deshalb schließe ich den issue hier.

from validator.

rkottmann avatar rkottmann commented on May 24, 2024

Unabhängig von organisatorischen Fragen, rate ich davon ab, so verschiedene Concerns wie Validierung, Visualisierung und Konvertierung so eng zu verzahnen, wie hier diskutiert. Ich erinnnere da nur an das Concept "Separation of Concerns".

Der Validator wird alleine deswegen, nie mehr als validieren. Die Prüfberichete sind genau deswegen schon separate Konfigurationen für den Validator, die sich prinzipiell jeder selber anpassen kann.

Die KoSIT veröffentlicht eine Validator Konfiguration XRechnung zum Zwecke der Zusammenfassung aller notwendigen Schritte um eine Standard konforme Validierung mit Bericht vorzunehmen. Mehr nicht. Wir können keine Annahmen über besondere (weitere) lokale Anforderungen bei der Bearbeitung von Rechnungen vornehmen.

Wir werden die Konfiguration nach den Erfordernissen des Standards weiterhin anpassen. U.a. planen wir, dass der Validator demnächst reine XVRL Dokumente erzeugt und Konfigurationen dies als Input für Ihre weitere Prüfbericht-Erstellungen nehmen.

Daher rate ich davon ab, eigene Anpassungen zu sehr von der aktuellen Konfiguration abhängig zu machen.

from validator.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.