This page is the complete catalog of business rules that govern this application's behavior. A rule appears here when it is enforced on a code path this application can actually execute — regardless of where the enforcing code lives: the application project itself, a screen code-behind, a local library, a same-repo package, a stored procedure reached through a library's data access path, or a framework base class inherited from a dependency package.
Reachability was determined by tracing outward from this application's entry points — screen event handlers, application workflow steps, and application startup/infrastructure code — through every delegation recorded in the run's analysis findings, including inherited base-class behavior.
A new claim report cannot be submitted until a duplicate check has run against the claimant name and date of injury, and the intake specialist has acknowledged any matches returned.
Trigger
The intake specialist clicks Submit claim on the New Claim screen.
Enforcement
ClaimSubmissionCoordinator.Submit requires a non-null duplicate check token issued by DuplicateClaimChecker.Check; when the token is missing or stale the submission is refused and the duplicate panel is displayed.
Outcome
Submission is blocked, the candidate duplicate claims are listed, and the specialist must either acknowledge that none match or open the matching claim.
A single claim search returns at most 250 claims; when the cap is reached the user is told the result set is incomplete and asked to narrow the criteria.
Trigger
Any claim search executed from the Claim Search screen, including paging and sorting reposts.
Enforcement
ClaimSearchService.SearchClaims sets MaxRows to 250 on the web service request and sets ResultTruncated when the service returns the full 250 rows; ClaimSearch.aspx.vb shows lblResultCap in response.
Outcome
The grid binds 250 rows and a warning message instructs the user to add criteria. No error is raised.
A claim whose status is Closed opens in read-only mode from intake; no intake user may edit claim or claimant data on a closed claim.
Trigger
The user opens a claim whose status is Closed from a search result row or a claim number link.
Enforcement
ClaimSearch.aspx.vb appends mode=readonly to the Claim Detail query string for closed rows, and ClaimDetail.aspx.vb disables the edit panel whenever the claim status is Closed, independent of the query string.
Outcome
Claim Detail renders with all input controls disabled and the Save command hidden.
When both date-of-injury range values are supplied, the end date must not precede the start date.
Trigger
The user submits a search with values in both dtpInjuryFrom and dtpInjuryTo.
Enforcement
The cvInjuryDateRange custom validator runs cvInjuryDateRange_ServerValidate, which compares the two chooser values and sets args.IsValid to False when the end date is earlier.
Outcome
Page validation fails, the validation summary shows "Injury date range is out of order", and no service call is made.
BR-SCR-003 Claimant first name requires last name¶
Field
Value
Statement
A claimant first name is only used as a search criterion when a claimant last name is also supplied.
Trigger
The user enters a first name but leaves the last name blank and submits the search.
Enforcement
BuildSearchCriteria omits the first name from the criteria object when txtClaimantLastName is empty, so the service never receives a first-name-only filter.
Outcome
The search runs against the remaining criteria and the ignored first name is reported in lblCriteriaNote.
Rules defined in a library this application consumes, on a code path this application executes. Each rule keeps its canonical library rule ID; the library's own business-rules.md remains the rule's home page, and the Origin field links to it.
Rules enforced inside stored procedures that this application reaches through a consumed library's data access path. The rule lives in the database, not in application or library code, but it governs application behavior and so belongs in this catalog.
PROC-RULE-004 Claim numbers are issued sequentially per year¶
Field
Value
Statement
A newly inserted claim receives the next sequential claim number within the accident year, reserved under a table lock so no two intake sessions can be issued the same number.
Trigger
A first report of injury is submitted and the claims web service inserts the claim record.
Enforcement
USP_CLAIM_INSERT.AllocateClaimNumber — reads and increments CLAIM_NUMBER_SEQUENCE for the accident year inside the insert transaction with an update lock.
Outcome
The procedure returns the allocated claim number to the service, which returns it to the New Claim screen for display and printing.
Rules that reach this application through base classes, services, or utility types provided by dependency framework packages. They are enforced by inherited behavior, not by code in this repository. The originating class and library are recorded in each rule's Origin field.
INH-001 Authenticated Windows identity required for every request¶
Field
Value
Statement
Every page request must carry an authenticated Windows identity; anonymous requests are rejected before page initialization completes.†
Trigger
Any request to a page deriving from SaifWebPage, which is every screen in Claims Intake.
Enforcement
SaifWebPage.OnInit inspects User.Identity.IsAuthenticated and redirects unauthenticated requests to the access denied page before control reaches the derived page's Page_Load.
Outcome
The unauthenticated request is redirected to AccessDenied.aspx and the screen's own handlers never run.
Rules documented in a consumed library that no application execution path reaches. Listed for completeness so a reader can distinguish "not applicable here" from "missed".
Every business rule heading — application, screen, library, procedure, or inherited — must be H2 (## <RULE-ID>), so every anchor referenced from a screen or operation page resolves. No rule category is exempt: a rule represented only as a row in a shared table has no anchor and cannot be linked.
ID schemes: BR-APP-NNN for application-level rules, BR-SCR-NNN for screen-enforced rules, the canonical library rule ID for library-defined rules, PROC-RULE-NNN for procedure-enforced rules, INH-NNN for inherited rules. Never renumber a library, procedure, or inherited rule.
Mark inferred statements with * and unknown statements with **. Do not use bold inline confidence labels.
Statements marked with † were retrieved from dependency library documentation via the Legends CLI RAG service.
Every rule must record a Reached from value naming at least one application workflow or screen. A rule with no reachable entry point belongs in Rules not reachable from this application, not in an in-scope section.
Note: Statements marked with † were retrieved from dependency library documentation
via the Legends CLI RAG service. They describe inherited behavior from the indicated
origin library and should be verified if the dependency version changes.