Exemple #1
0
        public async Task KnowsWhenTwoComplexWorkingPeopleCanRetire_NoGivenRetirementDate_RetirementAfterPrivatePensionAge()
        {
            var calc = new RetirementIncrementalApproachCalculator(_fixedDateProvider, _assumptions, _pensionAgeCalc, _statePensionCalculator, _taxSystem);

            var person1 = new Person {
                Salary = 50_000, Dob = new DateTime(1981, 05, 30), ExistingSavings = 50_000, ExistingPrivatePension = 50_000,
                EmployeeContribution = 5m, EmployerContribution = 3m, EmergencyFundSpec = new EmergencyFundSpec("50000")
            };
            var person2 = new Person {
                Salary = 50_000, Dob = new DateTime(1981, 05, 30), ExistingSavings = 50_000, ExistingPrivatePension = 50_000,
                EmployeeContribution = 5m, EmployerContribution = 3m, EmergencyFundSpec = new EmergencyFundSpec("50000")
            };

            IEnumerable <Person>       personStatuses = new[] { person1, person2 };
            IEnumerable <SpendingStep> stepInputs     = new [] { new SpendingStep(_fixedDateProvider.Now(), 70_000) };
        public async Task <RetirementReportDto> RetirementReportForAsync(RetirementReportRequestDto requestDto)
        {
            var emergencyFundSpec = new EmergencyFundSpec(requestDto.EmergencyFund);
            var personList        = requestDto.Persons.ToList();

            if (personList.Count == 2)
            {
                emergencyFundSpec = emergencyFundSpec.SplitInTwo();
            }

            var person             = personList.Select(p => PersonStatus(p, emergencyFundSpec));
            var spendingStepInputs = new List <SpendingStep> {
                new SpendingStep(DateTime.Now.Date, Money.Create(requestDto.Spending))
            };

            spendingStepInputs.AddRange(requestDto.SpendingSteps.Select(dto => new SpendingStep(dto.Date ?? person.First().Dob.AddYears(Convert.ToInt32(dto.Age)), Money.Create(dto.Amount))));

            var retirementReport = await _retirementCalculator.ReportForTargetAgeAsync(person, spendingStepInputs, Age.Create(requestDto.TargetRetirementAge));

            return(new RetirementReportDto(retirementReport));
        }
        private static Person PersonStatus(PersonDto dto, EmergencyFundSpec emergencyFundSpec)
        {
            var rentalInfos = dto.Rental == null ? new List <RentalInfo>() : dto.Rental.Select(infoDto => new RentalInfo()
            {
                CurrentValue        = Money.Create(infoDto.CurrentValue),
                Expenses            = Money.Create(infoDto.Expenses),
                GrossIncome         = Money.Create(infoDto.GrossRent),
                Repayment           = infoDto.Repayment,
                MortgagePayments    = Money.Create(infoDto.MortgageCosts),
                OutstandingMortgage = Money.Create(infoDto.OutstandingMortgage),
                RemainingTerm       = infoDto.RemainingTerm
            });

            var dob = DateTime.Parse(dto.Dob);

            var salaryStepInputs = new List <SalaryStep>();
            var salarySteps      = dto.SalarySteps.Where(step => !string.IsNullOrWhiteSpace(step.Age) && !string.IsNullOrWhiteSpace(step.Amount))
                                   .Select(step => new SalaryStep(step.Date ?? dob.AddYears(Convert.ToInt32(step.Age)), Money.Create(step.Amount)));

            salaryStepInputs.AddRange(salarySteps);

            var person = new Person
            {
                Dob                    = dob,
                Salary                 = Money.Create(dto.Salary),
                SalaryStepInputs       = salaryStepInputs,
                Sex                    = dto.Female ? Sex.Female : Sex.Male,
                EmergencyFundSpec      = emergencyFundSpec,
                ExistingSavings        = Money.Create(dto.Savings),
                ExistingPrivatePension = Money.Create(dto.Pension),
                EmployerContribution   = PensionContribution.Create(dto.EmployerContribution),
                EmployeeContribution   = PensionContribution.Create(dto.EmployeeContribution),
                NiContributingYears    = string.IsNullOrWhiteSpace(dto.NiContributingYears) ? (int?)null : Convert.ToInt32(dto.NiContributingYears),
                RentalPortfolio        = new RentalPortfolio(rentalInfos.ToList()),
                Children               = dto.Children ?? new List <DateTime>(),
            };

            return(person);
        }
Exemple #4
0
 private static Person GetPerson2()
 {
     return(new Person {
         Salary = 50_000, Dob = new DateTime(1985, 12, 1), ExistingSavings = 50_000, ExistingPrivatePension = 50_000,
         EmployeeContribution = 5m, EmployerContribution = 3m, EmergencyFundSpec = new EmergencyFundSpec("50000")
     });
Exemple #5
0
 public static Step CreateInitialStep(DateTime now, int niContributingYearsSoFar, int existingSavings, int existingPrivatePension, EmergencyFundSpec emergencyFundSpec,
                                      decimal personMonthlySpending)
 {
     return(new Step(now, niContributingYearsSoFar, existingSavings, existingPrivatePension, emergencyFundSpec, personMonthlySpending));
 }
Exemple #6
0
        private Step(DateTime now, int niContributingYearsSoFar, int existingSavings, int existingPrivatePension, EmergencyFundSpec emergencyFundSpec, decimal personMonthlySpending)
        {
            StepDate = now;

            NiContributingYears = niContributingYearsSoFar;
            var requiredCashSavings = emergencyFundSpec.RequiredEmergencyFund(personMonthlySpending);

            Pots = new MoneyPots(requiredCashSavings);
            Pots.AssignIncome(existingSavings);

            PrivatePensionAmount = existingPrivatePension;
            Spending             = personMonthlySpending;
        }