Skip to main content
Version: Next

Config Mode

Version: v3.1.0 Status: Normative (text), Illustrative (diagrams only) Scope: Config Mode application layout, sidebar, tab navigation, change-tracking, propose/approve workflow, and entity-specific tab forms Domain: CFGMODE


Statement

The system shall provide a dedicated Config Mode application layout that replaces the legacy single-page AssayConfigurations interface with a multi-page, multi-tab configuration environment. Config Mode introduces its own layout, sidebar, hierarchical tab navigation, split-panel forms, a changes-tracking workflow with propose/approve capability, and role-based access for SUPER_ADMIN and CLIENT_CONFIG users.

Config Mode is the UI interaction layer for configuration management. The underlying data model for kits, mixes, targets, rules, and QC entities is defined in Kit Configuration (kitcfg.md). Import and export behavior is defined in Config Import/Export (configio.md). This document covers how users interact with configuration data through the Config Mode interface: layout, navigation, form behavior, change tracking, and the proposal workflow.


Behavior Overview (Illustrative)

This diagram illustrates the high-level navigation and workflow flow. It does not specify UI layout, styling, or interaction details.


Definitions

TermDefinition
Config ModeA dedicated application mode with its own layout, sidebar, and navigation paradigm for managing assay configurations
Config SidebarThe sidebar navigation unique to Config Mode, displaying kits, assays, and secondary settings
Changes DrawerA slide-in panel showing all pending configuration modifications before proposing or updating
Proposed ConfigurationA set of configuration changes submitted for review and approval by another user
Two-Step WorkflowA propose-then-approve workflow where changes must be reviewed by a second user before taking effect
Global/Strict PatternA UI pattern where a toggle controls whether a setting applies globally to all mixes/targets or strictly to a specific target
Automapped RuleA rule whose mappings are automatically generated by the system based on rule tags; read-only in the UI
Custom RuleA rule whose mappings are manually configured by users; editable in the UI

Functional Requirements

Config Mode Application Layout (REQ-CFGMODE-001 through REQ-CFGMODE-004)

FR-CFGMODE-001 Config Mode as Separate Application Mode

The system shall provide Config Mode as a separate application mode with its own layout, accessible via a dedicated button in the main application sidebar.

Acceptance Criteria:

Entry and Layout:

  • The main application sidebar shall display a single "Config Mode" button for users with SUPER_ADMIN or CLIENT_CONFIG roles, replacing the individual configuration page links from v3.0.0
  • Clicking the "Config Mode" button shall switch the application to the Config Mode layout with a distinct pink header bar, a dedicated config sidebar, and the config home page content
  • The route shall be /config-home

Header:

  • The Config Mode header shall display a pink background distinct from the standard blue header
  • The header shall contain: site selector dropdown (SUPER_ADMIN with multi-sites), notifications, settings button, logout button, user role indicator, and user display name

Trace: Source: 3.1.0-Config Mode (Rows 1, 6, 7) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-002 Config Sidebar Navigation

The system shall provide a dedicated Config Sidebar replacing the standard application sidebar when in Config Mode.

Acceptance Criteria:

Sidebar Structure:

  • The sidebar shall display: application logo (click navigates to config home), "Add Assay" button, "Create Kit" button, "Enable/Disable Multiselect" toggle button
  • The sidebar shall list all kits with their assays (mixes) nested underneath, followed by assays not assigned to any kit, followed by unrecognised mixes (if any)
  • The sidebar shall display an "Other Settings" expandable menu at the bottom
  • The sidebar shall display an "Exit Config Mode" button at the bottom
  • The sidebar shall display the application version for SUPER_ADMIN users

Drag-and-Drop:

  • The sidebar shall support drag-and-drop to reorganize mixes between kits when multiselect is disabled
  • The system shall provide visual feedback during drag operations including a drag preview showing mix names and an invalid drop zone hint

Other Settings Menu:

  • The "Other Settings" menu shall provide access to secondary configuration pages based on role and feature flags
  • SUPER_ADMIN users shall see: Extraction Models and Instruments (if use_extraction_instruments enabled), Thermocyclers Models and Instruments, Error Codes, Error Resolution, Lims Export, Help Items (if help_items enabled), Rule Tags, Tags, Specimen Types, Target Name Suffix to Specimen (if specimen_type_source = "From Target Suffix"), Proposed Configurations
  • CLIENT_CONFIG users shall see only: Proposed Configurations

Trace: Source: 3.1.0-Config Mode (Rows 2, 3, 5) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-003 Config Home Split-Panel Layout

The system shall provide a Config Home page using a two-panel layout: left panel (1/3 width) for hierarchical tab navigation, right panel (2/3 width) for the active tab form.

Acceptance Criteria:

Layout:

  • The left panel shall display a hierarchical tab tree
  • The right panel shall display the form for the currently selected tab
  • When no mix is selected from the sidebar, the right panel shall display a "No Mix Selected" warning with instructions to select a mix
  • Configuration forms shall only render when a mix is selected

Sequential Navigation:

  • The form area footer shall provide "Back" and "Next" buttons for sequential tab navigation
  • "Back" and "Next" buttons shall be disabled at the first and last tab respectively, or when there are unsaved/unconfirmed changes
  • When navigation is blocked by unsaved changes, the warning "Please save (or cancel) your changes before leaving this form" shall be displayed

Trace: Source: 3.1.0-Config Mode (Rows 8, 10, 11, 12) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-004 Hierarchical Tab Navigation

The system shall provide a hierarchical tree structure for tab navigation in the left panel of the Config Home page.

Acceptance Criteria:

Tab Hierarchy (v3.1.0):

  • Assays And Targets
  • Controls
  • Rule Mappings
  • Test Codes (hidden by default)
  • Control & Reporting Limits
    • Control Limits: Westgard Settings, Curve Control Limits
    • Patient Limits: Cross Contamination Limits, Reporting Cut-offs, Delta CT combination
  • Outcomes
    • Patient Combined Outcomes: Patient Outcomes
    • Control Combined Outcomes: Control Outcomes
  • Kits
  • Quantification (hidden by default)
    • Quantification Settings: Calculated Quantification Settings, Known Quantities
  • Calibration

Navigation Blocking:

  • Tab clicks shall be blocked (cursor changes to not-allowed) when there are unconfirmed changes
  • The user must save or cancel current changes before navigating to a different tab

Trace: Source: 3.1.0-Config Mode (Rows 9, 19) | Jira: BT-4820 | SDS: TBD | STD: TBD


Multiselect and Sidebar Management (REQ-CFGMODE-005, REQ-CFGMODE-006)

FR-CFGMODE-005 Multiselect Mode for Bulk Assay Operations

The system shall provide a multiselect toggle in the Config Sidebar for selecting multiple kits and mixes simultaneously.

Acceptance Criteria:

  • When the user clicks "Enable Multiselect", checkboxes shall appear next to each kit and mix, allowing multiple selections
  • The button label shall change to "Disable Multiselect" when active
  • Multiple kits and mixes may be selected simultaneously for bulk filtering

Trace: Source: 3.1.0-Config Mode (Row 4) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-006 Kit and Assay Management

