docs: add architecture and intake intent documentation
- Add architecture overview, implementation plan, and intent overview - Add intake intent process specs (gap analyse, bouwplan, testplan) - Add swift architecture specs and visualization prompts - Remove obsolete aispeedrun-manifesto template Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
627
docs/swift/architectuur-visual-spec.json
Normal file
627
docs/swift/architectuur-visual-spec.json
Normal file
@@ -0,0 +1,627 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Intent-Driven EPD - Architectuur Visual",
|
||||
"version": "1.0",
|
||||
"created": "2025-01-05",
|
||||
"purpose": "Conceptuele architectuurplaat voor LinkedIn post en presentaties",
|
||||
"target_audience": ["C-level", "Zorgprofessionals", "ICT-managers"],
|
||||
"language": "Nederlands",
|
||||
"tagline": "Het systeem begrijpt wat je wilt, niet alleen wat je typt"
|
||||
},
|
||||
"format": {
|
||||
"dimensions": {
|
||||
"width": 1200,
|
||||
"height": 1500,
|
||||
"unit": "px"
|
||||
},
|
||||
"aspect_ratio": "4:5",
|
||||
"export_formats": ["PNG", "SVG", "PDF"],
|
||||
"linkedin_optimized": true
|
||||
},
|
||||
"brand": {
|
||||
"colors": {
|
||||
"primary": {
|
||||
"teal_700": "#0F766E",
|
||||
"teal_600": "#0D9488",
|
||||
"teal_50": "#F0FDFA"
|
||||
},
|
||||
"accent": {
|
||||
"amber_500": "#F59E0B",
|
||||
"amber_50": "#FFFBEB"
|
||||
},
|
||||
"success": {
|
||||
"green_600": "#16A34A",
|
||||
"green_50": "#ECFDF5"
|
||||
},
|
||||
"neutral": {
|
||||
"slate_900": "#0F172A",
|
||||
"slate_600": "#475569",
|
||||
"slate_400": "#94A3B8",
|
||||
"slate_200": "#E2E8F0",
|
||||
"slate_50": "#F8FAFC",
|
||||
"white": "#FFFFFF"
|
||||
}
|
||||
},
|
||||
"typography": {
|
||||
"font_family": "Inter, system-ui, sans-serif",
|
||||
"sizes": {
|
||||
"title": "32px",
|
||||
"subtitle": "18px",
|
||||
"section_header": "20px",
|
||||
"body": "14px",
|
||||
"caption": "12px",
|
||||
"label": "11px"
|
||||
},
|
||||
"weights": {
|
||||
"bold": 700,
|
||||
"semibold": 600,
|
||||
"medium": 500,
|
||||
"regular": 400
|
||||
}
|
||||
},
|
||||
"spacing": {
|
||||
"xs": 4,
|
||||
"sm": 8,
|
||||
"md": 16,
|
||||
"lg": 24,
|
||||
"xl": 32,
|
||||
"xxl": 48
|
||||
},
|
||||
"border_radius": {
|
||||
"sm": 4,
|
||||
"md": 8,
|
||||
"lg": 12,
|
||||
"xl": 16
|
||||
},
|
||||
"shadows": {
|
||||
"sm": "0 1px 2px rgba(15,23,42,0.06)",
|
||||
"md": "0 4px 12px rgba(15,23,42,0.08)",
|
||||
"lg": "0 8px 24px rgba(15,23,42,0.12)"
|
||||
}
|
||||
},
|
||||
"layout": {
|
||||
"structure": "vertical_flow",
|
||||
"sections": [
|
||||
"header",
|
||||
"user_input",
|
||||
"intent_layer",
|
||||
"jit_layer",
|
||||
"action_divider",
|
||||
"nudge_layer",
|
||||
"footer_summary"
|
||||
],
|
||||
"padding": {
|
||||
"outer": 40,
|
||||
"section_gap": 24
|
||||
}
|
||||
},
|
||||
"sections": {
|
||||
"header": {
|
||||
"height": 100,
|
||||
"background": "#FFFFFF",
|
||||
"content": {
|
||||
"title": {
|
||||
"text": "INTENT-DRIVEN EPD",
|
||||
"style": {
|
||||
"font_size": "32px",
|
||||
"font_weight": 700,
|
||||
"color": "#0F172A",
|
||||
"letter_spacing": "0.05em",
|
||||
"text_align": "center"
|
||||
}
|
||||
},
|
||||
"subtitle": {
|
||||
"text": "Het systeem begrijpt wat je wilt, niet alleen wat je typt",
|
||||
"style": {
|
||||
"font_size": "16px",
|
||||
"font_weight": 400,
|
||||
"color": "#475569",
|
||||
"text_align": "center",
|
||||
"margin_top": 8
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"user_input": {
|
||||
"height": 80,
|
||||
"content": {
|
||||
"icon": {
|
||||
"name": "user-round",
|
||||
"source": "lucide",
|
||||
"size": 32,
|
||||
"color": "#0F766E"
|
||||
},
|
||||
"label": {
|
||||
"text": "ZORGVERLENER",
|
||||
"style": {
|
||||
"font_size": "11px",
|
||||
"font_weight": 600,
|
||||
"color": "#475569",
|
||||
"letter_spacing": "0.1em"
|
||||
}
|
||||
},
|
||||
"speech_bubble": {
|
||||
"text": "\"Notitie jan medicatie\"",
|
||||
"style": {
|
||||
"font_size": "16px",
|
||||
"font_weight": 500,
|
||||
"color": "#0F172A",
|
||||
"font_style": "italic",
|
||||
"background": "#F8FAFC",
|
||||
"border": "1px solid #E2E8F0",
|
||||
"border_radius": 8,
|
||||
"padding": "12px 20px"
|
||||
}
|
||||
}
|
||||
},
|
||||
"connector": {
|
||||
"type": "arrow_down",
|
||||
"color": "#CBD5E1",
|
||||
"length": 32
|
||||
}
|
||||
},
|
||||
"intent_layer": {
|
||||
"height": 280,
|
||||
"box": {
|
||||
"background": "#F0FDFA",
|
||||
"border": "2px solid #0F766E",
|
||||
"border_radius": 16,
|
||||
"padding": 24
|
||||
},
|
||||
"header": {
|
||||
"badge": {
|
||||
"text": "INTENT",
|
||||
"style": {
|
||||
"font_size": "14px",
|
||||
"font_weight": 700,
|
||||
"color": "#FFFFFF",
|
||||
"background": "#0F766E",
|
||||
"padding": "6px 16px",
|
||||
"border_radius": 20,
|
||||
"letter_spacing": "0.1em"
|
||||
}
|
||||
}
|
||||
},
|
||||
"content": {
|
||||
"description": {
|
||||
"text": "Natuurlijke taal → Gestructureerde intentie",
|
||||
"style": {
|
||||
"font_size": "14px",
|
||||
"font_weight": 500,
|
||||
"color": "#0F766E"
|
||||
}
|
||||
},
|
||||
"transformation": {
|
||||
"input": {
|
||||
"text": "\"Notitie jan medicatie\"",
|
||||
"style": {
|
||||
"font_size": "15px",
|
||||
"color": "#475569",
|
||||
"font_style": "italic"
|
||||
}
|
||||
},
|
||||
"arrow": {
|
||||
"icon": "arrow-down",
|
||||
"color": "#0D9488",
|
||||
"size": 20
|
||||
},
|
||||
"output": {
|
||||
"boxes": [
|
||||
{
|
||||
"label": "WIE",
|
||||
"value": "Jan",
|
||||
"color": "#0F766E",
|
||||
"background": "#FFFFFF"
|
||||
},
|
||||
{
|
||||
"label": "WAT",
|
||||
"value": "Notitie",
|
||||
"color": "#0F766E",
|
||||
"background": "#FFFFFF"
|
||||
},
|
||||
{
|
||||
"label": "CONTEXT",
|
||||
"value": "Medicatie",
|
||||
"color": "#0F766E",
|
||||
"background": "#FFFFFF"
|
||||
}
|
||||
],
|
||||
"box_style": {
|
||||
"width": 100,
|
||||
"height": 60,
|
||||
"border_radius": 8,
|
||||
"border": "1px solid #0D9488",
|
||||
"text_align": "center",
|
||||
"label_size": "10px",
|
||||
"value_size": "16px",
|
||||
"value_weight": 600
|
||||
}
|
||||
}
|
||||
},
|
||||
"multi_intent_example": {
|
||||
"text": "Complexe intenties: \"Zeg jan af en maak notitie griep\" → 2 acties, automatisch gesplitst",
|
||||
"style": {
|
||||
"font_size": "12px",
|
||||
"color": "#475569",
|
||||
"margin_top": 16,
|
||||
"padding": "8px 12px",
|
||||
"background": "#FFFFFF",
|
||||
"border_radius": 6
|
||||
}
|
||||
}
|
||||
},
|
||||
"connector": {
|
||||
"type": "arrow_down",
|
||||
"color": "#CBD5E1",
|
||||
"length": 24
|
||||
}
|
||||
},
|
||||
"jit_layer": {
|
||||
"height": 320,
|
||||
"box": {
|
||||
"background": "#FFFBEB",
|
||||
"border": "2px solid #F59E0B",
|
||||
"border_radius": 16,
|
||||
"padding": 24
|
||||
},
|
||||
"header": {
|
||||
"badge": {
|
||||
"text": "JIT-INTERFACE",
|
||||
"style": {
|
||||
"font_size": "14px",
|
||||
"font_weight": 700,
|
||||
"color": "#FFFFFF",
|
||||
"background": "#F59E0B",
|
||||
"padding": "6px 16px",
|
||||
"border_radius": 20,
|
||||
"letter_spacing": "0.05em"
|
||||
}
|
||||
},
|
||||
"subtitle": {
|
||||
"text": "Just-In-Time Blocks",
|
||||
"style": {
|
||||
"font_size": "12px",
|
||||
"color": "#92400E",
|
||||
"margin_left": 8
|
||||
}
|
||||
}
|
||||
},
|
||||
"content": {
|
||||
"description": {
|
||||
"text": "Het juiste scherm verschijnt. Vooringevuld. Klaar voor actie.",
|
||||
"style": {
|
||||
"font_size": "14px",
|
||||
"font_weight": 500,
|
||||
"color": "#92400E"
|
||||
}
|
||||
},
|
||||
"block_preview": {
|
||||
"title": {
|
||||
"icon": "file-text",
|
||||
"text": "DAGNOTITIE",
|
||||
"style": {
|
||||
"font_size": "12px",
|
||||
"font_weight": 600,
|
||||
"color": "#475569"
|
||||
}
|
||||
},
|
||||
"fields": [
|
||||
{
|
||||
"label": "Patient",
|
||||
"value": "Jan",
|
||||
"status": "prefilled",
|
||||
"checkmark": true
|
||||
},
|
||||
{
|
||||
"label": "Categorie",
|
||||
"value": "Medicatie",
|
||||
"status": "prefilled",
|
||||
"checkmark": true
|
||||
},
|
||||
{
|
||||
"label": "Inhoud",
|
||||
"value": "",
|
||||
"status": "cursor",
|
||||
"placeholder": "cursor knippert"
|
||||
}
|
||||
],
|
||||
"style": {
|
||||
"background": "#FFFFFF",
|
||||
"border": "1px solid #E2E8F0",
|
||||
"border_radius": 12,
|
||||
"padding": 16,
|
||||
"shadow": "0 4px 12px rgba(15,23,42,0.08)",
|
||||
"field_height": 36,
|
||||
"checkmark_color": "#16A34A"
|
||||
}
|
||||
},
|
||||
"other_blocks": {
|
||||
"label": "Andere blocks (laden wanneer nodig):",
|
||||
"blocks": [
|
||||
{
|
||||
"icon": "search",
|
||||
"label": "Zoeken"
|
||||
},
|
||||
{
|
||||
"icon": "calendar",
|
||||
"label": "Agenda"
|
||||
},
|
||||
{
|
||||
"icon": "clipboard-list",
|
||||
"label": "Overdracht"
|
||||
},
|
||||
{
|
||||
"icon": "layout-dashboard",
|
||||
"label": "Dashboard"
|
||||
}
|
||||
],
|
||||
"style": {
|
||||
"icon_size": 16,
|
||||
"background": "#FFFFFF",
|
||||
"border": "1px solid #E2E8F0",
|
||||
"border_radius": 8,
|
||||
"padding": "8px 12px",
|
||||
"gap": 8,
|
||||
"color": "#475569",
|
||||
"font_size": "11px"
|
||||
}
|
||||
}
|
||||
},
|
||||
"connector": {
|
||||
"type": "action_button",
|
||||
"content": {
|
||||
"text": "OPSLAAN",
|
||||
"icon": "check",
|
||||
"style": {
|
||||
"background": "#0F766E",
|
||||
"color": "#FFFFFF",
|
||||
"font_size": "12px",
|
||||
"font_weight": 600,
|
||||
"padding": "8px 24px",
|
||||
"border_radius": 6
|
||||
}
|
||||
},
|
||||
"arrow_after": {
|
||||
"type": "arrow_down",
|
||||
"color": "#CBD5E1",
|
||||
"length": 24
|
||||
}
|
||||
}
|
||||
},
|
||||
"nudge_layer": {
|
||||
"height": 260,
|
||||
"box": {
|
||||
"background": "#ECFDF5",
|
||||
"border": "2px solid #16A34A",
|
||||
"border_radius": 16,
|
||||
"padding": 24
|
||||
},
|
||||
"header": {
|
||||
"badge": {
|
||||
"text": "NUDGE",
|
||||
"style": {
|
||||
"font_size": "14px",
|
||||
"font_weight": 700,
|
||||
"color": "#FFFFFF",
|
||||
"background": "#16A34A",
|
||||
"padding": "6px 16px",
|
||||
"border_radius": 20,
|
||||
"letter_spacing": "0.1em"
|
||||
}
|
||||
},
|
||||
"subtitle": {
|
||||
"text": "Proactieve Suggesties",
|
||||
"style": {
|
||||
"font_size": "12px",
|
||||
"color": "#166534",
|
||||
"margin_left": 8
|
||||
}
|
||||
}
|
||||
},
|
||||
"content": {
|
||||
"description": {
|
||||
"text": "Het systeem denkt vooruit. Op basis van protocollen.",
|
||||
"style": {
|
||||
"font_size": "14px",
|
||||
"font_weight": 500,
|
||||
"color": "#166534"
|
||||
}
|
||||
},
|
||||
"nudge_card": {
|
||||
"icon": {
|
||||
"name": "lightbulb",
|
||||
"color": "#F59E0B",
|
||||
"size": 20
|
||||
},
|
||||
"title": "SUGGESTIE",
|
||||
"message": {
|
||||
"line1": "Medicatie gewijzigd voor Jan.",
|
||||
"line2": "Evaluatie inplannen over 1 week?"
|
||||
},
|
||||
"source": {
|
||||
"icon": "book-open",
|
||||
"text": "Bron: Zorgstandaard"
|
||||
},
|
||||
"buttons": [
|
||||
{
|
||||
"text": "Ja, plannen",
|
||||
"style": "primary",
|
||||
"background": "#16A34A",
|
||||
"color": "#FFFFFF"
|
||||
},
|
||||
{
|
||||
"text": "Niet nu",
|
||||
"style": "secondary",
|
||||
"background": "transparent",
|
||||
"color": "#475569",
|
||||
"border": "1px solid #E2E8F0"
|
||||
}
|
||||
],
|
||||
"style": {
|
||||
"background": "#FFFFFF",
|
||||
"border": "1px solid #E2E8F0",
|
||||
"border_radius": 12,
|
||||
"padding": 16,
|
||||
"shadow": "0 4px 12px rgba(15,23,42,0.08)"
|
||||
}
|
||||
},
|
||||
"footnote": {
|
||||
"text": "Niet dwingend. Wel onderbouwd. Jij beslist.",
|
||||
"style": {
|
||||
"font_size": "12px",
|
||||
"color": "#166534",
|
||||
"font_style": "italic",
|
||||
"margin_top": 12
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"footer_summary": {
|
||||
"height": 140,
|
||||
"background": "#FFFFFF",
|
||||
"border_top": "1px solid #E2E8F0",
|
||||
"padding_top": 24,
|
||||
"content": {
|
||||
"columns": [
|
||||
{
|
||||
"icon": "target",
|
||||
"icon_color": "#0F766E",
|
||||
"title": "INTENT",
|
||||
"description": "Begrijpt wat je wilt",
|
||||
"color": "#0F766E"
|
||||
},
|
||||
{
|
||||
"icon": "layout",
|
||||
"icon_color": "#F59E0B",
|
||||
"title": "JIT-INTERFACE",
|
||||
"description": "Toont wat je nodig hebt",
|
||||
"color": "#F59E0B"
|
||||
},
|
||||
{
|
||||
"icon": "lightbulb",
|
||||
"icon_color": "#16A34A",
|
||||
"title": "NUDGE",
|
||||
"description": "Suggereert wat je kan vergeten",
|
||||
"color": "#16A34A"
|
||||
}
|
||||
],
|
||||
"column_style": {
|
||||
"width": 180,
|
||||
"text_align": "center",
|
||||
"icon_size": 24,
|
||||
"title_size": "13px",
|
||||
"title_weight": 700,
|
||||
"description_size": "12px",
|
||||
"description_color": "#475569"
|
||||
},
|
||||
"tagline": {
|
||||
"text": "Jij zorgt. Het EPD regelt de rest.",
|
||||
"style": {
|
||||
"font_size": "16px",
|
||||
"font_weight": 600,
|
||||
"color": "#0F172A",
|
||||
"text_align": "center",
|
||||
"margin_top": 24
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"icons": {
|
||||
"source": "lucide-react",
|
||||
"mapping": {
|
||||
"user": "user-round",
|
||||
"note": "file-text",
|
||||
"search": "search",
|
||||
"calendar": "calendar",
|
||||
"clipboard": "clipboard-list",
|
||||
"dashboard": "layout-dashboard",
|
||||
"lightbulb": "lightbulb",
|
||||
"book": "book-open",
|
||||
"check": "check",
|
||||
"arrow_down": "arrow-down",
|
||||
"target": "target",
|
||||
"layout": "layout"
|
||||
}
|
||||
},
|
||||
"connectors": {
|
||||
"style": {
|
||||
"stroke_width": 2,
|
||||
"stroke_color": "#CBD5E1",
|
||||
"arrow_head_size": 8
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"from": "user_input",
|
||||
"to": "intent_layer",
|
||||
"type": "arrow_down"
|
||||
},
|
||||
{
|
||||
"from": "intent_layer",
|
||||
"to": "jit_layer",
|
||||
"type": "arrow_down"
|
||||
},
|
||||
{
|
||||
"from": "jit_layer",
|
||||
"to": "nudge_layer",
|
||||
"type": "button_then_arrow",
|
||||
"button_label": "OPSLAAN"
|
||||
}
|
||||
]
|
||||
},
|
||||
"accessibility": {
|
||||
"alt_text": "Architectuurdiagram van het Intent-Driven EPD Cortex. Toont drie lagen: 1) Intent - natuurlijke taal wordt omgezet naar gestructureerde intentie met wie, wat en context; 2) JIT-Interface - het juiste invoerscherm verschijnt automatisch met vooringevulde velden; 3) Nudge - proactieve suggesties op basis van zorgprotocollen. Tagline: Jij zorgt, het EPD regelt de rest.",
|
||||
"contrast_ratio": {
|
||||
"text_on_white": "7:1 minimum",
|
||||
"text_on_colored": "4.5:1 minimum"
|
||||
}
|
||||
},
|
||||
"export_variants": {
|
||||
"linkedin_post": {
|
||||
"dimensions": "1200x1500",
|
||||
"format": "PNG",
|
||||
"quality": "high",
|
||||
"notes": "Optimaal voor LinkedIn feed"
|
||||
},
|
||||
"linkedin_article": {
|
||||
"dimensions": "1920x1080",
|
||||
"format": "PNG",
|
||||
"notes": "16:9 voor artikel header"
|
||||
},
|
||||
"presentation": {
|
||||
"dimensions": "1920x1080",
|
||||
"format": "SVG",
|
||||
"notes": "Vector voor schaling"
|
||||
},
|
||||
"print_a4": {
|
||||
"dimensions": "210x297mm",
|
||||
"format": "PDF",
|
||||
"dpi": 300,
|
||||
"notes": "Voor handouts"
|
||||
}
|
||||
},
|
||||
"design_tools": {
|
||||
"figma": {
|
||||
"setup": [
|
||||
"Create frame 1200x1500px",
|
||||
"Set background #FFFFFF",
|
||||
"Use Auto Layout for sections",
|
||||
"Import Lucide icons as components"
|
||||
],
|
||||
"components_to_create": [
|
||||
"Layer Box (variant: intent/jit/nudge)",
|
||||
"Badge (variant: teal/amber/green)",
|
||||
"Field Row (variant: prefilled/empty)",
|
||||
"Block Thumbnail",
|
||||
"Summary Column"
|
||||
]
|
||||
},
|
||||
"canva": {
|
||||
"setup": [
|
||||
"Custom size 1200x1500",
|
||||
"Use brand colors",
|
||||
"Elements > Lines for connectors"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
471
docs/swift/architectuur.md
Normal file
471
docs/swift/architectuur.md
Normal file
@@ -0,0 +1,471 @@
|
||||
# Mini-EPD Prototype - Architectuur
|
||||
|
||||
## Executive Summary (C-Level)
|
||||
|
||||
**Mini-EPD** is een moderne, AI-gestuurde elektronische patiëntendossier (EPD) oplossing voor de Nederlandse zorgsector. Het systeem combineert spraakherkenning met intelligente intentieherkenning, waardoor zorgverleners hands-free kunnen rapporteren en navigeren.
|
||||
|
||||
### Kernwaarden
|
||||
|
||||
| Aspect | Waarde |
|
||||
|--------|--------|
|
||||
| **Tijdsbesparing** | 70% van commando's verwerkt in <20ms door lokale AI |
|
||||
| **Gebruiksgemak** | Natuurlijke taal en spraak als primaire input |
|
||||
| **Compliance** | GDPR-vriendelijk met soft deletes en audit trail |
|
||||
| **Schaalbaarheid** | Serverless architectuur, horizontaal schaalbaar |
|
||||
| **Integratie** | FHIR-geïnspireerd datamodel voor interoperabiliteit |
|
||||
|
||||
### Strategische Voordelen
|
||||
|
||||
1. **Lagere administratielast** - Zorgverleners dicteren notities in natuurlijke taal; AI classificeert en structureert automatisch
|
||||
2. **Proactieve ondersteuning** - Systeem suggereert vervolgacties op basis van klinische protocollen
|
||||
3. **Snelle implementatie** - Cloud-native stack (Vercel + Supabase) zonder on-premise infrastructuur
|
||||
4. **Toekomstbestendig** - Modulaire opzet maakt toevoeging van nieuwe functionaliteit eenvoudig
|
||||
|
||||
### Risico's & Mitigatie
|
||||
|
||||
| Risico | Mitigatie |
|
||||
|--------|-----------|
|
||||
| AI-hallucinaties | Drie-lagen architectuur met confidence scoring; fallback naar menselijke verificatie |
|
||||
| Data privacy | Row Level Security op database niveau; geen PII in logs |
|
||||
| Vendor lock-in | Open standaarden (FHIR, PostgreSQL); migratiepaden beschikbaar |
|
||||
|
||||
---
|
||||
|
||||
## Technische Architectuur
|
||||
|
||||
### Tech Stack
|
||||
|
||||
| Component | Technologie | Motivatie |
|
||||
|-----------|-------------|-----------|
|
||||
| Frontend | Next.js 14 (App Router) | Server-side rendering, optimale SEO, moderne DX |
|
||||
| Database | Supabase (PostgreSQL) | Managed database met ingebouwde auth en RLS |
|
||||
| Auth | Supabase Auth + JWT | Industrie-standaard, SSR-compatibel |
|
||||
| AI Classification | Claude API (Anthropic) | State-of-the-art NLP voor Nederlands |
|
||||
| Speech-to-Text | Deepgram | Lage latency, hoge nauwkeurigheid |
|
||||
| State Management | Zustand | Lightweight, TypeScript-native |
|
||||
| Styling | Tailwind CSS + shadcn/ui | Consistente UI, snelle ontwikkeling |
|
||||
|
||||
---
|
||||
|
||||
### Cortex: Drie-Lagen AI Architectuur
|
||||
|
||||
Het hart van het systeem is **Cortex**, een intelligent command center dat natuurlijke taal omzet naar gestructureerde acties.
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ GEBRUIKER INPUT │
|
||||
│ "Maak een dagnotitie voor Jan Bakker" │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
↓
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ LAYER 1: REFLEX ARC │
|
||||
│ Latency: <20ms │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ • Regex-gebaseerde pattern matching │
|
||||
│ • Weighted confidence scoring │
|
||||
│ • Verwerkt 70%+ van alle commando's lokaal │
|
||||
│ • Escaleert bij: confidence <0.7, multi-intent, ambiguïteit │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
↓ (indien nodig)
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ LAYER 2: ORCHESTRATOR │
|
||||
│ Model: Claude 3.5 Haiku │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ • Multi-intent detectie ("annuleer afspraak en maak notitie") │
|
||||
│ • Pronoun resolutie met actieve patiënt context │
|
||||
│ • Relatieve tijd parsing ("morgen", "volgende week") │
|
||||
│ • Context-aware entity extraction │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
↓
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ LAYER 3: NUDGE │
|
||||
│ Proactieve Suggesties │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ • Post-actie aanbevelingen op basis van V&VN protocollen │
|
||||
│ • Voorbeeld: Na wondnotitie → suggestie voor controle-interval │
|
||||
│ • Niet-intrusief: toast notifications met dismiss optie │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
↓
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ UI ARTIFACT BLOCKS │
|
||||
│ DagnotatieBlock / ZoekenBlock / OverdrachtBlock │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Intent Types
|
||||
|
||||
| Intent | Beschrijving | Voorbeeld |
|
||||
|--------|--------------|-----------|
|
||||
| `dagnotitie` | Dagelijkse rapportage aanmaken | "Noteer dat mevrouw Jansen goed geslapen heeft" |
|
||||
| `zoeken` | Patiënt opzoeken | "Zoek Jan Bakker" |
|
||||
| `overdracht` | Handover bekijken | "Toon overdracht van gisteren" |
|
||||
| `agenda_query` | Agenda raadplegen | "Wat staat er vandaag gepland?" |
|
||||
| `create_appointment` | Afspraak inplannen | "Plan een intake voor morgen 14:00" |
|
||||
| `cancel_appointment` | Afspraak annuleren | "Annuleer de afspraak van vrijdag" |
|
||||
| `reschedule_appointment` | Afspraak verzetten | "Verzet de afspraak naar volgende week" |
|
||||
|
||||
---
|
||||
|
||||
### Directory Structuur
|
||||
|
||||
```
|
||||
mini-epd-prototype/
|
||||
├── app/ # Next.js App Router
|
||||
│ ├── api/ # Backend API Routes
|
||||
│ │ ├── cortex/ # AI Command Center
|
||||
│ │ │ ├── classify/ # Intent classificatie
|
||||
│ │ │ ├── chat/ # Streaming conversatie
|
||||
│ │ │ ├── patients/ # Patiënt context
|
||||
│ │ │ └── agenda/ # Agenda operaties
|
||||
│ │ ├── reports/ # Rapportage CRUD
|
||||
│ │ ├── overdracht/ # Handover + AI summaries
|
||||
│ │ ├── patients/ # Patiënt data
|
||||
│ │ ├── deepgram/ # Speech-to-text
|
||||
│ │ └── fhir/ # FHIR endpoints
|
||||
│ │
|
||||
│ ├── epd/ # EPD Modules (Protected)
|
||||
│ │ ├── dashboard/ # Cortex Command Center
|
||||
│ │ ├── verpleegrapportage/ # Nursing reports
|
||||
│ │ │ └── rapportage/ # Timeline invoer
|
||||
│ │ ├── patients/[id]/ # Patiënt dossier
|
||||
│ │ ├── agenda/ # Kalender (FullCalendar)
|
||||
│ │ └── clients/ # Cliëntenbeheer
|
||||
│ │
|
||||
│ └── auth/ # Authenticatie
|
||||
│ ├── login/
|
||||
│ └── reset-password/
|
||||
│
|
||||
├── lib/ # Shared Business Logic
|
||||
│ ├── cortex/ # Drie-lagen AI systeem
|
||||
│ │ ├── types.ts # Type definities
|
||||
│ │ ├── reflex-classifier.ts # Layer 1: Pattern matching
|
||||
│ │ ├── orchestrator.ts # Layer 2: Claude classificatie
|
||||
│ │ ├── nudge.ts # Layer 3: Suggesties
|
||||
│ │ ├── entity-extractor.ts # Entity extraction
|
||||
│ │ ├── date-time-parser.ts # Datum/tijd parsing
|
||||
│ │ └── hooks/ # React hooks
|
||||
│ │
|
||||
│ ├── auth/ # Auth utilities
|
||||
│ │ ├── server.ts # Server-side (API routes)
|
||||
│ │ └── client.ts # Client-side
|
||||
│ │
|
||||
│ ├── supabase/ # Database layer
|
||||
│ │ ├── database.types.ts # Auto-generated types
|
||||
│ │ ├── client.ts # Browser client
|
||||
│ │ └── server.ts # SSR client
|
||||
│ │
|
||||
│ └── types/ # Domain types
|
||||
│ ├── report.ts # Rapportage types
|
||||
│ └── overdracht.ts # Handover types
|
||||
│
|
||||
├── components/ # React Components
|
||||
│ ├── cortex/ # Cortex UI
|
||||
│ │ ├── command-center/ # Main container
|
||||
│ │ │ ├── command-center.tsx
|
||||
│ │ │ ├── command-input.tsx # Voice/text input
|
||||
│ │ │ ├── context-bar.tsx # Actieve patiënt
|
||||
│ │ │ ├── canvas-area.tsx # Artifact rendering
|
||||
│ │ │ └── offline-banner.tsx
|
||||
│ │ ├── blocks/ # Intent-specifieke UI
|
||||
│ │ │ ├── dagnotitie-block.tsx
|
||||
│ │ │ ├── zoeken-block.tsx
|
||||
│ │ │ └── overdracht-block.tsx
|
||||
│ │ └── chat/ # Chat componenten
|
||||
│ │
|
||||
│ └── ui/ # shadcn/ui (29 componenten)
|
||||
│ ├── button.tsx
|
||||
│ ├── dialog.tsx
|
||||
│ └── ...
|
||||
│
|
||||
├── stores/ # State Management
|
||||
│ └── cortex-store.ts # Zustand store
|
||||
│
|
||||
├── supabase/ # Database
|
||||
│ └── migrations/ # SQL migrations
|
||||
│
|
||||
└── docs/ # Documentatie
|
||||
└── swift/ # Cortex specificaties
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Data Model
|
||||
|
||||
#### Reports Table (Unified)
|
||||
|
||||
Alle rapportages worden opgeslagen in één tabel met type-discriminatie:
|
||||
|
||||
```sql
|
||||
CREATE TABLE reports (
|
||||
id UUID PRIMARY KEY,
|
||||
patient_id UUID REFERENCES patients(id),
|
||||
type report_type NOT NULL, -- enum
|
||||
content TEXT,
|
||||
structured_data JSONB, -- type-specifieke velden
|
||||
created_at TIMESTAMPTZ,
|
||||
created_by UUID REFERENCES auth.users(id),
|
||||
shift_date DATE, -- berekend: vóór 07:00 = vorige dag
|
||||
deleted_at TIMESTAMPTZ, -- soft delete
|
||||
ai_confidence FLOAT,
|
||||
ai_reasoning TEXT
|
||||
);
|
||||
```
|
||||
|
||||
**Report Types:**
|
||||
- `voortgang` - Voortgangsrapportage
|
||||
- `observatie` - Klinische observatie
|
||||
- `incident` - Incident melding
|
||||
- `medicatie` - Medicatie gerelateerd
|
||||
- `contact` - Contact met derden
|
||||
- `crisis` - Crisis interventie
|
||||
- `intake` - Intake notities
|
||||
- `behandeladvies` - Behandeladvies
|
||||
- `vrije_notitie` - Vrije tekst
|
||||
- `verpleegkundig` - Verpleegkundige notitie (met categorie)
|
||||
|
||||
**Verpleegkundig Categories:**
|
||||
- `medicatie`, `adl`, `gedrag`, `incident`, `observatie`
|
||||
|
||||
#### Shift Logic
|
||||
|
||||
Rapporten aangemaakt vóór 07:00 worden toegewezen aan de vorige dag (nachtdienst handover):
|
||||
|
||||
```typescript
|
||||
function calculateShiftDate(createdAt: Date): Date {
|
||||
const hour = createdAt.getHours();
|
||||
if (hour < 7) {
|
||||
return subDays(createdAt, 1);
|
||||
}
|
||||
return createdAt;
|
||||
}
|
||||
```
|
||||
|
||||
**Diensten:**
|
||||
| Dienst | Tijdvak |
|
||||
|--------|---------|
|
||||
| Nacht | 00:00 - 07:00 |
|
||||
| Ochtend | 07:00 - 12:00 |
|
||||
| Middag | 12:00 - 17:00 |
|
||||
| Avond | 17:00 - 24:00 |
|
||||
|
||||
---
|
||||
|
||||
### API Endpoints
|
||||
|
||||
#### Cortex APIs
|
||||
|
||||
| Method | Endpoint | Beschrijving |
|
||||
|--------|----------|--------------|
|
||||
| POST | `/api/cortex/classify` | Intent classificatie (Reflex + Orchestrator) |
|
||||
| POST | `/api/cortex/chat` | Streaming chat (SSE) |
|
||||
| GET | `/api/cortex/context` | Huidige gebruikerscontext |
|
||||
| GET | `/api/cortex/patients/search` | Patiënt zoeken voor context |
|
||||
| GET | `/api/cortex/agenda` | Dagagenda ophalen |
|
||||
| POST | `/api/cortex/agenda/create` | Afspraak aanmaken |
|
||||
| POST | `/api/cortex/agenda/cancel` | Afspraak annuleren |
|
||||
| POST | `/api/cortex/agenda/reschedule` | Afspraak verzetten |
|
||||
|
||||
#### Report APIs
|
||||
|
||||
| Method | Endpoint | Beschrijving |
|
||||
|--------|----------|--------------|
|
||||
| GET | `/api/reports` | Lijst rapporten (filters: type, datum, patiënt) |
|
||||
| POST | `/api/reports` | Rapport aanmaken |
|
||||
| GET | `/api/reports/[id]` | Enkel rapport ophalen |
|
||||
| PUT | `/api/reports/[id]` | Rapport bijwerken |
|
||||
| DELETE | `/api/reports/[id]` | Soft delete |
|
||||
|
||||
#### Overdracht APIs
|
||||
|
||||
| Method | Endpoint | Beschrijving |
|
||||
|--------|----------|--------------|
|
||||
| GET | `/api/overdracht/patients` | Patiënten voor handover |
|
||||
| GET | `/api/overdracht/[patientId]` | Handover data per patiënt |
|
||||
| POST | `/api/overdracht/generate` | AI-gegenereerde samenvatting |
|
||||
|
||||
---
|
||||
|
||||
### State Management
|
||||
|
||||
**Zustand Store** (`stores/cortex-store.ts`):
|
||||
|
||||
```typescript
|
||||
interface CortexStore {
|
||||
// Chat state
|
||||
messages: ChatMessage[];
|
||||
pendingAction: IntentAction | null;
|
||||
|
||||
// Context
|
||||
activePatient: Patient | null;
|
||||
currentShift: 'nacht' | 'ochtend' | 'middag' | 'avond';
|
||||
|
||||
// UI
|
||||
openArtifacts: ArtifactInstance[];
|
||||
suggestions: NudgeSuggestion[];
|
||||
patientSidebarOpen: boolean;
|
||||
|
||||
// Actions
|
||||
addMessage(msg: ChatMessage): void;
|
||||
setActivePatient(patient: Patient): void;
|
||||
openArtifact(artifact: ArtifactInstance): void;
|
||||
acceptSuggestion(id: string): void;
|
||||
dismissSuggestion(id: string): void;
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Security
|
||||
|
||||
#### Row Level Security (RLS)
|
||||
|
||||
Alle tabellen hebben RLS policies die data toegang beperken tot geautoriseerde gebruikers:
|
||||
|
||||
```sql
|
||||
-- Voorbeeld: users kunnen alleen hun eigen patiënten zien
|
||||
CREATE POLICY "Users can view assigned patients"
|
||||
ON patients FOR SELECT
|
||||
USING (auth.uid() IN (
|
||||
SELECT user_id FROM patient_assignments
|
||||
WHERE patient_id = patients.id
|
||||
));
|
||||
```
|
||||
|
||||
#### Authentication Flow
|
||||
|
||||
```
|
||||
1. Login via /auth/login
|
||||
2. Supabase Auth valideert credentials
|
||||
3. JWT token in httpOnly cookie
|
||||
4. Middleware refresht sessie bij elk request
|
||||
5. API routes valideren via createClient()
|
||||
6. RLS filtert data op database niveau
|
||||
```
|
||||
|
||||
#### Input Validation
|
||||
|
||||
Alle API endpoints gebruiken Zod schemas:
|
||||
|
||||
```typescript
|
||||
const CreateReportSchema = z.object({
|
||||
patient_id: z.string().uuid(),
|
||||
type: z.enum(['voortgang', 'observatie', ...]),
|
||||
content: z.string().min(20).max(5000),
|
||||
structured_data: z.object({...}).optional()
|
||||
});
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Performance
|
||||
|
||||
| Aspect | Implementatie | Target |
|
||||
|--------|---------------|--------|
|
||||
| Intent classificatie | Layer 1 Reflex | <20ms voor 70%+ requests |
|
||||
| Chat responses | SSE streaming | First token <500ms |
|
||||
| Patient search | Debounced input | 300ms debounce |
|
||||
| Build optimization | Code splitting | Three.js in apart chunk |
|
||||
| Database queries | Selective columns | Geen overbodige data |
|
||||
|
||||
---
|
||||
|
||||
### Monitoring & Audit
|
||||
|
||||
**AI Events Table:**
|
||||
|
||||
```sql
|
||||
CREATE TABLE ai_events (
|
||||
id UUID PRIMARY KEY,
|
||||
kind TEXT, -- 'classify', 'summarize', 'chat'
|
||||
request JSONB,
|
||||
response JSONB,
|
||||
duration_ms INTEGER,
|
||||
created_at TIMESTAMPTZ,
|
||||
user_id UUID
|
||||
);
|
||||
```
|
||||
|
||||
Elk AI-verzoek wordt gelogd voor:
|
||||
- Compliance en audit trail
|
||||
- Performance monitoring
|
||||
- Model fine-tuning data
|
||||
|
||||
---
|
||||
|
||||
### Feature Flags
|
||||
|
||||
```typescript
|
||||
// lib/config/feature-flags.ts
|
||||
CORTEX_V2_ENABLED // Drie-lagen architectuur
|
||||
CORTEX_MULTI_INTENT // Multi-intent detectie
|
||||
CORTEX_NUDGE // Proactieve suggesties
|
||||
CORTEX_LOGGING // Debug logging (dev only)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Deployment
|
||||
|
||||
### Infrastructuur
|
||||
|
||||
```
|
||||
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
||||
│ Vercel │────▶│ Supabase │────▶│ PostgreSQL │
|
||||
│ (Frontend + │ │ (Auth) │ │ (Database) │
|
||||
│ API Routes) │ └─────────────────┘ └─────────────────┘
|
||||
└─────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────┐ ┌─────────────────┐
|
||||
│ Claude API │ │ Deepgram │
|
||||
│ (Anthropic) │ │ (Speech-to-Text)│
|
||||
└─────────────────┘ └─────────────────┘
|
||||
```
|
||||
|
||||
### Environment Variables
|
||||
|
||||
```bash
|
||||
# Supabase
|
||||
NEXT_PUBLIC_SUPABASE_URL=https://xxx.supabase.co
|
||||
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ...
|
||||
|
||||
# AI Services
|
||||
ANTHROPIC_API_KEY=sk-ant-...
|
||||
DEEPGRAM_API_KEY=...
|
||||
|
||||
# Feature Flags
|
||||
NEXT_PUBLIC_CORTEX_V2=true
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Extensibility
|
||||
|
||||
### Nieuw Intent Toevoegen
|
||||
|
||||
1. Voeg toe aan `CortexIntent` type in `lib/cortex/types.ts`
|
||||
2. Voeg Reflex patterns toe in `lib/cortex/reflex-classifier.ts`
|
||||
3. Maak artifact block in `components/cortex/blocks/`
|
||||
4. Update Orchestrator prompt (indien AI-driven)
|
||||
5. Maak API endpoint (indien nodig)
|
||||
|
||||
### Nieuw Report Type Toevoegen
|
||||
|
||||
1. Voeg toe aan `REPORT_TYPES` enum in `lib/types/report.ts`
|
||||
2. Voeg Zod schema toe voor validatie
|
||||
3. Update UI componenten voor nieuw type
|
||||
4. Voeg database migration toe indien nodig
|
||||
|
||||
---
|
||||
|
||||
## Conclusie
|
||||
|
||||
De Mini-EPD architectuur is ontworpen voor:
|
||||
|
||||
- **Snelheid**: Drie-lagen AI met <20ms lokale verwerking
|
||||
- **Schaalbaarheid**: Serverless, horizontaal schaalbaar
|
||||
- **Veiligheid**: RLS, JWT, Zod validatie op alle lagen
|
||||
- **Uitbreidbaarheid**: Modulaire opzet met duidelijke interfaces
|
||||
- **Compliance**: Audit trail, soft deletes, Nederlandse foutmeldingen
|
||||
|
||||
Het systeem is production-ready voor MVP deployment met duidelijke paden voor doorontwikkeling.
|
||||
187
docs/swift/prompt-architecture-diagram.json
Normal file
187
docs/swift/prompt-architecture-diagram.json
Normal file
@@ -0,0 +1,187 @@
|
||||
{
|
||||
"id": "architecture-diagram",
|
||||
"name": "Architectuur Diagram — Drie-Lagen Intelligentie",
|
||||
"version": "1.0",
|
||||
"created": "2025-01-05",
|
||||
"purpose": "Technische geloofwaardigheid voor ICT-managers en EPD-leveranciers",
|
||||
"primary_audience": ["ICT-managers", "EPD-leveranciers"],
|
||||
"core_message": "Doordacht, schaalbaar, veilig",
|
||||
"format": {
|
||||
"aspect_ratio": "4:3",
|
||||
"resolution": "1920x1440px",
|
||||
"file_type": "Vector (SVG/Figma)",
|
||||
"alternatives": ["A4 landscape", "1920x1080px for slides"],
|
||||
"use_cases": ["Technical documentation", "Whitepaper", "Integration guide", "Pitch deck"]
|
||||
},
|
||||
"brand_colors": {
|
||||
"layer1_reflex": "#0F766E",
|
||||
"layer2_orchestrator": "#F59E0B",
|
||||
"layer3_nudge": "#16A34A",
|
||||
"background": "#F8FAFC",
|
||||
"surface": "#FFFFFF",
|
||||
"text_primary": "#0F172A",
|
||||
"text_secondary": "#475569",
|
||||
"border": "#E2E8F0"
|
||||
},
|
||||
"diagram_spec": {
|
||||
"layout": "vertical_flow_top_to_bottom",
|
||||
"layers": [
|
||||
{
|
||||
"id": "input",
|
||||
"name": "Input Layer",
|
||||
"name_nl": "Invoer",
|
||||
"description": "Spraak en tekst invoer van zorgprofessional",
|
||||
"example": "\"Maak notitie voor Jan\"",
|
||||
"icons": ["microphone", "keyboard"],
|
||||
"color": "neutral",
|
||||
"height": "80px"
|
||||
},
|
||||
{
|
||||
"id": "reflex",
|
||||
"name": "Layer 1: Reflex Arc",
|
||||
"name_nl": "Laag 1: Reflex",
|
||||
"tagline": "Snelle lokale verwerking",
|
||||
"description": "Lokale pattern matching zonder AI-calls",
|
||||
"coverage": "70% van alle requests",
|
||||
"latency": "<20ms",
|
||||
"color": "#0F766E",
|
||||
"icon": "zap",
|
||||
"intents": [
|
||||
{ "id": "notitie", "label": "Notitie", "pattern": "notitie|noteer|schrijf op" },
|
||||
{ "id": "zoeken", "label": "Zoeken", "pattern": "zoek|vind|waar is" },
|
||||
{ "id": "agenda", "label": "Agenda", "pattern": "agenda|afspraak|planning" },
|
||||
{ "id": "overdracht", "label": "Overdracht", "pattern": "overdracht|handover" }
|
||||
],
|
||||
"escalation": {
|
||||
"condition": "confidence < 0.7",
|
||||
"target": "orchestrator",
|
||||
"label": "Escaleer naar Layer 2"
|
||||
},
|
||||
"height": "160px"
|
||||
},
|
||||
{
|
||||
"id": "orchestrator",
|
||||
"name": "Layer 2: Orchestrator",
|
||||
"name_nl": "Laag 2: Orchestrator",
|
||||
"tagline": "Claude AI voor complexe gevallen",
|
||||
"description": "Context-aware intent classificatie",
|
||||
"model": "Claude 3.5 Haiku",
|
||||
"color": "#F59E0B",
|
||||
"icon": "brain",
|
||||
"capabilities": [
|
||||
{
|
||||
"id": "multi_intent",
|
||||
"label": "Multi-intent",
|
||||
"example": "\"annuleer afspraak én maak notitie\"",
|
||||
"icon": "layers"
|
||||
},
|
||||
{
|
||||
"id": "pronoun_resolution",
|
||||
"label": "Pronoun resolutie",
|
||||
"example": "\"voor hem\" → actieve patiënt",
|
||||
"icon": "user"
|
||||
},
|
||||
{
|
||||
"id": "relative_time",
|
||||
"label": "Relatieve tijd",
|
||||
"example": "\"morgen 14:00\" → 2025-01-06T14:00",
|
||||
"icon": "calendar"
|
||||
}
|
||||
],
|
||||
"height": "180px"
|
||||
},
|
||||
{
|
||||
"id": "nudge",
|
||||
"name": "Layer 3: Nudge",
|
||||
"name_nl": "Laag 3: Nudge",
|
||||
"tagline": "Proactieve suggesties",
|
||||
"description": "Post-actie aanbevelingen op basis van zorgprotocollen",
|
||||
"color": "#16A34A",
|
||||
"icon": "lightbulb",
|
||||
"example": {
|
||||
"trigger": "Na wondnotitie",
|
||||
"suggestion": "Plan wondcontrole over 3 dagen?",
|
||||
"source": "V&VN richtlijnen"
|
||||
},
|
||||
"height": "120px"
|
||||
},
|
||||
{
|
||||
"id": "output",
|
||||
"name": "Output: Gestructureerde Zorgdata",
|
||||
"name_nl": "Uitvoer: Gestructureerde Data",
|
||||
"description": "FHIR-compatibele data naar EPD",
|
||||
"color": "neutral",
|
||||
"icon": "database",
|
||||
"output_card": {
|
||||
"fields": [
|
||||
{ "label": "Patient", "value": "Jan Bakker" },
|
||||
{ "label": "Type", "value": "Verpleegkundige notitie" },
|
||||
{ "label": "Categorie", "value": "ADL" },
|
||||
{ "label": "Inhoud", "value": "Goed geslapen, zelfstandig ontbeten" },
|
||||
{ "label": "Dienst", "value": "Ochtend" },
|
||||
{ "label": "Datum", "value": "2025-01-05" }
|
||||
]
|
||||
},
|
||||
"integration": "EPD / FHIR",
|
||||
"height": "160px"
|
||||
}
|
||||
],
|
||||
"connectors": {
|
||||
"style": "arrow_down",
|
||||
"color": "#CBD5E1",
|
||||
"width": "2px"
|
||||
}
|
||||
},
|
||||
"style": {
|
||||
"corners": "8px rounded",
|
||||
"shadows": "0 2px 6px rgba(15,23,42,0.08)",
|
||||
"typography": {
|
||||
"headings": "font-weight: 600",
|
||||
"body": "font-weight: 400",
|
||||
"code": "font-family: monospace"
|
||||
},
|
||||
"spacing": {
|
||||
"layer_gap": "24px",
|
||||
"inner_padding": "20px"
|
||||
},
|
||||
"iconography": "Lucide or Phosphor icons",
|
||||
"language": "Dutch labels"
|
||||
},
|
||||
"platforms": {
|
||||
"figma": {
|
||||
"instructions": "Use Auto Layout for each layer. Create components for reusable elements. Use brand colors from variables.",
|
||||
"template_structure": [
|
||||
"Frame: Architecture Diagram (1920x1440)",
|
||||
" ├── Component: Input Layer",
|
||||
" ├── Connector Arrow",
|
||||
" ├── Component: Reflex Layer",
|
||||
" ├── Connector Arrow (conditional)",
|
||||
" ├── Component: Orchestrator Layer",
|
||||
" ├── Connector Arrow",
|
||||
" ├── Component: Nudge Layer",
|
||||
" ├── Connector Arrow",
|
||||
" └── Component: Output Layer"
|
||||
]
|
||||
},
|
||||
"mermaid": {
|
||||
"code": "flowchart TD\n A[\"🎤 Spraak / ⌨️ Tekst\"] --> B\n B[\"Layer 1: Reflex Arc\\n⚡ <20ms | 70% requests\"] --> C{Confidence < 0.7?}\n C -->|Nee| E\n C -->|Ja| D[\"Layer 2: Orchestrator\\n🧠 Claude AI\"]\n D --> E[\"Layer 3: Nudge\\n💡 Proactieve suggesties\"]\n E --> F[\"📋 Gestructureerde Zorgdata\\nEPD / FHIR\"]"
|
||||
},
|
||||
"excalidraw": {
|
||||
"style": "Hand-drawn for workshops",
|
||||
"instructions": "Use rounded rectangles, hand-drawn arrows, sticky note aesthetic"
|
||||
},
|
||||
"draw_io": {
|
||||
"instructions": "Use flowchart shapes, custom colors from brand palette"
|
||||
}
|
||||
},
|
||||
"text_content": {
|
||||
"title": "Cortex Drie-Lagen Architectuur",
|
||||
"subtitle": "Van natuurlijke taal naar gestructureerde zorgdata",
|
||||
"layer_descriptions": {
|
||||
"reflex": "Snelle, lokale verwerking voor 70% van alle commando's. Geen externe API-calls, <20ms latency.",
|
||||
"orchestrator": "Claude AI voor complexe gevallen: multi-intent, context-resolutie, tijdsparsing.",
|
||||
"nudge": "Proactieve suggesties na acties, gebaseerd op V&VN zorgprotocollen."
|
||||
},
|
||||
"footer": "FHIR-compatibel | WCAG AA toegankelijk | AVG-compliant"
|
||||
}
|
||||
}
|
||||
50
docs/swift/prompt-hero-visual.json
Normal file
50
docs/swift/prompt-hero-visual.json
Normal file
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"id": "hero-visual",
|
||||
"name": "Hero Visual — Het Intelligente Zorgbrein",
|
||||
"version": "1.0",
|
||||
"created": "2025-01-05",
|
||||
"purpose": "Eerste indruk op website/pitch deck. Moet vertrouwen wekken.",
|
||||
"primary_audience": ["Iedereen"],
|
||||
"core_message": "Technologie die zorg ondersteunt, niet vervangt",
|
||||
"format": {
|
||||
"aspect_ratio": "16:9",
|
||||
"resolution": "1920x1080px",
|
||||
"use_cases": ["Website hero", "Pitch deck opening", "LinkedIn banner"]
|
||||
},
|
||||
"brand_colors": {
|
||||
"primary": "#0F766E",
|
||||
"accent": "#F59E0B",
|
||||
"background": "#F8FAFC"
|
||||
},
|
||||
"prompt_text": "A serene, professional healthcare visualization showing the concept of an 'intelligent layer' between caregivers and patient data. Center: A subtle, abstract neural network pattern in teal (#0F766E) forming a gentle arc or bridge shape. Left side: Soft silhouettes of healthcare professionals (nurse, doctor) speaking naturally, with subtle sound wave lines emanating from them. Right side: Clean, organized patient data cards and medical icons flowing into structured columns. The neural bridge transforms chaotic voice input into organized output. Style: Clean, minimal, Scandinavian healthcare aesthetic. Color palette: Teal primary (#0F766E), warm amber accents (#F59E0B), soft gray backgrounds (#F8FAFC). No screens or devices visible — focus on human-AI collaboration. Subtle depth with soft shadows, not flat design. Professional enough for hospital boardroom presentation. Mood: Calm, trustworthy, efficient, human-centered technology.",
|
||||
"negative_prompt": "Robots, glowing brains, Matrix-style code, overly futuristic elements, stock photo aesthetics, cluttered, dark, dystopian, screens, devices, text, watermarks",
|
||||
"composition": {
|
||||
"center": "Abstract neural network pattern in teal forming gentle arc/bridge",
|
||||
"left": "Healthcare professional silhouettes speaking, sound wave lines",
|
||||
"right": "Organized patient data cards and medical icons in columns",
|
||||
"transformation": "Chaotic voice input → organized structured output"
|
||||
},
|
||||
"style": {
|
||||
"aesthetic": "Clean, minimal, Scandinavian healthcare",
|
||||
"depth": "Subtle shadows, not flat design",
|
||||
"quality": "Hospital boardroom presentation quality"
|
||||
},
|
||||
"mood": ["Calm", "Trustworthy", "Efficient", "Human-centered"],
|
||||
"platforms": {
|
||||
"midjourney_v6": {
|
||||
"suffix": "--ar 16:9 --style raw --s 200 --c 15",
|
||||
"full_prompt": "A serene, professional healthcare visualization showing the concept of an 'intelligent layer' between caregivers and patient data. Center: A subtle, abstract neural network pattern in teal (#0F766E) forming a gentle arc or bridge shape. Left side: Soft silhouettes of healthcare professionals speaking naturally, with subtle sound wave lines. Right side: Clean, organized patient data cards flowing into structured columns. Clean, minimal, Scandinavian healthcare aesthetic. Teal primary, warm amber accents, soft gray backgrounds. No screens or devices. Subtle depth with soft shadows. Calm, trustworthy, human-centered technology. --ar 16:9 --style raw --s 200 --c 15"
|
||||
},
|
||||
"dalle_3": {
|
||||
"style": "natural",
|
||||
"full_prompt": "A serene, professional healthcare visualization showing an 'intelligent layer' between caregivers and patient data. In the center, a subtle abstract neural network pattern in teal (#0F766E) forms a gentle arc. On the left, soft silhouettes of healthcare professionals speak naturally with subtle sound waves. On the right, clean organized patient data cards flow into structured columns. Scandinavian healthcare aesthetic with teal primary color, warm amber accents (#F59E0B), and soft gray backgrounds (#F8FAFC). No screens or devices visible. Subtle shadows, not flat. Professional, calm, trustworthy mood."
|
||||
},
|
||||
"stable_diffusion": {
|
||||
"steps": 30,
|
||||
"cfg_scale": 7,
|
||||
"sampler": "DPM++ 2M Karras",
|
||||
"full_prompt": "professional healthcare visualization, intelligent AI layer concept, abstract neural network pattern in teal, healthcare workers silhouettes speaking, sound waves, organized patient data cards, clean minimal scandinavian aesthetic, teal and amber color scheme, soft gray background, subtle shadows, professional medical, calm trustworthy mood, high quality, detailed",
|
||||
"negative": "robots, glowing brains, matrix code, futuristic, stock photo, cluttered, dark, dystopian, screens, devices, text, watermark, low quality"
|
||||
}
|
||||
}
|
||||
}
|
||||
223
docs/swift/prompt-value-flow.json
Normal file
223
docs/swift/prompt-value-flow.json
Normal file
@@ -0,0 +1,223 @@
|
||||
{
|
||||
"id": "value-flow",
|
||||
"name": "Value Flow — Van Stem naar Structuur",
|
||||
"version": "1.0",
|
||||
"created": "2025-01-05",
|
||||
"purpose": "Snel begrip voor zorgdirectie en zorgprofessionals. 'Ik snap het in 5 seconden.'",
|
||||
"primary_audience": ["Zorgdirectie", "Zorgprofessionals"],
|
||||
"core_message": "Van 2 minuten typen naar 8 seconden spreken",
|
||||
"format": {
|
||||
"aspect_ratio": "3:1",
|
||||
"resolution": "1920x640px",
|
||||
"variants": {
|
||||
"static": {
|
||||
"format": "PNG/SVG",
|
||||
"use": "Website banner, email header"
|
||||
},
|
||||
"animated": {
|
||||
"format": "MP4/GIF",
|
||||
"duration": "10 seconds loop",
|
||||
"use": "Trade shows, LinkedIn, waiting room displays"
|
||||
},
|
||||
"print": {
|
||||
"format": "PDF",
|
||||
"size": "A3 landscape",
|
||||
"use": "Posters, handouts"
|
||||
}
|
||||
}
|
||||
},
|
||||
"brand_colors": {
|
||||
"step1": {
|
||||
"primary": "#F59E0B",
|
||||
"background": "#FFFBEB",
|
||||
"description": "Warm, human, organic"
|
||||
},
|
||||
"step2": {
|
||||
"primary": "#0F766E",
|
||||
"background": "#F0FDFA",
|
||||
"description": "Teal, neural, processing"
|
||||
},
|
||||
"step3": {
|
||||
"primary": "#16A34A",
|
||||
"background": "#ECFDF5",
|
||||
"description": "Green, success, organized"
|
||||
},
|
||||
"connectors": "#CBD5E1",
|
||||
"text_primary": "#0F172A",
|
||||
"text_secondary": "#475569"
|
||||
},
|
||||
"key_metrics": [
|
||||
{
|
||||
"value": "8 sec",
|
||||
"comparison": "vs 2 min typen",
|
||||
"meaning": "Tijdsbesparing per notitie",
|
||||
"placement": "Step 1"
|
||||
},
|
||||
{
|
||||
"value": "<20ms",
|
||||
"label": "verwerking",
|
||||
"meaning": "Verwerkingssnelheid Cortex",
|
||||
"placement": "Step 2"
|
||||
},
|
||||
{
|
||||
"value": "70%",
|
||||
"label": "minder administratie",
|
||||
"meaning": "Reductie administratieve last",
|
||||
"placement": "Step 3"
|
||||
}
|
||||
],
|
||||
"steps": [
|
||||
{
|
||||
"number": 1,
|
||||
"id": "input",
|
||||
"title": "Inspreken",
|
||||
"subtitle": "Natuurlijke taal",
|
||||
"icon": "user-voice",
|
||||
"icon_alternatives": ["mic", "message-circle"],
|
||||
"visual": "Healthcare worker silhouette speaking, sound waves emanating",
|
||||
"example_input": {
|
||||
"text": "\"Mevrouw Jansen heeft goed geslapen en zelfstandig ontbeten\"",
|
||||
"context": "Verpleegkundige tijdens ochtendronde"
|
||||
},
|
||||
"metric": {
|
||||
"primary": "8 seconden",
|
||||
"comparison": "vs 2 min typen",
|
||||
"icon": "clock"
|
||||
},
|
||||
"benefits": [
|
||||
"Geen formulieren invullen",
|
||||
"Hands-free tijdens zorg",
|
||||
"Natuurlijke workflow"
|
||||
],
|
||||
"color_zone": {
|
||||
"style": "warm, human, organic shapes",
|
||||
"gradient": "from amber-50 to white"
|
||||
}
|
||||
},
|
||||
{
|
||||
"number": 2,
|
||||
"id": "processing",
|
||||
"title": "Verwerking",
|
||||
"subtitle": "Cortex AI",
|
||||
"icon": "cpu",
|
||||
"icon_alternatives": ["brain", "sparkles"],
|
||||
"visual": "Abstract neural pattern, processing indicators, data extraction visualization",
|
||||
"extracted_data": {
|
||||
"patient": "Jansen",
|
||||
"type": "Observatie",
|
||||
"category": "ADL",
|
||||
"shift": "Ochtend",
|
||||
"sentiment": "Positief"
|
||||
},
|
||||
"metric": {
|
||||
"primary": "<20ms",
|
||||
"label": "verwerking",
|
||||
"icon": "zap"
|
||||
},
|
||||
"benefits": [
|
||||
"Automatische classificatie",
|
||||
"Geen handmatige invoer",
|
||||
"Context-aware herkenning"
|
||||
],
|
||||
"color_zone": {
|
||||
"style": "teal, neural, technological but approachable",
|
||||
"gradient": "teal-50 center glow"
|
||||
}
|
||||
},
|
||||
{
|
||||
"number": 3,
|
||||
"id": "output",
|
||||
"title": "Resultaat",
|
||||
"subtitle": "Gestructureerd in EPD",
|
||||
"icon": "clipboard-check",
|
||||
"icon_alternatives": ["file-check", "check-circle"],
|
||||
"visual": "Clean data card with checkmark, organized fields, success state",
|
||||
"output_card": {
|
||||
"header": "Verpleegkundige notitie",
|
||||
"fields": [
|
||||
{ "label": "Patient", "value": "Mw. Jansen" },
|
||||
{ "label": "Type", "value": "ADL Observatie" },
|
||||
{ "label": "Dienst", "value": "Ochtend" },
|
||||
{ "label": "Status", "value": "✓ Opgeslagen" }
|
||||
]
|
||||
},
|
||||
"metric": {
|
||||
"primary": "70%",
|
||||
"label": "minder administratie",
|
||||
"icon": "trending-down"
|
||||
},
|
||||
"benefits": [
|
||||
"Direct klaar voor overdracht",
|
||||
"Automatische rapportages",
|
||||
"Data voor analytics"
|
||||
],
|
||||
"color_zone": {
|
||||
"style": "clean, organized, success",
|
||||
"gradient": "to green-50"
|
||||
}
|
||||
}
|
||||
],
|
||||
"connectors": {
|
||||
"style": "curved arrows with gradient",
|
||||
"animation": {
|
||||
"type": "flow",
|
||||
"direction": "left to right",
|
||||
"duration": "1.5s per connector",
|
||||
"easing": "ease-in-out"
|
||||
},
|
||||
"labels": {
|
||||
"1_to_2": "Cortex luistert",
|
||||
"2_to_3": "Automatisch gestructureerd"
|
||||
}
|
||||
},
|
||||
"animation_spec": {
|
||||
"total_duration": "10 seconds",
|
||||
"loop": true,
|
||||
"timeline": [
|
||||
{ "time": "0-2s", "action": "Step 1 appears, sound waves animate" },
|
||||
{ "time": "2-3s", "action": "Connector 1→2 animates, text flows" },
|
||||
{ "time": "3-5s", "action": "Step 2 processing animation, data extraction" },
|
||||
{ "time": "5-6s", "action": "Connector 2→3 animates" },
|
||||
{ "time": "6-8s", "action": "Step 3 card assembles, checkmark appears" },
|
||||
{ "time": "8-10s", "action": "Hold complete state, metrics pulse" }
|
||||
]
|
||||
},
|
||||
"platforms": {
|
||||
"figma": {
|
||||
"instructions": "Create 3 frames for steps, use Smart Animate for prototype. Auto Layout horizontal with 48px gap.",
|
||||
"components": [
|
||||
"Step Card (variant for each step)",
|
||||
"Connector Arrow (with optional label)",
|
||||
"Metric Badge",
|
||||
"Benefit List"
|
||||
]
|
||||
},
|
||||
"after_effects": {
|
||||
"instructions": "Use shape layers for cards, animate along motion path for connectors. Lottie export for web.",
|
||||
"effects": [
|
||||
"Sound wave: repeating sine wave path animation",
|
||||
"Processing: rotating gradient, particle system",
|
||||
"Success: scale bounce on checkmark"
|
||||
]
|
||||
},
|
||||
"canva": {
|
||||
"instructions": "Use brand kit for colors. Animate elements with built-in animations. Export as MP4 for social.",
|
||||
"template": "Infographic horizontal layout"
|
||||
},
|
||||
"html_css": {
|
||||
"instructions": "CSS Grid 3-column layout. CSS animations for connectors. Intersection Observer for scroll-triggered animation.",
|
||||
"framework": "Framer Motion or GSAP for React"
|
||||
}
|
||||
},
|
||||
"text_content": {
|
||||
"headline": "Van Stem naar Structuur",
|
||||
"subheadline": "Cortex transformeert natuurlijke taal naar gestructureerde zorgdata",
|
||||
"cta": "Bekijk demo →",
|
||||
"footer_stats": "8 sec inspreken • <20ms verwerking • 70% minder administratie"
|
||||
},
|
||||
"accessibility": {
|
||||
"alt_text": "Infographic die laat zien hoe Cortex spraak omzet naar gestructureerde EPD-data in drie stappen: 1) Zorgverlener spreekt notitie in (8 seconden), 2) Cortex AI verwerkt en classificeert (<20ms), 3) Gestructureerde data verschijnt in EPD (70% minder administratie)",
|
||||
"contrast": "All text meets WCAG AA (4.5:1 minimum)",
|
||||
"reduced_motion": "Provide static fallback for prefers-reduced-motion"
|
||||
}
|
||||
}
|
||||
302
docs/swift/visualisatie-prompts.json
Normal file
302
docs/swift/visualisatie-prompts.json
Normal file
@@ -0,0 +1,302 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Cortex EPD Visualisatie Prompts",
|
||||
"version": "1.0",
|
||||
"created": "2025-01-05",
|
||||
"author": "Mini-EPD Team",
|
||||
"purpose": "AI image generation prompts voor marketing en presentaties",
|
||||
"target_audience": [
|
||||
"ICT-managers",
|
||||
"Zorgdirectie",
|
||||
"EPD-leveranciers",
|
||||
"Zorgprofessionals"
|
||||
]
|
||||
},
|
||||
"brand": {
|
||||
"colors": {
|
||||
"primary": {
|
||||
"teal_700": "#0F766E",
|
||||
"teal_800": "#115E59",
|
||||
"teal_600": "#0D9488",
|
||||
"teal_50": "#F0FDFA"
|
||||
},
|
||||
"ai": {
|
||||
"amber_500": "#F59E0B",
|
||||
"amber_600": "#D97706",
|
||||
"amber_50": "#FFFBEB"
|
||||
},
|
||||
"success": {
|
||||
"green_600": "#16A34A",
|
||||
"green_50": "#ECFDF5"
|
||||
},
|
||||
"neutral": {
|
||||
"background": "#F8FAFC",
|
||||
"surface": "#FFFFFF",
|
||||
"text_primary": "#0F172A",
|
||||
"text_secondary": "#475569"
|
||||
}
|
||||
},
|
||||
"tone": {
|
||||
"do": [
|
||||
"Professioneel",
|
||||
"Betrouwbaar",
|
||||
"Evidence-based",
|
||||
"Menselijk",
|
||||
"Toegankelijk"
|
||||
],
|
||||
"avoid": [
|
||||
"Hype-taal (revolutionair, disruptief)",
|
||||
"Sci-fi aesthetiek",
|
||||
"Robots of androiden",
|
||||
"Matrix-style code",
|
||||
"Stock photo look"
|
||||
]
|
||||
}
|
||||
},
|
||||
"prompts": [
|
||||
{
|
||||
"id": "hero-visual",
|
||||
"name": "Hero Visual — Het Intelligente Zorgbrein",
|
||||
"purpose": "Eerste indruk op website/pitch deck. Moet vertrouwen wekken.",
|
||||
"primary_audience": ["Iedereen"],
|
||||
"core_message": "Technologie die zorg ondersteunt, niet vervangt",
|
||||
"format": {
|
||||
"aspect_ratio": "16:9",
|
||||
"resolution": "1920x1080px",
|
||||
"use_cases": ["Website hero", "Pitch deck opening", "LinkedIn banner"]
|
||||
},
|
||||
"prompt": {
|
||||
"scene": "A serene, professional healthcare visualization showing the concept of an 'intelligent layer' between caregivers and patient data.",
|
||||
"composition": {
|
||||
"center": "A subtle, abstract neural network pattern in teal (#0F766E) forming a gentle arc or bridge shape",
|
||||
"left": "Soft silhouettes of healthcare professionals (nurse, doctor) speaking naturally, with subtle sound wave lines emanating from them",
|
||||
"right": "Clean, organized patient data cards and medical icons flowing into structured columns",
|
||||
"transformation": "The neural bridge transforms chaotic voice input into organized output"
|
||||
},
|
||||
"style": {
|
||||
"aesthetic": "Clean, minimal, Scandinavian healthcare",
|
||||
"colors": "Teal primary (#0F766E), warm amber accents (#F59E0B), soft gray backgrounds (#F8FAFC)",
|
||||
"elements": "No screens or devices visible — focus on human-AI collaboration",
|
||||
"depth": "Subtle depth with soft shadows, not flat design",
|
||||
"quality": "Professional enough for hospital boardroom presentation"
|
||||
},
|
||||
"mood": ["Calm", "Trustworthy", "Efficient", "Human-centered"],
|
||||
"negative_prompt": "Robots, glowing brains, Matrix-style code, overly futuristic elements, stock photo aesthetics, cluttered, dark, dystopian"
|
||||
},
|
||||
"platforms": {
|
||||
"midjourney_v6": "--ar 16:9 --style raw --s 200 --c 15",
|
||||
"dalle_3": "Style: natural, photorealistic illustration",
|
||||
"stable_diffusion": "Steps: 30, CFG: 7, Sampler: DPM++ 2M Karras"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "architecture-diagram",
|
||||
"name": "Architectuur Diagram — Drie-Lagen Intelligentie",
|
||||
"purpose": "Technische geloofwaardigheid voor ICT-managers en EPD-leveranciers",
|
||||
"primary_audience": ["ICT-managers", "EPD-leveranciers"],
|
||||
"core_message": "Doordacht, schaalbaar, veilig",
|
||||
"format": {
|
||||
"aspect_ratio": "4:3",
|
||||
"resolution": "1920x1440px or A4 landscape",
|
||||
"file_type": "Vector (SVG/Figma)",
|
||||
"use_cases": ["Technical documentation", "Whitepaper", "Integration guide"]
|
||||
},
|
||||
"prompt": {
|
||||
"type": "technical_diagram",
|
||||
"layout": "vertical_flow",
|
||||
"layers": [
|
||||
{
|
||||
"id": "input",
|
||||
"name": "Input Layer",
|
||||
"description": "Spraak en tekst invoer",
|
||||
"example": "\"Maak notitie voor Jan\"",
|
||||
"icons": ["microphone", "keyboard"],
|
||||
"color": "neutral"
|
||||
},
|
||||
{
|
||||
"id": "reflex",
|
||||
"name": "Layer 1: Reflex Arc",
|
||||
"description": "Lokale pattern matching, geen AI-calls, 70% van requests",
|
||||
"latency": "<20ms",
|
||||
"color": "#0F766E",
|
||||
"icon": "lightning",
|
||||
"intents": ["notitie", "zoeken", "agenda", "overdracht"],
|
||||
"escalation_rule": "Confidence < 0.7 → Escaleer naar Layer 2"
|
||||
},
|
||||
{
|
||||
"id": "orchestrator",
|
||||
"name": "Layer 2: Orchestrator",
|
||||
"description": "Complexe intent classificatie met Claude AI",
|
||||
"color": "#F59E0B",
|
||||
"icon": "brain",
|
||||
"capabilities": [
|
||||
"Multi-intent: \"annuleer afspraak én maak notitie\"",
|
||||
"Pronoun resolutie: \"voor hem\" → actieve patiënt",
|
||||
"Relatieve tijd: \"morgen 14:00\" → ISO datetime"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "nudge",
|
||||
"name": "Layer 3: Nudge",
|
||||
"description": "Post-actie suggesties op basis van zorgprotocollen",
|
||||
"color": "#16A34A",
|
||||
"icon": "lightbulb",
|
||||
"example": "Na wondnotitie → \"Plan wondcontrole over 3 dagen?\"",
|
||||
"source": "V&VN richtlijnen"
|
||||
},
|
||||
{
|
||||
"id": "output",
|
||||
"name": "Output: Gestructureerde Zorgdata",
|
||||
"description": "FHIR-compatibele data naar EPD",
|
||||
"color": "neutral",
|
||||
"fields": ["Patient", "Type", "Categorie", "Inhoud", "Dienst", "Datum"],
|
||||
"integration": "EPD / FHIR"
|
||||
}
|
||||
],
|
||||
"style": {
|
||||
"corners": "rounded (8px)",
|
||||
"shadows": "subtle, professional",
|
||||
"typography": "clean sans-serif",
|
||||
"language": "Dutch labels, technical terms where appropriate",
|
||||
"iconography": "Lucide or Phosphor icons"
|
||||
}
|
||||
},
|
||||
"platforms": {
|
||||
"figma": "Use Auto Layout, Components for each layer",
|
||||
"mermaid": "flowchart TD with custom styling",
|
||||
"excalidraw": "Hand-drawn style for workshops"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "value-flow",
|
||||
"name": "Value Flow — Van Stem naar Structuur",
|
||||
"purpose": "Snel begrip voor zorgdirectie en zorgprofessionals",
|
||||
"primary_audience": ["Zorgdirectie", "Zorgprofessionals"],
|
||||
"core_message": "Van 2 minuten typen naar 8 seconden spreken",
|
||||
"format": {
|
||||
"aspect_ratio": "3:1",
|
||||
"resolution": "1920x640px",
|
||||
"variants": {
|
||||
"static": "PNG/SVG for website banner",
|
||||
"animated": "10-second loop for trade shows / LinkedIn",
|
||||
"print": "A3 landscape for posters"
|
||||
}
|
||||
},
|
||||
"prompt": {
|
||||
"type": "infographic",
|
||||
"layout": "horizontal_3_step",
|
||||
"steps": [
|
||||
{
|
||||
"number": 1,
|
||||
"title": "Inspreken",
|
||||
"subtitle": "Natuurlijke taal",
|
||||
"icon": "healthcare_worker_speaking",
|
||||
"example_input": "\"Mevrouw Jansen heeft goed geslapen en zelfstandig ontbeten\"",
|
||||
"metric": {
|
||||
"value": "8 seconden",
|
||||
"comparison": "vs 2 min typen"
|
||||
},
|
||||
"benefits": [
|
||||
"Geen formulieren",
|
||||
"Hands-free",
|
||||
"Tijdens zorg"
|
||||
],
|
||||
"color_zone": "warm, human, organic shapes"
|
||||
},
|
||||
{
|
||||
"number": 2,
|
||||
"title": "Verwerking",
|
||||
"subtitle": "Cortex AI",
|
||||
"icon": "brain_processing",
|
||||
"extracted_data": {
|
||||
"patient": "Jansen",
|
||||
"type": "Observatie",
|
||||
"category": "ADL",
|
||||
"shift": "Ochtend"
|
||||
},
|
||||
"metric": {
|
||||
"value": "<20ms",
|
||||
"label": "verwerking"
|
||||
},
|
||||
"benefits": [
|
||||
"Automatische classificatie",
|
||||
"Geen handmatige invoer",
|
||||
"Context-aware"
|
||||
],
|
||||
"color_zone": "teal center (#0F766E), neural aesthetic"
|
||||
},
|
||||
{
|
||||
"number": 3,
|
||||
"title": "Resultaat",
|
||||
"subtitle": "Gestructureerd in EPD",
|
||||
"icon": "clipboard_check",
|
||||
"output_card": {
|
||||
"fields": ["Patient", "Type", "Categorie", "Status"],
|
||||
"status": "success_checkmark"
|
||||
},
|
||||
"metric": {
|
||||
"value": "70%",
|
||||
"label": "minder administratie"
|
||||
},
|
||||
"benefits": [
|
||||
"Klaar voor overdracht",
|
||||
"Rapportages",
|
||||
"Analytics"
|
||||
],
|
||||
"color_zone": "clean, organized, success green (#16A34A)"
|
||||
}
|
||||
],
|
||||
"connectors": {
|
||||
"style": "arrows with gradient",
|
||||
"animation": "subtle flow animation for motion version"
|
||||
},
|
||||
"style": {
|
||||
"gradient": "warm (left) → teal (center) → cool/green (right)",
|
||||
"typography": "large, readable at 50% zoom",
|
||||
"data_viz": "highlight key metrics prominently"
|
||||
}
|
||||
},
|
||||
"key_metrics": [
|
||||
{
|
||||
"metric": "8 sec vs 2 min",
|
||||
"meaning": "Tijdsbesparing per notitie"
|
||||
},
|
||||
{
|
||||
"metric": "<20ms",
|
||||
"meaning": "Verwerkingssnelheid"
|
||||
},
|
||||
{
|
||||
"metric": "70%",
|
||||
"meaning": "Reductie administratieve last"
|
||||
}
|
||||
],
|
||||
"platforms": {
|
||||
"after_effects": "Use shape layers, animate along path",
|
||||
"figma": "Smart Animate for prototype",
|
||||
"canva": "Use brand kit colors"
|
||||
}
|
||||
}
|
||||
],
|
||||
"usage_guidelines": {
|
||||
"website": {
|
||||
"hero": "hero-visual",
|
||||
"how_it_works": "value-flow",
|
||||
"technical_page": "architecture-diagram"
|
||||
},
|
||||
"pitch_deck": {
|
||||
"slide_1": "hero-visual (title slide)",
|
||||
"slide_3": "value-flow (the problem we solve)",
|
||||
"slide_5": "architecture-diagram (how it works)"
|
||||
},
|
||||
"trade_show": {
|
||||
"banner": "hero-visual (large format)",
|
||||
"screen": "value-flow (animated loop)",
|
||||
"handout": "architecture-diagram (A4 print)"
|
||||
},
|
||||
"linkedin": {
|
||||
"company_banner": "hero-visual (1128x191 crop)",
|
||||
"post_image": "value-flow (1200x627)",
|
||||
"article_header": "architecture-diagram (simplified)"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user