Roluri & permisiuni

Cui vorbim: proprietar / manager / decident IT care vrea să înțeleagă cum controlează cine ce face în ERP.

Ideea de bază

Fiecare utilizator ERP are un cont personal (username + parolă) și primește unul sau mai multe roluri. Un rol e o listă de permisiuni — atomice, verificate individual la fiecare acțiune sensibilă. Când un utilizator încearcă o acțiune, sistemul verifică dacă are cel puțin o permisiune care o acoperă; altfel primește 403.
Consecință practică:

Convenția de nume

Permisiunile respectă o gramatică consistentă care le face ușor de citit și de căutat:

MODULE__ACTION                    → permisiune de bază, pentru toate scope-urile
MODULE__ACTION:SCOPE:value        → variantă restrânsă la un scope specific

Exemple concrete:

Permisiune Efect
FISCAL_PUSH_CASH_REGISTER Poate emite bonuri fiscale pe orice casă
HORECA_FISCAL__EMIT:POS:bar-1 Poate emite bonuri doar pe POS-ul cu id bar-1
STOCK_TRANSFER:POS:kitchen:main Poate transfera stoc doar din kitchen în main
MCP_TOOL:search_products Poate folosi tool-ul AI search_products (read-only)
MCP_TOOL_WRITE:update_price Poate folosi tool-ul AI update_price (write, cu gate suplimentar)
HORECA_REPORT__SHIFT_CLOSE Poate rula "Închide tura" (snapshot retrospectiv per zi calendaristică × POS) și consulta rapoartele de tură (jurnal contabil v1, roll-up lună, tipping split, ⚙️ loss-anomaly) pe orice POS
HORECA_REPORT__SHIFT_CLOSE:POS:main Poate rula "Închide tura" + rapoartele aferente doar pe POS-ul main

Convenția MODULE__ACTION (cu dublu-underscore) separă clar prefixul de modul de restul. Face ușor de identificat familia de permisiuni printr-un grep simplu în audit.

Rolurile pregătite din start

La onboarding activăm câteva roluri pre-configurate, pe care le poți duplica și ajusta după nevoile tale reale. Numele din paranteze sunt cele din sistem.

Administrator (role_administrator)

Cine: proprietar / director / responsabil IT principal.
Ce poate:

Ce nu: nu are "super-putere" ascunsă — logurile sunt inalterabile prin design, iar acțiunile lui rămân în jurnal exact ca orice alt utilizator. Vezi și T&C — Admin responsability.

Manager de tură HoReCa (role_horeca_manager_tura)

Cine: manager sală / responsabil schimb într-un restaurant.
Ce poate:

Ce nu: nu poate șterge entrii din cash-register (ștergerea = admin senior only) și nu poate aplica stoc retroactiv. De asemenea, "Închide tura" este un snapshot retrospectiv al zilei calendaristice alese pe un POS — nu emite / nu așteaptă Z-ul de la casa de marcat (MCR Z-shift e operațiune fizică separată), nu blochează operațional casa de marcat, nu verifică "curățenia" (Comenzi deschise / bonuri ne-emise sunt pur și simplu excluse din agregare, nu blocante) și nu se poate "redeschide". Re-execuția pe aceeași dată × POS creează un al doilea snapshot alături de primul (fără dedup) — responsabilitatea de gestiune înainte de close rămâne a managerului.

Casier HoReCa (role_horeca_casier)

Cine: casier la POS fiscal — emite bonurile clienților.
Ce poate:

Ce nu: nu editează Comenzi (doar le vede), nu modifică prețuri, nu vede rapoarte financiare.

Chelner (role_horeca_chelner)

Cine: ospătar care ia comenzi la masă.
Ce poate:

Bucătar (role_horeca_bucatar)

Cine: operator kitchen / bar / cafenea — vede kitchen-display + marchează pregătit.
Ce poate:

Roluri MCP (asistent AI conectat)

Patru template-uri specializate pentru accesul AI:

Notă: tool-ul MCP horeca_shift_month are un domain fallback pe HORECA_REPORT__SHIFT_CLOSE — dacă utilizatorului îi lipsește această permisiune de domeniu (chiar dacă are MCP_TOOL:horeca_shift_month), apelul MCP eșuează. Nu există tool MCP pentru "Închide tura" — închiderea unei ture (crearea snapshot-ului) e strict UI-only în webapp HoReCa; MCP-ul poate doar citi rezultatele.

Vezi Asistent AI conectat (MCP) pentru detalii de activare + cost.

Permisiunile fiscal-modules nou introduse

Framework-ul de capture bon fiscal (scanare QR, formular manual, sync provider extern) folosește două grants dedicate:

FISCAL_MODULES__USE

Cine primește: cashier + manager de tură + administrator (deja incluse implicit în rolurile de mai sus).
Ce activează:

Nu activează: aplicare retroactivă stoc pentru bonuri istorice — aceasta e un grant separat, deliberat mai restrâns.

FISCAL_MODULES__APPLY_STOCK_MANUAL

Cine primește: administrator + eventual operations lead — nu casierul de zi cu zi.
Ce activează:

De ce e restricționat: fiecare apply modifică stocul real. Ștergerile / corecțiile trebuie să fie decizii conștiente ale unei persoane cu vedere de ansamblu, nu ale casierului aglomerat la ora de vârf. Fiecare acțiune scrie un rând audit audit_apply[] cu username + timestamp + verdictele înainte/după.

Cum ajustezi rolurile

Rolurile default pot fi rescrise oricând conform nevoilor tale. Cerere de personalizare la onboarding = inclus în pachetul Start+; ajustări ulterioare = suport standard.

Câteva reguli de bun-simț

Următorul pas

→ Onboarding — proces și termene sau Migrare date.

sgapps.io