feat: Kredit-Mathematik (Annuitaet, endfaellig)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
29
finance/tests/test_loans.py
Normal file
29
finance/tests/test_loans.py
Normal file
@@ -0,0 +1,29 @@
|
||||
from datetime import date
|
||||
from decimal import Decimal
|
||||
|
||||
from app.engine.loans import add_months, annuity_payment, loan_schedule
|
||||
|
||||
|
||||
def test_add_months_clamps_month_end():
|
||||
assert add_months(date(2026, 1, 31), 1) == date(2026, 2, 28)
|
||||
|
||||
|
||||
def test_annuity_payment():
|
||||
# 10.000 EUR, 6 % p.a., 48 Monate -> 234,85 EUR Monatsrate
|
||||
assert annuity_payment(Decimal("10000"), Decimal("6"), 48) == Decimal("234.85")
|
||||
|
||||
|
||||
def test_annuity_schedule_amortizes_fully():
|
||||
plan = loan_schedule(Decimal("10000"), Decimal("6"), 48, date(2026, 8, 1), "annuity")
|
||||
assert len(plan) == 48
|
||||
assert plan[-1].remaining == Decimal("0.00")
|
||||
assert plan[0].due == date(2026, 9, 1)
|
||||
assert plan[0].interest == Decimal("50.00") # 10000 * 0,5 %
|
||||
assert plan[0].payment < 0
|
||||
|
||||
|
||||
def test_bullet_loan():
|
||||
plan = loan_schedule(Decimal("10000"), Decimal("6"), 12, date(2026, 8, 1), "bullet")
|
||||
assert all(i.principal == 0 for i in plan[:-1])
|
||||
assert plan[-1].principal == Decimal("10000")
|
||||
assert plan[-1].remaining == Decimal("0.00")
|
||||
Reference in New Issue
Block a user