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); }
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); }