fix: negative Kontostände werden nicht mehr als positiv angezeigt

Die Money-Komponente gab den Betrag immer durch Math.abs() aus; das Vorzeichen
kam nur über das optionale sign-Prop. Kontostände (Konten-Seite und Dashboard-
Karte) übergeben keines – ein überzogenes Konto oder eine Kreditkartenschuld sah
dadurch positiv aus, während die Gesamtsumme korrekt negativ rechnete. Genau
dieser Widerspruch: alle Konten scheinbar im Plus, Gesamt im Minus.

Ohne sign steht der Wert für sich selbst und wird jetzt mit echtem Vorzeichen
(und rot) ausgegeben; mit sign bleibt es wie bisher, weil dort die Richtung aus
der Buchungsart kommt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Guido
2026-08-21 07:01:04 +02:00
co-authored by Claude Opus 4.8
parent 5a747fbef4
commit e69be7f3d5
+14 -4
View File
@@ -1,7 +1,14 @@
import { formatMoney } from "../format";
// Zeigt einen Betrag in Kontowährung und – falls abweichend – zusätzlich den in
// die Hauptwährung umgerechneten Wert. `sign` färbt +/− (grün/rot).
// die Hauptwährung umgerechneten Wert.
//
// `sign` ist für Listen gedacht, in denen die Richtung aus der Buchungsart kommt
// (Ausgabe/Einnahme): dort wird der Betrag ohne Vorzeichen geführt und hier mit
// +/− und Farbe versehen. OHNE `sign` steht der Wert für sich selbst – etwa ein
// Kontostand – und wird mit seinem echten Vorzeichen ausgegeben. Früher lief er
// auch dann durch Math.abs(), wodurch ein überzogenes Konto oder eine
// Kreditkartenschuld fälschlich positiv aussah.
export default function Money({
cents,
currency = "EUR",
@@ -10,7 +17,8 @@ export default function Money({
sign = null, // "pos" | "neg" | null
showConverted = true,
}) {
const cls = sign ? `amount ${sign}` : "amount";
const negativ = !sign && Number(cents) < 0;
const cls = sign ? `amount ${sign}` : negativ ? "amount neg" : "amount";
const prefix = sign === "pos" ? "+" : sign === "neg" ? "−" : "";
const showBase =
showConverted && baseCents != null && currency !== baseCurrency;
@@ -18,10 +26,12 @@ export default function Money({
<span className="money">
<span className={cls}>
{prefix}
{formatMoney(Math.abs(cents), currency)}
{formatMoney(sign ? Math.abs(cents) : cents, currency)}
</span>
{showBase && (
<span className="amount-converted">≈ {formatMoney(Math.abs(baseCents), baseCurrency)}</span>
<span className="amount-converted">
≈ {formatMoney(sign ? Math.abs(baseCents) : baseCents, baseCurrency)}
</span>
)}
</span>
);