Files
triqura-ecd/docs/swift/haalbaarheidsanalyse-v3.md
2025-12-27 13:17:00 +01:00

14 KiB

📊 Haalbaarheidsanalyse: Swift Medical Scribe v3.0

Datum: 27-12-2024
Document: fo-swift-medical-scribe-v3.md
Auteur: AI Assistant


Executive Summary

Het v3.0 redesign van Swift naar een medical scribe chatbot interface is haalbaar, maar vereist significante architecturale wijzigingen. De bestaande foundation (Command Center, blocks, intent classification) kan worden hergebruikt, maar de conversatie-laag en split-screen layout zijn nieuw.

Kernbevindingen:

  • Sterke foundation: Bestaande blocks, intent API, en voice input kunnen worden hergebruikt
  • ⚠️ Grote wijzigingen: Conversatie-interface, chat API, en split-screen layout zijn nieuw
  • AI-infrastructuur: Streaming chat API bestaat al (docs-chat), kan worden aangepast
  • ⚠️ Complexiteit: Conversatiegeschiedenis en context management vereisen nieuwe state management

Geschatte effort: 6-8 weken (1 developer, full-time)


1. Inventarisatie Bestaande Componenten

1.1 Wat bestaat al en kan worden hergebruikt

Component Status Locatie Hergebruik
Command Center Done components/swift/command-center/ ⚠️ Layout wijzigen naar split-screen
Context Bar Done components/swift/command-center/context-bar.tsx Direct hergebruikbaar
Blocks (Artifacts) Done components/swift/blocks/ Direct herbruikbaar
Intent Classification Done /api/intent/classify Herbruikbaar, maar moet worden uitgebreid
Voice Input Done lib/swift/use-swift-voice.ts Direct herbruikbaar
Swift Store Done stores/swift-store.ts ⚠️ Uitbreiden met chat state
Overdracht API Done /api/overdracht/generate Bestaat, maar AI-filtering voor psychiater moet worden toegevoegd
Streaming Chat API Bestaat /api/docs/chat Pattern kan worden gekopieerd

1.2 🆕 Wat nieuw moet worden gebouwd

Component Complexiteit Geschatte Effort
Chat Panel Medium 1 week
Chat Input (conversational) Low 3 dagen
Chat API (/api/swift/chat) High 1.5 week
Artifact Area (split-screen) Medium 1 week
Chat Message Components Low 3 dagen
Conversation History Management Medium 1 week
AI-filtering voor psychiater Medium 1 week
Linked Evidence UI Low 3 dagen

Totaal nieuwe componenten: ~6-7 weken


2. Gedetailleerde Analyse per Sectie

2.1 Command Center → Split-Screen Layout

Huidige situatie:

  • 4-zone layout: Context Bar | Canvas Area | Recent Strip | Command Input
  • Blocks verschijnen in Canvas Area (centered, full-width)

Vereiste wijziging:

  • Split-screen: Chat Panel (40%) links, Artifact Area (60%) rechts
  • Recent Strip kan worden verwijderd of geïntegreerd in chat

Haalbaarheid: Goed

  • Layout wijziging is relatief eenvoudig met CSS Grid/Flexbox
  • Bestaande blocks blijven werken, alleen positioning wijzigt
  • Effort: 3-5 dagen

Risico's:

  • Responsive design voor mobile/tablet vereist toggle tussen chat en artifact
  • Keyboard shortcuts moeten worden aangepast

2.2 Chat Panel & Conversatie

Huidige situatie:

  • Geen chat interface
  • Command Input stuurt direct naar intent classification

Vereiste wijziging:

  • Nieuwe Chat Panel component met message bubbles
  • Conversatiegeschiedenis (max 100 messages)
  • Streaming responses (zoals docs-chat)

Haalbaarheid: Goed

  • Pattern bestaat al in components/docs-chat/
  • use-docs-chat.ts hook kan worden aangepast voor Swift
  • Effort: 1 week

Risico's:

  • Performance bij lange conversaties (pagination nodig)
  • State management voor chat history (Zustand store uitbreiden)

2.3 Medical Scribe Chat API

Huidige situatie:

  • /api/intent/classify retourneert alleen intent + entities
  • Geen conversatie, geen streaming

Vereiste wijziging:

  • Nieuwe /api/swift/chat endpoint
  • Streaming responses (SSE)
  • Conversatiegeschiedenis als input
  • Action objects in response (intent + entities + artifact prefill)

Haalbaarheid: ⚠️ Middelmatig

  • Pattern bestaat in /api/docs/chat (streaming met Claude)
  • Moet worden uitgebreid met:
    • Intent detection tijdens conversatie
    • Action object generation
    • Context management (activePatient, shift, recentActions)
  • Effort: 1.5 week

Risico's:

  • AI prompt engineering voor medical scribe persona
  • Performance bij hoge load (rate limiting nodig)
  • Kosten (Claude API calls per message)