The system shall allow authorized users to create, rename, and delete kits, and to add and rename assays (mixes) from the Config Mode sidebar.

Acceptance Criteria:

  • The sidebar shall provide a "Create Kit" button for creating new kits
  • The sidebar shall provide an "Add Assay" button for adding new assays (mixes)
  • Kits and assays shall support rename operations
  • Kits shall support delete operations

Trace: Source: 3.1.0-Config Mode (Rows implied from sidebar buttons) | Jira: BT-4820 | SDS: TBD | STD: TBD


Change Tracking and Proposal Workflow (REQ-CFGMODE-007 through REQ-CFGMODE-013)

FR-CFGMODE-007 Changes Drawer

The system shall provide a Changes Drawer that displays all pending configuration modifications before proposing or updating.

Acceptance Criteria:

  • A floating "Unsaved Changes" button shall appear at the top-right corner of the page when modifications have not been saved/proposed
  • Clicking the "Unsaved Changes" button shall open the Changes Drawer
  • The Changes Drawer shall list all pending modifications with detailed change descriptions
  • The Changes Drawer shall provide "Propose Changes" (when two-step workflow is enabled) or "Update" (when direct update is available) action buttons

Trace: Source: 3.1.0-Config Mode (Rows 14, 15) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-008 Two-Step Propose/Approve Workflow

The system shall support a two-step configuration workflow where changes are first proposed by one user and then approved or rejected by a different user.

Acceptance Criteria:

Proposal Submission:

  • When the two-step workflow is enabled (config_mode_two_step_workflow client configuration), changes must be proposed for approval; direct "Update" shall not be available
  • When the two-step workflow is disabled, users may directly update configurations without proposing
  • The "Propose Changes" button shall be disabled when a conflicting proposal exists, with a tooltip identifying the user who submitted the conflicting proposal
  • Conflict detection shall identify overlapping proposals: same mix filters, or any pending proposal with a global combined outcome, or current modifications including a global outcome with any pending proposal
  • Proposal submission shall include filters identifying targeted mixes/kits; if any combined outcome is global, filters are overridden to empty arrays indicating all-mixes scope

Notifications and Real-Time Updates:

  • When a proposal is submitted, all other CLIENT_CONFIG/SENIOR users on the site shall receive a notification
  • When a proposal is approved, the original proposer shall receive a notification
  • Real-time WebSocket broadcasts shall update all connected clients when proposals change (submission, approval in-progress, completion)

Trace: Source: 3.1.0-Config Mode (Row 16), 3.1.0-Proposed Configurations Page (Rows 1-16) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-009 Proposed Configurations Floating Button

The system shall display a floating "Proposed Configurations" button in Config Mode when proposals are pending or approval has completed.

Acceptance Criteria:

  • The button shall be visible to CLIENT_CONFIG/SENIOR users when: proposed configurations exist and two-step workflow is enabled, or approval is in progress, or config update has completed
  • Blue state (default): label "Proposed Configurations" -- click opens the Proposed Configurations Drawer
  • Grey state with spinner: label "Approval in Progress" -- approval is being processed
  • Yellow state with pulse animation: label "the config is changed, update" -- approval completed; click refetches configurations

Trace: Source: 3.1.0-Proposed Configurations Page (Row 2) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-010 Proposed Configurations Drawer

The system shall provide a Proposed Configurations Drawer that displays all pending proposals with their details for review.

Acceptance Criteria:

Proposal Display:

  • Each proposal card shall display: proposer name, change count summary, and targeted mix names (or "All mixes" if global scope)
  • Expanding a proposal card shall display detailed configuration changes organized by type (up to 14 supported configuration types: Mixes, Kits, Control Labels, Rule Mappings, Westgard Settings, Control Range Settings, Combined Outcomes, Adjacents, Reportings, Delta CT Target Combinations, Specimen to Mix Mappings, Calculated Quantification Settings, Known Quantities, and explicit Rule Mappings)

Approval:

  • The drawer shall provide an "Approve Selected Proposal" button
  • A user shall not be permitted to approve their own proposal; attempting to do so shall display a toast warning
  • On approval, the system shall dispatch an asynchronous approval job, broadcast progress to all clients, apply changes to live configuration, and notify the proposer

Rejection:

  • The drawer shall provide a "Reject Selected Proposal" button with confirmation dialog
  • Rejecting a proposal shall delete it from the database and broadcast the change

Trace: Source: 3.1.0-Proposed Configurations Page (Rows 5-8) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-011 Real-Time Proposed Configuration Notifications

The system shall send real-time notifications via WebSocket when configuration proposals are submitted, approved, or changed.

Acceptance Criteria:

  • ProposedConfigurationsChangedBroadcast shall trigger refetch of the proposal list on all connected clients
  • ProposalApprovalInProgressBroadcast shall immediately show "Approval in Progress" state on all clients
  • The WebSocket channel shall be ConfigUpdates.{siteId} (presence channel)
  • After approval completes, clicking the yellow pulsing "update" button shall refetch all configurations and restore the UI to its default state

Trace: Source: 3.1.0-Proposed Configurations Page (Rows 13, 14) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-012 CLIENT_CONFIG Role Access

The system shall grant CLIENT_CONFIG role users access to Config Mode.

Acceptance Criteria:

  • CLIENT_CONFIG users shall see the "Config Mode" button in the main application sidebar (new in v3.1.0; previously denied)
  • CLIENT_CONFIG users shall be able to enter Config Mode, access the config home page, and interact with configuration
  • CLIENT_CONFIG users shall have access to the "Proposed Configurations" link in the "Other Settings" menu

Trace: Source: 3.1.0-Config Mode (Row 17) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-013 Exit Config Mode

The system shall return the user to the standard application layout when exiting Config Mode.

Acceptance Criteria:

  • Clicking the "Exit Config Mode" button in the config sidebar shall navigate the user back to the standard AppLayout with the blue header bar and standard sidebar navigation

Trace: Source: 3.1.0-Config Mode (Row 18) | Jira: BT-4820 | SDS: TBD | STD: TBD


Proposed Configurations History (REQ-CFGMODE-014)

FR-CFGMODE-014 Proposed Configurations History Page

The system shall provide a Proposed Configurations history page accessible from the Config Mode sidebar under "Other Settings".

Acceptance Criteria:

  • The page shall be accessible to SUPER_ADMIN and CLIENT_CONFIG roles
  • The page shall list all proposals (pending and approved) with full history
  • The page shall support bulk deletion of all proposals or only approved proposals

Trace: Source: 3.1.0-Proposed Configurations Page (Row 15) | Jira: BT-4820 | SDS: TBD | STD: TBD


Rule Mappings Tab (REQ-CFGMODE-015 through REQ-CFGMODE-024)

FR-CFGMODE-015 Rule Mappings Tab Access

The system shall provide a Rule Mappings tab in the Config Mode tab navigation for managing rule-to-role-to-target mappings.

Acceptance Criteria:

  • The Rule Mappings tab shall appear as the third top-level tab in the hierarchical tab list (after Controls)
  • When selected, the Rule Mappings form shall appear in the right panel and the existing rules data table shall be available in the bottom collapsible panel

