---
title: Current loss and NCCI record retrieval
summary: Retrieves the enriched "current loss" view of a claim and the underlying NCCI loss record, deriving reporting-year and catastrophe classification.
status: draft
owner: SAIF
last_reviewed: 2026-07-30
library: SAIF.Business.UnitStat.Claim
reference_type: package
operation_id: OP-USC-02
trigger: Caller invokes clsCurrentLoss.GetCurrentLoss / clsCurrentLossCollection.GetCurrentLossCollection or clsNCCILossRecord.GetNCCILossRecord
---

# Current loss and NCCI record retrieval

Current-loss retrieval builds the read-only "current status of a claim, as reported for unit statistical purposes" view used by valuation and reporting callers. `clsNCCILossRecord` (inheriting the shared `clsLossBase` retrieval/derivation logic from `SAIF.Business.UnitStat`) retrieves the base `US_NCCI_LOSS_RECORD` row and derives reporting fields; `clsCurrentLoss` (a subclass of `clsNCCILossRecord`) enriches that row with policy-unit, claim-unit, injury-coding, unit-report/reported-loss, and catastrophe data joined from a wide multi-table query; `clsCurrentLossCollection` retrieves multiple current-loss rows for a claim or policy unit.

| Field | Value |
| --- | --- |
| **Operation ID** | OP-USC-02 |
| **Trigger** | `clsNCCILossRecord.GetNCCILossRecord(dpi, claimID)` for the base record; `clsCurrentLoss.GetCurrentLoss(dpi, claimID)` for the enriched single record; `clsCurrentLossCollection.GetCurrentLossCollection(dpi, ...)` for multi-row retrieval |
| **Inputs** | `ClaimID` (primary retrieval key), optional policy/unit-report filters on the collection |
| **Outputs** | Read-only `clsCurrentLoss` / `clsNCCILossRecord` object(s) populated with loss, injury-coding, reporting, and catastrophe attributes |
| **Primary components** | `clsNCCILossRecord`, `clsCurrentLoss`, `clsCurrentLossCollection` |
| **Entry point** | `Business\SAIF.Business.UnitStat.Claim\Current Loss\clsNCCILossRecord.vb`, `Business\SAIF.Business.UnitStat.Claim\Current Loss\clsCurrentLoss.vb`, `Business\SAIF.Business.UnitStat.Claim\Current Loss\clsCurrentLossCollection.vb` |

## Steps

1. **Base NCCI record retrieval.** `clsNCCILossRecord.Load` sets the retrieval `Criteria` (constant `SQLRetrieve`, selecting from `us_ncci_loss_record`) *before* the `ClaimID` property is populated on the criteria object — a sequencing bug that means the first retrieval on a freshly-constructed criteria can run with an empty/default claim filter until the criteria's `ClaimID` is subsequently assigned.* No catalog entry exists for this base statement because it is not indexed as a numbered SQL statement in this library's SQL catalog; it selects directly against `US_NCCI_LOSS_RECORD`, which is likewise not yet cataloged in [Database tables](../database-tables.md).**
2. **Derived reporting values.** `clsNCCILossRecord` inherits from `clsLossBase` in `SAIF.Business.UnitStat`, which computes derived reporting-year and related classification fields from the raw loss record.

   > **Origin:** The derived-value calculation itself is implemented in `clsLossBase` in `SAIF.Business.UnitStat`, which is documented in its previous (pre-migration) format. See [Calculate derived reporting values](../../saif-business-unitstat/operations/derived-reporting-calculations.md).