Aanbeveling:

// Hybrid approach: local intent first, AI voor conversatie
1. Local pattern matching (<50ms)  direct action
2. Als geen match  AI chat API met conversatie context
3. AI detecteert intent + genereert response + action object

2.4 Intent Engine (Hybrid)

Huidige situatie:

  • Two-tier: local patterns → AI fallback
  • Werkt goed voor directe commando's

Vereiste wijziging:

  • Local patterns blijven voor snelle acties
  • AI chat API voor conversatie + follow-up vragen
  • Confidence thresholds voor artifact opening

Haalbaarheid: Goed

  • Bestaande intent classifier blijft werken
  • Chat API gebruikt AI voor conversatie + intent detection
  • Effort: 3 dagen (integratie)

2.5 Artifact Area (Split-Screen)

Huidige situatie:

  • Blocks verschijnen centered in Canvas Area
  • Eén block tegelijk

Vereiste wijziging:

  • Artifacts rechts (60% width)
  • Meerdere artifacts mogelijk (tabs, max 3)
  • Slide-in animatie van rechts

Haalbaarheid: Goed

  • Bestaande blocks blijven werken
  • Nieuwe wrapper component met tabs
  • Effort: 1 week

Risico's:

  • State management voor meerdere open artifacts
  • Tab switching UX

2.6 AI-Filtering voor Psychiater

Huidige situatie:

  • /api/overdracht/generate genereert samenvatting voor alle notities
  • Geen filtering op behandelrelevantie

Vereiste wijziging:

  • AI-filtering: alleen behandelrelevante notities
  • Linked evidence: elke zin linkt naar bronnotitie
  • UI: "Behandelrelevant" vs "Geen bijzonderheden" secties

Haalbaarheid: ⚠️ Middelmatig

  • AI prompt moet worden uitgebreid met filtering criteria
  • Linked evidence vereist tracking van bronnotities per zin
  • Effort: 1 week

Risico's:

  • AI filtering accuracy (false negatives = belangrijke info gemist)
  • Linked evidence parsing (welke zin komt van welke notitie?)

Aanbeveling:

  • Start met simpele keyword-based filtering als fallback
  • AI filtering als primary, met optie om "alles te tonen"

2.7 Store Uitbreiding

Huidige situatie:

interface SwiftStore {
  activePatient: Patient | null;
  activeBlock: BlockType | null;
  prefillData: BlockPrefillData;
  // ... geen chat state
}

Vereiste wijziging:

interface SwiftStore {
  // Bestaand
  activePatient: Patient | null;
  activeBlock: BlockType | null;
  
  // Nieuw: Chat state
  chatMessages: ChatMessage[];
  isStreaming: boolean;
  pendingAction: Action | null;
  
  // Nieuw: Artifact state
  openArtifacts: Artifact[];  // Max 3
  activeArtifactId: string | null;
}

Haalbaarheid: Goed

  • Zustand store is makkelijk uit te breiden
  • Effort: 2 dagen

3. Technische Risico's & Uitdagingen

3.1 🔴 Hoge Risico's

Risico Impact Mitigatie
AI Prompt Engineering High Medical scribe persona moet natuurlijk klinken, maar ook betrouwbaar zijn. Iteratief testen met echte gebruikers.
Performance bij lange conversaties Medium Pagination voor chat history, max 100 messages in view. Virtual scrolling overwegen.
AI Kosten Medium Rate limiting, caching van responses waar mogelijk. Local patterns gebruiken voor snelle acties.
State Management Complexiteit Medium Duidelijke scheiding tussen chat state en artifact state. UseReducer overwegen voor complexe state.

3.2 🟡 Middelmatige Risico's

Risico Impact Mitigatie
Responsive Design Medium Mobile: toggle tussen chat en artifact. Tablet: 45/55 split.
Linked Evidence Parsing Medium AI moet structured output geven met bronverwijzingen per zin. Fallback: keyword matching.
Conversatie Context Verlies Low Context manager bewaart actieve patiënt, shift, recente acties. Max 20 messages in API call.

3.3 🟢 Lage Risico's

Risico Impact Mitigatie
Block Migratie Low Bestaande blocks blijven werken, alleen wrapper wijzigt.
Voice Input Low Bestaande implementatie blijft werken.

4. Migratie Strategie

4.1 Fase 1: Foundation (Week 1-2)

  • Split-screen layout implementeren
  • Chat Panel component bouwen
  • Store uitbreiden met chat state
  • Basis chat API endpoint

Deliverable: Werkende split-screen met chat (zonder AI)

4.2 Fase 2: Chat API & Conversatie (Week 3-4)

  • Medical scribe chat API implementeren
  • Streaming responses
  • Intent detection in conversatie
  • Action object generation

Deliverable: Werkende conversatie met artifact opening

