KNOWLEDGE BASE · RUBY POS · KB - P OS- 02

Pembayaran VA Duitku Pending atau Gagal

Penyebab dan langkah penanganan saat pembayaran Virtual Account Duitku di Ruby POS bermasalah

 

Produk

Ruby POS (Windows)

Fitur

Pembayaran Virtual Account (VA) Duitku

Ditujukan untuk

Kasir, Head Kasir, dan Tim IT toko

Dampak

Sedang sampai tinggi – transaksi tertahan, atau uang masuk tetapi penjualan tidak tercatat

Tanggal dokumen

23 Oktober 2026


1. Ringkasan

    Pembayaran Virtual Account (VA) Duitku di Ruby POS bisa bermasalah dalam tiga bentuk: status tetap Pending padahal pelanggan sudah transfer, pembayaran ditolak karena melebihi batas, atau uang sudah masuk tetapi penjualan belum tercatat.

    Sebagian besar kasus bisa diselesaikan kasir sendiri dengan menekan tombol F12 (Check Status) dan dengan membagi pembayaran ke beberapa metode (Multi MOP). Kasus uang masuk tanpa penjualan perlu dilaporkan ke Tim Support Ruby POS.


2. Cara Kerja Pembayaran VA Duitku

    Memahami alurnya membantu kasir tahu kapan harus menunggu dan kapan harus bertindak:

  • Kasir memilih metode bayar VA Duitku di layar Checkout, lalu menekan Paid (F12).
  • Ruby POS membuat nomor VA dan menampilkan nomor VA, total pembayaran, dan batas waktu bayar (Pay Before).
  • Pelanggan transfer ke nomor VA tersebut.
  • Ruby POS mengecek status pembayaran otomatis setiap 3 detik selama sekitar 3 menit. Selama pengecekan, tombol Check Status (F12) berwarna abu-abu.
  • Begitu status PAID, transaksi tersimpan. Jika pelanggan baru membayar setelah 3 menit, kasir perlu menekan F12 agar status dicek ulang.

Gambar 1. Dialog pembayaran VA Duitku (data contoh): (1) batas waktu bayar, (2) nomor VA untuk pelanggan, (3) tombol Check Status (F12).



3. Masalah yang Terjadi

    Cocokkan gejala di layar dengan tabel berikut, lalu ikuti bagian penanganannya di bagian 5.


Gejala

Kemungkinan penyebab

Penanganan

Pelanggan sudah transfer, status di POS masih Pending atau tombol masih loading

Pengecekan otomatis sudah berhenti, atau konfirmasi dari Duitku terlambat

Bagian A

Muncul pesan “Maximal amount is 100,000,000, please add other payment methods”

Nominal VA melebihi batas Duitku Rp100.000.000 per transaksi

Bagian B

Muncul pesan “Virtual Account HAS EXPIRED”

Batas waktu bayar (Pay Before) sudah lewat

Bagian C

Uang sudah diterima, tetapi penjualan tidak ada di POS

Dialog VA ditutup (Cancel / Esc) sebelum status PAID

Bagian D

Semua pembayaran VA di toko tetap Pending walaupun pelanggan sudah bayar

Ruby POS versi lama atau gangguan koneksi antara Duitku dan server Ruby POS

Bagian E



4. Penyebab

    Uang pelanggan tidak masuk ke Ruby POS secara langsung. Duitku mengonfirmasi pembayaran ke server Ruby POS, lalu kasir melihat hasilnya lewat pengecekan status. Dari alur ini muncul beberapa titik rawan:

  • Pengecekan otomatis hanya berjalan sekitar 3 menit. Jika pelanggan membayar setelahnya, status di layar tidak berubah sampai kasir menekan F12.
  • Transaksi baru tersimpan setelah status PAID. Jika dialog VA ditutup sebelum itu, penjualan tidak tercatat walaupun uang tetap masuk ke rekening.
  • Duitku membatasi VA maksimal Rp100.000.000 per transaksi. Sisanya harus dibayar dengan metode lain.
  • Konfirmasi Duitku bisa tidak sampai. Kasus ini pernah terjadi karena pengaturan alamat server dan sudah diperbaiki tim Ruby POS. Toko perlu memakai Ruby POS versi terbaru.

 



