Service 'classify-pro'

enaio® 10.10 »

Der Service 'classify-pro' transferiert Dokumente und Daten zwischen enaio® und dem Subsystem 'Invoice' der Insiders Cloud zur Extraktion von Metadaten.

Aufgabe ist der Transfer der Rechnungsdokumente und der extrahierten Daten in der gleichen Weise in ein Übergabeverzeichnis für die Automatische Aktion 'Daten- / Dokumentenimport', wie dies von enaio® Classify on-premise erfolgt. Damit können bis auf wenige Anpassungen die bisherigen Importprozesse nach enaio® genutzt werden.

Die Rechnungsdokumente werden von Insiders Cloud Connectoren von der konfigurierten Mailbox oder dem PEPPOL Kanal abgeholt und ähnlich, wie von enaio® Classify on-premise gewohnt, verarbeitet.

Für die optimale Verarbeitung der Dokumente in der Insiders Cloud können Matching-Daten (Stammdaten) über den Service 'classify-pro' in die insiders Cloud via CSV- oder TXT-Dateien transferiert werden.

Papierrechnungen, die mittels enaio® capture oder enaio® capture-pro im Zusammenspiel mit enaio® capture-transfer-module gescannt werden, können ebenfalls über den Service 'classify-pro' in die Insiders Cloud zur Verarbeitung transferiert werden.

Der Service 'classify-pro' überprüft in einem konfigurierbaren Zeitintervall, ob Insider Cloud Tasks im Status 'Finshed' vorhanden sind und transferiert alle Daten in ein Übergabeverzeichnis für den Import über die Automatische Aktion 'Daten- / Dokumentenimport'.

Die folgende Grafik zeigt die Datenflüsse über die beteiligten Komponenten:

Installation des Services 'classify-pro'

Der Service 'classify-pro' wird über enaio® service-manager installiert und in enaio® services-admin eingebunden.

Einbindungsparameter: Port: 7580 / Memory: 512 MB / Instances: 1

Nach der Konfiguration des Services 'classify-pro' über die Konfigurationsdatei classifypro-prod.yml muss der Service neu gestartet werden.

Einrichtung für die Abholung von E-Mails aus einer Mailbox

Für die Einrichtung des Insider Cloud Tenants werden die Zugangsdaten für die Mailbox benötigt, die via Internet und Graph-API erreichbar ist und über die Rechnungen an den Kunden gesendet werden sollen.

Details finden Sie in der Insiders Dokumentation.

Anforderung der Einrichtung eines Tenants für Insiders Cloud

Die Einrichtung eines Tenants für Insiders Cloud erfolgt durch OPTIMAL SYSTEMS.

Folgende Daten werden benötigt:

  • Mailbox-Zugriffsdaten und Ordner
  • Folgende Anforderungen an den Tenant sind zu stellen:
    • Verarbeitung von E-Rechnungen
    • Erstellung des PDF-Sichtbelegs für XRechnungen
    • Erstellung des PDF-Sichtbelegs für ZUGFeRD-Dateien
    • Extraktion von XRechnung-Anlagen
    • Verarbeitung von Tabellendaten
    • Extraktion von Zahlungsbedingungen
    • Abgleich von Bestelldaten
    • 1:1 Beziehung von Task und E-Mail
    • Speichern der E-Mails, wenn vom Kunden gefordert
    • Erlaubte Dateiformate für die Anlagen: PDF, TIFF, JPG

Mailbox-Zugriffsdaten und Ordner

Folgende Parameter sind bei der Anfrage an Insiders zur Einrichtung des Insiders Cloud email-connectors anzugeben:

Parameter Beschreibung
Konto Die E-Mail-Adresse, an die die E-Mails mit den elektronischen Rechnungen als Anlagen geschickt werden.
Anwendungs-ID ID der Mail-Plattform für den Zugriff über die Graph-API
Client-Secret Secret, das für die Anwendung auf der Mail-Plattform erstellt wird
Verzeichnis-ID (Mandant/Tenant-ID) ID für den Mandant/Tenant auf der Mail-Plattform
Eingangsordner Name des Ordners, aus dem die E-Mails abgeholt werden sollen, in der Regel: Posteingang
Ausgangsordner Name des Ordners, in den die bearbeitete E-Mail im Erfolgsfall verschoben wird, beispeilsweise: Zielordner
Error-Ordner Name des Ordners, in den die bearbeitete E-Mail im Fehlerfall verschoben wurde, beispeilsweise: Aussteuerungsordner

Erlaubte E-Mail-Anhänge

Der Insiders Cloud email-connector weist E-Mails ab, die unerlaubte Anlagen enthalten.

Erlaubte Anlagen:

  • PDF-Dateien
  • Bilddateien im Format TIFF und JPG
  • ZUGFeRD-Dateien mit einer validen Factur-X Anlage
  • XRechnungen mit einer validen UBL oder CII Syntax

Konfiguration des Services 'classify-pro'

Konfiguriert wird der Service über die Konfigurationsdatei classifypro-prod.yml aus dem Verzeichnis \config von enaio® service-manager.

