GH GambleHub

آشتی پرداخت PSP و گزارش

TL ؛ دکتر متخصص

آشتی دوختن خودکار روزانه دفتر و رویدادهای شما (auth/capture/refund/payout) با گزارش PSP/acquirer/bank است. کلید موفقیت: یک مدل داده واحد، کلید تطبیق قطعی، idempotency دقیق، تحمل مجموع/FX/زمان، صف DLQ برای موارد بحث برانگیز و playbooks تصحیح خودکار. KPI: Rate↓ ناسازگاری Recon، پیری Unreconciled↓، خودکار match%↑.

1) چرا و چه چیزی را بررسی می کنیم

اهداف: تایید درآمد و کمیسیون، تشخیص تکراری/از دست دادن، حل و فصل صحیح روزها و ارزها، کنترل بازپرداخت به منبع، انطباق با حسابرسی/تنظیم کننده.

اشیای آشتی:
  • سپرده ها: «auth → capture → settle»
  • بازپرداخت: کامل/جزئی، وضعیت و مبلغ
  • پرداخت/برداشت: پرداخت روش خروجی
  • هزینه ها و تنظیمات: هزینه های PSP، طرح های تبادل، اصلاحات
  • بازپرداخت/اختلافات: فراتر از ابتکار عمل شما
  • FX/تبدیل: نرخ، گسترش، نقطه ثابت

2) منابع داده

رویدادهای داخلی: اتوبوس رویداد/کافکا، «پرداخت _ تخت»، «بازپرداخت»، «پرداخت»، لجر خود را.

گزارش های PSP (SFTP/API/webhook dump):
  • معاملات (بیانیه های عملیاتی)
  • شهرک ها/دسته ها
  • هزینه ها/اظهارات
  • بازپرداخت/اختلافات
  • پرداخت/OCT/RTP/SEPA ثبت نام
  • بیانیه های بانکی: MT940/CSV/ISO20022 CAMT، آسانسور اعتباری.
💡 ذخیره سازی: فرود → خام → نرمال → همسان شده است. تمام فایل های ورودی - با checksums و نسخه.

3) کلید های تطبیق

درخت کلید اولویت (نزولی در دقت):

1. provider_txid ↔ provider_txid (شناسه PSP منحصر به فرد)

2. idempotency_key/ merchant_reference (اگر در PSP پایدار باشد)

3. (مقدار، ارز، timestamp_bucket، last4/بن، auth_code)

4. لایه فازی: تحمل ± توسط مجموع/زمان، BIN/صادر کننده کشور، خانواده وضعیت

توصیه ها:
  • هر دو «payment _ id» و «provider _ txid» را نگه دارید.
  • برای بازپرداخت جزئی، «sequence _ index» یا «refund _ line _ id» را اضافه کنید.
  • پرداخت های Для - 'پرداخت _ batch _ id + line_id'.
  • برای FX - 'exec _ id' (تبدیل) و منبع نرخ.

4) مدل داده (لایه نرمال)

json
{
"source": "INTERNAL    PSP_TX    PSP_SETTLEMENT    BANK",
"provider": "Acquirer_A",
"payment_id": "pay_123",
"provider_txid": "psp_tx_789",
"kind": "AUTH    CAPTURE    REFUND    PAYOUT    FEE    SETTLEMENT    CHARGEBACK",
"sequence": 0,
"amount": 100. 00,
"currency": "EUR",
"fee_amount": 1. 20,
"fx_rate": 1. 0000,
"fx_src": "PSP    ECB    BANK",
"status": "APPROVED    CAPTURED    SUCCESS    FAILED    SETTLED",
"event_ts": "2025-11-03T12:00:00Z",
"settlement_date": "2025-11-05",
"account": "PSP_MERCHANT_CARD_A",
"matching_keys": {
"provider_txid": "psp_tx_789",
"merchant_ref": "mr_456",
"idem_key": "idem_abc"
},
"hash_row": "sha256(...)"
}

5) فرآیند آشتی (ETL/ارکستراسیون)

1. وارد کردن: ما گزارش های PSP (SFTP/API) را می گیریم، طرح/امضا را تأیید می کنیم، به «خام» ذخیره می کنیم.
2. Normalize: نگاشت فیلد به فرمت واحد (ارز ISO، اعشار، منطقه زمانی UTC).
3. Match: الگوریتمی برای تطبیق درخت کلید با تلرانس.
4. پس از مسابقه: فرم diff (اختلاف) و نوشته های مجله برای دفتر/اصلاحات.
5. حل و فصل: کوک 'PSP _ SETTLEMENT ↔ BANK' (اعتبار به حساب)، پراکنده توسط روز/دسته ای.
6. گزارش: داشبورد، هشدارها ؛ بحث برانگیز در DLQ برای تجزیه دستی/پخش خودکار.

Idempotence: برای هر فایل/صفحه - 'ingest _ id'. بارگذاری مجدد نتیجه را تغییر نمی دهد.

6) تحمل و قوانین

