Public health — national-scale TB active case-finding data platform

National-scale TB screening data platform: five REDCap databases unified into one reporting system

one trustworthy, near-real-time view of a half-million-person screening campaign

The REDCap platform beside a national TB active case-finding session in the field.
National-scale TB active case-finding — five REDCap databases unified into one reporting view.
Screening cascade: 494,400 screened, 122,400 eligible, 105,646 diagnostic results.
The screening cascade against programme targets, built from the unified dataset.

A large tuberculosis active-case-finding campaign in Cameroon screens community members, primary-health facilities and prisons across seven regions, capturing data in five separate REDCap databases plus several external laboratory and programme systems.

The problem

Data for the same participant was fragmented across five REDCap projects with dual and quadruple QR-code identifiers, bilingual French/English forms, and external GeneXpert, treatment-outcome and national-programme feeds — making reliable, timely reporting almost impossible.

What I did

I built a three-stage Python pipeline (import → process → report) with an ID-validation engine that regex-checks and repairs every QR code, links screening to specimen to laboratory result, normalises bilingual fields, extracts spirometry metrics from PDFs, and integrates four external data sources — orchestrated hourly through Airflow.

494,400
People-screened target
5 REDCap DBs
Unified into one system
7 regions
Coverage across Cameroon
~13 min
Incremental data refresh
public-healthtuberculosisREDCapdata-pipelineAirflowPython / Polars
Result

The programme now runs on a single unified participant dataset refreshed automatically through the day, turning five disconnected databases and dozens of raw exports into analysis-ready reporting on screening, eligibility and diagnostic results.

LET'S TALK

Ready to get started?

Tell me about your project, question or goal. I reply within 24 hours, in English or French.

Get in touch