public override async Task <bool> ProcessRule(Enrollee enrollee)
        {
            if (enrollee.Certifications == null || !enrollee.Certifications.Any())
            {
                // No certs to verify
                return(true);
            }

            bool passed = true;

            foreach (var cert in enrollee.Certifications.Where(c => c.License.Validate))
            {
                if (cert.License.PrescriberIdType == PrescriberIdType.Optional && cert.PractitionerId == null)
                {
                    continue;
                }

                var licenceNumber = cert.License.PrescriberIdType.HasValue
                    ? cert.PractitionerId
                    : cert.LicenseNumber;

                var licenceText = $"{cert.License.Prefix}-{licenceNumber}";

                PharmanetCollegeRecord record = null;
                try
                {
                    record = await _collegeLicenceClient.GetCollegeRecordAsync(cert.License.Prefix, licenceNumber);
                }
                catch (PharmanetCollegeApiException)
                {
                    enrollee.AddReasonToCurrentStatus(StatusReasonType.PharmanetError, licenceText);
                    passed = false;
                    continue;
                }
                if (record == null)
                {
                    enrollee.AddReasonToCurrentStatus(StatusReasonType.NotInPharmanet, licenceText);
                    passed = false;
                    continue;
                }

                if (!record.MatchesEnrolleeByName(enrollee))
                {
                    enrollee.AddReasonToCurrentStatus(StatusReasonType.NameDiscrepancy, $"{licenceText} returned \"{record.FirstName} {record.LastName}\".");
                    passed = false;
                }
                if (record.DateofBirth.Date != enrollee.DateOfBirth.Date)
                {
                    enrollee.AddReasonToCurrentStatus(StatusReasonType.BirthdateDiscrepancy, $"{licenceText} returned {record.DateofBirth:d MMM yyyy}");
                    passed = false;
                }
                if (record.Status != "P")
                {
                    enrollee.AddReasonToCurrentStatus(StatusReasonType.Practicing, licenceText);
                    passed = false;
                }
            }

            return(passed);
        }
Ejemplo n.º 2
0
        public override async Task <bool> ProcessRule(Enrollee enrollee)
        {
            if (enrollee.Certifications == null || !enrollee.Certifications.Any())
            {
                // No certs to verify
                return(true);
            }

            bool passed = true;

            foreach (var cert in enrollee.Certifications.Where(c => c.License.Validate))
            {
                PharmanetCollegeRecord record = null;
                try
                {
                    record = await _collegeLicenceClient.GetCollegeRecordAsync(cert);
                }
                catch (PharmanetCollegeApiException)
                {
                    enrollee.AddReasonToCurrentStatus(StatusReasonType.PharmanetError, $"{cert.FullLicenseNumber}");
                    passed = false;
                    continue;
                }
                if (record == null)
                {
                    enrollee.AddReasonToCurrentStatus(StatusReasonType.NotInPharmanet, $"{cert.FullLicenseNumber}");
                    passed = false;
                    continue;
                }

                if (!record.MatchesEnrolleeByName(enrollee))
                {
                    enrollee.AddReasonToCurrentStatus(StatusReasonType.NameDiscrepancy, $"{cert.FullLicenseNumber} returned \"{record.firstName} {record.lastName}\".");
                    passed = false;
                }
                if (record.dateofBirth.Date != enrollee.DateOfBirth.Date)
                {
                    enrollee.AddReasonToCurrentStatus(StatusReasonType.BirthdateDiscrepancy, $"{cert.FullLicenseNumber} returned {record.dateofBirth.ToString("d MMM yyyy")}");
                    passed = false;
                }
                if (record.status != "P")
                {
                    enrollee.AddReasonToCurrentStatus(StatusReasonType.Practicing, $"{cert.FullLicenseNumber}");
                    passed = false;
                }
            }

            return(passed);
        }
        public override Task <bool> ProcessRule(Enrollee enrollee)
        {
            if (enrollee.AlwaysManual)
            {
                enrollee.AddReasonToCurrentStatus(StatusReasonType.AlwaysManual);
            }

            return(Task.FromResult(!enrollee.AlwaysManual));
        }
Ejemplo n.º 4
0
        public override Task <bool> ProcessRule(Enrollee enrollee)
        {
            if (enrollee.RequestingRemoteAccess)
            {
                enrollee.AddReasonToCurrentStatus(StatusReasonType.RequestingRemoteAccess);
            }

            return(Task.FromResult(!enrollee.RequestingRemoteAccess));
        }
        public override Task <bool> ProcessRule(Enrollee enrollee)
        {
            if (enrollee.IdentityProvider != Auth.AuthConstants.BCServicesCard)
            {
                enrollee.AddReasonToCurrentStatus(StatusReasonType.IdentityProvider, $"Method used: {enrollee.IdentityProvider}");
                return(Task.FromResult(false));
            }

            return(Task.FromResult(true));
        }
        public override Task <bool> ProcessRule(Enrollee enrollee)
        {
            if (enrollee.IdentityAssuranceLevel < 3)
            {
                enrollee.AddReasonToCurrentStatus(StatusReasonType.AssuranceLevel);
                return(Task.FromResult(false));
            }

            return(Task.FromResult(true));
        }
        public override Task <bool> ProcessRule(Enrollee enrollee)
        {
            if (enrollee.SelfDeclarations.Any())
            {
                enrollee.AddReasonToCurrentStatus(StatusReasonType.SelfDeclaration);
                return(Task.FromResult(false));
            }

            return(Task.FromResult(true));
        }
        public override Task <bool> ProcessRule(Enrollee enrollee)
        {
            if (!enrollee.PhysicalAddress.IsInBC ||
                enrollee.MailingAddress?.IsInBC == false)
            {
                enrollee.AddReasonToCurrentStatus(StatusReasonType.Address);
                return(Task.FromResult(false));
            }

            return(Task.FromResult(true));
        }
        public override Task <bool> ProcessRule(Enrollee enrollee)
        {
            if (!string.IsNullOrWhiteSpace(enrollee.DeviceProviderNumber) ||
                enrollee.IsInsulinPumpProvider.GetValueOrDefault(true))
            {
                enrollee.AddReasonToCurrentStatus(StatusReasonType.PumpProvider);
                return(Task.FromResult(false));
            }

            return(Task.FromResult(true));
        }
        public override Task <bool> ProcessRule(Enrollee enrollee)
        {
            // Passes rule if enrollee.Certifications is null or empty
            foreach (var cert in enrollee.Certifications ?? Enumerable.Empty <Certification>())
            {
                if (cert.License.Manual)
                {
                    enrollee.AddReasonToCurrentStatus(StatusReasonType.LicenceClass);
                    return(Task.FromResult(false));
                }
            }

            return(Task.FromResult(true));
        }
        public override Task <bool> ProcessRule(Enrollee enrollee)
        {
            var newestAssignedAgreement = enrollee.Submissions
                                          .OrderByDescending(s => s.CreatedDate)
                                          .Select(s => s.AgreementType)
                                          .First();

            if (newestAssignedAgreement == null)
            {
                enrollee.AddReasonToCurrentStatus(StatusReasonType.NoAssignedAgreement);
                return(Task.FromResult(false));
            }

            return(Task.FromResult(true));
        }