Beim Start des Services wird versucht, eine Verbindung zum Insiders Cloud Tenant herzustellen.

Der Verbindungsstatus ist sichtbar in enaio® services-admin. Der Endpunkt http://<host>:port/manage/health informiert ebenfalls über den Status der Verbindung zum Insiders Cloud Tenant.

Nach der Verbindung wird nach einer konfigurierbaren Wartezeit initialDelay geprüft, ob Insiders Cloud Tasks im konfigurierten state (fetch) vorhanden sind und transferiert werden können. Nach dem Transfer wird der Wert von state wie konfiguriert geändert (change-to). Nach der Wartezeit erfolgt die nächste Prüfung.

Der Endpunkt http://<host>:port/api/info informiert über die letzte Verarbeitung.

Konfigurationsparameter für die Verbindung:

Parameter Beschreibung

base-url

URL für die Verbindung zum Insiders Cloud Tenant

insiders:connection

Konfigurationsbereich für die Verbindung mit der Insiders Cloud und dem Lesen der Daten.
username Name des API-Benutzers, der bei der Anforderung des Tenants durch Insiders bekannt gegeben wird.
password

Passwort für den API-Benutzer, der bei der Anforderung des Tenants durch Insiders bekannt gegeben wird.

Das Passwort sollte verschlüsselt werden.

retry-limit

Wiederholungen für Token-Aktualisierung oder API-Wiederholungsversuche

Beispiel:

insiders:
  connection:
    base-url: "https://<insiders CLOUD domain>"
    username: insiders-api@<doamin name for the insiders CLOUD tenant>
    password: ENC(<encrypted password of the insiders CLOUD tenant)
    retry-limit: 3  # Retry limit for token refresh or API retries

Konfiguration zum Transfer von Scans in die Insiders Cloud

Gescannter Rechnungen, die per Papier eingegangen sind und mittels enaio® capture oder enaio® capture-pro im Zusammenspiel mit enaio® capture-transfer-module gescannt werden, können mit der folgenden Konfiguration der Datei classifypro-prod.yml in die Insiders Cloud zur Verarbeitung transferiert werden:

Parameter  Beschreibung
cron Konfiguration für die Zeit, in der das Vorliegen von Daten geprüft wird.
transfer:path Verzeichnis, in das die zu übertragenden Stammdatendateien abgelegt werden.
transfer:one-task-per-document Steuert, ob bei mehreren Dokumenten im Verzeichnis alle Dateien in einem Task übertragen werden oder pro Datei ein separater Task erzeugt wird. Default: false.
transfer:task-prefix

Wenn angegeben, dann wird die Task-ID aus diesem Präfix und dem Verzeichnisnamen gebildet.

Ohne Angabe wird eine Task-ID von Insiders Cloud generiert.

transfer:attributes

Liste von Attributen, die beim Anlegen des Tasks aus der XML-Datei übernommen werden.

Andere Attribute in der XML-Datei werden ignoriert.

Beispiel:

insiders:
  scan-upload:
  cron: "0 0 3 * * *"
  transfer:
    path: '../classify_temp'
    one-task-per-document: false
    task-prefix: "SCAN_"
    attributes: "$Dpi,$ScanDate,$DateOfReceipt"

Von enaio® capture werden Batches in einem Verzeichnis bereitgestellt. Das Verzeichnis wird überwacht und Daten des Batches in die Insiders Cloud transferiert.

Die Batches sehen wir folgt aus:

Datei Import.xml

<?xml version="1.0" encoding="utf-8"?>
<STACK StackID="B0000001_11:12:2024_0005" Priority="4" SubSystem="Invoice" Category="Invoice" ExportVerifierDocuments="False" ExportSupervisorDocuments="False" ShowAllDocumentsInVerifier="False" HasBackSideInfos="False" HasDocumentSeparators="False" HasProcessSeparators="False" ExtractionDisabled="False">
  <ATTRIBUTES>
    <KeyValuePair Key="$Dpi" Value="300" />
    <KeyValuePair Key="$DateOfReceipt" Value="11:12:2024" />
    <KeyValuePair Key="$ScanUser" Value="OSADMIN" />
    <KeyValuePair Key="$StackDir" Value="E:\smartfixExchange\Import\B0000001_11122024_0002" />
  </ATTRIBUTES>
  <IMAGE ImageID="B0000001_11122024_0006.PDF" DocID="0003" LocationID="B0000001_11122024_0006.PDF" />
   <IMAGE ImageID="B0000001_11122024_0007.PDF" DocID="0004" LocationID="B0000001_11122024_0007.PDF:0"/>
   <IMAGE ImageID="B0000001_11122024_0007.PDF" DocID="0004" LocationID="B0000001_11122024_0007.PDF:1" Skipped="true"/>
</STACK>

Die Scans und die XML-Datei müssen zusammen in einem Verzeichnis unterhalb des konfigurierten Verzechnisses transfer:path liegen.

Beispiel:

Nach dem Import wird dieses Verzeichnis in eines der Unterverzeichnisse finished oder error verschoben:

Konfiguration zum Abruf der Insiders Cloud Rechnungsdaten

