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); }
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") });
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)); }
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; }