Dexova POS — Kasir & Rekonsiliasi
Kasir multi-outlet dengan QRIS Midtrans, split payment, dan rekonsiliasi kas per shift.
- Role
- Architect & Full-Stack Developer
- Periode
- 2025 – sekarang
- Kategori
- Deep dive · POS
- Kode
- Repo privat
- Stack
- GoPostgreSQL + sqlcMidtransNext.js (dex-pos)Web Bluetooth (ESC/POS)
Context
POS Dexova dipakai dua persona: kasir bekerja di aplikasi kasir (dex-pos), pemilik/manajer mengelola produk, outlet, dan laporan dari dashboard admin (dex-fe). Desain utamanya: kasir harus bisa dipakai tanpa pelatihan panjang, sementara setiap rupiah tetap terlacak.
Alur transaksi
- Pencarian produk + scan barcode (html5-qrcode), dukungan varian dan add-on.
- Harga bertingkat per produk: retail, grosir, member.
- Hold & resume keranjang — kasir bisa melayani pelanggan berikutnya tanpa kehilangan transaksi yang menggantung.
- Pemilihan pelanggan untuk harga member dan riwayat.
- Katalog besar tetap mulus — daftar produk di-virtualisasi (TanStack Virtual), satu codebase untuk layout tablet split-panel dan HP slide-up cart.

Pembayaran
Semua metode pembayaran umum di retail Indonesia didukung dalam satu alur checkout:
- Tunai dengan hitung kembalian.
- QRIS Midtrans — statis (satu QR untuk semua transaksi) dan dinamis (QR per transaksi dengan nominal terkunci).
- Transfer bank dan EDC.
- Split payment — satu transaksi dibayar dengan kombinasi metode.
- Kode promo dan diskon dengan aturan dari dashboard admin.

Shift & rekonsiliasi kas
Bagian yang membedakan POS serius dari pencatat penjualan — pertanggungjawaban kas per shift:
- Buka shift dengan kas awal; aturan satu shift aktif per kasir mencegah transaksi tanpa penanggung jawab.
- Tutup shift dengan rekonsiliasi: sistem membandingkan kas seharusnya vs kas fisik yang dihitung kasir.
- Ringkasan shift dan rekonsiliasi kas harian tersedia sebagai laporan untuk pemilik.
Void & retur
- Void untuk transaksi yang belum selesai; retur sebagian atau penuh untuk yang sudah dibayar.
- Stok kembali otomatis saat retur — sinkronisasi stok real-time via WebSocket dengan modul Inventory, tanpa langkah manual.
- Akses void/retur diatur per role (kasir vs manajer) dengan pencabutan akses dari dashboard.
Perangkat & laporan
- Struk thermal via Web Bluetooth — driver ESC/POS ditulis sendiri (bukan library jadi), dengan reprint.
- Laporan untuk pemilik: produk terlaris, dead stock, margin, pajak, ringkasan shift — export PDF/Excel.
- Multi-outlet dengan penempatan staf per outlet.

Outcome
- Kasir non-teknis bisa langsung bekerja; alur transaksi dirancang untuk kecepatan di jam ramai.
- Kas bisa dipertanggungjawabkan per shift — selisih ketahuan hari itu juga.
- Penjualan, retur, dan stok konsisten karena POS dan Inventory berbagi satu sumber data.
Lessons learned
- 01
Rekonsiliasi bukan fitur laporan, tapi kontrak kepercayaan antara pemilik dan kasir — harus ada sejak transaksi pertama.
- 02
Pengembalian stok otomatis pada retur menghilangkan satu kelas penuh bug 'stok tidak cocok'.
- 03
Integrasi pembayaran (Midtrans) paling aman ditangani sebagai alur status yang eksplisit, bukan asumsi 'pasti berhasil'.
Lanjut baca
Butuh sistem seperti ini?
Saya menerima proyek pembangunan sistem bisnis — dari perencanaan arsitektur sampai aplikasi berjalan di production.