অধ্যায় ৫.৪ — পেমেন্ট ও রসিদ
১. উদ্দেশ্য
দুই-দিকের পেমেন্ট প্রবাহ: - গ্রাহক থেকে — রসিদ (incoming) - সরবরাহকারীকে — পেআউট (outgoing)
২. চ্যানেল
| চ্যানেল | ব্যবহার |
|---|---|
| পেমেন্ট গেটওয়ে | অনলাইন কার্ড পেমেন্ট (Stripe, SSLCommerz, bKash) |
| ব্যাঙ্ক ওয়্যার | বড় কর্পোরেট পেমেন্ট |
| নগদ | শারীরিক ক্যাশ ড্রয়ার |
| কাস্টমার ক্রেডিট | গ্রাহক ওয়ালেট/অ্যাকাউন্ট ব্যালেন্স |
| ভাউচার | পূর্ব-প্রদানকৃত voucher রিডেমপশন |
৩. পেমেন্ট প্রবাহ — গ্রাহক থেকে
১. গেটওয়ে থেকে payment.succeeded webhook প্রাপ্ত
২. Idempotency কী চেক — ইতিমধ্যে প্রসেস হয়েছে?
৩. ডিবি ট্রানজ্যাকশন:
- INSERT payments রেকর্ড (CAPTURED স্টেট)
- ইনভয়েস(গুলো)তে অ্যাপ্লিকেশন (invoice_payments)
- JE পোস্ট: Dr Bank/Gateway / Cr AR
- ইনভয়েস স্ট্যাটাস আপডেট (PAID/PARTIALLY_PAID)
- পেমেন্ট রিকনসিলিয়েশনের জন্য মার্ক
- COMMIT
৪. গ্রাহককে রসিদ ইমেইল
৪. JE প্যাটার্ন
গ্রাহক ব্যাঙ্ক ট্রান্সফার:
Debit 1013 Bank Accounts X
Credit 1101 AR — Customer X
গ্রাহক গেটওয়ে পেমেন্ট:
Debit 1015 Gateway in Transit X
Credit 1101 AR — Customer X
পরে গেটওয়ে সেটেলমেন্ট:
Debit 1013 Bank Accounts X − F (নেট)
Debit 5026 Gateway Fees F (ফি)
Credit 1015 Gateway in Transit X
কাস্টমার ক্রেডিট ওয়ালেট:
Debit 2091 Customer Credit Balances X
Credit 1101 AR — Customer X
৫. পেআউট (সরবরাহকারীকে)
আগ্রিম-অনুমোদন (Maker-Checker):
১. Treasury initiator পেআউট ড্রাফট তৈরি
২. সরবরাহকারীর ব্যাঙ্ক ডিটেইল যাচাই (recent change hold চেক)
৩. PENDING_APPROVAL — Treasury approver-এ যাবে
৪. অনুমোদন (with reason)
৫. ব্যাঙ্ক ওয়্যার পাঠানো
৬. wire reference রেকর্ড
৭. JE পোস্ট
৮. T+1 দিনে ব্যাঙ্ক confirmation
JE:
পেআউট:
Debit 2001 AP — Suppliers X
Credit 1013 Bank Accounts X
৬. ব্যর্থ পেমেন্ট
- Gateway decline → পেমেন্ট FAILED, ইনভয়েস unchanged
- Chargeback → CHARGEBACK স্ট্যাটাস + investigation flow
- Dispute → DISPUTED স্ট্যাটাস + provision
৭. পেমেন্ট স্ট্যাটাস
INITIATED → AUTHORIZED → CAPTURED → APPLIED → RECONCILED
বিকল্প পথ: FAILED, REFUNDED, CHARGEBACK, DISPUTED।
৮. মাল্টি-অ্যাপ্লিকেশন
একক পেমেন্ট একাধিক ইনভয়েস পরিশোধ করতে পারে:
invoice_payments টেবিল:
payment_id | invoice_id | applied_amount
PAY-001 | INV-2026-100 | 25,000
PAY-001 | INV-2026-101 | 35,000
(একক BDT 60,000 পেমেন্ট দুই ইনভয়েসে স্প্লিট।)
৯. ওভার-অ্যাপ্লিকেশন প্রতিরোধ
applied_amount chk: sum(applied) <= payment.amount। লঙ্ঘন → PAYMENT_INVOICE_OVERAPPLIED ত্রুটি।
১০. সাধারণ ফাঁদ
- ⚠️ Idempotency কী ছাড়া webhook প্রসেসিং — ডবল পেমেন্ট রেকর্ড
- ⚠️ গেটওয়ে ফি কোনো অ্যাকাউন্টে ক্যাপচার না — overstated revenue
- ⚠️ পেআউটে recent bank change hold বাইপাস — ফ্রড ঝুঁকি
- ⚠️ ক্যাশ ড্রয়ার রিকনসিলিয়েশন স্কিপ — চুরি লুকানো যেতে পারে