---
title: SAIF.Business.UnitStat business rules
summary: Enumerated business rules with per-rule trigger, enforcement, and outcomes.
status: draft
owner: SAIF
last_reviewed: 2026-07-30
library: SAIF.Business.UnitStat
reference_type: package
---

# SAIF.Business.UnitStat business rules

This page captures business rules enforced by this library.

## BR-US-001: Policy unit sequence number must be greater than zero

| Field | Value |
| --- | --- |
| **Statement** | Policy unit sequence number must be greater than zero |
| **Trigger** | Validation check on save |
| **Enforcement** | clsPolicyUnit.ValidPolicyUnitSeqNum (AddBusinessRules) |
| **Outcome** | Error: "Invalid PolicyUnitSeqNum." |
| **Confidence** | Verified |
| **Tables** | [US_POLICY_UNIT](database-tables.md#us-policy-unit) |
| **SQL** | [SQL-004](sql/SQL-004-us-policy-unit-insert.md), [SQL-029](sql/SQL-029-us-policy-unit-update.md) |
| **Source** | `Business\SAIF.Business.UnitStat\clsPolicyUnit.vb` |

---

## BR-US-002: Claim unit policy unit sequence number must be greater than zero

| Field | Value |
| --- | --- |
| **Statement** | Claim unit policy unit sequence number must be greater than zero |
| **Trigger** | Validation check on save |
| **Enforcement** | clsClaimUnit.ValidPolicyUnitSeqNum |
| **Outcome** | Error: "Invalid PolicyUnitSeqNum." |
| **Confidence** | Verified |
| **Tables** | [US_CLAIM_UNIT](database-tables.md#us-claim-unit) |
| **SQL** | [SQL-003](sql/SQL-003-us-claim-unit-insert.md), [SQL-028](sql/SQL-028-us-claim-unit-update.md) |
| **Source** | `Business\SAIF.Business.UnitStat\clsClaimUnit.vb` |

---

## BR-US-003: Claim unit claim ID must be greater than zero

| Field | Value |
| --- | --- |
| **Statement** | Claim unit claim ID must be greater than zero |
| **Trigger** | Validation check on save |
| **Enforcement** | clsClaimUnit.ValidClaimID |
| **Outcome** | Error: "Invalid Claim ID." |
| **Confidence** | Verified |
| **Tables** | [US_CLAIM_UNIT](database-tables.md#us-claim-unit) |
| **SQL** | [SQL-003](sql/SQL-003-us-claim-unit-insert.md), [SQL-028](sql/SQL-028-us-claim-unit-update.md) |
| **Source** | `Business\SAIF.Business.UnitStat\clsClaimUnit.vb` |

---

## BR-US-004: Audit condition description must have non-zero length

| Field | Value |
| --- | --- |
| **Statement** | Audit condition description must have non-zero length |
| **Trigger** | Validation check on save |
| **Enforcement** | clsAuditCondition.ValidAuditDescription |
| **Outcome** | Error: "Invalid Audit Description." |
| **Confidence** | Verified |
| **Tables** | [US_AUDIT_CONDITION](database-tables.md#us-audit-condition) |
| **SQL** | [SQL-001](sql/SQL-001-us-audit-condition-insert.md) |
| **Source** | `Business\SAIF.Business.UnitStat\clsAuditCondition.vb` |

---

## BR-US-005: Audit condition history description must have non-zero length

| Field | Value |
| --- | --- |
| **Statement** | Audit condition history description must have non-zero length |
| **Trigger** | Validation check on save |
| **Enforcement** | clsAuditConditionHistory.ValidAuditDescription |
| **Outcome** | Error: "Invalid Audit Description." |
| **Confidence** | Verified |
| **Tables** | [US_AUDIT_CONDITION_HISTORY](database-tables.md#us-audit-condition-history) |
| **SQL** | [SQL-002](sql/SQL-002-us-audit-condition-history-insert.md), [SQL-026](sql/SQL-026-us-audit-condition-history-update-last-update-date.md) |
| **Source** | `Business\SAIF.Business.UnitStat\clsAuditConditionHistory.vb` |

---

## BR-US-006: A policy unit retrieved by natural key must be active (ACTIVE_UNIT_FLAG = 'Y')

| Field | Value |
| --- | --- |
| **Statement** | A policy unit retrieved by natural key must be active (ACTIVE_UNIT_FLAG = 'Y') |
| **Trigger** | Retrieve by natural key |
| **Enforcement** | clsPolicyUnit.Criteria.SQLWherePolicyUnit |
| **Outcome** | Inactive policy units are not returned |
| **Confidence** | Verified |
| **Tables** | [US_POLICY_UNIT](database-tables.md#us-policy-unit) |
| **SQL** | [SQL-021](sql/SQL-021-us-policy-unit-active-row-by-natural-key.md) |
| **Source** | `Business\SAIF.Business.UnitStat\clsPolicyUnit.vb` |

---

## BR-US-007: A policy unit retrieved by injury date must be active

| Field | Value |
| --- | --- |
| **Statement** | A policy unit retrieved by injury date must be active |
| **Trigger** | Retrieve by injury date |
| **Enforcement** | clsPolicyUnit.Criteria.SQLWhereRetrieveDate |
| **Outcome** | Inactive units excluded from date-range lookup |
| **Confidence** | Verified |
| **Tables** | [US_POLICY_UNIT](database-tables.md#us-policy-unit) |
| **SQL** | [SQL-020](sql/SQL-020-us-policy-unit-active-row-by-retrieve-date.md) |
| **Source** | `Business\SAIF.Business.UnitStat\clsPolicyUnit.vb` |

---

## BR-US-008: A policy unit is reportable only if the process date is on or before the last valuation date

| Field | Value |
| --- | --- |
| **Statement** | A policy unit is reportable only if the process date is on or before the last valuation date |
| **Trigger** | Reportability check |
| **Enforcement** | clsPolicyUnit.IsReportable(processDate) |
| **Outcome** | Returns False when process date exceeds last valuation period end |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.UnitStat\clsPolicyUnit.vb` |

---

## BR-US-009: An original report exists when UnitValuationNumber > 0 and UnitValuationNumber ≠ LastReportedValuationNumber

| Field | Value |
| --- | --- |
| **Statement** | An original report exists when UnitValuationNumber > 0 and UnitValuationNumber ≠ LastReportedValuationNumber |
| **Trigger** | Report type determination |
| **Enforcement** | clsPolicyUnit.IsOriginalReport |
| **Outcome** | Identifies whether a report cycle produces new data |
| **Confidence** | Verified |
| **Tables** | [US_POLICY_UNIT](database-tables.md#us-policy-unit) |
| **SQL** | [SQL-020](sql/SQL-020-us-policy-unit-active-row-by-retrieve-date.md), [SQL-021](sql/SQL-021-us-policy-unit-active-row-by-natural-key.md), [SQL-022](sql/SQL-022-us-policy-unit-row-by-sequence.md) |
| **Source** | `Business\SAIF.Business.UnitStat\clsPolicyUnit.vb` |

---

## BR-US-010: A first original report is one that is an original report AND has UnitValuationNumber = 1

| Field | Value |
| --- | --- |
| **Statement** | A first original report is one that is an original report AND has UnitValuationNumber = 1 |
| **Trigger** | First-report check |
| **Enforcement** | clsPolicyUnit.IsOriginalFirstReport |
| **Outcome** | Distinguishes first report from subsequent reports |
| **Confidence** | Verified |
| **Tables** | [US_POLICY_UNIT](database-tables.md#us-policy-unit) |
| **SQL** | [SQL-020](sql/SQL-020-us-policy-unit-active-row-by-retrieve-date.md), [SQL-021](sql/SQL-021-us-policy-unit-active-row-by-natural-key.md), [SQL-022](sql/SQL-022-us-policy-unit-row-by-sequence.md) |
| **Source** | `Business\SAIF.Business.UnitStat\clsPolicyUnit.vb` |

---

## BR-US-011: A cycle report is one with UnitValuationNumber > 1

| Field | Value |
| --- | --- |
| **Statement** | A cycle report is one with UnitValuationNumber > 1 |
| **Trigger** | Cycle report check |
| **Enforcement** | clsPolicyUnit.IsCycleReport |
| **Outcome** | Does not include correction reports |
| **Confidence** | Verified |
| **Tables** | [US_POLICY_UNIT](database-tables.md#us-policy-unit) |
| **SQL** | [SQL-020](sql/SQL-020-us-policy-unit-active-row-by-retrieve-date.md), [SQL-021](sql/SQL-021-us-policy-unit-active-row-by-natural-key.md), [SQL-022](sql/SQL-022-us-policy-unit-row-by-sequence.md) |
| **Source** | `Business\SAIF.Business.UnitStat\clsPolicyUnit.vb` |

---

## BR-US-012: Activating a policy unit that has been previously reported must also set correction flags

| Field | Value |
| --- | --- |
| **Statement** | Activating a policy unit that has been previously reported must also set correction flags |
| **Trigger** | Activation |
| **Enforcement** | clsPolicyUnit.ActivatePolicyUnit() |
| **Outcome** | If IsReported, sets ExposureCorrectionFlag = 'Y' and LossCorrectionFlag = 'Y' |
| **Confidence** | Verified |
| **Tables** | [US_POLICY_UNIT](database-tables.md#us-policy-unit) |
| **SQL** | [SQL-029](sql/SQL-029-us-policy-unit-update.md) |
| **Source** | `Business\SAIF.Business.UnitStat\clsPolicyUnit.vb` |

---

## BR-US-013: Non-compensable rules apply only to policy units effective on or after 2013-01-01

| Field | Value |
| --- | --- |
| **Statement** | Non-compensable rules apply only to policy units effective on or after 2013-01-01 |
| **Trigger** | NCCI rule change (2013) |
| **Enforcement** | clsPolicyUnit.IsSubjectToNonCompensableRules; constant NON_COMPENSABLE_START_DATE = #1/1/2013# |
| **Outcome** | Units with earlier effective dates are exempt |
| **Confidence** | Verified |
| **Tables** | [US_POLICY_UNIT](database-tables.md#us-policy-unit) |
| **SQL** | [SQL-015](sql/SQL-015-us-claim-unit-us-policy-unit-fraud-flag-eligibility-lookup.md) |
| **Source** | `Business\SAIF.Business.UnitStat\clsPolicyUnit.vb` |

---

## BR-US-014: Active unit flag defaults to 'Y' when not set

| Field | Value |
| --- | --- |
| **Statement** | Active unit flag defaults to 'Y' when not set |
| **Trigger** | New object creation |
| **Enforcement** | clsPolicyUnit.ActiveUnitFlag getter (If(m_ActiveUnitFlag = StringInitialValue, "Y", ...)) |
| **Outcome** | Prevents unintentional inactive state on new units |
| **Confidence** | Verified |
| **Tables** | [US_POLICY_UNIT](database-tables.md#us-policy-unit) |
| **SQL** | [SQL-004](sql/SQL-004-us-policy-unit-insert.md) |
| **Source** | `Business\SAIF.Business.UnitStat\clsPolicyUnit.vb` |

---

## BR-US-015: LossEditFlag and ExposureEditFlag default to 'Y' when not set

| Field | Value |
| --- | --- |
| **Statement** | LossEditFlag and ExposureEditFlag default to 'Y' when not set |
| **Trigger** | New object creation |
| **Enforcement** | clsPolicyUnit.LossEditFlag / ExposureEditFlag getters |
| **Outcome** | Ensures edits are required by default |
| **Confidence** | Verified |
| **Tables** | [US_POLICY_UNIT](database-tables.md#us-policy-unit) |
| **SQL** | [SQL-004](sql/SQL-004-us-policy-unit-insert.md) |
| **Source** | `Business\SAIF.Business.UnitStat\clsPolicyUnit.vb` |

---

## BR-US-016: Correction flags (UnitCorrectionFlag, ExposureCorrectionFlag, LossCorrectionFlag) default to 'N'

| Field | Value |
| --- | --- |
| **Statement** | Correction flags (UnitCorrectionFlag, ExposureCorrectionFlag, LossCorrectionFlag) default to 'N' |
| **Trigger** | New object creation |
| **Enforcement** | Respective getters with If(value = StringInitialValue, "N", ...) |
| **Outcome** | Prevents spurious corrections |
| **Confidence** | Verified |
| **Tables** | [US_POLICY_UNIT](database-tables.md#us-policy-unit) |
| **SQL** | [SQL-004](sql/SQL-004-us-policy-unit-insert.md), [SQL-029](sql/SQL-029-us-policy-unit-update.md) |
| **Source** | `Business\SAIF.Business.UnitStat\clsPolicyUnit.vb` |

---

## BR-US-017: HistoricalFlag defaults to 'N' when not set

| Field | Value |
| --- | --- |
| **Statement** | HistoricalFlag defaults to 'N' when not set |
| **Trigger** | New object creation |
| **Enforcement** | clsPolicyUnit.HistoricalFlag getter |
| **Outcome** | Prevents units from being treated as historical by default |
| **Confidence** | Verified |
| **Tables** | [US_POLICY_UNIT](database-tables.md#us-policy-unit) |
| **SQL** | [SQL-004](sql/SQL-004-us-policy-unit-insert.md) |
| **Source** | `Business\SAIF.Business.UnitStat\clsPolicyUnit.vb` |

---

## BR-US-018: ActiveUnitFlag for claim units defaults to 'Y'

| Field | Value |
| --- | --- |
| **Statement** | ActiveUnitFlag for claim units defaults to 'Y' |
| **Trigger** | New object creation |
| **Enforcement** | clsClaimUnit member variable initializer Private m_ActiveUnitFlag As String = "Y" |
| **Outcome** | Claims default to active |
| **Confidence** | Verified |
| **Tables** | [US_CLAIM_UNIT](database-tables.md#us-claim-unit) |
| **SQL** | [SQL-003](sql/SQL-003-us-claim-unit-insert.md) |
| **Source** | `Business\SAIF.Business.UnitStat\clsClaimUnit.vb` |

---

## BR-US-019: A claim unit active lookup filters to ACTIVE_UNIT_FLAG = 'Y'

| Field | Value |
| --- | --- |
| **Statement** | A claim unit active lookup filters to ACTIVE_UNIT_FLAG = 'Y' |
| **Trigger** | Retrieve by claim ID |
| **Enforcement** | clsClaimUnit.Criteria.SQLWhereClaimID |
| **Outcome** | Only active claim-unit associations are returned when retrieving by claim |
| **Confidence** | Verified |
| **Tables** | [US_CLAIM_UNIT](database-tables.md#us-claim-unit) |
| **SQL** | [SQL-012](sql/SQL-012-us-claim-unit-active-row-by-claim.md) |
| **Source** | `Business\SAIF.Business.UnitStat\clsClaimUnit.vb` |

---

## BR-US-020: Database contention on update or delete is detected by checking RowsAffected <> 1

| Field | Value |
| --- | --- |
| **Statement** | Database contention on update or delete is detected by checking RowsAffected <> 1 |
| **Trigger** | After insert/update/delete |
| **Enforcement** | After* methods in clsPolicyUnit, clsClaimUnit, clsAuditConditionHistory |
| **Outcome** | Adds error message clsConstants.Messages.DBContentionError |
| **Confidence** | Verified |
| **Tables** | [US_POLICY_UNIT](database-tables.md#us-policy-unit), [US_CLAIM_UNIT](database-tables.md#us-claim-unit), [US_AUDIT_CONDITION_HISTORY](database-tables.md#us-audit-condition-history) |
| **SQL** | [SQL-026](sql/SQL-026-us-audit-condition-history-update-last-update-date.md), [SQL-028](sql/SQL-028-us-claim-unit-update.md), [SQL-029](sql/SQL-029-us-policy-unit-update.md), [SQL-034](sql/SQL-034-us-claim-unit-delete.md), [SQL-035](sql/SQL-035-us-policy-unit-delete.md) |
| **Source** | `Business\SAIF.Business.UnitStat\clsPolicyUnit.vb` |

---

## BR-US-021: A loss is reportable if it has claim costs (Incurred Medical > 0 or Incurred Indemnity > 0) OR is a catastrophe claim

| Field | Value |
| --- | --- |
| **Statement** | A loss is reportable if it has claim costs (Incurred Medical > 0 or Incurred Indemnity > 0) OR is a catastrophe claim |
| **Trigger** | Reportability determination |
| **Enforcement** | clsLossBase.IsReportable |
| **Outcome** | Losses with zero cost but catastrophe number are still reportable |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.UnitStat\clsLossBase.vb` |

---

## BR-US-022: Outstanding reserves equal incurred amounts minus paid amounts

| Field | Value |
| --- | --- |
| **Statement** | Outstanding reserves equal incurred amounts minus paid amounts |
| **Trigger** | Reserves calculation |
| **Enforcement** | clsLossBase.OutstandingReserves |
| **Outcome** | (IncurredMedical + IncurredIndemnity) − (PaidMedical + PaidIndemnity) |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.UnitStat\clsLossBase.vb` |

---

## BR-US-023: A catastrophe claim has a CatastropheNumber ≠ "00"

| Field | Value |
| --- | --- |
| **Statement** | A catastrophe claim has a CatastropheNumber ≠ "00" |
| **Trigger** | Catastrophe identification |
| **Enforcement** | clsLossBase.IsCatastrophe |
| **Outcome** | Distinguishes catastrophe losses for grouping/reporting |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.UnitStat\clsLossBase.vb` |

---

## BR-US-024: A policy unit has errors when its audit condition collection contains conditions with non-null exposure summary seq num AND non-null claim ID

| Field | Value |
| --- | --- |
| **Statement** | A policy unit has errors when its audit condition collection contains conditions with non-null exposure summary seq num AND non-null claim ID |
| **Trigger** | Error state |
| **Enforcement** | clsAuditConditionCollection.HasPolicyUnitErrors |
| **Outcome** | Used to block reporting of units with unresolved errors |
| **Confidence** | Verified |
| **Tables** | [US_AUDIT_CONDITION](database-tables.md#us-audit-condition) |
| **SQL** | [SQL-006](sql/SQL-006-us-audit-condition-all-rows.md), [SQL-007](sql/SQL-007-us-audit-condition-by-policy-period.md), [SQL-008](sql/SQL-008-us-audit-condition-by-policy-unit.md) |
| **Source** | `Business\SAIF.Business.UnitStat\clsAuditConditionCollection.vb` |

---

## BR-US-025: Units within 155 months of the current quarter start date are archived; units more than 30 years old are deleted

| Field | Value |
| --- | --- |
| **Statement** | Units within 155 months of the current quarter start date are archived; units more than 30 years old are deleted |
| **Trigger** | Retention policy |
| **Enforcement** | Extensions.UnitArchiveDate() / Extensions.UnitDeleteDate() |
| **Outcome** | Derived dates used externally to schedule archiving and deletion |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.UnitStat\Extensions.vb` |

---

## BR-US-026: LossEditFlag default is "Y" (set in member variable initializer)

| Field | Value |
| --- | --- |
| **Statement** | LossEditFlag default is "Y" (set in member variable initializer) |
| **Trigger** | Policy unit creation (26-Aug-2011 maintenance) |
| **Enforcement** | clsPolicyUnit member variable m_LossEditFlag = StringInitialValue + getter default |
| **Outcome** | Ensures loss edits are required by default on all new units |
| **Confidence** | Verified |
| **Tables** | [US_POLICY_UNIT](database-tables.md#us-policy-unit) |
| **SQL** | [SQL-004](sql/SQL-004-us-policy-unit-insert.md) |
| **Source** | `Business\SAIF.Business.UnitStat\clsPolicyUnit.vb` |

---

## BR-US-027: Denial-final checks and fully-fraudulent checks only apply to policy units effective on or after 2013-01-01

| Field | Value |
| --- | --- |
| **Statement** | Denial-final checks and fully-fraudulent checks only apply to policy units effective on or after 2013-01-01 |
| **Trigger** | Per-claim reporting |
| **Enforcement** | clsClaimUnit.IsDeniedFinal / IsFullyFraudulent remarks |
| **Outcome** | Based on NCCI non-compensable rule change |
| **Confidence** | Verified |
| **Tables** | [CL_INJURY_CLAIM](database-tables.md#cl-injury-claim), [US_CLAIM_UNIT](database-tables.md#us-claim-unit), [US_POLICY_UNIT](database-tables.md#us-policy-unit) |
| **SQL** | [SQL-014](sql/SQL-014-cl-injury-claim-denial-final-lookup.md), [SQL-015](sql/SQL-015-us-claim-unit-us-policy-unit-fraud-flag-eligibility-lookup.md) |
| **Source** | `Business\SAIF.Business.UnitStat\clsClaimUnit.vb` |

---

## BR-US-028: ValueCode for claim units defaults to 'N'

| Field | Value |
| --- | --- |
| **Statement** | ValueCode for claim units defaults to 'N' |
| **Trigger** | New object creation |
| **Enforcement** | clsClaimUnit member variable initializer `Private m_ValueCode As String = "N"` |
| **Outcome** | New claim units are valued 'N' unless the caller explicitly sets a different value code |
| **Confidence** | Verified |
| **Tables** | [US_CLAIM_UNIT](database-tables.md#us-claim-unit) |
| **SQL** | [SQL-003](sql/SQL-003-us-claim-unit-insert.md) |
| **Source** | `Business\SAIF.Business.UnitStat\clsClaimUnit.vb` |

---

## BR-US-029: ReportedFatalFlag and ReportedClosedFlag for claim units default to 'N'

| Field | Value |
| --- | --- |
| **Statement** | ReportedFatalFlag and ReportedClosedFlag for claim units default to 'N' |
| **Trigger** | New object creation |
| **Enforcement** | clsClaimUnit member variable initializers `Private m_ReportedFatalFlag As String = "N"` and `Private m_ReportedClosedFlag As String = "N"` |
| **Outcome** | A new claim unit is assumed not previously reported as fatal and not previously reported as closed until a report cycle sets otherwise |
| **Confidence** | Verified |
| **Tables** | [US_CLAIM_UNIT](database-tables.md#us-claim-unit) |
| **SQL** | [SQL-003](sql/SQL-003-us-claim-unit-insert.md) |
| **Source** | `Business\SAIF.Business.UnitStat\clsClaimUnit.vb` |

---

## BR-US-030: PreferredWorkerFlag for claim units defaults to 'N'

| Field | Value |
| --- | --- |
| **Statement** | PreferredWorkerFlag for claim units defaults to 'N' |
| **Trigger** | New object creation |
| **Enforcement** | clsClaimUnit member variable initializer `Private m_PreferredWorkerFlag As String = "N"` |
| **Outcome** | New claim units are not flagged as preferred-worker claims unless explicitly set |
| **Confidence** | Verified |
| **Tables** | [US_CLAIM_UNIT](database-tables.md#us-claim-unit) |
| **SQL** | [SQL-003](sql/SQL-003-us-claim-unit-insert.md) |
| **Source** | `Business\SAIF.Business.UnitStat\clsClaimUnit.vb` |

## Inherited business rules

Rules in this section originate from BOF framework base classes inherited by the library's business objects and collections.

**From `clsBusinessBase` (`SAIF.BOF.Framework`)**

## INH-US-001: A business object is savable only when it is dirty and valid

| Field | Value |
| --- | --- |
| **Statement** | A business object is savable only when it is dirty and valid |
| **Trigger** | Save-enable or save-readiness evaluation |
| **Enforcement** | `clsBusinessBase.IsSavable` |
| **Outcome** | `IsSavable` returns `True` only when `IsDirty AndAlso IsValid` |
| **Origin** | `SAIF.BOF.Framework` — `clsBusinessBase` |
| **Source** | `Legacy\BusinessObjectFramework\clsBusinessBase.vb` |

---

## INH-US-002: Cancelling an edit restores the previous object state and reapplies business rules

| Field | Value |
| --- | --- |
| **Statement** | Cancelling an edit restores the previous object state and reapplies business rules |
| **Trigger** | `CancelEdit()` |
| **Enforcement** | `clsBusinessBase.CancelEdit` |
| **Outcome** | The framework undoes pending changes, re-adds business rules, and raises modification-state updates |
| **Origin** | `SAIF.BOF.Framework` — `clsBusinessBase` |
| **Source** | `Legacy\BusinessObjectFramework\clsBusinessBase.vb` |

---

**From `clsBusinessCollectionBase` (`SAIF.BOF.Framework`)**

## INH-US-003: Managed collection save persists deleted children before active children

| Field | Value |
| --- | --- |
| **Statement** | Managed collection save persists deleted children before active children |
| **Trigger** | `Save()` or `SaveChild()` on a managed collection |
| **Enforcement** | `clsBusinessCollectionBase.Save` / `SaveChild` |
| **Outcome** | The framework saves deleted child items first, then active child items, clears the deleted list, and completes the collection save |
| **Origin** | `SAIF.BOF.Framework` — `clsBusinessCollectionBase` |
| **Source** | `Legacy\BusinessObjectFramework\clsBusinessCollectionBase.vb` |

## Related documentation

- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Operations and processes](operations-processes.md)
- [Database tables](database-tables.md)
- [SQL catalog](sql/index.md)
- [API reference](api/index.md)
- [Configuration](configuration.md)

> **Note:** Statements marked with `*` are inferred from code behavior rather than explicit documentation or comments.

## Sources

- `Business\SAIF.Business.UnitStat\clsPolicyUnit.vb`
- `Business\SAIF.Business.UnitStat\clsClaimUnit.vb`
- `Business\SAIF.Business.UnitStat\clsAuditCondition.vb`
- `Business\SAIF.Business.UnitStat\clsAuditConditionCollection.vb`
- `Business\SAIF.Business.UnitStat\clsAuditConditionHistory.vb`
- `Business\SAIF.Business.UnitStat\clsLossBase.vb`
- `Business\SAIF.Business.UnitStat\Extensions.vb`
- `Business\SAIF.Business.UnitStat\Constants.vb`
