# 📄 DOKUMEN TATA KELOLA, MEKANISME PENGOLAHAN, DAN KEAMANAN DATA SIMAK
**Sistem Informasi Manajemen Akademik & Kesantrian (SIMAK) Pesantren**

---

## 📌 1. ALUR PENGOLAHAN DATA (DATA PROCESSING)

Aplikasi SIMAK mengadopsi arsitektur pengolahan data terstruktur *server-side* berbasis **PHP (PDO)** dan basis data **MySQL**. Seluruh data diproses melalui 5 tahapan utama:

```
[1. Input Form UI] ➔ [2. Sanitasi & Validasi Input] ➔ [3. Eksekusi Controller PHP]
                                                                │
[5. Push Alert / Render PDF] ◄─ [4. Database MySQL Terpusat] ◄──┘
```

### **1.1 Siklus Pengolahan Data Harian**
1. **Input Data Kesantrian & KBM:**
   - Musyrif menginput setoran Tahfizh (Juz, Surah, Ayat, Kelancaran) dan data kesehatan Poskestren.
   - Guru menginput absensi kehadiran per jam pelajaran dan batas ajar harian.
   - Bendahara menginput mutasi uang saku (kredit/debit) dan status pembayaran SPP.
2. **Penentuan Semester & Tahun Ajaran Otomatis:**
   - Sistem menentukan tahun ajaran dan semester secara dinamis melalui fungsi `getTahunAjaranSemester()`. Bulan Juli-Desember dikelompokkan ke Semester Ganjil (1) dan Januari-Juni ke Semester Genap (2) tanpa perlu pengubahan manual.
3. **Kompilasi Otomatis Raport Final:**
   - Data harian (setoran Tahfizh, absensi KBM, poin kedisiplinan, dan nilai ujian) dikompilasi secara otomatis oleh sistem menjadi lembar **Raport Tahfizh** dan **Raport Akademik** yang siap dicetak.

---

## 🔒 2. MEKANISME KEAMANAN DATA (DATA SECURITY)

SIMAK dirancang memenuhi standar keamanan **OWASP (Open Web Application Security Project)** untuk menjamin kerahasiaan dan integritas data pesantren:

### **2.1 Enkripsi Kata Sandi (Password Hashing)**
- SIMAK **tidak pernah menyimpan kata sandi dalam bentuk teks biasa (plain text)**.
- Kata sandi dienkripsi menggunakan fungsi `password_hash()` bawaan PHP dengan algoritma enkripsi kuat **Bcrypt/Argon2**.
- Otentikasi saat login diverifikasi secara aman menggunakan `password_verify()`.

### **2.2 Proteksi SQL Injection (Prepared Statements PDO)**
- Seluruh interaksi database menggunakan **PDO Prepared Statements** dengan parameter terpisah.
- Input pengguna tidak pernah digabungkan (*string concatenation*) langsung ke dalam query SQL.
- Hal ini mencegah total risiko pembobolan data via serangan *SQL Injection*.

### **2.3 Proteksi XSS (Cross-Site Scripting)**
- Seluruh variabel dinamis yang ditampilkan ke layar browser disanitasi menggunakan fungsi `htmlspecialchars()`.
- Karakter berbahaya seperti `<` dan `>` otomatis diubah menjadi entitas HTML aman, mencegah eksekusi skrip JavaScript liar di browser pengguna.

### **2.4 Otorisasi Berbasis Peran & Proteksi IDOR**
- Akses dibatasi ketat berdasarkan 6 hak akses peran pengguna (*Role-Based Access Control*).
- Setiap tindakan mutasi/penghapusan data memuat ** ownership check**: sistem memverifikasi bahwa data yang diakses benar-benar milik kelas atau santri binaan pengurus bersangkutan (mencegah *Insecure Direct Object References*).

### **2.5 Penegakan Ganti Sandi Default**
- Pengguna baru yang masuk dengan kata sandi standar (misal `password123`) diwajibkan memperbarui kata sandi terlebih dahulu sebelum dapat mengakses dashboard sistem (`must_change_password = true`).

---

## 💾 3. PENYIMPANAN & BACKUP DATA (DATA STORAGE)

### **3.1 Struktur Basis Data MySQL**
Data tersimpan secara terpusat pada basis data MySQL dengan skema relasional yang rapi:
- `santri`: Data pokok santri, NIS, kelas, wali santri, dan status keaktifan.
- `users`: Data akun pengurus, NIPG, username, password_hash, dan role.
- `halaqah_tahfizh`: Riwayat setoran & murajaah Al-Qur'an harian.
- `wallet_santri` & `mutasi_saku`: Rekap tabungan uang saku dan riwayat transaksi.
- `absensi` & `jadwal_mengajar`: Kehadiran pelajaran KBM dan batas ajar guru.
- `perizinan`: Riwayat izin keluar santri dan kode QR unik.
- `push_subscriptions`: Token notifikasi dorong browser/HP.

### **3.2 Akses Luring & Progressive Web Apps (PWA)**
- Aplikasi mendukung teknologi PWA dengan *Service Worker* (`sw.js`).
- Aset statis dan halaman offline (`offline.html`) dicache di perangkat pengguna sehingga aplikasi tetap responsif meskipun koneksi internet tidak stabil.

---

*Dokumen ini disusun sebagai panduan resmi Tata Kelola & Keamanan Data Aplikasi SIMAK Pesantren.*
