# Debug Session: dashboard-utility-not-showing

**Date**: 2026-09-22  
**Status**: [OPEN]  
**Session ID**: dashboard-utility-not-showing  
**User Report**: "Setelah aku isi log di daily_log_form.php, dashboard index.php?date_from=2026-09-01&date_to=2026-09-22 utility summary ga muncul / 0 semua"

---

## 1. Symptoms

| Kondisi | Value |
|---|---|
| **Expected** | Jika user buka form `daily_log_form.php?date=2026-09-15` → isi 4 TOTAL FINAL (Listrik/Air/Gas/Fuel) → klik SIMPAN → buka dashboard `index.php?date_from=2026-09-01&date_to=2026-09-22`, utility cards (Electricity/Water/Gas/Fuel TODAY) menampilkan ANGKA sesuai yang disimpan. |
| **Actual** | Utility cards **TETAP 0** atau tidak ada perubahan, meskipun log sudah disimpan dan data ada di tabel `daily_logs`. |
| **Repro Steps** | (1) Isi daily_log_form tanggal 15/9, (2) Klik save, (3) Buka dashboard range 1-22/9, (4) Periksa utility cards Today value |
| **Environment** | Laragon localhost, PHP, MySQL, St. Regis Bali System |

---

## 2. Falsifiable Hypotheses (5 Hipotesis Teruji)

| # | Hypothesis | Falsifiable Test | Status |
|---|---|---|---|
| **H1** | `Inject Override` di index.php **100% RESET nilai ke 0 hanya isi dari utility_report_override** — JIKA user tidak isi modal "Isi Manual" di dashboard, meskipun data di `daily_logs` ada → TETAP 0 | Cek log `$electricity_today_before_override` vs `$electricity_today_after_override` | PENDING |
| **H2** | Query aggregate `daily_logs` untuk range tanggal salah (JOIN engineer_id salah, WHERE tanggal `log_date` BETWEEN salah format `Y/m/d` vs `Y-m-d`) → hasil query 0 | Cek SQL query final yang dijalankan + row count hasil | PENDING |
| **H3** | **Double Override Conflict**: ada row di `utility_report_override` untuk date range tsb DENGAN NILAI 0 → override menimpa daily_logs dengan 0 | Cek SELECT * FROM utility_report_override WHERE report_date BETWEEN ... | PENDING |
| **H4** | PHP Handler save `daily_log_form.php` TIDAK BENAR menyimpan ke kolom `total_electricity / total_water / total_gas / total_fuel` (tetap nyimpan 0 karena hidden input tidak sinkron) | Cek query DB: SELECT log_date, total_electricity, total_water FROM daily_logs WHERE log_date = '2026-09-15' | PENDING |
| **H5** | `JS syncTotalFields()` tidak sinkronkan value ke hidden input `name="total_electricity"` → POST data 0 → tersimpan 0 | Cek log PHP `$_POST['total_electricity']` saat save | PENDING |

---

## 3. Log Collection Plan

- Instrument index.php di **2 titik krusial**:
  - **BEFORE INJECT OVERRIDE**: Log hasil aggregate daily_logs (semua 4 utility TODAY/COST/LY)
  - **AFTER INJECT OVERRIDE**: Log nilai final yang akan ditampilkan ke user + nilai override source
- Instrument daily_log_form.php save handler → log `$_POST['total_electricity']` dll sebelum execute INSERT/UPDATE
- Start Debug Server → buka dashboard → collect log

---

## 4. Evidence Logs

*(akan diisi setelah collect log)*

| Timestamp | File | Point ID | Data |
|---|---|---|---|
| - | - | - | - |

---

## 5. Fix & Verification

| Step | Status | Detail |
|---|---|---|
| Minimal Fix | PENDING | - |
| Post-fix Log Compare | PENDING | - |
| User Confirm | PENDING | - |
