﻿---
title: clsSAIFPlusDiscount
summary: API reference for clsSAIFPlusDiscount.
status: draft
owner: Technical Writer
last_reviewed: 2026-07-31
library: SAIF.Business.Policy.Rating
reference_type: package
---
# clsSAIFPlusDiscount
Represents the effective-dated SAIF Plus discount rate and caps. The class feeds the library's factor-selection pipeline and falls back to the neutral factor when its row does not apply.
## Purpose
- Represents the effective-dated SAIF Plus discount rate and caps.
- The class feeds the library's factor-selection pipeline and falls back to the neutral factor when its row does not apply.
## Context
- Namespace: `SAIF.Business.Policy.Rating`
- Assembly/package: `SAIF.Business.Policy.Rating`
## Public members
| Member | Signature | Purpose |
| --- | --- | --- |
| EffectiveDate | `Public Property EffectiveDate() As Date` | Effective date on which this SAIF Plus discount row begins to apply. |
| Rate | `Public Property Rate() As Decimal` | SAIF Plus discount rate returned as the adjusted-rate factor when the row is valid. |
| AdjustedRateFactor | `Public Property AdjustedRateFactor(ByVal inAdjustedRateProvider As iAdjustedRateProvider) As Decimal Implements iAdjustedRateFactor.Factor` | Returns the stored SAIF Plus discount rate when the row is valid; otherwise returns the neutral factor. |
| MaximumDiscountAmount | `Public Property MaximumDiscountAmount() As Decimal` | Per-row cap on the SAIF Plus discount amount. |
| ExpirationDate | `Public Property ExpirationDate() As Date` | End date after which this SAIF Plus discount row no longer applies; empty means open-ended. |
| MaximumCombinationDiscountAmount | `Public Property MaximumCombinationDiscountAmount() As Decimal` | Cap on the combined discount amount when SAIF Plus is used with other discounts. |
| AppliesTo | `Public ReadOnly Property AppliesTo(ByVal inAsOfDate As Date) As Boolean` | True when the supplied date falls within this discount row's effective window. |
| IsExpirationDateNull | `Public Function IsExpirationDateNull() As Boolean` | Indicates whether the expiration date is unset for this discount row. |
| IsMaximumCombinationDiscountAmountNull | `Public Function IsMaximumCombinationDiscountAmountNull() As Boolean` | Indicates whether the combined-discount cap is unset for this row. |
| Equals | `Public Overloads Shared Function Equals(ByVal objA As Object, ByVal objB As Object) As Boolean` | Returns `True` only when both operands are SAIF Plus discount rows with the same effective date, expiration date, and rate. |
| Equals | `Public Overloads Overrides Function Equals(ByVal inObject As Object) As Boolean` | Uses the typed SAIF Plus comparison for another `clsSAIFPlusDiscount`; otherwise returns `False`. |
| Equals | `Public Overloads Function Equals(ByVal inObject As clsSAIFPlusDiscount) As Boolean` | Treats two SAIF Plus discount rows as equal when their effective date, expiration date, and rate match. |
| GetHashCode | `Public Overrides Function GetHashCode() As Integer` | Hashes `Rate`, the value this type uses as its identity key in keyed collections. |
| ToString | `Public Overrides Function ToString() As String` | Uses the SAIF Plus rate as the object's string representation. |
| GetSAIFPlusDiscount | `Public Shared Function GetSAIFPlusDiscount(ByVal inDataportal As IDataPortalInfo, ByVal inAsOfDate As Date) As clsSAIFPlusDiscount` | Retrieves the effective-dated SAIF Plus discount rate and caps identified by the key values or effective-date criteria supplied by the caller. |
| ValidSAIFPlusDiscount | `Public Function ValidSAIFPlusDiscount(ByVal target As Object, ByVal e As clsRuleArgs) As Boolean` | Validation rule implementing [BR-028](../../../../../business-rules.md#br-028-a-saif-plus-discount-requires-an-effective-date-other-than-dateminvalue), rejecting rows whose `EffectiveDate` is `Date.MinValue`. |
| EffectiveDate | `Public Property EffectiveDate() As Date` | As-of date supplied to retrieval SQL to select the SAIF Plus discount row currently in force. |
| New | `Public Sub New(ByVal inDataPortalInfo As IDataPortalInfo)` | Creates an empty BOF object shell that shared factory methods or retrieval logic can populate with a loaded row. |
| New | `Public Sub New(ByVal inDataPortalInfo As IDataPortalInfo, ByVal inEffectiveDate As Date)` | Creates a criteria-backed instance seeded with `inEffectiveDate` so the next retrieval runs in the caller's requested context. |
## Inherited public members
| Member | Signature | Purpose | Origin |
| --- | --- | --- | --- |
| Rules | `Property Rules As clsRulesManager` | Owns the BOF rules manager used to evaluate registered validation logic.† | `SAIF.Framework.Core` — `clsBusinessBase` |
| BeginEdit | `Sub BeginEdit()` | Opens an n-level edit session for the business object.† | `SAIF.Framework.Core` — `clsBusinessBase` |
| CancelEdit | `Sub CancelEdit()` | Rolls back the active edit scope.† | `SAIF.Framework.Core` — `clsBusinessBase` |
| ApplyEdit | `Sub ApplyEdit()` | Commits the active edit scope.† | `SAIF.Framework.Core` — `clsBusinessBase` |
| Error | `ReadOnly Property Error As String` | Surfaces aggregate broken-rule text through `IDataErrorInfo`.† | `SAIF.Framework.Core` — `clsBusinessBase` |
## Behavioral notes
- When callers ask for an applied factor, the type returns either its stored multiplier or the neutral factor defined by the policy contracts.
## Constraints and usage notes
- Prefer the provider-aware factor member when composing rates so the type's applicability checks run before a multiplier is used.
> **Note:** Statements marked with `†` are derived from dependency library
> documentation via the Legends CLI. They describe inherited behavior from the
> indicated origin library and should be verified if the dependency version changes.
## Sources
- `Business\SAIF.Business.Policy.Rating\clsSAIFPlusDiscount.vb`
