Submersiuni și cascade
1) Baza conceptuală
Un sub-comerciant este o entitate juridică care acceptă plăți prin intermediul principalului comerciant/furnizor (PayFac/platformă/operator). Fluxurile de numerar merg la contul principal MID/platformă, apoi platforma plătește sub-comerciant (split/matura).
Cascada este o strategie de rutare secvențială sau paralelă a tranzacțiilor prin intermediul mai multor PSP/achizitori/MID în conformitate cu regulile (OUG, BIN, tarif, risc, încărcare) pentru a crește autorizarea și a reduce costurile.
PayFac-model - platformă ca „mini-achizitor”: la bordul unui sub-comerciant (KYB/PCI), atribuirea sub-MID, reguli uniforme ale KYC/AML și litigii, soluționarea centralizată și plăți.
2) În cazul în care și atunci când aveți nevoie de ea în iGaming
Multi-brand/white-label: un singur operator, zeci de sub-branduri/studiouri → mai ușor de întreținut MID/descriptori și de raportare.
Content marketplace: platformă - MoR/PayFac, studiouri - submersibile (revshare, split-uri).
Risc ridicat/geo-mix: cascadele PSP reduc defecțiunile, șocurile incidente și costurile de plată.
Metode locale/coridoare de plată: trebuie să alegeți un furnizor în zbor și rezervă.
3) Responsabilități și roluri
4) Ierarhia MID-urilor și a descriptorilor
Master MID (platformă)
Sub-MID (s) └─ prin Brand/Geo/Metodă
└─ profiluri de rutare (PSP1→PSP2... cascadă)
Recomandări:- Descriptori separați pe sub-MID: mai puține dispute.
- Metode de cards/A2A/local separate de sub-MID pentru analiza pură și controlul rezervelor.
- Profile de rutare versiune (v1/v2) pentru A/B.
5) Cascade: Cum de a construi
5. 1. Soluție on-the-fly
La autorizare: selectați o rută în conformitate cu regulile (OUG, BIN/IIN, marcă, card de debit/credit, clasa de risc, limita PSP, AR/DR curent, tariful/FX, incidente SLA).
5. 2. Tipuri de cascade
Consecutiv: (scădere ușoară) .
Split-trafic:% din traficul către diferite PSP-uri pentru benchmarking și decorare.
Sticky BIN: asigurarea unui bazin BIN de succes pentru cel mai bun PSP.
5. 3. Restricții
Citiți idempotența (pentru a nu dubla captura).
Sunt de acord cu PSP privind încercările repetate (încercați din nou fereastră, coduri moi).
Luați în considerare politica 3DS și schimbarea răspunderii pe fiecare rută.
6) decontare, T + N, rezerve și scindări
Fiecare PSP/achizitor are propriul cut-off/T + N și propria rezervă de rulare.
Platforma agregă încasările la nivelul sub-MID și menține un registru de rezerve cu un calendar de lansare.
Plăți către sub-comercianți: fără comisioane și rezerve + cota lor (revshare/CPA) pentru perioada de raportare.
Suportul se împarte prin tranzacție (platformă/studio/afiliat/taxă) sau prin articol pe perioadă.
7) Antifraudă, 3DS și limite la nivelul sub-comercianților
Praguri de notare diferite pentru clasele de piețe A/B/C.
Reguli 3DS pentru BIN/geo/check (obligatoriu/soft/step-up).
Limite de viteză (intrare/ieșire, încercări de carduri) și capace prin submerchant.
„Gri”: limite mai stricte, doar metode albe și plăți amânate.
8) Tarifele și rata de preluare
Luați în considerare rata efectivă de preluare prin submerchant: taxele PSP (interbancar/schemă/marcare/fixă) + derapajul FX + cota platformei + efectul de rezervă.
Utilizaţi rutarea IC++ şi BIN pentru a reduce costul amestecat într-o cascadă.
9) Date și model minim
sql
-- Directories
CREATE TABLE ref. submerchants (
sub_id BIGSERIAL PRIMARY KEY,
legal_name TEXT, brand TEXT, country TEXT, risk_class TEXT, status TEXT,
created_at TIMESTAMP, meta JSONB
);
CREATE TABLE ref. routing_profiles (
profile_id BIGSERIAL PRIMARY KEY,
name TEXT, version TEXT, enabled BOOLEAN, meta JSONB
);
CREATE TABLE ref. routing_rules (
rule_id BIGSERIAL PRIMARY KEY,
profile_id BIGINT REFERENCES ref. routing_profiles,
method TEXT, geo TEXT, bin_from TEXT, bin_to TEXT,
psp TEXT, mid TEXT, require_3ds BOOLEAN,
priority INT, soft_codes JSONB, enabled BOOLEAN, meta JSONB
);
-- Transactions linked to a sub-merchant and a route
CREATE TABLE payments. transactions (
id BIGSERIAL PRIMARY KEY,
sub_id BIGINT REFERENCES ref. submerchants,
profile_id BIGINT, rule_id BIGINT,
provider TEXT, mid TEXT, method TEXT, brand TEXT,
status TEXT, decline_code TEXT,
amount_original NUMERIC(18,6), currency_original TEXT,
amount_reporting NUMERIC(18,6), reporting_currency TEXT,
fx_reference_rate NUMERIC(18,10), fx_effective_rate NUMERIC(18,10),
authorized_at TIMESTAMP, captured_at TIMESTAMP, settled_at TIMESTAMP, funded_at TIMESTAMP,
user_id BIGINT, country_player TEXT, bin TEXT, three_ds_used BOOLEAN,
idempotency_key TEXT UNIQUE, meta JSONB
);
-- Phi and reserves for sub-merchant/provider/period
CREATE TABLE finance. settlement_fees (
sub_id BIGINT, provider TEXT, mid TEXT,
period_start TIMESTAMP, period_end TIMESTAMP,
interchange_amt NUMERIC, scheme_amt NUMERIC, markup_amt NUMERIC,
auth_amt NUMERIC, refund_amt NUMERIC, cb_amt NUMERIC, gateway_amt NUMERIC,
fx_spread_amt NUMERIC, reserve_delta NUMERIC, total_fees NUMERIC, currency TEXT
);
CREATE TABLE finance. reserve_ledger (
id BIGSERIAL PRIMARY KEY,
sub_id BIGINT, provider TEXT, mid TEXT,
hold_date DATE, release_due_date DATE,
hold_amount NUMERIC, released_amount NUMERIC,
cb_consumed NUMERIC, fines_consumed NUMERIC,
status TEXT, meta JSONB
);
-- Submerchant payments
CREATE TABLE payouts. submerchant_settlements (
sub_id BIGINT, period_start TIMESTAMP, period_end TIMESTAMP,
gross_sales NUMERIC, refunds NUMERIC, chargebacks NUMERIC,
fees_total NUMERIC, reserve_delta NUMERIC, revshare NUMERIC,
net_payable NUMERIC, currency TEXT, paid_at TIMESTAMP, statement_ref TEXT
);
10) Șabloane SQL
10. 1. Cost eficient per submerchant
sql
SELECT t. sub_id,
SUM(t. amount_reporting) AS volume_rep,
SUM(f. total_fees) AS fees_rep,
100. 0 SUM(f. total_fees) / NULLIF(SUM(t. amount_reporting),0) AS take_rate_pct
FROM payments. transactions t
JOIN finance. settlement_fees f
ON f. sub_id=t. sub_id
AND t. settled_at BETWEEN f. period_start AND f. period_end
WHERE t. settled_at BETWEEN:from AND:to
GROUP BY 1
ORDER BY take_rate_pct DESC;
10. 2. Eficiența cascadei (AR/DR) de regulă
sql
SELECT r. profile_id, r. psp, r. mid,
COUNT() FILTER (WHERE t. status='APPROVED') AS approvals,
COUNT() FILTER (WHERE t. status='DECLINED') AS declines,
ROUND(100. 0 COUNT() FILTER (WHERE t. status='APPROVED') / NULLIF(COUNT(),0), 2) AS ar_pct
FROM payments. transactions t
JOIN ref. routing_rules r ON r. rule_id=t. rule_id
WHERE t. authorized_at BETWEEN:from AND:to
GROUP BY 1,2,3
ORDER BY ar_pct DESC;
10. 3. Echilibru de rezervă prin submerchant
sql
SELECT sub_id,
SUM(hold_amount - released_amount - cb_consumed - fines_consumed) AS reserve_balance
FROM finance. reserve_ledger
WHERE hold_date <=:as_of
GROUP BY 1;
10. 4. Decontare plătibilă netă
sql
SELECT s. sub_id,
SUM(s. gross_sales - s. refunds - s. chargebacks
- s. fees_total + s. reserve_delta - s. revshare) AS net_payable
FROM payouts. submerchant_settlements s
WHERE s. period_start >=:from AND s. period_end <:to
GROUP BY 1;
11) Tablouri de bord și KPI-uri
AR/DR by cascade: by GEO/BIN/method/PSP, share of 3DS, soft-declin share.
Ia-rata de% şi componente stiva taxele de submerchant.
Rata CB/Rata de rambursare pe sub-MID.
Soldul de rezervă și ETA de eliberare de submerchant/PSP.
Decontare SLA: T + N rata de succes, întârzieri de finanțare.
Sănătate de plată: frecvență și cantități de plăți către submerchants, întârzieri.
FX Slippage în cascade (referință efectivă vs).
12) Alerte și praguri
Degradarea rutării: Căderea AR> Y bps oră la oră pe regulă.
CB Spike: Creșterea încărcăturii sub-comerciantului> X bps w/w.
Rezerva dezechilibru: Rezerva Ledger Fails - P1.
Întârzierea decontării: încălcarea PSP T + N → comutatorul automat în cascadă.
Take-Rate Spike: creșterea costurilor> prag (taxe sau FX).
Drift de politică: tranzacții fără obligații pentru profil/regulă/idempotență - P1.
Întârziere de plată: întârziere de plată la sub-comerciant> SLA.
13) Onboarding și conformitatea sub-comerciant
CES/sancțiuni/REP: pachete de documente, beneficiari, surse de fonduri.
PCI/securitate: tokenizare, ban PAN de stocare la sub-comerciant.
Politici de returnare/bonus: standarde uniforme, bilete SLA.
Raportare agregată: separat prin marcă, geo, metode.
Limite/plafoane: cifre de afaceri zilnice/săptămânale, plafoane de plată, rambursări amânate pentru riscuri ridicate.
14) Cele mai bune practici (scurt)
1. Profiluri de rutare versiune și magazin explica jurnalele de decizie.
2. Păstrați testele lipicioase BIN și A/B PSP pentru stabilitatea și prețul AR.
3. Taxe Mappite/FX/rezervă la nivelul sub-comerciantului; să plătească taxe nete pe SLA.
4. Idempotency + retry-policy numai prin soft-declin; respectă limitele PSP.
5. Descriptorii și sub-MID-urile sunt unice pentru marcă/geo: mai puține dispute.
6. Rezervați registrul cu calendarul de eliberare și alertele de eliberare ratate.
7. Rapoarte transparente către sub-comerciant: taxe de decodare, rezervă, FX, litigii.
8. Failover playbooks: PSP/coridor drop - redirecționare instantanee.
15) Lista de verificare a implementării
- Directoare 'submerchants',' routing _ profiles ',' routing _ rules '.
- Protocoalele KYB/KYC/AML și stocarea stării.
- Router cu idempotenta si logica soft-declin.
- Importați fișiere de decontare PSP → 'decontare _ taxe' + registru de rezervă.
- Mecanism de plăți pentru sub-comercianți + acte/statute.
- Tablouri de bord AR/DR/CB/taxe/rezervă + alerte.
- Documente: Politica de litigii, Reguli 3DS, Limite și SLA.
Rezumat
Submerchants oferă scară și flexibilitate, iar cascadele oferă stabilitate, conversie și costuri ușor de gestionat. Arhitectura din ierarhia MID-urilor, profilurile de rutare versionate, contabilitatea transparentă a taxelor/rezervelor și respectarea strictă transformă o buclă complexă de plată multi-GEO într-un sistem predictibil: autorizare ridicată, preluare scăzută, plăți rapide și un minim de surprize privind riscurile.