---
title: SAIF.Business.Claim.Maintenance business rules
summary: Business rules enforced by SAIF.Business.Claim.Maintenance.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-07-30
library: SAIF.Business.Claim.Maintenance
reference_type: package
---

# SAIF.Business.Claim.Maintenance business rules

This page captures business rules enforced by `SAIF.Business.Claim.Maintenance`.

## BR-CM-001: Optimistic concurrency — updates fail if RowsAffected ≠ 1

| Field | Value |
| --- | --- |
| Statement | Optimistic concurrency — updates fail if RowsAffected ≠ 1 |
| Trigger | All `After*` lifecycle methods |
| Enforcement | All business objects |
| Outcome | `AddErrorMessage` with DB contention error |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `AfterUpdate`; `Business\SAIF.Business.Claim.Maintenance\clsClaimSupportOrder.vb` — `AfterUpdate`; `Business\SAIF.Business.Claim.Maintenance\clsMedicalCondition.vb` — `AfterUpdate` |

---

## BR-CM-002: Support order cannot be deleted if awards exist for the SUO claim

| Field | Value |
| --- | --- |
| Statement | Support order cannot be deleted if awards exist for the SUO claim |
| Trigger | Delete validation |
| Enforcement | `clsClaimSupportOrder` — `PK82141_SUPPORT_ORDER.AwardExistsForSUOClaim` |
| Outcome | Prevents deletion |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimSupportOrder.vb` — `ValidSelectedClaims`, `AwardForOrderExists` |

---

## BR-CM-003: Support order cannot be deleted if payments exist for the SUO claim

| Field | Value |
| --- | --- |
| Statement | Support order cannot be deleted if payments exist for the SUO claim |
| Trigger | Delete validation |
| Enforcement | `clsClaimSupportOrder` — `PK82141_SUPPORT_ORDER.PaymentExistsForSUOClaim` |
| Outcome | Prevents deletion |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimSupportOrder.vb` — `ValidSelectedClaims`, `PaymentForOrderExists` |

---

## BR-CM-004: Support order validates payment-about-to-be-issued status before changes

| Field | Value |
| --- | --- |
| Statement | Support order validates payment-about-to-be-issued status before changes |
| Trigger | Pre-update check |
| Enforcement | `clsClaimSupportOrder` — `PK82141_SUPPORT_ORDER.PaymentAboutToBeIssued` |
| Outcome | Prevents update |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimSupportOrder.vb` — `PaymentIssueWarning`, `PaymentAboutToBeIssued` |

---

## BR-CM-005: Benefit payee must exist for support order before payment processing

| Field | Value |
| --- | --- |
| Statement | Benefit payee must exist for support order before payment processing |
| Trigger | Pre-payment check |
| Enforcement | `clsClaimSupportOrder` — `PK82141_SUPPORT_ORDER.BenfitPayeeForOrderExists` |
| Outcome | Validation check |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimSupportOrder.vb` — `DetermineTodoTasks`, `BenifitPayeeReferencesOrder` |

---

## BR-CM-006: Award reduction validation before support order modification

| Field | Value |
| --- | --- |
| Statement | Award reduction validation before support order modification |
| Trigger | Pre-update check |
| Enforcement | `clsClaimSupportOrder` — `PK82141_SUPPORT_ORDER.AwardReductionExists` |
| Outcome | Validation check |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimSupportOrder.vb` — `AwardReductionExists` |

---

## BR-CM-007: Void, combine, transfer, restore are mutually exclusive adjustment operations

| Field | Value |
| --- | --- |
| Statement | Void, combine, transfer, restore are mutually exclusive adjustment operations |
| Trigger | Adjustment type selection |
| Enforcement | `clsClaimAdjustment` — operation type parameter |
| Outcome | Only one operation per call |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimAdjustment.vb` — `Save`, `IsValid` |

---

## BR-CM-008: Claims with status 'I' (in-progress) or 'V' (voided) are excluded from support order claim

