---
title: SAIF.Business.Policy.Premium operations and processes
summary: Operation catalog and cross-operation hub for premium, rating-plan, billing-support, and reporting workflows.
status: draft
owner: Technical Writer
last_reviewed: 2026-07-31
library: SAIF.Business.Policy.Premium
reference_type: package
---

# SAIF.Business.Policy.Premium operations and processes

This page is the operation catalog and cross-operation hub for `SAIF.Business.Policy.Premium`.

## Operation catalog

| Operation | Intent | Trigger | Inputs | Outputs | Rules | Tables | SQL |
| --- | --- | --- | --- | --- | --- | --- | --- |
| [Retrieve the most recent premium set for a policy period](operations/retrieve-the-most-recent-premium-set-for-a-policy-period.md) | Retrieve most recent premium set | Caller needs the current premium picture for a policy period | Policy number, policy period effective date, database selection (PremiumSetDatabases)* | A populated clsPremiumSet, or a "new"/empty instance when no row exists* | — | [PREM_HIST_SUMMARY](database-tables.md#prem_hist_summary) | [SQL-071](sql/SQL-071-saif-business-policy-premium.md) |
| [Retrieve class coverages for a premium set](operations/retrieve-class-coverages-for-a-premium-set.md) | Retrieve class coverages | Premium detail display, recalculation, or reporting | Premium set identifier; optionally an affiliate identifier | clsClassCoverageCollection populated with clsClassCoverage items | [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) | [PREM_HIST_CLASS_COVERAGE](database-tables.md#prem_hist_class_coverage) | [SQL-041](sql/SQL-041-saif-business-policy-premium.md) |
| [Save (insert/update) a class coverage line](operations/save-insert-update-a-class-coverage-line.md) | Persist a class coverage | Premium recalculation or manual premium maintenance saves a premium set | The dirty clsClassCoverage instance | Persisted row; sequence-assigned key on insert | [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), [BR-025](business-rules.md#br-025-rows-affected-must-equal-one-for-persistence-success) | [PREM_HIST_CLASS_COVERAGE](database-tables.md#prem_hist_class_coverage) | [SQL-122](sql/SQL-122-saif-business-policy-premium.md), [SQL-017](sql/SQL-017-saif-business-policy-premium.md) |
| [Compute premium summary adjustment sub-totals](operations/compute-premium-summary-adjustment-sub-totals.md) | Premium summary adjustment sub-totalling | Premium display / document generation needs grouped premium sub-totals | A collection of iPremiumSummaryAdjustment lines | PremiumSummaryAdjustmentSubTotalList of SubTotalPremiumSummaryAdjustment entries | [BR-013](business-rules.md#br-013-subtotals-must-use-one-rating-rule-master), [BR-014](business-rules.md#br-014-per-period-subtotal-eligibility-is-filtered-by-rule-metadata), [BR-015](business-rules.md#br-015-whole-term-subtotal-eligibility-is-filtered-by-rule-metadata) | — | — |
| [Answer a named premium amount query](operations/answer-a-named-premium-amount-query.md) | Premium amount query | Any consumer needs a named premium figure (standard, discounted, estimated, NEAP, …) | An IPremiumAmountProvider (e.g. clsPremiumSet) and a PremiumAmountTypes value (26 members) | A decimal premium amount | [BR-016](business-rules.md#br-016-neap-uses-base-amounts-instead-of-difference-amounts), [BR-017](business-rules.md#br-017-discount-equals-discounted-minus-standard-premium) | — | — |
| [Build a premium summary adjustment's policy-document description](operations/build-a-premium-summary-adjustments-policy-document-description.md) | Policy document adjustment description | Policy document generation renders the premium adjustment lines | The adjustment's type code, factor, base amount, DCBS split count, ELCB status | Display string | [BR-018](business-rules.md#br-018-dcbs-descriptions-switch-between-percentage-and-based-on-text), [BR-019](business-rules.md#br-019-adjusted-rate-dcbs-descriptions-use-subject-premium-when-elcb-applies), [BR-020](business-rules.md#br-020-neap-descriptions-replace-the-normal-adjustment-text) | [BILLING_MASTER](database-tables.md#billing_master), [BILLING_DEFAULTS](database-tables.md#billing_defaults), [PAYMENT_PLAN_TYPE_CODE](database-tables.md#payment_plan_type_code) | [SQL-118](sql/SQL-118-saif-business-policy-premium.md), [SQL-116](sql/SQL-116-saif-business-policy-premium.md) |
| [Retrieve SAIF Plus information](operations/retrieve-saif-plus-information.md) | Get SAIF Plus info | A SAIFPLUS premium summary adjustment needs its descriptive/rate data | in_policy_num, in_policy_period_eff_date | out_pp_eff_date, out_saifplus_eff_date, out_saifplus_desc (100), out_saifplus_rate, out_saifplus_max, out_saifplus_combo_max | — | — | [SQL-118](sql/SQL-118-saif-business-policy-premium.md) |
| [Determine ELCB status](operations/determine-elcb-status.md) | Determine employers-liability coverage bonus status | Description building and adjusted-rate handling need to know whether ELCB applies | Policy number, policy period effective date | ELCB status code; sets m_HasELCB | [BR-021](business-rules.md#br-021-elcb-applies-when-liability-rows-span-a-non-zero-range) | [POLICY_PERIOD_EMP_LIAB](database-tables.md#policy_period_emp_liab) | [SQL-117](sql/SQL-117-saif-business-policy-premium.md) |
| [Determine the NCCI statistical class number](operations/determine-the-ncci-statistical-class-number.md) | Determine NCCI stat class | Statistical reporting requires the NCCI stat class for an adjustment | Seven input parameters | out_stat_class (4 chars, ParameterDirection.ReturnValue) | [BR-022](business-rules.md#br-022-null-statistical-class-becomes-an-empty-string) | — | [SQL-119](sql/SQL-119-saif-business-policy-premium.md) |
| [Recalculate modified premium on a specified rate tier](operations/recalculate-modified-premium-on-a-specified-rate-tier.md) | Recalculate modified premium on a specified tier | Renewal/what-if premium recalculation on a chosen rate tier | Policy identity plus a rate tier (default "E") | Scalar manual premium (out_manual_premium, ParameterDirection.ReturnValue) | — | — | [SQL-120](sql/SQL-120-saif-business-policy-premium.md) |
| [Retrieve DCBS splits](operations/retrieve-dcbs-splits.md) | Get DCBS splits | DCBS assessment processing needs the split values for a premium set | Premium set / policy identity | Scalar split value(s) | — | [PREM_HIST_PREM_ADJUSTMENT](database-tables.md#prem_hist_prem_adjustment) | [SQL-124](sql/SQL-124-saif-business-policy-premium.md) |
| [Merge renewal and period rating plans](operations/merge-renewal-and-period-rating-plans.md) | Get applicable rating plans | Rating needs the effective plan list for a policy | Renewal rating plan and policy period rating plans | Ordered sequence of iPolicyPeriodRatingPlan | [BR-023](business-rules.md#br-023-renewal-plans-join-the-merged-list-only-when-policy-number-exists) | [POLICY_RENEWAL_RATING_PLAN](database-tables.md#policy_renewal_rating_plan), [POLICY_PERIOD_RATING_PLAN](database-tables.md#policy_period_rating_plan) | — |
| [Retrieve reported payroll for premium history](operations/retrieve-reported-payroll-for-premium-history.md) | Get reported payroll | Class coverage needs reported payroll from premium history summary | Policy/period identifiers | Reported payroll amount | [BR-026](business-rules.md#br-026-weighted-claim-frequency-uses-payroll-weighted-averaging) | [PREM_HIST_CLASS_COVERAGE](database-tables.md#prem_hist_class_coverage) | [SQL-040](sql/SQL-040-saif-business-policy-premium.md) |

## Process flow diagram

The following diagram visualizes the main premium workflow.

```mermaid

flowchart TD

    Start([Caller needs premium data]) --> Set[Retrieve premium set]

    Set --> Coverage[Retrieve class coverages]

    Coverage --> Save{Persist changes?}

    Save -->|Yes| Persist[Save class coverage]

    Save -->|No| Totals[Compute subtotals]

    Persist --> Totals

    Totals --> Amount[Answer premium amount query]

    Amount --> Helpers[Description and helper lookups]

    Helpers --> Done([Return results])

```

## Database interactions

| Operation | SQL | Tables | Type |
| --- | --- | --- | --- |
| [Retrieve the most recent premium set for a policy period](operations/retrieve-the-most-recent-premium-set-for-a-policy-period.md) | [SQL-071](sql/SQL-071-saif-business-policy-premium.md) | [PREM_HIST_SUMMARY](database-tables.md#prem_hist_summary) | Read / helper |
| [Retrieve class coverages for a premium set](operations/retrieve-class-coverages-for-a-premium-set.md) | [SQL-041](sql/SQL-041-saif-business-policy-premium.md) | [PREM_HIST_CLASS_COVERAGE](database-tables.md#prem_hist_class_coverage) | Read / helper |
| [Save (insert/update) a class coverage line](operations/save-insert-update-a-class-coverage-line.md) | [SQL-122](sql/SQL-122-saif-business-policy-premium.md), [SQL-017](sql/SQL-017-saif-business-policy-premium.md) | [PREM_HIST_CLASS_COVERAGE](database-tables.md#prem_hist_class_coverage) | Write |
| [Build a premium summary adjustment's policy-document description](operations/build-a-premium-summary-adjustments-policy-document-description.md) | [SQL-118](sql/SQL-118-saif-business-policy-premium.md), [SQL-116](sql/SQL-116-saif-business-policy-premium.md) | [BILLING_MASTER](database-tables.md#billing_master), [BILLING_DEFAULTS](database-tables.md#billing_defaults), [PAYMENT_PLAN_TYPE_CODE](database-tables.md#payment_plan_type_code) | Read / helper |
| [Retrieve SAIF Plus information](operations/retrieve-saif-plus-information.md) | [SQL-118](sql/SQL-118-saif-business-policy-premium.md) | — | Read / helper |
| [Determine ELCB status](operations/determine-elcb-status.md) | [SQL-117](sql/SQL-117-saif-business-policy-premium.md) | [POLICY_PERIOD_EMP_LIAB](database-tables.md#policy_period_emp_liab) | Read / helper |
| [Determine the NCCI statistical class number](operations/determine-the-ncci-statistical-class-number.md) | [SQL-119](sql/SQL-119-saif-business-policy-premium.md) | — | Read / helper |
| [Recalculate modified premium on a specified rate tier](operations/recalculate-modified-premium-on-a-specified-rate-tier.md) | [SQL-120](sql/SQL-120-saif-business-policy-premium.md) | — | Read / helper |
| [Retrieve DCBS splits](operations/retrieve-dcbs-splits.md) | [SQL-124](sql/SQL-124-saif-business-policy-premium.md) | [PREM_HIST_PREM_ADJUSTMENT](database-tables.md#prem_hist_prem_adjustment) | Read / helper |
| [Merge renewal and period rating plans](operations/merge-renewal-and-period-rating-plans.md) | — | [POLICY_RENEWAL_RATING_PLAN](database-tables.md#policy_renewal_rating_plan), [POLICY_PERIOD_RATING_PLAN](database-tables.md#policy_period_rating_plan) | Read / helper |
| [Retrieve reported payroll for premium history](operations/retrieve-reported-payroll-for-premium-history.md) | [SQL-040](sql/SQL-040-saif-business-policy-premium.md) | [PREM_HIST_CLASS_COVERAGE](database-tables.md#prem_hist_class_coverage) | Read / helper |

## Failure and edge-case behavior

- Class-coverage persistence treats any `RowsAffected <> 1` outcome as a BOF contention error through [BR-025](business-rules.md#br-025-rows-affected-must-equal-one-for-persistence-success).
- Subtotal generation refuses mixed rating-rule masters through [BR-013](business-rules.md#br-013-subtotals-must-use-one-rating-rule-master).
- Premium-amount queries return zero when no subtotal matches, and NEAP uses base amounts through [BR-016](business-rules.md#br-016-neap-uses-base-amounts-instead-of-difference-amounts).

## Stored procedure operations

| Operation | Description | Source | Link |
| --- | --- | --- | --- |
| Recalculate manual premium on a specified rate tier | Given a premium history set's total MAN-type premium adjustment, recompute what that manual premium would be under a different rate tier, using the ratio of the two tiers' rate factors. | `pk72195_renewal.calc_manual_on_specified_tier` | [Details](procedures/pk72195-renewal.md#operations) |
| Get reported payroll | Sum the reported (flagged) payroll for a class coverage line across its adjusted-rate-class detail rows. | `pk73059_prem_hist_summary.get_reported_payroll` | [Details](procedures/pk73059-prem-hist-summary.md#operations) |
| Get SAIF Plus information | Retrieve the SAIF Plus discount's descriptive text, rate, and maximum/combination-maximum values for a policy period. | `sp72652_get_saifplus (→ pk73300_saifplus.get_saifplus)` | [Details](procedures/sp72652-get-saifplus.md#operations) |
| Determine NCCI statistical class | Resolve the NCCI statistical reporting class code for a premium adjustment, using one of three lookup strategies keyed by the adjustment type code (CRP/MRP/SARAP/MARIT/FELA vs. INC vs. general). | `sp72151_determine_ncci_stat` | [Details](procedures/sp72151-determine-ncci-stat.md#operations) |

## 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)

> **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\clsPremiumSet.vb`
- `Business\SAIF.Business.Policy.Premium\clsClassCoverage.vb`
- `Business\SAIF.Business.Policy.Premium\clsPremiumSummaryAdjustment.vb`
- `Business\SAIF.Business.Policy.Premium\SubTotalPremiumSummaryAdjustment.vb`
- `Business\SAIF.Business.Policy.Premium\iPremiumAmountProvider.vb`
- `Business\SAIF.Business.Policy.Premium\iPolicyRatingPlan.vb`
