CyFHIR: A Native Neo4j plugin for handling FHIR Data

We all know that healthcare data is deeply and inherently connected and FHIR data standards make that more apparent than ever. The unstructured, but standardized, FHIR resources and the references that link them are perfect for storing and interacting with in a graph database. If you have ever used or are interested in graph databases, specifically Neo4j, myself and a few others have open sourced our ongoing project: CyFHIR through Optum.

CyFHIR is a native Neo4j plugin that acts as the bridge between FHIR and Neo4j. With CyFHIR, users can: directly load FHIR Resources into their Neo4j database, execute Neo4j queries (using Neo4jā€™s query language, Cypher ) on those FHIR Resources, and return query responses as FHIR Resources that meet HL7ā€™s standards.

My teammates and I are still relatively new FHIR developers, only having worked with it for about one year each and this project is fairly new as well (still not ready for our 1.0 release) but we would love feedback and advice on what we have now and will continue to come back and give updates.

Thank you!

You might also want to announce on - in particular the storage and/or analytics streams

1 Like

What an interesting work:)


This is very interesting work. I took a very quick look through the code and have a few quick questions:

  • Can the result of your work be adapted to be used as a HAPI plain server?
    Plain Server Introduction - HAPI FHIR Documentation

  • How is the data actually stored - are there different labeled nodes set up for each
    of the record like structures found in the UML diagrams for each FHIR resource?
    See for example Patient - FHIR v4.0.1

    • one labeled node type for the patient domain resource
    • one labeled node type for links
    • one labeled node type for contacts
    • one labeled node type for communications
    • relationships between the patient node type and each of
      • general practioners
      • links
      • contacts
      • communications
  • How do you handle different versions of an individual resource (caused by its being updated)?

Thanks . . .

Phil Troy