Trace: Source: 3.1.0-Rule Mappings (Row 1) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-016 Automapped vs Custom Rule Categorization

The system shall categorize rules in the data table into Automapped (read-only) and Custom (editable) sections.

Acceptance Criteria:

  • The data table shall display four sections: Patient Rules (automapped), Control Rules (automapped), System Rules (automapped, SUPER_ADMIN only), and Custom Rules
  • Automapped sections shall be read-only and non-selectable, with a "Show automapped rules" toggle to show/hide them
  • A warning "Automapped Rules cannot be modified" shall be displayed for automapped sections
  • Clicking a rule in the Custom Rules section shall populate the form with the selected rule's current mappings

Trace: Source: 3.1.0-Rule Mappings (Row 2) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-017 Rule Mappings Form Fields

The system shall provide a form for creating and modifying rule mappings with multi-select dropdowns for roles, targets, specimens, and rules.

Acceptance Criteria:

Roles (required):

  • A multi-select Roles dropdown shall be displayed with all available roles
  • At least one role must be selected; the Confirm button shall be disabled if no role is selected

Targets (optional):

  • A multi-select Targets dropdown shall display non-passive targets from the selected mix
  • If no targets are selected, the mapping applies globally (not target-specific)

Specimens (feature-gated):

  • A multi-select Specimens dropdown shall be displayed only when use_sample_type is enabled

Rules (new mappings only):

  • A multi-select Rules dropdown shall be displayed when creating a new mapping (no existing rule selected)
  • The dropdown shall list available plain rules excluding automapped rules and rules that already have matching role-target combinations
  • When modifying an existing rule, the Rules dropdown shall not be visible

Trace: Source: 3.1.0-Rule Mappings (Rows 4-7) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-018 Rule Mappings Confirm and Cancel

The system shall enable the Confirm Changes button only when actual state changes are detected, and shall support cancellation to reset the form.

Acceptance Criteria:

Change Detection:

  • The Confirm Changes button shall be enabled only when actual changes are detected via deep comparison of current vs original state (sorted role IDs, target IDs, specimen IDs, rule IDs)
  • The button shall be disabled when the form is invalid or no changes have been made

Cancel:

  • The Cancel Changes button shall revert form selections to the original state and unblock tab navigation

Navigation Blocking:

  • The form shall emit unconfirmed changes state to block tab navigation when changes differ from the original state
  • When changes are cancelled or reverted to original, tab navigation shall be unblocked

Trace: Source: 3.1.0-Rule Mappings (Rows 8-10) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-019 Remove All Mappings

The system shall allow removing all custom mappings for a selected rule via a dedicated button.

Acceptance Criteria:

  • A "Remove All Mappings" button shall be visible only when the selected rule has existing custom mappings
  • Clicking the button shall submit empty roles/targets/specimens to clear all mappings for the rule
  • The cleared mappings shall appear in the Changes Drawer

Trace: Source: 3.1.0-Rule Mappings (Row 11) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-020 Mapping Record Generation

The system shall generate mapping records as a Cartesian product of selected roles, targets, rules, and specimens when changes are confirmed.

Acceptance Criteria:

  • For each confirmed combination of rule x role x target (x specimen if applicable), a mapping record shall be created
  • When modifying mappings for a rule that has mappings in other mixes, existing mappings for other mixes shall be preserved; only the selected mix's mappings shall be regenerated

Trace: Source: 3.1.0-Rule Mappings (Row 12) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-021 Rule Mapping Changes in Changes Drawer

The system shall display rule mapping changes in the Changes Drawer with added/removed detail.

Acceptance Criteria:

  • The Changes Drawer shall display a "Rule Mappings" section with the count of modified rules
  • Expanding a modified rule shall show changes grouped by role (and specimen if applicable) with added mappings in green and removed mappings in red

Trace: Source: 3.1.0-Rule Mappings (Row 13) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-022 Rule Mapping Changes in Proposed Config Drawer

The system shall display proposed rule mapping changes in the Proposed Configurations Drawer.

Acceptance Criteria:

  • For each proposed rule, the drawer shall show: header ("New Rule" or "Modified Rule"), rule title, and all rule mappings with role name, specimen name (if applicable), and target name

Trace: Source: 3.1.0-Rule Mappings (Row 14) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-023 Paginated Rules Data Fetching

The system shall fetch rules data with pagination to handle large datasets without exceeding API response limits.

Acceptance Criteria:

  • Rules shall be fetched without mappings first, then mappings fetched separately with pagination (2000 per page)
  • Data shall be combined client-side from parallel requests to prevent exceeding the 6MB response limit

Trace: Source: 3.1.0-Rule Mappings (Row 15) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-024 Data Tables in Collapsible Bottom Panel

The system shall display data tables for existing settings in a collapsible bottom panel.

Acceptance Criteria:

  • Each tab (except "Assays And Targets") shall have a toggle button to show/hide a bottom panel containing the existing settings table
  • The panel shall be fixed at the bottom of the page, full width minus sidebar
  • The Controls tab data table shall have two sub-tabs: "Existing Controls" and "Un-mapped Controls"

Trace: Source: 3.1.0-Config Mode (Row 13) | Jira: BT-4820 | SDS: TBD | STD: TBD


Global/Strict Entity Tabs (REQ-CFGMODE-025 through REQ-CFGMODE-034)

FR-CFGMODE-025 Global/Strict UI Pattern

The system shall provide a common global/strict UI pattern for entity tabs that support global mappings: Reporting Cut-offs, Combined Outcomes, Cross Contamination Limits, and Curve Control Limits.

Acceptance Criteria:

Common Pattern:

  • Each entity tab shall provide an "Applies to all mixes" (Global Mix) toggle controlling the is_strict field
  • When the toggle is ON (global, is_strict=false): the setting applies to all mixes and targets; target-specific selectors are hidden
  • When the toggle is OFF (strict, is_strict=true): the setting applies to a specific target only; target selector is displayed
  • The existing settings table shall list global entries first, followed by strict entries
  • Global entries shall be displayed with a "Global" badge in the table
  • The edit widget header shall show "Add" for new entries and "Edit" for existing entries
  • The form Confirm Changes button shall be disabled when there are no actual changes, form validation errors, or duplicate entries

Change Detection:

  • Toggling the global/strict flag shall be detected as a change (v3.1.0 improvement)
  • Unmodified entries shall be excluded from proposal payloads (v3.1.0 improvement for Combined Outcomes; applies to all entity tabs with proposal support)

Trace: Source: 3.1.0-Reporting Cut-offs (Rows 2, 11, 12), 3.1.0-Combined Outcomes (Rows 5, 9, 10), 3.1.0-Cross Contamination Limits (Rows 6, 7), 3.1.0-Curve Control Limits (Row 8) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-026 Reporting Cut-offs Tab

The system shall provide a Reporting Cut-offs tab under "Control & Reporting Limits" > "Patient Limits" in the Config Mode tab navigation.

Acceptance Criteria:

Tab Access:

  • The tab shall use a split view: left side for the form, right side for the existing settings table

