Cara Membuat Sistem Kasir Sederhana dengan Laravel 13 dan MySQL
Diterbitkan 15 September 2026
Membuat sistem kasir dengan Laravel merupakan project yang cocok untuk mempelajari pengembangan aplikasi web secara lebih lengkap.
Dalam satu project, kita akan membahas:
login
hak akses
database
master data
produk
penjualan
pembelian
stok
kartu stok
dashboard
laporan
nota
testing
deployment
Seri ini menggunakan Laravel 13 dan MySQL dan dibangun secara bertahap dari project kosong sampai siap digunakan pada server production.
Setiap tahap melanjutkan hasil dari tahap sebelumnya, sehingga tutorial sebaiknya diikuti sesuai urutan.
Gambaran Project
Aplikasi yang dibuat merupakan sistem kasir atau Point of Sale (POS) sederhana berbasis web.
Terdapat dua role utama:
Administrator
Kasir
Administrator mengelola data dan operasional sistem.
Kasir berfokus pada transaksi penjualan.
Alur utama sistem:
Admin menyiapkan master data
↓
Admin membuat produk
↓
Barang dibeli dari supplier
↓
Stok bertambah
↓
Kasir melakukan penjualan
↓
Stok berkurang
↓
Pergerakan stok tercatat
↓
Nota dapat dicetak
↓
Dashboard dan laporan diperbarui
Jika jumlah stok fisik berbeda dengan stok sistem, administrator dapat melakukan penyesuaian stok sehingga perubahan tetap tercatat.
Teknologi yang Digunakan
Project menggunakan:
Laravel 13
PHP 8.3 atau versi yang kompatibel
MySQL / MariaDB
Bootstrap 5
JavaScript
Blade Template
Eloquent ORM
Tool development:
Composer
Browser
Editor kode
Terminal
Node.js dan npm tidak wajib untuk versi dasar tutorial ini karena tampilan menggunakan Bootstrap CDN dan JavaScript langsung.
Fitur Utama Sistem Kasir
Setelah seluruh tahap selesai, aplikasi mempunyai fitur:
Autentikasi
Login
Logout
Role admin
Role cashier
User aktif/nonaktif
Middleware role
Master Data
Kategori
Satuan
Pelanggan
Supplier
Setiap master data mempunyai:
Tambah
Edit
Cari
Hapus
Validasi
Pagination
Produk
Produk mempunyai:
SKU
Nama
Kategori
Satuan
Harga beli
Harga jual
Stok
Stok minimum
Status aktif
Produk juga mendukung:
pencarian
filter
status aktif/nonaktif
indikator stok menipis
proteksi delete
Penjualan
Fitur transaksi penjualan:
multi item
keranjang
quantity
pelanggan
diskon
pembayaran
kembalian
Saat transaksi disimpan, server akan:
memeriksa produk
memeriksa stok
mengambil harga dari database
menghitung subtotal
menghitung grand total
mengurangi stok
membuat detail transaksi
mencatat stock movement
Pembelian
Pembelian mendukung:
supplier
multi item
quantity
harga beli
tanggal transaksi
grand total
Ketika transaksi selesai:
stok bertambah
harga beli terbaru diperbarui
purchase detail dibuat
stock movement dibuat
Pembatalan Transaksi
Transaksi tidak langsung dihapus.
Jika penjualan dibatalkan:
status menjadi cancelled
stok dikembalikan
movement pembatalan dibuat
Jika pembelian dibatalkan:
status menjadi cancelled
stok dikurangi kembali
movement pembatalan dibuat
Kartu Stok
Jenis movement yang digunakan:
initial
purchase
purchase_cancelled
sale
sale_cancelled
adjustment
Kartu stok menampilkan:
tanggal
tipe
referensi
stok masuk
stok keluar
saldo
catatan
Penyesuaian Stok
Administrator dapat memasukkan jumlah stok fisik.
Contoh:
Stok sistem = 20
Stok fisik = 18
Sistem otomatis mencatat selisih:
-2
Dashboard
Dashboard menampilkan:
omzet hari ini
jumlah transaksi
produk aktif
produk habis
stok menipis
produk terlaris
transaksi terbaru
Laporan
Laporan penjualan mendukung filter:
tanggal awal
tanggal akhir
status
kasir
invoice
Ringkasan:
omzet
diskon
jumlah transaksi
Nota Kasir
Nota mendukung:
58mm
80mm
Isi nota:
data toko
invoice
tanggal
kasir
pelanggan
produk
quantity
harga
subtotal
diskon
grand total
pembayaran
kembalian
footer
Testing
Project diuji melalui:
feature test
manual test
Bagian penting yang diuji:
role
produk
penjualan
stok
harga server-side
pembayaran
pembatalan
pembelian
laporan
Deployment
Tahap akhir membahas:
production .env
database production
APP_DEBUG=false
upload project
document root public
migration
cache
HTTPS
backup
go-live checklist
Struktur Database
Tabel utama:
| Tabel | Fungsi |
|---|---|
users |
Akun administrator dan kasir |
categories |
Kategori produk |
units |
Satuan produk |
products |
Produk, harga, stok, status |
customers |
Data pelanggan |
suppliers |
Data supplier |
purchases |
Header pembelian |
purchase_details |
Detail pembelian |
sales |
Header penjualan |
sale_details |
Detail penjualan |
stock_movements |
Histori stok |
settings |
Data toko dan nota |
Relasi utama:
Category → Product ← Unit
Customer → Sale → SaleDetail → Product
Supplier → Purchase → PurchaseDetail → Product
Product → StockMovement
Prinsip Pengelolaan Stok
Saldo stok saat ini disimpan pada:
products.stock
Histori perubahan disimpan pada:
stock_movements
Stok tidak diedit langsung dari CRUD produk.
Perubahan stok terjadi melalui:
stok awal
pembelian
penjualan
pembatalan transaksi
adjustment
Secara ideal:
products.stock
=
SUM(quantity_in)
-
SUM(quantity_out)
Prinsip Keamanan Transaksi
Aplikasi transaksi tidak boleh mempercayai nilai dari browser begitu saja.
Harga penjualan dibaca ulang dari database.
Stok juga diperiksa ulang ketika transaksi disimpan.
Proses penjualan dan pembelian menggunakan:
DB::transaction()
dan produk dikunci menggunakan:
lockForUpdate()
Tujuannya agar transaksi tidak tersimpan setengah dan stok tetap konsisten ketika ada lebih dari satu transaksi.
Role Pengguna
Role:
admin
cashier
Administrator
Dapat mengelola:
master data
produk
pembelian
stok
adjustment
laporan
pembatalan transaksi
Kasir
Fokus pada:
dashboard
penjualan
detail transaksi
nota
Pembatasan tidak hanya pada menu, tetapi juga pada route melalui middleware.
Struktur Seri Tutorial
Seri ini terdiri dari 12 tahap.
01. Persiapan Proyek dan Login
Membuat project Laravel, koneksi database, login, logout, role, middleware, layout, serta akun admin dan kasir.
Slug:
persiapan-dan-login
02. Struktur Database
Membuat migration untuk seluruh tabel utama sistem kasir.
Slug:
struktur-database
03. Model, Relasi, dan Seeder
Membuat Eloquent model, relationship, casts, data awal, akun demo, produk contoh, dan settings toko.
Slug:
model-relasi-dan-seeder
04. CRUD Master Data
Membuat CRUD kategori, satuan, pelanggan, dan supplier.
Slug:
crud-master-data
05. CRUD Produk
Membuat CRUD produk dengan SKU, kategori, satuan, harga, minimum stok, status, pencarian, dan filter.
Slug:
crud-produk
06. Transaksi Penjualan
Membuat halaman POS, keranjang, pembayaran, pengurangan stok, stock movement, dan pembatalan penjualan.
Slug:
transaksi-penjualan
07. Pembelian dan Stok
Membuat transaksi pembelian, penambahan stok, update harga beli, dan pembatalan pembelian.
Slug:
pembelian-dan-stok
08. Kartu Stok dan Penyesuaian Stok
Membuat histori stok, saldo berjalan, filter movement, dan adjustment stok.
Slug:
kartu-stok-dan-penyesuaian-stok
09. Dashboard dan Laporan
Membuat dashboard operasional serta laporan penjualan berdasarkan periode, status, dan kasir.
Slug lama tetap:
dashboard-laporan-dan-nota
10. Cetak Nota Kasir
Membuat nota thermal 58mm dan 80mm yang siap dicetak dari browser.
Slug:
cetak-nota-kasir
11. Pengujian Sistem Kasir
Membuat feature test dan checklist pengujian manual untuk fitur penting.
Slug:
pengujian-sistem-kasir
12. Deploy Sistem Kasir
Mempersiapkan aplikasi untuk server production, database production, migration, HTTPS, cache, dan backup.
Slug lama tetap:
pengujian-dan-deploy
Mengapa Tutorial Dibagi Menjadi 12 Tahap?
Versi awal tutorial lebih pendek, tetapi beberapa topik terlalu besar jika digabung.
Topik yang dipisahkan:
CRUD produk
kartu stok
nota
testing
Dengan struktur 12 tahap:
- setiap artikel lebih fokus;
- pembaca lebih mudah mengikuti kode;
- topik teknis tidak terlalu padat;
- URL lama tetap dipertahankan;
- artikel baru dapat menargetkan intent yang lebih spesifik.
Urutan Belajar
Ikuti secara berurutan:
01
↓
02
↓
03
↓
04
↓
05
↓
06
↓
07
↓
08
↓
09
↓
10
↓
11
↓
12
Beberapa tahap menggunakan kode dan database dari artikel sebelumnya.
Akun Development
Seeder menggunakan akun tutorial:
Admin
admin@example.com
admin12345
dan:
Kasir
kasir@example.com
kasir12345
Akun tersebut hanya untuk development.
Untuk production gunakan akun dan password baru.
Hasil Akhir Project
Setelah seluruh tahap selesai, aplikasi mempunyai modul:
Authentication
Role
Master Data
Product
Sales
Purchases
Inventory
Stock Card
Adjustment
Dashboard
Reports
Receipt
Testing
Deployment
Dengan demikian pembaca tidak hanya mendapatkan contoh CRUD, tetapi memahami alur aplikasi transaksi dari awal sampai production.
Pengembangan Selanjutnya
Sistem masih dapat dikembangkan dengan:
barcode scanner
QRIS
payment method
shift kasir
closing kasir
retur
multi cabang
multi gudang
member
poin pelanggan
hutang supplier
piutang pelanggan
export Excel
PDF
API
mobile app
Fitur tersebut berada di luar scope seri dasar ini.
Source Code Siap Digunakan
Semua proses pembuatan dapat dipelajari melalui seri ini.
Jika pembaca ingin menggunakan project tanpa mengikuti seluruh tahap, source code lengkap dapat disediakan sebagai produk digital.
Contoh isi paket:
project Laravel
migration
seeder
database
akun demo
panduan instalasi
source code modul
Jika produk sudah tersedia:
Source Code Sistem Kasir Laravel
Jika belum tersedia, shortcode produk dapat dihilangkan.
Tips Mengikuti Tutorial
Agar proses belajar lebih mudah:
- Ikuti tahap sesuai urutan.
- Jalankan aplikasi setelah perubahan penting.
- Jangan mengubah banyak bagian sekaligus ketika terjadi error.
- Gunakan nama tabel dan field yang sama dengan tutorial.
- Lakukan backup sebelum perubahan besar.
- Jalankan test sebelum deployment.
Ringkasan
Pada seri ini kita membangun Sistem Kasir Laravel 13 dan MySQL mulai dari project kosong sampai siap digunakan.
Fitur utama:
login
role
master data
produk
penjualan
pembelian
stok
kartu stok
adjustment
dashboard
laporan
nota
testing
deployment
Bagian transaksi menggunakan validasi server, database transaction, dan row locking agar stok dan total transaksi lebih konsisten.
Seri dibagi menjadi 12 tahap agar setiap bagian lebih fokus dan lebih mudah diikuti.
Mulailah dari tutorial pertama, kemudian lanjutkan sesuai urutan yang tersedia pada halaman seri ini.





Komentar
Tulis Komentar