A user without conflict-claim access cannot fully access a claim flagged as a worker conflict; access is denied outright (not merely view-only) unless a security override applies.
Trigger
ClaimAppManager.OnCheckSecurity() runs after any successful context change (ChangeContext), when ClaimData.IsWorkerConflict is true.
Enforcement
ClaimSecurity.CheckClaim(inClaim) sets m_ConflictAccess = False when inClaim.IsWorkerConflict and Not UserAccess.ConflictAccess; ClaimAppManager.OnCheckSecurity() then calls MarkNoAccess() and sets Message = ConfidentialAccessDeniedMessage when Not ClaimSecurity.ConflictAccess AndAlso Not CheckForSecurityOverride().
Outcome
Access is fully denied (MarkNoAccess) and a confidential-claim error message is shown, unless CheckForSecurityOverride() returns true. The override delegates to ClaimServices.HasOverrideAcess(DPI, ClaimData.ClaimID, SecurityPrincipal.UserName.ToString) — ClaimServices is not defined anywhere in this library or elsewhere in the scanned repository; the owning library and internal logic of this override cannot be verified.**
A user without exposure-claim access does not have exposure access to a claim flagged as an exposure claim.
Trigger
ClaimSecurity.CheckClaim(inClaim) evaluated whenever OnCheckSecurity() runs and inClaim.IsExposure is true.
Enforcement
m_ExposureAccess = False is set when inClaim.IsExposure and Not UserAccess.ExposureAccess.
Outcome
ClaimSecurity.ExposureAccess returns False; callers outside this library (e.g. screen-level field/section visibility logic) are expected to check this flag to restrict exposure-related data — this library does not itself gate overall access on it beyond exposing the property*.
A user without exposure-claim access does not have health-issue access to a claim flagged as both a health-issue and an exposure claim.
Trigger
ClaimSecurity.CheckClaim(inClaim) when inClaim.IsHealthIssue AndAlso inClaim.IsExposure is true.
Enforcement
m_HealthIssueAccess = False is set when inClaim.IsHealthIssue, inClaim.IsExposure, and Not UserAccess.ExposureAccess. Health-issue access is gated by ExposureAccess, not a separate HealthIssueAccess check, even though ClaimUserAccess.HealthIssueAccess (backed by the CollateralHealthClaim AD resource key) exists and is never consulted by ClaimSecurity.CheckClaim*.
Outcome
ClaimSecurity.HealthIssueAccess returns False only when exposure access is also lacking; if IsHealthIssue is true but IsExposure is false, HealthIssueAccess always remains True regardless of the user's actual health-issue access rights*. Tech debt: the CollateralHealthClaim AD resource key and its ClaimUserAccess.HealthIssueAccess property are declared and exposed but never consulted anywhere in this library's rule evaluation, making the resource key effectively dead from this library's perspective. Whether this is an intentional reserved/superseded key or a latent defect could not be determined from this library's source alone**.
A user without secure-claim access does not have secure-claim access to a claim flagged as involving a hostile worker.
Trigger
ClaimSecurity.CheckClaim(inClaim) when inClaim.IsHostileWorker is true.
Enforcement
m_SecureClaimAccess = False is set when inClaim.IsHostileWorker and Not UserAccess.SecureClaimAccess.
Outcome
ClaimSecurity.SecureClaimAccess returns False; this library does not itself gate MarkNoAccess/MarkViewOnly on this flag directly (only ConflictAccess triggers hard denial in OnCheckSecurity) — callers are expected to consult SecureClaimAccess separately*.
Source
SAIF.Application.Claim\ClaimSecurity.vb
BR-CLM-005 Default view-only access on context change¶
Field
Value
Statement
Every successful claim/worker context change resets the user's access level to view-only before any further access evaluation occurs.
Trigger
ChangeContext() → OnCheckSecurity() runs whenever ContextSet becomes true after a SetClaimContext/SetWorkerContext call.
Enforcement
ClaimAppManager.OnCheckSecurity() calls MarkViewOnly() unconditionally as its first executable action after CheckClaim.
Outcome
The security role is set to view-only by default; only the conflict-access check can subsequently escalate this to MarkNoAccess() (full denial). Write/edit access is presumed to be granted elsewhere (in the concrete subclass or SAIF.Application, not traceable from this library's source)**.
Source
SAIF.Application.Claim\ClaimAppManager.vb
BR-CLM-006 Blank placeholder claim number rejected¶
Field
Value
Statement
An empty claim number, or the literal placeholder text "claim #" (case-insensitive), is not accepted as a valid claim context.
Trigger
SetClaimContext(inClaimNumber As String) is called with a claim-number string.
Enforcement
If inClaimNumber.Trim.Length > 0 AndAlso Not inClaimNumber.ToLower.Equals(MENUCONTEXTLABEL_LOWER) guards the valid path; MENUCONTEXTLABEL_LOWER is "claim #".
Outcome
If the guard fails, ClaimData is cleared, MarkContextNotSet() is called, and Message = ClaimAppConstants.PLEASEENTERCLAIM ("Please enter a valid claim number.") is shown. Tech debt: SetClaimContext(inClaimID As Decimal) (the decimal overload) does not apply this same validation flow — it only calls MarkContextSet() directly and does not call ChangeContext()/OnCheckSecurity()/OnRetrieve(), an asymmetry versus the string overload that may be an intentional lightweight ID-only context set or an inconsistency**.
If claim data cannot be retrieved for a set context, the claim is reported as not found.
Trigger
OnContextChanged() runs after GetClaimData() retrieves (or fails to retrieve) claim data for the current context.
Enforcement
Message = ClaimAppConstants.CLAIMNOTFOUND is set at the start of OnContextChanged(); it is only cleared (Message = String.Empty) and MarkContextSet() called if m_ClaimData.IsValid is true after GetClaimData().
Outcome
If ClaimData.IsValid is false, the "Error: Claim not found." message persists and the context is not marked set.
BR-CLM-001 unresolved dependency: the security-override bypass for the conflict-claim hard-denial gate delegates to ClaimServices.HasOverrideAcess, a type not defined anywhere in this library or the rest of the scanned repository; its owning package/library could not be resolved**.
BR-CLM-003 tech debt: the CollateralHealthClaim/ClaimUserAccess.HealthIssueAccess resource key is declared but never consulted by ClaimSecurity.CheckClaim — see the Outcome field above.
BR-CLM-006 tech debt: the SetClaimContext(inClaimID As Decimal) overload does not trigger the same context-change/security/retrieval pipeline as the string overload — see the Outcome field above.
Mark inferred statements with * and unknown statements with **. Do not use bold inline confidence labels.