STD: Inhibition - Quantification Rule (PICQUANT)
Version: v1.0.0
Status: Draft
SRS Source: docusaurus/docs/srs/rules/rule-inhibition-quantification.md
Rule Name: PICQUANT
Domain: RULES-INHQUANT
Overview
This document specifies tests for the PICQUANT rule using decision tables and test vectors. The rule evaluates Internal Control (IC) inhibition for quantification samples and assigns appropriate well errors based on IC CT threshold, quantification level relative to LoD and 10,000 copies/mL, and whether the sample has been tested before.
Rule Characteristics:
- Pure business logic (no UI)
- Threshold-based IC CT evaluation (>35 indicates inhibition)
- Two-tier quantification evaluation (above LoD, above 10,000)
- Sample history integration (first run vs. retest)
- Multiple output states (pass, three error codes)
Test Method: TM-API (per Test Plan §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-INHQUANT-001 | IC Inhibition Quantification Validation | 14 | 18 | 100% | None |
Totals: 1 REQ, 14 Conditions, 18 Test Vectors, 100% Coverage
REQ-RULES-INHQUANT-001: IC Inhibition Quantification Validation
| Variable | Type | Valid Values | Description |
|---|
ic_ct | float | 0-50+ | IC observation CT value |
has_ic_obs | bool | true, false | Whether IC observation exists in well |
quant_values | array | [] or [float, ...] | Non-IC observation quantification values |
lod_threshold | float | numeric | Limit of Detection per mix/target |
high_quant_threshold | float | 10000 | High quantification compensation threshold |
ic_ct_threshold | float | 35 | IC CT inhibition threshold |
is_first_run | bool | true, false | Whether sample/mix has been tested before |
history_available | bool | true, false | Whether sample history service is available |
Output Variables
| Variable | Type | Description |
|---|
well_error | string? | Error code (null if pass) |
rule_skipped | bool | Whether rule execution was skipped |
output_code | enum | ICQUANT_INHN, ICQUANT_INHP, ICQUANT_FIRST_RUN, or PASS |
Derived Conditions
| Condition | Definition |
|---|
ic_inhibited | ic_ct > 35 |
any_quant_above_lod | Any non-IC observation has quant > LoD |
any_quant_above_10k | Any non-IC observation has quant > 10,000 |
Decision Table: Core PICQUANT Logic
This table covers the main decision paths of the PICQUANT rule.
| TV | ic_ct | any_quant_above_lod | any_quant_above_10k | is_first_run | expected_output | Covers |
|---|
| TV-001-001 | 30 | - | - | - | PASS | AC: IC CT <= 35 passes |
| TV-001-002 | 35 | - | - | - | PASS | AC: IC CT = 35 boundary passes |
| TV-001-003 | 38 | true | true | - | PASS | AC: High quant compensates inhibition |
| TV-001-004 | 36 | true | false | true | ICQUANT_FIRST_RUN | AC: Low positive quant, first run |
| TV-001-005 | 36 | true | false | false | ICQUANT_INHP | AC: Low positive quant, retest |
| TV-001-006 | 39 | false | false | true | ICQUANT_FIRST_RUN | AC: Negative quant, first run |
| TV-001-007 | 40 | false | false | false | ICQUANT_INHN | AC: Negative quant, retest |
Decision Table: CT Threshold Boundary Testing
| TV | ic_ct | other_conditions | expected_output | Covers |
|---|
| TV-001-008 | 34.9 | any_quant_above_lod=false | PASS | AC: Below threshold passes |
| TV-001-009 | 35.0 | any_quant_above_lod=false | PASS | AC: At threshold passes |
| TV-001-010 | 35.1 | any_quant_above_lod=false, first_run=true | ICQUANT_FIRST_RUN | AC: Above threshold triggers rule |
Decision Table: Quantification Threshold Boundary Testing
| TV | ic_ct | max_quant | is_first_run | expected_output | Covers |
|---|
| TV-001-011 | 37 | 9999 | true | ICQUANT_FIRST_RUN | AC: Below 10k, first run |
| TV-001-012 | 37 | 10000 | - | PASS | AC: At 10k boundary passes |
| TV-001-013 | 37 | 10001 | - | PASS | AC: Above 10k passes |
Decision Table: LoD Boundary Testing
| TV | ic_ct | quant_value | lod_threshold | is_first_run | expected_output | Covers |
|---|
| TV-001-014 | 38 | 99 | 100 | true | ICQUANT_FIRST_RUN | AC: Below LoD = negative |
| TV-001-015 | 38 | 100 | 100 | true | ICQUANT_FIRST_RUN | AC: At LoD = positive low (below 10k) |
| TV-001-016 | 38 | 101 | 100 | false | ICQUANT_INHP | AC: Above LoD, below 10k, retest |
Decision Table: Error Handling (Skip Conditions)
| TV | has_ic_obs | ic_ct_valid | has_nonIC_obs | history_available | expected_behavior | Covers |
|---|
| TV-001-017 | false | - | - | - | SKIP | AC: No IC observation |
| TV-001-018 | true | false | - | - | SKIP | AC: Invalid IC CT |
| TV-001-019 | true | true | false | - | SKIP | AC: No non-IC observations |
| TV-001-020 | true | true | true | false | treat as first_run=true | AC: History unavailable fallback |
Acceptance Criteria Coverage Matrix
| AC | Description | Test Vectors |
|---|
| AC-PASS-1 | IC CT <= 35 passes | TV-001-001, TV-001-002, TV-001-008, TV-001-009 |
| AC-PASS-2 | High quant (>10k) compensates inhibition | TV-001-003, TV-001-012, TV-001-013 |
| AC-NEG-1 | Negative quant + retest = ICQUANT_INHN | TV-001-007 |
| AC-NEG-2 | Negative quant + first run = ICQUANT_FIRST_RUN | TV-001-006, TV-001-014 |
| AC-POS-1 | Positive low quant + retest = ICQUANT_INHP | TV-001-005, TV-001-016 |
| AC-POS-2 | Positive low quant + first run = ICQUANT_FIRST_RUN | TV-001-004, TV-001-010, TV-001-011, TV-001-015 |
| AC-THRESH-1 | IC CT threshold = 35 | TV-001-008, TV-001-009, TV-001-010 |
| AC-THRESH-2 | High quant threshold = 10,000 | TV-001-011, TV-001-012, TV-001-013 |
| AC-THRESH-3 | LoD from configured mix/target | TV-001-014, TV-001-015, TV-001-016 |
| AC-ERR-1 | Skip if no IC observation | TV-001-017 |
| AC-ERR-2 | Skip if IC CT invalid | TV-001-018 |
| AC-ERR-3 | Skip if no non-IC observations | TV-001-019 |
| AC-ERR-4 | History unavailable = treat as first run | TV-001-020 |
Test Execution Summary
| Test Vector | Priority | Automation Status |
|---|
| TV-001-001 to TV-001-007 | High | Automated |
| TV-001-008 to TV-001-010 | High | Automated |
| TV-001-011 to TV-001-013 | High | Automated |
| TV-001-014 to TV-001-016 | Medium | Automated |
| TV-001-017 to TV-001-020 | Medium | Automated |
Traceability to SRS Tests
| SRS Test ID | Description | Test Vectors |
|---|
| PICQUANT-001 | Pass When IC CT Normal | TV-001-001, TV-001-002 |
| PICQUANT-002 | Pass When High Quantification Compensates | TV-001-003 |
| PICQUANT-003 | ICQUANT_FIRST_RUN on First Test with Low Positive Quant | TV-001-004 |
| PICQUANT-004 | ICQUANT_INHP on Retest with Positive Low Quant | TV-001-005 |
| PICQUANT-005 | ICQUANT_INHN on Retest with Negative Quant | TV-001-007 |
| PICQUANT-006 | ICQUANT_FIRST_RUN on First Test with Negative Quant | TV-001-006 |
Gap Analysis
Identified Gaps
| Gap | Requirement | Description | Priority | Owner |
|---|
| None | - | Full coverage achieved | - | - |
Coverage Assessment
All acceptance criteria from REQ-RULES-INHQUANT-001 are covered by test vectors:
- Pass Conditions: 4 vectors (TV-001-001, TV-001-002, TV-001-003, TV-001-012/013)
- Negative Quantification Path: 3 vectors (TV-001-006, TV-001-007, TV-001-014)
- Positive Low Quantification Path: 4 vectors (TV-001-004, TV-001-005, TV-001-015, TV-001-016)
- Threshold Configuration: 8 vectors covering all boundaries
- Error Handling: 4 vectors (TV-001-017 through TV-001-020)