Die Konfiguration erfolgt über die Datei classifypro-prod.yml aus dem Verzeichnis \config von enaio® service-manager.

Konfigurationsparameter
Parameter  Beschreibung
cron

Konfiguration für die Zeit, in der das Vorliegen von Daten geprüft wird.

Der Wert '-' deaktiviert das Prüfen.

check-prefix

Wenn ein Wert angegeben ist, dann werden nur Tasks mit einer ID verarbeitet, welche mit diesem Präfix beginnen.

check-state

Liste von Insiders Cloud Task 'state' Werten, deren Daten abgeholt werden sollen.

Default: finished

check-category

Wenn ein Wert angegeben ist, werden nur Tasks aus dieser Category verarbeitet.

Mehrere Werte werden durch das Komma getrennt.

check-subsystem

Wenn ein Wert angegeben ist, dann werden nur Tasks aus diesem Subsystem verarbeitet.

Mehrere Werte werden durch das Komma getrennt.

success-state

Wert für den Task-State innerhalb Insiders Cloud, wenn die Verarbeitung erfolgreich war.

Ohne Wert bleibt der vorher bestehende Status bestehen.

Default Exporter

submit-error

Wenn bei der Verarbeitung des Tasks ein Fehler auftritt, dann kann für diesen Task ein Fehler an Insiders Cloud gemeldet werden. Ansonsten verbleibt der Task im aktuellen Status.

Default: false

transfer:mode

Legt fest, über welche Weise die Daten an die enaio® übergeben werden sollen.

Mögliche Werte:

file: Die Daten werden als Dateien in das konfigurierte Verzeichnis gespeichert

transfer:export-only-verified

Steuert, ob nur verifizierte Werte in die Transferdatei geschrieben werden sollen.

Default: false

transfer:visual-original

Steuert, ob die Datei in 'OSCUST_VISUAL_PATH' auch die originale Eingangsdatei sein kann, wenn diese ein PDF ist. In der aktuellen Konfiguration der Insiders Cloud wird immer ein PDF erzeugt, welches als 'Primary' markiert ist. Dieses wird in 'OSCUST_VISUAL_PATH' referenziert. Wenn die originale Datei auch ein PDF ist und dieser Parameter den Wert true hat, dann wird die originale Datei ebenfalls referenziert und beide Dateinamen werden mit ';' getrennt.

Der Default ist 'false'.

transfer:original-email

Steuert, ob immer versucht wird, die ursprünglich E-Mail abzulegen. Datei 'OrignalFiles/Mail_Original.eml', Typ 'other'. Dafür muss eine entsprechende Einstellung in der insider CLOUD getroffen werden.

Default: false

transfer:file:path Transferzeichnis, in das die Dateien gespeichert werden. Das Verzeichnis wird als Importverzeichnis für die Automatische Aktion 'Daten- / Dokumentenimport' verwendet.
transfer:file:prefix Präfix für die Datei, in das die Transferdaten wie Originalrechnungsdateien, Sichtbelege im PDF-Format für XRechnungen, sowie die extrahierten Rechnungsdaten gespeichert werden.
transfer:file:trigger-file-suffix

Ist hier ein Wert angegeben, dann wird zu jeder exportierten XML-Datei eine Datei mit dem angegebenen Suffix angelegt.

Wenn parallel file-in-folder aktiviert ist, dann wird das Suffix an den Verzeichnisnamen angefügt.

Default: .ISU_IMPORT_START

transfer:file:exclude-altered-by

Steuert, ob in der Metadaten-Datei der Parameter 'altered_by' nicht enthalten sein soll.

Default: true

transfer:file:one-file-per-document

Steuert, ob bei mehreren Dokumenten in einem Task mehrere Dokumente in eine Exportdatei gelegt werden oder pro Exportdatei maximal ein Dokument enthalten ist. Dann besteht der Name der Exportdateien aus der Task-ID und einer laufenden Nummer.

Wenn file-in-folder aktiviert ist, dann hat diese Einstellung keine Auswirkungen, da immer eine Datei export.xml im Exportverzeichnis angelegt wird.

Default: false

transfer:file:file-in-folder

Steuert den Namen und Ort der Export-XML-Datei.

Entweder liegt diese parallel zu dem Verzeichnis mit den Dokumenten mit dem gleichen Namen und der Erweiterung xml.

Oder sie wird im Verzeichnis mit den Dokumenten unter dem Namen export.xml abgelegt.

Default: false

Beispiel:

insiders:
  task-download:
    #cron: '-' # no action
    cron: '0 */1 * * * *'
    check-prefix: ''
    check-state: "Finished"
    #check-category: "Invoice"
    #check-subsystem: "Invoice"
    # leave empty to keep state:
    success-state: 'Exporter'
    submit-error: false
    transfer:
      #mode: file/plugin
      mode: file
      export-only-verified: false
      # if original is also a PDF also reference as visual (and not only as "original"). Primary is always referenced as visual
      visual-original: false
      original-email: true
      file:
        path: '<folder that is shared the enaio importer>'
        prefix: 'CLASSIFY_'
        trigger-file-suffix: '.ISU_IMPORT_START'
        exclude-altered-by: true
        one-file-per-document: false
        file-in-folder: true

