设置循环和切断
1)概念基础
Settlement(设置)是PSP/Acquirer和商人(运营商)之间的计算,其中成功捕获的交易中的钱转入商人帐户。
切断是进入特定计算周期(通常是提供商时间段的固定时间)的操作的每日"切断"。
T+N是资金间隔延迟的典型表示法:T是截止日期,N是实际入学前的工作日数。
- 卡(Visa/Mastercard):通常是T+2/T+3银行日,世界标准时间23:00(大约)。
- A2A/开放银行:从T+0到T+1。
- SEPA Credit Transfer: T+1/T+2 (Instant — T+0).
- ACH (US): T+2/T+3;Same Day ACH — T+0/T+1.
- RTP (US): T +0,但报告可能会截断。
- 加密:实际上是通过网络的T+0,但是PSP可以应用自己的调用窗口(T+0/1)。
2)切断是如何工作的,什么击中它
1.提供商捕获收集窗口(例如UTC 00:00-23:00)。
2.此窗口中的所有settled/captured事务都属于数据包(batch)。
3.汇总到软件包的收益,charjbacks,校正以计算gross和net funding。
4.在切断前进时,会形成定位文件,并在入伍前开始T+N计时器。
重要的是:没有捕获的授权不会进入软件包。取消的结论也没有。
3)结算类型: gross vs net,储备金和佣金
Gross定位-总捕获量(减去单独的佣金注销)列出。
Net settlement-提供商持有fees, chargebacks, refunds, rolling reserve,并列出net amount。
滚动储备-将营业额的百分比保持在N天(例如10%的180天)以涵盖风险。
无关紧要-如果每天"净额"进入负数,则赤字将被转移并按以下周期偿还。
建议:存储两个平面的解密:操作性gross(通过事务)和funding net(通过提供程序文件)。
4)时区,本地周末和DST
切断由提供商的时间表定义,该时间表可能与您的时间表不同。
考虑DST(夏令时)-切片可以相对于本地时间移动± 1小时。
接收银行辖区的假期/周末影响T+N中的N(例如,T+2银行日变成假期周围的T+4)。
实践:在UTC中规范所有技术时间,并行存储"provider_tz_cutoff_at"和"local_tz_posted_at"。
5)设置日历(funding calendar)和SLA
编制季度设置日历:- 每种方法/PSP的切断时间和tz,
- 标准T+N和例外(假期),
- 预期数额(预测)
- 收件的SLA:例如,"不迟于T+2日欧洲时间12:00 Kyiv。"
任何SLA偏差都→ Ops/Finance中的alert和tiket。
6)与Net Deposits和结论的关系
ND(净输入)通过定位的事务来计算(请参阅相关文章)。
结论(withdrawals)不参与PSP的存款筹款,但会影响商人的票房。
流动性规划:按设置输入减去付款/税收/运营费用外流。
7)对账(reconciliation)和提供商的工件
每个批次的最小集合(batch):- 'batch_id/ settlement_id',在tz提供商的截止日期,
- суммы по типам: `captured_deposits`, `refunds`, `chargeback_debits`, `chargeback_credits`, `fees`, `reserve_delta`, `net_funding`,
- 方法/商人帐户解密("MID","descriptor","MCC"),
- 事务参考("provider_tx_id","rrn","arn"-如果地图),
- 文件:CSV/XML/JSON+人文声明(PDF/HTML)。
1.从事务到文件(我们认为一切都进入了文件?)
2.从文件到事务(文件中的任何内容都在我们的展示柜中?状态是否匹配?)
8)付款轨道的细节(一般而言)
地图:频繁的情景延迟发布;可能的后期"chargeback"(案件最多120-540天);interchange&scheme fees出现在文件中,在ND中不减法。
SEPA/ACH:batchi取决于银行窗口;撤销/退货有自己的代码;Same Day变体-单独的剪切。
开放银行/A2A:T+0/1,但文件可以事后处理;比赛需要严格的RPP/Unique ID。
RTP/Instant:钱来得快,但报告文件按计划。
加密:onchein设置是即时的,但是提供者做"payout windows";存储"fx_at_settle"。
9)会计,结算和报告(FI/会计)
9.1.Ackrual vs缓存方法
对于管理报告,通常会使用accrual:在"settled_at"时承认收入/移动。
对于财政部/DDS,一种缓存方法:承认"funded_at"的到来。
9.2.典型布线(简化)
在"DEPOSIT_CAPTURED"中:- Dt:与PSP结算中的现金(AR:PSP)
- CT:对玩家的承诺(钱包/玩家平衡)
- Dt:银行(商人出纳处)
- CT:与PSP结算中的现金
- Dt:支出(PSP fees), Dt/Ct:储备(如果更改)
存储用于跟踪的"transaction_id → batch_id → funding_id'捆绑包。
10)风险管理和Alerta
Missed file: X: YY-P1之前没有设置文件。
Funding delay: T+N到期,没有钱-P1.
Delta thresholds: "our_gross"与"file_gross"> 0的差异。5%是P2; 'fees'范围之外是P2.
Negative carry-over:一系列负面的净数据包-调查。
假期影响:自动预测,包括日历;如果事实<80%的预测是滴答作响。
11)数据模型(简化)
finance. payment_transactions (
id, user_id, method, provider, mid, mcc,
type, status, amount_original, currency_original,
amount_reporting, reporting_currency, fx_rate_at_settle,
authorized_at, captured_at, settled_at,
provider_tx_id, arn, rrn, meta
)
finance. settlement_batches (
batch_id, provider, mid, method,
provider_cutoff_at, provider_tz,
period_start_at, period_end_at,
gross_captured, refunds, cb_debits, cb_credits,
fees, reserve_delta, net_funding_expected,
file_name, file_hash, file_type, meta
)
finance. funding_receipts (
funding_id, provider, bank_account,
received_at, value_date,
currency, amount_received,
batch_id, statement_ref, meta
)
-- Binding showcase:
finance. recon_links (
id, transaction_id, batch_id, funding_id, link_type, created_at
)
12) SQL模板示例
12.1.通过切断注册"切片"
sql
INSERT INTO finance. settlement_batches (
batch_id, provider, mid, method,
provider_cutoff_at, provider_tz,
period_start_at, period_end_at,
gross_captured, refunds, cb_debits, cb_credits,
fees, reserve_delta, net_funding_expected,
file_name, file_hash, file_type, meta
)
VALUES (:batch_id,:provider,:mid,:method,
:cutoff_at,:tz,
:start_at,:end_at,
:gross,:refunds,:cb_deb,:cb_cr,
:fees,:reserve_delta,:net_expected,
:file_name,:file_hash,:file_type,:meta::jsonb);
12.2.从事务到文件的对账"
sql
WITH tx AS (
SELECT provider, mid, method,
SUM(CASE WHEN type='DEPOSIT' AND status IN ('CAPTURED','SETTLED') THEN amount_reporting ELSE 0 END) AS gross,
SUM(CASE WHEN type='REFUND' AND status='SETTLED' THEN amount_reporting ELSE 0 END) AS refunds,
SUM(CASE WHEN type='CHARGEBACK_DEBIT' AND status='SETTLED' THEN amount_reporting ELSE 0 END) AS cb_deb,
SUM(CASE WHEN type='CHARGEBACK_CREDIT' AND status='SETTLED' THEN amount_reporting ELSE 0 END) AS cb_cr
FROM finance. payment_transactions
WHERE settled_at >=:start_at AND settled_at <:end_at
GROUP BY 1,2,3
)
SELECT b. batch_id, b. provider, b. mid, b. method,
tx. gross AS our_gross, b. gross_captured AS file_gross,
tx. refunds AS our_refunds, b. refunds AS file_refunds,
tx. cb_deb AS our_cb_deb, b. cb_debits AS file_cb_deb,
tx. cb_cr AS our_cb_cr, b. cb_credits AS file_cb_cr
FROM finance. settlement_batches b
LEFT JOIN tx
ON tx. provider=b. provider AND tx. mid=b. mid AND tx. method=b. method
WHERE b. provider_cutoff_at BETWEEN:cutoff_from AND:cutoff_to;
12.3.收入预测(现金流T+N)
sql
SELECT provider, mid, method,
DATE(provider_cutoff_at) AS t_date,
net_funding_expected,
CASE
WHEN EXTRACT (DOW FROM provider_cutoff_at)::int IN (5,6) THEN provider_cutoff_at + INTERVAL '3day' -- conditional example
ELSE provider_cutoff_at + INTERVAL '2 day'
END AS expected_funding_at
FROM finance. settlement_batches
WHERE provider_cutoff_at BETWEEN:from AND:to;
13)流程和SLO
SLO 1: settlement文件导入-T +0,直到08:00 Europe/Kyiv。
SLO 2: 主要对账-直到09:00,差异差异>0.5%.
SLO 3:预测现金流更新-直到上午10点。
SLO 4:当天结束-所有在DWH举行的比赛。
14) Edge-cases以及如何处理它们
Late presentment:交易进入下一批次-存储"源事实"("presented_in_batch_id')。
部分捕获:每个授权多个捕获-正确聚合到击球中。
Multi-MID:一个提供商,不同的地理/品牌的MID-不要溷为一谈。
重新设计:在文件斜边时,"batch_revision"和完整的笔对。
FX赛马:课程-在"settled_at"上;以其他货币进行融资-建立"fx_at_funding"和delta。
15) Dashbords和KPI
Funding ETA:预期的到达日期/时间与事实。
Hit-rate SLA:按时到达的文件比例。
提供商,方法,MID的Delta gross/net。
Fees % of volume, Reserve balance, Negative carry-over streak.
假日冲击:假期周的预测vs事实。
16)最佳实践(简称)
1.在UTC中正常化时间,但保留provider_tz切断。
2.将操作杂交和筹款网络分开;不要溷淆ND和funding。
3.在银行中引入预先安排的假期计划日历。
4.在SLA/Delta上自动导入和核对settlement文件+alerta。
5.实现批次转换("batch_revision")和确定性重复。
6.输入一个单一的真相来源:"transaction ↔ batch ↔ funding"链接。
7.保留ARN/RRN和卡的收购字段-对于分配至关重要。
8.根据周末/假期、储备金和佣金预测现金流量。
17)实施支票
数据和图表
[] Таблицы `payment_transactions`, `settlement_batches`, `funding_receipts`, `recon_links`.
- 时区字段:UTC+provider_tz。
[] Поля FX: `fx_rate_at_settle`, `fx_at_funding`.
导入和验证
- CSV/XML/JSON+文件哈希解析器。
- 金额/货币/日期的核证;match по `provider_tx_id/ARN`.
- Hendlers "late presentment","partial capture","reversal"。
操作和Alertes
- SLA截断显示器,missed files, funding delays。
- Delta阈值差值(gross, fees, net)。
- Holiday impact and negative carry-over报告。
18) FAQ
Q: 为什么T+2变成T+4?
答: 在代理银行或接收银行有周末/假期;см. funding calendar.
Q: net文件中的数量少于我们的net计算。看什么?
答:检查功能,reserve_delta,后期再融资/充电包,以及课程的正确性。
Q: 如何考虑加密?
A:在"settled_at"上的法定等效项;funding可以在USDT/fiat中出现-存储单独的"fx_at_funding"。
Q: 是否可以为所有提供商提供一个共同的切断?
答:不,每个PSP都有自己的tz/小时。在他们的切片上做一个聚合店面。
总结
设置周期和切断是货币物流的"骨架"。T+N,时区,假期,储备金和佣金的正确记录允许:- 准确地检查提供商,
- 预测流动性和支付范围,
- 遵守SLA并减少运营风险,
- 讲与财务和合规相同的语言。
通过实施单一的计划日历,严格的数据模型和自动对账,您可以使现金流可预测和可管理。