Skip to main content
Version: Next

STD: Systemic Inhibition Rule (SYSINH)

Version: v1.0.0 Status: Draft SRS Source: docusaurus/docs/srs/rules/rule-systemic-inhibition.md Rule Name: SYSTEMIC_INHIBITION Domain: RULES-SYSINH


Overview

This document specifies tests for the Systemic Inhibition rule using decision tables and test vectors. The rule detects systemic inhibition patterns when multiple associated wells show inhibition, indicating a systematic processing issue rather than isolated well-specific inhibition.

Rule Characteristics:

  • Pure business logic (no UI)
  • Well association grouping (mix, extraction instrument, extraction date, batch)
  • Threshold-based detection (>2 inhibited patient wells)
  • Exclusion logic for control wells and detected-type LIMS
  • Conditional error assignment based on observation classification

Test Method: TM-API (per Test Plan S3.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 IDTitleConditionsTest VectorsCoverageGaps
REQ-RULES-SYSINH-001Core Detection1826100%None
REQ-RULES-SYSINH-002Control Well Exclusion56100%None
REQ-RULES-SYSINH-003Detected-Type Exclusion68100%None

Totals: 3 REQs, 29 Conditions, 40 Test Vectors, 100% Coverage


Input Variables (All Requirements)

VariableTypeValid ValuesDescription
well.mixstringMix_A, Mix_B, ...Well mix identifier
well.extraction_instrumentstringExt_A, Ext_B, ...Extraction instrument used
well.extraction_datedateDate_A, Date_B, ...Date of extraction
well.batchstringBatch_A, Batch_B, ...Batch identifier
well.typestringPatient, ControlWell type classification
well.lims.is_inhibitedbooltrue, falseWhether LIMS outcome is inhibited
well.lims.codestringDETECTED_LOQ, DETECTED_QUANT, DETECTED_HIQ, OTHERLIMS outcome code
obs.target_typestringIC, non-ICObservation target type
obs.activebooltrue, falseWhether observation is active
obs.classificationstringpositive, negativeObservation classification

Output Variables

VariableTypeDescription
well.error_codestring?SYSTEMIC_INHIBITON_DETECTED, INHN, or null
well.limsstring?Retained original LIMS (for detected-type wells)
error_triggeredboolWhether systemic inhibition error was assigned

REQ-RULES-SYSINH-001: Core Detection

Decision Table: Well Association Matching

Tests that wells must share ALL four association criteria to be grouped.

TVmixextractiondatebatchwells_in_groupCovers
TV-001-001AAAA4 (all same)AC: All criteria match
TV-001-002A,A,A,BAAA3 (mix differs)AC: Mix mismatch separates
TV-001-003AA,A,A,BAA3 (extraction differs)AC: Extraction mismatch separates
TV-001-004AAA,A,A,BA3 (date differs)AC: Date mismatch separates
TV-001-005AAAA,A,A,B3 (batch differs)AC: Batch mismatch separates

Decision Table: Inhibition Threshold

Tests the >2 threshold (3+ inhibited patient wells triggers rule).

TVpatient_inhibited_countcontrol_inhibited_countthreshold_meterror_triggeredCovers
TV-001-00600falsefalseAC: No inhibition
TV-001-00710falsefalseAC: Below threshold
TV-001-00820falsefalseAC: At threshold (not exceeded)
TV-001-00930truetrueAC: Exceeds threshold (3+)
TV-001-01040truetrueAC: Well above threshold
TV-001-01121falsefalseAC: Controls not counted

Decision Table: Inhibited Flag Evaluation

Tests that only is_inhibited=true wells count.

TVwell_lims.is_inhibitedcounts_toward_thresholdCovers
TV-001-012truetrueAC: Inhibited counts
TV-001-013falsefalseAC: Non-inhibited ignored
TV-001-014null/undefinedfalseAC: Missing flag = not inhibited

Decision Table: Positive Well Determination

Tests classification of "positive well" (all non-IC active obs are negative).

TVobs_1 (non-IC active)obs_2 (non-IC active)obs_3 (IC)is_positive_wellCovers
TV-001-015negativenegativenegativetrueAC: All non-IC negative = positive well
TV-001-016negativenegativepositivetrueAC: IC classification ignored
TV-001-017positivenegativenegativefalseAC: Any positive = not positive well
TV-001-018positivepositivenegativefalseAC: Multiple positive obs

Decision Table: Error Code Assignment

Tests which error code is assigned based on observation status.

TVthreshold_metis_patienthas_positive_obsexpected_errorCovers
TV-001-019truetruefalseSYSTEMIC_INHIBITON_DETECTEDAC: Positive well gets SYSINH
TV-001-020truetruetrueINHNAC: Well with positive obs gets INHN
TV-001-021truefalsefalsenullAC: Control wells excluded
TV-001-022falsetruefalsenullAC: Threshold not met

Decision Table: INHN Override Priority

Tests that INHN is assigned instead of SYSTEMIC_INHIBITON_DETECTED when positive observations exist.

TVnon_ic_active_obs_countpositive_obs_countnegative_obs_countexpected_errorCovers
TV-001-023202SYSTEMIC_INHIBITON_DETECTEDAC: All negative = SYSINH
TV-001-024211INHNAC: At least one positive = INHN
TV-001-025220INHNAC: All positive = INHN
TV-001-026110INHNAC: Single positive = INHN

REQ-RULES-SYSINH-002: Control Well Exclusion

Decision Table: Control Well Filtering

Tests that control wells are excluded from threshold count and error assignment.

TVwell.typelims.is_inhibitedcounts_toward_thresholdreceives_errorCovers
TV-002-001PatienttruetrueeligibleAC: Patient wells count
TV-002-002PatientfalsefalseeligibleAC: Non-inhibited patient
TV-002-003ControltruefalsefalseAC: Control excluded from count
TV-002-004ControlfalsefalsefalseAC: Control never receives error

Decision Table: Mixed Patient/Control Scenarios

Tests threshold calculation with mixed well types.

TVpatient_inhcontrol_inhtotal_inhthreshold_meterror_on_patientCovers
TV-002-005213falsefalseAC: Only patient wells counted (2 <= threshold)
TV-002-006325truetrueAC: 3 patient wells exceeds threshold

REQ-RULES-SYSINH-003: Detected-Type Exclusion

Decision Table: Detected-Type LIMS Recognition

Tests that detected-type LIMS codes are recognized for exclusion.

TVlims.codeis_detected_typeCovers
TV-003-001DETECTED_LOQtrueAC: LOQ is detected-type
TV-003-002DETECTED_QUANTtrueAC: QUANT is detected-type
TV-003-003DETECTED_HIQtrueAC: HIQ is detected-type
TV-003-004NOT_DETECTEDfalseAC: Other codes not detected-type
TV-003-005INHIBITEDfalseAC: Inhibited is not detected-type

Decision Table: Detected-Type Error Exclusion

Tests that detected-type wells retain original LIMS instead of receiving error.

TVthreshold_metis_patientlims.codeexpected_outcomeCovers
TV-003-006truetrueDETECTED_LOQretain DETECTED_LOQAC: Detected well retains LIMS
TV-003-007truetrueNOT_DETECTEDSYSTEMIC_INHIBITON_DETECTEDAC: Non-detected gets error
TV-003-008truetrueDETECTED_QUANTretain DETECTED_QUANTAC: QUANT retained

End-to-End Scenario Coverage

Scenario: Complete Associated Group Evaluation

TVWellAssocTypeInhibitedLIMSPositive ObsExpected ResultCovers
TV-E2E-001W1APatientfalseOTHER-SYSTEMIC_INHIBITON_DETECTEDREQ-001: Positive well in affected group
TV-E2E-002W2APatienttrueINHIBITED-SYSTEMIC_INHIBITON_DETECTEDREQ-001: Inhibited + threshold
TV-E2E-003W3APatienttrueINHIBITED-SYSTEMIC_INHIBITON_DETECTEDREQ-001: Inhibited + threshold
TV-E2E-004W4APatienttrueINHIBITED-SYSTEMIC_INHIBITON_DETECTEDREQ-001: Inhibited + threshold
TV-E2E-005W5APatienttrueDETECTED_LOQ-retain DETECTED_LOQREQ-003: Detected-type excluded
TV-E2E-006W6AControltrueINHIBITED-null (no error)REQ-002: Control excluded
TV-E2E-007W7APatientfalseOTHER1+INHNREQ-001: Has positive obs

Traceability to Existing Tests

RequirementJira TestsAutomation Status
REQ-RULES-SYSINH-001BT-5096, BT-5097, BT-5098, BT-5099, BT-5104, BT-5107, BT-5684Automated (v2: Viracor_PROD.xlsx)
REQ-RULES-SYSINH-002PendingGap
REQ-RULES-SYSINH-003PendingGap

Gap Analysis

Identified Gaps

GapRequirementDescriptionPriorityOwner
GAP-001REQ-RULES-SYSINH-002No Jira test ticket for control well exclusionHighTBD
GAP-002REQ-RULES-SYSINH-003No Jira test ticket for detected-type exclusionHighTBD

Remediation Plan

  1. GAP-001: Create test ticket covering TV-002-001 through TV-002-006 (control well filtering and mixed scenarios)
  2. GAP-002: Create test ticket covering TV-003-001 through TV-003-008 (detected-type recognition and error exclusion)