# Tillor Documentatie (/)
Welkom bij de Tillor documentatie! Hier vind je alle informatie die je nodig hebt om het Tillor platform te gebruiken.
## Wat is Tillor? [#wat-is-tillor]
Tillor is een uitgebreid parkbeheerplatform dat je helpt bij het beheren van je park, camping of recreatiegebied. Het platform biedt oplossingen voor:
* Klantenbeheer en CRM
* Facturering en betalingsverwerking
* Toegangscontrole met nummerplaatherkenning
* Meterbeheer op afstand
* Reserveringen en bezettingen
* En nog veel meer...
## Aan de slag [#aan-de-slag]
# Overzicht (/aan-de-slag)
Welkom bij Tillor! Dit platform helpt je bij het beheren van je park, camping of recreatiegebied.
## Wat is Tillor? [#wat-is-tillor]
Tillor is een uitgebreid parkbeheerplatform dat je helpt met:
* **Klantenbeheer**: Beheer alle klantgegevens op één plek
* **Facturering**: Maak en verstuur facturen
* **Betalingsverwerking**: Verwerk betalingen via verschillende methoden
* **Toegangscontrole**: Beheer wie toegang heeft tot je park
* **Meterbeheer**: Lees meters op afstand uit voor facturering
* **Reserveringen**: Beheer verblijven en reserveringskalender
## Eerste stappen [#eerste-stappen]
### 1. Inloggen [#1-inloggen]
1. Ga naar het Tillor inlogscherm
2. Kies een inlogmethode: **Inloggen met Google**, **Inloggen met Microsoft** of **Inloggen met Apple**
3. Volg de stappen van je gekozen provider
4. Je wordt automatisch ingelogd en ziet je dashboard
### 2. Dashboard verkennen [#2-dashboard-verkennen]
Na het inloggen zie je het hoofdmenu (**Navigatie**) met onder andere:
* **Dashboard**: Startscherm van je organisatie
* **Reserveringen**: Verblijven en reserveringskalender
* **Toegangscontrole**: Barrières en toegangslogboeken
* **Klanten**: Klantenlijst (*Klanten > Overzicht*) en openstaand verbruik
* **Park**: Plattegrond, terreinen, meters en meterkasten (bijv. *Park > Meters*, *Park > Terreinen*)
* **Communicatie**: Telefoongesprekken, notificaties en opmerkingen
* **Administratie**: Documenten, facturen, betalingen, betalingsrapporten en producten (bijv. *Administratie > Facturen*, *Administratie > Betalingen*)
* **Controllers**: Aangesloten hardware
### 3. Je eerste klant toevoegen [#3-je-eerste-klant-toevoegen]
Een veelvoorkomende eerste stap is het toevoegen van een klant:
1. Klik op **Klanten** in het hoofdmenu
2. Klik op **"Nieuwe klant aanmaken"** (rechtsboven)
3. Vul de klantgegevens in
4. Klik op **"Klant aanmaken"**
## Veelvoorkomende workflows [#veelvoorkomende-workflows]
### Een nieuwe reservering verwerken [#een-nieuwe-reservering-verwerken]
1. Klant boekt een plek via de website of telefonisch
2. Voeg de klant toe in Tillor als die nog niet bestaat
3. Open het klantprofiel, ga naar het tabblad **Reserveringen** en klik op **"Nieuwe reservering"**
4. Tillor toont bij het kiezen van een terrein alleen opties die in de gekozen periode beschikbaar zijn
5. Voeg nummerplaten toe als de gast toegang moet krijgen via nummerplaatherkenning
### Een factuur betalen [#een-factuur-betalen]
1. Klant ontvangt factuur per e-mail
2. Klant betaalt online via de betaallink
3. Betaling wordt automatisch verwerkt in Tillor
4. Factuur wordt gemarkeerd als betaald
5. Je ziet de betaling onder **Administratie > Betalingen**
## Hulp nodig? [#hulp-nodig]
Raadpleeg de andere documentatiepagina's voor gedetailleerde informatie over specifieke functies en workflows.
Voor **terughalen van gegevens uit een back-up** of vragen over **bewaartermijnen**, zie [Gegevens en back-ups](/gegevens-backups).
# Gegevens en back-ups (/gegevens-backups)
Tillor maakt in productie **automatisch back-ups** van de gegevens van je organisatie. Zo kan Tillor je helpen als er iets misgaat of als je gegevens uit het verleden nodig hebt.
## Hoe lang bewaart Tillor back-ups? [#hoe-lang-bewaart-tillor-back-ups]
Tillor houdt meerdere soorten back-ups naast elkaar. Samen geven die recent herstel en langere historie.
| Periode | Wat je kunt terugvinden |
| ------------------------------- | ---------------------------------------------------------------------- |
| **Laatste 48 uur** | Regelmatige snapshots (elke 4 uur) voor herstel op een recent tijdstip |
| **Laatste 14 dagen** | Eén nachtelijke back-up per dag |
| **Per afgelopen kalendermaand** | Eén maandarchief per maand, **zonder automatische verwijdering** |
De **huidige kalendermaand** heeft alleen de dagelijkse back-ups van de laatste 14 dagen. Zodra een maand is afgelopen, blijft één snapshot van die maand bewaard als maandarchief.
Back-ups draaien op de achtergrond. Je ziet ze niet als bestanden in het platform.
## Gegevens terughalen (herstel) [#gegevens-terughalen-herstel]
Herstellen doe je **niet zelf** in Tillor. Dat vraagt een zorgvuldige procedure zodat je huidige gegevens niet onbedoeld overschreven worden.
**Neem contact op met Tillor-support** en vermeld:
* je **organisatienaam**
* **welke gegevens** je terug wilt (bijv. facturen, klanten, reserveringen)
* het **gewenste tijdstip of de periode** (datum, of "gisteren rond 14:00", of "maart 2026")
Tillor-support bekijkt welke back-up daarbij past en voert het herstel uit in overleg met je.
Herstel kan gegevens terugzetten naar een eerdere stand. Bespreek altijd eerst wat er precies gebeurt voordat Tillor-support start.
## Wijzigingen in bewaartermijn [#wijzigingen-in-bewaartermijn]
De termijnen hierboven gelden voor alle organisaties op het platform. Als Tillor het beleid aanpast, wordt deze pagina bijgewerkt.
# Inloggen & Toegang (/inloggen)
Tillor is een webapplicatie die je opent via je browser. Je hebt een account nodig om in te loggen. Accounts worden aangemaakt door Tillor of je Tillor-beheerder.
## Inloggen [#inloggen]
Tillor gebruikt Single Sign-On (SSO). Je logt in met een bestaand account via een van de ondersteunde providers:
1. Ga naar de Tillor-webapplicatie via je browser
2. Kies je inlogmethode:
* **Inloggen met Microsoft**
* **Inloggen met Google**
* **Inloggen met Apple**
3. Volg de stappen van je gekozen provider
4. Kies je organisatie op het keuzescherm, of ga direct naar het dashboard als je maar één organisatie hebt
Je hebt geen apart Tillor-wachtwoord. Het wachtwoordbeheer verloopt volledig via Google, Microsoft of Apple.
## Account aanmaken [#account-aanmaken]
Gebruikersaccounts worden aangemaakt door Tillor of je Tillor-beheerder. Neem contact op met Tillor-support als je toegang nodig hebt voor een nieuwe medewerker.
Heb je al een account en toegang tot een organisatie? Log in via een van de SSO-providers hierboven.
## API-sleutels voor integraties [#api-sleutels-voor-integraties]
Voor technische koppelingen beheer je API-sleutels op je **Account**-pagina. Open **Ontwikkelaars** in je profielmenu en klik op **Ga naar API-sleutels**, of ga direct naar **Account** > **API-sleutels**. Zie [Ontwikkelaars](/ontwikkelaars) voor integratiedocumentatie.
# Zoeken (/zoeken)
De zoekfunctie geeft je snel toegang tot veel records in Tillor - klanten, facturen, reserveringen, bezettingen, terreinen, meters, telefoongesprekken en meer - vanuit één centrale plek.
## Zoeken openen [#zoeken-openen]
Klik op **Zoekopdracht** in de header (op kleinere schermen op het vergrootglas) of gebruik de sneltoets **⌘K** (Mac) of **Ctrl+K** (Windows) om het zoekvenster te openen.
## Wat kun je zoeken? [#wat-kun-je-zoeken]
De zoekfunctie doorzoekt deze categorieën (dezelfde namen zie je links onder *Zoek per categorie*):
| Categorie | Wat er wordt meegenomen (samenvatting) |
| ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Klanten** | Naam, klantnummer, e-mail, telefoon, adres en plaatsgegevens, BTW-nummer, opmerkingen, contactpersonen (naam, e-mail, telefoon), toegangsmethodes (waarden zoals NFC-UID, kenteken of andere codes die aan de klant hangen) |
| **Facturen** | Factuurnummer (met of zonder prefix, jaartal en scheidingstekens), technische ID uit links (`inv_abc123`), totaalbedrag, factuurnotities (publiek en intern) |
| **Bezettingen** | Terreinnaam, voor- en achternaam van de klant, bezetting-ID |
| **Reserveringen** | Reserveringsnummer (bijv. `RES/2024/0001`, met/zonder prefix, jaartal en scheidingstekens, compact `20240001`), technische ID uit links (`res_abc123`), notitie, voor- en achternaam van de gekoppelde klant |
| **Telefoongesprekken** | Inkomend en uitgaand nummer, gespreks-ID en externe referentie |
| **Terreinen** | Naam, beschrijving en ID van het terrein |
| **Meters** | Naam, serienummer en ID van de meter |
Er is geen aparte categorie *NFC-tags*. NFC-kaarten en andere toegangswaarden horen bij **Klanten** en verschijnen daar in het resultaat wanneer ze matchen.
Bij **Alle resultaten** staan per categorie maximaal tien treffers in de gemengde lijst. Als er minstens tien zijn, zie je **10+** bij die categorie in het linkerpaneel. Kies een categorie onder *Zoek per categorie* om gerichter te filteren - dan toont Tillor tot honderd treffers in die categorie.
## Zoekresultaten gebruiken [#zoekresultaten-gebruiken]
1. Begin met typen - na een moment verschijnen resultaten (er wordt kort gewacht tot je stopt met typen).
2. Gebruik de pijltjestoetsen om door de gemengde lijst te navigeren; de resultaten worden op relevantie gesorteerd (een goede match in de titel weegt zwaarder dan in de beschrijving).
3. Druk op **Enter** om de geselecteerde pagina te openen, of **Ctrl+Enter** (**⌘+Enter** op Mac) om ze in een nieuw browsertabblad te openen.
4. Kies links een categorie onder *Zoek per categorie* om alleen in die categorie te zoeken; kies **Alle resultaten** om het filter te wissen.
5. Druk op **Escape** om het venster te sluiten.
Voor **klanten** (en gerelateerde teksten) gebruikt Tillor bij de zoekopdracht ook **fonetische gelijkenis**: kleine spellingverschillen of typefouten worden vaker toch als treffer herkend. Dat geldt niet voor elke categorie op dezelfde manier - bij **reserveringen** en **facturen** geldt het vooral voor het nummer en notities.
## Tips voor efficiënt zoeken [#tips-voor-efficiënt-zoeken]
* **Kenteken, NFC of QR-code** - zoek in **Klanten** op de waarde die aan de klant hangt (toegangsmethode).
* **Factuurnummer** - typ het nummer zoals op de factuur, met of zonder jaartal en scheidingstekens; je kan ook op het totaalbedrag zoeken (zoals `120,50`).
* **Bezetting terrein + klant** - gebruik categorie **Bezettingen** of typ een terrein- of klantnaam die in de bezetting voorkomt.
* **Reserveringsnummer** - zelfde aanpak als factuurnummer: typ `RES/2024/0042`, `2024/0042`, `20240042` of een deel van het nummer.
* **Gedeeltelijke namen** - bij klanten volstaat vaak al; bij reserveringen helpt een trefwoord in de notitie of de voornaam van de klant.
# Activiteitenlog (/activiteitenlog)
De activiteitenlog registreert alle significante acties in het systeem. Dit geeft je inzicht in wat er is veranderd, wanneer het is gebeurd en door wie.
## Activiteitenlog bekijken [#activiteitenlog-bekijken]
In de app heet dit meestal **Gebeurtenissen** of **Activiteit**, afhankelijk van waar je bent. Er is geen apart centraal overzicht in het menu; je bekijkt activiteit op de detailpagina van het betreffende record.
| Waar | Navigatie | Label in de app |
| ------------------------------------ | ----------------------------------------------- | --------------------- |
| Klant (alle gerelateerde activiteit) | *Klanten > klant > Gebeurtenissen* | Gebeurtenissen |
| Factuur | *Administratie > Facturen > factuur* | Gebeurtenissen |
| Reservering | *Klanten > klant > Reserveringen > reservering* | Activiteit |
| Terrein | *Park > Terreinen > terrein* | Gebeurtenissen |
| Meter | *Park > Meters > meter* | Activiteit |
| Product | *Administratie > Producten > product* | Gebeurtenissen |
| Betalingsrapport | *Administratie > Betalingsrapporten > rapport* | Gebeurtenissenlogboek |
Per activiteit zie je in de tijdlijn:
* **Titel** - soort gebeurtenis (bijv. "Factuur geboekt", "Klant bijgewerkt")
* **Gebruiker** - medewerker die de actie uitvoerde (of Tillor bij automatische acties)
* **Tijdstip** - datum en relatieve tijd
* **Omschrijving** - aanvullende details; soms met koppelingen naar gerelateerde facturen of andere records
* **Voor / na** (soms) - bij wijzigingen aan klant-, terrein-, meter- of productgegevens: welke velden zijn gewijzigd
* **Bijlagen** (soms) - downloadbare bestanden, bijvoorbeeld bij mislukte integraties
## Activiteiten per record [#activiteiten-per-record]
Op detailpagina's zie je een tijdlijn met activiteit voor dat record. Op het tabblad **Gebeurtenissen** bij een klant staan alle activiteiten die aan die klant gekoppeld zijn (facturen, betalingen, bezettingen, enz.).
Screenshots met een **ℹ**-icoon hebben extra uitleg als je erover beweegt.
Voor **reserveringen** omvat dat onder meer aanmaken, inchecken en uitchecken, annuleringen en gerelateerde terugdraaiingen, en het bijwerken van reserveringsgegevens.
De activiteitenlog is alleen-lezen. Vermeldingen kunnen niet worden bewerkt of verwijderd.
## Waarvoor gebruik je de log? [#waarvoor-gebruik-je-de-log]
* **Controle** - nagaan welke medewerker een factuur heeft geboekt of een klant heeft gewijzigd
* **Probleemoplossing** - achterhalen wanneer een fout is opgetreden
* **Audits** - een volledig spoor bijhouden voor interne of externe controles
# Bezettingen (/bezettingen)
Een bezetting legt vast dat een specifieke klant een bepaald terrein (standplaats, campingplek, elektrapaal, etc.) in gebruik heeft. Zolang de bezetting actief is, wordt het verbruik van de meters op dat terrein automatisch aan de klant gekoppeld.
## Bezettingen bekijken [#bezettingen-bekijken]
Screenshots met een **ℹ**-icoon hebben extra uitleg als je erover beweegt.
1. Ga naar **Klanten** en open een klantprofiel (tab **Overzicht**)
2. Scroll naar de kaart **Bezettingen**
3. De tabel toont alle bezettingen van deze klant, met kolommen **Terrein**, **Type**, **Huurfrequentie**, **Prijs**, **Status** en **Betaald tot** (inclusief relatieve aanduiding, bijv. "over 12 dagen")
4. Bij **Betaald tot** staat een **info-icoon** met **Gefactureerd tot** in een tooltip wanneer die datum is ingevuld of gelijk is aan **Betaald tot**
5. Gebruik **Filter bezettingen...** om te zoeken op terreinnaam
6. Acties per bezetting (bewerken, verlengen, verwijderen) staan in het menu-icoon (drie puntjes) aan het einde van de rij
## Een bezetting aanmaken [#een-bezetting-aanmaken]
Een terrein kan maar door één klant tegelijk bezet zijn. Terreinen die al een actieve bezetting hebben, verschijnen niet in de keuzelijst.
1. Open het klantprofiel via **Klanten** (tab **Overzicht**)
2. Ga naar de kaart **Bezettingen**
3. Klik op **Bezetting aanmaken** in de werkbalk van de tabel
4. Er opent een dialoogvenster met de volgende velden:
**Terrein** (verplicht)
* Kies een terrein via de keuzelijst "Selecteer een terrein"
* Alleen beschikbare terreinen worden getoond (terreinen zonder actieve bezetting)
* Als er geen terreinen beschikbaar zijn, zie je de melding "Er zijn geen beschikbare terreinen gevonden."
**Betaald tot (optioneel)**
* Kies een datum tot wanneer de klant van tevoren heeft betaald
* Je kunt vandaag of een latere datum kiezen (verleden is uitgeschakeld)
**Gefactureerd tot (optioneel)**
* Laat leeg om dezelfde datum als **Betaald tot** te volgen in het overzicht, of kies een aparte datum
**Type**
* Kies of de bezetting gaat om **Eigen accommodatie** of **Huurcaravan**
* Standaard staat dit veld op **Eigen accommodatie**
**Huurfrequentie (optioneel)**
* Je kunt een frequentie vastleggen uit de opties die jouw organisatie heeft ingesteld
* Elke optie wordt bepaald door een **startmaand** en een **aantal maanden** (bijvoorbeeld start in januari, 6 maanden)
* Kies **Geen frequentie** als je geen vaste frequentie wilt registreren
**Beschrijving (optioneel)**
* Vrije toelichting bij deze bezetting (bijv. tariefafspraken of opmerkingen)
**Prijs**
* De bezetting erft standaard de prijs van het geselecteerde terrein
* Je kunt deze prijs per bezetting overschrijven via **Overgenomen terreinprijs overschrijven**
**Start meterstanden (optioneel)** (verschijnt alleen als het gekozen terrein meters heeft)
* Zodra je een terrein selecteert, verschijnt een sectie voor de beginmeterstanden
* Als het terrein geen gekoppelde meters heeft, zie je **Geen meters gekoppeld** in plaats van invoervelden
* Per meter kun je:
* Een waarde handmatig invoeren via het tabblad **Handmatig** (standaard)
* Schakelen naar het tabblad **Selecteren** om een bestaande uitlezing te kiezen (alleen zichtbaar als er eerdere uitlezingen beschikbaar zijn)
* Als je niets invult, neemt het systeem de laatste bekende meterstand als beginwaarde
5. Klik op **Bezetting aanmaken** om op te slaan
### Wat gebeurt er na aanmaken? [#wat-gebeurt-er-na-aanmaken]
* De bezetting is direct actief
* Het systeem maakt automatisch consumptiebatches aan voor elke meter op het terrein
* Nieuwe meterstanden worden bijgehouden als verbruik van deze klant
* De bezetting verschijnt in de tabel in de kaart **Bezettingen** op het klantprofiel
## Een bezetting beëindigen [#een-bezetting-beëindigen]
Het beëindigen van een bezetting verwijdert de koppeling tussen de klant en het terrein. Het terrein komt daarna weer beschikbaar voor een nieuwe bezetting.
1. Ga naar de kaart **Bezettingen** op het klantprofiel (tab **Overzicht**)
2. Klik op het menu-icoon (drie puntjes) naast de bezetting
3. Kies **Verwijderen**
4. Er opent het dialoogvenster **Bezetting verwijderen**
**Eind meterstanden (optioneel)** (verschijnt als het terrein meters heeft)
* Kies eerst bij **Datum** de dag waarop de bezetting eindigt (alleen datums in het verleden of vandaag zijn selecteerbaar)
* Nadat je een datum hebt gekozen, verschijnt er per meter een veld voor de eindmeterstand
* Per handmatige meter kun je:
* Een waarde invoeren via het tabblad **Handmatig**
* Schakelen naar het tabblad **Selecteren** om een bestaande uitlezing van die dag te kiezen
* Voor meters die automatisch uitlezingen doorsturen, kies je altijd een bestaande uitlezing via de keuzelijst "Selecteer een meterstand"
5. Klik op **Verwijderen** om de bezetting definitief te beëindigen
Wanneer je een bezetting beëindigt, sluit het systeem automatisch de openstaande consumptiebatches af. Het verbruik van de klant tot aan de einddatum blijft bewaard en kan nog worden gefactureerd.
## Een bezetting bewerken [#een-bezetting-bewerken]
1. Ga naar de kaart **Bezettingen** op het klantprofiel (tab **Overzicht**)
2. Klik op het menu-icoon (drie puntjes) naast de bezetting
3. Kies **Bewerken**
4. Pas de gewenste velden aan:
* **Terrein** (alleen-lezen, niet wijzigbaar in de bewerkdialoog)
* **Type**
* **Huurfrequentie**
* **Beschrijving** (optioneel)
* **Betaald tot**
* **Gefactureerd tot** (optioneel; laat leeg om dezelfde datum als **Betaald tot** te volgen)
* **Prijs** (standaard geerfd van het terrein, optioneel overschrijfbaar)
5. Klik op **Wijzigingen opslaan**
## Facturatie: bezetting verlengen [#facturatie-bezetting-verlengen]
1. Ga naar de kaart **Bezettingen** op het klantprofiel (tab **Overzicht**)
2. Start de actie voor **één** bezetting of voor **alle** bezettingen van deze klant:
* **Eén bezetting:** open het menu-icoon (drie puntjes) naast de bezetting en kies **Bezetting verlengen (factuur)**.
* **Alle bezettingen:** klik in de werkbalk op **Alles verlengen** om ze in **één** conceptfactuur te zetten (één hoofdregel per bezetting).
3. In het dialoogvenster vink je **Openstaand verbruik van dit terrein factureren** aan (bij **Alles verlengen**: **Openstaand verbruik factureren (alle terreinen)**) als je op **dezelfde conceptfactuur** ook meteen openstaand verbruik wilt factureren wanneer dat op de betrokken meters staat.
4. Klik op **Conceptfactuur aanmaken**. Tillor maakt een conceptfactuur met het eerste product met actie **Bezetting verlengen** (alfabetisch op naam) en bouwt de bundel op dat product voor je op. Vul daarna de periode op de factuur af en boek wanneer je klaar bent.
Er moet minstens één product met actie **Bezetting verlengen** bestaan (vaak Staangeld). Wanneer je het vakje voor verbruik aanvinkt maar er is geen openstaand verbruik op de betrokken meter(s), blijft het bij de regels voor bezetting verlengen alleen. Integrators kunnen hetzelfde via de HTTP-API doen: `POST .../occupations/extend-draft-invoices` met **`occupationIds`** (zie OpenAPI).
## Meterstanden bij aan- en afmelden [#meterstanden-bij-aan--en-afmelden]
### Handmatige meters [#handmatige-meters]
Bij handmatige meters voer je de meterstand zelf in via het tabblad **Handmatig**. Het invoerveld toont de laatste bekende stand als voorbeeldwaarde. Als er al eerdere uitlezingen beschikbaar zijn, kun je via het tabblad **Selecteren** ook een bestaande uitlezing kiezen.
### Meters met automatische uitlezingen [#meters-met-automatische-uitlezingen]
Voor meters die niet handmatig worden ingevoerd (automatische uitlezingen), kies je altijd een bestaande uitlezing via **Selecteer een meterstand**. Handmatig invoeren is voor dit type meters niet mogelijk.
### Waarschuwing: lagere stand dan verwacht [#waarschuwing-lagere-stand-dan-verwacht]
Als je een meterstand invoert die lager is dan de vorige opgeslagen stand, toont het systeem een waarschuwing. Je kunt dan kiezen om de lagere waarde alsnog te bevestigen, of de invoer aan te passen.
## Betaald tot, type, huurfrequentie en prijs [#betaald-tot-type-huurfrequentie-en-prijs]
* **Betaald tot** geeft aan tot wanneer een klant vooruit heeft betaald voor de bezetting.
* **Gefactureerd tot** kun je apart bijhouden (optioneel). Laat je het leeg, dan volgt de weergave **Betaald tot**. Bij **boeken** van een factuur met **Bezetting verlengen** zet Tillor **Gefactureerd tot** op het eindmoment van de regel. Na **betaling** werkt Tillor **Betaald tot** bij; **Gefactureerd tot** gaat alleen mee vooruit als die nog vóór dat eindmoment lag.
* Bij **aanmaken** of **bewerken** van een bezetting kun je in de datumkiezer voor **Betaald tot** alleen vandaag of een latere datum kiezen.
* **Type** helpt om te onderscheiden tussen eigen verblijf en verhuur.
* **Huurfrequentie** legt het ritme van de huur vast voor administratieve opvolging.
* **Prijs** volgt standaard het terrein, maar kan per bezetting worden aangepast.
Deze velden zijn informatief en sturen niet automatisch de meterregistratie of facturering.
## Veelvoorkomende scenario's [#veelvoorkomende-scenarios]
### Scenario: Nieuwe gast checkt in [#scenario-nieuwe-gast-checkt-in]
1. Je voegt de gast toe als klant (of zoekt de bestaande klant op)
2. Je opent het klantprofiel (tab **Overzicht**) en gaat naar de kaart **Bezettingen**
3. Je klikt op **Bezetting aanmaken**
4. Je selecteert de standplaats
5. Je vult de beginmeterstand in (of laat het systeem de laatste stand overnemen)
6. Je klikt op **Bezetting aanmaken** om op te slaan
7. Het systeem koppelt het verbruik van de meters op die standplaats voortaan aan deze klant
### Scenario: Gast vertrekt [#scenario-gast-vertrekt]
1. Je opent het klantprofiel (tab **Overzicht**)
2. Je gaat naar de kaart **Bezettingen**
3. Je klikt op het menu-icoon naast de bezetting en kiest **Verwijderen**
4. Je selecteert de vertrekdatum en voert de eindmeterstanden in
5. Je klikt op **Verwijderen** om te bevestigen
6. Het systeem sluit de consumptiebatches af en het terrein is weer beschikbaar
### Scenario: Klant verhuist naar andere standplaats [#scenario-klant-verhuist-naar-andere-standplaats]
1. Beëindig de huidige bezetting (zie hierboven) met de eindmeterstanden van de oude standplaats
2. Maak een nieuwe bezetting aan op de nieuwe standplaats met de beginmeterstanden
3. Het systeem houdt de verbruiksperiodes per standplaats apart bij
# Documenten (/documenten)
Met documentbeheer in Tillor kun je bestanden koppelen aan klanten of tijdelijk bewaren in de centrale documentenlijst. Denk aan verzekeringspolissen, contracten, vergunningen en andere bijlagen die je bij een dossier wilt bewaren.
## Documenten bij een klant [#documenten-bij-een-klant]
### Documenten bekijken [#documenten-bekijken]
1. Ga naar **Klanten** in het hoofdmenu.
2. Open het profiel van de gewenste klant.
3. Klik op het tabblad **Documenten**.
4. Je ziet een lijst met alle documenten die aan deze klant zijn gekoppeld.
5. Klik op een document in de lijst om het direct naast de lijst te bekijken in het voorbeeldpaneel.
### Een document downloaden of verwijderen [#een-document-downloaden-of-verwijderen]
Naast elk document in de lijst staan drie knoppen:
* **Preview** (oogpictogram): Laadt het document in het voorbeeldpaneel rechts.
* **Download** (downloadpictogram): Slaat het bestand op je computer op.
* **Verwijderen** (prullenbakpictogram): Verwijdert het document na bevestiging.
### Een document verwijderen [#een-document-verwijderen]
1. Klik op het prullenbakpictogram naast het document.
2. Bevestig de verwijdering in het dialoogvenster door op **Verwijderen** te klikken, of annuleer met **Annuleren**.
Na het verwijderen ontvang je op je account-e-mailadres een bericht met het verwijderde document als bijlage (wanneer het bestand kon worden veiliggesteld). Zo heb je meestal een kopie achter de hand.
## De centrale documentenlijst [#de-centrale-documentenlijst]
Naast documenten bij klanten heeft Tillor een centrale documentenlijst. Hier verschijnen bestanden die nog niet aan een klant zijn gekoppeld, bijvoorbeeld documenten die via e-mail zijn binnengekomen.
### De centrale lijst openen [#de-centrale-lijst-openen]
Ga naar **Administratie** in het navigatiemenu en klik op **Documenten**.
### Een document uploaden [#een-document-uploaden]
1. Ga naar **Documenten** onder **Administratie**.
2. Sleep een bestand naar het uploadgebied, of klik op **Selecteer bestand**.
3. Het bestand wordt automatisch opgeslagen en verschijnt als een nieuw item in de lijst.
Je kunt ook een document insturen via een speciaal e-mailadres. Dit adres staat vermeld in het uploadgebied. Stuur het bestand als bijlage naar dat adres - het document verschijnt dan automatisch in de centrale documentenlijst.
### Ondersteunde bestandstypen [#ondersteunde-bestandstypen]
Je kunt de volgende bestandstypen uploaden:
* PDF
* Word-documenten (.doc, .docx)
* Excel-bestanden (.xls, .xlsx)
* PowerPoint-presentaties (.ppt, .pptx)
* Afbeeldingen (JPEG, PNG, GIF)
* Tekstbestanden (.txt)
De maximale bestandsgrootte is **50 MB** per bestand.
Afbeeldingen (JPEG, PNG, GIF) worden automatisch omgezet naar PDF na het uploaden. Zo kun je ze altijd bekijken en downloaden als een normaal document.
### Een document koppelen aan een klant [#een-document-koppelen-aan-een-klant]
Elk document in de centrale lijst wordt getoond met een bewerkingsformulier en een voorbeeldpaneel. Vul de gewenste velden in en sla op om het document te koppelen:
1. Ga naar **Documenten** onder **Administratie**.
2. Scroll naar het gewenste document in de lijst.
3. Vul de velden in:
* **Documentnaam**: De naam van het document.
* **Toewijzen aan Klant**: Selecteer de klant waaraan dit document hoort (optioneel).
* **Verzekeringsvervaldatum**: De datum waarop een verzekering of vergunning verloopt (optioneel).
* **Opmerkingen**: Vrije notities bij het document (optioneel).
4. Klik op **Wijzigingen Opslaan**.
Zodra een document aan een klant is gekoppeld, verdwijnt het uit de centrale lijst en is het terug te vinden op het tabblad **Documenten** van dat klantprofiel.
## AI-suggesties bij documenten [#ai-suggesties-bij-documenten]
Wanneer je een PDF uploadt, analyseert Tillor de inhoud automatisch op de achtergrond. Op basis van die analyse kan het systeem een klant voorstellen die overeenkomt met de tekst in het document.
### Voorgestelde klant [#voorgestelde-klant]
Als Tillor een naam herkent die overeenkomt met een klant in jouw administratie, verschijnt er naast het veld **Toewijzen aan Klant** een suggestieknop. De knop toont de naam van de voorgestelde klant en een percentage dat aangeeft hoe zeker het systeem is.
Klik op de suggestieknop om de klant direct over te nemen, of kies zelf een andere klant uit de lijst.
AI-suggesties zijn altijd een voorstel. Je kunt ze accepteren, aanpassen of negeren. Klik op **Wijzigingen Opslaan** om je keuze definitief te maken.
# Facturen (/facturen)
Het factuurmodule is het centrale punt voor al je facturatie. Hier maak je nieuwe facturen aan, voeg je regelitems toe, boek je ze definitief in en verwerk je betalingen.
## Overzicht van de facturenlijst [#overzicht-van-de-facturenlijst]
Ga naar **Administratie** > **Facturen** om een overzicht te zien van alle facturen in het systeem. Bovenaan staan vier statistieken. Groene markering **1** is de navigatie; markering **2** is de facturentabel.
* **Totaal aantal facturen** - alle facturen in het systeem
* **Openstaande facturen** - onbetaald of gedeeltelijk betaald
* **Achterstallige facturen** - vervaldatum verstreken
* **Totaal openstaand** - totaalbedrag openstaande facturen
### Zoeken en filteren [#zoeken-en-filteren]
Gebruik de zoekbalk om te zoeken op factuurnummer, klantnaam of e-mailadres. Daarnaast kun je de lijst verfijnen via de filteropties:
* **Periode** - filter op factuurdatum
* **Status** - concept of geboekt
* **Betaalstatus** - onbetaald, gedeeltelijk betaald of betaald
* **Klanttype** - particulier of zakelijk
* **Klant** - filter op een specifieke klant
* **Producten** - toon alleen facturen met een bepaald product
* **Bedrag** - filter op een minimaal of maximaal factuurbedrag
## Een nieuwe factuur aanmaken [#een-nieuwe-factuur-aanmaken]
Facturen maak je aan vanuit een klantprofiel, niet vanuit **Administratie** > **Facturen**.
1. Ga naar **Klanten** en open het profiel van de gewenste klant
2. In het **Facturen**-blok (markering **1**): klik op **Nieuwe factuur** (markering **2**)
3. Tillor maakt een conceptfactuur aan en opent de factuurpagina
Een nieuwe factuur krijgt automatisch een conceptnummer en de huidige datum als factuurdatum, met de standaard betaaltermijn van je organisatie (standaard 7 dagen).
## Factuurregels toevoegen en bewerken [#factuurregels-toevoegen-en-bewerken]
Op de factuurpagina zie je een tabel met regelitems. Zolang de factuur de status **Concept** heeft, kun je de inhoud vrij aanpassen.
### Een nieuw regelitem toevoegen [#een-nieuw-regelitem-toevoegen]
1. Klik op de lege rij onderaan de tabel (het gemarkeerde invulveld)
2. Selecteer optioneel een **product** uit de productlijst - beschrijving en prijs worden dan automatisch ingevuld
3. Vul of pas aan:
* **Beschrijving** - omschrijving van de post
* **Aantal** - het aantal eenheden
* **Prijs (incl. BTW)** - de eenheidsprijs inclusief BTW
4. Het totaal per regel wordt automatisch berekend
Als het gekozen product **acties op factuurregel** heeft, verschijnt er een extra invulblok onder de regel:
* **NFC Tag Opladen** - kies de tag die opgeladen moet worden
* **Periode** - kies start- en einddatum (en optioneel pro rata)
* **Bezetting verlengen** - kies een actieve bezetting van de klant, daarna **startdatum** en **einddatum**. Na het kiezen van de startdatum opent Tillor meteen de kalender voor de einddatum (zelfde flow als bij reserveringen).
Voor **Bezetting verlengen** is het selecteren van een actieve bezetting verplicht. Tillor bewaart hierbij een snapshot op de factuurregel, zodat je later nog kunt zien op welke bezetting de actie sloeg, ook als die bezetting intussen verwijderd is.
Na **betaling** van een regel **NFC Tag Opladen** wordt het bedrag bij het saldo van de tag geschreven. Op de **gebeurtenissen**-tijdlijn van de factuur en van de klant verschijnt een regel die dit aan deze factuur koppelt.
**Bezetting verlengen** heeft een optie **Afronden op volgende periodegrens**:
* **Aan** - de regel eindigt op de eerstvolgende geldige periodegrens van de huurfrequentie. Zo lijnen klanten op termijn uit op dezelfde cyclus.
* **Uit** - de regel duurt exact de gekozen frequentie vanaf de startdatum (bijvoorbeeld maandelijks van 16 april t.e.m. 15 mei).
Wanneer de optie **Aan** staat:
* Heeft de bezetting al een **Betaald tot** datum? Tillor begint de nieuwe regel op de dag erna en eindigt op de eerstvolgende periodegrens.
* Is **Betaald tot** nog leeg? Kies dan zelf een startdatum via de kalender. Tillor berekent automatisch de einddatum op de eerstvolgende periodegrens.
Voorbeeld voor een jaarperiode (jan. - dec.):
* Startdatum 5 mei 2026 met **Betaald tot** leeg → factuurperiode 5 mei 2026 t.e.m. 31 dec. 2026 (pro rata).
* Volgende factuur na betaling → factuurperiode 1 jan. 2027 t.e.m. 31 dec. 2027 (volledig jaar).
Na **boeken** van een factuur met **Bezetting verlengen** zet Tillor **Gefactureerd tot** van de bezetting op het gekozen terrein op het eindmoment van die regel, tenzij die datum al verder lag. **Betaald tot** verandert dan nog niet.
Na **betaling** van zo'n regel werkt Tillor **Betaald tot** bij. **Gefactureerd tot** schuift alleen op als die nog vóór het eindmoment van de regel lag; stond hij al gelijk, dan blijft hij staan. Op de **gebeurtenissen**-tijdlijn van de factuur en van de klant verschijnt een regel die dit aan de betaling koppelt.
De berekende einddatum is **inclusief** (bijvoorbeeld 01/01/2026 t.e.m. 31/12/2026). De aantalwaarde op de regel wordt steeds als breuk van de huurperiode berekend, zodat een halve periode ook half wordt aangerekend.
De omschrijving van de regel wordt automatisch opgebouwd als: **Productnaam | Terreinnaam | Periode**.
### Regelitems herschikken of verwijderen [#regelitems-herschikken-of-verwijderen]
* Gebruik de pijltjesknoppen om de volgorde van regelitems aan te passen
* Klik op het prullenbak-icoon rechts van een rij om een regelitem te verwijderen
### Notitie toevoegen [#notitie-toevoegen]
Onder de tabel kun je een **notitie** invoeren. Deze tekst verschijnt op de factuur zelf en is zichtbaar voor de klant.
### Automatisch opslaan [#automatisch-opslaan]
Wijzigingen in een conceptfactuur worden automatisch opgeslagen terwijl je typt. Je kunt ook handmatig opslaan via **Wijzigingen opslaan** of wijzigingen ongedaan maken via **Annuleren**.
## Statussen van een factuur [#statussen-van-een-factuur]
Elke factuur heeft twee soorten statussen die samen het volledige beeld geven.
### Factuurstatus [#factuurstatus]
| Status | Betekenis |
| ----------- | ---------------------------------------------------------------------- |
| **Concept** | De factuur is nog bewerkbaar en niet definitief vastgelegd |
| **Geboekt** | De factuur is definitief en heeft een officieel factuurnummer gekregen |
### Betaalstatus [#betaalstatus]
| Status | Betekenis |
| ---------------- | --------------------------------- |
| **Onbetaald** | Er is nog geen betaling ontvangen |
| **Gedeeltelijk** | Er is een deelbetaling ontvangen |
| **Betaald** | De factuur is volledig voldaan |
## Een factuur boeken [#een-factuur-boeken]
Wanneer de factuur klaar is, boek je hem definitief in.
1. Controleer alle regelitems en de notitie (markering **1**)
2. Voor **Bezetting verlengen**: kies een bezetting én een volledige periode (**start- en einddatum**). Zonder ingevulde periode is **Boek factuur** niet beschikbaar.
3. Klik op **Boek factuur** (markering **2**)
4. Het systeem:
* Kent een definitief, oplopend factuurnummer toe
* Stelt de factuurstatus in op **Geboekt**
* Berekent eventuele afrondingsverschillen automatisch bij
Na het boeken is de factuur niet meer bewerkbaar. Zorg dat alle gegevens correct zijn voordat je boekt. Een geboekte factuur kan teruggezet worden naar concept als er nog geen notificaties zijn verstuurd, de factuur niet via Peppol is verzonden, en de factuurdatum minder dan 7 dagen geleden is (zie **Terugzetten naar concept**).
### Belgische bedrijven en Peppol [#belgische-bedrijven-en-peppol]
Boek je een factuur voor een Belgische klant met een BTW-nummer? Dan moet er een **Peppol ID** ingesteld zijn bij **Klanten** > klant > **Facturatie** voordat je kunt boeken.
## Een factuur versturen [#een-factuur-versturen]
Na het boeken kun je de klant op de hoogte stellen van de factuur.
### Factuurmelding versturen [#factuurmelding-versturen]
1. Open de geboekte factuur
2. Klik op **Verstuur notificatie**
3. Bevestig de verzending in het venster dat verschijnt
4. Kies via welke kanalen je wilt versturen:
* **E-mail** - de klant ontvangt een e-mail met de factuur als bijlage
* **SMS** - de klant ontvangt een sms-bericht (indien beschikbaar)
* **Post** - de factuur wordt als PDF per post verstuurd (indien het postadres van de klant is ingevuld). Post staat standaard uit.
### Herinnering versturen [#herinnering-versturen]
Wanneer een factuur al verstuurd is maar nog niet betaald:
1. Open de factuur
2. Klik op het pijltje naast **Verstuur notificatie** en kies **Verstuur aanmaning**
3. Bevestig de herinnering in het dialoogvenster
4. Kies de kanalen (e-mail, sms en/of post). Sms staat standaard aan bij herinneringen. Bij post ontvangt de klant een aanmaningsbrief met de factuur als bijlage. Op de brief staat een QR-code om online te bekijken of te betalen (dezelfde code als op de factuur-PDF), eventueel met gestructureerde mededeling en IBAN.
5. Vink je **Post** aan. Tillor toont een indicatief portobedrag per brief (afhankelijk van het land van het postadres). Bij aanmaningen kun je optioneel **Aangetekend met ontvangstbevestiging** kiezen. Dat geldt alleen bij aanmaningen, niet bij de eerste factuurmelding. Tillor toont dan ook het indicatieve extra bedrag bovenop de gewone portokosten. Is aangetekend niet beschikbaar voor dat adres, dan blijft gewone post wel mogelijk.
Notificaties en herinneringen kunnen alleen voor **geboekte** facturen. **Verstuur notificatie** verschijnt alleen als de klant minstens een e-mailadres, telefoonnummer of volledig postadres (straat, postcode en gemeente) heeft. In het bevestigingsvenster kies je minstens een kanaal dat voor die klant beschikbaar is.
### Status van postzendingen [#status-van-postzendingen]
Na verzending volgt Tillor de Pingen-trackingsstappen in **Communicatie** > **Notificaties**: **PDF ontvangen**, **Gevalideerd**, **In verwerking**, **In printcenter** (paars) en **Overgedragen aan post**, tot de status **Verzonden** wordt. Zolang er nog geen tracking binnen is, blijft de status **In afwachting**. In het detailvenster zie je ook de **Referentie vervoerder** en de ruwe **Trackingstatus** van Pingen. Bij elke postzending zie je het portobedrag op het moment van verzending. Was de brief aangetekend, dan staat dat in het detailvenster met het label **Aangetekend** en het bedrag aan extra portokosten bovenop de gewone portokosten. Onbestelbare post wordt **Mislukt**. Een geannuleerde brief bij de vervoerder wordt **Overgeslagen** (vooral zichtbaar onder **Recente communicaties**).
## Een betaling registreren [#een-betaling-registreren]
Geboekte facturen met een openstaand bedrag kunnen worden voldaan via het betaaldialoogvenster. Screenshots met **ℹ** tonen extra uitleg bij hover.
1. Open de geboekte factuur
2. Klik op **Maak betaling** (markering **2**)
3. Selecteer een betaalmethode:
* **Terminal** - stuurt de betaalaanvraag naar een aangesloten betaalterminal
* **Interne overboeking** - verplaatst het bedrag naar een andere factuur van dezelfde klant
* **Contant** - registreer een contante betaling
* **Overschrijving** - registreer een ontvangen overschrijving
* **SEPA Mandaat** - voer een automatische incasso uit via een actief mandaat
4. Vul het bedrag in (standaard het volledige openstaande bedrag) of kies snel 25%, 50%, 75% of 100%
5. Bij **Contant** of **Overschrijving**: optioneel **Datum van ontvangst** en **Opmerking**
6. Klik op **"Voer betaling uit"**
Voor contante betalingen geldt een wettelijk maximum. Voor bankoverschrijvingen kun je optioneel een betalingsherinnering met rekeninggegevens meesturen naar de klant.
### Betaling toewijzen vanuit een synced rekening [#betaling-toewijzen-vanuit-een-synced-rekening]
Zijn er inkomende betalingen binnengekomen via een gekoppelde rekening? Koppel die via het actie-menu rechtsboven op de factuurpagina: klik op de drie stippen en kies **Betaling koppelen**.
## Een factuur afdrukken of downloaden [#een-factuur-afdrukken-of-downloaden]
Op elke factuurpagina vind je de printknop.
* **Afdrukken** - opent een afdrukvenster in de browser
* **Openen in nieuw venster** - opent de PDF in een nieuw venster
* **Download PDF** - slaat de factuur op als PDF-bestand
* **Verstuur naar printer** - stuurt de factuur naar een aangesloten printer (via het dropdownmenu ook **Verstuur naar thermische printer**)
* **Voorvertoning op iPad** - stuurt de factuur-PDF naar een gekoppelde iPad (actiemenu, of in het betaaldialoog bij **Contant**)
## Geavanceerde acties [#geavanceerde-acties]
Via het actiemenu (de drie stippen rechtsboven op de factuurpagina) vind je aanvullende opties.
### Persoonlijke URL [#persoonlijke-url]
Genereer een persoonlijke factuur-URL voor de klant en kopieer die naar het klembord. Deel die link zelf via een kanaal naar keuze.
### Kopieer factuur [#kopieer-factuur]
Maak een nieuw concept aan met dezelfde regelitems als de huidige geboekte factuur.
### Keer factuur om [#keer-factuur-om]
Maak een creditfactuur aan die de huidige geboekte factuur corrigeert. Er wordt een nieuw concept aangemaakt met negatieve bedragen voor alle regelitems. Na controle kun je dit concept ook boeken.
### Verstuur naar boekhoudsoftware [#verstuur-naar-boekhoudsoftware]
Stuur de factuur handmatig door naar de gekoppelde boekhoudsoftware (bijvoorbeeld Admisol). Dit gebeurt normaal automatisch; via dit menu kun je de overdracht opnieuw starten.
### Factuur herberekenen [#factuur-herberekenen]
Bereken de factuurtotalen opnieuw. Gebruik dit als je vermoedt dat er een discrepantie is in de bedragen.
## Terugzetten naar concept [#terugzetten-naar-concept]
Heb je een factuur geboekt maar moet je er toch iets aan wijzigen? Dan kun je hem onder bepaalde voorwaarden terugzetten naar concept.
**Voorwaarden:**
* De factuur is geboekt
* Er zijn nog geen notificaties (e-mail of sms) verstuurd
* De factuur is niet via Peppol verstuurd
* De factuur is jonger dan 7 dagen (op basis van de factuurdatum)
Klik op **Terugzetten naar concept** en bevestig de actie. De factuur krijgt een conceptnummer met het oorspronkelijke nummer tussen haakjes. Na aanpassingen boek je opnieuw met **Boek factuur**; Tillor gebruikt dan opnieuw het oorspronkelijke factuurnummer.
## Facturen per klant bekijken [#facturen-per-klant-bekijken]
Naast het centrale factuuroverzicht kun je ook per klant alle facturen inzien.
1. Ga naar **Klanten** en open het klantprofiel
2. Bekijk het kaart **Facturen** op het klantoverzicht, of open het tabblad **Facturatie**
3. Je ziet alle facturen van deze klant, inclusief status, bedrag en betaalstatus
# Identiteitsscans (/identiteitsscans)
Met een **identiteitslezer** scan je paspoorten, ID-kaarten en rijbewijzen. Tillor leest de gegevens uit en helpt je **snel een klant aan te maken** zonder alles handmatig over te typen. De lezer stuurt het scanpakket via de **Tillor-connector** op je lokale netwerk naar je organisatie.
## Klant aanmaken vanuit een scan [#klant-aanmaken-vanuit-een-scan]
Dit is de gebruikelijke workflow na een scan op de balie of bij check-in.
1. Ga naar **Klanten** > **Overzicht** en klik op **Nieuwe klant aanmaken**.
2. Zolang er **openstaande scans** zijn, toont de knop een **dropdown**: kies **Manueel** of een scan uit de lijst.
3. Na het kiezen van een scan opent een **bevestigingsdialog** met documentvoorbeeld en MRZ-gegevens. Klik op **Klant aanmaken**.
4. Tillor maakt de klant aan, koppelt de scan en vult waar mogelijk voornaam, achternaam, geboortedatum, adres en andere velden in. Je landt op het nieuwe klantprofiel.
Dezelfde flow werkt ook via **Reservering starten** (**Nieuwe klant…**) en via het **activity dock** rechtsonder met **Klant aanmaken op basis van scan**.
**Klant aanmaken op basis van scan** vereist minimaal een **voornaam** in de scan. Staat er al een klant met hetzelfde **rijksregisternummer**, dan moet je de scan aan die bestaande klant koppelen in plaats van een dubbele aan te maken.
Zie ook [Klantenbeheer](/klantenbeheer) voor de volledige stappen met screenshots in de sectie *Een nieuwe klant toevoegen*.
## Bewaartermijn en uw verantwoordelijkheid [#bewaartermijn-en-uw-verantwoordelijkheid]
Scans die **nog niet aan een klant** zijn gekoppeld, verwijdert Tillor **automatisch na 7 dagen** (scanrecord en bijbehorende bestanden). Koppel of verwerk openstaande scans tijdig via **Nieuwe klant aanmaken**, het activity dock of een gestippelde kaart op een klantprofiel.
Voor **gekoppelde** scans geldt een andere regel: die blijven bewaard tot **uw organisatie** ze ontkoppelt of verwijdert. **U** bepaalt of, wanneer en op welke rechtsgrondslag identiteitsdocumenten worden gescand en hoe lang gekoppelde scans nodig zijn. Tillor verwerkt de scans als **verwerker** op uw instructie; naleving van privacywetgeving, bewaartermijnen voor gekoppelde scans en tijdig verwijderen wanneer opslag niet meer nodig is, zijn **uw verantwoordelijkheid** als verwerkingsverantwoordelijke.
## Koppelen aan een bestaande klant of contact [#koppelen-aan-een-bestaande-klant-of-contact]
Naast een nieuwe klant kun je een scan ook aan een **bestaande klant** of **contact** koppelen:
* Op het **klantprofiel** verschijnt een **gestippelde kaart** (*Openstaande identiteits-scan koppelen*) zolang er geschikte openstaande scans zijn.
* Op een **contactkaart** kun je een scan koppelen die nog geen contact heeft en minstens een voornaam bevat.
Na bevestiging vult Tillor de klant- of contactgegevens aan waar mogelijk. Als **voornaam** neemt Tillor alleen het **eerste** voornaamdeel over (bijv. `Andy` uit `Andy Adhemar R`); op de scan blijven alle voornamen zichtbaar.
## Technische route (kort) [#technische-route-kort]
* De connector luistert voor identiteitsscans op **poort 8765**. Zie [Connector](/ontwikkelaars/connector) voor Docker-poorten en omgevingsvariabelen.
* Doorsturen naar Tillor vereist **`TILLOR_API_URL`**, **`TILLOR_API_TOKEN`** en **`TILLOR_ORG_ID`**. Zonder die waarden start de WebSocket-server wel, maar wordt er niet doorgestuurd.
* Een zip-pakket mag ongeveer **25 MB** zijn; het doorsturen heeft een **limiet van twee minuten**.
Tillor slaat scanmetadata en bestanden **versleuteld** op. Pagina-afbeeldingen van het document krijgen een watermark **Not valid as ID**; het portret blijft ongemarkeerd voor weergave.
Integrators kunnen bij **klant aanmaken** (`POST /customers`) optioneel **`identityDocumentScanId`** meesturen. Zie de [OpenAPI-specificatie](https://tillor.eu/api/openapi.json).
## Problemen oplossen [#problemen-oplossen]
1. **Geen scan in Tillor** - Controleer IP/poort **8765** op de lezer, connector-API-instellingen en connectorlogs.
2. **Scan niet in het dropdown of dock** - Alleen scans **zonder gekoppelde klant** tellen als openstaand.
3. **Kan geen klant aanmaken** - Controleer of de scan een **voornaam** heeft.
# Kaart (/kaart)
De kaartmodule biedt een interactieve plattegrond van je park. Je kunt terreingrenzen intekenen, afstanden meten en de kaart aanpassen aan jouw werkwijze.
## De kaart openen [#de-kaart-openen]
Ga naar **Park > Plattegrond** om de interactieve kaart te openen. Je ziet direct een overzicht van alle terreinen met hun bezettingsstatus:
Screenshots met een **ℹ**-icoon hebben extra uitleg als je erover beweegt.
* **Groen vlak** - boekbare standplaats is vrij
* **Grijs vlak** - standplaats is **niet boekbaar** en heeft op de gekozen datum geen actief verblijf (geen reservering of bezetting); nachten- en vertrek-labels ontbreken
* **Cyaan vlak** - reservering **geboekt**, nog niet ingecheckt (ook op latere dagen in de verblijfsperiode zolang er niet is ingecheckt)
* **Blauw vlak** - reservering **ingecheckt** (actief verblijf op de gekozen datum)
* **Geel vlak** - de standplaats heeft een actieve bezetting (langdurige huur; geldt op elke gekozen datum zolang de bezetting loopt)
* **Rood vlak** (lichte overlay, rode rand) - dubbele boeking: overlappende reserveringsperiodes op dezelfde standplaats
Klik op een terrein op de kaart om een pop-up te openen met de naam, reserveringen, eventuele actieve bezetting (gast) en snelkoppelingen.
## Datum kiezen [#datum-kiezen]
Rechts naast het tandwiel-pictogram linksonder kies je een **datum** (standaard vandaag). De kaart toont dan hoe de standplaatsen er op die dag uitzien. Na een verversing van de pagina staat de datum weer op **vandaag**; alleen de overige kaartinstellingen (stijl, labels, enz.) blijven bewaard. **Uitgecheckte** en **geannuleerde** reserveringen tellen niet mee voor kleur, vertrek-label of dubbele boeking (ze verschijnen ook niet in de pop-up op de kaart). Bij vrije plekken staat onder de terreinnaam een label met maan-icoon en het aantal nachten tot de volgende check-in. Bij een reservering of bezetting met vertrekdatum staat een label met vertrek-icoon en het aantal nachten tot checkout (0 = vandaag). Beweeg de muis over een label voor de volledige tekst. Bij **dubbele boeking** (twee of meer reserveringen met overlappende verblijfsperiodes op dezelfde standplaats) krijgt het terrein een rode rand en lichte rode overlay; er staat een rood driehoek-icoon vóór het terreinnummer. In de pop-up zie je een waarschuwing met de betrokken reserveringen. Onder zoomniveau **17,5** verbergt de kaart de nachten- en vertrek-labels automatisch; de terreinnaam blijft zichtbaar. Zoom in tot minstens **17,5** (of zet **Nachten en vertrek** uit in de kaartinstellingen) om die labeltjes te zien. Uitgezoomd worden terreinnamen kleiner getoond zodat ze minder overlappen.
## Kaartinstellingen [#kaartinstellingen]
Linksonder op de kaart vind je een tandwiel-pictogram waarmee je de weergave aanpast:
| Instelling | Omschrijving |
| ------------------------------- | ---------------------------------------------------------------------------- |
| **Stijl** | Satelliet, hybride of straten |
| **Wijzigingsmodus** | Schakel in om terreingrenzen te tekenen |
| **Terreinen** | Toon of verberg de gekleurde terreinkleuren |
| **Alleen boekbare terreinen** | Toon alleen terreinen die klanten online kunnen reserveren |
| **Bezette terreinen verbergen** | Verberg terreinen met een actieve bezetting (geel vlak) |
| **Terreinnamen** | Toon of verberg terreinnamen op de kaart |
| **Nachten en vertrek** | Toon of verberg de extra labeltjes (vrije nachten, vertrek) bij terreinnamen |
Je instellingen worden automatisch opgeslagen.
## Terreingrenzen intekenen [#terreingrenzen-intekenen]
Met de wijzigingsmodus kun je de exacte locatie van een standplaats op de kaart vastleggen.
1. Ga naar **Park > Plattegrond**
2. Klik op het tandwiel-pictogram linksonder
3. Schakel **Wijzigingsmodus** in
4. Klik op de gewenste punten op de kaart om een polygoon te tekenen
5. Sluit het polygoon door op het beginpunt te klikken
6. Selecteer in het dialoogvenster het terrein dat je wilt koppelen
7. Klik op **"Bijwerken"**
Het terrein verschijnt nu als gekleurd vlak op de plattegrond.
Terreinen zonder ingetekende locatie staan bovenaan de keuzelijst, zodat je ze makkelijk kunt vinden en koppelen.
## Afstanden meten [#afstanden-meten]
Met de meetfunctie kun je snel afstanden en oppervlaktes op de kaart meten - handig bij het indelen van het terrein of het inschatten van afstanden tussen locaties.
1. Klik linksboven op de kaart op **Afstand meten** of **Oppervlakte meten**
2. Plaats punten op de kaart (sluit een oppervlakte af door op het beginpunt te klikken)
3. De meting wordt op de kaart getoond; gebruik **Metingen wissen** om opnieuw te beginnen
## Terreinen beheren vanuit de kaart [#terreinen-beheren-vanuit-de-kaart]
Via de kaart kun je snel navigeren naar een terrein:
1. Klik op een terrein op de kaart
2. De pop-up toont de naam, bezettingsstatus, actieve reserveringen en bij een bezetting de gast
3. Klik op **"Details bekijken"** om naar de detailpagina te gaan
4. Zolang er geen actieve bezetting is, kun je **"Reservering maken"** starten
# Klantenbeheer (/klantenbeheer)
Het klantenbeheersysteem helpt je bij het beheren van alle klantgegevens op één centrale plek.
## Een nieuwe klant toevoegen [#een-nieuwe-klant-toevoegen]
Screenshots met een **ℹ**-icoon hebben extra uitleg als je erover beweegt.
1. Ga naar **Klanten** > **Overzicht** in het hoofdmenu (groene markering **1** in de screenshot).
2. Klik op **Nieuwe klant aanmaken** rechtsboven (markering **2**).
Zolang er **openstaande identiteitsscans** zijn, toont de knop een **dropdown** met **Manueel** en scans uit de wachtrij.
**Klant aanmaken vanuit een scan**
1. Kies een scan in het dropdown (bijv. **Lotte Peeters**).
2. In de bevestigingsdialoog zie je een documentvoorbeeld (voorzijde, achterzijde, portret) en MRZ-gegevens. Klik op **Klant aanmaken**.
Tillor maakt de klant aan, koppelt de scan en vult gegevens in vanuit het document. Je landt op het nieuwe klantprofiel.
Openstaande scans staan ook in het **activity dock** rechtsonder, met **Klant aanmaken op basis van scan**.
Scans zonder gekoppelde klant verwijdert Tillor **automatisch na 7 dagen**. Verwerk ze tijdig.
Voor **gekoppelde** scans bepaalt **uw organisatie** de bewaartermijn en rechtsgrondslag. Tillor bewaart ze tot u ze ontkoppelt of verwijdert. Naleving van privacywetgeving en passende bewaartermijnen zijn **uw verantwoordelijkheid** als verwerkingsverantwoordelijke.
**Handmatig invoeren:** kies **Manueel** in het dropdown. Het formulier (markering **1** in de screenshot) opent:
3. Vul de basisgegevens in:
* **Voornaam**
* **Achternaam**
* **E-mailadres**
* **Telefoonnummer**
4. Klik op **Klant aanmaken**
Na het aanmaken word je automatisch doorgestuurd naar het klantprofiel, waar je alle overige gegevens (adres, BTW-nummer, notities, etc.) kunt invullen.
## BTW-nummer validatie [#btw-nummer-validatie]
Op het tabblad **Overzicht**, in het blok **Klantgegevens**, kun je een BTW-nummer invullen. Tillor valideert het nummer automatisch via VIES zodra ook **Land** is ingevuld:
1. Vul **Land** en het BTW-nummer in
2. Het systeem controleert het nummer automatisch zodra het lang genoeg is
3. Als het nummer geldig is:
* Je ziet een groen vinkje-icoon bij het veld
* Een pop-up toont de officiële bedrijfsnaam en het adres uit VIES
* Klik op **Bedrijfsadres toepassen** om het adres automatisch in te vullen in het formulier
4. Als het nummer ongeldig is:
* Je ziet een rood icoon bij het veld
* Een pop-up toont een foutmelding
## Klantprofiel bekijken [#klantprofiel-bekijken]
Wanneer je op een klant klikt, zie je het klantprofiel. Bovenaan staan samenvattende klantgegevens. Via de tabbladen kun je naar specifieke informatie navigeren:
* **Overzicht** - Klantgegevens (bewerkbaar formulier), recente communicatie, facturen, meterstanden, opmerkingen, bezettingen en notificaties
* **Facturatie** - Alle facturen van deze klant
* **Toegangscontrole** - Toegangsrechten en nummerplaten
* **Contacten** - Extra contactpersonen
* **NFC Tags** - Gekoppelde NFC-tags
* **Reserveringen** - Alle reserveringen
* **Communicatie** - Berichten en communicatiegeschiedenis
* **Gebeurtenissen** - Tijdlijn met wijzigingen, inclusief voor/na overzicht bij klantupdates
* **Documenten** - Opgeslagen bestanden en bijlagen
* **Taken** - Taken gekoppeld aan deze klant
## Klantgegevens bewerken [#klantgegevens-bewerken]
Op het tabblad **Overzicht**, in het blok **Klantgegevens**, pas je velden aan. Onderaan het formulier staan **Annuleren** en **Opslaan**.
## Gebeurtenissen bekijken [#gebeurtenissen-bekijken]
Op het tabblad **Gebeurtenissen** zie je een tijdlijn van acties voor de klant.
* Bij een wijziging aan klantgegevens wordt een gebeurtenis toegevoegd.
* De gebeurtenis toont welke velden gewijzigd zijn.
* Je ziet ook een **Voor / na**-overzicht per veld zodat je exact kunt controleren wat er aangepast is.
## Klanten zoeken en filteren [#klanten-zoeken-en-filteren]
Ga via **Klanten** > **Overzicht** (markering **1**) naar de lijst. Bovenaan staat een zoekbalk (markering **2**):
* Typ een naam, e-mailadres, telefoonnummer of klantnummer
* Resultaten worden bijgewerkt terwijl je typt (met korte vertraging)
Je kunt ook filteren op **Aangemaakt** (datumbereik), **Status** en **Type**.
## Veelvoorkomende scenario's [#veelvoorkomende-scenarios]
### Scenario: Nieuwe klant boekt voor het eerst [#scenario-nieuwe-klant-boekt-voor-het-eerst]
1. Klant belt of boekt online
2. Je voegt de klant toe in Tillor via **Nieuwe klant aanmaken**
3. Je vult adres en overige gegevens in op het klantprofiel (tabblad **Overzicht** > **Klantgegevens**)
4. Je maakt een bezetting aan op het gewenste terrein (**Overzicht** > **Bezettingen** > **Bezetting aanmaken**)
5. Verbruik van de gekoppelde meters wordt automatisch bijgehouden (zichtbaar onder **Meterstanden** op **Overzicht**)
### Scenario: Klantgegevens wijzigen [#scenario-klantgegevens-wijzigen]
1. Klant belt met nieuwe adresgegevens
2. Je opent het klantprofiel
3. Je past het adres aan in het formulier
4. Je klikt op **Opslaan**
# Notificaties (/notificaties)
Het notificatieoverzicht toont alle berichten die Tillor naar klanten en gebruikers heeft verstuurd via e-mail, sms, post, WhatsApp en push notificaties. Je ziet direct welke berichten zijn aangekomen, welke nog verwerkt worden en welke zijn mislukt.
## Notificaties bekijken [#notificaties-bekijken]
Ga naar **Communicatie > Notificaties** in het hoofdmenu.
Bovenaan de pagina zie je vier statistieken:
* **Totaal aantal notificaties** - alle verzendpogingen via e-mail, sms, post, WhatsApp en push
* **Verzonden notificaties** - berichten die succesvol zijn afgeleverd
* **Mislukte notificaties** - berichten die niet konden worden bezorgd
* **Bounced notificaties** - berichten die zijn teruggekaatst (met name e-mails)
Onder de statistieken staan vier lijsten:
* **Bounced notificaties** - e-mailadressen of nummers die het bericht niet konden ontvangen
* **Lopende notificaties** - berichten die nog verwerkt worden of in de wachtrij staan
* **Recente communicaties** - de meest recente leveringspogingen (alle statussen, standaard 50 per pagina)
* **Mislukte notificaties** - berichten waarbij de verzending is mislukt
## Kolommen in het overzicht [#kolommen-in-het-overzicht]
Elke rij in de lijsten toont:
* **Type** - het type notificatie, zoals "Nieuwe Factuur", "Factuur Aanmaning" of "Meter Alarm"
* **Oorsprong** - de factuur, klant of betaling waaraan het bericht is gekoppeld
* **Kanaal** - het kanaal waarvia het bericht is verstuurd: Email, SMS, Post, WhatsApp of Push
* **Status** - de huidige bezorgstatus van het bericht
* **Ontvanger** - het e-mailadres, telefoonnummer, postadres of de gebruiker die het bericht heeft ontvangen
* **Datum** - het tijdstip waarop de verzendpoging is aangemaakt
## Leveringsdetails bekijken [#leveringsdetails-bekijken]
Klik op het kanaal in een rij om een detailvenster te openen. Hierin zie je:
* De bezorgstatus en eventueel een foutmelding
* **Aan** - de ontvanger van het bericht
* **Van** - het afzenderadres (alleen bij e-mail)
* **Onderwerp** - het e-mailonderwerp (alleen bij e-mail)
* **Aangemaakt op** - wanneer het bericht klaarstond voor verzending
* **Verzonden op** - wanneer het bericht daadwerkelijk is verstuurd
* **Verzonden door** - de gebruiker die de verzending heeft gestart, of "Systeem" als het automatisch is verstuurd
* **Inhoud** - de volledige berichtinhoud (bij post een voorbeeld van de PDF-brief)
* **Bijlagen** - eventuele bijlagen bij e-mailberichten
* **Referentie vervoerder** en **Trackingstatus** / **Laatste trackingupdate** - alleen bij post (Pingen-referentie en laatste gebeurtenis van de vervoerder)
* **Portokosten** - bij elke postzending het portobedrag op het moment van verzending
* **Aangetekend** - alleen bij post die als aangetekend met ontvangstbevestiging is verstuurd (badge, extra portokosten op het moment van verzending en toelichting over doorrekening)
In het voorbeeld hieronder opende we de e-mail voor **Nieuwe Factuur** (`INV/2026/0001`) via **Recente communicaties** (markering **1** = detailvenster).
Voor e-mail en WhatsApp zie je in het detailvenster ook de leesstatus (**Gelezen op**). In de lijst verschijnt een oog-icoon bij gelezen berichten. Linkklikken worden vastgelegd voor e-mail en SMS (**Geklikt op**); klikken tellen alleen mee als het klikmoment na **Verzonden op** ligt en minstens ongeveer anderhalve seconde later is, zodat mailproviders die links vooraf ophalen (bijv. antivirus) geen valse klikken geven.
## Statussen uitgelegd [#statussen-uitgelegd]
| Status | Betekenis |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| **In afwachting** | Het bericht wordt nog verwerkt of staat in de wachtrij |
| **Verzonden** | Het bericht is succesvol afgeleverd |
| **Mislukt** | De bezorging is mislukt |
| **Overgeslagen** | Het bericht is niet (meer) verstuurd, bijvoorbeeld omdat push niet beschikbaar was of omdat een postbrief bij de vervoerder is geannuleerd |
| **Bounced** | Het bericht kon het e-mailadres of nummer niet bereiken |
| **Als spam gemeld** | De ontvanger heeft het bericht als spam gemarkeerd |
## Notificatietypen [#notificatietypen]
In de kolom **Type** en via het filter **Type** boven elke lijst zie je welk bericht is verstuurd. Met het filter **Kanaal** beperk je de lijst tot e-mail, sms, post, WhatsApp of push. Labels komen overeen met het scherm:
| Type | Beschrijving |
| --------------------------------------------------- | ------------------------------------------------------------------------------------ |
| Nieuwe Factuur | Melding dat er een nieuwe factuur klaarstaat |
| Factuur Betaald | Bevestiging dat een factuur is betaald |
| Factuur Aanmaning | Herinnering voor een openstaande factuur |
| Factuur Archief | E-mail met een factuurarchief (zip) |
| Gebruiker Welkom | Welkomstbericht voor een nieuwe gebruiker |
| Systeemincident | Melding over een platformincident |
| Meter Verwijdering | Melding dat een meter is verwijderd |
| Meters die aandacht nodig hebben | Overzicht van meters die actie vereisen |
| Meter Alarm | Melding bij een gedetecteerd meterprobleem |
| Meter Alarm Opgelost | Melding dat een meterprobleem is verholpen |
| NFC Tag Laag Saldo | Waarschuwing dat het saldo van een NFC tag laag is |
| Handmatige Overschrijving Herinnering | Herinnering voor een openstaande bankoverschrijving |
| Reactie op Opmerking | Iemand heeft op een opmerking gereageerd |
| Vermelding in Opmerking | Je bent vermeld in een opmerking |
| Opmerking Opgelost | Een opmerking is als opgelost gemarkeerd |
| Document Verwijderd | Melding dat een document is verwijderd |
| DPA Acceptatie | Bevestiging van DPA-acceptatie |
| Factuur versturen naar boekhoudsoftware mislukt | Fout bij exporteren van een factuur naar boekhoudsoftware (bijv. Admisol of Odoo) |
| Boekhoudsoftware: betalingsoverzicht-export mislukt | Fout bij exporteren van een betalingsoverzicht naar boekhoudsoftware (bijv. Admisol) |
| Peppol Factuur Verzending Mislukt | Fout bij verzenden van een factuur via Peppol |
| Organisatiegegevens | Sms naar een beller met organisatiegegevens |
| Contactformulier Inzending | Inzending via het contactformulier |
| Connector niet bereikbaar | De connector reageert niet meer |
| Taak Herinnering | Herinnering voor een openstaande taak |
Niet alle notificaties worden automatisch verstuurd. Factuurberichten zoals **Nieuwe Factuur** of **Factuur Aanmaning** worden niet automatisch verstuurd bij het boeken van een factuur. Gebruik op de factuurpagina **Verstuur notificatie** of **Verstuur aanmaning**.
## Factuur notificatie of aanmaning versturen [#factuur-notificatie-of-aanmaning-versturen]
Screenshots met een **ℹ**-icoon hebben extra uitleg als je erover beweegt.
1. Open een **geboekte** factuur via **Administratie** > **Facturen**
2. Klik op **Verstuur notificatie** (markering **2** in de screenshot; de groene omlijning rond de actiebalk is markering **1**)
3. Kies in het venster **E-mail**, optioneel **SMS** en optioneel **Post** (markering **1** = dialoog, **2** = E-mail, **3** = SMS, **4** = Post). **Post** staat standaard uit. Daarna **Versturen**
Voor een aanmaning: klik op het pijltje naast **Verstuur notificatie** en kies **Verstuur aanmaning**. Bevestig opnieuw het kanaal. Bij aanmaningen staat **SMS** standaard aan als de klant een telefoonnummer heeft. Kies je **Post**, dan ontvangt de klant een aanmaningsbrief met de factuur als bijlage (QR-code op de brief, zie [Facturen](/facturen)). Tillor toont een indicatief portobedrag per brief.
Vink je bij **Post** ook **Aangetekend met ontvangstbevestiging** aan, dan verstuurt Tillor de aanmaning als aangetekende brief. Het dialoogvenster toont dan ook een indicatief extra bedrag bovenop de gewone portokosten. Die optie is alleen beschikbaar als het postadres van de klant in een land ligt waar aangetekend wordt ondersteund.
Na verzending verschijnt het bericht in **Communicatie** > **Notificaties** met kanaal, status en koppeling naar de factuur. Bij post zie je in het detailvenster het portobedrag op het moment van verzending. Bij aangetekende post zie je ook het label **Aangetekend**, het extra bedrag en een korte toelichting over de doorrekening.
**Post:** zendingen starten op **In afwachting**. Na bevestiging door de vervoerder (verzonden of bezorgd) wordt de status **Verzonden**. Onbestelbare post wordt **Mislukt**. Een geannuleerde brief bij de vervoerder wordt **Overgeslagen** (je vindt die rij vooral onder **Recente communicaties**, niet onder Lopend of Mislukt).
**SMS:** berichten kunnen kort op **In afwachting** blijven terwijl de vervoerder de bezorgstatus doorgeeft. Blijft een sms langer dan **2 dagen** op **In afwachting** staan, dan zet Tillor de status automatisch op **Mislukt**. Open het detailvenster voor de foutmelding en controleer het telefoonnummer van de klant.
**Verstuur notificatie** op een geboekte factuur is alleen zichtbaar als de klant minstens een e-mailadres, telefoonnummer of volledig postadres (straat, postcode en gemeente) heeft. In het dialoogvenster moet je minstens een kanaal kiezen dat voor die klant beschikbaar is.
## Wat te doen bij een mislukte verzending [#wat-te-doen-bij-een-mislukte-verzending]
### E-mailadres klopt niet (Bounced) [#e-mailadres-klopt-niet-bounced]
1. Ga naar **Notificaties** en zoek het bericht op in de lijst "Bounced notificaties"
2. Klik op het kanaal om de foutmelding te lezen
3. Open het klantprofiel via de link in de kolom **Oorsprong**
4. Corrigeer het e-mailadres in het klantprofiel
5. Stuur het bericht opnieuw via **Verstuur notificatie** op de bijbehorende factuurpagina
### Sms of WhatsApp mislukt [#sms-of-whatsapp-mislukt]
1. Ga naar **Notificaties** en open het mislukte bericht via de lijst "Mislukte notificaties"
2. Lees de foutmelding in het detailvenster
3. Controleer of het telefoonnummer van de klant correct is, inclusief landcode
4. Pas het nummer aan in het klantprofiel indien nodig
### Post mislukt of onbestelbaar [#post-mislukt-of-onbestelbaar]
1. Ga naar **Notificaties** en open het bericht via **Lopende notificaties** of **Mislukte notificaties**
2. Controleer het postadres op het klantprofiel (straat, postcode, gemeente)
3. Stuur opnieuw via **Verstuur notificatie** of **Verstuur aanmaning** op de factuur
### Post geannuleerd bij de vervoerder [#post-geannuleerd-bij-de-vervoerder]
1. Zoek de zending onder **Recente communicaties** (status **Overgeslagen**)
2. Open het detailvenster en controleer **Trackingstatus** (bijv. annulering afgerond)
3. Stuur alleen opnieuw als de klant de brief nog moet ontvangen
Meer over aanmaningsbrieven en post-PDF's: [Facturen](/facturen).
# Opmerkingen (/notities)
Met opmerkingen kunnen teamleden samenwerken rondom klanten, facturen, reserveringen en andere records. Alle opmerkingen zijn intern en worden nooit gedeeld met de klant.
## Waar vind je opmerkingen? [#waar-vind-je-opmerkingen]
Op detailpagina's staat een kaart **Opmerkingen**. Afhankelijk van het record:
* **Klanten > Overzicht** of **Klanten > Communicatie** - op het klantprofiel
* **Administratie > Facturen** - op de factuurdetailpagina
* **Klanten > Reserveringen** - op de reserveringsdetailpagina
* **Park > Terreinen** - op de terreindetailpagina
* **Park > Meters** - op de meterdetailpagina
* **Administratie > Betalingsrapporten** - op het betalingsrapport
## Opmerking toevoegen [#opmerking-toevoegen]
1. Open het gewenste record (bijv. een klantprofiel of factuur)
2. Ga naar de kaart **Opmerkingen**
3. Klik op **Reactie toevoegen**
Op een factuurdetail ziet de kaart er zo uit:
4. Typ je opmerking in het tekstvak (**Schrijf een reactie...**)
5. Typ **@** om een collega te vermelden en kies die persoon uit de lijst - die ontvangt dan een melding
6. Optioneel: voeg een bijlage toe via **Bijlage toevoegen**, plakken of slepen van bestanden
7. Klik op **Verzenden**
Je kunt ook **Reageren** op een bestaande opmerking om een discussiedraad te starten.
## Opmerkingen beheren [#opmerkingen-beheren]
Bij elke opmerking staan actieknoppen rechtsboven (voor zover je rechten hebt):
### Opmerking bewerken of verwijderen [#opmerking-bewerken-of-verwijderen]
* **Bewerken** - pas de tekst aan (eigen opmerkingen; opgeloste opmerkingen kunnen niet meer worden bewerkt)
* **Verwijderen** - verwijder de opmerking definitief (met bevestiging)
### Opmerking vastzetten [#opmerking-vastzetten]
Wil je een belangrijke opmerking bovenaan zichtbaar houden?
1. Klik op het pin-pictogram (**Vastzetten**)
2. De opmerking krijgt het label **Vastgezet** en staat bovenaan de lijst
3. Klik opnieuw op het pin-pictogram om los te maken (**Losmaken**)
Opgeloste opmerkingen kunnen niet worden vastgezet.
### Opmerking als opgelost markeren [#opmerking-als-opgelost-markeren]
Bij discussies die zijn afgerond:
1. Klik op het vinkje (**Oplossen**)
2. De opmerking wordt gemarkeerd als **Opgelost** en verdwijnt uit de open lijst
3. Op een detailpagina staan opgeloste opmerkingen onderaan in een inklapbare sectie
4. Klik opnieuw op het vinkje om dit ongedaan te maken (**Ongedaan maken**)
Bij oplossen wordt een vastgezette opmerking automatisch losgemaakt.
## Overzicht van alle opmerkingen [#overzicht-van-alle-opmerkingen]
Ga naar **Communicatie > Opmerkingen** voor een centraal overzicht. Bovenaan zie je statistieken (totaal, open, opgelost en vastgezet). Daaronder:
* **Open opmerkingen** - opmerkingen die nog open staan
* **Opgeloste opmerkingen** - afgesloten opmerkingen voor referentie
Elke opmerking toont de **Oorsprong** (bijv. klant of factuur) zodat je direct naar het record kunt.
### Filteren [#filteren]
* **Laatste week / Laatste maand / Alles** - filter op aanmaakdatum
* **Toon alleen vermeldingen** - bekijk alleen opmerkingen waarbij jij bent vermeld
Opmerkingen zijn intern en worden nooit zichtbaar voor klanten, ook niet op facturen of in e-mails.
# Park (/park)
De parkmodule is het centrale overzicht van je camping of recreatiepark. Hier beheer je terreinen, bekijk je bezetting en reserveringen via de interactieve plattegrond, en koppel je meters aan specifieke standplaatsen.
## Plattegrond [#plattegrond]
Ga naar **Park > Plattegrond** om een volledig kaartoverzicht van je park te zien.
Screenshots met een **ℹ**-icoon hebben extra uitleg als je erover beweegt.
De plattegrond toont alle terreinen als gekleurde vlakken op een kaart (voor de gekozen datum):
* **Groen** - vrij en boekbaar
* **Grijs** - niet boekbaar
* **Cyaan** - gereserveerd, nog niet ingecheckt
* **Blauw** - ingecheckte reservering
* **Geel** - actieve bezetting (langdurig verblijf)
* **Rood** - dubbele boeking op de gekozen datum
Naast het tandwiel staat een datumpicker. Kies een andere dag om bezetting en reserveringen op die datum te bekijken.
Klik op een terrein op de kaart om een pop-up te openen met:
* Naam, oppervlakte en of het terrein boekbaar is
* Vrije nachten of vertrekdatum (afhankelijk van de status)
* Huidige bezetting met gast, contact en e-mail (indien van toepassing)
* Lijst van reserveringen op de gekozen datum
* Waarschuwing bij dubbele boeking
* **Details bekijken** - naar de detailpagina van het terrein
* **Reservering maken** - alleen als er geen actieve bezetting is
### Kaartinstellingen aanpassen [#kaartinstellingen-aanpassen]
Linksonder op de plattegrond vind je knoppen waarmee je de weergave kunt aanpassen:
* **Lagen** (gestapelde vierkanten): toont alle terreinlagen met hun kleur en korte uitleg. Vink lagen aan of uit om te bepalen welke statussen je op de kaart ziet.
* **Tandwiel**: kaartinstellingen
* **Stijl**: Kies tussen satelliet, hybride of straten
* **Wijzigingsmodus**: Schakel in om terreingrenzen op de kaart te tekenen (zie hieronder)
* **Terreinnamen**: Toon of verberg de namen op de kaart (alleen als minstens één laag aanstaat)
* **Nachten en vertrek**: Toon op labels hoeveel nachten vrij zijn en wanneer een verblijf vertrekt (alleen als terreinnamen aanstaan)
Je instellingen worden automatisch opgeslagen voor de volgende keer dat je de plattegrond opent.
### Terreinlocatie tekenen op de kaart [#terreinlocatie-tekenen-op-de-kaart]
Met de wijzigingsmodus kun je de exacte locatie van een terrein intekenen op de plattegrond.
1. Ga naar **Park > Plattegrond**
2. Klik op het tandwiel-pictogram linksonder
3. Schakel **Wijzigingsmodus** in
4. Teken het vlak van de standplaats door punten op de kaart te plaatsen en het polygoon te sluiten
5. Er verschijnt een dialoogvenster - kies het terrein waaraan je deze locatie wilt koppelen
6. Klik op **Bijwerken**
De standplaats verschijnt nu als gekleurd vlak op de plattegrond.
Terreinen zonder locatie staan bovenaan in het keuzemenu, zodat je ze makkelijk kunt vinden.
## Terreinen [#terreinen]
Ga naar **Park > Terreinen** voor een tabeloverzicht van alle standplaatsen.
Bovenaan de pagina zie je vijf statistieken:
* **Totaal terreinen** - alle aangemaakte standplaatsen
* **Recente terreinen** - terreinen die in de afgelopen 7 dagen zijn toegevoegd
* **Boekbare terreinen** - standplaatsen die online geboekt kunnen worden
* **Niet-boekbare terreinen** - standplaatsen die niet beschikbaar zijn voor online boeking
* **Totale oppervlakte** - de opgetelde oppervlakte van alle terreinen in m²
De tabel toont per terrein de naam, oppervlakte, of het boekbaar is, een beschrijving en de aanmaakdatum. Je kunt de tabel sorteren op naam, oppervlakte, boekbaarheid of aanmaakdatum, en filteren op boekbaar/niet-boekbaar.
### Een nieuw terrein aanmaken [#een-nieuw-terrein-aanmaken]
1. Ga naar **Park > Terreinen**
2. Klik op **"Nieuw terrein aanmaken"** (rechtsboven)
3. Vul de gegevens in:
* **Naam** - de naam of het nummer van de standplaats
* **Beschrijving** - een optionele toelichting
* **Prijstype** - kies dynamisch (op basis van oppervlakte) of statisch
* **Statische prijs** - vul een bedrag in euro's in als je voor statische prijzen kiest
* **Boekbaar** - vink aan als klanten deze standplaats online kunnen reserveren
4. Klik op **"Terrein aanmaken"**
De locatie van een terrein op de plattegrond kun je later intekenen via de wijzigingsmodus op **Park > Plattegrond**.
### Terreinen exporteren [#terreinen-exporteren]
Klik op **"Exporteer alle terreinen"** (rechtsboven op de terreinen-pagina) om een Excel-bestand te downloaden met alle standplaatsen en hun gegevens.
## Terrein detailpagina [#terrein-detailpagina]
Klik op de naam van een terrein in de tabel om de detailpagina te openen. Bovenaan staat een overzichtskaart met:
* **Naam en beschrijving**
* **Oppervlakte** - berekend op basis van de ingetekende locatie op de plattegrond
* **Meters** - hoeveel meters aan dit terrein zijn gekoppeld
* **Boekbaar** - ja of nee
* **Klant** - de klant met een actieve bezetting (indien van toepassing)
* **Aangemaakt op** en **Bijgewerkt op**
Daaronder vind je het bewerkingsscherm **Terrein bijwerken**, plus kaarten voor locatie, meters, opmerkingen en gebeurtenissen.
### Terreingegevens bewerken [#terreingegevens-bewerken]
Op de detailpagina kun je alle gegevens van een standplaats aanpassen:
**Basisgegevens**
* Naam en beschrijving
**Gasinformatie**
* Naam van de gastank
* Nummer van de gasmeter
* Contracthouder gasmeter
**Prijsinstellingen**
| Veld | Omschrijving |
| --------------------------- | -------------------------------------------------------------- |
| Prijstype | Dynamisch (op basis van oppervlakte) of statisch (vaste prijs) |
| Statische prijs | Vaste prijs in euro's - alleen actief bij statisch prijstype |
| Toeslag ligging | Extra bedrag voor de ligging van de standplaats |
| Toeslag elektriciteit | Extra bedrag voor een elektriciteitsaansluiting |
| Toelichting toeslag ligging | Optionele uitleg bij de toeslag ligging |
Het veld **Berekend tarief** toont automatisch wat het totale tarief wordt op basis van de ingevulde waarden. Bij dynamische prijzen wordt de oppervlakte meegenomen in de berekening.
* **Boekbaar** - schakel in of uit of klanten deze standplaats online kunnen reserveren
Klik op **"Terrein bijwerken"** om de wijzigingen op te slaan.
### Meters koppelen aan een terrein [#meters-koppelen-aan-een-terrein]
Op de detailpagina zie je een overzicht van alle meters die aan dit terrein zijn gekoppeld. Voor elke meter zie je de naam en de actuele status.
Om een nieuwe meter te koppelen:
1. Klik op **Meter toevoegen** onderaan de meterslijst
2. Selecteer de meter in het dialoog **Meter toekennen**
3. Klik op **Meter toekennen**
Om een meter weer los te koppelen: op **deze** terreindetailpagina open je het **menu (...)** bij de meter in de lijst en kies je **Loskoppelen van terrein**. Die keuze staat niet in het actiemenu als je de meter opent via **Park** > **Meters**.
Meters die al aan een ander terrein zijn gekoppeld, verschijnen niet in de keuzelijst.
### Locatie [#locatie]
Als er een locatie voor het terrein is ingetekend, zie je rechts op de detailpagina een kaart **Locatie** met de contouren van het terrein.
### Opmerkingen [#opmerkingen]
Op de detailpagina staat een sectie **Opmerkingen** voor interne opmerkingen over het terrein (threads, pinnen, oplossen).
### Gebeurtenissen [#gebeurtenissen]
Onder **Gebeurtenissen** zie je een tijdlijn van activiteit rond dit terrein.
## Meters [#meters]
Ga naar **Park > Meters** voor een overzicht van alle meters in het park. Dit is een samenvatting van alle actieve meters, ongeacht aan welk terrein ze zijn gekoppeld. Zie de documentatie over meterbeheer voor meer details.
## Meterkasten [#meterkasten]
Ga naar **Park > Meterkasten** voor een overzicht van alle meterkasten in het park.
# Producten (/producten)
De productenmodule is de centrale plek waar je alles beheert dat op een factuur kan verschijnen: verblijfstarieven, diensten, energiekosten en andere artikelen. Elk product heeft een prijs inclusief BTW, en je kunt extra opties instellen zoals automatisch printen of een periodebinding.
## Productenoverzicht [#productenoverzicht]
Je vindt alle producten via **Administratie** > **Producten**.
De tabel toont per product:
* **Naam** en **Beschrijving**
* **Info** - het klanttype en metertype waaraan het product gekoppeld is (alleen zichtbaar als beide zijn ingesteld)
* **Prijs (incl. BTW)**
* **BTW %**
* **Grootboek** - het grootboeknummer voor de boekhouding (optioneel)
### Zoeken en filteren [#zoeken-en-filteren]
Bovenaan de tabel vind je een zoekbalk en een aantal filteropties:
* Typ in de zoekbalk om producten direct te filteren
* Filter op **BTW**, **Klanttype**, **Metertype**, **Actietype** of **Rekeningen**
* Gebruik de knop **Filters wissen** om alle actieve filters in één keer te wissen
## Een product aanmaken [#een-product-aanmaken]
1. Ga naar **Administratie** > **Producten**
2. Klik op **Nieuw Product** rechtsboven in de werkbalk
3. Vul in het dialoogvenster de basisgegevens in:
* **Naam** (verplicht) - de naam zoals die op facturen verschijnt
* **Beschrijving** - een korte toelichting (optioneel)
* **Prijs (incl. BTW)** - het bedrag per eenheid, inclusief BTW
* **BTW %** - kies het toepasselijke BTW-tarief (0%, 6%, 9%, 12% of 21%)
* **Grootboek** - het grootboeknummer voor je boekhouding (optioneel)
* **Klanttype** - beperk het product tot een specifiek klanttype (optioneel)
* **Metertype** - koppel het product aan een metertype (optioneel)
4. Klik op **Aanmaken**
Tillor opent daarna de **productdetailpagina**. Daar stel je factuurregelacties, automatisch printen en gebeurtenissen in (zie [Een product bewerken](#een-product-bewerken)).
Het product verschijnt in de lijst en is beschikbaar voor gebruik op facturen zodra je het hebt aangemaakt.
De prijs die je invoert is altijd **inclusief BTW**. Het BTW-bedrag wordt berekend op basis van het gekozen BTW-percentage en afzonderlijk getoond op de factuur.
## Een product bewerken [#een-product-bewerken]
1. Ga naar **Administratie** > **Producten**
2. Klik op de productnaam of op het potloodpictogram in de rij
3. Op de productdetailpagina pas je links **Algemeen** en **Extra factuurregels** aan, en rechts **Acties op factuurregel**
4. Klik onderaan de kaart **Extra factuurregels** op **Opslaan** om alle wijzigingen op de pagina op te slaan
Rechts onder **Gebeurtenissen** zie je een tijdlijn van wijzigingen (prijs, BTW, grootboek, klanttype, geconfigureerde acties, enz.) met tijdstip, gebruiker en waar van toepassing een voor/na-overzicht van gewijzigde velden.
## Een product verwijderen [#een-product-verwijderen]
1. Ga naar **Administratie** > **Producten**
2. Klik op het prullenbakpictogram naast het product
3. Bevestig de verwijdering door op **"Verwijderen"** te klikken in het dialoogvenster
Het verwijderen van een product kan niet ongedaan worden gemaakt. Facturen waarop het product al is gebruikt, blijven ongewijzigd.
## Acties op factuurregel [#acties-op-factuurregel]
Op de productdetailpagina kies je onder **Acties op factuurregel** een of meer acties die Tillor uitvoert wanneer een factuur met dit product wordt **betaald**. Zet een vinkje aan om een actie in te schakelen; extra velden verschijnen alleen bij de acties die dat nodig hebben.
In de productlijst toont de kolom **Actie** welke acties op het product staan (meerdere acties worden samengevat).
### Geen extra actie [#geen-extra-actie]
Laat alle vakjes uitgeschakeld voor gewone tarieven en diensten zonder automatische opvolging bij betaling.
### NFC Tag Opladen [#nfc-tag-opladen]
Wanneer een factuur met dit product wordt betaald, wordt er automatisch een NFC-tag opgeladen. Dit is bedoeld voor producten die klanten toegang geven via een NFC-tag.
### Periode [#periode]
Het product vertegenwoordigt een dienst over een bepaalde tijdsperiode. Als je **Periode** aanvinkt, verschijnen er twee extra velden:
* **Per eenheid** - het aantal eenheden per periode (minimaal 1)
* **Periode-eenheid** - kies **Dag**, **Week** of **Maand**
Gebruik dit actietype voor dagprijzen, weekabonnementen of maandelijkse tarieven.
### Bezetting verlengen [#bezetting-verlengen]
Wanneer een factuur met dit product wordt betaald, verlengt Tillor **Betaald tot** van de bezetting op het gekozen **terrein** op basis van de periode op de factuurregel. Met **Afronden op volgende periodegrens** (op de factuur) lijnen klanten op termijn uit op dezelfde cyclus volgens de **Huurfrequentie** van die bezetting.
Bij het toevoegen van zo'n factuurregel kies je op de factuur een **terrein**. Tillor koppelt bij boeken en betalen de actieve bezetting van die klant op dat terrein. Tillor bewaart ook een snapshot van die bezetting in de factuurregel, zodat je achteraf nog kunt zien welke bezetting bedoeld was, ook als die bezetting later verwijderd is. In **offerte-modus** kun je een terrein kiezen waar de klant (nog) geen bezetting op heeft; zo'n regel is dan niet te boeken tot er een bezetting is.
In het productformulier kun je optioneel **Vervaldatum op start bezetting** aanvinken (alleen bij **Bezetting verlengen**). Staat die optie aan, dan zet Tillor bij **het boeken** van de factuur de **vervaldatum** op de **startdatum** van de bezettingsperiode op de Staangeld-regel (de *van*-datum), in plaats van de standaard betaaltermijn van je organisatie of de gekozen termijn in het boekdialoog. Bij **herboeken** blijft de oorspronkelijke vervaldatum behouden.
Heeft het product **extra factuurregels** (bundel onder [Extra factuurregels](#extra-factuurregels)), dan voegt Tillor automatisch **kindregels** toe onder de hoofdregel. De **hoofdregel** blijft **Bezetting verlengen**. NFC-kindregels met verlenging krijgen bij betaling **Toegangsmethode verlengen**; overige kindregels zijn gewone factuurregels zonder boekingsactie.
### Toegangsmethode verlengen [#toegangsmethode-verlengen]
Vink **Toegangsmethode verlengen** aan op producten waar betaling de geldigheid van toegangsmethoden moet verlengen. Dit werkt op twee manieren:
* **Samen met Periode** op dezelfde regel (bijv. maandhuur): bij betaling verlengt Tillor de gekozen methoden tot de **einddatum van de periode** op die regel.
* **Via een Staangeld-bundel** (hoofdregel **Bezetting verlengen** met NFC-**`expand`** en **`extendAccessMethod`**): bij betaling van een NFC-kindregel geldt de **einddatum op de Staangeld-hoofdregel**; de instellingen hieronder komen van het **hoofdproduct** (niet van het toeslag-NFC-product).
Na het aanvinken verschijnen extra velden:
* **Extra dagen na einddatum** - kalenderdagen bovenop de periode- of Staangeld-einddatum (0 = tot en met die einddatum). Bij bundels stel je het aantal dagen in per NFC-stap onder **Extra factuurregels**; types en statussen komen van dit product.
* **Toegangsmethodetypes** - kies **NFC**, **QR** en/of **LPR** (meervoudige selectie met vinkjes).
* **Statussen** - standaard alleen **Actief**; optioneel ook **Zacht geblokkeerd**.
* **Niet verkorten bij verlengen** - staat dit aan, dan worden methoden waarvan **Geldig tot** al op of na de nieuwe datum ligt overgeslagen bij verlengen. Bij terugdraaien via creditnota wordt de berekende datum altijd gezet.
Dit is los van **Toegangsmethoden automatisch verlengen** onder **Periode** (die schakelaar verlengt bij betaling van een puur periode-product zonder aparte actie **Toegangsmethode verlengen**).
### Boeken blokkeren [#boeken-blokkeren]
Gebruik dit actietype op producten die enkel op **conceptfacturen** horen. Staat zo'n regel op een conceptfactuur, dan kun je die factuur **niet definitief maken** (boeken). Definitieve facturen zijn niet bewerkbaar; dit actietype hoort daar dus niet op.
Er is geen extra veld op de factuurregel - Tillor blokkeert enkel het boeken zolang de regel aanwezig is.
## Extra factuurregels [#extra-factuurregels]
Sommige producten zijn meer dan één regel op een factuur: Staangeld met toeslagen, toelichtingstekst, meterhuur of NFC-tags. Daarvoor configureer je op het **hoofdproduct** een **bundel** van extra regels. Kiest iemand dat product als **hoofdregel** op een conceptfactuur, dan voegt Tillor automatisch **kindregels** toe onder die hoofdregel, in de volgorde die je hier instelt.
De bundel staat op de productdetailpagina in de kaart **Extra factuurregels**, direct onder **Algemeen**. Rechts blijven **Acties op factuurregel** (betalingsacties) en **Gebeurtenissen** staan.
### Bundel aanmaken of bewerken [#bundel-aanmaken-of-bewerken]
1. Ga naar **Administratie** > **Producten** en open het hoofdproduct (bijv. Staangeld)
2. Scroll naar de kaart **Extra factuurregels** onder **Algemeen**
3. Nog geen bundel? Klik **Bundel configureren**
4. Voeg stappen toe met **Productstap** of **Inforestap**
5. Pas velden per stap aan (zie hieronder)
6. Gebruik de pijltjes omhoog/omlaag om de volgorde te wijzigen; het prullenbakpictogram verwijdert één stap
7. Klik **Opslaan** onderaan die kaart
**Opslaan** op **Extra factuurregels** slaat de hele productpagina op: ook wijzigingen in **Algemeen** en **Acties op factuurregel**. Elke productstap moet een **product** hebben gekozen en elke inforestap een ingevulde **tekst**, anders wordt de bundel bij opslaan niet bewaard.
Je kunt de bundel weer uitzetten met **Hele bundel verwijderen**. Er passen maximaal **40** stappen in één bundel.
### Productstap [#productstap]
Een **productstap** is één configuratieregel die Tillor omzet naar één of meer factuurregels (afhankelijk van het hoeveelheidstype).
| Veld in de app | Wat het doet |
| --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Product** | Welk catalogusproduct op de kindregel komt (bijv. NFC-toeslag, meterhuur). Verplicht vóór opslaan. |
| **Hoeveelheidstype** | **Vast** = één regel met een vast aantal. **Dynamisch (één regel)** = één regel; het aantal wordt bij opslaan van de factuur bepaald. **Dynamisch (één regel per item)** = nul of meer regels, één per meter, NFC-tag, hond, enz. |
| **Vaste hoeveelheid** | Alleen bij **Vast**: het aantal op de kindregel (bijv. `1`). |
| **Dynamische sleutel** | Alleen bij dynamische types: welke logica Tillor gebruikt (zie [Dynamische sleutels](#dynamische-sleutels)). |
| **Vermenigvuldig met hoeveelheid hoofdregel** | Vermenigvuldigt de berekende hoeveelheid met de hoeveelheid van de hoofdregel (bijv. `0,5` bij een half jaar Staangeld). |
| **Omschrijving (optioneel)** | Vervangt de productnaam op de factuurregel. Ondersteunt placeholders (zie hieronder). |
| **Regelstijl** | **Standaard (product)** of **INFO** (grijze toelichting op PDF en in de editor). |
| **Eén keer per factuur** | Bij **twee of meer** bundel-hoofdregels op dezelfde factuur: deze stap hoort alleen bij de **eerste** hoofdregel in factuurvolgorde. Met één hoofdregel heeft dit geen effect. |
| **Extra dagen na Staangeld-einddatum (NFC)** | Alleen bij NFC-**expand**-stappen. Kalenderdagen bovenop de einddatum van **Bezetting verlengen** op de hoofdregel. Types en statussen komen van **Toegangsmethode verlengen** op dit product (niet van het toeslag-NFC-product). |
| **Omschrijving inbegrepen NFC (legacy)** | Alleen bij de samengevoegde legacy-sleutel **NFC (legacy: inbegrepen + extra's)**. Tekst voor de eerste (gratis) NFC-regel. |
| **ICY elektriciteitsmeters** | Alleen bij ICY-sleutels. Optioneel **Alleen meters met supply aan** en **Supply-uit ook factureren vanaf** (datum/tijd). |
### Inforestap [#inforestap]
Een **inforestap** is pure tekst zonder product en zonder bedrag. Tillor toont die als toelichtingsregel (standaard stijl **INFO**).
| Veld in de app | Wat het doet |
| ------------------------- | -------------------------------------------------------------------------------------------------------- |
| **Tekst op de inforegel** | De zichtbare tekst (bijv. "Inclusief toeristen-, gemeente- en provincietaksen"). Verplicht vóór opslaan. |
| **Regelstijl** | Meestal **INFO**; je kunt **DEFAULT** kiezen als je dat bewust wilt. |
### Dynamische sleutels [#dynamische-sleutels]
De namen in de app komen overeen met de technische sleutels in `metadata.invoiceBundle`.
**Dynamisch (één regel)** (`resolver`):
| Keuze in de app | Betekenis |
| ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Aantal ICY elektriciteitsmeters** | Eén regel; hoeveelheid = aantal ICY-elektriciteitsmeters in scope (zie [ICY-meterhuur](#icy-meterhuur-en-supply-aanuit)). Placeholder `{meterCount}`. |
| **Aantal honden** | Eén regel; hoeveelheid = `extraFields.animals.dogs` op de klant. Placeholder `{dogCount}`. |
**Dynamisch (één regel per item)** (`expand`):
| Keuze in de app | Betekenis |
| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| **Regel per ICY elektriciteitsmeter** | Eén regel per meter. Placeholders `{meterName}`, `{meterCount}`. |
| **Eerste NFC (inbegrepen)** | Eén regel voor de eerste actieve NFC: hoeveelheid 0, tarief 0. Geen NFC = geen regel. Optioneel NFC-verlenging en **Eén keer per factuur**. |
| **Extra NFC-tags** | Eén regel per tweede, derde, … actieve NFC (normaal tarief). |
| **NFC (legacy: inbegrepen + extra's)** | Eén stap die inbegrepen + extra's combineert. Liever twee aparte stappen (**Eerste NFC** + **Extra NFC-tags**). |
| **Regel per hond** | Eén regel per hond; eerste hond tarief 0. Placeholders `{dogNumber}`, `{dogCount}`. |
### Placeholders in omschrijvingen [#placeholders-in-omschrijvingen]
In **Omschrijving (optioneel)** (en bij legacy **Omschrijving inbegrepen NFC**) kun je deze placeholders tussen accolades zetten:
| Placeholder | Vult Tillor in met |
| ------------------------------------ | ----------------------------------------------- |
| `{meterName}` | Naam van de meter (ICY-regels per meter) |
| `{meterCount}` | Totaal aantal ICY-elektriciteitsmeters in scope |
| `{accessMethod}` / `{accessMethods}` | Label of UID van de NFC-toegangsmethode |
| `{dogNumber}` | Volgnummer van de hondregel (`1` … `n`) |
| `{dogCount}` | Totaal aantal honden op de klant |
### NFC-verlenging via de bundel [#nfc-verlenging-via-de-bundel]
Voor Staangeld met NFC-tags horen meestal drie dingen samen:
1. Op het **hoofdproduct**: actie **Bezetting verlengen** (en een gekozen terrein op de factuurregel)
2. In de bundel: **expand**-stappen **Eerste NFC (inbegrepen)** en/of **Extra NFC-tags**, eventueel met **Extra dagen na Staangeld-einddatum (NFC)**
3. Op het **hoofdproduct**: actie **Toegangsmethode verlengen** met gewenste types (NFC, QR, LPR), statussen en **Niet verkorten bij verlengen**
Bij **betaling** van een NFC-kindregel zet Tillor **Geldig tot** op de **einddatum van de Staangeld-hoofdregel** plus de ingestelde extra dagen (tot het einde van die lokale dag). Zonder geldige einddatum op de hoofdregel gebeurt er geen automatische verlenging. Het aantal extra dagen komt uit de bundelstap; welke methoden meegenomen worden, uit **Toegangsmethode verlengen** op het hoofdproduct.
**Extra dagen na Staangeld-einddatum (NFC)** verschijnt alleen als de dynamische sleutel een NFC-**expand** is. Staat **Werkt alleen als dit product Bezetting verlengen als actie heeft…** onder het veld, vink dan rechts **Bezetting verlengen** aan op dit product.
### Voorbeeld: typische Staangeld-bundel [#voorbeeld-typische-staangeld-bundel]
1. **Inforestap** - "Inclusief toeristen-, gemeente- en provincietaksen"
2. **Productstap** - product NFC-toeslag, **Dynamisch (één regel per item)** > **Eerste NFC (inbegrepen)**, **Vermenigvuldig met hoeveelheid hoofdregel** aan, **Regelstijl** INFO, **Eén keer per factuur** aan, **Extra dagen** bijv. `20`
3. **Productstap** - zelfde toeslagproduct, **Extra NFC-tags**, dezelfde schaal- en verlengingsopties, **Eén keer per factuur** aan
4. **Productstap** - product meterhuur, **Regel per ICY elektriciteitsmeter**, omschrijving met `{meterName}` en `{meterCount}`, eventueel **ICY elektriciteitsmeters** met supply-regels
Op de conceptfactuur verschijnen kindregels pas onder de hoofdregel zodra je bij **Bezetting verlengen** een **terrein** hebt gekozen (en voor NFC-verlenging bij betaling een **einddatum** op die hoofdregel).
### Gedrag op conceptfacturen [#gedrag-op-conceptfacturen]
Wanneer een conceptfactuur wordt opgeslagen, bouwt Tillor bundel-kindregels onder een hoofdregel met een bundel **opnieuw op** als op die hoofdregel het **product**, de **hoeveelheid** of (bij **Bezetting verlengen**) het **terrein** is gewijzigd. Anders blijven handmatig aangepaste kindregels grotendeels staan. In de factuureditor gebruikt Tillor een preview zodat je hetzelfde ziet als na opslaan, inclusief **Eén keer per factuur** waar dat van toepassing is.
Kindregels horen bij de hoofdregel (`parentItemListIndex`). Je verplaatst een hoofdregel met pijltjes alleen als **heel blok**; kindregels schuif je alleen **binnen die bundel**. Verwijder je de hoofdregel, dan verdwijnen de kindregels mee. Op de PDF krijgen gewone kindregels vaak **↳** voor de omschrijving; inforestappen zijn grijze regels zonder bedragen.
Ontbrekende of ongeldige productstappen (geen product gekozen) worden overgeslagen bij het genereren. Onbekende dynamische sleutels leveren geen extra regels op.
### Voor integrators: JSON (`version` 1) [#voor-integrators-json-version-1]
De UI schrijft hetzelfde schema weg als handmatige **`metadata.invoiceBundle`**-JSON. Integrators en imports gebruiken dezelfde structuur; zie [OpenAPI](https://tillor.eu/api/openapi.json) voor preview-endpoints.
#### Vorm [#vorm]
* **`invoiceBundle.version`** - vast `1`
* **`invoiceBundle.steps`** - lijst van stappen. Elke stap is óf een **productstap** óf een **inforestap**:
* **Productstap** - **`productId`** (bestaand product in je organisatie), **`quantity`**, optioneel **`quantityScale`**, optioneel **`style`** (`DEFAULT` of `INFO`, zie hieronder) en optioneel **`description`** (inclusief onderstaande placeholders). Alleen nog bij de **samengevoegde** legacy-**`expand`** **`CUSTOMER_NFC_ACCESS_SURCHARGE_LINES`**: optioneel **`descriptionIncluded`** voor alleen de **eerste** NFC-regel; bij **`CUSTOMER_NFC_ACCESS_INCLUDED_LINE`** gebruik je **`description`**. NFC-**`extendAccessMethod`** (zie hieronder): alleen bij een **`CUSTOMER_NFC_ACCESS_*`**-**`expand`** onder een hoofdproduct **Bezetting verlengen**: bij **betaling** van zo'n NFC-kindregel verlengt Tillor **`periodTo`** van die NFC-toegangsmethode tot de **einddatum die op de hoofdregel Staangeld staat** (`actionDetails.endDate` van **Bezetting verlengen** op die bundel), **plus** **`daysAfterPeriodEnd`** kalenderdagen (tot het einde van die lokale dag). Die einddatum moet dus op de Staangeld-hoofdregel gekozen zijn vóór betaling. Optioneel **`billOncePerInvoice`: `true`** - zie hieronder.
* **Inforestap** - **`{ "stepKind": "info", "description": "" }`** - geen **`productId`** en geen bedrag; standaard slaat Tillor de regel op als **inforegel**. Optioneel **`style`** (standaard **`INFO`** als je het weglaat). Staat de stap onder een bundelhoofdregel, dan zet de PDF **`↳`** automatisch vooraan als **`description`** nog niet met **`↳`** begint (je mag **`↳`** ook gewoon in de JSON zetten). De **volgorde van het kindblok** volgt de volgorde van **`steps`** in je JSON.
* **`style`** (optioneel, **productstappen** en **inforestappen**) - **`DEFAULT`** of **`INFO`**. Gebruik bijvoorbeeld **`"style": "INFO"`** op een **productstap** als je die kindregel als grijze toelichting op de PDF wilt (zelfde idee als een **inforestap**). Tillor zet **geen** stijl automatisch op basis van een **`expand`**-key - je configureert dit zelf in de JSON.
* Voor een **productstap** is **`quantity`** altijd één van:
* **`{ "kind": "fixed", "value": }`** - één kindregel met die hoeveelheid en het producttarief
* **`{ "kind": "resolver", "key": "" }`** - één kindregel; de hoeveelheid wordt server-side bepaald bij het opslaan van de factuur (zie keys hieronder)
* **`{ "kind": "expand", "key": "" }`** - nul of meer kindregels afhankelijk van de klant (zie keys hieronder)
* **`quantityScale`** (optioneel, alleen **productstappen**) - **`"anchor_line_quantity"`**: Tillor vermenigvuldigt de berekende hoeveelheid van die stap met de **hoeveelheid van de hoofdregel** (hetzelfde jaardeel als bij Staangeld met **Bezetting verlengen**, bv. **0,5** bij een half jaar). Afgerond op twee decimalen; regels met hoeveelheid **0** na vermenigvuldiging worden gewoonlijk **weggelaten** (**uitzondering**: de **inbegrepen** NFC-regel met **`CUSTOMER_NFC_ACCESS_INCLUDED_LINE`** (hoeveelheid **0**), of bij legacy **`CUSTOMER_NFC_ACCESS_SURCHARGE_LINES`** de **eerste** regel daarvan: die blijft bewust staan voor de zichtbare omschrijving). Voor de editor-preview hoort daarbij **`anchorLineQuantity`** op **`POST .../invoices/preview-bundle-lines`** (OpenAPI). Heeft het hoofdproduct het actietype **Bezetting verlengen** en bevat de bundel ICY-meterstappen, geef dan ook **`terrainId`** mee (het gekozen terrein op die hoofdregel) zodat preview hetzelfde terrein gebruikt als bij opslaan. Bevat de bundel een stap **`extendAccessMethod`**, geef bij **`preview-bundle-lines`** ook **`invoiceBillingAnchorEndDateIso`** mee (de gekozen **einddatum** op die hoofdregel bij **Bezetting verlengen**) zodat preview hetzelfde perioderesultaat gebruikt als bij opslaan voor die NFC-actie.
* **`billOncePerInvoice`** (optioneel, alleen **productstappen**, boolean **`true`**) - alleen actief bij opslaan via **factuur vervangen** (`replaceInvoice`) én bij **factuureditor-preview** als **`preview-bundle-lines`** wordt aangeroepen met **`invoiceItemsForBillOnceContext`** en **`anchorItemListIndex`**. Bij **twee of meer** hoofdregels waarvan **`invoiceBundle`** minstens één stap heeft met **`billOncePerInvoice`** **`true`**, wordt elke **`billOnce`**-stap maximaal **één keer** op die factuur toegepast: Tillor gebruikt het **hoofdproduct-id** én **de volgorde in `steps`** (dus twee NFC-stappen met hetzelfde toeslag-product kunnen elk **`billOnce`** hebben). De **eerste** hoofdregel in **`items`**-volgorde wint voor die stap. Met **precies één** bundelhoofdregel heeft deze instelling geen effect. **Integrators** zonder preview-context zien mogelijk meer regels per hoofdregel dan na opslaan.
* **`icyElectricityMeterBilling`** (optioneel, alleen **productstappen** waar **`quantity`** **`ICY_ELECTRICITY_METER_COUNT`** of **`ICY_ELECTRICITY_METER_LINES`** gebruikt) - zie [ICY-meterhuur en supply aan/uit](#icy-meterhuur-en-supply-aanuit).
* **Tip bij twee NFC-expand stappen met hetzelfde `productId`** - zet desgewenst **`billOncePerInvoice`: `true`** op **beide** stappen (**inbegrepen** én **extra**); elk telt als aparte stap door de positie in **`steps`**.
* **`description`** (alleen **productstappen**, optioneel) - tekst voor de factuurregel in plaats van de productnaam. Placeholders waar ze van toepassing zijn:
* **`{meterName}`** - naam van de meter op die regel (`expand` ICY-meterregels)
* **`{meterCount}`** - totaal aantal ICY-elektriciteitsmeters dat voor deze klant meetelt (`resolver` `ICY_ELECTRICITY_METER_COUNT`, en hetzelfde totaal op elke ICY-meterregel bij `ICY_ELECTRICITY_METER_LINES`)
* **`{accessMethod}`** en **`{accessMethods}`** - voor NFC-regels vult Tillor dit met het **bekende weergavelabel** uit de interne kaartlijst (bv. **V040005**) als die voor de opgeslagen chip-UID bekend is; anders met de **ruwe UID** (hex). Je zet zelf dubbele punten of spaties in **`description`** / **`descriptionIncluded`** als je dat zo op de factuur wilt (bv. **`Toeslag extra toegangsmethode: {accessMethod}`**).
* **`{dogNumber}`** - volgnummer van de hondregel (`1` … `n`) bij `CUSTOMER_DOG_SURCHARGE_LINES`
* **`{dogCount}`** - totaal aantal honden uit **`extraFields.animals.dogs`** (`resolver` `CUSTOMER_DOG_COUNT`, en hetzelfde totaal op elke hondregel bij `CUSTOMER_DOG_SURCHARGE_LINES`)
### Inforestap (voorbeeld) [#inforestap-voorbeeld]
```json
{
"stepKind": "info",
"description": "Inclusief toeristen-, gemeente- en provincietaksen"
}
```
### Server-side resolvers (bij opslaan) [#server-side-resolvers-bij-opslaan]
Wanneer een conceptfactuur wordt opgeslagen via **factuur vervangen** (`replaceInvoice`), bouwt Tillor bundel-kindregels onder een hoofdregel met `invoiceBundle` **alleen opnieuw** als op die hoofdregel het **product**, de **hoeveelheid** of (bij actietype **Bezetting verlengen**) het gekozen **terrein** is gewijzigd ten opzichte van de laatst opgeslagen staat. Optioneel **`billOncePerInvoice`** op een productstap wordt tijdens die rebuild alleen toegepast als er **minstens twee** bundel-hoofdregels met zo'n stap op de factuur staan (zie **`billOncePerInvoice`** hierboven). Anders blijven de door jou ingevoerde of verwijderde kindregels staan (bijv. een meterregel weglaten blijft weg), **behalve** dat Tillor onder **latere** hoofdregels (waar de bundel dus niet opnieuw wordt opgebouwd) kindregels voor een **`billOncePerInvoice`**-product **weghaalt** als dat product al onder een **eerdere** hoofdregel op dezelfde factuur staat - zo voorkom je dubbel tellen na autosave of preview. **Voordat je opslaat** gebruikt de factuureditor **`preview-bundle-lines`** wanneer je die hoofdregel aanpast op hoeveelheid of terrein (of bij het kiezen van een ander bundel-product), met draftcontext zodat **`billOncePerInvoice`** overeenkomt met opslaan. **Uitzondering:** heeft het hoofdproduct het actietype **Bezetting verlengen**, dan verschijnen bundel-kindregels pas nadat je een **terrein** hebt gekozen (idem bij opslaan zonder regeneratie zolang product/hoeveelheid/terrein ongewijzigd zijn).
Ondersteunde **`resolver`**-keys (één regel, hoeveelheid = afgeleide waarde):
| Key | Betekenis |
| ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ICY_ELECTRICITY_METER_COUNT` | Aantal **ICY**-meters met type **elektriciteit** na toepassing van optioneel **`icyElectricityMeterBilling`** op deze stap (zie [ICY-meterhuur en supply aan/uit](#icy-meterhuur-en-supply-aanuit)). Zelfde terrein-scope als voorheen: hoofdproduct **Bezetting verlengen** = meters op het **gekozen terrein** op die hoofdregel; anders alle terreinen met bezetting. Placeholder **`{meterCount}`** |
| `CUSTOMER_DOG_COUNT` | **Alleen honden**: het veld **`extraFields.animals.dogs`** op de klant (`animals.others` wordt genegeerd). Leeg of ontbreekt → hoeveelheid **0** (geen regel). Dit levert **één** bundelregel met als **hoeveelheid** dat aantal (handig voor één factuurregel voor alle honden). Placeholder **`{dogCount}`** |
Ondersteunde **`expand`**-keys (per match gewoonlijk hoeveelheid **1**, behalve waar anders beschreven):
| Key | Betekenis |
| ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ICY_ELECTRICITY_METER_LINES` | Eén regel per ICY-elektriciteitsmeter na toepassing van optioneel **`icyElectricityMeterBilling`** op deze stap (zie [ICY-meterhuur en supply aan/uit](#icy-meterhuur-en-supply-aanuit)). Zelfde terrein-scope als **`ICY_ELECTRICITY_METER_COUNT`**; placeholders **`{meterName}`**, **`{meterCount}`** |
| `CUSTOMER_NFC_ACCESS_INCLUDED_LINE` | **Eén regel**, alleen voor de **eerste** actieve NFC-toegang van de klant (gesorteerd op aanmaak). Hoeveelheid **0**, tarief per eenheid **0** (eerste methode **inbegrepen**). Geen NFC → geen kindregels. **`description`** bevat placeholders **`{accessMethod}`**. Zet optioneel **`"style": "INFO"`** op de stap als je deze regel als grijze toelichting op de PDF wilt (Tillor kiest dat niet automatisch). Met **meerdere** bundel-hoofdregels (zelfde product) gebruik **`"billOncePerInvoice": true`** als deze toelichting maar **één keer** op de factuur mag. Optioneel **`extendAccessMethod`** - zie het blok hieronder. |
| `CUSTOMER_NFC_ACCESS_EXTRA_SURCHARGE_LINES` | **Eén regel per tweede**, derde enz. **actieve NFC** voor de klant (hoeveelheid **1**, normaal tarief van het gekozen toeslag-product). Als de klant precies één NFC heeft → **geen extra's**. Optioneel **`extendAccessMethod`** - zie het blok hieronder. |
| `CUSTOMER_NFC_ACCESS_SURCHARGE_LINES` | **Legacy**, één stap = **inbegrepen** + **extras** zoals twee losse **`expand`** staptypes hierboven. **Eerste** regel: hoeveelheid **0**. Optioneel **`descriptionIncluded`** voor die eerste regel; volgende gebruiken **`description`**. Bij voorkeur gebruik **`CUSTOMER_NFC_ACCESS_INCLUDED_LINE`** + **`CUSTOMER_NFC_ACCESS_EXTRA_SURCHARGE_LINES`**. Optioneel **`extendAccessMethod`** - zie het blok hieronder. |
| `CUSTOMER_DOG_SURCHARGE_LINES` | Zelfde **honden**-bron als `CUSTOMER_DOG_COUNT`; hier krijg je **één regel per hond** (steeds hoeveelheid 1). **Eerste** regel tarief **0** (eerste hond inbegrepen); volgende regels het producttarief. Placeholders **`{dogNumber}`**, **`{dogCount}`** |
### NFC-toeslag: **`periodTo`** na betaling (**`extendAccessMethod`**) [#nfc-toeslag-periodto-na-betaling-extendaccessmethod]
Alleen zinvol als het hoofdproduct **Bezetting verlengen** is en je een **`expand`** gebruikt **`CUSTOMER_NFC_ACCESS_INCLUDED_LINE`**, **`CUSTOMER_NFC_ACCESS_EXTRA_SURCHARGE_LINES`** óf **`CUSTOMER_NFC_ACCESS_SURCHARGE_LINES`**. Voeg optioneel toe:
```json
"extendAccessMethod": { "daysAfterPeriodEnd": 20 }
```
**`daysAfterPeriodEnd`** is een niet-negatief geheel getal (maximum volgens het Tillor bundels-schema). Na **betaling** van zo'n NFC-kindregel zet Tillor **`periodTo`** op de **einddatum van de gekoppelde Staangeld-hoofdregel** (**Bezetting verlengen**, veld **`endDate`** op die hoofdregel), **plus** **`daysAfterPeriodEnd`** kalenderdagen (aan het einde van die lokale dag). Welke **types** en **statussen** meegenomen worden, stel je in op het **hoofdproduct** onder **Toegangsmethode verlengen** (standaard bij bundels: alleen actieve NFC, tenzij je breder configureert). Zonder geldige **`endDate`** op die hoofdregel gebeurt er bij betaling geen automatische verlenging voor die NFC-regel. Met **Niet verkorten bij verlengen** aan (productinstelling) worden methoden overgeslagen waar **`periodTo`** al op of na de nieuwe datum ligt. Op de **gebeurtenissen**-tijdlijn verschijnt na een geslaagde verlenging een regel die verwijst naar deze betaling.
Zonder gekozen terrein op **Bezetting verlengen** worden er geen kindregels met deze automatische actie gegenereerd. **`terrainId`** op **`preview-bundle-lines`** blijft nodig waar meter-stappen het terrein nodig hebben. Optioneel **`invoiceBillingAnchorEndDateIso`** helpt de editor bij een consistente preview-context voor de hoofdregel; bij **betaling** gebruikt Tillor voor de verlenging uitsluitend de **`endDate`** op de Staangeld-hoofdregel in de parent-keten (die waarde wordt niet meer op de NFC-kindregel opgeslagen).
### Honden: één regel vs. regel per hond [#honden-één-regel-vs-regel-per-hond]
Één regel (hoeveelheid = aantal honden)
Regel per hond
```json
{
"productId": "prd_hond",
"quantity": { "kind": "resolver", "key": "CUSTOMER_DOG_COUNT" },
"description": "Honden ({dogCount})"
}
```
```json
{
"productId": "prd_hond",
"quantity": { "kind": "expand", "key": "CUSTOMER_DOG_SURCHARGE_LINES" },
"description": "Hond ({dogNumber} van {dogCount})"
}
```
Onbekende **`resolver`**- en **`expand`**-keys op een **productstap** worden genegeerd (geen extra regels). Ontbrekende **`productId`** op een **productstap** wordt overgeslagen. Een **inforestap** heeft geen **`productId`**.
### ICY-meterhuur en supply aan/uit [#icy-meterhuur-en-supply-aanuit]
Alleen voor stappen met **`resolver`** **`ICY_ELECTRICITY_METER_COUNT`** of **`expand`** **`ICY_ELECTRICITY_METER_LINES`** kun je optioneel **`icyElectricityMeterBilling`** op dezelfde **productstap** zetten.
* **`icyElectricityMeterBilling` weglaten** - **Bestaand gedrag**: elke ICY-elektriciteitsmeter in scope telt mee (supply **aan** of **uit**), onafhankelijk van de klant.
* **`restrictBillingToSupplyOnMeters`: `false`** - hetzelfde als weglaten (alle meters in scope tellen mee).
* **`restrictBillingToSupplyOnMeters`: `true`** - standaard tellen alleen meters met supply **aan** (`icyMetadata.switchState === true`). Optioneel **`billSupplyOffMetersForCustomersCreatedOnOrAfter`** - ISO-8601 **datum/tijd** (bijv. `"2026-01-01T00:00:00.000Z"`): klanten wiens **`createdAt` ≥** dit tijdstip worden **ook** gefactureerd voor meters met supply **uit**. Laat dat veld weg als **niemand** voor supply-uit moet betalen.
**Voorbeeld (supply-aan voor bestaande klanten, supply-uit ook voor klanten vanaf 2026):**
```json
"icyElectricityMeterBilling": {
"restrictBillingToSupplyOnMeters": true,
"billSupplyOffMetersForCustomersCreatedOnOrAfter": "2026-01-01T00:00:00.000Z"
}
```
Childregels worden gekoppeld aan de hoofdregel (`parentItemListIndex`). Op een **conceptfactuur** verplaats je een hoofdregel met de pijltjes alleen als **heel blok** ten opzichte van andere hoofdregels; je kunt hem niet tussen de kindregels van een andere bundel zetten. Kindregels herschik je alleen **binnen die bundel** (niet boven de hoofdregel). Verwijder je de hoofdregel, dan verdwijnen de gekoppelde kindregels mee.
### Voorbeeld JSON (toelichting + NFC-toeslag + meterhuur) [#voorbeeld-json-toelichting--nfc-toeslag--meterhuur]
```json
{
"invoiceBundle": {
"version": 1,
"steps": [
{
"stepKind": "info",
"description": "Inclusief toeristen-, gemeente- en provincietaksen"
},
{
"productId": "prd_nfc_toeslag",
"quantity": { "kind": "expand", "key": "CUSTOMER_NFC_ACCESS_INCLUDED_LINE" },
"quantityScale": "anchor_line_quantity",
"extendAccessMethod": { "daysAfterPeriodEnd": 20 },
"description": "Toegangsmethode inclusief: {accessMethod}",
"style": "INFO",
"billOncePerInvoice": true
},
{
"productId": "prd_nfc_toeslag",
"quantity": { "kind": "expand", "key": "CUSTOMER_NFC_ACCESS_EXTRA_SURCHARGE_LINES" },
"quantityScale": "anchor_line_quantity",
"extendAccessMethod": { "daysAfterPeriodEnd": 20 },
"description": "Toeslag extra toegangsmethode: {accessMethod}",
"billOncePerInvoice": true
},
{
"productId": "prd_meterhuur",
"quantity": { "kind": "expand", "key": "ICY_ELECTRICITY_METER_LINES" },
"description": "Huur digitale elektriciteitsmeter {meterName} ({meterCount} totaal)",
"icyElectricityMeterBilling": {
"restrictBillingToSupplyOnMeters": true,
"billSupplyOffMetersForCustomersCreatedOnOrAfter": "2026-01-01T00:00:00.000Z"
}
}
]
}
}
```
Controleer dat alle **`productId`**-waarden op **product**-stappen bestaan in jouw catalogus. Ontbrekende producten worden overgeslagen bij het genereren van bundelregels.
## Klanttype en metertype [#klanttype-en-metertype]
Je kunt een product optioneel koppelen aan een **Klanttype** en een **Metertype**. Dit maakt het makkelijker om producten te filteren en automatisch toe te wijzen.
De beschikbare klanttypes zijn:
* **Standaard** - reguliere klanten
* **Arbeider Huurcaravan** - arbeidersklanten met een huurcaravan
* **Arbeider Trekcaravan** - arbeidersklanten met een trekcaravan
De beschikbare metertypes zijn:
* **Elektriciteit**
* **Water**
* **Gas**
De Info-kolom in de tabel toont het klanttype en metertype alleen als **beide** zijn ingesteld. Wil je geen koppeling instellen, laat dan beide velden op **Geen** staan.
## Automatisch printen [#automatisch-printen]
Onder **Acties op factuurregel** kun je **Thermisch printen** en **A4 printen** apart inschakelen. Zodra je minstens één printactie aanvinkt, verschijnt het blok **Automatisch printen** met het aantal kopieën per printer.
* **Thermische printkopieën** - exemplaren op de thermische (kassa)printer bij betaling. Stel in op **0** om die printer uit te laten.
* **A4-printkopieën** - exemplaren op de A4-printer bij betaling. Stel in op **0** om A4 uit te laten.
Het maximum is **10** kopieën per printer per product.
## Grootboeknummer [#grootboeknummer]
Elk product kan een grootboeknummer krijgen. Dit nummer wordt gebruikt bij het exporteren naar boekhoudsoftware. Als je een product niet aan een specifieke grootboekrekening wilt koppelen, laat je dit veld leeg.
Een wijziging van het grootboeknummer geldt voor **nieuwe** factuurregels. Bestaande factuurregels behouden het grootboeknummer van toen ze werden toegevoegd.
# Reserveringen (/reserveringen)
Het reserveringssysteem helpt je verblijven op je park bij te houden. Je registreert wie er wanneer komt, op welk terrein en met hoeveel gasten. Vanuit een reservering kun je ook de check-in afhandelen. Facturen van de klant bekijk je op het **klantprofiel** onder **Facturen**.
## Tijdlijnweergave [#tijdlijnweergave]
Ga naar **Reserveringen** in het hoofdmenu om de tijdlijnweergave (Gantt) te openen. De weergave toont voorbeeldreserveringen gegroepeerd per categorie (zoals Huurcaravans, Jaarplaatsen en Tijdelijke plaatsen), uitgezet over een kalender. Rechtsboven staat **Nieuwe reservering** om een reservering te starten.
Screenshots met een **ℹ**-icoon hebben extra uitleg als je erover beweegt.
## Een nieuwe reservering aanmaken [#een-nieuwe-reservering-aanmaken]
Elke reservering is gekoppeld aan een klant. Kies een bestaande klant of maak een nieuwe aan via **Klanten** of via **Reserveringen > Nieuwe reservering**.
Je maakt een nieuwe reservering aan via het klantprofiel of via **Reserveringen**:
**Via het klantprofiel**
1. Ga naar **Klanten** in het hoofdmenu
2. Open het gewenste klantprofiel
3. Ga naar het tabblad **Reserveringen**
4. Klik op **Nieuwe reservering**
5. Vul het reserveringsformulier in (zie hieronder)
6. Klik op **Reservering aanmaken**
**Via Reserveringen**
1. Ga naar **Reserveringen** in het hoofdmenu
2. Klik rechtsboven op **Nieuwe reservering**
3. Kies een bestaande klant of maak een nieuwe klant aan
4. Vul het reserveringsformulier in en klik op **Reservering aanmaken**
## Het reserveringsformulier [#het-reserveringsformulier]
### Datums en verblijfsduur [#datums-en-verblijfsduur]
* **Inchecken**: Kies de aankomstdatum via de datumkiezer
* **Uitchecken**: Kies de vertrekdatum. Nadat je de incheckdatum hebt gekozen, opent de uitcheckdatumkiezer automatisch. De vertrekdatum moet altijd na de aankomstdatum liggen
* **Aantal nachten**: Wordt automatisch berekend op basis van de gekozen datums
### Aantallen en dieren [#aantallen-en-dieren]
Geef het aantal gasten en dieren op:
* **Volwassenen** (minimaal 1)
* **Kinderen**
* **Peuters**
* **Dieren**
Gebruik de plus- en minknoppen om het aantal aan te passen.
### Terrein [#terrein]
* **Terrein**: Kies een specifiek terrein als de gast een voorkeur heeft. In de lijst staan standaard alleen **boekbare** terreinen **zonder actieve bezetting** die **vrij zijn** in de gekozen incheck- en uitcheckperiode (overlappende actieve reserveringen op hetzelfde terrein worden uitgesloten). Pas je de datums aan, dan wordt de lijst automatisch bijgewerkt. Als er geen voorkeur is, laat je dit veld leeg
* **Niet-boekbare terreinen tonen**: Vink dit aan om ook terreinen te kiezen die niet online te reserveren zijn (bijvoorbeeld vaste jaarplaatsen). Staat de reservering al op een niet-boekbaar terrein, dan wordt dit vinkje automatisch aangezet zodat je de huidige keuze kunt zien en bewaren
### Nummerplaten [#nummerplaten]
Voeg de nummerplaten van de gast toe. Dit is belangrijk voor de automatische toegangscontrole bij de parkeerplaats en slagboom.
1. Typ een nummerplaat in het invoerveld
2. Druk op **Enter** om de plaat toe te voegen
3. Herhaal dit voor elke nummerplaat
Nummerplaten mogen alleen letters en cijfers bevatten. Koppeltekens en spaties worden niet ondersteund. Een nummerplaat mag maximaal 10 tekens lang zijn.
Toegevoegde nummerplaten worden zichtbaar onder het invoerveld. Klik op het kruisje op een plaat om deze te verwijderen.
### Notities [#notities]
Gebruik het notitieveld voor interne opmerkingen over de reservering, zoals speciale wensen of afspraken. Deze notities worden op geen enkele wijze gedeeld met de klant.
### Communicatie voorkeuren [#communicatie-voorkeuren]
Bepaal hoe Tillor communiceert met de klant over deze reservering:
* **Automatische bevestigingsmail**: Stuur een automatische bevestigingsmail na het maken van de reservering
* **Online betaling**: Sta toe dat de klant de reservering online kan betalen
* **Communicatie toestemming**: De klant wil door het systeem worden gecontacteerd over reserveringen, facturen en aanbiedingen
* **Marketing toestemming**: De klant geeft expliciet toestemming voor het ontvangen van marketing communicatie en speciale aanbiedingen (GDPR/AVG vereiste)
## Een reservering bekijken en bewerken [#een-reservering-bekijken-en-bewerken]
Vanuit het klantprofiel (tabblad **Reserveringen**) klik je op een reservering om de detailpagina te openen.
Op deze pagina vind je:
* **Reserveringsdetails** (linkerkant): Het volledige formulier met alle gegevens onder de koptekst **Reserveringsdetails**. Je kunt elk veld aanpassen en de wijzigingen opslaan met **Opslaan**. Met **Annuleren** herstel je de oorspronkelijke waarden. Naast de titel staat **Reserveringslink kopiëren**: plak in Word (of een ander document) een klikbare link met het reserveringsnummer als tekst
* **Acties voor reservering** (rechterkant): Snelle acties voor deze reservering
* **Opmerkingen** (rechterkant): Opmerkingen en discussies over deze reservering
* **Activiteit** (rechterkant): Een tijdlijn van reserveringsgebeurtenissen (zoals aanmaken, inchecken, uitchecken, annuleren, gerelateerde terugdraaiingen en het bijwerken van gegevens), met tijdstip en gebruiker. Bij het opslaan van het formulier zie je onder het gebeurtenisbericht welke velden zijn gewijzigd (voor / na), net als bij het klantactiviteitenlog
Bij het **aanmaken** van een reservering staat rechts **Acties voor reservering** (nog leeg) en een overzicht **Facturen** van de klant.
Het overzicht van **facturen van de klant** vind je op het klantprofiel onder het tabblad **Facturen**, niet op de reserveringsdetailpagina.
Elke reservering heeft een uniek **Reserveringsnummer** dat automatisch wordt aangemaakt. Dit nummer kun je niet aanpassen.
## Acties voor een reservering [#acties-voor-een-reservering]
Op de detailpagina van een reservering staan een aantal acties die je direct kunt uitvoeren:
* **Inchecken**: Registreer de aankomst van de gast
* **Uitchecken**: Registreer het vertrek van de gast
* **Inchecken ongedaan maken**: Corrigeer een per ongeluk vastgelegde incheck (backoffice)
* **Uitchecken ongedaan maken**: Corrigeer een per ongeluk vastgelegde uitcheck (backoffice)
* **Reservering annuleren**: Annuleer de reservering (alleen vóór inchecken)
* **Annulering ongedaan maken**: Zet een per ongeluk geannuleerde reservering terug op geboekt (alleen vóór inchecken)
## Reserveringen via het klantprofiel [#reserveringen-via-het-klantprofiel]
Alle reserveringen van een klant zijn ook zichtbaar via het klantprofiel:
1. Ga naar **Klanten** in het hoofdmenu
2. Open het gewenste klantprofiel
3. Klik op het tabblad **Reserveringen**
Hier zie je een overzicht van alle reserveringen van die klant. Klik op een reservering om de details te bekijken en te bewerken.
# Taken (/taken)
Met het takensysteem houd je werkzaamheden bij en wijs je ze toe aan de juiste teamleden. Taken zijn georganiseerd in takenlijsten, zodat je snel overzicht hebt van wat er gedaan moet worden en door wie.
## Taken bekijken [#taken-bekijken]
Je vindt taken op deze plekken:
* **Dashboard** - op het startscherm staat **Taken voor jou** met taken die aan jou zijn toegewezen
* **Taken** - pagina met alle takenlijsten (`/tasks` in de URL van je organisatie). Deze pagina staat niet in het zijmenu
* **Klanten > \[klant] > Taken** - taken gekoppeld aan een klant
Op de Taken-pagina zie je een overzicht van alle takenlijsten.
Elke takenlijst toont de bijbehorende taken met:
* De taaknaam
* De huidige status
* Een eventuele deadline
* Labels (als die zijn ingesteld)
* De toegewezen teamleden
Als er nog geen takenlijsten zijn, zie je **Geen takenlijsten** met de melding *Maak een takenlijst aan om te beginnen.*
## Takenlijsten en taken aanmaken [#takenlijsten-en-taken-aanmaken]
### Takenlijst aanmaken [#takenlijst-aanmaken]
Op de Taken-pagina klik je op **Nieuwe takenlijst**. Vul een naam en optioneel een beschrijving in en klik op **Aanmaken**.
### Taak aanmaken [#taak-aanmaken]
In een takenlijst klik je op **+** bovenaan of op **Nieuwe taak** onderaan de lijst. Vul minimaal een taaknaam in, kies een takenlijst (indien nodig) en klik op **Aanmaken**.
## Een taak voltooien [#een-taak-voltooien]
De snelste manier om een taak af te vinken:
1. Zoek de taak die je wilt voltooien
2. Klik op het vakje links van de taaknaam
3. De status springt automatisch naar **Voltooid** en de taaknaam wordt doorgestreept weergegeven
Wil je een voltooide taak terugzetten? Klik opnieuw op het vakje. De status gaat dan terug naar **In behandeling**.
## Taakdetails bekijken en bewerken [#taakdetails-bekijken-en-bewerken]
Klik op een taaknaam om het detailvenster te openen.
### Status wijzigen [#status-wijzigen]
1. Klik op de huidige **status** (badge)
2. Kies een nieuwe status uit de lijst:
* **In afwachting** - de taak staat gepland maar er is nog niet aan begonnen
* **In behandeling** - er wordt actief aan gewerkt
* **Voltooid** - de taak is afgerond
3. De status wordt direct opgeslagen
### Wat zie je in het detailvenster? [#wat-zie-je-in-het-detailvenster]
* **Status** - de huidige voortgang van de taak
* **Prioriteit** - **Laag**, **Gemiddeld** of **Hoog**
* **Labels** - categorieën of tags die aan de taak zijn gekoppeld
* **Toegewezen aan** - de teamleden die verantwoordelijk zijn voor deze taak
* **Deadline** - de uiterste datum waarop de taak afgerond moet zijn
* **Herinnering** - optionele datum en tijd voor een herinnering
* **Taakbeschrijving** - een uitgebreidere omschrijving van de werkzaamheden
* **Activiteit** - toont *Geen activiteit* zolang er geen activiteit is geregistreerd
Als de deadline verstreken is, wordt de relatieve datum onder de deadline in het detailvenster rood weergegeven.
Als een taak nog geen beschrijving heeft, zie je de melding *Voer een beschrijving in.*
## Een taak verwijderen [#een-taak-verwijderen]
1. Zoek de taak die je wilt verwijderen
2. Klik op het pictogram met drie horizontale puntjes rechts van de taak
3. Kies **Verwijderen** in het menu
Het menu met **Verwijderen** is alleen zichtbaar op een breder scherm. Op een smaller scherm kun je wel taakdetails openen door op de taaknaam te klikken, maar verwijderen is daar niet beschikbaar.
## Statussen uitgelegd [#statussen-uitgelegd]
| Status | Betekenis |
| ------------------ | -------------------------------------------------------- |
| **In afwachting** | De taak staat ingepland maar er is nog niet aan begonnen |
| **In behandeling** | Er wordt actief aan de taak gewerkt |
| **Voltooid** | De taak is afgerond |
# Terreinen (/terreinen)
Het terreinenbeheer is de centrale plek waar je alle standplaatsen, percelen en vaste plaatsen van je park beheert. Aan een terrein koppel je meters en klanten (via bezettingen), en je legt tariefinformatie vast die gebruikt wordt voor facturering.
## Terreinen bekijken [#terreinen-bekijken]
Ga naar **Park** > **Terreinen** in het hoofdmenu. Je ziet een overzicht met statistieken bovenaan:
Screenshots met een **ℹ**-icoon hebben extra uitleg als je erover beweegt.
* **Totaal terreinen**: Het totale aantal terreinen in je park
* **Recente terreinen**: Terreinen die de afgelopen 7 dagen zijn aangemaakt (ondertitel: *Recent toegevoegd*)
* **Boekbare terreinen**: Terreinen die beschikbaar zijn voor reserveringen
* **Niet-boekbare terreinen**: Terreinen die niet online geboekt kunnen worden
* **Totale oppervlakte**: De opgetelde oppervlakte van alle terreinen waarvan de locatie is ingetekend
Daaronder staat de tabel met alle terreinen op alfabetische volgorde.
## Een nieuw terrein aanmaken [#een-nieuw-terrein-aanmaken]
1. Ga naar **Park** > **Terreinen**
2. Klik op **"Nieuw terrein aanmaken"** (rechtsboven)
3. Vul de gegevens in:
* **Naam**: De naam van het terrein (verplicht, maximaal 255 tekens)
* **Beschrijving**: Een optionele omschrijving van het terrein
* **Prijstype**: Kies tussen **Dynamisch (op basis van oppervlakte)** of **Statisch** (zie [Prijstypen](#prijstypen))
* **Statische prijs**: Alleen invullen als je **Statisch** hebt gekozen
* **Boekbaar**: Vink aan als klanten dit terrein online mogen reserveren (standaard uit)
4. Klik op **"Terrein aanmaken"**
De locatie teken je niet in dit dialoogvenster. Doe dat achteraf via **Park** > **Plattegrond** (zie [Kaart](/kaart)).
Wanneer je de locatie van een terrein intekent op de kaart, berekent Tillor automatisch de oppervlakte in m². Deze oppervlakte wordt gebruikt voor dynamische tariefberekening.
## Terreindetails bekijken en bewerken [#terreindetails-bekijken-en-bewerken]
Klik op een terrein in de lijst om de detailpagina te openen. Bovenaan zie je een samenvatting met:
* De naam en beschrijving van het terrein
* De oppervlakte (indien ingetekend)
* Het aantal gekoppelde meters
* Of het terrein boekbaar is
* **Klant** (actieve bezetting, indien aanwezig)
* Aanmaak- en bijwerkdatum
Open onderaan de detailpagina, onder **Opmerkingen**, de sectie **Gebeurtenissen**. Daar zie je een tijdlijn van wijzigingen aan dit terrein (zoals naam, beschrijving, boekbaarheid en tariefmetadata), inclusief een **voor/na**-overzicht per gewijzigd veld.
### Terreingegevens aanpassen [#terreingegevens-aanpassen]
Op de detailpagina vind je het formulier **"Terrein bijwerken"**. Hier kun je alle gegevens van het terrein wijzigen:
**Basisinformatie**
* **Naam**: De naam van het terrein
* **Oppervlakte**: Wordt automatisch berekend op basis van de ingetekende locatie (niet handmatig te wijzigen)
* **Beschrijving**: Vrije omschrijving
**Gasinformatie**
* **Gastank naam**: De naam van de gastank die aan dit terrein is verbonden (optioneel). Als je dit invult, telt Tillor een gastoeslag mee in **Berekend tarief**.
* **Nummer van de gasmeter**: Het meternummer van de gasmeter (optioneel)
* **Contracthouder gasmeter**: De naam van de contracthouder van de gasmeter (optioneel)
**Tariefinformatie**
* **Prijstype**: Dynamisch of statisch (zie [Prijstypen](#prijstypen))
* **Statische prijs**: Alleen actief bij statisch prijstype
* **Toeslag ligging**: Een extra bedrag bovenop het basistarief vanwege de locatie (bijv. waterzijde)
* **Toelichting toeslag ligging**: Uitleg bij de liggingstoeslag
* **Toeslag elektriciteit**: Een extra bedrag voor de elektriciteitsaansluiting
* **Berekend tarief**: Het tarief dat Tillor berekent op basis van alle ingevulde gegevens (alleen ter inzage, niet bewerkbaar)
* **Boekbaar**: Aanvinken of het terrein online geboekt kan worden
Klik op **"Terrein bijwerken"** om de wijzigingen op te slaan.
## Prijstypen [#prijstypen]
Een terrein kan op twee manieren geprijsd worden:
### Dynamisch (standaard) [#dynamisch-standaard]
Het tarief wordt automatisch berekend op basis van:
1. **Oppervlakte**: De ingetekende oppervlakte van het terrein
2. **Gastoeslag**: Automatisch toegevoegd als **Gastank naam** is ingevuld
3. **Liggingstoeslag**: Het bedrag dat je invult bij "Toeslag ligging"
4. **Elektriciteitstoeslag**: Het bedrag dat je invult bij "Toeslag elektriciteit"
Het berekende tarief is altijd zichtbaar in het veld **"Berekend tarief"** en wordt real-time bijgewerkt terwijl je waarden aanpast.
De oppervlakte wordt alleen automatisch ingevuld als je het terrein intekent op de kaart. Zonder oppervlakte kan het dynamische tarief niet berekend worden.
### Statisch [#statisch]
Je vult zelf een vaste prijs in euro's in. Dynamische berekeningen worden dan niet gebruikt. Dit is handig voor terreinen met een afwijkende prijsafspraak of wanneer de oppervlakte niet beschikbaar is.
Als je "Statisch" selecteert, wordt het veld **"Statische prijs"** verplicht en actief.
## Meters koppelen aan een terrein [#meters-koppelen-aan-een-terrein]
Via de detailpagina van een terrein koppel je meters (water- of energiemeters) aan dat terrein:
1. Open de detailpagina van het terrein
2. Scroll naar de sectie **"Meters"**
3. Klik op **"Meter toevoegen"** (onderaan de metersectie)
4. Selecteer een meter uit de dropdown - alleen meters die nog niet aan een terrein zijn gekoppeld worden getoond
5. Klik op **"Meter toekennen"**
De meter verschijnt nu in de lijst. Per meter zie je:
* Het type meter (water, elektriciteit, etc.)
* Een statusindicator die aangeeft of de meter recent heeft gecommuniceerd
* Een uitklapbare kaart met de laatste meterstand en details
* Een **menu (...)** met acties per meter - op deze terreindetailpagina (sectie Meters) staat daar ook **Loskoppelen van terrein** om de koppeling met dit terrein te verwijderen (de meter blijft bestaan en kan later opnieuw worden toegewezen). Dezelfde optie staat niet in het menu op de algemene meterdetailpagina (**Park** > **Meters**).
Wanneer een klant een actieve bezetting krijgt op dit terrein, wordt het verbruik van alle gekoppelde meters automatisch aan die klant toegewezen.
## Opmerkingen toevoegen [#opmerkingen-toevoegen]
Onderaan de detailpagina van een terrein vind je een sectie voor opmerkingen. Hier kun je opmerkingen, bijzonderheden of afspraken over dit terrein vastleggen. Opmerkingen zijn alleen zichtbaar voor medewerkers van je organisatie. Direct eronder staat de tijdlijn **Gebeurtenissen** met wijzigingen aan de terreingegevens (zoals beschreven bij [Terreindetails bekijken en bewerken](#terreindetails-bekijken-en-bewerken)).
## Terreinen exporteren [#terreinen-exporteren]
Je kunt een volledig overzicht van alle terreinen exporteren naar Excel:
1. Ga naar **Park** > **Terreinen**
2. Klik op **"Exporteer alle terreinen"** (rechtsboven)
3. Het bestand wordt automatisch gedownload
Het exportbestand bevat per terrein alle basisgegevens, gasinformatie, tariefinstellingen en een automatische tariefberekening (subtotaal, toeslagen en totaaltarief).
## Veelvoorkomende scenario's [#veelvoorkomende-scenarios]
### Scenario: Nieuw terrein inrichten voor een nieuwe bewoner [#scenario-nieuw-terrein-inrichten-voor-een-nieuwe-bewoner]
1. Maak het terrein aan via **Park** > **Terreinen** > **"Nieuw terrein aanmaken"**
2. Vul naam, beschrijving en tariefinformatie in
3. Sla op en open de detailpagina
4. Teken optioneel de locatie in via **Park** > **Plattegrond** (Wijzigingsmodus)
5. Koppel de relevante meter(s) aan het terrein
6. Ga naar **Klanten** en maak een bezetting aan voor dit terrein - vanaf dat moment wordt het verbruik automatisch bijgehouden
### Scenario: Tariefwijziging doorvoeren [#scenario-tariefwijziging-doorvoeren]
1. Open de detailpagina van het terrein
2. Pas de toeslag ligging, elektriciteitstoeslag of het prijstype aan
3. Bekijk het **"Berekend tarief"** om te controleren of het nieuwe tarief klopt
4. Sla op met **"Terrein bijwerken"**
### Scenario: Terreinen exporteren voor jaarlijkse tariefcontrole [#scenario-terreinen-exporteren-voor-jaarlijkse-tariefcontrole]
1. Ga naar **Park** > **Terreinen**
2. Klik op **"Exporteer alle terreinen"**
3. Open het bestand in Excel
4. Controleer de tarieven en pas ze aan waar nodig
# Toegangscontrole (/toegangscontrole)
Het toegangscontrolesysteem helpt je bij het beheren van wie toegang heeft tot je park. Via het menu-item **Toegangscontrole** heb je toegang tot het centrale overzicht met statistieken, barrièrebediening en het volledige toegangslogboek.
## Overzichtspagina [#overzichtspagina]
Wanneer je naar **Toegangscontrole** navigeert, zie je direct:
* **Statistieken** bovenaan: totaal aantal toegangen, recente toegangen (afgelopen 24 uur), toegestane toegangen, geblokkeerde toegangen en actieve barrières.
* **Snelle acties** met barrièreknoppen (en indien van toepassing **Reset APB** of **Apparaatlogs synchroniseren**).
* **Toegangslogboek** met alle toegangspogingen.
* **Controller Operaties** met synchronisaties en andere achtergrondacties op toegangscontrollers.
## Barrières bedienen [#barrières-bedienen]
In het blok **Snelle acties** staat voor elke actieve barrière een openknop. Indien KC80-controllers actief zijn, zie je ook **Reset APB** en **Apparaatlogs synchroniseren** (markering **2**).
### Een barrière openen [#een-barrière-openen]
1. Klik op de knop **"\[naam barrière] openen"**.
2. Er verschijnt een bevestigingsdialoog met de vraag of je zeker weet dat je de barrière wilt openen.
3. Klik op **"Ja, open \[naam barrière]"** om te bevestigen.
### Een barrière sluiten [#een-barrière-sluiten]
De sluitknop is alleen beschikbaar als de barrière dit ondersteunt. In dat geval zie je naast de openknop een pijl-omlaag knop.
1. Klik op de pijl-omlaag naast de openknop.
2. Klik op **"\[naam barrière] sluiten"**.
3. Bevestig de actie in het dialoogvenster.
## Toegangslogboek [#toegangslogboek]
Het toegangslogboek toont alle toegangspogingen van je park.
Je kunt de lijst filteren en doorzoeken op verschillende manieren:
* **Zoekbalk**: Zoek op kenteken of toegangsmethodewaarde (bij NFC ook op kaartlabel).
* **Datumbereik**: Filter op een specifieke periode.
* **Status**: Filter op de status van de toegangspoging (zie statussen hieronder).
* **Type toegangsmethode**: Filter op kentekenherkenning, NFC of QR Code.
* **Barrière**: Filter op een specifieke barrière.
* **Klant**: Selecteer een klant om alleen diens toegangspogingen te tonen.
Elke rij in het logboek toont de datum, de gebruikte toegangsmethode (bijv. het kenteken), de bijbehorende klant (indien bekend), de barrière en de status van de poging.
### Statussen in het logboek [#statussen-in-het-logboek]
| Status | Betekenis |
| ----------------------- | ------------------------------------------------------------------------ |
| Toegestaan | De toegang is verleend. |
| Geblokkeerd | De toegang is geweigerd. |
| Inactief | De toegangsmethode staat op inactief en de toegang is geweigerd. |
| Verlopen | De toegangsmethode is verlopen. |
| Ongeldig | De toegangsmethode is ongeldig. |
| Geweigerd | De toegang is actief geweigerd. |
| Zacht geblokkeerd | Toegang is zacht geblokkeerd. |
| Apparaatfout | Er was een probleem met het apparaat. |
| Geen Auto | Er werd geen auto gedetecteerd. |
| APB - Richting Mismatch | De poort blokkeert doorgang vanwege anti-passback (richting klopt niet). |
| Onbekend | De status kon niet worden bepaald. |
| Systeembericht | Een intern systeembericht. |
### Logboek exporteren [#logboek-exporteren]
Klik op de knop **"Exporteren"** rechts in de werkbalk van het logboek om de toegangslogboek-entries te downloaden als Excel-bestand (.xlsx).
## Controller Operaties [#controller-operaties]
Onder het toegangslogboek staat **Controller Operaties**: synchronisaties, whitelist-updates en andere achtergrondacties op KC80-controllers. Zo zie je wanneer een pas of QR-code naar de slagboom is doorgestuurd.
## Toegangsmethoden beheren via het klantprofiel [#toegangsmethoden-beheren-via-het-klantprofiel]
Toegangsmethoden worden beheerd vanuit het klantprofiel. Ga naar **Klanten > \[klant] > Toegangscontrole**. Op het tabblad **Toegangscontrole** (markering **1**) staat bovenaan de tabel **Toegangsmethoden** (markering **2**).
Je ziet daar drie secties:
1. **Toegangsmethoden** - een overzicht van alle toegangsmethoden die aan deze klant zijn gekoppeld. Klik op **Toevoegen** (ℹ op de screenshot) om een nieuwe methode toe te voegen.
2. **Toegangslogboek** - het toegangslogboek gefilterd op deze klant.
3. **Controller Operaties** - synchronisaties en andere achtergrondacties voor deze klant.
### Een toegangsmethode toevoegen [#een-toegangsmethode-toevoegen]
1. Ga naar **Klanten > \[klant] > Toegangscontrole**.
2. Klik op **"Toevoegen"** in de werkbalk boven de tabel.
3. Vul het formulier in:
* **Type**: Kies tussen Kentekenherkenning, NFC of QR Code.
* **Nummerplaat** (bij kentekenherkenning): Voer het kenteken in. Dit wordt automatisch omgezet naar hoofdletters.
* **Van datum**: Optionele startdatum voor de toegang.
* **Tot datum**: Optionele einddatum voor de toegang.
* **Merk**, **Model**, **Kleur**: Optionele voertuiggegevens.
* **Status**: Actief, Inactief, Geblokkeerd of Zacht geblokkeerd.
* **Opmerkingen**: Vrij tekstveld voor interne notities.
4. Klik op **"Toevoegen"** om op te slaan.
Bij het type NFC selecteer je een beschikbare NFC-kaart uit een dropdown. Bij QR Code wordt de waarde automatisch gegenereerd. Je kunt het veld Aantal invullen om in één keer meerdere aparte QR-toegangsmethoden aan te maken (tot 100), elk met een eigen code. Vink Direct thermisch ticket printen aan als elke nieuwe QR na aanmaken als ingangsticket naar de thermische printer moet (configureer het thermische printer-IP bij de organisatie-instellingen).
### Digitale wallet (QR-code) [#digitale-wallet-qr-code]
Bij QR-toegangsmethoden kopieer je via het actiemenu een **persoonlijke URL** voor de gast. Die link opent de pagina **Toegangspas** met de QR-code. Is **Apple Wallet** of **Google Wallet** geconfigureerd voor je omgeving, dan ziet de gast daar knoppen om de pas op te slaan.
1. Ga naar **Klanten > \[klant] > Toegangscontrole**.
2. Open het actiemenu (drie puntjes) bij de QR-toegangsmethode.
3. Klik op **Persoonlijke URL kopiëren** (markering **1** in de screenshot). De link komt op het klembord.
4. Stuur de link naar de gast. Op **Toegangspas** staan de QR-code en, indien beschikbaar, **Voeg toe aan Apple Wallet** en **Toevoegen aan Google Wallet** (markering **1**).
De wallet-pas gebruikt dezelfde QR-code, geldigheidsperiode en status als in Tillor. Op iPhone met iOS 27 verschijnt de pas als Poster Generic met optionele eigen achtergrond en vierkante QR-code; oudere iPhones tonen het klassieke generic-layout. Op iOS 27 kunnen gasten op de pas ook snelkoppelingen gebruiken: **Routebeschrijving** opent Apple Maps naar de slagboomlocatie (of het middelpunt van de parkkaart), en als je een website in de bedrijfsgegevens hebt ingesteld, een tweede knop naar die site. Achtergrond en slagboomlocatie stel je in onder **Instellingen** - zie [Organisatie](/gebruikers/organisaties). Op iPhone kan iOS de pas op het vergrendelscherm tonen wanneer de gast in de buurt is. Op Android slaat de gast de pas op in Google Wallet.
### Een toegangsmethode bewerken [#een-toegangsmethode-bewerken]
1. Klik op het menu-icoon (drie puntjes) rechts van de toegangsmethode in de tabel.
2. Klik op **"Bewerken"**.
3. Pas de gewenste gegevens aan.
4. Klik op **"Opslaan"**.
### Een toegangsmethode verwijderen [#een-toegangsmethode-verwijderen]
1. Klik op het menu-icoon (drie puntjes) rechts van de toegangsmethode.
2. Klik op **"Verwijderen"**.
### Statussen van toegangsmethoden [#statussen-van-toegangsmethoden]
* **Actief**: De toegangsmethode is actief en verleent toegang (mits de periode klopt).
* **Inactief**: De toegangsmethode is inactief en geeft geen toegang (zelfde gedrag als Geblokkeerd, met duidelijkere statusnaam).
* **Geblokkeerd**: De toegangsmethode is geblokkeerd en geeft geen toegang.
* **Zacht geblokkeerd**: De toegangsmethode is tijdelijk geblokkeerd.
# Overzicht (/controllers)
Controllers zijn de fysieke apparaten die op je park staan en verbinding maken met Tillor. Ze lezen NFC-tags voor toegang, douches, laadpalen en andere faciliteiten.
## Wat doet een controller? [#wat-doet-een-controller]
Een controller is een klein kastje dat:
* **Verbinding maakt met Tillor** via WiFi of Ethernet en het internet
* **NFC-kaarten leest** - klanten houden hun kaart of sleutelhanger tegen de lezer
* **Tags valideert** - Tillor controleert of de tag geldig is voor het type controller (toegang, douche, laadpunt)
* **Een LED-ring toont** - je ziet in één oogopslag of alles goed werkt
## Hoe werkt het? [#hoe-werkt-het]
### Van aansluiten tot gebruik [#van-aansluiten-tot-gebruik]
1. **Aansluiten**\
Je sluit de controller aan op stroom en netwerk (WiFi of Ethernet). De controller start op en zoekt automatisch een verbinding.
2. **Koppelen aan Tillor**\
In Tillor ga je naar **Controllers**. De controller verschijnt in de lijst wanneer hij verbinding maakt. Je kiest de controller uit de lijst en koppelt hem aan je organisatie door op **Goedkeuren** te klikken. Dit heet **adoptie** - je zegt als het ware "dit kastje hoort bij ons".
3. **Klaar voor gebruik**\
Na de adoptie is de controller verbonden met Tillor. De LED-ring laat zien dat alles goed werkt en dat de controller klaar is om kaarten te lezen.
4. **Kaart scannen**\
Klanten houden hun NFC-tag tegen de lezer. Tillor valideert de tag en logt de scan. De LED-ring geeft feedback (bijv. pulserend oranje wanneer een tag op de lezer ligt, witte komeet tijdens het scannen).
### Wat zie je in Tillor? [#wat-zie-je-in-tillor]
* **Controllers-overzicht** - gekoppelde controllers en adoptieverzoeken ("Wacht op goedkeuring")
* **Controllerdetail** - status, groep, gebruik en laatst gezien; instellingen voor ACL, netwerk, updates en relais
* **Onderhoud** - herstarten via het controllermenu; firmware bijwerken via de versie op de controllerpagina
## Veelvoorkomende scenario's [#veelvoorkomende-scenarios]
### Nieuwe controller in gebruik nemen [#nieuwe-controller-in-gebruik-nemen]
1. Sluit de controller aan op stroom en netwerk (WiFi of Ethernet)
2. Ga in Tillor naar **Controllers**
3. Wacht tot de controller in de lijst verschijnt (als "Wacht op goedkeuring")
4. Klik op **Goedkeuren** (✓) om de controller aan je organisatie te koppelen
5. De LED-ring laat zien wanneer de controller klaar is
### Controller reageert niet of werkt niet goed [#controller-reageert-niet-of-werkt-niet-goed]
* Controleer of de controller stroom heeft en of het netwerk bereikbaar is (WiFi-signaal of Ethernet-kabel)
* Kijk naar de **LED-ring** - de kleuren vertellen je wat er aan de hand is
* Raadpleeg de [LED-ring troubleshooting](/controllers/troubleshooting/led-ring) voor een overzicht van alle kleuren en hun betekenis
### Kaart wordt niet herkend [#kaart-wordt-niet-herkend]
* Controleer of de klant de juiste kaart gebruikt
* Controleer in Tillor of de tag aan een klant is gekoppeld en geldig is voor het type controller
* Zorg dat de kaart goed tegen de lezer wordt gehouden
Bij problemen kunnen superadmins recente logs op de controllerpagina bekijken. Andere beheerders openen via **Bekijk logs in Grafana** in het controllermenu uitgebreidere logs.
# Woordenlijst (/controllers/lexicon)
Een overzicht van termen die je tegenkomt bij het werken met controllers. Bij elke term staat een uitleg en - in een blokquote - wat we er in gewone taal mee bedoelen.
## A [#a]
## C [#c]
## E [#e]
## F [#f]
## L [#l]
## N [#n]
## O [#o]
## R [#r]
## T [#t]
## U [#u]
# Controller instellingen (/controllers/settings)
Je kunt de controller aanpassen via **Controllers** > \[naam controller], in het formulier onder de header. Klik op **Opslaan** om wijzigingen door te voeren; Tillor stuurt de instellingen daarna door naar de controller. Hieronder vind je een overzicht van de instellingen per sectie.
## Controller herstarten [#controller-herstarten]
Als de controller niet goed reageert, kun je hem herstarten vanuit Tillor:
**Detailpagina**
1. Ga naar **Controllers** > \[naam controller]
2. Klik op het actiemenu (⋮) en kies **Herstart controller**
**Overzichtspagina**
* Klik op het herstart-icoon in de tabelrij.
De controller herstart en verbindt daarna opnieuw.
## ACL-configuratie [#acl-configuratie]
De ACL (Access Control List) bepaalt hoe de controller toegang controleert. *Ofwel: hoe het kastje checkt of een kaart mag.*
| Instelling | Betekenis |
| -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **ACL ingeschakeld** | Zet op **Ja** om toegangscontrole via de controller te gebruiken. Op **Nee** worden kaarten wel gescand maar niet gevalideerd. |
| **ACL prioriteit** | **Lokaal eerst**: controller checkt eerst eigen geheugen, daarna Tillor. *Handig als het internet even wegvalt.* **API eerst**: altijd direct Tillor vragen. |
| **API ACL time-out** | Hoe lang (in milliseconden) de controller wacht op Tillor voordat hij overschakelt. Standaard 1000 ms (1 seconde). |
Kies **Lokaal eerst** als je wilt dat de controller ook werkt bij tijdelijke internetstoringen. De controller slaat toegangsrechten lokaal op.
## Internetconfiguratie [#internetconfiguratie]
| Instelling | Betekenis |
| ------------------------------ | ----------------------------------------------------------------------------- |
| **Primaire netwerkverbinding** | **Wifi** of **Ethernet** - welke verbinding de controller het eerst probeert. |
| **WiFi netwerknaam** | SSID van het WiFi-netwerk waarop de controller moet verbinden. |
| **WiFi wachtwoord** | Wachtwoord voor het WiFi-netwerk. |
## Updateconfiguratie [#updateconfiguratie]
Zie [Firmware-updates](/controllers/updates) voor een uitgebreide uitleg over updatefrequentie, het updatevenster en OTA-updates overslaan.
| Instelling | Betekenis |
| ------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| **Update frequentie** | Hoe vaak het kastje kijkt of er een nieuwe versie is: **Uur**, **Dagelijks** of **Wekelijks**. |
| **Update periode van/tot** | *Wanneer mag het kastje updaten?* Bijv. 02:00-04:00 = alleen 's nachts. |
| **OTA-updates overslaan** | Zet op **Ja** als het kastje géén updates meer mag ophalen. *Handig tijdelijk, maar normaal laat je dit op Nee.* |
## Relais-aansturing [#relais-aansturing]
Het relais is een schakelaar in het kastje. *Je kunt er bijvoorbeeld een barrière mee openen of sluiten.*
| Instelling | Betekenis |
| ---------------- | ---------------------------------------- |
| **Type relais** | Momenteel alleen **Intern** ondersteund. |
| **Relais poort** | Poortnummer van het relais. Standaard 1. |
# Firmware-updates (/controllers/updates)
De controller ontvangt regelmatig firmware-updates via het internet. *Ofwel: het kastje haalt zelf nieuwe software op, net als je telefoon.* Je kunt instellen **wanneer** en **hoe vaak** dat mag.
## Updatefrequentie [#updatefrequentie]
De controller controleert periodiek of er een nieuwe firmwareversie beschikbaar is:
| Optie | Betekenis |
| ------------- | ----------------------------------------- |
| **Uur** | Controleert elk uur op updates. |
| **Dagelijks** | Controleert één keer per dag (standaard). |
| **Wekelijks** | Controleert één keer per week. |
Na de controle wordt een update alleen uitgevoerd als er een nieuwere versie is. Heb je een updatevenster ingesteld, dan moet het huidige tijdstip ook binnen dat venster vallen. *Dus: het kastje kijkt wel of er iets nieuws is, maar installeert het alleen op de tijden die jij hebt ingesteld.*
## Updatevenster [#updatevenster]
Het updatevenster is het tijdsvenster waarin de controller mag updaten. Heb je **Update periode van** en **Update periode tot** ingevuld, dan worden updates alleen binnen die tijden uitgevoerd. *Simpel gezegd: je kiest zelf wanneer het kastje mag updaten - bijvoorbeeld alleen 's nachts.*
**Voorbeeld:** Als je **Update periode van** op 02:00 en **Update periode tot** op 04:00 zet, vindt een update alleen plaats tussen 02:00 en 04:00 uur. Zo voorkom je dat de controller midden op de dag herstart tijdens drukke uren.
### Instellen [#instellen]
1. Ga naar **Controllers** > \[naam controller]
2. Scroll naar **Update Configuratie**
3. Kies **Update frequentie** (Uur, Dagelijks of Wekelijks)
4. Vul **Update periode van** in (bijv. 02:00)
5. Vul **Update periode tot** in (bijv. 04:00)
6. Klik op **Opslaan**
## OTA-updates overslaan [#ota-updates-overslaan]
OTA staat voor Over-The-Air: updates via het internet. Als je **OTA-updates overslaan** op **Ja** zet, installeert de controller geen nieuwe firmware meer. De controller blijft op de huidige versie. *Ofwel: het kastje past zichzelf niet meer bij via OTA.*
**Wanneer gebruiken?**
* Tijdelijk, als je geen wijzigingen wilt tijdens een drukke periode
* Voor test- of demo-controllers die op een vaste versie moeten blijven
Laat **OTA-updates overslaan** standaard op **Nee**. Updates bevatten vaak verbeteringen en beveiligingsfixes.
## Wat gebeurt er tijdens een update? [#wat-gebeurt-er-tijdens-een-update]
1. De controller detecteert een nieuwe firmwareversie
2. De firmware wordt gedownload
3. De LED-ring toont **rood** (vast of knipperend) - de controller wordt bijgewerkt
4. De controller herstart automatisch
5. Na de herstart is de nieuwe versie actief
# Overzicht (/mobiele-app)
De Tillor-app is een begeleidende app voor **iOS** en **Android**, bedoeld voor gebruik op een tablet of smartphone op het park - bijvoorbeeld als kiosk, bij de receptie of onderweg met een NFC-lezer.
## De app installeren [#de-app-installeren]
De app draait op **iOS** en **Android**. Je organisatie deelt het installatiebestand of de distributielink (interne build, TestFlight of de app store, afhankelijk van jullie uitrol).
Heb je nog geen toegang? Neem contact op met je organisatiebeheerder of Tillor-support.
## Inloggen [#inloggen]
1. Open de app na installatie
2. Kies je omgeving (productie, staging of development) als je daartoe toegang hebt
3. Log in via **Microsoft**, **Google** of **Apple** - dezelfde SSO-providers als de webapp
4. Kies je organisatie als je tot meerdere organisaties behoort
Je gebruikt hetzelfde Tillor-account als in de browser. Er is geen apart app-wachtwoord.
Meer over inloggen in de webapp: [Inloggen & Toegang](/inloggen). Tillor bewaart geen eigen wachtwoord; je provider regelt de authenticatie.
## Beschikbare functies [#beschikbare-functies]
Via de app kun je onder andere:
* **PDF's en afbeeldingen ontvangen** - realtime op het startscherm wanneer Tillor een document naar je tablet stuurt
* **Prepaid kaarten scannen** - NFC-kaart uitlezen en kaart- en klantgegevens bekijken
* **Controllers instellen** - WiFi-gegevens via Bluetooth naar een Tillor-controller schrijven (adoptie daarna in het dashboard)
* **Betalingen horen** - geluidssignaal bij een betaalde factuur (online betaling of automatische bankoverschrijving)
* **Kiosk-modus** - scherm aan laten, helderheid aanpassen en organisatielogo op het startscherm
De app vervangt de webapplicatie niet. Functies zoals reserveringen beheren, facturen aanmaken of betalingen registreren doe je in de browser op [tillor.eu](https://tillor.eu).
## Apparaatinformatie [#apparaatinformatie]
De app stuurt periodiek apparaatgegevens naar Tillor, onder andere:
* Apparaatnaam, model en besturingssysteem
* App-versie
* Batterijstatus en oplaadstatus
* Netwerkverbinding (wifi of mobiel)
Je ziet deze gegevens bij **Account** > **Actieve sessies** in de webapp. Open een app-sessie om **App-metagegevens** te bekijken. Je kunt sessies daar ook beëindigen.
## Verbindingsproblemen [#verbindingsproblemen]
Als de app geen verbinding kan maken:
1. Controleer je internetverbinding (wifi of mobiel netwerk)
2. Controleer of je de juiste **omgeving** hebt gekozen in Instellingen
3. Zorg dat je de nieuwste app-versie hebt
4. Log uit en log opnieuw in via je SSO-provider
5. Neem contact op met je organisatiebeheerder als het probleem aanhoudt
# Connector (/ontwikkelaars/connector)
De Tillor Connector is een lokale service die Tillor verbindt met fysieke apparaten in je park - zoals printers en toegangscontrollers. De connector draait op een computer in je netwerk en communiceert via MQTT met de Tillor-cloud.
## Hoe werkt de connector? [#hoe-werkt-de-connector]
```text
Tillor Cloud <-> MQTT <-> Connector (lokaal) <-> Printers / Toegangscontrollers / Terminals
```
De connector fungeert als brug: Tillor stuurt opdrachten via het internet naar de connector, die deze vervolgens uitvoert op de aangesloten apparaten in je lokale netwerk.
## Connector installeren [#connector-installeren]
De connector wordt uitsluitend als **Docker-image** uitgeleverd (`registry.tillor.dev/tillor-public/connector:latest`). Er is geen afzonderlijk installatieprogramma; je draait hem op een toestel in het lokale netwerk van het park.
### Vereisten [#vereisten]
* Een computer of server in het lokale netwerk van het park (bijv. een Raspberry Pi, NAS of Linux-server)
* Stabiele internetverbinding
* **Docker** en **Docker Compose** geïnstalleerd
* Een API-sleutel (zie hieronder)
### Gegevens die je nodig hebt [#gegevens-die-je-nodig-hebt]
Haal eerst deze twee waarden op in Tillor voordat je de container start:
| Waarde | Waar te vinden | Gebruikt in |
| ------------------------------ | ------------------------------------------------------------ | ------------------ |
| **Organisatie-ID** (`org_xxx`) | zichtbaar in de URL (`/orgs/org_xxx/...`) of via de HTTP API | `TILLOR_ORG_ID` |
| **API-sleutel** (`tkn_xxx`) | *Account > API-sleutels > API-sleutel aanmaken* | `TILLOR_API_TOKEN` |
De connector haalt MQTT-broker-gegevens op via de Tillor HTTP API en vernieuwt die automatisch voordat ze verlopen. Zie [HTTP API](/ontwikkelaars/http) voor hoe je een API-sleutel aanmaakt en beheert.
### Poorten [#poorten]
De connector luistert standaard op de volgende poorten. De HTTP-poort is configureerbaar via `HEALTH_CHECK_PORT` (standaard `3000`); de WebSocket-poort ligt vast.
| Poort | Protocol | Gebruik | Nodig wanneer |
| ------ | -------- | --------------------------------------------------------------------------------- | ----------------------------------------------------- |
| `3000` | HTTP | Status, health-check en printer-dashboard (zie [HTTP-endpoints](#http-endpoints)) | Altijd |
| `8765` | WS | WebSocket-server voor identiteitsscans | Alleen bij een identiteitslezer op het lokale netwerk |
### Eenvoudige setup (één replica) [#eenvoudige-setup-één-replica]
Maak een map aan, zet hierin een `docker-compose.yml` en een `.env` met je gegevens, en start de container. Deze setup gebruikt een file-cache op `/shared/cache` zodat de toegangscontrole-gegevens herstartpersistent zijn.
docker-compose.yml
.env
```yaml
services:
connector:
image: registry.tillor.dev/tillor-public/connector:latest
container_name: tillor-connector
restart: always
environment:
CACHE_DIR: /shared/cache
ports:
- "3000:3000"
volumes:
- ./shared:/shared
env_file:
- .env
healthcheck:
test: ["CMD-SHELL", "curl -sSf http://localhost:${HEALTH_CHECK_PORT:-3000}/health -o /dev/null || exit 1"]
interval: 15s
timeout: 10s
retries: 5
start_period: 10s
security_opt:
- no-new-privileges:true
```
```bash
# Verplicht
TILLOR_ORG_ID=org_abc123
TILLOR_API_URL=https://app.tillor.eu
TILLOR_API_TOKEN=tkn_xxx
# Optioneel
# HEALTH_CHECK_PORT=3000
# ACCESS_CONTROL_SECRET=geheim-voor-hikvision-anpr
# JSON_LOGGING=true
# Alleen nodig als je MQTT-broker een privaat CA-certificaat gebruikt (niet voor de standaard Tillor-cloudketen)
# TBMQ_MQTT_CA_PATH=/run/secrets/tbmq-ca.pem
```
Start met: `docker compose up -d`.
Voeg `"8765:8765"` toe aan `ports` wanneer je een identiteitslezer op het lokale netwerk aansluit. Zonder lezer is deze poort niet nodig. Zie [Identiteitsscans](/identiteitsscans) voor het aanmaken van klanten vanuit een scan.
### Geavanceerde setup (meerdere replicas met gedeelde cache) [#geavanceerde-setup-meerdere-replicas-met-gedeelde-cache]
Voor parken met veel verkeer of redundantie wil je meerdere connector-replicas draaien. In dat geval moeten ze een gedeelde cache delen, anders synchroniseren ze niet onderling. Een klein Valkey- of Redis-image voldoet:
docker-compose.yml
```yaml
services:
valkey:
image: valkey/valkey:7-alpine
container_name: tillor-valkey
restart: always
command: valkey-server --appendonly yes --dir /data
volumes:
- ./valkey:/data
healthcheck:
test: ["CMD", "valkey-cli", "ping"]
interval: 5s
timeout: 3s
retries: 3
connector:
image: registry.tillor.dev/tillor-public/connector:latest
restart: always
deploy:
replicas: 2
environment:
REDIS_URL: redis://valkey:6379
depends_on:
valkey:
condition: service_healthy
volumes:
- ./shared:/shared
env_file:
- .env
healthcheck:
test: ["CMD-SHELL", "curl -sSf http://localhost:${HEALTH_CHECK_PORT:-3000}/health -o /dev/null || exit 1"]
interval: 15s
timeout: 10s
retries: 5
start_period: 10s
security_opt:
- no-new-privileges:true
```
Praat de connector printers of controllers aan op een lokale hostnaam (bijvoorbeeld `printer.lokaal`)? Pin dan de DNS-resolver expliciet via `dns: [10.x.x.1, 10.x.x.2]` op de connector-service, anders gebruikt Docker zijn eigen resolver en kan de hostnaam niet gevonden worden.
### Omgevingsvariabelen [#omgevingsvariabelen]
| Variabele | Verplicht | Beschrijving |
| ----------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `TILLOR_ORG_ID` | ja | Organisatie-ID (`org_xxx`) |
| `TILLOR_API_URL` | ja | Basis-URL van de Tillor API, meestal `https://app.tillor.eu` |
| `TILLOR_API_TOKEN` | ja | API-sleutel (`tkn_xxx`) uit *Account > API-sleutels* |
| `HEALTH_CHECK_PORT` | nee | HTTP-poort voor status/health/printers (standaard `3000`) |
| `REDIS_URL` | nee | Gedeelde cache bij meerdere replicas. Laat leeg voor file-cache |
| `CACHE_DIR` | nee | Map voor file-cache als `REDIS_URL` leeg is (standaard `/tmp/tillor-connector-cache`; aanbevolen `/shared/cache` met een volume voor persistentie) |
| `ACCESS_CONTROL_SECRET` | nee | Alleen nodig voor Hikvision ANPR-camera's die rechtstreeks op de connector-URL posten |
| `JSON_LOGGING` | nee | Zet op `true` voor JSON-logs (handig bij loglevering naar een aggregator) |
### Verbinding controleren [#verbinding-controleren]
Controleer na het starten of de connector bereikbaar en verbonden is:
1. Open `http://[connector-host]:3000/health` in een browser of via `curl`. Antwoord `{"status":"ok",...}` betekent verbonden; `"degraded"` betekent geen MQTT-verbinding.
2. Open `http://[connector-host]:3000/` voor een JSON-overzicht met organisatie-ID, MQTT-status, cache-driver en synchronisatiestatus van toegangscontrole.
3. De connector stuurt elke minuut een heartbeat naar Tillor zolang `TILLOR_API_URL`, `TILLOR_API_TOKEN` en `TILLOR_ORG_ID` correct zijn.
### Automatische updates met Watchtower [#automatische-updates-met-watchtower]
Om de connector automatisch bij te werken (elke 15 seconden controleren op nieuwe images):
```yaml
# docker-compose.watchtower.yml
services:
watchtower:
image: nickfedor/watchtower:latest
container_name: watchtower
environment:
- TZ=Europe/Brussels
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_INCLUDE_STOPPED=true
- WATCHTOWER_REVIVE_STOPPED=false
- WATCHTOWER_ROLLING_RESTART=true
- WATCHTOWER_POLL_INTERVAL=15
- DOCKER_API_VERSION=1.43
volumes:
- /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped
```
Start naast je connector: `docker compose -f docker-compose.watchtower.yml up -d`
## HTTP-endpoints [#http-endpoints]
De connector serveert een kleine HTTP-API op `HEALTH_CHECK_PORT` (standaard `3000`). Deze is bedoeld voor health-checks van een load balancer en voor lokaal opzicht; er staan geen authenticatiegevoelige operaties op.
| Endpoint | Beschrijving |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `GET /` | JSON-status: organisatie-ID, container-hostname, uptime, cache-driver (`redis` of `file`), MQTT-verbindingsstatus en toegangscontrole-sync (`lastSyncAt`, `unsyncedEntries`) |
| `GET /health` | `200` met `status: "ok"` als de connector draait en verbonden is met MQTT; `status: "degraded"` zonder MQTT |
| `GET /printers` | HTML-dashboard met CUPS-queues, recente PDF-prints, thermische bonnen-prints en geheugengebruik. Auto-refresh elke 5 seconden. Handig om printproblemen snel te diagnosticeren |
Open `http://[connector-host]:3000/printers` in een browser om live te zien welke CUPS-queues geregistreerd zijn, welke jobs in de wacht staan, en welke prints zijn gefaald. Bij self-hosted setups vervangt dit de noodzaak om in te loggen op de container voor `lpstat -p`.
## Gekoppelde apparaten [#gekoppelde-apparaten]
Via de connector kun je de volgende apparaten aansturen:
### Printers [#printers]
Zie de [printer-documentatie](/printer) voor het instellen en gebruiken van printers via de connector.
### Toegangscontrollers [#toegangscontrollers]
Slagbomen, poorten en andere toegangspunten worden gesynchroniseerd via de connector. Wijzigingen in toegangsregels in Tillor worden automatisch doorgezet naar de controllers.
Zie de [controllers-documentatie](/controllers) voor meer informatie.
### Identiteitsscans [#identiteitsscans]
Identiteitsdocumenten van een aangesloten lezer komen binnen via de WebSocket-poort `8765` op de connector. Zie [Identiteitsscans](/identiteitsscans) voor klant aanmaken vanuit een scan en bewaartermijnen.
## Problemen oplossen [#problemen-oplossen]
### Connector niet verbonden [#connector-niet-verbonden]
1. Controleer of de container draait: `docker compose ps`.
2. Controleer de internetverbinding van de host.
3. Haal `http://[connector-host]:3000/health` op; bij `"degraded"` is er geen MQTT-verbinding - controleer `TILLOR_API_URL` en `TILLOR_API_TOKEN`.
4. Verifieer dat de API-sleutel nog geldig is in *Account > API-sleutels*.
5. Bekijk de logs: `docker compose logs -f connector`.
### Opdrachten worden niet uitgevoerd [#opdrachten-worden-niet-uitgevoerd]
1. Controleer de verbindingsstatus via `GET /`.
2. Bekijk de logs: `docker compose logs -f connector`.
3. Controleer of het betreffende apparaat (printer, controller, terminal) bereikbaar is in het lokale netwerk.
4. Bij hostname-problemen: zie de DNS-tip bij de geavanceerde setup.
# HTTP API (/ontwikkelaars/http)
De Tillor API is een REST API. Authenticeer met een API-sleutel en stuur de juiste headers bij elke request. API-sleutels zijn **per account** - één sleutel werkt voor alle organisaties waar je toegang toe hebt.
## API Playground en OpenAPI [#api-playground-en-openapi]
* **[API Playground](https://tillor.eu/api/playground)** - Probeer endpoints direct in de browser met je API-sleutel
* **[OpenAPI-specificatie](https://tillor.eu/api/openapi.json)** - Volledige API-documentatie in JSON-formaat voor codegeneratie of import in Postman/Insomnia
***
## API-sleutels [#api-sleutels]
### Aanmaken [#aanmaken]
API-sleutels maak je aan in de Tillor-app via het gebruikersmenu onder **Account > API-sleutels** (markering **1** = menu, markering **2** = API-sleutels in de screenshot). Je kunt ze ook via de API aanmaken met een ingelogde sessie (geen API-sleutel). Zie de [OpenAPI-specificatie](https://tillor.eu/api/openapi.json) onder tag `api-keys` voor paden, request- en response-schema's.
De ruwe sleutel wordt **eenmalig** teruggegeven bij aanmaken of regenereren. Bewaar deze veilig; je kunt hem daarna niet meer ophalen.
### Gebruik [#gebruik]
Stuur de API-sleutel in de `x-api-key` header:
```http
x-api-key: tkn_xxx
```
Sleutels gebruiken het `tkn_`-voorvoegsel. Alle organisatie-endpoints vereisen ook het organisatie-ID:
```http
X-Tillor-Org-Id: org_abc123
```
### Rate limits [#rate-limits]
* **Standaard:** 200 requests per 60 seconden per sleutel
* Bij overschrijding: `429 Too Many Requests`
### Beveiliging [#beveiliging]
* **Nooit** API-sleutels blootstellen in client-side code of publieke repositories
* Regenerereer sleutels periodiek via **Regenereren** in de app (OpenAPI: `POST /api/api-keys/:id/renew`)
* Verwijder ongebruikte sleutels met `DELETE /api/api-keys/:id`
***
## Base URL en organisatie-context [#base-url-en-organisatie-context]
**Base URL:** `https://tillor.eu` (of je deployment-URL; OpenAPI noemt `{APP_URL}/api`)
**Organisatie-paden:** Voeg het organisatie-ID toe in het pad:
```
/api/orgs/:orgId/...
```
**Voorbeeld:**
```
GET https://tillor.eu/api/orgs/org_abc123/customers
```
**Vereiste headers voor organisatie-endpoints:**
* `x-api-key: tkn_xxx` - API-sleutel
* `X-Tillor-Org-Id: org_abc123` - Organisatie-ID (moet overeenkomen met het pad)
***
## Voorbeeld: cURL [#voorbeeld-curl]
```bash
curl -X GET "https://tillor.eu/api/orgs/org_abc123/customers" \
-H "x-api-key: tkn_xxx" \
-H "X-Tillor-Org-Id: org_abc123" \
-H "Content-Type: application/json"
```
***
## Integraties (marketplace) [#integraties-marketplace]
Organisatie-integraties (voorheen "apps" in de API) gebruiken één resource per type onder `/api/orgs/:orgId/integrations/{integrationType}`. Vereiste permissies zijn `organization:integrations:read` en `organization:integrations:write` (vervangt `organization:apps:*`).
| Method | Pad | Beschrijving |
| ------ | --------------------------------- | ------------------------------------------------------------------------------ |
| GET | `/integrations/{integrationType}` | Status (`installed`, `available`) en redacted `settings` |
| POST | `/integrations/{integrationType}` | Installeren (optioneel `settings` in body; OAuth kan `redirectUrl` teruggeven) |
| PUT | `/integrations/{integrationType}` | Instellingen bijwerken (`settings` in body) |
| DELETE | `/integrations/{integrationType}` | Deinstalleren |
Bij `GET` en na `PUT` bevat `settings` alleen **publieke** velden plus per geheim veld `{ configured: true }`. Wachtwoorden, API-keys en OAuth-tokens komen niet terug. Laat geheime velden leeg bij `PUT` om de bestaande waarde te behouden.
Zie de [OpenAPI-specificatie](https://tillor.eu/api/openapi.json) (tag `integrations`) voor exacte schema's.
***
## Gerelateerd [#gerelateerd]
* [API Playground](https://tillor.eu/api/playground) - Endpoints uitproberen in de browser
* [OpenAPI](https://tillor.eu/api/openapi.json) - API-specificatie (JSON)
* [Webhooks](/ontwikkelaars/webhooks) - Ontvang events via HTTP POST
* [SSE](/ontwikkelaars/sse) - Stream events via Server-Sent Events
* [Voorbeelden](/ontwikkelaars/voorbeelden) - Code- en payload-voorbeelden
# Overzicht (/ontwikkelaars)
De Tillor API biedt programmatische toegang tot je organisatiedata. Gebruik API-sleutels voor authenticatie, webhooks voor uitgaande events, of Server-Sent Events (SSE) voor realtime streaming.
## Wat kun je bouwen? [#wat-kun-je-bouwen]
* **Integraties** - Koppel Tillor aan je eigen systemen via de REST API
* **Webhooks** - Ontvang HTTP POST-berichten wanneer events plaatsvinden (factuur betaald, klant aangemaakt, etc.)
* **Realtime dashboards** - Stream events via SSE of MQTT voor live updates in je applicatie
## Snel aan de slag [#snel-aan-de-slag]
1. **Maak een API-sleutel** in Tillor onder *Account > API-sleutels*
2. **Stuur de sleutel** in de `x-api-key` header bij elke request
3. **Voeg `X-Tillor-Org-Id`** toe met je organisatie-ID voor organisatie-specifieke endpoints
Webhooks en SSE leveren exact dezelfde events. Het verschil: webhooks sturen HTTP POST naar jouw URL; SSE is een lange verbinding waar je events op ontvangt.
**Handige links:** [API Playground](https://tillor.eu/api/playground) - [OpenAPI](https://tillor.eu/api/openapi.json)
**Scope:** API-sleutels zijn per account (alle organisaties); webhooks zijn per organisatie.
Je kunt deze site ook als tekst gebruiken voor AI-tools: [`/llms.txt`](/llms.txt) (index), [`/llms-full.txt`](/llms-full.txt) (alle pagina's samen), en per pagina door `.mdx` achter het pad te zetten (bijvoorbeeld [`/ontwikkelaars/http.mdx`](/ontwikkelaars/http.mdx)). **Vraag AI (lokaal)** in de doc-layout laadt die volledige export (`/llms-full.txt`) in Chrome-ingebouwde AI, zodat je niet op een specifieke pagina hoeft te staan.
# MQTT (/ontwikkelaars/mqtt)
MQTT-credentials geven integraties pub/sub-toegang binnen de topic-namespace van je organisatie. Credentials maak je aan in Tillor onder **Account > Ontwikkelaars** (per organisatie). Toegang tot topics is strikt beperkt tot `tillor/{env}/{orgId}/integration` en sub-topics (`{env}` = `prod`, `staging` of `local`).
Voor dezelfde realtime events als [webhooks](/ontwikkelaars/webhooks) en [SSE](/ontwikkelaars/sse) gebruik je die kanalen, niet MQTT.
## Beheer [#beheer]
| Method | Pad | Beschrijving |
| ------ | ---------------------------------------------- | ------------------------------------- |
| POST | `/api/orgs/:orgId/mqtt/credentials` | JWT-credentials genereren (tijdelijk) |
| GET | `/api/orgs/:orgId/mqtt/static-credentials` | Statische credentials ophalen |
| POST | `/api/orgs/:orgId/mqtt/static-credentials` | Statische credential aanmaken |
| DELETE | `/api/orgs/:orgId/mqtt/static-credentials/:id` | Statische credential verwijderen |
Authenticatie: `x-api-key` en `X-Tillor-Org-Id` (zelfde als [HTTP API](/ontwikkelaars/http)). Zie de [OpenAPI-specificatie](https://tillor.eu/api/openapi.json) voor volledige request- en response-schema's.
## Credentials [#credentials]
Er zijn twee varianten:
### JWT (tijdelijk) [#jwt-tijdelijk]
* **Gebruik:** Korte sessies, tijdelijke toegang
* **Verloop:** Standaard 1 uur; configureerbaar van 1 minuut tot 24 uur via `expiresInSeconds`
* **Ideaal voor:** Testen, tijdelijke verbindingen, of wanneer je tokens dynamisch ophaalt
* **Aanmaken:** In Tillor onder **Account > Ontwikkelaars**, of via `POST /api/orgs/:orgId/mqtt/credentials` met optioneel `{ "clientId": "...", "expiresInSeconds": 3600 }`
* **Response:** `token` (gebruik als MQTT-wachtwoord), `clientId`, `brokerUrl`, `topicPrefix`, `expiresAt`
* **Gebruikersnaam:** Laat leeg bij verbinden; JWT-auth gebruikt alleen het token als wachtwoord.
* **Client-ID:** Gebruik exact de `clientId` uit de response bij verbinden (inclusief het omgevingsvoorvoegsel, bijv. `prod-`).
Een verbinding naar de broker via **mqtts** controleert het servercertificaat. Gebruik je een **privaat** CA-certificaat (niet de standaard openbare keten), zet dan de PEM van die CA in je client-omgeving (of in je connector-container via `TBMQ_MQTT_CA_PATH`). Zie [Connector](/ontwikkelaars/connector) voor de connector-specifieke variabelen.
### Statische credentials [#statische-credentials]
* **Gebruik:** Langlopende integraties, altijd-on verbindingen
* **Vorm:** Vaste userName, clientId en password
* **Ideaal voor:** Productie-integraties die continu verbonden blijven
* **Aanmaken:** In Tillor onder **Account > Ontwikkelaars**, of via `POST /api/orgs/:orgId/mqtt/static-credentials` met optioneel `{ "name": "mijn-integratie" }`
* **Response:** `userName`, `clientId`, `password` (eenmalig), `topicPrefix`, optioneel `brokerUrl`
* **Let op:** Het wachtwoord wordt eenmalig in de response getoond en kan daarna niet meer worden opgehaald
***
## Topic-toegang [#topic-toegang]
Topic-subscripties zijn **strikt beperkt**. Je kunt alleen publiceren en subscriben op `tillor/{env}/{orgId}/integration` en `tillor/{env}/{orgId}/integration/#`. Pogingen om andere topics te benaderen worden geweigerd.
* **Toegestane topics** - Alleen `tillor/{env}/{orgId}/integration` en sub-topics (bijv. `tillor/{env}/{orgId}/integration/connector/barrier-operation`)
* **Geen wildcard-bypass** - Zelfs met `#` of `+` krijg je alleen toegang tot je organisatie-namespace
* **Per organisatie** - Credentials zijn per organisatie; je hebt geen toegang tot topics van andere organisaties
***
## Gerelateerd [#gerelateerd]
* [OpenAPI](https://tillor.eu/api/openapi.json) - Volledige API-specificatie
* [HTTP API](/ontwikkelaars/http) - REST API en API-sleutels
* [Webhooks](/ontwikkelaars/webhooks) - Zelfde events via HTTP POST
* [SSE](/ontwikkelaars/sse) - Stream events via Server-Sent Events
# Server-Sent Events (SSE) (/ontwikkelaars/sse)
SSE biedt een langlopende stream van dezelfde events die [webhooks](/ontwikkelaars/webhooks) ontvangen. Gebruik SSE wanneer je een persistente verbinding prefereert boven HTTP-callbacks.
## Endpoint [#endpoint]
```
GET /api/orgs/:orgId/realtime/subscribe
```
## Authenticatie [#authenticatie]
SSE gebruikt dezelfde authenticatie als andere API-endpoints:
* **x-api-key** - Jouw API-sleutel
* **X-Tillor-Org-Id** - Organisatie-ID (moet overeenkomen met het pad)
## Event-filtering [#event-filtering]
Gebruik de `events` query-parameter om te filteren op event type:
```
GET /api/orgs/:orgId/realtime/subscribe?events=invoice:created&events=invoice:paid
```
Gebruik `events=*` om alle events te ontvangen (zelfde als parameter weglaten).
Zie [Event types](/ontwikkelaars/webhooks#event-types) voor de volledige lijst.
Tillor levert alleen events waarvoor het ingelogde organisatielid permissie heeft. Zonder `bank-transfers:read` (of sync) krijg je bijvoorbeeld geen `bankAccountTransaction:*` events, ook niet als je geen `events`-filter meestuurt.
***
## Event-formaat [#event-formaat]
De payload heeft dezelfde structuur als [webhook-leveringen](/ontwikkelaars/webhooks#webhook-payload):
| Veld | Type | Beschrijving |
| ----------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ |
| `event` | string | Event key (bijv. `invoice:created`) |
| `data` | object | Event-specifieke payload |
| `timestamp` | number | Unix timestamp (ms) wanneer het event werd uitgezonden |
| `traceId` | string | OpenTelemetry trace-id van de Tillor-actie die dit event veroorzaakte (zelfde als bij [webhooks](/ontwikkelaars/webhooks#webhook-payload)) |
| `spanId` | string (optioneel) | Span binnen die trace |
In de SSE-stream staat dit JSON-object op de `data:`-regel; de event key staat ook op de `event:`-regel. Zie [SSE-voorbeelden](/ontwikkelaars/voorbeelden/sse) voor een wire-voorbeeld.
***
## Voorbeeld: Node.js [#voorbeeld-nodejs]
```javascript
const orgId = "org_abc123";
const apiKey = "tkn_xxx";
const url = `https://app.tillor.eu/api/orgs/${orgId}/realtime/subscribe?events=invoice:created&events=customer:updated`;
const response = await fetch(url, {
headers: {
"x-api-key": apiKey,
"X-Tillor-Org-Id": orgId,
"Accept": "text/event-stream",
},
});
const reader = response.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
const chunk = decoder.decode(value, { stream: true });
for (const line of chunk.split("\n")) {
if (line.startsWith("data: ")) {
const payload = JSON.parse(line.slice(6));
console.log(payload.event, payload.data);
}
}
}
```
***
## Voorbeeld: cURL [#voorbeeld-curl]
```bash
curl -N -H "x-api-key: tkn_xxx" \
-H "X-Tillor-Org-Id: org_abc123" \
-H "Accept: text/event-stream" \
"https://app.tillor.eu/api/orgs/org_abc123/realtime/subscribe"
```
***
## Herverbinding [#herverbinding]
Als de verbinding verbreekt, herverbind met dezelfde URL en headers. De stream ondersteunt geen resumption; je ontvangt alleen nieuwe events na herverbinden.
***
## Gerelateerd [#gerelateerd]
* [OpenAPI](https://tillor.eu/api/openapi.json) - Volledige API-specificatie
* [HTTP API](/ontwikkelaars/http) - API-sleutels en authenticatie
* [Webhooks](/ontwikkelaars/webhooks) - Zelfde events via HTTP POST
* [Voorbeelden](/ontwikkelaars/voorbeelden) - Code- en payload-voorbeelden
# Webhooks (/ontwikkelaars/webhooks)
Webhooks ontvangen realtime events via HTTP POST naar een door jou geconfigureerde URL. Dezelfde events zijn ook beschikbaar via [SSE](/ontwikkelaars/sse). Webhooks zijn **per organisatie** geconfigureerd - elke organisatie heeft zijn eigen webhooks.
## Beheer [#beheer]
Zie de [OpenAPI-specificatie](https://tillor.eu/api/openapi.json) voor volledige request- en response-schema's.
| Method | Pad | Beschrijving |
| ------ | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| GET | `/api/orgs/:orgId/webhooks` | Webhooks ophalen |
| GET | `/api/orgs/:orgId/webhooks/delivery-stats` | Leveringsstatistieken ophalen |
| POST | `/api/orgs/:orgId/webhooks/retry-deliveries` | Leveringen opnieuw proberen. Body: `mode` (`failed` of `force`) en optioneel `id` voor één webhook. `failed`: alleen definitief mislukte leveringen, direct. `force`: wachtende en definitief mislukte leveringen op de achtergrond, negeert wachttijden. |
| GET | `/api/orgs/:orgId/webhooks/:id` | Webhook op ID ophalen |
| POST | `/api/orgs/:orgId/webhooks` | Webhook aanmaken |
| PATCH | `/api/orgs/:orgId/webhooks/:id` | Webhook bijwerken |
| DELETE | `/api/orgs/:orgId/webhooks/:id` | Webhook verwijderen |
## Webhook aanmaken [#webhook-aanmaken]
```http
POST /api/orgs/org_abc123/webhooks
Content-Type: application/json
x-api-key: tkn_xxx
X-Tillor-Org-Id: org_abc123
```
```json
{
"url": "https://jouw-server.com/webhooks/tillor",
"subscribedEventKeys": ["invoice:created", "invoice:paid", "customer:updated"],
"enabled": true
}
```
* **url** - HTTPS-endpoint die POST-requests accepteert
* **subscribedEventKeys** - Array van event keys of `["*"]` voor alle events. De volledige lijst staat in Tillor onder **Profielmenu → Ontwikkelaars** bij **Webhook toevoegen** → **Geabonneerde gebeurtenissen**.
* **enabled** - `true` om levering in te schakelen
Je mag alleen events kiezen waarvoor je organisatielid de juiste permissie heeft (bijv. bankoverschrijvingen voor `bankAccountTransaction:*`). Wildcard `*` is alleen beschikbaar voor leden met volledige toegang (`*`). Bij een ongeldige combinatie geeft de API een foutmelding.
***
## Webhook-payload [#webhook-payload]
Elke webhook-levering is een POST met:
**Headers:**
* `Content-Type: application/json`
* `X-Webhook-Event-ID` - stabiele unieke ID voor deze logische levering (zelfde waarde bij retries)
* `X-Webhook-Signature` - HMAC-SHA256 handtekening van de body, formaat `sha256=` (zie [Handtekening verifiëren](#handtekening-verifiëren))
**Body:**
```json
{
"event": "invoice:created",
"data": {},
"timestamp": 1735689600000,
"traceId": "4bf92f3577b34da6a3ce929d0e0e4736",
"spanId": "00f067aa0ba902b7"
}
```
| Veld | Type | Beschrijving |
| ----------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------- |
| `event` | string | Event key (bijv. `invoice:created`) |
| `data` | object | Event-specifieke payload |
| `timestamp` | number | Unix timestamp (ms) wanneer het event werd uitgezonden |
| `traceId` | string | OpenTelemetry trace-id van de Tillor-actie die dit event veroorzaakte. Geef deze door bij support; het is geen geheim. |
| `spanId` | string (optioneel) | Span binnen die trace |
Zie [Voorbeelden](/ontwikkelaars/voorbeelden) voor volledige payload-voorbeelden.
***
## Handtekening verifiëren [#handtekening-verifiëren]
Elke webhook bevat een eigen **signing secret** (64 hex-karakters, zichtbaar in de webhooktabel via **Ondertekeningssleutel tonen** op *Profielmenu → Ontwikkelaars*). Tillor ondertekent elke POST met die secret zodat jij kunt verifiëren dat het verzoek écht van Tillor komt en dat de body niet is aangepast.
**Hoe Tillor ondertekent:**
1. Bereken `HMAC-SHA256(signingSecret, raw_request_body)` (lowercase hex).
2. Stuur dat als `X-Webhook-Signature: sha256=`.
**Hoe jij verifieert:**
1. Lees de **ruwe** request-body (vóór JSON-parsen - anders matcht de hash niet).
2. Bereken zelf `HMAC-SHA256(signingSecret, raw_body)` in hex.
3. Vergelijk met de waarde achter `sha256=` uit de `X-Webhook-Signature` header met een **constant-time** vergelijking.
```js
import crypto from "node:crypto";
function verifyTillorWebhook(rawBody, headerSignature, signingSecret) {
const expected = crypto.createHmac("sha256", signingSecret).update(rawBody).digest("hex");
const received = headerSignature.replace(/^sha256=/, "");
const a = Buffer.from(expected, "hex");
const b = Buffer.from(received, "hex");
return a.length === b.length && crypto.timingSafeEqual(a, b);
}
```
De signing secret kun je in Tillor tonen via **Ondertekeningssleutel tonen** in de webhooktabel. Sla 'm op als secret (env var, vault) en log 'm nooit. Vermoed je een lek? Verwijder de webhook en maak een nieuwe aan; daarmee krijg je een nieuwe secret.
***
## Leveringsgedrag en retries [#leveringsgedrag-en-retries]
* Antwoord met een **2xx-status** om succes te bevestigen.
* Bij een mislukte levering (niet-2xx, netwerkfout of geblokkeerd doel) probeert Tillor de levering automatisch opnieuw met steeds langere tussenpozen. Elke poging hergebruikt dezelfde payload, dezelfde handtekening en hetzelfde event-id (idempotent).
| Poging | Wachttijd sinds vorige poging |
| ------ | ----------------------------- |
| 1 | direct |
| 2 | 1 seconde |
| 3 | 2 seconden |
| 4 | 4 seconden |
| 5 | 8 seconden |
| 6 | 5 minuten |
| 7 | 30 minuten |
| 8 | 2 uur |
| 9 | 6 uur |
| 10 | 24 uur |
* Slaagt één van de pogingen (2xx) → de levering is afgerond.
* Slaagt ook poging 10 (na 24u) niet → de levering wordt **definitief gemarkeerd als mislukt** en niet verder geprobeerd.
* Wordt de webhook intussen **uitgeschakeld**, dan stopt Tillor met opnieuw proberen.
Elke retry hergebruikt dezelfde `X-Webhook-Event-ID` en `X-Webhook-Signature`. Dedupliceer aan jouw kant op die header zodat een succesvolle retry na een trage 200 geen dubbele verwerking veroorzaakt.
### Meldingen bij aanhoudende fouten [#meldingen-bij-aanhoudende-fouten]
Als leveringen voor een webhook-endpoint blijven mislukken, stuurt Tillor **maximaal twee meldingen per incident** (per endpoint):
1. **Na 5 minuten aanhoudende fouten** - e-mail naar het organisatie-e-mailadres (`supportEmail`, anders `email`) en naar organisatieleden met rechten om organisatie-instellingen te wijzigen, plus push (indien ingeschakeld) voor die leden. De e-mail vermeldt sinds wanneer de leveringen mislukken. Datums in de e-mail gebruiken de **tijdzone** uit *Instellingen > Algemeen* (standaard `Europe/Brussels`).
2. **Bij definitieve mislukking** - dezelfde ontvangers krijgen één melding wanneer het eerste event in dat incident na alle pogingen definitief mislukt is gemarkeerd.
Je krijgt **geen** melding per mislukt event. Zodra alle mislukte leveringen voor een endpoint zijn opgelost (succesvol afgeleverd), start een volgend incident opnieuw met dezelfde regels.
Op **Profielmenu → Ontwikkelaars** toont de webhooktabel per endpoint een compacte leveringsstatus (aantallen wachtend op opnieuw proberen en definitief mislukt). Klik op het **ℹ**-icoon voor details, inclusief de volledige foutmelding en de payload van de meest recente poging.
* **Mislukte opnieuw proberen** (↻): alleen definitief mislukte leveringen voor die webhook.
* **Forceer opnieuw proberen** (⚡): alle wachtende én definitief mislukte leveringen voor die webhook, ongeacht geplande wachttijden. Tillor start dit op de achtergrond zodat grote wachtrijen (bijv. duizenden events) veilig verwerkt worden.
* **Alles forceer opnieuw proberen** rechtsboven naast **Webhook toevoegen**: hetzelfde voor alle ingeschakelde webhooks in de organisatie.
***
## Event types [#event-types]
Event keys gebruiken het formaat `entity:action` of `entity:subresource:action`. Hieronder de volledige lijst; dezelfde keys staan in Tillor onder [Profielmenu → Ontwikkelaars](https://tillor.eu/orgs/org_abc123/developers) bij **Webhook toevoegen** → **Geabonneerde gebeurtenissen**.
| Event Key | Beschrijving |
| ------------------------------------------ | ------------------------------------------------------------ |
| `*` (wildcard) | Alle events (alleen met volledige org-permissie) |
| `accessLogEntry:coupled` | Toegangslog-entry gekoppeld aan klant of toegangsmethode |
| `accessLogEntry:processed` | Toegangslog-entry verwerkt |
| `accessMethod:created` | Toegangsmethode aangemaakt |
| `accessMethod:deleted` | Toegangsmethode verwijderd |
| `accessMethod:updated` | Toegangsmethode bijgewerkt |
| `accessMethodOperation:created` | Toegangsmethode-operatie aangemaakt |
| `accessMethodOperation:updated` | Toegangsmethode-operatie bijgewerkt |
| `barrier:created` | Barrière aangemaakt |
| `barrier:deleted` | Barrière verwijderd |
| `barrier:updated` | Barrière bijgewerkt |
| `bankAccountTransaction:imported` | Banktransacties geïmporteerd of gesynchroniseerd |
| `call:created` | Gesprek aangemaakt |
| `call:updated` | Gesprek bijgewerkt |
| `comment:created` | Reactie aangemaakt |
| `comment:deleted` | Reactie verwijderd |
| `comment:mentioned` | Gebruiker genoemd in reactie |
| `comment:pinned` | Reactie vastgepind |
| `comment:resolved` | Reactie opgelost |
| `comment:updated` | Reactie bijgewerkt |
| `controller:adoption:approved` | Controller-adoptie goedgekeurd |
| `controller:adoption:rejected` | Controller-adoptie afgewezen |
| `controller:adoption:requested` | Controller-adoptie aangevraagd |
| `controller:created` | Controller aangemaakt |
| `controller:deleted` | Controller verwijderd |
| `controller:logs:submitted` | Controller-logs ingediend |
| `controller:updated` | Controller bijgewerkt |
| `customer:contact:created` | Klantcontact aangemaakt |
| `customer:contact:deleted` | Klantcontact verwijderd |
| `customer:contact:updated` | Klantcontact bijgewerkt |
| `customer:created` | Klant aangemaakt |
| `customer:deleted` | Klant verwijderd |
| `customer:updated` | Klant bijgewerkt |
| `document:created` | Document aangemaakt |
| `document:deleted` | Document verwijderd |
| `document:updated` | Document bijgewerkt |
| `event-log:created` | Eventlog-entry aangemaakt |
| `event-log:updated` | Eventlog bijgewerkt |
| `identityDocumentScan:completed` | Identiteitsdocument-scan voltooid |
| `identityDocumentScan:deleted` | Identiteitsdocument-scan verwijderd |
| `identityDocumentScan:linked` | Identiteitsdocument-scan gekoppeld aan klant |
| `identityDocumentScan:pendingQueueChanged` | Wachtrij met openstaande scans gewijzigd |
| `identityDocumentScan:unlinked` | Identiteitsdocument-scan ontkoppeld van klant |
| `inbox:message-created` | Nieuw inbox-bericht (inkomend of uitgaand) |
| `inbox:thread-updated` | Inbox-gesprek bijgewerkt (preview, archief, laatste bericht) |
| `invoice:created` | Factuur aangemaakt |
| `invoice:deleted` | Factuur verwijderd |
| `invoice:paid` | Factuur betaald |
| `invoice:updated` | Factuur bijgewerkt |
| `mandate:created` | Machtiging aangemaakt |
| `mandate:deleted` | Machtiging verwijderd |
| `mandate:updated` | Machtiging bijgewerkt |
| `meter-alarm:created` | Meteralarm aangemaakt |
| `meter-alarm:resolved` | Meteralarm opgelost |
| `meter:updated` | Meter bijgewerkt |
| `nfc-tag:blocked` | NFC-tag geblokkeerd |
| `nfc-tag:presented` | NFC-tag gepresenteerd |
| `nfc-tag:unblocked` | NFC-tag gedeblokkeerd |
| `nfc-tag:updated` | NFC-tag bijgewerkt |
| `notification-delivery:updated` | Notificatielevering bijgewerkt |
| `payment-group:assigned-to-invoice` | Betalingsgroep aan factuur gekoppeld |
| `payment-group:created` | Betalingsgroep aangemaakt |
| `payment-group:deleted` | Betalingsgroep verwijderd |
| `payment-group:payments-added` | Betalingen toegevoegd aan betalingsgroep |
| `payment-group:payments-removed` | Betalingen verwijderd uit betalingsgroep |
| `payment-group:unassigned-from-invoice` | Betalingsgroep ontkoppeld van factuur |
| `payment-group:updated` | Betalingsgroep bijgewerkt |
| `payment-report:updated` | Betalingsrapport bijgewerkt |
| `payment:created` | Betaling aangemaakt |
| `payment:deleted` | Betaling verwijderd |
| `payment:updated` | Betaling bijgewerkt |
| `img:clear-tablet` | Afbeelding gewist van tablet |
| `img:to-tablet` | Afbeelding naar tablet verzonden |
| `pdf:clear-tablet` | PDF gewist van tablet |
| `pdf:to-tablet` | PDF naar tablet verzonden |
| `print-queue-job:updated` | Printwachtrijtaak bijgewerkt |
| `reservation:created` | Reservering aangemaakt |
| `reservation:updated` | Reservering bijgewerkt |
| `terrain:updated` | Terrein bijgewerkt |
***
## Webhooks vs SSE [#webhooks-vs-sse]
| Use case | Aanbeveling |
| --------------------------------------- | -------------------------------------------------------------------------------- |
| Server-side integratie | **Webhooks** - Jouw server ontvangt POSTs |
| Eenvoudige logging | **Webhooks** - Minimale setup |
| Realtime dashboard, live updates in app | [SSE](/ontwikkelaars/sse) - Eén verbinding, lage latentie. |
| Veel event types, client-side filteren | [SSE](/ontwikkelaars/sse) - Gebruik `events` query-param om verkeer te beperken. |
***
## Gerelateerd [#gerelateerd]
* [OpenAPI](https://tillor.eu/api/openapi.json) - Volledige API-specificatie
* [HTTP API](/ontwikkelaars/http) - REST API en API-sleutels
* [SSE](/ontwikkelaars/sse) - Zelfde events via Server-Sent Events
# Contant (/betalingsverwerking/contant)
Met de betaalmethode **Contant** of **Overschrijving** registreer je handmatig dat een klant heeft betaald. Dit is voor situaties waar de betaling buiten Tillor om plaatsvond (geld aan de balie, bankoverschrijving ontvangen, etc.).
## Betaling registreren [#betaling-registreren]
Open een geboekte factuur met openstaand saldo en klik op **Maak betaling**:
1. **Betaalmethode** - kies **Contant** of **Overschrijving**
2. **Bedrag** - typ een vrij bedrag of gebruik de percentageknoppen (25%, 50%, 75%, 100%)
3. **Datum van ontvangst** - standaard vandaag; pas aan als het geld op een andere dag binnenkwam
4. **Opmerking** - optioneel, bijvoorbeeld een referentienummer of notitie
Klik op **Voer betaling uit**.
## Wanneer gebruiken [#wanneer-gebruiken]
* **Contant**: klant betaalt cash aan de balie
* **Overschrijving**: je hebt een bankoverschrijving ontvangen maar die werd niet automatisch gekoppeld via bankrekeningen
De datum bepaalt op welk betalingsrapport de betaling terechtkomt. Registreer je vandaag een betaling van gisteren, zet dan de datum op gisteren zodat het juiste rapport wordt aangevuld.
# Betalingsgroepen (/betalingsverwerking/groepen)
Betalingsgroepen bundelen meerdere binnenkomende betalingen onder een label, zodat ze in een keer aan een geboekte factuur gekoppeld kunnen worden. Handig voor POS-shifts, tafelbetalingen, activiteiten met meerdere deelnemers, of situaties waar je pas op het einde van de dag of het event wil afpunten.
## Wanneer gebruiken [#wanneer-gebruiken]
* **POS-shift afsluiten**: alle terminal-betalingen van de dag zitten in een groep, je koppelt ze aan de dag-omzetfactuur.
* **Activiteit factureren**: deelnemers betalen vooraf via Mollie; bij booking koppel je de hele groep aan de uiteindelijke factuur.
* **Reservering met aanbetaling en saldo**: aanbetaling en eindbetaling samen in een groep, in een keer toegewezen.
## Belangrijkste regels [#belangrijkste-regels]
* Een groep heeft een **status**: *Open* (nog niet aan een factuur gekoppeld) of *Toegewezen* (al gekoppeld).
* Een groep heeft **geen eigen klant**. De klant wordt afgeleid van de gekoppelde factuur op het moment van toewijzing.
* Betalingen binnen een groep worden **alleen in groep** verplaatst. Je kan een individuele betaling die in een groep zit niet apart aan een andere factuur hangen; je werkt altijd op het groepsniveau.
* Je kan een groep enkel koppelen aan een **geboekte factuur**. Conceptfacturen zijn uitgesloten omdat ze nog kunnen wijzigen of verdwijnen.
## Een groep aanmaken en koppelen [#een-groep-aanmaken-en-koppelen]
1. Ga naar **Administratie > Betalingen**.
2. Onder *Betalingsgroepen* staat de lijst standaard gefilterd op status *Open* (nog niet aan een factuur gekoppeld). Pas het filter **Status** aan om ook *Toegewezen* groepen te zien.
3. Klik bij een open groep in het actiemenu (drie stippjes) op **Koppelen**.
4. Kies de factuur waaraan je de hele groep wil hangen.
5. Klik **Koppelen** in de pop-up. Alle betalingen in de groep worden in een actie toegewezen aan die factuur en de groep krijgt status *Toegewezen*.
Bevat een groep minstens een **Mollie**-betaling met een gekende transactie-id, dan vind je **Synchroniseren** naast **Koppelen** in hetzelfde menu. Die actie vraagt in een keer een refresh voor alle geschikte betalingen in die groep bij de betaalpartner - handig bij twijfel of een gemiste webhook.
## Hoe komen betalingen in een groep terecht? [#hoe-komen-betalingen-in-een-groep-terecht]
**Automatisch via Mollie-metadata**: jouw POS- of activiteiten-software kan bij het aanmaken van een Mollie-betaling al een `tillor.paymentGroupName` of `tillor.paymentGroupExternalId` meegeven. Tillor maakt dan bij ingestie automatisch een groep aan (of hergebruikt een bestaande open groep) en plaatst de betaling erin. Zie [Mollie-metadata](/boekhouden/betalingsrapporten/betaalmethodes/mollie#ingestie-hints-voor-betalingsgroepen).
Een toegewezen groep wordt op de factuur-PDF als een regel getoond met het totaal van de groep. De individuele betalingen klap je open in het betalingsoverzicht van de factuur.
# Overzicht (/betalingsverwerking)
Tillor ondersteunt verschillende manieren om betalingen te verwerken en te registreren.
Betalingsrapporten en integratie met boekhoudsoftware worden apart beschreven in de [Boekhouden](/boekhouden)-module.
## Betalingen registreren [#betalingen-registreren]
Op een geboekte factuur met openstaand saldo:
1. Open de factuur (*Administratie > Facturen* of *Klanten > \[klant] > Facturatie*)
2. Klik op **Maak betaling** (markering **2**)
3. Kies een betaalmethode (zie de subpagina's hieronder)
4. Vul **Bedrag** in (standaard het openstaande bedrag; snelknoppen 25-100%) of typ een vrij bedrag
5. Bij handmatige methoden: optioneel **Datum van ontvangst** en **Opmerking**
6. Klik op **Voer betaling uit**
Na verwerking worden het openstaande bedrag en de betalingsstatus van de factuur bijgewerkt. De betaling verschijnt op de factuur onder **Betalingen** en in *Administratie > Betalingen*.
## Betalingsgeschiedenis bekijken [#betalingsgeschiedenis-bekijken]
### Per factuur [#per-factuur]
Open de factuur en scroll naar de sectie **Betalingen** (betalingen gekoppeld aan die factuur).
### Overzicht van alle betalingen [#overzicht-van-alle-betalingen]
Ga naar **Administratie > Betalingen**.
Je ziet een lijst met alle betalingen. Filter op datum, betaalmethode, status of klant, of zoek op klantnaam of factuurnummer.
Op **Mollie**-betalingen met een gekende transactie-id zie je in het actiemenu (drie stippjes) **Synchroniseren**. Tillor haalt daarmee de actuele status en gegevens op bij de betaalpartner - handig bij twijfel of bij een gemiste webhook.
## Openstaande bedragen [#openstaande-bedragen]
Ga naar **Administratie > Facturen**. Op het overzicht staat de kaart **Facturen met openstaand saldo** (geboekte facturen die nog niet volledig betaald zijn).
In tabellen kun je filteren op betalingsstatus **Openstaand** en sorteren op kolommen zoals vervaldatum.
### Aanmaningen versturen [#aanmaningen-versturen]
Per factuur (niet bulk):
1. Open de factuur
2. Klik **Verstuur notificatie** en kies **Verstuur aanmaning** (beschikbaar zolang de factuur openstaat)
3. De klant ontvangt een herinnering per e-mail of SMS, met link om online te betalen
# Interne overboeking (/betalingsverwerking/interne-overboeking)
Met **Interne overboeking** verplaats je een openstaand bedrag van de ene factuur naar een andere **geboekte** factuur van **dezelfde klant**. Tillor maakt een positieve betaling op de factuur die je betaalt en een gekoppelde negatieve betaling op de doelfactuur.
Dit is geen contante betaling, pin of bankoverschrijving - die methodes staan apart in het betalingsscherm.
## Betaling registreren [#betaling-registreren]
Open een geboekte factuur met openstaand saldo en klik op **Maak betaling**:
2. **Betaalmethode** - kies **Interne overboeking**.
3. **Doel factuur** - selecteer de geboekte factuur waarnaar het bedrag wordt overgeboekt. Alleen geboekte facturen van dezelfde klant verschijnen in de lijst.
4. **Bedrag** - typ een vrij bedrag of gebruik de percentageknoppen (25%, 50%, 75%, 100%) om snel een deel van het openstaande saldo in te vullen.
Vul optioneel **Datum van ontvangst** in en klik op **Voer betaling uit**.
## Wat gebeurt er? [#wat-gebeurt-er]
* Tillor maakt twee gekoppelde betalingen: *Interne overboeking van ...* en *Interne overboeking naar ...* (met het factuurnummer van de andere factuur).
* Verwijder je een van de gekoppelde betalingen, dan verwijdert Tillor de andere ook.
* Het openstaande saldo van beide facturen wordt bijgewerkt.
## In betalingsrapporten [#in-betalingsrapporten]
* Betalingen met methode **Interne overboeking** staan op het Tillor-betalingsrapport van de dag waarop je ze registreert (Brussel).
* Ze gaan **wel** mee naar de boekhoudexport, samen met Mollie-betalingen.
* Handmatige methodes (contant, overschrijving) en bankrekeningen gaan **niet** mee naar de boekhoudexport.
# SEPA Mandaat (/betalingsverwerking/mandaat)
Met een **SEPA Mandaat** (domiciliering) incasseer je automatisch van de bankrekening van een klant. Tillor stuurt het incasso-verzoek via Mollie.
## Mandaat aanmaken [#mandaat-aanmaken]
1. Ga naar *Klanten > \[klant] > Facturatie*
2. In de sectie **Mandaten**, klik op **Mandaat aanmaken**
3. Kies een methode:
* **Online** - klant tekent digitaal via Mollie (klant moet een e-mailadres hebben)
* **Manueel IBAN** - vul het IBAN zelf in
Mandaten hebben een van deze statussen:
| Status | Betekenis |
| -------------- | ------------------------------------ |
| In behandeling | Wacht op ondertekening door de klant |
| Actief | Bruikbaar voor incasso |
| Inactief | Tijdelijk niet bruikbaar |
| Geannuleerd | Definitief ongeldig |
Alleen **Actieve** mandaten zijn bruikbaar voor incasso.
## Incasso uitvoeren [#incasso-uitvoeren]
1. Open de geboekte factuur
2. Klik **Maak betaling**
3. Kies **SEPA Mandaat** en selecteer een actief mandaat (max. 1.000 euro per domiciliering)
4. Klik **Voer betaling uit**
De betaling volgt daarna de normale betalingsstatussen (In behandeling, Betaald, Mislukt).
## Terugkerende incasso's [#terugkerende-incassos]
Voor maandelijkse of periodieke facturen:
1. Maak eenmalig een **Actief** mandaat aan onder *Klanten > \[klant] > Facturatie*
2. Genereer en boek de periodieke factuur
3. **Maak betaling** > **SEPA Mandaat** > **Voer betaling uit**
4. Volg de status tot **Betaald** (of **Mislukt** bij weigering)
# Online betalen (/betalingsverwerking/online)
Bij online betalen stuurt Tillor de klant naar een beveiligde betaalpagina van [Mollie](https://www.mollie.com). De klant kiest uit beschikbare methoden zoals **iDEAL | Wero**, creditcard (Visa, Mastercard) en **Bancontact**.
## Klant uitnodigen om online te betalen [#klant-uitnodigen-om-online-te-betalen]
Er is geen aparte knop "Betaallink versturen". Online betalen loopt via de persoonlijke factuur-URL:
1. Open de geboekte factuur
2. Stuur een notificatie via **Verstuur notificatie** (e-mail of SMS). De klant krijgt een link **Bekijk en betaal online**
3. Of kopieer de **Persoonlijke URL** via het actiemenu (drie stippjes) op de factuur
## Wat ziet de klant? [#wat-ziet-de-klant]
1. Overzicht van de factuur (bedrag, vervaldatum, openstaand saldo)
2. Keuze van een online betaalmethode
3. Beveiligde betaalpagina (Mollie)
4. Na een geslaagde betaling: bevestiging en een e-mail **Factuur betaald**
## Betalingsstatus volgen [#betalingsstatus-volgen]
Op betalingen en facturen zie je dezelfde statuslabels als in de app:
| Status | Betekenis |
| ---------------------------------------- | ------------------ |
| In behandeling / Geautoriseerd | Betaling loopt nog |
| Betaald | Succesvol afgerond |
| Mislukt / Geannuleerd / Verlopen | Niet geslaagd |
| Terugbetaald / Gedeeltelijk terugbetaald | Terugbetaling |
## Voorbeeld: online betaling [#voorbeeld-online-betaling]
1. Boek de factuur en stuur **Verstuur notificatie** (of deel de **Persoonlijke URL**)
2. De klant betaalt via **Bekijk en betaal online**
3. Tillor verwerkt de Mollie-webhook; de betaling verschijnt op de factuur en onder *Administratie > Betalingen*
# Terminal (/betalingsverwerking/terminal)
Met de betaalmethode **Terminal** stuur je een betaalverzoek naar een fysieke pinterminal aan de balie. Tillor werkt samen met [Mollie](https://www.mollie.com) voor POS-betalingen.
## Betaling registreren [#betaling-registreren]
Open een geboekte factuur met openstaand saldo en klik op **Maak betaling**:
2. **Betaalmethode** - kies **Terminal** om het verzoek naar de pinterminal aan de balie te sturen. Andere opties: Interne overboeking, Contant of Overschrijving.
3. **Terminal** - selecteer de [Mollie](https://www.mollie.com)-terminal aan je balie. Tillor toont alleen terminals die op dat moment actief zijn. Heb je er maar een, dan is die al geselecteerd.
4. **Bedrag** - typ een vrij bedrag of gebruik de percentageknoppen (25%, 50%, 75%, 100%) om snel een deel van het openstaande saldo in te vullen. Handig bij aanbetalingen of als de gast een deel cash en een deel met pin wil betalen.
Klik op **Voer betaling uit**.
## Wat gebeurt er daarna? [#wat-gebeurt-er-daarna]
Tillor toont real-time status terwijl de terminal wacht op pin, kaart of contactloos betalen. Na een geslaagde betaling werkt het openstaande saldo automatisch bij - net als bij online betalingen via [iDEAL](https://www.mollie.com/payments/ideal) of [Bancontact](https://www.mollie.com/payments/bancontact).
## Terminal instellen [#terminal-instellen]
Terminals worden geconfigureerd via de Mollie-integratie in **Instellingen > App Marketplace > Mollie**. Zorg dat de terminal online en actief is voordat je een betaling start.
# E-mails (/communicatie/e-mails)
De meeste e-mails in Tillor verstuur je **handmatig** - jij bepaalt wanneer de klant iets ontvangt. Sommige e-mails kunnen op aanvraag worden geautomatiseerd.
## Wanneer worden e-mails verstuurd? [#wanneer-worden-e-mails-verstuurd]
### Handmatige e-mails (standaard) [#handmatige-e-mails-standaard]
| Actie | E-mail aan klant |
| ------------------------------- | ------------------------------------ |
| Notificatie versturen (factuur) | Nieuwe factuur als PDF-bijlage |
| Aanmaning versturen | Herinnering voor openstaande factuur |
### Altijd automatisch [#altijd-automatisch]
| Gebeurtenis | E-mail aan klant |
| -------------------- | ------------------------------ |
| Nieuw Tillor-account | Welkomstmail na accountaanmaak |
Wil je dat factuurmeldingen of andere berichten automatisch worden verstuurd na bepaalde acties? Neem dan contact op met Tillor-support om dit in te schakelen voor jouw organisatie.
## Handmatig een e-mail versturen [#handmatig-een-e-mail-versturen]
Screenshots met een **ℹ**-icoon hebben extra uitleg als je erover beweegt.
### Vanuit een factuur [#vanuit-een-factuur]
1. Open de factuur via **Administratie > Facturen**
2. Klik op **Verstuur notificatie**
3. Kies **E-mail** (markering **2**) en optioneel **SMS** (markering **3**) in het bevestigingsvenster
4. Klik op **Versturen**
Voor een aanmaning: klik op het pijltje naast **Verstuur notificatie** en kies **Verstuur aanmaning**. Bevestig opnieuw het kanaal en klik **Versturen**.
## E-mails controleren [#e-mails-controleren]
Verstuurde e-mails kun je terugvinden en controleren via **Communicatie > Notificaties**. Hier zie je de bezorgstatus van elke e-mail.
# Overzicht (/communicatie)
De communicatiemodule bundelt telefoongesprekken, verzonden berichten en interne opmerkingen. Bekijk het gesprekslogboek via **Communicatie > Telefoongesprekken**, volg notificaties en werk samen via opmerkingen op records.
## Onderdelen [#onderdelen]
# Telefoongesprekken (/communicatie/telefoongesprekken)
Gebruik **Communicatie > Telefoongesprekken** om gesprekken op te volgen en snel vervolgacties te nemen.
## Organisatiegegevens via sms versturen [#organisatiegegevens-via-sms-versturen]
Tijdens een lopend telefoongesprek (status *In gesprek*) kun je organisatiegegevens direct naar de beller sturen via sms. De actie staat op het actieve-gesprekkenpaneel rechtsonder, niet in de gesprekkenlijst op **Communicatie > Telefoongesprekken**.
1. Wacht tot het gesprek de status *In gesprek* heeft. Het paneel rechtsonder toont het actieve gesprek (op mobiel: tik eerst op het telefoonpictogram rechtsboven).
2. Vouw het gesprek uit als het is ingeklapt.
3. Klik op het berichtenpictogram (tooltip: **Stuur organisatiegegevens naar de beller via SMS**).
4. Kies de taal van de sms. Tillor markeert de gedetecteerde taal met *(gedetecteerd)*.
De sms bevat een korte link naar een publieke organisatiepagina met contactgegevens. Bij het adres staan directe navigatielinks voor **Waze**, **Google Maps** en **Apple Maps** (alleen wanneer het organisatieadres is ingevuld).
Op de pagina:
* krijgt de e-mailknop automatisch een vooraf ingevuld onderwerp en berichttekst
* worden het telefoonnummer en tijdstip van het gesprek, indien beschikbaar, meegenomen in de e-mailtekst
* krijgt de websitelink tracking-tags (`utm_source`, `utm_medium`, `utm_campaign`) zodat klikken op de website gemeten kunnen worden
# BTW & Belasting (/boekhouden/belasting)
De belastingmodule beheert de BTW-configuratie voor je facturen en valideert BTW-nummers van klanten via VIES.
## BTW-tarieven [#btw-tarieven]
BTW-tarieven worden ingesteld per product. Ga naar **Administratie > Producten** en open een product om het **BTW %** te kiezen uit de beschikbare tarieven (standaard 0%, 6%, 9%, 12% en 21%).
## BTW-nummer validatie [#btw-nummer-validatie]
Wanneer je een BTW-nummer invoert op het klantprofiel, controleert Tillor dit automatisch via de Europese VIES-dienst zodra het land is ingevuld.
### Hoe het werkt [#hoe-het-werkt]
1. Open **Klanten > klant** (sectie **Klantgegevens**)
2. Stel het **land** in en voer het BTW-nummer in (bijv. `NL123456789B01` of `BE0123456789`)
3. Tillor valideert het nummer automatisch (na een korte pauze)
4. Bij een geldig BTW-nummer verschijnt een groen vinkje; klik erop voor bedrijfsgegevens uit VIES
5. Wil je naam en adres overnemen? Klik op **Bedrijfsadres toepassen** in dat venster (bedrijfsnaam komt in het veld voornaam)
6. Bij een ongeldig BTW-nummer verschijnt een rood icoon met uitleg
BTW-validatie werkt voor alle EU-landen. Voor niet-EU bedrijven kun je het BTW-nummer handmatig invoeren zonder validatie.
### Ondersteunde landen [#ondersteunde-landen]
De validatie ondersteunt alle EU-lidstaten, waaronder Nederland (NL), België (BE), Duitsland (DE), Frankrijk (FR) en alle andere EU-landen.
## Belgische klanten en Peppol [#belgische-klanten-en-peppol]
Voor Belgische klanten met een BTW-nummer moet een **Peppol ID** staan op het tabblad **Facturatie** voordat je facturen kunt boeken. Dit is wettelijk verplicht voor B2B-facturering in België.
Zie de [Peppol-documentatie](/boekhouden/peppol) voor meer informatie.
## BTW op facturen [#btw-op-facturen]
Alle factuurregels tonen automatisch het juiste BTW-tarief op basis van het gekoppelde product. Op de factuur zie je **Subtotaal**, **BTW** en **Totaal**; op de factuur-PDF staat daarnaast een overzicht per BTW-tarief.
Heb je rechten om organisatie-instellingen te wijzigen? Ga naar **Instellingen**, open het dialoog met de knop **Instellingen** in de paginakop en schakel **BTW-tarief dropdown op conceptfactuurregels** in. Op **conceptfacturen** verschijnt dan een kolom om het tarief per regel te kiezen (opties volgen de voor jullie organisatie geconfigureerde tarieven). Bij het selecteren van een product blijft het standaardtarief uit het product de startwaarde.
# Overzicht (/boekhouden)
De boekhoudmodule koppelt betalingen uit Tillor aan je boekhoudsoftware. Dagelijkse betalingsrapporten worden automatisch gegenereerd en kunnen naar je boekhoudpakket worden gestuurd.
## Wat doet het? [#wat-doet-het]
* **Betalingsrapporten**: dagelijkse overzichten (`PAYR/YYYY/DDD`), gegenereerd werkdagen om 09:00 (Europa/Brussel)
* **Boekhoudsystemen**: integratie met Admisol; Odoo voor klanten en facturen (betalingsrapporten Odoo volgen later)
* **Betaalmethodes**: Mollie, bankrekeningen, interne overboekingen
## Flow [#flow]
Alleen **Mollie** en **interne overboekingen** worden naar de boekhouding gestuurd. **Bankrekeningen** staan wel op het Tillor-rapport (voor overzicht), maar niet in de boekhoudexport.
**Voorbeeld:** omzet **20 mei** → settlement **21 mei** → rapport **`PAYR/2026/140` (20 mei)**. Details: [Mollie-voorbeelden](/boekhouden/betalingsrapporten/betaalmethodes/mollie#voorbeelden).
In Tillor zie je betalingen en facturen in de webapp zoals hieronder. De boekhoudexport pakt alleen de Mollie- en interne-overboekingstromen mee (zie callout hierboven).
# Peppol (/boekhouden/peppol)
Peppol is een Europees netwerk voor elektronische facturering (e-facturering). Via Peppol verstuur je facturen rechtstreeks naar het boekhoudsysteem van de ontvanger, zonder dat je een PDF hoeft te sturen.
## Wanneer gebruik je Peppol? [#wanneer-gebruik-je-peppol]
Peppol is verplicht voor:
* **Belgische B2B-facturen** - het versturen van facturen aan Belgische bedrijven met een BTW-nummer
* **Overheidsopdrachten** - facturering aan overheidsinstanties in de meeste EU-landen
Voor Nederlandse klanten is Peppol optioneel maar ondersteund.
Vanaf 2026 is Peppol verplicht voor alle B2B-facturen in België. Zorg dat de Peppol-ID's van je Belgische klanten correct zijn ingesteld.
## Peppol instellen [#peppol-instellen]
### Peppol voor je organisatie [#peppol-voor-je-organisatie]
Peppol gebruikt het **BTW-nummer** en **adres** van je organisatie. Controleer dat deze gegevens correct staan in **Instellingen**.
Bij de eerste Peppol-verzending registreert Tillor je organisatie automatisch als afzender in het Peppol-netwerk.
Neem contact op met Tillor-support als Peppol nog niet beschikbaar is voor je organisatie.
### Peppol-ID instellen voor een klant [#peppol-id-instellen-voor-een-klant]
Voor elke klant aan wie je via Peppol wilt factureren:
1. Ga naar *Klanten > \[klant] > Facturatie*
2. Open **Instellingen Facturatie**
3. Voer het **Peppol ID** in, of kies een ontvanger via het zoekpictogram
4. Klik op **Opslaan**
Heb je een Belgische klant met een BTW-nummer? Dan kun je geen factuur boeken zolang er geen Peppol ID is ingesteld.
## Een Peppol-ontvanger opzoeken [#een-peppol-ontvanger-opzoeken]
Weet je het Peppol ID van een klant niet? Gebruik het zoekpictogram links van het veld:
1. Ga naar *Klanten > \[klant] > Facturatie*
2. Klik op het zoekpictogram links van **Peppol ID**
3. Tillor zoekt automatisch op basis van het BTW-nummer van de klant
4. Selecteer de juiste ontvanger uit de resultaten
Niet alle bedrijven zijn geregistreerd in het Peppol-netwerk. Als een bedrijf niet gevonden wordt, kun je de factuur nog steeds per e-mail versturen.
## Facturen via Peppol versturen [#facturen-via-peppol-versturen]
Wanneer een klant een Peppol ID heeft ingesteld, verstuurt Tillor de factuur automatisch via Peppol na het boeken:
1. Maak de factuur aan zoals gebruikelijk
2. Controleer dat het **Peppol ID** van de klant correct is ingesteld
3. Controleer regels en bedragen op de conceptfactuur, klik daarna op **Boek factuur**
4. Tillor verstuurt de factuur automatisch via het Peppol-netwerk (meestal binnen enkele minuten na het boeken)
### Verzendstatus controleren [#verzendstatus-controleren]
Open de geboekte factuur en bekijk **Gebeurtenissen** in het rechterpaneel. Hier zie je of de factuur is verzonden via Peppol, of dat verzending of levering is mislukt.
# Overzicht (/gebruikers)
Accounts worden aangemaakt door de beheerder van jouw organisatie. Organisatie-instellingen en gebruikersrechten beheer je via **Instellingen**. Sommige bedrijfsgegevens (zoals BTW-nummer of IBAN) kunnen alleen via Tillor-support worden gewijzigd.
Zie [Organisatie](/gebruikers/organisaties) voor instellingen en gebruikersrechten.
Op **Instellingen** beheer je onder meer **Gebruikersrechten** per organisatiegebruiker.
## Je eigen account [#je-eigen-account]
Klik in de sidebar op je naam (onderaan) en kies **Account**. Daar beheer je je profiel, telefoonnummer, actieve sessies en gekoppelde inlogplatforms.
Tillor gebruikt Single Sign-On (SSO). Je hebt geen apart Tillor-wachtwoord - inloggen en wachtwoordbeheer verlopen via Google, Microsoft of Apple.
Zie [Inloggen & Toegang](/inloggen) voor meer informatie over het beheren van je eigen account.
## API-sleutels [#api-sleutels]
API-sleutels zijn gekoppeld aan je gebruikersaccount. Beheer ze op je accountpagina.
1. Klik in de sidebar op je naam (onderaan) en kies **Account**
2. Open de sectie **API-sleutels**
3. Klik op **API-sleutel aanmaken**
4. Kopieer de sleutel direct na aanmaken - daarna wordt deze niet meer volledig getoond
Via **Ontwikkelaars** (zelfde gebruikersmenu) vind je ook een snelkoppeling **Ga naar API-sleutels**.
Bewaar API-sleutels veilig. Deel ze nooit via onbeveiligde kanalen. Als een sleutel gecompromitteerd is, verwijder hem of klik op **Regenereren** en maak indien nodig een nieuwe aan.
# Organisatie (/gebruikers/organisaties)
Op de pagina **Instellingen** (sidebar **Ondersteuning > Instellingen**) beheer je integraties, gebruikersrechten en algemene organisatie-opties. Links op de pagina wissel je tussen **Algemeen**, **Integraties** en **Rechten**.
Bedrijfsgegevens op facturen (naam, adres, BTW-nummer, IBAN, logo) worden ingesteld tijdens de onboarding. Neem contact op met Tillor-support als je ze wilt wijzigen.
## Integraties [#integraties]
Kies **Integraties** om beschikbare koppelingen te bekijken, zoals Voys telefonie, bankrekeningen, Mollie of boekhoudsoftware (bijv. Admisol). Onder **Integraties** in het linkermenu staan categorieën (communicatie, betalingen, boekhouden, meters). Klik op een integratie in de lijst om de detailpagina te openen. Daar installeer je de koppeling of pas je de instellingen aan (geen apart dialoogvenster).
## Algemeen [#algemeen]
Onder **Algemeen** stel je factuur-PDF's, PDF-afdrukken, printer-IP-adressen, betaalopties en het **afdrukmomentenrooster** in. Je hebt de permissie **Instellingen bewerken** nodig om wijzigingen op te slaan.
In het blok **Afdrukmomenten per dag** voeg je per weekdag een of meer tijdstippen toe (of laat je de dag leeg). Online-, mandaat- en overschrijvingsbetalingen wachten op het volgende moment die dag voordat de factuur naar de printerwachtrij gaat.
Onder **Apple Wallet** stel je twee dingen in naast elkaar: links de **pasachtergrond**, rechts de **locatie slagboom**.
**Pasachtergrond** (links): optionele full-bleed foto voor het Poster Generic-layout op iPhone met **iOS 27**. Upload JPEG, PNG of WebP; grote bestanden worden automatisch verkleind. Sleep op de preview om te kiezen welk deel van de foto achter de QR-code zichtbaar blijft. De preview toont je keuze direct; pas na **Opslaan** onderaan **Instellingen** gaat de foto (of verwijdering) live en stuurt Tillor de focus mee naar gastpassen.
Op iPhone met **iOS 26 of ouder** gebruikt de pas het klassieke generic-layout met dezelfde gegevens (status, gastnaam, geldigheid, QR-code). Zonder eigen afbeelding krijgen alle passen de standaard Tillor-verloopachtergrond. Met een eigen foto staat bovenaan het **organisatielogo** uit je bedrijfsgegevens, in kleur op de foto. Bij de standaardverloop is het logo wit op het donkere verloop.
Op Poster Generic-passen (iOS 27) is de QR-code **vierkant**; op oudere toestellen rechthoekig, zoals bij een klassieke generic-pas.
**Locatie slagboom** (rechts): klik op de kaart of versleep de pin om het GPS-punt van de hoofdslagboom te zetten. **Apple Wallet** en **Google Wallet** gebruiken die locatie op de toegangspas. Op iPhone kan iOS de pas op het vergrendelscherm voorstellen wanneer een gast in de buurt is. Kies **Gebruik middelpunt parkkaart** om de pin te verwijderen en het middelpunt van de parkkaart te gebruiken.
Na het opslaan van **Instellingen** stuurt Tillor alle actieve wallet-passen in de organisatie bij (Apple via stille push, Google via object-sync). Gasten zien de update meestal na het openen van de pas in Wallet; soms is een handmatige verversing in de Wallet-app nog nodig. De preview in Tillor toont hetzelfde bijsnijden als op de pas: sleep het beeld zodat het middelpunt op de gewenste plek staat.
Op de achterkant van de wallet-pas staan het telefoonnummer en het e-mailadres van de organisatie (support-e-mail als die is ingesteld, anders het algemene adres). Bij geblokkeerde, verlopen of ingetrokken passen verschijnen die gegevens ook achter de receptietekst op het vergrendelscherm (Apple) of in Google Wallet.
## Gebruikersrechten beheren [#gebruikersrechten-beheren]
Kies **Rechten** om per organisatiegebruiker permissies aan- of uit te zetten.
1. Ga naar **Ondersteuning > Instellingen**
2. Kies **Rechten**
3. Klik bij een gebruiker op **Permissies bewerken**
4. Pas de permissies aan en klik op **Permissies opslaan**
Je hebt de permissie **Gebruikersrechten beheren** nodig om wijzigingen op te slaan.
De permissie **Gebruikersrechten beheren** kan alleen door gebruikers met **Alle permissies** aan andere gebruikers worden gegeven.
### Bankrekeningen [#bankrekeningen]
| Permissie | Wat mag de gebruiker? |
| --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| **Bankoverschrijvingen bekijken** | Pagina **Administratie > Bankoverschrijvingen** en het blok **Bankrekening transacties** op **Administratie > Betalingsrapporten** |
| **Bankoverschrijvingen synchroniseren** | Knop **Bankrekening synchroniseren** (handmatige import) |
De permissies staan in **Instellingen > Rechten** onder de groep **Bankoverschrijvingen**.
Zie ook [Bankrekeningen](/boekhouden/betalingsrapporten/betaalmethodes/ponto) voor de koppeling met open banking.
### Betaling koppelen [#betaling-koppelen]
| Permissie | Wat mag de gebruiker? |
| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Betaling koppelen** | **Betaling koppelen** op een geboekte factuur, **Koppelen** bij betalingsgroepen en **Koppelen aan factuur** bij bankoverschrijvingen (niet zichtbaar zonder permissie) |
De permissie staat in **Instellingen > Rechten** onder de groep **Betalingen**.
## Gegevens op facturen [#gegevens-op-facturen]
Bedrijfsgegevens zoals naam, adres, BTW-nummer en IBAN verschijnen automatisch op facturen. Deze worden ingesteld tijdens de onboarding. Neem contact op met Tillor-support om ze te wijzigen.
# Overzicht (/inbox)
De inbox bundelt inkomende WhatsApp Business-, Messenger-, Instagram Direct- en website chat-berichten per organisatie. Medewerkers met de juiste rechten lezen gesprekken, sturen antwoorden en archiveren afgehandelde threads.
WhatsApp-berichten via de inbox zijn bedoeld voor **tweerichtingsverkeer** met klanten. Automatische WhatsApp-notificaties (bijv. lage NFC-saldo) lopen via **Twilio**, niet via deze integraties.
## Inbox openen [#inbox-openen]
1. Kies in de sidebar onder **Ondersteuning** het item **Inbox** (groene markering **1** in de screenshot)
2. Links ziet u de gesprekkenlijst (**Gesprekken**); rechts opent het geselecteerde gesprek. Schakel met **Open** en **Gearchiveerd** tussen actieve en gearchiveerde threads.
U hebt permissie **Inbox bekijken** (`inbox:read`) nodig om de pagina te zien. Zonder gekoppeld kanaal toont Tillor een link naar **Instellingen > Integraties**.
## Gesprekken beheren [#gesprekken-beheren]
* **Zoeken** - filter threads op naam of telefoonnummer (in de tab **Open** of **Gearchiveerd**)
* **Gesprek lezen** - klik een thread; berichten staan chronologisch met naam en tijdstip (zoals reacties in Tillor). De gespreksachtergrond volgt het kanaal: beige met lichte pictogrammen voor WhatsApp, blauwe bubbels voor Messenger, roze pictogrammen op een lichtroze ondergrond voor Instagram, een lichtgrijze achtergrond voor website chat. Profielfoto's van Messenger- en Instagram-deelnemers worden in uw organisatie-opslag bewaard zodat ze in de inbox blijven werken (Meta moet **Business Asset User Profile Access** goedkeuren in App Review).
* **Afbeeldingen** - inkomende Messenger-foto's worden opgeslagen en getoond in het gesprek. In de threadlijst ziet u dan een fotopictogram in plaats van tekst.
* **Reacties** - Messenger-reacties (emoji) op berichten worden als tellers onder het bericht getoond.
* **Bewerken en verwijderen (klant)** - wanneer een klant een bericht bewerkt of unsent (Messenger, Instagram) of bewerkt (WhatsApp, binnen 15 min), past Tillor het gesprek automatisch aan.
* **Verwijderen (eigen berichten)** - bij een **eigen** tekstbericht kan een verwijderknop naast de naam staan op Messenger en Instagram. Dit verbergt het bericht in Tillor; unsend op het kanaal is via de Meta API niet beschikbaar.
* **Bewerken (eigen berichten)** - niet beschikbaar. Meta biedt geen API om een reeds verzonden zakelijke bericht op WhatsApp, Messenger of Instagram te wijzigen. Tillor past klantbewerkingen wel automatisch aan via webhooks.
* **Ongelezen gesprekken** - in de tab **Open** zijn ongelezen threads vetgedrukt met een rood bolletje vóór de laatste berichtregel. Klik **Alles als gelezen markeren** bovenaan de gesprekkenlijst om alle open ongelezen gesprekken in één keer als gelezen te markeren.
* **Contextmenu gesprekken** - rechtsklik of lang indrukken op een gesprek in de lijst voor **Markeer als gelezen**, **Markeer als ongelezen**, **Gesprek vastpinnen** / **Pin verwijderen**, **Archiveren** of **Herstellen** (permissie **Inbox beheren**).
* **Antwoorden** - typ onderaan en klik **Versturen**, of gebruik **Ctrl+Enter** (permissie **Inbox beheren**, `inbox:write`). Antwoorden vanuit de WhatsApp Business- of Messenger-app verschijnen ook in het gesprek wanneer de integratie actief is.
* **Verzendstatus** - bij uw eigen berichten ziet u naast het tijdstip een vinkje (verzonden), dubbel vinkje (bezorgd) of blauw dubbel vinkje (gelezen), zoals in WhatsApp en Messenger.
* **Archiveren** - sluit een afgehandeld gesprek via **Archiveren** (alleen in de tab **Open**)
* **Herstellen** - in de tab **Gearchiveerd** opent u een gesprek en klik **Herstellen** om het terug in **Open** te zetten en weer te kunnen antwoorden
Het badgegetal bij **Inbox** in de sidebar telt open threads waarvan het laatste bericht **inkomend** is (wacht op antwoord). Nieuwe berichten en wijzigingen in gesprekken verschijnen live in de inbox en het badgegetal wordt automatisch bijgewerkt.
Gebruikers met permissie **Inbox-berichtnotificaties** (`inbox:notifications`) ontvangen een pushmelding bij elk nieuw inkomend bericht. Uw eigen antwoorden triggeren geen melding.
Met **Inbox bekijken** (`inbox:read`) krijgt u bij een nieuw inkomend bericht een melding rechtsonder, in dezelfde dock als openstaande identiteitsdocument-scans en actieve telefoongesprekken. U ziet wie het bericht stuurde, via welk kanaal, en een stukje van de tekst. Klik om het gesprek te openen. De melding verdwijnt na ongeveer tien seconden; beweeg de muis erover om ze langer te laten staan. Heeft u dat gesprek al open in de inbox, dan komt geen melding.
## Kanalen koppelen [#kanalen-koppelen]
Installeer per kanaal een integratie onder **Instellingen > Integraties**:
* [Messenger](/inbox/messenger) - Facebook-pagina via Meta OAuth
* [Instagram](/inbox/instagram) - Instagram Direct via Meta OAuth (Facebook-pagina met gekoppeld Professional account)
* [WhatsApp Business](/inbox/whatsapp-business-inbox) - WhatsApp-nummer via Meta OAuth
* [Website chat](/inbox/website-chat) - live chat-widget op uw eigen site (embed-snippet, geen extern platform)
Bij Messenger-koppeling synchroniseert Tillor bestaande Page-gesprekken in de inbox. U kunt de sync ook handmatig starten vanuit de inbox wanneer Messenger al gekoppeld is.
Tillor koppelt gesprekken waar mogelijk aan klanten: WhatsApp op telefoonnummer (en naam uit het WhatsApp-profiel), Messenger op overeenkomende naam, op een telefoonnummer of e-mailadres dat de klant via Messenger deelt (knoppen **Telefoonnummer delen** / **E-mailadres delen**), Instagram op overeenkomende naam of `@`-gebruikersnaam. Meta levert geen e-mail of telefoon via Instagram Direct of Messenger-profielen; alleen WhatsApp levert standaard het telefoonnummer. Open gesprekken van een klant staan ook op **Klanten > klant > Communicatie**.
Rechts in het gesprek staat een zijpaneel met deelnemersinfo per kanaal: WhatsApp-telefoonnummer en link naar WhatsApp, Instagram-gebruikersnaam en profiellink, Messenger-gegevens en link naar het gesprek, en bij website chat een knop **Openen op website** met de huidige pagina-URL eronder plus bezoekers- en sessiegegevens. Gebruik het paneel-icoon boven het gesprek om het te tonen of te verbergen.
## Rechten [#rechten]
| Permissie | Wat mag de gebruiker? |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Inbox bekijken** | Inbox openen, gesprekken en berichten lezen |
| **Inbox beheren** | Antwoorden versturen, gesprekken archiveren en herstellen, gesprekken vastpinnen, als ongelezen markeren, eigen berichten in Tillor verwijderen (Messenger en Instagram) |
| **Inbox-berichtnotificaties** | Pushmeldingen ontvangen bij nieuwe inkomende berichten |
Stel rechten in via **Instellingen > Rechten** per organisatielid.
# Instagram (/inbox/instagram)
Met **Instagram** ontvangt u Instagram Direct-berichten in de [Tillor inbox](/inbox). De integratie gebruikt een gekoppelde **Facebook-pagina** met een **Instagram Professional account** in Meta Business Suite.
## Integratie installeren [#integratie-installeren]
1. Ga naar **Instellingen** (sidebar onder **Ondersteuning**)
2. Kies **Integraties** en open **Instagram** in de lijst (markering **2**)
3. Klik **Installeren** (markering **1**) en voltooi de Meta OAuth-flow (Instagram-messagingrechten)
4. Kies de **Facebook-pagina** die aan uw Instagram Professional account is gekoppeld
5. Controleer het **Instagram-gebruikersnaam**-veld onder de paginakeuze (Tillor toont het gekoppelde account, bijvoorbeeld `@uwaccount`)
6. Sla de instellingen op
Zonder gekoppeld Instagram Professional account op de geselecteerde pagina kan Tillor de integratie niet voltooien.
## Koppelen mislukt (oauth\_failed / geen Instagram op de pagina) [#koppelen-mislukt-oauth_failed--geen-instagram-op-de-pagina]
Als installatie stopt met *De app kon niet worden gekoppeld* of *Geen Instagram Professional account*, controleer in Meta:
1. **Instagram Professional** - uw Instagram-account moet Business of Creator zijn (geen persoonlijk account).
2. **Pagina koppelen** - in [Meta Business Suite](https://business.facebook.com/) of Business Settings: koppel het Instagram-account aan de **Facebook-pagina** waarmee u inlogt.
3. **Berichtentoegang** - in de Instagram-app: **Instellingen** > **Berichten en story-antwoorden** > **Verbonden tools** > sta toegang tot berichten toe (vereist voor Direct in inbox-apps).
4. **Juiste Meta-login** - gebruik een account dat **beheerder** is van de Facebook-pagina met messaging-rechten.
5. **Meta-app permissies** - Tillor vraagt bij installatie altijd `instagram_basic`, `instagram_manage_messages` en `pages_read_engagement` aan. Zet die rechten eerst op **Ready for testing** onder **Use cases** (Messenger/Instagram) in de Meta Developer Console. **Invalid Scopes** betekent dat ze nog niet op de Meta-app staan (`instagram_business_*` is een andere login-flow, niet voor Tillor).
Tillor zoekt bij installatie alle Facebook-pagina's op uw account en kiest de eerste pagina met een gekoppeld Instagram Professional account. Als u meerdere pagina's hebt, kunt u na installatie in de integratie-instellingen een andere pagina kiezen.
Na installatie ontvangt Tillor inkomende Instagram Direct-berichten automatisch zodra de **Instagram-webhook** op de Tillor Meta-app is geconfigureerd (platformbeheer). Alleen WhatsApp- of Facebook-pagina-webhooks zijn niet genoeg. Antwoorden via de Instagram-app verschijnen ook in de inbox. Berichten die u via Tillor verstuurt worden niet dubbel getoond.
Messenger en Instagram zijn **aparte** integraties. U kunt beide installeren als u beide kanalen in de inbox wilt.
## Gerelateerd [#gerelateerd]
# Messenger (/inbox/messenger)
Met **Messenger** ontvangt u berichten van klanten via een gekoppelde Facebook-pagina in de [Tillor inbox](/inbox).
## Integratie installeren [#integratie-installeren]
1. Ga naar **Instellingen** (sidebar onder **Ondersteuning**)
2. Kies **Integraties** en open **Messenger** in de lijst (markering **2**)
3. Klik **Installeren** (markering **1**) en voltooi de Meta OAuth-flow
4. Kies op de detailpagina welke **Facebook-pagina** Messenger-berichten ontvangt
5. Sla de instellingen op
Tillor toont de gekoppelde pagina onder **Instellingen** op de detailpagina. Na installatie ontvangt Tillor inkomende Messenger-berichten automatisch. Antwoorden die u ook via de Messenger-app stuurt, verschijnen in de inbox. Berichten die u via Tillor verstuurt worden niet dubbel getoond.
Voor **Instagram Direct** installeert u de aparte integratie [Instagram](/inbox/instagram).
## Gerelateerd [#gerelateerd]
# Website chat (/inbox/website-chat)
Met **Website chat** plaats je een chatknop op je eigen website. Bezoekers sturen berichten via het widget; uw team antwoordt in de [Tillor inbox](/inbox) naast WhatsApp, Messenger en Instagram.
## Integratie installeren [#integratie-installeren]
1. Ga naar **Instellingen > Integraties** (sidebar onder **Ondersteuning**)
2. Open **Website chat** in de lijst
3. Klik **Installeren** (geen OAuth - Tillor maakt direct een widget-sleutel aan)
4. Stel onder **Instellingen** de widget in (welkomstbericht, accentkleur, optioneel toegestane domeinen)
5. Kopieer het **Embed-snippet** onder **Embedden op je website** en plak het vóór `