LedgerLou Docs ist für Desktop optimiert.

Bitte öffne diese Seite auf einem Gerät mit breiterem Bildschirm.

LedgerLou Kreditoren

LedgerLou Kreditoren

Das Kreditoren-Modul bildet den gesamten Eingangsrechnungsprozess ab: Belege per E-Mail empfangen, per OCR extrahieren, gegen UStG §14 prüfen, Lieferanten zuordnen, buchen und offene Posten bis zur Zahlung nachverfolgen.

API Reference
E-Mail-EingangBelege per E-Mail empfangen — automatische OCR, Lieferantenzuordnung und Pflichtangaben-Prüfung
Lieferanten-StammdatenKreditoren mit IBAN, USt-IdNr., Standardkonto und Adresse zentral verwalten
OCR & AI-ExtraktionDokumente per OCR lesen und Rechnungsfelder strukturiert extrahieren
RechnungsprüfungAutomatische Prüfung der UStG §14 Pflichtangaben nach OCR-Extraktion
Offene Posten (OP-Liste)Verbindlichkeiten nach Kreditor gruppiert mit Restbeträgen und Fälligkeiten einsehen
API & MCPVollständiger REST-Zugang, MCP-Tools für den Kernflow verfügbar

Workflow

1
Beleg empfangenEingangsbelege werden per E-Mail an die mandantenspezifische Inbox-Adresse gesendet. Alternativ kann ein Dokument direkt per POST /v1/ocr/extract hochgeladen werden. Im E-Mail-Eingang werden PDF- und Bild-Anhänge automatisch erkannt.
2
OCR-Extraktion & PrüfungAnhänge werden per OCR gelesen und strukturierte Felder extrahiert: Lieferant, Beträge, Positionen, Steuerdaten, Leistungsdatum und mehr. Anschließend prüft der Compliance-Checker die formalen Pflichtangaben nach UStG §14 und klassifiziert den Dokumenttyp.
3
Kreditor zuordnenAus den OCR-Daten wird automatisch ein bestehender Kreditor per USt-IdNr., IBAN oder Namensabgleich gesucht. Falls kein Treffer: Kreditor mit Name, IBAN, USt-IdNr. und optionalem Standardkonto per Dashboard oder POST /v1/vendors anlegen.
4
Buchen & Rechnung anlegenBuchung erstellen (Aufwand an Verbindlichkeiten) per post_booking, dann Rechnung per POST /v1/invoices mit Positionen, Vendor-ID, Intent-ID und Document-ID anlegen. Der Status wechselt von draft zu open.
5
Offene Posten überwachenGET /v1/invoices/open-items zeigt alle unbezahlten Rechnungen gruppiert nach Kreditor. Fällige und überfällige Positionen sind sofort sichtbar.
6
Zahlung und AusgleichZahlungen werden über das Bank-Modul per candidate_kind=‘open_liability’ abgestimmt. Dabei wird der offene Posten reduziert und der Status automatisch auf partially_paid oder paid gesetzt.

E-Mail-Eingang (Inbox)

Jeder Mandant erhält eine eigene Inbox-Adresse (z.B. lou-orbits-neptune@ledgerlou.de), an die Lieferanten oder das interne Team Belege weiterleiten kann. Die Adresse ist per GET /v1/inbox/address abrufbar und wird beim ersten Aufruf automatisch zugewiesen.

Was beim Empfang passiert:

  1. Anhänge filtern — Nur PDF- und Bild-Anhänge (JPEG, PNG) werden verarbeitet. Andere Dateitypen werden ignoriert. Pro E-Mail maximal 20 Anhänge, max. 10 MB pro Datei.
  2. Dokument speichern — Der Anhang wird per SHA-256-Content-Hash dedupliziert und auf der Festplatte gespeichert. Duplikate werden automatisch erkannt und übersprungen.
  3. OCR-Extraktion — Das Dokument wird per Mistral-OCR in Markdown konvertiert, dann von einem LLM in strukturierte Felder geparst (siehe nächster Abschnitt).
  4. Lieferanten-Zuordnung — Die extrahierten Daten (USt-IdNr., IBAN, Name) werden gegen die bestehenden Kreditoren des Mandanten abgeglichen.
  5. Rechnungsprüfung — Der Compliance-Checker prüft die UStG §14 Pflichtangaben und klassifiziert den Dokumenttyp.
  6. Inbox-Eintrag — Alle Ergebnisse werden als Inbox-Eintrag mit Status pending gespeichert.

