Skip to content

Fase 2: Testdag + Daycare

24 user stories, 12 scenario’s + 2 edge cases.

Nieuwe hond doorloopt de verplichte testdag voordat andere diensten beschikbaar zijn.

Dekt: 2.1.1, 2.1.2, 2.1.3, 2.1.4, 2.1.6

Voorwaarden: Klant heeft hond zonder testdag (trial_day_passed = false)

  1. Ga naar /bookings/new. Check dat bij honden zonder testdag alleen de optie “Testdag” zichtbaar is. Andere diensten zijn geblokkeerd met melding.
  2. Kies “Testdag”
  3. Selecteer hond. Check dat alleen honden zonder goedgekeurde testdag getoond worden.
  4. Ga naar datum kiezen. Check dat alleen ma, di, do, vr selecteerbaar zijn.
  5. Check dat woensdag, zaterdag en zondag grijs/niet kiesbaar zijn.
  6. Selecteer een datum. Check dat het systeem capaciteit controleert (daycare geboekt + testdagen <= limiet).
  7. Bekijk overzicht. Check prijs: 35 AWG voor de eerste hond.
  8. Voeg een tweede hond toe (ook zonder testdag). Check prijs: 17,50 AWG voor de 2e hond (50% korting).
  9. Voeg een derde hond toe. Check prijs: 17,50 AWG voor de 3e hond. Totaal: 35 + 17,50 + 17,50 = 70 AWG exclusief belasting.
  10. Check dat BBO (6%) en BAZV (1,5%) apart getoond worden in het overzicht.
  11. Klik “Bevestigen en betalen”. Factuur + Sentoo betaallink.
  12. Betaal. Boeking status wordt pending (wacht op bevestiging hotel).
  13. Controleer dat de testdag meetelt in de daycare capaciteit. Ga naar /admin en check dat de teller klopt (bijv. “29/40 honden” ipv “28/40”).
  14. Check de daycare limiet: maximaal 40 honden per dag (inclusief testdagen).

Resultaat: Testdag alleen op juiste dagen, correcte prijsberekening met drie honden, belastingen apart getoond, telt mee in capaciteit (max 40).

Na de testdag keurt de admin de hond goed of af.

Dekt: 2.1.5

Voorwaarden: Testdag is afgerond

  1. Admin opent /admin/bookings/[id] van de testdag-boeking
  2. Klik “Testdag beoordelen”
  3. Goedkeuren: stel trial_day_passed = true en kies group_play_approved (ja of nee)
  4. Check dat klant notificatie ontvangt dat hond is goedgekeurd
  5. Check dat klant nu daycare en boarding kan boeken op /bookings/new
  6. Afkeuren (andere hond): markeer als afgekeurd met reden
  7. Check dat klant notificatie ontvangt met reden
  8. Check dat klant geen daycare, boarding of training kan boeken voor die hond

Resultaat: Goedkeuring opent diensten, afkeuring blokkeert ze, klant wordt geinformeerd.

Klant boekt een daycare dag met capaciteitscheck.

Dekt: 2.2.1, 2.2.2, 2.2.3, 2.2.4

Voorwaarden: Hond met goedgekeurde testdag en geldige vaccinaties

  1. Ga naar /bookings/new, kies “Daycare Drop-in”
  2. Check dat alleen honden met trial_day_passed = true getoond worden
  3. Selecteer hond. Systeem checkt vaccinaties (geldig).
  4. Selecteer datum. Systeem checkt capaciteit (daycare geboekt + testdagen <= 40).
  5. Als vol: controleer dat alternatieve data in dezelfde week worden getoond
  6. Selecteer een beschikbare datum
  7. Check stap “Bijzondere instructies”: er verschijnt een vrij tekstveld per hond
  8. Vul bijzondere instructies in, bijv. “Buddy mag geen rawhide treats”
  9. Ga naar overzicht. Check prijs: 35 AWG per hond per dag (geen korting bij meerdere honden), BBO en BAZV apart.
  10. Bevestig en betaal
  11. Probeer te boeken met een hond met verlopen vaccinatie. Geblokkeerd.
  12. Check dat de ingevoerde bijzondere instructies zichtbaar zijn bij de admin check-in (zie S-2.5)

Resultaat: Capaciteitscheck werkt, vaccinatiecheck blokkeert verlopen vaccins, bijzondere instructies opgeslagen en zichtbaar bij check-in, alternatieven getoond bij vol.