Form Fields:

  • Target selector shall be visible in strict mode, disabled for existing reportings
  • Quant/CT selector shall be visible when global mode is active or the mix is quantitative
  • Specimen selector shall be visible when use_sample_type is enabled, defaulting to "Any" (-) for new reportings
  • The form shall support multiple reporting groups (up to 9) in Quant mode and a single group in CT mode
  • Each group shall contain: Group selector, Group Description (required), Upper Boundary (required, > 0, max 2 decimal places), and optional Converted Boundary Reference

Validation:

  • Switching between Quant and CT mode shall clear all upper boundaries
  • Group validation shall prevent duplicate descriptions, duplicate boundaries, and incorrect boundary ordering (ascending for Quant, descending for CT)
  • Duplicate detection shall prevent creating reportings with the same mix, target, and specimen combination

Converted Boundary Reference (v3.1.0 new):

  • For Stored Curve quantitative mixes, a read-only field shall display real-time Quant-to-CT or CT-to-Quant conversion next to the Upper Boundary field using the formula: CT = slope x log10(value) + intercept

Trace: Source: 3.1.0-Reporting Cut-offs (Rows 1-12) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-027 Combined Outcomes Tab

The system shall provide an Outcomes tab in the Config Mode navigation with two sub-sections: Patient Combined Outcomes and Control Combined Outcomes.

Acceptance Criteria:

Form Fields:

  • Core identity fields: Code (required, unique), Name (required, unique, max 191 chars), Role (required), Specimen/Sample Type (visible for patient roles, includes "Any" option), Outcome Type ("Lims" for patient only, or "Error")
  • Conditional fields: LIMS Status (when outcome_type = "Lims"), Well Error (when outcome_type = "Error"), Target Error (for control outcomes with well_error)
  • Patient outcomes shall auto-populate the role and specimen when creating a new outcome
  • Control outcomes shall auto-select the outcome type when only one type is available

Mix Results:

  • Mix Results shall contain per-mix configuration: Use Latest Uploaded Run toggle, IC Failed toggle, Repeated Well toggle
  • Target Results (nested per target): Result/Final Class, Min/Max Final CT, Min/Max Quantity (for quant mixes or global targets), CLS Discrepancy Required, CT Discrepancy Required
  • Min/Max Final CT fields shall always be visible regardless of mix type (v3.1.0 improvement)
  • The existing settings table shall display both CT and Quantity values together for quantitative mixes (joined with " / ")

Deletion and Proposals:

  • Deleted outcomes shall always be included in filtered results and never hidden by mix/kit filters (v3.1.0 improvement)
  • The proposal payload shall only include modified, new, and deleted outcomes with explicit operation flags (v3.1.0 improvement)
  • The Changes Drawer shall display combined outcome changes organized by operation type (New, Modified, Deleted) with full detail including mix results and target results

Trace: Source: 3.1.0-Combined Outcomes (Rows 1-14) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-028 Cross Contamination Limits Tab

The system shall provide a Cross Contamination Limits tab under "Control & Reporting Limits" > "Patient Limits" in the Config Mode tab navigation.

Acceptance Criteria:

  • The table shall display global limits first, then strict limits grouped by mix
  • Column headers shall be "Potential Contaminated Result" and "Potential Contaminating Result"
  • The edit widget shall accept Config Mode filters and mix targets, supporting "Add" and "Edit" modes
  • Applying kit or mix filters shall show only adjacents for the selected mixes plus global entries

Trace: Source: 3.1.0-Cross Contamination Limits (Rows 3-7) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-029 Curve Control Limits Tab

The system shall provide a Curve Control Limits tab under "Control & Reporting Limits" > "Control Limits" in the Config Mode tab navigation.

Acceptance Criteria:

  • The UI shall include site roles and stable identifiers for global settings
  • Global settings shall have their role relation populated from the global mapping data
  • The changes drawer shall display correct diff and proposal state for Curve Control Limits

Trace: Source: 3.1.0-Curve Control Limits (Rows 3, 8) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-030 Combined Outcomes Changes Drawer Detail

The system shall display combined outcome changes in the Changes Drawer with full configuration detail organized by operation type.

Acceptance Criteria:

  • Operation types displayed: "New Combined Outcome", "Modified Combined Outcome", "Deleted Combined Outcome"
  • For deleted outcomes: minimal display showing code and "This outcome will be deleted."
  • For create/update outcomes: General section (Code, Name, Role, Sample Type, Outcome Type, LIMS Status), Configuration section ("Applies to all mixes", "Consider multiple runs", "Mixes missing"), Conditions section (Well Error, Target Error), Mix Results section (nested cards per mix with per-target details)
  • Role IDs, specimen IDs, and mix/target IDs shall be resolved to human-readable names

Trace: Source: 3.1.0-Combined Outcomes (Row 12) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-031 Reporting Cut-offs Existing Settings Table

The system shall display all configured reportings in the existing settings table with global entries first.

Acceptance Criteria:

  • Columns: Mix, Target, Specimen Type (if use_sample_type enabled), Quant or Ct, Group, Upper Boundary
  • Global reportings (is_strict=false) shall be listed first, then strict reportings
  • Clicking a row shall load the reporting into the form for editing; selected row shall be highlighted

Trace: Source: 3.1.0-Reporting Cut-offs (Row 12) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-032 Combined Outcomes Proposal Payload Optimization

The system shall send only modified, new, and deleted outcomes in the proposal payload.

Acceptance Criteria:

  • New outcomes shall be tagged with _operation: 'create'
  • Modified outcomes shall be tagged with _operation: 'update'
  • Deleted outcomes shall be tagged with _operation: 'delete' with minimal payload (id, name, code)
  • Unmodified outcomes shall be excluded from the payload
  • After confirming changes, newly created outcomes shall retain the is_new flag for correct categorization in proposals

Trace: Source: 3.1.0-Combined Outcomes (Rows 13, 14) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-033 Combined Outcomes is_strict Change Detection

The system shall include the is_strict field in change detection for Combined Outcomes.

Acceptance Criteria:

  • The CombinedOutcomeComparator shall compare is_strict boolean between original and modified outcomes
  • Toggling "Applies to all mixes" shall be detected as a change and appear in the Changes Drawer (v3.1.0 improvement; previously not detected)

Trace: Source: 3.1.0-Combined Outcomes (Row 10) | Jira: BT-4820 | SDS: TBD | STD: TBD


FR-CFGMODE-034 Combined Outcomes Min/Max CT Visibility

The system shall always display Min/Max Final CT fields for target results regardless of mix type.

Acceptance Criteria:

  • Min/Max Final CT fields shall be visible for all mix types (v3.1.0 improvement; previously hidden for quantitative mixes)
  • For non-global targets in quantitative mixes, the user must choose between configuring CT or Quantity (cannot set both simultaneously)
  • For global targets, both CT and Quantity may be configured simultaneously

Trace: Source: 3.1.0-Combined Outcomes (Row 7) | Jira: BT-4820 | SDS: TBD | STD: TBD


Configuration Options

