Skip to content

SAIF.Business.Tasks.Claim architecture

SAIF.Business.Tasks.Claim is a business/domain-layer class library that supplies the concrete task types built on the abstract contract defined by SAIF.Business.Tasks. It has no entry point, no UI, and no direct ADO.NET connection handling; it sits between the application layer (SAIF.Application.Claim, SAIF.Application.Claim.Legal) and the SAIF BOF data portal, and contributes almost no persistence SQL of its own.

Responsibilities

  • Supply the concrete specialization tier over SAIF.Business.Tasks: source-system identity (Claims, CoverageB), claim binding, claim-specific business rules, and presentation-oriented collection shaping (sort, masking, filter echoes).
  • Bind claim tasks (clsClaimTask, clsClaimTaskCollection, clsMyTaskCollection) and Coverage B tasks (clsCoverageBTask, clsCoverageBTaskCollection) to their owning claim via CLAIM_ID, enriching each task with human-readable claim attributes obtained either from clsClaimData (single-object path) or the Oracle procedure PK82284_CLAIM_TASK.SELECT_ADDITIONAL_FIELDS (bulk/list path).
  • Provide the read-only LEGACY_TASK_CODE lookup pair (clsLegacyTaskCode, clsLegacyTaskCodeCollection) for task templating metadata.
  • Offer clsClaimTaskGenerator as a batch/bulk-creation facade so other applications can raise workflow tasks against claims without knowing the underlying task object model.
  • Apply access-based confidentiality redaction to "my tasks" retrieval so worker names are hidden from users lacking exposure/conflict/collateral/secure access.

Component boundaries

  • clsClaimTask / clsClaimTaskCollection / clsMyTaskCollection: the claim-task family — clsClaimTask binds a task row to clsClaimData; clsClaimTaskCollection is a plain filtered retrieval; clsMyTaskCollection adds per-mailid retrieval, confidentiality masking, and claim-grouped priority sorting.
  • clsCoverageBTask / clsCoverageBTaskCollection: the structurally parallel Coverage B task family — same override set and Create → GetClaimData → PostFill shape as the claim-task family, differing in rules and category-description sourcing.
  • clsClaimTaskGenerator: a batch-creation facade — not itself persisted despite inheriting clsBusinessBase; it wraps a clsClaimTaskCollection and forwards IsValid, IsDirty, ErrorMessages, ErrorCount, Save, ToXML, GetReportXML.
  • clsLegacyTaskCode / clsLegacyTaskCodeCollection: strictly read-only LEGACY_TASK_CODE code-table boundary — write-SQL properties throw ApplicationException(clsConstants.Messages.InvalidSQLProperty).
  • Claim-data enrichment boundary: PostFill chooses clsClaimData when the criteria carries a ClaimID (single/new task) and the PK82284_CLAIM_TASK.SELECT_ADDITIONAL_FIELDS stored procedure when it does not (list retrieval) — a deliberate performance split.*
  • Confidentiality boundary: clsMyTaskCollection.AfterRetrieve is the only place in this library that applies access-based data redaction, resolving the four access checks once per retrieval rather than per row.
  • Institutions typed DataSet: compiled into this assembly but has no referencing code — an apparently misplaced artifact, mirroring the same artifact in SAIF.Business.Tasks.*

Interaction model

  • This library never instantiates persistence directly: concrete task types extend clsTask / clsTaskCollection from SAIF.Business.Tasks, which owns the pk82036_task stored-procedure CRUD path and the dynamic TASK search-criteria assembly.
  • Claim attribute enrichment is delegated externally to clsClaimData and ClaimServices (SAIF.BOF.Business.View.Claim) — resolved by ClaimID for single objects, or via the PK82284_CLAIM_TASK.SELECT_ADDITIONAL_FIELDS stored procedure for list retrieval.
  • Authorization is programmatic: ObjectServices.HasResourceAccess/HasResourceAccessExternal gate task-owner (mailid) assignment; ClaimServices.Has*Access calls gate confidentiality redaction in clsMyTaskCollection; clsClaimSecurity.RTWAssignedToClaim gates external RTW-user assignment.
  • clsClaimTaskGenerator composes multiple clsClaimTask creations into a single clsClaimTaskCollection and persists them together via one Save() call, forwarding to the inherited base collection save path.
  • Every business type is <Serializable()>, consistent with remoting/session persistence of BOF objects across the web tier.*

Architecture diagram

