STD: Indeterminate CTS Rule (INDETCTS)
Version: v1.0.0 Status: Draft SRS Source:
docusaurus/docs/srs/rules/rule-indeterminate-cts.mdRule Name: INDETERMINATE_CTS Domain: RULES-INDETCTS
Overview
This document specifies tests for the INDETERMINATE_CTS rule using decision tables and test vectors. The rule detects samples where all non-IC targets have positive classifications with high CT values (CT > 35), indicating potentially indeterminate results requiring manual review.
Rule Characteristics:
- Pure business logic (no UI)
- Collective evaluation of all non-IC targets
- Dual-condition check (classification AND CT threshold)
- Quality control mechanism for late amplification detection
Test Method: TM-API (per Test Plan Section 3.3 - Rules use automated API tests)
Automation Status: Automated
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-INDETCTS-001 | Detect Indeterminate Positive Results with High CT Values | 8 | 12 | 100% | None |
Totals: 1 REQ, 8 Conditions, 12 Test Vectors, 100% Coverage
REQ-RULES-INDETCTS-001: Detect Indeterminate Positive Results with High CT Values
Input Variables
| Variable | Type | Valid Values | Description |
|---|---|---|---|
target.is_ic | bool | true, false | Whether target is Internal Control |
target.classification | string | Positive, Negative, Indeterminate, ... | Target classification result |
target.ct | float | numeric (0-50 typical) | Cycle threshold value |
sample.non_ic_targets | array | 0..n targets | List of non-IC targets in sample |
config.ct_threshold | float | 35 (default) | CT threshold for indeterminate detection |
Output Variables
| Variable | Type | Description |
|---|---|---|
rule.result | string | Pass (success) or Fail |
rule.error | string? | INDETERMINATE_CTS if failed, null otherwise |
Decision Table: IC Target Exclusion
Verifies that Internal Control targets are excluded from rule evaluation.
| TV | target.is_ic | included_in_evaluation | Covers |
|---|---|---|---|
| TV-001-001 | true | false | AC: IC targets excluded |
| TV-001-002 | false | true | AC: Non-IC targets evaluated |
Decision Table: No Non-IC Targets
Verifies rule behavior when sample has no non-IC targets to evaluate.
| TV | non_ic_count | rule.result | rule.error | Covers |
|---|---|---|---|---|
| TV-001-003 | 0 | Pass | null | AC: No targets to evaluate |
Decision Table: Single Non-IC Target Scenarios
Verifies rule behavior with a single non-IC target (boundary case).
| TV | classification | ct | rule.result | rule.error | Covers |
|---|---|---|---|---|---|
| TV-001-004 | Positive | 36 | Fail | INDETERMINATE_CTS | AC: Positive + CT > 35 |
| TV-001-005 | Positive | 35 | Pass | null | AC: Positive + CT = 35 (boundary) |
| TV-001-006 | Positive | 34 | Pass | null | AC: Positive + CT < 35 |
| TV-001-007 | Negative | 36 | Pass | null | AC: Non-Positive classification |
| TV-001-008 | Indeterminate | 40 | Pass | null | AC: Non-Positive classification |
Decision Table: Multiple Non-IC Targets - All Positive
Verifies collective evaluation when all non-IC targets are Positive.
| TV | Target 1 (cls, ct) | Target 2 (cls, ct) | rule.result | rule.error | Covers |
|---|---|---|---|---|---|
| TV-001-009 | (Positive, 36) | (Positive, 40) | Fail | INDETERMINATE_CTS | AC: All Positive + All CT > 35 |
| TV-001-010 | (Positive, 36) | (Positive, 35) | Pass | null | AC: All Positive + One CT <= 35 |
| TV-001-011 | (Positive, 36) | (Positive, 30) | Pass | null | AC: All Positive + One CT <= 35 |
Decision Table: Multiple Non-IC Targets - Mixed Classifications
Verifies rule passes when at least one non-IC target is not Positive.
| TV | Target 1 (cls, ct) | Target 2 (cls, ct) | rule.result | rule.error | Covers |
|---|---|---|---|---|---|
| TV-001-012 | (Positive, 40) | (Negative, 38) | Pass | null | AC: Mixed classification |
Decision Table: CT Threshold Boundary
Verifies exact boundary behavior at CT = 35.
| TV | ct_value | condition_met | Covers |
|---|---|---|---|
| TV-001-013 | 35.0 | false (CT not > 35) | AC: Threshold boundary (inclusive) |
| TV-001-014 | 35.01 | true (CT > 35) | AC: Just above threshold |
| TV-001-015 | 34.99 | false (CT not > 35) | AC: Just below threshold |
Decision Table: Complete Truth Table
Summary of all input combinations and expected outcomes.
| TV | Has Non-IC | All Positive | All CT > 35 | rule.result | rule.error | Covers |
|---|---|---|---|---|---|---|
| - | No | - | - | Pass | null | AC: No targets |
| - | Yes | No | - | Pass | null | AC: Mixed classification |
| - | Yes | Yes | No | Pass | null | AC: Low CT present |
| - | Yes | Yes | Yes | Fail | INDETERMINATE_CTS | AC: Failure condition |
Traceability to Acceptance Criteria
| AC Description | Test Vectors |
|---|---|
| All non-IC targets Positive AND CT > 35 triggers failure | TV-001-004, TV-001-009 |
| Both conditions must be true simultaneously | TV-001-009, TV-001-010 |
| Collective evaluation (all non-IC targets) | TV-001-009, TV-001-010, TV-001-011, TV-001-012 |
| At least one non-Positive classification passes | TV-001-007, TV-001-008, TV-001-012 |
| At least one CT <= 35 passes | TV-001-005, TV-001-006, TV-001-010, TV-001-011 |
| IC targets excluded from evaluation | TV-001-001 |
| CT threshold = 35 (configurable) | TV-001-013, TV-001-014, TV-001-015 |
Traceability to Existing Tests
| Requirement | Jira Tests | Status |
|---|---|---|
| REQ-RULES-INDETCTS-001 | BT-2450 | Existing |
Gap Analysis
Identified Gaps
| Gap | Requirement | Description | Priority | Owner |
|---|---|---|---|---|
| - | - | No gaps identified | - | - |
All acceptance criteria are covered by test vectors. Existing Jira test ticket BT-2450 provides traceability.