# 01 – Übersicht

Der Squeeze Pull-Job holt fertig gelesene Belege per Squeeze REST-API v2 nach DOCUMENTS ab und ersetzt den SOAP-Export. Diese Seite beschreibt Funktionsweise und Statuswerte für den Mappentyp Invoice. Stand 09.11.2026.

## Was ist der Pull-Job

Bisher hat Squeeze fertig gelesene Belege per SOAP nach DOCUMENTS geschoben. Beim Pull holt DOCUMENTS die Belege selbst über die REST-API v2 von Squeeze ab. Je Mappentyp gibt es ein eigenes Job-Skript, das im Scheduler viertelstündlich läuft und die generische Bibliothek `Squeeze_Pull_Lib` aufruft.

Der Job fragt im Queue-Step „Export“ nur die Belege der konfigurierten Squeeze-Klasse ab. Je Beleg legt er einen Vorgang an oder aktualisiert einen vorhandenen. Er schreibt Kopffelder, Positionen (Gentable) und Anhänge und meldet den Beleg danach über das Export-Interface „Pull“ als FINISHED an Squeeze. Erst dann gilt der Vorgang als fertig und darf in den Workflow.

Die Zuordnung Beleg → Vorgang läuft über das Feld `SqueezeID`. Findet der Job darüber keinen Vorgang, sucht er zusätzlich über die externalId des Belegs (Belege aus der SOAP-Zeit).

<p class="callout info">Die Zuordnung Beleg → Vorgang läuft ausschließlich über das Feld `SqueezeID`.</p>

## Ablauf je Beleg

1. **Vorgang suchen:** zuerst über `SqueezeID`, sonst über die externalId des Belegs. Dabei zählt nur ein aktiver Vorgang desselben Mappentyps ohne fremde `SqueezeID`.
2. **Vorgang anlegen:** Gibt es keinen Vorgang, wird er neu angelegt und **sofort** mit `SqueezeID` und `SqueezeStatus = Unfinished` gespeichert. Einen Vorgang auf `Processed` überschreibt der Job nie.
3. **Daten schreiben:** Kopffelder, Positionen und Anhänge, danach speichern. Felder, die es am Mappentyp nicht gibt, werden übersprungen (Hinweis im Log). Der Beleg wird trotzdem übernommen.
4. **Abschließen:** Bei Erfolg geht FINISHED an Squeeze, dann wird `SqueezeStatus = Processed` gesetzt, optional mit direktem Workflow-Start. Bei einem Fehler wird `SqueezeStatus = ERROR` gesetzt und kein FINISHED gemeldet. Der Beleg bleibt im Export und der nächste Lauf versucht es erneut.

## Häufigkeit und Menge je Lauf

Beides ist einstellbar:

- **Ausführungshäufigkeit:** über die Einplanung des Jobs `Invoice_JOB_SqueezePull` im Scheduler.
- **Belege je Lauf:** über den Schalter `MAX_DOCS_PER_RUN` in `Squeeze_Pull_Lib`, im Paket `100`. Was ein Lauf nicht schafft, übernimmt der nächste.

Empfehlung: viertelstündlich mit 100 Belegen starten. Staut sich der Export, zuerst das Intervall verkürzen (z.B. auf 5 Minuten), statt `MAX_DOCS_PER_RUN` stark zu erhöhen. Kurze Läufe machen Fehler schneller sichtbar, und bis DOCUMENTS 6.1 gibt es keinen HTTP-Timeout für die Squeeze-Aufrufe.

<p class="callout info">`MAX_DOCS_PER_RUN` ist kein Parameter, sondern eine Konstante in `Squeeze_Pull_Lib` und gilt damit für alle Mappentypen. Es läuft immer nur ein Lauf gleichzeitig. Ist ein Lauf beim Start der nächsten Ausführung noch nicht fertig, fällt diese Ausführung aus. Die restlichen Belege holt der nächste Lauf ab (Parallel-Sperre, siehe *Betrieb und Fehlersuche*). </p>

## SqueezeStatus am Vorgang

<table id="bkmrk-wert-bedeutung-workf"><thead><tr class="header"><th>Wert</th><th>Bedeutung</th><th>Workflow</th><th>Nächster Lauf</th></tr></thead><tbody><tr class="odd"><td>`Unfinished`</td><td>wird übernommen oder Lauf abgebrochen</td><td>nein</td><td>macht mit demselben Vorgang weiter</td></tr><tr class="even"><td>`ERROR`</td><td>Fehler erkannt, Grund im Log</td><td>nein</td><td>versucht es erneut</td></tr><tr class="odd"><td>`Processed`</td><td>fertig, FINISHED von Squeeze bestätigt</td><td>ja</td><td>überspringt, überschreibt nie</td></tr></tbody></table>

Die Werte `New`, `Analyze`, `Split` usw. stammen aus SOAP bzw. der Analyse. Der Pull-Job setzt sie nicht.

<p class="callout info">**Wichtig:** Den Workflow-Start für `Unfinished` und `ERROR` sperrt der Userexit `ue_beforeStartWorkflow` in `Invoice__UserExit_CustomLib`. Fehlt er, startet `Invoice_JOB_StartWorkflow` auch unfertige Vorgänge.</p>