test: Absolute-Modifier und Stichtag-Semantik der Projektion

Ergänzte Tests für Lückenschluss:
1. test_absolute_modifier_reduces_outflow: Absolute Modifier reduziert Ausgaben (-200 - 50 = -150)
2. test_absolute_modifier_clamps_to_zero: Absolute Modifier klemmt auf 0 (nie Vorzeichenflip: -200 + 300 = 0)
3. test_cashflow_on_start_date_excluded: Cashflows am start_date werden ausgeschlossen (Teil des Startsaldos)

Alle 18 Tests grün (15 existierend + 3 neu).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-17 17:27:41 +02:00
parent 020f41e9f2
commit 877cba4964
2 changed files with 32 additions and 0 deletions

View File

@@ -18,3 +18,13 @@ def test_no_crossing():
p = project(Decimal("100"), date(2026, 7, 31), [], horizon_days=5)
assert p.first_below_zero is None
assert p.low_point[1] == Decimal("100")
def test_cashflow_on_start_date_excluded():
"""Cashflows dated exactly on start_date are excluded (part of starting balance)"""
p = project(Decimal("100"), date(2026, 8, 1), [(date(2026, 8, 1), Decimal("-999"))],
horizon_days=5)
# All balances remain 100 because the -999 flow on start_date is ignored
assert all(bal == Decimal("100") for _, bal in p.series)
assert p.first_below_zero is None
assert p.low_point[1] == Decimal("100")