# Task Breakdown: 05 - Tahun Ajaran & Semester

**Referensi Dokumen:** FR-04, Constraint C-01
**Tujuan:** Mengontrol kerangka waktu utama absensi dan jadwal berjalan melalui manipulasi state Semester Aktif.

## 1. Controllers
- [ ] Buat `AcademicYearController` (`super_admin`):
  - CRUD untuk `ACADEMIC_YEARS`.
- [ ] Buat `SemesterController` (`super_admin`):
  - Mengelola `SEMESTERS` dengan logika unik untuk status `is_active`.

## 2. Logic Tambahan & Validator
- [ ] Di dalam proses Pembuatan Tahun Ajaran:
  - Memaksa bahwa jika Tahun Ajaran diciptakan, entitas `ACADEMIC_YEARS` harus dibuat, *langsung disusul* dengan 2 baris `SEMESTERS` anak-nya, yakni (Semester 1 & Semester 2) via `DB::transaction`. Tidak boleh lebih atau kurang.
- [ ] Fitur Edit "Set Aktif" (`activate()` action):
  - Pada satu saat dalam sistem, *hanya diizinkan satu buah semester yang aktif (`is_active = true`)*.
  - Saat mensubmit untuk mengaktifkan semester spesifik (contoh A), fungsi harus secara paksa menonaktifkan semua semester aktif lainnya dengan `UPDATE SEMESTERS SET is_active=false...` terlebih dahulu. (Gunakan *DB Transaction* agar persisten).

## 3. Acceptance Criteria
- [ ] Mustahil terdapat `is_active=true` ganda di dalam tabel Semesters karena selalu ditimpa / tertutupi oleh transaction `false` setiap kali admin mengklik set active.
- [ ] Tahun Ajaran tidak bisa diciptakan tanpa dibarengi semester kembar. Semester tidak bisa diciptakan independen tanpa menjadi anak dari suatu Tahun Ajaran tertentu.
