Boost Azure Demo

This commit is contained in:
MangoPig
2026-05-25 17:05:06 +01:00
parent 675285e99d
commit 4f79137d89
230 changed files with 43275 additions and 2644 deletions

View File

@@ -20,12 +20,20 @@ assignment_assignees.json 85 (student × assignment) rows with status/scores
student_answers.json 593 per-question answer records — THE primary file
activity_logs.json 593 activity log rows (timestamps, durations, solve_mode)
dataset.json All of the above bundled into one object
bonus_early_warning_input.json 3 classes × 10 students for the bonus EWS challenge
bonus_early_warning_output.json Expected morning alert output (top 3 per class)
generate.py Deterministic generator (re-run anytime)
```
The agent's main input is `dataset.json` (or `student_answers.json` plus
`question_bank.json` if you'd rather load files separately).
For the bonus challenge shown in the brief, use
`bonus_early_warning_input.json` as a class-level monitor input with ordered
topics plus per-student topic understanding scores, and
`bonus_early_warning_output.json` as the expected ranked risk list with a
specific weak topic and recommended action for each student.
## Schema fidelity
Field names and enum values match the production models exactly:
@@ -59,6 +67,13 @@ you ever seed this data into the real DB.
| `_question_topic` / `_sub_topic` / `_difficulty` | `student_answers.json` | Denormalised from `question_bank` for convenience |
| `_answered_at` | `student_answers.json` | Same as `created_at`, just clearer name |
The mock exports now also include newer review-style fields used by the current app schema, such as:
- per-question: `is_correct`, `ai_feedback`, `review_needs_attention`, `review_issue_reason`, `review_correctness_score`, `review_understanding_score`, `review_question_score`, `review_confidence`, `review_tags`
- per-assignee: `overall_score`, `ai_feedback`, `next_step_outcome`
These make it easier to seed or backfill historical closed homework into the newer review surfaces.
## The 12 students
Five students have engineered misconception personas; the other seven are

View File

@@ -8,6 +8,9 @@
"started_at": 1774802640000,
"submitted_at": 1774803398000,
"total_marks": 6,
"overall_score": 6.88,
"ai_feedback": "Aisha Khan completed HW1 \u2014 Place Value Warmup with 6/8 correct responses. Overall score is 6.88/10. The weakest areas were Arithmetic, BIDMAS. 2 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1774605600000
@@ -21,6 +24,9 @@
"started_at": 1774810680000,
"submitted_at": 1774811461000,
"total_marks": 2,
"overall_score": 3.31,
"ai_feedback": "Ben Carter completed HW1 \u2014 Place Value Warmup with 2/8 correct responses. Overall score is 3.31/10. The weakest areas were BIDMAS, Fractions. 6 question(s) need extra attention.",
"next_step_outcome": "redo",
"is_active": true,
"deactivated_at": null,
"created_at": 1774605600000
@@ -34,6 +40,9 @@
"started_at": 1774800240000,
"submitted_at": 1774800967000,
"total_marks": 3,
"overall_score": 3.91,
"ai_feedback": "Chen Wei completed HW1 \u2014 Place Value Warmup with 3/8 correct responses. Overall score is 3.91/10. The weakest areas were Data, Fractions. 5 question(s) need extra attention.",
"next_step_outcome": "redo",
"is_active": true,
"deactivated_at": null,
"created_at": 1774605600000
@@ -47,6 +56,9 @@
"started_at": 1774813080000,
"submitted_at": 1774813871000,
"total_marks": 5,
"overall_score": 5.84,
"ai_feedback": "Daniela Rossi completed HW1 \u2014 Place Value Warmup with 5/8 correct responses. Overall score is 5.84/10. The weakest areas were Place Value, Arithmetic. 5 question(s) need extra attention.",
"next_step_outcome": "support",
"is_active": true,
"deactivated_at": null,
"created_at": 1774605600000
@@ -60,6 +72,9 @@
"started_at": 1774811460000,
"submitted_at": 1774812214000,
"total_marks": 7,
"overall_score": 8.16,
"ai_feedback": "Elif Demir completed HW1 \u2014 Place Value Warmup with 7/8 correct responses. Overall score is 8.16/10. The weakest areas were BIDMAS, Arithmetic. 1 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1774605600000
@@ -73,6 +88,9 @@
"started_at": 1774800300000,
"submitted_at": 1774801060000,
"total_marks": 7,
"overall_score": 7.84,
"ai_feedback": "Felix Brown completed HW1 \u2014 Place Value Warmup with 7/8 correct responses. Overall score is 7.84/10. The weakest areas were Place Value, Arithmetic. 2 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1774605600000
@@ -86,6 +104,9 @@
"started_at": 1774801020000,
"submitted_at": 1774801750000,
"total_marks": 7,
"overall_score": 8.03,
"ai_feedback": "Grace Park completed HW1 \u2014 Place Value Warmup with 7/8 correct responses. Overall score is 8.03/10. The weakest areas were BIDMAS, Data. 1 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1774605600000
@@ -99,6 +120,9 @@
"started_at": 1774805100000,
"submitted_at": 1774805887000,
"total_marks": 4,
"overall_score": 4.88,
"ai_feedback": "Harry Singh completed HW1 \u2014 Place Value Warmup with 4/8 correct responses. Overall score is 4.88/10. The weakest areas were BIDMAS, Data. 4 question(s) need extra attention.",
"next_step_outcome": "support",
"is_active": true,
"deactivated_at": null,
"created_at": 1774605600000
@@ -112,6 +136,9 @@
"started_at": 1774806120000,
"submitted_at": 1774806874000,
"total_marks": 4,
"overall_score": 5.0,
"ai_feedback": "Isla Nakamura completed HW1 \u2014 Place Value Warmup with 4/8 correct responses. Overall score is 5.0/10. The weakest areas were Data, Fractions. 4 question(s) need extra attention.",
"next_step_outcome": "support",
"is_active": true,
"deactivated_at": null,
"created_at": 1774605600000
@@ -125,6 +152,9 @@
"started_at": 1774810680000,
"submitted_at": 1774811466000,
"total_marks": 8,
"overall_score": 8.75,
"ai_feedback": "Jaden Williams completed HW1 \u2014 Place Value Warmup with 8/8 correct responses. Overall score is 8.75/10. The weakest areas were BIDMAS, Arithmetic. 2 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1774605600000
@@ -138,6 +168,9 @@
"started_at": 1774806240000,
"submitted_at": 1774806957000,
"total_marks": 5,
"overall_score": 6.16,
"ai_feedback": "Kira Patel completed HW1 \u2014 Place Value Warmup with 5/8 correct responses. Overall score is 6.16/10. The weakest areas were Fractions, BIDMAS. 3 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1774605600000
@@ -151,6 +184,9 @@
"started_at": 1774800720000,
"submitted_at": 1774801445000,
"total_marks": 4,
"overall_score": 4.92,
"ai_feedback": "Liam O'Connor completed HW1 \u2014 Place Value Warmup with 4/8 correct responses. Overall score is 4.92/10. The weakest areas were BIDMAS, Place Value. 4 question(s) need extra attention.",
"next_step_outcome": "support",
"is_active": true,
"deactivated_at": null,
"created_at": 1774605600000
@@ -164,6 +200,9 @@
"started_at": 1775328960000,
"submitted_at": 1775329928000,
"total_marks": 5,
"overall_score": 6.27,
"ai_feedback": "Aisha Khan completed HW2 \u2014 Arithmetic Practice with 5/8 correct responses. Overall score is 6.27/10. The weakest areas were Arithmetic. 3 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1775124000000
@@ -177,6 +216,9 @@
"started_at": 1775326860000,
"submitted_at": 1775327858000,
"total_marks": 4,
"overall_score": 5.05,
"ai_feedback": "Ben Carter completed HW2 \u2014 Arithmetic Practice with 4/8 correct responses. Overall score is 5.05/10. The weakest areas were Arithmetic. 4 question(s) need extra attention.",
"next_step_outcome": "support",
"is_active": true,
"deactivated_at": null,
"created_at": 1775124000000
@@ -190,6 +232,9 @@
"started_at": 1775320320000,
"submitted_at": 1775321203000,
"total_marks": 4,
"overall_score": 5.0,
"ai_feedback": "Chen Wei completed HW2 \u2014 Arithmetic Practice with 4/8 correct responses. Overall score is 5.0/10. The weakest areas were Arithmetic. 4 question(s) need extra attention.",
"next_step_outcome": "support",
"is_active": true,
"deactivated_at": null,
"created_at": 1775124000000
@@ -203,6 +248,9 @@
"started_at": 1775330700000,
"submitted_at": 1775331726000,
"total_marks": 5,
"overall_score": 5.91,
"ai_feedback": "Daniela Rossi completed HW2 \u2014 Arithmetic Practice with 5/8 correct responses. Overall score is 5.91/10. The weakest areas were Arithmetic. 4 question(s) need extra attention.",
"next_step_outcome": "support",
"is_active": true,
"deactivated_at": null,
"created_at": 1775124000000
@@ -216,6 +264,9 @@
"started_at": 1775331960000,
"submitted_at": 1775333030000,
"total_marks": 6,
"overall_score": 6.75,
"ai_feedback": "Elif Demir completed HW2 \u2014 Arithmetic Practice with 6/8 correct responses. Overall score is 6.75/10. The weakest areas were Arithmetic. 3 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1775124000000
@@ -229,6 +280,9 @@
"started_at": 1775328360000,
"submitted_at": 1775329428000,
"total_marks": 7,
"overall_score": 7.91,
"ai_feedback": "Felix Brown completed HW2 \u2014 Arithmetic Practice with 7/8 correct responses. Overall score is 7.91/10. The weakest areas were Arithmetic. 1 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1775124000000
@@ -242,6 +296,9 @@
"started_at": 1775329020000,
"submitted_at": 1775330004000,
"total_marks": 6,
"overall_score": 7.19,
"ai_feedback": "Grace Park completed HW2 \u2014 Arithmetic Practice with 6/8 correct responses. Overall score is 7.19/10. The weakest areas were Arithmetic. 4 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1775124000000
@@ -255,6 +312,9 @@
"started_at": 1775324640000,
"submitted_at": 1775325707000,
"total_marks": 4,
"overall_score": 5.17,
"ai_feedback": "Harry Singh completed HW2 \u2014 Arithmetic Practice with 4/8 correct responses. Overall score is 5.17/10. The weakest areas were Arithmetic. 4 question(s) need extra attention.",
"next_step_outcome": "support",
"is_active": true,
"deactivated_at": null,
"created_at": 1775124000000
@@ -268,6 +328,9 @@
"started_at": 1775319120000,
"submitted_at": 1775320159000,
"total_marks": 4,
"overall_score": 5.12,
"ai_feedback": "Isla Nakamura completed HW2 \u2014 Arithmetic Practice with 4/8 correct responses. Overall score is 5.12/10. The weakest areas were Arithmetic. 4 question(s) need extra attention.",
"next_step_outcome": "support",
"is_active": true,
"deactivated_at": null,
"created_at": 1775124000000
@@ -281,6 +344,9 @@
"started_at": 1775326080000,
"submitted_at": 1775327065000,
"total_marks": 5,
"overall_score": 6.27,
"ai_feedback": "Jaden Williams completed HW2 \u2014 Arithmetic Practice with 5/8 correct responses. Overall score is 6.27/10. The weakest areas were Arithmetic. 3 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1775124000000
@@ -294,6 +360,9 @@
"started_at": 1775318820000,
"submitted_at": 1775319873000,
"total_marks": 3,
"overall_score": 4.22,
"ai_feedback": "Kira Patel completed HW2 \u2014 Arithmetic Practice with 3/8 correct responses. Overall score is 4.22/10. The weakest areas were Arithmetic. 5 question(s) need extra attention.",
"next_step_outcome": "redo",
"is_active": true,
"deactivated_at": null,
"created_at": 1775124000000
@@ -307,6 +376,9 @@
"started_at": 1775331840000,
"submitted_at": 1775332799000,
"total_marks": 5,
"overall_score": 6.22,
"ai_feedback": "Liam O'Connor completed HW2 \u2014 Arithmetic Practice with 5/8 correct responses. Overall score is 6.22/10. The weakest areas were Arithmetic. 3 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1775124000000
@@ -320,6 +392,9 @@
"started_at": 1775840280000,
"submitted_at": 1775841074000,
"total_marks": 1,
"overall_score": 2.22,
"ai_feedback": "Aisha Khan completed HW3 \u2014 Fractions Foundations with 1/8 correct responses. Overall score is 2.22/10. The weakest areas were Fractions. 7 question(s) need extra attention.",
"next_step_outcome": "redo",
"is_active": true,
"deactivated_at": null,
"created_at": 1775642400000
@@ -333,6 +408,9 @@
"started_at": 1775840280000,
"submitted_at": 1775841162000,
"total_marks": 5,
"overall_score": 6.21,
"ai_feedback": "Ben Carter completed HW3 \u2014 Fractions Foundations with 5/8 correct responses. Overall score is 6.21/10. The weakest areas were Fractions. 4 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1775642400000
@@ -346,6 +424,9 @@
"started_at": 1775844960000,
"submitted_at": 1775845649000,
"total_marks": 2,
"overall_score": 3.06,
"ai_feedback": "Chen Wei completed HW3 \u2014 Fractions Foundations with 2/8 correct responses. Overall score is 3.06/10. The weakest areas were Fractions. 6 question(s) need extra attention.",
"next_step_outcome": "redo",
"is_active": true,
"deactivated_at": null,
"created_at": 1775642400000
@@ -359,6 +440,9 @@
"started_at": 1775838420000,
"submitted_at": 1775839246000,
"total_marks": 5,
"overall_score": 5.84,
"ai_feedback": "Daniela Rossi completed HW3 \u2014 Fractions Foundations with 5/8 correct responses. Overall score is 5.84/10. The weakest areas were Fractions. 5 question(s) need extra attention.",
"next_step_outcome": "support",
"is_active": true,
"deactivated_at": null,
"created_at": 1775642400000
@@ -372,6 +456,9 @@
"started_at": 1775846820000,
"submitted_at": 1775847705000,
"total_marks": 5,
"overall_score": 6.16,
"ai_feedback": "Elif Demir completed HW3 \u2014 Fractions Foundations with 5/8 correct responses. Overall score is 6.16/10. The weakest areas were Fractions. 3 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1775642400000
@@ -385,6 +472,9 @@
"started_at": 1775848440000,
"submitted_at": 1775849269000,
"total_marks": 8,
"overall_score": 9.25,
"ai_feedback": "Felix Brown completed HW3 \u2014 Fractions Foundations with 8/8 correct responses. Overall score is 9.25/10. The weakest areas were Fractions. 0 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1775642400000
@@ -398,6 +488,9 @@
"started_at": 1775842980000,
"submitted_at": 1775843719000,
"total_marks": 7,
"overall_score": 7.97,
"ai_feedback": "Grace Park completed HW3 \u2014 Fractions Foundations with 7/8 correct responses. Overall score is 7.97/10. The weakest areas were Fractions. 2 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1775642400000
@@ -411,6 +504,9 @@
"started_at": 1775844540000,
"submitted_at": 1775845385000,
"total_marks": 3,
"overall_score": 4.16,
"ai_feedback": "Harry Singh completed HW3 \u2014 Fractions Foundations with 3/8 correct responses. Overall score is 4.16/10. The weakest areas were Fractions. 5 question(s) need extra attention.",
"next_step_outcome": "redo",
"is_active": true,
"deactivated_at": null,
"created_at": 1775642400000
@@ -424,6 +520,9 @@
"started_at": 1775836980000,
"submitted_at": 1775837750000,
"total_marks": 3,
"overall_score": 3.96,
"ai_feedback": "Isla Nakamura completed HW3 \u2014 Fractions Foundations with 3/8 correct responses. Overall score is 3.96/10. The weakest areas were Fractions. 5 question(s) need extra attention.",
"next_step_outcome": "redo",
"is_active": true,
"deactivated_at": null,
"created_at": 1775642400000
@@ -437,6 +536,9 @@
"started_at": 1775842860000,
"submitted_at": 1775843667000,
"total_marks": 5,
"overall_score": 5.84,
"ai_feedback": "Jaden Williams completed HW3 \u2014 Fractions Foundations with 5/8 correct responses. Overall score is 5.84/10. The weakest areas were Fractions. 3 question(s) need extra attention.",
"next_step_outcome": "support",
"is_active": true,
"deactivated_at": null,
"created_at": 1775642400000
@@ -450,6 +552,9 @@
"started_at": 1775845620000,
"submitted_at": 1775846405000,
"total_marks": 4,
"overall_score": 5.17,
"ai_feedback": "Kira Patel completed HW3 \u2014 Fractions Foundations with 4/8 correct responses. Overall score is 5.17/10. The weakest areas were Fractions. 4 question(s) need extra attention.",
"next_step_outcome": "support",
"is_active": true,
"deactivated_at": null,
"created_at": 1775642400000
@@ -463,6 +568,9 @@
"started_at": 1775848920000,
"submitted_at": 1775849864000,
"total_marks": 7,
"overall_score": 7.91,
"ai_feedback": "Liam O'Connor completed HW3 \u2014 Fractions Foundations with 7/8 correct responses. Overall score is 7.91/10. The weakest areas were Fractions. 2 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1775642400000
@@ -476,6 +584,9 @@
"started_at": 1776363060000,
"submitted_at": 1776364051000,
"total_marks": 7,
"overall_score": 7.72,
"ai_feedback": "Aisha Khan completed HW4 \u2014 Negatives & BIDMAS with 7/8 correct responses. Overall score is 7.72/10. The weakest areas were BIDMAS, Algebra. 2 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1776160800000
@@ -489,6 +600,9 @@
"started_at": 1776357660000,
"submitted_at": 1776358615000,
"total_marks": 6,
"overall_score": 7.0,
"ai_feedback": "Ben Carter completed HW4 \u2014 Negatives & BIDMAS with 6/8 correct responses. Overall score is 7.0/10. The weakest areas were Algebra, Negative Numbers. 3 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1776160800000
@@ -502,6 +616,9 @@
"started_at": 1776364500000,
"submitted_at": 1776364999000,
"total_marks": 3,
"overall_score": 3.91,
"ai_feedback": "Chen Wei completed HW4 \u2014 Negatives & BIDMAS with 3/8 correct responses. Overall score is 3.91/10. The weakest areas were Data, BIDMAS. 5 question(s) need extra attention.",
"next_step_outcome": "redo",
"is_active": true,
"deactivated_at": null,
"created_at": 1776160800000
@@ -515,6 +632,9 @@
"started_at": 1776360840000,
"submitted_at": 1776361789000,
"total_marks": 7,
"overall_score": 7.64,
"ai_feedback": "Daniela Rossi completed HW4 \u2014 Negatives & BIDMAS with 7/8 correct responses. Overall score is 7.64/10. The weakest areas were Negative Numbers, Data. 6 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1776160800000
@@ -528,6 +648,9 @@
"started_at": 1776360060000,
"submitted_at": 1776361023000,
"total_marks": 7,
"overall_score": 7.84,
"ai_feedback": "Elif Demir completed HW4 \u2014 Negatives & BIDMAS with 7/8 correct responses. Overall score is 7.84/10. The weakest areas were BIDMAS, Algebra. 1 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1776160800000
@@ -541,6 +664,9 @@
"started_at": 1776361560000,
"submitted_at": 1776362501000,
"total_marks": 6,
"overall_score": 7.14,
"ai_feedback": "Felix Brown completed HW4 \u2014 Negatives & BIDMAS with 6/8 correct responses. Overall score is 7.14/10. The weakest areas were Algebra, BIDMAS. 2 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1776160800000
@@ -554,6 +680,9 @@
"started_at": 1776357540000,
"submitted_at": 1776358553000,
"total_marks": 7,
"overall_score": 7.97,
"ai_feedback": "Grace Park completed HW4 \u2014 Negatives & BIDMAS with 7/8 correct responses. Overall score is 7.97/10. The weakest areas were BIDMAS, Algebra. 1 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1776160800000
@@ -567,6 +696,9 @@
"started_at": 1776358260000,
"submitted_at": 1776359234000,
"total_marks": 6,
"overall_score": 7.1,
"ai_feedback": "Harry Singh completed HW4 \u2014 Negatives & BIDMAS with 6/8 correct responses. Overall score is 7.1/10. The weakest areas were Negative Numbers, BIDMAS. 3 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1776160800000
@@ -580,6 +712,9 @@
"started_at": 1776356460000,
"submitted_at": 1776357470000,
"total_marks": 6,
"overall_score": 6.94,
"ai_feedback": "Isla Nakamura completed HW4 \u2014 Negatives & BIDMAS with 6/8 correct responses. Overall score is 6.94/10. The weakest areas were BIDMAS, Negative Numbers. 2 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1776160800000
@@ -593,6 +728,9 @@
"started_at": 1776369420000,
"submitted_at": 1776370406000,
"total_marks": 5,
"overall_score": 6.22,
"ai_feedback": "Jaden Williams completed HW4 \u2014 Negatives & BIDMAS with 5/8 correct responses. Overall score is 6.22/10. The weakest areas were Data, Algebra. 3 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1776160800000
@@ -606,6 +744,9 @@
"started_at": 1776367860000,
"submitted_at": 1776368842000,
"total_marks": 5,
"overall_score": 6.09,
"ai_feedback": "Kira Patel completed HW4 \u2014 Negatives & BIDMAS with 5/8 correct responses. Overall score is 6.09/10. The weakest areas were Negative Numbers, BIDMAS. 3 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1776160800000
@@ -619,6 +760,9 @@
"started_at": 1776356460000,
"submitted_at": 1776357444000,
"total_marks": 5,
"overall_score": 6.34,
"ai_feedback": "Liam O'Connor completed HW4 \u2014 Negatives & BIDMAS with 5/8 correct responses. Overall score is 6.34/10. The weakest areas were Algebra, BIDMAS. 3 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1776160800000
@@ -632,6 +776,9 @@
"started_at": 1776714360000,
"submitted_at": 1776715554000,
"total_marks": 7,
"overall_score": 7.84,
"ai_feedback": "Aisha Khan completed HW5 \u2014 Geometry Basics with 7/8 correct responses. Overall score is 7.84/10. The weakest areas were Geometry, Algebra. 2 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1776506400000
@@ -645,6 +792,9 @@
"started_at": 1776705780000,
"submitted_at": 1776707002000,
"total_marks": 6,
"overall_score": 7.06,
"ai_feedback": "Ben Carter completed HW5 \u2014 Geometry Basics with 6/8 correct responses. Overall score is 7.06/10. The weakest areas were Algebra, Geometry. 2 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1776506400000
@@ -658,6 +808,9 @@
"started_at": 1776704640000,
"submitted_at": 1776705207000,
"total_marks": 3,
"overall_score": 4.03,
"ai_feedback": "Chen Wei completed HW5 \u2014 Geometry Basics with 3/8 correct responses. Overall score is 4.03/10. The weakest areas were Geometry, Algebra. 5 question(s) need extra attention.",
"next_step_outcome": "redo",
"is_active": true,
"deactivated_at": null,
"created_at": 1776506400000
@@ -671,6 +824,9 @@
"started_at": 1776710340000,
"submitted_at": 1776711570000,
"total_marks": 5,
"overall_score": 5.68,
"ai_feedback": "Daniela Rossi completed HW5 \u2014 Geometry Basics with 5/8 correct responses. Overall score is 5.68/10. The weakest areas were Geometry, Algebra. 8 question(s) need extra attention.",
"next_step_outcome": "support",
"is_active": true,
"deactivated_at": null,
"created_at": 1776506400000
@@ -684,6 +840,9 @@
"started_at": 1776703560000,
"submitted_at": 1776704752000,
"total_marks": 6,
"overall_score": 6.81,
"ai_feedback": "Elif Demir completed HW5 \u2014 Geometry Basics with 6/8 correct responses. Overall score is 6.81/10. The weakest areas were Algebra, Geometry. 2 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1776506400000
@@ -697,6 +856,9 @@
"started_at": 1776703860000,
"submitted_at": 1776705006000,
"total_marks": 8,
"overall_score": 8.88,
"ai_feedback": "Felix Brown completed HW5 \u2014 Geometry Basics with 8/8 correct responses. Overall score is 8.88/10. The weakest areas were Algebra, Geometry. 0 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1776506400000
@@ -710,6 +872,9 @@
"started_at": 1776701340000,
"submitted_at": 1776702476000,
"total_marks": 4,
"overall_score": 5.12,
"ai_feedback": "Grace Park completed HW5 \u2014 Geometry Basics with 4/8 correct responses. Overall score is 5.12/10. The weakest areas were Algebra, Geometry. 4 question(s) need extra attention.",
"next_step_outcome": "support",
"is_active": true,
"deactivated_at": null,
"created_at": 1776506400000
@@ -723,6 +888,9 @@
"started_at": 1776714300000,
"submitted_at": 1776715464000,
"total_marks": 6,
"overall_score": 6.75,
"ai_feedback": "Harry Singh completed HW5 \u2014 Geometry Basics with 6/8 correct responses. Overall score is 6.75/10. The weakest areas were Geometry, Algebra. 5 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1776506400000
@@ -736,6 +904,9 @@
"started_at": 1776707220000,
"submitted_at": 1776708303000,
"total_marks": 6,
"overall_score": 7.06,
"ai_feedback": "Isla Nakamura completed HW5 \u2014 Geometry Basics with 6/8 correct responses. Overall score is 7.06/10. The weakest areas were Geometry, Algebra. 2 question(s) need extra attention.",
"next_step_outcome": "accept",
"is_active": true,
"deactivated_at": null,
"created_at": 1776506400000
@@ -749,6 +920,9 @@
"started_at": 1776705720000,
"submitted_at": 1776706796000,
"total_marks": 4,
"overall_score": 5.19,
"ai_feedback": "Jaden Williams completed HW5 \u2014 Geometry Basics with 4/8 correct responses. Overall score is 5.19/10. The weakest areas were Geometry, Algebra. 4 question(s) need extra attention.",
"next_step_outcome": "support",
"is_active": true,
"deactivated_at": null,
"created_at": 1776506400000
@@ -762,6 +936,9 @@
"started_at": 1776707220000,
"submitted_at": 1776708296000,
"total_marks": 2,
"overall_score": 2.94,
"ai_feedback": "Kira Patel completed HW5 \u2014 Geometry Basics with 2/8 correct responses. Overall score is 2.94/10. The weakest areas were Algebra, Geometry. 6 question(s) need extra attention.",
"next_step_outcome": "redo",
"is_active": true,
"deactivated_at": null,
"created_at": 1776506400000
@@ -775,6 +952,9 @@
"started_at": 1776707160000,
"submitted_at": 1776708380000,
"total_marks": 4,
"overall_score": 4.88,
"ai_feedback": "Liam O'Connor completed HW5 \u2014 Geometry Basics with 4/8 correct responses. Overall score is 4.88/10. The weakest areas were Algebra, Geometry. 4 question(s) need extra attention.",
"next_step_outcome": "support",
"is_active": true,
"deactivated_at": null,
"created_at": 1776506400000
@@ -801,6 +981,9 @@
"started_at": 1777401600000,
"submitted_at": null,
"total_marks": null,
"overall_score": null,
"ai_feedback": null,
"next_step_outcome": null,
"is_active": true,
"deactivated_at": null,
"created_at": 1777197600000
@@ -827,6 +1010,9 @@
"started_at": 1777401660000,
"submitted_at": null,
"total_marks": null,
"overall_score": null,
"ai_feedback": null,
"next_step_outcome": null,
"is_active": true,
"deactivated_at": null,
"created_at": 1777197600000
@@ -866,6 +1052,9 @@
"started_at": 1777398660000,
"submitted_at": null,
"total_marks": null,
"overall_score": null,
"ai_feedback": null,
"next_step_outcome": null,
"is_active": true,
"deactivated_at": null,
"created_at": 1777197600000
@@ -892,6 +1081,9 @@
"started_at": 1777393800000,
"submitted_at": null,
"total_marks": null,
"overall_score": null,
"ai_feedback": null,
"next_step_outcome": null,
"is_active": true,
"deactivated_at": null,
"created_at": 1777197600000
@@ -905,6 +1097,9 @@
"started_at": 1777393500000,
"submitted_at": null,
"total_marks": null,
"overall_score": null,
"ai_feedback": null,
"next_step_outcome": null,
"is_active": true,
"deactivated_at": null,
"created_at": 1777197600000
@@ -918,6 +1113,9 @@
"started_at": 1777398300000,
"submitted_at": null,
"total_marks": null,
"overall_score": null,
"ai_feedback": null,
"next_step_outcome": null,
"is_active": true,
"deactivated_at": null,
"created_at": 1777197600000
@@ -931,6 +1129,9 @@
"started_at": 1777406220000,
"submitted_at": null,
"total_marks": null,
"overall_score": null,
"ai_feedback": null,
"next_step_outcome": null,
"is_active": true,
"deactivated_at": null,
"created_at": 1777197600000
@@ -944,6 +1145,9 @@
"started_at": 1777661280000,
"submitted_at": null,
"total_marks": null,
"overall_score": null,
"ai_feedback": null,
"next_step_outcome": null,
"is_active": true,
"deactivated_at": null,
"created_at": 1777456800000
@@ -957,6 +1161,9 @@
"started_at": 1777651740000,
"submitted_at": null,
"total_marks": null,
"overall_score": null,
"ai_feedback": null,
"next_step_outcome": null,
"is_active": true,
"deactivated_at": null,
"created_at": 1777456800000
@@ -983,6 +1190,9 @@
"started_at": 1777662780000,
"submitted_at": null,
"total_marks": null,
"overall_score": null,
"ai_feedback": null,
"next_step_outcome": null,
"is_active": true,
"deactivated_at": null,
"created_at": 1777456800000
@@ -996,6 +1206,9 @@
"started_at": 1777664580000,
"submitted_at": null,
"total_marks": null,
"overall_score": null,
"ai_feedback": null,
"next_step_outcome": null,
"is_active": true,
"deactivated_at": null,
"created_at": 1777456800000
@@ -1009,6 +1222,9 @@
"started_at": 1777660560000,
"submitted_at": null,
"total_marks": null,
"overall_score": null,
"ai_feedback": null,
"next_step_outcome": null,
"is_active": true,
"deactivated_at": null,
"created_at": 1777456800000
@@ -1022,6 +1238,9 @@
"started_at": 1777658460000,
"submitted_at": null,
"total_marks": null,
"overall_score": null,
"ai_feedback": null,
"next_step_outcome": null,
"is_active": true,
"deactivated_at": null,
"created_at": 1777456800000
@@ -1035,6 +1254,9 @@
"started_at": 1777664940000,
"submitted_at": null,
"total_marks": null,
"overall_score": null,
"ai_feedback": null,
"next_step_outcome": null,
"is_active": true,
"deactivated_at": null,
"created_at": 1777456800000
@@ -1048,6 +1270,9 @@
"started_at": 1777662480000,
"submitted_at": null,
"total_marks": null,
"overall_score": null,
"ai_feedback": null,
"next_step_outcome": null,
"is_active": true,
"deactivated_at": null,
"created_at": 1777456800000
@@ -1061,6 +1286,9 @@
"started_at": 1777659360000,
"submitted_at": null,
"total_marks": null,
"overall_score": null,
"ai_feedback": null,
"next_step_outcome": null,
"is_active": true,
"deactivated_at": null,
"created_at": 1777456800000
@@ -1074,6 +1302,9 @@
"started_at": 1777658880000,
"submitted_at": null,
"total_marks": null,
"overall_score": null,
"ai_feedback": null,
"next_step_outcome": null,
"is_active": true,
"deactivated_at": null,
"created_at": 1777456800000

View File

@@ -0,0 +1,485 @@
{
"reference_date": "2026-05-17",
"challenge": "bonus-early-warning-system",
"description": "Mock input for an early warning monitor. Each class uses the same ordered subject list, and each student has an understanding score for every subject.",
"score_scale": "0-100 where higher means better understanding",
"classes": [
{
"class_id": "501",
"class_name": "Year 5 Maple",
"teacher_id": "301",
"teacher_name": "Priya Shah",
"alert_run_at": "2026-05-17T07:15:00Z",
"ordered_topics": [
"Place Value",
"Arithmetic",
"Negative Numbers",
"BIDMAS",
"Fractions",
"Algebra",
"Geomtry",
"Data"
],
"students": [
{
"student_id": "001",
"student_name": "Aaliyah Khan",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 78 },
{ "topic": "Arithmetic", "understanding_score": 74 },
{ "topic": "Negative Numbers", "understanding_score": 72 },
{ "topic": "BIDMAS", "understanding_score": 76 },
{ "topic": "Fractions", "understanding_score": 80 },
{ "topic": "Algebra", "understanding_score": 71 },
{ "topic": "Geomtry", "understanding_score": 77 },
{ "topic": "Data", "understanding_score": 75 }
]
},
{
"student_id": "002",
"student_name": "Mason Reid",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 42 },
{ "topic": "Arithmetic", "understanding_score": 38 },
{ "topic": "Negative Numbers", "understanding_score": 45 },
{ "topic": "BIDMAS", "understanding_score": 41 },
{ "topic": "Fractions", "understanding_score": 28 },
{ "topic": "Algebra", "understanding_score": 35 },
{ "topic": "Geomtry", "understanding_score": 47 },
{ "topic": "Data", "understanding_score": 44 }
]
},
{
"student_id": "003",
"student_name": "Layla Brooks",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 73 },
{ "topic": "Arithmetic", "understanding_score": 69 },
{ "topic": "Negative Numbers", "understanding_score": 71 },
{ "topic": "BIDMAS", "understanding_score": 72 },
{ "topic": "Fractions", "understanding_score": 74 },
{ "topic": "Algebra", "understanding_score": 68 },
{ "topic": "Geomtry", "understanding_score": 75 },
{ "topic": "Data", "understanding_score": 70 }
]
},
{
"student_id": "004",
"student_name": "Owen Hughes",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 70 },
{ "topic": "Arithmetic", "understanding_score": 72 },
{ "topic": "Negative Numbers", "understanding_score": 67 },
{ "topic": "BIDMAS", "understanding_score": 69 },
{ "topic": "Fractions", "understanding_score": 71 },
{ "topic": "Algebra", "understanding_score": 73 },
{ "topic": "Geomtry", "understanding_score": 68 },
{ "topic": "Data", "understanding_score": 66 }
]
},
{
"student_id": "005",
"student_name": "Noah Patel",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 61 },
{ "topic": "Arithmetic", "understanding_score": 58 },
{ "topic": "Negative Numbers", "understanding_score": 55 },
{ "topic": "BIDMAS", "understanding_score": 57 },
{ "topic": "Fractions", "understanding_score": 52 },
{ "topic": "Algebra", "understanding_score": 49 },
{ "topic": "Geomtry", "understanding_score": 60 },
{ "topic": "Data", "understanding_score": 63 }
]
},
{
"student_id": "006",
"student_name": "Zara Lewis",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 88 },
{ "topic": "Arithmetic", "understanding_score": 86 },
{ "topic": "Negative Numbers", "understanding_score": 84 },
{ "topic": "BIDMAS", "understanding_score": 83 },
{ "topic": "Fractions", "understanding_score": 90 },
{ "topic": "Algebra", "understanding_score": 82 },
{ "topic": "Geomtry", "understanding_score": 87 },
{ "topic": "Data", "understanding_score": 85 }
]
},
{
"student_id": "007",
"student_name": "Isaac Green",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 68 },
{ "topic": "Arithmetic", "understanding_score": 64 },
{ "topic": "Negative Numbers", "understanding_score": 62 },
{ "topic": "BIDMAS", "understanding_score": 66 },
{ "topic": "Fractions", "understanding_score": 67 },
{ "topic": "Algebra", "understanding_score": 65 },
{ "topic": "Geomtry", "understanding_score": 69 },
{ "topic": "Data", "understanding_score": 63 }
]
},
{
"student_id": "008",
"student_name": "Sofia Nguyen",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 59 },
{ "topic": "Arithmetic", "understanding_score": 55 },
{ "topic": "Negative Numbers", "understanding_score": 51 },
{ "topic": "BIDMAS", "understanding_score": 54 },
{ "topic": "Fractions", "understanding_score": 33 },
{ "topic": "Algebra", "understanding_score": 48 },
{ "topic": "Geomtry", "understanding_score": 57 },
{ "topic": "Data", "understanding_score": 60 }
]
},
{
"student_id": "009",
"student_name": "Ethan Bell",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 84 },
{ "topic": "Arithmetic", "understanding_score": 81 },
{ "topic": "Negative Numbers", "understanding_score": 79 },
{ "topic": "BIDMAS", "understanding_score": 80 },
{ "topic": "Fractions", "understanding_score": 83 },
{ "topic": "Algebra", "understanding_score": 78 },
{ "topic": "Geomtry", "understanding_score": 82 },
{ "topic": "Data", "understanding_score": 77 }
]
},
{
"student_id": "010",
"student_name": "Mila Foster",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 71 },
{ "topic": "Arithmetic", "understanding_score": 68 },
{ "topic": "Negative Numbers", "understanding_score": 70 },
{ "topic": "BIDMAS", "understanding_score": 69 },
{ "topic": "Fractions", "understanding_score": 72 },
{ "topic": "Algebra", "understanding_score": 67 },
{ "topic": "Geomtry", "understanding_score": 73 },
{ "topic": "Data", "understanding_score": 65 }
]
}
]
},
{
"class_id": "502",
"class_name": "Year 5 Oak",
"teacher_id": "302",
"teacher_name": "Tom Bennett",
"alert_run_at": "2026-05-17T07:15:00Z",
"ordered_topics": [
"Place Value",
"Arithmetic",
"Negative Numbers",
"BIDMAS",
"Fractions",
"Algebra",
"Geomtry",
"Data"
],
"students": [
{
"student_id": "011",
"student_name": "Leo Kim",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 35 },
{ "topic": "Arithmetic", "understanding_score": 31 },
{ "topic": "Negative Numbers", "understanding_score": 34 },
{ "topic": "BIDMAS", "understanding_score": 33 },
{ "topic": "Fractions", "understanding_score": 38 },
{ "topic": "Algebra", "understanding_score": 29 },
{ "topic": "Geomtry", "understanding_score": 40 },
{ "topic": "Data", "understanding_score": 36 }
]
},
{
"student_id": "012",
"student_name": "Ella Martin",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 82 },
{ "topic": "Arithmetic", "understanding_score": 79 },
{ "topic": "Negative Numbers", "understanding_score": 77 },
{ "topic": "BIDMAS", "understanding_score": 80 },
{ "topic": "Fractions", "understanding_score": 81 },
{ "topic": "Algebra", "understanding_score": 76 },
{ "topic": "Geomtry", "understanding_score": 78 },
{ "topic": "Data", "understanding_score": 75 }
]
},
{
"student_id": "013",
"student_name": "Rayan Ahmed",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 69 },
{ "topic": "Arithmetic", "understanding_score": 66 },
{ "topic": "Negative Numbers", "understanding_score": 64 },
{ "topic": "BIDMAS", "understanding_score": 67 },
{ "topic": "Fractions", "understanding_score": 70 },
{ "topic": "Algebra", "understanding_score": 63 },
{ "topic": "Geomtry", "understanding_score": 68 },
{ "topic": "Data", "understanding_score": 65 }
]
},
{
"student_id": "014",
"student_name": "Aria Walker",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 63 },
{ "topic": "Arithmetic", "understanding_score": 60 },
{ "topic": "Negative Numbers", "understanding_score": 58 },
{ "topic": "BIDMAS", "understanding_score": 56 },
{ "topic": "Fractions", "understanding_score": 54 },
{ "topic": "Algebra", "understanding_score": 52 },
{ "topic": "Geomtry", "understanding_score": 31 },
{ "topic": "Data", "understanding_score": 59 }
]
},
{
"student_id": "015",
"student_name": "Ruby Chen",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 76 },
{ "topic": "Arithmetic", "understanding_score": 74 },
{ "topic": "Negative Numbers", "understanding_score": 72 },
{ "topic": "BIDMAS", "understanding_score": 71 },
{ "topic": "Fractions", "understanding_score": 73 },
{ "topic": "Algebra", "understanding_score": 70 },
{ "topic": "Geomtry", "understanding_score": 75 },
{ "topic": "Data", "understanding_score": 69 }
]
},
{
"student_id": "016",
"student_name": "Jacob Evans",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 72 },
{ "topic": "Arithmetic", "understanding_score": 70 },
{ "topic": "Negative Numbers", "understanding_score": 68 },
{ "topic": "BIDMAS", "understanding_score": 67 },
{ "topic": "Fractions", "understanding_score": 69 },
{ "topic": "Algebra", "understanding_score": 66 },
{ "topic": "Geomtry", "understanding_score": 71 },
{ "topic": "Data", "understanding_score": 65 }
]
},
{
"student_id": "017",
"student_name": "Ethan Hughes",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 44 },
{ "topic": "Arithmetic", "understanding_score": 41 },
{ "topic": "Negative Numbers", "understanding_score": 39 },
{ "topic": "BIDMAS", "understanding_score": 37 },
{ "topic": "Fractions", "understanding_score": 35 },
{ "topic": "Algebra", "understanding_score": 32 },
{ "topic": "Geomtry", "understanding_score": 46 },
{ "topic": "Data", "understanding_score": 43 }
]
},
{
"student_id": "018",
"student_name": "Mia Turner",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 85 },
{ "topic": "Arithmetic", "understanding_score": 83 },
{ "topic": "Negative Numbers", "understanding_score": 81 },
{ "topic": "BIDMAS", "understanding_score": 80 },
{ "topic": "Fractions", "understanding_score": 84 },
{ "topic": "Algebra", "understanding_score": 78 },
{ "topic": "Geomtry", "understanding_score": 82 },
{ "topic": "Data", "understanding_score": 79 }
]
},
{
"student_id": "019",
"student_name": "Caleb Ross",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 68 },
{ "topic": "Arithmetic", "understanding_score": 65 },
{ "topic": "Negative Numbers", "understanding_score": 63 },
{ "topic": "BIDMAS", "understanding_score": 61 },
{ "topic": "Fractions", "understanding_score": 64 },
{ "topic": "Algebra", "understanding_score": 59 },
{ "topic": "Geomtry", "understanding_score": 67 },
{ "topic": "Data", "understanding_score": 62 }
]
},
{
"student_id": "020",
"student_name": "Lily Cooper",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 74 },
{ "topic": "Arithmetic", "understanding_score": 73 },
{ "topic": "Negative Numbers", "understanding_score": 71 },
{ "topic": "BIDMAS", "understanding_score": 70 },
{ "topic": "Fractions", "understanding_score": 72 },
{ "topic": "Algebra", "understanding_score": 69 },
{ "topic": "Geomtry", "understanding_score": 75 },
{ "topic": "Data", "understanding_score": 68 }
]
}
]
},
{
"class_id": "503",
"class_name": "Year 6 Cedar",
"teacher_id": "303",
"teacher_name": "Hannah Lee",
"alert_run_at": "2026-05-17T07:15:00Z",
"ordered_topics": [
"Place Value",
"Arithmetic",
"Negative Numbers",
"BIDMAS",
"Fractions",
"Algebra",
"Geomtry",
"Data"
],
"students": [
{
"student_id": "021",
"student_name": "Ava Johnson",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 77 },
{ "topic": "Arithmetic", "understanding_score": 74 },
{ "topic": "Negative Numbers", "understanding_score": 72 },
{ "topic": "BIDMAS", "understanding_score": 73 },
{ "topic": "Fractions", "understanding_score": 75 },
{ "topic": "Algebra", "understanding_score": 71 },
{ "topic": "Geomtry", "understanding_score": 76 },
{ "topic": "Data", "understanding_score": 70 }
]
},
{
"student_id": "022",
"student_name": "Daniel Moore",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 70 },
{ "topic": "Arithmetic", "understanding_score": 69 },
{ "topic": "Negative Numbers", "understanding_score": 67 },
{ "topic": "BIDMAS", "understanding_score": 68 },
{ "topic": "Fractions", "understanding_score": 71 },
{ "topic": "Algebra", "understanding_score": 66 },
{ "topic": "Geomtry", "understanding_score": 72 },
{ "topic": "Data", "understanding_score": 65 }
]
},
{
"student_id": "023",
"student_name": "Amelia Scott",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 46 },
{ "topic": "Arithmetic", "understanding_score": 42 },
{ "topic": "Negative Numbers", "understanding_score": 40 },
{ "topic": "BIDMAS", "understanding_score": 39 },
{ "topic": "Fractions", "understanding_score": 44 },
{ "topic": "Algebra", "understanding_score": 36 },
{ "topic": "Geomtry", "understanding_score": 48 },
{ "topic": "Data", "understanding_score": 41 }
]
},
{
"student_id": "024",
"student_name": "Lucas Wright",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 71 },
{ "topic": "Arithmetic", "understanding_score": 68 },
{ "topic": "Negative Numbers", "understanding_score": 66 },
{ "topic": "BIDMAS", "understanding_score": 67 },
{ "topic": "Fractions", "understanding_score": 69 },
{ "topic": "Algebra", "understanding_score": 64 },
{ "topic": "Geomtry", "understanding_score": 70 },
{ "topic": "Data", "understanding_score": 65 }
]
},
{
"student_id": "025",
"student_name": "Grace Hall",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 81 },
{ "topic": "Arithmetic", "understanding_score": 78 },
{ "topic": "Negative Numbers", "understanding_score": 76 },
{ "topic": "BIDMAS", "understanding_score": 77 },
{ "topic": "Fractions", "understanding_score": 79 },
{ "topic": "Algebra", "understanding_score": 75 },
{ "topic": "Geomtry", "understanding_score": 80 },
{ "topic": "Data", "understanding_score": 74 }
]
},
{
"student_id": "026",
"student_name": "Yusuf Ali",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 55 },
{ "topic": "Arithmetic", "understanding_score": 52 },
{ "topic": "Negative Numbers", "understanding_score": 50 },
{ "topic": "BIDMAS", "understanding_score": 48 },
{ "topic": "Fractions", "understanding_score": 51 },
{ "topic": "Algebra", "understanding_score": 43 },
{ "topic": "Geomtry", "understanding_score": 57 },
{ "topic": "Data", "understanding_score": 49 }
]
},
{
"student_id": "027",
"student_name": "Isla Murphy",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 79 },
{ "topic": "Arithmetic", "understanding_score": 73 },
{ "topic": "Negative Numbers", "understanding_score": 71 },
{ "topic": "BIDMAS", "understanding_score": 72 },
{ "topic": "Fractions", "understanding_score": 74 },
{ "topic": "Algebra", "understanding_score": 70 },
{ "topic": "Geomtry", "understanding_score": 75 },
{ "topic": "Data", "understanding_score": 69 }
]
},
{
"student_id": "028",
"student_name": "Henry Clark",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 74 },
{ "topic": "Arithmetic", "understanding_score": 71 },
{ "topic": "Negative Numbers", "understanding_score": 69 },
{ "topic": "BIDMAS", "understanding_score": 70 },
{ "topic": "Fractions", "understanding_score": 72 },
{ "topic": "Algebra", "understanding_score": 68 },
{ "topic": "Geomtry", "understanding_score": 73 },
{ "topic": "Data", "understanding_score": 67 }
]
},
{
"student_id": "029",
"student_name": "Chloe Adams",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 52 },
{ "topic": "Arithmetic", "understanding_score": 47 },
{ "topic": "Negative Numbers", "understanding_score": 45 },
{ "topic": "BIDMAS", "understanding_score": 44 },
{ "topic": "Fractions", "understanding_score": 38 },
{ "topic": "Algebra", "understanding_score": 41 },
{ "topic": "Geomtry", "understanding_score": 54 },
{ "topic": "Data", "understanding_score": 46 }
]
},
{
"student_id": "030",
"student_name": "Evie Parker",
"topic_understanding": [
{ "topic": "Place Value", "understanding_score": 83 },
{ "topic": "Arithmetic", "understanding_score": 80 },
{ "topic": "Negative Numbers", "understanding_score": 78 },
{ "topic": "BIDMAS", "understanding_score": 79 },
{ "topic": "Fractions", "understanding_score": 81 },
{ "topic": "Algebra", "understanding_score": 77 },
{ "topic": "Geomtry", "understanding_score": 82 },
{ "topic": "Data", "understanding_score": 76 }
]
}
]
}
]
}

View File

@@ -0,0 +1,337 @@
{
"reference_date": "2026-05-17",
"challenge": "bonus-early-warning-system",
"description": "All students ranked by risk using their weakest subject understanding score. Risk score is 100 minus the lowest subject understanding score.",
"students_ranked_by_risk": [
{
"rank": 1,
"student_id": "002",
"student_name": "Mason Reid",
"class_id": "501",
"class_name": "Year 5 Maple",
"risk_score": 72,
"specific_topic": "Fractions",
"topic_understanding_score": 28,
"recommended_action": "Assign 3 scaffolded Fractions questions and follow with a short teacher check-in today."
},
{
"rank": 2,
"student_id": "011",
"student_name": "Leo Kim",
"class_id": "502",
"class_name": "Year 5 Oak",
"risk_score": 71,
"specific_topic": "Algebra",
"topic_understanding_score": 29,
"recommended_action": "Start with a same-day Algebra reset task and review the first two answers live."
},
{
"rank": 3,
"student_id": "014",
"student_name": "Aria Walker",
"class_id": "502",
"class_name": "Year 5 Oak",
"risk_score": 69,
"specific_topic": "Geomtry",
"topic_understanding_score": 31,
"recommended_action": "Use worked Geomtry examples first, then ask Aria to explain one shape strategy independently."
},
{
"rank": 4,
"student_id": "017",
"student_name": "Ethan Hughes",
"class_id": "502",
"class_name": "Year 5 Oak",
"risk_score": 68,
"specific_topic": "Algebra",
"topic_understanding_score": 32,
"recommended_action": "Assign 3 targeted Algebra questions and reteach the rule before independent practice."
},
{
"rank": 5,
"student_id": "008",
"student_name": "Sofia Nguyen",
"class_id": "501",
"class_name": "Year 5 Maple",
"risk_score": 67,
"specific_topic": "Fractions",
"topic_understanding_score": 33,
"recommended_action": "Give a short Fractions intervention set before the next quiz and review errors together."
},
{
"rank": 6,
"student_id": "023",
"student_name": "Amelia Scott",
"class_id": "503",
"class_name": "Year 6 Cedar",
"risk_score": 64,
"specific_topic": "Algebra",
"topic_understanding_score": 36,
"recommended_action": "Assign a short Algebra restart task and check completion before the next checkpoint."
},
{
"rank": 7,
"student_id": "029",
"student_name": "Chloe Adams",
"class_id": "503",
"class_name": "Year 6 Cedar",
"risk_score": 62,
"specific_topic": "Fractions",
"topic_understanding_score": 38,
"recommended_action": "Use 3 focused Fractions questions and review misconceptions in a small group."
},
{
"rank": 8,
"student_id": "026",
"student_name": "Yusuf Ali",
"class_id": "503",
"class_name": "Year 6 Cedar",
"risk_score": 57,
"specific_topic": "Algebra",
"topic_understanding_score": 43,
"recommended_action": "Model one Algebra example, then require Yusuf to complete the next two questions independently."
},
{
"rank": 9,
"student_id": "005",
"student_name": "Noah Patel",
"class_id": "501",
"class_name": "Year 5 Maple",
"risk_score": 51,
"specific_topic": "Algebra",
"topic_understanding_score": 49,
"recommended_action": "Run a teacher-led Algebra mini-lesson and finish with one independent checkpoint."
},
{
"rank": 10,
"student_id": "019",
"student_name": "Caleb Ross",
"class_id": "502",
"class_name": "Year 5 Oak",
"risk_score": 41,
"specific_topic": "Algebra",
"topic_understanding_score": 59,
"recommended_action": "Give Caleb 2 short Algebra questions and ask him to explain the rule before solving."
},
{
"rank": 11,
"student_id": "007",
"student_name": "Isaac Green",
"class_id": "501",
"class_name": "Year 5 Maple",
"risk_score": 38,
"specific_topic": "Negative Numbers",
"topic_understanding_score": 62,
"recommended_action": "Add a quick Negative Numbers warm-up and monitor the next independent attempt."
},
{
"rank": 12,
"student_id": "013",
"student_name": "Rayan Ahmed",
"class_id": "502",
"class_name": "Year 5 Oak",
"risk_score": 37,
"specific_topic": "Algebra",
"topic_understanding_score": 63,
"recommended_action": "Use a short Algebra retrieval routine and check the setup step before calculation."
},
{
"rank": 13,
"student_id": "024",
"student_name": "Lucas Wright",
"class_id": "503",
"class_name": "Year 6 Cedar",
"risk_score": 36,
"specific_topic": "Algebra",
"topic_understanding_score": 64,
"recommended_action": "Review one Algebra example and then switch Lucas to independent practice."
},
{
"rank": 14,
"student_id": "010",
"student_name": "Mila Foster",
"class_id": "501",
"class_name": "Year 5 Maple",
"risk_score": 35,
"specific_topic": "Data",
"topic_understanding_score": 65,
"recommended_action": "Use a brief Data refresher before the next independent practice block."
},
{
"rank": 15,
"student_id": "016",
"student_name": "Jacob Evans",
"class_id": "502",
"class_name": "Year 5 Oak",
"risk_score": 35,
"specific_topic": "Data",
"topic_understanding_score": 65,
"recommended_action": "Assign 2 short Data questions and prompt Jacob to explain what the chart shows."
},
{
"rank": 16,
"student_id": "022",
"student_name": "Daniel Moore",
"class_id": "503",
"class_name": "Year 6 Cedar",
"risk_score": 35,
"specific_topic": "Data",
"topic_understanding_score": 65,
"recommended_action": "Give Daniel a short mixed Data check to confirm readiness."
},
{
"rank": 17,
"student_id": "004",
"student_name": "Owen Hughes",
"class_id": "501",
"class_name": "Year 5 Maple",
"risk_score": 34,
"specific_topic": "Data",
"topic_understanding_score": 66,
"recommended_action": "Give one structured Data question and ask Owen to talk through his steps."
},
{
"rank": 18,
"student_id": "028",
"student_name": "Henry Clark",
"class_id": "503",
"class_name": "Year 6 Cedar",
"risk_score": 33,
"specific_topic": "Data",
"topic_understanding_score": 67,
"recommended_action": "Use a quick Data warm-up and monitor accuracy on the first few questions."
},
{
"rank": 19,
"student_id": "003",
"student_name": "Layla Brooks",
"class_id": "501",
"class_name": "Year 5 Maple",
"risk_score": 32,
"specific_topic": "Algebra",
"topic_understanding_score": 68,
"recommended_action": "Add one Algebra check question and confirm Layla's method before moving on."
},
{
"rank": 20,
"student_id": "020",
"student_name": "Lily Cooper",
"class_id": "502",
"class_name": "Year 5 Oak",
"risk_score": 32,
"specific_topic": "Data",
"topic_understanding_score": 68,
"recommended_action": "Use a brief Data setup check and let Lily complete the rest independently."
},
{
"rank": 21,
"student_id": "015",
"student_name": "Ruby Chen",
"class_id": "502",
"class_name": "Year 5 Oak",
"risk_score": 31,
"specific_topic": "Data",
"topic_understanding_score": 69,
"recommended_action": "Assign one short Data question and ask Ruby to underline the key information used."
},
{
"rank": 22,
"student_id": "027",
"student_name": "Isla Murphy",
"class_id": "503",
"class_name": "Year 6 Cedar",
"risk_score": 31,
"specific_topic": "Data",
"topic_understanding_score": 69,
"recommended_action": "Add a short Data retrieval question and check confidence after completion."
},
{
"rank": 23,
"student_id": "021",
"student_name": "Ava Johnson",
"class_id": "503",
"class_name": "Year 6 Cedar",
"risk_score": 30,
"specific_topic": "Data",
"topic_understanding_score": 70,
"recommended_action": "Give Ava one Data reasoning question as a confidence check before the main task."
},
{
"rank": 24,
"student_id": "001",
"student_name": "Aaliyah Khan",
"class_id": "501",
"class_name": "Year 5 Maple",
"risk_score": 29,
"specific_topic": "Algebra",
"topic_understanding_score": 71,
"recommended_action": "Use a quick Algebra warm-up and confirm accuracy on the first item."
},
{
"rank": 25,
"student_id": "025",
"student_name": "Grace Hall",
"class_id": "503",
"class_name": "Year 6 Cedar",
"risk_score": 26,
"specific_topic": "Data",
"topic_understanding_score": 74,
"recommended_action": "Use a low-stakes Data retrieval question to keep Grace secure on the topic."
},
{
"rank": 26,
"student_id": "012",
"student_name": "Ella Martin",
"class_id": "502",
"class_name": "Year 5 Oak",
"risk_score": 25,
"specific_topic": "Data",
"topic_understanding_score": 75,
"recommended_action": "Give a single Data check and let Ella move on if the interpretation is correct."
},
{
"rank": 27,
"student_id": "030",
"student_name": "Evie Parker",
"class_id": "503",
"class_name": "Year 6 Cedar",
"risk_score": 24,
"specific_topic": "Data",
"topic_understanding_score": 76,
"recommended_action": "Use one Data check question and keep Evie in normal class flow unless accuracy dips."
},
{
"rank": 28,
"student_id": "009",
"student_name": "Ethan Bell",
"class_id": "501",
"class_name": "Year 5 Maple",
"risk_score": 23,
"specific_topic": "Data",
"topic_understanding_score": 77,
"recommended_action": "Keep Ethan on normal work and add one Data stretch question."
},
{
"rank": 29,
"student_id": "018",
"student_name": "Mia Turner",
"class_id": "502",
"class_name": "Year 5 Oak",
"risk_score": 22,
"specific_topic": "Algebra",
"topic_understanding_score": 78,
"recommended_action": "Offer one extension-style Algebra question and monitor whether Mia still needs support."
},
{
"rank": 30,
"student_id": "006",
"student_name": "Zara Lewis",
"class_id": "501",
"class_name": "Year 5 Maple",
"risk_score": 18,
"specific_topic": "Algebra",
"topic_understanding_score": 82,
"recommended_action": "No intervention needed beyond normal challenge work; Zara looks secure."
}
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -603,6 +603,156 @@ def gen_answer(student: dict, assignment: dict, aq: dict, q: dict, week_idx: int
}
def derive_working_steps(q: dict, ans: dict):
solve_mode = ans["solve_mode"]
correct = bool(ans["is_correct"])
topic = q["topic"]
sub_topic = q.get("sub_topic") or topic
expected = q["correct_answer"]
given = ans["answer_text"]
misconception_tag = ans.get("misconception_tag")
if solve_mode == "just_answer":
return "I solved it mentally and wrote the final answer only."
if solve_mode == "solve_together":
if correct:
return f"I followed guided steps for {topic.lower()} and reached {given}."
return f"I needed guided help on {sub_topic.lower()}, but I still ended with {given} instead of {expected}."
if solve_mode == "handwritten":
if correct:
return f"I worked it out on paper using {sub_topic.lower()} and checked that the final answer was {given}."
return f"I worked it out on paper for {sub_topic.lower()}, but my final answer was {given} instead of {expected}."
if correct:
return f"I used a step-by-step method for {sub_topic.lower()} and got the correct answer {given}."
misconception_explanations = {
"add_tops_add_bottoms": "I added the numerators and denominators directly instead of finding a common denominator.",
"fraction_op_confusion": "I mixed up the fraction rule and used the wrong operation method.",
"fraction_general_uncertainty": "I was unsure which fraction method to use, so my working was inconsistent.",
"place_value_misalignment": "I lined the digits up incorrectly and misread the place value.",
"arithmetic_slip": "My method was close, but I made a careless arithmetic slip in the calculation.",
"scaffolding_dependence": "I could start the method, but I was not secure enough to finish it independently.",
"word_problem_interpretation": "I misunderstood what the word problem was asking me to calculate.",
}
explanation = misconception_explanations.get(
misconception_tag,
f"My method did not lead to the expected answer {expected}.",
)
return f"I tried a step-by-step method for {sub_topic.lower()}, but I got {given}. {explanation}"
def derive_review_fields(q: dict, ans: dict):
correct = bool(ans["is_correct"])
solve_mode = ans["solve_mode"]
misconception_tag = ans["misconception_tag"]
expected = q["correct_answer"]
if correct:
understanding_score = {
"step_by_step": 0.95,
"handwritten": 0.85,
"just_answer": 0.75,
"solve_together": 0.65,
}.get(solve_mode, 0.75)
confidence = {
"step_by_step": 0.82,
"handwritten": 0.78,
"just_answer": 0.9,
"solve_together": 0.62,
}.get(solve_mode, 0.78)
needs_attention = understanding_score < 0.72
issue_reason = (
"Correct answer, but there is limited evidence that the method is secure."
if needs_attention else None
)
ai_feedback_review = (
"Correct answer with clear method evidence."
if solve_mode == "step_by_step"
else "Correct answer, but understanding evidence is lighter because the response is brief."
if needs_attention
else "Correct answer with secure understanding shown."
)
else:
understanding_score = {
"step_by_step": 0.4,
"handwritten": 0.32,
"just_answer": 0.2,
"solve_together": 0.28,
}.get(solve_mode, 0.25)
confidence = {
"step_by_step": 0.55,
"handwritten": 0.6,
"just_answer": 0.72,
"solve_together": 0.5,
}.get(solve_mode, 0.6)
needs_attention = True
issue_reason = {
"add_tops_add_bottoms": "The student added the numerator and denominator directly instead of finding a common denominator.",
"fraction_op_confusion": "The student confused the fraction operation and did not apply the correct method.",
"fraction_general_uncertainty": "The student shows insecure understanding of equivalent or comparable fractions.",
"place_value_misalignment": "The student misread place value, causing digits to be aligned incorrectly.",
"arithmetic_slip": "The final answer is wrong, suggesting a careless arithmetic slip rather than a secure method.",
"scaffolding_dependence": "The student appears dependent on scaffolding and does not show secure independent understanding.",
"word_problem_interpretation": "The student did not translate the word problem into the correct calculation.",
}.get(
misconception_tag,
f"The answer does not match the correct answer ({expected}), showing an incomplete understanding of the method.",
)
ai_feedback_review = f"Incorrect answer compared with the expected answer {expected}. {issue_reason}"
return {
"review_correctness_score": 1.0,
"review_question_score": 1.0,
"review_understanding_score": round(understanding_score, 3),
"review_confidence": round(confidence, 3),
"review_needs_attention": needs_attention,
"review_issue_reason": issue_reason,
"review_tags": [misconception_tag] if misconception_tag else [],
"ai_feedback_review": ai_feedback_review,
}
def build_assignment_review_summary(student_name: str, assignment_name: str, reviews: list[dict]):
if not reviews:
return None, "No submitted work is available for this assignment yet.", None
per_question_scores = []
weak_topics: dict[str, list[float]] = {}
attention_count = 0
correct_count = 0
for review in reviews:
correctness_value = 1.0 if review["is_correct"] else 0.0
understanding_value = review["review_understanding_score"]
question_score = (correctness_value + understanding_value) / 2
per_question_scores.append(question_score)
weak_topics.setdefault(review["topic"], []).append(question_score)
if review["review_needs_attention"]:
attention_count += 1
if review["is_correct"]:
correct_count += 1
overall_score = round(sum(per_question_scores) / len(per_question_scores) * 10, 2)
weakest_topics = sorted(
((topic, sum(values) / len(values)) for topic, values in weak_topics.items()),
key=lambda item: (item[1], item[0]),
)[:2]
weakest_topic_text = ", ".join(topic for topic, _ in weakest_topics) if weakest_topics else "general fluency"
next_step_outcome = "accept" if overall_score >= 6.0 else "support" if overall_score >= 4.5 else "redo"
ai_feedback = (
f"{student_name} completed {assignment_name} with {correct_count}/{len(reviews)} correct responses. "
f"Overall score is {overall_score}/10. "
f"The weakest areas were {weakest_topic_text}. "
f"{attention_count} question(s) need extra attention."
)
return overall_score, ai_feedback, next_step_outcome
# Order assignments oldest -> newest for week_idx threading.
ASSIGNMENT_DEFS_SORTED = sorted(ASSIGNMENT_DEFS, key=lambda a: a[3]) # by due_offset
weeks_total = len(ASSIGNMENT_DEFS_SORTED)
@@ -710,9 +860,12 @@ for week_idx, assignment_def in enumerate(ASSIGNMENT_DEFS_SORTED):
questions_to_answer = a_questions[:n_done]
running_time_offset = 0
answer_reviews = []
for aq in questions_to_answer:
q = QB_BY_ID[aq["question_bank_id"]]
ans = gen_answer(student, assignment_def, aq, q, week_idx, weeks_total)
working_steps = derive_working_steps(q, ans)
review = derive_review_fields(q, ans)
answered_at = started_at + timedelta(seconds=running_time_offset + ans["time_on_task_seconds"])
running_time_offset += ans["time_on_task_seconds"] + RNG.randint(5, 30)
@@ -723,12 +876,23 @@ for week_idx, assignment_def in enumerate(ASSIGNMENT_DEFS_SORTED):
"answer_type": "LATEX",
"answer_latex": ans["answer_text"],
"extracted_answer": ans["answer_text"],
"solve_mode": ans["solve_mode"],
"working_steps": working_steps,
"graded_marks": 1 if ans["is_correct"] else 0,
"marks_awarded": 1 if ans["is_correct"] else 0,
"ai_reasoning": (
"Answer matches expected solution." if ans["is_correct"]
else f"Incorrect; expected {q['correct_answer']}."
),
"is_correct": ans["is_correct"],
"ai_feedback": review["ai_feedback_review"],
"review_needs_attention": review["review_needs_attention"],
"review_issue_reason": review["review_issue_reason"],
"review_correctness_score": review["review_correctness_score"],
"review_understanding_score": review["review_understanding_score"],
"review_question_score": review["review_question_score"],
"review_confidence": review["review_confidence"],
"review_tags": review["review_tags"],
"grading_status": "GRADED",
"grading_attempts": 1,
"is_active": True,
@@ -743,6 +907,12 @@ for week_idx, assignment_def in enumerate(ASSIGNMENT_DEFS_SORTED):
"_question_difficulty": q["difficulty"],
"_answered_at": ms(answered_at),
})
answer_reviews.append({
"topic": q["topic"],
"is_correct": ans["is_correct"],
"review_understanding_score": review["review_understanding_score"],
"review_needs_attention": review["review_needs_attention"],
})
answer_id_seq += 1
total_score += (1 if ans["is_correct"] else 0)
@@ -761,6 +931,11 @@ for week_idx, assignment_def in enumerate(ASSIGNMENT_DEFS_SORTED):
log_id_seq += 1
submitted_at = started_at + timedelta(seconds=running_time_offset) if submitted else None
overall_score, assignee_ai_feedback, next_step_outcome = build_assignment_review_summary(
student["fullname"],
name,
answer_reviews,
)
assignee = {
"id": assignee_id,
@@ -771,6 +946,9 @@ for week_idx, assignment_def in enumerate(ASSIGNMENT_DEFS_SORTED):
"started_at": ms(started_at),
"submitted_at": ms(submitted_at) if submitted_at else None,
"total_marks": total_score if submitted else None,
"overall_score": overall_score if submitted else None,
"ai_feedback": assignee_ai_feedback if submitted else None,
"next_step_outcome": next_step_outcome if submitted else None,
"is_active": True,
"deactivated_at": None,
"created_at": ms(days_ago(-(offset - 7))),

File diff suppressed because it is too large Load Diff