CRM для школы программирования

Введение

Была реализована небольшая система для учебного центра. Она заменяет таблицы и заметки: в одном месте хранятся ученики, курсы, расписание, посещаемость и оплаты. Бэкенд построен как REST API, а интерфейс — в виде SPA.

Главный экран CRM
Главный экран: недельное расписание

Что умеет система

  • Расписание — недельный календарь занятий с навигацией по неделям.
  • Ученики — карточки с контактами, данными, история посещений и оплаты.
  • Курсы — расписание, по которому генерируются занятия.
  • Балансы — остаток занятий у каждого ученика по каждому курсу.
  • Платежи — история оплат, привязанная к балансу.
  • Посещаемость — отметки на занятии в один клик.

Курсы и расписание

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

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

Создание курса и расписание
Создание курса: время, дни недели и цвет

Ученики и балансы

Баланс ученика привязан к конкретному курсу: для пары «ученик + курс» существует только один баланс. В нём хранится число оставшихся занятий, которое можно задать вручную или изменить на нужную величину.

Платежи ведутся отдельно и не меняют баланс автоматически. Это независимые сущности: оплату можно записать в историю, а количество занятий скорректировать так, как договорились с учеником.

Карточка ученика с балансами
Карточка ученика: данные, балансы и платежи

Посещаемость

Открыв занятие, можно сразу увидеть всех учеников курса, их балансы, платежи и отметить присутствие. Для отметки доступны три типа:

  • default — ученик присутствовал, списывается одно занятие.
  • respect — пропуск по уважительной причине, занятие не списывается.
  • disrespect — пропуск без уважительной причины, списывается одно занятие.

Кнопка «Отметить всех» позволяет за один клик отметить присутствующими тех, кто ещё не отмечен. Занятие можно отменить, оставив комментарий и тему.

Одна отметка на пару «ученик + занятие». Чтобы изменить тип посещения, нужно снять отметку и поставить новую.

REST API

Весь функционал доступен через API: запросы и ответы — JSON, а сообщения об ошибках русифицированы. Реализована JWT-авторизация.

Основные группы методов

  • /student — ученики, включая список вместе с балансами
  • /course — курсы с автоматической генерацией занятий
  • /lesson — занятия, фильтр по периоду и массовый перенос
  • /balance — балансы по ученику, курсу или паре
  • /payment — платежи по балансам
  • /attendance — отметки посещаемости

Заключение

CRM закрывает основные потребности школы-заказчика: кто учится, на какие курсы ходит, сколько занятий осталось и кто присутствовал. Простое API и понятная структура данных позволяют расширять систему под свои задачи — от уведомлений родителям до отчётов по оплатам.