// Price math in öre (1 SEK = 100 öre) to avoid float drift. export function formatOre(ore: number, locale: 'sv' | 'en' = 'sv'): string { const sek = ore / 100; return new Intl.NumberFormat(locale === 'sv' ? 'sv-SE' : 'en-SE', { style: 'currency', currency: 'SEK', minimumFractionDigits: 2, maximumFractionDigits: 2, }).format(sek); } export function vatAmountOre(netOre: number, vatBp: number): number { return Math.round((netOre * vatBp) / 10000); } /** Net price + VAT, rounded the same way as billing. */ export function priceInclVatOre(netOre: number, vatBp: number): number { return netOre + vatAmountOre(netOre, vatBp); } export function computeTotals( items: Array<{ unitPriceOre: number; quantity: number; vatBp: number }>, ) { let subtotal = 0; let vat = 0; for (const i of items) { const line = i.unitPriceOre * i.quantity; subtotal += line; vat += vatAmountOre(line, i.vatBp); } return { subtotalOre: subtotal, vatOre: vat, totalOre: subtotal + vat }; }