UNPKG

@accounter/server

Version:
42 lines 1.75 kB
import { LedgerError } from './utils.helper.js'; /** * Aggregates all main ledger entries of a single conversion side (base or quote) into one * representative LedgerProto. The entries are expected to share the same currency; foreign and * local amounts are summed while meta fields are copied from the first entry. For a side with a * single entry the result is equivalent to that entry. */ export function aggregateConversionSideEntries(entries) { const [first, ...rest] = entries; if (!first) { throw new LedgerError('Cannot aggregate an empty conversion side'); } if (rest.length === 0) { return first; } let foreignAmount = 0; let localAmount = 0; for (const entry of entries) { foreignAmount += entry.creditAmount1 ?? 0; localAmount += entry.localCurrencyCreditAmount1; } const absForeignAmount = foreignAmount || undefined; return { ...first, creditAmount1: absForeignAmount, debitAmount1: absForeignAmount, localCurrencyCreditAmount1: localAmount, localCurrencyDebitAmount1: localAmount, }; } export function conversionFeeCalculator(base, quote, officialRate, defaultLocalCurrency) { if (base.currency === quote.currency) { throw new LedgerError('Conversion records must have different currencies'); } if (quote.currency === defaultLocalCurrency) { const baseAmount = (base.creditAmount1 ?? 0) / officialRate; const feeAmountByQuoteCurrency = quote.localCurrencyCreditAmount1 - baseAmount; return feeAmountByQuoteCurrency; } return quote.localCurrencyCreditAmount1 - base.localCurrencyCreditAmount1; } //# sourceMappingURL=conversion-charge-ledger.helper.js.map