Skip to content

SAIF.Business.View.Policy business rules

This page captures business rules enforced by this library.

BR-VP-001 Policy number must be valid before retrieve

Field Value
Statement A policy number must be valid before a policy retrieve is executed.
Trigger Retrieving policy data
Enforcement clsPolicyData.vb — ValidPolicyNum business rule (RuleData clsThrdpartySettlement01)
Outcome Rule violation message "Error: Invalid policy number." and the retrieve is not performed
SQL SQL-010
Source SAIF.Business.View.Policy/clsPolicyData.vb

BR-VP-002 Non-employer account number must not be zero

Field Value
Statement A non-employer account number must not be zero.
Trigger Retrieving a non-employer account
Enforcement clsNonEmployerAccount.vb — IsValidAccountNumber
Outcome Invalid account is rejected
SQL SQL-006
Source SAIF.Business.View.Policy/clsNonEmployerAccount.vb

BR-VP-003 Secure policy requires AD authorization

Field Value
Statement A policy flagged with the SAIF secure policy code may only be viewed by users authorized for the SAIFpolicyInfo Active Directory resource.
Trigger Policy authorization check
Enforcement clsPolicySecurity.vb — IsPolicyValidForUser (~line 174)
Outcome Access denied when not authorized
Source SAIF.Business.View.Policy/clsPolicySecurity.vb

BR-VP-004 Invalid or zero policy number is never valid

Field Value
Statement An invalid or zero policy number is never valid for any user.
Trigger Policy authorization check
Enforcement clsPolicySecurity.vb — IsPolicyValidForUser
Outcome Access denied
Source SAIF.Business.View.Policy/clsPolicySecurity.vb

BR-VP-005 Access granted per user-access-level matrix

Field Value
Statement Access to a policy is granted according to the user access level matrix (SAIF employee, auditor, loss control, agent, group, policyholder, quick file user).
Trigger Policy authorization check
Enforcement clsPolicySecurity.vb — IsPolicyValidForUser, ConvertUserTypeToUserAccessLevel
Outcome Access granted or denied per user type
SQL SQL-023, SQL-024, SQL-025, SQL-026, SQL-027, SQL-028
Source SAIF.Business.View.Policy/clsPolicySecurity.vb

BR-VP-006 Auditor 60-day access window

Field Value
Statement An auditor may access a policy only within a 60-day window around the cancellation/completion date of the audit.
Trigger Auditor authorization check
Enforcement clsPolicySecurity.vb — CanAuditorAccessPolicy
Outcome Access denied outside the window
Tables PA_AUDIT, PA_AUDITOR, PA_POLICY_PERIOD
SQL SQL-024
Source SAIF.Business.View.Policy/clsPolicySecurity.vb

BR-VP-007 Loss control prefix match

Field Value
Statement A loss control consultant may access a policy when the assigned consultant's user name matches the consultant prefix stored on the policy, truncated at the % character.
Trigger Loss control authorization check
Enforcement clsPolicySecurity.vb — IsPolicyValidForUser
Outcome Access granted on prefix match
SQL SQL-031
Source SAIF.Business.View.Policy/clsPolicySecurity.vb

BR-VP-008 Demo loss control matched on UserIdName

Field Value
Statement Demo loss control users are matched on UserIdName instead of UserName.
Trigger Loss control authorization check for a demo user
Enforcement clsPolicySecurity.vb — IsPolicyValidForUser
Outcome Demo user matched against the demo identity
Source SAIF.Business.View.Policy/clsPolicySecurity.vb

BR-VP-009 Fallback to parent-policy authorization

Field Value
Statement If a user is not authorized for a policy directly, authorization is re-evaluated against the policy's parent policy.
Trigger Policy authorization check fails directly
Enforcement clsPolicySecurity.vb — IsPolicyValidForParentPolicy
Outcome Access may still be granted through the parent
SQL SQL-013
Source SAIF.Business.View.Policy/clsPolicySecurity.vb

BR-VP-010 Demo users see masked data

