---
title: SAIF.Business.Payment architecture
summary: Architectural responsibilities, boundaries, and interaction patterns.
status: draft
owner: <owner>
last_reviewed: 2026-07-24
library: SAIF.Business.Payment
reference_type: package
---

# SAIF.Business.Payment architecture

`SAIF.Business.Payment` is a component-tier BOF business library that serves as an eligibility-object and contract boundary in the payment domain. It defines the `IBankAccount` and `iPaymentPreference` interfaces, and it hosts the claim-payee-eligibility business objects (`clsEligPayeeClaim` and `clsEligPayeeClaimCollection`). No live SQL is executed by any class in this library.

## Responsibilities
- Determine and persist eligible-payee-for-claim-payment records (`clsEligPayeeClaim` and `clsEligPayeeClaimCollection`) in memory via BOF factory scaffolding.
- Define the `IBankAccount` contract describing a bank account's public shape, implemented elsewhere.*
- Define the `iPaymentPreference` contract describing a payee's preferred payment method, implemented elsewhere.*

## Component boundaries
- `clsEligPayeeClaim`: business object representing an eligible payee for a claim payment; inherits `clsBusinessBase` and implements `iPayee`. All SQL properties either throw `InvalidSQLProperty` or return a single-space string literal, so no live SQL is executed.
- `clsEligPayeeClaimCollection`: collection of `clsEligPayeeClaim`; inherits `clsBusinessCollectionBase` and implements its own nested `IBusinessCriteria`. `BeforeRetrieve` is empty and `AfterRetrieve` returns `Me`, so no live SQL is executed.
- `IBankAccount`: read-only contract interface describing bank-account shape; implemented by `clsBankAccount` in `SAIF.Business.Payment.EFT`.*
- `iPaymentPreference`: contract interface describing payment-preference shape through the `PaymentPreferenceTypes` enum and related routing/account properties; implemented by `clsPaymentPreference` and `clsProviderPaymentPreference` in `SAIF.Business.Payment.EFT`.*

## Interaction model
- `IBankAccount` and `iPaymentPreference` are defined here but implemented in the larger `SAIF.Business.Payment.EFT` library, confirming this library's role as the shared contract point between the two payment libraries.*
- `clsEligPayeeClaim` and `clsEligPayeeClaimCollection` do not execute live SQL; the only non-throwing `RetrieveSQL` getter returns a single-space string literal with no request construction, parameters, table references, or stored-procedure calls.
- The `.nuspec` dependency on `SAIF.BOF.Business.Claim`, `SAIF.BOF.Business.Claim.Person`, and `SAIF.BOF.Business.View.Claim` confirms this library's role is claim-payee-specific rather than general payment processing.

## Architecture diagram
The following diagram shows the contract relationship between this library and its primary implementer, `SAIF.Business.Payment.EFT`.

```mermaid
flowchart TD
    EligPayee["clsEligPayeeClaim /<br>clsEligPayeeClaimCollection"] --> Framework["SAIF.BOF.Framework<br>clsBusinessBase / clsBusinessCollectionBase"]
    IBankAccount["IBankAccount contract"] -.-> BankAccountImpl["clsBankAccount<br>in SAIF.Business.Payment.EFT"]
    IPaymentPref["iPaymentPreference contract"] -.-> PaymentPrefImpl["clsPaymentPreference /<br>clsProviderPaymentPreference<br>in SAIF.Business.Payment.EFT"]
    EligPayee --> DB["(No live SQL executed)"]
```

## Sequence diagram
The following diagram shows the claim-payee-eligibility creation sequence, noting that no live SQL is executed by this library.

```mermaid
sequenceDiagram
    participant Caller
    participant EligPayeeClaim as clsEligPayeeClaim
    participant Criteria as Nested Criteria (IBusinessCriteria)
    Caller->>EligPayeeClaim: NewEligPayeeClaim(dpi, personID)
    EligPayeeClaim->>Criteria: RetrieveSQL (returns single-space literal, no live SQL)
    Criteria-->>EligPayeeClaim: In-memory object constructed via BOF factory scaffolding
    EligPayeeClaim-->>Caller: Eligible-payee object (in-memory)
```

## Design constraints
- No live executable SQL was found in this library despite nested `IBusinessCriteria` classes being present; both classes use in-memory BOF factory scaffolding instead.
- The library is Oracle-configured at the provider level (`Oracle.ManagedDataAccess.Client` registered in `app.config` and `Web.config`), but no executable SQL exists to classify at the statement level.
- No security or authorization framework interaction was detected.
- No configuration framework (`IEnvironmentService`, `ConfigurationManager.AppSettings`, `DbConnectionManager`) interaction was detected.
- All dependencies are resolved as NuGet package references per the `.nuspec`; no local `<ProjectReference>` values were found.

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Dependencies](dependencies.md)
- [Operations and processes](operations-processes.md)
- [Business rules](business-rules.md)
- [Database tables](database-tables.md)
- [SQL catalog](sql/index.md)
- [API reference](api/index.md)
- [Configuration](configuration.md)

> **Note:** Statements marked with `*` were inferred from code structure, naming
> conventions, or contextual evidence where direct confirmation was not available
> in source artifacts.

## Sources
- `Business\SAIF.Business.Payment\clsEligPayeeClaim.vb`
- `Business\SAIF.Business.Payment\clsEligPayeeClaimCollection.vb`
- `Business\SAIF.Business.Payment\IBankAccount.vb`
- `Business\SAIF.Business.Payment\IPaymentPreference.vb`
- `Business\SAIF.Business.Payment\SAIF.BOF.Business.Payment.nuspec`
- `Business\SAIF.Business.Payment\app.config`
- `Business\SAIF.Business.Payment\Web.config`
