# PRODUCT REQUIREMENTS DOCUMENT (PRD) - FASE 1

**Project Name:** Multi-Branch ERP & POS System
**Tech Stack:** Laravel (PHP), Relational Database (MySQL/MariaDB), Web-based UI (Blade dengan Alpine.js / Tailwind CSS bawaan Breeze).
**Development Workflow:** Local IDE development, Git-based version control, remote deployment.

## 1. Project Overview & Scope
Pengembangan sistem ERP dan POS tersentralisasi dengan arsitektur *Single Database - Multi-Branch*. Fase 1 akan berfokus pada 3 unit bisnis operasional: **Toko ATK, Percetakan, dan Snack**. Sistem akan mengelola aliran barang masuk, manajemen inventaris yang fleksibel, proses Point of Sale (POS) secara manual, serta pencatatan beban operasional (Gaji Karyawan) untuk menghasilkan laporan performa per cabang. 

## 2. User Roles & Access Control (RBAC)
Sistem wajib mengimplementasikan autentikasi dan *middleware* otorisasi untuk 4 level pengguna (tambahkan kolom `role` pada tabel `users`):
* **Owner 1 (Main Owner):** Super Admin. Akses penuh (CRUD) lintas cabang. Memiliki wewenang mengedit data master dan melakukan koreksi (dengan *Audit Trail*).
* **Owner 2 (Partial Owner):** Akses *Read-Only*. Hanya dapat melihat *Dashboard* (laporan penjualan, stok, laba/rugi, pengeluaran) spesifik pada `branch_id` yang di-*assign* kepadanya.
* **Admin Penginputan (Back-Office):** Akses CRUD untuk modul Inventaris dan Operasional (Input *Supplier*, Pembelian Stok/Bahan Baku, Pencatatan Gaji). Dibatasi secara ketat oleh `branch_id`.
* **Kasir (Front-Office):** Akses antarmuka POS untuk transaksi (*Create*) dan cek sisa stok (*Read*). Tidak memiliki akses ke data HPP (Harga Modal/Beli). Dibatasi oleh `branch_id`.

## 3. UI/UX Architecture & Navigation
Tampilan harus bersih, profesional, dengan hierarki informasi yang kuat dan kontras yang tinggi.
* **Layout Utama:** Menggunakan **Sidebar Kiri (Fixed)** sebagai navigasi utama dan *Branch Context Switcher*.
* **Context Logic:** Saat user mengklik cabang di sidebar (misal: "Percetakan"), seluruh *main content* di area kanan akan terfilter dan menyesuaikan form khusus untuk cabang tersebut secara dinamis.
* **Top Navbar:** Digunakan untuk menu modul internal cabang yang sedang aktif (Dashboard, Input Barang, Transaksi, Pengeluaran, Laporan).

## 4. Point of Sale (POS) Specific Requirements
Karena belum menggunakan *hardware barcode scanner*, UI Kasir harus dioptimalkan untuk kecepatan input manual:
* **Split-Screen Layout:** Area Kiri (70%) untuk Pencarian/Daftar Barang, Area Kanan (30%) untuk Keranjang Belanja (*Cart*) dan Total Tagihan yang didesain menyerupai struk fisik.
* **Omni-Search Bar:** Kolom input pencarian berukuran besar di bagian atas dengan fitur *Live Autocomplete* (AJAX/Fetch) berdasarkan `nama_barang`.
* **Quick Access Grid (Khusus Snack):** Tampilkan daftar produk tanpa kode (jajanan) dalam bentuk *Card/Grid* tombol besar agar kasir dapat mengklik item langsung tanpa mengetik.
* **Keyboard Navigation:** Terapkan *event listener* sederhana untuk *shortcut* (misal: tombol 'Enter' untuk fokus ke kuantitas, tombol khusus untuk eksekusi 'Bayar').

## 5. Branch-Specific Business Logic

### A. Toko ATK (Retail)
* **Input Data:** Nama *Supplier*, Harga Beli, Barang Jadi.
* **Pricing Logic:** Terapkan sistem *Tiered Pricing* (Harga Eceran vs Harga Grosir) berdasarkan kuantitas yang dibeli di kasir.
* **Pengeluaran:** Pencatatan Gaji Karyawan ATK.

### B. Percetakan (Micro-Manufacturing/Jasa)
* **Input Data:** Pembelian Bahan Baku (kertas, tinta, dll) dan Perlengkapan Pabrik/Toko.
* **Pricing Logic:** Penentuan Harga Jual Barang/Jasa cetak. Stok Bahan Baku akan terpotong saat pesanan cetak diproses (konsep *Bill of Materials* sederhana).
* **Pengeluaran:** Pencatatan Gaji Karyawan Percetakan.

### C. Snack (Retail Cepat)
* **Input Data:** Nama *Supplier*, Barang Jadi (Jajanan Pasar).
* **Pricing Logic:** Penentuan Harga Jual flat/standar.
* **Pengeluaran:** Pencatatan Gaji Karyawan penjaga Snack.

## 6. Database Architecture Guidelines (CRITICAL INSTRUCTIONS FOR AI)
Gunakan pendekatan **Flexible Schema**. Buat file *Migration* dan *Model* Eloquent berikut beserta relasinya (jangan lupa tentukan `$fillable`):
* **`users`:** Update tabel bawaan Breeze. Tambahkan kolom `role` (string) dan foreign key `branch_id` (nullable, cascade on delete).
* **`branches`:** Master data cabang (id, name, slug).
* **`suppliers`:** Master data pemasok (id, name, contact, address).
* **`products`:** Tabel inventaris sentral.
    * **Kolom Wajib:** `id`, `branch_id` (constrained), `supplier_id` (nullable, constrained), `nama_barang`, `kode_barang` (nullable), `stok` (integer), `harga_beli` (decimal/integer), `harga_jual_standar` (decimal/integer).
    * **Kolom Fleksibel (Wajib Ada):** `$table->json('meta_data')->nullable();` -> Gunakan ini untuk menampung data dinamis per cabang (contoh: harga grosir, varian).
* **`operational_expenses`:** Tabel beban operasional. (Kolom: `id`, `branch_id`, `jenis_pengeluaran` (string), `nominal`, `tanggal` (date), `keterangan`).
* **`transactions`:** Tabel induk transaksi (id, branch_id, user_id/kasir, total_amount, transaction_date).
* **`transaction_details`:** Item transaksi (id, transaction_id, product_id, quantity, unit_price, subtotal).

## 7. Execution Plan (Backend-First Strategy)
AI Agent diinstruksikan untuk mengeksekusi proyek dengan urutan *Vertical Slicing*. 
**Saat ini, JALANKAN TAHAP 1 SAJA dan tunggu instruksi User selanjutnya:**
1.  **Tahap 1:** Buat seluruh file *Migrations* tambahan, *Models*, dan definisikan relasi Eloquent (`hasMany`, `belongsTo`) berdasarkan pedoman *database* di Poin 6. **Jangan buat antarmuka (UI) Controller/Blade apa pun di tahap ini.**
2.  **Tahap 2:** Buat *Controller* dan UI (Blade) untuk Modul Admin Input (Penerimaan Barang & Pengeluaran Gaji).
3.  **Tahap 3:** Buat *Controller* dan UI POS Kasir manual yang cepat dan responsif.
4.  **Tahap 4:** Buat *Dashboard* pelaporan untuk *Main Owner* dan *Partial Owner*.