Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   Wie prüfen ob PDF ZUGFeRD enthält? (https://www.delphipraxis.net/215628-wie-pruefen-ob-pdf-zugferd-enthaelt.html)

TurboMagic 8. Aug 2024 21:25

Wie prüfen ob PDF ZUGFeRD enthält?
 
Hallo,

mal angenommen ich schaue mir eine Buchhaltungssoftware an um PDF Rechnungen
für Lieferungen an Kunden erstellen zu können die auch ZUGFeRD Daten enthalten sollen.

Wie kann ich prüfen bzw. anzeigen ob diese Daten in der PDF tatsächlich drin sind und
wie diese aussehen?

haentschman 9. Aug 2024 05:56

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Moin...8-)
Zitat:

Wie kann ich prüfen bzw. anzeigen ob diese Daten in der PDF tatsächlich drin sind
...mit den aktuellen Anzeige Tools (Reader etc.) imho garnicht. :?
Ich habe das Thema auch auf dem Tisch. Ich werde eine Art "Vorprüfung" machen. Dort schaue ich mit DynPDF nach, ob ein XML eingebettet ist, und prüfe einfach nach ob der PDF Text (2-3 Summen) zum XML passt. Dann habe ich die "Eigenschaften" für das PDF in einem Object...XML Ja/Nein, stimmig Ja/Nein etc.
Zitat:

Wie kann ich prüfen bzw. anzeigen ob diese Daten in der PDF tatsächlich drin sind und wie diese aussehen?
Du kannst das mit dem Standard Tool für elektronische Rechungen auslesen. Wenn ein XML dranhängt, kannst du das XML anzeigen. Vorsicht! Wenn eine Rechnung in Papierform eine Seite hatte, kann diese im Tool schon mal 6 Seiten lang werden. Auch die Kontrolle der Positionen ist imho unübersichtlich für eine Prüfung...:?
https://quba-viewer.org/

:wink:

jaenicke 9. Aug 2024 05:57

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Es gibt Anbieter, die diese Informationen mit einem Online Viewer anzeigen, z.B. hier:
https://belegmeister.de/zugferd-e-re...line-anzeigen/
Und natürlich gibt es auch Offlinetools und Bibliotheken usw. dafür.

Papaschlumpf73 9. Aug 2024 06:24

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Und bis zur Einführung der verpflichtenden E-Rechnung im B2B-Geschäft am 01.01.2025 sollte das wohl auch jede Buchhaltungssoftware beherrschen. Wenn ich dann dort meine digitalen Belege (E-Rechnungen) buche, erwarte ich natürlich, dass die BH-Software die Beträge aus der XML-Datei ausliest und ich diese nicht mehr von der PDF-Ansicht abtippen muss. Wenn meine Buchhaltungssoftware das nicht hinbekommen sollte, fliegt sie raus.

Rollo62 9. Aug 2024 07:29

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Zitat:

Zitat von jaenicke (Beitrag 1539659)
Es gibt Anbieter, die diese Informationen mit einem Online Viewer anzeigen, z.B. hier:
https://belegmeister.de/zugferd-e-re...line-anzeigen/

Danke sehr, schöner Link.

Ich frage mich, warum damit die älteren Beispiele von MustangProjekt nicht funktionieren, erst anscheinend ab 2020.
https://www.mustangproject.org/zugferd/#samples

Insbesondere zum Download hier:
https://github.com/ZUGFeRD/corpus/tr...Mustangproject

PDF von 2020 scheint zu funktionieren, von 2019 nicht.
Ich dachte, da wäre auf jeden Fall immer die Kompatibilität gewahrt, sodass man auch ältere Files sauber lesen kann.
Der ursprüngliche Sinn war es doch 100% eindeutige, maschinenlesbare Dokumente zu bekommen, die auch nach Jahrzehnten noch funktionieren.

Oder habe ich da etwas falsch verstanden, und gibt es Inkompatibilitäten/Fehler in der Spezifikation?

jaenicke 9. Aug 2024 14:06

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Vielleicht werden für den Viewer neuere Teile der Spezifikation genutzt. Das heißt ja nicht unbedingt, dass das Tool ältere Dateien gar nicht lesen kann.

