Glavna tehnička studija slučaja
SyncPlate
Višekorisnička restoranska platforma koja obuhvata POS, zalihe, zaposlene, HACCP, plaćanja, povezane uređaje i nemačke fiskalne tokove na vebu, Androidu i iOS-u.
- Uloga
- Autor, vlasnik proizvoda i full-stack programer
- Trenutni status
- U aktivnom razvoju · Započeto u maju 2024.
Pregled
Pregled
Višekorisnička restoranska platforma sa 14 Laravel domenskih modula, odvojenim bazama po korisniku, Zigbee/MQTT integracijom za HACCP senzore i jednom Expo bazom koda za veb, Android, iOS i namenske platne terminale.
Poslovni problem
Restoran istovremeno upravlja porudžbinama, zaposlenima, zalihama, uređajima, plaćanjima i poreskim obavezama, dok nemački propisi dodatno zahtevaju potpisane račune, nepromenljive revizijske tragove i DSFinV-K izvoz. Najteži deo nije broj funkcija, već izolacija svakog korisnika, dokazivost svakog fiskalnog zapisa i predvidivost svakog toka dok više ljudi i uređaja menja isto stanje tokom gužve.
Moj doprinos
- Razvio i testirao višekorisničku Laravel 12 platformu sa 14 domenskih modula, centralnom bazom za usmeravanje i odvojenom bazom za svakog korisnika.
- Preveo procese poručivanja, prodaje, zaliha, fiskalizacije, HACCP-a i IoT-a u zahteve za Redis Streams okosnicu sa transactional outbox obrascem i idempotentnim potrošačima.
- Istražio nemačke fiskalne zahteve i povezao ih sa mogućnostima provajdera za fiskaly TSE potpisivanje, DSFinV-K izvoz, dnevni obračun i GoBD revizijski zapis povezan heševima.
- Implementirao operativnu analitiku i tokove povezane sa prognozama za prodaju, zalihe, nabavku, proizvodnju, optimizaciju menija i trendove.
- Vodio i validirao tok senzorskih podataka od Zigbee-a preko MQTT-a do API-ja, uključujući neprekidnu HACCP telemetriju i uparivanje uređaja iz administratorskog interfejsa.
- Koordinirao i validirao isporuku jedne Expo baze koda za veb, Android, iOS i namenske terminale, uključujući Stripe Terminal i tri načina povezivanja termalnih štampača.
Praktične integracije uređaja
POS, plaćanja i hardver
Praktičan razvoj, integracija i testiranje Stripe platnih terminala, SUNMI Android POS uređaja, ESC/POS štampanja računa, QZ Tray-a i fiskaly TSE-a — uključujući uparivanje uređaja, praćenje statusa, komunikaciju sa štampačima i dijagnostiku grešaka povezivanja i integracije.
Tehnički izazovi
Tehnički izazovi
Izolacija korisnika bez posebne verzije za svakog klijenta
Centralna baza za usmeravanje određuje korisnika, nakon čega se zahtev izvršava nad njegovom zasebnom bazom. Jedna baza koda, bez deljenih redova i bez putanje za curenje podataka između korisnika.
Događaji koji preživljavaju pad sistema
Domenski događaji upisuju se u istoj transakciji kao i podaci koji su ih izazvali, a zatim prosleđuju u Redis Streams. Potrošači čuvaju stanje idempotentnosti, pa ponovno izvršavanje ne može dvaput obračunati prodaju.
Fiskalni propisi kao zamenjivi drajver
Nemačka zahteva TSE potpisivanje i DSFinV-K, dok druge zemlje imaju druge zahteve. Provajderi navode mogućnosti kroz ugovore, pa nova zemlja znači novi drajver, a ne prepisivanje sistema.
Prognoze koje prepoznaju sopstvenu grešku
Prognoziranje potražnje nije samo poziv modela: servis proverava rezultate na istorijskim podacima, koriguje odstupanje i prati sopstvenu grešku, uz vremenske prilike i praznike kao ulazne podatke.
Od senzora do baze bez ručne intervencije
Zigbee temperaturni senzori šalju podatke preko MQTT-a Python mostu koji prosleđuje telemetriju API-ju, dok se novi hardver uparuje iz administratorskog interfejsa umesto komandne linije.
Jedna baza koda, četiri veoma različita okruženja
Veb, Android, iOS i namenski platni terminali dele jednu Expo bazu koda, dok su Stripe Terminal, Sunmi štampanje, Bluetooth ESC/POS i QZ Tray dostupni kroz provere mogućnosti uređaja.
Mapa platforme
Za šta je backend zaista odgovoran.
Četrnaest modula u jednoj Laravel bazi koda, nazvanih kao u trenutnom direktorijumu app/Modules i grupisanih prema odgovornosti.
Usluga i sala
4 modula
- OrderRačuni, sledovi i podele
- TableRaspored sale i trenutna zauzetost
- OnlineOrderingPorudžbine van objekta u istom redu
- DlvPorudžbine za dostavu i otprema
Roba i proizvodnja
4 modula
- CatalogMeni, stavke i izmene
- InventoryNivoi, količine i jedinice pakovanja
- ProcurementDobavljači i poručivanje
- DiscountPravila cena i promocije
Novac i propisi
4 modula
- CashOdgovornost za kasu po smeni
- AccountingIzvoz za knjigovodstvo
- AuditLogGoBD trag povezan heševima
- BillingObračun svakog korisnika
Platforma
2 modula
- SettingsPodešavanja po korisniku
- SuperAdminAdministracija korisnika
Uređaji
Hardver kojim platforma upravlja.
Restoran nije samo jedan uređaj. Svaka klasa uređaja prolazi proveru mogućnosti, pa objekat bez dodatnog hardvera i dalje dobija funkcionalnu kasu, dok onaj sa svim uređajima ne mora da koristi drugi sistem.
Naplata
Platforma direktno upravlja svim čitačima preko Stripe Terminala, pa je izbor uređaja stvar konfiguracije objekta, a ne zasebne putanje u kodu.

