mimic4fhir converts data from MIMIC IV database (PostgreSQL) to HL7 FHIR R4 resources or the German core data set of Medical Informatics Initiative. Currently the following modules are supported:
- Patient
- Encounter
- Diagnosis
- Procedure
- Laboratory Results
- Medication
- Imaging techniques
To get access to MIMIC-IV , you have to complete a privacy course, see here for more information. In addition to the MIMIC data, four FHIR ConceptMaps are needed for the translation of the codes. You can find a program to generate the necessary FHIR ConceptMaps here.
Bundles are created per patient admission/encounter. If the number of resources in a bundle exceeds 15000, a new bundle will be created. This limits the bundle size to ~20MB and are transcaction bundles with conditional creates. Resource bundles can be
- printed to console
- saved as xml file
- pushed to a fhir server
by setting the "outputMode":
app.setOutputMode(OutputMode.PRINT_FILE);
The parameter "topPatients" allows to limit the number of loaded patients; 0 means all patients. Transforming always starts with Patient 1.
app.setTopPatients(10);
A RabbitMQ server is required to run on localhost. Please note: Performance is highly dependent on the following and might be quite low:
- database partitioning and indexing for table chartevents (by HADM_ID)
- There is a script here which adds additional indeces to the PostgresSQL DB
- server performance (if pushed to a server)
We recommend starting with a low number of patients and with saving to xml files to check the database performance.
// Add server and config data..
Config configObj = new Config();
// Postgres
configObj.setPassPostgres("Pa33word!");
configObj.setPortPostgres("5432");
configObj.setUserPostgres("user");
configObj.setPostgresServer("192.168.0.1");
configObj.setDbnamePostgres("postgres");
// Fhir
configObj.setFhirServer("http://server.com/fhir/");
configObj.setFhirxmlFilePath("output/");
// Validation
// Set to true, if you want to validate with the InstanceValidator
configObj.setValidateResources(false);
// ConceptMaps URI needed for the conversion
configObj.setICD9toICD10GM("https://server.com/fhir/ConceptMap/d9be1278-282b-4e80-8be5-226cb30a9eb5");
configObj.setICD9ToSnomed("https://server.com/fhir/ConceptMap/9f0b2a1f-8253-47fc-a8cf-118226823e22");
configObj.setICD9ProcToSnomed("https://server.com/fhir/ConceptMap/01c83771-6524-46ef-aaa8-4f63e1d837ea");
configObj.setICD10PCStoSnomed("https://server.com/fhir/ConceptMap/03ea8e3a-7fc3-4fb3-8e30-21af497c2a63");
// Use CXR
// If you have access to the CXR, the conversion will added DiagnosticReport and ImagingStudying
// for the corresponding patients
configObj.setUseCXR(false);
//Specification
// Choose plain R4 or the German MII KDS output
configObj.setSpecification(ModelVersion.KDS);
Mimic4Fhir app = new Mimic4Fhir();
app.setConfig(configObj);
app.setOutputMode(OutputMode.PRINT_FILE);
// 25 Patients chosen random (boolean flag) from the MIMIC IV
app.setTopPatients(25, true);
// You can run the conversion single-threaded
//app.start();
// Or with 10 Threads
app.startWithThread();
In addition, there is a command line interface to accelerate the creation for automated testing.
java -jar target/mimic4fhir-1.0.0-jar-with-dependencies.jar --help
-d, --database=<postgresDatabase>
The PostgreSQL Database
--debug Prints bundle into the console
--fhir=<fhirEndpoint> FHIR Endpoint to submit the Resources
--file=<filePath> Output Path the Resources
-h, --help Show this help message and exit.
--kds Enable to German MII KDS as the output
-p, --port=<postgresPort> The PostgreSQL Port
--patients=<patients> Number of Patients to transform
-pwd, --password=<postgresPassword>
The PostgreSQL User Password
--random Randomly choose patients to convert
-s, --server=<postgresServerIP>
The PostgreSQL Server IP
--thread Enable Threading
-u, --user=<postgresUser> The PostgreSQL User
-V, --version Print version information and exit.
-validate Validates the Resources
--10PCSToSCT=<ICD10PCStoSCT>
FHIR ConceptMap to translate ICD10 PCS to SNOMED CT
--9ProcToSCT=<ICD9ProcToSCT>
FHIR ConceptMap to translate ICD9 Procedure to
SNOMED CT
--9To10GM=<ICD9toICD10GM>
FHIR ConceptMap to translate ICD9 to ICD10GM
--9ToSCT=<ICD9toSCT> FHIR ConceptMap to translate ICD9 to SNOMED CT
--cxr Enable the MIMIC IV CXR
Example:
java -jar target/mimic4fhir-1.0.0-jar-with-dependencies.jar --server=192.186.0.1 --user=user --password=Pa33word! --patients=20 --thread --file=output/
This source code is licensed under Apache 2.