feat(cortex): no-show casus — intent flow, brief-rescript en document artifact

Cortex handelt een no-show af vanuit één chatcommando: afspraak
annuleren (declarabiliteits-nudge), en de openstaande concept-
huisartsbrief wordt via LLM herschreven en ter review aangeboden
in een document artifact (human-in-the-loop, PATCH dispatch zet
status op verzendklaar).

- API-routes: context, rescript, cancel, dispatch
- NoShowDocumentBlock: review/edit UI met origineel-vergelijk
- Mock-data voor concept huisartsbrief
- PRD, FO, bouwplan en epics in docs/intent/noshow-case/

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
colinislit
2026-07-09 23:14:55 +02:00
parent d08db12765
commit 924988dd15
14 changed files with 3022 additions and 0 deletions

View File

@@ -0,0 +1,68 @@
# Functioneel Ontwerp (FO) - Cortex Use Case: No Show Afhandeling
**Project:** Cortex Intent System (Mini-EPD Prototype)
**Focus:** Casus 2 (Journaliseren Consult - No Show)
**Datum:** Vandaag
**Link:** [PRD - Casus No Show](./prd-cortex-casus-noshow.md)
---
## 1. Gedetailleerde User Flow (Stap-voor-stap)
De interactie verloopt volledig conversationeel via het Cortex Chat venster en de stateful UI (Artifacts).
* **Stap 1: Registratie**
* **User:** Opent (of is in) het dossier van de patiënt en typt in de inputbalk: *"Patiënt is niet verschenen - no show."*
* **Systeem:** De NLP checkt intents en ziet `register_no_show`.
* **Stap 2: Context Analyse & Waarschuwing (Nudge)**
* **Systeem:** Achterhaalt de actieve afspraak. Rule engine check: is `is_billable` waar? Ja.
* **Cortex AI Bericht:** *"Ik zie een declarabel consult in de agenda. Volgens inkoopvoorwaarden mag deze afspraak NIET gedeclareerd worden. Wil je dat ik deze annuleer als 'No Show'?"*
* **UI Component:** Toont knoppen (Nudge Suggestions) eronder: `[Ja, annuleer]` | `[Nee, laat staan]`
* **Stap 3: Activering Brief Check**
* **User:** Klikt op `[Ja, annuleer]`.
* **Systeem:** Verstuurt signaal naar backend. Wijzigt afspraak status naar 'cancelled_no_show'. Systeem zoekt naar openstaande taken voor deze patiënt en vindt Concept Huisartsbrief.
* **Cortex AI Bericht:** *"Afspraak geannuleerd. Er staat nog een concept huisartsbrief klaar. Zal ik daar de No Show in verwerken?"*
* **UI Component:** Toont knoppen: `[Ja, pas brief aan]` | `[Nee]`
* **Stap 4: AI Generatie & Beoordeling (Artifact)**
* **User:** Klikt op `[Ja, pas brief aan]`.
* **Systeem:** Roept LLM API aan in de backend met de originele tekst + "Integreer dat de afspraak vandaag gepauzeerd is wegens no show."
* **Cortex AI Bericht:** *"Huisartsbrief is aangepast. Kijk of je hiermee akkoord bent."*
* **UI Component:** Triggert `openArtifact` en het rechtervenster met de bewerkte brief schuift in beeld.
* **Stap 5: Accordering**
* **User:** Leest de brief in het Artifact venster, eventuele handmatige typ-aanpassingen, en klikt op `[Akkoord & Verzendklaar]`.
* **Systeem:** Slaat document/state op (status naar `ready_for_dispatch`). Toont kleine succesmelding in chat.
---
## 2. Componenten Matrix (Hergebruik vs. Nieuw)
Hier is in kaart gebracht welke React/Next.js store- en UI componenten we nodig hebben en wat hun huidige status is in de codebase.
### 2.1 UI Componenten (Frontend)
| Component | Status | Toelichting | Locatie verwachting |
| :--- | :--- | :--- | :--- |
| **Cortex Chat Input** | ♻️ Hergebruik | De bestaande inputbalk / command center waar de "no show" in getypt wordt. Omdat intent-herkenning centraal op de tekst werkt, hebben we geen nieuwe velden nodig. | `components/cortex/chat/...` of `command-center/...` |
| **Cortex Chat Message** | ♻️ Hergebruik | De 'bubbels' waarin Cortex reageert. Deze renderen al responses. | `components/cortex/chat/...` |
| **Nudge Suggestion Card** | 🛠️ Aanpassen | Deze tonen de UI knoppen (zoals `[Ja, annuleren]`). We moeten in de component bevestigen dat we via een klik een onzichtbaar of command-response kunnen terug sturen naar de orchestrator voor Stap 3. | `components/cortex/chat/nudge-suggestion.tsx` (indien apart) |
| **Document Artifact Window**| ♻️ Hergebruik | We hebben de Artifact functionaliteit open staan in de store (`openArtifacts`). In dat artefact paneel kunnen we document content afbeelden. | `components/cortex/artifacts/...` |
| **Rich Text Editor** | ♻️ Hergebruik | Binnenin het Artifact tonen we de Huisartsbrief via de editor component, zodat de arts nog kan bewerken. | `components/cortex/rich-text-editor.tsx` |
| **Artifact Action Bar** | ✨ Nieuw | Een component (of extra 'footer') aan het Artifact component, met een knop `[Akkoord & Verzendklaar]`. Nu is het vaak readonly. | `components/cortex/artifacts/` of als los element. |
### 2.2 Logica & Backend Componenten
| Component / Module | Status | Toelichting | Huidige locatie |
| :--- | :--- | :--- | :--- |
| **Intent Classifier** | 🛠️ Aanpassen | Toevoegen van het `register_no_show` label in de mapping. | `lib/cortex/intent-labels.ts` & `lib/cortex/types.ts` |
| **Nudge Protocol Rules** | 🛠️ Aanpassen | Hier integreren we The "Declarabele Check" en "Brief Alert". We programmeren een regel af in `nudge.ts` die luistert naar de no_show. | `lib/cortex/nudge.ts` |
| **Cortex Store** | ♻️ Hergebruik | Functies zoals `addSuggestion` en `openArtifact` zijn klaar voor gebruik! Hier is geen redesign van state voor nodig. | `stores/cortex-store.ts` |
| **No-Show Orchestrator/API** | ✨ Nieuw | Specifieke API call en/of uitbreiding in AI logica die de database context opzoekt, LLM (via Langchain) aanstuurt en de brief herschrijft. | `app/api/cortex/...` |
---
## 3. Implementatie Fasering (FO -> Bouw)
1. **Interface Prep:** `register_no_show` in alle TypeScript Types & configuraties toevoegen. De Nudge Rule definiëren (*Fase 1 is statisch zonder database checks om UI op te pikken*).
2. **Acties (Nudges):** Knoppen reageren: we zorgen dat het klikken op de Chat Suggestie door praat met de store, zodat het volgende venster / bericht ('Zal ik conceptbrief openen?') getriggerd kan worden.
3. **Artifact Opening:** `rich-text-editor.tsx` integreren in een Artifact layout, openen doormiddel van `openArtifact`. Knoppen 'Akkoord' toevoegen (console logs voorlopig).
4. **Backend (API & DB):** Bouw van server-side checks. Echt data mocken en een route voor de LLM brief-rescript uitschrijven.