Catatan lapangan

Mengoperasikan armada ATM kripto: uang tunai, kaset, kepatuhan

ATM kripto adalah mesin tunai yang berjalan dua arah: pelanggan memasukkan uang kertas dan menerima kripto, atau mengirim kripto dan mengambil uang kertas. Menjalankan armadanya adalah bisnis logistik yang berbalut antarmuka perangkat lunak. Layarnya menampilkan kuotasi dan konfirmasi, tetapi bagian tersulitnya fisik — uang tunai di dalam kaset, mesin berdiri di tempat yang tidak Anda datangi, dan pertukaran di setiap kabinet yang harus cocok hingga sen terakhir. Siapa pun yang menganggap ATM kripto sebagai aplikasi baru melihat separuh yang mudah.

Jadi tulisan ini membedah sisi operasionalnya: dua subsistem di dalam kabinet, pertukaran di balik kaca, kaset yang tak pernah muncul di demo, masalah peramalan yang muncul pada sebuah armada, dan disiplin mengendalikan serta merekonsiliasi mesin yang tidak bisa Anda lihat.

Dua mesin dalam satu kabinet

ATM kripto sebenarnya dua subsistem yang disatukan: mesin penanganan uang tunai — penerima uang, validator, dispenser atau recycler, dan kaset penyimpan uang kertas — serta terminal kripto — wallet, koneksi jaringan, dan layar yang menampilkan kuotasi dan konfirmasi. Pembelian berjalan dari tunai ke kripto: pelanggan memasukkan uang kertas, validator menghitung dan menumpuknya, lalu mesin mengirim kripto ke wallet pelanggan. Penjualan berjalan dari kripto ke tunai: pelanggan mengirim kripto ke alamat mesin dan, setelah transfer terkonfirmasi, dispenser menghitung dan mengeluarkan uang kertas dari kaset. Semua yang sulit ada di titik temu kedua bagian itu, karena uang kertas bersifat fisik dan tak bisa dibatalkan setelah ditumpuk, sementara kripto bersifat digital dan tak bisa dibatalkan setelah terkonfirmasi — dan mesin tidak boleh mengikat salah satu sisi sebelum sisi lainnya pasti.

Pertukaran di depan kaca

Di setiap mesin terjadi sebuah pertukaran, dan pertukaran itu tunduk pada disiplin locked-quote yang sama dengan terminal konter: layar menampilkan kurs, menahannya selama sesi dengan hitung mundur, dan pelanggan bertransaksi sesuai kuotasi tersebut atau sesi akan meminta kuotasi ulang. Urutan adalah model keamanannya. Pada pembelian, mesin baru melepas kripto setelah uang kertas divalidasi dan masuk ke penumpuk — bukan sekadar dimasukkan, karena lembaran yang masih di celah escrow belum menjadi uang. Pada penjualan, mesin tidak mengeluarkan selembar pun uang kertas sebelum transfer masuk memiliki konfirmasi yang cukup, karena uang kertas yang sudah keluar tidak bisa ditarik kembali. Tindakan yang tidak dapat dibatalkan selalu dilakukan terakhir, hanya setelah sisi lainnya final. Jika urutan ini salah, Anda membuat mesin yang menyerahkan kripto untuk uang kertas yang tak pernah ia simpan, atau uang tunai untuk transfer yang tak pernah masuk.

Kaset: separuh fisik yang tak pernah didemokan

Uang tunai disimpan dalam kaset — boks uang kertas yang dapat dilepas, biasanya satu per denominasi, yang dipasang ke dalam mesin. Recycler dapat membayarkan kembali uang kertas yang tadi diterimanya; dispenser yang lebih sederhana hanya mengambil dari kaset yang telah diisi operator. Setiap kaset memiliki dua angka: jumlah yang diyakini perangkat lunak dan jumlah yang benar secara fisik. Seluruh tugas operator, diringkas dalam satu kalimat, adalah menjaga kedua angka itu tetap sama. Setiap uang kertas yang diterima menambah hitungan versi sistem, setiap lembar yang dikeluarkan menguranginya, dan kunjungan pengambilan uang tunai mengatur ulang hitungan itu berdasarkan penghitungan fisik. Ketika hitungan sistem dan hasil hitung berbeda saat pengambilan, selisih itu adalah angka terpenting dalam operasional armada — bisa berupa salah hitung, kemacetan, atau sesuatu yang lebih buruk, dan ia ditemukan dengan menghitung, bukan dengan berharap.

Level kas, dan mengapa mengelola armada adalah soal peramalan

Satu mesin adalah pekerjaan rutin; satu armada adalah masalah peramalan. Dispenser yang kehabisan uang membuat pelanggan pulang dengan tangan kosong, dan penerima uang kertas yang stacker-nya penuh berhenti menerima uang tunai — keduanya adalah gangguan layanan, dan tak satu pun menyalakan lampu error yang disadari orang yang lewat, karena mesin sekadar tidak bisa menyelesaikan transaksi yang diinginkan pelanggan. Karena itu konsol melacak level kas per kaset per mesin dan mengubahnya menjadi rute: kabinet mana yang perlu diisi dan mana yang perlu dikosongkan, sebelum salah satunya mencapai batas. Armada yang dikelola dengan baik pada dasarnya adalah jadwal cash-in-transit — siapa menuju kabinet mana, membawa berapa banyak, pada hari apa — dan perangkat lunak ada untuk menyusun jadwal itu dari level aktual, bukan tebakan dan kepanikan Jumat sore.

