# Product Requirements Document (PRD)

**Nama Produk:** Aplikasi Terpusat E-Checklist Kebersihan (Sistem QR-Location)  
**Platform:** Web Application (Responsive/Mobile-Friendly)  
**Tech Stack:** PHP 7.3.4, Framework Laravel 8, Database MySQL, DomPDF  
**Versi:** 1.1 (Updated dengan Proof of Presence)  

---

## 1. Ringkasan Proyek
Aplikasi E-Checklist Kebersihan adalah sistem berbasis web terpusat yang dirancang untuk menggantikan formulir kertas fisik. Sistem ini menggunakan mekanisme pemindaian QR Code (*Proof of Presence*) yang ditempel di berbagai lokasi/ruangan untuk memastikan petugas benar-benar hadir secara fisik sebelum mengisi *checklist*. Semua data dari berbagai lokasi bermuara pada satu aplikasi dan satu database pusat.

## 2. Tujuan Bisnis
* Mengubah pencatatan manual berbasis kertas menjadi pencatatan digital terpusat.
* Memastikan validitas kehadiran petugas (*anti-fraud*) melalui mekanisme wajib *scan barcode* di lokasi pembersihan.
* Membatasi modifikasi data; mencegah petugas memanipulasi data tanggal yang sudah lewat (*backdate*).
* Memudahkan Admin dalam mencetak rekapitulasi data bulanan (matriks 31 hari) per ruangan dalam format PDF hanya dengan beberapa klik.

## 3. Peran Pengguna (User Roles)
Sistem ini mengelola seluruh ruangan menggunakan satu aplikasi terpusat dengan dua jenis hak akses:
1. **Petugas (Cleaner):** Eksekutor lapangan yang memindai QR Code di ruangan, mengisi formulir *checklist* harian, dan menyimpan data.
2. **Admin (Sanitasi/Pengawas):** Pengelola sistem yang dapat memantau seluruh data dari semua lokasi, serta mencetak laporan PDF sesuai format matriks rumah sakit.

## 4. Ruang Lingkup UI/UX (Sistem 2 Halaman)
Aplikasi membatasi interaksi hanya pada 2 halaman/UI utama. Seluruh logika QR dan filter data berjalan di balik layar (*backend*).

| Antarmuka (UI) | Deskripsi & Perilaku Dinamis |
| :--- | :--- |
| **Landing Login** | Halaman statis berisi form *Login* (Username/Email & Password) untuk otentikasi. |
| **Dashboard Utama** | Halaman tunggal yang tampilannya berubah total sesuai *role* (RBAC):<br>**- Petugas:** Menampilkan nama lokasi (hasil *scan*), tanggal hari ini, dan daftar 9 aktivitas kebersihan untuk dicentang.<br>**- Admin:** Menampilkan panel kendali cetak laporan (Pilih Lokasi, Pilih Bulan, Pilih Tahun). |

---

## 5. Alur Sistem QR Code (*Proof of Presence*)
1. Setiap ruangan (misal: Poli Anak, IGD) memiliki QR Code unik yang ditempel di dinding.
2. QR Code tersebut berisi URL spesifik menuju aplikasi (contoh: `app.com/scan/POLI-ANAK`).
3. Petugas men-*scan* QR Code menggunakan kamera HP.
4. Browser terbuka; jika belum login, diarahkan ke **Landing Login**. Jika sudah login, sistem menyimpan sesi lokasi dan mengarahkan ke **Dashboard Utama**.
5. Di Dashboard, form *checklist* terbuka otomatis *hanya untuk lokasi yang baru saja di-scan*.

---

## 6. Kebutuhan Fungsional (User Stories)

### A. Modul Otentikasi
* **Sebagai Pengguna**, saya bisa login menggunakan kredensial saya.
* **Sebagai Pengguna**, saya bisa melakukan *logout* dari sistem.

### B. Modul Petugas (Validasi & Data Entry)
* **Sebagai Petugas**, saya **hanya bisa** melihat form *checklist* jika saya datang dari *link barcode* lokasi yang valid. (Jika mengakses langsung tanpa *scan*, sistem meminta untuk *scan* terlebih dahulu).
* **Sebagai Petugas**, saya bisa melihat dan mencentang 9 aktivitas kebersihan untuk lokasi yang sedang saya kunjungi pada hari ini.
* **Sebagai Petugas**, setelah menekan tombol "Simpan", saya **tidak bisa** lagi mengedit atau menghapus data tersebut untuk hari yang sama. Form akan berubah menjadi pesan konfirmasi: *"Checklist untuk ruangan ini pada hari ini telah selesai"*.

### C. Modul Admin (Pelaporan Terpusat)
* **Sebagai Admin**, saya memiliki akses tak terbatas (namun tidak mengisi *checklist* harian).
* **Sebagai Admin**, saya bisa memilih parameter cetak laporan: **Pilihan Ruangan**, **Bulan**, dan **Tahun**.
* **Sebagai Admin**, saya bisa menekan tombol "Cetak" untuk menghasilkan *file* PDF *landscape* yang secara akurat mereplikasi format kertas fisik (Tabel Matriks: 9 baris aktivitas vs 31 kolom tanggal).
* Tanda centang pada PDF akan otomatis terisi berdasarkan data *database* yang dikirim oleh petugas di lapangan.

---

## 7. Arsitektur Database (Top-Level)
Untuk mendukung sistem terpusat dari banyak lokasi barcode, dibutuhkan struktur relasi minimal sebagai berikut:

* **Tabel `users`**: Menyimpan kredensial Admin dan Petugas (kolom `role`).
* **Tabel `locations`**: Menyimpan daftar ruangan dan kode *barcode* unik (misal: nama_lokasi = 'KM Poli Anak', kode = 'KM-ANAK').
* **Tabel `activities`**: Menyimpan *master data* 9 daftar pekerjaan kebersihan.
* **Tabel `checklists`**: Tabel transaksi utama. Menyimpan `user_id` (petugas), `location_id` (ruangan), `activity_id` (pekerjaan), dan `tanggal_cek`.

---

## 8. Kriteria Penerimaan Non-Fungsional
1. **Responsivitas:** UI Dashboard Petugas harus sangat nyaman digunakan di layar *smartphone* vertikal, karena input dilakukan murni dari HP (*mobile-first design*).
2. **Keamanan Sesi:** Jika sesi login habis, petugas yang men-*scan* barcode harus bisa login ulang tanpa kehilangan arah tujuan (*redirect to intended URL*).
3. **Performa Cetak:** PDF Laporan tidak boleh melebihi margin kertas A4 *Landscape* agar langsung siap di-*print* (menggunakan library `dompdf` di Laravel).