Speicherung der Daten in das Transferverzeichnis

Für jeden Insiders Cloud Task wird eine XML-Datei mit der ID des Tasks als Dateinamen iim Transferverzeichnis gespeichert.

Beispiel:

<STACK Category="Invoice" SubSystem="Invoice" StackID="MAIL_20250123_000034">
    <ATTRIBUTES>
        <KeyValuePair Key="$AmountCluster" Value="Cluster 02: < 2.5K"/>
        <KeyValuePair Key="$InvoiceType" Value="FI"/>
        <KeyValuePair Key="$IsEInvoice" Value="1"/>
        <KeyValuePair Key="$VendorName" Value="Testverkäufer"/>
        <KeyValuePair Key="$VendorNo" Value=""/>
    </ATTRIBUTES>
    <PROCESS ProcessID="0000">
        <DOCUMENT DocID="0000" DocClass="Invoice/eInvoice" AlteredBy="System" ExportName="eInvoice" comment="">
            <PAGE LocationColorID="03.06a-INVOICE_ubl.xml.pdf:0" Attached="FALSE" BackSide="FALSE" Empty="FALSE" ImageID="03.06a-INVOICE_ubl.xml.pdf:0" LocationID="03.06a-INVOICE_ubl.xml.pdf:0" Path="D:\enaio\service-manager\temp\insiders\CLASSIFY_MAIL_20250123_000034\03.06a-INVOICE_ubl.xml.pdf:0"/>
            <PAGE LocationColorID="03.06a-INVOICE_ubl.xml.pdf:1" Attached="FALSE" BackSide="FALSE" Empty="FALSE" ImageID="03.06a-INVOICE_ubl.xml.pdf:1" LocationID="03.06a-INVOICE_ubl.xml.pdf:1" Path="D:\enaio\service-manager\temp\insiders\CLASSIFY_MAIL_20250123_000034\03.06a-INVOICE_ubl.xml.pdf:1"/>
            <PAGE LocationColorID="03.06a-INVOICE_ubl.xml.pdf:2" Attached="FALSE" BackSide="FALSE" Empty="FALSE" ImageID="03.06a-INVOICE_ubl.xml.pdf:2" LocationID="03.06a-INVOICE_ubl.xml.pdf:2" Path="D:\enaio\service-manager\temp\insiders\CLASSIFY_MAIL_20250123_000034\03.06a-INVOICE_ubl.xml.pdf:2"/>
            <PAGE LocationColorID="03.06a-INVOICE_ubl.xml.pdf:3" Attached="FALSE" BackSide="FALSE" Empty="FALSE" ImageID="03.06a-INVOICE_ubl.xml.pdf:3" LocationID="03.06a-INVOICE_ubl.xml.pdf:3" Path="D:\enaio\service-manager\temp\insiders\CLASSIFY_MAIL_20250123_000034\03.06a-INVOICE_ubl.xml.pdf:3"/>
            <PAGE LocationColorID="03.06a-INVOICE_ubl.xml.pdf:4" Attached="FALSE" BackSide="FALSE" Empty="FALSE" ImageID="03.06a-INVOICE_ubl.xml.pdf:4" LocationID="03.06a-INVOICE_ubl.xml.pdf:4" Path="D:\enaio\service-manager\temp\insiders\CLASSIFY_MAIL_20250123_000034\03.06a-INVOICE_ubl.xml.pdf:4"/>
            <FIELDGROUP Name="default">
                <FIELD Rating="OK" Name="INV_AMOUNT" Value="1804.0" VerifierAction="NoAction" Checks="OK"/>
                <FIELD Rating="OK" Name="INV_COMPLIANCE_COMMENTS" Value="Indicator for tax exemption is not on the document (compliance check)" VerifierAction="NoAction" Checks="OK"/>
                <FIELD Rating="OK" Name="INV_COMPLIANT" Value="false" VerifierAction="Changed" AlteredBy="insiders-admin@optimal-systems-" Checks="OK"/>
                <FIELD Rating="OK" Name="INV_CREDIT_NOTE" Value="false" VerifierAction="NoAction" Checks="OK"/>
                <FIELD Rating="OK" Name="INV_CURRENCY" Value="EUR" VerifierAction="NoAction" Checks="OK"/>
                <FIELD Rating="OK" Name="INV_DATE" Value="2021-04-23" VerifierAction="NoAction" Checks="OK"/>
                <FIELD Rating="OK" Name="INV_DELIVERY_DATE" Value="2021-04-23" VerifierAction="OCR" AlteredBy="insiders-admin@optimal-systems-" Checks="OK"/>
                <FIELD Rating="OK" Name="INV_DELIVERY_MONTH" Value="04.2021" VerifierAction="AutoFill" Checks="OK"/>
                <FIELD Rating="OK" Name="INV_DELIVERY_WEEK" Value="16.2021" VerifierAction="AutoFill" Checks="OK"/>
                <FIELD Rating="OK" Name="INV_LEITWEG_ID" Value="991-33333TEST-33" VerifierAction="NoAction" Checks="OK"/>
                <FIELD Rating="OK" Name="INV_NET_AMOUNT1" Value="1600.0" VerifierAction="NoAction" Checks="OK"/>
                <FIELD Rating="OK" Name="INV_NET_AMOUNT2" Value="-100.0" VerifierAction="NoAction" Checks="OK"/>
                <FIELD Rating="OK" Name="INV_NUMBER" Value="112233" VerifierAction="NoAction" Checks="OK"/>
                <FIELD Rating="OK" Name="INV_TAX_AMOUNT1" Value="304.0" VerifierAction="NoAction" Checks="OK"/>
                <FIELD Rating="OK" Name="INV_TAX_AMOUNT2" Value="0.0" VerifierAction="NoAction" Checks="OK"/>
                <FIELD Rating="OK" Name="INV_TAX_RATE1" Value="19.0" VerifierAction="NoAction" Checks="OK"/>
                <FIELD Rating="OK" Name="INV_TAX_RATE2" Value="0.0" VerifierAction="NoAction" Checks="OK"/>
                <FIELD Rating="OK" Name="RE_CITY" Value="Testhausen" VerifierAction="Confirmed" AlteredBy="insiders-admin@optimal-systems-" Checks="OK"/>
                <FIELD Rating="OK" Name="RE_COUNTRY" Value="DE" VerifierAction="Confirmed" AlteredBy="insiders-admin@optimal-systems-" Checks="OK"/>
                <FIELD Rating="OK" Name="RE_NAME" Value="Testkäufer" VerifierAction="Confirmed" AlteredBy="insiders-admin@optimal-systems-" Checks="OK"/>
                <FIELD Rating="OK" Name="RE_RECIPIENT_NO" VerifierAction="Confirmed" AlteredBy="insiders-admin@optimal-systems-" Checks="OK"/>
                <FIELD Rating="OK" Name="RE_STREET" Value="Teststraße " VerifierAction="Confirmed" AlteredBy="insiders-admin@optimal-systems-" Checks="OK"/>
                <FIELD Rating="OK" Name="RE_TAX_ID_NO" VerifierAction="Confirmed" AlteredBy="insiders-admin@optimal-systems-" Checks="OK"/>
                <FIELD Rating="OK" Name="RE_VAT_ID_NO" VerifierAction="Confirmed" AlteredBy="insiders-admin@optimal-systems-" Checks="OK"/>
                <FIELD Rating="OK" Name="RE_ZIPCODE" Value="12345" VerifierAction="Confirmed" AlteredBy="insiders-admin@optimal-systems-" Checks="OK"/>
                <FIELD Rating="OK" Name="VE_CITY" Value="Testhausen" VerifierAction="Confirmed" AlteredBy="insiders-admin@optimal-systems-" Checks="OK"/>
                <FIELD Rating="OK" Name="VE_COUNTRY" Value="DE" VerifierAction="Confirmed" AlteredBy="insiders-admin@optimal-systems-" Checks="OK"/>
                <FIELD Rating="OK" Name="VE_IBAN" VerifierAction="Confirmed" AlteredBy="insiders-admin@optimal-systems-" Checks="OK"/>
                <FIELD Rating="OK" Name="VE_NAME" Value="Testverkäufer" VerifierAction="Confirmed" AlteredBy="insiders-admin@optimal-systems-" Checks="OK"/>
                <FIELD Rating="OK" Name="VE_STREET" Value="Teststraße " VerifierAction="Confirmed" AlteredBy="insiders-admin@optimal-systems-" Checks="OK"/>
                <FIELD Rating="OK" Name="VE_SWIFT_BIC" VerifierAction="Confirmed" AlteredBy="insiders-admin@optimal-systems-" Checks="OK"/>
                <FIELD Rating="OK" Name="VE_TAX_ID_NO" Value="1121081508150" VerifierAction="OCR" AlteredBy="insiders-admin@optimal-systems-" Checks="OK"/>
                <FIELD Rating="OK" Name="VE_VAT_ID_NO" VerifierAction="OCR" AlteredBy="insiders-admin@optimal-systems-" Checks="OK"/>
                <FIELD Rating="OK" Name="VE_VENDOR_NO" VerifierAction="Confirmed" AlteredBy="insiders-admin@optimal-systems-" Checks="OK"/>
                <FIELD Rating="OK" Name="VE_ZIPCODE" Value="12345" VerifierAction="Confirmed" AlteredBy="insiders-admin@optimal-systems-" Checks="OK"/>
                <FIELD Rating="OK" Name="#OSCUST_IMPORT_ID" Value="38c1457f-f11c-4eee-836f-ff6536c37f0c" VerifierAction="NoAction" Checks="OK"/>
                <FIELD Rating="OK" Name="#OSCUST_ORIGINAL_PATH" Value="D:\enaio\service-manager\temp\insiders\CLASSIFY_MAIL_20250123_000034\Original\03.06a-INVOICE_ubl.xml" VerifierAction="NoAction" Checks="OK"/>
                <FIELD Rating="OK" Name="#OSCUST_VISUAL_PATH" Value="D:\enaio\service-manager\temp\insiders\CLASSIFY_MAIL_20250123_000034\Primary\03.06a-INVOICE_ubl.xml.pdf" VerifierAction="NoAction" Checks="OK"/>
                <FIELD Rating="OK" Name="#OSCUST_EMAIL_PATH" Value="D:\enaio\service-manager\temp\insiders\CLASSIFY_MAIL_20250123_000034\Primary\03.06a-INVOICE_ubl.eml" VerifierAction="NoAction" Checks="OK"/>
              </FIELDGROUP>
        </DOCUMENT>
    </PROCESS>
