diff --git a/app/globals.css b/app/globals.css index a2dc41e..988de70 100644 --- a/app/globals.css +++ b/app/globals.css @@ -1,26 +1,134 @@ @import "tailwindcss"; -:root { - --background: #ffffff; - --foreground: #171717; -} +/* ============================================================================= + Mini-ECD Design System + Gebaseerd op ux-stylesheet.md (v2, UX-geoptimaliseerd) + ============================================================================= */ -@theme inline { - --color-background: var(--background); - --color-foreground: var(--foreground); +:root { + /* Basiskleuren */ + --color-bg: #F8FAFC; + --color-surface: #FFFFFF; + --color-surface-secondary: #F1F5F9; + --color-text: #0F172A; + --color-text-secondary: #475569; + --color-border: #E2E8F0; + + /* Brand & Primary */ + --color-brand: #3B82F6; + --color-brand-hover: #2563EB; + --color-brand-active: #1D4ED8; + --color-brand-subtle: #EFF6FF; + + /* Neutral CTA */ + --color-neutral: #334155; + --color-neutral-hover: #1F2937; + + /* Module-accenten */ + --color-module-appointments: #16A34A; + --color-module-appointments-bg: #E8F8EF; + --color-module-appointments-border: #CDECDC; + + --color-module-meds: #F59E0B; + --color-module-meds-bg: #FEF6DC; + --color-module-meds-border: #F6E7B6; + + --color-module-labs: #F97316; + --color-module-labs-bg: #FFEBDC; + --color-module-labs-border: #FFD2B8; + + /* Status & Feedback */ + --color-success: #16A34A; + --color-success-subtle: #ECFDF5; + --color-warning: #EAB308; + --color-warning-subtle: #FEFCE8; + --color-error: #DC2626; + --color-error-subtle: #FEF2F2; + --color-info: #3B82F6; + --color-info-subtle: #EFF6FF; + + /* Badges (Severity DSM-light) */ + --color-badge-low-bg: #E5E7EB; + --color-badge-low-text: #374151; + --color-badge-medium-bg: #FEF3C7; + --color-badge-medium-text: #92400E; + --color-badge-high-bg: #FEE2E2; + --color-badge-high-text: #991B1B; + + /* Formulieren */ + --color-input-bg: #FFFFFF; + --color-input-text: #0F172A; + --color-input-placeholder: #94A3B8; + --color-input-border: #CBD5E1; + --color-input-border-hover: #94A3B8; + --color-input-focus: #3B82F6; + --color-input-focus-border: #2563EB; + --color-input-disabled-bg: #F1F5F9; + --color-input-disabled-text: #94A3B8; + --color-input-invalid-border: #DC2626; + --color-input-invalid-text: #B91C1C; + + /* Shadows */ + --shadow-sm: 0 1px 2px rgba(15, 23, 42, 0.06); + --shadow-md: 0 2px 6px rgba(15, 23, 42, 0.08); + --shadow-lg: 0 8px 20px rgba(15, 23, 42, 0.10); + + /* Fonts */ --font-sans: var(--font-geist-sans); --font-mono: var(--font-geist-mono); } +@theme inline { + /* Basiskleuren */ + --color-bg: var(--color-bg); + --color-surface: var(--color-surface); + --color-text: var(--color-text); + --color-border: var(--color-border); + + /* Brand */ + --color-brand: var(--color-brand); + --color-success: var(--color-success); + --color-warning: var(--color-warning); + --color-error: var(--color-error); + --color-info: var(--color-info); + + /* Shadows */ + --shadow-sm: var(--shadow-sm); + --shadow-md: var(--shadow-md); + --shadow-lg: var(--shadow-lg); + + /* Fonts */ + --font-sans: var(--font-sans); + --font-mono: var(--font-mono); +} + +/* Dark mode (optioneel, MVP gebruikt licht thema) */ @media (prefers-color-scheme: dark) { :root { - --background: #0a0a0a; - --foreground: #ededed; + --color-bg: #0a0a0a; + --color-surface: #1a1a1a; + --color-text: #ededed; + --color-text-secondary: #a1a1a1; + --color-border: #333333; } } +/* Global styles */ body { - background: var(--background); - color: var(--foreground); - font-family: Arial, Helvetica, sans-serif; + background: var(--color-bg); + color: var(--color-text); + font-family: var(--font-sans), system-ui, -apple-system, sans-serif; +} + +/* Focus styles (toegankelijkheid) */ +*:focus-visible { + outline: 2px solid var(--color-brand); + outline-offset: 2px; +} + +/* AI source highlighting (gebruikt in Intake editor) */ +.ai-source-highlight { + background-color: #fef08a; /* lichtgeel */ + border-radius: 2px; + padding: 1px 0; } diff --git a/app/layout.tsx b/app/layout.tsx index f7fa87e..b04a6f7 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -13,8 +13,8 @@ const geistMono = Geist_Mono({ }); export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", + title: "Mini-ECD | PinkRoccade GGZ", + description: "Mini-ECD prototype voor AI-inspiratiesessie - Intake, Probleemprofiel en Behandelplan met AI-ondersteuning", }; export default function RootLayout({ @@ -23,7 +23,7 @@ export default function RootLayout({ children: React.ReactNode; }>) { return ( - +
diff --git a/docs/bouwplan_template.txt b/docs/bouwplan_template.txt new file mode 100644 index 0000000..16704fa --- /dev/null +++ b/docs/bouwplan_template.txt @@ -0,0 +1,191 @@ +# π Mission Control β Bouwplan Template + +π‘ **Tip:** Dit document kun je samenstellen met hulp van AI-tools zoals **ChatGPT, Claude, Cursor** of **Gemini**. +Gebruik ze als **sparringpartner** om de bouw van je software te plannen, te documenteren en te verbeteren β zelfs als je geen ontwikkelaar bent. +Afhankelijk van de **complexiteit van je software** bepaal je zelf hoe gedetailleerd je elk onderdeel uitwerkt. Voor kleine prototypes volstaat een beknopt overzicht; voor grotere projecten kun je per fase en subfase inzoomen. + +--- + +**Projectnaam:** _[vul in]_ +**Versie:** _v1.0_ +**Datum:** _[dd-mm-jjjj]_ +**Auteur:** _[naam]_ + +--- + +## 1. Doel en context +π― **Doel:** Leg uit wat je gaat bouwen en waarom. +π **Toelichting:** Beschrijf kort de aanleiding voor het project en hoe het past binnen je organisatie of productstrategie. Verwijs hier naar het PRD of FO voor achtergrond. + +**Voorbeeld:** +> Het doel is een werkend MVP te bouwen van de AI-assistent voor zorgdossiers. We tonen de meerwaarde van AI binnen de intake β profiel β plan workflow. + +--- + +## 2. Uitgangspunten +π― **Doel:** Benoem de vaste kaders waarbinnen het project wordt ontwikkeld. +π **Toelichting:** Denk aan gebruikte stack, beperkingen (tijd, budget, resources) en aannames. + +**Voorbeeld:** +- Stack: SvelteKit + Firebase + Vertex AI +- Tijd: 3 weken bouwtijd voor MVP +- Geen productiegegevens (alle data fictief) +- Doel: demo op AI-inspiratiesessie + +--- + +## 3. Fase- en subfase-overzicht +π― **Doel:** De bouw opdelen in logische fases met een duidelijke volgorde. +π **Toelichting:** Elke fase bevat het doel, afhankelijkheden en status. Je kunt de status handmatig of via AI bijhouden. + +**Voorbeeld:** +| Fase | Titel | Doel | Status | Opmerkingen | +|------|--------|------|---------|--------------| +| 0 | Setup | Repo, omgeving, dependencies | β Gereed | Config getest | +| 1 | Data & Firebase | Datamodel en demo-data | π In Progress | Rules nog aanvullen | +| 2 | UI & Layout | SvelteKit layout, navigatie | β³ To Do | Wireframes gereed | +| 3 | AI-integratie | Vertex AI endpoints | β³ To Do | Test met Gemini model | +| 4 | Testing & Deploy | Demo testen & live zetten | β³ To Do | | + +--- + +## 4. Subfases (uitwerking per fase) +π― **Doel:** Verdeel complexe fases in beheersbare subfases voor meer overzicht. +π **Toelichting:** Je bepaalt zelf het detailniveau. Kleine projecten kunnen volstaan met 2-3 subfases; grotere implementaties kunnen tot 10 subfases bevatten. Gebruik dit format om focus en voortgang te behouden. + +**Voorbeeldstructuur:** + +### Fase 0 β Setup +| Subfase | Doel | Status | Afhankelijkheden | Opmerkingen | +|----------|------|--------|------------------|--------------| +| 0.1 | Repo aanmaken | β | β | GitHub en Vercel gereed | +| 0.2 | Dependencies installeren | β | 0.1 | Tailwind, Lucide, Firebase | +| 0.3 | Omgevingsvariabelen configureren | π | 0.2 | `.env.local` + Vercel vars | +| 0.4 | Template cleanup | β³ | 0.2 | Verwijder standaard demo-content | + +### Fase 1 β Data & Firebase +| Subfase | Doel | Status | Afhankelijkheden | Opmerkingen | +|----------|------|--------|------------------|--------------| +| 1.1 | Datamodel ontwerpen | π | 0.4 | Definieer `clients`, `intakes`, `plans` | +| 1.2 | Security Rules schrijven | β³ | 1.1 | Demo-user all access | +| 1.3 | Demo-data seeden | β³ | 1.1 | 3 testcliΓ«nten + intake | + +### Fase 2 β UI & Layout +| Subfase | Doel | Status | Afhankelijkheden | Opmerkingen | +|----------|------|--------|------------------|--------------| +| 2.1 | Layout skelet bouwen | β³ | 1.3 | Topbalk + navigatie | +| 2.2 | Componentenbibliotheek koppelen | β³ | 2.1 | shadcn/ui of eigen variant | +| 2.3 | Navigatie en routes | β³ | 2.1 | `/clients/[id]` structuur | + +### Fase 3 β AI-integratie +| Subfase | Doel | Status | Afhankelijkheden | Opmerkingen | +|----------|------|--------|------------------|--------------| +| 3.1 | Vertex AI configureren | β³ | 0.3 | GCP SA key in `.env` | +| 3.2 | Endpoints aanmaken | β³ | 3.1 | summarize, extract, plan | +| 3.3 | Logging & telemetrie | β³ | 3.2 | Log requests in `ai_events` | + +### Fase 4 β Testing & Deploy +| Subfase | Doel | Status | Afhankelijkheden | Opmerkingen | +|----------|------|--------|------------------|--------------| +| 4.1 | Smoke tests uitvoeren | β³ | 3.3 | Prompt snapshots testen | +| 4.2 | Demo dry-run | β³ | 4.1 | Met tijdmeting (β€10 min) | +| 4.3 | Publicatie Vercel | β³ | 4.2 | EU-regio deployment | + +--- + +## 5. Fasebeschrijving (detail) +π― **Doel:** Per fase beschrijven wat er moet gebeuren, zonder in code te duiken. +π **Toelichting:** Gebruik korte opsommingen en eventueel snippets om een AI-tool te laten helpen bij specifieke taken. + +**Voorbeeldstructuur:** + +### Fase 1 β Setup +* Doel: basisomgeving inrichten. +* Taken: + - Init SvelteKit project met Tailwind. + - Voeg ESLint, Prettier en TypeScript toe. + - Controleer lokale run in dev-modus. +* Snippet (voorbeeld prompt voor Cursor): + ``` + Maak een SvelteKit boilerplate met Tailwind en lucide-icons. Voeg een voorbeeldcomponent toe. + ``` + +### Fase 2 β Data & Firebase +* Doel: datamodel definiΓ«ren en seed-data aanmaken. +* Taken: + - Collections opzetten (`clients`, `intakes`, `plans`). + - Security Rules schrijven. + - Demo-gebruiker configureren. + +### Fase 3 β UI & Interactie +* Doel: interface opzetten volgens UX/FO. +* Taken: + - Layout bouwen met Topbalk + Linkernav. + - Dummy-content tonen per tab. + - Toetscombinaties testen (Ctrl+S, Cmd+K). +* Snippet (prompt): + ``` + Bouw een Svelte-component voor de linkernavigatie met active state en hover animatie. + ``` + +### Fase 4 β AI-integratie +* Doel: AI-functionaliteit koppelen (server-side). +* Taken: + - Vertex AI instellen (Gemini model). + - Endpoints maken: summarize, extract, plan. + - Output testen met fictieve data. + +--- + +## 6. Kwaliteit & Testplan +π― **Doel:** vastleggen hoe de kwaliteit van het project wordt geborgd. +π **Toelichting:** Licht toe welke tests je uitvoert en hoe je weet dat de build stabiel is. + +**Voorbeeld:** +- Smoke tests per flow (A/B/C) +- Snapshot tests op AI-output structuur +- Handmatige demo-run vΓ³Γ³r oplevering + +--- + +## 7. Demo & Presentatieplan +π― **Doel:** beschrijven hoe de demo wordt gepresenteerd of getest. +π **Toelichting:** Vermeld wat je laat zien, wie betrokken is en welk scenario wordt gevolgd. + +**Voorbeeld:** +> We tonen in 10 minuten de flow: nieuwe cliΓ«nt β intake β AI-samenvatting β behandelplan. +> De demo draait lokaal in Vercel met mockdata. + +--- + +## 8. Risicoβs & Mitigatie +π― **Doel:** risicoβs vroeg signaleren en voorzien van oplossingen. +π **Toelichting:** Gebruik dit als dynamische checklist. + +**Voorbeeld:** +| Risico | Impact | Mitigatie | +|--------|---------|------------| +| AI-output inconsistent | Hoog | Test prompts, gebruik snapshot tests | +| Firebase regels te open | Middel | Sluiten voor productie | +| Tijdsdruk | Hoog | Schalen op taken via AI of no-code tooling | + +--- + +## 9. Evaluatie & Lessons Learned +π― **Doel:** reflecteren op het proces en verbeteringen vastleggen. +π **Toelichting:** noteer inzichten na elke sprint of oplevering. + +**Voorbeeld:** +> De AI-rail werkte goed, maar het kostte extra tijd om prompts te fine-tunen. Voor de volgende iteratie gebruiken we vooraf geteste promptblokken. + +--- + +## 10. Referenties +π― **Doel:** koppelen aan de overige Mission Control-documenten. + +**Verwijzingen:** +- PRD β Product Requirements Document +- FO β Functioneel Ontwerp +- TO β Technisch Ontwerp +- UX/UI-specificatie +- API Access Document \ No newline at end of file diff --git a/docs/fo-mini-ecd.md b/docs/fo-mini-ecd.md new file mode 100644 index 0000000..46d261a --- /dev/null +++ b/docs/fo-mini-ecd.md @@ -0,0 +1,493 @@ +# π§© Functioneel Ontwerp (FO) β Mini-ECD Prototype + +**Projectnaam:** Mini-ECD Prototype +**Versie:** v1.0 (MVP) +**Datum:** 09-11-2025 +**Auteur:** Ontwikkelteam PinkRoccade GGZ + +--- + +## 1. Doel en relatie met het PRD + +π― **Doel van dit document:** +Het Functioneel Ontwerp (FO) beschrijft **hoe** de Mini-ECD applicatie functioneel werkt β wat de gebruiker ziet, doet en ervaart tijdens de AI-inspiratiesessie. Waar het PRD uitlegt *wat en waarom*, laat het FO zien *hoe dit in de praktijk werkt*. + +π **Context:** +Dit FO ondersteunt de demo van max. 10 minuten waarbij we de kernflow **intake β probleemclassificatie β behandelplan** demonstreren met AI-ondersteuning. Het richt zich op de herkenbare ECD-workflow voor GGZ-professionals, met fictieve data en vereenvoudigde autorisatie. + +**Relatie met andere documenten:** +- **PRD**: definieert de vereisten en scope +- **TO (Technisch Ontwerp)**: beschrijft de technische implementatie (Next.js, Supabase, Claude AI) +- **UX Stylesheet**: specificeert kleuren en styling +- **API Access**: documenteert de AI endpoints + +--- + +## 2. Overzicht van de belangrijkste onderdelen + +De applicatie bestaat uit de volgende hoofdonderdelen: + +1. **CliΓ«ntenlijst** β overzicht van alle cliΓ«nten met zoek- en filterfunctionaliteit +2. **CliΓ«ntdossier / Dashboard** β configureerbare tegels met overzicht per cliΓ«nt +3. **Intakeverslag** β rich text editor met AI-ondersteuning +4. **Probleemprofiel (DSM-light)** β categorisatie en severity-bepaling +5. **Behandelplan** β gestructureerd plan met doelen, interventies en meetmomenten +6. *(Stretch)* **Mini-agenda** β afspraken koppelen aan cliΓ«nt +7. *(Stretch)* **Rapportage** β PDF export van dossier + +--- + +## 3. User Stories + +### Primaire User Stories (MVP) + +| ID | Rol | Doel / Actie | Verwachte waarde | Prioriteit | +|----|------|---------------|------------------|-------------| +| US-01 | Behandelaar | Nieuwe cliΓ«nt aanmaken met basisgegevens | Kan direct starten met intake | Hoog | +| US-02 | Behandelaar | Intakeverslag schrijven in rich text editor | Flexibel notuleren met opmaak | Hoog | +| US-03 | Behandelaar | Intakeverslag samenvatten met AI | Tijdbesparing, sneller overzicht | Hoog | +| US-04 | Behandelaar | Leesbaarheid verbeteren naar B1-niveau met AI | CliΓ«ntvriendelijke communicatie | Middel | +| US-05 | Behandelaar | AI-suggestie krijgen voor DSM-light categorie en severity | Snellere en consistentere classificatie | Hoog | +| US-06 | Behandelaar | Behandelplan genereren op basis van intake/profiel | EfficiΓ«nter plannen, SMART-doelen | Hoog | +| US-07 | Behandelaar | Gegenereerd plan bewerken en publiceren | Controle over eindresultaat | Hoog | +| US-08 | Behandelaar | Configureren welke dashboard-tegels zichtbaar zijn | Personalisatie werkruimte | Laag | + +### Secundaire User Stories (Stakeholders) + +| ID | Rol | Doel / Actie | Verwachte waarde | Prioriteit | +|----|------|---------------|------------------|-------------| +| US-09 | Product Owner | Demo-flow doorlopen tijdens workshop | Begrijpt AI-toegevoegde waarde | Hoog | +| US-10 | Developer | Zien hoe AI in ECD-proces geΓ―ntegreerd is | Inspiratie voor eigen implementaties | Middel | +| US-11 | Manager | Overzicht van cliΓ«ntdossiers bekijken | Inzicht in werkprocessen | Laag | + +--- + +## 4. Functionele werking per onderdeel + +### 4.1 CliΓ«ntenlijst + +**Doel:** Overzicht van alle geregistreerde cliΓ«nten met mogelijkheid om nieuwe cliΓ«nten toe te voegen. + +**Functionaliteit:** +- **Weergave:** + - Tabel met kolommen: ClientID, Naam (Voornaam + Achternaam), Geboortedatum, Laatste update + - Zoekbalk bovenaan voor filteren op naam of ClientID + - Knop **+ Nieuwe cliΓ«nt** rechtsboven + +- **Acties:** + - Klik op rij β navigeert naar CliΓ«ntdossier (Dashboard) + - Klik **+ Nieuwe cliΓ«nt** β opent modal/drawer met formulier: + - Velden: Voornaam (verplicht), Achternaam (verplicht), Geboortedatum (datum picker) + - Knop **Annuleren** | **Opslaan** + - Bij opslaan: ClientID wordt automatisch gegenereerd (UUID) + +- **States:** + - **Leeg-staat:** "Nog geen cliΓ«nten. Klik op '+ Nieuwe cliΓ«nt' om te starten." + - **Laden:** Skeleton loaders voor tabelrijen + - **Fout:** Toast-melding "Kon cliΓ«nten niet laden. Probeer opnieuw." + +--- + +### 4.2 CliΓ«ntdossier / Dashboard + +**Doel:** Overzichtspagina per cliΓ«nt met configureerbare informatie-tegels. + +**Structuur:** +- **Topbalk:** + - Breadcrumb: CliΓ«nten > [Naam cliΓ«nt] + - Rechtsboven: Knop **Instellingen** (tandwiel-icoon) β opent tegel-configuratie modal + +- **Linkernavigatie (verticaal):** + - Menu-items: Overzicht (actief) | Intakes | Probleemprofiel | Behandelplan | *(Afspraken)* + - Actieve item heeft blauwe accent-bar en lichte achtergrond + +- **Middenpaneel (tegels):** + - Configureerbare tegels (via instellingen aan/uit te zetten): + 1. **Basisgegevens** β ClientID, Naam, Geboortedatum + 2. **Laatste Intake** β titel, datum, eerste 3 regels + "Lees meer..." + 3. **Probleemprofiel** β DSM-light categorie badge + severity badge (Laag/Middel/Hoog) + 4. **Behandelplan** β status (Concept/Gepubliceerd), aantal doelen, laatst bijgewerkt + 5. **Afspraken** β laatste afspraak + eerstvolgende 3 afspraken (optioneel, stretch) + +**Interacties:** +- Klik op tegel β navigeert naar desbetreffende sectie (bv. Intake-tegel β Intakes tab) +- **Instellingen modal:** + - Checkboxes per tegel om zichtbaarheid in/uit te schakelen + - Knop **Opslaan** β slaat voorkeur op (per gebruiker, lokaal) + +--- + +### 4.3 Intakeverslag + +**Doel:** CreΓ«ren en bewerken van intake-notities met rich text en AI-ondersteuning. + +**Layout:** +``` +βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ +β Topbalk: CliΓ«ntnaam | [Opslaan] [AI-acties βΌ] β +βββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββ€ +β Linkernav β Editor (hoofdpaneel) β AI-rail β +β (tabs) β TipTap rich text β (rechts) β +β β β β +βββββββββββββββββ΄ββββββββββββββββββββββββββ΄ββββββββββββββββ€ +β Toast area (meldingen) β +βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ +``` + +**Hoofdpaneel (Editor):** +- **Formulier boven editor:** + - Titel (optioneel): "Intake [datum]" + - Tag dropdown: Intake | Evaluatie | Plan + +- **TipTap rich text editor:** + - Toolbar: Bold, Italic, Underline, Bullet list, Numbered list, Blockquote + - Placeholder: "Noteer hier de intake-informatie..." + - Auto-save indicator: "Opgeslagen om [tijd]" onder editor + +- **Knoppen onder editor:** + - **Opslaan** (primair, blauw) β slaat verslag op + - **AI-acties** dropdown (secundair, grijs): + - Samenvatten + - Verbeter leesbaarheid (B1) + - Extract problemen + +**AI-rail (rechterpaneel):** +- **Initieel:** Leeg met prompt "Selecteer een AI-actie om te beginnen" + +- **Na AI-actie:** + - **Header:** "AI-resultaat: [actienaam]" + loading spinner tijdens verwerking + - **Content area:** + - Voor **Samenvatten**: Bulletpoints van samenvatting + - Voor **Leesbaarheid**: Herschreven tekst (diff-weergave optioneel) + - Voor **Extract**: Voorgestelde categorie + severity + bronzinnen (highlighted in editor) + - **Acties:** + - **Invoegen** (primair) β voegt resultaat in editor toe + - **KopiΓ«ren** (secundair) β kopieert naar clipboard + - **Annuleren** (ghost) β verwerpt resultaat + +**States & feedback:** +- **AI bezig:** Non-blocking spinner in AI-rail + "Genereren..." melding +- **AI fout:** Foutmelding in rail: "Kon niet verwerken. Probeer opnieuw." + retry-knop +- **Opslaan gelukt:** Groene toast "Verslag opgeslagen" +- **Opslaan mislukt:** Rode toast "Kon niet opslaan. Controleer verbinding." + +**AI Source Highlighting (voor Extract):** +- Bronzinnen die AI gebruikt heeft worden gehighlight in de editor (lichtgele achtergrond) +- Highlights verdwijnen bij Invoegen, Annuleren of nieuwe AI-actie + +**Keyboard shortcuts:** +- `Ctrl/Cmd+S`: Opslaan +- `Ctrl/Cmd+K`: Zoeken in tekst +- `Ctrl/Cmd+N`: Nieuw verslag + +--- + +### 4.4 Probleemprofiel (DSM-light) + +**Doel:** Categoriseren van problematiek volgens vereenvoudigde DSM-classificatie met severity-bepaling. + +**Layout:** +- **Formulier (links, 60%):** + - **Categorie** (dropdown, verplicht): + - Stemming / Depressieve klachten + - Angststoornissen + - Gedrags- en impulsstoornissen + - Middelengebruik / Verslaving + - Cognitieve stoornissen + - Context / Psychosociaal + - **Severity** (button group of slider): + - Laag (grijs badge) + - Middel (geel badge) + - Hoog (rood badge) + - **Opmerkingen** (textarea, optioneel): vrij tekstveld voor notities + - **Bronverslag** (readonly): "Gebaseerd op intake [titel] van [datum]" + +- **AI-suggestie paneel (rechts, 40%):** + - **Trigger:** Knop **AI βΊ Analyseer intake** + - **Output:** + - Voorgestelde categorie (highlight) + - Voorgestelde severity (highlight) + - Rationale (korte uitleg, 2-3 zinnen) + - Bronzinnen (quotes uit intake) + - **Acties:** + - **Accepteer suggestie** β vult formulier automatisch in + - **Negeer** β sluit suggestie paneel + +**States:** +- **Geen profiel:** "Nog geen probleemprofiel. Start met AI-analyse of vul handmatig in." +- **AI bezig:** Skeleton loader in suggestie-paneel +- **Opgeslagen:** Groene melding "Probleemprofiel opgeslagen" β activeert Behandelplan tab + +--- + +### 4.5 Behandelplan + +**Doel:** Genereren en bewerken van een gestructureerd behandelplan met SMART-doelen. + +**Structuur:** +- **Header:** + - Versie-indicator: "Concept" (oranje badge) of "Versie X β Gepubliceerd" (groene badge) + - Publicatiedatum (indien gepubliceerd) + +- **Vier secties (cards/accordions):** + + 1. **Doelen** + - Lijst van doelen (bullets, bewerkbaar) + - Voorbeeld: "CliΓ«nt ervaart minder angstklachten in sociale situaties binnen 3 maanden" + - **Micro-AI-actie:** Knop **β» Regenereer** per doel + + 2. **Interventies** + - Lijst van interventies + - Voorbeeld: "Cognitieve gedragstherapie (CGT), 12 sessies" + - **Micro-AI-actie:** Knop **β» Regenereer** per interventie + + 3. **Frequentie/Duur** + - Tekstveld met suggestie + - Voorbeeld: "Wekelijks, 12 weken, 50 minuten per sessie" + + 4. **Meetmomenten** + - Lijst van evaluatiemomenten + - Voorbeeld: "Na 4 sessies, na 8 sessies, afsluiting na 12 sessies" + +**InitiΓ«le generatie:** +- **Trigger:** Knop **AI βΊ Genereer behandelplan** (alleen zichtbaar als probleemprofiel bestaat) +- **Input:** Gebruikt intake-notities + probleemprofiel als context +- **Output:** Vult alle vier secties met voorstellen +- **Feedback:** "Plan gegenereerd. Bekijk en bewerk indien nodig." (blauwe info-toast) + +**Bewerken:** +- Alle velden/bullets zijn inline bewerkbaar (contentEditable of input fields) +- **Auto-save:** Elke wijziging wordt automatisch opgeslagen als concept + +**Publiceren:** +- **Knop:** **Publiceer v[N]** (rechtsboven) +- **Validatie:** Controleer of alle secties gevuld zijn +- **Actie:** + - Wijzigt status van "Concept" naar "Gepubliceerd" + - Verhoogt versienummer + - Timestamp van publicatie + - Concept wordt read-only; nieuwe wijzigingen maken nieuwe versie aan +- **Feedback:** "Behandelplan v1 gepubliceerd" (groene toast) + +**States:** +- **Geen plan:** "Nog geen behandelplan. Genereer met AI of start handmatig." +- **Concept:** Oranje badge, bewerkbaar +- **Gepubliceerd:** Groene badge, read-only met knop **Nieuwe versie** + +--- + +### 4.6 Mini-agenda (stretch, optioneel) + +**Doel:** Afspraken koppelen aan cliΓ«nt voor planning en follow-up. + +**Functionaliteit:** +- Kalenderweergave (week of maand) +- **Nieuwe afspraak:** + - Datum/tijd picker + - Type afspraak (dropdown): Intake | Evaluatie | Behandeling + - Locatie (optioneel) + - Notities (optioneel) +- **Weergave in dashboard:** laatste + eerstvolgende 3 afspraken + +--- + +### 4.7 Rapportage (stretch, optioneel) + +**Doel:** PDF export van volledige cliΓ«ntdossier voor archivering of delen. + +**Functionaliteit:** +- **Knop:** **Exporteer als PDF** in cliΓ«nt-menu +- **Inhoud:** + - Basisgegevens + - Alle intakes (chronologisch) + - Probleemprofiel + - Behandelplan (gepubliceerde versie) + - *(Optioneel)* Afspraken +- **Output:** Downloads PDF met professionele opmaak (logo, headers, footers) + +--- + +## 5. UI-overzicht (visuele structuur) + +### Globale layout (alle schermen) + +``` +ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ +β Topbalk: Logo | Breadcrumb | Zoeken | User menu β +βββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββ€ +β Linkernav β Middenpaneel (content area) β +β (indien actiefβ β Dashboard: tegels β +β in dossier) β β Intake: editor + AI-rail β +β β β Profiel: formulier + suggestie β +β Overzicht β β Plan: secties met doelen/interventies β +β Intakes β β +β Profiel β β +β Plan β β +β (Afspraken) β β +βββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββ€ +β Toast area (rechtsonder): meldingen (success/error/info) β +ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ +``` + +### CliΓ«ntenlijst (geen linkernav) + +``` +ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ +β Topbalk: Logo | Zoeken | [+ Nieuwe cliΓ«nt] β +ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ +β β +β CliΓ«ntenlijst β +β ββββββββββββββββββββββββββββββββββββββββββββββββββββββ β +β β ID β Naam β Geboortedatum β Update β β +β βββββββββΌβββββββββββββββββββΌββββββββββββββββΌβββββββββ€ β +β β C-001 β Jan de Vries β 15-03-1985 β 2u β β +β β C-002 β Maria Jansen β 22-07-1990 β 1d β β +β ββββββββββββββββββββββββββββββββββββββββββββββββββββββ β +β β +ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ +``` + +### Intake-editor met AI-rail + +``` +ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ +β Jan de Vries | [Opslaan] [AI-acties βΌ] β +βββββββββββββββββ¬ββββββββββββββββββββββ¬βββββββββββββββββββββββββ€ +β Overzicht β Editor β AI-rail β +β Intakes β β βββββββββββββββββββ β ββββββββββββββββββββ β +β Profiel β β Titel: [.......]β β β AI-resultaat: β β +β Plan β β Tag: [Intake βΌ] β β β Samenvatting β β +β β βββββββββββββββββββ β β β β +β β β β β’ Punt 1 β β +β β Rich text area... β β β’ Punt 2 β β +β β β β β β +β β β β [Invoegen] β β +β β β β [Annuleren] β β +β β β ββββββββββββββββββββ β +β β [Opslaan] β β +βββββββββββββββββ΄ββββββββββββββββββββββ΄βββββββββββββββββββββββββ€ +β Toast: "Verslag opgeslagen" (groen) β +ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ +``` + +--- + +## 6. Interacties met AI (functionele beschrijving) + +| Locatie | AI-actie | Trigger | Input | Output | Feedback | +|----------|-----------|----------|--------|---------|----------| +| **Intake-editor** | Samenvatten | Klik op **AI βΊ Samenvatten** | TipTap JSON (intake-tekst) | 5-8 bullets in NL | Preview in AI-rail β Invoegen/Annuleren | +| **Intake-editor** | Leesbaarheid (B1) | Klik op **AI βΊ Verbeter leesbaarheid** | TipTap JSON | Herschreven tekst (B1-niveau) | Preview in AI-rail β Invoegen/Annuleren | +| **Intake-editor** | Extract problemen | Klik op **AI βΊ Extract problemen** | TipTap JSON | Categorie + severity + rationale + bronzinnen | Suggestie in AI-rail + highlights in editor | +| **Probleemprofiel** | Analyseer intake | Klik op **AI βΊ Analyseer intake** | Intake-tekst (laatste verslag) | Voorgestelde categorie + severity + rationale | Suggestie-paneel rechts β Accepteren/Negeren | +| **Behandelplan** | Genereer plan | Klik op **AI βΊ Genereer behandelplan** | Intake + probleemprofiel | 4 secties (doelen, interventies, frequentie, meetmomenten) | Vult alle secties β bewerkbaar | +| **Behandelplan** | Regenereer doel | Klik op **β»** bij specifiek doel | Context (huidige doelen + intake) | Nieuw geformuleerd doel (SMART) | Vervangt huidige doel β bewerkbaar | + +**AI-processing states:** +- **Bezig:** Non-blocking spinner + "Genereren..." tekst +- **Succes:** Output verschijnt in preview/suggestie-area +- **Fout:** Rode melding "Kon niet verwerken" + retry-knop +- **Timeout:** "AI-actie duurde te lang. Probeer opnieuw." + +**AI-highlights (Extract problemen):** +- Bronzinnen krijgen lichtgele achtergrond in editor +- Highlights verdwijnen bij: Invoegen, Annuleren, of nieuwe AI-actie +- Implementatie: TipTap Decorations API + +--- + +## 7. Gebruikersrollen en rechten + +**MVP:** Vereenvoudigde autorisatie β alle authenticated users hebben volledige toegang (demo-omgeving). + +| Rol | Toegang tot | Beperkingen | Implementatie | +|------|--------------|-------------|---------------| +| **Demo-user** (MVP) | Alle cliΓ«ntdossiers, alle functies | Alleen fictieve data | Supabase Auth, RLS policy: `auth.uid() IS NOT NULL` | + +**Post-MVP (Roadmap):** + +| Rol | Toegang tot | Beperkingen | +|------|--------------|-------------| +| **Behandelaar** | Eigen cliΓ«ntdossiers + gedeelde dossiers | Kan alleen eigen dossiers bewerken | +| **Manager** | Alle dossiers (read-only) | Geen bewerkingen, alleen rapportages | +| **Admin** | Alles | Volledige CRUD + gebruikersbeheer | + +**Toekomstige implementatie:** +- Multi-tenant: `org_id` kolom in alle tables +- RLS policies: `auth.jwt() ->> 'org_id' = org_id` +- Role-based access: `auth.jwt() ->> 'role'` checks + +--- + +## 8. UX-specificaties (koppeling met stylesheet) + +**Kleurgebruik (zie `/docs/ux-stylesheet.md`):** +- **Primary actions:** `#3B82F6` (blauw) β Opslaan, Publiceren, Invoegen +- **Secondary actions:** `#334155` (grijs) β Annuleren, Terug +- **Success feedback:** `#16A34A` (groen) β toasts, badges +- **Warning/Concept:** `#EAB308` (geel) β concept-status +- **Error:** `#DC2626` (rood) β foutmeldingen + +**Module-accenten:** +- Afspraken: groen (`#E8F8EF` bg, `#16A34A` accent) +- Medicatie/Herinneringen: geel (`#FEF6DC` bg, `#F59E0B` accent) +- Lab/Resultaten: oranje (`#FFEBDC` bg, `#F97316` accent) + +**Toegankelijkheid:** +- Alle tekst voldoet aan WCAG AA contrast (min. 4.5:1) +- Focus rings altijd zichtbaar (2px `#3B82F6`) +- Keyboard navigation volledig ondersteund +- Status niet alleen met kleur: iconen + labels combineren + +--- + +## 9. Demo-scenario (10 minuten) + +**Voorbereiding:** Database seeden met 2-3 fictieve cliΓ«nten (1 met partial data, 1 leeg). + +### Flow A: Nieuwe cliΓ«nt β Intake β AI Samenvatten (4 min) +1. **Start:** CliΓ«ntenlijst (0:00) +2. Klik **+ Nieuwe cliΓ«nt** β vul in: "Test Demo", "Testpersoon", "01-01-1990" β Opslaan (0:30) +3. Navigeer naar nieuwe cliΓ«nt β klik **Intakes** tab (0:45) +4. Klik **+ Nieuw verslag** β typ demo-intake (vooraf geprepareerde tekst plakken) (1:30) +5. Klik **AI βΊ Samenvatten** β toon preview in AI-rail (2:00) +6. Klik **Invoegen** β samenvatting verschijnt in editor (2:30) +7. Klik **Opslaan** β toast "Verslag opgeslagen" (3:00) + +### Flow B: Probleemprofiel genereren β AI suggestie (3 min) +8. Klik **Probleemprofiel** tab (3:15) +9. Klik **AI βΊ Analyseer intake** β toon suggestie (categorie, severity, rationale) (4:00) +10. Highlights verschijnen in editor (source highlighting demo) (4:30) +11. Klik **Accepteer suggestie** β vult formulier (4:45) +12. Klik **Opslaan** β groene toast + Behandelplan tab wordt actief (5:00) + +### Flow C: Behandelplan genereren β Bewerken β Publiceren (3 min) +13. Klik **Behandelplan** tab (5:15) +14. Klik **AI βΊ Genereer behandelplan** β toon alle vier secties (6:00) +15. Bewerk één doel handmatig β auto-save indicator (6:45) +16. Klik **Publiceer v1** β status wijzigt naar "Gepubliceerd" (7:30) +17. Navigeer terug naar **Overzicht** β toon dashboard met tegels (8:00) +18. **(Optioneel)** Demo PDF export (8:30) + +**Afsluiting:** Q&A + discussie AI-toegevoegde waarde (8:30-10:00) + +--- + +## 10. Bijlagen & Referenties + +**Gerelateerde documenten:** +- [PRD (Product Requirements Document)](./prd-mini-ecd.md) +- [TO (Technisch Ontwerp)](./to-mini-ecd.md) +- [UX/UI Stylesheet](./ux-stylesheet.md) +- [API Access Document](./api-acces-mini-ecd.md) + +**Externe referenties:** +- TipTap editor: https://tiptap.dev +- Supabase documentatie: https://supabase.com/docs +- Next.js App Router: https://nextjs.org/docs/app +- Claude AI API: https://docs.anthropic.com/claude/reference + +--- + +**Wijzigingslog:** +- v1.0 (09-11-2025): InitiΓ«le versie voor MVP demo diff --git a/docs/fo_template.txt b/docs/fo_template.txt new file mode 100644 index 0000000..ef3c75b --- /dev/null +++ b/docs/fo_template.txt @@ -0,0 +1,140 @@ +# π§© Functioneel Ontwerp (FO) β Template + +**Projectnaam:** _[vul in]_ +**Versie:** _v1.0_ +**Datum:** _[dd-mm-jjjj]_ +**Auteur:** _[naam]_ + +--- + +## 1. Doel en relatie met het PRD +π― **Doel van dit document:** +Het Functioneel Ontwerp (FO) beschrijft **hoe** het product uit het PRD functioneel zal werken β dus wat de gebruiker ziet, doet en ervaart. Waar het PRD uitlegt *wat en waarom*, laat het FO zien *hoe dit in de praktijk werkt*. + +π **Toelichting aan de lezer:** +Gebruik dit document om een gedeeld beeld te creΓ«ren tussen ontwerp, ontwikkeling en stakeholders. Het FO hoort compact te blijven: één niveau dieper dan het PRD, niet technisch maar functioneel-concreet. + +--- + +## 2. Overzicht van de belangrijkste onderdelen +π― **Doel:** kort overzicht van de modules, schermen of onderdelen binnen de app of tool. +π **Toelichting:** som de kernschermen of modules op (zoals βDashboardβ, βCliΓ«ntenlijstβ, βEditorβ, βAI-railβ). Dit helpt de lezer snel te begrijpen waar het FO over gaat. + +**Voorbeeld:** +1. Dashboard / Overzicht +2. CliΓ«ntdossier +3. Intakeverslag +4. Probleemprofiel +5. Behandelplan +6. *(Optioneel)* Rapportage / Agenda + +--- + +## 3. Userstories (sjabloon + voorbeelden) +π― **Doel:** beschrijven wat gebruikers moeten kunnen doen, vanuit hun perspectief. + +π **Toelichting:** gebruik dit vaste sjabloon: + +**User Story Template:** +> Als [rol/gebruiker] wil ik [doel of actie] zodat [reden/waarde]. + +**Voorbeeld:** +> Als behandelaar wil ik snel een intakeverslag kunnen samenvatten zodat ik sneller tot een behandelplan kom. + +**Aanvullende kolommen (optioneel):** +| ID | Rol | Doel / Actie | Verwachte waarde | Prioriteit | +|----|------|---------------|------------------|-------------| +| US-01 | Behandelaar | Nieuwe cliΓ«nt aanmaken | Kan direct starten met intake | Hoog | +| US-02 | Behandelaar | Intake samenvatten met AI | Tijdbesparing, inzicht | Hoog | +| US-03 | PO | Inzage demo-flow | Begrijpt AI toegevoegde waarde | Middel | + +--- + +## 4. Functionele werking per onderdeel +π― **Doel:** per hoofdonderdeel beschrijven wat de gebruiker kan doen en wat het systeem doet. + +π **Toelichting:** dit is de kern van het FO. Gebruik korte, actiematige beschrijvingen. Focus op gedrag, states en interacties. + +**Voorbeeldstructuur:** + +### 4.1 Dashboard / Overzicht +* Toont kaarten met samenvattingen van cliΓ«ntinformatie (intake, profiel, plan). +* Knoppen: *Nieuw verslag*, *Ga naar behandelplan*. +* Leeg-staat: melding βNog geen dossiersβ. + +### 4.2 Intakeverslag +* Rich text editor met knoppen voor *Opslaan*, *AI-samenvatten*, *Leesbaarheid*. +* AI-resultaat verschijnt in rechterzijpaneel (AI-rail). +* Gebruiker kan *Preview β Invoegen* of *Annuleren*. + +### 4.3 Probleemprofiel +* Formulier met dropdown (categorie) en slider (severity). +* AI-suggestie met bronverwijzing uit intake. +* Bevestigen activeert *Behandelplan* tab. + +### 4.4 Behandelplan +* Vier secties: Doelen, Interventies, Frequentie/Duur, Meetmomenten. +* Gebruiker kan elke sectie aanpassen of regenereren via micro-AI-acties. +* Knoppen: *Opslaan* (concept), *Publiceer v1*. + +--- + +## 5. UI-overzicht (visuele structuur) +π― **Doel:** eenvoudig inzicht geven in de globale schermopbouw. + +π **Toelichting:** gebruik dit als communicatiemiddel met ontwerpers of developers. Het is geen pixel-perfect ontwerp, maar een functionele schets. + +**Voorbeeld (ASCII-layout):** +``` +βββββββββββββββββββββββββββββββββββββββββββββββββ +β Topbalk: cliΓ«ntnaam, acties, zoeken β +βββββββββββββββββ¬ββββββββββββββββββββββββββββββββ€ +β Linkernav β Middenpaneel (inhoud) β +β (Overzicht, β Detail, formulieren, editor) β +β Intake, Prof.)β β +βββββββββββββββββ΄ββββββββββββββββββββββββββββββββ€ +β Footer: status / toasts β +βββββββββββββββββββββββββββββββββββββββββββββββββ +``` + +**Tip:** Combineer dit later met wireframes of UX-schetsen uit Figma of Gamma.app. + +--- + +## 6. Interacties met AI (functionele beschrijving) +π― **Doel:** uitleggen waar AI in de flow voorkomt en wat de gebruiker ziet of verwacht. + +π **Toelichting:** beschrijf per AI-actie kort de trigger, verwerking en output. + +**Voorbeeld:** +| Locatie | AI-actie | Trigger | Output | +|----------|-----------|----------|---------| +| Intake-editor | Samenvatten | Klik op knop *AI βΊ Samenvatten* | Bullets in rechterzijpaneel | +| Intake-editor | Leesbaarheid (B1) | Klik op knop *AI βΊ Leesbaarheid* | Herschreven tekstversie | +| Profiel | Extract problemen | Klik op *AI βΊ Extract* | Categorie + severity + bronzinnen | +| Plan | Genereer behandelplan | Klik op *AI βΊ Plan genereren* | Secties met bewerkbare doelen | + +--- + +## 7. Gebruikersrollen en rechten (optioneel) +π― **Doel:** beschrijven welke rollen toegang hebben tot welke onderdelen. +π **Toelichting:** alleen opnemen als het project meerdere gebruikersgroepen kent. + +**Voorbeeld:** +| Rol | Toegang tot | Beperkingen | +|------|--------------|-------------| +| Behandelaar | Alle cliΓ«ntdossiers | Alleen eigen dossiers bewerken | +| Manager | Rapportages | Geen bewerkingen | +| Demo-user | Alles (fictieve data) | Alleen lezen | + +--- + +## 8. Bijlagen & Referenties +π― **Doel:** linken naar de overige documenten binnen Mission Control. + +**Verwijzingen:** +- PRD (Product Requirements Document) +- TO (Technisch Ontwerp) +- UX/UI-specificatie +- Mission Control / Build Plan +- API Access Document diff --git a/docs/prd_template.txt b/docs/prd_template.txt new file mode 100644 index 0000000..5f5488f --- /dev/null +++ b/docs/prd_template.txt @@ -0,0 +1,109 @@ +# π Product Requirements Document (PRD) β Template + +**Projectnaam:** _[vul in]_ +**Versie:** _v1.0_ +**Datum:** _[dd-mm-jjjj]_ +**Auteur:** _[naam]_ + +--- + +## 1. Doelstelling +π― **Doel van deze sectie:** Beschrijf waarom dit product of prototype wordt gebouwd en wat het beoogde resultaat is. +π **Toelichting:** Geef een korte samenvatting van het *waarom* van dit project. Wat wil je aantonen, oplossen of verbeteren? Benoem ook of het om een demo, MVP of productieversie gaat. + +**Voorbeeld:** +> Een werkend prototype dat de waarde van AI toont binnen het zorgdossierproces: intake β analyse β behandelplan. De focus ligt op snelheid, eenvoud en AI-toepasbaarheid. + +--- + +## 2. Doelgroep +π― **Doel:** Schets wie de eindgebruikers, stakeholders en testers zijn. +π **Toelichting:** Omschrijf de primaire doelgroepen (bijv. zorgprofessionals, developers, managers) en hun belangrijkste behoeften of problemen. Vermeld eventueel personaβs of gebruikersscenarioβs. + +**Voorbeeld:** +> - **Product Owners & Managers:** inzicht in AI als hulpmiddel. +> - **Developers:** inspiratie voor AI-integratie. +> - **Zorgprofessionals:** herkenbare workflows met directe meerwaarde. + +--- + +## 3. Kernfunctionaliteiten (MVP-scope) +π― **Doel:** Afbakenen van de minimale werkende functies. +π **Toelichting:** Maak een genummerde lijst van functies die in deze versie moeten werken. Beschrijf elke functie kort (input, output, interactie) en markeer *stretch-features* of optionele uitbreidingen. + +**Voorbeeld:** +1. **CliΓ«ntbeheer:** aanmaken, bekijken en selecteren. +2. **Intakeverslag:** rich text editor met AI-samenvatting. +3. **Probleemprofiel:** AI-extractie van categorie/severity. +4. **Behandelplan:** AI-genereerbare doelen/interventies. +5. *(Stretch)* PDF-export en mini-agenda. + +--- + +## 4. Gebruikersflows (Demo- of MVP-flows) +π― **Doel:** Laten zien hoe de gebruiker stap-voor-stap door het systeem gaat. +π **Toelichting:** Beschrijf 2β4 concrete "flows" in stappen (input β actie β resultaat). + +**Voorbeeld:** +1. Nieuwe cliΓ«nt aanmaken β Intake invullen β AI-samenvatten. +2. Intake analyseren β AI-suggestie β Probleemprofiel genereren. +3. Profiel bevestigen β AI-behandelplan genereren β Publiceer v1. + +--- + +## 5. Niet in Scope +π― **Doel:** Duidelijk maken wat (nog) niet wordt gebouwd. +π **Toelichting:** Noem features of modules die bewust buiten deze versie vallen. Dit voorkomt ruis en scope creep. + +**Voorbeeld:** +> Rollenbeheer, koppelingen met externe systemen (Teams, ECD), productie-grade beveiliging. + +--- + +## 6. Succescriteria +π― **Doel:** Objectieve meetlat voor een geslaagde oplevering. +π **Toelichting:** Formuleer concrete, toetsbare criteria. + +**Voorbeeld:** +- Demo duurt β€ 10 minuten. +- AI-output zichtbaar en bewerkbaar. +- Geen fouten bij standaardflows. +- Minimaal 1 live testgebruiker. + +--- + +## 7. Risicoβs & Mitigatie +π― **Doel:** Risicoβs vroeg signaleren en plannen hoe ermee om te gaan. +π **Toelichting:** Beschrijf de belangrijkste risicoβs en hoe je ze voorkomt of opvangt. + +**Voorbeeld:** +| Risico | Impact | Mitigatie | +|--------|---------|------------| +| AI-output inconsistent | Hoog | Prompts testen, fallback responses voorbereiden | +| Scope creep | Middel | Scope afbakenen in PRD en Mission Control | +| Privacy | Laag | Alleen demo-data gebruiken | + +--- + +## 8. Roadmap / Vervolg (Post-MVP) +π― **Doel:** Richting geven aan toekomstige uitbreidingen. +π **Toelichting:** Beschrijf logische vervolgstappen na de MVP. + +**Voorbeeld:** +- Rollen & rechtenbeheer +- Auditlog + versiebeheer +- Trendanalyse +- Integratie met bestaande zorgsystemen (PinkRoccade, Nedap, etc.) + +--- + +## 9. Bijlagen & Referenties +π― **Doel:** Bronnen koppelen voor context en consistentie. +π **Toelichting:** Verwijs naar ondersteunende documenten of interne kennisbestanden. + +**Voorbeeld:** +- FO (Functioneel Ontwerp) +- TO (Technisch Ontwerp) +- UX/UI-specificatie +- Mission Control / Build Plan +- API Access Document diff --git a/docs/to_template.txt b/docs/to_template.txt new file mode 100644 index 0000000..39e20a6 --- /dev/null +++ b/docs/to_template.txt @@ -0,0 +1,268 @@ +# βοΈ Technisch Ontwerp (TO) β Template + +**Projectnaam:** _[vul in]_ +**Versie:** _v1.0_ +**Datum:** _[dd-mm-jjjj]_ +**Auteur:** _[naam]_ + +--- + +## 1. Doel en relatie met PRD en FO +π― **Doel van dit document:** +Het Technisch Ontwerp (TO) beschrijft **hoe** het systeem technisch wordt gebouwd. Waar het PRD het *wat* beschrijft en het FO het *hoe functioneel*, gaat het TO over architectuur, techstack, data en infrastructuur. + +π **Toelichting:** +Gebruik dit document om technische keuzes te onderbouwen en developers een duidelijk beeld te geven van de technische implementatie. + +--- + +## 2. Technische Architectuur Overzicht +π― **Doel:** Globaal beeld van de systeemarchitectuur. +π **Toelichting:** Schets de hoofdcomponenten en hun relaties. + +**Voorbeeld (high-level):** +``` +βββββββββββββββ ββββββββββββββββ βββββββββββββββ +β Frontend ββββββΆβ Backend ββββββΆβ Database β +β (Next.js) β β (API Routes)β β (Supabase) β +βββββββββββββββ ββββββββββββββββ βββββββββββββββ + β β + β βΌ + β ββββββββββββββββ + ββββββββββββΆβ AI Services β + β (OpenAI/etc) β + ββββββββββββββββ +``` + +--- + +## 3. Techstack Selectie +π― **Doel:** Onderbouwde keuze van technologieΓ«n. +π **Toelichting:** Beschrijf per component welke technologie je kiest en waarom. + +**Voorbeeld:** +| Component | Technologie | Argumentatie | Alternatieven | +|-----------|-------------|--------------|---------------| +| Frontend | Next.js 15 | React framework, SSR, goede DX | SvelteKit, Remix | +| Backend | Next.js API Routes | Co-located met frontend, TypeScript | Express, FastAPI | +| Database | Supabase (PostgreSQL) | Realtime, auth included, gratis tier | Firebase, PlanetScale | +| AI | OpenAI GPT-4 | Betrouwbaar, goede docs, Nederlands | Claude, Gemini | +| Styling | TailwindCSS | Utility-first, snel prototypen | styled-components | +| Hosting | Vercel | Zero-config Next.js, preview deploys | Netlify, Railway | + +--- + +## 4. Datamodel +π― **Doel:** Structuur van de data in de database. +π **Toelichting:** Beschrijf de belangrijkste tabellen/collections en hun relaties. + +**Voorbeeld (PostgreSQL):** +```sql +-- Users +users ( + id UUID PRIMARY KEY, + email TEXT UNIQUE, + name TEXT, + role TEXT, + created_at TIMESTAMP +) + +-- Clients +clients ( + id UUID PRIMARY KEY, + name TEXT, + user_id UUID REFERENCES users(id), + created_at TIMESTAMP +) + +-- Intakes +intakes ( + id UUID PRIMARY KEY, + client_id UUID REFERENCES clients(id), + content TEXT, + ai_summary TEXT, + created_at TIMESTAMP +) +``` + +**ERD (optioneel):** +``` +users β1:Nβ clients β1:Nβ intakes +``` + +--- + +## 5. API Ontwerp +π― **Doel:** Overzicht van belangrijkste endpoints. +π **Toelichting:** Beschrijf REST/GraphQL endpoints, input/output en authenticatie. + +**Voorbeeld (REST):** +| Endpoint | Method | Input | Output | Auth | +|----------|--------|-------|--------|------| +| `/api/clients` | GET | - | `Array