Update README

This commit is contained in:
202310715297 RAIHAN ARIQ MUZAKKI 2026-01-15 22:52:27 +07:00
parent aedaea310d
commit 59b67b428a

154
README.md
View File

@ -1,102 +1,106 @@
# 📱 Aplikasi Absensi Akademik UBHARA Jaya (Mobile & Backend) <div align="center">
[📋 Changelog](./CHANGELOG.md) # 📱 Aplikasi Absensi Akademik UBHARA Jaya
### Mobile (Kotlin) & Backend (Python Flask)
## 📌 Deskripsi Proyek ![Kotlin](https://img.shields.io/badge/Kotlin-20232A?style=for-the-badge&logo=kotlin&logoColor=7F52FF)
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**. ![Jetpack Compose](https://img.shields.io/badge/Jetpack%20Compose-4285F4?style=for-the-badge&logo=android&logoColor=white)
![Python](https://img.shields.io/badge/Python-3776AB?style=for-the-badge&logo=python&logoColor=white)
![Flask](https://img.shields.io/badge/Flask-000000?style=for-the-badge&logo=flask&logoColor=white)
![MySQL](https://img.shields.io/badge/MySQL-00000F?style=for-the-badge&logo=mysql&logoColor=white)
![n8n](https://img.shields.io/badge/n8n-EA4B71?style=for-the-badge&logo=n8n&logoColor=white)
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. [📋 Lihat Changelog](./CHANGELOG.md) | [🐛 Laporkan Isu](../../issues)
</div>
--- ---
## 🎯 Tujuan Proyek ## 📌 Deskripsi Proyek
- Mengimplementasikan arsitektur **REST API** antara Android dan Python Flask. Proyek ini merupakan **Tugas Project Akhir Mata Kuliah Pemrograman Mobile** yang mengimplementasikan sistem absensi akademik berbasis **Client-Server**.
- Menerapkan **Face Detection** menggunakan CameraX untuk memvalidasi kehadiran fisik mahasiswa.
- Mencegah kecurangan absensi dengan fitur deteksi **Fake GPS**. Sistem ini dirancang untuk validitas tinggi dengan mengintegrasikan:
- Mengelola status kehadiran otomatis (**Auto-Alfa**) pada server jika mahasiswa lupa absen. * ✅ **Geofencing (GPS)** untuk validasi lokasi kampus.
- Melatih kemampuan Fullstack Mobile Development (Backend, Database, & Mobile UI). * ✅ **Face Detection (CameraX)** untuk validasi biometrik kehadiran.
* ✅ **Anti-Fraud** untuk mendeteksi penggunaan *Fake GPS*.
* ✅ **Otomatisasi** pelaporan real-time ke **N8N Webhook**.
---
## 📸 Tampilan Aplikasi (Mockup)
<div align="center">
<img src="Mockup.png" alt="Mockup Aplikasi Absensi" width="800">
</div>
---
## 🎯 Tujuan & Capaian
Proyek ini bertujuan untuk melatih kemampuan **Fullstack Mobile Development** dengan fokus pada:
1. **REST API Architecture**: Komunikasi aman antara Android dan Python Flask.
2. **Biometric Validation**: Implementasi ML Kit untuk deteksi wajah.
3. **Security Awareness**: Pencegahan kecurangan lokasi (*Mock Location*).
4. **Database Logic**: Penanganan status otomatis (*Auto-Alfa*) di sisi server.
--- ---
## 🚀 Fitur Utama ## 🚀 Fitur Utama
### 📱 Sisi Mobile (Android - Jetpack Compose) | Fitur | Deskripsi |
- **Modern UI**: Antarmuka modern menggunakan **Material3** & **Jetpack Compose**. | :--- | :--- |
- **Smart Attendance**: | **📱 Sisi Mobile** | • **Smart Attendance:** Validasi radius & wajah real-time.<br>**Anti-Fraud:** Deteksi & blokir Fake GPS.<br>**Mode Izin/Sakit:** Upload bukti dokumen tanpa validasi radius.<br>**Riwayat:** Log kehadiran lengkap dengan foto bukti. |
- **Hadir**: Wajib berada di radius kampus & Wajib deteksi wajah (Real-time). | **💻 Sisi Backend** | • **JWT Auth:** Keamanan token pada setiap request.<br>**Auto-Alfa:** Menandai "TIDAK HADIR" otomatis jika telat.<br>**N8N Integration:** Kirim data valid ke webhook untuk notifikasi.<br>**Image Compression:** Optimasi penyimpanan foto (Base64). |
- **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 ## 🗺️ Mekanisme Alur Absensi
### 1. Absensi Status "HADIR" ### 🟢 1. Status "HADIR"
1. Mahasiswa memilih Jadwal Kelas yang aktif. 1. Mahasiswa memilih Jadwal Kelas aktif.
2. Sistem mengecek **GPS**: 2. **Validasi Sistem:**
- Apakah di dalam radius **500m** dari kampus? * 📍 Lokasi dalam radius **500m**?
- Apakah terdeteksi aplikasi **Fake GPS**? * 🚫 Tidak ada aplikasi **Fake GPS** aktif?
3. Sistem membuka **Kamera Deteksi Wajah**: 3. **Validasi Wajah:** Kamera terbuka, shutter hanya aktif jika wajah terdeteksi.
- Tombol shutter hanya aktif jika wajah terdeteksi.
4. Data (Lokasi + Foto Wajah) dikirim ke server. 4. Data (Lokasi + Foto Wajah) dikirim ke server.
### 2. Absensi Status "SAKIT / IZIN" ### 🟡 2. Status "SAKIT / IZIN"
1. Mahasiswa memilih status Sakit atau Izin. 1. Mahasiswa memilih status Sakit/Izin.
2. Validasi lokasi dilewati (bisa absen dari rumah/RS). 2. **Bypass Lokasi:** Validasi radius dilewati.
3. Sistem membuka **Kamera Dokumen** (Tanpa deteksi wajah). 3. **Dokumentasi:** Kamera dokumen terbuka (Tanpa deteksi wajah).
4. Mahasiswa memfoto surat keterangan. 4. Foto surat/bukti dikirim ke server.
5. Data dikirim ke server.
### 3. Logika Auto-Alfa (Server) ### 🔴 3. Logika Auto-Alfa (Server Side)
- Setiap kali jadwal dimuat, server mengecek jadwal yang `jam_selesai < jam_sekarang`. > *Background Process*
- Jika mahasiswa belum ada record absensi pada jam tersebut, server otomatis menginput status **"TIDAK HADIR"**. * Server memantau jadwal kuliah.
* Jika `jam_selesai < jam_sekarang` dan tidak ada data masuk ➔ Input otomatis **"TIDAK HADIR"**.
--- ---
## 🛠️ Teknologi yang Digunakan ## 🛠️ Tech Stack
- **Mobile Platform**: Android (Kotlin)
- **UI Framework**: Jetpack Compose | Komponen | Teknologi |
- **Camera Engine**: CameraX + ML Kit (Face Analysis) | :--- | :--- |
- **Backend Framework**: Python Flask | **Mobile Platform** | Android (Kotlin) |
- **Database**: MySQL | **UI Framework** | Jetpack Compose (Material3) |
- **Integrasi**: N8N Webhook | **Camera & AI** | CameraX + ML Kit (Face Analysis) |
- **Protocol**: HTTP/REST (JSON) | **Backend** | Python Flask |
- **AI**: Gemini & Claude (Sebagai Tools dalam Membantu Pengembangan) | **Database** | MySQL |
| **Integrasi** | N8N Webhook |
| **AI Assistant** | Gemini & Claude (Development Tools) |
--- ---
## 🔐 Izin Aplikasi (Permissions) ## ⚙️ Konfigurasi & Instalasi
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.
--- ### Prasyarat
* Python 3.x
* Android Studio (Ladybug/Latest)
* Koneksi jaringan yang sama (Laptop & HP)
## 📂 Mockup ### 1. Setup Backend
![mockup](Mockup.png) Pastikan server berjalan pada jaringan lokal:
```bash
# Install dependencies
pip install -r requirements.txt
## Catatan Konfigurasi: # Jalankan server
- **Server**: Pastikan `app.py` berjalan (`python app.py`) pada jaringan yang sama dengan HP. python app.py
- **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