-- ============================================================
-- SINERGI — Entity Relationship Diagram (ERD) Documentation
-- ============================================================
--
-- DIAGRAM RELASI TABEL:
--
-- roles ─────────────────────────────┐
--   id, nama, slug, deskripsi        │ 1
--                                    │
-- users ────────────────────────────-┤ N (setiap user punya 1 role)
--   id, id_role(FK→roles), id_kelurahan(FK→kelurahan)
--   nama, username, email, password, no_hp, foto, is_active
--   last_login, created_at
--
-- kecamatan ─────────────────────────┐
--   id, nama, kode, lat, lng         │ 1
--                                    │
-- kelurahan ─────────────────────────┤ N (banyak kelurahan per kecamatan)
--   id, id_kecamatan(FK→kecamatan)   │ 1
--   nama, kode, lat, lng             │
--                                    │ N
-- rumah_ibadah ──────────────────────┤ (banyak RI per kelurahan)
--   id, id_user(FK→users)            │
--   id_kelurahan(FK→kelurahan)       │
--   id_jenis(FK→jenis_rumah_ibadah)  │
--   nama, alamat, lat, lng           │
--   radius_meter, nama_ketua, foto   │ 1
--                                    │
-- warga_miskin ──────────────────────┘ N (banyak warga per RI)
--   id, id_laporan(FK→laporan_masyarakat)
--   id_kelurahan(FK→kelurahan)
--   id_rumah_ibadah(FK→rumah_ibadah)
--   id_verifikator(FK→users)
--   nik, nama, tgl_lahir, jk, agama
--   alamat, lat, lng, foto
--   pendidikan_terakhir, pekerjaan
--   penghasilan_bulanan, jumlah_tanggungan
--   kondisi_rumah, riwayat_penyakit
--   is_lansia, is_disabilitas
--   status_kemiskinan, skor_prioritas
--   level_prioritas, is_blind_spot
--   status, tanggal_verifikasi
--
-- laporan_masyarakat ────────────────┐
--   id, kode_laporan                 │ 1
--   nama_pelapor, no_hp_pelapor      │
--   nama_warga, alamat_warga         │
--   id_kelurahan(FK→kelurahan)       │
--   lat, lng, deskripsi, foto        │
--   status, catatan_verifikator      │
--   id_verifikator(FK→users)         │
--   tanggal_verifikasi               │
--                                    │ (1 laporan → 1 warga)
-- histori_bantuan ─────────────────────────────────
--   id, id_warga(FK→warga_miskin)
--   id_rumah_ibadah(FK→rumah_ibadah)
--   id_kategori_bantuan(FK→kategori_bantuan)
--   id_user_pengurus(FK→users)
--   kode_bantuan, tanggal_penyaluran
--   jumlah, satuan, deskripsi, foto_bukti
--   status
--
-- kategori_bantuan ──────────────────
--   id, nama, deskripsi, satuan, is_active
--
-- jenis_rumah_ibadah ────────────────
--   id, nama, ikon
--
-- aktivitas_sistem ──────────────────
--   id, id_user(FK→users), nama_user
--   role, aksi, modul, deskripsi
--   ip_address, user_agent, created_at
--
-- sessions ──────────────────────────
--   id, id_user(FK→users)
--   ip_address, user_agent
--   payload, last_activity
--
-- ============================================================
-- RELASI KARDINALITAS:
-- ============================================================
--
-- roles          1 ──── N  users
-- kecamatan      1 ──── N  kelurahan
-- kelurahan      1 ──── N  rumah_ibadah
-- kelurahan      1 ──── N  users (verifikator)
-- kelurahan      1 ──── N  warga_miskin
-- kelurahan      1 ──── N  laporan_masyarakat
-- rumah_ibadah   1 ──── N  warga_miskin (binaan)
-- rumah_ibadah   1 ──── N  histori_bantuan
-- warga_miskin   1 ──── N  histori_bantuan
-- laporan        1 ──── 1  warga_miskin (opsional)
-- kategori       1 ──── N  histori_bantuan
-- users          1 ──── 1  rumah_ibadah (pengurus)
-- users          1 ──── N  aktivitas_sistem
-- users          1 ──── N  laporan (verifikator)
-- users          1 ──── N  warga_miskin (verifikator)
-- jenis_ri       1 ──── N  rumah_ibadah
--
-- ============================================================
-- PROSES BISNIS UTAMA:
-- ============================================================
--
-- [1] PELAPORAN:
--     Masyarakat → POST /lapor → laporan_masyarakat (status=menunggu)
--
-- [2] VERIFIKASI:
--     Verifikator → verifikasi laporan → 
--     UPDATE laporan status=terverifikasi +
--     INSERT warga_miskin
--
-- [3] ASSIGNMENT RI (Haversine):
--     Saat INSERT warga_miskin:
--     - Loop semua rumah_ibadah aktif
--     - Hitung jarak Haversine(warga.lat,warga.lng, ri.lat,ri.lng)
--     - Jika jarak <= radius_meter → assign id_rumah_ibadah
--     - Jika tidak ada → is_blind_spot = 1
--
-- [4] SKOR PRIORITAS (0-100):
--     penghasilan(30) + tanggungan(20) + kondisi_rumah(15) +
--     pendidikan(10) + penyakit(10) + lansia(8) + disabilitas(7)
--     → level: Tinggi(≥70), Sedang(≥40), Rendah(<40)
--
-- [5] PENYALURAN BANTUAN:
--     Pengurus RI → INSERT histori_bantuan
--
-- [6] MONITORING:
--     Dinsos/Wali Kota → READ ONLY semua data
--     GIS Heatmap dari koordinat warga_miskin
-- ============================================================