sh17 9. Aug 2024 15:07

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Also es gibt über die Zeit mehrere Namen, die so eine Datei haben kann. Hier mal die Variante, wie ich die Daten aus der PDF mit der PDFiumLib bekomme

Code:
    if (pdfView.PDFDocument <> nil) then
    if pdfView.PDFDocument.Active then
    if pdfView.PDFDocument.Attachments.Count > 0 then
    for i := 0 to pdfView.PDFDocument.Attachments.Count - 1 do
    if (Pos('.xml',LowerCase(pdfView.PDFDocument.Attachments[I].Name)) > 0) or
       (Pos('zugferd',LowerCase(pdfView.PDFDocument.Attachments[I].Name)) = 1) or
       (Pos('factur-x',LowerCase(pdfView.PDFDocument.Attachments[I].Name)) = 1) then
    try
      aStr := TMemoryStream.Create;
      try
        pdfView.PDFDocument.Attachments[I].SaveToStream(aStr);
        aStr.Seek(0,soFromBeginning);
        case TXRechnungValidationHelper.GetXRechnungVersion(aStr) of
          XRechnungVersion_230_UNCEFACT,
          XRechnungVersion_30x_UNCEFACT,
          XRechnungVersion_ReadingSupport_ZUGFeRDFacturX :
          begin
            zugferdCurrentInv2 := TInvoice.Create;
            TXRechnungInvoiceAdapter.LoadFromStream(zugferdCurrentInv2,aStr,error);
          end;
        end;
      finally
        aStr.Free;
      end;
      break;
    except
      on E:Exception do MessageDlg(E.Message+' '+e.ClassName, mtError, [mbOK], 0);
    end;
Ganz wild wird es bei alten Dokumenten, da kommt dann evtl. noch ZUGFeRD 1.0 ins Spiel. Keine schöne Sache

Rollo62 9. Aug 2024 15:17

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Es kommt
Zitat:

Hochgeladene Datei: MustangGnuaccountingBeispielRE-20190610_507.pdf

Keine E-Rechnungs-/ZUGFeRD-Daten gefunden.
Wenn die Datei OK ist, dann ist das keine sehr sinnvolle Meldung.

Ich habe es mal mit dem MustangProject MustangCLI überprüft: Zumindest sagt der schonmal Status "Valid"
Aber dann doch später "Invalid", gelistet ist es unter den Examples "Correct".

Delphi-Quellcode:
<?xml version="1.0" encoding="UTF-8"?>

