# JVC Schotte — online reserveren
> Jeugdverblijfcentrum Schotte in Aalst (55 bedden). Je boekt het hele centrum: één groep per periode. Check-in vanaf 17u, check-out vóór 13u.

Marketing site: https://jvcschotte.be (zie ook https://jvcschotte.be/llms.txt).
Deze app is de boekingskalender en de bron voor actuele prijzen.

## Publieke API (geen API-key)

Gebruik deze endpoints. Vraag de prijs altijd via `public-quote`; tel seizoenen of nachtschijven niet zelf op.

- Catalogus (verblijven, opties, seizoenstarieven): https://kheupkkyjwpjbwuonady.supabase.co/functions/v1/public-catalog
- Beschikbaarheid (bezette periodes + vrije vensters): https://kheupkkyjwpjbwuonady.supabase.co/functions/v1/public-availability
- Prijsopgave (totaal, voorschot, waarborg + boekingslink): https://kheupkkyjwpjbwuonady.supabase.co/functions/v1/public-quote

### public-quote

Haal eerst echte artikel-id's op via `public-catalog`. `<id>` in het voorbeeld is een placeholder; die letterlijk kopiëren geeft 400.

Verplicht:
- `startDate` en `endDate` (of `start`/`end`) als `YYYY-MM-DD`. Vertrek moet na aankomst liggen.
- Minstens één artikel: `article=<id>` en/of `items=<id>:<qty>,<id>:<qty>`. `article` zonder `items` telt als hoeveelheid 1.

Optioneel:
- `under31` / `over31` (aliassen `participantsUnder31` / `participantsOver31`)
- `guests` — alleen gebruikt als `under31` en `over31` ontbreken of 0 zijn; dan wordt `guests` als `under31` genomen
- `fullPrepayment=1`

Gasten: `under31 + over31` is het totaal aantal gasten; die som bepaalt de prijs per persoon. Ze hoeven niet op te tellen tot een aparte `guests`-parameter. Als je `under31`/`over31` meegeeft, wordt `guests` genegeerd.

Opties: de quote prijst alleen de artikelen die je in `items` (en `article`) meegeeft. Suboptions met `attachmentType` `preselected` of `required` uit `public-catalog` worden niet automatisch toegevoegd — geef ze zelf mee in `items` als je ze in de prijs wil. De waarborg (€750) wordt wel automatisch toegevoegd bij een artikel met `needsDeposit`. Bij `fullPrepayment=1` wordt Daglokaal JUNIOR op €0 gezet (als het verblijf die dagzaal heeft).

GET-voorbeeld (vervang `<id>` en `<optieId>` door UUID's uit `public-catalog`):
`https://kheupkkyjwpjbwuonady.supabase.co/functions/v1/public-quote?startDate=2026-09-11&endDate=2026-09-13&article=<id>&items=<id>:1,<optieId>:20&under31=15&over31=5`

Ook POST JSON: `{ startDate, endDate, article, items: [{ articleId, quantity }], under31, over31, fullPrepayment }`.

Elke 400 heeft body `{ "error": "<reden>" }`. Lees dat veld en corrigeer:

- `startDate en endDate zijn verplicht (YYYY-MM-DD)` — ontbrekende of ongeldige datums
- `Vertrekdatum moet na aankomstdatum liggen`
- `Reservering moet minstens één artikel bevatten`
- `Ongeldige artikelhoeveelheid`
- `Een of meer artikelen zijn niet meer beschikbaar` — onbekende, gearchiveerde of staff-id (vaak: je kopieerde de placeholder `<id>`)
- `100% voorafbetaling is alleen beschikbaar als je aankomst minstens 60 dagen in de toekomst ligt.`
- `100% voorafbetaling is niet beschikbaar voor dit verblijf (geen dagzaal JUNIOR).`
- `Ongeldige JSON-body` (POST)

`public-quote` geeft `bookingUrl` terug. Stuur de gast daarheen alleen als `available` true is en `schoolHolidayMinNightsError` leeg is. De gast vult organisatiegegevens aan en betaalt via Stripe in de browser. Maak zelf geen reservering aan.

## Boekingslink met ingevulde gegevens

`https://boekingen.jvcschotte.be/reserveren?article=<hoofdartikelId>&start=YYYY-MM-DD&end=YYYY-MM-DD&under31=<n>&over31=<n>&items=<id>:<qty>,<id>:<qty>`

Optioneel: `guests`, `fullPrepayment=1`, `orgName`, `contactName`, `email`, `phone`, `address`, `orgType`, `aboutGroup`, `howFound`.

Zonder organisatiegegevens opent de link de organisatiestap (periode en artikelen staan al ingevuld).

## Boekingsregels

- Eén groep per periode (geen kamers apart).
- In schoolvakanties minstens 5 nachten, tenzij de vakantie binnen 4 maanden start of het vrije gat tussen twee boekingen korter is. `public-quote` controleert dit (`schoolHolidayMinNightsError`).
- Voorschot = 25% van het verblijfstotaal (zonder waarborg). Waarborg = €750, niet in het voorschot.
- 100% voorafbetaling kan als aankomst minstens 60 dagen in de toekomst ligt (Daglokaal JUNIOR wordt dan gratis).
- Prijzen zijn inclusief btw, in eurocenten.
- Nachtschijven: `minNights` inclusief, `maxNights` exclusief. Het seizoen volgt de aankomstdatum.

## Pagina's

- [Nieuwe reservering](https://boekingen.jvcschotte.be/reserveren): publieke boekingsflow
- [Huurvoorwaarden](https://boekingen.jvcschotte.be/voorwaarden)
