Пример #1
0
        public LimitsApplicationResult Apply(CaseServiceCostSplit caseService)
        {
            if (_policyVersion == null)
            {
                return(LimitsApplicationResult.NoApplied());
            }

            var limit = _policyVersion.LimitFor(caseService.ServiceCode);

            if (limit == null)
            {
                return(LimitsApplicationResult.NoApplied());
            }

            var limitConsumptionContainer = FindOrCreateMatchingConsumptionContainer(caseService, limit);


            var limitCalculation = limit.Calculate
                                   (
                caseService,
                limitConsumptionContainer.CurrentConsumption()
                                   );

            limitConsumptionContainer.ReserveLimitsFor(caseService, limitCalculation.LimitConsumption, 0);

            return(LimitsApplicationResult.Applied(limitCalculation));
        }
Пример #2
0
 public Consumption(LimitConsumptionContainer consumptionContainer, CaseServiceCostSplit caseService)
 {
     ConsumptionContainer = consumptionContainer;
     ServiceId            = caseService.CaseServiceId;
     CaseNumber           = caseService.CaseNumber;
     ConsumptionDate      = caseService.Date;
     ConsumedAmount       = caseService.AmountLimitConsumption;
     ConsumedQuantity     = caseService.QtLimitConsumption;
 }
Пример #3
0
        public CoPaymentApplicationResult Apply(CaseServiceCostSplit caseService)
        {
            if (policyAtServiceDate == null)
            {
                return(CoPaymentApplicationResult.NotApplied());
            }

            var coPayment = policyAtServiceDate.CoPaymentFor(caseService.ServiceCode);

            if (coPayment == null)
            {
                return(CoPaymentApplicationResult.NotApplied());
            }

            var amount = coPayment.Calculate(caseService);

            return(CoPaymentApplicationResult.Applied(amount));
        }
        public CoverageCheckResult Apply(CaseServiceCostSplit caseService)
        {
            if (policyAtServiceDate == null)
            {
                return(CoverageCheckResult.NotCovered(NotCoveredReason.NoPolicyAtServiceDate, caseService));
            }

            if (!policyAtServiceDate.CoversInsured(caseService.InsuredId))
            {
                return(CoverageCheckResult.NotCovered(NotCoveredReason.InsuredNotFoundOnPolicy, caseService));
            }

            if (!policyAtServiceDate.CoversService(caseService.ServiceCode))
            {
                return(CoverageCheckResult.NotCovered(NotCoveredReason.ServiceNotFoundOnPolicy, caseService));
            }

            return(CoverageCheckResult.FullyCovered());
        }
Пример #5
0
        private LimitConsumptionContainer FindOrCreateMatchingConsumptionContainer(CaseServiceCostSplit caseService,
                                                                                   Limit limit)
        {
            var consumptionPeriod         = limit.CalculatePeriod(caseService.Date, _policyVersion);
            var limitConsumptionContainer = _limitConsumptionContainers.GetLimitConsumptionContainer
                                            (
                caseService,
                limit,
                consumptionPeriod
                                            );

            if (limitConsumptionContainer == null)
            {
                limitConsumptionContainer =
                    new LimitConsumptionContainerFactory().Create(caseService, limit, consumptionPeriod);
                _limitConsumptionContainers.Add(limitConsumptionContainer);
            }

            return(limitConsumptionContainer);
        }
Пример #6
0
 public abstract LimitCalculation Calculate(CaseServiceCostSplit costSplit,
                                            (Money, int) currentLimitConsumptionContainer);
 public static CoverageCheckResult NotCovered(NotCoveredReason notCoveredReason, CaseServiceCostSplit caseService)
 {
     return(new CoverageCheckResult(false, notCoveredReason, caseService.TotalCost));
 }
 public void ReserveLimitsFor(CaseServiceCostSplit caseService, Money amountConsumption, int qtConsumption)
 {
     ReserveLimitsFor(caseService.CaseNumber, caseService.CaseServiceId, caseService.Date, amountConsumption, qtConsumption);
 }