---
title: "Metrics Reference | Campus | Ilmiya Documentation"
description: "A plain-language breakdown of every metric tracked in Campus — where each number comes from and the exact formula behind it."
url: "https://ilmiya.com/docs/campus/awards/metrics-reference/"
language: "en"
---

<a id="_top"></a>

# Metrics Reference

How every student metric is measured and calculated. A plain-language breakdown of the 14 metrics tracked in Campus — where each number comes from and the exact formula behind it. Scoring and gamification are calculated on our servers; the app displays the results.

-   **Get** — where the raw data comes from
-   **Calculate** — the formula applied to it

Each metric below is also tagged with its current state:

| Tag | Meaning |
| --- | --- |
| **Used** | Live in Campus today |
| **Partial** | Exists, with caveats |
| **Not a feature** | Not implemented |

* * *

<a id="scoring--assessment"></a>

## Scoring & assessment

Everything in this section is derived from four values stored per quiz: correct answers, questions attempted, total questions, and time taken.

<a id="points--used"></a>

### Points — Used

Each question is worth a point value (default 1). A correct answer earns the full points; a wrong answer earns zero. Questions can also be grouped — a group is all-or-nothing, so its points are only earned if every question inside it is correct. Points per quiz roll up into the student’s lifetime coin balance, which drives badges and the leaderboard.

**How we get it**

Each question’s `settings.points`; summed per correct answer (and per fully-correct group) into that day’s `obtainedMarks`, then added to the wallet coin balance.

**How we calculate**

```
obtainedMarks (day) = Σ (points of correctly-answered questions that day)                       + Σ (points of each group where every question in it is correct)lifetime coins       = Σ (obtainedMarks across all days)
```

Tab cards on Points: Total Earned = `Σ earned_marks`; Highest Score = `MAX(daily earned_marks)`; Average Daily = `round(Total Earned ÷ number of active days)`.

<a id="grading--used"></a>

### Grading — Used

There is no letter grade or GPA. A “grade” is the student’s average accuracy percentage, plus a simple pass/fail flag on each quiz.

**How we get it**

Average of the per-day accuracy figures already stored for the student.

**How we calculate**

```
grade  = average( accuracy of all quiz-days )pass?  = correct ÷ attempted  >  80%   → PASSED, else FAILED
```

<a id="mastery--used"></a>

### Mastery — Used

A tiered icon placed on each quiz once completed, based on accuracy — and a special tier for a flawless, fast run.

**How we get it**

From the quiz’s accuracy %, mistake count, and average time per question at completion.

**How we calculate**

| Status / Tier | Color | Icon | When it shows |
| --- | --- | --- | --- |
| Excellence | Purple/Indigo | `mastery-1.svg` | 0 mistakes and average under 7 seconds per question |
| Mastered | Green | `crown-green.svg` | Accuracy ≥ 100% |
| Competent | Yellow | `crown-yellow.svg` | Accuracy ≥ 90% |
| Proficient | Orange | `mastery-2.svg` | Accuracy ≥ 70% |
| Familiar | Red | `mastery-3.svg` | Completed, accuracy below 70% |
| In Progress | Blue | `master-4.svg` | Started but not completed |

Excellence is checked first, ahead of the accuracy bands. A completed quiz never shows the blue In Progress icon — anything below 70% is Familiar.

> **Note**
>
> This per-attempt Mastery tier is not the same thing as the **mastery label** shown per lesson on the Awards → Grades tab (see below) — the two use different bands and are calculated from different inputs.

<a id="grades-tab-mastery-label--used"></a>

### Grades tab mastery label — Used

The Awards → Grades tab shows a coarser, 4-band label per lesson, bucketed from that lesson’s _average_ accuracy across all completed attempts — not the per-attempt tiers above.

**How we get it**

The lesson row’s average accuracy, computed across every completed attempt on that lesson (falling back to `obtainedMarks ÷ totalMarks × 100` when an attempt has no stored accuracy).

**How we calculate**

| Average accuracy | Mastery label |
| --- | --- |
| 100% | Expert |
| ≥ 85% | Proficient |
| ≥ 70% | Competent |
| below 70% | Beginner |

The Grades tab’s three headline cards read a pre-computed overview: Lessons Completed = `totalCompletedComponents`, Accuracy = `averageGrade`, Questions Answered = `uniqueQuestions`.

<a id="status--used"></a>

### Status — Used

Where a student stands on a lesson: Not Started → In Progress → Completed.

**How we get it**

From whether a quiz result exists and how many questions have been answered.

**How we calculate**

```
no result           → Not Startedsome answers        → In Progressattempted ≥ total   → Completed
```

| Status | Color | Icon |
| --- | --- | --- |
| Not Started | Gray | `crown-gray.svg` |
| In Progress | Blue | `master-4.svg` |

<a id="attempts--partial"></a>

### Attempts — Partial

Every retake is recorded as a new attempt. Attempts are counted but never limited — there is currently no maximum-retake cap in the system.

**How we get it**

One quiz-result record is created each time a student starts the quiz.

**How we calculate**

```
total attempts = count of quiz-result records for that lessonre-attempts (reporting) = Σ total quizzes started
```

* * *

<a id="rewards--gamification"></a>

## Rewards & gamification

Earned automatically on the server as quizzes complete. Coins are the shared currency underneath badges and ranking.

