diff --git a/backend/src/utils/liquidityForecast.ts b/backend/src/utils/liquidityForecast.ts index 05bc464..986d40f 100644 --- a/backend/src/utils/liquidityForecast.ts +++ b/backend/src/utils/liquidityForecast.ts @@ -119,6 +119,12 @@ const getIncomingInvoiceSignedAmount = (invoice: any) => { return roundMoney(invoice.expense === false ? amount : amount * -1); }; +const getRemainingSignedAmount = (signedAmount: number, allocatedAmount: number) => { + const remainingAbsolute = Math.max(0, Math.abs(Number(signedAmount || 0)) - Math.abs(Number(allocatedAmount || 0))); + if (remainingAbsolute <= 0.01) return 0; + return roundMoney(Math.sign(Number(signedAmount || 0)) * remainingAbsolute); +}; + const findCancellationDocumentIds = (documents: any[]) => { return new Set( documents @@ -392,7 +398,7 @@ export const generateLiquidityForecast = async ( .filter((invoice) => !invoice.paid) .forEach((invoice) => { const signedAmount = getIncomingInvoiceSignedAmount(invoice); - const openAmount = roundMoney(signedAmount - (allocationByIncomingInvoice.get(invoice.id) || 0)); + const openAmount = getRemainingSignedAmount(signedAmount, allocationByIncomingInvoice.get(invoice.id) || 0); if (Math.abs(openAmount) <= 0.01) return; const dueDate = dayjs(invoice.dueDate || invoice.date).isValid()