SAIF.Business.View.Provider architecture¶
SAIF.Business.View.Provider is a mid-tier VB.NET class library implementing the SAIF BOF business-object layer for the provider domain (medical/insurance providers, provider locations, addresses, tax IDs, relationships, ineligibility periods, service contracts, and provider search). It follows the standard BOF pattern of clsBusinessBase/clsBusinessCollection(Of T) subclasses paired with nested Criteria classes implementing IBusinessCriteria, and is read-only from a database perspective — every live SQL statement discovered is a retrieval query.
Responsibilities¶
- Retrieve and represent core provider entities:
clsProvider,clsProviderCollection,clsProviderAddress/Collection,clsProviderLocation/Collection,clsProviderRelationship/Collection,clsProviderIneligibilityPeriod/Collection,clsProviderTaxID/Collection,clsProviderType/Collection. - Orchestrate multi-criteria provider search (
clsProviderSearch), dynamically assembling SQL joins across provider, address, tax ID, identity, service, and MCO plan tables based on supplied filters. - Supply supporting DTO/list wrappers populated by parent business objects:
clsMCOProvider's list type,clsDCBSCostCharge's list type,clsProviderServiceContractInfo/List,clsProviderServiceInfo/List. - Expose a legacy typed
DataSet(Institutions.Designer.vb, generated fromInstitutions.xsd) for tabular institution data, distinct from the BOF business-object pattern used elsewhere.
Component boundaries¶
- BOF business objects (
clsProvider,clsProviderCollection,clsProviderAddress/Collection,clsProviderLocation/Collection,clsProviderRelationship/Collection,clsProviderIneligibilityPeriod/Collection,clsProviderType/Collection): each inheritsclsBusinessBaseorclsBusinessCollection(Of T)and defines a nestedFriend Class CriteriaimplementingIBusinessCriteria/iBusinessCriteria, supplyingCreateSQL/RetrieveSQL/InsertSQL/UpdateSQL/DeleteSQLconsumed through the standard BOF data-portal (IDataPortalInfo.ProcessPortalRequest()) lifecycle. - Retrieve-only boundary (
clsProviderTaxIDCollection): itsCriteriaclass deviates from the standard pattern, inheritingclsRetrieveOnlyBusinessCriteriaand callingMe.SetRetrieveSQL(...)directly rather than implementing all fiveIBusinessCriteriamembers — no create/update/delete path exists for tax-ID data through this collection. - Read-only reference boundary (
clsProviderType/Collection):CriteriathrowsApplicationExceptionforCreateSQL/DeleteSQL/InsertSQL/UpdateSQL, leaving onlyRetrieveSQLfunctional — reference-data lookup only. - Search orchestrator (
clsProviderSearch): builds dynamic SQL join clauses at runtime based on supplied search criteria (service type, MCO plan, business/person flag, tax ID, provider name, address, phone) rather than using static per-object CRUD SQL; defines nestedclsSearchResultsand aReadOnlyCollection(Of clsSearchResults)result type. - Plain DTO/list wrappers (
clsMCOProvider's list,clsDCBSCostCharge's list,clsProviderServiceContractInfo/List,clsProviderServiceInfo/List): inherit directly fromGeneric.List(Of T), with no BOF base class orIBusinessCriteria— populated by parent business objects rather than performing independent data access. - Legacy typed DataSet (
Institutions.Designer.vb): machine-generated ADO.NET typed-DataSet code, structurally separate from the BOF business-object pattern; its consumers within this library were not confirmed**. - Responsibility boundary: this library is purely a data/business-object layer for provider-domain entities — no UI, no web hosting, no console entry point.
Architecture diagram¶
The following diagram shows the high-level component interactions for the provider business-object layer.
flowchart TD
Consumer[Consuming application/library] --> Provider["clsProvider / clsProviderCollection"]
Consumer --> Search["clsProviderSearch<br>(dynamic SQL join orchestrator)"]
Consumer --> ListTypes["DTO list wrappers<br>(clsMCOProviderList, clsDCBSCostChargeList,<br>clsProviderServiceList, clsProviderServiceContractList)"]
Provider --> Address["clsProviderAddress / Collection"]
Provider --> Location["clsProviderLocation / Collection"]
Provider --> TaxID["clsProviderTaxID / Collection (retrieve-only)"]
Location --> Relationship["clsProviderRelationship / Collection"]
Location --> Inelig["clsProviderIneligibilityPeriod / Collection"]
Location --> ProviderType["clsProviderType / Collection (retrieve-only reference data)"]
Search --> DataPortal["IDataPortalInfo / data portal"]
Provider --> DataPortal
Address --> DataPortal
Location --> DataPortal
Relationship --> DataPortal
Inelig --> DataPortal
ProviderType --> DataPortal
TaxID --> DataPortal
DataPortal --> Oracle[(Oracle database)]
ListTypes --> Oracle
Interaction model¶
- Business objects receive an
IDataPortalInfothrough theirCriteriaconstructors/factory methods, consistent with the standard BOF data-portal pattern: a factory method buildsCriteria, setsDataRequest.SQLStatementfrom the criteria's SQL property, executes via the data portal, and fills object state inAfterRetrieve/BeforeRetrievelifecycle methods. clsProviderSearch.searchForProvider()dynamically composes a joined query acrossPROVIDER_LOCATION,PROVIDER_TYPE_CODE,PROVIDER_ADDRESS,PROVIDER_TAX_ID,PROVIDER_IDENTITY,PROVIDER_SERVICE, andMCO_PROVIDER, addingJOINclauses and bind variables only when the corresponding filter is supplied by the caller.- Collection-type business objects (
clsProviderAddressCollection,clsProviderLocationCollection, etc.) each retrieve a set of child business objects via their ownRetrieveSQL, independent of the search orchestrator. - Simple DTO list types (
clsMCOProviderList,clsDCBSCostChargeList,clsProviderServiceContractList,clsProviderServiceList) execute their own directStringBuilder-composed retrieval queries from their constructors, filtered by a provider location ID, rather than going through theIBusinessCriteria/data-portal pattern.
The following diagram shows the primary provider-retrieval request sequence.
sequenceDiagram
participant Consumer
participant Provider as clsProvider
participant Criteria as Criteria (IBusinessCriteria)
participant DPI as IDataPortalInfo
participant DB as Oracle database
Consumer->>Provider: GetProvider(inDataportal, inProviderID)
Provider->>Criteria: BeforeRetrieve builds RetrieveSQL
Provider->>DPI: ProcessPortalRequest(RetrieveSQL)
DPI->>DB: Execute retrieval query
DB-->>DPI: Result rows
DPI-->>Provider: AfterRetrieve populates object state
Provider-->>Consumer: Populated clsProvider instance
Design constraints¶
- No
<ProjectReference>elements — all dependencies are NuGet package references; no internal cross-project dependency within this repository. - All discovered SQL is read-only (CRUD type
R) exceptclsProviderType, which explicitly blocks Create/Insert/Update/Delete via thrown exceptions, andclsProviderTaxIDCollection, which is structurally retrieve-only viaclsRetrieveOnlyBusinessCriteria. - Every SQL table reference is unqualified in source, and no local
.configfile exposes an OracleUser ID, so schema/link ownership cannot be confirmed from this library's scope alone**. - Database type is Oracle, confirmed by bind-variable syntax (
:ServiceType,:MCOPlan,:Offset),sysdateusage, theOracle.ManagedDataAccesspackage reference, and ODP.NET provider registration inapp.config/Web.config. - No
IEnvironmentService,ConfigurationManager.AppSettings,DbConnectionManager, or AD/security enforcement points were found — this library does not qualify for Phase 1c (security) or Phase 1d (config) documentation gates. - Per
dependency-resolution.json, BOF business base classes (clsBusinessBase,clsRetrieveOnlyBusinessCriteria, etc.) are not present in the Legends CLI index for this repository; their exact enforcement semantics are inherited from theSAIF.BOF.Businesspackage but could not be independently confirmed*.
Related documentation¶
- Index
- Overview
- Dependencies
- Operations and processes
- Business rules
- Database tables
- SQL catalog
- API reference
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¶
Business\SAIF.Business.View.Provider\clsProvider.vbBusiness\SAIF.Business.View.Provider\clsProviderCollection.vbBusiness\SAIF.Business.View.Provider\clsProviderAddress.vbBusiness\SAIF.Business.View.Provider\clsProviderAddressCollection.vbBusiness\SAIF.Business.View.Provider\clsProviderIneligibilityPeriod.vbBusiness\SAIF.Business.View.Provider\clsProviderIneligibilityPeriodCollection.vbBusiness\SAIF.Business.View.Provider\clsProviderLocation.vbBusiness\SAIF.Business.View.Provider\clsProviderLocationCollection.vbBusiness\SAIF.Business.View.Provider\clsProviderRelationship.vbBusiness\SAIF.Business.View.Provider\clsProviderRelationshipCollection.vbBusiness\SAIF.Business.View.Provider\clsProviderSearch.vbBusiness\SAIF.Business.View.Provider\clsProviderServiceContract.vbBusiness\SAIF.Business.View.Provider\clsProviderServices.vbBusiness\SAIF.Business.View.Provider\clsProviderTaxID.vbBusiness\SAIF.Business.View.Provider\clsProviderTaxIDCollection.vbBusiness\SAIF.Business.View.Provider\clsProviderType.vbBusiness\SAIF.Business.View.Provider\clsProviderTypeCollection.vbBusiness\SAIF.Business.View.Provider\clsMCOProvider.vbBusiness\SAIF.Business.View.Provider\clsDCBSCostCharge.vbBusiness\SAIF.Business.View.Provider\Institutions.Designer.vbBusiness\SAIF.Business.View.Provider\SAIF.BOF.Business.View.Provider.vbproj