fhir

Type-safe FHIR resources and client

Package Version Hex Docs GitHub License

Gleam Lucy HL7® FHIR Flame

FHIR® (Fast Healthcare Interoperability Resources) is a standard for health care data exchange, published by HL7®. Gleam is simple and type-safe, making FHIR resource features like cardinality and choice types easy to work with.

Features

Quick Start

gleam new hello_fhir && cd hello_fhir && gleam add fhir

//In hello_fhir.gleam
import fhir/r4us
import fhir/r4us_httpc
import fhir/r4us_valuesets
import gleam/option.{Some}

pub fn main() {
  let joe =
    r4us.Patient(
      ..r4us.patient_new(),
      identifier: [
        r4us.Identifier(
          ..r4us.identifier_new(),
          system: Some("https://fhir.nhs.uk/Id/nhs-number"),
          value: Some("0123456789"),
        ),
      ],
      name: [
        r4us.Humanname(
          ..r4us.humanname_new(),
          given: ["Joe"],
          family: Some("Armstrong"),
        ),
      ],
      gender: Some(r4us_valuesets.AdministrativegenderMale),
      marital_status: Some(
        r4us.Codeableconcept(..r4us.codeableconcept_new(), coding: [
          r4us.Coding(
            ..r4us.coding_new(),
            system: Some(
              "http://terminology.hl7.org/CodeSystem/v3-MaritalStatus",
            ),
            code: Some("M"),
            display: Some("Married"),
          ),
        ]),
      ),
    )

  echo joe

  let assert Ok(client) =
    r4us_httpc.fhirclient_new("https://r4.smarthealthit.org/")

  // https://r4.smarthealthit.org/ might be down
  // if `let assert Ok(created)` errors try these alternatives:
  // fhirclient_new("https://hapi.fhir.org/baseR4")
  // fhirclient_new("https://server.fire.ly")

  let assert Ok(created) = r4us_httpc.patient_create(joe, client)
  let assert Some(id) = created.id
  let assert Ok(read) = r4us_httpc.patient_read(id, client)
  echo read
  let rip =
    r4us.Patient(..read, deceased: Some(r4us.PatientDeceasedBoolean(True)))
  let assert Ok(updated) = r4us_httpc.patient_update(rip, client)
  echo updated
  let assert Ok(_) = r4us_httpc.patient_delete(updated, client)
}
gleam run

FHIR Versions and HTTP client layers

The base fhir package provides R4 resources and sansio only. gleam add works for r4 packages, as they are published on hex.pm. Other versions are only available as source on github, so they need to be added as github link in gleam.toml (ideally with the commit sha ref).

resources and sansiohttpc clientrsvp client
r4gleam add fhirgleam add fhir_client_httpcgleam add fhir_client_rsvp
r4bhttps://github.com/PotatoEMR/fhir_r4bhttps://github.com/PotatoEMR/fhir_r4b_client_httpchttps://github.com/PotatoEMR/fhir_r4b_client_rsvp
r5https://github.com/PotatoEMR/fhir_r5https://github.com/PotatoEMR/fhir_r5_client_httpchttps://github.com/PotatoEMR/fhir_r5_client_rsvp
r4 with US Core typeshttps://github.com/PotatoEMR/fhir_r4ushttps://github.com/PotatoEMR/fhir_r4us_client_httpchttps://github.com/PotatoEMR/fhir_r4us_client_rsvp
r4 with primitive extensionshttps://github.com/PotatoEMR/fhir_r4phttps://github.com/PotatoEMR/fhir_r4p_client_httpchttps://github.com/PotatoEMR/fhir_r4p_client_rsvp

AI use

AI in parts of codegen (which creates Gleam code from FHIR data) and some tests. No AI in API design or documentation.

Other FHIR Docs

These pages provide only an intro to FHIR and the Gleam implementation. For comprehensive information, see the FHIR docs, e.g. for R4 AllergyIntolerance.

Gleam FHIR is not a mature project. Applications with real users and regulations are probably better off with a mature FHIR SDK such as https://docs.fire.ly/. These Gleam FHIR pages are modelled on their .NET SDK documentation.

https://chat.fhir.org/ is a public FHIR chatroom with many questions and answers, for instance in the implementers channel.

Search Document