essai × talentcoop · math QB · 23 Apr 2026

Math P1–S3 Question Bank — Build Checklist

Exhaustive task breakdown · MC + fill-in + short-answer · Variety and difficulty handles · All 110 curriculum units

110
P1–S3 curriculum units
~550
Templates to build (avg 5 per unit)
~1,100
Target questions (2 per template)
33
Diagram units (SVG only)
300
Already live (P6+DSE)
15–20
Est. dev days to full P1–S3
Milestone plan Variety handle Difficulty handle M1: S1–S3 M2: P6 gap-close Short-answer mode M3: P4–P5 M4: P1–P3 Long-Q / DSE Section B

Milestone Plan

MScopeUnitsQs targetEffortWhy this order
M1 S1–S3 generators — Number/Algebra, Geometry, Mensuration, Data, Coord+Trig 31~3104–5 days Highest Leslie priority. Best data (UPEP 14,597 records + TSA S3 exam-points). Closes loop on acquired corpus.
M2 P6 diagram gap-close — angles (protractor), circles (geometry), symmetry, composite volume 5 gaps+30 Qs1–2 days P6 is live. Diagrams are the last gap to Grade A. Quick demo win.
SA Short-answer mode — build-mode switch (skip MC options), fill-in display format all1 day Leslie already asked about non-MC. Cross-cutting; run in parallel with M1.
M3 P4–P5 generators — fractions, decimals, percentages, area/vol, algebra intro, data 26~2603–4 days After M1 validates the pattern. Bridges P6 (live) and P1–P3.
M4 P1–P3 generators — number sense, 4 ops, basic shapes, money, time, fractions intro 38~3802–3 days Simplest math = fastest to build. Diagram bank (3D recognition) uses static SVG assets.
M5 Long-Q / DSE Section B — multi-part structured questions with mark scheme ~15 topics~1505–7 days Separate milestone. Flag for Leslie to prioritise — conditional feasibility on complex geometry proof.

Task Definition (per unit)

Every unit gets 8 build tasks. A unit is "production-grade" when all 8 are green. Same standard as the live DSE14/DSE17/P6 bank.

Variety Handle

Three levers for question variety
LeverMechanismStatusNotes
Parameter ranges Each unit in curriculum.json has constraints (e.g. P1: maxDigits:2, resultMax:100, noBorrowing:true). Generator draws from these ranges — same template, different numbers each run. Done for P1–P6 S1–S3 constraints not yet in curriculum.json — fill during M1 competency map step
Template count Target 5–7 templates per unit. Each template = one exam question pattern. More templates = more surface variety. DSE14 benchmark: 16 templates, 7 sub-topics. Needed for M1–M4 Use UPEP + TSA corpus to identify which question patterns actually appear in practice
Context wrappers 10–15 hand-written scenario contexts per topic (e.g. "A shop sells X…", "A school bus…", "Mum buys…"). Generator picks one per question. Prevents robotic "A train travels X km at Y km/h…" repetition. ~2h per grade band. P6 has ~8 wrappers Critical for word-problem topics. Not needed for pure computation (MC format)
UPEP corpus as variety ground truth: the 14,597 UPEP records cover S1–S3 topics with high density. Before writing templates, scan the corpus for each unit to see what question patterns actually appear most. This prevents building templates for patterns students never see.

Difficulty Handle

3-tier difficulty system
TierLabelUPEP calibrationTSA calibrationTarget %
1Basicqtc: 2_LV1 — direct application, 1 stepdifficulty: "basic"~40%
2Intermediateqtc: 2_LV2 — multi-step, 2–3 stepsdifficulty: "intermediate"~40%
3Advancedqtc: 2_LV3 — multi-step, requires synthesis~20%

Rules live in generators/difficulty.js. Overrides per template. Constraint: no tier > 85% of a topic's total questions. The UPEP distribution confirms this target: avg ~43% LV1 / 43% LV2 / 6% LV3 / 8% MC per book.

Empirical UPEP distribution (6 books): 2_LV1 ≈ 43%, 2_LV2 ≈ 43%, 2_LV3 ≈ 6%, 2_MC ≈ 8%. Our generator targets should mirror this — don't over-index on MC (which UPEP uses sparingly) or over-produce advanced questions.

M1 S1–S3 Generators — 31 units

Data available: TSA 2025 S3 exam-points JSON (80+ questions mapped) · UPEP 14,597 records with curriculum codes · EdCity STAR 11,826 records with topic labels · curriculum.json 31 units with objectives
Generator file plan: generators/s1s3_number_algebra.js · generators/s1s3_geometry.js · generators/s1s3_mensuration.js · generators/s1s3_data.js · generators/s1s3_coord_trig.js

Number and Algebra (units 1–14)

