Skip to main content
Version: 3.0.1

Kit Configuration

Version: v3.0.0 Status: Normative (text), Illustrative (diagrams only) Scope: Assay and instrument configuration management for PCR analysis workflows Domain: KITCFG


Statement

The system shall provide centralized management of assay and instrument configurations used in PCR analysis workflows, enabling authorized users to configure mixes, targets, instruments, quality control parameters, rules, and calibration settings.

Kit Configuration serves as the foundation for runfile processing and analysis, providing mix matching during import, rule mappings for the analysis engine, QC thresholds for quality control evaluation, and calibration parameters for classification boundaries. Multi-site clients can maintain independent configurations per site, with all changes logged to the audit trail.


Behavior Overview (Illustrative)

This diagram illustrates the high-level behavior. It does not specify UI layout, styling, or interaction details.


Definitions

TermDefinition
MixA configured combination of targets and dyes representing a specific assay
TargetA specific DNA/RNA sequence being detected within a mix
Internal Control (IC)A target used to verify successful extraction and amplification
Passive TargetA reference dye target used for normalization
Unknown MixAn auto-created mix entry when imported targets do not match any configured mix
Westgard RulesStatistical quality control rules for monitoring control performance
Curve ControlA control sample used to verify the standard curve for quantification
Cross Contamination LimitCT value thresholds used to detect potential contamination between adjacent wells
Combined OutcomeA rule that assigns outcomes based on combinations of target results within a well
CalibrationThe process of setting classification boundaries using historical run data
Rule MappingThe association between analysis rules and specific observation types
ResolutionA configured action that can be applied to resolve quality control errors

Functional Requirements

Mix and Target Management (REQ-KITCFG-001, REQ-KITCFG-002)

FR-KITCFG-001 Manage Mix and Target Configuration

The system shall allow authorized users to view, create, modify, and manage mix and target configurations including their associated analysis parameters.

Acceptance Criteria:

Display and Navigation:

  • Display all configured mixes with their associated targets and properties
  • Sort mixes with enabled first (alphabetically), then disabled (alphabetically)
  • Sort targets within a mix alphabetically, with IC target penultimate and passive target last
  • Allow navigation between mixes during editing

Mix Properties:

  • Allow modification of mix-level properties including name, internal control designation, passive target, extraction instrument, discrepancy check settings, result provider, and enabled status
  • Preserve mix configuration settings when a mix is disabled
  • Prevent disabled mixes from appearing in application dropdowns
  • Prevent unknown mixes from being enabled until a mix name is provided
  • Consider a mix unique if it has a unique set of target/dye combinations

Target Properties:

  • Allow modification of target-level properties including fluorescence thresholds, CT inhibition delta, and display order
  • Enforce that a target cannot be designated as both internal control and passive simultaneously
  • Validate Minimum Fluorescence with maximum 16 integer places and 16 decimal places
  • Validate Expected Threshold with maximum 3 integer places and 15 decimal places
  • Validate Max Fluorescence with maximum 16 integer places and 16 decimal places, and enforce Max Fluorescence >= Min Fluorescence
  • Validate CT Inhibition Delta as a positive non-zero integer with default value 3
  • Validate TARGET ORDER as optional integer; when provided for any target in a mix, must be provided for all targets in that mix; when empty, defaults to alphabetical ordering with IC target last
  • Validate CALIBRATION FILE PATH as optional string (S3 URI); when provided, sets calibration timestamp to current time; during run analysis, targets with calibration files have their calibration S3 URI passed to DXAI for external calibration processing
  • Validate CHECK CLS DISCREPANCY as optional boolean (default: true); when true, enables CLS discrepancy checking for the target
  • Validate EXPORT NAME as optional string; used as alternative target name in LIMS exports when provided
  • Validate PREFERRED RESULT PROVIDER as required string with values "MACHINE" or "DXAI"; determines which analysis engine result is preferred for the target
  • Validate CT DISCREPANCY DELTA as optional integer; threshold for flagging CT value discrepancies between machine and DxAI results
  • Validate MAXIMUM FLUORESCENCE as optional decimal (32 integer places, 10 decimal places); used by Unexpected Fluorescence rule to detect anomalous readings
  • Validate ENABLED (is_enabled) as optional boolean (default: true); when false, target is disabled and excluded from analysis

Mix Properties (additional):

  • Validate QUANTITATIVE as optional boolean (default: false); when true, enables quantity-based analysis for all targets in the mix; must be consistent across all targets in the same mix
  • Validate DISABLED as optional boolean (default: false); when true, the mix is disabled and excluded from application dropdowns and analysis

Error Handling:

  • Unknown mix imported: Auto-create a disabled "Unknown" mix entry with default values
  • Validation error on save: Display specific validation message and prevent save
  • Unsaved changes on navigation: Prompt user to confirm discard or continue editing

