Comenzi pe masă (Comanda)
- Cui vorbim:* patron / manager / shift-leader.
Conceptul de "comandă deschisă"
În HoReCa, o comandă la o masă trăiește mai mult timp — clientul comandă în mai multe valuri, peste 30-90 de minute. Sistemul nostru modelează acest comportament cu Comanda — o entitate care:
- Se deschide când chelnerul atribuie o masă.
- Se acumulează cu rânduri pe parcursul șederii.
- Se trimite în mod incremental către bucătărie / bar (fiecare val devine bonuri de producție).
- Se încheie când clientul cere nota și casierul emite bonul fiscal.
Stările unei Comenzi
deschisă ──cere-nota──▶ așteaptă-încasare ──încasare──▶ plătită ──confirmare-SFS──▶ închisă
│ │
│ └──manager-deblocheaza──▶ deschisă (cu motiv)
│
└──anulare──▶ anulată
Deschisă
Chelnerul a creat-o, poate adăuga / șterge / modifica linii. Linii deja trimise la bucătărie nu mai pot fi șterse de aici (necesită cancel post-prep, vezi Scenarii).
Așteaptă-încasare ("Cere nota")
Chelnerul a apăsat "Cere nota". Comanda nu mai acceptă rânduri noi. Verificare automată: toate bonurile de producție sunt în starea "livrat"? Dacă nu, alertă pentru chelner.
Plătită
Casierul a emis bonul fiscal. Comanda își consumă lifecycle-ul, masa devine liberă în harta sălii.
Închisă
SFS a confirmat oficial bonul. Comanda este finalizată, intră în arhive pentru rapoarte.
Anulată
Chelnerul / managerul a anulat comanda (clientul a plecat fără să comande, eroare). Liniile deja trimise la bucătărie generează automat bonuri de pierdere cu motiv "anulare client" (vezi Pierderi).
Cum se deschide o comandă
- Chelnerul atinge + Masa nouă pe tabletă.
- Alege:
- Zona (Sala 1, Sala 2, Terasă, VIP)
- Masa (din lista mese disponibile la zona aleasă)
- Capacitate (numărul de persoane — opțional, pentru analiză)
- Comanda primește identificator unic (ex. "M3-1942" = Masa 3, deschisă la 19:42).
- Apare în harta sălii cu culoare verde ("ocupată, deschisă").
Adăugare rânduri
- Chelnerul deschide o comandă existentă (din harta sălii sau din lista comenzilor active).
- Caută produs (search rapid pe denumire, sau scanare QR de pe meniul-tabletă).
- Atinge produsul → apare cu cantitatea 1.
- Modifică cantitatea, sau adaugă observație (ex.: "fără ceapă", "extra parmesan").
- Repetă pentru fiecare rând nou.
- Atinge Trimite → rândurile pleacă către divizii.
💡 Important: rândurile sunt draft până la "Trimite". Chelnerul poate corecta orice până atunci. După Trimite, rândurile devin bonuri de producție și nu mai pot fi modificate (doar cancel cu motiv).
Modificare / ștergere rând
- Înainte de Trimite — orice modificare, fără urme.
- După Trimite, înainte de Acceptă (la divizie) — chelnerul poate "anula linia pre-prep" → bucătarul nu o vede, fără pierdere.
- După Acceptă, înainte de Start — chelnerul cere anulare → necesită aprobare bucătar (a confirmat că nu a început încă) → fără pierdere.
- După Start (preparare începută) — anulare = pierdere reală → manager_tură aprobă, sistemul generează bon de consum cu motiv "anulare client", contul SNC 714.
Acțiuni per linie (Order View)
Fiecare linie din Order View are 4 butoane de acțiune contextuale (vizibile doar când Comanda e open și SharedRefs feature flags sunt on):
- ✏️ Cant. — reeditează cantitatea liniei
- ✏️ Preț — reeditează prețul liniei (net sau gross, oricare)
- ⃝ / 🎁 gift — toggle status gift (linia devine "ofertă casă" cu preț 0)
- 🗑 Șterge — șterge linia din comandă (cu confirmare)

- Dialog Reeditează cantitate* — după apăsarea ✏️ Cant.:

Câmpul afișează cantitatea curentă (1 buc), acceptă noua valoare, iar TOTAL NOU se recalculează live cu TVA inclus.
- Dialog Reeditează preț* — după apăsarea ✏️ Preț:

Cele 2 câmpuri (net / gross) sunt interconectate — modifici oricare, celălalt se recalculează pe baza ratei TVA a produsului. Câmpul gross (verde) e cel afișat clientului.
- Confirm Șterge linie* — după apăsarea 🗑 Șterge:

Notă: ștergerea unei linii deja trimise la bucătărie revocă linia din bon doar dacă bonul e la stagiu wip sau awaiting-mpns. La stagii superioare (accepted/preparing/ready), sistemul rejectează cu mesaj actionable — trebuie folosită procedura de Cancel bon (manager, cu Loss).
Multi-val (caz tipic)
19:42 Masa 3 deschisă
19:44 Val 1: Pizza + Salată + Apă → 3 bonuri (kitchen-hot, kitchen-cold, bar)
20:02 Val 2: Tiramisu + 2 cafele → 2 bonuri (dessert, bar)
20:17 Val 3: Mojito → 1 bon (bar)
20:35 Cere nota → check că toate cele 6 bonuri sunt "delivered"
20:36 Plată: card 380 MDL → bon fiscal unic pentru toată comanda
- Toată activitatea de la masa 3 → un singur bon fiscal* la final, conform legislației MD.
Note personalizate pe comandă (header / footer bon)
Chelnerul poate adăuga două câmpuri de text personalizate pe o comandă deschisă:
- Header — apare în partea de sus a bonului fiscal printat (ex. "Mulțumim pentru vizită!", "Aniversare Masa 5").
- Footer — apare în partea de jos (ex. "Bonus 10% la următoarea vizită — cod XYZ", instrucțiuni client B2B).
Fiecare câmp acceptă până la 1024 caractere. Editabile doar cât comanda e în starea deschisă sau așteaptă-încasare — odată plătită, notele se blochează pentru a păstra trasabilitatea audit a bonului printat.
Notele propagă automat:
- La bonul fiscal printat — apar pe hârtie deasupra / dedesubtul listei de produse.
- La factura e-Factura (dacă comanda e B2B) — notele se atașează la câmpul Notes oficial al facturii SFS.
Anularea unei comenzi cu motiv
Când o comandă se anulează (în orice stare valabilă), sistemul afișează un dialog cu:
- Select cu motive — lista configurată la nivel de POS (ex.
client_plecat, eroare_intoducere, comanda_dubla, client_nemultumit). Default selectat e motivul implicit al POS-ului (configurat de manager). - Notă liberă — text adițional pentru context.
Toate anulările intră în audit cu motivul + nota înregistrate. Statisticile de tură agregă anulările pe motiv → managerul vede tendințe ("90% din anulări săptămâna asta sunt client_plecat — investighează timpul de servire").
Cicluri BOM rulate pentru comandă
Pe ecranul comenzii, secțiunea "🔄 Cicluri BOM rulate pentru această comandă" centralizează toate ciclurile de producție (auto sau manuale) generate pentru bonurile copil ale comenzii. Util pentru manager să vadă efortul total din spatele unei mese:
- 2 cicluri auto pentru "mozzarella tăiată" lansate la 19:50
- 1 ciclu manual pentru "sos pizza" pregătit la 20:05
Linie cu linie: nume ciclu, MPN produs, stadiu, ora generării, buton de navigare la cardul ciclului în depozit.
Hartă mese
Vezi într-un ecran:
- Verde — masă ocupată, comandă deschisă, totul OK.
- Galben — masă cu "Cere nota" — așteaptă încasare.
- Albastru — comandă livrată, dar nu plătită (clientul plecat fără plată — alertă pentru manager).
- Gri — masă liberă.
- Roșu — anulată recent (vizibil 5 min apoi devine gri).
Cu un click pe orice masă → vezi comanda activă, lista chelnerului, total acumulat.
Operatori multipli pe aceeași comandă
Două chelnerițe pot lucra pe aceeași comandă (ex.: una preia comanda dimineața, cealaltă servește seara — schimbarea schimbului). Sistemul logează cine a adăugat ce rând. La închidere, raportul de tură împarte tipurile (vezi Rapoarte tură).
Audit complet
Fiecare acțiune pe Comandă (deschidere, adăugare rând, anulare, cere nota, deblocare, încasare) este logată cu timestamp precizie de secundă, user, context. Istoricul nu se poate edita / șterge.
Identificatorul comenzii are formatul H-IDNO-YYYYMMDDhhmmss-NNNNN (H = HoReCa) — unic, sortabil cronologic, vizibil în toate listele și rapoartele.
Navigare bidirecțională
Pe ecranul comenzii deschise, chelnerul poate naviga direct la oricare dintre bonurile copil:
- Buton 🍳 Bucătărie pe fiecare bon de producție listat → deschide bonul în Kitchen view.
- Buton 🧾 Bon fiscal după plată → deschide bonul fiscal în depozit pentru re-printare / verificare.
Reciproc, pe ecranul oricărui bon copil (de producție sau de pierdere), butonul 📂 Deschide comanda părinte navighează înapoi la Comanda — util pentru bucătar / casier când vor să vadă tot contextul.
Următorul pas
→ Divizii bucătărie & bar sau Bonuri de producție.