Files
triqura-ecd/lib/ai/intervention-mapping.ts
colinislit ac98070fe4 | 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
2025-12-04 09:27:12 +01:00

233 lines
6.5 KiB
TypeScript

/**
* 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';
}
}