# 🏪 POS UMKM

**Point of Sale (POS) & Stock Opname** untuk Usaha Mikro, Kecil, dan Menengah (UMKM).

Dibangun dengan **Laravel 13** + **PHP 8.3** + **Tailwind CSS**.
Tidak membutuhkan Node.js / npm — CSS diload via CDN.

---

## ✨ Fitur Utama

### 🧾 Kasir (POS)
- Antarmuka kasir modern, responsif, touch-friendly
- Pencarian produk real-time + scan barcode
- Filter produk per kategori dengan ikon emoji
- Keranjang belanja dengan edit qty, diskon per item
- Diskon transaksi (nominal atau persen)
- Metode pembayaran: Tunai, QRIS, Transfer, Kartu
- Kalkulasi kembalian otomatis + tombol nominal cepat
- Cetak struk thermal 80mm
- Riwayat transaksi kasir hari ini

### 📦 Manajemen Produk
- CRUD produk lengkap dengan gambar
- SKU otomatis / manual, barcode support
- Harga modal (HPP) + harga jual + kalkulasi margin otomatis
- Pelacakan stok dengan alert stok menipis
- Penyesuaian stok manual (masuk, keluar, penyesuaian)
- Produk tanpa pelacakan stok (untuk jasa)
- Audit trail setiap perubahan stok

### 👥 Manajemen Sesi Kasir
- Buka sesi dengan modal kas awal
- Tutup sesi dengan hitung kas aktual
- Laporan selisih kas otomatis (+ lebih / - kurang)
- Multi kasir, multi sesi

### 📊 Laporan
- **Laporan Penjualan**: grafik harian, top produk, breakdown metode bayar
- **Laporan Kasir (Clerk Report)**: performa per kasir, selisih kas setiap sesi
- **Laporan Stok**: nilai modal, potensi revenue, status stok
- **Dashboard**: ringkasan hari ini + grafik 7 hari

### 🔐 Manajemen Pengguna
- Role: Admin, Manajer, Kasir
- PIN kasir untuk login cepat
- Aktivasi / nonaktifkan akun

---

## 🗄️ Teknologi

| Layer        | Teknologi                |
|--------------|--------------------------|
| Backend      | Laravel 13, PHP 8.3      |
| Database     | MySQL 8 / SQLite / PgSQL |
| Frontend     | Blade + Tailwind CSS CDN |
| Chart        | Chart.js CDN             |
| Export       | Maatwebsite Excel        |
| PDF Struk    | Print CSS (tanpa library)|
| Testing      | Pest / PHPUnit           |

---

## 📁 Struktur Aplikasi

```
Roles & Akses:
┌─────────────────────────────────────────────┐
│  Admin   → Semua fitur + kelola user        │
│  Manajer → Dashboard + semua laporan        │
│  Kasir   → POS kasir + riwayat transaksi    │
└─────────────────────────────────────────────┘

Alur Kasir:
Login → Buka Sesi → Kasir POS → Tutup Sesi

Alur Transaksi:
Pilih Produk → Keranjang → Pilih Bayar → Proses → Struk
                              ↓
                    Stok berkurang otomatis
                    Stock movement tercatat
                    Invoice tersimpan
```

---

## 🚀 Instalasi Cepat

```bash
git clone https://github.com/username/pos-umkm.git
cd pos-umkm

composer install
cp .env.example .env
php artisan key:generate

# Edit .env: set DB_DATABASE, DB_USERNAME, DB_PASSWORD
php artisan migrate --seed
php artisan storage:link
php artisan serve
```

Login: `admin` / `admin123`

Lihat **[INSTALL.md](INSTALL.md)** untuk panduan lengkap VPS, Lokal, dan cPanel.

---

## 🧪 Testing

```bash
php artisan test                              # semua test
php artisan test --filter=PosTransactionTest  # test spesifik
php artisan test --coverage                   # dengan coverage
```

| Test Suite | File | Deskripsi |
|---|---|---|
| Feature | AuthTest | Login, logout, akses halaman |
| Feature | PosTransactionTest | Transaksi, stok, sesi kasir |
| Feature | ProductTest | CRUD produk, penyesuaian stok |
| Feature | ReportTest | Akses laporan, filter |
| Unit | ProductModelTest | Kalkulasi margin, profit |
| Unit | HelpersTest | Format rupiah, tanggal |

---

## 🖨️ Struk Thermal

Struk otomatis muncul setelah transaksi selesai.
Format: **80mm** (standar printer thermal kasir).

Mendukung printer dengan driver:
- ESC/POS (Epson, SNBC, dll)
- Print via browser (Ctrl+P / browser print)

---

## 🔒 Keamanan

- CSRF protection di semua form
- Role-based access control (RBAC)
- Password di-hash dengan bcrypt (12 rounds)
- Session lifetime 8 jam (dapat dikonfigurasi)
- Model::shouldBeStrict() di development
- Error 403/404/419/500/503 page kustom

---

## 📝 Lisensi

MIT License — bebas digunakan untuk keperluan komersial maupun personal.

---

*POS UMKM v1.0 — Laravel 13 + PHP 8.3*
