public void TestMethod1() { PolicyType ptA = PolicyType.GetPolicyType("A"); PolicyType ptB = PolicyType.GetPolicyType("B"); PolicyType ptC = PolicyType.GetPolicyType("C"); MaturityData maturityData1 = new MaturityData("A001", new DateTime(1989, 1, 1), 10, false, 10, 10); Assert.IsTrue(ptA.QualifiesForDiscretionayBonus(maturityData1)); Assert.IsFalse(ptB.QualifiesForDiscretionayBonus(maturityData1)); Assert.IsFalse(ptC.QualifiesForDiscretionayBonus(maturityData1)); MaturityData maturityData2 = new MaturityData("A001", new DateTime(1990, 1, 1), 10, false, 10, 10); Assert.IsFalse(ptA.QualifiesForDiscretionayBonus(maturityData2)); Assert.IsFalse(ptB.QualifiesForDiscretionayBonus(maturityData2)); Assert.IsFalse(ptC.QualifiesForDiscretionayBonus(maturityData2)); MaturityData maturityData3 = new MaturityData("A001", new DateTime(1990, 1, 1), 10, true, 10, 10); Assert.IsFalse(ptA.QualifiesForDiscretionayBonus(maturityData3)); Assert.IsTrue(ptB.QualifiesForDiscretionayBonus(maturityData3)); Assert.IsTrue(ptC.QualifiesForDiscretionayBonus(maturityData3)); MaturityData maturityData4 = new MaturityData("A001", new DateTime(1989, 1, 1), 10, true, 10, 10); Assert.IsTrue(ptA.QualifiesForDiscretionayBonus(maturityData4)); Assert.IsTrue(ptB.QualifiesForDiscretionayBonus(maturityData4)); Assert.IsFalse(ptC.QualifiesForDiscretionayBonus(maturityData4)); }
static void Main(string[] args) { Console.Write("Please provide the folder path where the MaturityData.csv file is"); string fileLocation = Console.ReadLine(); string curFile = fileLocation.Replace("\\MaturityData.csv", "") + "\\MaturityData.csv"; //caters for cases where user inputs the full path, and not just the folder if (File.Exists(curFile)) { Console.WriteLine("File exists. Proceeding"); List <MaturityData> policies = File.ReadAllLines(curFile) .Skip(1) .Select(v => MaturityData.FromCsv(v)).ToList(); Console.WriteLine("File read in, processing"); foreach (MaturityData policy in policies) { int applicableFee = 0; int isBonusApplicable = 0; string type = policy.policy_number.Substring(0, 1); applicableFee = GetApplicableFee(type); isBonusApplicable = IsBonusApplicable(policy, isBonusApplicable, type); policy.maturityValue = CalculateMaturityValue(policy, applicableFee, isBonusApplicable); } Console.WriteLine("Processing completed, outputing file"); DataToXML(policies, fileLocation); } else { Console.WriteLine("File does not exist. Program will now close"); } Console.Read(); }
private static double CalculateMaturityValue(MaturityData value, int applicableFee, int isBonusApplicable) { if (applicableFee != 0) { return(((value.premiums / 100 * (100 - applicableFee)) + (isBonusApplicable * value.discretionary_bonus)) * value.uplift_percentage); //normal calculation } else { return(0); //if policy number is invalid(doesnt start with A,B,C it returns 0 so invalid policy numbers can be quickly checked } }
public static MaturityData FromCsv(string csvLine) { string[] values = csvLine.Split(','); MaturityData maturityData = new MaturityData(); maturityData.policy_number = Convert.ToString(values[0]); maturityData.policy_start_date = DateTime.ParseExact(values[1], "dd/MM/yyyy", CultureInfo.InvariantCulture); maturityData.premiums = Convert.ToDouble(values[2]); maturityData.membership = Convert.ToString(values[3]); maturityData.discretionary_bonus = Convert.ToDouble(values[4]); maturityData.uplift_percentage = Convert.ToDouble(values[5], new CultureInfo("en-US")); maturityData.maturityValue = 0; return(maturityData); }
private static int IsBonusApplicable(MaturityData value, int isBonusApplicable, string type) { if (type == "A" && value.policy_start_date < CriteriaDateA) { isBonusApplicable = 1; } else if (type == "B" && value.membership == "Y") { isBonusApplicable = 1; } else if (type == "C" && value.policy_start_date >= CriteriaDateA && value.membership == "Y") { isBonusApplicable = 1; } else { isBonusApplicable = 0; } return(isBonusApplicable); }
public void TestMethod1() { Dictionary <string, string> dict = new Dictionary <string, string>(); dict.Add("policy_number", "A001"); dict.Add("policy_start_date", "01/06/1986"); dict.Add("premiums", "1000"); dict.Add("membership", "Y"); dict.Add("discretionary_bonus", "200"); dict.Add("uplift_percentage", "40"); MaturityData md = MaturityDataExtractor.Extractor(dict); Assert.AreEqual(md.PolicyNumber, "A001"); Assert.AreEqual(md.PolicyStartDate.Day, 1); Assert.AreEqual(md.PolicyStartDate.Month, 6); Assert.AreEqual(md.PolicyStartDate.Year, 1986); Assert.AreEqual(md.Premiums, 1000); Assert.IsTrue(md.Membership); Assert.AreEqual(md.DiscretionaryBonus, 200); Assert.AreEqual(md.UpliftPercentage, 40); }
public void PolicyTypeCTest() { Dictionary <string, string> dict = new Dictionary <string, string>(); dict.Add("policy_number", "C001"); dict.Add("policy_start_date", "01/06/1986"); dict.Add("premiums", "1000"); dict.Add("membership", "Y"); dict.Add("discretionary_bonus", "200"); dict.Add("uplift_percentage", "40"); MaturityData md = MaturityDataExtractor.Extractor(dict); Assert.AreEqual(md.PolicyType.Name, "C"); Assert.AreEqual(md.QualifyingDiscretionaryBonus, 0); md.Membership = false; Assert.AreEqual(md.QualifyingDiscretionaryBonus, 0); md.PolicyStartDate = DateTime.Now; Assert.AreEqual(md.QualifyingDiscretionaryBonus, 0); md.Membership = true; Assert.AreEqual(md.QualifyingDiscretionaryBonus, 200); }