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

ERD Akademik Inti

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
email 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.