5. Langkah Penanganan


Bagian A – Status masih Pending (dilakukan kasir)

1. Pastikan pelanggan transfer ke nomor VA yang tampil di layar

Nomor VA dibuat baru untuk setiap transaksi. Nomor VA dari transaksi sebelumnya tidak berlaku untuk transaksi ini.


2. Tekan F12 di keyboard

F12 tetap berfungsi walaupun tombol Check Status di layar terlihat abu-abu atau masih loading. Tunggu beberapa detik sampai hasil pengecekan muncul.


3. Jika muncul “Payment Status: PENDING”, tunggu sebentar lalu tekan F12 lagi

Konfirmasi dari bank ke Duitku kadang butuh beberapa menit. Ulangi F12 setiap 1–2 menit.


4. Jika status PAID, transaksi tersimpan otomatis

Lanjutkan transaksi seperti biasa.


5. Jika tetap Pending setelah beberapa kali dicek

Minta bukti transfer dari pelanggan (nomor VA, nominal, jam transfer), lalu hubungi Tim Support Ruby POS. Biarkan dialog VA tetap terbuka.

Jangan simpan transaksi sebagai Pending Order selama menunggu pembayaran VA. Pending Order hanya menyimpan daftar belanja, bukan VA yang sudah dibuat. Saat transaksi dibuka lagi dan di-checkout, Ruby POS membuat nomor VA baru, sehingga transfer ke VA sebelumnya tidak terhubung ke transaksi tersebut.



Bagian B – Nominal melebihi Rp100.000.000 (dilakukan kasir)

1. Aktifkan Multi MOPs di layar Checkout

Tekan F9 atau klik tombol Multi MOPs sampai berstatus ON.


Gambar 2. Checkout – tombol Multi MOPs (kotak kuning) dan daftar metode bayar yang dipilih (kotak merah).


2. Isi nominal VA Duitku maksimal Rp100.000.000

Dalam satu transaksi hanya bisa ada satu VA Duitku.


3. Bayar sisanya dengan metode lain

Misalnya tunai, kartu debit/kredit (EDC), atau metode lain yang tersedia di toko. Pastikan Total Payment sama dengan Grand Total.


4. Tekan Paid (F12) dan lanjutkan pembayaran VA seperti biasa

Ikuti Bagian A jika status VA belum langsung PAID.



Bagian C – VA sudah kedaluwarsa (dilakukan kasir)

1. Tutup pesan “Virtual Account HAS EXPIRED”

Tekan Choose Other Method (Esc).


2. Pastikan pelanggan belum transfer ke VA yang kedaluwarsa

Jika pelanggan ternyata sudah transfer, jangan buat VA baru. Ikuti Bagian D.


3. Buat pembayaran baru

Pilih ulang VA Duitku untuk mendapatkan nomor VA baru, atau gunakan metode bayar lain. Informasikan nomor VA yang baru ke pelanggan.



Bagian D – Uang masuk tetapi penjualan tidak tercatat (Head Kasir)

1. Jangan buat transaksi VA baru untuk pelanggan yang sama

Jangan juga meminta pelanggan membayar lagi. Cek dulu apakah pembayaran sebelumnya sudah masuk, supaya pelanggan tidak membayar dua kali.


2. Kumpulkan data pembayaran

  • Nomor VA dan nominal yang dibayar.
  • Jam transfer dan bukti transfer dari pelanggan.
  • Nama toko, nomor kasir, dan nama kasir yang melayani.


3. Hubungi Tim Support Ruby POS

Tim Support memverifikasi status pembayaran di Duitku dan memastikan invoice memang belum tercatat, termasuk kemungkinan invoice sudah tersimpan di POS tetapi belum terkirim ke BOS (lihat KB-POS-04).


