Clinical Data ETL with Apache Airflow
A five-task Airflow DAG loads synthetic FHIR-shaped patient, encounter, and condition records into SQLite. Below, the repository's own pipeline code runs in your browser: pick a fault, run the DAG, and check whether the last good database survives. Further down is the latest run of the real DAG under Apache Airflow, recorded in CI.
Synthetic data, proof of concept. Four fictional patients whose conditions use real ICD-10 code values. No PHI, and not a production clinical system.
Each task calls the same function, in the same order, as dags/synthetic_clinical_etl.py. The code runs unmodified in Pyodide (Python compiled to WebAssembly) against a SQLite database in your browser's memory. Each fault mirrors a test in tests/test_pipeline.py.
Loading Python in your browser (about 10 MB, first visit only)…
On every push to main, GitHub Actions builds the project's Docker image and runs the DAG with Airflow's dag.test(). The site is published only if every task succeeds. This is that run.
Each bar runs from when the previous task finished (for extract, from the start of the run) to when this one finished. dag.test() doesn't record task start times, so each bar includes Airflow's setup for that task.
upstream_failed and never run.transform; broken relationships and duplicates fail quality_gate. A storage error during load rolls back the whole transaction.Loading…