Workflow: HR Performance Review — Evaluare & Salarizare
Module implicate: OKR · HR (Promotions · Warnings · Workshops · Awards) · HR Profile (Bonus/Discipline · Contracts · Training) · HR Payroll
Cine îl folosește: HR Manager · Manageri Departamente · Angajați
Durata tipică: Ciclu trimestrial (OKR check-ins) + ciclu lunar (salarizare) + ciclu anual (evaluare completă)
Overview
CRMConnect nu are un formular dedicat de „evaluare anuală" — review-ul de performanță este asamblat din mai multe module independente. Fiecare modul contribuie cu o piesă distinctă:
| Modul / Tabel | Contribuție |
|---|---|
OKR (tblokrs + tblokrs_checkin) |
Progresul obiectivelor + evaluare calitativă per check-in |
HR Profile (tblbonus_discipline) |
Înregistrare formală bonus sau disciplinară |
HR Profile (tblhr_promotions) |
Log promoție (schimbare de funcție/designation) |
HR Profile (tblhr_warnings) |
Avertismente formale |
HR (tblhr_workshops) |
Participare la training-uri |
HR Payroll (tblhrp_bonus_kpi) |
Bonus KPI alimentat manual în payroll |
HR Payroll (tblhrp_payslips) |
Fluturasul de salariu lunar (declanșat manual) |
Atenție critică —
tblhr_checkins: Tabelultblhr_checkinsdin modulul HR reprezintă prezența fizică (oră intrare/ieșire la locul de muncă), NU check-in-urile OKR. Cele două nu au nicio legătură.
Payroll nu rulează automat. Nu există cron sau trigger automat pentru salarizare. Fiecare fluturaf de salariu este creat și închis manual de HR.
Diagrama fluxului
[PREGĂTIRE CICLU — admin HR, o dată per perioadă]
│
├── OKR: creare Circulation (perioadă) + Units + Questions + Evaluation Criteria
├── HR Payroll: configurare template fluturaf + earning list + deduceri + taxe
└── HR Profile: contracte staff cu contract_status='valid'
│
↓
[SETARE OBIECTIVE — începutul perioadei]
│
├── Manager/Angajat creează OKR-uri personale (type=1) legate de Circulation
└── Key Results definite: target, unitate, plan
│
↓
[CHECK-IN-URI PERIODICE — pe tot parcursul perioadei]
│
├── Angajat completează check-in: achieved, progress, confidence_level, evaluation_criteria
├── Aprobare opțională (dacă Approval Setting configurat): manager aprobă/respinge
└── Log imutabil creat în tblokrs_checkin_log la fiecare check-in
│
↓
[EVALUARE FORMALĂ — la finalul perioadei]
│
├── [A] Manager înregistrează Bonus/Disciplinary în HR Profile
│ → tblbonus_discipline + tblbonus_discipline_detail per angajat
│
├── [B] Manager înregistrează Avertisment (dacă e cazul)
│ → tblhr_warnings (from_user_id, user_id, title, type_id)
│
└── [C] Manager verifică participări la Workshops/Training
→ tblhr_workshops + tblhr_workshop_employees
│
↓
[PROMOȚIE (dacă e cazul)]
│
├── HR înregistrează promoție: tblhr_promotions (user_id, designation_id, title, date)
└── ⚠ Promoția este un LOG — nu actualizează automat designation-ul pe staff
HR trebuie să actualizeze manual câmpul designation pe fișa angajatului
│
↓
[BONUS KPI → PAYROLL]
│
├── HR introduce manual bonus KPI în HR Payroll:
│ tblhrp_bonus_kpi: staffid, month_bonus_kpi, bonus_kpi (valoare)
└── La generarea fluturafului, coloana bonus_kpi (taking_method='system')
preia automat valoarea din acest tabel
│
↓
[GENERARE FLUTURAF — lunar, manual]
│
├── Verificare prealabilă: contract staff cu contract_status='valid' pentru luna respectivă
├── HR Payroll → Payslips → New Payslip:
│ payslip_month, payslip_template_id, payslip_range
├── Status: payslip_opening (editabil)
├── Sistem agregă automat (dacă integrările sunt active):
│ - Timesheets: zile lucrate, concedii plătite/neplătite
│ - HR Profile: salariu din contract, funcție, date personale
│ - Commission: comisioane lunii
│ - Bonus KPI: din tblhrp_bonus_kpi
├── HR verifică și ajustează valorile în spreadsheet
└── HR Payroll → Payslip → Close Payslip → status: payslip_closing
→ scrie tblhrp_payslip_details (detalii finale per angajat)
→ scrie tblhrp_income_taxs (impozit calculat)
[CICLU COMPLET ✓ — OKR închis · Bonus înregistrat · Salariu procesat]
Pas cu pas
1. Configurare HR Payroll (admin — o singură dată)
Unde: /admin/hr_payroll → Settings
1a. Integrări
| Opțiune | Valoare | Efect |
|---|---|---|
integrated_hrprofile |
1 |
Trage salariu + date angajat din HR Profile (contracte, funcție, cod fiscal) |
integrated_timesheets |
1 |
Trage zilele lucrate/concedii din modulul Timesheets |
integrated_commissions |
1 |
Include comisioanele lunii din modulul Commission |
standard_working_time |
160 (implicit) |
Ore de lucru standard per lună |
integration_actual_workday |
"W,B" (implicit) |
Coduri de prezență care contează ca zi lucrată |
integration_paid_leave |
"AL,HO,EB" (implicit) |
Coduri concediu plătit |
integration_unpaid_leave |
"U,SI,UB,P" (implicit) |
Coduri concediu neplătit |
1b. Taxe și impozite
Unde: HR Payroll → Settings → Income Tax Rates
Introduceți tranșele de impozitare în tblhrp_income_tax_rates:
| Câmp | Descriere |
|---|---|
tax_bracket_value_from / to |
Intervalul venitului impozabil |
tax_rate |
Cota de impozit (%) |
equivalent_value |
Valoare echivalentă tranșă |
Și rebate-urile (scutiri) în tblhrp_income_tax_rebates: code, description, value.
1c. Template fluturaf
Unde: HR Payroll → Settings → Payslip Templates → New Template
Un template definește:
- Care angajați/departamente/roluri sunt incluși (
department_id,role_employees,staff_employees) - Coloanele afișate (
payslip_columns— dintblhrp_payroll_columns) - Exceptii per staff (
except_staff)
Coloane sistem disponibile (preluate automat când taking_method='system'):
column_key |
Sursă |
|---|---|
actual_workday |
Timesheets |
paid_leave |
Timesheets (coduri AL, HO, EB) |
unpaid_leave |
Timesheets (coduri U, SI, UB, P) |
gross_pay |
Calculat din contract |
commission_amount |
tblhrp_commissions (din Commission module) |
bonus_kpi |
tblhrp_bonus_kpi (introdus manual de HR) |
income_tax_paye |
Calculat din tranșe |
net_pay |
gross_pay - deduceri - taxe |
total_cost |
Cost total angajator |
1d. Contract angajat (obligatoriu pentru payroll)
Unde: HR Profile → Staff → fișa angajat → tab Contracts
Condiție critică: Numai contractele cu contract_status = 'valid' sunt incluse în payroll. Staff fără contract valid în luna respectivă nu apare în fluturaf.
| Câmp contract | Descriere |
|---|---|
contract_code |
Număr contract |
name_contract |
FK → tblhr_staff_contract_type |
start_valid / end_valid |
Valabilitate |
contract_status |
Trebuie să fie 'valid' |
hourly_or_month |
Tip remunerare |
2. OKR — setare obiective
Unde: /admin/okr → New OKR
Creați OKR-uri personale (type=1) pentru fiecare angajat evaluat:
| Câmp | Valoare recomandată |
|---|---|
type |
1 (Personal) |
person_assigned |
staffid angajat |
circulation |
Ciclul perioadei de evaluare |
display |
1 (Public) — vizibil managerului |
Adăugați Key Results cu target numeric, unit (ex: %, RON, nr. proiecte) și plan de acțiune.
Referință completă pentru OKR: Vezi Workflow 20 — OKR Cycle pentru detalii despre check-in-uri și aprobare.
3. Bonus/Disciplinar formal (HR Profile)
Unde: /admin/hr_profile → Bonus & Discipline → Add
Câmpuri tblbonus_discipline:
| Câmp | Descriere |
|---|---|
name |
Denumire eveniment (ex: „Bonus performanță Q1") |
id_criteria |
JSON array cu IDs din tblrec_criteria (criterii de evaluare) |
type |
Tipul (1=bonus) |
from_time |
Perioada de referință |
approver |
staffid aprobator (aprobare single-step) |
status |
Statusul înregistrării |
Detalierea per angajat (tblbonus_discipline_detail):
| Câmp | Descriere |
|---|---|
staff_id |
Angajatul vizat |
lever_bonus |
Nivelul bonusului |
formality |
Forma (ex: cash, scrisoare) |
formality_value |
Valoarea (sumă sau text) |
description |
Justificare |
Criterii de evaluare utilizate (tblrec_criteria — modul Recruitment, reutilizat):
Câmpurile score_des1..score_des5 definesc 5 niveluri de scor descriptiv per criteriu.
4. Avertismente formale
Unde: /admin/hr → Warnings → Add Warning
| Câmp | Descriere |
|---|---|
from_user_id |
Cine emite avertismentul (manager/HR) |
user_id |
Angajatul care primește |
title |
Subiectul avertismentului |
type_id |
Tipul avertismentului (din lookup) |
img |
Atașament (document) |
5. Promoție
Unde: /admin/hr → Employee → fișa angajat → Add Promotion
| Câmp | Descriere |
|---|---|
title |
Denumire promoție (ex: „Promovat Senior Developer") |
user_id |
Angajatul promovat |
designation_id |
Noua funcție (din tbldesignations) |
date |
Data efectivă |
Atenție:
tblhr_promotionseste un jurnal — nu actualizează automat câmpuldesignation_idpetblstaff. HR trebuie să actualizeze manual fișa angajatului după înregistrarea promoției.
6. Training / Workshop
Unde: /admin/hr → Workshops → Add Workshop
| Câmp | Descriere |
|---|---|
description |
Descrierea training-ului |
mode |
internal sau external |
cost |
Costul training-ului |
date_start / date_end |
Perioada |
type_id |
Tip workshop (din lookup) |
trainer_id / trainer_name |
Trainerul |
Adăugați participanți în tblhr_workshop_employees: legătură user_id + workshop_id.
7. Bonus KPI în payroll
Unde: /admin/hr_payroll → Bonus KPI → Add
| Câmp | Descriere |
|---|---|
staffid |
Angajatul |
month_bonus_kpi |
Luna (ex: 2026-03) |
bonus_kpi |
Valoarea bonusului (varchar 100 — sumă sau procent) |
La generarea fluturafului pentru luna respectivă, coloana bonus_kpi (cu taking_method='system' și function_name='bonus_kpi') preia automat valoarea din acest tabel.
8. Generare și închidere fluturaf
Unde: /admin/hr_payroll → Payslips → New Payslip
Statusuri fluturaf:
| Status | Semnificație |
|---|---|
payslip_opening |
Fluturaf deschis — editabil, calculele se actualizează |
payslip_closing |
Fluturaf închis — valorile finale scrise în tblhrp_payslip_details |
Pași:
- New Payslip: completați
payslip_month(luna),payslip_template_id,payslip_range(intervalul în lună) - Sistemul generează spreadsheet JSON în
payslip_dataagregând toate sursele configurate - HR verifică valorile în spreadsheet-ul editat (Luckysheet format)
- Ajustați manual dacă necesar (deduceri speciale, corecții)
- Close Payslip (necesită permisiunea
hrp_payslip → edit):- Parsează spreadsheet-ul
- Scrie
tblhrp_payslip_details(câte un rând per angajat cu toate valorile finale) - Scrie
tblhrp_income_taxs(impozitul calculat per angajat) - Status devine
payslip_closing
- HR poate reface un fluturaf închis: butonul Reset → status revine la
payslip_opening
Fluxuri de aprobare în HR
| Modul | Tabel | Mecanism |
|---|---|---|
| OKR check-in | tblokr_approval_setting + tblokr_approval_details |
Multi-step complet cu deadline + notificări |
| Bonus/Discipline | tblbonus_discipline.approver |
Un singur aprobator, câmp varchar — fără tabel de tracking |
| Demisie/Plecare | tblhr_list_staff_quitting_work.approval |
Câmp varchar simplu: 'approved' |
| Fluturaf salariu | Nicio aprobare | Închis manual de HR cu permisiunea hrp_payslip → edit |
Permisiuni necesare
| Modul | Permisiune | Acces |
|---|---|---|
| OKR | okr → view / view_own |
Vizualizare OKR-uri |
| OKR | Settings OKR | is_admin() exclusiv |
| HR | hr_employees → view/create/edit/delete |
Fișe angajați |
| HR | hr_workshops → view/create/edit/delete |
Training-uri |
| HR | hr_awards → view/create |
Premii |
| HR | hr_warnings → view/create |
Avertismente |
| HR Profile | hr_profile → view/edit |
Date extinse angajat, contracte |
| HR Payroll | hr_payroll → view |
Vizualizare fluturași |
| HR Payroll | hrp_payslip → edit |
Închidere fluturaf (Close Payslip) |
| HR Payroll | hrp_settings → view |
Configurare payroll |
Gotchas
| Problemă | Cauză | Soluție |
|---|---|---|
| Angajatul nu apare în fluturaf | Contract lipsă sau contract_status ≠ 'valid' |
Adăugați/validați contractul în HR Profile → Contracts |
| Bonus KPI nu apare în fluturaf | tblhrp_bonus_kpi gol pentru luna respectivă |
Introduceți manual bonusul în HR Payroll → Bonus KPI |
| Comisionul nu apare în fluturaf | integrated_commissions=0 sau commission modul inactiv |
Activați integrarea din HR Payroll → Settings |
| Zilele lucrate sunt 0 | integrated_timesheets=0 sau Timesheets nu au date |
Activați integrarea și verificați că timesheets-urile sunt completate |
| Promoția nu a schimbat funcția angajatului | tblhr_promotions este doar un log |
Actualizați manual câmpul Designation pe fișa Staff |
| Fluturaf închis incorect | payslip_closing e final |
Folosiți butonul Reset Payslip pentru a reveni la payslip_opening și a corecta |
| Check-in OKR blocat | approval_status=3 (în așteptare) |
Aprobatorul trebuie să proceseze cererea anterioară |
tblhr_checkins arată prezență, nu OKR |
Module diferite — confuzie frecventă | hr_checkins = pontaj fizic; OKR check-ins sunt în tblokrs_checkin |
Referințe module
- Workflow 20 — OKR Cycle — detalii complete despre check-in-uri și aprobare OKR
- Workflow 19 — Comision — comisioane integrate în payroll
- HR — Staff — fișe angajați
- HR — Payroll — documentație modul payroll
- HR — Recruitment — criterii de evaluare (
tblrec_criteria) - Timesheets — prezență și zile lucrate
Creați perioada de circulație OKR înainte de începerea ciclului de performanță — angajații nu pot înregistra check-in-uri față de o perioadă neconfigurate, iar crearea obiectivelor la mijlocul perioadei pierde datele timpurii care fac analiza de tendință semnificativă.
Revizuirile de performanță sunt cele mai credibile când sunt bazate pe date cantitative de progres OKR. Impuneți check-in-uri săptămânale pe tot parcursul ciclului — un singur punct de date este o opinie; o tendință este dovadă.