Vaste regels
Laag 1 = harde garanties. Laag 2 (toekomst) wordt gevormd door prompts, RAG en evaluatie die hierop voortbouwen, maar nooit tegen deze regels in.
ai_config (sleutel match_drempel). Bij een DB-leesfout valt de guard terug op 40.Als een kandidaat nog niet heeft geantwoord (reply_tekst is leeg of alleen whitespace), draait de qualify-AI in nudge-modus. De output mag nooit bedank-frasen bevatten. Bij een overtreding wordt één keer geregeneerd; blijft het mis, dan valt het systeem terug op een vast nudge-template.
Waar afgedwongen
- src/lib/qualification.server.ts (genereerKwalificatiebericht, BEDANK_REGEX + NUDGE_HARDCODED_FALLBACK)
- src/routes/api/public/qualify.ts
- src/lib/prompt-test.functions.ts
Elke kwalificatie levert een gesprek_status op: doorgaan, afgesloten_geen_interesse of menselijk_opvolgen. De status wordt gelogd in kwalificatie_log en teruggegeven via de API zodat de kanaal-laag weet of het gesprek moet stoppen of overdragen.
Waar afgedwongen
- src/lib/qualification.server.ts (GesprekStatus type + STATUS_SET guard)
- src/routes/api/public/qualify.ts
- src/routes/prompt-test.tsx
Wanneer de gesprek_status afgesloten_geen_interesse is, maakt een code-guard de vragen-array onvoorwaardelijk leeg. De AI kan dan geen vervolgvragen meer doorsturen.
Waar afgedwongen
- src/lib/qualification.server.ts (status === 'afgesloten_geen_interesse' ⇒ v = [])
Alle actieve business_brain-items uit de categorieën bedrijf, recruitment, compliance en playbook worden zonder embeddings of vector search rechtstreeks in de system-prompt geplaatst onder het kopje 'Bedrijfskennis'. De meegegeven titels worden gelogd.
Waar afgedwongen
- src/lib/business-brain.server.ts (laadBrainVoorQualify)
- src/routes/api/public/qualify.ts
- src/lib/prompt-test.functions.ts
De qualify-AI moet vóór elk bericht het kandidaatprofiel + gesprek expliciet toetsen aan de vacature-eisen (domein/ervaring, contractvorm, locatie, beschikbaarheid, tarief) en een match_score (0-100) + match_toelichting leveren. Bij een score onder de centrale drempel uit ai_config.match_drempel (default 50; fallback 40 bij DB-leesfout) forceert de code een eerlijk, warm mismatch-bericht met lege vragen-array en zet gesprek_status op menselijk_opvolgen zodat René meekijkt. De gebruikte drempel + bron worden samen met match_score en match_toelichting gelogd in kwalificatie_log.
Waar afgedwongen
- src/lib/ai-config.server.ts (laadMatchDrempel, tabel ai_config)
- src/lib/qualification.server.ts (genereerKwalificatiebericht + beoordeelKwalificatie, MATCH-stap in prompts + code-guard leest drempel per call)
- src/routes/prompt-test.tsx (weergave match_score/toelichting + actieve drempel)
De qualify-AI mag NOOIT ondertekenen met een naam of initialen. Zowel de prompts (ai_prompts + hardcoded fallbacks + SENIOR_RECRUITER_PROMPT) als een code-guard dwingen dit af: een slotregel als 'Groetjes, X', 'Mvg, X' of 'Met vriendelijke groet, X' wordt automatisch uit het gegenereerde bericht/afsluitbericht gestript en gelogd in kwalificatie_log (veld handtekening_gestript). Optioneel afzender-blok in de qualify-body geeft de AI wél context (voornaam, functie, focus) zonder toestemming om te tekenen; ondertekening volgt op kanaalniveau.
Waar afgedwongen
- src/lib/qualification.server.ts (stripNaamHandtekening + toepassing in genereer en beoordeel)
- src/routes/api/public/qualify.ts (SENIOR_RECRUITER_PROMPT HANDTEKENING-REGEL + strip-guard)
- src/lib/prompt-test.functions.ts (zelfde strip-guard in testomgeving)
- ai_prompts: qualify_bericht v4 + qualify_beoordeling v3 (actief)