# 📘 Panduan Modul: Auth (Otorisasi Hak Akses)

## 1. Peran & Fungsi Utama
Modul ini menangani proses autentikasi (login, logout, remember me cookie) dan otorisasi menu user berdasarkan Role / Level Pengguna:
- **`Login.php`**: Controller utama autentikasi.
- **Cookies `uprop`**: Digunakan untuk menyimpan sesi login terenkripsi base64 dan auto-login jika session habis.
- **Deteksi Sesi Ganda**: Mendeteksi jika user id login di device/ip address lain, kemudian membatalkan sesi login sebelumnya.

---

## 2. Aliran Finansial & Pemicu Sistem
- **Pembersihan File Temp**: Saat memuat halaman login, sistem secara otomatis menghapus file temporary QR Code yang usang (usia > 1 hari) di `./public/images/qrcode`.
- **Auto-Trigger Depresiasi Aset (Asset Depresiasi)**: Saat verifikasi autentikasi (`authCheck`) berhasil dan hari aktif sistem berada di rentang **tanggal 20 s.d. 28**, sistem akan secara otomatis memicu proses depresiasi bulanan aset tetap.
- **Tidak Memotong Persediaan**: Murni sistem utilitas akses dan pemicu batch process.

---

## 3. Dev-Jurnal
### Masalah Cache PWA pada Login Multi-Akun (1 Juli 2026)
- **Problem**: Pengguna yang berganti akun (logout & login dengan akun lain) di device yang sama masih melihat nama pengguna dari akun lama. Masalah ini hanya terjadi di server Live (`/`), tidak di server Demo (`/everest_1jul/`).
- **Root Cause**: Konfigurasi `sw.js` (Service Worker) menggunakan strategi caching *Stale-While-Revalidate* dan secara statis meng-cache *absolute path* `/` dan `/index.php/Login`. Pada server Live, path URL cocok secara utuh sehingga request HTML langsung dilayani dari Cache (nama akun lama), sedangkan pada server Demo path-nya meleset sehingga HTML selalu meload dari *Network*. 
- **Fix**: 
  - Mengubah logika event `fetch` di `sw.js` agar memprioritaskan *Network First* khusus untuk halaman navigasi/HTML (`event.request.mode === 'navigate'`). Strategi *Stale-While-Revalidate* hanya dipertahankan untuk aset statis (CSS/JS/Gambar).
  - Mengubah nama variable `CACHE_NAME` untuk memaksa *update* memori cache browser.
  - Menambahkan baris `self.skipWaiting();` di dalam event `install` pada `sw.js` agar file service worker baru bisa langsung menimpa yang lama dengan satu kali proses reload, tanpa harus mewajibkan user menutup semua tab browser.