Inbox-Status:

StatusBedeutung
pendingBeleg empfangen, wartet auf Verarbeitung durch User oder Agent
processingWird gerade verarbeitet
confirmedRechnung erstellt und gebucht
rejectedBeleg abgelehnt (ungültig, doppelt oder kein Rechnungsdokument)

OCR-Extraktion

Die OCR-Extraktion läuft in zwei Stufen: Zunächst wird das Dokument per Mistral-OCR in Markdown-Text umgewandelt. Dann extrahiert ein LLM die folgenden strukturierten Felder:

Dokumentklassifikation:

FeldBeschreibung
document_typeDokumenttyp: invoice, credit_note, order_confirmation, delivery_note, quote, reminder, receipt, other

Lieferantendaten:

FeldBeschreibung
vendor_nameName des Lieferanten / Rechnungsstellers
vendor_addressVollständige Adresse des Lieferanten
vendor_vat_idUSt-IdNr. (z.B. DE123456789)
vendor_tax_idSteuernummer (z.B. 27/123/45678)
vendor_ibanIBAN des Lieferanten

Empfängerdaten:

FeldBeschreibung
buyer_nameName des Leistungsempfängers
buyer_addressAdresse des Leistungsempfängers

Rechnungsdaten:

FeldBeschreibung
invoice_numberRechnungsnummer
invoice_dateRechnungsdatum (YYYY-MM-DD)
delivery_dateLiefer-/Leistungsdatum (YYYY-MM-DD)
due_dateFälligkeitsdatum (YYYY-MM-DD)
total_netNettobetrag
total_taxUmsatzsteuerbetrag
total_grossBruttobetrag
currencyWährung (Standard: EUR)

Positionen:

FeldBeschreibung
line_items[].descriptionBeschreibung der Position
line_items[].quantityMenge
line_items[].unit_priceEinzelpreis netto
line_items[].tax_rateSteuersatz als Dezimalzahl (z.B. 0.19)
line_items[].line_totalPositionsbetrag brutto

Sonstiges:

FeldBeschreibung
payment_termsZahlungsbedingungen
reference_textVerwendungszweck / Referenz für die Überweisung

Felder, die im Dokument nicht erkennbar sind, werden als null zurückgegeben. Steuersätze, die das LLM als Prozentwerte liefert (z.B. 19 statt 0.19), werden automatisch normalisiert.

Rechnungsprüfung (UStG §14)

Nach der OCR-Extraktion prüft LedgerLou automatisch, ob das Dokument die formalen Pflichtangaben nach UStG §14 enthält. Diese Angaben sind Voraussetzung für den Vorsteuerabzug.

Was geprüft wird:

#RegelBezeichnung
1supplier_nameName des Leistenden
2supplier_addressAnschrift des Leistenden
3buyer_nameName des Leistungsempfängers
4buyer_addressAnschrift des Leistungsempfängers
5supplier_tax_idSteuernummer oder USt-IdNr.
6invoice_dateRechnungsdatum
7invoice_numberRechnungsnummer
8line_itemsMenge und Art der Leistung
9delivery_dateZeitpunkt der Lieferung
10net_amountNettobetrag
11tax_rate_and_amountSteuersatz und Steuerbetrag
12gross_amountBruttobetrag

Dokumenttyp-Erkennung: Nicht-Rechnungsdokumente (Angebote, Lieferscheine, Bestellbestätigungen etc.) werden als solche erkannt. Alle Prüfungen werden dann als not_applicable markiert, damit diese Dokumente nicht versehentlich als formal korrekte Rechnungen behandelt werden.

Leistungsdatum: Wenn kein explizites Leistungsdatum vorhanden ist, wird das Rechnungsdatum als Leistungsdatum angenommen (gängige BMF-Praxis). Der Checker markiert dies mit einem entsprechenden Hinweis.

