---
title: BankValidator business rules
summary: Enumerated business rules enforced by the BankValidator library.
status: draft
owner: SAIF
last_reviewed: 2026-07-30
library: BankValidator
reference_type: package
---

# BankValidator business rules

This page captures business rules and caller-visible behavioral constraints enforced by `SAIF.clsValidateBank`.

## BR-001: Constructor retry limit range

| Field | Value |
| --- | --- |
| **Statement** | The constructor replaces the default retry limit only when `inLogonRetryAttempts` is between `0` and `10`, inclusive. |
| **Trigger** | A caller constructs `clsValidateBank` and supplies the optional retry-limit argument. |
| **Enforcement** | `New(...)` assigns `m_LogonAttemptsMax` only when `inLogonRetryAttempts > -1 And inLogonRetryAttempts < 11`. |
| **Outcome** | Out-of-range values leave the default retry limit of `3` in place. |
| **Confidence** | Verified |
| **Source** | `Legacy\BankValidator\clsValidateBank.vb` |

---

## BR-002: Vendor logon retry handling

| Field | Value |
| --- | --- |
| **Statement** | `LogonABA`, `LogonATM`, and `LogonSSN` increment the shared `m_LogonAttempts` counter and recursively retry until the counter is no longer less than `m_LogonAttemptsMax`. |
| **Trigger** | A vendor `Logon(...)` call throws an exception. |
| **Enforcement** | Each `Logon*` catch block compares `m_LogonAttempts` to `m_LogonAttemptsMax`, recurses on the helper method while under the limit, and throws `ApplicationException` after the limit is exhausted. |
| **Outcome** | The caller either receives a successful vendor logon or an `ApplicationException` for the relevant service. |
| **Confidence** | Verified |
| **Source** | `Legacy\BankValidator\clsValidateBank.vb` |

---

## BR-003: Bank lookup SOAP faults return empty results

| Field | Value |
| --- | --- |
| **Statement** | Bank-detail retrieval methods treat `System.Web.Services.Protocols.SoapException` as a not-found condition and return empty results. |
| **Trigger** | `GetBankFullDS`, `GetBankFullXML`, or `GetBankListXML` catches `SoapException` while calling an ABA bank-detail operation. |
| **Enforcement** | The `SoapException` catch blocks assign `""` for XML-returning methods and leave the `Institutions` DataSet empty for `GetBankFullDS`. |
| **Outcome** | Callers receive an empty string or empty DataSet instead of a propagated SOAP fault. |
| **Confidence** | Verified |
| **Source** | `Legacy\BankValidator\clsValidateBank.vb` |

---

## BR-004: Non-participating banks return unknown ATM status

| Field | Value |
| --- | --- |
| **Statement** | `GetATMAccountStatus` returns status `-1` and description `Unknown` when the routing number is not an ATM participant. |
| **Trigger** | `ATM.IsParticipant(LogonToken, inRoutingNum)` returns `False`. |
| **Enforcement** | The `Else` branch in `GetATMAccountStatus` assigns `statusCode = -1` and `outStatusDescription = "Unknown"`. |
| **Outcome** | The caller receives an unknown account-status result and no ATM status lookup is attempted. |
| **Confidence** | Verified |
| **Source** | `Legacy\BankValidator\clsValidateBank.vb` |

---

## BR-005: ATM participation faults resolve to non-participant

| Field | Value |
| --- | --- |
| **Statement** | `IsATMParticipant` treats `System.Web.Services.Protocols.SoapException` from the ATM vendor as a non-participation result rather than propagating the fault. |
| **Trigger** | `ATM.IsParticipant(LogonToken, inRoutingNum)` throws `SoapException` while checking whether a routing number participates in the ATM network. |
| **Enforcement** | The `SoapException` catch block in `IsATMParticipant` assigns `isValid = False` before the method proceeds to `LogoffATM()` in `Finally`. |
| **Outcome** | The caller receives `False` instead of a propagated SOAP fault. This differs from [BR-004](#br-004-non-participating-banks-return-unknown-atm-status), which governs `GetATMAccountStatus` and has no equivalent fault handling — an unhandled exception there propagates to the caller. |
| **Confidence** | Verified |
| **Source** | `Legacy\BankValidator\clsValidateBank.vb` |

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Operations and processes](operations-processes.md)
- [API reference](api/index.md)

## Sources
- `Legacy\BankValidator\clsValidateBank.vb`
