Skip to content

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.


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.

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.


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

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

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.


Route: /subscriptions

De klant kan het abonnement opzeggen via een knop op de abonnementspagina.

Wat er gebeurt:

  1. Bevestigingsdialoog met waarschuwing: “Er vindt geen restitutie plaats voor de lopende maand.”
  2. Na bevestiging: abonnement wordt op “opgezegd” gezet
  3. Het abonnement blijft actief tot het einde van de huidige betaalperiode
  4. Daarna wordt het definitief stopgezet
  5. De klant ontvangt een bevestigingsmail

Foutafhandeling:

  • Openstaande factuur: opzeggen is mogelijk, maar de openstaande factuur blijft verschuldigd

Op de facturatiedag van elk actief abonnement voert de pg_cron job het volgende uit:

  1. Controleer welke abonnementen aan verlenging toe zijn
  2. Per abonnement: maak een factuur aan met het maandbedrag (incl. BBO en BAZV)
  3. Maak een Sentoo transactie aan en genereer een betaallink
  4. Stuur de factuur per email (via Resend) met de betaallink
  5. 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.


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.


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

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.


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.