| Field | Value |
| --- | --- |
| Statement | Claims with status 'I' (in-progress) or 'V' (voided) are excluded from support order claim lists |
| Trigger | Claim query filter |
| Enforcement | `clsClaimSupportOrder` — inline SQL WHERE clause |
| Outcome | Filters out non-active claims |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimSupportOrder.vb` — `CreateConnections` |

---

## BR-CM-009: Injury occupational disease code must be I or D

| Field | Value |
| --- | --- |
| Statement | `InjOccupationalDiseaseCode` must be `I` (injury) or `D` (occupational disease). |
| Trigger | `InjOccupationalDiseaseCode` property set, and again during `IsValid()` |
| Enforcement | `clsClaimDetail` — rule `InjOccupationalDiseaseCodeValid` (`clsClaimDetail01`, Error) |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `AddBusinessRules`, `InjOccupationalDiseaseCodeValid` |

---

## BR-CM-010: Active claim flag must be Y or N

| Field | Value |
| --- | --- |
| Statement | `ActiveClaimFlag` must be `Y` or `N`. |
| Trigger | `ActiveClaimFlag` property set, and again during `IsValid()` |
| Enforcement | `clsClaimDetail` — rule `ActiveClaimFlagValid` (`clsClaimDetail02`, Error) |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `AddBusinessRules`, `ActiveClaimFlagValid` |

---

## BR-CM-011: Knowledge date is required and bounded by injury date and today

| Field | Value |
| --- | --- |
| Statement | `KnowledgeDate` must be populated, must not be in the future, and must not precede `InjuryDate`. |
| Trigger | `KnowledgeDate` property set, and again during `IsValid()` |
| Enforcement | `clsClaimDetail` — rule `KnowledgeDateValid` (`clsClaimDetail03`, Error) |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `AddBusinessRules`, `KnowledgeDateValid` |

---

## BR-CM-012: Disability date must not precede injury date or be in the future

| Field | Value |
| --- | --- |
| Statement | A populated `DisabilityDate` may not precede `InjuryDate` unless the claim is an occupational disease claim, and may not be in the future. |
| Trigger | `DisabilityDate` property set, and again during `IsValid()` |
| Enforcement | `clsClaimDetail` — rule `DisabilityDateValid` (`clsClaimDetail04`, Error) |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `AddBusinessRules`, `DisabilityDateValid` |

---

## BR-CM-013: Coverage code must be A B C or E

| Field | Value |
| --- | --- |
| Statement | `CoverageCode` must be one of `A`, `B`, `C`, or `E`. |
| Trigger | `CoverageCode` property set, and again during `IsValid()` |
| Enforcement | `clsClaimDetail` — rule `CoverageCodeValid` (`clsClaimDetail05`, Error) |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `AddBusinessRules`, `CoverageCodeValid` |

---

## BR-CM-014: Handicap worker reserve flag must be Y or N

| Field | Value |
| --- | --- |
| Statement | `HandicapWorkerReserveFlag` must be `Y` or `N`. |
| Trigger | `HandicapWorkerReserveFlag` property set, and again during `IsValid()` |
| Enforcement | `clsClaimDetail` — rule `HandicapWorkerReserveFlagValid` (`clsClaimDetail06`, Error) |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `AddBusinessRules`, `HandicapWorkerReserveFlagValid` |

---

## BR-CM-015: WCD claim number must be unique across claims

| Field | Value |
| --- | --- |
| Statement | A non-blank `WCDClaimNum` may not already be assigned to another claim. |
| Trigger | `WCDClaimNum` property set, and again during `IsValid()` |
| Enforcement | `clsClaimDetail` — rule `WCDClaimNumValid` (`clsClaimDetail07`, Error) via `GetWCDClaimNumberCount` |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `AddBusinessRules`, `WCDClaimNumValid`, `GetWCDClaimNumberCount` |

---

## BR-CM-016: Claim status code must be New Open Closed or Denied

| Field | Value |
| --- | --- |
| Statement | `ClaimStatusCode` must be one of New (`N`), Open (`O`), Closed (`C`), or Denied (`D`). |
| Trigger | `ClaimStatusCode` property set, and again during `IsValid()` |
| Enforcement | `clsClaimDetail` — rule `ClaimStatusCodeValid` (`clsClaimDetail08`, Error) |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `AddBusinessRules`, `ClaimStatusCodeValid` |

---

## BR-CM-017: State occupational disease PPD or PTD claims require a disability or initial treatment date

| Field | Value |
| --- | --- |
| Statement | For state-jurisdiction (`1`) occupational-disease claims of type PPD (`5`) or PTD (`7`), either `DisabilityDate` or `InitialTreatmentDate` must be populated. |
| Trigger | `DisabilityDate`, `InitialTreatmentDate`, or `ClaimTypeCode` set, and again during `IsValid()` |
| Enforcement | `clsClaimDetail` — rule `DisabilityTreatmentDateValid` (`clsClaimDetail09`, Error) |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `AddBusinessRules`, `DisabilityTreatmentDateValid` |

---

## BR-CM-018: Aggravation decision on a disabling claim requires a closed status

| Field | Value |
| --- | --- |
| Statement | An aggravation decision (`ClaimDecisionTypeToA`) on a disabling claim type (`4`, `5`, or `7`) requires a current or prior Closed claim status. |
| Trigger | Claim decision or claim type change, and again during `IsValid()` |
| Enforcement | `clsClaimDetail` — rule `AggDisablingClosedValid` (`clsClaimDetail10`, Error) |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `AddBusinessRules`, `AggDisablingClosedValid` |

---

## BR-CM-019: OWCP claim number must be unique per worker

| Field | Value |
| --- | --- |
| Statement | A non-blank `OwcpClaimNum` may not already be assigned to another claim for the same worker. |
| Trigger | `OwcpClaimNum` property set, and again during `IsValid()` |
| Enforcement | `clsClaimDetail` — rule `OWCPClaimNumValid` (`clsClaimDetail11`, Error) via `GetOWCPClaimNumberCount` |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `AddBusinessRules`, `OWCPClaimNumValid`, `GetOWCPClaimNumberCount` |

---

## BR-CM-020: Claim status may not change without at least one condition

| Field | Value |
| --- | --- |
| Statement | `ClaimStatusCode` may not change to Closed, Open, or Denied while the claim has zero medical conditions. |
| Trigger | `ClaimStatusCode` property set, and again during `IsValid()` |
| Enforcement | `clsClaimDetail` — rule `ClaimStatusChangedWithoutCondition` (`clsClaimDetail12`, Error) using the retrieve-time conditions count |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `AddBusinessRules`, `ClaimStatusChangedWithoutCondition`, `GetConditionsCount` |

---

## BR-CM-021: Claim status may not close while the latest decision is deferred

| Field | Value |
| --- | --- |
| Statement | `ClaimStatusCode` may not be set to Closed when the latest claim decision is a deferred original-injury request. |
| Trigger | `ClaimStatusCode` property set, and again during `IsValid()` |
| Enforcement | `clsClaimDetail` — rule `ClaimStatusClosedAndDeferred` (`clsClaimDetail13`, Error) |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `AddBusinessRules`, `ClaimStatusClosedAndDeferred` |

---

## BR-CM-022: Medicare ORM termination date must fall between injury date and seven days ahead

| Field | Value |
| --- | --- |
| Statement | A populated `MedicareORMTermDate` may not precede `InjuryDate` and may not exceed seven days past today. |
| Trigger | `MedicareORMTermDate` property set, and again during `IsValid()` |
| Enforcement | `clsClaimDetail` — rule `ORMExpirationDateValid` (`clsClaimDetail14`, Error) |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `AddBusinessRules`, `ORMExpirationDateValid` |

---

## BR-CM-023: Disabling occupational disease claims should have a disability date

| Field | Value |
| --- | --- |
| Statement | A disabling occupational-disease claim (`ClaimTypeCode` = `4`) should carry a `DisabilityDate`. |
| Trigger | `ClaimTypeCode` or `DisabilityDate` set, and again during `IsValid()` |
| Enforcement | `clsClaimDetail` — rule `DisabilityDateRequired` (`clsClaimDetail100`, Warning) |
| Outcome | Warning surfaced to the caller; the save may still proceed |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `AddBusinessRules`, `DisabilityDateRequired` |

---

## BR-CM-024: Disability date changes require wage re-verification

| Field | Value |
| --- | --- |
| Statement | Changing `DisabilityDate` on an occupational-disease claim warns the user to re-verify claim-cost wages. |
| Trigger | `DisabilityDate` property changed, and again during `IsValid()` |
| Enforcement | `clsClaimDetail` — rule `DisabilityDateChanged` (`clsClaimDetail101`, Warning) |
| Outcome | Warning surfaced to the caller; the save may still proceed |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `AddBusinessRules`, `DisabilityDateChanged` |

---

## BR-CM-025: Aggravation request after aggravation rights end date warns of own motion

| Field | Value |
| --- | --- |
| Statement | When an aggravation decision's request date falls after `AggRightsEndDate`, the user is warned of a possible own-motion decision. |
| Trigger | Claim decision change, and again during `IsValid()` |
| Enforcement | `clsClaimDetail` — rule `ClaimDecisionChanged` (`clsClaimDetail102`, Warning) |
| Outcome | Warning surfaced to the caller; the save may still proceed |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `AddBusinessRules`, `ClaimDecisionChanged` |

---

## BR-CM-026: Non-disabling to disabling change within 365 days warns the user

| Field | Value |
| --- | --- |
| Statement | Changing a non-disabling claim (`3`) to a disabling type (`4`, `5`, `7`) while the claim is Closed and the last non-disabling effective date is within 365 days raises a warning. |
| Trigger | `ClaimTypeCode` property changed, and again during `IsValid()` |
| Enforcement | `clsClaimDetail` — rule `NonDisablingToDisabling` (`clsClaimDetail103`, Warning) |
| Outcome | Warning surfaced to the caller; the save may still proceed |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `AddBusinessRules`, `NonDisablingToDisabling` |

---

## BR-CM-027: Closing a claim without a medically stationary date warns the user

| Field | Value |
| --- | --- |
| Statement | Changing `ClaimStatusCode` to Closed while accepted conditions still lack a medically-stationary date raises a warning. |
| Trigger | `ClaimStatusCode` property changed to Closed, and again during `IsValid()` |
| Enforcement | `clsClaimDetail` — rule `ClaimStatusClosedWithoutMedStatDate` (`clsClaimDetail104`, Warning) using the retrieve-time accepted-condition count |
| Outcome | Warning surfaced to the caller; the save may still proceed |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `AddBusinessRules`, `ClaimStatusClosedWithoutMedStatDate`, `GetAcceptCondMedStationaryCount` |

---

## BR-CM-028: Aggravation decision change warns of a possible aggravation decision

| Field | Value |
| --- | --- |
| Statement | The inverse condition of the own-motion check warns the user of a possible aggravation decision on the claim. |
| Trigger | Claim decision change, and again during `IsValid()` |
| Enforcement | `clsClaimDetail` — rule `ClaimDecisionAggChanged` (`clsClaimDetail105`, Warning) |
| Outcome | Warning surfaced to the caller; the save may still proceed |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `AddBusinessRules`, `ClaimDecisionAggChanged` |

---

## BR-CM-029: Closing or denying a claim sets pharmacy eligibility to ineligible

| Field | Value |
| --- | --- |
| Statement | When `ClaimStatusCode` changes to Closed (`C`) or Denied (`D`) and an existing pharmacy-eligibility record is not already Ineligible (`I`), the pharmacy eligibility status is forced to `I` with today's effective date. |
| Trigger | `IsValid()` evaluation before save, after a claim-status change |
| Enforcement | `clsClaimDetail` — `IsValid` derivation onto `WorkerPharmacyEligibilityReport` |
| Outcome | Pharmacy eligibility record is updated and persisted with the claim |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `IsValid` |

---

## BR-CM-030: Denying a claim sets the Medicare ORM termination date and reopening clears it

| Field | Value |
| --- | --- |
| Statement | A status change to Denied (`D`) sets `MedicareORMTermDate` to the claim-status-activity effective date; a change to Open (`O`) clears it. |
| Trigger | `IsValid()` evaluation before save, after a claim-status change |
| Enforcement | `clsClaimDetail` — `IsValid` derivation of `MedicareORMTermDate` |
| Outcome | `MedicareORMTermDate` is derived automatically and written with the claim update |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `IsValid` |

---

## BR-CM-031: Reopening a claim with a CDA order warns the user

| Field | Value |
| --- | --- |
| Statement | Reopening a claim (`ClaimStatusCode` = `O`) that is flagged with a CDA order (`CdaFlag` = `Y`) raises a warning. |
| Trigger | `ClaimStatusCode` set to Open, and again during `IsValid()` |
| Enforcement | `clsClaimDetail` — rule `ClaimHasCDAOrder` (`clsClaimDetail107`, Warning) |
| Outcome | Warning surfaced to the caller; the save may still proceed |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `AddBusinessRules`, `ClaimHasCDAOrder` |

---

## BR-CM-032: OHS or suspended pharmacy status requires Majoris enrollment

| Field | Value |
| --- | --- |
| Statement | A pharmacy eligibility status of OHS (`O`) or Suspended (`S`) requires the MCO plan to be Majoris (`FF`) and the MCO eligibility status to be enrolled (`Y`). |
| Trigger | Pharmacy eligibility status change, and again during `IsValid()` |
| Enforcement | `clsClaimDetail` — rule `PharmacyEligibilityStatusCodeValid` (`clsClaimDetail08` reused, Error) |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `AddBusinessRules`, `PharmacyEligibilityStatusCodeValid` |

---

## BR-CM-033: Caremark or denied pharmacy status requires Caremark enrollment

| Field | Value |
| --- | --- |
| Statement | A pharmacy eligibility status of Caremark (`C`) or Denied (`D`) requires the MCO plan to be Caremark (`AA`) and the MCO eligibility status to be enrolled (`Y`). |
| Trigger | Pharmacy eligibility status change, and again during `IsValid()` |
| Enforcement | `clsClaimDetail` — rule `PharmacyEligibilityCaremarkCodeValid` (`clsClaimDetail09` reused, Error) |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `AddBusinessRules`, `PharmacyEligibilityCaremarkCodeValid` |

---

## BR-CM-034: Formal MCO enrollment sets the matching pharmacy formulary code

| Field | Value |
| --- | --- |
| Statement | When MCO eligibility is saved as formally enrolled or pending credentialing (status and reason `1Y` or `3Y`), pharmacy eligibility is set to the matching formulary code — `O` for Majoris (`FF`) or `C` for Caremark (`AA`) — with today's effective date. |
| Trigger | `Save()` when `ClaimMcoEligibility` is dirty |
| Enforcement | `clsClaimDetail` — `Save` derivation onto `WorkerPharmacyEligibilityReport` |
| Outcome | Pharmacy eligibility record is updated and saved with the claim |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `Save` |

---

## BR-CM-035: Accepted claim decision derives pharmacy eligibility from MCO plan

| Field | Value |
| --- | --- |
| Statement | When the latest or pending claim decision is to Accept, there is no date of death, the jurisdiction is not Inmate (`2`), the claim type is not Fatal (`8`), and the status is Open or New, pharmacy eligibility is set to `C` (Caremark), `O` (Majoris/OHS), or `E` (Extended, default) with today's effective date — unless the pharmacy record is already Ineligible or already dirty. |
| Trigger | `Save()` following a claim-decision change |
| Enforcement | `clsClaimDetail` — `Save` derivation onto `WorkerPharmacyEligibilityReport` |
| Outcome | Pharmacy eligibility record is updated and saved with the claim |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `Save` |

---

## BR-CM-036: Reopening a closed claim resets pharmacy eligibility status

| Field | Value |
| --- | --- |
| Statement | When the claim status changes from Closed (`C`) to Open (`O`) and a pharmacy record exists, the pharmacy eligibility status is set to `D` (Caremark), `S` (Majoris), or `L` (Limited) depending on MCO enrollment, with today's effective date. |
| Trigger | `Save()` following a Closed-to-Open status change |
| Enforcement | `clsClaimDetail` — `Save` derivation onto `WorkerPharmacyEligibilityReport` |
| Outcome | Pharmacy eligibility record is updated and saved with the claim |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `Save` |

---

## BR-CM-037: First accept or deny decision copies responsible adjuster to compensability adjuster

| Field | Value |
| --- | --- |
| Statement | When the first claim decision transitions to Accept or Denied, `ClaimRespCode` is copied into `CompensabilityRespCode`. |
| Trigger | `Save()` when `GetIsFirstDeniedAcceptedDecision` is true |
| Enforcement | `clsClaimDetail` — `Save` derivation of `CompensabilityRespCode` |
| Outcome | The compensability adjuster code is derived automatically and persisted with the claim |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `Save` |

---

## BR-CM-038: Jurisdiction code transitions cascade related identifier fields

| Field | Value |
| --- | --- |
| Statement | Changing `JurisdictionCode` clears or defaults the identifier fields tied to the old and new jurisdiction: leaving Inmate (`2`) zeroes `InmateNum`; entering Inmate forces `PolicyNum` = 8 with a blank sub-code and creates a claim-policy-history row; leaving State (`1`) clears `WCDClaimNum`; leaving Federal clears `OwcpClaimNum` and resets `OwcpServiceOfficeCode` to `0`. |
| Trigger | `Save()` when `JurisdictionCode` was modified |
| Enforcement | `clsClaimDetail` — `ProcessJurisdictionCodeChanges` |
| Outcome | Dependent identifier fields are cleared or defaulted before the claim update is issued |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `Save`, `ProcessJurisdictionCodeChanges` |

---

## BR-CM-039: Deactivating a claim auto-terminates open legal representation

| Field | Value |
| --- | --- |
| Statement | When `ActiveClaimFlag` changes from `Y` to `N`, any open legal-representative row for the claim is expired with `EXP_DATE` = today and end-reason code `1`. |
| Trigger | `Save()` when `ActiveClaimFlag` changed from `Y` to `N` |
| Enforcement | `clsClaimDetail` — `ProcessLegalRep` |
| Outcome | The open legal-representative row is closed as a side effect of the claim save |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb` — `Save`, `ProcessLegalRep` |