The following diagram shows the high-level component boundaries within SAIF.Business.Tasks.Claim and their relationship to the base task library, claim data services, and callers.

flowchart TD
    App["Application layer<br>(SAIF.Application.Claim*)"] --> Generator["clsClaimTaskGenerator<br>(batch-creation facade)"]
    Generator --> ClaimTaskColl["clsClaimTaskCollection /<br>clsMyTaskCollection"]
    App --> ClaimTaskColl
    App --> CovBColl["clsCoverageBTaskCollection"]
    ClaimTaskColl --> ClaimTask["clsClaimTask"]
    CovBColl --> CovBTask["clsCoverageBTask"]
    App --> LegacyCodes["clsLegacyTaskCodeCollection<br>(LEGACY_TASK_CODE lookup)"]
    ClaimTask --> BaseTask["clsTask / clsTaskCollection<br>(SAIF.Business.Tasks)"]
    CovBTask --> BaseTask
    ClaimTaskColl --> BaseTask
    CovBColl --> BaseTask
    ClaimTask --> ClaimData["clsClaimData / ClaimServices<br>(SAIF.Business.View.Claim)"]
    CovBTask --> ClaimData
    ClaimTask --> ExtraFields["PK82284_CLAIM_TASK.SELECT_ADDITIONAL_FIELDS<br>(stored procedure)"]
    BaseTask --> DPI["IDataPortalInfo<br>(caller-supplied data portal)"]

Sequence diagram

The following diagram shows the "my tasks" retrieve-and-redact sequence (clsMyTaskCollection.GetTasks → AfterRetrieve).

sequenceDiagram
    participant Caller as Application layer
    participant MyTasks as clsMyTaskCollection
    participant DPI as IDataPortalInfo
    participant ClaimSvc as ClaimServices
    Caller->>MyTasks: GetTasks(dpi, MyTaskCriteria)
    MyTasks->>DPI: RetrieveObject(criteria)
    DPI-->>MyTasks: result rows
    MyTasks->>ClaimSvc: HasExposureAccess / HasConflictAccess /<br>HasCollateralAccess / HasSecureAccess
    ClaimSvc-->>MyTasks: access flags
    MyTasks->>MyTasks: build clsClaimTask rows,<br>redact WorkerName where unauthorized
    MyTasks-->>Caller: sorted, access-filtered clsMyTaskCollection

Design constraints

  • Business objects must never open database connections directly; all persistence flows through the caller-supplied IDataPortalInfo, inherited from SAIF.Business.Tasks.
  • clsLegacyTaskCode* code-table objects are strictly read-only — attempting to use their write-SQL properties raises ApplicationException(clsConstants.Messages.InvalidSQLProperty).
  • TASK create/update/delete is routed exclusively through the inherited pk82036_task stored-procedure package; this library adds only the PK82284_CLAIM_TASK.SELECT_ADDITIONAL_FIELDS enrichment call.
  • The body of PK82284_CLAIM_TASK.SELECT_ADDITIONAL_FIELDS is not in this repository, so the claim tables it reads and its error behavior are unknown.**
  • clsClaimTask.Criteria and clsCoverageBTask.Criteria inherit their IBusinessCriteria SQL properties from clsTask.CriteriaBase rather than declaring their own; only the two clsLegacyTaskCode* criteria classes implement IBusinessCriteria directly.
  • The Institutions typed DataSet is compiled into this assembly but has no referencing code — the same misplaced artifact observed in SAIF.Business.Tasks.*

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

  • SAIF.Business.Tasks.Claim/clsClaimTask.vb
  • SAIF.Business.Tasks.Claim/clsClaimTaskCollection.vb
  • SAIF.Business.Tasks.Claim/clsClaimTaskGenerator.vb
  • SAIF.Business.Tasks.Claim/clsCoverageBTask.vb
  • SAIF.Business.Tasks.Claim/clsCoverageBTaskCollection.vb
  • SAIF.Business.Tasks.Claim/clsLegacyTaskCode.vb
  • SAIF.Business.Tasks.Claim/clsLegacyTaskCodeCollection.vb
  • SAIF.Business.Tasks.Claim/clsMyTaskCollection.vb
  • SAIF.Business.Tasks.Claim/SAIF.Business.Tasks.Claim.vbproj
  • SAIF.Business.Tasks.Claim/packages.config
  • SAIF.Business.Tasks.Claim/app.config
  • SAIF.Business.Tasks.Claim/Web.config
  • SAIF.Business.Tasks/SAIF.Business.Tasks.vbproj