<a id="badges--used"></a>

### Badges — Used

14 tiers (Bronze → Vibranium), 10 levels each = 140 badges. A badge unlocks the moment the student’s total coins reach that badge’s threshold.

**How we get it**

Compared against the student’s lifetime coin balance.

**How we calculate**

```
award every badge where  coin_threshold ≤ student's coinstier level unlocks at:   start + (gap × level)current badge = highest tier & level whose threshold ≤ student's total points                (below the first threshold of 100 → Bronze, level 0)
```

| # | Tier | Starts at (XP) | Per level | Tops out at |
| --- | --- | --- | --- | --- |
| 1 | Bronze | 0 | 100 | 1,000 |
| 2 | Graphite | 1,000 | 400 | 5,000 |
| 3 | Quartz | 5,000 | 500 | 10,000 |
| 4 | Silver | 10,000 | 500 | 15,000 |
| 5 | Jade | 15,000 | 1,000 | 25,000 |
| 6 | Gold | 25,000 | 2,500 | 50,000 |
| 7 | Pearl | 50,000 | 5,000 | 100,000 |
| 8 | Titanium | 100,000 | 5,000 | 150,000 |
| 9 | Platinum | 150,000 | 5,000 | 200,000 |
| 10 | Emerald | 200,000 | 10,000 | 300,000 |
| 11 | Sapphire | 300,000 | 10,000 | 400,000 |
| 12 | Ruby | 400,000 | 15,000 | 550,000 |
| 13 | Diamond | 550,000 | 20,000 | 750,000 |
| 14 | Vibranium | 750,000 | 25,000 | 1,000,000 |

<a id="trophies--used"></a>

### Trophies — Used

Awarded per lesson according to the score achieved on its quiz. The tier is decided and stored by the backend the moment the lesson completes — there’s no client-side calculation, the app just reads the counts and the list of earned trophies.

**How we get it**

From the lesson’s correct-answer ratio at completion.

**How we calculate**

```
Platinum  100%Gold      ≥ 85%Silver    ≥ 70%Bronze    below 70%
```

<a id="rewards--used"></a>

### Rewards — Used

This is the teacher behaviour-points system (conduct), separate from quiz coins. Teachers assign positive or negative points to students.

**How we get it**

From behaviour records assigned to the student by staff. All records are fetched (not just the first page), so the totals always cover full history.

**How we calculate**

```
Positive total = Σ points of "Positive" behavioursNegative total = Σ |points| of "Negative" behaviours   (always subtracted, regardless of sign)
```

<a id="streaks--used"></a>

### Streaks — Used

Rewards showing up day after day. The count grows by one for each consecutive active day and resets after a missed day.

**How we get it**

From the daily time-spent record and the date of the last active day.

**How we calculate**

```
if last active day was yesterday → streak + 1otherwise                       → streak resets to 1(a day counts once its time-spent target is met)
```

<a id="ranking-leaderboard--used"></a>

### Ranking (leaderboard) — Used

Campus has more than one leaderboard, and they don’t rank the same way. Computed live and refreshed on a schedule.

**How we get it**

From each student’s daily points summary (points, time, accuracy, speed). With no date filter, the leaderboard is served from a pre-computed table; adding a date range runs a live query over that window instead.

**How we calculate**

Overall Leaderboard (org/class-wide, across all quizzes combined) — points win first:

```
order by:  total points          ↓  (highest first)           then total time       ↑  (faster wins ties)           then average accuracy ↓           then average speed    ↓           then account age         (older account wins remaining ties)
```

Lesson Leaderboard (one specific lesson, best completed attempt per student) — speed wins first instead:

```
order by:  time                  ↑  (fastest first)           then points           ↓           then accuracy         ↓           then speed            ↓           then earliest attempt
```

* * *

<a id="engagement--activity"></a>

## Engagement & activity

How much and how consistently a student is working, drawn from daily quiz and time-spent rollups.

<a id="progress--used"></a>

### Progress — Used

There is no single ”% of course complete” number. Progress is shown as change over time — how this period compares to the last.

**How we get it**

From point/time totals of the current period versus the previous one.

**How we calculate**

```
progress % = (current − previous) ÷ previous × 100(also shown as this-week vs last-week change)
```

<a id="activity--used"></a>

### Activity — Used

The volume of questions a student answers over time — shown as a daily / weekly / monthly chart. This is a count chart, not a social feed.

**How we get it**

From the daily quiz summary, grouped by day, week, month, or year.

**How we calculate**

```
activity = Σ questions answered  (per time bucket)
```

<a id="streams--not-a-feature"></a>

### Streams — Not a feature

There is no “Streams” feature in Campus. The word is reused internally for two unrelated things: the live presence-tracking connection, and a data endpoint that (despite its name) only returns daily time-spent figures. There is no social stream or feed to calculate.

> **Note**
>
> If a “Streams” feature is expected, treat it as net-new work — confirm what’s meant by “Streams” before assuming it exists.

[Previous  
Rewards](https://ilmiya.com/docs/campus/awards/rewards/) [Next  
Overview](https://ilmiya.com/docs/campus/)

---

[View this page on Ilmiya](https://ilmiya.com/docs/campus/awards/metrics-reference/) · [All pages in Markdown](https://ilmiya.com/markdown-index.md)
