Files
triqura-ecd/docs/swift/bouwplan-swift-diagnostiek-workflow-beoordeling.md
colinislit 3e94271827 feat: complete E2.S5 Input → Block wiring
- Implementeer handleSubmit met API call naar /api/intent/classify
- Voeg error handling en fallback naar dagnotitie toe
- Integreer openBlock en addRecentAction
- Update bouwplan: Epic 2 compleet (33 SP done, 46%)
2025-12-24 08:44:40 +01:00

22 KiB

📋 Beoordeling Bouwplan Swift: Diagnostiek Workflow

Datum: 23-12-2024
Beoordelaar: AI Code Review
Versie: v1.0


Executive Summary

Algemene Beoordeling: HAALBAAR met enkele kritieke aanvullingen

Het bouwplan is goed gestructureerd en bouwt slim voort op bestaande componenten. De geschatte 21 story points voor 2 weken zijn realistisch, maar er zijn enkele belangrijke technische hiaten die eerst opgelost moeten worden voordat de implementatie kan starten.

Kritieke Bevindingen:

  1. Report type "diagnostiek" ontbreekt in REPORT_TYPES enum
  2. Swift intent types moeten uitgebreid worden met nieuwe intents
  3. ⚠️ Entity extraction voor datum/tijd parsing ontbreekt in plan
  4. ⚠️ Intake selectie voor diagnoses niet duidelijk uitgewerkt
  5. Hergebruik componenten is goed geanalyseerd en realistisch

Blokkerende Bevindingen (Swift Foundation - 24-12-2024): 6. 🔴 E2.S5 Input → Block wiring ontbreekt - handleSubmit is placeholder 7. 🔴 CanvasArea block rendering ontbreekt - Blocks worden niet gerenderd 8. 🔴 P1 Blocks (E3) niet geïmplementeerd - DagnotatieBlock, ZoekenBlock, OverdrachtBlock bestaan niet 9. ⚠️ Type duplicatie - SwiftIntent in zowel types.ts als swift-store.ts


1. Compleetheid Analyse

1.1 Sterke Punten

Goed Gedocumenteerd:

  • Duidelijke epic/story breakdown met acceptatiecriteria
  • Realistische effort schattingen (21 SP voor 2 weken)
  • Goede referenties naar bestaande code
  • Testplan met concrete checklists
  • Risico analyse met mitigaties

Technische Analyse:

  • Correcte identificatie van hergebruikbare componenten
  • Wrapper pattern goed uitgelegd
  • API routes strategie is logisch

1.2 Ontbrekende Elementen

Kritiek: Report Type "diagnostiek"

Probleem:
Het bouwplan noemt het toevoegen van report type "diagnostiek" (regel 179), maar dit type bestaat niet in de REPORT_TYPES enum.

Huidige situatie:

// lib/types/report.ts
export const REPORT_TYPES = [
  'voortgang', 'observatie', 'incident', 'medicatie', 'contact',
  'crisis', 'intake', 'behandeladvies', 'vrije_notitie', 'verpleegkundig'
] as const;

Impact:

  • Database validatie zal falen bij POST /api/reports met type "diagnostiek"
  • Zod schema moet uitgebreid worden
  • Mogelijk database constraint check nodig

Aanbeveling:
Voeg story toe: E-D1.S0: Report type "diagnostiek" toevoegen (1 SP)

  • Update REPORT_TYPES enum
  • Update Zod schema CreateReportSchema
  • Database migratie indien nodig (check constraints)

Kritiek: Swift Intent Types Uitbreiding

Probleem:
Het bouwplan beschrijft nieuwe intent patterns, maar de SwiftIntent type definitie moet uitgebreid worden.

Huidige situatie:

// lib/swift/types.ts
export type SwiftIntent = 'dagnotitie' | 'zoeken' | 'overdracht' | 'unknown';

Nodig:

export type SwiftIntent = 
  | 'dagnotitie' 
  | 'zoeken' 
  | 'overdracht' 
  | 'afspraak_maken'      // NIEUW
  | 'rapportage'          // NIEUW
  | 'diagnose_bekijken'   // NIEUW
  | 'diagnose_toevoegen'  // NIEUW
  | 'diagnose_wijzigen'   // NIEUW
  | 'unknown';

Impact:

  • TypeScript compile errors zonder deze uitbreiding
  • Block configs moeten uitgebreid worden
  • Intent classifier moet nieuwe types ondersteunen

