---
title: Save (insert/update) a class coverage line
summary: Persist a class coverage.
status: draft
owner: Technical Writer
last_reviewed: 2026-07-31
library: SAIF.Business.Policy.Premium
reference_type: package
operation_id: OP-003
trigger: Premium recalculation or manual premium maintenance saves a premium set
---

# Save (insert/update) a class coverage line

Premium recalculation or manual premium maintenance saves a premium set

| Field | Value |
| --- | --- |
| **Operation ID** | OP-003 |
| **Trigger** | Premium recalculation or manual premium maintenance saves a premium set |
| **Inputs** | The dirty clsClassCoverage instance |
| **Outputs** | Persisted row; sequence-assigned key on insert |
| **Primary components** | `clsClassCoverage insert/update lifecycle` |
| **Entry point** | `Business\SAIF.Business.Policy.Premium\clsClassCoverage.vb` |

## Steps

1. On insert, `clsClassCoverage.GetNextClassCoverageSeq` executes a direct scalar statement against `CLASS_COVERAGE_SEQ.NEXTVAL` (optionally `@POLDB`) to obtain the new key.
2. Business rules [BR-001](../business-rules.md#br-001-manual-class-number-is-required), [BR-002](../business-rules.md#br-002-manual-class-number-must-resolve), [BR-003](../business-rules.md#br-003-manual-class-usage-code-is-required), [BR-004](../business-rules.md#br-004-class-and-usage-must-match-rating-period), [BR-005](../business-rules.md#br-005-employee-and-rate-type-codes-are-required), [BR-006](../business-rules.md#br-006-fela-classes-are-blocked-on-assigned-risk-periods), [BR-007](../business-rules.md#br-007-manual-class-type-must-match-the-base-class) are evaluated; if `IsValid` is false the save is refused by the framework.*
3. `BeforeInsert` / `BeforeUpdate` build the portal request from `Criteria.InsertSQL` / `Criteria.UpdateSQL` and add parameters. *(SQL: `PREM_HIST_CLASS_COVERAGE`.)*
4. `ProcessPortalRequest` executes the statement.
5. `AfterInsert` / `AfterUpdate` check `RowsAffected`; when `RowsAffected <> 1` the code calls `AddErrorMessage(..., BOC.Messages.DBContentionError)`, signalling an optimistic-concurrency failure.
6. `MarkOld()` resets the entity state on success.

## Process flow

The following diagram visualizes this operation's control flow.

```mermaid

flowchart TD

    Start([Trigger]) --> S1[Step 1]

    S1 --> S2[Step 2]

    S2 --> EndOk([Outputs returned])

```

## Failure and edge-case behavior

- See the linked rules and SQL references above for validation failures, null-handling, and persistence contention behavior.

## 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.Policy.Premium\clsClassCoverage.vb`
- `Business\SAIF.Business.Policy.Premium\clsClassCoverageBase.vb`
