# Instalasi & Upgrade Bifas POS V41

## Persyaratan
- PHP **8.1+** (diuji di 8.4) dengan ekstensi `pdo_mysql`
- **MariaDB 10.3+** (diuji di 10.11). `install_full.sql` tidak memakai sintaks khusus MariaDB, jadi seharusnya juga jalan di MySQL 8, tapi **belum diuji** di MySQL. Semua file `vXX_migration.sql` (untuk upgrade) hanya jalan di MariaDB.
- **HTTPS wajib** di production. Cookie session otomatis diset `secure` saat HTTPS aktif, dan PWA/kamera juga butuh HTTPS.

## A. Instalasi baru (paling mudah)
1. Buat database kosong (cPanel → MySQL Databases) dengan collation `utf8mb4_unicode_ci`.
2. Import **`database/install_full.sql`** lewat phpMyAdmin (tab Import). Cukup satu file ini.
3. Salin `config/database.example.php` menjadi `config/database.php`, lalu isi kredensial database dan `cron_token`.
4. Buat akun Super Admin lewat Terminal/SSH cPanel:
   `php tools/v36-create-super-admin.php email@bifasdigital.id "Nama" PasswordKuat123`
5. Buka `https://domain-anda/public/super-admin.html` dan login, lalu:
   - Buka tab **Pengaturan**: isi nomor rekening dan kontak bantuan (tampil ke pelanggan).
   - Buka tab **Paket**: isi harga tiap paket.
   - Buka tab **Tenant** → **+ Tenant baru** untuk membuat akun klien pertama.
6. Klien login di `https://domain-anda/public/login.html`.

### Data demo untuk presentasi (opsional)
`php tools/v41-demo-seed.php` membuat tenant **Kedai Demo** berisi menu kopi bervarian, barang retail, dan 14 hari penjualan.
Login: `demo@bifas.id` / `Demo12345` (Owner), `kasir@bifas.id` / `Demo12345` (Kasir).
Jalankan di server demo, **jangan** di server produksi klien.

## B. Upgrade dari V40
1. **Backup** database dan file.
2. Timpa semua file aplikasi dengan isi V41. **Jangan timpa `config/database.php`**.
3. Import `database/v41_migration.sql`. File ini aman dijalankan ulang.
4. (Opsional) Tambahkan `'license_grace_days' => 3,` ke `config/database.php`.
5. Buka Super Admin → **Pengaturan**, lalu isi instruksi pembayaran.

Upgrade dari **V39 atau lebih lama**: jalankan dulu `v40_migration.sql`, baru `v41_migration.sql`.

## Cron harian (wajib)
Tugas cron ini menandai lisensi yang sudah lewat masa tenggang dan membersihkan log login lama.
- SSH: `php /home/USER/public_html/pos/api/license-cron.php`
- cPanel Cron (URL): `wget -qO- "https://domain/pos/api/license-cron.php?token=ISI_CRON_TOKEN"`

## Struktur folder di hosting
```
public_html/pos/
  api/        ← endpoint JSON
  public/     ← halaman aplikasi (buka /pos/public/login.html)
  includes/ config/ database/ tools/   ← sudah diproteksi .htaccess (Apache/LiteSpeed)
```
Kalau hosting memakai Nginx, blokir akses ke keempat folder terakhir secara manual.

## Pengujian otomatis (di database TES, bukan produksi)
```
php -S 127.0.0.1:8080 -t .
php tools/v41-e2e-test.php http://127.0.0.1:8080 email-superadmin password
```
Syarat datanya ada di header file tersebut. Hasil terakhir: **143 tes lolos**, baik untuk instalasi baru maupun upgrade dari V40 (lihat `V41-QA.md`).
