vumchealthitpublic/stratify-ahf-ui

By vumchealthitpublic

Updated 13 days ago

User interface for the stratify-ahf application

Helm
Image
0

3.9K

vumchealthitpublic/stratify-ahf-ui repository overview

STRATIFY AHF UI Project Overview

Release History

This release uses the "unstable" tagged image.

  • 0.2.0 - Initial release.
  • 0.2.3 - Support for contextPath.
  • 0.2.4 - Configuration for app.config.json & smart.config.json.

Installation

Prerequisites

This app depends on stratify-ahf-api being installed.

Installing the Helm Chart

The stratify-ahf-ui application should be installed using Helm.

helm install <MY_RELEASE_NAME> oci://registry-1.docker.io/vumchealthitpublic/stratify-ahf-ui --version <HELM_CHART_VERSION> 

Where...

  • MY_RELEASE_NAME is your name for the installed application
  • HELM_CHART_VERSION is the version of the stratify-ahf-ui Helm Chart.

_NOTE: By default, the stratify-ahf-ui application expects the stratify-ahf-api to be available via a service named stratify-ahf-api listening on port 8888.

Overriding API Location

The expected service name and port for stratify-ahf-api (i.e. stratify-ahf-api:8080), can be overridden by supplying a values file with the overridden configMap values. For example...

configMap:
  data:
    api.host: "stratify-ahf-api"
    api.port: "8080"

The new values file (e.g. values.yaml) can be passed into the helm install command with the -f flag (e.g. helm install -f values.yaml...).

Overriding Container Image

Although each Helm Chart is associated with a specific container image version, a different container image can be specified on the command line.

helm install <MY_RELEASE_NAME> oci://registry-1.docker.io/vumchealthitpublic/stratify-ahf-ui --version <HELM_CHART_VERSION> --set image.tag=<IMAGE_TAG>

Where...

  • MY_RELEASE_NAME is your name for the installed application
  • HELM_CHART_VERSION is the version of the stratify-ahf-ui Helm Chart
  • IMAGE_TAG is the version of the container to be deployed

NOTE: Not all container images are compatible with every Helm Chart. Override the container image version at your own risk.

Configuration

The application is configured by overriding configMap values.

ConfigMap values can be overridden (as above) by supplying flags to the helm install which specify items beginning with "configMap.data.".

Example:

helm install <MY_RELEASE_NAME> oci://registry-1.docker.io/vumchealthitpublic/stratify-ahf-ui \
  --set configMap.data.my-config-key=my-config-value \
  --set-file configMap.data.my-config-key=my-config-file.json \
  ...
Context Root

If the application is deployed at its own context root (e.g. because the host is shared with other applications), configure the context root.

  • key: contextRoot
  • default: /
  • example flag: --set configMap.data.contextRoot="/ohsu"
FHIR Standalone Launch

The application can be launched directly from a web browser. Specify the FHIR servers and environments for which it can be launched.

  • key: smart.config.json
  • default: no servers
  • example flag: --set-file configMap.data.smart\\.config\\.json=my-smart.config.json

The contents of this key is JSON. See this example for the general structure. Multiple servers can be mabe available. All servers should have the same scopes. Each server needs a clientId, which is specific to the site. Client IDs may be shared among environments.

Contents of example my-smart.config.json:

{
  "rootPath": [ "/" ],
  "servers": [
    {
      "name": "Epic DEV",
      "description": "Epic Dev Environment (R4)",
      "iss": "https://my-ehr.org/FHIR/R4",
      "clientId":"abc-123",
      "scopes": [ "online", "patient/*.read", "openid", "fhirUser", "launch/patient", "launch/encounter" ]
    }
  ]
}
General Application
  • key: app.config.json
  • default:
    • environment: ohsu-development
    • app title: STRATIFY AHF
    • URLs for API and logging: /api and /logs
    • CQL library ids: stratifyahf-main and stratifyahf-calc
    • project contact info: placeholder text
    • URL for project info: https://www.vanderbiltem.com/stratify
    • Epic flowsheet mappings: none
  • example flag: --set-file configMap.data.app\\.config\\.json=my-app.config.json

The contents of this key is JSON. See this example for the general structure.

Contents of example my-app.config.json:

