private decimal GetManagementFeePercentage(MaturityDataModel model) { decimal managementFeePercentage = 0; if (model.PolicyType != null) { // Derive Management Fee % from Policy Type switch (model.PolicyType) { case "A": managementFeePercentage = 3; break; case "B": managementFeePercentage = 5; break; case "C": managementFeePercentage = 7; break; default: managementFeePercentage = 0; break; } } return(managementFeePercentage); }
private bool GetDiscretionaryBonusEligibility(MaturityDataModel model) { // Derive Discretionary Bonus Eligibility from Policy Type and Discretionary Bonus Criteria if (model.PolicyType != null && model.PolicyType == "A") { if (model.PolicyStartDate < DateTime.Parse("1990-01-01")) { return(true); } } else if (model.PolicyType != null && model.PolicyType == "B") { if (model.Membership == true) { return(true); } } else if ((model.PolicyType != null && model.PolicyType == "C")) { if (model.PolicyStartDate >= DateTime.Parse("1990-01-01") && model.Membership == true) { return(true); } } return(false); }
public IEnumerable <MaturityDataModel> GetMaturityDataAndCalculateValues() { // Get base Maturity Data from Data Repository IEnumerable <MaturityDataBaseModel> maturityDataBase = _repo.GetMaturityData(); // Create a list to use for MaturityDataModel's with additional derived fields/calculations List <MaturityDataModel> maturityData = new List <MaturityDataModel>(); // Check that we have results if (maturityDataBase != null && maturityDataBase.Any()) { // Create List from IEnumerable List <MaturityDataBaseModel> maturityDataList = maturityDataBase.ToList(); // Iterate through MaturityDataModel list foreach (MaturityDataBaseModel item in maturityDataBase) { // Convert from base model to model containing additional properties MaturityDataModel model = CreateModelFromBaseModel(item); // Calculate values for additional properties for each item model = CalculateMaturityDataValues(model); // Add to maturityData list maturityData.Add(model); } } return(maturityData); }
public override bool GetDiscretionaryBonusEligibility(MaturityDataModel model) { if (model.Membership == true) { return(true); } return(false); }
public override bool GetDiscretionaryBonusEligibility(MaturityDataModel model) { if (model.PolicyStartDate < DateTime.Parse("1990-01-01")) { return(true); } return(false); }
public string GetPolicyType(MaturityDataModel model) { if (model.PolicyNumber != null) { return(model.PolicyNumber.Substring(0, 1)); } return(null); }
public MaturityDataModel CreateModelFromBaseAndPopulateValues(MaturityDataBaseModel baseModel) { // Logic for mapping fields has been moved from here into the MaturityDataModel constructor MaturityDataModel model = new MaturityDataModel(baseModel); // PolicyTypeService is used populate values in accordance with rules that relate to the relevant policy type. _policyTypeServ.PopulateValues(model); return(model); }
private string GetPolicyType(MaturityDataModel model) { // Derive Policy Type from first character of Policy Number if (model.PolicyNumber != null && model.PolicyNumber.Length > 1) { return(model.PolicyNumber.Substring(0, 1)); } return(null); }
public void PolicyTypeA_DiscretionaryBonusNotEligible_MaturityValue() { // Arrange MaturityDataModel maturityDataModel = _serv.CreateModelFromBaseAndPopulateValues(maturityDataModelList.FirstOrDefault(x => x.PolicyNumber == "A100002")); // Act _serv.CalculateMaturityValue(maturityDataModel); // Assert Assert.AreEqual((decimal)16671.88, maturityDataModel.MaturityValue); }
public void PolicyTypeB_DiscretionaryBonusEligible_MaturityValue() { // Arrange MaturityDataModel maturityDataModel = _serv.CreateModelFromBaseModel(maturityDataModelList.FirstOrDefault(x => x.PolicyNumber == "B100001")); // Act maturityDataModel = _serv.CalculateMaturityDataValues(maturityDataModel); // Assert Assert.AreEqual((decimal)18894.00, maturityDataModel.MaturityValue); }
public MaturityDataModel CalculateMaturityDataValues(MaturityDataModel model) { // Get Policy Type, Management Fee, and Discretionary Bonus Eligibility - before proceeding to final Maturity Value Calculation model.PolicyType = GetPolicyType(model); model.ManagementFeePercentage = GetManagementFeePercentage(model); model.DiscretionaryBonusEligibility = GetDiscretionaryBonusEligibility(model); // Calculate Maturity Value model.MaturityValue = CalculateMaturityValue(model); return(model); }
private decimal CalculateMaturityValue(MaturityDataModel model) { // Calculate Management Fee Value by using the number of Premiums and the Management Fee Percentage decimal managementFeeValue = model.Premiums * (model.ManagementFeePercentage / 100); // Calculate the Uplift Value by adding the Uplift Percentage to 1 - e.g. Uplift Percentage of 25% will equal an uplift value of 1.25 decimal upliftValue = 1 + (model.UpliftPercentage / 100); // Calculate Discretionary Bonus Value using the Discretionary Bonus Eligibility decimal discretionaryBonusValue = model.DiscretionaryBonusEligibility == true ? model.DiscretionaryBonus : 0; // Carry out final Maturity Value calculation decimal maturityValue = ((model.Premiums - managementFeeValue) + discretionaryBonusValue) * upliftValue; // Round to 2 decimal places return(Math.Round(maturityValue, 2)); }
public override bool IsPolicyType(MaturityDataModel model) { return(model.PolicyNumber.StartsWith("A")); }
public abstract decimal GetManagementFeePercentage(MaturityDataModel model);
public override decimal GetManagementFeePercentage(MaturityDataModel model) { return(3); }
public abstract bool GetDiscretionaryBonusEligibility(MaturityDataModel model);
public void PopulateValues(MaturityDataModel model) { _policyTypes.FirstOrDefault(x => x.IsPolicyType(model)).PopulateValues(model); }
// Implemented Methods public void PopulateValues(MaturityDataModel model) { model.PolicyType = GetPolicyType(model); model.ManagementFeePercentage = GetManagementFeePercentage(model); model.DiscretionaryBonusEligibility = GetDiscretionaryBonusEligibility(model); }
// Abstract Methods public abstract bool IsPolicyType(MaturityDataModel model);