feat: add CSV import for student event rankings

Let advisors load preference ranks from a converted CSV with fuzzy matching, known aliases, and a parse-preview-save page instead of relying on the ranking editor.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-28 23:41:13 -04:00
co-authored by Cursor
parent 2acd83a841
commit 4c91db37c2
13 changed files with 1156 additions and 59 deletions
+32
View File
@@ -0,0 +1,32 @@
# Import Student Event Rankings
**Created:** 2026-08-28
**Last updated:** 2026-08-28
**Description:** How to import student event preference rankings from a CSV.
## CSV format
```
Student Name,1,2,3,4,5,6
"Last, First",Video Game Design,Coding,Flight
First Last,Video Game,Coding
```
- `Student Name` is required. `Last, First` and `First Last` both work.
- Rank columns are `1` through `10`. Empty cells are skipped. Extra columns are ignored.
- Event cells may be the official name, the catalog short name, or a close miss. Fuzzy matching scores both.
- Known nicknames that fuzzy cannot reach are also accepted, including `Solar Racer`, `Challenging Tech`, `Digital Photo`, `Forensics`, `Micro Controller`, `Med Tech`, `Innovations & Inventions`, `Systems Control Tech`, `Structural Eng`, `Drone Challenge`, `Robotics`, and `Audio Podcast`.
## Steps
1. Sign in and open **Student Event Ranks** (`/students/event-ranking`).
2. Click **Import**.
3. Choose the CSV and click **Parse**.
4. Review matched rows (raw text, chosen event, score) and any unmatched or ambiguous issues.
5. Click **Save to Database**. If any matched student already has rankings, confirm the replace dialog.
Save replaces rankings only for students who have at least one accepted rank in the file. Other students are unchanged.
## What is not imported
Unmatched students, unmatched events, and ambiguous event names are reported in the preview and are not saved. Fix the CSV text or add the student/event in the app, then parse again.
+2 -2
View File
@@ -1,7 +1,7 @@
# Year Rollover Runbook
**Created:** 2026-08-14
**Last updated:** 2026-08-14
**Last updated:** 2026-08-28
**Description:** How to roll the chapter into a new competition year using the locked New Year wizard.
## Prerequisites
@@ -40,7 +40,7 @@
- `/import` is add-only and skips existing first+last name matches, so re-importing a full roster is safe for returners.
11. **Import the new state schedule** from the calendar import page.
12. On **Meeting Schedule**, click **Reset** once. That page keeps team/student ids in browser localStorage; after a rollover those ids are stale.
13. Collect new event rankings and run team assignment as usual.
13. Collect new event rankings (CSV import at `/students/event-ranking/import`, or the ranking editor) and run team assignment as usual.
## What is deleted vs kept