4.3 Fase 3: Artifact Area (Week 5)

  • Artifact Area component met tabs
  • Meerdere artifacts ondersteuning
  • Slide-in animaties

Deliverable: Meerdere artifacts tegelijk mogelijk

4.4 Fase 4: AI-Filtering & Polish (Week 6-7)

  • AI-filtering voor psychiater overdracht
  • Linked evidence UI
  • Error handling & edge cases
  • Performance optimalisatie

Deliverable: Volledige v3.0 functionaliteit

4.5 Fase 5: Testing & Refinement (Week 8)

  • User testing
  • Bug fixes
  • Performance tuning
  • Documentatie

Deliverable: Production-ready v3.0


5. Aanbevelingen

5.1 Doen

  1. Hergebruik bestaande patterns

    • Kopieer use-docs-chat.ts hook als basis voor Swift chat
    • Hergebruik streaming pattern van /api/docs/chat
  2. Incrementele migratie

    • Behoud oude Command Center tijdens ontwikkeling
    • Feature flag voor nieuwe interface
    • A/B testing mogelijkheid
  3. Local-first approach

    • Gebruik local patterns voor snelle acties (zoals nu)
    • AI alleen voor conversatie en complexe queries
  4. Performance monitoring

    • Track AI API response times
    • Monitor chat history size
    • Alert bij lange conversaties

5.2 ⚠️ Overwegen

  1. Hybrid Intent Detection

    • Local patterns voor P1 intents (dagnotitie, zoeken)
    • AI chat voor P2 intents en follow-up vragen
  2. Conversation Context Window

    • Max 20 messages in API call (zoals gespecificeerd)
    • Summarization voor oudere messages
  3. Artifact Persistence

    • Sla open artifacts op in localStorage
    • Herstel bij page reload

5.3 Niet Doen (YAGNI)

  1. Geen volledige rewrite

    • Bestaande blocks blijven werken
    • Alleen wrapper en layout wijzigen
  2. Geen nieuwe voice engine

    • Bestaande Deepgram implementatie is voldoende
  3. Geen real-time collaboration

    • Niet nodig voor MVP

6. Conclusie

Haalbaarheid: HAALBAAR

Het v3.0 redesign is haalbaar binnen 6-8 weken met 1 developer. De bestaande foundation is sterk en kan worden hergebruikt. De grootste uitdagingen zijn:

  1. Chat API ontwikkeling (1.5 week)
  2. AI prompt engineering (iteratief, doorlopend)
  3. State management complexiteit (manageable met Zustand)

Success Criteria

  • Split-screen layout werkt op desktop/tablet/mobile
  • Conversatie voelt natuurlijk (niet robotisch)
  • Artifacts openen binnen 2 seconden na intent detection
  • AI-filtering voor psychiater heeft >90% accuracy
  • Performance: <500ms voor local patterns, <3s voor AI responses

Volgende Stappen

  1. Go/No-Go beslissing op basis van deze analyse
  2. Bouwplan v3.0 opstellen met gedetailleerde stories
  3. Sprint planning voor Fase 1-5
  4. AI prompt engineering starten (parallel met development)

Bijlagen

A. Bestaande Componenten Overzicht

components/swift/
├── command-center/
│   ├── command-center.tsx       ✅ Herbruikbaar (layout wijzigen)
│   ├── context-bar.tsx          ✅ Direct herbruikbaar
│   ├── command-input.tsx        ⚠️ Aanpassen naar chat input
│   ├── canvas-area.tsx          ⚠️ Vervangen door artifact-area
│   └── recent-strip.tsx         ❓ Verwijderen of integreren
├── blocks/
│   ├── dagnotitie-block.tsx     ✅ Direct herbruikbaar
│   ├── zoeken-block.tsx         ✅ Direct herbruikbaar
│   ├── overdracht-block.tsx     ⚠️ Uitbreiden met AI-filtering
│   └── patient-context-card.tsx ✅ Direct herbruikbaar

B. Nieuwe Componenten Overzicht

components/swift/
├── chat/                        🆕 Nieuw
│   ├── chat-panel.tsx
│   ├── chat-message.tsx
│   ├── chat-action-link.tsx
│   └── streaming-indicator.tsx
├── artifacts/                   🆕 Nieuw
│   ├── artifact-container.tsx   (wrapper met tabs)
│   └── artifact-tab.tsx
└── shared/                      🆕 Nieuw
    ├── linked-evidence.tsx
    └── relevance-badge.tsx

C. API Routes Overzicht

app/api/
├── swift/                       🆕 Nieuw
│   └── chat/
│       └── route.ts             (medical scribe chatbot)
├── intent/
│   └── classify/                ✅ Bestaat (herbruikbaar)
└── overdracht/
    └── generate/                ✅ Bestaat (uitbreiden met filtering)

Einde analyse