Skip to main content

Exam Management

Overview

Full lifecycle of exams: create exam, define schedule, enter results, generate report cards.

Exam Types

TypeDescription
UNIT_TESTWeekly/monthly test
PERIODIC_TESTTerm exam
SEMESTERHalf-yearly / Annual
MOCKPractice exam

Create Exam

POST /school-admin/exam/create
{
"data": {
"name": "Periodic Test 1",
"type": "PERIODIC_TEST",
"academicYearId": "uuid",
"startDate": "2024-04-10",
"endDate": "2024-04-20",
"classes": ["uuid1", "uuid2"]
}
}

Exam Schedule

Assigns date, time, subject, and room per class:

POST /school-admin/exam/schedule
{
"data": {
"examId": "uuid",
"schedule": [
{ "classId": "uuid", "subjectId": "uuid", "date": "2024-04-10", "startTime": "09:00", "durationMinutes": 180, "room": "101" },
{ "classId": "uuid", "subjectId": "uuid2", "date": "2024-04-11", "startTime": "09:00", "durationMinutes": 180, "room": "102" }
]
}
}

Result Entry

Per Student Per Subject

POST /school-admin/exam/result
{
"data": {
"examId": "uuid",
"studentId": "uuid",
"subjectId": "uuid",
"marksObtained": 78,
"maxMarks": 100,
"grade": "B1"
}
}

Bulk Upload

POST /school-admin/exam/result/upload
Content-Type: multipart/form-data

// CSV format:
// studentId,subjectId,marksObtained,maxMarks,grade
// uuid1,uuidA,78,100,B1
// uuid1,uuidB,85,100,A2

Grade Calculation

Configured per school:

const gradeMap = [
{ min: 90, max: 100, grade: 'A1', points: 10 },
{ min: 80, max: 89, grade: 'A2', points: 9 },
{ min: 70, max: 79, grade: 'B1', points: 8 },
{ min: 60, max: 69, grade: 'B2', points: 7 },
{ min: 50, max: 59, grade: 'C1', points: 6 },
{ min: 40, max: 49, grade: 'C2', points: 5 },
{ min: 33, max: 39, grade: 'D', points: 4 },
{ min: 0, max: 32, grade: 'E', points: 0 },
];

// CGPA calculation
const cgpa = sum(subjectPoints) / numberOfSubjects;

Report Card Generation

GET /school-admin/exam/report-card/:studentId?examId=uuid

Returns structured report card data including:

  • Marks per subject with grade
  • Total marks, percentage, CGPA
  • Class rank
  • Attendance during exam period

Teacher Result Entry (Teachers App)

Teachers with write permission for the exam module can enter results:

POST /teacher/exams/result
{
"data": {
"examId": "uuid",
"studentId": "uuid",
"subjectId": "currentTeacherSubjectId",
"marksObtained": 65,
"maxMarks": 80,
"grade": "B2"
}
}