Zum Inhalt

PDF-Analyse → Lieferschein

Der Service Task „PDF-Analyse → Lieferschein“ wandelt die Rohausgabe des Service Tasks PDF analysieren (Textract-Blöcke) in ein Lieferschein-Objekt: Lieferscheinnummer, Lieferdatum, Absender, alle erkannten Schlüssel-Wert-Paare und die Positionen aus der am besten passenden Tabelle. Der Service rechnet nur um; die eigentliche Analyse des PDFs findet im Schritt davor statt.

Technischer Name prio_mapTextractToDeliveryNote · Kategorie im Dialog „Service-Task auswählen“: Dokumente & PDF


Wann wird dieser Service verwendet?

  • Wareneingang Hardware: Die Musterfirma GmbH erhält Lieferscheine ihrer Distributoren als PDF und übernimmt Nummer, Datum und Positionen in den Wareneingang.
  • Abgleich mit der Bestellung: Die Positionen (Menge, Text) werden gegen die Bestellpositionen geprüft, bevor die Lieferung bestätigt wird.
  • Ablage mit Suchfeldern: Die Schlüssel-Wert-Paare (z. B. „Ihre Bestellung“) werden als Suchfelder am Dokument gespeichert.

Voraussetzungen

Der Schritt davor muss PDF analysieren sein, mit Tabellen- und Formularerkennung und drei Abfragen (Queries) mit den Aliassen delivery_note_number, delivery_date und sender. Ohne diese Abfragen fällt der Service auf Mustererkennung zurück (siehe Ausgabe). Dieser Service verursacht selbst keine Kosten; die Analysekosten entstehen im Schritt davor.


Eingabe

Feld Typ Pflicht Bedeutung
Blocks Array ja Die Textract-Blöcke aus der PDF-Analyse. Fehlt das Array, bricht der Schritt ab
DocumentMetadata Objekt nein Wird mitgegeben, aber nicht ausgewertet

Da die PDF-Analyse genau { DocumentMetadata, Blocks } liefert, ist der Input-Ausdruck in der Regel das Ergebnis des vorigen Schritts:

analyse

Schritt 1, PDF analysieren, mit Ergebnispfad analyse:

{
  "pdf": lieferschein,
  "options": { "tables": true, "forms": true },
  "queries": [
    { "Text": "What is the delivery note number?", "Alias": "delivery_note_number" },
    { "Text": "What is the delivery date?", "Alias": "delivery_date" },
    { "Text": "Who is the sender?", "Alias": "sender" }
  ]
}

Ausgabe

{
  "delivery_note_number": "LS-2026-04471",
  "delivery_date": "2026-11-05",
  "sender": "TechDistribution GmbH",
  "search_fields": [
    { "key": "Lieferschein-Nr.", "value": "LS-2026-04471" },
    { "key": "Ihre Bestellung", "value": "B-7781" }
  ],
  "positions": [
    { "position": 1, "quantity": "10", "text": "Notebook 14\" i7 32 GB" },
    { "position": 2, "quantity": "10", "text": "Dockingstation USB-C" }
  ]
}
Feld Herkunft
delivery_note_number Antwort der Abfrage delivery_note_number; sonst ein Schlüssel-Wert-Paar mit Schlüssel wie „Lieferschein-Nr.“, „LS-Nr.“, „Beleg-Nr.“, „Delivery Note No.“; sonst N/A
delivery_date Antwort der Abfrage delivery_date, umgewandelt nach JJJJ-MM-TT aus TT.MM.JJJJ, TT/MM/JJJJ oder TT-MM-JJJJ. Unbekannte Formate bleiben unverändert. Ohne Datum entfällt das Feld
sender Antwort der Abfrage sender; sonst die erste Zeile mit einer Rechtsform (GmbH, AG, KG, e.V., UG …) im unteren Fünftel der ersten Seite; sonst N/A
search_fields alle erkannten Schlüssel-Wert-Paare, Doppelpunkt am Schlüssel entfernt
positions Zeilen der Tabelle, deren Kopfzeile am besten zu Menge/Stück, Pos./Nr. und Bezeichnung/Artikel passt. Leere Zeilen entfallen; ohne Textspalte werden die restlichen Zellen zu text verkettet

Die Feldnamen sind in snake_case (delivery_note_number, search_fields), quantity ist ein Text ("10"), kein Zahlenwert. Das Ergebnis landet unter dem Ergebnispfad.


Fehler und Verhalten

  • Nur die Eingabeprüfung wirft: Blocks array is required. Expected Textract AnalyzeDocument output. Mit Fehler-Randereignis läuft der Prozess dort weiter, ohne Randereignis endet der Vorgang im Fehler mit Wiederaufsetzpunkt und Fehler-Mail an den Prozessverantwortlichen.
  • Nichts erkannt ist kein Fehler: Felder fallen auf N/A oder leere Arrays zurück, der Prozess läuft weiter. Ob das Ergebnis brauchbar ist, prüft am besten ein Gateway (delivery_note_number != "N/A" and $count(positions) > 0).
  • Der Service liefert nie {status, message}.
  • Zeitgrenze 900 Sekunden; Wiederholungen spielen keine Rolle, da keine externen Dienste aufgerufen werden.

Beispiel

Wareneingang bei der Musterfirma GmbH: Ein Distributor schickt den Lieferschein als PDF per E-Mail, der Prozess startet mit der Datei unter lieferschein.

  1. PDF analysieren mit dem Input von oben, Ergebnispfad analyse.
  2. PDF-Analyse → Lieferschein mit Input-Ausdruck analyse, Ergebnispfad lieferschein_daten.
  3. Ausgabe wie oben: lieferschein_daten.delivery_note_number = LS-2026-04471, zwei Positionen.
  4. Nächster Schritt: Referenz auflösen ordnet lieferschein_daten.sender dem Lieferantendatensatz zu; danach legt ein Datenbank-Schritt den Wareneingang mit den Positionen an, und die Benutzeraufgabe „Wareneingang prüfen“ zeigt Mengen und Texte neben der Bestellung.

Häufige Fragen

Im Dry Run heißen die Felder deliveryNoteNumber und searchFields, im echten Lauf delivery_note_number und search_fields.

Der Dry Run zeigt eine Beispielausgabe aus dem Katalog, die von der echten Ausgabe abweicht; dort steht auch ein deutsches Datum statt JJJJ-MM-TT. Folgeschritte werden gegen die echten Namen in snake_case gebaut, wie oben dokumentiert. Ein Mapping, das nur im Dry Run funktioniert, scheitert im echten Lauf.

Die Positionen sind leer, obwohl der Lieferschein eine Tabelle hat.

Die Kopfzeile wurde nicht als Positionstabelle erkannt. Gewertet werden Begriffe wie Menge, Stück, qty, Pos, Nr, Bezeichnung, Artikel, Text. Bei ungewöhnlichen Spaltentiteln hilft KI: Daten extrahieren auf den Rohtext.

Warum ist quantity ein Text?

Die Zellen werden unverändert übernommen. Für Berechnungen im Output-Ausdruck mit $number(quantity) umwandeln.


Nächster Schritt

Referenz auflösen: den erkannten Absender dem Lieferantendatensatz zuordnen.