# Legacy SIAKAD / SIMKEU Scan Report

Tanggal pemetaan: 28 Oktober 2026.

## Ringkasan sumber

- Sumber aplikasi: arsip `file siakad.zip`.
- Sumber database: dump MariaDB `database siakad.sql`.
- Arsip ZIP rusak pada central directory dan satu stream foto mahasiswa. Kode aplikasi inti pada folder `application/` berhasil diselamatkan dan dipakai untuk pemetaan migrasi.
- Dump database berisi 30 tabel. Tidak ditemukan deklarasi `FOREIGN KEY`; hubungan data pada aplikasi lama dibangun lewat kode dan kolom referensi.
- Aplikasi lama menggunakan pola CodeIgniter klasik (`CI_Controller`, `CI_Model`) dengan tiga area akses: admin/keuangan, dosen, mahasiswa.

## Tabel database legacy

`admins`, `bayar_mhs`, `dispensasi`, `dosen`, `info`, `jadwal`, `jam_kuliah`, `jenis_tagihan`, `krs`, `mahasiswa`, `mata_kuliah`, `materi_kuliah`, `mutasi_mhs`, `param_nilai`, `pembayaran_mhs`, `pesan`, `poll_jawaban`, `poll_jawaban_detail`, `poll_jenis`, `poll_pertanyaan`, `poll_transaksi`, `prodi`, `ruang_kuliah`, `semester`, `setting`, `status_mhs`, `tagihan_mhs`, `th_akademik`, `wisuda`, `wisuda_validasi`.

## Modul yang ditemukan pada aplikasi lama

### Administrator / keuangan

- Autentikasi dan pengguna
- Tahun akademik
- Program studi / jurusan
- Ruang dan jam kuliah
- Mahasiswa
- Dosen
- Mata kuliah
- Jadwal kuliah
- KRS
- Nilai
- Jenis tagihan
- Generate tagihan
- Pembayaran
- Dispensasi
- Piutang
- Mutasi mahasiswa
- Wisuda dan validasi wisuda
- Materi kuliah
- Informasi kampus
- Polling / kuesioner dan hasil polling
- Import data
- Grafik
- Laporan mahasiswa, dosen, mata kuliah, KRS, nilai, absensi, mutasi, wisuda, pembayaran, polling

### Dosen

- Dashboard
- Jadwal mengajar
- Mata kuliah
- Input / import nilai
- Hasil kuesioner
- Profil

### Mahasiswa

- Dashboard
- Isi KRS
- KRS dan jadwal
- KHS / nilai
- Keuangan
- Mata kuliah
- Polling dosen dan karyawan
- Wisuda
- Profil

## Aturan bisnis utama yang dipertahankan

- Periode aktif diambil dari `th_akademik.aktif = 'Ya'`.
- Semester mahasiswa dihitung dari tahun angkatan dan kode periode aktif.
- KRS terkait periode aktif, program studi, kelas, semester, jadwal, dosen, dan mata kuliah.
- Batas KRS modern diset 24 SKS (dapat diubah melalui `config/siakad.php`).
- KRS dapat diblokir oleh kewajiban keuangan dan dapat diloloskan melalui dispensasi.
- Nilai angka dosen 1 dan dosen 2 dirata-ratakan; default konversi yang ditemukan: A >= 80, B >= 69, C >= 58, selainnya D.
- Bobot IP: A=4, B=3, C=2, D=1, E=0.
- Nomor bukti pembayaran mengikuti pola `BY` + tahun + nomor urut.

## Masalah keamanan / teknis legacy yang ditemukan

1. Password legacy disimpan dengan MD5 32 karakter. Rebuild tidak memakai MD5 untuk password baru. Login legacy didukung sekali, lalu password otomatis di-upgrade ke hash Laravel modern.
2. CSRF pada konfigurasi lama tidak diaktifkan. Laravel memakai proteksi request forgery/CSRF bawaan pada route web.
3. Pemisahan role pada aplikasi lama tidak konsisten: field `admins.level` memiliki `super admin`, `admin`, dan `keuangan`, tetapi beberapa controller lama hanya memeriksa session `level == admin`. Rebuild memiliki middleware role yang eksplisit.
4. Database legacy tidak mendefinisikan foreign key. Rebuild mempertahankan kompatibilitas tabel agar data lama dapat dipakai, tetapi relasi Eloquent didefinisikan di kode.
5. Banyak kolom waktu legacy berisi `0000-00-00 00:00:00`; konfigurasi koneksi dibuat non-strict untuk fase transisi. Normalisasi data disarankan sebelum mengaktifkan strict mode penuh.
6. Charset tabel lama dominan `latin1`; migrasi bertahap ke `utf8mb4` disarankan setelah backup dan uji data.
7. Terdapat ketidaksesuaian enum mutasi (`Keluar`) dengan enum status mahasiswa. Versi Laravel hanya mengubah status mahasiswa ke nilai yang valid pada tabel `mahasiswa`: Aktif, Cuti, DO, Lulus.

## Catatan migrasi

Rebuild ini menggunakan pendekatan **compatibility-first**: tabel akademik lama tetap dipakai, lalu Laravel menambahkan tabel `users` sebagai lapisan autentikasi modern. Pendekatan ini mengurangi risiko kehilangan data saat cut-over. Setelah aplikasi stabil, skema database dapat dinormalisasi pada fase kedua.
