fhir

Type-safe FHIR resources and client

Package VersionHex DocsGitHub License

Welcome

Gleam LucyHL7® 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

Warning

!!! package manager supports r4us ONLY; r4/r4b/r5/r4usp are not available, because of hex.pm package size limits. r4/r4b/r5/r4usp can be found at https://github.com/PotatoEMR/gleam-fhir/tree/main/src/fhir !!!

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

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. For an application with real users and regulations, you 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 chatroom with many FHIR implementers. If you have a question, there is a good chance someone has asked it there.