Skip to main content
Version: Next

STD: Config Import/Export (CONFIGIO)

Version: v1.0.0 Status: Draft SRS Source: docusaurus/docs/srs/configio.md Domain: CONFIGIO


Overview

This document specifies tests for the Configuration Import/Export domain, which covers bulk configuration management via XLSX spreadsheet import and export operations across 14+ configuration types (expanded to 22 REQs in v3.1.0).

Domain Characteristics:

  • Primary function: Backend file parsing, validation, and data persistence
  • Secondary function: Status report generation and notification
  • Configuration dependency: Multiple toggle settings (extraction instruments, role priority, sample type)

Test Method Rationale: Per Test Plan Section 3.2, Configuration import/export uses TM-API as primary method. Import/export operations are backend file I/O with deterministic validation logic testable without UI. TM-UI used for notification display verification, upload workflow, page stability after import, and data persistence across SPA navigation (REQ-CONFIGIO-001). TM-MAN used for keyboard shortcut verification (REQ-CONFIGIO-002).

Test Case Convention: Steps describe logical actions, not UI mechanics. Use "Import configuration file with data X" or "Verify row status is Ignored", not "Click upload button" or "Check the value in cell A1". This ensures test intent survives UI redesigns.


Coverage Summary

REQ IDTitleACsTestsAC CoverageMethodGaps
REQ-CONFIGIO-001Generate Import Status Reports4TC-CONFIGIO-001, TC-CONFIGIO-040, TC-CONFIGIO-041, TC-CONFIGIO-042, TC-CONFIGIO-B006, TC-CONFIGIO-B007, TC-CONFIGIO-B0114/4 (100%)TM-HYBNone
REQ-CONFIGIO-002Export Customer-Friendly Configuration3TC-CONFIGIO-0023/3 (100%)TM-HYBNone
REQ-CONFIGIO-003Import/Export Mixes and Targets14TC-CONFIGIO-003, TC-CONFIGIO-004, TC-CONFIGIO-00514/14 (100%)TM-APINone
REQ-CONFIGIO-004Import/Export Combined Outcomes14TC-CONFIGIO-006, TC-CONFIGIO-007, TC-CONFIGIO-00814/14 (100%)TM-APINone
REQ-CONFIGIO-005Import/Export Control Labels7TC-CONFIGIO-009, TC-CONFIGIO-0107/7 (100%)TM-APINone
REQ-CONFIGIO-006Import/Export Error Codes4TC-CONFIGIO-0114/4 (100%)TM-APINone
REQ-CONFIGIO-007Import/Export Error Resolutions5TC-CONFIGIO-0125/5 (100%)TM-APINone
REQ-CONFIGIO-008Import/Export Help Items Tags3TC-CONFIGIO-0133/3 (100%)TM-APINone
REQ-CONFIGIO-009Import/Export Rules Configuration7TC-CONFIGIO-014, TC-CONFIGIO-0157/7 (100%)TM-APINone
REQ-CONFIGIO-010Import/Export QIR Quantification Settings8TC-CONFIGIO-016, TC-CONFIGIO-0178/8 (100%)TM-APINone
REQ-CONFIGIO-011Validate Westgard Limits on Import3TC-CONFIGIO-0183/3 (100%)TM-APINone
REQ-CONFIGIO-012Import Reporting Cut-offs5TC-CONFIGIO-0195/5 (100%)TM-APINone
REQ-CONFIGIO-013Import/Export LIMS Export Configuration3TC-CONFIGIO-0203/3 (100%)TM-APINone
REQ-CONFIGIO-014Apply Extraction Instruments Toggle3TC-CONFIGIO-0213/3 (100%)TM-APINone
REQ-CONFIGIO-015Global/Strict Config Import/Export Pattern13TC-CONFIGIO-032, TC-CONFIGIO-033, TC-CONFIGIO-034, TC-CONFIGIO-03513/13 (100%)TM-APINone
REQ-CONFIGIO-016Control Labels Enhanced Columns9TC-CONFIGIO-0369/9 (100%)TM-APINone
REQ-CONFIGIO-017Control Labels Re-import Behavior6TC-CONFIGIO-0376/6 (100%)TM-APINone
REQ-CONFIGIO-018Mix/Targets Quantification Scope Import/Export12TC-CONFIGIO-038, TC-CONFIGIO-03912/12 (100%)TM-APINone
REQ-CONFIGIO-019Cross Contamination Limits Import Validation2TC-CONFIGIO-0432/2 (100%)TM-APINone
REQ-CONFIGIO-020Automatic Rule Mappings Export Sheet3TC-CONFIGIO-0443/3 (100%)TM-APINone
REQ-CONFIGIO-021Target Name Suffix Import Sheet6TC-CONFIGIO-0456/6 (100%)TM-APINone
REQ-CONFIGIO-022Config Import Progress Indicator2TC-CONFIGIO-0462/2 (100%)TM-HYBNone

Totals: 22 REQs, 186 ACs, 49 Test Cases, 100% Coverage


Test Cases

TC-CONFIGIO-001: Import status report generation and notification

Verifies: REQ-CONFIGIO-001 (AC1, AC2, AC3, AC4)

Method: TM-HYB (API for import, UI for notification verification)

Priority: High

Preconditions:

  • User logged in with Administrator role
  • Test XLSX file prepared with mix of valid and invalid rows

Test Data:

  • Mixes and Targets sheet with:
    • Row 1: Valid mix/target configuration
    • Row 2: Valid mix/target configuration
    • Row 3: Invalid (MINIMUM FLUORESCENCE exceeds precision)

Steps:

  1. Import configuration file via API endpoint
  2. Retrieve import result notification
  3. Download generated status report

Expected Results:

  • AC1: Notification displays sheet name, imported count (2), ignored count (1)
  • AC2: Downloaded report contains Status column appended to original data
  • AC3: Row 1 Status = "Imported", Row 2 Status = "Imported"
  • AC4: Row 3 Status = "Ignored" with reason "Value exceeds maximum precision"

Automation Status: Manual (XLSX column validation — config import/export content verification)

Jira: BT-3714


TC-CONFIGIO-002: Customer-friendly configuration export

Verifies: REQ-CONFIGIO-002 (AC1, AC2, AC3)

Method: TM-HYB (API for export verification, manual for keyboard shortcut)

Priority: Medium

Preconditions:

  • User logged in with Administrator role
  • At least one kit configuration exists
  • Site name configured as "TestSite"

Steps:

  1. Trigger customer-friendly export via API
  2. Verify downloaded file
  3. Navigate to Kit Configurations page
  4. Press P key (keyboard shortcut verification - manual)

Expected Results:

  • AC1: System generates XLSX file with customer-friendly configuration data
  • AC2: Filename matches pattern customer-friendly-kit-configurations-TestSite.xlsx
  • AC3: Keyboard shortcut P triggers export (manual verification)

Automation Status: Manual (XLSX column validation — config import/export content verification)

Jira: [Pending]


TC-CONFIGIO-003: Mixes and Targets import - column support and precision validation

Verifies: REQ-CONFIGIO-003 (AC1, AC2, AC3)

Method: TM-API

Priority: High

Preconditions:

  • Administrator role
  • Mix "TestMix" exists

Test Data:

ScenarioMINIMUM FLUORESCENCEIS QUANTITATIVEExpected
Valid precision100000.123456TRUEImported
Max precision1234567890123456.1234567890123456FALSEImported
Exceeds precision12345678901234567.12345678901234567TRUEIgnored
Invalid boolean100YESIgnored
Valid boolean false100FALSEImported

Steps:

  1. Prepare XLSX with test data rows
  2. Import via API endpoint
  3. Query database for imported values
  4. Retrieve status report

Expected Results:

  • AC1: MINIMUM FLUORESCENCE, IS QUANTITATIVE, and other columns supported
  • AC2: Precision validation rejects values exceeding 16 integer + 16 decimal places
  • AC3: IS QUANTITATIVE validated as boolean (TRUE/FALSE only)

Automation Status: Manual (XLSX column validation — config import/export content verification)

Jira: BT-3562


TC-CONFIGIO-004: Mixes and Targets import - passive target and threshold validation

Verifies: REQ-CONFIGIO-003 (AC4, AC5, AC6, AC7)

Method: TM-API

Priority: High

Preconditions:

  • Mix "TestMix" with targets "TargetA", "TargetB", "TargetC"

Test Data:

ScenarioMixTargetis_passiveExpected ThresholdExpected Result
Single passiveTestMixTargetAtrue500Imported
Multiple passive (row 1)TestMix2TargetAtrue500All rejected
Multiple passive (row 2)TestMix2TargetBtrue600All rejected
Non-passive thresholdTestMixTargetCfalse50000000Imported
Passive threshold > 1000TestMixTargetAtrue1500Ignored
Non-passive threshold > 100MTestMixTargetCfalse150000000Ignored

Steps:

  1. Import XLSX with passive target scenarios
  2. Verify mix rejection for multiple passive targets
  3. Verify threshold validation per passive status

