---
title: SAIF.Business.UnitStat operations and processes
summary: Operation catalog and cross-operation hub for the Unit Stat policy-unit, claim-unit, audit-condition, code-map, and retention business objects.
status: draft
owner: SAIF
last_reviewed: 2026-07-30
library: SAIF.Business.UnitStat
reference_type: package
---

# SAIF.Business.UnitStat operations and processes

This page is the operation catalog and cross-operation hub for `SAIF.Business.UnitStat`. The library exposes eight operations covering the policy-unit and claim-unit reporting lifecycle, denial/fraud eligibility checks, audit-condition maintenance and history tracking, code-map loading, derived reporting calculations, and retention-date calculation. Each operation's detailed, step-by-step logic lives in its own page under `operations/`.

## Operation catalog

| Operation | Intent | Trigger | Inputs | Outputs | Rules | Tables | SQL |
| --- | --- | --- | --- | --- | --- | --- | --- |
| [Policy unit CRUD](operations/policy-unit-crud.md) | Create, retrieve, update, delete, and activate/inactivate a policy-level reporting unit | `clsPolicyUnit.NewPolicyUnit` / `GetPolicyUnit` / `clsPolicyUnitCollection.GetPolicyUnits`, followed by property edits and `Save()`, or `ActivatePolicyUnit()`/`InactivatePolicyUnit()` | Policy number, policy-period effective date, unit effective/expiration dates, valuation numbers, activity/correction/historical flags | Persisted `US_POLICY_UNIT` row; populated `clsPolicyUnit`/`clsPolicyUnitCollection`; derived reportability flags | [BR-US-001](business-rules.md#br-us-001-policy-unit-sequence-number-must-be-greater-than-zero), [BR-US-006](business-rules.md#br-us-006-a-policy-unit-retrieved-by-natural-key-must-be-active-activeunitflag-y), [BR-US-007](business-rules.md#br-us-007-a-policy-unit-retrieved-by-injury-date-must-be-active), [BR-US-008](business-rules.md#br-us-008-a-policy-unit-is-reportable-only-if-the-process-date-is-on-or-before-the-last-valuation-date), [BR-US-009](business-rules.md#br-us-009-an-original-report-exists-when-unitvaluationnumber-0-and-unitvaluationnumber-lastreportedvaluationnumber), [BR-US-010](business-rules.md#br-us-010-a-first-original-report-is-one-that-is-an-original-report-and-has-unitvaluationnumber-1), [BR-US-011](business-rules.md#br-us-011-a-cycle-report-is-one-with-unitvaluationnumber-1), [BR-US-012](business-rules.md#br-us-012-activating-a-policy-unit-that-has-been-previously-reported-must-also-set-correction-flags), [BR-US-013](business-rules.md#br-us-013-non-compensable-rules-apply-only-to-policy-units-effective-on-or-after-2013-01-01), [BR-US-014](business-rules.md#br-us-014-active-unit-flag-defaults-to-y-when-not-set), [BR-US-015](business-rules.md#br-us-015-losseditflag-and-exposureeditflag-default-to-y-when-not-set), [BR-US-016](business-rules.md#br-us-016-correction-flags-unitcorrectionflag-exposurecorrectionflag-losscorrectionflag-default-to-n), [BR-US-017](business-rules.md#br-us-017-historicalflag-defaults-to-n-when-not-set), [BR-US-020](business-rules.md#br-us-020-database-contention-on-update-or-delete-is-detected-by-checking-rowsaffected-1), [BR-US-026](business-rules.md#br-us-026-losseditflag-default-is-y-set-in-member-variable-initializer) | [US_POLICY_UNIT](database-tables.md#us-policy-unit) | [SQL-004](sql/SQL-004-us-policy-unit-insert.md), [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), [SQL-023](sql/SQL-023-us-policy-unit-rows-requiring-loss-edits.md), [SQL-024](sql/SQL-024-us-policy-unit-collection-by-policy.md), [SQL-025](sql/SQL-025-us-policy-unit-collection-by-policy-period.md), [SQL-029](sql/SQL-029-us-policy-unit-update.md), [SQL-035](sql/SQL-035-us-policy-unit-delete.md) |
| [Claim unit maintenance](operations/claim-unit-maintenance.md) | Create, retrieve, update, and delete a claim unit tying a claim to a policy unit | `clsClaimUnit.NewClaimUnit` / `GetClaimUnit`, followed by property edits and `Save()`, or `clsClaimUnitCollection.GetClaimUnits` | Policy unit sequence number, claim ID, loss/exposure amounts, value code, reporting flags | Persisted `US_CLAIM_UNIT` row; populated `clsClaimUnit`/`clsClaimUnitCollection` | [BR-US-020](business-rules.md#br-us-020-database-contention-on-update-or-delete-is-detected-by-checking-rowsaffected-1), [BR-US-028](business-rules.md#br-us-028-valuecode-for-claim-units-defaults-to-n), [BR-US-029](business-rules.md#br-us-029-reportedfatalflag-and-reportedclosedflag-for-claim-units-default-to-n), [BR-US-030](business-rules.md#br-us-030-preferredworkerflag-for-claim-units-defaults-to-n) | [US_CLAIM_UNIT](database-tables.md#us-claim-unit) | [SQL-003](sql/SQL-003-us-claim-unit-insert.md), [SQL-012](sql/SQL-012-us-claim-unit-active-row-by-claim.md), [SQL-013](sql/SQL-013-us-claim-unit-row-by-claim-and-policy-unit.md), [SQL-016](sql/SQL-016-us-claim-unit-collection-by-policy-unit.md), [SQL-028](sql/SQL-028-us-claim-unit-update.md), [SQL-034](sql/SQL-034-us-claim-unit-delete.md) |
| [Denial and fraud eligibility](operations/denial-fraud-eligibility.md) | Evaluate denial-final and fully-fraudulent status for a claim unit | Caller reads `clsClaimUnit.IsDeniedFinal` or `IsFullyFraudulent(clmData)` | Claim ID; fraud-conviction flag from an externally supplied `clsClaimData` | Cached boolean denial/fraud status | [BR-US-027](business-rules.md#br-us-027-denial-final-checks-and-fully-fraudulent-checks-only-apply-to-policy-units-effective-on-or-after-2013-01-01) | [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-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) |
| [Audit condition maintenance](operations/audit-condition-maintenance.md) | Create, retrieve, evaluate errors on, and bulk-delete audit conditions raised against a policy unit | `clsAuditCondition.NewAuditCondition`/`GetAuditCondition`, `clsAuditConditionCollection.GetAuditConditions`/`GetPolicyPeriodAudits`/`GetPolicyUnitAudits`/`GetUpdateUserAudits`, or any shared `Delete*` function | Policy unit sequence number, exposure summary sequence number, claim ID, description, edit type code, error flag | Persisted `US_AUDIT_CONDITION` row(s); populated collection; `Has*Errors` booleans; rows-deleted count | [BR-US-020](business-rules.md#br-us-020-database-contention-on-update-or-delete-is-detected-by-checking-rowsaffected-1), [BR-US-024](business-rules.md#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) | [US_AUDIT_CONDITION](database-tables.md#us-audit-condition) | [SQL-001](sql/SQL-001-us-audit-condition-insert.md), [SQL-005](sql/SQL-005-us-audit-condition-by-sequence.md), [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), [SQL-009](sql/SQL-009-us-audit-condition-by-update-user.md), [SQL-030](sql/SQL-030-us-audit-condition-delete-by-edit-type.md), [SQL-031](sql/SQL-031-us-audit-condition-delete-by-policy-period.md), [SQL-032](sql/SQL-032-us-audit-condition-delete-by-policy-period-and-edit-type.md), [SQL-033](sql/SQL-033-us-audit-condition-delete-by-policy-unit-and-edit-type.md) |
| [Audit condition history tracking](operations/audit-condition-history-tracking.md) | Create, retrieve, and update historical audit-condition records keyed by policy unit, claim, and description | `clsAuditConditionHistory.NewAuditConditionHistory`/`GetAuditConditionHistory`, followed by `Save()`, or `clsAuditConditionHistoryCollection.GetAuditConditionHistoryByPolicyUnitClaimId` | Policy unit sequence number, claim ID, audit condition description, edit type code, error flag | Persisted `US_AUDIT_CONDITION_HISTORY` row; populated object/collection | [BR-US-020](business-rules.md#br-us-020-database-contention-on-update-or-delete-is-detected-by-checking-rowsaffected-1) | [US_AUDIT_CONDITION_HISTORY](database-tables.md#us-audit-condition-history) | [SQL-002](sql/SQL-002-us-audit-condition-history-insert.md), [SQL-010](sql/SQL-010-us-audit-condition-history-by-composite-key.md), [SQL-011](sql/SQL-011-us-audit-condition-history-collection-by-composite-key.md), [SQL-026](sql/SQL-026-us-audit-condition-history-update-last-update-date.md), [SQL-027](sql/SQL-027-us-audit-condition-history-collection-update.md) |
| [Code map loading](operations/code-map-loading.md) | Lazily load and cache code-translation maps, including three database-backed maps | Caller invokes any `Get*Map` function in `mdlCodeMaps` | `IDataPortalInfo` and optional `refresh` flag (database-backed maps only) | Cached code-map object translating codes to enumerated types | None catalogued* | [CALCULATION_TYPE_CODE](database-tables.md#calculation-type-code), [US_COST_TYPE_CODE](database-tables.md#us-cost-type-code), [US_OFFSET_TYPE_CODE](database-tables.md#us-offset-type-code) | [SQL-017](sql/SQL-017-calculation-type-code-code-table-load.md), [SQL-018](sql/SQL-018-us-cost-type-code-code-table-load.md), [SQL-019](sql/SQL-019-us-offset-type-code-code-table-load.md) |
| [Derived reporting calculations](operations/derived-reporting-calculations.md) | Compute reserve, catastrophe, reportability, and claim-status classifications shared by loss/exposure data | Caller reads a derived property on `clsLossBase`/`clsExposureBase`, or invokes `CopyData`/`HasCostsChanged` | Stored loss/exposure fields (incurred/paid amounts, NCCI codes, catastrophe number, report type) | Calculated decimal/boolean values; copied field sets; cost-change comparison result | [BR-US-021](business-rules.md#br-us-021-a-loss-is-reportable-if-it-has-claim-costs-incurred-medical-0-or-incurred-indemnity-0-or-is-a-catastrophe-claim), [BR-US-022](business-rules.md#br-us-022-outstanding-reserves-equal-incurred-amounts-minus-paid-amounts), [BR-US-023](business-rules.md#br-us-023-a-catastrophe-claim-has-a-catastrophenumber-00) | None | None |
| [Retention date calculation](operations/retention-date-calculation.md) | Compute quarter-aligned archive/delete cutoff dates and a default ER Mod factor | Caller invokes `UnitArchiveDate`, `UnitDeleteDate`, `QuarterStartDate`, or `ERModFactor` extension methods | A `Date` or a `clsPolicyPeriodRatingPlan` instance | Calculated archive/delete cutoff date, quarter-start date, or ER Mod factor | [BR-US-025](business-rules.md#br-us-025-units-within-155-months-of-the-current-quarter-start-date-are-archived-units-more-than-30-years-old-are-deleted) | None | None |

## Process flow diagram

The following diagram shows how the eight operations relate across the Unit Stat reporting lifecycle: a policy unit is created or retrieved, its claim units and audit conditions are maintained, denial/fraud eligibility is evaluated per claim, code maps translate stored codes for reporting, and derived calculations and retention dates support downstream reporting and archival.

```mermaid
flowchart TD
	Start([Caller requests Unit Stat maintenance]) --> Policy[Policy unit CRUD]
	Policy --> ClaimUnits[Claim unit maintenance]
	ClaimUnits --> Denial[Denial and fraud eligibility]
	Policy --> Audit[Audit condition maintenance]
	Audit --> History[Audit condition history tracking]
	Policy --> Derived[Derived reporting calculations]
	ClaimUnits --> Derived
	Derived --> Maps[Code map loading]
	Policy --> Retention[Retention date calculation]
	Denial --> Save{Save requested?}
	Audit --> Save
	History --> Save
	Save --> Validate{Validation rules pass?}
	Validate -->|No| Errors([Broken rules returned;<br>changes retained in memory])
	Validate -->|Yes| Persist[Insert/update/delete cascade]
	Persist --> Concurrency{RowsAffected = 1?}
	Concurrency -->|Yes| Done([Changes persisted;<br>objects marked clean])
	Concurrency -->|No| Contention([DB contention error added;<br>save reported as failed])
```

## Inherited operations and processes

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

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

| Operation | Intent | Provided by | Origin |
| --- | --- | --- | --- |
| Business object edit lifecycle | Snapshot, restore, and commit in-memory object edits through `BeginEdit()`, `CancelEdit()`, and `ApplyEdit()`. | `clsBusinessBase` | `SAIF.BOF.Framework` |
| Business object save lifecycle | Persist root or child business objects through the framework `Save()` and `SaveChild()` pipeline. | `clsBusinessBase` | `SAIF.BOF.Framework` |

#### Business object edit lifecycle (inherited)

1. `BeginEdit()` captures the current object state.
2. `CancelEdit()` restores the prior snapshot and reapplies business rules.
3. `ApplyEdit()` commits the edited state.

> **Origin**: This flow is defined in `SAIF.BOF.Framework` / `clsBusinessBase` and inherited by the library's business objects.

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

| Operation | Intent | Provided by | Origin |
| --- | --- | --- | --- |
| Business collection edit lifecycle | Snapshot, restore, and commit collection edits across child objects. | `clsBusinessCollectionBase` | `SAIF.BOF.Framework` |
| Managed collection save lifecycle | Persist deleted children first, then active children, through managed collection save behavior. | `clsBusinessCollectionBase` | `SAIF.BOF.Framework` |

#### Managed collection save lifecycle (inherited)

1. Save deleted child objects in the collection's deleted list.
2. Save remaining active child objects.
3. Clear the deleted list and complete the managed save.

> **Origin**: This flow is defined in `SAIF.BOF.Framework` / `clsBusinessCollectionBase` and inherited by the library's collections.

## Database interactions

The following table summarizes which operations read from or write to the database. Per-step SQL and table citations live in each operation's detail page under `operations/`.

| Operation | SQL | Tables | Type |
| --- | --- | --- | --- |
| [Policy unit CRUD](operations/policy-unit-crud.md) | [SQL-004](sql/SQL-004-us-policy-unit-insert.md), [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), [SQL-023](sql/SQL-023-us-policy-unit-rows-requiring-loss-edits.md), [SQL-024](sql/SQL-024-us-policy-unit-collection-by-policy.md), [SQL-025](sql/SQL-025-us-policy-unit-collection-by-policy-period.md), [SQL-029](sql/SQL-029-us-policy-unit-update.md), [SQL-035](sql/SQL-035-us-policy-unit-delete.md) | [US_POLICY_UNIT](database-tables.md#us-policy-unit) | Read / Write |
| [Claim unit maintenance](operations/claim-unit-maintenance.md) | [SQL-003](sql/SQL-003-us-claim-unit-insert.md), [SQL-012](sql/SQL-012-us-claim-unit-active-row-by-claim.md), [SQL-013](sql/SQL-013-us-claim-unit-row-by-claim-and-policy-unit.md), [SQL-016](sql/SQL-016-us-claim-unit-collection-by-policy-unit.md), [SQL-028](sql/SQL-028-us-claim-unit-update.md), [SQL-034](sql/SQL-034-us-claim-unit-delete.md) | [US_CLAIM_UNIT](database-tables.md#us-claim-unit) | Read / Write |
| [Denial and fraud eligibility](operations/denial-fraud-eligibility.md) | [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) | [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) | Read |
| [Audit condition maintenance](operations/audit-condition-maintenance.md) | [SQL-001](sql/SQL-001-us-audit-condition-insert.md), [SQL-005](sql/SQL-005-us-audit-condition-by-sequence.md), [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), [SQL-009](sql/SQL-009-us-audit-condition-by-update-user.md), [SQL-030](sql/SQL-030-us-audit-condition-delete-by-edit-type.md), [SQL-031](sql/SQL-031-us-audit-condition-delete-by-policy-period.md), [SQL-032](sql/SQL-032-us-audit-condition-delete-by-policy-period-and-edit-type.md), [SQL-033](sql/SQL-033-us-audit-condition-delete-by-policy-unit-and-edit-type.md) | [US_AUDIT_CONDITION](database-tables.md#us-audit-condition) | Read / Write |
| [Audit condition history tracking](operations/audit-condition-history-tracking.md) | [SQL-002](sql/SQL-002-us-audit-condition-history-insert.md), [SQL-010](sql/SQL-010-us-audit-condition-history-by-composite-key.md), [SQL-011](sql/SQL-011-us-audit-condition-history-collection-by-composite-key.md), [SQL-026](sql/SQL-026-us-audit-condition-history-update-last-update-date.md), [SQL-027](sql/SQL-027-us-audit-condition-history-collection-update.md) | [US_AUDIT_CONDITION_HISTORY](database-tables.md#us-audit-condition-history) | Read / Write |
| [Code map loading](operations/code-map-loading.md) | [SQL-017](sql/SQL-017-calculation-type-code-code-table-load.md), [SQL-018](sql/SQL-018-us-cost-type-code-code-table-load.md), [SQL-019](sql/SQL-019-us-offset-type-code-code-table-load.md) | [CALCULATION_TYPE_CODE](database-tables.md#calculation-type-code), [US_COST_TYPE_CODE](database-tables.md#us-cost-type-code), [US_OFFSET_TYPE_CODE](database-tables.md#us-offset-type-code) | Read |
| [Derived reporting calculations](operations/derived-reporting-calculations.md) | None | None | None (in-memory calculation) |
| [Retention date calculation](operations/retention-date-calculation.md) | None | None | None (in-memory calculation) |

## Failure and edge-case behavior

- Optimistic concurrency is the dominant failure mode: every persisting operation checks `RowsAffected <> 1` and adds a DB contention error instead of throwing ([BR-US-020](business-rules.md#br-us-020-database-contention-on-update-or-delete-is-detected-by-checking-rowsaffected-1)). Detailed per-operation behavior is documented on each operation page.
- Retrieve paths generally return an empty or unfilled object (still marked `Old`) when no row matches, rather than raising a not-found error; callers must check the populated state themselves.
- Several code paths traced during this review appear to be dead or defective as written: `clsClaimUnit.Create()` allocates a new policy-unit sequence number instead of using the one supplied by the caller; `clsAuditConditionCollection.GetAuditConditions` ignores its policy number/period arguments and returns all rows; `clsAuditConditionCollection.GetUpdateUserAudits` raises an exception due to a criteria dispatch bug; `clsPolicyUnitCollection`'s internal `LossEditFlag` retrieve type has no public factory method; and `clsAuditConditionHistory`'s object-level and collection-level update statements diverge in how they set `LAST_UPDATE_DATE`. Each is documented in detail, with confidence markers, on its owning operation page.
- Denial-final and fully-fraudulent checks apply only to policy units effective on or after 2013-01-01 ([BR-US-027](business-rules.md#br-us-027-denial-final-checks-and-fully-fraudulent-checks-only-apply-to-policy-units-effective-on-or-after-2013-01-01)).
- Database-backed code maps are cached per process and silently drop unrecognized database code values rather than erroring.

## 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)
- [Configuration](configuration.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.

## Sources

- `Business\SAIF.Business.UnitStat\clsPolicyUnit.vb`
- `Business\SAIF.Business.UnitStat\clsPolicyUnitCollection.vb`
- `Business\SAIF.Business.UnitStat\clsClaimUnit.vb`
- `Business\SAIF.Business.UnitStat\clsClaimUnitCollection.vb`
- `Business\SAIF.Business.UnitStat\clsAuditCondition.vb`
- `Business\SAIF.Business.UnitStat\clsAuditConditionCollection.vb`
- `Business\SAIF.Business.UnitStat\clsAuditConditionHistory.vb`
- `Business\SAIF.Business.UnitStat\clsAuditConditionHistoryCollection.vb`
- `Business\SAIF.Business.UnitStat\clsLossBase.vb`
- `Business\SAIF.Business.UnitStat\clsExposureBase.vb`
- `Business\SAIF.Business.UnitStat\mdlCodeMaps.vb`
- `Business\SAIF.Business.UnitStat\Extensions.vb`
- `Business\SAIF.Business.UnitStat\Constants.vb`
- `Legacy\BusinessObjectFramework\clsBusinessBase.vb`
- `Legacy\BusinessObjectFramework\clsBusinessCollectionBase.vb`
