The Risksheet Traffic Lights Module is a real-time visual completion status indicator that displays three traffic lights showing FMEA assessment progress within the Risksheet interface. It provides at-a-glance feedback on pre-mitigation assessment completeness, post-mitigation assessment completeness, and remaining high-priority risks — enabling teams to track remaining work and unacceptable residual risk without manual counting.
Overview
The Traffic Lights Module is a self-contained JavaScript module (risksheet-traffic-lights.js) that overlays a three-light status panel in the top-right corner of the Risksheet grid. The module:
- Monitors live data in the Risksheet grid via Wijmo CollectionView events
- Groups rows by work item to count unique failure modes (not sub-rows for causes/effects/tasks)
- Applies configurable field sets to determine completeness criteria
- Detects high-risk items using either enum matching or numeric thresholds
- Updates in real-time as users edit data — no save or refresh required
- Displays fractional progress (e.g., “7/12 items complete”) and high-risk counts
The module is production-ready for AIAG-VDA FMEA workflows and can be customized for ISO 26262, MIL-STD-882, or other methodologies.
Core Architecture
Configuration Properties
The module exposes configuration via the window.risksheetTrafficLightsConfig object, set before the script loads:
| Property | Type | Default | Description |
|---|
tourId | string | "traffic-lights" | Unique key for localStorage tracking of help tooltip state |
preFields | string[] | ["sev", "occ", "det"] | Array of column IDs that must have values for pre-mitigation assessment to be marked complete (AIAG-VDA: Severity, Occurrence, Detection) |
postFields | string[] | ["occNew", "detNew"] | Array of column IDs required for post-mitigation assessment (revised Occurrence and Detection after risk controls applied) |
highRiskColumn | string | "premitigationAP" | Column ID to evaluate for high-risk detection; typically the Action Priority (AP) field or RPN calculation |
highRiskCriteria | string | "H" | High-risk detection criterion: enum value (e.g., "H") or numeric threshold comparison (e.g., ">100" for RPN-based detection) |
highRiskMode | string | "enum" | Detection mode: "enum" for string value matching, "numeric" for threshold-based detection (e.g., RPN > 100) |
groupBy | string | "auto" | Row grouping strategy: "auto" (tries systemItemId then "ID"), or explicit column ID for custom grouping |
tooltipText | object | (see below) | Customizable help text for each traffic light; auto-localized per standard |
enabled | boolean | true | Toggle traffic lights on/off (useful for conditional deployment) |
Default Tooltip Text (AIAG-VDA FMEA)
tooltipText: {
pre: "Pre-mitigation assessment complete: all failure modes have Severity, Occurrence, and Detection rated",
post: "Post-mitigation assessment complete: all failure modes have revised Occurrence and Detection after risk controls applied",
high: "Remaining high-priority risks: failure modes with Action Priority = High requiring additional mitigation"
}
ISO 26262 Customization Example
window.risksheetTrafficLightsConfig = {
preFields: ["severity", "exposure", "controllability"],
postFields: ["postmitigationSeverity", "postmitigationExposure"],
highRiskCriteria: ">=C", // ASIL C or D remains unacceptable
highRiskMode: "enum",
tooltipText: {
pre: "HARA assessment complete: all hazards classified by Severity, Exposure, Controllability",
post: "Post-mitigation review complete: residual ASIL confirmed for all hazards",
high: "Unacceptable ASIL: hazards remaining at ASIL C or D after risk controls"
}
};
Traffic Light States and Colors
Each of the three lights displays one of three states based on row count evaluation:
Pre-Mitigation Light ( Pre)
| State | Color | Condition | Meaning |
|---|
| Complete | Green (#58FF59) | All unique items have values in ALL preFields | Pre-mitigation risk assessment is complete for all failure modes |
| Partial | Yellow (#FFD700) | Some (but not all) unique items have complete preFields | Some failure modes still need severity/occurrence/detection ratings |
| Incomplete | Red (#FF0000) | Zero items have complete preFields OR no items exist | No failure modes have been rated yet; FMEA assessment not started |
Post-Mitigation Light ( Post)
| State | Color | Condition | Meaning |
|---|
| Complete | Green (#58FF59) | All unique items have values in ALL postFields | Post-mitigation re-assessment complete; all risk controls have been evaluated |
| Partial | Yellow (#FFD700) | Some unique items have complete postFields | Some failure modes need revised occurrence/detection after mitigation |
| Incomplete | Red (#FF0000) | Zero items have complete postFields OR no items exist | Risk controls not yet evaluated; residual risk not assessed |
High-Risk Light ( High)
| State | Color | Condition | Meaning |
|---|
| Safe | Green (#58FF59) | No items match highRiskCriteria (e.g., no AP=‘H’ items, or all RPN ≤ threshold) | All risks mitigated to acceptable levels; no unacceptable residual risk |
| Warning | Yellow (#FFD700) | Some items match highRiskCriteria but count is monitored | Elevated risk present; verify risk controls effectiveness |
| Critical | Red (#FF0000) | One or more items match highRiskCriteria (e.g., AP=‘H’ exists) | Unacceptable residual risk; additional mitigation required before release |
Each light shows a fractional count representing unique work items:
| Light | Display Format | Example | Interpretation |
|---|
| Pre | {complete}/{total} | 7/12 | 7 of 12 failure modes have pre-mitigation assessment complete |
| Post | {complete}/{total} | 5/12 | 5 of 12 failure modes have post-mitigation assessment complete |
| High | Count or status text | 2 remaining or None | 2 failure modes remain at high-risk priority; green + “None” = all mitigated |
The counts represent unique work items (failure modes), not spreadsheet rows. If a failure mode has sub-rows (causes, effects, or tasks), those are grouped under the parent work item and counted once. This prevents artificial inflation of completion percentages and gives an accurate view of FMEA assessment progress per failure mode.
Real-Time Synchronization
The module listens to two Wijmo CollectionView events and recalculates light states automatically:
| Event | When Triggered | Result |
|---|
collectionChanged | User edits a cell in the grid, adds/deletes a row, or changes a value | Lights update immediately (no delay) |
sourceCollectionChanged | Risksheet applies a filter, reorder, or view change | Lights recalculate based on visible (filtered) rows |
Traffic lights update live as users work. Changes are reflected in real-time without requiring a save to Polarion or a page refresh. This enables immediate feedback on remaining work and helps teams prioritize mitigation efforts during collaborative FMEA sessions.
Row Grouping and Unique Item Detection
The module automatically groups spreadsheet rows by unique work item ID to prevent double-counting:
Auto-Grouping Logic
- Check if “systemItemId” column exists in grid metadata
→ YES: Use systemItemId (for linked items like Failure Mode sub-rows)
→ NO: Fall back to “ID” column (for standalone items)
- Iterate rows and group by selected groupBy field value
Example:
Row 1: ID=FM-001, sev=8, occ=3 ← Unique item
Row 2: ID=FM-001-CAUSE-1, … ← Sub-row (same parent FM-001)
Row 3: ID=FM-002, sev=7, occ=2 ← Different unique item
Result: 2 unique items (FM-001, FM-002), not 3 rows
- Evaluate completeness PER UNIQUE ITEM
Item FM-001: Check if ALL rows with this ID have preFields filled
Item FM-002: Check independently
Custom Grouping
Override the auto-detection by setting groupBy to an explicit column ID:
window.risksheetTrafficLightsConfig = {
groupBy: "customElementId" // Use this column for grouping instead of auto-detect
};
High-Risk Detection Modes
The module supports two detection strategies, configured via highRiskMode:
Mode 1: Enum Matching (Default)
Used for categorical risk indicators like Action Priority (AP):
window.risksheetTrafficLightsConfig = {
highRiskColumn: "premitigationAP",
highRiskCriteria: "H",
highRiskMode: "enum"
};
Logic: An item is high-risk if the value in highRiskColumn exactly matches highRiskCriteria. Example: Any failure mode with AP=‘H’ (High) is flagged as high-risk.
Use cases:
- AIAG-VDA FMEA: AP=‘H’ (High Action Priority)
- ISO 26262: ASIL >= ‘C’ (unsafe to leave unmitigated)
- MIL-STD-882: Risk Level=‘Critical’ or ‘Catastrophic’
Mode 2: Numeric Threshold
Used for calculated risk indicators like RPN (Risk Priority Number):
window.risksheetTrafficLightsConfig = {
highRiskColumn: "premitigationRPN",
highRiskCriteria: ">100",
highRiskMode: "numeric"
};
Logic: An item is high-risk if the numeric value in highRiskColumn satisfies the threshold in highRiskCriteria. Supported operators: >, >=, <, <=, =, !=.
Use cases:
- AIAG-VDA FMEA: RPN > 100 (residual risk threshold)
- Custom scoring: Risk Score >= threshold
- Performance indicators: Failure rate > 1e-7 per hour (automotive safety target)
The module includes an optional interactive help button that displays explanatory text without requiring the Driver.js tour library:
| Element | Interaction | Behavior |
|---|
? Help Button | Click | Toggles visibility of tooltip explaining all three lights and their color meanings |
| Tooltip | Display | Shows configuration-specific text (customizable via tooltipText property) |
| Tooltip | Click outside | Auto-closes; can be reopened by clicking help button again |
The help feature is entirely optional — if no help button exists on the page, traffic lights function normally without it. The tooltip is pure CSS with no external dependencies.
If you add a custom help button, use the selector #traffic-lights-help (or update the module code to match your button ID). The module will automatically bind to it if present.
Integration with Risksheet Configuration
Traffic lights complement the Risksheet column configuration (risksheet.json). They do NOT require special column setup but work best when:
- Pre-mitigation columns are visible in the default view (Severity, Occurrence, Detection)
- Post-mitigation columns are in a separate view (e.g., “Post-Mitigation Assessment”) to support progressive workflow
- Action Priority is calculated or manually entered in the grid (used for high-risk detection)
Example: AIAG-VDA FMEA Risksheet with Traffic Lights
{
"config": {
"trafficLights": {
"enabled": true,
"preFields": ["sev", "occ", "det"],
"postFields": ["occNew", "detNew"],
"highRiskColumn": "premitigationAP",
"highRiskCriteria": "H",
"highRiskMode": "enum"
}
},
"views": [
{
"id": "initial-risk-assessment",
"label": "Initial Risk Assessment",
"description": "Pre-mitigation: Severity, Occurrence, Detection",
"columns": ["id", "failureMode", "sev", "occ", "det", "rpn"]
},
{
"id": "post-mitigation-assessment",
"label": "Post-Mitigation Assessment",
"description": "Revised risk after controls: new Occurrence, new Detection, residual RPN",
"columns": ["id", "failureMode", "occNew", "detNew", "rpnNew", "premitigationAP"]
}
]
}
Browser Compatibility
| Browser | Minimum Version | Notes |
|---|
| Chrome / Chromium | 90+ | Recommended; FlexGrid rendering highly optimized |
| Firefox | 88+ | Supported; slight performance overhead |
| Safari | 14+ | Supported; test on macOS and iOS |
| Edge | 90+ | Chromium-based; same as Chrome support |
| IE 11 | Not supported | Use modern browser for Risksheet compatibility |
The module is optimized for FMEA documents with up to 500 unique work items. For larger documents (> 500 FMs), consider:
- Filtering: Use Risksheet view filters to focus on specific system elements or risk areas — traffic lights recalculate for filtered data only
- Pagination: Break large FMEAs into multiple smaller documents (per system element)
- Debouncing: Module automatically debounces updates to prevent excessive recalculation during rapid user edits
For additional context on FMEA workflow and status tracking: