From e269a155da031cb34423c747e99d892deeb0077a Mon Sep 17 00:00:00 2001
From: Madhura68
Date: Sun, 19 Apr 2026 02:36:11 +0200
Subject: [PATCH] Implement ST-305 budget warning feedback
---
README.md | 5 +--
components/planning/activity-form.tsx | 11 +++++++
components/planning/energy-meter-card.tsx | 36 ++++++++++++++++++---
docs/README.md | 2 +-
docs/backlog/inspannings-monitor-backlog.md | 4 +--
5 files changed, 49 insertions(+), 9 deletions(-)
diff --git a/README.md b/README.md
index 3e29c54..9d63efe 100644
--- a/README.md
+++ b/README.md
@@ -23,6 +23,7 @@ product, niet als medisch hulpmiddel. Release 1 blijft smal:
- planningsfundering met activiteitenmodel, categorieën en skip-redenen in Supabase
- planningpagina voor vandaag met activiteit toevoegen en directe lijstweergave
- energiemeter met lopend totaal ten opzichte van het dagbudget
+- niet-blokkerende waarschuwing bij budgetoverschrijding in planning en dashboard
- eerste unit tests voor budget- en meterlogica via `Vitest`
- korte onboardingflow voor eerste voorkeuren
- instellingen voor taal, timezone, reminders en zichtbaarheid van energiepunten
@@ -114,6 +115,6 @@ zichtbaar als `NEXT_PUBLIC_ENABLE_TEST_WIZARD=true` staat.
## Eerstvolgende bouwstappen
1. `ST-303` Autocomplete op eerdere activiteiten toevoegen
-2. `ST-305` Overschrijdingswaarschuwing toevoegen
-3. `ST-401` Evaluatie- en dagoverzichtslus bouwen
+2. `ST-401` Evaluatie- en dagoverzichtslus bouwen
+3. `ST-404` Dagoverzicht bouwen
4. `ST-105` RLS-policy tests en hardening afronden
diff --git a/components/planning/activity-form.tsx b/components/planning/activity-form.tsx
index 8faac94..37224d1 100644
--- a/components/planning/activity-form.tsx
+++ b/components/planning/activity-form.tsx
@@ -2,6 +2,7 @@
import { useActionState, useMemo, useState } from "react";
import { createActivityAction } from "@/app/planning/actions";
+import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert";
import { Button, buttonVariants } from "@/components/ui/button";
import {
Card,
@@ -199,6 +200,16 @@ export function ActivityForm({ categories, activities, dailyBudget }: ActivityFo
{previewMeter.remainingBudget} punten ruimte.
) : null}
+ {previewMeter?.isOverBudget ? (
+
+ Niet-blokkerende waarschuwing
+
+ Met deze activiteit kom je ongeveer{" "}
+ {Math.abs(previewMeter.remainingBudget ?? 0)} punten boven je dagbudget uit.
+ Je kunt nog steeds opslaan, maar dit is een goed moment om bewust te heroverwegen of te versimpelen.
+
+
+ ) : null}
diff --git a/components/planning/energy-meter-card.tsx b/components/planning/energy-meter-card.tsx
index 0cc0edc..1f68626 100644
--- a/components/planning/energy-meter-card.tsx
+++ b/components/planning/energy-meter-card.tsx
@@ -1,3 +1,8 @@
+import {
+ Alert,
+ AlertDescription,
+ AlertTitle,
+} from "@/components/ui/alert";
import {
Card,
CardContent,
@@ -25,6 +30,18 @@ function formatRemainingLabel(remainingBudget: number) {
return `${Math.abs(remainingBudget)} punten erboven`;
}
+function getMeterDescription(meter: PlanningMeterSnapshot) {
+ if (meter.dailyBudget === null) {
+ return "Er is nog geen dagbudget beschikbaar. De meter wordt actief zodra je ochtendcheck-in van vandaag er staat.";
+ }
+
+ if (meter.isOverBudget) {
+ return "Je planning zit boven je dagbudget. Dat is een signaal om eventueel iets te verschuiven of lichter te maken, niet om te blokkeren.";
+ }
+
+ return "De meter blijft bewust eenvoudig: punten volgen uit duur en impact van je activiteiten.";
+}
+
export function EnergyMeterCard({
meter,
tone = "default",
@@ -48,15 +65,16 @@ export function EnergyMeterCard({
- {meter.dailyBudget === null
- ? "Er is nog geen dagbudget beschikbaar. De meter wordt actief zodra je ochtendcheck-in van vandaag er staat."
- : "De meter blijft bewust eenvoudig: punten volgen uit duur en impact van je activiteiten."}
+ {getMeterDescription(meter)}
@@ -72,6 +90,16 @@ export function EnergyMeterCard({
) : null}
+
+ {meter.dailyBudget !== null && meter.isOverBudget ? (
+
+ Je zit boven je dagbudget
+
+ Je planning komt nu {Math.abs(meter.remainingBudget ?? 0)} punten boven het dagbudget uit.
+ Je kunt nog steeds doorgaan, maar dit is een goed moment om iets te schrappen, te verkorten of later te doen.
+
+
+ ) : null}
);
diff --git a/docs/README.md b/docs/README.md
index 5686559..816379e 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -40,7 +40,7 @@ Deze map bevat de vernieuwde documentatie voor de gekozen `wellness/self-managem
- Ochtendcheck-in slaat nu energiescore en slaapkwaliteit per dag op
- Dagbudget v1 is bewust eenvoudig: `daily_budget = energy_score`
- Energieniveau en budget worden al direct getoond in check-in en dashboard
-- `ST-301`, `ST-302` en `ST-304` leggen nu ook het activiteitenmodel en de eerste dagplanningflow vast
+- `ST-301`, `ST-302`, `ST-304` en `ST-305` leggen nu ook het activiteitenmodel en de eerste dagplanningflow vast
- Eerste unit tests voor budget- en meterlogica draaien via `Vitest`
## Generator
diff --git a/docs/backlog/inspannings-monitor-backlog.md b/docs/backlog/inspannings-monitor-backlog.md
index fc3c40a..34a704e 100644
--- a/docs/backlog/inspannings-monitor-backlog.md
+++ b/docs/backlog/inspannings-monitor-backlog.md
@@ -78,7 +78,7 @@ Status: `ST-201`, `ST-202`, `ST-203`, `ST-204` en `ST-205` zijn inmiddels gereal
Doel: de gebruiker kan activiteiten voor de dag plannen binnen een eenvoudig energiemodel.
-Status: `ST-301`, `ST-302` en `ST-304` zijn inmiddels gerealiseerd in de app. De volgende logische stap ligt nu in `ST-303` en `ST-305`.
+Status: `ST-301`, `ST-302`, `ST-304` en `ST-305` zijn inmiddels gerealiseerd in de app. De volgende logische stap ligt nu in `ST-303` en `EPIC-05`.
| Story ID | Titel | Type | Definition of done |
| --- | --- | --- | --- |
@@ -86,7 +86,7 @@ Status: `ST-301`, `ST-302` en `ST-304` zijn inmiddels gerealiseerd in de app. De
| ST-302 | Planningformulier bouwen | UI | Afgerond: activiteit kan met naam, categorie, duur, impact en prioriteit worden aangemaakt |
| ST-303 | Autocomplete op eerdere activiteiten toevoegen | UX | Veelgebruikte activiteiten zijn snel opnieuw te kiezen |
| ST-304 | EnergyMeter en lopend totaal implementeren | Logic/UI | Afgerond: totaal update direct na elke wijziging |
-| ST-305 | Overschrijdingswaarschuwing toevoegen | UX | Gebruiker krijgt feedback maar behoudt regie |
+| ST-305 | Overschrijdingswaarschuwing toevoegen | UX | Afgerond: gebruiker krijgt feedback maar behoudt regie |
## EPIC-05 Evaluatie en dagoverzicht