GH GambleHub

Kısmi ve tam refandlar

TL; DR

Refand, yakalanan miktarın ters işlemidir. Tam tüm işlemi kapatır, kısmi bir parça döndürür (tamına kadar kısmi bir seri olabilir). Kritik: kaynağa geri ödeme, sıkı idempotence, neden günlüğü ve webhooks/retras ile orkestrasyon. Geri Ödeme Oranını, TtR p95, Geri Ödeme Hatasını ölçün ve otomatik mutabakatlar yoluyla kopyaları/tutarsızlıkları ortadan kaldırın.

1) Şartlar ve temel farklılıklar

Tam Geri Ödeme - Taahhüt edilen tutarın tamamını iade eder ('geri ödeme _ miktar = capture_amount').
Kısmi Geri Ödeme - bir parça döndürür ('0 <refund_amount <capture_amount'), geri kalanı toplam' capture _ amount 'kısmi sağlar.
Kaynağa Geri Ödeme - orijinal ödeme yöntemine/raylara geri dönün (düzenleyici tercih edilen/zorunlu).
Void - yakalama iptali (raylarla destekleniyorsa), bir refand olarak kabul edilmez.
Ters/Ters ibraz - girişiminizin dışındaki banka/demiryolu mekaniği (anlaşmazlıklar, ters ibrazlar) - refand ile karıştırılmamalıdır.

2) Tam ve kısmi ne zaman verilir

Tam:
  • Tüm siparişi/hizmeti iptal et, yinelenen yazma, sistem hatası.
  • Hizmet verilmiyorsa zorunlu (tüketici/düzenleyici kurallarına göre).
Kısmi:
  • Hizmetin kısmi iptali, orantılı ayarlamalar (indirimler, gecikmeler için tazminat).
  • Teknik sınırlar raylar (çalışma başına maksimum miktar) - kısmi seri.
  • Post-factum komisyon stopajı (düzenlemelere izin verilen yerlerde) - iGaming'de daha az sıklıkta.
Çözüm: 'reason _ code × method × jurisdiction' matrisini dikin - politika = tamKısmiHer ikisi de, sınırlar, gerekli onay seviyesi.

3) Politikalar ve sınırlar

Kaynağa geri ödeme = varsayılan olarak true; İstisnalar - MLRO/uyumluluk durumları (günlüğe kaydedilmiş) aracılığıyla.
Cut-off: Refands (yöntem/yargı tarafından) yakalama N gün izin verilir.
Maks. Kısmi Sayım: Ödeme başına K kısmi sayıdan fazla değildir (genellikle K ≤ 5).
Min Kısmi Miktar: Teknik minimum ray/PSP'den daha düşük değildir.

Onay Matrisi:
  • Destek ajanı: kısmi ≤ X, tam ≤ Y.
  • Yönetici/Finans: aşırı limitler, yöntemler arası istisnalar.
  • Tekrarlanan denemelerde soğuma (anti-bounce).

4) Mimari ve olay akışı

Bileşenler:
  • Ödeme Orkestratörü statü gerçeğinin kaynağıdır.
  • Geri Ödeme Hizmeti - API, idempotency, retrays düzenlenmesi, günlüğe kaydetme.
  • PSP Adaptörleri - Yöntem Entegrasyonları.
  • Uzlaşma - otomatik mutabakatlar, DLQ, düzeltmeler.
  • Defter/Muhasebe - ilanlar, defektörler, açıklıklarla temizleme.
  • Risk/Uyum - Yaptırımlar/SoF tartışmalı senaryolarda kontrol eder.
Dizi (kısmi/tam):

1. 'Geri ödeme. Create '(API) validation> (limit, balance, policy, gerekirse KYC/SoF).

2. Генерация idempotency_key ('hash (payment_id + refund_amount + reason + nonce)').

3. PSP çağrısı - 'PENDING'.

