Oksa Satya.
Deep dive · POS

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.
Layar kasir Dexova POS: grid produk di kiri, keranjang di kanan
dex-pos — layar transaksi kasir (data demo)

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.
Jendela pembayaran Dexova POS dengan total, pajak, diskon, dan kode promo
dex-pos — jendela pembayaran: multi-metode + split (data demo)

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.
Buka shiftkas awalTransaksibarcode · varian · holdPembayarantunai · QRIS · splitTutup shifthitung kas fisikRekonsiliasisistem vs fisikvoid / retur → stok kembali otomatis (sinkron modul Inventory)
Diagram alur — rekonstruksi, bukan tangkapan layar aplikasi kasir.

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.
Halaman laporan POS di dashboard Dexova
dex-fe — laporan penjualan untuk pemilik (data demo)

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

  1. 01

    Rekonsiliasi bukan fitur laporan, tapi kontrak kepercayaan antara pemilik dan kasir — harus ada sejak transaksi pertama.

  2. 02

    Pengembalian stok otomatis pada retur menghilangkan satu kelas penuh bug 'stok tidak cocok'.

  3. 03

    Integrasi pembayaran (Midtrans) paling aman ditangani sebagai alur status yang eksplisit, bukan asumsi 'pasti berhasil'.

Butuh sistem seperti ini?

Saya menerima proyek pembangunan sistem bisnis — dari perencanaan arsitektur sampai aplikasi berjalan di production.