yurii-litvinov / ExamSchedule

Инструмент для разбора индивидуальных графиков пересдач СПбГУ

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ExamSchedule

В СПбГУ студенты-должники, закрывшиеся справками, отправляются на допсессию по индивидуальному графику. Расписание допсессии составляется в студотделе и рассылается всем преподавателям, которые должны что-либо принимать, по почте в виде текстовых документов. Для каждого студента расписание состоит из списка дисциплин, которые ему надо пересдать, и для каждой дисциплины фиксируется дата сдачи, пересдачи и комиссии. Проблема в том, что у среднего активного преподавателя таких "хвостистов" может быть несколько десятков, причём расписание составляется не сразу для всех, а по частям, и досоставляется в процессе (хвостисты нередко закрывают справками весь график, и тогда для них надо составлять новый). Следить вручную за всем этим может быть сложно и трудозатратно (порядка получаса в неделю на разбор графиков, которые за эту неделю наприсылали, причём это совершенно непродуктивно потраченное время, и очень скучно), а цена ошибки высока — если студент пришёл пересдавать, а препод нет, потому что забыл занести в календарь эту конкретную сдачу, то это прямо скандал. Хочется инструмент, который бы умел это автоматизировать, тем самым помогая преподавателю экономить время и минимизируя риск кого-то пропустить.

Функциональные требования

Реализовать нужный инструмент можно на нескольких уровнях, в зависимости от навыков реализатора и готовности тратить на это время.

Уровень 1, базовый (полугодовая практика для второго курса)

Требуется консольный инструмент, принимающий как параметр командной строки имя .docx-файла с индивидуальным графиком и обновляющий таблицу на Яндекс.Диске с расписанием сдач. Таблица может выглядеть, например, вот так: image

При запуске инструмента новые пересдачи из индивидуального графика добавляются на своё место в таблицу в порядке даты и времени актуальной сдачи. Старые записи пересортировываются в порядке актуальной даты и времени сдачи — если дата сдачи прошла, актуальной считается ближайшая ненаступившая в графике по дисциплине. Если все даты сдачи прошли, запись в таблице перемещается вверх и выделяется красным для ревью преподавателем и последующиего удаления.

  • Должна быть возможность запуска инструмента без параметров — в этом случае он пересортирует уже имеющиеся в таблице даты.
  • Ссылка на таблицу и клиентские секреты для доступа на Яндекс.Диск должны браться из конфигурации, по требованию Яндекс.Диска должна выполняться авторизация по протоколу OAuth.
    • Должна быть также написана подробная инструкция, как любому преподавателю получить, собрать и настроить инструмент для работы со своими индивидуальными графиками.
  • дополнительная задача После каждого запуска должен гененироваться календарь в формате iCal для удобного экспорта в календари наподобие Яндекс.Календарь.

Уровень 2, продвинутый (полугодовая или годовая практика для второго курса)

Требуется веб-приложение, которое красиво отображает календарь сдач по индивидуальным графикам для зарегистрированных преподавателей и позволяет загрузить .docx с индивидуальным графиком, чтобы добавить оттуда новые записи.

  1. Требуется аутентификация преподавателей.
  2. Требуется экспорт календаря с автоматическим обновлением, как это сейчас делает тул для синхронизации календаря и Timetable.
  3. Требуется возможность пометить сдачу как успешную, в этом случае запись дисциплины удаляется из базы.

Уровень 3, экспертный (годовая практика для второго или третьего курса)