Aanbeveling:
Voeg toe aan E-D1.S1 en E-D2.S1:

  • Update SwiftIntent type
  • Update BLOCK_CONFIGS met nieuwe block types
  • Update BlockType type (exclude 'unknown')

Waarschuwing: Entity Extraction voor Datum/Tijd

Probleem:
Het bouwplan beschrijft intent patterns die datum/tijd moeten extraheren (bijv. "morgen 10:00"), maar er is geen plan voor entity extraction van deze waarden.

Voorbeeld uit plan:

/^afspraak\s+(\w+)\s+(morgen|vandaag)\s+(\d{1,2}:\d{2})/i

Ontbrekend:

  • Functie om "morgen" → Date object te converteren
  • Functie om "10:00" → tijd te parseren
  • Validatie van datum/tijd combinaties
  • Fallback naar date picker bij onduidelijke input

Huidige situatie:
lib/swift/entity-extractor.ts bestaat, maar bevat alleen patient name extraction.

Aanbeveling:
Voeg toe aan E-D1.S1:

  • extractDateTime(input: string): { date?: Date; time?: string }
  • Integratie met date-fns voor Nederlandse datum parsing
  • Fallback logica voor onduidelijke input

Waarschuwing: Intake Selectie voor Diagnoses

Probleem:
Het bouwplan beschrijft diagnose toevoegen, maar DiagnosisDetailForm vereist een intakeId (encounter_id). Het plan beschrijft niet hoe dit wordt bepaald vanuit Swift context.

Huidige situatie:

// app/epd/patients/[id]/diagnose/components/diagnosis-detail-form.tsx
// Vereist: intakes array en selectedIntakeId

Vragen:

  • Moet Swift automatisch de laatste intake selecteren?
  • Moet Swift een intake selector tonen?
  • Kan diagnose zonder intake (direct encounter koppeling)?

Aanbeveling:
Voeg toe aan E-D2.S3:

  • Beslissing: automatisch laatste intake of selector tonen
  • Documenteer in acceptatiecriteria
  • Update DiagnoseFormBlock implementatie

1.3 ⚠️ Onduidelijkheden

Appointment Modal Hergebruik

Vraag:
Het plan zegt "80% hergebruik" van AppointmentModal, maar deze component is een Dialog met veel interne state. Hoe wordt dit geïntegreerd in Swift blocks?

Huidige situatie:

  • AppointmentModal is een volledig Dialog component
  • Swift blocks gebruiken BlockContainer (geen Dialog)
  • Dark theme styling moet aangepast worden

Aanbeveling:
Clarificeer in E-D1.S2:

  • Option A: Extract form logica naar shared component, wrapper in beide contexts
  • Option B: Hergebruik AppointmentModal maar wrap in BlockContainer (mogelijk styling issues)
  • Option C: Nieuwe Swift-specifieke component met shared business logic

Encounter ID Callback Pattern

Vraag:
Het plan zegt "encounter_id teruggeven via callback", maar hoe wordt dit gebruikt voor de volgende stap (rapportage)?

Scenario:

  1. User: "afspraak diagnostiek jan morgen 10:00"
  2. AfspraakBlock → encounter_id = "abc-123"
  3. User: "rapportage diagnostiek gesprek met jan"
  4. Hoe weet RapportageBlock dat encounter_id "abc-123" moet gebruiken?

Aanbeveling:
Clarificeer:

  • Option A: Swift store houdt laatste encounter_id bij per patient
  • Option B: User moet encounter expliciet selecteren
  • Option C: AI fallback om encounter te matchen op datum/tijd

2. Haalbaarheid Analyse

2.1 Realistische Schattingen

Story Points Breakdown:

  • E-D1.S1: 2 SP (intent patterns) → Realistisch
  • E-D1.S2: 5 SP (AfspraakBlock) → Realistisch (met hergebruik)
  • E-D1.S3: 4 SP (RapportageBlock) → Realistisch
  • E-D2.S1: 2 SP (intent patterns) → Realistisch
  • E-D2.S2: 3 SP (DiagnoseBlock) → Realistisch
  • E-D2.S3: 5 SP (DiagnoseFormBlock) → Realistisch

Totaal: 21 SP voor 2 weken = ~10 SP/week
Dit is haalbaar voor 1 developer met goede focus.

2.2 ⚠️ Risico's op Vertraging