Systeem valideert boekingen tegen het vaste weekrooster.

Dekt: 2.3.1, 2.3.2

Voorwaarden: Hardcoded openingstijden actief

  1. Probeer een boeking te maken buiten openingstijden. Geblokkeerd.
  2. Check maandag t/m vrijdag (behalve woensdag): brengen 7:00-10:00, ophalen 16:00-18:30.
  3. Check woensdag specifiek: alleen brengen 8:00-10:00, geen ophalen (brengen-only voor boarding honden).
  4. Check zaterdag specifiek: alleen brengen 8:00-10:00, geen ophalen (brengen-only voor boarding honden).
  5. Check zondag: volledig gesloten. Geen brengen, geen ophalen. Boeking op zondag is onmogelijk.
  6. Probeer op een sluitingsdag te boeken (zondag). Geblokkeerd.

Resultaat: Boekingen buiten openingstijden onmogelijk, woensdag en zaterdag correct als brengen-only, zondag volledig gesloten.

Admin registreert check-in met checklist en check-out.

Dekt: 2.4.1, 2.4.2, 2.4.3, 2.4.4

Voorwaarden: Bevestigde daycare boeking voor vandaag

  1. Admin opent /admin. Check “Vandaag” sectie: verwachte check-ins met naam hond en eigenaar.
  2. Klik op de boeking, ga naar /admin/bookings/[id]
  3. Klik “Check-in”. Het systeem toont de 9-punten checklist als visuele checkboxes:
    • Vaccinaties up-to-date (min. 7 dagen voor check-in, max 12 maanden oud)
    • Vlooien/wormbehandeling binnen 30 dagen
    • Hond is schoon, geen teken/vlooien zichtbaar
    • Niet zwanger of loops
    • Geen tekenen van ziekte of agressie
    • Hond aan vaste riem (geen flexilijn)
    • Medicatie in originele verpakking met etiket (indien van toepassing)
    • Voedsel in ziploc zakjes gelabeld AM/PM met naam hond
    • Vaccinatieboekje aanwezig
  4. Check dat de “Check-in” knop inactief blijft zolang niet alle 9 punten zijn afgevinkt
  5. Check dat onder de checklist de bijzonderheden (special_notes) en gedragsnotities van de hond zichtbaar zijn
  6. Check dat bijzondere instructies die de klant bij de boeking heeft ingevuld (zie S-2.3) hier zichtbaar zijn
  7. Vink alle 9 punten af en klik “Bevestigen”. Melding verschijnt: “Check-in voltooid”
  8. Check dat check-in tijdstip wordt vastgelegd
  9. Status wijzigt naar checked_in
  10. Klant ontvangt notificatie van check-in
  11. Later: admin klikt “Check-out” bij dezelfde boeking
  12. Check dat check-out tijdstip wordt vastgelegd
  13. Status wijzigt naar checked_out
  14. Klant ontvangt notificatie van check-out

Resultaat: Check-in met 9-punten visuele checklist voltooid, alle punten verplicht, bijzonderheden en instructies zichtbaar, tijdstippen vastgelegd, klant geinformeerd met bevestigingsmelding.

Klant en admin annuleren boekingen onder verschillende omstandigheden.

Dekt: 2.5.1, 2.5.2, 2.5.3, 2.5.4

Voorwaarden: Bevestigde boekingen, een betaald en een onbetaald

  1. Klant gaat naar /bookings/[id] van een onbetaalde boeking (status pending). Klik “Annuleren”. Bevestigingsdialoog verschijnt. Bevestig. Boeking geannuleerd. Geen financiele gevolgen.
  2. Klant annuleert betaalde boeking (status confirmed). Deposit is niet-restitueerbaar. Deposit definitie: 100% bij daycare en training, 50% bij boarding.
  3. Check dat factuurstatus wordt cancelled
  4. Check dat capaciteit vrijkomt na annulering
  5. Probeer een boeking met status checked_in te annuleren. Annuleerknop is niet zichtbaar.
  6. Admin annuleert namens hotel via /admin/bookings/[id]: verplichte reden invullen. Volledige terugbetaling ongeacht deposit.
  7. Controleer dat klant en admin notificaties ontvangen bij elke annulering