Kunci jarak jauh, dan bertindak dari konsol

Mesin-mesin berdiri di tempat yang tidak dijangkau operator — lobi, area toko, atau konkursus stasiun — sehingga kendali harus dilakukan dari jarak jauh. Dari konsol, operator dapat mengunci satu mesin atau seluruh armada seketika, dan mesin yang terkunci tidak menyelesaikan transaksi baru apa pun. Penguncian adalah respons terhadap kemacetan, dugaan kerusakan, selisih kas, atau mesin yang harus dibekukan selama seseorang menuju lokasinya. Kunci dan kaset tetap di tempatnya; mesin hanya berhenti bertransaksi sampai seorang petugas membukanya. Disiplinnya: tindakan berisiko dilakukan dari konsol dengan alasan yang dicantumkan dan tercatat dalam log — bukan oleh seseorang yang mengetuk layar mesin di lapangan tanpa catatan, sehingga tak ada yang bisa menelusuri kembali apa yang dilakukan dan mengapa.

Armada ATM kripto bukanlah produk perangkat lunak dengan sedikit perangkat keras tambahan. Ini adalah operasi logistik kas dengan layar di bagian depan — dan setiap angka di layar itu harus cocok dengan uang kertas yang bisa Anda pegang.
— Protocore · Engineering pembayaran

Merekonsiliasi mesin yang tak terlihat

Rekonsiliasi adalah bukti harian bahwa sebuah armada berjalan jujur. Setiap sesi di mesin meninggalkan catatan — uang kertas masuk dan kripto keluar, atau kripto masuk dan uang kertas keluar, lengkap dengan kurs terkunci, alamat wallet, dan konfirmasinya. Jumlahkan sesi sebuah mesin sejak pengambilan terakhir dan Anda mendapatkan kas yang seharusnya ada; hitung kasetnya saat kunjungan dan Anda mendapatkan kas yang sebenarnya ada; keduanya harus bertemu. Sisi kripto direkonsiliasi dengan cara yang sama, terhadap saldo wallet mesin. Armada yang direkonsiliasi per mesin, per hari, menangkap kabinet bermasalah di hari pertama — kemacetan, skimming, salah hitung — alih-alih menemukannya sebagai lubang akhir kuartal yang tak bisa dijelaskan siapa pun. Inti dari buku besar per mesin adalah ia lolos audit justru karena tidak pernah dibiarkan menyimpang.

Kepatuhan adalah tugas operator; perangkat lunak menegakkan dan mencatat

Operator armada ATM kripto memikul kewajibannya. Izin yang harus dimiliki, pemeriksaan identitas yang harus dijalankan, dan batas transaksi yang harus dipatuhi berbeda-beda menurut lokasi mesin, dan semuanya menjadi tanggung jawab operator — bukan perangkat, bukan pula vendor perangkat itu. Yang dilakukan perangkat lunak sengaja dibuat mekanis: menegakkan batas per pelanggan dan per hari yang dikonfigurasi operator, meminta langkah verifikasi identitas yang ditetapkan operator pada ambang yang ditentukan operator, serta mencatat setiap uang kertas, setiap transfer, dan setiap keputusan batas agar operator dapat mempertanggungjawabkan armadanya kemudian. Mesin tidak menentukan kebijakan; ia menerapkan kebijakan operator dengan cara yang sama di setiap kabinet dan mencatat apa yang terjadi. Menyusun kebijakan yang tepat adalah disiplin operator. Kontribusi perangkat lunak adalah membuat kebijakan itu seragam dan dapat diaudit di seluruh armada yang tak mungkin diawasi sekaligus oleh satu orang.

Batas yang jujur

Satu mesin di satu lokasi nyaris tidak membutuhkan konsol armada — spreadsheet dan penghitungan mingguan sudah cukup. Perangkat ini baru sepadan pada skala armada, ketika angka-angkanya tak lagi muat di satu kepala: level kas di banyak kabinet, hitungan kaset yang harus direkonsiliasi per lokasi, kunci jarak jauh untuk mesin yang berjarak berjam-jam, dan buku besar per mesin yang tahan audit. Dengan satu kabinet, ini hanya beban tambahan; dengan dua puluh, jadwal, rekonsiliasi, dan kendali jarak jauh menjadi pembeda antara bisnis dan tumpukan kabinet yang perlahan keluar dari keseimbangan. Konsol armada ada di /products/atm, dan istilah-istilahnya — cassette, recycler, reconciliation, settlement — ada di /glossary.

Punya sistem yang ingin dibangun?

Ceritakan masalahnya. Kami akan kembali dengan arsitektur dan rencana.