OptionDefaultDescriptionAffects
config_mode_two_step_workflowfalseEnable two-step propose/approve workflow for configuration changesREQ-CFGMODE-008
use_sample_typefalseEnable specimen type dropdowns in rule mappings and reporting formsREQ-CFGMODE-017, REQ-CFGMODE-026, REQ-CFGMODE-027
help_itemsfalseEnable Help Data toggle buttons on configuration pagesREQ-CFGMODE-002
use_extraction_instrumentsfalseShow Extraction Models and Instruments in Other Settings menuREQ-CFGMODE-002
specimen_type_sourcenullWhen "From Target Suffix", show Target Name Suffix to Specimen in Other SettingsREQ-CFGMODE-002

Assumptions

  • Users accessing Config Mode require SUPER_ADMIN or CLIENT_CONFIG role
  • Config Mode replaces the v3.0.0 AssayConfigurations page; the old single-page interface is no longer accessible
  • A mix must be selected from the sidebar before any configuration forms are rendered
  • The two-step propose/approve workflow requires the config_mode_two_step_workflow client configuration to be enabled
  • WebSocket (Pusher) connectivity is required for real-time proposal notifications and status updates
  • All entity tabs that support global mappings use the same global/strict toggle pattern
  • Configuration changes made through Config Mode follow the same audit logging as the legacy interface

UI Notes (Illustrative)

FR-CFGMODE-001 UI Specifications

  • Config Mode header uses pink background (bg-config-mode-pink) distinct from standard blue header
  • Pagination toggle is removed from the Config Mode layout
  • The main sidebar replaces all individual config sub-page links with a single "Config Mode" button

FR-CFGMODE-003 UI Specifications

  • Left panel: 1/3 width with bordered container containing the TabList component
  • Right panel: 2/3 width for the active form container
  • "No Mix Selected" warning uses a centered warning icon with descriptive text and sub-message

FR-CFGMODE-004 UI Specifications

  • Tab tree is hierarchical with expandable/collapsible sections
  • Tab clicks show cursor: not-allowed when navigation is blocked by unsaved changes

FR-CFGMODE-007 UI Specifications

  • "Unsaved Changes" button: rounded pill shape, blue background, fixed top-right position
  • Changes Drawer: slide-in panel from the right side

FR-CFGMODE-009 UI Specifications

  • Floating button positioned on the right side of the Config Mode page, above the "Unsaved Changes" button
  • Yellow state uses a sync-alt icon with pulse animation

FR-CFGMODE-026 UI Specifications

  • Reporting Cut-offs uses a split view: form on the left, settings table on the right
  • Converted Boundary Reference field is 128px wide, read-only, positioned next to Upper Boundary
  • Validation errors displayed in red text below the groups section

FR-CFGMODE-028 UI Specifications

  • Cross Contamination Limits table: no separate Quant/Ct column (data still present in export)
  • Global entries shown first, then strict entries grouped by mix

Implementation (Illustrative)

Implementation (Frontend)

RequirementComponent(s)Notes
REQ-CFGMODE-001ConfigModeLayout.vue, ConfigHome.vueNew route /config-home
REQ-CFGMODE-002ConfigSidebar.vueReplaces AppSidebar in Config Mode
REQ-CFGMODE-003ConfigHome.vue, TabList.vueSplit panel layout
REQ-CFGMODE-004TabList.vueHierarchical tree structure
REQ-CFGMODE-005ConfigSidebar.vueMultiselect toggle
REQ-CFGMODE-007ChangesDrawer.vueSlide-in changes panel
REQ-CFGMODE-008proposeConfigurations.jsTwo-step workflow logic
REQ-CFGMODE-009ShowProposedConfigurationsButton.vueFloating button with state management
REQ-CFGMODE-010ProposedConfigurationsDrawer.vue, DetailedProposedConfigurations.vue14 configuration type sections
REQ-CFGMODE-011EventBus, Laravel EchoWebSocket channels
REQ-CFGMODE-015AddRuleMappingsForm.vue, RuleMappingsTable.vueForm and data table
REQ-CFGMODE-017RoleToRuleMappingsForm.vueMulti-select dropdowns
REQ-CFGMODE-020RuleMappingsForSelectedFiltersGenerator.jsCartesian product generation
REQ-CFGMODE-021RuleMappingsChangesSection.vue, ModifiedRuleDetails.vueChanges Drawer section
REQ-CFGMODE-025GlobalMixToggler.vueShared global/strict toggle
REQ-CFGMODE-026ReportingsForm.vue, ReportingsTable.vue, ConvertedBoundaryReference.vueReporting Cut-offs tab
REQ-CFGMODE-027CombinedOutcomesForm.vue, HandleOutcomes.js, CombinedOutcomeComparator.jsCombined Outcomes tab
REQ-CFGMODE-028AdjacentsTable.vue, AdjacentsEditWidget.vue, AdjacentForm.vueCross Contamination tab
REQ-CFGMODE-030ModifiedCombinedOutcomesDetails.vueChanges Drawer detail

Implementation (Backend)

RequirementComponent(s)Notes
REQ-CFGMODE-008ApproveProposedConfigurationJob, UpdateConfigurationsActionAsync approval
REQ-CFGMODE-010ProposedConfigurationsControllerCRUD API
REQ-CFGMODE-011ProposedConfigurationsChangedBroadcast, ProposalApprovalInProgressBroadcastWebSocket events
REQ-CFGMODE-012routes/api.php middlewareCLIENT_CONFIG access
REQ-CFGMODE-014AllProposedConfigurations.vue, AllProposedConfigurationsControllerHistory page
REQ-CFGMODE-020RuleMappingsForSelectedFiltersGenerator (PHP)Server-side mapping generation

Traceability Matrix

