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

# clsPaymentPreference

`clsPaymentPreference` is the claimant payment-method preference business object. It implements the `iPaymentPreference` interface defined in `SAIF.Business.Payment`, enabling application-layer code to work with payment preference objects through a common contract. It determines how a claimant wants to receive payments (check, direct deposit, or debit card).

## Purpose
- Persist and retrieve payment method preferences for claimants.
- Implement the `iPaymentPreference` contract to integrate with the broader SAIF payment framework.
- Expose `AllowDebitCard` to control whether the debit-card payment option is available to this payee.

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

## Public members

| Member | Signature | Purpose |
| --- | --- | --- |
| `PAYMENT_PREFERENCE_TYPE_CHECK` | `Public Const PAYMENT_PREFERENCE_TYPE_CHECK = "CHK"` | Code constant representing the check payment preference type. |
| `PAYMENT_PREFERENCE_TYPE_DIRECTDEPOSIT` | `Public Const PAYMENT_PREFERENCE_TYPE_DIRECTDEPOSIT = "DD"` | Code constant representing the direct-deposit payment preference type. |
| `PAYMENT_PREFERENCE_TYPE_DEBITCARD` | `Public Const PAYMENT_PREFERENCE_TYPE_DEBITCARD = "DC"` | Code constant representing the debit-card payment preference type. |
| `AllowDebitCard` | `Public ReadOnly Property AllowDebitCard As Boolean` | Indicates whether debit-card payment is allowed for this payee; true only when the payee's `PayeeType` is `Worker`. |
| `BankAccountNumber` | `Public Property BankAccountNumber As String` | Gets or sets the decrypted (or masked, per `MyCriteria.MaskBankNumbers`) bank account number stored on `PaymentAuthorization.BankAccount`; setting a changed value flags the account for re-validation. |
| `BankAccountTypeCode` | `Public Property BankAccountTypeCode As String` | Gets or sets the bank account type code delegated to `PaymentAuthorization.BankAccount.BankAccountTypeCode`. |
| `BankRoutingNumber` | `Public Property BankRoutingNumber As String` | Gets or sets the decrypted (or masked) bank routing number stored on `PaymentAuthorization.BankAccount`; setting a changed value flags the account for re-validation. |
| `Payee` | `Public ReadOnly Property Payee As iPayee` | The payee (claimant) associated with this payment preference. |
| `IsBusinessAccount` | `Public Property IsBusinessAccount As Boolean` | Gets or sets whether the bank account is a business account, mapped to `clsConsumerBusinessCode.BUSINESS`/`CONSUMER` on `PaymentAuthorization.BankAccount`. |
| `SendEmailNotification` | `Public Property SendEmailNotification As Boolean` | Gets or sets whether the customer receives email notifications; setting `True` populates `PaymentAuthorization.CustomerContactEmailAddress` from `Payee.EmailAddress`. |
| `PaymentPreferenceType` | `Public ReadOnly Property PaymentPreferenceType As iPaymentPreference.PaymentPreferenceTypes` | The strongly-typed payment preference type (`Check`, `DirectDeposit`, `DebitCard`) selected for this payee. |
| `PaymentPreferenceTypeCode` | `Public ReadOnly Property PaymentPreferenceTypeCode As String` | The short code (`CHK`/`DD`/`DC`) corresponding to `PaymentPreferenceType`; returns `"?????"` for an unrecognized type.* |
| `MaskedBankAccountNumber` | `Public ReadOnly Property MaskedBankAccountNumber As String` | The masked bank account number from `PaymentAuthorization.BankAccount`, or empty string if no authorization has been created yet. |
| `MaskedBankRoutingNumber` | `Public ReadOnly Property MaskedBankRoutingNumber As String` | The masked bank routing number from `PaymentAuthorization.BankAccount`, or empty string if no authorization has been created yet. |
| `PayeeHasForeignOrIATAddress` | `Public ReadOnly Property PayeeHasForeignOrIATAddress As Boolean` | True when any IAT address field (`IATCity`, `IATStreet`, `IATCountryCode`, `IATPostalCode`, `IATStateOrProvince`) is populated, or when `Payee.Address.IsForeign` is true. |
| `MaskedSSNTaxID` | `Public ReadOnly Property MaskedSSNTaxID As String` | The masked SSN/tax ID, showing only the last four digits of `DebitCard.PrimaryTaxID`. |
| `SSNTaxID` | `Public Property SSNTaxID As String` | Gets or sets `DebitCard.PrimaryTaxID`; get returns the masked value when `MyCriteria.MaskBankNumbers` is set. |
| `IsIAT` | `Public Property IsIAT As Boolean` | Gets or sets `PaymentAuthorization.IATFlag` (International ACH Transaction flag) as a boolean. |
| `IATCity` | `Public Property IATCity As String` | Gets or sets `PaymentAuthorization.IATCity`. |
| `IATCountryCode` | `Public Property IATCountryCode As String` | Gets or sets `PaymentAuthorization.IATCountryCode`. |
| `CountryCodeList` | `Public ReadOnly Property CountryCodeList As SAIF.Business.CodeMappings.clsCountryCodeList` | Lazily-loaded, statically-cached country code list retrieved via `SAIF.Business.CodeMappings.GetCountryCodeList`. |
| `IATCountryName` | `Public ReadOnly Property IATCountryName As String` | The description text for `IATCountryCode` looked up from `CountryCodeList`; returns empty string if the lookup fails. |
| `IATStateOrProvince` | `Public Property IATStateOrProvince As String` | Gets or sets `PaymentAuthorization.IATStateProvince`. |
| `IATPostalCode` | `Public Property IATPostalCode As String` | Gets or sets `PaymentAuthorization.IATPostalCode`. |
| `IATStreet` | `Public Property IATStreet As String` | Gets or sets `PaymentAuthorization.IATStreetAddress`. |
| `SecondBankAccountNumber` | `Public Property SecondBankAccountNumber As String` | A secondary bank account number used for confirmation/re-entry during account entry or change.* |
| `DebitCard` | `Public ReadOnly Property DebitCard As clsDebitCardEnrollmentRequest` | The associated debit-card enrollment request; retrieves an existing request when `PaymentAuthorization` is a debit-card authorization with a populated `EnrollRequestSeqNum`, otherwise creates a new one via `clsDebitCardEnrollmentRequest.NewDebitCardEnrollmentRequest`. Added as a child object. |
| `PaymentAuthorization` | `Public ReadOnly Property PaymentAuthorization As clsEFTAuthorization` | The underlying `clsEFTAuthorization` child object that backs most bank-account and IAT properties on this class. |
| `BankAccountTypeDescription` | `Public ReadOnly Property BankAccountTypeDescription As String` | Localized description ("Checking"/"Savings") for the bank account type, resolved from `Resources.Business_Payment_EFT`. |
| `PaymentPreferenceTypeDescription` | `Public ReadOnly Property PaymentPreferenceTypeDescription As String` | Localized description of `PaymentPreferenceType` ("Check"/"Debit card"/"Direct deposit"), resolved from `Resources.Business_Payment_EFT`. |
| `NewPaymentPreference` | `Public Shared Function NewPaymentPreference(inDataPortal As IDataPortalInfo, inPayee As iPayee, inPaymentPreferenceType As iPaymentPreference.PaymentPreferenceTypes, inIsSAIFUser As Boolean, inMaskBankNumbers As Boolean, inBankValidatorXMLDocument As XDocument) As clsPaymentPreference` | Creates a new, unsaved `clsPaymentPreference` for the given payee and preference type. |
| `GetPaymentPreference` | `Public Shared Function GetPaymentPreference(inDataPortal As IDataPortalInfo, inPayee As iPayee, inIsUserSAIFEmployee As Boolean, inMaskBankNumbers As Boolean, inBankValidatorXMLDocument As XDocument) As clsPaymentPreference` | Retrieves the existing payment preference for the given payee. |
| `IsValidPayee` | `Public Function IsValidPayee() As Boolean` | Returns true when `Payee.Name` is populated and is not the "empty payee" placeholder message (`clsEligPayeeClaimCollection.MSG_EMPTY_PAYEE`). |
| `IsValid` | `Public Overrides ReadOnly Property IsValid As Boolean` | Triggers bank-number validation when needed, validates the `PaymentAuthorization` and `DebitCard` child objects, and returns true only when no validation errors are outstanding. |
| `IsDirty` | `Public Overrides ReadOnly Property IsDirty As Boolean` | True when the base object or either the `PaymentAuthorization` or `DebitCard` child object has unsaved changes. |
| `ConvertToPaymentPreferenceType` | `Public Shared Function ConvertToPaymentPreferenceType(inPaymentPreferenceTypeCode As String) As iPaymentPreference.PaymentPreferenceTypes` | Converts a short payment-preference code (`CHK`/`DD`/`DC`) to the corresponding `iPaymentPreference.PaymentPreferenceTypes` value. |
| `Save` | `Public Overrides Function Save() As Boolean` | Persists the payment preference and its child objects (`PaymentAuthorization`, `DebitCard`) through the data portal. |

## Inherited public members

| Member | Signature | Purpose |
| --- | --- | --- |
| `DataPortalInfo` (via `Criteria`) | `Public Property DataPortalInfo() As IDataPortalInfo` implemented from `IBusinessCriteria` on the nested `Criteria` class | Carries the data-portal connection/context information used for retrieve/insert/update/delete operations.* |

## Behavioral notes
- `AllowDebitCard` governs whether the calling application layer presents the debit-card payment option; exact eligibility condition not traced to source.**
- The full `iPaymentPreference` interface contract members are defined in `SAIF.BOF.Business.Payment`; all contract members are implemented here.*

## Constraints and usage notes
- Scope is claimants; use `clsProviderPaymentPreference` for medical/service providers.
- The `iPaymentPreference` contract is defined in `SAIF.BOF.Business.Payment`; breaking changes there directly impact this class.

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