Cecilie's – kassesystem bygget fra bunden til fem centre
Kunde
Cecilie's
Services
E-commerce Betalingsintegration API Integration Realtidsopdatering Multi-tenant Automatisering Hosting & vedligeholdelse ERP-integration
Teknologi
Laravel Vue.js Inertia.js Laravel Reverb Integration API MySQL Hosting
Link til casen
Besøg Cecilie's
Baggrund og udfordring
Cecilie's driver fem indendørs oplevelsescentre i Herlev, City2, Holbæk, Slagelse og Amager. Hvert sted er på flere tusind kvadratmeter og rummer bowling, minigolf, pool, dart og shuffleboard side om side med café, restaurant og sportsbar. Gæsten er sjældent kun ét af tingene: hun booker en bane, spiser, køber en omgang mere ved baren og betaler måske det hele på firmaets faktura.
Det gør kassen til noget andet end en butikskasse. Den skal kunne finde dagens bookinger frem, tage imod efterbestillinger på en bane, sende en madbestilling videre til køkkenet, sælge og indløse gavekort, kende forskel på moms på mad, drikke og aktiviteter – og aflevere dagens tal til bogholderiet i en form, der kan bogføres.
Ingen standardkasse på hylden kunne det uden at blive bøjet. Alternativet var at drive tre systemer ved siden af hinanden – et til booking, et til salg og et regneark til at få enderne til at mødes – med den type dobbeltarbejde og differencer, der følger med.
Løsningen
Vi har bygget kassesystemet fra bunden som et selvstændigt modul i den samme platform, der driver Cecilie's booking. Kassen er ikke koblet på bookingen – den er bygget på de samme data. Det fjerner hele det synkroniseringslag, der normalt er mellem et POS og alt det andet.
Kortterminalen taler direkte med kassen
Vi har skrevet integrationen til Verifone-terminalen selv – protokol, forbindelse, tilstand og fejlhåndtering. Ekspedienten trykker betal, beløbet ryger over på terminalen, og svaret læses tilbage i kassen. Ingen taster beløbet ind to gange, og en terminal, der er optaget eller uden forbindelse, giver en forståelig besked frem for en fejlkode.
Bonprint direkte fra browseren
Kassen kører i browseren, men printer på almindelige bonprintere over USB. Vi har bygget vores eget ESC/POS-lag med tekst, skrifttyper, streg- og QR-koder, billeder, papirklip og kasseskuffe, så bonner, gavekortbeviser, køkkensedler og kasseopgørelser ser ud, som de skal – på hardware, der ikke er låst til én leverandør.
Kasseåbning, optælling og opgørelse
En kasse åbnes med en startbeholdning og lukkes med en optælling seddel for seddel og mønt for mønt. Opgørelsen samler salg pr. betalingsmiddel, solgte og indløste gavekort og differencen mellem talt og forventet beholdning. Kassen kan ikke lukkes, mens der stadig ligger ubetalte ordrer på den.
Betaling med kort, kontant, gavekort og faktura
Flere betalingsmidler kan bruges på den samme ordre. Kontant afrundes til nærmeste 50 øre efter danske regler, og forskellen posteres for sig. Gavekort slås op på nummer og kan bruges som delbetaling, og erhvervskunder kan købe på faktura, der sendes videre – også elektronisk til offentlige kunder.
Bookinger hentes frem ved ankomsten
Dagens bookinger ligger i kassen. Personalet finder gæsten frem ved ankomst, tjekker ind og lægger mad, drikke og ekstra spil på den samme ordre. Det, der blev købt online, og det, der købes på stedet, er den samme handel – ikke to.
Madbestillinger videre til køkkenet
Mad bestilt ved kassen eller på en QR-kode ved bordet sendes til køkkenskærmen med bordnummer og tidspunkt, så køkkenet arbejder efter en kø frem for efter råb. Køkkenets åbningstider og kapacitet er en del af systemet, så der ikke sælges mere mad, end der kan laves.
Flere kasser, der arbejder sammen
Kasserne i et center deler ordrer i realtid, så en bon startet i baren kan afsluttes ved receptionen. Hver ekspedient logger på med sin egen kode – den samme kode, som bruges i vagtplansystemet – så salget kan spores til en person, og kassen kan låses mellem to skift.
Dagsrapporten går selv i bogholderiet
Hver vare, pakke og aktivitet hører til en kontogruppe, og når en ordre er fuldt betalt, fordeles omsætningen på de rigtige konti. Dagens salg sendes videre til e-conomic som et bilag fordelt på konti og betalingsmidler, klar til at blive bogført.
Kassen skal kunne stå for et eftersyn
Et kassesystem er en del af regnskabet, og det har vi bygget efter fra begyndelsen frem for at lægge ovenpå bagefter:
Fortløbende numre uden huller: Bon-, ordre- og fakturanumre tildeles gennem en låst tæller med både distribueret lås og rækkelås i databasen, så to kasser aldrig kan trække det samme nummer – heller ikke i myldretiden.
Spor på alle ændringer: Rettelser, annulleringer og returneringer logges med bruger, tidspunkt og hvad der blev ændret fra og til, så en difference kan forklares frem for gættes.
Moms pr. varelinje: Mad, drikke, aktiviteter og gavekort behandles hver for sig, også når de sælges i den samme pakke.
Gavekort bogført som forpligtelse: Et solgt gavekort er ikke omsætning, før det bliver brugt. Salg, indløsning og saldo håndteres hver for sig med egen kontering.
Alle kald logges: Kommunikationen med terminal og økonomisystem gemmes med forespørgsel og svar, så det kan efterprøves præcis, hvad der blev sendt, når noget ikke stemmer.
Resultater og fordele
Kassen er ikke et system ved siden af forretningen – den er en del af den.
Ét system i stedet for tre
Booking, salg, køkken og gavekort ligger i den samme løsning. Personalet skifter ikke mellem systemer midt i en ekspedition, og der er ét sted at slå en gæst op.
Dagens tal er bogført, inden nogen går hjem
Kasseopgørelsen bliver til et bilag i e-conomic frem for til et regneark. Det fjerner både indtastningen og den månedlige jagt på, hvor differencen kom fra.
Ingen taster beløb ind to gange
Kortterminalen får beløbet fra kassen. Det fjerner den klassiske fejlkilde, hvor der bliver betalt et andet beløb, end der blev solgt for.
Fem centre på samme platform
Hvert center har sine egne kasser, priser, varer og tal, men kører på det samme fundament. Center nummer seks er en opsætning frem for et nyt projekt.
Udstyret er et valg
Fordi vi taler direkte med printer og terminal, er hardwaren ikke bundet til en leverandørs kasse. En ekstra kasse i højsæsonen er en skærm og en printer – ikke en licensforhandling.
Ændringer tager dage, ikke kvartaler
Skal en rabat, en pakke eller en betalingsform fungere anderledes, ændrer vi den. Der er ingen producent at sende en ønskeseddel til.
Hvordan det er bygget
Kassen er en Vue-applikation, der kører i browseren oven på en Laravel-backend, og som deler database, varekartotek og kunder med booking og webshop. Nogle af de valg, der bærer løsningen:
Realtid mellem kasserne: Ordrer, printjobs og statusskift sendes over websockets, så to kasser i samme center altid ser det samme.
Eget ESC/POS-lag: Bonner beskrives som byggeklodser i koden og oversættes til printerkommandoer, så en ny bontype er et stykke kode – ikke en skabelon i et fremmed værktøj.
Modulopdelt kodebase: Kasse, booking, køkken, gavekort, fakturering og ERP-integration er adskilte moduler med hver sit ansvar, så en ændring ét sted ikke vælter noget et andet.
Fælles medarbejderlogin: Kassen verificerer ekspedientens kode mod vagtplansystemet, så der kun er ét sted at oprette og spærre en medarbejder.
Multi-tenant fra bunden: Platformen er bygget til flere selskaber og flere centre med hver sine data, indstillinger og nummerserier.
Testdækning på pengene: Betalinger, returneringer, afrunding og kasseopgørelse er dækket af automatiske tests, fordi det er dér, en fejl koster rigtige penge.
Fremadrettet samarbejde
Vi hoster og driver løsningen og udvikler den videre sammen med Cecilie's. Fordi kasse, booking, køkken og økonomi ligger i den samme kodebase, kommer en forbedring ét sted også de andre til gode – og et nyt center er en opsætning frem for et nyt system.
Vi skaber værdi for vores kunder
Hvorfor vælge Indexed?
Vi bygger det, hylden ikke har: Kortterminal, bonprinter og kasseopgørelse er skrevet af os, så løsningen følger forretningen frem for omvendt.
Vi kender økonomienden: e-conomic, Business Central, Rackbeat og Visma eEkonomi er integrationer, vi har bygget og driver – ikke noget, vi sætter os ind i undervejs.
Én leverandør til hele kæden: Booking, kasse, køkken, gavekort og bogføring ligger hos os, så der ikke er flere leverandører at koordinere, når noget skal rettes.
Erfarent team: Med mere end 20 års erfaring har vi løst komplekse udfordringer for en lang række kunder.
Dansk udvikling – Made in Denmark: Al vores udvikling og hosting foregår i Danmark.
Mød holdet
Vi er et webbureau med fokus på kvalitet og kundens løsninger. Vores tekniske kunnen matcher vores evne til at levere.
Mette Blaase
Skal jeres kasse passe til forretningen?
Bøjer I en standardkasse for at få hverdagen til at hænge sammen, så lad os tage en uforpligtende snak om, hvad et kassesystem bygget til jer ville kunne.