Skema Data — Perpustakaan (Katalog, Peminjaman, Denda)

Status: DRAFT (13 Juli 2026) — tahap 6, modul fungsional terakhir

Melengkapi Skema Data — Fondasi, Skema Data — Akademik Inti, Skema Data — Keuangan, Skema Data — HRD, dan Skema Data — Biro Aset. Halaman ini mencakup Modul 8 (Perpustakaan) — modul fungsional terakhir sebelum uji isolasi tenant (item terakhir di Roadmap §1).

1. Diagram ERD

ERD Perpustakaan

2. Katalog Buku

2.1 KategoriBuku (master, dikonfigurasi per tenant)

Kolom Tipe Keterangan
id bigint (PK)
tenant_id UUID (FK → Tenant)
nama varchar mis. "Teknik", "Ekonomi", "Umum"

2.2 Buku

Kolom Tipe Keterangan
id bigint (PK)
tenant_id UUID (FK → Tenant)
kategori_buku_id bigint (FK → KategoriBuku, nullable)
kode_buku varchar, unique per tenant ISBN atau kode internal
judul varchar
pengarang varchar
penerbit varchar
tahun_terbit smallint
jumlah_stok smallint

3. Peminjaman

Peminjam bisa Mahasiswa atau Dosen/Staff — dua kolom nullable, pola sama seperti Pembayaran (Skema Data — Keuangan) dan RiwayatJabatan (Skema Data — Fondasi).

3.1 PeminjamanBuku

Kolom Tipe Keterangan
id bigint (PK)
tenant_id UUID (FK → Tenant)
buku_id bigint (FK → Buku)
mahasiswa_id bigint (FK → Mahasiswa, nullable)
pegawai_id bigint (FK → Pegawai, nullable) Hanya salah satu dari dua kolom peminjam ini terisi
tanggal_pinjam date
tanggal_jatuh_tempo date
tanggal_kembali date, nullable Kosong = masih dipinjam
status enum(dipinjam, dikembalikan, terlambat)

4. Denda Keterlambatan

4.1 DendaKeterlambatan

Kolom Tipe Keterangan
id bigint (PK)
tenant_id UUID (FK → Tenant)
peminjaman_buku_id bigint (FK → PeminjamanBuku)
nominal decimal Dihitung otomatis dari lama keterlambatan
status enum(belum_bayar, lunas)
tanggal_dihitung timestamp

5. Migrasi Tambahan ke Tabel Pembayaran (Keuangan)

Satu kolom baru ditambahkan ke Pembayaran (sudah didefinisikan di Skema Data — Keuangan §5) — supaya denda perpustakaan direkonsiliasi lewat alur pembayaran manual yang sama dengan UKT/biaya flat, bukan alur terpisah:

Kolom baru Tipe Keterangan
tagihan_denda_id bigint (FK → DendaKeterlambatan, nullable) Kolom nullable ketiga — persis satu dari tiga kolom (tagihan_ukt_id/tagihan_biaya_flat_id/tagihan_denda_id) terisi per baris

6. Notifikasi

Pengingat jatuh tempo dan tagihan denda dikirim lewat kerangka Modul 10 (Pengumuman & Notifikasi) yang sudah disepakati di Cakupan Modul — bukan tabel notifikasi terpisah khusus Perpustakaan. Skema Modul 10 sendiri belum dirancang detail; dicatat sebagai kandidat halaman tambahan setelah uji isolasi tenant bila dibutuhkan.

7. Row-Level Security

Pola identik dengan halaman sebelumnya — semua tabel di atas memakai tenant_id + kebijakan RLS yang sama (lihat Skema Data — Fondasi §10).

8. Ringkasan — Seluruh Modul Fungsional Selesai

Dengan halaman ini, keenam kelompok skema data sudah lengkap:

Halaman Cakupan
Fondasi Tenant, Struktur Organisasi, Kalender, Kurikulum, Jabatan Struktural, RBAC
Akademik Inti Mahasiswa, KRS, Presensi, Nilai, Cuti Akademik, Skripsi
Keuangan UKT, Biaya Flat, Pembayaran, Gaji (ringkas)
HRD Pegawai lengkap, Evaluasi Kinerja, Cuti Pegawai, Pelatihan, BKD
Biro Aset Master Aset, Mutasi, Penyusutan, Penghapusan, Opname
Perpustakaan (halaman ini) Katalog, Peminjaman, Denda

9. Langkah Berikutnya

Sesuai Roadmap §1, langkah terakhir sebelum skema data dianggap final: uji isolasi tenant — memastikan dua tenant dummy tidak pernah bisa saling melihat data, bahkan bila ada bug di kode aplikasi yang lupa filter tenant_id.


Kembali ke Roadmap Implementasi atau Skema Data — Biro Aset.