# πŸ“± Aplikasi Absensi Akademik UBHARA Jaya (Mobile & Backend) [πŸ“‹ Changelog](./CHANGELOG.md) ## πŸ“Œ Deskripsi Proyek Proyek ini merupakan **Tugas Project Akhir Mata Kuliah Pemrograman Mobile** yang mengimplementasikan sistem absensi akademik berbasis **Client-Server**. Aplikasi mobile dibangun menggunakan **Kotlin (Jetpack Compose)**, sedangkan sisi server menggunakan **Python Flask** dengan database **MySQL**. Sistem ini dirancang dengan validasi ketat menggunakan **Geofencing (GPS)** dan **Deteksi Wajah (Face Detection)** untuk status kehadiran "Hadir", serta mendukung pengiriman bukti dokumen untuk status "Sakit/Izin". Seluruh data terintegrasi secara real-time ke **N8N Webhook** untuk pelaporan otomatis. --- ## 🎯 Tujuan Proyek - Mengimplementasikan arsitektur **REST API** antara Android dan Python Flask. - Menerapkan **Face Detection** menggunakan CameraX untuk memvalidasi kehadiran fisik mahasiswa. - Mencegah kecurangan absensi dengan fitur deteksi **Fake GPS**. - Mengelola status kehadiran otomatis (**Auto-Alfa**) pada server jika mahasiswa lupa absen. - Melatih kemampuan Fullstack Mobile Development (Backend, Database, & Mobile UI). --- ## πŸš€ Fitur Utama ### πŸ“± Sisi Mobile (Android - Jetpack Compose) - **Modern UI**: Antarmuka modern menggunakan **Material3** & **Jetpack Compose**. - **Smart Attendance**: - **Hadir**: Wajib berada di radius kampus & Wajib deteksi wajah (Real-time). - **Sakit/Izin**: Wajib upload foto surat dokter/bukti (Tanpa validasi radius). - **Anti-Fraud**: Sistem mendeteksi dan menolak jika pengguna mengaktifkan **Fake GPS/Mock Location**. - **Riwayat & Bukti**: Mahasiswa dapat melihat riwayat kehadiran beserta foto bukti yang tersimpan di server. - **Profil Mahasiswa**: Menampilkan data akademik dan fitur logout. ### πŸ’» Sisi Backend (Python Flask) - **JWT Authentication**: Keamanan berbasis token untuk setiap request. - **Auto-Alfa Trigger**: Sistem otomatis menandai "TIDAK HADIR" jika jam kuliah berakhir dan mahasiswa belum absen. - **N8N Integration**: Data absensi yang valid dikirim otomatis ke webhook N8N untuk notifikasi/reporting. - **Image Handling**: Kompresi foto (Base64) otomatis untuk efisiensi penyimpanan database. --- ## πŸ—ΊοΈ Mekanisme Absensi ### 1. Absensi Status "HADIR" 1. Mahasiswa memilih Jadwal Kelas yang aktif. 2. Sistem mengecek **GPS**: - Apakah di dalam radius **500m** dari kampus? - Apakah terdeteksi aplikasi **Fake GPS**? 3. Sistem membuka **Kamera Deteksi Wajah**: - Tombol shutter hanya aktif jika wajah terdeteksi. 4. Data (Lokasi + Foto Wajah) dikirim ke server. ### 2. Absensi Status "SAKIT / IZIN" 1. Mahasiswa memilih status Sakit atau Izin. 2. Validasi lokasi dilewati (bisa absen dari rumah/RS). 3. Sistem membuka **Kamera Dokumen** (Tanpa deteksi wajah). 4. Mahasiswa memfoto surat keterangan. 5. Data dikirim ke server. ### 3. Logika Auto-Alfa (Server) - Setiap kali jadwal dimuat, server mengecek jadwal yang `jam_selesai < jam_sekarang`. - Jika mahasiswa belum ada record absensi pada jam tersebut, server otomatis menginput status **"TIDAK HADIR"**. --- ## πŸ› οΈ Teknologi yang Digunakan - **Mobile Platform**: Android (Kotlin) - **UI Framework**: Jetpack Compose - **Camera Engine**: CameraX + ML Kit (Face Analysis) - **Backend Framework**: Python Flask - **Database**: MySQL - **Integrasi**: N8N Webhook - **Protocol**: HTTP/REST (JSON) - **AI**: Gemini & Claude (Sebagai Tools dalam Membantu Pengembangan) --- ## πŸ” Izin Aplikasi (Permissions) Aplikasi memerlukan izin berikut: - `INTERNET`: Koneksi ke Server API. - `ACCESS_FINE_LOCATION`: Validasi koordinat presisi tinggi. - `ACCESS_COARSE_LOCATION`: Validasi koordinat jaringan. - `CAMERA`: Pengambilan foto bukti kehadiran & deteksi wajah. --- ## πŸ“‚ Mockup ![mockup](Mockup.png) ## Catatan Konfigurasi: - **Server**: Pastikan `app.py` berjalan (`python app.py`) pada jaringan yang sama dengan HP. - **Endpoint**: Sesuaikan `BASE_URL` pada file `MainActivity.kt` (Object `AppConstants`) dengan IP Laptop Anda. ```kotlin const val BASE_URL = "[http://192.168.](http://192.168.)x.x:5000" ``` - **Fake GPS**: Pastikan mematikan aplikasi Mock Location saat pengujian fitur Hadir. ## Pengecekan & Monitoring: - **Monitoring**: https://ntfy.ubharajaya.ac.id/EAS - **Data Spreadsheet**: https://docs.google.com/spreadsheets/d/1jH15MfnNgpPGuGeid0hYfY7fFUHCEFbCmg8afTyyLZs/edit?gid=0#gid=0 ## Webhook N8N: - **Test**: https://n8n.lab.ubharajaya.ac.id/webhook-test/23c6993d-1792-48fb-ad1c-ffc78a3e6254 - **Production**: https://n8n.lab.ubharajaya.ac.id/webhook/23c6993d-1792-48fb-ad1c-ffc78a3e6254