public void InitialMinutesUnderMaxReturnsUnitSizeRounded()
        {
            var rule = new AuthorizationMatchRule();

            rule.InitialAuthorization  = new AuthorizationCode();
            rule.InitialMinimumMinutes = 16;
            rule.InitialUnitSize       = 30;

            var sut = rule.GetApplicableInitialMinutes(35);

            Assert.AreEqual(30, sut);
        }
        public void InitialMinutesRoundsUpAfterInitialMin()
        {
            var rule = new AuthorizationMatchRule();

            rule.InitialAuthorization  = new AuthorizationCode();
            rule.InitialMinimumMinutes = 16;
            rule.InitialUnitSize       = 30;

            var sut = rule.GetApplicableInitialMinutes(78);

            Assert.AreEqual(90, sut);
        }
        public void InitialMinutesOverMaxReturnsAllMinutesWhenFinalAuthNotPresent()
        {
            var rule = new AuthorizationMatchRule();

            rule.InitialAuthorization  = new AuthorizationCode();
            rule.InitialMinimumMinutes = 16;
            rule.InitialUnitSize       = 30;

            var sut = rule.GetApplicableInitialMinutes(120);

            Assert.AreEqual(120, sut);
        }
        public void AuthResolverGetsFinalBreakdown()
        {
            var repoMock = CreateMockResolutionServiceRepository();
            var targetCase = repoMock.Object.GetCase(0);
            var hours = GetMockHours();
            var insurance = targetCase.Patient.Insurance;

            hours.Date = new DateTime(2017, 1, 1);
            hours.Service.ID = 9;                   // DR
            hours.Provider.ProviderType.ID = 17;    // Aide

            targetCase.Authorizations = new List<Authorization>
            {
                new Authorization()
                {
                    ID = 1,
                    AuthorizationCodeID = 100,
                    StartDate = new DateTime(2016, 1, 1),
                    EndDate = new DateTime(2018, 1, 1)
                },
                new Authorization()
                {
                    ID = 2,
                    AuthorizationCodeID = 200,
                    StartDate = new DateTime(2016, 1, 1),
                    EndDate = new DateTime(2018, 1, 1)
                }
            };

            var matchRule = new AuthorizationMatchRule()
            {
                InitialAuthorizationID = 100,
                FinalAuthorizationID = 200,
                InitialAuthorization = new AuthorizationCode(),
                FinalAuthorization = new AuthorizationCode(),
                ServiceID = 9,          // DR
                ProviderTypeID = 17,     // Aide
                InitialMinimumMinutes = 16,
                InitialUnitSize = 30,
                FinalMinimumMinutes = 16,
                FinalUnitSize = 30
            };
            insurance.AuthorizationMatchRules = new List<AuthorizationMatchRule>
            {
                matchRule
            };
            hours.TotalHours = 2;

            var authService = new AuthorizationResolution(repoMock.Object, null);
            var result = authService.Resolve(new List<Domain2.Hours.Hours>() { hours });
            Assert.AreEqual(2, hours.AuthorizationBreakdowns.Count);
            Assert.AreEqual(90, hours.AuthorizationBreakdowns.ToList()[1].Minutes);
        }
        public void FinalAuthRoundsToUpperUnitSize()
        {
            var rule = new AuthorizationMatchRule();

            rule.InitialAuthorization = new AuthorizationCode();
            rule.FinalAuthorization   = new AuthorizationCode();

            rule.InitialMinimumMinutes = 16;
            rule.InitialUnitSize       = 30;
            rule.FinalMinimumMinutes   = 16;
            rule.FinalUnitSize         = 30;

            var sut = rule.GetApplicableFinalMinutes(140);

            Assert.AreEqual(120, sut);
        }
            public static RuleDTO Create(AuthorizationMatchRule auth)
            {
                var obj = new RuleDTO()
                {
                    BillingMethod            = (int)auth.BillingMethod,
                    InitialAuthID            = auth.InitialAuthorizationID,
                    InitialAuthCode          = auth.InitialAuthorization?.Code,
                    InitialMinimumMinutes    = auth.InitialMinimumMinutes,
                    InitialUnitSize          = auth.InitialUnitSize,
                    FinalAuthID              = auth.FinalAuthorizationID,
                    FinalAuthCode            = auth.FinalAuthorization?.Code,
                    FinalMinimumMinutes      = auth.FinalMinimumMinutes,
                    FinalUnitSize            = auth.FinalUnitSize,
                    AllowOverlapping         = auth.AllowOverlapping,
                    RequiresAuthBCBA         = auth.RequiresAuthorizedBCBA,
                    RequiresPreAuthorization = auth.RequiresPreAuthorization
                };

                return(obj);
            }
        private List <AuthorizationBreakdown> getBreakdownsForRule(Domain2.Hours.Hours entry, AuthorizationMatchRule matchedRule)
        {
            var breakdowns      = new List <AuthorizationBreakdown>();
            var activeCaseAuths = ResolutionServiceRepository.GetCase(entry.CaseID).GetActiveAuthorizations(entry.Date);
            int totalMinutes    = (int)Math.Round(entry.TotalHours * 60);

            if (!matchedRule.IsInitialAuthUsableForTimeEntry)
            {
                return(null);
            }

            if (totalMinutes < matchedRule.InitialMinimumMinutes)
            {
                return(null);
            }

            var initialAuth = activeCaseAuths.Where(x => x.AuthorizationCodeID == matchedRule.InitialAuthorizationID).FirstOrDefault();

            if (initialAuth == null)
            {
                return(null);
            }

            var initialBreakdown = new AuthorizationBreakdown();

            initialBreakdown.AuthorizationID = matchedRule.InitialAuthorization.ID;
            initialBreakdown.Authorization   = initialAuth;
            initialBreakdown.HoursEntry      = entry;
            //initialBreakdown.HoursID = _hours.ID;
            initialBreakdown.Minutes = matchedRule.GetApplicableInitialMinutes(totalMinutes);

            breakdowns.Add(initialBreakdown);

            if (!matchedRule.IsFinalAuthUsableForTimeEntry)
            {
                return(breakdowns);
            }

            var finalAuth = activeCaseAuths.Where(x => x.AuthorizationCodeID == matchedRule.FinalAuthorizationID).FirstOrDefault();

            if (finalAuth == null)
            {
                return(breakdowns);
            }

            var finalBreakdown = new AuthorizationBreakdown();

            finalBreakdown.AuthorizationID = matchedRule.FinalAuthorization.ID;
            finalBreakdown.Authorization   = finalAuth;
            finalBreakdown.HoursEntry      = entry;
            //finalBreakdown.HoursID = entry.ID;
            finalBreakdown.Minutes = matchedRule.GetApplicableFinalMinutes(totalMinutes);

            if (finalBreakdown.Minutes > 0)
            {
                breakdowns.Add(finalBreakdown);
            }

            return(breakdowns);
        }
