1 Задача

This commit is contained in:
dipatrik10
2026-08-06 01:10:33 +03:00
parent 28268a38c0
commit 5276729a69
33 changed files with 3569 additions and 19 deletions

View File

@@ -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 реализованы. Дальнейшее развитие этого контура:
- автоматическая рассылка уведомлений группам и преподавателям;
- пакетная обработка нескольких одновременных отсутствий;
- ранжирование вариантов по окнам и дополнительной нагрузке.