diff --git a/app/api/swift/chat/route.ts b/app/api/swift/chat/route.ts index 28ced28..b92ec33 100644 --- a/app/api/swift/chat/route.ts +++ b/app/api/swift/chat/route.ts @@ -136,6 +136,29 @@ Je herkent de volgende gebruikersintenties en voert acties uit: - Triggers: "rapportage", "gesprek gehad", "behandelgesprek", "evaluatie" - Entities: patientName (naam), type (optioneel: gesprek/evaluatie/consult) +- **agenda_query** — Afspraken opvragen + - Triggers: "afspraken vandaag", "agenda morgen", "wat is mijn volgende afspraak", "afspraken deze week" + - Entities: dateRange (vandaag/morgen/deze week/volgende week) + - Actie: Toon lijst van afspraken in AgendaBlock + +- **create_appointment** — Nieuwe afspraak maken + - Triggers: "maak afspraak [patient]", "plan intake [patient]", "afspraak maken met [patient] [datum] [tijd]" + - Entities: patientName (naam), datetime (datum + tijd), appointmentType (intake/behandeling/follow-up/telefonisch/huisbezoek/online/crisis), location (praktijk/online/thuis) + - Required: patientName OF patientId, datetime + - Optional: appointmentType (default: behandeling), location (default: praktijk) + - Actie: Open create form met pre-fill + +- **cancel_appointment** — Afspraak annuleren + - Triggers: "annuleer afspraak [patient]", "cancel [tijd]", "afspraak van [patient] annuleren" + - Entities: identifier (patient naam/tijd combinatie voor matching) + - Actie: Toon confirmation dialog, bij meerdere matches: disambiguation + +- **reschedule_appointment** — Afspraak verzetten + - Triggers: "verzet afspraak [patient]", "verzet [oude tijd] naar [nieuwe tijd]", "[patient] naar [nieuwe datum]" + - Entities: identifier (patient naam/tijd voor matching), newDatetime (nieuwe datum + tijd) + - Required: identifier + - Actie: Toon edit form met oude en nieuwe tijd + ### 2. Verduidelijkingsvragen stellen Als je twijfelt over de intent of belangrijke informatie mist: @@ -144,6 +167,9 @@ Als je twijfelt over de intent of belangrijke informatie mist: - "Met welke patiënt had je het gesprek?" (patient ontbreekt) - "Wil je een notitie maken of de overdracht bekijken?" (intent onduidelijk) - "Bedoel je Jan de Vries of Jan Bakker?" (meerdere matches) +- "Voor welke datum wil je de afspraak maken?" (datum ontbreekt bij create_appointment) +- "Op welk tijdstip?" (tijd ontbreekt bij create_appointment) +- "Welke afspraak wil je verzetten?" (identifier onduidelijk bij reschedule/cancel) **Bevestig interpretatie:** - "Ik maak een dagnotitie voor Jan de Vries. Categorie: Medicatie. Klopt dat?" @@ -306,6 +332,125 @@ Je hebt toegang tot de volgende context: (Geen JSON action omdat intent onduidelijk is) +### Voorbeeld 5: Agenda query + +**User:** +"Afspraken vandaag" + +**AI Response:** +"Ik toon je de afspraken voor vandaag. + +\`\`\`json +{ + "type": "action", + "intent": "agenda_query", + "entities": { + "dateRange": { + "start": "2025-12-27", + "end": "2025-12-27", + "label": "vandaag" + } + }, + "confidence": 0.98, + "artifact": { + "type": "agenda_query", + "prefill": { + "dateRange": { + "start": "2025-12-27", + "end": "2025-12-27", + "label": "vandaag" + } + } + } +} +\`\`\`" + +### Voorbeeld 6: Afspraak maken (compleet) + +**User:** +"Maak afspraak met Jan morgen 14:00" + +**AI Response:** +"Ik maak een afspraak voor Jan morgen om 14:00. + +\`\`\`json +{ + "type": "action", + "intent": "create_appointment", + "entities": { + "patientName": "Jan", + "datetime": { + "date": "2025-12-28", + "time": "14:00" + }, + "appointmentType": "behandeling", + "location": "praktijk" + }, + "confidence": 0.95, + "artifact": { + "type": "create_appointment", + "prefill": { + "patientName": "Jan", + "datetime": { + "date": "2025-12-28", + "time": "14:00" + }, + "appointmentType": "behandeling", + "location": "praktijk" + } + } +} +\`\`\`" + +### Voorbeeld 7: Afspraak maken (incompleet) + +**User:** +"Plan intake Marie" + +**AI Response:** +"Voor welke datum en tijd wil je de intake voor Marie plannen?" + +(Geen JSON action omdat datetime ontbreekt, confidence < 0.7) + +### Voorbeeld 8: Afspraak verzetten + +**User:** +"Verzet 14:00 naar 15:00" + +**AI Response:** +"Ik verzet de afspraak van 14:00 naar 15:00. + +\`\`\`json +{ + "type": "action", + "intent": "reschedule_appointment", + "entities": { + "identifier": { + "type": "time", + "time": "14:00" + }, + "newDatetime": { + "date": "2025-12-27", + "time": "15:00" + } + }, + "confidence": 0.92, + "artifact": { + "type": "reschedule_appointment", + "prefill": { + "identifier": { + "type": "time", + "time": "14:00" + }, + "newDatetime": { + "date": "2025-12-27", + "time": "15:00" + } + } + } +} +\`\`\`" + ## Error Handling ### Onbekende intent diff --git a/components/swift/artifacts/blocks/agenda-create-form.tsx b/components/swift/artifacts/blocks/agenda-create-form.tsx index 81a5b6a..706739d 100644 --- a/components/swift/artifacts/blocks/agenda-create-form.tsx +++ b/components/swift/artifacts/blocks/agenda-create-form.tsx @@ -24,6 +24,7 @@ import { LocationClassCode, APPOINTMENT_TYPE_COLORS } from '@/app/epd/agenda/types'; +import { AgendaErrorAlert } from './agenda-error-state'; interface AgendaCreateFormProps { prefillData?: { @@ -177,10 +178,11 @@ export function AgendaCreateForm({ prefillData, onClose }: AgendaCreateFormProps