Sistem kasir yang buruk baru ketahuan di penghujung hari — saat uang fisik di laci tidak cocok dengan angka di sistem, dan tidak ada yang bisa menjelaskan selisihnya. Modul POS di Dexova saya bangun dengan satu obsesi: setiap rupiah harus bisa ditelusuri. Ini keputusan-keputusan yang membuatnya bisa diaudit.
Shift adalah unit akuntabilitas, bukan sekadar login
Kasir membuka shift dengan mencatat kas awal (modal laci). Setiap transaksi — tunai, kartu, QRIS — menempel ke shift itu. Saat tutup shift, sistem menghitung kas yang seharusnya ada, kasir menghitung fisik, dan selisihnya dicatat, bukan disembunyikan.
Tanpa batas shift, 'uang kurang Rp50.000' adalah misteri seharian penuh. Dengan shift, ia menjadi pertanyaan spesifik ke satu orang di satu rentang waktu — dan itu jauh lebih mudah dijawab.
Void dan retur bukan sekadar menghapus baris
Menghapus transaksi yang salah adalah cara tercepat menghancurkan audit trail. Di Dexova, void dan retur adalah kejadian baru yang tercatat — dengan alasan, operator, dan waktu — bukan penghapusan data lama.
Yang sering dilupakan: retur harus mengembalikan stok. Barang yang dikembalikan pelanggan naik lagi ke inventori secara otomatis. Kalau tidak, laporan penjualan dan stok akan pelan-pelan menyimpang sampai tidak ada yang percaya keduanya.
Pembayaran: split payment dan QRIS yang tidak menggantung
Pelanggan nyata membayar dengan cara campuran: sebagian tunai, sisanya QRIS. Sistem harus memperlakukan satu transaksi sebagai kumpulan pembayaran, bukan satu metode tunggal.
QRIS lewat Midtrans bersifat asynchronous: transaksi berstatus pending sampai webhook mengonfirmasi settlement. Kuncinya adalah memperlakukan webhook sebagai sumber kebenaran, memverifikasi tanda tangannya, dan idempoten — notifikasi yang sama boleh datang dua kali tanpa menggandakan pembayaran.
Ringkasan
POS yang bisa diaudit lahir dari tiga hal: shift sebagai unit akuntabilitas, void/retur sebagai kejadian (bukan penghapusan), dan pembayaran yang jujur soal status async-nya. Sisanya hanya menjumlahkan harga.