زمان: «± 15 دقیقه» برای معاملات، «± 1 روز» برای حل و فصل.
مقدار: ≤ 0 01 "ارز پایه یا" ≤ 10 bps "برای تفاوت FX/هزینه.
FX: ما اجازه می دهیم اختلاف با بانک اگر منبع نرخ ارز متفاوت باشد ؛ تعمیر 'fx _ src'.
جزئی/چندگانه: مجموع خطوط جزئی/بازپرداخت باید با تعادل داخلی برابر باشد.

7) طبقه بندی تفاوت

نوع تفاوتتوضیحات محصولفعالیت ها
MISSING_INTERNALPSP است، ما نمیایجاد مورد یتیم، بررسی webhooks/retrays
MISSING_PSPما داریم، PSP نداردبررسی وضعیت/تکرار، تماس PSP
AMOUNT_MISMATCHمقدار متفاوت است> تحملاصلاح خودکار/ورود به سیستم، در صورت لزوم تشدید شود
FEE_MISMATCHکمیسیون ها متفاوت استقبول PSP به عنوان «درست» (سیاست) و یا نیاز به توجه داشته باشید اعتبار
STATUS_DRIFTضبط با ما، AUTH با PSPبررسی webhooks ضبط/حل و فصل
تکراریخطوط تکراریDedup توسط «ارائه دهنده _ txid/idempotency _ کلید»
FX_DRIFTدوره های آموزشی متفاوت استتنظیم منبع رسمی، تنظیم P&L
REFUND_OVERبازپرداخت> دستگیر شدواحد فوری، تجزیه دستی، ورود به سیستم اصلاح معکوس

8) دفتر و حسابداری

ضبط: «حسابهای DR دریافتنی/CR درآمد» и «DR نقدی (پس از تسویه )/CR حسابهای دریافتنی»

هزینه: «هزینه DR/CR نقدی یا قابل پرداخت»

بازپرداخت: پست های معکوس طرفدار راتا جزئی

بازپرداخت: حساب های جداگانه و رزرو برای اختلافات

بازنگری FX: ارزیابی روزانه تعادل AR/cache در 'fx _ src _ policy'

9) KPI ها و اهداف

تطابق خودکار% = تطابق خودکار خطوط/تمام خطوط (95% ≥ هدف)

نرخ عدم تطابق Recon = خطوط تفاوت/تمام خطوط (≤ 1-2٪)

P50/p95 روز در DLQ (p95 ≤ 3 روز)

زمان حل و فصل: نسبت دسته های دوخته شده با بانک D-day (≥ 99٪)

دقت هزینه: اختلاف هزینه ارائه دهنده (≤ 0. 1٪ از گردش مالی)

تکراری/حوادث یتیم: هدف برای 0

10) برش های SQL

10. 1 تطبیق provider_txid پایه

sql
WITH i AS (
SELECT provider, provider_txid, kind, amount, currency, event_ts
FROM internal_norm
),
p AS (
SELECT provider, provider_txid, kind, amount, currency, event_ts
FROM psp_norm
)
SELECT
COALESCE(i. provider_txid, p. provider_txid) AS txid,
COALESCE(i. provider, p. provider) AS provider,
i.kind AS kind_internal, p. kind AS kind_psp,
i.amount AS amount_internal, p. amount AS amount_psp,
i.currency, p. currency,
CASE
WHEN i.provider_txid IS NULL THEN 'MISSING_INTERNAL'
WHEN p. provider_txid IS NULL THEN 'MISSING_PSP'
WHEN ABS(i. amount - p. amount) > 0. 01 THEN 'AMOUNT_MISMATCH'
ELSE 'MATCHED'
END AS recon_status
FROM i
FULL OUTER JOIN p USING (provider, provider_txid);

10. ۲ تسویه حساب ↔ بانک

sql
SELECT s. settlement_date, s. batch_id, s. currency,
s. amount_settled, b. amount_bank,
(b. amount_bank - s. amount_settled) AS diff
FROM psp_settlements s
LEFT JOIN bank_statements b
ON b. value_date = s. settlement_date
AND b. currency = s. currency
AND ABS(b. amount_bank - s. amount_settled) <= 0. 5;

10. 3 پیری DLQ

sql
SELECT diff_type,
COUNT() AS cnt,
PERCENTILE_CONT(0. 5) WITHIN GROUP (ORDER BY AGE(NOW(), created_at)) AS p50_age,
PERCENTILE_CONT(0. 95) WITHIN GROUP (ORDER BY AGE(NOW(), created_at)) AS p95_age
FROM recon_dlq
GROUP BY diff_type
ORDER BY cnt DESC;

11) ویژگی های ریل/موارد

نقشه ها: تفاوت بین «auth» و «capture»، تنظیمات «حل و فصل»، هزینه مبادله/مدار - خطوط جداگانه.
بانکداری A2A/Open/RTP: تأییدهای فوری، اما «برگشت» ممکن است ؛ بررسی «پرداخت» و بازگشت.
کیف پول: اغلب کامل 'provider _ txid'، سریع 'بازپرداخت' ؛ مراقب خطوط دستمزد باش.
کوپن: بدون بازپرداخت متقارن - به درستی در سیاست و گزارش ها منعکس می شود.
رمزنگاری: هش زنجیره ای ↔ provider_txid ؛ تأییدیه های N ؛ حسابداری کمیسیون های شبکه و تخفیف های احتمالی ؛ نرخ ارز - در زمان تبدیل.