---

## BR-CM-040: Injury date is required when modified

| Field | Value |
| --- | --- |
| Statement | `InjuryDate` may not be left empty once it has been modified. |
| Trigger | `InjuryDate` modified, evaluated during `IsValid()` |
| Enforcement | `clsAccidentInjury` — rule `clsAccidentInjury00` (Error) |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsAccidentInjury.vb` — `AddBusinessRules` |

---

## BR-CM-041: Injury date more than one year in the past warns the user

| Field | Value |
| --- | --- |
| Statement | An `InjuryDate` more than one year before today raises a warning. |
| Trigger | `InjuryDate` modified, evaluated during `IsValid()` |
| Enforcement | `clsAccidentInjury` — rule `clsAccidentInjury02` (Warning) |
| Outcome | Warning surfaced to the caller; the save may still proceed |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsAccidentInjury.vb` — `AddBusinessRules` |

---

## BR-CM-042: Another claim within fourteen days for the same worker warns the user

| Field | Value |
| --- | --- |
| Statement | If the worker has another claim with an injury date within plus or minus fourteen days of this claim's injury date, a warning naming the duplicate claim is raised. |
| Trigger | `InjuryDate` modified, evaluated during `IsValid()` |
| Enforcement | `clsAccidentInjury` — rule `clsAccidentInjury04` (Warning) via `CheckForMultipleClaimsForWorker` |
| Outcome | Warning surfaced to the caller; the save may still proceed |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsAccidentInjury.vb` — `AddBusinessRules`, `CheckForMultipleClaimsForWorker` |

---

## BR-CM-043: Initial treatment date change on a disease claim requires wage re-verification

| Field | Value |
| --- | --- |
| Statement | Changing `InitialTreatmentDate` on a disease claim (`InjOccupationalDiseaseCode` = `D`) warns the user to re-verify claim-cost wages. |
| Trigger | `InitialTreatmentDate` modified, evaluated during `IsValid()` |
| Enforcement | `clsAccidentInjury` — rule `clsAccidentInjury06` (Warning) |
| Outcome | Warning surfaced to the caller; the save may still proceed |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsAccidentInjury.vb` — `AddBusinessRules` |

