Skip to content

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 clsPaymentPreference and clsProviderPaymentPreference.
  • 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; implements IBankAccount (from SAIF.Business.Payment) and IBusinessCriteria.
  • clsPaymentPreference: implements iPaymentPreference (from SAIF.Business.Payment) for claimant payment-method preference.
  • clsProviderPaymentPreference: a second iPaymentPreference implementation scoped to medical/service providers.
  • clsEFTAuthorization / clsEFTAuthorizationCollection: payee EFT authorization/consent records targeting the PAYMENT_AUTHORIZATION table.
  • clsDebitCardEnrollmentRequest / clsDebitCardEnrollmentRequestCollection: debit-card enrollment tracking targeting DEBIT_CARD_ENROLLMENT_REQUEST.
  • clsPaymentDetail / clsPaymentDetailCollection, clsPaymentAllocation / clsPaymentAllocationCollection: payment line-item and allocation records.
  • clsPaymentAddenda / clsPaymentAddendaCollection: ACH/NACHA addenda records.
  • clsPaymentReturn / clsPaymentReturnCollection (+ clsPaymentReturnReasonCode, clsReturnStatusCode, clsReturnTypeCode code 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 persisted IBusinessCriteria object.*
  • 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 IBankAccount and clsPaymentPreference/clsProviderPaymentPreference Implements iPaymentPreference (both interfaces defined in SAIF.Business.Payment).
  • All CRUD persistence flows through the standard BOF IBusinessCriteria pattern (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 sibling SAIF.Business.Payment library.
  • Includes a dedicated Tests project (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.dll reference 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 .nuspec plus 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 Tests project, 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.

Sources

  • Business\SAIF.Business.Payment.EFT\clsBankAccount.vb
  • Business\SAIF.Business.Payment.EFT\clsPaymentPreference.vb
  • Business\SAIF.Business.Payment.EFT\clsProviderPaymentPreference.vb
  • Business\SAIF.Business.Payment.EFT\clsEFTAuthorization.vb
  • Business\SAIF.Business.Payment.EFT\clsDebitCardEnrollmentRequest.vb
  • Business\SAIF.Business.Payment.EFT\clsPaymentDetail.vb
  • Business\SAIF.Business.Payment.EFT\clsPaymentAllocation.vb
  • Business\SAIF.Business.Payment.EFT\clsPaymentAddenda.vb
  • Business\SAIF.Business.Payment.EFT\clsPaymentReturn.vb
  • Business\SAIF.Business.Payment.EFT\clsAchFileID.vb
  • Business\SAIF.Business.Payment.EFT\clsPaymentBatchNumber.vb
  • Business\SAIF.Business.Payment.EFT\DynamicallyCalculatedBalanceInfo.vb
  • Business\SAIF.Business.Payment.EFT\DynamicallyCalculatedBalanceInfoFactory.vb
  • Business\SAIF.Business.Payment.EFT\Libs\SAIFEncrypt.dll
  • Business\SAIF.Business.Payment.EFT\Tests\PaymentDetailTests.vb
  • Business\SAIF.Business.Payment.EFT\SAIF.BOF.Business.Payment.EFT.nuspec