GH GambleHub

Częściowe i kompletne refasy

TL; DR

Refand jest odwrotną operacją na wychwytywanej kwocie. Pełny zamyka całą transakcję, częściowy zwraca część (może być częściową serią do pełnej). Krytyczne: zwrot do źródła, ścisła idempotencja, logowanie powodów i orkiestra z hakami/retrasami. Zmierz stawkę zwrotu, TtR p95, błąd zwrotu i wyeliminować duplikaty/niespójności poprzez automatyczne pojednanie.

1) Terminy i podstawowe różnice

Pełny zwrot pieniędzy - zwraca całą zobowiązaną kwotę ('refund _ amount = capture_amount').
Częściowy zwrot pieniędzy - zwraca część ('0 <refund_amount <capture_amount'), umożliwia resztę częściową do całkowitej' capture _ amount '.
Zwrot do źródła - powrót do pierwotnej metody płatności/szyn (preferowane/obowiązkowe).
Nieważność - anulowanie przechwytywania (jeśli obsługiwane przez szyny), nie jest uważane za refand.
Odwrócenie/obciążenie zwrotne - mechanika bankowa/kolejowa poza Twoją inicjatywą (spory, obciążenia zwrotne) - nie mylić z odmową.

2) Kiedy wydać pełny vs częściowy

Pełny opis:
  • Anuluj całe zamówienie/usługę, zduplikowane umorzenie, błąd systemu.
  • Obowiązkowe, jeśli usługa nie jest świadczona (zgodnie z zasadami konsumenta/regulatora).
Częściowe:
  • Częściowe anulowanie usługi, proporcjonalne korekty (rabaty, odszkodowanie za opóźnienia).
  • Granice techniczne szyn (maksymalna ilość na operację) - seria częściowa.
  • Wstrzymywanie prowizji po stronie faktycznej (gdzie dozwolone są przepisy) - rzadziej w iGaming.
Rozwiązanie: uszyć macierz „reason _ code × method × jurisdiction” → policy = fullczęściowyoba, granice, wymagany poziom homologacji.

3) Polityki i ograniczenia

Zwrot do źródła = domyślnie true; wyjątki - poprzez MLRO/przypadki zgodności (rejestrowane).
Odcięcie: refands są dozwolone N dni od wychwytywania (metodą/jurysdykcją).
Maksymalna liczba cząstkowa: nie więcej niż K częściowa za płatność (zazwyczaj K ≤ 5).
Minimalna ilość częściowa: nie niższa niż minimalna techniczna kolej/PSP.

Matryca homologacji:
  • Środek wspomagający: częściowy ≤ X, pełny ≤ Y.
  • Menedżer/Finanse: ponad limity, wyjątki metodologiczne.
  • Chłodzenie przy powtarzających się próbach (anty-bounce).

4) Architektura i przepływ wydarzeń

Komponenty:
  • Orkiestra płatnicza jest źródłem prawdy o statusie.
  • Usługa zwrotu pieniędzy - API, idempotencja, orkiestra retras, logowanie.
  • Adaptery PSP - integracja metod.
  • Pojednanie - automatyczne uzgodnienia, DLQ, korekty.
  • Księgowość/Księgowość - delegowanie, defektory, rozliczanie z rozliczaniem.
  • Ryzyko/zgodność - kontrole sankcji/SOF w kontrowersyjnych scenariuszach.
Sekwencja (częściowa/pełna):
  • 1) "Refundacja. Utwórz '(API) walidacja → (limity, równowaga, polityka, KYC/SoF w razie potrzeby).
  • 2. Менеравий idempotency_key („hash (payment_id + refund_amount + reason + nonce)”).
  • 3. Połączenie PSP → „OCZEKUJĄCE”.
  • 4. Webhook/sondaż → 'SUCCESS '/' FAILED'; kiedy timeout - przekłada się tym samym kluczem.
  • 5. Publikacja wydarzenia w Kafce → Ledger, BI, wpisy.
  • 6. Automatyczne pojednanie: mapowanie 'provider _ refund _ id' do rejestru.