---

## BR-CM-044: Injury date may not follow the knowledge date

| Field | Value |
| --- | --- |
| Statement | `InjuryDate` may not be later than a populated `KnowledgeDate`. |
| Trigger | `InjuryDate` modified, evaluated during `IsValid()` |
| Enforcement | `clsAccidentInjury` — rule `clsAccidentInjury10` (Error) |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsAccidentInjury.vb` — `AddBusinessRules` |

---

## BR-CM-045: Injury date may not follow the 801 received date

| Field | Value |
| --- | --- |
| Statement | `InjuryDate` may not be later than `Received801Date`. |
| Trigger | `InjuryDate` modified, evaluated during `IsValid()` |
| Enforcement | `clsAccidentInjury` — rule `clsAccidentInjury12` (Error) |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsAccidentInjury.vb` — `AddBusinessRules` |

---

## BR-CM-046: Injury date may not follow the stamped-in received date

| Field | Value |
| --- | --- |
| Statement | `InjuryDate` may not be later than `ReceivedDate` (the stamped-in date). |
| Trigger | `InjuryDate` modified, evaluated during `IsValid()` |
| Enforcement | `clsAccidentInjury` — rule `clsAccidentInjury14` (Error) |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsAccidentInjury.vb` — `AddBusinessRules` |

---

## BR-CM-047: Injury date may not follow the leave work date

| Field | Value |
| --- | --- |
| Statement | `InjuryDate` may not be later than `LeaveWorkDate`. |
| Trigger | `InjuryDate` modified, evaluated during `IsValid()` |
| Enforcement | `clsAccidentInjury` — rule `clsAccidentInjury16` (Error) |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsAccidentInjury.vb` — `AddBusinessRules` |

