コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        public override bool GetDiscretionaryBonusEligibility(MaturityDataModel model)
        {
            if (model.Membership == true)
            {
                return(true);
            }

            return(false);
        }
コード例 #5
0
        public override bool GetDiscretionaryBonusEligibility(MaturityDataModel model)
        {
            if (model.PolicyStartDate < DateTime.Parse("1990-01-01"))
            {
                return(true);
            }

            return(false);
        }
コード例 #6
0
        public string GetPolicyType(MaturityDataModel model)
        {
            if (model.PolicyNumber != null)
            {
                return(model.PolicyNumber.Substring(0, 1));
            }

            return(null);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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);
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        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);
        }
コード例 #12
0
        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));
        }
コード例 #13
0
 public override bool IsPolicyType(MaturityDataModel model)
 {
     return(model.PolicyNumber.StartsWith("A"));
 }
コード例 #14
0
 public abstract decimal GetManagementFeePercentage(MaturityDataModel model);
コード例 #15
0
 public override decimal GetManagementFeePercentage(MaturityDataModel model)
 {
     return(3);
 }
コード例 #16
0
 public abstract bool GetDiscretionaryBonusEligibility(MaturityDataModel model);
コード例 #17
0
 public void PopulateValues(MaturityDataModel model)
 {
     _policyTypes.FirstOrDefault(x => x.IsPolicyType(model)).PopulateValues(model);
 }
コード例 #18
0
 // Implemented Methods
 public void PopulateValues(MaturityDataModel model)
 {
     model.PolicyType = GetPolicyType(model);
     model.ManagementFeePercentage       = GetManagementFeePercentage(model);
     model.DiscretionaryBonusEligibility = GetDiscretionaryBonusEligibility(model);
 }
コード例 #19
0
 // Abstract Methods
 public abstract bool IsPolicyType(MaturityDataModel model);