# PRD - Aplikasi POS Penjualan Kepiting

## Project Overview

Buat aplikasi POS (Point of Sale) sederhana untuk usaha penjualan kepiting yang memiliki fitur:

* Penjualan produk satuan
* Penjualan paket
* Manajemen stok
* Pembelian stok manual
* Laporan penjualan
* Laporan laba rugi
* Multi user dengan hak akses

Target aplikasi:

* Desktop/Web Application
* Mudah digunakan oleh kasir
* Cocok untuk restoran atau penjual kepiting

---

# User Roles

## Owner

Dapat mengakses seluruh fitur.

## Admin

Dapat mengelola:

* Barang
* Paket
* Stok
* Pembelian

## Kasir

Dapat mengakses:

* POS
* Riwayat transaksi

---

# Modul 1 - Dashboard

Tampilkan:

* Total penjualan hari ini
* Total transaksi hari ini
* Produk terlaris
* Total stok
* Estimasi laba hari ini

---

# Modul 2 - Master Barang

Field:

| Field         | Tipe            |
| ------------- | --------------- |
| ID            | Auto            |
| Nama Barang   | Text            |
| Kategori      | Text            |
| Satuan        | Kg/Pcs          |
| Harga Pokok   | Number          |
| Harga Jual    | Number          |
| Stok Saat Ini | Number          |
| Status        | Active/Inactive |

Contoh Barang:

* Kepiting Jumbo
* Kepiting Sedang
* Kepiting Kecil
* Nasi
* Es Teh
* Saus

---

# Modul 3 - Master Paket

Admin dapat membuat paket.

Contoh:

## Paket A

Isi:

* Kepiting Jumbo 1 Kg
* Nasi 2 Porsi
* Es Teh 2 Gelas

Harga:
350000

## Paket B

Isi:

* Kepiting Sedang 2 Kg
* Nasi 4 Porsi

Harga:
500000

Saat paket dijual:

* Stok seluruh item otomatis berkurang

---

# Modul 4 - Pembelian Stok

Tujuan:

Menambah stok barang.

Field:

| Field   | Tipe     |
| ------- | -------- |
| Tanggal | Date     |
| Barang  | Dropdown |
| Qty     | Number   |
| Catatan | Text     |

Contoh:

Barang:
Kepiting Jumbo

Qty:
20

Saat disimpan:

* Stok barang bertambah otomatis

Catatan:

Tidak perlu mencatat harga beli.
User hanya memasukkan nama barang dan jumlah.

---

# Modul 5 - POS Penjualan

Kasir dapat:

* Cari barang
* Cari paket
* Tambah ke keranjang
* Ubah qty
* Hapus item
* Simpan transaksi

Metode pembayaran:

* Tunai
* Transfer
* QRIS

Output:

* Nomor transaksi otomatis
* Cetak struk

---

# Modul 6 - Manajemen Stok

Fitur:

## Stok Masuk

Dari pembelian.

## Stok Keluar

Dari penjualan.

## Penyesuaian Stok

Admin dapat:

* Menambah stok
* Mengurangi stok

Dengan alasan:

* Rusak
* Hilang
* Koreksi

---

# Modul 7 - Riwayat Stok

Menampilkan:

| Tanggal | Barang | Jenis | Qty |
| ------- | ------ | ----- | --- |

Jenis:

* Pembelian
* Penjualan
* Adjustment

---

# Modul 8 - Laporan Penjualan

Filter:

* Harian
* Bulanan
* Tahunan

Tampilkan:

* Jumlah transaksi
* Total omzet
* Total item terjual

---

# Modul 9 - Laporan Laba Rugi

Perhitungan:

Laba = Penjualan - Harga Pokok

Contoh:

Penjualan:
100.000.000

HPP:
65.000.000

Laba:
35.000.000

Filter:

* Harian
* Bulanan
* Tahunan

---

# Database Tables

## users

* id
* name
* username
* password
* role

## products

* id
* name
* category
* unit
* cost_price
* selling_price
* stock

## packages

* id
* name
* selling_price

## package_items

* id
* package_id
* product_id
* qty

## purchases

* id
* purchase_date
* notes

## purchase_items

* id
* purchase_id
* product_id
* qty

## sales

* id
* invoice_no
* sales_date
* payment_method
* total_amount

## sales_items

* id
* sales_id
* product_id
* qty
* selling_price

## stock_movements

* id
* product_id
* movement_type
* qty
* created_at

---

# Technical Requirements

Backend:

* Node.js
* Express.js

Frontend:

* React
* TailwindCSS

Database:

* PostgreSQL

Authentication:

* JWT

Architecture:

* REST API

---

# UI Requirements

Menu Sidebar:

* Dashboard
* POS
* Barang
* Paket
* Pembelian Stok
* Manajemen Stok
* Riwayat Stok
* Laporan Penjualan
* Laporan Laba Rugi
* User Management

Desain:

* Modern
* Responsive
* Simple
* Fast loading

---

# Success Criteria

* Kasir dapat membuat transaksi kurang dari 30 detik.
* Stok otomatis berkurang saat penjualan.
* Stok otomatis bertambah saat pembelian.
* Laporan laba rugi dapat dihitung otomatis.
* Semua transaksi tersimpan di database PostgreSQL.
