Papicode
FREEPHP

Sistem Manajemen Presensi Sekolah berbasis QR Code

Deskripsi

Sistem Presensi Sekolah Berbasis QR Code: pendaftaran siswa & guru, presensi mandiri lewat Kiosk Scanner, mesin perhitungan Hadir/Terlambat otomatis, notifikasi WhatsApp ke wali murid, laporan kehadiran otomatis, hingga cetak kartu ID fisik dalam satu platform. Sistem ini dirancang untuk sekolah maupun yayasan pendidikan yang ingin meninggalkan pencatatan presensi manual di kertas absen, beralih ke platform digital yang cepat, aman, dan bisa diakses oleh seluruh pihak (Admin/TU, guru, siswa, hingga kepala sekolah) sesuai hak akses masing-masing.

Sistem

Siswa dan guru didaftarkan oleh Admin/TU lengkap dengan kelas, jurusan, dan wali murid, lalu sistem otomatis menerbitkan QR Code unik (token acak, bukan NIS/NIP mentah) untuk masing-masing orang. Setiap pagi, perangkat Kiosk di gerbang sekolah dijalankan dalam mode layar penuh — siswa dan guru cukup menempelkan QR Code ke kamera, dan sistem langsung memvalidasi, mencatat jam masuk, menentukan status Hadir/Terlambat berdasarkan jam presensi yang dikonfigurasi Admin (bukan hardcode), lalu menampilkan hasilnya dengan efek suara dalam hitungan detik tanpa reload halaman. Begitu siswa tercatat hadir, notifikasi WhatsApp otomatis terkirim ke nomor wali murid tanpa membuat antrian di Kiosk tertunda. Bila ada kendala jaringan atau kredensial WhatsApp belum diatur, presensi tetap sah tersimpan dan sistem mencatat pesan tersebut ke antrian dengan status gagal beserta alasannya, siap dikirim ulang oleh Admin. Admin/TU juga bisa menginput presensi manual atau mengoreksi data presensi yang keliru — setiap perubahan tercatat sebagai jejak audit yang tidak bisa disangkal. Kepala sekolah dan Admin cukup membuka menu Dashboard untuk melihat grafik kehadiran real-time, atau menu Laporan untuk rekap harian, bulanan, per siswa, per guru, maupun per kelas, lalu mengekspornya ke PDF atau Excel. Seluruh aktivitas pengguna tercatat rapi di Audit Log, dan Super Admin bisa mengatur pengguna beserta izin aksesnya lewat matriks permission yang fleksibel.

Fitur

  • Pendaftaran siswa, guru, wali murid, kelas, jurusan & tahun ajaran
  • QR Code otomatis per siswa/guru dengan token acak aman (generate & regenerate, tanpa QR ganda aktif)
  • Kiosk Scanner mode layar penuh: kamera otomatis, efek suara, statistik & 10 scan terakhir real-time
  • Mesin presensi otomatis: status Hadir/Terlambat/Pulang berbasis jam yang dikonfigurasi, anti-duplikat presensi
  • Presensi manual & koreksi presensi dengan jejak audit (old data, new data, alasan)
  • Notifikasi WhatsApp otomatis ke wali murid, antrian non-blocking, siap dihubungkan ke provider apa pun
  • Dashboard interaktif dengan grafik kehadiran, distribusi status, rekap kelas & keterlambatan (update otomatis tanpa reload)
  • Laporan rekap harian, bulanan, per siswa, per guru & per kelas — ekspor ke PDF dan Excel
  • Cetak kartu ID siswa/guru ukuran fisik asli (85.6 × 54 mm), satuan maupun massal per kelas/jurusan
  • Manajemen pengguna, peran, dan matriks izin akses (RBAC granular)
  • Audit log seluruh aktivitas sistem
  • Keamanan berlapis: proteksi CSRF, rate limiting percobaan login, hashing password, otorisasi penuh di backend

Panduan Instalasi

  1. Ekstrak file zip ke folder web server, lalu install dependency PHP
cd presensi
composer install
  1. Salin file environment dan sesuaikan koneksi database
cp .env.example .env

Edit .env, isi DB_HOST, DB_DATABASE, DB_USERNAME, DB_PASSWORD sesuai server MySQL Anda. 3. Buat database MySQL

CREATE DATABASE school_attendance CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  1. Jalankan migrasi & seeder (membuat semua tabel + data awal: role, izin akses, dan akun admin)
php database/migrate.php
php database/seeders/seed.php
  1. Jalankan Apache (jika pakai XAMPP)
Buka XAMPP Control Panel > klik Start pada Apache & MySQL

Arahkan document root virtual host ke folder public/. Atau tanpa XAMPP, cukup pakai PHP built-in server:

php -S localhost:8000 -t public public/index.php
  1. Akses aplikasi di browser
http://localhost:8000

Login menggunakan akun default Username : admin Password : admin123

Catatan: aplikasi ini memakai MySQL sebagai database, sehingga wajib menjalankan langkah migrasi & seeder di atas sebelum bisa digunakan. Kredensial login default hanya untuk keperluan development — wajib diganti sebelum digunakan di lingkungan production (sistem akan menampilkan peringatan otomatis di halaman Profil selama password default masih digunakan).