/// <summary>
        /// Initializes a new instance of the <see cref="PayorCoverageCacheRuleCollection"/> class.
        /// </summary>
        /// <param name="payorCoverageCacheRepository">The payor coverage cache repository.</param>
        public PayorCoverageCacheRuleCollection(IPayorCoverageCacheRepository payorCoverageCacheRepository)
        {
            NewRule(() => NoDuplicatePayorCoverageCacheTypesWithSameEffectiveDateRangeRule)
            .When(
                (s, ctx) =>
            {
                var coverageType       = ctx.WorkingMemory.GetContextObject <PayorCoverageCacheType> ();
                var effectiveDateRange = ctx.WorkingMemory.GetContextObject <DateRange> ();
                var conflicts          = payorCoverageCacheRepository.AnyPayorCoverageTypeInEffectiveDateRange(
                    s.Key, s.Patient.Key, coverageType, effectiveDateRange);
                return(conflicts);
            })
            .ThenReportRuleViolation("Cannot have two payor coverages with the same payor coverage type active at the same time.");

            NewRuleSet(() => CreatePayorCoverageCacheRuleSet, NoDuplicatePayorCoverageCacheTypesWithSameEffectiveDateRangeRule);
            NewRuleSet(() => RevisePayorCoverageCacheInfoRuleSet, NoDuplicatePayorCoverageCacheTypesWithSameEffectiveDateRangeRule);
        }