Expected Results:

  • AC4: Expected Threshold validated as whole number within configured range
  • AC5: Each mix has at most one passive target enforced
  • AC6: Passive target threshold validated as > 0 and <= 1000
  • AC7: Non-passive target threshold validated as > 0 and <= 100000000

Automation Status: Manual (XLSX column validation — config import/export content verification)

Jira: BT-4677


TC-CONFIGIO-005: Mixes and Targets import - MAX CT, PREPEND CYCLES, and cross-field dependency validation

Verifies: REQ-CONFIGIO-003 (AC8, AC9, AC10, AC11, AC12, AC13, AC14)

Method: TM-API

Priority: Medium

Preconditions:

  • Mix exists with multiple targets

Test Data (MAX CT and PREPEND CYCLES):

MAX CT FOR CLSMAX CT FOR CTPREPEND CYCLESExpected
nullnull0Imported
30455Imported
0503Ignored (MAX CT < 1)
101503Ignored (MAX CT > 100)
5050-1Ignored (negative PREPEND)
50502.5Ignored (non-integer PREPEND)

Test Data (Cross-Field Dependencies — @V3_1_0):

CHECK CLS DISCREPANCYCT DISCREPANCY DELTACALIBRATION FILE PATHExpected
TRUE(empty)/path/to/bsonImported
TRUE(empty)(empty)Ignored — "Bson is required to enable check cls discrepancy"
FALSE(empty)(empty)Imported
(empty)2.5/path/to/bsonImported
(empty)2.5(empty)Ignored — "Bson is required to enable check ct discrepancy"
TRUE2.5/path/to/bsonImported
TRUE2.5(empty)Ignored — both cross-field errors

Steps:

  1. Import XLSX with MAX CT and PREPEND CYCLES test cases
  2. Verify validation rules applied
  3. Verify export includes all columns
  4. Import XLSX with cross-field dependency test cases (@V3_1_0)
  5. Verify CHECK CLS DISCREPANCY requires CALIBRATION FILE PATH
  6. Verify CT DISCREPANCY DELTA requires CALIBRATION FILE PATH

Expected Results:

  • AC8: MAX CT values validated as numeric between 1 and 100, allowing null
  • AC9: PREPEND CYCLES validated as non-negative integer
  • AC10: Invalid rows rejected with appropriate error messages
  • AC11: Export includes all configured values for supported columns
  • AC12: Round-trip import/export preserves all data
  • AC13 (@V3_1_0): CHECK CLS DISCREPANCY = TRUE without CALIBRATION FILE PATH rejected with "Bson is required to enable check cls discrepancy"
  • AC14 (@V3_1_0): CT DISCREPANCY DELTA non-empty without CALIBRATION FILE PATH rejected with "Bson is required to enable check ct discrepancy"

Automation Status: Manual (XLSX column validation — config import/export content verification)

Jira: BT-5227, BT-5308


TC-CONFIGIO-006: Combined Outcomes import - role and outcome type validation

Verifies: REQ-CONFIGIO-004 (AC1, AC2, AC3, AC4)

Method: TM-API

Priority: High

Preconditions:

  • Roles configured: "SampleRole" (Sample type), "ControlRole" (Control type), "IgnoreRole" (Ignore type)
  • Error codes configured: "ERR001", "ERR002"
  • LIMS codes configured: "LIMS001"

Test Data:

ROLEOUTCOME TYPEExpected
(blank)ErrorIgnored - ROLE required
NonExistentErrorIgnored - ROLE not found
IgnoreRoleErrorIgnored - Ignore-typed not allowed
SampleRoleErrorImported
ControlRoleInvalidIgnored - invalid OUTCOME TYPE
ControlRoleErrorImported
ControlRoleLimsIgnored - Control can only have Error

Steps:

  1. Import XLSX with role and outcome type test cases
  2. Verify validation rules applied

Expected Results:

  • AC1: Import/Export supports MIX, TARGET, ROLE, OUTCOME TYPE columns
  • AC2: ROLE validated as required, existing, and not Ignore-typed
  • AC3: OUTCOME TYPE validated as required ("Error" or "Lims")
  • AC4: Control-typed roles can only have "Error" outcome type

Automation Status: Manual (XLSX column validation — config import/export content verification)

Jira: BT-4239


TC-CONFIGIO-007: Combined Outcomes import - code and target validation

Verifies: REQ-CONFIGIO-004 (AC5, AC6, AC7)

Method: TM-API

Priority: High

Preconditions:

  • Same as TC-CONFIGIO-006
  • TARGET ERROR CODE "TERR001" exists
  • Mix "TestMix" has target "TargetA"

Test Data:

ROLE TypeTARGET ERROR CODETARGET TO HAVE ERRORExpected
SampleTERR001TargetAIgnored - Sample cannot have TARGET ERROR CODE
Sample(empty)(empty)Imported
ControlTERR001TargetAImported
Control(empty)(empty)Imported
ControlTERR001TargetX (not in mix)Ignored - target not in mix

Steps:

  1. Import XLSX with code and target validation cases
  2. Verify TARGET ERROR CODE rules per role type
  3. Verify TARGET TO HAVE ERROR belongs to specified mix

Expected Results:

  • AC5: WELL ERROR CODE / LIMS CODE validated against appropriate configuration
  • AC6: TARGET ERROR CODE must be empty for Sample-typed roles
  • AC7: TARGET TO HAVE ERROR validated as belonging to specified mix

Automation Status: Manual (XLSX column validation — config import/export content verification)

Jira: BT-3885


TC-CONFIGIO-008: Combined Outcomes import - priority, discrepancy, and IC Failed

Verifies: REQ-CONFIGIO-004 (AC8, AC9, AC10, AC11, AC12, AC13, AC14)

Method: TM-API

Priority: Medium

Preconditions:

  • Existing combined outcomes at priorities 1, 2, 3

Test Data:

PRIORITYCLS DISCREPANCYCT DISCREPANCYIC FAILEDExpected
abc(blank)(blank)falseIgnored - PRIORITY non-numeric
2(blank)(blank)falseImported - existing priorities shifted
5TRUEFALSEtrueImported
6YES(blank)falseIgnored - invalid boolean
7(blank)(blank)trueImported

Steps:

  1. Import XLSX with priority and discrepancy test cases
  2. Verify priority merging shifts existing rows
  3. Verify discrepancy fields accept boolean or blank
  4. Export and verify IC FAILED preserved

Expected Results:

  • AC8: PRIORITY validated as numeric
  • AC9: Imported priorities merge, shifting existing rows
  • AC10: Discrepancy required fields validated as boolean or blank
  • AC11: Blank discrepancy values interpreted as "Any"
  • AC12: Multi-run combined outcome feature disabled when discrepancy used
  • AC13: Export includes all configured combined outcomes
  • AC14: IC FAILED value preserved during round-trip

Automation Status: Manual (XLSX column validation — config import/export content verification)

Jira: BT-5230


TC-CONFIGIO-009: Control Labels import - backup mixes and wildcard validation

Verifies: REQ-CONFIGIO-005 (AC1, AC2, AC3)

Method: TM-API

Priority: High

Preconditions:

  • Mixes "Mix1", "Mix2", "Mix3" exist

Test Data:

BACKUP MIXESLABELS_IN_IMPORTED_RUNFILEExpected
Mix1|Mix2POS*Imported
Mix1|Mix2|Mix3*SARS-CoV-2 PCImported
Mix1Ne*gIgnored - wildcard in middle
Mix1TestLabelEndIgnored - wildcard in middle
Mix1*Imported (wildcard at start only)

Steps:

  1. Import XLSX with backup mixes and wildcard patterns
  2. Verify pipe-separated format for BACKUP MIXES
  3. Verify wildcard validation rules

Expected Results:

  • AC1: BACKUP MIXES, LABELS_IN_IMPORTED_RUNFILE columns supported
  • AC2: BACKUP MIXES formatted as pipe-separated mix names
  • AC3: Wildcard "*" rejected when in middle of role alias

Automation Status: Manual (XLSX column validation — config import/export content verification)

Jira: BT-3913, BT-3985


TC-CONFIGIO-010: Control Labels import - IC delta check and resolution priority

Verifies: REQ-CONFIGIO-005 (AC4, AC5, AC6, AC7)

Method: TM-API

Priority: Medium

Preconditions:

  • Control roles of types: Sample, Ignore, Crossover, Control
  • Client config "Use role priority for resolution" initially disabled

Test Data:

Role TypeEXCLUDE FROM IC DELTA CHECKRESOLUTION PRIORITYConfig EnabledExpected
ControlYes5trueImported
ControlNo5falseImported (priority ignored)
SampleYes5trueIgnored - Sample cannot have priority
IgnoreYes5trueIgnored - Ignore cannot have priority
CrossoverNo5trueIgnored - Crossover cannot have priority
ControlInvalid(empty)falseIgnored - invalid IC value

Steps:

  1. Import with "Use role priority" disabled, verify priority ignored
  2. Enable "Use role priority", reimport
  3. Verify role type restrictions on resolution priority
  4. Export and verify all columns included