4. Webhook/yoklama - 'BAŞARI'/' BAŞARISIZ'; Zaman aşımı olduğunda - aynı anahtarla yeniden dener.

5. Olayın Kafka'da yayınlanması - Ledger, BI, uyarılar.

6. Otomatik mutabakat: kayıt defterine 'provider _ refund _ id' eşlemesi.

5) Idempotency ve anti-takes

Aynı refand iki kez yatırılamaz: idempotency depolama yoluyla tüm mantık (KV/Redis + TTL).
payment_id × miktarı × nedeni (ve gerekirse 'partial _ index') üzerindeki anahtarlar.
Retray'ler aynı anahtarı kullanır.
Paralel kısmi, toplam miktarlardaki satır düzeyinde kilitlerle/iyimser versiyonla korunur.

Sözde kod:
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) Veri modeli (minimum yeterli)

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) Ödeme raylarındaki özellikler

Kartlar (Visa/Mastercard)

Tam/kısmi destek; Genellikle biraz kısmi; TtR müşterinin bankasına bağlıdır (T + 1... T + 5 bp).
Başarı hakkında Webhooks hızlı bir şekilde gelir, ancak deşarj üzerine kayıt geç olabilir - destek şablonlarında açıklıyoruz.

A2A/Open Bankacılık/RTP

Genellikle anında geri dönüş (ters/kredi itme); Bazı sağlayıcılar sadece tam veya 1 kısmi destekler.
Orijinal hesaba sıkı sıkıya bağlı; kaynağa geri ödeme gereklidir.

Elektronik cüzdanlar

Normal tam/kısmi; TtR dakika; Kısmi ve minimum miktar limitleri.

Kuponlar/Ön ödemeli

Genellikle, kaynak geri ödeme politikası kullanılamaz: Dahili cüzdana geri dönün veya yeniden kupon verin (sağlayıcı nasıl yapılacağını biliyorsa). Uyumluluk maddeleri gerektirir.

Kripto

Raylar - uçucu; Tercihen refand yöntemi olarak kullanılmaz. İzin verilirse: belgelenmiş oran ve komisyonlarla aynı adrese/borsaya dönün; AML taraması.

8) Muhasebe, uzlaşma ve finans

Ledger: Yakalamada "DR Revenue/CR Cash" ilanları; Geri ödeme - writeback. Kısmi orantılı olarak yansıtılır.
Tanıma: iGaming'de refand, ilgili dönemin GGR'sini azaltır (muhasebe politikası).
Mutabakat: günlük mutabakatlar 'merchant _ refund _ id ↔ provider_refund_id', statüler, miktarlar, döviz kurları.
FX: uygulanabilir olduğunda kursların mantığını (yakalama sırasında veya geri ödeme sırasında) düzeltin; Yayılma ızgarasını tut.

9) KPI'lar, hedefler ve uyarılar (Sağlık İadesi)

Geri Ödeme Oranı = 'Refunded _ Tx/ Captured_Tx'.
İade Miktarı Oranı = 'İade Edildi _ Miktar/ Captured_Amount'.
TtR p95 = p95 ('credited _ at - created_at') yöntemiyle.
Geri Ödeme Hatası Oranı = 'Başarısız/Denendi' (<0. 3%).
Kaynağa Geri Ödeme % ≥ %95 (varsa).
Çift Geri Ödeme Olayları = 0.

Uyarılar:
  • 'TtR p95', P2 yöntemi ile SLO'dan daha yüksektir.
  • Bir sağlayıcıda "Geri Ödeme Oranı'ile ani artışlar/BIN - P1 (check grabs/double).
  • Herhangi bir 'Çift İade> 0' - P0 (otomatik refandların hemen dondurulması).

10) SQL dilimleri

10. 1 Refand profili

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 Kısmi için denge kontrolü

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 ve destek