Hoog Risico:

  1. Appointment Modal Integratie (E-D1.S2)

    • Hergebruik Dialog component in Block context kan complex zijn
    • Styling aanpassingen kunnen meer tijd kosten dan geschat
    • Mitigatie: Start met proof-of-concept, pas schatting aan indien nodig
  2. Datum/Tijd Parsing (E-D1.S1)

    • Nederlandse datum parsing ("morgen", "volgende week") kan edge cases hebben
    • Tijdzone handling voor afspraken
    • Mitigatie: Gebruik date-fns met Nederlandse locale, test grondig

Middel Risico:

  1. ICD-10 Zoeker Verbetering (E-D2.S3)

    • Plan zegt "fuzzy search verbeteren" maar geeft geen specificaties
    • Bestaande zoeker werkt al redelijk goed
    • Mitigatie: Eerst testen of verbetering nodig is, anders scope verkleinen
  2. Encounter Koppeling (E-D1.S3)

    • Automatische koppeling tussen afspraak en rapportage kan complex zijn
    • Mitigatie: Start met optionele koppeling, voeg automatische matching later toe

2.3 Goede Foundation

Bestaande Componenten:

  • AppointmentModal bestaat en is goed gestructureerd
  • ReportComposer bestaat en ondersteunt al linkedEncounterId
  • DiagnosisDetailForm bestaat met ICD-10 zoeker
  • Actions bestaan en zijn herbruikbaar
  • ICD-10 zoeker werkt al met fuzzy search

Bestaande Infrastructuur:

  • Swift foundation (Command Center, Intent Classification) werkt
  • Block system bestaat (BlockContainer)
  • API routes pattern is duidelijk
  • Supabase RLS policies zijn al geïmplementeerd

3. Technische Aanbevelingen

3.1 Kritieke Toevoegingen

Story E-D1.S0: Report Type "diagnostiek" (NIEUW - 1 SP)

Beschrijving:
Voeg report type "diagnostiek" toe aan het systeem.

Acceptatiecriteria:

  • REPORT_TYPES enum bevat "diagnostiek"
  • Zod schema CreateReportSchema accepteert "diagnostiek"
  • Database constraint check (indien nodig)
  • QuickActions component toont "diagnostiek" optie (indien van toepassing)

Technical Notes:

// lib/types/report.ts
export const REPORT_TYPES = [
  // ... bestaande types
  'diagnostiek', // NIEUW
] as const;

Story E-D1.S1 Uitbreiding: Entity Extraction

Toevoegen aan E-D1.S1:

  • extractDateTime(input: string) functie
  • Nederlandse datum parsing ("morgen", "vandaag", "volgende week")
  • Tijd parsing ("10:00", "14:30")
  • Fallback naar date picker bij onduidelijke input

Technical Notes:

// lib/swift/entity-extractor.ts
export function extractDateTime(input: string): {
  date?: Date;
  time?: string;
  confidence: number;
} {
  // Parse "morgen 10:00" → { date: tomorrow, time: "10:00" }
  // Parse "vandaag 14:30" → { date: today, time: "14:30" }
  // Return confidence voor fallback beslissing
}

Story E-D2.S3 Uitbreiding: Intake Selectie

Clarificatie nodig:

  • Beslissing: automatisch laatste intake of selector?
  • Documenteer in acceptatiecriteria
  • Implementeer gekozen aanpak

Aanbeveling:
Automatisch laatste intake selecteren, met optie om te wijzigen:

// DiagnoseFormBlock
const intakes = await getPatientIntakes(patientId);
const defaultIntakeId = intakes[0]?.id; // Laatste intake
// Toon dropdown indien meerdere intakes beschikbaar

3.2 Verbeteringen

Intent Patterns Verbeteren

Huidige patterns zijn te specifiek:

// Te specifiek - mist veel variaties
/^afspraak\s+(diagnostiek|behandeling)\s+(\w+)/i

Aanbeveling:
Voeg meer variaties toe:

afspraak_maken: [
  // Basis patterns
  { pattern: /^afspraak\s+(diagnostiek|behandeling)\s+(\w+)/i, weight: 1.0 },
  { pattern: /^plan\s+(diagnostiek|behandeling)\s+(\w+)/i, weight: 0.95 },
  
  // Met datum/tijd
  { pattern: /^afspraak\s+(\w+)\s+(morgen|vandaag)\s+(\d{1,2}:\d{2})/i, weight: 1.0 },
  { pattern: /^plan\s+(\w+)\s+(morgen|vandaag)\s+(\d{1,2}:\d{2})/i, weight: 0.95 },
  
  // Zonder type (default diagnostiek)
  { pattern: /^afspraak\s+(\w+)\s+(morgen|vandaag)/i, weight: 0.85 },
  
  // Alleen "afspraak" met patient naam
  { pattern: /^afspraak\s+(\w+)/i, weight: 0.7 },
],

