Zum Hauptinhalt springen

Kontakte

Zweck

Kontakte sind Personen-Datensaetze mit minimaler Struktur (firstName, lastName). Den fachlichen Bezug bekommt ein Kontakt erst durch eine ContactParent-Verknuepfung an einen Kunden, Standort, Lieferanten, Fahrzeug oder Beleg. Diese Trennung erlaubt, dieselbe Person an mehreren Orten zu fuehren, ohne sie doppelt anzulegen.

Voraussetzungen

- Berechtigung `create:Contact`. - Eine Eltern-Entitaet (Kunde, Standort, Lieferant, Fahrzeug, Beleg) für die Verknuepfung.

Berechtigungen (CASL)

ActionSubjectWirkungKeycloak-Rolle
viewFE_ContactKontaktliste/-details aufrufbar
viewContactDaten lesbarAPP_SPEAMCORE_VIEW_CONTACT
create/update/deleteContactKontakte pflegenAPP_SPEAMCORE_CREATE/UPDATE/DELETE_CONTACT
viewMailTab Mails an einem KontaktAPP_SPEAMCORE_VIEW_MAIL

Schritt-für-Schritt-Anleitung

Kontakt anlegen

  1. Kontakte (/contacts) → + Neu.
  2. firstName, lastName setzen.
  3. Speichern.

Kontakt einer Entitaet zuordnen

Die Verknuepfung erfolgt nicht hier, sondern auf der Detailseite der jeweiligen Entitaet (z. B. Kunden-Tab Kontakte), wo ein neuer ContactParent-Eintrag entsteht.

Visitenkarte einscannen (OCR → Kontakt + CRM)

Eine physische Visitenkarte lässt sich abfotografieren und automatisch in einen Kontakt verwandeln (CRM-Inbound). Der Scanner (Kamera) erkennt die Karte und löst bei stabilem Bild automatisch aus; das Bild wird perspektivisch entzerrt und ausgewertet.

  1. Scanner über den Button Visitenkarte scannen öffnen → Karte fotografieren.
  2. Analyse (POST /api/contacts/scan-business-card/analyze) liest Name, E-Mail, Telefon und Adresse aus und schlägt Felder vor.
  3. Vorschlag prüfen/korrigieren und übernehmen (POST /api/contacts/scan-business-card) → SpeamCore legt einen Kontakt an (E-Mail/Telefon als Attribute) und optional direkt ein CRM-Profil (Website, Branche, Mitarbeitergröße, Vertriebs-Owner, Social-Links).

Beides erfordert create:Contact.

Der **Visitenkarten-Scan** (eingehende Karten → Kontakt) hat nichts mit der [digitalen Visitenkarte](/business-cards) (eigene teilbare Karte unter `/c/:slug`) zu tun — zwei verschiedene Funktionen, die nur den Namen teilen.

Listenansicht — contacts

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
firstNameneinStringVorname; erscheint in Auswahllisten und über ContactParent-Verknuepfungen auf Belegen.
lastNameneinStringNachname; selbe Wirkung wie Vorname.

Adressen, Telefonnummern und E-Mail-Adressen werden über AttributeParent polymorph am Kontakt gepflegt — siehe Polymorpher Parent-Pattern.

Wiederverwendbare Konzepte

Verknuepfungen zu anderen Modulen

  • Kunden / Standorte / Lieferanten / FahrzeugeContactParent polymorph.
  • Belege — Ansprechpartner pro Beleg.
  • Mails (/contacts/:id/mails) — Verknuepfung zu eingehenden/ausgehenden E-Mails.
  • CRM (/contacts/:id/crm) — bei aktivem CRM-Tracking trägt der Kontakt ein CRM-Profil (Status, Owner, Timeline, ICP).

API/Schnittstellen

MethodeEndpointZweckCASL
GET/api/contactsListeview Contact
GET/api/contacts/:idDetailview Contact
POST/api/contactsAnlegencreate Contact
PATCH/api/contacts/:idÄndernupdate Contact
DELETE/api/contacts/:idSoft-Deletedelete Contact
POST/api/contacts/scan-business-card/analyzeVisitenkarte analysieren (OCR)create Contact
POST/api/contacts/scan-business-cardKontakt (+ optional CRM-Profil) aus Scan anlegencreate Contact

Versionshinweise

  • 2026-06-24: CRM-Tab (/contacts/:id/crm) ergänzt — bei aktivem Tracking trägt der Kontakt ein CRM-Profil; zusätzlich Visitenkarten-Scan (OCR → Kontakt + optional CRM-Profil, /contacts/scan-business-card). Verifiziert an ContactCrmPage.tsx, businessCardScan.router.ts.
  • 2026-04-29: Initiale Veroeffentlichung.