4. Input ulang hanya setelah verifikasi dan dengan persetujuan tertulis

Jangan input ulang transaksi sebelum Tim Support selesai memverifikasi. Jika pencatatan ulang memang diperlukan, metode bayar dan persetujuannya mengikuti arahan tertulis dari pihak yang berwenang di perusahaan sesuai SOP Finance, dengan mencantumkan referensi pembayaran dan nomor tiket Support.



Bagian E – Semua pembayaran VA tetap Pending (Tim IT)

1. Pastikan Ruby POS di semua kasir memakai versi terbaru

Tanyakan versi terbaru ke Tim Support Ruby POS jika belum yakin.


2. Pastikan PC kasir terhubung ke internet

Jika koneksi terputus, dialog VA menampilkan pesan “No internet connection detected”.


3. Hubungi Tim Support Ruby POS

Sertakan nama toko, nomor kasir, nomor VA, nominal, dan jam transaksi.


6. Pencegahan

  • Tunggu sampai PAID. Kasir tidak menutup dialog VA sebelum status PAID.
  • Gunakan F12. Jika pelanggan membayar agak lama, tekan F12 untuk cek ulang, jangan membuat VA baru.
  • Jangan pakai Pending Order untuk transaksi yang sedang menunggu pembayaran VA.
  • Transaksi besar: untuk total di atas Rp100.000.000, langsung gunakan Multi MOP.
  • Nomor VA terbaru. Pastikan pelanggan selalu transfer ke nomor VA yang sedang tampil di layar.
  • Versi terbaru. Selalu gunakan Ruby POS versi terbaru di semua kasir.



A. Referensi tiket Freshdesk

Tiket

Tanggal

Customer / store

Ringkasan dan hasil

Status

164102

11 Jun

2026

Topgolf

VA BCA sudah dibayar, status di POS tetap Pending. Penyebab: callback Duitku butuh URL server tanpa custom port (dikerjakan DevOps di 164175/164176). Setelah itu POS di-update ke versi terbaru.

Closed

164175,

164176

17 Jun

2026

Internal (DevOps)

Duitku memerlukan URL server tanpa custom port. Tiket koordinasi DevOps, turunan 164102.

Closed

164645

8 Jul 2026

Topgolf (BPP)

Masalah VA muncul lagi. Solusi: update Ruby POS ke versi terbaru; dites di store BPP.

Closed

165162

3 Agu 2026

Topgolf (TRB)

Transaksi VA tidak bisa diproses: nominal melebihi limit maksimal Duitku.

Closed

165209

5 Agu 2026

Topgolf

Pesan “Maximal amount is 100,000,000…”. Validasi limit di POS dinonaktifkan; sekarang error mengikuti respons Duitku.

Closed

165355

13 Agu

2026

Topgolf (TRB POS 2)

Uang customer sudah masuk, penjualan belum ada di POS, tombol masih loading. Workaround: tekan F12.

Closed

165213

5 Agu 2026

Topgolf (MKS)

Pembayaran Rp6.985.000 sudah berhasil, tetapi status masih Pending dan waktu pengecekan sudah habis.

Diselesaikan via WAG, detail tidak tercatat.

Closed

165015

25 Jul 2026

Topgolf (RYA)

Muncul notifikasi error saat memakai Duitku. Penyebab: web server otomatis mengambil versi aplikasi terbaru yang belum dipublish; konfigurasi server disesuaikan. Tidak perlu update POS.

Closed


B. Analisis teknis

  • Konfigurasi per toko diambil dari Store Master yang tersinkron ke POS: duitkuUrl, duitkuMerchantCode, duitkuApiKey, duitkuExpiryPeriod (duitku_service.dart:24-38). Jika kosong: “Duitku parameters must be available.”
  • Buat VA: POST {duitkuUrl}/createTransactionRequest dengan docnum (UUID baru setiap percobaan),

merchantOrderId (yyyyMMddHHmmss + 10 karakter acak, checkout_dialog.dart:407), dan callbackUrl =