예제 #8
0
        private List <AuthorizationBreakdown> getAuthorizationHoursBreakdowns(AuthorizationMatchRule matchRule)
        {
            var breakdowns      = new List <AuthorizationBreakdown>();
            var activeCaseAuths = _case.GetActiveAuthorizations(_hours.Date);
            int totalMinutes    = (int)Math.Round(_hours.TotalHours * 60);

            // make sure the basic initial match rule auth is usable
            if (!matchRule.IsInitialAuthUsableForTimeEntry)
            {
                return(null);
            }

            if (totalMinutes < matchRule.InitialMinimumMinutes)
            {
                return(null);
            }

            // make sure we actually map to one of the case's auths
            var initialAuth = activeCaseAuths.Where(x => x.AuthorizationCodeID == matchRule.InitialAuthorizationID).FirstOrDefault();

            if (initialAuth == null)
            {
                return(null);
            }

            // we have a good match, create the initial breakdown
            var initialBreakdown = new AuthorizationBreakdown();

            initialBreakdown.AuthorizationID = matchRule.InitialAuthorization.ID;
            initialBreakdown.Authorization   = initialAuth;
            initialBreakdown.HoursEntry      = _hours;
            initialBreakdown.HoursID         = _hours.ID;
            initialBreakdown.Minutes         = matchRule.GetApplicableInitialMinutes(totalMinutes);

            breakdowns.Add(initialBreakdown);

            // make sure the final auth is usable
            if (!matchRule.IsFinalAuthUsableForTimeEntry)
            {
                return(breakdowns);
            }

            var finalAuth = activeCaseAuths.Where(x => x.AuthorizationCodeID == matchRule.FinalAuthorizationID).FirstOrDefault();

            if (finalAuth == null)
            {
                return(breakdowns);
            }

            var finalBreakdown = new AuthorizationBreakdown();

            finalBreakdown.AuthorizationID = matchRule.FinalAuthorization.ID;
            finalBreakdown.Authorization   = finalAuth;
            finalBreakdown.HoursEntry      = _hours;
            finalBreakdown.HoursID         = _hours.ID;
            finalBreakdown.Minutes         = matchRule.GetApplicableFinalMinutes(totalMinutes);

            if (finalBreakdown.Minutes > 0)
            {
                breakdowns.Add(finalBreakdown);
            }

            return(breakdowns);
        }