package financial import "math" // NPVCalculatorImpl implements NPVCalculator interface type NPVCalculatorImpl struct{} // NewNPVCalculator creates a new NPV calculator func NewNPVCalculator() NPVCalculator { return &NPVCalculatorImpl{} } // CalculateNPV calculates Net Present Value // NPV = -CAPEX + Σ(cash_flow / (1 + r)^t) for t=1 to n func (npv *NPVCalculatorImpl) CalculateNPV(capex, annualCashFlow, discountRate float64, years int) float64 { npvValue := -capex // Initial investment (negative) for year := 1; year <= years; year++ { discountFactor := math.Pow(1+discountRate, float64(year)) npvValue += annualCashFlow / discountFactor } return npvValue }