public GMWBRider(Person person, Annuities annuity) { int growthYears = Math.Max(accumulation, person.retirementDate - DateTime.Now.Year); if (annuity.annuityTime == AnnuityTime.Immediate) { growthYears = 0; } benifitBase = FutureValue.GetFutureValue(annuity.initialAmount, rollUp, growthYears); annualIncome = (benifitBase * minimumPercentage) * (1 - fee); annuity.distributionsBeforeTax = annualIncome; annuity.gmwb = true; annuity.yearsOfPayments = (int)Math.Round(benifitBase / annualIncome); if (annuity.annuityTax == AnnuityTax.Qualified) { annuity.exclusionRatio = annuity.initialAmount / benifitBase; } else { annuity.exclusionRatio = 0; } }
public DBRider(Person person, Annuities annuity) { annuity.DB = true; int growthYears = Math.Max(accumulation, person.retirementDate - DateTime.Now.Year); if (annuity.annuityTime == AnnuityTime.Immediate) { growthYears = 0; } annuity.rate -= (annuity.extraFees + fee); annuity.distributionsBeforeTax = PaymentCalculator.GetPayments(annuity.lumpSumAtRetirement, annuity.rate, annuity.yearsOfPayments); annuity.totalExpectedReturn = annuity.distributionsBeforeTax * annuity.yearsOfPayments; annuity.exclusionRatio = 0; if (annuity.annuityTax == AnnuityTax.Qualified) { annuity.exclusionRatio = annuity.initialAmount / annuity.totalExpectedReturn; } }
public GLWBRider(Person person, Annuities annuity) { annuity.glwb = true; if (annuity.annuityTime == AnnuityTime.Immediate) { growthYears = 0; benifitBase = annuity.initialAmount; } else { growthYears = Math.Max(accumulation, person.retirementDate - DateTime.Now.Year); benifitBase = FutureValue.GetFutureValue(annuity.initialAmount, rollUp, growthYears); } //Limits should be imposed on the user to not allow glwb if they are out of the range annuities allow try { lifetimeWithdrawlRate = (LifeExpectancy.glwbTable[person.age + growthYears]); } catch (IndexOutOfRangeException exception) { Console.WriteLine(exception); lifetimeWithdrawlRate = 0; } annualIncome = (lifetimeWithdrawlRate * benifitBase) * (1 - fee); annuity.distributionsBeforeTax = annualIncome; if (annuity.annuityTax == AnnuityTax.Qualified) { annuity.exclusionRatio = annuity.initialAmount / benifitBase; } else { annuity.exclusionRatio = 0; } }
public Qualified(Brokerage stock, Person person) { qualDefFix = new AnnuityFactory(AnnuityTax.Qualified, AnnuityTime.Deferred, AnnuityRate.Fixed, person, stock); qualDefVar = new AnnuityFactory(AnnuityTax.Qualified, AnnuityTime.Deferred, AnnuityRate.Variable, person, stock); qualImFix = new AnnuityFactory(AnnuityTax.Qualified, AnnuityTime.Immediate, AnnuityRate.Fixed, person, stock); qualImVar = new AnnuityFactory(AnnuityTax.Qualified, AnnuityTime.Immediate, AnnuityRate.Variable, person, stock); fixedIm = qualImFix.yearlyBreakdown; fixedDef = qualDefFix.yearlyBreakdown; varIm = qualImVar.yearlyBreakdown; varDef = qualDefVar.yearlyBreakdown; fixedImYearly = qualImFix.afterTaxIncome; fixedDefYearly = qualDefFix.afterTaxIncome; varImYearly = qualImVar.afterTaxIncome; varDefYearly = qualDefVar.afterTaxIncome; fixedDefAsset = qualDefFix.assetValue; fixedImAsset = qualImFix.assetValue; varDefAsset = qualDefVar.assetValue; varImAsset = qualImVar.assetValue; Annuities.FinishStock(stock); }