Field Value
Statement Demo users see masked policy, address, agency and team member data.
Trigger Retrieving data while the current user is a demo user type
Enforcement clsPolicyData.vb, clsPolicyAddress.vb, clsAgency.vb, clsTeamAssignment.vb — MaskData using clsConstants.DataMaskingConstants
Outcome Sensitive values replaced with masking constants
Source SAIF.Business.View.Policy/clsPolicyData.vb

BR-VP-011 Policy always affiliated with itself

Field Value
Statement A policy is always at least affiliated with itself.
Trigger Building the affiliated policy list
Enforcement clsPolicyData.vb — affiliate list logic
Outcome The source policy is always present in the affiliate list
SQL SQL-001
Source SAIF.Business.View.Policy/clsPolicyData.vb

BR-VP-012 Affiliated policy list filtered by agentagency

Field Value
Statement The affiliated policy list is filtered by the requesting agent or agency.
Trigger Building the affiliated policy list for an agent user
Enforcement clsPolicyData.vb — affiliate list logic
Outcome Only affiliated policies belonging to the agent/agency remain
SQL SQL-001, SQL-014
Source SAIF.Business.View.Policy/clsPolicyData.vb

BR-VP-013 DisplayAffiliatedPolices matrix controls display

Field Value
Statement Whether affiliated policies are displayed is determined by the DisplayAffiliatedPolices user-type matrix.
Trigger Requesting affiliated policies
Enforcement clsPolicyData.vb — DisplayAffiliatedPolices (lines ~234-275)
Outcome Affiliated policies shown or suppressed
SQL SQL-014
Source SAIF.Business.View.Policy/clsPolicyData.vb

BR-VP-014 Source policy excluded from associations by default

Field Value
Statement The source policy is excluded from an association list unless the caller explicitly requests its inclusion.
Trigger Building a policy association list
Enforcement PolicyAssociations.vb — GetPolicyAssociationList (IncludeSourcePolicy)
Outcome Source policy omitted by default
Tables POLICY_RELATIONSHIP, POLICY
SQL SQL-034
Source SAIF.Business.View.Policy/PolicyAssociations.vb

BR-VP-015 Preferred association type overrides derived type

Field Value
Statement When a preferred association type is supplied it overrides the association type otherwise derived for the policy.
Trigger Building association headers
Enforcement Associations/clsPolicyAssociationFactory.vb — clsPolicyHeaderAssociationFactory
Outcome Preferred type is used
SQL SQL-004
Source SAIF.Business.View.Policy/Associations/clsPolicyAssociationFactory.vb

BR-VP-016 Market type mapping

Field Value
Statement A market type of VOL is Voluntary; any other market type is Assigned Risk.
Trigger Mapping policy data after retrieve
Enforcement clsPolicyData.vb (lines ~443-457)
Outcome Market type display value set
SQL SQL-010
Source SAIF.Business.View.Policy/clsPolicyData.vb

BR-VP-017 Future cancel date only for Pending Cancellation

Field Value
Statement A future cancel date is only populated when the policy status is Pending Cancellation.
Trigger Reading the future cancel date
Enforcement clsPolicyData.vb — GetFutureCancelDate (lines ~643-760)
Outcome Date returned only for pending cancellation, otherwise unset
Tables CANCELLATION
SQL SQL-015, SQL-020
Source SAIF.Business.View.Policy/clsPolicyData.vb

BR-VP-018 Currentrenewal period selection

Field Value
Statement A policy period is the current period when its status is "Open" and the renewal period when its status is "Renew".
Trigger Selecting the current or renewal period
Enforcement clsPolicyData.vb — isCurrentPolicyPeriod, isRenewalPolicyPeriod (lines ~1425-1505)
Outcome Corresponding period is selected
SQL SQL-022
Source SAIF.Business.View.Policy/clsPolicyData.vb

BR-VP-019 Latest printed information-page period

Field Value
Statement The latest policy period with a printed information page is selected by scanning the periods in order.
Trigger Requesting the latest printed information page period
Enforcement clsPolicyData.vb — GetLatestPolicyPeriodInfoPagePrinted
Outcome Most recent qualifying period returned
SQL SQL-017, SQL-022
Source SAIF.Business.View.Policy/clsPolicyData.vb

