Config Import/Export
Version: v3.0.0 Status: Normative (text), Illustrative (diagrams only) Scope: Bulk configuration management via XLSX spreadsheet import and export Domain: CONFIGIO
Statement
The system shall enable administrators to import and export configuration data using XLSX spreadsheet files, supporting bulk management, environment migration, backup, and customer documentation.
Configuration import/export covers 14 distinct configuration types including mixes and targets, combined outcomes, control labels, error codes, rules, and more. Each import operation generates a status report showing which rows were imported or ignored with reasons, while exports produce files that can be round-tripped back into the system.
Behavior Overview (Illustrative)
This diagram illustrates the high-level behavior. It does not specify UI layout, styling, or interaction details.
Definitions
| Term | Definition |
|---|---|
| Alternative Configuration | Configuration data imported via spreadsheet as alternative to UI-based configuration |
| Import Status Report | Generated XLSX file showing success/failure status for each imported row |
| Precedence Normalization | Automatic reordering of rule precedence values to remove gaps and resolve duplicates |
| Round-trip | Import followed by export that preserves all data without loss |
Functional Requirements
Import Status Reporting (REQ-CONFIGIO-001)
FR-CONFIGIO-001 Generate Import Status Reports
The system shall generate an import status report for each configuration sheet import operation, indicating which rows were successfully imported and which were ignored.
Acceptance Criteria:
Notification:
- Upon import completion, the system shall display a notification with the sheet name, count of imported rows, and count of ignored rows
Report Generation:
- The system shall provide a downloadable report with a Status column appended to the imported sheet
- Each row's Status shall be set to "Imported" or "Ignored"
- Ignored rows shall include the reason for rejection
Trace: Source: 3.0.0-Alternative Configuration Sheet Import (Rows 1-3) | Jira: BT-2861 | Tests: BT-3714
Customer Documentation Export (REQ-CONFIGIO-002)
FR-CONFIGIO-002 Export Customer-Friendly Configuration
The system shall allow users to export a human-readable version of kit configuration formatted for customer review and documentation purposes.
Acceptance Criteria:
File Generation:
- The system shall generate an XLSX file containing customer-friendly configuration data
- The exported file shall be named using the pattern
customer-friendly-kit-configurations-<site_name>.xlsx
Trigger:
- The export shall be triggerable via keyboard shortcut
Trace: Source: 3.0.0-Customer Friendly Kit Configuration Export (Rows 1-2) | Jira: BT-3939 | Tests: [Pending]
Mix and Targets Configuration (REQ-CONFIGIO-003)
FR-CONFIGIO-003 Import and Export Mixes and Targets Configuration
The system shall support import and export of Mixes and Targets configuration data, validating field constraints during import.
Acceptance Criteria:
Supported Columns:
- Import/Export shall support columns: MINIMUM FLUORESCENCE, IS QUANTITATIVE, MINIMUM FLUORESCENCE TO BE POSITIVE, USE_PASSIVE_DYE, MAX CT FOR CLS DISCREPANCY, MAX CT FOR CT DISCREPANCY, PREPEND CYCLES, QUANTITATIVE, DISABLED, TARGET ORDER, CALIBRATION FILE PATH, CHECK CLS DISCREPANCY, EXPECTED THRESHOLD, EXPORT NAME, PREFERRED RESULT PROVIDER, CT DISCREPANCY DELTA, MAXIMUM FLUORESCENCE, ENABLED
Field Validation:
- Import shall validate MINIMUM FLUORESCENCE against precision limits (16 integer places, 16 decimal places)
- Import shall validate IS QUANTITATIVE as boolean (TRUE/FALSE)
- Import shall validate Expected Threshold as whole number within configured range
- Import shall validate MAX CT values as numeric between 1 and 100, allowing null
- Import shall validate PREPEND CYCLES as non-negative integer
- Import shall validate QUANTITATIVE as optional boolean; must be consistent across all targets in the same mix; defaults to false when empty
- Import shall validate DISABLED as optional boolean; when true, the mix is disabled; defaults to false when empty
- Import shall validate TARGET ORDER as optional integer; when provided for any target in a mix, must be provided for all targets in that mix; must be numeric
- Import shall validate CALIBRATION FILE PATH as optional string; sets calibration timestamp when provided
- Import shall validate CHECK CLS DISCREPANCY as optional boolean; defaults to true when empty
- Import shall validate EXPECTED THRESHOLD as optional float greater than 0; maximum 1000 for passive targets, maximum 100000000 for non-passive targets
- Import shall validate EXPORT NAME as optional string
- Import shall validate PREFERRED RESULT PROVIDER as required string with allowed values "MACHINE" or "DXAI"
- Import shall validate CT DISCREPANCY DELTA as optional float; threshold for CT discrepancy detection
- Import shall validate MAXIMUM FLUORESCENCE as optional decimal (32 integer places, 10 decimal places)
- Import shall validate ENABLED (is_enabled) as optional boolean; defaults to true when empty; when false, target is disabled
Passive Target Rules:
- Import shall enforce that each mix has at most one passive target
- Import shall validate Expected Threshold for passive targets as greater than 0 and maximum 1000
- Import shall validate Expected Threshold for non-passive targets as greater than 0 and maximum 100000000
- When multiple targets have is_passive = true for same mix, the system shall reject all rows for that mix
Import/Export Behavior:
- Invalid rows shall be rejected with appropriate error messages
- Export shall include all configured values for supported columns
Error Handling:
- MINIMUM FLUORESCENCE exceeds precision limits: The system shall reject the row and report "Value exceeds maximum precision"
- IS QUANTITATIVE not TRUE/FALSE: The system shall reject the row and report invalid boolean value
- Multiple passive targets for same mix: The system shall reject all rows for that mix with error "More than 1 passive target defined"
- MAX CT outside valid range: The system shall reject the row and report "Value must be between 1 and 100"
- PREPEND CYCLES negative or non-integer: The system shall reject the row and report validation error
- QUANTITATIVE values inconsistent within mix: The system shall reject all rows for that mix with error "Multiple quantification settings"
- QUANTITATIVE not valid boolean: The system shall reject the row and report "Invalid quantification"
- TARGET ORDER partially filled: The system shall reject all rows for that mix with error "Must fill all orders or not fill at all"
- TARGET ORDER non-numeric: The system shall reject the row and report "Order must be numeric"
- EXPECTED THRESHOLD invalid for passive target (>1000 or <=0): The system shall reject the row and report "Expected threshold must be between 0 and 1000"
- EXPECTED THRESHOLD invalid for non-passive target (>100000000 or <=0): The system shall reject the row and report "Expected threshold must be between 0 and 100000000"
- PREFERRED RESULT PROVIDER not "MACHINE" or "DXAI": The system shall reject the row and report invalid result provider
Trace: Source: 3.0.0-Minimum Fluorescence For Mixes and Targets Configuration Import/Export (Rows 1-3), 3.0.0-Config Import : Mixes and Targets sheet - Add Is Quantitative column (Row 1), 3.0.0-Mix and Target Import sheet - Validate expected threshold (Row 1), 3.0.0-Mixes / Targets Import - Consider Passive Dye (Rows 1-3), 3.0.0-Import/Export - 'Max CT for CLS/CT Discrepancy', 3.0.0-Import/Export - Cycle Counts for Targets, 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-3552, BT-4367, BT-4604, BT-5368, BT-5227, BT-5308, BT-4829 | Tests: BT-3562, BT-4677
Combined Outcomes Configuration (REQ-CONFIGIO-004)
FR-CONFIGIO-004 Import and Export Combined Outcomes Configuration
The system shall support import and export of Combined Outcomes configuration with comprehensive validation to ensure data integrity and consistency.
Acceptance Criteria:
Supported Columns:
- Import/Export shall support columns: MIX, TARGET, ROLE, OUTCOME TYPE, WELL ERROR OR LIMS CODE, TARGET ERROR CODE, TARGET TO HAVE ERROR, IC FAILED, PRIORITY, NAME, CLS DISCREPANCY REQUIRED, CT DISCREPANCY REQUIRED, ALLOW OTHER RUNS TO BE USED, IS REPEAT, MIXES MISSING, MIX LEVEL OUTCOME TYPE, MIX LEVEL WELL ERROR CODE/LIMS CODE, MIX MISSING, USE_LATEST_UPLOADED_WELL, REQUIRED HISTORY OUTCOMES, RESULT, MIN CT, MAX CT, MIN QUANTITY, MAX QUANTITY, SPECIMEN
Mix Result Level Columns:
- Import shall 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
- Import shall validate IS REPEAT as optional boolean (default: false); when true, requires a matching historical well with the same outcome
- Import shall validate MIXES MISSING as optional boolean (default: false); when true, combined outcome applies when specified mixes are NOT present
- Import shall validate MIX LEVEL OUTCOME TYPE as optional string ("Error" or "Lims"); required if MIX LEVEL WELL ERROR CODE/LIMS CODE is filled
- Import shall 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)
- Import shall validate MIX MISSING as optional boolean (default: false); when true, the specific mix should NOT be present; all rows for same outcome must have consistent values
- Import shall validate USE_LATEST_UPLOADED_WELL as optional boolean (default: false); when true, prioritizes most recently uploaded well
- Import shall 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
Target Result Level Columns:
- Import shall validate RESULT as optional string; must be one of: "Pos", "Neg", "Any", "Classification / Discrepancy"
- Import shall validate MIN CT as optional integer between 1-90; when both MIN CT and MAX CT are provided, MAX CT must be >= MIN CT
- Import shall validate MAX CT as optional integer between 1-90; when both MIN CT and MAX CT are provided, MAX CT must be >= MIN CT
- Import shall validate MIN QUANTITY as optional decimal > 0 and <= 9999999999999999999999.9999999999; when both MIN and MAX are provided, MAX must be >= MIN
- Import shall validate MAX QUANTITY as optional decimal > 0 and <= 9999999999999999999999.9999999999; when both MIN and MAX are provided, MAX must be >= MIN
- Import shall validate SPECIMEN as optional string; must exist in Specimens configuration when use_sample_type is enabled; must be empty when disabled; "Any" or blank applies to all specimens
Role Validation:
- Import shall validate ROLE as required, existing in Roles configuration, and not Ignore-typed
- Import shall enforce Sample-typed roles have empty TARGET ERROR CODE and TARGET TO HAVE ERROR fields
Outcome Type Validation:
- Import shall validate OUTCOME TYPE as required, either "Error" or "Lims"
- Import shall enforce Control-typed roles can only have "Error" outcome type
Code Validation:
- Import shall validate WELL ERROR CODE / LIMS CODE exists in appropriate configuration
- Import shall validate TARGET ERROR CODE is empty for Sample-typed roles, optional for Control-typed
- Import shall validate TARGET TO HAVE ERROR belongs to the specified mix when provided
Priority and Discrepancy:
- Import shall validate PRIORITY as numeric
- Imported priorities shall merge with existing priorities, shifting existing rows to accommodate
- Import shall validate discrepancy required fields as boolean or blank
- The system shall disable multi-run combined outcome feature when discrepancy requirements are used
- Import shall interpret blank discrepancy values as "Any" (no discrepancy requirement)
Round-trip:
- Export shall include all configured combined outcomes with all properties
- IC FAILED value shall be preserved during round-trip import/export
Error Handling:
- ROLE is blank or missing: The system shall reject the row and report "ROLE is required"
- ROLE does not exist: The system shall reject the row and report "ROLE not found in configuration"
- OUTCOME TYPE invalid: The system shall reject the row and report "OUTCOME TYPE must be Error or Lims"
- Unsupported outcome code: The system shall reject the row and report "Outcome code is not supported"
- TARGET ERROR CODE provided for Sample role: The system shall reject the row and report "TARGET ERROR CODE must be empty for Sample roles"
- PRIORITY non-numeric: The system shall reject the row and report "PRIORITY must be numeric"
- ALLOW OTHER RUNS TO BE USED with discrepancy enabled: The system shall reject the row and report "'Use other runs' not allowed because CLS discrepancy or CT discrepancy is required"
- ALLOW OTHER RUNS TO BE USED invalid boolean: The system shall reject the row and report "Invalid 'other runs to be used' value"
- IS REPEAT invalid boolean: The system shall reject the row and report "Invalid is repeat"
- MIXES MISSING invalid boolean: The system shall reject the row and report "Invalid mixes missing"
- MIX MISSING invalid boolean: The system shall reject the row and report "Invalid mix missing"
- MIX MISSING inconsistent across rows: The system shall reject the row and report "mix_missing values must be consistent"
- MIX LEVEL OUTCOME TYPE without code: The system shall reject the row and report "mix level: well error code or lims code filled without selecting outcome type"
- MIX LEVEL OUTCOME TYPE invalid: The system shall reject the row and report "mix level: invalid outcome type"
- USE_LATEST_UPLOADED_WELL invalid boolean: The system shall reject the row and report "Invalid use recent run"
- REQUIRED HISTORY OUTCOMES without repeat or other runs: The system shall reject the row and report "Previous well outcomes are not allowed"
- REQUIRED HISTORY OUTCOMES invalid outcome: The system shall reject the row and report "previous well outcomes are invalid"
- RESULT invalid value: The system shall reject the row and report "Result not found"
- MIN CT not integer: The system shall reject the row and report "CT value is not integer"
- MIN CT or MAX CT out of range: The system shall reject the row and report "CT is not in valid range"
- MAX CT < MIN CT: The system shall reject the row and report "Max CT is not greater than to min CT"
- MIN QUANTITY or MAX QUANTITY not numeric: The system shall reject the row and report "Quantity is not numeric"
- MIN QUANTITY or MAX QUANTITY out of range: The system shall reject the row and report "Quantity is not in valid range"
- MAX QUANTITY < MIN QUANTITY: The system shall reject the row and report "Max quantity is not greater than to min quantity"
- SPECIMEN invalid when use_sample_type enabled: The system shall reject the row and report "Invalid specimen name"
- SPECIMEN filled when use_sample_type disabled: The system shall reject the row and report "Specimen is filled when 'use sample type' config is disabled"
Trace: Source: 3.0.0-Combined Outcomes - Import / Export with Spread Sheet (Rows 1-17), CONFIG_COVERAGE_FIXES.md Phase B1, 3.0.0-Prevent Un Supported Outcomes (Row 1), 3.0.0-Client Configurations Combined Outcomes Import/Export - Add IC Fail Option, 3.0.0-Add Priority/Name - Import/Export, 3.0.0-Import/Export - CLS/CT Discrepancy Required | 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 | Jira: BT-3584, BT-4231, BT-3876, BT-4318, BT-5226, BT-5308 | Tests: BT-4239, BT-3885, BT-5230
Control Labels Configuration (REQ-CONFIGIO-005)
FR-CONFIGIO-005 Import and Export Control Labels Configuration
The system shall support import and export of Control Labels configuration including backup mixes, wildcards, IC delta check exclusion, and resolution priority settings.
Acceptance Criteria:
Supported Columns:
- Import/Export shall support columns: BACKUP MIXES, LABELS_IN_IMPORTED_RUNFILE, EXCLUDE FROM IC DELTA CHECK, RESOLUTION PRIORITY
Control Labels Export Columns:
- ROLE: The role name associated with the control label mapping
- ROLE TYPE: The type of the associated role; valid values are PC, NC, Sample, Ignore, Quantification, Quantification & PC, Crossover; derived from the Role entity and exported as read-only
- 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 and exported as read-only; when Y, wells must have an actual extraction date; when N, the system uses runfile creation 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
Format Validation:
- BACKUP MIXES shall be formatted as pipe-separated mix names
- Import shall validate wildcard notation ("*") is not in the middle of role alias
- Import shall validate EXCLUDE FROM IC DELTA CHECK as Yes/No/empty
Conditional Import:
- RESOLUTION PRIORITY shall only be imported when client config "Use role priority for resolution" is enabled
- Sample, Ignore, and Crossover role types shall not accept resolution priority
Export:
- Export shall include all configured values for supported columns
- ROLE TYPE and IS EXTRACTED are derived from Role entity and exported as read-only columns
Error Handling:
- Wildcard "*" appears in middle of role alias: The system shall reject the row and report invalid wildcard format
- Resolution priority on invalid role type: The system shall reject the row and report "Role type cannot have resolution priority"
Trace: Source: 3.0.0-Control Labels Import/Export - Add backup mixes, 3.0.0-Import - Validate Wildcards in Control Label, 3.0.0-Roles Import/Export sheet - Add EXCLUDE FROM IC DELTA CHECK column, 3.0.0-Roles Import/Export - add role priority for resolution, CONFIG_COVERAGE_FIXES.md Phase C3 | Code: app/Imports/Sheets/ControlLabelsImportSheet.php, app/Role.php, app/Exports/ControlLabelsExport.php | Jira: BT-3883, BT-3965, BT-5287, BT-4900 | Tests: BT-3913, BT-3985, BT-5303
Error Codes Configuration (REQ-CONFIGIO-006)
FR-CONFIGIO-006 Import and Export Error Codes Configuration
The system shall support import and export of Error Codes configuration including error type, inhibition status, and missing mixes flag.
Acceptance Criteria:
Supported Columns:
- Import/Export shall support columns: ERROR CODE, ERROR TYPE, IS INHIBITED, CAUSES MISSING MIXES, DEFAULT LIMS EXPORT
Data Values:
- ERROR TYPE shall support "Associate Control Error" type
- IS INHIBITED and CAUSES MISSING MIXES shall be boolean values
- DEFAULT LIMS EXPORT shall be an optional string matching an existing LIMS status code
Import/Export Behavior:
- Import shall create or update error codes based on import data
- Export shall include all error codes with configured properties
Error Handling:
- Invalid DEFAULT LIMS EXPORT value (not matching any LIMS status code): The system shall reject the row and report "Default Lims Status does not match with any available Lims Statuses"
Assumptions:
- User has Super Administrator role
Trace: Source: 3.0.0-Associate Error Type - Config Import / Export, 3.0.0-Error codes config import/export sheet - Add is inhibited column, 3.0.0-"Error codes" config import/export sheet - add Causes Missing Mixes column, CONFIG_COVERAGE_FIXES.md Phase B4 | Code: app/Imports/Sheets/ErrorCodesImportSheet.php, LimsStatusValidator.php | Jira: BT-3734, BT-4150, BT-4505 | Tests: BT-3835, BT-4164
Error Resolutions Configuration (REQ-CONFIGIO-007)
FR-CONFIGIO-007 Import and Export Error Resolutions Configuration
The system shall support import and export of Error Resolution configuration including resolution level settings.
Acceptance Criteria:
Supported Columns:
- Import/Export shall support columns: RESOLUTION LEVEL, RESOLUTION NUMBER, DROPDOWN CODE, DROPDOWN MESSAGE, OTHER WELLS AFFECTED BY RESOLUTION, LIMS MESSAGE
Validation:
- Import shall validate RESOLUTION LEVEL as one of: "Well", "All Observations", "Discrepant Observations"
- Import shall validate RESOLUTION NUMBER as required integer referencing an existing resolution message number for the site
- Import shall validate DROPDOWN CODE and DROPDOWN MESSAGE as paired values (both provided or both empty); creates/updates resolution dropdown entry; when multiple resolutions share the same resolution message number, these values populate the dropdown selector shown to users when resolving wells
- Import shall validate OTHER WELLS AFFECTED BY RESOLUTION as optional comma-separated list of LIMS status codes or "ALL WELLS"
- Import shall reject rows where OTHER WELLS AFFECTED BY RESOLUTION contains "ALL WELLS" combined with other values
- Import shall validate LIMS MESSAGE as optional string specifying the custom LIMS export message; when set, this message overrides the standard LIMS status message in well outcome displays
- Import shall prevent adding resolutions to non-resolvable errors (ONE_STANDARD_CONTROL, STANDARD_WITHOUT_QUANT)
Export:
- Export shall include all configured error resolutions with columns: RESOLUTION LEVEL, RESOLUTION NUMBER, DROPDOWN CODE, DROPDOWN MESSAGE, OTHER WELLS AFFECTED BY RESOLUTION, LIMS MESSAGE
Error Handling:
- Invalid RESOLUTION LEVEL value: The system shall reject the row and mark as "Ignored"
- RESOLUTION NUMBER empty or no matching resolution message: The system shall reject the row and mark as "Ignored" with reason "Resolution number is not filled" or "No matching resolution message"
- OTHER WELLS AFFECTED BY RESOLUTION contains "ALL WELLS" with other values: The system shall reject the row and mark as "Ignored" with reason "Can't have other lims along with all wells"
- Resolution added to non-resolvable error: The system shall reject the row and report "Cannot add resolution to non-resolvable error"
Assumptions:
- User has Super Administrator role
Trace: Source: 3.0.0-Resolution Code Configuration Import / Export - Resolution Level, 3.0.0-Prevent Adding Resolutions to Non Resolvable Errors, 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-3817, BT-4845 | Tests: BT-3862, BT-4864
Help Items Configuration (REQ-CONFIGIO-008)
FR-CONFIGIO-008 Import and Export Help Items Configuration
The system shall support import and export of Help Items configuration including all help item properties.
Acceptance Criteria:
Supported Columns:
- Import/Export shall support columns: ORDER, TITLE, DESCRIPTION, TAGS, VIDEO, PAGES AVAILABLE
Field Validation:
- Import shall validate ORDER as required integer; must be unique within import; rows are sorted by order before processing
- Import shall validate TITLE as required string (max 255 characters); used to match existing help items for update
- Import shall validate DESCRIPTION as required string
- Import shall validate TAGS as optional comma-separated string; empty/null results in empty tags array
- Import shall validate VIDEO as optional string; when provided, must match an existing HelpVideo filename (without extension)
- Import shall validate PAGES AVAILABLE as required comma-separated list of page names; all page names must exist in the system's page list (e.g., "Run Files, User Management, Audits")
Import Behavior:
- Rows are sorted by ORDER before processing
- Existing help items are matched by TITLE; if found, the item is updated; otherwise a new item is created
- Invalid rows (missing required fields, invalid video reference, or invalid page names) are marked as "Help item: ignored"
Tags Format:
- Multiple tags shall be comma-separated (e.g., "tag1, tag2, tag3")
- Empty/null tags shall result in empty tags value
- Export shall format tags as comma-separated values or blank cell
Error Handling:
- ORDER is empty or null: The system shall reject the row and mark as "Help item: ignored"
- ORDER is not unique within import: The system shall reject the duplicate row and mark as "Help item: ignored"
- TITLE is empty or null: The system shall reject the row and mark as "Help item: ignored"
- DESCRIPTION is empty or null: The system shall reject the row and mark as "Help item: ignored"
- PAGES AVAILABLE is empty or null: The system shall reject the row and mark as "Help item: ignored"
- PAGES AVAILABLE contains invalid page name: The system shall reject the row and mark as "Help item: ignored"
- VIDEO references non-existent HelpVideo: The system shall reject the row and mark as "Help item: ignored"
Trace: Source: 3.0.0-Import - Help Items Sheet - Import Tags, 3.0.0-Export - Help Items Sheet - Include Tags in Table, 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]
Rules Configuration (REQ-CONFIGIO-009)
FR-CONFIGIO-009 Import and Export Rules Configuration
The system shall support import and export of Rules configuration including error well handling and automatic precedence normalization.
Acceptance Criteria:
Supported Columns:
- Import/Export shall support columns: TITLE, PROGRAMMATIC RULE NAME, TYPE, RULE DESCRIPTION, PRECEDENCE, IS ALLOW ERROR WELLS
- Import shall validate TITLE as required string
- Import shall validate PROGRAMMATIC RULE NAME as required string; serves as unique identifier per site; used as lookup key with site_id to match or create rules
- Import shall validate TYPE as required string; must be one of: Parse, Import, Reanalysis, General, Reporting, Observation, Control Check, Sample Result, Apply Controls, Sample Check
- Import shall validate RULE DESCRIPTION as required text; human-readable description of the rule's purpose
- Import shall validate PRECEDENCE as required integer; represents relative ordering within rule type
- IS ALLOW ERROR WELLS null/empty values shall be treated as false
- Non-boolean IS ALLOW ERROR WELLS values shall be treated as false
Precedence Normalization:
- Import shall normalize precedence based on rule type and relative precedence
- Rule type precedence order shall be: Observation(1), Control Check(2), Sample Result(3), Apply Controls(4), Sample Check(5), Parse/Import/Reanalysis/General/Reporting(6)
- Relative precedences within type shall be normalized (gaps removed)
- Duplicate precedences within type shall be resolved (later rows get higher precedence)
- New imported rules shall take priority over existing rules at same precedence
Export:
- Export shall include all rule properties with columns: TITLE, PROGRAMMATIC RULE NAME, TYPE, RULE DESCRIPTION, PRECEDENCE, IS ALLOW ERROR WELLS
Rules Mapping Sheet (Supported Columns):
- 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
- Import shall validate RULE ID as required string; must match an existing rule's programmatic_rule_name
- Import shall validate DYE as required string when TARGET is not "global"; used together with MIX to identify the target for the rule mapping
- Import shall validate ROLE as required string; must match an existing role's role_name
- Import shall validate SPECIMEN NAME as required when use_sample_type is enabled and role is sample-typed; must match an existing specimen
- TARGET value "global" indicates a global mapping (applies to all targets); when not "global", MIX and DYE are used to look up the specific target
Rules Mapping Sheet (Export):
- Export shall include all rule mappings with columns: RUN ORDER, RULE, TYPE, RULE DESCRIPTION, RULE ID, SPECIMEN NAME, ROLE, MIX, TARGET, DYE
Error Handling:
- Missing TITLE, PROGRAMMATIC RULE NAME, TYPE, or RULE DESCRIPTION: The system shall reject the row and mark as "Ignored"
- RULE ID empty: The system shall reject the row with reason "Rule id is not filled"
- RULE ID not matching any rule: The system shall reject the row with reason "No matching rule"
- MIX provided without DYE (or vice versa): The system shall reject the row with reason "Invalid mix and dye combination"
- MIX/DYE combination not matching any target: The system shall reject the row with reason "No matching target"
- Target is passive and map_passive_observation_roles is disabled: The system shall reject the row with reason "Matching target is passive"
- ROLE not matching any role: The system shall reject the row with appropriate error
Trace: Source: 3.0.0-Rules - Allow Error Wells - Import / Export, 3.0.0-Config Import - Rules - Normalize Precedence Order Based on Rule Type and Relative Precedence (Rows 1-5), 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-3519, BT-4035 | Tests: BT-3559, BT-4054
QIR Quantification Settings (REQ-CONFIGIO-010)
FR-CONFIGIO-010 Import and Export QIR Quantification Settings
The system shall support import and export of Calculate Quantification Settings configuration with comprehensive validation rules.
Acceptance Criteria:
Supported Columns:
- Import/Export shall support columns: TARGET, SLOPE, INTERCEPT, MIN SLOPE, MAX SLOPE, MIN EFFICIENCY, MAX EFFICIENCY, MIN R2, MIN CONTROLS
Validation Rules:
- Import shall validate TARGET as required and existing in target table
- Import shall require SLOPE and INTERCEPT together (both or neither)
- Import shall validate MIN/MAX SLOPE as null or decimal with min <= max
- Import shall validate MIN/MAX EFFICIENCY as null or decimal with min <= max
- Import shall validate MIN R2 as null or decimal between 0 and 1
- Import shall validate MIN CONTROLS as null or integer >= 2
Export:
- Export shall include all quantification settings with all properties
Error Handling:
- TARGET not found: The system shall reject the row and report "Target not found"
- SLOPE without INTERCEPT (or vice versa): The system shall reject the row and report "SLOPE and INTERCEPT must be provided together"
- MIN R2 outside 0-1 range: The system shall reject the row and report "MIN R2 must be between 0 and 1"
- MIN CONTROLS < 2: The system shall reject the row and report "MIN CONTROLS must be at least 2"
- Min value greater than max value: The system shall reject the row and report "Minimum cannot exceed maximum"
Trace: Source: 3.0.0-Calculate Quantification Settings Export, 3.0.0-Calculated Quantification Settings - XLSX Validation | Jira: BT-3554, BT-4002 | Tests: BT-3567
Westgard Limits Configuration (REQ-CONFIGIO-011)
FR-CONFIGIO-011 Validate Westgard Limits on Import
The system shall validate Standard Deviation values when importing Westgard Limits configuration.
Acceptance Criteria:
Validation:
- Import shall validate SD as a number greater than 0
- Rows with SD = 0 shall be ignored
- Rows with valid SD > 0 shall be imported
- Import shall 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
- Import shall 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
Error Handling:
- Invalid DYE (not matching any dye when TARGET is not "Global"): The system shall reject the row with appropriate error
- Invalid RANGE START DATE (empty, null, or invalid format): The system shall reject the row and report "Invalid date format. Expected a valid date string or Excel serial number."
Trace: Source: 3.0.0-Westgard limits Import sheet - Validate SD, CONFIG_COVERAGE_FIXES.md Phase C7 | Code: app/Imports/Sheets/WestgardLimitsImportSheet.php, WestgardLimitDataExtractor.php, DateValidator.php, DateCaster.php | Jira: BT-4696 | Tests: [Pending]
Reporting Cut-offs Configuration (REQ-CONFIGIO-012)
FR-CONFIGIO-012 Import Quantitative/Qualitative Reporting Cut-offs
The system shall support import of Reporting Cut-offs configuration with validation based on sample type settings.
Acceptance Criteria:
Supported Columns:
- Import shall support columns: MIX, TARGET, SPECIMEN TYPE, QUANT OR CT, GROUP, GROUP DESCRIPTION, UPPER BOUNDARY
- Validate QUANT OR CT as required string; valid values: "Quant" or "Ct"
- Validate GROUP as optional integer (1-9 for RQUANT, 1 for RQUAL/RQUANTASQUAL); defaults to 1
- Validate GROUP DESCRIPTION as optional string; defaults to "LoD"
- Validate UPPER BOUNDARY as required numeric value
- Validate MIX as required string; must match existing mix name
- Validate TARGET as required string; "Global" applies to all targets in mix; otherwise must match existing target within mix
When "use sample type" is ENABLED:
- Rows with specimen type shall be saved with specimen association
- Specimen must have test code mapping for the specified mix
- Rows without specimen type shall be imported without specimen association
When "use sample type" is DISABLED:
- Rows with specimen type shall be rejected
- Rows without specimen type shall be imported normally
Error Handling:
- Invalid QUANT OR CT (empty or invalid value): The system shall reject the row and report "Quant or Ct is not present" or "Invalid option"
- Invalid MIX (not matching any mix): The system shall reject the row with appropriate error
- Invalid TARGET (not matching any target when not "Global"): The system shall reject the row with appropriate error
- Invalid specimen/mix mapping: The system shall reject the row and report "Specimen does not have mapping for given mix"
- Specimen provided when disabled: The system shall reject the row and report "Specimen is filled when 'use sample type' config is disabled"
Trace: Source: 3.0.0-Quantitative Reportings Import - Validate for specimen (Rows 1-6), CONFIG_COVERAGE_FIXES.md Phase F3 | Jira: BT-4211 | Tests: BT-4293
LIMS Export Configuration (REQ-CONFIGIO-013)
FR-CONFIGIO-013 Import and Export LIMS Export Configuration
The system shall support import and export of LIMS Export configuration including inhibition and analysis prevention settings.
Acceptance Criteria:
Supported Columns:
- Import/Export shall support columns: CODE, MESSAGE, TYPE, RESULT, DOES PREVENT ANALYSE, CAUSES MISSING MIXES, IS INHIBITED
Validation:
- Import shall validate CODE as required string; must be unique per site
- Import shall validate MESSAGE as required string
- Import shall validate TYPE as required string; must be one of: "Warning", "Exclude", "Information"
- Import shall validate RESULT as optional string; must be one of: "DETECTED", "NOT_DETECTED" when provided; null indicates no result classification
- Import shall validate DOES PREVENT ANALYSE as optional boolean (YES/NO) via BooleanCaster (default: true)
- Import shall validate CAUSES MISSING MIXES as optional boolean via BooleanCaster (default: false)
- Import shall validate IS INHIBITED as optional boolean via BooleanCaster (default: true)
Error Handling:
- Missing CODE, MESSAGE, or TYPE: Reject row with status "Lims status: ignored"
- Invalid RESULT value: Reject row with status "Lims status: ignored"
- Invalid boolean value: Reject row with status "Lims status: ignored"
Import/Export Behavior:
- Import shall create or update LIMS export entries based on CODE (unique key per site)
- Export shall include all LIMS export entries with configured properties
Trace: Source: 3.0.0-LIMS Export - Import/Export - add is inhibited/Causes Missing Mixes/Does Prevent Analyse columns, CONFIG_COVERAGE_FIXES.md Phase F4 | Jira: BT-4505, BT-4150, BT-4027 | Tests: BT-4164, BT-4042
Extraction Instruments Toggle (REQ-CONFIGIO-014)
FR-CONFIGIO-014 Apply Extraction Instruments Toggle on Import
The system shall conditionally import Westgard configuration rows based on the Use Extraction Instruments client configuration toggle.
Acceptance Criteria:
Toggle Behavior:
- When Use Extraction Instruments is ON, Westgard rows without Extraction Instruments shall be ignored
- When Use Extraction Instruments is OFF, Westgard rows with Extraction Instruments shall be ignored
- Ignored rows shall show status "Ignored" in the import report
Trace: Source: 3.0.0-Alternative Configuration Sheet Import depending on the Use Extraction Instruments toggle condition (Rows 1-3) | Jira: BT-2984 | Tests: BT-3713
Configuration Options
| Option | Default | Description | Affects |
|---|---|---|---|
| use_extraction_instruments | false | Toggle for extraction instrument-based Westgard import behavior | REQ-CONFIGIO-014 |
| use_role_priority_for_resolution | false | Enable resolution priority import for Control Labels | REQ-CONFIGIO-005 |
| use_sample_type | false | Enable specimen type validation for Reporting Cut-offs | REQ-CONFIGIO-012 |
Assumptions
SME confirmed 2026-01-20.
- Users performing import/export have Administrator or Super Administrator role
- Import files conform to expected XLSX format with required column headers
- System has network connectivity to download generated reports
- Mix-dependent configurations can be imported even without existing mixes (unknown mixes are created as disabled)
UI Notes (Illustrative)
FR-CONFIGIO-001 UI Specifications
- Notification displayed on import completion with:
- Title: Name of sheet being imported
- Message: "Number of rows imported: X, Number of rows ignored: Y."
- Button: "Download Report" (email) or "Click to download report" (app)
- Downloaded report includes "Status" column appended to sheet
FR-CONFIGIO-002 UI Specifications
- Export button located on Kit configurations page
- Tooltip text: "Export Customer-Friendly Configuration Sheets"
- Keyboard shortcut: P
- Export icon displayed on button
Implementation (Illustrative)
| Component | Location | Description |
|---|---|---|
| Controller | ConfigDataController | Entry point for config upload endpoint, dispatches import job |
| Job | ConfigDataImportJob | Background job processing config imports asynchronously |
| Import Orchestrator | ConfigDataImport | Multi-sheet import handler with 25 sheet types |
| Import Result Export | KitConfigurationImportResultExportAction | Generates import status report notifications (REQ-CONFIGIO-001) |
| Customer Export | CustomerFriendlyKitConfigurationsExportAction | Customer-friendly configuration export (REQ-CONFIGIO-002) |
| Mix/Target Import | MixAndTargetsImportSheet | Mixes and targets import with validation (REQ-CONFIGIO-003) |
| Combined Outcomes Import | CombinedOutcomesImportSheet | Combined outcomes import with chunking (REQ-CONFIGIO-004) |
| Control Labels Import | ControlLabelsImportSheet | Control labels import with wildcard validation (REQ-CONFIGIO-005) |
| Control Labels Export | ControlLabelsExportAction | Control labels CSV export (REQ-CONFIGIO-005) |
| Error Codes Import | ErrorCodesImportSheet | Error codes import with type validation (REQ-CONFIGIO-006) |
| Error Resolutions Import | ErrorResolutionsImportSheet | Error resolutions import (REQ-CONFIGIO-007) |
| Help Items Import | HelpItemsImportSheet | Help items import with tags (REQ-CONFIGIO-008) |
| Rules Import | RulesImportSheet | Rules import (REQ-CONFIGIO-009) |
| Precedence Normalizer | PrecedenceNormalizer | Rule precedence normalization algorithm (REQ-CONFIGIO-009) |
| QIR Import | CalculatedQuantificationSettingsImportSheet | Quantification settings import with validation (REQ-CONFIGIO-010) |
| Westgard Import | WestgardLimitsImportSheet | Westgard limits import with SD validation (REQ-CONFIGIO-011, REQ-CONFIGIO-014) |
| Reportings Import | QuantitativeReportingsImportSheet | Reporting cut-offs import with specimen validation (REQ-CONFIGIO-012) |
| LIMS Status Import | LimsStatusImportSheet | LIMS export codes import (REQ-CONFIGIO-013) |
| Extraction Export | ExtractionModelExportAction | Extraction instruments export (REQ-CONFIGIO-014) |
| Kit Config Export | KitConfigurationsExportAction | Full kit configuration export (REQ-CONFIGIO-003-014) |
Traceability Matrix
| Requirement | Title | Verification | Implementation | Test Cases | Status |
|---|---|---|---|---|---|
| REQ-CONFIGIO-001 | Generate Import Status Reports | Test | KitConfigurationImportResultExportAction | BT-3714 | Draft |
| REQ-CONFIGIO-002 | Export Customer-Friendly Configuration | Test | CustomerFriendlyKitConfigurationsExportAction | [Pending] | Draft |
| REQ-CONFIGIO-003 | Import and Export Mixes and Targets Configuration | Test | MixAndTargetsImportSheet, KitConfigurationsExportAction | BT-3562, BT-4677 | Draft |
| REQ-CONFIGIO-004 | Import and Export Combined Outcomes Configuration | Test | CombinedOutcomesImportSheet, KitConfigurationsExportAction | BT-4239, BT-3885, BT-5230 | Draft |
| REQ-CONFIGIO-005 | Import and Export Control Labels Configuration | Test | ControlLabelsImportSheet, ControlLabelsExportAction | BT-3913, BT-3985, BT-5303 | Draft |
| REQ-CONFIGIO-006 | Import and Export Error Codes Configuration | Test | ErrorCodesImportSheet, KitConfigurationsExportAction | BT-3835, BT-4164 | Draft |
| REQ-CONFIGIO-007 | Import and Export Error Resolutions Configuration | Test | ErrorResolutionsImportSheet, KitConfigurationsExportAction | BT-3862, BT-4864 | Draft |
| REQ-CONFIGIO-008 | Import and Export Help Items Tags | Test | HelpItemsImportSheet, KitConfigurationsExportAction | [Pending] | Draft |
| REQ-CONFIGIO-009 | Import and Export Rules Configuration | Test | RulesImportSheet, PrecedenceNormalizer | BT-3559, BT-4054 | Draft |
| REQ-CONFIGIO-010 | Import and Export QIR Quantification Settings | Test | CalculatedQuantificationSettingsImportSheet | BT-3567 | Draft |
| REQ-CONFIGIO-011 | Validate Westgard Limits on Import | Test | WestgardLimitsImportSheet | [Pending] | Draft |
| REQ-CONFIGIO-012 | Import Quantitative/Qualitative Reporting Cut-offs | Test | QuantitativeReportingsImportSheet | BT-4293 | Draft |
| REQ-CONFIGIO-013 | Import and Export LIMS Export Configuration | Test | LimsStatusImportSheet, KitConfigurationsExportAction | BT-4164, BT-4042 | Draft |
| REQ-CONFIGIO-014 | Apply Extraction Instruments Toggle on Import | Test | WestgardLimitsImportSheet, ExtractionModelExportAction | BT-3713 | Draft |
Notes
- Import status report format is XLSX
- Ignored rows in status report include reason for rejection
- Toggle settings (Use Extraction Instruments, Use role priority for resolution, Use sample type) are set in Client Configurations
Acceptance Tests
Test: REQ-CONFIGIO-001
Test: Verify import notification
Given: User navigates to Kit Configurations page
When: User imports a configuration sheet
Then: The system shall display a notification with title, message showing "Number of rows imported: X, Number of rows ignored: Y", and download report option
Test: Verify status column in report
Given: User has imported a configuration sheet
When: User downloads the status report
Then: The downloaded XLSX file shall contain a "Status" column with values "Imported" or "Ignored" for each row
Test: REQ-CONFIGIO-002
Test: Export generates correct file
Given: User on Kit Configurations page
When: User triggers customer-friendly export
Then: The system shall download file with filename customer-friendly-kit-configurations-<site_name>.xlsx
Test: Export via keyboard shortcut
Given: User on Kit Configurations page
When: User presses P key
Then: The system shall export customer-friendly configuration sheets
Test: REQ-CONFIGIO-003
Test: Minimum Fluorescence import succeeds
Given: Mix and target sheet with Target A, Minimum Fluorescence: 100000
When: User imports the sheet
Then: Target A shall have minimum fluorescence: 100000
Test: Minimum Fluorescence validation rejects invalid precision
Given: Mix and target sheet with Minimum Fluorescence value exceeding 16 decimal places
When: User imports the sheet
Then: The row shall not be imported
And: Status shall be "Ignored" with appropriate error message
Test: Is Quantitative import
Given: Row with Mix: HDV, Is Quantitative: FALSE and Row with Mix: ABVQ, Is Quantitative: TRUE
When: User imports mixes
Then: HDV shall have Is Quantitative false
And: ABVQ shall have Is Quantitative true
Test: Passive target validation rejects multiple passive targets
Given: Mix row with 3 target rows, more than 1 target has is_passive: true
When: User imports sheet
Then: All rows for that mix shall not be imported
And: Error message shall indicate more than 1 passive target
Test: Max CT for CLS Discrepancy import
Given: Mixes rows with Mix A Target A max ct: null, Mix A Target B max ct: 30
When: User imports config
Then: Target A max ct shall be null
And: Target B max ct shall be 30
Test: Max CT validation rejects out-of-range values
Given: Mix target row with max ct < 1 or max ct > 100
When: User imports config
Then: Mix target shall not be imported
Test: REQ-CONFIGIO-004
Test: Combined Outcomes import with validation
Given: Combined outcome sheet with valid ROLE, OUTCOME TYPE, WELL ERROR CODE
When: User imports the config sheet
Then: Combined outcome shall be saved with all properties
Test: ROLE validation rejects blank
Given: Combined outcome sheet with ROLE column blank
When: User imports config sheet
Then: Row shall not be imported
Test: OUTCOME TYPE validation rejects invalid
Given: Combined outcome sheet with OUTCOME TYPE: "invalid_value"
When: User imports config sheet
Then: Row shall not be imported
Test: REQ-CONFIGIO-005
Test: Wildcard validation
Given: Control Label sheet with labels_in_imported_runfile: "POS* | *SARS-CoV-2 PC" (valid) and "NTC* | Ne*g" (invalid)
When: User imports control labels sheet
Then: First row shall be imported
And: Second row shall be ignored with wildcard error message
Test: Resolution Priority import
Given: Client config Use role priority for resolution: true
And: Roles with resolution priority values
When: User imports kit configuration
Then: Roles shall have resolution priority values preserved
Test: REQ-CONFIGIO-009
Test: Precedence normalization
Given: Rules config sheet with rule 1 type Observation precedence 1, rule 2 type Observation precedence 2, rule 3 type Control check precedence 1
When: User imports rule config
Then: Rules shall have global precedence: rule 1 = 1, rule 2 = 2, rule 3 = 3
Test: Normalize duplicate precedences
Given: Rules config with two rules having same precedence within type
When: User imports rule config
Then: Precedences shall be normalized to sequential values
Test: REQ-CONFIGIO-010
Test: Slope and Intercept together required
Given: Quantification Settings sheet with slope: 1.5, intercept: null
When: User imports file
Then: Record shall not be present in QIR table
Given: Quantification Settings sheet with slope: 1.5, intercept: 2.4
When: User imports file
Then: Record shall be present in QIR table
Test: Min R2 validation
Given: Sheet with min_r2: -0.125 or min_r2: 2.5
When: User imports file
Then: Record shall not be imported
Given: Sheet with min_r2: 0.125
When: User imports file
Then: Record shall be imported
Test: REQ-CONFIGIO-012
Test: Specimen validation when enabled
Given: Use sample type enabled
And: Reporting rows with valid and invalid specimen/mix mappings
When: User imports Config sheet
Then: Valid mapping rows shall be imported
And: Invalid mapping rows shall be ignored with error message
Test: Specimen rejection when disabled
Given: Use sample type disabled
And: Reporting row with Specimen Type filled
When: User imports Config sheet
Then: Row shall be rejected
And: Error message shall indicate specimen not allowed
Test: REQ-CONFIGIO-014
Test: Toggle ON ignores rows without extraction instruments
Given: Use Extraction Instruments toggle ON
And: Westgard Limits rows with and without Extraction Instruments
When: User imports alternative configuration
Then: Rows without Extraction Instruments shall have status "Ignored"
Test: Toggle OFF ignores rows with extraction instruments
Given: Use Extraction Instruments toggle OFF
And: Westgard Limits rows with Extraction Instruments
When: User imports alternative configuration
Then: Rows with Extraction Instruments shall have status "Ignored"
Related Design Documents
| Design Document | Relevant Sections |
|---|---|
| SDD Algorithms | Configuration Upload Algorithm, Configuration Export Algorithm, Westgard Rules |
| SDD Configuration | Control Labels Configurations, Combined Outcomes Excel schema |
Appendix: Process Artifacts
Completion Checklist
- All requirements are capability-level (describe behavior, not UI)
- Requirement variants consolidated (no requirement explosion)
- UI details are fully demoted to Illustrative section
- Configuration options are not encoded as requirements
- Acceptance criteria describe behavior, not UI mechanics
- Every requirement has acceptance criteria and source traceability
- Error handling addressed for I/O, validation, and external system requirements
- Open questions documented with owners assigned
- Consolidations documented in Reviewer Notes with reversibility info
- Module can survive a full UI redesign unchanged
- Refinements folded into Acceptance Criteria
- Traceability matrix is complete
Reviewer Notes
Consolidation: REQ-CONFIGIO-003
The following items from the source were consolidated into a single capability-level requirement:
| Original Item | Source Reference | Disposition |
|---|---|---|
| REQ-CONFIGIO-003 (Mix/Target base) | 3.0.0-Minimum Fluorescence, Is Quantitative, Passive Dye | Merged -> REQ-CONFIGIO-003 |
| REQ-CONFIGIO-004 (Discrepancy settings) | 3.0.0-Max CT for CLS/CT Discrepancy | Merged -> REQ-CONFIGIO-003 AC-06 |
| REQ-CONFIGIO-024 (Prepend Cycles) | 3.0.0-Cycle Counts for Targets | Merged -> REQ-CONFIGIO-003 AC-01, AC-07 |
Rationale: These items all describe import/export behavior for the same Mixes and Targets configuration sheet. They share the same validation patterns and workflow, differing only by column. Consolidation avoids requirement explosion for what is a single capability.
Reversibility: To restore original structure, reference:
- Source:
output/pilot/restructured/configio.md(REQ-CONFIGIO-003, 004, 024) - Confluence: Multiple pages for Mix/Target configuration import/export
Consolidation: REQ-CONFIGIO-004
The following items from the source were consolidated into a single capability-level requirement:
| Original Item | Source Reference | Disposition |
|---|---|---|
| REQ-CONFIGIO-005 (Combined Outcomes Import) | 3.0.0-Combined Outcomes - Import / Export (Rows 1-16) | Merged -> REQ-CONFIGIO-004 |
| REQ-CONFIGIO-006 (Combined Outcomes Export) | 3.0.0-Combined Outcomes - Import / Export (Row 17) | Merged -> REQ-CONFIGIO-004 AC-11 |
| REQ-CONFIGIO-007 (IC Failed) | 3.0.0-Combined Outcomes IC Fail Option | Merged -> REQ-CONFIGIO-004 AC-12 |
| REQ-CONFIGIO-008 (Priority/Name) | 3.0.0-Add Priority/Name - Import/Export | Merged -> REQ-CONFIGIO-004 AC-08, AC-10 |
| REQ-CONFIGIO-009 (Discrepancy Required) | 3.0.0-CLS/CT Discrepancy Required | Merged -> REQ-CONFIGIO-004 AC-09 |
Rationale: These five requirements all describe import/export behavior for the Combined Outcomes configuration sheet. They are additive column support for the same capability, not distinct system responsibilities.
Reversibility: To restore original structure, reference:
- Source:
output/pilot/restructured/configio.md(REQ-CONFIGIO-005 through 009) - Confluence: Multiple pages for Combined Outcomes configuration
Consolidation: REQ-CONFIGIO-005
The following items from the source were consolidated:
| Original Item | Source Reference | Disposition |
|---|---|---|
| REQ-CONFIGIO-010 (Control Labels Import) | 3.0.0-Control Labels Import | Merged -> REQ-CONFIGIO-005 |
| REQ-CONFIGIO-011 (Control Labels Export) | 3.0.0-Control Labels Export | Merged -> REQ-CONFIGIO-005 AC-07 |
Rationale: Import and export of the same configuration type represent a single capability.
Reversibility: Source: output/pilot/restructured/configio.md (REQ-CONFIGIO-010, 011)
Consolidation: REQ-CONFIGIO-006
The following items from the source were consolidated:
| Original Item | Source Reference | Disposition |
|---|---|---|
| REQ-CONFIGIO-012 (Error Codes Import) | 3.0.0-Error Codes Config Import | Merged -> REQ-CONFIGIO-006 |
| REQ-CONFIGIO-013 (Error Codes Export) | 3.0.0-Error Codes Config Export | Merged -> REQ-CONFIGIO-006 AC-05 |
Rationale: Import and export of the same configuration type represent a single capability.
Reversibility: Source: output/pilot/restructured/configio.md (REQ-CONFIGIO-012, 013)
Consolidation: REQ-CONFIGIO-007
The following items from the source were consolidated:
| Original Item | Source Reference | Disposition |
|---|---|---|
| REQ-CONFIGIO-014 (Error Resolutions Import) | 3.0.0-Resolution Code Import | Merged -> REQ-CONFIGIO-007 |
| REQ-CONFIGIO-015 (Error Resolutions Export) | 3.0.0-Resolution Code Export | Merged -> REQ-CONFIGIO-007 AC-05 |
Rationale: Import and export of the same configuration type represent a single capability.
Reversibility: Source: output/pilot/restructured/configio.md (REQ-CONFIGIO-014, 015)
Consolidation: REQ-CONFIGIO-009
The following items from the source were consolidated:
| Original Item | Source Reference | Disposition |
|---|---|---|
| REQ-CONFIGIO-017 (Rules Import) | 3.0.0-Rules Import | Merged -> REQ-CONFIGIO-009 |
| REQ-CONFIGIO-018 (Rules Export) | 3.0.0-Rules Export | Merged -> REQ-CONFIGIO-009 AC-09 |
Rationale: Import and export of the same configuration type represent a single capability.
Reversibility: Source: output/pilot/restructured/configio.md (REQ-CONFIGIO-017, 018)
Consolidation: REQ-CONFIGIO-010
The following items from the source were consolidated:
| Original Item | Source Reference | Disposition |
|---|---|---|
| REQ-CONFIGIO-019 (QIR Import) | 3.0.0-QIR Import with validation | Merged -> REQ-CONFIGIO-010 |
| REQ-CONFIGIO-020 (QIR Export) | 3.0.0-QIR Export | Merged -> REQ-CONFIGIO-010 AC-08 |
Rationale: Import and export of the same configuration type represent a single capability.
Reversibility: Source: output/pilot/restructured/configio.md (REQ-CONFIGIO-019, 020)
ID Renumbering Summary
| Original ID | New ID | Reason |
|---|---|---|
| REQ-CONFIGIO-001 | REQ-CONFIGIO-001 | Preserved |
| REQ-CONFIGIO-002 | REQ-CONFIGIO-002 | Preserved |
| REQ-CONFIGIO-003, 004, 024 | REQ-CONFIGIO-003 | Consolidated Mix/Targets |
| REQ-CONFIGIO-005-009 | REQ-CONFIGIO-004 | Consolidated Combined Outcomes |
| REQ-CONFIGIO-010, 011 | REQ-CONFIGIO-005 | Consolidated Control Labels |
| REQ-CONFIGIO-012, 013 | REQ-CONFIGIO-006 | Consolidated Error Codes |
| REQ-CONFIGIO-014, 015 | REQ-CONFIGIO-007 | Consolidated Error Resolutions |
| REQ-CONFIGIO-016 | REQ-CONFIGIO-008 | Renumbered Help Items |
| REQ-CONFIGIO-017, 018 | REQ-CONFIGIO-009 | Consolidated Rules |
| REQ-CONFIGIO-019, 020 | REQ-CONFIGIO-010 | Consolidated QIR |
| REQ-CONFIGIO-021 | REQ-CONFIGIO-011 | Renumbered Westgard |
| REQ-CONFIGIO-022 | REQ-CONFIGIO-012 | Renumbered Reporting Cut-offs |
| REQ-CONFIGIO-023 | REQ-CONFIGIO-013 | Renumbered LIMS |
| REQ-CONFIGIO-025 | REQ-CONFIGIO-014 | Renumbered Extraction Instruments |