Expected Results:

  • AC4: EXCLUDE FROM IC DELTA CHECK validated as Yes/No/empty
  • AC5: RESOLUTION PRIORITY only imported when config enabled
  • AC6: Sample, Ignore, Crossover roles cannot have resolution priority
  • AC7: Export includes all configured values

Automation Status: Manual (XLSX column validation — config import/export content verification)

Jira: BT-5303


TC-CONFIGIO-011: Error Codes import and export

Verifies: REQ-CONFIGIO-006 (AC1, AC2, AC3, AC4)

Method: TM-API

Priority: Medium

Preconditions:

  • User has Super Administrator role

Test Data:

ERROR CODEERROR TYPEIS INHIBITEDCAUSES MISSING MIXES
ERR001Associate Control Errortruefalse
ERR002Standard Errorfalsetrue
ERR003Associate Control Errorfalsefalse

Steps:

  1. Import XLSX with error code test data
  2. Query database for imported error codes
  3. Export error codes configuration
  4. Verify round-trip data integrity

Expected Results:

  • AC1: ERROR CODE, ERROR TYPE, IS INHIBITED, CAUSES MISSING MIXES columns supported
  • AC2: ERROR TYPE supports "Associate Control Error" type
  • AC3: IS INHIBITED and CAUSES MISSING MIXES imported as boolean
  • AC4: Export includes all error codes with configured properties

Automation Status: Manual (XLSX column validation — config import/export content verification)

Jira: BT-3835, BT-4164


TC-CONFIGIO-012: Error Resolutions import and export

Verifies: REQ-CONFIGIO-007 (AC1, AC2, AC3, AC4, AC5)

Method: TM-API

Priority: Medium

Preconditions:

  • User has Super Administrator role
  • Resolvable error "ERR_RESOLVABLE" exists
  • Non-resolvable errors ONE_STANDARD_CONTROL, STANDARD_WITHOUT_QUANT exist

Test Data:

ErrorRESOLUTION LEVELExpected
ERR_RESOLVABLEWellImported
ERR_RESOLVABLEAll ObservationsImported
ERR_RESOLVABLEDiscrepant ObservationsImported
ERR_RESOLVABLEInvalidIgnored
ONE_STANDARD_CONTROLWellIgnored - non-resolvable
STANDARD_WITHOUT_QUANTAll ObservationsIgnored - non-resolvable

Steps:

  1. Import XLSX with resolution level test data
  2. Verify valid resolution levels accepted
  3. Verify non-resolvable errors rejected
  4. Export and verify RESOLUTION LEVEL included

Expected Results:

  • AC1: RESOLUTION LEVEL column supported
  • AC2: RESOLUTION LEVEL validated as "Well", "All Observations", or "Discrepant Observations"
  • AC3: Invalid RESOLUTION LEVEL causes row rejection
  • AC4: Resolutions cannot be added to non-resolvable errors
  • AC5: Export includes RESOLUTION LEVEL for all error resolutions

Automation Status: Manual (XLSX column validation — config import/export content verification)

Jira: BT-3862, BT-4864


TC-CONFIGIO-013: Help Items tags import and export

Verifies: REQ-CONFIGIO-008 (AC1, AC2, AC3)

Method: TM-API

Priority: Low

Preconditions:

  • Help items exist in system

Test Data:

HELP ITEMTAGSExpected
HelpItem1tag1, tag2, tag3Imported with 3 tags
HelpItem2single-tagImported with 1 tag
HelpItem3(empty)Imported with empty tags
HelpItem4(null)Imported with empty tags

Steps:

  1. Import XLSX with help items and tags
  2. Verify comma-separated tags parsed correctly
  3. Export help items configuration
  4. Verify tags formatted as comma-separated or blank

Expected Results:

  • AC1: TAGS column supported
  • AC2: Multiple tags parsed from comma-separated format
  • AC3: Empty/null tags result in empty tags value; export formats correctly

Automation Status: Planned

Jira: [Pending]


TC-CONFIGIO-014: Rules import - IS ALLOW ERROR WELLS

Verifies: REQ-CONFIGIO-009 (AC1, AC2, AC3, AC4)

Method: TM-API

Priority: Medium

Preconditions:

  • Rules configured in system

Test Data:

RuleIS ALLOW ERROR WELLSExpected
Rule1TRUEImported with allow_error_wells = true
Rule2FALSEImported with allow_error_wells = false
Rule3(null)Imported with allow_error_wells = false
Rule4(empty)Imported with allow_error_wells = false
Rule5YesImported with allow_error_wells = false (treated as non-boolean)

Steps:

  1. Import XLSX with IS ALLOW ERROR WELLS values
  2. Verify null/empty treated as false
  3. Verify non-boolean treated as false
  4. Export and verify true/false boolean output

Expected Results:

  • AC1: IS ALLOW ERROR WELLS column supported
  • AC2: Null/empty values treated as false
  • AC3: Non-boolean values treated as false
  • AC4: Export includes IS ALLOW ERROR WELLS as true/false

Automation Status: Manual (XLSX column validation — config import/export content verification)

Jira: BT-3559


TC-CONFIGIO-015: Rules import - precedence normalization

Verifies: REQ-CONFIGIO-009 (AC5, AC6, AC7)

Method: TM-API

Priority: High

Preconditions:

  • Existing rules with various types and precedences

Test Data:

Import order:

  1. Rule A: Type=Observation, Precedence=5
  2. Rule B: Type=Observation, Precedence=5 (duplicate)
  3. Rule C: Type=Control Check, Precedence=1
  4. Rule D: Type=Sample Result, Precedence=10
  5. Rule E: Type=Observation, Precedence=3

Expected normalized global precedence:

  • Rule E: 1 (Observation, relative 3)
  • Rule A: 2 (Observation, relative 5, first)
  • Rule B: 3 (Observation, relative 5, second - later row higher)
  • Rule C: 4 (Control Check)
  • Rule D: 5 (Sample Result)

Steps:

  1. Import rules with varying types and relative precedences
  2. Verify normalization based on rule type order
  3. Verify gaps removed within types
  4. Verify duplicate handling (later rows get higher precedence)

Expected Results:

  • AC5: Precedence normalized based on rule type and relative precedence
  • AC6: Rule type precedence order: Observation(1) < Control Check(2) < Sample Result(3) < Apply Controls(4) < Sample Check(5) < Parse/Import/Reanalysis/General/Reporting(6)
  • AC7: Duplicate precedences within type resolved; new imports take priority over existing

Automation Status: Manual (XLSX column validation — config import/export content verification)

Jira: BT-4054


TC-CONFIGIO-016: QIR Quantification Settings import - column support and basic validation

Verifies: REQ-CONFIGIO-010 (AC1, AC2, AC3, AC4)

Method: TM-API

Priority: High

Preconditions:

  • Targets "TargetA", "TargetB" exist in target table

Test Data:

TARGETSLOPEINTERCEPTExpected
TargetA1.52.4Imported
TargetA1.5(null)Ignored - both required
TargetA(null)2.4Ignored - both required
TargetA(null)(null)Imported (neither provided)
NonExistent1.52.4Ignored - target not found

Steps:

  1. Import XLSX with slope/intercept test cases
  2. Verify TARGET existence validation
  3. Verify SLOPE and INTERCEPT must be provided together

Expected Results:

  • AC1: TARGET, SLOPE, INTERCEPT, MIN/MAX SLOPE, MIN/MAX EFFICIENCY, MIN R2, MIN CONTROLS columns supported
  • AC2: TARGET validated as required and existing
  • AC3: SLOPE and INTERCEPT required together (both or neither)
  • AC4: Export includes all quantification settings

Automation Status: Manual (XLSX column validation — config import/export content verification)

Jira: BT-3567


TC-CONFIGIO-017: QIR Quantification Settings import - range validation

Verifies: REQ-CONFIGIO-010 (AC5, AC6, AC7, AC8)

Method: TM-API

Priority: Medium

Preconditions:

  • Target "TargetA" exists

Test Data:

MIN SLOPEMAX SLOPEMIN EFFICIENCYMAX EFFICIENCYMIN R2MIN CONTROLSExpected
0.51.50.81.20.953Imported
1.50.50.81.20.953Ignored - min > max
0.51.51.20.80.953Ignored - min > max
(null)(null)(null)(null)0.52Imported
0.51.50.81.2-0.13Ignored - MIN R2 < 0
0.51.50.81.21.53Ignored - MIN R2 > 1
0.51.50.81.20.951Ignored - MIN CONTROLS < 2

Steps:

  1. Import XLSX with range validation test cases
  2. Verify MIN/MAX comparisons
  3. Verify MIN R2 range (0-1)
  4. Verify MIN CONTROLS minimum (>= 2)

Expected Results:

  • AC5: MIN/MAX SLOPE validated as null or decimal with min <= max
  • AC6: MIN/MAX EFFICIENCY validated as null or decimal with min <= max
  • AC7: MIN R2 validated as null or decimal between 0 and 1
  • AC8: MIN CONTROLS validated as null or integer >= 2

