---
title: Supply the group discount factor to rating
summary: Supply a time-effective group discount factor to rating consumers.
status: draft
owner: Technical Writer
last_reviewed: 2026-07-31
library: SAIF.Business.Policy.Group
reference_type: package
operation_id: OP-007
trigger: The rating engine requests the group adjustment factor for a policy
---

# Supply the group discount factor to rating

Retrieves a group discount row and exposes it through the `iAdjustedRateFactor` contract used by rating callers.

| Field | Value |
| --- | --- |
| **Operation ID** | OP-007 |
| **Trigger** | The rating engine requests the group adjustment factor for a policy |
| **Inputs** | `iAdjustedRateProvider` |
| **Outputs** | Either the persisted group discount or `NonApplicableAdjustedRateFactor`. |
| **Primary components** | `clsGroupAssociationDiscount.GetGroupAssociationDiscount`, `Factor` |
| **Entry point** | `Business\SAIF.Business.Policy.Group\clsGroupAssociationDiscount.vb` |

## Steps

1. `GetGroupAssociationDiscount(dpi, groupAssociationCode, effectiveDate)` retrieves the discount row for the group as of the effective date from `GROUP_ASSOCIATION_DETAIL`.
2. On `Factor` get, evaluate `IsValid` (framework rule state, including [BR-013](../business-rules.md#br-013-group-discount-code-is-required)).
3. Branch — if valid, return `GroupDiscount`; otherwise return `NonApplicableAdjustedRateFactor`. ([BR-014](../business-rules.md#br-014-discount-factor-returns-non-applicable-when-invalid))
4. On `Factor` set, assign `GroupDiscount`.
5. `IsTentative` exposes `TentativeFlag.ToBoolean` (persisted as `PENDING_FLAG`) so callers can distinguish a proposed discount from an approved one. ([BR-015](../business-rules.md#br-015-pending-flag-marks-a-tentative-discount))
6. Database statements executed or relied on by this operation: [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); affected tables: [DUAL](../database-tables.md#dual), [GROUP_ASSOCIATION_DETAIL](../database-tables.md#group_association_detail).

## Process flow

The following diagram visualizes this operation's control flow.

```mermaid
flowchart TD
    Start([Trigger]) --> Step1[Build criteria / load state]
    Step1 --> Step2[Apply local business logic]
    Step2 --> Decision{Valid and complete?}
    Decision -->|Yes| Step3[Return data or persist rows]
    Decision -->|No| EndErr([Return BOF validation or SQL-state issues])
    Step3 --> EndOk([Operation completes])
```

## Failure and edge-case behavior

- The collection retrieve [SQL-024](../sql/SQL-024-saif-business-policy-group.md) is unfiltered and can scan all rows when callers use the collection path.

## 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.Group\clsGroupAssociationDiscount.vb`
