Zum Hauptinhalt springen

Transaktionen

Zweck

Transaktionen (Transaction) sind die Konto-Bewegungen, die aus externen Quellen importiert werden — typischerweise über finAPI (Banking) oder PayPal-Integration. Pro Transaktion sehen Sie Datum, Wertdatum, Betrag, Waehrung, Quelle/Ziel-Konto, Status und ein Matching-Status, der die Verknuepfung mit OP-Listen widerspiegelt.

Voraussetzungen

- Mindestens ein verbundenes Bankkonto oder PayPal-Konto (siehe Setup-Wizard Schritt 6). - Berechtigung `view:Transaction`.

Berechtigungen (CASL)

ActionSubjectWirkungKeycloak-Rolle
viewFE_Transaction, TransactionListe/Details
updateTransactionStatus, Kategorie, Notiz ändernAPP_SPEAMCORE_UPDATE_TRANSACTION
deleteTransactionSoft-DeleteAPP_SPEAMCORE_DELETE_TRANSACTION
viewTransactionAllocationTab AllokationenAPP_SPEAMCORE_VIEW_TRANSACTION_ALLOCATION

Schritt-für-Schritt-Anleitung

Transaktionen einsehen

  1. Transaktionen (/transactions) — Liste mit Status-Filter (booked Default, pending, reversed).
  2. Klick auf Zeile → Detail-Seite mit zwei Tabs: General Data und Allocations.
  3. Im General-Data-Tab koennen Sie Status und Kategorie ändern. Datum, Betrag, Reference und Note sind read-only — sie kommen aus der externen Quelle.

Transaktion einer OP zuweisen

Tab Allocations (/transactions/:id/allocations) — zeigt alle bestehenden TransactionAllocation-Einträge. Neue Allokationen werden über das OP-Listen-Modal erstellt (siehe Forderungen / Verbindlichkeiten).

Transaktionen-Liste mit DataGrid (Demo-Mandant leer; Spalten und Filter sichtbar)

Toolbar (Detail-Seite)

Schlanke Toolbar oben rechts:

IconAktion (aria-label)CASLWirkung
ZurückgehenZurück zur Liste.
🏠Zur Startseite gehenSpringt auf das Dashboard / /.
⏮/◀/▶/⏭PaginationNavigation durch die gefilterte Liste — Massen-Bearbeitung ohne Liste-Sprung.

Wie auf jeder Detail-Seite verfuegbar — siehe Floating-Quickbar:

  • KAL. (Mini-Kalender)
  • ZEIT (Persoenliche Wochen-Arbeitszeit)
  • ARBEIT (Eigene bevorstehende Aufträge)

UI-Elemente

Filter: Status

Listenseite. booked (Default), pending, reversed.

Auswahl: Transaction Account From/To

Zwei Read-only Anzeigen mit Direkt-Link zur jeweiligen /transaction-accounts/:id-Detailseite.

Felder und Eingaben

FeldnamePflichtDatentypWirkung beim AusfuellenVoraussetzung
amountDecimal/Currency (read-only)Wert der Transaktion. Wird vom externen Provider gesetzt.
currencyString (read-only)Waehrung der Transaktion.
transactionDateDatum (read-only)Buchungsdatum.
valueDateDatum (read-only)Wertdatum.
referenceTEXT (read-only)Verwendungszweck/Reference vom Sender.
noteneinTEXTInterne Notiz. Wird nicht im Banking-System gespiegelt.
transactionCategoryIdneinUUID (Select)Kategorie zur Klassifizierung. Beeinflusst Reports und automatisches Matching.view:TransactionCategory.
statusneinpending/booked/reversedBuchungsstatus. reversed zeigt eine Storno-Bewegung an.
transactionAccountFromId / transactionAccountToIdUUID (read-only Link)Quell- und Ziel-Buchhaltungskonto.view:TransactionAccount.
matchingStatusEnum (read-only)unmatched, auto_matched, proposal_created, manually_matched, skipped. Steuert Anzeige im Cockpit und triggert die Allocation-Proposal-Engine. Schreibrechte über update:Transaction (Skip-Aktion).
hasReceipt Boolean (virtuell, read-only)true, wenn ein verknüpftes Document als Beleg hängt. Wird vom BE per batched afterFind-Hook berechnet und für das Beleg-Icon im Cockpit verwendet.
feeTransactionIdUUID (Self-Ref)Verknuepft eine zugehörige Gebuehren-Transaktion.
reversalTransactionIdUUID (Self-Ref)Verknuepft die Storno-Transaktion (bei status = reversed).

