---
title: SAIF.Business.Policy.Group operations and processes
summary: Operation catalog and process hub for SAIF.Business.Policy.Group.
status: draft
owner: Technical Writer
last_reviewed: 2026-07-31
library: SAIF.Business.Policy.Group
reference_type: package
---

# SAIF.Business.Policy.Group operations and processes

This page is the operation catalog and cross-operation hub for `SAIF.Business.Policy.Group`. The library exposes ten documented operations spanning group retrieval, group persistence, chapter and contact lookup, discount-factor supply, underwriting-eligibility retrieval, significant-class maintenance, and policy-period group membership. Detailed step-by-step logic lives in the per-operation pages under `operations/`.

## Operation catalog

| Operation | Intent | Trigger | Inputs | Outputs | Rules | Tables | SQL |
| --- | --- | --- | --- | --- | --- | --- | --- |
| [Retrieve a group association](operations/retrieve-group-association.md) | Retrieve one group master record by group code. | Caller needs a single group's master record | `IDataPortalInfo`, group code | A populated `clsGroupAssociation` marked old. | [BR-001](business-rules.md#br-001-group-association-code-is-required), [BR-002](business-rules.md#br-002-group-expiration-is-date-effective), [BR-003](business-rules.md#br-003-group-type-derives-from-stored-code) | [GROUP_ASSOCIATION](database-tables.md#group_association) | [SQL-021](sql/SQL-021-saif-business-policy-group.md) |
| [Retrieve all group associations](operations/retrieve-all-group-associations.md) | Retrieve the full group catalog for in-memory filtering. | Caller needs the full group catalog for selection or filtering | — | A populated `clsGroupAssociationCollection`. | [BR-002](business-rules.md#br-002-group-expiration-is-date-effective), [BR-003](business-rules.md#br-003-group-type-derives-from-stored-code), [BR-004](business-rules.md#br-004-salesplan-excludes-listed-plan-codes) | [GROUP_ASSOCIATION](database-tables.md#group_association) | [SQL-022](sql/SQL-022-saif-business-policy-group.md) |
| [Persist group associations (insert / update / delete)](operations/persist-group-associations.md) | Insert, update, or delete group master rows through BOF lifecycle hooks. | Caller saves a group association or the collection | — | Rows persisted or generic/contention errors added to the object or collection. | [BR-001](business-rules.md#br-001-group-association-code-is-required), [BR-009](business-rules.md#br-009-insert-must-affect-exactly-one-row), [BR-010](business-rules.md#br-010-update-must-affect-exactly-one-row), [BR-011](business-rules.md#br-011-delete-must-affect-exactly-one-row), [BR-012](business-rules.md#br-012-collection-persistence-reports-generic-failure-messages), [BR-021](business-rules.md#br-021-writes-stamp-update-date-and-user) | [DUAL](database-tables.md#dual), [GROUP_ASSOCIATION](database-tables.md#group_association) | [SQL-002](sql/SQL-002-saif-business-policy-group.md), [SQL-003](sql/SQL-003-saif-business-policy-group.md), [SQL-010](sql/SQL-010-saif-business-policy-group.md), [SQL-011](sql/SQL-011-saif-business-policy-group.md), [SQL-030](sql/SQL-030-saif-business-policy-group.md), [SQL-031](sql/SQL-031-saif-business-policy-group.md), [SQL-038](sql/SQL-038-saif-business-policy-group.md), [SQL-039](sql/SQL-039-saif-business-policy-group.md) |
| [Load a group's chapters](operations/load-group-chapters.md) | Retrieve a groups chapters and seed a placeholder when none exist. | Caller reads `clsGroupAssociation.Chapters` or requests chapters directly | — | A `clsChapterCollection`, or a placeholder chapter when no rows exist. | [BR-005](business-rules.md#br-005-group-exposes-a-placeholder-chapter-when-none-exist), [BR-006](business-rules.md#br-006-chapter-activity-is-bounded-by-effective-dates), [BR-023](business-rules.md#br-023-chapters-and-contacts-load-lazily) | [GROUP_CHAPTER](database-tables.md#group_chapter) | [SQL-018](sql/SQL-018-saif-business-policy-group.md) |
| [Create and persist a chapter](operations/create-and-retrieve-chapter.md) | Create a chapter in memory or retrieve one chapter as of a date. |  | — | A seeded chapter object or a retrieved effective chapter row. | [BR-006](business-rules.md#br-006-chapter-activity-is-bounded-by-effective-dates), [BR-007](business-rules.md#br-007-new-chapter-seeds-key-values-and-starts-clean), [BR-008](business-rules.md#br-008-chapter-retrieval-is-as-of-date-effective), [BR-023](business-rules.md#br-023-chapters-and-contacts-load-lazily) | [GROUP_CHAPTER](database-tables.md#group_chapter) | [SQL-017](sql/SQL-017-saif-business-policy-group.md) |
| [Retrieve a group contact](operations/retrieve-group-contact.md) | Retrieve the contact for a group or chapter. |  | — | A populated `clsContact`. | [BR-023](business-rules.md#br-023-chapters-and-contacts-load-lazily) | [GROUP_ASSOCIATION_CONTACT](database-tables.md#group_association_contact) | [SQL-020](sql/SQL-020-saif-business-policy-group.md) |
| [Supply the group discount factor to rating](operations/supply-group-discount-factor.md) | Supply a time-effective group discount factor to rating consumers. | The rating engine requests the group adjustment factor for a policy | `iAdjustedRateProvider` | Either the persisted group discount or `NonApplicableAdjustedRateFactor`. | [BR-013](business-rules.md#br-013-group-discount-code-is-required), [BR-014](business-rules.md#br-014-discount-factor-returns-non-applicable-when-invalid), [BR-015](business-rules.md#br-015-pending-flag-marks-a-tentative-discount), [BR-021](business-rules.md#br-021-writes-stamp-update-date-and-user) | [DUAL](database-tables.md#dual), [GROUP_ASSOCIATION_DETAIL](database-tables.md#group_association_detail) | [SQL-004](sql/SQL-004-saif-business-policy-group.md), [SQL-012](sql/SQL-012-saif-business-policy-group.md), [SQL-023](sql/SQL-023-saif-business-policy-group.md), [SQL-024](sql/SQL-024-saif-business-policy-group.md), [SQL-032](sql/SQL-032-saif-business-policy-group.md), [SQL-040](sql/SQL-040-saif-business-policy-group.md) |
| [Evaluate group underwriting eligibility inputs](operations/evaluate-group-underwriting-eligibility.md) | Retrieve underwriting criteria and significant-class inputs for group eligibility evaluation. | Underwriting evaluates whether a policy qualifies for a group | — | Criteria flags, threshold values, and filtered significant classes. | [BR-016](business-rules.md#br-016-underwriting-flags-derive-from-stored-yn-values), [BR-017](business-rules.md#br-017-underwriting-criteria-requires-a-group-code), [BR-018](business-rules.md#br-018-significant-class-is-period-effective), [BR-019](business-rules.md#br-019-includeexclude-flag-drives-significance), [BR-020](business-rules.md#br-020-significant-class-filters-follow-significance), [BR-021](business-rules.md#br-021-writes-stamp-update-date-and-user) | [DUAL](database-tables.md#dual), [GROUP_UNDERWRITING_CRITERIA](database-tables.md#group_underwriting_criteria) | [SQL-005](sql/SQL-005-saif-business-policy-group.md), [SQL-013](sql/SQL-013-saif-business-policy-group.md), [SQL-025](sql/SQL-025-saif-business-policy-group.md), [SQL-033](sql/SQL-033-saif-business-policy-group.md), [SQL-041](sql/SQL-041-saif-business-policy-group.md) |
| [Maintain a group's significant classes](operations/maintain-significant-classes.md) | Retrieve, classify, insert, update, and delete significant-class rows and their control records. |  | — | Updated significant-class rows plus control-row state and row-count errors when writes fail. | [BR-009](business-rules.md#br-009-insert-must-affect-exactly-one-row), [BR-010](business-rules.md#br-010-update-must-affect-exactly-one-row), [BR-011](business-rules.md#br-011-delete-must-affect-exactly-one-row), [BR-012](business-rules.md#br-012-collection-persistence-reports-generic-failure-messages), [BR-018](business-rules.md#br-018-significant-class-is-period-effective), [BR-019](business-rules.md#br-019-includeexclude-flag-drives-significance), [BR-020](business-rules.md#br-020-significant-class-filters-follow-significance), [BR-021](business-rules.md#br-021-writes-stamp-update-date-and-user) | [DUAL](database-tables.md#dual), [GROUP_ELIGIBILITY_CTL](database-tables.md#group_eligibility_ctl), [GROUP_ELIGIBILITY_CLASS](database-tables.md#group_eligibility_class) | [SQL-001](sql/SQL-001-saif-business-policy-group.md), [SQL-007](sql/SQL-007-saif-business-policy-group.md), [SQL-008](sql/SQL-008-saif-business-policy-group.md), [SQL-009](sql/SQL-009-saif-business-policy-group.md), [SQL-015](sql/SQL-015-saif-business-policy-group.md), [SQL-016](sql/SQL-016-saif-business-policy-group.md), [SQL-019](sql/SQL-019-saif-business-policy-group.md), [SQL-027](sql/SQL-027-saif-business-policy-group.md), [SQL-028](sql/SQL-028-saif-business-policy-group.md), [SQL-029](sql/SQL-029-saif-business-policy-group.md), [SQL-035](sql/SQL-035-saif-business-policy-group.md), [SQL-036](sql/SQL-036-saif-business-policy-group.md), [SQL-037](sql/SQL-037-saif-business-policy-group.md), [SQL-043](sql/SQL-043-saif-business-policy-group.md), [SQL-044](sql/SQL-044-saif-business-policy-group.md) |
| [Link a policy period to a group](operations/link-policy-period-to-group.md) | Create, retrieve, update, or delete a policy-period group-membership row. | A policy period is enrolled in, changed within, or terminated from a group | — | A persisted or retrieved `clsPolicyPeriodGroupAssociation`. | [BR-009](business-rules.md#br-009-insert-must-affect-exactly-one-row), [BR-010](business-rules.md#br-010-update-must-affect-exactly-one-row), [BR-011](business-rules.md#br-011-delete-must-affect-exactly-one-row), [BR-021](business-rules.md#br-021-writes-stamp-update-date-and-user), [BR-022](business-rules.md#br-022-policy-period-group-membership-uses-a-composite-key) | [DUAL](database-tables.md#dual), [POLICY_PERIOD_GROUP_ASSOC](database-tables.md#policy_period_group_assoc) | [SQL-006](sql/SQL-006-saif-business-policy-group.md), [SQL-014](sql/SQL-014-saif-business-policy-group.md), [SQL-026](sql/SQL-026-saif-business-policy-group.md), [SQL-034](sql/SQL-034-saif-business-policy-group.md), [SQL-042](sql/SQL-042-saif-business-policy-group.md) |

## Process flow diagram

The following diagram shows the primary library-level flow between retrieval, evaluation, and persistence operations.

```mermaid
flowchart TD
    Start([Caller requests group data]) --> Retrieve[Retrieve group / chapter / contact]
    Retrieve --> Filter[Apply in-memory filters or typed accessors]
    Filter --> Discount[Supply discount factor]
    Filter --> UW[Retrieve underwriting criteria
and significant classes]
    Retrieve --> Persist[Persist group, significance,
or membership rows]
    UW --> Persist
    Persist --> End([Rows saved or BOF errors returned])
```

## Inherited operations and processes

Operations in this section originate from framework base classes and are inherited or delegated rather than implemented directly in this library.

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

| Operation | Intent | Provided by | Origin | Embedded in |
| --- | --- | --- | --- | --- |
| Manage edit session | Open, commit, or roll back an in-memory BOF edit scope.† | `clsBusinessBase` | `SAIF.Framework.Core` | [Persist group associations](operations/persist-group-associations.md), [Maintain a group's significant classes](operations/maintain-significant-classes.md), [Link a policy period to a group](operations/link-policy-period-to-group.md) |
| Evaluate business object rules | Execute shared BOF rules before callers depend on object validity.† | `clsBusinessBase` | `SAIF.Framework.Core` | [Persist group associations](operations/persist-group-associations.md), [Supply the group discount factor to rating](operations/supply-group-discount-factor.md), [Evaluate group underwriting eligibility inputs](operations/evaluate-group-underwriting-eligibility.md) |
| Execute data-portal request | Dispatch criteria SQL to Oracle and hydrate BOF objects.† | `clsBusinessBase` | `SAIF.Framework.Core` | [Retrieve a group association](operations/retrieve-group-association.md), [Load a group's chapters](operations/load-group-chapters.md), [Retrieve a group contact](operations/retrieve-group-contact.md) |

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

| Operation | Intent | Provided by | Origin | Embedded in |
| --- | --- | --- | --- | --- |
| Save managed business collection | Persist deleted items first, then active children, stopping at the first child failure.† | `clsBusinessCollectionBase` | `SAIF.Framework.Core` | [Persist group associations](operations/persist-group-associations.md), [Maintain a group's significant classes](operations/maintain-significant-classes.md) |
| Traverse collection state | Maintain collection position and expose collection-level validation state.† | `clsBusinessCollectionBase` | `SAIF.Framework.Core` | [Retrieve all group associations](operations/retrieve-all-group-associations.md), [Load a group's chapters](operations/load-group-chapters.md), [Maintain a group's significant classes](operations/maintain-significant-classes.md) |

## Database interactions

The following table summarizes which operations touch the database. Per-step SQL and table citations live in the operation detail pages.

| Operation | SQL | Tables | Type |
| --- | --- | --- | --- |
| [Retrieve a group association](operations/retrieve-group-association.md) | [SQL-021](sql/SQL-021-saif-business-policy-group.md) | [GROUP_ASSOCIATION](database-tables.md#group_association) | Read |
| [Retrieve all group associations](operations/retrieve-all-group-associations.md) | [SQL-022](sql/SQL-022-saif-business-policy-group.md) | [GROUP_ASSOCIATION](database-tables.md#group_association) | Read |
| [Persist group associations (insert / update / delete)](operations/persist-group-associations.md) | [SQL-002](sql/SQL-002-saif-business-policy-group.md), [SQL-003](sql/SQL-003-saif-business-policy-group.md), [SQL-010](sql/SQL-010-saif-business-policy-group.md), [SQL-011](sql/SQL-011-saif-business-policy-group.md), [SQL-030](sql/SQL-030-saif-business-policy-group.md), [SQL-031](sql/SQL-031-saif-business-policy-group.md), [SQL-038](sql/SQL-038-saif-business-policy-group.md), [SQL-039](sql/SQL-039-saif-business-policy-group.md) | [DUAL](database-tables.md#dual), [GROUP_ASSOCIATION](database-tables.md#group_association) | Write |
| [Load a group's chapters](operations/load-group-chapters.md) | [SQL-018](sql/SQL-018-saif-business-policy-group.md) | [GROUP_CHAPTER](database-tables.md#group_chapter) | Read |
| [Create and persist a chapter](operations/create-and-retrieve-chapter.md) | [SQL-017](sql/SQL-017-saif-business-policy-group.md) | [GROUP_CHAPTER](database-tables.md#group_chapter) | Read |
| [Retrieve a group contact](operations/retrieve-group-contact.md) | [SQL-020](sql/SQL-020-saif-business-policy-group.md) | [GROUP_ASSOCIATION_CONTACT](database-tables.md#group_association_contact) | Read |
| [Supply the group discount factor to rating](operations/supply-group-discount-factor.md) | [SQL-004](sql/SQL-004-saif-business-policy-group.md), [SQL-012](sql/SQL-012-saif-business-policy-group.md), [SQL-023](sql/SQL-023-saif-business-policy-group.md), [SQL-024](sql/SQL-024-saif-business-policy-group.md), [SQL-032](sql/SQL-032-saif-business-policy-group.md), [SQL-040](sql/SQL-040-saif-business-policy-group.md) | [DUAL](database-tables.md#dual), [GROUP_ASSOCIATION_DETAIL](database-tables.md#group_association_detail) | Read / Write |
| [Evaluate group underwriting eligibility inputs](operations/evaluate-group-underwriting-eligibility.md) | [SQL-005](sql/SQL-005-saif-business-policy-group.md), [SQL-013](sql/SQL-013-saif-business-policy-group.md), [SQL-025](sql/SQL-025-saif-business-policy-group.md), [SQL-033](sql/SQL-033-saif-business-policy-group.md), [SQL-041](sql/SQL-041-saif-business-policy-group.md) | [DUAL](database-tables.md#dual), [GROUP_UNDERWRITING_CRITERIA](database-tables.md#group_underwriting_criteria) | Read / Write |
| [Maintain a group's significant classes](operations/maintain-significant-classes.md) | [SQL-001](sql/SQL-001-saif-business-policy-group.md), [SQL-007](sql/SQL-007-saif-business-policy-group.md), [SQL-008](sql/SQL-008-saif-business-policy-group.md), [SQL-009](sql/SQL-009-saif-business-policy-group.md), [SQL-015](sql/SQL-015-saif-business-policy-group.md), [SQL-016](sql/SQL-016-saif-business-policy-group.md), [SQL-019](sql/SQL-019-saif-business-policy-group.md), [SQL-027](sql/SQL-027-saif-business-policy-group.md), [SQL-028](sql/SQL-028-saif-business-policy-group.md), [SQL-029](sql/SQL-029-saif-business-policy-group.md), [SQL-035](sql/SQL-035-saif-business-policy-group.md), [SQL-036](sql/SQL-036-saif-business-policy-group.md), [SQL-037](sql/SQL-037-saif-business-policy-group.md), [SQL-043](sql/SQL-043-saif-business-policy-group.md), [SQL-044](sql/SQL-044-saif-business-policy-group.md) | [DUAL](database-tables.md#dual), [GROUP_ELIGIBILITY_CTL](database-tables.md#group_eligibility_ctl), [GROUP_ELIGIBILITY_CLASS](database-tables.md#group_eligibility_class) | Read / Write |
| [Link a policy period to a group](operations/link-policy-period-to-group.md) | [SQL-006](sql/SQL-006-saif-business-policy-group.md), [SQL-014](sql/SQL-014-saif-business-policy-group.md), [SQL-026](sql/SQL-026-saif-business-policy-group.md), [SQL-034](sql/SQL-034-saif-business-policy-group.md), [SQL-042](sql/SQL-042-saif-business-policy-group.md) | [DUAL](database-tables.md#dual), [POLICY_PERIOD_GROUP_ASSOC](database-tables.md#policy_period_group_assoc) | Read / Write |

## Failure and edge-case behavior
- Chapter creation can seed an in-memory chapter object, but compiled source contains no chapter persistence SQL, so persistence responsibility lies elsewhere or remains incomplete.
- Two collection reads (`SQL-022`, `SQL-024`) scan their full table because no filter is applied.
- Nine statements are truncated at a bare `Where`, so the affected save/delete/retrieve paths are not executable as written.
- The eight sequence reads use placeholder identifiers rather than real Oracle `NEXTVAL` syntax, leaving create-path sequence generation unresolved.**

## 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)

> **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.
> Statements marked with `†` were retrieved from dependency library documentation via the Legends CLI RAG service.

## Sources
- `Business\SAIF.Business.Policy.Group\clsChapter.vb`
- `Business\SAIF.Business.Policy.Group\clsChapterCollection.vb`
- `Business\SAIF.Business.Policy.Group\clsClassSignificance.vb`
- `Business\SAIF.Business.Policy.Group\clsContact.vb`
- `Business\SAIF.Business.Policy.Group\clsGroupAssociation.vb`
- `Business\SAIF.Business.Policy.Group\clsGroupAssociationCollection.vb`
- `Business\SAIF.Business.Policy.Group\clsGroupAssociationDiscount.vb`
- `Business\SAIF.Business.Policy.Group\clsGroupAssociationDiscountCollection.vb`
- `Business\SAIF.Business.Policy.Group\clsGroupUnderwritingCriteria.vb`
- `Business\SAIF.Business.Policy.Group\clsPolicyPeriodGroupAssociation.vb`
- `Business\SAIF.Business.Policy.Group\clsSignificantClass.vb`
- `Business\SAIF.Business.Policy.Group\clsSignificantClassCollection.vb`