Resultaat: Annuleringsregels correct per status, deposit-logica correct (100% daycare/training, 50% boarding), admin-annulering altijd volledige terugbetaling, notificaties verstuurd.

Systeem stuurt automatische vaccinatieherinneringen.

Dekt: 2.6.1, 2.6.2

Voorwaarden: Hond met vaccinatie die over 25 dagen verloopt

  1. Stel vaccinatie vervaldatum in op 30 dagen vanaf nu
  2. Wacht tot systeem check draait (of forceer handmatig)
  3. Check dat klant een reminder-email ontvangt
  4. Check dat de reminder niet dubbel wordt verstuurd (bijv. bij opnieuw draaien van de check). Systeem moet bijhouden dat er al een reminder gestuurd is.
  5. Admin opent /admin/dogs, filter op “bijna verlopen”. Hond verschijnt in de lijst.
  6. Filter op “verlopen”. Hond verschijnt na vervaldatum.

Resultaat: Reminder 30 dagen voor verval, geen dubbele reminders, admin filters werken correct.

Admin bekijkt de dagelijkse operatie in het dashboard.

Dekt: 2.7.1, 2.7.2

Voorwaarden: Boekingen voor vandaag en komende dagen

  1. Open /admin
  2. Check “Vandaag” sectie met vier blokken:
    • Check-ins verwacht: lijst met naam hond + naam eigenaar
    • Check-outs verwacht: lijst met naam hond + naam eigenaar
    • Aanwezige honden: alle honden met status checked_in
    • Daycare capaciteit: indicator bijv. “28/40 honden”
  3. Ga naar /admin/bookings, kalenderweergave (standaard)
  4. Check kleurcodering per dienst (testdag, daycare, boarding, training)
  5. Schakel naar lijstweergave
  6. Filter op status (pending, confirmed, checked_in, checked_out, cancelled)
  7. Filter op datum (van/tot)
  8. Filter op dienst (testdag, daycare, boarding, training)
  9. Check dat per boeking zichtbaar is: hond, eigenaar, dienst, datum, status, bedrag

Resultaat: Dashboard toont dagelijkse operatie met vier blokken, kalender en lijst beschikbaar met kleurcodering, filters werken.

Klant voegt gedetailleerde gedragsinformatie en extra gegevens toe.

Dekt: 2.8.1, 2.8.2, 2.8.3, 2.8.4

Voorwaarden: Klant met hond, onboarding voltooid

  1. Open /dogs/[id]/edit, ga naar gedragssectie
  2. Check dat alle 18 persoonlijkheidskenmerken als checkboxes beschikbaar zijn:
    • Speels
    • Kalm
    • Energiek
    • Verlegen
    • Dominant
    • Onderdanig
    • Vriendelijk met honden
    • Vriendelijk met mensen
    • Angstig
    • Beschermend
    • Onafhankelijk
    • Aanhankelijk
    • Vocaal (blaft veel)
    • Rustig
    • Graver
    • Springer
    • Ontsnapper
    • Voedselagressief
  3. Check dat naast de checkboxes een vrij tekstveld voor gedragsnotities beschikbaar is
  4. Vink een paar kenmerken aan, vul tekstveld in, opslaan
  5. Ga naar medische sectie. Geef toestemming voor dierenarts inschakelen (ja/nee toggle)
  6. Vul maximaal bedrag in. Check dat het veld AWG format accepteert (bijv. “AWG 500,00”).
  7. Vul datum laatste vlooien/wormbehandeling in
  8. Opslaan en check dat alles bewaard is
  9. Ga naar bezoekhistorie op /dogs/[id]. Controleer eerdere bezoeken: datum, dienst, status per boeking.

Resultaat: Alle 18 kenmerken beschikbaar als checkboxes, dierenarts toestemming vastgelegd met max bedrag in AWG, vlooienbehandeling datum opgeslagen, bezoekhistorie zichtbaar.

Systeem stuurt automatische herinneringen bij onbetaalde facturen.

Dekt: 2.8.5, 2.8.6

Voorwaarden: Onbetaalde factuur, 3+ dagen oud

  1. Maak factuur die 3 dagen onbetaald is. Check dat eerste herinnering-email verstuurd wordt.
  2. Na 7 dagen: check dat tweede herinnering-email verstuurd wordt.
  3. Na 14 dagen: check dat admin notificatie ontvangt. Deze verschijnt op het admin dashboard (/admin) onder “Meldingen”.
  4. Check dat de dag-14 notificatie niet alleen per email gaat maar ook in het dashboard zichtbaar is voor handmatige opvolging.

