1 Задача
This commit is contained in:
@@ -312,6 +312,35 @@ constraint. При чтении API разворачивает периоды о
|
||||
для backend-pod, поэтому два конкурентных переноса с разных исходных дат на одну целевую
|
||||
дату и одинаковые ресурсы проверяются последовательно.
|
||||
|
||||
### Отсутствия преподавателей и мастер замены
|
||||
|
||||
Отсутствие хранится отдельно от базовых правил расписания и проходит жизненный цикл
|
||||
`PENDING → APPROVED → RESOLVED`; отклонённые и отменённые записи получают соответственно
|
||||
`REJECTED` и `CANCELLED`. Преподаватель создаёт заявку только для себя со статусом
|
||||
`PENDING`. Администратор, учебный отдел и кафедра могут регистрировать согласованное
|
||||
отсутствие сразу. Кафедра видит и подтверждает только преподавателей, назначенных ей на
|
||||
выбранный период через `teacher_department_assignments`.
|
||||
|
||||
Для согласованного отсутствия `ScheduleQueryService` строит фактические занятия
|
||||
преподавателя в пределах периода. Мастер предлагает не более пяти проверенных вариантов
|
||||
каждого типа:
|
||||
|
||||
- преподавателей со связью по дисциплине и допустимому типу занятия;
|
||||
- ближайшие учебные даты вне периода отсутствия и эффективные временные слоты;
|
||||
- активные свободные аудитории;
|
||||
- отмену занятия или явное отклонение предложений.
|
||||
|
||||
Если у связи преподавателя с дисциплиной нет настроенных строк `teacher_lesson_types`, она
|
||||
считается разрешающей все типы; при наличии настроек требуется точное совпадение типа.
|
||||
Кандидаты-замены исключаются, если архивированы, заняты или сами отсутствуют в дату пары.
|
||||
Каждый вариант до показа проходит read-only проверку `ScheduleOverrideService`, а выбранный
|
||||
пакет повторно валидируется и сохраняется в одной транзакции. Поэтому время, аудитория,
|
||||
группы и подгруппы проверяются тем же механизмом, что и ручные точечные изменения.
|
||||
|
||||
Применённые действия создают обычные `schedule_overrides`; базовое правило семестра не
|
||||
изменяется. Таблица `teacher_absence_decisions` фиксирует как применённые, так и отклонённые
|
||||
решения. Незаполненные строки мастер не меняет, и к ним можно вернуться позже.
|
||||
|
||||
---
|
||||
|
||||
## Привязка преподаватель ↔ дисциплина
|
||||
@@ -335,6 +364,9 @@ constraint. При чтении API разворачивает периоды о
|
||||
- **Вместимость:** Суммарная численность всех групп в слоте не должна превышать вместимость аудитории
|
||||
|
||||
### Управление инцидентами
|
||||
- Регистрация отсутствия преподавателя (болезнь, командировка) с указанием периода
|
||||
- Автоматическая подсветка конфликтующих пар (Red Zone)
|
||||
- Resolution Wizard: предложение замены преподавателя или переноса занятия
|
||||
|
||||
Регистрация отсутствий и Resolution Wizard реализованы. Дальнейшее развитие этого контура:
|
||||
|
||||
- автоматическая рассылка уведомлений группам и преподавателям;
|
||||
- пакетная обработка нескольких одновременных отсутствий;
|
||||
- ранжирование вариантов по окнам и дополнительной нагрузке.
|
||||
|
||||
Reference in New Issue
Block a user