public void CrossHoursProviderOverlapCatchesOverlap() { var v = new DomainServices.Hours.CrossHoursValidation(_caseService, new DateTime(2016, 7, 1, 0, 0, 0)); v.Validate(); Assert.AreEqual( 1, v.Errors .Where(x => x.ErrorType == Hours.CrossHoursValidation.ValidationErrors.ProviderOverlapSelf) .Count()); }
//public List<PatientEx> GetPatientsExceedingMaxHoursPerDay(DateTime period) { // PatientService svcPatient = new PatientService(_context); // return svcPatient.GetPatientsExceedingMaxHoursPerDay(period); //} public List <ValidationItem> GetValidationFailures(int caseID, DateTime period, int providerID, bool includeHasHoursCheck = true) { var items = new List <ValidationItem>(); //var hours = _caseService.GetCaseHoursByCaseByProvider(caseID, providerID).Where(h => h.Date >= new DateTime(period.Year, period.Month, 1) && h.Date < new DateTime(period.Year, period.Month, 1).AddMonths(1)); var start = new DateTime(period.Year, period.Month, 1); var end = start.AddMonths(1); var hours = _context.Hours.Where(m => m.CaseID == caseID && m.ProviderID == providerID && m.Date >= start && m.Date < end).ToList(); foreach (var he in hours) { var result = _hoursNotesValidator.Validate(he, EntryApp.ProviderApp, true); if (!result.IsValid) { items.Add(new ValidationItem() { SourceDate = he.Date, SourcePatientName = he.Case.Patient.CommonName, SourceProviderName = he.Provider.FirstName + " " + he.Provider.LastName, SourceServiceCode = he.Service.Code, SourceTimeIn = he.Date + he.StartTime, SourceTimeOut = he.Date + he.EndTime, TypeValue = DomainServices.Hours.CrossHoursValidation.ValidationErrors.NotesMissing, }); } } if (includeHasHoursCheck) { var hoursNoCatalyst = hours.Where(h => !h.HasCatalystData).ToList(); if (hoursNoCatalyst.Any()) { var sourcePatient = _context.Cases.Find(caseID).Patient; hoursNoCatalyst.ForEach(nc => items .Add(new ValidationItem() { SourceDate = nc.Date, SourcePatientName = sourcePatient.CommonName, SourceProviderName = nc.Provider.FirstName + " " + nc.Provider.LastName, SourceServiceCode = nc.Service.Code, SourceTimeIn = nc.Date + nc.StartTime, SourceTimeOut = nc.Date + nc.EndTime, TypeValue = DomainServices.Hours.CrossHoursValidation.ValidationErrors.NoCatalystData, })); } } var validator = new DomainServices.Hours.CrossHoursValidation(_caseService, new DateTime(period.Year, period.Month, 1)); validator.Validate(); foreach (var err in validator.Errors) { bool skipProvider = true; // only validate POS, CO and SM entries if (err.ErrorType == DomainServices.Hours.CrossHoursValidation.ValidationErrors.CaseOverlap || err.ErrorType == DomainServices.Hours.CrossHoursValidation.ValidationErrors.ProviderOverlapSelf) { //if (err.ErrorType != DomainServices.Hours.CrossHoursValidation.ValidationErrors.AideMaxHoursPerDayPerAide) { System.Diagnostics.Debug.WriteLine(err.MatchedOn.ServiceCode); // ignore SSG cases if (err.MatchedOn.ServiceCode != "SSG") { if (err.MatchedOn.ProviderID == providerID && err.MatchedOn.CaseID == caseID) { skipProvider = false; } else { if (err.MatchedTo != null && err.MatchedTo.Count > 0) { if (err.MatchedTo[0].ProviderID == providerID && err.MatchedTo[0].CaseID == caseID) { skipProvider = false; } } } } } if (!skipProvider) { var item = new ValidationItem(); var sourcePatient = _context.Cases.Find(err.MatchedOn.CaseID.Value).Patient; var sourceProvider = _context.Providers.Find(err.MatchedOn.ProviderID); item.SourceDate = err.MatchedOn.Date; item.SourcePatientName = sourcePatient.CommonName; item.SourceProviderName = sourceProvider.FirstName + " " + sourceProvider.LastName; item.SourceServiceCode = err.MatchedOn.ServiceCode; item.SourceTimeIn = err.MatchedOn.TimeIn; item.SourceTimeOut = err.MatchedOn.TimeOut; item.TypeValue = err.ErrorType; if (err.MatchedTo != null && err.MatchedTo.Count > 0) { var m = err.MatchedTo[0]; var patient = _context.Cases.Find(m.CaseID.Value).Patient; var provider = _context.Providers.Find(m.ProviderID); item.PartnerDate = m.Date; item.PartnerPatientName = patient.CommonName; item.PartnerProviderName = provider.FirstName + " " + provider.LastName; item.PartnerServiceCode = m.ServiceCode; item.PartnerTimeIn = m.TimeIn; item.PartnerTimeOut = m.TimeOut; } items.Add(item); } } return(items); }
public List <ValidationItemVM> GetValidationItems(DateTime period, bool fullRefresh) { if (!fullRefresh) { var cachedItems = getValidationItemsFromCache(period); if (cachedItems != null) { return(cachedItems); } } var items = new List <ValidationItemVM>(); var caseService = new Data.Services.CaseService(); var validator = new DomainServices.Hours.CrossHoursValidation(caseService, period); validator.Validate(); int i = 0; foreach (var err in validator.Errors) { var item = new App.Hours.Models.ValidationItemVM(); var coreContext = new Data.Models.CoreEntityModel(); var sourcePatient = coreContext.Cases.Find(err.MatchedOn.CaseID.Value).Patient; var sourceProvider = coreContext.Providers.Find(err.MatchedOn.ProviderID); item.GridID = i; i++; item.SourceCaseID = err.MatchedOn.CaseID.Value; item.SourceDate = err.MatchedOn.Date; item.SourceHoursID = err.MatchedOn.ID.Value; item.SourcePatientName = sourcePatient.PatientFirstName + " " + sourcePatient.PatientLastName; item.SourceProviderID = err.MatchedOn.ProviderID; item.SourceProviderName = sourceProvider.ProviderFirstName + " " + sourceProvider.ProviderLastName; item.SourceServiceCode = err.MatchedOn.ServiceCode; item.SourceTimeIn = err.MatchedOn.TimeIn; item.SourceTimeOut = err.MatchedOn.TimeOut; item.TypeValue = err.ErrorType; if (err.MatchedTo != null && err.MatchedTo.Count > 0) { var m = err.MatchedTo[0]; var patient = coreContext.Cases.Find(m.CaseID.Value).Patient; var provider = coreContext.Providers.Find(m.ProviderID); item.PartnerCaseID = m.CaseID.Value; item.PartnerDate = m.Date; item.PartnerHoursID = m.ID.Value; item.PartnerPatientName = patient.PatientFirstName + " " + patient.PatientLastName; item.PartnerProviderID = m.ProviderID; item.PartnerProviderName = provider.ProviderFirstName + " " + provider.ProviderLastName; item.PartnerServiceCode = m.ServiceCode; item.PartnerTimeIn = m.TimeIn; item.PartnerTimeOut = m.TimeOut; } items.Add(item); } setValidateItemsCache(items, period); return(items); }