---
title: clsBankAccount
summary: API reference for clsBankAccount.
status: draft
owner: SAIF
last_reviewed: 2026-07-24
library: SAIF.Business.Payment.EFT
reference_type: package
---

# clsBankAccount

`clsBankAccount` is the concrete bank-account business object in `SAIF.Business.Payment.EFT`. It implements both `IBankAccount` (from `SAIF.Business.Payment`) and `IBusinessCriteria` (the BOF persistence interface), providing full CRUD lifecycle management for bank account records stored in the `BANK_ACCOUNT` Oracle table.

## Purpose
- Persist and retrieve bank account records including routing number, account number, account type, owner name, and status.
- Expose masked bank account number display (`MaskedBankAccountNumber`).
- Classify accounts by type (checking, savings, business, consumer) and status.
- Perform soft-delete by updating `BANK_ACCOUNT_STATUS_CODE` to `DELETED` rather than removing the row.

## Context
- Namespace: `SAIF.Business.Payment.EFT`
- Assembly/package: `SAIF.BOF.Business.Payment.EFT` (NuGet)
- Implements: `IBankAccount` (SAIF.Business.Payment), `IBusinessCriteria`
- Inherits: `clsBusinessBase` (SAIF.BOF.Framework)

## Public members

| Member | Signature | Purpose |
| --- | --- | --- |
| `BankAccountID` | `Property BankAccountID As Decimal` | Sequence number primary key (`BANK_ACCOUNT_SEQ_NUM`). |
| `BankAccountNum` | `Property BankAccountNum As String` | Encrypted/stored bank account number (`BANK_ACCOUNT_NUM`).* |
| `BankRoutingNum` | `Property BankRoutingNum As String` | Bank routing number (`BANK_ROUTING_NUM`).* |
| `BankAccountTypeCode` | `Property BankAccountTypeCode As String` | Account type code (`BANK_ACCOUNT_TYPE_CODE`). |
| `BankAccountStatusCode` | `Property BankAccountStatusCode As String` | Account status code (`BANK_ACCOUNT_STATUS_CODE`). |
| `BankAccountDataSourceCode` | `Property BankAccountDataSourceCode As String` | Data source code (`BANK_ACCOUNT_DATA_SOURCE_CODE`). |
| `BankAccountOwnerName` | `Property BankAccountOwnerName As String` | Owner name on the account (`BANK_ACCOUNT_OWNER_NAME`). |
| `BankAccountHolderName` | `Property BankAccountHolderName As String` | Holder name on the account (`BANK_ACCOUNT_HOLDER_NAME`). |
| `BankAccountNickName` | `Property BankAccountNickName As String` | Nickname for the account (`BANK_ACCOUNT_NICK_NAME`). |
| `BankName` | `Property BankName As String` | Name of the bank (`BANK_NAME`). |
| `BusinessConsumerCode` | `Property BusinessConsumerCode As String` | Business or consumer classification (`BUSINESS_CONSUMER_CODE`). |
| `HistoricalAuthorizationFlag` | `Property HistoricalAuthorizationFlag As String` | Indicates historical authorization (`HISTORICAL_AUTHORIZATION_FLAG`). |
| `PaymentReturnReasonCode` | `Property PaymentReturnReasonCode As String` | Last return reason code on file (`PAYMENT_RETURN_REASON_CODE`). |
| `MaskedBankAccountNumber` | `ReadOnly Property MaskedBankAccountNumber As String` | Returns a masked display version of the bank account number.* |
| `CreateDate` | `Property CreateDate As Date` | Record creation date. |
| `CreateUser` | `Property CreateUser As String` | User who created the record. |
| `UpdateDate` | `Property UpdateDate As Date` | Last update date. |
| `UpdateUser` | `Property UpdateUser As String` | User who last updated the record. |

## Behavioral notes
- `DeleteSQL` issues an `UPDATE` that sets `BANK_ACCOUNT_STATUS_CODE` to `clsBankAccountStatusCode.DELETED`, not a physical row delete. The `BANK_ACCOUNT` row is retained for historical linkage.*
- `CreateSQL` calls `SELECT BANK_ACCOUNT_SEQ.NEXTVAL FROM DUAL` before `InsertSQL` to generate the sequence value.*
- All insert and update operations enforce `RowsAffected = 1`; a different count adds an error message to the business object.*
- The `Libs\SAIFEncrypt.dll` binary reference in the project suggests bank account/routing number encryption may be applied before persistence, but no confirmed call site was found.**

## Constraints and usage notes
- Requires `IBankAccount` contract from `SAIF.BOF.Business.Payment`.
- Sequence generation (`CreateSQL`) must complete successfully before `InsertSQL` can proceed.*
- Soft-delete semantics: consumers must filter by `BANK_ACCOUNT_STATUS_CODE <> 'DELETED'` if inactive accounts should be excluded.*

> **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\clsBankAccountCollection.vb`