---

## BR-CM-048: Injury date may not precede the worker birth date

| Field | Value |
| --- | --- |
| Statement | `InjuryDate` may not be earlier than the worker's `BirthDate`. |
| Trigger | `InjuryDate` modified, evaluated during `IsValid()` |
| Enforcement | `clsAccidentInjury` — rule `clsAccidentInjury18` (Error) |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsAccidentInjury.vb` — `AddBusinessRules` |

---

## BR-CM-049: Injury date may not follow the worker death date

| Field | Value |
| --- | --- |
| Statement | `InjuryDate` may not be later than the worker's `DeathDate`. |
| Trigger | `InjuryDate` modified, evaluated during `IsValid()` |
| Enforcement | `clsAccidentInjury` — rule `clsAccidentInjury20` (Error) |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsAccidentInjury.vb` — `AddBusinessRules` |

---

## BR-CM-050: Injury date may not follow a work release date

| Field | Value |
| --- | --- |
| Statement | `InjuryDate` may not be later than any recorded work release date for the claim. |
| Trigger | `InjuryDate` modified, evaluated during `IsValid()` |
| Enforcement | `clsAccidentInjury` — rule `clsAccidentInjury22` (Error) via `GetWrkRelDtGTInjDtCount` |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsAccidentInjury.vb` — `AddBusinessRules`, `GetWrkRelDtGTInjDtCount` |

---

## BR-CM-051: Injury date may not follow a decision request effective date

| Field | Value |
| --- | --- |
| Statement | `InjuryDate` may not be later than any claim decision-request effective date. |
| Trigger | `InjuryDate` modified, evaluated during `IsValid()` |
| Enforcement | `clsAccidentInjury` — rule `clsAccidentInjury24` (Error) via `GetReqDecDtGTInjDtCount` |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsAccidentInjury.vb` — `AddBusinessRules`, `GetReqDecDtGTInjDtCount` |

