Denial and fraud eligibility¶
These two read-only properties on clsClaimUnit answer NCCI non-compensable reporting questions: whether the claim's injury claim has been denied final, and whether the claim unit is considered fully fraudulent. Both apply the same 2013-01-01 eligibility cutoff and both cache their looked-up value on the instance after first evaluation.
| Field | Value |
|---|---|
| Operation ID | OP-US-03 |
| Trigger | Caller reads clsClaimUnit.IsDeniedFinal or clsClaimUnit.IsFullyFraudulent(clmData) |
| Inputs | ClaimID (from the claim unit itself); for fully-fraudulent, also a clsClaimData instance supplying FraudConvictionFlag |
| Outputs | Cached boolean flags (m_DenialFinalFlag, m_FullyFraudulentFlag) reflecting denied-final and fully-fraudulent status |
| Primary components | clsClaimUnit.IsDeniedFinal, clsClaimUnit.IsFullyFraudulent |
| Entry point | Business\SAIF.Business.UnitStat\clsClaimUnit.vb |
Steps¶
- Denied-final lookup.
IsDeniedFinalchecks whetherm_DenialFinalFlagis already populated; if empty, it runs a scalar query againstCL_INJURY_CLAIM.DENIED_FINAL_FLAGfor the claim unit'sClaimID(SQL-014, CL_INJURY_CLAIM) and caches the result (defaulting to an empty string if the query returns no value). - Denied-final result. The property returns
Trueonly when the cached flag equals the framework'sYconstant; any other value (including the empty-string default from a missing row) evaluates toFalse. - Fully-fraudulent lookup.
IsFullyFraudulent(clmData As clsClaimData)checks whetherm_FullyFraudulentFlagis already populated; if empty, it runs a scalar query that joinsUS_CLAIM_UNITtoUS_POLICY_UNITonPolicyUnitSeqNum, requiring the policy unit to be active (ACTIVE_UNIT_FLAG = 'Y'), non-historical (HISTORICAL_FLAG = 'N'), and effective on or after the non-compensable start date (SQL-015, US_CLAIM_UNIT, US_POLICY_UNIT). - External fraud-conviction input. The query binds the caller-supplied
clmData.FraudConvictionFlag(fromSAIF.Business.View.Claim.clsClaimData) directly as the value returned by the query when the eligibility join matches — effectively, the property echoes back the caller's own fraud-conviction flag but only when the policy unit is eligible under the non-compensable rule.** No docs currently exist forSAIF.Business.View.Claimin this repository, so the exact semantics and lifecycle ofFraudConvictionFlagon the caller's side are unconfirmed. - Fully-fraudulent result. The property returns
Trueonly when the cached flag equals the framework'sYconstant; a policy unit that fails the eligibility join (inactive, historical, or effective before 2013-01-01) yields no row and therefore an empty cached value, which evaluates toFalse. - Eligibility cutoff. Both properties' documentation comments state they apply only to policy units effective on or after 2013-01-01 (BR-US-027) — for
IsDeniedFinalthis is asserted by the remarks only, since the underlying query does not itself filter by policy unit date* (it queriesCL_INJURY_CLAIMdirectly, unscoped by unit effective date); forIsFullyFraudulentthe cutoff is enforced directly in the SQL join predicate. - Caching semantics. Because the cached fields are private instance state seeded from the first query execution, the same claim unit instance never re-queries the database for subsequent reads. Callers needing a fresh read (for example, after another process changes
CL_INJURY_CLAIMorUS_POLICY_UNIT) must retrieve a newclsClaimUnitinstance.
Process flow¶
flowchart TD
Start([Caller reads IsDeniedFinal<br>or IsFullyFraudulent]) --> Which{Which property?}
Which -->|IsDeniedFinal| CachedA{DenialFinalFlag<br>already cached?}
CachedA -->|Yes| ReturnA([Return cached result])
CachedA -->|No| QueryA[Query CL_INJURY_CLAIM<br>DENIED_FINAL_FLAG by ClaimID]
QueryA --> CacheA[Cache result;<br>default to empty string]
CacheA --> ReturnA
Which -->|IsFullyFraudulent| CachedB{FullyFraudulentFlag<br>already cached?}
CachedB -->|Yes| ReturnB([Return cached result])
CachedB -->|No| Elig{Policy unit active,<br>non-historical, and<br>effective on/after 2013-01-01?}
Elig -->|No| EmptyB[No row returned;<br>cache empty string]
Elig -->|Yes| EchoB[Query returns caller-supplied<br>FraudConvictionFlag]
EchoB --> CacheB[Cache result]
EmptyB --> ReturnB
CacheB --> ReturnB
Failure and edge-case behavior¶
IsDeniedFinal's underlying query is not itself scoped to the 2013-01-01 cutoff; the cutoff is documented only in code remarks, so a caller could technically read a denied-final flag for a policy unit effective before that date even though the rule states it should not apply.*IsFullyFraudulentdoes not independently verify fraud; it reflects the caller-suppliedclmData.FraudConvictionFlagback only when the policy-unit eligibility join succeeds, so the correctness of the result depends entirely on the caller passing an accurateclsClaimDatainstance.- The exact semantics of
SAIF.Business.View.Claim.clsClaimData.FraudConvictionFlagare unconfirmed, since no documentation exists for that library in this repository.** - Both flags are cached for the lifetime of the
clsClaimUnitinstance; there is no cache-invalidation or refresh mechanism.
Related documentation¶
Note: 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¶
Business\SAIF.Business.UnitStat\clsClaimUnit.vb