# Задачи: динамическое расписание и календарный учебный график Актуальная декомпозиция относится к модели, где календарный учебный график хранится дневной сеткой и назначается группе на учебный год. ## Выполнено - [x] Переписана базовая схема `V1__init.sql` под полный сброс БД. - [x] Добавлены специальности, профили обучения и связь группы с профилем. - [x] Добавлены формы обучения календарного графика. - [x] Добавлен справочник кодов активностей Excel-графика. - [x] Добавлены календарные графики, дневная сетка и назначения графиков группам. - [x] Обновлён `AcademicDateService`: активность дня определяется по назначенному группе графику. - [x] Обновлён `ScheduleGeneratorService`: обычные пары генерируются только на разрешённых днях. - [x] В `V1__init.sql` добавлены отдельные часы и недели начала для лекций, лабораторных и практик. - [x] Добавлены подгруппы для лабораторных слотов, включая выбор разных подгрупп разных групп в одном поточном лабораторном слоте; лекции и практики не делятся на подгруппы. - [x] Добавлены API профилей, календарей, дневной сетки, кодов активностей и назначений группам. - [x] Обновлены админские экраны специальностей, групп и расписания. - [x] Добавлена документация `docs/ACADEMIC_CALENDAR.md`. ## Оставшиеся задачи - [ ] Добавить интеграционные тесты генерации расписания для кодов `Т`, `Э`, `К`, `*`, `=`. - [ ] Добавить проверку конфликтов преподавателей, аудиторий и групп при сохранении правил. - [ ] Добавить модель связи пользователя-студента с учебной группой. - [ ] Добавить импорт календарного графика из Excel, если он понадобится после ручного редактора. ## Проверочный сценарий 1. Полностью сбросить локальную БД. 2. Запустить приложение и применить `V1__init.sql`. 3. Создать профиль специальности. 4. Создать календарный график и заполнить дневную сетку. 5. Назначить график группе. 6. Проверить `GET /api/schedule` на дне теории и на днях, где пары запрещены.