---
title: SAIF.Business.UnitStat.Claim 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.Claim
reference_type: package
---

# SAIF.Business.UnitStat.Claim business rules

This page captures business rules enforced by this library.

## BR-001: NCCI claim type derives from claim and coverage context

| Field | Value |
| --- | --- |
| **Statement** | The NCCI claim type code is derived from the part-A claim, optional part-B claim, and coverage code. |
| **Trigger** | When current-loss rows are retrieved. |
| **Enforcement** | `clsCurrentLoss` calls `pk73304_loss_summary.get_ncci_claim_type_code` inside its retrieval SQL. |
| **Outcome** | Current-loss rows surface the derived NCCI claim-type code. |
| **Tables** | [US_COVERAGE_COMBINATION](database-tables.md#us_coverage_combination), [US_CLAIM_UNIT](database-tables.md#us_claim_unit), [CL_INJURY_CLAIM](database-tables.md#cl_injury_claim) |
| **SQL** | [SQL-007](sql/sql-007-select.md) |
| **Source** | `Business\SAIF.Business.UnitStat.Claim\Current Loss\clsCurrentLoss.vb` |

---

## BR-002: Non-compensable claims use special settlement and fraud logic

| Field | Value |
| --- | --- |
| **Statement** | Claims reported as non-compensable use alternate settlement-type and fraud-type derivation logic. |
| **Trigger** | When current-loss rows are retrieved for reporting. |
| **Enforcement** | `clsCurrentLoss` uses `pk73304_loss_summary.report_non_compensable` to branch to specialized settlement and fraud functions. |
| **Outcome** | Current-loss rows reflect the correct non-compensable reporting treatment. |
| **Tables** | [US_CLAIM_UNIT](database-tables.md#us_claim_unit), [US_REPORTED_LOSS](database-tables.md#us_reported_loss) |
| **SQL** | [SQL-007](sql/sql-007-select.md) |
| **Source** | `Business\SAIF.Business.UnitStat.Claim\Current Loss\clsCurrentLoss.vb` |

---

## BR-003: NCCI loss type derives from injury occupational-disease codes

| Field | Value |
| --- | --- |
| **Statement** | The NCCI loss-type code is derived from the injury occupational-disease indicator. |
| **Trigger** | When current-loss rows are retrieved. |
| **Enforcement** | `clsCurrentLoss` calls `pk73304_loss_summary.get_ncci_loss_type_code` within its select statement. |
| **Outcome** | Current-loss rows contain the derived NCCI loss-type code. |
| **Tables** | [CL_INJURY_CLAIM](database-tables.md#cl_injury_claim) |
| **SQL** | [SQL-007](sql/sql-007-select.md) |
| **Source** | `Business\SAIF.Business.UnitStat.Claim\Current Loss\clsCurrentLoss.vb` |

---

## BR-004: Coverage-combination identifiers come from an Oracle sequence

| Field | Value |
| --- | --- |
| **Statement** | New coverage-combination rows require a generated sequence value from Oracle before insert. |
| **Trigger** | When a coverage-combination row is created. |
| **Enforcement** | `clsCoverageCombinationCollection.Criteria.CreateSQL` selects `COVERAGE_COMBINATION_SEQ_NUM_NEXTVAL` from `DUAL`. |
| **Outcome** | Coverage-combination inserts persist unique primary identifiers. |
| **Tables** | [DUAL](database-tables.md#dual), [US_COVERAGE_COMBINATION](database-tables.md#us_coverage_combination) |
| **SQL** | [SQL-001](sql/sql-001-select.md), [SQL-002](sql/sql-002-insert.md), [SQL-003](sql/sql-003-insert.md) |
| **Source** | `Business\SAIF.Business.UnitStat.Claim\Coverage Combination\clsCoverageCombinationCollection.vb` |

---

## BR-005: Loss-summary derivations stay centralized in the Oracle package

| Field | Value |
| --- | --- |
| **Statement** | Unit-stat helper objects retrieve denial, fraud-recovery, refund, and related derived reporting values through `PK73304_LOSS_SUMMARY` package calls rather than inline SQL. |
| **Trigger** | When loss-summary helper objects request derived claim values during read operations. |
| **Enforcement** | `clsDeniedFinal`, `clsFinalDenial`, `clsFraudRecovery`, `clsRefund`, and `clsLossValuation` call named `PK73304_LOSS_SUMMARY` functions or procedures from their criteria read paths. |
| **Outcome** | Oracle package logic remains the authoritative source for loss-summary derivations and returned reporting values. |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.UnitStat.Claim\Loss Summary\clsDeniedFinal.vb`; `Business\SAIF.Business.UnitStat.Claim\Loss Summary\clsFinalDenial.vb`; `Business\SAIF.Business.UnitStat.Claim\Loss Summary\clsFraudRecovery.vb`; `Business\SAIF.Business.UnitStat.Claim\Loss Summary\clsRefund.vb`; `Business\SAIF.Business.UnitStat.Claim\Loss Summary\clsLossValuation.vb` |

---

## BR-006: Indemnity totals are floored by settlement third-party-prediction offsets and cannot go negative

| Field | Value |
| --- | --- |
| **Statement** | The derived total incurred and total paid indemnity amounts on a loss summary can never fall below the sum of `SETL`-category offsets whose `OffsetTypeCode` is `TPN` (third-party-prediction non-lien), and are never allowed to go below zero. |
| **Trigger** | Whenever `clsLossSummary.TotalIncurredIndemnityAmount` or `TotalPaidIndemnityAmount` is evaluated — during valuation, save, or dirty-checking. |
| **Enforcement** | `clsLossSummary.TotalIncurredIndemnityAmount` and `TotalPaidIndemnityAmount` compute a floor from matching `SETL`/`TPN` offsets on `LossCategories`, raise the total to the floor if the summed category amounts fall below it, and otherwise clamp the result to a minimum of zero. |
| **Outcome** | Persisted indemnity totals never understate the third-party-prediction floor and never persist as negative amounts. |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.UnitStat.Claim\Loss Summary\clsLossSummary.vb` |

---

## BR-007: Loss-summary persistence binds derived totals, not raw in-memory amounts

| Field | Value |
| --- | --- |
| **Statement** | When a loss summary is inserted or updated, the persisted `INCURRED_MEDICAL_AMOUNT`, `INCURRED_INDEMNITY_AMOUNT`, `PAID_MEDICAL_AMOUNT`, and `PAID_INDEMNITY_AMOUNT` columns are populated from the computed `Total*Amount` properties (derived from the Claim Financial API and category offsets), not from the plain property backing fields set by callers. |
| **Trigger** | `clsLossSummary.BeforeInsert` and `BeforeUpdate`. |
| **Enforcement** | Both methods bind `TotalIncurredMedicalAmount`, `TotalIncurredIndemnityAmount`, `TotalPaidMedicalAmount`, and `TotalPaidIndemnityAmount` as the SQL parameter values for their respective columns. |
| **Outcome** | The database always reflects the current derived valuation, even if a caller attempted to set the raw amount properties directly. |
| **Confidence** | Verified |
| **Tables** | [US_LOSS_SUMMARY](database-tables.md#us_loss_summary) |
| **SQL** | [SQL-006](sql/sql-006-insert.md), [SQL-021](sql/sql-021-update.md) |
| **Source** | `Business\SAIF.Business.UnitStat.Claim\Loss Summary\clsLossSummary.vb` |

---

## BR-008: Voided claims bypass fraud, refund, and third-party offset stacking

| Field | Value |
| --- | --- |
| **Statement** | When a claim's status code is `V` (Void), loss valuation creates offsets only from the single most recent claim payment (`VoidedClaims` offset type) instead of layering fraud-recovery, refund, and third-party-prediction offsets. |
| **Trigger** | `clsLossValuation.ValueLossSummary` branches on `claimData.StatusCode = "V"`. |
| **Enforcement** | The void branch calls `clsVoidedClaimOffsets.CreateOffsets` exclusively; the non-void branch calls `clsNDReimbursement.CreateOffsets` instead, and both branches occur after the shared fraud/refund/third-party offset calls that run for every valuation regardless of status. |
| **Outcome** | A voided claim's loss summary reflects a single reversal offset per affected category rather than the full offset stack applied to active claims. |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.UnitStat.Claim\Loss Summary\clsLossValuation.vb`; `Business\SAIF.Business.UnitStat.Claim\Loss Summary\clsVoidedClaimOffsets.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)
- [Procedures](procedures/index.md)
- [API reference](api/index.md)

## Sources
- `Business\SAIF.Business.UnitStat.Claim\Coverage Combination\clsCoverageCombinationCollection.vb`
- `Business\SAIF.Business.UnitStat.Claim\Current Loss\clsCurrentLoss.vb`
