Översikt och arkitektur
R-GO är inte ett enda program utan några små program som samarbetar. Kassan själv, inställningarna och allt som rör hårdvara - skrivare, kontrollenhet, skanner - körs var för sig. Det gör att samma kassa kan stå på en Windows-dator, en Linux-burk, en Mac eller en Android-terminal, och att en skrivare kan sitta på en annan maskin än kassan. Det här kapitlet beskriver delarna och hur de pratar med varandra.
Delarna
web_till är kassan. Den håller kassalogiken - rader, betalningar, rapporter - och den fiskala journalen, och serverar kassans webbsida. Kassören arbetar i en webbläsare eller i en app som visar sidan (R-GO Kassa i Windows, APK:n på CHD6800 och Casio). Sidan pratar med kassan över HTTP och WebSocket, normalt på port 8090 och 8091.
web_setup är inställningssidan för butikschefen: varor, knappar, moms, kvittots utseende, kortterminal och bokföring. Den läser och skriver samma filer som kassan och lyssnar normalt på port 8092, bara lokalt - den har ingen inloggning.
receiptprinter är länken till hårdvaran. Den tar emot kvitton från
kassan och skriver ut dem, den gör kontrollenhetens serieport till en
WebSocket som kassan kan nå, och den kan vidarebefordra koder från en
seriell skanner. Den har en egen inställningssida på /setup. På
Casio-kassorna gör Casio-appen samma jobb, eftersom bara Casios egna
gränssnitt kommer åt den hårdvaran.
Webbklienterna finns i två utföranden. Den vanliga är skriven för
moderna webbläsare. ES5-versionen (index.es5.html) är till för äldre
webbvyer - CHD6800 och Casio-kassorna - som inte förstår modern
JavaScript och som annars bara visar en tom ram.
kassör ── webbsida ──HTTP/WS──> web_till ──HTTP──> receiptprinter ──> skrivare
│ └──────────> CleanCash (serieport)
├──WS──> CleanCash-bryggan
└──TCP/REST──> kortterminal (Nets/Worldline)
butikschef ── webbläsare ──> web_setup ──> samma inställningsfiler
En kassatråd
All kassalogik körs på en enda tråd, i tur och ordning. Det är ett medvetet val: varje tangenttryck och varje betalning ska hamna i journalen i exakt den ordning de skedde, och en kassa som gör två saker samtidigt kan inte garantera det. Baksidan är att något långsamt på den tråden - en skrivare som inte svarar, en kortterminal som tänker - får hela kassan att stå still. Därför sker kortköp asynkront: kassan ber terminalen börja och frågar sedan efter resultatet, i stället för att vänta med allt annat stängt.
Tjänster i nätet
Delarna hittar varandra av sig själva när de står i samma nät. Kassan, inställningarna och receiptprinter annonserar sig med mDNS (samma teknik som skrivare och Apple-prylar använder), och receiptprinter talar om vad den klarar - grafik, QR-kod, kniv. En Worldline-terminal annonserar sig med en egen sändning var 60:e sekund. Inställningssidan visar det som hittats, så att en adress kan väljas i stället för att skrivas in. Det är en bekvämlighet: mDNS når inte genom VLAN eller wifi med klientisolering, så manuell adress fungerar alltid. På Android finns bara Worldlines sändning, inte mDNS.
Var datan ligger
Allt kassan behöver ligger i en datakatalog: inställningarna, journalen, databaserna och webbklienterna. Se Datakatalogen och konfigurationsfilerna.