PayStory — Recon War: Perang Data Untuk Sinkronisasi

Sandi Fajariadi
11 min read4 days ago

Di setiap sistem yang memproses transaksi, ada data yang perlu dicocokkan dengan data lainnya untuk memastikan konsistensi. Proses ini dikenal sebagai rekonsiliasi, atau sering disebut ‘rekon’ dalam bahasa sehari-hari.

Rekonsiliasi, menurut penjelasan dari Kementerian Keuangan, adalah proses mencocokkan data transaksi keuangan yang diproses melalui beberapa sistem atau subsistem yang berbeda berdasarkan dokumen sumber yang sama. Rekonsiliasi penting untuk sinkronisasi antar entitas pelaporan dalam pengakuan, pengukuran, pencatatan, dan penyajian hak serta kewajiban yang timbul dari suatu transaksi.

Secara sederhana, rekonsiliasi memastikan bahwa semua sistem yang terlibat dalam proses transaksi melihat status yang sama dari sebuah transaksi

Mengapa Rekonsiliasi Penting?

Rekonsiliasi diperlukan karena jika dua pihak memiliki data dari proses transaksi yang sama tetapi terdapat perbedaan, maka data tersebut perlu diperiksa untuk menentukan data mana yang benar.

Dalam konteks transaksi finansial, pencocokan data ini penting untuk memastikan tidak ada perbedaan yang merugikan pengguna. Jika ada dana yang harus dikembalikan, prosesnya bisa segera dilakukan. Begitu juga jika ada transaksi yang harus ditandai sebagai sukses, itu bisa diproses dengan cepat.

Proses Rekonsiliasi: Studi Kasus

Mari kita lakukan studi kasus rekonsiliasi.

Untuk bisa melakukan rekonsiliasi maka dibutuhkan sumber data lebih dari satu

Ya iya lah, kalau mau rekon tapi sumber data hanya satu saja itu namanya gak tahu diri 😓

Berikut adalah simulasi dari dua dataset yang menggambarkan data dari suatu transaksi

Data Set A
+---------------+------------+--------+-----------+
| TransactionID | Date | Amount | Status |
+---------------+------------+--------+-----------+
| TX1000 | 2024-07-01 | 388 | Completed |
| TX1001 | 2024-07-02 | 136 | Pending |
| TX1002 | 2024-07-03 | 888 | Completed |
| TX1003 | 2024-07-04 | 588 | Pending |
| TX1004 | 2024-07-05 | 798 | Failed |
| TX1005 | 2024-07-06 | 276 | Pending |
| TX1006 | 2024-07-07 | 775 | Pending |
| TX1007 | 2024-07-08 | 317 | Pending |
| TX1008 | 2024-07-09 | 263 | Failed |
| TX1009 | 2024-07-10 | 586 | Completed |
| TX1010 | 2024-07-11 | 967 | Completed |
| TX1011 | 2024-07-12 | 769 | Completed |
| TX1012 | 2024-07-13 | 661 | Completed |
| TX1013 | 2024-07-14 | 708 | Failed |
| TX1014 | 2024-07-15 | 252 | Failed |
| TX1015 | 2024-07-16 | 643 | Completed |
| TX1016 | 2024-07-17 | 654 | Pending |
| TX1017 | 2024-07-18 | 209 | Pending |
| TX1018 | 2024-07-19 | 429 | Completed |
| TX1019 | 2024-07-20 | 386 | Failed |
+---------------+------------+--------+-----------+


