SAIF.Business.Tasks business rules
This page captures business rules enforced by this library.
BR-001: Valid source and category combination
Field
Value
Statement
A task source code and category code must form a valid combination defined in TASK_CATEGORY_CODE.
Trigger
BOF rule checking evaluates the task source/category pair.
Enforcement
clsTaskBusinessRules.ValidSourceCategory() executes SELECT Count(*) FROM TASK_CATEGORY_CODE WHERE TASK_SOURCE_CODE = :Source AND CODE = :Category and gives the concrete subclass a final override hook through clsTask.OverrideRules("TASK1", ...).
Outcome
Invalid combinations raise the library error message unless the concrete subclass suppresses the rule.
Confidence
Verified
Tables
TASK_CATEGORY_CODE
SQL
SQL-005
Source
Business\SAIF.Business.Tasks\clsTaskBusinessRules.vb
BR-002: Task date must be current or future
Field
Value
Statement
A task due date must be today or a future date.
Trigger
A dirty, non-deleted task changes TaskDate and BOF rules are enabled.
Enforcement
clsTaskBusinessRules.CheckDate() delegates to CommonBusinessRules.IsTodayOrFutureDate() unless batch rules are active, the task date was not modified, or the value is Date.MinValue.
Outcome
Past-dated tasks receive the task-date validation error unless the concrete subclass overrides the result.
Confidence
Verified
SQL
SQL-001 , SQL-013
Source
Business\SAIF.Business.Tasks\clsTaskBusinessRules.vb
BR-003: Due date adjusted to a workday warning
Field
Value
Statement
When the library adjusts a due date to the next or prior workday, it emits a warning instead of silently leaving the date unchanged.
Trigger
TaskDateModified becomes True after TaskDateModifier shifts a non-working day.
Enforcement
clsTaskBusinessRules.CheckDateModified() selects the next-workday or prior-workday warning message from the modifier state and passes the result through OverrideRules("TASK4", ...).
Outcome
Callers receive a warning that the due date was moved to a workday boundary.
Confidence
Verified
Source
Business\SAIF.Business.Tasks\clsTaskBusinessRules.vb
BR-004: Task category code is required
Field
Value
Statement
Every task must have a category code.
Trigger
The task is validated through AddBusinessRules().
Enforcement
clsTask.AddBusinessRules() registers CommonBusinessRules.TextRequired for CategoryCode.
Outcome
Validation fails with the category-code-required message when the property is blank.
Confidence
Verified
Source
Business\SAIF.Business.Tasks\clsTask.vb
BR-005: Source system code is required
Field
Value
Statement
Every task must have a source system code.
Trigger
The task is validated through AddBusinessRules().
Enforcement
clsTask.AddBusinessRules() registers CommonBusinessRules.TextRequired for SourceCode.
Outcome
Validation fails with the source-system-code-required message when the property is blank.
Confidence
Verified
Source
Business\SAIF.Business.Tasks\clsTask.vb
BR-006: Priority code is required
Field
Value
Statement
Every task must have a priority code.
Trigger
The task is validated through AddBusinessRules().
Enforcement
clsTask.AddBusinessRules() registers CommonBusinessRules.TextRequired for PriorityCode.
Outcome
Validation fails with the priority-code-required message when the property is blank.
Confidence
Verified
Source
Business\SAIF.Business.Tasks\clsTask.vb
BR-007: Mail ID is required
Field
Value
Statement
Every task must have a target mail ID.
Trigger
The task is validated through AddBusinessRules().
Enforcement
clsTask.AddBusinessRules() registers CommonBusinessRules.TextRequired for MailID.
Outcome
Validation fails with the mail-ID-required message when the property is blank.
Confidence
Verified
Source
Business\SAIF.Business.Tasks\clsTask.vb
BR-008: Task insert must affect one row
Field
Value
Statement
A task insert succeeds only when the Oracle function reports one affected row.
Trigger
AfterInsert evaluates the return value from pk82036_task.task_insert.
Enforcement
AfterInsert checks RowsAffected <> 1 and records Task Insert Failed when the expected row count is not returned.
Outcome
Insert failures surface immediately through BOF error messaging.
Confidence
Verified
Tables
TASK
SQL
SQL-001
Source
Business\SAIF.Business.Tasks\clsTask.vb
BR-009: Task update requires a current row version
Field
Value
Statement
A task update must present the current optimistic-concurrency token.
Trigger
AfterUpdate evaluates the row count returned from pk82036_task.task_update.
Enforcement
The Oracle function matches TASK_SEQ_NUM and UPDATE_SEQ_NUM; AfterUpdate treats any row count other than one as a database-contention error.
Outcome
Stale updates are rejected and do not advance the task row.
Confidence
Verified
Tables
TASK
SQL
SQL-013
Source
Business\SAIF.Business.Tasks\clsTask.vb
BR-010: Task delete requires a current row version
Field
Value
Statement
A soft delete must present the current optimistic-concurrency token.
Trigger
AfterDelete evaluates the row count returned from pk82036_task.task_delete.
Enforcement
The Oracle function matches TASK_SEQ_NUM and UPDATE_SEQ_NUM; AfterDelete records a BOF database-contention error when the function does not affect exactly one row.
Outcome
Stale delete attempts do not mark the row deleted.
Confidence
Verified
Tables
TASK
SQL
SQL-014
Source
Business\SAIF.Business.Tasks\clsTask.vb
BR-011: Category notepad requirement is surfaced to callers
Field
Value
Statement
A category row with NOTEPAD_REQUIRED_FLAG = 'Y' causes the category business object to expose a notepad-required result to consuming code.
Trigger
A category code row is loaded for task-category lookups.
Enforcement
clsTaskCategoryCode.IsNotePadRequired reflects the database flag and supports the RequiresNotePadEntry contract on concrete task types.
Outcome
Consuming applications can require notepad entry when the selected category is configured that way.
Confidence
Verified
Tables
TASK_CATEGORY_CODE
SQL
SQL-006 , SQL-007
Source
Business\SAIF.Business.Tasks\clsTaskCategoryCode.vb
BR-012: Single-task retrieval is keyed only by task sequence number
Field
Value
Statement
Single-task retrieval is keyed only by task sequence number.
Trigger
pk82036_task.task_select receives taskseqnum and opens the cursor.
Enforcement
The procedure filters TASK rows with WHERE task.task_seq_num = taskseqnum.
Outcome
The REF CURSOR returns at most the row for the requested TASK_SEQ_NUM.
Confidence
Verified
Source
Business\SAIF.Business.Tasks\clsTask.vb
Stored procedure
pk82036_task.task_select
BR-013: Insert normalizes zero claim IDs to null
Field
Value
Statement
Zero claim IDs are normalized to NULL during insert.
Trigger
pk82036_task.task_insert builds the INSERT INTO TASK values list.
Enforcement
The function inserts decode(claimid, 0, null,claimid) into CLAIM_ID.
Outcome
The TASK row does not persist 0 as a claim identifier.
Confidence
Verified
Tables
TASK
SQL
SQL-001
Source
Business\SAIF.Business.Tasks\clsTask.vb
Stored procedure
pk82036_task.task_insert
BR-014: Insert normalizes zero policy numbers to null
Field
Value
Statement
Zero policy numbers are normalized to NULL during insert.
Trigger
pk82036_task.task_insert builds the INSERT INTO TASK values list.
Enforcement
The function inserts decode(policynum, 0, null,policynum) into POLICY_NUM.
Outcome
The TASK row does not persist 0 as a policy number.
Confidence
Verified
Tables
TASK
SQL
SQL-001
Source
Business\SAIF.Business.Tasks\clsTask.vb
Stored procedure
pk82036_task.task_insert
BR-015: New tasks start active and versioned from zero
Field
Value
Statement
New tasks start active and versioned from zero.
Trigger
pk82036_task.task_insert writes the initial row.
Enforcement
The function sets DELETE_FLAG = 'N', UPDATE_SEQ_NUM = 0, CREATE_DATE = SYSDATE, UPDATE_DATE = SYSDATE, and TASK_SEQ_NUM = TASK_SEQ.NEXTVAL.
Outcome
New TASK rows start with an active delete state, seeded audit timestamps, and an initial concurrency token.
Confidence
Verified
Tables
TASK
SQL
SQL-001
Source
Business\SAIF.Business.Tasks\clsTask.vb
Stored procedure
pk82036_task.task_insert
BR-016: Task update requires a matching optimistic-concurrency token
Field
Value
Statement
Updates require a matching optimistic-concurrency token.
Trigger
pk82036_task.task_update executes the UPDATE TASK statement.
Enforcement
The function filters rows with WHERE task_seq_num = taskseqnum AND update_seq_num = updateseqnum.
Outcome
Stale updates leave SQL%ROWCOUNT = 0 and are rejected by the caller.
Confidence
Verified
Tables
TASK
SQL
SQL-013
Source
Business\SAIF.Business.Tasks\clsTask.vb
Stored procedure
pk82036_task.task_update
BR-017: Update normalizes zero claim and policy values to null
Field
Value
Statement
Zero claim and policy values are normalized to NULL during update.
Trigger
pk82036_task.task_update sets the mutable TASK columns.
Enforcement
The function updates CLAIM_ID with decode(claimid, 0, null,claimid) and POLICY_NUM with decode(policynum, 0, null,policynum).
Outcome
Optional claim and policy relationships remain null-valued instead of persisting 0.
Confidence
Verified
Tables
TASK
SQL
SQL-013
Source
Business\SAIF.Business.Tasks\clsTask.vb
Stored procedure
pk82036_task.task_update
BR-018: Successful updates always advance audit and version fields
Field
Value
Statement
Successful updates always advance audit and version fields.
Trigger
pk82036_task.task_update applies the row update.
Enforcement
The function sets UPDATE_DATE = SYSDATE, UPDATE_SEQ_NUM = updateseqnum + 1, and UPDATE_USER = updateuser.
Outcome
The row records the latest updater and increments the optimistic-concurrency token.
Confidence
Verified
Tables
TASK
SQL
SQL-013
Source
Business\SAIF.Business.Tasks\clsTask.vb
Stored procedure
pk82036_task.task_update
BR-019: Task delete is implemented as a soft delete
Field
Value
Statement
Delete is implemented as a soft delete.
Trigger
pk82036_task.task_delete processes a delete request.
Enforcement
The function sets DELETE_FLAG = 'Y' instead of issuing DELETE FROM TASK.
Outcome
The row remains in TASK while being marked as deleted.
Confidence
Verified
Tables
TASK
SQL
SQL-014
Source
Business\SAIF.Business.Tasks\clsTask.vb
Stored procedure
pk82036_task.task_delete
BR-020: Soft delete requires a matching optimistic-concurrency token
Field
Value
Statement
Soft delete requires a matching optimistic-concurrency token.
Trigger
pk82036_task.task_delete executes the delete-state update.
Enforcement
The function filters rows with WHERE task_seq_num = taskseqnum AND update_seq_num = updateseqnum.
Outcome
Stale delete attempts return SQL%ROWCOUNT = 0 and leave the row unchanged.
Confidence
Verified
Tables
TASK
SQL
SQL-014
Source
Business\SAIF.Business.Tasks\clsTask.vb
Stored procedure
pk82036_task.task_delete
BR-021: Task purge is limited to deleted rows in the requested source and category slice
Field
Value
Statement
Physical purge is limited to already deleted rows in the requested source/category slice.
Trigger
pk82036_task.task_purge executes the DELETE TASK statement.
Enforcement
The procedure requires matching TASK_SOURCE_CODE, TASK_CATEGORY_CODE, and DELETE_FLAG = 'Y' in the WHERE clause.
Outcome
Active rows and rows outside the requested source/category slice are not purged.
Confidence
Verified
Tables
TASK
SQL
SQL-015
Source
Business\SAIF.Business.Tasks\clsTaskCollection.vb
Stored procedure
pk82036_task.task_purge
BR-022: Task purge retention is enforced by whole-day age
Field
Value
Statement
Purge retention is enforced by whole-day age.
Trigger
pk82036_task.task_purge evaluates the retention predicate.
Enforcement
The procedure deletes only rows where TRUNC(update_date) < TRUNC(SYSDATE - TO_NUMBER(inkeepdays)).
Outcome
Rows newer than the keep-days threshold remain available even if they are already soft-deleted.
Confidence
Verified
Tables
TASK
SQL
SQL-015
Source
Business\SAIF.Business.Tasks\clsTaskCollection.vb
Stored procedure
pk82036_task.task_purge
BR-023: Task collection retrieval excludes soft-deleted tasks by default
Field
Value
Statement
A task search excludes soft-deleted rows unless the caller explicitly asks to include them.
Trigger
clsTaskCollection.Criteria.FormatRequest (and the underlying FormatOtherParameters) assembles the search WHERE clause.
Enforcement
The criteria appends AND DELETE_FLAG = 'N' to the query unless ShowCompleted is set to True, in which case no delete-flag predicate is added and both active and soft-deleted rows are returned.
Outcome
Callers see only active tasks by default; ShowCompleted is required to surface completed/soft-deleted tasks in a search result.
Confidence
Verified
Tables
TASK
SQL
SQL-008
Source
Business\SAIF.Business.Tasks\clsTaskCollection.vb
BR-024: Priority-level filter cascades to include higher-priority codes
Field
Value
Statement
Filtering a task search by a minimum TaskPriority level includes that level and every higher priority level, not just an exact match.
Trigger
clsTaskCollection.Criteria.FormatPriorityParameter builds the priority predicate when no explicit TaskPriorityCode is set and PriorityLevel is not Informational.
Enforcement
The predicate expands to an inline IN (...) list of literal priority codes: Low includes Low/Medium/High/Urgent, Medium includes Medium/High/Urgent, High includes High/Urgent, and Urgent matches only Urgent.
Outcome
A caller requesting "Medium priority or above" also receives High and Urgent tasks in the same search rather than only exact-Medium matches.
Confidence
Verified
Tables
TASK
SQL
SQL-008
Source
Business\SAIF.Business.Tasks\clsTaskCollection.vb
Notes
TASK3 was not identified in the supplied findings.
Concrete subclasses can still suppress shared rule results through OverrideRules(...) when domain-specific behavior requires it.
BR-012 through BR-022 are derived from the Oracle package documented on the procedures page.
Sources
Business\SAIF.Business.Tasks\clsTask.vb
Business\SAIF.Business.Tasks\clsTaskCollection.vb
Business\SAIF.Business.Tasks\clsTaskBusinessRules.vb
Business\SAIF.Business.Tasks\clsTaskCategoryCode.vb