Skip to content

SAIF.Business.Payment.EFT operations and processes

This page is the operation catalog and cross-operation hub for SAIF.Business.Payment.EFT. The library exposes ten operations covering bank-account maintenance, payee/provider payment-preference selection, EFT authorization and consent, debit-card enrollment, the payment-detail/event/allocation lifecycle, output-control/print-status tracking, NACHA addenda, returned-payment handling, runtime-configurable balance calculation, and the ACH/EFT reference-data lookups that back all of the above. Each operation's detailed, step-by-step logic lives in its own page under operations/.

Operation catalog

Operation Intent Trigger Inputs Outputs Rules Tables SQL
Bank account management Create, retrieve, update, and delete (soft or hard) a payee's bank-account record Caller creates clsBankAccount via NewBankAccount, edits properties, and calls Save(), or retrieves by BankAccountID/CreateUser Routing number, account number, account type/status/data-source codes, business/consumer code, nickname, owner name Persisted/updated BANK_ACCOUNT row; encrypted routing/account numbers; soft- or hard-deleted record BR-EFT-04, BR-EFT-05, BR-EFT-11 BANK_ACCOUNT, BANK_ACCOUNT_TRANSFER SQL-001, SQL-009, SQL-010, SQL-030, SQL-031, SQL-036, SQL-077, SQL-078, SQL-088, SQL-089
Payment preference selection Determine and edit how a claimant or provider payee wants to be paid — check, direct deposit, or debit card Caller constructs clsPaymentPreference (claimant) or clsProviderPaymentPreference (provider) for a payee and calls Save() after IsValid iPayee, requested PaymentPreferenceType, bank routing/account numbers, IAT address fields Composed clsEFTAuthorization and, for debit-card, clsDebitCardEnrollmentRequest, persisted as child objects BR-EFT-02 PAYMENT_AUTHORIZATION, DEBIT_CARD_ENROLLMENT_REQUEST None of its own — delegates all persistence to EFT authorization / consent and Debit card enrollment
EFT authorization / consent Record, retrieve, and revoke a payee's consent to receive electronic (ACH) payments Caller creates/retrieves clsEFTAuthorization by authorization ID, auto-pay confirmation number, or customer ID, edits it, and calls Save() Authorization type, bank account, customer ID/type/second ID, prenote flag, IAT address fields Persisted PAYMENT_AUTHORIZATION row; derived AuthorizationStatus; revoked authorization with reason code BR-EFT-01, BR-EFT-05, BR-EFT-08, BR-EFT-09 PAYMENT_AUTHORIZATION SQL-013, SQL-045, SQL-046, SQL-081, SQL-092
Debit card enrollment Process, track, and retrieve debit-card payment enrollment requests submitted to US Bank Caller creates clsDebitCardEnrollmentRequest from a cardholder ID, edits demographic/address fields, and calls Save() Cardholder ID number, enrollment status, participant ID, address/demographic data, card enroll/active/termination dates Persisted DEBIT_CARD_ENROLLMENT_REQUEST row with an auto-assigned participant ID BR-EFT-05, BR-EFT-06 DEBIT_CARD_ENROLLMENT_REQUEST SQL-003, SQL-012, SQL-043, SQL-044, SQL-080, SQL-091
Payment detail, events, and allocation Create an ACH/EFT payment line item, drive it through its status-transition event log, and allocate it across balance types via a session transfer Caller calls NewPaymentDetail/NewPrenoteTrans, then state-transition methods (PostPending, RemitPosted, RefundVendorRemitted, ReturnVendorRemitted, CancelPayment, DeletePending), and Save() Payment amount, authorization reference, ACH entry class/event codes, session/policy context, balance-type allocations Persisted PAYMENT_DETAIL row; appended PAYMENT_EVENT audit rows; persisted SESSION_TRANSFER and PAYMENT_ALLOCATION rows; NACHA addenda for IAT payments BR-EFT-05, BR-EFT-10 PAYMENT_DETAIL, PAYMENT_EVENT, PAYMENT_ALLOCATION, SESSION_TRANSFER, PAYMENT_AUTH_SESSION_TRANSFER SQL-006, SQL-007, SQL-016, SQL-017, SQL-018, SQL-019, SQL-021, SQL-057, SQL-058, SQL-059, SQL-060, SQL-063, SQL-076, SQL-084, SQL-085, SQL-087, SQL-095, SQL-096, SQL-097
Output control tracking Track the print/transmission status of generated payment output artifacts (checks, ACH files) via OUTPUT_CONTROL records clsOutputControl.NewOutputControl when an output artifact is generated; updated once printed/transmitted Output document code, claim/policy reference, payment/authorization/banking-network type codes Persisted/updated OUTPUT_CONTROL row; PRINTED_DATE populated once transmitted BR-EFT-05 OUTPUT_CONTROL, ACH_FILE_ID, OUTPUT_DOCUMENT_CODE SQL-004, SQL-014, SQL-022, SQL-023, SQL-051, SQL-052, SQL-053, SQL-054, SQL-082, SQL-093
Payment addenda Attach NACHA addenda records (including 7-record IAT sets) to an EFT payment detail clsPaymentDetail.CreateIATAddenda/CreateStandardAddenda on payment creation, or direct NewPaymentAddenda call Payment detail sequence number, addenda text, addenda type code Persisted PAYMENT_ADDENDA row(s) linked to the parent payment detail BR-EFT-05 PAYMENT_ADDENDA SQL-005, SQL-015, SQL-055, SQL-056, SQL-083, SQL-094
Payment return handling Record a bank-returned EFT payment, classify it by NACHA return reason, and mark it reviewed Bank return file processing calls clsPaymentReturn.NewPaymentReturn, or a reviewer calls MarkReviewed Return reason/status/type codes, customer details, payment amount, payment-detail reference Persisted PAYMENT_RETURN row; culture-aware return-reason description; optional backout payment event BR-EFT-03, BR-EFT-05, BR-EFT-07 PAYMENT_RETURN, PAYMENT_RETURN_REASON_CODE SQL-008, SQL-020, SQL-064, SQL-065, SQL-066, SQL-067, SQL-070, SQL-071, SQL-072, SQL-073, SQL-086
Dynamic balance calculation Compute balance values at runtime for balance types configured with a stored-procedure reference Caller calls DynamicallyCalculatedBalanceInfoFactory.GetBalances(policyNumber, balanceType) Policy number, clsBalanceTypeCode with GET_BALANCE_SQL_TXT populated List of DynamicallyCalculatedBalanceInfo (seq num, description, amount, URL) net of pending online-payment allocations None registered* BALANCE_TYPE_CODE SQL-029
Code table lookups Retrieve EFT/ACH reference data used to validate and describe payment fields throughout the library Any lookup class's Get<Code> / Get<Code>Collection call Code value, or no filter for a full collection Code-table entry or entries (code, description, and type-specific attributes) None registered* Various ACH/EFT code tables SQL-002, SQL-011, SQL-024, SQL-025, SQL-026, SQL-027, SQL-028, SQL-032 through SQL-035, SQL-037 through SQL-042, SQL-047 through SQL-050, SQL-053, SQL-054, SQL-061, SQL-062, SQL-068, SQL-069, SQL-079, SQL-090