Stripe Reader S700
Stripe Terminal
Kasa na pultu. Expo klijent radi na samom čitaču, pa se porudžbina i kartično plaćanje obavljaju na jednom ekranu umesto usklađivanja dva uređaja.

BBPOS WisePOS E
Stripe Terminal
Čitač koji ostaje na pultu. Pripada fiksnoj kasi, a ne određenoj osobi, pa je radno mesto spremno bez obzira na to ko ga koristi.

SUNMI POS Devices
SUNMI SDK · Android POS
Ručni Android uređaj sa ugrađenim štampačem. Porudžbina, plaćanje i račun na jednom uređaju — upravo je to njegova prednost.

BBPOS WisePad 3
Stripe Terminal
Bluetooth PIN uređaj uparen sa telefonom ili tabletom, za naplatu karticom za stolom bez posebnog pametnog čitača na tom radnom mestu.

Tap to Pay
Phone as reader
Bez dodatnog čitača — telefon u kecelji konobara postaje beskontaktni terminal. Najpovoljniji način da se tokom jedne prometne večeri otvori druga kasa.
Ništa od ovoga nije uslov za korišćenje sistema. Objekat koji već ima kartični terminal svoje banke može da ga zadrži bez promena: kasa evidentira prodaju kao kartično plaćanje, a operater je potvrđuje kada samostalni terminal prijavi uspešnu transakciju. Nema migracije niti raskida ugovora. Integrisani čitač uklanja samo taj jedan ručni korak — ne uslovljava rad kase.
Štampanje
Iza jednog interfejsa za štampanje nalaze se tri načina povezivanja — mrežni ESC/POS, Bluetooth ESC/POS i Sunmi SDK — a klijent bira odgovarajući način za svaki uređaj tokom rada.

Countertop thermal printer
Network ESC/POS · QZ Tray
Računi na kasi i isti način povezivanja za kuhinjske i barske štampače — tiket je račun namenjen drugom čitaocu.

Mobile thermal printer
Bluetooth ESC/POS
Nosi se uz ručni uređaj, pa izdavanje odštampanog računa za stolom ne zahteva povratak do pulta.
Ekrani okrenuti drugoj strani
Svi prethodni uređaji okrenuti su osobi koja prima porudžbinu. Ova tri su namenjena kuhinji i gostu, pa se koriste mokrim rukama ili bez dodirivanja.

Wired bump bar
Kitchen display
Zatvaranje tiketa zahteva jedan pritisak tastera. Kuvar usred smene ima mokre ruke i nema vremena da precizno koristi ekran na dodir.

Wireless bump bar
Kitchen display
Ista kontrola za izdavanje hrane ili barsku stanicu gde sprovođenje kabla do ekrana nije moguće.

Customer display
Second screen
Strana pulta okrenuta gostu: trenutna porudžbina i ukupan iznos vide se pre prislanjanja kartice, a ne tek nakon plaćanja.
Prikazi proizvođača i primeri podržanih klasa uređaja, a ne fotografije konkretne instalacije.
Snimci ekrana
Snimci ekrana
Snimci iz aplikacije u radu. Serijski brojevi, mrežne adrese i oznake senzora su sakriveni.
Arhitektura
Arhitektura
Laravel API centralno određuje korisnički kontekst, a zatim radi nad odvojenom bazom tog korisnika. Poslovni događaji koriste transactional outbox i Redis Streams, IoT gateway povezuje Zigbee senzore preko MQTT-a sa istim API-jem, a jedna Expo baza koda pokriva veb, Android, iOS i namenske terminale.
Rezultat
Rezultat
Funkcionalna platforma sa 14 Laravel domenskih modula, IoT gateway-em i klijentom za više platformi, koja pokriva tok od porudžbine i plaćanja do zaliha, zaposlenih, HACCP-a i fiskalnog obračuna. Proizvod je i dalje u aktivnom razvoju.



