Finanzen: Vorschau, Steuer und Aufgaben genauer (Fixkosten ohne ESt, verspaetete Auszahlungen, Abos nicht ladbar)

M6: fixkosten30Cents zaehlt nur Fixkosten, die ESt-Vorauszahlung bleibt sicherer Posten.
M7: verspaetete Auszahlung (Ankunftstag vorbei, noch nicht bezahlt) kommt heute.
M8: ohne Stripe sind Kleinunternehmer-Zaehler und Anteil unbekannt (null), keine Warnung daraus.
M12: Verbindungsdokument ohne Sitzung zaehlt als keine Verbindung.
M13: Buchungen privat/fixkosten gehen nicht in die Fixkosten-Vorschlaege.
M14: Vorjahresumsatz ueber 25.000 EUR ist eine hohe Aufgabe.
M15: scheitert das Laden der Abos, meldet abos.fehler statt die ganze Uebersicht zu kippen.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-01 15:42:06 +00:00
1 parent 83ee9d5a25
commit 039fdcaf27
6 files changed
+295 -20

No files matched your search

+13 -5
View File
@@ -3,9 +3,11 @@ import { addDays, berlinDate, daysBetween } from './dates.js'
/**
* Liquiditaetsvorschau (rein, ohne I/O). Zwei Linien ueber denselben Zeitraum (heute bis heute + horizonDays,
* beide Tage eingeschlossen):
* - "sicher": Stripe-Auszahlungen, die schon unterwegs sind, Fixkosten und ESt-Vorauszahlungen.
* - "sicher": Stripe-Auszahlungen, die schon unterwegs sind (mit Ankunftstag vor heute: heute), Fixkosten und
* ESt-Vorauszahlungen.
* - "erwartet": offene Rechnungen und Abo-Verlaengerungen; sie kommen zu den sicheren Posten dazu.
* Betraege sind ganze Cent mit Vorzeichen (+ Zufluss, - Abfluss), Tage YYYY-MM-DD; "heute" kommt von aussen.
* fixkosten30Cents ist die Summe der Fixkosten im Zeitraum (ohne ESt-Vorauszahlungen).
*/
export const FORECAST_ANNAHME =
@@ -105,15 +107,23 @@ export function buildForecast({
if (payout?.status !== 'pending' && payout?.status !== 'in_transit') continue
if (!isCents(payout.amountCents) || payout.amountCents === 0) continue
const arrival = validYmd(payout.arrivalDate)
if (arrival && inRange(arrival)) add(arrival, 'Stripe-Auszahlung', payout.amountCents, SICHER)
if (!arrival) continue
// Eine noch nicht angekommene Auszahlung mit Ankunftstag vor heute (Stripe ist verspaetet) kommt frueh, nicht nie: heute
const date = arrival < today ? today : arrival
if (inRange(date)) add(date, 'Stripe-Auszahlung', payout.amountCents, SICHER)
}
// Nur die Fixkosten zaehlen fuer fixkosten30Cents: die ESt-Vorauszahlung steckt schon in der Steuerruecklage
let fixkosten30Cents = 0
for (const cost of fixedCosts || []) {
if (!cost || cost.active === false) continue
const step = INTERVAL_MONTHS[cost.interval]
const start = validYmd(cost.nextDate)
if (!step || !start || !isCents(cost.amountCents) || cost.amountCents <= 0) continue
for (const date of occurrencesIn(start, step, today, end)) add(date, cost.name || 'Fixkosten', -cost.amountCents, SICHER)
for (const date of occurrencesIn(start, step, today, end)) {
add(date, cost.name || 'Fixkosten', -cost.amountCents, SICHER)
fixkosten30Cents += cost.amountCents
}
}
const prepayment = settings?.estPrepaymentCents
@@ -175,8 +185,6 @@ export function buildForecast({
const sicher = line((item) => item.sicherheit === SICHER)
const erwartet = line(() => true)
const fixkosten30Cents = posten.reduce((sum, item) => (item.sicherheit === SICHER && item.amountCents < 0 ? sum - item.amountCents : sum), 0)
return {
posten,
minSicher: sicher.min,