आंशिक और पूर्ण refands
टीएल; डीआर
कब्जा की गई राशि पर रिवर्स ऑपरेशन है। पूर्ण पूरे लेनदेन को बंद कर देता है, आंशिक रूप से एक भाग लौटाता है (पूर्ण तक एक आंशिक श्रृंखला हो सकती है)। महत्वपूर्ण: रिफंड-टू-सोर्स, सख्त पहचान, कारण लॉगिंग, और वेबहुक/रेट्रास के साथ ऑर्केस्ट्रेशन। माप वापसी दर, टीटीआर पी 95, रिफंड त्रुटि और ऑटो-सामंजस्य के माध्यम से डुप्लिकेट/विसंगतियों को समाप्त करना।
1) शर्तें और मौलिक अंतर
पूर्ण वापसी - पूरी प्रतिबद्ध राशि लौटाता है ('वापसी _ राशि = capture_amount')।
आंशिक वापसी - एक भाग लौटाता है ('0 स्रोत को वापसी - मूल भुगतान विधि/रेल (विनियामक पसंदीदा/अनिवार्य) पर वापसी। कैप्चर करने के लिए शून्य - रद्द करना (यदि रेल द्वारा समर्थित), एक रिफंड नहीं माना जाता है। रिवर्सल/चार्जबैक - आपकी पहल (विवाद, चार्जबैक) के बाहर बैंक/रेल यांत्रिकी - रिफंड के साथ भ्रमित नहीं होना। 2) जब पूर्ण बनाम आंशिक जारी करने के लिए 3) नीतियां और सीमाएं रिफंड-टू-सोर्स = डिफ़ॉल्ट रूप से सही; अपवाद - MLRO/अनुपालन मामलों (लॉग किए गए) के माध्यम से। कट-ऑफ: कैप्चर से एन दिनों की अनुमति है (विधि/अधिकार क्षेत्र द्वारा)। अधिकतम आंशिक गणना: प्रति भुगतान K आंशिक से अधिक नहीं (आमतौर पर K ≤ 5)। न्यूनतम आंशिक राशि: तकनीकी न्यूनतम रेल/पीएसपी से कम नहीं। 4) वास्तुकला और घटना प्रवाह 1. 'वापसी। '(API) सत्यापन → (सीमा, संतुलन, नीति, KYC/SoF यदि आवश्यक हो) बनाएं। 2. ('हैश ( + + कारण + नॉन)')। 3. PSP कॉल → 'PENDING'। 4. वेबहुक/मतदान → 'सफलता '/' असफलता'; जब टाइमआउट - एक ही कुंजी के साथ पीछे हटता है। 5. काफ्का → लेजर, बीआई, अलर्ट में घटना का प्रकाशन। 6. स्वतः सामंजस्य: रजिस्ट्री के लिए 'प्रदाता _ refund _ id' मैपिंग। 5) आइडेम्पोटेंसी और एंटी-टेक एक ही रिफंड को दो बार श्रेय नहीं दिया जा सकता है: सभी तर्क idempotency भंडारण (KV/Redis + TTL) के माध्यम से। payment_id × मात्रा × कारण पर कुंजी (और, यदि आवश्यक हो, 'आंशिक _ सूचकांक')। पुनर्विचार एक ही कुंजी का उपयोग करते हैं। समानांतर आंशिक को कुल मात्रा पर पंक्ति-स्तर के ताले/आशावादी संस्करण द्वारा संरक्षित किया जाता है। 6) डेटा मॉडल (न्यूनतम पर्याप्त) 7) भुगतान रेल पर सुविधाएँ कार्ड (वीजा/मास्टरकार्ड) पूर्ण/आंशिक समर्थन; अक्सर कुछ आंशिक; TtR ग्राहक के बैंक (T + 1... पर निर्भर करता है T + 5 bp)। सफलता के बारे में वेबहुक जल्दी आते हैं, लेकिन डिस्चार्ज पर नामांकन देर हो सकती है - हम समर्थन टेम्पलेट में समझाते हैं। अक्सर त्वरित वापसी (उलट/क्रेडिट धक्का); कुछ प्रदाता केवल पूर्ण या 1 आंशिक समर्थन करते हैं मूल खाते के लिए सख्त बाध्यकारी; रिफंड-टू-सोर्स की आवश्यकता है। सामान्य पूर्ण/आंशिक; टीटीआर मिनट; आंशिक और न्यूनतम राशि सीमा। आमतौर पर, रिफंड-टू-सोर्स के लिए पॉलिसी उपलब्ध नहीं है: आंतरिक वॉलेट पर लौटें या वाउचर को फिर से जारी करें (यदि प्रदाता जानता है कि कैसे)। अनुपालन खंड की आवश्यकता है। रेल - अस्थिर; अधिमानतः एक रिफ्रैंड विधि के रूप में उपयोग नहीं किया जाता है। यदि अनुमति दी जाती है: प्रलेखित दर और आयोगों के साथ एक ही पते पर लौटें/विनिमय; एएमएल स्क्रीनिंग। 8) लेखा, सुलह और वित्त लेजर: 'डीआर रेवेन्यू/सीआर कैश' कैप्चर पर पोस्टिंग; रिफंड - राइटबैक पर। आंशिक आनुपातिक रूप से परावर्तित होता है। मान्यता: iGaming में, Refand इसी अवधि (लेखांकन नीति) के GGR को कम करता है। सुलह: दैनिक सामंजस्य 'मर्चेंट _ रिफंड _ id ↔ provider_refund_id', स्टेटस, राशि, एफएक्स दरें। FX: पाठ्यक्रमों के तर्क को ठीक करें (कब्जा करने के समय या वापसी के समय), जहां लागू होता है; प्रसार ग्रिड पकड़ो। 9) केपीआई, लक्ष्य और अलर्ट (वापसी स्वास्थ्य) रिफंड रेट = 'रिफंडेड _ Tx/ Captured_Tx'। रिफंड राशि अनुपात = 'रिफंडेड _ राशि/ Captured_Amount'। TtR p95 = p95 ('क्रेडिट _ at - created_at') विधि से। रिफंड त्रुटि दर = 'असफल/प्रयास' (<0। 3%). रिफंड-टू-सोर्स% ≥ 95% (जहां उपलब्ध है)। डबल रिफंड घटनाएं = 0। 10) SQL स्लाइस 10. 1 Refand प्रोफ़ाइल 10. आंशिक के लिए 2 संतुलन नियंत्रण 11) यूएक्स और समर्थन संदेश टेम्पलेट विधियों द्वारा: हम कार्ड, ए 2 ए - लगभग तुरंत निर्वहन पर संभावित देरी की व्याख्या करते हैं। कार्यालय में स्टेटस: 'जारी → प्रक्रिया में → वापस'; अपेक्षित सूची दिखाएँ। कारण (reason_code) - मानव पढ़ ने योग्य: 'डुप्लिकेट राइट-ऑफ', 'सेवा रद्द', 'आंशिक मुआवजा'। स्व-सेवा आंशिक - केवल सीमा और स्पष्ट नियमों के साथ सुरक्षित। 12) जोखिम और अनुपालन एंटी-लॉन्ड्रिंग: रिफंड को वैकल्पिक चैनल के आउटपुट में नहीं बदलना चाहिए; MLRO अनुमोदन के साथ अपवाद प्रतिबद्ध करें। प्रतिबंध/आरईपी: "लाल" खातों/विवरणों के लिए शुरू किए गए रिटर्न के लिए - अनिवार्य सत्यापन। DSAR/रिटेंशन - एक प्रतिधारण नीति के भीतर Refands के स्टोर निशान। स्थानीय नियम: रिटर्न के लिए शर्तें और प्रक्रिया (उदाहरण के लिए, उपभोक्ता विनियम) - नीति में परिलक 13) बार-बार गलतियाँ और उनसे कैसे बचें दोहराव और बार-बार वेबहूक की कमी के कारण डबल रिफंड - आइडेम कुंजी/स्थिति स्टोर करें, संतुलन की जांच करें। आंशिक> संतुलन → रो-लॉक/आशावादी संस्करण और सख्त जांच। अनुपालन अनुमति के बिना क्रॉस-मेथड रिफंड - रिफंड-टू-सोर्स का उल्लंघन करता है। रिपोर्टों में शून्य और वापसी का मिश्रण - केपीआई की विकृति। PSP और आपके खाते के बीच कोई ऑटो-चेक - ब्लैक होल नहीं हैं। 14) प्लेबुक प्रदाता रिटर्न में वृद्धि - प्राधिकरण विफलताओं की जाँच करें/डुप्लिकेट पर कब्जा करें, असफलता को चालू करें, पीएसपी के साथ संपर्क करें। बड़े पैमाने पर आंशिक-मुआवजा (अभियान) → आंशिक सीमा बढ़ाएं, समूह संचालन को सक्षम करें और सामंजस्य को मजबूत करें। वेबहुक त्रुटि - मतदान पर स्विच करें, टीटीएल पहचान बढ़ाएं, ऑटो-रिफंड को स्थगित करें। रिफंड-टू-सोर्स अपवाद (दुर्लभ) → एमएलआरओ वृद्धि, प्रलेखित भुगतान, और 'कॉम्प _ अनुमोदित = सही'। 15) टेस्ट केस (यूएटी/प्रोड) 1. एक पर कब्जा करने के बाद पूर्ण वापसी - संतुलन को सही ढंग से रीसेट करता है। 2. बैच आंशिक (3 ×) → योग ≤ कैप्चर; फिर शेष के लिए भरा हुआ। 3. पहचान - एक ही क्वेरी → 1 परिणाम दोहराएं। 4. वेबहुक-उछाल: 3 समान सूचनाएं - एक राइट-ऑफ/क्रेडिट। 5. सामंजस्य: कृत्रिम बेमेल → अलर्ट और ऑटो-सुधार। 6. अधिकारों का प्रतिबंध: एजेंट आंशिक सीमा से अधिक नहीं हो सकता है। 7. कट-ऑफ: लेट रिफंड प्रयास - सही विफलता और लॉगिंग। 16) कार्यान्वयन चेकलिस्ट Refand प्रबंधन प्रक्रियाओं का एक सख्त अनुशासन है: रिफंड-टू-सोर्स, आइडेम्पोटेंसी, पारदर्शी डेटा मॉडल, ऑटो-मेल और समझने योग्य आंशिक/पूर्ण नीतियां। इस तरह के मूल सिद्धांतों के साथ, आप टीटीआर को कम रखते हैं, शून्य के पास त्रुटियां, असंभव की नकल करता है, और व्यावसायिक लक्ष्यों के साथ अनुपालन और वित्त को सिंक्रनाइज़करता है।
आंशिक:
अनुक्रम (आंशिक/पूर्ण):
python def refund(payment_id, amount, reason, idem_key):
if idem_store. exists(idem_key): return idem_store. get(idem_key)
with tx():
p = db. get_payment(payment_id, for_update=True)
assert p. captured_amount - p. refunded_amount >= amount > 0 r = p. create_refund(amount, reason, status='PENDING', idem_key=idem_key)
resp = psp. refund(p. provider_txid, amount, idem_key)
return finalize(r, resp. status, resp. ext_id)json
{
"payment_id": "pay_123",
"captured_amount": 150. 00,
"currency": "EUR",
"refunded_amount": 40. 00,
"refunds": [
{
"refund_id": "rf_001",
"type": "partial full",
"amount": 20. 00,
"reason_code": "PARTIAL_SERVICE",
"idempotency_key": "idem_a1",
"status": "PENDING SUCCESS FAILED",
"provider_refund_id": "psp_rf_9xz",
"created_at": "2025-11-03T12:00:00Z",
"credited_at": "2025-11-03T15:05:00Z",
"notes": "ticket #456"
}
],
"flags": {
"refund_to_source": true,
"jurisdiction": "EEA",
"kyc_tier_required": "tier2"
}
}A2A/Open बैंकिंग/आरटीपी
इलेक्ट्रॉनिक पर्स
वाउचर/प्रीपेड
क्रिप्टो
sql
SELECT
DATE_TRUNC('day', r. created_at) AS d,
method_code, provider,
COUNT() FILTER (WHERE r. status='SUCCESS') AS refunds_ok,
COUNT() FILTER (WHERE r. status='FAILED') AS refunds_fail,
SUM(r. amount) AS refunded_amount,
PERCENTILE_CONT(0. 95) WITHIN GROUP (ORDER BY EXTRACT(EPOCH FROM (r. credited_at - r. created_at))) AS ttr_p95_sec
FROM refunds r
JOIN payments p ON p. payment_id = r. payment_id
GROUP BY 1,2,3;sql
SELECT p. payment_id,
p. captured_amount,
SUM(r. amount) AS refunded_sum,
(p. captured_amount - SUM(r. amount)) AS refundable_left
FROM payments p
LEFT JOIN refunds r ON r. payment_id = p. payment_id AND r. status IN ('SUCCESS','PENDING')
GROUP BY 1,2
HAVING (p. captured_amount - SUM(r. amount)) < 0;
सारांश