</STACK>

Die transferierten Anlagen einer E-Mail sind in einem FIELD-Tag mit #OSCUST_ORIGINAL_PATH und #OSCUST_VISUAL_PATH referenziert. Wurden mehrere Dateien vom Typ XML und PDF transferiert, so werden diese im jeweiligen Tag-Namen zusammen mit Semikolon getrennt gelistet.

Im FIELD-Tag #OSCUST_IMPORT_ID wird eine eindeutige ID pro 'PROCESS' eingetragen. Wenn der Parameter one-file-per-document gesetzt wurde, wird ein PROCESS mit mehreren Dokumenten auf mehrere XML-Dateien aufgeteilt. Bei der Verarbeitung dieser Dateien können diese über die #OSCUST_IMPORT_ID wieder einem PROCESS zugeordnet werden.

Es wird mindestens das Unterverzeichnis 'Original' angelegt, in das die nicht 'elektronischen Rechnungen' im PDF-Format gespeichert werden, sowie die elektronische Rechnung vom Typ ZUGFeRD als PDF mit enthaltener XML-Datei und den XRechnungen im XML-Format.

Im Fall einer XRechnung wird das Unterverzeichnis 'Primary' erstellt, in dem der PDF-Sichtbelegt enthalten ist.

Wenn der Tenant so konfiguriert wurde, dass auch die E-Mail abrufbar ist, so wird diese in das Verzeichnis 'Other' gespeichert.