Data Set B
+---------------+------------+--------+-----------+
| TransactionID | Date | Amount | Status |
+---------------+------------+--------+-----------+
| TX1000 | 2024-07-01 | 388 | Completed |
| TX1001 | 2024-07-02 | 136 | Pending |
| TX1002 | 2024-07-03 | 888 | Completed |
| TX1003 | 2024-07-04 | 588 | Pending |
| TX1004 | 2024-07-05 | 531 | Pending |
| TX1005 | 2024-07-06 | 944 | Completed |
| TX1006 | 2024-07-07 | 118 | Pending |
| TX1007 | 2024-07-08 | 851 | Completed |
| TX1008 | 2024-07-09 | 720 | Completed |
| TX1009 | 2024-07-10 | 904 | Completed |
| TX1011 | 2024-07-12 | 631 | Failed |
| TX1012 | 2024-07-13 | 472 | Pending |
| TX1013 | 2024-07-14 | 373 | Pending |
| TX1014 | 2024-07-15 | 710 | Failed |
| TX1016 | 2024-07-17 | 903 | Completed |
| TX1017 | 2024-07-18 | 300 | Failed |
| TX1018 | 2024-07-19 | 456 | Failed |
| TX1019 | 2024-07-20 | 590 | Completed |
| TX2000 | 2024-07-21 | 528 | Failed |
| TX2001 | 2024-07-22 | 136 | Completed |
| TX2002 | 2024-07-23 | 153 | Failed |
| TX2003 | 2024-07-24 | 465 | Pending |
| TX2004 | 2024-07-25 | 777 | Pending |
+---------------+------------+--------+-----------+

Dari dua dataset di atas, kita bisa lihat ada beberapa data yang cocok dan ada yang tidak. Ekspektasi dari proses rekonsiliasi adalah mendapatkan paparan dan penjelasan dari hasil perbandingan dua data tersebut.

Hasil Rekonsiliasi

Setelah dilakukan rekonsiliasi, berikut adalah hasilnya:

1. Data Rekonsiliasi:
Data Set A terdiri dari 20 transaksi.
Data Set B terdiri dari 22 transaksi, termasuk 5 transaksi tambahan
yang tidak ada di Data Set A.


2. Hasil Rekonsiliasi:

a. Matched Records:
Transaksi yang cocok di kedua set data.

Count: 4
Details:
+---------------+------------+--------+-----------+
| TransactionID | Date | Amount | Status |
+---------------+------------+--------+-----------+
| TX1000 | 2024-07-01 | 886 | Failed |
| TX1001 | 2024-07-02 | 805 | Completed |
| TX1004 | 2024-07-05 | 213 | Failed |
| TX1009 | 2024-07-10 | 574 | Pending |
+---------------+------------+--------+-----------+


b. Not Matched due to Different Statuses:
Transaksi dengan TransactionID dan Date yang sama tetapi status berbeda.

Count: 14
Details:
+---------------+------------+----------+-----------+----------+-----------+----------------------+
| TransactionID | Date | Amount_A | Status_A | Amount_B | Status_B | ReconciliationStatus |
+---------------+------------+----------+-----------+----------+-----------+----------------------+
| TX1004 | 2024-07-05 | 798 | Failed | 531 | Pending | Not Match |
| TX1005 | 2024-07-06 | 276 | Pending | 944 | Completed | Not Match |
| TX1006 | 2024-07-07 | 775 | Pending | 118 | Pending | Not Match |
| TX1007 | 2024-07-08 | 317 | Pending | 851 | Completed | Not Match |
| TX1008 | 2024-07-09 | 263 | Failed | 720 | Completed | Not Match |
| TX1009 | 2024-07-10 | 586 | Completed | 904 | Completed | Not Match |
| TX1011 | 2024-07-12 | 769 | Completed | 631 | Failed | Not Match |
| TX1012 | 2024-07-13 | 661 | Completed | 472 | Pending | Not Match |
| TX1013 | 2024-07-14 | 708 | Failed | 373 | Pending | Not Match |
| TX1014 | 2024-07-15 | 252 | Failed | 710 | Failed | Not Match |
| TX1016 | 2024-07-17 | 654 | Pending | 903 | Completed | Not Match |
| TX1017 | 2024-07-18 | 209 | Pending | 300 | Failed | Not Match |
| TX1018 | 2024-07-19 | 429 | Completed | 456 | Failed | Not Match |
| TX1019 | 2024-07-20 | 386 | Failed | 590 | Completed | Not Match |
+---------------+------------+----------+-----------+----------+-----------+----------------------+


c. Not Matched due to Missing Records:
Transaksi yang ada di satu set data tetapi tidak ada di set data lainnya.

Count:
Missing in Data Set B: 2
Missing in Data Set A: 5

