SAIF.Business.View.Provider business rules
This page captures business rules enforced by this library.
BR-PRV-001 Primary tax ID must be a 9-digit number
Field
Value
Statement
A provider's primary tax ID must convert to a numeric value exactly 9 digits long.
Trigger
Rule-engine validation of PrimaryTaxID after clsProvider construction/load.
Enforcement
clsProvider.Rule_ValidPrimaryTaxId (<RuleData("clsProvider01", "Invalid provider primary tax ID")>).
Outcome
Broken rule "Invalid provider primary tax ID"; IsValid becomes false.
Tables
PROVIDER
SQL
SQL-PRV-01 , SQL-PRV-01b
Source
SAIF.Business.View.Provider/clsProvider.vb
BR-PRV-002 Payee address resolution order
Field
Value
Statement
The payee address for a provider is the address of the tax-ID record that is effective today, not yet expired, and whose tax ID equals the primary location's provider primary tax ID; if none is found the primary location's active payment address is used.
Trigger
Read of clsProvider.PayeeAddress.
Enforcement
clsProvider.vb:153–166.
Outcome
Returns the tax-ID address or falls back to the payment address.
Tables
PROVIDER_TAX_ID
SQL
SQL-PTAX-01
Source
SAIF.Business.View.Provider/clsProvider.vb
BR-PRV-003 Provider-set retrieval uses unparameterized SQL
Field
Value
Statement
Provider-set retrieval accepts either a tax-ID array or a raw WHERE clause and injects both into SQL by string concatenation.*
Trigger
GetProviderCollection / GetProvidersUsingWhere.
Enforcement
clsProviderCollection.Criteria.BuildSQLWhere, clsProviderCollection.vb:277–294.
Outcome
Query is built without bind variables — untrusted input would be executed as SQL.*
Tables
PROVIDER , PROVIDER_TAX_ID
SQL
SQL-PRV-02 , SQL-PRV-02b
Source
SAIF.Business.View.Provider/clsProviderCollection.vb
BR-PRV-004 Providers retrieved via factory methods are read-only
Field
Value
Statement
A provider retrieved through the public factory methods is returned in read-only state.
Trigger
clsProvider.GetProvider (both overloads).
Enforcement
clsProvider.vb:317–339.
Outcome
ReadOnly = True on the returned object.
Tables
PROVIDER
SQL
SQL-PRV-01 , SQL-PRV-01b
Source
SAIF.Business.View.Provider/clsProvider.vb
BR-PRV-005 Payee type is always Provider
Field
Value
Statement
The payee type of a provider or provider location is always Provider with code "PROV".
Trigger
Read of PayeeType / PayeeTypeCode.
Enforcement
clsProvider.vb:182–192; clsProviderLocation.vb:412–422.
Outcome
Constant payee classification.
Source
SAIF.Business.View.Provider/clsProvider.vb, SAIF.Business.View.Provider/clsProviderLocation.vb
BR-PRV-006 Primary location selection
Field
Value
Statement
The primary location of a provider is the location flagged primary; if none is flagged, the first location; if there are no locations, nothing.
Trigger
Read of clsProvider.PrimaryLocation.
Enforcement
clsProvider.vb:104–117.
Outcome
Deterministic primary-location selection.
Tables
PROVIDER_LOCATION
SQL
SQL-PLOC-02
Source
SAIF.Business.View.Provider/clsProvider.vb
BR-PLOC-001 Provider location ID must be positive
Field
Value
Statement
A loaded provider location must have a ProviderLocationID greater than zero.
Trigger
Level I rule check on ProviderLocationID.
Enforcement
clsProviderLocation.Rule_ValidProviderLocation, clsProviderLocation.vb:605, 615–618 (clsProviderLocation01).
Outcome
Broken rule "Error: Invalid provider ID".
Tables
PROVIDER_LOCATION
SQL
SQL-PLOC-01
Source
SAIF.Business.View.Provider/clsProviderLocation.vb
BR-PLOC-002 Provider ID must be positive
Field
Value
Statement
The provider owning a location must resolve to a ProviderID greater than zero.
Trigger
Level III rule check on ProviderID.
Enforcement
clsProviderLocation.Rule_ValidProvider, clsProviderLocation.vb:608, 623–626 (clsProviderLocation02).
Outcome
Broken rule "Error: Verify provider is valid".
Tables
PROVIDER_LOCATION
SQL
SQL-PLOC-01
Source
SAIF.Business.View.Provider/clsProviderLocation.vb
BR-PLOC-003 Provider type code must be non-empty
Field
Value
Statement
The provider type of a location must resolve to a non-empty code.
Trigger
Level III rule check on ProviderTypeCode.
Enforcement
clsProviderLocation.Rule_ValidProviderTypeCode, clsProviderLocation.vb:609, 631–634 (clsProviderLocation03).
Outcome
Broken rule "Error: Verify provider type is valid".
Tables
PROVIDER_TYPE_CODE
SQL
SQL-PTYP-01
Source
SAIF.Business.View.Provider/clsProviderLocation.vb
BR-PLOC-004 Ineligible locations are excluded from filtered lists
Field
Value
Statement
A provider location is treated as ineligible on a date when that date falls within any of its ineligibility periods; filtered location lists exclude such locations.
Trigger
IsDuringIneligibilityPeriod(date); FilterBy_ProviderTypeCode[AndEffectiveDate].
Enforcement
clsProviderLocation.vb:125–130; clsProviderLocationCollection.vb:51–60.
Outcome
Ineligible locations are excluded from the filtered collection.
Tables
PROVIDER_INELIG_PERIOD
SQL
SQL-PINE-02
Source
SAIF.Business.View.Provider/clsProviderLocation.vb, SAIF.Business.View.Provider/clsProviderLocationCollection.vb
BR-PLOC-005 Provider location dirty state is composite
Field
Value
Statement
A provider location is dirty when its own state is dirty or its name object is dirty.
Trigger
Read of clsProviderLocation.IsDirty.
Enforcement
clsProviderLocation.vb:461–472.
Outcome
Composite dirty determination.
Source
SAIF.Business.View.Provider/clsProviderLocation.vb
BR-PADR-001 Addresses without expiration default to Date MaxValue
Field
Value
Statement
An address with no expiration date is treated as expiring at Date.MaxValue.
Trigger
clsProviderAddress.Fill during load.
Enforcement
clsProviderAddress.vb:372–377.
Outcome
Open-ended addresses remain active indefinitely.
Tables
PROVIDER_ADDRESS
SQL
SQL-PADR-01
Source
SAIF.Business.View.Provider/clsProviderAddress.vb
BR-PADR-002 Address active-on-date determination
Field
Value
Statement
An address is active on a date when that date lies between its start and termination dates.
Trigger
ActiveAddresses() / ActiveAddresses(date).
Enforcement
clsProviderAddressCollection.vb:85–101.
Outcome
Inactive addresses are filtered out.
Tables
PROVIDER_ADDRESS
SQL
SQL-PADR-01
Source
SAIF.Business.View.Provider/clsProviderAddressCollection.vb
BR-PADR-003 Primary address fallback chain
Field
Value
Statement
Primary-address selection falls back by type: Correspondence → Physical; Payment → Physical → Correspondence; Physical → Correspondence.
Trigger
Read of CorrespondenceAddress, PaymentAddress, PhysicalAddress, PrimaryAddress(type).
Enforcement
clsProviderAddressCollection.CalculatePrimaryAddress, clsProviderAddressCollection.vb:161–189.
Outcome
A best-available address of the requested kind.
Source
SAIF.Business.View.Provider/clsProviderAddressCollection.vb
BR-PADR-004 Empty address returned when none match
Field
Value
Statement
When no address of any fallback type exists, an empty address object is returned rather than nothing.
Trigger
End of CalculatePrimaryAddress.
Enforcement
clsProviderAddressCollection.vb:186.
Outcome
Callers never receive Nothing.
Source
SAIF.Business.View.Provider/clsProviderAddressCollection.vb
BR-PADR-005 Parent address preferred with child identity retained
Field
Value
Statement
When resolving a child/parent provider address, the parent's address wins if it is non-empty; it is cloned, flagged IsParent, annotated with the parent name and ID, but re-stamped with the child's business name and location ID. Otherwise the child's own address is used.
Trigger
clsProviderAddress.GetAddress(child, parent, type).
Enforcement
clsProviderAddress.vb:270–299.
Outcome
Parent-preferred address with child identity retained.
Source
SAIF.Business.View.Provider/clsProviderAddress.vb
BR-PADR-006 Address type codes are fixed
Field
Value
Statement
Address type codes are fixed: Correspondence = COR, Payment = PAY, Physical = PHY; any other value raises an error.
Trigger
GetAddressTypeCode(addressType).
Enforcement
clsProviderAddress.vb:302–314.
Outcome
Returns the code or throws Exception("Invalid Address Type.").
Source
SAIF.Business.View.Provider/clsProviderAddress.vb
BR-PREL-001 Works-for relationships are WRK code
Field
Value
Statement
A "works for" relationship is a relationship whose code is WRK.
Trigger
Read of WorksFor / WorksFor(date).
Enforcement
clsProviderRelationshipCollection.vb:89–111.
Outcome
Only WRK relationships are returned.
Tables
PROVIDER_RELATIONSHIP
SQL
SQL-PREL-01 , SQL-PREL-02
Source
SAIF.Business.View.Provider/clsProviderRelationshipCollection.vb
BR-PREL-002 Works-for defaults to active relationships only
Field
Value
Statement
By default only currently active relationships are included in the works-for list; ActiveOnly = False disables the date test.
Trigger
Read of WorksFor.
Enforcement
clsProviderRelationshipCollection.vb:93–98 (with ActiveOnly, :56–64).
Outcome
Expired relationships are excluded unless opted out.
Source
SAIF.Business.View.Provider/clsProviderRelationshipCollection.vb
BR-PREL-003 Relationship active-date determination
Field
Value
Statement
A relationship is active when today is on or after its start date and on or before its termination date; a missing termination date is treated as Date.MaxValue.
Trigger
Read of clsProviderRelationship.IsActive; WorksFor(activeDate).
Enforcement
clsProviderRelationship.vb:95–112; clsProviderRelationshipCollection.vb:106–110.
Outcome
Open-ended relationships stay active.
Source
SAIF.Business.View.Provider/clsProviderRelationship.vb, SAIF.Business.View.Provider/clsProviderRelationshipCollection.vb
BR-PREL-004 Destination relationship type is the opposite of the source
Field
Value
Statement
The destination end of a relationship is always the opposite of the source end (source Child → destination Parent, otherwise destination Child).
Trigger
Read of DestinationRelationshipType / DestinationProviderLocation.
Enforcement
clsProviderRelationship.vb:135–160.
Outcome
Callers always navigate to the other party.
Source
SAIF.Business.View.Provider/clsProviderRelationship.vb
BR-PINE-001 Ineligibility periods without termination default to Date MaxValue
Field
Value
Statement
An ineligibility period with no termination date is treated as terminating at Date.MaxValue.*
Trigger
Read of clsProviderIneligibilityPeriod.TerminationDate.
Enforcement
clsProviderIneligibilityPeriod.vb:~127–140.
Outcome
Open-ended ineligibility never expires.
Tables
PROVIDER_INELIG_PERIOD
SQL
SQL-PINE-01 , SQL-PINE-02
Source
SAIF.Business.View.Provider/clsProviderIneligibilityPeriod.vb
BR-DATE-001 Dated records are in effect within their date window
Field
Value
Statement
A dated record (MCO enrollment, DCBS cost charge, service contract) is in effect on a date when the date is on/after the effective date and either there is no expiration date or the date is on/before it.
Trigger
IsInEffect(date), IsActive, IsExpired.
Enforcement
clsMCOProvider.vb:~155–178; clsDCBSCostCharge.vb:41–68; clsProviderServiceContract.vb:~130–160.
Outcome
Uniform date-window evaluation.
Tables
PROVIDER_DCBS_COST_CHARGE , MCO_PROVIDER , PROVIDER_SERVICE_CONTRACT
SQL
SQL-DCBS-01 , SQL-MCO-01 , SQL-PSVC-02
Source
SAIF.Business.View.Provider/clsMCOProvider.vb, SAIF.Business.View.Provider/clsDCBSCostCharge.vb, SAIF.Business.View.Provider/clsProviderServiceContract.vb
BR-MCO-001 MCO plan must match the assigned plan ID
Field
Value
Statement
An MCO plan attached to an enrollment or service contract must match the plan ID already assigned to that record.
Trigger
SetPlan(inPlan) during list construction.
Enforcement
clsMCOProvider.vb:106–112; clsProviderServiceContract.vb:102–108.
Outcome
Throws ApplicationException("MCO plan submitted does not match plan assigned.").
Tables
MCO_PROVIDER , PROVIDER_SERVICE_CONTRACT
SQL
SQL-MCO-01 , SQL-PSVC-02
Source
SAIF.Business.View.Provider/clsMCOProvider.vb, SAIF.Business.View.Provider/clsProviderServiceContract.vb
BR-PSVC-001 Service contracts are limited to the offset window
Field
Value
Statement
Service contracts are limited to those still open or expired within the offset window (default 721 days); an offset of zero or less removes the restriction.
Trigger
clsProviderServiceContractList..ctor.
Enforcement
clsProviderServiceContract.vb:216–229.
Outcome
Older expired contracts are excluded.
Tables
PROVIDER_SERVICE_CONTRACT
SQL
SQL-PSVC-02
Source
SAIF.Business.View.Provider/clsProviderServiceContract.vb
BR-SRCH-001 At least one search field is required
Field
Value
Statement
At least one search field must be supplied before a provider search is considered valid.
Trigger
Rule-engine validation of clsSearchCriteria.ProviderName.
Enforcement
clsProviderSearch.Rule_ValidCriteria, clsProviderSearch.vb:411, 416–430.
Outcome
Broken rule "Error: Enter your search criteria".
Source
SAIF.Business.View.Provider/clsProviderSearch.vb
BR-SRCH-002 Zip code must be numeric
Field
Value
Statement
A supplied zip code must be numeric (an empty zip code is allowed).
Trigger
Rule-engine validation of ZipCode.
Enforcement
clsProviderSearch.Rule_ValidZipCode, clsProviderSearch.vb:412, 432–436.
Outcome
Broken rule "Error: Zip code must be numeric".
Source
SAIF.Business.View.Provider/clsProviderSearch.vb
BR-SRCH-003 Tax ID length limit
Field
Value
Statement
A supplied tax ID, with hyphens removed, must be fewer than 10 characters.
Trigger
Rule-engine validation of TaxId.
Enforcement
clsProviderSearch.Rule_ValidTaxId, clsProviderSearch.vb:413, 437–440.
Outcome
Broken rule "Error: The tax id is too long".
Source
SAIF.Business.View.Provider/clsProviderSearch.vb
BR-SRCH-004 Businessperson selector maps to business flag
Field
Value
Statement
The business/person selector maps to BUSINESS_FLAG = 'Y' for BUSINESS, 'N' for PERSON, and no flag filter for any other value.
Trigger
searchForProvider.
Enforcement
clsProviderSearch.vb:96–121.
Outcome
Result scope restricted or unrestricted accordingly.
Tables
PROVIDER_LOCATION
SQL
SQL-SRCH-01
Source
SAIF.Business.View.Provider/clsProviderSearch.vb
BR-SRCH-005 Provider name search also matches registered names
Field
Value
Statement
When a provider name is supplied, the search also matches registered names by unioning a second query joined to provider_tax_id.
Trigger
searchForProvider.
Enforcement
clsProviderSearch.vb:143–155, 224–229.
Outcome
Registered-name matches are included.
Tables
PROVIDER_TAX_ID
SQL
SQL-SRCH-01
Source
SAIF.Business.View.Provider/clsProviderSearch.vb
BR-SRCH-006 Sort name derivation
Field
Value
Statement
A person's sort name is derived by taking the text before the first space and re-appending everything from the first comma; business rows and rows without a comma sort on the full name.
Trigger
FormatSortName during result materialisation.
Enforcement
clsProviderSearch.vb:253–267.
Outcome
Consistent person/business sort ordering.
Source
SAIF.Business.View.Provider/clsProviderSearch.vb
BR-SRCH-007 Search results capped at 300 rows
Field
Value
Statement
A provider search returns at most 300 result rows; loading stops once the collection exceeds 299 entries.
Trigger
Result loop in searchForProvider.
Enforcement
clsProviderSearch.vb:246–249.
Outcome
Extra rows are silently discarded.
Tables
PROVIDER_LOCATION
SQL
SQL-SRCH-01
Source
SAIF.Business.View.Provider/clsProviderSearch.vb
BR-SRCH-008 Search text normalization
Field
Value
Statement
Search text values are upper-cased and trimmed, name/street/phone comparisons are prefix matches, and phone input has - and . removed.
Trigger
searchForProvider parameter construction.
Enforcement
clsProviderSearch.vb:126–214.
Outcome
Case-insensitive prefix matching.
Source
SAIF.Business.View.Provider/clsProviderSearch.vb
BR-DATA-001 No write operations are supported
Field
Value
Statement
This library performs no create, insert, update, or delete operations; every non-retrieve SQL property raises an error.
Trigger
Any access to CreateSQL, InsertSQL, UpdateSQL, DeleteSQL on any criteria class.
Enforcement
All 12 criteria classes (e.g. clsProvider.vb:416–447).
Outcome
ApplicationException(clsConstants.Messages.InvalidSQLProperty).
Source
SAIF.Business.View.Provider/clsProvider.vb (and the other 11 criteria classes)
Notes
No confirmed dependency-doc-sourced (inherited) rules were found for this library.
Note: Statements marked with * were inferred from code structure, naming conventions, or
contextual evidence where direct confirmation was not available in source artifacts. Statements
marked with ** could not be confirmed; treat as unknown until verified.
Note: Statements marked with * were inferred from code structure, naming conventions, or
contextual evidence where direct confirmation was not available in source artifacts. Statements
marked with ** could not be confirmed; treat as unknown until verified.
Sources
SAIF.Business.View.Provider/clsProvider.vb
SAIF.Business.View.Provider/clsProviderCollection.vb
SAIF.Business.View.Provider/clsProviderLocation.vb
SAIF.Business.View.Provider/clsProviderLocationCollection.vb
SAIF.Business.View.Provider/clsProviderAddress.vb
SAIF.Business.View.Provider/clsProviderAddressCollection.vb
SAIF.Business.View.Provider/clsProviderRelationship.vb
SAIF.Business.View.Provider/clsProviderRelationshipCollection.vb
SAIF.Business.View.Provider/clsProviderIneligibilityPeriod.vb
SAIF.Business.View.Provider/clsProviderIneligibilityPeriodCollection.vb
SAIF.Business.View.Provider/clsProviderTaxID.vb
SAIF.Business.View.Provider/clsProviderTaxIDCollection.vb
SAIF.Business.View.Provider/clsProviderType.vb
SAIF.Business.View.Provider/clsProviderTypeCollection.vb
SAIF.Business.View.Provider/clsProviderSearch.vb
SAIF.Business.View.Provider/clsDCBSCostCharge.vb
SAIF.Business.View.Provider/clsMCOProvider.vb
SAIF.Business.View.Provider/clsProviderServices.vb
SAIF.Business.View.Provider/clsProviderServiceContract.vb