Skip to content

SAIF.Business.Claim.Entry business rules

This page captures business rules enforced by SAIF.Business.Claim.Entry.

BR-CE-001: Injury date must be on or after worker's birth date

Field Value
Statement Injury date must be on or after worker's birth date
Trigger clsClaimEntry.IsValid via CompareInjuryDate_BirthDate
Enforcement clsClaimEntry.vb
Outcome Validation failure if InjuryDate < BirthDate
Confidence Source-backed
Source See page sources

BR-CE-002: If birth date is entered, age at injury must be 0 (federal/inmate only)

Field Value
Statement If birth date is entered, age at injury must be 0 (federal/inmate only)
Trigger ValidAgeAndBirthDate called externally
Enforcement clsClaimEntry.vb
Outcome Validation failure
Confidence Source-backed
Source See page sources

BR-CE-003: Manual claim number must not already exist and must not exceed '7799999' if numeric

Field Value
Statement Manual claim number must not already exist and must not exceed '7799999' if numeric
Trigger ValidManualClaim
Enforcement clsClaimEntry.vb
Outcome Returns false — prevents save
Confidence Source-backed
Source See page sources

BR-CE-004: Active claim flag is 'Y' only when status is 'New'

Field Value
Statement Active claim flag is 'Y' only when status is 'New'
Trigger BeforeInsert / BeforeUpdate
Enforcement clsClaimEntry.vb
Outcome Derived field set automatically
Confidence Source-backed
Source See page sources

BR-CE-005: Work release status must exist if work release date or code is provided (state only)

Field Value
Statement Work release status must exist if work release date or code is provided (state only)
Trigger UpdateWorkReleaseStatus
Enforcement clsStateClaimEntry.vb
Outcome Creates/updates/deletes child object
Confidence Source-backed
Source See page sources

BR-CE-006: Tail coverage claims (policy subcode = 'T') are ineligible for fast track*

Field Value
Statement Tail coverage claims (policy subcode = 'T') are ineligible for fast track*
Trigger IsPolicyTailCoverage property
Enforcement clsClaimEntry.vb
Outcome Filtering condition for fast-track eligibility
Confidence Source-backed
Source See page sources

BR-CE-007: Non-Oregon state defaults county code to '37'

Field Value
Statement Non-Oregon state defaults county code to '37'
Trigger DetermineCountyCode
Enforcement clsStateClaimEntry.vb
Outcome Sets county to non-Oregon constant
Confidence Source-backed
Source See page sources

BR-CE-008: Oregon county code is resolved from zip via ZIP_MCO_COUNTY table

Field Value
Statement Oregon county code is resolved from zip via ZIP_MCO_COUNTY table
Trigger DetermineCountyCode
Enforcement clsStateClaimEntry.vb
Outcome Zip-to-county lookup
Confidence Source-backed
Source See page sources

BR-CE-009: Multiple employer letter request is inserted when claim is New and MultipleEmprFlag = 'Y'

Field Value
Statement Multiple employer letter request is inserted when claim is New and MultipleEmprFlag = 'Y'
Trigger AddNewStatusData (state)
Enforcement clsStateClaimEntry.vb
Outcome Insert to CL_MULT_EMPLOYER_LETTER_REQ
Confidence Source-backed
Source See page sources

BR-CE-010: Pharmacy eligibility update date must use override or default to current timestamp

Field Value
Statement Pharmacy eligibility update date must use override or default to current timestamp
Trigger BeforeUpdate
Enforcement clsPharmacyEligibility.vb
Outcome Conditional date assignment
Confidence Source-backed
Source See page sources

BR-CE-011: Optimistic concurrency — update fails if RowsAffected <> 1

Field Value
Statement Optimistic concurrency — update fails if RowsAffected <> 1
Trigger All After* methods
Enforcement clsClaimEntry.vb, clsPharmacyEligibility.vb
Outcome AddErrorMessage with DB contention error
Confidence Source-backed
Source See page sources

