PRD 3 · Two way sync IBM AS/400
Mesin poin dan kunci transaksi
Halaman ini membuka isi perut integrasi. Setiap pemindaian QR dan setiap potongan poin di POS lewat sini, dan hasilnya terbaca sebagai baris log yang sama dengan yang nanti dikirim middleware Node.js ke iBiz Point Engine.
Uji jalur integrasi
GET member-info dengan token QR yang sedang berlaku di layar mitra.
POST deduct-cp dengan nomor rujukan baru. Saldo mitra benar benar berkurang.
Dua kasir menekan bayar bersamaan untuk mitra yang sama. Kunci Redis harus meloloskan satu dan menolak satunya.
Jaringan putus lalu POS mencoba lagi dengan rujukan yang sama. Kunci idempoten harus mengembalikan hasil lama, bukan memotong dua kali.
Kunci yang sedang dipegang
cp:lock per mitra, TTL 8 detikLog panggilan
Kontrak endpoint
yang dipanggil middleware Node.js/api/as400/member-infoMenukar token QR menjadi profil mitra dan saldo CP. Token yang lewat 30 detik ditolak sebelum menyentuh AS/400.
{
"token": "SH|SH-100238|58412345|K3P9QZ",
"outlet": "SUB"
}
→ 200 {
"distributorId": "SH-100238",
"name": "Lianawati Tanuwijaya",
"tier": "DIAMOND",
"cpBalance": 128.5
}
/api/as400/deduct-cpMemotong poin di balik kunci per mitra. Rujukan nota dipakai sebagai kunci idempoten, jadi percobaan ulang aman.
{
"memberId": "SH-100238",
"cp": 15,
"ref": "REF-SUB-7K2M91",
"invoiceNo": "SUB/2609/0042"
}
→ 200 { "balance": 113.5 }
→ 423 { "code": "LOCKED" }
→ 409 { "code": "INSUFFICIENT" }
Satu mitra hanya boleh punya satu potongan berjalan. Permintaan kedua ditolak dengan 423, bukan diantre, supaya kasir tahu keadaannya sekarang juga.
Rujukan nota disimpan bersama hasilnya. Percobaan ulang mengembalikan hasil lama, sehingga jaringan yang timbul tenggelam tidak pernah memotong dua kali.
Setiap potongan dicatat di sisi MNA lengkap dengan waktu tanggap. Kalau AS/400 dan catatan lokal berbeda, selisihnya ketahuan pada hari yang sama.