---

## BR-CM-052: Injury date may not follow a disability authorization activity date

| Field | Value |
| --- | --- |
| Statement | `InjuryDate` may not be later than any disability-authorization activity date for the claim. |
| Trigger | `InjuryDate` modified, evaluated during `IsValid()` |
| Enforcement | `clsAccidentInjury` — rule `clsAccidentInjury26` (Error) via `GetDisabAuthDtGTInjDtCount` |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsAccidentInjury.vb` — `AddBusinessRules`, `GetDisabAuthDtGTInjDtCount` |

---

## BR-CM-053: Injury date may not follow a medically stationary date

| Field | Value |
| --- | --- |
| Statement | `InjuryDate` may not be later than any medically-stationary date recorded on the claim's conditions. |
| Trigger | `InjuryDate` modified, evaluated during `IsValid()` |
| Enforcement | `clsAccidentInjury` — rule `clsAccidentInjury28` (Error) via `GetMedStatDtGTInjDtCount` |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsAccidentInjury.vb` — `AddBusinessRules`, `GetMedStatDtGTInjDtCount` |

---

## BR-CM-054: Injury date may not follow the disability date on injury claims

| Field | Value |
| --- | --- |
| Statement | For injury claims (`InjOccupationalDiseaseCode` = `I`), `InjuryDate` may not be later than `DisabilityDate`. |
| Trigger | `InjuryDate` modified, evaluated during `IsValid()` |
| Enforcement | `clsAccidentInjury` — rule `clsAccidentInjury30` (Error) |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsAccidentInjury.vb` — `AddBusinessRules` |

---

## BR-CM-055: PPD or PTD occupational disease claims require a disability or initial treatment date

| Field | Value |
| --- | --- |
| Statement | Claims of type PPD (`5`) or PTD (`7`) with `InjOccupationalDiseaseCode` = `D` require either a disability date or an initial treatment date. |
| Trigger | `InjuryDate` or `InitialTreatmentDate` modified, evaluated during `IsValid()` |
| Enforcement | `clsAccidentInjury` — rule `clsAccidentInjury32` (Error) |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsAccidentInjury.vb` — `AddBusinessRules` |