<validation filename="invoice.pdf" datetime="2024-08-09 16:13:05">
  <pdf>ValidationResult [flavour=3u, totalAssertions=11261, assertions=[], isCompliant=true]
    <info>
      <signature>Mustang</signature>
      <duration unit="ms">1921</duration>
    </info>
    <summary status="valid"/>
  </pdf>
  <xml>
    <info>
      <version>2</version>
      <profile>urn:cen.eu:en16931:2017</profile>
      <validator version="2.12.0"/>
      <rules>
        <fired>130</fired>
        <failed>2</failed>
      </rules>
      <duration unit="ms">5532</duration>
    </info>
    <messages>
      <error type="18">schema validation fails:org.xml.sax.SAXParseException; lineNumber: 175; columnNumber: 37; cvc-complex-type.2.4.d: Ungültiger Content wurde beginnend mit Element 'ram:GermanBankleitzahlID' gefunden. An dieser Stelle wird kein untergeordnetes Element erwartet.</error>
      <error type="4" location="/*[local-name()='CrossIndustryInvoice']/*[local-name()='SupplyChainTradeTransaction']/*[local-name()='ApplicableHeaderTradeAgreement']/*[local-name()='SellerTradeParty']/*[local-name()='SpecifiedLegalOrganization']/*[local-name()='ID']" criterion="document('FACTUR-X_EN16931_codedb.xml')//cl[@id=11]/enumeration[@value=$codeValue11]">Value of '@schemeID' is not allowed. from /xslt/ZF_221/FACTUR-X_EN16931.xslt)</error>
      <error type="24" location="/*:CrossIndustryInvoice[namespace-uri()='urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'][1]/*:SupplyChainTradeTransaction[namespace-uri()='urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'][1]/*:ApplicableHeaderTradeAgreement[namespace-uri()='urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'][1]/*:SellerTradeParty[namespace-uri()='urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'][1]/*:SpecifiedLegalOrganization[namespace-uri()='urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'][1]/*:ID[namespace-uri()='urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'][1]" criterion="((not(contains(normalize-space(@schemeID), ' ')) and contains(' 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 0030 0031 0032 0033 0034 0035 0036 0037 0038 0039 0040 0041 0042 0043 0044 0045 0046 0047 0048 0049 0050 0051 0052 0053 0054 0055 0056 0057 0058 0059 0060 0061 0062 0063 0064 0065 0066 0067 0068 0069 0070 0071 0072 0073 0074 0075 0076 0077 0078 0079 0080 0081 0082 0083 0084 0085 0086 0087 0088 0089 0090 0091 0093 0094 0095 0096 0097 0098 0099 0100 0101 0102 0104 0105 0106 0107 0108 0109 0110 0111 0112 0113 0114 0115 0116 0117 0118 0119 0120 0121 0122 0123 0124 0125 0126 0127 0128 0129 0130 0131 0132 0133 0134 0135 0136 0137 0138 0139 0140 0141 0142 0143 0144 0145 0146 0147 0148 0149 0150 0151 0152 0153 0154 0155 0156 0157 0158 0159 0160 0161 0162 0163 0164 0165 0166 0167 0168 0169 0170 0171 0172 0173 0174 0175 0176 0177 0178 0179 0180 0183 0184 0185 0186 0187 0188 0189 0190 0191 0192 0193 0194 0195 0196 0197 0198 0199 0200 0201 0202 0203 0204 0205 0206 0207 0208 0209 0210 0211 0212 0213 0214 0215 0216 0217 0218 0219 0220 0221 0222 0223 0224 0225 0226 0227 0228 0229 0230 ', concat(' ', normalize-space(@schemeID), ' '))))">[BR-CL-11]-Any registration identifier identification scheme identifier MUST be coded using one of the ISO 6523 ICD list. [ID BR-CL-11] from /xslt/cii16931schematron/EN16931-CII-validation.xslt)</error>
    </messages>
    <summary status="invalid"/>
  </xml>
  <messages></messages>
  <summary status="invalid"/>
</validation>

Rollo62 9. Aug 2024 15:22

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich lade mal die entsprechende Datei hier hoch.

Anhang 57046

Ist die jetzt Valid, oder nicht?

Rollo62 9. Aug 2024 15:38

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Nochmal mit anderen Settings:
%java_exe% -Xmx1G -Dfile.encoding=UTF-8 -jar "%mustangCLI_jar%" --action validate --source invoice.pdf > invoice_out.xml

Sorry, das rendert hier nicht wirklich.
Anhang 57047

Delphi-Quellcode:
<?xml version="1.0" encoding="UTF-8"?>

