diff --git a/app/api/overdracht/generate/route.ts b/app/api/overdracht/generate/route.ts
index a7df45f..08baa44 100644
--- a/app/api/overdracht/generate/route.ts
+++ b/app/api/overdracht/generate/route.ts
@@ -9,7 +9,7 @@ import { createClient } from '@/lib/auth/server';
import { NextRequest, NextResponse } from 'next/server';
import { z } from 'zod';
import {
- OVERDRACHT_SYSTEM_PROMPT,
+ buildSystemPrompt,
buildOverdrachtUserPrompt,
calculateAge,
formatPatientName,
@@ -154,7 +154,10 @@ async function loadOverdrachtContext(
/**
* Call Claude API
*/
-async function callClaudeAPI(context: OverdrachtContext): Promise<{
+async function callClaudeAPI(
+ context: OverdrachtContext,
+ role: 'psychiater' | 'verpleegkundige' = 'verpleegkundige'
+): Promise<{
samenvatting: string;
aandachtspunten: Aandachtspunt[];
actiepunten: string[];
@@ -164,6 +167,7 @@ async function callClaudeAPI(context: OverdrachtContext): Promise<{
throw new Error('ANTHROPIC_API_KEY ontbreekt in environment');
}
+ const systemPrompt = buildSystemPrompt(role);
const userPrompt = buildOverdrachtUserPrompt(context);
const response = await fetch('https://api.anthropic.com/v1/messages', {
@@ -177,7 +181,7 @@ async function callClaudeAPI(context: OverdrachtContext): Promise<{
model: 'claude-sonnet-4-20250514',
max_tokens: 2048,
temperature: 0.3,
- system: OVERDRACHT_SYSTEM_PROMPT,
+ system: systemPrompt,
messages: [{ role: 'user', content: userPrompt }],
}),
});
@@ -277,7 +281,7 @@ export async function POST(request: NextRequest) {
);
}
- const { patientId, period } = result.data;
+ const { patientId, period, filterForRole } = result.data;
const supabase = await createClient();
// Check auth
@@ -289,8 +293,8 @@ export async function POST(request: NextRequest) {
// Load context with period filter
const context = await loadOverdrachtContext(supabase, patientId, period);
- // Call Claude API
- const aiResult = await callClaudeAPI(context);
+ // Call Claude API with role-specific filtering
+ const aiResult = await callClaudeAPI(context, filterForRole);
const durationMs = Date.now() - startTime;
diff --git a/components/swift/blocks/overdracht-block.tsx b/components/swift/blocks/overdracht-block.tsx
index c1a9ccb..e824b27 100644
--- a/components/swift/blocks/overdracht-block.tsx
+++ b/components/swift/blocks/overdracht-block.tsx
@@ -56,6 +56,7 @@ export function OverdrachtBlock({ prefill }: OverdrachtBlockProps) {
const { toast } = useToast();
const [period, setPeriod] = useState('1d');
+ const [filterRole, setFilterRole] = useState<'verpleegkundige' | 'psychiater'>('verpleegkundige');
const [patients, setPatients] = useState([]);
const [isLoadingPatients, setIsLoadingPatients] = useState(true);
const [patientSummaries, setPatientSummaries] = useState
+ {/* Role Filter Toggle */}
+
+
+
+
+
+
+
+ {filterRole === 'psychiater'
+ ? 'AI filtert op behandelrelevantie voor psychiater'
+ : 'Toont alle door verpleegkundige gemarkeerde items'}
+
+
+
{/* Patients List */}
{isLoadingPatients ? (
diff --git a/lib/ai/overdracht-prompt.ts b/lib/ai/overdracht-prompt.ts
index c537fc9..59c8079 100644
--- a/lib/ai/overdracht-prompt.ts
+++ b/lib/ai/overdracht-prompt.ts
@@ -68,6 +68,58 @@ Je taak: Maak een beknopte, relevante overdracht voor de opvolgende dienst.
Geef je antwoord als PURE JSON, zonder markdown code blocks.`;
+/**
+ * Build system prompt based on target role
+ * For psychiater: adds strict filtering on treatment relevance
+ * For verpleegkundige: uses base prompt (all marked items)
+ */
+export function buildSystemPrompt(role: 'psychiater' | 'verpleegkundige' = 'verpleegkundige'): string {
+ if (role === 'psychiater') {
+ return `${OVERDRACHT_SYSTEM_PROMPT}
+
+## PSYCHIATER FILTERING
+Je maakt overdracht voor een PSYCHIATER. Filter STRIKT op behandelrelevantie.
+
+De verpleegkundige heeft al items geselecteerd (include_in_handover=true), maar jij moet VERDER FILTEREN.
+
+✅ WEL RELEVANT (include in samenvatting):
+- Medicatie-issues: weigering, bijwerkingen, dosisaanpassingen, therapietrouw
+- Stemming/gedrag: veranderingen van baseline, afwijkend gedrag, agitatie
+- Risico-signalen: suïcidale uitingen, automutilatie, agressie
+- Psychotische symptomen: wanen, hallucinaties, desorganisatie, paranoia
+- Crisis/dwang: separatie, fixatie, dwangmedicatie, vrijheidsbeperkende maatregelen
+- Afwijkende vitals: HH (kritiek hoog), LL (kritiek laag) met behandelimpact
+
+❌ FILTER UIT (niet in samenvatting):
+- Routine medicatie: "medicatie volgens schema", "zonder problemen", "ingenomen conform afspraak"
+- ADL activiteiten: douchen, aankleden, eten, drinken (tenzij significant afwijkend/weigering)
+- Sociale activiteiten: "deelgenomen aan groepstherapie", "gesprek gehad", "koffie gedronken"
+- Standaard observaties: "rustige dag", "geen bijzonderheden", "normaal functioneren"
+- Routine vitals: bloeddruk/pols binnen normaalwaarden (N interpretatie)
+- Dagstructuur: "dagprogramma gevolgd", "aanwezig bij activiteit"
+
+VUISTREGEL: Include ALLEEN als een psychiater op basis van deze info een BEHANDELBESLISSING kan nemen.
+
+Beperkingen:
+- Maximum 3 aandachtspunten (ALLEEN behandelrelevant, geen routine items)
+- Maximum 2 actiepunten (ALLEEN actionable voor psychiater)
+- Bij twijfel of iets relevant is → FILTER UIT
+
+Voorbeelden:
+✅ INCLUDE: "Jan weigerde haloperidol, zegt dat medicatie hem controleert" → Medicatie-compliance issue
+✅ INCLUDE: "Marie uitte suïcidale gedachten tijdens gesprek" → Risicosignaal, urgent
+✅ INCLUDE: "Piet verbaal en fysiek agressief, separatie 30 min" → Crisis, gedragsverandering
+❌ FILTER: "Jan heeft goed gegeten, ontbijt en lunch zonder problemen" → Routine ADL
+❌ FILTER: "Marie deelgenomen aan groepstherapie" → Sociale activiteit, geen issues
+❌ FILTER: "Piet heeft medicatie ingenomen volgens schema" → Routine medicatie
+
+Geef je antwoord als PURE JSON, zonder markdown code blocks.`;
+ }
+
+ // Verpleegkundige uses base prompt (no filtering)
+ return OVERDRACHT_SYSTEM_PROMPT;
+}
+
/**
* Format timestamp to Dutch date format
*/
diff --git a/lib/types/overdracht.ts b/lib/types/overdracht.ts
index 709833b..5a1e144 100644
--- a/lib/types/overdracht.ts
+++ b/lib/types/overdracht.ts
@@ -102,6 +102,7 @@ export interface Aandachtspunt {
export const GenerateOverdrachtSchema = z.object({
patientId: z.string().uuid('Patient ID moet een geldige UUID zijn'),
period: z.enum(['1d', '3d', '7d', '14d']).optional().default('1d'),
+ filterForRole: z.enum(['psychiater', 'verpleegkundige']).optional().default('verpleegkundige'),
});
export type GenerateOverdrachtInput = z.infer;