Skema Data — Akademik Inti (Mahasiswa, KRS, Presensi, Nilai, Skripsi)¶
Status: DRAFT (13 Juli 2026) — tahap 2 dari desain skema bertahap
Melanjutkan Skema Data — Fondasi (Modul 0 & 9). Halaman ini mencakup kelompok "akademik inti": Modul 3 (Portal Mahasiswa), sebagian Modul 2 (kelas & jadwal), Modul 1c/1d/1e (cuti, aturan DO, surat-menyurat), dan Modul 2.1 (Tugas Akhir/Skripsi). Modul Keuangan, HRD, Aset, dan Perpustakaan menyusul di halaman terpisah.
1. Diagram ERD¶
2. Mahasiswa¶
| Kolom | Tipe | Keterangan |
|---|---|---|
| id | bigint (PK) | |
| tenant_id | UUID (FK → Tenant) | |
| user_id | bigint (FK → auth user, nullable) | Terisi setelah akun dibuat (pasca-PMB) |
| program_studi_id | bigint (FK → ProgramStudi) | |
| kurikulum_id | bigint (FK → Kurikulum) | Kurikulum yang berlaku sesuai angkatan |
| dosen_pembimbing_akademik_id | bigint (FK → Pegawai, nullable) | Ditentukan Prodi (Modul 2) |
| nim | varchar, unique per tenant | |
| nama | varchar | |
| angkatan | integer | |
| status | enum(aktif, cuti, lulus, do) | |
| ipk | decimal, nullable | Cache — dihitung ulang dari KRSDetail.nilai_angka, bukan sumber kebenaran |
| varchar |
3. Registrasi Ulang¶
Gerbang wajib sebelum KRS bisa diisi — lihat Cakupan Modul, Modul 3.
| Kolom | Tipe | Keterangan |
|---|---|---|
| id | bigint (PK) | |
| tenant_id | UUID (FK → Tenant) | |
| mahasiswa_id | bigint (FK → Mahasiswa) | |
| tahun_akademik_id | bigint (FK → TahunAkademik) | |
| status | enum(belum, lunas) | |
| tanggal_registrasi | date, nullable |
Kenapa bukan cek langsung ke tabel Keuangan?
RegistrasiUlang adalah status administratif (BAA), bukan tabel keuangan itu sendiri —
dipisah supaya BAA/Prodi tidak perlu akses langsung ke tabel tagihan Keuangan (least
privilege), cukup status ringkasannya. Keuangan yang meng-update status ini setelah rekonsiliasi
pembayaran (lihat skema Modul 5, menyusul).
4. Kelas Mata Kuliah (Penawaran per Semester)¶
Mata kuliah yang ditawarkan Prodi tiap semester — lihat Cakupan Modul, Modul 2.
| Kolom | Tipe | Keterangan |
|---|---|---|
| id | bigint (PK) | |
| tenant_id | UUID (FK → Tenant) | |
| mata_kuliah_id | bigint (FK → MataKuliah) | |
| tahun_akademik_id | bigint (FK → TahunAkademik) | |
| dosen_pengampu_id | bigint (FK → Pegawai) | |
| ruang_id | bigint (FK → Ruang, nullable) | |
| kuota | smallint | |
| jadwal_hari | enum(senin..minggu) | |
| jadwal_jam_mulai | time | |
| jadwal_jam_selesai | time |
5. KRS (Kartu Rencana Studi)¶
5.1 KRS (header)¶
| Kolom | Tipe | Keterangan |
|---|---|---|
| id | bigint (PK) | |
| tenant_id | UUID (FK → Tenant) | |
| mahasiswa_id | bigint (FK → Mahasiswa) | |
| tahun_akademik_id | bigint (FK → TahunAkademik) | |
| status | enum(draft, final) | "final" mengunci dari revisi di luar Masa Revisi KRS |
5.2 KRSDetail (item mata kuliah diambil + nilai)¶
| Kolom | Tipe | Keterangan |
|---|---|---|
| id | bigint (PK) | |
| tenant_id | UUID (FK → Tenant) | |
| krs_id | bigint (FK → KRS) | |
| kelas_mata_kuliah_id | bigint (FK → KelasMataKuliah) | |
| nilai_angka | decimal, nullable | |
| nilai_huruf | varchar(2), nullable | |
| metode_input_nilai | enum(online, excel), nullable | Lihat Cakupan Modul, Modul 4 |
| tanggal_input_nilai | timestamp, nullable |
KHS tidak punya tabel sendiri
KHS (Kartu Hasil Studi) adalah laporan turunan — agregasi KRSDetail milik satu
mahasiswa untuk satu tahun_akademik_id, bukan data yang disimpan terpisah. Begitu juga
transkrip kumulatif (seluruh semester berjalan).
6. Presensi¶
6.1 Presensi (header per pertemuan)¶
| Kolom | Tipe | Keterangan |
|---|---|---|
| id | bigint (PK) | |
| tenant_id | UUID (FK → Tenant) | |
| kelas_mata_kuliah_id | bigint (FK → KelasMataKuliah) | |
| pertemuan_ke | smallint | |
| tanggal | date |
6.2 PresensiDetail (per mahasiswa per pertemuan)¶
| Kolom | Tipe | Keterangan |
|---|---|---|
| id | bigint (PK) | |
| tenant_id | UUID (FK → Tenant) | |
| presensi_id | bigint (FK → Presensi) | |
| mahasiswa_id | bigint (FK → Mahasiswa) | |
| status_kehadiran | enum(hadir, izin, sakit, alpa) | |
| waktu_checkin | timestamp, nullable | Diisi mahasiswa |
| divalidasi_dosen | boolean | Lihat Cakupan Modul, Modul 4 |
7. Cuti Akademik¶
| Kolom | Tipe | Keterangan |
|---|---|---|
| id | bigint (PK) | |
| tenant_id | UUID (FK → Tenant) | |
| mahasiswa_id | bigint (FK → Mahasiswa) | |
| tahun_akademik_id | bigint (FK → TahunAkademik) | |
| status | enum(diajukan, disetujui, ditolak) | |
| disetujui_oleh_id | bigint (FK → Pegawai, nullable) | Kepala BAA — lihat Cakupan Modul §1c |
| tanggal_pengajuan | date |
8. Surat-Menyurat¶
8.1 JenisSurat (master, dikonfigurasi per tenant)¶
| Kolom | Tipe | Keterangan |
|---|---|---|
| id | bigint (PK) | |
| tenant_id | UUID (FK → Tenant) | |
| nama | varchar | mis. "Surat Keterangan Aktif Kuliah", "Legalisir Ijazah" |
8.2 SuratMenyurat¶
[DIPERBARUI] — alur sekarang melalui validasi Program Studi sebelum diproses BAA, lihat
Cakupan Modul §1e.
| Kolom | Tipe | Keterangan |
|---|---|---|
| id | bigint (PK) | |
| tenant_id | UUID (FK → Tenant) | |
| mahasiswa_id | bigint (FK → Mahasiswa) | |
| jenis_surat_id | bigint (FK → JenisSurat) | |
| status | enum(diajukan, menunggu_validasi_prodi, ditolak_prodi, diproses, selesai) | |
| divalidasi_oleh_id | bigint (FK → Pegawai, nullable) | Kaprodi/Sekprodi yang memvalidasi (Modul 2) |
| tanggal_validasi | timestamp, nullable | |
| alasan_penolakan | text, nullable | Diisi bila status = ditolak_prodi |
| file_hasil | varchar, nullable | Path dokumen PDF hasil setelah selesai |
| tanggal_pengajuan | timestamp |
9. Peringatan Akademik & Aturan DO¶
9.1 AturanPeringatanAkademik (konfigurasi per tenant)¶
| Kolom | Tipe | Keterangan |
|---|---|---|
| id | bigint (PK) | |
| tenant_id | UUID (FK → Tenant) | |
| ipk_minimum | decimal | |
| semester_evaluasi | smallint | Semester keberapa ambang ini mulai berlaku |
| masa_studi_maksimal_semester | smallint | mis. 14 |
9.2 PeringatanAkademik (log notifikasi, bukan penegakan otomatis)¶
| Kolom | Tipe | Keterangan |
|---|---|---|
| id | bigint (PK) | |
| tenant_id | UUID (FK → Tenant) | |
| mahasiswa_id | bigint (FK → Mahasiswa) | |
| tahun_akademik_id | bigint (FK → TahunAkademik) | |
| jenis | enum(ipk_rendah, masa_studi_lampau) | |
| status | enum(aktif, ditindaklanjuti) | |
| tanggal_dibuat | timestamp |
Pola notifikasi-dulu, konsisten dengan BKD (§Modul 6)
Baris di sini murni catatan/notifikasi — tidak otomatis mengubah Mahasiswa.status jadi
do. Perubahan status tetap keputusan manual BAA/Prodi, sesuai keputusan di
Cakupan Modul §1d.
10. Tugas Akhir / Skripsi¶
10.1 TugasAkhir¶
| Kolom | Tipe | Keterangan |
|---|---|---|
| id | bigint (PK) | |
| tenant_id | UUID (FK → Tenant) | |
| mahasiswa_id | bigint (FK → Mahasiswa) | |
| judul | varchar | |
| dosen_pembimbing_1_id | bigint (FK → Pegawai) | |
| dosen_pembimbing_2_id | bigint (FK → Pegawai, nullable) | |
| status | enum(pengajuan_judul, seminar_proposal, sidang_akhir, lulus) | |
| tanggal_pengajuan | date |
10.2 SeminarSkripsi (log seminar proposal & sidang akhir)¶
| Kolom | Tipe | Keterangan |
|---|---|---|
| id | bigint (PK) | |
| tenant_id | UUID (FK → Tenant) | |
| tugas_akhir_id | bigint (FK → TugasAkhir) | |
| jenis | enum(seminar_proposal, sidang_akhir) | |
| tanggal | date | |
| hasil | enum(lanjut, revisi, lulus, tidak_lulus) | |
| nilai | decimal, nullable | Diisi khusus untuk sidang_akhir |
11. Row-Level Security¶
Pola identik dengan fondasi — semua tabel di atas memakai tenant_id + kebijakan RLS yang sama
(lihat Skema Data — Fondasi §10). Tidak
ada tabel di halaman ini yang dikecualikan dari RLS.
12. Langkah Berikutnya¶
Skema tabel Keuangan (UKT, biaya flat, rekonsiliasi), HRD (data personal, evaluasi kinerja, BKD), Biro Aset, dan Perpustakaan menyusul di halaman terpisah.
Kembali ke Roadmap Implementasi atau Skema Data — Fondasi.