Backend API untuk Sistem Informasi Kampus Terpadu, dibangun dengan Rust + Axum + PostgreSQL.
Base URL: http://localhost:8080/api
Production: https://satria.respati-tasikmalaya.ac.id/api
- Autentikasi & Otorisasi
- Format Respons Error
- Roles (Peran Pengguna)
- API Endpoints
- Auth
- User Management
- Prodi
- Dosen
- Mahasiswa
- Mata Kuliah & RPS
- Tahun Akademik
- Kurikulum
- KRS (Kartu Rencana Studi)
- Dosen PA (Pembimbing Akademik)
- Akademik - Jadwal Kuliah
- Akademik - Rencana Penilaian
- Aset - Jenis Aset
- Aset - Ruangan
- Aset - Item
- Aset - Jadwal Ruangan
- Aset - Biaya
- Aset - Habis Pakai (Konsumsi)
- Fleet - Kendaraan
- Fleet - Booking
- Fleet - Servis
- SDM - Pegawai
- SDM - Absensi
- SDM - Cuti
- SDM - Ijin
- SDM - Surat Tugas
- SDM - Unit Kerja
- SDM - Penempatan
- SDM - Dokumen
- SDM - Riwayat
- Lookup
- Files
- Rombel (Rombongan Belajar)
- Ujian, Asesmen, dan Nilai Akhir
- Alur Penggunaan Sistem
Sistem menggunakan JWT (JSON Web Token) dengan skema Bearer Token.
- Frontend mengirim
POST /api/auth/logindenganusernamedanpassword - Backend memvalidasi kredensial dan mengembalikan
token+ data user - Frontend menyimpan token (localStorage/cookie)
- Untuk setiap request ke endpoint protected, sertakan header:
Authorization: Bearer <token_jwt>
{
"sub": "uuid-user-id",
"roles": ["SUPER_ADMIN", "DOSEN"],
"iat": 1700000000,
"exp": 1700086400
}Semua error dikembalikan dalam format JSON konsisten:
{
"error": "Pesan error yang bisa ditampilkan ke user"
}| Code | Keterangan |
|---|---|
200 |
OK - Berhasil |
201 |
Created - Data berhasil dibuat |
204 |
No Content - Berhasil hapus |
400 |
Bad Request - Input tidak valid |
401 |
Unauthorized - Token tidak ada/expired |
403 |
Forbidden - Tidak punya izin |
409 |
Conflict - Data duplikat |
500 |
Internal Server Error |
| Role | Deskripsi |
|---|---|
SUPER_ADMIN |
Akses penuh ke seluruh sistem |
STAF_AKADEMIK |
Kelola data akademik (mahasiswa, jadwal) |
STAF_BAUM |
Kelola aset & fleet management |
STAF_BASDM |
Kelola SDM & kepegawaian |
KAPRODI |
Ketua Program Studi |
DOSEN |
Akses fitur dosen (KRS approval, nilai) |
MAHASISWA |
Akses fitur mahasiswa (KRS, jadwal) |
KARYAWAN |
Akses fitur pegawai (absensi, cuti, ijin) |
Login dan mendapatkan JWT token.
Request Body:
{
"username": "admin",
"password": "password123"
}Response (200 OK):
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6...",
"user": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"username": "admin",
"full_name": "Administrator",
"roles": ["SUPER_ADMIN"]
}
}Error (401):
{
"error": "Username atau password salah"
}Roles:
SUPER_ADMIN
Mendapatkan semua user beserta perannya.
Response (200):
[
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"full_name": "Administrator",
"username": "admin",
"email": "admin@kampus.ac.id",
"is_active": true,
"created_at": "2025-06-20T10:00:00+07:00",
"roles": ["SUPER_ADMIN"]
}
]Membuat user baru.
Request Body:
{
"username": "dosen01",
"full_name": "Dr. Budi Santoso",
"email": "budi@kampus.ac.id",
"password": "password123",
"role_ids": ["uuid-role-dosen"]
}Response (201):
{
"id": "uuid-new-user",
"full_name": "Dr. Budi Santoso",
"username": "dosen01",
"email": "budi@kampus.ac.id",
"is_active": true,
"created_at": "2025-06-21T10:00:00+07:00",
"roles": ["DOSEN"]
}Mendapatkan detail satu user.
Update data user.
Request Body:
{
"full_name": "Dr. Budi Santoso, M.Kom",
"email": "budi.s@kampus.ac.id",
"is_active": true,
"role_ids": ["uuid-role-dosen", "uuid-role-kaprodi"]
}Hapus user. Response: 204 No Content
Reset password user.
Request Body:
{
"new_password": "newpassword123"
}Response (200):
{
"message": "Password user berhasil direset."
}Memberikan peran ke user.
Request Body:
{
"user_id": "uuid-user",
"role_id": "uuid-role"
}Mencabut peran dari user.
Request Body:
{
"user_id": "uuid-user",
"role_id": "uuid-role"
}Mendapatkan daftar semua peran.
Response (200):
[
{ "id": "uuid-role", "name": "SUPER_ADMIN" },
{ "id": "uuid-role", "name": "DOSEN" },
{ "id": "uuid-role", "name": "MAHASISWA" }
]Mendapatkan semua program studi.
Response (200):
[
{
"id": "uuid-prodi",
"kode_prodi": "S1TI",
"nama_prodi": "Teknik Informatika",
"id_prodi_feeder": null,
"jenjang": "S1",
"status_prodi": "Aktif",
"created_at": "2025-06-20T10:00:00+07:00",
"updated_at": "2025-06-20T10:00:00+07:00"
}
]Request Body:
{
"kode_prodi": "S1TI",
"nama_prodi": "Teknik Informatika",
"id_prodi_feeder": null,
"jenjang": "S1",
"status_prodi": "Aktif"
}Request Body (partial update):
{
"nama_prodi": "Teknik Informatika (Updated)",
"jenjang": "S1"
}Response: 204 No Content
Response (200):
[
{
"id": "uuid-dosen",
"nidn": "0412098901",
"nama_dosen": "Dr. Budi Santoso, M.Kom",
"email": "budi@kampus.ac.id",
"prodi_id": "uuid-prodi",
"nama_prodi": "Teknik Informatika",
"pegawai_id": "uuid-pegawai",
"id_penugasan_feeder": null,
"ikatan_kerja": "Tetap"
}
]Request Body:
{
"nidn": "0412098901",
"pegawai_id": "uuid-pegawai",
"prodi_id": "uuid-prodi",
"id_penugasan_feeder": null,
"ikatan_kerja": "Tetap"
}Request Body:
{
"nidn": "0412098902",
"prodi_id": "uuid-prodi-baru"
}Response (200):
[
{
"id": "uuid-mahasiswa",
"registrasi_id": "uuid-registrasi",
"nik": "3302501010011",
"nama_mahasiswa": "Ahmad Fauzi",
"email": "ahmad@student.kampus.ac.id",
"nim": "250101001",
"angkatan": 2025,
"prodi_id": "uuid-prodi",
"nama_prodi": "Teknik Informatika",
"status_mahasiswa": "Aktif",
"dosen_pa_id": "uuid-dosen",
"nama_dosen_pa": "Dr. Budi Santoso",
"user_id": "uuid-user",
"username": "250101001"
}
]Membuat mahasiswa baru (otomatis membuat akun user).
Request Body:
{
"nik": "3302501010011",
"nama_mahasiswa": "Ahmad Fauzi",
"email": "ahmad@student.kampus.ac.id",
"tempat_lahir": "Tasikmalaya",
"tanggal_lahir": "2003-05-15",
"nama_ibu_kandung": "Siti Nurhasanah",
"nim": "250101001",
"angkatan": 2025,
"prodi_id": "uuid-prodi",
"periode_masuk": "20251",
"password": "password123"
}Request Body (partial update):
{
"nama_mahasiswa": "Ahmad Fauzi Updated",
"email": "ahmad.new@student.kampus.ac.id",
"status_mahasiswa": "Cuti"
}Catatan: Hanya
SUPER_ADMINyang bisa mengubahnim.
Download template CSV untuk import mahasiswa. Response: file CSV.
Import mahasiswa dari file CSV.
Request: multipart/form-data dengan field file (CSV).
Format CSV (delimiter ;):
nik;nim;nama_mahasiswa;email;angkatan;kode_prodi
330250101001105;250101001;Budi Darmawan;budi.d@student.kampus.ac.id;2025;S1TI
Response (200):
{
"status": "SUKSES",
"total_baris_dipindai": 10,
"baris_berhasil_disimpan": 10,
"detail_error": []
}Response (200):
[
{
"id": "uuid-mk",
"kode_mk": "IF101",
"nama_mk": "Algoritma dan Pemrograman",
"sks": 4,
"semester_target": 1,
"prodi_id": "uuid-prodi",
"nama_prodi": "Teknik Informatika",
"id_matkul_feeder": null,
"sks_tatap_muka": 2,
"sks_praktek": 2,
"sks_praktek_lapangan": 0,
"sks_simulasi": 0,
"jenis_mk": "Wajib",
"file_rps_path": null,
"status_verifikasi_rps": "Belum Upload",
"catatan_verifikasi_rps": null
}
]Request Body:
{
"kode_mk": "IF101",
"nama_mk": "Algoritma dan Pemrograman",
"semester_target": 1,
"prodi_id": "uuid-prodi",
"sks_tatap_muka": 2,
"sks_praktek": 2,
"sks_praktek_lapangan": 0,
"sks_simulasi": 0,
"jenis_mk": "Wajib"
}Catatan: Hanya
SUPER_ADMINyang bisa mengubahkode_mk.
Upload file RPS (PDF/DOC). Request: multipart/form-data dengan field file.
Response (200):
{
"message": "File RPS berhasil diunggah. Menunggu verifikasi Kaprodi."
}Request Body:
{
"status_verifikasi": "Disetujui",
"catatan": "RPS sudah lengkap dan sesuai"
}Status: "Disetujui" | "Ditolak"
Response (200):
{
"mata_kuliah_id": "uuid-mk",
"deskripsi_singkat": "Pengenalan konsep dasar algoritma...",
"capaian_pembelajaran": "Mahasiswa mampu...",
"pustaka_utama": "Cormen et al. Introduction to Algorithms",
"pustaka_pendukung": "Sedgewick, Algorithms",
"matakuliah_syarat": null,
"created_at": "2025-07-01T10:00:00+07:00",
"updated_at": "2025-07-01T10:00:00+07:00"
}Request Body:
{
"deskripsi_singkat": "Pengenalan konsep dasar algoritma...",
"capaian_pembelajaran": "Mahasiswa mampu...",
"pustaka_utama": "Cormen et al.",
"pustaka_pendukung": "Sedgewick",
"matakuliah_syarat": null
}Response (200):
[
{
"id": "uuid",
"mata_kuliah_id": "uuid-mk",
"minggu_ke": 1,
"kemampuan_akhir_diharapkan": "Memahami konsep dasar...",
"bahan_kajian": "Pengenalan Algoritma",
"metode_pembelajaran": "Ceramah + Diskusi",
"waktu_belajar": "3 x 50 menit",
"kriteria_penilaian": "Quiz & Tugas",
"bobot_penilaian": "5.00"
}
]Request Body:
{
"minggu_ke": 1,
"kemampuan_akhir_diharapkan": "Memahami konsep dasar...",
"bahan_kajian": "Pengenalan Algoritma",
"metode_pembelajaran": "Ceramah + Diskusi",
"waktu_belajar": "3 x 50 menit",
"kriteria_penilaian": "Quiz & Tugas",
"bobot_penilaian": "5.00"
}Mendapatkan halaman HTML cetak RPS (untuk print/PDF).
Response (200):
[
{
"id": "uuid-ta",
"nama": "2025/2026 Ganjil",
"tanggal_mulai": "2025-09-01",
"tanggal_selesai": "2026-01-31",
"krs_mulai": "2025-08-15",
"krs_selesai": "2025-08-30",
"is_active": true,
"id_semester_feeder": "20251",
"created_at": "2025-06-20T10:00:00+07:00",
"updated_at": "2025-06-20T10:00:00+07:00"
}
]Request Body:
{
"nama": "2025/2026 Ganjil",
"tanggal_mulai": "2025-09-01",
"tanggal_selesai": "2026-01-31",
"krs_mulai": "2025-08-15",
"krs_selesai": "2025-08-30",
"is_active": true,
"id_semester_feeder": "20251"
}Format tanggal:
YYYY-MM-DD
Response (200):
[
{
"id": "uuid-kurikulum",
"nama": "Kurikulum Inti 2025",
"tahun_mulai": 2025,
"is_active": true,
"prodi_id": "uuid-prodi",
"nama_prodi": "Teknik Informatika",
"id_kurikulum_feeder": null,
"sks_lulus": 144,
"sks_wajib": 120,
"sks_pilihan": 24,
"id_semester_mulai": "20251",
"created_at": "2025-07-06T10:00:00+07:00",
"updated_at": "2025-07-06T10:00:00+07:00"
}
]Request Body:
{
"nama": "Kurikulum Inti 2025",
"tahun_mulai": 2025,
"is_active": true,
"prodi_id": "uuid-prodi",
"sks_lulus": 144,
"sks_wajib": 120,
"sks_pilihan": 24,
"id_semester_mulai": "20251"
}Mendapatkan daftar mata kuliah dalam kurikulum.
Request Body:
{
"matakuliah_id": "uuid-mk"
}Response: 201 Created
Download template CSV mapping kurikulum-matakuliah.
Import mapping via CSV. Request: multipart/form-data field file.
Format CSV (delimiter ;):
nama_kurikulum;kode_mk
Kurikulum Inti 2025;IF101
Kurikulum Inti 2025;IF102
Response (200):
{
"message": "Proses import selesai.",
"success_count": 5,
"failed_count": 1,
"errors": ["Kode MK 'XX999' tidak ditemukan di database."]
}Mendapatkan jadwal kuliah yang tersedia untuk pengambilan KRS.
Response (200):
[
{
"jadwal_id": "uuid-jadwal",
"matakuliah_id": "uuid-mk",
"kode_mk": "IF101",
"nama_mk": "Algoritma dan Pemrograman",
"sks": 4,
"semester_target": 1,
"kelas": "A",
"nama_kelas_kuliah": "IF101-A",
"hari": "Senin",
"jam_mulai": "08:00+07:00",
"jam_selesai": "10:30+07:00",
"dosen_pengampu": "Dr. Budi Santoso, Ir. Citra",
"is_paket": true
}
]Mengambil mata kuliah (KRS).
Request Body:
{
"tahun_akademik_id": "uuid-ta",
"jadwal_kuliah_ids": ["uuid-jadwal-1", "uuid-jadwal-2"]
}Response (201):
{
"message": "Mata Kuliah berhasil masuk krs"
}Melihat KRS yang sudah diambil.
Response (200):
[
{
"id": "uuid-enrollment",
"registrasi_id": "uuid-registrasi",
"tahun_akademik": "2025/2026 Ganjil",
"kode_mk": "IF101",
"nama_mk": "Algoritma dan Pemrograman",
"sks": 4,
"status_approval": "MenungguPersetujuan",
"nilai_huruf": null,
"id_peserta_kelas_feeder": null,
"id_nilai_feeder": null,
"nilai_angka": null,
"nilai_indeks": null
}
]Status Approval:
MenungguPersetujuan|Disetujui|Ditolak|Selesai|Mengulang
Membatalkan pengambilan mata kuliah.
Menyetujui/menolak KRS mahasiswa (oleh Dosen PA).
Request Body:
{
"status_approval": "Disetujui"
}Input nilai mahasiswa.
Request Body:
{
"nilai_angka": "85.50",
"nilai_indeks": "3.50",
"nilai_huruf": "A",
"id_nilai_feeder": null
}Mendapatkan daftar mahasiswa bimbingan.
Response (200):
[
{
"id": "uuid-mahasiswa",
"nim": "250101001",
"nama_mahasiswa": "Ahmad Fauzi",
"angkatan": 2025,
"email": "ahmad@student.kampus.ac.id",
"nama_prodi": "Teknik Informatika"
}
]Melihat KRS mahasiswa bimbingan.
Assign Dosen PA secara batch per rombel.
Request Body:
{
"prodi_id": "uuid-prodi",
"angkatan": 2025,
"kode_rombel": "A",
"dosen_pa_id": "uuid-dosen"
}Response (200):
{
"message": "Berhasil menetapkan Dosen PA untuk 30 mahasiswa."
}Assign Dosen PA untuk satu mahasiswa.
Request Body:
{
"registrasi_id": "uuid-registrasi",
"dosen_pa_id": "uuid-dosen"
}GET /api/akademik/jadwal-kuliah?tahun_akademik_id={uuid}&prodi_id={uuid} (SUPER_ADMIN, STAF_AKADEMIK, STAF_BAUM, DOSEN)
Response (200):
[
{
"id": "uuid-jadwal",
"kelas": "A",
"id_kelas_kuliah_feeder": null,
"nama_kelas_kuliah": "IF101-A",
"hari": "Senin",
"jam_mulai": "08:00+07:00",
"jam_selesai": "10:30+07:00",
"matakuliah_id": "uuid-mk",
"nama_mk": "Algoritma dan Pemrograman",
"kode_mk": "IF101",
"sks": 4,
"prodi_id": "uuid-prodi",
"nama_prodi": "Teknik Informatika",
"tahun_akademik_id": "uuid-ta",
"nama_tahun_akademik": "2025/2026 Ganjil",
"dosen_pengampu": [
{
"dosen_id": "uuid-dosen",
"nama_dosen": "Dr. Budi Santoso",
"peran": "Koordinator",
"id_aktivitas_mengajar_feeder": null,
"sks_substansi_total": "4.00",
"rencana_tatap_muka": 16,
"realisasi_tatap_muka": null
}
],
"ruangan_id": "uuid-ruangan",
"nama_ruangan": "Lab Komputer 1"
}
]Request Body:
{
"matakuliah_id": "uuid-mk",
"tahun_akademik_id": "uuid-ta",
"hari": "Senin",
"jam_mulai": "08:00+07:00",
"jam_selesai": "10:30+07:00",
"kelas": "A",
"nama_kelas_kuliah": "IF101-A",
"dosen_pengampu": [
{
"dosen_id": "uuid-dosen",
"peran": "Koordinator",
"sks_substansi_total": "4.00",
"rencana_tatap_muka": 16
}
]
}Hari:
Senin|Selasa|Rabu|Kamis|Jumat|Sabtu|Minggu
Peran:Koordinator|Anggota
Format jam:HH:MM+07:00(TIMETZ) atauHH:MM(otomatis WIB)
Download template CSV import jadwal.
Import jadwal dari CSV. Request: multipart/form-data field file.
Format CSV (delimiter ;):
Hari;Jam;Kode MK;Dosen Pengampu;Kelas;Ruangan;tahun akademik
Senin;08:00-10:30;IF101;Dr. Budi Santoso;A;Lab Komputer 1;2025/2026 Ganjil
Plot jadwal kuliah ke ruangan.
Request Body:
{
"jadwal_kuliah_id": "uuid-jadwal",
"ruangan_id": "uuid-ruangan"
}Roles: SUPER_ADMIN, KAPRODI, DOSEN
Response (200):
{
"id": "uuid",
"jadwal_kuliah_id": "uuid-jadwal",
"file_kontrak_path": null,
"bobot_kehadiran": "10.00",
"bobot_tugas": "20.00",
"bobot_uts": "25.00",
"bobot_uas": "30.00",
"bobot_praktek": "15.00",
"catatan_rencana_praktikum": "Lab setiap Rabu",
"file_praktikum_path": null,
"created_at": "2025-09-01T10:00:00+07:00",
"updated_at": "2025-09-01T10:00:00+07:00"
}Request Body:
{
"bobot_kehadiran": "10.00",
"bobot_tugas": "20.00",
"bobot_uts": "25.00",
"bobot_uas": "30.00",
"bobot_praktek": "15.00",
"catatan_rencana_praktikum": "Lab setiap Rabu"
}Upload file kontrak/praktikum. {jenis_file}: kontrak | praktikum
Request: multipart/form-data field file.
Roles: SUPER_ADMIN, STAF_BAUM
Response (200):
[
{
"id": "uuid",
"nama_jenis": "Komputer",
"deskripsi": "Perangkat komputer desktop/laptop",
"kelompok": "Sarana",
"created_at": "2025-07-14T10:00:00+07:00",
"updated_at": "2025-07-14T10:00:00+07:00"
}
]Kelompok:
"Sarana"|"Prasarana"
Request Body:
{
"nama_jenis": "Komputer",
"deskripsi": "Perangkat komputer desktop/laptop",
"kelompok": "Sarana"
}Roles: SUPER_ADMIN, STAF_BAUM
Response (200):
[
{
"id": "uuid",
"kode_ruangan": "R101",
"nama_ruangan": "Lab Komputer 1",
"kapasitas": 40,
"panjang": "12.00",
"lebar": "8.00",
"created_at": "2025-07-11T10:00:00+07:00",
"updated_at": "2025-07-11T10:00:00+07:00"
}
]Request Body:
{
"kode_ruangan": "R101",
"nama_ruangan": "Lab Komputer 1",
"kapasitas": 40,
"panjang": "12.00",
"lebar": "8.00"
}Roles: SUPER_ADMIN, STAF_BAUM
Response (200):
[
{
"id": "uuid",
"nama_aset": "Laptop ASUS X515",
"kode_aset": "AST-2025-001",
"deskripsi": "Laptop untuk lab",
"tanggal_pembelian": "2025-03-15",
"kondisi": "Baik",
"jenis_aset_id": "uuid-jenis",
"nama_jenis": "Komputer",
"ruangan_id": "uuid-ruangan",
"nama_ruangan": "Lab Komputer 1",
"kode_ruangan": "R101",
"created_at": "2025-07-14T10:00:00+07:00",
"updated_at": "2025-07-14T10:00:00+07:00",
"peminjaman_id": null,
"nama_peminjam": null,
"estimasi_tanggal_kembali": null
}
]Kondisi:
"Baik"|"Rusak Ringan"|"Rusak Berat"|"Dalam Perbaikan"|"Dihapuskan"
Request Body:
{
"nama_aset": "Laptop ASUS X515",
"kode_aset": "AST-2025-001",
"deskripsi": "Laptop untuk lab",
"tanggal_pembelian": "2025-03-15",
"kondisi": "Baik",
"jenis_aset_id": "uuid-jenis",
"ruangan_id": "uuid-ruangan"
}Mendapatkan riwayat histori aset.
Request Body:
{
"status": "Dipindahkan",
"catatan": "Dipindahkan ke ruang dosen",
"ke_ruangan_id": "uuid-ruangan-baru"
}Status Histori:
"Ditempatkan"|"Dipindahkan"|"Dipinjam"|"Dikembalikan"|"Dalam Perbaikan"|"Perbaikan Selesai"|"Dihapuskan"
Request Body:
{
"ke_ruangan_id": "uuid-ruangan-baru",
"catatan": "Dipindahkan untuk keperluan lab baru"
}Request Body:
{
"kondisi": "Rusak Ringan",
"catatan": "Keyboard rusak"
}Request Body:
{
"user_peminjam_id": "uuid-user",
"estimasi_tanggal_kembali": "2025-08-01T17:00:00+07:00",
"catatan": "Untuk kegiatan seminar"
}Request Body:
{
"catatan": "Dikembalikan dalam kondisi baik"
}Response (200):
{
"baik": 150,
"rusak_ringan": 10,
"rusak_berat": 3,
"dalam_perbaikan": 5,
"dihapuskan": 2
}Response (200):
{
"ditempatkan": 1,
"dipindahkan": 3,
"dipinjam": 5,
"dikembalikan": 4,
"dalam_perbaikan": 1,
"perbaikan_selesai": 1,
"dihapuskan": 0
}Roles: SUPER_ADMIN, STAF_BAUM
Query: start dan end dalam format RFC3339 (2025-09-01T00:00:00+07:00)
Response (200):
[
{
"id": "uuid",
"ruangan_id": "uuid-ruangan",
"judul_kegiatan": "Rapat Jurusan",
"deskripsi": "Rapat koordinasi semester",
"waktu_mulai": "2025-09-15T09:00:00+07:00",
"waktu_selesai": "2025-09-15T11:00:00+07:00",
"recurring_event_id": null,
"jadwal_kuliah_id": null,
"user_pembuat_id": "uuid-user",
"nama_pembuat": "Admin"
}
]Request Body (single event):
{
"ruangan_id": "uuid-ruangan",
"judul_kegiatan": "Rapat Jurusan",
"deskripsi": "Rapat koordinasi",
"waktu_mulai": "2025-09-15T09:00:00+07:00",
"waktu_selesai": "2025-09-15T11:00:00+07:00"
}Request Body (recurring event):
{
"ruangan_id": "uuid-ruangan",
"judul_kegiatan": "Kuliah Umum",
"waktu_mulai": "2025-09-01T08:00:00+07:00",
"waktu_selesai": "2025-09-01T10:00:00+07:00",
"tipe_perulangan": "Mingguan",
"tanggal_akhir_perulangan": "2025-12-31"
}Tipe Perulangan:
"Mingguan"|"Harian"
Roles: SUPER_ADMIN, STAF_BAUM
Response (200):
[
{
"id": "uuid",
"aset_id": "uuid-aset",
"tipe_biaya": "Pembelian",
"deskripsi": "Pembelian awal laptop",
"jumlah": "8500000.00",
"tanggal_transaksi": "2025-03-15",
"vendor": "Toko Komputer ABC",
"user_pencatat_id": "uuid-user",
"nama_pencatat": "Admin",
"bukti_url": "uploads/biaya/uuid.pdf",
"created_at": "2025-09-13T10:00:00+07:00",
"updated_at": "2025-09-13T10:00:00+07:00"
}
]Tipe Biaya:
"Pembelian"|"Perawatan"|"Perbaikan"|"Upgrade"|"Lain-lain"
Request Body:
{
"aset_id": "uuid-aset",
"tipe_biaya": "Pembelian",
"deskripsi": "Pembelian awal laptop",
"jumlah": "8500000.00",
"tanggal_transaksi": "2025-03-15",
"vendor": "Toko Komputer ABC"
}Upload bukti pembayaran. Request: multipart/form-data field file.
Response (200):
[
{ "tipe_biaya": "Pembelian", "total": "50000000.00" },
{ "tipe_biaya": "Perawatan", "total": "5000000.00" }
]Roles: SUPER_ADMIN, STAF_BAUM
Response (200):
[
{
"id": "uuid",
"nama_barang": "Kertas HVS A4",
"deskripsi": "Kertas untuk printer",
"satuan": "Rim",
"stok": 50,
"batas_minimum_stok": 10,
"created_at": "2025-07-18T10:00:00+07:00",
"updated_at": "2025-07-18T10:00:00+07:00"
}
]Request Body:
{
"nama_barang": "Kertas HVS A4",
"deskripsi": "Kertas untuk printer",
"satuan": "Rim",
"batas_minimum_stok": 10
}Request Body:
{
"jumlah": 20,
"catatan": "Pembelian bulanan"
}Request Body:
{
"jumlah": 5,
"catatan": "Untuk bagian akademik"
}Request Body:
{
"stok_fisik": 45,
"catatan": "Selisih 2 rim (mungkin tercecer)"
}Response (200):
[
{
"id": "uuid",
"tipe_transaksi": "Pembelian",
"jumlah": 20,
"saldo_sebelum": 30,
"saldo_setelah": 50,
"catatan": "Pembelian bulanan",
"tanggal_transaksi": "2025-07-20T10:00:00+07:00",
"user_aksi_id": "uuid-user",
"nama_user_aksi": "Admin"
}
]Tipe Transaksi:
"Pembelian"|"Pengambilan"|"Stok Opname"
Mendapatkan barang yang stoknya di bawah batas minimum.
Response (200):
[
{
"id": "uuid",
"nama_barang": "Tinta Printer",
"stok": 2,
"batas_minimum_stok": 5
}
]Response (200):
[
{
"id": "uuid",
"jenis": "Mobil",
"nama": "Toyota Avanza Putih",
"nomor_polisi": "D 1234 ABC",
"merk": "Toyota",
"model": "Avanza",
"tahun": 2022,
"status": "Tersedia",
"created_at": "2025-10-04T10:00:00+07:00",
"updated_at": "2025-10-04T10:00:00+07:00"
}
]Jenis:
"Mobil"|"Motor"|"Bus"
Status:"Tersedia"|"Digunakan"|"Perawatan"
Request Body:
{
"jenis": "Mobil",
"nama": "Toyota Avanza Putih",
"nomor_polisi": "D 1234 ABC",
"merk": "Toyota",
"model": "Avanza",
"tahun": 2022
}Mencari kendaraan yang tersedia pada rentang waktu tertentu.
Response (200):
[
{
"id": "uuid",
"jenis": "Mobil",
"nama": "Toyota Avanza Putih",
"nomor_polisi": "D 1234 ABC"
}
]GET /api/fleet/kendaraan/{id}/summary?start_date=2025-01-01&end_date=2025-12-31 (SUPER_ADMIN, STAF_BAUM)
Response (200):
{
"total_biaya_servis": "15000000.00",
"total_jarak_tempuh": 12500,
"biaya_per_km": "1200.00"
}Membuat pemesanan kendaraan.
Request Body:
{
"kendaraan_id": "uuid-kendaraan",
"tujuan": "Bandung - Pertemuan dengan mitra",
"waktu_berangkat": "2025-10-15T07:00:00+07:00",
"estimasi_waktu_kembali": "2025-10-15T18:00:00+07:00"
}Melihat booking milik sendiri.
Melihat booking untuk kendaraan tertentu.
Response (200):
[
{
"id": "uuid-booking",
"kendaraan_id": "uuid-kendaraan",
"nama_kendaraan": "Toyota Avanza Putih",
"user_pemesan_id": "uuid-user",
"nama_pemesan": "Dr. Budi Santoso",
"tujuan": "Bandung - Pertemuan dengan mitra",
"waktu_berangkat": "2025-10-15T07:00:00+07:00",
"estimasi_waktu_kembali": "2025-10-15T18:00:00+07:00",
"status": "Diajukan"
}
]Status Booking:
"Diajukan"|"Disetujui"|"Ditolak"|"Dibatalkan"|"Berlangsung"|"Selesai"
Request Body:
{
"catatan": "Disetujui, gunakan jalur tol"
}Request Body:
{
"catatan": "Kendaraan sedang dalam perawatan"
}Request Body:
{
"odometer_awal": 45000,
"waktu_aktual_berangkat": "2025-10-15T07:30:00+07:00"
}Request Body:
{
"odometer_akhir": 45200,
"bahan_bakar_diisi": "150000.00",
"catatan_kondisi_kembali": "Kondisi baik",
"waktu_aktual_kembali": "2025-10-15T17:30:00+07:00"
}Response (200):
{
"diajukan": 5,
"disetujui": 3,
"ditolak": 1,
"dibatalkan": 0,
"berlangsung": 2,
"selesai": 10
}Roles: SUPER_ADMIN, STAF_BAUM
Response (200):
[
{
"id": "uuid",
"kendaraan_id": "uuid-kendaraan",
"tanggal_servis": "2025-06-15",
"odometer_saat_servis": 35000,
"deskripsi": "Service berkala 30.000 km",
"biaya": "2500000.00",
"user_pencatat_id": "uuid-user",
"nama_pencatat": "Admin"
}
]Request Body:
{
"tanggal_servis": "2025-06-15",
"odometer_saat_servis": 35000,
"deskripsi": "Service berkala 30.000 km",
"biaya": "2500000.00"
}Response (200): Array dari objek Pegawai lengkap (biodata, data dosen jika ada).
[
{
"id": "uuid-pegawai",
"user_id": "uuid-user",
"nik": "198901",
"no_ktp": "3302xxxxxxxxxxxx",
"nama_lengkap": "Dr. Budi Santoso, M.Kom",
"gelar_depan": "Dr.",
"gelar_belakang": "M.Kom",
"tempat_lahir": "Tasikmalaya",
"tanggal_lahir": "1989-04-12",
"jenis_kelamin": "L",
"status_nikah": "Menikah",
"agama": "Islam",
"kategori_pegawai": "Tenaga Pendidik",
"status_pegawai": "Tetap",
"is_active": true,
"tanggal_masuk": "2015-09-01",
"nidn": "0412098901",
"prodi_id": "uuid-prodi",
"nama_prodi": "Teknik Informatika",
"created_at": "2025-06-20T10:00:00+07:00",
"updated_at": "2025-06-20T10:00:00+07:00"
}
]Jenis Kelamin:
"L"|"P"
Status Nikah:"Menikah"|"Belum Menikah"|"Cerai Hidup"|"Cerai Mati"
Kategori Pegawai:"Tenaga Pendidik"|"Tenaga Kependidikan"
Status Pegawai:"Tetap"|"Kontrak"|"Honorer"
Request Body:
{
"nik": "198901",
"nama_lengkap": "Dr. Budi Santoso, M.Kom",
"gelar_depan": "Dr.",
"gelar_belakang": "M.Kom",
"tempat_lahir": "Tasikmalaya",
"tanggal_lahir": "1989-04-12",
"jenis_kelamin": "L",
"status_nikah": "Menikah",
"agama": "Islam",
"email": "budi@kampus.ac.id",
"nomor_hp": "081234567890",
"kategori_pegawai": "Tenaga Pendidik",
"status_pegawai": "Tetap",
"tanggal_masuk": "2015-09-01",
"nidn": "0412098901",
"prodi_id": "uuid-prodi",
"password": "password123"
}Jika
kategori_pegawai="Tenaga Pendidik", fieldnidndanprodi_idakan digunakan untuk membuat data dosen.
Membuat akun user untuk pegawai yang belum punya akun.
Request Body:
{
"password": "password123"
}Request Body:
{
"latitude": "-7.3506",
"longitude": "108.2172",
"alamat_absensi": "Kampus Universitas Respati",
"foto_absensi_path": "uploads/absensi/foto.jpg",
"face_confidence_score": 0.95,
"is_face_verified": true
}Response (200):
{
"pesan_notifikasi": "Anda terlambat 15 menit.",
"id": "uuid",
"pegawai_id": "uuid-pegawai",
"waktu_absensi": "2025-09-01T08:15:00+07:00",
"tipe_absensi": "ClockIn",
"latitude": "-7.3506",
"longitude": "108.2172",
"alamat_absensi": "Kampus Universitas Respati",
"foto_absensi_path": "uploads/absensi/foto.jpg",
"face_confidence_score": 0.95,
"is_face_verified": true
}Request Body sama dengan clock-in.
Request Body:
{
"pegawai_id": "uuid-pegawai",
"tanggal": "2025-09-01",
"status": "Sakit",
"keterangan": "Surat dokter terlampir"
}Status Absensi:
"Hadir"|"Sakit"|"Ijin"|"Cuti"|"Alpa"
Response (200):
[
{
"pegawai_id": "uuid",
"nama_pegawai": "Dr. Budi Santoso",
"tanggal": "2025-09-01",
"clock_in": "2025-09-01T07:55:00+07:00",
"clock_out": "2025-09-01T16:30:00+07:00",
"keterangan": "Hadir",
"terlambat_menit": 0,
"terlambat_toleransi_menit": 0,
"lembur_menit": 30,
"foto_absensi_path_in": "...",
"foto_absensi_path_out": "...",
"latitude_in": "-7.3506",
"longitude_in": "108.2172",
"latitude_out": "-7.3506",
"longitude_out": "108.2172"
}
]Response (200):
[
{
"pegawai_id": "uuid",
"nik": "198901",
"nama_pegawai": "Dr. Budi Santoso",
"foto_wajah_path": "uploads/wajah/uuid.jpg",
"status_audit_wajah": "Disetujui"
}
]Upload foto wajah. Request: multipart/form-data.
Request Body:
{
"tanggal_mulai": "2025-12-20",
"tanggal_selesai": "2025-12-25",
"jumlah_hari": 4,
"alasan": "Liburan akhir tahun",
"kategori": "Cuti Tahunan"
}Kategori Cuti:
"Cuti Tahunan"|"Cuti Melahirkan"|"Cuti Sakit Berkepanjangan"|"Cuti Hajatan Keluarga"|"Cuti Ibadah"|"Lainnya"
Response (200):
{
"kuota_total": 12,
"kuota_terpakai": 4,
"sisa_cuti": 8,
"tahun": 2025
}Membuat kuota cuti untuk pegawai.
Request Body:
{
"pegawai_id": "uuid-pegawai",
"tahun": 2025,
"kuota_total": 12
}Response (200):
[
{
"id": "uuid",
"pegawai_id": "uuid",
"nama_pegawai": "Dr. Budi Santoso",
"nik": "198901",
"tahun": 2025,
"kuota_total": 12,
"kuota_terpakai": 4
}
]Request Body:
{
"catatan": "Disetujui"
}Request Body:
{
"catatan": "Tidak bisa karena berdekatan dengan jadwal ujian"
}Request Body:
{
"kategori": "Sakit",
"tanggal_mulai": "2025-09-10",
"tanggal_selesai": "2025-09-11",
"alasan": "Demam tinggi, perlu istirahat"
}Kategori Ijin:
"Sakit"|"Urusan Keluarga"|"Dinas Luar"|"WFH"|"Lainnya"
Request Body:
{
"catatan": "Disetujui, segera sembuh"
}Roles: SUPER_ADMIN, STAF_BASDM
Request Body:
{
"dasar_tugas": "Undangan No. 123/UN/2025",
"tugas": "Mengikuti workshop kurikulum merdeka belajar",
"tempat_tugas": "Jakarta",
"tanggal_mulai": "2025-10-10",
"tanggal_selesai": "2025-10-12",
"penandatangan_id": "uuid-pegawai-rektor",
"tembusan": ["Wakil Rektor I", "Dekan FMIPA"],
"penerima_tugas": [
{
"pegawai_id": "uuid-pegawai-1",
"peran": "Pelaksana Utama"
},
{
"pegawai_id": "uuid-pegawai-2",
"peran": "Pengikut"
}
],
"alasan_perjalanan": 1,
"tujuan_kota": "Jakarta",
"alat_angkut": "Pesawat",
"tempat_berangkat": "Tasikmalaya",
"lama_perjalanan": 3,
"pembebanan_anggaran_instansi": "Universitas Respati",
"pembebanan_anggaran_mak": "5212.001",
"ppk_pegawai_id": "uuid-ppk",
"kpa_pegawai_id": "uuid-kpa"
}Peran Perjalanan:
"Pelaksana Utama"|"Pengikut"
Alasan Perjalanan:1= Kunjungan/Undangan,2= Tugas Lembaga,3= Pelatihan
Mendapatkan preview HTML SPPD (untuk cetak/PDF).
Roles: SUPER_ADMIN, STAF_BASDM
Response (200):
[
{
"id": "uuid",
"induk_unit_id": null,
"kode_unit": "FMIPA",
"nama_unit": "Fakultas MIPA",
"is_active": true
},
{
"id": "uuid-child",
"induk_unit_id": "uuid-parent",
"kode_unit": "TI",
"nama_unit": "Program Studi Teknik Informatika",
"is_active": true
}
]Request Body:
{
"induk_unit_id": "uuid-parent",
"kode_unit": "TI",
"nama_unit": "Program Studi Teknik Informatika",
"is_active": true
}Roles: SUPER_ADMIN, STAF_BASDM
Response (200):
[
{
"id": "uuid",
"pegawai_id": "uuid-pegawai",
"unit_kerja_id": "uuid-unit",
"nama_unit_kerja": "Program Studi Teknik Informatika",
"jabatan": "Ketua Program Studi",
"nomor_sk": "SK/2025/001",
"tanggal_mulai": "2025-01-01",
"tanggal_selesai": null
}
]Request Body:
{
"unit_kerja_id": "uuid-unit",
"jabatan": "Ketua Program Studi",
"nomor_sk": "SK/2025/001",
"tanggal_mulai": "2025-01-01"
}Upload dokumen. Request: multipart/form-data fields: file, kategori.
Entity Type (URL path):
pegawai|riwayat-pendidikan|riwayat-sk|riwayat-sertifikat|riwayat-jad|riwayat-serdos|pengajuan-ijin
Kategori Dokumen:FotoProfil|KTP|KK|Ijazah|Transkrip|SK|Sertifikat|SuratSakit|DokumenPendukung|Lainnya
Roles: SUPER_ADMIN, STAF_BASDM
Request Body:
{
"jenjang": "S2",
"institusi": "Institut Teknologi Bandung",
"jurusan": "Informatika",
"tahun_lulus": 2015
}Request Body:
{
"nomor_sk": "SK/2025/001",
"tanggal_sk": "2025-01-15",
"jenis_sk": "Pengangkatan",
"jabatan": "Lektor",
"keterangan": "SK Pengangkatan Dosen Tetap"
}Request Body:
{
"jenis_sertifikat": "Pelatihan",
"judul_sertifikat": "Machine Learning Fundamentals",
"nomor_sertifikat": "CERT/2025/001",
"tanggal_pelaksanaan": "2025-03-10",
"tingkat": "Nasional",
"penyelenggara": "Dicoding Indonesia",
"keterangan": null
}Jenis Sertifikat:
"Pelatihan"|"BIMTEK"|"Seminar"|"Workshop"|"Rekognisi Dosen"
Tingkat:"Lokal"|"Nasional"|"Internasional"
Request Body:
{
"jabatan_akademik": "Lektor",
"pangkat_golongan": "Penata / III.c",
"nomor_sk": "SK/JAD/2025/001",
"tmt": "2025-01-01",
"kompetensi_mk": "Algoritma, Basis Data"
}Jabatan Akademik:
"Asisten Ahli"|"Lektor"|"Lektor Kepala"|"Guru Besar"
Request Body:
{
"nomor_sertifikat": "SERDOS/2025/001",
"tanggal_terbit": "2025-06-01",
"keterangan": "Sertifikasi Dosen Profesional"
}Endpoint utilitas untuk mengambil nilai-nilai enum dan data referensi.
Roles: Semua user login
Response: ["MenungguPersetujuan", "Disetujui", "Ditolak", "Selesai", "Mengulang"]
Response: ["Baik", "Rusak Ringan", "Rusak Berat", "Dalam Perbaikan", "Dihapuskan"]
Response: ["Ditempatkan", "Dipindahkan", "Dipinjam", "Dikembalikan", "Dalam Perbaikan", "Perbaikan Selesai", "Dihapuskan"]
Response: ["Pembelian", "Perawatan", "Perbaikan", "Upgrade", "Lain-lain"]
Response: ["Koordinator", "Anggota"]
Response: ["Cuti Tahunan", "Cuti Melahirkan", "Cuti Sakit Berkepanjangan", ...]
Cari user berdasarkan nama/username.
Response (200):
[
{
"id": "uuid",
"username": "dosen01",
"full_name": "Dr. Budi Santoso"
}
]Cari ruangan yang tersedia untuk jadwal kuliah tertentu.
Response (200):
[
{
"id": "uuid",
"nama_ruangan": "Lab Komputer 1",
"kode_ruangan": "R101",
"kapasitas": 40
}
]Akses file yang sudah diupload.
Contoh: GET /api/files/uploads/akademik/rps/uuid-mk/file.pdf
Roles: SUPER_ADMIN, STAF_AKADEMIK, KAPRODI
Response (200):
[
{
"prodi_id": "uuid-prodi",
"nama_prodi": "Teknik Informatika",
"angkatan": 2025,
"kode_rombel": "A",
"jumlah_mahasiswa": 30,
"dosen_pa_id": "uuid-dosen",
"nama_dosen_pa": "Dr. Budi Santoso"
}
]Response (200):
[
{
"registrasi_id": "uuid-reg",
"mahasiswa_id": "uuid-mhs",
"nim": "250101001",
"nama_mahasiswa": "Ahmad Fauzi",
"kode_rombel": "A"
}
]Memindahkan mahasiswa ke rombel lain.
Request Body:
{
"registrasi_ids": ["uuid-reg-1", "uuid-reg-2"],
"kode_rombel_baru": "B"
}Response (200):
{
"message": "Berhasil memindahkan 2 mahasiswa ke rombel baru."
}Mengubah nama kode rombel.
Request Body:
{
"prodi_id": "uuid-prodi",
"angkatan": 2025,
"kode_rombel_lama": "A",
"kode_rombel_baru": "A1"
}Roles:
DOSEN,KAPRODI,STAF_AKADEMIK,STAF_BAUM,MAHASISWA, danSUPER_ADMINsesuai kewenangan endpoint.
Modul asesmen menggunakan jadwal_kuliah sebagai kelas dan enrollments
berstatus Disetujui sebagai peserta. Nilai akhir dihitung dari attempt terbaru
setiap asesmen dengan rumus Σ(nilai × bobot) / 100.
| Method | Endpoint | Keterangan |
|---|---|---|
GET |
/api/asesmen?tahun_akademik_id={uuid} |
Daftar asesmen sesuai lingkup akses. |
GET |
/api/asesmen/jadwal?tahun_akademik_id={uuid} |
Pilihan kelas untuk membuat asesmen. |
POST |
/api/asesmen |
Membuat asesmen. |
GET |
/api/asesmen/{id} |
Detail, dokumen, pelaksanaan, presensi, dan nilai peserta. |
PUT |
/api/asesmen/{id} |
Mengubah asesmen yang masih dapat diedit. |
POST |
/api/asesmen/{id}/submit |
Mengajukan asesmen kepada Kaprodi. |
POST |
/api/asesmen/{id}/review |
Review Disetujui atau PerluRevisi oleh Kaprodi. |
POST |
/api/asesmen/{id}/dokumen/{jenis} |
Unggah Soal, Lampiran, atau KunciJawaban. |
GET |
/api/asesmen/{id}/dokumen/{document_id}/download |
Mengunduh dokumen sesuai hak akses. |
PUT |
/api/asesmen/{id}/penggandaan |
Memperbarui proses penggandaan ujian manual. |
POST |
/api/asesmen/{id}/mulai |
Memulai pelaksanaan dan membuat kode presensi. |
POST |
/api/asesmen/{id}/selesai |
Menutup pelaksanaan dan menyimpan BAP. |
PUT |
/api/asesmen/{id}/presensi/{enrollment_id} |
Koreksi presensi peserta oleh dosen. |
PUT |
/api/asesmen/{id}/nilai/{enrollment_id} |
Menyimpan nilai attempt peserta. |
POST |
/api/asesmen/{id}/kunci |
Mengunci nilai setelah seluruh peserta dinilai. |
POST |
/api/asesmen/{id}/buka-nilai |
Membuka nilai untuk revisi jika workflow nilai akhir mengizinkan. |
Workflow asesmen:
Draft → Diajukan → Disetujui/PerluRevisi → SiapDilaksanakan → Berlangsung → Selesai → Dinilai → Dikunci
| Method | Endpoint | Keterangan |
|---|---|---|
GET |
/api/asesmen/nilai-akhir?tahun_akademik_id={uuid} |
Daftar rekap nilai kelas. |
GET |
/api/asesmen/nilai-akhir/{jadwal_id} |
Komponen, nilai peserta, konversi huruf, dan riwayat. |
POST |
/api/asesmen/nilai-akhir/{jadwal_id}/ajukan |
Koordinator mengajukan nilai akhir. |
POST |
/api/asesmen/nilai-akhir/{jadwal_id}/review |
Kaprodi menyetujui atau meminta revisi. |
POST |
/api/asesmen/nilai-akhir/{jadwal_id}/publikasikan |
Staf Akademik mempublikasikan nilai ke enrollment/KHS. |
GET |
/api/asesmen/skala-nilai/{prodi_id} |
Daftar skala nilai Prodi. |
PUT |
/api/asesmen/skala-nilai/{prodi_id} |
Menyimpan skala nilai oleh Kaprodi/Super Admin. |
Pengajuan nilai akhir ditolak jika total bobot bukan 100%, terdapat asesmen
yang belum Dikunci, nilai peserta belum lengkap, atau skala nilai Prodi tidak
mencakup hasil perhitungan. Publikasi hanya dapat dilakukan setelah persetujuan
Kaprodi. Saat dipublikasikan, nilai_angka, nilai_huruf, dan nilai_indeks
pada enrollments diperbarui sehingga dapat ditampilkan pada KHS mahasiswa.
| Method | Endpoint | Keterangan |
|---|---|---|
GET |
/api/asesmen-saya?tahun_akademik_id={uuid} |
Jadwal dan hasil asesmen mahasiswa. |
POST |
/api/asesmen-saya/check-in |
Check-in ujian menggunakan kode aktif. |
Migration yang diperlukan:
20260621150000_create_asesmen_tables20260621180000_create_nilai_akhir_tables
1. Login sebagai SUPER_ADMIN
2. Buat Tahun Akademik aktif
3. Buat Program Studi (Prodi)
4. Buat Unit Kerja (SDM)
5. Daftarkan Pegawai (otomatis buat akun & data dosen jika Tenaga Pendidik)
6. Buat Mata Kuliah per Prodi
7. Buat Kurikulum dan mapping Mata Kuliah ke Kurikulum
8. Buat Ruangan
9. Buat Jadwal Kuliah (assign dosen pengampu + plot ruangan)
10. Daftarkan Mahasiswa (atau import via CSV)
11. Assign Dosen PA ke Mahasiswa
┌─────────────────────────────────────────────────────────┐
│ MAHASISWA │
│ │
│ 1. Login (POST /api/auth/login) │
│ 2. Lihat jadwal tersedia │
│ GET /api/krs/jadwal-available?tahun_akademik_id=... │
│ 3. Ambil mata kuliah │
│ POST /api/krs/enrollments │
│ 4. Lihat KRS saya │
│ GET /api/krs/my-enrollments?tahun_akademik_id=... │
│ 5. Batalkan MK (jika masih bisa) │
│ DELETE /api/krs/enrollments/{id} │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ DOSEN PA │
│ │
│ 1. Lihat mahasiswa bimbingan │
│ GET /api/dosen-pa/my-advisees │
│ 2. Lihat KRS mahasiswa │
│ GET /api/dosen-pa/advisee-krs/{mhs_id}?ta_id=... │
│ 3. Approve/Reject KRS │
│ PUT /api/krs/enrollments/{id}/status │
│ 4. Input nilai setelah semester selesai │
│ PUT /api/krs/enrollments/{id}/nilai │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ STAF BAUM / ADMIN │
│ │
│ 1. Buat Jenis Aset (POST /api/aset/jenis) │
│ 2. Buat Ruangan (POST /api/aset/ruangan) │
│ 3. Tambah Item Aset (POST /api/aset/item) │
│ 4. Kelola histori (pindah, pinjam, kondisi) │
│ 5. Catat biaya aset (POST /api/aset/item/{id}/biaya) │
│ 6. Kelola barang habis pakai (stok masuk/keluar) │
│ 7. Monitor dashboard: │
│ - GET /api/aset/summary-kondisi │
│ - GET /api/aset/konsumsi/low-stock │
│ - GET /api/aset/biaya/summary │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ USER (Siapa saja yang login) │
│ │
│ 1. Cari kendaraan tersedia │
│ GET /api/fleet/kendaraan-tersedia?start=...&end=... │
│ 2. Booking kendaraan │
│ POST /api/fleet/bookings │
│ 3. Lihat booking saya │
│ GET /api/fleet/my-bookings │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ ADMIN FLEET (STAF_BAUM) │
│ │
│ 1. Lihat semua booking (GET /api/fleet/bookings) │
│ 2. Approve/Reject booking │
│ 3. Start trip (catat odometer awal) │
│ 4. End trip (catat odometer akhir + BBM) │
│ 5. Catat servis kendaraan │
│ 6. Monitor: │
│ - GET /api/fleet/bookings/summary │
│ - GET /api/fleet/kendaraan/{id}/summary │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ KARYAWAN │
│ │
│ 1. Enroll wajah (POST /api/sdm/absensi/enroll-wajah) │
│ 2. Clock-in harian (POST /api/sdm/absensi/clock-in) │
│ 3. Clock-out (POST /api/sdm/absensi/clock-out) │
│ 4. Ajukan cuti (POST /api/sdm/cuti/ajukan) │
│ 5. Ajukan ijin (POST /api/sdm/ijin/ajukan) │
│ 6. Cek kuota cuti (GET /api/sdm/cuti/kuota-saya) │
│ 7. Lihat rekap absensi (GET /api/sdm/absensi/rekap-saya)│
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ ADMIN SDM (STAF_BASDM) │
│ │
│ 1. Kelola pegawai (CRUD) │
│ 2. Audit biometrik wajah │
│ 3. Approve/Reject cuti & ijin │
│ 4. Input rekap manual absensi │
│ 5. Lihat laporan: │
│ - Laporan harian (/api/sdm/absensi/laporan-harian) │
│ - Laporan bulanan (/api/sdm/absensi/laporan-bulanan)│
│ 6. Kelola riwayat karir (pendidikan, SK, JAD, serdos) │
│ 7. Buat surat tugas & SPPD │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ ADMIN AKADEMIK │
│ │
│ 1. Buat Jadwal Kuliah (atau import CSV) │
│ 2. Plot ruangan ke jadwal kuliah │
│ POST /api/akademik/plot-jadwal-ruangan │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ DOSEN │
│ │
│ 1. Upload file RPS per mata kuliah │
│ POST /api/matakuliah/{id}/upload-rps │
│ 2. Isi RPS Header + Mingguan │
│ 3. Set rencana penilaian (bobot) │
│ PUT /api/akademik/jadwal-kuliah/{id}/rencana-penilaian │
│ 4. Upload kontrak perkuliahan │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ KAPRODI │
│ │
│ 1. Verifikasi RPS │
│ PUT /api/matakuliah/{id}/verifikasi-rps │
│ Body: { "status_verifikasi": "Disetujui" } │
└─────────────────────────────────────────────────────────┘
- Date only:
YYYY-MM-DD(contoh:"2025-09-01") - DateTime (RFC3339):
YYYY-MM-DDTHH:MM:SS+07:00(contoh:"2025-09-01T08:00:00+07:00") - Time with timezone:
HH:MM+07:00atauHH:MM(otomatis WIB)
- Gunakan string untuk desimal:
"85.50","3.50","8500000.00"
- Gunakan
multipart/form-data - Field name:
file(kecuali disebutkan lain) - Setelah upload, path file bisa diakses via
GET /api/files/{path}
Frontend yang diizinkan:
http://localhost:5173(Vite dev)http://localhost:8081https://sikt.maxtion.co.idhttps://satria.respati-tasikmalaya.ac.id
- Semua ID menggunakan format UUID v4
- Contoh:
"550e8400-e29b-41d4-a716-446655440000"
- Saat ini API belum mengimplementasi pagination. Semua list endpoint mengembalikan seluruh data.
Dokumentasi ini di-generate berdasarkan source code backend SIKT.