DocumentReader-APP

DocumentReader-App

 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

EigenschaftBeschreibung
ContentDie 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.
ContentLinkDu 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.
LanguageMit dieser Eigenschaft kannst du die Sprache angeben, die bei der Texterkennung genutzt wird. Wenn du keinen Wert übergibst, wird standardmäßig "Deutsch" verwendet.
CallbackURIDie Callback-URI wird aufgerufen, wenn die Verarbeitung der Aufgabe erfolgreich beendet wurde.
ErrorCallbackURIDie ErrorCallback-URI wird aufgerufen, wenn die Verarbeitung der Aufgabe mit einem Fehler beendet wurde.
DocumentNameDateiname der hochgeladenen Datei mit Dateiendung.
PredefinedPropertiesMit 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

EigenschaftBeschreibung
TaskIdEindeutige 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

EigenschaftBeschreibung
TaskIdEindeutige 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

EigenschaftBeschreibung
DocumentNameBezeichnung 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.
ExtractedEnthält die extrahierten Ergebnisse auf Positionsebene und Eigenschaftsebene.
ExtractedAttributesExtrahierte Ergebnisse auf Eigenschaftsebene.
ExtractedTablesExtrahierte Ergebnisse auf Positionsebene.
StructureNameBezeichnung der Positionsebene. Der Wert positions steht für Bestellpositionen.
RowsJede 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:

EigenschaftBeschreibung
AttributeNameBezeichnung der Eigenschaft.
ExtractedValueExtrahierter Wert, der mithilfe des Dokuments oder mit den Stammdaten ermittelt wurde.
ConfidenceGibt Auskunft über die Richtigkeit eines klassifizierten Ergebnisses. Der maximale Wert ist 100.
CluesPosition auf dem Dokument, von der das Ergebnis extrahiert wurde.
ExtractedWert, der vom Dokument extrahiert wurde. Dieser Wert muss nicht mit dem Wert von ExtractedValue übereinstimmen, da mit dem extrahierten Wert die Stammdaten abgefragt werden.
ZoneExakte 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

EigenschaftBeschreibung
DEBITOR_NUMNummer des Mandanten.
NAMEName des Mandanten.
STRStraße des Mandanten.
CITYOrt des Mandanten.
ZIPPostleitzahl des Mandanten.

Eigenschaften des Lieferanten

EigenschaftBeschreibung
VENDOR_NUMNummer des Lieferanten.
VENDOR_NAMEName des Lieferanten.
VENDOR_STRStraße des Lieferanten.
VENDOR_CITYOrt des Lieferanten.
VENDOR_ZIP_CODEPostleitzahl des Lieferanten.
VENDOR_VAT_REGISTRATION_IDUSt-ID des Lieferanten.
VENDOR_REGISTRATION_IDSteuernummer des Lieferanten.
VENDOR_IBANIBAN des Lieferanten.

Eigenschaften der Rechnungsdaten

EigenschaftBeschreibung
DocumentTypeDokumenttyp. Folgende Werte sind möglich: Invoice (Rechnung), CreditAdvice (Gutschrift), CorrectionOfInvoice (Rechnungskorrektur).
InvoiceNumberRechnungsnummer.
InvoiceDateRechnungsdatum.
PerformanceDateLeistungsdatum.
OrderNumBestellnummer.
GrossAmountCurrencyWährung.
GrossAmountBruttowert.
AdditionalCostsZusatzkosten z.B. Transportkosten.
NetAmount1Nettowert 1.
VatRate1Steuersatz 1.
VatAmount1Steuerwert 1.
NetAmount2Nettowert 2.
VatRate2Steuersatz 2.
VatAmount2Steuerwert 2.

Folgende Eigenschaften werden auf Positionsebene durch die Document Reader-App klassifiziert:

Eigenschaften der Bestellpositionen

EigenschaftBeschreibung
Pos.OrderNumBestellnummer.
Pos.OrderPosBestellposition.
Pos.UPriceEinzelpreis.
Pos.SPriceGesamtpreis.
Pos.QuantityMenge.
Pos.ArticleArtikelnummer.
Pos.DescriptionArtikelbeschreibung.
Pos.DeliveryNoteLieferscheinnummer.

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

EigenschaftBeschreibung
TaskIdEindeutige ID für die bereitgestellten Dokumente. Die ID wurde bei der Bereitstellung der Dokumente zurückgegeben.
ProvedResultsDie 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

EigenschaftBeschreibung
ContentDie eigentliche Datei, die als Byte-Array bereitgestellt wird. Folgende Formate sind zulässig: CSV, ZIP. Du kannst mehrere Stammdaten mit einem Aufruf bereitstellen.
ContentLinkDu 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.
DocumentNameDateiname 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>