BR-VP-020 Association type is secured when security group set

Field Value
Statement An association type is a secured type when its security group name is not blank.
Trigger Evaluating an association type
Enforcement Associations/clsAssociationTypeCode.vb — AssociationTypeExtensions.IsSecuredType
Outcome Type treated as secured
Tables ASSOCIATION_TYPE_CODE
SQL SQL-005
Source SAIF.Business.View.Policy/Associations/clsAssociationTypeCode.vb

BR-VP-021 Association category prefix classification

Field Value
Statement Association categories are identified by prefix: MR is a manual relationship and PR is a policy relationship; manual categories use the prefix "M".
Trigger Classifying an association type code
Enforcement Associations/clsAssociationTypeCode.vb — category constants and ToAssociationCategoryPrefixCode
Outcome Association classified as manual or policy relationship
SQL SQL-005
Source SAIF.Business.View.Policy/Associations/clsAssociationTypeCode.vb

BR-VP-022 Team member email address derivation

Field Value
Statement A team member's email address is derived from the assigned unit: SERVIC, SCLC and SAFETYSERVICES produce an @saif.com address; non-SAIF members are resolved by external client lookup; all other, inactive or blank entries produce an empty address.
Trigger Initialising a team assignment
Enforcement clsTeamAssignment.vb — InitializeEmailAddress, InitializeEmailAddressUsingSystemUser
Outcome Email address set or left empty
SQL SQL-029, SQL-030
Source SAIF.Business.View.Policy/clsTeamAssignment.vb

BR-VP-023 Login date on or before 2000-01-01 is never logged in

Field Value
Statement A login date on or before 1 January 2000 is treated as "never logged in".
Trigger Reading policyholder login dates
Enforcement clsPolicyData.vb — login date properties
Outcome Date treated as no login
Source SAIF.Business.View.Policy/clsPolicyData.vb

BR-VP-024 Default association dates

Field Value
Statement When association dates are not supplied, the endorsement/combination date defaults to the data source date and the combined policy period date defaults to the maximum policy period effective date.
Trigger Retrieving associations without explicit dates
Enforcement PolicyAssociations.vb — GetPolicyAssociationList, GetMaxPolicyEffectiveDate
Outcome Default dates applied to the query
Tables POLICY_PERIOD
SQL SQL-034, SQL-035
Source SAIF.Business.View.Policy/PolicyAssociations.vb

BR-VP-025 Missing agency row records a No data found error

Field Value
Statement When no agency row is returned for a policy, a "No data found" error message is added to the object.
Trigger Retrieving agency data
Enforcement clsAgency.vb — AfterRetrieve (AddErrorMessage("NoDataFoundError", "No data found"))
Outcome Error message recorded on the business object
SQL SQL-002
Source SAIF.Business.View.Policy/clsAgency.vb

BR-VP-026 Detail-read failure does not fail overall retrieve

Field Value
Statement Failure to read policy detail does not fail the overall policy retrieve.
Trigger Lazy reading policy detail
Enforcement clsPolicyData.vb — LazyRead(PolicyDetail)
Outcome Exception swallowed; detail fields remain unset
SQL SQL-011
Source SAIF.Business.View.Policy/clsPolicyData.vb

BR-VP-027 CreateInsertUpdateDelete SQL are invalid

Field Value
Statement The create, insert, update and delete SQL properties of this library's criteria are not valid operations.
Trigger Any attempt to persist through these business objects
Enforcement All Criteria classes in SAIF.Business.View.Policy
Outcome Empty statement returned or ApplicationException(clsConstants.Messages.InvalidSQLProperty) thrown
Source SAIF.Business.View.Policy/clsPolicyData.vb

Stored procedure business rules

Rules sourced from Oracle and SQL Server stored procedures referenced by this library.