Требуется веб-приложение для составления и просмотра расписания индивидуальных графиков. Боль преподавателей по разбору графиков несравнима с болью сотрудников студотдела по их составлению, кроме того, кривые .doc-файлы, рассылаемые по почте, никому радости не добавляют (и, скорее всего, сложны в парсинге). Поэтому предлагается сделать приложение, автоматизирующее и составление графиков тоже, и записывающее составленные графики в базу, доступную для отображения преподавательской части из уровня 2.

  1. Все требования Уровня 2 применимы и тут, к преподавательскому интерфейсу приложения.
  2. Интерфейс составления индивидуального графика должен позволять ввести ФИО студента и номер его группы, после чего отобразится подгруженное из Timetable расписание для его учебной группы (чтобы избежать попадания пересдачи на пару по расписанию).
  3. Интерфейс также должен позволять выбрать из списка дисциплину, по которой выполняется пересдача, и указать преподавателя. После чего показывается расписание преподавателя, подгруженное из Timetable (чтобы избежать попадания пересдачи на время, когда преподаватель на паре).
    1. Выбор из списка выполняется по учебному плану, для этого потребуется использовать сервис парсинга учебных планов, который уже более-менее существует.
    2. В списке должны отображаться только дисциплины, по которым в принципе возможна пересдача (по номеру группы можно понять, о каких семестрах может идти речь, плюс исключить из списка дисциплины без аттестации).
    3. Должен быть удобный поиск по списку (начали вводить дисциплину или её код — показываются отфильтрованные дисциплины).
    4. На комиссию нельзя выбрать преподавателя, который принимал сдачу и пересдачу.
  4. дополнительная задача Преподаватель может через свой интерфейс ввести время, когда он никак не может (например, в командировке), эта информация также показывается в интерфейсе сотрудника студотдела.
  5. После выбора дисциплины и преподавателя появляется возможность указать время и место сдачи, пересдачи и комиссии.
    1. Из Timetable получаем информацию о занятости аудиторий, проверяем, что в данном тайм-слоте аудитория свободна.
    2. Проверяется, что данный тайм-слот не занят другой пересдачей и другие ограничения (которые требуется предварительно выяснить в студотделе — например, кажется, не больше двух сдач в день).
  6. По нажатию на кнопку "Сохранить" запись добавляется в базу.
  7. Должна быть возможность экспорта новых записей в файл с распоряжением (тот самый .docx, который сейчас рассылают преподавателям — рассылать его не будут, но приказ на утверждение надо отправить в правильной форме).
  8. Должна быть возможность показать все записи индивидуальных графиков или отфильтрованные по конкретному студенту или преподавателю.

Технические требования

  1. Реализация должна быть на платформе .NET и языках программирования C# или F#.
  2. Работа должна вестись в этом репозитории, согласно Git Flow (main — стабильная релизная ветка, develop — актуальная разработческая ветка, вся разработка в feature-ветках, мерджащихся через пуллреквесты в develop).
  3. Требуется CI, модульные тесты, архитектурная документация, комментарии в коде.
  4. Для работы с .docx-файлами и электронными таблицами рекомендуется использовать библиотеку https://github.com/yurii-litvinov/DocUtils.
  5. Для работы с учебными планами, если она потребуется, можно использовать библиотеку https://github.com/yurii-litvinov/CurriculumParser или веб-сервис https://github.com/yurii-litvinov/RpdProcessor (который надо привести в адекватное состояние и задеплоить — скорее всего, с помощью научника).
  6. Для веб-приложений:
  7. Клиентская часть должна разрабатываться на TypeScript, как одностраничное приложение (на Vue, React или подобных фреймворках).
  8. Требуется авторизация по протоколу OAuth с использованием российских OAuth-сервисов (например, Яндекс).
  9. Видимо, требуется общая для всех преподов и сотрудников учебного управления база данных для хранения записей о пересдачах.
    1. Обязательно резервное копирование всех данных и чёткая и автоматизированная процедура восстановления сервиса со всеми данными с нуля, включая ситуацию с переходом на другой облачный провайдер.
    2. Нужна продуманная схема миграции при изменении схемы БД.
  10. Требуется контейнеризация в Docker, и, в случае наличия нескольких сервисов, Docker Compose.
  11. дополнительная задача Требуется наладить процесс выкладывания релизной версии приложения на Yandex Cloud, возможно более автоматический.

Нюансы

  1. Часто принимают пересдачу не те преподаватели, которые указаны в графике, поэтому важно каждому преподавателю отображать не только его сдачи, но и потенциально интересные ему (например, пересдачи практик у техпрога, записанные на А.Н. Терехова, скорее всего, будет принимать Ю.В. Литвинов).
    1. Если сдача и пересдача были записаны на преподавателя, комиссия должна отображаться преподавателю (его всё равно туда пригласят).
    2. Преподаватель должен иметь возможность указать пару из направления подготовки и дисциплины, все сдачи по которым попадают ему в список сдач (например, графики по учебным практикам могут писаться на завкафов разных кафедр, но организовать их всё равно должен руководитель практики).
      1. Должна быть возможность отписаться от конкретной сдачи (точнее, дисциплины у конкретного студента), если преподаватель точно знает, что это не его.
  2. Перед тем, как что-то писать для студотдела, надо сделать макет, показать его сотрудникам студотдела (возможно, с помощью научника) и собрать от них уточнённые требования.

About

Инструмент для разбора индивидуальных графиков пересдач СПбГУ

License:MIT License