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); }
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 Task <PharmanetCollegeRecord> GetCollegeRecordAsync(string licencePrefix, string licenceNumber) { OperationMode mode = GetNextMode(); if (mode == OperationMode.Error) { throw new PharmanetCollegeApiException("PharmaNet Mock is in error mode."); } if (mode.HasFlag(OperationMode.NoRecord)) { return(Task.FromResult <PharmanetCollegeRecord>(null)); } if (_expectedEnrollee == null) { throw new InvalidOperationException($"PharmaNet Mock is in a mode that requires an enrollee to copy but {nameof(_expectedEnrollee)} is null."); } var record = new PharmanetCollegeRecord { ApplicationUUID = new Guid().ToString(), FirstName = _expectedEnrollee.FirstName, LastName = _expectedEnrollee.LastName, DateofBirth = _expectedEnrollee.DateOfBirth, Status = mode.HasFlag(OperationMode.NotPracticing) ? "N" : "P", EffectiveDate = DateTime.Today }; if (mode.HasFlag(OperationMode.NameDiscrepancy)) { record.LastName += "extracharacters"; } if (mode.HasFlag(OperationMode.DateDiscrepancy)) { record.DateofBirth = record.DateofBirth.AddDays(1); } return(Task.FromResult(record)); }