Zum Hauptinhalt springen

Offene Posten — Forderungen

Zweck

Die OP-Liste Forderungen zeigt alle offenen Verkaufsbelege (SalesDocument) gruppiert nach Kunde. Werte wie Bruttosumme, gezahlter Betrag und Restbetrag werden aus den Buchungen (AccountEntries und TransactionAllocation) on read berechnet. Sie ist damit read-only für die Stammdaten — geändert wird über Buchungs-Aktionen (Zahlung erfassen, Storno).

Pendant für Lieferanten-Verbindlichkeiten: /supplier-open-items.

Voraussetzungen

- Es existieren Verkaufsbelege im Status `sent` oder später (mit Buchung/offenem Posten — entsteht beim Sperren bzw. bei der Beleg-Übernahme, siehe [Verkaufsbelege → Auto-Sperre nach Übernahme](/sales-documents#auto-sperre-nach-übernahme-juni-2026)). - Anwender hat `view:OpenItem` und `view:SalesDocument`. - Für den **Zahlungsverlauf** (Buchungs-Historie) zusaetzlich `view:Transaction` **und** `view:TransactionAllocation`. - Für **Zahlung erfassen / mit Skonto / stornieren** zusaetzlich `create:Transaction`.

Berechtigungen (CASL)

ActionSubjectWirkungKeycloak-Rolle
viewFE_OpenItemSeite aufrufbar
viewOpenItemOP-Daten lesenAPP_SPEAMCORE_VIEW_OPEN_ITEM
viewSalesDocumentQuell-Beleg sichtbarAPP_SPEAMCORE_VIEW_SALES_DOCUMENT
viewTransaction + TransactionAllocationZahlungsverlauf sichtbar (sonst ausgeblendet)APP_SPEAMCORE_VIEW_TRANSACTION / …_VIEW_TRANSACTION_ALLOCATION
createTransactionZahlung, Skonto-Zahlung oder Storno verbuchenAPP_SPEAMCORE_CREATE_TRANSACTION

Schritt-für-Schritt-Anleitung

Forderungen einsehen

  1. Kunden-Offene Posten (/customer-open-items) öffnen.
  2. Die obere Liste (CounterpartyGrid) listet alle Kunden mit offenen Posten — Spalten Kd.-Nr., Kunde, Offene Pos. (Anzahl), Offener Betrag, Überfällig, Bezahlt (30T).
  3. Kunde anklicken — links erscheint die Beleg-Liste (Spalten Belegnummer, Status, Bruttobetrag, Bezahlt, Offener Betrag, Fälligkeit), rechts das Detail-Panel (OpenItemDetailPanel).
  4. Die vier KPI-Karten oben filtern die Kundenliste — siehe KPI-Cards.
  5. Der Netto-Schalter blendet die Listen-Beträge zwischen Brutto und Netto um. Über Filter (Standard: „3 Filter ausgewählt") lässt sich nach Settlement-Status (offen/teilweise/…) ein- und ausschalten.
Ein offener Posten entsteht erst, wenn der Quell-Beleg **gesperrt/finalisiert** wurde (regulärer Lock, Druck oder Auto-Sperre nach Übernahme). Dabei werden die Buchungssätze erzeugt, die den OP tragen. Ein Beleg im Status `draft` oder ein nur versendeter, aber nicht gebuchter Beleg taucht nicht auf. Details: [Verkaufsbelege → Auto-Sperre nach Übernahme](/sales-documents#auto-sperre-nach-übernahme-juni-2026).

Detail-Panel „Offener Posten"

Rechts zeigt das Panel pro markiertem OP:

AngabeBeispielBedeutung
Status-Badge„Offen"settlementStatus (offen / teilweise / beglichen / überzahlt).
Offener Betrag2.719,15 €outstandingAmount — noch zu zahlen.
Fälligkeit29.06.2026dueDate aus dem Quell-Beleg.
Aktualisiert am02.06.2026Letzte Neuberechnung.
Zahlungsziel„30 Tage / 2% Skonto bei 10 Tagen"Aus dem Zahlungsziel des Belegs.
Skonto2,00 %Skonto-Prozentsatz, falls Skonto-Frist noch läuft.
Zahlbetrag mit Skonto2.664,77 €Reduzierter Betrag bei Zahlung innerhalb der Skonto-Frist.
Noch X Tage„Noch 8 Tage"Verbleibende Tage der Skonto-Frist.

Zahlung erfassen

  1. Kunde und OP markieren.
  2. Zahlung erfassen klicken — OpenItemTransactionModal öffnet sich (mode = "payment").
  3. Transaktionsdatum und Referenz eintragen. Als Quelle wählbar: manuelle Buchung oder Zuordnung zu einer bereits importierten Bank-Transaktion.
  4. In der Zuordnungs-Tabelle den Betrag je Position eintragen.
  5. Speichern. Es entsteht eine Transaction + TransactionAllocation; paidAmount und outstandingAmount werden neu berechnet.

Zahlung mit Skonto erfassen

Solange die Skonto-Frist läuft (Detail-Panel zeigt „Noch X Tage"), steht der Button Zahlung mit Skonto erfassen bereit. Er öffnet dasselbe Modal, vorbefüllt mit dem Zahlbetrag mit Skonto (payableWithSkonto); die Skonto-Differenz wird als Skonto-Buchung mit verbucht.

Zahlung stornieren

Zahlung stornieren ist nur aktiv, wenn bereits eine Zahlung verbucht ist. Es öffnet OpenItemTransactionModal mit mode = "reversal" und verbucht eine Gegenbuchung.

Kunden-Offene-Posten-Liste: vier KPI-Karten (Gesamt Offen, Überfällig, Heute fällig, Bezahlt 30T), Kunden-Grid (Energie & Umwelt GmbH, 1 offene Position, 2.719,15 €), Beleg-Liste (INV-2026-00003, offen, Fällig in 27 Tagen) und Detail-Panel mit Skonto (2% / Zahlbetrag mit Skonto 2.664,77 € / Noch 8 Tage) sowie Zahlungsverlauf mit Soll-/Haben-Buchungssätzen (Test-Daten).

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: KPI-Cards

Vier Karten oben (activeKpi-State, filtert die Kunden-Liste):

Karte (UI)activeKpiZeigt
Gesamt OffenallSumme aller offenen Beträge.
ÜberfälligoverdueBeträge mit dueDate in der Vergangenheit.
Heute fälligdueTodayBeträge, die heute fällig werden.
Bezahlt (30T)paidLast30DaysIn den letzten 30 Tagen eingegangene Zahlungen.

<KIHinweis titel="„Geplant" ist kein KPI-Filter"> Frühere Doku nannte eine Karte „geplant". Tatsächlich heißt die vierte Karte Bezahlt (30T) (paidLast30Days). „geplant" (planned) existiert nur als interner Fälligkeits-Zustand (dueState: overdue / dueToday / planned) eines einzelnen Postens, nicht als Filter-Karte.

Modi: payment (Zahlung, auch mit Skonto-Vorbelegung) und reversal (Storno). Eingaben: Transaktionsdatum, Referenz, Quelle (manuell oder bestehende Bank-Transaktion) sowie eine Zuordnungs-Tabelle mit Betrag je Position und Skonto-Schalter. Erstellt eine Transaction samt TransactionAllocation und triggert die Re-Berechnung der Read-only-Felder.

Zahlungsverlauf (Buchungs-Historie)

Unter den Buttons listet Zahlungsverlauf die Buchungssätze zum OP (Spalten Datum, Konto, Menge) mit Soll-/Haben-Kennung (S/H) — z. B. S 1400 · Forderungen aus Lieferungen und Leistungen, H 8400 · Erlöse 19% USt, H 1776 · Umsatzsteuer 19%. Das sind dieselben AccountEntries, die beim Sperren bzw. bei der Auto-Sperre nach Übernahme erzeugt werden. Der Block ist nur mit view:Transaction und view:TransactionAllocation sichtbar.

Felder und Eingaben

OpenItem hat keine eigene Edit-Form — alle Felder sind read-only und werden aus Belegen + Buchungen berechnet.

FeldnameDatentypBeschreibungWirkung beim AusfuellenVoraussetzung
parentIdUUIDPolymorpher Verweis auf den Quell-Beleg.Identifiziert den SalesDocument.
parentTypeEnumSalesDocument (Forderung) oder PurchaseDocument (Verbindlichkeit).Steuert Direction-Logik. Für Forderungen immer SalesDocument.
directionEnum (derived)receivable (Forderung) / payable (Verbindlichkeit).Wird aus parentType abgeleitet.
totalGrossDecimal (computed)Bruttosumme des Belegs.Berechnet aus AccountEntries.
paidAmountDecimal (computed)Bereits gezahlter Betrag.Berechnet aus TransactionAllocation.
outstandingAmountDecimal (computed)totalGross - paidAmount.Wird live neu berechnet.
settlementStatusEnum (computed)open, partial, settled, overpaid. Schwelle 0,01 € (Rundung).Steuert Status-Badge und Filter.
dueDateDatumFaelligkeitsdatum aus dem Quell-Beleg.Speist die Karten Überfällig/Heute fällig.Vom Beleg übernommen.
dueStateEnum (computed)overdue, dueToday oder planned — interner Fälligkeits-Zustand.Nicht mit den KPI-Karten verwechseln (planned ist keine Karte).Aus dueDate.

Skonto-Angaben (Skonto-Prozent, Zahlbetrag mit Skonto, Restfrist) stammen nicht aus dem OpenItem selbst, sondern aus dem Zahlungsziel (PaymentTarget: discountPercentage, discountDays, paymentTermDays) des Quell-Belegs und werden im Detail-Panel berechnet angezeigt.

Das `OpenItem` selbst trägt **keine** Mahnstufe (`dunningLevel`, `reminderCount`, `lastReminderDate` gibt es hier nicht). Mahnungen laufen über die E-Mail-/Brief-Vorlagen (Kategorie „dunning") auf Basis von `dueDate` und `settlementStatus` — nicht als Feld am offenen Posten.

Workflows und Zustaende

Wiederverwendbare Konzepte

Verknuepfungen zu anderen Modulen

  • Verkaufsbelege — Quelle der OPs (parentType = 'SalesDocument').
  • BuchhaltungTransactionAllocation und AccountEntries liefern die berechneten Werte.
  • Mahnwesen — laeuft auf Basis von dueDate und settlementStatus.
  • /supplier-open-items — Pendant für Verbindlichkeiten.

Häufige Fehler und Lösungen

FehlerLösung
outstandingAmount weicht vom Beleg abEine Teilzahlung ist verbucht (TransactionAllocation) — prüfen Sie den Zahlungsverlauf.
Beleg nicht in OP-ListeBeleg nicht gebucht/gesperrt (kein offener Posten erzeugt); paranoid-Soft-Delete; oder SalesDocument:view fehlt.
Zahlung nicht erfasst, obwohl GeldeingangZahlung muss explizit über das Modal verbucht sein — automatisches Matching läuft über Transaktions-Vorschläge.
Zahlungsverlauf-Block fehltview:Transaction und/oder view:TransactionAllocation fehlt.
„Bezahlt (30T)" statt „geplant" gesuchtDie vierte KPI-Karte heißt Bezahlt (30T) (paidLast30Days); „geplant" ist kein Filter (siehe KPI-Cards).

API/Schnittstellen

MethodeEndpointZweckCASL
GET/api/open-items?direction=receivable (legacy)Liste der Forderungenview OpenItem
GET/api/open-items?parentType=SalesDocumentAequivalent (neue API)view OpenItem
POST/api/transactions (intern, aus Modal)Zahlung/Skonto/Storno verbuchen — erzeugt Transaction + TransactionAllocationcreate Transaction

Stand der Doku (Code-Lookup): direction und parentType sind redundant — parentType (SalesDocument/PurchaseDocument) reicht aus, um die Richtung zu bestimmen. Aktuell nutzen FE und BE noch beide Felder. Eine Migration auf nur parentType waere Refactor-Arbeit; bis dahin bleibt direction als Komfort-Feld bestehen.

Versionshinweise

  • 2026-06-02: Echter Screenshot aus dem Demo-Mandant (mit Daten) ersetzt den Platzhalter. Drift-Fixes gegen FE/BE-master: vierte KPI-Karte korrekt Bezahlt (30T) (paidLast30Days) statt „geplant"; Skonto im Detail-Panel + Button „Zahlung mit Skonto erfassen" dokumentiert; CASL korrigiert (Zahlungsverlauf braucht view:Transaction + view:TransactionAllocation, Buchen braucht create:Transaction statt create:TransactionAllocation); Detail-Panel-, Grid- und Modal-Felder ergänzt; Zahlungsverlauf = Buchungssätze (Soll/Haben) mit Bezug zur Auto-Sperre; dueState (planned) klar von der KPI-Karte abgegrenzt; Mahnwesen-Abwesenheit am OpenItem notiert.
  • 2026-04-29: Initiale Veroeffentlichung mit FE-Tiefen-Standard.