12) کتاب های عملیاتی

افزایش MISSING_INTERNAL: بررسی از دست دادن webhooks/retrays، مصرف مجدد، فعال کردن نظرسنجی API.
AMOUNT_MISMATCH از یک PSP: مقایسه گرد/مالیات بر ارزش افزوده/مدل هزینه، درخواست بیانیه اصلاح.
حل و فصل به بانک پیوند ندارد: تاریخ ارزش چک، هزینه های بانکی، تاخیر T + N ؛ به طور موقت در «حساب تعلیق» قرار دهید.
REFUND_OVER توده: توقف خودکار توقف خودکار، حسابرسی idemotency، اصلاح دستی.
FX_DRIFT: اصلاح سیاست منبع نرخ ارز (ECB/PSP/BANK)، محاسبه مجدد P&L تفاوت.

13) کنترل و ایمنی

Idempotence مصرف: 'file _ id + checksum' و تاریخچه دانلود.
دسترسی (RBAC) و کنترل 4 چشم: برای اصلاحات دستی/نوشته های مجله.
دنباله حسابرسی: تمام مسابقات/diffs/اصلاحات - در یک ورود به سیستم غیر قابل تغییر.
کیفیت داده ها: طرح ها، زمینه های اجباری، اعتبار سنجی ارز/مقیاس.

14) داشبورد و هشدارها

ویدجت: خودکار مطابقت%, نرخ عدم تطابق, پیری DLQ, حل و فصل زمان, دقت هزینه, PSP بالا توسط تفاوت, تفاوت از نوع نقشه.

هشدارها:
  • 'خودکار مسابقه٪ <90٪' توسط ارائه دهنده/روز → P1
  • 'پیری p95> 3 روز → P2
  • 'مقدار _ سنبله عدم تطابق → P1
  • «Bank≠Settlement» با مقدار/ارز → P0

15) موارد تست (UAT/Prod)

1. بارگذاری مجدد همان فایل → 0 عوارض جانبی (idempotency).
2. refands جزئی (3 خط) → مقدار مسابقات، مطابقت با دنباله.
3. تبدیل FX: اختلاف نرخ ارز در تحمل → بازی صحیح.
4. provider_txid تکراری در گزارش → dedup و هشدار.
5. گرفتن webhook گم شده → رای گیری شکاف بسته، وضعیت تراز وسط قرار دارد.
6. دسته حل و فصل با خط هزینه → شکست صحیح در درآمد/هزینه/خالص.

16) اشتباهات مکرر و چگونه برای جلوگیری از

مقایسه «تلاش» در مقابل «ضبط» → حفظ همان دانه دانه بودن.
عدم وجود «provider _ txid» در → log صحت مسابقه را از دست می دهد.
نادیده گرفتن منطقه زمانی → جبران شده توسط تاریخ حل و فصل.
هیچ اختلاف DLQ/retras → «ابدی» وجود ندارد.
ویرایش دستی بدون ورود به سیستم → ناسازگاری با حسابرسی.
تحمل فازی → یا یک مسابقه مجدد یا «همه در DLQ».

17) چک لیست پیاده سازی

  • طرح عادی سازی یکپارچه و دایرکتوری PSP/روش/حساب
  • نقشه برداری درخت کلید (txid → merchant_ref → فازی)
  • مقدار/زمان تحمل/FX، سیاست منبع دوره
  • مصرف ایده آل، DLQ، retrai، هشدار
  • آشتی Settlement↔Bank, سیاست حساب تعلیق
  • داشبورد KPI، گزارش مالی/حسابرسی
  • Playbooks و SLA تجزیه موارد تفاوت

خلاصه

آشتی یک رشته مهندسی است: عادی سازی، کلیدهای قابل اعتماد، تحمل، مسابقات خودکار و اصلاحات شفاف. با چنین کانتوری، درآمد و کمیسیون را تثبیت می کنید، «سیاه چاله ها» را به حداقل می رسانید، سرعت بسته شدن دوره را تسریع می کنید و بدون درد حسابرسی می شوید: خودکار match%↑، Mismatch↓، Aging↓.

Contact

با ما در تماس باشید

برای هرگونه سؤال یا نیاز به پشتیبانی با ما ارتباط بگیرید.ما همیشه آماده کمک هستیم!

Telegram
@Gamble_GC
شروع یکپارچه‌سازی

ایمیل — اجباری است. تلگرام یا واتساپ — اختیاری.

نام شما اختیاری
ایمیل اختیاری
موضوع اختیاری
پیام اختیاری
Telegram اختیاری
@
اگر تلگرام را وارد کنید — علاوه بر ایمیل، در تلگرام هم پاسخ می‌دهیم.
WhatsApp اختیاری
فرمت: کد کشور و شماره (برای مثال، +98XXXXXXXXXX).

با فشردن این دکمه، با پردازش داده‌های خود موافقت می‌کنید.