Trace: Source: 3.0.0-Mixes and Targets (Rows 1-18), 3.0.0-Minimum Fluorescence, 3.0.0-Add CT Inhibition Delta, 3.0.0-IC rule configuration, 3.0.0-Identify quantitative mixes, 3.0.0-Set targets priority order, CONFIG_COVERAGE_FIXES.md Phase B2 | Code: app/Imports/Sheets/MixAndTargetsImportSheet.php, app/Models/Mix.php, app/Models/Target.php, MixDataExtractor.php, TargetDataExtractor.php, IsQuantitativeValidator.php, TargetOrderValidator.php, ExpectedThresholdValidator.php | Jira: BT-276, BT-277, BT-278, BT-317, BT-2401, BT-3552, BT-3897, BT-4367, BT-5227, BT-5308, BT-5368, BT-3295, BT-3371 | Tests: [See BT-1927, BT-1929, BT-1931, BT-1932, BT-1935, BT-1139](#test-req-kitcfg-001)


FR-KITCFG-002 Import and Export Mix Configuration

The system shall allow authorized users to import and export mix and target configurations via Excel files.

Acceptance Criteria:

Import:

  • Support import of mix configurations when the mix table is empty
  • Import columns: Mix name, Target, Dye, IC, Passive, Extraction Instrument, CT Inhibition Delta, Target Display Order
  • Apply default alphabetical ordering when Target Display Order is empty for all targets in a mix
  • Ignore mixes where Target Display Order is partially filled

Export:

  • Export all configured mixes and targets including CT Inhibition Delta and Target Display Order
  • Display import result status (Imported/Ignored) for each row

Error Handling:

  • Invalid CT Inhibition Delta: Ignore the row and report status as Ignored
  • Non-numeric Target Display Order: Ignore the row and report status as Ignored
  • Empty IC CT Delta for IC target: Apply default value of 3

Trace: Source: 3.0.0-Mixes and Targets (Rows 19-20), 3.0.0-Mixes And Targets Import/Export - Add IC Delta, 3.0.0-Set targets priority order, CONFIG_COVERAGE_FIXES.md Phase B2 | Code: app/Imports/Sheets/MixAndTargetsImportSheet.php, app/Models/Mix.php, app/Models/Target.php, MixDataExtractor.php, TargetDataExtractor.php | Jira: BT-276, BT-279, BT-3897, BT-3371 | Tests: [See BT-1934](#test-req-kitcfg-002)


Instrument Management (REQ-KITCFG-003, REQ-KITCFG-004)

FR-KITCFG-003 Manage Extraction Instruments

The system shall allow authorized users to view, add, and manage extraction instrument configurations grouped by extraction model.

Acceptance Criteria:

  • Display extraction instruments grouped by extraction model
  • Allow adding new extraction models and instruments
  • Allow editing extraction model names
  • Prevent deletion of extraction instruments to preserve data integrity
  • Support import and export of extraction instrument configuration via Excel
  • Require "Use Extraction Instruments" client configuration to be enabled for import
  • Log all changes to audit trail

Import/Export:

  • Import columns: Extraction Model, Extraction Instrument
  • Export columns: Extraction Model, Extraction Instrument
  • Validate Extraction Model as required string
  • Validate Extraction Instrument as required string
  • When "Use Extraction Instruments" is disabled: Reject all rows with status "USE EXTRACTION INSTRUMENT DISABLED - ignored"
  • Invalid Extraction Model value (empty or null): Reject extraction model with status "Extraction model: ignored"
  • Invalid Extraction Instrument value (empty or null): Reject extraction instrument with status "Extraction instrument: ignored"
  • Import creates extraction model first, then creates extraction instrument linked to that model
  • Uses site-scoped uniqueness: same extraction model/instrument names can exist across different sites

Trace: Source: 3.0.0-Extraction Instruments (Rows 1-12), CONFIG_COVERAGE_FIXES.md Phase D4 | Jira: BT-290, BT-291, BT-292, BT-298 | Tests: [Pending]


FR-KITCFG-004 Manage Thermocycler Instruments

The system shall allow authorized users to view, add, and manage thermocycler instrument configurations grouped by thermocycler model.

Acceptance Criteria:

  • Display thermocycler instruments grouped by thermocycler model with columns: Thermocycler Model, Thermocycler Instrument, Thermocycler Plate Size
  • Maintain a default "Unknown" model and instrument entry
  • Allow adding new thermocycler models and instruments
  • Prevent deletion of thermocycler instruments to preserve data integrity
  • Support import and export of thermocycler configuration via Excel
  • Optionally auto-populate thermocycler entries from imported runfile data
  • Store Thermocycler Plate Size as integer; system defaults to 96 when creating new instruments (import, UI, or auto-population)
  • Display Thermocycler Plate Size in the Runs list view as informational metadata; this field is currently display-only and does not affect analysis behavior

Import/Export:

  • Support import of thermocycler configuration via Excel
  • Import columns: Thermocycler Model, Thermocycler Instrument
  • Export columns: Thermocycler Model, Thermocycler Instrument, Thermocycler Plate Size
  • Validate Thermocycler Model as required string (cannot be null or empty)
  • Validate Thermocycler Instrument as required string (cannot be null or empty)
  • Invalid Thermocycler Model value: Row status includes "Thermocycler model: ignored"
  • Invalid Thermocycler Instrument value: Row status includes "Thermocycler: ignored"
  • Thermocycler Plate Size is not imported from spreadsheet; system always assigns default value of 96 on import
  • Export all configured thermocyclers with their model, instrument serial number, and plate size

Trace: Source: 3.0.0-Thermocycler Instruments (Rows 1-14), CONFIG_COVERAGE_FIXES.md Phase C4/D9 | Code: app/Imports/Sheets/ThermocyclerModelImportSheet.php, app/ThermocyclerModelRequest.php, app/Thermocycler.php, app/Exports/ThermocyclerModelExport.php | Jira: BT-2403, BT-318, BT-319, BT-320, BT-321 | Tests: [Pending]


Error and Resolution Management (REQ-KITCFG-005, REQ-KITCFG-006)

FR-KITCFG-005 Manage Error Codes

The system shall allow authorized users to view and manage error code definitions including their classification, severity, and analysis impact.

Acceptance Criteria:

Display:

  • Display error codes with properties: code, message, type, affects (well/target), default LIMS export, control error flag, Westgard error flag, prevents analysis flag, ignored status, causes missing mixes flag, inhibited flag

Management:

  • Allow adding new error codes with required fields: code, message, type, affects, prevents analysis
  • Allow editing error code properties except the error code itself
  • Allow error codes to be ignored but not deleted
  • Hide ignored error codes from runfile reports
  • Support filtering by error code, type, and prevents analysis

LIMS Export Fallback Behavior:

  • When exporting well results to LIMS, if a well has an error code with a DEFAULT LIMS EXPORT configured but no direct LIMS status, the system shall use the error code's DEFAULT LIMS EXPORT as the well's LIMS status

Import/Export:

  • Support import and export of error codes configuration via Excel
  • Validate DEFAULT LIMS EXPORT as optional string; when provided, must match an existing LIMS status code
  • Invalid DEFAULT LIMS EXPORT value: Reject row with status "Ignored" and reason "Default Lims Status does not match with any available Lims Statuses"

Trace: Source: 3.0.0-Error codes (Rows 1-12), 3.0.0-Associate Error Type, 3.0.0-Error codes - Add Causes Missing Mixes column, 3.0.0-Error codes - Add Is Inhibited column, CONFIG_COVERAGE_FIXES.md Phase B4 | Code: app/Imports/Sheets/ErrorCodesImportSheet.php, LimsStatusValidator.php | Jira: BT-2405, BT-1228, BT-3433, BT-4505, BT-4142, BT-3734, BT-4150 | Tests: [See BT-1896-1909, BT-3835](#test-req-kitcfg-005)


FR-KITCFG-006 Manage Error Resolutions

The system shall allow authorized users to configure resolution options for quality control errors, including affected wells, outcomes, and resolution levels.

Acceptance Criteria:

Display:

  • Display resolution configurations grouped by error message

Configuration:

  • Allow adding resolution options with: resolution message, affected wells/LIMS statuses, rules skipped on re-analyze, outcome on resolution, default flag, affected well type
  • Support resolution levels: Well, All Observations, Discrepant Observations
  • Allow specifying affected wells by LIMS status, error code, or "All Wells"
  • Support enabling/disabling and deleting resolutions
  • Support import and export of resolution configurations with affected well type

Resolution Dropdown Behavior:

  • When multiple resolution options share the same resolution message (grouped by resolution message number), the system shall display a dropdown selector populated with DROPDOWN CODE and DROPDOWN MESSAGE values
  • The dropdown shall display DROPDOWN MESSAGE as the selectable option text
  • The selected dropdown option is included in the corrective action display (resolution message + dropdown message)
  • The selected dropdown option is recorded in the audit log when a resolution is applied

LIMS Message Behavior:

  • When a resolution is applied to a well and the resolution code has a LIMS MESSAGE configured, the system shall use the LIMS MESSAGE as the well outcome message text instead of the standard LIMS status message
  • The LIMS MESSAGE appears in well outcome displays and exports for wells resolved with that resolution code

Import/Export:

  • Import/Export shall support columns: RESOLUTION NUMBER, DROPDOWN CODE, DROPDOWN MESSAGE, OTHER WELLS AFFECTED BY RESOLUTION, LIMS MESSAGE
  • Validate RESOLUTION NUMBER as required integer; must reference an existing resolution message number for the site
  • Validate DROPDOWN CODE as optional string; if provided, DROPDOWN MESSAGE must also be provided
  • Validate DROPDOWN MESSAGE as optional string; if provided, DROPDOWN CODE must also be provided
  • Validate OTHER WELLS AFFECTED BY RESOLUTION as optional comma-separated list of LIMS status codes or "ALL WELLS"; if "ALL WELLS" is specified, no other values may be included
  • Validate LIMS MESSAGE as optional string; specifies the custom message displayed in LIMS export when resolution is applied
  • Invalid RESOLUTION NUMBER (empty or no matching resolution message): Reject row with status "Ignored" and reason "Resolution number is not filled" or "No matching resolution message"
  • Invalid OTHER WELLS AFFECTED BY RESOLUTION (ALL WELLS combined with other values): Reject row with status "Ignored" and reason "Can't have other lims along with all wells"

Trace: Source: 3.0.0-Error Resolution (Rows 1-8), 3.0.0-Resolution Code Configuration Page - Resolution Level, 3.0.0-Error Resolution - Add affected well type, 3.0.0-Error Resolution - All associated samples, 3.0.0-Allow Error Codes as Affecting Wells, CONFIG_COVERAGE_FIXES.md Phase B3 | Code: app/Imports/Sheets/ErrorResolutionsImportSheet.php, app/ResolutionMessage.php, app/ResolutionDropdown.php, app/ResolutionCode.php, ResolutionNumberValidator.php, ResolutionCodeDataExtractor.php, AffectedLimsStatusValidator.php | Jira: BT-1619, BT-2410, BT-3817, BT-3820, BT-3299, BT-4518, BT-5268 | Tests: [See BT-2212, BT-2221-2231, BT-3862, BT-2239, BT-2241, BT-4686, BT-5270](#test-req-kitcfg-006)


Control Label Management (REQ-KITCFG-007)

FR-KITCFG-007 Manage Control Labels

The system shall allow authorized users to configure control label mappings that define how sample labels in imported runfiles are classified and processed.

Acceptance Criteria:

  • Display control label mappings with: Role, Mix, Is extracted, Labels, Type, Backup Mixes, Resolution Priority (when enabled)
  • Support wildcard patterns in label matching (case-insensitive)
  • Allow mapping labels to roles with types: PC, NC, Sample, Ignore, Quantification, Quantification & PC, Crossover
  • Allow configuring backup mixes for failover
  • Support role aliasing and remapping
  • Support excluding roles from IC delta check
  • Support export of control label configuration to Excel

Control Labels Export Columns:

  • ROLE: The role name associated with the control label mapping
  • ROLE TYPE: The type of the associated role (PC, NC, Sample, Ignore, Quantification, Quantification & PC, Crossover); derived from the Role entity
  • MIX: The mix(es) associated with the control label; displays "Global" for non-strict mappings, "All mixes" when all mixes are selected, or pipe-separated mix names
  • IS EXTRACTED: Boolean (displayed as Y/N) indicating whether samples with this role require an extraction date; derived from the Role's has_extraction property; when Y, the well must have an actual extraction date; when N, the system uses the runfile creation date as the extraction date
  • BACKUP MIXES: Pipe-separated list of backup mix names for failover
  • LABELS IN IMPORTED RUNFILE: Pipe-separated list of role aliases (labels) that map to this role

Roles Import/Export:

The Roles sheet defines available roles that can be referenced by Control Labels.

  • Import columns: ROLE NAME, ROLE TYPE, HAS EXTRACTION, EXCLUDE FROM IC DELTA CHECK, RESOLUTION PRIORITY (when enabled)
  • Validate ROLE NAME as required string; used with site_id for unique identification
  • Validate ROLE TYPE as required string; must be one of: "PC", "NC", "Sample", "Ignore", "Quantification", "Quantification & PC", "Crossover"
  • Validate HAS EXTRACTION as optional boolean (default: false); when true, indicates the role includes an extraction step
  • Roles with type "Sample", "Ignore", or "Crossover" cannot have RESOLUTION PRIORITY when use_role_priority_for_resolution is enabled
  • Invalid ROLE NAME (empty): Reject row with status "Ignored"
  • Invalid ROLE TYPE (empty or not in valid list): Reject row with status "Ignored"

Trace: Source: 3.0.0-Control Labels (Rows 1-23), 3.0.0-Control Labels - QUANTIFICATION, 3.0.0-Client configurations - Control Labels, 3.0.0-Control Labels UI - Delete Labels Mixes Roles, 3.0.0-Control Labels - Map role alias to new role, 3.0.0-Control Labels - EXCLUDE FROM IC DELTA CHECK, 3.0.0-Control Labels - Edit resolution priority, CONFIG_COVERAGE_FIXES.md Phase C2/C3 | Code: app/Imports/Sheets/RolesImportSheet.php, app/Role.php, app/Exports/ControlLabelsExport.php | Jira: BT-2404, BT-541, BT-3864, BT-4899, BT-3324, BT-3883, BT-4415, BT-4535, BT-5287, BT-4900 | Tests: [See BT-1915, BT-3913](#test-req-kitcfg-007)


Run Tag Management (REQ-KITCFG-008)

FR-KITCFG-008 Manage Run Tags

The system shall allow authorized users to create and manage run tags for organizing and archiving runs.

Acceptance Criteria:

  • Display non-archived tags when archive mode is deactivated
  • Display archived tags when archive mode is activated
  • Maintain a default "Archived" tag that cannot be deleted or edited
  • Enforce unique tag names with maximum 40 characters

Import/Export:

  • Support import of tag configuration via Excel
  • Import columns: NAME, ARCHIVE
  • Validate NAME as required string (1-40 characters)
  • Validate ARCHIVE as optional boolean (true/false, yes/no, 1/0, on/off, or empty); defaults to false when empty
  • Skip rows where NAME equals "Archive" (reserved system tag)
  • Match existing tags by NAME; update ARCHIVE value if modified
  • Export all configured tags with columns: NAME, ARCHIVE

Error Handling:

  • Duplicate tag name: Display validation error and prevent save
  • Tag name "Archived": Display validation error (reserved name)
  • Empty NAME: Reject row with status "Ignored" and reason "Name is empty"
  • Tag name > 40 characters: Reject row with status "Ignored" and reason "Name must contains between 1 and 40 characters"
  • Invalid ARCHIVE value: Reject row with status "Ignored" and reason "archived does not have supported value"

Trace: Source: 3.0.0-Kit Configuration - Run Tags - UI, 3.0.0-Kit Configuration - Run Tags - Import, 3.0.0-Kit Configuration - Run Tags - Export | Jira: BT-4300 | Tests: [Pending]


LIMS Integration (REQ-KITCFG-009)

FR-KITCFG-009 Manage LIMS Export Mappings

The system shall allow authorized users to configure mappings between LIMS export codes and outcome messages for downstream integration.

Acceptance Criteria:

  • Display LIMS mappings with: Code, Message, Type, Result, Causes Missing Mixes, Is Inhibited, Does Prevent Analyse
  • Support dynamic LIMS terms: {LOQ}, {Quant}, {HIQ}
  • Allow editing message, type (Exclude/Information/Warning), result, and flag properties
  • Allow adding new LIMS codes with unique code values
  • Prompt for confirmation when closing with unsaved changes

Import/Export:

  • Import/Export shall support columns: CODE, MESSAGE, TYPE, RESULT, DOES PREVENT ANALYSE, CAUSES MISSING MIXES, IS INHIBITED
  • Validate CODE as required string; must be unique per site
  • Validate MESSAGE as required string
  • Validate TYPE as required string; must be one of: "Warning", "Exclude", "Information"
  • Validate RESULT as optional string; must be one of: "DETECTED", "NOT_DETECTED" when provided; null indicates no result classification
  • Validate DOES PREVENT ANALYSE as optional boolean via BooleanCaster (default: true)
  • Validate CAUSES MISSING MIXES as optional boolean via BooleanCaster (default: false)
  • Validate IS INHIBITED as optional boolean via BooleanCaster (default: true)
  • Invalid row (missing CODE, MESSAGE, or TYPE; invalid RESULT value; invalid boolean values): Reject row with status "Lims status: ignored"

Trace: Source: 3.0.0-LIMS Export (Rows 1-9), 3.0.0-Lims Statuses - Add Causes Missing Mixes column, 3.0.0-LIMS - Add Is Inhibited column, 3.0.0-LIMS - Add Does Prevent Analyse Property | Jira: BT-2413, BT-1865, BT-4505, BT-4150, BT-4027 | Tests: [See BT-2092-2122, BT-4042](#test-req-kitcfg-009)


Unified Assay Configuration (REQ-KITCFG-010)

FR-KITCFG-010 Provide Unified Assay Configuration Interface

The system shall provide a unified interface for viewing and editing mix-related configurations through filterable widgets with global and mix-specific settings.

Acceptance Criteria:

Widget Consolidation:

  • Consolidate the following configurations into a unified screen: Mixes and Targets, Control Labels, Rules, Test Codes, Curve Control Limits, Westgard Settings, Cross Contamination Limits, Reporting Cut-offs, QIR Settings, Calibration

Filtering:

  • Provide mix and target filter dropdowns for scoping displayed data
  • Support switching between configuration widgets while preserving filter state

Global Settings:

  • Support global configuration settings that apply to all mixes/targets as defaults
  • Allow individual override of global settings for specific mixes/targets

Export:

  • Support printing and exporting selected configuration widgets

Trace: Source: 3.0.0-Mix driven configuration (Rows 1-40) | Jira: BT-3127, BT-3149, BT-3262 | Tests: [Pending]


Combined Outcomes (REQ-KITCFG-011)

FR-KITCFG-011 Manage Combined Outcome Rules

The system shall allow authorized users to define and manage combined outcome rules that assign outcomes based on combinations of target results within wells.

Acceptance Criteria:

Display:

  • Display combined outcomes in a hierarchical table grouped by outcome

Target Configuration:

  • Allow configuring target result conditions: Positive, Negative, Any with optional CT/Quantity ranges
  • Allow configuring outcome properties: LIMS status, well error, target error, IC failed, priority, name, code
  • Support CLS Discrepancy Required and CT Discrepancy Required settings per target result

Role Scope:

  • Allow configuring role scope: PC, NC, Quantification, Sample types (excluding Ignore)
  • Support multi-mix combined outcomes for sample-typed roles with cross-run matching options
  • Restrict multi-mix combined outcomes to Sample typed roles only
  • Disable multi-run feature when CLS Discrepancy Required or CT Discrepancy Required is enabled

Validation:

  • Prevent duplicate combined outcomes for same target/outcome combination
  • Enforce Quantity range from 0.0000000001 to 9999999999999999999999.9999999999
  • Restrict CT range to related CT Reporting range or default 1-90

Import/Export:

  • Support import and export of combined outcome configurations
  • Log all combined outcome changes to audit trail

Import Columns (Mix Result Level):

  • Validate ALLOW OTHER RUNS TO BE USED as optional boolean (default: false); when true, allows matching wells from previous runs for the same patient; cannot be enabled when CLS Discrepancy Required or CT Discrepancy Required is true
  • Validate IS REPEAT as optional boolean (default: false); when true, requires a matching historical well with the same outcome before the combined outcome applies
  • Validate MIXES MISSING as optional boolean (default: false); when true, combined outcome applies when specified mixes are NOT present
  • Validate MIX LEVEL OUTCOME TYPE as optional string; must be "Error" or "Lims" when provided; required if MIX LEVEL WELL ERROR CODE/LIMS CODE is filled
  • Validate MIX LEVEL WELL ERROR CODE/LIMS CODE as optional string; must exist in error codes (if type=Error) or LIMS statuses (if type=Lims); unsupported error codes are rejected
  • Validate MIX MISSING as optional boolean (default: false); when true, the specific mix should NOT be present for the combined outcome to match; all rows for same outcome must have consistent mix_missing values across mix results
  • Validate USE_LATEST_UPLOADED_WELL as optional boolean (default: false); when true, prioritizes most recently uploaded well when multiple history wells match
  • Validate REQUIRED HISTORY OUTCOMES as optional comma-separated string; each outcome must exist in error codes or LIMS statuses; only allowed when IS REPEAT or ALLOW OTHER RUNS TO BE USED is true

Import Columns (Target Result Level):

  • Validate RESULT as optional string; must be one of: "Pos", "Neg", "Any", "Classification / Discrepancy"
  • Validate MIN CT as optional integer between 1-90; when both MIN CT and MAX CT are provided, MAX CT must be >= MIN CT
  • Validate MAX CT as optional integer between 1-90; when both MIN CT and MAX CT are provided, MAX CT must be >= MIN CT
  • Validate MIN QUANTITY as optional decimal > 0 and <= 9999999999999999999999.9999999999; when both MIN QUANTITY and MAX QUANTITY are provided, MAX QUANTITY must be >= MIN QUANTITY
  • Validate MAX QUANTITY as optional decimal > 0 and <= 9999999999999999999999.9999999999; when both MIN QUANTITY and MAX QUANTITY are provided, MAX QUANTITY must be >= MIN QUANTITY
  • Validate SPECIMEN as optional string; must exist in Specimens configuration when use_sample_type is enabled; must be empty when use_sample_type is disabled; "Any" or blank applies to all specimens

Error Handling:

  • CT conditions with Quantity conditions: Prevent configuring both simultaneously
  • Invalid CT/Quantity range: Display validation error
  • Unsupported error/LIMS codes: Filter from selection options

Trace: Source: 3.0.0-Combined Outcomes (Rows 1-16), CONFIG_COVERAGE_FIXES.md Phase B1, 3.0.0-Combined Outcomes Table - Collapsed and Expandable, 3.0.0-Client Configuration - Combined Outcomes Add Role ans Outcome Type, 3.0.0-Add Name, 3.0.0-Add Priority, 3.0.0-Client Configurations Combined Outcomes - Add IC Fail Option, Requirements for Validations for Combined Outcomes, 3.0.0-Multi Mix Combined Outcome, 3.0.0-Configure Cls Discrepancy Required, 3.0.0-Configure CT Discrepancy Required, 3.0.0-Config UI Combined Outcomes Prevent Un Supported Outcomes, 3.0.0-Combined Outcome - Import - Add Code field, 3.0.0-Combined Outcomes - Export - Add Code field, 3.0.0-Combined Outcomes - Change to Name field as editable | Code: app/Imports/Sheets/CombinedOutcomesImportSheet.php, app/Actions/OutcomeToLimsStatus/ImportSupport/Validate/Validators/*.php, app/OutcomeToLimsStatusMapping.php, app/OutcomeToLimsMappingMixResult.php, app/OutcomeToLimsMappingTargetResult.php, app/Exports/Config/CombinedOutcomesExport.php, app/Analyzer/Rules/CombinedOutcomeRule.php | Jira: BT-3071, BT-4510, BT-3583, BT-4318, BT-3876, BT-3399, BT-4530, BT-3419, BT-4070, BT-5226, BT-5308, BT-4231 | Tests: [See BT-405, BT-4644, BT-3656, BT-4340, BT-3885, BT-2635, BT-4399, BT-3543, BT-5230, BT-4239](#test-req-kitcfg-011)


Quality Control Configuration (REQ-KITCFG-012, REQ-KITCFG-013, REQ-KITCFG-014, REQ-KITCFG-015)

FR-KITCFG-012 Manage Westgard Settings

The system shall allow authorized users to configure Westgard statistical control parameters (mean, standard deviation) for quality control rule evaluation.

Acceptance Criteria:

Display:

  • Display Westgard settings with: Mix, Target, Dye, Role, Range, Range Start Date, Extraction Models, Instrument, Mean, SD, Quant/Ct, Enabled
  • Show only roles with valid control label mappings for the selected mix in the role selector

Management:

  • Allow creating new Westgard ranges with specified statistical parameters
  • Allow editing Mean and SD for ranges without existing control data
  • Make all fields display-only except enabled slider for ranges with control data
  • Reset Westgard failures on re-analysis when mean/SD changes affect the failure

Import/Export:

  • Support import and export by role name
  • Support enabling/disabling Westgard settings
  • Ignore import rows with role aliases (not role names)
  • Validate DYE as optional string; when TARGET is not "Global", DYE combined with MIX identifies the target; must match an existing dye name in the system
  • Validate RANGE START DATE as required date (string format or Excel serial number); sets the effective date for the Westgard limit; converted to UTC using site timezone

Trace: Source: 3.0.0-Westgard Settings (Rows 1-11), Wesgard resolution added by Malith, 3.0.0-Westgard Limits - Import sheet, 3.0.0-Westgard Limits - Export sheet, 3.0.0-Westgard Limits - role selector, CONFIG_COVERAGE_FIXES.md Phase C7 | Code: app/Imports/Sheets/WestgardLimitsImportSheet.php, WestgardLimitDataExtractor.php, DateValidator.php, DateCaster.php | Jira: BT-1404, BT-469, BT-2541, BT-4535, BT-4648 | Tests: [See BT-2371-2378, BT-2721](#test-req-kitcfg-012)


FR-KITCFG-013 Manage Cross Contamination Limits

The system shall allow authorized users to configure CT value thresholds used by the ADJ rule to detect potential cross-contamination between adjacent wells.

Acceptance Criteria:

Display:

  • Display cross contamination limits with: Mix, Target, Potential Contaminated, Potential Contaminating, Quant/Ct

Configuration:

  • Enforce Potential Contaminated > Potential Contaminating
  • Allow adding limits for multiple mix/target combinations at once
  • Only allow adding limits for targets without existing limits
  • Use configured limits in ADJ rule evaluation

Validation:

  • Validate CT mode values as non-decimal numeric with minimum 1
  • Validate Quant mode values as decimal with minimum 0.0000000001

Audit:

  • Log all changes to audit trail

Import/Export:

  • Support import of cross contamination limits via Excel
  • Import columns: MIX, TARGET, DYE, QUANT OR CT, POTENTIAL CONTAMINATED, POTENTIAL CONTAMINATING
  • Validate MIX as required string; must match an existing mix name in the system
  • Validate TARGET as required string; "Global" applies limits to all targets; otherwise must match existing target (with MIX+DYE)
  • Validate DYE as required string (except when TARGET is "Global"); combined with MIX identifies the specific target; must match an existing dye name
  • Validate QUANT OR CT as required string; valid values: "Quant" or "Ct"
  • Validate POTENTIAL CONTAMINATED as required numeric; for Ct mode: non-decimal integer (up to 22 digits); for Quant mode: decimal
  • Validate POTENTIAL CONTAMINATING as required numeric; same format as POTENTIAL CONTAMINATED
  • For Ct mode: POTENTIAL CONTAMINATED must be >= POTENTIAL CONTAMINATING
  • For Quant mode: POTENTIAL CONTAMINATED must be < POTENTIAL CONTAMINATING
  • Invalid row: Reject with status "Ignored" and reason (e.g., "No any matching target for data row", "Quant or Ct is not present", "Invalid option", "Contamination Value is not present", "Invalid Contamination Value")
  • Export all configured cross contamination limits with columns: MIX, TARGET, DYE, QUANT OR CT, POTENTIAL CONTAMINATED, POTENTIAL CONTAMINATING

Trace: Source: 3.0.0-Cross Contamination Limits (Rows 1-8), 3.0.0-Config Page - Adjacent - Add Quant or Ct Property, CONFIG_COVERAGE_FIXES.md Phase D1 | Jira: BT-1458, BT-1459, BT-4315 | Tests: [See BT-1964-2001, BT-1533-1536](#test-req-kitcfg-013)


FR-KITCFG-014 Manage Curve Control Limits

The system shall allow authorized users to configure upper and lower CT bounds used by the BCC rule for curve control validation.

Acceptance Criteria:

Display:

  • Display curve control limits with: Mix, Target, Sample Role, Lower Bound Ct, Upper Bound Ct

Configuration:

  • Allow adding limits for multiple mix/target/role combinations at once
  • Enforce Lower Bound and Upper Bound are positive non-zero values
  • Enforce Upper Bound > Lower Bound
  • Use configured limits in BCC rule to trigger out-of-range errors

Audit:

  • Log all changes to audit trail (separate entries for each bound)

Import/Export:

  • Support import of curve control limits configuration via Excel
  • Import columns: MIX, TARGET, SAMPLE ROLE, LOWER BOUND CT, UPPER BOUND CT
  • Validate MIX as required string; must match an existing enabled mix name or the special value "Global"
  • Validate TARGET as required string; must match an existing target name within the specified mix (ignored when MIX is "Global")
  • Validate SAMPLE ROLE as required string; must match a control label's role alias for the specified mix
  • When MIX is "Global": apply limits to all targets for the specified role alias, removing any mix-specific limits for that role
  • When MIX is a specific mix name: remove any "Global" limits for that role alias and create mix-specific limits
  • Invalid row (missing required fields, unmatched mix/target/role): Reject row with status "Ignored"
  • Export columns: MIX, TARGET, DYE, SAMPLE ROLE, LOWER BOUND CT, UPPER BOUND CT
  • DYE is read-only on export; derived from target's dye assignment; not used during import

Trace: Source: 3.0.0-Curve Control Limits (Rows 1-9), CONFIG_COVERAGE_FIXES.md Phase D2 | Jira: BT-1461, BT-2406, BT-1464 | Tests: [See BT-1997-2014, BT-2119, BT-2570](#test-req-kitcfg-014)


FR-KITCFG-015 Manage Known Quantities

The system shall allow authorized users to configure expected quantity values for control roles used in quantification by standard curve calculations.

Acceptance Criteria:

Display:

  • Display known quantities with: Role, Mix, Target, Known Quantity

Validation:

  • Validate Known Quantity as positive numeric value
  • Reject negative, zero, alphabetic, special characters, whitespace, or empty values

Import/Export:

  • Support import of known quantity configuration via Excel
  • Import columns: ROLE, MIX, TARGET, QUANTITY
  • Validate ROLE as required string; must match existing role name at site
  • Validate MIX as required string; must match existing mix name at site
  • Validate TARGET as required string; must match existing target name within the specified mix
  • Validate QUANTITY as required positive numeric value (> 0)
  • Invalid row (missing/invalid ROLE, MIX, TARGET, or QUANTITY): Reject row with status "Known Quantity: ignored"
  • On import, create new known quantity record or update existing if role+target combination already exists
  • Export all configured known quantities with columns: ROLE, MIX, TARGET, QUANTITY

Trace: Source: Requirements for QUANTIFICATION added by Robert 19-Oct-22 (Rows 1-2) | Jira: BT-3214 | Tests: [See BT-1207](#test-req-kitcfg-015)


Reporting Configuration (REQ-KITCFG-016, REQ-KITCFG-017)

FR-KITCFG-016 Manage Reporting Cut-offs

The system shall allow authorized users to configure upper bound limits for quantitative groupings used by RQUANT, RQUAL, and RQUANTASQUAL reporting rules.

Acceptance Criteria:

  • Display reporting cut-offs with: Mix, Targets, Specimen Types, Group, Group Description, Upper Bound
  • Support Groups 1-9 for RQUANT and Group 1 for RQUAL/RQUANTASQUAL
  • Prevent duplicate reportings for same mix/target/specimen/group combination
  • Use configured cut-offs in reporting rule evaluation
  • Log all changes to audit trail

Trace: Source: 3.0.0-Quantitative/Qualitative Reporting Cut-offs (Rows 1-11), 3.0.0-Quantitative Reportings Edit widget - Set dropdown for select the group, 3.0.0-Quantitative Reportings Page - Consider sample type | Jira: BT-1465, BT-4224 | Tests: [See BT-2277-2294, BT-4282, BT-4290](#test-req-kitcfg-016)


FR-KITCFG-017 Manage Test Codes

The system shall allow authorized users to configure mappings between test codes on sample labels and specimen types.

Acceptance Criteria:

Display:

  • Display test code mappings with: Test Code, Mix, Specimen Type

Management:

  • Allow adding new test codes with unique code values
  • Prevent duplicate test codes
  • Allow selecting existing specimen types or entering new ones

Import/Export:

  • Support import of test code mappings via Excel
  • Import columns: TEST CODE, MIX, SPECIMEN TYPE
  • Validate TEST CODE as required non-empty string
  • Validate MIX as required string matching existing mix name
  • Validate SPECIMEN TYPE as required string matching existing specimen name (case-insensitive)
  • Invalid row (empty test code, non-existent mix, or non-existent specimen type): Reject row with status "Ignored"
  • Export all configured test code mappings with columns: TEST CODE, MIX, SPECIMEN TYPE

Trace: Source: 3.0.0-Test Codes (Rows 1-8) | Jira: BT-1867 | Tests: [See BT-2130, BT-2131, BT-2252-2258](#test-req-kitcfg-017)


Quantification Configuration (REQ-KITCFG-018, REQ-KITCFG-019)

FR-KITCFG-018 Manage QIR Quantification Settings

The system shall allow authorized users to configure slope and intercept parameters used for quantification calculations.

Acceptance Criteria:

  • Display QIR settings with: Targets, Slope, Intercept, MinSlope, MaxSlope, MinEfficiency, MaxEfficiency, MinR2, MinControls
  • Require both Slope and Intercept to be filled or both empty
  • Validate Slope and Intercept as non-nullable decimal values on import
  • Allow moving targets between QIR setting rows

Trace: Source: 3.0.0-QIR - Quantification Settings (Rows 1-8), Requirements for QUANTIFICATION added by Robert 6-Oct-22, 3.0.0-Calculated Quantification Settings - UI Validation | Jira: BT-1866, BT-3174, BT-4002 | Tests: [See BT-1207](#test-req-kitcfg-018)


FR-KITCFG-019 Manage Delta CT Configurations

The system shall allow authorized users to configure target pairs and CT difference thresholds used by the Delta CT rule.

Acceptance Criteria:

Display:

  • Display Delta CT configurations with: Target pair ("Target A vs Target B" format), Value

Configuration:

  • Allow adding target pairs with positive non-zero Delta CT values
  • Prevent duplicate target pair configurations
  • Use configured values in Delta CT rule to trigger BAD_CT_DELTA errors

Import/Export:

  • Support import of Delta CT configurations via Excel
  • Import columns: FIRST MIX, FIRST TARGET, SECOND MIX, SECOND TARGET, DELTA CT
  • Validate FIRST MIX as required string; must match existing mix name
  • Validate FIRST TARGET as required string; must match existing target name within FIRST MIX
  • Validate SECOND MIX as required string; must match existing mix name
  • Validate SECOND TARGET as required string; must match existing target name within SECOND MIX
  • Validate DELTA CT as required positive integer (must be > 0)
  • Validate first and second targets are different (cannot pair a target with itself)
  • Duplicate target pair on import: Update existing record if DELTA CT value differs; skip if identical
  • Invalid row (missing required field, non-existent mix/target, invalid DELTA CT): Reject row with status "Ignored"
  • Export all configured Delta CT combinations with columns: FIRST MIX, FIRST TARGET, SECOND MIX, SECOND TARGET, DELTA CT

Trace: Source: 3.0.0-Delta CT Configurations (Rows 1-18) | Jira: BT-3297 | Tests: [See BT-1208](#test-req-kitcfg-019)


Calibration Management (REQ-KITCFG-020, REQ-KITCFG-021, REQ-KITCFG-022, REQ-KITCFG-023)

FR-KITCFG-020 Perform Assay Calibration Analysis

The system shall allow authorized users to perform calibration analysis on selected runs to establish classification boundaries for PCR assays.

Acceptance Criteria:

  • Allow selection of one mix and one target for calibration
  • Allow selection of runs to include in calibration analysis
  • Send selected data to PCR API and store returned observation parameters
  • Display progress during analysis with cancel option
  • Support concurrent calibration for different targets
  • Optionally use machine classification instead of manual classification

Error Handling:

  • No runs selected: Disable Run Analysis button
  • Analysis cancelled: Stop processing and return no results
  • API error: Display error status in calibration tracking

Trace: Source: 3.0.0-Calibration Process - Phase 1, 3.0.0-Calibration Process - Phase 3 Part 1, 3.0.0-Assay Calibration - Use Machine Classification | Jira: BT-2456, BT-2457, BT-4514, BT-4519 | Tests: [See BT-2696](#test-req-kitcfg-020)


FR-KITCFG-021 Manage Calibration Boundaries

The system shall allow authorized users to view calibration results as scatter graphs and set classification boundaries for positive, ambiguous, and negative regions.

Acceptance Criteria:

  • Display calibration results as scatter graph with configurable X/Y axes
  • Display two adjustable boundary lines dividing the plot into three classification regions
  • Preview curves near boundary positions during drag operation
  • Prevent lower boundary from being positioned right of upper boundary
  • Save boundary settings for use in routine analysis
  • Allow saving calibrations with user-provided names/tags
  • Log boundary setting changes to audit trail

Trace: Source: 3.0.0-Calibration Process - Phase 1 (Rows 16-22), 3.0.0-Calibration Process - Phase 2, 3.0.0-Calibration Process - Phase 3 Part 1, 3.0.0-Calibration Page Improvements | Jira: BT-2458, BT-4279 | Tests: [Pending]


FR-KITCFG-022 Manage Calibration Versions

The system shall allow authorized users to save, view, compare, and select between multiple calibration versions for each mix/target combination.

Acceptance Criteria:

  • Allow saving multiple calibrations with descriptive names
  • Allow viewing scatter graphs for any saved calibration
  • Allow selecting a calibration to use for routine analysis
  • Allow comparing two calibrations side by side
  • Display calibration status (in progress, completed, cancelled, error)
  • Allow excluding specific wells and re-running calibration

Trace: Source: 3.0.0-Calibration Process - Phase 3 Part 1, 3.0.0-Calibration Process - Phase 3 Part 2, 3.0.0-Calibration Page Improvements | Jira: [See calibration Jiras] | Tests: [Pending]


FR-KITCFG-023 Display Calibration in Run Reports

The system shall provide a calibration scatter widget in run reports allowing comparison of current run observations against calibration data.

Acceptance Criteria:

  • Display calibration observations in background with current run observations in foreground
  • Allow selecting a calibration for comparison by saved tag name
  • Indicate whether rollover points are from calibration or current run

Trace: Source: 3.0.0-Calibration Process - Phase 3 Part 1 (Row 7), 3.0.0-Calibration Page Improvements (Rows 17-21) | Jira: [See calibration Jiras] | Tests: [Pending]


Rule Configuration (REQ-KITCFG-024, REQ-KITCFG-025)

FR-KITCFG-024 Manage Rule Mappings

The system shall allow authorized users to configure which analysis rules apply to specific observation types based on role, mix, target, and specimen type.

Acceptance Criteria:

  • Display rule mappings with: Run order, Rule, Type, Role, Mix, Target, Specimen type (if enabled)
  • Support multi-select for role, mix, target, and specimen type assignments
  • Include "All" and "All non-IC" options for target selection
  • Support hiding unused rules (rules with no assignments)
  • Exclude passive (reference) targets from target selection

Rule Definition Columns (Import/Export):

  • Validate PROGRAMMATIC RULE NAME as required string; serves as unique identifier per site; maps to analyzer rule class (e.g., "WG22S" maps to App\Analyzer\Rules\Wg22sRule); used as lookup key with site_id
  • Validate RULE DESCRIPTION as required text; human-readable description of the rule's purpose and behavior

Rule Mapping Columns (Import/Export):

  • Import/Export shall support columns: RUN ORDER, RULE, TYPE, RULE DESCRIPTION, RULE ID, SPECIMEN NAME, ROLE, MIX, TARGET, DYE
  • RULE DESCRIPTION is read-only on export (sourced from parent Rule record); not validated on Rules Mapping import
  • Validate RULE ID as required string; must match an existing rule's programmatic_rule_name; used to link the mapping to a rule
  • Validate DYE as required string when TARGET is not "global"; used together with MIX to identify the target for the rule mapping
  • Invalid RULE ID (empty): Reject row with status "Ignored" and reason "Rule id is not filled"
  • Invalid RULE ID (no match): Reject row with status "Ignored" and reason "No matching rule"
  • Invalid MIX/DYE combination (only one provided): Reject row with status "Ignored" and reason "Invalid mix and dye combination"
  • Invalid MIX/DYE combination (no matching target): Reject row with status "Ignored" and reason "No matching target"
  • Passive target when map_passive_observation_roles is disabled: Reject row with status "Ignored" and reason "Matching target is passive"

Trace: Source: 3.0.0-Rules - Mapping rules to observations (Rows 1-9), 3.0.0-Rules - Ability to multiselect specimens, CONFIG_COVERAGE_FIXES.md Phase C5, CONFIG_COVERAGE_FIXES.md Phase C6 | Code: app/Rule.php, app/Imports/Actions/ImportRulesAction.php, app/Exports/RuleExport.php, app/Exports/RulesMappingExport.php, RuleIdValidator.php, RuleMappingImportRowValidator.php, TargetValidator.php | Jira: BT-997, BT-384, BT-998 | Tests: [See BT-1874-1887](#test-req-kitcfg-024)


FR-KITCFG-025 Manage Rule Settings

The system shall allow authorized users to configure rule execution settings including error well handling and precedence order.

Acceptance Criteria:

  • Allow configuring "Is Allow Error Wells" to control rule execution against wells with errors
  • Allow changing rule precedence order within type categories
  • Automatically reorder affected rules when precedence changes
  • Apply precedence changes immediately for subsequent rule executions

Trace: Source: 3.0.0-Kit Configurations / Rules - Allow Error Wells, 3.0.0-Config - Rules - Normalize Precedence Order, CONFIG_COVERAGE_FIXES.md Phase C5/C6 | Code: app/Rule.php, app/Imports/Actions/ImportRulesAction.php | Jira: BT-3519, BT-4035, BT-4000 | Tests: [See BT-3559, BT-4054](#test-req-kitcfg-025)


Target Configuration (REQ-KITCFG-026)

FR-KITCFG-026 Manage Prepend Cycles

The system shall allow authorized users to configure prepend cycle counts for targets, which adds synthetic cycles to analyzer input.

Acceptance Criteria:

  • Display prepend cycles count for each target
  • Allow inline editing of prepend cycles
  • Validate prepend cycles as non-negative integer
  • Reject non-integer and non-numeric values

Trace: Source: 3.0.0-Manage Prepend cycles counts for Targets (Rows 1-3) | Jira: BT-4829 | Tests: [Pending]


Multi-Site Configuration (REQ-KITCFG-027)

FR-KITCFG-027 Support Multi-Site Configuration

The system shall allow Super Admin users to configure separate kit configurations for different sites within a multi-site client.

Acceptance Criteria:

  • Allow Super Admin users to select site for configuration
  • Apply all Kit Configuration screens to site-specific configuration
  • Hide site selection from non-Super Admin users
  • Use respective site configuration when processing runs

Trace: Source: 3.0.0-Kit Configuration - Multiple sites (Rows 1-2) | Jira: BT-2419, BT-3046, BT-3035 | Tests: [Pending]


Help Configuration (REQ-KITCFG-028)

FR-KITCFG-028 Manage Help Items

The system shall allow authorized users to view, create, modify, and import/export help items that provide context-sensitive assistance to users.

Acceptance Criteria:

Display:

  • Display help items with columns: Order, Title, Description, Tags, Video, Pages Available

Management:

  • Allow creating new help items with required fields: order, title, description, pages available
  • Allow editing help item properties
  • Allow associating help items with specific pages via Pages Available selection
  • Allow associating help items with optional video content

Import/Export:

  • Support import and export of help items configuration via Excel
  • Import columns: ORDER, TITLE, DESCRIPTION, TAGS, VIDEO, PAGES AVAILABLE
  • Validate ORDER as required integer; must be unique within import; rows are sorted by order before processing
  • Validate TITLE as required string (max 255 characters); used to match existing help items for update
  • Validate DESCRIPTION as required string
  • Validate TAGS as optional comma-separated string; empty/null results in empty tags array
  • Validate VIDEO as optional string; when provided, must match an existing HelpVideo filename (without extension)
  • Validate PAGES AVAILABLE as required comma-separated list of page names; all page names must exist in the system's page list
  • Invalid rows (missing required fields, invalid video reference, or invalid page names) are ignored with status "Help item: ignored"
  • Export all configured help items with columns: ORDER, TITLE, DESCRIPTION, TAGS, VIDEO, PAGES AVAILABLE

Tags Display:

  • Display tags as comma-separated list
  • Display "No tags available for this help item" when no tags assigned

Notes:

  • Available pages include: Run Files, User Management, Audits, Kit Configurations, Assay Calibrations, Mixes and targets, Extraction Models and Instruments, Thermocycler Models and Instruments, Control Labels, Rules, Error Codes, Curve Control Limits, Westgard Settings, Cross Contamination Limits, Quantitative Qualitative Reporting Cut Offs, Error Resolution, Test Codes, QIR Quantification Settings, Lims Export, Help Items, LJ Report, Trends Report, Outcomes Report, Client Configurations, Upload Runs, Combined Outcomes, Runfile Report, Known Quantities, Kits, Tags

Trace: Source: 3.0.0-Help Items Page - Include Tags in Table (Row 1), CONFIG_COVERAGE_FIXES.md Phase C1 | Code: app/Imports/Sheets/HelpItemsImportSheet.php, app/HelpItemSaveRequest.php, app/HelpItem.php, app/Exports/HelpItemsExport.php | Jira: BT-3974 | Tests: [Pending]


Dye Configuration (REQ-KITCFG-029)

FR-KITCFG-029 Manage Dye Configuration

The system shall allow authorized users to view and manage dye configurations used in PCR analysis. Dyes define the fluorescent reporters and quenchers associated with targets within mixes, enabling proper signal detection and identification during runfile processing.

The system ships with default dye definitions documented in the SDS. User modifications via configuration import override these defaults for the client's site.

Acceptance Criteria:

Display:

  • Display all configured dyes with columns: Dye Name, Quencher, Colour

Import:

  • Support import of dye configuration via Excel
  • Import columns: DYE NAME, QUENCHER, COLOUR
  • Validate DYE NAME as required string
  • Validate QUENCHER as optional string
  • Validate COLOUR as optional string
  • Invalid DYE NAME (empty): Reject row with status "Ignored"

Export:

  • Export all configured dyes with columns: DYE NAME, QUENCHER, COLOUR

Notes:

  • System defaults are documented in SDS; user modifications override defaults
  • Dyes are referenced by mix/target configuration (REQ-KITCFG-001)

Trace: Source: CONFIG_COVERAGE_FIXES.md Phase A1 | Tests: [Pending]


Westgard Event Management (REQ-KITCFG-030)

FR-KITCFG-030 Manage Westgard Event Codes

The system shall allow authorized users to view and manage Westgard event codes used by Westgard quality control rules.

Statement

Westgard event codes define the error messages generated when Westgard statistical rules detect out-of-control conditions. Each event code consists of a unique identifier and a descriptive message that appears in quality control reports and alerts. The system ships with default event codes that can be modified by users through configuration import.

Flowchart (Illustrative)

This diagram illustrates the high-level behavior. It does not specify UI layout, styling, or interaction details.

Acceptance Criteria:

Display:

  • Display Westgard event codes with columns: CODE, MESSAGE

Import:

  • Support import of Westgard event codes via Excel
  • Import columns: CODE, MESSAGE
  • Validate CODE as required unique string
  • Validate MESSAGE as required string
  • Invalid CODE or MESSAGE value: Reject row with status "Ignored"

Export:

  • Export all configured Westgard event codes with columns: CODE, MESSAGE

Notes:

  • System defaults are documented in SDS; user modifications override defaults
  • Westgard event codes are used by Westgard settings (REQ-KITCFG-012) for quality control rule evaluation

Trace: Source: CONFIG_COVERAGE_FIXES.md Phase A2 (Westgard Events sheet: 10 rows, columns CODE, MESSAGE) | Tests: [Pending]


Specimen Type Configuration (REQ-KITCFG-031)

FR-KITCFG-031 Manage Specimen Types

The system shall allow authorized users to view, add, and manage specimen type definitions that categorize sample types processed by the system.

Statement

Specimen types provide a classification layer for samples, enabling configuration of test codes, reporting cut-offs, and combined outcomes based on sample categories. Labs can define specimen types specific to their workflows (e.g., "Nasopharyngeal Swab", "Plasma", "Serum"). The specimen type assigned to a sample affects which reporting rules and combined outcome configurations apply during analysis.

Flowchart (Illustrative)

This diagram illustrates the high-level behavior. It does not specify UI layout, styling, or interaction details.

Acceptance Criteria:

Display:

  • Display all configured specimen types in a list view
  • Sort specimen types alphabetically by name

Management:

  • Allow adding new specimen types with unique names
  • Prevent duplicate specimen type names (case-insensitive)

Import:

  • Support import of specimen types via Excel configuration file
  • Import column: SPECIMEN NAME (required, unique string)
  • Validate SPECIMEN NAME as required unique string
  • Reject import rows with empty or duplicate SPECIMEN NAME values with status "Ignored"

Export:

  • Export all configured specimen types to Excel with column: SPECIMEN NAME

Notes:

  • Specimen types are referenced by Test Codes (REQ-KITCFG-017) for mapping sample labels to specimen classifications
  • Specimen types are referenced by Reporting Cut-offs (REQ-KITCFG-016) for specimen-specific quantitative groupings
  • Specimen types are referenced by Combined Outcomes (REQ-KITCFG-011) for specimen-aware outcome rules

Trace: Source: CONFIG_COVERAGE_FIXES.md Phase A3 (Specimens sheet: 43 rows, column SPECIMEN NAME) | Tests: [Pending]


Mix Clone (REQ-KITCFG-032)

Version

REQ-KITCFG-032 was added in v3.0.1.

FR-KITCFG-032 Clone Mix Configuration from Enabled Mix to Unknown Mix

The system shall allow authorized users to clone the complete configuration of an enabled mix to an unmapped (unknown/disabled) mix, duplicating all target attributes, rule mappings, QC settings, and reporting configuration via dye-based target matching.

Acceptance Criteria:

UI Workflow:

  • The system shall provide a form accessible from the "Add Mixes" widget to select an unknown mix as the clone destination and an enabled mix as the clone source
  • The form shall include: unknown mix selector, enabled mix selector, mix name field, Westgard clone toggle, combined outcomes clone toggle, and per-role control label inputs
  • Upon confirmation and save, the unknown mix shall be enabled with the cloned configuration

Target Matching:

  • All target-level cloning shall use dye_id as the matching key between source and destination mixes
  • If a target in the unknown mix has no matching dye_id in the source mix, its attributes shall remain unchanged
  • If a target in the source mix has no matching dye_id in the unknown mix, its data shall not be cloned

Cloned Configuration:

  • Cloned data shall include: target attributes (type, is_passive, expected_threshold, order, preferred_result_provider, fluorescence settings, discrepancy settings, inhibition settings), control labels, specimen mappings, rule mappings, known quantities, calculated quantification settings, reporting entries, and delta CT combinations
  • When Westgard clone is enabled, Westgard limits, control range settings, and cross contamination limits shall also be cloned
  • All cloned records shall receive new UUIDs; timestamps shall be refreshed

Combined Outcomes Clone (toggle-controlled):

  • The clone form shall include a "Clone Combined Outcomes" toggle that the user can enable or disable
  • When the toggle is enabled, the system shall duplicate all combined outcome records referencing the source mix, including: OutcomeToLimsStatusMapping (with updated code/name suffix), OutcomeToLimsMappingMixResult (with updated mix_id), OutcomeToLimsMappingTargetResult (with updated target_id via dye matching), required history outcomes, and required repeat outcomes
  • Duplicated combined outcome target references shall be updated to the cloned mix's targets (matched by dye_id)
  • All cloned combined outcome records shall reference the new mix and its targets, not the original mix
  • Role-level associations (role_id) shall be preserved from the source
  • When the toggle is disabled, no combined outcome records shall be cloned; only base mix configuration is duplicated

Validation:

  • The source mix must be an enabled (ready) mix
  • The destination mix must be an unmapped (unknown/disabled) mix
  • Both mixes must share target dyes for match-ups to succeed

Trace: Source: mix-clone.md (Backend Flow, Acceptance Criteria Req #1, Req #2, Req #3) | Jira: TBD | Tests: tests/Feature/MixCloneTest.php, REQ-KITCFG-032 Tests


Configuration Options

OptionDefaultDescriptionAffects
unknown_mix_enabledtrueAllow creation of Unknown mix entries on importREQ-KITCFG-001
ct_discrepancy_delta2Default CT discrepancy threshold for new mixesREQ-KITCFG-001
default_result_providermachineDefault result provider for new mixesREQ-KITCFG-001
ic_ct_inhibition_delta3Default CT inhibition delta for IC targetsREQ-KITCFG-001
thermocycler_auto_populatefalseAuto-create thermocycler entries from runfilesREQ-KITCFG-004
thermocycler_instrument_fieldCommentJSON field mapping for thermocycler instrumentREQ-KITCFG-004
hide_ignored_errorstrueDefault visibility of ignored error codesREQ-KITCFG-005
use_role_priority_resolutionfalseEnable resolution priority column in control labelsREQ-KITCFG-007
archive_modefalseShow archived vs non-archived run tagsREQ-KITCFG-008
use_sample_typefalseEnable specimen type in rule mappings and reportingREQ-KITCFG-024, REQ-KITCFG-016, REQ-KITCFG-017
hide_unused_rulestrueDefault visibility of unassigned rulesREQ-KITCFG-024
hide_disabled_westgardtrueDefault visibility of disabled Westgard settingsREQ-KITCFG-012

Assumptions

The following assumptions were verified against the codebase implementation:

  • Users accessing Kit Configuration require MANAGER or SUPER_ADMIN role (verified: routes/api.php middleware user-type:MANAGER,SUPER_ADMIN protects configuration endpoints)
  • At least one mix must be configured before runfile import is attempted (application behavior, not enforced by code constraint)
  • Configuration changes take effect immediately for subsequent analysis operations (verified: UpdateMixListAction persists changes synchronously)
  • Multi-site clients can have independent configurations per site (verified: site-scoped queries throughout controllers)
  • Audit logging is enabled for all configuration changes (verified: MixCreated, MixEnabled, MixDisabled, TargetCreated, RuleCreated and other events implement AuditableEvent interface, captured by LogIntoDatabase listener)

UI Notes (Illustrative)

FR-KITCFG-001 UI Specifications

Table Layout:

  • Mix, Extraction Instrument, and Enabled columns display merged rows for visual grouping
  • Table has no pagination (all mixes displayed in single view)
  • Null values display as "-" in numeric columns
  • N/A displayed for non-applicable IC CT Inhibition Delta

Edit Widget:

  • Previous/Next buttons for navigating between mixes
  • Previous button disabled on first mix, Next button disabled on last mix
  • Add button opens bulk-add view showing all disabled mixes
  • Unsaved changes prompt on close: "You have unsaved changes. Are you sure you want to close?"

FR-KITCFG-010 UI Specifications

Assay Configuration Layout:

  • Mix and Target filter dropdowns at top
  • Global and Reset Filters buttons
  • Widget selection buttons (blue background when active)
  • Data table for selected widget
  • Action buttons: Add/Edit, Print, Export
  • Targets displayed with Mix prefix for identification (e.g., "HDV-IC")

FR-KITCFG-011 UI Specifications

Combined Outcomes Table:

  • Hierarchical expand/collapse structure
  • Outcome level collapsed by default
  • Combined Outcome rows show outcome-level configurations only
  • Expand to see mix/target level details

FR-KITCFG-020, FR-KITCFG-021 UI Specifications

Calibration Scatter Graph:

  • X-axis options: DF (default), DxAi RFU, Cq (DxAi CT), Machine RFU, Machine CT
  • Y-axis options: same as X-axis, default DxAi RFU or Machine CT based on method
  • Discrepant positive: red, Discrepant negative: green, Ambiguous: default color
  • Rollover shows actual curve in modal
  • Loading spinner during data load

Boundary Lines:

  • Background colors: Green (positive), Red (ambiguous), Black (negative)
  • Boundary lines get thicker when selected
  • Tooltip until moved: "please set both boundary lines to their correct positions"
  • Popup showing 10 curves on each side during drag

Generic Configuration Page UI

Row Selection:

  • Selected row background changes to green
  • Only one row highlighted at a time

Widget Patterns:

  • X button to close widget
  • Warning dialog on close with unsaved changes: "Continue editing" and "Discard changes" options
  • Save/Close buttons at bottom
  • Dropdown fields for entity selection with dependent filtering

Implementation (Illustrative)

The KITCFG requirements describe configuration management, implemented through the following backend components:

ComponentTypePathRequirements
KitsControllerControllerapp/Http/Controllers/Kits/KitsController.phpREQ-KITCFG-010, REQ-KITCFG-011
MixesControllerControllerapp/Http/Controllers/MixesController.phpREQ-KITCFG-001, REQ-KITCFG-002
TargetsControllerControllerapp/Http/Controllers/TargetsController.phpREQ-KITCFG-001, REQ-KITCFG-026
ControlLabelsControllerControllerapp/Http/Controllers/ControlLabelsController.phpREQ-KITCFG-007
RolesControllerControllerapp/Http/Controllers/RolesController.phpREQ-KITCFG-007, REQ-KITCFG-011
WestgardSettingsControllerControllerapp/Http/Controllers/WestgardSettingsController.phpREQ-KITCFG-012
WestgardLimitsControllerControllerapp/Http/Controllers/WestgardLimitsController.phpREQ-KITCFG-012
KitConfigurationsExportControllerControllerapp/Http/Controllers/KitConfigurationsExportController.phpREQ-KITCFG-002, REQ-KITCFG-003, REQ-KITCFG-004, REQ-KITCFG-007, REQ-KITCFG-011, REQ-KITCFG-012
CustomerFriendlyKitConfigurationsExportControllerControllerapp/Http/Controllers/CustomerFriendlyKitConfigurationsExportController.phpREQ-KITCFG-002, REQ-KITCFG-010
OutcomeToLimsStatusMappingsControllerControllerapp/Http/Controllers/OutcomeToLimsStatusMappingsController.phpREQ-KITCFG-011
DeltaCtTargetCombinationControllerControllerapp/Http/Controllers/DeltaCtTargetCombinationController.phpREQ-KITCFG-019
TagControllerControllerapp/Http/Controllers/TagController.phpREQ-KITCFG-008
LimsStatusesControllerControllerapp/Http/Controllers/LimsStatusesController.phpREQ-KITCFG-009
ExtractionModelsControllerControllerapp/Http/Controllers/ExtractionModelsController.phpREQ-KITCFG-003
ExtractionInstrumentsControllerControllerapp/Http/Controllers/ExtractionInstrumentsController.phpREQ-KITCFG-003
ThermocyclersControllerControllerapp/Http/Controllers/ThermocyclersController.phpREQ-KITCFG-004
KnownQuantitiesControllerControllerapp/Http/Controllers/KnownQuantitiesController.phpREQ-KITCFG-015
AssayCalibrateableRunsControllerControllerapp/Http/Controllers/AssayCalibrations/AssayCalibrateableRunsController.phpREQ-KITCFG-020, REQ-KITCFG-021, REQ-KITCFG-022
ControlLabelsExportActionActionapp/Actions/ControlLabelsExportAction.phpREQ-KITCFG-007
MapRoleAliasToNewRoleActionActionapp/Actions/ControlLabels/MapRoleAliasToNewRoleAction.phpREQ-KITCFG-007
GlobalMixMapperActionapp/Actions/GlobalMappers/GlobalMixMapper.phpREQ-KITCFG-001, REQ-KITCFG-007, REQ-KITCFG-012, REQ-KITCFG-013, REQ-KITCFG-014
ControlLabelMapperActionapp/Actions/GlobalMappers/Mappers/ControlLabelMapper.phpREQ-KITCFG-007
WestgardLimitsMapperActionapp/Actions/GlobalMappers/Mappers/WestgardLimitsMapper.phpREQ-KITCFG-012
RuleMapperActionapp/Actions/GlobalMappers/Mappers/RuleMapper.phpREQ-KITCFG-024, REQ-KITCFG-025
MixAndTargetsImportSheetImportapp/Imports/Sheets/MixAndTargetsImportSheet.phpREQ-KITCFG-001, REQ-KITCFG-002
ControlLabelsImportSheetImportapp/Imports/Sheets/ControlLabelsImportSheet.phpREQ-KITCFG-007
WestgardLimitsImportSheetImportapp/Imports/Sheets/WestgardLimitsImportSheet.phpREQ-KITCFG-012
CombinedOutcomesImportSheetImportapp/Imports/Sheets/CombinedOutcomesImportSheet.phpREQ-KITCFG-011
ErrorCodesImportSheetImportapp/Imports/Sheets/ErrorCodesImportSheet.phpREQ-KITCFG-005
ErrorResolutionsImportSheetImportapp/Imports/Sheets/ErrorResolutionsImportSheet.phpREQ-KITCFG-006
CurveControlLimitsImportSheetImportapp/Imports/Sheets/CurveControlLimitsImportSheet.phpREQ-KITCFG-014
AdjacentsImportSheetImportapp/Imports/Sheets/AdjacentsImportSheet.phpREQ-KITCFG-013
RulesMappingImportSheetImportapp/Imports/Sheets/RulesMappingImportSheet.phpREQ-KITCFG-024, REQ-KITCFG-025
MixCloneControllerControllerapp/Http/Controllers/MixCloneController.phpREQ-KITCFG-032

Implementation (Frontend)

Component TypeLocation
Viewviews/KitConfigurations.vue
Viewviews/AssayConfigurations.vue
Viewviews/ThermocyclerModelsAndInstruments.vue
Viewviews/ExtractionModelsAndInstruments.vue
Viewviews/DeltaCtTargetCombination.vue
Viewviews/KnownQuantities.vue
Viewviews/ErrorCodes.vue
Componentscomponents/assay-configurations/
Componentscomponents/mixes-and-targets/
Componentscomponents/kits/
Componentscomponents/calibrations/
Componentscomponents/control-labels/
Componentscomponents/curve-control-limits/
Componentscomponents/cross-contamination/
Componentscomponents/combined-outcomes/
Componentscomponents/delta-ct/
Componentscomponents/error-codes/
Componentscomponents/error-resolutions/
Componentscomponents/extraction-instruments/
Componentscomponents/known-quantities/
Componentscomponents/lims-statuses/
Componentscomponents/quantitative-reportings/
Componentscomponents/thermocyclers/
Componentscomponents/westgard-limits/
Viewviews/CloneMix.vue
Componentscomponents/mixes-and-targets/MixCloneWidget.vue
Componentscomponents/mixes-and-targets/CloneMixControlLabel.vue

Traceability Matrix

RequirementTitleVerificationImplementationTest CasesStatus
REQ-KITCFG-001Manage Mix and Target ConfigurationTestMixesController, TargetsControllerBT-1927, BT-1929, BT-1931, BT-1932, BT-1935, BT-1139Draft
REQ-KITCFG-002Import and Export Mix ConfigurationTestMixAndTargetsImportSheet, KitConfigurationsExportControllerBT-1934Draft
REQ-KITCFG-003Manage Extraction InstrumentsTestExtractionModelsController, ExtractionInstrumentsController[Pending]Draft
REQ-KITCFG-004Manage Thermocycler InstrumentsTestThermocyclersController[Pending]Draft
REQ-KITCFG-005Manage Error CodesTestErrorCodesImportSheetBT-1896-1909, BT-3835Draft
REQ-KITCFG-006Manage Error ResolutionsTestErrorResolutionsImportSheetBT-2212, BT-2221-2231, BT-3862, BT-2239, BT-2241, BT-4686, BT-5270Draft
REQ-KITCFG-007Manage Control LabelsTestControlLabelsController, ControlLabelsImportSheetBT-1915, BT-3913Draft
REQ-KITCFG-008Manage Run TagsTestTagController[Pending]Draft
REQ-KITCFG-009Manage LIMS Export MappingsTestLimsStatusesControllerBT-2092-2094, BT-2109-2122, BT-4042Draft
REQ-KITCFG-010Provide Unified Assay Configuration InterfaceTestKitsController[Pending]Draft
REQ-KITCFG-011Manage Combined Outcome RulesTestOutcomeToLimsStatusMappingsController, CombinedOutcomesImportSheetBT-405, BT-4644, BT-3656, BT-4340, BT-3885, BT-2635, BT-4399, BT-3543, BT-5230, BT-4239Draft
REQ-KITCFG-012Manage Westgard SettingsTestWestgardSettingsController, WestgardLimitsControllerBT-2371-2378, BT-2721Draft
REQ-KITCFG-013Manage Cross Contamination LimitsTestAdjacentsImportSheetBT-1964-2001, BT-1533-1536Draft
REQ-KITCFG-014Manage Curve Control LimitsTestCurveControlLimitsImportSheetBT-1997-2014, BT-2119, BT-2570Draft
REQ-KITCFG-015Manage Known QuantitiesTestKnownQuantitiesControllerBT-1207Draft
REQ-KITCFG-016Manage Reporting Cut-offsTest[TBD]BT-2277, BT-2282-2294, BT-4282, BT-4290Draft
REQ-KITCFG-017Manage Test CodesTest[TBD]BT-2130, BT-2131, BT-2252-2258Draft
REQ-KITCFG-018Manage QIR Quantification SettingsTest[TBD]BT-1207Draft
REQ-KITCFG-019Manage Delta CT ConfigurationsTestDeltaCtTargetCombinationControllerBT-1208Draft
REQ-KITCFG-020Perform Assay Calibration AnalysisTestAssayCalibrateableRunsControllerBT-2696Draft
REQ-KITCFG-021Manage Calibration BoundariesTestAssayCalibrateableRunsController[Pending]Draft
REQ-KITCFG-022Manage Calibration VersionsTestAssayCalibrateableRunsController[Pending]Draft
REQ-KITCFG-023Display Calibration in Run ReportsTest[TBD][Pending]Draft
REQ-KITCFG-024Manage Rule MappingsTestRulesMappingImportSheet, RuleMapperBT-1874-1887Draft
REQ-KITCFG-025Manage Rule SettingsTestRuleMapperBT-3559, BT-4054Draft
REQ-KITCFG-026Manage Prepend CyclesTestTargetsController[Pending]Draft
REQ-KITCFG-027Support Multi-Site ConfigurationTest[TBD][Pending]Draft
REQ-KITCFG-028Manage Help Item TagsTest[TBD][Pending]Draft
REQ-KITCFG-029Manage Dye ConfigurationTest[TBD][Pending]Draft
REQ-KITCFG-030Manage Westgard Event CodesTest[TBD][Pending]Draft
REQ-KITCFG-031Manage Specimen TypesTest[TBD][Pending]Draft
REQ-KITCFG-032Clone Mix ConfigurationTestMixCloneController, MixCloneTest[Pending]Draft (v3.0.1)

Notes

  • Extraction and Thermocycler instruments cannot be deleted to preserve historical data integrity
  • Disabled mixes retain their configuration settings for potential re-enablement
  • Error codes can be ignored but not deleted to preserve system integrity
  • Multi-run combined outcome feature has technical limitations with discrepancy checks on other runs' wells
  • Legacy calibration phases (3/4/5/6) have been superseded by current implementation

Open Questions

IDQuestionSourceOwnerDate Raised
OQ-001No open questions at this time---

Acceptance Tests

Test: REQ-KITCFG-001

Back to requirement

Test: Verify table display and sorting

Given: User logged in as Super Admin
And: Mixes configured: Mix A (enabled), Mix B (disabled), Mix C (enabled)
When: Navigate to Kit Configuration > Mixes and Targets
Then: Table displays all configured mixes with their targets
And: Order is: Mix A, Mix C, Mix B (enabled alphabetical, then disabled alphabetical)
And: Targets within each mix are sorted alphabetically with IC penultimate and passive last

Test: Configure mix properties

Given: Mix A exists with default configuration
When: Open edit form for Mix A
And: Modify Mix name to "Mix A Updated"
And: Select Target B as Internal Control
Then: CT Inhibition Delta field appears with default value 3
When: Save changes
Then: Table shows "Mix A Updated" with IC CT Inhibition Delta = 3 for Target B

Test: Unknown mix auto-creation

Given: No mixes configured with targets {TargetA, TargetB, ROX}
When: Import runfile with wells containing {TargetA, TargetB, ROX}
Then: New row appears with Mix Name = "Unknown", Enabled = Disabled
And: Passive = ROX, Extraction Instrument = Unknown

Test: Disabled mix behavior

Given: Mix A is disabled
When: Check any dropdown containing mixes in the application
Then: Mix A does not appear
When: Import runfile with wells matching Mix A targets
Then: System generates "Unknown mix" error

Test: REQ-KITCFG-002

Back to requirement

Test: Import with Target Display Order

Given: Import file with Mix A: Target A (order 2), Target B (order 1), Target C (order 3)
When: Import the configuration
Then: Targets display in order: Target B, Target A, Target C

Test: Partial Target Display Order rejected

Given: Import file with Mix A: Target A (order empty), Target B (order 1)
When: Import the configuration
Then: Mix A is not imported
And: Result sheet shows both targets as Ignored

Test: REQ-KITCFG-005

Back to requirement

Test: Error codes display and management

Given: User navigates to Error Codes page
Then: Error codes table displays with columns: code, message, type, affects, LIMS export, control error, Westgard error, prevents analysis, ignored, causes missing mixes, inhibited
When: User adds new error code with required fields
Then: New error code appears in table
When: User marks error code as ignored
Then: Error code is hidden from runfile reports

Test: REQ-KITCFG-006

Back to requirement

Test: Configure resolution options

Given: User navigates to Error Resolutions page
When: User adds resolution for error message
And: Configures affected wells, outcome, and resolution level
Then: Resolution appears grouped under error message
When: Resolution is applied during analysis
Then: Specified outcome is assigned and rules are skipped as configured

Test: REQ-KITCFG-007

Back to requirement

Test: Control label mapping

Given: User navigates to Control Labels page
When: User adds label mapping with wildcard pattern
Then: Imported samples matching pattern are classified according to mapping

Test: REQ-KITCFG-009

Back to requirement

Test: LIMS mapping configuration

Given: User navigates to LIMS Export page
When: User adds LIMS code with dynamic term {LOQ}
Then: Export uses configured term replacement

Test: REQ-KITCFG-011

Back to requirement

Test: Add combined outcome

Given: User on Combined Outcomes page
When: Click Add button
And: Select LIMS outcome from dropdown
And: Select a Mix
Then: Targets for that mix are displayed
When: Set Result = "Positive" for a target
Then: Min/Max Ct fields are enabled
When: Configure valid values and click Save
Then: The Combined Outcome is added to the table

Test: Hierarchical table display

Given: Combined Outcomes with multiple configurations under same outcome
When: View Combined Outcomes Table
Then: Outcome rows are visible as expandable rows (collapsed by default)
When: Expand an Outcome row
Then: Combined Outcomes under that Outcome become visible
When: Expand a Combined Outcome row
Then: Mix/Target level configuration details are visible

Test: REQ-KITCFG-012

Back to requirement

Test: View and edit Westgard settings

Given: User navigates to Westgard Settings
Then: Title "Westgard Settings" is displayed
And: Table shows columns: Mix, Target, Role, Range, Range Start Date, Extraction Models, Extraction Instrument, Mean, SD, Quant or Ct, Enabled
When: Select a range without control data
And: Edit Mean and SD values
And: Save changes
Then: Updated values are displayed in table

Test: REQ-KITCFG-013

Back to requirement

Test: Cross contamination limits validation

Given: User on Cross Contamination Limits page
When: User enters Potential Contaminated = 20, Potential Contaminating = 25
Then: Validation error: Potential Contaminated must be greater than Potential Contaminating
When: User corrects to Potential Contaminated = 25, Potential Contaminating = 20
Then: Limit is saved successfully

Test: REQ-KITCFG-014

Back to requirement

Test: Add curve control limits with validation

Given: User on Curve Control Limits page
When: Click Add Data button
And: Select Mix(es), Target(s), Sample Role(s)
And: Enter Lower Bound Ct = 20
And: Enter Upper Bound Ct = 15
Then: Error message: "Upper Bound Ct must be greater than Lower Bound Ct"
And: Save button is disabled
When: Change Upper Bound Ct to 30
Then: Save button is enabled
When: Click Save
Then: New rows appear in table

Test: BCC rule integration

Given: Curve control limits for Mix A/Target X/CC: Lower = 20, Upper = 30
When: Import runfile with curve control Ct = 15
Then: BCC rule triggers "curve control out of expected range" error
When: Import runfile with curve control Ct = 25
Then: No BCC error triggered

Test: REQ-KITCFG-015

Back to requirement

Test: Known quantities validation

Given: User on Known Quantities page
When: User enters Known Quantity = -5
Then: Validation error displayed
When: User enters Known Quantity = 100
Then: Value is accepted and saved

Test: REQ-KITCFG-016

Back to requirement

Test: Reporting cut-offs configuration

Given: User on Reporting Cut-offs page
When: User adds cut-off for Mix/Target/Specimen/Group
Then: Cut-off is saved
When: User attempts duplicate entry
Then: Validation error prevents save

Test: REQ-KITCFG-017

Back to requirement

Test: Test codes management

Given: User on Test Codes page
When: User adds test code with specimen type
Then: Test code mapping is created
When: Sample with matching test code is imported
Then: Specimen type is assigned from mapping

Test: REQ-KITCFG-018

Back to requirement

Test: QIR settings validation

Given: User on QIR Settings page
When: User enters Slope without Intercept
Then: Validation error: Both Slope and Intercept must be filled or both empty
When: User fills both values
Then: Settings are saved successfully

Test: REQ-KITCFG-019

Back to requirement

Test: Delta CT configuration

Given: User on Delta CT page
When: User adds target pair with Delta CT value
Then: Configuration is saved
When: Wells with CT difference exceeding threshold are analyzed
Then: BAD_CT_DELTA error is triggered

Test: REQ-KITCFG-020

Back to requirement

Test: Select runs and execute analysis

Given: User on Assay Calibration page
When: Select a mix from dropdown
Then: Target dropdown populates with targets for that mix
When: Select a target
And: Click "Select runs for Analysis"
Then: Modal shows all runs containing selected mix/target
When: Select runs and click "Run Analysis"
Then: Warning dialog appears about overwriting previous results
When: Click OK
Then: "Analysing" text displayed with Cancel button

Test: REQ-KITCFG-024

Back to requirement

Test: Create rule mapping

Given: User on Rule Mappings page
When: Click on a rule row
And: Open Edit widget
And: Select Roles, Mixes, Targets
And: Save
Then: Rule mapping is created
And: Table shows assigned values
When: Enable "Hide unused rules"
Then: Rules without assignments are hidden

Test: REQ-KITCFG-025

Back to requirement

Test: Rule precedence management

Given: User on Rules page with multiple rules
When: User changes precedence order for a rule
Then: Affected rules are automatically reordered
And: New order applies to subsequent analyses

Test: REQ-KITCFG-032

Back to requirement

Test: Clone base mix configuration

Given: An enabled mix "Source Mix" with targets, rule mappings, control labels, and reporting config
And: An unknown (disabled) mix "Dest Mix" sharing target dyes with "Source Mix"
When: User selects "Dest Mix" as destination, "Source Mix" as source
And: User sets mix name to "Cloned Mix"
And: Westgard clone toggle is disabled
And: Combined outcomes clone toggle is disabled
And: User confirms and saves
Then: "Cloned Mix" is enabled with target attributes, rule mappings, control labels, and reporting config matching "Source Mix"
And: All cloned records have new UUIDs
And: Westgard settings are NOT cloned
And: Combined outcome records are NOT cloned

Test: Clone with combined outcomes enabled

Given: An enabled mix "Source Mix" with combined outcome records
And: An unknown mix "Dest Mix" sharing target dyes with "Source Mix"
When: User clones "Source Mix" to "Dest Mix" with combined outcomes toggle ENABLED
Then: All combined outcome records from "Source Mix" are duplicated for "Dest Mix"
And: Duplicated target references use "Dest Mix" targets (matched by dye_id)
And: OutcomeToLimsStatusMapping records have updated code/name suffixes

Test: Target dye matching

Given: Source mix has targets with dye_ids {D1, D2, D3}
And: Destination unknown mix has targets with dye_ids {D1, D2, D4}
When: User clones source to destination
Then: Targets with D1 and D2 receive cloned attributes from source
And: Destination target with D4 remains unchanged (no matching source dye)
And: Source target with D3 data is not cloned (no matching destination dye)

Design DocumentRelevant Sections
SDD ConfigurationControl Labels Configurations, Combined Outcomes Excel schema, Westgard Limits Configurations, Cross Contamination Limits Configurations, Curve Control Limits Configurations, Delta CT Configurations, Error Codes Configurations, Error Resolutions Configurations, Help Items Configurations
SDD AlgorithmsRule Mapping Architecture, Running Rules Architecture

Appendix: Process Artifacts

Completion Checklist

  • Statement section present (1-2 paragraphs)
  • Mermaid diagram present and renders without errors
  • Diagram marked as (Illustrative)
  • No "non-normative" text anywhere
  • All original REQ-* IDs preserved (28 requirements)
  • All ACs preserved with blank lines before bullet lists
  • All Trace references preserved (Source, Jira, Tests)
  • Error handling documented
  • Config options have Affects column
  • Tests at end with back-links
  • UI Notes marked (Illustrative)
  • Implementation marked (Illustrative)
  • Appendix has Completion Checklist and Reviewer Notes

Reviewer Notes

Conversion from Old to New Format

This document was converted from the old SRS format to the new readability-focused format. The following changes were made:

  1. Statement section added - High-level summary of Kit Configuration domain
  2. Mermaid flowchart added - Illustrates configuration management flow and system integration
  3. Acceptance criteria reorganized - Grouped by concern with blank lines before bullet lists
  4. Tests moved to end - With back-links to requirements
  5. "Non-normative" replaced with "Illustrative" - Throughout the document

Consolidation Summary (from original conversion)

Original CountConverted CountReduction
107 requirements28 requirements74%

This consolidation (performed in original conversion) reduces requirement explosion while maintaining full traceability. All original acceptance criteria are preserved as ACs or UI Detail. No behavioral coverage is lost.

v3.0.1 Changes

REQ-KITCFG-032

Change: Added new requirement for mix clone configuration Reason: v3.0.1 introduced the ability to clone an enabled mix's complete configuration (targets, rules, QC, reporting, optionally combined outcomes) to an unknown/disabled mix via dye-based target matching Version: v3.0.1 Date: 2026-03-05

Reversibility: Source file preserved at output/srs/kitcfg.md