BR-CE-012: Multi-claim detection returns the most recently updated same-worker claim within a 14-day injury-date window

Field Value
Statement CheckForMultipleClaimsForWorker searches CL_INJURY_CLAIM for the same worker, excludes the current claim, restricts to injury dates within ±14 days of the current claim's injury date, and returns only the SAIF claim number of the match with the maximum UPDATE_DATE.
Trigger clsClaimEntry.CheckForMultipleClaimsForWorker
Enforcement clsClaimEntry.vb
Outcome Returns a trimmed claim number string (empty if no match); callers use it to warn of a possible duplicate/related claim.*
Confidence Source-backed*
Source See page sources

BR-CE-013: Saving a New-status claim cascades auxiliary status rows

Field Value
Statement When a claim is saved with IsNewStatus = True, the save also queues inserts for claim request decision, claim status activity, and claim type activity; MCO eligibility is queued only when McoID is non-blank, and employer/policy history is queued only when PolicyNum > 0.
Trigger clsClaimEntry.AddNewStatusData, called from BeforeInsert and BeforeUpdate
Enforcement clsClaimEntry.vb
Outcome Additional rows created in CL_CLAIM_REQUEST_DECISION, CL_CLAIM_STATUS_ACTIVITY, CL_CLAIM_TYPE_ACTIVITY, and conditionally CL_CLAIM_MCO_ELIGIBILITY / CL_CLAIM_POLICY_HISTORY; each auxiliary insert is separately row-count checked
Confidence Source-backed
Source See page sources

BR-CE-014: Accepted manual claim numbers are truncated to seven characters with a recalculated check digit

Field Value
Statement After ValidManualClaim accepts a manually entered claim number, only the leftmost seven characters are stored in SaifClaimNum, and the alpha check digit is always recomputed from that value rather than trusting any caller-supplied trailing check character.
Trigger clsClaimEntry.ValidManualClaim
Enforcement clsClaimEntry.vb
Outcome Stored claim number is normalized to 7 characters plus a recalculated check digit
Confidence Source-backed
Source See page sources

BR-CE-015: Work-release status child record lifecycle follows presence of code/date and claim deletion

Field Value
Statement UpdateWorkReleaseStatus creates a work-release-status child when a work release date or code is supplied and none exists; updates the child when both a code/date and the child already exist; deletes the child when both values become empty; and deletes any existing child outright when the parent claim itself is deleted.
Trigger clsStateClaimEntry.UpdateWorkReleaseStatus, called from IsValid
Enforcement clsStateClaimEntry.vb
Outcome Child work-release-status object is created, updated, or deleted to stay consistent with the parent claim's work-release fields
Confidence Source-backed
Source See page sources

BR-CE-016: Full pharmacy eligibility extract excludes inactive records

Field Value
Statement GetEligibilityReports(inGetAllRecords:=True) excludes rows where eligibility_status_code = 'I' from the full extract.
Trigger clsPharmacyEligibilityReportCollection.GetEligibilityReports
Enforcement clsPharmacyEligibility.vb
Outcome Inactive eligibility rows are never returned in the full-extract mode
Confidence Source-backed
Source See page sources

BR-CE-017: Change-only pharmacy eligibility extract requires an untransmitted or changed row

Field Value
Statement GetEligibilityReports(inGetAllRecords:=False) returns only rows that are untransmitted or updated after their last transmit date, whose current status or effective date differs from the previous stored values, and excludes both never-transmitted-inactive rows and inactive-to-inactive repeats.
Trigger clsPharmacyEligibilityReportCollection.GetEligibilityReports
Enforcement clsPharmacyEligibility.vb
Outcome Delta extract used for incremental pharmacy eligibility transmission
Confidence Source-backed
Source See page sources

BR-CE-018: First-fill (FF) eligibility extract remaps inactive status to outbound code '1'