Anmerkungen zu Insiders Cloud Subsystemen

Der Service 'classify-pro' ist optimiert auf das Insiders Cloud Subsystem 'Invoice'. Potentiell werden auch die Daten aus anderen Subsystemen eines Tenant abgeholt werden, die Verarbeitung erfolgt so, wie beim Insiders Cloud subsystem 'Invoice'.

Anpassungen für spezielle Verarbeitungen müssen im Projekt umgesetzt werden.

Konfiguration für die Übergabe der Stammdaten an den Insiders Cloud Tenant

Die Insiders Cloud bietet eine Reihe von Stammdatentabellen, die über REST-API gefüllt werden können. Die Stammdaten werden aus den ERP-Systemen der Kunden via CSV- bzw. Text-Exportdateien in einem Übergabeverzeichnis bereit gestellt.

Der Service 'classify-pro' überprüft dieses Verzeichnis im konfigurierten Abstand und liest die Daten vorhandener Dateien und überträgt diese Chunk-weise via REST-Autruf in die betreffende Tabelle des Tenants.

Nach der Verarbeitung wird die Datei in ein festes Verzeichnis unterhalb des konfigurierten Masterdaten-Import-Verzeichnisses verschoben:

  • error: Fehler

  • warning: Daten mussten eingekürzt werden

  • finished: Erfolgreich

Im Verzeichnis error und warning wird zusätzlich eine Log-Datei angelegt.

Der Beginn und das Ende der Verarbeitung wird im Service-Log protokolliert.

Die folgenden Parameter für die Stammdatentabellen SFI_RECIPIENT und SFI_VENDOR können in der Datei classify-prod.yml für die Übertragung von Stammdaten konfiguriert werden:

Konfigurationsparameter:
  - name

Name der Insiders Cloud Stammdatentabelle. Es können beliebig viele Tabellen gelistet werden.

Für die Tabellen SFI_RECIPIENT und SFI_VENDOR finden Sie unten eine Beispielkonfiguration.

    chunk-size

Anzahl der Datensätze, die in einer Transaktion übergeben werden sollen. Die Log-Datei fasst die Ergebnisse aller Transaktionen für die Stammdatendatei zusammen.

Wenn ein Chunk wegen Fehlern von der Insiders Cloud abgewiesen wird, dann wird dieser in Einzelzeilenverarbeitung prozessiert. Läuft ein einzelner in einen Fehler, so wird dieser in der Log-Datei mit seiner Nummer in der Gesamtdatei protokolliert.

    csv Angaben zur CSV-Datei, aus welcher die Daten eingelesen werden
      csv:encoding

Mögliche Werte sind 'UTF-8',  UTF-16BE, UTF-16LE, UTF-16, und 'ISO-8859-1'.

Wird ein falscher Wert eingetragen, wird als Standard 'UTF-8' verwendet.

      csv:separator Verwendeter Trenner für die Spaltenwerte in der Stammdatendatei, z.B. 'TAB' für Tabulator, oder Zeichen wie Komma, Semikolon oder Stern '*'.
      csv:start-line