Automation Status: Manual (XLSX column validation — config import/export content verification)

Jira: BT-3567


TC-CONFIGIO-018: Westgard Limits import - SD validation

Verifies: REQ-CONFIGIO-011 (AC1, AC2, AC3)

Method: TM-API

Priority: Medium

Preconditions:

  • Westgard configuration exists

Test Data:

SD ValueExpected
0.5Imported
1.0Imported
0Ignored
-0.5Ignored
(null)Ignored

Steps:

  1. Import XLSX with various SD values
  2. Verify validation rejects SD = 0 and SD < 0
  3. Verify valid SD > 0 imported

Expected Results:

  • AC1: SD validated as number greater than 0
  • AC2: Rows with SD = 0 ignored
  • AC3: Rows with valid SD > 0 imported

Automation Status: Planned

Jira: [Pending]


TC-CONFIGIO-019: Reporting Cut-offs import - specimen type validation

Verifies: REQ-CONFIGIO-012 (AC1, AC2, AC3, AC4, AC5)

Method: TM-API

Priority: Medium

Preconditions:

  • Mix "TestMix" exists
  • Specimen "SpecimenA" has test code mapping for TestMix
  • Specimen "SpecimenB" does NOT have mapping for TestMix

Test Data with "use sample type" ENABLED:

MixSPECIMEN TYPEExpected
TestMixSpecimenAImported with specimen association
TestMixSpecimenBIgnored - no mapping
TestMix(empty)Imported without specimen association

Test Data with "use sample type" DISABLED:

MixSPECIMEN TYPEExpected
TestMixSpecimenAIgnored - specimen not allowed
TestMix(empty)Imported

Steps:

  1. Enable "use sample type" config
  2. Import with specimen type scenarios
  3. Disable "use sample type" config
  4. Import with specimen type scenarios

Expected Results:

  • AC1: SPECIMEN TYPE column supported
  • AC2: When enabled, rows with valid specimen/mix mapping imported with association
  • AC3: When enabled, rows without specimen imported without association
  • AC4: When disabled, rows with specimen rejected
  • AC5: When disabled, rows without specimen imported normally

Automation Status: Manual (XLSX column validation — config import/export content verification)

Jira: BT-4293


TC-CONFIGIO-020: LIMS Export configuration import and export

Verifies: REQ-CONFIGIO-013 (AC1, AC2, AC3)

Method: TM-API

Priority: Medium

Preconditions:

  • LIMS export codes exist

Test Data:

CodeIS INHIBITEDCAUSES MISSING MIXESDOES PREVENT ANALYSE
LIMS001truefalseYES
LIMS002falsetrueNO
LIMS003truetrueYES

Steps:

  1. Import XLSX with LIMS export configuration
  2. Verify boolean columns imported correctly
  3. Verify DOES PREVENT ANALYSE accepts YES/NO
  4. Export and verify all properties included

Expected Results:

  • AC1: IS INHIBITED, CAUSES MISSING MIXES, DOES PREVENT ANALYSE columns supported
  • AC2: DOES PREVENT ANALYSE accepts YES/NO values
  • AC3: Import creates/updates entries; export includes all properties

Automation Status: Manual (XLSX column validation — config import/export content verification)

Jira: BT-4164, BT-4042


TC-CONFIGIO-021: Extraction Instruments toggle impact on Westgard import

Verifies: REQ-CONFIGIO-014 (AC1, AC2, AC3)

Method: TM-API

Priority: High

Preconditions:

  • Westgard configuration exists

Test Data:

RowHas Extraction InstrumentsToggle ON ResultToggle OFF Result
1YesImportedIgnored
2NoIgnoredImported
3YesImportedIgnored
4NoIgnoredImported

Steps:

  1. Set "Use Extraction Instruments" toggle ON
  2. Import Westgard configuration
  3. Verify rows without Extraction Instruments ignored
  4. Set toggle OFF
  5. Import same configuration
  6. Verify rows with Extraction Instruments ignored
  7. Check import report for "Ignored" status

Expected Results:

  • AC1: Toggle ON - rows without Extraction Instruments ignored
  • AC2: Toggle OFF - rows with Extraction Instruments ignored
  • AC3: Ignored rows show status "Ignored" in import report

Automation Status: Manual (XLSX column validation — config import/export content verification)

Jira: BT-3713


TC-CONFIGIO-022: Mixes and Targets column validation (Phase B2)

Verifies: REQ-CONFIGIO-003 (Column ACs from CONFIG_COVERAGE_FIXES.md Phase B2)

Method: TM-API

Priority: High

Preconditions:

  • Mix "TestMix" exists with targets
  • Import file prepared with column test scenarios

Test Data:

ColumnScenarioValueExpected StatusExpected Error
QUANTITATIVEInvalidABCIgnored"Invalid quantification"
QUANTITATIVEInconsistent in mixtrue/falseIgnored"Multiple quantification settings"
TARGET ORDERPartial1,(empty),3Ignored"Must fill all orders or not fill at all"
TARGET ORDERNon-numericABCIgnored"Order must be numeric"
PREFERRED RESULT PROVIDERInvalidOTHERIgnoredInvalid provider error
EXPECTED THRESHOLDPassive >10001500IgnoredThreshold range error

Steps:

  1. Import XLSX with column validation test cases
  2. Retrieve status report
  3. Verify each row's status and error message

Expected Results:

  • QUANTITATIVE invalid: Rejected with "Invalid quantification"
  • QUANTITATIVE inconsistent: Rejected with "Multiple quantification settings"
  • TARGET ORDER partial: Rejected with "Must fill all orders or not fill at all"
  • TARGET ORDER non-numeric: Rejected with "Order must be numeric"
  • PREFERRED RESULT PROVIDER invalid: Rejected with invalid provider error
  • EXPECTED THRESHOLD out of range: Rejected with threshold range error

Automation Status: Planned

Jira: Pending


TC-CONFIGIO-023: Combined Outcomes column validation (Phase B1)

Verifies: REQ-CONFIGIO-004 (Column ACs from CONFIG_COVERAGE_FIXES.md Phase B1)

Method: TM-API

Priority: High

Preconditions:

  • Mixes, targets, error codes, LIMS statuses configured
  • Specimens configured

Test Data (Mix Result Level):

ColumnScenarioExpected Error
ALLOW OTHER RUNS TO BE USEDInvalid"Invalid 'other runs to be used' value"
ALLOW OTHER RUNS TO BE USEDWith discrepancy"'Use other runs' not allowed because CLS discrepancy or CT discrepancy is required"
IS REPEATInvalid"Invalid is repeat"
MIX MISSINGInconsistent"mix_missing values must be consistent"
MIX LEVEL OUTCOME TYPEWithout code"mix level: well error code or lims code filled without selecting outcome type"
REQUIRED HISTORY OUTCOMESWithout repeat"Previous well outcomes are not allowed"
REQUIRED HISTORY OUTCOMESInvalid outcome"previous well outcomes are invalid"

Test Data (Target Result Level):

ColumnScenarioExpected Error
RESULTInvalid"Result not found"
MIN CTNon-integer"CT value is not integer"
MIN CTOut of range"CT is not in valid range"
MAX CTLess than MIN"Max CT is not greater than to min CT"
MIN QUANTITYNot numeric"Quantity is not numeric"
MAX QUANTITYLess than MIN"Max quantity is not greater than to min quantity"
SPECIMENInvalid (enabled)"Invalid specimen name"
SPECIMENFilled (disabled)"Specimen is filled when 'use sample type' config is disabled"

Steps:

  1. Import Combined Outcomes with column validation test cases
  2. Retrieve status report
  3. Verify error messages match specification

Expected Results:

  • All documented error messages produced for invalid scenarios
  • Mix result level validations enforced
  • Target result level validations enforced
  • Cross-field validations (CT range, quantity range) enforced

Automation Status: Planned

Jira: Pending


TC-CONFIGIO-024: Error Resolutions column validation (Phase B3)

Verifies: REQ-CONFIGIO-007 (Column ACs from CONFIG_COVERAGE_FIXES.md Phase B3)

Method: TM-API

Priority: High

Preconditions:

  • Resolution message numbers configured
  • LIMS statuses configured

Test Data:

RESOLUTION NUMBEROTHER WELLS AFFECTEDExpected Error
(empty)DETECTED"Resolution number is not filled"
99 (invalid)DETECTED"No matching resolution message"
1ALL WELLS,DETECTED"Can't have other lims along with all wells"

Steps:

  1. Import Error Resolutions with column validation test cases
  2. Retrieve status report
  3. Verify error messages match specification

Expected Results:

  • RESOLUTION NUMBER empty: "Resolution number is not filled"
  • RESOLUTION NUMBER invalid: "No matching resolution message"
  • OTHER WELLS AFFECTED with ALL WELLS + others: "Can't have other lims along with all wells"

Automation Status: Planned

Jira: Pending


TC-CONFIGIO-025: Error Codes DEFAULT LIMS EXPORT validation (Phase B4)

