Buatkan **Dashboard Keuangan Project (Budget vs Actual)** untuk aplikasi Laravel.

### Tujuan Dashboard

User bisa melihat kondisi anggaran vs realisasi secara cepat:

* Total budget, total actual, sisa, dan persentase realisasi
* Kesehatan tiap project (budget vs actual)
* Red flag: project over budget + data transaksi yang belum lengkap mappingnya
* Mutasi terbaru (audit cepat)

---

## 1) KPI Cards (4 kartu)

Tampilkan 4 kartu di bagian atas:

1. **Total Budget**

   * Sum seluruh budget plan (scope: semua project aktif atau semua data—pilih yang paling masuk akal untuk dashboard default)
2. **Total Actual**

   * Sum seluruh actual mutasi bank (transaksi mutasi)
3. **Remaining**

   * `Total Budget - Total Actual`
4. **% Realisasi**

   * `(Total Actual / Total Budget) * 100`
   * Handle divide-by-zero (jika budget 0 → tampil “0%” atau “-”)

Format angka rapi (IDR/decimal), dan badge warna optional (misal jika remaining negatif).

---

## 2) Tabel “Project Health”

Buat tabel ringkas yang menampilkan kondisi tiap project (boleh top 10 + tombol “lihat semua”, atau tampil semua jika data kecil).

Kolom minimal:

* `Project`
* `Budget`
* `Actual`
* `Remaining`
* `% Realisasi`
* `Status` (badge)

Rules status badge:

* **Aman**: % realisasi < 80%
* **Waspada**: 80% s/d 100%
* **Over**: > 100% (actual > budget)
* **Belum ada Budget**: budget = 0 tapi actual > 0
* **Belum ada Actual**: actual = 0 tapi budget > 0

Urutan default: tampilkan yang paling “kritis” dulu:

1. Over, 2) Waspada, 3) Belum ada Budget, lalu lainnya.

---

## 3) List “Over Budget / Data Missing” (panel alert)

Buat 2 panel list (atau 1 panel dengan 2 tab):

### A. Over Budget

* Ambil daftar project yang `actual > budget`
* Tampilkan: project, over_amount = actual - budget, % realisasi

### B. Data Missing (Data Quality)

Tampilkan transaksi mutasi yang belum lengkap mappingnya (pilih definisi berikut):

* transaksi yang **project_id null** OR
* **detail_kategori_id null** OR
* **vendor_id null** (opsional) OR
* **kode_mutasi_id null** (opsional)

Tampilkan ringkas: date, rekening, keterangan, amount, field mana yang missing.

---

## 4) Recent Mutasi (10 terakhir)

Tampilkan tabel “Mutasi Terbaru” (max 10, urut terbaru) dengan kolom:

* `Tanggal`
* `Rekening`
* `Kode Mutasi`
* `Project` (jika ada)
* `Detail Kategori` (jika ada)
* `Vendor` (jika ada)
* `Keterangan`
* `Amount` (debit/kredit jika ada, atau tampil amount + indikator is_credit)

---

## Output yang harus kamu hasilkan

1. Rekomendasi struktur Laravel:

   * Route
   * Controller Dashboard (query untuk KPI, Project Health, Over Budget, Data Missing, Recent Mutasi)
   * Blade View layout untuk 4 komponen di atas
2. Query harus efisien (hindari N+1). Gunakan join + groupBy seperlunya.
3. Gunakan format UI standar admin (Bootstrap/Argon), dengan komponen:

   * Card KPI
   * Table responsive
   * Badge status
   * Alert/Panel list
4. Pastikan bisa dikembangkan nanti (misal filter project/periode).

Catatan: struktur tabel dan relasi sudah tersedia pada konteks sistem, jadi tidak perlu menuliskan ulang definisi database. Fokus ke implementasi dashboard & query sesuai kebutuhan di atas.
