Skip to main content

KPI Management Module

Overview

The KPI module enables structured performance evaluation of employees through configurable templates, time-boxed cycles, and a multi-step review workflow.

Scope

FeatureStatus
KPI Templates CRUD✅ Implemented
KPI Template Import✅ Implemented
KPI Cycles CRUD✅ Implemented
Department-scoped Publishing✅ Implemented
Self-Assessment Flow✅ Implemented
Manager Review Flow✅ Implemented
HR Review Flow✅ Implemented
Accept / Dispute✅ Implemented
Force-Close✅ Implemented
Evidence Attachments✅ Implemented
Reviewer Assignment✅ Implemented
Finance CSV Export✅ Implemented

Data Model

Core Tables

kpi_templates (id, name, ...)
├── has many → kpi_template_items (id, template_id, name, weight)

kpi_cycles (id, title, start_date, end_date, ...)
├── has many → kpi_cycle_departments (cycle_id, department_id, template_id, is_published)

kpi_evaluations (id, cycle_id, employee_id, reviewer_id, status, overall_score, ...)
├── has many → kpi_evaluation_details (id, evaluation_id, template_item_id, self_score, self_comment, manager_score, manager_comment)
├── has many → attachments (polymorphic evidence files)

Relationships

RelationshipDescription
Template → ItemsOne template has many weighted items (must sum to 100)
Cycle → DepartmentsA cycle assigns templates to specific departments
Cycle → EvaluationsPublishing generates one evaluation per eligible employee
Evaluation → DetailsOne detail row per template item per evaluation
Evaluation → ReviewerEmployee assigned to perform manager review

Workflow Engine

Status Transitions

┌─────────────────┐
│ Self-Assessment │ ← Employee submits self-scores
└────────┬────────┘

┌─────────────────┐
│ Manager Review │ ← Reviewer submits manager scores
└────────┬────────┘

┌─────────────────┐
│ HR Review │ ← HR submits overall review
└────────┬────────┘

┌────┴────┐
▼ ▼
┌────────┐ ┌──────────┐
│Accepted│ │ Disputed │ ← Employee responds
└───┬────┘ └────┬─────┘
▼ ▼
┌─────────────────┐
│ Completed │ ← HR force-closes
└─────────────────┘

Transition Guards

FromToWho Can Trigger
Self-AssessmentManager ReviewEmployee (submit self-assessment)
Manager ReviewHR ReviewReviewer (submit manager review)
HR ReviewAcceptedEmployee (accept)
HR ReviewDisputedEmployee (dispute with reason)
Accepted / DisputedCompletedHR / Admin (force-close)

Invalid transitions are rejected by the backend service layer.

Scoring System

Item-Level Scoring

Each KPI item is scored on a 1–5 scale:

ScoreLabel
1Poor
2Below Average
3Average
4Good
5Excellent

Overall Score Calculation

Overall % = Σ (Manager Score_i / 5 × Weight_i)

Example: 3 items with weights 40/30/30 and manager scores 4/3/5:

Overall = (4/5 × 40) + (3/5 × 30) + (5/5 × 30) = 32 + 18 + 30 = 80%

Performance Thresholds

RangeClassificationAction
< 50%PIPPerformance Improvement Plan recommended
50–89%StandardNormal performance
≥ 90%HiPoHigh Potential — consider fast-track confirmation

Architecture

Backend Components

ComponentPathPurpose
KpiTemplate Modelapp/Models/KpiTemplate.phpTemplate with items
KpiCycle Modelapp/Models/KpiCycle.phpCycle with department assignments
KpiEvaluation Modelapp/Models/KpiEvaluation.phpIndividual evaluation records
KpiCycleServiceapp/Services/KpiCycleService.phpCycle publishing logic
KpiEvaluationServiceapp/Services/KpiEvaluationService.phpWorkflow transitions, scoring
KpiTemplateImportServiceapp/Services/KpiTemplateImportService.phpCSV import

Frontend Components

ComponentPathPurpose
Templates Pageapp/dashboard/kpi-templates/page.tsxTemplate list & management
Cycles Pageapp/dashboard/kpi-cycles/page.tsxCycle list
Cycle Detailapp/dashboard/kpi-cycles/[id]/page.tsxDept assignment & publishing
Evaluations Pageapp/dashboard/kpi-evaluations/page.tsxEvaluation list by role

API Endpoints

Templates

MethodEndpointDescription
GET/api/kpi-templatesList templates
POST/api/kpi-templatesCreate template with items
PUT/api/kpi-templates/{id}Update template
DELETE/api/kpi-templates/{id}Delete template
POST/api/kpi-templates/importImport templates from CSV

Cycles

MethodEndpointDescription
GET/api/kpi-cyclesList cycles
POST/api/kpi-cyclesCreate cycle
PUT/api/kpi-cycles/{id}Update cycle
DELETE/api/kpi-cycles/{id}Delete cycle
POST/api/kpi-cycles/{id}/publishPublish (generate evaluations)
GET/api/kpi-cycles/{id}/exportFinance CSV export

Evaluations

MethodEndpointDescription
GET/api/kpi-evaluationsList evaluations
GET/api/kpi-evaluations/{id}Get evaluation detail
POST/api/kpi-evaluations/{id}/self-assessSubmit self-assessment
POST/api/kpi-evaluations/{id}/reviewSubmit manager review
POST/api/kpi-evaluations/{id}/hr-reviewSubmit HR review
POST/api/kpi-evaluations/{id}/acceptEmployee accepts
POST/api/kpi-evaluations/{id}/disputeEmployee disputes
POST/api/kpi-evaluations/{id}/completeHR force-closes
PUT/api/kpi-evaluations/{id}/assign-reviewerAssign reviewer

2026-03 UX Updates

  • KPI evaluation detail now shows live runtime final scoring for both employee and reviewer while filling ratings.
  • Live scoring includes score, percentage, and rated-item progress.
  • HR/dashboard action label was updated to Confirm Final Decision (positive wording, blue action).
  • KPI evidence now supports Preview (images/PDF) in addition to download.