SAIF.Business.Provider.PaymentPreference architecture¶
SAIF.Business.Provider.PaymentPreference is a mid-tier BOF class library that manages provider payment-preference data: paperless EOB (Explanation of Benefits) delivery preferences, EFT (Electronic Funds Transfer / direct-deposit) interface records, and a read-only view of provider bank accounts. It sits between Oracle data access (via the BOF Data Portal) and upper-tier application/service layers.
Responsibilities¶
- Manage
clsProviderEOB/clsProviderEOBCollection— the external user's paperless-EOB delivery preference for a provider location, including insert/update/delete againstPROVIDER_EOB_INTERFACEwith optimistic concurrency. - Manage
clsProviderEFT/clsProviderEFTCollection— the EFT interface record linking a provider location to an external user type, with effective/expiry date tracking, assignment/revocation ofclsProviderPaymentPreferencechild objects, and correspondence-history recording via thePK83548_PROVIDER_CORR_HIST.EFT_CORR_HISTstored procedure. - Provide
clsProviderBankAccount/clsProviderBankAccountCollection— a read-only view of bank accounts associated with a provider, decrypting sensitive bank routing/account numbers on demand viaSAIF.Security.clsSecureEncrypt. - Support batch processing (e.g., ACH direct-deposit status updates) via
clsProviderEFTCollection.GetAllEFTsColl, an unfiltered full-table retrieval ofPROVIDER_EFT_INTERFACE.*
Component boundaries¶
- EOB preference component (
clsProviderEOB/clsProviderEOBCollection) — OwnsPROVIDER_EOB_INTERFACECRUD, joined withEXT_USER_TYPE,EXT_USER,EMAIL_ADDRESS,PERSONfor display context. - EFT preference component (
clsProviderEFT/clsProviderEFTCollection) — OwnsPROVIDER_EFT_INTERFACECRUD and orchestrates the childclsProviderPaymentPreferenceobject (from the peerSAIF.BOF.Business.Payment.EFTpackage) throughAddChildObject,SaveChildObject, andRevokeAuthorization. - Bank account view component (
clsProviderBankAccount/clsProviderBankAccountCollection) — Read-only; itsCriteria.RetrieveSQLthrows, so retrieval must go through the collection'sLoad()path rather thanRetrieveObject.* - Stored procedure integration —
clsProviderEFT.CreateHistorycalls the Oracle package procedurePK83548_PROVIDER_CORR_HIST.EFT_CORR_HIST(schemaWCIS_DBA) to persist correspondence history; procedure-level business rules and operations (PBR-001, PBR-002, PBR-003, PBR-004, PBR-005, PBR-006, PBR-007, PBR-008) are documented separately and feed intobusiness-rules.mdandoperations-processes.md.
Interaction model¶
- Callers obtain an
IDataPortalInfo(DPI) from the application layer and invoke a static factory (e.g.,clsProviderEFTCollection.GetProviderEFTLocations(dpi, providerID, ...)). - The factory delegates to
IDataPortalInfo.DataAccessLayer.RetrieveObject(New Criteria(...))or toclsBusinessCollection.Load()viaSqlHelperfor direct-SQL retrieval paths. - Insert/Update/Delete follow the standard BOF
Before*/After*lifecycle, withAfterInsert/AfterUpdatecheckingRowsAffected = 1for concurrency validation and raisingInsertError/DBContentionErroron failure. clsProviderEFT.ProviderPaymentPreferencelazy-loads aclsProviderPaymentPreferencechild object fromSAIF.BOF.Business.Payment.EFT; EFT authorization changes cascade to this child object.clsProviderBankAccountdelegates toclsBankAccount.GetBankAccount()(fromSAIF.BOF.Business.Payment) and decrypts bank numbers via the locally referencedSAIFEncrypt.dll(SAIF.Security.clsSecureEncrypt).clsProviderEFT.CreateHistorycalls thePK83548_PROVIDER_CORR_HIST.EFT_CORR_HISTOracle stored procedure, which internally callsFETCH_TIN_ADDRESSto resolve the provider's primary tax-ID address for the history record.
Architecture diagram¶
The following diagram shows the three business components and their downstream dependencies.
flowchart TD
Consumer[Consuming application] --> EOB[clsProviderEOB /<br>clsProviderEOBCollection]
Consumer --> EFT[clsProviderEFT /<br>clsProviderEFTCollection]
Consumer --> BankAcct[clsProviderBankAccount /<br>clsProviderBankAccountCollection]
EOB --> Oracle[(Oracle database<br>PROVIDER_EOB_INTERFACE, EXT_USER, PERSON)]
EFT --> Oracle2[(Oracle database<br>PROVIDER_EFT_INTERFACE, PROVIDER_LOCATION)]
EFT --> PaymentPref[clsProviderPaymentPreference<br>SAIF.BOF.Business.Payment.EFT]
EFT --> StoredProc[PK83548_PROVIDER_CORR_HIST.EFT_CORR_HIST<br>Oracle stored procedure]
BankAcct --> BankAccount[clsBankAccount<br>SAIF.BOF.Business.Payment]
BankAcct --> Encrypt[SAIFEncrypt.dll<br>clsSecureEncrypt]
BankAcct --> Oracle3[(Oracle database<br>BANK_ACCOUNT, PAYMENT_AUTHORIZATION)]
Sequence diagram¶
The following sequence diagram shows EFT payment-location assignment.
sequenceDiagram
participant Consumer as Consuming application
participant EFT as clsProviderEFT
participant PaymentPref as clsProviderPaymentPreference
participant Oracle as Oracle database
Consumer->>EFT: AssignPaymentLocation
EFT->>PaymentPref: revoke existing authorization (if Direct Deposit and saved)
EFT->>Oracle: BeforeUpdate/BeforeInsert SQL
Oracle-->>EFT: RowsAffected
EFT->>PaymentPref: SaveChildObject
EFT-->>Consumer: CustomerEmailNotificationFlag set, notification pending
Design constraints¶
clsProviderBankAccount.Criteria.RetrieveSQLthrowsApplicationException; the safe retrieval path isLoad()via the collection rather thanGetProviderBankAccount/NewProviderBankAccountfactories, which would throw at runtime if used.*- No
IEnvironmentService,ConfigurationManager.AppSettings, or application-level configuration keys were found; Oracle connection selection is externalized viaIDataPortalInfo.* - Several claim-layer and policy-layer NuGet packages (
SAIF.BOF.Business.Claim.*,SAIF.BOF.Business.Policy,SAIF.BOF.Business.Tasks.*) are declared inpackages.config/.nuspecbut have no direct usage found in the four primary source files; their inclusion may be transitive or legacy.** SAIFEncrypt.dllis referenced as a locally-committed DLL (..\..\Libs\SAIFEncrypt\SAIFEncrypt.dll), not a NuGet package; its version, ownership, and update process are unknown.**clsProviderEFT.CreateHistoryalways returnsTrueregardless of the stored procedure outcome; whether the procedure raises exceptions or status codes that should be checked is unconfirmed.*clsProviderEFTCollection.GetAllEFTsCollperforms an unfiltered full-table scan ofPROVIDER_EFT_INTERFACEfor ACH batch processing, a potential performance concern at scale.**
Correspondence-history sequence¶
The following sequence diagram shows EFT correspondence-history creation.
sequenceDiagram
participant Consumer as Consuming application
participant EFT as clsProviderEFT
participant Proc as PK83548_PROVIDER_CORR_HIST
participant Oracle as Oracle database
Consumer->>EFT: CreateHistory()
EFT->>Proc: EFT_CORR_HIST(parameters)
Proc->>Oracle: SELECT PROVIDER / PROVIDER_TAX_ID
Proc->>Oracle: INSERT PROVIDER_CORR_HIST
Proc-->>EFT: Procedure completes
EFT-->>Consumer: True
Related documentation¶
- Index
- Overview
- Dependencies
- Configuration
- Operations and processes
- Business rules
- Database tables
- SQL catalog
- Procedures
- API reference
Note: Statements marked with
*are inferred from code behavior rather than explicit documentation or comments; statements marked with**could not be confirmed and should be treated as unknown until verified.
Sources¶
Business\SAIF.Business.Provider.PaymentPreference\clsProviderEOB.vbBusiness\SAIF.Business.Provider.PaymentPreference\clsProviderEOBCollection.vbBusiness\SAIF.Business.Provider.PaymentPreference\clsProviderEFT.vbBusiness\SAIF.Business.Provider.PaymentPreference\clsProviderBankAccounts.vbBusiness\SAIF.Business.Provider.PaymentPreference\SAIF.BOF.Business.Provider.PaymentPreference.vbproj