- email als Symbol mit Adresse im Tooltip, Klick öffnet mailto: (Spalte per migrateColumns nachgezogen) - Löschen-Knopf am Zeilenende; Server erlaubt Löschen jetzt auch ohne vorheriges Archivieren Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4.6 KiB
13 Suspects
Die Stufe vor dem Lead: Personen, die interessant sein könnten, als schlichte Tabelle. Eingeführt am 29.09.2026. Menü: Suspects (über Leads) mit dem Unterpunkt Archiv.
flowchart LR
S["Suspect<br/>(Tabelle)"] -->|Lead erstellen| M["Lead-Karte<br/>vorbelegt, Titel fehlt"]
M -->|Speichern| L["Lead in 'Neuer Lead'"]
M -->|Speichern| A["Suspect → Archiv<br/>mit Verweis auf den Lead"]
S -->|Archivieren| A
A -->|Zurückholen| S
A -->|Endgültig löschen| X["weg"]
Tabelle
| Spalte | Feld | Hinweis |
|---|---|---|
| Name | name |
Pflicht – ohne Namen wird eine neue Zeile nicht gespeichert |
| Funktion | role |
Freitext |
| Unternehmen | company |
Freitext, kein Verweis auf icon_companies |
email |
nach dem Speichern nur ein Briefsymbol, Adresse im Tooltip, Klick öffnet das Mailprogramm | |
linkedin |
nach dem Speichern nur ein Symbol, URL im Tooltip | |
| Website | website |
ebenso; fehlt https://, ergänzt es der Server |
| Notiz | notes |
einzeilig, volle Länge im Tooltip |
| Letzter Kontakt | last_contact_on |
Datum |
| Nächster Impuls | remind_at |
Wecker: Anzahl Tage eingeben, der Server rechnet das Datum |
Bedienung wie eine Liste. Unten steht immer eine leere Zeile. Gespeichert wird, sobald der Fokus die Zeile verlässt oder Enter gedrückt wird. Vorhandene Zellen speichern beim Verlassen der Zelle; Esc verwirft die Eingabe. Links bearbeitet man über den kleinen Stift, der beim Überfahren neben dem Symbol erscheint.
Name, Funktion und Unternehmen sind bewusst Freitext: ein Suspect soll in Sekunden erfasst sein, ohne erst Kontakt und Unternehmen anzulegen.
Nächster Impuls
Klick auf den Wecker → Anzahl Tage → Speichern. Gesetzt zeigt die Zelle das
Datum (rot, wenn fällig). Fällige Impulse meldet derselbe Wächter wie die
Lead-Erinnerungen (ReminderWatcher, beim Anmelden und stündlich):
| Knopf | Wirkung |
|---|---|
| Kontakt aufgenommen | remind_at leer, Letzter Kontakt = heute |
| In 7 Tagen erneut | remind_at + 7 Tage |
| Schließen (×) | nichts – meldet sich beim nächsten Abfragen wieder |
Lead erstellen
Das Lead-Symbol am Zeilenende öffnet die Lead-Karte vorbelegt
(LeadModal mit initial):
- Phase Neuer Lead, zuständig der angemeldete Benutzer
- Unternehmen und Ansprechpartner nur, wenn es im CRM einen mit gleichem Namen gibt (Groß/klein, Rechtsform und Satzzeichen egal)
- Notiz mit allem aus der Zeile: Name, Funktion, Unternehmen, Mail, LinkedIn, Website, letzter Kontakt, Notiz
- Titel bleibt leer – der ist Pflicht und muss eingetragen werden
Erst beim Speichern entsteht der Lead; danach wandert der Suspect ins Archiv
und trägt lead_id (im Archiv als Lead markiert). Abbrechen ändert nichts.
Archiv und Löschen
Archivierte und in Leads übernommene Suspects, neueste zuerst. Zurückholen stellt die Zeile wieder in die Tabelle, Endgültig löschen entfernt sie.
Löschen geht auch direkt in der Tabelle (rotes Symbol am Zeilenende) – beide Wege fragen vorher nach. Anfangs war Löschen nur aus dem Archiv möglich; auf Wunsch vom 29.09.2026 gibt es den Knopf jetzt auch in der Tabelle.
Tabelle icon_suspects
| Spalte | Typ | Bedeutung |
|---|---|---|
id |
INT | |
name, role, company |
VARCHAR(190) | |
email |
VARCHAR(190) | ohne mailto:; nachträglich per migrateColumns ergänzt |
linkedin, website |
VARCHAR(500) | immer mit Protokoll gespeichert |
notes |
TEXT | |
last_contact_on |
DATE | |
remind_at |
DATETIME | nächster Impuls, UTC wie bei den Leads |
archived |
TINYINT | |
lead_id |
INT NULL | → icon_leads, ON DELETE SET NULL |
created_by |
INT NULL | → icon_users |
In die Historie (als Systemeintrag „Suspects") kommen Archivieren, Zurückholen, Übernahme als Lead und endgültiges Löschen – nicht jede Zelländerung.
Endpunkte
Alle unter /api/suspects, alle hinter requireAuth.
| Methode | Pfad | Zweck |
|---|---|---|
| GET | /?archived=0|1 |
Liste; aktiv älteste zuerst, Archiv neueste zuerst |
| GET | /reminders |
fällige Impulse (remind_at <= NOW(), nicht archiviert) |
| POST | / |
anlegen, name Pflicht |
| PATCH | /:id |
beliebige Felder; remind_in_days (Zahl oder null), archived, lead_id |
| POST | /:id/acknowledge |
{ snooze_days } verschiebt, sonst Kontakt heute + Impuls weg |
| DELETE | /:id |
endgültig löschen (aus Tabelle oder Archiv) |
Die Zähler im Menü kommen aus GET /api/dashboard
(counts.suspects_open, counts.suspects_archived).