Field Value
Statement GetEligibilityFFReports hard-codes the outbound EligibilityStatusCode to '1' for rows where MedImpact has been transmitted (medimpact_transmit_date is not null), the stored status is inactive ('I'), and the regular transmit has not yet occurred (transmit_date is null).
Trigger clsPharmacyEligibilityReportCollection.GetEligibilityFFReports
Enforcement clsPharmacyEligibility.vb
Outcome Downstream consumers see outbound code '1' instead of the stored inactive code for this specific transmit-timing combination
Confidence Source-backed
Source See page sources

Field Value
Statement GetFirstFillEligibilityReports requires a joined CL_801_DOCUMENT row with document type code '9', a null medimpact_transmit_date, a non-inactive eligibility status, and an update_date at least two minutes in the past before the row is eligible for first-fill pickup.
Trigger clsPharmacyEligibilityReportCollection.GetFirstFillEligibilityReports
Enforcement clsPharmacyEligibility.vb
Outcome Prevents first-fill extraction of rows that are too new or lack the required supporting document
Confidence Source-backed
Source See page sources

BR-CE-020: Submitted Online 801 submissions cannot be deleted

Field Value
Statement Rule_ValidDelete blocks deletion of a cls801Submission unless its status is Incomplete; a submitted submission is not deletable from the business layer.
Trigger cls801Submission validation rules, evaluated before Save()/delete
Enforcement Online801\Submission\cls801Submission.vb
Outcome Validation failure prevents deletion of submitted rows
Confidence Source-backed
Source See page sources

BR-CE-021: New Online 801 submissions default to Incomplete status with preseeded language and policy number

Field Value
Statement A newly created cls801Submission always starts with SubmissionStatusCode = INCOMPLETE, defaults SubmissionData.Box12LanguagePreferenceCode to "None", and copies the supplied policy number into SubmissionData.Box36InsurancePolicyNum.
Trigger cls801Submission.New801Submission / Create
Enforcement Online801\Submission\cls801Submission.vb
Outcome New submissions always begin in a consistent default state
Confidence Source-backed
Source See page sources

BR-CE-022: Worker lookup requires unique-PersonID consensus and uses a 14-day injury-date window for same-claim detection

Field Value
Statement FindWorker treats a search as resolved only when every returned candidate shares the same PersonID; when a resolved worker's injury date falls within ±14 days of the submission's injury date, the matching claim is treated as the same claim and its ClaimID is adopted.
Trigger cls801Submission.FindWorker, delegating to clsFindWorkerAPI
Enforcement Online801\Submission\cls801Submission.vb, Online801\Submission\clsFindWorkerAPI.vb
Outcome Prevents duplicate claim creation when a matching in-progress claim already exists for the worker
Confidence Source-backed
Source See page sources

BR-CE-023: ClaimCenter submission shifts loss date and claimant birth date to avoid same-day rollback

Field Value
Statement Before building the ClaimCenter submission payload, clsNewClaimModel shifts LossDate forward by one minute and shifts the claimant's date of birth forward by two hours, to avoid the receiving system rolling either date back a day due to time-zone conversion.
Trigger clsNewClaimModel.New(submission)
Enforcement Online801\Submission\ApiNewClaimModels\clsNewClaimModel.vb
Outcome ClaimCenter receives shifted date/time values rather than the raw stored dates*
Confidence Source-backed*
Source See page sources

BR-CE-024: Claim search requires a policy number greater than zero

Field Value
Statement clsClaimSearchCriteria's only registered validation rule, ValidPolicyNum, requires PolicyNum > 0; an invalid (unset) policy number causes GetResults to return an empty collection rather than raising an error.
Trigger clsClaimSearchCriteria business rules, evaluated via IsValid in clsClaimSearchResultCollection.GetResults
Enforcement Online801\Search\clsClaimSearchCriteria.vb, Online801\Search\clsClaimSearchResult.vb
Outcome Searches without a policy number silently return no results
Confidence Source-backed
Source See page sources

BR-PROC-001: Updates only succeed when the caller-supplied LastUpdateNum matches the current row vers