UnitTopicStrandTypesMapGen-MCTrapsFill-inSolveZHVerifyDiag
1Basic computation (integers, HCF/LCM)N&AMC+fill-intodotodotodotodotodotodotodon/a
2Directed numbersN&AMC+fill-in+wordtodotodotodotodotodotodotodon/a
3Approx values + numerical estimationN&AMC+fill-intodotodotodotodotodotodotodon/a
4Rational and irrational numbersN&AMC+fill-intodotodotodotodotodotodotodon/a
5Using percentagesN&AMC+fill-in+wordtodotodotodotodotodotodotodon/a
6Rates, ratios and proportionsN&AMC+fill-in+wordtodotodotodotodotodotodotodon/a
7Algebraic expressionsN&AMC+fill-intodotodotodotodotodotodotodon/a
8Linear equations in one unknownN&AMC+fill-in+wordtodotodotodotodotodotodotodon/a
9Linear equations in two unknowns (simultaneous)N&AMC+fill-in+wordtodotodotodotodotodotodotodon/a
10Laws of integral indicesN&AMC+fill-intodotodotodotodotodotodotodon/a
11PolynomialsN&AMC+fill-intodotodotodotodotodotodotodon/a
12IdentitiesN&AMC+fill-intodotodotodotodotodotodotodon/a
13Formulae (substitution + manipulation)N&AMC+fill-in+wordtodotodotodotodotodotodotodon/a
14Linear inequalities in one unknownN&AMC+fill-in+wordtodotodotodotodotodotodotodon/a

Measures, Shape and Space (units 15–27)

UnitTopicStrandTypesMapGen-MCTrapsFill-inSolveZHVerifyDiag
15Errors in measurementMSSMC+fill-in+wordtodotodotodotodotodotodotodon/a
16Arc lengths + areas of sectorsMSSMC+fill-in+wordtodotodotodotodotodotodotodon/a
173-D figures (identification + nets)MSSMC 🖼todotodotodon/atodotodotodostatic SVG bank
18Mensuration (surface area, volume)MSSMC+fill-in+wordtodotodotodotodotodotodotodon/a
19Angles and parallel linesMSSMC+fill-in 🖼todotodotodotodotodotodotodoSVG angles
20Polygons (interior angles, sum)MSSMC+fill-intodotodotodotodotodotodotodon/a
21Congruent trianglesMSSMC+fill-in 🖼todotodotodotodotodotodotodoSVG triangle pairs
22Similar trianglesMSSMC+fill-in 🖼todotodotodotodotodotodotodoSVG triangle pairs
23Quadrilaterals (properties)MSSMC+fill-in 🖼todotodotodotodotodotodotodoSVG quad
24Centres of triangles (centroid, incircle etc)MSSMC+fill-in 🖼todotodotodotodotodotodotodoSVG triangle+centre
25Pythagoras' theoremMSSMC+fill-in+wordtodotodotodotodotodotodotodoextends 2d.js
26Rectangular coordinate system (distance, mid-pt, slope)MSSMC+fill-in+wordtodotodotodotodotodotodotodoextends DSE10
27Trigonometry (sin/cos/tan, right triangle)MSSMC+fill-in+wordtodotodotodotodotodotodotodoextends 2d.js

Data Handling (units 28–31)

UnitTopicStrandTypesMapGen-MCTrapsFill-inSolveZHVerifyDiag
28Organisation of data (tally, freq tables)DataMC+fill-intodotodotodotodotodotodotodon/a
29Presentation of data (bar, pie, broken-line)DataMC+fill-in 🖼todotodotodotodotodotodotodoextends p6_data.js
30Measures of central tendency (mean/median/mode)DataMC+fill-in+wordtodotodotodotodotodotodotodon/a
31Probability (basic, equally likely)DataMC+fill-in+wordtodotodotodotodotodotodotodon/a

M2 P6 Gap-Close — 5 diagram items

P6 generators are live (54 templates, 100 Qs). Gap to Grade A: add diagrams for 5 topic types. These are quick-win SVG additions.
TopicGapDiagram typeEffort
p6-anglesNo protractor/angle diagramSVG angle arc on labelled linesS
p6-circlesCircle geometry (arc, chord)Extend p6_circles.jsS
p6-volume-compositeNo 3D composite solidSVG 2D cross-section of composite solidM
p6-symmetryNo symmetry line on shapeSVG shape with dashed axisS
p6-stats-misuseNo misleading chartSVG bar chart with broken axisS

SA Short-Answer / Fill-in Mode (cross-cutting, 1 day)

What this is: Every existing MC generator can emit a fill-in version — same stem, same answer, no options. One --mode fill-in flag in generate_questions.js + a display-mode flag in the DB schema (question_mode: 'mc' | 'fill-in'). No new templates needed.

