**Karyawan — Use Cases**

- **Aktor:** `User` (role = employee / karyawan).
- **Prasyarat:** Terdaftar dan terautentikasi (login).

- **Melihat Stok Produk:**
  - **Goal:** Menampilkan ketersediaan barang di `Stock` per `Branch`.
  - **Alur Utama:** 1) Buka menu Stok → 2) Pilih `Branch` → 3) Sistem menampilkan daftar `Product` dengan `quantity`.
  - **Alur Alternatif:** Filter/cari berdasarkan `Product` atau kategori; jika kosong tampilkan "Tidak ditemukan".
  - **Postcondition:** Karyawan melihat stok terkini.

- **Mencatat Penjualan:**
  - **Goal:** Mencatat transaksi di `Sale` dan mengurangi `Stock`.
  - **Alur Utama:** 1) Pilih `Product` → 2) Masukkan `quantity` → 3) Sistem validasi stok → 4) Simpan `Sale` → 5) Update `Stock`.
  - **Alur Alternatif:** Jika stok tidak cukup → tampilkan pesan dan batalkan atau arahkan ke proses pembelian (`Purchase`).
  - **Postcondition:** `Sale` tersimpan, `Stock` berkurang sesuai.

- **Mencatat Pembelian (opsional sesuai izin):**
  - **Goal:** Menyimpan transaksi di `Purchase` dan menambah `Stock`.
  - **Alur:** 1) Input supplier/item/quantity/total → 2) Simpan `Purchase` → 3) Update `Stock`.
  - **Postcondition:** `Purchase` tersimpan, stok bertambah.

- **Melihat Laporan Dasar:**
  - **Goal:** Melihat ringkasan penjualan harian dan status stok untuk tugas operasional.
  - **Alur:** Buka menu Laporan → pilih rentang waktu/branch → tampilkan ringkasan sederhana.


**Admin — Use Cases**

- **Aktor:** `User` (role = admin).
- **Prasyarat:** Terdaftar, terautentikasi, memiliki hak admin.

- **Kelola Produk (CRUD):**
  - **Goal:** Menambah, mengubah, dan menghapus data `Product`.
  - **Alur Utama:** 1) Buka menu Produk → 2) Tambah/Ubah/Hapus produk → 3) Sistem validasi dan simpan.
  - **Postcondition:** Data `Product` ter-update di database.

- **Kelola Stok & Penyesuaian:**
  - **Goal:** Koreksi `Stock` per `Branch` (penyesuaian fisik atau koreksi kesalahan).
  - **Alur:** 1) Pilih `Branch` → 2) Pilih `Product` → 3) Ubah `quantity` → 4) Simpan (simpan audit log jika perlu).
  - **Postcondition:** Stok tersinkronisasi.

- **Kelola Cabang (`Branch`):**
  - **Goal:** CRUD `Branch`.
  - **Alur:** 1) Buka menu Cabang → 2) Tambah/Ubah/Hapus → 3) Simpan.

- **Kelola Karyawan / User:**
  - **Goal:** Menambah/mengedit/menonaktifkan akun `User`, assign `role` dan `branch`.
  - **Alur:** 1) Akses manajemen pengguna → 2) Kelola hak akses/branch → 3) Simpan.

- **Kelola Biaya Operasional (`OperationalCost`):**
  - **Goal:** Input dan review biaya operasional per `Branch`.
  - **Alur:** 1) Input label/amount/date/branch → 2) Simpan → 3) Tampilkan rekap biaya.

- **Laporan & Rekonsiliasi:**
  - **Goal:** Menghasilkan laporan gabungan (`Purchase`, `Sale`, `OperationalCost`, `Stock`) per `Branch`/periode dan ekspor (CSV/PDF).
  - **Alur:** 1) Pilih tipe laporan dan rentang waktu → 2) Sistem kumpulkan data → 3) Tampilkan / ekspor.


**Catatan Integrasi dengan Model Anda**

- Relasi penting: `User` berasosiasi dengan `Branch`; `Product` terkait `Stock`, `Purchase`, dan `Sale`.
- Transaksi `Sale` dan `Purchase` wajib melakukan perubahan konsisten pada `Stock`.
- Admin sebaiknya memiliki audit log untuk operasi sensitif (penyesuaian stok, hapus produk, perubahan user).

Jika Anda ingin, saya dapat:
- Mengkonversi ini menjadi diagram Use Case (draw.io) dan menyimpan di folder `diagrams/`.
- Menambahkan contoh API endpoint atau skenario test untuk tiap use case.
