Escrow fees engine: atomische splits bij elke transitie
Hoe seller payout, platform fee en buyer refund bij elke release, refund of split worden berekend en gesnapshot - zonder race conditions.
Een escrow transition die money beweegt moet dat atomically doen. Als de seller payout schrijft maar de platform fee niet, heb je een inconsistency die manueel gerepareerd moet worden. De H6 fees engine voorkomt dat door alle splits in één transaction te berekenen en als één settlement row te schrijven.
De fee structure
Fees zijn tenant-configurable per outcome en per category. Een typical config: release neemt een flat percentage van de seller (de platform fee), refund waives de platform fee (of rekent een kleinere dispute-handling fee), split neemt de platform fee proportioneel volgens het aandeel van elke party. Tiered volume pricing wordt ondersteund: deals boven een threshold krijgen een lager percentage. De engine leest de policy van de H7 policies page op het moment van de transition.
De split calculation
Voor release: total = held amount, platform_fee = total × fee_rate, seller_payout = total − platform_fee, buyer_refund = 0. Voor refund: platform_fee = 0 (of dispute_fee), seller_payout = 0, buyer_refund = total. Voor een split met 70/30 result: platform_fee = total × fee_rate, payable = total − platform_fee, seller_payout = payable × 0.7, buyer_refund = payable × 0.3. Alle drie numbers komen op de settlement row.
Atomicity
De settlement write gebeurt in dezelfde database transaction als de escrow state transition. Als iets faalt — fee policy not found, settlement table constraint violation — rolt de hele transaction terug. De escrow blijft in zijn previous state. Geen half-released funds. De user krijgt een specifieke error en kan retryn zodra het onderliggende issue gefixt is.
Currency snapshot
De settlement row bewaart de exchange rate op het moment van de transition (met de daily rates die door de H/exchange-rates cron worden refreshed). Als de deal currency verschilt van de platform reporting currency, worden beide amounts opgeslagen. Een settlement die in USD sluit op een dag waarop EUR/USD 1.08 was, wordt met die rate recorded; financial reports zes maanden later re-translaten niet stil.