# Catatan Pengembangan Lanjutan — WasteBank
> Dokumen ini adalah pelengkap PRD `4.1_Tugas_Perancangan_Kelompok2.md`.  
> Berisi fitur dan perbaikan yang **disengaja ditunda** dari versi pertama karena di luar cakupan tugas, namun wajib dipertimbangkan jika sistem ini benar-benar diluncurkan ke publik.

---

## Latar Belakang

Berdasarkan dua sumber riset:

1. **Survei Google Form** (74 responden, 81,6% pelajar usia 14–19 tahun)
2. **Wawancara lapangan** dengan Pak Ragil, DLH Kabupaten Pati:
   - DLH Pati sudah pernah pakai aplikasi **E-mpati**, gagal karena pengurus bank sampah mayoritas lansia, kesulitan mengisi form digital.
   - KLH juga punya aplikasi serupa, nasib sama.
   - Pengurus bank sampah menganggap sudah cukup hanya dengan **WhatsApp Group**.

Temuan ini mengidentifikasi gap penting yang tidak bisa diselesaikan hanya lewat UI yang bagus.

---

## 1. Tabel `pickup_schedules` — Jadwal Tersedia dari Admin

**Masalah saat ini:**  
Nasabah diminta "pilih jadwal tersedia", tapi tidak ada tabel yang menyimpan slot jadwal yang dibuat admin. Kolom `jadwal_jemput` di `pickup_orders` hanya menyimpan nilai datetime — tidak ada FK ke tabel jadwal, tidak bisa deteksi slot penuh/kosong.

**Solusi yang direkomendasikan:**

```sql
CREATE TABLE pickup_schedules (
  id          INT PRIMARY KEY AUTO_INCREMENT,
  label       VARCHAR(100),   -- contoh: "Senin, 09:00-12:00 (Rute Utara)"
  hari        ENUM('senin','selasa','rabu','kamis','jumat','sabtu','minggu'),
  jam_mulai   TIME,
  jam_selesai TIME,
  kuota_max   INT DEFAULT 10, -- maks order per slot
  is_active   BOOLEAN DEFAULT TRUE,
  created_at  TIMESTAMP
);
```

`pickup_orders` perlu ditambah kolom `schedule_id INT FK -> pickup_schedules.id`.

---

## 2. Flow Petugas — Belum Ada Sama Sekali

**Masalah saat ini:**  
Tidak ada flow, halaman, atau endpoint untuk petugas angkut. Padahal petugas yang:
- Berangkat ke lokasi → ubah status ke `on_the_way`
- Tiba dan timbang → input berat aktual → ubah status ke `completed`

Kalau tidak ada flow petugas, admin yang harus kerjakan semuanya — membebani pengurus yang sudah tidak melek teknologi.

**Endpoint yang perlu ditambahkan:**

| Method | Endpoint | Fungsi |
|--------|----------|--------|
| GET | `/api/v1/petugas/orders` | Daftar order yang ditugaskan ke petugas yang login |
| PATCH | `/api/v1/petugas/orders/:id/on-the-way` | Petugas konfirmasi berangkat |
| PATCH | `/api/v1/petugas/orders/:id/complete` | Petugas input timbangan & selesaikan order |

**Halaman yang perlu ditambahkan di sitemap:**

```
9.0 Portal Petugas (/petugas) [Petugas Only]
    |-- 9.1 Daftar Order Hari Ini
    |-- 9.2 Detail Order & Navigasi Lokasi
    `-- 9.3 Input Timbangan Aktual
```

---

## 3. Notifikasi WhatsApp — Lebih Relevan dari Push Notification

**Temuan lapangan:**  
Pak Ragil DLH Pati menyatakan pengurus bank sampah lebih nyaman dengan WhatsApp. Usia nasabah muda pun 100% aktif di WA. Push notification browser sering diabaikan atau diblokir user.

**Rekomendasi:**  
Gunakan **WhatsApp Business API (Meta Cloud API)** atau **Fonnte / Wablas** untuk kirim notifikasi otomatis ke `nomor_hp` user pada event:

| Event | Penerima | Isi Pesan |
|-------|----------|-----------|
| Order dibuat | Nasabah | "Order WB-xxx diterima, menunggu konfirmasi jadwal." |
| Status ASSIGNED | Nasabah | "Jadwal jemput dikonfirmasi: Senin 09:00. Petugas: Pak Budi." |
| Status ON_THE_WAY | Nasabah | "Petugas sedang dalam perjalanan ke lokasi Anda." |
| Status COMPLETED | Nasabah | "Sampah berhasil ditimbang! Saldo +Rp 41.000 masuk ke tabungan Anda." |
| Order baru masuk | Admin | "Ada order baru dari Fauzan untuk Senin 09:00." |

---

## 4. Audit Trail — `verified_by` dan `completed_at`

**Masalah saat ini:**  
Tidak ada rekaman siapa yang input timbangan dan kapan order benar-benar selesai. Kalau ada dispute saldo, tidak bisa dilacak.

**Kolom yang perlu ditambahkan di `pickup_orders`:**

```sql
verified_by   BIGINT    NULL,  -- FK -> users.id (admin/petugas yang input timbangan)
completed_at  TIMESTAMP NULL   -- waktu order benar-benar selesai
```

---

## 5. Masalah Adopsi Admin — Pelajaran dari E-mpati & KLH

**Ini risiko terbesar jika diluncurkan ke publik.**

Dua aplikasi bank sampah sebelumnya (E-mpati dari DLH Pati, dan aplikasi dari KLH) sudah gagal dengan alasan yang sama: pengurus bank sampah adalah pekerja sampingan, mayoritas lansia, tidak bisa atau tidak mau pakai aplikasi.

**Tiga opsi untuk dievaluasi:**

| Opsi | Deskripsi | Trade-off |
|------|-----------|-----------|
| **A. Tunjuk Admin Muda** | Setiap unit bank sampah punya satu orang muda sebagai operator aplikasi | Bergantung pada ketersediaan relawan |
| **B. Sederhanakan Panel Admin** | Panel admin hanya butuh 2 tombol: "Terima" dan "Selesai + Input Berat" | Fungsionalitas terbatas |
| **C. Konfirmasi Otomatis** | Order langsung `assigned` otomatis tanpa approval manual admin | Admin kehilangan kontrol kuota armada |

---

## 6. Backlog Fitur Jangka Panjang

| Prioritas | Fitur | Keterangan |
|-----------|-------|------------|
| High | Halaman Register di prototipe | Sekarang baru ada `login.html`, register belum ada |
| High | Flow petugas di prototipe | Simulasi `on_the_way` sekarang masih tombol admin |
| Medium | GPS otomatis isi koordinat | Browser Geolocation API, bukan input lat/lng manual |
| Medium | Notifikasi WA otomatis | Fonnte/Wablas API, trigger dari perubahan status order |
| Medium | Tabel `pickup_schedules` | Agar slot jadwal bisa dikelola dan dideteksi kuotanya |
| Low | Halaman profil user | Edit nama, nomor WA, alamat domisili |
| Low | Ekspor riwayat ke PDF | Laporan tabungan nasabah |

---

*Dokumen ini dibuat berdasarkan analisis PRD v1.0 dan hasil riset lapangan Agustus 2026.*  
*Kelompok 2 PW — SMK TJKT/PPLG Kelas XII Semester 5*
