public decimal CalculateBasePrice(BasePremiumRule basePremiumRule, Calculation calculation)
        {
            var(paramDefinitions, values) = DomainAdapter.CalculationToCalculationParams(calculation);

            return((decimal) new Interpreter()
                   .Parse(basePremiumRule.BasePriceFormula, paramDefinitions.ToArray())
                   .Invoke(values.ToArray()));
        }
        public bool AppliesBasePremiumRuleCalculationParams(BasePremiumRule basePremiumRule, Cover cover, Calculation calculation)
        {
            if (cover.Code != basePremiumRule.CoverCode)
            {
                return(false);
            }

            if (IsNullOrEmpty(basePremiumRule.ApplyIfFormula))
            {
                return(true);
            }

            var(paramDefinitions, values) = DomainAdapter.CalculationToCalculationParams(calculation);
            return((bool)new Interpreter()
                   .Parse(basePremiumRule.ApplyIfFormula, paramDefinitions.ToArray())
                   .Invoke(values.ToArray()));
        }
        public void Initialise()
        {
            _basePremium = 500m;

            _policy = new Policy()
            {
                PolicyStartDate = new DateTime(),
                DriversOnPolicy = new ObservableCollection <Driver>()
            };

            _driver = new Driver()
            {
                ClaimsAssociatedToDriver = new ObservableCollection <Claim>(),
                DateOfBirth = new DateTime(),
                Occupation  = new Occupation()
            };

            _basePremiumRule      = new BasePremiumRule();
            _driverOccupationRule = new DriverOccupationRule();
            _youngestDriverRule   = new YoungestDriverRule();
        }