Files
boka-gasol247/src/lib/money.ts
2026-05-22 10:50:48 +02:00

34 lines
1022 B
TypeScript

// 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 };
}