- HTML 100%
Dependency-free browser app that scales assessment marks to a target mean while preserving each student's original competition rank. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|---|---|---|
| .claude | ||
| .gitignore | ||
| index.html | ||
| README.md | ||
| sample_scores.csv | ||
Grade & Rank Scaler
This is a dependency-free local web app for scaling assessment grades while keeping the original student ranking. It accepts .xlsx and .csv files. For workbooks with multiple worksheets, it asks the user which worksheet to process. It exports an .xlsx workbook with three sheets:
Results: original source scores, normalized scores, adjusted scores, weighted grades, ranks, missing-data decisions, and rank adjustments.Assessment summary: weights, maximum scores, means, adjustments, pass protection, endpoint compression, and source-range warnings.Method: the rules and choices used for the run.
Run locally
Open index.html in a modern browser. If the browser blocks local file scripts, run a local static server from the repository root:
python3 -m http.server 4173 --directory grade-scaler
Then open http://localhost:4173.
The file is processed locally in the browser. No workbook data is uploaded.
Calculation rules
The app follows the approved Grading and Scaling Policy dated 4 December 2025 and the requested workflow:
- It asks the user to confirm the student column, assessment columns, weights, and maximum scores. Assessment
USEcheckboxes start unchecked. Weights must total 100%. - It normalizes each nonblank assessment as
score / maximum × 100. Numeric zero is preserved. Blank cells remain missing. - It adjusts each assessment toward a configurable target. The permitted target band is 74–76 for classes with at least 20 rows and 73–77 for smaller classes.
- It protects a raw assessment pass of 50 or more from being moved below 50 by a negative adjustment, caps/compresses endpoints, and keeps identical scores identical.
- It ranks normalized, unadjusted weighted grades with competition ranking (
1, 1, 3), then calculates adjusted and final ranks. - It applies rank-preservation corrections from the lowest original rank upward. Original tied-rank groups are kept together. The export records the number of grade values lowered.
Missing scores are handled per student. Blank entries are excluded from assessment means and adjustments. For a student without Special Consideration, a blank contributes zero using the normal weights. For an approved Special Consideration, the user can edit that student's assessment weights only. The Special Consideration weights must total 100%. Blank assessment cells remain blank in the displayed assessment columns and export.
The policy's pass protection applies only when a raw normalized assessment score was at least 50 and a negative adjustment would otherwise take it below 50. The app sets that assessment to 50. This can affect the intermediate adjusted grade and rank, but the final rank-preservation step restores the original rank. It does not turn a raw score below 50 into a pass.
The exported Results sheet adds normalized and adjusted assessment columns, original/adjusted/final weighted grades, original/adjusted/final ranks, a missing-data decision, and per-student adjustment notes. The Assessment summary sheet adds means, adjustments, pass-protected counts, endpoint-adjusted counts, and source-range checks.