Die Nummer der Zeile für den ersten zu lesenden Datensatz.

    file-prefix Es empfiehlt sich, den Dateinamen einen Präfix zu geben, so dass die Referenz zur Stammdatentabelle gegeben ist.
insiders:masterdata-upload Konfigurationsbereich für den Transfer vom Stammdaten aus einer CSV- oder Text-Datei in die Tabellen des Insiders Cloud Tenants.
    mapping

Konfigurationsbereich für das Mapping der Spalten in der CSV-Datei auf die Spalten der Insiders Cloud Tabelle.

      mapping:col

Nummer der Spalte in der CSV-Datei.

      mapping:default

Wert, der in die Insiders Cloud Tabelle gesetzt werden soll, wenn kein Wert in der CSV-Datei enthalten ist oder wenn die Spalte nicht enthalten ist.

      mapping:format

Angabe, um die Werte in der Importdatei für den Import anzupassen. Mögliche Werte sind:

  • TRIM: Leerzeichen am Anfang und Ende entfernen
  • TRIMALL: Alle Leerzeichen entfernen
  • SIMPLE: alle Zeichen außer Buchstaben und Zahlen entfernen.
    Beispiel: 25$ und zwanzig Cent!25undzwanzigCent
  • INTEGER(<Dezimaltrenner>): Zahlenwert vor dem Dezimaltrenner importieren.
    Beispiel: 1.123,001123
  • DECIMAL(<Dezimaltrenner>): Dezimalzahlenwert ohne überflüssige Nullen und Zeichen importieren. Trenner beim Import ist ein Dezimalpunkt.
    Beispiel: 1.222,25001222.25
  • DATE(<Quellformat>): Den Datumswert aus dem angegebenen Quellformat in das Format "dd.MM.yyyy" wandeln.
    Beispiel: DATE(yyyy-MM-dd): 2024-12-3131.12.2024

Bei INTEGER, DECIMAL, DATE beziehen sich die Angaben für Dezimaltrenner und das Datumsformat auf das Format in der Quelldatei. Dieses wird in das für den Import benötigte Format umgesetzt.
Es darf nur ein Wert verwendet werden.

      mapping:length

Anzahl von Zeichen, auf den der Wert abgeschnitten werden soll.

Ohne Wert wird nicht abgeschnitten.

      mapping:target

Name der Spalte der Insiders Cloud Tabelle

    reset-data

Steuerung, ob die vorhandenen Daten ersetzt oder ergänzt werden sollen.

Default: true

    subsystem Es gibt in den unterschiedlichen Subsystemen in der Insiders Cloud unterschiedliche Stammdatentabellen.
Aktuell wird nur das Subsystem 'Invoice' unterstützt.
  transfer:cron

Konfiguration für die Zeit, in der das Vorliegen von Daten geprüft wird.

Der Wert '-' deaktiviert das Prüfen.

  transfer:path Verzeichnis, in dem die zu übertragenden Stammdatendateien abgelegt werden.
  transfer:tables Bereich für die Konfiguration aller Tabellen, deren Daten zu übertragen sind.

Beispiel:

insiders:
  masterdata-upload:
    #cron: '-' # no action
    cron: '0 */1 * * * *'
    transfer:
      path: "input"
      tables:
        - name: SFI_RECIPIENT
          file-prefix: SFI_RECIPIENT
          reset-data: true
          chunk-size: 100
          subsystem: Invoice
          csv:
            separator: "*"
            start-line: 2
            encoding: ISO-8859-1
          mapping:
            - col: 2
              target: RE_PK
              length: 20
            - col: 3
              target: RE_RECIPIENT_NO
              length: 20
              #format possible values: INTEGER(<separator>), DECIMAL(<separator>), TRIM, TRIMALL, SIMPLE, DATE
              format: SIMPLE
            - col: 1
              target: RE_NAME
              length: 80
            - col: 7
              target: RE_STREET
              length: 35
            - col: 4
              target: RE_COUNTRY
              length: 2
              default: DE
            - col: 6
              target: RE_ZIPCODE
              length: 10
            - col: 5
              target: RE_CITY
              length: 35
        - name: SFI_VENDOR
          file-prefix: SFI_VENDOR
          reset-data: true
          csv:
            separator: "TAB"
            start-line: 6
            encoding: UTF-8
          mapping:
            - col: 1
              target: VE_RECIPIENT_NO
              length: 20
            - col: 2
              target: VE_VENDOR_NO
              length: 20
            - col: 3
              target: VE_NAME
              length: 80
            - col: 4
              target: VE_STREET
              length: 35
            - col: 5
              target: VE_COUNTRY
              length: 2
            - col: 6
              target: VE_VAT_ID_NO
              length: 20
            - col: 7
              target: VE_BANK_NO
              length: 15
            - col: 8
              target: VE_BANK
              length: 60
            - col: 9
              target: VE_ZIPCODE
              length: 10
            - col: 10
              target: VE_CITY
              length: 35
            - col: 11
              target: VE_SWIFT_BIC
              length: 11
            - col: 12
              target: VE_ACCOUNT_NO
              length: 18
            - col: 13
              target: VE_IBAN
              length: 34

