Ga naar hoofdinhoud

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).