# Project Overview

## Apa ini?

**Apotek Siaga** (nama aplikasi: `Siaga`) adalah prototype aplikasi web manajemen operasional untuk dua cabang apotek:

- Apotek Siaga 24
- Apotek Siaga 25

Proyek ini mengdigitalisasi alur kerja yang saat ini masih banyak dilakukan lewat file Excel (DPB, penjualan, cash flow, tagihan supplier). Tujuannya **bukan** langsung menggantikan seluruh operasional apotek, melainkan memvalidasi alur bisnis sebelum pengembangan lebih lanjut.

## Tujuan V0

1. Merapikan pencatatan Excel menjadi struktur data terstruktur.
2. Membantu owner melihat ringkasan performa bisnis.
3. Membantu admin mengelola pembelian, penjualan, stok, tagihan PBF, dan cash flow.
4. Menjadi dasar pengembangan produksi jika prototype terbukti cocok.

## Stack teknologi

| Lapisan           | Teknologi       | Versi                          |
| ----------------- | --------------- | ------------------------------ |
| Backend           | PHP / Laravel   | PHP ^8.3, Laravel ^13.8        |
| Templating        | Blade           | Bawaan Laravel                 |
| CSS               | Tailwind CSS    | ^4.0 (via `@tailwindcss/vite`) |
| Build             | Vite            | ^8.0                           |
| JS interaktif     | Alpine.js       | CDN (form transaksi dinamis)   |
| Database produksi | MySQL           | 8.4 (docker-compose)           |
| Database dev/test | SQLite          | In-memory untuk PHPUnit        |
| Auth              | Laravel session | Single admin user (V0)         |

## Fitur yang sudah ada (V0)

| Modul                  | Status | Keterangan                                                                              |
| ---------------------- | ------ | --------------------------------------------------------------------------------------- |
| Login / logout         | ✅     | Session-based; role minimal owner / admin_cabang + cabang aktif                         |
| Dashboard              | ✅     | KPI operasional + alert stok                                                            |
| Master Cabang          | ✅     | CRUD                                                                                    |
| Master PBF             | ✅     | CRUD supplier farmasi                                                                   |
| Master Obat            | ✅     | CRUD + dictionary FK                                                                    |
| Master Pelanggan       | ✅     | CRUD + jenis harga OTC/REG/VIP                                                          |
| DPB / Pembelian        | ✅     | Multi-line, batch, tagihan otomatis                                                     |
| Penjualan Medis/OTC    | ✅     | Hub index, FEFO, kas masuk, edit/hapus + rollback stok/kas; form mengikuti cabang aktif |
| Stok obat (agregat)    | ✅     | Status Aman/Menipis/Habis                                                               |
| Stok batch             | ✅     | Per batch + expired                                                                     |
| Koreksi stok           | ✅     | Per batch + mutasi audit                                                                |
| Mutasi stok            | ✅     | Riwayat pergerakan                                                                      |
| Tagihan PBF            | ✅     | List prioritas (JT + sisa) + pembayaran parsial + histori                               |
| Rencana pembayaran PBF | ✅     | CRUD (belum terhubung ke pembayaran)                                                    |
| Cash flow (Kas)        | ✅     | Kas Tunai per cabang aktif; BCA global; Omzet Medis/OTC (TRANSFER → BCA)                 |
| Laporan                | ✅     | 6 laporan + filter tanggal                                                              |

## Fitur yang sengaja tidak dibuat (V0)

- Barcode scanner, printer thermal
- BPJS, resep dokter detail
- Multi-user permission / role per modul (kasir vs admin) — role cabang minimal sudah ada
- Pecah running saldo kolom `mutasi_kas.saldo` per cabang (UI Kas Tunai memakai neto agregat)
- API eksternal
- Akuntansi lengkap (jurnal, neraca)
- Import Excel otomatis penuh
- Migrasi data historis Excel

## Istilah bisnis penting

| Istilah    | Arti                                                        |
| ---------- | ----------------------------------------------------------- |
| **PBF**    | Supplier/distributor farmasi                                |
| **DPB**    | Pencatatan barang masuk / pembelian dari PBF                |
| **Faktur** | Dokumen tagihan pembelian dari PBF                          |
| **OTC**    | Penjualan bebas (over the counter)                          |
| **Medis**  | Penjualan ke pelanggan klinik/RS                            |
| **FEFO**   | First Expired First Out — stok expired terdekat keluar dulu |
| **TOP**    | Term of payment (hari jatuh tempo pelanggan)                |

## Cara menjalankan

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

# Opsi A: MySQL via Docker
docker compose up -d
# Pastikan .env: DB_CONNECTION=mysql, DB_DATABASE=siaga_app, dll.

# Opsi B: SQLite lokal
# DB_CONNECTION=sqlite && touch database/database.sqlite

php artisan migrate --seed
npm install && npm run build
php artisan serve --port=8080
```

Aplikasi: **http://localhost:8080**

### Kredensial default (setelah seed)

- Email: `admin@apoteksiaga.test`
- Password: `password`

## Sumber data Excel (konteks bisnis)

File Excel yang menjadi referensi desain (belum di-import otomatis):

1. `1 HARGA JUNI 2026.xlsx` — master obat & harga
2. `2 BARANG TERJUAL 2026.xlsx` — transaksi penjualan
3. `3 CEK CASH FLOW 2026.xlsx` — kas Medis, OTC, BCA
4. `4 PENGIRIMAN KE SIAGA 25.xlsx` — riwayat pengiriman/transfer stok dari cabang 24 ke cabang 25
5. `5 DAFTAR TAGIHAN SUPPLIER.xlsx` — tagihan & estimasi pembayaran
6. `6 DPB.xlsx` — pembelian barang

## Definisi "selesai" untuk V0

V0 dianggap cukup jika admin dapat: login, kelola master data, catat DPB, lihat stok batch, catat penjualan, kelola tagihan PBF, buat rencana pembayaran, catat cash flow, dan melihat laporan dengan filter tanggal — dengan UI yang cukup rapi untuk demo ke owner.
