Configurări versionate

De ce versionare

Într-un magazin / restaurant tipic, în mod constant se modifică:

Ce este versionat

Catalog produse - Fiecare modificare (preț, descriere, fotografie) creează o versiune nouă. - Vezi istoric: "preț era 85 MDL pe 1 ian, modificat la 90 MDL pe 15 mar (de Andrei) cu motivul 'inflație furnizor'".

Setări site - Tema vizuală. - Conținutul paginilor statice. - Politici (T&C, retur, confidențialitate). - Liste navigație.

Configurări fiscale - Cote TVA per categorie produs. - Numerotare facturi (serii). - Date firmă (adresă, IDNO).

Roluri & permisiuni - Modificările pe drepturile unui rol. - Atribuirile de roluri către utilizatori.

Configurări HoReCa - Diviziile per POS. - Atribuirea produselor la divizii. - Praguri aprobare pierderi.

Rețete (BOM) - Modificările cantităților ingredientelor (vezi Rețete & BOM). - Adăugare / eliminare ingrediente.

Cum se vede istoricul

Pentru fiecare entitate versionată, ai un buton Istoric:

Produs: Pizza Margherita
═══════════════════════════════════════════════════════
Versiunea curentă (23): preț 85 MDL, BOM v3
Modificată: 23 apr 2026, 09:15, de Andrei
Motiv: "Update preț ingrediente noi"
─────────────────────────────────────────────────────
Versiuni anterioare:
  v22 (15 mar 2026): preț 80 MDL, BOM v3 — Andrei
  v21 (1 ian 2026):  preț 80 MDL, BOM v2 — Andrei
  v20 (15 dec 2025): preț 75 MDL, BOM v2 — Sergiu
  v19 (1 nov 2025):  preț 75 MDL, BOM v1 — Sergiu
  [...vezi mai vechi]

Cu un click pe orice versiune anterioară:

Diferențe între versiuni

Pentru orice 2 versiuni, sistemul afișează diferențele clar:

Diff Pizza Margherita: v22 → v23

Câmp                  v22                 v23
─────────────────────────────────────────────────
preț                  80 MDL              85 MDL  ⚠ +6%
descriere             "Sos roșii, ..."    "Sos roșii proaspete, ..."  (modif)
foto                  pizza-v3.jpg        pizza-v4.jpg  (înlocuit)
BOM                   v3                  v3      (nemodificat)

Util pentru "ce s-a schimbat de când vorbeam ultima dată".

Audit cine ce a modificat

Fiecare versiune logează:

Util pentru:

Aprobări înainte de publicare

Pentru anumite modificări sensibile (configurabil), sistemul cere aprobare înainte ca modificarea să fie live:

Workflow:

  1. Operator face modificarea → status pending-approval.
  2. Aprobator notificat.
  3. Aprobă → modificarea devine live, versiune nouă creată.
  4. Sau respinge cu motiv → modificarea revertită, operator notificat.

Reveniri (rollback)

Rollback-ul se face manual, aplicând valoarea unei versiuni anterioare peste variabila curentă:

Toate revenirile sunt logate la fel — noua versiune apare în audit cu autor + timestamp + valoarea aplicată.

Notă onestă: nu avem astăzi un buton "snapshot global — revino la ieri" care să restaureze automat un set de variabile la o dată anterioară. Fiecare variabilă are istoric individual — restaurarea coordonată se face manual sau prin script custom.

Comparare configurații între locații

Pentru lanțuri cu mai multe locații:

Export configurări

Configurările din SharedRefs sunt accesibile ca JSON direct din UI (valoarea fiecărei variabile e vizibilă ca text JSON, poate fi copiată cu clipboard). Pentru export coordonat al mai multor variabile / colecții, la cerere se poate genera un dump JSON prin API — util pentru:

Notă onestă: nu avem astăzi un buton "Export configurări" în UI, nici export YAML. Fiecare variabilă poate fi copiată individual din audit-log (JSON). Export coordonat = serviciu asistat contra timp.

Performanță

Tur vizual — SharedRefs Manager

Aplicația SharedRefs Manager e centrul de comandă pentru configurările versionate: fiecare "ref" (variabilă de configurare) trăiește într-o colecție, la un context (global / POS / user / device-local), cu istoric integral.
Overview sidebar cu colecțiile disponibile
Buton + New variable pentru creare rapidă
Buton ↻ Refresh pentru reîncărcare din server
Search filter — găsire rapidă după ref_id
Expandare colecție → contexte disponibile
Sidebar cu contextele (global/pos/user/device-local)
Panel de detalii — refs în contextul curent

Audit log per colecție

Fiecare colecție are un buton 📜 lângă contorul de refs care deschide dialog-ul de audit — istoricul complet al scrierilor pe acea colecție (create/update/upsert/remove), cu utilizator, timestamp, context și snippet valoare.
Buton 📜 audit-log per colecție
Dialog audit-log deschis
Modificare limit (50/100/200/500) pentru numărul de intrări afișate

Creare variabilă nouă — pas cu pas

Butonul + New variable din header deschide un dialog cu 5 câmpuri: collection (grupare logică), ref_id (numele variabilei), ctx_type (global / user / pos / maintainer / device-local), ctx_key (identificator context) și value (JSON). După apăsarea Create variabila apare în tree cu toast de confirmare + intrare în audit-log.
Pas 1 — cursor pe + New variable
Pas 2 — dialog editor deschis cu toate câmpurile
Pas 3 — collection completat (ex: <code>docs-demo</code>)
Pas 4 — ref_id completat (ex: <code>welcome-message</code>)
Pas 5 — ctx_type ales (<code>global</code>)
Pas 6 — ctx_key completat (<code>*</code> pentru global)
Pas 7 — value JSON populat
Pas 8 — cursor pe butonul Create
Pas 9 — variabila apare în tree cu toast „Created"

Următorul pas

→ Backup & monitorizare.

sgapps.io