Mesaj şablonları yöntemlerle: Biz kartlara deşarj olası gecikme açıklamak, A2A - neredeyse anında.
Ofisteki durumlar: 'Verilen - Süreçte - İade Edildi'; Beklenen kayıt tarihini göster.
Nedenler (reason_code) - insan tarafından okunabilir: 'Yinelenen yazma', 'Hizmet iptali', 'Kısmi tazminat'.
Self servis kısmi - yalnızca sınırları ve açık kuralları olan güvenli.

12) Risk ve uyum

Anti-aklama: refand alternatif bir kanala çıkış haline dönüşmemelidir; MLRO onayı ile istisnalar işlemek.
Yaptırımlar/REP: "kırmızı" hesaplara/ayrıntılara başlatılan iadeler için - zorunlu doğrulama.
DSAR/Retention - Bir retention politikası dahilinde refands izlerini depolayın.
Yerel kurallar: iadeler için şartlar ve prosedür (örneğin, tüketici düzenlemeleri) - politikaya yansıtılır.

13) Sık yapılan hatalar ve bunlardan nasıl kaçınılacağı

Idempotency ve tekrarlanan webhooks eksikliği nedeniyle çift refand - mağaza idem anahtarı/durumu, bakiyeyi kontrol edin.
Kısmi> balance> row-lock/optimist versiyon ve sıkı kontroller.
Uyumluluk izni olmadan çapraz yöntem geri ödemesi - kaynağa geri ödemeyi ihlal eder.
Raporlarda boşluk ve geri ödeme karıştırma - KPI'ların bozulması.
Otomatik kontrol yok - PSP ve defteriniz arasında kara delikler var.

14) Oyun kitapları

Sağlayıcı iadelerindeki artış - yetkilendirme hatalarını kontrol edin/kopyaları yakalayın, yük devretmeyi açın, PSP ile iletişim kurun.
Toplu kısmi tazminat (kampanya) - kısmi sınırı yükseltin, grup işlemlerini etkinleştirin ve mutabakatları güçlendirin.
Webhooks hatası - yoklamaya geçin, TTL idempotensisini artırın, otomatik refandları erteleyin.
Kaynağa geri ödeme istisnası (nadir) - MLRO artışı, belgelenmiş ödeme ve 'comp _ approved = true'.

15) Test Durumları (UAT/Prod)

1. Bir çekimden sonra tam geri ödeme - dengeyi doğru şekilde sıfırlar.
2. Toplu kısmi (3 ×) - toplam ≤ yakalama; Geri kalanı için dolu.
3. Idempotency - Aynı sorguyu tekrarlayın - 1 sonuç.
4. Webhook-bounce: 3 özdeş bildirim - bir yazma/kredi.
5. Mutabakatlar: yapay uyumsuzluk - uyarı ve otomatik düzeltme.
6. Hakların kısıtlanması: Acente kısmi sınırı aşamaz.
7. Kesme: geç refand girişimi - doğru başarısızlık ve günlüğe kaydetme.

16) Uygulama kontrol listesi

  • yargı yetkisi/yöntemiyle tam/kısmi + kaynağa geri ödeme politikaları.
  • Idempotency, inzivalar, webhooks ve yoklama, DLQ.
  • Geri dönmek ve reason_code için kalıntı ile veri modeli.
  • Defter ve günlük otomatik mutabakatlar.
  • KPI/gösterge tablosu: Geri Ödeme Oranı, TtR, Hata, Çift Geri Ödeme = 0.
  • Haklar ve uygulama matrisi, destek şablonları.
  • UAT test durumları ve üretim seviyesi uyarıları.

Özet

Refand yönetimi, süreçlerin sıkı bir disiplinidir: kaynağa geri ödeme, idempotency, şeffaf veri modeli, otomatik mutabakat ve anlaşılabilir kısmi/tam politikalar. Bu temellerle, TtR'yi düşük tutarsınız, hatalar sıfıra yakındır, kopyalar imkansızdır ve uyumluluk ve finans iş hedefleriyle senkronize edilir.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Telegram
@Gamble_GC
Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.