fix(suche): KI-Suche sieht Scanner-Treffer
Der Scanner liegt in einer eigenen Datenbank (perinco_scanner); die KI-Suche las nur die crm_*-Tabellen und fand deshalb nichts zum Scanner. Treffer ab Anzeigeschwelle gehen jetzt als scanner_matches mit, Refs vom Typ "scanner" fuehren in die Scanner-Ansicht. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
090f745b0d
commit
e1b69fffbd
+26
-2
@@ -66,10 +66,12 @@ sequenceDiagram
|
||||
actor B as Benutzer
|
||||
participant E as Express
|
||||
participant M as MariaDB
|
||||
participant S as perinco_scanner
|
||||
participant O as OpenAI
|
||||
|
||||
B->>E: POST /api/search/ai { question }
|
||||
E->>M: Bestand lesen (Kontakte, Opportunities, Akquise, Termine)
|
||||
E->>S: Scanner-Treffer lesen (ab Anzeigeschwelle)
|
||||
E->>E: zusammenfassen, ab 400 Zeilen je Liste kuerzen
|
||||
E->>O: Systemprompt + Bestand + Frage
|
||||
O-->>E: { answer, refs }
|
||||
@@ -83,15 +85,37 @@ Bestand ist klein genug, um ihn vollständig mitzuliefern. Wird gekürzt, sagt d
|
||||
Antwort das dazu.
|
||||
|
||||
Die genannten Datensätze kommen als `refs` zurück und stehen unter der Antwort
|
||||
als anklickbare Schaltflächen.
|
||||
als anklickbare Schaltflächen. Ein Scanner-Treffer (`type: "scanner"`) führt in
|
||||
die Scanner-Ansicht.
|
||||
|
||||
Drei Regeln stehen ausdrücklich im Systemprompt, weil die Antworten sonst falsch
|
||||
### Scanner-Treffer
|
||||
|
||||
Der Scanner hat eine **eigene Datenbank** (`perinco_scanner`, siehe
|
||||
`server/src/scanner/db/config.js`). Bis Oktober 2026 las die erweiterte Suche
|
||||
nur die `crm_*`-Tabellen und antwortete auf Fragen zum Scanner deshalb mit
|
||||
„Dazu steht nichts im Bestand." Seitdem holt `loadScannerMatches()` die
|
||||
Treffer dazu und gibt sie als `scanner_matches` mit:
|
||||
|
||||
| Feld | Herkunft |
|
||||
| --- | --- |
|
||||
| `id`, `match_percentage`, `status`, `found_at` | `matches` |
|
||||
| `agent` | `agents.name` |
|
||||
| `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
|
||||
Projektbeschreibung bleibt draußen – sie ist lang und würde den Kontext
|
||||
sprengen. Ist die Scanner-Datenbank nicht erreichbar, fehlt nur dieser Teil.
|
||||
|
||||
Vier Regeln stehen ausdrücklich im Systemprompt, weil die Antworten sonst falsch
|
||||
werden:
|
||||
|
||||
* `daily_rate` ist ein **Tagessatz**; `null` heißt *nicht hinterlegt*, nicht
|
||||
*null Euro*. Verglichen wird nur, wo ein Wert steht.
|
||||
* Kontakte mit `mail_pool` sind noch nicht gepflegt – sie zählen mit, werden
|
||||
aber als aus dem Postfach stammend benannt.
|
||||
* `scanner_matches` sind Treffer des Projekt-Scanners; Bezug in `refs` mit
|
||||
`type: "scanner"`.
|
||||
* `icon_contacts` sind Kontakte des ICON CRM. Ihre Kennung ist eine Zeichenkette
|
||||
(`icon-31`) und gehört **nicht** in `refs`.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user