Handleiding HorecaPOS
Deze handleiding is er in drie delen: eerst voor het personeel (bediening), dan voor de manager en tot slot voor de beheerder. Elk deel bouwt voort op het vorige: een manager kan alles wat de bediening kan, en de beheerder kan alles.
Wat jouw rol precies mag, stelt de beheerder in bij Instellingen → Rechten. Zie je een knop niet, dan heeft je rol daar (nog) geen recht op.
Deze handleiding staat ook in de kassa: tik op het ©-knopje rechtsonder op elk scherm en kies Handleiding, of open http://<kassa-pc>:3000/handleiding. Zie ook de introductie en de API-documentatie.
Deel 1 · Personeel
Aan de slag
Aanmelden. Open de kassa op de kassa, tablet of telefoon en voer je pincode in (4 tot 8 cijfers). Je ziet daarna de tafelplattegrond.
Een tafel openen. Tik op een tafel. Een vrije tafel krijgt een nieuwe bestelling; bij een bezette tafel ga je verder met de bestelling die er al staat. Bovenaan wissel je tussen de ruimtes (bijvoorbeeld Zaal en Terras). Voor de balie gebruik je Snelle verkoop, voor afhaalbestellingen Afhalen.
Bestellen. Kies een productgroep en tik op de producten. Ze komen op de bon links. Kies eventueel eerst de gang (1 = meteen, 2 en 3 wachten tot je ze afroept). Tik op Bestellen: dan gaan de werkbonnen naar de keuken en de bar. Zolang je nog niet op Bestellen hebt getikt, kun je regels gewoon weghalen.
Afrekenen. Tik op Afrekenen, kies Pin / Bancontact, Contant of Cadeaubon, eventueel een fooi, en bevestig. Bij pinnen start de betaling vanzelf op de betaalautomaat. De bon wordt geprint; je kunt hem ook mailen.
Afmelden. Meld je af als je klaar bent, zodat niemand anders onder jouw naam werkt. Na 8 uur word je vanzelf afgemeld.
Geen internet? De kassa werkt gewoon door. Staat er bovenin Geen internet · pin handmatig, pin het bedrag dan op de betaalautomaat zelf en kies in het afrekenscherm Al gepind op de terminal.
Meerdere groepen aan één tafel
Aan één tafel kunnen meerdere groepen zitten, elk met een eigen rekening en eigen bon.
- Tik op een tafel: vrij = nieuwe bestelling; één groep = meteen die groep; meerdere groepen = eerst kiezen, of + Nieuwe groep (naam mag leeg).
- In het bestelscherm staat bovenaan de groepenbalk: wisselen tussen de groepen, + Groep, Naam groep (bv. "Jansen") en Splitsen / verplaatsen.
- Splitsen / verplaatsen: kies per regel hoeveel er mee gaan (bij 3× Pils bv. 1) en naar welke groep, of maak een nieuwe groep. Zo verplaats je iets dat op de verkeerde rekening staat, of splits je achteraf "ieder betaalt zijn eigen deel". Raakt een groep leeg, dan vervalt hij.
- Meerdere delen tegelijk: met + Nog een deel zet je een deel klaar en kies je het volgende (bv. vis en een Dry Martini naar tafel 2, de rest naar tafel 35). Een deel kan ook naar + Andere tafel (daar een nieuwe groep). Met Verplaatsen gaat alles in één keer. ½ splitst een regel doormidden, ook een halve fles (0,667 wordt 2 × 0,3335).
- Samenvoegen: alles van een of meer andere tafels (of groepen aan deze tafel) op deze rekening, in één keer.
- België: in één keer verdelen of samenvoegen is bij de zwarte doos één tafelwissel, zoals de FOD dat wil (UC242, UC251, UC252, UC4119bis). Wordt er na het bestellen iets geschrapt of komt er korting op een al bestelde regel, dan gaat dat mee met het volgende bericht van die tafel (bestellen, voorlopige rekening, tafelwissel) en anders in de verkoop: de oude regel negatief en de nieuwe positief (UC226, UC4102, UC4104, UC4107, UC4110).
- Op het tafelscherm toont een oranje bolletje hoeveel groepen er zijn; het bedrag is het totaal van alle groepen.
- Kassabon en keukenbon tonen "Tafel 5 - groep 2" of "Tafel 5 - Jansen".
Rekening splitsen bij afrekenen
Afrekenen werkt zoals altijd: Alles in één keer. In het afrekenscherm kan de rekening nu ook gesplitst worden, met de knoppen onder Terug en Afrekenen (zo blijven die altijd in beeld, zonder te vegen):
- Gelijk verdelen: kies met − en + over hoeveel personen (standaard het aantal gasten, of 2 als de kassa geen personen bijhoudt). Het scherm toont het bedrag per persoon; iedereen betaalt zijn deel met pin, contant of cadeaubon (met fooi als je wilt). Na elk deel telt het af ("nog 3 personen"); de laatste betaalt precies de rest.
- Eigen bedrag: iemand betaalt een vast bedrag (bv. € 20); de rest blijft open.
- Per product…: opent Splitsen / verplaatsen om producten naar een aparte rekening te zetten en die apart af te rekenen (zoals hierboven).
Een deelbetaling boekt alleen de betaling; de rekening blijft open en in het bestelscherm staat "al betaald … · nog open …". De bon (met alle betalingen erop) komt bij de laatste betaling, zoals bij gewoon afrekenen. Pinnen via de koppeling gaat voor precies het deelbedrag. Is er al deels betaald, dan kunnen er geen regels meer naar een andere groep en geen kortingen meer bij; weghalen kan alleen als er genoeg open staat. Elke deelbetaling komt in het logboek.
Snelle verkoop en afhalen (zonder tafel)
Rechtsboven op het tafelscherm staan Snelle verkoop en Afhalen. Beide openen meteen een bestelling zonder tafel. Snelle verkoop is verkoop aan de balie (btw ter plaatse); Afhalen gebruikt het btw-tarief voor afhalen van elk product. Met "Naam klant" zet je er een naam bij; die staat op de bon ("Afhalen – Jansen") en bovenaan de werkbon. Open bestellingen zonder tafel staan onder de ruimteknoppen ("Zonder tafel: Afhalen #12 – Jansen"), zodat je ze terugvindt. Ga je terug zonder iets te verkopen, dan verdwijnt de lege bestelling vanzelf.
Beide knoppen zijn per zaak aan of uit te zetten in Instellingen → Zaak, direct onder licht/donker thema (standaard aan). Uit = knop verborgen; bestellingen zonder tafel die al openstaan blijven zichtbaar.
Bezorgen en tijdvakken
Bestellingen die je aan de kassa zelf aanneemt, bijvoorbeeld telefonisch of aan de balie, met dezelfde regels als de webshop: bezorggebieden en een maximum aantal bestellingen per tijdvak. Aanzetten bij Instellingen → Zaak → Bezorgen en tijdvakken, direct onder de knoppen Snelle verkoop en Afhalen (standaard uit).
- Knop Bezorgen op het tafelscherm (naast Afhalen): vul naam, telefoon en adres in (met Snel adres invoeren aan: postcode en huisnummer opzoeken). De kassa zoekt het bezorggebied en toont de bezorgkosten, het minimum en "gratis vanaf". Valt het adres buiten de gebieden, dan kan het niet.
- Bezorggebieden: op postcode (reeksen en losse postcodes, bv.
5000-5049, 5051, 5052 AB), binnen een straal in km van de zaak (hemelsbreed) of een gebied op de kaart dat je zelf intekent. Straal en gebied werken alleen met Nederlandse adressen (ligging via PDOK). Per gebied: bezorgkosten, minimum, gratis vanaf en extra minuten; het eerste gebied van boven dat past geldt, dus de soorten zijn te combineren (bv. eerst een paar postcodes, dan een gebied, dan een straal voor de rest). Geen gebieden ingesteld = overal bezorgen, zonder kosten of minimum. De gebieden van de webshop stel je apart in (webshopbeheer). - Gebied op de kaart: kies bij een bezorggebied de soort Gebied op de kaart en dan Tekenen op de kaart. Klik op de kaart om punten te zetten (minstens 3); sleep een punt om het te verplaatsen, klik op een punt om het weg te halen en sleep het bolletje halverwege een rand voor een punt ertussen. De kaart toont ook de straal-gebieden en de zaak. De kaarttegels komen van OpenStreetMap, dus voor de kaart is internet nodig; het bezorgen zelf niet (behalve het opzoeken van het adres). Kan het adres niet worden opgezocht, dan meldt de kassa dat in plaats van "buiten de bezorggebieden".
- Bezorgkosten staan als regel "Bezorgkosten" op de bestelling en worden na elke wijziging opnieuw berekend (gratis vanaf, geen producten = geen kosten), zolang er nog niets betaald is. Onder het minimum kan afrekenen niet; het bestelscherm toont hoeveel er nog bij moet, met de knop Toch afhalen (bezorgkosten en minimum vervallen).
- Tijd: Zo snel mogelijk (nu + bezorgtijd, plus de extra minuten van het gebied) of een tijdvak van vandaag. Met openingstijden bij Thuisbezorgd gelden die ook hier.
- Maximum per tijdvak (0 = geen maximum; tijdvak 5 tot 60 minuten): voor Afhalen en Bezorgen samen; ook webshopbestellingen in de kassa tellen mee. Staat er een maximum, dan vraagt ook Afhalen om een tijd en zijn volle tijdvakken niet te kiezen. Twee kassa's tegelijk het laatste plekje: één krijgt het.
- Op de werkbon staan adres, naam, telefoon en tijd; in "Zonder tafel" en bovenaan de werkbon bv. "Bezorgen – 18:30 Jansen".
Uitbreidingen (alles standaard uit, zonder deze instellingen werkt het precies zoals hierboven):
- Eigen openingstijden voor afhalen en bezorgen (per weekdag, bv.
16:00-21:00of11:30-14:00, 17:00-22:00; na middernacht mag:17:00-01:00; leeg = die dag gesloten). Uit = zoals voorheen (de tijden bij Thuisbezorgd, als die er zijn, anders de hele dag). - Gesloten dagen (bv.
25-12-2026, 26-12-2026): dan geen afhalen of bezorgen. - Vooruit bestellen: 0 (alleen vandaag, zoals voorheen) tot 14 dagen. In het venster Bezorgen/Afhalen kies je dan eerst de dag; een latere dag staat op de werkbon voor de tijd.
- Druk: zoveel minuten extra bij "zo snel mogelijk" (kassa én webshop). Ook snel te zetten met de knop Webshop in de bovenbalk.
- Belgische adressen (postcode van 4 cijfers): bij een straal of gebied op de kaart zoekt de kassa de ligging op via OpenStreetMap (Nominatim; straat en plaats nodig).
- De webshop volgt de kassa: de kassa is leidend. De webshop gebruikt dan de bezorggebieden, bezorg- en afhaaltijd, het tijdvak, het maximum per tijdvak, de openingstijden (als ze hier zijn ingesteld), gesloten dagen en dagen vooruit van de kassa, en telt de bestellingen die aan de kassa zijn aangenomen mee in het tijdvak. Uit = de webshop heeft zijn eigen instellingen (webshopbeheer), zoals voorheen. Afhalen/bezorgen aan of uit blijft van de webshop.
Code: lib/bezorgen.ts, routes/bezorgen.ts, BezorgDialoog.tsx, BezorgInstellingen.tsx, BezorgKaart.tsx en lib/kaart.ts (de kaart, zonder extra pakket; dezelfde code staat als public/kaart.js in de webshop).
Telefonie: klant herkennen bij een telefonische bestelling
Instellingen → Telefonie (standaard uit; uitzetten bewaart alles). Twee losse schakelaars:
- Klant opzoeken op telefoonnummer bij bezorgen en afhalen: tik je in het bezorgscherm het nummer in, dan toont de kassa de klant met adres en de eerdere bestellingen; Gegevens overnemen vult naam, e-mail en adres in. Werkt ook zonder telefooncentrale.
- Nummerherkenning: belt een klant, dan meldt de telefooncentrale (of het toestel, de FRITZ!Box, het modem of de Android-telefoon) het nummer. Op de schermen verschijnt een melding met wie er belt: naam, adres, de laatste bestellingen (met de gerechten en het bedrag, ook van de webshop, Thuisbezorgd en de bezorgplatforms), het totaal en een reservering. Met Bezorgen aannemen of Afhalen aannemen opent het bezorgscherm met alles al ingevuld (met Bezorgen en tijdvakken aan); de bestelling komt bij het gesprek en de melding verdwijnt op alle schermen. Knop 📞 in de bovenbalk: de gesprekken van de laatste 24 uur. Per scherm uit te zetten (Meldingen op dit scherm tonen).
Gezocht wordt in de klantenkaart, de bezorg- en afhaalbestellingen van de kassa, de webshop, Thuisbezorgd, de bezorgplatforms en de reserveringen. Nummers worden gelijkgemaakt (+31 6 1234 5678, 0031612345678 en 06-12345678 zijn hetzelfde; ook Belgische nummers).
Hoe het nummer binnenkomt (meer tegelijk kan; hetzelfde gesprek telt één keer):
| Bron | Voor | Instellen |
|---|---|---|
| Webhook / action URL | 3CX (CRM-integratie), Aircall, Voys / VoIPGRID, Yeastar P-serie, toestellen met een action URL bij een inkomend gesprek (Fanvil, Grandstream, Mitel 6800/6900, Snom, Yealink: werkt met elke centrale en provider), koppeldiensten (Zapier, Make, n8n, Power Automate) | het adres uit Instellingen → Telefonie (/api/telefonie/oproep?sleutel=...&nummer=...), GET of POST, JSON, formulier of query; ook via het portaal: https://<portaal>/telefonie/<kassa-id>/oproep?sleutel=... |
| Asterisk (AMI) | Asterisk, FreePBX, Issabel, VitalPBX, Grandstream UCM | adres, poort (5038; Grandstream UCM 7777), AMI-gebruiker en wachtwoord (rechten call) |
| FRITZ!Box | FRITZ!Box met telefonie | adres (fritz.box) en poort 1012; callmonitor één keer aanzetten met #96*5* |
| USB-caller-ID-modem | analoge vaste lijn met nummerweergave | seriële poort (COM3, /dev/ttyACM0), baud en init-opdracht (standaard AT+VCID=1) |
| Android-telefoon | de ingebouwde telefoon van een Android-telefoon van de zaak | HorecaPOS-app op die telefoon, Instellingen → Telefonie → Deze telefoon koppelen (Android 10+: de app als app voor nummerweergave kiezen) |
Het antwoord bevat de beller, ook als contact (firstname, lastname, phone, email, address) voor een CRM-sjabloon van 3CX. Uitgaande en interne gesprekken worden niet getoond; Alleen deze lijnen beperkt tot bepaalde lijnen of toestellen. Gesprekken worden na de bewaartermijn gewist (standaard 30 dagen, AVG). Testgesprek doet alsof een nummer belt.
Code: apps/pos-server/src/lib/telefonie.ts, routes/telefonie.ts, packages/shared/src/telefonie.ts; schermen Telefonie.tsx, BezorgDialoog.tsx; Android android-app/native/java/Beller*.java. Logboek: Telefonie.
Eigen bezorgers: ritten, kasafdracht en track & trace
Voor zaken met eigen bezorgers. Zet het aan bij Instellingen → Zaak → Bezorgen → Eigen bezorgers (standaard uit). Een app voor de bezorger is niet nodig: de bezorger gebruikt een pagina in de browser van de eigen telefoon (wie wil, gebruikt de app Optimum Bezorger: zie Bezorgersapp hieronder).
Een rit maken. In de kassa staat de knop Ritten (met het aantal bezorgingen dat nog weg moet plus de ritten die onderweg zijn).
- Vink bij Klaar om te bezorgen de bestellingen aan die meegaan. Dat zijn de bezorgbestellingen uit de kassa, de webshop en Thuisbezorgd (alleen zelf bezorgen; die met een bezorger van Thuisbezorgd niet).
- Kies de bezorger (een medewerker) en het wisselgeld dat meegaat (standaard het bedrag uit de instelling), en tik Rit maken.
- Er verschijnt een QR-code. De bezorger scant die met de eigen telefoon en ziet per adres de naam, het adres met een knop Route (navigatie), Bellen, de opmerking, de gewenste tijd en wat er te innen is. Er is een wisselgeldcalculator (klant geeft € 50 → terug € 31,50). Inloggen is niet nodig. Deel de link alleen met de bezorger: wie hem heeft, ziet de adressen van deze rit. Met QR-code voor de bezorger maak je een nieuwe link; de oude werkt dan niet meer.
- Tik Vertrekken als de bezorger weggaat. Het wisselgeld gaat uit de lade (geld uit, met de reden). De klant krijgt bericht dat de bestelling onderweg is:
- bij een bestelling uit de kassa per sms en/of e-mail, als Berichten aan de klant aan staat (zie Bezorgen en tijdvakken);
- bij de webshop zoals in de webshop ingesteld (mail, sms of pushbericht);
- bij Thuisbezorgd via Thuisbezorgd.
Is de rit nog niet weg, dan kan hij nog worden opgeheven.
- Onderweg tikt de bezorger per adres Bezorgd, contant, Bezorgd, pin (een eigen pinapparaat) of Bezorgd (al betaald). De kassa ziet dat meteen. Kan de bezorger het niet melden, dan kan het ook in de kassa. Terug in de zaak tikt de bezorger Ik ben terug in de zaak.
Kasafdracht. Na de rit tik je Afrekenen (recht Kassalade beheren):
- Per bestelling kies je contant, pin aan de deur, al betaald of niet bezorgd (terug). Wat de bezorger meldde, staat al ingevuld.
- De kassa rekent elke bestelling met een openstaand bedrag af, zonder nieuwe kassabon (de klant heeft de bon al; opnieuw printen kan bij Bonnen). Een bestelling die niet bezorgd is, gaat van de rit af en blijft open, zodat hij op een volgende rit kan.
- Je ziet wat er verwacht wordt: het wisselgeld plus wat er contant is ontvangen. Vul in wat de bezorger inlevert, of tel het per biljet en munt (Tellen per biljet en munt). De kassa toont of het klopt, of hoeveel er te veel of te weinig is.
- Het wisselgeld gaat terug in de lade (geld in). Het verschil staat bij de rit en in het logboek, en komt ook terug als kasverschil bij het Z-rapport.
Track & trace (apart aan te zetten bij de instelling). De klant krijgt bij onderweg een link naar een volgpagina op het portaal. Die link staat in de sms of e-mail, en in de webshop op de statuspagina (Volg je bezorger). Op de volgpagina staan:
- of de bestelling wordt klaargemaakt, onderweg is of bezorgd;
- de verwachte tijd: vanaf de plek van de bezorger langs de adressen die eerst komen, anders de gewenste tijd;
- hoeveel adressen er nog voor gaan (zonder andere adressen te tonen);
- met De bezorger live op de kaart ook de bezorger, de zaak en het eigen adres op een kaart (OpenStreetMap). De bezorger zet het delen van de plek zelf aan op de telefoon (Mijn plek delen). De plek gaat alleen mee zolang de pagina open is; de pagina houdt het scherm aan.
De pagina's staan in de taal van de telefoon (alle talen van het portaal). In de kassa zie je bij de rit wanneer de plek het laatst is doorgegeven (met een link naar de kaart).
Privacy. Het portaal bewaart de gegevens van een rit (namen, adressen, telefoonnummers, de plek) alleen zolang de rit loopt. Bij het afrekenen gaat alles weg, en anders na 24 uur. De klant ziet alleen de eigen bestelling. De plek van de bezorger is alleen te zien tijdens de rit, en niet meer zodra de bezorger terug is.
Ritplanning (optioneel)
Zet het aan bij Instellingen → Zaak → Bezorgen → Ritplanning (standaard uit; werkt met eigen bezorgers). In het venster Ritten staat dan de knop Ritten voorstellen. De kassa voegt de bestellingen die nog weg moeten samen tot ritten:
- bestellingen die dicht bij elkaar liggen en waarvan de gewenste tijden binnen het tijdvenster vallen (standaard 30 minuten) gaan samen;
- tot het maximum aantal adressen per rit (standaard 4), zolang de rit (heen, alle adressen en terug naar de zaak) niet langer duurt dan het maximum (standaard 45 minuten);
- per rit de beste volgorde, de afstand (km), de reistijd heen en terug en per adres de verwachte aankomst bij vertrek nu. Is die later dan de gewenste tijd, dan staat er later dan gevraagd bij.
Met Deze rit gebruiken vink je die bestellingen aan, in die volgorde; kies de bezorger en tik Rit maken. Bij een rit die nog niet vertrokken is, zet Beste volgorde de adressen in de snelste volgorde (ook op de telefoon van de bezorger). Bij elke rit staan de afstand en de reistijd.
Instellingen: adressen per rit, hoe lang een rit mag duren, het tijdvenster, de snelheid van de bezorger (fiets ~15, scooter ~25, auto ~35 km/u in de stad) en de minuten per adres (parkeren, aanbellen, afrekenen; standaard 2). Deze getallen mag ook de manager instellen: in het venster Ritten met de knop Ritplanning instellen (recht Ritplanning instellen, standaard aan voor de manager; aan te passen bij Instellingen → Rechten). Ritplanning aan- of uitzetten en de routedienst (adres, API-sleutel) blijven bij de beheerder.
Afstand en reistijd, te kiezen door de beheerder:
- Schatting (standaard): hemelsbreed maal 1,35 (omrijfactor) met de snelheid van de bezorger. Werkt zonder internet en zonder account.
- OSRM: routes over de weg via een OSRM-server. Vul het adres in (
https://, ofhttp://in het eigen netwerk). De openbare demoserver (https://router.project-osrm.org) is alleen voor af en toe; zet voor dagelijks gebruik een eigen OSRM-server neer of neem een aanbieder. - OpenRouteService: routes over de weg met een eigen API-sleutel (gratis aan te maken op openrouteservice.org, met een maximum per dag). Het adres staat standaard op
https://api.openrouteservice.orgen kan naar een eigen server. De sleutel blijft op de kassa; de schermen tonen alleen dat hij is ingevuld.
Met Testen probeer je de dienst uit. Lukt de dienst niet, dan valt de planning terug op de schatting en zegt dat. Een adres waarvan de ligging niet bekend is (geen geldige postcode en huisnummer), komt in het voorstel bij zonder bekende ligging en wordt niet ingepland. De configuratie-export neemt de instellingen mee, maar de sleutel niet.
Code: lib/ritplanning.ts.
Bezorgersapp (optioneel)
Zet het aan bij Instellingen → Zaak → Bezorgen → Bezorgersapp (standaard uit; werkt met eigen bezorgers en het beheerportaal). Elke bezorger koppelt dan de eigen telefoon één keer, in plaats van per rit een QR-code te scannen:
- Kies bij Gekoppelde telefoons de bezorger (een medewerker), eventueel de naam van de telefoon, en tik Telefoon koppelen.
- Er verschijnt een QR-code. De bezorger scant die in de app Optimum Bezorger (knop Koppelen), of met de camera van de telefoon: dan opent de pagina in de browser. Die werkt ook zonder app en kan op het beginscherm.
- De koppeling blijft geldig tot je hem intrekt; de telefoon ziet dan meteen niets meer. Een nieuwe koppeling voor dezelfde medewerker vervangt de oude (bijvoorbeeld bij een nieuwe telefoon).
In de app of op de pagina staan alle eigen ritten (elke rit die de kassa voor deze bezorger maakt), met dezelfde knoppen als bij een rit: Route, Bellen, te innen met wisselgeldcalculator, Bezorgd en Ik ben terug in de zaak. Apart aan te zetten:
- Zelf bestellingen oppakken: de bezorger ziet de bezorgingen die nog op een rit moeten, vinkt aan wat meegaat en tikt Meenemen. De kassa maakt de rit (of zet ze erbij als die bezorger al een rit heeft die nog niet weg is); het standaard wisselgeld gaat mee. Wat een ander al pakte, kan niet meer.
- Zelf vertrekken: Vertrekken in de app doet hetzelfde als in de kassa (wisselgeld uit de lade, de klanten krijgen bericht).
- Live kaart: bij Ritten staat de knop Kaart met de zaak, alle bezorgers die aan het werk zijn en de adressen die nog bezorgd moeten worden. De bezorger zet Aan het werk zelf aan en uit. De app geeft de plek ook door met het scherm uit (Android: een melding in de balk zolang het delen aan staat); de webpagina alleen zolang hij open is. Zonder deze instelling wordt de plek alleen gedeeld tijdens een rit met track & trace.
De app voor Android staat in Google Play en op de downloadpagina van het portaal (/download/). Een versie voor iPhone is klaar, maar komt pas als er een Apple-ontwikkelaarsaccount is; tot die tijd gebruiken iPhones de webpagina. Bij een rit die de bezorger zelf oppakte staat zelf opgepakt in de app.
Code: lib/bezorgersapp.ts, in het portaal src/volgen.mjs en de app in de repo horecapos-bezorger.
In het logboek staat wie een rit maakte, liet vertrekken, als bezorgd meldde en afrekende, met de bedragen. Uitzetten: geen knop Ritten; ritten en instellingen blijven bewaard.
Op het portaal: /bezorger/<sleutel> en /volg/<code>. Code: lib/bezorgers.ts, routes/bezorgers.ts, Bezorgers.tsx en in het portaal src/volgen.mjs.
Melding bij te lange doorlooptijd
Een afhaal- of bezorgbestelling die later klaar is dan beloofd: de kassa ziet het en meldt het, en kan de klant meteen een excuus sturen, eventueel met een tegoedbon. Zet het aan bij Instellingen → Zaak → Bezorgen → Melding bij te lange doorlooptijd (standaard uit).
- Welke bestellingen: afhalen en bezorgen met een beloofde tijd, van de kassa (bezorgen en tijdvakken), de webshop en Thuisbezorgd.nl / Takeaway.com.
- Te laat: zoveel minuten (standaard 10) na de beloofde tijd nog niet klaar of onderweg. Klaar of onderweg is: alles klaar op het keukenscherm, de status klaar of onderweg in de webshop of bij Thuisbezorgd, het bericht ✉ Klaar / ✉ Onderweg aan de klant, of afgerekend. De kassa kijkt elke minuut.
- Melding: knop Te laat in de bovenbalk met het aantal (met geluid bij een nieuwe), met per bestelling de beloofde tijd en hoeveel minuten te laat. Een bestelling verdwijnt vanzelf als hij klaar of onderweg is, of met Afgehandeld; daaronder staan die van de afgelopen 24 uur, met wanneer ze klaar waren. Alles staat in het logboek.
- Webshop: de statuspagina van de gast toont dat het langer duurt, met de nieuwe verwachte tijd.
- Bij Thuisbezorgd kan dat niet (de klant hoort bij Thuisbezorgd): daar alleen de melding. Een eigen tekst kan;
{naam},{zaak},{code},{korting}en{geldig}worden ingevuld. - Tegoedbon (alleen met Kortingscodes aan): bij het excuus een persoonlijke kortingscode voor de volgende bestelling (bv.
SORRY-7K4Q2M), een bedrag of procent, een keer te gebruiken, zoveel dagen geldig, aan de kassa en in de webshop. De codes staan niet in de lijst bij Kortingscodes. Lukt het versturen niet, dan vervalt de code. Met de knop in de kassa alleen met het recht Korting geven. - Uit: de meldingen en de uitgegeven codes blijven bewaard (ook in de back-up); de instelling gaat mee in de configuratie-export.
Code: lib/telaat.ts, routes/telaat.ts, TeLaat.tsx en packages/shared/src/telaat.ts.
De knop Bestellen: wat hij doet en wanneer je hem nodig hebt
Een product aantikken en op Bestellen tikken zijn twee verschillende stappen:
- Aantikken zet het product meteen op de rekening (links in de lijst), als nieuw. Alleen jij ziet het: de keuken en de bar weten er nog niets van. Een nieuwe regel is een kladje: weghalen, aantal of opties veranderen kan nog gewoon, zonder storno.
- Bestellen stuurt alle nieuwe regels in één keer door: de werkbonnen gaan naar de keuken- en barprinters (en het keukenscherm), de regels staan daarna op besteld. Weghalen kan dan alleen nog met een storno (recht storno). Op de knop staat hoeveel nieuwe regels er klaarstaan, bv. Bestellen (3); zijn er geen nieuwe regels, dan is de knop grijs.
Waarom die twee stappen? Aan tafel neem je de hele bestelling op (drankjes, voorgerecht, hoofdgerecht), past nog wat aan als de gast van gedachten verandert, en stuurt het dan in één keer naar de keuken, met één bon per station in plaats van een bon per product. Zo kan de keuken alvast beginnen, lang voordat er betaald wordt.
Wat er verder bij Bestellen gebeurt:
- Gangen: gang 1 gaat meteen naar de keuken; gang 2, 3 en 4 gaan mee als WACHT en de keuken begint pas als je die gang afroept (zie Gangen).
- Rondes: elke keer Bestellen is één ronde; daarop werkt ↻ Nog een rondje.
- Voorraad telt af en een gedoseerde tap wordt vrijgegeven.
- All-you-can-eat: is het te veel, te vroeg of te laat voor het arrangement, dan vraagt de kassa eerst of het toch mag.
- België (GKS 2.0): de regels gaan eerst als pro forma naar de zwarte doos; lukt dat niet, dan gaat er niets naar de keuken en blijven ze nieuw.
- Geen verbinding: de bestelling wordt bewaard en gaat naar de keuken zodra de verbinding terug is. Printer uit: bestellen gaat toch door, de werkbon komt in de printwachtrij (zie Keukenprinter uit of geen keukenscherm).
Direct afrekenen kan ook. Tik je Afrekenen terwijl er nog nieuwe regels op de rekening staan, dan bestelt de kassa die eerst automatisch, zodat de keuken en de bar altijd hun bon krijgen. Aan de bar of bij afhalen hoef je dus niet eerst op Bestellen te tikken: aantikken en meteen Afrekenen. Lukt dat automatisch bestellen niet (geen verbinding, all-you-can-eat-regel, zwarte doos), dan blijft het afrekenscherm dicht en zie je waarom.
Liever geen bon voor de bar als je meteen afrekent? Zet bij Instellingen → Zaak → Bestellen en afrekenen het vinkje Direct afrekenen zonder werkbon aan. Dan gaat alleen wat je met Bestellen doorstuurt naar de keuken en de bar; wat je meteen afrekent krijgt geen werkbon.
Grote of kleine knop Afrekenen
Met het vinkje Grote knop "Afrekenen" staat in het bestelscherm een grote knop Afrekenen direct onder de bestelde producten: breed, hoog en met het bedrag erin, zodat hij snel te raken is. Is de rekening al deels betaald, dan staat het bedrag dat nog open is op de knop. De kleine knop onderin naast Bestellen valt dan weg.
Met de grote knop zijn ook de knoppen in het afrekenscherm groot: Afrekenen (bij Pin, Cadeaubon en de andere betaalwijzen) en bij Contant Gepast afrekenen en Afrekenen zijn breed en hoog, makkelijk te raken, ook met vieze vingers (bijvoorbeeld bij een slager). De betaalwijzen zijn wat groter en de fooiknoppen wat kleiner, zodat alles in beeld blijft.
Bij een nieuwe installatie staat het vinkje uit: dan de kleine knop onderin naast Bestellen en een afrekenscherm met gewone knoppen. Liever groot? Zet in Instellingen → Zaak, direct onder licht/donker thema, het vinkje Grote knop "Afrekenen" aan. Een kassa die al in gebruik was, houdt wat er stond. De keuze geldt voor alle kassa's en tablets van de zaak.
Product op "op" zetten (uitverkocht)
Iedereen kan in het bestelscherm een product lang indrukken (of met de rechtermuisknop aanklikken) en kiezen voor Op (uitverkocht). Het product wordt dan grijs en is op alle kassa's niet meer te bestellen. Op dezelfde manier zet je het terug met Weer beschikbaar. Elke wijziging staat in het logboek. De beheerder kan het ook nog steeds bij Instellingen → Producten. Ook de kassaserver weigert een product dat op "op" staat ("Cola" is op), dus ook vanaf een tablet die de wijziging nog niet had of offline bewaarde bestellingen; die tablet toont dan "Kon niet versturen".
Keukenscherm (KDS)
Naast (niet in plaats van) de werkbonprinters kan de keuken of bar een scherm gebruiken. Open op een tablet/pc in de keuken http://<kassaserver>:3000/keuken, meld aan met een pincode en kies het station: dat zijn dezelfde namen als de printers (keuken, bar, ...), dus op het scherm staat precies wat er op die werkbon zou komen. "Alles" toont alle stations.
- Per bestelling een bon, oudste eerst, met tafel/afhalen, nummer en hoe lang hij al wacht (oranje na 10, rood na 20 minuten).
- Gangen staan apart; een gang die nog niet is afgeroepen staat grijs als "WACHT op afroep". Storno's staan doorgestreept.
- Tik op een regel om hem klaar te zetten, of op Klaar voor de hele bon. De bediening krijgt dan in de bovenbalk "Keuken: Tafel 5 is klaar". Met Instellingen → Zaak → Keukenscherm → Geluid voor de bediening (standaard uit) geeft de kassa daarbij ook een piep ("ding-dong", zonder geluidsbestand). De browser laat pas geluid toe na de eerste tik op het scherm; zet het volume van de tablet aan.
- Terughalen toont wat het laatste uur klaar is gemeld, per ongeluk weggetikt kan zo terug.
Het scherm werkt zichzelf direct bij. Werkbonnen blijven gewoon printen; wie het scherm niet gebruikt, merkt er niets van.
Keukenscherm: doorzetten, volgorde en gang
Instellingen → Printers → Keukenscherm. Elk onderdeel apart aan te zetten, standaard uit; uitzetten bewaart alles.
- Doorzetten tussen stations, bijvoorbeeld koud → warm → uitgifte. Per station stel je een vast volgend station in; op de bon staat dan een knop → warm (en altijd Doorzetten naar… om een ander station te kiezen). Alleen de open regels van dat station gaan mee. Een station hoeft geen printer te hebben: vul stations zoals uitgifte in bij Stations zonder printer. Klaar (en het seintje aan de bediening) komt pas op het laatste station. Op "Alles" staat bij een doorgezette regel waar hij nu is. Elke stap staat bij de regel en in het logboek.
- Herordenen: bonnen slepen (muis) of met ◀ ▶ verplaatsen (touchscreen). De volgorde geldt per station en voor alle schermen van dat station; nieuwe bonnen komen achteraan.
- Volgende gang vanaf het keukenscherm: bij een bon met een wachtende gang staat Gang 2 aanvragen. De bediening krijgt dan "Keuken vraagt gang 2 voor Tafel 5" (met geluid) en roept af zoals altijd; op het keukenscherm staat "Gang 2 aangevraagd · n min" tot de gang is afgeroepen. Of kies Afroepen: dan roept het keukenscherm de gang zelf af, met de werkbon "AFROEP GANG 2", net als de knop in de kassa.
Keukenprinter uit of geen keukenscherm
De kassa werkt altijd door, ook als de keuken- of barprinter uit staat (of het papier op is, of de kabel los zit) en ook zonder keukenscherm:
- Bestellen gaat altijd door. De regels staan meteen op besteld, de rekening klopt en afrekenen kan gewoon. Printers worden tegelijk aangesproken en elke printer krijgt hooguit ongeveer 4 seconden: een printer die uit staat, laat de andere (en de bediening) niet lang wachten.
- Printwachtrij. Een werkbon die niet geprint kon worden, gaat in de printwachtrij. De kassaserver probeert hem elke 30 seconden opnieuw, een kwartier lang; zodra de printer weer werkt komt hij eruit, met bovenaan LATER GEPRINT. Lukt een volgende bon op die printer weer, dan gaan de wachtende bonnen er meteen achteraan.
- Na een kwartier stopt het vanzelf opnieuw proberen; Nu opnieuw printen kan dan nog.
- Keukenscherm. Staat de bestelling op het keukenscherm, dan ziet de keuken hem daar ook als de printer uit staat. Wie geen keukenscherm gebruikt, mist niets: nergens wacht de kassa op "Klaar" van de keuken.
- De wachtrij staat alleen in het geheugen van de kassaserver (na een herstart is hij leeg).
- Ook de kassabon: lukt die niet, dan is er toch afgerekend (de kassa meldt "printen mislukte") en kun je later bij Bonnen een kopie printen.
Gangen (voorgerecht, hoofdgerecht ...)
De gangknoppen staan er alleen als ze nodig zijn: zodra er een menu (samengesteld product) op de rekening staat, of als er al iets in gang 2 tot 4 staat. Bij gewone producten, zoals een cola, zie je ze niet en gaat alles meteen naar de keuken. Er is niets in te stellen.
Onder de bestellijst staat Gang 1 2 3 4. Standaard staat gang 1 aan en werkt alles zoals altijd: "Bestellen" stuurt alles meteen naar de keuken, zonder gangkoppen op de werkbon. Kies je gang 2 (of hoger) voordat je producten aantikt, dan:
- gaan die bij "Bestellen" al wel naar de keuken, onder "-- Gang 2 · WACHT op afroep --", zodat de keuken kan voorbereiden;
- staat in de bestellijst "Gang 2 · wacht" met een knop Afroepen;
- krijgt de keuken bij Afroepen een bon " AFROEP GANG 2 " met wat er nu gemaakt moet worden.
Gang 1 gaat altijd meteen. Is gang 2 al afgeroepen, dan gaat een later bijbesteld gerecht in gang 2 ook meteen.
Allergenen per product
Standaard uit: dan zijn allergenen nergens te zien. Aanzetten via Instellingen → Zaak → Allergenen per product invullen en tonen.
- Instellingen → Producten: bij elk product de 14 EU-allergenen aantikken (gluten, schaaldieren, eieren, vis, pinda's, soja, melk, noten, selderij, mosterd, sesamzaad, sulfiet, lupine, weekdieren). In de productlijst staan de afkortingen achter de naam.
- Bestelscherm: op elke productknop klein de afkortingen (bv.
Gl Me), en de knop ⚠ Allergenen in de groepenbalk toont per product van de gekozen groep de allergenen voluit, met de uitleg van de afkortingen. - Wijzigingen van allergenen komen in het logboek (oud → nieuw). Staat de instelling uit, dan blijven eerder ingevulde allergenen bewaard.
All-you-can-eat
Standaard uit. Aanzetten via Instellingen → Zaak → All-you-can-eat (alleen de beheerder). Je maakt één of meer arrangementen, bv. Vis, Vlees en Sushi, elk met:
- een naam (komt op de bon: "Vis volwassene", "Vis kind");
- een prijs per volwassene en per kind (inclusief btw) en het btw-tarief (standaard NL
LAAG, BEB); - de gerechten die erbij horen (€ 0): hele productgroepen en/of losse producten (ook uit andere groepen, bv. friet bij Vis én Vlees);
- een tijdslimiet in minuten (0 = geen);
- rondes: hooguit zoveel gerechten per persoon per ronde (0 = onbeperkt) en minimaal zoveel minuten tussen twee rondes (0 = geen);
- een verspillingstoeslag per stuk (0 = geen).
Met ↑ ↓ zet je de volgorde. Die telt als een gerecht bij meer arrangementen hoort: het gaat dan naar het bovenste dat de groep heeft gekozen. Verwijderen haalt een arrangement weg voor nieuwe tafels; lopende tafels houden hun prijsregels (minder personen kan daar nog, meer niet).
Aan tafel:
- Op het bestelscherm staat boven de bon + All-you-can-eat. Kies per arrangement het aantal volwassenen en kinderen; gemengd mag (bv. 2× Vis en 2× Vlees). De prijs komt als regels op de rekening; die gaan niet naar de keuken. Het aantal personen van de groep wordt het totaal dat meedoet (als de kassa personen bijhoudt).
- De balk laat per arrangement zien: personen, resterende tijd (rood als de tijd om is), welke ronde het is met het maximum, en hoe lang het nog duurt tot de volgende ronde. Gerechten die erbij horen staan op de knoppen als AYCE en op de bon met het label AYCE voor € 0. Alles wat bij geen gekozen arrangement hoort (drank, desserts ...) blijft gewoon betaald.
- Bestellen: elke keer "Bestellen" met gratis gerechten is een ronde, per arrangement (alleen de arrangementen waar gerechten van bij zitten). Offline aangetikt en later verstuurd wordt niet tegengehouden.
- Wijzig: aantallen per arrangement aanpassen. Minder personen telt als storneren (recht "storno"). Een arrangement op 0 zetten (of Stoppen voor alles) kan zolang er nog geen gerechten van dat arrangement op de rekening staan.
- Toeslag (alleen als een gekozen arrangement een verspillingstoeslag heeft): aantal kiezen (en het arrangement, als er meer zijn); "Verspillingstoeslag × aantal" komt op de rekening.
- Afrekenen, splitsen, kortingen en de bon werken zoals altijd: de arrangementsprijzen, de toeslag en de drank zijn gewone regels met hun eigen btw.
- Zet de beheerder all-you-can-eat uit terwijl er groepen bezig zijn, dan kosten nieuw aangetikte gerechten weer de gewone prijs; wat al op de rekening staat blijft.
- In de webshop (optioneel, standaard uit): met Ook bij bestellen aan tafel via de QR-code (webshop) ziet de gast die aan een tafel met een arrangement bestelt de gerechten die erbij horen als Inbegrepen voor € 0, met bovenaan de stand (personen, ronde, tijd). Een bestelling is een ronde, met dezelfde regels als Bestellen; te veel, te vroeg of te laat weigert de webshop meteen. Drank en andere gerechten betaalt de gast gewoon; alles komt op de rekening van de tafel. Uit = de webshop rekent de gewone prijzen, zoals voorheen.
Cadeaubonnen
Twee schakelaars bij Instellingen → Zaak → Cadeaubonnen:
- Cadeaubon als betaalwijze bij afrekenen: standaard aan, zoals het altijd was. Uit = de knop Cadeaubon staat niet bij afrekenen (en niet bij geld terug via bij een retour), en de kassaserver weigert betalen met een cadeaubon.
- Cadeaubonnen verkopen met saldo: standaard uit. Aan:
- Op het bestelscherm staat de knop Cadeaubon: kies het bedrag (€ 10, 25, 50, 100 of een ander bedrag) en laat de kassa een code maken, of scan de code van een voorgedrukte kaart. De bon komt als regel op de rekening (btw-code BON: geen omzet, geen btw, gaat niet naar de keuken). Daar kun je ook het saldo opvragen voor een klant.
- Na het afrekenen is de bon actief en print de bonprinter een cadeaubon met het bedrag, de code en een QR-code.
- Inleveren: bij afrekenen Cadeaubon kiezen en de code scannen of typen (knop Saldo toont het saldo). Het bedrag gaat van het saldo af. Is het saldo lager dan de rekening, dan gaat het hele saldo eraf als deelbetaling en betaal je de rest met pin of contant. Het saldo mag in delen op.
- Code leeg laten = cadeaubon zonder code, zoals voorheen (bv. een oude papieren bon).
- Rapport → Cadeaubonnen (recht Cadeaubonnen beheren, standaard manager en beheerder): zoeken op code, openstaand tegoed, geschiedenis per bon, blokkeren (kwijt/gestolen) en saldo corrigeren met een reden. Dit komt in het logboek.
- Rapporten: verkochte cadeaubonnen tellen niet als omzet en staan apart (Cadeaubonnen verkocht); het ontvangen geld staat wel bij de betaalwijzen. Wat met een cadeaubon betaald wordt is gewoon omzet (met btw) bij de betaalwijze Cadeaubon.
- Boekhouding: verkochte bonnen gaan credit en ingeleverde bonnen debet op de rekening Cadeaubonnen (tegoed van klanten).
- Een verkochte cadeaubon kan via Bonnen → Retour terug, zolang hij nog niet gebruikt is (saldo = waarde). Na de retour is de bon ingetrokken (saldo 0, geblokkeerd; staat in de geschiedenis van de bon). Is hij al (deels) gebruikt, dan zet je het saldo op 0 bij Rapport → Cadeaubonnen en betaal je het restant los terug. Korting op een cadeaubon kan niet.
Oplaadbaar tegoed (optioneel)
Voor clubs, sportkantines, jeugdhuizen en evenementen: een cadeaubon met saldo wordt een oplaadbare pas. Aanzetten bij Instellingen → Zaak → Oplaadbaar tegoed, onder de cadeaubonnen (standaard uit; werkt alleen als Cadeaubonnen verkopen met saldo aan staat).
- Pas of polsband: verkoop een cadeaubon met Voorgedrukte kaart en scan de pas (een NFC/RFID-lezer die als toetsenbord werkt, of een streepjescode). Het nummer van de pas is dan de code; daarmee betaalt de gast zoals met een cadeaubon.
- Opwaarderen: bestelscherm → Cadeaubon → Tegoed opwaarderen: scan de bon of pas en vul het bedrag in. Het komt als regel op de rekening (btw-code BON: geen omzet, geen btw, net als een verkochte cadeaubon) en staat na het afrekenen op het saldo. In de geschiedenis van de bon staat Opgewaardeerd.
- Hoogste saldo per bon of pas (standaard € 500, in te stellen tot € 5.000).
- Restant terugbetalen (vinkje, standaard uit; recht Kassalade beheren): na Saldo opvragen staat Restant terugbetalen. Het saldo gaat naar € 0 en het bedrag staat als geld uit de lade op het X- en Z-rapport (Tegoed terugbetaald …).
- Een opwaardering kan via Bonnen → Retour terug zolang het saldo nog minstens dat bedrag is; de bon of pas blijft geldig.
- Opwaarderen op de kiosk (optioneel): zie Kiosk voor zelfbediening.
Maaltijdcheques
Alleen voor zaken in België, standaard uit: Instellingen → Zaak → Afrekenen → Maaltijdcheques. Maaltijdcheques zijn een loonvoordeel: de werkgever zet ze op een pasje van de werknemer (Edenred, Monizze of Pluxee). De gast betaalt ermee op de gewone betaalautomaat; er is geen koppeling met de uitgevers nodig.
- Aan: bij afrekenen staat de knop Maaltijdcheque. Kies de uitgever (alleen de uitgevers die de zaak aanneemt) en laat de gast het pasje tegen de betaalautomaat houden, net als bij pinnen. Zonder pinkoppeling: de gast betaalt op de betaalautomaat zelf en je tikt op Afrekenen.
- Geen fooi en geen wisselgeld met maaltijdcheques. Is het saldo te laag, dan betaalt de gast de rest anders (de rekening blijft open tot alles betaald is).
- Alleen voor bepaalde productgroepen (optioneel, bv. eten maar geen alcohol): dan kan met maaltijdcheques hooguit het bedrag van die producten op de rekening. Het afrekenscherm zegt hoeveel; de rest betaalt de gast anders.
- Op de kassabon: Maaltijdcheque Pluxee (de uitgever erachter).
- Z-rapport en X-rapport: per uitgever een eigen regel (Maaltijdcheque Edenred, … Monizze, … Pluxee).
- Boekhouding: per uitgever een eigen grootboekrekening (Maaltijdcheques Pluxee (te ontvangen) enz., standaard 416100, 416200 en 416300), want het geld komt van de uitgever en niet van de bank van de betaalautomaat.
- Nodig: een overeenkomst met elke uitgever waarvan je cheques aanneemt, en een betaalautomaat die deze kaarten aanneemt (vraag dat na bij de leverancier van de betaalautomaat).
Vreemde valuta
Contant afrekenen in een andere munt, bv. Britse of Amerikaanse toeristen, of in de grensstreek met Zwitserse frank. Standaard uit: Instellingen → Zaak → Afrekenen → Vreemde valuta. Voeg de munten toe (CHF, CZK, DKK, GBP, HUF, NOK, PLN, SEK, TRY, USD) met per munt een koers: hoeveel euro je voor 1 eenheid rekent (bv. 1 GBP = € 1,15).
- Zelf ingevuld: een vaste koers; pas hem zelf aan als die verandert.
- Live (ECB): de dagkoers van de Europese Centrale Bank (referentiekoersen, elke werkdag rond 16:00; gratis, geen account nodig). Met een opslag in procenten (0-20) wordt de koers zoveel lager, zodat de zaak het wisselen niet zelf betaalt. De kassa haalt de koersen zelf op als ze ouder zijn dan 6 uur; Nu bijwerken haalt ze meteen op. Zonder internet blijft de laatste koers staan.
- Aan: bij afrekenen staat de knop Vreemde valuta. Kies de munt; de kassa toont hoeveel het in die munt is. Vul in wat de gast geeft: de kassa rekent het om en geeft het wisselgeld in euro. Wil de gast niets terug, vink dan Wisselgeld is fooi aan: het wisselgeld komt als fooi op de bon, in België in die munt (GKS 2.0, UC296).
- Geeft de gast minder dan het hele bedrag, dan is het een deel; de rest betaalt hij anders.
- Op de kassabon: de munt, het bedrag en de koers, en het wisselgeld in euro.
- X- en Z-rapport: per munt een eigen regel (Vreemde valuta GBP, in euro), en bij de kassalade wat er in die munt in de lade ligt. Het wisselgeld in euro gaat van het verwachte geld in de lade af; de munten zelf tel je apart.
- Boekhouding: telt als contant (kas), in euro.
Extra knoppen bij bestellen en afrekenen
Knoppen voor wat niet elke zaak nodig heeft. Alles staat standaard uit; aanzetten per knop bij Instellingen → Zaak → Bestellen en afrekenen (recht Zaak, betalen en printers instellen). Uit = de knop staat nergens in de kassa en de kassaserver weigert de handeling. In Nederland werkt alles zonder zwarte doos; in België werkt een knop pas als die functie met de zwarte doos getest is (bij de knop staat het als dat nog niet zo is).
Bij het openen van een tafel:
- Aantal personen bijhouden: de vraag "Hoeveel personen?" bij een vrije tafel, de personen op de plattegrond en in het bestelscherm, en gasten in de rapporten. Zie Aantal personen.
Bij het bestellen (bestelscherm, voor wat je daarna aantikt):
- Zelfde producten optellen (geen knop, staat standaard aan): tik je hetzelfde product nog een keer aan (zelfde opties, nog niet besteld), dan wordt het aantal hoger in plaats van een nieuwe regel: 4 Cola op één regel met de prijs keer 4. Met − gaat er weer één af, ook als het al besteld is (storno van één). Met een opmerking, stoel of meenemen blijft het een eigen regel; wat al besteld is, blijft een eigen regel (een nieuwe ronde).
- − en + (voor de prijs op elke regel): − haalt er één af, + zet er één bij (zelfde product, opties en opmerking; staat Zelfde producten optellen uit, dan een nieuwe regel). Nog niet besteld en op 0: de regel gaat weg. Al besteld: één eraf is een storno, die regel blijft doorgestreept staan (voor de keuken en de rapporten); één erbij wordt een nieuwe regel die nog besteld moet worden. Tikken op de prijs zelf haalt niets meer weg. Bij een menu alleen −.
- Meenemen (alleen ter plaatse): de gast neemt dit product mee, bv. een flesje water of een dessert. Die regel krijgt de btw van afhalen (in België label C), de rest van de rekening de btw van ter plaatse. Op de bon staat mee bij de regel.
- Stoel (aan een tafel): tik door voor stoel 1, 2, 3 ...; de regels krijgen dat stoelnummer (ook op de werkbon). In België gaat elke regel met de kostenplaats van de stoel (CHAIR, UC4123) naar de zwarte doos. Nog een keer na stoel 12 = weer zonder stoel.
- Terugnemen: het volgende product komt er met -1 op, bv. een lege fles of beker (statiegeld). Dat kan alleen bij producten met Mag terug (statiegeld) (Instellingen → Producten). Is de hele rekening negatief (alleen statiegeld terug, zonder verkoop), dan wordt Afrekenen een terugbetaling: contant terug of met de pin (op de terminal zelf teruggestort). In België als terugbetaling (REFUND, UC4108 en UC4114).
- SPV inwisselen: de gast betaalt een product of menu met een single purpose voucher (een bon voor juist dat product, bv. "1 menu all-in"). Tik op SPV inwisselen en daarna op het product op de bon: dat komt er met -1 op (zelfde prijs en btw, bij een menu met de onderdelen), met SPV erbij. Niet naar de keuken; weghalen kan gewoon. Een voucher-product verkoop je vooraf als gewoon product; zet er bij Instellingen → Producten SPV (voucher) bij. In België gaat de regel bij de verkoop als VOUCHER naar de zwarte doos (UC271).
- Voorschot verrekenen: zie hieronder.
- Open prijs (geen knop, per product): bij een product met Open prijs vraagt de kassa de prijs, bv. de dagschotel of een voorschot.
Bij het afrekenen:
- Direct afrekenen zonder werkbon (geen knop): standaard bestelt Afrekenen eerst wat nog niet besteld is, zodat keuken en bar altijd hun bon krijgen (zie De knop Bestellen). Aan: wat je meteen afrekent zonder eerst op Bestellen te tikken, krijgt geen werkbon, bv. aan de bar waar je het zelf pakt. Wat al besteld is, verandert niet.
- Apart afrekenen (aan een tafel, bij Rekening splitsen): kies wat één gast nu betaalt, ook een deel van een regel (½ voor een halve fles). Dat wordt een eigen deel dat je meteen afrekent; de rest blijft op de rekening, zonder de rekening eerst te splitsen of naar een andere groep te verplaatsen. Korting in procenten op de hele bon gaat naar verhouding mee. Terug zonder te betalen = alles weer op de rekening. In België staat de verkoop op de plek van de tafel, zonder tafelwissel (UC4103bis, UC4104).
- Gast vertrokken zonder te betalen (recht Afsluiten zonder betaling, standaard alleen manager en beheerder): de rekening wordt afgesloten als verkoop zonder betaling, met een reden in het logboek. Op het X- en Z-rapport en in de dagstaat staat het als Niet betaald (gast vertrokken); in het journaal naar oninbaar (standaard 4985 / 643000). In België een verkoop zonder betaling (UC4109).
Achteraf (Bonnen):
- Prijs verbeteren (recht Prijs van een bon verbeteren, standaard alleen manager en beheerder): de prijs van een afgerekende bon klopte niet, bv. 50% korting in plaats van 5%. De kassa maakt een nieuwe bon zonder tafel met de regels van de oude bon terug (negatief, tegen wat er toen betaald is) en dezelfde producten opnieuw tegen de gewone prijs. Geef daar de juiste korting en reken het verschil af (of betaal terug als de nieuwe prijs lager is). De oude bon blijft zoals hij was; één keer per bon, en niet als er al iets retour is. In België gaan de oude regels als CORRECTION mee (UC4116).
Code: apps/pos-server/src/lib/kassaopties.ts, routes/kassaopties.ts; scherm KassaOpties.tsx. Logboek: Instelling gewijzigd, SPV ingewisseld, Bon verbeteren, Onbetaald.
Voorschot verrekenen
Een voorschot (aanbetaling, bv. voor een feest of een reservering) verkoop je als een gewoon product met Voorschot aan (Instellingen → Producten; heeft altijd een open prijs). Maak er één per btw-tarief als het voorschot per tarief moet (bv. Voorschot eten en Voorschot dranken), of één product als het een deel van de offerte is. De gast betaalt het voorschot vooraf en krijgt een bon.
Aanzetten: Instellingen → Zaak → Bestellen en afrekenen → Voorschot verrekenen (standaard uit). Bij de eindafrekening tik je in het bestelscherm op Voorschot verrekenen en vul je het bonnummer van het voorschot in. De kassa zet de voorschotregels van die bon met een negatief aantal op de rekening (zelfde product, prijs en btw). Wat al verrekend is, kan niet nog een keer. Is het voorschot meer dan de rekening, dan krijgt de gast het verschil terug (terugbetalen). In België gaan de verrekende regels als terugbetaling (REFUND) naar de zwarte doos (UC4110, UC4111, UC4113). Logboek: Voorschot verrekend.
Bon per e-mail
Standaard uit. Aanzetten via Instellingen → Zaak → Bon ook per e-mail.
SMTP_HOST=smtp.voorbeeld.nl
SMTP_PORT=587
SMTP_GEBRUIKER=kassa@voorbeeld.nl
SMTP_WACHTWOORD=...
SMTP_AFZENDER=bon@voorbeeld.nl
Herstart de kassa na het invullen. Daarna staat bij Afrekenen het veld Bon ook mailen (optioneel): leeg laten = alleen printen zoals altijd; een e-mailadres invullen = dezelfde bon (met btw-specificatie en fiscale regels) gaat ook per e-mail naar de gast, met de naam van de zaak als afzender.
- Het e-mailadres wordt niet bewaard; in het logboek staat alleen "bon N gemaild naar a***@domein.nl" en of het lukte.
- Lukt mailen niet (bv. verkeerde inloggegevens), dan is de bon gewoon afgerekend en geprint; de melding zegt wat er misging.
- Niet bij een deelbetaling (rekening splitsen): de bon komt bij de laatste betaling, dus daar vul je het adres in.
- Achteraf mailen: bij Bonnen staat bij een bon de knop Mailen (recht Kopie van een bon printen). Die mailt de bon met KOPIE erop, net als een geprinte kopie (in België geregistreerd als kopie).
- Geen extra pakketten nodig: de kassa praat zelf met de mailserver (STARTTLS op 587, TLS op 465).
Reserveringen
Aanzetten bij Instellingen → Zaak → Reserveringen (standaard uit). Daar stel je ook in vanaf hoeveel minuten vooraf een gereserveerde tafel op de plattegrond staat (standaard 60) en de standaard duur van een reservering (standaard 120 minuten).
- Knop Reserveringen in de bovenbalk: overzicht per dag (◀ ▶), met aantal reserveringen, personen en no-shows. + Nieuwe reservering: naam, telefoon, e-mail, personen, datum, tijd, duur, tafel (mag later) en opmerking. Reserveren wordt door het personeel gedaan; online boeken is er (nog) niet.
- Staat er op dezelfde tafel in dat tijdvak al een reservering, dan meldt de kassa dat; "Toch opslaan" kan.
- Bevestiging per e-mail (vinkje, of later "Mailen") als er een e-mailadres is en een mailserver (
SMTP_HOST, zie Bon per e-mail). - Op de plattegrond staat een gereserveerde vrije tafel paars met "R 19:30 Jansen (4)". Tik je erop: "Jansen is er" opent de tafel met 4 personen en "Jansen" als groepsnaam; "Andere gasten" opent hem gewoon.
- In het overzicht: Aangekomen (opent de tafel; zonder tafel kies je er eerst een), Wijzigen, No-show, Annuleren en Terugzetten. Alles staat in het logboek.
- Reserveringen van online platforms: zie Reserveringsplatforms hieronder.
TheFork-kassakoppeling: tafel open bij aankomst, rekening terug
Met de POS-API van TheFork werkt de kassa samen met TheFork Manager (standaard uit), naast het ophalen van de reserveringen hierboven. Aanzetten bij Instellingen → Reserveringsplatforms → TheFork-kassakoppeling; loopt via het beheerportaal.
- Zet je een gast in TheFork Manager op Aangekomen of Aan tafel, dan gaat in de kassa de tafel met dezelfde naam open, met het aantal gasten en een opmerking: naam, allergieën en dieet, aanbetaling, aanbod/korting en spaarpunten (Yums). Staat er al een open bestelling op die tafel, dan wordt die gekoppeld. Geen tafel met die naam: een melding, en in Platforms kies je de tafel.
- Na het afrekenen gaat de rekening naar TheFork (totaal en regels met naam, productgroep, aantal en bedrag); TheFork zet de reservering dan op Vertrokken. Bij gesplitst afrekenen één rekening met het totaal. Lukt het niet, dan probeert de kassa het elk kwartier opnieuw (twee dagen), of met Opnieuw sturen in Platforms.
- Koppelen: de kassa toont een koppelcode; vul die in TheFork Manager in (Integraties → kassa). Het restaurant-id van TheFork (Customer-id) vult de beheerder in, of het komt vanzelf bij de eerste order.
- Vinkjes: tafel vanzelf openen, naam, allergieën en aanbetaling als opmerking, rekening naar TheFork.
- Voorwaarde: Pin Voordeel heeft de API-sleutel van TheFork (alleen voor partners) en heeft de kassa daar als POS geregistreerd (knop in het beheerportaal); TheFork zet de koppeling na een testsessie live.
Documentatie van TheFork: https://docs.thefork.io/POS-API/introduction
Wachtlijst voor walk-ins
Voor gasten zonder reservering die op een tafel wachten. Aanzetten bij Instellingen → Zaak → Wachtlijst (walk-ins) (standaard uit). Alleen te zien als de sms via CM.com is ingesteld; anders staat de wachtlijst nergens in de kassa (ook niet bij de instellingen). Werkt los van de reserveringen: ook als die uit staan. Daar staat ook de tekst van de sms (leeg = "Hallo {naam}, uw tafel bij {zaak} is klaar. Wilt u zich melden bij de bediening?"; {naam}, {zaak} en {personen} worden ingevuld).
- Knop Wachtlijst in de bovenbalk, met het aantal wachtenden (oranje als er iemand wacht). + Op de wachtlijst: naam, telefoon (voor de sms), personen, de genoemde wachttijd en een wens (terras, kinderstoel).
- De lijst staat op volgorde van aanmelden, met hoe lang iemand al wacht (rood als het langer duurt dan genoemd) en bovenaan het aantal wachtenden, personen en de gemiddelde wachttijd van vandaag.
- Lukt de sms niet, dan staat de reden erbij. Sms opnieuw kan.
- Plaatsen: kies de tafel; de kassa opent hem met het aantal personen (als de kassa personen bijhoudt) en de naam als groepsnaam (net als bij een reservering die aankomt).
- Weg (vertrokken of afgemeld) en Terugzetten. Onder de lijst staat wie er vandaag geplaatst of weg is, met hoe lang ze gewacht hebben.
- Privacy: telefoonnummers worden na een dag gewist; wie na 12 uur nog op de lijst staat, gaat er vanzelf af. Aanmelden, oproepen (met alleen de laatste 3 cijfers van het nummer) en plaatsen staan in het logboek.
- Waarom niet bij Reserveringen? Een reservering is voor later (datum, tijd, tafel vooraf); de wachtlijst is voor nu (volgorde, wachttijd, sms als de tafel vrij is). Daarom een eigen schakelaar en knop, met hetzelfde "tafel openen" als bij een reservering.
- Online op de wachtlijst (optioneel, standaard uit; alleen met de webshop): met Gasten kunnen zich ook zelf aanmelden via de webshop staat in de webshop Wachtlijst (en er is een QR-code voor bij de deur, in het webshopbeheer bij Tafels en QR). De gast vult naam, telefoon, personen en een wens in en ziet live zijn plek. In de kassa staat hij met online in de lijst; oproepen, plaatsen en weg gaan zoals altijd, en de gast ziet het ook op zijn telefoon (afmelden kan daar ook).
Klantenkaart / spaarpunten
Aanzetten bij Instellingen → Zaak → Klantenkaart / spaarpunten (standaard uit, dan is er nergens iets van te zien). Daar stel je ook in: punten per euro (0 = alleen stempelkaarten), na hoeveel punten een beloning en hoeveel euro korting die beloning is.
- Aan de kassa staat boven de bon "+ Klantenkaart": zoek de klant op naam of telefoonnummer, of maak een nieuwe klant (naam, optioneel telefoon en e-mail). Daarna staat de naam met het puntensaldo op de bon.
- Inwisselen: bij genoeg punten "100 punten inwisselen: € 5 korting"; bij een volle stempelkaart "Gratis Koffie" (die koffie moet op de bon staan). Dat wordt een kortingsregel; iedereen mag die weer weghalen.
- Punten en stempels gaan er pas bij het afrekenen bij en af: punten over het bedrag na korting (zonder verkochte cadeaubonnen), stempels per stuk van een product met een stempelkaart (het gratis product telt niet).
- Op de kassabon: gespaard, ingewisseld, saldo en de stand van de stempelkaarten.
- Rapport → Klanten (recht Klantenkaart beheren): klanten zoeken, gegevens wijzigen, punten corrigeren (met reden), historie, en verwijderen (AVG: naam, telefoon en e-mail weg; de historie blijft anoniem). Onderaan de stempelkaarten per product (bv. 10 koffie = 1 gratis).
- Een retour draait gespaarde punten niet automatisch terug; corrigeer die zo nodig bij Rapport → Klanten.
- Klantenkaart met een nummer (optioneel): vul bij Rapport → Klanten → (klant) het kaartnummer in (of scan de kaart in dat veld). Met de barcodescanner koppelt een scan van die kaart de klant aan de bon, aan de kassa en op de kiosk. Zoeken op het kaartnummer kan ook bij + Klantenkaart.
Gastprofiel: VIP, dieetwensen en voorkeuren (optioneel)
Aanzetten bij Instellingen → Zaak → Gastprofiel, onder de klantenkaart (standaard uit; werkt alleen als de klantenkaart aan staat). Daarna:
- Op het bestelscherm staat onder de gekoppelde klant "+ Gastprofiel": vink VIP aan, kies dieetwensen (vegetarisch, veganistisch, pescotarisch, halal, koosjer) en allergieën (de 14 allergenen), en typ voorkeuren (bv. "vaste tafel bij het raam", hooguit 300 tekens). Daarna staan ze bij de klant op het bestelscherm, allergieën in rood. Ook te wijzigen bij Rapport → Klanten → (klant) → Gastprofiel.
- Tik je een product aan met een allergeen van de gast (zie Allergenen per product), dan vraagt de kassa eerst of het toch moet. Alleen wat bij het product is ingevuld; vraag bij twijfel altijd de keuken.
- Een VIP krijgt een ★ op de plattegrond: bij een open rekening en bij de getoonde reservering van die klant. Komen de gasten van een reservering binnen, dan koppelt de kassa de klant van de reservering aan de rekening.
- Dieetwensen en allergieën (en VIP) komen op de werkbon voor keuken en bar:
GAST: VIP · Vegetarisch · allergie: Noten. - Dieetwensen en allergieën zijn gezondheidsgegevens: alleen invullen met toestemming van de gast. In het logboek staat alleen dát het profiel gewijzigd is, niet de wensen zelf. Klant verwijderen haalt ook het gastprofiel weg.
Favorieten / snelknoppen
Standaard uit. Instellingen → Zaak → Favorieten / snelknoppen:
- Meest verkocht: vooraan in de groepenbalk de knop ★ Favorieten met de 12 producten die de afgelopen 14 dagen het meest zijn verkocht (vanzelf bijgewerkt). Het bestelscherm opent op de favorieten.
- Zelf kiezen: houd op het bestelscherm een product lang ingedrukt (of rechtsklik) en kies ★ Favoriet (snelknop); nog eens = weghalen. Recht Producten beheren. Alle kassa's zien het meteen.
- Aantikken, opties, menu's, happy hour en "op" werken op de favorieten precies zoals in de gewone groepen.
Nog een rondje
Op het bestelscherm staat de knop ↻ Nog een rondje (zodra er iets op de rekening staat, ook als het nog niet besteld is). Eén tik zet de laatste ronde (alles wat in één keer "Bestellen" ging, of wat je net hebt aangetikt) er nog een keer bij als nieuwe regels; daarna gewoon Bestellen. Prijzen zijn die van nu (ook happy hour).
- Lang indrukken (of rechts klikken): zelf kiezen. Met ◀ ▶ blader je naar eerdere rondes, per product aan/uit (bv. het eten uitvinken) en het aantal met − / +. Opties en opmerkingen gaan mee.
- Producten die op zijn en menu's gaan niet mee (menu's tik je apart aan). Werkt ook zonder verbinding.
- De regels komen erbij zoals ze op de rekening staan: met Zelfde producten optellen aan één regel per product (2 Cola), uit elke regel apart (2 keer 1 Cola).
Tafeltijd op de plattegrond
Op elke bezette tafel staat ⏱ 45m · 12m: hoe lang de tafel al bezet is en hoe lang geleden er voor het laatst iets is aangetikt (tik en houd op de tafel, of ga er met de muis op staan, voor de precieze tijden). Is er een tijd niets besteld, dan krijgt de tafel een oranje rand: even langslopen. Hoeveel minuten stel je in bij Instellingen → Zaak → Tafeltijd (standaard 20, 0 = geen oranje rand). Nog niets aangetikt telt vanaf het openen van de tafel.
Zitten er meerdere groepen (eigen rekeningen) aan één tafel, dan staat er per groep een regel, bv. G1 ⏱ 50m · 12m en Jansen ⏱ 10m (de groepsnaam, anders het groepnummer). Een groep die te lang stil staat, krijgt een oranje label en de tafel een oranje rand.
Hele tafel verplaatsen
In het bestelscherm staat Tafel verplaatsen. Kies de ruimte (bv. Terras) en een tafel: alle groepen van de tafel gaan mee, elk met hun eigen rekening. Kies je een bezette tafel, dan worden de tafels samengevoegd (de groepen komen erbij). Wil je maar een deel verplaatsen, gebruik dan zoals voorheen Splitsen / verplaatsen. Moet alles op één rekening, gebruik dan Samenvoegen.
Offline doorwerken (tablet zonder wifi)
Valt de verbinding tussen een tablet en de kassaserver weg (wifi op het terras, server even uit), dan verschijnt een gele balk en werkt de tablet door met de laatst bewaarde tafels, producten en open bestellingen:
- tafels openen, producten aantikken en Bestellen worden op de tablet bewaard (ook als die herstart) en staan in de bestellijst met een gestippelde rand ("nog niet verstuurd");
- zodra de verbinding terug is, gaat alles op volgorde naar de server en pas dan gaat de werkbon naar de keuken. Elk pakket heeft een sleutel, dus niets komt dubbel binnen. Opende iemand anders de tafel intussen, dan komen de producten bij die bestelling;
- afrekenen, korting, splitsen e.d. kunnen alleen met verbinding; "Afrekenen" wacht tot alles van die tafel verstuurd is.
Aantal personen
Optioneel en standaard uit: Instellingen → Zaak → Bestellen en afrekenen → Aantal personen bijhouden. Uit = zo weinig mogelijk tikken: een vrije tafel gaat met één tik open, er staan nergens personen, en rapport, dashboard en de samenvatting van de dag tonen geen gasten en geen besteding per gast.
Aan: tik je een vrije tafel aan, dan vraagt de kassa met hoeveel personen (grote knoppen 1-8, of intikken; "Overslaan" = 1). Op de plattegrond staat bij een bezette tafel "3/4 pers." (personen/plaatsen, geel als er meer mensen zitten dan plaatsen). In het bestelscherm pas je het aan met de knop "3 pers." in de groepenbalk; bij meerdere groepen telt de tafel alle groepen samen.
Zonder personen blijft alles werken: Gelijk verdelen bij afrekenen begint bij 2, all-you-can-eat vraagt zelf het aantal volwassenen en kinderen, en reserveringen en de wachtlijst houden hun eigen aantal personen (de tafel gaat dan open zonder personen).
HACCP-registratie
Elke horecazaak moet de voedselveiligheid bewaken en vastleggen: in Nederland volgens de Hygiënecode voor de Horeca (controle door de NVWA), in België volgens de autocontrole van het FAVV (gids G-023). Zet HACCP-registratie aan bij Instellingen → Wet en regels (standaard uit).
- Meetpunten (beheerder): bv. koelcel, vriezer, warmhouden, kerntemperatuur na verhitten, terugkoelen en ontvangst van goederen, met een minimum en/of maximum in °C en hoe vaak (elke dag, twee keer per dag, elke week of bij gebruik). Standaardlijst toevoegen zet een begin neer (koeling tot 7 °C, in België tot 4 °C; vriezer tot -18 °C; warmhouden vanaf 60 °C; verhitten vanaf 75 °C).
- Schoonmaak en controle: taken per dag, week (eventueel op een vaste dag) of maand, met ruimte en instructie, bv. snijplanken desinfecteren, vetfilters, ongediertecontrole, thermometer controleren.
- Registreren (iedereen die is aangemeld): knop HACCP in de bovenbalk, met het aantal dat vandaag nog open staat. Temperatuur invullen, of een taak afvinken (Gedaan of Niet gelukt). Valt een temperatuur buiten de grens, dan moet er een corrigerende maatregel bij (bv. "deur gesloten, product weggegooid"). Registraties kunnen niet gewijzigd worden; een fout herstel je met een nieuwe registratie.
- Overzicht (recht Omzet per periode): per periode alle registraties, het aantal afwijkingen en de gemiste registraties per dag; als CSV (Excel) of om te printen / als PDF te bewaren voor een controle.
Tapsysteem en flowmeters
Elke tap die een tapcomputer of flowmeter meldt, komt op de bon, zodat er niets "weglekt". Zet het aan bij Instellingen → Tapsysteem (standaard uit).
- Bronnen (beheerder): de tapcomputer of het flowmetersysteem. Kies het merk; de kassa vult een voorinstelling in. Uit Nederland en België: Van Duijnen Horeca (tapautomatisering, Dashbar), Beconet (Multi-Tap), TapSystems, Horecatechniek Nederland, Heineken SmartDispense, WeissBeerger / AB InBev en BarTrack; verder Gruber, Addimat, WMF / Hogatron (E-Protokoll), Drinkotec (ex-Hartec), Berg, Easybar, Azbar, Scanabar, PourMyBeer, iPourIt, BeerBoard, US BeerSAVER, Bevchek, Capton/BarVision, Kegtron, Kegbot Kegboard, een "slimme tap" of een eigen systeem. Koppelen kan op vijf manieren (Kegboard: zie Gedoseerd tappen en Kegboard hieronder):
- Velden:
kraan(oftap,plu),ml(ofcl,liter,volumemeteenheid) ofporties,id(dezelfde tap twee keer = één keer geboekt),tijdstip,tafel,bediening; één tap, een lijst of{ "taps": [...] }. - Netwerk (TCP): de kassa maakt verbinding met de tapcomputer (adres en poort) of luistert zelf op een poort.
- Seriële poort: COM-poort of USB-serieel, 1200–115200 baud, 8N1, 7E1 of 7O1.
- Bij netwerk en serieel stel je de berichtvorm in (één bericht per regel, of STX … ETX met eventueel een XOR-controle en ACK/NAK terug) en het patroon van een bericht, met de delen
kraanofpluen eventueelml,cl,liter,porties,tafel,bedieningenid(bv.kraan;mlof alleen een PLU per glas). De leveranciers geven hun exacte formaat alleen aan installateurs; vraag het bij de leverancier van de tapcomputer. Test-tap stuurt een tap zoals de tapcomputer dat zou doen.
- Velden:
- Kranen (beheerder): per kraan of PLU het product en hoe het op de bon komt: per glas (glas in ml; een tap van 520 ml met glazen van 250 ml = 2 glazen; vanaf 50% telt een glas) of per liter (de prijs van het product is de literprijs; op de bon bv. "Pils 0,33 l" voor het juiste bedrag).
- Op de bon: meldt de tapcomputer een tafel, dan komt de tap meteen op de open bestelling van die tafel. Anders staat hij bij Getapt: in het bestelscherm verschijnt de balk "… keer getapt zonder bon"; kies de taps en tik Op deze bon. De regels staan meteen op besteld (er gaat geen werkbon meer naar de bar) en de voorraad gaat eraf. De knop Getapt in de bovenbalk toont alles wat nog geen bon heeft.
- Afkeuren (recht Storno): spoelen, breuk, proeven, personeel, gratis of overig (met toelichting); dat komt in het logboek. Te weinig voor een glas (bv. spoelen) moet worden afgekeurd.
- Overzicht (recht Omzet per periode): per kraan getapt, op de bon, afgekeurd (per reden), geannuleerd en nog open, in liters, met het percentage dat verkocht is, en als CSV.
- Gemelde taps kunnen niet gewijzigd worden (alleen afgehandeld).
Gedoseerd tappen en Kegboard
Met gedoseerd tappen gaat een kraan pas open nadat het glas op de kassa is aangeslagen, en dan alleen voor die hoeveelheid. Zo wordt er niets getapt dat niet op de bon staat. Het werkt alleen als het tapsysteem aan staat, en je zet het per kraan aan (standaard uit).
- Per kraan (beheerder, Instellingen → Tapsysteem → Kranen): vink Gedoseerd tappen aan en kies hoe lang de kraan na het aanslaan open mag (10–600 seconden, standaard 120). Bij Kegboard vul je ook het relais (magneetventiel) in. Gedoseerd tappen kan alleen per glas.
- Aanslaan: bij Bestellen (of bij direct Afrekenen) maakt de kassa per bonregel met dat product een vrijgave (aantal glazen × glas in ml) en stuurt die naar de tapcomputer. De tap die daarna binnenkomt, hoort bij die bonregel. Hij komt dus niet nog een keer op de bon en ook niet bij Getapt. Een tap zonder vrijgave komt gewoon bij Getapt.
- Storno van de regel voordat er getapt is: de kraan gaat weer dicht. Een vrijgave die niet op tijd getapt is, verloopt; de kraan gaat nooit later alsnog open.
- Vrijgaven in het bestelscherm (een balk boven de bon): zien wat er loopt, Stoppen, en Opnieuw vrijgeven. Opnieuw vrijgeven kan alleen als er nog niets getapt is, dus er wordt nooit iets extra's vrijgegeven. Test-vrijgave (beheerder) geeft één glas vrij zonder bon; dat komt in het logboek.
- Hoe de vrijgave bij de tapcomputer komt:
- Kegboard (Kegbot, open source, ESP32 met flowmeters en magneetventielen; volledig openbaar protocol): de kassa geeft een grant voor de kranen met dat product, de relais en de hoeveelheid. Het bord sluit de kraan zelf als de hoeveelheid bereikt is of de tijd om is.
- Netwerk/serieel: een instelbare vrijgave-opdracht met
{kraan},{ml},{porties},{sec}en{id}(bv.V{kraan};{ml}), verstuurd in de berichtvorm van de bron (regel of STX … ETX met XOR). Optioneel is er een stopopdracht. De exacte opdracht geeft de leverancier.
- Kegboard koppelen: kies bij + Bron het merk Kegbot Kegboard. Het bord meldt zich bij de bron; klik Toestaan (of Weigeren). Het bord krijgt dan één keer een eigen sleutel, die de kassa alleen als hash bewaart. Een ander apparaat of een verkeerde sleutel verandert niets aan een gekoppeld bord; is het bord zijn sleutel kwijt, gebruik dan eerst Koppeling verbreken. De bron toont de firmware, de meters en de relais van het bord. De kranen zijn de meternummers (0, 1 …). Een pasje bij het bord wordt geweigerd: afrekenen gaat aan de kassa. Staat het tapsysteem uit, dan bewaart het bord zijn berichten en stuurt het ze later.
- Bij de bron stel je in na hoeveel seconden zonder flow de kraan dichtgaat (5–300, standaard 30). Per kraan vul je het meternummer, het relais (magneetventiel) en hoe lang de kraan na het aanslaan open mag in.
Muziek bedienen vanaf de kassa
Het personeel bedient de muziek vanaf het touchscreen van de kassa, zodat er geen apart scherm op de bar nodig is. Zet het aan bij Instellingen → Zaak → Schermen en bediening → Muziek bedienen vanaf de kassa (standaard uit). Dan staat de knop Muziek in de bovenbalk: per bron (bv. Bar en Terras) Afspelen, Pauze, Volgende, Vorige, Harder, Zachter en een schuif voor het volume, met wat er nu speelt. Terug naar de kassa sluit het paneel. Uitzetten: de bronnen blijven bewaard.
- Playlist (Sonos, Bluesound en VLC): de wachtrij met wat er nu speelt. Tik op een nummer om het af te spelen; met Aanpassen haal je nummers weg (✕), zet je ze hoger of lager (↑ ↓; Sonos en Bluesound) of maak je de playlist leeg. Met Andere muziek kiezen speel je een Sonos-favoriet (bv. een zender of Tunify-kanaal) of -afspeellijst, of een BluOS-voorkeuze.
- Op een eigen scherm: dezelfde bediening en de playlist groot op
http://<kassaserver>:3000/muziek, bv. op een tweede monitor naast de kassa of een tablet op de bar (op hetzelfde apparaat al aangemeld, anders met een pincode). - Op een tablet of telefoon: een QR-code met het adres van dat eigen scherm in het netwerk van de zaak. Een medewerker scant hem met de eigen tablet of telefoon (op het wifi-netwerk van de zaak) en meldt aan met de eigen pincode; met Afmelden is het weer dicht. Zie Tweede scherm op een tablet of telefoon.
De beheerder voegt de bronnen toe met + Muziekbron, kiest hoe die gekoppeld is en test hem met Testen:
- Soundtrack (soundtrack.io): via de openbare API, met een API-token (aan te vragen bij Soundtrack) en een geluidszone (Zones laden). Afspelen, pauze, volgende, volume en wat er speelt.
- Sonos: het IP-adres van de speaker (bij een groep: de speaker die de groep leidt). Werkt met alles wat op de Sonos speelt, bv. Tunify, Spotify of radio.
- Bluesound (BluOS): het IP-adres van de speler; werkt ook met alles wat erop speelt, bv. Tunify.
- VLC op de muziekcomputer: de webinterface aan (Extra → Voorkeuren → Alles tonen → Interface → Hoofdinterfaces: Web, met een wachtwoord bij Lua); het IP-adres (eventueel met
:poort, standaard 8080) en het wachtwoord. - Eigen muziekcomputer (webadressen): voor een muziekcomputer of -box met een webadres per knop; GET of POST, en
{volume}(0-100) in het adres voor het volume. Zonder Harder/Zachter-adres zet de kassa het volume per stap. - Webplayer van het muziekpakket: het webadres van de webplayer of bedieningspagina (bv. de webplayer van Tunify of Media Tools) opent in de kassa bij de knop Muziek; mag de dienst niet in een ander scherm, dan met Openen in een eigen venster.
De kassa praat vanaf de server met de spelers, dus die moeten in hetzelfde netwerk staan als de kassa (Soundtrack via internet). Bedienen mag iedereen die is aangemeld; instellen het recht Zaak, betalen en printers instellen. Het token en het wachtwoord komen nooit terug in beeld en niet in het logboek; in het logboek staat alleen het instellen (aan/uit, bronnen), niet elke knop. De configuratie-export neemt alleen aan/uit mee (de bronnen horen bij één zaak).
Tweede scherm op een tablet of telefoon
De muziek en de camera's kunnen ook op de eigen tablet of telefoon van een medewerker, als tweede scherm naast de kassa. In het venster Muziek of Camera's staat de knop Op een tablet of telefoon: die toont een QR-code met het adres, bv. http://192.168.1.20:3000/muziek of .../camera.
- Zet de tablet of telefoon op het wifi-netwerk van de zaak.
- Scan de QR-code met de camera (of typ het adres in de browser).
- Meld aan met je eigen pincode. Je ziet alleen wat je mag: de muziek iedereen, de camera's alleen met het recht Camerabeelden bekijken.
- Klaar: Afmelden rechtsboven. Is de aanmelding verlopen (bv. de tablet lag een nacht stil), dan vraagt het scherm weer om de pincode.
Tip: zet de pagina op het beginscherm van de tablet (in de browser: Toevoegen aan beginscherm), dan opent hij als een app.
Daarom vraagt de kassa het IP-adres van de kassa-pc in het netwerk op (heeft de pc er meer, bv. wifi en kabel, dan kies je het netwerk). Op het beheerportaal (kassa op afstand) is het het adres van het portaal. De QR-code maakt de kassa zelf, zonder internet.
Tablets koppelen: met één knop naar de tablet (optioneel)
Nog makkelijker: koppel een tablet één keer, dan stuurt de kassa de muziek of de camera's met één knop naar die tablet. Zet het aan bij Instellingen → Zaak → Schermen en bediening → Tablets als tweede scherm (standaard uit).
- Op de tablet: open
http://<kassaserver>:3000/tablet(bij de instelling staat Op een tablet of telefoon met de QR-code), meld aan met een pincode en geef de tablet een naam, bv. Tablet Bar. Koppelen. - Op de kassa: in het venster Muziek of Camera's staat nu de knop Naar Tablet Bar (met een groen bolletje als de tablet aan staat). Tik erop: de tablet opent dat scherm vanzelf. Bij muziek gaat de gekozen bron mee (bv. Terras).
- Op de tablet: Sluiten gaat terug naar wachten; Deze tablet ontkoppelen haalt de koppeling weg.
Laat de pagina op de tablet open staan; staat de tablet uit of slaapt hij, dan opent hij het scherm zodra hij weer aan is. De tablet blijft aangemeld als de medewerker die er aanmeldde: de camera's sturen en zien kan alleen met het recht Camerabeelden bekijken. De beheerder ziet bij de instelling welke tablets gekoppeld zijn en of ze aan staan, en kan ze een andere naam geven of weghalen. De tablet bewaart een eigen sleutel; de kassa bewaart daarvan alleen een hash. Uitzetten: de gekoppelde tablets blijven bewaard. In het logboek staat wie een tablet koppelde, hernoemde of weghaalde.
Oproepscherm voor afhalers
Een scherm voor de gasten met links Wordt bereid en rechts Klaar, met grote nummers, zoals bij een snackbar of fastfoodzaak. Zet het aan bij Instellingen → Zaak → Schermen en bediening → Oproepscherm voor afhalers (standaard uit).
Koppelen is niet nodig: open op een tv met een browser (smart-tv, stick of mini-pc), een tablet of een tweede monitor het adres van de kassa met /oproep, bv. http://192.168.1.20:3000/oproep. Bij de instelling en in het venster Oproepen staan de knoppen Op een eigen scherm en Op een tablet of telefoon (QR-code met het adres). Aanmelden hoeft niet: het scherm toont alleen nummers. Tik één keer op het scherm, dan mag de browser geluid maken.
Wat er op komt:
- afhaalbestellingen uit de kassa, de webshop en Thuisbezorgd (en desgewenst ook bestellingen aan de balie zonder tafel, bij snelle verkoop), van de laatste 12 uur;
- zodra er iets naar de keuken of bar is gestuurd (of de webshop staat op in bereiding): dan staat het nummer bij Wordt bereid;
- Klaar gaat vanzelf als het keukenscherm alles van de bestelling klaar meldt of de webshopbestelling op klaar staat. Het nummer knippert even en het scherm geeft een ding-dong;
- een klaar nummer blijft zo veel minuten staan als ingesteld (standaard 10), of tot Opgehaald;
- bestellingen van de kiosk (zie Kiosk voor zelfbediening) staan er altijd op zodra ze betaald zijn of aan de kassa betaald worden, ook bij "hier opeten", met het ophaalnummer van hun bon;
- optioneel ook bestellingen voor bezorgers van Thuisbezorgd, Uber Eats, Deliveroo en HubRise (vinkje Ook bestellingen voor bezorgers …): met het bestelnummer van het platform en de naam van het platform eronder, zodat de bezorger ziet wanneer zijn bestelling klaar staat. Opgehaald meldt het platform dan ook dat de bezorger hem heeft (net als in het venster van het platform).
Het nummer: bij de webshop, Thuisbezorgd en de bezorgplatforms het bestelnummer dat de gast of bezorger al heeft; anders het ophaalnummer (1 tot 999). Dat staat groot op de kassabon, met de uitleg dat het nummer op het scherm komt als de bestelling klaar is (in de taal van de kassabon).
Optioneel (standaard uit, bij de instelling):
- Nummer omroepen met een stem: bij een nieuw klaar nummer zegt het scherm bv. "Nummer 42, uw bestelling is klaar." in de gekozen taal (Nederlands, Engels, Duits, Frans, Spaans, Italiaans, Portugees, Pools, Turks of Arabisch). De stem komt van de browser van het scherm en klinkt per apparaat anders; tik na het openen één keer op het scherm. Na het belletje, als het geluid ook aan staat.
- Bestelstatus op de telefoon: onder het ophaalnummer op de kassabon komt een QR-code. De gast scant hem, ziet zijn nummer en de stand (besteld, wordt klaargemaakt, klaar, opgehaald) en krijgt een melding als de bestelling klaar is. Dit gaat via het beheerportaal, dus de kassa moet daarmee verbonden zijn. Niet bij de webshop en Thuisbezorgd (die hebben een eigen status) en niet bij de kiosk (die heeft een eigen instelling).
In de kassa staat de knop Oproepen (met het aantal dat nog wordt bereid):
- Klaar zet een nummer met de hand op klaar (zonder keukenscherm, of als het sneller is). Bij een bestelling van de webshop of Thuisbezorgd gaat de status mee, dus krijgt de gast ook bericht.
- Terug zet het weer bij Wordt bereid.
- Opgehaald haalt het van het scherm (met Ongedaan maken).
Bij de instelling kies je ook of de voornaam naast het nummer staat (standaard niet, voor de privacy) en of het scherm geluid geeft. Uitzetten: geen knop Oproepen en geen ophaalnummer op de bon; de instellingen blijven bewaard. In het logboek staat wie wat met de hand op klaar, terug of opgehaald zette.
In- en uitklokken
Standaard staat klokken uit: dan is het nergens in de kassa te zien (geen knop in de bovenbalk, niet op het aanmeldscherm, geen tabblad Werktijden). Zet het aan via Instellingen → Zaak, onder In- en uitklokken van personeel:
- Uit: niet gebruiken. Zet je klokken later uit, dan is het nergens meer te zien, maar de al geklokte uren blijven bewaard (er wordt niets gewist); zet je het weer aan, dan staan ze er weer.
- Aan: medewerkers kunnen in- en uitklokken. Na aanmelden vraagt de kassa of je wilt inklokken (Niet nu mag). In de bovenbalk staat dan Inklokken of Ingeklokt 17:02; tik daarop om uit te klokken.
- Verplicht: na aanmelden eerst inklokken, anders kun je de kassa niet gebruiken. Uitklokken meldt je meteen af.
Wie de kassa niet gebruikt (bv. de keuken) klokt op het aanmeldscherm: tik In- / uitklokken en voer je pincode in. Dat wisselt tussen in en uit, zonder aan te melden.
Staat klokken aan, dan ziet de beheerder in Instellingen → Werktijden:
- wie er nu ingeklokt is (en kan iemand die vergeten is uitklokken);
- de gewerkte uren per medewerker per periode, met alle diensten, en een download als CSV (uren ook als decimaal getal voor de loonadministratie);
- diensten aanpassen of toevoegen (tik op een dienst, of + Dienst toevoegen). Elke wijziging komt met oude en nieuwe tijden in het logboek.
In België wordt elk in- en uitklokken ook aan de zwarte doos gemeld. Is die niet bereikbaar, dan gaat het klokken niet door (net als afrekenen). Of dit precies voldoet aan de Belgische personeelsregistratie, moet nog bevestigd worden.
Wegen en etiketten (weegschaal)
Staat de weegschaal aan (Instellingen → Weegschaal), dan kunnen producten een prijs per kilo hebben. Alle andere producten blijven gewoon per stuk.
- Wegen: tik op een product met een prijs per kilo (de knop toont bv.
12,95/kg). Het venster Wegen toont het gewicht van de weegschaal (bv. een Aclas OS6X, of de weegschaal waar de kassa zelf op draait) live; groen = stil. Leg het product op de weegschaal en tik op Toevoegen zodra het gewicht stil staat. De prijs is prijs per kilo × gewicht (op de cent afgerond); een bakje (tarra) van het product gaat er vanzelf af. Heeft het product keuzeopties, dan komen die daarna. - Meer weegschalen: staan er meer weegschalen, dan kies je bovenin het venster op welke je weegt. Elke kassa/tablet onthoudt zijn keuze.
- Met de hand: geen weegschaal (of mag het met de hand), tik dan het gewicht in:
0,512of1,2is kilo,512of512 gis gram. - Etiket van de TS6X: scan de streepjescode van het etiket met de streepjescodescanner op het bestelscherm (gewoon scannen, er hoeft niets open te staan), of tik op Etiket en scan of tik de 13 cijfers in. Het product (PLU) en het gewicht komen van het etiket. Staat er een prijs op het etiket, dan rekent de kassa precies die prijs.
- Op het scherm, de kassabon en het klantscherm staat het gewicht erbij, bv.
Gehakt 6,63met daaronder0,512 kg x € 12,95/kg; op de werkbon0,512 kg Gehakt. Splitsen, verplaatsen en retour gaan in kilo's. - Een gewogen product kan alleen met verbinding met de kassaserver (het gewicht komt via de kassaserver).
Uber Eats, Deliveroo en HubRise
Naast Thuisbezorgd.nl / Takeaway.com komen ook bestellingen van Uber Eats (Nederland en België), Deliveroo (alleen België; Deliveroo is eind 2022 uit Nederland vertrokken) en alles wat op HubRise zit (o.a. Uber Eats, Deliveroo, Just Eat/Takeaway.com en kleinere bestelapps) in de kassa. Elk platform apart aan te zetten bij Instellingen → Bezorgplatforms (standaard uit, uitzetten bewaart alles). Het tabblad toont per platform in welke landen het werkt en waarschuwt als het niet in het land van de zaak werkt.
- Aanzetten, dan Inloggen bij Uber Eats en winkel koppelen (de zaak logt in met haar eigen Uber Eats-account). Heeft het account meer winkels, vul dan het winkel-id (store id) in en log opnieuw in. Uber Eats moet Pin Voordeel daarvoor eerst als partner goedkeuren.
- Deliveroo: rechtstreeks, via het portaal. Vul de site-id (location id) en het merk-id (brand id) in. Zonder tablet (standaard): de kassa accepteert of weigert; met tablet: de zaak accepteert op de tablet en het portaal meldt alleen of de bestelling in de kassa staat.
- HubRise: de kassa haalt de bestellingen zelf op (elke 20 seconden, geen portaal nodig).
- Per platform: automatisch accepteren, werkbon meteen naar keuken/bar en (Uber Eats, Deliveroo) menu vanzelf sturen na een wijziging en Menu nu sturen. Op het menu staan de producten die onder Producten op het menu van Uber Eats en Deliveroo zijn aangevinkt, met keuzeopties; uitverkocht gaat mee.
Bestellingen. Een bestelling wordt een gewone bestelling (bezorgen of afhalen, groepsnaam <platform> <nummer>) met de prijzen van het platform: producten herkend aan het id (uit het menu), de code of het PLU-nummer, onbekend = een losse regel met de prijs van het platform (en een melding); bezorgkosten, toeslagen en korting als eigen regels; klopt het totaal toch niet, dan een regel "Verschil". De werkbon gaat meteen naar keuken/bar. Knop Platforms in de bovenbalk (met het aantal lopende bestellingen; oranje als er iets te accepteren is): accepteren of weigeren (met reden), in bereiding, klaar, onderweg, bezorgd of opgehaald, annuleren, en Afronden (online betaald). Wat het platform kent, gaat terug (Uber Eats: accepteren, weigeren, annuleren; Deliveroo: accepteren, weigeren, in bereiding, klaar, opgehaald; HubRise: alle statussen). Bezorgt de zaak zelf (zelf bezorgen), dan staat de bestelling ook bij Ritten, en vertrek en bezorgd gaan vanzelf naar het platform. Een annulering van het platform laat de bestelling vervallen. Is de kassa meer dan 2 minuten niet verbonden met het portaal, dan weigert het portaal een nieuwe bestelling van Uber Eats en zegt het Deliveroo (met tablet) dat het niet lukte, zodat de zaak het op de tablet ziet.
Code: apps/pos-server/src/lib/bezorgplatforms.ts, routes/bezorgplatforms.ts; schermen Bezorgplatforms.tsx. Portaalkant: horecapos-portaal/src/platforms.mjs. Logboek: Bezorgplatforms (aan/uit, instellingen, bestellingen). Alles gaat mee in de back-ups van de kassa.
Kleinere platforms in Nederland en België (Homie, Hebtrek, sneleten.nl, Bistroo ...) hebben geen openbare kassakoppeling; zitten ze op HubRise, dan werken ze via HubRise. Verder: zie de backlog.
Geldautomaat (gesloten geldsysteem)
Standaard uit: contant werkt zoals altijd. Bij een gesloten geldsysteem raakt het personeel het contante geld niet aan: de klant of medewerker doet het geld in de automaat, die telt, controleert op vals geld en geeft wisselgeld terug.
- Automaten waar de kassa zelf mee praat:
- CashDro (3, 4+, 5, 7, S Compact; NuKassa, KluisKassa): via het netwerk (web service). Zet op de CashDro Web Integration aan en maak een eigen gebruiker voor de kassa.
- Cashmatic (SelfPay 460/860/1060; in België Xpos): via het netwerk (poort 50301) met een gebruiker van de Cashmatic.
- Azkoyen Cashlogy (POS1000, POS1500): via de CashlogyConnector op een Windows-pc bij de automaat (poort 8092).
- CashKeeper: via CKMonitor op een Windows-pc (poort 16501).
- Glory CASHINFINITY (CI-5, CI-10, CI-10X; ook via Cikam): via de besturing (FCC) van de automaat. Nog beta: laat de eerste koppeling nakijken door Glory of je dealer.
- Extern: andere software stuurt de automaat aan en praat met de kassa (zoals Cikam, ImaCash voor 25 merken, de software van CashGuard/StrongPoint (Merlin), PayComplete (SUZOHAPP), Gunnebo SafePay of Franse merken als CashMag).
- Proefautomaat: zonder hardware, om te oefenen of te laten zien. Met Verbinding testen controleer je adres en inlog. Zet de automaat in het eigen netwerk (nooit open naar internet) en gebruik een eigen gebruiker voor de kassa, geen beheerder.
- Afrekenen met Contant: Betalen bij de geldautomaat start de betaling voor het bedrag (contant afgerond als dat aan staat, plus fooi; bij rekening splitsen het deel). Het scherm toont wat er ingeworpen is en wat terugkomt; de kassa rekent pas af als de automaat klaar meldt. Annuleren = de automaat geeft het geld terug. Kon de automaat niet al het wisselgeld geven (te weinig munten), dan staat erbij hoeveel uit de kassalade moet. Een geslaagde betaling die nog niet afgerekend is (bv. tablet uitgevallen) wordt bij die bestelling teruggevonden.
- Contant alleen via de automaat (standaard aan): dan accepteert de kassaserver contant alleen met een geslaagde betaling bij de automaat voor precies die bestelling en dat bedrag. Uit = ook gewoon contant in de lade.
- Kassalade (Rapport → Kas, recht Kassalade beheren): Stand opvragen (per munt en biljet, bij Cashmatic, Cashlogy, Glory en de proefautomaat), Uitbetalen met reden (bv. wisselgeld voor de lade), Bijvullen en Afromen (wisselgeld blijft; bij Cashmatic). Verwacht in de kassalade telt het geld in de automaat niet mee (dat staat er apart onder: In de geldautomaat), maar wel het wisselgeld dat uit de lade moest.
Het ©-knopje
Rechtsonder op elk scherm (pincode, plattegrond, bestellen en keuken) staat een klein ©-knopje. Het opent de gegevens van OptimumPOS: logo, adres, telefoon, e-mail en website. Het icoon staat lokaal in de app en werkt dus ook zonder internet. Hetzelfde icoon is het app-icoon (tabblad en beginscherm).
Deel 2 · Manager
Aan de slag
Een manager kan standaard alles wat de bediening kan, en daarnaast onder andere kortingen geven, retouren doen, de dag afsluiten, de kassalade beheren en het logboek en de voorraad bekijken. Dat zit vooral onder de knop Rapport:
- Tussenstand (X): de omzet tot nu toe, zonder de dag af te sluiten.
- Kassalade: startgeld, geld in/uit en de lade openen.
- Dag afsluiten (Z): aan het eind van de dag; daarna begint een nieuwe dag.
- Eerdere Z-rapporten, Omzet per periode en Dashboard.
- Logboek, Cadeaubonnen en Klanten.
Voorraad
Standaard uit. Aanzetten via Instellingen → Zaak → Voorraad bijhouden. Uit = nergens in de kassa te zien.
- Per product kies je bij Instellingen → Producten → (product) → Voorraad:
- Niet: zoals altijd;
- Per product: elke verkoop telt 1 af (bv. flesjes, blikjes), met een meldniveau voor "bijna op";
- Via ingrediënten: een recept, bv. hamburger = 1 broodje + 150 g vlees + 1 plak kaas. Elke verkoop telt de ingrediënten af.
- Instellingen → Voorraad (recht Voorraad beheren, standaard manager en beheerder):
- Producten en Ingrediënten: de stand, met op / bijna op; filter "alleen (bijna) op" en export naar CSV.
- Per product of ingrediënt boek je Ontvangst (+) (levering), Telling (=) (geteld aantal wordt de nieuwe stand) of Afboeken (−) (breuk, over datum; reden verplicht).
- Ingrediënten aanmaken met eenheid (st, g, kg, ml, cl, l, portie, fles, fust) en meldniveau.
- Geschiedenis: alle mutaties (verkoop, storno, ontvangst, telling, afboeken) met wie en wanneer. Beheeracties komen ook in het logboek.
- Aftellen gebeurt bij Bestellen (of bij afrekenen voor wat direct werd afgerekend). Een storno telt terug. Splitsen en verplaatsen tellen niet dubbel. Bij menu's tellen de gerechten af, niet de menuregel. Retouren (creditbon) tellen niet terug (teruggebracht is meestal niet meer te verkopen); boek dat eventueel als ontvangst.
- Is de voorraad op (of een ingrediënt te weinig voor nog één keer), dan staat het product op alle kassa's vanzelf op uitverkocht. Bij bijna op staat nog N op de productknop. Na een ontvangst of telling is het meteen weer te bestellen. Ook de kassaserver weigert dan het product ("Pils" is op (voorraad 0)), dus ook vanaf een tablet die dat nog niet wist.
- De voorraad mag onder 0 komen (bv. twee tablets tegelijk, of offline besteld); de telling zet het weer recht.
- Bestellijst: Instellingen → Voorraad → Bestellijst. Per product (per product) en per ingrediënt stel je naast het meldniveau ook aanvullen tot en de leverancier in. Op de bestellijst staat alles wat op of onder het meldniveau zit (zonder meldniveau: op 0), per leverancier, met als voorstel aanvullen tot − stand. Aantallen zijn aan te passen en aan/uit te vinken. Daarna Printen (bonprinter), Kopiëren (voor mail of WhatsApp), Export (CSV), en na de levering Geleverd: als ontvangst boeken (boekt alles in één keer bij). Met het vinkje bovenaan zie je ook wat nog niet op is, om extra te bestellen.
- Keuzeopties: bij een keuzegroep (Instellingen → Producten → Keuzeopties) staat de knop Voorraad. Geef per keuze de ingrediënten per stuk op, bv. Extra kaas = 1 plak kaas, Friet = 150 g friet. Wordt de keuze gekozen, dan gaan die ingrediënten er per stuk af (ook als het product zelf geen voorraad bijhoudt; bij storno komen ze terug). Is een ingrediënt op, dan staat de keuze op de kassa als (op) en is hij niet te kiezen.
Bestellen bij leveranciers
Standaard uit. Aanzetten bij Instellingen → Voorraad → Bestellen bij leveranciers (alleen met Voorraad bijhouden aan). Uit = de bestellijst werkt zoals altijd.
- Leveranciers (tabblad Leveranciers): kies er een uit de lijst of maak een eigen leverancier. De lijst heeft groothandels en cash & carry (Sligro, Sligro-ISPC/Sligro-M, HANOS, Makro, De Kweker, Horeca Totaal, Van Zon, zegro, Lekkerland), foodservice (Bidfood en Bidfood Belgium, Solucious, Chefs Culinar, Java, Q-Food, Agora Culinair, VHC Jongens/Kreko/Actifood, Hocras, Van Hoeckel ...), drankengroothandels (De Klok, Henk Smit, Horesca, De Monnik, Hansen, Dranken Geers ...), brouwers en frisdrank (Heineken via Sligro, AB InBev/BEES, Alken-Maes, Haacht, Duvel Moortgat, Martens, Coca-Cola, Spadel, Grolsch, Bavaria), versleveranciers (Van Gelder, Driessen, FiliusKaas, Bakkers Brigade, Rungis ...), non-food (Bunzl, Takeaware, Supplierz), de online wijnwinkel Vinify.nl en bestelplatforms (Apicbase, Exact Horeko, Growzer, inOne, Cuisin.io, OrderXL). Alleen leveranciers uit het land van de zaak staan erin. Kies je er een, dan staan de bestelwijze, het bestand en de kolommen al goed; bij elke leverancier staat hoe je daar bestelt.
- Per leverancier: klantnummer, bestellen via:
- E-mail: de bestelling als e-mail (met tabel) aan het bestel-e-mailadres, optioneel een kopie, met de bestellijst als bijlage: CSV, Excel, CSV voor Care4Fresh (veel versgroothandels), UBL 2.1 Order (Peppol BIS Order), EANCOM ORDERS (D96A in Nederland, D01B/HO2C in België) of cXML. Antwoorden komen bij het e-mailadres van de zaak.
- Bestand: de kassa maakt het bestand, jij uploadt het in de webshop van de leverancier (bv. Bunzl Snel bestellen:
artikel;aantal, Takeaware:SKU,Quantity). Scheidingsteken, kopregel en kolommen zijn in te stellen (artikel,ean,omschrijving,aantal,eenheid,prijs,totaal; metartikel=SKUgeef je de kop een eigen naam). - Koppeling (cXML): een cXML OrderRequest met klantnummer en gedeeld geheim naar het order-adres van de leverancier, zoals inkoopsystemen die naar Sligro, HANOS en Bidfood sturen. Adres, klantnummer en geheim krijg je van de leverancier (Sligro: koppelingen@sligro.nl). Het geheim gaat nooit terug naar het scherm.
- Bij beide koppelingen kan ook een gebruikersnaam en wachtwoord (Basic) en extra headers (één per regel, bv.
X-Api-Key: ...). - Upload (SFTP/FTPS): de kassa zet het bestand (EANCOM, UBL, CSV, Excel ...) zelf in een map op de server van de leverancier, zoals veel groothandels EDI-orders aannemen. SFTP (SSH), FTPS (expliciet op poort 21 of impliciet op poort 990) of, alleen in het eigen netwerk, FTP. Inloggen met wachtwoord of SSH-sleutel (OpenSSH, PEM of PuTTY .ppk; ed25519, ECDSA of RSA). Sleutel maken maakt een sleutelpaar in de kassa; de publieke sleutel stuur je naar de leverancier. Verbinding testen logt in en zoekt de map. De vingerafdruk van de SFTP-server wordt bij de eerste verbinding vastgelegd en daarna gecontroleerd (een andere server krijgt het wachtwoord niet); bij FTPS met een eigen certificaat zet je de vingerafdruk van het certificaat vast. Er is geen extra software voor nodig.
- Printen: de bestelling op de bonprinter, om door te bellen.
- Wachtwoorden, sleutels, tokens en headers gaan nooit terug naar het scherm (leeg laten = houden, Wissen = weghalen).
- Koppeling aanvragen: bij een leverancier stelt de kassa een e-mail op voor een koppeling (cXML, EDI via SFTP/FTPS, UBL/Peppol of de eigen API van de leverancier) met de gegevens van de zaak (naam, adres, btw-nummer, klantnummer, GLN) en wat er nodig is; bij EDI met de publieke sleutel. Aanpassen en versturen; een kopie en de antwoorden gaan naar het e-mailadres van de zaak. De datum van de aanvraag staat bij de leverancier. Bij Sligro gaat hij naar koppelingen@sligro.nl, anders vul je het adres van je accountmanager in.
- Een eigen leverancier (niet uit de lijst) kan alles behalve wat de leverancier zelf moet aanbieden: e-mail, bestand en printen werken altijd; een koppeling of upload alleen met de gegevens van die leverancier.
- Besteldagen en levering: besteldagen, uiterlijk-tijd, levertijd (de gewenste leverdatum op de bestelling) en een minimum bestelbedrag. Automatisch: op de besteldagen vanaf die tijd zet de kassa zelf een bestelling klaar (jij kijkt hem na) of verstuurt hem meteen (per e-mail, upload of koppeling; onder het minimum bestelbedrag alleen klaarzetten). Eén keer per dag per leverancier.
- Per product (Instellingen → Producten → (product) → Voorraad, bij Per product) en per ingrediënt: Bestellen bij (de leverancier), bestelnummer bij die leverancier, EAN, per verpakking (krat van 24 = 24), de naam van de verpakking en de inkoopprijs per verpakking. Het meldniveau is het moment om te bestellen; aanvullen tot hoeveel er dan moet zijn.
- Inkooporders (tabblad Inkooporders):
- Bestelvoorstel per leverancier: alles wat op of onder het meldniveau zit. Wat al besteld en nog niet binnen is (onderweg) telt mee, zodat je niets dubbel bestelt. Voorstel = aanvullen tot − stand − onderweg (zonder aanvullen tot: tot het meldniveau), naar boven afgerond op hele verpakkingen. Aantallen aanpassen en Bestelling maken.
- Een bestelling is eerst klaargezet: aantallen, losse regels (zonder product, bv. servetten), opmerking en leverdatum zijn nog aan te passen. Dan Versturen (op de manier van de leverancier of een andere keer anders). Mislukt het (bv. de leverancier weigert), dan staat de reden erbij en kun je het opnieuw proberen.
- Ontvangen: per regel het ontvangen aantal (staat al op het bestelde aantal); de voorraad gaat er per verpakking bij (2 kratten van 24 = 48), met de bestelling erbij in de geschiedenis.
- Elk bestand (CSV, Excel, UBL, EANCOM, cXML) is ook los te downloaden.
- Verstuurd, mislukt, ontvangen en geannuleerd komen in het logboek. De gewone Bestellijst blijft werken; staat bij een product een leverancier uit de lijst, dan staat het daar onder die naam.
Reviewbeheer
Reviews van Google en Trustpilot in de kassa lezen en beantwoorden. Aanzetten bij Instellingen → Sparen en reviews → Reviewbeheer (standaard uit, dan is er nergens iets van te zien). Lezen en beantwoorden bij Rapport → Reviews (recht Reviews lezen en beantwoorden, standaard ook voor de manager). Zet je het uit, dan blijven de koppelingen en de reviews bewaard.
- Elke zaak tikt daarna alleen op Verbinden met Google en logt in met het eigen Google-account van het bedrijfsprofiel. Een Places-sleutel kan ook centraal (de kosten zijn dan voor de leverancier). Trustpilot is per zaak: elke zaak heeft een eigen Trustpilot Business-account (de API hoort bij een betaald abonnement), en daaruit komen de sleutel, het geheim en het business user ID. In de kassa staat bij elke manier "Wie regelt dit?".
- App van de leverancier (via het klantportaal): staan de Google-app en/of de Trustpilot-app van de leverancier in het klantportaal (zie de README van horecapos-portaal, "Reviews: apps van de leverancier"), dan kiest de beheerder bij Inloggen en sleutels voor App van de leverancier (standaard bij een nieuwe koppeling als het portaal de app heeft). De zaak tikt op Verbinden met Google of Inloggen met Trustpilot en logt in met het eigen account; de kassa wacht zelf tot het inloggen klaar is (elke 3 seconden, hooguit 15 minuten) en haalt de tokens één keer op bij het portaal. Vernieuwen gaat ook via het portaal. Geen client-ID, secret of API-sleutel in de kassa nodig; bij Trustpilot wel het domein en, voor antwoorden, het business user ID. Trustpilot openbaar leest dan via de sleutel van het portaal. Vereist
PORTAAL_URLenPORTAAL_SLEUTEL. Eigen app of API-sleutel blijft werken zoals hieronder. - Van wie zijn de reviews: ze blijven op het eigen Google-bedrijfsprofiel en de eigen Trustpilot-pagina van de zaak, en de kassa bewaart ze alleen in de eigen kassadatabase. Antwoorden verschijnen onder de naam van de zaak. Het portaal geeft alleen de inlog door (in het geheugen, hooguit 15 minuten, één keer op te halen) en bewaart geen reviews of tokens; de naam van de app van de leverancier staat alleen op het toestemmingsscherm.
- Zelf aanmelden: bij elk platform staat een link om zelf een Google-bedrijfsprofiel (business.google.com/create) of een Trustpilot Business-account (business.trustpilot.com) te maken, en bij Trustpilot naar de abonnementen (business.trustpilot.com/plans). Aanmelden en betalen gaat bij het platform zelf; daar is geen API voor.
- Daarna Verbinden met Google en inloggen met het account dat het bedrijfsprofiel beheert. Eén vestiging in het profiel = meteen gekozen; meer = kiezen in de kassa.
- Google Places (alleen lezen): met de Place ID en een API-sleutel van de Places API (of
GOOGLE_PLACES_API_KEY): het gemiddelde, het aantal reviews en de 5 meest relevante reviews. Beantwoorden kan zo niet. - Trustpilot Business (lezen en beantwoorden): API-sleutel en API-geheim van een applicatie in Trustpilot Business (Integrations → API; of
TRUSTPILOT_API_KEYenTRUSTPILOT_API_SECRET), het domein van de zaak (de kassa zoekt de business unit op) en, voor antwoorden, het business user ID van wie antwoordt. - Trustpilot openbaar (alleen lezen): alleen de API-sleutel.
- De kassa haalt elke 30 minuten op (en meteen na het koppelen; Nu ophalen). Het e-mailadres en het ordernummer van de gast (die Trustpilot meegeeft) bewaart de kassa niet.
- Rapport → Reviews: gemiddelde, aantal per ster, zonder antwoord en ongelezen; filteren op platform, sterren, zonder antwoord en ongelezen. Per review Beantwoorden (hooguit 4000 tekens; iedereen kan het lezen), Antwoord wijzigen, Antwoord weghalen en Gelezen. Een nieuwe of gewijzigde review is ongelezen. In het logboek staan review_beantwoord en review_antwoord_weg.
- Ontkoppelen houdt de opgehaalde reviews.
Sms- en e-mailmarketing
Berichten naar klanten van de klantenkaart die daar toestemming voor gaven. Zonder klantenkaart kan geen van beide aan.
- Toestemming per klant en per kanaal: bij een nieuwe klant aan de kassa staan de vinkjes "Klant wil acties per sms ontvangen" en "... per e-mail ontvangen" (standaard uit). Bij Rapport → Klanten zie en wijzig je de toestemming (met de datum waarop die gegeven is) en een verjaardag (alleen dag en maand). Afmelden: vinkjes uit en opslaan.
- Menu meteen bijgewerkt: zet je marketing of de klantenkaart aan of uit, dan stuurt de kassa binnen enkele seconden het menu opnieuw naar de webshop (alleen als er iets veranderde), zodat het vinkje er meteen wel of niet staat.
- Toestemming via de webshop: heeft de zaak een webshop, dan staat bij afrekenen het vinkje "Ik wil aanbiedingen ontvangen per e-mail/sms" (alleen de kanalen die aan staan; standaard uit). Komt zo'n bestelling binnen, dan zoekt de kassa de klant op telefoonnummer (anders e-mailadres), maakt hem zo nodig aan en zet de toestemming met de datum. Een ontbrekend nummer of adres bij een bestaande klant wordt aangevuld; in het logboek staat klant_toestemming met bron webshop.
- Rapport → Marketing (recht Klantenkaart beheren): bovenaan hoeveel klanten toestemming gaven voor sms en voor e-mail.
- Acties (eenmalig): naam, sms of e-mail, (onderwerp,) tekst met
{naam},{zaak}en{punten}, en eventueel alleen klanten die een tijd niet geweest zijn of minimaal zoveel punten hebben. Bekijken toont aan hoeveel klanten het gaat, het bericht zoals de klant het krijgt en het aantal sms'en per klant. Test sturen naar je eigen nummer of adres. Daarna Versturen: de kassa verstuurt op de achtergrond (hooguit 1000 per keer) en telt wat verstuurd en mislukt is. Niemand krijgt dezelfde actie twee keer; stopt de kassa halverwege, dan gaat Verder versturen door bij wie nog niets kreeg. - Versturen via Mailchimp of Klaviyo (met een koppeling met een gekozen lijst, zie hieronder): bij een actie per e-mail kies je bij Versturen via de kassa (de eigen mailserver, zoals hierboven) of Mailchimp of Klaviyo. Dan werkt de kassa eerst de lijst bij (afmeldingen, punten) en maakt daar een campagne voor precies de gekozen klanten die op de lijst staan (Mailchimp: een vaste groep op de audience; Klaviyo: een eigen lijst voor de actie), en verstuurt hem met de standaard afzender van de audience of het account.
{naam}en{punten}vult Mailchimp/Klaviyo per klant in; de afmeldlink van de dienst staat eronder. Geen limiet van 1000 per keer en geen persoonlijke kortingscode ({code}). Lukt het niet, dan blijft de actie een concept met de melding erbij. Het tabblad Marketing is er ook als alleen de koppeling actief is (dan alleen acties via Mailchimp/Klaviyo; Test sturen kan met de mailserver van de kassa). Automatische berichten verstuurt de kassa altijd zelf; in Mailchimp/Klaviyo maak je die als Customer Journey of Flow. Klaviyo-sleutel: ook schrijfrechten voor Campaigns en Templates (wie al inlogde: opnieuw inloggen). - Als pushbericht via de webshop (als in het webshopbeheer Pushberichten met aanbiedingen aan staat): kies bij Versturen per Pushbericht (webshop als app), met een titel (hooguit 60 tekens) en een korte tekst (hooguit 200 tekens; alleen
{zaak}wordt ingevuld, want de webshop weet niet wie de gast is). De kassa stuurt de actie via het beheerportaal naar de webshop, en die stuurt hem naar de gasten die daar Aanbiedingen als melding aanzetten; tikken opent het menu van de webshop. Na een paar seconden staat bij de actie hoeveel er aankwamen. Hooguit 3 per dag, samen met wat de zaak in het webshopbeheer verstuurt; anders blijft de actie een concept met de reden erbij. Het tabblad Marketing is er ook als alleen dit aan staat (zonder klantenkaart of mailmarketing). Geen kortingscode of selectie (dagen, punten); testen: zet op je eigen telefoon in de webshop Aanbiedingen als melding aan. - Automatisch: een verjaardagsbericht (op de verjaardag, één keer per jaar) en "we missen u" (na zoveel dagen zonder bezoek, één keer per keer dat de klant wegblijft). Aan/uit per bericht; ze gaan alleen overdag (10:00–20:00) de deur uit.
- Persoonlijke kortingscode (optioneel, per bericht of actie; alleen als Kortingscodes aan staat bij Instellingen → Zaak): elke klant krijgt een eigen code, bv.
TERUG-7K4Q2M(verjaardagJARIG-…, actieACTIE-…), in procenten of een vast bedrag, eventueel met een minimum bestelbedrag, een keer te gebruiken, zoveel dagen geldig na het versturen (standaard 30) en aan de kassa en/of in de webshop. Zet{code}en{geldig}in de tekst waar je ze wilt hebben; anders zet de kassa onder het bericht "Uw kortingscode: … (10% korting, aan de kassa of in de webshop, geldig t/m …)". Bekijken en Test sturen tonen een voorbeeldcode (TERUG-VOORBEELD, werkt niet). Lukt het versturen niet, dan wordt de code niet aangemaakt. Bij de actie staat hoeveel codes er zijn uitgegeven en gebruikt. - Afmelden staat onder elk bericht: bij een sms "Afmelden? Bel ... of zeg het bij uw volgende bezoek", bij een e-mail een afmeldlink naar het e-mailadres van de zaak (ook de knop Afmelden in Gmail en Outlook). Een antwoord op de mail gaat naar de zaak.
- Privacy (AVG): alleen klanten met toestemming en een nummer of adres; geen nummers of adressen in het logboek, wel per actie hoeveel er verstuurd en mislukt is. Verwijder je een klant, dan verdwijnt die ook uit de verzendlijst.
- Kosten: sms'en gaan via je eigen CM.com-account (meer dan 160 tekens = meer sms'en per klant). Gmail en andere mailservers hebben een daglimiet; stuur bij veel klanten in delen.
Fooi per medewerker
Bij Instellingen → Zaak → Fooi (alleen als "Fooiknoppen tonen bij afrekenen" aan staat) kies je hoe de fooi per medewerker op de tussenstand (X), het Z-rapport (bon en mail) en Omzet per periode (ook in de CSV) komt:
| Keuze | Verdeling |
|---|---|
| Uit (standaard) | alleen het fooitotaal, zoals altijd |
| Ieder eigen fooi | fooi van de rekeningen die iemand zelf heeft afgerekend |
| Pot naar uren | alle fooi samen, naar ingeklokte uren in die periode (vraagt In- en uitklokken; niemand geklokt = gelijk) |
| Pot gelijk | alle fooi samen, gelijk over wie ingeklokt was (zonder klokken: wie iets aantikte of afrekende) |
Losse centen gaan naar wie het dichtst bij de volgende cent zit, zodat het totaal altijd klopt. Het is een overzicht: de kassa keert niets uit (dat kan met "Geld uit de lade"). Oude Z-rapporten blijven zoals ze waren.
Z-rapport per e-mail
Vul bij Instellingen → Zaak → Z-rapport mailen naar eenmalig het e-mailadres van de beheerder in (meer adressen: komma ertussen, max. 3). Na Dag afsluiten gaat het Z-rapport dan automatisch naar dat adres, naast het geprinte bonnetje. Leeg = niet mailen, zoals altijd.
- Het mailen gebeurt op de achtergrond, zodat een trage mailserver de dagafsluiting niet ophoudt.
- Mislukt of nog een keer nodig: Rapport → Eerdere Z-rapporten → (rapport) → Opnieuw mailen (met KOPIE erop).
Samenvatting van de dag (optioneel)
Staat er een adres bij Z-rapport mailen naar, dan staat daaronder het vinkje Met een korte samenvatting van de dag bovenaan de mail (standaard uit). Aan = bovenaan de mail van het Z-rapport een paar regels in gewone taal, alleen uit de eigen gegevens van de kassa (geen AI, niets gaat naar buiten):
- omzet, bonnen en gasten en de besteding per bon, tegenover dezelfde periode een week eerder (in procenten); was er toen niets, dan staat dat erbij;
- de 5 best verkochte producten, en wat opvalt: producten waarvan er minstens 3 meer of minder verkocht zijn dan vorige week;
- het aantal storno's (tegenover vorige week) en het drukste uur (bonnen en omzet).
Het Z-rapport zelf (bonnetje en mail) blijft precies hetzelfde. Voorbeeld van vandaag toont de samenvatting vanaf de laatste dagafsluiting tot nu. De samenvatting is in het Nederlands, net als de mail van het Z-rapport.
Dashboard
Tabblad Dashboard in Rapport (recht Omzet per periode), alleen lezen:
- Omzet per uur als grafiek: de gekozen dag (blauw) naast dezelfde dag vorige week (grijs). Vandaag wordt vergeleken met vorige week tot hetzelfde tijdstip, zodat het percentage eerlijk is. Met ◀ ▶ of de datum kies je een andere dag.
- Tegels: omzet (± % t.o.v. vorige week), bonnen en gemiddeld per bon, gemiddelde besteding per gast (alleen ter plaatse; afhalen/bezorgen telt niet mee) voor die dag en voor de gekozen periode.
- Top 10 producten en drukste uren over de laatste 7, 28 of 90 dagen. Drukste uren is een warmtekaart weekdag × uur (gemiddelde omzet per open dag) met de drie drukste uren erboven, handig voor het rooster.
Verkochte cadeaubonnen tellen niet als omzet, kortingen en menukoppen niet in de top 10 (zoals in de andere rapporten). Een dag loopt van 00:00 tot 24:00.
Extra rapporten
Drie extra tabbladen in Rapport, elk apart aan te zetten via Instellingen → Zaak → Beheer en rapporten → Extra rapporten (standaard uit: dan geen tabblad). Ze vragen hetzelfde recht als Omzet per periode en zijn alleen om te lezen. Periode: deze week, vorige week, deze maand, vorige maand, de laatste 90 dagen, dit jaar of zelf kiezen (hooguit ruim een jaar).
- Menu engineering: per product hoe vaak het verkocht is (aandeel in alle verkochte stuks) tegenover wat het per stuk oplevert (marge = verkoopprijs zonder btw min de kostprijs). Elk product krijgt een indeling: Ster (populair en veel marge: zo laten), Ploegpaard (populair, weinig marge: prijs iets omhoog of goedkoper maken), Puzzel (weinig verkocht, veel marge: beter in beeld zetten) en Hond (weinig verkocht, weinig marge: van de kaart halen of vervangen). Populair = minstens 70% van een gelijk deel; veel marge = minstens de gemiddelde marge per verkocht stuk. De kostprijs komt uit Apicbase (Instellingen → Receptuur), anders uit de inkoopprijs van het product (inkoopprijs per verpakking gedeeld door het aantal per verpakking), anders uit het recept van ingrediënten met een inkoopprijs (Voorraad). Producten zonder kostprijs staan apart onderaan. Optioneel per productgroep (
?groep=). - Acties en codes: per kortingscode, per actie uit Marketing (de persoonlijke codes samen) en per happy hour: hoe vaak gebruikt (bonnen; bij een happy hour ook de stuks), hoeveel korting, de omzet en het gemiddelde per bon.
- Verspilling: wat er van de voorraad is afgeboekt (Instellingen → Voorraad, Afboeken (−)), per reden (hoofdletters en spaties maken niet uit) en per product of ingrediënt, met de waarde tegen de kostprijs; en wat er geannuleerd is nadat het al naar de keuken of bar was gestuurd, met de verkoop- en kostwaarde.
Kortingen
Een manager of beheerder ziet in het bestelscherm naast het totaal de knop % Korting:
- op de hele bon of op één regel;
- als percentage (10, 15, 20, 25, 50, 100% = gratis, of zelf invullen) of als vast bedrag;
- altijd met een reden (Personeel, Vaste klant, Klacht, Actie, Eigen gebruik of zelf typen).
De korting komt als eigen regel op de bon ("Korting 10%", met de reden eronder) met hetzelfde btw-tarief, zodat totaal en btw-specificatie kloppen. Op de hele bon wordt de korting per btw-tarief verdeeld. Weghalen: tik op het bedrag van de kortingsregel. Wordt een regel met eigen korting geannuleerd, dan vervalt die korting mee. Haal je een product weg van een bon met korting in procenten op de hele bon, dan rekent de kassa die korting opnieuw uit over wat er overblijft (in België UC226); een vast bedrag blijft staan en wordt bij het afrekenen opnieuw over de regels verdeeld. Is er door 100% korting niets te betalen, dan sluit je af met "Afsluiten (niets te betalen)". Kortingen staan in het logboek, en in het X/Z-rapport en het periodeoverzicht als "waarvan korting". Bij een retour van een bon met korting gaat de korting naar verhouding mee.
Kortingscodes (optioneel)
Codes met korting op de hele bon, bijvoorbeeld voor een actie (ZOMER10). Aanzetten bij Instellingen → Zaak → Kortingscodes (standaard uit); de codes maak je bij Instellingen → Kortingscodes (recht Producten beheren):
- korting in procenten of een vast bedrag, eventueel met een minimum bestelbedrag, geldig van/tot en hooguit zo vaak (leeg = onbeperkt);
- per code: aan de kassa en/of in de webshop (de kassa stuurt de codes met het menu mee; het gebruik telt voor kassa en webshop samen).
Op het bestelscherm staat de knop Kortingscode (iedereen mag een code invoeren; de code is vooraf door de zaak gemaakt). De korting komt als regel "Kortingscode CODE" op de bon, verdeeld over de btw-tarieven; één code per bon, en niet meer als er al (deels) betaald is. Haal je de regel weer weg of wordt de bestelling geannuleerd, dan telt het gebruik niet meer. Een gebruikte code weghalen zet hem uit (de rapporten blijven kloppen). Alles staat in het logboek (Kortingscode). Code: lib/kortingscodes.ts, routes/kortingscodes.ts, Kortingscodebeheer.tsx, KortingscodeDialoog.tsx.
Ze staan niet in de lijst bij Instellingen → Kortingscodes (wel het aantal per actie bij Rapport → Marketing) en gaan wel mee naar de webshop zolang ze geldig en ongebruikt zijn.
Rapporten en dagafsluiting
Knop Rapport in de bovenbalk:
- Tussenstand (X): omzet, btw, betaalwijzen, per groep en de kassalade sinds de vorige dagafsluiting. Ook te printen. Sluit niets af.
- Dag afsluiten (Z) (manager of beheerder): kassalade tellen (verschil met startgeld + contant wordt getoond), startgeld voor de volgende dag invullen, afsluiten. Het Z-rapport krijgt een doorlopend nummer, wordt bewaard en op de bonprinter geprint. Kan niet zolang er bestellingen open staan. Optioneel: Tellen per munt en biljet (telhulp) vult het getelde bedrag voor je in; de telling per munt/biljet komt dan ook op het Z-rapport. Zelf het totaal intypen werkt zoals altijd.
- Kassalade (manager of beheerder, optioneel):
- Geld uit de lade (afstorten naar de bank, uitgave, fooi uitbetaald) of geld in de lade (wisselgeld) met bedrag en reden. De lade gaat open en er komt een bonnetje met paraafregel om bij het geld te bewaren (uit te zetten). Het telt mee in verwacht in de lade en staat per regel op het X- en Z-rapport.
- Startgeld van vandaag invullen of corrigeren (normaal vul je dat bij de dagafsluiting voor de volgende dag in).
- Lade openen zonder verkoop, met reden.
- Alles komt in het logboek. Gebruik je dit niet, dan werkt de dagafsluiting precies zoals voorheen (startgeld + contant = verwacht in de lade).
- Onder de omzet staat het aantal gasten (personen van de afgerekende bestellingen) en het gemiddelde per gast, ook op het geprinte X/Z-rapport.
- Omzet per periode (manager of beheerder): vandaag, gisteren, deze/vorige week, deze/vorige maand, dit jaar of zelf van-tot kiezen. Toont omzet, btw, betaalwijzen, fooi, gasten, productgroepen, per dag en per medewerker. Met Exporteren (Excel/CSV) krijg je een bestand voor de boekhouder (puntkomma's en komma-decimalen, opent direct in Nederlandse Excel).
- Eerdere Z-rapporten: lijst met omzet en kasverschil; openen en een kopie printen (met "KOPIE" erop).
Export naar de boekhouding
Rapport → Omzet per periode → Export boekhouding (journaal) (recht Omzet per periode) maakt een CSV met een journaalpost per dag, klaar om in te lezen in e-Boekhouden, Exact, SnelStart, Twinfield e.d. (via hun CSV-/memoriaalimport), of een van de formaten hieronder (UBL, XAF en kant-en-klaar voor 14 pakketten).
Per dag één boekstuk (KASSA-JJJJMMDD) dat altijd sluit (debet = credit):
| Kant | Wat |
|---|---|
| Debet | ontvangsten per betaalwijze (contant, pin, cadeaubon, online, overig), incl. fooi |
| Credit | omzet per btw-tarief (excl. btw) en af te dragen btw per tarief |
| Credit | fooi (te betalen aan personeel, geen omzet) |
| +/- | afrondingsverschil (contant afronden op 5 cent) |
| +/- | geld in/uit de lade (kasbeheer) tegen kruisposten, en kasverschil uit het Z-rapport |
Retouren en kortingen zitten al in de bonnen en verlagen de omzet. Kolommen: Datum; Boekstuk; Dagboek; Rekening; Omschrijving; Debet; Credit; Btw-code; Btw-% (puntkomma's, komma-decimalen). Na het downloaden meldt de kassa of er dagen zijn die niet sluiten of een groter verschil hebben dan afronding.
Naast de knop kies je het formaat (de keuze wordt in de browser onthouden). Hetzelfde journaal, maar zo opgemaakt dat het pakket het direct kan inlezen. De lijst toont alleen de formaten voor het land van de zaak (Instellingen → Zaak), eerst de standaarden (CSV, UBL, XAF), dan de pakketten op alfabet:
| Formaat | Bestand | Inlezen in het pakket |
|---|---|---|
| Algemeen (CSV) | journaal_…csv | elk pakket met een CSV-/memoriaalimport (kolommen koppelen) |
| UBL 2.1 / Peppol (XML), NL en BE | journaal_…_ubl.xml (meer dagen: .zip) | per dag een factuur "dagontvangsten" aan Kassaverkopen (al betaald) volgens Peppol BIS Billing 3.0, met een regel per btw-tarief en de omzetrekening in AccountingCost; alleen omzet en btw (betaalwijzen, fooi, afronding, lade en kasverschil horen niet in een factuur). Om te uploaden in o.a. Adsolut, Billit, BUNNI, DigiBoox, Expert/M, Moneybird, Popsy, Rompslomp, Storecove en TriFact365; niet om via het Peppol-netwerk te versturen. Naam, btw-nummer en adres komen uit Instellingen → Zaak |
| XML Auditfile Financieel (XAF 4.0), NL | journaal_…_xaf.xaf | auditfile van de Belastingdienst (XSD XmlAuditfileFinancieel4.0): één bestand voor de periode, grootboek, btw-codes, perioden en per dag een memoriaaltransactie; in te lezen in o.a. Caseware, Exact Reeleezee en Visma Cash |
| AccountView (XML), NL | journaal_…_accountview.xml | XML-mutaties (VFPData, een transact per boekingsregel met dj_code, period, inv_date, inv_nr, acct_nr, trn_desc en amount: debet positief, credit negatief), per dag één boekstuk in het memoriaal; inlezen met een importdefinitie (Document → Importeren → Importdefinitie aanmaken, type XML), de veldnamen zijn die van AccountView zelf, dus één keer 1-op-1 koppelen. Laat de eerste import nakijken |
| AFAS Profit (XML) | journaal_…_afas.xml | XML van de UpdateConnector FiEntries (financiële mutaties), per dag één boeking met jaar, periode, administratie en dagboek; in Profit inlezen met Importeren → XML; vul het administratienummer in (standaard 1) |
| Asperion (CSV), NL | journaal_…_asperion.csv | FMUTA-indeling (Extra → Import financiële mutaties), per dag een kopregel en de boekingsregels; de importdefinitie stelt Asperion in via de helpdesk |
| Dagstaat (HTML), NL en BE | journaal_…_dagstaat.html | leesbare dagstaat per dag (omzet per btw-tarief, betaalwijzen, fooi, kasverschil) en totalen; printen als PDF of mailen, voor pakketten zonder import (Accountable, Dext, Dexxter, Jortt, Kleisteen, MoneyMonk) |
| e-Boekhouden.nl (CSV) | journaal_…_eboekhouden.csv | Datum; Boekstuk; Omschrijving; Grootboekrekening; Bedrag (debet positief, credit negatief); Btw-code GEEN (de btw staat al op de btw-rekeningen); Import → Mutaties, soort memoriaal |
| Exact Online (XML) | journaal_…_exact.xml | eExact-XML (onderwerp GLTransactions): per dag een memoriaalboeking (type 90) in het dagboek; Import/export → XML importeren |
| InformerOnline (TXT), NL | journaal_…_informer.txt | tab-gescheiden memoriaal (Geavanceerd → Memoriaal → uploaden); dagboek moet een nummer 1–99 zijn (anders 90) |
| KING ERP (XML), NL | journaal_…_king.xml | KING_JOURNAAL: één boekingsgang (niet definitief) met per dag een journaalpost |
| KOMAS (CSV), NL | journaal_…_komas.csv | KOMAS vrij formaat (0401 Importeren journaalposten): Datum; Grootboek; Omschrijving; Bedrag |
| Odoo (CSV), NL en BE | journaal_…_odoo.csv | Boekhouding → Journal Entries → Import records; dagboek en rekening op naam of code |
| Sage BOB 50 (Excel), BE | journaal_…_bob.xlsx | Importation de données externes → Opérations diverses (kolommen één keer koppelen) |
| SAP Business One (ZIP), NL en BE | journaal_…_sapb1.zip | Data Transfer Workbench, Journal Entries: JournalEntries.csv en JournalEntries_Lines.csv |
| SnelStart (CSV) | journaal_…_snelstart.csv | Datum; Boekstuk; Omschrijving; Grootboekrekening; Debet; Credit (dd-mm-jjjj, komma, zonder BOM); memoriaal importeren, dagboek kies je bij het inlezen |
| Twinfield (XML) | journaal_…_twinfield.xml | dagboektransacties als concept (destiny="temporary"), de boekhouder zet ze definitief; vul de administratiecode in (leeg = de administratie waarin je importeert) |
| Winbooks (CSV), BE | journaal_…_winbooks.csv | K_DOC.CSV, per dag één document in het dagboek (Winbooks nummert zelf) |
| Yuki (XML) | journaal_…_yuki.xml | Journal-XML (GeneralJournal), per dag één memoriaal, zelfde opbouw als de live koppeling; administratie-ID optioneel |
Overzicht: welk boekhoudpakket op welke manier
Per segment, op alfabet. NL/BE = in welk land het pakket werkt: bij Instellingen → Boekhouding → Boekhoudpakket zie je alleen de pakketten voor het land van de zaak (Nederlandse pakketten werken niet in België en andersom). Live = de kassa boekt elke dag zelf (kiezen bij Instellingen → Boekhouding → Boekhoudpakket); op aanvraag = er is een API, maar die vraagt eerst een partnerregistratie of goedkeuring bij de leverancier (laat het ons weten). Bestand = het formaat bij Export boekhouding. Waar beide kunnen, kun je beide gebruiken. De lijst staat in packages/shared/src/boekhoudcatalogus.ts en verschijnt ook bij Instellingen → Boekhouding.
| Pakket | NL | BE | Live | Bestand | Opmerking |
|---|---|---|---|---|---|
| MKB en zzp | |||||
| Accountable | – | ✓ | – | Dagstaat (HTML, voor PDF of mail) | |
| AccountView (Visma) | ✓ | – | op aanvraag | AccountView (XML), Algemeen (CSV) | Bestand: XML-mutaties voor een importdefinitie (Document → Importeren); de algemene CSV kan ook met een importdefinitie. Live via de AccountView.Net-API na aanvraag bij AccountView. |
| Acumulus | ✓ | – | ✓ | – | Live als betaalde verkoopfactuur per dag, met een regel per btw-tarief. |
| AFAS Profit | ✓ | – | ✓ | AFAS Profit (XML) | |
| Asperion | ✓ | – | op aanvraag | Asperion (CSV) | Live na aanmelding als API-partner bij Asperion. |
| Billit | – | ✓ | op aanvraag | UBL 2.1 / Peppol (XML) | UBL uploaden via Fast input; live na goedkeuring door Billit. |
| BUNNI | ✓ | – | – | UBL 2.1 / Peppol (XML) | Nog geen openbare API-documentatie. |
| Dexxter | – | ✓ | – | Dagstaat (HTML, voor PDF of mail) | |
| DigiBoox (Visma DigiBTW) | ✓ | – | – | UBL 2.1 / Peppol (XML) | |
| e-Boekhouden.nl | ✓ | – | – | e-Boekhouden.nl (CSV) | Ook voor voormalige Ficsus-klanten. |
| Exact Online | ✓ | ✓ | ✓ | Exact Online (XML) | |
| Exact Reeleezee | ✓ | – | – | XML Auditfile Financieel (XAF 4.0) | |
| Horus | – | ✓ | ✓ | – | |
| InformerOnline | ✓ | – | – | InformerOnline (TXT) | |
| Jortt | ✓ | – | – | Dagstaat (HTML, voor PDF of mail) | Geen import: boek de dagomzet als opbrengst met de dagstaat als bijlage. |
| KING | ✓ | – | op aanvraag | KING ERP (XML) | Live na partnerregistratie bij KING Software. |
| Kleisteen | ✓ | – | – | Dagstaat (HTML, voor PDF of mail) | |
| KOMAS (Adfinis) | ✓ | – | – | KOMAS (CSV) | |
| Minox | ✓ | – | op aanvraag | – | Live na een partnerkoppeling via Minox. |
| Moneybird | ✓ | – | ✓ | UBL 2.1 / Peppol (XML) | |
| MoneyMonk | ✓ | – | – | Dagstaat (HTML, voor PDF of mail) | MoneyMonk krijgt in 2026 een API voor koppelingen. |
| Octopus | – | ✓ | op aanvraag | – | Live na aanvraag van een software house ID bij Octopus. |
| Popsy / Allegro | – | ✓ | – | UBL 2.1 / Peppol (XML) | |
| Rompslomp | ✓ | – | – | UBL 2.1 / Peppol (XML) | |
| Sage BOB 50 | – | ✓ | – | Sage BOB 50 (Excel) | |
| Silvasoft | ✓ | ✓ | ✓ | – | Live als verkoopboeking per dag, met een regel per btw-tarief; betaalwijzen, fooi en kasverschil gaan niet mee. |
| SnelStart | ✓ | – | ✓ | SnelStart (CSV) | |
| Twinfield | ✓ | – | ✓ | Twinfield (XML) | |
| Visma Cash | ✓ | – | op aanvraag | XML Auditfile Financieel (XAF 4.0) | API met een sleutel uit CASHWeb; de recordindeling voor boekingen wordt nog bevestigd. |
| Visma eAccounting | ✓ | – | op aanvraag | – | Live na goedkeuring door Visma (partnerregistratie). |
| Winbooks | – | ✓ | op aanvraag | Winbooks (CSV) | |
| Wolters Kluwer Adsolut | – | ✓ | op aanvraag | UBL 2.1 / Peppol (XML) | UBL met de omzetrekening per regel; zet in Adsolut "grootboekrekening verwerken bij verkopen" aan. |
| Wolters Kluwer Expert/M | – | ✓ | – | UBL 2.1 / Peppol (XML) | |
| Yuki | ✓ | ✓ | ✓ | Yuki (XML) | |
| Internationaal | |||||
| QuickBooks Online | ✓ | ✓ | ✓ | algemene CSV | Geen Nederlandse of Belgische editie: controleer de btw-instellingen. |
| Xero | ✓ | ✓ | ✓ | algemene CSV | |
| Zoho Books | ✓ | ✓ | ✓ | algemene CSV | |
| Enterprise en ketens | |||||
| Exact Globe+ | ✓ | ✓ | – | Exact Online (XML) | Zelfde XML als Exact Online; laat de eerste import nakijken. |
| Microsoft Dynamics 365 Business Central | ✓ | ✓ | ✓ | – | |
| Odoo | ✓ | ✓ | ✓ | Odoo (CSV) | |
| Oracle NetSuite | ✓ | ✓ | op aanvraag | algemene CSV | |
| SAP Business One | ✓ | ✓ | ✓ | SAP Business One (ZIP) | |
| Unit4 ERPx | ✓ | ✓ | – | algemene CSV | |
| Platforms en verzamelaars | |||||
| Apicbase | ✓ | ✓ | op aanvraag | – | Verkopen per bon voor voorraad en food cost: koppeling bij Instellingen → Receptuur (niet als boekhoudpakket). |
| Caseware | ✓ | ✓ | – | XML Auditfile Financieel (XAF 4.0) | |
| Combidesk | ✓ | – | op aanvraag | – | Combidesk bouwt en beheert de koppeling zelf (naar onder meer Exact, Moneybird, SnelStart en Twinfield); op aanvraag als partner. |
| Dext | ✓ | ✓ | – | Dagstaat (HTML, voor PDF of mail) | Mail de dagstaat (PDF) naar je Dext-adres. |
| Jamix | ✓ | ✓ | op aanvraag | – | Verkopen voor voorraad en food cost via de JAPI-interface van Jamix; maatwerk op aanvraag bij Jamix. |
| Omniboost | ✓ | ✓ | op aanvraag | – | Koppelt via het partnerprogramma van Omniboost door naar veel boekhoud- en hotelsystemen. |
| Storecove (Peppol) | ✓ | ✓ | op aanvraag | UBL 2.1 / Peppol (XML) | |
| TriFact365 | ✓ | – | – | UBL 2.1 / Peppol (XML), Dagstaat (HTML, voor PDF of mail) | |
| Elk ander pakket | ✓ | ✓ | – | algemene CSV, UBL of XAF (NL) |
Laat de boekhouder de eerste import nakijken. De opmaak staat in packages/shared/src/journaalexport.ts (met tests).
Instellingen → Boekhouding (recht Zaak, betalen en printers instellen): dagboekcode (standaard MEM) en de grootboekrekening per onderdeel. Leeg = voorbeeldrekening (NL: 8000/8010/8020 omzet, 1500/1510 btw, 1000 kas, 1100 pin; BE: 7000xx omzet, 451000 btw, 570000 kas). Laat de boekhouder de echte rekeningen invullen.
Koppeling met een boekhoudpakket
Live koppelingen met Acumulus, AFAS Profit, Microsoft Dynamics 365 Business Central, Exact Online, Horus, Moneybird, Odoo, QuickBooks Online, SAP Business One, Silvasoft, SnelStart, Twinfield, Xero, Yuki en Zoho Books. Na elke dag boekt de kassa hetzelfde journaal als de export hierboven (omzet en btw per tarief, betaalwijzen, fooi, afronding, lade en kasverschil) als memoriaalboeking in het gekozen pakket, met het dagboek en de grootboekrekeningen van Instellingen → Boekhouding. Er staat altijd hooguit één pakket aan.
- De lijst is ingedeeld per segment (MKB en zzp, Internationaal, Enterprise en ketens) en toont alleen de pakketten die in het land van de zaak werken; de server weigert een pakket uit een ander land (400) en boekt er niet mee (409). Direct eronder krijgt de beheerder precies de velden van dat pakket; verbinden en de lijst met geboekte dagen staan onder de grootboekrekeningen, met daaronder het overzicht van alle pakketten voor dit land. Stonden er bij het bijwerken twee aan (in een oudere versie kon dat), dan blijft Exact Online aan en gaat het andere pakket uit.
| Pakket | Land | Verbinden met | Wat de kassa boekt |
|---|---|---|---|
| Acumulus | NL | contractcode, gebruiker en wachtwoord van een API-gebruiker | per dag een betaalde verkoopfactuur met een regel per btw-tarief; fouten mailt Acumulus naar ACUMULUS_FOUTMAIL |
| AFAS Profit | NL | omgeving, token, administratie | memoriaal (FiEntries) |
| Business Central | NL, BE | tenant, omgeving, bedrijf, client-ID en geheim van een Microsoft Entra-app (API.ReadWrite.All) | regels in het algemene dagboek met de code van Dagboek |
| Exact Online | NL, BE | inloggen (OAuth, eigen app: zie Exact Online hieronder; België: start.exactonline.be) | memoriaalboeking in het dagboek (bv. 90) |
| Horus | BE | inloggen (OAuth, app hieronder), optioneel dossier | diverse verrichting |
| Moneybird | NL | API-token, optioneel administratie | memoriaal (general journal document) |
| Odoo | NL, BE | adres, database, gebruiker, API-sleutel | journaalpost in het dagboek met de korte code (bv. MISC) |
| QuickBooks Online | NL, BE | inloggen (OAuth, app hieronder; QUICKBOOKS_OMGEVING) | journal entry; rekeningen op nummer |
| SAP Business One | NL, BE | adres van de Service Layer, database, gebruiker, wachtwoord | journaalpost (JournalEntries) |
| Silvasoft | NL, BE | gebruiker en API-sleutel | verkoopboeking aan de relatie Kassaverkopen, een regel per btw-tarief (betaalwijzen, fooi en kasverschil gaan niet mee) |
| SnelStart | NL | koppelsleutel en abonnementssleutel | memoriaal |
| Twinfield | NL | inloggen (OAuth, app hieronder), optioneel kantoor | dagboektransactie |
| Xero | NL, BE | inloggen (OAuth, app hieronder), optioneel organisatie | manual journal; rekeningen op code |
| Yuki | NL, BE | API-sleutel, optioneel administratie | memoriaal (GeneralJournal) |
| Zoho Books | NL, BE | inloggen (OAuth, app hieronder; standaard het Europese datacenter), optioneel organisatie | journaalpost; rekeningen op code |
- OAuth (Horus, QuickBooks, Twinfield, Xero, Zoho): één keer een app registreren bij het pakket.
- Van een aantal pakketten zijn de velden van de API niet volledig uit de openbare documentatie te bevestigen (o.a. Horus, Zoho Books, het teken bij Business Central en de opbouw bij SAP Business One): laat de eerste boeking altijd door de boekhouder nakijken.
- Exact Online: boekt het journaal als memoriaalboeking in de gekozen administratie.
- Kiezen bij Instellingen → Boekhouding → Boekhoudpakket → Exact Online (standaard Uit). België: de kassa gebruikt vanzelf
start.exactonline.be. - Instellingen → Boekhouding → Exact Online: Verbinden met Exact Online opent het inloggen bij Exact; daarna staat er met welke administratie de kassa verbonden is. Vul bij Dagboek de code van een memoriaal in Exact in (bv.
90) en zorg dat de grootboekrekeningen in Exact bestaan. - Wanneer: direct na Dag afsluiten en verder elk uur, voor alle afgelopen dagen (tot en met gisteren) vanaf Boeken vanaf (standaard de dag van verbinden; eerdere dagen heeft de boekhouder al). Elke dag één keer; dagen zonder omzet worden overgeslagen. Nu boeken kan altijd.
- Fouten (een rekening bestaat niet in Exact, de dag sluit niet, geen internet) staan met de reden bij die dag; de kassa probeert het later opnieuw, en de dagen erna wachten tot het gelukt is (zo blijft de volgorde goed). In het logboek: "exact_geboekt".
- De btw staat op de btw-grootboekrekeningen (zonder btw-code, net als in de export). Laat je boekhouder de eerste boekingen nakijken.
- Exact: een verbinding blijft werken zolang de kassa hem gebruikt (elke 10 minuten een nieuw token, elk keer een nieuw refresh token). Is hij ingetrokken of te lang niet gebruikt, dan vraagt de kassa om Opnieuw verbinden. Ontkoppelen wist de tokens; wat geboekt is, blijft.
- Kiezen bij Instellingen → Boekhouding → Boekhoudpakket → Exact Online (standaard Uit). België: de kassa gebruikt vanzelf
- AFAS Profit: omgevingsnummer (bv.
12345; productie, test of acceptatie), het token van een app-connector met de UpdateConnector FiEntries en het administratienummer (standaard 1). Dagboek = de code van een memoriaal in AFAS (bv.90). - Dagboek = nummer of naam van een memoriaaldagboek; is er maar één memoriaaldagboek, dan neemt de kassa dat. Grootboekrekeningen moeten nummers zijn.
- Twinfield: inloggen met OAuth. Zonder die app kan de kassa niet verbinden. De kassa zoekt het cluster en de administratie (leeg = de eerste); dagboek = de code van een memoriaal (bv.
MEMO). Boekt definitief (destiny="final"). - Yuki: API-sleutel van de administratie (Yuki → Instellingen → Webservices); administratie leeg = de eerste bij die sleutel. Boekt een memoriaal (GeneralJournal); Yuki gebruikt geen dagboekcode.
- Wanneer: direct na Dag afsluiten en elk uur, voor alle afgelopen dagen vanaf Boeken vanaf (standaard de dag van verbinden; bij een ander pakket opnieuw vanaf die dag). Elke dag één keer per pakket; dagen zonder omzet worden overgeslagen; bij een fout staat de reden bij die dag en wachten de dagen erna. Nu boeken kan altijd. In het logboek: "boekhoudpakket_geboekt".
- Sleutels en tokens gaan nooit naar het scherm (leeg laten bij opnieuw verbinden = houden). Op de kopie van de kassa op het portaal wordt niet geboekt.
Auditfile kassa (XAA)
Voor Nederlandse zaken staat bij Rapport → Omzet per periode naast de export boekhouding de knop Auditfile kassa (XAA): de XML Auditfile Afrekensystemen 3.2 van de Belastingdienst en het XML Platform (SRA) over de gekozen periode (hooguit ruim een jaar; recht Omzet per periode). Dat is het bestand dat de Belastingdienst aanbeveelt om de gegevens van een kassa bij een controle of aan de accountant te leveren; de regels staan in de Handreiking voor een betrouwbaar afrekensysteem (docs/xaa).
In het bestand (auditfile_kassa_<van>_tm_<tot>.xml, schema docs/xaa/XmlAuditfileAfrekensystemen3.2.xsd):
- stamgegevens: de zaak (naam, btw-nummer, adres), de btw-codes, alle medewerkers (met rol en datum van aanmaken; plus
SYSTEEMvoor wat de kassa zelf doet, zoals webshop en koppelingen) en alle artikelen met hun groep; - gebeurtenissen: alles uit het logboek in de periode (aanmelden en afmelden, kassalade geopend, dagafsluiting, instellingen en prijzen gewijzigd, storno, korting, retour, kopiebon, in- en uitklokken ...) en het openen van de kassadag met het startgeld, elk met de code van de Belastingdienst (18001 aanmelden, 18003 lade, 18006 wijziging installatie, 18008 Z-rapport, anders 18999);
- kastransacties: elke bon (verkoop, retour en proforma, met het bonnummer, de medewerker en de fiscale status als die niet in orde is) met alle regels (artikel, groep, aantal, prijs, btw; ook kortingen, cadeaubonnen, menukoppen en voor het afrekenen geannuleerde regels, die met bedrag 0), de btw per tarief, de afronding, de betalingen per betaalwijze (contant, pin, cadeaubon, online; fooi apart) en het geld in/uit de kassalade.
Bedragen zijn positief met C (verkoop, ontvangst) of D (retour, uitbetaling); tijden in Nederlandse tijd met offset. Alle sleutels zijn de ids uit de database zonder streepjes, dus terug te vinden in de kassa.
Ondertekenen (hoofdstuk 6 van de specificatie): heeft Optimum POS een certificaat ingesteld, dan komt de auditfile ondertekend in een envelop (XML Signature) en heet het bestand …_ondertekend.xml; anders is het een losse auditfile, en dat meldt de kassa bij het downloaden.
Betalen op rekening
Zakelijke klanten (een bedrijf dat elke week lunch laat halen, een hotel, een vereniging) kopen op rekening en betalen later, met een factuur. Zet het aan bij Instellingen → Facturen → Betalen op rekening (alleen met Facturen aan; standaard uit).
- Klanten: bij Rapport → Op rekening leg je de zakelijke klanten vast met de gegevens voor de factuur (naam, adres, btw-nummer, KvK-/onderne- mingsnummer, Peppol-ID, e-mail), eventueel een grens (hoeveel er hooguit open mag staan) en een eigen betaaltermijn (anders die van de facturen), en of de factuur meteen verstuurd wordt.
- Afrekenen: betaalwijze Op rekening, kies de klant (met wat er al open staat en de grens). De bon is een gewone verkoop: omzet en btw op die dag, in België gewoon via de zwarte doos, op de bon "Op rekening". De kassa maakt meteen de factuur (UBL/Peppol en om te printen) met het bedrag dat nog open staat en de vervaldatum, en verstuurt hem zoals ingesteld bij de facturen (e-mail, Peppol via Billit/Storecove/Banqup of het eigen adres). Op rekening is één bedrag voor de rest van de rekening (eerst een deel anders betalen mag), zonder fooi; een cadeaubon verkopen kan niet op rekening. Boven de grens weigert de kassa.
- Betalen: de klant betaalt in de zaak met contant, pin of cadeaubon (Rapport → Op rekening → Betaling ontvangen; ook een deel). Dat is geen nieuwe verkoop en geen nieuwe kassabon: contant komt als geld in de lade (de lade gaat open), alles staat op X en Z onder Ontvangen op rekening. Is alles betaald, dan staat de factuur op "betaald". Online betalen hoort er niet bij.
- Overgemaakt: staat er een IBAN bij Gegevens op de factuur, dan staat dat op de factuur (en in de UBL), met "Betalen kan ook in de zaak". Heeft de klant overgemaakt, dan leg je dat vast met Betaling ontvangen → Overgemaakt (bank): niet in de lade, wel op X en Z onder Ontvangen op rekening. Zonder IBAN staat er "Te betalen in de zaak". In België staat er een gestructureerde mededeling (+++123/4567/89012+++, uit het factuurnummer) op de factuur en in de UBL, zodat de bank hem meestuurt.
- Bank: overboekingen afboeken zonder overtikken, zie hieronder.
- Tegoed (geld vooraf): bij Rapport → Op rekening → Tegoed storten zet je geld vooraf op de rekening van een klant, contant (de lade gaat open) of met de pin, bv. voor een reeks lunches. Bij de volgende verkoop op rekening gaat het tegoed eerst van de factuur af; staat er meer op de factuur, dan blijft de rest open. Het tegoed staat bij de klant (tegoed € ...), op X en Z onder Ontvangen op rekening (Tegoed gestort, Met tegoed van de klant) en in het journaal als vooruit ontvangen (standaard 1640 / 460000). In België gaat het storten als geld in (signMoneyInOut) naar de zwarte doos (UC4100).
- Verzamelfactuur (per klant, standaard uit): met Eén factuur voor alle bonnen krijgt de klant bij een verkoop op rekening nog geen factuur. De bon staat open bij de klant (Bonnen nog niet gefactureerd, telt mee voor de grens) en kan al betaald worden. Met Verzamelfactuur maken (bv. aan het eind van de maand) komen alle open bonnen op één factuur, elke regel met het bonnummer ervoor; wat al betaald is, staat er als betaald op. Een retour naar de rekening komt er als negatieve regels op. Uit = zoals altijd een factuur per verkoop. In België één factuur met alle bonnen bij de zwarte doos (signInvoice, UC4121 en UC4122).
- België: betaalt de klant later een verkoop op rekening (contant, pin, cadeaubon of overgemaakt), dan meldt de kassa dat als betaalcorrectie op de bon: van klantkrediet naar de echte betaalwijze (signPaymentCorrection, UC4118).
- Overzicht: openstaande facturen met de vervaldatum (te laat in rood), per klant de facturen en betalingen. Bij Instellingen → Facturen een kolom Open.
- Boekhouding: in het journaal gaat de verkoop op rekening naar Debiteuren (standaard 1300 in Nederland, 400000 in België; in te stellen bij Instellingen → Boekhouding) en de betaling van kas, pin, cadeaubon of bank (standaard 1050 / 550000) naar debiteuren. XAA: betaalwijze "Op rekening".
- Recht: Op rekening afrekenen en betalingen op rekening ontvangen (standaard bediening nee, manager ja). Alles staat in het logboek.
- Uit: de klanten, facturen en betalingen blijven bewaard (ook in de back-up); de schakelaar gaat mee in de configuratie-export, de klanten niet (die horen bij één zaak).
- In de webshop (optioneel, standaard uit): met Ook in de webshop bestellen zakelijke klanten online op rekening (afhalen en bezorgen). Bij Rapport → Op rekening maak je per klant een klantcode en geef je die aan de klant; de kassa bewaart alleen een versleutelde versie, dus je ziet hem één keer. Nieuwe klantcode = de oude werkt niet meer; Klantcode weg = die klant kan niet meer online op rekening. De webshop houdt de grens aan. In het venster Webshop rond je zo'n bestelling af met Afronden (op rekening): afrekenen op rekening, met meteen de factuur.
Bank: overboekingen afboeken
Bij Rapport → Op rekening → Bank zoekt de kassa bij elke bijschrijving de factuur op rekening erbij:
- Bankafschrift inlezen: het bestand uit je internetbankieren, als CAMT.053 (XML, alle banken in Nederland en België), MT940 (.sta/.940) of CODA (.cod, België). Alleen bijschrijvingen; een afschrift twee keer inlezen geeft geen dubbele regels.
- Zoeken: op het factuurnummer of de gestructureerde mededeling in de omschrijving (zeker), anders op het bedrag (en de naam): dan is het een voorstel. Elke regel kun je afboeken (bij het voorstel of een andere factuur), negeren of later toch afboeken. Afboeken = Overgemaakt (bank) op de bankdatum, nooit meer dan er open staat; niet in de lade.
- Bankkoppeling (PSD2, optioneel): bij Instellingen → Facturen → Bankkoppeling haalt de kassa elk uur zelf de bijschrijvingen op via Enable Banking (banken in Nederland, België en de rest van Europa). Kies de bank en log in bij de bank (zakelijke rekening); de toestemming geldt 180 dagen, daarna opnieuw koppelen. Ontkoppelen trekt de toestemming in; de bijschrijvingen blijven. Zonder contract met Enable Banking werkt dit alleen voor je eigen rekeningen (restricted production).
- Automatisch afboeken (standaard uit): een bijschrijving die zeker bij een factuur hoort, boekt de kassa meteen af (ook bij het inlezen).
- Recht: afboeken met Op rekening afrekenen en betalingen op rekening ontvangen; de bankkoppeling instellen met Zaak, betalen en printers instellen. Inlezen, koppelen, ophalen en afboeken staan in het logboek.
- Uit: met betalen op rekening uit haalt de kassa niets op; de bijschrijvingen en de koppeling blijven bewaard (ook in de back-up).
Camerabeelden in de kassa
Alle camerabeelden van de zaak op één pagina, zonder apart scherm of aparte app. Zet het aan bij Instellingen → Zaak → Schermen en bediening → Camerabeelden in de kassa (standaard uit). Dan staat de knop Camera's in de bovenbalk voor wie het recht Camerabeelden bekijken heeft (standaard manager en beheerder; bij Instellingen → Rechten ook voor de bediening aan te zetten). Alle camera's staan naast elkaar; tik op een camera voor groot beeld. Uitzetten: de camerasystemen blijven bewaard.
Ook als eigen scherm: Op een eigen scherm opent http://<kassaserver>:3000/camera (bv. een monitor achter de bar), en Op een tablet of telefoon toont een QR-code: een medewerker scant hem met de eigen tablet of telefoon en meldt aan met de eigen pincode (ook daar alleen met het recht Camerabeelden bekijken). Op een smal scherm staan de camera's onder elkaar. Zie Tweede scherm op een tablet of telefoon.
De beheerder voegt de camerasystemen toe met + Camerasysteem, test ze met Testen en kiest per camera de naam en of hij op de pagina staat:
- Hikvision, Dahua, Axis en Reolink: een camera of recorder (NVR) in het netwerk: het IP-adres (eventueel met
:poort), een gebruiker (bij voorkeur alleen kijken) en de kanalen, bv.1-8of1,3,5. Inloggen met Basic of Digest; https met een eigen certificaat mag. - Synology Surveillance Station: het adres van de NAS (standaard poort 5000, met https 5001) en een gebruiker; Camera's ophalen haalt de camera's met hun namen op.
- UniFi Protect: het adres van de console (https) en een lokaal account; Camera's ophalen.
- ONVIF: elke camera of recorder met ONVIF (bv. Hanwha, Bosch, Uniview, Annke); Camera's ophalen zoekt per videobron het foto-adres op.
- Eigen webadres: een foto (JPEG), een MJPEG-stroom of een
rtsp://-adres. - Webpagina van het camerasysteem (bv. Frigate, Blue Iris of go2rtc): opent in de kassa bij de knop Camera's (of in een eigen venster).
Zonder ffmpeg: de foto.
Privacy: de kassa haalt de beelden bij het camerasysteem op en geeft ze alleen door; er wordt niets opgeslagen (geen opnames, geen cache). Gebruikers en wachtwoorden blijven op de server en komen nooit terug in beeld of in het logboek. In het logboek staat wie de camera's bekeek. De beelden zelf vraagt de pagina op met een sleutel (12 uur geldig, zolang de medewerker aangemeld is), omdat een beeld in de browser geen token kan meesturen. De configuratie-export neemt alleen aan/uit mee.
Logboek van gevoelige acties
Rapport → Logboek (manager of beheerder) laat zien wie wat deed en wanneer.
- Kies een periode (vandaag, gisteren, deze week, deze/vorige maand of zelf van-tot), wat je wilt zien (standaard Gevoelige acties, of bv. alleen storno en korting, of Alles) en eventueel één medewerker.
- Bovenaan per medewerker: aantal en bedrag van storno's (geschrapt na bestellen), kortingen en retouren, en hoe vaak de lade zonder verkoop open ging, geld uit de lade, kopiebonnen, pro forma's en handmatig pinnen. Tik op een naam om alleen die medewerker te zien. Ook het aantal keer dat er een verkeerde pincode is ingevoerd.
- Daaronder elke actie met tijd, wie, wat en een leesbare omschrijving (bv. "2x Cola geschrapt na bestellen € 5,60 · tafel 4 · reden: klant wilde niet").
- Download (CSV) voor Excel.
Wat er wordt vastgelegd: storno's, kortingen (en weghalen), retouren, kopieën van bonnen, pro forma's, handmatig pinnen, lade openen, geld in/uit de lade, startgeld, dagafsluiting, regels of tafels verplaatsen, lege bestellingen sluiten, prijs/naam/btw van producten wijzigen, nieuwe of verwijderde producten, personeel en instellingen wijzigen, werktijden aanpassen, aan- en afmelden, verkeerde pincodes en in- en uitklokken. Met betalen op rekening ook: klanten, verkopen en betalingen op rekening, bankafschriften inlezen, de bankkoppeling en het ophalen bij de bank. Met de melding bij te lange doorlooptijd: te late bestellingen en verstuurde excuses. Met Mailchimp of Klaviyo: verbinden, lijst kiezen, ontkoppelen en afmeldingen van daar. Met muziek bedienen: aan/uit en het toevoegen, wijzigen en weghalen van muziekbronnen. Met camerabeelden: wie de camera's bekeek (hooguit één keer per half uur per medewerker), aan/uit en de camerasystemen. Met signalering: elk signaal, het afhandelen ervan en het aan- en uitzetten.
Signalering: fraude en afwijkingen
Instellingen → Signalering. Twee onderdelen, elk apart aan te zetten en standaard uit; uitzetten bewaart alle signalen en instellingen. Instellen mag wie het recht Signalering instellen heeft (standaard de manager en de beheerder); de signalen zien en afhandelen mag wie het logboek mag zien. De kassa kijkt elke 5 minuten (en met Nu controleren); niet op de schaduwkassa.
Fraude- en diefstalsignalering (per medewerker, per werkdag vanaf 05:00), elke regel apart aan of uit met een eigen drempel:
- storno's na de pro forma: geschrapt nadat de gast de rekening al zag;
- storno's, kortingen en retouren: vanaf zoveel keer, of samen vanaf een bedrag (0 = niet op bedrag);
- lade open zonder verkoop (knop Lade openen);
- bon lang open: besteld maar na zoveel minuten nog niet afgerekend.
Meldingen bij afwijkingen, vergeleken met dezelfde weekdag en hetzelfde tijdstip in de afgelopen weken (standaard 4; dagen zonder omzet tellen niet mee, minstens twee vergelijkingsdagen):
- omzet tot nu toe meer dan de marge lager (en/of hoger) dan normaal, pas vanaf een normale omzet van een ingesteld bedrag;
- keukentijd (bon naar de keuken tot klaar op het keukenscherm) van het laatste uur boven de marge, of boven een vast aantal minuten;
- storno's vandaag boven de marge, pas vanaf een minimum aantal.
Elk signaal komt één keer (per regel, medewerker en dag; de keukentijd hooguit één keer per uur) en gaat naar:
- de kassa: knop Signalen (n) in de bovenbalk met de signalen van de afgelopen dag, week of 30 dagen; Afgehandeld met een notitie. Andere schermen krijgen alleen een seintje zonder namen;
- pushbericht met ntfy (gratis app; ntfy.sh of een eigen server, topic en eventueel een token), Pushover (API-token van de app en de user key) of Telegram (token van de bot en de chat-id);
Per kanaal is er een knop Testbericht. Tokens en sleutels blijven op de kassa (de schermen zien alleen of ze ingevuld zijn). Een signaal is geen bewijs: bekijk de bon en het logboek en bespreek het met de medewerker.
Bonnen: kopie en retour (creditbon)
Knop Bonnen in de bovenbalk:
- Lijst van de bonnen sinds de laatste dagafsluiting, of de laatste 7 dagen; een oudere bon zoek je op zijn nummer.
- Kopie printen: dezelfde bon met "KOPIE" erop (in Belgie met het FDM-blok van de oorspronkelijke bon). Wordt vastgelegd in het logboek.
- Retour / creditbon (manager of beheerder): kies per regel hoeveel er terug komt, een reden en hoe het geld teruggaat (contant, pin, cadeaubon, overig). De oude bon blijft onaangeroerd: er komt een nieuwe creditbon bij met een eigen nummer in het journaal (ticket soort
retour, negatieve bedragen, in Belgie als NR naar de FDM). Er kan nooit meer terug dan er verkocht is. In X- en Z-rapport telt de retour als min-omzet. - Bij CCV of een andere terminal: eerst op de terminal zelf terugbetalen en dan "Al terugbetaald op de terminal" aanvinken.
- Contant met afronden op 5 cent: het terug te geven bedrag wordt ook afgerond.
- Terug naar de rekening (verkoop op rekening): was de bon op rekening van een zakelijke klant, dan kies je Op rekening. Het bedrag gaat van de openstaande factuur af en de kassa maakt meteen een creditnota (in UBL een CreditNote, type 381, met een verwijzing naar de factuur; in België ondertekend met signInvoice, UC4122). Meer dan er op de factuur open staat kan niet terug naar de rekening; betaal de rest contant of met de pin terug. De creditnota staat bij Facturen en verstuur je zoals een factuur.
Kassalade met sensor en lade per medewerker
Standaard uit. Instellen bij Instellingen → Betalen → Kassalade.
- Sensor: veel lades melden via de bonprinter of ze open of dicht zijn (ESC/POS
DLE EOT 1, DK-poort pin 3). Dat kan alleen met een bonprinter via het netwerk. Tik Meten: lade dicht en Meten: lade open; zit er verschil in, dan neem je de juiste stand over (hoog = open of laag = open). Geen verschil = deze lade (of kabel) heeft geen sensor. Geen antwoord van de printer = onbekend, nooit "dicht".- Niet afrekenen zolang de lade open staat: de kassaserver weigert dan een nieuwe afrekening met "De kassalade staat nog open".
- Eigen lade per medewerker: een bonprinter kan twee lades openen (lade 1 en lade 2). Kies per medewerker zijn lade; de kassa opent dan bij contant afrekenen, geld in/uit de lade en Lade openen de lade van wie er aangemeld is. Bij Rapport → Kas staat dan Lade per medewerker: startgeld per medewerker, contant (zonder de geldautomaat), verwacht, Tellen en het verschil per persoon (in het logboek als
ladetelling). De gewone dagafsluiting blijft zoals hij is. - Test lade 1 en Test lade 2 openen de lade om te controleren.
- Lade openen zonder verkoop staat (met reden) altijd al in het logboek en in de auditfile kassa (XAA), zoals de Belastingdienst vraagt (uitzonderingen zoals "no sale").
Deel 3 · Beheerder
Aan de slag
Installeren. HorecaPOS installeer je met het installatieprogramma voor je systeem, te vinden op de downloadpagina van OptimumPOS: Android (app), Windows (installatieprogramma), macOS (installer voor Macs met Apple Silicon en Intel), Linux (grafische installer, of het pakket .deb of .rpm), Raspberry Pi (grafische installer of .deb voor een Raspberry Pi 3, 4 of 5 met 64-bit Raspberry Pi OS) en Chromebook (de Android-app uit Google Play). Kies voor alle gebruikers voor een kassaserver waar tablets en het keukenscherm mee verbinden, of alleen voor mij voor alleen een kassa op dat apparaat. De installer zet alles neer wat nodig is, ook de database, en maakt elke nacht een back-up. Bijwerken doe je door de nieuwe versie te installeren: je gegevens blijven staan. Het installatieprogramma start in de taal van je computer (anders Engels); bij Windows en Linux kies je op het eerste scherm eventueel een andere taal. De kassa start daarna meteen in die taal. De pakketten .deb en .rpm en de Android-app volgen de taal van het systeem, en anders Nederlands.
De beheerder richt de kassa in via Instellingen. Daar staan tabbladen als Zaak, Personeel, Rechten, Werktijden, Producten, Happy hour, Voorraad, Plattegronden, Betalen, Printers, Boekhouding, Back-ups, In-/export en Database. Welke tabbladen een manager ook ziet, hangt af van de rechten.
Database. Bij Instellingen → Database (alleen de beheerder) kies je tussen MySQL / MariaDB, de ingebouwde database en PostgreSQL; bij het omzetten gaan alle gegevens mee (zie Database). Heeft Optimum POS bij de installatie al een vast adres ingesteld, dan geldt dat adres en zijn er geen invulvelden. Anders vul je de Server, Poort, Database, Gebruiker en Wachtwoord zelf in. De kassa bewaart die zelf, toont ze daarna weer ingevuld en je kunt ze altijd wijzigen met MySQL/MariaDB-gegevens wijzigen of PostgreSQL-gegevens wijzigen. Het wachtwoord leeg laten betekent: het bewaarde wachtwoord houden (bij dezelfde gebruiker). De installer en een update veranderen niets aan DATABASE_URL of aan de gekozen database.
Boekhouding
Alles voor de boekhouding staat bij Instellingen → Boekhouding. Vul samen met je boekhouder het dagboek en de grootboekrekeningen in. Wil je dat de kassa de dagomzet elke dag zelf boekt, kies dan bovenaan bij Boekhoudpakket je pakket, ook Exact Online: je ziet alleen de pakketten die in het land van je zaak werken. Daaronder vul je meteen de gegevens van dat pakket in en verbind je. Bij pakketten waarvoor je inlogt (zoals Exact Online, Twinfield of Xero) vul je eerst de app in: client-ID en clientgeheim. Heeft Optimum POS het pakket of een gegeven vast ingesteld bij de installatie, dan zie je die keuze of dat veld niet. Daar staat ook een overzicht van alle pakketten: welke live gekoppeld kunnen worden en welke een bestand krijgen. Een bestand maak je bij Rapport → Omzet per periode → Export boekhouding: kies het formaat van je pakket, of UBL (Peppol), XAF of een dagstaat. Laat de eerste boeking of import altijd door je boekhouder nakijken.
Voor een Nederlandse zaak staat daar ook Auditfile kassa (XAA): de XML Auditfile Afrekensystemen van de Belastingdienst met alle bonnen, regels, betalingen en gebeurtenissen van de kassa over de gekozen periode. Die geef je aan je accountant of bij een controle aan de Belastingdienst.
Salaris en planning
Werkt je personeel met in- en uitklokken, dan staat bij Instellingen → Werktijden onderaan Salaris en planning, in twee blokken. Bij Salarisadministratie kies je je salarispakket of (in België) je sociaal secretariaat, en vul je per medewerker zijn personeelsnummer in dat pakket in. Daarna maak je voor een periode het bestand met de gewerkte uren en de omzet per medewerker, en lees je dat in bij je salarispakket. Bij Personeelsplanning kies je je planningssysteem: bij Deputy, Dyflexis en Shiftbase gaat de omzet elk uur vanzelf, bij de andere maak je een omzetbestand. Zo zie je in je planning de loonkosten naast de omzet. Werk je zonder in- en uitklokken, dan kun je de omzet toch naar je planning sturen: dat staat dan onderaan Instellingen → Boekhouding, bij Omzet naar je planning. Heeft Optimum POS iets vast ingesteld bij de installatie, dan zie je die keuze of dat veld niet.
Back-ups
De kassa maakt elke nacht automatisch een back-up, en altijd vóór een update. Bij Instellingen → Back-ups zie je alle back-ups (wanneer, door wie of automatisch, grootte) en maak je er met Back-up maken zelf een. Staat de laatste back-up er langer dan twee dagen, dan verschijnt een rode waarschuwing: neem dan contact op met Optimum POS.
Terugzetten kan met de knop Terugzetten bij een back-up. Alles wat ná die back-up gebeurd is, gaat dan verloren. Je moet dat aanvinken en je eigen pincode opnieuw invoeren. De kassa maakt eerst nog een veiligheidsback-up van de huidige stand en meldt daarna iedereen af. In België kan dit niet vanuit de kassa (de tellers van de zwarte doos lopen door); daar doet Optimum POS het.
Database
Bij Instellingen → Database (alleen de beheerder) staat waar de kassa zijn gegevens bewaart. Bovenaan zie je de huidige database met programma, versie, tabellen, rijen en adres of map. Voor het personeel en de tablets werkt de kassa met elke database hetzelfde. Op Windows, macOS, Linux en Raspberry Pi kies je uit drie databases:
- MySQL / MariaDB: een apart databaseprogramma (MySQL 8.0 of nieuwer, MariaDB 10.6 of nieuwer), bijvoorbeeld op een server of NAS die je al hebt. Alle gegevens staan dan in gewone tabellen in MySQL of MariaDB, leesbaar voor je eigen rapportage- of BI-programma. De kassa rekent precies zoals met PostgreSQL.
- Ingebouwd (PGlite): zit in de kassa zelf, je hoeft niets te installeren. Voor de meeste zaken de beste keuze, en de database op Android en Chromebook.
- PostgreSQL: een apart databaseprogramma op de kassa-pc of ergens in het netwerk.
Wanneer MySQL of MariaDB? Als je zaak al een MySQL- of MariaDB-server heeft, als je IT-beheerder daarmee werkt, of als je de gegevens in je eigen rapportage, Excel of BI-programma wilt lezen. Twijfel je, kies dan ingebouwd: dat werkt meteen.
Wat is er nodig voor MySQL of MariaDB?
- MySQL 8.0 of nieuwer, of MariaDB 10.6 of nieuwer, te bereiken vanaf de kassaserver.
- Een eigen database voor de kassa (of voor de kassa's van een keten), met de tekenset utf8mb4.
- Een databasegebruiker die in die database tabellen mag maken, wijzigen, hernoemen en verwijderen (CREATE, ALTER, DROP, INDEX, SELECT, INSERT, UPDATE, DELETE), bijvoorbeeld zo:
CREATE DATABASE horecapos CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'horecapos'@'localhost' IDENTIFIED BY 'wachtwoord';
GRANT ALL PRIVILEGES ON horecapos.* TO 'horecapos'@'localhost';
Draait MySQL of MariaDB op een andere computer, zet dan in de laatste twee regels het IP-adres van de kassaserver in plaats van localhost.
Omzetten naar MySQL / MariaDB:
- Vul bij Adres van MySQL/MariaDB de velden in: Server (standaard localhost), Poort (standaard 3306), Database (standaard horecapos), Gebruiker en Wachtwoord; voor MariaDB precies zo. Is het adres al ingesteld, dan staan de velden al ingevuld; laat je het wachtwoord leeg, dan blijft het bewaarde wachtwoord (bij dezelfde gebruiker). De kassa bewaart het adres zelf; heeft Optimum POS al een vast adres ingesteld, dan geldt dat adres en zijn er geen velden. Werkt de kassa al op MySQL/MariaDB, dan pas je de gegevens later aan met MySQL/MariaDB-gegevens wijzigen. Een versleutelde verbinding stelt Optimum POS voor je in.
- Tik op Verbinding testen: je ziet het programma en de versie, of waarom het niet lukt.
- Tik op Omzetten naar MySQL/MariaDB, vink aan dat je het begrijpt en voer je eigen pincode in.
Omzetten werkt in elke richting tussen de drie databases, en alle gegevens gaan mee:
- De kassa neemt even geen verzoeken aan (meestal minder dan een minuut); tablets gaan daarna vanzelf verder.
- Eerst maakt de kassa een back-up van de huidige stand (bij Instellingen → Back-ups).
- Alles gaat naar de nieuwe database en de kassa telt per tabel of alles er precies in staat.
- Pas als alles klopt, werkt de kassa verder op de nieuwe database. Aangemelde medewerkers blijven aangemeld.
Lukt er iets niet, dan verandert er niets en werkt de kassa door op de oude database. De oude database blijft staan, dus terug kan altijd. Kassagegevens die al in de nieuwe MySQL/MariaDB- of PostgreSQL-database stonden, worden vervangen. Ook in België kan dit: de tellers van de zwarte doos gaan exact mee.
Back-ups en terugzetten werken met alle drie de databases hetzelfde (Instellingen → Back-ups). Een back-up van de ene database kun je terugzetten in elke andere, ook een back-up van PostgreSQL in MySQL of MariaDB.
Wat staat er in MySQL of MariaDB? Elke tabel van de kassa, met dezelfde naam en kolommen (tijden in UTC). Elke tabel krijgt er de sleutelkolom _hp_sleutel bij, en in de hulptabellen _horecapos_stand, _horecapos_kolom, _horecapos_reeks en _horecapos_wijziging (logboek van wijzigingen, 14 dagen bewaard) houdt de kassa de stand, de kolomsoorten, de tellers en de wijzigingen bij. Andere programma's lezen de gegevens; schrijven doen alleen de kassa's.
Zo werkt het: de kassa rekent in een snelle werkkopie op de kassaserver en schrijft elke wijziging in dezelfde stap naar MySQL/MariaDB. Lukt dat niet, dan gaat de wijziging niet door en meldt de kassa een fout; houd MySQL/MariaDB dus bereikbaar. Bij het starten leest de kassa alles uit MySQL/MariaDB.
Meerdere kassa's op één database. Net als bij PostgreSQL kunnen meerdere kassa's dezelfde MySQL/MariaDB-database gebruiken, bijvoorbeeld elke zaak van een keten met een eigen kassaserver. Wijzigingen gaan na elkaar en elke kassa neemt eerst over wat de andere deden, zodat er bij tegelijk wijzigen niets verloren gaat. Zet een kassa een back-up terug of werkt een kassa met een nieuwere versie de database bij, dan lezen de andere kassa's vanzelf alles opnieuw in; werk daarom alle kassa's tegelijk bij. Een kassa die langer dan 14 dagen uit stond, leest bij het starten alles opnieuw in.
Bij de installatie kies je ook de database: MySQL / MariaDB, ingebouwd (aanbevolen) of PostgreSQL met het adres. Is die niet te bereiken, dan installeert de kassa zich met de ingebouwde database; omzetten kan daarna hier. Bij een update blijft de keuze staan.
Tablets en schermen koppelen
- Open op elke tablet/kassa het adres van de kassaserver, bv.
http://192.168.1.20:3000, en zet het als snelkoppeling op het beginscherm (Chrome: Toevoegen aan startscherm). - Keukenscherm:
http://192.168.1.20:3000/keuken. - Klantscherm (naar de klant toe, optioneel):
http://192.168.1.20:3000/klantscherm, zie Klantscherm. - De schermen vinden de kassaserver vanzelf (zelfde adres, poort 4000).
Klantscherm
Een scherm op de kassa dat naar de klant toe staat. De klant ziet ongeveer wat er besteld is en heel duidelijk het bedrag en hoe er betaald wordt. Er zit geen bediening op: het scherm volgt alleen wat de kassa doet. Standaard uit; aanzetten via Instellingen → Zaak → Klantscherm. Op een kassa-pc met twee schermen zet de kassa het de eerste keer vanzelf aan; zet je het daarna uit, dan blijft het uit. Zonder klantscherm (uit, of er hangt er geen) werkt alles precies zoals altijd: de kassa stuurt het beeld op de achtergrond en een fout of een ontbrekend scherm merkt de bediening nooit.
Wat de klant ziet:
- Rust (niemand aan het afrekenen): de naam van de zaak en een eigen welkomsttekst (Instellingen → Zaak; leeg = "Welkom").
- Bestellen: de producten met aantal en bedrag (gelijke regels samen, een menu als één regel met de onderdelen klein eronder, korting als één regel), en groot het totaal. Al betaald bij gesplitst afrekenen staat eronder. Met Instellingen → Zaak → Productfoto's → op het klantscherm staat er per product een klein fotootje bij.
- Afrekenen: de betaalwijze (Pinnen, Contant, Cadeaubon), de fooi en groot Te betalen. Contant: wat de klant geeft en wat hij terugkrijgt, zodra dat op de kassa is ingevuld. Pin: "Volg de instructies op de pinautomaat".
- Bedankt: na afrekenen een paar seconden "Bedankt!" met het betaalde bedrag (contant: wat de klant terugkrijgt), daarna weer het rustscherm.
Aansluiten, op twee manieren (allebei op het apparaat zelf in te stellen):
- Tweede monitor aan de kassa-pc (Windows, Linux/Raspberry Pi, macOS): vanzelf. Bij het aanmelden en na de installatie zet de kassa het klantscherm schermvullend op het kleinste scherm dat niet het hoofdscherm is (bij gelijke grootte het meest rechtse); op Windows altijd op een ander scherm dan de kassa (de kassa staat op het aanraakscherm en opent bij het opstarten ook vanzelf). Grootte en positie komen van het systeem, dus elk formaat werkt. Zonder tweede scherm gebeurt er niets. Op Windows komt een gesloten klantscherm vanzelf terug; op Linux en macOS zet de snelkoppeling HorecaPOS klantscherm in het menu het weer goed. Op Windows opent het in de kiosk-modus van Chrome (of Edge): schermvullend, zonder titelbalk en zonder taakbalk (sluiten met Alt+F4). Het volgt de kassa op dezelfde pc zonder koppelcode.
- In elke browser geeft lang vasthouden nergens het browsermenu en komt er geen vraag om de pagina te vertalen.
- Kassa dicht = klantscherm dicht. Stopt de kassasoftware (Herstarten, een update, de kassa gestopt of verwijderd), dan gaat het klantscherm na ruim 10 seconden ook dicht; draait de kassa weer, dan komt het vanzelf terug. Op Windows gaat het ook dicht als je alleen het kassavenster sluit. Onder Wayland (Linux) kan de kassa het venster niet zelf sluiten.
- Klantscherm per ongeluk dicht? Op Windows komt het na een paar seconden vanzelf terug, zolang de kassa open is en het tweede scherm aangesloten is.
- Altijd maar één klantscherm. Op Windows staat het klantscherm alleen in de kiosk-modus op het klantscherm. Een klantscherm in het venster van de kassa (bv. door Edge teruggezet na een stroomuitval, of met de knop in de kassa geopend) gaat binnen een paar seconden vanzelf dicht; het goede klantscherm komt dan op zijn plek.
- Niemand aangemeld = alleen het welkom. Staat de kassa op het pincodescherm (ook na een herstart of afmelden), dan toont het klantscherm alleen de welkomsttekst, nooit de rekening van daarvoor.
- Bij Windows kan het vanzelf openen ook uit met het vinkje Klantscherm vanzelf ... in de installer.
- Op Linux verplaatst de kassa het venster met wmctrl (komt mee met het pakket). Onder Wayland (o.a. Raspberry Pi OS met labwc) kan dat niet: zet het klantscherm dan één keer zelf op het tweede scherm (de browser onthoudt het), of kies X11 in raspi-config. Op macOS vraagt de Mac de eerste keer toestemming bij Toegankelijkheid.
- Met de hand: Instellingen → Zaak → Klantscherm → Klantscherm openen (tweede monitor). In Chrome en Edge (ook op een Chromebook) zet de knop het venster meteen op het klantscherm (de eerste keer vraagt de browser toestemming); één klik op het klantscherm maakt het schermvullend. In andere browsers: slepen en F11.
- Android-kassa met een ingebouwd klantscherm (bv. Sunmi D2/T2) of een monitor via HDMI/USB-C: ook vanzelf. Zodra de app op een kassa staat, komt het klantscherm op het tweede scherm; in- en uitpluggen werkt meteen.
- Sunmi T1 mini / T2 mini met het kleine tekstdisplay (2 regels): de app zet daar vanzelf het bedrag op: Totaal, Te betalen, bij contant Terug, na het afrekenen Bedankt! en in rust de naam van de zaak. Het klantscherm moet wel aan staan.
- iPad (bedienscherm) met een extern scherm via HDMI/USB-C of AirPlay: de app zet het klantscherm vanzelf op dat scherm (voorbereid; de iOS-app is nog niet uitgebracht).
- Chromebook: als bedienscherm in Chrome werkt de knop Klantscherm openen (tweede monitor) zoals hierboven. In de Android-app komt het klantscherm vanzelf op het tweede scherm zodra ChromeOS dat scherm aan Android-apps doorgeeft; doet het dat niet, gebruik dan een los apparaat met koppelcode.
- Los apparaat (tablet of eigen pc naast de kassa): open
http://<kassaserver>:3000/klantscherm. Het scherm toont rechtsonder een koppelcode van 6 tekens. Vul die op de kassa in bij Instellingen → Zaak → Klantscherm → Koppelen. Ontkoppelen zet het scherm terug op de koppelcode. De koppeling wordt per kassa bewaard (in de browser van die kassa), dus elke kassa kan zijn eigen klantscherm hebben.
Het klantscherm vraagt geen pincode (er valt niets te bedienen) en toont alleen het beeld van de kassa waaraan het gekoppeld is. Het beeld staat alleen in het geheugen van de kassaserver; na een herstart is het scherm leeg tot de volgende wijziging. De instelling (aan/uit en welkomsttekst) gaat mee met de back-up en met In-/export (Overige instellingen).
Digitale bon via QR (optioneel)
Standaard uit. Aanzetten via Instellingen → Zaak → Keuken en klantscherm → Digitale bon (de keuze verschijnt als het klantscherm opgeslagen aan staat). Na het afrekenen staat bij Bedankt een QR-code; die blijft dan 45 seconden staan in plaats van een paar seconden. De gast scant hem met de eigen telefoon en ziet de bon, precies zoals de papieren bon (zelfde tekst, bij een Belgische kassa ook met het FDM-blok). Op de telefoon kan hij de bon afdrukken, als pdf bewaren of als tekstbestand downloaden.
- Het gaat via het beheerportaal:
https://kassa.<portaal>/__bon/<kassa>/<sleutel>. De kassa moet dus met het portaal verbonden zijn; anders komt er geen QR-code en verandert er niets. - De sleutel is willekeurig en niet te raden, en werkt 30 dagen. Daarna ruimt de kassa hem vanzelf op. Het portaal bewaart niets.
- Werkt met een tweede monitor en met een los klantscherm. De papieren bon en de bon per e-mail blijven gewoon werken.
Klantscherm in rust: diavoorstelling (optioneel)
Standaard uit. Aanzetten via Instellingen → Zaak → Keuken en klantscherm → Klantscherm in rust. Staat er geen rekening op het klantscherm, dan wisselen de dia's elkaar af (standaard elke 8 seconden, in te stellen van 4 tot 60):
- Acties: de happy hours (als happy hour aan staat), met de korting, de dagen en tijden en de producten of groepen; die van nu staan eerst, met "Nu!".
- Uitgelichte producten (hooguit 12, bijvoorbeeld nieuw op de kaart), met prijs en (als productfoto's op het klantscherm aan staan) de foto. Een uitverkocht product slaat het scherm over.
- De spaarkaart: punten per euro, de beloning en de stempelkaarten (alleen als de klantenkaart aan staat).
- Eigen teksten: hooguit 5, elk een eigen dia (bijvoorbeeld "Vanaf vrijdag nieuw: onze zomerkaart").
Zonder dia's toont het klantscherm het welkomstscherm, zoals altijd.
Happy hour
Standaard uit. Aanzetten via Instellingen → Zaak → Happy hour gebruiken; daarna verschijnt het tabblad Instellingen → Happy hour.
- Per happy hour: naam (komt op de bon), dagen, van–tot (mag over middernacht, bv. 23:00–01:00), korting in % of een vaste prijs, en voor welke productgroepen en/of losse producten.
- Binnen dat tijdvak rekent de kassa bij het aantikken vanzelf de happy-hourprijs (nooit duurder dan normaal; bij een vaste prijs komen keuzeopties er gewoon bij). Op de productknop staat de oude prijs doorgestreept met de nieuwe prijs en HH; in de bestelling en op de bon staat de naam van de happy hour. Wat al is aangetikt houdt zijn prijs.
- Dagdeal: vink De hele dag aan (00:00–24:00) en kies de dag(en), bv. elke dinsdag spareribs voor een vaste prijs.
- Seizoen: vink Alleen in een seizoen (elk jaar) aan en kies van en tot en met (dag en maand, bv. 1 juni t/m 31 augustus; over de jaarwisseling mag, bv. 1 december t/m 28 februari). Buiten het seizoen geldt de happy hour niet.
- Wijzigingen komen in het logboek.
Dagdelen en seizoenen
Standaard uit. Aanzetten via Instellingen → Zaak → Dagdelen en leverwijze → Assortiment per dagdeel en seizoen; daarna verschijnt het tabblad Instellingen → Dagdelen. Zet je het uit, dan zijn alle producten weer altijd te koop en blijven de dagdelen bewaard.
- Per dagdeel: naam (bv. Ontbijt, Lunch, Diner, Zomerkaart), dagen, van–tot (mag over middernacht; De hele dag = 00:00–24:00), eventueel een seizoen (elk jaar, dag en maand), en welke productgroepen en/of losse producten erbij horen.
- Producten en productgroepen die in een of meer dagdelen staan, zijn alleen te koop als een van die dagdelen bezig is; wat in geen enkel dagdeel staat, is altijd te koop. Het bestelscherm toont alleen wat nu te koop is en wisselt vanzelf als een dagdeel begint of eindigt; de server weigert de rest ("nu niet te koop, alleen bij Ontbijt").
- De webshop toont en rekent hetzelfde assortiment (op het moment van bestellen).
- Een andere prijs op een dag of in een seizoen is een happy hour (dagdeal, zie hierboven).
- Menu per locatie: elke kassa (vestiging) heeft zijn eigen producten, dagdelen en prijzen.
- Wijzigingen komen in het logboek.
Assortiment en prijzen per leverwijze
Standaard uit. Aanzetten via Instellingen → Zaak → Dagdelen en leverwijze → Assortiment en prijzen per leverwijze. Zet je het uit, dan geldt weer overal de gewone prijs en is alles overal te koop; de ingevulde prijzen blijven bewaard.
- Bij Instellingen → Producten per product: Prijs bij afhalen en Prijs bij bezorgen (leeg = de gewone prijs) en Verkocht bij (ter plaatse, afhalen, bezorgen; minstens één). Bij een productgroep ook Verkocht bij, voor alle producten in die groep.
- Het bestelscherm toont bij een afhaal- of bezorgbestelling de prijs van die leverwijze en alleen wat daar verkocht wordt; de server rekent die prijs en weigert de rest. Happy hour, menu's en keuzeopties rekenen met die prijs.
- Het btw-tarief voor afhalen (bij het product) staat daar los van, zoals altijd.
- De webshop toont bij afhalen en bezorgen de prijzen en producten van die keuze (bij het wisselen laadt de menupagina opnieuw), en aan tafel die van ter plaatse.
- Export en import van de configuratie (Instellingen → In-/export) nemen de prijzen per leverwijze, "verkocht bij", de dagdelen en het seizoen van happy hours mee.
Menu's
Standaard uit. Aanzetten via Instellingen → Zaak → Menu's gebruiken.
- Een menu is een gewoon product (met de menuprijs) waarbij je onder Instellingen → Producten → (product) → Menu onderdelen instelt:
- vast: altijd dit product (bv. "Drankje: Huiswijn");
- naar keuze: kies 1 (of meer) uit een productgroep, eventueel beperkt tot bepaalde producten (bv. "Hoofdgerecht: kies 1 uit Hoofdgerechten").
- Per onderdeel de gang (1 = meteen, 2/3 = wacht op afroepen).
- Tik je het menu aan, dan kies je per onderdeel de gerechten. Per gerecht (ook de vaste) kun je de keuzeopties kiezen zoals bij een los product (bakwijze, extra kaas; verplichte opties moeten gekozen zijn) en een opmerking. Meerprijs van opties komt boven op de menuprijs. Het menu komt als één regel met de gerechten (en hun opties) eronder.
- De gerechten gaan als losse regels naar keuken/bar (werkbon en keukenscherm), in hun eigen gang. De menuregel zelf niet.
- De menuprijs wordt voor de btw verdeeld over de onderdelen naar verhouding van hun normale prijs, zodat eten en drinken elk het juiste tarief hebben. Op de bon staat het menu met de totaalprijs en de gerechten eronder.
- Heeft het menu zelf keuzeopties (bv. formaat), dan kies je die bovenaan in het menuvenster. Ze staan bij de menuregel op de bon, en bij elk gerecht van het menu op de werkbon en het keukenscherm als "(menu)".
- Weghalen/storneren gaat per heel menu (tik op de menuregel).
- Splitsen / verplaatsen: kies de menuregel; de gerechten gaan mee. Bij 2× hetzelfde menu kun je er ook 1 verplaatsen (kop en gerechten worden gesplitst).
- Zonder verbinding kun je menu's gewoon aantikken; ze worden op de tablet bewaard en verstuurd zodra de verbinding terug is (zoals losse producten).
- Happy hour kan ook op een menu gelden.
Receptuur en kostprijs (Apicbase)
Koppeling met Apicbase (receptuur, kostprijs, voorraad en inkoop) via de Generic POS API van Apicbase (standaard uit, elk onderdeel apart aan of uit). Instellen bij Instellingen → Receptuur (recht Zaak, betalen en printers instellen). De kassa praat zelf met Apicbase (alleen uitgaand verkeer, geen portaal nodig).
- Verbinden (alles in te vullen door de beheerder), op een van drie manieren:
- Token plakken: in Apicbase Library Settings → API Settings → New token → Service Account Token (scopes accounts, library, sales); het access token en refresh token plakken;
- Inloggen met de eigen API-app van de zaak (client-id en geheim uit API Settings): Inloggen bij Apicbase, en de code die Apicbase daarna toont plakken;
- Een verlopen token (na 7 dagen) vernieuwt de kassa vanzelf met het refresh token.
- Outlet: Outlets ophalen en de outlet van deze zaak kiezen. De kassa zet daar de POS op Generic POS API met een eigen location-id (in te vullen; standaard
HORECAPOS-…, uniek per kassa). - Aan, met vinkjes:
- Producten, groepen en keuzeopties naar Apicbase: productgroepen, producten (PLU = het PLU-nummer van het product, anders de code, anders het id), keuzeopties als modifiers, met prijs en btw. Vanzelf na elke wijziging (na een minuut) en elke dag. In Apicbase koppel je daarna elk kassaproduct aan een recept;
- Elke afgerekende bon naar Apicbase: oudste eerst, hooguit 100 per keer, binnen een kwartier na het afrekenen (en elke 5 minuten). Korting wordt over de regels verdeeld; open bedragen, wegwerptoeslag en statiegeld staan als eigen product in Apicbase; gewogen producten als 1 stuk met het totaalbedrag. Lukt het niet, dan stopt de kassa (Apicbase wil de bonnen op volgorde) en probeert het later opnieuw: het afrekenen merkt daar niets van. Bij het aanzetten kies je vanaf welke dag (standaard vanaf nu);
- Kostprijs per portie terughalen (elke 6 uur): per gekoppeld recept de food cost (ingrediënten en verspilling), met personeelskosten, de verkoopprijs en de marge volgens Apicbase. Berekend met de goedkoopste leverancier, de laatst bestelde prijs of de gemiddelde voorraadwaarde;
- Verkoopprijs uit Apicbase overnemen (standaard uit): de verkoopprijs van gekoppelde producten in de kassa zetten (staat in het logboek).
- Onderaan: Kostprijs per product met kostprijs, kostprijs met personeel, prijs in de kassa, kostprijs % en marge. Knoppen Catalogus nu sturen, Bonnen nu sturen en Kostprijzen nu ophalen.
Code: apps/pos-server/src/lib/apicbase.ts, routes/apicbase.ts; scherm Apicbase.tsx. Logboek: Apicbase. Voorwaarde: de API-module van Apicbase. Voor de app van Pin Voordeel voor alle klanten: partnerschap en certificering bij Apicbase (zie de backlog). Documentatie: https://developers.apicbase.com/docs/generic-pos-api-guide
Hotelsoftware: op de kamer zetten
Voor een restaurant of bar bij een hotel: de rekening op de kamer van een gast zetten. Standaard uit: Instellingen → Hotel (recht Zaak, betalen en printers instellen).
- Eén lijst met alle hotelsoftware (Hotelsoftware van het hotel). Ingebouwde koppelingen:
- Mews (Connector API: client token en access token, de service van het restaurant en per btw-tarief de btw-code van Mews), apaleo (eigen app met client-id en client secret, de property-id; per btw-tarief eventueel de btw-soort) en Cloudbeds (API-sleutel en property-id), elk met een test- en een echte omgeving;
- Oracle OPERA Cloud (OHIP), protel (protel I/O), RoomRaccoon, Booking Experts, Amadeus (XMLPOS), VIPS, Stayntouch, Clock PMS+, Guestline (Rezlynx), Hotelogix, eviivo, Little Hotelier, Shiji en Infor HMS (Databridge). Na het kiezen staan precies de velden die bij die hotelsoftware horen (sleutels, hotel-id, eventueel het adres van hun API en per btw-tarief hun code), met een korte uitleg wat je bij de leverancier aanvraagt. Deze koppelingen zijn gebouwd volgens de documentatie van de leveranciers; laat de leverancier de koppeling bevestigen en probeer eerst met Verbinding testen en één bon;
- een demo (vier suites, kamer 4 tot 7) om te proberen;
- Sirvoy, als halve koppeling en alleen met Sirvoy Pro. Sirvoy heeft geen API om vanuit een kassa iets op een boeking te zetten, ook niet met een bestand (de CSV-import maakt alleen nieuwe boekingen). Daarmee kent de kassa de gasten (kamer, naam, aankomst, vertrek): zoeken bij Op de kamer, en de zelfbediening op de kiosk en in de webshop werken gewoon. De bon komt niet vanzelf in Sirvoy: na het afrekenen staat hij bij Instellingen → Hotel onder Nog in Sirvoy zetten, met de kamer, de gast, het bonnummer en het bedrag per btw-tarief. Het hotel zet hem met de hand als extra op de boeking en klikt op Staat erin (terug met Toch nog niet). Nodig:
- bij voorkeur een kassa die met het beheerportaal verbonden is: dan loopt het adres via het portaal (
https://<portaal>/hotel/<kassa-id>/sirvoy?sleutel=...) en hoeft er in het hotel geen poort open. Anders moet de kassa zelf vanaf internet over https bereikbaar zijn (eigen domein met certificaat of port forwarding; Sirvoy wil TLS 1.2 of hoger) en vul je dat adres in; - Het adres is één keer te zien; de kassa bewaart alleen de hash. Een nieuw adres maken = het oude werkt niet meer;
- bij voorkeur een kassa die met het beheerportaal verbonden is: dan loopt het adres via het portaal (
Sirvoy stuurt alleen iets als een boeking verandert: boekingen van vóór het koppelen kent de kassa pas na een wijziging in Sirvoy. Berichten kunnen door elkaar binnenkomen; een ouder bericht (generatedAt) dan wat de kassa al heeft, wordt overgeslagen. In het hotel = niet geannuleerd en niet uitgecheckt, ingecheckt of aankomst vandaag of eerder, en vertrek vandaag of later. Verbinding testen zegt hoeveel boekingen er binnenkwamen.
Alle hotelsoftware is te koop in Nederland en/of België. Verbinding testen controleert de gegevens. Code per koppeling: apps/pos-server/src/lib/pms/<naam>.ts.
- Zelfbediening (standaard uit): de hotelgast zet zijn bestelling zelf op zijn kamer, op de kiosk en/of in de webshop (afhalen en bezorgen, niet bij bestellen aan tafel). Hij vult zijn kamernummer en achternaam in; de kassa kijkt bij de hotelsoftware of die gast nu in die kamer verblijft. Met een maximum per bestelling (standaard € 150), en na 5 foute pogingen in een kwartier eerst naar de balie. De melding zegt nooit wie er in een kamer verblijft.
- Afrekenen: staat de koppeling aan, dan is er de betaalwijze Op de kamer. Zoek de gast op naam of kamernummer (alleen gasten die nu in het hotel verblijven) en tik op Op kamer ... zetten. De kassa boekt de bon per btw-tarief op de hotelrekening van de gast; de gast betaalt bij het uitchecken.
- België: staat de bestelling al aan tafel bij de zwarte doos, dan gaat ze eerst van de tafel naar de kamer (signCostCenterChange naar ROOM, UC4101); de bon gaat als kamerkrediet (ROOM_CREDIT) naar de zwarte doos.
- Lukt het boeken in de hotelsoftware niet (geen internet), dan is de verkoop er wel en staat de boeking als Mislukt bij Instellingen → Hotel, met Opnieuw.
- Rapporten en boekhouding: Op de kamer (hotel) is een eigen betaalwijze op het X- en Z-rapport, in de dagstaat en de auditfile (XAA).
Code: apps/pos-server/src/lib/hotel.ts, routes/hotel.ts, de koppelingen in lib/pms/, catalogus packages/shared/src/hotelcatalogus.ts; scherm Hotel.tsx. Logboek: Hotel. Geheimen (tokens) staan alleen in de database, nooit op het scherm.
Wijnbeheer met Vinify
Instellingen → Wijnbeheer (standaard uit; uitzetten bewaart alles). Vinify houdt de wijnkelder, de wijnkaart en de voorraad bij en is de hoofdbron van de wijnen. Volgens de POS-eisen van Vinify biedt de kassa een API waarmee Vinify:
Aanmelden, alle drie de manieren die Vinify kent (de beheerder zet aan welke):
- API-id en API-sleutel (
X-Api-IdenX-Api-Key, ofAuthorization: Bearer <id>:<sleutel>); - API-sleutel en API-secret met een handtekening:
X-Api-Key,X-TimestampenX-Signature= hex HMAC-SHA256(secret,<timestamp>\n<METHODE>\n<pad met query>\n<sha256 van de body>), hooguit 5 minuten oud.
De sleutel en het secret maakt de kassa (één keer getoond); de schermen zien alleen of ze ingevuld zijn. Bereikbaar via het portaal op https://<portaal>/vinify/<kassa-id>/... (geen poort open in de zaak; het adres staat in Instellingen → Wijnbeheer). Welke producten wijn zijn: wat Vinify aanmaakt, plus de groepen die je aanvinkt. Geeft Vinify een adres om verkopen naartoe te sturen, dan stuurt de kassa ze ook zelf (push, met een token): na elke afgerekende bon en elke 5 minuten wat nog niet gelukt is. Vinify zet de koppeling met HorecaPOS aan (hello@vinify.no). Alles in het logboek. Niet te verwarren met Vinify.nl, een online wijnwinkel: die staat bij de leveranciers (Bestellen bij leveranciers).
Snel adres invoeren met postcode en huisnummer
Aanzetten bij Instellingen → Zaak → Snel adres invoeren (standaard uit; alleen voor een zaak in Nederland). Typ postcode en huisnummer (ook met letter of toevoeging, bv. 12A of 12-1) en tik Zoek adres: straat, huisnummer, postcode en plaats worden ingevuld. Zijn er op dat nummer meer adressen (12, 12A, 12B), dan kies je het goede. Daarna kun je alles nog zelf aanpassen.
- Bij de gegevens van de zaak (Instellingen → Zaak, boven het adres).
- Bij een klant van de klantenkaart: aan de kassa bij een nieuwe klant en bij Rapport → Klanten. Klanten krijgen daarvoor een (optioneel) adres: straat en huisnummer, postcode en plaats.
- De adressen komen uit de gratis Locatieserver van PDOK (de officiële adressen van Nederland, BAG): geen account of sleutel nodig, wel internet. Zonder internet of bij een Belgisch adres typ je het adres gewoon zelf.
Melding bij een nieuwe versie
Aanzetten bij Instellingen → Zaak → Updatemelding (standaard uit).
- Kassa bijgewerkt: is de kassaserver geüpdatet terwijl een tablet de oude schermen nog open heeft, dan staat bovenin "De kassa is bijgewerkt (versie …)" met Vernieuwen. De tablet kijkt elke 5 minuten, als het scherm weer zichtbaar wordt en na een herstart van de server.
- Update beschikbaar: staat de kassa gekoppeld aan het beheerportaal (
PORTAAL_URL/PORTAAL_SLEUTEL) en is daarNIEUWSTE_VERSIEingevuld, dan ziet wie instellingen mag beheren "Update beschikbaar: versie …" (met de toelichting uitUPDATE_NOTITIE). Later verbergt de melding op die tablet tot er weer een nieuwere versie is. Bijwerken gaat zoals altijd metscripts\windows\update.cmd(zie Updaten).
Reserveringsplatforms
Reserveringen van TheFork, Formitable, Zenchef, Resengo (alleen België), OpenTable (alleen Nederland), PlanPanther, RestoManager en Aqqo (alleen Nederland) komen vanzelf in de kassa en op de plattegrond. Aanzetten bij Instellingen → Reserveringsplatforms (standaard uit). Kan alleen als Reserveringen aan staan.
- Land van de zaak: je kunt alleen platforms kiezen die in het land van de zaak werken (Resengo alleen in België, OpenTable en Aqqo alleen in Nederland). De server controleert dat ook.
- Meerdere platforms tegelijk: je kunt meerdere platforms naast elkaar koppelen, bijvoorbeeld TheFork en Formitable. Twee platforms krijgen nooit dezelfde tafel in hetzelfde tijdvak; de tweede reservering komt dan zonder tafel binnen.
- + Platform koppelen: kies het platform en vul de gegevens in. Geheimen (client secret, terugmeld-sleutel) staan nooit in het overzicht; leeg laten = houden, Wissen = weg.
- TheFork (openbare B2B-API): Restaurant-UUID, Client ID en Client Secret (aan te vragen bij TheFork). Annuleert de kassa, dan annuleert ze ook bij TheFork.
- Formitable, Zenchef, Resengo, OpenTable, PlanPanther, RestoManager, Aqqo: hun API is alleen voor partners of niet openbaar (PlanPanther, RestoManager en Aqqo: een kassakoppeling gaat in overleg met hen). Formitable-events (
booking.created,.changed,.canceled,.checkin,.checkout) worden herkend. - Op de plattegrond: heet een tafel in de kassa net als de tafel van het platform en is hij in dat tijdvak vrij, dan komt de reservering op die tafel; anders zonder tafel (kies die bij aankomst). Een reservering die opnieuw binnenkomt wordt bijgewerkt, niet dubbel. In het overzicht staat "via TheFork".
- Status: annuleert het platform of meldt het een no-show, dan neemt de kassa dat over. Wat in de kassa al is aangekomen, blijft aangekomen.
- Terugmelden (no-shows terug): vul een terugmeld-adres in (bijvoorbeeld van je koppeldienst). De kassa stuurt elke wijziging uit de kassa (aangekomen, no-show, geannuleerd, afgerekend met bedrag) als JSON:
{ platform, id, status, statusEn, bedrag, valuta, tafel, tijdstip, gemeldOp }(bedrag in centen, alleen bij afgerekend), metAuthorization: Bearer <terugmeld-sleutel>als je die invult. Lukt het niet, dan probeert de kassa het elke minuut opnieuw en staat de fout bij het platform. Wat van het platform zelf kwam, wordt niet teruggestuurd. - Test-reservering: maakt een reservering zoals het platform hem zou sturen.
- Verwijderen: de koppeling en de sleutel zijn weg; de reserveringen blijven.
- Alle wijzigingen staan in het logboek (zonder geheimen).
Spaarprogramma's en reviews
Twee losse schakelaars bij Instellingen → Sparen en reviews (allebei standaard uit, dan is er nergens iets van te zien). Zet je ze uit, dan blijven de instellingen en wat al gebeurd is bewaard.
Spaarprogramma van een ander platform: de gast spaart punten bij Joyn (België) en/of Piggy (Leat; Nederland en België). Dit staat los van de eigen klantenkaart van de kassa; die kan er gewoon naast aan staan.
- Meer tegelijk: in België kunnen Piggy en Joyn samen aan staan, elk met eigen gegevens (kies het platform, vul in, Opslaan; Wijzigen en Verwijderen per platform). De gast krijgt per programma een eigen QR-code op de bon, een eigen link in de gemailde bon en een eigen knop in de webshop, en spaart per programma één keer per bestelling. Wat al was ingesteld, blijft gewoon werken.
- QR-code op de bon: na het afrekenen staat onder de bon een QR-code met "Scan en spaar punten bij ...". In de gemailde bon staat een link, en in de webshop (afhalen en bezorgen) een knop op de bestelpagina en een link in de bevestigingsmail. Een bestelling levert maar één keer punten op: bon, mail en webshop gebruiken dezelfde unieke code (het nummer van de bestelling). "QR-code op de papieren bon" kun je uitzetten; de mail en de webshop krijgen de link dan nog steeds.
- Piggy, manier "QR-code en link": vul het adres van je Piggy-klantenportaal, de Shop UUID en het Account secret in (Piggy Business Dashboard). Werkt zonder internet: de kassa maakt de link zelf.
- Piggy, manier "Meteen bijschrijven": vul daarnaast een personal access token in (Piggy → Marketplace → Private App). Mailt de kassa de bon en is de gast met dat e-mailadres al lid, dan schrijft de kassa de punten meteen bij; op de bon staat dan "Punten bijgeschreven bij Piggy". De kassa maakt nooit een nieuw lid aan; geen lid (of geen e-mailadres) = de QR-code.
- Joyn, manier "QR-code en link": met de partner key, shop reference en het shared secret van Joyn (aan te vragen via api-integration@joyn.be). Werkt zonder internet. De QR-code is 2 uur geldig.
- Joyn, manier "Via de API": met de shop API key (koppeling aanzetten in het Joyn-merchantportaal). De kassa vraagt bij het afrekenen een spaarcode aan Joyn. Inwisselen gaat zoals altijd op de Joyn-iPad.
- Voorbeeldlink maken: controleert of de gegevens kloppen (een link van € 10; open hem alleen om te kijken).
- Alleen de platforms van het land van de zaak zijn te kiezen; de geheimen staan alleen in de database en komen nooit op het scherm (leeg laten = houden).
Reviews vragen: na het bezoek één mail met een knop naar Google en/of Trustpilot.
- Een paar uur later (instelbaar, standaard 3) krijgt de gast de mail, in de taal van de bon.
- Webshop: bij afhalen en bezorgen mailt de webshop zelf, een paar uur nadat de bestelling in de kassa is afgerond, in de taal van de gast.
- Google: plak de reviewlink uit je bedrijfsprofiel (Google → je bedrijfsprofiel → Reviews vragen,
https://g.page/r/.../review) of vul de Place ID in. - Trustpilot: vul het domein van je zaak in (de knop gaat naar
trustpilot.com/evaluate/<domein>). Heb je bij Trustpilot een uitnodigingsadres (Automatic Feedback Service,...@invite.trustpilot.com), vul dat dan ook in: de mail gaat dan in blinde kopie naar Trustpilot, met onzichtbaar de naam, het e-mailadres en het bonnummer, en Trustpilot stuurt zelf de uitnodiging (dan geen eigen Trustpilot-knop). Alleen Trustpilot met uitnodigingsadres: de kassa mailt alleen Trustpilot. - Niet te vaak: dezelfde gast (e-mailadres) krijgt hooguit één verzoek per periode (standaard 90 dagen; 0 = elke keer). De kassa bewaart daarvoor alleen een hash van het adres; het e-mailadres zelf gaat weg zodra de mail verstuurd is (lukt het niet, dan na drie pogingen, en anders na 14 dagen).
- QR-code op de bon (optioneel): ook een QR-code voor een review onder de papieren bon.
- Voorbeeld van de mail en Wachtende mails wissen (de adressen gaan dan meteen weg). Het logboek toont review_gevraagd met a***@domein.nl.
- Google en Trustpilot verbieden een beloning voor een review en alleen tevreden gasten vragen ("review gating"). De kassa vraagt daarom iedereen hetzelfde en geeft niets terug voor een review.
- Reviews lezen en beantwoorden in de kassa: zie Reviewbeheer hieronder.
Koppeling met Mailchimp en Klaviyo
Je klanten van de klantenkaart in je eigen mailprogramma: bij Instellingen → Zaak → Mailchimp en Klaviyo (onder de sms- en e-mailmarketing). Er is geen schakelaar: zonder koppeling met een gekozen lijst gebeurt er niets.
- Verbinden: met een API-sleutel (Mailchimp: Profiel → Extra → API keys; Klaviyo: een privé-sleutel
pk_…met schrijfrechten voor Lists, Profiles, Subscriptions, Events, Campaigns en Templates). Het clientgeheim en de sleutel komen nooit terug in beeld (leeg laten = houden). Daarna kies je de lijst (Mailchimp: audience). - Klanten: wie toestemming gaf voor e-mail, gaat naar de lijst (aangemeld), met voornaam, achternaam, telefoon, verjaardag en spaarpunten (Mailchimp: veld
PUNTEN, maakt de kassa zelf aan; Klaviyo: eigenschappunten). Toestemming ingetrokken, e-mailadres gewijzigd of klant verwijderd: afgemeld. Alleen wat veranderde gaat opnieuw. Met een koppeling vraagt de kassa (en het vinkje "aanbiedingen" in de webshop) bij een nieuwe klant ook om toestemming voor e-mail, en is die te wijzigen bij Rapport → Klanten, ook zonder de eigen e-mailmarketing. - Afmelden: wie zich in Mailchimp of Klaviyo afmeldt, heeft in de kassa ook geen toestemming voor e-mail meer (logboek: "afgemeld in Mailchimp"). Wie zich zelf afmeldde, meldt de kassa niet opnieuw aan.
- Bestellingen: elke afgerekende bon van een klant op de lijst gaat mee als gebeurtenis (Mailchimp:
bestelling, met bedrag, bonnummer en aantal; Klaviyo:Placed Order, met de waarde in euro). Daarmee maak je in het mailprogramma automatische mails, bv. na de eerste bestelling of als iemand een maand niet geweest is. Bonnen van vóór het kiezen van de lijst gaan niet mee. - Acties: bij Rapport → Marketing verstuur je een actie ook via Mailchimp of Klaviyo (zie Sms- en e-mailmarketing); de kassa maakt dan daar de campagne aan en verstuurt hem.
- Bijwerken: elke 5 minuten, of met Nu bijwerken. Ontkoppelen: in de kassa weg; in Mailchimp en Klaviyo blijft alles staan. Sleutels staan in de database (wel in de back-up, niet in de configuratie-export).
Code: lib/mailinglijst.ts, routes/mailinglijst.ts en MailingKoppelingen.tsx.
BI en data-export
De verkoopgegevens naar Power BI, Looker Studio, Excel, Google Sheets, Tableau, Qlik Sense, Metabase, een BI-dienst (bijvoorbeeld YourBI, BI4Horeca of Moore DRV) of een eigen datawarehouse. Aanzetten bij Instellingen → BI en data-export (standaard uit). Alleen lezen: via een koppeling kan niets in de kassa veranderen. Geen gegevens van gasten.
- Gegevens: bonnen (ook creditbonnen), verkochte producten (bonregels), betalingen, omzet per dag, omzet per uur, storno's, producten, medewerkers (zonder pincode) en gewerkte uren. Bedragen in euro's met een punt als decimaalteken, tijden in de tijd van de zaak.
- + Koppeling: kies het pakket en de manier. Elk pakket kan één of meer manieren; je kunt meerdere koppelingen tegelijk hebben (ook voor hetzelfde pakket).
- Het pakket haalt zelf op (API): de kassa geeft eenmalig een leessleutel. Periode met
?van=&tot=(JJJJ-MM-DD) of een vast adres met?periode=(vandaag, gisteren, 7d, 30d, 90d, 365d, week, maand, vorigemaand, jaar); hooguit 366 dagen, hooguit 200.000 regels. De sleutel inAuthorization: Bearer,X-Sleutelof?sleutel=. - Via het portaal: is de kassa aan het klantportaal gekoppeld, dan werkt hetzelfde adres ook van buiten de zaak, zonder een poort open te zetten:
https://<portaal>/bi/<kassa-id>/<gegevens>?periode=90d&formaat=csv&sleutel=.... Zo ververst de Power BI-service het volgens planning (zonder gateway) en kan Google Sheets het ophalen met=IMPORTDATA("...")(ook de bron voor Looker Studio). De kassa toont het adres bij de koppeling. - Ketenoverzicht via het klantportaal (meerdere zaken): één adres en één sleutel voor al je kassa's samen. Zet in elke kassa die mee moet doen Ketenoverzicht via het klantportaal aan (onder de schakelaar van BI) en maak in het klantportaal bij Mijn kassa's → BI voor al je zaken een sleutel. Dan:
https://<portaal>/bi/keten/<gegevens>?periode=90d&formaat=csv&sleutel=hpk_.... Het portaal haalt de gegevens bij elke kassa op en voegt ze samen, met per regelkassaIdenzaak. Kassa's die offline zijn of niet meedoen staan inontbrekend(JSON) en in de kopX-Ontbrekend. De kassa zelf heeft hiervoor geen eigen sleutel nodig; uitzetten in de kassa of in het klantportaal stopt het. - Met een token gaat die mee als
Authorization: Beareren staat er een handtekening inX-HorecaPOS-Handtekening(sha256=HMAC van de inhoud). Lukt het niet, dan probeert de kassa het elke minuut opnieuw; niets gaat dubbel. Met vanaf stuurt hij ook oudere bonnen. - De kassa levert bestanden: elke dag (op een tijd, de dag ervoor; gemiste dagen worden ingehaald) of elk uur (vandaag tot nu), als CSV (komma, of puntkomma voor Nederlandse Excel) of JSON, naar een map op de kassa-pc (bijvoorbeeld een OneDrive- of SharePoint-map voor Power BI of Excel), een FTP(S)- of SFTP-server of per e-mail. Bestandsnamen:
horecapos_<gegevens>_<datum>.csv. - Test versturen (push) en Nu exporteren (bestand) bij de koppeling.
- Zelf downloaden: kies gegevens, periode en formaat.
- Power BI-sjabloon (
.pbit): een kant-en-klaar rapport voor Power BI Desktop, met Power BI-sjabloon downloaden bij BI en data-export. Maak eerst een API-koppeling (Power BI). In het model: een tabel per gegevensset met de juiste typen, een kalender (jaar, maand, week, weekdag), relaties (datum → kalender, bonregels → producten, gewerkte uren → medewerkers) en metingen (omzet incl. en excl. btw, btw, fooi, bonnen, gasten, gemiddeld per bon en per gast, verkocht aantal, productomzet, betaald, storno's, gewerkte uren, omzet per gewerkt uur). Drie pagina's: Overzicht (kerncijfers, omzet per dag, weekdag en uur, betaalwijzen), Producten (per groep en per product) en Personeel (uren en omzet per medewerker). Via het portaal ververst de Power BI-service het ook volgens planning. - Geheimen (token, wachtwoord, sleutel) staan nooit in het overzicht; leeg laten = houden, Wissen = weg. Alles staat in het logboek (zonder geheimen).
Salaris en planning
Met In- en uitklokken aan (Instellingen → Zaak) staat bij Instellingen → Werktijden onderaan Salaris en planning (recht Instellingen beheren), in twee aparte blokken. Staat klokken uit, dan zijn er geen uren: dan staat alleen het blok Personeelsplanning (de omzet, live of als omzetbestand) onderaan Instellingen → Boekhouding, onder de kop Omzet naar je planning:
- Salarisadministratie (payroll): kies het salarispakket of (België) het sociaal secretariaat, vul de velden ervan in en per medewerker zijn personeelsnummer in dat pakket. Daarna maak je voor een periode het bestand met de gewerkte uren (afgesloten diensten, per medewerker per dag van inklokken) en de omzet per medewerker (excl. btw, wat hij/zij afrekende): kant-en-klaar voor Loket.nl (Variabele gegevens, totaal per medewerker over de periode, kopregel
aanslnr;persnr;ploeg;<looncomponent>) en SD Worx België (Tijdsregistratie, vaste posities, per medewerker per dag), anders de urenlijst (CSV: Datum; Personeelsnummer; Naam; Uren; Omzet excl. btw). Medewerkers zonder personeelsnummer komen niet in het bestand van Loket of SD Worx; de kassa meldt wie dat zijn. - Personeelsplanning (WFM): kies het planningssysteem. Opnieuw sturen overschrijft. Daarnaast de omzetlijst (CSV per dag en uur, excl. en incl. btw) en voor Strobbo het Excel-bestand voor Importeer omzet.
- Alleen pakketten die in het land van de zaak werken, per groep en op alfabet; de server weigert een pakket uit een ander land (400).
- Sleutels en tokens gaan nooit naar het scherm.
- Raakt de boekhouding: de loonkosten boekt het salarispakket in de boekhouding, de omzet boekt de kassa (Instellingen → Boekhouding). AFAS Payroll en Exact Online Loon staan in dezelfde omgeving als de boekhouding van AFAS en Exact.
- Op de kopie van de kassa op het portaal kan dit niet (de kassa in de zaak doet het).
- Van een aantal pakketten is de API niet openbaar of alleen voor partners (o.a. Loket, Nmbrs, Nostradamus, Employes, Shyfter, Planday, Eitje): die staan op aanvraag; tot dan het bestand. De indeling van SD Worx en Strobbo komt uit hun documentatie: laat de eerste import nakijken.
| Pakket | NL | BE | Live | Bestand | Opmerking |
|---|---|---|---|---|---|
| Salarissoftware en salarisverwerkers | |||||
| ADP | ✓ | ✓ | op aanvraag | Urenlijst per medewerker en dag (CSV) | Koppeling via ADP (op aanvraag); tot dan de urenlijst per medewerker en dag. |
| AFAS Payroll | ✓ | – | op aanvraag | Urenlijst per medewerker en dag (CSV) | Loonadministratie in AFAS Profit (zelfde omgeving als de boekhouding in AFAS); koppeling op aanvraag, tot dan de urenlijst. |
| BCS HR | ✓ | – | op aanvraag | Urenlijst per medewerker en dag (CSV) | Koppeling via BCS (op aanvraag); tot dan de urenlijst. |
| Buddee | ✓ | – | op aanvraag | Urenlijst per medewerker en dag (CSV) | HR- en salarissoftware; koppeling op aanvraag, tot dan de urenlijst per medewerker en dag. |
| Employes | ✓ | – | op aanvraag | Urenlijst per medewerker en dag (CSV) | Employes heeft een API voor gewerkte uren (token van de klant); de koppeling volgt na afstemming met Employes. Tot dan de urenlijst. |
| Exact Online Loon | ✓ | – | op aanvraag | Urenlijst per medewerker en dag (CSV) | Loonadministratie in Exact Online (zelfde omgeving als de boekhouding in Exact); koppeling op aanvraag, tot dan de urenlijst. |
| Humanwave | ✓ | – | op aanvraag | Urenlijst per medewerker en dag (CSV) | Koppeling via Humanwave (op aanvraag); tot dan de urenlijst. |
| Loket.nl | ✓ | – | op aanvraag | Loket.nl Variabele gegevens (CSV), Urenlijst per medewerker en dag (CSV) | Bestand voor Werkgever → Collectieve mutaties → Importeren → Variabele gegevens (uren per medewerker over de periode). Live via de Loket-API na aanmelding bij Loket. |
| Nmbrs | ✓ | – | op aanvraag | Urenlijst per medewerker en dag (CSV) | Urenlijst per medewerker en dag, om over te nemen in Nmbrs. Live via de Nmbrs-API na registratie van een app bij Nmbrs. |
| Salar (Van Winckel) | ✓ | – | – | Urenlijst per medewerker en dag (CSV) | Urenlijst per medewerker en dag voor het administratiekantoor; het inleesformaat van Salar is niet openbaar. |
| Sociale secretariaten | |||||
| Acerta | – | ✓ | op aanvraag | Urenlijst per medewerker en dag (CSV) | Sociaal secretariaat: de indeling van het prestatiebestand krijg je van Acerta; tot dan de urenlijst. |
| Group S | – | ✓ | op aanvraag | Urenlijst per medewerker en dag (CSV) | Sociaal secretariaat: de indeling van het prestatiebestand krijg je van Group S; tot dan de urenlijst. |
| Liantis | – | ✓ | op aanvraag | Urenlijst per medewerker en dag (CSV) | Sociaal secretariaat met een API die Liantis per bedrijf vrijgeeft; tot dan de urenlijst. |
| Partena Professional | – | ✓ | op aanvraag | Urenlijst per medewerker en dag (CSV) | Sociaal secretariaat: de indeling van het prestatiebestand krijg je van Partena; tot dan de urenlijst. |
| SD Worx | ✓ | ✓ | – | SD Worx Tijdsregistratie (TXT), Urenlijst per medewerker en dag (CSV) | België: bestand Tijdsregistratie (vaste posities, per medewerker per dag) voor "Tijdsregistratie importeren". Nederland: de urenlijst. |
| Securex | – | ✓ | op aanvraag | Urenlijst per medewerker en dag (CSV) | Sociaal secretariaat: koppelingen lopen via partners; tot dan de urenlijst. |
| Planning en urenregistratie | |||||
| Book'u | – | ✓ | op aanvraag | Omzet per dag en uur (CSV) | Book'u doet de Dimona-aangiften; een kassakoppeling gaat op aanvraag. Tot dan de omzetlijst. |
| Deputy | ✓ | ✓ | ✓ | Omzet per dag en uur (CSV) | Live: de omzet per uur gaat elk uur naar Deputy (Sales). Een permanent token maak je in Deputy bij API-koppelingen. |
| Dyflexis | ✓ | – | ✓ | Omzet per dag en uur (CSV) | Live: de omzet per uur gaat elk uur naar Dyflexis (information streams). Het API-token krijg je via Dyflexis. |
| Eitje | ✓ | – | op aanvraag | Omzet per dag en uur (CSV) | Eitje koppelt via zijn partnerprogramma; tot dan de omzetlijst per dag en uur. |
| Exact Horeko | ✓ | – | op aanvraag | Omzet per dag en uur (CSV) | Koppeling via Horeko (op aanvraag); tot dan de omzetlijst. |
| Fooks | ✓ | – | op aanvraag | Omzet per dag en uur (CSV) | Fooks bouwt kassakoppelingen zelf; tot dan de omzetlijst per dag en uur. |
| L1NDA | ✓ | – | op aanvraag | Omzet per dag en uur (CSV) | L1NDA bouwt kassakoppelingen samen met partners; tot dan de omzetlijst per dag en uur. |
| Mr. Einstein | ✓ | – | op aanvraag | Omzet per dag en uur (CSV) | HR, rooster en loonkosten voor de horeca; Mr. Einstein bouwt kassakoppelingen samen met de kassaleverancier (aanvragen via mreinstein.nl/contact). Tot dan de omzetlijst per dag en uur. |
| Nostradamus | ✓ | ✓ | op aanvraag | Omzet per dag en uur (CSV) | Nostradamus neemt de omzet aan via zijn kassa-interface (API-token en domein van de zaak, na aanvraag bij Nostradamus); tot dan de omzetlijst per dag en uur. |
| Plan-Me | – | ✓ | op aanvraag | Omzet per dag en uur (CSV) | Plan-Me doet de Dimona-aangiften; een kassakoppeling gaat op aanvraag. Tot dan de omzetlijst. |
| Planday | ✓ | ✓ | op aanvraag | Omzet per dag en uur (CSV) | Planday heeft een open API voor kassasystemen; de koppeling volgt na afstemming. Tot dan de omzetlijst. |
| Shiftbase | ✓ | – | ✓ | Omzet per dag en uur (CSV) | Live: de omzet per dag gaat elk uur naar het dagboek van de afdeling in Shiftbase. De API-sleutel maak je in Shiftbase bij App center. |
| Shyfter | – | ✓ | op aanvraag | Omzet per dag en uur (CSV) | Shyfter doet de Dimona-aangiften en neemt omzet per dag aan via zijn API; de koppeling volgt na afstemming met Shyfter. Tot dan de omzetlijst. |
| Strobbo | ✓ | ✓ | – | Strobbo omzetimport (Excel), Omzet per dag en uur (CSV) | Excel-bestand voor Planning → € → Importeer omzet (omzet per dag per werkplek). |
| Tamigo | ✓ | ✓ | op aanvraag | Omzet per dag en uur (CSV) | Koppeling via Tamigo (op aanvraag); tot dan de omzetlijst. |
| Werktijden.nl | ✓ | – | – | Omzet per dag en uur (CSV), Urenlijst per medewerker en dag (CSV) | Werktijden.nl registreert zelf de uren en neemt (nog) geen omzet aan via zijn API; de lijsten zijn er om te vergelijken. |
| XPS Logic | ✓ | – | op aanvraag | Omzet per dag en uur (CSV) | XPS Logic is gericht op flex- en uitzendpersoneel; een koppeling gaat op aanvraag. Tot dan de omzetlijst. |
Wettelijke eisen in België en Nederland
Wat de wet vraagt en wat HorecaPOS daarvoor doet (laat je boekhouder bevestigen wat voor jouw zaak geldt):
| Land | Eis | HorecaPOS |
|---|---|---|
| België | Geregistreerd kassasysteem (GKS 2.0) met zwarte doos voor horecazaken die eraan moeten voldoen (o.a. bij meer dan € 25.000 omzet per jaar uit maaltijden, excl. btw) | koppeling met de zwarte doos (FDM), de verplichte gegevens op de bon en de tellers bij het Z-rapport (land België bij Instellingen → Zaak, FDM_API_KEY en FDM_TERMINAL_ID); bovenaan bij Instellingen → Zaak kies je of de zaak GKS-plichtig is: Ja = afrekenen alleen met een werkende zwarte doos, Nee = zonder, met een verklaring van de beheerder (elk jaar opnieuw); zolang er niets gekozen is, kan er niet afgerekend worden. De kassa telt de omzet aan maaltijden en waarschuwt boven € 25.000 |
| België | E-facturatie via Peppol: sinds 1 januari 2026 zijn facturen tussen Belgische btw-plichtige bedrijven verplicht gestructureerd elektronisch (UBL, Peppol BIS 3); kassabonnen aan consumenten vallen er niet onder | export van de dagomzet als UBL volgens Peppol BIS Billing 3.0 voor het boekhoudpakket (Export boekhouding); en facturen bij een bon voor zakelijke klanten (Instellingen → Facturen): UBL volgens Peppol BIS Billing 3.0 plus een factuur om te printen, versturen per e-mail, via Billit naar het Peppol-netwerk, naar een eigen adres of downloaden (zie Facturen voor zakelijke klanten) |
| België | Btw horeca sinds 1 maart 2026: afhaalmaaltijden en niet-alcoholische dranken 12% (ter plaatse én afhaal), alcohol 21%, maaltijden die de klant nog zelf bereidt (fondue, gourmet) 6% | Btw-assistent (Instellingen → Wet en regels): per product de soort, het juiste tarief meteen of vanaf een datum; de omschrijvingen van de tarieven A/B/C zijn bijgewerkt |
| Nederland | Alcoholwet: geen alcohol aan jongeren onder 18, ook niet bij online verkoop en bezorgen (leeftijd controleren bij aflevering) | Leeftijdscheck: producten met alcohol; in de webshop bevestigt de klant zelf 18+ (vakje niet vooraf aangevinkt) met de melding dat de leeftijd bij aflevering gecontroleerd wordt; "18+" op werkbon, bezorgbon en kassabon |
| Nederland | Wegwerpbekers en -bakjes (SUP): sinds 2024 een aparte, zichtbare prijs voor plastic wegwerpverpakking bij afhalen en bezorgen | Wegwerptoeslag per product, als aparte regel op de bon (btw van het product) en apart in de omzet |
| Nederland | Statiegeld op blik en plastic flesjes | Statiegeld per product (€ 0,15 / € 0,25), aparte regel zonder btw bij afhalen en bezorgen, apart in de omzet |
| Nederland | Contant betalen: sinds 1 januari 2026 geen € 3.000 of meer contant voor goederen | Waarschuwing bij afhalen en bezorgen (ook bij de geldautomaat); bevestigen kan, komt in het logboek |
| Nederland en België | Btw-wijziging: een tarief of een product krijgt vanaf een datum een ander btw-percentage | Btw-wijziging plannen: de kassa voert hem op de dag zelf uit (in België per product, de letters A/B/C/D liggen vast) |
| Nederland | Logies (overnachtingen) 21% sinds 1 januari 2026 | btw-tarief per product instelbaar |
| EU | Omnibus-richtlijn: een doorgestreepte "van"-prijs mag alleen de laagste prijs van de afgelopen 30 dagen zijn | de webshop streept alleen door tegen de laagste prijs van 30 dagen (de kassa houdt de prijsgeschiedenis bij; happy hours die elke week terugkomen tellen mee) |
| EU | European Accessibility Act (sinds 28 juni 2025): webshops toegankelijk (WCAG 2.1 AA) | de webshop werkt met toetsenbord en schermlezer (link "Naar de inhoud", zichtbare focus, labels) en heeft een toegankelijkheidsverklaring (link onderaan) |
| Nederland | XML Auditfile Financieel (XAF): de standaard van de Belastingdienst om een (deel van de) administratie over te dragen; XAF 4.0 is verplicht vanaf 2027 | export als XAF 4.0 (Export boekhouding) |
| Nederland | Betrouwbaar afrekensysteem: de kassagegevens (alle bonnen, correcties en gebeurtenissen) bewaren en bij een controle digitaal kunnen leveren; de Belastingdienst beveelt daarvoor de XML Auditfile Afrekensystemen (XAA) aan | export als XAA 3.2 (Rapport → Omzet per periode → Auditfile kassa), desgewenst ondertekend met het certificaat van de leverancier |
| België | Aanwezigheidsregistratie bij een geregistreerd kassasysteem: begin en einde van de werktijd van werknemers registreren in het kassasysteem | In- en uitklokken (Instellingen → Zaak; Verplicht = eerst inklokken) wordt in de zwarte doos geregistreerd |
| België | Dimona: elke tewerkstelling (ook flexi-jobs en studenten) vóór de start aangeven bij de RSZ | dat doet je sociaal secretariaat of planningstool (bv. Shyfter, Book'u, Plan-Me); HorecaPOS levert de gewerkte uren en de omzet aan (Instellingen → Werktijden → Salaris en planning) |
| Nederland | Registratie van arbeids- en rusttijden (Arbeidstijdenwet) | In- en uitklokken met de gewerkte uren per medewerker, aan te passen door de beheerder (met logboek), en de urenlijst voor het salarispakket |
| Nederland en België | HACCP / voedselveiligheid: temperaturen (koeling, vriezer, warmhouden, verhitten, terugkoelen, ontvangst) en schoonmaak vastleggen; NL Hygiënecode voor de Horeca (NVWA), BE autocontrole FAVV (gids G-023) | HACCP-registratie in de kassa (Instellingen → Wet en regels, knop HACCP bovenin): meetpunten met grenzen, schoonmaak- en controletaken, verplichte corrigerende maatregel bij een afwijking, niet te wijzigen, overzicht met gemiste registraties als CSV of print (zie HACCP-registratie) |
| Nederland en België | Bewaarplicht (NL 7 jaar, BE 10 jaar) | bonnen, Z-rapporten en het logboek staan in de database en in de back-ups; het logboek kan vanuit de kassa niet gewijzigd of gewist worden |
Wet en regels
Instellingen → Wet en regels (beheerder; de btw-assistent ook met het recht Producten beheren). Alles staat standaard uit; zonder deze instellingen werkt de kassa zoals altijd.
- Leeftijdscheck alcohol (18+): vink bij Producten Bevat alcohol aan (of gebruik de btw-assistent). Bij afhalen en bezorgen met alcohol staat "18+" op de werkbon, de kassabon en in het bestelscherm. In de webshop bevestigt de klant zelf 18 jaar of ouder te zijn (het vakje staat niet vooraf aan) en ziet hij dat de leeftijd bij aflevering gecontroleerd wordt.
- Wegwerptoeslag (Nederland): per product een bedrag (richtprijzen: beker € 0,25, maaltijdbakje € 0,50, klein bakje € 0,05). Bij afhalen en bezorgen zet de kassa zelf een regel "Wegwerptoeslag" op de bon (met de btw van het product); die gaat vanzelf mee met de producten (de database houdt hem bij, ook na schrappen, verplaatsen of een ander soort bestelling) en staat apart in de omzet. Ter plaatse geen toeslag. Thuisbezorgd.nl en de webshop rekenen hun eigen toeslag.
- Statiegeld (Nederland): per product (€ 0,15 blik/flesje, € 0,25 grote fles), regel "Statiegeld" zonder btw, alleen bij afhalen en bezorgen.
- Contant € 3.000 of meer (Nederland, sinds 1-1-2026 verboden voor goederen): bij afhalen en bezorgen een melding bij afrekenen en bij de geldautomaat; de medewerker kan bevestigen (bv. catering als dienst), dat komt in het logboek. Eten en drinken ter plaatse is een dienst: geen melding.
- Btw-assistent: per product de soort (maaltijd, niet-alcoholische drank, drank met alcohol, voeding zonder bereiding, overig; eerst een gok op basis van de naam en de groep). De kassa toont het juiste tarief ter plaatse en bij afhalen (België sinds 1-3-2026: maaltijden en frisdrank 12%, ook afhaal; alcohol 21%; voeding zonder bereiding 6%. Nederland: 9% en 21%) en past het toe, meteen of vanaf een datum.
- Btw-wijziging plannen: een product naar een ander tarief, of (alleen Nederland) een tarief met een nieuw percentage, vanaf een datum. De kassa voert het op die dag zelf uit (elk kwartier gekeken, en bij het opstarten).
Facturen (in België verplicht tussen bedrijven) staan bij Facturen voor zakelijke klanten. Nog te doen: GKS 2.0, navragen hoe het met de certificering staat (zie docs/backlog-concurrenten.md).
Facturen voor zakelijke klanten
Instellingen → Facturen (beheerder; standaard uit): zet Facturen voor zakelijke klanten (UBL / Peppol) aan. Daaronder staan, als het aan staat, Betalen op rekening, de Gegevens op de factuur, de Peppol-diensten, de Bankkoppeling (met betalen op rekening) en de lijst met alle facturen. In België is e-facturatie tussen bedrijven verplicht sinds 1-1-2026.
- Facturen voor zakelijke klanten: Bonnen → kies de bon → Factuur. Vul de klant in (of kies een eerdere klant); de kassa maakt een factuur met nummer (bv. F2026-0001, per jaar oplopend), als UBL volgens Peppol BIS Billing 3.0 en als factuur om te printen of als PDF op te slaan. Versturen per e-mail (beide als bijlage, eventueel een kopie naar de boekhouder), via Billit naar het Peppol-netwerk (
BILLIT_API_KEY,BILLIT_PARTY_ID), via Storecove (STORECOVE_API_KEY,STORECOVE_LEGAL_ENTITY_ID; de ontvanger komt uit het Peppol-ID van de klant, bv. 0208 → BE:EN, 0106 → NL:KVK, anders per e-mail via Storecove) of via Banqup van Unifiedpost (BANQUP_CLIENT_ID,BANQUP_CLIENT_SECRET,BANQUP_SPACE_ID;BANQUP_SANDBOX=1voor de testomgeving; Banqup controleert de UBL en levert hem zelf af), naar een eigen adres (FACTUUR_HTTP_URL, bv. een boekhoudpakket of een andere Peppol-dienst) of downloaden. Eén factuur per bon; de bon is al betaald, dus "voldaan". KvK-/ondernemingsnummer, IBAN, Peppol-ID, voorvoegsel en betaaltermijn bij Gegevens op de factuur. Alle facturen onderaan het tabblad (recht Omzet per periode). - Sleutels, secrets en headers worden nooit getoond (alleen "ingevuld"; leeg laten = houden, Wissen = weg) en niet in het logboek gezet (alleen welke velden wijzigden). Ze staan in de database (
vestiging.peppol_gegevens): wel in back-ups, niet in de configuratie-export.
Kiosk voor zelfbediening
Gasten bestellen zelf op een zuil of tablet, zoals bij een fastfoodzaak, en betalen aan de kassa of met pin op de kiosk. De bestelschermen staan in de kassa zelf, dus kaart, prijzen, opties, menu's, happy hours, dagdelen, foto's, allergenen, talen en de kassabon komen uit de kassa en hoeven nergens anders ingericht te worden. Op de kiosk draait de app PinPortal Kiosk 2 (Android, ook Sunmi, en Windows, Linux en macOS), die de pagina toont en de bon print. Standaard uit.
Aanzetten en inrichten (beheerder): Instellingen → Zaak → Schermen en bediening → Kiosk voor zelfbediening.
- Kies wat de gast kan kiezen: Hier opeten en/of Meenemen (meenemen rekent met de afhaalprijs en het btw-tarief voor afhalen, als die zijn ingesteld).
- Welkomtekst, na hoeveel seconden zonder aanraken de kiosk terug naar het begin gaat (het mandje is dan leeg), en welke productgroepen op de kiosk staan (niets aangevinkt = alle).
- Ook iets erbij?: vink productgroepen aan (bv. drinken, desserts); bij het mandje stelt de kiosk dan een paar producten daaruit voor.
- Betalen, per kiosk (zie Kiosk toevoegen en koppelen):
- Aan de kassa (standaard, zoals de oude kiosk): de gast bestelt, krijgt een ophaalnummer en betaalt aan de kassa. Er is geen pinautomaat bij de kiosk nodig.
- Met pin op de kiosk: de gast pint op de pinautomaat bij de kiosk.
- De gast kiest: aan de kassa of met pin. Heeft de kiosk geen pinautomaat, dan wordt het aan de kassa.
- Naar de keuken (bij betalen aan de kassa): meteen na het bestellen op de kiosk (standaard), of pas als er aan de kassa betaald is.
- Kassabon: op de printer van de kiosk (standaard), op de bonprinter van de kassa, of geen bon (alleen het nummer op het scherm). Bij betalen aan de kassa print de kiosk een bon met het nummer en nog niet betaald; de kassabon komt bij het afrekenen aan de kassa.
- Bestelstatus op de telefoon (optioneel, standaard uit): er komt een QR-code op de bon van de kiosk en op het eindscherm. De gast scant hem, ziet zijn nummer en de stand (besteld, wordt klaargemaakt, klaar) en krijgt een melding als de bestelling klaar is. Dit gaat via het beheerportaal, dus de kassa moet daarmee verbonden zijn.
- Alcohol en producten per kilo staan nooit op de kiosk: zonder bediening kan de leeftijd niet gecontroleerd worden en er is geen weegschaal.
- Barcodescanner (optioneel, standaard alles uit): vink aan wat een scan op de kiosk mag doen:
- een product in het mandje (de code bij het product);
- een kortingscode;
- een klantenkaart (de gast spaart mee);
- een cadeaubon of tegoedpas als betaling. Is er genoeg saldo, dan is de bestelling meteen betaald. Anders betaalt de bon een deel en de gast betaalt de rest met pin of aan de kassa (dat mag dan ook op een kiosk met alleen pin). Na zo'n deelbetaling kan de gast niet meer annuleren; de bestelling staat in de kassa als Kiosk … · nummer.
De scanner zelf stel je in op de kiosk: in de app PinPortal Kiosk 2 bij beheer → Barcodescanner (als toetsenbord, de ingebouwde scanner of een COM-poort), met een scannertest. Een scanner die als toetsenbord werkt, werkt ook zonder de app.
- Tegoed opwaarderen (optioneel, standaard uit; werkt alleen als oplaadbaar tegoed aan staat): op het startscherm van de kiosk staat dan Tegoed opwaarderen. De gast scant zijn pas of bon (of typt de code), ziet het saldo en kiest een bedrag. De bedragen stel je zelf in (1 tot 6, standaard € 10, € 20 en € 50). Betalen gaat zoals bij de kiosk ingesteld: met pin, of aan de kassa met het ophaalnummer. Na het afrekenen staat het bedrag op het saldo. Zo'n opwaardering gaat niet naar de keuken, staat niet op het oproepscherm en krijgt geen QR-code. Het hoogste saldo van oplaadbaar tegoed geldt ook hier.
- Op mijn kamer (hotelkoppeling, standaard uit; Instellingen → Hotel → Zelfbediening): bij het mandje staat dan Op mijn kamer zetten. De hotelgast vult kamernummer en achternaam in; klopt dat met een gast die nu in die kamer verblijft, dan gaat de bestelling naar de keuken en staat hij betaald op de kamer (zie Hotelsoftware: op de kamer zetten).
- België (zwarte doos): wat nog niet getest is met de zwarte doos, staat op de kiosk vanzelf uit (cadeaubon of tegoed als betaling, opwaarderen, kortingscode, menu's, keuzeopties met meerprijs, happy hour), net als aan de kassa.
Kiosk toevoegen en koppelen
- Vul bij Kiosken een naam in (bv. Kiosk ingang) en kies Kiosk toevoegen. Je krijgt een koppelcode van 6 cijfers (30 minuten geldig).
- Kies bij de kiosk hoe de gast betaalt: standaard aan de kassa. Is het een kiosk met pinautomaat, kies dan met pin of de gast kiest, en kies de pinautomaat van deze kiosk (uit Instellingen → Betalen).
- Open op de kiosk de kioskpagina:
- in de zaak: in de app bij beheer → Vast adres het adres dat bij de instelling staat, bv.
http://192.168.1.20:3000/kiosk; - of via het beheerportaal (https, ook als de kiosk niet in hetzelfde netwerk staat): koppel het kioskadres dat bij de instelling staat aan de kioskcode van de app, net als bij de oude kiosk.
- in de zaak: in de app bij beheer → Vast adres het adres dat bij de instelling staat, bv.
- Vul op de kiosk de koppelcode in. Klaar: de kiosk onthoudt zijn eigen sleutel. Opnieuw koppelen geeft een nieuwe code; Weghalen ontkoppelt hem.
Bij elke kiosk staat of hij online is.
Zo bestelt de gast
- Startscherm met de welkomtekst; de gast kiest zijn taal (alle talen van de kassa) en tikt om te bestellen.
- Hier opeten of meenemen.
- De kaart per productgroep, met foto's, de prijs (met happy hour), allergenen en wat uitverkocht is. Producten met keuzes of een menu openen het keuzevenster.
- Het mandje: aantallen aanpassen en eventueel Ook iets erbij?.
- Bestellen (betalen aan de kassa): de gast ziet zijn ophaalnummer groot op het scherm met het bedrag, krijgt de bon en betaalt aan de kassa. In de kassa staat de bestelling open als Kiosk Ingang · 42 (het nummer dat de gast noemt); afrekenen gaat zoals altijd. Daarna staat hij als betaald op het oproepscherm, en gaat hij naar de keuken als dat pas na betalen moest.
- Betalen met pin: de kassa zet het bedrag op de pinautomaat van deze kiosk (dezelfde pinkoppeling als aan de kassa). Lukt het niet, dan kan de gast het opnieuw proberen of annuleren (of, als de gast mag kiezen, toch aan de kassa betalen). Pas als de betaling gelukt is, gaat de bestelling naar de keuken en wordt hij afgerekend. De gast ziet zijn ophaalnummer groot op het scherm en krijgt de bon.
- Na een paar seconden gaat de kiosk terug naar het begin.
Bij storing: melding en noodmodus (in de kiosk-app, beheer → Bij storing; standaard uit). Kan de kiosk de kassa niet bereiken, dan staat er Even gesloten. Twee extra's:
- Teams, Slack, Discord, ntfy, Home Assistant, Make of Zapier), en hersteld als het weer werkt. Met Testmelding sturen controleer je het adres.
- Noodmodus: de kiosk bewaart een eenvoudige kaart, die de kioskpagina doorgeeft: producten zonder keuzes of menu's, met de prijs van hier opeten (of meenemen als dat de enige keuze is).
- Is de kassa een tijd weg (standaard 60 seconden), dan bestelt de gast daarvan.
- De gast betaalt met pin of aan de balie. Pinnen kan alleen als Pinbetaling in de app aan staat.
- Er komen twee noodbonnen: een voor de gast (N1, N2 …) en een voor de balie/keuken. Er staat op dat het geen kassabon is.
- Komt de kassa terug, dan zet de kioskpagina de noodbestellingen in de kassa als Nood N… <kiosk>. Ze gaan niet naar de keuken (die had de noodbon al) en staan niet op het oproepscherm.
- Met pin betaald en hetzelfde bedrag als in de kassa: afgerekend als handmatig gepind. Anders (betalen aan de balie, of een ander bedrag) blijft de bestelling open voor de bediening.
- Alles staat in het logboek.
- België: met de geregistreerde kassa (GKS, zwarte doos) moet elke verkoop meteen via de kassa en de FDM. De noodmodus mag dan waarschijnlijk niet; vraag het eerst na. De kiosk-app zet hem in België alleen aan na een extra bevestiging, en de kassa waarschuwt bij de kiosk.
In de kassa is een kioskbestelling een gewone bestelling (afhalen of ter plaatse, met de naam Kiosk Ingang) op naam van de medewerker Kiosk. Die maakt de kassa zelf aan; niemand kan ermee aanmelden. Zet hem niet op non-actief, anders kan de kiosk niet bestellen. De kioskbestellingen staan in de rapporten, in Bonnen en op het oproepscherm. Een bestelling die op de kiosk niet afgemaakt wordt (niet besteld of niet gepind), vervalt na 30 minuten vanzelf.
Pinnen staat in testmodus (Instellingen → Betalen)? Dan betaalt de kiosk niet echt; handig om te proberen. Zonder internet kan er niet gepind worden; de kiosk zegt dan dat bestellen aan de balie kan.
Storing: is de kassa niet bereikbaar, dan toont de kiosk-app "Even gesloten" en gaat hij vanzelf verder. Staat de kiosk via het beheerportaal en valt internet weg, dan kan de app terugvallen op de kassa in het eigen netwerk (in de app: beheer → Uitbreidingen → Bij storing terugvallen op het eigen netwerk); de kiosk geeft dat adres zelf door.
Uitzetten: de kiosk zegt dat hij even gesloten is. De kiosken en de instellingen blijven bewaard. In het logboek staan aan/uit, de instellingen, toegevoegde en weggehaalde kiosken, koppelen en geannuleerde bestellingen.
Digitaal menubord
De kaart met prijzen op een tv (of een andere monitor met een browser), rechtstreeks uit de kassa. Standaard uit; aanzetten via Instellingen → Zaak → Schermen en bediening → Digitaal menubord. Open daarna op de tv http://<kassaserver>:3000/menubord (of de knop Op een eigen scherm / Op een tablet of telefoon met de QR-code). Geen aanmelding en geen koppeling.
- Per productgroep de producten met prijs, in de volgorde van de kassa. Kies zelf welke groepen (en in welke volgorde), 1 tot 4 kolommen, donker of licht, een eigen kop (leeg = de naam van de zaak), productfoto's en allergenen.
- Meteen goed: het bord vraagt elke 10 seconden de kaart op (en meteen bij een wijziging), dus een uitverkocht product (doorgestreept met Uitverkocht, of van het bord gehaald), een lege voorraad, een happy hour (actieprijs met de normale prijs doorgestreept, en de naam en eindtijd bovenaan) en de dagdelen (alleen wat nu te koop is) staan er vanzelf goed op.
- Past niet alles op het scherm, dan wisselen de pagina's (standaard elke 12 seconden, in te stellen van 5 tot 120).
Personeel en pincodes
Instellingen → Personeel (alleen beheerder): medewerkers toevoegen, naam, rol en pincode wijzigen, en op non-actief zetten.
- Rollen: bediening (bestellen, afrekenen, X-rapport), manager (daarnaast korting, retour, dag afsluiten, kassalade en logboek) en beheerder (alles, ook alle Instellingen). Dat is de standaard; wat bediening en manager mogen is aan te passen (zie Rechten per rol).
- Pincode 4 tot 8 cijfers, uniek onder de actieve medewerkers. Pincodes staan alleen versleuteld (hash) in de database en zijn niet terug te lezen.
- Echt verwijderen kan niet (bonnen en logboek verwijzen naar de medewerker); non-actief = kan niet meer inloggen.
- Er blijft altijd minstens één actieve beheerder over.
- Andere rol, nieuwe pincode of non-actief: lopende sessies van die medewerker worden meteen beëindigd.
- België: optioneel het rijksregisternummer voor de personeelsregistratie.
- Taal: de taal van de schermen voor deze medewerker (of "Taal van het apparaat"). Na aanmelden staat de kassa meteen in die taal; de medewerker kan hem ook zelf wijzigen met het vlaggetje rechtsonder (zie Talen).
- Tip: vervang de demo-pincodes 1111 en 2222 voordat de kassa live gaat.
Aanmelden met een pasje (optioneel)
Standaard uit. Aanzetten: Instellingen → Personeel, vinkje Aanmelden met een pasje (NFC, RFID of iButton). Nodig: een USB-paslezer die als toetsenbord werkt (voor NFC- of RFID-pasjes, sleutelhangers, polsbandjes of iButton-sleutels). Zo'n lezer "typt" het nummer van het pasje en drukt op Enter; er is geen stuurprogramma of koppeling nodig.
- Koppelen: tik op de medewerker, dan Pasje koppelen en houd het pasje tegen de lezer. Een pasje hoort bij één medewerker. Pasje weghalen als het kwijt is.
- Aanmelden: houd op het aanmeldscherm het pasje tegen de lezer. De pincode blijft ook gewoon werken.
- In- en uitklokken (als dat aan staat): op het aanmeldscherm In- / uitklokken en het pasje tegen de lezer.
- Het nummer van het pasje staat alleen versleuteld (hash) in de database, net als de pincode. Non-actieve medewerkers kunnen zich ook met hun pasje niet aanmelden.
- Uit: aanmelden alleen met de pincode, zoals altijd. Gekoppelde pasjes blijven bewaard.
Rechten per rol
Instellingen → Rechten (alleen beheerder): per rol aanvinken wat bediening en manager mogen. Standaard staat alles precies zoals hierboven (zoals de kassa het altijd deed); een vakje dat afwijkt is gekleurd.
| Recht | Bediening | Manager |
|---|---|---|
| Regels schrappen na bestellen (storno) | ja | ja |
| Korting geven / korting weghalen | nee | ja |
| Product op "op" zetten | ja | ja |
| Kopie van een bon printen | ja | ja |
| Retour (creditbon) | nee | ja |
| Op rekening afrekenen en betalingen op rekening ontvangen (alleen met betalen op rekening aan) | nee | ja |
| Tussenstand (X-rapport) | ja | ja |
| Dag afsluiten (Z-rapport) | nee | ja |
| Omzet per periode | nee | ja |
| Kassalade beheren | nee | ja |
| Cadeaubonnen beheren (alleen met cadeaubonnen met saldo) | nee | ja |
| Reviews lezen en beantwoorden (alleen met reviewbeheer aan) | nee | ja |
| Klantenkaart beheren (alleen met de klantenkaart aan) | nee | ja |
| Logboek bekijken | nee | ja |
| Camerabeelden bekijken (alleen met camerabeelden aan) | nee | ja |
| Voorraad beheren (alleen met voorraad aan) | nee | ja |
| Producten beheren | nee | nee |
| Plattegronden beheren | nee | nee |
| Zaak, betalen en printers instellen | nee | nee |
| Werktijden bekijken en aanpassen | nee | nee |
- De beheerder mag altijd alles. Personeel en rechten wijzigen blijft altijd alleen voor de beheerder (anders kan iemand zichzelf meer rechten geven).
- Knoppen en tabbladen die een rol niet mag, zijn voor die rol verborgen; de kassaserver controleert het ook. Krijgt een manager bv. Producten beheren, dan ziet hij de knop Instellingen met alleen het tabblad Producten.
- Wijzigingen gelden meteen op alle kassa's en komen in het logboek. Terug naar standaard zet alles weer zoals het was.
Gegevens van de zaak
Instellingen → Zaak (alleen beheerder): naam, adres, postcode, plaats, telefoon en btw-nummer van de vestiging. Deze staan bovenaan elke kassabon en pro forma. Ook de tekst onderaan de bon is hier in te stellen (meerdere regels mogen; leeg = geen tekst; standaard "Bedankt en tot ziens!"), en daaronder de taal van de kassabon (standaard Nederlands; zie Talen). Een voorbeeld van de bon verandert live mee. Na opslaan gebruikt de volgende bon meteen de nieuwe gegevens. Het land en de fiscale gegevens (GKS) zijn hier bewust niet te wijzigen. In België is het btw-nummer verplicht. Met het vinkje Contante betalingen afronden op 5 cent (standaard uit) wordt bij contant het totaal afgerond (€ 6,62 → € 6,60, € 6,63 → € 6,65); het verschil staat als "Afronding" op de bon. Pin blijft altijd op de cent.
Producten beheren
Meld je aan als beheerder en kies Instellingen → Producten.
- Productgroepen en producten toevoegen, wijzigen (naam, prijs, groep, btw-tarief ter plaatse en afhalen, naam op de bon, code, uitverkocht) en verwijderen. Groepen én producten kunnen een eigen kleur krijgen; een product met kleur krijgt een gekleurde knop op het bestelscherm (tekst automatisch wit of donker voor de leesbaarheid).
- Volgorde veranderen door een groep of product aan ≡ te verslepen. Dat werkt met muis en met de vinger op een tablet. Precies die volgorde staat daarna op het bestelscherm; open kassaschermen werken zichzelf meteen bij.
- Verwijderen haalt een product uit de kassa, maar oude bestellingen en het fiscale journaal blijven het product kennen. Een groep kun je pas verwijderen als hij leeg is.
- Keuzeopties: open een product of productgroep en voeg onder "Keuzeopties" keuzegroepen toe, zoals "Bakwijze" (precies één, verplicht), "Saus" (hooguit één) of "Extra" (meerdere, met minimum en maximum; leeg maximum = onbeperkt). Elke keuze heeft een naam en een meerprijs (mag negatief, bv. -0,50). Keuzegroepen van een productgroep gelden voor alle producten in die groep, bovenop de eigen keuzes van het product. Volgorde met ▲▼. Verwijderen kan altijd: bestaande bestellingen en bonnen bewaren de gekozen opties zelf. De server controleert verplichte keuzes en het maximum ook.
- Foto per product: zie Productfoto's.
- Prijs per kilo, PLU-nummer en tarra (alleen als de weegschaal aan staat): zie Weegschaal instellen. Zonder vinkje blijft een product gewoon per stuk.
Productfoto's
Elk product kan een foto krijgen.
- Foto zetten: Instellingen → Producten → kies het product → Foto kiezen (op een tablet of telefoon kan dat ook meteen met de camera). De foto wordt in de browser verkleind tot hooguit 512 × 512 pixels (JPEG, meestal 20–80 kB) en direct opgeslagen; Andere foto vervangt hem, Foto verwijderen haalt hem weg. In de productlijst staat een klein fotootje voor de naam. Alleen met het recht Producten beheren; jpg, png en webp, hooguit 512 kB.
- Tonen kiest de beheerder bij Instellingen → Zaak → Productfoto's, los van elkaar en standaard uit:
- Productfoto op de knoppen van het bestelscherm: de foto bovenaan de productknop, met de naam en prijs eronder.
- Productfoto bij de producten op het klantscherm: een klein fotootje voor elke regel op het klantscherm (het klantscherm zelf moet ook aan staan). Producten zonder foto blijven zoals ze zijn; staat het uit, dan werkt alles precies zoals voorheen.
Barcodescanner
Met een barcodescanner op de kassa scan je producten, kortingscodes, klantenkaarten en cadeaubonnen. Aanzetten bij Instellingen → Scanner (tabblad bij de printers en de weegschaal; standaard uit). Vink aan wat een scan op het bestelscherm doet:
- Product op de bon: het product met die code (Instellingen → Producten, veld Code; bv. de EAN-streepjescode van de verpakking). Met keuzes, een menu of een prijs per kilo opent eerst het keuzevenster of de weegschaal, net als bij tikken. Dit doet ook Scannen op het bestelscherm bij Etiketten printen; dat blijft gewoon werken.
- Kortingscode op de bon (als Kortingscodes aan staan).
- Klantenkaart: de klant met dat kaartnummer komt op de bon (als de klantenkaart aan staat). Scan je een onbekende code op een bon met een klant, dan vraagt de kassa of het zijn nieuwe kaart is.
- Cadeaubon of tegoedpas: de kassa laat het saldo zien (als cadeaubonnen met saldo aan staan). Betalen gaat bij Afrekenen → Cadeaubon; daar kun je de bon ook scannen.
De kassa kijkt eerst bij de producten, dan bij de klantenkaarten, de cadeaubonnen en de kortingscodes. Scannen werkt op het bestelscherm, als je niet in een invoerveld staat. In een invoerveld komt de code gewoon in dat veld.
Scannertest: bij Instellingen → Scanner zie je bij elke scan de code en wat de kassa ervan maakt, ook als de scanner nog uit staat. Werkt het niet:
- Zet de scanner op toetsenbord (USB-HID), met een Enter na de code. Bij de meeste scanners is dat al zo.
- Een ingebouwde scanner (bv. van een Sunmi-kassa) stel je in de scannerinstellingen van het apparaat in op toetsenbord-invoer.
- De etiketten van de TS6X-weegschaal (gewicht en prijs) doet de weegschaal zelf, ook met de scanner aan.
Op de kiosk stel je de scanner apart in (Instellingen → Zaak → Kiosk); zie Kiosk voor zelfbediening.
Etiketten printen
Artikeletiketten met de naam, de prijs en een streepjescode, op een labelprinter (Brother, Dymo, Zebra ...) die op de computer of tablet is geïnstalleerd. Aanzetten bij Instellingen → Zaak → Etiketten printen (standaard uit). Daar kies je ook het formaat van het etiket (38 × 25, 57 × 32, 62 × 29 of 100 × 50 mm) en of de prijs en de streepjescode erop komen. Voorbeeld printen print één proefetiket.
- Instellingen → Producten → (product) → Etiketten: aantal kiezen en Printen.
- Inkoop → (ontvangen bestelling) → Etiketten printen: van elk product zoveel etiketten als er binnen is (ontvangen besteleenheden × zoveel per besteleenheid; ingrediënten niet). Hooguit 500 etiketten in één keer.
- De kassa opent de printdialoog: kies daar de labelprinter en het papierformaat van de rol. Elk etiket is één pagina.
- De streepjescode is de code van het product (Instellingen → Producten): 8 of 13 cijfers met een kloppend controlecijfer = EAN (12 cijfers: het controlecijfer komt erbij), anders Code 128 (letters, cijfers en leestekens, tot 30 tekens). Zonder code geen streepjescode.
- Scannen op het bestelscherm (vinkje, standaard uit): een streepjescodescanner die als toetsenbord werkt zet het product met die code erbij, met de gewone keuzes (opties, weegschaal, allergie). Niet samen met de TS6X-weegschaal, die zijn eigen etiketten met gewicht en prijs heeft.
- Recht: Producten beheren of Voorraad beheren.
Weegschaal instellen (A&D, Aclas, Adam Equipment, Avery Berkel, Avery Weigh-Tronix, Balanzas Marques, Baxtran, Bizerba, Brecknell, CAS, Datalogic, Dibal, DIGI, Dini Argeo, Excell Precision, Gram, Ishida, Kern & Sohn, Mettler Toledo, Minebea Intec, Ohaus, Precia Molen, Precisa, Rice Lake, Rongta, Sartorius, Star Micronics, T-Scale, UWE, Wedderburn, Wintec, Zebra)
Eigen tabblad Instellingen → Weegschaal (recht Zaak, betalen en printers instellen, standaard alleen de beheerder; het tabblad is er altijd, ook als de weegschaal nog uit staat). Standaard uit: dan werkt de kassa precies zoals voorheen. Zie je het tabblad niet?
Vanzelf zoeken. Is er nog niets ingesteld, dan zoekt de kassa bij het openen van dit onderdeel vanzelf (knop Zoeken doet het opnieuw):
- draait de kassa(server) zelf op een Aclas pc- of AI-weegschaal (TS6X, TS3X, TS5EX/NX/GX, iS6X, iS2X, iR6X, Ti6X, iL8X; merk/model van het apparaat: Windows via WMI, Android via
getprop, Linux via DMI) en antwoordt de Aclas Scale Module? Dan wordt die weegschaal klaargezet als Op dit apparaat, en de etiketweegschaal ook; op Linux (geen Scale Module) de ingebouwde weegschaal op de gevonden interne poort (/dev/ttyS...) als "TS6X (ingebouwd)", met het model erbij; - zit er een OS6X aan een COM-/USB-poort? Elke poort wordt geprobeerd met 9600, 4800, 2400 en 19200 baud: eerst even luisteren (continu), dan
Wsturen (Toledo), en anders Dialog 06 (9600, 7 databits, oneven pariteit: status vragen).
Gevonden = in het formulier gezet met de knop Aanzetten en gebruiken: één tik en het werkt. (Zoeken stuurt een W naar elke vrije COM-poort; een poort die bezet is, bv. door de pinautomaat, wordt overgeslagen.)
Alle Aclas-weegschalen. Per weegschaal kies je het model; de kassa weet dan hoe die aangesloten kan worden. Er zijn twee soorten:
- Op dit apparaat (één keer instellen): de kassa draait op de weegschaal (pc- of AI-weegschaal). Met Windows of Android weegt hij via de Aclas Scale Module, zonder poort, snelheid of protocol; met Linux (geen Scale Module) via de interne poort van de weegschaal (meestal
/dev/ttyS0of/dev/ttyS1), met poort, snelheid en protocol. Daar is er maar één van per kassa; Zoeken vindt hem vanzelf. Een pc- of AI-weegschaal (TS6X, iS6X ...) is altijd Op dit apparaat: in de lijst kan hij maar één keer, de andere pc-/AI-modellen zijn dan niet meer te kiezen. Een TS6X ergens anders in de zaak kan wel etiketten printen (zet dan alleen Etiketten scannen aan). - Aangesloten (meerdere tegelijk): de weegschaal hangt met een kabel (RS232/USB), Bluetooth of het netwerk aan de kassaserver. Zoveel als nodig (hooguit 8), elk met een eigen naam.
Eén lijst, twee vinkjes. Alle weegschalen staan in één lijst. Per weegschaal zet je aan wat hij doet: Wegen aan de kassa (de kassa vraagt het gewicht op bij het bestellen) en/of Etiketten scannen (de weegschaal print een etiket met streepjescode dat de kassa scant, en krijgt de PLU's van de kassa). Een pc- of AI-weegschaal zoals de TS6X kan allebei; een LS-etiketweegschaal alleen etiketten. Etiketten kunnen van één weegschaal per zaak komen.
| Model | Soort | Aansluitingen | In de kassa |
|---|---|---|---|
| OS6X | POS-weegschaal | RS232, USB, Bluetooth | aangesloten, meerdere tegelijk |
| OS2X | POS-weegschaal | RS232, USB | aangesloten, meerdere tegelijk |
| CS6X, CS3X | Kassaweegschaal | RS232, USB, Ethernet, wifi | aangesloten, meerdere tegelijk |
| TS6X, TS3X, TS5EX, TS5NX, TS5GX | Pc-weegschaal (Windows, Android, Linux) | RS232, USB, Ethernet, wifi | op dit apparaat (1x), ook als etiketweegschaal |
| iS6X, iS2X, iR6X, Ti6X, iL8X | AI-weegschaal met productherkenning (Windows, Android, Linux) | RS232, USB, Ethernet, wifi | op dit apparaat (1x), ook als etiketweegschaal |
| iS5X, OiT2X | AI-weegschaal (alleen Linux) | RS232, USB, Ethernet | aangesloten of als etiketweegschaal |
| LS2S, LS2RX, LS2CX, LS2NX, LS5SX, LS5RX, LS5CX, LS5NX, LS6CX, LS6RX, LS6NX | Etiketweegschaal | RS232, Ethernet, wifi | etiketten scannen en PLU's |
| PS1CX, PS1DX, PS6CX, PS6DX | Prijsweegschaal | RS232 | aangesloten, meerdere tegelijk |
| PS1BX | Prijsweegschaal zonder aansluiting | geen | gewicht met de hand |
| LH15X | Hangweegschaal met etiketprinter | RS232, Ethernet, wifi | aangesloten of als etiketweegschaal |
A&D, Adam Equipment, Avery Berkel, Avery Weigh-Tronix, Balanzas Marques, Baxtran, Bizerba, Brecknell, CAS, Datalogic, Dibal, DIGI, Dini Argeo, Excell Precision, Gram, Ishida, Kern & Sohn, Mettler Toledo, Minebea Intec, Ohaus, Precia Molen, Precisa, Rice Lake, Rongta, Sartorius, Star Micronics, T-Scale, UWE, Wedderburn, Wintec en Zebra. Van deze merken staan de veelgebruikte modellen erbij waarvan vaststaat hoe de kassa ermee praat (te testen = het protocol staat niet letterlijk in een bron; de kassa kiest wat het meest voor de hand ligt). Allemaal aangesloten (meerdere tegelijk), of als etiketweegschaal waarvan de kassa het etiket scant:
| Merk | Model | Soort | Aansluiting | Protocol (af fabriek) | In de kassa |
|---|---|---|---|---|---|
| A&D | EK-i (o.a. EK-610i), HV-WP | Kassaweegschaal (alleen gewicht) | RS232, EK-i ook USB | Continu (stand stream), 2400 baud, 7E1 | aangesloten, meerdere tegelijk |
| Adam Equipment | Swift | Prijsweegschaal | RS232, USB (optie) | Continu (continu naar pc), 9600 8N1 (te testen) | aangesloten, meerdere tegelijk |
| Avery Berkel | FX110, FX120, FX131 (inbouw met scanner) | Kassaweegschaal | RS232, FX131 ook USB | Mettler Toledo 82/7 = Toledo 8217 (kassa stuurt W), 9600 baud, 7E1 | aangesloten, meerdere tegelijk |
| Avery Berkel | FX125 | Prijsweegschaal | RS232 | Checkout-Dialog 06 (9600, 7O1) | aangesloten, meerdere tegelijk |
| Avery Berkel | Xs, XTs, XTi | Etiketweegschaal | Ethernet, wifi, USB | eigen PLU's op de weegschaal | etiketten scannen |
| Avery Weigh-Tronix | 7820, 7829, ZP900 | Kassaweegschaal | RS232, 7820 ook USB, ZP900 ook USB en Ethernet | NCI (kassa stuurt W), 9600 baud, 7E1 | aangesloten, meerdere tegelijk |
| Balanzas Marques | BM1000P TOP | Kassaweegschaal (alleen gewicht) | RS232 | METTLER (kassa stuurt W, Toledo), 9600 baud, 7E1 | aangesloten, meerdere tegelijk |
| Balanzas Marques | BM5 Junior Tower Label, BM500 ETQ | Etiketweegschaal | Ethernet, USB, RS232, BM500 ETQ ook wifi | eigen PLU's op de weegschaal | etiketten scannen |
| Baxtran | TW, VW, XTA, XTA-P | Prijsweegschaal | RS232 | Toledo (kassa stuurt W), 9600 baud, 7E1 | aangesloten, meerdere tegelijk |
| Bizerba | CS 300 (ook inbouw) | Kassaweegschaal | RS232 | Checkout-Dialog 06 (9600, 7O1) | aangesloten, meerdere tegelijk |
| Bizerba | K-Class Flex, KH II | Etiketweegschaal | Ethernet | eigen PLU's op de weegschaal | etiketten scannen |
| Brecknell | 6702U, 6710U, 6720U | Kassaweegschaal | RS232, USB (virtuele COM-poort) | NCI (kassa stuurt W), 9600 baud, 7E1 | aangesloten, meerdere tegelijk |
| CAS | PD-II, PDN, PDI, PDS-B | Kassaweegschaal | RS232, PDN ook USB en Bluetooth, PDI ook USB | ECR type 2 = Toledo (kassa stuurt W), 9600 baud, 7E1 | aangesloten, meerdere tegelijk |
| CAS | CL3000, CL5500, CL7200 | Etiketweegschaal | Ethernet, USB, RS232, CL5500 en CL7200 ook wifi | eigen PLU's op de weegschaal | etiketten scannen |
| Datalogic | Magellan 9300i, 9400i, 9800i (scanner met weegschaal) | Kassaweegschaal | RS232 (aparte weegpoort), USB | Mettler Toledo 8217 (kassa stuurt W), 9600 baud, 7E1 | aangesloten, meerdere tegelijk |
| Dibal | KS-400, D-POS 400 | Kassaweegschaal | RS232, D-POS 400 ook USB | Checkout-Dialog 06 (9600, 7O1) | aangesloten, meerdere tegelijk |
| Dibal | G-325, PI-100 | Prijsweegschaal | RS232 | Checkout-Dialog 06 (9600, 7O1) | aangesloten, meerdere tegelijk |
| Dibal | M-500 (Mistral), D-900, CS-2200 | Etiketweegschaal | Ethernet, wifi, USB | eigen PLU's op de weegschaal | etiketten scannen |
| DIGI | DS-781 | Prijsweegschaal | RS232 | DIGI Type B (kassa stuurt ENQ), 9600 8N1 | aangesloten, meerdere tegelijk |
| DIGI | SM-120, SM-6000 | Etiketweegschaal | Ethernet, wifi | eigen PLU's op de weegschaal | etiketten scannen |
| Dini Argeo | DFW, DGT, 3590E | Kassaweegschaal (alleen gewicht) | RS232, USB, Ethernet, DFW en 3590E ook wifi | Continu (ST,GS, 0.512,kg), 9600 8N1 | aangesloten, meerdere tegelijk |
| Excell Precision | TPE, AM4, FD4-P, FDP4-P, GE4, GEP4 | Prijsweegschaal | RS232 | Continu (ST,GS,+0.876kg), 9600 8N1 (behalve TPE te testen) | aangesloten, meerdere tegelijk |
| Gram | XFOC RS, XFOC+ RS, ZFOC RS | Prijsweegschaal | RS232, USB (kabel van Gram) | Gram (kassa stuurt ENQ, dan DC1), 9600 8N1 (XFOC te testen) | aangesloten, meerdere tegelijk |
| Ishida | Uni-3, Uni-5, Uni-7, Uni-9 | Etiketweegschaal | Ethernet, wifi, USB | eigen PLU's op de weegschaal | etiketten scannen |
| Kern & Sohn | RPB, RFC | Prijsweegschaal | RS232, USB | Checkout-Dialog 06 (Prot = DLG-06, 9600, 7O1) | aangesloten, meerdere tegelijk |
| Kern & Sohn | RFE (prijs), IFB, EOC | Prijs-/kassaweegschaal | RS232 | Continu, 9600 8N1 | aangesloten, meerdere tegelijk |
| Mettler Toledo | Ariva-S | Kassaweegschaal | RS232, USB (virtuele COM-poort) | Toledo 8217 (kassa stuurt W), 9600 baud, 7E1 | aangesloten, meerdere tegelijk |
| Mettler Toledo | Viva | Kassaweegschaal | RS232 | Toledo 8217, 9600 baud, 7E1 | aangesloten, meerdere tegelijk |
| Mettler Toledo | bPlus, UC Evo | Etiketweegschaal | Ethernet, wifi | eigen PLU's op de weegschaal | etiketten scannen |
| Minebea Intec | Signum, Combics, Midrics, Puro | Kassaweegschaal (alleen gewicht) | RS232, USB, Signum en Combics ook Ethernet | Continu (SBI, automatisch afdrukken), 9600 8N1 | aangesloten, meerdere tegelijk |
| Ohaus | Aviator 7000 | Prijsweegschaal | RS232 of USB | Checkout-Dialog 06 (9600, 7O1) | aangesloten, meerdere tegelijk |
| Ohaus | Valor 7000, Ranger 3000, Ranger 4000, Ranger 7000, Defender 3000 | Kassaweegschaal (alleen gewicht) | RS232, USB, Ethernet | Continu (Auto Print Continuous), 9600 8N1 | aangesloten, meerdere tegelijk |
| Precia Molen | DP400 | Kassaweegschaal | RS232, USB | Checkout-Dialog 06 (9600, 7O1) | aangesloten, meerdere tegelijk |
| Precia Molen | DPOS CR, C 210 B, C 210 C | Prijsweegschaal | RS232 | Checkout-Dialog 06 (9600, 7O1; C 210 te testen) | aangesloten, meerdere tegelijk |
| Precia Molen | Corail 500 | Etiketweegschaal | Ethernet, wifi | eigen PLU's op de weegschaal | etiketten scannen |
| Precisa | XB, XT, LS, LX (precisiebalansen) | Kassaweegschaal (alleen gewicht) | RS232, LS en LX ook USB | Continu (afdrukstand CONTINUOUS), 9600 8N1 | aangesloten, meerdere tegelijk |
| Rice Lake | BenchPro BP-S, BenchPro BP-R | Kassaweegschaal | RS232 | BP-S Toledo 8213, BP-R NCI (allebei: kassa stuurt W), 9600 baud, 7E1 (te testen) | aangesloten, meerdere tegelijk |
| Rongta | RLS1000, RLS1100 | Etiketweegschaal | Ethernet, RS232, wifi | eigen PLU's op de weegschaal | etiketten scannen |
| Sartorius | Entris, Quintix | Kassaweegschaal (alleen gewicht) | RS232, USB | Continu (SBI, automatisch afdrukken), 9600 8N1 | aangesloten, meerdere tegelijk |
| Star Micronics | mG-T12, mG-T30, mG-T60, mG-S8200 | Kassaweegschaal (alleen gewicht) | RS232, USB (virtuele COM-poort) | Continu, 9600 8N1 (te testen) | aangesloten, meerdere tegelijk |
| T-Scale | PA10, PA15, PEA10 | Etiketweegschaal | Ethernet | eigen PLU's op de weegschaal | etiketten scannen |
| UWE | ASEP | Prijsweegschaal | RS232 | Continu, 9600 8N1 (te testen) | aangesloten, meerdere tegelijk |
| Wedderburn | TSDS983 | Kassaweegschaal | RS232 | DIGI Type B (kassa stuurt ENQ), 9600 8N1 (te testen) | aangesloten, meerdere tegelijk |
| Wedderburn | TSDS781T, TSDS782T | Prijsweegschaal | RS232 | DIGI Type B, 9600 8N1 (te testen) | aangesloten, meerdere tegelijk |
| Wedderburn | TSSM120 | Etiketweegschaal | Ethernet, RS232 | eigen PLU's op de weegschaal | etiketten scannen |
| Wintec | ScalePOS ACS-S60E (kassa met ingebouwde weegschaal) | Kassaweegschaal | intern COM6 (Windows) of COM4 (Android) | Continu, 9600 8N1 (te testen) | aangesloten |
| Zebra | MP7000, MP72 (scanner met weegschaal) | Kassaweegschaal | RS232 (AUX-poort) | SASI = Toledo (kassa stuurt W), 9600 baud, 7E1 (te testen) | aangesloten, meerdere tegelijk |
- A&D EK-i en HV-WP: zet de weegschaal op stream (EK-i:
prt 0; af fabriek staat hij op de PRINT-toets) en de kassa op Continu met 2400 baud en 7E1 (zo staat A&D af fabriek). Het bericht isST,+00512.00 g(US= beweegt,OL= te zwaar). - Adam Equipment Swift: zet de weegschaal op continu naar pc (8N1); de kassa staat dan op Continu.
- Avery Berkel FX110, FX120 en FX131: kies op de weegschaal het protocol Mettler Toledo 82/7 en zet de kassa op Opvragen (Toledo) met 7E1 (9600 baud). Dialog 06 kan ook. De FX125 (met prijsdisplay) kent geen Toledo: daar Dialog 06. Dat zet de kassa vanzelf klaar als je het model kiest.
- Avery Weigh-Tronix 7820, 7829 en ZP900 en Brecknell 6702U, 6710U en 6720U: NCI, het protocol van Weigh-Tronix. De kassa stuurt
W(net als bij Toledo), de weegschaal antwoordt met het gewicht (1.234KG) en een statusregel; die zegt of hij beweegt, te zwaar of te licht is. De kassa staat op Opvragen (Toledo) met 7E1 (9600 baud). USB werkt als virtuele COM-poort. Bij de ZP900 de kassa op poort 2 (NCI). Bij de 67xxU kan op de weegschaal ook 8213 (SCP03). - Balanzas Marques BM1000P TOP: kies bij de COM-poort protocol B (METTLER) en 9600 baud, 7 databits, even pariteit; de kassa staat dan op Opvragen (Toledo) met 7E1.
- Baxtran TW, VW, XTA en XTA-P (prijsweegschalen; VW en XTA-P met zuil): kies in het menu RS232 van de weegschaal het protocol Toledo, 9600 baud en 7 databits met even pariteit (7E1); de kassa staat dan op Opvragen (Toledo) met 7E1. Dat zet de kassa vanzelf klaar als je het model kiest. CONT (de weegschaal stuurt zelf) werkt ook: zet de kassa dan op Continu met dezelfde snelheid en databits. Aansluiten met de RS232-kabel (9-polig) of een USB-naar-RS232-kabel.
- Bizerba CS 300: Checkout-Dialog 06 (de Bizerba-specificatie): de kassa stuurt de kiloprijs, de geijkte weegschaal rekent het bedrag. Vraagt de weegschaal om controlecodes, dan krijg je die van Bizerba of de leverancier.
- CAS PD-II, PDN, PDI en PDS-B (de PDS-B o.a. bij LRE): kies op de weegschaal ECR type 2 (Toledo) en zet de kassa op Opvragen (Toledo) met 7E1 (9600 baud).
- Datalogic Magellan 9300i, 9400i en 9800i: zet de Scale Interface Type van de aparte weegpoort op Mettler Toledo 8217 en de kassa op Opvragen (Toledo) met 7E1.
- Dibal KS-400, D-POS 400, G-325 en PI-100: kies op de weegschaal het protocol Checkout_Dialog06 (protocol 24) en 9600 baud, 7 databits, oneven pariteit (parametertype 5); de kassa staat dan op Dialog 06. De D-POS 400 kan ook via USB.
- DIGI DS-781: zet de weegschaal op Type B / standaardopdracht (data transmission
00011); de kassa stuurtENQen krijgt netto, tarra, kiloprijs en bedrag terug. - Dini Argeo DFW, DGT en 3590E: zet de seriële poort op continu versturen (9600 8N1); de kassa staat dan op Continu.
- Excell Precision TPE (en de 4e generatie AM4, FD4-P, FDP4-P, GE4, GEP4): zet de RS232-uitvoer op continu (9600 8N1); de kassa staat dan op Continu.
- Gram XFOC RS, XFOC+ RS en ZFOC RS: protocol Gram (9600 8N1). De kassa stuurt
ENQ, de weegschaal antwoordtACK, de kassa stuurtDC1en de weegschaal stuurt het gewicht:SOH STX S/U/F teken gewicht eenheid BCC ETX EOT(S= stil,U= beweegt,F= fout; BCC = XOR van status tot en met de eenheid). Aansluiten met RS232 of de USB-kabel van Gram. - Kern & Sohn RPB en RFC: zet op de weegschaal
Prot = DLG-06(de kassa-aansluiting is optie 965-419); de kassa staat dan op Dialog 06. RFE, IFB en EOC: continu versturen (8N1), de kassa op Continu. - Mettler Toledo Ariva/Viva: zet de weegschaal op het Toledo-protocol (8217) en de kassa op Opvragen (Toledo) met Databits / pariteit = 7E1 (Mettler: 9600 baud, 7 databits, even pariteit; de Ariva kan ook via USB als virtuele COM-poort). Dat zet de kassa vanzelf klaar als je het model kiest.
- Minebea Intec Signum, Combics, Midrics en Puro en Sartorius Entris en Quintix: SBI met automatisch afdrukken (9600 8N1); de kassa staat dan op Continu. Het bericht is
N + 0.512 kg; zonder eenheid beweegt het nog. - Ohaus Aviator 7000: kies in de instellingen van de weegschaal (stap 20) het protocol Dialog 06; de kassa staat dan op Dialog 06. RS232 of USB, afhankelijk van de kabel.
- Ohaus Valor 7000, Ranger 3000/4000/7000 en Defender 3000 (wegen zonder prijs): zet de weegschaal op Auto Print Continuous (9600 baud, 8N1) en de kassa op Continu. De weegschaal stuurt
0.512 kg G; een?na het gewicht betekent dat het nog beweegt. De Ranger 7000 kan ook via Ethernet (TCP-poort 9761). - Precia Molen DP400, DPOS CR en C 210 (de handelsweegschalen zijn sinds 2025 van Dibal): Dialog 06 (9600 7O1), net als Dibal. Werkt het bij de C 210 niet, probeer dan Opvragen (Toledo) met 7E1.
- Precisa XB, XT, LS en LX: zet de afdrukstand op CONTINUOUS en 9600 8N1, zonder datum, tijd en ID op de regel; de kassa staat dan op Continu. Zonder eenheid beweegt het gewicht nog.
- Rice Lake BenchPro BP-S (Toledo 8213) en BP-R (NCI): de kassa staat op Opvragen (Toledo) met 7E1.
- Star Micronics mG-T en mG-S8200: via RS232 of USB (virtuele COM-poort, met de driver van Star) op Continu.
- UWE ASEP: RS232 naar pc/kassa, de kassa op Continu (te testen).
- Wedderburn TSDS983, TSDS781T en TSDS782T zijn DIGI-weegschalen onder een eigen nummer: DIGI (Type B), net als de DIGI DS-781. Werkt dat niet, probeer dan Opvragen (Toledo) met 7E1.
- Wintec ScalePOS ACS-S60E: de kassa draait op de ScalePOS zelf; de ingebouwde weegschaal zit op COM6 (Windows) of COM4 (Android), 9600 8N1. Kies Continu; stuurt hij niets, dan vindt Zoeken het juiste protocol.
- Zebra MP7000 en MP72: de RS232-AUX-poort staat af fabriek op SASI (9600 7E1, de kassa stuurt
W): de kassa op Opvragen (Toledo) met 7E1. - Etiketweegschalen van deze merken (Avery Berkel, Balanzas Marques, Bizerba, CAS, Dibal, DIGI, Ishida, Mettler Toledo, Precia Molen, Rongta, T-Scale, Wedderburn) zijn zelfstandige systemen met hun eigen PLU-bestand. Zet bij de weegschaal Etiketten scannen aan en stel dezelfde streepjescode in als op de weegschaal (EAN-13, begin 20–29, PLU en gewicht of prijs). De PLU's zet je op de weegschaal zelf of met de software van het merk; Naar TS6X sturen en PLU-bestand downloaden zijn er alleen voor Aclas.
Dezelfde lijst staat in de kassa onder Instellingen → Weegschaal → Alle weegschalen (ACLAS_MODELLEN in packages/shared/src/weegschaal.ts, met het merk per model).
Zo min mogelijk invullen: kies je een model, dan zet de kassa de rest al klaar zoals het merk het af fabriek instelt: aansluiting COM-poort / USB op de eerste vrije poort, 9600 baud (A&D: 2400) en het protocol van het merk (Toledo: Aclas met 8N1, en met 7E1 Avery Berkel FX, Avery Weigh-Tronix, Balanzas Marques, Baxtran, Brecknell, CAS, Datalogic, Mettler Toledo, Rice Lake en Zebra; Dialog 06: Avery Berkel FX125, Bizerba, Dibal, Kern & Sohn RPB/RFC, Ohaus Aviator en Precia Molen; DIGI Type B: DIGI en Wedderburn; Gram: Gram; Continu: A&D, Adam Equipment, Dini Argeo, Excell Precision, de andere Kern & Sohn, Minebea Intec, de andere Ohaus, Precisa, Sartorius, Star Micronics, UWE en Wintec), en een naam (bv. OS6X, OS6X 2). Een pc- of AI-weegschaal wordt Op dit apparaat (bv. TS6X (ingebouwd); op Linux op de interne poort /dev/ttyS0). Klopt iets niet, dan vindt Zoeken de juiste poort, snelheid en protocol.
Op dit apparaat (Aclas Scale Module): de weegschaal toont het geijkte gewicht; de kassa stuurt de kiloprijs en de tarra (als voortarra) en neemt het bedrag over dat de weegschaal rekent, net als bij Dialog 06.
- Android: de app AclasScaleDriver (
com.aclas.aclasscaledriver) van Aclas staat meestal al op de weegschaal; zo niet, installeer danaclas-android/AclasScaleDriver.apk. De HorecaPOS-app praat rechtstreeks met de dienst van die app, dus er is geen extra bibliotheek nodig. - Linux: Aclas heeft geen Scale Module voor Linux. Kies gewoon het model (bv. TS6X): de aansluiting wordt dan Op dit apparaat (interne poort) op
/dev/ttyS0, 9600 baud, Toledo. De ingebouwde weegschaal zit meestal op/dev/ttyS0of/dev/ttyS1; Zoeken probeert ze en zet de juiste poort, snelheid en protocol in. Ook hier kan hij maar één keer.
Software van Aclas zit in de kassa: de Scale Module voor Windows (aclas-module), AclasScaleDriver voor Android (aclas-android) en de Aclas Sync SDK voor Windows en Linux (aclas-sdk). Aclas staat toe dat we ze meeleveren. De installers voor Windows en Linux nemen ze mee; niets apart te downloaden of te installeren.
Bluetooth (bv. de OS6X): koppel de weegschaal eerst. Windows maakt er een COM-poort van (Bluetooth-instellingen → Meer Bluetooth-opties → COM-poorten), Linux /dev/rfcomm0: vul die poort in. In de Android-app vul je het Bluetooth-adres in (00:11:22:AA:BB:CC); de app vraagt één keer toestemming voor Apparaten in de buurt en verbindt via Bluetooth SPP.
AI-weegschalen (productherkenning): de camera herkent het product in de software van Aclas op de weegschaal. Wegen werkt via de Scale Module (op dit apparaat) of de RS232-poort; AI-etiketweegschalen printen na het herkennen een etiket met streepjescode dat de kassa scant (zoals bij de TS6X).
Aclas AI Recognition Plugin (AI-weegschaal met de kassa erop, bv. de iS6X met Windows): de plugin van Aclas herkent het product en typt de streepjescode ervan in de kassa, net als een scanner (met Enter erna); het bestelscherm zet het product met het gewicht op de bestelling. Zo stel je het in:
- Zet bij de weegschaal Etiketten scannen aan met dezelfde streepjescode als in de plugin. Aanrader: begint met
27, PLU 5 cijfers, gewicht (Aclas type 17): de kassa rekent dan zelf met de prijs per kilo. Met de prijs (type 12, begint met22) kan ook. - Zet bij die weegschaal Wegen aan de kassa uit: de plugin en de Scale Module kunnen niet tegelijk bij de weegschaal. Het gewicht komt uit de streepjescode. Antwoordt de plugin bij Zoeken, dan stelt de kassa het zo voor en start hij de Scale Module niet. Zonder activatiecode weegt de plugin wel en rekent hij het bedrag uit, maar herkent hij geen producten.
- In de plugin zelf: de streepjescode bij Scale and Barcode Format Settings → Default Barcode Format (type 17), en bij de vensterinstellingen het punt waar de plugin klikt en de code intikt. Kies daarvoor een lege plek in het bestelscherm, niet op een knop. Nieuwe producten leert de zaak de plugin zelf aan op de weegschaal (AI-training).
- Geef de weegbare producten een PLU-nummer en stuur de PLU's naar de weegschaal (Naar TS6X sturen of het PLU-bestand); de plugin herkent op PLU-nummer.
- De kassa laat de plugin alleen herkennen zolang het bestelscherm op de weegschaal zelf openstaat (
POST /aiplugin/resume, bij het sluiten/aiplugin/suspend, poort 5003 op de weegschaal; de eerste keer ook EmployeeMode: het klantscherm van de weegschaal toont geen producten). Op andere kassa's en tablets en via het beheerportaal gebeurt er niets. - De plugin start altijd in Resume en kan zijn stand niet doorgeven. Daarom stuurt het bestelscherm elke 30 seconden opnieuw resume; blijft dat uit (scherm dicht, plugin of weegschaal herstart), dan zet de kassa de plugin binnen een minuut op Suspend en houdt hem daar.
- De plugin vraagt een activatiecode van Aclas per weegschaal (gekoppeld aan het serienummer). Werkt nu op Windows; de Android-versie van Aclas volgt (de kassa doet daar hetzelfde).
Aclas OS6X (POS-weegschaal aan de kassa, RS232/USB; zo werken ook de andere aangesloten weegschalen):
- Eén of meer weegschalen (hooguit 8), elk met een naam (bv. Toonbank, Bar) en een eigen aansluiting: COM-poort / USB (
COM3op Windows,/dev/ttyUSB0op Linux/Android) met de snelheid, of netwerk via een serieel-naar-netwerkomzetter (IP-adres en TCP-poort, bv. 4001). - Protocol: Opvragen (Toledo) = de kassa stuurt
Wen de weegschaal antwoordt met het gewicht (Toledo 8217, zo staat de OS6X meestal; ook de statusmeldingen niet stil/overbelast/onder nul) of Continu = de weegschaal stuurt zelf steeds het gewicht (ST,GS, 0.512kg,US= niet stil) of Dialog 06 (geijkt), zie hieronder, of DIGI (Type B) = de kassa stuurtENQen de DIGI antwoordt met status, netto, tarra, kiloprijs en bedrag (37 tekens:<status> <toestand> CR 0<netto> CR 4<tarra> CR U<kiloprijs> CR T<bedrag> CR LF; toestand bit 1 = stil, bit 2 = onder nul, bit 3 = te zwaar, bit 4 = te licht), of Gram = de kassa stuurtENQ, wacht opACK, stuurtDC1en leestSOH STX <S/U/F> <teken> <gewicht> <eenheid> <BCC> ETX EOT. Zet op de weegschaal hetzelfde protocol en dezelfde snelheid. Databits / pariteit: 8N1 (Aclas, Adam Equipment, DIGI, Dini Argeo, Excell Precision, Gram, Kern & Sohn, Minebea Intec, Ohaus, Precisa, Sartorius, Star Micronics, UWE, Wedderburn, Wintec) of 7E1 (A&D, Avery Berkel, Avery Weigh-Tronix, Balanzas Marques, Baxtran, Brecknell, CAS, Datalogic, Mettler Toledo 8217, Rice Lake, Zebra); Dialog 06 is altijd 7O1. Opvragen leest ook NCI (Avery Weigh-Tronix, Brecknell, Rice Lake BP-R): opWantwoordt de weegschaalLF 1.234KG CR LF S00 CR ETX; de statusregel (S+ 2 of 3 bytes) zegt of hij beweegt (byte 1 bit 0), te licht (byte 2 bit 0) of te zwaar is (byte 2 bit 1);^^^^^= te zwaar,_____= te licht. - Dialog 06 (Checkout-Dialog 06, het Europese protocol voor een geijkte weegschaal aan een kassa): de kassa stuurt de kiloprijs (en de tarra van het product) naar de weegschaal; de weegschaal weegt, rekent zelf het bedrag uit en toont kiloprijs, gewicht en bedrag op het eigen (geijkte) display. De kassa neemt gewicht en bedrag over; in het weegvenster staat "berekend door de weegschaal". Altijd 9600 baud, 7 databits, oneven pariteit, 1 stopbit (de snelheid in de instelling telt dan niet). Verloop:
EOT STX 01 ESC <kiloprijs 6> ESC ETX(met tarra: record03met 4 cijfers gram) → ACK;ENQ→STX 02 ESC 3 ESC <gram 5> ESC <kiloprijs 6> ESC <bedrag 6> ETX; NAK →EOT STX 08 ETX→STX 09 ESC <code> ETX(22 = nog niet klaar, dan na 100 ms opnieuw; 20 = beweegt; 21 = eerst optillen; 30/31 = te licht; 32 = te zwaar; 11 = prijs ongeldig). Controlecodes: veel Dialog 06-weegschalen vragen af en toe (bv. elke 30 wegingen) de controlecodes van de kassasoftware (record 11 → record 10). Die codes en hoe ze berekend worden geeft de fabrikant van de weegschaal alleen aan de kassaleverancier. Vul ze in bij Controlecodes (paren van 4 hexadecimale tekens, bv.74AE 1B2C); de kassa stuurt ze als de weegschaal erom vraagt. Rekent de weegschaal met een wisselend getal (Z) en kloppen vaste codes dus niet, dan meldt de kassa dat; vraag de leverancier dan om de weegschaal zonder deze controle in te stellen, of gebruik Toledo. - De weegschalen hangen aan de pc of het apparaat waar de kassaserver draait; alle kassa's en tablets wegen via de kassaserver en kiezen in het weegvenster welke weegschaal ze gebruiken. Testen weegt één keer.
- Netwerk werkt overal.
- Gewicht ook met de hand intikken: aan = ook met een weegschaal mag het gewicht ingetikt worden; zonder OS6X kan het altijd.
Etiketten scannen (vinkje bij de weegschaal: Aclas TS6X, een andere pc- of AI-weegschaal, de LS-serie of de LH15X; weegschaal + etiketprinter, één per zaak):
- IP-adres: alleen nodig voor Naar TS6X sturen. Wegen en etiketten scannen werken zonder. Draait de kassa op de TS6X zelf, laat het dan leeg: de kassa stuurt dan naar zichzelf (127.0.0.1). Weegt dezelfde weegschaal ook aan de kassa, dan staan beide vinkjes bij dezelfde weegschaal (Zoeken zet dat zo klaar).
- Etiketten scannen: etiketten scannen op het bestelscherm. Stel in hoe de streepjescode eruitziet, net als op de TS6X: begint met (20–29, standaard
28), aantal cijfers voor de PLU (4, 5 of 6) en daarna het gewicht in gram of de prijs in centen, plus het controlecijfer (EAN-13). Onder de instelling staat een voorbeeld. - PLU-nummers: bij Instellingen → Producten krijgt een weegbaar product een prijs per kilo, eventueel een tarra en een PLU-nummer (uniek). Het PLU-nummer kies je uit een lijst (Geen PLU, volgende vrije, Ander nummer…); bij het aanvinken van Prijs per kilo staat het volgende vrije nummer er al. Alleen nodig voor de etiketten en PLU's van de TS6X: zonder TS6X mag het Geen PLU blijven.
- Rechtstreeks versturen kan op Windows en Linux; op Android en macOS het PLU-bestand gebruiken. Controleer bij de eerste installatie de veldnamen van het PLU-bestand en de codes in
aclas-plu.ps1tegen de SDK-handleiding van de geleverde weegschaal (één plek om aan te passen:ACLAS_PLU_KOLOMMENinpackages/shared/src/weegschaal.ts).
Beheerportaal: de melding aan het portaal heeft de functie Weegschaal (A&D, Aclas, Adam Equipment, Avery Berkel, Avery Weigh-Tronix, Balanzas Marques, Baxtran, Bizerba, Brecknell, CAS, Datalogic, Dibal, DIGI, Dini Argeo, Excell Precision, Gram, Ishida, Kern & Sohn, Mettler Toledo, Minebea Intec, Ohaus, Precia Molen, Precisa, Rice Lake, Rongta, Sartorius, Star Micronics, T-Scale, UWE, Wedderburn, Wintec, Zebra) met aan/uit en welke weegschalen per model (bv. TS6X (op dit apparaat), 2x OS6X, PS1CX, Ariva-S, DS-781, LS6RX, 5 producten per kilo); geen IP-adressen, COM-poorten of Bluetooth-adressen.
IJkwet: een weegschaal waarop je verkoopt moet geijkt zijn (klasse III, zoals de OS6X). Met Toledo/continu rekent de kassa met het gewicht dat de weegschaal geeft; met Dialog 06 rekent de geijkte weegschaal zelf de prijs.
Code: packages/shared/src/weegschaal.ts (protocollen, etiketten, PLU-bestand), apps/pos-server/src/lib/weegschaal.ts en routes/weegschaal.ts; schermen WeegschaalInstellingen.tsx en WeegDialoog.tsx.
Thuisbezorgd.nl / Takeaway.com
Bestellingen van Thuisbezorgd.nl komen rechtstreeks in de kassa, zonder tussenpartij (geen Deliverect, HubRise o.i.d.): Just Eat Takeaway JET Connect praat met het beheerportaal van Pin Voordeel, en de kassa haalt haar berichten daar op.
In België heet het platform Takeaway.com: hetzelfde bedrijf (Just Eat Takeaway) en dezelfde koppeling. Voor een Belgische zaak staat in de schermen, meldingen, op de werkbon en in het beheerportaal overal Takeaway.com in plaats van Thuisbezorgd.nl. Hieronder staat Thuisbezorgd voor allebei.
Waarom via het portaal? De kassa heeft alleen PORTAAL_URL en PORTAAL_SLEUTEL nodig (zie Beheerportaal) en doet alleen uitgaande verzoeken.
Instellen (Instellingen → Bezorgplatforms → Thuisbezorgd.nl / Takeaway.com, recht Zaak, betalen en printers instellen; eerder stond dit bij Instellingen → Zaak):
- Thuisbezorgd gebruiken aanzetten (gaat meteen, los van Opslaan).
- Aanmelden bij Thuisbezorgd. De zaak kiest daarna bij Thuisbezorgd (Partner Hub of accountmanager) OptimumPOS / Pin Voordeel als kassa. JET start dan een onboarding-sessie; het portaal zoekt de aangemelde kassa erbij (op postcode en naam, anders koppelt Pin Voordeel de sessie met de hand in het portaal), stuurt de configuratie, en vraagt de kassa om het menu. Daarna gaat de koppeling live.
- Producten aanvinken die bestelbaar zijn via Thuisbezorgd (per groep of los), met eventueel een omschrijving voor Thuisbezorgd. Het menu (prijs, keuzeopties als modifiers, allergenen, btw) gaat vanzelf mee; PLU = id van het product/de optie. Na een wijziging in de catalogus werkt de kassa het menu binnen 30 seconden bij; alleen "op"/"weer leverbaar" gaat via de beschikbaarheids-API.
- Openingstijden Thuisbezorgd: apart voor bezorgen en afhalen (bv.
16:00-22:00, meerdere blokken met een komma). Ze worden bewaard met de knop Openingstijden opslaan eronder en gaan als service times naar Thuisbezorgd zodra de koppeling klaar is. - Tijdelijk dicht / Weer open (in NL/BE uiterlijk de volgende ochtend 07:00 weer open).
Bestellingen. Een bestelling wordt een gewone bestelling zonder tafel (bezorgen of afhalen, groepsnaam TB <ordernummer>) met de prijzen die de klant betaalde, plus bezorgkosten/servicekosten als eigen regel en korting van Thuisbezorgd als kortingsregel; klopt het totaal toch niet, dan een regel "Verschil Thuisbezorgd". De werkbon gaat meteen naar keuken/bar (uit te zetten). De kassa bevestigt binnen seconden aan het portaal, dat het aan JET meldt; lukt dat niet binnen 3 minuten of is de kassa offline, dan krijgt JET "mislukt" en valt de zaak terug op de Orderpad.
Knop Thuisbezorgd in de bovenbalk (met aantal lopende bestellingen): lijst, klant en adres, klaar-/bezorgtijd en de tijdlijn (track & trace): ontvangen, bezorger onderweg naar de zaak, bezorger bij de zaak, onderweg naar de klant, bezorgd (van JET), plus eigen stappen (in bereiding, klaar, onderweg/bezorgd bij zelf bezorgen, opgehaald). Een live kaart met de bezorger biedt JET Connect niet aan de kassa; die ziet de klant in de app van Thuisbezorgd. Nieuwe bestelling, annulering en "bezorger bij de zaak" geven een oranje balk en een geluid. Afronden (online betaald) rekent af met betaalwijze online; betaalt de klant bij de deur, dan gewoon afrekenen. Een annulering van Thuisbezorgd laat de bestelling vervallen en print een "GEANNULEERD"-werkbon.
Code: apps/pos-server/src/lib/thuisbezorgd.ts, routes/thuisbezorgd.ts; schermen ThuisbezorgdInstellingen.tsx en Thuisbezorgd.tsx. Portaalkant: horecapos-portaal/src/thuisbezorgd.mjs (zie README van het portaal).
Telling in het beheerportaal. Het aantal Thuisbezorgd-bestellingen per dag gaat mee in de melding aan het beheerportaal (verkoopTelling in lib/portaal.ts): binnengekomen en niet geannuleerd, op de dag van binnenkomst. Een Thuisbezorgd-bestelling die in de kassa wordt afgerekend (ook Afronden (online betaald)) telt daar niet nog eens bij afhalen/bezorgen. De Thuisbezorgd-gegevens staan in de kassadatabase en gaan dus gewoon mee in de back-ups van de kassa.
Webshop en online bestellen
Elke zaak kan een eigen webshop krijgen: een bestelsite (en app) in de eigen huisstijl voor afhalen, bezorgen, bestellen aan tafel met een QR-code en reserveren, met online betalen (MultiSafepay of Buckaroo) of betalen bij afhalen/bezorgen. De webshop is een apart project, horecapos-webshop (Node.js, zie de README daar), en draait op dezelfde server als het beheerportaal.
Aanzetten en inrichten gebeurt in het webshopbeheer: knop Webshop beheren in het klantportaal (eigenaar) of bij de installatie in het beheerportaal (Pin Voordeel). Daar staan aan/uit, het webadres (<zaak>.<webshopdomein> of een eigen domein), huisstijl (kleuren, logo, kopfoto, lettertype), openingstijden en tijdvakken voor afhalen en bezorgen, bezorggebied (postcodes, straal of een gebied op de kaart, met kosten en minimum), betalen, kortingscodes, teksten, talen, QR-codes voor de tafels, reserveren en de app (installeerbaar als PWA; een Android-app via een Trusted Web Activity), en pushberichten (optioneel, standaard uit): de gast zet op de pagina van zijn bestelling een melding aan en krijgt een pushbericht als de bestelling klaar of onderweg is; wie dat wil krijgt ook af en toe een aanbieding, die de zaak in het webshopbeheer (tabblad Pushberichten) verstuurt. Werkt op Android en computers (Chrome, Edge, Firefox, Samsung Internet), in de Android-app, en op iPhone en iPad (iOS 16.4 of nieuwer) als de gast de webshop op het beginscherm zet. Er gaat geen sms of mail uit en er wordt geen naam of nummer bewaard. Details in de README van de webshop.
Menu. De kassa stuurt het menu vanzelf: alle actieve producten (niet per kilo), per productgroep, met prijs, keuzeopties, allergenen, uitverkocht en de productfoto, plus de tafels en de gegevens van de zaak, en welke marketingkanalen aan staan (voor het vinkje "aanbiedingen ontvangen" bij afrekenen, zie Sms- en e-mailmarketing). Dat gebeurt bij het starten, zodra de webshop aan gaat, binnen 30 seconden na een wijziging in de catalogus en binnen enkele seconden na een wijziging bij Instellingen → Zaak, zoals marketing of de klantenkaart (of met Menu nu sturen). Een product uit de webshop houden kan in het webshopbeheer (verbergen), of in de database met artikel.webshop = false.
Bestellingen. Afhalen en bezorgen worden een gewone bestelling zonder tafel (groepsnaam WEB <bestelnummer>) met de prijzen die de gast zag, plus bezorgkosten en transactiekosten als eigen regel en een kortingscode als kortingsregel; klopt het totaal toch niet, dan een regel "Verschil webshop". De fooi van de gast telt niet als omzet: die komt bij Afronden (online betaald) als fooi in de betaling. Bestellen aan tafel (QR-code) komt bij de open rekening van die tafel (online betaald: als eigen groep aan die tafel). De werkbon gaat meteen naar keuken/bar (uit te zetten in het venster Webshop). De kassa bevestigt binnen seconden met het bonnummer; de gast krijgt dan "ontvangen" en een mail. Is de kassa offline, dan neemt de webshop geen bestellingen aan (de gast ziet dat meteen) en mailt de zaak als een bestelling te lang blijft liggen. Reserveringen uit de webshop komen in Reserveringen (alleen als reserveren in de kassa aan staat). Staat er een maximum per tijdvak (Bezorgen en tijdvakken), dan tellen webshopbestellingen met een tijd daarin mee.
België (zwarte doos). Een webshopbestelling gaat meteen als bestelling (signOrder) naar de zwarte doos, vóór de werkbon, net als Bestellen aan de kassa. Lukt dat niet, dan komt hij niet in de kassa en stuurt de webshop hem later opnieuw. Wat nog niet getest is met de zwarte doos, staat in het menu voor de webshop uit (cadeaubonnen, kortingscodes, op rekening, op de kamer, menu's, keuzeopties met meerprijs, happy hour en fooi) en wordt geweigerd als een oude webshop het toch stuurt. Afronden controleert fooi, op rekening en op de kamer zoals de kassa.
Op de kamer (hotelkoppeling, Instellingen → Hotel → Zelfbediening → In de webshop): het menu krijgt kamer: { maxBedrag }; de webshop stuurt betaling.wijze = "kamer" met kamer en achternaam. De kassa controleert de gast bij de hotelsoftware (niet aan tafel, niet met een cadeaubon) en bewaart hem bij de bestelling; Afronden (op de kamer) rekent af op de kamer en boekt de bon op de hotelrekening. Verzamelfactuur bij op rekening: de bon staat dan als post open.
Knop Webshop in de bovenbalk (met aantal lopende bestellingen): lijst, klant en adres, gewenste tijd of "zo snel mogelijk", betaalwijze en de tijdlijn. De stappen In bereiding, Klaar en Onderweg ziet de gast live in de webshop (en per mail, als de zaak dat wil). Afgerekend in de kassa = Afgerond; Annuleren laat alleen de regels van die webshopbestelling vervallen, print een "GEANNULEERD"-werkbon, en een online betaalde bestelling betaalt de webshop terug. Aangekomen, no-show of geannuleerd bij een reservering gaat ook terug naar de webshop. Nieuwe bestelling of reservering geeft een oranje balk en een geluid.
Code: apps/pos-server/src/lib/webshop.ts, routes/webshop.ts; scherm Webshop.tsx. Portaalkant: horecapos-portaal/src/webshop.mjs.
Kassa en webshop gelijk (elk onderdeel apart aan te zetten, standaard uit; een oudere webshop negeert de nieuwe velden). Wat in de kassa aan staat, werkt ook in de webshop:
- Happy hour: de webshop rekent dezelfde prijs als de kassa op dat moment (doorgestreepte normale prijs en de naam van de happy hour), ook met een seizoen.
- Dagdelen en leverwijze (als ze aan staan): de webshop toont alleen wat nu te koop is, en bij afhalen en bezorgen de prijs en producten van die keuze (aan tafel: ter plaatse). Het menu krijgt per product
prijzen(afhalen,bezorgen) ennietBij, en de lijstdagdelen. - Menu's: de gast kiest de gerechten (vast en keuze, met hun opties); in de kassa komt het als menuregel met de gerechten eronder en de menuprijs verdeeld (btw per gerecht klopt). Gerechten die alleen in een menu horen gaan als
menuArtikelenmee. Een oude webshop zonder keuzes: het menu komt als gewoon product op de bon, zoals voorheen. - Voorraad op = uitverkocht, ook keuzeopties met een ingrediënt dat op is.
- Allergenen: uit in de kassa = niet in de webshop.
- Klantenkaart: de gast kan bij afrekenen meesparen (op telefoonnummer of e-mail); de kassa koppelt de klant aan de bestelling, de punten komen er bij het afrekenen bij (inwisselen gebeurt in de zaak). De webshop toont het saldo.
- Cadeaubonnen (Instellingen → Zaak → Cadeaubonnen → Cadeaubonnen verkopen in de webshop, alleen met saldo): de gast koopt een bon en betaalt online; de kassa maakt de bon, die meteen actief is, en de code gaat via het portaal terug naar de webshop (status en mail). Staat ook Cadeaubon als betaalwijze aan, dan kan de gast bij afhalen kiezen voor "met een cadeaubon in de zaak".
- Kortingscodes (Instellingen → Kortingscodes, met de schakelaar bij Zaak): per code aan de kassa en/of in de webshop; het gebruik telt voor beide samen.
- Pauze en druk: knop Webshop in de bovenbalk: Webshop pauzeren (met een tekst voor de gast) en Druk (extra minuten). Gaat binnen enkele seconden naar de webshop.
- Online reserveren met de regels van de kassa (Instellingen → Zaak → Reserveringen): hooguit personen, dagen vooruit, tijdslot, minimaal vooraf en de tijden per weekdag.
- Bezorgen en tijdvakken: zie De webshop volgt de kassa bij Bezorgen en tijdvakken.
- All-you-can-eat aan tafel (Instellingen → Zaak → All-you-can-eat → Ook bij bestellen aan tafel via de QR-code): loopt er aan de tafel een arrangement, dan ziet de gast de gerechten die erbij horen als Inbegrepen voor € 0, met de rondes, het maximum per persoon, de wachttijd en de tijdslimiet. De rest betaalt hij gewoon; alles komt op de rekening van de tafel. Is de stand aan tafel net veranderd, dan weigert de kassa de bestelling en bestelt de gast opnieuw.
- Op rekening (Instellingen → Facturen → Betalen op rekening → Ook in de webshop): zie In de webshop bij Betalen op rekening.
- Online op de wachtlijst (Instellingen → Zaak → Wachtlijst): zie Online op de wachtlijst bij Wachtlijst voor walk-ins.
- Upsell: "Ook iets erbij?" (optioneel, standaard uit; Instellingen → Zaak → Afrekenen → Upsell in de webshop): kies de productgroepen (bv. drankjes, sauzen, desserts) en hoeveel suggesties. In de webshop staan dan bij het mandje en bij het afrekenen producten uit die groepen die nog niet in het mandje zitten (alleen wat nu te koop is, niet uitverkocht en zonder verplichte keuzes); de gast voegt ze met één tik toe. Geen groepen gekozen = uit, zoals voorheen. De kiosk heeft een eigen upsell (zie Kiosk voor zelfbediening).
Het menu voor de webshop heeft daarvoor versie: 2 met de velden menuArtikelen, allergenenAan, happyhours, menus, klantenkaart, cadeaubon, kortingscodes, pauze, drukteMin, volgt, bezetting, reserveren.online, ayce, opRekening, wachtlijst en upsell. De bevestiging aan het portaal heeft daarnaast cadeaubonnen (codes), klant (punten) en plek (wachtlijst).
Telling in het beheerportaal. Afhalen en bezorgen via de webshop tellen apart (webshop, webshopGeannuleerd in verkoopTelling), op de dag van binnenkomst, en niet nog eens bij afhalen/bezorgen. Bestellen aan tafel telt gewoon bij tafel.
Pinnen en betaalautomaten
Instellingen → Betalen (alleen beheerder):
- Terminals: per terminal een naam, het terminal-ID en de eigen API-sleutel uit PinPortal (Klant → Bewerk klant → Overige → API Keys). Na opslaan is van de sleutel alleen nog het einde zichtbaar; hij gaat nooit terug naar de browser. Met Verbinding testen controleer je sleutel en terminal.
- Testmodus: bootst een terminal na (na ±7 s geslaagd; een bedrag dat op 13 cent eindigt wordt geweigerd). Handig om zonder betaalautomaat te testen.
Is er minstens één terminal met API-sleutel (of staat testmodus aan), dan start Afrekenen → Pin / Bancontact de betaling automatisch op de terminal, voor het bedrag dat de server uitrekent.
Zolang de koppeling aan staat, accepteert de server "pin" alleen met een geslaagde terminalbetaling voor precies die bestelling en dat bedrag. De verzoeken gaan net als in de officiële PHP-SDK als gewoon formulier, met de reserve-API (api-backup.pinvandaag.com) als de hoofd-API niet reageert. Elk antwoord van de API staat met [pin] in het servervenster, handig bij storingen. Een geslaagde betaling die nog niet verwerkt is (bv. tablet uitgevallen), wordt bij het volgende afrekenen van die bestelling teruggevonden.
Fooi (pin, contant en cadeaubon)
In het afrekenscherm staat bij elke betaalwijze een rij fooiknoppen: Geen, 5%, 10%, 15% (naar boven afgerond op 10 cent), Afronden (naar de volgende hele euro) en Ander bedrag. Bij pin betaalt de klant bedrag + fooi in één keer op de terminal; bij contant telt de fooi mee in het wisselgeld en in de kassalade. Op de bon staat het gepinde bedrag met "waarvan fooi" eronder; het TOTAAL en de btw blijven gelijk, want fooi is geen omzet. In het X/Z-rapport staat de fooi per betaalwijze en als "Fooi totaal".
De beheerder stelt de fooiknoppen in bij Instellingen → Zaak → Fooi: aan/uit, welke percentages (hooguit 4, bv. "5, 10, 15"), of de knop "Afronden" erbij staat en bij welke betaalwijzen (pin, contant, cadeaubon) fooi kan. "Geen" en "Ander bedrag" staan er altijd bij.
"Maak er maar … van" staat er altijd, bij elke betaalwijze, ook als de fooiknoppen uit staan (geen instelling): de klant rondt de rekening zelf naar boven af en het verschil is fooi. Er staan knoppen met de volgende hele euro en de volgende ronde bedragen (bv. € 28,00 → 29, 30, 40; € 44,00 → 45, 50, 60) en Ander totaal om zelf het totaal in te typen. Nog eens op de gekozen knop tikken = niet afronden. Hooguit € 500 fooi (zelfde grens als de kassaserver).
Geen internet
De kassa werkt in het lokale netwerk en heeft geen internet nodig; alleen pinnen via de koppeling wel. Heeft de zaak geen internet, dan staat in de bovenbalk Geen internet · pin handmatig (elke minuut gecontroleerd). In het afrekenscherm verschijnt dan, en ook na een mislukte start op de terminal, de knop Al gepind op de terminal: pin het bedrag op de terminal zelf en leg het zo vast.
Plattegronden en tafels
Instellingen → Plattegronden (alleen beheerder):
- Plattegronden toevoegen (bv. Zaal, Terras, Serre), hernoemen, verwijderen en van volgorde wisselen met ◀ ▶.
- Tafels toevoegen met de knoppen boven het raster (rond, vierkant, lang, statafel) en ze met de muis of vinger naar hun plek slepen. Het blauwe hoekje van een gekozen tafel maakt hem groter of kleiner.
- Per tafel naam/nummer, aantal personen (de stoeltjes rond de tafel tellen mee) en vorm instellen; dupliceren of verwijderen.
- Met toetsenbord: pijltjes verschuiven (Shift = grotere stap), Delete verwijdert.
- Wijzigingen gelden pas na Opslaan; "Ongedaan maken" zet alles terug.
- Een tafel of plattegrond met een open bestelling kan niet weg. Verwijderde tafels blijven in oude bestellingen bewaard.
Configuratie overzetten naar een tweede zaak
Instellingen → In-/export (alleen de beheerder). Heb je één zaak helemaal ingericht, exporteer dan de configuratie naar een .json-bestand en importeer dat in de kassa van de tweede zaak. Per onderdeel te kiezen:
- Producten: groepen, producten, prijzen (ook per leverwijze), btw, keuzeopties, menu's, happy hours (met seizoen), dagdelen, allergenen, ingrediënten/recepten, stempelkaarten, de all-you-can-eat-arrangementen en de productfoto's.
- Plattegronden: ruimtes en tafels.
- Overige instellingen: alle opties van de zaak, printers (zonder IP-adres), rechten per rol en boekhouding.
Gaan nooit mee: naam, adres, postcode, plaats, telefoon, e-mail, btw-nummer en bon-afsluitregel van de zaak, het e-mailadres voor het Z-rapport, pinterminals en hun sleutels, personeel en pincodes, en alle omzet, bonnen, klanten en voorraadaantallen.
Importeren is zwaar beveiligd: een grote rode waarschuwing, een vinkje "Ik begrijp...", opnieuw de eigen pincode van de beheerder, geen open bestellingen, hetzelfde land (btw-tarieven) en vooraf automatisch een back-up. De import gebeurt in één transactie: gaat er iets mis, dan verandert er niets. Bestaande producten, groepen, ingrediënten en tafels worden niet gewist maar uit de kassa gehaald (zoals bij Verwijderen), zodat oude bonnen en rapporten blijven kloppen.
Importeren uit een andere kassa
Overstappen zonder alles over te typen. Altijd beschikbaar (zonder schakelaar): bij Instellingen → In-/export (alleen de beheerder) staat het onderdeel Importeren uit een andere kassa.
- Wat: producten (naam, prijs incl. btw, btw, groep, code/PLU, voorraad) of klanten van de klantenkaart (naam, telefoon, e-mail, punten, adres, postcode, plaats; voornaam en achternaam worden samengevoegd).
- Bestand: een export van je vorige kassa (Dobizzz/DoPos, Lightspeed, MplusKASSA, unTill, Tebi ...) of een eigen lijst: CSV (; , tab of |; UTF-8 of Excel-Nederlands) of Excel (.xlsx), het eerste blad, met de kolomnamen op de eerste regel. Een oud .xls-bestand eerst opslaan als .xlsx of CSV.
- Voorbeeld: de kassa herkent de kolommen aan hun naam (Omschrijving, Verkoopprijs incl. BTW, BTW %, Omzetgroep, Artikelnummer, GSM, Spaarpunten ...) en toont de eerste 10 regels. Klopt een kolom niet, kies dan zelf. Er verandert pas iets bij Importeren.
- Producten: prijzen als 3,50, € 3,50 of 1.234,50; btw als 21, 9%, 0,09, hoog of laag (onbekend of leeg: het tarief dat je kiest, standaard het hoogste). Productgroepen die nog niet bestaan worden gemaakt (zonder groep: "Geïmporteerd").
- Voorraad (kolom Voorraad, Stock, Aantal ...): staat Voorraad bijhouden aan (Instellingen → Zaak), dan houdt het product voorraad bij en wordt de voorraad dat aantal (een telling in de voorraadgeschiedenis, reden "Geïmporteerd"). Leeg: de voorraad blijft zoals hij is.
- Voorbeeldbestand (CSV): een lijstje om zelf in te vullen (Naam;Productgroep;Prijs;Btw;Voorraad;Code), bijvoorbeeld in Excel.
- Klanten: punten komen erbij als correctie "Geïmporteerd uit een andere kassa" (zichtbaar in de historie). Toestemming voor sms of e-mail gaat niet mee (AVG): die vraag je opnieuw. Zet eerst de klantenkaart aan.
- Bestaande producten (zelfde code, of zonder code zelfde naam) en klanten (zelfde telefoon of e-mail) worden overgeslagen, of bijgewerkt als je dat aanvinkt (bij producten naam, prijs, btw, groep en voorraad). Dubbele regels in het bestand worden één keer genomen.
- Na afloop: hoeveel nieuw, bijgewerkt en overgeslagen, met per regel wat er niet klopte (bv. geen prijs). Hooguit 5000 regels per keer. In het logboek staat het als "Configuratie geïmporteerd".
Talen (42, o.a. Turks, Arabisch, Darija, Berbers, Pools, Bulgaars, Hongaars, Russisch, Servisch, Albanees, Perzisch, Tigrinya, Amhaars, Somalisch, Papiaments, Sranantongo, Hindi, Urdu, Indonesisch, Vietnamees, Syrisch-Aramees, Chinees en Oekraïens)
Naast het ©-knopje rechtsonder staat op elk scherm een knopje met de taal (bv. NL en het vlaggetje). Tik erop voor het keuzemenu: de talen staan op alfabetische volgorde, met de naam in de eigen taal vóór de vlag: Bahasa Indonesia (Indonesisch), Čeština (Tsjechisch), Darija (Marokkaans Arabisch in Latijns schrift), Deutsch, English, Español, Français, Hrvatski (Kroatisch), Italiano, Kurdî (Kurmancî), Latviešu (Lets), Lietuvių (Litouws), Magyar (Hongaars), Nederlands, Papiamentu (Papiaments), Polski, Português, Română, Shqip (Albanees), Slovenčina (Slowaaks), Soomaali (Somalisch), Sranantongo, Srpski (Servisch, in Latijns schrift), Tarifit (Riffijns-Berbers), Tiếng Việt (Vietnamees), Türkçe, dan in Cyrillisch schrift Български (Bulgaars), Русский (Russisch) en Українська (Oekraïens), daarna de talen in Arabisch schrift: اردو (Urdu), الدارجة (Darija), العربية (Arabisch), دری (Dari), فارسی (Perzisch, Farsi), پښتو (Pashto) en کوردی (سۆرانی) (Koerdisch Soranî), dan in Syrisch schrift ܣܘܪܝܝܐ (Syrisch-Aramees, Suryoyo), in Devanagari हिन्दी (Hindi), in Ge'ez-schrift ትግርኛ (Tigrinya) en አማርኛ (Amhaars), in Tifinagh ⵜⴰⵎⴰⵣⵉⵖⵜ (Tamazight, Berbers), en als laatste 中文(简体)(Chinees, vereenvoudigd schrift). Alle schermen, knoppen, meldingen en foutmeldingen van de kassaserver worden vertaald.
- Per medewerker: de gekozen taal wordt bij de aangemelde medewerker bewaard (
gebruiker.taal). Meldt iemand zich aan met een andere taal, dan schakelt de kassa meteen om. Op het apparaat zelf wordt de laatst gebruikte taal onthouden, zodat ook het pincodescherm al in die taal staat. Kies je een taal (op het pincodescherm of aangemeld) en meld je je binnen 10 minuten (opnieuw) aan, dan gaat die keuze voor en wordt hij de taal van die medewerker. Wisselen laadt het scherm opnieuw; je blijft aangemeld en de open rekening blijft open. - Eerste keer op een apparaat: staat er op een tablet of pc nog geen taal, dan start de kassa in de taal die bij het installeren is gekozen. Is er geen taal gekozen, dan de taal van het apparaat zelf (browser of besturingssysteem, ook in de Android-app), en als die er niet bij zit in het Nederlands. Daarna onthoudt elk apparaat zijn eigen keuze.
- Oost-Europa: Pools, Tsjechisch, Slowaaks, Hongaars, Roemeens, Bulgaars, Kroatisch (ook voor Bosnisch), Litouws, Lets, Oekraïens en Russisch: de talen van de meeste arbeidsmigranten uit Midden- en Oost-Europa in Nederland en België.
- Balkan: Servisch (in Latijns schrift, zoals de meeste Serviërs in Nederland en België het schrijven; ook voor Montenegrijns) en Albanees (Albanië, Kosovo en Noord-Macedonië).
- Hoorn van Afrika: Tigrinya (Eritrea) en Amhaars (Ethiopië), allebei in Ge'ez-schrift, en Somalisch (in Latijns schrift).
- Iran: Perzisch (Farsi). Een apparaat in het Perzisch van Afghanistan (fa-AF) krijgt Dari, de rest Farsi.
- Caribisch Nederland en Suriname: Papiaments (Papiamentu, spelling van Curaçao en Bonaire; ook voor Aruba) en Sranantongo.
- Azië: Hindi (Devanagari; ook voor Sarnami Hindustani), Urdu (van rechts naar links), Indonesisch en Vietnamees (Latijns schrift, ook op de bon).
- Marokkaans: Darija (Marokkaans Arabisch, de spreektaal) in Arabisch én in Latijns schrift (zoals veel Marokkaanse Nederlanders het appen), naast het standaard Arabisch. Berbers: Tarifit (Riffijns, in Latijns schrift; de meeste Marokkaanse Nederlanders komen uit de Rif) en Standaard-Marokkaans Tamazight in Tifinagh-schrift.
- Van rechts naar links: Arabisch (standaard Arabisch), Urdu, Darija in Arabisch schrift, Dari en Pashto (Afghanistan), Perzisch (Farsi, Iran), Koerdisch Soranî (Irak/Iran) en Syrisch-Aramees (Suryoyo, in Syrisch schrift). Bedragen, codes en de cijfertoetsen blijven van links naar rechts. Koerdisch Kurmancî (Turkije/Syrië) staat in Latijns schrift.
- Werkbon (keuken/bar): standaard in de taal van de medewerker die de bestelling doorgeeft. Per printer kan bij Instellingen → Printers → Taal van de werkbon ook een vaste taal (bv. die van de kok), in Latijns schrift: Nederlands, Čeština, Darija, Deutsch, English, Español, Français, Hrvatski, Italiano, Kurdî, Latviešu, Lietuvių, Magyar, Papiamentu, Polski, Português, Română, Shqip, Slovenčina, Soomaali, Sranantongo, Srpski, Tarifit, Tiếng Việt, Bahasa Indonesia of Türkçe. Bulgaars, Russisch en Oekraïens komen op de werkbon in Latijnse transcriptie (de bonprinter kent geen Cyrillisch). Arabisch, Syrisch, Devanagari-, Ge'ez- en Tifinagh-schrift en Chinees kunnen niet op een bonprinter: dan komt Darija in Latijns schrift, Tamazight als Tarifit en de rest in het Nederlands. De vaste teksten (TAFEL, Gang, WACHT op afroep, AFROEP GANG, LATER GEPRINT, Afhalen, Balie) worden vertaald; productnamen en opmerkingen blijven zoals ze zijn ingevoerd. Printers die op Nederlands stonden, volgen de medewerker.
- Kassabon (voor alle klanten): standaard Nederlands, los van de taal van de schermen. Een andere taal kies je bij Instellingen → Zaak → Taal van de kassabon (net onder de tekst onderaan de bon), alleen talen in Latijns schrift. Dat geldt ook voor pro forma, retourbon, kopie, cadeaubon en de bon per e-mail. De bedragen, btw-codes, het btw-nummer van de zaak en de fiscale regels (België) blijven gelijk; een eigen tekst onderaan de bon blijft zoals de zaak hem typt.
- Producten, groepen en opties heten zoals de zaak ze invoert; die worden niet vertaald.
- De taal per medewerker stel je ook in bij Instellingen → Personeel.
- Introductie en handleiding staan ook in al deze talen. Via het ©-knopje openen ze in de taal van de kassa; bovenin kies je met de vlaggen een andere taal (dat verandert niets in de kassa).
Voor ontwikkelaars: elke zichtbare tekst staat in de code als vt('Nederlandse tekst') (apps/pos-web/lib/i18n.ts); de Nederlandse tekst is de sleutel. De vertalingen staan in apps/pos-web/lib/vertalingen/<taal>.ts. Ontbreekt een vertaling, dan toont de kassa het Nederlands; de test i18n (pos-web) controleert dat elke tekst in elke taal vertaald is en dat {0}-plekken kloppen. Meldingen van de kassaserver blijven Nederlands en worden in de browser vertaald (ook met {0}, bv. een productnaam in de melding).
Printers instellen
Een nieuwe kassa heeft geen printers. Meld je aan als beheerder (demo: 1111) en kies Instellingen in de bovenbalk.
- Printers: zoveel printers toevoegen als de zaak heeft (bv. kassa, keuken, bar, pizza), elk met een verbinding (meestal het netwerk: IP-adres en poort 9100) en papierbreedte. Met Testbon controleer je of hij werkt. Bovenaan kies je welke printer de kassabon en pro forma print (en de kassalade opent). Per printer kies je ook de taal van de werkbon (zie Talen); de kassabon blijft Nederlands.
- Verbinding per printer:
- Netwerk (IP-adres): IP-adres en poort (meestal 9100). Zo werkte het altijd, en zo blijft het werken: bestaande printers staan vanzelf op netwerk.
- USB: op Linux het apparaat, bijvoorbeeld
/dev/usb/lp0. Op Android de USB-printer aan het apparaat (OTG-kabel; leeg = de eerste USB-printer). Op Windows en macOS kies je Printer van het systeem. - Serieel (COM / ttyUSB): een COM-poort (Windows),
/dev/ttyUSB0of/dev/ttyS0(Linux, Android) of/dev/cu.…(macOS), met de snelheid (meestal 9600, 19200 of 38400 baud). Ook voor een Bluetooth-printer die Windows of Linux als COM-poort of/dev/rfcomm0koppelt. - Bluetooth: in de HorecaPOS-app op Android, met het Bluetooth-adres van de gekoppelde printer (bv. een mobiele bonprinter). Koppel de printer eerst in de Bluetooth-instellingen van Android.
- Printer van het systeem (Windows / CUPS): de printer zoals Windows of CUPS (Linux, macOS) hem kent, met zijn eigen stuurprogramma of als Generic / Text Only. De bon gaat ruw (RAW) naar de printer, zonder opmaak door het stuurprogramma.
- Ingebouwd (Sunmi, iMin ...): de printer in een Android-kassa zelf.
- Zoeken toont de printers en poorten die de kassa ziet. Kies er een en het adres staat ingevuld.
- Protocol: ESC/POS (bijna alle bonprinters, ook Star-printers in ESC/POS-modus) of Star (Star Line Mode). Bij Star zet de kassa de bon zelf om; de bon ziet er hetzelfde uit.
- Bedienscherm met een eigen printer: een Android-bedienscherm met de HorecaPOS-app (bv. een handterminal met een mobiele Bluetooth-printer, of een Sunmi als bedienscherm) kan zelf printen. Meld het aan op het apparaat zelf (Instellingen → Printers → Bedienschermen met een eigen printer) en kies bij de printer Aangesloten op. Het bedienscherm haalt zijn bonnen op bij de kassa; laat de app daar open. Lukt het niet (app dicht, buiten bereik van de wifi), dan gaat een werkbon in de printwachtrij, net als bij een netwerkprinter die uit staat. Apparaat afmelden zet de printers weer op de kassa zelf.
- Printer per groep / product: per artikelgroep kiezen op welke printer de werkbon komt. Per product kun je dat overschrijven met een eigen printer of "geen werkbon".
Gelijke producten worden bij het printen samengevoegd: twee keer 1x Cola wordt 2x Cola, op de werkbon en op de kassabon. Alleen producten met dezelfde opties en opmerking gaan samen.
De Linux-installer zet de gebruiker van de kassa in de groepen lp en dialout, zodat de kassa USB- en seriële printers mag gebruiken.
Hulp nodig?
Optimum POS · 085 560 00 60 · support@optimumpos.nl · ma–vr 9:00–20:00, za–zo 14:00–20:00