Code Monkey home page Code Monkey logo

nova-ng-app's Introduction

Sample FHIR Application using Angular and SMART on FHIR Javascript Client Library

This is a sample SMART on FHIR application developed using Angular and the SMART on FHIR Javascript Client library. This can be used to analyze the client server interactions and capabilities.

Features

  1. UI rendered based on the Capability of the Server and the scopes the current user has in context.
  2. Can view the Requests and Responses sent to the FHIR servers for analysis.
  3. Can perform CRUD operations based on the capability of the server.
  4. Can work against multiple SMART on FHIR servers using the same application.
  5. Supports both Standalone Launch and EHR Launch sequences.

Angular is used only to structure the javascript code into various components and services. FHIR server interactions are done using the SMART on FHIR Javascript Client library

This project was generated with Angular CLI version 6.0.7.

Setup

Pre-requisites

  1. Node
  2. npm
  3. Angular CLI (npm install -g @angular/cli)

Clone the repository.

Run npm install

Run ng serve for a dev server. Navigate to http://localhost:4200/. The app will automatically reload if you change any of the source files.

IIS Setup

App can be setup in Windows as an IIS site. Ensure that the site is pointed to the /dist folder and that the URL Rewrite module has been installed in IIS.

Build

Run ng build to build the project. The build artifacts will be stored in the dist/ directory. Use the --prod flag for a production build.

Further help

To get more help on the Angular CLI use ng help or go check out the Angular CLI README.

Adding a new SMART on FHIR Server

The server configuration for CHBase PPE is already provided in the sample app.

This sample application can be used to connect to any SMART on FHIR Server.

The configuration details are specified in src/app/data/fhir-servers.ts

A sample configuration is shown below. Modify it and add it into the array.

More information about each property can be found on the comments of the typescript interface src/app/models/fhir-server.ts

{
    uniqueName: '[Unique name for the FHIR Server]',
    name: '[Display name for the FHIR Server]',
    baseUrl: '[Fhir Server Base URL]',
    information: {
        patientStandalone: [
            'Add lines here which will be helpful for launching the application, eg demo credentials, end points etc'
        ],
        ehrLaunch: [
            'Add lines here which will be helpful for launching the application, eg demo credentials, end points etc'
        ]
    },
    supportsAccessTypes: true
}

Register a new SMART on FHIR client application in CHBase

Follow the documentation provided here

Adding a new SMART on FHIR Client Application

This sample application can act as multiple client application against the same FHIR server or differnt FHIR servers.

The configuration details are specified in src/app/data/client-app.ts

A sample configuration is shown below. Modify it and add it into the array.

More information about each property can be found on the comments of the typescript interface src/app/models/client-server.ts

{
    name: '[Client Application Display Name]',
    uniqueName: '[Unique Name for the Client Application]',
    clientId: '[Client ID]',
    redirectUri: 'http://localhost:4200/redirect/[Unique Name for the Client Application]',
    launchUrl: 'http://localhost:4200/launch/[Unique Name for the Client Application]',
    scopes: '[Scopes]',
    standalonePatient: true,
    ehrLaunch: true,
    server: '[Unique name of the server]',
    secret: '[Client Secret, if any]'
}

SMART on FHIR Javascript Gist

This can be used in any client application making use of the SMART on FHIR Javascript client libaray

Launch Endpoint

const clientSettings = {
    client_id: [ClientID],
    // Adding the scopes launch or launch/patient depending upon the SMART on FHIR Launch sequence
    scope: [Other Scopes] + ' launch openid profile',
    redirect_uri: [RedirectURI],
    state: [Random State Information]
};
// If the client application has a secret, adding it into the configuration
if (hasSecret) {
    clientSettings['secret'] = '[Client Secret]';
}
const oauth2Configuration = {
    client: clientSettings,
    server: [FHIR Server Base URL]
};
// The authorize method of the SMART on FHIR JS client, will take care of completing the OAuth2.0 Workflow
FHIR.oauth2.authorize(oauth2Configuration, (authError) => {
    console.log(authError);
});

Redirect Endpoint/Anywhere in the application

oauth2ReadyErrback = (error) => {
    console.log(error);
}

oauth2ReadyCallback = (smartClient) => {
    //Make use of the API exposed by the smartClient object to perform FHIR API interactions
    //Examples can be found at https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/fhir-js-client/fhir-js-client-tests.ts
    smartClient.api.search(
    {
        type: 'Observation',
        query: {
            code: '15074-8'
        }
    }).then(response => {
        console.log(response);
    });
}

// Calling the SMART JS Client ready method to initialize the SMART Client
FHIR.oauth2.ready(oauth2ReadyCallback, oauth2ReadyErrback);

Common Clinical Data Set(CCDS) menu

Update the config showCCDSResourceMenuInstead in environment.js and re-build to enable or disable the ccds menu.

This menu uses the mapping defined in ..\src\app\data\ccds-resources.ts to select the appropriate resource and apply the required filtering.

Two types of filters are available -

  • SearchQueryParameters - Parameters defined here will be appended to the resource table's query filter. Use the fhir.js search reference to see a list of valid keys.
  • SearchSetFilter - Define a filter funtion that will be used to check if a resource entry object should be included in the user's query results.

Angular CLI GHPages

https://www.npmjs.com/package/angular-cli-ghpages Directly published a live demo into the Github ghpages using ngh

ng build --base-href "https://chbase.github.io/smart-ng-fhir-app/"
ngh

nova-ng-app's People

Contributors

nikhil-grh avatar rmchndrng avatar ram-grh avatar sumod-grh avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.