STD: Minimum Fluorescence Rule (MINFL)
Version: v1.0.0
Status: Draft
SRS Source: docusaurus/docs/srs/rules/rule-minimum-fluorescence.md
Rule Name: MINIMUM_FL
Domain: RULES-MINFL
Overview
This document specifies tests for the Minimum Fluorescence rule using decision tables and test vectors. The rule validates well fluorescence readings against configured minimum thresholds and propagates control well failures to the target level.
Rule Characteristics:
- Pure business logic (no UI)
- Threshold comparison (reading vs configured minimum)
- Control well propagation to target level
- Resolution code skip mechanism
Test Method: TM-API (per Test Plan Section 3.3 - Rules use automated API tests)
Verification Approach:
Rule verification is performed using data-driven test vectors. Each row in a decision table represents a complete verification scenario with defined inputs and expected outputs. This format enables exhaustive condition coverage while remaining concise and auditable.
Coverage Summary
| REQ ID | Title | Conditions | Test Vectors | Coverage | Gaps |
|---|
| REQ-RULES-MINFL-001 | Validate Well Fluorescence Against Minimum Thresholds | 6 | 8 | 100% | None |
| REQ-RULES-MINFL-002 | Propagate Control Well Fluorescence Failures to Target Level | 5 | 7 | 100% | None |
| REQ-RULES-MINFL-003 | Allow Users to Skip Minimum Fluorescence Rule via Resolution Code | 4 | 4 | 100% | None |
Totals: 3 REQs, 15 Conditions, 19 Test Vectors, 100% Coverage
| Variable | Type | Valid Values | Description |
|---|
config.minimum_fluorescence | float? | null, numeric | Target-level threshold; null disables rule |
obs.minimum_fluorescence | float? | null, numeric | Observation-level configuration |
obs.reading | float | numeric | Actual fluorescence reading |
obs.role_type | string | PC, NC, Quantification, Sample, Ignore | Observation role classification |
obs.resolution_code | string? | null, MIN_FLUORESCENCE | Applied resolution code |
Output Variables
| Variable | Type | Description |
|---|
well.error_code | string? | LOW_FLUORESCENCE_WELL, MINIMUM_FLUORESCENCE_MISSED, or null |
run_target.error_code | string? | LOW_FLUORESCENCE_TARGET or null |
REQ-RULES-MINFL-001: Validate Well Fluorescence Against Minimum Thresholds
Decision Table: Threshold Comparison
| TV | config.minimum_fluorescence | obs.minimum_fluorescence | obs.reading | well.error_code | Covers |
|---|
| TV-001-001 | 100000 | 100000 | 99999 | LOW_FLUORESCENCE_WELL | AC: Reading below threshold |
| TV-001-002 | 100000 | 100000 | 100000 | null | AC: Reading equals threshold |
| TV-001-003 | 100000 | 100000 | 100001 | null | AC: Reading above threshold |
Decision Table: Configuration Handling
| TV | config.minimum_fluorescence | obs.minimum_fluorescence | obs.reading | rule_applies | well.error_code | Covers |
|---|
| TV-001-004 | null | any | 50000 | false | null | AC: Config null, rule disabled |
| TV-001-005 | 100000 | null | 50000 | true | MINIMUM_FLUORESCENCE_MISSED | AC: Obs config null, rule cannot execute |
Decision Table: Boundary Values
| TV | config.minimum_fluorescence | obs.reading | well.error_code | Covers |
|---|
| TV-001-006 | 1 | 0 | LOW_FLUORESCENCE_WELL | AC: Minimum boundary (below) |
| TV-001-007 | 1 | 1 | null | AC: Minimum boundary (at) |
| TV-001-008 | 999999 | 999999 | null | AC: Large value boundary |
REQ-RULES-MINFL-002: Propagate Control Well Fluorescence Failures to Target Level
Decision Table: Role Type Propagation
| TV | obs.role_type | obs.reading | config.minimum_fluorescence | well.error_code | run_target.error_code | Covers |
|---|
| TV-002-001 | PC | 99999 | 100000 | LOW_FLUORESCENCE_WELL | LOW_FLUORESCENCE_TARGET | AC: PC propagates |
| TV-002-002 | NC | 99999 | 100000 | LOW_FLUORESCENCE_WELL | LOW_FLUORESCENCE_TARGET | AC: NC propagates |
| TV-002-003 | Quantification | 99999 | 100000 | LOW_FLUORESCENCE_WELL | LOW_FLUORESCENCE_TARGET | AC: Quantification propagates |
| TV-002-004 | Sample | 99999 | 100000 | LOW_FLUORESCENCE_WELL | null | AC: Sample does not propagate |
| TV-002-005 | Ignore | 99999 | 100000 | LOW_FLUORESCENCE_WELL | null | AC: Ignore does not propagate |
Decision Table: No Propagation When No Error
| TV | obs.role_type | obs.reading | config.minimum_fluorescence | well.error_code | run_target.error_code | Covers |
|---|
| TV-002-006 | PC | 100000 | 100000 | null | null | AC: No propagation when at threshold |
| TV-002-007 | NC | 100001 | 100000 | null | null | AC: No propagation when above threshold |
REQ-RULES-MINFL-003: Allow Users to Skip Minimum Fluorescence Rule via Resolution Code
Decision Table: Resolution Code Behavior
| TV | obs.resolution_code | obs.role_type | obs.reading | config.minimum_fluorescence | well.error_code | run_target.error_code | Covers |
|---|
| TV-003-001 | MIN_FLUORESCENCE | PC | 99999 | 100000 | null | null | AC: Resolution clears control well errors |
| TV-003-002 | MIN_FLUORESCENCE | Sample | 99999 | 100000 | null | null | AC: Resolution clears sample well error |
| TV-003-003 | null | PC | 99999 | 100000 | LOW_FLUORESCENCE_WELL | LOW_FLUORESCENCE_TARGET | AC: No resolution, errors applied |
| TV-003-004 | OTHER_CODE | PC | 99999 | 100000 | LOW_FLUORESCENCE_WELL | LOW_FLUORESCENCE_TARGET | AC: Different resolution, errors applied |
Test File Locations
| Requirement | Test File | Automation Status |
|---|
| REQ-RULES-MINFL-001 | tests/Unit/Rules/MinFluorescenceRuleTest.php | Automated |
| REQ-RULES-MINFL-002 | tests/Unit/Rules/MinFluorescenceRuleTest.php | Automated |
| REQ-RULES-MINFL-003 | tests/Unit/Rules/MinFluorescenceRuleTest.php | Automated |
Traceability to Existing Tests
| Requirement | Jira Tests | Status |
|---|
| REQ-RULES-MINFL-001 | BT-4167 | Existing |
| REQ-RULES-MINFL-002 | Pending | Gap |
| REQ-RULES-MINFL-003 | Pending | Gap |
Gap Analysis
Identified Gaps
| Gap | Requirement | Description | Priority | Owner |
|---|
| GAP-001 | REQ-RULES-MINFL-002 | No Jira test ticket for control well propagation | High | TBD |
| GAP-002 | REQ-RULES-MINFL-003 | No Jira test ticket for resolution code skip | Medium | TBD |
- GAP-001: Create test ticket covering TV-002-001 through TV-002-007 (control well propagation scenarios)
- GAP-002: Create test ticket covering TV-003-001 through TV-003-004 (resolution code scenarios)