Missing in Data Set B:
+---------------+------------+----------+-----------+----------+----------+
| TransactionID | Date | Amount_A | Status_A | Amount_B | Status_B |
+---------------+------------+----------+-----------+----------+----------+
| TX1010 | 2024-07-11 | 687 | Failed | NaN | NaN |
| TX1015 | 2024-07-16 | 388 | Completed | NaN | NaN |
+---------------+------------+----------+-----------+----------+----------+

Missing in Data Set A:
+---------------+------------+----------+----------+----------+-----------+
| TransactionID | Date | Amount_A | Status_A | Amount_B | Status_B |
+---------------+------------+----------+----------+----------+-----------+
| TX2000 | 2024-07-21 | NaN | NaN | 812 | Failed |
| TX2001 | 2024-07-22 | NaN | NaN | 641 | Pending |
| TX2002 | 2024-07-23 | NaN | NaN | 152 | Completed |
| TX2003 | 2024-07-24 | NaN | NaN | 609 | Failed |
| TX2004 | 2024-07-25 | NaN | NaN | 947 | Completed |
+---------------+------------+----------+----------+----------+-----------+


3. Kesimpulan:

Total records in Data Set A: 20
Total records in Data Set B: 22
Total records after merging: 25

Matched Records: 4
Mismatch Records: 14
Missing Records in Data Set B: 2
Missing Records in Data Set A: 5

Berikut tampilan secara tabel hasil merge data

+---------------+------------+----------+-----------+----------+-----------+----------------------+
| TransactionID | Date | Amount_A | Status_A | Amount_B | Status_B | ReconciliationStatus |
+---------------+------------+----------+-----------+----------+-----------+----------------------+
| TX1000 | 2024-07-01 | 388 | Completed | 388 | Completed | Match |
| TX1001 | 2024-07-02 | 136 | Pending | 136 | Pending | Match |
| TX1002 | 2024-07-03 | 888 | Completed | 888 | Completed | Match |
| TX1003 | 2024-07-04 | 588 | Pending | 588 | Pending | Match |
| TX1004 | 2024-07-05 | 798 | Failed | 531 | Pending | Not Match |
| TX1005 | 2024-07-06 | 276 | Pending | 944 | Completed | Not Match |
| TX1006 | 2024-07-07 | 775 | Pending | 118 | Pending | Not Match |
| TX1007 | 2024-07-08 | 317 | Pending | 851 | Completed | Not Match |
| TX1008 | 2024-07-09 | 263 | Failed | 720 | Completed | Not Match |
| TX1009 | 2024-07-10 | 586 | Completed | 904 | Completed | Not Match |
| TX1010 | 2024-07-11 | 967 | Completed | NaN | NaN | Missing in B |
| TX1011 | 2024-07-12 | 769 | Completed | 631 | Failed | Not Match |
| TX1012 | 2024-07-13 | 661 | Completed | 472 | Pending | Not Match |
| TX1013 | 2024-07-14 | 708 | Failed | 373 | Pending | Not Match |
| TX1014 | 2024-07-15 | 252 | Failed | 710 | Failed | Not Match |
| TX1015 | 2024-07-16 | 643 | Completed | NaN | NaN | Missing in B |
| TX1016 | 2024-07-17 | 654 | Pending | 903 | Completed | Not Match |
| TX1017 | 2024-07-18 | 209 | Pending | 300 | Failed | Not Match |
| TX1018 | 2024-07-19 | 429 | Completed | 456 | Failed | Not Match |
| TX1019 | 2024-07-20 | 386 | Failed | 590 | Completed | Not Match |
| TX2000 | 2024-07-21 | NaN | NaN | 528 | Failed | Missing in A |
| TX2001 | 2024-07-22 | NaN | NaN | 136 | Completed | Missing in A |
| TX2002 | 2024-07-23 | NaN | NaN | 153 | Failed | Missing in A |
| TX2003 | 2024-07-24 | NaN | NaN | 465 | Pending | Missing in A |
| TX2004 | 2024-07-25 | NaN | NaN | 777 | Pending | Missing in A |
+---------------+------------+----------+-----------+----------+-----------+----------------------+

Tindakan Dari Hasil Rekonsiliasi