{
  "environment": "local",
  "appTitle": "STRATIFY AHF",
  "apiUrl": "/api",
  "logUrl": "/logs",
  "mainLibraryId": "stratifyahf-main",
  "calcLibraryId": "stratifyahf-calc",
  "contact": {
    "name": "Q. Livingstone, MD. My Medical Center",
    "email": "[email protected]",
    "url": "https://my-medical-center.org/personnel/dr-linvingstone-md"
  },
  "riskPredictionToolUrl": "https://www.vanderbiltem.com/stratify",
  "flowsheets": [
    {
      "env": "https://my-ehr.org/FHIR/R4",
      "defaultSystem": "http://open.epic.com/FHIR/StructureDefinition/observation-flowsheet-id",
      "ids": {
        "bnpPredictor": "abc123",
        "troponinPredictor": "abc123",
        "bunPredictor": "abc123",
        "sodiumPredictor": "abc123",
        "spO2Predictor": "abc123",
        "homeO2Predictor": "abc123",
        "homeO2PredictorModified": "abc123",
        "rrPredictor": "abc123",
        "rrPredictorModified": "abc123",
        "dbpPredictor": "abc123",
        "qrsDurationPredictor": "abc123",
        "qrsDurationPredictorModified": "abc123",
        "outpatientACEIPredictor": "abc123",
        "outpatientACEIPredictorModified": "abc123",
        "dialysisPredictor": "abc123",
        "dialysisPredictorModified": "abc123",
        "agePredictor": "abc123",
        "bmiPredictor": "abc123",
        "bmiPredictorModified": "abc123",
        "riskScore": "abc123",
        "riskScoreLevel": "abc123",
        "riskScoreCalculationFormulaId": "abc-123"
      }
    },
    ...
  ]
}
Site-specific Display Values

Part of the JSON file is text that is displayed in the UI.

The app title is displayed in the banner of the UI.

The contact info is displayed on the screen. The contact URL is used as a clickable link that opens an external web page.

The tool URL is used as a clickable link for getting more information about the tool and the project.

Excerpt of example my-app.config.json:

{
  ...
  "appTitle": "STRATIFY AHF",
  "contact": {
    "name": "Q. Livingstone, MD. My Medical Center",
    "email": "[email protected]",
    "url": "https://my-medical-center.org/personnel/dr-linvingstone-md"
  },
  "riskPredictionToolUrl": "https://www.vanderbiltem.com/stratify",
  ...
}
Site-specific Epic Flowsheet Mapping

When the applications presents new risk prediction calculations to the provider, it writes back FHIR Observation resources to record what was shown to the provider. The Observations are coded using the mappings provided here.

Each displayed value has a mapping that corresponds to flowsheet definition in Epic. Six of the displayed values are modifiable, so an additional flowsheet value is written to indicate if the values were modified. Lastly, the risk calculation output and the formula selected for calculation are stored in flowsheet values.

In order to store these values into Epic flowsheets, the coding system is http://open.epic.com/FHIR/StructureDefinition/observation-flowsheet-id. The identifiers are encoded flowsheet ids, which are generated using Epic tools or by requesting the generation from Epic. The ids are specific to every to the Epic site and environment, so each id must be generated once for each environment.

Multiple environments are configured by adding additional entries to the flowsheets array. Each environment is identified by its FHIR endpoint.

Excerpt of example my-app.config.json:

{
  ...
  "flowsheets": [
    {
      "env": "https://my-ehr.org/FHIR/R4",
      "defaultSystem": "http://open.epic.com/FHIR/StructureDefinition/observation-flowsheet-id",
      "ids": {
        "bnpPredictor": "abc123",
        "troponinPredictor": "abc123",
        "bunPredictor": "abc123",
        "sodiumPredictor": "abc123",
        "spO2Predictor": "abc123",
        "homeO2Predictor": "abc123",
        "homeO2PredictorModified": "abc123",
        "rrPredictor": "abc123",
        "rrPredictorModified": "abc123",
        "dbpPredictor": "abc123",
        "qrsDurationPredictor": "abc123",
        "qrsDurationPredictorModified": "abc123",
        "outpatientACEIPredictor": "abc123",
        "outpatientACEIPredictorModified": "abc123",
        "dialysisPredictor": "abc123",
        "dialysisPredictorModified": "abc123",
        "agePredictor": "abc123",
        "bmiPredictor": "abc123",
        "bmiPredictorModified": "abc123",
        "riskScore": "abc123",
        "riskScoreLevel": "abc123",
        "riskScoreCalculationFormulaId": "abc-123"
      }
    },
    ...
  ]
}
Site-specific Terminologies

The environment is meant to be configured differently for each environment where the application is deployed. It is not displayed and not used in the application logic.

The URL for the API is used in the application logic to identify where to request CQL evaluation. The default is /api because the helm charts are pre-configured to forward requests from that path in the UI to the API.

The URL for logging is used in the application logic to identify where to send application events to be logged. The default is /logs because the helm charts are pre-configured to forward requests from that path in the UI to the VUMC Splunk Event Collector endpoint.

A way to override the forwarder for log events is not yet specified.

The identifiers for the CQL Library resources are used by the application logic to request evaluation for the main calculation and for re-calculation. The defaults are stratifyahf-main and stratifyahf-calc because these FHIR Library resources are embedded in the API application.

Excerpt of example my-app.config.json:

{
  "environment": "local",
  "apiUrl": "/api",
  "logUrl": "/logs",
  "mainLibraryId": "stratifyahf-main",
  "calcLibraryId": "stratifyahf-calc",
  ...
}

Tag summary

Content type

Image

Digest

sha256:21e949c6a

Size

116 MB

Last updated

13 days ago

docker pull vumchealthitpublic/stratify-ahf-ui:stable