Қисман ва пурра рад мекунад
TL; ДР
Refand амалиёти баръакс аз рӯи миқдори гирифташуда мебошад. Пурра тамоми транзаксияро пӯшонида, қисман қисмро бармегардонад (метавонад қисман то пурра бошад). Муҳим: баргардонидан ба манбаъ, idempotence қатъӣ, сабти сабтҳо ва оркестр бо webhooks/retras. Меъёри баргардонидан, TTR p95, Хатогии баргардонидан ва бартараф кардани такрори/номутобиқатӣ тавассути худкори мусолиҳа.
1) Истилоҳот ва фарқиятҳои асосӣ
Баргардонидани пурра - Тамоми маблағи содиршударо бармегардонад ('баргардонидан _ маблағ = capture_amount').
Баргардонидани қисман - як қисмро бармегардонад ('0 <refund_amount <capture_amount'), қисми боқимондаро ба миқдори умумии' гирифтан _ маблағ 'медиҳад.
Баргардонидан ба манбаъ - бозгашт ба усули аслии пардохт/релсҳо (танзимкунандаи афзалиятнок/ҳатмӣ).
Беэътибор - бекоркунӣ барои забт кардан (агар бо релсҳо дастгирӣ карда шавад), refand ҳисобида намешавад.
Бозсозӣ/Пардохт - механикаи бонкӣ/роҳи оҳан берун аз ташаббуси шумо (баҳсҳо, пардохтҳо) - бо радкунӣ ошуфта нашавед.
2) Кай бояд қисман vs қисман бароварда шавад
Пурра:- Бекор кардани тамоми фармоиш/хизматрасонӣ, нусхабардории такрорӣ, хатои система.
- Агар хизматрасонӣ пешниҳод нагардад (тибқи қоидаҳои истеъмолкунанда/танзимкунанда) ҳатмӣ мебошад.
- Қисман бекор кардани хизматрасонӣ, тасҳеҳи мутаносиб (тахфиф, ҷуброн барои таъхир).
- Маҳдудиятҳои техникӣ релсҳо (ҳадди аксар барои як амалиёт) - силсилаи қисман.
- Нигоҳ доштани комиссияи пост-фактум (дар ҷое, ки танзим иҷозат дода мешавад) - камтар дар IGaming.
3) Сиёсатҳо ва маҳдудиятҳо
Баргардонидан ба манбаъ = бо нобаёнӣ дуруст аст; истисноҳо - тавассути парвандаҳои MLRO/мувофиқат (сабти ном).
Қатъи кор: refands ба N рӯз аз гирифтан иҷозат дода мешавад (бо усул/юрисдиксия).
Ҳисоби қисман Max: на бештар аз К қисман барои як пардохт (одатан K ≤ 5).
Маблағи қисман Min: на камтар аз ҳадди аққали техникии роҳи оҳан/PSP.
- Агенти дастгирӣ: қисман ≤ X, пурра ≤ Y.
- Менеҷер/Молия: аз ҳад зиёд, истисноҳои методӣ.
- Хунуккунӣ дар кӯшиши такрорӣ (зидди паридан).
4) Меъморӣ ва ҷараёни рӯйдодҳо
Компонентҳо:- Оркестри пардохт манбаи ҳақиқат аст.
- Хадамоти баргардонидан - API, idempotency, оркестри бознишастагӣ, чӯбкорӣ.
- Адаптерҳои PSP - Интегратсияи метод.
- Оштӣ - мусолиҳаи худкор, DLQ, ислоҳҳо.
- Китобдорӣ/баҳисобгирӣ - постҳо, ноқисҳо, клиринг бо клиринг.
- Хавф/мувофиқат - Санксияҳо/So-F сенарияҳои баҳснокро месанҷанд.
1. 'Баргардонидан. Эҷоди '(API) тасдиқкунӣ → (маҳдудиятҳо, тавозун, сиёсат, агар лозим бошад KYC/So
2. Генерация idempotency_key ('ҳаш (payment_id + refund_amount + сабаб + nonce)').
3. Занги PSP → 'Интизорӣ'.
4. Webhook/пурсиш → 'Муваффақият '/' НОКОМ'; ҳангоми танаффус - бозпас бо ҳамон калид.
5. Нашри чорабинӣ дар Кафка → Ledger, BI, огоҳиҳо.
6. Муқоисаи худкор: харитасозии 'провайдер _ баргардонидан _ id' барои сабти ном.
5) Idempotency ва зидди-мегирад
Ҳамон як refand ду маротиба ҳисоб карда намешавад: ҳама мантиқ тавассути нигаҳдории idempotency (KV/Redis + TTL).
Калидҳои payment_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) Хусусиятҳо дар релсҳои пардохт
Кортҳо (Visa/Mastercard)
Дастгирии пурра/қисман; аксар вақт каме қисман; TTR аз бонки муштарӣ вобаста аст (T + 1... Т + 5 бп).
Webhooks дар бораи муваффақият зуд ба даст меоянд, аммо бақайдгирӣ дар бораи партофтан метавонад дер → бошад, ки мо дар қолабҳои дастгирӣ шарҳ медиҳем.
A2A/Open бонкӣ/RTP
Аксар вақт бозгашти фаврӣ (баргардонидан/такони қарз); баъзе провайдерҳо танҳо пурра ё 1 қисман дастгирӣ мекунанд.
Ҳатмии қатъӣ ба ҳисоби аслӣ; баргардонидан ба манбаъ талаб карда мешавад.
Ҳамёнҳои электронӣ
Муқаррарӣ пурра/қисман; Дақиқаҳои TTR; маҳдудиятҳои қисман ва ҳадди аққал.
Ваучерҳо/Пешпардохт
Одатан, сиёсати § барои баргардонидан ба манбаъ дастрас нест: бозгашт ба ҳамёни дохилӣ ё ваучери дубора (агар провайдер медонад, ки чӣ тавр). Шартҳои мутобиқатро талаб мекунад.
Крипто
Релсҳо - ноустувор; беҳтараш ҳамчун усули refand истифода намешавад. Агар иҷозат дода шавад: бозгашт ба ҳамон суроға/мубодила бо қурби ҳуҷҷатгузорӣ ва комиссияҳо; Санҷиши AML.
8) Баҳисобгирӣ, оштӣ ва молия
Китобдор: 'DR Revenue/CR Cash' ҳангоми сабт; дар бораи баргардонидан - навиштан. Қисман мутаносибан инъикос карда мешавад.
Эътироф: дар IGaming, refand GGR-и давраи мувофиқро коҳиш медиҳад (сиёсати баҳисобгирӣ).
Мусолиҳа: мусолиҳаи ҳаррӯзаи 'савдогар _ баргардонидан _ id ↔ provider_refund_id', статусҳо, маблағҳо, нархҳои FX.
FX: мантиқи курсҳоро ислоҳ кунед (ҳангоми гирифтан ё ҳангоми баргардонидан), агар лозим бошад; шабакаи паҳншударо нигоҳ доред.
9) KPI, ҳадафҳо ва огоҳиҳо (Баргардонидани саломатӣ)
Меъёри баргардонидан = 'Баргардонидашуда _ Tx/ Captured_Tx'.
Таносуби маблағи баргардонидан = 'Баргардонидашуда _ Маблағ/ Captured_Amount'.
TTR p95 = p95 ('credited _ at - created_at') бо усул.
Меъёри хатогии баргардонидан = 'Нокомӣ/Кӯшида' (<0). 3%).
Баргардонидани манбаъ% ≥ 95% (дар ҷойҳои дастрас).
Ҳодисаҳои дукарата баргардонидан = 0.
- 'TTR p95' нисбат ба SLO бо усули P2 → баландтар аст.
- Хӯшаҳо аз ҷониби 'Меъёри баргардонидан' дар як провайдер/BIN → P1 (санҷед/дубора).
- Ҳама гуна 'Баргардонидани дукарата> 0' → P0 (яхкунонии фаврии худкор).
10) иловаро SQL
10. 1 Профили 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 Назорати тавозун барои қисман
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) Хатар ва мувофиқат
Мубориза бо шустушӯ: радкунӣ набояд ба канали алтернативӣ табдил ёбад; бо тасдиқи MLRO истисноҳо содир кунед.
Санксияҳо/REP: барои баргардонидани ҳисобҳо/тафсилоти "сурх" - санҷиши ҳатмӣ.
DSAR/Нигоҳдорӣ - Нишонаҳои нигоҳдорӣ дар доираи сиёсати нигоҳдорӣ.
Қоидаҳои маҳаллӣ: мӯҳлат ва тартиби баргардонидан (масалан, қоидаҳои истеъмолкунандагон) - дар сиёсат инъикос ёфтаанд.
13) Хатогиҳои зуд-зуд ва чӣ гуна аз онҳо канорагирӣ кардан
Аз сабаби набудани idempotency ва webhooks-ҳои такрорӣ → store idem key/status дубора ислоҳ кунед, тавозунро санҷед.
Қисман> тавозун → версияи сатр-қулф/оптимистӣ ва чекҳои қатъӣ.
Баргардонидани усули кросс-усул бидуни иҷозати мувофиқат → баргардонидани манбаъро вайрон мекунад.
Омезиши беэътибор ва баргардонидан дар гузоришҳо → таҳрифи KPI.
Дар байни PSP ва дафтарчаи шумо ягон санҷиши худкор вуҷуд надорад.
14) Китобҳои бозӣ
Афзоиши провайдер бармегардад → санҷиши нокомии авторизатсия/нусхабардорӣ, фурӯзон кардани нокомӣ, тамос бо PSP.
Қисман ҷубронпулии оммавӣ (маърака) → маҳдудияти қисман баланд бардошта, амалиёти гурӯҳиро фароҳам меорад ва мусолиҳаро тақвият медиҳад.
Хатои Webhooks → гузариш ба овоздиҳӣ, зиёд кардани idempotency TTL, таъхири худкор.
Баргардонидани истисно ба манбаъ (нодир) → густариши MLRO, пардохти ҳуҷҷатгузорӣ ва 'comp _ тасдиқ = ҳақиқат'.
15) Парвандаҳои санҷишӣ (UAT/Prod)
1. Баргардонидани пурра пас аз як забт § тавозунро дуруст барқарор мекунад.
2. Қисм қисман (3 ×) → ҷамъи ≤ гирифтан; пас барои боқимонда пурра.
3. Idempotency - Такрори ҳамон пурсиш → 1 натиҷа.
4. Webhook-bounce: 3 огоҳиномаи якхела → як сабти ном/қарз.
5. Ҳамоҳангсозӣ: номутобиқатии сунъӣ → ҳушдор ва худкор ислоҳ.
6. Маҳдудияти ҳуқуқҳо: агент наметавонад аз ҳадди қисман зиёд бошад.
7. Қатъи кор: кӯшиши дермондаи барқарорсозӣ → нокомии дуруст ва воридшавӣ.
16) Рӯйхати санҷиши амалисозӣ
- сиёсати пурра/қисман + баргардонидан ба манбаъ бо юрисдиксия/усул.
- Idempotency, retreats, webhooks ва овоздиҳӣ, DLQ.
- Модели маълумот бо бақияи бозгашт ва reason_code.
- Китобча ва ҳамарӯзаи худкор.
- KPI/панели назоратӣ: Меъёри баргардонидан, TTR, хато, баргардонидани дукарата = 0.
- Ҳуқуқ ва матритсаи татбиқ, қолабҳои дастгирӣ.
- Ҳолатҳои санҷиши UAT ва огоҳиҳои сатҳи истеҳсолӣ.
Хулоса
Идоракунии Refand як интизоми қатъии равандҳо мебошад: баргардонидан ба манбаъ, номутаносибӣ, модели шаффофи маълумот, ҳамоҳангсозии худкор ва сиёсати қисман/пурраи фаҳмо. Бо чунин асосҳо, шумо TTR-ро паст нигоҳ медоред, хатогиҳоро ба сифр наздик мекунед, такрори имконнопазир ва мувофиқат ва молия бо ҳадафҳои тиҷорат ҳамоҳанг карда мешаванд.