Resultaat: Herinneringen op dag 3 en 7 per email, admin alert op dag 14 in dashboard meldingen.

S-2.11 Admin maakt klant/boeking aan namens klant

Section titled “S-2.11 Admin maakt klant/boeking aan namens klant”

Admin registreert een telefonische klant en maakt boeking.

Dekt: 2.8.7, 2.8.8, 2.8.10

Voorwaarden: Admin ingelogd, klant belt op

  1. Ga naar /admin/clients/new
  2. Vul klantgegevens in: naam, telefoon, WhatsApp, adres, noodcontact
  3. Optie om direct een hond toe te voegen
  4. Opslaan. Klantaccount bestaat nu.
  5. Ga naar /admin/clients/[id]. Voeg interne notitie toe: “Klant belde, spreekt alleen Papiamento”
  6. Check dat de interne notitie zichtbaar is voor admin en medewerker
  7. Check dat de interne notitie niet zichtbaar is voor de klant in het eigen portaal
  8. Vraag: is de notitie ook zichtbaar voor trainers? Verduidelijk rol-gebaseerde zichtbaarheid.
  9. Ga naar /admin/bookings/new
  10. Selecteer de klant (zoeken op naam/email)
  11. Kies dienst, selecteer hond, datum. Systeem voert dezelfde validaties uit.
  12. Vul bijzondere instructies in
  13. Factuur wordt aangemaakt. Sentoo betaallink wordt verstuurd naar klant.

Resultaat: Klant aangemaakt door admin, interne notitie zichtbaar voor admin+medewerker maar niet voor klant, boeking met factuur aangemaakt.

Admin exporteert facturen en klantgegevens.

Dekt: 2.8.9

Voorwaarden: Data in het systeem, inclusief klanten met speciale tekens in naam

  1. Ga naar /admin/invoices, klik “Export CSV”
  2. Download CSV, open in Excel. Check dat de volgende kolommen aanwezig zijn:
    • Factuurnummer
    • Factuurdatum
    • Klant naam
    • Dienst
    • Bedrag exclusief belasting
    • BBO (6%)
    • BAZV (1,5%)
    • Totaal inclusief belasting
    • Betaalstatus
    • Betaaldatum
  3. Check dat unicode en speciale tekens correct worden geexporteerd (bijv. accenten, n-tilde in Spaanse namen, Papiamento namen)
  4. Ga naar klantenlijst, klik “Export CSV”
  5. Download en controleer klantgegevens
  6. Check dat het CSV-bestand geschikt is voor import in boekhoudprogramma

Resultaat: CSV bestanden met correcte kolommen, unicode/speciale tekens intact, geschikt voor boekhouder.

Grensgevallen bij de testdag als gateway.

Versterkt: S-2.1, S-2.2

  1. Hond met trial_day_passed = true probeert opnieuw testdag te boeken. Testdag-optie wordt niet getoond (“al goedgekeurd”).
  2. Testdag boeken op woensdag via API (omzeilt frontend). API blokkeert ook.
  3. Testdag boeken wanneer daycare capaciteit precies 40/40 is. Geblokkeerd (telt mee in capaciteit).
  4. Admin keurt af. Klant probeert nieuwe testdag. Wel toegestaan (tweede kans).
  5. Hond met goedgekeurde testdag maar verlopen vaccinatie. Testdag passed, maar daycare geblokkeerd door vaccin.

Resultaat: Testdag gateway werkt zowel in frontend als API, capaciteitslimiet 40 gerespecteerd, grensgevallen correct.

Grensgevallen bij het aanmaken van klanten door admin.

Versterkt: S-2.11

  1. Admin maakt klant aan met emailadres dat al bestaat. Foutmelding.
  2. Admin maakt klant aan zonder email (alleen telefoon). Kan dat? Of is email verplicht voor auth?
  3. Admin maakt boeking namens klant die onboarding niet afgerond heeft. Geblokkeerd of toegestaan?
  4. Admin interne notitie. Check dat klant deze niet kan zien in eigen portaal (ook niet via API).

Resultaat: Duidelijke validatie, interne notities echt intern (ook via API gecontroleerd).