HorecaPOSHandleiding Introductie Naar de kassa
NL

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.

Aanmelden met pincode

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.

Tafelplattegrond

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.

Afrekenen

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.

Rekening splitsen bij afrekenen

Afrekenscherm

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

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)

Tafelplattegrond met Snelle verkoop en Afhalen

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

Uitbreidingen (alles standaard uit, zonder deze instellingen werkt het precies zoals hierboven):

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:

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

BronVoorInstellen
Webhook / action URL3CX (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 UCMadres, poort (5038; Grandstream UCM 7777), AMI-gebruiker en wachtwoord (rechten call)
FRITZ!BoxFRITZ!Box met telefonieadres (fritz.box) en poort 1012; callmonitor één keer aanzetten met #96*5*
USB-caller-ID-modemanaloge vaste lijn met nummerweergaveseriële poort (COM3, /dev/ttyACM0), baud en init-opdracht (standaard AT+VCID=1)
Android-telefoonde ingebouwde telefoon van een Android-telefoon van de zaakHorecaPOS-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).

  1. 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).
  2. Kies de bezorger (een medewerker) en het wisselgeld dat meegaat (standaard het bedrag uit de instelling), en tik Rit maken.
  3. 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.
  4. 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.

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

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:

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:

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:

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:

  1. Kies bij Gekoppelde telefoons de bezorger (een medewerker), eventueel de naam van de telefoon, en tik Telefoon koppelen.
  2. 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.
  3. 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:

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

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:

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:

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.

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.

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:

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:

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.

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:

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:

Cadeaubonnen

Twee schakelaars bij Instellingen → Zaak → Cadeaubonnen:

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

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.

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

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:

Bij het bestellen (bestelscherm, voor wat je daarna aantikt):

Bij het afrekenen:

Achteraf (Bonnen):

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.

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

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.

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

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.

Gastprofiel: VIP, dieetwensen en voorkeuren (optioneel)

Aanzetten bij Instellingen → Zaak → Gastprofiel, onder de klantenkaart (standaard uit; werkt alleen als de klantenkaart aan staat). Daarna:

Favorieten / snelknoppen

Standaard uit. Instellingen → Zaak → Favorieten / snelknoppen:

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

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:

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

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

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

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.

De beheerder voegt de bronnen toe met + Muziekbron, kiest hoe die gekoppeld is en test hem met Testen:

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.

  1. Zet de tablet of telefoon op het wifi-netwerk van de zaak.
  2. Scan de QR-code met de camera (of typ het adres in de browser).
  3. Meld aan met je eigen pincode. Je ziet alleen wat je mag: de muziek iedereen, de camera's alleen met het recht Camerabeelden bekijken.
  4. 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).

  1. 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.
  2. 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).
  3. 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:

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

In de kassa staat de knop Oproepen (met het aantal dat nog wordt bereid):

  1. 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.
  2. Terug zet het weer bij Wordt bereid.
  3. 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:

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:

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.

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.

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.

Het ©-knopje

OptimumPOS-gegevens

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:

Voorraad

Standaard uit. Aanzetten via Instellingen → Zaak → Voorraad bijhouden. Uit = nergens in de kassa te zien.

Bestellen bij leveranciers

Standaard uit. Aanzetten bij Instellingen → Voorraad → Bestellen bij leveranciers (alleen met Voorraad bijhouden aan). Uit = de bestellijst werkt zoals altijd.

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.

Sms- en e-mailmarketing

Berichten naar klanten van de klantenkaart die daar toestemming voor gaven. Zonder klantenkaart kan geen van beide aan.

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:

KeuzeVerdeling
Uit (standaard)alleen het fooitotaal, zoals altijd
Ieder eigen fooifooi van de rekeningen die iemand zelf heeft afgerekend
Pot naar urenalle fooi samen, naar ingeklokte uren in die periode (vraagt In- en uitklokken; niemand geklokt = gelijk)
Pot gelijkalle 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.

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

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:

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

Kortingen

Een manager of beheerder ziet in het bestelscherm naast het totaal de knop % Korting:

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

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

Rapport - tussenstand (X)

