Service 'classify-pro'
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.
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:
- 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:
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. |
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
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.