---
title: SAIF.Business.Policy.Affiliate operations and processes
summary: Business and technical operations supported by SAIF.Business.Policy.Affiliate.
status: draft
owner: Technical Writer
last_reviewed: 2026-07-31
library: SAIF.Business.Policy.Affiliate
reference_type: package
---

# SAIF.Business.Policy.Affiliate operations and processes

This page catalogs the reusable operations implemented by `SAIF.Business.Policy.Affiliate`. Detailed step-by-step behavior lives in the operation pages under `operations/`.

## Operation catalog
| Operation | Intent | Trigger | Inputs | Outputs | Rules | Tables | SQL |
| --- | --- | --- | --- | --- | --- | --- | --- |
| [Retrieve an affiliate by SSN](operations/retrieve-an-affiliate-by-ssn.md) | Load one affiliate person record. | A caller supplies an affiliate SSN and needs the standalone person record. | `IDataPortalInfo`, affiliate SSN | `clsAffiliate` | [BR-AFF-001](business-rules.md#br-aff-001-missing-key-retrieval-returns-a-default-object), [BR-AFF-002](business-rules.md#br-aff-002-affiliate-display-names-omit-empty-parts), [BR-AFF-018](business-rules.md#br-aff-018-the-library-exposes-retrieve-only-data-access), [BR-AFF-020](business-rules.md#br-aff-020-stale-cached-affiliate-objects-are-reloaded-on-access) | [AFFILIATE](database-tables.md#affiliate) | [SQL-001](sql/SQL-001-saif-business-policy-affiliate.md) |
| [Format an affiliate display name](operations/format-an-affiliate-display-name.md) | Build an affiliate display name. | A caller needs the affiliate name rendered for display or comparison. | `clsAffiliate` state | Formatted name string | [BR-AFF-002](business-rules.md#br-aff-002-affiliate-display-names-omit-empty-parts) | [AFFILIATE](database-tables.md#affiliate) | N/A |
| [Retrieve an interested party](operations/retrieve-an-interested-party.md) | Load one interested-party association. | A caller needs one interested-party association identified by policy, affiliate, and effective date. | `IDataPortalInfo`, affiliate SSN, policy number, effective date | `clsInterestedParty` | [BR-AFF-001](business-rules.md#br-aff-001-missing-key-retrieval-returns-a-default-object), [BR-AFF-003](business-rules.md#br-aff-003-interested-party-queries-require-type-code-1), [BR-AFF-004](business-rules.md#br-aff-004-affiliate-associations-join-to-people-by-ssn), [BR-AFF-016](business-rules.md#br-aff-016-code-descriptions-come-from-framework-code-collections), [BR-AFF-017](business-rules.md#br-aff-017-policy-affiliate-identity-is-a-three-part-key), [BR-AFF-018](business-rules.md#br-aff-018-the-library-exposes-retrieve-only-data-access), [BR-AFF-019](business-rules.md#br-aff-019-flag-columns-convert-through-framework-boolean-helpers) | [AFFILIATE](database-tables.md#affiliate), [BUSINESS_AFFILIATE](database-tables.md#business_affiliate) | [SQL-004](sql/SQL-004-saif-business-policy-affiliate.md) |
| [Retrieve interested parties for a policy](operations/retrieve-interested-parties-for-a-policy.md) | Load interested parties for a policy window. | A caller requests all interested parties that overlap a policy date window. | `IDataPortalInfo`, policy number, optional start date, optional end date | `clsInterestedPartyCollection` | [BR-AFF-003](business-rules.md#br-aff-003-interested-party-queries-require-type-code-1), [BR-AFF-005](business-rules.md#br-aff-005-association-windows-use-overlap-semantics), [BR-AFF-006](business-rules.md#br-aff-006-association-lists-sort-by-person-name), [BR-AFF-007](business-rules.md#br-aff-007-transactional-loads-reuse-shared-code-collections) | [AFFILIATE](database-tables.md#affiliate), [BUSINESS_AFFILIATE](database-tables.md#business_affiliate) | [SQL-005](sql/SQL-005-saif-business-policy-affiliate.md) |
| [Filter interested parties active on a date](operations/filter-interested-parties-active-on-a-date.md) | Filter interested parties by as-of date. | A caller narrows an interested-party sequence to those active on a given date. | Interested-party sequence, as-of date | Filtered `IEnumerable(Of clsInterestedParty)` | [BR-AFF-008](business-rules.md#br-aff-008-interested-party-active-filters-honor-effective-and-cancel-dates) | N/A | N/A |
| [Retrieve a policy preferred worker](operations/retrieve-a-policy-preferred-worker.md) | Load one preferred-worker association. | A caller needs one preferred-worker association identified by policy, affiliate, and effective date. | `IDataPortalInfo`, affiliate SSN, policy number, effective date | `clsPolicyPreferredWorker` | [BR-AFF-001](business-rules.md#br-aff-001-missing-key-retrieval-returns-a-default-object), [BR-AFF-004](business-rules.md#br-aff-004-affiliate-associations-join-to-people-by-ssn), [BR-AFF-009](business-rules.md#br-aff-009-preferred-worker-queries-require-type-code-2), [BR-AFF-017](business-rules.md#br-aff-017-policy-affiliate-identity-is-a-three-part-key) | [AFFILIATE](database-tables.md#affiliate), [BUSINESS_AFFILIATE](database-tables.md#business_affiliate) | [SQL-006](sql/SQL-006-saif-business-policy-affiliate.md) |
| [Load preferred-worker eligibility](operations/load-preferred-worker-eligibility.md) | Load the earliest qualifying eligibility row. | A preferred-worker eligibility property is read for the first time and the cached eligibility fields are empty. | Affiliate SSN, effective date, cancel date from the current preferred-worker object | Preferred-worker identifier, contract type, and eligibility dates | [BR-AFF-010](business-rules.md#br-aff-010-eligibility-rows-must-cover-both-effective-and-cancel-dates), [BR-AFF-011](business-rules.md#br-aff-011-earliest-qualifying-eligibility-row-wins), [BR-AFF-012](business-rules.md#br-aff-012-missing-eligibility-returns-sentinel-values) | [PREFERRED_WORKER](database-tables.md#preferred_worker) | [SQL-007](sql/SQL-007-saif-business-policy-affiliate.md) |
| [Retrieve preferred workers for a policy](operations/retrieve-preferred-workers-for-a-policy.md) | Load preferred workers for a policy window. | A caller requests all preferred workers that overlap a policy date window. | `IDataPortalInfo`, policy number, optional start date, optional end date | `clsPolicyPreferredWorkerCollection` | [BR-AFF-005](business-rules.md#br-aff-005-association-windows-use-overlap-semantics), [BR-AFF-006](business-rules.md#br-aff-006-association-lists-sort-by-person-name), [BR-AFF-009](business-rules.md#br-aff-009-preferred-worker-queries-require-type-code-2) | [AFFILIATE](database-tables.md#affiliate), [BUSINESS_AFFILIATE](database-tables.md#business_affiliate) | [SQL-008](sql/SQL-008-saif-business-policy-affiliate.md) |
| [Retrieve a corporate officer exemption](operations/retrieve-a-corporate-officer-exemption.md) | Load one corporate officer exemption. | A caller needs one corporate officer exemption by sequence number. | `IDataPortalInfo`, exemption sequence number | `clsCorporateOfficerExemption` | [BR-AFF-001](business-rules.md#br-aff-001-missing-key-retrieval-returns-a-default-object), [BR-AFF-018](business-rules.md#br-aff-018-the-library-exposes-retrieve-only-data-access) | [CORP_OFFICER_EXEMPTION](database-tables.md#corp_officer_exemption) | [SQL-002](sql/SQL-002-saif-business-policy-affiliate.md) |
| [Retrieve corporate officer exemptions for a policy](operations/retrieve-corporate-officer-exemptions-for-a-policy.md) | Load corporate officer exemptions for one policy. | A caller requests every corporate officer exemption attached to one policy. | `IDataPortalInfo`, policy number | `clsCorporateOfficerExemptionCollection` | [BR-AFF-013](business-rules.md#br-aff-013-affiliate-ssn-identifies-single-officer-exemptions), [BR-AFF-018](business-rules.md#br-aff-018-the-library-exposes-retrieve-only-data-access) | [CORP_OFFICER_EXEMPTION](database-tables.md#corp_officer_exemption) | [SQL-003](sql/SQL-003-saif-business-policy-affiliate.md) |
| [Classify a corporate officer exemption](operations/classify-a-corporate-officer-exemption.md) | Classify exemption scope and officer linkage. | A caller inspects an exemption to determine whether it is person-specific, active, or associated with a retrievable affiliate person. | `clsCorporateOfficerExemption` state | Boolean flags, optional `clsAffiliate`, and reason-description text | [BR-AFF-013](business-rules.md#br-aff-013-affiliate-ssn-identifies-single-officer-exemptions), [BR-AFF-014](business-rules.md#br-aff-014-isactivecorporateofficer-requires-an-expiration-date), [BR-AFF-015](business-rules.md#br-aff-015-corporate-officer-details-are-loaded-only-for-single-officer-exemptions), [BR-AFF-016](business-rules.md#br-aff-016-code-descriptions-come-from-framework-code-collections) | [CORP_OFFICER_EXEMPTION](database-tables.md#corp_officer_exemption) | [SQL-001](sql/SQL-001-saif-business-policy-affiliate.md), [SQL-002](sql/SQL-002-saif-business-policy-affiliate.md) |
| [Resolve a code description](operations/resolve-a-code-description.md) | Resolve a framework code description. | A caller reads an affiliate title, insured-code, or exemption-reason description property. | Portal context plus stored code value on the current object | Description string from the framework code collection | [BR-AFF-016](business-rules.md#br-aff-016-code-descriptions-come-from-framework-code-collections) | [AFFILIATE_TITLE_CODE](database-tables.md#affiliate_title_code), [INSURED_CODE](database-tables.md#insured_code), [EXEMPT_REASON_CODE](database-tables.md#exempt_reason_code) | N/A |
| [Compare and locate affiliate associations](operations/compare-and-locate-affiliate-associations.md) | Compare identities and scan collections. | A caller checks equality, tests collection membership, removes an item, or formats an identity string for affiliate-related business objects. | Affiliate or association objects plus comparison keys | Boolean result, located item, removal, hash code, or display text | [BR-AFF-017](business-rules.md#br-aff-017-policy-affiliate-identity-is-a-three-part-key), [BR-AFF-020](business-rules.md#br-aff-020-stale-cached-affiliate-objects-are-reloaded-on-access) | [AFFILIATE](database-tables.md#affiliate), [BUSINESS_AFFILIATE](database-tables.md#business_affiliate) | [SQL-001](sql/SQL-001-saif-business-policy-affiliate.md) |

## Process flow diagram
The following diagram shows how callers move through the library's major retrieval paths.

```mermaid
flowchart TD
  Caller[Caller] --> Choice{Requested data}
  Choice --> Aff[Affiliate person]
  Choice --> Assoc[Interested party or preferred worker]
  Choice --> Exempt[Corporate officer exemption]
  Assoc --> Join[Joined BUSINESS_AFFILIATE + AFFILIATE SQL]
  Assoc --> Elig[Optional lazy PREFERRED_WORKER lookup]
  Exempt --> RS[Result-set retrieval]
  Aff --> Oracle[(Oracle)]
  Join --> Oracle
  Elig --> Oracle
  RS --> Oracle
```

## Inherited operations and processes

### From `clsBusinessBase` (`SAIF.Framework.Core`)

| Operation | Intent | Provided by | Origin | Embedded in |
| --- | --- | --- | --- | --- |
| Edit lifecycle | Supplies begin-edit, cancel-edit, and apply-edit behavior for BOF business objects.* | `clsBusinessBase` | `SAIF.Framework.Core` | [Retrieve an affiliate by SSN](operations/retrieve-an-affiliate-by-ssn.md) |
| Rule evaluation | Exposes broken-rule and validation behavior to BOF business objects.* | `clsBusinessBase` | `SAIF.Framework.Core` | [Compare and locate affiliate associations](operations/compare-and-locate-affiliate-associations.md) |

### From `clsBusinessCollectionBase` (`SAIF.Framework.Core`)

| Operation | Intent | Provided by | Origin | Embedded in |
| --- | --- | --- | --- | --- |
| Collection traversal | Supplies current-item traversal behavior across BOF collections.* | `clsBusinessCollectionBase` | `SAIF.Framework.Core` | [Retrieve interested parties for a policy](operations/retrieve-interested-parties-for-a-policy.md) |
| Collection validation surface | Exposes collection-level validation state to data-binding consumers.* | `clsBusinessCollectionBase` | `SAIF.Framework.Core` | [Retrieve preferred workers for a policy](operations/retrieve-preferred-workers-for-a-policy.md) |

## Database interactions

| Operation | SQL | Tables | Type |
| --- | --- | --- | --- |
| [Retrieve an affiliate by SSN](operations/retrieve-an-affiliate-by-ssn.md) | Load one affiliate person record. | [AFFILIATE](database-tables.md#affiliate) | Read |
| [Retrieve an interested party](operations/retrieve-an-interested-party.md) | Load one interested-party association. | [BUSINESS_AFFILIATE](database-tables.md#business_affiliate), [AFFILIATE](database-tables.md#affiliate) | Read |
| [Retrieve interested parties for a policy](operations/retrieve-interested-parties-for-a-policy.md) | Load interested parties for a policy window. | [BUSINESS_AFFILIATE](database-tables.md#business_affiliate), [AFFILIATE](database-tables.md#affiliate) | Read |
| [Retrieve a policy preferred worker](operations/retrieve-a-policy-preferred-worker.md) | Load one preferred-worker association. | [BUSINESS_AFFILIATE](database-tables.md#business_affiliate), [AFFILIATE](database-tables.md#affiliate) | Read |
| [Load preferred-worker eligibility](operations/load-preferred-worker-eligibility.md) | Load the earliest qualifying eligibility row. | [PREFERRED_WORKER](database-tables.md#preferred_worker) | Read |
| [Retrieve preferred workers for a policy](operations/retrieve-preferred-workers-for-a-policy.md) | Load preferred workers for a policy window. | [BUSINESS_AFFILIATE](database-tables.md#business_affiliate), [AFFILIATE](database-tables.md#affiliate) | Read |
| [Retrieve a corporate officer exemption](operations/retrieve-a-corporate-officer-exemption.md) | Load one corporate officer exemption. | [CORP_OFFICER_EXEMPTION](database-tables.md#corp_officer_exemption) | Read |
| [Retrieve corporate officer exemptions for a policy](operations/retrieve-corporate-officer-exemptions-for-a-policy.md) | Load corporate officer exemptions for one policy. | [CORP_OFFICER_EXEMPTION](database-tables.md#corp_officer_exemption) | Read |

## Failure and edge-case behavior
- Missing keyed rows return default-initialized business objects instead of raising not-found exceptions.
- Preferred-worker eligibility properties cache sentinel values when no covering eligibility row exists.
- All criteria classes reject persistence-oriented SQL property access, so no operation in this library can save changes back to the database.

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

## Sources
- `Business\SAIF.Business.Policy.Affiliate\clsAffiliate.vb`
- `Business\SAIF.Business.Policy.Affiliate\clsPolicyAffiliateBase.vb`
- `Business\SAIF.Business.Policy.Affiliate\clsPolicyAffiliateBaseCollection.vb`
- `Business\SAIF.Business.Policy.Affiliate\clsInterestedParty.vb`
- `Business\SAIF.Business.Policy.Affiliate\clsInterestedPartyCollection.vb`
- `Business\SAIF.Business.Policy.Affiliate\clsPolicyPreferredWorker.vb`
- `Business\SAIF.Business.Policy.Affiliate\clsPolicyPreferredWorkerCollection.vb`
- `Business\SAIF.Business.Policy.Affiliate\clsCorporateOfficerExemption.vb`
- `Business\SAIF.Business.Policy.Affiliate\clsCorporateOfficerExemptionCollection.vb`
