Oksa Satya.

8 Juli 2026 · 8 menit baca

Membangun Sistem Kasir (POS) yang Bisa Diaudit: Shift, Rekonsiliasi Kas, dan QRIS

POSKasirRekonsiliasiMidtrans

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.

Sedang membangun sistem serupa?

Saya menerima proyek dan konsultasi teknis seputar sistem bisnis.