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;
            }
        }
Example #2
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;
            }
        }
Example #4
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);
        }