Transaktions-Cockpit (TransactionCockpit)
Zweck
Das Cockpit ist die tägliche Buchungs-Review-Queue der Buchhaltung — seit Juni 2026 im DATEV-artigen 3-Spalten-Layout und für zwei Beleg-Arten zuständig:
- Transaktionen (Bank/Pleo): Welche Transaktion braucht eine Entscheidung — welches SKR-Konto + Steuersatz passt? → Bestätigen & Buchen.
- Eingangsrechnungen (
incomingInvoice): Welche Rechnung ist zu verbuchen? → Aufwandskonto setzen, Freigeben → es entsteht ein offener Posten in den Verbindlichkeiten.
Pro Posten sieht der Sachbearbeiter links die Warteschlange, in der Mitte die Beleg-Vorschau (PDF), rechts die Buchungs-/Freigabe-Form mit KI-Bewertung (Ampel) — und oben eine 6-stufige Statuszeile, die den Fortschritt vom Beleg bis zur Zahlung anzeigt.
Voraussetzungen
Berechtigungen (CASL)
| Action | Subject | Wirkung |
|---|---|---|
view | FE_Transaction, Transaction | Cockpit aufrufbar (Route-Gate) |
view | TransactionAccount | Konto-Filter |
view | TransactionAllocation, TransactionAiAssessment | Vorschläge + KI-Bewertung sehen |
view | TransactionMatchProposal | OP-Matching-Vorschläge |
create | TransactionAllocation | „Bestätigen & Buchen", manuelle Zuordnung |
update | Transaction | Überspringen / matchingStatus-Flip |
view/update | PurchaseDocument | Eingangsrechnung anzeigen / Aufwandskonto setzen |
do | LockPurchaseDocument | Eingangsrechnung freigeben (verbuchen) |
do | AiSuggestion | KI-Klassifizierung erneut anstoßen |
Layout — drei Spalten
Seit dem Umbau (Juni 2026) ist das Cockpit eine DATEV-artige 3-Spalten-Oberfläche. Die linke und rechte Spalte sind per Maus an der Trennlinie breit-ziehbar (Breite wird lokal gemerkt):
| Spalte | Standardbreite | Inhalt |
|---|---|---|
| Links — Warteschlange | 320 px (220–560) | Liste der zu bearbeitenden Posten im aktiven Tab. |
| Mitte — Beleg-Vorschau | flexibel | PDF-Vorschau des Belegs (mehrseitig nebeneinander, zoombar) + Statuszeile. |
| Rechts — Buchung/Freigabe | 440 px (300–640) | Buchungsform (Transaktion) oder Freigabe-Panel (Eingangsrechnung) + KI-Bewertung. |
Oben läuft eine Kopfzeile mit Posten-Zähler („Posten 3 von 24"), den Tabs, dem Konto-Filter und den Tastatur-Hinweisen.
Tabs der Warteschlange
| Tab (UI) | CockpitTab | Zeigt |
|---|---|---|
| Offen | open | Transaktionen ohne Zuordnung (matchingStatus = unmatched). |
| Vorschläge | proposals | Transaktionen mit KI-Vorschlag (proposal_created). |
| Erledigt | completed | Gebuchte Transaktionen (auto_matched / manually_matched). |
| Alle | all | Offen + Vorschläge zusammen. |
| Eingangsrechnungen | incomingInvoices | Erfasste, noch nicht freigegebene Eingangsrechnungen (kein offener Posten). |
Eine Transaktions-Zeile zeigt: farbiger Statuspunkt · Gegenpartei · Datum · vorzeichenbehafteter Betrag (rot = Ausgabe, grün = Eingang). Eine Eingangsrechnungs-Zeile zeigt: Punkt · Lieferant · Belegnummer · Datum.
Statuszeile — sechs Stufen
Über der Beleg-Vorschau zeigt eine farbige Statuszeile den Fortschritt. Grün = erledigt, gelb = Vorschlag/geplant, grau = offen, rot = Achtung.
| Stufe | Eingangsrechnung | Transaktion |
|---|---|---|
| Belegdaten | grün, wenn Lieferant + Datum da | immer grün |
| Beleg | immer grün (bei Erfassung geprüft) | grün = Beleg da · rot = gebucht ohne Beleg (GoBD-Warnung) · grau = noch keiner |
| Konto | grün, wenn Aufwandskonto gesetzt | grün = gebucht · gelb = KI-Vorschlag · grau = leer |
| Steuer | grün, wenn Aufwandskonto gesetzt (Steuer folgt dem Konto) | grün = gebucht · gelb = Vorschlag · grau = leer |
| Verbuchung | grün, sobald offener Posten existiert | grün = gebucht · grau = offen |
| Zahlung | gelb „Geplant zum Zahlungsziel" | grün = gebucht · gelb = Vorschlag · grau = offen |
Rechte Spalte bei Transaktionen — Buchungsform + KI
Die Buchungsform (TransactionBookingForm) hat:
- SKR-Konto (Auswahl, vorbefüllt aus KI-Vorschlag),
- Steuersatz (Auswahl, vorbefüllt),
- Beleg-/Auftrags-Zuordnung (Auftrag / Einkaufsbeleg / Verkaufsbeleg — je nach Richtung).
Buttons: Bestätigen & Buchen (grün; löst POST /transactions/:id/allocation-proposal/apply aus), Ignorieren/Überspringen (setzt matchingStatus = skipped) und Aufteilen (noch in Arbeit — „Aufteilen folgt").
Darüber die KI-Bewertung (TransactionAiAssessmentPanel) als Ampel: ein konsolidierter KI-Pass (POST /transactions/:id/ai-analyze) bewertet Beleg-Qualität, Betrags-/Datums-Match und Plausibilität (rot/gelb/grün) und schlägt Konto, Steuersatz und Auftrag/Auslage vor. Details zur Score-Logik: KI-Allocation-Engine.
Manuelle Zuordnung
Schneller Pfad, wenn die KI nicht greift:
| Ziel | Wann? | SKR-Konto Pflicht? |
|---|---|---|
| Auftrag (Workorder) | Ausgang / Aufwand, Cost-Tracking | nein (nur Cost-Tracking ohne GL-Eintrag) |
| Einkaufsbeleg (PurchaseDocument) | Ausgang, Rechnung vorhanden | ja |
| Verkaufsbeleg (SalesDocument) | Eingang, Kundenzahlung | ja |
Speichern → POST /api/transaction-allocations; gebucht wird über Bestätigen & Buchen.
Rechte Spalte bei Eingangsrechnungen — Freigeben
Im Tab Eingangsrechnungen erscheint rechts statt der Buchungsform das Freigabe-Panel (IncomingInvoiceApprovalPanel):
- Aufwandskonto wählen (Pflicht — der Steuersatz wird aus dem Konto übernommen).
- Optional Arbeitsaufträge zuordnen (reine Kostenreferenz, siehe Einkaufsbelege).
- Freigeben → ruft
POST /api/purchase-documents/:id/lock. Damit wird die Rechnung verbucht (Soll-Versteuerung) und es entsteht ein offener Posten in den Verbindlichkeiten mit Fälligkeit aus dem Zahlungsziel. Die spätere Bank-Zahlung gleicht ihn automatisch aus.
Nach dem Freigeben verschwindet die Rechnung aus dem Eingangsrechnungen-Tab (sie hat nun einen offenen Posten).
Tastatur-Navigation
| Taste | Aktion |
|---|---|
↓ / j | nächster Posten |
↑ / k | vorheriger Posten |
↵ (Enter) | „Bestätigen & Buchen" (Hinweis in der Kopfzeile) |
Nach dem Buchen springt der Fokus automatisch zum nächsten Posten — so lässt sich die Warteschlange zügig abarbeiten.
Neu in Cockpit 2.0 (Juni 2026)
Mit dem rechnungsfluss-v2-Umbau wurde das Cockpit neu aufgebaut und um mehrere Funktionen erweitert:
Pipeline-Übersicht und Kontenblätter
Neben der Warteschlange gibt es eine Pipeline-/Status-Übersicht sowie Kontenblätter (PartyLedger) pro Kunde/Lieferant in DATEV-artigen Spalten — so sehen Sie den Verarbeitungsstand und die Konten-Historie einer Gegenpartei gebündelt.
„Ausgleichen" — gegenseitige Verrechnung von Transaktionen
Mehrere Transaktionen, deren Summe ≈ 0 ist (z. B. Zahlung + Rückerstattung), lassen sich über Ausgleichen (POST /transactions/offset, Toleranz 0,01 €) als manuell zugeordnet markieren und gegeneinander verknüpfen — ohne separate Buchung. Status danach: manually_matched.
Interne Transfers ausblenden
Der Filter „Interne Transfers einblenden" blendet standardmäßig GL-neutrale Geldbewegungen (z. B. PayPal-/Pleo-Verrechnung, Lohn) aus, damit die Queue nur echte Belegfälle zeigt. Bei Bedarf einblendbar.
PayPal-Posten nach Settlement-Periode gruppieren
PayPal-Abbuchungen aufs Bankkonto dienen als Perioden-Grenzen: Alle PayPal-Einzelbewegungen werden der jeweils nächsten Abbuchung zugeordnet und als Gruppe angezeigt — mit Abgleich Netto-Summe ≈ Abbuchungsbetrag (Saldo-Check). Das macht die Sammel-Abbuchungen der Zahlungsdienstleister nachvollziehbar.
KI-Fallback für Referenz-Vorschläge
Findet die Muster-/Regex-Suche (Auftrags-/Belegnummer, tolerante Kennzeichen-Suche) keine Zuordnung, liefert ein KI-Fallback-Button Referenz-Vorschläge — inklusive Vision-Analyse des Belegbilds. Bestätigte Zuordnungen werden als generischer EntityLink gespeichert.
Steuersatz-Override
Der Steuersatz kann am Beleg direkt überschrieben werden (PurchaseDocument.taxRateId) und geht dann dem Steuersatz des Aufwandskontos vor — siehe Bestellbelege.
Filter & Anzeige — kleinere Verbesserungen
- Zahlungskonto-Filter: Ein zusätzliches Dropdown „Zahlungskonto" (
paymentAccountId) filtert die Queue auf Transaktionen eines bestimmten Kontos (Quelle oder Ziel). Die Auswahl wird aus den geladenen Transaktionen abgeleitet; Default ist „Alle Zahlungskonten". Das Filter zählt zur Anzahl aktiver Filter. - Positions-Zähler im Matching-Panel: Neben dem Label „Matching-Vorschlag" zeigt ein dezenter Zähler die Position in der gefilterten Liste (z. B.
7/15). - EUR-Gegenwert bei Fremdwährung: Ist eine Transaktion nicht in EUR und liegt ein
amountEurvor, wird der EUR-Gegenwert in Klammern hinter dem Originalbetrag angezeigt (in Liste und Buchungsbereich).
Workflows und Zustände
Schritt-für-Schritt — typischer Arbeitstag
- Cockpit öffnen (
/transaction-cockpit), KPI-Tab Vorschläge wählen. - Erste Transaktion anklicken — Action-Panel füllt sich mit Score, Konto-Vorschlag und KI-Begründung.
- Plausibilität prüfen — passt das SKR-Konto, ist der Steuersatz richtig, gibt es einen Beleg?
- Beleg-Icon leer → noch hochladen (entweder vorher im Pleo-Workflow oder im Transaktions-Detail unter Dokumente).
- Auftrag fehlt → in der Manual-Section nachtragen oder neu klassifizieren.
- Bestätigen & Buchen → Allocation wird gebucht (
AccountEntrieserzeugt), Status wechselt auf „Gebucht ✓". - Nächste Transaktion. Wer schnell ist, schafft 30–50 Tx in einer Sitzung.
Schwierige Fälle → Überspringen und später mit Buchhaltungs-Leitung klären.
Weg 2 — Massen-Bestätigung per KI-Chat
Beispiel-Prompt:
Zeige alle Pleo-Transaktionen der letzten 30 Tage mit Score ≥ 80, die noch
nicht bestätigt sind. Pro Tx: Datum, Betrag, vorgeschlagenes Konto, Score,
KI-Begründung. Ich bestätige die plausiblen, du buchst sie dann gemeinsam.
Die KI liefert die Tabelle, der User markiert die OK-Fälle, KI führt applyTransactionAllocationProposal() pro Eintrag aus. Risiko-Tx bleiben offen für die manuelle Sichtung.
Verknüpfungen zu anderen Modulen
- Transaktionen — Datenbasis (
matchingStatus,hasReceipt). - Transaktions-Zuordnungen — Allocation-Modell + API-Details.
- KI-Allocation-Engine — wie der Score zustande kommt.
- Belegfreigabe-Cockpit — fachliche Prüfung/Freigabe eingehender Rechnungen (eigener Schritt vor der Verbuchung).
- Buchungsmuster — pro Gegenpartei gelernte Konto-/Steuer-Zuordnungen, die den KI-Vorschlag boosten (Lernlogik aktiv; eigene Seite seit Cockpit 2.0 entfallen).
- Buchhaltungskonten — Pflicht-Filter (Sidebar).
- Match-Vorschläge — paralleler Workflow für Offene-Posten-Ausgleich (Debitor/Kreditor), nicht für SKR-Kontierung.
- Konten-Buchungen — werden von der Buchungs-Logik erzeugt.

Eingangsrechnungen vs. Transaktionen — der Unterschied
| Aspekt | Transaktion | Eingangsrechnung |
|---|---|---|
| Abschluss-Aktion | Bestätigen & Buchen | Freigeben |
| Backend | allocation-proposal/apply (TransactionAllocation) | purchase-documents/:id/lock (verbucht + OpenItem) |
| Pflichtfeld | SKR-Konto oder Beleg-Zuordnung | Aufwandskonto |
| Steuersatz | wählbar | folgt automatisch dem Aufwandskonto |
| Ergebnis | Konto-Buchung der Transaktion | offener Posten in den Verbindlichkeiten |
Häufige Fehler und Lösungen
| Fehler | Lösung |
|---|---|
| Liste ist leer | Tx-Status booked prüfen; Konto-Filter zurücksetzen; Tab auf „Alle". |
| Kein KI-Vorschlag im Panel | KI-Bewertung über POST /transactions/:id/ai-analyze anstoßen, dann neu laden. |
| „Bestätigen & Buchen" nicht klickbar | Berechtigung create:TransactionAllocation fehlt, oder weder Konto noch Beleg-Zuordnung gewählt. |
| „Freigeben" (Eingangsrechnung) nicht möglich | Aufwandskonto fehlt am Beleg — erst setzen; ggf. fehlt do:LockPurchaseDocument. |
| Statuszeile „Beleg" rot | Transaktion gebucht, aber ohne Beleg (GoBD-Warnung) — Beleg im Transaktions-Detail nachreichen. |
| Tx zeigt sich auch nach Bestätigung als Vorschlag | Query-Cache stale — Cockpit-Reload (Toolbar-Refresh). |
API/Schnittstellen
| Methode | Endpoint | Zweck | CASL |
|---|---|---|---|
GET | /api/transactions | KPI- und Listen-Quelle | view Transaction |
GET | /api/transaction-accounts?filter[isExternal]=false&filter[status]=active | Sidebar-Konten | view TransactionAccount |
GET | /api/transactions/:id/allocation-proposal | Vorschlag (Score, Signals, Reasoning) | view TransactionAiAssessment |
POST | /api/transactions/:id/allocation-proposal/apply | „Bestätigen & Buchen" (forceBookAndMatch=true) | create TransactionAllocation, update Transaction |
POST | /api/transactions/:id/ai-analyze | Konsolidierter KI-Pass (Bewerten + Klassifikation in einem Request) | do AiSuggestion |
POST | /api/transactions/:id/ai-classify | KI nur neu klassifizieren | do AiSuggestion |
POST | /api/transaction-allocations | Manuelle Allocation anlegen | create TransactionAllocation |
PATCH | /api/transactions/:id | Überspringen / matchingStatus-Override | update Transaction |
POST | /api/purchase-documents/:id/lock | Eingangsrechnung freigeben (verbuchen, OpenItem) | do LockPurchaseDocument |
GET | /api/transaction-match-proposals?filter[transactionId] | OP-Matching (separater Workflow) | view TransactionMatchProposal |
POST | /api/transactions/offset | mehrere Transaktionen gegenseitig ausgleichen (Σ ≈ 0) | update Transaction |
GET/POST/DELETE | /api/entity-links | Verknüpfungen (EntityLink) lesen/anlegen/löschen | — |
Versionshinweise
- 2026-06-22: Kleinere Cockpit-Verbesserungen — Zahlungskonto-Filter (
paymentAccountId, Quelle oder Ziel), Positions-Zähler (index/total) im Matching-Panel und EUR-Gegenwert bei Fremdwährung (amountEur). Verifiziert anTransactionCockpitPage.tsx,TransactionConsolidatedPanel.tsx. - 2026-06-12 (Cockpit 2.0):
rechnungsfluss-v2-Umbau dokumentiert — Pipeline-Übersicht + Kontenblätter (PartyLedger), „Ausgleichen" (POST /transactions/offset), Filter „Interne Transfers", PayPal-Settlement-Gruppierung mit Saldo-Check, KI-Referenz-Fallback (Kennzeichen-/Vision), Steuersatz-Override. Belegfreigabe ausgelagert nach /document-approval;/booking-patternsals eigene Seite entfallen. Verifiziert anTransactionCockpitPage.tsx,transaction.controller.ts(offset),entityLink.model.ts. - 2026-06-03 (Nacht-Drop): Cockpit auf DATEV-artiges 3-Spalten-Layout umgebaut (Warteschlange / Beleg-Vorschau / Buchungs- bzw. Freigabe-Form). Neuer Tab Eingangsrechnungen mit Freigeben/Verbuchen (
IncomingInvoiceApprovalPanel→lockPurchaseDocument, erzeugt offenen Posten in den Verbindlichkeiten). 6-stufige Statuszeile (Belegdaten/Beleg/Konto/Steuer/Verbuchung/Zahlung, GoBD-Rot bei „gebucht ohne Beleg"). Konsolidierter KI-Passai-analyze(Bewerten+Klassifikation). Tastatur-Navigation (j/k/Pfeile, Auto-Advance nach Buchen). Frontmatter-Drift behoben: Route-Gate istFE_Transaction(nichtFE_TransactionCockpit). Verifiziert anTransactionCockpitPage.tsx,CockpitStatusRow.tsx,purchaseDocument.controller.ts. - 2026-04-30: Initiale Veröffentlichung.
- 2026-05-16 (Welle 129): Komplett umgebaut auf das neue Allocation-Modell. KPI-Tabs zeigen
matchingStatus(unmatched/proposal_created/auto_matched/manually_matched/skipped); Action-Panel nutztAiClassificationCardmit Score-Engine, Signal-Breakdown, KI-Reasoning + Confidence; „Bestätigen & Buchen" löstforceBookAndMatch=trueaus; Beleg-Icon-Spalte mithasReceipt-Virtual-Field;ManualAllocationSectionfür Workorder/Purchase/Sales-Document-Zuordnung mit unterschiedlicher Konto-Pflicht; RefLink-Icons öffnen Ziel-Modul im neuen Tab.