Fluxuri de comenzi — Pay-First vs Pay-Later
Când să utilizați Pay-First față de Pay-Later, cum se comportă fiecare de la capăt la capăt, stările comenzilor pe care operatorii le văd în panoul de administrare și procesele de fundal care mențin comenzile sincronizate cu POS-ul.
Fooodo acceptă două fluxuri de comenzi distincte. Acestea diferă prin momentul în care bucătăria vede comanda și momentul în care are loc plata. Alegerea depinde de stilul de servire, nu de restaurant — un singur restaurant poate rula fluxuri diferite la mese diferite.
- Guest scans QR, builds cart
- Guest pays
- Order is exported to R-Keeper
- Kitchen prepares
- Guest receives or collects
- Guest scans QR, builds cart
- Items go to R-Keeper kitchen immediately
- Guest adds more rounds (each one syncs)
- Guest asks to pay
- Order locked → marked paid in R-Keeper
Fluxurile de comenzi ale Fooodo comunică cu POS-ul tău printr-un contract de conector. R-Keeper este conectorul de referință activ în prezent — mecanismele descrise mai jos reprezintă ceea ce orice implementare de conector trebuie să satisfacă.
Pay-First
Utilizați Pay-First atunci când oaspeții ar trebui să plătească înainte ca serviciul să înceapă: comenzi de luat, serviciu rapid, food court-uri. Bucătăria nu vede niciodată o comandă neplătită; POS-ul primește un singur export de comandă per coș; dacă un oaspete abandonează coșul, nimic nu ajunge la linie.
Pay-Later
Utilizați Pay-Later pentru servire la masă și serviciu cu mai multe runde. Prima rundă ajunge la POS în momentul în care este trimisă; rundele ulterioare sunt adăugate la aceeași comandă POS una câte una. Comanda rămâne deschisă în POS de la prima rundă până când plata o închide. Intern, Fooodo urmărește ce articole au fost deja trimise, astfel încât fiecare rundă să fie sincronizată o singură dată.
De ce diferă fluxurile
Diferența mecanică este mică — Pay-First face un singur export POS, Pay-Later face mai multe. Diferența operațională contează mai mult:
- În Pay-First, bucătăria nu face nicio muncă suplimentară dacă un oaspete abandonează coșul. Însă experiența oaspetelui este nepotrivită pentru servirea la masă: oamenii se așteaptă să plătească la final; a cere plata în avans pare tranzacțional, nu ospitalier.
- În Pay-Later, experiența oaspetelui corespunde unui restaurant obișnuit. Operatorul acceptă un risc mic că o comandă ar putea să nu fie plătită (un oaspete pleacă, un card eșuează) — același risc care există astăzi cu orice serviciu cu notă de plată pe hârtie.
Multe lanțuri încep cu Pay-First la ghișeele de comenzi de luat, apoi adaugă Pay-Later la mesele pentru servire la masă odată ce personalul este familiarizat cu panoul de administrare.
Configurarea fluxului
Fluxul este setat per masă sau ca implicit pentru restaurant în panoul de administrare. Un restaurant poate combina fluxuri — de exemplu, mesele pentru servire la masă pe Pay-Later, ghișeul de comenzi de luat pe Pay-First, ambele rulând prin aceeași instalare Fooodo.
Stările, în practică
Comenzile parcurg o mașină de stări. Denumirile de mai jos sunt exact cele care apar în panoul de administrare — utile atât pentru operatorii care își citesc propriile comenzi, cât și pentru integratorii care consumă evenimente de comenzi.
Stările de care se preocupă cei mai mulți operatori:
| Stare | Ce înseamnă |
|---|---|
Created | Coșul există, niciun articol nu a fost trimis încă |
InProgress | Articole trimise la POS, se așteaptă mai multe sau plata |
ReadyToBePaid | Oaspetele a terminat de comandat, plata este în așteptare |
Paid | Plata a reușit, POS-ul a marcat comanda ca plătită |
Finished | Comanda închisă, stare finală de succes |
Stările adiacente eșecului:
| Stare | Ce înseamnă |
|---|---|
Locked | POS-ul are comanda deschisă (un chelner o editează). Reîncercări automate cu backoff. |
Error | Exportul către POS a eșuat după toate reîncercările. Necesită intervenție manuală. |
Cancelled | Comanda a fost anulată sau a expirat neplătită |
Majoritatea stărilor Locked se rezolvă în câteva secunde. Un Locked persistent înseamnă de obicei că un chelner are comanda deschisă în POS și a uitat să o închidă.
Error este singura stare care necesită atenție umană. Jurnalele de eșec ale conectorului înregistrează ce a mers greșit; rezolvarea tipică este recrearea comenzii la terminalul POS.
Ce rulează în fundal
Un set restrâns de procese programate menține stratul de comenzi sincronizat — operatorii nu trebuie să le memoreze, dar integratorii care consumă date Fooodo ar trebui să cunoască cadențele:
| Cadență | Proces |
|---|---|
| În fiecare minut | Verificarea disponibilității restaurantului |
| În fiecare minut | Anularea comenzilor care au expirat fără plată |
| La fiecare 2 min | Preluarea actualizărilor comenzilor din POS |
| La fiecare 4 min | Preluarea stării meselor din POS |
| La fiecare 5 min | Sincronizarea disponibilității articolelor |
| Zilnic 09:00 | Sincronizare completă a meniului |
Dacă POS-ul este inaccesibil, procesele reîncearcă cu backoff exponențial; comenzile se pun în coadă în starea lor curentă și se reconciliază când conectorul se recuperează.
Arhitectura Fooodo
Cum este construit Fooodo — separarea în două servicii (aplicația de meniu și serviciul de plată), modelul de multi-tenant companie/restaurant/masă, contractul de conector POS-agnostic și locul unde se află UVS.
Conector R-Keeper
Implementarea de referință live a contractului de conector POS al Fooodo — ce date traversează granița, cadrențele de sincronizare, prețurile de fidelizare și modul în care eșecurile sunt reîncercate în producție.