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 viaCLAIM_ID, enriching each task with human-readable claim attributes obtained either fromclsClaimData(single-object path) or the Oracle procedurePK82284_CLAIM_TASK.SELECT_ADDITIONAL_FIELDS(bulk/list path). - Provide the read-only
LEGACY_TASK_CODElookup pair (clsLegacyTaskCode,clsLegacyTaskCodeCollection) for task templating metadata. - Offer
clsClaimTaskGeneratoras 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 —clsClaimTaskbinds a task row toclsClaimData;clsClaimTaskCollectionis a plain filtered retrieval;clsMyTaskCollectionadds per-mailid retrieval, confidentiality masking, and claim-grouped priority sorting.clsCoverageBTask/clsCoverageBTaskCollection: the structurally parallel Coverage B task family — same override set andCreate→GetClaimData→PostFillshape as the claim-task family, differing in rules and category-description sourcing.clsClaimTaskGenerator: a batch-creation facade — not itself persisted despite inheritingclsBusinessBase; it wraps aclsClaimTaskCollectionand forwardsIsValid,IsDirty,ErrorMessages,ErrorCount,Save,ToXML,GetReportXML.clsLegacyTaskCode/clsLegacyTaskCodeCollection: strictly read-onlyLEGACY_TASK_CODEcode-table boundary — write-SQL properties throwApplicationException(clsConstants.Messages.InvalidSQLProperty).- Claim-data enrichment boundary:
PostFillchoosesclsClaimDatawhen the criteria carries aClaimID(single/new task) and thePK82284_CLAIM_TASK.SELECT_ADDITIONAL_FIELDSstored procedure when it does not (list retrieval) — a deliberate performance split.* - Confidentiality boundary:
clsMyTaskCollection.AfterRetrieveis the only place in this library that applies access-based data redaction, resolving the four access checks once per retrieval rather than per row. Institutionstyped DataSet: compiled into this assembly but has no referencing code — an apparently misplaced artifact, mirroring the same artifact inSAIF.Business.Tasks.*
Interaction model¶
- This library never instantiates persistence directly: concrete task types extend
clsTask/clsTaskCollectionfrom SAIF.Business.Tasks, which owns thepk82036_taskstored-procedure CRUD path and the dynamicTASKsearch-criteria assembly. - Claim attribute enrichment is delegated externally to
clsClaimDataandClaimServices(SAIF.BOF.Business.View.Claim) — resolved byClaimIDfor single objects, or via thePK82284_CLAIM_TASK.SELECT_ADDITIONAL_FIELDSstored procedure for list retrieval. - Authorization is programmatic:
ObjectServices.HasResourceAccess/HasResourceAccessExternalgate task-owner (mailid) assignment;ClaimServices.Has*Accesscalls gate confidentiality redaction inclsMyTaskCollection;clsClaimSecurity.RTWAssignedToClaimgates external RTW-user assignment. clsClaimTaskGeneratorcomposes multipleclsClaimTaskcreations into a singleclsClaimTaskCollectionand persists them together via oneSave()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 fromSAIF.Business.Tasks. clsLegacyTaskCode*code-table objects are strictly read-only — attempting to use their write-SQL properties raisesApplicationException(clsConstants.Messages.InvalidSQLProperty).TASKcreate/update/delete is routed exclusively through the inheritedpk82036_taskstored-procedure package; this library adds only thePK82284_CLAIM_TASK.SELECT_ADDITIONAL_FIELDSenrichment call.- The body of
PK82284_CLAIM_TASK.SELECT_ADDITIONAL_FIELDSis not in this repository, so the claim tables it reads and its error behavior are unknown.** clsClaimTask.CriteriaandclsCoverageBTask.Criteriainherit theirIBusinessCriteriaSQL properties fromclsTask.CriteriaBaserather than declaring their own; only the twoclsLegacyTaskCode*criteria classes implementIBusinessCriteriadirectly.- The
Institutionstyped DataSet is compiled into this assembly but has no referencing code — the same misplaced artifact observed inSAIF.Business.Tasks.*
Related documentation¶
- Index
- Overview
- Dependencies
- Operations and processes
- Business rules
- Database tables
- SQL catalog
- API reference
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