Heliotrope is an Atlassian Forge app for Jira that embeds a deterministic patient safety risk assessment workflow directly into Jira, supporting medical software compliance under IEC 62304 and ISO 14971.
- Primary Category: Apps for Specialized Industries (Healthcare & Medical Device Software)
- Bonus Prize: Best Marketplace published app
- Forge App ID:
8926276c-2a13-466e-814f-55b729f428d6
In regulated medical device and healthcare software engineering, defects and change requests require documented hazard analysis, risk control verification, and traceability before release.
Heliotrope integrates these controls directly into Jira across three native modules (jira:issuePanel, jira:projectPage, and jira:workflowValidator):
-
Initial & Residual Risk Classification (
jira:issuePanel):- Maps Harm Severity (Negligible, Moderate, Critical) and Initial Occurrence Probability (Rare, Possible, Frequent) to IEC 62304 Software Safety Classes (
Class A,Class B,Class C) and Risk Levels (LOW,MEDIUM,HIGH). - For
MEDIUMandHIGHrisk items, requires both a documented Risk Control / Mitigation Plan and a Post-Mitigation (Residual) Probability evaluation. - Issues remain in
Release Blocked: Mitigation RequiredorRelease Blocked: Residual Risk Too Highuntil a mitigation plan is entered and residual risk is reduced belowHIGH, at which point the verdict updates toCleared for Release.
- Maps Harm Severity (Negligible, Moderate, Critical) and Initial Occurrence Probability (Rare, Possible, Frequent) to IEC 62304 Software Safety Classes (
-
Accountable Sign-Off & Compliance Audit Trail:
- Records the Jira
accountIdof the engineer or QA reviewer who signs off on the assessment (rendered via the@forge/reactUsercomponent) and the exact timestamp. - Stores a chronological revision history (
Compliance Audit Trail, up to 10 entries per issue) showing timestamp, reviewer, safety class,Initial -> Residualrisk transition, and release verdict.
- Records the Jira
-
Automated Jira Labels & Issue Properties Sync:
- Upon saving, synchronizes assessment status to the Jira issue via
@forge/bridge(requestJira):- Jira Labels: Automatically applies
safety-class-a,safety-class-b, orsafety-class-calongsidesafety-clearedorrelease-blocked(while preserving existing user labels), making safety posture visible on Kanban/Scrum boards and queryable via JQL. - Jira Issue Property: Writes structured JSON data to
/rest/api/3/issue/{issueKey}/properties/heliotrope.safetyfor consumption by Jira Automation rules.
- Jira Labels: Automatically applies
- Upon saving, synchronizes assessment status to the Jira issue via
-
Project Safety Risk Register (
jira:projectPage):- Adds Heliotrope: Safety Risk Register to the project navigation sidebar.
- Aggregates all assessed issues in the project into a single table with summary counters (
Total Assessed Issues,Cleared for Release,Release Blocked), eliminating manual spreadsheet exports during regulatory audits.
-
Hard Release Gate (
jira:workflowValidator):- Provides the Heliotrope: Patient Safety Release Gate workflow validator.
- When attached by a Jira administrator to a closing transition (e.g.,
Mark as done), Jira physically blocks the status transition if an issue has no recorded safety assessment or is currentlyRelease Blocked.
src/
├── frontend/
│ ├── index.jsx # Issue panel UI: risk form, sign-off, and Compliance Audit Trail
│ ├── projectPage.jsx # Project-level Safety Risk Register (DynamicTable + summary counters)
│ └── jiraSync.js # Client-side sync for Jira Labels and Issue Properties via requestJira
├── resolvers/
│ └── index.js # Backend resolvers for per-issue and project-wide @forge/kvs queries
├── riskMatrix.js # Pure, deterministic IEC 62304 / ISO 14971 risk evaluation logic
├── validator.js # Workflow validator blocking transitions when clearedForRelease is false
└── index.js # Entry point exporting resolver and workflow validator handlers
- Frontend: Built strictly with native
@forge/reactUI Kit components (Box,Stack,Inline,Select,Textfield,Lozenge,Button,DynamicTable,EmptyState,User,Spinner). - Core Logic: Pure JavaScript in
src/riskMatrix.jswith zero external dependencies or side effects. - Backend & Persistence:
@forge/resolverwith@forge/kvsKey-Value Store (risk-assessment-${issueId}). - Permissions & Privacy: Uses
storage:app,read:jira-work, andwrite:jira-work(for label and issue property synchronization). Zero external network egress and zero third-party telemetry.
Judges can install Heliotrope directly onto any Jira Cloud site using the official distribution link:
Install Heliotrope on Jira Cloud
- Install App: Open the installation link above and select your Jira Cloud site.
- Open an Issue: Navigate to any Jira project and open an issue (or create a new one).
- Locate Panel: Open the Heliotrope: Patient Safety Assessment issue panel.
- Verify Baseline: Default values (Negligible / Rare) evaluate to
Class A,LOWrisk, with verdictCleared for Release. - Trigger Risk Escalation:
- Change Harm Severity to
Critical (Permanent injury or life-threatening)and Initial Occurrence Probability toFrequent (Regular occurrence). - The matrix escalates to
Class C(HIGHinitial risk) and displaysRelease Blocked: Mitigation Required. - The Risk Control / Mitigation Plan input and Post-Mitigation (Residual) Probability selector appear.
- Change Harm Severity to
- Apply Mitigation & Residual Risk:
- Enter a mitigation plan (e.g.,
Added hardware dosage limiter and unit test verification). - Set Post-Mitigation (Residual) Probability to
Rare (Unlikely to occur). - Residual Risk updates to
MEDIUM, and Release Verdict updates toCleared for Release.
- Enter a mitigation plan (e.g.,
- Sign Off & Verify Audit Trail:
- Click Sign Off & Save.
- Verify that your Jira user profile, timestamp, and a new row in the Compliance Audit Trail table appear.
- Check the issue's Labels field in Jira to confirm
safety-class-candsafety-clearedwere automatically applied. - Reload the page (
F5) to confirm persistence from@forge/kvs.
- In the left project sidebar, select Heliotrope: Safety Risk Register.
- Verify the summary counters (
Total Assessed Issues,Cleared for Release,Release Blocked) and the aggregated compliance table listing all assessed issues in the project.
- Open an issue, click the status dropdown → View workflow → Edit workflow.
- In the workflow diagram, select the transition leading to Done (e.g.,
Mark as done). - Under Rules → Validate details, click + and select Heliotrope: Patient Safety Release Gate, then click Add and Update workflow.
- In an issue, save a blocked assessment (e.g.,
Criticalseverity with an empty mitigation plan) and attempt to transition the issue to Done. Confirm that Jira blocks the transition with the Heliotrope Safety Gate error message. - Enter a valid mitigation plan, click Sign Off & Save (
Cleared for Release), and transition the issue to Done — the transition now succeeds.
# Install dependencies
npm install
# Validate manifest and code
forge lint
# Deploy to development
forge deploy
# Deploy to production (with scope upgrade approval if applicable)
forge deploy -e production --approve MAJOR_VERSION_RULE- Data Storage & Residency: Heliotrope runs entirely on Atlassian Forge (Runs on Atlassian). All safety assessment records are stored exclusively within the customer's Atlassian Cloud tenant using
@forge/kvsand Jira Issue Properties. - No Personal Data Collection: The app does not collect, transmit, or store Personally Identifiable Information (PII) or Protected Health Information (PHI) on external servers. User references are handled strictly via native Atlassian
accountIdidentifiers within Jira. - No Third-Party Egress: The app makes zero external network requests and includes no third-party analytics or tracking scripts.
- Support & Contact: For bug reports, feature requests, or support inquiries, please open an issue at https://github.com/vero-code/heliotrope/issues.
Licensed under the Apache License, Version 2.0. See LICENSE for details.