Basisinformationen
In diesem Thema findest du allgemeine Informationen zur Document Reader-App API.
Über Document Reader-App API
In dieser Dokumentation erfährst du, wie du die Programmierschnittstelle der Document Reader-App für eigene Entwicklungen nutzen kannst. Die Document Reader-App stellt Funktionalitäten rund um das Klassifizieren von Dokumenten mit und ohne Stammdatenbezug bereit.
Funktionsumfang von Document Reader-App
Die Document Reader-App umfasst die Texterkennung, Klassifizierung und Indexierung von Dokumenten. Folgende Funktionen sind enthalten:
- Import von Dokumenten auf der Weboberfläche oder per API-Aufruf
- Export der Stapel oder Dokumente an weiterführende Systeme (z.B. DMS-App, Azure Service Bus, SharePointAdapter-App)
- Indexierung der Dokumente
- Einfaches Berechtigungskonzept
- Import von Stammdaten auf der Weboberfläche oder per API-Aufruf
- Verbesserung der Erkennung mithilfe von validierten Ergebnissen
Verwenden der API-Funktionen
Nachfolgend erfährst du, wie du die Programmierschnittstelle der Document Reader-App für eigene Entwicklungen nutzen kannst.
Die Document Reader-App beinhaltet die Ausprägungen "business" und "basic". Die beiden Ausprägungen haben jeweils ihren eigenen Endpunkt. Achte beim Verwenden der API-Funktionen darauf, den richtigen Endpunkt anzugeben.
- Die business-Variante mit Stammdatenbezug erreichst du mit dem Endpunkt /classcon-documentreader.
- Die basic-Variante ohne Stammdatenbezug erreicht du mit dem Endpunkt /classcon-gernericinvoices.
Authentifizierung
Die API-Funktionen der Document Reader-App benötigen eine gültige Authentifizierung von der IdentityProvider-App.
Weitere Informationen zur Authentifizierung findest du in der API-Dokumentation der IdentityProvider-App.
Bereitstellen eines Dokuments für die Verarbeitung
Mit dieser Funktion kannst du ein Dokument zur weiteren Verarbeitung bereitstellen.
Request
POST /classcon-documentreader/Api/CreateDocumentRecognitionJob
Accept: application/json
{
"Content": "Byte-Array",
"ContentLink": "link to the file",
"Language": "",
"CallbackURI": "",
"ErrorCallbackURI": "",
"DocumentName": "invoice.pdf",
"PredefinedProperties": [
{
"PropertyName": "ProcessingRule",
"PropertyValue": "Api"
}
]
}
Hinweise zu den Eigenschaften
Eigenschaft | Beschreibung |
---|---|
Content | Die eigentliche Datei, die als Byte-Array bereitgestellt wird. Folgende Formate sind zulässig: PDF, JPG, PNG, XML, TIF, ZIP. Du kannst auch mehrere Dokumente mit einem Aufruf bereitstellen. |
ContentLink | Du kannst die Datei, die klassifiziert werden soll, als Link bereitstellen. Wenn du einen Link angegeben hast, wird immer der Link zur Abfrage der Datei genutzt und der Wert in der Eigenschaft Content wird ignoriert. |
Language | Mit dieser Eigenschaft kannst du die Sprache angeben, die bei der Texterkennung genutzt wird. Wenn du keinen Wert übergibst, wird standardmäßig "Deutsch" verwendet. |
CallbackURI | Die Callback-URI wird aufgerufen, wenn die Verarbeitung der Aufgabe erfolgreich beendet wurde. |
ErrorCallbackURI | Die ErrorCallback-URI wird aufgerufen, wenn die Verarbeitung der Aufgabe mit einem Fehler beendet wurde. |
DocumentName | Dateiname der hochgeladenen Datei mit Dateiendung. |
PredefinedProperties | Mit dieser Eigenschaft kannst du vordefinierte Dokumenteigenschaften übergeben, die für die Verarbeitung relevant sind. |
Hinweis
Du musst den Parameter PredefinedProperties wie im Beispiel mit der Eigenschaft ProcessingRule und dem Wert Api übergeben. Wenn du diese Parameter nicht mit übergibst, werden die Dokumente in den Verarbeitungsschritt zur manuellen Dokumentprüfung (WebIndex) übergeben und werden anschließend an die konfigurierten Zielsysteme exportiert. Du kannst die Ergebnisse nicht per API abfragen.
|
Wenn das Dokument erfolgreich bereitgestellt wurde, erhältst du in der Antwort im JSON-Format eine ID. Diese ID wird im Weiteren als TaskId bezeichnet und ermöglicht dir, das hochgeladene Dokument in den weiteren Verarbeitungsschritten abzufragen. Wenn du mehrere Dokumente bereitgestellt hast, werden die Dokumente in einem "Stapel" zusammengefasst und die ID bezieht sich auf alle Dokumente im Stapel.
Response
HTTP-Statuscode 200 Ok
"0dbbd591-432b-4c2f-8f55-640fc952f54d"
Wenn beim Bereitstellen der Dokumente ein Fehler auftritt, wird ein entsprechender HTTP-Statuscode angegeben und im Body befindet sich die dazugehörige Fehlermeldung. Folgende Statuscodes können auftreten:
- 400 Bad Request: Der Aufruf konnte nicht verarbeitet werden, z.B. aufgrund fehlender Informationen beim Aufruf oder die Stammdatenbereitstellung wird für das Produkt nicht unterstützt.
- 401 Unauthorized: Der mitgelieferte API-Schlüssel ist ungültig oder der Benutzer hat nicht genug Berechtigungen, um Dokumente bereitstellen zu können.
- 404 Not Found: Der angegebene Kunde oder das Abonnement wurden nicht gefunden.
- 500 Internal Server Error: Ein interner Fehler ist aufgetreten.
Diese HTTP-Statuscodes werden auch bei den anderen Aufrufen im Fehlerfall zurückgeliefert.
Abfragen des Status
Nachdem die Dokumente hochgeladen wurden, durchlaufen sie die einzelnen Verarbeitungsschritte.
Um herauszufinden, in welchem Zustand sich die Dokumente in der Verarbeitung befinden, kannst du den Status mit der API abfragen:
Request
POST /classcon-documentreader/Api/GetProcessingStatus
Accept: application/json
{
"TaskId": "0dbbd591-432b-4c2f-8f55-640fc952f54d"
}
Hinweise zu den Eigenschaften
Eigenschaft | Beschreibung |
---|---|
TaskId | Eindeutige ID für die bereitgestellten Dokumente. Die ID wurde bei der Bereitstellung der Dokumente zurückgegeben. |
Als Antwort erhältst du folgenden JSON-Body:
Response
HTTP-Statuscode 200 Ok
{
"Status": 0
}
Der Status wird mit einem der folgenden Werte angegeben:
- 0: Die Dokumente warten darauf, verarbeitet zu werden.
- 1: Die Dokumente befinden sich in der Verarbeitung.
- 2: Die Dokumente wurden erfolgreich verarbeitet. Du kannst die Ergebnisse abfragen.
- 3: Beim Verarbeiten der Dokumente ist ein Fehler aufgetreten.
Wenn der Status mit dem Wert 2 zurückgeliefert wird, kannst du die Ergebnisse der Dokumentklassifizierung abfragen.
Abfragen von klassifizierten Ergebnissen
Du kannst die Ergebnisse der Dokumentklassifizierung im JSON-Format mit der API abfragen. Verwende zum Abfragen folgende Anfrage:
Request
POST /classcon-documentreader/Api/GetExtractedResults
Accept: application/json
{
"TaskId": "0dbbd591-432b-4c2f-8f55-640fc952f54d"
}
Hinweise zu den Eigenschaften
Eigenschaft | Beschreibung |
---|---|
TaskId | Eindeutige ID für die bereitgestellten Dokumente. Die ID wurde bei der Bereitstellung der Dokumente zurückgegeben. |
Als Rückgabewert erhältst du eine Liste, die für jedes Dokument die klassifizierten Ergebnisse enthält:
Response
HTTP-Statuscode 200 Ok
[
{
"DocumentName": "Invoice",
"Extracted": {
"ExtractedAttributes": [
{
"AttributeName": "DocumentType",
"Clues": [
{
"Extracted": "Invoice",
"Zone": {
"Bottom": 0,
"Height": 0,
"Left": 0,
"Length": 0,
"Page": 0
}
}
],
"Confidence": 100.00000000000001,
"ExtractedValue": "Invoice"
},
{
"AttributeName": "GrossAmountCurrency",
"Clues": [
{
"Extracted": "EUR",
"Zone": {
"Bottom": 0,
"Height": 0,
"Left": 0,
"Length": 0,
"Page": 0
}
}
],
"Confidence": 100,
"ExtractedValue": "EUR"
},
{
"AttributeName": "DEBITOR_NUM",
"Clues": [
{
"Extracted": "ceu",
"Zone": {
"Bottom": 0,
"Height": 0,
"Left": 0,
"Length": 0,
"Page": 0
}
}
],
"Confidence": 100,
"ExtractedValue": "ceu"
},
{
"AttributeName": "NAME",
"Clues": [
{
"Extracted": "ecstraordinary gmbh",
"Zone": {
"Bottom": 736,
"Height": 36,
"Left": 139,
"Length": 353,
"Page": 0
}
},
{
"Extracted": "ecstraordinary gmbh",
"Zone": {
"Bottom": 1100,
"Height": 36,
"Left": 1264,
"Length": 354,
"Page": 0
}
}
],
"Confidence": 100,
"ExtractedValue": "ecstraordinary GmbH"
},
{
"AttributeName": "STR",
"Clues": [
{
"Extracted": "helsinki str. 20",
"Zone": {
"Bottom": 1136,
"Height": 28,
"Left": 1266,
"Length": 285,
"Page": 0
}
}
],
"Confidence": 88.23529052734375,
"ExtractedValue": "Helsinki street 20"
},
{
"AttributeName": "ZIP",
"Clues": [
{
"Extracted": "81829",
"Zone": {
"Bottom": 859,
"Height": 28,
"Left": 179,
"Length": 95,
"Page": 0
}
},
{
"Extracted": "81829",
"Zone": {
"Bottom": 1179,
"Height": 28,
"Left": 1304,
"Length": 95,
"Page": 0
}
}
],
"Confidence": 100,
"ExtractedValue": "81829"
},
{
"AttributeName": "CITY",
"Clues": [
{
"Extracted": "munich",
"Zone": {
"Bottom": 859,
"Height": 28,
"Left": 295,
"Length": 147,
"Page": 0
}
},
{
"Extracted": "munich",
"Zone": {
"Bottom": 1179,
"Height": 28,
"Left": 1420,
"Length": 147,
"Page": 0
}
}
],
"Confidence": 100,
"ExtractedValue": "Munich"
},
{
"AttributeName": "VENDOR_NUM",
"Clues": [
],
"Confidence": 0,
"ExtractedValue": "8001"
},
{
"AttributeName": "VENDOR_NAME",
"Clues": [
{
"Extracted": "schubert gmbh",
"Zone": {
"Bottom": 644,
"Height": 26,
"Left": 140,
"Length": 235,
"Page": 0
}
},
{
"Extracted": "schubert gmbh",
"Zone": {
"Bottom": 444,
"Height": 32,
"Left": 2036,
"Length": 302,
"Page": 0
}
},
{
"Extracted": "schubert gmbh",
"Zone": {
"Bottom": 2963,
"Height": 32,
"Left": 1445,
"Length": 301,
"Page": 0
}
},
{
"Extracted": "schubert gmbh",
"Zone": {
"Bottom": 3127,
"Height": 37,
"Left": 789,
"Length": 290,
"Page": 0
}
}
],
"Confidence": 100,
"ExtractedValue": "Schubert GmbH"
},
{
"AttributeName": "VENDOR_STR",
"Clues": [
{
"Extracted": "new alley 21-23",
"Zone": {
"Bottom": 646,
"Height": 27,
"Left": 408,
"Length": 237,
"Page": 0
}
},
{
"Extracted": "new alley 21-23",
"Zone": {
"Bottom": 504,
"Height": 39,
"Left": 2029,
"Length": 310,
"Page": 0
}
}
],
"Confidence": 100,
"ExtractedValue": "New Alley 21-23"
},
{
"AttributeName": "VENDOR_CITY",
"Clues": [
{
"Extracted": "weilrod",
"Zone": {
"Bottom": 643,
"Height": 24,
"Left": 779,
"Length": 105,
"Page": 0
}
},
{
"Extracted": "weilrod",
"Zone": {
"Bottom": 549,
"Height": 31,
"Left": 2197,
"Length": 140,
"Page": 0
}
},
{
"Extracted": "weilrod",
"Zone": {
"Bottom": 3122,
"Height": 31,
"Left": 1835,
"Length": 140,
"Page": 0
}
}
],
"Confidence": 100,
"ExtractedValue": "Weilrod"
},
{
"AttributeName": "VENDOR_VAT_REGISTRATION_ID",
"Clues": [
{
"Extracted": "de111294343",
"Zone": {
"Bottom": 813,
"Height": 31,
"Left": 2071,
"Length": 264,
"Page": 0
}
}
],
"Confidence": 100,
"ExtractedValue": "DE111294343"
},
{
"AttributeName": "VENDOR_ZIP_CODE",
"Clues": [
],
"Confidence": 0,
"ExtractedValue": "64276"
},
{
"AttributeName": "VENDOR_IBAN",
"Clues": [
{
"Extracted": "de94512500000037875006",
"Zone": {
"Bottom": 3175,
"Height": 31,
"Left": 662,
"Length": 528,
"Page": 0
}
}
],
"Confidence": 100,
"ExtractedValue": "DE94512500000037875006"
},
{
"AttributeName": "OrderNum",
"Clues": [
{
"Extracted": "00000252",
"Zone": {
"Bottom": 1393,
"Height": 27,
"Left": 511,
"Length": 168,
"Page": 0
}
}
],
"Confidence": 100,
"ExtractedValue": "00000252"
},
{
"AttributeName": "GrossAmount",
"Clues": [
{
"Extracted": "885.12",
"Zone": {
"Bottom": 2771,
"Height": 31,
"Left": 2202,
"Length": 114,
"Page": 0
}
}
],
"Confidence": 100,
"ExtractedValue": "885,12"
},
{
"AttributeName": "NetAmount1",
"Clues": [
{
"Extracted": "743.80",
"Zone": {
"Bottom": 2531,
"Height": 31,
"Left": 2202,
"Length": 114,
"Page": 0
}
}
],
"Confidence": 100,
"ExtractedValue": "743,80"
},
{
"AttributeName": "VatRate1",
"Clues": [
{
"Extracted": "19 %",
"Zone": {
"Bottom": 2606,
"Height": 25,
"Left": 1837,
"Length": 74,
"Page": 0
}
}
],
"Confidence": 100,
"ExtractedValue": "19,00"
},
{
"AttributeName": "VatAmount1",
"Clues": [
{
"Extracted": "141.32",
"Zone": {
"Bottom": 2611,
"Height": 31,
"Left": 2205,
"Length": 108,
"Page": 0
}
}
],
"Confidence": 100,
"ExtractedValue": "141,32"
},
{
"AttributeName": "InvoiceNumber",
"Clues": [
{
"Extracted": "20190527-V1",
"Zone": {
"Bottom": 900,
"Height": 25,
"Left": 2136,
"Length": 198,
"Page": 0
}
}
],
"Confidence": 100,
"ExtractedValue": "20190527-V1"
},
{
"AttributeName": "InvoiceDate",
"Clues": [
{
"Extracted": "27.05.19",
"Zone": {
"Bottom": 942,
"Height": 25,
"Left": 2208,
"Length": 128,
"Page": 0
}
}
],
"Confidence": 100,
"ExtractedValue": "27.05.2019"
}
],
"ExtractedTables": [
{
"StructureName": "positions",
"Rows": [
{
"Attributes": [
{
"AttributeName": "Pos.Quantity",
"Clues": [
{
"Extracted": "10",
"Zone": {
"Bottom": 1967,
"Height": 27,
"Left": 144,
"Length": 36,
"Page": 0
}
}
],
"Confidence": 60,
"ExtractedValue": "10"
},
{
"AttributeName": "Pos.Description",
"Clues": [
{
"Extracted": "Mid-Range Speaker",
"Zone": {
"Bottom": 1976,
"Height": 36,
"Left": 557,
"Length": 326,
"Page": 0
}
}
],
"Confidence": 60,
"ExtractedValue": "Mid-Range Speaker"
},
{
"AttributeName": "Pos.UPrice",
"Clues": [
{
"Extracted": "57.66",
"Zone": {
"Bottom": 1971,
"Height": 31,
"Left": 1931,
"Length": 90,
"Page": 0
}
}
],
"Confidence": 60,
"ExtractedValue": "57,66"
},
{
"AttributeName": "Pos.OrderNum",
"Clues": [
{
"Extracted": "00000252",
"Zone": {
"Bottom": 1393,
"Height": 27,
"Left": 511,
"Length": 168,
"Page": 0
}
}
],
"Confidence": 60,
"ExtractedValue": "00000252"
},
{
"AttributeName": "Pos.SPrice",
"Clues": [
{
"Extracted": "576,60",
"Zone": {
"Bottom": 1971,
"Height": 31,
"Left": 2202,
"Length": 114,
"Page": 0
}
}
],
"Confidence": 60,
"ExtractedValue": "576,60"
},
{
"AttributeName": "Pos.OrderPos",
"Clues": [
{
"Extracted": "1",
"Zone": {
"Bottom": 0,
"Height": 0,
"Left": 0,
"Length": 0,
"Page": 0
}
}
],
"Confidence": 60,
"ExtractedValue": "1"
},
{
"AttributeName": "Pos.Article",
"Clues": [
{
"Extracted": "D0001",
"Zone": {
"Bottom": 0,
"Height": 0,
"Left": 0,
"Length": 0,
"Page": 0
}
}
],
"Confidence": 60,
"ExtractedValue": "D0001"
},
{
"AttributeName": "Pos.DeliveryNote",
"Clues": [
{
"Extracted": "--",
"Zone": {
"Bottom": 0,
"Height": 0,
"Left": 0,
"Length": 0,
"Page": 0
}
}
],
"Confidence": 60,
"ExtractedValue": "--"
}
],
"Score": 0
},
{
"Attributes": [
{
"AttributeName": "Pos.Quantity",
"Clues": [
{
"Extracted": "10",
"Zone": {
"Bottom": 2047,
"Height": 27,
"Left": 144,
"Length": 36,
"Page": 0
}
}
],
"Confidence": 60,
"ExtractedValue": "10"
},
{
"AttributeName": "Pos.Description",
"Clues": [
{
"Extracted": "StandardSpeaker",
"Zone": {
"Bottom": 0,
"Height": 0,
"Left": 0,
"Length": 0,
"Page": 0
}
}
],
"Confidence": 60,
"ExtractedValue": "StandardSpeaker"
},
{
"AttributeName": "Pos.UPrice",
"Clues": [
{
"Extracted": "16.78",
"Zone": {
"Bottom": 2051,
"Height": 31,
"Left": 1934,
"Length": 90,
"Page": 0
}
}
],
"Confidence": 60,
"ExtractedValue": "16,78"
},
{
"AttributeName": "Pos.OrderNum",
"Clues": [
{
"Extracted": "00000252",
"Zone": {
"Bottom": 1393,
"Height": 27,
"Left": 511,
"Length": 168,
"Page": 0
}
}
],
"Confidence": 60,
"ExtractedValue": "00000252"
},
{
"AttributeName": "Pos.SPrice",
"Clues": [
{
"Extracted": "167,80",
"Zone": {
"Bottom": 2051,
"Height": 31,
"Left": 2205,
"Length": 108,
"Page": 0
}
}
],
"Confidence": 60,
"ExtractedValue": "167,80"
},
{
"AttributeName": "Pos.OrderPos",
"Clues": [
{
"Extracted": "2",
"Zone": {
"Bottom": 0,
"Height": 0,
"Left": 0,
"Length": 0,
"Page": 0
}
}
],
"Confidence": 60,
"ExtractedValue": "2"
},
{
"AttributeName": "Pos.Article",
"Clues": [
{
"Extracted": "D0002",
"Zone": {
"Bottom": 0,
"Height": 0,
"Left": 0,
"Length": 0,
"Page": 0
}
}
],
"Confidence": 60,
"ExtractedValue": "D0002"
},
{
"AttributeName": "Pos.DeliveryNote",
"Clues": [
{
"Extracted": "--",
"Zone": {
"Bottom": 0,
"Height": 0,
"Left": 0,
"Length": 0,
"Page": 0
}
}
],
"Confidence": 60,
"ExtractedValue": "--"
}
],
"Score": 0
}
]
}
]
}
}
]
Hinweise zu den Eigenschaften
Eigenschaft | Beschreibung |
---|---|
DocumentName | Bezeichnung des Dokuments, um das Ergebnis eindeutig einem Dokument zuordnen zu können. Wenn du die Dokumente als ZIP-Paket bereitgestellt hast, wird für die Eigenschaft DocumentName der Dateiname des ZIP-Pakets verwendet. Der übergebene Dokumentname bei der Bereitstellung des ZIP-Pakets hat keinen Einfluss. |
Extracted | Enthält die extrahierten Ergebnisse auf Positionsebene und Eigenschaftsebene. |
ExtractedAttributes | Extrahierte Ergebnisse auf Eigenschaftsebene. |
ExtractedTables | Extrahierte Ergebnisse auf Positionsebene. |
StructureName | Bezeichnung der Positionsebene. Der Wert positions steht für Bestellpositionen. |
Rows | Jede Reihe besteht aus derselben Anzahl von Eigenschaften z.B. Bestellmenge der Position. |
Aufbau einer extrahierten Eigenschaft
Eine Eigenschaft besteht aus dem extrahierten Wert und folgenden zusätzlichen Informationen:
Eigenschaft | Beschreibung |
---|---|
AttributeName | Bezeichnung der Eigenschaft. |
ExtractedValue | Extrahierter Wert, der mithilfe des Dokuments oder mit den Stammdaten ermittelt wurde. |
Confidence | Gibt Auskunft über die Richtigkeit eines klassifizierten Ergebnisses. Der maximale Wert ist 100. |
Clues | Position auf dem Dokument, von der das Ergebnis extrahiert wurde. |
Extracted | Wert, der vom Dokument extrahiert wurde. Dieser Wert muss nicht mit dem Wert von ExtractedValue übereinstimmen, da mit dem extrahierten Wert die Stammdaten abgefragt werden. |
Zone | Exakte Position des extrahierten Werts auf dem Dokument. Mit der Eigenschaft Page wird die Seite angegeben. Wenn der Wert auf der ersten Seite extrahiert wurde, hat Page den Wert "0". |
Folgende Eigenschaften werden auf Eigenschaftsebene durch die Document Reader-App klassifiziert (business-Variante):
Eigenschaften des Mandanten
Eigenschaft | Beschreibung |
---|---|
DEBITOR_NUM | Nummer des Mandanten. |
NAME | Name des Mandanten. |
STR | Straße des Mandanten. |
CITY | Ort des Mandanten. |
ZIP | Postleitzahl des Mandanten. |
Eigenschaften des Lieferanten
Eigenschaft | Beschreibung |
---|---|
VENDOR_NUM | Nummer des Lieferanten. |
VENDOR_NAME | Name des Lieferanten. |
VENDOR_STR | Straße des Lieferanten. |
VENDOR_CITY | Ort des Lieferanten. |
VENDOR_ZIP_CODE | Postleitzahl des Lieferanten. |
VENDOR_VAT_REGISTRATION_ID | USt-ID des Lieferanten. |
VENDOR_REGISTRATION_ID | Steuernummer des Lieferanten. |
VENDOR_IBAN | IBAN des Lieferanten. |
Eigenschaften der Rechnungsdaten
Eigenschaft | Beschreibung |
---|---|
DocumentType | Dokumenttyp. Folgende Werte sind möglich: Invoice (Rechnung), CreditAdvice (Gutschrift), CorrectionOfInvoice (Rechnungskorrektur). |
InvoiceNumber | Rechnungsnummer. |
InvoiceDate | Rechnungsdatum. |
PerformanceDate | Leistungsdatum. |
OrderNum | Bestellnummer. |
GrossAmountCurrency | Währung. |
GrossAmount | Bruttowert. |
AdditionalCosts | Zusatzkosten z.B. Transportkosten. |
NetAmount1 | Nettowert 1. |
VatRate1 | Steuersatz 1. |
VatAmount1 | Steuerwert 1. |
NetAmount2 | Nettowert 2. |
VatRate2 | Steuersatz 2. |
VatAmount2 | Steuerwert 2. |
Folgende Eigenschaften werden auf Positionsebene durch die Document Reader-App klassifiziert:
Eigenschaften der Bestellpositionen
Eigenschaft | Beschreibung |
---|---|
Pos.OrderNum | Bestellnummer. |
Pos.OrderPos | Bestellposition. |
Pos.UPrice | Einzelpreis. |
Pos.SPrice | Gesamtpreis. |
Pos.Quantity | Menge. |
Pos.Article | Artikelnummer. |
Pos.Description | Artikelbeschreibung. |
Pos.DeliveryNote | Lieferscheinnummer. |
Wenn es zu einer Eigenschaft keinen Wert gibt, wird die Eigenschaft in den klassifizierten Ergebnissen nicht aufgelistet.
Übermitteln von validierten Ergebnissen
Wenn die Informationen eines Dokuments nicht korrekt erkannt und extrahiert wurden, kannst du die Angaben korrigieren. Mit deinen Korrekturen trainierst du auch den Autotrainer, der die Qualität der Eigenschaftserkennung verbessert. Um die extrahierten Informationen zu korrigieren und den Autotrainer zu trainieren, musst du die korrigierten Werte zurückliefern. Verwende zum Übermitteln der korrigierten Werte folgende Anfrage:
Request
POST /classcon-documentreader/Api/RegisterValidatedValues
Accept: application/json
{
"TaskId": "0dbbd591-432b-4c2f-8f55-640fc952f54d",
"ProvedResults": [
{
"DocumentName": "Invoice",
"Extracted": {
"ExtractedAttributes": [
{
"AttributeName": "GrossAmountCurrency",
"ExtractedValue": "EUR"
},
{
"AttributeName": "DEBITOR_NUM",
"ExtractedValue": "ceu"
},
{
"AttributeName": "NAME",
"ExtractedValue": "ecstraordinary GmbH"
},
{
"AttributeName": "STR",
"ExtractedValue": "Helsinki Street 20"
},
{
"AttributeName": "ZIP",
"ExtractedValue": "81829"
},
{
"AttributeName": "CITY",
"ExtractedValue": "Munich"
},
{
"AttributeName": "VENDOR_NUM",
"ExtractedValue": "8001"
},
{
"AttributeName": "VENDOR_NAME",
"ExtractedValue": "Schubert GmbH"
},
{
"AttributeName": "VENDOR_STR",
"ExtractedValue": "New Alley 21-23"
},
{
"AttributeName": "VENDOR_CITY",
"ExtractedValue": "Weilrod"
},
{
"AttributeName": "VENDOR_VAT_REGISTRATION_ID",
"ExtractedValue": "DE111294343"
},
{
"AttributeName": "VENDOR_ZIP_CODE",
"ExtractedValue": "64276"
},
{
"AttributeName": "VENDOR_IBAN",
"ExtractedValue": "DE94512500000037875006"
},
{
"AttributeName": "OrderNum",
"ExtractedValue": "00000252"
},
{
"AttributeName": "GrossAmount",
"ExtractedValue": "885.12"
},
{
"AttributeName": "NetAmount1",
"ExtractedValue": "743.80"
},
{
"AttributeName": "VatRate1",
"ExtractedValue": "19.00"
},
{
"AttributeName": "VatAmount1",
"ExtractedValue": "141.32"
},
{
"AttributeName": "InvoiceNumber",
"ExtractedValue": "20190527-V1"
},
{
"AttributeName": "InvoiceDate",
"ExtractedValue": "27.05.2019"
},
{
"AttributeName": "DocumentType",
"ExtractedValue": "Invoice"
}
],
"ExtractedTables": [
{
"StructureName": "positions",
"Rows": [
{
"Attributes": [
{
"AttributeName": "Pos.OrderNum",
"ExtractedValue": "00000252"
},
{
"AttributeName": "Pos.UPrice",
"ExtractedValue": "57.66"
},
{
"AttributeName": "Pos.SPrice",
"ExtractedValue": "576.60"
},
{
"AttributeName": "Pos.Quantity",
"ExtractedValue": "10"
},
{
"AttributeName": "Pos.OrderPos",
"ExtractedValue": "1"
},
{
"AttributeName": "Pos.DeliveryNote",
"ExtractedValue": "--"
},
{
"AttributeName": "Pos.Article",
"ExtractedValue": "D0001"
},
{
"AttributeName": "Pos.Description",
"ExtractedValue": "Mid-Range Speaker"
}
]
},
{
"Attributes": [
{
"AttributeName": "Pos.OrderNum",
"ExtractedValue": "00000252"
},
{
"AttributeName": "Pos.UPrice",
"ExtractedValue": "16.78"
},
{
"AttributeName": "Pos.SPrice",
"ExtractedValue": "167.80"
},
{
"AttributeName": "Pos.Quantity",
"ExtractedValue": "10"
},
{
"AttributeName": "Pos.OrderPos",
"ExtractedValue": "2"
},
{
"AttributeName": "Pos.DeliveryNote",
"ExtractedValue": "--"
},
{
"AttributeName": "Pos.Article",
"ExtractedValue": "D0002"
},
{
"AttributeName": "Pos.Description",
"ExtractedValue": "StandardSpeaker"
}
]
}
]
}
]
}
}
]
}
Hinweise zu den Eigenschaften
Eigenschaft | Beschreibung |
---|---|
TaskId | Eindeutige ID für die bereitgestellten Dokumente. Die ID wurde bei der Bereitstellung der Dokumente zurückgegeben. |
ProvedResults | Die korrigierten Eigenschaftswerte. Die Struktur stimmt mit der vorher bei der Abfrage der Ergebnisse erhaltenen JSON-Struktur überein. Beim Übermitteln der validierten Ergebnisse musst du nur die Eigenschaften AttributeName und ExtractedValue für die einzelnen validierten Eigenschaften befüllen. |
Um den Autotrainer anhand des Dokuments zu trainieren, musst du die Ergebnisse der extrahierten Eigenschaften vorher per API abgefragt haben.
Damit du die korrigierten Ergebnisse für das richtige Dokument lieferst, musst du sowohl die ID der bereitgestellten Dokumente (TaskId) als auch den Namen des Dokuments in der Eigenschaft DocumentName angeben. Wenn zu einer ID mehrere Dokumente gehören, kannst du die validierten Ergebnisse für mehrere Dokumente in einem Aufruf übergeben. Die Eigenschaft DocumentName entspricht der Benennung des Dokuments im ZIP-Paket.
Wenn das Hochladen der validierten Ergebnisse erfolgreich war, wird folgender HTTP-Statuscode zurückgegeben:
Response
HTTP-Statuscode 200 Ok
True
Bereitstellen von Stammdaten
Du kannst Stammdaten bereitstellen, die für die Verarbeitung der Dokumente herangezogen werden. Diese Funktion kannst du nur für die business-Variante der Document Reader-App verwenden.
Verwende folgende Anfrage zum Bereitstellen von Stammdaten:
Request
POST /classcon-documentreader/Api/ImportMasterFiles
Accept: application/json
{
"Content": "Byte-Array",
"ContentLink": "Link to the file",
"DocumentName": "masterdata.zip"
}
Hinweise zu den Eigenschaften
Eigenschaft | Beschreibung |
---|---|
Content | Die eigentliche Datei, die als Byte-Array bereitgestellt wird. Folgende Formate sind zulässig: CSV, ZIP. Du kannst mehrere Stammdaten mit einem Aufruf bereitstellen. |
ContentLink | Du kannst die Datei, die die Stammdaten beinhaltet, als Link bereitstellen. Wenn du einen Link angibst, wird immer der Link zur Abfrage der Datei genutzt und der Wert in der Eigenschaft Content wird ignoriert. |
DocumentName | Dateiname der hochgeladenen Datei mit Dateiendung. |
Wenn das Bereitstellen der Stammdaten erfolgreich war, wird folgender HTTP-Statuscode zurückgeliefert:
Response
HTTP-Statuscode 200 Ok
True
Die bereitgestellten Stammdaten sind nicht sofort verfügbar. Die Daten werden nach der Bereitstellung eines Dienstes noch einmal überprüft und anschließend in das System integriert. Dieser Vorgang kann einige Sekunden dauern.
Die basic-Variante der Document Reader-App arbeitet ohne extern bereitgestellte Stammdaten.
Verwenden der API-Funktionen in der Process-App
Du kannst die API der Document Reader-App verwenden, um die Klassifizierung von Dokumenten als asynchronen Dienst für die Process-App bereitzustellen.
Du musst für jedes Dokument, das klassifiziert werden soll, einen separaten Prozess starten.
Um den asynchronen Prozess für ein Dokument zu starten, benötigt die Process-App folgende Angaben:
- documentName: Name des Dokuments mit Dateiendung, z.B. Rechnung.pdf.
- documentFileLink: Link zum Dokument.
- documentOcrLink (optional): Link zur OCR-Datei, die für die Klassifizierung genutzt wird. Erlaubte Dateitypen sind .hocr und .addx. Wenn du keinen Link angibst, erfolgt die Texterkennung durch die Document Reader-App.
In folgendem beispielhaften Prozess sind sämtliche Eigenschaften aufgeführt, die von der Document Reader-App an die Process-App zurückgeliefert werden.
Beispielprozess BPMN
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" targetNamespace="">
<process id="DocumentReaderBusinessAPI" name="Document Reader Business API Demo" isExecutable="true">
<extensionElements>
<camunda:properties>
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:in:documentName" value="String" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:in:documentMimeType" value="String" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:in:documentFileLink" value="URL" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:in:documentOcrLink" value="URL" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:vendorNum" value="String" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:vendorName" value="String" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:vendorCity" value="String" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:vendorStreet" value="String" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:vendorZipCode" value="String" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:vendorVatRegistrationId" value="String" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:vendorRegistrationId" value="String" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:vendorIban" value="String" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:companyNum" value="String" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:companyName" value="String" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:companyCity" value="String" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:companyStreet" value="String" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:companyZipCode" value="String" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:invoiceNumber" value="String" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:invoiceDate" value="String" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:performanceDate" value="String" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:documentType" value="String" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:grossAmountCurrency" value="String" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:grossAmount" value="Number" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:additionalCosts" value="Number" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:netAmount1" value="Number" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:vatAmount1" value="Number" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:vatRate1" value="Number" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:netAmount2" value="Number" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:vatAmount2" value="Number" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:vatRate2" value="Number" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:orderNum" value="String" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:pos_orderNum" value="[String]" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:pos_unitPrice" value="[Number]" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:pos_sumPrice" value="[Number]" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:pos_quantity" value="[String]" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:pos_orderPosition" value="[String]" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:pos_deliveryNote" value="[String]" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:pos_articleNum" value="[String]" />
<camunda:property name="service:/classcon-documentreader/DataExchange/UploadProcessApp:out:pos_description" value="[String]" />
<camunda:property name="variable:documentName" value="String" />
<camunda:property name="variable:documentMimeType" value="String" />
<camunda:property name="variable:documentFileLink" value="URL" />
<camunda:property name="variable:documentOcrLink" value="URL" />
<camunda:property name="variable:vendorNum" value="String" />
<camunda:property name="variable:vendorName" value="String" />
<camunda:property name="variable:vendorCity" value="String" />
<camunda:property name="variable:vendorStreet" value="String" />
<camunda:property name="variable:vendorZipCode" value="String" />
<camunda:property name="variable:vendorVatRegistrationId" value="String" />
<camunda:property name="variable:vendorRegistrationId" value="String" />
<camunda:property name="variable:vendorIban" value="String" />
<camunda:property name="variable:companyNum" value="String" />
<camunda:property name="variable:companyName" value="String" />
<camunda:property name="variable:companyCity" value="String" />
<camunda:property name="variable:companyStreet" value="String" />
<camunda:property name="variable:companyZipCode" value="String" />
<camunda:property name="variable:invoiceNumber" value="String" />
<camunda:property name="variable:invoiceDate" value="String" />
<camunda:property name="variable:performanceDate" value="String" />
<camunda:property name="variable:documentType" value="String" />
<camunda:property name="variable:grossAmountCurrency" value="String" />
<camunda:property name="variable:grossAmount" value="Number" />
<camunda:property name="variable:additionalCosts" value="Number" />
<camunda:property name="variable:netAmount1" value="Number" />
<camunda:property name="variable:vatAmount1" value="Number" />
<camunda:property name="variable:vatRate1" value="Number" />
<camunda:property name="variable:netAmount2" value="Number" />
<camunda:property name="variable:vatAmount2" value="Number" />
<camunda:property name="variable:vatRate2" value="Number" />
<camunda:property name="variable:orderNum" value="String" />
<camunda:property name="variable:pos_orderNum" value="[String]" />
<camunda:property name="variable:pos_unitPrice" value="[Number]" />
<camunda:property name="variable:pos_sumPrice" value="[Number]" />
<camunda:property name="variable:pos_quantity" value="[String]" />
<camunda:property name="variable:pos_orderPosition" value="[String]" />
<camunda:property name="variable:pos_deliveryNote" value="[String]" />
<camunda:property name="variable:pos_articleNum" value="[String]" />
<camunda:property name="variable:pos_description" value="[String]" />
</camunda:properties>
</extensionElements>
<startEvent id="start"/>
<sendTask id="call_documentReaderAPI" name="Call 'Document Reader API'" camunda:delegateExpression="${asyncService}" camunda:asyncBefore="true" camunda:exclusive="true">
<extensionElements>
<camunda:inputOutput>
<camunda:inputParameter name="service.uri">/classcon-documentreader/DataExchange/UploadProcessApp</camunda:inputParameter>
<camunda:inputParameter name="documentName">${variables.get("documentName")}</camunda:inputParameter>
<camunda:inputParameter name="documentMimeType">${variables.get("documentMimeType")}</camunda:inputParameter>
<camunda:inputParameter name="documentFileLink">${variables.get("documentFileLink")}</camunda:inputParameter>
<camunda:inputParameter name="documentOcrLink">${variables.get("documentOcrLink")}</camunda:inputParameter>
</camunda:inputOutput>
</extensionElements>
</sendTask>
<receiveTask id="receive_documentReaderAPI" name="Wait for 'Document Reader API'" camunda:asyncAfter="true" camunda:exclusive="true">
<extensionElements>
<camunda:inputOutput>
<camunda:outputParameter name="vendorNum">${variables.get("vendorNum")}</camunda:outputParameter>
<camunda:outputParameter name="vendorName">${variables.get("vendorName")}</camunda:outputParameter>
<camunda:outputParameter name="vendorCity">${variables.get("vendorCity")}</camunda:outputParameter>
<camunda:outputParameter name="vendorStreet">${variables.get("vendorStreet")}</camunda:outputParameter>
<camunda:outputParameter name="vendorZipCode">${variables.get("vendorZipCode")}</camunda:outputParameter>
<camunda:outputParameter name="vendorVatRegistrationId">${variables.get("vendorVatRegistrationId")}</camunda:outputParameter>
<camunda:outputParameter name="vendorRegistrationId">${variables.get("vendorRegistrationId")}</camunda:outputParameter>
<camunda:outputParameter name="vendorIban">${variables.get("vendorIban")}</camunda:outputParameter>
<camunda:outputParameter name="companyNum">${variables.get("companyNum")}</camunda:outputParameter>
<camunda:outputParameter name="companyName">${variables.get("companyName")}</camunda:outputParameter>
<camunda:outputParameter name="companyCity">${variables.get("companyCity")}</camunda:outputParameter>
<camunda:outputParameter name="companyStreet">${variables.get("companyStreet")}</camunda:outputParameter>
<camunda:outputParameter name="companyZipCode">${variables.get("companyZipCode")}</camunda:outputParameter>
<camunda:outputParameter name="invoiceNumber">${variables.get("invoiceNumber")}</camunda:outputParameter>
<camunda:outputParameter name="invoiceDate">${variables.get("invoiceDate")}</camunda:outputParameter>
<camunda:outputParameter name="performanceDate">${variables.get("performanceDate")}</camunda:outputParameter>
<camunda:outputParameter name="documentType">${variables.get("documentType")}</camunda:outputParameter>
<camunda:outputParameter name="grossAmountCurrency">${variables.get("grossAmountCurrency")}</camunda:outputParameter>
<camunda:outputParameter name="grossAmount">${variables.get("grossAmount")}</camunda:outputParameter>
<camunda:outputParameter name="additionalCosts">${variables.get("additionalCosts")}</camunda:outputParameter>
<camunda:outputParameter name="netAmount1">${variables.get("netAmount1")}</camunda:outputParameter>
<camunda:outputParameter name="vatAmount1">${variables.get("vatAmount1")}</camunda:outputParameter>
<camunda:outputParameter name="vatRate1">${variables.get("vatRate1")}</camunda:outputParameter>
<camunda:outputParameter name="netAmount2">${variables.get("netAmount2")}</camunda:outputParameter>
<camunda:outputParameter name="vatAmount2">${variables.get("vatAmount2")}</camunda:outputParameter>
<camunda:outputParameter name="vatRate2">${variables.get("vatRate2")}</camunda:outputParameter>
<camunda:outputParameter name="orderNum">${variables.get("orderNum")}</camunda:outputParameter>
<camunda:outputParameter name="pos_orderNum">${variables.get("pos_orderNum")}</camunda:outputParameter>
<camunda:outputParameter name="pos_unitPrice">${variables.get("pos_unitPrice")}</camunda:outputParameter>
<camunda:outputParameter name="pos_sumPrice">${variables.get("pos_sumPrice")}</camunda:outputParameter>
<camunda:outputParameter name="pos_quantity">${variables.get("pos_quantity")}</camunda:outputParameter>
<camunda:outputParameter name="pos_orderPosition">${variables.get("pos_orderPosition")}</camunda:outputParameter>
<camunda:outputParameter name="pos_deliveryNote">${variables.get("pos_deliveryNote")}</camunda:outputParameter>
<camunda:outputParameter name="pos_articleNum">${variables.get("pos_articleNum")}</camunda:outputParameter>
<camunda:outputParameter name="pos_description">${variables.get("pos_description")}</camunda:outputParameter>
</camunda:inputOutput>
</extensionElements>
</receiveTask>
<endEvent id="end"/>
<sequenceFlow id="s1" sourceRef="start" targetRef="call_documentReaderAPI" />
<sequenceFlow id="s2" sourceRef="call_documentReaderAPI" targetRef="receive_documentReaderAPI" />
<sequenceFlow id="s3" sourceRef="receive_documentReaderAPI" targetRef="end" />
</process>
</definitions>