M3 P4–P5 Generators — 26 units

Depends on M1 for pattern validation. P6 generators already cover the upper end (percentages, equations, averages, circles). P4–P5 fills the bridge.
UnitGradeTopicTypesDiag
4N1–4N2P4Multiplication II + Division II (long mult/div)MC+fill-in+wordn/a
4N3–4N4P4Multiples + factors / HCF + LCMMC+fill-inn/a
4N5P4Four arithmetic operations II (brackets, order)MC+fill-in+wordn/a
4N6P4Fractions II (add/sub, mixed)MC+fill-in+wordn/a
4N7–4N8P4Decimals I + II (place value, ops)MC+fill-in+wordn/a
4M1–4M2P4Perimeter I + Area IMC+fill-in+wordn/a
4S1–4S2P4Quadrilaterals III + Dissecting shapesMC 🖼SVG shapes
4S3P4Directions + positions III (4+8 compass, coordinates)MCn/a
4D1P4Bar charts II (grouped)MC+fill-in 🖼extends p6_data.js
5N1P5Multi-digit numbers (millions)MC+fill-inn/a
5N2–5N5P5Fractions III–V (mult, div, mixed ops)MC+fill-in+wordn/a
5N4P5Decimals III (mult/div by powers of 10)MC+fill-in+wordn/a
5A1–5A2P5Elementary algebra + Simple equations IMC+fill-in+wordn/a
5M1–5M2P5Area II (circles) + Volume I (cubes/cuboids)MC+fill-in+wordn/a (circle = p6_circles)
5S1–5S2P5Circles + 3-D shapes IIIMC 🖼extends p6_circles.js + static bank
5D1P5Bar charts III (percentage bar)MC+fill-in 🖼extends p6_data.js

M4 P1–P3 Generators — 38 units

Simplest math = fastest to build. All P1–P3 arithmetic is fully deterministic. Static SVG bank (15–20 labelled 3D-shape images) handles shape-recognition units. No TikZ needed anywhere.
UnitGradeTopicTypesDiag
1N1–1N3P1Numbers to 20/100, place valueMC+fill-inn/a
1N4P1Addition + subtraction I (≤100, no carry)MC+fill-in+wordn/a
1M1–1M4P1Length (cm), Money (HK coins), Time (hr/half-hr)MC+fill-inn/a
1S1–1S2P13-D shapes I + 2-D shapes (recognition)MC 🖼static SVG bank
1S3P1Directions + positions I (over/under/left/right)MCn/a
2N1–2N6P23/4-digit numbers, add/sub II+III, mult, divMC+fill-in+wordn/a
2M1–2M3P2Length (m), Time (min/am/pm), Money (notes)MC+fill-inn/a
2S1–2S4P23-D shapes II, Angles, Directions, Quadrilaterals IMC 🖼static SVG bank + SVG angle
2D1P2PictogramsMC+fill-in 🖼SVG pictogram
3N1–3N5P35-digit numbers, mult I, div I, 4-ops I, fractions IMC+fill-in+wordn/a (fractions: SVG bar)
3M1–3M5P3Length (km/mm), Time (s/24h), Capacity (L/mL), Weight (kg/g)MC+fill-inn/a
3S1–3S2P3Quadrilaterals II + TrianglesMC 🖼SVG shapes
3D1P3Bar charts IMC+fill-in 🖼extends p6_data.js

M5 Long-Q / DSE Section B — Flag for Leslie

Feasibility: ~65% of DSE Section B patterns are algorithmically generatable. The remaining ~35% (multi-theorem geometric proof, open algebraic reasoning) hit the limits of pure templates.
PatternGeneratable?Notes
Percentage / profit-loss word problems (multi-step)✓ YesTemplate + context wrapper
Statistics (grouped freq table, box-whisker, mean)✓ YesExtends DSE17 dispersion generators
Quadratics (find roots, sketch parabola)✓ YesConstrain discriminant for clean answers
Mensuration + composite figures✓ YesMulti-part: (a) area (b) volume — link parts by template design
Coordinate geometry (prove + find)⚠ Partial"Prove P, Q, R collinear" is generatable; open-ended proofs are harder
Multi-theorem geometry (circle + angle chasing)✗ HardDSE11 circles: some 2-step is OK; 4-step theorem chains need LLM rewrite layer
TSA Section B written (P6 + S3, multi-step)✓ YesUse TSA corpus as gold standard — 760+452 real examples with answers
Schema change needed: add parts: [{stem, answer, marks}] array to question record + marks_total field.

essai × talentcoop · math QB build checklist · 23 Apr 2026 · 110 units · generated from knowledge/curriculum.json + codebase scout