# 📱 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)

---

## 🔐 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