# Pending Work

Backlog fitur dan peningkatan yang **belum diimplementasi** atau **baru sebagian**. Gunakan sebagai panduan prioritas, bukan commitment timeline.

---

## Prioritas tinggi (dampak bisnis langsung)

### 1. Validasi margin VIP 11%

**Status:** Warning di halaman konfirmasi harga pasca-DPB — **selesai**. Belum di edit master obat / penjualan.

### 2. Perbandingan harga beli di form DPB

**Sumber:** Insight §2

- Tampilkan harga beli terakhir (dari `detail_pembelian` atau `stok_batch_obat`) saat input faktur baru
- Highlight jika harga naik

**Status:** Belum ada.

### 3. Histori perubahan harga jual

**Sumber:** Insight §2, V0.2a

- Tabel `histori_harga_jual_obat` — **sudah ada**, diisi otomatis via `HargaJualService::simpanHarga()`
- Yang belum: UI untuk melihat histori + kolom `user_id` (opsional)

**Status:** Backend selesai (V0.2a); UI histori belum ada.

### 4. Status "data batch belum lengkap"

**Sumber:** Insight §1

- Flag di `stok_batch_obat` atau `detail_pembelian` jika batch/expired kosong
- Laporan/filter batch tidak lengkap

**Status:** Field batch/expired saat ini **wajib** di validasi — kebalikan dari rencana opsional bertahap.

---

## Prioritas menengah (kelengkapan operasional)

### 5. Hubungkan rencana pembayaran → pembayaran tagihan

- `RencanaPembayaranPbf` saat ini CRUD standalone
- Perlu aksi "Eksekusi" yang memanggil `KasService::updateTagihanPembayaran()` (otomatis mengisi `pembayaran_tagihan_pbf`)
- Update status rencana ke `Dibayar`
- **Sudah ada:** daftar tagihan prioritas (JT + sisa) + histori `pembayaran_tagihan_pbf`

### 6. Flow retur barang

- Enum `Retur` ada di `jenis_mutasi` stok
- Belum ada controller, view, atau service method

### 6b. Pengiriman stok antar cabang

**Sumber:** praktik lapangan S24 ↔ S25; Excel `4. PENGIRIMAN KE SIAGA 25.xlsx` (catatan bulanan keluar tanpa batch/expired).  
**Brief:** [`BRIEF_Stok_UI_Hub.md`](BRIEF_Stok_UI_Hub.md) §2

- Alur **2 langkah:** Admin asal buat Pengiriman (`Dikirim`, stok asal turun) → Admin tujuan konfirmasi Penerimaan (`Diterima`, stok tujuan naik); status `Batal`
- Transfer **per batch** (nomor batch + expired + modal ikut); Excel lapangan tanpa batch hanya referensi
- Mutasi baru: `Transfer Keluar` / `Transfer Masuk` (perlu migrasi enum)
- UI: aktifkan item sidebar **Transfer Stok** (saat ini placeholder Soon di sidebar)
- Branch nanti: `feat/stok-pengiriman-cabang`

**Status:** Belum ada. Sidebar sudah menyiapkan slot Transfer (Soon). Hub Obat & Batch + Mutasi terpisah.

### 7. Edit / void transaksi

- DPB: edit/hapus terbatas sudah ada (blokir jika tagihan dibayar / stok terpakai)
- Penjualan: **edit + hapus** sudah ada (rollback stok via `detail_penjualan_batch`, kompensasi kas `catatKeluar`); index + show/edit/hapus di-scope cabang (admin terkunci; owner filter)

### 8. Pemilihan batch manual saat penjualan

- Saat ini hanya FEFO otomatis
- Beberapa apotek perlu override batch tertentu

### 9. Import Excel per modul

**Sumber:** `Dokumentasi_Awal` §11

Urutan disarankan:
1. Master obat/harga — **harga + stok awal:** `python scripts/generate-migrasi-harga.py` lalu `php artisan migrasi:harga-obat` (sumber `docs/migrasi/harga_obat.xlsx`)
2. DPB — belum (sengaja ditunda; pakai stok awal untuk simulasi penjualan)
3. Tagihan supplier
4. Penjualan & cash flow historis — belum

