STD: Downward Sigmoid Control Rule (DSIGMOIDCTRL)
Version: v1.0.0
Status: Draft
SRS Source: docusaurus/docs/srs/rules/rule-downward-sigmoid-control.md
Rule Name: SIGMOID_CONTROL
Domain: RULES-DSIGMOIDCTRL
Overview
This document specifies tests for the Downward Sigmoid Control rule using decision tables and test vectors. The rule evaluates sigmoid curve patterns in control sample contexts with support for classification problem handling and individual curve resolution for failed validations.
Rule Characteristics:
- Inherits mathematical logic from Downward Sigmoid Rule (parent)
- Classification problem support extends base sigmoid behavior
- Individual curve resolution for failed validations
- Error reporting in Run Summary Target/Mix messages
Test Method: TM-API (per Test Plan - 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-DSIGMOIDCTRL-001 | Sigmoid Control Rule Evaluation | 9 | 15 | 100% | None |
| REQ-RULES-DSIGMOIDCTRL-002 | Rule Failure Error Reporting | 4 | 7 | 100% | None |
Totals: 2 REQs, 13 Conditions, 22 Test Vectors, 100% Coverage
REQ-RULES-DSIGMOIDCTRL-001: Sigmoid Control Rule Evaluation
| Variable | Type | Valid Values | Description |
|---|
curve.data | array | float[] | Curve data points for sigmoid fitting |
curve.valid_sigmoid | bool | true, false | Whether curve passes sigmoid validation |
obs.classification_problem | bool | true, false | Classification problem scenario flag |
curve.individual_resolution_success | bool | true, false | Individual curve resolution outcome |
Output Variables
| Variable | Type | Description |
|---|
rule.passed | bool | Whether the rule passed for this curve |
curve.status | string | resolved, unresolvable |
error.propagated | bool | Whether error was sent to handler |
Decision Table: Sigmoid Curve Validation (Mathematical Evaluation)
| TV | curve.valid_sigmoid | rule.passed | Covers |
|---|
| TV-001-001 | true | true | AC: Curve passes sigmoid validation |
| TV-001-002 | false | (see resolution) | AC: Curve fails, triggers resolution |
Decision Table: Classification Problem Handling
| TV | obs.classification_problem | curve.valid_sigmoid | behavior | Covers |
|---|
| TV-001-003 | false | true | Standard pass | AC: No classification, pass |
| TV-001-004 | false | false | Standard resolution | AC: No classification, fail triggers resolution |
| TV-001-005 | true | true | Standard pass | AC: Classification problem, pass |
| TV-001-006 | true | false | Extended resolution | AC: Classification problem extends base behavior |
Decision Table: Individual Curve Resolution
| TV | curve.valid_sigmoid | curve.individual_resolution_success | rule.passed | curve.status | error.propagated | Covers |
|---|
| TV-001-007 | false | true | true | resolved | false | AC: Resolution succeeds |
| TV-001-008 | false | false | false | unresolvable | true | AC: Resolution fails, mark unresolvable |
| TV-001-009 | true | N/A | true | N/A | false | AC: No resolution needed |
Decision Table: Batch Independence
| TV | curve_A.valid_sigmoid | curve_A.resolution | curve_B.status | curve_B.affected | Covers |
|---|
| TV-001-010 | false | attempting | valid | false | AC: A resolution does not affect B |
| TV-001-011 | false | failed | valid | false | AC: A failure does not affect B |
| TV-001-012 | false | success | valid | false | AC: A success does not affect B |
Decision Table: Gap Coverage — Classification Resolution and Batch Independence
| TV | Scenario | curve.valid_sigmoid | resolution_type | rule.passed | Covers |
|---|
| TV-DSIGMOIDCTRL-GAP-001 | Classification problem handling via individual curve resolution | false | Manual classification (Pos) | true (after resolution) | AC: Resolution resolves failing control |
| TV-DSIGMOIDCTRL-GAP-002 | Batch independence — one failing, one unaffected passing control | false (curve A) | N/A | false (A), true (B) | AC: Failure isolated to single control |
| TV-DSIGMOIDCTRL-GAP-005 | Resolution success path on negative-control failure | false | Manual classification (Neg) | true (after resolution) | AC: Neg resolution clears error |
REQ-RULES-DSIGMOIDCTRL-002: Rule Failure Error Reporting
| Variable | Type | Valid Values | Description |
|---|
rule.passed | bool | true, false | Rule evaluation outcome |
obs.target | string | Target identifier | Observation target association |
obs.well | string | Well identifier (e.g., A1) | Observation well position |
obs.index | int | 1, 2, 3, ... | Observation index within well |
Output Variables
| Variable | Type | Description |
|---|
run_summary.has_error | bool | Whether error appears in Run Summary |
run_summary.error_location | string | Target/Mix message section |
run_summary.error_context | string | Identifies failed observation |
Decision Table: Error Display Trigger
| TV | rule.passed | run_summary.has_error | Covers |
|---|
| TV-002-001 | true | false | AC: Pass produces no error |
| TV-002-002 | false | true | AC: Failure produces error in Run Summary |
Decision Table: Error Message Location and Context
| TV | rule.passed | run_summary.error_location | run_summary.error_context | Covers |
|---|
| TV-002-003 | false | Target/Mix messages | Contains target and observation ID | AC: Error in Target/Mix section |
| TV-002-004 | false | Target/Mix messages | "[Target Name]: Sigmoid control rule failed for observation [N]" | AC: Error identifies observation |
Decision Table: Multiple Observation Failures
| TV | obs_1.rule.passed | obs_2.rule.passed | error_count | contexts_distinct | Covers |
|---|
| TV-002-005 | false | false | 2 | true | AC: Each failure reported with its observation context |
| TV-DSIGMOIDCTRL-GAP-003 | false | false | 1 | true | AC: Failing control adds INCORRECT_SIGMOID_TARGET in target/mix context |
| TV-DSIGMOIDCTRL-GAP-004 | false | false | 2 | true | AC: Multiple failing observations reported with distinct target contexts |
Traceability to Existing Tests
| Requirement | Jira Tests | Status |
|---|
| REQ-RULES-DSIGMOIDCTRL-001 | BT-4914, BT-4916 | Existing |
| REQ-RULES-DSIGMOIDCTRL-002 | Pending | Gap |
Implementation Notes
Automation Status
| Requirement | Automation Status | Notes |
|---|
| REQ-RULES-DSIGMOIDCTRL-001 | Automated | BT-4916 covers individual curve resolution |
| REQ-RULES-DSIGMOIDCTRL-002 | Pending | Requires test implementation |
Test Data Requirements
- Valid sigmoid curves: Curves that pass sigmoid fitting validation
- Invalid sigmoid curves: Curves that fail initial validation but may resolve individually
- Unresolvable curves: Curves that fail both initial and individual resolution
- Classification problem scenarios: Observations flagged with classification problems
Gap Analysis
Identified Gaps
| Gap | Requirement | Description | Priority | Owner |
|---|
| GAP-001 | REQ-RULES-DSIGMOIDCTRL-002 | No Jira test ticket for error reporting in Run Summary | High | TBD |
- GAP-001: Create test ticket covering TV-002-001 through TV-002-005 for Run Summary error display verification