1a12fb870b
- New /developers/ page with API docs, SDKs, pricing, use cases - OpenAPI 3.0 spec for Orders, Missions, Photos, Analytics - Case study: Glasskiosken i Flatenbadet — complete ROI analysis - Updated /order/ with recurring missions and frequency dropdown
152 lines
3.6 KiB
JavaScript
152 lines
3.6 KiB
JavaScript
/**
|
|
* 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,
|
|
};
|
|
}
|