# Task Breakdown: 06 - Jadwal Pelajaran

**Referensi Dokumen:** FR-06, Tech Spec 3.1
**Tujuan:** Mengelola `SCHEDULES` untuk memetakan Guru, Kelas, Semester, Hari, Sesi, dan Mata Pelajaran secara utuh. Ini akan menjadi pondasi bagi Modul Sesi Mengajar.

## 1. Controller & Validasi
- [ ] Buat `ScheduleController` (`super_admin`):
  - Akses CRUD untuk Jadwal.
  - Sediakan metode bulk insert jika memungkinkan (opsional).

## 2. Form Requests & Unique Rule
- [ ] Buat `StoreScheduleRequest` dan `UpdateScheduleRequest`
  - Validasi ketat bahwa tidak boleh ada bentrok (Composite Unique Keys) di satu entitas semester:
    - *Constraint 1*: `[semester_id, day_of_week, session_order, classroom_id]` tidak boleh ganda! Kelas tersebut mustahil diajar dalam sesi yang sama oleh orang berbeda.
    - *Constraint 2*: `[semester_id, day_of_week, session_order, teacher_id]` tidak boleh ganda! Guru tersebut mustahil mengajar di dua kelas barengan pada sesi waktu yang sama.
  - Implementasi pengecekan database ini melalui `Rule::unique('schedules')->where(...)`.

## 3. Acceptance Criteria
- [ ] Jika Form diajukan sehingga timbul jadwal di mana Guru A mengajar Kelas B dan C di jam yang sama, maka kembalikan form error dari validasi *bad request*.
- [ ] Jadwal yang menunjuk kepada *semester yang tidak aktif* secara logis belum berakibat di operasional pemindaian (hanya untuk arsip).
