private RiskRateDetail getRiskRateDetail(int actualSumAssured, OrderedDictionary dictionary) { RiskRateDetail riskRateDetail = null; for (var index = 0; index < dictionary.Keys.Count; index++) { int lowerBandSumAssured = (int)dictionary.Cast <DictionaryEntry>().ElementAt(index).Key; decimal lowerBandRiskRate = (decimal)dictionary[index]; int nextIndex = index + 1; int upperBandSumAssured = (int)dictionary.Cast <DictionaryEntry>().ElementAt(nextIndex).Key; decimal upperBandRiskRate = (decimal)dictionary[nextIndex]; if (actualSumAssured >= lowerBandSumAssured && actualSumAssured <= upperBandSumAssured) { riskRateDetail = new RiskRateDetail( actualSumAssured, lowerBandSumAssured, lowerBandRiskRate, upperBandSumAssured, upperBandRiskRate ); break; } } return(riskRateDetail); }
private decimal calculateRiskRate(int sumAssured, OrderedDictionary dictionary) { decimal riskRate; RiskRateDetail riskRateDetail = getRiskRateDetail(sumAssured, dictionary); decimal lowerBandSumAssured = riskRateDetail.LowerBandSumAssured; decimal upperBandSumAssured = riskRateDetail.UpperBandSumAssured; decimal lowerBandRiskRate = riskRateDetail.LowerBandRiskRateValue; decimal upperBandRiskRate = riskRateDetail.UpperBandRiskRateValue; riskRate = ((sumAssured - lowerBandSumAssured) / (upperBandSumAssured - lowerBandSumAssured) * upperBandRiskRate + (upperBandSumAssured - sumAssured) / (upperBandSumAssured - lowerBandSumAssured) * lowerBandRiskRate); return(riskRate); }