Epic 2 compleet: NLP-helpers voor datum en tijd interpretatie.
Implementatie:
- parseRelativeDate(): ondersteunt "vandaag", "morgen", "deze week",
weekdagen (maandag-zondag), en absolute datums (30 december, 28-12-2024)
- parseTime(): ondersteunt "14:00", "14", "half drie", "kwart voor drie",
en natuurlijke taal tijdsaanduidingen
- combineDatetime(): combineert datum + tijd naar ISO string
- isNotInPast(): validatie voor toekomstige datums
- isDateRange(): type guard voor datum ranges
Integratie:
- Entity extractor gebruikt date/time parser voor agenda intents
- Normaliseert ruwe strings ("morgen", "14:00") naar Date objecten
- Ondersteunt Nederlandse tijdsaanduidingen
Tests & validatie:
- Unit tests voor alle parser functies
- Verify script voor handmatige testing
- Review document met bevindingen en suggesties
Story points: 7 SP (E2.S1: 3, E2.S2: 2, E2.S3: 2)
2.1 KiB
2.1 KiB
Epic 2 Review Findings
Context: quick review of Epic 2 changes (date/time parsing + agenda entity extraction).
Findings
-
High - Patient name detection is too permissive for agenda intents and can misclassify appointment tokens as names.
- Details: create/cancel/reschedule extraction uses
filteredWords+isLikelyName; tokens like "intake", "morgen", or times can be treated as names. - Impact: wrong patient selected or wrong appointment targeted.
- Files:
lib/swift/entity-extractor.ts - Suggestion: skip tokens that parse as date/time or match appointment/location keywords before
isLikelyName.
- Details: create/cancel/reschedule extraction uses
-
Medium - Agenda query defaults to "vandaag" when no date is present (e.g., "volgende afspraak").
- Impact: only today is queried, which can miss the actual next appointment.
- Files:
lib/swift/entity-extractor.ts - Suggestion: leave
dateRangeundefined or mark "from now" and let backend decide.
-
Medium -
ExtractedEntitiesnow carries Date objects, but the classify API returns JSON, so Dates become strings.- Impact: downstream date ops may break on serialized strings.
- Files:
lib/swift/types.ts(see API flow inapp/api/intent/classify/route.ts) - Suggestion: use ISO strings in the DTO or normalize in the API response.
-
Medium - Type drift between lib and store: the store
ExtractedEntitiesdoes not include the new agenda structures.- Impact: UI usage may drop agenda fields or require unsafe casting.
- Files:
stores/swift-store.ts,lib/swift/types.ts - Suggestion: align store types with lib types (or re-export the shared type).
-
Low - AI fallback path does not run local extractor; low-confidence agenda intents lose structured entities.
- Impact: less reliable agenda prefill when AI is used.
- Files:
app/api/intent/classify/route.ts,lib/swift/intent-classifier-ai.ts - Suggestion: post-process AI results with local extractor for agenda intents.
Testing / QA notes
- Untracked tests exist:
lib/swift/__tests__/date-time-parser.test.ts. - Manual scripts exist:
lib/swift/verify-parser.tsandlib/swift/verify-entity-extraction.ts(not run here).