SAIF.Business.View.Provider architecture¶
SAIF.Business.View.Provider is a read-only business/view layer library in the SAIF BOF "View" family. It exposes the provider subject area — providers, provider locations, addresses, tax IDs, relationships, ineligibility periods, provider types, MCO enrollments, services, service contracts, and DCBS cost-charge factors — as strongly typed objects for claim/legal application consumers, without any create, update, or delete capability.
Responsibilities¶
- Expose the SAIF provider subject area (providers, provider locations, addresses, tax IDs, relationships, ineligibility periods, provider types, MCO enrollments, services, service contracts, DCBS cost-charge factors) as read-only, strongly typed objects for claim/legal consumers.
- Enforce read-only construction: every
IBusinessCriteriaimplementation throwsApplicationException(clsConstants.Messages.InvalidSQLProperty)fromCreateSQL,InsertSQL,UpdateSQL, andDeleteSQL;clsProvider.GetProvideradditionally setsReadOnly = Trueon the returned instance.* - Provide multi-criteria provider-location search (
clsProviderSearch) independent of the criteria/portal pattern used elsewhere in the library. - Attach MCO plan information to enrollments and service contracts via the cross-library call
GetMCOInfo(dpi)(fromSAIF.Business).
Component boundaries¶
- Portal/criteria business objects (
clsProvider,clsProviderCollection,clsProviderLocation,clsProviderLocationCollection,clsProviderAddress,clsProviderAddressCollection,clsProviderRelationship,clsProviderRelationshipCollection,clsProviderIneligibilityPeriod,clsProviderIneligibilityPeriodCollection,clsProviderTaxID,clsProviderTaxIDCollection,clsProviderType,clsProviderTypeCollection): subclassclsBusinessBase/clsBusinessCollection(Of T), each with a nestedCriteriaclass, retrieved throughIDataPortalInfo.DataAccessLayer.RetrieveObject(criteria). - Direct-query self-loading lists (
clsDCBSCostChargeList,clsMCOProviderList,clsProviderServiceList,clsProviderServiceContractList): plainList(Of T)subclasses that build SQL withText.StringBuilderand execute it viaSqlHelper.ResultSetQueryin their constructor, bypassing the criteria pattern. - Search engine (
clsProviderSearch,clsSearchCriteria,clsProviders,clsSearchResults): a standalone multi-criteria search component that builds and executes dynamic SQL directly. - Generated typed DataSet (
Institutions/InstitutionDataTable/InstitutionRow): compiled into the assembly but unreferenced by any other type in the library; residual scaffolding paired with theSAIF.Legacy.BankValidatorpackage reference.* - Aggregate roots:
clsProvider(keyed byPROVIDER_SEQ_NUM) andclsProviderLocation(a second root that back-navigates to itsProvider), each exposing lazily-loaded child navigation properties.
Interaction model¶
- Claim/legal application managers (
SAIF.Application.Claim.Legal,SAIF.Business.Claim.Legal) call the publicGet*factory methods, supplying anIDataPortalInfoobtained from the caller's data-portal context. - Portal/criteria objects delegate retrieval to
IDataPortalInfo.DataAccessLayer.RetrieveObject(criteria), which executes the criteria'sRetrieveSQLand populates the object throughBeforeRetrieve/AfterRetrievelifecycle methods. - Direct-query lists and the search engine execute SQL themselves via
SqlHelper.ResultSetQuery, independent of the data-portal criteria pipeline. - Navigation properties (e.g.
clsProvider.ProviderLocations,clsProviderLocation.Addresses,ChildRelationships,IneligibilityPeriods,DCBSCostCharges,MCOList,Services,ServiceContracts) are lazily loaded — each access triggers its own database round trip (a per-property N+1 pattern).* - Reciprocal navigation (
clsProvider.ProviderLocations→clsProviderLocation.Provider→clsProvider) forms a cycle broken only by lazy-load null checks; nothing is cached across instances.* - The only outward cross-library call is
GetMCOInfo(dpi)(fromSAIF.Business), used to attachMCOPlanInfoto MCO enrollments and service contracts. - Consumers reference this library through the packaged assembly
SAIF.BOF.Business.View.Provider2.0.23139.2 (binary<Reference>), not through a project reference; documented consumers includeSAIF.Application.Claim.Legal(LegalManagerBase,clsCaseCostManager,clsRequestManager) andSAIF.Business.Claim.Legal(clsCaseCost).
Architecture diagram¶
The following diagram shows the high-level component interactions between claim/legal consumers, this library's two data-access styles, and the underlying SAIF BOF framework/data layer.
flowchart TD
A[Claim/legal application managers<br>SAIF.Application.Claim.Legal / SAIF.Business.Claim.Legal] --> B[Portal/criteria business objects<br>clsProvider, clsProviderLocation, etc.]
A --> C[Direct-query self-loading lists<br>clsDCBSCostChargeList, clsMCOProviderList,<br>clsProviderServiceList, clsProviderServiceContractList]
A --> D[clsProviderSearch]
B --> E[IDataPortalInfo.DataAccessLayer.RetrieveObject]
C --> F[SqlHelper.ResultSetQuery]
D --> F
E --> G["SAIF BOF Framework / Oracle<br>data access"]
F --> G
B --> H[SAIF.Business.GetMCOInfo]
Sequence diagram¶
The following diagram shows the primary retrieval sequence for a portal/criteria business object (e.g. retrieving a provider location and its navigation properties).
sequenceDiagram
participant Client
participant clsProviderLocation
participant Criteria
participant IDataPortalInfo
Client->>clsProviderLocation: GetProviderLocation(dpi, providerLocationID)
clsProviderLocation->>Criteria: new Criteria(providerLocationID)
clsProviderLocation->>IDataPortalInfo: DataAccessLayer.RetrieveObject(criteria)
IDataPortalInfo-->>clsProviderLocation: populated object (AfterRetrieve)
clsProviderLocation-->>Client: clsProviderLocation instance
Client->>clsProviderLocation: Addresses (lazy navigation)
clsProviderLocation->>IDataPortalInfo: RetrieveObject(AddressCollection criteria)
IDataPortalInfo-->>clsProviderLocation: clsProviderAddressCollection
clsProviderLocation-->>Client: Addresses
Design constraints¶
- Read-only by construction: no
CreateSQL,InsertSQL,UpdateSQL, orDeleteSQLis implemented; all such properties throw. - Two coexisting data-access styles (portal/criteria vs. direct-query) mean consumers must understand which retrieval path a given type uses.
- Lazy-loaded navigation properties create a per-property N+1 database round-trip pattern.*
clsProviderCollection.Criteria.BuildSQLWherebuilds SQL by string concatenation for tax-ID lists and caller-supplied WHERE clauses, which is unparameterized and a potential SQL-injection path if callers pass untrusted input (see BR-PRV-003).- No configuration, logging, caching, or security/authorization logic is implemented in this library; all environmental context arrives via the injected
IDataPortalInfo.
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¶
SAIF.Business.View.Provider/SAIF.Business.View.Provider.vbprojSAIF.Business.View.Provider/clsProvider.vbSAIF.Business.View.Provider/clsProviderCollection.vbSAIF.Business.View.Provider/clsProviderAddress.vbSAIF.Business.View.Provider/clsProviderAddressCollection.vbSAIF.Business.View.Provider/clsProviderLocation.vbSAIF.Business.View.Provider/clsProviderLocationCollection.vbSAIF.Business.View.Provider/clsProviderRelationship.vbSAIF.Business.View.Provider/clsProviderRelationshipCollection.vbSAIF.Business.View.Provider/clsProviderSearch.vbSAIF.Business.View.Provider/clsProviderServiceContract.vbSAIF.Business.View.Provider/clsProviderServices.vbSAIF.Business.View.Provider/clsProviderTaxID.vbSAIF.Business.View.Provider/clsProviderTaxIDCollection.vbSAIF.Business.View.Provider/clsProviderType.vbSAIF.Business.View.Provider/clsProviderTypeCollection.vbSAIF.Business.View.Provider/clsProviderIneligibilityPeriod.vbSAIF.Business.View.Provider/clsProviderIneligibilityPeriodCollection.vbSAIF.Business.View.Provider/clsDCBSCostCharge.vbSAIF.Business.View.Provider/clsMCOProvider.vbSAIF.Business.View.Provider/app.configSAIF.Business.View.Provider/Web.configSAIF.Business.View.Provider/packages.config