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:
1 parent
83ee9d5a25
commit
039fdcaf27
6 files changed
+295
-20
No files matched your search
@@ -192,7 +192,8 @@ test('ESt-Vorauszahlung 50000: 10.12. bei Horizont 90, keine bei Horizont 30; oh
|
||||
const settings = { estPrepaymentCents: 50000 }
|
||||
const r90 = buildForecast({ today: TODAY, horizonDays: 90, balanceCents: BALANCE, settings })
|
||||
assert.deepEqual(r90.posten, [{ date: '2026-12-10', label: 'ESt-Vorauszahlung', amountCents: -50000, sicherheit: 'sicher' }])
|
||||
assert.equal(r90.fixkosten30Cents, 50000)
|
||||
// die ESt-Vorauszahlung ist keine Fixkosten-Position: sie steckt schon in der Steuerruecklage (M6)
|
||||
assert.equal(r90.fixkosten30Cents, 0)
|
||||
assert.deepEqual(r90.minSicher, { amountCents: -39107, date: '2026-12-10' })
|
||||
assert.deepEqual(buildForecast({ today: TODAY, horizonDays: 30, balanceCents: BALANCE, settings }).posten, [])
|
||||
assert.deepEqual(buildForecast({ today: TODAY, horizonDays: 90, balanceCents: BALANCE, settings: { estPrepaymentCents: 0 } }).posten, [])
|
||||
@@ -205,7 +206,7 @@ test('ESt-Vorauszahlung: alle vier Termine, auch über den Jahreswechsel', () =>
|
||||
assert.deepEqual(dates(buildForecast({ today: '2026-12-10', horizonDays: 0, balanceCents: 0, settings: { estPrepaymentCents: 100 } })), ['2026-12-10'])
|
||||
})
|
||||
|
||||
test('Auszahlung in_transit 1500 am 03.10.: sicher +1500; pending zählt, paid/canceled/failed und vergangene nicht', () => {
|
||||
test('Auszahlung in_transit 1500 am 03.10.: sicher +1500; pending zählt, paid/canceled/failed nicht, eine verspätete (Ankunftstag vorbei) kommt heute (M7)', () => {
|
||||
const payouts = [
|
||||
{ id: 'po_1', amountCents: 1500, arrivalDate: '2026-10-03', status: 'in_transit' },
|
||||
{ id: 'po_2', amountCents: 700, arrivalDate: '2026-10-06', status: 'pending' },
|
||||
@@ -217,14 +218,52 @@ test('Auszahlung in_transit 1500 am 03.10.: sicher +1500; pending zählt, paid/c
|
||||
]
|
||||
const r = base({ payouts })
|
||||
assert.deepEqual(r.posten, [
|
||||
{ date: TODAY, label: 'Stripe-Auszahlung', amountCents: 999, sicherheit: 'sicher' },
|
||||
{ date: '2026-10-03', label: 'Stripe-Auszahlung', amountCents: 1500, sicherheit: 'sicher' },
|
||||
{ date: '2026-10-06', label: 'Stripe-Auszahlung', amountCents: 700, sicherheit: 'sicher' },
|
||||
])
|
||||
assert.equal(r.endeSicherCents, 13093)
|
||||
assert.equal(r.endeErwartetCents, 13093)
|
||||
assert.equal(r.endeSicherCents, 14092)
|
||||
assert.equal(r.endeErwartetCents, 14092)
|
||||
assert.equal(r.fixkosten30Cents, 0)
|
||||
})
|
||||
|
||||
test('verspätete Auszahlung: Ankunftstag gestern oder vor Wochen -> heute, auch in_transit; ungültige Tage fallen weg (M7)', () => {
|
||||
const r = base({
|
||||
payouts: [
|
||||
{ id: 'po_1', amountCents: 4000, arrivalDate: '2026-09-30', status: 'in_transit' },
|
||||
{ id: 'po_2', amountCents: 500, arrivalDate: '2026-08-01', status: 'pending' },
|
||||
{ id: 'po_3', amountCents: 900, arrivalDate: 'gestern', status: 'pending' },
|
||||
],
|
||||
})
|
||||
assert.deepEqual(r.posten.map((p) => [p.date, p.amountCents]), [[TODAY, 4000], [TODAY, 500]])
|
||||
assert.deepEqual(r.minSicher, { amountCents: 10893, date: TODAY })
|
||||
assert.equal(r.endeSicherCents, 15393)
|
||||
// ein Abfluss am selben Tag kommt weiter zuerst
|
||||
const mixed = base({
|
||||
payouts: [{ id: 'po_1', amountCents: 4000, arrivalDate: '2026-09-30', status: 'in_transit' }],
|
||||
fixedCosts: [monthly({ nextDate: TODAY })],
|
||||
})
|
||||
assert.deepEqual(mixed.posten.map((p) => p.amountCents), [-449, 4000])
|
||||
})
|
||||
|
||||
test('fixkosten30Cents zählt nur Fixkosten, nicht die ESt-Vorauszahlung; die ESt bleibt ein sicherer Posten (M6)', () => {
|
||||
const r = buildForecast({
|
||||
today: TODAY,
|
||||
horizonDays: 90,
|
||||
balanceCents: BALANCE,
|
||||
settings: { estPrepaymentCents: 50000 },
|
||||
fixedCosts: [monthly({ nextDate: '2026-10-10' })],
|
||||
})
|
||||
// 449 monatlich: 10.10., 10.11., 10.12., 10.01. liegt hinter dem Horizont (30.12.)
|
||||
assert.equal(r.fixkosten30Cents, 3 * 449)
|
||||
assert.deepEqual(r.posten.filter((p) => p.label === 'ESt-Vorauszahlung'), [{ date: '2026-12-10', label: 'ESt-Vorauszahlung', amountCents: -50000, sicherheit: 'sicher' }])
|
||||
// die Linie rechnet die ESt weiter ein: 10893 - 3 * 449 - 50000
|
||||
assert.equal(r.endeSicherCents, 10893 - 3 * 449 - 50000)
|
||||
|
||||
// nur ESt, keine Fixkosten: 0
|
||||
assert.equal(buildForecast({ today: TODAY, horizonDays: 90, balanceCents: 0, settings: { estPrepaymentCents: 50000 } }).fixkosten30Cents, 0)
|
||||
})
|
||||
|
||||
test('Sortierung: nach Datum, am selben Tag Abflüsse zuerst', () => {
|
||||
const r = base({
|
||||
payouts: [{ id: 'po_1', amountCents: 1500, arrivalDate: '2026-10-14', status: 'in_transit' }],
|
||||
|
||||
Reference in new issue
Block a user