## 2026-04-21 — AI Search & Knowledge Chat Upgrade (v2.1) ### Nieuwe Features 1. **Full-Text Search API** — `GET /api/search?q=&category=&limit=20` met relevance scoring en category filtering 2. **AI HSEQ Kennis Assistent** — Chat bubble rechtsonder op kennisbank pagina, RAG-based antwoorden uit kennisbank documenten, sessiegeschiedenis opgeslagen in `knowledge_chat` tabel 3. **Wetgeving Alerts** — Bell icoon in sidebar met badge count, alert lijst op kennisbank pagina, API endpoints voor CRUD (`/api/alerts`, `/api/alerts//read`, `/api/alerts/count`) 4. **Document Versie Tracking** — `document_versions` tabel, versiegeschiedenis op document detail pagina, API endpoints (`/api/document//versions`, `/api/document//version` POST) ### Nieuwe DB Tabellen - `knowledge_chat` (id, session_id, role, content, created_at) - `legislation_alerts` (id, title, source, summary, url, status, detected_at) - `alert_subscriptions` (id, user_id, categories, created_at) - `document_versions` (id, doc_id, version, content_hash, uploaded_at, uploaded_by, changelog) ### Bestanden - Backup: `app.py.pre-ai-search.bak` - Modified: `app.py` (6304 → ~6600 regels) ### Nieuwe API Endpoints - `GET /api/search` — Full-text search - `POST /api/knowledge/chat` — RAG chatbot - `GET /api/knowledge/chat/` — Chat history - `GET /api/alerts` — List alerts - `POST /api/alerts` — Create alert - `PUT /api/alerts//read` — Mark alert read - `GET /api/alerts/count` — Unread count - `GET /api/document//versions` — Version history - `POST /api/document//version` — Add version ## 2026-08-17 — Fix: Consultant Take bug (generieke nep-adviezen) - **Root cause:** Z.AI glm-5-turbo (reasoning-model) overschreed de 30s-timeout / gaf JSON buiten `content`; OpenRouter-fallback faalde structureel met HTTP 402 (geen credits). `generate_fallback_take()` vulde dan een generieke actietekst in die als echte consultant_take werd opgeslagen (262 items vergiftigd). - **Fix (module_intelligence_v2.py):** - `_call_ai`: timeout 30→90s, keys per call uit env gelezen. - Robuustere JSON-extractie (directe parse → eerste{...laatste} → risk_level-regex). - `generate_fallback_take` verwijderd; vervangen door `build_unavailable_take()`: eerlijke tekst + tijdstempel, categorie-specifieke review-hint, NOOIT opgeslagen als consultant_take. - Mislukte AI-call markeert item `take_status='pending'` + `take_attempted_at` (nieuwe kolommen) i.p.v. template opslaan; batch probeert pending items opnieuw. - UI: pending items krijgen grijs "⏳ Analyse in wachtrij"-badge + eerlijke tekst; feed toont 40 geanalyseerde + max 10 nieuwste pending. - **module_intelligence_pipeline.py:** FALLBACK_TEMPLATES vervangen door eerlijke "Automatische signalering (trefwoordanalyse, geen AI-consultant-analyse)"-teksten per prioriteit. - **DB-repair:** 262 template-takes gereset naar pending, 41 nep-alerts verwijderd (backup: /root/backups_hseq/hseq_kennisbank_pre_takefix_20260817_214848.db). - **PM2:** juiste proces `hseq-kennisbank` herstart; stale duplicaat `hseq-v2` (oude code uit HSEQ-Intelligence-Monitor-v2, poortconflict 5052, 14k+ crash-herstarts) gestopt.