Knop Rapport in de bovenbalk:

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

KantWat
Debetontvangsten per betaalwijze (contant, pin, cadeaubon, online, overig), incl. fooi
Creditomzet per btw-tarief (excl. btw) en af te dragen btw per tarief
Creditfooi (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:

FormaatBestandInlezen in het pakket
Algemeen (CSV)journaal_…csvelk pakket met een CSV-/memoriaalimport (kolommen koppelen)
UBL 2.1 / Peppol (XML), NL en BEjournaal_…_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), NLjournaal_…_xaf.xafauditfile 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), NLjournaal_…_accountview.xmlXML-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.xmlXML 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), NLjournaal_…_asperion.csvFMUTA-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 BEjournaal_…_dagstaat.htmlleesbare 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.csvDatum; 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.xmleExact-XML (onderwerp GLTransactions): per dag een memoriaalboeking (type 90) in het dagboek; Import/export → XML importeren
InformerOnline (TXT), NLjournaal_…_informer.txttab-gescheiden memoriaal (Geavanceerd → Memoriaal → uploaden); dagboek moet een nummer 1–99 zijn (anders 90)
KING ERP (XML), NLjournaal_…_king.xmlKING_JOURNAAL: één boekingsgang (niet definitief) met per dag een journaalpost
KOMAS (CSV), NLjournaal_…_komas.csvKOMAS vrij formaat (0401 Importeren journaalposten): Datum; Grootboek; Omschrijving; Bedrag
Odoo (CSV), NL en BEjournaal_…_odoo.csvBoekhouding → Journal Entries → Import records; dagboek en rekening op naam of code
Sage BOB 50 (Excel), BEjournaal_…_bob.xlsxImportation de données externes → Opérations diverses (kolommen één keer koppelen)
SAP Business One (ZIP), NL en BEjournaal_…_sapb1.zipData Transfer Workbench, Journal Entries: JournalEntries.csv en JournalEntries_Lines.csv
SnelStart (CSV)journaal_…_snelstart.csvDatum; Boekstuk; Omschrijving; Grootboekrekening; Debet; Credit (dd-mm-jjjj, komma, zonder BOM); memoriaal importeren, dagboek kies je bij het inlezen
Twinfield (XML)journaal_…_twinfield.xmldagboektransacties als concept (destiny="temporary"), de boekhouder zet ze definitief; vul de administratiecode in (leeg = de administratie waarin je importeert)
Winbooks (CSV), BEjournaal_…_winbooks.csvK_DOC.CSV, per dag één document in het dagboek (Winbooks nummert zelf)
Yuki (XML)journaal_…_yuki.xmlJournal-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.

PakketNLBELiveBestandOpmerking
MKB en zzp
Accountable–✓–Dagstaat (HTML, voor PDF of mail)
AccountView (Visma)✓–op aanvraagAccountView (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 aanvraagAsperion (CSV)Live na aanmelding als API-partner bij Asperion.
Billit–✓op aanvraagUBL 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 aanvraagKING 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 aanvraagXML 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 aanvraagWinbooks (CSV)
Wolters Kluwer Adsolut–✓op aanvraagUBL 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 CSVGeen 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 aanvraagalgemene 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 aanvraagUBL 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.

PakketLandVerbinden metWat de kassa boekt
AcumulusNLcontractcode, gebruiker en wachtwoord van een API-gebruikerper dag een betaalde verkoopfactuur met een regel per btw-tarief; fouten mailt Acumulus naar ACUMULUS_FOUTMAIL
AFAS ProfitNLomgeving, token, administratiememoriaal (FiEntries)
Business CentralNL, BEtenant, 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 OnlineNL, BEinloggen (OAuth, eigen app: zie Exact Online hieronder; België: start.exactonline.be)memoriaalboeking in het dagboek (bv. 90)
HorusBEinloggen (OAuth, app hieronder), optioneel dossierdiverse verrichting
MoneybirdNLAPI-token, optioneel administratiememoriaal (general journal document)
OdooNL, BEadres, database, gebruiker, API-sleuteljournaalpost in het dagboek met de korte code (bv. MISC)
QuickBooks OnlineNL, BEinloggen (OAuth, app hieronder; QUICKBOOKS_OMGEVING)journal entry; rekeningen op nummer
SAP Business OneNL, BEadres van de Service Layer, database, gebruiker, wachtwoordjournaalpost (JournalEntries)
SilvasoftNL, BEgebruiker en API-sleutelverkoopboeking aan de relatie Kassaverkopen, een regel per btw-tarief (betaalwijzen, fooi en kasverschil gaan niet mee)
SnelStartNLkoppelsleutel en abonnementssleutelmemoriaal
TwinfieldNLinloggen (OAuth, app hieronder), optioneel kantoordagboektransactie
XeroNL, BEinloggen (OAuth, app hieronder), optioneel organisatiemanual journal; rekeningen op code
YukiNL, BEAPI-sleutel, optioneel administratiememoriaal (GeneralJournal)
Zoho BooksNL, BEinloggen (OAuth, app hieronder; standaard het Europese datacenter), optioneel organisatiejournaalpost; rekeningen op code

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

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

Bank: overboekingen afboeken

Bij Rapport → Op rekening → Bank zoekt de kassa bij elke bijschrijving de factuur op rekening erbij:

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:

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.

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:

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

Elk signaal komt één keer (per regel, medewerker en dag; de keukentijd hooguit één keer per uur) en gaat naar:

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)