Verifies: REQ-CONFIGIO-006 (DEFAULT LIMS EXPORT column AC from CONFIG_COVERAGE_FIXES.md Phase B4)

Method: TM-API

Priority: High

Preconditions:

  • LIMS status codes configured

Test Data:

ERROR CODEDEFAULT LIMS EXPORTExpected
ERR001DETECTEDImported
ERR002NONEXISTENTIgnored - "Default Lims Status does not match with any available Lims Statuses"

Steps:

  1. Import Error Codes with DEFAULT LIMS EXPORT test cases
  2. Retrieve status report
  3. Verify validation error message

Expected Results:

  • Valid LIMS status: Row imported
  • Invalid LIMS status: Rejected with "Default Lims Status does not match with any available Lims Statuses"

Automation Status: Planned

Jira: Pending


TC-CONFIGIO-026: Westgard Limits DYE and RANGE START DATE validation (Phase C7)

Verifies: REQ-CONFIGIO-011 (DYE, RANGE START DATE column ACs from CONFIG_COVERAGE_FIXES.md Phase C7)

Method: TM-API

Priority: Medium

Preconditions:

  • Mixes with targets and dyes configured

Test Data:

TARGETDYERANGE START DATEExpected
Global(empty)2026-01-15Imported
TargetAFAM2026-01-15Imported
TargetAINVALID2026-01-15Ignored - invalid DYE
TargetAFAM(empty)Ignored
TargetAFAMinvalidIgnored - "Invalid date format..."

Steps:

  1. Import Westgard Limits with DYE and date test cases
  2. Retrieve status report
  3. Verify error messages

Expected Results:

  • DYE not required when TARGET is "Global"
  • DYE required when TARGET is specific
  • RANGE START DATE required, accepts string or Excel serial
  • Invalid date: "Invalid date format. Expected a valid date string or Excel serial number."

Automation Status: Planned

Jira: Pending


TC-CONFIGIO-027: Help Items full column validation (Phase C1)

Verifies: REQ-CONFIGIO-008 (Full column ACs from CONFIG_COVERAGE_FIXES.md Phase C1)

Method: TM-API

Priority: Medium

Preconditions:

  • Help videos configured
  • Valid page names in system

Test Data:

ORDERTITLEDESCRIPTIONVIDEOPAGES AVAILABLEExpected
1Help 1Desc 1video1Run FilesImported
(empty)Help 2Desc 2(empty)Run FilesIgnored - "Help item: ignored"
2(empty)Desc 2(empty)Run FilesIgnored - "Help item: ignored"
3Help 3(empty)(empty)Run FilesIgnored - "Help item: ignored"
4Help 4Desc 4invalid_videoRun FilesIgnored - "Help item: ignored"
5Help 5Desc 5(empty)Invalid PageIgnored - "Help item: ignored"

Steps:

  1. Import Help Items with column validation test cases
  2. Retrieve status report
  3. Verify all required columns enforced

Expected Results:

  • ORDER required and unique
  • TITLE required
  • DESCRIPTION required
  • VIDEO optional, must match existing HelpVideo
  • PAGES AVAILABLE required, must be valid page names
  • Invalid rows: "Help item: ignored"

Automation Status: Planned

Jira: Pending


TC-CONFIGIO-028: Rules and Rules Mapping column validation (Phase C5/C6)

Verifies: REQ-CONFIGIO-009 (Column ACs from CONFIG_COVERAGE_FIXES.md Phase C5/C6)

Method: TM-API

Priority: Medium

Preconditions:

  • Rules configured with programmatic names
  • Mixes with targets and dyes configured

Test Data (Rules):

PROGRAMMATIC RULE NAMERULE DESCRIPTIONExpected
(empty)DescriptionIgnored
RULE_NAME(empty)Ignored

Test Data (Rules Mapping):

RULE IDMIXTARGETDYEExpected Error
(empty)Mix1TargetAFAM"Rule id is not filled"
NONEXISTENTMix1TargetAFAM"No matching rule"
RULE_NAMEMix1TargetA(empty)"Invalid mix and dye combination"
RULE_NAMEMix1NONEXISTENTFAM"No matching target"

Steps:

  1. Import Rules with validation test cases
  2. Import Rules Mapping with validation test cases
  3. Verify error messages match specification

Expected Results:

  • Rules: PROGRAMMATIC RULE NAME and RULE DESCRIPTION required
  • Rules Mapping: RULE ID required, must match existing rule
  • Rules Mapping: DYE required when TARGET is not "global"

Automation Status: Planned

Jira: Pending


TC-CONFIGIO-029: Control Labels export column validation (Phase C3)

Verifies: REQ-CONFIGIO-005 (Export column ACs from CONFIG_COVERAGE_FIXES.md Phase C3)

Method: TM-API

Priority: Medium

Preconditions:

  • Control labels with roles configured

Steps:

  1. Export Control Labels via API
  2. Verify export file contains ROLE TYPE and IS EXTRACTED columns
  3. Verify values are derived from Role entity

Expected Results:

  • Export includes ROLE TYPE column (derived from Role)
  • Export includes IS EXTRACTED column (derived from Role.has_extraction)
  • ROLE TYPE and IS EXTRACTED are read-only (not used during import)

Automation Status: Planned

Jira: Pending


TC-CONFIGIO-030: Reporting Cut-offs QUANT OR CT validation (Phase F3)

Verifies: REQ-CONFIGIO-012 (QUANT OR CT column AC from CONFIG_COVERAGE_FIXES.md Phase F3)

Method: TM-API

Priority: Medium

Preconditions:

  • Mixes configured

Test Data:

MIXTARGETQUANT OR CTUPPER BOUNDARYExpected
Mix1TargetAQuant1000Imported
Mix1TargetACt35Imported
Mix1TargetA(empty)1000Ignored - "Quant or Ct is not present"
Mix1TargetAInvalid1000Ignored - "Invalid option"

Steps:

  1. Import Reporting Cut-offs with QUANT OR CT test cases
  2. Retrieve status report
  3. Verify error messages

Expected Results:

  • QUANT OR CT required, valid values: "Quant" or "Ct"
  • Empty value: "Quant or Ct is not present"
  • Invalid value: "Invalid option"

Automation Status: Planned

Jira: Pending


TC-CONFIGIO-031: LIMS Export RESULT column validation (Phase F4)

Verifies: REQ-CONFIGIO-013 (RESULT column AC from CONFIG_COVERAGE_FIXES.md Phase F4)

Method: TM-API

Priority: Medium

Preconditions:

  • LIMS export codes configured

Test Data:

CODEMESSAGETYPERESULTExpected
LIMS001DetectedExcludeDETECTEDImported
LIMS002Not DetectedWarningNOT_DETECTEDImported
LIMS003UnknownInformation(empty)Imported (null result)
LIMS004InvalidWarningINVALIDIgnored - "Lims status: ignored"

Steps:

  1. Import LIMS Export configuration with RESULT column test cases
  2. Retrieve status report
  3. Verify RESULT validation

Expected Results:

  • RESULT optional, valid values: "DETECTED", "NOT_DETECTED", or null
  • Invalid RESULT: Row rejected with "Lims status: ignored"

Automation Status: Planned

Jira: Pending


TC-CONFIGIO-032: Global/Strict pattern — Reporting Cut-offs import/export (@V3_1_0)

Verifies: REQ-CONFIGIO-015 (Import AC1-AC3, Export AC1-AC2, Mapper AC1, Orphan AC1-AC2, Entity: Reporting Cut-offs)

Method: TM-API

Priority: High

Preconditions:

  • Mix "MixA" with targets "TargetA", "TargetB", "TargetC" exists
  • Quantitative reporting cut-offs configured

Test Data (Import):

MIXTARGETDYEQUANT OR CTUPPER BOUNDARYExpected
GlobalGlobalGlobalQuant1000Imported as non-strict (is_strict=false)
MixATargetAFAMCt35Imported as strict
GlobalGlobalGlobalInvalid1000Ignored — global rows still validated

Test Data (Export):

Record TypeExpected MIXExpected TARGETExpected DYE
Non-strictGlobalGlobalGlobal
StrictMixATargetAFAM

Test Data (Orphan Handling):

  1. Import global cut-off for "MixA"
  2. Delete "TargetC" from "MixA"
  3. Re-run global mapper
  4. Verify former TargetC cut-off is now strict (not deleted)

Steps:

  1. Import XLSX with "Global" rows for reporting cut-offs
  2. Verify non-strict records created with is_strict=false
  3. Verify global mapper creates per-target records for matching targets
  4. Export configuration and verify "Global" labels for non-strict rows
  5. Export configuration and verify specific names for strict rows
  6. Delete a target and re-run mapper
  7. Verify orphaned non-strict record marked strict

