1. Об ERP Scheduling System
ERP Scheduling System создана для научно-образовательных центров, которые предлагают углублённое
изучение отдельных предметов (физика и/или химия) ученикам из разных школ. У таких центров есть
специфические требования к построению системы расписания — нужно согласовывать дни и время
обучения сразу со всеми школами, откуда набраны ученики в учебные группы.
Приложение упрощает разным категориям сотрудников — администраторам, учителям, лаборантам —
управлять десятками рабочих процессов: от взаимодействия со школами-партнёрами до распределения
лабораторий и учебных кабинетов исходя из оборудования, заказанного преподавателями. Руководству
центра система даёт возможность управлять загрузкой преподавателей (общее рабочее время,
количество часов преподавания, количество учеников в группах) и принимать различные
управленческие решения. Система также позволяет собирать, обрабатывать и анализировать все
статистические данные, связанные с работой центра.
У таких образовательных центров расписание не бывает статичным. Оно меняется ежедневно —
переносы, замены, отмены.
Главная задача Scheduling System — сделать процесс управления расписанием и ресурсами
образовательного центра прозрачным, интуитивно понятным и удобным в работе.
Ключевые возможности
Технические гарантии
Иммутабельность
данных
Атомарность
транзакций
Гранулярные
права доступа
Токен доступа
с автовыходом
Защита от конфликтов
на уровне БД
Zero Trust
Cloudflare Tunnel
2. Кто работает в системе
В системе восемь ролей. Одному сотруднику может быть назначено несколько ролей одновременно.
| Роль |
Кто это |
Что делает в системе |
| Суперадмин |
Технический руководитель |
Полный доступ. Управление справочниками, сотрудниками, общими настройками. |
| Администратор |
Любой сотрудник с административными правами — в т.ч. как дополнительная роль |
Рассматривает входящие запросы на изменения в расписании, уточняет параметры и подтверждает их. Единственный
кто реально вносит изменения в данные — approve или reject. |
| Учитель |
Преподаватель |
Инициирует изменения в расписании: переносы, отмены, замены, заказ оборудования. Всё оформляется как запрос к
администратору — учитель ничего не меняет напрямую. |
| Лаборант |
Сотрудник лаборатории |
Видит список предстоящих уроков с заказанным оборудованием. Готовит и доставляет комплекты. Не создаёт и не
изменяет заказы — только исполняет. |
| Директор |
Директор образовательного центра |
Полный просмотр расписания и отчётов за любой период. Управляет загрузкой учителей и
назначает замены. Может также вести уроки (если назначен учителем). |
| Завуч |
Заместитель директора по учебной работе |
Просмотр расписания и отчётов по учителям своего предмета. Управляет загрузкой учителей
и назначает замены. Может также вести уроки (если назначен учителем).
|
| Секретарь |
Секретарь / администратор офиса |
Только чтение: полное расписание, все отчёты, любой период. Не может вносить изменения. |
| Координатор центра |
Сотрудник центра |
Ведёт взаимодействие со школами со стороны образовательного центра. Сопровождает школы, координирует организационные вопросы.
|
Права доступа настраиваются гранулярно — не только по роли целиком, но и по
отдельным действиям на конкретных экранах (например, "открыть день для редактирования" или
"назначить замену учителя" может быть разрешено директору и завучу отдельно от полного
доступа администратора). Это позволяет точечно расширять права без риска дать лишнее.
3. Основные процессы
3.1 Годовой шаблон и его перестройка
Расписание устроено в два уровня. Верхний — годовой недельный шаблон: типовая нагрузка
каждого учителя и группы. Нижний — фактическое понедельное расписание на весь учебный год,
построенное из этого шаблона.
1Администратор меняет шаблон —
переставляет учителя, время или день занятия в годовом шаблоне.
2Система перестраивает расписание года —
за секунды обновляет только те недели и слоты, которых коснулось изменение: изменившиеся —
обновляются, новые — добавляются, отменённые — снимаются. Расписание целиком не пересобирается.
3Текущая работа не теряется —
всё, что уже накопилось вокруг уроков, которые перестройка не затронула: заказы оборудования,
комментарии, пожелания учителей — остаётся как было.
Кабинет для урока подбирается не произвольно, а по факту потребности: наличию вытяжки,
раковины, возможности затемнения или уже заказанному оборудованию.
Урок, убранный разовой отменой, остаётся в расписании перечёркнутым — учитель и ученики видят,
что в этот день урока не будет. А если урок убрала перестройка самого шаблона (смена слота,
сокращение учебного года) — он уходит в отдельный статус archived: полностью
пропадает из всех расписаний и витрин, чтобы до конца года не копились «уроки-призраки», но
физически остаётся в таблице — внешние ключи истории заявок и аудита не позволяют его удалить.
3.2 Изменения в расписании
Расписание составляется на учебный год, однако ежедневно возникают уточнения и изменения.
Система обеспечивает их прохождение по чёткому маршруту:
1Преподаватель оформляет запрос —
указывает что именно нужно изменить: перенести урок, отменить, скорректировать заказ оборудования или изменить
номер аудитории. Директор и завуч, если они также ведут уроки, пользуются системой наравне с учителями.
2Система проверяет конфликты — в момент
оформления запроса показывает, занята ли аудитория или учитель в указанное время. Преподаватель видит
предупреждение и может скорректировать параметры или отправить запрос с конфликтом — тогда администратор
разбирается вручную.
3Администратор рассматривает запрос —
видит очередь входящих запросов, при необходимости корректирует параметры вместе с заинтересованным учителем и
подтверждает изменение.
4Расписание обновляется — после каждого
подтверждённого изменения расписание немедленно обновляется и все участники сразу видят актуальное
состояние.
5Урок завершается — система фиксирует факт
проведения автоматически по времени окончания урока.
Вся история изменений сохраняется автоматически — администратор всегда видит
что было до изменения и кто его инициировал.
Кабинет урока можно сменить тремя способами: назначить напрямую, вытеснить урок из занятого
кабинета (система сама подбирает ему новый, а если свободного нет — оставляет урок без кабинета,
не блокируя действие) или поменять местами кабинеты двух уроков. Письмо о смене кабинета уходит
не на каждое движение внутри сессии редактирования, а один раз при закрытии дня — и только тем,
у кого кабинет по итогу реально изменился.
3.3 Подготовка оборудования
1Преподаватель включает оборудование в запрос на
урок — при оформлении запроса на новый или изменённый урок указывает нужный опыт из каталога и
количество комплектов: для демонстрации или для самостоятельной работы учеников. Запрос уходит к администратору
целиком — вместе с оборудованием.
2Администратор подтверждает запрос — видит
урок и оборудование вместе, принимает одно решение. После подтверждения заказ оборудования автоматически
привязывается к уроку.
3Лаборант видит сводку по всем урокам — в
его интерфейсе отображается список заказов на ближайшие дни: что подготовить, сколько комплектов, для какого
класса и в какую аудиторию.
4Лаборант собирает и доставляет
оборудование — по данным из системы комплектует наборы для каждого урока.
5После урока заказ закрывается
автоматически — система фиксирует завершение урока по времени окончания.
Учёт физических остатков на складе и автоматическое резервирование компонентов
запланированы как отдельный модуль системы на следующем этапе.
3.4 Замена учителя
Если преподаватель не может провести урок, администратор, директор или завуч подбирают замену
из списка доступных в это время учителей того же профиля. Урок сразу отображается как замена
везде — в расписании и на коридорных ТВ-табло.
Список кандидатов формируется автоматически — система показывает только тех учителей, которые
одновременно: работают в учебном центре в этот день и время (данные берутся из рабочего графика
учителя), преподают предмет нужного грейда и не заняты в это время на другом уроке.
Если подходящей замены нет — урок помечается специальной системной записью «ожидает отмены», и
автоматически создаётся заявка на отмену урока для администратора. Если позже находится живой
заместитель — заявка отзывается сама, без участия администратора.
3.5 Наполнение системы данными (рабочий поток)
Данные вводятся в строгом порядке — каждый следующий шаг зависит от предыдущего.
- 11 таблиц — первичное наполнение системы (bootstrap)
- 2 таблицы — каталоги опытов (физика и химия)
- 2 таблицы — заявки и переписка
- 4 таблицы — блокировки и снимки дня
- 2 таблицы — история и журналы
- 1 таблица — права доступа
- 4 таблицы — очередь писем, правила, адреса отправителей, статус доставки
- 1 таблица — настройки системы
- 2 таблицы — учебный календарь
- 2 таблицы — данные персонала
IDs всех таблиц фиксированы и не меняются при переустановке системы или восстановлении из резервной копии.
Это гарантирует корректность всех ссылок между таблицами на любом этапе.
4. Из чего состоит система
Система собрана из нескольких независимых блоков. Каждый отвечает за свою часть:
| Блок |
Что делает |
| База данных |
Хранит все данные и исполняет все правила: проверки, блокировки, история изменений |
| API-сервер |
Принимает запросы, проверяет кто и что имеет право делать, передаёт команды в базу данных |
| Веб-интерфейс |
Scheduling System полностью на иврите (RTL) |
| Коридорные табло |
Отдельные экраны для холлов центра — актуальное расписание дня для преподавателей и
упрощённая версия для студентов, без личного входа (по статическому ключу устройства) |
| Уведомления |
Событийный конвейер: каждое действие (заявка подана/одобрена/отклонена, заказ оборудования,
замена учителя, обслуживание сервера) записывает событие в очередь внутри той же транзакции —
сбой записи никогда не блокирует само действие. Фоновый отправщик определяет получателей по
роли, предмету и участникам события из таблицы правил, формирует письмо и отправляет его через
транзакционный почтовый сервис — с автоматическими повторами и выключателем у администратора.
Мессенджеры (Telegram, WhatsApp) остаются возможным направлением развития. |
| Инфраструктура |
Развёрнута в Docker-контейнерах на сервере AWS, с ежедневным автоматическим резервным
копированием базы данных |
5. Надёжность и безопасность
- Каждый пользователь получает токен доступа после входа. Токен действует 2 часа (автоматический
выход при 30 минутах бездействия) и содержит информацию о его роли. Без действующего токена — никакой доступ
невозможен.
- Все правила исполняются на уровне базы данных — обойти их через интерфейс технически невозможно.
- Backend обращается к базе под отдельной, урезанной ролью: у неё физически отозваны права на прямую вставку и
удаление в таблицах уроков, журналов и сессий редактирования — любое изменение расписания возможно только
через хранимые функции с явно повышенными правами (
SECURITY DEFINER).
- История изменений не может быть изменена или удалена — ни одним пользователем, ни одной ролью.
Это гарантирует полную прозрачность всех действий в системе.
- Система автоматически блокирует конфликты в расписании.
- Доступ в интернет организован по принципу Zero Trust — через Cloudflare Tunnel.
- 391 автоматизированная регрессионная проверка (уровни API и БД) перед каждым деплоем —
покрывает цепочки согласования заявок, замены учителей, заморозку/откат дня, предотвращение
конфликтов расписания (EXCLUDE USING GIST), заказы оборудования и матрицу правил рассылки.