feat(scanner): Schwellen im Dashboard pro Benutzer
"Anzeige ab %" und "Hinweis ab %" liegen jetzt am CRM-Benutzer (crm_users.scanner_display_threshold/scanner_match_threshold) statt global in den Scanner-Einstellungen. NULL = globaler Standard. Die Mail-Schwelle bleibt global, die KI-Suche nimmt die Anzeigeschwelle des Suchenden. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
e1b69fffbd
commit
69001e9687
@@ -38,6 +38,8 @@ erDiagram
|
||||
longtext avatar "Data-URL"
|
||||
varchar theme "Farbwelt, NULL = perinco"
|
||||
varchar theme_mode "light | dark, NULL = folgt dem System"
|
||||
tinyint scanner_display_threshold "Anzeige ab %, NULL = globaler Standard"
|
||||
tinyint scanner_match_threshold "Hinweis ab %, NULL = globaler Standard"
|
||||
varchar password_hash "bcrypt"
|
||||
tinyint is_active
|
||||
}
|
||||
|
||||
@@ -335,6 +335,14 @@ aktiv, nur langsamer (Chrome bremst Timer versteckter Tabs auf etwa einmal pro
|
||||
Minute) und nur, wenn zuvor irgendwo auf der Seite geklickt wurde
|
||||
(Autoplay-Regel). Browserunabhängig meldet nur die E-Mail.
|
||||
|
||||
**Schwellen pro Benutzer:** *Anzeige ab %* und *Hinweis ab %* im Dashboard
|
||||
gehören dem angemeldeten Benutzer (`crm_users.scanner_display_threshold`,
|
||||
`scanner_match_threshold`, gelesen und geschrieben über `/my-thresholds`).
|
||||
`NULL` heißt: der globale Wert aus den Scanner-Einstellungen gilt. Die Schwelle
|
||||
für die E-Mail bleibt global (`match_threshold`), weil die Pipeline ohne
|
||||
Benutzer läuft. Die KI-Suche filtert Scanner-Treffer mit der Anzeigeschwelle
|
||||
des Suchenden.
|
||||
|
||||
## Endpunkte
|
||||
|
||||
Alle unter `/api/scanner`, alle hinter `requireAuth`:
|
||||
@@ -353,5 +361,6 @@ Alle unter `/api/scanner`, alle hinter `requireAuth`:
|
||||
| PUT/DELETE | `/matches/:id` | Status setzen, löschen |
|
||||
| POST | `/projects/:id/applied-check` | Abgleich „bereits beworben!" von Hand wiederholen |
|
||||
| GET/POST | `/settings` | Geheimnisse maskiert |
|
||||
| GET/PUT | `/my-thresholds` | eigene Schwellen des angemeldeten Benutzers, `null` = Standard |
|
||||
| POST | `/scan` | Lauf starten, `409` wenn schon einer läuft |
|
||||
| GET | `/status` | läuft ein Lauf, Scheduler an, Datenbankname |
|
||||
|
||||
@@ -857,10 +857,14 @@ Die Filterzeile:
|
||||
| **Zeitraum** | wie alt darf das Projekt sein (Standard: letzte 24 Stunden) |
|
||||
| **Agent** | nur Treffer eines Beraters |
|
||||
| **Anzeige ab %** | schwächere Treffer ausblenden |
|
||||
| **Hinweis ab %** | ab wann Signalton und E-Mail |
|
||||
| **Hinweis ab %** | ab wann Signalton und Hinweisbanner |
|
||||
|
||||
Die letzten zwei Werte werden **gespeichert** und gelten auch beim nächsten Mal
|
||||
und in den Einstellungen. Rechts daneben steht `sichtbar / gesamt`.
|
||||
Die letzten zwei Werte werden **pro Benutzer gespeichert**: Jeder sieht seine
|
||||
eigene Einstellung, auch am nächsten Tag und an einem anderen Rechner, und
|
||||
ändert damit nichts für die Kollegen. Wer noch nichts eingestellt hat, bekommt
|
||||
die Standardwerte aus *Einstellungen → Scanner*. Die E-Mail bei neuen Treffern
|
||||
richtet sich immer nach dem Standardwert dort, nicht nach dem eigenen Wert.
|
||||
Rechts daneben steht `sichtbar / gesamt`.
|
||||
|
||||
Die Liste zeigt standardmäßig die **neuesten Treffer oben** (Spalte *Gefunden am*,
|
||||
absteigend). Ein Klick auf einen Spaltenkopf sortiert um, ein zweiter dreht die
|
||||
|
||||
+1
-1
@@ -35,7 +35,7 @@ Quelltext.
|
||||
| **Session** (Portal) | Gespeicherte Cookies einer angemeldeten Börsen-Sitzung, im Playwright-Format `storageState`. |
|
||||
| **Sitzung** (CRM) | Die eigene Anmeldung, als JWT im `localStorage`, 12 Stunden gültig. |
|
||||
| **Suchintervall** | Abstand zwischen zwei automatischen Suchläufen, in Minuten. Einstellung `search_interval`. |
|
||||
| **Schwellenwert Anzeige** | `display_threshold` - Treffer darunter bleiben im Dashboard ausgeblendet. |
|
||||
| **Schwellenwert Anzeige** | `display_threshold` - Treffer darunter bleiben im Dashboard ausgeblendet. Globaler Standard; jeder Benutzer kann ihn mit `crm_users.scanner_display_threshold` überschreiben. |
|
||||
| **Schwellenwert Benachrichtigung** | `match_threshold` - ab hier gibt es Signalton und E-Mail. |
|
||||
| **Verbindung** | Kante zwischen zwei Kontakten im Netzwerkdiagramm, mit Art und Stärke. Tabelle `crm_lead_connections`. |
|
||||
| **Volumen** | Tagessatz x Personentage - oder der **Projektpreis**, wenn einer eingetragen ist. Ein mit der Abschlusswahrscheinlichkeit gewichtetes Volumen gibt es nicht (seit 18.08.2026 entfernt); so wird bei perinco nicht gerechnet. |
|
||||
|
||||
+2
-1
@@ -103,7 +103,8 @@ Treffer dazu und gibt sie als `scanner_matches` mit:
|
||||
| `project_title`, `company`, `portal`, `location`, `rate`, `published_at`, `already_applied`, `url` | `projects` |
|
||||
|
||||
Mitgegeben wird nur, was auch die Scanner-Ansicht zeigt: Treffer ab der
|
||||
Anzeigeschwelle (`display_threshold`), die neuesten zuerst, höchstens 400. Die
|
||||
Anzeigeschwelle des suchenden Benutzers (`crm_users.scanner_display_threshold`,
|
||||
sonst der globale `display_threshold`), die neuesten zuerst, höchstens 400. Die
|
||||
Projektbeschreibung bleibt draußen – sie ist lang und würde den Kontext
|
||||
sprengen. Ist die Scanner-Datenbank nicht erreichbar, fehlt nur dieser Teil.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user