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

Ambil profil dan saldo

GET member-info dengan token QR yang sedang berlaku di layar mitra.

Potong satu poin

POST deduct-cp dengan nomor rujukan baru. Saldo mitra benar benar berkurang.

Tebus ganda pada detik yang sama

Dua kasir menekan bayar bersamaan untuk mitra yang sama. Kunci Redis harus meloloskan satu dan menolak satunya.

Kirim ulang nota yang sama

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 detik

Log panggilan

Kontrak endpoint

yang dipanggil middleware Node.js
GET/api/as400/member-info

Menukar 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
}
POST/api/as400/deduct-cp

Memotong 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" }

Kunci per mitra

Satu mitra hanya boleh punya satu potongan berjalan. Permintaan kedua ditolak dengan 423, bukan diantre, supaya kasir tahu keadaannya sekarang juga.

Kunci idempoten

Rujukan nota disimpan bersama hasilnya. Percobaan ulang mengembalikan hasil lama, sehingga jaringan yang timbul tenggelam tidak pernah memotong dua kali.

Buku besar lokal

Setiap potongan dicatat di sisi MNA lengkap dengan waktu tanggap. Kalau AS/400 dan catatan lokal berbeda, selisihnya ketahuan pada hari yang sama.