GH GambleHub

部分的および完全なrefands

TL;DR(ドクター)

Refandはキャプチャされた量の逆操作です。fullはトランザクション全体を閉じ、部分的に部分を返します(部分的な系列を最大で完全にすることができます)。重要:ソースへの払い戻し、厳格なidempotence、 reason logging、 webhooks/retrasによるオーケストレーション。返金レート、TtR p95、返金エラーを測定し、自動調整を通じて重複/矛盾を排除します。

1)用語と基本的な違い

全額返金-コミット金額全体('refund_amount=capture_amount')を返します。
部分払い戻し-部分('0 <refund_amount <capture_amount')を返し、残りの部分は合計'capture_amount'になります。
ソースへの払い戻し-元の支払い方法/レールに戻ります(規制優先/必須)。
Void-キャプチャするキャンセル(レールでサポートされている場合)は、refandとは見なされません。
逆転/チャージバック-あなたのイニシアチブ外の銀行/鉄道メカニック(紛争、チャージバック)-refandと混同しないでください。

2) full vs partialを発行する場合

フル:
  • 注文/サービス全体のキャンセル、書き込みの重複、システムエラー。
  • サービスが提供されていない場合(消費者/規制当局の規則に従って)必須。
部分的な:
  • サービスの部分的なキャンセル、比例調整(割引、遅延の補償)。
  • 技術的な制限レール(動作あたりの最大量)-部分的なシリーズ。
  • ポストファクトム手数料の保留(規制が許可されている場合)-iGamingではそれほど頻繁ではありません。
解決策:「reason_code × method × conference」マトリックス→policy=full部分的な両方、限界、必要な承認のレベル。

3)ポリシーと制限

Refund-to-source=デフォルトでtrue;例外-MLRO/コンプライアンスケース(ログ付き)。
カットオフ:レファンドはキャプチャからN日間(方法/管轄によって)許可されます。
最高の部分的な計算:支払(通常K ≤ 5)ごとの部分的なK以下。
最低の部分的な量:技術的な最低の柵/PSPより低くない。

承認マトリックス:
  • サポートエージェント:部分的な≤ X、完全な≤ Y。
  • マネージャー/ファイナンス:オーバー限界、クロスメソッド例外。
  • 繰り返される試みの冷却オフ(反跳ね返り)。

4)アーキテクチャとイベントフロー

コンポーネント:
  • Payment Orchestratorはステータスの真実の源です。
  • 返金サービス-API、 idempotency、リトレイのオーケストレーション、ロギング。
  • PSPアダプタ-メソッドインテグレーション。
  • 和解-自動和解、DLQ、修正。
  • 元帳/会計-投稿、脱退者、クリアリングでクリア。
  • リスク/コンプライアンス-制裁/SoFは物議を醸すシナリオでチェックします。
シーケンス(部分/完全):
  • 1。'払い戻し。'(API)検証→(必要に応じて限度、残高、ポリシー、KYC/SoF)を作成します。
  • 2.Генерация idempotency_key ('hash (payment_id+refund_amount+reason+nonce)')
  • 3.PSPコール→'PENDING'。
  • 4.Webhook/polling→'SUCCESS'/'FAILED';タイムアウト時-同じキーで再試行します。
  • 5.カフカでのイベントの公開→元帳、BI、アラート。
  • 6.自動調整:'provider_refund_id'をレジストリにマッピングします。

5) Idempotencyおよび反テイク

idempotency storage (KV/Redis+TTL)を通じたすべてのロジック。
payment_idのキー×理由×量(必要に応じて'partial_index')です。
リトレイは同じキーを使用します。
平行部分は、集計量の行レベルのロック/楽観的バージョンによって保護されます。

擬似コード:
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)支払の柵の特徴

カード(Visa/Mastercard)

完全/部分的なサポート;多くの場合、多少部分的です。TtRはクライアントの銀行(T+1……T+5 bp)。
成功についてのWebhookはすぐに来ますが、退会の登録は遅れているかもしれません→サポートテンプレートで説明します。

A2A/Open・バンキング/RTP

頻繁に即刻のリターン(逆転/信用プッシュ);一部のプロバイダはフルまたは1部分のみをサポートしています。
元のアカウントへの厳密な拘束;refund-to-sourceが必要です。

電子財布

正常な完全な/部分的;TtR分;部分的および最小限度額。

バウチャー/プリペイド

通常、→ポリシーは払い戻しからソースへの返金には使用できません。内部ウォレットへの返金またはバウチャーの再発行(プロバイダが方法を知っている場合)。コンプライアンス条項が必要です。

暗号化

レール-揮発性;refand方法として好ましく使用されない。許可されている場合:文書化されたレートと手数料で同じアドレス/交換に戻ります。AMLスクリーニング。

