The coreOpen sourcePython · Rust

Graph storage for medical data.

MedRecord holds patients, diagnoses, procedures, medications and lab values as entities with their relationships — not as tables with foreign keys. Every product in the portfolio reads and writes this format.

Data model

One level per entity type.

Every event of a patient hangs directly off them. There is no intermediate level for encounters or cases — what happened on the same day is held in the event's date. Point at an entry to see everything recorded on the same day.

Patient
EntityPatient · born 1958Every entry hangs off this entity.
DiagnosisICD-10
I10Essential hypertension14 Mar 2024
I48.0Atrial fibrillation02 Nov 2024
I21.4NSTEMI21 Jun 2025
ProcedureOPS
1-275.0Holter ECG, 24 h21 Jun 2025
8-837.k0PCI with stent21 Jun 2025
MedicationATC
C09AA05Ramipril 5 mg14 Mar 2024
B01AF02Apixaban 5 mg02 Nov 2024
C10AA05Atorvastatin 80 mg21 Jun 2025
B01AC04Clopidogrel 75 mg21 Jun 2025
Lab valueLOINC
67151-1Troponin T · elevated21 Jun 2025
13457-7LDL cholesterol08 Sep 2025

Schematic view of an excerpt. Further entity types are possible.

Rationale

Why a graph and not a table.

Gaps stay gaps

A period without an entry is not a zero. In a graph the edge is simply absent — in a table there is a value asserting something the data does not support.

Catalogues side by side

ICD, OPS, ATC and LOINC sit on the node together with their version. Moving to a new catalogue year does not change the schema.

New types without migration

An additional entity type is one more node type, not a schema change with a migration path across every holding.

Open sourceNo licence fees

Included in the repository, open source, free to use.

Analytics Engine

Treatment effects from routine data. Methods for histories with uneven intervals and changing treatment.

Cohort Selector

Selection by the order of and distance between events, not just by codes inside a time window.

Audit Trail

Every transformation is recorded, so a result can be followed back to the raw data.

Data Import

OMOP tables, CSV and Parquet are read in without having to be forced into a grid first.

EnterpriseLicensed

Extensions for running it in house, with support and ongoing development.

Licence

HL7 FHIR Connector

Reads FHIR resources and writes results back, both directions over the same MedRecord.

Licence

OMOP Mapping

Maps in-house and regional codings back to OMOP vocabularies, with a record of each assignment.

Licence

Custom Backends

MedRecord works directly on existing systems, so no second copy of the data appears.

Licence

Code Embeddings

Pre-trained vector representations for all OMOP vocabularies, ready to use in your own models.

Repository

Open to inspection.

The source code is public. What the code does can be checked — by your IT and your data protection officer too, before the first installation.

MedRecord on GitHub

Placeholder link — to be replaced with the final repository address.

UnderneathGraphRecords

MedRecord is the medical application of a general graph library. GraphRecords itself knows nothing about medicine — only nodes, edges and attributes.

Go to the GraphRecords page
Next step

MedRecord applied to your holdings.

Whether an import is worth it depends on your data sources and catalogues. A first conversation usually settles that quickly.

Get in touch