# Task Breakdown: 04 - Pengaturan Sistem

**Referensi Dokumen:** FR-20, NFR-07.2
**Tujuan:** Menyediakan satu pintu berbasis *UI-to-Database* (`SETTINGS` table) agar Super Admin bebas menyesuaikan batas jam, batas ketidakhadiran, format, dsb tanpa menyentuh *source code*.

## 1. Controller & Accessor / Helper
- [ ] Buat `SettingController`:
  - `index()`: Membaca antarmuka *form* setting lengkap berdasarkan seluruh baris pada di tabel *settings*.
  - `update()`: Melakukan update *bulk* input secara rekursif terhadap tabel *settings*.
- [ ] Buat kelas **Facade/Helper `SettingHelper::get('key')`**:
  - Ambil nilai spesifik di-cast menurut bidang type (`integer`, `boolean`, `string`, `json`).
  - [CRITICAL] Lindungi ini dengan `cache()->rememberForever()`.
  - Di `update()` saat admin speichern perubahanya, lakukan **flush cache** spesifik untuk `key` bersangkutan.  

## 2. Form Requests
- [ ] `UpdateSettingsRequest`:
  - Karena key-value beroperasi per dinamis, filter input `$request->all()` dan cocokkan key validasinya. Contoh: Jika tipe *integer*, paksa format validasi menjadi angka dan sebagainya.

## 3. Acceptance Criteria
- [ ] UI Form Settings harus mencerminkan key yang ada (contoh: batas toleransi *late_threshold* dalam format `time`, atau *scan cooldown* dalam nilai `integer`).
- [ ] Perubahan tersimpan ke versi *database*, menimpa memori cache secara instan, dan secara nyata memengaruhi ambang batas fungsional absensi.
