# Dokumentverarbeitung

Dokumentation zu Features, die bei der Hintergrundverarbeitung von Dokumenten zum Einsatz kommen.

# Barcode-Verarbeitung

Squeeze ist in der Lage Barcodes aus Dokumenten auszulesen. Die Extraktion von Barcodes findet in mehreren Funktionen Anwendungen, die hier dokumentiert werden.

### Barcode-Schritt

Die Barcodeerkennung ist einer der ersten Schritte in der Verarbeitungskette von Squeeze. Sie findet vor der Texterkennung statt:

[![image-1675769805083.png](https://docs.squeeze.one/uploads/images/gallery/2023-02/scaled-1680-/image-1675769805083.png)](https://docs.squeeze.one/uploads/images/gallery/2023-02/image-1675769805083.png)  
<sup>(Abb.1)</sup>

#### Barcodetrennung &amp; Anlagentrennung

Barcodes werden üblicherweise in diesen Szenarien genutzt:

- Trennung von Dokumentenstapeln in einzelne Dokumente
- Trennung von Anlagen und eigentlichem Dokument

Die Barcode-Verarbeitung im Barcode-Schritt lässt sich über [Stapelklasseneigenschaften](https://docs.squeeze.one/books/squeeze-2-admin-handbuch/page/stapelklassen-eigenschaften) konfigurieren. Falls die Konfigurationsmöglichkeiten nicht ausreichen ist der Barcode-Schritt via UserExit anpassbar: [Beispiele UserExit Barcodeverarbeitung](https://docs.squeeze.one/link/431#bkmrk-page-title).

##### Beispiel

**Ausgangssituation**

Durch die innerbetrieblichen Prozesse erstellen Sie für jede Woche je Lieferant eine Sammlung von eingescannten Dokumenten. Jede Rechnung beinhaltet nun ein von Ihnen angeklebten Barcode.

Mit dem Informationsgehalt, definieren die Barcodes nun die Art ihrer Dokumente.

**Umsetzung**

Squeeze bietet für die Lösungsumsetzung einige [Stapelklassen-Eigenschaften.](https://docs.squeeze.one/books/squeeze-2-admin-handbuch/page/stapelklassen-eigenschaften "Stapelklassen-Eigenschaften") Mit diesen Eigenschaften lassen sich der zu erkennende Barcode-Typ bestimmen (bei mehrerer Barcodes auf einer Seite hilfreich), definieren welche Seiten als Anhang verwendet werden sollen oder welche Seiten eine komplett neue Rechnung in Squeeze erzeugen sollen.

### Barcodes als Feldwerte extrahieren

Squeeze lässt auch die Extraktion von Barcodes als Feldwerte zu. Als Werkzeuge für die Realisierung dienen der [Barcode-Lokator](https://docs.squeeze.one/link/547#bkmrk-page-title) und die Nutzung der [AfterLocator-UserExits. ](https://docs.squeeze.one/books/squeeze-beispiele-f%C3%BCr-userexits/chapter/afterlocatorextraction)Diese Barcodes werden gemeinsam mit anderen Lokatoren im Extraktionsschritt ausgeführt:

[![image-1675773032222.png](https://docs.squeeze.one/uploads/images/gallery/2023-02/scaled-1680-/image-1675773032222.png)](https://docs.squeeze.one/uploads/images/gallery/2023-02/image-1675773032222.png)

<sup>(Abb. 2)</sup>

### Barcode-Engines

Squeeze verwendet für die Barcode-Erkennung die Softek Barcode-Engine. Weiterführende Informationen sowie die unterstützten Barcode-Typen entnehmen Sie der Seite [Softek Barcode-Engine](https://docs.squeeze.one/books/squeeze-2-admin-handbuch/page/softek-barcode-engine "Softek Barcode-Engine").

<p class="callout info">Die früher verfügbaren Engines ZXing und ZBar wurden mit Version 2.35 entfernt. Ist in einer Stapel- bzw. Dokumentenklasse oder an einem Lokator noch der Wert `ZXING`, `ZBAR` oder `ALL` hinterlegt, wird dieser ignoriert - die Erkennung läuft über Softek - und es wird eine Warnung in das Log geschrieben.</p>

# Softek Barcode-Engine

Squeeze verwendet für die Barcode-Erkennung die Softek Barcode Engine. Seit Version 2.35 (September 2026) ist sie die einzige Barcode-Engine; die früher verfügbaren Engines ZXing und ZBar wurden entfernt. Die Verwendung der Engine bedarf einer besonderen Konfiguration, auf die wir in diesem Artikel eingehen werden.

##### Einsatz der Softek Barcode Engine

Der Barcode-Extraktions-Schritt

Um die Integration gänzlich auch in Ihrem Projekt einsetzen zu können müssen Sie folgende Schritte beachten.

1. Bestimmen Sie den Barcode-Typen und den Barcode-RegEx-Pattern (s. [Stapelklassen-Eigenschaften](https://docs.squeeze.one/books/squeeze-2-admin-handbuch/page/stapelklassen-eigenschaften "Stapelklassen-Eigenschaften")).
2. Wenn nötig konfigurieren Sie den [Barcode-Lokator](https://docs.squeeze.one/books/squeeze-2-admin-handbuch/page/lokator-barcode "Lokator: Barcode") für ihre Eingabebereiche in der Validierung.

<p class="callout info">Die Stapelklasseneigenschaft `BarcodeEngine` muss nicht mehr gesetzt werden. Ist sie leer oder nicht vorhanden, wird Softek verwendet. Steht dort noch `ZXING`, `ZBAR` oder `ALL`, wird der Wert ignoriert und es wird eine Warnung in das Log geschrieben.</p>

##### Überprüfung der Verfügbarkeit von Softek

Squeeze bietet einen System-Check für die Barcode-Engine. Dieser System-Check überprüft die Verfügbarkeit des Lizenzschlüssels sowie die Ladbarkeit der Bibliothek. Ist alles Konfiguriert können Sie unter der Administration von Squeeze den Punkt [System-Prüfung](https://docs.squeeze.one/link/512#bkmrk-system-pr%C3%BCfungen) aufrufen:

[![image-1675776106662.png](https://docs.squeeze.one/uploads/images/gallery/2023-02/scaled-1680-/image-1675776106662.png)](https://docs.squeeze.one/uploads/images/gallery/2023-02/image-1675776106662.png)

Nun überprüfen Sie das Ergebnis und achten Sie dabei auf die Hinweise der [System-Prüfungen und deren Bedeutungen](https://docs.squeeze.one/link/512#bkmrk-system-pr%C3%BCfungen)  
Im Idealfall sieht ihr Softek Barcode License Check wie folgt aus :

<p class="callout success">[![image-1675776568068.png](https://docs.squeeze.one/uploads/images/gallery/2023-02/scaled-1680-/image-1675776568068.png)](https://docs.squeeze.one/uploads/images/gallery/2023-02/image-1675776568068.png)</p>

<p class="callout danger">Meldet der System-Check einen fehlenden Lizenzschlüssel oder eine nicht ladbare Bibliothek, ist die Barcode-Erkennung nicht funktionsfähig. Da Softek die einzige Barcode-Engine ist, betrifft das jedes System, in dem Barcodes ausgelesen oder Dokumente per Barcode getrennt werden.</p>

##### Unterstützte Barcode-Typen

Softek deckt alle Barcode-Typen ab, die zuvor über ZXing und ZBar verfügbar waren, und darüber hinaus zusätzlich Codabar und Datamatrix. Bei Sonder-Umsetzungen können Sie immer gerne mit ihrem zuständigen Squeeze-Berater in Kontakt treten.

Die unterstützten Barcode-Typen und der jeweils in der Konfiguration einzutragende Wert sind:

<table border="1" class="align-center" id="bkmrk-barcode-typ-wert-in-" style="width: 60%; border-collapse: collapse;"><tbody><tr><td style="width: 50%;">Barcode-Typ</td><td style="width: 50%;">Wert in der Konfiguration</td></tr><tr><td style="width: 50%;">Codabar</td><td style="width: 50%;">`CODABAR`</td></tr><tr><td style="width: 50%;">Code 39</td><td style="width: 50%;">`CODE_39`</td></tr><tr><td style="width: 50%;">Code 93</td><td style="width: 50%;">`CODE_93`</td></tr><tr><td style="width: 50%;">Code 128</td><td style="width: 50%;">`CODE_128`</td></tr><tr><td style="width: 50%;">Code 25 / ITF</td><td style="width: 50%;">`ITF`</td></tr><tr><td style="width: 50%;">Datamatrix</td><td style="width: 50%;">`DATA_MATRIX`</td></tr><tr><td style="width: 50%;">EAN 8</td><td style="width: 50%;">`EAN_8`</td></tr><tr><td style="width: 50%;">EAN 13</td><td style="width: 50%;">`EAN_13`</td></tr><tr><td style="width: 50%;">QR-Code</td><td style="width: 50%;">`QR_CODE`</td></tr></tbody></table>

<p class="callout warning">Der Wert ist case-sensitiv (Groß-Kleinschreibung beachten!). Beachten Sie insbesondere, dass Code 25 als `ITF` und Datamatrix als `DATA_MATRIX` einzutragen ist. Nicht aufgeführte Typen werden nicht gelesen; Squeeze schreibt in diesem Fall lediglich eine Warnung in das Log.</p>

<p class="callout info">Damit Squeeze die Extraktion eines Dokumentes nicht gänzlich unterbricht, weil die Softek-Barcode-Engine nicht verfügbar ist, werden Fehler ins bekannte [Log](https://docs.squeeze.one/books/squeeze-2-admin-handbuch/chapter/logging-debugging "Logging & Debugging") geschrieben.</p>

# Worker Manager

Der Worker Manager ist eine experimentelle Komponente zur Verteilung von Jobs an mehrere Worker.

Der Manager wurde umgesetzt, um eine faire Verteilung der verfügbaren Worker zu ermöglichen, was überwiegend im Cloud Kontext zum Einsatz kommt.

### Konfiguration

Der Manager ist in Squeeze aktivierbar, indem folgendes konfiguriert wird.

#### Umgebungsvariablen

Diese Umgebungsvariablen müssen am Squeeze Server eingestellt werden, damit der Manager nutzbar wird.

<table border="1" id="bkmrk-sqz_worker_manager_u" style="border-collapse: collapse; width: 100%; height: 87px;"><tbody><tr style="height: 29px;"><td style="width: 50%; height: 29px;">SQZ\_WORKER\_MANAGER\_URL</td><td style="width: 50%; height: 29px;">Die HTTP Adresse des Worker Managers</td></tr><tr style="height: 29px;"><td style="width: 50%; height: 29px;">SQZ\_WORKER\_MANAGER\_ACTIVE</td><td style="width: 50%; height: 29px;">Ist der Manager überhaupt aktiv und nutzbar?</td></tr><tr style="height: 29px;"><td style="width: 50%; height: 29px;">SQZ\_WORKER\_MANAGER\_FORCE</td><td style="width: 50%; height: 29px;">**Optional** - Diese Variable forciert, dass alle Mandanten den Worker Manager nutzen und übersteuert das zugehörige Feature Flag.

Zweck dieser Variable ist, dass somit alle Kunden dazu forciert werden, den Manager zu nutzen, wenn bspw. die RabbitMQ nicht mehr eingesetzt werden soll.

</td></tr></tbody></table>

<div id="bkmrk-sqz_worker_manager_u-0">```
SQZ_WORKER_MANAGER_URL: "http://worker-manager:80"<br></br>SQZ_WORKER_MANAGER_ACTIVE: "true"<br></br>SQZ_WORKER_MANAGER_FORCE: "true" # Optional
```

</div>#### Server/Mandantenkonfiguration

Das Feature Flag `workerManager` aktiviert für einen Mandanten oder den Server, ob der Manager für die Verwaltung von Jobs genutzt werden soll.

**Achtung:** Die Umgebungsvariable `SQZ_WORKER_MANAGER_FORCE` überschreibt dieses Feature Flag. Falls also das Flag gesetzt ist, aber das System das zu ignorieren scheint, sollte geprüft werden, ob diese Umgebungsvariable durch einen Administrator gesetzt wurde.

```JSON
{
    "features": {
        "workerManager": "False"
    },
}
```

### Funktionsweise

#### Jobauswahl

Der Manager wählt Jobs so aus, dass zeitgleich möglichst viele Kunden bedient werden. Diese Auswahl basiert auf dem Ansatz, dass der nächste zu bearbeitende Job von dem Kunden gewählt wird, der aktuell am wenigsten (bzw. keine) aktiven Jobs hat.

#### Fehlerbehandlung

Sollte es während der Verarbeitung zu einem unerwarteten Fehler kommen, dann werden Jobs erneut zur Verarbeitung eingereiht.

Bei **Timeouts** ist das Verhalten ebenso. Im Standard wird ein Job nach 28 Minuten als fehlgeschlagen interpretiert.

### Architektur

#### Datenbank

Der Manager speichert seine Daten ausschließlich in einer dedizierten SQL Datenbank.

<p class="callout warning">Die Datenbank des Managers enthält Jobs aller Mandanten. Sie muss während dem Server-Setup von Squeeze angelegt werden, wenn der Manager zum Einsatz kommen soll.</p>