<validation filename="invoice.pdf" datetime="2024-08-09 16:32:57">
  <pdf>ValidationResult [flavour=3u, totalAssertions=11261, assertions=[], isCompliant=true]
    <info>
      <signature>Mustang</signature>
      <duration unit="ms">1984</duration>
    </info>
    <summary status="valid"/>
  </pdf>
  <xml>
    <info>
      <version>2</version>
      <profile>urn:cen.eu:en16931:2017</profile>
      <validator version="2.12.0"/>
      <rules>
        <fired>33</fired>
        <failed>12</failed>
      </rules>
      <duration unit="ms">6125</duration>
    </info>
    <messages>
      <error type="18">schema validation fails:org.xml.sax.SAXParseException; lineNumber: 175; columnNumber: 37; cvc-complex-type.2.4.d: Ungültiger Content wurde beginnend mit Element 'ram:GermanBankleitzahlID' gefunden. An dieser Stelle wird kein untergeordnetes Element erwartet.</error>
      <error type="4" location="/*[local-name()='CrossIndustryInvoice']/*[local-name()='SupplyChainTradeTransaction']/*[local-name()='ApplicableHeaderTradeAgreement']/*[local-name()='SellerTradeParty']/*[local-name()='SpecifiedLegalOrganization']/*[local-name()='ID']" criterion="document('FACTUR-X_EN16931_codedb.xml')//cl[@id=11]/enumeration[@value=$codeValue11]">Value of '@schemeID' is not allowed. from /xslt/ZF_221/FACTUR-X_EN16931.xslt)</error>
      <error type="24" location="/*:CrossIndustryInvoice[namespace-uri()='urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'][1]/*:SupplyChainTradeTransaction[namespace-uri()='urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'][1]/*:ApplicableHeaderTradeAgreement[namespace-uri()='urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'][1]/*:SellerTradeParty[namespace-uri()='urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'][1]/*:SpecifiedLegalOrganization[namespace-uri()='urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'][1]/*:ID[namespace-uri()='urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'][1]" criterion="((not(contains(normalize-space(@schemeID), ' ')) and contains(' 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 0030 0031 0032 0033 0034 0035 0036 0037 0038 0039 0040 0041 0042 0043 0044 0045 0046 0047 0048 0049 0050 0051 0052 0053 0054 0055 0056 0057 0058 0059 0060 0061 0062 0063 0064 0065 0066 0067 0068 0069 0070 0071 0072 0073 0074 0075 0076 0077 0078 0079 0080 0081 0082 0083 0084 0085 0086 0087 0088 0089 0090 0091 0093 0094 0095 0096 0097 0098 0099 0100 0101 0102 0104 0105 0106 0107 0108 0109 0110 0111 0112 0113 0114 0115 0116 0117 0118 0119 0120 0121 0122 0123 0124 0125 0126 0127 0128 0129 0130 0131 0132 0133 0134 0135 0136 0137 0138 0139 0140 0141 0142 0143 0144 0145 0146 0147 0148 0149 0150 0151 0152 0153 0154 0155 0156 0157 0158 0159 0160 0161 0162 0163 0164 0165 0166 0167 0168 0169 0170 0171 0172 0173 0174 0175 0176 0177 0178 0179 0180 0183 0184 0185 0186 0187 0188 0189 0190 0191 0192 0193 0194 0195 0196 0197 0198 0199 0200 0201 0202 0203 0204 0205 0206 0207 0208 0209 0210 0211 0212 0213 0214 0215 0216 0217 0218 0219 0220 0221 0222 0223 0224 0225 0226 0227 0228 0229 0230 ', concat(' ', normalize-space(@schemeID), ' '))))">[BR-CL-11]-Any registration identifier identification scheme identifier MUST be coded using one of the ISO 6523 ICD list. [ID BR-CL-11] from /xslt/cii16931schematron/EN16931-CII-validation.xslt)</error>
      <notice type="27" location="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext[1]" criterion="ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID">Business process MUST be provided. [ID PEPPOL-EN16931-R001] from /xslt/XR_30/XRechnung-CII-validation.xslt)</notice>
      <notice type="27" location="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction[1]/ram:ApplicableHeaderTradeAgreement[1]/ram:SellerTradeParty[1]" criterion="ram:URIUniversalCommunication/ram:URIID">Seller electronic address MUST be provided [ID PEPPOL-EN16931-R020] from /xslt/XR_30/XRechnung-CII-validation.xslt)</notice>
      <notice type="27" location="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction[1]/ram:ApplicableHeaderTradeAgreement[1]/ram:BuyerTradeParty[1]" criterion="ram:URIUniversalCommunication/ram:URIID">Buyer electronic address MUST be provided [ID PEPPOL-EN16931-R010] from /xslt/XR_30/XRechnung-CII-validation.xslt)</notice>
      <notice type="27" location="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction[1]/ram:IncludedSupplyChainTradeLineItem[1]/ram:SpecifiedTradeProduct[1]/ram:Description[1]" criterion="false()">Document MUST not contain empty elements. [ID PEPPOL-EN16931-R008] from /xslt/XR_30/XRechnung-CII-validation.xslt)</notice>
      <notice type="27" location="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction[1]/ram:IncludedSupplyChainTradeLineItem[2]/ram:SpecifiedTradeProduct[1]/ram:Description[1]" criterion="false()">Document MUST not contain empty elements. [ID PEPPOL-EN16931-R008] from /xslt/XR_30/XRechnung-CII-validation.xslt)</notice>
      <notice type="27" location="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction[1]/ram:IncludedSupplyChainTradeLineItem[3]/ram:SpecifiedTradeProduct[1]/ram:Description[1]" criterion="false()">Document MUST not contain empty elements. [ID PEPPOL-EN16931-R008] from /xslt/XR_30/XRechnung-CII-validation.xslt)</notice>
      <notice type="27" location="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction[1]/ram:IncludedSupplyChainTradeLineItem[1]/ram:SpecifiedLineTradeAgreement[1]/ram:GrossPriceProductTradePrice[1]" criterion="not(ram:ChargeAmount) or xs:decimal(../ram:NetPriceProductTradePrice/ram:ChargeAmount) = xs:decimal(ram:ChargeAmount) - xs:decimal(ram:AppliedTradeAllowanceCharge/ram:ActualAmount)">Item net price MUST equal (Gross price - Allowance amount) when gross price is provided. [ID PEPPOL-EN16931-R046] from /xslt/XR_30/XRechnung-CII-validation.xslt)</notice>
      <notice type="27" location="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction[1]/ram:IncludedSupplyChainTradeLineItem[2]/ram:SpecifiedLineTradeAgreement[1]/ram:GrossPriceProductTradePrice[1]" criterion="not(ram:ChargeAmount) or xs:decimal(../ram:NetPriceProductTradePrice/ram:ChargeAmount) = xs:decimal(ram:ChargeAmount) - xs:decimal(ram:AppliedTradeAllowanceCharge/ram:ActualAmount)">Item net price MUST equal (Gross price - Allowance amount) when gross price is provided. [ID PEPPOL-EN16931-R046] from /xslt/XR_30/XRechnung-CII-validation.xslt)</notice>
      <notice type="27" location="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction[1]/ram:IncludedSupplyChainTradeLineItem[3]/ram:SpecifiedLineTradeAgreement[1]/ram:GrossPriceProductTradePrice[1]" criterion="not(ram:ChargeAmount) or xs:decimal(../ram:NetPriceProductTradePrice/ram:ChargeAmount) = xs:decimal(ram:ChargeAmount) - xs:decimal(ram:AppliedTradeAllowanceCharge/ram:ActualAmount)">Item net price MUST equal (Gross price - Allowance amount) when gross price is provided. [ID PEPPOL-EN16931-R046] from /xslt/XR_30/XRechnung-CII-validation.xslt)</notice>
      <notice type="27" location="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext[1]" criterion="ram:GuidelineSpecifiedDocumentContextParameter/ram:ID = $XR-CIUS-ID or ram:GuidelineSpecifiedDocumentContextParameter/ram:ID = $XR-EXTENSION-ID">[BR-DE-21] Das Element "Specification identifier" (BT-24) soll syntaktisch der Kennung des Standards XRechnung entsprechen. [ID BR-DE-21] from /xslt/XR_30/XRechnung-CII-validation.xslt)</notice>
    </messages>
    <summary status="invalid"/>
  </xml>
  <messages></messages>
  <summary status="invalid"/>