RequirementTitleVerificationImplementationTest CasesStatus
REQ-CFGMODE-001Config Mode Application ModeTestConfigModeLayout.vueTBDDraft
REQ-CFGMODE-002Config Sidebar NavigationTestConfigSidebar.vueTBDDraft
REQ-CFGMODE-003Config Home Split-Panel LayoutTestConfigHome.vue, TabList.vueTBDDraft
REQ-CFGMODE-004Hierarchical Tab NavigationTestTabList.vueTBDDraft
REQ-CFGMODE-005Multiselect ModeTestConfigSidebar.vueTBDDraft
REQ-CFGMODE-006Kit and Assay ManagementTestConfigSidebar.vueTBDDraft
REQ-CFGMODE-007Changes DrawerTestChangesDrawer.vueTBDDraft
REQ-CFGMODE-008Propose/Approve WorkflowTestproposeConfigurations.jsTBDDraft
REQ-CFGMODE-009Proposed Configurations ButtonTestShowProposedConfigurationsButton.vueTBDDraft
REQ-CFGMODE-010Proposed Configurations DrawerTestProposedConfigurationsDrawer.vueTBDDraft
REQ-CFGMODE-011Real-Time NotificationsTestEventBus, Laravel EchoTBDDraft
REQ-CFGMODE-012CLIENT_CONFIG AccessTestroutes/api.phpTBDDraft
REQ-CFGMODE-013Exit Config ModeTestConfigSidebar.vueTBDDraft
REQ-CFGMODE-014Proposed Config History PageTestAllProposedConfigurations.vueTBDDraft
REQ-CFGMODE-015Rule Mappings Tab AccessTestAddRuleMappingsForm.vueTBDDraft
REQ-CFGMODE-016Automapped vs Custom RulesTestRuleMappingsTable.vueTBDDraft
REQ-CFGMODE-017Rule Mappings Form FieldsTestRoleToRuleMappingsForm.vueTBDDraft
REQ-CFGMODE-018Confirm and CancelTestRoleToRuleMappingsForm.vueTBDDraft
REQ-CFGMODE-019Remove All MappingsTestRoleToRuleMappingsForm.vueTBDDraft
REQ-CFGMODE-020Mapping Record GenerationTestRuleMappingsForSelectedFiltersGenerator.jsTBDDraft
REQ-CFGMODE-021Rule Mapping Changes DrawerTestRuleMappingsChangesSection.vueTBDDraft
REQ-CFGMODE-022Rule Mapping Proposed DrawerTestProposedRuleMappingsSection.vueTBDDraft
REQ-CFGMODE-023Paginated Rules FetchingTestVuex storeTBDDraft
REQ-CFGMODE-024Collapsible Bottom PanelTestConfigHome.vueTBDDraft
REQ-CFGMODE-025Global/Strict UI PatternTestGlobalMixToggler.vueTBDDraft
REQ-CFGMODE-026Reporting Cut-offs TabTestReportingsForm.vueTBDDraft
REQ-CFGMODE-027Combined Outcomes TabTestCombinedOutcomesForm.vueTBDDraft
REQ-CFGMODE-028Cross Contamination TabTestAdjacentsTable.vueTBDDraft
REQ-CFGMODE-029Curve Control Limits TabTestControlRangeSettingsForm.vueTBDDraft
REQ-CFGMODE-030Combined Outcomes Changes DetailTestModifiedCombinedOutcomesDetails.vueTBDDraft
REQ-CFGMODE-031Reporting Cut-offs Settings TableTestReportingsTable.vueTBDDraft
REQ-CFGMODE-032Combined Outcomes Payload Opt.TestgetCombinedOutcomesForProposalTBDDraft
REQ-CFGMODE-033is_strict Change DetectionTestCombinedOutcomeComparator.jsTBDDraft
REQ-CFGMODE-034CT Visibility ImprovementTestCombinedOutcomesForm.vueTBDDraft

Notes

  • Config Mode is a v3.1.0 feature that replaces the v3.0.0 single-page AssayConfigurations interface
  • The global/strict pattern (described once in REQ-CFGMODE-025) is implemented identically across Reporting Cut-offs, Combined Outcomes, Cross Contamination Limits, and Curve Control Limits tabs; entity-specific ACs are in their respective requirements
  • The underlying data model for configuration entities (mixes, targets, rules, QC settings) remains in kitcfg.md; import/export behavior remains in configio.md
  • The propose/approve workflow is a client-configurable feature; when disabled, direct updates are available
  • CLIENT_CONFIG role access to Config Mode is new in v3.1.0; in v3.0.0, CLIENT_CONFIG had no access to the AssayConfigurations page
  • The 14 supported configuration types in the Proposed Configurations Drawer represent the full set of entities managed through Config Mode

Open Questions

IDQuestionSourceOwnerDate Raised
OQ-001Should collapsible bottom panel (REQ-CFGMODE-024) be promoted to a standalone REQ or remain as an AC of each tab? Currently a standalone REQ per the common UI pattern.Inventory OQ-001TBD2026-03-06
OQ-002Should the "Unsaved Changes" floating button trigger (currently UI_DETAIL folded into REQ-CFGMODE-007) be a separate REQ? It triggers functional behavior (opens Changes Drawer).Inventory OQ-002TBD2026-03-06

Acceptance Tests

Test: REQ-CFGMODE-001

Back to requirement

Test: Enter Config Mode

Given: User logged in with SUPER_ADMIN role
When: User clicks "Config Mode" button in the main sidebar
Then: Application switches to Config Mode layout with pink header bar
And: Config sidebar is displayed with kits, assays, and action buttons
And: Config home page content is rendered

Test: CLIENT_CONFIG access

Given: User logged in with CLIENT_CONFIG role
When: User views the main sidebar
Then: "Config Mode" button is visible
When: User clicks "Config Mode"
Then: User can access and interact with Config Home page

Test: REQ-CFGMODE-002

Back to requirement

Test: Config Sidebar structure and navigation

StepActionExpected Result
1Enter Config Mode as SUPER_ADMINConfig Sidebar displays: logo, "Add Assay" button, "Create Kit" button, "Enable Multiselect" toggle, kit/assay hierarchy, "Other Settings" menu, "Exit Config Mode" button, and version number
2Expand the "Other Settings" menuSUPER_ADMIN sees full menu (Thermocyclers, Error Codes, Rule Tags, Proposed Configurations, etc.)
3Enter Config Mode as CLIENT_CONFIG"Other Settings" menu shows only "Proposed Configurations"

Test: REQ-CFGMODE-003

Back to requirement

Test: Split-panel layout and mix selection guard

StepActionExpected Result
1Enter Config Mode without selecting a mixRight panel displays "No Mix Selected" warning with instructions
2Select a mix from the sidebarLeft panel shows hierarchical tab tree; right panel renders the form for the active tab
3Make unsaved changes and click "Next"Navigation is blocked; warning "Please save (or cancel) your changes before leaving this form" is displayed

Test: REQ-CFGMODE-004

Back to requirement

Test: Tab navigation with unsaved changes

Given: User is in Config Mode with a mix selected
And: User has made form changes that are not saved
When: User tries to click a different tab in the left panel
Then: Navigation is blocked
And: Cursor shows not-allowed
And: Warning "Please save (or cancel) your changes before leaving this form" is displayed

Test: REQ-CFGMODE-005

Back to requirement

Test: Enable multiselect for bulk filtering

StepActionExpected Result
1Click "Enable Multiselect" in the Config SidebarCheckboxes appear next to each kit and mix; button label changes to "Disable Multiselect"
2Select multiple kits and mixes via checkboxesSelected items are highlighted; configuration forms reflect the multi-selection filter
3Click "Disable Multiselect"Checkboxes disappear; sidebar returns to single-selection mode

Test: REQ-CFGMODE-006

Back to requirement

Test: Create, rename, and delete kits and assays

StepActionExpected Result
1Click "Create Kit" in the Config SidebarA new kit is created and appears in the sidebar hierarchy
2Rename the kitKit name is updated in the sidebar
3Click "Add Assay" to add a mix to the kitNew assay appears nested under the kit
4Delete the kitKit is removed from the sidebar

Test: REQ-CFGMODE-007

Back to requirement

Test: Changes Drawer displays pending modifications

StepActionExpected Result
1Make a configuration change (e.g., modify a rule mapping)"Unsaved Changes" floating button appears at top-right
2Click the "Unsaved Changes" buttonChanges Drawer slides in from the right, listing all pending modifications
3Verify action buttons in the drawer"Propose Changes" (if two-step enabled) or "Update" button is available

Test: REQ-CFGMODE-008

Back to requirement

Test: Propose changes (two-step workflow enabled)