5) Idempotencja i anty-bierze

Ten sam refand nie może być zapisany dwukrotnie: cała logika przez magazyn idempotencji (KV/Redis + TTL).
Klawisze na payment_id × ilość × powód (oraz, w razie potrzeby, „indeks _ częściowy”).
Retray używają tego samego klucza.
Częściowe równoległe są chronione za pomocą blokad poziomu wiersza/wersji optymistycznej na sumarycznych ilościach.

Pseudokoda:
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) Model danych (minimum wystarczające)

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) Cechy dotyczące szyn płatniczych

Karty (Visa/Mastercard)

Obsługa pełna/częściowa; często nieco częściowe; TtR zależy od banku klienta (T + 1... T + 5 pb).
Webhaki o sukcesie przychodzą szybko, ale zapisanie się na zwolnienie może być późno → wyjaśniamy w szablonach wsparcia.

Bankowość A2A/Open/RTP

Często natychmiastowy zwrot (cofnięcie/push kredytu); niektórzy dostawcy obsługują tylko pełny lub 1 częściowy.
ścisłe powiązanie z oryginalnym kontem; wymagany jest zwrot do źródła.

Portfele elektroniczne

Normalny pełny/częściowy; TtR minut; częściowe i minimalne limity kwot.

Vouchery/Prepaid

Zazwyczaj polityka → nie jest dostępna dla zwrotu do źródła: powrót do portfela wewnętrznego lub ponowne wydanie vouchera (jeśli dostawca wie, jak). Wymaga klauzul zgodności.

Krypto

Szyny - lotne; najlepiej nie stosować jako metody refandu. Jeśli dozwolone: powrót do tego samego adresu/wymiany z udokumentowanym kursem i prowizją; Badanie AML.

8) Rachunkowość, pojednanie i finanse

Ledger: „DR Revenue/CR Cash” w momencie wychwytywania; na zwrot - pismo zwrotne. Częściowy odbija się proporcjonalnie.
Rozpoznawanie: w iGamingu refand zmniejsza GGR odpowiedniego okresu (zasady rachunkowości).
Pojednanie: dzienne uzgodnienia handlowca _ refund _ id provider_refund_id', statusy, kwoty, stawki FX.
FX: ustalić logikę kursów (w momencie przejęcia lub w momencie zwrotu), w stosownych przypadkach; Trzymaj siatkę rozprzestrzeniania.

9) KPI, cele i wpisy (zwrot zdrowia)

Stawka zwrotu = 'Refundowany _ Tx/ Captured_Tx'.
Współczynnik kwoty zwrotu = 'Refundowana _ Kwota/ Captured_Amount'.
TtR p95 = p95 ('credited _ at - created_at') metodą.
Stawka błędu zwrotu = 'Failed/Attempted' (<0. 3%).
Zwrot do źródła% ≥ 95% (jeśli jest dostępny).
Przypadki podwójnego zwrotu pieniędzy = 0.

Wpisy:
  • „TtR p95” jest wyższy niż SLO metodą P2 →.
  • Kolce według „Stawki zwrotu” w jednym dostawcy/BIN → P1 (sprawdź chwyty/podwójne).
  • Każdy 'Double Refund> 0' → P0 (natychmiastowe zamrażanie auto-refands).

10) plasterki SQL

10. 1 Profil Refand

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 Kontrola bilansu dla części

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 i wsparcie

Szablony wiadomości metodami: wyjaśniamy możliwe opóźnienie w rozładowaniu kart, A2A - niemal natychmiast.
Statusy w urzędzie: „Wydany → W procesie → Zwrócony”; Pokaż oczekiwaną datę naboru.
Przyczyny (reason_code) - czytelny dla człowieka: „Podwójne umorzenie”, „Anulowanie usługi”, „Częściowe odszkodowanie”.
Samoobsługa częściowy - bezpieczny tylko z limitami i jasnymi zasadami.

12) Ryzyko i zgodność