</validation>

DerMondistunsereSonne 14. Aug 2024 12:56

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also wenn du es von Hand wissen möchtest, dann kannst du das in der PDF ansehen, siehe Bild. Und ich gehe mal davon aus, dass auch jemand da eine Variante für Delphi hat.

Die XML zu Validieren ist leider nicht einfach. Dafür gibt es allerdings genügend Seiten, die so etwas anbieten. Wie gut das Ergebnis ist, kann ich nicht beurteilen.

Rollo62 14. Aug 2024 13:51

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Es geht doch darum ein einfaches, verlässliches Format zu haben.
Wie eben PDF, das ist sowas von Standard, dass es mittlerweile überall problemlos läuft.
Das sollte doch mit genauso einem verlässlichem XML gepaart werden, wofür es dann auch auf tausenden System in gleicher Weise einen Viewer gewen sollte um das zu checken.

PDF läuft perfekt, XML anscheinend noch nicht.
Dabei hätte ich eigentlich bei dem strukturierten XML weniger Probleme erwartet einen Viewer zu finden,
als bei der proprietären PDF.

Das Argument kann ja nicht sein, dass ich solange einen passenden Viewer suchen muss, bis die Daten stimmen.
Das ZugFErD XML sollte in "irgendeinen" Viewer geworfen werden können, und BÄM ... fertig.

