# Concepte

Patru noțiuni explică aproape tot ce vezi în platformă - firma, contul, rolul și modulul. Odată înțelese, restul documentației se citește ușor.

## Firma

Firma este unitatea de bază. Are datele legale (denumire, CUI, Registrul Comerțului, sediu, conturi bancare), un **tip** (`restaurant`, `agentie` sau `gol`), tema vizuală și logo-ul.

Toate datele de lucru (produse, facturi, comenzi, oameni) au o coloană `firma_id`. Baza de date aplică regula „vezi doar firma ta” pe fiecare tabel, cu Row Level Security în mod `FORCE`: chiar și o greșeală în cod nu poate întoarce rândurile altei firme.

```sql title="Regula de izolare (schematic)"
ALTER TABLE produse ENABLE ROW LEVEL SECURITY;
ALTER TABLE produse FORCE ROW LEVEL SECURITY;

CREATE POLICY izolare_firma ON produse
  USING (firma_id = nullif(current_setting('app.firma_id', true), '')::uuid);
```

## Contul

Un cont este un om. Același cont poate avea acces la mai multe firme, cu un rol diferit în fiecare. În antetul aplicației alegi **firma activă**; tot ce citești și scrii după aceea se întâmplă doar în firma aceea. Firma stă în adresa paginii (`/app/<firma>/…`), deci fiecare tab al browserului poate lucra pe altă firmă; o adresă fără firmă rămâne pe firma din sesiune. Dacă nu mai ai acces la firma din adresă, platforma răspunde `403`.

> [!TIP]
> Dacă lucrezi pentru două firme (de exemplu restaurantul și agenția), nu ai nevoie de două conturi. Ai un singur cont, cu acces la amândouă.

## Rolul

Rolul spune ce poate face un om într-o firmă. Platforma cunoaște opt roluri de firmă:

| Rol | Pentru cine |
| --- | --- |
| `admin` | administratorul firmei: oameni, drepturi, module, setări |
| `patron` | proprietarul: vede tot ce ține de afacere |
| `finante` | facturi, plăți, evidență financiară |
| `gestiune` | stoc, recepții, furnizori |
| `bucatar` | bucătăria: meniu, rețete, ingrediente |
| `casier` | vânzarea și casa de marcat |
| `marketing` | social media, reclame, recenzii |
| `angajat` | acces de bază la paginile primite |

Separat, `executor` e rolul tehnic al jetoanelor de serviciu ale agenților de pe server; nu se dă unui om.

Peste rol se pot adăuga **drepturi fine** (de exemplu dreptul de a edita meniul) și **pagini** individuale, bifate sau scoase pentru fiecare om. Detaliile sunt în [Roluri și drepturi](#roluri-si-drepturi).

## Modulul

Un modul este o funcție a platformei pe care firma o activează sau nu: meniul, agenția, facturile, Backstage și așa mai departe. Tabelul `module_firma` ține, pentru fiecare firmă, ce module are active.

Un modul inactiv nu apare în meniu. Drepturile pe rute le decide rolul, nu lista de module: azi doar agenția își verifică și modulul la fiecare cerere. Lista completă este în secțiunea **Module** din meniul din stânga.

## Cum se leagă

```text title="Firmă → conturi → roluri → module"
Firma (Ilustromania, agentie)
 ├── module active: agentie, backstage, social, oferte ...
 └── acces_firma
      └── Ana    → rol: marketing
```
