---
title: SAIF.Business.UnitStat architecture
summary: Architectural responsibilities, boundaries, and interaction patterns.
status: draft
owner: SAIF
last_reviewed: 2026-07-24
library: SAIF.Business.UnitStat
reference_type: package
---

# SAIF.Business.UnitStat architecture

`SAIF.Business.UnitStat` centers on a policy-unit root aggregate, a claim-unit association layer, audit-condition tracking objects, shared loss/exposure base contracts, and a code-mapping module that translates SAIF values to NCCI reporting codes.

## Responsibilities

- Represent policy-level unit-stat data as the root aggregate.
- Represent claim-level reporting rows and flags.
- Persist current and historical audit conditions.
- Provide reusable loss/exposure contracts and code maps.

## Component boundaries

- **Policy unit layer**: `clsPolicyUnit` and `clsPolicyUnitCollection`.
- **Claim unit layer**: `clsClaimUnit` and `clsClaimUnitCollection`.
- **Audit layer**: `clsAuditCondition`, `clsAuditConditionCollection`, `clsAuditConditionHistory`, and `clsAuditConditionHistoryCollection`.
- **Base-contract layer**: `clsLossBase` / `iLossData` and `clsExposureBase` / `iExposureData` provide shared behavior for downstream concrete types*.
- **Code-mapping layer**: `mdlCodeMaps` exposes static and database-backed code maps.

## Interaction model

- BOF criteria classes drive policy, claim, and audit persistence.
- Claim denial and fraud checks use direct scalar SQL.
- Audit-condition history follows a retrieve-then-insert-or-update upsert pattern.
- Database-backed code maps load on first access and are reused.

## Architecture diagram

The following diagram shows the main components and persistence boundaries.

```mermaid

flowchart TD

    Consumer[Consuming reporting library] --> PolicyUnit[clsPolicyUnit<br>root aggregate]

    PolicyUnit --> ClaimUnits[clsClaimUnitCollection]

    PolicyUnit --> AuditConditions[clsAuditConditionCollection]

    AuditConditions --> AuditHistory[clsAuditConditionHistory<br>and collection]

    PolicyUnit --> Oracle[(Oracle<br>US_POLICY_UNIT)]

    ClaimUnits --> Oracle2[(Oracle<br>US_CLAIM_UNIT)]

    AuditConditions --> Oracle3[(Oracle<br>US_AUDIT_CONDITION<br>US_AUDIT_CONDITION_HISTORY)]

    PolicyUnit --> CodeMaps[mdlCodeMaps<br>SAIF/NCCI mapping]

    CodeMaps --> Oracle4[(Oracle code tables<br>US_OFFSET_TYPE_CODE<br>US_COST_TYPE_CODE<br>CALCULATION_TYPE_CODE)]

    LossBase[clsLossBase / clsExposureBase<br>shared contracts] -.-> Downstream[Concrete reporting types*]

```

## Sequence diagram

The following diagram shows policy-unit creation and activation through the BOF lifecycle.

```mermaid

sequenceDiagram

    participant Caller

    participant PolicyUnit as clsPolicyUnit

    participant BOF

    participant Oracle

    Caller->>PolicyUnit: NewPolicyUnit(...)

    PolicyUnit->>BOF: GetNextSeqNum(US_POLICY_UNIT_SEQ)

    Caller->>PolicyUnit: ActivatePolicyUnit()

    Caller->>PolicyUnit: Save()

    BOF->>Oracle: Execute SQL-004 or SQL-029

    Oracle-->>BOF: Rows affected

    BOF-->>PolicyUnit: Persisted aggregate

```

The following diagram shows the audit-condition history upsert path.

```mermaid

sequenceDiagram

    participant Caller

    participant History as clsAuditConditionHistory

    participant Oracle

    Caller->>History: GetAuditConditionHistory(...)

    History->>Oracle: SQL-010 retrieve by composite key

    alt Row exists

        History->>Oracle: SQL-026 update LAST_UPDATE_DATE

    else Row missing

        History->>Oracle: SQL-002 insert history row

    end

    History-->>Caller: Current history record

```

## Design constraints

- `clsLossBase` and `clsExposureBase` rely on downstream concrete implementations not present in this library*.
- `UnitStatServices.GetNCCIPolicyNumber` and `GetLastValuationDate` are external to the supplied library findings*.
- `SAIF.BOF.Business.View.Provider` is declared as a package dependency, but no direct import was confirmed**.
- `HasPolicyUnitErrors` appears to conflict with its adjacent code comment and requires domain review**.

## Related documentation

- [Index](index.md)
- [Overview](overview.md)
- [Dependencies](dependencies.md)
- [Operations and processes](operations-processes.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\packages.config`
