Skip to content

Fase 1b: Trainingen

10 user stories, 4 scenario’s + 1 edge case.

Een klant doorloopt de volledige trainingsboekingsflow: kiezen, hond selecteren, betalen.

Dekt: 1b.1.1, 1b.1.2, 1b.1.3, 1b.1.4, 1b.1.5

Voorwaarden: Klant onboarding voltooid, hond met geldige vaccinaties, trainingen beschikbaar

  1. Ga naar /bookings/new, kies dienst “Training”
  2. Check dat alleen trainingen met beschikbare plekken worden getoond (bijv. “4/12 beschikbaar”)
  3. Check dat volle trainingen (12/12) niet in de lijst staan
  4. Selecteer “Puppy/Basic”
  5. Selecteer hond. Systeem checkt vaccinaties en leeftijd.
  6. Probeer een hond die exact 3 maanden oud is. Moet selecteerbaar zijn (grens is “jonger dan 3 maanden”).
  7. Probeer een hond van 2 maanden en 29 dagen. Geblokkeerd met melding: “Je hond moet minimaal 3 maanden oud zijn voor training.”
  8. Selecteer een hond met een vaccinatie die binnen 30 dagen verloopt. Waarschuwing verschijnt: “Let op: vaccinatie verloopt binnenkort.” Hond is wel selecteerbaar.
  9. Selecteer een hond met verlopen vaccinatie. Geblokkeerd met melding: “Vaccinaties verlopen. Upload een nieuw bewijs via Mijn honden.”
  10. Selecteer een geschikte hond, klik “Volgende”
  11. Bekijk overzicht. Check dat de volgende regels apart getoond worden: training, hond(en), prijs per hond, BBO (6%), BAZV (1,5%), totaal inclusief belasting.
  12. Klik “Bevestigen en betalen”. Boeking wordt aangemaakt met status pending.
  13. Factuur wordt aangemaakt (100% vooraf). Sentoo betaallink en QR code verschijnen.
  14. Betaal via Sentoo. Webhook markeert factuur als betaald.
  15. Boekingsstatus blijft pending tot admin bevestigt.
  16. Ga naar /bookings. Check dat de training verschijnt onder tab “Aankomend” met status “wacht op bevestiging” (zolang pending).
  1. Ga naar /bookings/new, kies dienst “Training”
  2. Selecteer “Prive 1 les”. Check prijs. Bevestig en betaal.
  3. Herhaal voor “Prive 3 lessen” en “Prive 5 lessen”. Check dat prijs per pakket verschilt.
  4. Check dat prive trainingen altijd beschikbaar zijn (geen plekken limiet).

Resultaat: Boekingsflow compleet voor groep en prive, vaccinatiecheck werkt (waarschuwing vs. blokkering), leeftijdsgrens op exact 3 maanden, belastingen apart getoond, pending status zichtbaar als “wacht op bevestiging”, prive pakketten correct geprijsd.

Klant schrijft twee honden in voor dezelfde training.

Dekt: 1b.1.2, 1b.1.3

Voorwaarden: Klant heeft 2 honden, beide met geldige vaccinaties

  1. Ga naar /bookings/new, kies dienst “Training”
  2. Selecteer een groepstraining
  3. Selecteer beide honden via de checkboxes
  4. Check dat prijs per hond apart berekend wordt op het overzicht
  5. Check totaalbedrag: prijs per hond x 2 + BBO (6%) + BAZV (1,5%)
  6. Bevestig en betaal

Resultaat: Factuurregels per hond, correcte totaalberekening met belastingen.

Admin maakt trainingen aan, beheert aanvragen en plant lessen in.

Dekt: 1b.2.1, 1b.2.2, 1b.2.3, 1b.2.4

