---
title: SAIF.Business.Payment business rules
summary: Enumerated business rules with per-rule trigger, enforcement, and outcomes.
status: draft
owner: <owner>
last_reviewed: 2026-07-24
library: SAIF.Business.Payment
reference_type: package
---

# SAIF.Business.Payment business rules

This page captures business rules enforced by this library. `SAIF.Business.Payment` contains substantive eligibility logic in `clsEligPayeeClaimCollection.getEligClaimPayees`, which evaluates worker and beneficiary eligibility through explicit conditional checks. The two contract-level inferred rules ([BR-PAY-01](#br-pay-01-eligible-payee-record-requirement), [BR-PAY-02](#br-pay-02-conditional-debit-card-allowance)) are retained, and the implemented eligibility rules from `clsEligPayeeClaimCollection.vb` are documented below as [BR-PAY-03](#br-pay-03-dead-worker-exclusion-from-eligible-payee-list), [BR-PAY-04](#br-pay-04-child-under-26-eligible-as-beneficiary-payee), [BR-PAY-05](#br-pay-05-invaliddisabled-child-over-26-exception), [BR-PAY-06](#br-pay-06-non-child-beneficiary-eligible-until-award-expiry), and [BR-PAY-07](#br-pay-07-include-non-eligible-payees-override).

## BR-PAY-01: Eligible-payee record requirement

| Field | Value |
| --- | --- |
| **Statement** | A payee is only eligible for claim payment if a corresponding `clsEligPayeeClaim` record exists and is active for that claim.** |
| **Trigger** | Payment processing code evaluates payee eligibility for a given claim.** |
| **Enforcement** | The existence and state of a `clsEligPayeeClaim` object for the claim; exact eligibility criteria (status and date fields) require deeper inspection of `clsEligPayeeClaim.vb` properties and `After*` validation logic, which were not fully traced.** |
| **Outcome** | Payees without a valid `clsEligPayeeClaim` record are not eligible for claim payment.** |
| **Source** | `Business\SAIF.Business.Payment\clsEligPayeeClaim.vb` |

---

## BR-PAY-02: Conditional debit-card allowance

| Field | Value |
| --- | --- |
| **Statement** | Debit-card payment is conditionally allowed per payee or payment preference.** |
| **Trigger** | Payment channel selection; evaluation of `iPaymentPreference.AllowDebitCard`.** |
| **Enforcement** | The `AllowDebitCard` property on `iPaymentPreference`; the condition governing this flag is defined by the implementing class outside this library.** |
| **Outcome** | When `AllowDebitCard` is false or unset, debit-card channel is not offered to the payee.** |
| **Source** | `Business\SAIF.Business.Payment\IPaymentPreference.vb` |

---

## BR-PAY-03: Dead worker exclusion from eligible payee list

| Field | Value |
| --- | --- |
| **Statement** | A worker who has a recorded death date is excluded from the eligible payee list unless the caller explicitly requests inclusion of non-eligible payees. |
| **Trigger** | `getEligClaimPayees` is called with `inIncludeNonEligiblePayees = False` (the default) and the worker record has `DeathDate > Date.MinValue`. |
| **Enforcement** | `clsEligPayeeClaimCollection.getEligClaimPayees`: `If l_Worker.DeathDate > Date.MinValue And Not inIncludeNonEligiblePayees` — the worker payee record is not added to the collection. |
| **Outcome** | Deceased workers do not appear as eligible payees on claims unless the override flag is set. |
| **Source** | `Business\SAIF.Business.Payment\clsEligPayeeClaimCollection.vb` |

---

## BR-PAY-04: Child under 26 eligible as beneficiary payee

| Field | Value |
| --- | --- |
| **Statement** | A beneficiary with a child relationship (`RelationshipToWorkerCode = "2"`) is eligible as a payee if their birth date plus 26 years is on or after today. |
| **Trigger** | `getEligClaimPayees` iterates the beneficiary list and the beneficiary `RelationshipToWorkerCode` is `"2"`. |
| **Enforcement** | `clsEligPayeeClaimCollection.getEligClaimPayees`: `If l_Bene.BirthDate.AddYears(26) >= Today Then l_add = True`. |
| **Outcome** | Child beneficiaries under age 26 are included in the eligible payee collection. |
| **Source** | `Business\SAIF.Business.Payment\clsEligPayeeClaimCollection.vb` |

---

## BR-PAY-05: Invalid/disabled child over 26 exception

| Field | Value |
| --- | --- |
| **Statement** | A child beneficiary age 26 or older is still eligible as a payee if they are flagged as an invalid or disabled child (`InvalidCode = "Y"`) and their award eligibility has not expired (`AwardEligExpDate > Now`). |
| **Trigger** | `getEligClaimPayees` iterates the beneficiary list, the beneficiary `RelationshipToWorkerCode` is `"2"`, and `BirthDate.AddYears(26) < Today`. |
| **Enforcement** | `clsEligPayeeClaimCollection.getEligClaimPayees`: `If l_Bene.InvalidCode = "Y" And l_Bene.AwardEligExpDate > Now Then l_add = True`. |
| **Outcome** | Disabled children over 26 whose awards are active remain eligible payees. |
| **Source** | `Business\SAIF.Business.Payment\clsEligPayeeClaimCollection.vb` |

---

## BR-PAY-06: Non-child beneficiary eligible until award expiry

| Field | Value |
| --- | --- |
| **Statement** | A beneficiary who is not a child (`RelationshipToWorkerCode <> "2"`) is eligible as a payee while their award eligibility date is in the future. |
| **Trigger** | `getEligClaimPayees` iterates the beneficiary list and the beneficiary `RelationshipToWorkerCode` is not `"2"`. |
| **Enforcement** | `clsEligPayeeClaimCollection.getEligClaimPayees`: `If l_Bene.AwardEligExpDate > Now Then l_add = True`. |
| **Outcome** | Spouses and other non-child beneficiaries with active awards are included in the eligible payee collection. |
| **Source** | `Business\SAIF.Business.Payment\clsEligPayeeClaimCollection.vb` |

---

## BR-PAY-07: Include non-eligible payees override

| Field | Value |
| --- | --- |
| **Statement** | When the `inIncludeNonEligiblePayees` flag is `True`, all workers and beneficiaries are added to the payee collection regardless of their eligibility status. |
| **Trigger** | `getEligClaimPayees` is called with `inIncludeNonEligiblePayees = True` (added 2012-11-05). |
| **Enforcement** | `clsEligPayeeClaimCollection.getEligClaimPayees`: `If l_add Or inIncludeNonEligiblePayees Then` — the flag short-circuits all eligibility checks for beneficiaries; dead workers are similarly included when this flag is `True`. |
| **Outcome** | The returned collection contains all workers and beneficiaries, including those who would otherwise be filtered by [BR-PAY-03](#br-pay-03-dead-worker-exclusion-from-eligible-payee-list), [BR-PAY-04](#br-pay-04-child-under-26-eligible-as-beneficiary-payee), [BR-PAY-05](#br-pay-05-invaliddisabled-child-over-26-exception), and [BR-PAY-06](#br-pay-06-non-child-beneficiary-eligible-until-award-expiry). |
| **Source** | `Business\SAIF.Business.Payment\clsEligPayeeClaimCollection.vb` |

---

## Notes
- [BR-PAY-01](#br-pay-01-eligible-payee-record-requirement) and [BR-PAY-02](#br-pay-02-conditional-debit-card-allowance) remain inferred or unconfirmed at the contract level; the implementing logic resides in consuming libraries (primarily `SAIF.Business.Payment.EFT`).*
- [BR-PAY-03](#br-pay-03-dead-worker-exclusion-from-eligible-payee-list), [BR-PAY-04](#br-pay-04-child-under-26-eligible-as-beneficiary-payee), [BR-PAY-05](#br-pay-05-invaliddisabled-child-over-26-exception), [BR-PAY-06](#br-pay-06-non-child-beneficiary-eligible-until-award-expiry), and [BR-PAY-07](#br-pay-07-include-non-eligible-payees-override) are directly implemented in `clsEligPayeeClaimCollection.getEligClaimPayees` and verified from source.

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Operations and processes](operations-processes.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. Statements marked with `**` could not be confirmed; treat
> as unknown until verified.

## Sources
- `Business\SAIF.Business.Payment\clsEligPayeeClaim.vb`
- `Business\SAIF.Business.Payment\clsEligPayeeClaimCollection.vb`
- `Business\SAIF.Business.Payment\IPaymentPreference.vb`