Ergebnis im Dashboard: Die Spalte “Pflichtangaben” in der Inbox-Tabelle zeigt auf einen Blick:

  • Grün 12/12 — alle Pflichtangaben vorhanden
  • Gelb 10/12 — Pflichtangaben fehlen
  • Rot mit Dokumenttyp (z.B. “Angebot”) — kein Rechnungsdokument

Hinweis: Die Rechnungsprüfung deckt die wesentlichen formalen Pflichtangaben nach UStG §14 ab und soll frühzeitig auf fehlende Felder aufmerksam machen. Sie ersetzt keine steuerliche Beratung und erhebt keinen Anspruch auf Vollständigkeit. Sonderfälle wie innergemeinschaftliche Lieferungen, Reverse-Charge-Sachverhalte (§13b UStG), Differenzbesteuerung oder branchenspezifische Zusatzanforderungen werden derzeit nicht gesondert geprüft. Im Zweifelsfall sollte die Rechnung durch einen Steuerberater beurteilt werden.

Dokumenttyp-Erkennung

Das OCR-System klassifiziert jedes eingehende Dokument in einen der folgenden Typen:

TypBeschreibung
invoiceRechnung
credit_noteGutschrift
order_confirmationBestellbestätigung
delivery_noteLieferschein
quoteAngebot
reminderMahnung
receiptQuittung
otherSonstiges

Nur invoice und credit_note werden als Rechnungsdokumente behandelt und gegen die Pflichtangaben geprüft. Für alle anderen Dokumenttypen werden alle Prüfungen als not_applicable markiert.

JSON-Schema (compliance_check)

Das Ergebnis der Prüfung wird als compliance_check JSONB-Feld im Inbox-Eintrag gespeichert und ist über GET /v1/inbox, GET /v1/inbox/:id sowie die MCP-Tools list_inbox_documents und get_inbox_document abrufbar.

{
  "document_type": "invoice",
  "is_invoice": true,
  "compliant": true,
  "passed": 12,
  "total": 12,
  "checks": [
    {
      "rule": "supplier_name",
      "label": "Name des Leistenden",
      "status": "pass"
    },
    {
      "rule": "delivery_date",
      "label": "Zeitpunkt der Lieferung",
      "status": "pass",
      "detail": "Rechnungsdatum als Leistungsdatum angenommen (BMF-Praxis)"
    }
  ]
}

Jede Prüfung hat einen von drei Status-Werten:

  • pass — Pflichtangabe vorhanden
  • fail — Pflichtangabe fehlt
  • not_applicable — Prüfung nicht anwendbar (Nicht-Rechnungsdokument)

Beispiel: Rechnung mit fehlenden Angaben

{
  "document_type": "invoice",
  "is_invoice": true,
  "compliant": false,
  "passed": 10,
  "total": 12,
  "checks": [
    { "rule": "supplier_name", "label": "Name des Leistenden", "status": "pass" },
    { "rule": "supplier_address", "label": "Anschrift des Leistenden", "status": "pass" },
    { "rule": "buyer_name", "label": "Name des Leistungsempfängers", "status": "fail" },
    { "rule": "buyer_address", "label": "Anschrift des Leistungsempfängers", "status": "fail" },
    { "rule": "supplier_tax_id", "label": "Steuernummer oder USt-IdNr.", "status": "pass", "detail": "USt-IdNr. vorhanden" },
    { "rule": "invoice_date", "label": "Rechnungsdatum", "status": "pass" },
    { "rule": "invoice_number", "label": "Rechnungsnummer", "status": "pass" },
    { "rule": "line_items", "label": "Menge und Art der Leistung", "status": "pass" },
    { "rule": "delivery_date", "label": "Zeitpunkt der Lieferung", "status": "pass", "detail": "Rechnungsdatum als Leistungsdatum angenommen (BMF-Praxis)" },
    { "rule": "net_amount", "label": "Nettobetrag", "status": "pass" },
    { "rule": "tax_rate_and_amount", "label": "Steuersatz und Steuerbetrag", "status": "pass" },
    { "rule": "gross_amount", "label": "Bruttobetrag", "status": "pass" }
  ]
}

Beispiel: Nicht-Rechnungsdokument (Angebot)

