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
| Term | Definition |
|---|---|
| Mix | A configured combination of targets and dyes representing a specific assay |
| Target | A specific DNA/RNA sequence being detected within a mix |
| Internal Control (IC) | A target used to verify successful extraction and amplification |
| Passive Target | A reference dye target used for normalization |
| Unknown Mix | An auto-created mix entry when imported targets do not match any configured mix |
| Westgard Rules | Statistical quality control rules for monitoring control performance |
| Curve Control | A control sample used to verify the standard curve for quantification |
| Cross Contamination Limit | CT value thresholds used to detect potential contamination between adjacent wells |
| Combined Outcome | A rule that assigns outcomes based on combinations of target results within a well |
| Calibration | The process of setting classification boundaries using historical run data |
| Rule Mapping | The association between analysis rules and specific observation types |
| Resolution | A 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]
Configuration Options
| Option | Default | Description | Affects |
|---|---|---|---|
| unknown_mix_enabled | true | Allow creation of Unknown mix entries on import | REQ-KITCFG-001 |
| ct_discrepancy_delta | 2 | Default CT discrepancy threshold for new mixes | REQ-KITCFG-001 |
| default_result_provider | machine | Default result provider for new mixes | REQ-KITCFG-001 |
| ic_ct_inhibition_delta | 3 | Default CT inhibition delta for IC targets | REQ-KITCFG-001 |
| thermocycler_auto_populate | false | Auto-create thermocycler entries from runfiles | REQ-KITCFG-004 |
| thermocycler_instrument_field | Comment | JSON field mapping for thermocycler instrument | REQ-KITCFG-004 |
| hide_ignored_errors | true | Default visibility of ignored error codes | REQ-KITCFG-005 |
| use_role_priority_resolution | false | Enable resolution priority column in control labels | REQ-KITCFG-007 |
| archive_mode | false | Show archived vs non-archived run tags | REQ-KITCFG-008 |
| use_sample_type | false | Enable specimen type in rule mappings and reporting | REQ-KITCFG-024, REQ-KITCFG-016, REQ-KITCFG-017 |
| hide_unused_rules | true | Default visibility of unassigned rules | REQ-KITCFG-024 |
| hide_disabled_westgard | true | Default visibility of disabled Westgard settings | REQ-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.phpmiddlewareuser-type:MANAGER,SUPER_ADMINprotects 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:
UpdateMixListActionpersists 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,RuleCreatedand other events implementAuditableEventinterface, captured byLogIntoDatabaselistener)
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:
| Component | Type | Path | Requirements |
|---|---|---|---|
| KitsController | Controller | app/Http/Controllers/Kits/KitsController.php | REQ-KITCFG-010, REQ-KITCFG-011 |
| MixesController | Controller | app/Http/Controllers/MixesController.php | REQ-KITCFG-001, REQ-KITCFG-002 |
| TargetsController | Controller | app/Http/Controllers/TargetsController.php | REQ-KITCFG-001, REQ-KITCFG-026 |
| ControlLabelsController | Controller | app/Http/Controllers/ControlLabelsController.php | REQ-KITCFG-007 |
| RolesController | Controller | app/Http/Controllers/RolesController.php | REQ-KITCFG-007, REQ-KITCFG-011 |
| WestgardSettingsController | Controller | app/Http/Controllers/WestgardSettingsController.php | REQ-KITCFG-012 |
| WestgardLimitsController | Controller | app/Http/Controllers/WestgardLimitsController.php | REQ-KITCFG-012 |
| KitConfigurationsExportController | Controller | app/Http/Controllers/KitConfigurationsExportController.php | REQ-KITCFG-002, REQ-KITCFG-003, REQ-KITCFG-004, REQ-KITCFG-007, REQ-KITCFG-011, REQ-KITCFG-012 |
| CustomerFriendlyKitConfigurationsExportController | Controller | app/Http/Controllers/CustomerFriendlyKitConfigurationsExportController.php | REQ-KITCFG-002, REQ-KITCFG-010 |
| OutcomeToLimsStatusMappingsController | Controller | app/Http/Controllers/OutcomeToLimsStatusMappingsController.php | REQ-KITCFG-011 |
| DeltaCtTargetCombinationController | Controller | app/Http/Controllers/DeltaCtTargetCombinationController.php | REQ-KITCFG-019 |
| TagController | Controller | app/Http/Controllers/TagController.php | REQ-KITCFG-008 |
| LimsStatusesController | Controller | app/Http/Controllers/LimsStatusesController.php | REQ-KITCFG-009 |
| ExtractionModelsController | Controller | app/Http/Controllers/ExtractionModelsController.php | REQ-KITCFG-003 |
| ExtractionInstrumentsController | Controller | app/Http/Controllers/ExtractionInstrumentsController.php | REQ-KITCFG-003 |
| ThermocyclersController | Controller | app/Http/Controllers/ThermocyclersController.php | REQ-KITCFG-004 |
| KnownQuantitiesController | Controller | app/Http/Controllers/KnownQuantitiesController.php | REQ-KITCFG-015 |
| AssayCalibrateableRunsController | Controller | app/Http/Controllers/AssayCalibrations/AssayCalibrateableRunsController.php | REQ-KITCFG-020, REQ-KITCFG-021, REQ-KITCFG-022 |
| ControlLabelsExportAction | Action | app/Actions/ControlLabelsExportAction.php | REQ-KITCFG-007 |
| MapRoleAliasToNewRoleAction | Action | app/Actions/ControlLabels/MapRoleAliasToNewRoleAction.php | REQ-KITCFG-007 |
| GlobalMixMapper | Action | app/Actions/GlobalMappers/GlobalMixMapper.php | REQ-KITCFG-001, REQ-KITCFG-007, REQ-KITCFG-012, REQ-KITCFG-013, REQ-KITCFG-014 |
| ControlLabelMapper | Action | app/Actions/GlobalMappers/Mappers/ControlLabelMapper.php | REQ-KITCFG-007 |
| WestgardLimitsMapper | Action | app/Actions/GlobalMappers/Mappers/WestgardLimitsMapper.php | REQ-KITCFG-012 |
| RuleMapper | Action | app/Actions/GlobalMappers/Mappers/RuleMapper.php | REQ-KITCFG-024, REQ-KITCFG-025 |
| MixAndTargetsImportSheet | Import | app/Imports/Sheets/MixAndTargetsImportSheet.php | REQ-KITCFG-001, REQ-KITCFG-002 |
| ControlLabelsImportSheet | Import | app/Imports/Sheets/ControlLabelsImportSheet.php | REQ-KITCFG-007 |
| WestgardLimitsImportSheet | Import | app/Imports/Sheets/WestgardLimitsImportSheet.php | REQ-KITCFG-012 |
| CombinedOutcomesImportSheet | Import | app/Imports/Sheets/CombinedOutcomesImportSheet.php | REQ-KITCFG-011 |
| ErrorCodesImportSheet | Import | app/Imports/Sheets/ErrorCodesImportSheet.php | REQ-KITCFG-005 |
| ErrorResolutionsImportSheet | Import | app/Imports/Sheets/ErrorResolutionsImportSheet.php | REQ-KITCFG-006 |
| CurveControlLimitsImportSheet | Import | app/Imports/Sheets/CurveControlLimitsImportSheet.php | REQ-KITCFG-014 |
| AdjacentsImportSheet | Import | app/Imports/Sheets/AdjacentsImportSheet.php | REQ-KITCFG-013 |
| RulesMappingImportSheet | Import | app/Imports/Sheets/RulesMappingImportSheet.php | REQ-KITCFG-024, REQ-KITCFG-025 |
Implementation (Frontend)
| Component Type | Location |
|---|---|
| View | views/KitConfigurations.vue |
| View | views/AssayConfigurations.vue |
| View | views/ThermocyclerModelsAndInstruments.vue |
| View | views/ExtractionModelsAndInstruments.vue |
| View | views/DeltaCtTargetCombination.vue |
| View | views/KnownQuantities.vue |
| View | views/ErrorCodes.vue |
| Components | components/assay-configurations/ |
| Components | components/mixes-and-targets/ |
| Components | components/kits/ |
| Components | components/calibrations/ |
| Components | components/control-labels/ |
| Components | components/curve-control-limits/ |
| Components | components/cross-contamination/ |
| Components | components/combined-outcomes/ |
| Components | components/delta-ct/ |
| Components | components/error-codes/ |
| Components | components/error-resolutions/ |
| Components | components/extraction-instruments/ |
| Components | components/known-quantities/ |
| Components | components/lims-statuses/ |
| Components | components/quantitative-reportings/ |
| Components | components/thermocyclers/ |
| Components | components/westgard-limits/ |
Traceability Matrix
| Requirement | Title | Verification | Implementation | Test Cases | Status |
|---|---|---|---|---|---|
| REQ-KITCFG-001 | Manage Mix and Target Configuration | Test | MixesController, TargetsController | BT-1927, BT-1929, BT-1931, BT-1932, BT-1935, BT-1139 | Draft |
| REQ-KITCFG-002 | Import and Export Mix Configuration | Test | MixAndTargetsImportSheet, KitConfigurationsExportController | BT-1934 | Draft |
| REQ-KITCFG-003 | Manage Extraction Instruments | Test | ExtractionModelsController, ExtractionInstrumentsController | [Pending] | Draft |
| REQ-KITCFG-004 | Manage Thermocycler Instruments | Test | ThermocyclersController | [Pending] | Draft |
| REQ-KITCFG-005 | Manage Error Codes | Test | ErrorCodesImportSheet | BT-1896-1909, BT-3835 | Draft |
| REQ-KITCFG-006 | Manage Error Resolutions | Test | ErrorResolutionsImportSheet | BT-2212, BT-2221-2231, BT-3862, BT-2239, BT-2241, BT-4686, BT-5270 | Draft |
| REQ-KITCFG-007 | Manage Control Labels | Test | ControlLabelsController, ControlLabelsImportSheet | BT-1915, BT-3913 | Draft |
| REQ-KITCFG-008 | Manage Run Tags | Test | TagController | [Pending] | Draft |
| REQ-KITCFG-009 | Manage LIMS Export Mappings | Test | LimsStatusesController | BT-2092-2094, BT-2109-2122, BT-4042 | Draft |
| REQ-KITCFG-010 | Provide Unified Assay Configuration Interface | Test | KitsController | [Pending] | Draft |
| REQ-KITCFG-011 | Manage Combined Outcome Rules | Test | OutcomeToLimsStatusMappingsController, CombinedOutcomesImportSheet | BT-405, BT-4644, BT-3656, BT-4340, BT-3885, BT-2635, BT-4399, BT-3543, BT-5230, BT-4239 | Draft |
| REQ-KITCFG-012 | Manage Westgard Settings | Test | WestgardSettingsController, WestgardLimitsController | BT-2371-2378, BT-2721 | Draft |
| REQ-KITCFG-013 | Manage Cross Contamination Limits | Test | AdjacentsImportSheet | BT-1964-2001, BT-1533-1536 | Draft |
| REQ-KITCFG-014 | Manage Curve Control Limits | Test | CurveControlLimitsImportSheet | BT-1997-2014, BT-2119, BT-2570 | Draft |
| REQ-KITCFG-015 | Manage Known Quantities | Test | KnownQuantitiesController | BT-1207 | Draft |
| REQ-KITCFG-016 | Manage Reporting Cut-offs | Test | [TBD] | BT-2277, BT-2282-2294, BT-4282, BT-4290 | Draft |
| REQ-KITCFG-017 | Manage Test Codes | Test | [TBD] | BT-2130, BT-2131, BT-2252-2258 | Draft |
| REQ-KITCFG-018 | Manage QIR Quantification Settings | Test | [TBD] | BT-1207 | Draft |
| REQ-KITCFG-019 | Manage Delta CT Configurations | Test | DeltaCtTargetCombinationController | BT-1208 | Draft |
| REQ-KITCFG-020 | Perform Assay Calibration Analysis | Test | AssayCalibrateableRunsController | BT-2696 | Draft |
| REQ-KITCFG-021 | Manage Calibration Boundaries | Test | AssayCalibrateableRunsController | [Pending] | Draft |
| REQ-KITCFG-022 | Manage Calibration Versions | Test | AssayCalibrateableRunsController | [Pending] | Draft |
| REQ-KITCFG-023 | Display Calibration in Run Reports | Test | [TBD] | [Pending] | Draft |
| REQ-KITCFG-024 | Manage Rule Mappings | Test | RulesMappingImportSheet, RuleMapper | BT-1874-1887 | Draft |
| REQ-KITCFG-025 | Manage Rule Settings | Test | RuleMapper | BT-3559, BT-4054 | Draft |
| REQ-KITCFG-026 | Manage Prepend Cycles | Test | TargetsController | [Pending] | Draft |
| REQ-KITCFG-027 | Support Multi-Site Configuration | Test | [TBD] | [Pending] | Draft |
| REQ-KITCFG-028 | Manage Help Item Tags | Test | [TBD] | [Pending] | Draft |
| REQ-KITCFG-029 | Manage Dye Configuration | Test | [TBD] | [Pending] | Draft |
| REQ-KITCFG-030 | Manage Westgard Event Codes | Test | [TBD] | [Pending] | Draft |
| REQ-KITCFG-031 | Manage Specimen Types | Test | [TBD] | [Pending] | Draft |
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
| ID | Question | Source | Owner | Date Raised |
|---|---|---|---|---|
| OQ-001 | No open questions at this time | - | - | - |
Acceptance Tests
Test: REQ-KITCFG-001
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Related Design Documents
| Design Document | Relevant Sections |
|---|---|
| SDD Configuration | Control 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 Algorithms | Rule 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:
- Statement section added - High-level summary of Kit Configuration domain
- Mermaid flowchart added - Illustrates configuration management flow and system integration
- Acceptance criteria reorganized - Grouped by concern with blank lines before bullet lists
- Tests moved to end - With back-links to requirements
- "Non-normative" replaced with "Illustrative" - Throughout the document
Consolidation Summary (from original conversion)
| Original Count | Converted Count | Reduction |
|---|---|---|
| 107 requirements | 28 requirements | 74% |
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.
Reversibility: Source file preserved at output/srs/kitcfg.md