# 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.