Field Value
Statement Updates only succeed when the caller-supplied LastUpdateNum matches the current row version.
Trigger WHERE ... UPDATE_NUM = LastUpdateNum in submission_update.
Enforcement PK82538_ONLINE_801_CLAIM.submission_update
Outcome Returns SQL%ROWCOUNT; the BOF caller treats non-1 results as a contention failure.
Confidence Source-backed
Source PK82538_ONLINE_801_CLAIM.submission_update

BR-PROC-002: Deletes only succeed when the caller-supplied LastUpdateNum matches the current row vers

Field Value
Statement Deletes only succeed when the caller-supplied LastUpdateNum matches the current row version.
Trigger WHERE ... UPDATE_NUM = LastUpdateNum in submission_delete and submission_data_delete.
Enforcement PK82538_ONLINE_801_CLAIM.submission_delete
Outcome Returns SQL%ROWCOUNT so the caller can reject stale deletes.
Confidence Source-backed
Source PK82538_ONLINE_801_CLAIM.submission_delete

BR-PROC-003: Document updates are version-checked with LastUpdateNum

Field Value
Statement Document updates are version-checked with LastUpdateNum.
Trigger WHERE CL_801_DOCUMENT_SEQ_NUM = DocSeqNum and update_num = LastUpdateNum.
Enforcement PK82538_ONLINE_801_CLAIM.document_update
Outcome Protects Online 801 document rows from lost updates.
Confidence Source-backed
Source PK82538_ONLINE_801_CLAIM.document_update

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.

Note: Statements marked with * were inferred from code structure, naming conventions, or contextual evidence where direct confirmation was not available in source artifacts.

Sources

  • Business\SAIF.Business.Claim.Entry\clsClaimEntry.vb
  • Business\SAIF.Business.Claim.Entry\clsStateClaimEntry.vb
  • Business\SAIF.Business.Claim.Entry\clsClaimEntryBusinessRules.vb
  • Business\SAIF.Business.Claim.Entry\clsPharmacyEligibility.vb
  • Business\SAIF.Business.Claim.Entry\enums.vb
  • Business\SAIF.Business.Claim.Entry\packages.config
  • Business\SAIF.Business.Claim.Entry\SAIF.BOF.Business.Claim.Entry.nuspec
  • Business\SAIF.Business.Claim.Entry\app.config
  • Business\SAIF.Business.Claim.Entry\nuget.config
  • Business\SAIF.Business.Claim.Entry\Pipelines\build-vars.yml
  • Business\SAIF.Business.Claim.Entry\Pipelines\build.yml
  • Business\SAIF.Business.Claim.Entry\Pipelines\release.yml
  • Business\SAIF.Business.Claim.Entry\Online801\Submission\cls801Document.vb
  • Business\SAIF.Business.Claim.Entry\Online801\Submission\cls801Submission.vb
  • Business\SAIF.Business.Claim.Entry\Online801\Submission\cls801SubmissionData.vb
  • Business\SAIF.Business.Claim.Entry\Online801\Submission\clsFindWorkerAPI.vb
  • Business\SAIF.Business.Claim.Entry\Online801\Submission\clsSubmitClaimByAPI.vb
  • Business\SAIF.Business.Claim.Entry\Online801\Search\clsClaimSearchResult.vb
  • Business\SAIF.Business.Claim.Entry\Online801\Search\clsClaimSearchCriteria.vb
  • Business\SAIF.Business.Claim.Entry\Online801\Search\CCClaimDataApi\clsClaimSearchApi.vb
  • Business\SAIF.Business.Claim.Entry\Online801\CCClaimDataAPIResponseData.vb
  • Business\SAIF.Business.Claim.Entry\Online801\ClaimCenterAPIResponseData.vb
  • Business\SAIF.Business.Claim.Entry\Online801\clsRecordInfo.vb
  • Business\SAIF.Business.Claim.Entry\Online801\mdlCodeTables.vb