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/Aoder 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.
- PDF analysieren mit dem Input von oben, Ergebnispfad
analyse. - PDF-Analyse → Lieferschein mit Input-Ausdruck
analyse, Ergebnispfadlieferschein_daten. - Ausgabe wie oben:
lieferschein_daten.delivery_note_number=LS-2026-04471, zwei Positionen. - Nächster Schritt: Referenz auflösen ordnet
lieferschein_daten.senderdem 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.