Expected Results:

  • Import AC1: Rows with "Global" in mix/target/dye treated as non-strict settings
  • Import AC2: Global mapping records created for non-strict rows
  • Import AC3: Global rows validated for all other required fields
  • Export AC1: Non-strict rows exported with "Global" labels
  • Export AC2: Strict rows exported with actual mix/target/dye names
  • Mapper AC1: Mapper creates non-strict cut-off records per matching target
  • Orphan AC1: Orphaned non-strict records marked strict (not deleted)
  • Orphan AC2: Orphaned rows become fixed target-specific settings
  • Entity: Reporting cut-off global rows apply to all targets in a mix

Automation Status: Planned

Jira: [Pending]


TC-CONFIGIO-033: Global/Strict pattern — Combined Outcomes import/export (@V3_1_0)

Verifies: REQ-CONFIGIO-015 (Entity: Combined Outcomes)

Method: TM-API

Priority: High

Preconditions:

  • Mixes "MixA", "MixB" with targets exist
  • Error codes and LIMS statuses configured
  • Roles configured

Test Data (Import):

MIXTARGETROLEOUTCOME TYPEis_strictExpected
GlobalGlobalSampleRoleErrorfalseImported — global outcome applies across all mixes/targets
MixATargetASampleRoleErrortrueImported — strict outcome for specific mix/target

Test Data (Export):

Record TypeExpected MIXExpected TARGET
Non-strict (is_strict=false)GlobalGlobal
Strict (is_strict=true)MixATargetA

Steps:

  1. Import combined outcomes with "Global" mix and target
  2. Verify single "global" mix entry with "global" target created (is_strict=false)
  3. Import strict combined outcome for specific mix/target
  4. Export and verify "Global" labels for non-strict rows
  5. Export and verify specific names for strict rows

Expected Results:

  • Entity: Global outcomes (is_strict=false) apply across all mixes and targets
  • Entity: Single "global" mix entry with "global" target created
  • Export: "Global" labels for non-strict rows

Automation Status: Planned

Jira: [Pending]


TC-CONFIGIO-034: Global/Strict pattern — Cross Contamination Limits import/export (@V3_1_0)

Verifies: REQ-CONFIGIO-015 (Mapper AC2, Entity: Cross Contamination Limits)

Method: TM-API

Priority: High

Preconditions:

  • Mix "MixA" with targets "TargetA", "TargetB" exists
  • Dyes configured

Test Data (Import):

MIXTARGETDYEQUANT OR CTCONTAMINATION VALUEExpected
GlobalGlobalGlobalQuant100Imported as non-strict
MixATargetAFAMCt50Imported as strict

Test Data (Orphan):

  1. Import global cross contamination limit
  2. Delete "TargetB" from "MixA"
  3. Re-run mapper
  4. Verify former TargetB adjacent record marked strict

Steps:

  1. Import XLSX with "Global" rows for cross contamination limits
  2. Verify mapper creates adjacent records for matching targets
  3. Export and verify "Global" labels for non-strict rows
  4. Delete a target and re-run mapper
  5. Verify orphaned non-strict adjacent marked strict

Expected Results:

  • Entity: Global rows use "Global" for mix/target/dye
  • Mapper: Adjacent records created for matching targets
  • Orphan: Orphaned non-strict adjacents marked strict
  • Export: Non-strict rows show "Global"; strict rows show actual names

Automation Status: Planned

Jira: [Pending]


TC-CONFIGIO-035: Global/Strict pattern — Curve Control Limits import/export (@V3_1_0)

Verifies: REQ-CONFIGIO-015 (Mapper AC2, Entity: Curve Control Limits)

Method: TM-API

Priority: High

Preconditions:

  • Mix "MixA" with targets "TargetA", "TargetB" exists
  • Control label with role alias "POS" exists for MixA
  • Control label with role alias "NEG" exists for MixA

Test Data (Import):

MIXTARGETDYEROLEExpected
GlobalGlobalGlobalPOSImported as non-strict; mapper restricted to mixes with POS control label
MixATargetAFAMPOSImported as strict

Test Data (Mapper Restriction):

  1. Import global curve control limit with ROLE = "POS"
  2. Verify mapper creates records only for targets in mixes that have a "POS" control label
  3. Mixes without "POS" control label do not receive mapped records

Steps:

  1. Import XLSX with "Global" rows for curve control limits
  2. Verify global mapping stores role_id
  3. Verify mapper restricts to targets in mixes with matching role alias (control label)
  4. Export and verify "Global" labels for non-strict rows
  5. Remove control label from a mix and re-run mapper
  6. Verify orphaned non-strict limits marked strict

Expected Results:

  • Entity: Global rows store role_id in global mapping data
  • Mapper: Restricts to targets in mixes with matching role alias (control label)
  • Orphan: Orphaned non-strict limits marked strict
  • Export: Non-strict rows show "Global"; strict rows show actual names

Automation Status: Planned

Jira: [Pending]


TC-CONFIGIO-036: Control Labels enhanced columns import/export (@V3_1_0)

Verifies: REQ-CONFIGIO-016 (AC1-AC9)

Method: TM-API

Priority: High

Preconditions:

  • Mix "MixA" with targets "TargetA", "TargetB", "TargetC"
  • Specimens "SpecA", "SpecB" configured for the site
  • Control roles configured

Test Data:

ROLEMIXVERIFY_IC_TARGET_IS_POSITIVEVERIFIABLE_TARGETSASSOCIATED_SPECIMENSExpected
POSMixATRUETargetA,TargetBSpecA,SpecBImported
POSMixAFALSE(empty)(empty)Imported (backward compatible)
POSMixA(empty)(empty)(empty)Imported (backward compatible, no verification)
POSMixAmaybe(empty)(empty)Ignored — invalid verify-IC option
POSMixATRUETargetA,NonExistent(empty)Ignored — invalid target names
POSMixATRUE(empty)(empty)Ignored — verifiable targets required when verify-IC is TRUE
POSMixAFALSE(empty)SpecA,InvalidSpecIgnored — invalid specimen names

Steps:

  1. Import XLSX with VERIFY_IC_TARGET_IS_POSITIVE, VERIFIABLE_TARGETS, and ASSOCIATED_SPECIMENS columns
  2. Verify boolean validation for VERIFY_IC_TARGET_IS_POSITIVE
  3. Verify VERIFIABLE_TARGETS validated against available targets in the mix
  4. Verify ASSOCIATED_SPECIMENS validated against site's specimens
  5. Verify empty columns cause backward-compatible behavior
  6. Export and verify new columns reflected in output
  7. Query database and verify verifiable_target_ids (JSON), verify_ic_target_is_positive, and associated_specimen_ids persisted

Expected Results:

  • AC1: VERIFY_IC_TARGET_IS_POSITIVE column supported as boolean (TRUE/FALSE)
  • AC2: VERIFIABLE_TARGETS column supported as comma-separated target names
  • AC3: ASSOCIATED_SPECIMENS column supported as comma-separated specimen names
  • AC4: Non-boolean VERIFY_IC_TARGET_IS_POSITIVE rejected with invalid verify-IC error
  • AC5: Invalid VERIFIABLE_TARGETS rejected with invalid target names error
  • AC6: Invalid ASSOCIATED_SPECIMENS rejected with error naming invalid specimens
  • AC7: Empty columns cause backward-compatible behavior (no verification/associations)
  • AC8: Imported values persisted to control_labels record (verifiable_target_ids, verify_ic_target_is_positive, associated_specimen_ids)
  • AC9: Export reflects stored values in new columns

Automation Status: Planned

Jira: [Pending]


TC-CONFIGIO-037: Control Labels re-import well migration and global mapping matching (@V3_1_0)

Verifies: REQ-CONFIGIO-017 (AC1-AC6)

Method: TM-API

Priority: High

Preconditions:

  • Mix "MixA" with targets exists
  • Control labels with role "POS" imported for MixA
  • Wells exist that reference the imported control labels
  • Global mappings exist for non-strict control labels

Test Data (Well Migration):

  1. Import control labels with role "POS" for MixA (creates control label ID=100)
  2. Create wells referencing control label ID=100
  3. Re-import control labels with role "POS" for MixA (creates new control label ID=200)
  4. Verify wells now reference control label ID=200

Test Data (Global Mapping Matching):

  1. Import global control labels with role "POS" (non-strict, is_strict=false)
  2. Import global control labels with role "NEG" (non-strict, is_strict=false)
  3. Re-import control labels — only "POS" labels matching full global mapping criteria marked strict
  4. Verify "NEG" labels unaffected

Steps:

  1. Import control labels and create wells referencing them
  2. Re-import control labels via API
  3. Verify old control labels soft-deleted (not force-deleted yet)
  4. Verify wells migrated from old to new control labels (same role_alias and mix_id)
  5. Verify old soft-deleted control labels force-deleted after migration
  6. Verify global mapping matching uses full criteria (mix, role, verify-IC, verifiable targets)
  7. Verify unrelated control labels not affected

Expected Results:

  • AC1: On re-import, existing strict control labels soft-deleted (not force-deleted)
  • AC2: Wells migrated from deleted to new control labels with same role_alias and mix_id
  • AC3: Old soft-deleted control labels force-deleted after well migration
  • AC4: Wells now point at corresponding new control labels
  • AC5: Global mapping matching uses full criteria (mix, role, verify-IC, verifiable targets)
  • AC6: Only control labels matching full global mapping marked strict; unrelated labels unaffected

