GH GambleHub

부분적이고 완벽한 개조

TL; DR

거부는 캡처 된 금액에 대한 역 작업입니다. 전체 트랜잭션을 완전히 닫고 부분을 부분적으로 반환합니다 (최대 부분 시리즈 일 수 있음). 중요: 웹 후크/레트라로 환불, 엄격한 dempotence, 이유 로깅 및 오케스트레이션. 측정 환율, TtR p95, 환불 오류 및 자동 조정을 통한 중복/불일치를 제거합니다.

1) 용어와 근본적인 차이

전액 환불-전체 커밋 된 금액 ('refund _ amount = capture _ amount') 을 반환합니다.
부분 환불-부품 ('0 <refund _ amount <capture _ amount') 을 반환하고 나머지는 총 'capture _ amount' 에 부분적으로 허용합니다.
출처 환불-원래 지불 방법/레일 (규제 선호/필수) 로 돌아갑니다.
공허-캡처 취소 (레일로지지되는 경우) 는 수리로 간주되지 않습니다.
Reversal/Chargeback-이니셔티브 외부의 은행/철도 기계공 (분쟁, 청구서) -수리와 혼동하지 마십시오.

2) 전체 발행 시점 대 부분

전체:
  • 전체 주문/서비스 취소, 중복 기록 해제, 시스템 오류.
  • 서비스가 제공되지 않은 경우 필수 (소비자/규제 기관의 규칙에 따라).
부분:
  • 서비스의 일부 취소, 비례 조정 (할인, 지연에 대한 보상).
  • 기술 제한 레일 (작동 당 최대 양) -부분 시리즈.
  • 사후 커미션 원천 징수 (규제가 허용되는 경우) -iGaming에서는 덜 빈번합니다.
솔루션: 'reason _ code × 메소드 × 관할권' 매트릭스 → 정책 = 전체부분두 가지 모두 한계, 필요한 승인 수준.

3) 정책 및 한계

환불 소스 = 기본적으로 참이다; 예외-MLRO/준수 사례를 통한 (로그).
컷오프: 리판은 캡처 (방법/관할권에 의해) 에서 N 일이 허용됩니다.
Max Partial Count: 결제 당 K 부분 (일반적으로 K 할 수 있음) 을 넘지 않습니다.
최소 부분 금액: 기술 최소 레일/PSP보다 낮지 않습니다.

승인 매트릭스:
  • 지원 에이전트: 부분
  • 관리자/재무: 한도 초과, 방법 간 예외.
  • 반복 시도시 냉각 (바운스 방지).

4) 건축 및 이벤트 흐름

구성 요소:
  • 지불 오케스트레이터는 지위 진실의 원천입니다.
  • 환불 서비스-API, demempotency, 배송 오케스트레이션, 로깅.
  • PSP 어댑터-방법 통합.
  • 조정-자동 조정, DLQ, 수정.
  • 원장/회계-게시물, 탈북자, 정리로 정리.
  • 위험/준수-논란의 여지가있는 시나리오에서 제재/SoF 점검.
시퀀스 (부분/전체):

1. '환불. '(API) 검증 → (한계, 균형, 정책, 필요한 경우 KYC/SoF) 생성

2. (PHP 3 = 3.0.6, PHP 4)

3. PSP 호출 → 'PENDING'.

4. 웹훅/폴링 → 'SUCCESS '/' FAILED'; 타임 아웃시-동일한 키로 배상합니다.

5. BI의 Kafka → Ledger에 이벤트를 게시합니다.

6. 자동 조정: 'provider _ refund _ id' 를 레지스트리에 매핑합니다.

5) 이념과 테이크 방지

demempotency storage (KV/Redis + TTL) 를 통한 모든 논리와 동일한 수정을 두 번 수정 할 수는 없습니다.
결제 _ id × 금액 × 이유 (및 필요한 경우 '부분 _ 인덱스') 의 키.
배상은 동일한 키를 사용합니다.
병렬 부분은 총 수준의 행 레벨 잠금/낙관적 버전으로 보호됩니다.

의사 코드:
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).
성공에 관한 웹 후크는 빠르지 만 퇴원 등록은 늦을 수 있습니다 → 지원 템플릿에서 설명합니다.

A2A/오픈 뱅킹/RTP

종종 즉각적인 수익 (반전/신용 푸시); 일부 공급자는 전체 또는 1 부분 만 지원합니다.
원래 계정에 대한 엄격한 구속력; 소스 환불이 필요합니다.

전자 지갑

정상 전체/부분; TtR 분; 부분 및 최소 금액 제한.

바우처/선불

일반적으로 → 정책은 소스로 환불 할 수 없습니다. 내부 지갑으로 돌아 가거나 바우처를 다시 발행하십시오 (공급자가 방법을 알고있는 경우). 규정 준수 조항이 필요합니다.

크립토

레일-휘발성; 바람직하게는 수정 방법으로 사용되지 않는 것이 좋습니다 허용되는 경우: 문서화 된 요금 및 수수료로 동일한 주소/교환으로 돌아갑니다. AML 스크리닝.

8) 회계, 화해 및 재무

원장: 캡처시 'DR Revenue/CR Cash' 게시물; 환불-작성. 부분은 비례 적으로 반영됩니다.
인식: iGaming에서 개조는 해당 기간의 GGR (회계 정책) 을 줄입니다.
조정: 일일 조정 '상인 _ refund _ id 제공자 _ refund _ id', 상태, 금액, FX 요금.

