Clinical Decision Support service interfaces supporting SMARt-on-FHIR integration and CDS Hooks standard, generated with Angular CLI version 17.3.7.
If you don't have Angular CLI installed, check out the Angular CLI Overview and Command Reference page.
Clone the project and install the npm dependencies:
git clone https://github.com/srdc/smart-on-fhir-web-apps.git cd smart-apps npm install Visit the live demo at SRDC deployment or try EHR launch from the SMART App Gallery.
You can use the different login options provided. For epic, use the test practitioner account and example patients specified in their docs.
After logging in and selecting a patient, the patient data will be retrieved automatically form the connected FHIR server. Fill in the missing data and click save to see the calculated QRISK3 score and suggestions to reduce the risk. You can see the simulated risk if a suggestion is performed by the patient by checking the boxes next to the suggestions.
The project consists of 3 libraries:
smart-on-fhir: A library to manage SMART authentication flows by providingThis library is moved to https://github.com/srdc/ng-smart-on-fhir and https://www.npmjs.com/package/ng-smart-on-fhirLogin,CallbackandLaunchcomponents, andSmartOnFhirServiceservice for retrieving data from the integrated FHIR servers.- cds-hooks: A library to communicate with CDS-Hooks based clinical decision support servers. The library is extended by
CDSStoreservice which allows storing and subscribing to states of CDS related data by using Angular Signals. - common: A library for commonly used custom implementations with services and components. The
commonlibrary importsCDSHooksModuleand extends theCDSHooksServiceby custom methods commonly used in the child applications.
And 5 applications which are the user interfaces for the CDS services implemented in the smart-cds project:
- acc_aha: Interface for ACC/AHA service
- advance: Interface for ADVANCE service
- qrisk2: Interface for QRISK2 service
- qrisk3: Interface for QRISK3 service
- score: Interface for SCORE2 service
shc-generator: An example application to store and share Smart Health Cards (requires SHL server application, which is not yet available in Github)
Even the application codes are simple and similar, the Angular Monorepo architecture is chosen so the service interfaces can be deployed as separate applications.
Before running development server or building the applications, you should build the libraries in the following order:
ng build cds-hooks ng build common After building the libraries, run
ng serve <application name> for a dev server (e.g. ng serve qrisk2).
Navigate to http://localhost:4200/. The application will automatically reload if you change any of the source files.
You can develop your own CDS Hooks or FHIR applications easily using the existing libraries. Run
ng generate application <application name> --no-standalone Angular CLI will generate an application and add the necessary configurations in the angular.json file.
Open the angular.json file and add the bootstrap CSS file to your application's style configuration:
"<application name>": ... "styles": [ "node_modules/bootstrap/dist/css/bootstrap.min.css", ... ] Open the app-routing.module.ts (if not exists, check the Angular docs to learn how to add routing), and add wrap your routes with the SMART routes from the ng-smart-on-fhir library:
import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import {withSmartHandlerRoutes} from "ng-smart-on-fhir"; /* - 2nd argument indicates the path to the redirect after logged in. - You can set the 3rd argument to 'launch', 'client' or 'both' indicating which SMART login methods you want to use. - Set the 4th argument to false if you don't want to redirect unauthorized users to login page. - Set the 5th argument to true if you want to enable working with Smart Health Cards without any FHIR server. */ const routes: Routes = withSmartHandlerRoutes([ // your application's routes... ], '/', 'both', true, true); @NgModule({ imports: [RouterModule.forRoot(routes)], exports: [RouterModule] }) export class AppRoutingModule { } In your app.module.ts, import the SmartCommonModule from the common library with necessary configurations (see the example applications for configuring the library using environments),
import {SmartCdsCommonModule} from "common"; @NgModule({ ... imports: [ ..., SmartCdsCommonModule.forRoot(config) ] }) export class AppModule { } By importing the SmartCdsCommonModule, the components and services from the SMARt-on-FHIR and CDS-Hooks libraries will be available in your application. You can use them by injecting to your components.
import {SmartOnFhirService} from "ng-smart-on-fhir"; import {StatefulCdsService} from "common"; @Component({ selector: 'example-component', templateUrl: './example.component.html', styleUrl: './example.component.scss' }) export class ExampleComponent { constructor(private sof: SmartOnFhirService, private statefulCdsService: StatefulCdsService) { } fetchConditions() { this.sof.search('Condition', { subject: 'Patient/example', _sort: '-_lastUpdated' }).then(...) } } After building the libraries, run
ng build <application name> to build the selected application. The build artifacts will be stored in the dist/ directory.
You can find the Dockerfile in the docker/ folder which creates a single container with nginx including all the existing applications. You can build the libraries and applications:
call ng build cds-hooks call ng build common call ng build qrisk2 --configuration production --base-href /smart-apps/qrisk/ --deploy-url /smart-apps/qrisk/ call ng build qrisk3 --configuration production --base-href /smart-apps/qrisk3/ --deploy-url /smart-apps/qrisk3/ call ng build advance --configuration production --base-href /smart-apps/advance/ --deploy-url /smart-apps/advance/ call ng build acc_aha --configuration production --base-href /smart-apps/acc_aha/ --deploy-url /smart-apps/acc_aha/ call ng build score --configuration production --base-href /smart-apps/score2/ --deploy-url /smart-apps/score2/ Then, build the docker image:
docker build -t srdc/smart-apps -f ./docker/Dockerfile . Or use the build-docker.bat script on Windows. Finally, run the image with provided docker compose file:
docker compose -f ./docker/docker-compose.yml up -d You can edit the build script and Dockerfile to add/remove applications from the resulting docker image.