PharmacyEligibilityService¶
Implements IPharmacyEligibility, the extract job that identifies claims eligible for pharmacy benefits (and claims newly ineligible after their first fill) and writes a fixed-format ODS extract file consumed downstream by the MedImpact pharmacy vendor. It depends on IUnitOfWork for persistence and eligibility-report queries, IUserProfileService, IClaimQueryProvider and IWorkerQueryProvider for claim/worker lookups, ICCClaimApiService and IClaimDataApiClient for building Claim aggregates, and a locally constructed WindowsEnvironmentService. It writes the extract to a hardcoded local path (OdsExtractFileName), archiving the previous file before overwriting it.
Purpose¶
- Processes the full pharmacy-eligibility extract run: reads eligible claims, writes their extract records, reads and processes newly-ineligible first-fill claims, appends a trailer record, and returns run-level counts.
- Filters eligibility reports to claims that are not already marked ineligible or major-is-pilot, and separately to first-fill claims whose MedImpact transmit date is set but whose regular transmit date is not.
- Validates that a claim resolved successfully and is not void or denied before it is written to the extract, logging a warning otherwise.
- Formats and appends a fixed-width pharmacy-eligibility record per eligible worker, substituting a SAIF-owned mailing address for workers with a foreign address.
- Flips a first-fill claim's eligibility status to
Ineligibleand stamps update audit fields once its extract record has been written. - Archives the existing extract file (timestamped copy) before the current run overwrites it.
Context¶
- Namespace:
SAIF.Services.Claims.PharmacyElilgbility - Assembly/package:
SAIF.Services(packaged inside theSAIF.SAIFCode.CoreNuGet package)
Public members¶
| Member | Signature | Purpose |
|---|---|---|
| PharmacyEligibilityService | public PharmacyEligibilityService(IUnitOfWork uow, IUserProfileService ups, IClaimQueryProvider claimQueryProvider, IWorkerQueryProvider workerQueryProvider, ICCClaimApiService claimApiService, IClaimDataApiClient gwClaimDataApiClient) |
Wires the persistence and claim/worker lookup collaborators and initializes the run's PharmacyEligibilityResults counters to zero. |
| ProcessEligibilityExtract | public PharmacyEligibilityResults ProcessEligibilityExtract(ILogWriter warningReport, ILogWriter addressReport) |
Runs the full extract: processes eligible claims, processes first-fill claims, writes the trailer record, and commits the unit of work; returns the accumulated result counts. |
| GetEligibleClaims | public bool GetEligibleClaims() |
Loads pharmacy-eligibility reports excluding Ineligible and MajorisPilot status codes into the internal report collection; returns whether any were found. |
| ProcessEligibilityReports | public PharmacyEligibilityResults ProcessEligibilityReports(ILogWriter warningReport, ILogWriter addressReport) |
For each loaded eligibility report, verifies the claim exists and is in a writable status, then writes its extract record; increments the reports-read counter for every claim examined. |
| GetFirstFillClaims | public bool GetFirstFillClaims() |
Loads pharmacy-eligibility reports that are Ineligible with a set MedImpact transmit date but no regular transmit date yet, into the internal report collection; returns whether any were found. |
| ProcessFirstFillReports | public PharmacyEligibilityResults ProcessFirstFillReports(ILogWriter warningReport, ILogWriter addressReport) |
Marks each loaded report as FirstFill status, writes its extract record if the claim is valid, and on success flips it back to Ineligible via UpdatePharmElig; tracks first-fill and reports-read counts. |
| GetClaimData | public Claim GetClaimData(long claimId) |
Constructs a Claim aggregate for the given claim ID using the service's unit-of-work, user-profile, claim/worker query providers, and claim API collaborators. |
| VerifyClaimNotNull | public bool VerifyClaimNotNull(Claim claimData, long claimId, ILogWriter warningReport) |
Confirms the claim resolved to non-null data and identifier; logs a "retrieval failed" warning and returns false otherwise. |
| VerifyClaim | public bool VerifyClaim(Claim claimData, long claimId, ILogWriter warningReport) |
Confirms the claim's latest status is not Void or Denied, logging the corresponding warning message and returning false when it is. |
| VerifyWorker | public bool VerifyWorker(Worker worker, Claim claimData, long claimId, ILogWriter addressReport, Address address) |
Confirms the eligibility report, worker, and claim identifier all resolved, and logs an address exception when the worker has no usable address or a foreign address (still returning true for a foreign address after logging). |
| UpdatePharmElig | public bool UpdatePharmElig(long claimId) |
Reverts a first-fill claim's eligibility status to Ineligible, recording the previous status/effective date and stamping the transmit date and audit fields; returns false if the report can no longer be found. |
| GetWorkerAddress | public Address GetWorkerAddress(Claim claim, Worker worker) |
Resolves and builds the worker's mailing address from the claim person's addresses via IClaimQueryProvider.GetClaimPersonAddresses. |
| WriteExtract | public bool WriteExtract(long claimId, Claim claimData, Worker worker, ILogWriter addressReport) |
Builds a fixed-format PharmacyEligibilityExtract record (status, group ID mapped from eligibility status, demographic and address fields — substituting a SAIF-owned address for foreign addresses) and appends it to the in-memory extract collection; returns false if the eligibility report or worker verification fails. |
| WriteExtractTrailer | public void WriteExtractTrailer() |
Archives the existing extract file, writes a fixed-width trailer record containing the total eligible-report count, and writes the accumulated extract records to the ODS extract file. |
| ArchiveExistingExtract | public void ArchiveExistingExtract() |
Copies the current extract file to a timestamped archive name, deleting any pre-existing file at that archive path first. |
| WriteWarningMessage | public void WriteWarningMessage(ILogWriter warningReport, string inMessage) |
Writes a message to the warning log and increments the run's warning count. |
| WriteAddressMessage | public void WriteAddressMessage(ILogWriter addressReport, string inMessage) |
Writes a message to the address-exception log and increments the run's address-exceptions count. |
| WriteLog | public void WriteLog(ILogWriter reportLog, string inMessage) |
Writes a single line to the supplied log writer. |
Behavioral notes¶
ProcessEligibilityExtractwraps the entire run inIUnitOfWork.Begin()/Commit().- The extract file path is a hardcoded local filesystem path (
c:\downloads\CMN0008_ExtractPharmEligibility\SAIFODSPharmacyEligibility) marked in source as needing to become configuration. - Group ID assignment in
WriteExtractis driven by a fixed switch over eligibility-status codes (FirstFill→001,Extended→002,Limited→003,Majoris→010,CMC→011,CMCLimited→012,MajorisLimited→013, default→blank). - Foreign-address workers receive a substituted SAIF department mailing address (constants
Saifaddressline1/2, city, state, zip) instead of their actual address in the extract.
Sources¶
- Services/SAIF.Services/Claims/PharmacyElilgbility/PharmacyEligibilityService.cs