- Eingabezeile über der Liste, mit Abstand und Knopf Hinzufügen; Liste neueste zuerst, neue Einträge erscheinen direkt darunter - Letzter Kontakt neuer Zeilen = heute (Ortszeit), auch serverseitig, wenn das Feld beim Anlegen fehlt Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4.9 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; neue Zeilen stehen auf heute (änderbar per Kalender). Auch die API setzt heute, wenn das Feld fehlt – ein bewusst geleertes Feld (null) bleibt leer |
| Nächster Impuls | remind_at |
Wecker: Anzahl Tage eingeben, der Server rechnet das Datum |
Bedienung wie eine Liste. Oben steht immer eine Eingabezeile, mit etwas Abstand zur Liste darunter; die Liste zeigt die neuesten Einträge zuerst, ein neuer landet also direkt unter der Eingabe. Gespeichert wird mit Enter, dem Knopf Hinzufügen oder sobald der Fokus die Zeile verlässt. 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 neueste Anlage zuerst, Archiv zuletzt geändert 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).