Facturen
Rol: lid (eigen facturen bekijken), eigenaar (alle facturen beheren, aanmaken en status bijwerken)
De Facturen-tab geeft leden inzicht in hun openstaande en betaalde facturen. De eigenaar heeft een volledig overzicht van alle lidmaatschapsfacturen en kan nieuwe facturen aanmaken, betalingen registreren en facturen als achterstallig markeren.
Statusovergangen
Statusbadges
| Status | Kleur | Betekenis |
|---|---|---|
open | Amber / goud (#c9a84c) | Factuur openstaand, wacht op betaling |
paid | Groen (#2e8b76) | Betaling ontvangen, paidAt ingesteld |
overdue | Rood | Betaaltermijn overschreden |
Factuurtypen
| Type | Gebruik |
|---|---|
training | Factuur voor losse trainingen of trainingsabonnement |
membership | Maandelijkse of jaarlijkse contributie |
shop | Aankoop uit de clubwinkel |
trip | Clubuitje of toernooireis |
other | Overige kosten |
Toegangsregels
De listRule voor facturen is:
@request.auth.id = user.id || @request.auth.role = 'eigenaar'Een lid ziet uitsluitend eigen facturen. De eigenaar ziet alle facturen van alle leden. Dit wordt afgedwongen aan de PocketBase-kant — de app stuurt geen extra filter mee voor de lidrol.
Eigenaar-workflow
- Eigenaar maakt een factuur aan met
status: open, een factuurnummer (bv.INV-2025-042), bedrag, type en uiterste betaaldatum. - Bij ontvangst van betaling markeert de eigenaar de factuur als
paid. PocketBase (of de app-logica) steltpaidAtin op de huidige datum. - Wanneer een betaaltermijn overschreden is en er nog geen betaling is ontvangen, markeert de eigenaar de factuur handmatig als
overdue.
Datamodel
Facturen gekoppeld aan een lid. Enkel aangemaakt en beheerd door de eigenaar.
| Veld | Type | Verplicht | Beschrijving | Beperkingen |
|---|---|---|---|---|
user | relation | ✓ | Lid waaraan de factuur toebehoort | → users |
number | text | ✓ | Mensleesbaar factuurnummer (bv. INV-2025-042) | — |
name | text | ✓ | Omschrijving van de factuur (bv. Maandelijkse contributie) | — |
description | text | — | Uitgebreide toelichting | — |
amount | number | ✓ | Factuurbedrag in euro | min 0 |
status | select | ✓ | Betalingsstatus | open | paid | overdue |
type | select | — | Factuurtype voor categorisering | training | membership | shop | trip | other |
dueDate | date | — | Uiterste betaaldatum | — |
paidAt | date | — | Datum waarop betaling is ontvangen (ingevuld bij overgang naar paid) | — |
Toegangsregels
| Regel | Expressie |
|---|---|
list | @request.auth.id = user.id || @request.auth.role = 'eigenaar' |
view | @request.auth.id = user.id || @request.auth.role = 'eigenaar' |
create | @request.auth.role = 'eigenaar' |
update | @request.auth.role = 'eigenaar' |
delete | @request.auth.role = 'eigenaar' |
Ontwerpkeuzes
Handmatige overdue-markering (geen cron)
Er is bewust gekozen om overdue niet automatisch in te stellen op basis van dueDate. Een cron-job of server-side hook zou facturen stil kunnen omzetten, met het risico van ongewenste e-mails of mismatches als de datum verkeerd is ingevuld. De eigenaar heeft directe controle en kan context meewegen (bv. een betalingsregeling).
Mensleesbaar factuurnummer
Het number-veld (bv. INV-2025-042) staat los van de interne PocketBase record-ID. Dit maakt facturen herkenbaar in e-mailcorrespondentie en maakt het eenvoudig een doorlopende nummering bij te houden.
paidAt gestempeld bij statuswijziging
Wanneer de eigenaar de status naar paid zet, legt de app de huidige datum vast in paidAt. Dit biedt een auditspoor van betalingsdatums en is nuttig voor de boekhouding.