بازسازی جزئی و کامل
TL ؛ دکتر متخصص
Refand عملیات معکوس در مقدار گرفته شده است. کامل بسته کل معامله، بازده جزئی بخشی (می تواند یک سری جزئی تا کامل). بحرانی: بازپرداخت به منبع، idempotence دقیق، ورود به سیستم دلیل، و ارکستراسیون با webhooks/retras. اندازه گیری نرخ بازپرداخت، TtR p95، خطای بازپرداخت و حذف تکراری/ناسازگاری از طریق آشتی خودکار.
1) شرایط و تفاوت های اساسی
بازپرداخت کامل - کل مبلغ تعهد شده را برمی گرداند ("مقدار بازپرداخت = capture_amount').
بازپرداخت جزئی - بخشی ("0 <refund_amount <capture_amount') را باز می گرداند، اجازه می دهد تا بقیه جزئی به کل" capture _ amount ".
بازپرداخت به منبع - بازگشت به روش پرداخت/ریل اصلی (ترجیح قانونی/اجباری).
Void - لغو ضبط (اگر توسط ریل پشتیبانی می شود)، به عنوان یک refand در نظر گرفته نمی شود.
برگشت/بازپرداخت - مکانیک بانک/راه آهن خارج از ابتکار شما (اختلافات، بازپرداخت) - نباید با بازپرداخت اشتباه گرفته شود.
2) هنگامی که به صدور کامل در مقابل جزئی
پر کردن:- لغو کل سفارش/سرویس، نوشتن تکراری، خطای سیستم.
- اجباری اگر خدمات ارائه نشده است (با توجه به قوانین مصرف کننده/تنظیم کننده).
- لغو جزئی از خدمات، تنظیمات متناسب (تخفیف، جبران تاخیر).
- ریل محدودیت های فنی (حداکثر مقدار در هر عملیات) - سری جزئی.
- کمیسیون پس از حقایق خودداری (که در آن نظارتی مجاز است) - کمتر در iGaming.
3) سیاست ها و محدودیت ها
بازپرداخت به منبع = درست به طور پیش فرض ؛ استثنائات - از طریق موارد MLRO/انطباق (وارد شده).
Cut-off: refands N روز از ضبط (با روش/صلاحیت) مجاز است.
حداکثر تعداد جزئی: بیش از K جزئی در هر پرداخت (معمولا K ≤ 5).
حداقل مقدار جزئی: کمتر از حداقل راه آهن فنی/PSP نیست.
- عامل پشتیبانی: ≤ جزئی X، پر ≤ Y.
- مدیر/امور مالی: بیش از محدودیت، استثنا متقابل روش.
- خنک کردن در تلاش های مکرر (ضد گزاف گویی).
4) معماری و جریان رویداد
قطعات:- پرداخت Orchestrator منبع حقیقت وضعیت است.
- خدمات بازپرداخت - API، idempotency، ارکستراسیون از retrays، ورود به سیستم.
- آداپتورهای PSP - ادغام روش.
- آشتی - آشتی خودکار، DLQ، اصلاحات.
- لجر/حسابداری - پست، defectors، پاکسازی با clearings.
- ریسک/انطباق - تحریم ها/SoF در سناریوهای بحث برانگیز بررسی می شود.
1. بازپرداخت. ایجاد اعتبار (API) → (محدودیت ها، تعادل، سیاست، KYC/SoF در صورت لزوم).
2. Генерация idempotency_key ('هش (payment_id + refund_amount + دلیل + nonce)').
3. تماس PSP → «در انتظار».
4. Webhook/نظرسنجی → 'موفقیت '/' شکست خورده'; هنگامی که timeout - retrays با همان کلید.
5. انتشار این رویداد در کافکا → لجر، BI، هشدار.
6. خودکار آشتی: نقشه برداری 'provider _ refund _ id' به رجیستری.
5) Idempotency و ضد طول می کشد
همان refand نمی تواند دو بار اعتبار: تمام منطق از طریق ذخیره سازی idempotency (KV/Redis + TTL).
کلید در payment_id × مقدار × دلیل (و، در صورت لزوم، 'partial _ index').
افزونه ها از همان کلید استفاده می کنند.
Parallel partial توسط قفل های سطح ردیف/نسخه خوش بینانه در مقادیر کل محافظت می شود.
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)
6) مدل داده (حداقل کافی)
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"
}
}
7) ویژگی های ریل پرداخت
کارت (ویزا/مسترکارت)
پشتیبانی کامل/جزئی ؛ اغلب تا حدودی جزئی ؛ TtR به بانک مشتری بستگی دارد (T + 1... T + 5 bp)
Webhooks در مورد موفقیت به سرعت می آیند، اما ثبت نام در تخلیه ممکن است دیر شود → ما در قالب های پشتیبانی توضیح می دهیم.
اغلب بازگشت فوری (فشار معکوس/اعتباری) ؛ برخی از ارائه دهندگان تنها پشتیبانی کامل یا 1 جزئی.
اتصال شدید به حساب اصلی ؛ بازپرداخت به منبع مورد نیاز است.
کیف پول الکترونیکی
عادی کامل/جزئی ؛ دقیقه TtR ؛ محدودیت های جزئی و حداقل مقدار.
کوپن/پیش پرداخت
معمولا, سیاست → برای بازپرداخت به منبع در دسترس نیست: بازگشت به کیف پول داخلی و یا دوباره شماره کوپن (اگر ارائه دهنده می داند که چگونه). نیاز به مقررات انطباق.
رمزنگاری
ریل - فرار ؛ ترجیحا به عنوان یک روش جایگزین استفاده نشود. در صورت امکان: بازگشت به همان آدرس/مبادله با نرخ مستند و کمیسیون ؛ غربالگری AML.
8) حسابداری، آشتی و امور مالی
لجر: پست های «DR Revenue/CR Cash» در هنگام ضبط ؛ در بازپرداخت - نوشتن. جزئی به طور متناسب منعکس شده است.
شناخت: در iGaming، بازپرداخت GGR دوره مربوطه (سیاست حسابداری) را کاهش می دهد.
آشتی: بازرگان آشتی روزانه _ بازپرداخت _ id ↔ provider_refund_id'، وضعیت، مقدار، نرخ FX.
FX: منطق دوره ها (در زمان ضبط یا در زمان بازپرداخت)، در صورت لزوم ؛ شبکه پخش را نگه دارید.
9) KPI ها، اهداف و هشدارها (سلامت بازپرداخت)
نرخ بازپرداخت = 'بازپرداخت _ Tx/ Captured_Tx'.
نسبت مبلغ بازپرداخت = 'مبلغ بازپرداخت شده/ Captured_Amount'.
TtR p95 = p95 ('credited _ at - created_at') با روش.
نرخ خطای بازپرداخت = 'شکست خورده/تلاش' (<0. 3%).
بازپرداخت به منبع٪ ≥ 95٪ (در صورت موجود بودن).
حوادث بازپرداخت دو برابر = 0.
- TtR p95 'بالاتر از SLO با روش P2 → است.
- خوشه های «نرخ بازپرداخت» در یک ارائه دهنده/BIN → P1 (بررسی grabs/دو برابر).
- هر بازپرداخت دوگانه> 0 → P0 (انجماد فوری خودکار بازپرداخت).
10) برش های SQL
10. 1 مشخصات مجدد
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;
10. 2 کنترل تعادل برای جزئی
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;
11) UX و پشتیبانی
قالب پیام های روش: ما توضیح تاخیر ممکن است در تخلیه به کارت، A2A - تقریبا بلافاصله.
وضعیت در دفتر: «صادر → در حال پردازش → بازگشت» ؛ تاریخ ثبت نام مورد انتظار را نشان دهید.
دلایل (reason_code) - قابل خواندن انسان: «نوشتن تکراری»، «لغو سرویس»، «جبران جزئی».
سلف سرویس جزئی - امن تنها با محدودیت ها و قوانین روشن است.
12) ریسک و انطباق
ضد پولشویی: بازسازی نباید به خروجی یک کانال جایگزین تبدیل شود. استثنائات را با تایید MLRO مرتکب شوید.
تحریم/REP: برای بازگشت آغاز به «قرمز» حساب/جزئیات - تایید اجباری.
DSAR/Retention - ذخیره آثار refands در یک سیاست حفظ.
قوانین محلی: شرایط و روش برای بازده (به عنوان مثال، مقررات مصرف کننده) - منعکس شده در سیاست.
13) اشتباهات مکرر و چگونگی اجتناب از آنها
به دلیل عدم وجود idempointency و webhooks مکرر → کلید/وضعیت فروشگاه idem، تعادل را بررسی کنید.
جزئی> تعادل → ردیف قفل/نسخه خوش بینانه و چک سخت.
بازپرداخت متقابل روش بدون اجازه انطباق → نقض بازپرداخت به منبع.
مخلوط کردن باطل و بازپرداخت در گزارش → اعوجاج KPI ها.
هیچ چک خودکار وجود دارد → سیاه چاله ها بین PSP و دفتر خود را.
14) کتاب های بازی
افزایش در ارائه دهنده بازده → بررسی خرابی مجوز/ضبط تکراری، به نوبه خود در شکست، تماس با PSP.
جبران خسارت جزئی (کمپین) → افزایش محدودیت جزئی، فعال کردن عملیات گروهی، و تقویت آشتی.
خطای Webhooks → سوئیچ به رای گیری، افزایش idempotency TTL، به تعویق انداختن خودکار refands.
استثناء بازپرداخت به منبع (نادر) → تشدید MLRO، پرداخت مستند و 'comp _ approved = true'.
15) موارد تست (UAT/Prod)
1. بازپرداخت کامل پس از یک ضبط → به درستی تعادل را بازنشانی می کند.
2. جزئی دسته ای (3 ×) → جمع ≤ ضبط ؛ سپس بقیه را پر کنید.
3. Idempotency - تکرار همان پرس و جو → 1 نتیجه.
4. Webhook-bounce: 3 اعلان یکسان → یک نوشتن/اعتبار.
5. تطبیق: عدم تطابق مصنوعی → هشدار و تصحیح خودکار.
6. محدودیت حقوق: نماینده نمی تواند از حد جزئی تجاوز کند.
7. Cut-off: تلاش دیررس → خرابی صحیح و ورود به سیستم.
16) چک لیست پیاده سازی
- سیاست های کامل/جزئی + بازپرداخت به منبع توسط صلاحیت/روش.
- Idempotency، عقب نشینی، Webhooks و نظرسنجی، DLQ.
- مدل داده با باقی مانده برای بازگشت و reason_code.
- دفتر کل و روزانه خودکار آشتی.
- KPI/داشبورد: نرخ بازپرداخت، TtR، خطا، دو بار بازپرداخت = 0.
- حقوق و ماتریس برنامه، قالب های پشتیبانی.
- موارد آزمون UAT و هشدار سطح تولید.
خلاصه
مدیریت Refand یک رشته دقیق از فرآیندها است: بازپرداخت به منبع، idempotency، مدل داده شفاف، خودکار آشتی و سیاست های جزئی/کامل قابل درک است. با چنین اصولی، شما TtR را پایین نگه می دارید، اشتباهات نزدیک به صفر، تکراری غیر ممکن است، و انطباق و مالی هماهنگ با اهداف کسب و کار.