Konfiguration für das Loggen von Aktionen zur Auswertung durch Monitoring-Anwendung

Zur Visualierung von Verarbeitungsprozessen werden in der Regel Monitoring-Anwendung eingesetzt, die Log-Dateien von Services auswerten.

Der Service 'classify-pro' schreibt seine Aktionen in eine Log-Datei, die wie folgt in die Datei classifypro-prod.yml konfiguriert wird.

Beispiel:

monitor:
  file: '../../logs/classifypro.log'
  max-file-size: 100MB
  total-size-cap: 3GB
  max-days: 3
  details: true
Konfigurationsparameter:
total-size-cap Maximale Größe aller Log-Dateien.
max-file-size Maximale Größe einer Log-Datei.
max-days Maximale Aufbewahrungsdauer der Log-Dateien.
file Zieldatei für das Monitor-Log. Die Log-Datei wird täglich umbenannt und neu begonnen.
details

Diese Angabe steuert, ob weitere Zustandsdaten des Systems abgefragt und protokolliert werden.

Beispiel: Vor dem Download von Tasks die Gesamtzahl von Tasks ermitteln und nach dem Upload von Master-Data die Anzahl in den Tabellen abfragen.

Default: false

Geloggt werden Aktionen des Transfers

  • von der Insiders Cloud Tasks in das Übergabeverzeichnis der Automatischen Aktion 'Daten- / Dokumentenimport',
  • aus dem Übergabeverzeichnis für Stammdaten in die Insiders Cloud,
  • aus dem Übergabeverzeichnis für enaio® capture und enaio® capture-pro in die Insiders Cloud.

Beispiel für eine Log-Datei:

22:12:00.008 [scheduling-1] INFO  MONITOR [TASK-DOWNLOAD] - *** Start download tasks in state: Finished
22:12:00.143 [scheduling-1] INFO  MONITOR [TASK-DOWNLOAD] - available tasks: 58
22:12:00.143 [scheduling-1] INFO  MONITOR [TASK-DOWNLOAD] -  - Coordinator: 1
22:12:00.143 [scheduling-1] INFO  MONITOR [TASK-DOWNLOAD] -  - Supervisor: 1
22:12:00.143 [scheduling-1] INFO  MONITOR [TASK-DOWNLOAD] -  - Verifier: 56
22:12:00.143 [scheduling-1] INFO  MONITOR [TASK-DOWNLOAD] - tasks to process: 0
...
09:10:00.385 [scheduling-1] INFO  MONITOR [MASTERDATA] - check masterdata files in C:\DEV\git\classifyservice\..\classify_temp\masterdata
09:10:00.385 [scheduling-1] INFO  MONITOR [MASTERDATA] - Processing file VENDOR.txt ...
09:10:01.284 [scheduling-1] INFO  MONITOR [MASTERDATA] - uploaded 2 'SFI_VENDOR', errors: 0
09:10:01.286 [scheduling-1] INFO  MONITOR [MASTERDATA] - Move file to ..\classify_temp\masterdata\finished\VENDOR.txt
...
09:10:00.380 [scheduling-1] INFO  MONITOR [TASK-UPLOAD] - check scan files in C:\DEV\git\classifyservice\..\classify_temp\scanupload
09:10:00.380 [scheduling-1] INFO  MONITOR [TASK-UPLOAD] - processing file 'C:\DEV\git\classifyservice\..\classify_temp\scanupload\14012025_13\import.xml'
09:10:00.380 [scheduling-1] INFO  MONITOR [TASK-UPLOAD] - error processing C:\DEV\git\classifyservice\..\classify_temp\scanupload\14012025_13
09:10:00.380 [scheduling-1] INFO  MONITOR [TASK-UPLOAD] - processing file 'C:\DEV\git\classifyservice\..\classify_temp\scanupload\14012025_09\import.xml'
09:10:00.380 [scheduling-1] INFO  MONITOR [TASK-UPLOAD] - created task: ea9510df
09:10:00.380 [scheduling-1] INFO  MONITOR [TASK-UPLOAD] - upload done: uploaded 1 tasks (2 documents), errors: 1

Datenschutz in der Insiders Cloud

Initial liefert Insiders an OPTIMAL SYSTEMS und OPTIMAL SYSTEMS an jeden SubTenant mindestens einen Benutzer mit Passwort aus. Solange OPTIMAL SYSTEMS bzw. Insiders das Passwort bekannt ist, kann entspechend dieser Benutzer-Rechte, in der Regel administrative Reche, alles mit dem Account konfiguriert werde. Sobald der neue Benutzer das Passwort ändert, ist dies nicht mehr möglich.

Es gibt dann nur noch die Möglichkeit, mit dem administrativen Benutzers des Elterntenant die Durchsatzstatistik und im Coordinator die Stapel zu sehen. Dort können Stapel aktualisiert und zurückgesetzt werden und Logs geladen werden.

Ein Zugriff auf die entschlüsselten Bilder und die Matching-Daten ist nicht möglich.

Ähnliches gilt, wenn der SubTenant auf ein eigenes AD (SSO) umstellt.