Rule ID Rule Source Link
PR-BVP-001 Cancel-status derivation is dispatched on the policy status group sp72268_get_cancel_status Details
PR-BVP-002 Cancelled policies use the full cancel-status precedence chain sp72268_get_cancel_status Details
PR-BVP-003 A policy is Judgment status when a judgment legal action is open sp72268_get_cancel_status Details
PR-BVP-004 A policy is Lien status when an open lien legal action exists sp72268_get_cancel_status Details
PR-BVP-005 A policy is Defaulted when the demand response indicates default sp72268_get_cancel_status Details
PR-BVP-006 A policy is Demanded when a demand exists with no response recorded sp72268_get_cancel_status Details
PR-BVP-007 A policy is Pending Audit when a physical audit is outstanding before cancellation sp72268_get_cancel_status Details
PR-BVP-008 A policy is Pending PR when an audit is outstanding but is not a physical audit sp72268_get_cancel_status Details
PR-BVP-009 A cancelled policy carrying a balance is reported as Closed with Balance sp72268_get_cancel_status Details
PR-BVP-010 Application-status policies not owned by WCIS are reported as saifQuote sp72268_get_cancel_status Details
PR-BVP-011 Unhandled errors are surfaced as an application error, not silently swallowed sp72268_get_cancel_status Details
PR-BVP-012 Coverage-bound indicator is delegated to the shared bound check sp73089_get_policy_bound_flag Details
PR-BVP-013 Information-page printed indicator is delegated to sp72253_info_page_printed SP72347_INFO_PAGE_PRINTED_YN Details
PR-BVP-014 Unhandled errors are surfaced as an application error SP72347_INFO_PAGE_PRINTED_YN Details
PR-BVP-015 External client identity is sourced from system_user_contractor, replacing the legacy net_registrant source sp73341_external_client_lookup Details
PR-BVP-016 A lookup miss yields NULL rather than an error sp73341_external_client_lookup Details
PR-BVP-017 Monetary header values are null-safe pk73094_policy_data.getpolicy Details
PR-BVP-018 Cancel status on the policy header is always the shared derivation, never a stored column pk73094_policy_data.getpolicy Details
PR-BVP-019 SIC code is deliberately not returned by this view pk73094_policy_data.getpolicy Details
PR-BVP-020 The "best" policy for an account is chosen by a fixed ranking pk73094_policy_data.get_account_name Details
PR-BVP-021 A null account number yields no name pk73094_policy_data.get_account_name Details
PR-BVP-022 Affiliate type defaults to non-affiliated pk72846_view_policy.getpolicyaffiliatetype Details
PR-BVP-023 Policyholder-user callers get PHP affiliation resolved first pk72846_view_policy.getpolicyaffiliatetype Details
PR-BVP-024 Wrap-up and leasing relationships are classified parent vs member by self-reference pk72846_view_policy.getpolicyaffiliatetype Details
PR-BVP-025 Sub-account and out-of-region relationships use the same self-reference test pk72846_view_policy.getpolicyaffiliatetype Details
PR-BVP-026 Combination-rated policies are classified from the rate account pk72846_view_policy.getpolicyaffiliatetype Details
PR-BVP-027 Minimum-premium combo membership is resolved from the latest combo period pk72846_view_policy.getpolicyaffiliatetype Details
PR-BVP-028 Parent policy is resolved from the affiliate type pk72846_view_policy.getparentpolicy Details
PR-BVP-029 A policy that is not a member is its own parent pk72846_view_policy.getparentpolicy Details
PR-BVP-030 Flat-cancelled and prospect periods never participate in gap calculation pk72846_view_policy.getgaps Details
PR-BVP-031 Coverage gaps combine computed gaps with explicitly recorded gaps pk72846_view_policy.getgaps Details
PR-BVP-032 Claim address requests fall back to the policy address when no current claim location exists pk72846_view_policy.getpolicyaddress Details
PR-BVP-033 A missing contact first name displays as Policyholder pk72846_view_policy.getpolicyaddress Details
PR-BVP-034 Only currently effective locations are returned, most recent first pk72846_view_policy.getpolicyaddress Details
PR-BVP-035 Zero means "return every period" pk72846_view_policy.getpolicyperiods Details
PR-BVP-036 Rating values are masked unless the information page has printed pk72846_view_policy.getpolicyperiods Details
PR-BVP-037 Tentatively rated plans are flagged with an asterisk pk72846_view_policy.getpolicyperiods Details
PR-BVP-038 Only screen-ordered team rows are returned for a policy pk72846_view_policy.team_assign_query Details
PR-BVP-039 Agent of record is resolved through the commission authorization package and excludes agent zero pk72846_view_policy.team_assign_query Details
PR-BVP-040 Agency phone falls back to the location phone when no statement address sequence exists pk72846_view_policy.team_assign_query Details
PR-BVP-041 Waiver presence is a count over waiver detail Pk82033_ThirdParty.get_policy_waiver_count Details
PR-BVP-042 Employer-liability limits resolve through a six-branch precedence union coveragelimits_pkg.getSpecificLimitsForPolicyNum Details
PR-BVP-043 Limit amounts are returned pre-formatted for display coveragelimits_pkg.getSpecificLimitsForPolicyNum Details
PR-BVP-044 Group membership evaluation reads uncommitted data by design cp_policy_in_group Details
PR-BVP-045 The query variant is selected by how the supplied group id is registered cp_policy_in_group Details
PR-BVP-046 Group parents are excluded from group evaluation cp_policy_in_group Details
PR-BVP-047 Only the most recent covered policy period participates cp_policy_in_group Details
PR-BVP-048 A non-zero count means the policy is in the group cp_policy_in_group Details
PR-BVP-049 The report date is normalised to a date without time cp_claimprofile_get_group_policy_list Details
PR-BVP-050 A policy period qualifies if it is the most recent covered period, or the last period in the group still within the report window cp_claimprofile_get_group_policy_list Details
PR-BVP-051 Only active policies with unexpired group membership are listed cp_claimprofile_get_group_policy_list Details
PR-BVP-052 The placeholder chapter code NC is not shown to users cp_claimprofile_get_group_policy_list Details
PR-BVP-053 The loss-control filter supports wildcard matching cp_claimprofile_get_sc_book Details
PR-BVP-054 Flat-cancelled periods are excluded from the safety-consultant book cp_claimprofile_get_sc_book Details
PR-BVP-055 Only active policies with an assigned loss-control consultant are listed cp_claimprofile_get_sc_book Details
PR-BVP-056 The list combines active policies and policies closed within the last five years cp_get_agent_online_policy_list Details
PR-BVP-057 @ForAgency switches the identifier between agency and agent cp_get_agent_online_policy_list Details
PR-BVP-058 Rate information is viewable only for the policy's own rate account or an in-book rate account cp_get_agent_online_policy_list Details
PR-BVP-059 Sales plan is derived from the policy plan description cp_get_agent_online_policy_list Details
PR-BVP-060 A policy in status 3 is flagged as pending cancel cp_get_agent_online_policy_list Details
PR-BVP-061 Current certificates flag reflects existence of certificate detail rows cp_get_agent_online_policy_list Details
PR-BVP-062 Group name is shown only for unexpired group memberships cp_get_agent_online_policy_list Details
PR-BVP-063 Only one active, non-test registrant is returned — the most recently updated cp_external_client_lookup Details
PR-BVP-064 All association types grouped into one category must resolve to a single source procedure clsAssociationTypeCode (dynamic dispatch) Details

Notes

  • All 35 SQL statements in this library are Read-only; there are zero Create/Insert/Update/Delete statements, consistent with BR-VP-027.
  • 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

  • SAIF.Business.View.Policy/clsPolicyData.vb
  • SAIF.Business.View.Policy/clsPolicySecurity.vb
  • SAIF.Business.View.Policy/clsPolicyPeriod.vb
  • SAIF.Business.View.Policy/clsTeamAssignment.vb
  • SAIF.Business.View.Policy/clsTeamAssignmentCollection.vb
  • SAIF.Business.View.Policy/Associations/clsPolicyAssociation.vb
  • SAIF.Business.View.Policy/clsPolicySecurity.vb
  • SAIF.Business.View.Policy/clsPolicyData.vb
  • SAIF.Business.View.Policy/clsTeamAssignment.vb
  • SAIF.Business.View.Policy/clsTeamAssignmentCollection.vb
  • SAIF.Business.View.Policy/app.config
  • SAIF.Business.View.Policy/Web.config