Process flow diagram

The following diagram shows how the ten operations relate across the EFT payment-processing lifecycle: a payee establishes a bank account and payment preference, an EFT authorization records their consent (with debit-card enrollment as one branch), a payment detail is created and moves through its event/allocation lifecycle, ACH output is batched and addenda attached, and any bank-returned payment is captured and classified.

flowchart TD
    Start([Payee sets up payment method]) --> Bank[Bank account management]
    Bank --> Pref[Payment preference selection]
    Pref --> Auth{Preference type?}
    Auth -->|Direct deposit| EFTAuth[EFT authorization / consent]
    Auth -->|Debit card| Debit[Debit card enrollment]
    Debit --> EFTAuth
    EFTAuth --> Ref[Code table lookups<br>validate type/status codes]
    EFTAuth --> Detail[Payment detail, events,<br>and allocation]
    Detail --> Balance[Dynamic balance calculation<br>for configurable balance types]
    Detail --> Addenda{IAT or standard<br>addenda required?}
    Addenda -->|Yes| PAddenda[Payment addenda]
    Addenda -->|No| Batch[Output control tracking]
    PAddenda --> Batch
    Batch --> Transmitted{Payment<br>transmitted}
    Transmitted -->|Return received| Return[Payment return handling]
    Transmitted -->|Success| End([Complete])
    Return --> End

Database interactions

Operation SQL Tables Type
Bank account management SQL-009, SQL-077, SQL-088 BANK_ACCOUNT Write
EFT authorization / consent SQL-013, SQL-081, SQL-092 PAYMENT_AUTHORIZATION Write
Debit card enrollment SQL-012, SQL-080, SQL-091 DEBIT_CARD_ENROLLMENT_REQUEST Write
Payment detail, events, and allocation SQL-018, SQL-019, SQL-016, SQL-021 PAYMENT_DETAIL, PAYMENT_EVENT, PAYMENT_ALLOCATION, SESSION_TRANSFER Write
Output control tracking SQL-014, SQL-082 OUTPUT_CONTROL Write
Payment addenda SQL-015 PAYMENT_ADDENDA Write
Payment return handling SQL-020, SQL-064 PAYMENT_RETURN Write / Read
Dynamic balance calculation SQL-029 BALANCE_TYPE_CODE Read