Bonnen

Knop Bonnen in de bovenbalk:

Kassalade met sensor en lade per medewerker

Standaard uit. Instellen bij Instellingen → Betalen → Kassalade.

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.

Instellingen: producten

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.

Instellingen: back-ups

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:

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?

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:

  1. 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.
  2. Tik op Verbinding testen: je ziet het programma en de versie, of waarom het niet lukt.
  3. 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:

  1. De kassa neemt even geen verzoeken aan (meestal minder dan een minuut); tablets gaan daarna vanzelf verder.
  2. Eerst maakt de kassa een back-up van de huidige stand (bij Instellingen → Back-ups).
  3. Alles gaat naar de nieuwe database en de kassa telt per tabel of alles er precies in staat.
  4. 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

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:

Aansluiten, op twee manieren (allebei op het apparaat zelf in te stellen):

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.

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

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.

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.

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.

Standaard uit. Aanzetten via Instellingen → Zaak → Menu's gebruiken.

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

  1. 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.
  2. 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).
  3. 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).
  4. 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).

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.

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

  1. API-id en API-sleutel (X-Api-Id en X-Api-Key, of Authorization: Bearer <id>:<sleutel>);
  2. API-sleutel en API-secret met een handtekening: X-Api-Key, X-Timestamp en X-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.

Melding bij een nieuwe versie

Aanzetten bij Instellingen → Zaak → Updatemelding (standaard uit).

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.

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.

Reviews vragen: na het bezoek één mail met een knop naar Google en/of Trustpilot.

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.

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.

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:

