Overview
This page documents every dashboard indicator that can be derived from the TB Facility Register refinery models. Each indicator follows the QED dashboard indicator template: goal, definitions, numerator, denominator, disaggregations, recommended visualisation, and data source.
All indicators draw from one or both of the following refinery tables:
| Refinery Model |
Description |
Granularity |
| mw_tb_refinery__tb_reg |
Patient-level clean records, one row per patient per page |
One row per patient registration |
| mw_tb_refinery__tb_reg_checks |
Data quality check failures, one row per check triggered |
One row per check failure per record |
Available disaggregation dimensions across all indicators: book_number (register book, proxy for facility/cohort), page_number, tb_reg_date (registration date, for time series), sex, age_years, risk_group, disease_site, treatment_regimen, hiv_status, treat_outcome. Geography below book level is not present in the refinery model β facility metadata must be joined from an intermediary locations table.
Indicator catalogue
π Programme Performance π¦ Bacteriology & Diagnosis π Treatment Regimen π΄ HIV & ART π« Post-TB / PRP π Data Quality
π¦ Bacteriology & Diagnosis
10. Bacteriological confirmation rate
| Goal |
Measure the proportion of TB patients diagnosed bacteriologically vs clinically. Higher bacteriological confirmation rates indicate stronger diagnostic capacity. |
| Numerator |
COUNT(*) where how_diagnosed = 'Bacteriologically' |
| Denominator |
COUNT(*) where how_diagnosed IS NOT NULL |
| Disaggregations |
book_number, tb_reg_date (quarterly), disease_site, sex |
| Visualization |
Dual KPI tiles (% bacteriological, % clinical) with time-series line chart below showing trend. |
| Data Source |
mw_tb_refinery__tb_reg |
11. Xpert MTB positivity rate
| Goal |
Track the proportion of Xpert tests returning MTB Detected to monitor TB burden in tested patients and Xpert utilisation. |
| Numerator |
COUNT(*) where xpert_result = 'MTB Detected' |
| Denominator |
COUNT(*) where xpert_result IS NOT NULL |
| Disaggregations |
book_number, tb_reg_date (monthly), sex, disease_site |
| Visualization |
Line chart β X-axis: tb_reg_date by month; Y-axis: Xpert positivity rate (%); one line per book_number. |
| Data Source |
mw_tb_refinery__tb_reg |
12. Drug-resistant TB rate (DST)
| Goal |
Identify the proportion of tested patients with RIF-resistant TB, driving decisions on second-line treatment capacity and drug procurement. |
| Definition of Terms |
Tested: dst_date IS NOT NULL. RIF resistant: dst_result = 'RIF Resistant Detected'. |
| Numerator |
COUNT(*) where dst_result = 'RIF Resistant Detected' |
| Denominator |
COUNT(*) where dst_date IS NOT NULL |
| Disaggregations |
book_number, tb_reg_date (quarterly), sex, treatment_regimen, treatment_history |
| Visualization |
Bar chart β X-axis: book_number; Y-axis: % RIF resistant. Stack DST result categories (Detected / Not Detected / Indeterminate) in an absolute count panel alongside. |
| Data Source |
mw_tb_refinery__tb_reg |
13. Smear conversion rate at 2 months
| Goal |
Measure treatment response by tracking the proportion of initially smear-positive patients who convert to negative at 2 months. A key early treatment efficacy signal. |
| Definition of Terms |
Smear positive at baseline: smear_result not in ('Negative', NULL, 'Invalid'). Converted at 2 months: smear_result_2 = 'Negative'. Only patients with both baseline and 2-month smear recorded are included. |
| Numerator |
COUNT(*) where smear_result IS NOT NULL AND smear_result NOT IN ('Negative', 'Invalid') AND smear_result_2 = 'Negative' |
| Denominator |
COUNT(*) where smear_result IS NOT NULL AND smear_result NOT IN ('Negative', 'Invalid') AND smear_result_2 IS NOT NULL |
| Disaggregations |
book_number, tb_reg_date (quarterly), treatment_regimen, hiv_status |
| Visualization |
KPI tile (% converted) with trend line. Secondary: table showing median time to conversion by treatment regimen. |
| Data Source |
mw_tb_refinery__tb_reg |
π Treatment Regimen
14. Treatment regimen distribution
| Goal |
Monitor the uptake of newer regimens (BPalM, BPal) relative to the standard 2RHZE/4RH regimen. Tracks programmatic transition to shorter regimens. |
| Numerator |
COUNT(*) per treatment_regimen value |
| Denominator |
COUNT(*) where treatment_regimen IS NOT NULL |
| Disaggregations |
treatment_regimen ('2RHZE/4RH', 'BPalM', 'BPal', 'Other Regimen'), book_number, tb_reg_date (quarterly), disease_site, dst_result |
| Visualization |
100% stacked bar chart β X-axis: tb_reg_date by quarter; Y-axis: proportion; fill: treatment_regimen. Absolute count panel alongside. |
| Data Source |
mw_tb_refinery__tb_reg |
15. DOT and adherence support coverage
| Goal |
Measure the proportion of patients receiving documented DOT/adherence support and identify the most common support type. Supports community health worker workload planning. |
| Numerator |
COUNT(*) where adherence_support IS NOT NULL |
| Denominator |
COUNT(*) from mw_tb_refinery__tb_reg where tb_reg_date IS NOT NULL |
| Disaggregations |
adherence_support ('Guardian', 'Health Survailence Assistant', 'Volunteer', 'Healthcare Worker'), book_number, tb_reg_date (quarterly) |
| Visualization |
Donut chart for support type split. Secondary: line chart of coverage rate over time. |
| Data Source |
mw_tb_refinery__tb_reg |
π΄ HIV & ART
16. HIV co-infection rate among TB patients
| Goal |
Track the burden of HIV among registered TB patients. High TB/HIV co-infection drives the need for integrated HIV services at TB facilities. |
| Numerator |
COUNT(*) where hiv_status = 'Positive' |
| Denominator |
COUNT(*) where hiv_status IS NOT NULL |
| Disaggregations |
hiv_status ('Positive', 'Negative', 'Unknown'), book_number, tb_reg_date (quarterly), sex, age_years (grouped), disease_site |
| Visualization |
Stacked bar chart β X-axis: time period; Y-axis: count; stack: Positive / Negative / Unknown. Add percentage label on Positive segment. |
| Data Source |
mw_tb_refinery__tb_reg |
17. HIV testing coverage among TB patients
| Goal |
Measure the proportion of TB patients who received an HIV test result (not Unknown), assessing the completeness of integrated HIV testing. |
| Numerator |
COUNT(*) where hiv_status IN ('Positive', 'Negative') |
| Denominator |
COUNT(*) where hiv_status IS NOT NULL |
| Disaggregations |
book_number, tb_reg_date (quarterly), hiv_test_time ('Before TB Reg', 'After TB Reg'), sex |
| Visualization |
KPI tile (% tested, % positive) with trend line. Secondary: bar chart split by hiv_test_time. |
| Data Source |
mw_tb_refinery__tb_reg |
18. ART initiation among HIV-positive TB patients
| Goal |
Measure the proportion of HIV-positive TB patients who started ART, and the timing of ART relative to TB treatment. ART during TB treatment reduces mortality. |
| Definition of Terms |
ART initiated: arv_status IN ('Before TB Tx', 'While on TB Tx'). Not initiated: arv_status = 'Not While on TB Tx' or arv_status IS NULL (among HIV-positive). |
| Numerator |
COUNT(*) where hiv_status = 'Positive' AND arv_status IN ('Before TB Tx', 'While on TB Tx') |
| Denominator |
COUNT(*) where hiv_status = 'Positive' |
| Disaggregations |
arv_status (3 categories), book_number, tb_reg_date (quarterly), sex |
| Visualization |
Stacked bar chart β X-axis: time period; stack: Before TB Tx / While on TB Tx / Not While on TB Tx. Add 90% WHO target line for ART coverage. |
| Data Source |
mw_tb_refinery__tb_reg |
19. CPT coverage among HIV-positive TB patients
| Goal |
Monitor cotrimoxazole preventive therapy (CPT) uptake among HIV-positive TB patients, reducing mortality from opportunistic infections. |
| Numerator |
COUNT(*) where hiv_status = 'Positive' AND cpt_status = 'Yes' |
| Denominator |
COUNT(*) where hiv_status = 'Positive' |
| Disaggregations |
book_number, tb_reg_date (quarterly), sex, treat_outcome |
| Visualization |
KPI tile (CPT coverage %). Secondary: line chart of coverage rate over time per book_number. |
| Data Source |
mw_tb_refinery__tb_reg |
π« Post-TB / PRP
20. PRP enrolment rate among eligible patients
| Goal |
Track the proportion of cured or completed patients enrolled into the Post-TB Lung Disease (PRP) programme, monitoring uptake of post-treatment care. |
| Definition of Terms |
Eligible: treat_outcome IN ('Cured', 'Completed'). Enrolled: enrolled_prp = 'Yes'. |
| Numerator |
COUNT(*) where treat_outcome IN ('Cured', 'Completed') AND enrolled_prp = 'Yes' |
| Denominator |
COUNT(*) where treat_outcome IN ('Cured', 'Completed') |
| Disaggregations |
book_number, tb_reg_date (quarterly), sex, disease_site, treatment_regimen |
| Visualization |
KPI tile (% enrolled) with trend sparkline. Secondary: bar chart by book_number to compare facility enrolment rates. |
| Data Source |
mw_tb_refinery__tb_reg |
21. PTLD diagnosis method distribution
| Goal |
Understand which diagnostic methods are being used to identify Post-TB Lung Disease among PRP-enrolled patients, supporting clinical protocol adherence. |
| Numerator |
COUNT(*) per ptld_how_diagnosed value where enrolled_prp = 'Yes' |
| Denominator |
COUNT(*) where enrolled_prp = 'Yes' AND ptld_how_diagnosed IS NOT NULL |
| Disaggregations |
ptld_how_diagnosed ('Spirometry/LFT', 'Persistent Respiratory Symptoms', 'Abnormalities X-ray', 'Reduced Exercise'), book_number |
| Visualization |
Horizontal bar chart sorted by frequency. One panel per book_number for facility comparison. |
| Data Source |
mw_tb_refinery__tb_reg |
22. PRP programme outcome distribution
| Goal |
Monitor outcomes for patients enrolled in the PRP programme to assess programme effectiveness and identify patients still active or lost. |
| Numerator |
COUNT(*) per prp_outcome value |
| Denominator |
COUNT(*) where prp_outcome IS NOT NULL |
| Disaggregations |
prp_outcome ('Completed', 'Died', 'Lost to Follow-up', 'Active TB', 'Excluded'), book_number, tb_reg_date (annual) |
| Visualization |
Stacked bar chart or donut chart per facility. Flag 'Active TB' recurrence as a clinical alert metric. |
| Data Source |
mw_tb_refinery__tb_reg |
π Data Quality
23. Check failure rate by book
| Goal |
Identify register books (facilities) with the highest rate of data quality check failures, guiding targeted data quality improvement support. |
| Numerator |
COUNT(DISTINCT record_identifier) where severity IN ('Error', 'Warning') from mw_tb_refinery__tb_reg_checks |
| Denominator |
COUNT(DISTINCT Record_number || Page_ID) from mw_tb_refinery__tb_reg |
| Disaggregations |
book_number, severity ('Error', 'Warning'), tags (check category), Submission_Date (monthly) |
| Visualization |
Bar chart β X-axis: book_number; Y-axis: check failure rate (%). Stack Error and Warning in different colours. Sort by descending Error rate. |
| Data Source |
mw_tb_refinery__tb_reg_checks joined to mw_tb_refinery__tb_reg on Page_ID + Record_number |
24. Most frequent check failures
| Goal |
Rank data quality issues by frequency to identify systemic problems (e.g. a field consistently left blank or a question frequently multi-selected) requiring training or form revision. |
| Numerator |
COUNT(*) per check_message from mw_tb_refinery__tb_reg_checks |
| Denominator |
N/A β absolute counts ranked |
| Disaggregations |
check_message (specific failure description), severity, tags, book_number, Submission_Date (monthly) |
| Visualization |
Ranked horizontal bar chart β top 10 most frequent check_message values. Colour by severity (Error = red, Warning = amber). |
| Data Source |
mw_tb_refinery__tb_reg_checks |
25. Records excluded due to Errors
| Goal |
Monitor the proportion of submitted records excluded from analysis due to Error-severity check failures, as a summary measure of data entry quality over time. |
| Numerator |
COUNT(DISTINCT Page_ID || Record_number) from mw_tb_refinery__tb_reg_checks where severity = 'Error' |
| Denominator |
COUNT(DISTINCT Page_ID || Record_number) from mw_tb_refinery__tb_reg UNION COUNT from mw_tb_refinery__tb_reg_checks where severity = 'Error' |
| Disaggregations |
book_number, Submission_Date (monthly), tags (error type: invalid-date-check vs clinical-logic-check) |
| Visualization |
Line chart β X-axis: Submission_Date by month; Y-axis: % records excluded. One line per book_number. Alert threshold line at 5%. |
| Data Source |
mw_tb_refinery__tb_reg_checks |
Indicator summary table
| 25 indicators across 6 thematic groups |
| 1 |
Total patients registered |
Programme Performance |
Count |
mw_tb_refinery__tb_reg |
| 2 |
Treatment success rate |
Programme Performance |
Rate / % |
mw_tb_refinery__tb_reg |
| 3 |
Treatment outcome distribution |
Programme Performance |
Rate / % |
mw_tb_refinery__tb_reg |
| 4 |
Lost to follow-up rate |
Programme Performance |
Rate / % |
mw_tb_refinery__tb_reg |
| 5 |
Mortality rate during treatment |
Programme Performance |
Rate / % |
mw_tb_refinery__tb_reg |
| 6 |
Moved to second-line treatment |
Programme Performance |
Rate / % |
mw_tb_refinery__tb_reg |
| 7 |
Patient age and sex profile |
Programme Performance |
Count |
mw_tb_refinery__tb_reg |
| 8 |
Occupation / risk group distribution |
Programme Performance |
Rate / % |
mw_tb_refinery__tb_reg |
| 9 |
Previously treated patients |
Programme Performance |
Rate / % |
mw_tb_refinery__tb_reg |
| 10 |
Bacteriological confirmation rate |
Bacteriology & Diagnosis |
Rate / % |
mw_tb_refinery__tb_reg |
| 11 |
Xpert MTB positivity rate |
Bacteriology & Diagnosis |
Rate / % |
mw_tb_refinery__tb_reg |
| 12 |
Drug-resistant TB rate (DST) |
Bacteriology & Diagnosis |
Rate / % |
mw_tb_refinery__tb_reg |
| 13 |
Smear conversion rate at 2 months |
Bacteriology & Diagnosis |
Rate / % |
mw_tb_refinery__tb_reg |
| 14 |
Treatment regimen distribution |
Treatment Regimen |
Rate / % |
mw_tb_refinery__tb_reg |
| 15 |
DOT and adherence support coverage |
Treatment Regimen |
Rate / % |
mw_tb_refinery__tb_reg |
| 16 |
HIV co-infection rate |
HIV & ART |
Rate / % |
mw_tb_refinery__tb_reg |
| 17 |
HIV testing coverage |
HIV & ART |
Rate / % |
mw_tb_refinery__tb_reg |
| 18 |
ART initiation among HIV-positive |
HIV & ART |
Rate / % |
mw_tb_refinery__tb_reg |
| 19 |
CPT coverage among HIV-positive |
HIV & ART |
Rate / % |
mw_tb_refinery__tb_reg |
| 20 |
PRP enrolment rate |
Post-TB / PRP |
Rate / % |
mw_tb_refinery__tb_reg |
| 21 |
PTLD diagnosis method distribution |
Post-TB / PRP |
Rate / % |
mw_tb_refinery__tb_reg |
| 22 |
PRP programme outcome distribution |
Post-TB / PRP |
Rate / % |
mw_tb_refinery__tb_reg |
| 23 |
Check failure rate by book |
Data Quality |
Rate / % |
mw_tb_refinery__tb_reg_checks |
| 24 |
Most frequent check failures |
Data Quality |
Count |
mw_tb_refinery__tb_reg_checks |
| 25 |
Records excluded due to Errors |
Data Quality |
Rate / % |
mw_tb_refinery__tb_reg_checks |