SANYAM
SANYAMWADHWA.TECH :: PROJECT :: DATESHEET --- SUMMARY ---TITLE............. Exam Datesheet Generator — The scheduler Thapar's exams run onDATE.............. 2025 to 2026CATEGORY.......... ProductPROBLEM........... Building an exam timetable by hand means weeks of juggling subjects, rooms, and invigilators, and one late change can break it. The generator takes the constraints and produces a clash-free datesheet, seating plan, and duty roster in one run.WHAT IT DOES...... The system Thapar Institute uses to run its exams, live at exams.thapar.edu: a graph-colouring scheduler that places every course in a clash-free slot, then seats every student, assigns every invigilator, and prints the reports. 17,000 lines of Flask over a 47-table MySQL schema, with 157 tests. --- RESULT ---METRIC 1.......... 0 clashes, by constructionMETRIC 2.......... 157 tests, deterministic rerunsMETRIC 3.......... live at exams.thapar.edu --- WHAT I BUILT ---HIGHLIGHT 1....... Scheduler on a networkx conflict graph: a course is a node, a shared student is an edge weighted by the gap that student needs. One global slot grid means a slot number is one datetime for every year, which closed the bug that gave students two exams at once.HIGHLIGHT 2....... Greedy placement with re-prioritisation after every move (multi-year courses first, then by enrolment), seeded so a rerun reproduces. Two validation passes, in slot space and in real datetimes.HIGHLIGHT 3....... Nothing partial ships: the scheduler returns a ScheduleResult with the unplaced courses and rejected pins, and a failed run is an HTTP 400 naming the constraint to relax, not a half datesheet in the database.HIGHLIGHT 4....... After the datesheet: four seating patterns (A, A*, AB, ABCD by parity class) with a per-slot reconciliation that fails loudly if a student has no seat, invigilator allocation by designation tier and duty cap, and 19 generated reports.HIGHLIGHT 5....... Per-day time-slot rules, teacher unavailability, manual swap and move checked against the same rules, and a shadow replay that pushes every historical job through a new scheduler before it is deployed. --- HOW IT WORKS ---STEP 1............ Students and teachers spreadsheetsSTEP 2............ Subjects, groups, breaks, time slots, fixed slotsSTEP 3............ Slot grid (one timeline for every year)STEP 4............ networkx conflict graphSTEP 5............ Greedy scheduler with re-prioritisationSTEP 6............ Validation in slot space and in datetimesSTEP 7............ Swap and move through the conflict checkerSTEP 8............ Seating allocation (A, A*, AB, ABCD)STEP 9............ Invigilator duty allocationSTEP 10........... 19 reports, MySQL --- FEATURES ---FEATURE 1......... Per-year start dates, daily time ranges, and per-day slot rules on one shared timelineFEATURE 2......... Fixed slots, subject groups, and minimum gaps between a student's consecutive examsFEATURE 3......... A failed run reports which knob to turn: add dates, add a time range, raise students per slot, loosen breaksFEATURE 4......... Four seating patterns with block priority, special requests, and validated emergency room movesFEATURE 5......... Invigilator allocation by designation priority, duty caps, and unavailability, with validated bulk swapsFEATURE 6......... Checkpoints at every stage, so a token can be reopened where it was leftFEATURE 7......... Datesheet, seating plans, attendance sheets, and duty rosters as PDF, DOCX, and Excel --- STACK ---STACK............. Python, Flask, networkx, MySQL, pandas --- LINKS ---DEMO.............. https://exams.thapar.eduHUMAN PAGE........ https://sanyamwadhwa.tech/projects/datesheet