Given: Two-step workflow is enabled
And: User has made configuration changes
When: User opens the Changes Drawer
Then: "Propose Changes" button is displayed (not "Update")
When: User clicks "Propose Changes"
Then: Changes are submitted as a proposal
And: Other CLIENT_CONFIG/SENIOR users receive a notification

Test: Conflict detection

Given: A pending proposal exists for Mix A
When: User tries to propose changes for Mix A
Then: "Propose Changes" button is disabled
And: Tooltip shows who submitted the conflicting proposal

Test: REQ-CFGMODE-009

Back to requirement

Test: Floating button state transitions

StepActionExpected Result
1Submit a proposal with two-step workflow enabledFloating "Proposed Configurations" button appears in blue state
2Another user approves the proposalButton transitions to grey "Approval in Progress" with spinner
3Wait for approval to completeButton transitions to yellow pulsing "the config is changed, update" state
4Click the yellow buttonConfigurations are refetched and button returns to default state

Test: REQ-CFGMODE-010

Back to requirement

Test: Approve proposed configuration

Given: A proposal exists from another user
When: User opens the Proposed Configurations Drawer
And: User expands the proposal and clicks "Approve Selected Proposal"
Then: Approval job is dispatched
And: Button changes to "Approval in Progress" state
And: On completion, proposer receives approval notification
And: Floating button changes to yellow "update" state

Test: Self-approval prevention

Given: User is the proposer of a pending proposal
When: User clicks "Approve Selected Proposal"
Then: A toast warning "You cannot approve your own proposal" is shown
And: The approval is blocked

Test: REQ-CFGMODE-011

Back to requirement

Test: Real-time WebSocket notifications for proposals

StepActionExpected Result
1User A submits a proposalUser B (connected via WebSocket) sees the proposal list refresh automatically
2User B approves the proposalUser A sees "Approval in Progress" state appear in real-time without page refresh
3Approval completesUser A sees yellow pulsing "update" button; clicking it refetches configurations

Test: REQ-CFGMODE-012

Back to requirement

Test: CLIENT_CONFIG role can access Config Mode

StepActionExpected Result
1Log in as CLIENT_CONFIG user"Config Mode" button is visible in the main application sidebar
2Click "Config Mode"User enters Config Mode and can interact with the config home page
3Open "Other Settings" menuOnly "Proposed Configurations" is listed

Test: REQ-CFGMODE-013

Back to requirement

Test: Exit Config Mode returns to standard layout

StepActionExpected Result
1Enter Config Mode as SUPER_ADMINPink header and config sidebar are displayed
2Click "Exit Config Mode" button in config sidebarApplication returns to standard layout with blue header and standard sidebar navigation

Test: REQ-CFGMODE-014

Back to requirement

Test: Proposed Configurations history and bulk deletion

StepActionExpected Result
1Navigate to "Other Settings" > "Proposed Configurations"History page displays all proposals (pending and approved)
2Verify access as CLIENT_CONFIG userPage is accessible and lists proposals
3Use bulk delete to remove all approved proposalsOnly approved proposals are deleted; pending proposals remain

Test: REQ-CFGMODE-015

Back to requirement

Test: Rule Mappings tab display

Given: User is in Config Mode with a mix selected
When: User views the tab list in the left panel
Then: "Rule Mappings" appears as a top-level tab
When: User clicks the "Rule Mappings" tab
Then: Rule Mappings form is displayed in the right panel
And: Existing rules data table is available in the bottom panel

Test: REQ-CFGMODE-016

Back to requirement

Test: Automapped rules are read-only, custom rules are editable

StepActionExpected Result
1Open Rule Mappings tab and view the data tableTable shows four sections: Patient Rules (automapped), Control Rules (automapped), System Rules (automapped, SUPER_ADMIN only), Custom Rules
2Attempt to select a rule in an automapped sectionRule is non-selectable; warning "Automapped Rules cannot be modified" is displayed
3Click a rule in the Custom Rules sectionForm populates with the selected rule's current mappings for editing

Test: REQ-CFGMODE-017

Back to requirement

Test: Create new rule mapping

Given: No rule is selected from the data table
When: User views the Rule Mappings form
Then: Roles multi-select, Targets multi-select, and Rules multi-select dropdowns are displayed
When: User selects 2 roles and 3 targets and 1 rule
And: User clicks "Confirm Changes"
Then: 6 mapping records are generated (2 roles x 3 targets)
And: Changes appear in the Changes Drawer

Test: REQ-CFGMODE-018

Back to requirement

Test: Confirm is enabled only on actual changes; cancel reverts

StepActionExpected Result
1Select a custom rule and view the form"Confirm Changes" button is disabled (no changes yet)
2Modify the role selection"Confirm Changes" button becomes enabled; tab navigation is blocked
3Click "Cancel Changes"Form reverts to original state; tab navigation is unblocked; "Confirm Changes" is disabled again

Test: REQ-CFGMODE-019

Back to requirement

Test: Remove all custom mappings for a rule

StepActionExpected Result
1Select a custom rule that has existing mappings"Remove All Mappings" button is visible
2Click "Remove All Mappings"All role/target/specimen mappings for the rule are cleared
3Open the Changes DrawerThe cleared mappings appear as removed items in the drawer

Test: REQ-CFGMODE-020

Back to requirement

Test: Cartesian product mapping generation

StepActionExpected Result
1Create a new rule mapping selecting 2 roles and 3 targets for 1 rule6 mapping records are generated (2 x 3 Cartesian product)
2Modify mappings for a rule that has mappings in other mixesOnly the selected mix's mappings are regenerated; other mixes' mappings are preserved

Test: REQ-CFGMODE-021

Back to requirement

Test: Rule mapping changes displayed in Changes Drawer

StepActionExpected Result
1Add a new rule mapping and open the Changes Drawer"Rule Mappings" section appears with count of modified rules
2Expand the modified rule entryChanges are grouped by role showing added mappings in green and removed mappings in red

Test: REQ-CFGMODE-022

Back to requirement

Test: Proposed rule mapping changes visible in Proposed Configurations Drawer

StepActionExpected Result
1Propose configuration changes that include rule mapping modificationsProposal is submitted successfully
2Open the Proposed Configurations Drawer and expand the proposalProposed rule shows header ("New Rule" or "Modified Rule"), rule title, and all rule mappings with role name and target name

Test: REQ-CFGMODE-023

Back to requirement

Test: Rules data is fetched with pagination

StepActionExpected Result
1Open Rule Mappings tab for a mix with many rulesRules are fetched without mappings first, then mappings fetched in paginated batches (2000 per page)
2Verify data is combined client-sideAll rules with their mappings are displayed correctly without API response limit errors

Test: REQ-CFGMODE-024

Back to requirement

Test: Collapsible bottom panel for data tables

StepActionExpected Result
1Navigate to a tab other than "Assays And Targets" (e.g., Controls)Toggle button for bottom panel is available
2Click the toggle to show the bottom panelBottom panel appears at full width (minus sidebar) displaying existing settings table
3On Controls tab, verify sub-tabsBottom panel has two sub-tabs: "Existing Controls" and "Un-mapped Controls"

