Workflow: OKR Cycle — Planificare & Evaluare
Module implicate: OKR (Circulation · OKRs · Key Results · Check-ins · Approval) · Goals · DataPulse
Cine îl folosește: Management · Manageri Departamente · Toți Angajații
Durata tipică: Un ciclu = 1 trimestru sau 1 an (configurat în Circulation)
Overview
Modulul OKR implementează metodologia Objectives & Key Results. Un ciclu complet acoperă: definirea perioadei (Circulation), crearea obiectivelor cu rezultate cheie cuantificabile (OKRs + Key Results), check-in-uri periodice de progres cu aprobare opțională pe lanț ierarhic, și închiderea ciclului când progresul atinge 100%.
Atenție la distincții:
- OKR = progres subiectiv pe obiective definite de utilizator (check-in periodic)
- Goals = modul separat; urmărește automat metrici CRM reale (facturi, lead-uri, contracte) față de un target numeric — fără check-in manual
- DataPulse = dashboard de analiză read-only; nu are tabele proprii, nu se integrează cu OKR
tblhr_checkinsdin modulul HR = prezență fizică (oră start/stop) — nu are legătură cu OKR check-ins
Condiție obligatorie: Fără cel puțin un record în
tblokr_setting_circulationcufrom_date/to_datevalide, modulul OKR nu funcționează corect. Aceasta este prima setare de configurat.
Diagrama fluxului
[SETARE CICLU — admin, o dată per perioadă]
│
├── Circulation: definire perioadă (ex: Q1 2026: 01.01–31.03)
├── Units: unități de măsură (%, RON, nr. bucăți)
├── Questions: întrebări afișate la fiecare check-in
├── Evaluation Criteria: scoruri de evaluare per criteriu
└── Approval Setting (opțional): cine aprobă check-in-urile
│
↓
[CREARE OKR]
│
├── Tip: Personal (1) · Departament (2) · Companie (3)
├── Display: Public (1) · Privat (2)
├── Obiectiv + Key Results (target, unitate, plan)
└── approval_status = 0 (draft)
│
↓
[CHECK-IN PERIODIC]
│
├── Utilizator deschide okr/checkin_detailt/{id}
├── Completează per Key Result: achieved, progress (0–100%), confidence_level
├── Completează: evaluation_criteria (scor), comment, răspunsuri la Questions
├── Setează: recently_checkin (azi) + upcoming_checkin (data viitoare)
└── Submit → approval_status = 3 (Waiting for Approval)
│
↓
[APROBARE CHECK-IN]
│
├── Dacă NU există Approval Setting pentru departamentul/OKR-ul respectiv:
│ → approval_status = 1 (Aprobat automat) ← imediat
│
└── Dacă EXISTĂ Approval Setting:
├── Sistem rezolvă aprobatorii (direct_manager / department_manager / staff fix)
├── Notificare trimisă primului aprobator
├── Aprobator aprobă (approve=1) sau respinge (approve=-1)
│ → Dacă toți aprobă: approval_status = 1
│ → Dacă cineva respinge: approval_status = 2
└── Creator notificat cu approved_checkin / rejected_checkin
│
↓
[PROGRES ACTUALIZAT]
│
├── okrs.progress = media progreselor tuturor Key Results
├── Dacă progress = 100% → okrs.status = 1 (Finished)
└── Log imutabil în tblokrs_checkin_log (snapshot complet)
│
↓
[ÎNCHIDERE CICLU]
│
├── OKRs cu status=1 (Finished) sunt complet realizate
├── Raport ciclu: progres · confidence levels · check-in history
└── Admin poate vedea rapoarte (necesită permisiunea reports → view)
[CICLU ÎNCHEIAT ✓]
Pas cu pas
1. Configurare ciclu (admin)
Unde: /admin/okr → Settings
1a. Circulation — obligatoriu
Tab: Settings → Circulation → Add Circulation
| Câmp | Tip | Descriere |
|---|---|---|
name_circulation |
varchar | Ex: „Q1 2026", „Annual 2026" |
from_date |
DATE | Primul de zi al perioadei |
to_date |
DATE | Ultima zi a perioadei |
Sistemul detectează automat ciclul curent prin MONTH(NOW()) = month(from_date) AND YEAR(from_date) = YEAR(NOW()). Dacă nu există un ciclu cu from_date în luna curentă, OKR-urile noi nu se pot lega de un ciclu activ.
1b. Units
Tab: Settings → Units → Add Unit
Exemple: %, RON, USD, Bucăți, Nr. clienți. Unitățile sunt selectabile pe fiecare Key Result.
1c. Questions (opțional)
Tab: Settings → Questions → Add Question
Întrebările configurate aici apar obligatoriu pe formularul de check-in pentru toți utilizatorii. Ex: „Ce a mers bine?", „Ce blocaje există?", „Ce ajutor ai nevoie?".
1d. Evaluation Criteria (opțional)
Tab: Settings → Evaluation Criteria → Add Criteria
Scoruri numerice pe criterii definite (ex: group_criteria=1, name="Calitate output", scores=85). La check-in, utilizatorul selectează un criteriu și sistemul înregistrează scorul.
1e. Approval Setting (opțional)
Tab: Settings → Approval Process → Add Approval
Dacă nu configurați nicio regulă de aprobare, toate check-in-urile sunt aprobate automat (approval_status = 1 imediat după submit).
| Câmp | Descriere |
|---|---|
name |
Denumire regulă |
department |
ID-urile departamentelor vizate (FIND_IN_SET lookup) |
okrs |
ID-urile OKR-urilor specifice vizate (alternativă la department) |
setting |
JSON cu lanțul de aprobatori (noduri) |
choose_when_approving |
0 = sistem rezolvă aprobatorul automat; 1 = utilizatorul alege aprobatorul la momentul check-in-ului |
number_day_approval |
Deadline în zile pentru fiecare aprobator |
notification_recipient |
Staff notificați suplimentar (CC) |
Tipuri de aprobatori în JSON setting:
| Tip aprobator | Cum este rezolvat |
|---|---|
direct_manager |
tblstaff.team_manage al utilizatorului care face check-in |
department_manager |
tbldepartments.manager_id al departamentului OKR-ului |
staff |
Staffid fix specificat explicit |
Atenție: Pentru
direct_managerșidepartment_manager, câmpurileteam_managepe staff respectivmanager_idpe departament trebuie populate. Dacă lipsesc, rezolvarea eșuează și check-in-ul poate rămâne blocat.
2. Creare OKR
Unde: /admin/okr → New OKR
| Câmp | Valori | Note |
|---|---|---|
type |
1=Personal · 2=Departament · 3=Companie |
Personal: person_assigned = utilizatorul curent |
display |
1=Public · 2=Privat |
Privat: vizibil doar owner + creator |
circulation |
FK → tblokr_setting_circulation | Ciclul activ |
okr_superior |
FK → alt OKR | OKR părinte (pentru ierarhie OKR) |
okr_cross |
lista de ID-uri | OKR-uri încrucișate (cross-OKR) |
category |
FK → tblokr_setting_category | Categoria obiectivului |
Permisiune necesară:
okr → viewSAUokr → view_ownSAUis_admin(). Utilizatorii cuview_ownpot crea doar OKR-uri personale (type=1) asignate lor înșiși.
Key Results
Se adaugă după crearea OKR-ului. Fiecare Key Result are:
| Câmp | Descriere |
|---|---|
main_results |
Descrierea rezultatului cheie |
target |
Valoarea țintă (număr) |
unit |
FK → tblokr_setting_unit |
plan |
Planul de acțiune |
tasks |
ID-uri de Tasks din CRM legate de acest Key Result |
3. Check-in periodic
Unde: /admin/okr → click OKR → butonul Check-in
Condiție de acces: approval_status trebuie să fie 0 (draft) sau 1 (aprobat). Dacă este 2 (respins) sau 3 (în așteptare), butonul de check-in este ascuns.
La fiecare check-in, sistemul înlocuiește complet rândurile din tblokrs_checkin pentru OKR-ul respectiv (nu adaugă — suprascrie starea curentă). Istoricul este păstrat în tblokrs_checkin_log (imutabil).
Câmpuri completate per Key Result:
| Câmp | Obligatoriu | Descriere |
|---|---|---|
achieved |
Da | Valoarea realizată curentă |
progress |
Da | Procent 0–100 |
confidence_level |
Da | 1=Is fine · 2=Not so good · 3=Very good |
evaluation_criteria |
Dacă configurat | Scorul din grila definită |
comment |
Nu | Comentariu liber |
answer |
Dacă există Questions | Răspunsuri la întrebările din Settings |
Câmpuri la nivel de OKR:
| Câmp | Descriere |
|---|---|
recently_checkin |
Data de azi (check-in curent) |
upcoming_checkin |
Data planificată a urmatorului check-in |
Calcul progres agregat:
total_progress = (suma progress-urilor tuturor KR) / (număr KR × 100) × 100
Dacă total_progress = 100 → okrs.status = 1 (Finished) și complete_okrs = 1.
4. Fluxul de aprobare
Fără reguli de aprobare configurate: check-in-ul este aprobat automat (approval_status = 1) imediat după submit.
Cu reguli de aprobare:
Submit check-in
→ approval_status = 3 (Waiting)
→ sistem caută Approval Setting via FIND_IN_SET(department) sau FIND_IN_SET(okrs_id)
→ primul aprobator notificat
Aprobator deschide cererea → aprobă sau respinge
→ toți aprobatori aprobă → approval_status = 1
→ orice respingere → approval_status = 2
→ creator notificat
Dacă choose_when_approving = 1, utilizatorul care face check-in selectează manual aprobatorul dintr-un dropdown la momentul submit-ului.
5. Goals — modul separat
Unde: /admin/goals
Goals urmărește automat metrici CRM reale față de un target numeric. Nu are check-in manual, nu are aprobare.
goal_type |
Ce măsoară automat |
|---|---|
1 |
Plăți primite (din tblinvoicepaymentrecords) |
2 |
Leads convertite în clienți |
3 |
Clienți noi din leads |
4 |
Toți clienții noi |
5 |
Contracte adăugate (per tip) |
6 |
Oferte convertite |
7 |
Contracte după dată start |
8 |
Total facturi |
La finalul perioadei (end_date), dacă targetul nu a fost atins și notify_when_fail=1, sistemul trimite notificare. Similar pentru atingere target cu notify_when_achieve=1.
6. DataPulse
Unde: /admin/datapulse
Dashboard de analiză read-only cu 16 tipuri de grafice (plăți per agent, clienți pe județ, leads pe sursă, timp logat pe angajat etc.). Nu are tabele proprii — citește direct din tabelele CRM core. Nu necesită configurare și nu are permisiuni granulare (orice staff autentificat poate accesa).
Statusuri OKR
| Câmp | Valoare | Etichetă |
|---|---|---|
okrs.status |
0 |
Unfinished |
okrs.status |
1 |
Finished (setat automat când progress=100%) |
okrs.approval_status |
0 |
Draft |
okrs.approval_status |
1 |
Approved |
okrs.approval_status |
2 |
Rejected |
okrs.approval_status |
3 |
Waiting for Approval |
Permisiuni necesare
| Permisiune | Acces |
|---|---|
okr → view |
Vede toate OKR-urile din sistem |
okr → view_own |
Vede doar OKR-urile proprii (person_assigned = self sau creator = self) |
okr → edit |
Editare OKR-uri (view_own poate edita doar pe ale sale) |
okr → delete |
Ștergere |
| Settings OKR | is_admin() exclusiv |
reports → view |
Acces la secțiunea Report din OKR |
Gotchas
| Problemă | Cauză | Soluție |
|---|---|---|
| OKR-urile nu apar în dashboard | Lipsește Circulation cu from_date în luna curentă |
Creați un ciclu cu from_date = prima zi a lunii curente |
| Butonul Check-in nu apare | approval_status este 2 sau 3 |
Aprobatorul trebuie să proceseze cererea anterioară înainte de un nou check-in |
| Aprobatorul nu primește notificare | team_manage sau manager_id nu sunt setate pe staff/departament |
Completați câmpurile în HR → Staff respectiv Settings → Departments |
| Check-in-ul a șters progresul anterior | Comportament corect — check-in-ul suprascrie starea curentă | Istoricul complet se regăsește în tblokrs_checkin_log |
choose_when_approving=1 dar nu apare dropdown |
Aprobatorul nu a fost setat în approval_setting | Verificați că choose_when_approving=1 în setarea respectivă |
Referințe module
- OKR — documentație modul
- Goals — target-uri automate CRM
- DataPulse — dashboard analiză
- HR — Staff — câmpul
team_managepentru direct_manager - HR — Payroll — bonus_kpi alimentat din OKR progress
Creați perioada de circulație (trimestrul OKR) în Setări înainte de începerea trimestrului — angajații nu pot înregistra OKR-uri față de o perioadă care nu a fost configurată, deci acest singur pas administrativ deblochează întreaga organizație din prima zi a trimestrului.
Disciplina OKR depinde de check-in-urile săptămânale, nu de software. Configurați întrebările de check-in în Setări pentru a ghida contribuitorii cu actualizări structurate — o platformă care captează valoarea progresului, nivelul de încredere și blocajele în mod consecvent face revizuirile bazate pe date, nu anecdotice.