示例#1
0
        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 async Task <BvgCalculationResult> CalculateAsync(BvgPlan plan, BvgCalculationInput input)
        {
            BvgCalculationResult result = new BvgCalculationResult();

            result.VersicherterLohn      = _calcVersicherterLohn.Calculate(plan, input);
            result.Altersgutschrift      = _calcAltersgutschrift.Calculate(plan, input);
            result.AlterguthabenEndeJahr = _calcAlterguthabenEndeJahr.Calculate(plan, input).Item2;

            result.Altersrente = 1000m;

            return(await Task.FromResult(result));
        }