Automation Status: Planned

Jira: [Pending]


TC-CONFIGIO-038: Mix/Targets quantification scope and method import/export (@V3_1_0)

Verifies: REQ-CONFIGIO-018 (AC1-AC8)

Method: TM-API

Priority: High

Preconditions:

  • Mix "MixA" with targets "TargetA", "TargetB" exists

Test Data (Quantification Scope):

MIXQUANTIFICATION_SCOPEExpected
MixA (row 1)OFFImported
MixA (row 2)OFFImported (consistent)
MixB (row 1)ALLImported
MixC (row 1)BY_SPECIMENImported
MixD (row 1)offImported (normalized to lowercase)
MixD (row 2)OFFImported (trimmed whitespace)
MixE (row 1)INVALIDImported — falls back to "OFF"
MixF (row 1)ALLIgnored — "Multiple quantification settings"
MixF (row 2)OFFIgnored — inconsistent across mix rows

Test Data (Quantification Method):

MIXQUANTIFICATION_METHODExpected
MixAStandardCurveImported
MixB(empty)Imported (null, no failure)
MixCINVALID_METHODImported (treated as null, no failure)

Test Data (Automatic Baseline):

MIXTARGETUSE_AUTOMATIC_BASELINEExpected
MixATargetATRUEImported
MixATargetBFALSEImported

Steps:

  1. Import XLSX with QUANTIFICATION_SCOPE test cases
  2. Verify normalization (lowercase, trim)
  3. Verify invalid values fall back to "OFF"
  4. Verify consistency enforcement across mix rows
  5. Import XLSX with QUANTIFICATION_METHOD test cases
  6. Verify invalid/empty method treated as null without failure
  7. Import XLSX with USE_AUTOMATIC_BASELINE test cases
  8. Verify boolean import per target
  9. Export and verify QUANTIFICATION_SCOPE, QUANTIFICATION_METHOD, USE_AUTOMATIC_BASELINE columns present

Expected Results:

  • AC1: QUANTIFICATION_SCOPE column supported with valid values: "OFF", "ALL", "BY_SPECIMEN"
  • AC2: Values normalized (lowercase, trimmed); invalid values fall back to "OFF"
  • AC3: Inconsistent QUANTIFICATION_SCOPE within mix rejected with "Multiple quantification settings"
  • AC4: Legacy QUANTITATIVE column no longer read on import
  • AC5: QUANTIFICATION_METHOD column mapped to QuantificationMethods enum; invalid/empty treated as null
  • AC6: USE_AUTOMATIC_BASELINE supported as boolean per target
  • AC7: Export replaces QUANTITATIVE with QUANTIFICATION_SCOPE (default "OFF") and QUANTIFICATION_METHOD
  • AC8: Export includes USE_AUTOMATIC_BASELINE per target

Automation Status: Planned

Jira: [Pending]


TC-CONFIGIO-039: Mix/Targets virtual target linking on import (@V3_1_0)

Verifies: REQ-CONFIGIO-018 (AC9-AC12)

Method: TM-API

Priority: Medium

Preconditions:

  • Base mix "BaseMix" with targets "TargetA" (DyeFAM), "TargetB" (DyeVIC) exists
  • Virtual mix "VirtualMix" configured with base_mix = "BaseMix"

Test Data:

MIXTARGETDYEBASE MIXExpected
BaseMixTargetAFAM(empty)Imported — base target
BaseMixTargetBVIC(empty)Imported — base target
VirtualMixVTargetAFAMBaseMixImported — virtual target linked to BaseMix/TargetA by dye
VirtualMixVTargetBVICBaseMixImported — virtual target linked to BaseMix/TargetB by dye

Steps:

  1. Import XLSX with base mix and virtual mix targets
  2. Verify virtual targets (rows with base_mix) have mix_target_id set to base target matched by dye
  3. Verify base targets are not affected by virtual target linking
  4. Export and verify round-trip integrity

Expected Results:

  • AC9: Virtual targets updated by matching base mix targets by dye
  • AC10: Virtual target's mix_target_id points at the base target
  • AC11: Conflicting QUANTIFICATION_SCOPE within mix rejected with "Multiple quantification settings" (error handling)
  • AC12: Export includes QUANTIFICATION_SCOPE and QUANTIFICATION_METHOD for round-trip

Automation Status: Planned

Jira: [Pending]


TC-CONFIGIO-043: Cross Contamination Limits import error cascade prevention (@V3_1_0)

Verifies: REQ-CONFIGIO-019 (AC1, AC2)

Method: TM-API

Priority: Medium

Preconditions:

  • Mix "MixA" with targets "TargetA", "TargetB" exists
  • Cross contamination configuration exists

Test Data:

QUANT OR CTCONTAMINATION VALUEPOTENTIAL CONTAMINATINGExpected
InvalidValue100TargetBIgnored — only quant_or_ct error reported (no cascade)
(empty)100TargetBIgnored — only quant_or_ct error reported (no cascade)
Quant-50TargetBIgnored — contamination value error reported
Quant100NonExistentIgnored — contaminating target error reported
Quant100TargetBImported

Steps:

  1. Import XLSX with invalid quant_or_ct values alongside invalid contamination values
  2. Verify status report contains only the quant_or_ct error (no cascading errors)
  3. Import XLSX with valid quant_or_ct but invalid contamination values
  4. Verify status report contains the contamination value errors
  5. Import XLSX with all valid values
  6. Verify row imported successfully

Expected Results:

  • AC1: Invalid quant_or_ct — row rejected with only quant_or_ct error; no redundant contamination value errors
  • AC2: Valid quant_or_ct with invalid contamination values — row rejected with contamination value errors

Automation Status: Planned

Jira: [Pending]


TC-CONFIGIO-044: Automatic Rule Mappings export sheet (@V3_1_0)

Verifies: REQ-CONFIGIO-020 (AC1, AC2, AC3)

Method: TM-API

Priority: Medium

Preconditions:

  • Rules configured with automatic rule mapping tags
  • Mix "MixA" with targets "TargetA", "TargetB" exists
  • Control labels with roles configured
  • Automatic rule mapper has generated mappings
  • Manual (custom) rule mappings also exist

Steps:

  1. Export configuration via API
  2. Locate the "Automatic Rule Mappings" sheet in the exported XLSX
  3. Verify sheet contains all auto-generated rule mappings
  4. Verify each row includes rule name, rule ID, role, mix, target, dye, and specimen columns
  5. Verify manual (custom) rule mappings are NOT included in this sheet
  6. Verify manual mappings still appear in the "Rules Mapping" sheet

Expected Results:

  • AC1: Export includes sheet listing all automatically generated rule-to-role-to-target mappings
  • AC2: Each row includes rule name, rule ID, role, mix, target, dye, and specimen (where applicable)
  • AC3: Sheet distinguishes auto-mapped rules from custom mappings (auto-mapped only in this sheet)

Automation Status: Planned

Jira: [Pending]


TC-CONFIGIO-045: Target Name Suffix to Specimen import (@V3_1_0)

Verifies: REQ-CONFIGIO-021 (AC1-AC6)

Method: TM-API

Priority: Medium

Preconditions:

  • Specimens "SpecA", "SpecB" configured for the site
  • No existing target name suffix mappings

Test Data:

SUFFIXSPECIMEN NAMEExpected
_SERUMSpecAImported (stored as "_SERUM" uppercase)
_plasmaSpecBImported (normalized to "_PLASMA")
_SerumSpecAIgnored — duplicate suffix (case-insensitive, "_SERUM" already exists)
_CSFNonExistentIgnored — unknown specimen name
_BALSpecAImported

Steps:

  1. Import XLSX with Target Name Suffix sheet
  2. Verify suffixes normalized to uppercase before storage
  3. Verify suffix uniqueness enforced (case-insensitive)
  4. Verify specimen names resolved against site's configured specimens
  5. Verify duplicate suffix rejected with appropriate error
  6. Verify unknown specimen rejected with error identifying invalid specimen

Expected Results:

  • AC1: Import supports Target Name Suffix sheet with suffix and specimen name columns
  • AC2: Suffixes normalized to uppercase before storage
  • AC3: Suffix uniqueness enforced (case-insensitive) within site
  • AC4: Specimen names resolved against site's configured specimens
  • AC5: Duplicate suffixes rejected with appropriate error
  • AC6: Unknown specimen names rejected with error identifying invalid specimen

Automation Status: Planned

Jira: [Pending]


TC-CONFIGIO-046: Config import progress indicator (@V3_1_0)

Verifies: REQ-CONFIGIO-022 (AC1, AC2)

Method: TM-HYB (API for import trigger, UI/WebSocket for progress verification)

Priority: Medium

Preconditions:

  • User logged in with Administrator role
  • Configuration file with multiple sheets prepared
  • WebSocket connection established (Pusher)

