Skip to content

ProviderIndexer

ProviderIndexer is the original (v1) implementation of IProviderIndexer for operation OP-DOM-03: it looks up the billing provider by tax ID, filters candidate addresses for institutional bills, matches the physical (or facility) address against the provider's known addresses, and then resolves a single payment address — either confirming the matched location has no active PAY address, or intersecting the physical and payment matches by location — before setting the provider's location. ProviderIndexerV2 supersedes it with a rule-set-based matcher (OP-DOM-04); this class remains the simpler, address-role-specific algorithm.

Purpose

  • Requires the billing provider's tax ID to resolve to a known SAIF provider before matching can proceed, recording "Provider Tax Id not found" otherwise (DOM-BR-020).
  • Filters candidate provider addresses to institutional provider types (NU/HO/HH) when any of the e-bill's bills is institutional (SetType "INST") (DOM-BR-021).
  • Matches the biller's physical (falling back to facility) address against candidate provider addresses on Line1/City (trimmed, case-insensitive) and zero-padded zip, failing the bill when no physical match exists (DOM-BR-022, DOM-BR-023).
  • Resolves the payment address: with none supplied, requires the matched physical location to have no active PAY address and to be unique; with one supplied, requires the physical and payment matches to intersect to exactly one location (DOM-BR-024, DOM-BR-025).

Context

  • Namespace: SAIF.Domain.Claims.Ebilling.Indexing
  • Assembly/package: SAIF.Domain (Domain/SAIF.Domain/SAIF.Domain.csproj, .NET Framework 4.6.2 class library)

Public members

Member Signature Purpose
IndexProvidersToLocation public ResultCount IndexProvidersToLocation(long batchId, IEbillingQueryProvider queryProvider, IErrorConditionHandler errorConditionHandler, string updateUser) Indexes every non-indexed e-billing provider in the batch, tallying successes/failures into a ResultCount and rethrowing any per-provider exception with the provider id attached.
IndexProviderToLocation public static bool IndexProviderToLocation(EbillProvider ebillProvider, IEbillingQueryProvider queryProvider, IErrorConditionHandler errorConditionHandler, string updateUser) Resolves the provider by tax ID, matches its physical/facility address, and resolves the payment address to determine the final provider location (DOM-BR-020–DOM-BR-025).
GetMatchingProviderAddresses (institutional-aware) public static IEnumerable<ProviderAddress> GetMatchingProviderAddresses(EbillAddress ebillAddress, IEnumerable<ProviderAddress> providerAddresses, bool isInstitutional) Filters candidate addresses to institutional provider types when isInstitutional is true, then matches on Line1, City, and zero-padded zip (DOM-BR-021).
GetMatchingProviderAddresses (unfiltered) public static IEnumerable<ProviderAddress> GetMatchingProviderAddresses(EbillAddress ebillAddress, IEnumerable<ProviderAddress> providerAddresses) Matches candidate addresses to the e-bill address on Line1, City, and zero-padded zip without the institutional-type filter.
IndexProviderLocationWithNoPaymentAddress public static bool IndexProviderLocationWithNoPaymentAddress(EbillProvider ebillProvider, IEnumerable<ProviderAddress> matchedProviderPhysicalAddresses, IErrorConditionHandler errorConditionHandler, string updateUser) Requires exactly one matched physical location with no active PAY address and indexes the provider to it, or records "Multiple physical locations found without a payment address"/"Physical location having no payment address not found" (DOM-BR-024).
IndexProviderLocationWithPaymentAddress public static bool IndexProviderLocationWithPaymentAddress(EbillProvider ebillProvider, IEnumerable<ProviderAddress> matchedProviderPhysicalAddresses, IEnumerable<ProviderAddress> matchedProviderPaymentAddresses, IErrorConditionHandler errorConditionHandler, string updateUser) Intersects the matched physical and payment addresses by provider location and indexes the provider to the single common location, or records "Multiple physical locations found with matching payment address"/"Payment address not found" (DOM-BR-025).
IndexProviderLocation public static void IndexProviderLocation(EbillProvider ebillProvider, ProviderLocation providerLocation, string updateUser) Sets the provider's resolved location and stamps the update user/date.

Behavioral notes

  • Institutional detection checks whether any bill under any of the provider's patients has SetType.Code == "INST", so a mixed institutional/non-institutional provider is still filtered as institutional (DOM-BR-021).
  • Unlike ProviderIndexerV2, this class does not exclude correspondence or expired addresses before matching, and does not concatenate two-line bill addresses on a retry*.

Note: Statements marked with * were inferred from code structure, naming conventions, or contextual evidence where direct confirmation was not available in source artifacts.

Sources

  • Domain/SAIF.Domain/Claims/Ebilling/Indexing/ProviderIndexer.cs