Zum Hauptinhalt springen

Kategorien (Categories)

Zweck

Category ist eine polymorphe Klassifizierung quer durch SpeamCore. Eine Kategorie kann für eine oder mehrere Domaenen aktiviert werden:

Kategorien sind hierarchisch (parentCategoryId) und haben einen Status — active, inactive oder pending (AI hat die Kategorie vorgeschlagen, Anwender muss sie freigeben). Für Bank-Transaktionen gibt es zusaetzlich einen finAPI-Sync (finapiCategoryId, isCustom).

Kategorien sind **nicht** identisch mit den [Transaktions-Kategorien](/transaction-categories), die für das Sub-Routing `transactionCategory.transactions` an Transaktionen genutzt werden. `Category` ist die uebergreifende Kategorie-Klasse (polymorph), `TransactionCategory` ist eine eigene, transaktionsspezifische Kategorisierung.

Voraussetzungen

- Berechtigung `view:Category` und `create:Category`. - Für finAPI-Sync: konfigurierter finAPI-Provider und Berechtigung `create:Category` (Sync legt Kategorien an). - Für Sub-Listen pro Domaene: jeweils `view`-Berechtigung der referenzierten Entitaet.

Berechtigungen (CASL)

ActionSubjectWirkungKeycloak-Rolle
viewFE_Category, CategoryListe/Detail aufrufbar
create/update/deleteCategoryPflegenAPP_SPEAMCORE_CREATE/UPDATE/DELETE_CATEGORY
viewTransaction/Document/Mail/EmployeeTimeTrackingSub-Listen pro DomaeneAPP_SPEAMCORE_VIEW_TRANSACTION/DOCUMENT/MAIL/EMPLOYEE_TIME_TRACKING

Schritt-für-Schritt-Anleitung

Eigene Kategorie anlegen

  1. Kategorien (/categories) → + Neu — leerer Eintrag wird angelegt, Detail-Seite öffnet sich.
  2. name pflegen.
  3. Optional parentCategoryId setzen, um die Kategorie als Unter-Kategorie eines Eltern-Eintrags einzuordnen.
  4. Scopes aktivieren (isTransaction, isDocument, isMail, isTimeTracking) — bestimmen, in welchen Modulen die Kategorie auswählbar ist.
  5. color setzen (Hex oder Chakra-Token).
  6. sortOrder zur Steuerung der Reihenfolge in Dropdowns.
  7. Status auf active lassen, damit die Kategorie aktiv genutzt werden kann.

finAPI-Kategorien synchronisieren

  1. Liste öffnen → Button Sync ausführen klicken — POST /api/categories/sync.
  2. Backend importiert finAPI-Standard-Kategorien als Category-Einträge mit isTransaction = true, isCustom = false, finapiCategoryId gesetzt.
  3. Diese Kategorien sind read-only für wesentliche Felder (isCustom = true bei selbst angelegten).

Pending-Kategorien freigeben

AI-generierte Kategorien (z. B. aus Mail-Klassifizierung) erscheinen mit Status pending. Filter „Nur Pending" in der Liste. Kategorie prüfen, Status auf active setzen — damit erscheint sie in Auswahllisten.

Sub-Liste pro Domaene

Detail-Seite einer Kategorie hat Tabs:

  • Transaktionen (/categories/:id/transactions) — alle Transaktionen mit dieser Kategorie.
  • Dokumente (/categories/:id/documents).
  • Mails (/categories/:id/mails).
  • Zeiterfassungen (/categories/:id/time-trackings).

Listenansicht — categories

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)

Felder und Eingaben

FeldnamePflichtDatentypWirkung beim AusfuellenVoraussetzung
namejaString (255)Anzeigename in Selectors und Reports.
parentCategoryIdneinUUIDEltern-Kategorie für Hierarchie.view:Category.
colorneinString (50)Hex- oder Chakra-Color-Token. Wird in Liste und Selectors als Indikator angezeigt.
iconneinString (100)Icon-Identifier (typischerweise react-icons).
sortOrderneinIntegerReihenfolge in Dropdowns und Listen.
statusjaENUM (active, inactive, pending)Steuert Sichtbarkeit. pending markiert AI-Vorschläge zur Freigabe.
isTransactionneinBoolean (Switch)Aktiviert die Kategorie für Transaktionen.
isDocumentneinBoolean (Switch)Aktiviert für Dokumente.
isMailneinBoolean (Switch)Aktiviert für Mail.
isTimeTrackingneinBoolean (Switch)Aktiviert für Zeiterfassungen.
finapiCategoryIdnein (read-only)IntegerfinAPI-System-ID. Wird vom Sync-Job gesetzt.
isCustomnein (read-only)Booleantrue: vom Anwender angelegt. false: aus finAPI-Sync.
isSensitiveneinBoolean (Switch)Markiert sensitive Inhalte (z. B. Gehaltsbuchungen). Beeinflusst Anzeige in nicht-priviligierten Sichten.

Wiederverwendbare Konzepte

Verknuepfungen zu anderen Modulen

  • TransaktionenTransaction.categoryId. Sub-Liste am Kategorie-Detail.
  • Document-Center — Document-Anhänge mit Kategorie. Sub-Liste verfuegbar.
  • Mail — Kategorisierung pro Mail-Eintrag. Sub-Liste verfuegbar.
  • Zeiterfassungen — Kategorie pro Zeit-Eintrag. Sub-Liste verfuegbar.
  • Cockpit und Match-Vorschlaege — Kategorien helfen beim Auto-Matching.

Häufige Fehler und Lösungen

FehlerLösung
Kategorie taucht nicht im Selector aufstatus != active oder Scope-Switch (z. B. isTransaction) ist false.
finAPI-Sync legt Doppelten anSync ist idempotent über finapiCategoryId — bei Doppelten manuell prüfen, ob isCustom = true (eigene) gegen false (finAPI) verschoben werden soll.
Pending-Kategorien stapeln sichAI-Klassifizierung erzeugt diese — entweder regelmaessig durchsehen und freigeben, oder die Funktion deaktivieren.
Hierarchie nicht sichtbarparentCategoryId korrekt gesetzt? Liste hat Hierarchie-Anzeige; in Selectors wird sie nicht zwingend dargestellt.

API/Schnittstellen

MethodeEndpointZweckCASL
GET/api/categoriesListe (mit include=parentCategory)view Category
POST/api/categoriesAnlegencreate Category
GET/api/categories/:idDetailview Category
PATCH/api/categories/:idÄndernupdate Category
DELETE/api/categories/:idSoft-Deletedelete Category
POST/api/categories/syncfinAPI-Standard-Kategorien synchronisierencreate Category
GET/api/transactions?filter[categoryId]Sub-Liste Transaktionenview Transaction
GET/api/documents?filter[categoryId]Sub-Liste Dokumenteview Document
GET/api/mails?filter[categoryId]Sub-Liste Mailsview Mail
GET/api/employee-time-trackings?filter[categoryId]Sub-Liste Zeitview EmployeeTimeTracking

Versionshinweise

  • 2026-04-30: Initiale Veroeffentlichung.