---
title: SAIF.Business.Policy.Rating operations and processes
summary: Business and technical operations supported by this library.
status: draft
owner: Technical Writer
last_reviewed: 2026-07-31
library: SAIF.Business.Policy.Rating
reference_type: package
---

# SAIF.Business.Policy.Rating operations and processes

This page is the operation hub for `SAIF.Business.Policy.Rating`. It covers rate computation, manual-class retrieval, delete guards, stored-procedure lookups, and date-effective factor selection.

## Operation catalog
| Operation | Intent | Trigger | Inputs | Outputs | Rules | Tables | SQL |
| --- | --- | --- | --- | --- | --- | --- | --- |
| [Compute the adjusted rate for a class](operations/compute-the-adjusted-rate-for-a-class.md) | `ClassRateExtensions.AdjustedRate(Target, inRateTierFactor, inUSLHWFactor, AccidentLimitFactors, OtherFactors)` (`ClassRateExtensions.vb:39-58`) | Premium rating needs the final rate for a rated class line | An `iAdjustedRateProvider` target, a `clsRateTierFactor`, a `clsUSLHWCompFactor`, a sequence of accident-limit `iAdjustedRateFactor`, a sequence of other `iAdjustedRateFactor` | Decimal rate rounded to 6 decimal places | [BR-001](business-rules.md#br-001-the-adjusted-rate-is-the-base-rate-multiplied-by-the-product-of-all-applicable-non-null-other-factors-rounded-to-6-decimal-places), [BR-010](business-rules.md#br-010-a-rate-factor-that-does-not-apply-to-a-given-rate-provider-must-return-the-neutral-factor-value-1-rather-than-0-so-that-it-cannot-alter-the-cumulative-factor) | — | — |
| [Compute the base rate for a class](operations/compute-the-base-rate-for-a-class.md) | `ClassRateExtensions.BaseRate(Target, inRateTierFactor, inUSLHWFactor, AccidentLimitFactors)` (`ClassRateExtensions.vb:60-75`) | Called by OP-001, or directly when only the base rate is needed | `iAdjustedRateProvider`, rate tier factor, USL&HW factor, accident-limit factors | Decimal base rate rounded to 4 decimal places using arithmetic (not banker's) rounding | [BR-002](business-rules.md#br-002-the-base-rate-is-the-providers-pure-rate-factor-multiplied-by-the-rate-tier-factor-the-uslhw-factor-and-all-non-null-accident-limit-factors-rounded-to-4-decimal-places-using-arithmetic-not-bankers-rounding), [BR-011](business-rules.md#br-011-the-rate-tier-factor-is-the-federal-risk-type-factor-when-the-providers-benefit-jurisdiction-is-federal-the-state-risk-type-factor-when-it-is-state-and-the-neutral-factor-otherwise-or-when-the-rate-tier-factor-is-invalid), [BR-012](business-rules.md#br-012-the-uslhw-comp-factor-applies-only-when-the-rate-tier-record-is-valid-and-the-providers-manual-class-type-is-uslh-otherwise-the-neutral-factor-is-returned), [BR-029](business-rules.md#br-029-a-uslhw-comp-factor-requires-an-effective-date-other-than-dateminvalue) | [USLHW_COMP_FACTOR](database-tables.md#uslhw_comp_factor) | [SQL-046](sql/SQL-046-saif-business-policy-rating.md) |
| [Resolve the rate file sequence number for a period](operations/resolve-the-rate-file-sequence-number-for-a-period.md) | `clsManualClassBaseCollection.GetRateFileSeqNum(inDataPortalInfo, inPeriodRatingInfo)` (`clsManualClassBaseCollection.vb:188-211`) | Rating needs to know which published rate file governs a policy period | `IDataPortalInfo`, `iPeriodRatingInfo` (supplies anniversary rating date and rate tier code) | Decimal rate file sequence number | [BR-041](business-rules.md#br-041-rate-file-lookup-returns-zero-when-no-active-filing-matches-ard-and-risk-type) | [RATE_FILE_MASTER](database-tables.md#rate_file_master) | [SQL-021](sql/SQL-021-saif-business-policy-rating.md) |
| [Resolve a manual class key (rate lookup)](operations/resolve-a-manual-class-key-rate-lookup.md) | `clsManualClassBase.GetManualClassBaseKey(inDataportal, inPeriodRatingInfo, inClassEffectiveDate, ByRef inoutManualClassNumberAndUsageCode, ByRef outRateFileSeqNum)` (`clsManualClassBase.vb:1225-1268`) | A class number must be resolved to the rate file and (possibly replaced) class number that actually applies | Class number/usage code (in-out), class effective date, period rating info | Updated class number/usage code and rate file sequence number (both `ByRef`) | [BR-013](business-rules.md#br-013-the-rate-file-sequence-number-returned-by-the-rate-retrieval-procedure-is-applied-only-when-it-is-not-dbnull), [BR-014](business-rules.md#br-014-the-rate-retrieval-procedure-may-return-a-replaced-manual-class-number-when-the-returned-class-number-is-not-dbnull-it-overwrites-the-callers-value), [BR-034](business-rules.md#br-034-applicable-ard-is-derived-before-rate-lookup-starts), [BR-035](business-rules.md#br-035-current-non-outstanding-filing-is-searched-first), [BR-036](business-rules.md#br-036-replacement-class-lookup-runs-when-the-requested-class-is-missing-or-expired), [BR-037](business-rules.md#br-037-outstanding-filing-rows-override-the-current-filing-when-present), [BR-038](business-rules.md#br-038-original-class-number-is-preserved-when-no-replacement-class-is-resolved), [BR-039](business-rules.md#br-039-mid-policy-next-ard-falls-back-to-the-policy-period-expiration-date-unless-rerated), [BR-040](business-rules.md#br-040-original-ard-applies-when-the-next-ard-falls-after-the-class-effective-date) | [RATE_FILE_MASTER](database-tables.md#rate_file_master), [MANUAL_CLASS_BASE](database-tables.md#manual_class_base) | [SQL-019](sql/SQL-019-saif-business-policy-rating.md) |
| [Retrieve a manual class base](operations/retrieve-a-manual-class-base.md) | `clsManualClassBase.GetManualClassBase` (4 overloads) / `GetDefaultManualClassBase` | Rating or maintenance needs the published attributes of a manual class | Depending on overload: rate file sequence number + class number, or period rating info + class number | A populated `clsManualClassBase` | [BR-003](business-rules.md#br-003-a-manual-class-base-is-valid-only-when-its-rate-file-sequence-number-is-non-zero-and-its-class-numberusage-code-is-not-empty) | [MANUAL_CLASS_BASE](database-tables.md#manual_class_base) | [SQL-020](sql/SQL-020-saif-business-policy-rating.md), [SQL-021](sql/SQL-021-saif-business-policy-rating.md), [SQL-019](sql/SQL-019-saif-business-policy-rating.md) |
| [Delete a manual class base with referential guard](operations/delete-a-manual-class-base-with-referential-guard.md) | `clsManualClassBase.CanDeleteManualClassBaseRecord` then `BeforeDelete`/`AfterDelete` (`clsManualClassBase.vb:1341-1383`, `:889-910`) | Rate-file maintenance wants to remove a manual class from a rate file | Manual class number, WCIS rate file sequence number | Boolean eligibility, then the delete itself | [BR-004](business-rules.md#br-004-a-manual-class-base-may-not-be-deleted-while-any-prem_hist_class_coverage-row-references-the-same-class-number-and-rate-file-sequence-number), [BR-005](business-rules.md#br-005-a-failure-while-probing-delete-eligibility-is-surfaced-as-an-application-exception-carrying-the-frameworks-media-files-check-message), [BR-006](business-rules.md#br-006-a-delete-insert-or-update-that-affects-a-number-of-rows-other-than-exactly-one-is-treated-as-a-database-contention-failure) | [PREM_HIST_CLASS_COVERAGE](database-tables.md#prem_hist_class_coverage), [MANUAL_CLASS_BASE](database-tables.md#manual_class_base) | [SQL-017](sql/SQL-017-saif-business-policy-rating.md), [SQL-056](sql/SQL-056-saif-business-policy-rating.md) |
| [Delete all manual class bases for a rate file](operations/delete-all-manual-class-bases-for-a-rate-file.md) | `clsManualClassBaseCollection.DeleteManualClassBasebyRateFileSeqNum` (`clsManualClassBaseCollection.vb:327-365`) | A rate file is being withdrawn or reloaded | WCIS rate file sequence number | Boolean success | [BR-007](business-rules.md#br-007-a-bulk-delete-of-manual-class-bases-by-rate-file-returns-false-on-any-error-and-does-not-surface-the-underlying-exception) | [MANUAL_CLASS_BASE](database-tables.md#manual_class_base) | [SQL-057](sql/SQL-057-saif-business-policy-rating.md) |
| [Guard a rate file master delete](operations/guard-a-rate-file-master-delete.md) | `clsRateFileMaster.CanDeleteRateFileMasterRecord` (`clsRateFileMaster.vb:494-534`) | Maintenance wants to delete a rate file | WCIS rate file sequence number | Boolean eligibility | [BR-005](business-rules.md#br-005-a-failure-while-probing-delete-eligibility-is-surfaced-as-an-application-exception-carrying-the-frameworks-media-files-check-message), [BR-008](business-rules.md#br-008-a-rate-file-master-may-not-be-deleted-while-any-manual_class_base-row-references-its-sequence-number) | [MANUAL_CLASS_BASE](database-tables.md#manual_class_base) | [SQL-032](sql/SQL-032-saif-business-policy-rating.md) |
| [Retrieve the class description paragraph](operations/retrieve-the-class-description-paragraph.md) | `clsManualClassBase.GetClassParagraph(inDPI, ManualClassNumberAndUsageCode, inParagraphEffectiveDate, inMarketType)` (`clsManualClassBase.vb:848-884`) | Documents or screens need the printed description paragraph for a class | Class number/usage code, paragraph effective date, market type | Paragraph text, trimmed; empty string when none | [BR-009](business-rules.md#br-009-the-class-description-paragraph-in-force-is-the-one-whose-usage-row-covers-the-anniversary-rating-date-matches-the-market-type-and-carries-newoutstanding-code-n) | [MANUAL_CLASS_PARAGRAPH_USAGE](database-tables.md#manual_class_paragraph_usage), [MANUAL_CLASS_PARAGRAPH](database-tables.md#manual_class_paragraph) | [SQL-018](sql/SQL-018-saif-business-policy-rating.md) |
| [Retrieve period rating information](operations/retrieve-period-rating-information.md) | `clsPeriodRatingInfo.GetPeriodRatingInfo` and `.GetCurrentPeriodRatingInfo` (`clsPeriodRatingInfo.vb:197-243`) | Any rating call that needs the period context (ARD, market type, rate tier, dates) | Policy number, and (for the dated overload) policy period effective date | A `clsPeriodRatingInfo` — empty when no row matches | [BR-015](business-rules.md#br-015-period-rating-information-must-be-sought-in-both-the-current-policy_period-table-and-the-legacy-policy_period_non_wcis-table-combined-with-union), [BR-016](business-rules.md#br-016-current-period-rating-information-is-the-row-whose-policy-period-effective-date-equals-the-maximum-effective-date-for-that-policy-ordered-descending), [BR-017](business-rules.md#br-017-period-rating-info-retrieval-always-returns-an-object-an-empty-default-instance-is-returned-when-no-row-matches) | [POLICY](database-tables.md#policy), [POLICY_PERIOD](database-tables.md#policy_period), [POLICY_PERIOD_NON_WCIS](database-tables.md#policy_period_non_wcis) | [SQL-027](sql/SQL-027-saif-business-policy-rating.md) |
| [Select the applicable rate tier factor](operations/select-the-applicable-rate-tier-factor.md) | `RateTierFactorExtensions.AppliesTo(target, inRiskTypeCode, inDate)` + `clsRateTierFactor.IsApplicableTo` (`clsRateTierFactorCollection.vb:356-361`) | Base rate computation needs the risk-type factor in force | A sequence of `clsRateTierFactor`, a risk type code, a date | The first matching factor, or `Nothing` | [BR-018](business-rules.md#br-018-a-rate-tier-factor-applies-to-a-risk-type-code-on-a-date-when-the-code-matches-exactly-the-effective-date-is-on-or-before-the-date-and-the-expiration-date-is-either-null-dateminvalue-or-after-the-date), [BR-026](business-rules.md#br-026-a-rate-tier-factor-requires-a-non-empty-risk-type-code) | [RISK_TYPE_DESCRIPTION](database-tables.md#risk_type_description) | [SQL-037](sql/SQL-037-saif-business-policy-rating.md) |
| [Select rating plan factors in force](operations/select-rating-plan-factors-in-force.md) | `RatingPlanFactorExtensions.AsOfDate` and `.RatingPlan` (`clsRatingPlanFactorCollection.vb:434-444`) | Validating or applying a rating plan modification factor | A sequence of `clsRatingPlanFactor`, a date and/or a `Enums.RatingPlans` value | Filtered sequence | [BR-019](business-rules.md#br-019-a-rating-plan-factor-is-in-force-on-a-date-when-its-effective-date-is-on-or-before-the-date-and-its-expiration-date-is-either-null-or-after-the-date), [BR-020](business-rules.md#br-020-the-arp-credit-factor-is-the-rating-plan-factors-upper-limit-when-the-rating-plan-factor-is-valid-otherwise-the-neutral-factor), [BR-027](business-rules.md#br-027-a-rating-plan-factor-requires-a-non-empty-code) | [RATING_PLAN_CODE](database-tables.md#rating_plan_code), [RATING_PLAN_FACTOR](database-tables.md#rating_plan_factor) | [SQL-038](sql/SQL-038-saif-business-policy-rating.md), [SQL-039](sql/SQL-039-saif-business-policy-rating.md), [SQL-040](sql/SQL-040-saif-business-policy-rating.md) |
| [Select active prepay frequencies](operations/select-active-prepay-frequencies.md) | `PrepayFrequencyExtensions.ActiveAsOf(Target, inAsOfDate)` (`clsPrepayFrequencyCollection.vb:426-431`) | Presenting the prepay options available on a given date | A sequence of `clsPrepayFrequency`, a date | Filtered sequence | [BR-021](business-rules.md#br-021-a-prepay-frequency-is-offered-on-a-date-only-when-a-prepay-discount-factor-is-in-force-for-that-frequency-on-that-date), [BR-025](business-rules.md#br-025-a-prepay-discount-factor-requires-a-non-empty-prepay-frequency-code), [BR-032](business-rules.md#br-032-prepay-frequency-codes-map-as-annuala-semiannuals-quarterlyq-monthlym-the-numeric-enum-values-1-2-4-10-express-the-number-of-instalments-per-year) | [PREPAY_DISCOUNT_FACTOR](database-tables.md#prepay_discount_factor), [PREPAY_FREQUENCY_CODE](database-tables.md#prepay_frequency_code) | [SQL-029](sql/SQL-029-saif-business-policy-rating.md), [SQL-030](sql/SQL-030-saif-business-policy-rating.md), [SQL-031](sql/SQL-031-saif-business-policy-rating.md) |

## Process flow diagram
The following diagram visualizes the primary operational flow across the library.

```mermaid
flowchart TD
  Start([Caller requests rating data]) --> Period[Retrieve period rating info]
  Period --> Filing[Resolve rate file sequence number]
  Filing --> ClassKey[Retrieve manual class key and rate]
  ClassKey --> ManualClass[Retrieve manual class base]
  ManualClass --> Factors[Select dated factors]
  Factors --> Rate[Base and adjusted rate computation]
```

## Inherited operations and processes

### From clsBusinessBase (SAIF.Framework.Core)

| Operation | Intent | Provided by | Origin | Embedded in |
| --- | --- | --- | --- | --- |
| Manage edit session | Open, commit, or roll back an in-memory edit scope for a BOF business object.† | `clsBusinessBase` | `SAIF.Framework.Core` | [Retrieve a manual class base](operations/retrieve-a-manual-class-base.md) |
| Evaluate business object rules | Execute registered BOF rules and surface broken-rule state.† | `clsBusinessBase` | `SAIF.Framework.Core` | [Retrieve a manual class base](operations/retrieve-a-manual-class-base.md) |

## Database interactions

| Operation | SQL | Tables | Type |
| --- | --- | --- | --- |
| [Compute the base rate for a class](operations/compute-the-base-rate-for-a-class.md) | [SQL-046](sql/SQL-046-saif-business-policy-rating.md) | [USLHW_COMP_FACTOR](database-tables.md#uslhw_comp_factor) | Read |
| [Resolve the rate file sequence number for a period](operations/resolve-the-rate-file-sequence-number-for-a-period.md) | [SQL-021](sql/SQL-021-saif-business-policy-rating.md) | [RATE_FILE_MASTER](database-tables.md#rate_file_master) | Read |
| [Resolve a manual class key (rate lookup)](operations/resolve-a-manual-class-key-rate-lookup.md) | [SQL-019](sql/SQL-019-saif-business-policy-rating.md) | [RATE_FILE_MASTER](database-tables.md#rate_file_master), [MANUAL_CLASS_BASE](database-tables.md#manual_class_base) | Read |
| [Retrieve a manual class base](operations/retrieve-a-manual-class-base.md) | [SQL-020](sql/SQL-020-saif-business-policy-rating.md), [SQL-021](sql/SQL-021-saif-business-policy-rating.md), [SQL-019](sql/SQL-019-saif-business-policy-rating.md) | [MANUAL_CLASS_BASE](database-tables.md#manual_class_base) | Read |
| [Delete a manual class base with referential guard](operations/delete-a-manual-class-base-with-referential-guard.md) | [SQL-017](sql/SQL-017-saif-business-policy-rating.md), [SQL-056](sql/SQL-056-saif-business-policy-rating.md) | [PREM_HIST_CLASS_COVERAGE](database-tables.md#prem_hist_class_coverage), [MANUAL_CLASS_BASE](database-tables.md#manual_class_base) | Write |
| [Delete all manual class bases for a rate file](operations/delete-all-manual-class-bases-for-a-rate-file.md) | [SQL-057](sql/SQL-057-saif-business-policy-rating.md) | [MANUAL_CLASS_BASE](database-tables.md#manual_class_base) | Write |
| [Guard a rate file master delete](operations/guard-a-rate-file-master-delete.md) | [SQL-032](sql/SQL-032-saif-business-policy-rating.md) | [MANUAL_CLASS_BASE](database-tables.md#manual_class_base) | Read |
| [Retrieve the class description paragraph](operations/retrieve-the-class-description-paragraph.md) | [SQL-018](sql/SQL-018-saif-business-policy-rating.md) | [MANUAL_CLASS_PARAGRAPH_USAGE](database-tables.md#manual_class_paragraph_usage), [MANUAL_CLASS_PARAGRAPH](database-tables.md#manual_class_paragraph) | Read |
| [Retrieve period rating information](operations/retrieve-period-rating-information.md) | [SQL-027](sql/SQL-027-saif-business-policy-rating.md) | [POLICY](database-tables.md#policy), [POLICY_PERIOD](database-tables.md#policy_period), [POLICY_PERIOD_NON_WCIS](database-tables.md#policy_period_non_wcis) | Read |
| [Select the applicable rate tier factor](operations/select-the-applicable-rate-tier-factor.md) | [SQL-037](sql/SQL-037-saif-business-policy-rating.md) | [RISK_TYPE_DESCRIPTION](database-tables.md#risk_type_description) | Read |
| [Select rating plan factors in force](operations/select-rating-plan-factors-in-force.md) | [SQL-038](sql/SQL-038-saif-business-policy-rating.md), [SQL-039](sql/SQL-039-saif-business-policy-rating.md), [SQL-040](sql/SQL-040-saif-business-policy-rating.md) | [RATING_PLAN_CODE](database-tables.md#rating_plan_code), [RATING_PLAN_FACTOR](database-tables.md#rating_plan_factor) | Read |
| [Select active prepay frequencies](operations/select-active-prepay-frequencies.md) | [SQL-029](sql/SQL-029-saif-business-policy-rating.md), [SQL-030](sql/SQL-030-saif-business-policy-rating.md), [SQL-031](sql/SQL-031-saif-business-policy-rating.md) | [PREPAY_DISCOUNT_FACTOR](database-tables.md#prepay_discount_factor), [PREPAY_FREQUENCY_CODE](database-tables.md#prepay_frequency_code) | Read |

## Failure and edge-case behavior
- `RateTierFactorExtensions.AppliesTo` can return `Nothing`, so callers must guard the result before dereferencing it.**
- Bulk delete suppresses exception detail and returns only `False` on failure.

## Stored procedure operations
| Operation | Description | Source | Link |
| --- | --- | --- | --- |
| Determine applicable ARD | Computes the anniversary-rating date that governs class lookup. | `pk73059_prem_hist_summary.get_applicable_ard` | [Details](procedures/pk73059-prem-hist-summary-get-applicable-ard.md) |
| Resolve class rate in current filing | Resolves class, replacement-class, and outstanding-filing logic. | `pk73059_prem_hist_summary.sp62005_retrieve_rate` | [Details](procedures/pk73059-prem-hist-summary-sp62005-retrieve-rate.md) |
| Return active rate-file sequence number | Returns the active non-outstanding filing for an ARD and risk type. | `PK73193_submission.get_rate_file_seq_num` | [Details](procedures/pk73193-submission-get-rate-file-seq-num.md) |

## 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.Rating\ClassRateExtensions.vb`
- `Business\SAIF.Business.Policy.Rating\clsManualClassBase.vb`
- `Business\SAIF.Business.Policy.Rating\clsManualClassBaseCollection.vb`
- `Business\SAIF.Business.Policy.Rating\clsPeriodRatingInfo.vb`
- `Business\SAIF.Business.Policy.Rating\clsPrepayFrequencyCollection.vb`
- `Business\SAIF.Business.Policy.Rating\clsRateFileMaster.vb`