# HotelFix v2 — Daftar QC Manual untuk Owner

Disusun PM, 5 Juli 2026. Prasyarat: PHP 8.2 + MySQL/MariaDB terpasang →
`config/config.php` diisi → `php bin/migrate.php` → jalankan server:
`php -S localhost:8080 -t backend/public backend/public/router.php`.
Login seed (password semua: `password`): satu user per role — super_admin,
property_admin, dept_head, technician, reporter, viewer.

---

## FASE A — Fondasi & alur reaktif (selesai)

1. **Login & multi-property**: login user biasa → TIDAK ada pemilih properti
   (langsung masuk). User multi-akses → halaman pilih properti muncul.
2. **Dashboard** (dept_head): stat WO terbuka, PM compliance %, MTTR, lewat SLA.
3. **Lapor defect** → WO korektif terbentuk, routing ke departemen kategori.
4. **Daftar & detail WO** + panel Biaya: tambah baris part/material/vendor +
   invoice; total > Rp 5.000.000 → butuh approval dept_head/GM.
5. **Aset**: daftar (filter kategori/status) + kartu aset (accounting_asset_no,
   riwayat WO, meter terakhir).
6. **Rekap Harian (briefing.php)**: WO kemarin dibuat vs ditutup, urgent
   terbuka, PM due/terlewat, SLA breach, guest-impacting, rencana hari ini;
   tombol Cetak (print menyembunyikan menu).
7. **Admin (admin.php)**: tambah user + role/departemen, toggle aktif.
8. **Menu per role** berubah sesuai hak (reporter tidak melihat Admin, dll).

## FASE B — Paritas web dari fitur Android (selesai)

**Hari Ini (today.php)** — login teknisi (menu pertama): stat tugas hari ini &
terlambat; tabel dikelompokkan per "Lantai X — Wing Y"; badge prioritas/status;
link nomor WO → detail. Reporter buka /today.php manual → 403.

**Lifecycle WO di web (work-order.php?id=N)**
- WO `reported`, login teknisi: "Mulai kerjakan" → status Dikerjakan.
- `in_progress`: "Menunggu part" + form Selesai (catatan WAJIB + foto after
  WAJIB). Kirim lengkap → status Selesai; foto tampil berlabel After
  (disajikan lewat file.php ber-otorisasi).
- dept_head pada WO `done`: "Verifikasi WO" → Terverifikasi; "Reopen" tersedia
  saat done/verified/rejected; WO `scheduled`: "Skip + alasan" & "Tolak".
- Teknisi lain (bukan assignee) klik Mulai → error "sudah ditugaskan".

**Lapor Defect upgrade (report.php)**
- Pilih lokasi+kategori → "Tampilkan aset" → dropdown aset lokasi itu;
  hanya 1 aset → auto-terpilih (F1b).
- Tanpa aset → tetap terkirim (WO "aset belum ter-link").
- `report.php?asset_id=ID` → banner nama aset + field terisi.
- Lampirkan foto → tampil Before di detail WO.
- Ada WO terbuka lokasi+kategori sama → banner kuning duplikat.

**Meter (meter.php)**
- Tab Meter aset: hanya aset ber-meter muncul; simpan nilai → riwayat
  bertambah + meter_current kartu aset berubah.
- Tab Utilitas (F15): catat stand bulanan → konsumsi = stand − stand lalu,
  biaya = konsumsi × tarif + biaya tetap; periode sama 2× → error rapi.

**Notifikasi (notifications.php + lonceng header)** — broadcast dari user lain
→ badge angka di lonceng; tandai dibaca per baris / semua → badge hilang.

**Broadcast (broadcast.php, F11B)**
- dept_head: kirim critical + wajib-ack ke departemen target → penerima dapat
  notifikasi; daftar menampilkan "x/N dibaca · x/N ack".
- Teknisi: target terkunci divisinya; POST paksa target lain → ditolak server.
- Reporter/viewer: lihat daftar saja, tanpa form.

**Kalender Saya (my-calendar.php)** — grid Sen–Min minggu berjalan; WO di
kolom harinya, warna per status; navigasi ±minggu; hari ini di-highlight.

**Profil (profile.php)** — identitas + daftar skill (valid_until < 60 hari →
badge merah); ganti password (lama salah/8 karakter/konfirmasi → error yang
sesuai; sukses → login ulang dengan sandi baru).

**Cari QR (qr-lookup.php)** — kode aset → kartu ringkas + tombol lapor;
kode lokasi → info + daftar aset; kode ngawur → "Tidak ditemukan".

**Regression cepat** — Dashboard, daftar WO, Rekap Harian, Admin, panel Biaya
tetap normal setelah semua perubahan.

## FASE E — Android (build sedang berjalan)

Setelah APK debug jadi: install di emulator (base URL `http://10.0.2.2:8080/api/v1/`)
atau HP fisik (ganti ke IP LAN PC). Uji: login → Hari ini → lapor defect
dengan kamera → tag done + biaya → notifikasi. Mode pesawat → laporan masuk
antrean → online kembali → otomatis terkirim.

---

Catatan: `php -l` & uji jalan belum pernah dieksekusi di mesin dev ini
(PHP belum terpasang) — bila saat QC ada error sintaks/runtime, laporkan ke PM
(saya) untuk diperbaiki cepat; verifikasi sejauh ini manual + audit silang.
