fhir

Type-safe FHIR resources and client

Package Version Hex Docs

Warning

Breaking changes are planned for at least primitive extensions, implicit precision in decimal types, and date/datetime, possibly more. This package is published to get feedback on the most convenient ways to implement these. Lots of stuff will break until a version 1.

Welcome

Gleam Lucy HL7® FHIR Flame

FHIR® (Fast Healthcare Interoperability Resources) is a standard for health care data exchange, published by HL7®. Welcome to Gleam FHIR!

Documentation: Resources & Client

Quick Start

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

//In hello_fhir.gleam
import fhir/r4
import fhir/r4_httpc
import fhir/r4_valuesets
import gleam/option.{Some}

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

  echo joe

  let client = r4_httpc.fhirclient_new("https://hapi.fhir.org/baseR4")

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

Modules

(for each of r4, r4b, r5)

r4_valuesets
Enums for valuesets with required binding
r4
Resources and their data types, and decoder and to_json fns
r4_sansio
Prepare http request and parse http response
r4_httpc
Client for httpc (Erlang)
r4_rsvp
Client for rsvp (Lustre apps)

Why Gleam

Cardinality and choice types feel very natural in Gleam, and the compiler can prevent mistakes on complex resources such as operating on a missing field or on a bool instead of int. Plus it’s simple, you can learn the whole language in a day.

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.

Search Document