Python FHIR Converter

Python FHIR converter, fastish, most nuts and bolts included, ready for production

License PyPi - Version Python versions
Coverage


Provides a python implementation of FHIR-Converter written in C#. This allows the data transformation to live and breath as any other python module in your favorite python based data pipeline framework

Whats supported:

  • CDA->FHIR R4
  • STU3->FHIR R4

Key features:

  • Fast. Speed is relative. Minimizes overhead outside the rendering engine
  • Designed to be extensibile. Use the thin rendering API or leverage the builtin parts
  • Designed to be easy to use, extend and deploy. Use what's bundled or manage the environment your way
  • Multiple enhancement / bug corrections included with the packaged CDA->R4 templates.

Limitations:

  • Additional work is needed to support JSON->FHIR, HL7v2->FHIR and FHIR->HL7v2.
  • Comma between parameters. Python-liquid requires a comma between parameters. Templates brought to this environment may need commas added.
  • Variable names when passing variables to a snippet. Python-liquid requires the identifier / variable name. Templates brought to this environment may need changes. See Resource.liquid as an example of a template that has been updated.
  • C# date format strings are supported to an extent to mimimize the impact of migrating templates. See filters for more information.

Built on the back of:

Install

Install Python FHIR Converter using Pipenv:

$ pipenv install -u python-fhir-converter

Or pip:

$ pip install python-fhir-converter
  • Documentation: https://chaseastewart.github.io/fhir-converter/
  • PyPi: https://pypi.org/project/python-fhir-converter/
  • Source: https://github.com/chaseastewart/fhir-converter
  • Issues: https://github.com/chaseastewart/fhir-converter/issues

Basic Usage

See examples for more indepth usage / usecases.

from fhir_converter.renderers import  CcdaRenderer

with open("data/sample/ccda/ccd.ccda") as xml_in:
    print(CcdaRenderer().render_fhir_string("CCD", xml_in))

Command line interface

The package comes with a CLI interface that can be invoked either by the script name fhir_converter_cli or as python module python -m fhir_converter. The CLI allows you to transform a single file or an entire directory.

fhir_converter_cli  --from-file  ./data/sample/ccda/CCD.ccda --to-dir ./data/out --template-name CCD
---------------------------------------------------------------
RENDER SUCCESS
---------------------------------------------------------------
Total time: 0.14s
Finished at: 2024-01-11 10:49:44.182033
Final Memory: 32M
---------------------------------------------------------------

Templates

Templates can be loaded from any python-liquid supported mechanism. To make packaging easier a ResourceLoader is provided. When a rendering environment is not provided, templates will be loaded from the module resources. To ease the creation / reuse of templates a TemplateSystemLoader is provided that handles the template name conventions establised by FHIR-Converter. This allows user defined templates to reference existing templates without change. The example user defined templates reuse the default section / header templates.

Benchmark

You can run the benchmark from the root of the source tree. Test rig is a 14-inch, 2021 Macbook Pro with the M1 Pro. The benchmark performs the conversion for each template showing the min, max and mean times for the sample data used.

Python Version=3.12.1
Iterations=20

Sample=data/sample/ccda/Discharge_Summary.ccda
CCD                     max=0.042       min=0.013       avg=0.015
ConsultationNote        max=0.015       min=0.013       avg=0.014
DischargeSummary        max=0.020       min=0.014       avg=0.014
HistoryandPhysical      max=0.015       min=0.013       avg=0.014
OperativeNote           max=0.014       min=0.010       avg=0.010
ProcedureNote           max=0.013       min=0.011       avg=0.012
ProgressNote            max=0.013       min=0.012       avg=0.012
ReferralNote            max=0.015       min=0.014       avg=0.014
TransferSummary         max=0.016       min=0.014       avg=0.014
LabsandVitals           max=0.009       min=0.008       avg=0.008
Pampi                   max=0.010       min=0.009       avg=0.009

Sample=data/sample/ccda/History_and_Physical.ccda
CCD                     max=0.053       min=0.018       avg=0.020
ConsultationNote        max=0.021       min=0.018       avg=0.019
DischargeSummary        max=0.018       min=0.016       avg=0.017
HistoryandPhysical      max=0.020       min=0.018       avg=0.019
OperativeNote           max=0.013       min=0.011       avg=0.012
ProcedureNote           max=0.015       min=0.014       avg=0.014
ProgressNote            max=0.017       min=0.015       avg=0.016
ReferralNote            max=0.022       min=0.018       avg=0.019
TransferSummary         max=0.021       min=0.019       avg=0.020
LabsandVitals           max=0.012       min=0.010       avg=0.011
Pampi                   max=0.013       min=0.012       avg=0.012