# 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 bezettingsbeheer * 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 automatisch 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 boekingen en bezettingen ## Eerste stappen [#eerste-stappen] ### 1. Inloggen [#1-inloggen] 1. Ga naar het Tillor inlogscherm 2. Klik op **"Inloggen met Microsoft"** 3. Voer je werk- of schoolaccount in 4. Je wordt automatisch ingelogd en ziet je dashboard ### 2. Dashboard verkennen [#2-dashboard-verkennen] Na het inloggen zie je het hoofdmenu met verschillende onderdelen: * **Klanten**: Overzicht van alle klanten * **Facturen**: Alle facturen en openstaande bedragen * **Betalingen**: Betalingsgeschiedenis en verwerking * **Toegangscontrole**: Barrières en toegangslogboeken * **Meters**: Overzicht van alle meters * **Reserveringen**: Boekingen en bezettingen ### 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 de knop **"Nieuwe klant"** 3. Vul de klantgegevens in 4. Sla de klant op ## 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 reservering toe in Tillor 3. Het systeem controleert automatisch beschikbaarheid 4. Factuur wordt automatisch aangemaakt 5. Klant ontvangt toegang 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 direct in het dashboard ## Hulp nodig? [#hulp-nodig] Raadpleeg de andere documentatiepagina's voor gedetailleerde informatie over specifieke functies en workflows. # 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 de beheerder van jouw organisatie. ## 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 Google** * **Inloggen met Microsoft** * **Inloggen met Apple** 3. Volg de stappen van je gekozen provider 4. Je wordt doorgestuurd naar het dashboard van jouw organisatie Je hebt geen apart Tillor-wachtwoord. Het wachtwoordbeheer verloopt volledig via Google, Microsoft of Apple. ## Account aanmaken [#account-aanmaken] Nieuwe medewerkers ontvangen een uitnodigings-e-mail van de beheerder. Klik op de link in de e-mail en log in via de gewenste SSO-provider om toegang te krijgen. ## API-sleutels voor integraties [#api-sleutels-voor-integraties] Voor technische koppelingen met andere systemen kun je API-sleutels aanmaken via **Ontwikkelaars**. Zie de documentatie voor [Ontwikkelaars](/ontwikkelaars) voor meer informatie. # 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 (`displayId`, ook met jaartal of scheidingstekens), interne factuur-ID (`inv_…`), totaalbedrag, factuurnotities (publiek en intern) | | **Reserveringen** | Reserveringscode (`id`), notitie op de reservering, voornaam van de gekoppelde klant | | **Bezettingen** | Terreinnaam, voor- en achternaam van de klant, bezetting-ID | | **Terreinen** | Naam, beschrijving en ID van de standplaats | | **Meters** | Naam, serienummer en ID van de meter | | **Telefoongesprekken** | Inkomend en uitgaand nummer, gespreks-ID en externe referentie | Er is geen aparte categorie *NFC-tags*. NFC-kaarten en andere toegangswaarden horen bij **Klanten** en verschijnen daar in het resultaat wanneer ze matchen. Per categorie toont Tillor tot tien treffers in de lijst. Als er minstens tien zijn, zie je **10+** bij die categorie - verfijn je zoekterm of kies de categorie in het linkerpaneel om gerichter te filteren. ## 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 - bijvoorbeeld **reserveringen** matchen vooral op bevat-in-tekst en exacte codes. ## Tips voor efficiënt zoeken [#tips-voor-efficiënt-zoeken] * **Kenteken of poortcode** - 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. * **Gedeeltelijke namen** - bij klanten volsteek 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] Het activiteitenlog is beschikbaar via de detailpagina's van afzonderlijke records - zoals klanten, facturen en reserveringen. Neem contact op met je Tillor-beheerder voor toegang tot een centraal overzicht. Per activiteit zie je: * **Beschrijving** - wat er is gedaan (bijv. "Factuur geboekt", "Klant aangemaakt") * **Tijdstip** - wanneer de actie heeft plaatsgevonden * **Gebruiker** - welke medewerker de actie heeft uitgevoerd * **Gerelateerd record** - een koppeling naar het betreffende object (klant, factuur, etc.) ## Filteren en zoeken [#filteren-en-zoeken] Gebruik de filters om snel relevante activiteiten te vinden: * **Periode** - filter op datum of tijdsbereik * **Type** - filter op het soort actie (aanmaken, bewerken, verwijderen, etc.) * **Gebruiker** - bekijk alleen de acties van een specifieke medewerker * **Zoekterm** - zoek op trefwoord in de beschrijving ## Activiteiten per record [#activiteiten-per-record] Op de detailpagina van een klant, factuur of reservering zie je een overzicht van recente wijzigingen aan dat record. 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 # Betalingsverwerking (/betalingsverwerking) Tillor ondersteunt verschillende manieren om betalingen te verwerken en te registreren. Betalingsrapporten en integratie met boekhoudsoftware (Admisol, later mogelijk Odoo) worden apart beschreven in het [Boekhouden](/boekhouden)-module. ## Betalingen registreren [#betalingen-registreren] ### Handmatige betaling registreren [#handmatige-betaling-registreren] Wanneer een klant contant of via pin betaalt: 1. Ga naar de factuur die betaald moet worden 2. Klik op de knop **"Betaling registreren"** 3. Je ziet een pop-up met de volgende opties: * **Betaalmethode**: Contant, Pin, Overboeking, etc. * **Bedrag**: Het te betalen bedrag (standaard het volledige openstaande bedrag) * **Datum**: Wanneer de betaling is ontvangen * **Referentie**: Optionele betalingsreferentie 4. Vul de gegevens in 5. Klik op **"Betaling bevestigen"** ### Wat gebeurt er daarna? [#wat-gebeurt-er-daarna] * De factuur wordt automatisch gemarkeerd als betaald * Het openstaande bedrag wordt bijgewerkt * De betaling verschijnt in de betalingsgeschiedenis * Je ziet de betaling terug in het dashboard ## Online betalingen [#online-betalingen] ### Betaallink versturen [#betaallink-versturen] Voor online betalingen kun je een betaallink naar de klant sturen: 1. Open de factuur 2. Klik op **"Betaallink versturen"** 3. Het systeem genereert automatisch een betaallink 4. De klant ontvangt een e-mail met de betaallink 5. De klant kan betalen via: * **iDEAL**: Nederlandse bankoverschrijvingen * **Creditcard**: Visa, Mastercard, American Express * **Bancontact**: Belgische betaalkaarten ### Wat ziet de klant? [#wat-ziet-de-klant] Wanneer de klant op de betaallink klikt: 1. Ze zien een overzicht van de factuur 2. Ze kunnen een betaalmethode kiezen 3. Ze worden doorgestuurd naar een beveiligde betaalpagina 4. Na betaling zien ze een bevestiging 5. Ze ontvangen automatisch een betalingsbevestiging per e-mail ### Betalingsstatus volgen [#betalingsstatus-volgen] In Tillor zie je de status van online betalingen: * **In behandeling**: De klant heeft de betaallink geopend maar nog niet betaald * **Voltooid**: De betaling is succesvol verwerkt * **Mislukt**: De betaling is mislukt of geannuleerd * **Terugbetaald**: De betaling is terugbetaald ## SEPA-incasso's instellen [#sepa-incassos-instellen] Voor terugkerende betalingen kun je automatische incasso's instellen: ### Mandaat aanmaken [#mandaat-aanmaken] 1. Ga naar het klantprofiel 2. Klik op **"SEPA-mandaat aanmaken"** 3. Je ziet een formulier waar je invult: * **IBAN**: Het bankrekeningnummer van de klant * **Naam rekeninghouder**: Naam zoals op de bankrekening * **Mandaattype**: Eenmalig of terugkerend 4. De klant moet het mandaat ondertekenen (digitaal of op papier) 5. Zodra het mandaat is ondertekend, wordt het automatisch gevalideerd 6. Je ziet een bevestiging dat het mandaat actief is ### Automatische incasso uitvoeren [#automatische-incasso-uitvoeren] Zodra een mandaat actief is: 1. Ga naar de factuur die geïncasseerd moet worden 2. Klik op **"Incasso uitvoeren"** 3. Het systeem controleert of er een actief mandaat is 4. Je bevestigt de incasso 5. Het bedrag wordt automatisch van de rekening van de klant afgeschreven 6. Je ontvangt een bevestiging wanneer de incasso succesvol is ### Incasso-status [#incasso-status] Na het uitvoeren van een incasso zie je: * **Verzonden**: De incasso is aangevraagd * **In behandeling**: De incasso wordt verwerkt door de bank * **Voltooid**: Het bedrag is succesvol afgeschreven * **Geweigerd**: De incasso is geweigerd (bijvoorbeeld onvoldoende saldo) ## Betalingsgeschiedenis bekijken [#betalingsgeschiedenis-bekijken] ### Per klant [#per-klant] 1. Open het klantprofiel 2. Klik op het tabblad **"Betalingen"** 3. Je ziet een overzicht met: * Datum van elke betaling * Bedrag * Betaalmethode * Status * Bijbehorende factuur ### Overzicht van alle betalingen [#overzicht-van-alle-betalingen] 1. Ga naar **Administratie > Betalingen** 2. Je ziet een lijst met alle betalingen 3. Je kunt filteren op: * Datum * Betaalmethode * Status * Klant 4. Je kunt zoeken 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 (dezelfde verwerking als bij een inkomende Mollie-webhook) – handig bij twijfel of bij een gemiste webhook. ## Betalingsgroepen [#betalingsgroepen] Betalingsgroepen bundelen meerdere binnenkomende betalingen onder één label, zodat ze in één keer aan een geboekte factuur gekoppeld kunnen worden. Handig voor POS-shifts, tafelbetalingen, activiteiten met meerdere deelnemers, of elke situatie waar je het pas op het einde van de dag of het einde van het event wil afpunten. ### Wanneer gebruiken [#wanneer-gebruiken] * **POS-shift afsluiten**: alle terminal-betalingen van de dag zitten in één 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 één 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 onder meer *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 één actie toegewezen aan die factuur en de groep krijgt status *Toegewezen*. Bevat een groep minstens één **Mollie**-betaling met een gekende transactie-id, dan vind je **Synchroniseren** naast **Koppelen** in hetzelfde ⋮ menu. Die actie vraagt in één keer een refresh voor alle geschikte betalingen in die groep bij de betaalpartner (zelfde verwerking als per betaling en als inkomende webhook). Dat kan zowel voor *Open* als *Toegewezen* groepen – 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). * **Handmatig vanuit een betaling**: open een betaling die nog geen groep en geen factuur heeft, en wijs hem toe aan een nieuwe of bestaande open groep. Een toegewezen groep wordt op de factuur-PDF als één regel getoond met het totaal van de groep. De individuele betalingen klap je open in het betalingsoverzicht van de factuur. ## Openstaande bedragen [#openstaande-bedragen] ### Overzicht bekijken [#overzicht-bekijken] 1. Ga naar **Facturen** in het hoofdmenu 2. Klik op **"Openstaand"** in de filter 3. Je ziet alle facturen die nog niet volledig zijn betaald 4. Je kunt sorteren op: * Datum (oudste eerst) * Bedrag (hoogste eerst) * Klantnaam ### Herinneringen versturen [#herinneringen-versturen] Voor openstaande facturen kun je automatisch herinneringen versturen: 1. Selecteer de facturen waarvoor je een herinnering wilt sturen 2. Klik op **"Herinnering versturen"** 3. Het systeem stuurt automatisch een e-mail naar de klant 4. Je ziet wanneer de laatste herinnering is verstuurd ## Veelvoorkomende scenario's [#veelvoorkomende-scenarios] ### Scenario: Klant betaalt contant [#scenario-klant-betaalt-contant] 1. Klant komt langs en betaalt contant 2. Je opent de factuur in Tillor 3. Je klikt op "Betaling registreren" 4. Je selecteert "Contant" als betaalmethode 5. Je bevestigt de betaling 6. De factuur wordt automatisch gemarkeerd als betaald ### Scenario: Online betaling via betaallink [#scenario-online-betaling-via-betaallink] 1. Je verstuurt een factuur naar de klant 2. De klant ontvangt automatisch een e-mail met betaallink 3. Klant klikt op de link en betaalt online 4. Je ziet in Tillor dat de betaling is ontvangen 5. De factuur wordt automatisch gemarkeerd als betaald ### Scenario: Terugkerende maandelijkse betalingen [#scenario-terugkerende-maandelijkse-betalingen] 1. Je stelt een SEPA-mandaat in voor de klant 2. Elke maand genereer je een factuur 3. Je klikt op "Incasso uitvoeren" bij de factuur 4. Het bedrag wordt automatisch geïncasseerd 5. Je ontvangt een bevestiging wanneer de betaling binnen is # 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] 1. Ga naar **Klanten** en open een klantprofiel 2. Klik op het tabblad **Bezettingen** 3. Je ziet een kaart **Bezettingen** met alle bezettingen van deze klant 4. Per bezetting in de lijst zie je: * De naam van het terrein * **Betaald tot**: de datum tot wanneer de klant vooruit heeft betaald (indien ingevuld) * Voor **Gefactureerd tot**: het **info-icoon** vóór de datum toont de datum tot wanneer is gefactureerd; standaard is dat gelijk aan **Betaald tot** Klik op een bezetting in de lijst om de detailpagina te openen. De tabel op de tabpagina toont alle bezettingen van de klant, met kolommen **Terrein**, **Type**, **Huurfrequentie**, **Prijs**, **Status** en **Betaald tot** (inclusief relatieve aanduiding, bijv. "over 12 dagen"). Bij **Betaald tot** staat een **info-icoon** met **Gefactureerd tot** in een tooltip (standaard dezelfde datum als **Betaald tot**). Gebruik de zoekbalk bovenaan om te filteren op terreinnaam. Via de knop **Status** kun je filteren op actieve of inactieve bezettingen. ## 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** 2. Klik op het tabblad **Bezettingen** 3. Klik op de knop **"Bezetting aanmaken"** (rechtsboven in de kaart) 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) * Laat dit leeg als je geen vaste frequentie wilt registreren **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 een lege-statusmelding 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 lijst op het tabblad **Bezettingen** van de klant ## 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 het tabblad **Bezettingen** van de klant 2. Klik op het menu-icoon (drie puntjes) naast de bezetting 3. Kies **"Verwijderen"** 4. Er opent een bevestigingsvenster **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 het tabblad **Bezettingen** van de klant 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** * **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 het tabblad **Bezettingen** van de klant 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** aan als je op **dezelfde conceptfactuur** ook meteen het openstaande verbruik wilt zetten (meters van het betrokken terrein, of bij **Alles verlengen** van alle betrokken terreinen samen). 4. Klik op **"Conceptfactuur aanmaken"**. Daarna gebeurt onder meer het volgende: * Tillor bouwt een conceptfactuur op de server met het **eerste product met actie Bezetting verlengen** (alfabetisch op naam) en vult daar een eventuele **invoice bundle** op dat product automatisch bij. * Bij meerdere bezettingen krijg je meerdere hoofdregels op dezelfde factuur. * Met verbruik komen daar **hoeveelheidsregels** bij **en daaronder**, per periode, **inforegels** met datum en meterstanden (dezelfde **ouder-/kind**-structuur als bij bundels). * Je gaat naar die conceptfactuur; vul nog de periodes af en controleer de regels voor je boekt. 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 automatisch uitlezingen doorsturen, is het invoerveld vervangen door een keuzelijst. Je kiest altijd een bestaande uitlezing uit de lijst. 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**. Na betaling van een factuur met **Bezetting verlengen** zet Tillor **Betaald tot** en **Gefactureerd tot** op hetzelfde nieuwe eindmoment. * 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 gaat naar het tabblad **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 2. Je gaat naar het tabblad **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 een e-mail met het verwijderde document als bijlage. Zo heb je altijd 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 naast een bewerkingsformulier. Vul de gewenste velden in en sla op om het document te koppelen: 1. Ga naar **Documenten** onder **Administratie**. 2. Open het formulier naast het gewenste document. 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. ## Verzekeringsvervaldatum [#verzekeringsvervaldatum] Als je een **Verzekeringsvervaldatum** hebt ingesteld voor een document, toont Tillor dit op de documentkaart onder het label **Geldig tot**: * **Normale weergave**: De datum wordt getoond als gewone tekst. * **Verloopt binnenkort** (binnen 30 dagen): De datum wordt gemarkeerd als waarschuwing. * **Verlopen**: De datum wordt als foutmelding gemarkeerd. Zo zie je in één oogopslag welke documenten aandacht nodig hebben. # 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 de pagina zie je vier statistieken: * **Totaal facturen** - het totale aantal facturen in het systeem * **Openstaande facturen** - geboekte facturen die nog (gedeeltelijk) onbetaald zijn * **Vervallen facturen** - openstaande facturen waarvan de betaaldatum verstreken is * **Totaal openstaand bedrag** - de som van alle openstaande bedragen ### 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 of vervaldatum * **Status** - concept of geboekt * **Betaalstatus** - onbetaald, gedeeltelijk betaald of betaald * **Klanttype** - particulier of zakelijk * **Klant** - filter op een specifieke klant * **Product** - toon alleen facturen met een bepaald product * **Bedrag** - filter op een minimaal of maximaal factuurbedrag ## Een nieuwe factuur aanmaken [#een-nieuwe-factuur-aanmaken] ### Vanuit de facturenlijst [#vanuit-de-facturenlijst] Je maakt facturen aan vanuit een klantprofiel. Open het klantprofiel en klik op **"Nieuwe factuur"**. Het systeem maakt direct een conceptfactuur aan en opent de factuurpagina. ### Vanuit een klantprofiel [#vanuit-een-klantprofiel] 1. Ga naar **Klanten** en open het profiel van de gewenste klant 2. Klik op de knop **"Nieuwe factuur"** op de klantpagina 3. Je wordt doorgestuurd naar de nieuwe conceptfactuur Een nieuwe factuur krijgt automatisch een conceptnummer en de huidige datum als factuurdatum, met een standaard betaaltermijn van 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 een **Actie Type** 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 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 **betaling** van een regel **Bezetting verlengen** werkt Tillor **Betaald tot** van de gekozen bezetting bij. 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 de knop **"Opslaan"** of annuleren via **"Annuleren"** om terug te keren naar de vorige staat. ## 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 betaald** | 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 2. Voor **Bezetting verlengen** (Staangeld): kies een bezetting én een volledige periode (**start- en einddatum**). Zonder ingevulde periode is **Boeken** niet beschikbaar. 3. Klik op de knop **"Boeken"** 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 dus dat alle gegevens correct zijn voordat je boekt. Een geboekte factuur kan binnen 7 dagen na de factuurdatum ongedaan worden gemaakt als er nog geen notificaties zijn verstuurd (zie "Terugzetten naar concept" verderop). ### Belgische bedrijven en Peppol [#belgische-bedrijven-en-peppol] Boek je een factuur voor een Belgische klant met een BTW-nummer? Dan is het vereist dat er een **Peppol-ontvanger-ID** ingesteld is in de factuurinstellingen van de klant voordat je kunt boeken. Je kunt dit instellen via het klantprofiel. ## 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 de knop **"Versturen"** 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) ### Herinnering versturen [#herinnering-versturen] Wanneer een factuur al verstuurd is maar nog niet betaald: 1. Open de factuur 2. Klik op het pijltje naast de knop **"Versturen"** en kies **"Herinnering versturen"** 3. Bevestig de herinnering in het dialoogvenster 4. Kies de kanalen (e-mail en/of sms) - sms staat standaard aan bij herinneringen Notificaties en herinneringen kunnen alleen verstuurd worden voor geboekte facturen. Als de klant geen e-mailadres en geen telefoonnummer heeft, is de verzendknop niet beschikbaar. ## Een betaling registreren [#een-betaling-registreren] Geboekte facturen met een openstaand bedrag kunnen worden voldaan via het betaaldialoogvenster. 1. Open de geboekte factuur 2. Klik op de knop **"Betaling registreren"** 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 * **Bankoverschrijving** - registreer een ontvangen overschrijving * **SEPA-incasso** - 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. Voeg een optionele opmerking toe 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? Dan kun je die toewijzen via het actie-menu rechtsboven op de factuurpagina: klik op de drie stippen en kies **"Betaling toewijzen"**. ## Een factuur afdrukken of downloaden [#een-factuur-afdrukken-of-downloaden] Op elke factuurpagina vind je de printknop. * **Afdrukken** - opent een afdrukvenster in de browser * **Downloaden als PDF** - slaat de factuur op als PDF-bestand * **Versturen naar printer** - stuurt de factuur direct naar een aangesloten desktopprinter of thermische printer * **Bekijken op tablet** - stuurt de factuur-PDF naar een gekoppelde tablet zodat de klant hem kan bekijken ## Geavanceerde acties [#geavanceerde-acties] Via het actiemenu (de drie stippen rechtsboven op de factuurpagina) vind je aanvullende opties. ### Persoonlijke betaallink kopiëren [#persoonlijke-betaallink-kopiëren] Genereer een unieke betaallink voor de klant en kopieer die naar het klembord. Je kunt deze link dan zelf delen via een eigen kanaal (WhatsApp, e-mail buiten Tillor, etc.). ### Factuur kopiëren [#factuur-kopiëren] Maak een nieuw concept aan met dezelfde regelitems als de huidige geboekte factuur. Handig als je snel een vergelijkbare factuur wilt opstellen. ### Factuur tegenboeken (creditnota) [#factuur-tegenboeken-creditnota] Maak een creditnota 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. ### Doorsturen naar boekhoudsoftware [#doorsturen-naar-boekhoudsoftware] Stuur de factuur handmatig door naar de gekoppelde boekhoudsoftware (bijvoorbeeld Admisol). Dit is normaal gesproken automatisch, maar via dit menu kun je de overdracht ook handmatig opnieuw uitvoeren. ### Herberekenen [#herberekenen] Bereken de factuurbestanden en totalen 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 Klik op de knop **"Terugzetten naar concept"** en bevestig de actie in het bevestigingsvenster. Het oorspronkelijke factuurnummer wordt bewaard als referentie. Nadat je de aanpassingen hebt gedaan, kun je de factuur opnieuw boeken - het systeem kent dan een nieuw oplopend factuurnummer toe. Een factuur die teruggezet is naar concept en vervolgens opnieuw geboekt wordt, krijgt altijd een nieuw factuurnummer. Het oude nummer wordt als referentie bewaard maar kan niet opnieuw worden gebruikt. ## 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. Klik op het tabblad **"Facturen"** 3. Je ziet een overzicht van alle facturen van deze klant, inclusief status, bedrag en betaalstatus # 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: * **Groen vlak** - de standplaats is vrij * **Lichtgeel vlak** - er staat een reservering op dit terrein (aankomst op de gekozen datum, nog niet in actief verblijf) * **Geel vlak** - actief verblijf via reservering (ingecheckt of gepland midden in de verblijfsperiode op de gekozen datum) * **Amber 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 reserveringen op dezelfde standplaats op de gekozen datum Klik op een terrein op de kaart om een pop-up te openen met de naam, huidige gast, reserveringen 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. **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 | | **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 bewerkmodus 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 op de kaart meten - handig bij het indelen van het terrein of het inschatten van afstanden tussen locaties. 1. Activeer het meetgereedschap via de werkbalk op de kaart 2. Klik op het startpunt en vervolgens op het eindpunt 3. De gemeten afstand wordt weergegeven op de kaart ## 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 de huidige gast 3. Klik op **"Details bekijken"** om naar de detailpagina te gaan 4. Als het terrein vrij is, kun je direct **"Reservering maken"** aanmaken # Klantenbeheer (/klantenbeheer) Het klantenbeheersysteem helpt je bij het beheren van alle klantgegevens op één centrale plek. ## Een nieuwe klant toevoegen [#een-nieuwe-klant-toevoegen] 1. Ga naar **Klanten** in het hoofdmenu 2. Klik op **"Nieuwe klant aanmaken"** (rechtsboven) 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 de detailpagina van een klant kun je een BTW-nummer invullen. Tillor valideert het nummer automatisch via VIES: 1. Voer 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 de basisgegevens. Via de tabbladen kun je naar specifieke informatie navigeren: * **Overzicht** - Basisgegevens en een samenvatting * **Facturatie** - Alle facturen van deze klant * **Bezettingen** - Actieve en afgelopen bezettingen op terreinen * **Meters** - Verbruik per meter op de bezette terreinen * **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 ## Klantgegevens bewerken [#klantgegevens-bewerken] Het klantprofiel toont direct een bewerkbaar formulier met alle gegevens. Pas de gewenste velden aan en klik op **"Opslaan"** onderaan het formulier om de wijzigingen op te slaan. ## 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** JSON-overzicht zodat je exact kan controleren wat er aangepast is. ## Klanten zoeken en filteren [#klanten-zoeken-en-filteren] Bovenaan de klantenlijst vind je een zoekbalk: * Typ een naam of e-mailadres * Resultaten worden direct getoond terwijl je typt Je kunt ook filteren op **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 4. Je maakt een bezetting aan op het gewenste terrein (tabblad **Bezettingen**) 5. Verbruik van de gekoppelde meters wordt automatisch bijgehouden ### 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, 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 ooit vastgelegd in het systeem * **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 50 meest recent verstuurde berichten * **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, WhatsApp of Push * **Status** - de huidige bezorgstatus van het bericht * **Ontvanger** - het e-mailadres, telefoonnummer 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 * **Bijlagen** - eventuele bijlagen bij e-mailberichten Voor e-mails en WhatsApp zie je ook of het bericht is geopend (gelezen op) en of er op een link is geklikt (geklikt op). Klikken voor e-mail en SMS tellen alleen mee als het vastgelegde 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 bewust niet verstuurd, bijvoorbeeld omdat de klant geen geldig contactgegeven heeft | | **Bounced** | Het bericht kon het e-mailadres of nummer niet bereiken | | **Als spam gemeld** | De ontvanger heeft het bericht als spam gemarkeerd | ## Notificatietypen [#notificatietypen] Tillor verstuurt verschillende typen notificaties: | 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 | | 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 | Niet alle notificaties worden automatisch verstuurd. Factuurberichten - zoals "Nieuwe Factuur" - vereisen standaard een handmatige actie. Automatisch versturen kan worden ingeschakeld door contact op te nemen met Tillor-support. ## 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 vanuit 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 # Notities & Opmerkingen (/notities) Met notities en opmerkingen kunnen teamleden samenwerken rondom klanten, facturen, reserveringen en andere records. Alle opmerkingen zijn intern en worden nooit gedeeld met de klant. ## Opmerkingen toevoegen [#opmerkingen-toevoegen] Op elke detail- of profielpagina vind je een sectie voor opmerkingen. Zo voeg je er een toe: 1. Ga naar het gewenste record (bijv. een klantprofiel of factuur) 2. Scroll naar de sectie **"Opmerkingen"** onderaan de pagina 3. Klik in het tekstvak en typ je opmerking 4. Gebruik **@naam** om een collega te vermelden - die ontvangen dan een melding 5. Klik op de verzendknop om de opmerking op te slaan ## Opmerkingen beheren [#opmerkingen-beheren] ### Opmerking bewerken of verwijderen [#opmerking-bewerken-of-verwijderen] Beweeg de muiscursor over een opmerking om de bewerkingsopties te tonen: * **Bewerken** - pas de tekst aan (alleen voor eigen opmerkingen) * **Verwijderen** - verwijder de opmerking definitief ### Opmerking vastpinnen [#opmerking-vastpinnen] Wil je een belangrijke opmerking bovenaan zichtbaar houden? Pin hem vast: 1. Beweeg de cursor over de opmerking 2. Klik op het pin-pictogram 3. De opmerking wordt naar boven verplaatst en blijft daar staan ### Opmerking als opgelost markeren [#opmerking-als-opgelost-markeren] Bij discussies die zijn afgerond, kun je een opmerking als **opgelost** markeren: 1. Klik op het vinkje naast de opmerking 2. De opmerking wordt gemarkeerd als opgelost ## Overzicht van alle opmerkingen [#overzicht-van-alle-opmerkingen] Ga naar **Communicatie > Opmerkingen** voor een centraal overzicht van alle opmerkingen in het systeem. * **Open opmerkingen** - openstaande discussies die aandacht vereisen * **Opgeloste opmerkingen** - afgesloten opmerkingen voor referentie ### 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. # Osmond identiteitsscans (/osmond-identiteitsscans) Met een **Osmond-identiteitslezer** kun je paspoorten, ID-kaarten en rijbewijzen scannen. De reader stuurt een zip-pakket met o.a. `document.xml` en pagina-afbeeldingen naar de **Tillor-connector** op je lokaal netwerk. De connector stuurt dat pakket door naar je **Tillor-organisatie**, waar het document wordt ingelezen, **versleuteld** wordt opgeslagen en je als medewerker kunt **koppelen** aan een klant of contact. ## Overzicht van de route [#overzicht-van-de-route] ## Connector en netwerk [#connector-en-netwerk] * De connector luistert voor Osmond op **poort 8765** (WebSocket). Zie ook [Connector](/ontwikkelaars/connector) voor Docker-poorten en omgevingsvariabelen. * De reader moet als **Host** het IP-adres of de hostnaam van de machine met de connector kunnen bereiken (niet `localhost` vanaf een ander toestel). In de connector-log staat een hint met een **LAN-IP** en waar zip-bestanden tijdelijk worden weggeschreven. * **Doorsturen naar Tillor** gebeurt alleen als **`TILLOR_API_URL`**, **`TILLOR_API_TOKEN`** en **`TILLOR_ORG_ID`** zijn ingesteld. Dan POST de connector het zip-bestand **base64-gecodeerd** naar je organisatie-endpoint. De aanvraag bevat de header **`X-Tillor-Connector`** zodat alleen de connector deze upload mag gebruiken. * Als de API-URL of het token ontbreekt, start de WebSocket-server wel, maar wordt er **niet** naar Tillor doorgestuurd. * Eén upload mag het zip-pakket niet groter zijn dan ongeveer **25 MB** ruw zip; grotere pakketten worden aan de serverzijde geweigerd. Het doorsturen van het zip-bestand naar Tillor heeft aan de kant van de connector een **limiet van twee minuten**. Bij zeer trage verbindingen of grote bestanden kan de upload mislukken - controleer dan netwerk en connectorlogs. ## Wat Tillor doet met het pakket [#wat-tillor-doet-met-het-pakket] Na ontvangst wordt het zip-bestand uitgepakt, rasterbeelden zo nodig naar JPEG genormaliseerd, en door de **Osmond-parser** verwerkt (`document.xml`, chip- en MRZ-gegevens waar aanwezig). Tillor slaat onder andere op: * een **scanrecord** met documenttype, naamgegevens, nationaliteit, geboortedatum, document- en persoonsnummers, enz. waar beschikbaar; * het **originele connector-zip** en elk overig bestand uit het pakket **per stuk versleuteld** in organisatie-opslag; **pagina-afbeeldingen van het document** krijgen vóór versleuteling een **semi-transparante, herhaalde watermark** met de Engelse tekst **Not valid as ID**, zodat een gelekte afbeelding duidelijker niet bedoeld is als officiële legitimatie; **het portret** (uitgesneden op basis van Osmond-geometrie) en het losse chip-/portretbestand uit het zipbestand laten Tillor daarbij **ongemarkeerd** (de Engelse zin gebruiken we vooral op de documentpagina, omdat documenten veel talen gebruiken); * waar mogelijk een **afgeleid portret** voor weergave en export. Gebonden scans (en suggesties) worden daarna ververst via dezelfde realtime-kanalen. ### Nieuwe klant of contact in de app [#nieuwe-klant-of-contact-in-de-app] * **Nieuwe klant** (en **Nieuw contact** op **Klanten > Contacten**): zolang er geschikte **openstaande scans** zijn, heeft de knop een **dropdown**. Kies **Manueel** om het dialoog met het gewone formulier te openen, of kies direct een scan in de lijst eronder. Na het kiezen van een scan opent eerst dezelfde **bevestigingsdialog** als bij het koppelen (raster, MRZ-gegevens, **Annuleren** / **Klant aanmaken** of **Contact aanmaken**). Bij **Nieuwe klant** is dat dezelfde actie als **Klant aanmaken op basis van scan** op de dockkaart (`modules.identityDocumentScans.overlay.actionCreateCustomer`). **Zijn er geen geschikte scans**, dan is het weer een enkele knop die alleen het handmatige dialoog opent. * Bij **Nieuw contact** staan in de dropdown alleen scans die nog **geen contact** hebben en minstens een **voornaam** hebben. Een scan die alleen bij de **klant** als identiteit hoort, zit niet in deze wachtrij - die hoort daar niet dubbel gekoppeld te worden naar een contact. * In **Reservering starten**: wanneer je een nieuwe klant wilt aanmaken boven aan de reservering, verschijnt dezelfde dropdown (**Manueel**, daarna de geschikte scans) zolang openstaande scans bestaan. * Waar je op het **klant- of contactprofiel** een **gestippelde kaart** gebruikt om een openstaande scan te koppelen: na **kiezen uit de lijst** verschijnt een **bevestigingsdialog**. Daarin vind je naam en documenttype, **nationaliteit**, **geboortedatum**, **persoonlijk nr.** en **documentnr.** (als die bekend zijn), een raster voorbeeld met **tabs zoals bij het kleine icoon onder Identiteit geverifieerd** (**voorzijde**, **achterzijde**, **portret** indien beschikbaar), plus **Annuleren** en **Scan koppelen**. ## Waar je de scan in de app ziet [#waar-je-de-scan-in-de-app-ziet] ### Activiteiten onderaan rechts [#activiteiten-onderaan-rechts] Zolang er **scans zonder gekoppelde klant** zijn, verschijnen ze in het **dock rechtsonder** (dezelfde plek als actieve telefoongesprekken). Op kleine schermen is er een **zwevende knop** om het paneel te openen. * Aria-label voor het paneel komt overeen met **Openstaande identiteitsdocument-scans en actieve telefoongesprekken** (`modules.identityDocumentScans.overlay.dockAriaLabel`). * Elke kaart toont naam- en MRZ-gegevens, raster en **Klant aanmaken op basis van scan** (`modules.identityDocumentScans.overlay.actionCreateCustomer`). Om een scan aan een **bestaande** klant of een **contact** te koppelen ga je naar **Klanten** en gebruik je de gestippelde **scan koppelen**-prompt op het klant- of contactprofiel. ### Klantprofiel [#klantprofiel] * Onder **Klantgegevens** op de klantpagina verschijnen **gekoppelde scans** die alleen bij de klant horen (niet bij een specifiek contact). * Als er **openstaande scans** zijn en deze klant nog **geen** dergelijke scan heeft, verschijnt een **gestippelde kaart**: je kunt direct een pending scan aan **deze klant** koppelen (zonder alleen het dock rechtsonder te gebruiken). * In de **klantheader** kan een **badge** tonen dat een identiteitsdocument gekoppeld is (**Identiteit geverifieerd**, of waarschuwing bij bijna verlopen of verlopen document). ### Contactpersonen [#contactpersonen] * Elke **contactkaart** toont eventueel gekoppelde scans voor dat contact. * Heeft een contact **nog geen eigen scan**, dan verschijnt (als er geschikte **openstaande** scans zijn) op die kaart een **gestippelde prompt** om daar één aan **dit contact** te koppelen. ### API voor integrators [#api-voor-integrators] Je kunt optioneel **`identityDocumentScanId`** meesturen bij **klant aanmaken** (`POST /customers`) of **contact aanmaken** (`POST /contacts`). Tillor koppelt de identity document-scan dan in **dezelfde database-transactie** aan de nieuwe klant of het nieuwe contact. Bij klant-create moet de scan nog **geen klant** hebben; bij contact-create mag de scan al aan **dezelfde** `customerId` hangen, maar nog niet aan een **ander contact**. Details staan in de [OpenAPI-specificatie](https://tillor.eu/api/openapi.json). ## Workflow: scan koppelen [#workflow-scan-koppelen] * Tillor kan **exacte naam-matches** voor klanten en contacten tonen bij de kop van de dockkaart. * Als een **geldig** document al een bestaande klant met hetzelfde **rijksregisternummer** heeft, blijft de suggestie zichtbaar maar staat **Klant aanmaken op basis van scan** uit; de uitleg staat onder `customerActionsDisabledByNationalIdMatch` in de vertalingen. * **Nieuwe klant** vereist minimaal een **voornaam** in de scan; zonder voornaam staat aanmaken uitgeschakeld met de bijbehorende hint. ## Na het koppelen: welke gegevens worden overgenomen [#na-het-koppelen-welke-gegevens-worden-overgenomen] Na **koppeling** vult Tillor waar mogelijk de **klant** of het **contact** aan met gegevens uit de opgeslagen scan (voornaam, achternaam, geboortedatum, adresregel, postcode, gemeente, staat of provincie, land, geboorteplaats, persoonlijk nummer, voorkeurstaal). Voor **contacten** worden velden die niet op het contactmodel bestaan (zoals aparte postcode/kolom stad) niet weggeschreven; de rest wel. ## PDF exporteren en archief downloaden [#pdf-exporteren-en-archief-downloaden] * Gekoppelde scans ondersteunen **PDF-samenvatting exporteren** en **versleuteld archief downloaden** (AES-256; aantallen staan in de UI). * Onder **Instellingen** in de **organisatie-instellingendialoog** kun je **Identiteitsdocument automatisch printen bij koppeling** inschakelen. Dat vereist **PDF-afdrukken** en een geconfigureerd **PDF-printer-IP**. Labelteksten komen uit `modules.organizationSettings`. Open in de sidebar **Instellingen** onder **Ondersteuning** en ga naar de pagina App Marketplace. Klik bovenaan op de knop **Instellingen** om het dialoogvenster te openen (titel **Instellingen**). ## Ondersteunde documenttypen in de UI [#ondersteunde-documenttypen-in-de-ui] In Tillor worden documenten onder meer getoond als **ID-kaart**, **Paspoort**, **Rijbewijs** of **Document** wanneer het type niet zeker is (`modules.identityDocumentScans.documentKind`). ## Problemen oplossen [#problemen-oplossen] 1. **Geen scan in Tillor** - Controleer of de reader het juiste **IP/poort 8765** van de connector gebruikt, of de connector `TILLOR_API_URL` en `TILLOR_API_TOKEN` heeft, en of de connectorlogs geen uploadfout tonen. 2. **Scan verschijnt niet in het dock** - Alleen scans **zonder gekoppelde klant** worden in die lijst getoond; reeds gekoppelde scans vind je op het **klant- of contactprofiel**. 3. **Kan geen klant aanmaken uit scan** - Controleer of de scan een **voornaam** bevat; zo niet, vul die op de reader bij of koppel handmatig. 4. **Grote of trage uploads** - Houd zip-grootte en netwerk in de gaten; bij fouten na twee minuten opnieuw proberen of pakket verkleinen. # Park (/park) Het parkmodule is het centrale overzicht van je camping of recreatiepark. Hier beheer je standplaatsen (terreinen), bekijk je wie er momenteel verblijft via de interactieve plattegrond, en koppel je meters aan specifieke plaatsen. ## Plattegrond [#plattegrond] Ga naar **Park > Plattegrond** om een volledig kaartoverzicht van je park te zien. De plattegrond toont alle terreinen als gekleurde vlakken op een kaart: * **Groen** - de standplaats is vrij * **Oranje** - de standplaats is bezet Klik op een terrein op de kaart om een pop-up te openen met: * Naam en oppervlakte van de standplaats * Of het boekbaar is * De naam en contactgegevens van de huidige gast (als er iemand verblijft) * Een snelkoppeling naar de detailpagina van het terrein * Een knop om direct een nieuwe reservering aan te maken (alleen als de standplaats vrij is) ### Kaartinstellingen aanpassen [#kaartinstellingen-aanpassen] Linksonder op de plattegrond vind je een tandwiel-knop waarmee je de weergave kunt aanpassen: * **Stijl**: Kies tussen satelliet, hybride of stratenkaart * **Bewerkmodus**: Schakel in om terreingrenzen op de kaart te tekenen (zie hieronder) * **Markers tonen**: Schakel de kleurvlakken op de kaart aan of uit * **Labels tonen**: Toon of verberg de terreinnamen op de kaart (alleen beschikbaar als markers 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 bewerkmodus 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 **Bewerkmodus** 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** - standplaatsen die recent zijn aangemaakt * **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 (vaste prijs) * **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 bewerkmodus op de plattegrond, of vanuit de detailpagina van het terrein zelf. ### 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. Hier zie je: * **Naam, beschrijving en status** - inclusief of het terrein boekbaar is * **Oppervlakte** - berekend op basis van de ingetekende locatie op de plattegrond * **Aantal meters** - hoeveel meters er aan dit terrein zijn gekoppeld * **Huidige gast** - de naam van de klant die op dit moment verblijft (als van toepassing) ### 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 * Naam van de contracthouder van de 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 | | Huidig tarief | Het tarief dat momenteel in rekening wordt gebracht | | Toelichting huidig tarief | Uitleg over het huidige tarief | | Toeslag ligging | Extra bedrag voor de ligging van de standplaats | | Toeslag elektriciteit | Extra bedrag voor een elektriciteitsaansluiting | 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 die je wilt koppelen 3. Bevestig de koppeling 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 bekijken [#locatie-bekijken] Als er een locatie voor het terrein is ingetekend, zie je rechts op de detailpagina een kaartpreview met de contouren van de standplaats. ### Notities [#notities] Onderaan de detailpagina vind je een sectie voor interne notities. Gebruik dit om afspraken, bijzonderheden of andere relevante informatie over de standplaats bij te houden. ## 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 **Reset** 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 het formulier 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) * **Actie Type** - koppel een speciale actie aan het product (zie [Actietypes](#actietypes)) * **Klanttype** - beperk het product tot een specifiek klanttype (optioneel) * **Metertype** - koppel het product aan een metertype (optioneel) * **Thermische printkopieën** - aantal exemplaren dat automatisch wordt afgedrukt bij betaling (0 = uitgeschakeld) 4. Klik op **"Aanmaken"** Het product verschijnt direct in de lijst en is beschikbaar voor gebruik op facturen. 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 het potloodpictogram naast het product dat je wilt wijzigen 3. Pas de gewenste velden aan 4. Klik op **"Opslaan"** ## 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. ## Actietypes [#actietypes] Met het veld **Actie Type** koppel je een product aan een specifieke automatische actie die wordt uitgevoerd wanneer een factuur met dit product wordt betaald. ### Geen (standaard) [#geen-standaard] Het product heeft geen extra actie. Gebruik dit voor gewone tarieven en diensten. ### 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** selecteert, 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 gekozen bezetting tot de eerstvolgende geldige periodegrens van de ingestelde huurfrequentie. Zo lijnen alle klanten op termijn uit op dezelfde cyclus. Bij het toevoegen van zo'n factuurregel moet je op de factuur een actieve bezetting kiezen. Tillor bewaart daarbij ook een snapshot van de gekozen bezetting in de factuurregel, zodat je achteraf nog kunt zien welke bezetting bedoeld was, ook als die bezetting later verwijderd is. ## Extra factuurregels koppelen (JSON op het product) [#extra-factuurregels-koppelen-json-op-het-product] Je kunt op een product **extra factuurregels** laten toevoegen wanneer dat product als hoofdregel op een conceptfactuur wordt gekozen. De configuratie staat in **`metadata.invoiceBundle`** op het product en wordt **niet** in het productdialoog bewerkt - je vult dit via je eigen tooling of database-import (JSON). ### Vorm (`version` 1) [#vorm-version-1] * **`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 **`occupationId`** mee (de gekozen bezetting 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**) de gekozen **bezetting** 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 bezetting (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 **bezetting** hebt gekozen (idem bij opslaan zonder regeneratie zolang product/hoeveelheid/bezetting 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 **terrein van de gekozen bezetting**; 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 voor die NFC-toegangsmethode **`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). Zonder geldige **`endDate`** op die hoofdregel gebeurt er bij betaling geen automatische verlenging voor die NFC-regel. Als **`periodTo`** al later ligt, verandert er niets. Op de **gebeurtenissen**-tijdlijn van de factuur en van de klant verschijnt na een geslaagde verlenging een regel die verwijst naar deze betaling. Zonder gekozen bezetting op **Bezetting verlengen** worden er geen kindregels met deze automatische actie gegenereerd. **`occupationId`** op **`preview-bundle-lines`** blijft nodig waar meter-stappen het terrein van de bezetting 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. Als je een product bewerkt via **Administratie** > **Producten** > **Bewerken**, blijft een bestaande `invoiceBundle` in de metadata behouden zolang je die buiten het formulier niet wijzigt. Bij gewone bundelregels zie je op de PDF een **↳** bij de omschrijving in de tabel; **inforestappen** verschijnen als grijze toelichtingsregel zonder bedragkolommen. ### Voorbeeld (toelichting + NFC-toeslag + meterhuur) [#voorbeeld-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. ## Thermische printkopieën [#thermische-printkopieën] Met het veld **Thermische printkopieën** stel je in hoeveel exemplaren er automatisch worden afgedrukt op de thermische (kassa)printer wanneer een factuur met dit product wordt betaald. Stel dit in op **0** om automatisch afdrukken uit te schakelen. Het maximum is 10 kopieën 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 geeft je een volledig overzicht van alle verblijven op je park. Je registreert hier wie er wanneer komt, op welk terrein, met welk accommodatietype en hoeveel gasten. Vanuit een reservering kun je ook de check-in afhandelen en facturen raadplegen. ## Overzicht van alle reserveringen [#overzicht-van-alle-reserveringen] Ga naar **Reserveringen** in het hoofdmenu om de tijdlijnweergave te openen. Je ziet alle reserveringen gegroepeerd per plaatstype (zoals Huurcaravans, Jaarplaatsen en Tijdelijke plaatsen), uitgezet over een kalender. Zo zie je in één oogopslag welke plaatsen bezet zijn en wanneer. ## Een nieuwe reservering aanmaken [#een-nieuwe-reservering-aanmaken] Elke reservering is gekoppeld aan een bestaande klant. Zorg er dus voor dat de klant al bestaat in Tillor voordat je een reservering aanmaakt. Je kunt een klant toevoegen via **Klanten** in het hoofdmenu. Je maakt een nieuwe reservering aan vanuit 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 **"Opslaan"** om de reservering aan te maken ## 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 [#aantallen] Geef het aantal gasten op per categorie: * **Volwassenen** (minimaal 1) * **Kinderen** * **Peuters** 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 alleen terreinen die **geen statische bezetting** hebben en **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 ### 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 (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 de knop **"Opslaan"**. Met **"Annuleren"** herstel je de oorspronkelijke waarden * **Acties voor reservering** (rechterkant): Snelle acties voor deze reservering * **Facturen** (rechterkant): Een overzicht van alle facturen die gekoppeld zijn aan deze reservering 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 * **Stuur bevestigingsformulier naar klant (SMS)**: Stuur een sms naar de gast met een bevestigingsformulier * **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) * **Reservering bevestigen**: Bevestig de reservering handmatig ## 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] Ga naar **Taken** via de directe URL van je organisatie. Je ziet 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 een takenlijst nog geen taken bevat, zie je de melding *"Er zijn geen taken gevonden."* ## 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 het potloodicoon naast de huidige status 2. Typ eventueel in het zoekveld om te filteren 3. 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 4. De status wordt direct opgeslagen ### Wat zie je in het detailvenster? [#wat-zie-je-in-het-detailvenster] * **Status** - de huidige voortgang van de taak * **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 * **Taakbeschrijving** - een uitgebreidere omschrijving van de werkzaamheden * **Activiteit** - de activiteitengeschiedenis van de taak Als de deadline verstreken is, wordt de datum rood weergegeven zodat je dit direct opmerkt. Als een taak nog geen beschrijving heeft, zie je de melding *"Deze taak heeft nog geen beschrijving."* ## 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 verwijderpictogram is alleen zichtbaar op een brede schermbreedte. Op een smaller scherm open je de taakdetails door op de taaknaam te klikken. ## 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 | Het aanmaken van nieuwe taken en takenlijsten gebeurt op dit moment buiten het platform om, bijvoorbeeld via een import of directe configuratie. Neem contact op met je beheerder als je nieuwe taken wilt aanmaken. # 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: * **Totaal terreinen**: Het totale aantal terreinen in je park * **Recent toegevoegd**: Terreinen die de afgelopen 7 dagen zijn aangemaakt * **Boekbaar**: Terreinen die beschikbaar zijn voor reserveringen * **Niet boekbaar**: 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 of statisch (zie [Prijstypen](#prijstypen)) * **Statische prijs**: Alleen invullen als je "Statisch" hebt gekozen * **Boekbaar**: Vink aan als klanten dit terrein online mogen reserveren * **Locatie**: Teken optioneel de grenzen van het terrein in op de kaart 4. Klik op **"Terrein aanmaken"** 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 * De huidige bewoner (klant met een actieve bezetting) * 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) * **Nummer van de gasmeter**: Het meternummer van de gasmeter (optioneel). Als je dit invult, wordt automatisch een gastoeslag meegenomen in de tariefberekening. * **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 * **Huidig tarief**: Het tarief dat op dit moment gehanteerd wordt (optioneel, ter informatie) * **Toelichting huidig tarief**: Uitleg bij het huidige tarief * **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 er een gasmeter 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. Teken optioneel de locatie in op de kaart 4. Sla op en open de detailpagina 5. Koppel de relevante meter(s) aan het terrein 6. Ga naar het klantprofiel 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 de pagina: het totaal aantal toegangen, recente toegangen (afgelopen 24 uur), het aantal toegestane toegangen, het aantal geblokkeerde toegangen en het aantal actieve barrières. * **Barrièreknoppen** rechtsboven voor elke actieve barrière. * **Toegangslogboek** met alle toegangspogingen. ## Barrières bedienen [#barrières-bedienen] Voor elke actieve barrière verschijnt een knop rechtsboven op de pagina. ### 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. ### Automatisch openen bij kentekendetectie [#automatisch-openen-bij-kentekendetectie] Bij ondersteunde barrières vind je in hetzelfde uitklapmenu een optie **"Barriere openen bij LPR-detectie"**. Wanneer je dit aanvinkt, opent de barrière automatisch bij elke kentekendetectie - ook voor onbekende en geblokkeerde kentekens. Gebruik deze instelling dus met zorg. ## Toegangslogboek [#toegangslogboek] Het toegangslogboek toont alle toegangspogingen van je park. Je kunt de lijst filteren en doorzoeken op verschillende manieren: * **Zoekbalk**: Zoek op kentekenplaat of andere waarden. * **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. | | 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). ## Toegangsmethoden beheren via het klantprofiel [#toegangsmethoden-beheren-via-het-klantprofiel] Toegangsmethoden worden beheerd vanuit het klantprofiel. Open een klant en ga naar het tabblad **Toegangscontrole**. Je ziet daar twee secties: 1. **Toegangsmethoden** - een overzicht van alle toegangsmethoden die aan deze klant zijn gekoppeld. 2. **Toegangslogboek** - het toegangslogboek gefilterd op deze klant. ### Een toegangsmethode toevoegen [#een-toegangsmethode-toevoegen] 1. Ga naar het klantprofiel en open het tabblad **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). ### 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 zorgen ervoor dat klanten met een NFC-kaart of -sleutelhanger kunnen in- en uitchecken. ## 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 * **Toegang controleert** – het systeem checkt of de kaart geldig is * **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-kaart tegen de lezer. Tillor controleert of de kaart toegang heeft en logt de scan. De LED-ring geeft feedback (bijv. oranje als een kaart wordt gedetecteerd). ### Wat zie je in Tillor? [#wat-zie-je-in-tillor] * **Overzicht van controllers** – welke controllers zijn gekoppeld en wat is hun status * **Gebeurtenissen** – recente activiteit van de controller * **Instellingen** – je kunt instellingen aanpassen, de controller herstarten of firmware updaten ## 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 kaart is gekoppeld aan een klant en of toegang is ingesteld * Zorg dat de kaart goed tegen de lezer wordt gehouden Bij problemen hebben superadmins en support direct toegang tot de controllerlogs in Tillor, zodat we snel kunnen helpen. # 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] > het formulier onder de header. Wijzigingen worden automatisch naar de controller gestuurd. Hieronder vind je een overzicht van alle instellingen. ## Controller herstarten [#controller-herstarten] Als de controller niet goed reageert, kun je hem herstarten vanuit Tillor: 1. Ga naar **Controllers** > \[naam controller] 2. Klik op het actiemenu (⋮) en kies **Herstart controller** Of: op de Controllers-overzichtspagina kun je op het herstart-icoon in de tabelrij klikken. 3. 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: elk uur, elke dag of elke week. | | **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 én als het huidige tijdstip binnen het **updatevenster** valt. *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. Buiten dit venster worden geen updates 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. Vul **Update periode van** in (bijv. 02:00) 4. Vul **Update periode tot** in (bijv. 04:00) 5. 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, controleert de controller niet meer op nieuwe firmware. De controller blijft op de huidige versie. *Ofwel: het kastje haalt geen nieuwe software meer op.* **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 standaard **aan** (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. Binnen het updatevenster wordt de firmware gedownload 3. De LED-ring toont **rood** (vast) – de controller wordt bijgewerkt 4. De controller herstart automatisch 5. Na de herstart is de nieuwe versie actief # Overzicht (/mobiele-app) De Tillor mobiele app geeft je toegang tot de belangrijkste functies van het platform op je smartphone of tablet - handig als je onderweg bent of op het park rondloopt. ## De app downloaden [#de-app-downloaden] De app is beschikbaar voor: * **iOS** - download via de App Store * **Android** - download via Google Play Zoek op **"Tillor"** in de betreffende store. ## Inloggen [#inloggen] 1. Open de app na installatie 2. Voer je e-mailadres en wachtwoord in 3. Tik op **"Inloggen"** Je gebruikt dezelfde inloggegevens als voor de webversie. Er is geen apart account nodig. De app synchroniseert automatisch met de webversie. Wijzigingen die je in de app maakt, zijn direct zichtbaar in de browser en omgekeerd. ## Beschikbare functies [#beschikbare-functies] Via de mobiele app kun je: * **Klanten opzoeken** - snel een klantprofiel raadplegen * **Reserveringen bekijken** - zien wie er ingecheckt is of binnenkomt * **Facturen inzien** - openstaande facturen controleren * **Betalingen registreren** - contante betalingen of terminalbetalingen verwerken * **Meterstand uitlezen** - actuele meterstanden bekijken * **Notities toevoegen** - snelle notities koppelen aan klanten of reserveringen ## Apparaatinformatie [#apparaatinformatie] De app houdt automatisch bij welk apparaat verbonden is, inclusief: * Apparaatnaam en besturingssysteem * App-versie * Batterijstatus * Netwerkverbinding Deze informatie is beschikbaar voor beheerders via Tillor-support. ## Verbindingsproblemen [#verbindingsproblemen] Als de app geen verbinding kan maken: 1. Controleer of je internetverbinding actief is 2. Zorg dat je de nieuwste versie van de app hebt (update via App Store of Play Store) 3. Log uit en log opnieuw in 4. Neem contact op met de beheerder van jouw organisatie 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, toegangscontrollers en betaalterminals. 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`) | *Instellingen > 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 Osmond ID-scanners | Alleen bij Osmond-identiteitslezers | ### 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 Osmond-identiteitsscanners gebruikt. Zonder Osmond is deze poort niet nodig. ### 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 *Instellingen > 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. In Tillor zelf krijg je automatisch een melding ("Connector offline") wanneer de connector 5 minuten of langer geen heartbeat heeft gestuurd. ### 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, toegangscontrole-sync (`lastSyncAt`, `unsyncedEntries`) en Osmond WebSocket-status | | `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. ### Betaalterminals [#betaalterminals] Betalingen via een gekoppelde betaalterminal verlopen ook via de connector. Tillor stuurt de betaalaanvraag naar de connector, die hem doorstuurt naar de terminal. ## 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 *Instellingen > 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 onder **Instellingen → API-sleutels**. Je kunt ze ook via de API aanmaken (vereist een ingelogde sessie, geen API-sleutel): ``` POST /api/api-keys ``` **Headers:** * `Cookie` - Sessie-auth (vereist voor het aanmaken van sleutels) * `Content-Type: application/json` **Body:** ```json { "name": "Mijn integratie", "description": "Optionele beschrijving" } ``` **Response:** De ruwe sleutel wordt **eenmalig** teruggegeven. 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_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ``` Sleutels gebruiken het `tkn_`-voorvoegsel. Alle organisatie-endpoints vereisen ook het organisatie-ID: ```http X-Tillor-Org-Id: org_xxxxxxxx ``` ### 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 * Roteer sleutels periodiek via de app of `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://app.tillor.eu` (of je deployment-URL) **Organisatie-paden:** Voeg het organisatie-ID toe in het pad: ``` /api/orgs/:orgId/... ``` **Voorbeeld:** ``` GET https://app.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://app.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" ``` *** ## 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 Instellingen → 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 biedt pub/sub-toegang tot Tillor-events voor integraties. Credentials maak je aan in Tillor onder [Instellingen - Ontwikkelaars](https://tillor.eu/orgs/org_abc123/developers) (per organisatie). Toegang tot topics is strikt beperkt tot `tillor/{env}/{orgId}/integration` en sub-topics (`{env}` = `prod`, `staging` of `local`). ## 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:** Token verloopt na 1 minuut tot 24 uur (configureerbaar via `expiresInSeconds`) * **Ideaal voor:** Testen, tijdelijke verbindingen, of wanneer je tokens dynamisch ophaalt * **Aanmaken:** In Tillor onder Instellingen - Ontwikkelaars, of via `POST /api/orgs/:orgId/mqtt/credentials` met optioneel `{ "clientId": "...", "expiresInSeconds": 3600 }` * **Response:** `token` (gebruik als MQTT-wachtwoord), `clientId`, `brokerUrl`, `topicPrefix`, `expiresAt` * **Client-ID:** Gebruik exact de `clientId` uit de response bij verbinden (inclusief eventueel voorvoegsel voor de omgeving). 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 Instellingen - Ontwikkelaars, of via `POST /api/orgs/:orgId/mqtt/static-credentials` met optioneel `{ "name": "mijn-integratie" }` * **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/events`) * **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 ## 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. *** ## Event-formaat [#event-formaat] Elk SSE-bericht bevat: * **event** - Event key (bijv. `invoice:created`) * **data** - JSON-object met event-payload * **timestamp** - Unix timestamp (ms) *** ## 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" \ "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/: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 **Instellingen → Ontwikkelaars** bij het aanmaken van een webhook. * **enabled** - `true` om levering in te schakelen *** ## 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 } ``` | 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 | Zie [Voorbeelden](/ontwikkelaars/voorbeelden) voor volledige payload-voorbeelden. *** ## Handtekening verifiëren [#handtekening-verifiëren] Elke webhook bevat een eigen **signing secret** (64 hex-karakters, getoond bij aanmaken in *Instellingen → 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 wordt eenmalig getoond bij aanmaken. 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. *** ## Event types [#event-types] Event keys gebruiken het formaat `entity:action` of `entity:subresource:action`. Hieronder een selectie; de **volledige lijst** staat in Tillor onder [Instellingen → Ontwikkelaars](https://tillor.eu/orgs/org_abc123/developers) - in Tillor: Instellingen → Ontwikkelaars (per organisatie) bij het aanmaken van een webhook. | Event Key | Beschrijving | | --------------------------------------- | -------------------------------------------------------- | | `*` (wildcard) | Abonneer op alle events | | `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 | | `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:unlinked` | Identiteitsdocument-scan ontkoppeld van klant | | `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 | | `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:updated` | Betaling bijgewerkt | | `pdf:clear-ipad` | PDF gewist van iPad | | `pdf:to-ipad` | PDF naar iPad verzonden | | `reservation:created` | Reservering aangemaakt | | `reservation:updated` | Reservering 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 # BTW & Belasting (/boekhouden/belasting) Het belastingmodule beheert de BTW-configuratie voor je facturen en valideert automatisch de BTW-nummers van zakelijke klanten. ## BTW-tarieven [#btw-tarieven] BTW-tarieven worden ingesteld per product. Ga naar **Administratie > Producten** en open een product om het BTW-percentage aan te passen. Beschikbare tarieven worden aangemaakt door je Tillor-beheerder. ## BTW-nummer validatie [#btw-nummer-validatie] Wanneer je een BTW-nummer invoert bij een zakelijke klant, valideert Tillor dit automatisch via de Europese VIES-dienst. ### Hoe het werkt [#hoe-het-werkt] 1. Open het klantprofiel of het aanmaakformulier voor een nieuwe klant 2. Voer het BTW-nummer in (bijv. `NL123456789B01` of `BE0123456789`) 3. Het systeem controleert automatisch of het nummer geldig is 4. Bij een geldig BTW-nummer: * Wordt de officiële bedrijfsnaam automatisch ingevuld * Wordt het bedrijfsadres automatisch ingevuld * Verschijnt een groen vinkje 5. Bij een ongeldig BTW-nummer verschijnt een foutmelding 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 zakelijke klanten met een BTW-nummer is het verplicht om een **Peppol-ontvanger-ID** in te stellen 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. Het factuurtotaal wordt opgesplitst in: * Subtotaal (excl. BTW) * BTW per tarief * Totaal (incl. BTW) 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) Het boekhoudingsmodule 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 om 09:00 * **Boekhoudsystemen**: Integratie met Admisol, later Odoo * **Betaalmethodes**: Mollie, Ponto, Internal transfers ## Flow [#flow] ``` ┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ Ponto (bank) │ │ Mollie (online) │ │ Tillor │ └────────┬────────┘ └────────┬─────────┘ └────────┬────────┘ │ │ │ │ 5–10 min │ ingest 03:00 │ Handmatig └───────────────────────┼────────────────────────┘ │ ▼ ┌────────────────────────┐ │ Mollie Settlement │ │ (per dag, T+1) │ └────────────┬───────────┘ │ ▼ ┌────────────────────────┐ │ Betalingsrapport │ │ Gegenereerd 09:00 │ └────────────┬───────────┘ │ ▼ ┌────────────────────────┐ │ Boekhoudsoftware │ │ (Admisol, Odoo, …) │ └────────────────────────┘ ``` Alleen **Mollie** en **Internal transfers** worden naar de boekhouding gestuurd. Ponto gaat niet mee. # 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 activeren voor je organisatie [#peppol-activeren-voor-je-organisatie] Neem contact op met Tillor-support om je organisatie-Peppol-ID in te stellen. ### Peppol-ID instellen voor een klant [#peppol-id-instellen-voor-een-klant] Voor elke klant aan wie je via Peppol wilt factureren: 1. Open het klantprofiel 2. Ga naar het tabblad **"Facturatie"** 3. Voer het **Peppol ID** in het gelijknamige veld in 4. Klik op **"Opslaan"** ## Een Peppol-ontvanger opzoeken [#een-peppol-ontvanger-opzoeken] Weet je het Peppol ID van een klant niet? Gebruik het zoekpictogram naast het veld: 1. Ga naar het tabblad **"Facturatie"** van de klant 2. Klik op het zoekpictogram naast het veld **"Peppol ID"** 3. Zoek op BTW-nummer of bedrijfsnaam 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 bij het boeken: 1. Maak de factuur aan zoals gebruikelijk 2. Controleer dat het **Peppol ID** van de klant correct is ingesteld 3. Klik op **"Boeken"** 4. Tillor verstuurt de factuur automatisch via het Peppol-netwerk ### Verzendstatus controleren [#verzendstatus-controleren] Open de geboekte factuur en bekijk de activiteitsgeschiedenis onderaan de pagina. Hier zie je of de factuur succesvol is afgeleverd via Peppol of dat er een fout is opgetreden. # 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 | | ------------------------------ | --------------------------------- | | Factuur versturen | Factuur als PDF-bijlage | | Betaalherinnering sturen | Herinnering met openstaand bedrag | | Reserveringsbevestiging sturen | Bevestiging van de boeking | ### Altijd automatisch [#altijd-automatisch] | Gebeurtenis | E-mail aan klant | | ---------------------------- | ------------------------------ | | Wachtwoord herstellen | Herstelmail met activatielink | | Nieuwe gebruiker uitgenodigd | Welkomstmail met activatielink | 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] ### Vanuit een factuur [#vanuit-een-factuur] 1. Open de factuur via **Administratie > Facturen** 2. Klik op **"Versturen"** 3. Kies **E-mail** als kanaal 4. Bevestig de verzending ## 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) Het communicatiemodule brengt alle klantcommunicatie samen op één plek. Verstuur e-mails en bekijk de geschiedenis van telefoongesprekken en opmerkingen. ## 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 telefoongesprek kun je organisatiegegevens direct naar de beller sturen via sms. 1. Ga naar **Communicatie > Telefoongesprekken** 2. Open het gewenste gesprek 3. Klik op **Stuur organisatiegegevens naar de beller via SMS** De sms bevat een link naar een publieke organisatiepagina met contactgegevens. Bij het adres staan directe navigatielinks voor **Waze**, **Google Maps** en **Apple Maps**. 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 # Overzicht (/gebruikers) Gebruikersbeheer en organisatie-instellingen worden beheerd door je Tillor-beheerder. Neem contact op met Tillor-support voor het aanmaken of aanpassen van gebruikersaccounts. ## Je eigen account [#je-eigen-account] Inloggen, wachtwoord wijzigen en accountinstellingen vind je via je profielnaam rechtsboven in Tillor. Zie [Inloggen & Toegang](/inloggen) voor meer informatie over het beheren van je eigen account. ## API-sleutels [#api-sleutels] Voor technische integraties kun je API-sleutels aanmaken via **Ontwikkelaars**. 1. Ga naar **Ontwikkelaars** 2. Klik op **"Nieuwe API-sleutel"** 3. Geef de sleutel een beschrijvende naam 4. Kopieer de sleutel direct na aanmaken - deze wordt daarna niet meer volledig getoond Bewaar API-sleutels veilig. Deel ze nooit via onbeveiligde kanalen. Als een sleutel gecompromitteerd is, deactiveer hem dan onmiddellijk en maak een nieuwe aan. # Organisatie (/gebruikers/organisaties) Organisatie-instellingen zoals bedrijfsgegevens, logo, IBAN en factuurinstellingen worden beheerd via **Instellingen**. Sommige organisatie-instellingen kunnen alleen worden aangepast door je Tillor-beheerder of via Tillor-support. Neem contact op als je gegevens zoals het BTW-nummer of IBAN wilt wijzigen. ## Wat vind je in Instellingen? [#wat-vind-je-in-instellingen] Via **Instellingen** beheer je de apps en integraties die actief zijn voor jouw organisatie, zoals Voys telefonie, de Connector of koppelingen met boekhoudsoftware. ## Gebruikersrechten beheren [#gebruikersrechten-beheren] Op de pagina **Instellingen** kun je per organisatiegebruiker permissies aan- of uitzetten in de sectie **Gebruikersrechten**. 1. Ga naar **Instellingen** 2. Open de sectie **Gebruikersrechten** 3. Zoek de gebruikerkaart en pas de permissies aan 4. 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 wildcard-toegang (`*`) aan andere gebruikers worden gegeven. ## 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. # Consumptiebatches (/meterbeheer/consumptie-batches) Een **consumptiebatch** is een periode van meterverbruik voor een specifieke klant en meter. Tillor houdt automatisch bij wanneer een periode begint, wanneer deze eindigt, en of het verbruik al is gefactureerd. ## Levenscyclus van een batch [#levenscyclus-van-een-batch] Verticale weergave past op smalle schermen; de vorige horizontale versie werd daar vaak aan het rechteruiteinde afgekapt. ``` ┌───────────────────────────────┐ │ Aangemaakt (alleen start) │ └──────────────┬────────────────┘ │ uitlezingen ▼ ┌───────────────────────────────┐ │ Open (start + eind) │ └──────────────┬────────────────┘ │ sluiten ▼ ┌───────────────────────────────┐ │ Gesloten (vastgezet) │ └──────────────┬────────────────┘ │ factureren ▼ ┌───────────────────────────────┐ │ Gefactureerd (afgerond) │ └───────────────────────────────┘ ``` ### Statussen [#statussen] | Status | Beschrijving | | ---------------- | --------------------------------------------------------------- | | **Open** | Nieuwe uitlezingen worden automatisch toegevoegd aan de periode | | **Gesloten** | Periode is afgesloten, wacht op facturering | | **Gefactureerd** | Verbruik is verwerkt in een factuur | ## Wanneer wordt een batch aangemaakt? [#wanneer-wordt-een-batch-aangemaakt] * **Bij bezetting**: Wanneer je een klant koppelt aan een terrein met meters, en je een startstand opgeeft * **Bij handmatige uitlezing**: Wanneer je een meterstand invoert en er nog geen open batch bestaat voor die klant-meter combinatie ## Wanneer wordt een batch gesloten? [#wanneer-wordt-een-batch-gesloten] * **Bij beëindiging bezetting**: Wanneer de klant het terrein verlaat (bezetting wordt verwijderd) * **Bij meter correctie/reset**: Wanneer de meterstand omlaag gaat (bijv. meter vervangen of gecorrigeerd) – het systeem sluit de vorige periode, maakt een gesloten "sprong"-batch aan met negatief verbruik (bijv. -90 bij 100→10), en de volgende uitlezing start een nieuwe open batch * **Bij nieuwe bezetting**: Wanneer een andere klant (of dezelfde klant opnieuw) met expliciete startstanden wordt gekoppeld Als een meterstand omlaag gaat (correctie, reset of vervanging), sluit Tillor automatisch de lopende batch, maakt een gesloten "sprong"-batch aan met negatief verbruik, en opent direct een nieuwe batch bij de nieuwe stand. De sprong-batch is eenvoudig te herkennen en als betaald te markeren. De volgende uitlezing wordt aan de nieuwe batch toegevoegd. ## Voorbeelden [#voorbeelden] Klant betrekt terrein, verbruikt, en vertrekt. Het meest voorkomende scenario. ``` 1. Bezetting aangemaakt met startstand 100 m³ (15 jan) → Batch: start 100 m³, open 2. Uitlezingen: 150 m³ (20 jan), 200 m³ (25 jan) → Batch: start 100 m³, eind 200 m³, verbruik 100 m³ 3. Bezetting beëindigd met eindstand 250 m³ → Batch gesloten: verbruik 150 m³, wacht op facturering 4. Factureer verbruik → Batch gefactureerd, klaar ``` Bezetting loopt door; je factureert per periode zonder de batch te sluiten. ``` 1. Batch: 0 → 50 m³ (open) 2. Markeer als gefactureerd → Batch 1 gesloten, Batch 2 automatisch aangemaakt: 50 → (open) 3. Nieuwe uitlezingen: 75, 100 m³ → Batch 2: 50 → 100 m³, verbruik 50 m³ 4. Markeer weer als gefactureerd → Batch 2 gesloten, Batch 3: 100 → (open) ``` Alleen startstand, daarna correctie. Sprong-batch met verbruik -90 m³, daarna nieuwe open batch. ``` 1. Batch: start 100 m³ (15 jan), nog geen eindstand 2. Uitlezing op 16 jan: 10 m³ (meter gecorrigeerd) → Batch 1 gesloten (verbruik 0) → Sprong-batch: start 100 m³, eind 10 m³ (verbruik -90 m³) – gesloten → Nieuwe open batch: start 10 m³ 3. Volgende uitlezing: 20 m³ → batch: 10 → 20 m³, verbruik 10 m³ ``` Eerst normaal verbruik, daarna meter vervangen. Sprong-batch met verbruik -140 m³, daarna nieuwe open batch. ``` 1. Batch: start 100 m³ (15 jan), eind 150 m³ (20 jan) → verbruik 50 m³ 2. Uitlezing op 25 jan: 10 m³ (meter vervangen) → Batch 1 gesloten met eind 150 m³ (verbruik 50 m³) → Sprong-batch: start 150 m³, eind 10 m³ (verbruik -140 m³) – gesloten → Nieuwe open batch: start 10 m³ 3. Volgende uitlezing: 20 m³ → batch: 10 → 20 m³, verbruik 10 m³ ``` Uitlezing met dezelfde stand als start. Tillor past de startdatum aan. ``` 1. Batch: start 982 m³ (1 dec), open 2. Uitlezing 5 jan: 982 m³ (zelfde stand) → Start automatisch aangepast naar 5 jan → Periode toont "5 jan → ..." in plaats van "1 dec → ..." 3. Uitlezing 5 jan (later): 990 m³ → Verbruik 8 m³, periode "5 jan → 5 jan" ``` Klant verlaat terrein en komt later terug. Nieuwe batch, niet gekoppeld aan vorige. ``` 1. Klant A: batch 0 → 50 m³, bezetting beëindigd 2. Klant B: batch 55 → 100 m³, bezetting beëindigd 3. Klant A keert terug met startstand 110 m³ → Nieuwe batch: start 110 m³ (niet 50 m³) → Geen koppeling met vorige periode ``` Je had verbruik gefactureerd terwijl de bezetting doorging; daarna verwijder je de conceptfactuur. ``` 1. Open batch: 100 m³ (1 feb) → 200 m³ (7 mrt), bezetting loopt door 2. Factureer verbruik (conceptfactuur) → Batch A: 100 → 200 m³, gekoppeld aan factuur, afgesloten voor die factuur → Batch B automatisch: start 200 m³ (zelfde uitlezing als eind van A), open 3. Nieuwe uitlezing: 250 m³ (15 mrt) → Batch B: 200 → 250 m³ 4. Conceptfactuur verwijderen → Batch A: niet meer gekoppeld aan factuur, niet gefactureerd → Batch B (start nog steeds op 200 m³) wordt samengevoegd in A → Resultaat: één open batch 100 m³ → 250 m³, klaar om opnieuw te factureren ``` Twee aparte periodes op dezelfde meter: de tweede batch start **niet** op de eindstand van de eerste. Tillor voegt ze **niet** samen. ``` 1. Batch A: 12,49 m³ → 13,21 m³ (eindstand = uitlezing X) 2. Later een andere periode / sprong op de meter 3. Batch B: 0,10 m³ → 0,77 m³ (start = uitlezing Y, Y ≠ X) 4. Zelfde of andere factuur – maakt niet uit voor dit voorbeeld 5. Als je een factuur verwijdert die alleen bij A hoorde: → A wordt weer vrijgegeven voor facturering → Batch B blijft bestaan; wordt niet in A getrokken (start Y is niet hetzelfde als eind X) ``` Eerste factuur dekt periode tot stand X; daarna nieuwe uitlezingen en een **tweede** factuur op de voortzetting. Eerste factuur verwijderen verandert de tweede niet. ``` 1. Factuur 1: batch A 0 → 50 m³ → na facturering batch B: start 50 m³, open 2. Uitlezingen: 60, 75 m³ op batch B 3. Factuur 2: batch B gefactureerd → batch C: start 75 m³ 4. Factuur 1 verwijderen → A weer vrijgegeven → B hoort nog bij factuur 2 → wordt niet als “open voortzetting van A” gezien → Geen samenvoeging van A met B; C blijft de actieve voortzetting na factuur 2 ``` ## Facturering [#facturering] ### Manier 1: Via factuurknop (nieuwe factuur) [#manier-1-via-factuurknop-nieuwe-factuur] 1. Ga naar het klantprofiel (tab **Meterstanden**) 2. Klik op **"Factureer verbruik"** 3. Het systeem maakt een factuur aan met het verbruik als regel, of voegt het toe aan een bestaande conceptfactuur 4. De batches worden gemarkeerd als gefactureerd en gekoppeld aan de factuur ### Manier 2: Handmatig als gefactureerd markeren [#manier-2-handmatig-als-gefactureerd-markeren] Als je het verbruik buiten Tillor hebt gefactureerd: 1. Open de batch in het consumptie-overzicht (bij de meter of in het klantprofiel) 2. Klik op het euro-icoon (€) bij de batch 3. Bevestig met **"Ja, markeer als gefactureerd"** 4. De batch wordt afgesloten zonder factuurkoppeling Alleen handmatig gemarkeerde batches kunnen weer worden "teruggedraaid". Batches die aan een echte factuur zijn gekoppeld, kunnen niet ongedaan worden gemaakt – de factuur moet eerst worden verwijderd. ### Automatische nieuwe batch [#automatische-nieuwe-batch] Wanneer je een batch als gefactureerd markeert (en de bezetting nog loopt), maakt Tillor automatisch een **nieuwe open batch** aan die start bij de eindstand van de vorige. Zo loopt het verbruik door zonder hiaten. ``` Batch 1: 0 → 50 m³ (gefactureerd) ↓ Batch 2: 50 → (open, klaar voor nieuwe uitlezingen) ``` ## Factuur verwijderen [#factuur-verwijderen] Als je een **conceptfactuur** verwijdert waaraan verbruik was gekoppeld, past Tillor de consumptiebatches automatisch aan. ### Wat gebeurt er altijd? [#wat-gebeurt-er-altijd] * De koppeling met die factuur verdwijnt (`invoiceId`). * De batch staat weer als **niet gefactureerd** en kan opnieuw op een factuur terechtkomen. ### Wanneer worden twee batches weer één? [#wanneer-worden-twee-batches-weer-één] Soms had Tillor na facturering automatisch een **nieuwe open batch** gestart op de **eindstand** van de gefactureerde periode. Als je die factuur verwijdert, zoekt het systeem naar zo’n voortzetting: | Voorwaarde | Gevolg | | ------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------- | | Er is een andere batch met **dezelfde startstand** als de **eindstand** van de gefactureerde batch (zelfde uitlezing als koppelpunt) | Die voortzetting wordt **samengevoegd** in de oorspronkelijke batch. Je krijgt weer **één** doorlopende periode. | | De voortzetting is **nog niet gefactureerd** (geen factuur erop) | Samenvoegen is **toegestaan**. | | De voortzetting **begint op een andere uitlezing** dan de eindstand van de gefactureerde batch | **Geen** samenvoeging: het zijn twee losse periodes. | | De voortzetting is **al opnieuw gefactureerd** (andere factuur) | **Geen** samenvoeging: die periode blijft op de andere factuur staan. | ### Eindstand na samenvoegen [#eindstand-na-samenvoegen] Na samenvoegen hoort de batch weer **open** te zijn (als de voortzetting open was) en de **eindstand** is de actuele eindstand van die voortzetting — dus inclusief uitlezingen die **na** de factuur zijn binnengekomen. Als er technisch geen eindstand op de voortzetting stond maar er wél nieuwere uitlezingen op de meter zijn, vult Tillor de eindstand aan met de **meest recente uitlezing na het koppelpunt** (zelfde logica als bij het aanmaken van een batch). Alleen batches **zonder** factuurkoppeling kun je handmatig weer “niet gefactureerd” maken via het euro-icoon. Batches die aan een echte factuur hangen, volgen de regels hierboven pas **nadat** je die factuur verwijdert. ## Specifieke situaties [#specifieke-situaties] ### Periode zonder verbruik [#periode-zonder-verbruik] Als er een uitlezing komt met dezelfde stand als de start (verbruik = 0), past Tillor de startdatum automatisch aan. De weergegeven periode toont alleen de periode waarin daadwerkelijk verbruik plaatsvond. ### Klant keert terug [#klant-keert-terug] Wanneer een klant opnieuw een terrein betrekt na eerder vertrek: * Er wordt een **volledig nieuwe batch** aangemaakt * De batch start niet waar de vorige geëindigd was * Je kiest opnieuw een startstand (of de meterstand op dat moment) ### Meter gekoppeld aan meerdere klanten [#meter-gekoppeld-aan-meerdere-klanten] Elke klant-meter combinatie heeft zijn eigen batches. Hetzelfde terrein kan meerdere bezettingen hebben (bijv. verschillende periodes), elk met eigen verbruiksperiodes. ## Overzicht in de applicatie [#overzicht-in-de-applicatie] In het klantprofiel (tab Meterstanden) en bij meters zie je twee secties: * **Openstaand verbruik** (oranje): Batches die nog gefactureerd moeten worden. Sommige kunnen nog nieuwe uitlezingen ontvangen (als de bezetting loopt), andere zijn al afgesloten (bijv. na beëindiging bezetting) en wachten op facturering. * **Afgerekend verbruik** (groen/grijs): Batches die gefactureerd zijn – handmatig gemarkeerd of gekoppeld aan een factuur. # Overzicht (/meterbeheer) Het meterbeheersysteem maakt het mogelijk om meters op afstand uit te lezen zonder handmatig langs te gaan. ## Overzicht van meters [#overzicht-van-meters] ### Meters bekijken [#meters-bekijken] 1. Ga naar **Park** > **Meters** in het hoofdmenu 2. Je ziet een overzicht van alle meters met: * **Naam**: De naam van de meter * **Type**: Het type meter (water, elektriciteit of gas) * **Provider**: De leverancier of het type verbinding * **Terrein**: Het terrein waar de meter aan gekoppeld is (indien toegewezen) * **Laatste stand**: De meest recente meterstand met datum ### Meterdetails bekijken [#meterdetails-bekijken] Wanneer je op een meter klikt, zie je: * **Meterinformatie**: Serienummer, type, terrein * **Consumptie per klant**: Openstaand en afgerekend verbruik per klant-meter combinatie * **Activiteit**: Chronologische tijdlijn van wijzigingen aan de meter (o.a. gegevens en terreinkoppeling), onder de kaart **Verbruik** * **Status**: Batterijniveau, signaalkwaliteit, eventuele alarmen * **Huidige bewoner**: De klant met een actieve bezetting op het terrein ### Historiekgrafiek met aan/uit-status (schakelbare meters) [#historiekgrafiek-met-aanuit-status-schakelbare-meters] In de meterhistoriek zie je voor schakelbare meters (zoals ICY) nu ook of de meter op dat moment aan of uit stond: * **Groene lijn**: meter stond **aan** * **Rode lijn met gestippelde markeringen**: meter stond **uit** * Als er geen aan/uit-status beschikbaar is op een uitlezing, wordt die uitlezing als **aan** getoond ## Automatische uitlezing [#automatische-uitlezing] ### Hoe werkt het? [#hoe-werkt-het] De meters sturen automatisch hun stand door: 1. **Meter leest stand**: De meter meet continu het verbruik 2. **Data wordt verzonden**: Periodiek stuurt de meter de stand door (draadloos) 3. **Uitlezing wordt opgeslagen**: Tillor ontvangt en slaat de uitlezing op 4. **Je ziet de nieuwe stand**: De meterstand wordt automatisch bijgewerkt in Tillor ### Wanneer worden meters uitgelezen? [#wanneer-worden-meters-uitgelezen] * **Automatisch**: Meters sturen zelf hun stand door (meestal dagelijks of wekelijks) * **Geen handmatige actie nodig**: Je hoeft niets te doen, het gebeurt automatisch * **Real-time updates**: Je ziet nieuwe uitlezingen direct in Tillor ## Meters koppelen aan klanten [#meters-koppelen-aan-klanten] Meters worden **niet direct** aan klanten gekoppeld. De koppeling loopt via **terreinen** en **bezettingen**: * **Meter** → gekoppeld aan **terrein** (een standplaats, campingplek, etc.) * **Klant** → gekoppeld aan **terrein** via een **bezetting** (occupation) Een klant krijgt dus automatisch toegang tot alle meters op de terreinen waar hij een actieve bezetting heeft. ### Stap 1: Meter aan terrein koppelen [#stap-1-meter-aan-terrein-koppelen] 1. Ga naar **Park** > **Terreinen** 2. Klik op een terrein 3. Scroll naar de sectie **Meters** 4. Klik op **"Meter toevoegen"** 5. Selecteer een meter uit de dropdown (alleen meters zonder terrein worden getoond) 6. Klik op **"Meter toekennen"** ### Meter van terrein loskoppelen [#meter-van-terrein-loskoppelen] 1. Ga naar **Park** > **Terreinen** en open het terrein 2. Ga naar de kaart **Meters** en open bij de betreffende meter het **menu (...)** in de lijst 3. Kies **Loskoppelen van terrein** De meter staat daarna weer zonder terrein en kun je opnieuw toewijzen (bijvoorbeeld aan een ander terrein) via **Meter toevoegen** op een terrein. **Let op:** alleen op de **terreindetailpagina** (kaart Meters) zie je **Loskoppelen van terrein**. Op de **meterdetailpagina** (**Park** > **Meters** > meter) staat die actie niet in het menu. ### Stap 2: Klant aan terrein koppelen (bezetting) [#stap-2-klant-aan-terrein-koppelen-bezetting] 1. Ga naar **Klanten** en open een klant 2. Klik op het tabblad **Bezettingen** 3. Klik op **"Bezetting aanmaken"** 4. Selecteer het terrein (alleen beschikbare terreinen worden getoond) 5. Vul optioneel **startstanden** in voor de meters op dat terrein (handmatige waarde of bestaande uitlezing) 6. Bevestig met **"Bezetting aanmaken"** ### Wat gebeurt er daarna? [#wat-gebeurt-er-daarna] * Het systeem maakt automatisch consumptiebatches aan voor elke meter op het terrein * Nieuwe uitlezingen worden gekoppeld aan de klant * Het verbruik verschijnt in het klantprofiel (tab **Meters**) * Je kunt facturen genereren op basis van het verbruik ## Consumptie bekijken [#consumptie-bekijken] ### Per meter [#per-meter] 1. Open de meterdetails (Park > Meters > klik op een meter) 2. Je ziet de sectie **Consumptie** met: * **Openstaand verbruik**: Batches die nog gefactureerd moeten worden, per klant * **Afgerekend verbruik**: Reeds gefactureerde batches * Per batch: meterstanden (van → naar), verbruik en bedrag ### Per klant [#per-klant] 1. Open het klantprofiel (Klanten > klik op een klant) 2. Klik op het tabblad **"Meters"** 3. Je ziet alle meters van de terreinen waar deze klant een actieve bezetting heeft 4. Per meter zie je de consumptiebatches (openstaand en afgerekend) 5. Vanuit het klantprofiel kun je verbruik factureren via **"Factureer verbruik"** ### Openstaand verbruik overzicht [#openstaand-verbruik-overzicht] 1. Ga naar **Klanten** > **Openstaand verbruik** 2. Je ziet alle klanten met verbruik dat nog gefactureerd moet worden 3. Per klant zie je het totaalbedrag en kun je direct factureren ## Alarmen en waarschuwingen [#alarmen-en-waarschuwingen] ### Welke alarmen zijn er? [#welke-alarmen-zijn-er] Het systeem waarschuwt je automatisch bij afwijkingen die door de meter worden doorgegeven, zoals problemen met de verbinding of technische storingen. De exacte alarmmelding is afhankelijk van het type meter en de provider. ### Alarmen bekijken [#alarmen-bekijken] 1. Ga naar **Park** > **Meters** in het hoofdmenu 2. Meters met actieve alarmen hebben een driehoekje als indicator 3. Open de meterdetails om de lijst met actieve en opgeloste alarmen te bekijken 4. Per alarm zie je de alarmmelding, de startdatum en de status (Actief of Opgelost) ### Alarmen afhandelen [#alarmen-afhandelen] 1. Open de meterdetails en bekijk de alarmmelding 2. Neem de benodigde actie (bijvoorbeeld: meter controleren, verbinding controleren) 3. Wis de alarmen via het actiemenu van de meter (**"Alarmen wissen"**) ## Meterstatus [#meterstatus] ### Status-indicatoren [#status-indicatoren] Slimme meters (ICY en Tillor Hydrodigit) tonen een statusindicator die aangeeft of de meter recent heeft gecommuniceerd en of er actieve alarmen zijn. Als er een alarm actief is, of als de meter al meer dan een dag geen data heeft doorgestuurd, verandert de indicator van kleur. ### Batterijniveau [#batterijniveau] Voor meters die dat ondersteunen, zie je het batterijniveau als percentage in de meterdetails. ### Signaalkwaliteit [#signaalkwaliteit] Voor meters die dat ondersteunen, zie je de signaalkwaliteit als percentage in de meterdetails. ## Veelvoorkomende scenario's [#veelvoorkomende-scenarios] ### Scenario: Nieuwe meter installeren [#scenario-nieuwe-meter-installeren] 1. Je installeert een nieuwe meter op locatie 2. Je voegt de meter toe in Tillor: vul naam, type en provider in (bijv. serienummer voor ICY-meters of Dev EUI voor Tillor Hydrodigit) 3. Je koppelt de meter aan een terrein (Park > Terreinen > terrein > Meter toevoegen) 4. Wanneer een klant een bezetting krijgt op dat terrein, wordt het verbruik automatisch aan die klant gekoppeld 5. De meter begint met uitlezingen (automatisch of handmatig, afhankelijk van het type) ### Scenario: Factuur genereren op basis van verbruik [#scenario-factuur-genereren-op-basis-van-verbruik] 1. Aan het einde van de factureringsperiode 2. Ga naar het klantprofiel (tab **Meters**) of **Klanten** > **Openstaand verbruik** 3. Klik op **"Factureer verbruik"** 4. Tillor plaatst per verbruiksperiode eerst een **hoofdregel** (hoeveelheid/bedrag), met daaronder een **inforegel** met datum en meterstanden. Bestaat er al een geschikte conceptfactuur, dan worden deze regels **toegevoegd** in plaats van een nieuwe factuur te starten. 5. De consumptiebatches worden gekoppeld aan de factuur. 6. Verstuur de factuur naar de klant. ### Scenario: Alarm: geen uitlezing [#scenario-alarm-geen-uitlezing] 1. Je ontvangt een notificatie dat een meter geen uitlezing heeft doorgestuurd 2. Je bekijkt de meterdetails 3. Je controleert de status (batterijniveau, signaalkwaliteit) 4. Je neemt contact op met de klant of gaat langs om te controleren 5. Je lost het probleem op (bijvoorbeeld batterij vervangen) 6. Je wist de alarmen via **"Alarmen wissen"** in het actiemenu van de meter # Overzicht (/nfc) Met NFC-kaarten (ook wel RFID-kaarten) kunnen gasten op een eenvoudige manier gebruik maken van voorzieningen in je park - zoals de douche, de slagboom of een laadpaal. Ze hoeven alleen hun kaart voor de lezer te houden. ## Onderdelen [#onderdelen] # Tags beheren (/nfc/nfc-tags) NFC-tags zijn fysieke dragers (kaarten, armbanden, stickers of sleutelhangers) die je aan klanten koppelt. Daarmee kunnen ze zelfstandig gebruik maken van parkvoorzieningen zoals douches, slagbomen of laadpalen. ## NFC-tags van een klant bekijken [#nfc-tags-van-een-klant-bekijken] NFC-tags worden beheerd vanuit het klantprofiel. 1. Ga naar **Klanten** en open het klantprofiel. 2. Klik op het tabblad **"NFC Tags"**. Je ziet een tabel met alle NFC-tags die aan deze klant zijn gekoppeld. Per rij zie je: * **UID** - het unieke kaartnummer * **Type** - het tagtype (Kaart, Armband, Sticker of Sleutelhanger) * **Status** - Actief, Inactief of Geblokkeerd * **Saldo** - het huidige tegoed op de tag * **Laatst gebruikt** - de datum van de laatste wijziging * **Toegangsgroepen** - de toegangsgroepen waarvoor de tag is geautoriseerd ## Een NFC-tag koppelen aan een klant [#een-nfc-tag-koppelen-aan-een-klant] NFC-tags bestaan al in het systeem en worden vervolgens aan een klant toegewezen. Dit doe je vanuit het tabblad **"NFC Tags"** op het klantprofiel. 1. Ga naar het tabblad **"NFC Tags"** van de klant. 2. Klik op het dropdown-veld met de tekst **"Selecteer een kaart"**. 3. Kies de gewenste tag uit de lijst met beschikbare tags. 4. Klik op **"Toewijzen"**. De tag is nu gekoppeld aan de klant en verschijnt in de tabel. Alleen tags die nog niet aan een klant zijn gekoppeld, verschijnen in de lijst. ## Saldo bewerken [#saldo-bewerken] Je kunt het saldo van een tag aanpassen via het actiemenu. 1. Ga naar het tabblad **"NFC Tags"** van de klant. 2. Klik op het actiemenu (de drie puntjes) achter de tag. 3. Kies **"Saldo bewerken"**. 4. Kies een optie: * **"Saldo toevoegen"** - voegt een bedrag toe aan het huidige saldo. * **"Saldo instellen"** - stelt het saldo in op een exact bedrag. 5. Voer het bedrag in en klik op **"Toevoegen"** of **"Instellen"**. ## Een tag blokkeren of deblokkeren [#een-tag-blokkeren-of-deblokkeren] Een verloren of gestolen tag kun je blokkeren zodat die niet meer werkt bij de lezers. 1. Klik op het actiemenu achter de tag. 2. Kies **"Blokkeren"**. De status van de tag wijzigt naar **Geblokkeerd**. Om de blokkering op te heffen, open je hetzelfde menu en kies je **"Deblokkeren"**. ## Toegangsgroepen beheren [#toegangsgroepen-beheren] Je bepaalt per tag voor welke toegangsgroepen de tag geautoriseerd is. 1. Klik op het actiemenu achter de tag. 2. Kies **"Toegangsgroepen"**. 3. Vink de gewenste groepen aan of uit. De wijziging wordt direct opgeslagen. ## Een tag verwijderen van een klant [#een-tag-verwijderen-van-een-klant] Je kunt een tag loskoppelen van een klant zonder de tag te verwijderen. 1. Klik op het actiemenu achter de tag. 2. Kies **"Verwijderen van klant"**. De tag is daarna niet meer gekoppeld aan de klant en wordt opnieuw beschikbaar in de lijst voor toewijzing. ## Laag saldo melding versturen [#laag-saldo-melding-versturen] Als het saldo van een klant te laag is, kun je hen handmatig een melding sturen. 1. Klik op het actiemenu achter de tag. 2. Kies **"Laag saldo melding versturen"**. De klant ontvangt een notificatie. ## Details van een tag bekijken [#details-van-een-tag-bekijken] Via het actiemenu kun je de detailpagina van een tag openen. 1. Klik op het actiemenu achter de tag. 2. Kies **"Details bekijken"**. Op de detailpagina zie je het UID, het huidige saldo, de gekoppelde klant en de volledige transactiegeschiedenis van de tag. # Transacties (/nfc/nfc-transacties) Elke saldowijziging op een NFC-tag wordt als transactie vastgelegd. Via de transactiegeschiedenis zie je precies wanneer en waardoor het saldo is veranderd. ## Transacties bekijken [#transacties-bekijken] Transacties zijn te bekijken via de detailpagina van een NFC-tag. 1. Ga naar **Klanten** en open het klantprofiel. 2. Klik op het tabblad **"NFC Tags"**. 3. Klik op het actiemenu (de drie puntjes) achter de gewenste tag. 4. Kies **"Details bekijken"**. 5. Scroll naar de sectie **"Transacties"**. Je ziet een overzicht van alle transacties voor die tag, gesorteerd op datum (nieuwste bovenaan). ## Wat zie je per transactie [#wat-zie-je-per-transactie] Per transactie zie je de volgende informatie: * **Bedrag** - de saldowijziging (positief bij toevoeging, negatief bij gebruik) * **Reden** - de aanleiding van de transactie * **Controller** - het apparaat of systeem dat de transactie heeft veroorzaakt; staat er "Systeem", dan is de transactie automatisch of handmatig door de applicatie aangemaakt * **Datum** - datum en tijdstip van de transactie Transacties kunnen niet worden bewerkt of verwijderd. # Afdrukinstellingen (/printer/afdrukinstellingen) Via de afdrukinstellingen configureer je welke printers Tillor gebruikt voor facturen, bonnen en labels. De instellingen zijn per organisatie. ## Waar vind je de afdrukinstellingen? [#waar-vind-je-de-afdrukinstellingen] 1. Ga naar **Instellingen** in het hoofdmenu 2. Open **App Marketplace** 3. Klik op **Afdrukinstellingen** rechtsboven in de header 4. Het dialoogvenster opent met alle printerinstellingen ## Instellingen [#instellingen] | Instelling | Beschrijving | | ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | | **PDF-afdrukken** | Schakel dit in om facturen en documenten naar fysieke printers te sturen. Uitgeschakeld worden documenten alleen getoond of gedownload. | | **PDF-printer IP** | Het IP-adres van je A4/PDF-printer voor facturen en documenten. Bijvoorbeeld: `192.168.1.100`. | | **Thermische printer IP** | Het IP-adres van de thermische/kassa printer voor bonnen. Bijvoorbeeld: `192.168.1.101`. | | **Labelprinter IP** | Het IP-adres van de labelprinter (bijvoorbeeld voor QR-code labels). Bijvoorbeeld: `192.168.1.102`. | Printers moeten bereikbaar zijn op hetzelfde netwerk als de Connector. Zorg dat de Connector-app geïnstalleerd is en dat je printers een vast IP-adres hebben of via DHCP een vast adres krijgen. ## Instellingen opslaan [#instellingen-opslaan] Klik op **Instellingen opslaan** om je wijzigingen door te voeren. De instellingen worden direct actief voor je organisatie. # Overzicht (/printer) Met de printerintegratie kun je facturen, bonnen en andere documenten direct vanuit Tillor naar een aangesloten printer sturen - zonder dat je het document eerst hoeft te downloaden. ## Printerinstellingen configureren [#printerinstellingen-configureren] Configureer je printers via **Instellingen** > **App Marketplace** > **Afdrukinstellingen**. Je kunt daar de IP-adressen van je PDF-printer, thermische printer en labelprinter invoeren. Zie [Afdrukinstellingen](/printer/afdrukinstellingen) voor een uitgebreide uitleg. Printers worden gekoppeld via de Connector-service die lokaal in je netwerk draait. Zorg dat de Connector-app geïnstalleerd is en dat je printers bereikbaar zijn op het netwerk. ## Documenten afdrukken [#documenten-afdrukken] ### Een factuur afdrukken [#een-factuur-afdrukken] 1. Open de factuur via **Administratie > Facturen** 2. Klik op de printknop (printericon rechtsboven) 3. Kies de gewenste printer uit de lijst 4. Bevestig de afdrukopdracht ### Een bon afdrukken bij POS-betaling [#een-bon-afdrukken-bij-pos-betaling] Bij het verwerken van een betaling via de kassa kun je direct een bon afdrukken: 1. Verwerk de betaling zoals gebruikelijk 2. Na bevestiging verschijnt de optie **"Bon afdrukken"** 3. Klik hierop om de bon naar de bonnenprinter te sturen Bonnenprinters (thermische printers) worden automatisch herkend als ze via de connector zijn gekoppeld. Ze gebruiken een vereenvoudigd formaat, aangepast voor kleine papierformaten. ## Afdrukken naar tablet [#afdrukken-naar-tablet] Wil je een factuur tonen aan een klant zonder hem af te drukken? Stuur de factuur dan naar een gekoppelde tablet: 1. Open de factuur 2. Klik op **"Bekijken op tablet"** 3. De factuur-PDF verschijnt op de tablet zodat de klant hem kan ondertekenen of bekijken # LED-ring kleuren (/controllers/troubleshooting/led-ring) De controller heeft een LED-ring die je in één oogopslag laat zien wat de status is. *De gekleurde lampjes vertellen je of alles goed gaat of dat er iets mis is.* Hieronder vind je een overzicht van alle kleuren en hun betekenis. ## Verbindingsstatus [#verbindingsstatus] Deze kleuren zie je wanneer de controller opstart of verbinding maakt: | Kleur | Betekenis | | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | | **Cyaan (blauwgroen)** | Controller zoekt netwerk of is verbonden met internet | | **Blauw (gestippeld, roterend)** | Bluetooth provisioning actief – open de Tillor app om WiFi in te stellen | | **Paars** | Controller wacht op koppeling – ga in Tillor naar Controllers en klik op **Goedkeuren** (✓) om de controller te koppelen | | **Blauw** | Controller maakt verbinding met Tillor | | **Groen** | Alles werkt – controller is verbonden en klaar voor gebruik | | **Oranje** | Verbinding verbroken – controller probeert opnieuw te verbinden | | **Rood (knipperend)** | Er gaat iets mis – controller wordt bijgewerkt of gaat herstarten | | **Rood (vast)** | Controller wordt bijgewerkt of gaat herstarten – even geduld | ## Ruststand (comet-animatie) [#ruststand-comet-animatie] Wanneer er geen actieve status is, zie je een langzaam bewegende "komeet" over de ring: | Kleur | Betekenis | | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | | **Zacht cyaan** | Controller is in ruststand, geen actieve verbinding | | **Wit** | Controller scant op NFC-kaarten – houd een kaart tegen de lezer | | **Rood (bewegende komeet)** | NFC-lezer werkt niet – controleer de aansluiting of herstart de controller | ## NFC-kaart gedetecteerd [#nfc-kaart-gedetecteerd] Een NFC-kaart wordt gelezen door de controller wanneer je hem tegen de lezer houdt. | Kleur | Betekenis | | --------------------------------------------------------------------------------------------------------------- | ----------------------------- | | **Oranje (pulserend)** | Er ligt een kaart op de lezer | | **Cyaan (korte puls)** | Kaart is van de lezer gehaald | ## Problemen? [#problemen] ### Blauwe gestippelde cirkel [#blauwe-gestippelde-cirkel] Als de ring een **gestippelde blauwe cirkel** toont die roteert, wacht de controller op WiFi-configuratie via Bluetooth. Open de Tillor app op je telefoon en volg de instructies om WiFi in te stellen. ### Rode ring bij het scannen [#rode-ring-bij-het-scannen] Als de ring **rood** is terwijl je verwacht dat er gescand wordt, kan de NFC-lezer niet goed starten. Controleer: * Of de controller goed is aangesloten * Of er geen losse kabels zijn * Of je de controller even uit en weer aan zet ### Geen wit komeet, wel groen [#geen-wit-komeet-wel-groen] Als de ring **groen** blijft en niet overgaat naar een witte komeet, is de NFC-scanning mogelijk nog niet actief. Wacht een paar seconden – na de groene status zou de witte komeet moeten verschijnen. ### Controller reageert niet [#controller-reageert-niet] * Controleer de stroomaansluiting * Controleer of WiFi bereikbaar is * Kijk naar de kleur van de ring – oranje betekent dat er verbindingsproblemen zijn * Zie [Verbindingsproblemen](/controllers/troubleshooting/verbinding) voor meer hulp bij WiFi en Tillor-verbinding # Verbindingsproblemen (/controllers/troubleshooting/verbinding) Als de controller niet goed verbindt, helpt de LED-ring je om te zien waar het misgaat. Hieronder vind je veelvoorkomende problemen en oplossingen. ## Ring blijft paars [#ring-blijft-paars] **Betekenis:** De controller wacht op adoptie – hij is nog niet gekoppeld aan Tillor. *Het kastje staat klaar, maar weet nog niet van welke organisatie hij is.* **Oplossing:** 1. Ga in Tillor naar **Controllers** 2. Zoek de controller in de lijst (op basis van het eFuse ID) 3. Klik op **Goedkeuren** (✓) om de controller aan je organisatie te koppelen ## Ring blijft oranje [#ring-blijft-oranje] **Betekenis:** De verbinding met Tillor is verbroken. De controller probeert automatisch opnieuw te verbinden. *Het kastje heeft het contact met Tillor verloren en probeert het weer te krijgen.* **Mogelijke oorzaken:** * **WiFi is weggevallen** – controleer of het WiFi-netwerk bereikbaar is * **Internetstoring** – de controller kan Tillor niet bereiken * **Tillor is tijdelijk niet bereikbaar** **Oplossing:** * Wacht een paar minuten – de controller probeert zelf opnieuw te verbinden * Controleer of andere apparaten op hetzelfde netwerk internet hebben * Controleer de [WiFi-instellingen](/controllers/settings) van de controller (SSID, wachtwoord) * Zorg dat de controller binnen bereik van het WiFi-accesspoint staat ## Ring blijft cyaan of blauw [#ring-blijft-cyaan-of-blauw] **Betekenis:** De controller zoekt nog een netwerk of maakt verbinding met Tillor. **Oplossing:** * Wacht 1–2 minuten – bij het opstarten duurt het even * Als het te lang duurt: controleer of de controller WiFi-credentials heeft (na adoptie worden deze automatisch ingesteld) * Controleer of het WiFi-signaal sterk genoeg is ## Controller verschijnt niet in Tillor [#controller-verschijnt-niet-in-tillor] **Betekenis:** De controller is nog niet zichtbaar voor adoptie. **Mogelijke oorzaken:** * Controller heeft geen internetverbinding * Controller en Tillor gebruiken niet hetzelfde netwerk/bereik * Controller is nog aan het opstarten **Oplossing:** 1. Controleer of de controller stroom heeft en de LED-ring reageert 2. Zorg dat de controller verbonden is met WiFi (of Ethernet) en internet heeft 3. Wacht tot de controller in de lijst verschijnt – dit kan even duren 4. Vernieuw de Controllers-pagina in Tillor ## Adoptie mislukt of credentials worden geweigerd [#adoptie-mislukt-of-credentials-worden-geweigerd] Adoptie is het koppelen van de controller aan je organisatie; credentials zijn de verbindingsgegevens die daarbij horen. **Betekenis:** De koppeling met Tillor is niet gelukt. *Het kastje kon niet aan je organisatie worden gekoppeld.* **Oplossing:** * Controleer of je beheerdersrechten hebt in Tillor * Probeer de adoptie opnieuw * Neem contact op met support als het probleem aanhoudt – zij hebben toegang tot de logs ## OTA-update blijft hangen of faalt [#ota-update-blijft-hangen-of-faalt] Een OTA-update is een firmware-update via het internet. **Betekenis:** De firmware-update is niet voltooid. *Het kastje probeerde nieuwe software te installeren, maar dat is niet goed gegaan.* **Oplossing:** * Wacht tot het [updatevenster](/controllers/updates) actief is – updates vinden alleen binnen dat venster plaats * Controleer of de controller een stabiele internetverbinding heeft * Bij herhaalde mislukkingen: de controller keert automatisch terug naar de vorige werkende versie * Zet tijdelijk [OTA-updates overslaan](/controllers/updates#ota-updates-overslaan) aan als je de controller eerst stabiel wilt krijgen # HTTP-voorbeelden (/ontwikkelaars/voorbeelden/http) ## API-request met cURL [#api-request-met-curl] ```bash curl -X GET "https://app.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" ``` ## API-sleutel aanmaken [#api-sleutel-aanmaken] ```bash curl -X POST "https://app.tillor.eu/api/api-keys" \ -H "Cookie: session=..." \ -H "Content-Type: application/json" \ -d '{"name": "Mijn integratie", "description": "Optionele beschrijving"}' ``` ## Webhook aanmaken [#webhook-aanmaken] ```bash curl -X POST "https://app.tillor.eu/api/orgs/org_abc123/webhooks" \ -H "x-api-key: tkn_xxx" \ -H "X-Tillor-Org-Id: org_abc123" \ -H "Content-Type: application/json" \ -d '{ "url": "https://jouw-server.com/webhooks/tillor", "subscribedEventKeys": ["invoice:created", "invoice:paid", "customer:updated"], "enabled": true }' ``` # Voorbeelden-overzicht (/ontwikkelaars/voorbeelden) # SSE-voorbeelden (/ontwikkelaars/voorbeelden/sse) ## cURL [#curl] ```bash curl -N -H "x-api-key: tkn_xxx" \ -H "X-Tillor-Org-Id: org_abc123" \ "https://app.tillor.eu/api/orgs/org_abc123/realtime/subscribe" ``` ## Node.js [#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); } } } ``` ## SSE-bericht [#sse-bericht] Een SSE-bericht (text/event-stream) ziet er zo uit: ``` event: invoice:paid data: {"event":"invoice:paid","data":{"invoice":{"id":"inv_def456uvw","displayId":"2025-00123","status":"BOOKED","paymentStatus":"PAID","amountTotal":200,"paidDate":"2025-03-09T12:15:00.000Z","customerId":"cust_abc123xyz"},"payment":{"id":"pay_ghi789rst","amount":200,"status":"PAID","method":"BANCONTACT","provider":"MOLLIE","paidAt":"2025-03-09T12:15:00.000Z"}},"timestamp":1735811700000} ``` De `data`-regel bevat het volledige JSON-object (event + data + timestamp). # Webhook-voorbeelden (/ontwikkelaars/voorbeelden/webhooks) Dezelfde events als bij [SSE](/ontwikkelaars/voorbeelden/sse). De payload-structuur is identiek. ## Wrapper-structuur [#wrapper-structuur] ```json { "event": "entity:action", "data": {}, "timestamp": 1735689600000 } ``` ## Webhook POST-voorbeeld [#webhook-post-voorbeeld] Een volledige webhook POST-request ziet er zo uit: ```http POST /webhooks/tillor HTTP/1.1 Host: your-server.com Content-Type: application/json { "event": "invoice:paid", "data": { "invoice": { "id": "inv_def456uvw", "displayId": "2025-00123", "status": "BOOKED", "paymentStatus": "PAID", "amountTotal": 200.0, "paidDate": "2025-03-09T12:15:00.000Z", "customerId": "cust_abc123xyz" }, "payment": { "id": "pay_ghi789rst", "amount": 200.0, "status": "PAID", "method": "BANCONTACT", "provider": "MOLLIE", "paidAt": "2025-03-09T12:15:00.000Z" } }, "timestamp": 1735811700000 } ``` ## Event payloads [#event-payloads] ### customer:created [#customercreated] ```json { "event": "customer:created", "data": { "id": "cust_abc123xyz", "displayId": 1042, "firstName": "Jan", "lastName": "Jansen", "email": "jan.jansen@voorbeeld.nl", "phone": "+31612345678", "address": "Hoofdstraat 42", "city": "Amsterdam", "zipCode": "1012 AB", "country": "NL", "customerType": "STANDARD", "status": "DEFAULT", "createdAt": "2025-03-09T10:30:00.000Z", "updatedAt": "2025-03-09T10:30:00.000Z" }, "timestamp": 1735806600000 } ``` ### invoice:paid [#invoicepaid] ```json { "event": "invoice:paid", "data": { "invoice": { "id": "inv_def456uvw", "displayId": "2025-00123", "status": "BOOKED", "paymentStatus": "PAID", "amountTotal": 200.0, "paidDate": "2025-03-09T12:15:00.000Z", "customerId": "cust_abc123xyz" }, "payment": { "id": "pay_ghi789rst", "amount": 200.0, "status": "PAID", "method": "BANCONTACT", "provider": "MOLLIE", "paidAt": "2025-03-09T12:15:00.000Z" } }, "timestamp": 1735811700000 } ``` ### controller:adoption:requested [#controlleradoptionrequested] ```json { "event": "controller:adoption:requested", "data": { "adoptionId": "adopt_jkl012mno", "efuseId": "a1b2c3d4e5f6", "requestedFromIp": "192.168.1.42", "isNew": true }, "timestamp": 1735809000000 } ``` ### nfc-tag:presented [#nfc-tagpresented] ```json { "event": "nfc-tag:presented", "data": { "id": "nfc_123abc456", "uid": "04A1B2C3D4E5F6", "type": "CARD", "balance": 25.5, "blockedAt": null, "customerId": "cust_abc123xyz" }, "timestamp": 1735807500000 } ``` ## Enums [#enums] | Entity | Enum | Waarden | | ---------- | --------------- | ---------------------------------------------------------------------------- | | Customer | `customerType` | `STANDARD`, `WORKER_RENTAL_CARAVAN`, `WORKER_TOWING_CARAVAN` | | Invoice | `status` | `DRAFT`, `BOOKED`, `REVERSED` | | Invoice | `paymentStatus` | `UNPAID`, `PAID`, `PARTIALLY_PAID`, `OVERPAID` | | Payment | `status` | `PENDING`, `AUTHORIZED`, `PAID`, `CANCELED`, `FAILED`, `EXPIRED`, `REFUNDED` | | Payment | `method` | `UNKNOWN`, `BANCONTACT`, `IDEAL`, `CREDIT_CARD`, `CASH` | | Payment | `provider` | `MOLLIE`, `MANUAL`, `PONTO` | | Controller | `type` | `SHOWER`, `BARRIER` | | NfcTag | `type` | `CARD`, `KEYFOB` | # Overzicht (/boekhouden/betalingsrapporten) Een **betalingsrapport** is een dagelijks overzicht van alle betalingen op een bepaalde datum. Nummering: `PAYR/YYYY/DDD` (bijv. PAYR/2026/054). **Inhoud:** Bekende betalingen (gekoppeld aan factuur), onbekende betalingen, Mollie-settlement, bankkosten. **Generatie:** Elke werkdag 09:00 (ma–za), vanaf 1 januari tot gisteren. Als Mollie actief is, wordt de settlement voor die datum gezocht en gekoppeld. Geen Mollie-settlement op zat/zon → rapport bevat alleen handmatige betalingen. Maandag settlement → maandag-rapport bevat Mollie. ## Betalingsrapport openen en navigeren [#betalingsrapport-openen-en-navigeren] 1. Ga naar `Boekhouden > Betalingsrapporten`. 2. Open een rapport in de lijst. 3. Op de detailpagina gebruik je rechtsboven de pijlen om naar het vorige of volgende rapport te gaan. Bij hover op een pijl zie je extra context (rapportnummer, datum en aantal betalingen) van het rapport waar je naartoe navigeert. # Overzicht (/communicatie/providers) Binnen **Communicatie > Providers** beheer je externe providers die gesprekken en bijhorende communicatie-acties mogelijk maken. ## Beschikbare providers [#beschikbare-providers] # Twilio (/communicatie/providers/twilio) De Twilio-providerpagina is in voorbereiding. Binnenkort vind je hier: * hoe je Twilio koppelt in Tillor * welke gespreks- en sms-functionaliteit ondersteund wordt * welke instellingen je nodig hebt voor productie # Voys Telefonie (/communicatie/providers/voys) Met de Voys-integratie koppelt Tillor automatisch inkomende telefoongesprekken aan klantprofielen. Zo zie je direct wie er belt en heb je de klantgegevens bij de hand. ## Voys instellen [#voys-instellen] De Voys-integratie wordt ingeschakeld via **Instellingen** (de app-marktplaats). Zoek naar de Voys-app en volg de installatiestappen. Je hebt een actief Voys VoIP-account nodig. Na het instellen herkent Tillor automatisch telefoonnummers van bestaande klanten wanneer zij bellen. ## URLs voor Voys terugvinden [#urls-voor-voys-terugvinden] Voor webhooks, bellernaam-lookup en toegangscodes gebruik je de URLs die Tillor voor je genereert. 1. Ga naar **Instellingen > App Marketplace** 2. Zoek de kaart **Voys** 3. Klik op **Meer info** 4. In het venster **Te configureren URLs** kopieer je de juiste URL per doel Je vindt hier onder andere: * **Gespreksnotificaties** - webhook-URL voor gesprekgebeurtenissen * **Webhook voor Beller Lookup** - URL voor caller name lookup in je Voys call plan * **XML Phonebook** - URL voor VoIP-telefoons om het telefoonboek op te halen * **Toegangscodes** - URL voor barrier/slagboom-bediening via call plan Gebruik in Voys call plan dezelfde variabelen als in Tillor vermeld staan (zoals `{callerid}`, `{did}`, `{callername}`, `{callid}` en `{code}`). ## Gespreksnotificaties in Voys configureren [#gespreksnotificaties-in-voys-configureren] 1. Open in Voys de module [Gespreksnotificaties](https://freedom.voys.nl/redirect/CallNotification) 2. Klik op **Toevoegen** 3. Kies bij package/service voor **Aangepast** 4. Plak de Tillor-URL uit **Gespreksnotificaties** 5. Sla op Voys-documentatie: * [Gespreksnotificaties](https://help.voys.nl/gespreksnotificaties) ## Bellernamen (caller lookup) in call plan configureren [#bellernamen-caller-lookup-in-call-plan-configureren] Voor bellernaam-lookup gebruik je in Voys een webhook-stap in het belplan. 1. Open in Tillor de URL **Webhook voor Beller Lookup** (via **Instellingen > App Marketplace > Voys > Meer info**) en kopieer die URL 2. Open in Voys de module [Webhooks](https://help.voys.nl/webhooks) en maak een webhook met deze URL-template 3. Activeer die webhook in je belplan via de webhook-stap 4. Gebruik in het URL-template de variabelen die Voys ondersteunt (`{callerid}`, `{did}`, `{callername}` en indien nodig `{code}`) 5. Stel in de webhook-routering **Variabele naam beller** in zodat de geretourneerde naam getoond wordt op toestellen Meer achtergrond: * [Webhooks](https://help.voys.nl/webhooks) * [Wat zijn gespreksnotificaties (verschil met webhooks)](https://help.voys.nl/gespreksnotificaties) ## Gesprekken bekijken [#gesprekken-bekijken] Ga naar **Communicatie > Telefoongesprekken** voor een overzicht van alle geregistreerde telefoongesprekken. Per gesprek zie je: * **Datum en tijdstip** van het gesprek * **Beller** - het telefoonnummer en de herkende klant (indien gekoppeld) * **Duur** - de gespreksduur * **Opname** - een afspeelknop als er een gespreksopname beschikbaar is * **Transcript** - een automatisch gegenereerde samenvatting van het gesprek (indien beschikbaar) ### Gesprek koppelen aan een klant [#gesprek-koppelen-aan-een-klant] Als een beller niet automatisch herkend wordt: 1. Open het gesprek in de lijst 2. Klik op **"Klant koppelen"** 3. Zoek de klant op naam of telefoonnummer 4. Bevestig de koppeling Het telefoonnummer wordt dan opgeslagen in het klantprofiel voor toekomstige herkenning. ## Gespreksopnames [#gespreksopnames] Als gespreksopnames zijn ingeschakeld in je Voys-account, kun je deze terugluisteren vanuit Tillor: 1. Ga naar **Communicatie > Telefoongesprekken** 2. Klik op het afspeelpictogram bij het gewenste gesprek 3. De opname wordt direct in de browser afgespeeld Gespreksopnames kunnen privacygevoelige informatie bevatten. Zorg dat je voldoet aan de toepasselijke privacywetgeving (AVG/GDPR) bij het opnemen van gesprekken. Informeer bellers dat gesprekken worden opgenomen. ## Gesprekstranscripties [#gesprekstranscripties] Voys-gesprekken kunnen automatisch worden getranscribeerd en samengevat. De samenvatting verschijnt bij het gesprek en helpt je snel de inhoud te begrijpen zonder de volledige opname te beluisteren. # Betaalmethodes (/boekhouden/betalingsrapporten/betaalmethodes) Betalingsrapporten bevatten betalingen uit verschillende bronnen. Alleen **Mollie** en **Internal transfers** worden naar de boekhouding gestuurd. | Methode | In rapport | Naar boekhouding | | -------------------------------------------------------------------------------------- | ---------- | ---------------- | | [Mollie](/boekhouden/betalingsrapporten/betaalmethodes/mollie) | Ja | Ja | | [Ponto](/boekhouden/betalingsrapporten/betaalmethodes/ponto) | Nee | Nee | | [Internal transfers](/boekhouden/betalingsrapporten/betaalmethodes/internal-transfers) | Ja | Ja | # Internal transfers (/boekhouden/betalingsrapporten/betaalmethodes/internal-transfers) Interne overschrijvingen (Internal transfers) zijn handmatig geregistreerde betalingen in Tillor, bijvoorbeeld contant of pin. Ze hebben methode `INTERNAL_TRANSFER` en worden **wel** meegestuurd naar de boekhouding. ## In betalingsrapporten [#in-betalingsrapporten] * Betalingen met `method: INTERNAL_TRANSFER` gaan mee naar Admisol en andere boekhoudsystemen * Ze worden geboekt op de gekoppelde factuur en klant * Handmatige betalingen zonder Mollie-settlement (bijv. weekend) verschijnen in het rapport # Mollie (/boekhouden/betalingsrapporten/betaalmethodes/mollie) Mollie-betalingen (iDEAL, creditcard, Bancontact, terminal, etc.) worden gesynchroniseerd en gekoppeld aan betalingsrapporten via de settlement. ## Mollie-settlements [#mollie-settlements] Mollie-settlements: T+0. Tillor zoekt de settlement die op de rapportdatum is aangemaakt (zelfde dag) en koppelt alle betalingen. Geen settlement (bijv. weekend) → geen Mollie-deel in het rapport. Settlement-only betalingen (niet in Tillor) komen als "onbekende Mollie-betaling" in het rapport. ## Mollie-betalingen [#mollie-betalingen] Ingestie elke nacht 03:00. Een betaling komt alleen in een rapport als het in de settlement van die datum zit. Bekend = Tillor-metadata (factuur/klant); onbekend = suspense (499000) tenzij `tillor.bookkeeping` metadata. ## Mollie-metadata [#mollie-metadata] Mollie slaat metadata op bij elke betaling. Tillor gebruikt drie soorten in de `tillor`-namespace: koppelingsmetadata (Tillor schrijft terug naar Mollie zodat de betaling herkenbaar is), ingestie-hints (jij zet ze bij het aanmaken van de Mollie-betaling om Tillor's gedrag te sturen) en directe boekhoudmetadata (volledige bypass van Tillor naar de boekhouding). ### Tillor-koppelingsmetadata [#tillor-koppelingsmetadata] ```json { "tillor": { "paymentId": "clx123...", "invoiceId": "clx456...", "customerId": "clx789...", "paymentGroupId": "pmt_grp_abc", "descriptionSuffix": "Parkeerplaats P1" } } ``` Zorgt voor webhook-koppeling en "bekende" betalingen in het rapport. Tillor schrijft deze velden zelf bij naar Mollie zodra een betaling aan een factuur, klant of betalingsgroep gekoppeld wordt. | Veld | Beschrijving | | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `paymentId` | Tillor payment ID | | `invoiceId` | Tillor invoice ID | | `customerId` | Tillor customer ID | | `paymentGroupId` | Tillor [betalingsgroep](/betalingsverwerking#betalingsgroepen) ID. Aanwezig zodra de betaling in een groep zit, ook als die groep nog niet aan een factuur is gekoppeld. | | `descriptionSuffix` | Optioneel: tekst die achter het factuurnummer komt in de betalingsbeschrijving. Formaat: `INV/XXXX/XXXX - {suffix}` (bijv. "Parkeerplaats P1" → "INV/2024/0001 - Parkeerplaats P1") | ### Ingestie-hints voor betalingsgroepen [#ingestie-hints-voor-betalingsgroepen] Bij het aanmaken van een Mollie-betaling kun je hints meegeven die Tillor bij ingestie gebruikt om de betaling automatisch in een [betalingsgroep](/betalingsverwerking#betalingsgroepen) te bucketen. Handig voor POS-shifts, activiteitenboekingen, tafelbetalingen, of elk scenario waar je meerdere betalingen wil bundelen voor je een factuur boekt. ```json { "tillor": { "paymentGroupName": "Yoga sunrise - Lake Como", "paymentGroupExternalId": "act_42" } } ``` Eén van beide velden is genoeg om de auto-bucketing te activeren. Beide samen is de aanrader wanneer het label in jouw systeem kan veranderen (activiteitenhernoeming, shift-relabel, ...) maar het onderliggende ID stabiel blijft. | Veld | Beschrijving | | ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `paymentGroupName` | Optioneel: zichtbaar label van de groep in Tillor. Wordt gebruikt om bestaande open groepen op naam te matchen, of als label van een nieuw aangemaakte groep. | | `paymentGroupExternalId` | Optioneel: stabiele dedupe-sleutel uit jouw systeem. Wanneer aanwezig matcht Tillor hierop in plaats van op naam, en wordt het label automatisch bijgewerkt naar de laatste `paymentGroupName`. | **Wat doet Tillor bij ingestie?** 1. Tillor zoekt een **open** betalingsgroep met deze externe ID (of, als `paymentGroupExternalId` ontbreekt, met deze naam). 2. Geen match? Er wordt een nieuwe open groep aangemaakt. De naam is `paymentGroupName` als die meegegeven is, anders `paymentGroupExternalId`. 3. De betaling wordt aan de groep gekoppeld zodra ze de status PAID heeft. 4. Toegewezen groepen (al gekoppeld aan een factuur) worden niet hergebruikt; late betalingen met dezelfde sleutel komen in een verse open groep terecht. Stond de betaling al in Tillor vóór je `paymentGroupName` of `paymentGroupExternalId` op de Mollie-betaling zette? Dan wordt de groep alsnog gevuld zodra de betaling in Tillor **betaald** is, **niet** aan een factuur hangt en **nog** niet in een groep zit. Dat kan bij de volgende **Mollie-ingestie**, bij een **inkomende Mollie-webhook**, of als je handmatig **sync-mollie-payments-by-status** draait over de relevante betalingen (bijv. filter op status PAID voor een backfill). Pre-tag elke Mollie-betaling vanuit je POS of activiteitenbackend met deze hints, en je hoeft Tillor pas te benaderen op het moment dat een shift sluit of een activiteit factureerbaar wordt. Je vindt de groep dan direct terug onder *Administratie > Betalingen > Betalingsgroepen*. Een gegroepeerde betaling kan niet individueel aan een factuur hangen. Stuur je per ongeluk zowel `paymentGroupName`/`paymentGroupExternalId` als `invoiceId` mee, dan wint de groep en wordt `invoiceId` genegeerd. ### Directe boekhoudmetadata (`tillor.bookkeeping`) [#directe-boekhoudmetadata-tillorbookkeeping] Onbekende Mollie-betalingen worden standaard op suspense (499000) geboekt. Met `tillor.bookkeeping` worden ze direct op de opgegeven klant geboekt: ```json { "tillor": { "bookkeeping": { "customerCode": "100001", "documentType": "INV", "department": "a", "fiscalYear": "2026", "documentNumber": "00042" } } } ``` | Veld | Beschrijving | | ---------------- | ---------------------------------------- | | `customerCode` | Klantcode in boekhouding – **verplicht** | | `documentType` | Documenttype (bijv. INV, UF) | | `department` | Afdeling | | `fiscalYear` | Boekjaar | | `documentNumber` | Documentnummer | `tillor.bookkeeping` kan gebruikt worden om andere interne systemen van klanten aan te sluiten op de betalingsverwerking. Zo kunnen betalingen direct boekhoudkundig correct verwerkt worden, bijvoorbeeld horeca-inkomsten op een specifieke horeca-wachtrekening of parkeerbetalingen op de juiste kostenplaats. Als `bookkeeping` aanwezig is, wordt de betaling **niet** ingest in Tillor; de boekhoudmetadata wordt gebruikt bij het bouwen van het boekhoudrapport. # Ponto (/boekhouden/betalingsrapporten/betaalmethodes/ponto) Ponto maakt via open banking verbinding met je bankrekening en haalt transacties automatisch op. ## Flow [#flow] 1. **Transacties**: Elke 5–10 min haalt Tillor banktransacties op via Ponto 2. **Gestructureerde mededeling**: +++123/4567/89012+++ of factuurnummer (INV-2024-001) wordt uitgelezen 3. **Koppeling**: Tillor zoekt een factuur die overeenkomt → betaling wordt aangemaakt en gekoppeld 4. **Provider**: `PONTO`, methode `PONTO_BANK_TRANSFER` ## In betalingsrapporten [#in-betalingsrapporten] Ponto-betalingen worden **niet** meegenomen in boekhoudrapporten. Alleen Mollie en Internal transfers gaan naar de boekhouding. Ponto is bedoeld voor automatische koppeling aan facturen in Tillor. Klant boekt over met gestructureerde mededeling → Ponto haalt op → Tillor matcht factuur → betaling + factuur betaald. # Admisol (/boekhouden/betalingsrapporten/boekhoudsystemen/admisol) Admisol is een boekhoudpakket dat Tillor ondersteunt voor het versturen van betalingsrapporten. Betalingsrapporten worden omgezet naar Admisol XML en automatisch of handmatig naar Admisol gestuurd. ## Automatisch versturen [#automatisch-versturen] Wanneer een betalingsrapport wordt aangemaakt of bijgewerkt: 1. Het systeem controleert of Admisol is geïnstalleerd voor de organisatie 2. Het rapport wordt omgezet naar Admisol XML 3. Het XML wordt naar Admisol gestuurd ## Handmatig versturen [#handmatig-versturen] 1. Ga naar **Betalingsrapporten** 2. Open het rapport dat je wilt versturen 3. Klik op **"Verstuur naar Admisol"** ## Welke betalingen gaan mee? [#welke-betalingen-gaan-mee] Alleen betalingen met: * **Provider**: `MOLLIE` of * **Methode**: `INTERNAL_TRANSFER` (interne overschrijvingen) Ponto-betalingen worden niet meegestuurd naar Admisol. ## Admisol-specifieke instellingen [#admisol-specifieke-instellingen] Bij de Admisol-integratie kun je o.a. instellen: * Mollie-leverancierscode (AD\_ID) * Documenttypes voor facturen en settlements * Standaard afdeling en boekjaar * Rekening voor bankkosten en suspense # Boekhoudsystemen (/boekhouden/betalingsrapporten/boekhoudsystemen) Tillor ondersteunt integratie met boekhoudsoftware voor het versturen van betalingsrapporten. Betalingsrapporten worden omgezet naar het formaat van je boekhoudpakket en automatisch of handmatig verstuurd. ## Ondersteunde systemen [#ondersteunde-systemen] | Systeem | Status | | ------------------------------------------------------------------ | ----------- | | [Admisol](/boekhouden/betalingsrapporten/boekhoudsystemen/admisol) | Ondersteund | | [Odoo](/boekhouden/betalingsrapporten/boekhoudsystemen/odoo) | Gepland | ## Algemeen [#algemeen] * **Automatisch**: Bij aanmaak of update van een betalingsrapport wordt het naar het geïnstalleerde boekhoudpakket gestuurd * **Handmatig**: Via Betalingsrapporten → open rapport → "Verstuur naar \[systeem]" * **Welke betalingen**: Alleen `MOLLIE` en `INTERNAL_TRANSFER`. Ponto gaat niet mee. # Odoo (/boekhouden/betalingsrapporten/boekhoudsystemen/odoo) Integratie met Odoo is gepland. Tillor ondersteunt momenteel [Admisol](/boekhouden/betalingsrapporten/boekhoudsystemen/admisol) voor het versturen van betalingsrapporten.