---
title: Classify a corporate officer exemption
summary: Operation details for Classify a corporate officer exemption.
status: draft
owner: Technical Writer
last_reviewed: 2026-07-31
library: SAIF.Business.Policy.Affiliate
reference_type: package
operation_id: OP-011
trigger: A caller inspects an exemption to determine whether it is person-specific, active, or associated with a retrievable affiliate person.
---

# Classify a corporate officer exemption

This operation documents how `clsCorporateOfficerExemption` read-only properties` fulfills the policy-affiliate behavior described for `SAIF.Business.Policy.Affiliate`.

| Field | Value |
| --- | --- |
| **Operation ID** | OP-011 |
| **Trigger** | A caller inspects an exemption to determine whether it is person-specific, active, or associated with a retrievable affiliate person. |
| **Inputs** | `clsCorporateOfficerExemption` state |
| **Outputs** | Boolean flags, optional `clsAffiliate`, and reason-description text |
| **Primary components** | `clsCorporateOfficerExemption` read-only properties |
| **Entry point** | `Business\SAIF.Business.Policy.Affiliate\clsCorporateOfficerExemption.vb` |

## Steps

1. Determine whether the exemption targets one officer by checking whether `AffiliateSSN` is populated ([BR-AFF-013](../business-rules.md#br-aff-013-affiliate-ssn-identifies-single-officer-exemptions)).
2. Report `IsActiveCorporateOfficer` directly from the presence of an expiration date ([BR-AFF-014](../business-rules.md#br-aff-014-isactivecorporateofficer-requires-an-expiration-date)).
3. Only when the exemption names a specific officer, call the affiliate retrieve path to load the related person object ([BR-AFF-015](../business-rules.md#br-aff-015-corporate-officer-details-are-loaded-only-for-single-officer-exemptions), [SQL-001](../sql/SQL-001-saif-business-policy-affiliate.md)).
4. Resolve the exemption-reason description through the framework code collection when the description property is read ([BR-AFF-016](../business-rules.md#br-aff-016-code-descriptions-come-from-framework-code-collections)).

## Process flow
The following diagram shows the independent classification checks and the conditional lazy officer lookup.

```mermaid
flowchart TD
  Start(["Caller inspects exemption state"]) --> SingleCheck{"AffiliateSSN populated?"}
  SingleCheck -->|Yes| Single["IsSingleCorporateOfficerExemption = True"]
  SingleCheck -->|No| Policy["IsSingleCorporateOfficerExemption = False"]
  Single --> ExpCheck{"ExpirationDate populated?"}
  Policy --> ExpCheck
  ExpCheck -->|Yes| Active["IsActiveCorporateOfficer = True"]
  ExpCheck -->|No| Inactive["IsActiveCorporateOfficer = False"]
  Active --> OfficerCheck{"Single-officer exemption<br>and CorporateOfficer read?"}
  Inactive --> OfficerCheck
  OfficerCheck -->|Yes| Retrieve["Call affiliate retrieve path<br>SQL-001 to load clsAffiliate"]
  OfficerCheck -->|No| Nothing["CorporateOfficer stays Nothing"]
  Retrieve --> Desc["Resolve exemption-reason description<br>via framework code collection when read"]
  Nothing --> Desc
  Desc --> Result(["Return classification state to caller"])
```

## Failure and edge-case behavior

- A policy-level exemption leaves `CorporateOfficer` as `Nothing`.

## Related documentation
- [Operations and processes](../operations-processes.md)
- [Business rules](../business-rules.md)
- [SQL catalog](../sql/index.md)
- [Database tables](../database-tables.md)

## Sources
- `Business\SAIF.Business.Policy.Affiliate\clsCorporateOfficerExemption.vb`
