#!/usr/bin/env python3 """Recompute Cedar Trail's fictional note and early-retirement schedules. Run with ``uv run python`` and this file's path. This dependency-free script uses supplied scope conclusions; it does not decide whether changed terms are a modification or extinguishment, establish fair value, or approve disclosures. """ def money(amount: float) -> str: """Format a number as accounting-style US dollars.""" return f"${amount:,.2f}" if amount >= 0 else f"(${abs(amount):,.2f})" def heading(title: str) -> None: print(f"\n{title}\n{'-' * len(title)}") heading("1. Zero-coupon note") zero_face = 500_000.00 zero_rate = 0.08 zero_periods = 3 zero_issue_price = zero_face / (1 + zero_rate) ** zero_periods print(f"{'Maturity amount':<34} {money(zero_face):>18}") print(f"{'Issue price':<34} {money(zero_issue_price):>18}") print(f"{'Original discount':<34} {money(zero_face - zero_issue_price):>18}") print(f"\n{'Year':>4} {'Opening':>18} {'Cash':>14} {'Expense':>16} {'Ending':>18}") zero_carrying = zero_issue_price zero_total_interest = 0.0 for year in range(1, zero_periods + 1): opening = zero_carrying interest_expense = opening * zero_rate zero_carrying = opening + interest_expense zero_total_interest += interest_expense print( f"{year:>4} {money(opening):>18} {money(0):>14} " f"{money(interest_expense):>16} {money(zero_carrying):>18}" ) heading("2. Level-payment equipment note") note_principal = 300_000.00 note_rate = 0.07 note_periods = 3 note_payment = note_principal * note_rate / (1 - (1 + note_rate) ** -note_periods) print(f"{'Opening principal':<34} {money(note_principal):>18}") print(f"{'Equal annual payment':<34} {money(note_payment):>18}") print( f"\n{'Year':>4} {'Opening':>18} {'Payment':>14} {'Interest':>14} " f"{'Principal':>16} {'Ending':>18}" ) note_carrying = note_principal total_principal_reduction = 0.0 for year in range(1, note_periods + 1): opening = note_carrying interest_expense = opening * note_rate principal_reduction = note_payment - interest_expense note_carrying = opening - principal_reduction total_principal_reduction += principal_reduction print( f"{year:>4} {money(opening):>18} {money(note_payment):>14} " f"{money(interest_expense):>14} {money(principal_reduction):>16} " f"{money(note_carrying):>18}" ) heading("3. Supplied extinguishment") net_carrying_amount = 612_400.00 reacquisition_price = 625_000.00 extinguishment_loss = reacquisition_price - net_carrying_amount print(f"{'Reacquisition consideration':<34} {money(reacquisition_price):>18}") print(f"{'Net carrying amount removed':<34} {money(-net_carrying_amount):>18}") print(f"{'Loss on extinguishment':<34} {money(extinguishment_loss):>18}") heading("4. Reconciliations") print(f"{'Zero-coupon ending amount':<34} {money(zero_carrying):>18}") print(f"{'Zero-coupon total interest':<34} {money(zero_total_interest):>18}") print(f"{'Installment principal repaid':<34} {money(total_principal_reduction):>18}") print(f"{'Installment ending principal':<34} {money(note_carrying):>18}") if abs(zero_carrying - zero_face) > 0.000001: raise SystemExit("FAIL: zero-coupon note does not accrete to maturity") if abs(note_carrying) > 0.000001: raise SystemExit("FAIL: installment note does not amortize to zero") if abs(extinguishment_loss - 12_600.00) > 0.005: raise SystemExit("FAIL: extinguishment consequence does not reconcile") print("\nPASS: both note schedules and the supplied $12,600.00 loss reconcile.") print("Boundary: PASS verifies arithmetic only; every scope and reporting judgment remains open.")