{duitkuUrl}/callback. Nominal VA = nominal di MOP Duitku, jadi split pembayaran didukung, tetapi hanya satu MOP Duitku per transaksi (duitkuMop.first).

  • Cek status: GET {duitkuUrl}/invoice/{docnum} → data.status PAID / EXPIRED / lainnya. Polling otomatis 60 × 3 detik (duitku_dialog.dart:65-108). Handler tombol F12 tidak mengecek isCheckingStatus, jadi F12 tetap jalan saat tombol di layar disabled.
  • docnum dan merchantOrderId tidak disimpan di database lokal, hanya di memori dan log. Jika dialog ditutup, POS tidak punya jejak VA tersebut. Pelacakan harus lewat nomor VA, nominal, dan jam di dashboard Duitku.
  • Pending Order tidak melanjutkan VA (konfirmasi tim, 23 Okt 2026). Pending Order menyimpan antrean belanja lalu mereset receipt aktif; saat dipanggil kembali, item dan beberapa data transaksi dibangun ulang, bukan melanjutkan sesi pembayaran VA. docnumDuitku dibuat saat checkout dan diberikan ke dialog pembayaran; checkout VA berikutnya membuat UUID baru. Karena itu Pending Order tidak boleh dijadikan prosedur penanganan VA Pending.
  • Risiko setelah PAID: charge() dibungkus try/catch yang hanya mencatat log (checkout_dialog.dart:250-256), lalu dialog tetap ditutup dan layar sukses tampil. Jika penyimpanan gagal, uang masuk tetapi invoice tidak tersimpan tanpa peringatan ke kasir.
  • Masa berlaku: “Pay Before” di layar dihitung dari duitkuExpiryPeriod ?? 60 menit, sedangkan ke Duitku dikirim duitkuExpiryPeriod apa adanya. Jika nilainya kosong di Store Master, tampilan POS dan masa berlaku di Duitku bisa berbeda.                                                                                                             



C. Checklist investigasi (Tim Support)
Kasus 1 – Uang masuk, penjualan tidak ada
Tujuan: memastikan pembayaran sudah diterima Duitku dan apakah invoice sebenarnya sudah tersimpan.

  • Minta nomor VA, nominal, jam transfer, bukti transfer, nama toko, dan nomor kasir.
  • Cari transaksi di dashboard Duitku (merchant code toko) berdasarkan nomor VA, nominal, dan jam. Catat merchantOrderId, reference, dan status.
  • Cek di BOS Retail apakah invoice dengan nominal dan jam tersebut sudah ada (charge() mungkin sebenarnya berhasil).
  • Cek juga di PC kasir apakah invoice tersimpan tetapi belum terkirim ke BOS (angka Invoices x/y, query synctobos di KB-POS-04).
  • Jika invoice memang belum tercatat, pencatatan ulang mengikuti arahan tertulis pihak berwenang customer sesuai SOP Finance. Support tidak menetapkan MOP pengganti. Catat nomor tiket dan referensi Duitku di tiket.


Kasus 2 – Semua VA tetap Pending
Tujuan: memastikan konfigurasi toko dan callback Duitku berjalan.

  • Cek konfigurasi Duitku di Store Master BOS untuk toko tersebut.
  • Pastikan callback URL Duitku bisa diakses dari luar tanpa custom port (lihat 164175/164176).
  • Tes endpoint status dengan docnum transaksi uji:


D. Rekomendasi perbaikan (Tim Developer)

  • Simpan docnum, merchantOrderId, nomor VA, nominal, dan status ke tabel lokal, agar VA bisa dilacak dan dilanjutkan setelah dialog tertutup atau aplikasi restart.
  • Tangani kegagalan charge() setelah PAID: jangan tampilkan layar sukses, beri retry, dan catat ke Error Logs.
  • Minta konfirmasi sebelum dialog VA ditutup selama VA masih aktif.
  • Cegah pengecekan ganda saat F12 ditekan ketika polling berjalan.
  • Samakan masa berlaku VA yang ditampilkan dengan yang dikirim ke Duitku.