Fase 4: Unlimited Daycare
Fase 4 voegt maandabonnementen toe voor vaste daycare klanten. Dit zorgt voor voorspelbare inkomsten. De fase vereist een upgrade naar Supabase Pro voor pg_cron, wat maandelijkse facturering mogelijk maakt. In totaal 11 user stories.
Infrastructuur
Section titled “Infrastructuur”Supabase Pro upgrade
Section titled “Supabase Pro upgrade”De database wordt geupgraded naar Supabase Pro ($25/maand) om pg_cron te kunnen gebruiken. Zonder pg_cron is er geen manier om periodieke taken te draaien binnen de Supabase-omgeving.
pg_cron job voor maandelijkse facturering
Section titled “pg_cron job voor maandelijkse facturering”Er wordt een pg_cron job ingericht die maandelijks draait. De job controleert welke abonnementen aan verlenging toe zijn op basis van hun facturatiedag, en start het facturatieproces per abonnement.
Klantflows
Section titled “Klantflows”Unlimited abonnement afsluiten
Section titled “Unlimited abonnement afsluiten”Route: /bookings/new (dienst: Daycare Unlimited) of /subscriptions
De klant kan een Unlimited daycare abonnement afsluiten. Dit abonnement geeft onbeperkte toegang tot daycare zonder apart te betalen per bezoek.
Wat de klant invult:
- Startdatum van het abonnement
- Het systeem stelt de facturatiedag in op basis van de startdatum
Wat de klant ziet na bevestiging:
- Maandprijs
- Facturatiedag (bijv. de 15e van elke maand)
- Eerste factuur met Sentoo betaallink
Na bevestiging wordt direct de eerste maandfactuur aangemaakt met een Sentoo betaallink. De klant ontvangt een email met de factuur en betaallink. Pas na betaling is het abonnement actief.
Foutafhandeling:
- Klant heeft al een actief abonnement: optie wordt niet getoond
- Eerste factuur niet betaald: abonnement wordt niet geactiveerd
Daycare boeken met Unlimited
Section titled “Daycare boeken met Unlimited”Route: /bookings/new
Bij het kiezen van een dienst ziet de klant “Daycare Unlimited” als optie, maar alleen als er een actief abonnement loopt. Is het abonnement gepauzeerd, opgezegd of is de laatste factuur onbetaald, dan is deze optie niet zichtbaar.
De boekingsflow is gelijk aan een normale daycare boeking: hond selecteren, vaccinatiecheck, capaciteitscheck, datum kiezen. Het verschil is dat er geen factuur wordt aangemaakt en er geen betaling nodig is. Het systeem herkent het actieve abonnement en registreert het bezoek.
Foutafhandeling:
- Abonnement gepauzeerd: optie niet zichtbaar, klant kan wel een losse daycare of Paw Voucher boeken
- Facturering achterstallig: optie niet zichtbaar
Abonnementsdetails inzien
Section titled “Abonnementsdetails inzien”Route: /subscriptions
De klant ziet een sectie “Unlimited abonnement” met:
- Startdatum
- Maandprijs
- Volgende betaaldatum
- Status: actief, gepauzeerd of opgezegd
Als er geen abonnement is, toont het systeem een knop om er een af te sluiten.
Abonnement opzeggen
Section titled “Abonnement opzeggen”Route: /subscriptions
De klant kan het abonnement opzeggen via een knop op de abonnementspagina.
Wat er gebeurt:
- Bevestigingsdialoog met waarschuwing: “Er vindt geen restitutie plaats voor de lopende maand.”
- Na bevestiging: abonnement wordt op “opgezegd” gezet
- Het abonnement blijft actief tot het einde van de huidige betaalperiode
- Daarna wordt het definitief stopgezet
- De klant ontvangt een bevestigingsmail
Foutafhandeling:
- Openstaande factuur: opzeggen is mogelijk, maar de openstaande factuur blijft verschuldigd
Systeemflows
Section titled “Systeemflows”Maandelijkse facturering
Section titled “Maandelijkse facturering”Op de facturatiedag van elk actief abonnement voert de pg_cron job het volgende uit:
- Controleer welke abonnementen aan verlenging toe zijn
- Per abonnement: maak een factuur aan met het maandbedrag (incl. BBO en BAZV)
- Maak een Sentoo transactie aan en genereer een betaallink
- Stuur de factuur per email (via Resend) met de betaallink
- Stel de volgende facturatiedatum in op +1 maand
Na betaling via Sentoo markeert de webhook de factuur automatisch als betaald. De klant ontvangt een bevestigingsmail.
Escalatie bij niet-betaling
Section titled “Escalatie bij niet-betaling”Als de maandfactuur niet op tijd betaald wordt, escaleert het systeem in drie stappen:
Dag 3: eerste herinnering Het systeem stuurt automatisch een herinnerings-email naar de klant met de openstaande factuur en Sentoo betaallink.
Dag 7: tweede herinnering Het systeem stuurt een tweede herinnerings-email. De toon is dringender, met een waarschuwing dat het abonnement geblokkeerd kan worden.
Dag 14: admin notificatie Het systeem stuurt een notificatie naar de admin. De admin kan beslissen om:
- Nog een herinnering te sturen
- Het abonnement te pauzeren
- Contact op te nemen met de klant
Het systeem blokkeert het abonnement niet automatisch. Dat is een handmatige beslissing van de admin.
Adminflows
Section titled “Adminflows”Abonnement pauzeren of opzeggen
Section titled “Abonnement pauzeren of opzeggen”Route: /admin/subscriptions/[id]
De admin kan een abonnement pauzeren of opzeggen namens de klant.
Pauzeren:
- Het abonnement wordt tijdelijk stopgezet
- Er wordt geen volgende factuur gegenereerd
- De klant kan geen Unlimited daycare boeken zolang het gepauzeerd is
- De admin kan het abonnement later heractiveren
Opzeggen:
- Het abonnement wordt definitief gestopt
- Geen restitutie voor de lopende maand
- Openstaande facturen blijven verschuldigd
- De klant ontvangt een notificatie
Alle abonnementen overzien
Section titled “Alle abonnementen overzien”Route: /admin/subscriptions
De admin ziet een overzicht van alle Unlimited abonnementen:
Per abonnement:
- Klant en hond
- Status (actief, gepauzeerd, opgezegd)
- Startdatum
- Volgende betaaldatum
- Openstaande maandfacturen (ja/nee, met bedrag)
Filters:
- Status: actief / gepauzeerd / opgezegd
- Openstaande facturen: ja / nee
Abonnementen met openstaande facturen worden bovenaan getoond zodat de admin direct ziet wie achterloopt.
Factuurhistorie per abonnement
Section titled “Factuurhistorie per abonnement”Route: /admin/subscriptions/[id]
Per abonnement kan de admin de volledige factuurhistorie inzien:
Per factuur:
- Factuurnummer
- Factuurdatum
- Bedrag
- Betaalstatus (betaald, openstaand, verlopen)
- Betaalmethode (Sentoo, cash, pin)
- Betaaldatum (als betaald)
De admin kan vanuit deze lijst doorklikken naar de factuurdetails (/admin/invoices/[id]) om een herinnering te sturen of de factuur handmatig als betaald te markeren.