পেমেন্ট রিকনসিলিয়েশন ত্রুটি সমাধান করা

একজন ক্লায়েন্টের ২,০০০ ডলার লোকসান হয়েছে। তাদের ফিন্যান্স লিড সেই ঘাটতি খুঁজে বের করতে চার রাত ব্যয় করেছেন।

সমস্যাটি ছিল একটি রিট্রাই জব (retry job)-এর কারণে। সিস্টেমটি ১২০টি পেমেন্ট দুবার প্রসেস করেছিল। এটি গ্রাহকদের কাছ থেকে পুনরায় টাকা নেয়নি, বরং লেজারে (ledger) কেবল ডাবল রেকর্ড যোগ করেছিল।

আমরা একটি আইডেমপোটেন্সি লেয়ার (idempotency layer) ব্যবহার করে এটি সমাধান করেছি। এটি নিশ্চিত করে যে একটি পেমেন্ট কেবল একবারই প্রসেস হবে।

আমরা যেভাবে এটি করেছি:

  • ডাবল রিকোয়েস্ট বন্ধ করতে আমরা একটি Redis lock ব্যবহার করেছি।
  • ব্যাকআপ হিসেবে আমরা ডাটাবেসে একটি unique index যোগ করেছি।
  • আমরা গেটওয়ে নাম এবং transaction ID সহ একটি key ব্যবহার করেছি।

আমরা এক্সচেঞ্জ রেট বা বিনিময় হারের সমস্যাটিও সমাধান করেছি। সিস্টেমটি লাইভ রেট ব্যবহার করছিল। রেট খুব দ্রুত পরিবর্তিত হয়, যার ফলে হিসাবের অমিল তৈরি হচ্ছিল।

এখন অর্ডার শুরু হওয়ার সময় আমরা রেটটি লক করে দিই। গ্রাহক একটি নির্দিষ্ট দাম দেখেন এবং ফিন্যান্স টিমও একই দাম দেখতে পায়।

আমরা একটি দৈনিক রিপোর্ট তৈরির ব্যবস্থাও করেছি। এটি ব্যাংকের CSV ফাইলের সাথে আমাদের রেকর্ডের তুলনা করে। এর ফলে মাসিক কাজের সময় ১৫ ঘণ্টা থেকে কমে মাত্র ২ ঘণ্টায় নেমে এসেছে।

এক্সেল (Excel) এবং রাত জাগার ওপর নির্ভর করা বন্ধ করুন। পেমেন্ট ত্রুটিগুলো আসলে ডিজাইনের সমস্যা।

ডাটাবেস ইনডেক্স দিয়ে শুরু করুন। ব্যবসার পরিধি বাড়ার সাথে সাথে Redis lock যোগ করুন। কখনোই ধরে নেবেন না যে একটি পেমেন্ট নোটিফিকেশন কেবল একবারই আসবে।

উৎস: https://dev.to/yanmoheluo/daigou-code-how-we-solved-payment-reconciliation-nightmares-in-cross-border-order-management-3df7