STD: Positive Sigmoid Control Rule (POSSIGMOIDCTRL)
Version: v1.0.0
Status: Draft
SRS Source: docusaurus/docs/srs/rules/rule-positive-sigmoid-control.md
Rule Name: POSITIVE_SIGMOID_CONTROL
Domain: RULES-POSSIGMOIDCTRL
Overview
This document specifies tests for the Positive Sigmoid Control rule using decision tables and test vectors. The rule validates that control wells classified as positive exhibit the expected upward sigmoid amplification curve pattern, flagging inconsistencies when a positive-classified control well displays a downward sigmoid curve.
Rule Characteristics:
- Pure business logic (validation rule)
- Control well scope restriction (patient wells excluded)
- Dual error code assignment (well + target)
- Skip conditions via resolution code or manual classification
Test Method: TM-API (per Test Plan - 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-POSSIGMOIDCTRL-001 | Detect Incorrect Sigmoid Curve Direction | 7 | 16 | 100% | None |
| REQ-RULES-POSSIGMOIDCTRL-002 | Display Errors in Assay Summary | 3 | 3 | 100% | None |
Totals: 2 REQs, 10 Conditions, 19 Test Vectors, 100% Coverage
REQ-RULES-POSSIGMOIDCTRL-001: Detect Incorrect Sigmoid Curve Direction
| Variable | Type | Valid Values | Description |
|---|
well.type | string | Control, Patient | Well type classification |
sigmoid.direction | string | Upward, Downward | Sigmoid curve direction from analytics |
well.final_cls | string | Positive, Negative | Final classification result |
well.resolution_code | string? | null, POSITIVE_SIGMOID_CONTROL | Applied resolution code |
well.manual_cls | bool | true, false | Whether manual classification is assigned |
Output Variables
| Variable | Type | Description |
|---|
well.error_code | string? | INCORRECT_POSITIVE_SIGMOID or null |
target.error_code | string? | INCORRECT_POSITIVE_SIGMOID_TARGET or null |
rule_executed | bool | Whether the rule executed (not skipped) |
Decision Table: Scope Restriction (Well Type)
| TV | well.type | rule_executed | well.error_code | target.error_code | Covers |
|---|
| TV-001-001 | Control | true | (depends on other conditions) | (depends on other conditions) | AC: Rule executes for control wells |
| TV-001-002 | Patient | false | null | null | AC: Rule does NOT execute for patient wells |
Decision Table: Skip Conditions
| TV | well.type | resolution_code | manual_cls | rule_executed | Covers |
|---|
| TV-001-003 | Control | POSITIVE_SIGMOID_CONTROL | false | false | AC: Skip when resolution code applied |
| TV-001-004 | Control | null | true | false | AC: Skip when manual classification assigned |
| TV-001-005 | Control | null | false | true | AC: Execute when no skip conditions |
Decision Table: Error Assignment Logic
| TV | well.type | sigmoid.direction | final_cls | resolution_code | manual_cls | well.error_code | target.error_code | Covers |
|---|
| TV-001-006 | Control | Downward | Positive | null | false | INCORRECT_POSITIVE_SIGMOID | INCORRECT_POSITIVE_SIGMOID_TARGET | AC: Error condition - downward sigmoid with positive classification |
| TV-001-007 | Control | Downward | Negative | null | false | null | null | AC: No error - downward sigmoid with negative classification |
| TV-001-008 | Control | Upward | Negative | null | false | null | null | AC: No error - upward sigmoid with negative classification |
| TV-001-009 | Control | Upward | Positive | null | false | null | null | AC: No error - upward sigmoid with positive classification (valid) |
Decision Table: Combined Skip + Error Scenarios
| TV | well.type | sigmoid.direction | final_cls | resolution_code | manual_cls | rule_executed | error_assigned | Covers |
|---|
| TV-001-010 | Patient | Downward | Positive | null | false | false | false | AC: Patient well exclusion (error condition inputs ignored) |
| TV-001-011 | Control | Downward | Positive | POSITIVE_SIGMOID_CONTROL | false | false | false | AC: Resolution code skip (error condition inputs) |
| TV-001-012 | Control | Downward | Positive | null | true | false | false | AC: Manual classification skip (error condition inputs) |
Decision Table: Gap Coverage — Skip Conditions and Patient Exclusion
| TV | well.type | sigmoid.direction | resolution_code | manual_cls | rule_executed | error_assigned | Covers |
|---|
| TV-POSSIGMOIDCTRL-GAP-001 | Control | Downward (Pos cls) | Applied via resolution | false | false (resolved) | false | AC: Resolution code bypass clears error |
| TV-POSSIGMOIDCTRL-GAP-002 | Control | Downward (Pos cls) | Applied via manual cls | true | false (resolved) | false | AC: Manual classification bypass clears error |
| TV-POSSIGMOIDCTRL-GAP-003 | Control | Downward (Pos cls) | Applied (Neg cls) | false | false (resolved) | false | AC: Combined resolution + re-analysis clears error |
| TV-POSSIGMOIDCTRL-GAP-004 | Patient | Downward (Pos cls) | null | false | false | false | AC: Patient well exclusion — POSSIGMOIDCTRL does not fire on patients |
Automation Status
| Test Vector Range | Method | Status |
|---|
| TV-001-001 to TV-001-012 | TM-API | Automated |
REQ-RULES-POSSIGMOIDCTRL-002: Display Errors in Assay Summary
| Variable | Type | Description |
|---|
well.error_code | string | INCORRECT_POSITIVE_SIGMOID (from REQ-001) |
well.mix | string | Mix identifier (e.g., Mix A, Mix B) |
observation.target | string | Target identifier |
Output Variables
| Variable | Type | Description |
|---|
assay_summary.display | bool | Whether error is displayed |
assay_summary.error_text | string | INCORRECT_POSITIVE_SIGMOID_TARGET |
assay_summary.mix_context | string | Mix identifier in display |
assay_summary.target_context | string | Target identifier in display |
Decision Table: Assay Summary Display
| TV | well.error_code | well.mix | observation.target | display | error_text | mix_shown | target_shown | Covers |
|---|
| TV-002-001 | INCORRECT_POSITIVE_SIGMOID | Mix A | Target A | true | INCORRECT_POSITIVE_SIGMOID_TARGET | Mix A | Target A | AC: Error displayed with mix and target identifiers |
| TV-002-002 | INCORRECT_POSITIVE_SIGMOID | Mix B | Target B | true | INCORRECT_POSITIVE_SIGMOID_TARGET | Mix B | Target B | AC: Display for different mix/target combination |
| TV-002-003 | null | Mix A | Target A | false | null | N/A | N/A | AC: No display when no error assigned |
Automation Status
| Test Vector Range | Method | Status |
|---|
| TV-002-001 to TV-002-003 | TM-API | Automated |
Traceability to Existing Tests
| Requirement | Jira Tests | Test Cases | Status |
|---|
| REQ-RULES-POSSIGMOIDCTRL-001 | BT-5044 | TC-001 through TC-007 | Existing |
| REQ-RULES-POSSIGMOIDCTRL-002 | BT-5044 | TC-008 | Existing |
Gap Analysis
Identified Gaps
| Gap | Requirement | Description | Priority | Owner |
|---|
| None | - | All conditions covered by test vectors | - | - |
Coverage Verification
All acceptance criteria from REQ-RULES-POSSIGMOIDCTRL-001 are mapped:
- Error Assignment (downward + positive + control): TV-001-006
- Valid Conditions (no error): TV-001-007, TV-001-008, TV-001-009
- Scope Restrictions (control only): TV-001-001, TV-001-002, TV-001-010
- Skip Conditions: TV-001-003, TV-001-004, TV-001-011, TV-001-012
All acceptance criteria from REQ-RULES-POSSIGMOIDCTRL-002 are mapped:
- Display with mix identifier: TV-002-001, TV-002-002
- Display with target identifier: TV-002-001, TV-002-002
- Error code shown: TV-002-001, TV-002-002