8)会計、和解、財務

元帳:キャプチャ時の「DR 収益/CRキャッシュ」の投稿。返金-writeback。部分は比例的に反映されます。
認識:iGamingでは、refandは対応する期間(会計ポリシー)のGGRを削減します。
和解:毎日の和解のmerchant_refund_id ↔ provider_refund_id'、ステータス、金額、FXレート。
FX:コースのロジック(キャプチャ時または払い戻し時)を修正します。スプレッドグリッドを保持します。

9) KPI、ターゲット、アラート(返金の健全性)

返金率='Refunded_Tx/ Captured_Tx'。
Refund Amount Ratio='Refunded_Amount/ Captured_Amount'。
TtR p95=p95 ('credited_at-created_at')メソッドによる。

返金エラー率='失敗/試行'(<0。3%).

返金元%≥ 95%(利用可能な場合)。
ダブルリファンドインシデント=0。

アラート:
  • 'TtR p95'はP2→メソッドでSLOより高い。
  • 1つのプロバイダ/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への放電の遅延の可能性をほぼ瞬時に説明します。
オフィスのステータス:'発行された→プロセスで→返された';登録予定日を表示します。
理由(reason_code)-人間が読める:'重複書き込みオフ'、'サービスのキャンセル'、'部分的な補償'。
セルフサービス部分-制限と明確なルールでのみ安全。

12)リスクとコンプライアンス

反洗浄:refandは別のチャネルへの出力に回すべきではないです;MLRO承認で例外をコミットします。
制裁/REP:「赤い」アカウント/詳細に開始されたリターンのために-必須の検証。
DSAR/Retention:リファンドのトレースをリテンションポリシー内に保存します。
ローカルルール:返品のための用語と手順(例えば、消費者規制)-ポリシーに反映されます。

13)頻繁な間違いとそれらを回避する方法

idempotencyと繰り返しwebhook→store idem key/statusの欠如によるダブルリファンド、残高を確認します。
部分的な>バランス→行ロック/楽観的なバージョンと厳密なチェック。
コンプライアンス許可なしのクロスメソッド払い戻し→ソースへの払い戻しに違反します。
レポートのvoidと払い戻しの混合→KPIの歪み。
PSPと台帳の間にオートチェック→ブラックホールはありません。

14)プレイブック

プロバイダのサージが戻る→承認の失敗をチェック/重複をキャプチャし、フェイルオーバーをオンにし、PSPに連絡します。
質量部分補償(キャンペーン)→部分制限を引き上げ、グループ運営を可能にし、和解を強化する。
Webhooksエラー→ポーリングに切り替え、TTL idempotencyを増やし、自動リファンドを延期します。
Refund-to-source exception (rare)→MLROエスカレーション、ドキュメント化されたペイアウト、および'comp_approved=true'。

15)テストケース(UAT/Prod)

1.1回のキャプチャ後の全額払い戻し→バランスを正しくリセットします。
2.バッチ部分(3 ×)→合計≤キャプチャ;残りの部分はいっぱいになります。
3.Idempotency-同じクエリ→1の結果を繰り返します。
4.Webhook-bounce: 3つの同一通知→1つの書き込み/クレジット。
5.和解:人工ミスマッチ→アラートと自動補正。
6.権利の制限:エージェントは部分的な制限を超えることはできません。
7.カットオフ:レイトリファンドの試み→正しい失敗とロギング。

16)実装チェックリスト

  • 管轄/方法によるフル/部分+返金-ソースポリシー。
  • Idempotency、後退、webhookとポーリング、DLQ。
  • 返却とreason_codeに残留するデータモデル。
  • 元帳と毎日の自動調整。
  • KPI/ダッシュボード:返金率、TtR、エラー、二重返金=0。
  • 権利とアプリケーションマトリックス、サポートテンプレート。
  • UATテストケースと生産レベルのアラート。

概要

リファンドマネジメントは、リファンドツーソース、idempotency、透明データモデル、自動調整、理解可能な部分的/完全なポリシーなど、プロセスの厳密な規律です。このようなファンダメンタルズでは、TtRを低く抑え、エラーをゼロに近く、重複を不可能にし、コンプライアンスとファイナンスをビジネス目標と同期させます。

Contact

お問い合わせ

ご質問やサポートが必要な場合はお気軽にご連絡ください。いつでもお手伝いします!

Telegram
@Gamble_GC
統合を開始

Email は 必須。Telegram または WhatsApp は 任意

お名前 任意
Email 任意
件名 任意
メッセージ 任意
Telegram 任意
@
Telegram を入力いただいた場合、Email に加えてそちらにもご連絡します。
WhatsApp 任意
形式:+国番号と電話番号(例:+81XXXXXXXXX)。

ボタンを押すことで、データ処理に同意したものとみなされます。