Roluri HoReCa
- Cui vorbim:* patron / manager care vrea claritate operațională.
Cele 4 roluri standard HoReCa
chelner
- Cine este:* persoana care preia comanda la masă, trimite la divizii, livrează preparatele, cere nota.
- Drepturi:*
- Deschide / închide comenzi pe masă.
- Adaugă rânduri într-o comandă deschisă.
- Editează note personalizate (header / footer pentru bonul tipărit) pe comenzile lui deschise.
- Trimite comanda către divizii (declanșează bonurile de producție).
- Anulează linii pre-prep (înainte ca bucătarul să accepte) cu motiv din lista POS-ului.
- Marchează bonul ca livrat la masă.
- Cere nota (transition open → pending-bill).
- Înregistrează pierderi standalone (pahar spart la masă, etc.) — cu motiv selectat din nomenclatorul POS-ului, cantitate negativă (default −1).
- Vede istoria comenzilor lui pe ziua curentă (filtrare pe
date_emitted + pos_source).
- Scoping tipic:*
- Per POS — chelner doar la sala 1, alt chelner la terasă.
- Per zonă (în cadrul unui POS) — chelner doar la "Sala 1", alt chelner la "VIP".
- NU are drept să:*
- Anuleze linii post-prep (preparare începută → necesită manager).
- Aprobe pierderi peste prag.
- Emită bon fiscal (asta e treaba casierului).
- Modifice prețurile produselor / meniul.
- Vadă rapoartele financiare.
bucatar
- Cine este:* persoana de la o stație (kitchen-hot, kitchen-cold, bar, dessert, coffee), execută bonurile de producție.
- Drepturi:*
- Vede bonurile de producție pentru divizia lui.
- Acceptă / refuză un bon (cu motiv).
- Trece bonul prin start → gata → notifică chelnerul.
- Adaugă pierderi în-flux pe bon (mozzarella picată, etc.) cu motiv obligatoriu.
- Aplică imediat scoaterea din stoc pe pierderile cu cantitate negativă (one-step flow) — pentru cantități pozitive (corecție inventar) e nevoie de permisiune admin separată.
- Rulează cicluri BOM pentru pre-prep dintr-un bon activ (per linie din "🍽️ De pregătit") sau bulk via butonul ⚡ Auto-cycle ingrediente (cu dialog de previzualizare înainte de a confirma).
- Vede ciclurile BOM lansate din bon (auto + manuale) cu link direct la fiecare ciclu.
- Vede istoria bonurilor lui pe ziua curentă (filtrare pe
date_emitted + pos_source).
- Scoping tipic:*
- Per POS + divizie — bucătar doar la
POS-sala / kitchen-hot. - Un bucătar polivalent poate avea drepturi pe mai multe divizii.
- NU are drept să:*
- Vadă comenzile altor divizii (curățenie operațională).
- Anuleze sau modifice comanda părinte.
- Aprobe pierderi peste prag.
- Emită bon fiscal.
- Vadă rapoartele financiare.
manager_tura
- Cine este:* persoana care supraveghează tura, rezolvă escaladări, închide tura.
- Drepturi:*
- Tot ce face chelnerul + bucătarul.
- Aprobă pierderi peste prag (cu motiv obligatoriu).
- Anulează linii post-prep (cu pierdere înregistrată).
- Anulează comenzi întregi (cu pierdere automată pe rândurile preparate).
- Deblochează comenzi
pending-bill → open (rar — clientul vrea să mai adauge ceva după ce a cerut nota). - Modifică praguri de aprobare și nomenclator motive (administrativ).
- Vede rapoartele operaționale din Reports tab — patru carduri on-demand: preview / raport de închidere tură (rulat pe o dată calendaristică × POS), roll-up lunar (agregare pe lună via
horeca_shift_month), split bacșiș chelneri (calcul on-the-fly din {order_count, gross_total, avg_total}, tip % = parametru FE — nu se persistă), detecție anomalii pierderi (rolling window per MPN, threshold multiplier configurabil, default 1.0σ warn / 2.0σ alert, min 0.5σ). - Închide tura (buton
Închide tura / Shift close) — generează raportul de închidere ca snapshot retroactiv per calendar-date × POS: totaluri pe subtipuri (production / sell / writeoff / transfer / supply / transform / ecommerce — fiecare cu rows, folder_count, qty, cost, revenue), topLosses[10] = {mpn, events, qty}, sumar note de plată {count, total_revenue}, generated_at. Butonul filtrează pe stage-uri finalizate (updated-stock, ready, done) — nu verifică, nu blochează pe comenzi deschise / bonuri neemise / Z-ul MCR nedat; curățenia rămâne responsabilitatea managerului. Jurnalul contabil detaliat pe conturi SNC (611 / 711 / 712 / 713 / 714) + breakdown per motiv/reason-code sunt ⚙️ activabile la cerere (v1: subtype-aggregated only). - Vede toate cele de mai sus pe toți chelnerii / bucătarii din POS-ul lui.
Notă. Tura HoReCa (management snapshot) este distinctă de tura MCR / raportul Z fiscal — Închide tura din ERP nu emite, nu așteaptă și nu verifică Z-ul casei de marcat. Cele două se închid independent, în fluxuri separate. HORECA_REPORT__SHIFT_CLOSE poate fi acordat wildcard sau restrâns per POS (HORECA_REPORT__SHIFT_CLOSE:POS:<pos-id>). Închiderea nu emite lifecycle events (fără notificare inbox, fără push, fără atingere de status pe folder-uri); snapshot-ul este frozen — nu se auto-refresh după close, iar dublu-click pe același date × POS creează un al doilea snapshot paralel (fără dedup via horecaGenUid).
- Scoping tipic:*
- Per POS — manager_tura la sala 1, alt manager la terasă.
- NU are drept să:*
- Modifice tarifele lunare ale platformei (administrativ central).
- Modifice configurarea POS-urilor / diviziilor (la onboarding sau de la admin general).
- Șteargă o tură deja închisă — e un drept separat, acordat explicit, tocmai pentru ca dreptul de a închide ture zilnic să nu includă și posibilitatea de a desființa un raport care intră în agregarea lunară.
casier
- Cine este:* persoana care emite bonurile fiscale și încasează plățile.
- Drepturi:*
- Deschide pos-fiscal cu modul Încasează comandă.
- Vede lista comenzilor "pending bill" pe POS-ul lui.
- Pre-populează coșul dintr-o comandă, alege metoda plată, emite bon fiscal.
- Opțional: emite e-Factura B2B (dacă are dreptul
E_FACTURA_STOCK_SELL). - Procesează storno (cu aprobare manager_tură).
- Înregistrează operațiuni cash pe POS via
pos-cash-register — collectingRecords (definire fond inițial, colectări intermediare, depunere bancă, refund-uri). Fără reconciliere automată numărat vs. așteptat la închiderea turei și fără prag configurabil de alertă — numărătoarea cash-ului la final de tură se face manual (⚙️ flux automat activabil la cerere).
- Scoping tipic:*
- Per POS — casier doar la POS-sala, alt casier la POS-terasa.
- E-Factura permission separată (un casier B2C nu emite obligatoriu e-Factura).
- NU are drept să:*
- Modifice comanda (asta a făcut chelnerul).
- Aprobe pierderi.
- Modifice catalog / prețuri.
Roluri suplimentare opționale
barman_supervisor
Bucătar la bar + dreptul de a adăuga produse noi în meniul barului (ex.: cocktail special al zilei). Util în baruri unde barmanul are libertate creativă.
host
Doar managementul sălii — atribuie mese, gestionează rezervări, vede ocuparea live. Nu serveste, nu încasează.
chelner_senior
Chelner + dreptul de a anula linii post-prep (în loc să cheme manager). Pentru chelneri experimentați, în restaurante mici.
auditor_intern
Read-only pe toate comenzile, bonurile, încasările. Pentru proprietar care vine ocazional.
Tabel sintetic — cine ce poate
| Acțiune | chelner | bucatar | manager_tura | casier |
|---|
| Deschide comandă | ✅ | — | ✅ | — |
| Adaugă rând la comandă | ✅ | — | ✅ | — |
| Trimite la divizii | ✅ | — | ✅ | — |
| Anulează rând pre-prep | ✅ | — | ✅ | — |
| Anulează rând post-prep | — | — | ✅ | — |
| Acceptă bon producție | — | ✅ | ✅ | — |
| Start preparare | — | ✅ | ✅ | — |
| Marchează "Gata" | — | ✅ | ✅ | — |
| Marchează "Livrat" | ✅ | — | ✅ | — |
| Adaugă pierdere în-flux | — | ✅ | ✅ | — |
| Adaugă pierdere standalone | ✅ | ✅ | ✅ | — |
| Aprobă pierdere peste prag | — | — | ✅ | — |
| Cere nota | ✅ | — | ✅ | — |
| Deblochează "pending bill" | — | — | ✅ | — |
| Anulează comandă | ✅* | — | ✅ | — |
| Emite bon fiscal | — | — | — | ✅ |
| Emite e-Factura B2B | — | — | — | ✅** |
| Storno bon | — | — | ✅ | ✅** |
| Vede rapoartele financiare | — | — | ✅ | — |
| Închide tura | — | — | ✅ | — |
- Doar dacă comanda are 0 rânduri trimise la divizii.
**Cu permisiunea suplimentară
E_FACTURA_STOCK_SELL.
Atribuire utilizatori
La onboarding configurăm utilizatorii. Exemplu real pentru un restaurant de 30 mese:
Sergiu Crăciun (admin) → administrator (orice POS, orice divizie)
Vasile Popescu (proprietar) → administrator + auditor_intern
Andrei Mocanu (manager seral) → manager_tura @ POS-sala
Maria Cojocaru (chelner) → chelner @ POS-sala / Zona-1
Ion Petrov (chelner senior) → chelner_senior @ POS-sala
Vlad Andronic (bucătar pizza) → bucatar @ POS-sala / kitchen-hot
Daria Stratulat (bucătar prep)→ bucatar @ POS-sala / kitchen-cold
Mihai Lupu (barman) → bucatar + barman_supervisor @ POS-sala / bar
Tatiana Gheorghe (casier) → casier @ POS-sala (cu E_FACTURA_STOCK_SELL)
Schimbarea rolurilor
În timpul zilei operaționale, dacă un chelner trebuie să acopere temporar la bar (pauză barman):
- Manager_tura îi acordă temporar drepturi
bucatar @ POS-sala / bar. - Granturile temporare se revoacă manual de manager_tura la sfârșitul zilei sau printr-un job programat separat — evenimentul
Close shift nu emite lifecycle events (fără inbox notification, fără push, fără hook care să revoace granturi de rol) și nu declanșează revocare automată. - Toate acțiunile lui în acea perioadă sunt logate cu rolul activ atunci.
Următorul pas
→ Raport de tură sau Scenarii end-to-end.