Vielleicht denke ich mal wieder zu einfach ... aber ist es nicht genau das, was Millionen Firmen und Kunden demnächst machen müssten, um die Validität einer Rechnung prüfen zu können?

Das kann doch nicht sein, dass dies nur innerhalb von komplexen B2B System funktionieren mag, aber der einfache Bürger mit seiner Telekom, 1&1 und Handwerkerrechnung dies nicht auf simpelste Weise prüfen kann.
Seltsam, ich hatte mal wieder mehr erwartet :shock:

DerMondistunsereSonne 14. Aug 2024 13:59

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Du kannst auch die XML in irgendeinen Viewer werfen und es dir ansehen. Das ist dann so, als ob du dir Autos auf der Strasse anschaust, die Farbe und Marke etc kannst du erkennen.

Die Validierung ob die Reifen eingetragen sind, muss man schon mit dem Fahrzeugschein und so weiter machen. Und das ist bei der ERechnung genauso, die XRechnung ist sogar noch aufwändiger.

Rollo62 14. Aug 2024 14:14

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Was ich meine ist, dass so eine Standard-XML doch in einem Standard-Viewer für Normalsterbliche lesbar gemacht werden sollte.
Die meisten Rechnungen haben halt keine Super-Sonder-Verknüppelung, sondern Lieferant, Kunde, Produktliste/Anzahl, Rechnungsdatum/Id, Summe, VAT, Endbetrag, Zahlungsziel, usw.

Das ist doch überschaubar genug für einen Standardviewer, um zumindest die Basics auszulesen, oder sehe ich das zu einfach?

Bei komplexerem Zeugs kann er sich ja ausklinken, es sollte aber mit den einfachen Muster-PDF der ZugFeRD Leute selber funktionieren.

DerMondistunsereSonne 14. Aug 2024 14:31

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Ich kenne zumindest kein Freeware-Tool, dass diese vermeintlich einfache Aufgabe umsetzen kann. Und wir haben das auch nicht "mal eben" entwickelt.

Papaschlumpf73 14. Aug 2024 14:33

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Falls einer von euch die iX aus dem Heise-Verlag liest: In der Ausgabe 2/2024 ist auf Seite 84 eine Übersicht mit 11 Tools zur Anzeige und Validierung von elektronischen Rechnungen. Alles Open Source und Freeware.

Papaschlumpf73 14. Aug 2024 14:37

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Die ix-Ausgabe 2/2024 kann man auch noch einzeln im Heise-Shop erwerben. (Ich bekomme keine Provision)
- doch nicht - lässt sich nicht mehr bestellen.

Papaschlumpf73 14. Aug 2024 14:48

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Gewissensfrage: Soll ich hier mal einen Scan der Übersicht posten? Dem Verlag entsteht ja kein Schaden, wenn er die Ausgabe eh nicht mehr verkauft...
- geht leider auch nicht - den Artikel kann man ziemlich sicher über Heise+ online lesen. Hab ich aber nicht, um das zu checken.

Papaschlumpf73 14. Aug 2024 15:08

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Der Hinweis auf die iX-Ausgabe war doch nicht so cool. Einige der vorgestellten Tools wurden in diesem Beitrag bereits erwähnt. Andere sind nur online verfügbar und unterstützen nur reine X-Rechnungen.

sh17 14. Aug 2024 15:52

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Im Falle von XML/ZUGFeRD in PDF ist das eigentliche Problem, dass zukünftig das XML-Dokument steuerrechtlich ausschlaggebend ist. Dem Finanzamt ist also egal, was in der PDF steht, die XML wird bei Fragen herangezogen. Deswegen ist es wichtig, dass der die Rechnung Prüfende, die XML-View prüft, ob die Rechnung in Ordnung ist. Die Probleme mit dem Viewer für die x-verschiedenen Versionen der E-Rechnung sind natürlich nicht gelöst und basieren meist auf langsamen Java-Bibliotheken. Hier kann man nur eine Art Zwischenlösung anbieten, Pdf anzeigen, die der Bearbeiter versteht und nebenbei die Zahlen der gelesenen XML. Was quasi einer doppelten Prüfung / doppeltem Arbeit entspricht. Am Ende kann man wenigstens die Übertragung der Werte in das System automatisieren. Aber mehr ist momentan nicht zu gewinnen meines Wissens.

