---
title: ThreeAddressNoFacilityMatchesMatchRule
summary: API reference for ThreeAddressNoFacilityMatchesMatchRule.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-09-24
library: SAIF.Domain
reference_type: package
---

# ThreeAddressNoFacilityMatchesMatchRule

`ThreeAddressNoFacilityMatchesMatchRule` is an `IProviderMatchRule` for billers with payment and facility addresses (with or without physical) that specifically handles the case where the facility address has no matching candidate at all: when payment and facility match each other it delegates to `PaymentOnlyMatchRule`; otherwise it intersects independent payment and facility matches, and if that intersection is empty specifically because no facility-address candidates matched, it falls back to `PhysicalAndPaymentMatchRule` instead of failing outright. It is part of the `ProviderIndexerV2` rule set for the wider (physical+payment+facility) rule chain ([DOM-BR-028](../../business-rules.md#dom-br-028-v2-indexing)).

## Purpose
- Applies when the biller has payment and facility addresses, or physical, payment, and facility addresses together, the same precondition as `PaymentAndFacilityMatchRule`.
- When the biller's payment and facility addresses match each other, reduces to the simpler single-address matching implemented by `PaymentOnlyMatchRule`.
- When the payment/facility intersection is empty specifically because no facility-address candidates matched, falls back to `PhysicalAndPaymentMatchRule` rather than returning no match, covering billers whose facility address is present but does not correspond to any known provider location.

## 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 |
| --- | --- | --- |
| ThreeAddressNoFacilityMatchesMatchRule (constructor) | `public ThreeAddressNoFacilityMatchesMatchRule(IEnumerable<EbillAddress> ebillAddresses, IEnumerable<ProviderAddress> physicalAddresses)` | Initializes the rule with the biller's e-bill addresses and the candidate provider addresses, via `ProviderMatchBase`. |
| UniqueProviderLocationMatch | `public ProviderLocation UniqueProviderLocationMatch(bool concatenateTwoLineBillAddresses)` | Applies only when the biller has payment and facility addresses (with or without physical); delegates to `PaymentOnlyMatchRule` when they match, otherwise intersects independent payment/facility matches and falls back to `PhysicalAndPaymentMatchRule` when no facility candidates matched at all. |

## Inherited public members

Members in this section are inherited from `ProviderMatchBase` in `SAIF.Domain`. They are available on this type through inheritance.

| Member | Signature | Purpose | Origin |
| --- | --- | --- | --- |
| BillerHasPhysicalPaymentAndFacilityAddresses | `public bool BillerHasPhysicalPaymentAndFacilityAddresses()` | Reports whether the biller has all three address roles present. | `SAIF.Domain` — `ProviderMatchBase` |
| EbillAddressAndProviderAddressMatch | `public static bool EbillAddressAndProviderAddressMatch(EbillAddress ebillAddress, ProviderAddress providerAddress, bool concatenateTwoLineBillAddresses)` | Reports whether an e-bill address matches a candidate provider address on Line1 (optionally concatenated with Line2), City, and zero-padded zip code ([DOM-BR-022](../../business-rules.md#dom-br-022-address-match)). | `SAIF.Domain` — `ProviderMatchBase` |
| TwoEbillAddressesMatch | `public static bool TwoEbillAddressesMatch(EbillAddress addressOne, EbillAddress addressTwo)` | Reports whether two e-bill addresses match on Line1, City, and zero-padded zip code. | `SAIF.Domain` — `ProviderMatchBase` |
| GetUniqueLocation | `public static ProviderLocation GetUniqueLocation(IList<ProviderAddress> matchedAddressesListOne, IList<ProviderAddress> matchedAddressesListTwo)` | Intersects two matched-address lists by provider-location id and returns the single common `ProviderLocation`, or `null` when the intersection is not exactly one location ([DOM-BR-025](../../business-rules.md#dom-br-025-payment-resolution)). | `SAIF.Domain` — `ProviderMatchBase` |
| GetMatchingProviderAddresses (single address) | `public static IEnumerable<ProviderAddress> GetMatchingProviderAddresses(EbillAddress ebillAddress, IEnumerable<ProviderAddress> providerAddresses, bool concatenateTwoLineBillAddresses)` | Filters the candidate provider addresses down to those matching the given e-bill address. | `SAIF.Domain` — `ProviderMatchBase` |
| GetMatchingProviderAddresses (address set) | `public static IEnumerable<ProviderAddress> GetMatchingProviderAddresses(IEnumerable<EbillAddress> ebillAddresses, IEnumerable<ProviderAddress> providerAddresses, bool concatenateBillAddresses)` | Filters the candidate provider addresses down to those matching any address in the given e-bill address set. | `SAIF.Domain` — `ProviderMatchBase` |
| RemoveSpecialCharacters | `public static string RemoveSpecialCharacters(string input)` | Strips every character except letters, digits, and spaces from the input, returning `null` for a null input. | `SAIF.Domain` — `ProviderMatchBase` |

## Behavioral notes
- The fallback to `PhysicalAndPaymentMatchRule` only triggers when the facility-address candidate list is empty (`matchedProviderFacilityAddresses.Count == 0`), not merely when the intersection is empty for other reasons — a payment/facility intersection that is empty because both sides had candidates that just did not overlap does not trigger the fallback*.

> **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/ThreeAddressNoFacilityMatchesMatchRule.cs`
- `Domain/SAIF.Domain/Claims/Ebilling/Indexing/ProviderMatchBase.cs`
