Point Of Sale
Point Of Sale (POS) adalah layar kerja utama kasir. Dari sini kasir mengelola seluruh siklus transaksi: memilih produk, mengelola meja, menerima pembayaran, mencetak struk dan order dapur, hingga menutup shift. POS juga menerima notifikasi order dari pengunjung secara real-time.
Kapan Dipakai
🏪Operasi Shift
- Kasir membuka shift baru dengan mengisi saldo awal per tipe pembayaran.
- Kasir melanjutkan shift yang sudah aktif (resume) tanpa membuka shift baru.
- Supervisor menutup shift, mencocokkan total fisik, dan mencetak laporan closing.
🛒Transaksi
- Scan barcode, cari produk, pilih dari grid atau kategori.
- Import dari Sales Order atau buka invoice sebelumnya.
- Ubah qty, harga, diskon, memo, customer, salesman.
- Proses berbagai tipe pembayaran termasuk online payment gateway.
🪑Manajemen Meja
- Buka meja, isi nama tamu dan jumlah tamu.
- Pindah order ke meja lain.
- Cetak order ke dapur berdasarkan grup produk dan printer masing-masing.
- Terima dan proses order dari pengunjung via QR meja.
⭐Reward & Poin
- Hitung reward product otomatis dari aturan customer.
- Gunakan saldo poin customer sebagai salah satu metode bayar.
- Aturan diskon invoice, diskon produk, dan pajak dihitung otomatis.
Alur Buka & Kelola Shift POS
Navigasi ke Penjualan & POS → Point of Sale → Point Of Sale. Daftar POS point ditampilkan lengkap dengan status aktif, tanggal buka, dan user pemegang shift.
Klik POS point yang akan dipakai. Jika belum ada shift aktif, form isi beginning balance per tipe pembayaran akan muncul. Isi saldo awal lalu klik Start.
Jika shift sudah aktif milik user yang sama, klik Resume untuk langsung masuk ke layar POS tanpa mengisi beginning balance ulang.
Sistem memuat konfigurasi POS point: customer default, daftar meja, printer, tipe payment, lebar kertas, kategori produk, barcode decoder, aturan reward, dan mode meja/rental.
Tambah produk, kelola meja, terima pembayaran, cetak struk atau order dapur.
Kembali ke layar PosStart, buka Close POS, isi jumlah fisik per tipe pembayaran, periksa selisih, lalu klik Close POS. Hanya user dengan role closepos yang bisa menutup shift.
Layar Kerja Utama POS
Layar POS dibagi dua area utama: area produk di kiri dan panel transaksi di kanan.
- Scan barcode — input barcode otomatis menambah produk ke cart. Mendukung beberapa format barcode decoder yang dapat dikonfigurasi per POS point.
- Pencarian produk — cari nama atau kode produk secara real-time. Daftar produk bisa berupa grid gambar atau daftar teks tergantung layout POS point.
- Kategori produk — filter produk berdasarkan product group yang diizinkan di POS point.
- Cache produk — jika diaktifkan di konfigurasi, daftar produk disimpan lokal agar navigasi lebih cepat.
- Produk khusus — produk dengan serial number, varian, multi-unit, atau departement akan membuka dialog tambahan sebelum masuk cart.
- Cart (daftar item) — setiap item menampilkan nama produk, qty, satuan, harga, diskon, dan subtotal. Klik item untuk memilihnya, lalu gunakan keypad atau dialog untuk mengubah nilai.
- Keypad — tombol angka untuk mengubah qty, harga, atau diskon item yang sedang dipilih. Tombol diskon bisa dikunci oleh role
locksalesdisc; tombol harga bisa dikunci oleh rolelocksalesprice. - Customer & Salesman — ubah customer dari customer default POS; ubah salesman; setiap perubahan ikut mempengaruhi aturan diskon dan poin.
- Import Sales Order — tarik item dari Sales Order yang sudah dikonfirmasi ke cart POS.
- Open Invoice — buka kembali transaksi yang sudah tersimpan berdasarkan nomor invoice untuk revisi atau pencetakan ulang.
- Print Bill — cetak bill sementara (belum final) untuk ditunjukkan ke customer.
- Point Balance — saldo poin customer saat ini.
- Poin Transaksi — poin yang akan didapat dari transaksi ini, dihitung dari aturan
salespointrewardrules. - Reward Product — produk gratis/bonus yang ikut ditambahkan ke transaksi berdasarkan aturan reward customer.
- Perhitungan reward dijalankan otomatis sebelum data transaksi disimpan.
Semua tipe pembayaran yang diaktifkan di konfigurasi POS point ditampilkan di sini.
| Tipe | Kind | Keterangan |
|---|---|---|
| Tunai | 0 |
Nominal dikurangi remain (kembalian) untuk menghitung total bayar. |
| Transfer / EDC | 1–5 |
Input nominal langsung; bisa dikombinasikan dengan tipe lain. |
| Poin Customer | 6 |
Memakai saldo poin. Nilai konversi poin ke rupiah dikonfigurasi di tipe pembayaran. |
| Online Payment Gateway | 7 |
Tombol Pay Now membuka proses gateway. Pembayaran harus dikonfirmasi (accepted) sebelum tombol Save aktif. |
- Credit Limit — ditampilkan di atas daftar tipe bayar; mempengaruhi aktifnya tombol Save.
- Quick Amount — tombol nominal cepat untuk mempersingkat input tunai.
- QR Code — beberapa tipe bayar menampilkan tombol QR untuk memunculkan kode bayar.
- Tombol Save — aktif ketika total pembayaran sudah memenuhi credit limit. Setelah Save berhasil, kasir bisa cetak struk, buka transaksi baru, atau kembali ke PosStart.
Manajemen Meja & Print Order Dapur
Fitur meja aktif bila POS point dikonfigurasi dengan usetable = 1. Setiap meja memiliki status tersendiri yang dikomunikasikan lewat tabel postable.
- Klik tombol Pilih Meja untuk membuka grid meja.
- Meja yang terisi ditampilkan berbeda dari meja kosong. Meja dengan order visitor baru yang belum diproses kasir ditampilkan dengan warna urgent (oranye/merah).
- Klik meja untuk membuka order-nya. Sistem memanggil API
openposdan memuat semua produk order yang ada. - Isi nama tamu dan jumlah tamu pada dialog properti meja.
- Gunakan Pindah Meja untuk memindahkan seluruh order ke meja lain.
- Klik tombol Print Order untuk mengirim item ke printer dapur.
- Sistem membandingkan snapshot order terakhir yang sudah dicetak dengan order terkini. Hanya item baru (selisih) yang dikirim ke dapur — item lama tidak dicetak ulang.
- Setiap printer dapur bisa dikonfigurasi untuk menerima item dari product group tertentu saja.
- Setelah cetak berhasil, snapshot diperbarui dan flag
isordervisitordireset ke 0.
postable)| Flag | Nilai | Artinya |
|---|---|---|
isordervisitor |
0 | Tidak ada order baru dari visitor yang belum diproses kasir. |
isordervisitor |
1 | Visitor baru mengirim order. Meja tampil urgent di POS. Kasir perlu membuka dan mencetak order ke dapur. |
firstorder |
1 | Order pertama dari visitor di meja ini. POS akan menghapus snapshot lama agar semua item dianggap baru saat Print Order. |
isvisitorpaid |
1 | Visitor sudah membayar lunas via payment gateway dari layar Order Meja. Kasir hanya perlu klik Tutup Meja. |
Alur Order dari Pengunjung (Visitor Order)
Fitur ini aktif bila POS point dikonfigurasi dengan orderfromvisitor = 1. POS melakukan polling ke server setiap 10 detik.
Dari Sisi Pengunjung
- Scan QR meja → halaman Order via QR Code terbuka.
- Pilih produk, susun pesanan.
- Jika POS mengaktifkan payment gateway: selesaikan pembayaran terlebih dahulu.
- Klik Kirim Pesanan → order tersimpan di server, flag meja diperbarui.
Dari Sisi Kasir
- POS mendeteksi
isordervisitor = 1via polling → notifikasi suara berbunyi. - Meja tampil dengan warna urgent di grid meja.
- Kasir klik meja → POS membuka order visitor.
- Kasir klik Print Order → item baru dicetak ke dapur.
- Jika visitor sudah bayar: lihat banner "Sudah Dibayar Pengunjung" di panel pembayaran.
- Kasir klik Tutup Meja → meja dikosongkan, transaksi selesai.
Skenario: Pengunjung Sudah Membayar dari Meja Fitur Baru
1. Pengunjung Bayar
Pengunjung klik tombol gateway di layar Order Meja → pembayaran dikonfirmasi → order dikirim otomatis dengan status isvisitorpaid = 1.
2. Kasir Print Dapur
Kasir mendapat notifikasi, buka meja, klik Print Order ke dapur seperti biasa. Kolom pembayaran sudah terisi otomatis dan ditandai "Sudah Dibayar Pengunjung".
3. Kasir Tutup Meja
Tombol Save berubah menjadi Tutup Meja (warna oranye). Klik untuk mengosongkan meja. Tidak ada proses pembayaran ulang.
- Banner ⭐ Sudah Dibayar Pengunjung muncul di atas daftar tipe pembayaran.
- Semua tipe pembayaran tampil dalam kondisi readonly — kasir tidak bisa mengubah nominal.
- Tombol Pay Now (online payment gateway) dinonaktifkan.
- Tombol Save berubah jadi Tutup Meja dengan ikon meeting_room dan warna oranye.
- Klik Tutup Meja hanya membersihkan status meja — tidak ada penulisan ulang ke data pembayaran.
Posting Langsung Fitur Baru
Normalnya nota POS baru memotong stok dan masuk jurnal saat shift ditutup. Dengan Posting Langsung, persediaan dan jurnal ditulis begitu nota disimpan, sehingga stok dan buku besar mengikuti penjualan sepanjang hari — tidak menunggu tutup kasir. Sakelarnya ada di Konfigurasi Point Of Sale, diatur per POS point, dan bawaannya mati. Selama tidak diaktifkan, POS bekerja persis seperti sebelumnya.
| Kejadian | Posting Langsung mati (bawaan) | Posting Langsung aktif |
|---|---|---|
| Nota disimpan | Hanya nota yang tersimpan. Stok dan jurnal belum bergerak. | Stok dan jurnal nota itu langsung ditulis. |
| Selama shift berjalan | Laporan stok dan buku besar belum memuat penjualan shift ini. | Laporan stok dan buku besar sudah memuat semua nota yang sudah disimpan. |
| Tutup shift | Seluruh nota shift diposting saat itu juga — makin banyak nota, makin lama prosesnya. | Tidak ada antrean posting, tutup shift jauh lebih ringan. |
| Stok tidak cukup saat nota disimpan | Sama untuk keduanya. Bila hak akses checkinventoryavailable aktif, nota yang melebihi stok ditolak saat disimpan (lihat Stok Tidak Cukup Saat Menyimpan Nota). Bila mati, tidak ada pemeriksaan. |
|
| Stok bermasalah | Tutup shift ditolak bila stok tidak cukup untuk nota shift ini. | Tutup shift ditolak selama masih ada produk bersaldo minus. |
| Laporan tutup kasir | Sama persis. Nota tetap dihitung sebagai milik shift yang sedang berjalan sampai shift ditutup. | |
- Bila hak akses Periksa saldo stok saat transaksi aktif, nota yang melebihi stok ditolak saat disimpan dan layar menampilkan jumlah yang diinput serta yang tersedia (lihat bagian di bawah). Bila mati, kasir tidak pernah ditahan dan penjualan tetap jalan meski stok tercatat habis.
- Dengan hak akses mati, stok boleh minus tanpa peringatan. Dengan hak akses aktif, saldo minus yang tetap muncul (misalnya dua kasir menjual stok terakhir bersamaan) ditangkap saat tutup shift.
- Yang diposting hanya nota kasir yang sudah difinalisasi. Order meja yang belum menjadi nota tidak memotong stok.
- Layar kasir, tombol, dan cetakan tidak berubah sama sekali.
- Close POS ditolak selama masih ada produk bersaldo minus. Daftarnya ditampilkan lengkap dan bisa diexport ke CSV.
- Bereskan dulu lewat penerimaan barang atau penyesuaian stok, lalu ulangi Close POS.
- Hak akses
checkinventoryavailablemenentukan dua pemeriksaan: saat nota disimpan (menolak penjualan yang melebihi stok) dan saat tutup shift. Bawaannya aktif pada peran. Untuk kasir yang boleh menjual tanpa stok, matikan di Peran. - Membatalkan shift juga membatalkan posting-nya: mutasi stok, jurnal, uang muka, dan giro dari nota shift itu dihapus kembali.
Stok Tidak Cukup Saat Menyimpan Nota Fitur Baru
Bila hak akses Periksa saldo stok saat transaksi pada Peran kasir aktif, barang yang stoknya tidak cukup tidak bisa dijual. Pemeriksaan berjalan saat nota disimpan, baik di POS biasa maupun Posting Langsung. Hak akses ini aktif secara bawaan.
- Kasir menyimpan nota atau menyelesaikan pembayaran. Sistem membandingkan jumlah tiap produk dengan saldo stok di gudang dan departemen nota.
- Bila ada yang kurang, nota tidak tersimpan dan muncul dialog yang menyebut nama produk, jumlah yang diinput, dan jumlah yang tersedia.
- Klik OK. Jumlah pada baris yang kurang disesuaikan dengan stok yang ada, baris itu dipilih dan digulir ke tampilan, lalu harga dan total dihitung ulang. Baris yang sama sekali tidak punya jatah stok dihapus.
- Nominal pembayaran dikosongkan karena total berubah. Isi kembali, lalu simpan.
Cara Stok Dihitung
- Saldo dihitung sampai akhir hari ini, di gudang dan departemen nota.
- Di POS biasa nota belum memotong stok sampai tutup shift, jadi jumlah pada nota POS lain yang belum diposting ikut dikurangkan. Tiga nota yang masing-masing menjual 4 dari stok 10 tidak akan lolos semuanya.
- Paket diperiksa per komponen. Jasa tidak diperiksa. Produk bernomor seri atau bertanggal kedaluwarsa diperiksa per lot. Produk PPOB tidak diperiksa.
- Satuan selain satuan dasar (misalnya dus) dikurangi dalam bilangan bulat: stok 20 pcs untuk dus isi 12 menjadi 1 dus.
- Order meja yang belum menjadi nota tidak diperiksa.
Ingin Tetap Bisa Menjual Tanpa Stok?
Matikan Periksa saldo stok saat transaksi pada Peran kasir tersebut. Penjualan menjadi bebas, dan pemeriksaan stok saat tutup shift ikut berhenti. Posting Langsung tidak mempengaruhi hal ini.
Pisah Bill (Split Bill) Fitur Baru
Pisah Bill dipakai ketika satu meja ingin membayar sendiri-sendiri. Kasir memilih item dan jumlah yang dibayar satu tamu, membayarnya sebagai nota tersendiri, lalu sisa pesanan tetap berada di meja untuk tamu berikutnya. Fitur ini tersedia pada POS point yang memakai meja (usetable = 1) dan tidak perlu pengaturan tambahan.
- Buka meja yang sudah berisi pesanan, lalu pindah ke tab pembayaran. Tombol biru Pisah Bill (ikon call_split) tampil di atas daftar tipe pembayaran.
- Klik Pisah Bill. Dialog menampilkan semua item meja. Atur jumlah yang dibayar tamu ini dengan tombol − / + atau ketik angkanya; perkiraan nilainya tampil di kiri bawah.
- Klik Bayar Item Terpilih. Keranjang berubah menjadi hanya item yang dipilih, sebagai nota baru tanpa meja. Bar di atas pembayaran menampilkan Pisah bill dari [nama meja] dengan tombol Batal.
- Proses pembayaran seperti biasa: pilih tipe pembayaran, isi nominal, simpan, dan cetak struk.
- Setelah nota lunas, klik tombol hijau Lanjut ke [nama meja]. Meja kembali terbuka dengan sisa item. Ulangi untuk tamu berikutnya, atau bayar sisanya langsung seperti biasa.
- Jumlah bisa dipecah per item, misalnya 3 porsi dibagi 1 untuk tamu ini dan 2 tetap di meja. Diskon per baris ikut dibagi sebanding jumlah.
- Minimal satu item harus dipilih dan minimal satu item harus tersisa di meja. Bila semua item akan dibayar, bayar meja secara langsung tanpa Pisah Bill. Meja dengan satu item saja tidak bisa dipisah.
- Diskon nominal nota dan biaya tambahan tetap di nota meja; nota pecahan tidak membawanya.
- Nota pecahan mencatat memo Pisah bill dari [meja] ([nomor nota meja]) sehingga mudah ditelusuri di laporan.
- Tidak tersedia untuk meja sewa/reservasi, meja yang sudah dibayar pengunjung, dan nota yang memuat Order Penjualan.
- Selama Pisah Bill berjalan, kasir tidak bisa pindah meja atau antrian lain; sistem meminta menyelesaikan atau membatalkan Pisah Bill lebih dulu.
Varian Produk di POS Fitur Baru
Produk yang dikelola sebagai varian (ukuran/warna/model dari form Produk → Kelola Varian) tampil sebagai satu kartu per induk, bukan satu kartu per kombinasi.
- Menyentuh kartu membuka pemilih kombinasi: satu baris per nilai sumbu pertama, satu tombol per kombinasi dengan harga dan jumlah di keranjang. Pemilih tetap terbuka supaya kasir bisa menambah beberapa ukuran sekaligus.
- Memindai barcode atau mengetik kode varian menambahkan produknya langsung, tanpa lewat kartu induk. Pencarian juga menemukan nama variannya.
- Keranjang, stok, struk, dan laporan tetap per produk (per kombinasi).
Mode Offline Sementara Fitur Baru
Bila internet kasir putus sebentar, nota tetap bisa disimpan. Nota disimpan di perangkat, struk tercetak seperti biasa, dan begitu tersambung lagi nota dikirim ke server otomatis, berurutan, tanpa tindakan kasir.
Syarat
- Pada POS Point, Izinkan mode offline dan Produk POS disimpan dalam cache aktif. POS meja ikut, kecuali meja sewa.
- Halaman POS sudah terbuka sebelum internet putus. Jangan memuat ulang halaman selama offline.
- Setelah membuka POS, perangkat perlu tersambung sekali: saat itulah perangkat menyiapkan nomor nota cadangan untuk dipakai saat offline.
Saat Internet Putus
- Simpan nota seperti biasa. Bila server tidak terjangkau, nota disimpan di perangkat dengan nomor dari cadangan, struk tercetak, dan nota baru bisa dimulai.
- Ikon awan dengan angka muncul di bagian atas layar POS: jumlah nota yang belum terkirim. Klik untuk melihat daftarnya.
- Begitu tersambung, nota terkirim otomatis. Jam pada nota adalah jam saat kasir menyimpannya, bukan jam saat terkirim.
Yang Tidak Bisa Dilakukan Offline
- Pembayaran online (QRIS, VA, e-wallet) dan EDC terintegrasi. Gunakan tunai atau jenis bayar manual lain.
- Produk PPOB, pisah bill, dan nota dari order penjualan.
- Aturan diskon dan poin pelanggan yang dihitung server: nota offline memakai harga di layar dan tidak memberi poin. Kasir mendapat peringatan.
POS Meja Saat Offline
- Order ke dapur tetap berjalan: struk dapur tercetak (printer lokal), order disimpan di perangkat, dan meja tampil terisi di layar. Order dikirim ke server saat tersambung.
- Meja yang sudah berisi order hanya bisa dibuka bila isinya ada di perangkat ini, yaitu meja yang terakhir dibuka atau dipesan dari perangkat ini. Meja yang order-nya dicatat waiter di perangkat lain atau dipesan pengunjung tidak bisa dibuka sampai tersambung.
- Tutup meja dan bayar berjalan seperti nota biasa: meja kosong lagi di layar, dan nota menutup meja itu di server saat terkirim, berikut tambahan item selama offline.
- Bila selama offline meja itu dipakai nota lain di server (misalnya oleh perangkat lain), nota tidak menimpanya: nota masuk daftar gagal dengan pesannya. Periksa meja itu bersama kasir lain, lalu kirim ulang.
- Meja sewa (berjam), pindah meja, dan pisah bill tetap butuh internet.
Setelah Terkirim
- Nota offline yang ternyata melebihi stok tetap diterima (barangnya sudah diserahkan) dan diberi tanda. Pesannya muncul di layar; periksa saat tutup shift.
- Nota yang ditolak server (misalnya sesi sudah tertutup) tidak dibuang: nota tetap di perangkat dengan pesan penolakannya, dan isinya juga tersimpan di server. Buka daftar lewat ikon awan, lalu Kirim ulang setelah penyebabnya diperbaiki.
- Nomor cadangan yang tidak terpakai menjadi loncatan nomor nota. Ini wajar.
Nomor Nota Bentrok Fitur Baru
Sesi POS tidak bisa dibuka bila Prefik Faktur Penjualan POS itu bisa menghasilkan nomor yang sama dengan POS lain, atau dengan format nomor faktur atau retur penjualan divisi mana pun. Pesannya menyebut format yang bentrok. Ubah prefiknya di menu POS Point supaya unik, lalu buka sesi lagi.
Closing POS (Tutup Shift)
- Kembali ke layar PosStart dari tombol di POS atau menu.
- Klik tombol Close POS (hanya tampil bagi user dengan role
closepos). - Sistem menampilkan ringkasan transaksi: total per tipe pembayaran, jumlah transaksi, dan total penjualan bersih.
- Kasir/supervisor mengisi jumlah fisik per tipe pembayaran.
- Periksa selisih antara sistem dan fisik. Jika stok tidak cukup — atau, pada POS point dengan Posting Langsung, ada produk bersaldo minus — halaman menampilkan daftar produk bermasalah dengan opsi export CSV.
- Klik Close POS untuk menyimpan closing. Laporan closing bisa dicetak setelah proses selesai.
Hal yang Perlu Diperhatikan
-
Jangan tinggalkan layar POS saat transaksi belum disimpan. Data sementara ada di local storage, tetapi penyimpanan resmi baru terjadi saat
saveposberhasil. - Perubahan konfigurasi POS point (customer default, printer, payment type, dll.) langsung berpengaruh ke perilaku kasir tanpa perlu restart.
- Tombol Save tidak aktif bila credit limit customer belum terpenuhi oleh total pembayaran.
-
Payment gateway (kind=7) memerlukan konfirmasi (
accepted = 1) sebelum transaksi bisa disimpan.
- Print Order menggunakan diff/snapshot — item yang sudah pernah dicetak tidak akan dicetak ulang meski muncul di cart.
- Closing membaca total dari semua transaksi shift. Stok minus terdeteksi saat closing dan perlu ditangani sebelum laporan bisa diterima.
- Pada POS point dengan Posting Langsung, stok dan jurnal sudah ditulis sejak nota disimpan. Closing tinggal mencocokkan uang dan memastikan tidak ada produk bersaldo minus.
- Printer bisa melalui APS (raw printer) atau browser preview. Bila koneksi APS gagal, cetakan masuk antrian pending print dan dikirim ulang saat koneksi pulih.
- Untuk meja dengan visitor payment, kasir tidak perlu input nominal bayar — cukup klik Tutup Meja.
Lokasi Menu
-
Penjualan & POS / Point of Sale / Point Of Sale
/posstart→/pointofsale