| E2.S1 | Prompt engineering | System prompt + user prompt templates, evidence-based mapping
| E2.S2 | Generate endpoint | `POST /api/behandelplan/generate` retourneert JSON, < 8 sec response | E2.S3 | AI event logging | Calls loggen naar `ai_events` tabel new file: app/api/behandelplan/generate/route.ts modified: docs/specs/behandelplan/bouwplan-behandelplan-v1.md modified: docs/templates/bouwplan_template.md new file: lib/ai/behandelplan-prompt.ts new file: lib/ai/intervention-mapping.ts modified: lib/supabase/database.types.ts
This commit is contained in:
232
lib/ai/intervention-mapping.ts
Normal file
232
lib/ai/intervention-mapping.ts
Normal file
@@ -0,0 +1,232 @@
|
||||
/**
|
||||
* Evidence-Based Intervention Mapping
|
||||
*
|
||||
* Mapping van DSM-categorieën naar evidence-based interventies
|
||||
* met sessie-aantallen per severity level
|
||||
*/
|
||||
|
||||
export interface InterventionSuggestion {
|
||||
name: string;
|
||||
description: string;
|
||||
sessions: {
|
||||
laag: number;
|
||||
middel: number;
|
||||
hoog: number;
|
||||
};
|
||||
}
|
||||
|
||||
export type Severity = 'laag' | 'middel' | 'hoog';
|
||||
|
||||
/**
|
||||
* DSM categorieën naar interventie mapping
|
||||
* Gebaseerd op richtlijnen GGZ Standaarden
|
||||
*/
|
||||
export const INTERVENTION_MAPPING: Record<string, InterventionSuggestion[]> = {
|
||||
angststoornissen: [
|
||||
{
|
||||
name: 'CGT',
|
||||
description: 'Cognitieve Gedragstherapie gericht op angstreductie door blootstelling en cognitieve herstructurering',
|
||||
sessions: { laag: 8, middel: 10, hoog: 14 },
|
||||
},
|
||||
{
|
||||
name: 'Exposure therapie',
|
||||
description: 'Systematische blootstelling aan angstopwekkende situaties met responspreventie',
|
||||
sessions: { laag: 6, middel: 8, hoog: 12 },
|
||||
},
|
||||
{
|
||||
name: 'ACT',
|
||||
description: 'Acceptance and Commitment Therapy voor psychologische flexibiliteit',
|
||||
sessions: { laag: 8, middel: 10, hoog: 12 },
|
||||
},
|
||||
],
|
||||
stemmingsklachten: [
|
||||
{
|
||||
name: 'CGT',
|
||||
description: 'Cognitieve Gedragstherapie gericht op negatieve denkpatronen en gedragsactivatie',
|
||||
sessions: { laag: 8, middel: 10, hoog: 14 },
|
||||
},
|
||||
{
|
||||
name: 'IPT',
|
||||
description: 'Interpersoonlijke Therapie gericht op relationele patronen en sociale steun',
|
||||
sessions: { laag: 8, middel: 12, hoog: 16 },
|
||||
},
|
||||
{
|
||||
name: 'Gedragsactivatie',
|
||||
description: 'Gestructureerde toename van plezierige en betekenisvolle activiteiten',
|
||||
sessions: { laag: 6, middel: 8, hoog: 10 },
|
||||
},
|
||||
],
|
||||
trauma_ptss: [
|
||||
{
|
||||
name: 'EMDR',
|
||||
description: 'Eye Movement Desensitization and Reprocessing voor traumaverwerking',
|
||||
sessions: { laag: 6, middel: 10, hoog: 16 },
|
||||
},
|
||||
{
|
||||
name: 'Narratieve therapie',
|
||||
description: 'Verwerking door het opbouwen van een coherent traumaverhaal',
|
||||
sessions: { laag: 8, middel: 12, hoog: 16 },
|
||||
},
|
||||
{
|
||||
name: 'CGT trauma-focus',
|
||||
description: 'Trauma-gefocuste CGT met exposure en cognitieve verwerking',
|
||||
sessions: { laag: 8, middel: 12, hoog: 16 },
|
||||
},
|
||||
],
|
||||
persoonlijkheid: [
|
||||
{
|
||||
name: 'Schematherapie',
|
||||
description: 'Langdurige therapie gericht op disfunctionele schemas en copingstijlen',
|
||||
sessions: { laag: 16, middel: 24, hoog: 40 },
|
||||
},
|
||||
{
|
||||
name: 'MBT',
|
||||
description: 'Mentalization-Based Treatment voor emotieregulatie en relaties',
|
||||
sessions: { laag: 16, middel: 24, hoog: 40 },
|
||||
},
|
||||
{
|
||||
name: 'DGT',
|
||||
description: 'Dialectische Gedragstherapie voor emotieregulatie en crisisvaardigheden',
|
||||
sessions: { laag: 16, middel: 24, hoog: 40 },
|
||||
},
|
||||
],
|
||||
verslaving: [
|
||||
{
|
||||
name: 'Motiverende gespreksvoering',
|
||||
description: 'Versterken van intrinsieke motivatie voor gedragsverandering',
|
||||
sessions: { laag: 4, middel: 6, hoog: 8 },
|
||||
},
|
||||
{
|
||||
name: 'CGT verslaving',
|
||||
description: 'Cognitieve Gedragstherapie gericht op craving en terugvalpreventie',
|
||||
sessions: { laag: 8, middel: 12, hoog: 16 },
|
||||
},
|
||||
{
|
||||
name: 'Terugvalpreventie',
|
||||
description: 'Identificeren en managen van risicosituaties en triggers',
|
||||
sessions: { laag: 6, middel: 8, hoog: 12 },
|
||||
},
|
||||
],
|
||||
adhd: [
|
||||
{
|
||||
name: 'Psycho-educatie',
|
||||
description: 'Educatie over ADHD en praktische copingstrategieën',
|
||||
sessions: { laag: 4, middel: 6, hoog: 8 },
|
||||
},
|
||||
{
|
||||
name: 'Coaching/planning',
|
||||
description: 'Structuur en planningsvaardigheden ontwikkelen',
|
||||
sessions: { laag: 6, middel: 8, hoog: 12 },
|
||||
},
|
||||
{
|
||||
name: 'CGT ADHD',
|
||||
description: 'Gedragstherapie gericht op impulscontrole en executieve functies',
|
||||
sessions: { laag: 8, middel: 10, hoog: 14 },
|
||||
},
|
||||
],
|
||||
autisme: [
|
||||
{
|
||||
name: 'Psycho-educatie',
|
||||
description: 'Educatie over autisme en zelfacceptatie',
|
||||
sessions: { laag: 4, middel: 6, hoog: 8 },
|
||||
},
|
||||
{
|
||||
name: 'Sociale vaardigheden',
|
||||
description: 'Training in sociale interactie en communicatie',
|
||||
sessions: { laag: 8, middel: 12, hoog: 16 },
|
||||
},
|
||||
{
|
||||
name: 'Stressmanagement',
|
||||
description: 'Omgaan met prikkels en sensorische overbelasting',
|
||||
sessions: { laag: 6, middel: 8, hoog: 12 },
|
||||
},
|
||||
],
|
||||
overig: [
|
||||
{
|
||||
name: 'Ondersteunende gesprekken',
|
||||
description: 'Steunende begeleiding en reflectie',
|
||||
sessions: { laag: 4, middel: 6, hoog: 8 },
|
||||
},
|
||||
{
|
||||
name: 'Psycho-educatie',
|
||||
description: 'Educatie over klachten en copingstrategieën',
|
||||
sessions: { laag: 4, middel: 6, hoog: 8 },
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
/**
|
||||
* Haal interventies op voor een DSM categorie
|
||||
*/
|
||||
export function getInterventionsForCategory(
|
||||
dsmCategory: string,
|
||||
severity: Severity
|
||||
): { name: string; description: string; recommendedSessions: number }[] {
|
||||
// Normalize category
|
||||
const normalizedCategory = dsmCategory
|
||||
.toLowerCase()
|
||||
.replace(/[^a-z]/g, '_')
|
||||
.replace(/_+/g, '_');
|
||||
|
||||
// Find matching category
|
||||
const interventions =
|
||||
INTERVENTION_MAPPING[normalizedCategory] ||
|
||||
INTERVENTION_MAPPING['overig'];
|
||||
|
||||
return interventions.map((intervention) => ({
|
||||
name: intervention.name,
|
||||
description: intervention.description,
|
||||
recommendedSessions: intervention.sessions[severity],
|
||||
}));
|
||||
}
|
||||
|
||||
/**
|
||||
* Bereken aanbevolen aantal sessies
|
||||
*/
|
||||
export function getRecommendedSessionCount(
|
||||
dsmCategory: string,
|
||||
severity: Severity
|
||||
): number {
|
||||
const interventions = getInterventionsForCategory(dsmCategory, severity);
|
||||
if (interventions.length === 0) return 8;
|
||||
|
||||
// Neem gemiddelde van eerste 2 interventies
|
||||
const topInterventions = interventions.slice(0, 2);
|
||||
const avg =
|
||||
topInterventions.reduce((sum, i) => sum + i.recommendedSessions, 0) /
|
||||
topInterventions.length;
|
||||
|
||||
return Math.round(avg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Bepaal behandelvorm op basis van severity
|
||||
*/
|
||||
export function getRecommendedFormat(severity: Severity): string {
|
||||
switch (severity) {
|
||||
case 'laag':
|
||||
return 'Individueel';
|
||||
case 'middel':
|
||||
return 'Individueel';
|
||||
case 'hoog':
|
||||
return 'Individueel + groep (optioneel)';
|
||||
default:
|
||||
return 'Individueel';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Bepaal behandelfrequentie op basis van severity
|
||||
*/
|
||||
export function getRecommendedFrequency(severity: Severity): string {
|
||||
switch (severity) {
|
||||
case 'laag':
|
||||
return 'Wekelijks tot tweewekelijks';
|
||||
case 'middel':
|
||||
return 'Wekelijks';
|
||||
case 'hoog':
|
||||
return 'Wekelijks tot 2x per week';
|
||||
default:
|
||||
return 'Wekelijks';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user