Welcome to DUFT#

Introduction#

DUFT is a platform to ease data transformations, reporting, and data visualisations, as well as upstream reporting and downstream data integration. In other words, DUFT will allow you to:

  • Easily transform data using Python scripts or Jupyter notebooks, for example, to conduct ETL to pull data out of an electronic medical record and flatten the data for reporting.

  • Easily design dashboards based on Apex charts and other charting components to visualise data in an easy way. Dashboards are designed in a declarative, easy-to-use language called 3DL (DUFT Dashboard Definition Language), which resembles HTML.

  • Perform other actions, such as pushing datasets to a remote server for upstream reporting, for example, monthly reports, or downloading data from upstream databases, such as lab result data, and either integrating them into the reports or even pushing them back into the EMR.

Scenarios where you can use DUFT#

DUFT can be useful in the following scenarios:

  • You have data in an existing system, for example OpenMRS, HAPI FHIR or DHIS2, that does not easily lend itself to be analysed because of the way it is structured (for example, a name-value or a JSON storage model) and need this data to be transformed into something tabular suitable for reporting

  • You have data that you quickly want to visualise, and need a lightweight platform to do so

  • You need to frequently upload data (either individual level or aggregate) to an upstream data repository, for example, a monthly report

  • You want to download data from an upstream system, for example a reference laboratory, and incorporate those results back into an existing system, for example, OpenMRS

DUFT Design Considerations#

When DUFT was conceptualised (envisioned), the following considerations were key from the beginning:

  • Data transformations should be easy and powerful. Thus, Python and Python Notebooks were selected as the language of choice to do these, with full Pandas support

  • The UI should look beautiful, easy to use, and written in a modern language that is well understood. Thus, ReactJS was selected, with Tailwind and Flowbite for CSS and components, which are widely used and understood by most front-end developers

  • A powerful, but flexible and popular backend framework incorporating support for basic features like API development and user authentication. Thus, Django was selected, since it is Python based and can work in harmony with the data transformation scripts

DUFT is designed, developed and built in Africa, by Africans, for Africa. But it works all around the world, and we welcome anyone to contribute.

Components of DUFT#

DUFT achieves this through several components, each playing a distinct role.

  • DUFT UI is the UI component of DUFT, responsible for rendering (displaying) the dashboards. It is the only component that end users, such as health workers, will interact with. DUFT UI is written in ReactJS and uses Flowbite and Tailwind for UI components. For single-use instances, DUFT UI is packaged within an Electron app which also includes DUFT Server, to provide an easy installation and user experience for end users.

  • DUFT Server is the backend server that contains the APIs that DUFT UI interacts with. Two key components of DUFT Server are the ability to run queries that make up the data to be displayed on the dashboard and to run the data transformation scripts.

  • DUFT Config is a set of files containing the data transformation scripts, the dashboard definition files, and other configuration files. It is a lightweight library designed to be independently updated from DUFT — this means that DUFT installations can be provisioned with new dashboards and data transformation scripts without the need to update the entire DUFT system, making remote updates use far less bandwidth.

  • DUFT Docs is what you are reading now and contains the documentation for DUFT, accessible through docs.duft.app.