### 10. Multi-user & role

- Role cabang minimal (`owner` / `admin_cabang`) + switch cabang aktif — **selesai** (lihat UX konteks cabang)
- Policies per modul (kasir vs admin, batasi menu) — belum
- Out of scope V0 penuh; dibutuhkan untuk produksi

---

## Prioritas rendah (nice to have V1+)

| # | Item | Catatan |
|---|------|---------|
| 11 | Barcode scanner | Out of scope V0 |
| 12 | Printer thermal / struk | Out of scope V0 |
| 13 | BPJS integration | Out of scope V0 |
| 14 | Resep dokter detail | Out of scope V0 |
| 15 | API eksternal | Out of scope V0 |
| 16 | Akuntansi lengkap (jurnal) | Out of scope V0 |
| 17 | Password reset / "Lupa password" | Tombol ada di UI, non-fungsional |
| 18 | "Masuk sebagai anggota" | Tombol placeholder di login |
| 19 | CRUD dictionary obat di UI | Saat ini hanya via seeder |
| 20 | Export laporan PDF/Excel | Laporan hanya tampilan web |
| 21 | Notifikasi email/WhatsApp stok menipis | Belum ada |
| 22 | Dashboard filter per cabang | **Selesai** — dashboard di-scope ke cabang aktif; kartu BCA global + Kas Tunai cabang aktif |

---

## Testing backlog

| Area | Test yang dibutuhkan |
|------|---------------------|
| `PenjualanService` | FEFO multi-batch, stok tidak cukup |
| `StokService` | Unit tests FEFO, koreksi, merge batch |
| `KasService` | Saldo per sumber, jejak `cabang_id`, pembayaran tagihan |
| `TagihanPbfController` | Pembayaran parsial → status Sebagian/Lunas |
| `RencanaPembayaranController` | CRUD |
| `LaporanController` | Filter tanggal |
| Dictionary migration | Refactor FK |

**Cakupan saat ini:** ~6 test bermakna (auth smoke + 1 pembelian flow).

---

## Infrastruktur & DevOps

| Item | Status |
|------|--------|
| CI/CD pipeline | Belum ada |
| Staging environment | Belum ada |
| Production deployment guide | Hanya README basic |
| Queue workers untuk async | Queue ada di schema, tidak dipakai |
| Backup strategy | Belum didokumentasikan |
| Cloudflare Tunnel config | Disebut di README, tidak ada file config |

---

## Checklist dari Insight (belum centang)

Dari `docs/Insight_Proses_Bisnis_Apotek_Siaga.md`:

- [x] Form DPB: batch/expired wajib
- [x] Harga beli + modal per detail/batch (PPN 11%)
- [x] Konfirmasi harga pasca-DPB + hitung satuan/persen backend
- [x] `HargaModalService` agregat multi-PBF
- [x] Warning margin VIP 11% di konfirmasi harga
- [x] Harga jual OTC/REG/VIP di `harga_jual_obat`
- [x] Riwayat harga jual — backend (`histori_harga_jual_obat`)
- [ ] Form DPB: perbandingan harga beli lama vs baru
- [ ] UI histori harga jual

---

## Fase pengerjaan dari dokumentasi awal

| Fase | Status |
|------|--------|
| Fase 0 — Setup & dokumentasi | ✅ Selesai |
| Fase 1 — Master data | ✅ Selesai |
| Fase 2 — Pembelian/DPB | ✅ Selesai |
| Fase 3 — Tagihan & rencana bayar | ⚠️ Rencana belum terhubung ke pembayaran |
| Fase 4 — Penjualan & stok keluar | ✅ Selesai (edit/hapus ada; retur belum; hub satu halaman index) |
| Fase 5 — Cash flow & laporan | ✅ Selesai (laporan web only) |

---

## Catatan untuk agent

Saat mengambil task dari backlog:

1. Baca `business-rules.md` dan `Insight_Proses_Bisnis_Apotek_Siaga.md` terlebih dahulu.
2. Jangan implement fitur out-of-scope V0 kecuali diminta eksplisit.
3. Tambahkan test Feature untuk setiap flow transaksi baru.
4. Pertahankan kompatibilitas migration MySQL + SQLite.