API Routes Specificatie

Huidige beschrijving is te vaag:

// app/api/appointments/route.ts
export async function POST(request: NextRequest) {
  // Wrapper rond app/epd/agenda/actions.ts createEncounter
  // Retourneert encounter_id voor volgende stap
}

Aanbeveling:
Specificeer volledige API contract:

// POST /api/appointments
// Request body:
{
  patientId: string;
  periodStart: string; // ISO 8601
  periodEnd?: string;
  typeCode: 'diagnostiek' | 'behandeling' | ...;
  typeDisplay: string;
  classCode: 'AMB' | 'HH' | 'VR';
  classDisplay: string;
  notes?: string;
}

// Response:
{
  success: boolean;
  data?: {
    id: string; // encounter_id
    // ... andere encounter velden
  };
  error?: string;
}

4. Testplan Verbeteringen

4.1 Ontbrekende Test Cases

Entity Extraction Tests:

  • "morgen 10:00" → correcte datum + tijd
  • "vandaag 14:30" → correcte datum + tijd
  • "volgende week maandag" → correcte datum
  • "afspraak jan" → alleen patient, geen datum → fallback date picker
  • "afspraak jan morgen" → patient + datum, geen tijd → fallback time picker

Encounter Koppeling Tests:

  • Afspraak aanmaken → encounter_id opgeslagen
  • Rapportage met encounter_id → correct gekoppeld
  • Rapportage zonder encounter_id → optioneel (geen error)
  • Meerdere encounters opzelfde dag → juiste selectie

Diagnose Intake Tests:

  • Patiënt met 1 intake → automatisch geselecteerd
  • Patiënt met meerdere intakes → laatste geselecteerd
  • Patiënt zonder intakes → error/fallback

4.2 Integration Test Scenarios

End-to-End Flow:

1. "afspraak diagnostiek jan morgen 10:00"
   → AfspraakBlock opent
   → Patient "jan" gevonden
   → Datum: morgen
   → Tijd: 10:00
   → Type: diagnostiek
   → Opslaan → encounter_id = "abc-123"

2. "rapportage diagnostiek gesprek met jan"
   → RapportageBlock opent
   → Patient "jan" gevonden
   → Type: diagnostiek
   → Encounter: "abc-123" (laatste encounter van jan)
   → Content invoeren
   → Opslaan → report gekoppeld aan encounter

3. "diagnose jan"
   → DiagnoseBlock opent
   → Overzicht diagnoses van jan
   → Filter: Actief

4. "diagnose toevoegen jan F41.1"
   → DiagnoseFormBlock opent
   → Patient: jan
   → ICD-10: F41.1 (pre-filled)
   → Intake: laatste intake (automatisch)
   → Type: nevendiagnose (default)
   → Opslaan → diagnose toegevoegd

5. Swift Foundation Status (24-12-2024)

BELANGRIJK: De diagnostiek workflow bouwt voort op de Swift foundation (bouwplan-swift-v1.md). De foundation is nog niet compleet, waardoor de diagnostiek workflow nog niet kan starten.

5.1 Foundation Status Overzicht

Epic Status Impact op Diagnostiek
E0 Setup & Foundation Done Geen blokkade
E1 Command Center Done Geen blokkade
E2 Intent Classification In Progress 🔴 BLOKKADE
E3 P1 Blocks To Do 🔴 BLOKKADE
E4 Navigation & Auth To Do Geen blokkade
E5 Polish & Testing To Do Geen blokkade

5.2 Blokkerende Issues

🔴 Blokkade 1: E2.S5 Input → Block Wiring

Huidige situatie:

// components/swift/command-center/command-input.tsx:120
const handleSubmit = async (e: React.FormEvent) => {
  // TODO: Process intent (E2)
  console.log('Submit:', inputValue);
  clearInput();
};

Probleem: De intent classificatie API bestaat (/api/intent/classify), maar wordt niet aangeroepen. Het resultaat wordt niet gebruikt om openBlock() aan te roepen.

