Manuelle Buchungen in Liquiditätsprognose korrekt verrechnen

Berechnet offene Eingangsbelege jetzt mit Absolutbeträgen, damit manuelle Buchungen und Bankzuordnungen unabhängig vom gespeicherten Vorzeichen korrekt in der Prognose erscheinen.
This commit is contained in:
2026-04-23 21:13:04 +02:00
parent edec670ee0
commit 5cc41f9a2d

View File

@@ -119,6 +119,12 @@ const getIncomingInvoiceSignedAmount = (invoice: any) => {
return roundMoney(invoice.expense === false ? amount : amount * -1); 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[]) => { const findCancellationDocumentIds = (documents: any[]) => {
return new Set( return new Set(
documents documents
@@ -392,7 +398,7 @@ export const generateLiquidityForecast = async (
.filter((invoice) => !invoice.paid) .filter((invoice) => !invoice.paid)
.forEach((invoice) => { .forEach((invoice) => {
const signedAmount = getIncomingInvoiceSignedAmount(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; if (Math.abs(openAmount) <= 0.01) return;
const dueDate = dayjs(invoice.dueDate || invoice.date).isValid() const dueDate = dayjs(invoice.dueDate || invoice.date).isValid()