3. **Enriched current-loss retrieval.** `clsCurrentLoss.BeforeRetrieve` (or the equivalent override) issues a wide join across policy unit, claim unit, injury coding, unit report, reported loss, coverage combination, and catastrophe tables ([SQL-007](../sql/sql-007-select.md)):
   ```sql
   Select ... 
   From us_policy_unit, us_claim_unit, cl_injury_claim, cl_injury_source_code,
        cl_injury_nature_code, cl_body_part_code, us_unit_report, us_report_batch,
        us_reported_loss, us_coverage_combination, us_catastrophic_claim, us_catastrophe
   Where ...
   ```
   This enrichment query also derives the NCCI claim-type code ([BR-001](../business-rules.md#br-001-ncci-claim-type-derives-from-claim-and-coverage-context)), branches on non-compensable reporting treatment ([BR-002](../business-rules.md#br-002-non-compensable-claims-use-special-settlement-and-fraud-logic)), and derives the NCCI loss-type code ([BR-003](../business-rules.md#br-003-ncci-loss-type-derives-from-injury-occupational-disease-codes)) via injury-coding lookups (`cl_injury_source_code`, `cl_injury_nature_code`, `cl_body_part_code`), reporting context (`us_unit_report`, `us_report_batch`, `us_reported_loss`), coverage-combination membership (`us_coverage_combination`), and catastrophe classification (`us_catastrophic_claim`, `us_catastrophe`).
4. **Policy unit / claim unit delegation.** Where `clsCurrentLoss` needs full policy-unit or claim-unit business objects (not just the joined columns), it delegates to `clsPolicyUnit` and `clsClaimUnit`.

   > **Origin:** `clsPolicyUnit` and `clsClaimUnit` are implemented in `SAIF.Business.UnitStat`, documented in its previous format. See [Retrieve active policy unit](../../saif-business-unitstat/operations/policy-unit-crud.md) and [Create, update, or delete claim unit](../../saif-business-unitstat/operations/claim-unit-maintenance.md).
5. **Collection retrieval.** `clsCurrentLossCollection.GetCurrentLossCollection` retrieves multiple rows using criteria built from the caller's filter and loads a `clsCurrentLoss` per row. Its natural-key constructor path is exercised only when a caller supplies a natural key rather than a surrogate claim ID — this path was not observed being called from any other class in the library during tracing and its correctness under partial-key input is unconfirmed.**

## Process flow

```mermaid
flowchart TD
	Start([Caller requests current loss]) --> Base[Retrieve base US_NCCI_LOSS_RECORD row]
	Base --> Derive[clsLossBase derives reporting-year and classification fields]
	Derive --> Enrich[Join policy unit, claim unit,<br>injury coding, reporting, catastrophe data]
	Enrich --> Deleg{Full policy/claim unit object needed?}
	Deleg -->|Yes| PU[Delegate to clsPolicyUnit / clsClaimUnit]
	Deleg -->|No| Result
	PU --> Result([clsCurrentLoss populated])
	Start2([Caller requests collection]) --> CollCriteria[Build criteria from filter]
	CollCriteria --> CollRetrieve[Retrieve matching rows]
	CollRetrieve --> CollLoad[Load one clsCurrentLoss per row]
	CollLoad --> CollResult([Collection populated])
```

## Failure and edge-case behavior
- `clsNCCILossRecord.Load` sets `Criteria` before the claim ID filter is populated, which is an ordering bug rather than intentional behavior; downstream callers rely on a subsequent property assignment to correct the filter before the actual data-portal fetch executes.*
- `US_NCCI_LOSS_RECORD` and `US_OFFSET_TYPE_CODE` are referenced directly in source but are not yet cataloged in [Database tables](../database-tables.md); they are named here without a link pending a future catalog update.**
- `clsCurrentLossCollection`'s natural-key constructor overload was not exercised by any other in-library caller found during tracing, so its behavior under partial or malformed natural-key input is unconfirmed.**

## Related documentation
- [Operations and processes](../operations-processes.md)
- [Business rules](../business-rules.md)
- [SQL catalog](../sql/index.md)
- [Database tables](../database-tables.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.Claim\Current Loss\clsNCCILossRecord.vb`
- `Business\SAIF.Business.UnitStat.Claim\Current Loss\clsCurrentLoss.vb`
- `Business\SAIF.Business.UnitStat.Claim\Current Loss\clsCurrentLossCollection.vb`
