SAIF.Business.Payment.EFT architecture¶
SAIF.Business.Payment.EFT is the primary implementation library for ACH/EFT electronic payment processing, complementing the narrower contract/eligibility-focused SAIF.Business.Payment library. It is the largest of the payment-domain libraries (~30 business object classes paired with collections) and has the broadest internal dependency footprint, consistent with EFT payment processing requiring access to claim, policy, provider, and ePay contexts.
Responsibilities¶
- Manage bank account records, including masking and account-type classification (
clsBankAccount). - Determine payee and provider payment-method preferences — check, direct deposit, debit card — via
clsPaymentPreferenceandclsProviderPaymentPreference. - Record payee EFT authorization/consent (
clsEFTAuthorization). - Process and track debit-card payment enrollment requests (
clsDebitCardEnrollmentRequest). - Record individual payment line items and their allocation across claim/benefit categories (
clsPaymentDetail,clsPaymentAllocation). - Generate and track ACH batch/file identifiers and payment batch numbers (
clsAchFileID,clsPaymentBatchNumber). - Attach NACHA addenda records to EFT transactions (
clsPaymentAddenda). - Process returned/failed EFT payments and their reason/status/type classification (
clsPaymentReturn+ code tables). - Compute dynamically calculated balance values (
DynamicallyCalculatedBalanceInfoFactory).
Component boundaries¶
clsBankAccount/clsBankAccountCollection: concrete bank-account business object; implementsIBankAccount(fromSAIF.Business.Payment) andIBusinessCriteria.clsPaymentPreference: implementsiPaymentPreference(fromSAIF.Business.Payment) for claimant payment-method preference.clsProviderPaymentPreference: a secondiPaymentPreferenceimplementation scoped to medical/service providers.clsEFTAuthorization/clsEFTAuthorizationCollection: payee EFT authorization/consent records targeting thePAYMENT_AUTHORIZATIONtable.clsDebitCardEnrollmentRequest/clsDebitCardEnrollmentRequestCollection: debit-card enrollment tracking targetingDEBIT_CARD_ENROLLMENT_REQUEST.clsPaymentDetail/clsPaymentDetailCollection,clsPaymentAllocation/clsPaymentAllocationCollection: payment line-item and allocation records.clsPaymentAddenda/clsPaymentAddendaCollection: ACH/NACHA addenda records.clsPaymentReturn/clsPaymentReturnCollection(+clsPaymentReturnReasonCode,clsReturnStatusCode,clsReturnTypeCodecode tables): returned/failed EFT payment handling.clsAchFileID/clsAchFileIDCollection,clsPaymentBatchNumber: ACH batch/file and payment-batch identifier tracking.clsBankAccountTransfer,clsPaymentAuthorizationSessionTransfer,clsSessionTransfer: lighter-weight transfer/session-context DTOs.*- Code-table lookup classes (18 classes): standard BOF code-table pattern covering all ACH/EFT reference data.
DynamicallyCalculatedBalanceInfo/DynamicallyCalculatedBalanceInfoFactory: runtime balance calculation; not a persistedIBusinessCriteriaobject.*- Local binary reference
Libs\SAIFEncrypt.dll: checked-in encryption assembly, likely used for bank-account-number encryption given the domain, though no confirmed call site was found.**
Interaction model¶
- Confirms the cross-library contract relationship:
clsBankAccount Implements IBankAccountandclsPaymentPreference/clsProviderPaymentPreference Implements iPaymentPreference(both interfaces defined inSAIF.Business.Payment). - All CRUD persistence flows through the standard BOF
IBusinessCriteriapattern (CreateSQL/RetrieveSQL/InsertSQL/UpdateSQL/DeleteSQL) against an Oracle database, evidenced by:``-prefixed bind-variable syntax andNEXTVAL FROM DUAL` sequence generation across all transactional business objects. - Has the broadest dependency footprint among payment-domain libraries — depends on Claim, Claim.Authority, Claim.Maintenance, Claim.MedicalBill, Claim.Payment, Claim.Person, EPay.USBank, Payment (contract source), Policy, Tasks, Tasks.Claim, Utilities, View.Claim, View.Policy, View.Provider, and Services.WebServices.Epay.
- The presence of
clsPaymentReturn/return-reason/status/type code tables indicates a full ACH return-handling subsystem (NACHA return codes), a distinguishing architectural feature versus the siblingSAIF.Business.Paymentlibrary. - Includes a dedicated
Testsproject (SAIF.Business.Payment.EFT.Tests), indicating this is a more actively tested area of the codebase.*
Architecture diagram¶
The following diagram shows the high-level component grouping within the library and its position relative to the SAIF.Business.Payment contract library and Oracle persistence layer.
flowchart TD
Contracts["SAIF.Business.Payment<br>IBankAccount / iPaymentPreference"] -.->|implements| BankAccount[clsBankAccount]
Contracts -.->|implements| PaymentPref["clsPaymentPreference<br>clsProviderPaymentPreference"]
Auth[clsEFTAuthorization] --> DebitCard[clsDebitCardEnrollmentRequest]
PaymentDetail["clsPaymentDetail<br>clsPaymentAllocation"] --> Addenda[clsPaymentAddenda]
PaymentDetail --> AchFile["clsAchFileID<br>clsPaymentBatchNumber"]
PaymentDetail --> Return["clsPaymentReturn<br>+ reason/status/type code tables"]
Encrypt["Libs/SAIFEncrypt.dll"] -.->|data protection**| BankAccount
Framework["SAIF.BOF.Framework<br>clsBusinessBase"] --> BankAccount
Framework --> PaymentDetail
BankAccount --> DB[(Oracle database)]
PaymentDetail --> DB
Return --> DB
Auth --> DB
Sequence diagram¶
The following diagram shows the primary EFT payment-processing sequence from authorization through payment-detail persistence.
sequenceDiagram
participant Caller
participant EFTAuth as clsEFTAuthorization
participant BankAccount as clsBankAccount
participant PaymentDetail as clsPaymentDetail
participant Oracle as Oracle database
Caller->>EFTAuth: Verify/create authorization
EFTAuth->>Oracle: Execute RetrieveSQL / InsertSQL
Caller->>BankAccount: Retrieve bank account
BankAccount->>Oracle: Execute RetrieveSQL
Caller->>PaymentDetail: Create payment detail
PaymentDetail->>Oracle: Execute CreateSQL (NEXTVAL FROM DUAL)
Oracle-->>PaymentDetail: Sequence value
PaymentDetail->>Oracle: Execute InsertSQL
Oracle-->>PaymentDetail: Row count / confirmation
PaymentDetail-->>Caller: Persisted payment detail
Design constraints¶
- Targets Oracle exclusively; no other database provider evidence was found.
- No AD/authorization-framework interaction was detected; however, the
Libs\SAIFEncrypt.dllreference is a data-protection consideration given the sensitivity of bank routing/account numbers handled here.** - No configuration framework (
IEnvironmentService,ConfigurationManager.AppSettings,DbConnectionManager) interaction was detected. - Dependencies are resolved entirely as NuGet package references per the
.nuspecplus one local binary reference (Libs\SAIFEncrypt.dll); no local<ProjectReference>s were found. - This is the only one of the 5 assigned libraries with a dedicated
Testsproject, indicating a more actively/rigorously tested area of the codebase.*
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.
Related documentation¶
- Index
- Overview
- Dependencies
- Operations and processes
- Business rules
- Database tables
- SQL catalog
- API reference
- Configuration
Sources¶
Business\SAIF.Business.Payment.EFT\clsBankAccount.vbBusiness\SAIF.Business.Payment.EFT\clsPaymentPreference.vbBusiness\SAIF.Business.Payment.EFT\clsProviderPaymentPreference.vbBusiness\SAIF.Business.Payment.EFT\clsEFTAuthorization.vbBusiness\SAIF.Business.Payment.EFT\clsDebitCardEnrollmentRequest.vbBusiness\SAIF.Business.Payment.EFT\clsPaymentDetail.vbBusiness\SAIF.Business.Payment.EFT\clsPaymentAllocation.vbBusiness\SAIF.Business.Payment.EFT\clsPaymentAddenda.vbBusiness\SAIF.Business.Payment.EFT\clsPaymentReturn.vbBusiness\SAIF.Business.Payment.EFT\clsAchFileID.vbBusiness\SAIF.Business.Payment.EFT\clsPaymentBatchNumber.vbBusiness\SAIF.Business.Payment.EFT\DynamicallyCalculatedBalanceInfo.vbBusiness\SAIF.Business.Payment.EFT\DynamicallyCalculatedBalanceInfoFactory.vbBusiness\SAIF.Business.Payment.EFT\Libs\SAIFEncrypt.dllBusiness\SAIF.Business.Payment.EFT\Tests\PaymentDetailTests.vbBusiness\SAIF.Business.Payment.EFT\SAIF.BOF.Business.Payment.EFT.nuspec