Bankkonten und Zuweisungen
Zweck
SpeamCore trennt Bankkonto und Bankzuweisung in zwei Datenobjekte:
BankAccount— die reine Kontoinformation: Bankname, IBAN, BIC, Inhaber, Kontonummer.BankAssignment— verknuepft ein Konto polymorph mit einer Geschaeftsentitaet (Kunde, Standort, Lieferant, Hersteller, Mitarbeiter).
Damit kann ein Kunde, der gleichzeitig auch Lieferant ist, dasselbe Bankkonto unter beiden Funktionen nutzen, ohne es doppelt zu pflegen.
Es gibt keine eigene Routen-Seite /bank-accounts. Die Verwaltung passiert immer im Kontext einer Geschaeftsentitaet — z. B. über den Tab Bankkonten auf einer Lieferanten- oder Kunden-Detailseite.
Datenmodell
BankAccount BankAssignment
───────── ──────────────
id id
bankName bankAccountId ────► BankAccount.id
iban parentId ┐
bic parentType │ polymorph:
accountHolderName │ Customer | Location |
accountNumber │ Supplier | Manufacturer |
overdraftFacility │ Employee
│
└──► z. B. Customer.id
Berechtigungen (CASL)
| Action | Subject | Wirkung | Keycloak-Rolle |
|---|---|---|---|
view | BankAccount | Konto-Daten lesen | APP_SPEAMCORE_VIEW_BANK_ACCOUNT |
create/update/delete | BankAccount | Konto pflegen | APP_SPEAMCORE_CREATE/UPDATE/DELETE_BANK_ACCOUNT |
view | BankAssignment | Zuordnung sehen (Tab „Bankkonten") | APP_SPEAMCORE_VIEW_BANK_ASSIGNMENT |
create/update/delete | BankAssignment | Zuordnung pflegen | APP_SPEAMCORE_CREATE/UPDATE/DELETE_BANK_ASSIGNMENT |
Im Mandantenkontext wirkt zusaetzlich clientScope-Filterung — Bankkonten anderer Mandanten sind nicht sichtbar.
Wo der Konzept-Pattern angewandt wird
| Geschaeftsentitaet | Tab in der Detailseite |
|---|---|
| Kunde | /customers/:id/bank-assignments |
| Standort | (eigene Bankverbindungen pro Standort möglich) |
| Lieferant | /suppliers/:id/banks |
| Hersteller | (intern; über BankAssignment.parentType = 'Manufacturer') |
| Mitarbeiter | (intern; für Lohnzahlung etc.) |
API/Schnittstellen
| Methode | Endpoint | Zweck | CASL |
|---|---|---|---|
GET | /api/bank-accounts | Konten-Liste | view BankAccount |
POST | /api/bank-accounts | Konto anlegen | create BankAccount |
PATCH | /api/bank-accounts/:id | Konto ändern | update BankAccount |
GET | /api/bank-assignments?parentId=:id&parentType=:type | Zuweisungen einer Entitaet | view BankAssignment |
POST | /api/bank-assignments | Zuweisung anlegen | create BankAssignment |
DELETE | /api/bank-assignments/:id | Zuweisung löschen | delete BankAssignment |
Code-Lookup bestätigt: Aktuell keine serverseitige IBAN-Validierung — IBANs werden ohne Pruefsumme akzeptiert. Eine Library wie ibantools koennte ergaenzt werden.
Drift-Risiken
- IBAN-Validierung fehlt serverseitig. Frontend prueft Format, Backend speichert ungeprueft.
- Loesch-Kaskade unklar. Wenn ein BankAccount gelöscht wird, was passiert mit
BankAssignment-Einträgen? Prüfen. - Mandanten-Sichtbarkeit.
clientScopegreift beiBankAccount— beiBankAssignmentparallel? Vermutlich ja, sollte aber dokumentiert werden.
Verknuepfungen
- Polymorpher Parent-Pattern — Grundlage für
BankAssignment. - Lieferanten — Tab „Bankkonten".
- Kunden — Tab „Bankverbindungen".
- Setup-Wizard Schritt 6 — Mandanten-eigenes Bankkonto für Rechnungs-Footer.
Versionshinweise
- 2026-04-29: Initiale Veroeffentlichung.