STD: Negative Sigmoid Control Rule (NEGSIGMOIDCTRL)
Version: v1.0.0 Status: Draft SRS Source:
docusaurus/docs/srs/rules/rule-negative-sigmoid-control.mdRule Name: NEGATIVE_SIGMOID_CONTROL Domain: RULES-NEGSIGMOIDCTRL
Overview
This document specifies tests for the Negative Sigmoid Control rule using decision tables and test vectors. The rule detects and flags control wells that exhibit an upward sigmoid amplification pattern but have a negative final classification, indicating a potential quality issue.
Rule Characteristics:
- Pure business logic (no UI except reporting)
- Sequential condition evaluation (well type, manual classification, resolution code, classification, sigmoid pattern)
- Binary error assignment (both well and target errors assigned together)
- Dual-level error codes (well-level and target-level)
Test Method: TM-API (per Test Plan Section 3.3 - Rules use automated API tests)
Verification Approach: Rule verification is performed using data-driven test vectors. Each row in a decision table represents a complete verification scenario with defined inputs and expected outputs. This format enables exhaustive condition coverage while remaining concise and auditable.
Coverage Summary
| REQ ID | Title | Conditions | Test Vectors | Coverage | Gaps |
|---|---|---|---|---|---|
| REQ-RULES-NEGSIGMOIDCTRL-001 | Core Detection Logic | 8 | 8 | 100% | None |
| REQ-RULES-NEGSIGMOIDCTRL-002 | Patient Well Exclusion | 2 | 2 | 100% | None |
| REQ-RULES-NEGSIGMOIDCTRL-003 | Resolution Code Bypass | 2 | 2 | 100% | None |
| REQ-RULES-NEGSIGMOIDCTRL-004 | Manual Classification Bypass | 3 | 3 | 100% | None |
| REQ-RULES-NEGSIGMOIDCTRL-005 | Assay Summary Display | 2 | 2 | 100% | None |
Totals: 5 REQs, 17 Conditions, 17 Test Vectors, 100% Coverage
Input Variables
| Variable | Type | Valid Values | Description |
|---|---|---|---|
well.type | enum | Control, Patient | Well type classification |
well.sigmoid_pattern | enum | Upward, Downward, null | Amplification curve shape |
well.final_classification | enum | Positive, Negative, null | System-determined classification |
well.manual_classification | enum/null | Positive, Negative, null | User-assigned classification override |
well.resolution_codes | array | [], [NEGATIVE_SIGMOID_CONTROL], ... | Applied resolution codes |
well.mix | string | Mix A, Mix B, ... | Mix identifier |
observation.target | string | Target A, Target B, ... | Target identifier |
Output Variables
| Variable | Type | Description |
|---|---|---|
well.error_code | string/null | Well-level error (INCORRECT_NEGATIVE_SIGMOID or null) |
target.error_code | string/null | Target-level error (INCORRECT_NEGATIVE_SIGMOID_TARGET or null) |
rule_triggered | bool | Whether the rule assigned error codes |
REQ-RULES-NEGSIGMOIDCTRL-001: Core Detection Logic
Decision Table: Sigmoid Pattern and Classification Combinations
This table covers all combinations of sigmoid pattern (Upward/Downward) and classification (Positive/Negative) for control wells with no bypass conditions active.
Preconditions: well.type = Control, manual_classification = null, resolution_codes = []
| TV | sigmoid_pattern | final_classification | well_error | target_error | Covers |
|---|---|---|---|---|---|
| TV-001-001 | Upward | Negative | INCORRECT_NEGATIVE_SIGMOID | INCORRECT_NEGATIVE_SIGMOID_TARGET | AC: Upward + Negative triggers both errors |
| TV-001-002 | Upward | Positive | null | null | AC: Upward + Positive = no error |
| TV-001-003 | Downward | Negative | null | null | AC: Downward + Negative = no error |
| TV-001-004 | Downward | Positive | null | null | AC: Downward + Positive = no error |
Decision Table: Error Code Assignment Verification
Verifies that both error codes are assigned simultaneously when rule triggers.
Preconditions: well.type = Control, manual_classification = null, resolution_codes = [], sigmoid_pattern = Upward, final_classification = Negative
| TV | Description | well_error_assigned | target_error_assigned | Covers |
|---|---|---|---|---|
| TV-001-005 | Both errors assigned together | true | true | AC: Simultaneous assignment |
| TV-001-006 | Well error present implies target error | true | true | AC: Dual-level errors |
Decision Table: Precondition Handling
Verifies rule behavior when preconditions are not met.
| TV | sigmoid_pattern | final_classification | rule_executed | Covers |
|---|---|---|---|---|
| TV-001-007 | null | Negative | false | AC: No sigmoid = skip rule |
| TV-001-008 | Upward | null | false | AC: No classification = skip rule |
REQ-RULES-NEGSIGMOIDCTRL-002: Patient Well Exclusion
Decision Table: Well Type Filter
Verifies that patient wells are excluded from rule execution regardless of other conditions.
Preconditions: sigmoid_pattern = Upward, final_classification = Negative, manual_classification = null, resolution_codes = []
| TV | well.type | rule_triggered | well_error | target_error | Covers |
|---|---|---|---|---|---|
| TV-002-001 | Control | true | INCORRECT_NEGATIVE_SIGMOID | INCORRECT_NEGATIVE_SIGMOID_TARGET | AC: Control wells evaluated |
| TV-002-002 | Patient | false | null | null | AC: Patient wells excluded |
REQ-RULES-NEGSIGMOIDCTRL-003: Resolution Code Bypass
Decision Table: Resolution Code Handling
Verifies that the NEGATIVE_SIGMOID_CONTROL resolution code bypasses rule execution.
Preconditions: well.type = Control, sigmoid_pattern = Upward, final_classification = Negative, manual_classification = null
| TV | resolution_codes | rule_triggered | well_error | target_error | Covers |
|---|---|---|---|---|---|
| TV-003-001 | [] | true | INCORRECT_NEGATIVE_SIGMOID | INCORRECT_NEGATIVE_SIGMOID_TARGET | AC: No resolution code = rule executes |
| TV-003-002 | [NEGATIVE_SIGMOID_CONTROL] | false | null | null | AC: Resolution code bypasses rule |
REQ-RULES-NEGSIGMOIDCTRL-004: Manual Classification Bypass
Decision Table: Manual Classification Handling
Verifies that any manual classification bypasses rule execution.
Preconditions: well.type = Control, sigmoid_pattern = Upward, final_classification = Negative, resolution_codes = []
| TV | manual_classification | rule_triggered | well_error | target_error | Covers |
|---|---|---|---|---|---|
| TV-004-001 | null | true | INCORRECT_NEGATIVE_SIGMOID | INCORRECT_NEGATIVE_SIGMOID_TARGET | AC: No manual cls = rule executes |
| TV-004-002 | Positive | false | null | null | AC: Manual positive bypasses |
| TV-004-003 | Negative | false | null | null | AC: Manual negative bypasses |
REQ-RULES-NEGSIGMOIDCTRL-005: Assay Summary Display
Decision Table: Error Display in Assay Summary
Verifies that errors are displayed in the Assay Summary grouped by mix and target.
Preconditions: Rule has triggered and assigned errors
| TV | well.mix | observation.target | expected_display_location | error_shown | Covers |
|---|---|---|---|---|---|
| TV-005-001 | Mix A | Target A | Mix A / Target A | INCORRECT_NEGATIVE_SIGMOID_TARGET | AC: Display by mix/target |
| TV-005-002 | Mix B | Target C | Mix B / Target C | INCORRECT_NEGATIVE_SIGMOID_TARGET | AC: Display by mix/target |
Combined Decision Table: Full Rule Evaluation
This table shows the complete rule evaluation flow with all bypass conditions.
| TV | well.type | manual_cls | resolution_code | sigmoid | classification | triggered | Covers |
|---|---|---|---|---|---|---|---|
| TV-FULL-001 | Patient | - | - | Upward | Negative | false | REQ-002: Patient excluded |
| TV-FULL-002 | Control | Positive | - | Upward | Negative | false | REQ-004: Manual cls bypass |
| TV-FULL-003 | Control | null | NEGATIVE_SIGMOID_CONTROL | Upward | Negative | false | REQ-003: Resolution bypass |
| TV-FULL-004 | Control | null | [] | Upward | Positive | false | REQ-001: No error (positive) |
| TV-FULL-005 | Control | null | [] | Downward | Negative | false | REQ-001: No error (downward) |
| TV-FULL-006 | Control | null | [] | Upward | Negative | true | REQ-001: Error triggered |
Note: "-" indicates value is irrelevant due to earlier bypass condition.
Automation Status
| Requirement | Test Method | Automation Status | Notes |
|---|---|---|---|
| REQ-RULES-NEGSIGMOIDCTRL-001 | TM-API | Automated | Core rule logic |
| REQ-RULES-NEGSIGMOIDCTRL-002 | TM-API | Automated | Well type filter |
| REQ-RULES-NEGSIGMOIDCTRL-003 | TM-API | Automated | Resolution code handling |
| REQ-RULES-NEGSIGMOIDCTRL-004 | TM-API | Automated | Manual classification handling |
| REQ-RULES-NEGSIGMOIDCTRL-005 | TM-API | Automated | Report verification |
Traceability to Existing Tests
| Requirement | Jira Tests | Status |
|---|---|---|
| REQ-RULES-NEGSIGMOIDCTRL-001 | BT-5045 | Existing |
| REQ-RULES-NEGSIGMOIDCTRL-002 | Pending | Gap |
| REQ-RULES-NEGSIGMOIDCTRL-003 | Pending | Gap |
| REQ-RULES-NEGSIGMOIDCTRL-004 | Pending | Gap |
| REQ-RULES-NEGSIGMOIDCTRL-005 | Pending | Gap |
Supplementary Gap-Fill Tests
| TC | Description | Covers |
|---|---|---|
| TC-NEGSIGMOIDCTRL-COMP-005 | Combined: resolution + re-analysis clears error on control (duplicate coverage) | Combined resolution code + manual cls bypass |
Gap Analysis
Identified Gaps
| Gap | Requirement | Description | Priority | Owner |
|---|---|---|---|---|
| GAP-001 | REQ-RULES-NEGSIGMOIDCTRL-002 | No Jira test ticket for patient well exclusion | High | TBD |
| GAP-002 | REQ-RULES-NEGSIGMOIDCTRL-003 | No Jira test ticket for resolution code bypass | High | TBD |
| GAP-003 | REQ-RULES-NEGSIGMOIDCTRL-004 | No Jira test ticket for manual classification bypass | High | TBD |
| GAP-004 | REQ-RULES-NEGSIGMOIDCTRL-005 | No Jira test ticket for Assay Summary display | Medium | TBD |
Remediation Plan
- GAP-001: Create test ticket covering TV-002-001 through TV-002-002 (patient well exclusion scenarios)
- GAP-002: Create test ticket covering TV-003-001 through TV-003-002 (resolution code bypass scenarios)
- GAP-003: Create test ticket covering TV-004-001 through TV-004-003 (manual classification bypass scenarios)
- GAP-004: Create test ticket covering TV-005-001 through TV-005-002 (Assay Summary display scenarios)
Known Issues
| Issue | Description | Impact | Status |
|---|---|---|---|
| OQ-001 | Source documentation Row 2 Case 2 contradiction regarding patient wells | Test design follows requirement statement (patient wells excluded) | Flagged for validation |