Impact: Zonder deze wiring kan geen enkel block geopend worden via tekst/spraak input.

Story toegevoegd aan bouwplan-swift-v1.md (v1.5):

| E2.S5 | Input → Block wiring | CommandInput submit → API → openBlock | ⏳ | E2.S4 | 2 |

🔴 Blokkade 2: CanvasArea Block Rendering

Huidige situatie:

// components/swift/command-center/canvas-area.tsx:18
{activeBlock ? (
  <div className="text-slate-400">Block: {activeBlock}</div>  // ← Placeholder!
) : (
  <EmptyState />
)}

Probleem: De CanvasArea toont alleen placeholder tekst, niet de daadwerkelijke block componenten. Er is geen switch/case of dynamic import voor de block types.

Impact: Zelfs als E2.S5 werkt, worden blocks niet zichtbaar.

Aanbeveling: Voeg story E3.S0 toe aan bouwplan-swift-v1.md:

| E3.S0 | CanvasArea block rendering | Switch/case voor block types, prefill doorgeven | ⏳ | E2.S5 | 2 |

🔴 Blokkade 3: P1 Blocks Bestaan Niet

Huidige situatie:

// components/swift/blocks/index.ts
export { BlockContainer } from './block-container';

// Commented out - bestaan niet:
// export { DagnotatieBlock } from './dagnotitie-block';
// export { ZoekenBlock } from './zoeken-block';
// export { OverdrachtBlock } from './overdracht-block';

Probleem: De diagnostiek workflow voegt nieuwe blocks toe (AfspraakBlock, RapportageBlock, DiagnoseBlock), maar de basis P1 blocks waar deze op voortbouwen bestaan nog niet.

Impact:

  • DagnotatieBlock is nodig als referentie voor RapportageBlock
  • ZoekenBlock is nodig voor patient selectie in alle flows
  • BlockContainer bestaat wel, maar is nog niet getest met echte content

Aanbeveling: Implementeer eerst E3.S2 (DagnotatieBlock) als proof-of-concept voordat diagnostiek workflow start.

⚠️ Waarschuwing: Type Duplicatie

Huidige situatie:

// lib/swift/types.ts
export type SwiftIntent = 'dagnotitie' | 'zoeken' | 'overdracht' | 'unknown';

// stores/swift-store.ts (DUPLICAAT)
export type SwiftIntent = 'dagnotitie' | 'zoeken' | 'overdracht' | 'unknown';

Impact: Bij uitbreiding van intents voor diagnostiek workflow moet dit op twee plekken bijgewerkt worden. Vergeten leidt tot TypeScript errors.

Aanbeveling: Verwijder duplicaat uit swift-store.ts, importeer uit types.ts.

5.3 Dependency Chain voor Diagnostiek

Swift Foundation (moet eerst af)
├── E2.S5 Input → Block wiring          ← BLOKKADE
│   └── handleSubmit() roept API aan
│   └── openBlock() bij succes
│
├── E3.S0 CanvasArea block rendering    ← BLOKKADE (ontbreekt in plan)
│   └── Switch/case voor block types
│   └── Prefill data doorgeven
│
├── E3.S2 DagnotatieBlock               ← BLOKKADE
│   └── Referentie voor RapportageBlock
│   └── Test case voor block rendering
│
└── E3.S3 Patient Search API            ← BLOKKADE
    └── Nodig voor patient selectie

Diagnostiek Workflow (kan dan starten)
├── E-D1.S0 Report type "diagnostiek"
├── E-D1.S1 Intent patterns uitbreiden
├── E-D1.S2 AfspraakBlock
├── E-D1.S3 RapportageBlock
├── E-D2.S1 Diagnose intent patterns
├── E-D2.S2 DiagnoseBlock
└── E-D2.S3 DiagnoseFormBlock

5.4 Geschatte Effort voor Foundation Completion

Story SP Status
E2.S5 Input → Block wiring 2 Nieuw toegevoegd
E3.S0 CanvasArea rendering 2 Aanbevolen
E3.S2 DagnotatieBlock 5 Gepland
E3.S3 Patient Search API 3 Gepland
Subtotaal 12

Totale effort voor werkende demo:

  • Swift Foundation completion: 12 SP
  • Diagnostiek Workflow: 22 SP
  • Totaal: 34 SP

6. Conclusie & Aanbevelingen

6.1 Algemene Beoordeling

