Performance Reviews (تقييمات الأداء)
360-degree performance reviews with self-assessment, manager scoring, and HR finalization. Supports bulk creation for review cycles.
Attributes
| Field | Type | Description |
|---|---|---|
id | integer | Primary key |
employee_id | integer | Employee FK |
reviewer_id | integer | Reviewer (User FK) |
template_id | integer | Review Template FK |
review_period_start | date | Review period start |
review_period_end | date | Review period end |
status | enum | draft, self_review, manager_review, finalized |
self_score | decimal | Employee's self-assessment score |
manager_score | decimal | Manager's score |
final_score | decimal | Final weighted score |
self_comments | text | Employee's comments (nullable) |
manager_comments | text | Manager's comments (nullable) |
hr_comments | text | HR comments (nullable) |
finalized_at | datetime | Finalization timestamp (nullable) |
Review Score Attributes (per KPI)
| Field | Type | Description |
|---|---|---|
performance_review_id | integer | Review FK |
kpi_id | integer | KPI FK |
self_score | decimal | Employee's self-score |
self_comments | text | Employee's comments |
manager_score | decimal | Manager's score |
manager_comments | text | Manager's comments |
Status Workflow
API Endpoints
| Method | URL | Description |
|---|---|---|
GET | /api/hr/performance-reviews | List reviews |
POST | /api/hr/performance-reviews | Create single review |
POST | /api/hr/performance-reviews/bulk | Bulk-create for multiple employees |
GET | /api/hr/performance-reviews/{id} | Show review with scores |
POST | /api/hr/performance-reviews/{id}/submit-self | Submit self-assessment |
POST | /api/hr/performance-reviews/{id}/submit-manager | Submit manager review |
POST | /api/hr/performance-reviews/{id}/finalize | Finalize review |
Examples
bash
# Bulk create reviews for Q1
curl -X POST "https://moon-erp.elbaset.com/api/hr/performance-reviews/bulk" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"template_id": 1,
"review_period_start": "2026-01-01",
"review_period_end": "2026-03-31",
"employee_ids": [1, 2, 3, 4, 5]
}'
# Submit self-review
curl -X POST "https://moon-erp.elbaset.com/api/hr/performance-reviews/1/submit-self" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"self_comments": "I met all my targets this quarter",
"scores": [
{ "kpi_id": 1, "self_score": 85, "self_comments": "Delivered high-quality work" },
{ "kpi_id": 2, "self_score": 90, "self_comments": "Exceeded productivity targets" }
]
}'
# Submit manager review
curl -X POST "https://moon-erp.elbaset.com/api/hr/performance-reviews/1/submit-manager" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"manager_comments": "Good performance overall",
"scores": [
{ "kpi_id": 1, "manager_score": 80, "manager_comments": "Consistent quality" },
{ "kpi_id": 2, "manager_score": 85, "manager_comments": "Good output" }
]
}'
# Finalize
curl -X POST "https://moon-erp.elbaset.com/api/hr/performance-reviews/1/finalize" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{ "hr_comments": "Approved for promotion consideration" }'dart
// Bulk create
final response = await dio.post('/api/hr/performance-reviews/bulk', data: {
'template_id': 1,
'review_period_start': '2026-01-01',
'review_period_end': '2026-03-31',
'employee_ids': [1, 2, 3, 4, 5],
});
// Submit self-review
await dio.post('/api/hr/performance-reviews/1/submit-self', data: {
'self_comments': 'I met all my targets',
'scores': [
{'kpi_id': 1, 'self_score': 85},
{'kpi_id': 2, 'self_score': 90},
],
});Business Rules
- Bulk creation assigns the review template's KPIs and creates score records for each KPI
self_score,manager_score, andfinal_scoreare weighted averages of individual KPI scoresfinal_scoreis calculated as a configurable blend of self and manager scores- Only the assigned employee can submit the self-review
- Only the reviewer (manager) can submit the manager review
- Finalization locks the review and records the timestamp