---

## BR-CM-056: Initial treatment date must fall between 1850 and today

| Field | Value |
| --- | --- |
| Statement | `InitialTreatmentDate` may not be in the future and may not precede the `MIN_DATE` constant of 01/01/1850. |
| Trigger | `InitialTreatmentDate` modified, evaluated during `IsValid()` |
| Enforcement | `clsAccidentInjury` — rule `clsAccidentInjury34` (Error) |
| Outcome | Broken rule; save is blocked until corrected |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsAccidentInjury.vb` — `AddBusinessRules` |

---

## BR-CM-057: Injury date may not change while unposted payments or adjustments exist

| Field | Value |
| --- | --- |
| Statement | `InjuryDate` may not be changed while the claim has unposted payments or adjustments. |
| Trigger | `InjuryDate` modified, evaluated during `IsValid()` |
| Enforcement | `clsAccidentInjury` — rule `clsAccidentInjury36` (Error) via `ClaimServices.HasUnpostedPaymentsOrAdjustments` |
| Outcome | Broken rule; save is blocked until the financials are posted |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsAccidentInjury.vb` — `AddBusinessRules`, `CanInjuryDateChange` |

---

## BR-CM-058: Missing policy coverage at injury date warns the user

| Field | Value |
| --- | --- |
| Statement | When `PolicyNum` is greater than 17 and no policy coverage exists at the injury date, a warning is raised. |
| Trigger | `InjuryDate` modified, evaluated during `IsValid()` |
| Enforcement | `clsAccidentInjury` — rule `clsAccidentInjury37` (Warning) via `PolicyServices.CoverageExists` |
| Outcome | Warning surfaced to the caller; the save may still proceed |
| Confidence | Source-backed |
| Source | `Business\SAIF.Business.Claim.Maintenance\clsAccidentInjury.vb` — `AddBusinessRules`, `ValidPolicyCoverageAtInjury` |