Test: REQ-CFGMODE-025

Back to requirement

Test: Global toggle behavior

Given: User is on a tab that supports global/strict mode (e.g., Reporting Cut-offs)
When: User toggles "Applies to all mixes" ON
Then: Setting scope changes to global
And: Target selector is hidden
When: User toggles "Applies to all mixes" OFF
Then: Setting scope changes to strict
And: Target selector dropdown appears

Test: REQ-CFGMODE-026

Back to requirement

Test: Multiple reporting groups in Quant mode

Given: User is on Reporting Cut-offs with Quant mode selected
When: User clicks "Add Another Group"
Then: A new group form is added
And: Up to 9 groups can be added
When: User switches to CT mode
Then: Only Group 1 remains and upper boundary is cleared

Test: Converted Boundary Reference

Given: User is configuring a Stored Curve quantitative mix in Quant mode
When: User enters an upper boundary value
Then: The "Ct equivalent" is displayed in real-time next to the boundary field

Test: REQ-CFGMODE-027

Back to requirement

Test: Create patient combined outcome with mix results

StepActionExpected Result
1Navigate to Outcomes > Patient Combined Outcomes and create a new outcomeForm auto-populates role and specimen; Code and Name are required and must be unique
2Set outcome type to "Lims" and select a LIMS StatusLIMS Status field is visible and populated
3Add a mix result with target result including Min/Max Final CTMix result is saved with nested target result configuration
4Confirm changes and open the Changes DrawerNew combined outcome appears under "New Combined Outcome" with full detail

Test: REQ-CFGMODE-028

Back to requirement

Test: Cross Contamination Limits display and filtering

StepActionExpected Result
1Navigate to Cross Contamination Limits tabTable displays global limits first, then strict limits grouped by mix
2Apply a kit or mix filterTable shows only adjacents for the selected mixes plus global entries
3Edit an existing limitEdit widget opens in "Edit" mode with "Potential Contaminated Result" and "Potential Contaminating Result" fields

Test: REQ-CFGMODE-029

Back to requirement

Test: Curve Control Limits with global settings

StepActionExpected Result
1Navigate to Curve Control Limits tabUI displays site roles and stable identifiers for global settings
2View a global setting entryRole relation is populated from global mapping data
3Modify a curve control limit and open the Changes DrawerCorrect diff and proposal state is displayed for the change

Test: REQ-CFGMODE-030

Back to requirement

Test: Combined outcome changes detail by operation type

StepActionExpected Result
1Create a new combined outcome, modify an existing one, and delete a thirdAll three changes are pending
2Open the Changes DrawerNew outcome shows full detail (General, Configuration, Conditions, Mix Results); modified outcome shows changes; deleted outcome shows code and "This outcome will be deleted."
3Verify ID resolutionRole IDs, specimen IDs, and mix/target IDs are displayed as human-readable names

Test: REQ-CFGMODE-031

Back to requirement

Test: Reporting Cut-offs existing settings table

StepActionExpected Result
1Navigate to Reporting Cut-offs tabExisting settings table displays columns: Mix, Target, Quant or Ct, Group, Upper Boundary
2Verify orderingGlobal reportings (is_strict=false) are listed first, then strict reportings
3Click a row in the tableThe reporting loads into the form for editing; selected row is highlighted

Test: REQ-CFGMODE-032

Back to requirement

Test: Only modified outcomes are sent in proposal payload

StepActionExpected Result
1Create one new outcome, modify one existing outcome, delete one outcome, and leave others unchangedChanges are tracked with appropriate operation flags
2Propose the changesPayload contains only: new (operation: 'create'), modified (operation: 'update'), and deleted (operation: 'delete') outcomes; unmodified outcomes are excluded
3Verify new outcome retains is_new flagNewly created outcome is correctly categorized in the proposal

Test: REQ-CFGMODE-033

Back to requirement

Test: Toggling is_strict is detected as a change

StepActionExpected Result
1Select an existing combined outcome that is currently global (is_strict=false)Form displays "Applies to all mixes" toggle in ON state
2Toggle "Applies to all mixes" OFF (setting is_strict=true)"Confirm Changes" button becomes enabled
3Open the Changes DrawerThe is_strict toggle change appears in the drawer as a modification

Test: REQ-CFGMODE-034

Back to requirement

Test: Min/Max CT fields visible for all mix types

StepActionExpected Result
1Open a target result form for a quantitative mixMin/Max Final CT fields are visible (not hidden)
2For a non-global target in a quantitative mix, set a CT valueQuantity fields become unavailable (cannot set both simultaneously)
3For a global target in a quantitative mixBoth CT and Quantity fields may be configured simultaneously

Appendix: Process Artifacts

Completion Checklist

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

Reviewer Notes

v3.1.0 Initial Creation

This is a new domain file created for v3.1.0. Config Mode is a completely new application mode that did not exist in v3.0.0.

Source Material:

  • input/3.1.0-confluence-updates.md -- Sections: Config Mode (19 rows), Proposed Configurations Page (16 rows), Rule Mappings (16 rows), Reporting Cut-offs (12 rows, UI aspects), Combined Outcomes (14 rows, UI aspects), Cross Contamination Limits (rows 3-7, UI aspects), Curve Control Limits (rows 3/8, UI aspects)
  • input/3.1.0-requirements-inventory.md -- Sections 2.1, 2.4, 2.7, and UI portions of 2.8, 2.9, 2.12, 2.13

Classification Decisions:

DecisionRationale
Rows 13, 14 from Config Mode (collapsible panel, unsaved changes button) folded as ACs/UI_DETAIL into REQ-CFGMODE-024 and REQ-CFGMODE-007 respectivelyUI mechanism details, not independent testable behaviors; the button triggers the Changes Drawer which is covered by REQ-CFGMODE-007
Row 3 from Rule Mappings (form title "Add" vs "Modify") classified as UI_DETAILTitle label is presentation detail, not behavior
Global/Strict pattern described once in REQ-CFGMODE-025 with entity-specific ACs in REQ-CFGMODE-026 through REQ-CFGMODE-029OQ-016 resolved: avoids ~20 near-duplicate REQs across 4 entity tabs
Import/export requirements (REQ-CONFIGIO-*) excludedBelong in configio.md per domain separation
Data model/backend requirements (batch update, global mapping model support) excludedBelong in kitcfg.md (data model) or SDS (implementation detail)
Proposed Configurations page (all 16 rows from Confluence) includedPart of the Config Mode workflow; the propose/approve lifecycle is a core Config Mode feature

REQ ID Assignment:

  • REQ-CFGMODE-001 through REQ-CFGMODE-014: Config Mode core layout, navigation, workflow (from inventory sections 2.1 and 2.7)
  • REQ-CFGMODE-015 through REQ-CFGMODE-024: Rule Mappings tab (from inventory section 2.4, renumbered from proposed KITCFG IDs since these are Config Mode UI behavior)
  • REQ-CFGMODE-025 through REQ-CFGMODE-034: Entity tab UI (global/strict pattern + entity-specific ACs from sections 2.8, 2.9, 2.12, 2.13)

Date: 2026-03-06