
Nama : Apps Kasir (v0.1.0)
Jenis : Aplikasi kasir / Point of Sale (POS) desktop untuk retail & minimarket
Platform : Windows (installer .exe)
Teknologi : Electron, React 19, TypeScript, Tailwind CSS, Zustand,
SQLite (better-sqlite3), ESC/POS (node-thermal-printer)
Latar Belakang
Toko retail butuh kasir yang tetap jalan dalam kondisi apa pun: internet putus,
printer mati, atau listrik padam. Selain itu, toko perlu catatan transaksi
yang tidak bisa diubah diam-diam, supaya selisih kas bisa ditelusuri.
Prinsip Utama (tidak bisa ditawar)
1. Kasir tidak boleh pernah diblokir. Internet putus, printer mati, atau stok
tercatat habis tidak menghentikan transaksi. Masalahnya dicatat sebagai
anomali.
2. Transaksi tidak boleh hilang. Setiap transaksi ditulis ke event log dan
di-fsync sebelum struk dicetak.
3. Jalur utama tidak menyentuh jaringan. Scan, hitung, dan checkout semuanya
lokal (local-first, offline mutlak).
Arsitektur
– Event sourcing: event log append-only adalah sumber kebenaran. UPDATE/DELETE
pada event log diblokir oleh trigger database. Tabel lain hanya turunan yang
bisa dibangun ulang.
– Keamanan di main process: setiap channel IPC memeriksa izin pengguna sebelum
dijalankan. Harga dan poin selalu dihitung ulang di main process, tidak
pernah dipercaya dari tampilan.
– Uang selalu dalam integer rupiah. Tidak ada float, dan pembulatan terpusat
di satu tempat.
– Kata sandi memakai scrypt + timingSafeEqual, dan tidak pernah masuk event log.
Fitur yang Sudah Selesai
1. Penjualan / Kasir
– Input barang lewat scanner barcode (deteksi kecepatan ketik), klik kisi
produk, atau keyboard (F9 bayar, F4 member, Del hapus baris)
– Ubah jumlah dan beri diskon langsung di baris keranjang
– Tahan (parkir) keranjang saat pembeli belum siap bayar
– Dialog pembayaran dengan saran nominal tunai
– Cetak struk ke printer termal ESC/POS dan buka laci uang otomatis
– Palet perintah Ctrl+K untuk akses cepat semua fungsi
2. Pembatalan & Retur
– Pembatalan transaksi (hanya selama shift masih terbuka; transaksi tidak
pernah dihapus, hanya ditandai batal)
– Retur barang sebagai transaksi baru bernilai negatif, dengan harga
diambil dari struk asal
3. Produk & Stok
– CRUD produk, kategori, dan pemasok
– Penerimaan barang dari pemasok (satu dokumen berisi banyak baris, HPP
memakai harga beli terakhir)
– Penyesuaian stok dengan alasan wajib
– Riwayat pergerakan stok lengkap dengan saldo setelah tiap langkah
– Cetak label barcode (Code 39) untuk banyak produk sekaligus ke printer
Windows
4. Member & Poin
– Kartu member dikenali dari nomor HP atau scan barcode kartu
– Penyeragaman format nomor HP untuk mencegah kartu ganda
– Buku besar poin (mutasi_poin), saldo tidak pernah minus
– Poin otomatis ditarik kembali saat pembatalan atau retur
– Saldo poin tercetak di struk; program poin bisa dinyalakan atau dimatikan
5. Shift & Kas
– Buka/tutup shift kasir dengan rekonsiliasi kas fisik
– Nama kasir diambil dari sesi login, tidak bisa diketik bebas
6. Laporan & Riwayat
– Laporan harian dan laporan rentang tanggal, termasuk produk terlaris
– Riwayat transaksi dengan pencarian sampai ke isi struk, filter tanggal,
dan filter jenis
– Log aktivitas yang dibaca langsung dari event log
7. Pengguna & Hak Akses
– Setup akun pemilik saat instalasi pertama (tanpa akun bawaan admin/admin)
– Tiga peran bawaan (Pemilik, Supervisor, Kasir) plus peran kustom dengan
matriks izin
– Pengaman anti-terkunci: pemilik selalu punya akses penuh, dan pengelola
terakhir tidak bisa dinonaktifkan
– Sesi terkunci otomatis saat menganggur (bawaan 15 menit)
8. Sistem & Tampilan
– Backup database otomatis
– Migrasi database bertahap (7 migrasi)
– Pilihan printer dari daftar printer yang terpasang di Windows
– UI glassmorphism dengan tema terang & gelap
– Komponen sendiri (dropdown, pemilih tanggal, dialog konfirmasi, checkbox)
sebagai pengganti elemen bawaan browser
– Sidebar bisa diciutkan
Kualitas
– 247 uji otomatis dalam 38 suite: semuanya lulus (0 gagal)
– Cakupan uji: penjualan, pembatalan, retur, parkir, member, pemasok,
kategori, penerimaan, mutasi stok, laporan, pengguna, struk, barcode,
scanner, aturan uang, tanggal, dan pemulihan
– TypeScript strict di ketiga lapisan (main, preload, renderer)
Hasil Akhir
– Installer Windows: “Apps Kasir-Setup-0.1.0.exe”
– Aplikasi siap dipasang dan berjalan sepenuhnya offline di satu komputer kasir