Rapportage
Base path: /api/reporting
Alle rapportage endpoints vereisen Admin auth.
GET /reporting/sales-summary
Totale verkoopomzet uit alle POS-orders.
Response:
{ "total_sales": 12450.00 }
GET /reporting/booking-count
Totaal aantal ooit aangemaakte boekingen.
Response:
{ "booking_count": 384 }
GET /reporting/item-breakdown
Top 10 producten en top 10 diensten op omzet uit POS-orders.
Query parameters: from (datum), to (datum)
Response:
{
"products": [
{ "product_id": 3, "name": "Shampoo X", "qty_sold": 24, "revenue": 288.00 }
],
"services": [
{ "service_id": 1, "name": "Knippen", "qty_sold": 56, "revenue": 1400.00 }
]
}
GET /reporting/staff-performance
Omzet, afgeronde afspraken en gemiddelde beoordeling per medewerker.
Query parameters: from (datum), to (datum)
Response: Array gesorteerd op omzet aflopend.
[
{
"id": 2,
"name": "Lisa",
"revenue": 3200.00,
"booking_count": 48,
"avg_rating": "4.7",
"review_count": 22
}
]
GET /reporting/retention
Klantretentie-analyse: terugkerende klanten, churnlijst, gemiddelde bezoekfrequentie.
Query parameters: from, to, churn_days (integer, standaard 90)
Response:
{
"active_count": 45,
"returning_count": 32,
"retention_rate": 71,
"avg_visit_days": 28,
"churned": [
{
"id": 12,
"name": "Anouk Jansen",
"email": "anouk@example.nl",
"last_booking": "2025-12-01",
"total_spent": 340.00
}
],
"churn_days": 90
}
De churned lijst is beperkt tot 50 klanten gesorteerd op naam.
GET /reporting/heatmap
Aantal boekingen per dag van de week en uur (voor drukke-uren heatmap).
Response: Array van { day, hour, count } objecten.
day gebruikt MariaDB's DAYOFWEEK() conventie: 1=Zondag, 2=Maandag, ..., 7=Zaterdag.
GET /reporting/forecast
Omzetprognose op basis van geplande boekingen.
Query parameters: days (integer, standaard 30)
Response: Array van { day, expected_revenue, booking_count } per dag.
GET /reporting/promotions
Gebruiksstatistieken van promoties.
Query parameters: from, to
Response:
{
"total_used": 38,
"total_discount": 284.50,
"promotions": [
{ "id": 1, "name": "Lenteactie", "code": "LENTE20", "times_used": 14, "total_discount": 112.00 }
]
}
GET /reporting/gift-cards
Cadeaukaartoverzicht: verkochte kaarten/waarde en openstaand saldo.
Query parameters: from, to
Datumfiltering
Alle endpoints accepteren from en to in JJJJ-MM-DD formaat. to wordt behandeld als einde van de dag (23:59:59).