6.7. ZUGFeRD-Daten gegen sichtbaren Text validieren

Ausgangssituation

Ihr Unternehmen verschickt PDF-Dokumente mit eingebetteten ZUGFeRD-Daten.

Problem

ZUGFeRD Daten werden in automatischen Prozessen erstellt und weiterverarbeitet. Da sie unsichtbar sind, sind sie schwer auf Korrektheit zu überprüfen. Einen Unterschied zwischen den sichtbaren Daten eines PDF-Dokumentes und den unsichtbaren prozessrelevanten ZUGFeRD-Daten sollte es nicht geben. Aber wie prüfen Sie das?

Lösungsansatz

PDFUnit liest Werte aus dem ZUGFeRD-Dokument und vergleicht sie mit den Werten auf einer PDF-Seite oder einem Seitenausschnitt:

Lösung

@Test
public void validateZUGFeRD_CustomerNameInvoiceIdIBAN() throws Exception {
  String filename = "zugferd10/ZUGFeRD_1p0_BASIC_Einfach.pdf";
  
  XMLNode nodeBuyerName = new XMLNode("ram:BuyerTradeParty/ram:Name");
  XMLNode nodeInvoiceId = new XMLNode("rsm:HeaderExchangedDocument/ram:ID");

  PageRegion regionPostalTradeAddress = createRegionPostalAddress();
  PageRegion regionInvoiceId = createRegionInvoiceId();
  
  AssertThat.document(filename)
            .restrictedTo(FIRST_PAGE)
            .restrictedTo(regionPostalTradeAddress)
            .hasText()
            .containingZugferdData(nodeBuyerName)
  ;
  
  AssertThat.document(filename)
            .restrictedTo(FIRST_PAGE)
            .restrictedTo(regionInvoiceId)
            .hasText()
            .containingZugferdData(nodeInvoiceId)
  ;
}

Manchmal sind die ZUGFeRD-Daten und die sichtbaren Daten unterschiedlich formatiert. Das ist z.B. für die Rechnungssumme im verwendeten Beispieldokument 'ZUGFeRD_1p0_BASIC_Einfach.pdf' der Fall. Sie wird auf der PDF-Seite mit deutschem Dezimalkomma und im ZUGFeRD-Dokument mit englischem Dezimalkomma dargestellt. In solchen Fällen müssen andere Testmethoden von PDFUnit benutzt werden. Sie sind Kapitel 3.39: „ZUGFeRD“ ausführlich dargestellt.