{
  "document_type": "quote",
  "is_invoice": false,
  "compliant": false,
  "passed": 0,
  "total": 0,
  "checks": [
    { "rule": "supplier_name", "label": "Name des Leistenden", "status": "not_applicable", "detail": "Kein Rechnungsdokument" },
    { "rule": "supplier_address", "label": "Anschrift des Leistenden", "status": "not_applicable", "detail": "Kein Rechnungsdokument" }
  ]
}

Lieferanten-Zuordnung

Beim Eingang eines Belegs per E-Mail versucht LedgerLou automatisch, den Lieferanten anhand der OCR-Daten einem bestehenden Kreditor zuzuordnen. Die Zuordnung erfolgt in drei Stufen:

Stufe 1 — USt-IdNr. (höchste Priorität)

Wenn die OCR eine USt-IdNr. extrahiert hat, wird nach einem Kreditor mit identischer USt-IdNr. gesucht. Treffer gelten als sicher (confidence: 1.0).

Stufe 2 — IBAN

Falls keine USt-IdNr. gefunden wurde oder kein Treffer vorliegt, wird die extrahierte IBAN gegen die IBAN-Felder der bestehenden Kreditoren abgeglichen.

Stufe 3 — Name (Fuzzy-Match)

Wenn weder USt-IdNr. noch IBAN zu einem Treffer führen, wird der extrahierte Lieferantenname gegen die bestehenden Kreditoren verglichen. Ein Treffer wird nur vorgeschlagen, wenn die Ähnlichkeit über einem Schwellenwert liegt.

Das Ergebnis wird als vendor_match im Inbox-Eintrag gespeichert:

{
  "status": "matched",
  "vendor_id": "9fa85f64-...",
  "vendor_name": "Hetzner Online GmbH",
  "confidence": 1.0,
  "match_method": "vat_id"
}

Bei status: "not_found" wurde kein passender Kreditor gefunden — in diesem Fall muss vor der Buchung zuerst ein neuer Kreditor angelegt werden.

Duplikat-Erkennung

Das Kreditoren-Modul verhindert doppelte Einträge auf mehreren Ebenen:

Lieferanten

Beim Anlegen eines Kreditors per POST /v1/vendors werden geprüft:

  • Name (case-insensitive, Unicode-normalisiert) — identischer Name wird abgelehnt
  • USt-IdNr. — identische USt-IdNr. wird abgelehnt
  • Steuernummer — identische Steuernummer wird abgelehnt

Die Fehlerantwort enthält die ID des bestehenden Kreditors, sodass ein Agent oder Nutzer direkt darauf verweisen kann.

Rechnungen

Beim Anlegen einer Eingangsrechnung per POST /v1/invoices wird die Kombination aus Kreditor-ID und Rechnungsnummer auf Eindeutigkeit geprüft. Eine doppelte Rechnungsnummer beim selben Kreditor wird abgelehnt.

Inbox-Dokumente

Beim E-Mail-Eingang wird der Content-Hash (SHA-256) jedes Dokuments berechnet. Wird dasselbe Dokument erneut empfangen (z.B. durch mehrfaches Weiterleiten), wird der Duplikat-Eintrag still übersprungen (ON CONFLICT DO NOTHING).

Status-Lebenszyklus (Rechnungen)

StatusBedeutung
draftRechnung erfasst, aber noch nicht gebucht (kein Intent)
openMit Journal verknüpft, vollständig offen
partially_paidTeilzahlung eingegangen
paidVollständig bezahlt
overdueOffene Rechnung mit überschrittenem Fälligkeitsdatum

Zugangswege

Dashboard (UI)Kreditoren verwalten, Inbox-Belege sichten mit Pflichtangaben-Prüfung, Rechnungen erfassen und offene Posten einsehen.
REST APILieferanten, Rechnungen, Inbox und offene Posten programmatisch verwalten. OCR-Extraktion und Compliance-Daten für automatisierte Belegverarbeitung.
MCPMCP Agents können Kreditoren anlegen, Inbox-Belege prüfen, Rechnungen erfassen und offene Posten abfragen. Compliance-Daten fließen automatisch in den Agent-Workflow ein.

Scopes

kreditoren:readkreditoren:write