Verknüpftes TransactionAiAssessment

Pro Transaktion legt die KI-Klassifizierung optional ein TransactionAiAssessment an. Relevante Felder für die Allocation-Engine:

  • classificationReasoning — Text-Begründung der KI: warum dieses SKR-Konto? Wird im Cockpit im rechten Panel und in der Allocation-Summary angezeigt.
  • classificationConfidence — KI-Confidence in % (0 – 100). Fließt mit Faktor × 0,3 in den Score-Engine-Wert ein.
  • suggestedAccountId, suggestedTaxRateId, suggestedWorkorderId, suggestedExpenseId — Vorschläge der KI.

Manuell neu anstoßen über POST /api/transactions/:id/ai-classify (nur Klassifikation) oder — seit Juni 2026 — über den konsolidierten Pass POST /api/transactions/:id/ai-analyze, der Bewertung und Klassifikation in einem Request erledigt (CASL do:AiSuggestion). Letzteren nutzt das Transaktions-Cockpit.

Workflows und Zustaende

Wiederverwendbare Konzepte

Verknuepfungen zu anderen Modulen

KI-Analyse im Chat (seit Juni 2026)

Der KI-Chat kann Transaktionen jetzt serverseitig auswerten — über spezialisierte Werkzeuge (MCP-Tools), die auf einer Aggregations-Schicht (transactionAnalytics.service) arbeiten, statt rohe Datensätze in den Chat zu laden:

WerkzeugWas es liefert
Transaktionen suchengefilterte Suche (Betrag, Zeitraum, Gegenpartei, Zweck).
ZusammenfassenSummen/Salden über einen Zeitraum.
AufschlüsselnGruppierung (z. B. nach Konto, Monat, Gegenpartei).
Wiederkehrende erkennenregelmäßige Zahlungen (Daueraufträge, Abos).
Anomalien findenauffällige Ausreißer.
Zahlungskonten auflistenverfügbare Bank-/Pleo-Konten.

So bleiben auch große Transaktionsmengen auswertbar — die Tool-Ergebnisse sind serverseitig begrenzt (Kappung sehr großer Ausgaben), damit der Chat performant bleibt.

