/** * quiXzoom Frilans Payout — Market Configurations * Multi-market support with tax rates and payout methods */ export const MARKETS = { SE: { country: 'SE', currency: 'SEK', language: 'sv', tax_rate: 0.30, platform_fee_pct: 0.15, processing_fee_pct: 0.06, min_payout: 100, payout_schedule: 'weekly', requires_company: false, frilans_available: true, stripe_connect_available: true, bank_transfer_available: true, }, NO: { country: 'NO', currency: 'NOK', language: 'no', tax_rate: 0.25, platform_fee_pct: 0.15, processing_fee_pct: 0.06, min_payout: 100, payout_schedule: 'weekly', requires_company: false, frilans_available: true, stripe_connect_available: true, bank_transfer_available: true, }, DK: { country: 'DK', currency: 'DKK', language: 'da', tax_rate: 0.27, platform_fee_pct: 0.15, processing_fee_pct: 0.06, min_payout: 100, payout_schedule: 'weekly', requires_company: false, frilans_available: true, stripe_connect_available: true, bank_transfer_available: true, }, FI: { country: 'FI', currency: 'EUR', language: 'fi', tax_rate: 0.25, platform_fee_pct: 0.15, processing_fee_pct: 0.06, min_payout: 10, payout_schedule: 'monthly', requires_company: true, frilans_available: false, stripe_connect_available: true, bank_transfer_available: true, }, DE: { country: 'DE', currency: 'EUR', language: 'de', tax_rate: 0.20, platform_fee_pct: 0.15, processing_fee_pct: 0.06, min_payout: 10, payout_schedule: 'monthly', requires_company: true, frilans_available: false, stripe_connect_available: true, bank_transfer_available: true, }, NL: { country: 'NL', currency: 'EUR', language: 'nl', tax_rate: 0.25, platform_fee_pct: 0.15, processing_fee_pct: 0.06, min_payout: 10, payout_schedule: 'monthly', requires_company: true, frilans_available: false, stripe_connect_available: true, bank_transfer_available: true, }, US: { country: 'US', currency: 'USD', language: 'en', tax_rate: 0.15, platform_fee_pct: 0.15, processing_fee_pct: 0.029, min_payout: 10, payout_schedule: 'weekly', requires_company: false, frilans_available: false, stripe_connect_available: true, bank_transfer_available: true, }, GB: { country: 'GB', currency: 'GBP', language: 'en', tax_rate: 0.20, platform_fee_pct: 0.15, processing_fee_pct: 0.06, min_payout: 10, payout_schedule: 'weekly', requires_company: false, frilans_available: true, stripe_connect_available: true, bank_transfer_available: true, }, }; export function getMarket(countryCode) { return MARKETS[countryCode.toUpperCase()] || null; } export function listMarkets() { return Object.values(MARKETS); } export function calculatePayout(amount, market, taxHandling) { const platformFee = Math.round(amount * market.platform_fee_pct); const processingFee = Math.round(amount * market.processing_fee_pct); let taxAmount = 0; if (taxHandling === 'platform') { taxAmount = Math.round((amount - platformFee) * market.tax_rate); } const netAmount = amount - platformFee - processingFee - taxAmount; return { gross_amount: amount, platform_fee: platformFee, platform_fee_pct: market.platform_fee_pct, processing_fee: processingFee, processing_fee_pct: market.processing_fee_pct, tax_amount: taxAmount, tax_rate: taxHandling === 'platform' ? market.tax_rate : 0, net_amount: netAmount, currency: market.currency, }; }