iCure Data Stack

iCure is a secured and distributed healthcare platform that helps you create apps and share data with the healthcare community. iCure can be used in the cloud or installed on-premises

iCure is :

  • Easy to use for web and app developers

  • Secured by an end to end encryption scheme

  • Fault-tolerant and highly scalable

  • Compatible with the FHIR data model

  • Available as an XDS registry/repository

Easy to use

iCure helps developers create connected apps for healthcare in no time. Let's give it a quick try by creating a node application that lets you store and access encrypted patients in a cloud data store.

First head to Register on our cloud platform and create a database and a user. You will need the username and password below.

Node 15 and yarn (https://classic.yarnpkg.com/en/docs/install) are needed for this example.

mkdir patient-manager
cd patient-manager
yarn init -y
yarn add @icure/api
#if you are using node two other dependencies are needed
yarn add node-fetch node-localstorage

The @icure/apiis the JS library used to simplify access to the iCure application server and to abstract the complexity of the cryptographic layer.

Node 15 is required because it includes the crypto compatibility layer

Now create a file name index.mjs

How to use
import {Api, b64_2ua, Patient} from '@icure/api'
import {crypto} from '@icure/api/node-compat.js'
const host = 'https://kraken.icure.dev/rest/v1';
const {
patientApi,
userApi,
healthcarePartyApi,
cryptoApi
} = Api(host, 'esmith', 'mypassword', crypto)
const loggedUser = await userApi.getCurrentUser();
const loggedHcp = await healthcarePartyApi.getCurrentHealthcareParty()
await cryptoApi.loadKeyPairsAsTextInBrowserLocalStorage(
loggedUser.healthcarePartyId,
b64_2ua("MIIEvAIBAD...9HOmEwWQ==")
)
const patient = await patientApi.createPatientWithUser(loggedUser,
await patientApi.newInstance(
loggedUser,
new Patient({
firstName: 'Gustave',
lastName: 'Eiffel',
profession: 'Architect & Engineer',
dateOfBirth: 19731012,
note: 'A very private information'
}))
)
const fetchedPatient = await patientApi.getPatientWithUser(loggedUser, patient.id)
console.log(JSON.stringify(fetchedPatient, null, ' '))

Replace 'demo' / 'demo' by your username and password. If you are writing code for the browser, omit to importcrypto and callApiwith just 3 arguments.

$ node index.mjs

Secured by end-to-end encryption

When you look at the definition of a patient or a contact, you see many properties that are related to encryption. They are detailed here. Understanding how they are used to guarantee the privacy of the data is not a small task but fortunately, you do not need to grasp the intricacies of the cryptographic scheme to encrypt and decrypt the data.

The high-level methods of the APIs take care of the encryption for you if you respect a few steps

  1. Always use the APIs returned by the Api() method. Those APIs have been instrumented to automatically encrypt or decrypt the data before transmitting it.

  2. Always call newInstance on the API before using a model object. This method makes sure that all the information needed to handle the encryption properly has been added to the model before you use it.

  3. Make sure that your private key is available before starting to use APIs that rely on encryption.