Failure and edge-case behavior

  • All transactional inserts, updates, and deletes across every operation enforce a RowsAffected = 1 check; a different count adds an InsertError/UpdateError/DeleteError message rather than raising an exception, so callers must inspect ErrorCount/IsValid after Save() (BR-EFT-05).
  • clsEFTAuthorization.BeforeRetrieve contains a CustomerID branch that invokes stored procedure PK72970_EPAY.retrieve_EFTAuth_ByCustomerID; the Oracle source was not retrievable, so this branch may be dead code.**
  • clsPaymentDetailCollection bypasses ordinary retrieval and assembles live SQL through BuildSqlNormal, BuildSqlSeqNum, BuildSqlPend, BuildPreNoteSql, and BuildPostedSql, each targeting a different retrieval scenario (claim payments, single payment, pending payments, pre-note candidates, US Bank posted payments).*
  • DynamicallyCalculatedBalanceInfoFactory always invokes BALANCE_TYPE_CODE.GET_BALANCE_SQL_TXT as a stored-procedure name (CommandType.StoredProcedure), never as literal inline SQL text, despite the column name implying raw SQL; the exact procedure logic cannot be documented from this library's source alone.*
  • Bank account "delete" is a soft-delete by default (BANK_ACCOUNT_STATUS_CODE set to DELETED); an explicit PurgeRecord flag switches to a hard DELETE instead (SQL-088, BR-EFT-11).
  • clsPaymentReturn.DeleteSQL and clsPaymentEvent.DeleteSQL both throw on any attempt to delete — return and event records are permanent once created, by design.*
  • clsEFTAuthorizationCollection.DoesAccountHaveAuthorization is an unimplemented stub that always returns False; it has a TODO comment and no callers observed in this pass.**

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.

Stored procedure operations

One Oracle package is referenced by this library. The package source was not found in Oracle during analysis and the calling code path is considered possibly dead code.

Package / Procedure Schema Calling class Calling method Purpose Status
PK72970_EPAY.retrieve_EFTAuth_ByCustomerID PK72970 clsEFTAuthorization BeforeRetrieve (CustomerID branch) Retrieves EFT authorization records by customer type/ID** ⚠️ Not found in Oracle — possibly dead code**

See procedures/index.md for the full procedure catalog and PK72970_EPAY.md for detailed analysis.

Sources

  • Business\SAIF.Business.Payment.EFT\clsBankAccount.vb
  • Business\SAIF.Business.Payment.EFT\clsBankAccountCollection.vb
  • Business\SAIF.Business.Payment.EFT\clsBankAccountTransfer.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\clsEFTAuthorizationCollection.vb
  • Business\SAIF.Business.Payment.EFT\clsDebitCardEnrollmentRequest.vb
  • Business\SAIF.Business.Payment.EFT\clsDebitCardEnrollmentRequestCollection.vb
  • Business\SAIF.Business.Payment.EFT\clsPaymentDetail.vb
  • Business\SAIF.Business.Payment.EFT\clsPaymentDetailCollection.vb
  • Business\SAIF.Business.Payment.EFT\clsPaymentAllocation.vb
  • Business\SAIF.Business.Payment.EFT\clsPaymentAllocationCollection.vb
  • Business\SAIF.Business.Payment.EFT\clsSessionTransfer.vb
  • Business\SAIF.Business.Payment.EFT\clsPaymentAuthorizationSessionTransfer.vb
  • Business\SAIF.Business.Payment.EFT\clsPaymentEvent.vb
  • Business\SAIF.Business.Payment.EFT\clsPaymentEventCollection.vb
  • Business\SAIF.Business.Payment.EFT\clsPaymentEventCode.vb
  • Business\SAIF.Business.Payment.EFT\clsAchFileID.vb
  • Business\SAIF.Business.Payment.EFT\clsAchFileIDCollection.vb
  • Business\SAIF.Business.Payment.EFT\clsPaymentBatchNumber.vb
  • Business\SAIF.Business.Payment.EFT\clsOutputControl.vb
  • Business\SAIF.Business.Payment.EFT\clsOutputControlCollection.vb
  • Business\SAIF.Business.Payment.EFT\clsPaymentAddenda.vb
  • Business\SAIF.Business.Payment.EFT\clsPaymentAddendaCollection.vb
  • Business\SAIF.Business.Payment.EFT\clsPaymentReturn.vb
  • Business\SAIF.Business.Payment.EFT\clsPaymentReturnCollection.vb
  • Business\SAIF.Business.Payment.EFT\clsPaymentReturnReasonCode.vb
  • Business\SAIF.Business.Payment.EFT\DynamicallyCalculatedBalanceInfoFactory.vb
  • Business\SAIF.Business.Payment.EFT\DynamicallyCalculatedBalanceInfo.vb
  • Business\SAIF.Business.Payment.EFT\clsBalanceTypeCode.vb