System Point of Sale

Przegląd

System punktu sprzedaży (POS) to połączenie oprogramowania i sprzętu (np. tabletu, skanera, czytnika kart), które umożliwia firmom przetwarzanie płatności, zarządzanie transakcjami i rejestrowanie sprzedaży w czasie rzeczywistym. Stanowi centralne miejsce do śledzenia stanów magazynowych, zarządzania personelem i analizowania danych sprzedażowych na potrzeby optymalizacji operacji.

Afternoon POS to platforma punktu sprzedaży będąca obecnie w fazie rozwoju, zaprojektowana z myślą o środowiskach handlu detalicznego i magazynowych. Łączy sieć terminali kasowych z centralnym serwerem, zapewniając firmom spójny system do przetwarzania sprzedaży, zarządzania asortymentem i monitorowania operacji w wielu lokalizacjach.

Sercem systemu jest centralny serwer, który przechowuje katalog produktów i dane pracowników, zbiera raporty ze wszystkich terminali oraz rozsyła aktualizacje. Operatorzy zarządzają nim za pomocą desktopowej aplikacji administracyjnej lub wiersza poleceń. Na potrzeby testowania i rozwoju dostępny jest zestaw emulatorów sprzętowych – obejmujących wszystko, od skanerów kodów kreskowych po drukarki paragonów – dzięki czemu pełny przepływ pracy można zweryfikować bez fizycznego sprzętu.

Każdy terminal może pracować w dwóch trybach. W trybie autonomicznym działa całkowicie samodzielnie. W trybie zarządzanym łączy się z centralnym serwerem i utrzymuje synchronizację, a w razie utraty połączenia kontynuuje pracę i automatycznie nadrabia zaległości po jego przywróceniu.

Funkcjonalności

Dostęp i bezpieczeństwo

Pracownicy logują się kodem PIN, a system wymusza kontrolę dostępu opartą na rolach – kasjera, kierownika i administratora. Operacje wrażliwe, takie jak zwroty wysokich kwot, wymagają zatwierdzenia przez przełożonego, a wielokrotne nieudane próby logowania skutkują zablokowaniem konta. Administratorzy mogą zarządzać pracownikami oraz przeglądać dziennik audytu z alertami o wykrytych anomaliach.

Sprzedaż i płatności

Kasjerzy tworzą koszyk, skanując kody kreskowe lub wyszukując produkty ręcznie – z obsługą towarów sprzedawanych na wagę, rabatów, bonów płatniczych i znaków akcyzy. Płatności obsługiwane są gotówką lub kartą. Paragony można zapisywać i wznawiać później, a zwroty – pełne lub częściowe – realizowane są na podstawie wyszukania oryginalnej transakcji.

Obsługa fiskalna i zarządzanie gotówką

Terminal integruje się z drukarką fiskalną i zapewnia pełen zestaw funkcji wymaganych przepisami: otwieranie i zamykanie zmian, raporty X i Z oraz ewidencję paragonów. Zarządzanie gotówką obejmuje kontrolę szuflady kasowej, wpłaty, wypłaty oraz uzgadnianie stanu kasy z dokładnością do nominałów. Osoby nadzorujące terminal płatniczy mogą ponadto anulować transakcje i drukować raporty terminala.

Magazyn i stany magazynowe

Pracownicy mogą przyjmować towar, korygować stany magazynowe, przeglądać historię zapasów i sprawdzać aktualne ilości. Terminal obsługuje również proste procesy produkcyjne, w których składniki są zużywane zgodnie z recepturą w celu wytworzenia gotowego produktu. Funkcje magazynowe uzupełniają alerty o niskich stanach, drukowanie etykiet oraz raporty wyceny zapasów.

Interfejs

Interfejs jest przystosowany do obsługi dotykowej – z dużymi elementami interaktywnymi i natychmiastową informacją zwrotną. Może działać w trybie pełnoekranowym i nie wymaga procesora graficznego (GPU).

Stos technologiczny

Terminal

Terminal to aplikacja desktopowa zbudowana w Tauri 2, z backendem w Rust i interfejsem webowym. Backend wykorzystuje SQLite do lokalnego przechowywania danych (szyfrowanego przez SQLCipher), Tokio do obsługi asynchronicznej oraz klienta HTTP (reqwest z rustls) do komunikacji z centralnym serwerem. Do serializacji i haszowania używane są biblioteki serde, bcrypt i pokrewne. Frontend oparty jest na React z TypeScript, z Vite jako narzędziem do budowania i środowiskiem deweloperskim oraz React Routerem do nawigacji. Aplikacja kompilowana jest do pojedynczego pliku wykonywalnego dla systemów Windows i Linux.

Centralny serwer

Centralny serwer to samodzielny plik binarny w Rust. API HTTP zbudowane jest przy użyciu Axum, a obsługę TLS zapewnia rustls. Dane przechowywane są w SQLite (rusqlite z SQLCipher). CLI opiera się na Clap, a interaktywne menu – na Inquire. Eksporty obsługują formaty CSV i PDF (m.in. raporty okresowe). Serwer działa na Tokio, a śledzenie zdarzeń (tracing) i obsługa CORS zrealizowane są za pomocą tower-http.

GUI centralnego serwera

GUI centralnego serwera to aplikacja Tauri 2 z frontendem w React i TypeScript. Do budowania i routingu używane są Vite i React Router. Frontend komunikuje się z centralnym serwerem przez HTTP z poziomu przeglądarki.

Emulatory sprzętowe

Emulatory tworzą przestrzeń roboczą Rust Cargo, z osobnym crate’em dla każdego urządzenia (skaner, drukarka, waga, szuflada kasowa, drukarka fiskalna, czytnik kart) oraz zunifikowanym launcherem. Launcher to aplikacja desktopowa egui służąca do uruchamiania i konfigurowania poszczególnych emulatorów. Emulowane urządzenia działają jako serwery TCP (lub COM/serial, gdy jest to wymagane), dzięki czemu terminal może się z nimi łączyć bez potrzeby posiadania fizycznego sprzętu.