Steps:

  1. Upload configuration file via API
  2. Monitor WebSocket broadcasts during import
  3. Verify progress updates received as each sheet is processed
  4. Verify each update indicates which sheet is currently being imported

Expected Results:

  • AC1: System updates user on import progress as each sheet is processed
  • AC2: Progress updates indicate which sheet is currently being imported

Automation Status: Planned (requires WebSocket monitoring)

Jira: [Pending]


TC-CONFIGIO-040: Kit Configuration page has upload button for config import

Verifies: REQ-CONFIGIO-001

Method: TM-UI

Priority: Medium

Preconditions:

  • User logged in with Administrator role

Steps:

  1. Navigate to the Kit Configuration page
  2. Wait for the page to fully render

Expected Results:

  • Page displays the "Kit Configuration" screen title
  • "Upload Configuration Sheet" button is present

Automation Status: Automated (Browser)

Feature: tests/exports/browser/upload-runs.feature


TC-CONFIGIO-041: Valid config upload triggers success notification

Verifies: REQ-CONFIGIO-001 (AC1)

Method: TM-UI

Priority: High

Preconditions:

  • User logged in with Administrator role
  • Valid XLSX configuration file available

Steps:

  1. Navigate to the Kit Configuration page
  2. Upload a valid configuration file via the import dialog
  3. Wait for asynchronous processing acknowledgement

Expected Results:

  • Notification containing "submitted" is displayed after upload

Automation Status: Automated (Browser)

Feature: tests/exports/browser/upload-runs.feature


TC-CONFIGIO-042: Kit Configuration page shows data table after config import

Verifies: REQ-CONFIGIO-001

Method: TM-UI

Priority: Medium

Preconditions:

  • User logged in with Administrator role
  • Valid configuration loaded via API

Steps:

  1. Load a test configuration via API
  2. Navigate to the Kit Configuration page
  3. Wait for the page to render

Expected Results:

  • Page displays "Kit Configuration" screen title
  • "Reset Configuration Data" button is present (indicating config data exists)

Automation Status: Automated (Browser)

Feature: tests/exports/browser/upload-runs.feature


TC-CONFIGIO-B006: Config upload triggers asynchronous submission notification

Verifies: REQ-CONFIGIO-001 (AC1)

Method: TM-UI

Priority: High

Preconditions:

  • User logged in with Administrator role
  • Valid XLSX configuration file available

Steps:

  1. Navigate to the Kit Configuration page
  2. Upload a configuration file via the import dialog
  3. Wait for asynchronous job submission

Expected Results:

  • Notification containing "submitted" is displayed

Automation Status: Automated (Browser)

Feature: tests/exports/browser/config-io.feature


TC-CONFIGIO-B007: Page remains functional after config upload

Verifies: REQ-CONFIGIO-001

Method: TM-UI

Priority: Medium

Preconditions:

  • User logged in with Administrator role
  • Valid XLSX configuration file available

Steps:

  1. Navigate to the Kit Configuration page
  2. Upload a configuration file via the import dialog
  3. Verify page elements remain intact after upload

Expected Results:

  • "Kit Configuration" screen title still displayed
  • "Upload Configuration Sheet" button still present
  • "Reset Configuration Data" button still present

Automation Status: Automated (Browser)

Feature: tests/exports/browser/config-io.feature


TC-CONFIGIO-B011: Config data persists across SPA navigation

Verifies: REQ-CONFIGIO-001

Method: TM-UI

Priority: Medium

Preconditions:

  • User logged in with Administrator role
  • Valid configuration loaded via API

Steps:

  1. Load test configuration via API
  2. Navigate to the Kit Configuration page and verify data is displayed
  3. Navigate away to a different page (e.g., Runs)
  4. Return to the Kit Configuration page

Expected Results:

  • Configuration data rows are visible after initial load
  • Configuration data rows are still visible after navigating back

Automation Status: Automated (Browser)

Feature: tests/exports/browser/config-io.feature


Gap Analysis

No gaps identified. All 186 acceptance criteria have test coverage.

Coverage by AC Type

AC CategoryCountCoveredNotes
Column Support4242Verified via import/export operations (expanded for Phases B-D + v3.1.0)
Field Validation7878Verified via TM-API with test vectors (expanded for Phases B-D column ACs + v3.1.0)
Import Behavior3030Verified via status report analysis (includes global/strict, re-import, suffix)
Export Behavior2020Verified via round-trip testing (includes global/strict export, auto rule mappings)
Configuration Toggle44Verified via config state manipulation
Mapper/Orphan Behavior88Verified via global mapper and orphan handling (v3.1.0)
Progress/UI44Verified via WebSocket and browser tests (v3.1.0)

Traceability to Existing Tests

Test CaseJira TestAutomation
TC-CONFIGIO-001BT-3714Behat
TC-CONFIGIO-002PendingPartial
TC-CONFIGIO-003BT-3562PHPUnit
TC-CONFIGIO-004BT-4677PHPUnit
TC-CONFIGIO-005BT-5227, BT-5308PHPUnit
TC-CONFIGIO-006BT-4239PHPUnit
TC-CONFIGIO-007BT-3885PHPUnit
TC-CONFIGIO-008BT-5230PHPUnit
TC-CONFIGIO-009BT-3913, BT-3985PHPUnit
TC-CONFIGIO-010BT-5303PHPUnit
TC-CONFIGIO-011BT-3835, BT-4164PHPUnit
TC-CONFIGIO-012BT-3862, BT-4864PHPUnit
TC-CONFIGIO-013PendingPlanned
TC-CONFIGIO-014BT-3559PHPUnit
TC-CONFIGIO-015BT-4054PHPUnit
TC-CONFIGIO-016BT-3567PHPUnit
TC-CONFIGIO-017BT-3567PHPUnit
TC-CONFIGIO-018PendingPlanned
TC-CONFIGIO-019BT-4293PHPUnit
TC-CONFIGIO-020BT-4164, BT-4042PHPUnit
TC-CONFIGIO-021BT-3713PHPUnit
TC-CONFIGIO-022 through TC-CONFIGIO-031PendingPlanned (Phases B-D column ACs)
TC-CONFIGIO-032PendingPlanned (@V3_1_0 — Global/Strict: Reporting Cut-offs)
TC-CONFIGIO-033PendingPlanned (@V3_1_0 — Global/Strict: Combined Outcomes)
TC-CONFIGIO-034PendingPlanned (@V3_1_0 — Global/Strict: Cross Contamination Limits)
TC-CONFIGIO-035PendingPlanned (@V3_1_0 — Global/Strict: Curve Control Limits)
TC-CONFIGIO-036PendingPlanned (@V3_1_0 — Control Labels Enhanced Columns)
TC-CONFIGIO-037PendingPlanned (@V3_1_0 — Control Labels Re-import)
TC-CONFIGIO-038PendingPlanned (@V3_1_0 — Quantification Scope/Method)
TC-CONFIGIO-039PendingPlanned (@V3_1_0 — Virtual Target Linking)
TC-CONFIGIO-043PendingPlanned (@V3_1_0 — Cross Contamination Validation)
TC-CONFIGIO-044PendingPlanned (@V3_1_0 — Automatic Rule Mappings Export)
TC-CONFIGIO-045PendingPlanned (@V3_1_0 — Target Name Suffix Import)
TC-CONFIGIO-046PendingPlanned (@V3_1_0 — Config Import Progress)
TC-CONFIGIO-040BrowserBehat (Browser)
TC-CONFIGIO-041BrowserBehat (Browser)
TC-CONFIGIO-042BrowserBehat (Browser)
TC-CONFIGIO-B006BrowserBehat (Browser)
TC-CONFIGIO-B007BrowserBehat (Browser)
TC-CONFIGIO-B011BrowserBehat (Browser)

Notes

  • CONFIGIO is a backend-heavy domain with deterministic validation logic
  • TM-API is primary method per Test Plan Section 3.2 for configuration import/export
  • Most test cases leverage parameterized test data tables for comprehensive coverage
  • TC-CONFIGIO-002 includes manual verification for keyboard shortcut (P key)
  • TC-CONFIGIO-013, TC-CONFIGIO-018 pending automation due to missing Jira tests
  • TC-CONFIGIO-022 through TC-CONFIGIO-031 added for column-level ACs from CONFIG_COVERAGE_FIXES.md Phases B-D
  • TC-CONFIGIO-032 through TC-CONFIGIO-039, TC-CONFIGIO-043 through TC-CONFIGIO-046 added for v3.1.0 REQs (REQ-CONFIGIO-015 through 022), all tagged @V3_1_0
  • TC-CONFIGIO-005 updated to include cross-field dependency ACs (AC13, AC14) for REQ-CONFIGIO-003 @V3_1_0
  • TC-CONFIGIO-040 through TC-CONFIGIO-042 are browser-level TCs from upload-runs.feature covering upload button presence, notification, and data display
  • TC-CONFIGIO-B006, TC-CONFIGIO-B007, TC-CONFIGIO-B011 are browser-level TCs from config-io.feature covering async notification, page stability, and SPA data persistence