# Arutmin Inspeksi Manajemen System (AIMS)

Aplikasi PHP Native 8.2 untuk mengimpor report Hazard dari XLSX/XLS/CSV dan menampilkan dashboard analitik.

## Instalasi

1. Buka terminal pada folder proyek dan jalankan `composer install`.
2. Impor `database/schema.sql` melalui phpMyAdmin atau MySQL CLI.
3. Sesuaikan koneksi pada `config/app.php`, atau set environment variable `DB_HOST`, `DB_PORT`, `DB_NAME`, `DB_USER`, dan `DB_PASS`. Jika aplikasi tidak berada di `/hazard/public`, set `APP_BASE_URL` sesuai URL publik aplikasi.
4. Pastikan ekstensi PHP `pdo_mysql`, `fileinfo`, `zip`, `xml`, `mbstring`, dan `gd` aktif.
5. Pastikan folder `storage/uploads` dan `storage/logs` dapat ditulis oleh Apache.
6. Buka `http://localhost/hazard/public/`.

## Login dan Hak Akses

- URL login: `http://localhost/hazard/public/login.php`
- Akun awal: `admin` / `Admin@123`
- Segera ganti password akun awal melalui menu **Admin → Manajemen Pengguna**.
- Terdapat tiga role: `admin`, `pelapor`, dan `verifikator`.
- Role `admin` dapat mengelola pengguna, import, dashboard, dan export.
- Role `pelapor` hanya dapat melihat dan mengekspor hazard miliknya berdasarkan kecocokan `userID` dengan username.
- Role `verifikator` dapat melihat dan mengekspor seluruh data dashboard.
- Import Hazard hanya tersedia untuk role `admin`.
- Saat import, `userID` yang belum memiliki akun otomatis dibuat sebagai Pelapor.
- Username awal Pelapor adalah nilai `userID` dan password awal `Hazard@123`. Password dapat diganti melalui menu **Ganti Password**.
- Jika database sudah pernah dibuat, jalankan kembali bagian `CREATE TABLE admin_users` dan `INSERT INTO admin_users` pada `database/schema.sql`.

## Catatan

- Baris pertama file wajib berisi seluruh nama kolom sesuai spesifikasi.
- Setiap request memproses maksimal 500 baris dalam satu transaksi.
- `indexID` adalah primary key; data lama otomatis diperbarui.
- Log baris gagal tersimpan di `storage/logs/import_<token>.log`.
- Kartu status mengenali `open/1`, `progress/in progress/2`, dan `close/closed/3`. Ubah pemetaan di `config/app.php` bila kode database berbeda.
- Dashboard membatasi tabel interaktif hingga 5.000 baris; hasil ekspor mencakup seluruh data yang sesuai filter.