---

## BR-PROC-001: Claim void requests must provide the claim identifier, current update number, and acting u

| Field | Value |
| --- | --- |
| Statement | Claim void requests must provide the claim identifier, current update number, and acting user. |
| Trigger | Package specification parameters `inClaimID`, `inUpdateNum`, and `inUserID`. |
| Enforcement | PK82140_CLAIM_ADJUSTMENTS.VoidClaim |
| Outcome | The package exposes a version-aware claim-void contract to the .NET caller. |
| Confidence | Source-backed |
| Source | [PK82140_CLAIM_ADJUSTMENTS.VoidClaim](procedures/pk82140_claim_adjustments.md#voidclaim) |

---

## BR-PROC-002: Claim combine requests must identify both the source claim and the claim to combine into

| Field | Value |
| --- | --- |
| Statement | Claim combine requests must identify both the source claim and the claim to combine into. |
| Trigger | Package specification parameters `inClaimID` and `inCombineClaimID`. |
| Enforcement | PK82140_CLAIM_ADJUSTMENTS.CombineClaim |
| Outcome | The package contract prevents a combine operation from running without both claim identifiers. |
| Confidence | Source-backed |
| Source | [PK82140_CLAIM_ADJUSTMENTS.CombineClaim](procedures/pk82140_claim_adjustments.md#combineclaim) |

---

## BR-PROC-003: Claim transfer and restore flows require a target worker identifier in addition to claim v

| Field | Value |
| --- | --- |
| Statement | Claim transfer and restore flows require a target worker identifier in addition to claim version inputs. |
| Trigger | Package specification parameters `inWorkerID`, `inUpdateNum`, and `inUserID`. |
| Enforcement | PK82140_CLAIM_ADJUSTMENTS.TransferClaim |
| Outcome | The contract shows that worker reassignment is part of both transfer and restore operations. |
| Confidence | Source-backed |
| Source | [PK82140_CLAIM_ADJUSTMENTS.TransferClaim](procedures/pk82140_claim_adjustments.md#transferclaim) |

## Notes

- Procedure-derived rules are mirrored here so claim-domain readers do not have to open procedure pages to see active constraints.
- Rules without BOF rule attributes are enforced by lifecycle methods, helper methods, or stored-procedure contracts.

## 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.Claim.Maintenance\clsAccidentInjury.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsAttendingPhysician.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsClaimAdjustment.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsClaimDetail.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsClaimDisabilityActivity.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsClaimSupportOrder.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsVocationalDetail.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsVocationalDetailCollection.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsHelper.vb`
- `Business\SAIF.Business.Claim.Maintenance\enums.vb`
- `Business\SAIF.Business.Claim.Maintenance\packages.config`
- `Business\SAIF.Business.Claim.Maintenance\SAIF.BOF.Business.Claim.Maintenance.nuspec`
- `Business\SAIF.Business.Claim.Maintenance\Pipelines\build-vars.yml`
- `Business\SAIF.Business.Claim.Maintenance\CCClaimDataApi\AttendingPhysicians.vb`
- `Business\SAIF.Business.Claim.Maintenance\CCClaimDataApi\ClaimContactsResponse.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsClaimDisabilityActivityCollection.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsClaimMcoEligibility.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsClaimMcoEligibilityCollection.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsClaimPolicy.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsClaimPolicyHistory.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsClaimPolicyHistoryCollection.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsClaimRequestDecision.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsClaimRequestDecisionCollection.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsClaimStatusActivity.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsClaimStatusActivityCollection.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsClaimSupportOrderCollection.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsClaimSupportOrderConn.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsClaimSupportOrderConnCollection.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsClaimTypeActivity.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsClaimTypeActivityCollection.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsConditionDecision.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsConditionDecisionCollection.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsCovid19TestingHistory.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsCovid19TestingHistoryCollection.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsDisabilityAuthActivity.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsDisabilityAuthActivityCollection.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsMedicalCondition.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsMedicalConditionCollection.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsOmittedCondition.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsOmittedConditionCollection.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsTDThreeDayWait.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsTDThreeDayWaitCollection.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsWorkRelease.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsWorkReleaseCollection.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsWorkStatus.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsWorkStatusCollection.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsWorkStatusInjuryClaim.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsWorkerClaimBenefitPayment.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsWorkerClaimBenefitSchedule.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsWorkerInjuryClaim.vb`
- `Business\SAIF.Business.Claim.Maintenance\clsWorkerPharmacyEligibilityReport.vb`