Eine Transaktion kann mit beliebigen Geschäftsobjekten verknüpft werden, um Kontext festzuhalten („diese Bankzahlung gehört zu dieser Rechnung und diesem Projekt und diesem Auftrag"). Das geschieht über das polymorphe n:m-Modell TransactionEntityLink — eine reine Referenz ohne Buchungseffekt.

FeldDatentypBedeutung
transactionIdUUIDFK → Transaktion
linkedEntityTypeStringArt des Objekts — z. B. PurchaseDocument, SalesDocument, Project, Workorder, Customer, Supplier, Employee, Vehicle, Expense, PayrollRun, HealthInsuranceFund
linkedEntityIdUUIDID des verknüpften Objekts
sourceEnum (manual, ai, booking, Default manual)Herkunft der Verknüpfung

Pro Kombination (transactionId, linkedEntityType, linkedEntityId) gibt es genau eine Verknüpfung (idempotent). Wird ein Beleg über das Cockpit gebucht, legt der Allocation-Controller automatisch eine Verknüpfung mit source = booking an, sodass gebuchte Belege im Cockpit verlinkt sind.

Im Transaktions-Cockpit:

  • Das Verknüpfungs-Panel zeigt bestehende Links als klickbare Chips (LinkedEntityChip) mit „Verwalten"-Button.
  • Das Link-Modal fügt neue Verknüpfungen hinzu (Auswahl über die jeweiligen Objekt-Suchen) oder löscht sie.
  • Der Cockpit-Filter „verknüpft" zeigt nur Transaktionen mit mindestens einer Verknüpfung (gespeist aus GET /transaction-entity-links/linked-transaction-ids).

Zugriff läuft über das Transaction-Subject (lesen view, ändern update) — kein eigenes CASL-Subject.

Mit dem rechnungsfluss-v2-Umbau (Juni 2026) gibt es zusätzlich ein generisches EntityLink-Modell, das Verknüpfungen zwischen beliebigen zwei Geschäftsobjekten abbildet (nicht nur ab einer Transaktion). Es ergänzt TransactionEntityLink und wird u. a. im Belegfreigabe-Cockpit und für Referenz-Vorschläge im Transaktions-Cockpit genutzt.

FeldBedeutung
sourceType / sourceIderstes Objekt (Typ + ID)
targetType / targetIdzweites Objekt (Typ + ID) — bidirektional
linkTypeArt der Verknüpfung (Default reference; z. B. commission, order, settlement, source)
sourceHerkunft (manual, ai, import, booking, send)
amount / metadataoptionaler Betrag bzw. Freiform-Zusatzdaten

Endpoints: GET/POST /api/entity-links, GET /api/entity-links/bulk, GET/DELETE /api/entity-links/:id. Eindeutig je (sourceType, sourceId, targetType, targetId, linkType).

API/Schnittstellen

MethodeEndpointZweckCASL
GET/api/transactionsListeview Transaction
GET/api/transactions/:idDetail (inkl. hasReceipt, matchingStatus, aiAssessment)view Transaction
PATCH/api/transactions/:idStatus / Kategorie / Notiz / matchingStatus ändernupdate Transaction
DELETE/api/transactions/:idSoft-Deletedelete Transaction
GET/api/transactions/:id/allocation-proposalScore-Engine-Vorschlag (siehe TransactionAllocation)view TransactionAiAssessment
POST/api/transactions/:id/allocation-proposal/apply„Bestätigen & Buchen" — legt Allocation an und buchtcreate TransactionAllocation, update Transaction
POST/api/transactions/:id/ai-classifyKI-Klassifizierung neu anstoßendo AiSuggestion
POST/api/transactions/:id/ai-analyzeKonsolidierter KI-Pass (Bewerten + Klassifikation) — vom Cockpit genutztdo AiSuggestion
GET/api/transactions/:id/linksVerknüpfungen einer Transaktion lesenview Transaction
POST/api/transactions/:id/linksVerknüpfung hinzufügen (idempotent)update Transaction
DELETE/api/transactions/:id/links/:linkIdVerknüpfung löschenupdate Transaction
GET/api/transaction-entity-links/linked-transaction-idsIDs aller verknüpften Transaktionen (Cockpit-Filter „verknüpft")view Transaction

Versionshinweise

  • 2026-04-29: Initiale Veröffentlichung mit FE-Tiefen-Standard.
  • 2026-05-16 (Welle 129): Virtuelles hasReceipt-Feld (Beleg-Icon-Spalte im Cockpit), TransactionAiAssessment mit classificationReasoning + classificationConfidence durchgereicht in der Allocation-Engine, neue Endpoints /:id/allocation-proposal, /:id/allocation-proposal/apply, /:id/ai-classify dokumentiert. Detailbeschreibung der Score-Engine: KI-Allocation-Engine.
  • 2026-06-09: Abschnitt „KI-Analyse im Chat" ergänzt — sechs neue MCP-Werkzeuge (Suchen/Zusammenfassen/Aufschlüsseln/Wiederkehrende/Anomalien/Konten) auf Basis von transactionAnalytics.service, mit serverseitiger Ergebnis-Begrenzung. Verifiziert an src/mcp/tools/*transaction*.
  • 2026-06-11: Abschnitt „Verknüpfung mit Geschäftsobjekten (TransactionEntityLink)" ergänzt — polymorphe n:m-Verknüpfung (Beleg/Projekt/Auftrag/…), Cockpit-Filter „verknüpft", neue /links-Endpoints. Verifiziert an transactionEntityLink.model.ts, transaction.router.ts (Master e01f8bdc).
  • 2026-06-12: Generisches EntityLink-System (bidirektional, beliebige Objekt-Paare, linkType) ergänzt — koexistiert mit TransactionEntityLink, genutzt in Cockpit 2.0 + Belegfreigabe. Verifiziert an entityLink.model.ts, entityLink.router.ts (Master 69bd4617).