Voorwaarden: Admin ingelogd, trainingsaanvragen binnengekomen

  1. Ga naar /admin/training. Klik “Nieuwe training”.
  2. Vul in: naam “Obedience 1”, type “groep”, beschrijving “Gehoorzaamheidstraining niveau 1”, max deelnemers 12, prijs, aantal lessen 6, actief aan.
  3. Check dat het beschrijving-veld (textarea) correct wordt opgeslagen en getoond.
  4. Controleer dat training in lijst verschijnt met kolommen: naam, type, deelnemers (0/12), status (actief).
  5. Bewerk training: wijzig max deelnemers naar 10, opslaan. Check dat het getal bijgewerkt is.
  6. Deactiveer training. Check dat deze niet meer verschijnt in de boekingsflow voor klanten.
  7. Activeer opnieuw. Check dat training weer boekbaar is.
  1. Ga naar admin dashboard. Check badge bij “Meldingen” met aantal nieuwe aanvragen.
  2. Ga naar /admin/bookings, filter op status pending.
  3. Open een aanvraag. Check dat je ziet: klantgegevens (naam, telefoon), hond (naam, ras, leeftijd, vaccinatiestatus), gekozen training, betaalstatus.
  4. Klik “Bevestigen”. Status wordt confirmed. Klant ontvangt bevestigingsmail.
  5. Open een andere aanvraag. Klik “Afwijzen”. Vul verplichte reden in. Status wordt cancelled. Klant ontvangt mail met reden. Betaling wordt als te restitueren gemarkeerd. Plek komt vrij.
  1. Ga naar /admin/training/[bundle_id]. Check pakketinfo: klant, hond, training, voortgang.
  2. Klik “Inplannen” bij een les zonder datum. Vul datum (date picker) en tijdstip (time picker) apart in. Opslaan.
  3. Check dat de klant de geplande les ziet op /subscriptions/training/[id].
  4. Wijzig een ingeplande les: klik op de bestaande datum, pas datum en/of tijdstip aan, opslaan. Check dat de klant de nieuwe datum ziet.
  5. Klik “Voltooien” bij een les. Voeg trainer notitie toe (textarea). Opslaan.
  6. Check dat de notitie pas zichtbaar is voor de klant nadat de les status completed heeft. Niet eerder.
  7. Voltooi alle lessen. Check dat het trainingspakket automatisch als voltooid wordt gemarkeerd en de boeking status checked_out krijgt.

Resultaat: Trainingen CRUD werkt met beschrijving, aanvragen bevestigbaar/afwijsbaar, lessen planbaar met aparte datum/tijdstip pickers, les opnieuw inplannen werkt, notities alleen zichtbaar na voltooiing.

Klant bekijkt de voortgang van een lopende training.

Dekt: 1b.3.1

Voorwaarden: Klant ingeschreven voor training, lessen ingepland

  1. Ga naar /bookings. Klik op de trainingsboeking.
  2. Check dat er een link naar de trainingsvoortgang staat op de boekingsdetailpagina.
  3. Ga naar /dogs/[id] (hondprofiel). Check dat daar ook een link naar de trainingsvoortgang staat.
  4. Ga naar /subscriptions/training/[id].
  5. Check voortgangsbalk: “Les 2 van 6” met percentage.
  6. Check lesoverzicht: per les het lesnummer, datum/tijdstip (of “Nog niet ingepland”), status (gepland/voltooid/niet ingepland).
  7. Check dat trainer notities alleen verschijnen bij voltooide lessen.
  8. Check dat nog niet ingeplande lessen getoond worden als “Nog niet ingepland” zonder datum.

Resultaat: Voortgang correct weergegeven, links vanuit boekingsdetail en hondprofiel, lessen en notities zichtbaar per status.

Grensgevallen bij trainingsboekingen.

Versterkt: S-1b.1, S-1b.3

  1. Training met 12/12 plekken bezet. 13e klant ziet training niet in de lijst op /bookings/new.
  2. Twee klanten boeken tegelijkertijd de laatste plek (race condition). Slechts een van de twee slaagt. De ander krijgt melding: “Deze training is helaas vol. Kies een andere training.”
  3. Check dat de plekken-teller correct werkt, bijv. “4/12 beschikbaar” wordt “5/12 beschikbaar” na een nieuwe inschrijving.
  4. Klant boekt training maar betaalt niet. Wat is de reservation timeout? Boeking blijft op pending, admin ziet “Betaling: openstaand”.
  5. Hond met niet-geverifieerde vaccinaties (admin nog niet goedgekeurd). Boeken geblokkeerd.
  6. Admin wijst aanvraag af. Klant krijgt notificatie, plek wordt vrijgegeven. Teller gaat terug.
  7. Klant annuleert betaalde training. Refund beleid: niet-restitueerbaar of terugbetaling?
  8. Training met 0 ingeplande lessen. Klant ziet “Nog niet ingepland” per les, geen lege pagina.

Resultaat: Capaciteit strikt afgedwongen inclusief bij race conditions, plekken-teller actueel, onbetaalde boekingen hebben timeout, duidelijke feedback.