public Tuple <DateTime, decimal> Calculate(BvgPlan plan, BvgCalculationInput input) { int schlussalter = _calcSchlussalter.Calculate(plan, input); DateTime dateOfRetirement = _calcPensionierung.Calculate(plan, input); int rechnungsjahr = input.DateOfEintritt.Year; int bvgAlter = rechnungsjahr - input.DateOfBirth.Year; bool isPensionierungInRechnungsjahr = bvgAlter == schlussalter; var endOfYear = new DateTime(rechnungsjahr, 1, 1); if (isPensionierungInRechnungsjahr) { endOfYear = dateOfRetirement; } decimal aghEndeJahr = 0; if (bvgAlter >= plan.Eintrittsalter) { decimal schrumpPeriodeRechnungsjahr = (isPensionierungInRechnungsjahr ? dateOfRetirement.Month / 12m : 1m); decimal agsRechnungsjahr = _calcAltersgutschrift.Calculate(plan, input) * schrumpPeriodeRechnungsjahr; aghEndeJahr = agsRechnungsjahr + input.Altersguthaben * (1m + _constantsBvg.BvgZins * schrumpPeriodeRechnungsjahr); } return(Tuple.Create(endOfYear, aghEndeJahr)); }
public DateTime Calculate(BvgPlan plan, BvgCalculationInput input) { int schlussalter = _calcSchlussalter.Calculate(plan, input); DateTime dateOfRetirement = new DateTime(input.DateOfBirth.Year, input.DateOfBirth.Month, 1).AddMonths(1).AddYears(schlussalter).AddDays(-1); return(dateOfRetirement); }