PakketNLBELiveBestandOpmerking
Salarissoftware en salarisverwerkers
ADP✓✓op aanvraagUrenlijst per medewerker en dag (CSV)Koppeling via ADP (op aanvraag); tot dan de urenlijst per medewerker en dag.
AFAS Payroll✓–op aanvraagUrenlijst 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 aanvraagUrenlijst per medewerker en dag (CSV)Koppeling via BCS (op aanvraag); tot dan de urenlijst.
Buddee✓–op aanvraagUrenlijst per medewerker en dag (CSV)HR- en salarissoftware; koppeling op aanvraag, tot dan de urenlijst per medewerker en dag.
Employes✓–op aanvraagUrenlijst 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 aanvraagUrenlijst 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 aanvraagUrenlijst per medewerker en dag (CSV)Koppeling via Humanwave (op aanvraag); tot dan de urenlijst.
Loket.nl✓–op aanvraagLoket.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 aanvraagUrenlijst 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 aanvraagUrenlijst per medewerker en dag (CSV)Sociaal secretariaat: de indeling van het prestatiebestand krijg je van Acerta; tot dan de urenlijst.
Group S–✓op aanvraagUrenlijst per medewerker en dag (CSV)Sociaal secretariaat: de indeling van het prestatiebestand krijg je van Group S; tot dan de urenlijst.
Liantis–✓op aanvraagUrenlijst per medewerker en dag (CSV)Sociaal secretariaat met een API die Liantis per bedrijf vrijgeeft; tot dan de urenlijst.
Partena Professional–✓op aanvraagUrenlijst 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 aanvraagUrenlijst per medewerker en dag (CSV)Sociaal secretariaat: koppelingen lopen via partners; tot dan de urenlijst.
Planning en urenregistratie
Book'u–✓op aanvraagOmzet 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 aanvraagOmzet per dag en uur (CSV)Eitje koppelt via zijn partnerprogramma; tot dan de omzetlijst per dag en uur.
Exact Horeko✓–op aanvraagOmzet per dag en uur (CSV)Koppeling via Horeko (op aanvraag); tot dan de omzetlijst.
Fooks✓–op aanvraagOmzet per dag en uur (CSV)Fooks bouwt kassakoppelingen zelf; tot dan de omzetlijst per dag en uur.
L1NDA✓–op aanvraagOmzet per dag en uur (CSV)L1NDA bouwt kassakoppelingen samen met partners; tot dan de omzetlijst per dag en uur.
Mr. Einstein✓–op aanvraagOmzet 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 aanvraagOmzet 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 aanvraagOmzet per dag en uur (CSV)Plan-Me doet de Dimona-aangiften; een kassakoppeling gaat op aanvraag. Tot dan de omzetlijst.
Planday✓✓op aanvraagOmzet 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 aanvraagOmzet 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 aanvraagOmzet 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 aanvraagOmzet 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):

LandEisHorecaPOS
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 onderexport 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
NederlandAlcoholwet: 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
NederlandWegwerpbekers en -bakjes (SUP): sinds 2024 een aparte, zichtbare prijs voor plastic wegwerpverpakking bij afhalen en bezorgenWegwerptoeslag per product, als aparte regel op de bon (btw van het product) en apart in de omzet
NederlandStatiegeld op blik en plastic flesjesStatiegeld per product (€ 0,15 / € 0,25), aparte regel zonder btw bij afhalen en bezorgen, apart in de omzet
NederlandContant betalen: sinds 1 januari 2026 geen € 3.000 of meer contant voor goederenWaarschuwing 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-percentageBtw-wijziging plannen: de kassa voert hem op de dag zelf uit (in België per product, de letters A/B/C/D liggen vast)
NederlandLogies (overnachtingen) 21% sinds 1 januari 2026btw-tarief per product instelbaar
EUOmnibus-richtlijn: een doorgestreepte "van"-prijs mag alleen de laagste prijs van de afgelopen 30 dagen zijnde 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)
EUEuropean 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)
NederlandXML Auditfile Financieel (XAF): de standaard van de Belastingdienst om een (deel van de) administratie over te dragen; XAF 4.0 is verplicht vanaf 2027export als XAF 4.0 (Export boekhouding)
NederlandBetrouwbaar 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) aanexport 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 kassasysteemIn- 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 RSZdat 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)
NederlandRegistratie 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.

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.

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.

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.

Kiosk toevoegen en koppelen

  1. Vul bij Kiosken een naam in (bv. Kiosk ingang) en kies Kiosk toevoegen. Je krijgt een koppelcode van 6 cijfers (30 minuten geldig).
  2. 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).
  3. 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.
  4. 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

  1. Startscherm met de welkomtekst; de gast kiest zijn taal (alle talen van de kassa) en tikt om te bestellen.
  2. Hier opeten of meenemen.
  3. 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.
  4. Het mandje: aantallen aanpassen en eventueel Ook iets erbij?.
  5. 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.
  6. 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.
  7. 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:

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.

Personeel en pincodes

Instellingen → Personeel (alleen beheerder): medewerkers toevoegen, naam, rol en pincode wijzigen, en op non-actief zetten.

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.

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.