Compleetheid Diagnostiek Plan: ⚠️ 7/10

  • Goede structuur en breakdown
  • Enkele kritieke technische details ontbreken
  • Entity extraction niet volledig uitgewerkt

Compleetheid Swift Foundation: ⚠️ 5/10

  • E0-E2.S4 solide geïmplementeerd
  • E2.S5 wiring ontbreekt (kritiek)
  • E3 blocks niet gebouwd (kritiek)
  • CanvasArea rendering niet in plan

Haalbaarheid: ⚠️ 6/10 (was 8/10)

  • Foundation moet eerst af voordat diagnostiek kan starten
  • Extra 12 SP nodig voor foundation completion
  • Totale effort: 34 SP i.p.v. 22 SP

6.2 Aanbevelingen voor Start

Voor Start:

  1. Voeg E-D1.S0 toe: Report type "diagnostiek" (1 SP)
  2. Uitbreid E-D1.S1: Entity extraction voor datum/tijd (extra 1 SP)
  3. Clarificeer E-D2.S3: Intake selectie strategie
  4. Update SwiftIntent type definitie
  5. Proof-of-concept AppointmentModal integratie

Tijdens Implementatie:

  1. Start met E-D1.S0 (report type) - basis voor alles
  2. Test entity extraction grondig voordat je verder gaat
  3. Itereer op AppointmentModal integratie (mogelijk meer tijd nodig)
  4. Houd rekening met edge cases in datum parsing

Na Implementatie:

  1. Uitgebreide end-to-end tests
  2. Performance testen (intent classification snelheid)
  3. UX feedback verzamelen
  4. Documentatie updaten

6.3 Aangepaste Story Breakdown

Swift Foundation (moet eerst af):

  • E2.S5: Input → Block wiring (2 SP) NIEUW
  • E3.S0: CanvasArea block rendering (2 SP) AANBEVOLEN
  • E3.S2: DagnotatieBlock (5 SP)
  • E3.S3: Patient Search API (3 SP)
  • Subtotaal Foundation: 12 SP

Epic D1 — Afspraak & Rapportage (12 SP totaal):

  • E-D1.S0: Report type "diagnostiek" toevoegen (1 SP) NIEUW
  • E-D1.S1: Intent patterns + entity extraction (3 SP) ⬆️ +1 SP
  • E-D1.S2: AfspraakBlock (5 SP)
  • E-D1.S3: RapportageBlock uitbreiden (4 SP)

Epic D2 — Diagnose Beheer (10 SP totaal):

  • E-D2.S1: Intent patterns uitbreiden (2 SP)
  • E-D2.S2: DiagnoseBlock (3 SP)
  • E-D2.S3: DiagnoseFormBlock (5 SP)

Totalen:

  • Swift Foundation completion: 12 SP
  • Diagnostiek Workflow: 22 SP
  • Totaal: 34 SP

6.4 Finale Oordeel

⚠️ HOLD - Foundation eerst afronden

Het diagnostiek bouwplan is goed gestructureerd, maar kan nog niet starten omdat de Swift foundation incompleet is.

Kritieke blokkades:

  1. E2.S5 (handleSubmit wiring) - toegevoegd aan bouwplan v1.5
  2. E3.S0 (CanvasArea rendering) - moet nog toegevoegd worden
  3. E3.S2 (DagnotatieBlock) - moet gebouwd worden als referentie
  4. E3.S3 (Patient Search API) - nodig voor alle patient selectie

Aanbevolen volgorde:

Week 1: Foundation completion (12 SP)
├── E2.S5 Input → Block wiring
├── E3.S0 CanvasArea rendering
├── E3.S2 DagnotatieBlock
└── E3.S3 Patient Search API

Week 2-3: Diagnostiek Workflow (22 SP)
├── E-D1.S0 Report type
├── E-D1.S1 Intent patterns
├── E-D1.S2 AfspraakBlock
├── E-D1.S3 RapportageBlock
├── E-D2.S1 Diagnose patterns
├── E-D2.S2 DiagnoseBlock
└── E-D2.S3 DiagnoseFormBlock

GO voor implementatie zodra foundation stories zijn afgerond.


Versiehistorie:

Versie Datum Auteur Wijziging
v1.0 23-12-2024 AI Review Initiële beoordeling
v1.1 24-12-2024 Claude Swift Foundation status toegevoegd (sectie 5), blokkerende issues geïdentificeerd, finale oordeel aangepast naar HOLD