# Was bei einem Lauf passiert

Ein Lauf besteht aus zwei Teilen: Erst werden neue Rechnungen aus dem Portal geholt, dann
werden fertige Inbox-Belege in die Eingangsrechnung übergeben.

<!-- TODO Screenshot: images/ablauf-protokoll.png -->

## Teil 1: Rechnungen holen

Abgefragt werden Rechnungen, die

- vom Typ **Eingangsrechnung** sind,
- im Portal **nicht archiviert** sind,
- das Schlagwort **`OK`** oder **`ZB`** tragen,
- seit dem **letzten Lauf** neu oder geändert wurden.

<p class="callout info">Der Zeitpunkt des letzten Laufs wird gespeichert. Beim allerersten Lauf beginnt die Zählung mit dem Moment des Starts — vorhandene alte Rechnungen im Portal werden also <strong>nicht</strong> nachgeholt. Wer sie will, muss sie im Portal berühren, damit sie als geändert gelten.</p>

Rechnungen mit dem Schlagwort `ImportError` werden übersprungen. Siehe
[Schlagworte im Portal](https://wiki.dako-it.com/books/finngmi-handbuch/page/schlagworte-im-portal).

## Je Rechnung: die Reihenfolge

1. **Lieferant bestimmen** aus dem Schlagwort `LNR`. Fehlt es oder gibt es die Nummer in der
   SelectLine nicht, bricht die Verarbeitung dieser Rechnung ab.
2. **Dublette prüfen.** Existiert in der Inbox schon ein Beleg mit derselben
   Rechnungsnummer, demselben Lieferanten und demselben Datum, wird die Rechnung im Portal
   archiviert und übersprungen.
3. **Bezug suchen** — Vorgängerbeleg, dann Vorlage. Siehe
   [Rechnung mit Vorgängerbeleg](https://wiki.dako-it.com/books/finngmi-handbuch/page/rechnung-mit-vorgangerbeleg) und
   [Wiederkehrende Rechnung über eine Vorlage](https://wiki.dako-it.com/books/finngmi-handbuch/page/wiederkehrende-rechnung-uber-eine-vorlage).
4. **Ohne Bezug:** neuer Beleg mit dem Artikel aus `ANR`. Siehe
   [Rechnung ohne Bezug](https://wiki.dako-it.com/books/finngmi-handbuch/page/rechnung-ohne-bezug).
5. **Rechnung ablegen** als Journal oder im Archiv.
6. **Bei `OK`:** den Inbox-Beleg zur Übergabe freigeben.
7. **Im Portal archivieren**, damit die Rechnung beim nächsten Lauf nicht wieder erscheint.

<p class="callout success">Schritt 2 ist der Grund, weshalb ein doppelter Lauf nichts kaputt macht. Wer unsicher ist, ob eine Rechnung schon drin ist, kann die Aufgabe gefahrlos erneut starten.</p>

## Wenn eine Rechnung scheitert

Dann wird der Fehler protokolliert, im Portal das Schlagwort `ImportError` gesetzt und ein
bereits angelegter Inbox-Beleg **wieder entfernt**.

<p class="callout success">Das ist die wichtigste Eigenschaft des Ablaufs: Es bleibt kein halber Beleg zurück. Entweder die Rechnung ist vollständig als Inbox-Beleg vorhanden, oder sie ist es nicht.</p>

Der Lauf macht mit der nächsten Rechnung weiter — eine gescheiterte Rechnung hält die
übrigen nicht auf.

## Die Bemerkung aus dem Portal

Eine im Portal hinterlegte Bemerkung wird in den Beleg übernommen, gekürzt auf 80 Zeichen.

## Teil 2: Übergeben

Nach dem Holen sieht die Schnittstelle die Inbox durch und übergibt alles, was zur Übergabe
freigegeben ist, in die Eingangsrechnung. Siehe
[Von der Inbox in die Eingangsrechnung](https://wiki.dako-it.com/books/finngmi-handbuch/page/von-der-inbox-in-die-eingangsrechnung).

<p class="callout info">Das passiert in <strong>jedem</strong> Lauf, unabhängig davon, ob neue Rechnungen im Portal lagen. Ein in der Inbox freigegebener Beleg wird deshalb auch dann übergeben, wenn er dort schon länger liegt.</p>

## Weiter

[Rechnung mit Vorgängerbeleg](https://wiki.dako-it.com/books/finngmi-handbuch/page/rechnung-mit-vorgangerbeleg)