Пример #1
0
        protected override PayeInternalBracket[] GetBracketsForPeriod()
        {
            int  year = TaxYear, period = CalculationContainer.n, periods = (int)CalculationContainer.Periods;
            bool scottish = CalculationContainer.TaxCode.IsScotlandTax;

            Tuple <int, int, int, bool> brKey;

            if (BracketCache.ContainsKey(brKey = new Tuple <int, int, int, bool>(year, period, periods, scottish)))
            {
                return(BracketCache[brKey]);
            }

            var taxYearBrackets = GetBracketsFromProvider(TaxYear > 2016 ? scottish : false);
            var periodBrackets  = new List <PayeInternalBracket>();

            decimal lastC = 0, lastK = 0;

            foreach (var taxYearBracket in taxYearBrackets)
            {
#pragma warning disable IDE0017 // Simplify object initialization
                var periodBracket = new PayeInternalBracket();
#pragma warning restore IDE0017 // Simplify object initialization
                periodBracket.R = taxYearBracket.Multiplier;
                periodBracket.B = taxYearBracket.To - taxYearBracket.From;

                periodBracket.C = periodBracket.B + lastC;
                lastC           = periodBracket.C;

                periodBracket.c = TaxMath.Factor(periodBracket.C, period, periods);
                periodBracket.c = TaxMath.Truncate(periodBracket.c, 4);
                periodBracket.v = Math.Ceiling(periodBracket.c);

                periodBracket.K = lastK + TaxMath.Multiply(periodBracket.B, periodBracket.R, TaxMath.MultiplicationAccuracy.High);
                lastK           = periodBracket.K;

                periodBracket.k = TaxMath.Factor(periodBracket.K, period, periods);
                periodBracket.k = TaxMath.Truncate(periodBracket.k, 4);

                periodBrackets.Add(periodBracket);
            }

            BracketCache[brKey] = periodBrackets.ToArray();
            return(periodBrackets.ToArray());
        }