# Brief — Stok UI Hub & Pengiriman Antar Cabang

**Status:** Hub UI diimplementasi (`feat/stok-ui-hub`). Pengiriman antar cabang = backlog (belum ada kode).  
**Branch implementasi hub:** `feat/stok-ui-hub`  
**Branch implementasi pengiriman (nanti):** `feat/stok-pengiriman-cabang`

---

## 1. Navigasi & hub Stok Obat & Batch

### Sidebar (grup Stok)

| Item | Status | Route |
|------|--------|-------|
| **Stok Obat & Batch** | Aktif | `stok.index` (`?tab=obat\|batch`) |
| **Mutasi Stok** | Aktif | `stok.mutasi.index` |
| **Transfer Stok** | Placeholder abu-abu + badge **Soon** | Belum ada route |

Active state: item Obat & Batch memakai `active_on` = `stok.index`, `stok.obat.*`, `stok.batch.*` (termasuk koreksi). Mutasi = `stok.mutasi.*`.

### Hub Obat & Batch

Pill tabs server-side (pola Manajemen Harga):

- `?tab=obat` — stok agregat per cabang + obat
- `?tab=batch` — detail batch + alert mendekati expired + koreksi

- Filter `cabang_id` bersama antar tab (owner boleh semua; admin cabang terkunci).
- Drill-down: dari baris Stok Obat → **Lihat batch** (`?tab=batch&obat_id=…&cabang_id=…`) dengan banner hapus filter.
- Koreksi tetap halaman terpisah: `stok.batch.koreksi` / `.store`; kembali ke hub `?tab=batch`.
- `?tab=mutasi` di hub **redirect** ke `stok.mutasi.index`.

### Routes

| URL | Nama | Perilaku |
|-----|------|----------|
| `GET /stok` | `stok.index` | Hub Obat & Batch |
| `GET /stok/obat` | `stok.obat.index` | Redirect → `stok.index?tab=obat` |
| `GET /stok/batch` | `stok.batch.index` | Redirect → `stok.index?tab=batch` |
| `GET /stok/mutasi` | `stok.mutasi.index` | Halaman Mutasi (standalone) |
| `GET/POST /stok/batch/{stokBatch}/koreksi` | `stok.batch.koreksi` (+ `.store`) | Form koreksi |

Controller: `StokController` (hub), `MutasiStokController` (mutasi), `StokBatchObatController` (koreksi).

### Filter mutasi

- Dropdown jenis memakai enum DB: `Pembelian`, `Penjualan`, `Koreksi`, `Retur` (bukan `masuk`/`keluar`).
- Rentang tanggal `tanggal_mulai` / `tanggal_selesai`; **default 30 hari terakhir** (hari ini − 29 s/d hari ini).
- Filter cabang sama pola hub.

### File view

- `resources/views/stok/index.blade.php` — hub Obat & Batch
- `resources/views/stok/mutasi.blade.php` — Mutasi standalone
- `resources/views/stok/_tab_obat.blade.php`
- `resources/views/stok/_tab_batch.blade.php`
- `resources/views/stok/_tab_mutasi.blade.php` — partial tabel (dipakai halaman mutasi)
- `resources/views/stok/koreksi.blade.php`

---

## 2. Pengiriman stok antar cabang (backlog — belum diimplementasi)

### Konteks lapangan

Cabang (mis. Siaga 24 → Siaga 25) saling mengirim stok jika cabang tujuan kehabisan. Saat ini dicatat di Excel bulanan.

Referensi Excel: `D:\projects\_apotek-siaga\4. PENGIRIMAN KE SIAGA 25.xlsx`  
Kolom tipikal: tanggal, kode barang, nama produk, qty, satuan, modal, jual di cabang asal, total modal. **Tanpa** nomor batch / expired.

Di lapangan admin sering belum mengisi batch/expired di DPB dan belum memakai FEFO di penjualan; migrasi Excel mengisi batch/expired otomatis. Di aplikasi, transfer **tetap wajib per batch** agar FEFO dan harga modal konsisten.

### Keputusan desain (untuk implementasi nanti)

1. **Alur 2 langkah:** Admin cabang asal buat **Pengiriman** (status `Dikirim`, stok asal turun) → Admin cabang tujuan konfirmasi **Penerimaan** (status `Diterima`, stok tujuan naik). Status lain: `Batal`.
2. Detail wajib: obat + **batch asal** + qty. Di tujuan: merge/create batch dengan identitas sama (`cabang` + `obat` + `nomor_batch` + `tanggal_expired`) dan salin `harga_beli` / `harga_modal`.
3. Mutasi baru (perlu migrasi enum `jenis_mutasi`): `Transfer Keluar` / `Transfer Masuk`.
4. UI: aktifkan item sidebar **Transfer Stok** (ganti placeholder Soon) → route `/stok/transfer` (atau setara).
5. Branch: `feat/stok-pengiriman-cabang` dari `main` setelah hub merge.

Detail backlog: [`pending-work.md`](pending-work.md) (item pengiriman antar cabang).  
Aturan singkat: [`business-rules.md`](business-rules.md) bagian Stok → Pengiriman antar cabang.

### Di luar scope hub PR

Jangan implement tabel/form/service pengiriman di branch `feat/stok-ui-hub` (hanya placeholder sidebar).