Jika kita memposisikan diri sebagai Payment Gateway dimana Data Set A adalah data milik Payment Gateway dan Data Set B adalah data milik Bank, maka dari hasil rekonsiliasi tersebut kita bisa contohkan diambil tindakan sebagai berikut:

  • Untuk data yang cocok (Match 4 record) maka dana bisa dilimpahkan langsung ke merchant.
  • Untuk data yang tidak cocok statusnya (Not Match 14 record) maka tindakan yang diambil akan dilakukan sesuai SOP atau sesuai kesepakatan dengan pihak merchant. Diasumsikan aturan yang digunakan sebagai berikut
  1. Jika status transaksi di data B adalah Completed dan status transaksi di A adalah Pending, maka status transaksi di data A akan di ubah menjadi Completed. Dana akan dilimpahkan ke merchant.
  2. Jika status transaksi di data B adalah Completed dan status transaksi di A adalah Failed, maka status transaksi di data B akan digagalkan. Dana akan dikembalikan ke pembayar.
  3. Jika status transaksi di data B adalah Pending dan status transaksi di A adalah Completed, maka status transaksi di data B akan disukseskan. Dana akan dilimpahkan ke merchant.
  4. Jika status transaksi di data B adalah Pending dan status transaksi di A adalah Failed, maka status transaksi di data B akan digagalkan. Dana akan dikembalikan ke pembayar (jika ada dana pembayar yang masuk).
  5. Jika status transaksi di data B adalah Failed dan status transaksi di A adalah Completed, maka status transaksi di data B akan disukseskan dan diproses manual debet.
  6. Jika status transaksi di data B adalah Failed dan status transaksi di A adalah Pending, maka status transaksi di data B akan digagalkan. Tidak ada dana yang masuk.
  7. Jika ada transaksi di data B yang jumlah amount nya berbeda dengan transaksi di data A, maka transaksi akan digagalkan dan dana akan dikembalikan.
  • Untuk data yang tidak ada (Missing record) maka tindakannya adalah semua transaksi yang berstatus Completed di data B tapi tidak ada di data A maka semua transaksi di data B tersebut akan dibuatkan data transaksi di data A dengan status Completed juga (sukses).

Beberapa catatan yang perlu diketahui

Ada beberapa data transaksi yang, yahh bisa dibilang, unlikely to happen

Contoh ada data transaksi di set A yang berstatus Completed tapi di set B statusnya bukan Completed. Hal ini seharusnya tidak terjadi. Kenapa? Karena seperti info di awal, data di set B adalah data Bank dan proses pendebetan dana pembayar ada di sisi Bank, sehingga status final akan selalu ada di sisi Bank. Normalnya saat terjadi proses pembayaran, di sisi Payment Gateway akan menunggu informasi dari Bank untuk status final nya.

Jadi ketika ada status transaksi anda yang sudah sukses atau Completed tapi di Bank berbeda statusnya, maka sudah saatnya anda panik

Just kidding 😁 tapi anda memang harus segera melakukan review dari proses yang berjalan karena hal seperti itu tidak diperbolehkan terjadi.

Summary

Jadi dari penjelasan di atas, seperti itu gambaran umum proses rekonsiliasi dilakukan. Kebanyakan saat ini rekonsiliasi dilakukan oleh sebuah engine, sebut saja namanya Budi Engine, karena yang melakukan rekon adalah manusia bernama Budi. Dan ketika data yang harus direkonsoliasi semakin banyak, terkadang keputusan yang diambil adalah hire orang seperti Budi lagi lebih banyak.

Padahal umumnya proses rekonsiliasi kebanyakan dilakukan perusahaan berbasis teknologi, tapi cara menangani problem rekon seperti perusahaan outsourcing: add more people.

Jadi perang nya bukan hanya perang mencocokan data, tetapi juga tentang perang mengubah mindset dan prioritas untuk mengembangkan sistem otomatis yang efisien. C’mon guys, masa rekon masih pake vlookup terus😩

Sandi Fajariadi mempunyai pengalaman di product development terutama terkait payment, emoney dan ewallet. Di waktu senggang membuat aplikasi mobile seperti QRIS wantuno dan juga pernah mengeluarkan beberapa lagu di album juga, cekidot channel Youtube-nya di sini.

--

--

Sandi Fajariadi

10+ years deep in payment systems, always curious about QRIS. Let's talk!