Skip to content

Performance Reviews (تقييمات الأداء)

360-degree performance reviews with self-assessment, manager scoring, and HR finalization. Supports bulk creation for review cycles.

Attributes

FieldTypeDescription
idintegerPrimary key
employee_idintegerEmployee FK
reviewer_idintegerReviewer (User FK)
template_idintegerReview Template FK
review_period_startdateReview period start
review_period_enddateReview period end
statusenumdraft, self_review, manager_review, finalized
self_scoredecimalEmployee's self-assessment score
manager_scoredecimalManager's score
final_scoredecimalFinal weighted score
self_commentstextEmployee's comments (nullable)
manager_commentstextManager's comments (nullable)
hr_commentstextHR comments (nullable)
finalized_atdatetimeFinalization timestamp (nullable)

Review Score Attributes (per KPI)

FieldTypeDescription
performance_review_idintegerReview FK
kpi_idintegerKPI FK
self_scoredecimalEmployee's self-score
self_commentstextEmployee's comments
manager_scoredecimalManager's score
manager_commentstextManager's comments

Status Workflow

API Endpoints

MethodURLDescription
GET/api/hr/performance-reviewsList reviews
POST/api/hr/performance-reviewsCreate single review
POST/api/hr/performance-reviews/bulkBulk-create for multiple employees
GET/api/hr/performance-reviews/{id}Show review with scores
POST/api/hr/performance-reviews/{id}/submit-selfSubmit self-assessment
POST/api/hr/performance-reviews/{id}/submit-managerSubmit manager review
POST/api/hr/performance-reviews/{id}/finalizeFinalize 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, and final_score are weighted averages of individual KPI scores
  • final_score is 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

Moon ERP API Documentation