Centre d’aide/Escrow et finance/Escrow fees engine: splits atomiques à chaque transition
03Escrow et finance3 min de lecture

Escrow fees engine: splits atomiques à chaque transition

Comment seller payout, platform fee et buyer refund sont calcules et snapshottes à chaque release, refund ou split - sans race conditions.

Une escrow transition qui déplace de l'argent doit le faire atomically. Si le seller payout s'écrit mais pas la platform fee, vous avez une inconsistency à réparer manuellement. Le H6 fees engine l'évite en calculant tous les splits dans une seule transaction et en les écrivant comme une settlement row unique.

La fee structure

Les fees sont tenant-configurable par outcome et par category. Une config typique : release prélève un flat percentage au seller (la platform fee), refund waives la platform fee (ou facture une dispute-handling fee plus faible), split prélève la platform fee proportionnellement à la part de chaque party. Le tiered volume pricing est supporté : les deals au-dessus d'un threshold obtiennent un percentage plus bas. L'engine lit la policy depuis la H7 policies page au moment de la transition.

Le split calculation

Pour une release : total = held amount, platform_fee = total × fee_rate, seller_payout = total − platform_fee, buyer_refund = 0. Pour un refund : platform_fee = 0 (ou dispute_fee), seller_payout = 0, buyer_refund = total. Pour un split avec un résultat 70/30 : platform_fee = total × fee_rate, payable = total − platform_fee, seller_payout = payable × 0.7, buyer_refund = payable × 0.3. Les trois nombres vont sur la settlement row.

Atomicity

Le settlement write se produit dans la même database transaction que la escrow state transition. Si quelque chose échoue — fee policy not found, settlement table constraint violation — toute la transaction rollback. L'escrow reste dans son previous state. Pas de funds half-released. L'utilisateur reçoit une erreur spécifique et peut retry lorsque l'underlying issue est corrigé.

Currency snapshot

La settlement row stocke l'exchange rate au moment de la transition (en utilisant les daily rates refreshed par le cron H/exchange-rates). Si la deal currency diffère de la platform reporting currency, les deux amounts sont stockés. Un settlement fermé en USD un jour où EUR/USD valait 1.08 est recorded avec ce rate ; les financial reports six mois plus tard ne re-translate pas silencieusement.