RechtBedieningManager
Regels schrappen na bestellen (storno)jaja
Korting geven / korting weghalenneeja
Product op "op" zettenjaja
Kopie van een bon printenjaja
Retour (creditbon)neeja
Op rekening afrekenen en betalingen op rekening ontvangen (alleen met betalen op rekening aan)neeja
Tussenstand (X-rapport)jaja
Dag afsluiten (Z-rapport)neeja
Omzet per periodeneeja
Kassalade beherenneeja
Cadeaubonnen beheren (alleen met cadeaubonnen met saldo)neeja
Reviews lezen en beantwoorden (alleen met reviewbeheer aan)neeja
Klantenkaart beheren (alleen met de klantenkaart aan)neeja
Logboek bekijkenneeja
Camerabeelden bekijken (alleen met camerabeelden aan)neeja
Voorraad beheren (alleen met voorraad aan)neeja
Producten beherenneenee
Plattegronden beherenneenee
Zaak, betalen en printers instellenneenee
Werktijden bekijken en aanpassenneenee

Gegevens van de zaak

Instellingen - 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

Instellingen - Producten

Meld je aan als beheerder en kies Instellingen → Producten.

Productfoto's

Elk product kan een foto krijgen.

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:

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:

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.

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

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:

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.

ModelSoortAansluitingenIn de kassa
OS6XPOS-weegschaalRS232, USB, Bluetoothaangesloten, meerdere tegelijk
OS2XPOS-weegschaalRS232, USBaangesloten, meerdere tegelijk
CS6X, CS3XKassaweegschaalRS232, USB, Ethernet, wifiaangesloten, meerdere tegelijk
TS6X, TS3X, TS5EX, TS5NX, TS5GXPc-weegschaal (Windows, Android, Linux)RS232, USB, Ethernet, wifiop dit apparaat (1x), ook als etiketweegschaal
iS6X, iS2X, iR6X, Ti6X, iL8XAI-weegschaal met productherkenning (Windows, Android, Linux)RS232, USB, Ethernet, wifiop dit apparaat (1x), ook als etiketweegschaal
iS5X, OiT2XAI-weegschaal (alleen Linux)RS232, USB, Ethernetaangesloten of als etiketweegschaal
LS2S, LS2RX, LS2CX, LS2NX, LS5SX, LS5RX, LS5CX, LS5NX, LS6CX, LS6RX, LS6NXEtiketweegschaalRS232, Ethernet, wifietiketten scannen en PLU's
PS1CX, PS1DX, PS6CX, PS6DXPrijsweegschaalRS232aangesloten, meerdere tegelijk
PS1BXPrijsweegschaal zonder aansluitinggeengewicht met de hand
LH15XHangweegschaal met etiketprinterRS232, Ethernet, wifiaangesloten 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:

MerkModelSoortAansluitingProtocol (af fabriek)In de kassa
A&DEK-i (o.a. EK-610i), HV-WPKassaweegschaal (alleen gewicht)RS232, EK-i ook USBContinu (stand stream), 2400 baud, 7E1aangesloten, meerdere tegelijk
Adam EquipmentSwiftPrijsweegschaalRS232, USB (optie)Continu (continu naar pc), 9600 8N1 (te testen)aangesloten, meerdere tegelijk
Avery BerkelFX110, FX120, FX131 (inbouw met scanner)KassaweegschaalRS232, FX131 ook USBMettler Toledo 82/7 = Toledo 8217 (kassa stuurt W), 9600 baud, 7E1aangesloten, meerdere tegelijk
Avery BerkelFX125PrijsweegschaalRS232Checkout-Dialog 06 (9600, 7O1)aangesloten, meerdere tegelijk
Avery BerkelXs, XTs, XTiEtiketweegschaalEthernet, wifi, USBeigen PLU's op de weegschaaletiketten scannen
Avery Weigh-Tronix7820, 7829, ZP900KassaweegschaalRS232, 7820 ook USB, ZP900 ook USB en EthernetNCI (kassa stuurt W), 9600 baud, 7E1aangesloten, meerdere tegelijk
Balanzas MarquesBM1000P TOPKassaweegschaal (alleen gewicht)RS232METTLER (kassa stuurt W, Toledo), 9600 baud, 7E1aangesloten, meerdere tegelijk
Balanzas MarquesBM5 Junior Tower Label, BM500 ETQEtiketweegschaalEthernet, USB, RS232, BM500 ETQ ook wifieigen PLU's op de weegschaaletiketten scannen
BaxtranTW, VW, XTA, XTA-PPrijsweegschaalRS232Toledo (kassa stuurt W), 9600 baud, 7E1aangesloten, meerdere tegelijk
BizerbaCS 300 (ook inbouw)KassaweegschaalRS232Checkout-Dialog 06 (9600, 7O1)aangesloten, meerdere tegelijk
BizerbaK-Class Flex, KH IIEtiketweegschaalEtherneteigen PLU's op de weegschaaletiketten scannen
Brecknell6702U, 6710U, 6720UKassaweegschaalRS232, USB (virtuele COM-poort)NCI (kassa stuurt W), 9600 baud, 7E1aangesloten, meerdere tegelijk
CASPD-II, PDN, PDI, PDS-BKassaweegschaalRS232, PDN ook USB en Bluetooth, PDI ook USBECR type 2 = Toledo (kassa stuurt W), 9600 baud, 7E1aangesloten, meerdere tegelijk
CASCL3000, CL5500, CL7200EtiketweegschaalEthernet, USB, RS232, CL5500 en CL7200 ook wifieigen PLU's op de weegschaaletiketten scannen
DatalogicMagellan 9300i, 9400i, 9800i (scanner met weegschaal)KassaweegschaalRS232 (aparte weegpoort), USBMettler Toledo 8217 (kassa stuurt W), 9600 baud, 7E1aangesloten, meerdere tegelijk
DibalKS-400, D-POS 400KassaweegschaalRS232, D-POS 400 ook USBCheckout-Dialog 06 (9600, 7O1)aangesloten, meerdere tegelijk
DibalG-325, PI-100PrijsweegschaalRS232Checkout-Dialog 06 (9600, 7O1)aangesloten, meerdere tegelijk
DibalM-500 (Mistral), D-900, CS-2200EtiketweegschaalEthernet, wifi, USBeigen PLU's op de weegschaaletiketten scannen
DIGIDS-781PrijsweegschaalRS232DIGI Type B (kassa stuurt ENQ), 9600 8N1aangesloten, meerdere tegelijk
DIGISM-120, SM-6000EtiketweegschaalEthernet, wifieigen PLU's op de weegschaaletiketten scannen
Dini ArgeoDFW, DGT, 3590EKassaweegschaal (alleen gewicht)RS232, USB, Ethernet, DFW en 3590E ook wifiContinu (ST,GS, 0.512,kg), 9600 8N1aangesloten, meerdere tegelijk
Excell PrecisionTPE, AM4, FD4-P, FDP4-P, GE4, GEP4PrijsweegschaalRS232Continu (ST,GS,+0.876kg), 9600 8N1 (behalve TPE te testen)aangesloten, meerdere tegelijk
GramXFOC RS, XFOC+ RS, ZFOC RSPrijsweegschaalRS232, USB (kabel van Gram)Gram (kassa stuurt ENQ, dan DC1), 9600 8N1 (XFOC te testen)aangesloten, meerdere tegelijk
IshidaUni-3, Uni-5, Uni-7, Uni-9EtiketweegschaalEthernet, wifi, USBeigen PLU's op de weegschaaletiketten scannen
Kern & SohnRPB, RFCPrijsweegschaalRS232, USBCheckout-Dialog 06 (Prot = DLG-06, 9600, 7O1)aangesloten, meerdere tegelijk
Kern & SohnRFE (prijs), IFB, EOCPrijs-/kassaweegschaalRS232Continu, 9600 8N1aangesloten, meerdere tegelijk
Mettler ToledoAriva-SKassaweegschaalRS232, USB (virtuele COM-poort)Toledo 8217 (kassa stuurt W), 9600 baud, 7E1aangesloten, meerdere tegelijk
Mettler ToledoVivaKassaweegschaalRS232Toledo 8217, 9600 baud, 7E1aangesloten, meerdere tegelijk
Mettler ToledobPlus, UC EvoEtiketweegschaalEthernet, wifieigen PLU's op de weegschaaletiketten scannen
Minebea IntecSignum, Combics, Midrics, PuroKassaweegschaal (alleen gewicht)RS232, USB, Signum en Combics ook EthernetContinu (SBI, automatisch afdrukken), 9600 8N1aangesloten, meerdere tegelijk
OhausAviator 7000PrijsweegschaalRS232 of USBCheckout-Dialog 06 (9600, 7O1)aangesloten, meerdere tegelijk
OhausValor 7000, Ranger 3000, Ranger 4000, Ranger 7000, Defender 3000Kassaweegschaal (alleen gewicht)RS232, USB, EthernetContinu (Auto Print Continuous), 9600 8N1aangesloten, meerdere tegelijk
Precia MolenDP400KassaweegschaalRS232, USBCheckout-Dialog 06 (9600, 7O1)aangesloten, meerdere tegelijk
Precia MolenDPOS CR, C 210 B, C 210 CPrijsweegschaalRS232Checkout-Dialog 06 (9600, 7O1; C 210 te testen)aangesloten, meerdere tegelijk
Precia MolenCorail 500EtiketweegschaalEthernet, wifieigen PLU's op de weegschaaletiketten scannen
PrecisaXB, XT, LS, LX (precisiebalansen)Kassaweegschaal (alleen gewicht)RS232, LS en LX ook USBContinu (afdrukstand CONTINUOUS), 9600 8N1aangesloten, meerdere tegelijk
Rice LakeBenchPro BP-S, BenchPro BP-RKassaweegschaalRS232BP-S Toledo 8213, BP-R NCI (allebei: kassa stuurt W), 9600 baud, 7E1 (te testen)aangesloten, meerdere tegelijk
RongtaRLS1000, RLS1100EtiketweegschaalEthernet, RS232, wifieigen PLU's op de weegschaaletiketten scannen
SartoriusEntris, QuintixKassaweegschaal (alleen gewicht)RS232, USBContinu (SBI, automatisch afdrukken), 9600 8N1aangesloten, meerdere tegelijk
Star MicronicsmG-T12, mG-T30, mG-T60, mG-S8200Kassaweegschaal (alleen gewicht)RS232, USB (virtuele COM-poort)Continu, 9600 8N1 (te testen)aangesloten, meerdere tegelijk
T-ScalePA10, PA15, PEA10EtiketweegschaalEtherneteigen PLU's op de weegschaaletiketten scannen
UWEASEPPrijsweegschaalRS232Continu, 9600 8N1 (te testen)aangesloten, meerdere tegelijk
WedderburnTSDS983KassaweegschaalRS232DIGI Type B (kassa stuurt ENQ), 9600 8N1 (te testen)aangesloten, meerdere tegelijk
WedderburnTSDS781T, TSDS782TPrijsweegschaalRS232DIGI Type B, 9600 8N1 (te testen)aangesloten, meerdere tegelijk
WedderburnTSSM120EtiketweegschaalEthernet, RS232eigen PLU's op de weegschaaletiketten scannen
WintecScalePOS ACS-S60E (kassa met ingebouwde weegschaal)Kassaweegschaalintern COM6 (Windows) of COM4 (Android)Continu, 9600 8N1 (te testen)aangesloten
ZebraMP7000, MP72 (scanner met weegschaal)KassaweegschaalRS232 (AUX-poort)SASI = Toledo (kassa stuurt W), 9600 baud, 7E1 (te testen)aangesloten, meerdere tegelijk

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.

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:

Aclas OS6X (POS-weegschaal aan de kassa, RS232/USB; zo werken ook de andere aangesloten weegschalen):

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

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

  1. Thuisbezorgd gebruiken aanzetten (gaat meteen, los van Opslaan).
  2. 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.
  3. 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.
  4. 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.
  5. 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:

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

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

Plattegrond-editor

Instellingen → Plattegronden (alleen beheerder):

Configuratie overzetten naar een tweede zaak

Instellingen - In-/export

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:

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.

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.

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.

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