shebang 14. Aug 2024 16:03

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Zitat:

Zitat von Papaschlumpf73 (Beitrag 1539824)
den Artikel kann man ziemlich sicher über Heise+ online lesen. Hab ich aber nicht, um das zu checken.

Ja kann man, hier der Link für alle Interessierten: https://www.heise.de/select/ix/2024/2/seite-80

Rollo62 14. Aug 2024 16:31

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Zitat:

Zitat von Papaschlumpf73 (Beitrag 1539826)
Der Hinweis auf die iX-Ausgabe war doch nicht so cool. Einige der vorgestellten Tools wurden in diesem Beitrag bereits erwähnt. Andere sind nur online verfügbar und unterstützen nur reine X-Rechnungen.

Doch doch, danke für den Tipp.
Da konnte ich mal von meinem Heise+ Abo profitieren.

bcvs 3. Okt 2024 11:16

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Ich scheitere momentan schon daran, den Validator vom Mustangproject zum Laufen zu bekommen.

Ich kenne diese Seite:
https://github.com/ZUGFeRD/mustangpr...ster/validator

aber was muss ich da genau wie installieren und aufrufen? Dieses Java-Zeugs ist nicht so meine Sache.

bcvs 3. Okt 2024 13:45

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
OK, jetzt habe ich es doch hinbekommen, so wie es hier beschreiben ist:

https://www.mustangproject.org/commandline/#validate

Beim aufruf:
Code:
java -Xmx1G -Dfile.encoding=UTF-8 -jar Mustang-CLI-2.14.0.jar --no-notices --action validate --source invoice.xml
Muss man nur bei den Dateinamen den kompletten Pfad mit angeben.

BlueStarHH 22. Okt 2024 15:57

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von bcvs (Beitrag 1541770)
OK, jetzt habe ich es doch hinbekommen, so wie es hier beschreiben ist:

https://www.mustangproject.org/commandline/#validate

Beim aufruf:
Code:
java -Xmx1G -Dfile.encoding=UTF-8 -jar Mustang-CLI-2.14.0.jar --no-notices --action validate --source invoice.xml
Muss man nur bei den Dateinamen den kompletten Pfad mit angeben.

Das nutze ich jetzt auch so zum Validieren. Wie kann ich die XML-Ausgabe schön darstellen? So ähnlich wie der schöne Prüfbericht (Beispiel im Anhang) vom Kosit-Validator (der kann das ja leider nur für XRechnung nicht fürs ZUGFeRD). Muss ich das selbst machen? Ist das Format für die XML-Ausgabe irgendwo definiert?

bcvs 23. Okt 2024 06:57

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Das kann das Mustangprojekt doch auch:
https://www.mustangproject.org/komma...g=de#visualize

Ich habe es allerdings noch nicht ausprobiert.

juergen 23. Okt 2024 07:30

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Zitat:

Zitat von BlueStarHH (Beitrag 1542421)
Ist das Format für die XML-Ausgabe irgendwo definiert?

Hier wird beschrieben, dass im Download-Paket Schema- und XSLT-Dateien vorhanden sind. Für den Download muss man sich registrieren.

sh17 23. Okt 2024 07:32

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Zitat:

Zitat von juergen (Beitrag 1542435)
Zitat:

Zitat von BlueStarHH (Beitrag 1542421)
Ist das Format für die XML-Ausgabe irgendwo definiert?

Hier wird beschrieben, dass im Download-Paket Schema- und XSLT-Dateien vorhanden sind. Für den Download muss man sich registrieren.

Alles auch hier zu finden

https://github.com/LandrixSoftware/Z.../documentation

BlueStarHH 23. Okt 2024 08:41

AW: Wie prüfen ob PDF ZUGFeRD enthält?
 
Zitat:

Zitat von bcvs (Beitrag 1542434)
Das kann das Mustangprojekt doch auch:
https://www.mustangproject.org/komma...g=de#visualize

Ich habe es allerdings noch nicht ausprobiert.

Wenn ich es richtig lese, geht es dort darum die Rechnungsdaten im XML-Format in eine PDF oder HTML-Datei zu überführen. Das möchte ich aber nicht. Mit geht es um das Prüfergebnis (auch XML, erstellt mit dem Parameter validate), das ich schön darstellen möchte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz