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