FX: 해당되는 경우 코스의 논리 (캡처 시점 또는 환불 시점) 를 수정합니다. 스프레드 그리드를 유지하십시오

9) KPI, 대상 및 경고 (환불 건강)

Refund Rate = 'Refunded _ Tx/Captured _ Tx'.
Amount Ratio = 'Refunded _ Amount/Captured _ Amount' 를 환불하십시오.
방법별로 TtR p95 = p95 ('credit _ at-producted _ at').
환불 오류 속도 = '실패/시도' (<0. 3%).

사용 가능한 경우 환원 대 소스%

이중 환불 사건 = 0.

경고:
  • 'TtR p95' 는 P2 → 방법에 의해 SLO보다 높습니다.
  • 하나의 공급자/BIN → P1에서 '환불 률' 에 의한 스파이크 (확인 횡령/복식).
  • 모든 '더블 환불> 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 로의 배출 지연 가능성을 설명합니다.
사무실의 상태: '발행 → 프로세스 내 → 반환'; 예상 입대 날짜를 보여줍니다.
이유 (이유 _ 코드) - 사람이 읽을 수있는 사람: '중복 쓰기', '서비스 취소', '부분 보상'.
셀프 서비스 부분-한계와 명확한 규칙으로 만 안전합니다.

12) 위험 및 준수

세탁 방지: 수리가 대체 채널로 출력되어서는 안됩니다. MLRO 승인과 함께 예외를 커밋하십시오.
제재/REP: "빨간색" 계정/세부 정보로 시작된 반품-필수 확인.
DSAR/보존-보존 정책 내에서 매장의 미량의 수리.
현지 규칙: 반품 조건 (예: 소비자 규정) -정책에 반영됩니다.

13) 빈번한 실수와 피하는 방법

demotency 부족과 반복 웹 후크 → idem 키/상태로 인한 이중 수리, 잔액을 확인하십시오.
부분> 균형 → 행 잠금/낙관적 버전 및 엄격한 점검.
규정 준수 권한없이 교차 메소드 환불 → 환불 소스를 위반합니다.
KPI의 보고서 → 왜곡에서 무효 및 환불 혼합.
PSP와 원장 사이에는 자동 점검 → 블랙홀이 없습니다.

14) 플레이 북

공급자의 급증으로 → 승인 실패/캡처 중복을 확인하고 장애를 켜고 PSP와 연락하십시오.
대량 부분 보상 (캠페인) → 부분 제한을 높이고 그룹 운영을 가능하게하며 조정을 강화합니다.
Webhooks 오류 → 폴링으로 전환하고 TTL demempotency를 높이고 자동 리팬드를 연기합니다.
환불 소스 예외 (희귀) → MLRO 에스컬레이션, 문서화 된 지불 및 'comp _ execived = 참'.

15) 테스트 사례 (UAT/Prod)

1. 캡처 후 전액 환불 → 잔액을 올바르게 재설정합니다.
2. 배치 부분 (3 ×) → 합계 지정 캡처; 그런 다음 나머지는 가득 차 있습니다.
3. Idempotency-동일한 쿼리 → 1 결과를 반복하십시오.
4. 웹 후크 바운스: 3 개의 동일한 알림 → 하나의 쓰기/크레딧.
5. 조정: 인공 불일치 → 경고 및 자동 교정.
6. 권리 제한: 에이전트는 부분 제한을 초과 할 수 없습니다.
7. 컷오프: 늦은 수리 시도 → 정확한 실패 및 로깅.

16) 구현 점검표

  • 관할권/방법에 의하여 전체/부분 + 환불 소스 정책.
  • 이념성, 퇴각, 웹 후크 및 폴링, DLQ.
  • 반환 및 이유 _ 코드가 남아있는 데이터 모델.
  • 원장 및 일일 자동 조정.
  • KPI/대시 보드: 환불 속도, TtR, 오류, 이중 환불 = 0.
  • 권리 및 응용 프로그램 매트릭스, 템플릿을 지원합니다.
  • UAT 테스트 사례 및 생산 수준 경고.

요약

거부 관리는 환불 소스, demempotency, 투명한 데이터 모델, 자동 조정 및 이해할 수있는 부분/전체 정책과 같은 엄격한 프로세스 분야입니다. 이러한 기본 사항을 사용하면 TtR을 낮게 유지하고 오류를 0에 가깝게 유지하고 복제가 불가능하며 비즈니스 목표와 규정 준수 및 재무가 동기화

Contact

문의하기

질문이나 지원이 필요하시면 언제든지 연락하십시오.우리는 항상 도울 준비가 되어 있습니다!

Telegram
@Gamble_GC
통합 시작

Email — 필수. Telegram 또는 WhatsApp — 선택 사항.

이름 선택 사항
Email 선택 사항
제목 선택 사항
메시지 선택 사항
Telegram 선택 사항
@
Telegram을 입력하시면 Email과 함께 Telegram에서도 답변드립니다.
WhatsApp 선택 사항
형식: +국가 코드 + 번호 (예: +82XXXXXXXXX).

버튼을 클릭하면 데이터 처리에 동의하는 것으로 간주됩니다.