Przeciwdziałanie praniu: refand nie powinien przekształcać się w wyjście na alternatywny kanał; dopuszcza wyjątki z zatwierdzeniem MLRO.
Sankcje/REP: w przypadku zwrotów zainicjowanych na „czerwonych” rachunkach/szczegółach - obowiązkowa weryfikacja.
DSAR/Retention - Przechowywanie śladów refands w ramach polityki zatrzymywania.
Zasady lokalne: zasady i procedury dotyczące powrotów (na przykład przepisy dotyczące konsumentów) - odzwierciedlone w polityce.

13) Częste błędy i jak ich uniknąć

Podwójna refand z powodu braku idempotencji i powtarzających się haków → przechowywać klucz idem/status, sprawdź równowagę.
Częściowy> saldo → blokada wiersza/wersja optymistyczna i ścisłe kontrole.
Zwrot dokonywany metodą krzyżową bez zgody na zgodność → narusza zwrot do źródła.
Mieszanie nieważności i zwrotu w raportach → zniekształcenie KPI.
Nie ma automatycznych kontroli → czarne dziury między PSP i księgi.

14) Playbooks

Przepięcie dostawcy zwraca → sprawdź awarie autoryzacji/przechwytywanie duplikatów, włącz awarię, skontaktuj się z PSP.
Masowa częściowa kompensacja (kampania) → podnieść częściowy limit, umożliwić operacje grupowe i wzmocnić pojednanie.
Błąd webhooks → przełączyć się do sondażu, zwiększyć idempotencję TTL, odroczyć auto-refands.
Wyjątek od refundacji do źródła (rzadki) → eskalacja MLRO, udokumentowana wypłata oraz „comp _ approved = true”.

15) Skrzynki testowe (UAT/Prod)

1. Pełny zwrot pieniędzy po jednym przechwyceniu → poprawnie zresetuje saldo.
2. Partia częściowa (3 ×) → suma ≤ wychwytywanie; następnie pełna na resztę.
3. Idempotencja - Powtórz to samo zapytanie → 1 wynik.
4. Webhook-bounce: 3 identyczne powiadomienia → jeden odpis/kredyt.
5. Pojednanie: sztuczne niedopasowanie → alert i automatyczna korekta.
6. Ograniczenie praw: agent nie może przekroczyć częściowego limitu.
7. Odcięcie: późna próba refand → poprawna awaria i rejestrowanie.

16) Lista kontrolna wdrażania

  • pełna/częściowa + polityka zwrotu do źródła według jurysdykcji/metody.
  • Idempotence, retreats, webhooks and polling, DLQ.
  • Model danych z pozostałością do zwrotu i reason_code.
  • Księga i codzienne automatyczne pojednanie.
  • KPI/deska rozdzielcza: stawka zwrotu, TtR, błąd, podwójny zwrot pieniędzy = 0.
  • Prawa i matryca aplikacji, szablony wsparcia.
  • Przypadki testów UAT i wpisy na poziomie produkcji.

Podsumowanie

Zarządzanie Refand jest ścisłą dyscypliną procesów: zwrotu do źródła, idempotencji, przejrzystego modelu danych, automatycznego pojednania i zrozumiałej częściowej/pełnej polityki. Dzięki takim podstawom, utrzymujesz niski poziom TtR, błędy bliskie zeru, duplikaty niemożliwe, a zgodność i finanse zsynchronizowane z celami biznesowymi.

Contact

Skontaktuj się z nami

Napisz do nas w każdej sprawie — pytania, wsparcie, konsultacje.Zawsze jesteśmy gotowi pomóc!

Telegram
@Gamble_GC
Rozpocznij integrację

Email jest wymagany. Telegram lub WhatsApp są opcjonalne.

Twoje imię opcjonalne
Email opcjonalne
Temat opcjonalne
Wiadomość opcjonalne
Telegram opcjonalne
@
Jeśli podasz Telegram — odpowiemy także tam, oprócz emaila.
WhatsApp opcjonalne
Format: kod kraju i numer (np. +48XXXXXXXXX).

Klikając przycisk, wyrażasz zgodę na przetwarzanie swoich danych.