assesment of tuberculosis preventive therapy questionaire

Reading File
Asking for Preferences
Finding Sources
Searching the Web

WHO tuberculosis preventive therapy TPT assessment questionnaire checklist 2023 2024

Searching PubMed

"tuberculosis preventive therapy" AND assessment

Finding Sources
Reading Web Page

https://tbksp.who.int/sites/default/files/2023-06/9789240046…

Finding Sources
Searching the Web

WHO TPT eligibility criteria assessment checklist HIV contacts children healthcare workers 2024

Reading Web Page

https://tbksp.who.int/en/node/36

I now have enough material from WHO consolidated guidelines (2024 edition) and the WHO TB Knowledge Sharing Platform to build a thorough, structured assessment questionnaire. Here it is:

Assessment of Tuberculosis Preventive Therapy (TPT) - Questionnaire / Checklist

Based on: WHO Consolidated Guidelines on Tuberculosis: TB Preventive Treatment (2nd Edition, 2024) and WHO Operational Handbook on Tuberculosis, Module 1 (2023)

SECTION A: PATIENT IDENTIFICATION & DEMOGRAPHICS

#QuestionResponse
A1Patient Name / ID__________
A2Age__________ years / months
A3SexM / F / Other
A4Date of assessment__________
A5Assessed by (name/designation)__________
A6Facility name__________
A7Country/Region (TB burden category: high / medium / low)__________

SECTION B: ELIGIBILITY SCREENING - IDENTIFY THE AT-RISK POPULATION

Check all that apply. Any "Yes" flags this person as a TPT candidate (pending TB disease exclusion in Section C).
#QuestionYesNo
B1Is this person living with HIV (PLHIV)?
B2Is this person a household contact of a confirmed or probable TB case?
B3Is the patient a child < 5 years of age with any exposure to a TB case?
B4Is this person a child or adolescent (5-14 years) living with HIV?
B5Is this person receiving anti-TNF therapy (e.g. infliximab, adalimumab)?
B6Is this person on dialysis (renal replacement therapy)?
B7Is this person being prepared for an organ or haematopoietic stem cell transplant?
B8Is this person a prisoner or detained in a correctional facility?
B9Is this person a healthcare worker in a high TB transmission setting?
B10Has this person been a close contact of a known MDR/RR-TB case? (requires special regimen - see Section E)
B11Has this person previously been treated for TB disease and been re-exposed to a TB case?
B12Has this person previously completed a course of TPT but has since had new close contact with a TB case?
If ALL responses in Section B are "No", the person does not meet current WHO eligibility criteria for TPT. Document and reassess if circumstances change.

SECTION C: RULING OUT ACTIVE TB DISEASE (MANDATORY BEFORE STARTING TPT)

Starting TPT in someone with active TB disease can delay cure and promote drug resistance. This section MUST be completed for ALL eligible patients.

C1 - WHO 4-Symptom Screen (W4SS) - Ask about ALL four symptoms

SymptomPresent (Yes)Absent (No)
Current cough (of any duration)
Fever
Night sweats
Weight loss or poor weight gain in children
Interpretation:
  • Adults and adolescents with HIV: Any "Yes" = screen positive; refer for diagnostic workup before starting TPT
  • PLHIV on ART: W4SS alone is sufficient; if all negative, proceed to TPT
  • Contacts without HIV: Full clinical evaluation required if any symptom is present

C2 - Additional Symptom Queries (Especially for Contacts)

#QuestionYesNo
C2aHaemoptysis (coughing blood)
C2bChest pain
C2cShortness of breath or difficulty breathing
C2dFatigue / loss of energy
C2eLoss of appetite
C2fFailure to thrive / faltering growth (children)

C3 - Clinical Examination Findings

#FindingPresentAbsent
C3aLymphadenopathy (especially cervical/axillary)
C3bAbnormal chest auscultation findings
C3cSigns of miliary TB or meningeal signs
C3dDocumented weight loss (verify with records)
C3eHepatosplenomegaly (children especially)

C4 - Investigations

InvestigationResultInterpretation
Chest X-ray (CXR) - if availableNormal / Abnormal / Not doneAbnormal = refer for further workup; not a barrier to TPT if unavailable
Sputum smear/GeneXpert (if symptomatic)Positive / Negative / Not done
Urine LAM (PLHIV with low CD4 or severely ill)Positive / Negative / Not done
TST (Tuberculin Skin Test)mm induration / Not done≥5 mm in HIV; ≥10 mm in general
IGRA (Interferon Gamma Release Assay)Positive / Negative / Indeterminate / Not done
Note: TB infection testing (TST/IGRA) is NOT required before starting TPT in PLHIV. It is recommended when available for contacts without HIV to determine eligibility, but a negative result should NOT withhold TPT from PLHIV.

C5 - Final TB Disease Exclusion Decision

DecisionTick
TB disease EXCLUDED - proceed with TPT
TB disease SUSPECTED/CONFIRMED - refer for full TB diagnostic pathway; do NOT start TPT
Inconclusive - further investigation needed before TPT

SECTION D: CONTRAINDICATIONS AND SAFETY SCREENING

#QuestionYesNoAction if Yes
D1Active liver disease (hepatitis, cirrhosis, elevated LFTs > 3x ULN)?Caution; consider defer isoniazid; specialist review
D2Known allergy or previous adverse reaction to isoniazid, rifamycins, or fluoroquinolones?Do NOT use that agent; choose alternative regimen
D3Is the patient currently pregnant?6H or 3HP can be used; rifapentine (3HP, 1HP) generally avoided in 1st trimester; document carefully
D4Is the patient currently breastfeeding?Isoniazid passes into breast milk; supplement infant with pyridoxine
D5Peripheral neuropathy (pre-existing)?Prescribe pyridoxine (vitamin B6) supplementation with isoniazid
D6Epilepsy on anticonvulsants?Check drug interactions with rifampicin (enzyme inducer)
D7Is the patient on ART? If yes, specify regimen: _______Check drug-drug interactions, especially rifamycins with PIs/NNRTIs
D8Is the patient on anticoagulants (e.g. warfarin)?Rifampicin reduces anticoagulant effect; monitor INR
D9Is the patient on oral contraceptives?Rifampicin reduces efficacy; advise alternative contraception
D10Alcohol use disorder?Hepatotoxicity risk increases; counsel; consider enhanced monitoring
D11Diabetes mellitus?No contraindication; individual risk-benefit assessment
D12Low body weight / malnutrition?No contraindication; offer nutritional support alongside TPT
D13Previous TB treatment (completed)?TPT may still be given, especially if new exposure; document

SECTION E: TPT REGIMEN SELECTION

Based on WHO 2024 recommendations. Select the most appropriate regimen:
RegimenDurationIndicationNotes
3HP - Rifapentine + Isoniazid weekly3 months (12 doses)Adults and children ≥2 years; preferred in many settingsAvoid in <2 years, pregnancy (1st trimester), on PIs (some)
1HP - Rifapentine + Isoniazid daily1 month (28 doses)Adults ≥18 years; highest adherence ratesLimited data in children and pregnancy
4R - Rifampicin daily4 monthsAdults and children; useful if isoniazid resistance likelyCheck drug interactions with ART
3RH - Rifampicin + Isoniazid daily3 monthsChildren especially; adults where preferred
6H - Isoniazid daily6 monthsAll populations; widely availableAlways give with pyridoxine B6
6Lfx - Levofloxacin daily6 monthsContacts of MDR/RR-TB cases (new WHO 2024 recommendation)Do NOT use standard regimens for MDR contacts
Note (2024 update): The previous recommendation for ≥36 months of daily isoniazid (long-term IPT) in PLHIV in high-transmission settings has been WITHDRAWN. Shorter regimens are now preferred.
Selected regimen: __________ | Dose: __________ | Start date: __________
Pyridoxine (Vitamin B6) prescribed? Yes / No (Required with all isoniazid-containing regimens, especially: pregnancy, breastfeeding, diabetes, renal failure, neuropathy, alcohol use, malnutrition)

SECTION F: POPULATION-SPECIFIC CHECKLIST

F1 - People Living with HIV (PLHIV)

#ItemDoneN/A
F1aTB disease excluded using W4SS (and CXR if on ART)
F1bCD4 count documented (if available)
F1cCurrent ART regimen reviewed for drug interactions with TPT
F1dPLHIV on ART with normal W4SS: offer TPT regardless of CD4 or ART status
F1ePLHIV not on ART: initiate TPT; ART initiation also recommended
F1fPost-TB treatment PLHIV who have been re-exposed: prioritize for TPT

F2 - Household Contacts of TB Cases

#ItemDoneN/A
F2aIndex TB case confirmed (bacteriologically/clinically)
F2bAll household contacts listed and traced
F2cIntensity and duration of exposure assessed
F2dTB symptom screen performed for each contact
F2eActive TB disease excluded before TPT initiation
F2fContact aged <5 years: offer TPT regardless of TST/IGRA result once TB excluded
F2gContact aged ≥5 years: TST/IGRA preferred if available, but not required to initiate
F2hContact of MDR/RR-TB: refer for 6Lfx regimen (MDR-TPT pathway)

F3 - Children and Adolescents

#ItemDoneN/A
F3aAge < 12 months with HIV: TPT only if household TB contact AND TB excluded
F3bAge 12 months - 4 years with HIV: offer TPT after TB exclusion, regardless of ART
F3cAge < 5 years with household contact: strong recommendation for TPT (TB excluded)
F3dCXR for children ≥5 years if available; not a barrier if unavailable
F3eWeight-based dosing calculated and documented
F3fChild-friendly formulations prescribed where available
F3gCaregiver counselled on adherence support
F3hIntegration with EPI/nutrition visits planned

F4 - Healthcare Workers

#ItemDoneN/A
F4aOccupational TB exposure risk assessed (ward type, patient load, IPC measures)
F4bTST or IGRA performed (baseline and after exposure)
F4cActive TB disease ruled out
F4dTPT offered if TBI confirmed or in very high-risk settings
F4eIPC measures reviewed and reinforced alongside TPT

F5 - Other High-Risk Groups (Dialysis, Transplant, Anti-TNF, Prisoners)

#ItemDoneN/A
F5aSpecific comorbidity/immunosuppressive therapy documented
F5bTB disease excluded (enhanced workup in immunosuppressed)
F5cTST/IGRA performed if not immunocompromised; CXR if available
F5dDrug interactions reviewed with immunosuppressive/transplant medications
F5eSpecialist input obtained if complex case

SECTION G: MONITORING DURING TPT

Time PointAction RequiredDoneDate
InitiationBaseline LFTs, symptom screen, counselling
2 weeksAdherence check, side effect inquiry
MonthlyPill count/adherence, adverse drug reaction screen
MonthlyRepeat symptom screen for breakthrough TB (cough, fever, weight loss)
End of treatmentDocument completion, file update
6 months post-TPTReassess for new TB exposure (PLHIV especially)

Adverse Drug Reaction Inquiry (ask at every visit)

SymptomYesNoAction
Jaundice / yellow eyesSTOP TPT immediately; check LFTs
Nausea / vomiting > 3 daysAssess severity; LFTs if persistent
Skin rash or itchingAssess severity; stop if severe
Tingling / numbness in hands/feetAdd/increase pyridoxine; assess
Orange discolouration of urine (rifamycins)Normal; counsel patient
Dizziness / confusionAssess; review all medications
Signs of TB (breakthrough)Stop TPT; refer for full TB workup

SECTION H: ADHERENCE SUPPORT ASSESSMENT

#QuestionYesNo
H1Has the patient received counselling on TPT purpose, duration, and importance of completion?
H2Does the patient understand they may develop TB even with TPT if re-exposed?
H3Identified barriers to adherence (distance, cost, stigma, side effects, forgetfulness)?
H4Adherence support mechanism agreed upon (pill diary, phone reminders, DOT, community support)?
H5Patient has contact number of health worker for any concerns?
H6Patient aware of when to return urgently (signs of TB, liver reactions)?
H7Integration with other care visits planned (ART, ANC, EPI) to reduce extra trips?

SECTION I: DOCUMENTATION AND PROGRAMME MONITORING

#ItemDone
I1TPT eligibility documented in patient file
I2TB disease exclusion result documented with method used
I3Regimen, dose, and start date entered in TPT register
I4Patient assigned a TPT outcome category at end of treatment
I5Reported to national TB programme / DHIS2 as required
I6Outcomes tracked: completed / lost to follow-up / adverse event / TB developed
WHO TPT Outcomes for Recording:
  • Treatment completed
  • Treatment interrupted (lost to follow-up)
  • Adverse drug reaction (specify)
  • TB disease developed during TPT
  • Transferred out
  • Died

SECTION J: FINAL ASSESSMENT SUMMARY

Eligible for TPT?Yes / No / Deferred (pending workup)
Active TB excluded?Yes / No / Pending
Regimen selected
Start date
Expected completion date
Next review date
Clinician signature

QUICK REFERENCE - WHO PRIORITY POPULATIONS (2024)

  1. PLHIV (all ages, any CD4, regardless of ART status) - strong recommendation
  2. Household contacts of bacteriologically confirmed TB, aged <5 years - strong recommendation
  3. Household contacts aged ≥5 years - conditional recommendation
  4. Children ≥12 months with HIV - strong recommendation
  5. Children <12 months with HIV - only if household contact with TB case confirmed
  6. Anti-TNF users, dialysis patients, transplant recipients - conditional recommendation
  7. Contacts of MDR/RR-TB - 6Lfx for 6 months (new 2024 conditional recommendation)
Key 2024 Change: Long-term isoniazid (≥36 months) for PLHIV in high-burden settings is NO LONGER recommended. Shorter regimens (3HP, 1HP, 4R, 6H) are the standard of care.

Sources:

make a questionaire using these resources for my thesis topic Evaluation Of Programmatic Management of Tuberculosis Preventive Therapy Among Household Contacts of Pulmonary Tuberculosis Patients in the Private Health Sector of Rajkot City: A Mixed-Method Cross-Sectional Study

Reading File
Running Command

python3 << 'EOF' import pdfplumber files = { "idi1": "/tmp/workspace/attachments/fb426b91-973f-4a5f-a6d2-0478dfd2357d/idi1.pdf", "facility_tool": "/tmp/workspace/attachments/fb426b91-973f-4a5f-a6d2-0478dfd2357d/facility assesment tb risk tool who.pdf", "supplementary": "/tmp/workspace/attachments/fb426b91-973f-4a5f-a6d2-0478dfd2357d/tropicalmed-2707987-supplementary.pdf", "india_guidelines": "/tmp/workspace/attachments/fb426b91-973f-4a5f-a6d2-0478dfd2357d/Guidelines-for-Programmatic-Management-of-Tuberculosis-Preventive-Treatment-in-India.pdf", } for name, path in files.items(): try: with pdfplumber.open(path) as pdf: print(f"\n{'='*60}") print(f"FILE: {name} | Pages: {len(pdf.pages)}") print('='*60) # Extract first 4 pages to understand structure for i, page in enumerate(pdf.pages[:4]): text = page.extract_text() if text: print(f"\n--- Page {i+1} ---") print(text[:2000]) except Exception as e: print(f"Error reading {name}: {e}") EOF

Running Command

python3 << 'EOF' import pdfplumber # Extract more pages from India guidelines (the main resource) with pdfplumber.open("/tmp/workspace/attachments/fb426b91-973f-4a5f-a6d2-0478dfd2357d/Guidelines-for-Programmatic-Management-of-Tuberculosis-Preventive-Treatment-in-India.pdf") as pdf: print(f"Total pages: {len(pdf.pages)}") # Read pages 1-20 for structure and key content for i, page in enumerate(pdf.pages[1:25]): text = page.extract_text() if text: print(f"\n--- Page {i+2} ---") print(text[:2500]) EOF

Running Command

python3 << 'EOF' import pdfplumber # Extract key chapters from India guidelines - Chapters 4, 5, 9, 12, 13, 14 with pdfplumber.open("/tmp/workspace/attachments/fb426b91-973f-4a5f-a6d2-0478dfd2357d/Guidelines-for-Programmatic-Management-of-Tuberculosis-Preventive-Treatment-in-India.pdf") as pdf: # Pages 25 onwards (content pages - chapters start around page 26 based on TOC) for i, page in enumerate(pdf.pages[25:70]): text = page.extract_text() if text and len(text.strip()) > 100: print(f"\n--- Page {i+26} ---") print(text[:2500]) EOF

Running Command

python3 << 'EOF' import pdfplumber # Extract Chapters 9, 12, 13 (Monitoring, Recording/Reporting, Private Sector) with pdfplumber.open("/tmp/workspace/attachments/fb426b91-973f-4a5f-a6d2-0478dfd2357d/Guidelines-for-Programmatic-Management-of-Tuberculosis-Preventive-Treatment-in-India.pdf") as pdf: for i, page in enumerate(pdf.pages[70:105]): text = page.extract_text() if text and len(text.strip()) > 100: print(f"\n--- Page {i+71} ---") print(text[:2500]) EOF

Running Command

python3 << 'EOF' import pdfplumber # Extract Chapter 14 (Monitoring, Supervision, Evaluation) and supplementary tables with pdfplumber.open("/tmp/workspace/attachments/fb426b91-973f-4a5f-a6d2-0478dfd2357d/Guidelines-for-Programmatic-Management-of-Tuberculosis-Preventive-Treatment-in-India.pdf") as pdf: for i, page in enumerate(pdf.pages[105:123]): text = page.extract_text() if text and len(text.strip()) > 100: print(f"\n--- Page {i+106} ---") print(text[:2500]) # Also check supplementary for more tables with pdfplumber.open("/tmp/workspace/attachments/fb426b91-973f-4a5f-a6d2-0478dfd2357d/tropicalmed-2707987-supplementary.pdf") as pdf: print(f"\n\nSUPPLEMENTARY PDF - Total pages: {len(pdf.pages)}") for i, page in enumerate(pdf.pages[3:]): text = page.extract_text() if text and len(text.strip()) > 100: print(f"\n--- Supp Page {i+4} ---") print(text[:2500]) EOF

Running Command

mkdir -p /tmp/workspace/tpt-thesis-questionnaire

Reading File
Running Command

python3 << 'PYEOF' from docx import Document from docx.shared import Pt, Inches, RGBColor, Cm from docx.enum.text import WD_ALIGN_PARAGRAPH from docx.enum.table import WD_TABLE_ALIGNMENT from docx.oxml.ns import qn from docx.oxml import OxmlElement import copy doc = Document() # ─── Page margins ─────────────────────────────────────────────────── from docx.oxml.ns import qn sections = doc.sections for section in sections: section.top_margin = Cm(2.5) section.bottom_margin = Cm(2.5) section.left_margin = Cm(3.0) section.right_margin = Cm(2.5) # ─── Styles ───────────────────────────────────────────────────────── normal = doc.styles['Normal'] normal.font.name = 'Times New Roman' normal.font.size = Pt(12) # Helper: shade a table cell def shade_cell(cell, hex_color): tc = cell._tc tcPr = tc.get_or_add_tcPr() shd = OxmlElement('w:shd') shd.set(qn('w:val'), 'clear') shd.set(qn('w:color'), 'auto') shd.set(qn('w:fill'), hex_color) tcPr.append(shd) def add_heading(doc, text, level=1, color_hex='1F3864'): p = doc.add_heading(text, level=level) run = p.runs[0] if p.runs else p.add_run(text) run.font.color.rgb = RGBColor.from_string(color_hex) run.font.bold = True return p def add_checkbox_row(table, row_idx, q_num, question, options_list, note=''): """Add a row with question and checkbox options.""" row = table.rows[row_idx] row.cells[0].text = q_num row.cells[0].paragraphs[0].runs[0].bold = True row.cells[1].text = question if note: p = row.cells[1].add_paragraph() p.add_run(f'({note})').italic = True p.runs[0].font.size = Pt(10) opts_cell = row.cells[2] opts_cell.text = '' for opt in options_list: p = opts_cell.add_paragraph() p.add_run(f'☐ {opt}') p.paragraph_format.space_after = Pt(2) def add_table_header(table, headers, bg='1F3864'): hdr = table.rows[0] for i, h in enumerate(headers): cell = hdr.cells[i] cell.text = '' p = cell.paragraphs[0] run = p.add_run(h) run.bold = True run.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF) run.font.size = Pt(11) shade_cell(cell, bg) # ═══════════════════════════════════════════════════════════════════ # TITLE PAGE # ═══════════════════════════════════════════════════════════════════ p = doc.add_paragraph() p.alignment = WD_ALIGN_PARAGRAPH.CENTER r = p.add_run('GUJARAT ADANI INSTITUTE OF MEDICAL SCIENCES') r.bold = True; r.font.size = Pt(13) p = doc.add_paragraph() p.alignment = WD_ALIGN_PARAGRAPH.CENTER r = p.add_run('Department of Community Medicine') r.font.size = Pt(12) doc.add_paragraph() p = doc.add_paragraph() p.alignment = WD_ALIGN_PARAGRAPH.CENTER r = p.add_run('THESIS STUDY QUESTIONNAIRE') r.bold = True; r.font.size = Pt(14); r.font.color.rgb = RGBColor(0x1F, 0x38, 0x64) doc.add_paragraph() p = doc.add_paragraph() p.alignment = WD_ALIGN_PARAGRAPH.CENTER r = p.add_run( 'Evaluation of Programmatic Management of Tuberculosis Preventive Therapy\n' 'Among Household Contacts of Pulmonary Tuberculosis Patients\n' 'in the Private Health Sector of Rajkot City:\n' 'A Mixed-Method Cross-Sectional Study' ) r.bold = True; r.font.size = Pt(13); r.font.color.rgb = RGBColor(0x1F, 0x38, 0x64) doc.add_paragraph() # Source box tbl = doc.add_table(rows=1, cols=1) tbl.style = 'Table Grid' cell = tbl.rows[0].cells[0] shade_cell(cell, 'E2EFDA') cell.text = '' p = cell.paragraphs[0] p.alignment = WD_ALIGN_PARAGRAPH.CENTER r = p.add_run('Sources: PMTPT India Guidelines 2021 (MoHFW/NTEP) | WHO Operational Handbook on TB Module 1 (2023) | WHO Facility TB Risk Assessment Tool | IDI Guide (Butani et al.) | Supplementary Materials (Tropical Medicine)') r.font.size = Pt(9); r.italic = True doc.add_page_break() # ═══════════════════════════════════════════════════════════════════ # INFORMATION SHEET # ═══════════════════════════════════════════════════════════════════ add_heading(doc, 'PARTICIPANT INFORMATION AND CONSENT', level=1) doc.add_paragraph( 'This study aims to evaluate the programmatic management of TB Preventive Therapy (TPT) among ' 'household contacts (HHC) of pulmonary TB patients registered with private health facilities in Rajkot city. ' 'Your participation is voluntary and all information will be kept strictly confidential. There is no monetary ' 'benefit for participation, but your responses will help improve TB prevention programs in India.' ) doc.add_paragraph( 'Informed written consent will be obtained before commencement of any interview or data collection.' ) doc.add_page_break() # ═══════════════════════════════════════════════════════════════════ # INSTRUMENT 1 — SEMI-STRUCTURED QUESTIONNAIRE FOR HOUSEHOLD CONTACTS # ═══════════════════════════════════════════════════════════════════ add_heading(doc, 'INSTRUMENT 1', level=1) add_heading(doc, 'Semi-Structured Questionnaire for Household Contacts (HHC) of Pulmonary TB Patients', level=2) p = doc.add_paragraph() p.add_run('For: ').bold = True p.add_run('Household contacts (of any age) of pulmonary TB index patients notified by private practitioners in Rajkot city.\n') p.add_run('Method: ').bold = True p.add_run('Face-to-face interview with contact/caregiver | ') p.add_run('Duration: ').bold = True p.add_run('30–40 minutes') doc.add_paragraph() # ── PART A: Demographics ────────────────────────────────────────── add_heading(doc, 'PART A: Socio-Demographic Profile', level=3) tbl = doc.add_table(rows=14, cols=3) tbl.style = 'Table Grid' tbl.autofit = False tbl.columns[0].width = Cm(1.5) tbl.columns[1].width = Cm(7.5) tbl.columns[2].width = Cm(6.5) add_table_header(tbl, ['Q.No.', 'Question', 'Response']) questions_a = [ ('A1', 'Name of HHC (initials only for confidentiality)', '______________________'), ('A2', 'Age of HHC', '__________ years'), ('A3', 'Sex', '☐ Male ☐ Female ☐ Other'), ('A4', 'Relation to index TB patient', '☐ Spouse ☐ Child ☐ Parent ☐ Sibling ☐ Other: ___'), ('A5', 'Duration of residence with index patient (prior to TB diagnosis)', '☐ <6 months ☐ 6–12 months ☐ >1 year'), ('A6', 'Education level', '☐ Illiterate ☐ Primary ☐ Secondary ☐ Graduate+'), ('A7', 'Occupation', '☐ Unemployed ☐ Daily wage ☐ Service ☐ Business ☐ Student ☐ Homemaker'), ('A8', 'Monthly household income', '☐ <₹5000 ☐ ₹5000–10000 ☐ ₹10001–20000 ☐ >₹20000'), ('A9', 'Type of housing', '☐ Pucca ☐ Semi-pucca ☐ Kuccha'), ('A10', 'Number of persons sharing the same room as index patient', '__________ persons'), ('A11', 'HIV status (if known)', '☐ Positive ☐ Negative ☐ Unknown/Not tested'), ('A12', 'Any known co-morbidity', '☐ Diabetes ☐ Renal disease ☐ Immunosuppressive therapy ☐ None ☐ Other: ___'), ('A13', 'Previous history of TB disease', '☐ Yes ☐ No ☐ Unsure'), ] for i, (qno, q, resp) in enumerate(questions_a): row = tbl.rows[i+1] row.cells[0].text = qno row.cells[0].paragraphs[0].runs[0].bold = True row.cells[1].text = q row.cells[2].text = resp if i % 2 == 0: for c in row.cells: shade_cell(c, 'F2F2F2') doc.add_paragraph() # ── PART B: Index TB Patient Information ───────────────────────── add_heading(doc, 'PART B: Index TB Patient Information', level=3) tbl2 = doc.add_table(rows=9, cols=3) tbl2.style = 'Table Grid' tbl2.columns[0].width = Cm(1.5) tbl2.columns[1].width = Cm(7.5) tbl2.columns[2].width = Cm(6.5) add_table_header(tbl2, ['Q.No.', 'Question', 'Response']) questions_b = [ ('B1', 'Nikshay ID of index patient (if available)', '______________________'), ('B2', 'Type of TB confirmed in index patient', '☐ Bacteriologically confirmed ☐ Clinically diagnosed'), ('B3', 'Name of private facility that diagnosed/notified index patient', '______________________'), ('B4', 'Date of TB diagnosis of index patient', '____ / ____ / ______'), ('B5', 'Is the index patient currently on anti-TB treatment?', '☐ Yes ☐ No ☐ Completed'), ('B6', 'Total number of household contacts (HHC) in the household', '__________ persons'), ('B7', 'Were ALL household members informed about the TB diagnosis?', '☐ Yes ☐ No ☐ Partially'), ('B8', 'Was the household visited by any health worker after TB diagnosis?', '☐ Yes (by whom: _________) ☐ No'), ] for i, (qno, q, resp) in enumerate(questions_b): row = tbl2.rows[i+1] row.cells[0].text = qno row.cells[0].paragraphs[0].runs[0].bold = True row.cells[1].text = q row.cells[2].text = resp if i % 2 == 0: for c in row.cells: shade_cell(c, 'F2F2F2') doc.add_paragraph() # ── PART C: Contact Investigation & TB Screening ───────────────── add_heading(doc, 'PART C: Contact Investigation and TB Screening', level=3) tbl3 = doc.add_table(rows=13, cols=3) tbl3.style = 'Table Grid' tbl3.columns[0].width = Cm(1.5) tbl3.columns[1].width = Cm(7.5) tbl3.columns[2].width = Cm(6.5) add_table_header(tbl3, ['Q.No.', 'Question', 'Response']) questions_c = [ ('C1', 'Were you informed that you need to be screened for TB after your family member was diagnosed with TB?', '☐ Yes ☐ No ☐ Not told clearly'), ('C2', 'Who informed you about the need for screening?', '☐ Private doctor ☐ ASHA/ANM ☐ STS/TBHV ☐ Family member ☐ No one ☐ Other: ___'), ('C3', 'Were you asked about TB symptoms (4-symptom screen: cough, fever, night sweats, weight loss)?', '☐ Yes, by whom: _______ ☐ No'), ('C4', 'Current TB symptoms at time of assessment (tick all that apply)', '☐ Cough (≥2 weeks) ☐ Fever ☐ Night sweats ☐ Weight loss ☐ Haemoptysis ☐ Chest pain ☐ Shortness of breath ☐ None'), ('C5', 'Was a chest X-ray (CXR) done?', '☐ Yes - Normal ☐ Yes - Abnormal ☐ No ☐ Recommended but not done'), ('C6', 'If CXR not done, reason:', '☐ Not advised ☐ Cost ☐ Not available ☐ Patient refused ☐ N/A'), ('C7', 'Was a sputum test / GeneXpert done?', '☐ Yes - Negative ☐ Yes - Positive ☐ No ☐ N/A (asymptomatic)'), ('C8', 'Was a Tuberculin Skin Test (TST) done?', '☐ Yes - Result: ___mm ☐ No ☐ Not available at facility'), ('C9', 'Was an IGRA (blood test for TB infection) done?', '☐ Yes - Positive ☐ Yes - Negative ☐ No ☐ Not available'), ('C10', 'Was active TB disease ruled out before offering TPT?', '☐ Yes ☐ No ☐ Not applicable'), ('C11', 'Were all members of your household screened?', '☐ Yes, all ☐ No, only some ☐ None screened\n(If not all: reason: _______________________)'), ('C12', 'Was the contact investigation done through Nikshay / Prevent TB India App?', '☐ Yes ☐ No ☐ Don\'t know'), ] for i, (qno, q, resp) in enumerate(questions_c): row = tbl3.rows[i+1] row.cells[0].text = qno row.cells[0].paragraphs[0].runs[0].bold = True row.cells[1].text = q row.cells[2].text = resp if i % 2 == 0: for c in row.cells: shade_cell(c, 'F2F2F2') doc.add_paragraph() # ── PART D: TPT Eligibility and Initiation ──────────────────────── add_heading(doc, 'PART D: TPT Eligibility Assessment and Initiation', level=3) tbl4 = doc.add_table(rows=15, cols=3) tbl4.style = 'Table Grid' tbl4.columns[0].width = Cm(1.5) tbl4.columns[1].width = Cm(7.5) tbl4.columns[2].width = Cm(6.5) add_table_header(tbl4, ['Q.No.', 'Question', 'Response']) questions_d = [ ('D1', 'Were you told that you are eligible to receive TPT (medicine to prevent TB)?', '☐ Yes ☐ No ☐ Never discussed'), ('D2', 'Age group of this contact (for eligibility pathway)', '☐ <5 years ☐ 5–18 years ☐ >18 years (adult)'), ('D3', 'Was TPT offered/prescribed?', '☐ Yes ☐ No'), ('D4', 'If TPT NOT offered, reason given (tick all applicable)', '☐ Active TB not yet ruled out ☐ Contraindication cited ☐ Not aware of guidelines ☐ Patient refused ☐ No drugs available ☐ Not part of private facility protocol ☐ Other: ___'), ('D5', 'Was pre-TPT assessment done? (history of liver disease, alcohol, allergies, current medications)', '☐ Yes - comprehensive ☐ Yes - partial ☐ No assessment done'), ('D6', 'Were baseline liver function tests (LFT) done before starting TPT?', '☐ Yes ☐ No ☐ Risk factors present but LFT not done'), ('D7', 'Were contraindications to TPT screened? (hepatitis, peripheral neuropathy, heavy alcohol use)', '☐ Yes ☐ No ☐ Partial'), ('D8', 'Contraindications identified (if any)', '☐ Active hepatitis ☐ Peripheral neuropathy ☐ Heavy alcohol use ☐ Drug allergy ☐ End-stage liver disease ☐ None identified'), ('D9', 'Were you counselled about TPT before starting? (purpose, duration, side effects)', '☐ Yes - detailed ☐ Yes - briefly ☐ Not counselled'), ('D10', 'Was a treatment supporter identified for you?', '☐ Yes (who: _______) ☐ No ☐ Self-administration agreed'), ('D11', 'Were you enrolled in Nikshay / Prevent TB India App for TPT?', '☐ Yes ☐ No ☐ Don\'t know'), ('D12', 'Was pyridoxine (Vitamin B6) prescribed along with isoniazid?', '☐ Yes ☐ No ☐ Not applicable (no isoniazid)'), ('D13', 'Pregnancy status (for female contacts of reproductive age)', '☐ Pregnant ☐ Breastfeeding ☐ Not applicable ☐ Not pregnant/BF'), ('D14', 'If pregnant/breastfeeding, was appropriate TPT regimen advised? (6H preferred; 3HP avoided in 1st trimester)', '☐ Yes ☐ No ☐ N/A'), ] for i, (qno, q, resp) in enumerate(questions_d): row = tbl4.rows[i+1] row.cells[0].text = qno row.cells[0].paragraphs[0].runs[0].bold = True row.cells[1].text = q row.cells[2].text = resp if i % 2 == 0: for c in row.cells: shade_cell(c, 'F2F2F2') doc.add_paragraph() # ── PART E: TPT Regimen Details ─────────────────────────────────── add_heading(doc, 'PART E: TPT Regimen Details and Drug Availability', level=3) tbl5 = doc.add_table(rows=9, cols=3) tbl5.style = 'Table Grid' tbl5.columns[0].width = Cm(1.5) tbl5.columns[1].width = Cm(7.5) tbl5.columns[2].width = Cm(6.5) add_table_header(tbl5, ['Q.No.', 'Question', 'Response']) questions_e = [ ('E1', 'TPT regimen prescribed', '☐ 6H (6 months daily isoniazid) ☐ 3HP (3 months weekly rifapentine + isoniazid) ☐ 4R ☐ Other: ___ ☐ None'), ('E2', 'Correct weight-based dose prescribed as per PMTPT 2021?', '☐ Yes ☐ No ☐ Not verified'), ('E3', 'Source of TPT drugs', '☐ Public sector (free) ☐ Private pharmacy (self-purchased) ☐ Both ☐ Not obtained'), ('E4', 'Were TPT drugs available at first request?', '☐ Yes, immediately ☐ No, had to wait ☐ Not available at all'), ('E5', 'Cost of TPT drugs borne by patient (if any)', '☐ Free ☐ Partially paid ☐ Fully paid by patient | Amount: ₹_____'), ('E6', 'Were you given the full course of TPT at one time?', '☐ Yes, full course ☐ No, given in installments ☐ Partial course only'), ('E7', 'Drug-drug interactions discussed (ART, anticoagulants, oral contraceptives, anticonvulsants)?', '☐ Yes ☐ No ☐ Not applicable'), ('E8', 'For contacts of MDR/RR-TB index patient: was 6Lfx regimen prescribed (as per PMTPT 2021)?', '☐ Yes ☐ No ☐ N/A (DS-TB index case) ☐ Don\'t know'), ] for i, (qno, q, resp) in enumerate(questions_e): row = tbl5.rows[i+1] row.cells[0].text = qno row.cells[0].paragraphs[0].runs[0].bold = True row.cells[1].text = q row.cells[2].text = resp if i % 2 == 0: for c in row.cells: shade_cell(c, 'F2F2F2') doc.add_paragraph() # ── PART F: Adherence and Completion ───────────────────────────── add_heading(doc, 'PART F: Adherence, Monitoring and Treatment Outcomes', level=3) tbl6 = doc.add_table(rows=15, cols=3) tbl6.style = 'Table Grid' tbl6.columns[0].width = Cm(1.5) tbl6.columns[1].width = Cm(7.5) tbl6.columns[2].width = Cm(6.5) add_table_header(tbl6, ['Q.No.', 'Question', 'Response']) questions_f = [ ('F1', 'Did you start taking TPT?', '☐ Yes ☐ No'), ('F2', 'If No, reason for not starting', '☐ Not informed about eligibility ☐ Fear of side effects ☐ Felt no need (no symptoms) ☐ Cost ☐ Drug not available ☐ Family pressure ☐ Other: ___'), ('F3', 'TPT completion status', '☐ Completed full course ☐ Ongoing (in progress) ☐ Incomplete - stopped early ☐ Lost to follow-up ☐ Not started'), ('F4', 'If incomplete/stopped, reason for stopping', '☐ Side effects ☐ Felt better ☐ Forgot ☐ Drug supply interrupted ☐ Too many pills ☐ Work/travel ☐ Other: ___'), ('F5', 'How many doses did you miss in total (approximate)?', '☐ 0 ☐ 1–5 ☐ 6–10 ☐ >10 ☐ Don\'t remember'), ('F6', 'How was adherence monitored by the healthcare provider?', '☐ Monthly visits to facility ☐ Home visits by health worker ☐ Phone/WhatsApp calls ☐ 99DOTS/MERM ☐ Pill count ☐ No monitoring done'), ('F7', 'Were you assessed for TB symptoms at every follow-up visit while on TPT?', '☐ Yes, regularly ☐ Occasionally ☐ Never assessed during TPT'), ('F8', 'Were you asked about side effects at follow-up visits?', '☐ Yes ☐ No ☐ No follow-up done'), ('F9', 'Did you experience any side effects while on TPT?', '☐ No side effects\n☐ Nausea/vomiting ☐ Jaundice/yellow eyes ☐ Skin rash ☐ Tingling/numbness in hands/feet ☐ Orange urine (rifamycin) ☐ Fatigue ☐ Flu-like symptoms ☐ Other: ___'), ('F10', 'If side effect occurred, what action was taken?', '☐ Managed by HCW, TPT continued ☐ TPT stopped temporarily ☐ TPT stopped permanently ☐ No action taken ☐ N/A'), ('F11', 'Weight measured and recorded at follow-up visits?', '☐ Yes, regularly ☐ Occasionally ☐ No'), ('F12', 'Was LFT done during follow-up (if risk factors present)?', '☐ Yes ☐ No ☐ Risk factors not present ☐ Don\'t know'), ('F13', 'Post-TPT follow-up done (assessment for breakthrough TB at 6, 12 months)?', '☐ Yes ☐ No ☐ Ongoing'), ('F14', 'Overall TPT outcome', '☐ Treatment completed ☐ Failed (developed active TB during TPT) ☐ Died ☐ Lost to follow-up ☐ Discontinued due to toxicity ☐ Not evaluated ☐ Ongoing'), ] for i, (qno, q, resp) in enumerate(questions_f): row = tbl6.rows[i+1] row.cells[0].text = qno row.cells[0].paragraphs[0].runs[0].bold = True row.cells[1].text = q row.cells[2].text = resp if i % 2 == 0: for c in row.cells: shade_cell(c, 'F2F2F2') doc.add_paragraph() # ── PART G: Knowledge and Awareness about TPT ──────────────────── add_heading(doc, 'PART G: Knowledge and Awareness of HHC Regarding TPT', level=3) p = doc.add_paragraph() p.add_run('(Score: 1 = Correct, 0 = Incorrect/Don\'t know. Total KAP score: /15)').italic = True p.runs[0].font.size = Pt(10) tbl7 = doc.add_table(rows=16, cols=4) tbl7.style = 'Table Grid' tbl7.columns[0].width = Cm(1.2) tbl7.columns[1].width = Cm(8.0) tbl7.columns[2].width = Cm(5.0) tbl7.columns[3].width = Cm(1.3) add_table_header(tbl7, ['Q.No.', 'Knowledge Question', 'Response', 'Score']) knowledge_qs = [ ('G1', 'What does TB Preventive Therapy (TPT) do?', '☐ Prevents TB from developing ☐ Treats active TB ☐ Increases immunity ☐ Don\'t know'), ('G2', 'Who in the household should take TPT?', '☐ Only children ☐ All contacts after ruling out active TB ☐ Only HIV+ contacts ☐ Don\'t know'), ('G3', 'What is the recommended duration of the short TPT regimen (3HP)?', '☐ 1 month ☐ 3 months ☐ 6 months ☐ 12 months ☐ Don\'t know'), ('G4', 'Can a person who feels completely healthy/well still need to take TPT?', '☐ Yes ☐ No ☐ Don\'t know'), ('G5', 'What happens if you stop TPT midway?', '☐ Risk of developing TB increases ☐ Nothing happens ☐ Drug resistance can develop ☐ Don\'t know'), ('G6', 'What tests are needed before starting TPT?', '☐ Ruling out active TB (symptoms/X-ray) ☐ Blood test (IGRA/TST) ☐ Both ☐ No tests needed ☐ Don\'t know'), ('G7', 'Is TPT available for free under the government program (NTEP)?', '☐ Yes ☐ No ☐ Don\'t know'), ('G8', 'Which of these is a side effect that requires IMMEDIATE medical attention?', '☐ Orange urine ☐ Yellow eyes/jaundice ☐ Mild nausea ☐ Don\'t know'), ('G9', 'Can a pregnant woman take TPT?', '☐ Yes, certain regimens are safe ☐ No, absolutely contraindicated ☐ Don\'t know'), ('G10', 'What is the source of your information about TPT?', '☐ Treating doctor ☐ ASHA/ANM/health worker ☐ Family/friend ☐ Internet/media ☐ No information received'), ('G11', 'Is TB Preventive Therapy the same as TB treatment?', '☐ Yes ☐ No ☐ Don\'t know'), ('G12', 'Does taking TPT guarantee that you will never get TB?', '☐ Yes ☐ No, but it reduces risk significantly ☐ Don\'t know'), ('G13', 'After completing TPT, should you still watch for TB symptoms?', '☐ Yes ☐ No ☐ Don\'t know'), ('G14', 'Is a child below 5 years of age who is a household contact recommended to receive TPT?', '☐ Yes ☐ No ☐ Only if symptomatic ☐ Don\'t know'), ('G15', 'Vitamin B6 (pyridoxine) should be taken alongside isoniazid to prevent:', '☐ Liver damage ☐ Peripheral neuropathy (hand/foot tingling) ☐ Drug resistance ☐ Don\'t know'), ] for i, (qno, q, resp) in enumerate(knowledge_qs): row = tbl7.rows[i+1] row.cells[0].text = qno row.cells[0].paragraphs[0].runs[0].bold = True row.cells[1].text = q row.cells[2].text = resp row.cells[3].text = '____' if i % 2 == 0: for c in row.cells: shade_cell(c, 'F2F2F2') doc.add_paragraph() # ── PART H: Barriers and Facilitators ──────────────────────────── add_heading(doc, 'PART H: Barriers and Facilitators to TPT Initiation and Completion', level=3) tbl8 = doc.add_table(rows=9, cols=3) tbl8.style = 'Table Grid' tbl8.columns[0].width = Cm(1.5) tbl8.columns[1].width = Cm(7.5) tbl8.columns[2].width = Cm(6.5) add_table_header(tbl8, ['Q.No.', 'Question', 'Response']) questions_h = [ ('H1', 'Barriers faced in accessing TPT (tick all applicable)', '☐ Not informed by provider ☐ Cost of drugs/tests ☐ Distance to facility ☐ Stigma/fear of TB label ☐ Long duration of treatment ☐ Side effects ☐ No barriers faced ☐ Other: ___'), ('H2', 'Did TB-related stigma affect your decision to take or complete TPT?', '☐ Yes, significantly ☐ Somewhat ☐ No'), ('H3', 'Did any family member discourage you from taking TPT?', '☐ Yes ☐ No'), ('H4', 'Was there any financial difficulty due to TPT (travel, tests, drugs)?', '☐ Yes, major ☐ Yes, minor ☐ No financial burden'), ('H5', 'Did you receive any social support to help with TPT adherence?', '☐ Yes - from family ☐ Yes - from health worker ☐ Yes - from community volunteer/TB champion ☐ No support received'), ('H6', 'What could have been done to make it easier for you to take/complete TPT?', '☐ Home delivery of drugs ☐ Shorter treatment duration ☐ Better counselling ☐ Financial support ☐ Nothing needed ☐ Other: ___'), ('H7', 'Were you ever contacted by the NTEP/ASHA/ANM to follow up on your TPT status?', '☐ Yes, regularly ☐ Yes, once ☐ Never contacted'), ('H8', 'Was the private facility staff cooperative in facilitating your access to TPT?', '☐ Very cooperative ☐ Somewhat cooperative ☐ Not cooperative ☐ Referred elsewhere without guidance'), ] for i, (qno, q, resp) in enumerate(questions_h): row = tbl8.rows[i+1] row.cells[0].text = qno row.cells[0].paragraphs[0].runs[0].bold = True row.cells[1].text = q row.cells[2].text = resp if i % 2 == 0: for c in row.cells: shade_cell(c, 'F2F2F2') doc.add_page_break() # ═══════════════════════════════════════════════════════════════════ # INSTRUMENT 2 — SEMI-STRUCTURED FACILITY ASSESSMENT CHECKLIST (Private Providers) # ═══════════════════════════════════════════════════════════════════ add_heading(doc, 'INSTRUMENT 2', level=1) add_heading(doc, 'Facility Assessment Checklist for Private Healthcare Providers', level=2) p = doc.add_paragraph() p.add_run('For: ').bold = True p.add_run('Private practitioners/clinics notifying pulmonary TB in Rajkot city.\n') p.add_run('Method: ').bold = True p.add_run('Direct observation + interview with facility manager/doctor-in-charge | ') p.add_run('Duration: ').bold = True p.add_run('45–60 minutes') doc.add_paragraph() # Facility profile add_heading(doc, 'SECTION F1: Facility Profile', level=3) tbl_f1 = doc.add_table(rows=10, cols=2) tbl_f1.style = 'Table Grid' tbl_f1.columns[0].width = Cm(7.5) tbl_f1.columns[1].width = Cm(8.0) add_table_header(tbl_f1, ['Item', 'Details']) facility_info = [ ('Name and address of facility', '_______________________________'), ('Name of assessor', '_______________________________'), ('Name of doctor/facility manager interviewed', '_______________________________'), ('Date of assessment', '____ / ____ / ______'), ('Type of facility', '☐ Private clinic (solo practitioner) ☐ Nursing home ☐ Private hospital ☐ Diagnostic center ☐ PPSA-linked facility'), ('Speciality of doctor', '☐ General Medicine ☐ Pulmonology ☐ Paediatrics ☐ General Physician ☐ Other: ___'), ('Average TB cases notified per month', '__________ cases/month'), ('Is the facility registered with NTEP for TB notification?', '☐ Yes ☐ No'), ('Nikshay notification compliance in last quarter', '☐ 100% ☐ 75–99% ☐ 50–74% ☐ <50% ☐ Don\'t know'), ] for i, (item, detail) in enumerate(facility_info): row = tbl_f1.rows[i+1] row.cells[0].text = item row.cells[1].text = detail if i % 2 == 0: for c in row.cells: shade_cell(c, 'F2F2F2') doc.add_paragraph() # Contact investigation practices add_heading(doc, 'SECTION F2: Contact Investigation and TPT Practices', level=3) tbl_f2 = doc.add_table(rows=14, cols=3) tbl_f2.style = 'Table Grid' tbl_f2.columns[0].width = Cm(1.5) tbl_f2.columns[1].width = Cm(9.5) tbl_f2.columns[2].width = Cm(4.5) add_table_header(tbl_f2, ['#', 'Practice / Item', 'Status']) facility_prac = [ ('1', 'Does the facility routinely enumerate household contacts of notified TB patients?', '☐ Yes ☐ No ☐ Sometimes'), ('2', 'Is a contact tracing form / record maintained?', '☐ Yes ☐ No'), ('3', 'Is the 4-symptom screen (W4SS) routinely administered to all HHC?', '☐ Yes, to all ☐ Selective ☐ No'), ('4', 'Is CXR recommended for asymptomatic HHC aged ≥5 years?', '☐ Yes ☐ No ☐ Only if symptomatic'), ('5', 'Is TST / IGRA testing offered or referred for HHC aged ≥5 years?', '☐ Yes, in-house ☐ Referred out ☐ No'), ('6', 'Is active TB excluded before offering TPT?', '☐ Always ☐ Sometimes ☐ Not systematically done'), ('7', 'Is TPT prescribed/offered to eligible HHC by this facility?', '☐ Yes ☐ No ☐ Referred to NTEP/public sector'), ('8', 'What TPT regimen is prescribed?', '☐ 6H ☐ 3HP ☐ 4R ☐ Multiple options ☐ None prescribed here'), ('9', 'Is pyridoxine co-prescribed with isoniazid?', '☐ Yes, routinely ☐ Selectively ☐ No'), ('10', 'Are patients enrolled on Nikshay / Prevent TB India App for TPT?', '☐ Yes ☐ No ☐ Done by NTEP staff only'), ('11', 'Is follow-up monitoring of HHC on TPT conducted?', '☐ Yes - monthly visits ☐ Yes - phone calls ☐ Irregular ☐ No follow-up'), ('12', 'Are ADRs (adverse drug reactions) monitored and managed?', '☐ Yes - structured ADR system ☐ Managed ad-hoc when reported ☐ No'), ('13', 'Is the facility aware of PMTPT India Guidelines 2021?', '☐ Yes, followed ☐ Aware but not implemented ☐ Not aware'), ] for i, (num, item, status) in enumerate(facility_prac): row = tbl_f2.rows[i+1] row.cells[0].text = num row.cells[0].paragraphs[0].runs[0].bold = True row.cells[1].text = item row.cells[2].text = status if i % 2 == 0: for c in row.cells: shade_cell(c, 'F2F2F2') doc.add_paragraph() # Staff training and private sector engagement add_heading(doc, 'SECTION F3: Staff Training and NTEP Linkages', level=3) tbl_f3 = doc.add_table(rows=9, cols=3) tbl_f3.style = 'Table Grid' tbl_f3.columns[0].width = Cm(1.5) tbl_f3.columns[1].width = Cm(9.5) tbl_f3.columns[2].width = Cm(4.5) add_table_header(tbl_f3, ['#', 'Item', 'Status']) training_qs = [ ('1', 'Has the doctor/key staff received training on PMTPT guidelines in the past 2 years?', '☐ Yes ☐ No ☐ Don\'t remember'), ('2', 'Is PPSA (Patient Provider Support Agency) engaged with this facility?', '☐ Yes ☐ No ☐ Don\'t know'), ('3', 'Does a PPSA staff member visit this facility for contact investigation/TPT follow-up?', '☐ Yes, regularly ☐ Occasionally ☐ Never'), ('4', 'Is there a formal linkage with the District TB Office (DTO) / TB Unit for TPT services?', '☐ Yes - formal MoU/protocol ☐ Informal ☐ No linkage'), ('5', 'Does the facility provide free TPT drugs from NTEP stock, or are patients directed to buy from pharmacies?', '☐ NTEP stock provided free ☐ Patients buy from pharmacy ☐ Referred to public facility ☐ Both'), ('6', 'Is there any advocacy/IEC material about TPT displayed in the facility?', '☐ Yes ☐ No'), ('7', 'Are healthcare workers aware of drug-drug interactions between TPT and common medications (ARVs, OCP, anticonvulsants)?', '☐ Yes ☐ Partially ☐ No'), ('8', 'Challenges/barriers in implementing TPT at this facility (open-ended)', 'Record verbatim: ___________________________'), ] for i, (num, item, status) in enumerate(training_qs): row = tbl_f3.rows[i+1] row.cells[0].text = num row.cells[0].paragraphs[0].runs[0].bold = True row.cells[1].text = item row.cells[2].text = status if i % 2 == 0: for c in row.cells: shade_cell(c, 'F2F2F2') doc.add_paragraph() # WHO Facility Risk Assessment - IPC add_heading(doc, 'SECTION F4: WHO TB Infection Prevention & Control (IPC) Assessment', level=3) p = doc.add_paragraph() p.add_run('(Based on WHO Facility TB Risk Assessment Tool, Annex 2 – MSF Adaptation)').italic = True p.runs[0].font.size = Pt(10) tbl_f4 = doc.add_table(rows=14, cols=4) tbl_f4.style = 'Table Grid' tbl_f4.columns[0].width = Cm(1.5) tbl_f4.columns[1].width = Cm(8.5) tbl_f4.columns[2].width = Cm(2.5) tbl_f4.columns[3].width = Cm(3.0) add_table_header(tbl_f4, ['#', 'IPC Measure', 'Yes / No', 'Comments']) ipc_items = [ ('1', 'Is there a TB IPC focal person or committee at this facility?'), ('2', 'Is there a written, facility-specific IPC plan that includes TB?'), ('3', 'Are presumptive TB cases separated from other patients (triage/segregation)?'), ('4', 'Are symptomatic patients given medical masks?'), ('5', 'Is there a fast-tracking system to minimize waiting time for TB suspects?'), ('6', 'Is sputum collected in a designated, well-ventilated area?'), ('7', 'Are N95/FFP2 respirators available for staff?'), ('8', 'Do HCWs wear respirators when entering TB patient rooms?'), ('9', 'Are windows open during busy hours for natural ventilation?'), ('10', 'Do staff receive annual TB screening (symptom check ± CXR)?'), ('11', 'Have staff been offered TPT at least once?'), ('12', 'Is there educational content on TB and cough hygiene displayed for patients?'), ('13', 'Are GeneXpert/NAAT results available in <48 hours?'), ] for i, (num, item) in enumerate(ipc_items): row = tbl_f4.rows[i+1] row.cells[0].text = num row.cells[1].text = item row.cells[2].text = '☐ Yes ☐ No' row.cells[3].text = '' if i % 2 == 0: for c in row.cells: shade_cell(c, 'F2F2F2') doc.add_page_break() # ═══════════════════════════════════════════════════════════════════ # INSTRUMENT 3 — IN-DEPTH INTERVIEW GUIDE (IDI) — Mixed Method Component # ═══════════════════════════════════════════════════════════════════ add_heading(doc, 'INSTRUMENT 3', level=1) add_heading(doc, 'In-Depth Interview (IDI) Guide - Qualitative Component', level=2) p = doc.add_paragraph() p.add_run('Purpose: ').bold = True p.add_run('To explore lived experiences, perceptions, barriers and facilitators related to TPT among HHC and private providers (qualitative strand of the mixed-method design).\n') p.add_run('Participants: ').bold = True p.add_run('(a) Index patients / HHC who were offered or refused TPT | (b) Private practitioners managing TB cases in Rajkot\n') p.add_run('Duration: ').bold = True p.add_run('45–60 minutes | ') p.add_run('Mode: ').bold = True p.add_run('Face-to-face, audio-recorded (with consent)\n') p.add_run('Note: ').bold = True r = p.add_run('These are guiding questions. Use probes flexibly. Record responses verbatim.') r.italic = True doc.add_paragraph() add_heading(doc, 'IDI-A: For Index Patients and Household Contacts', level=3) idi_questions_a = [ ('IDI-A1', 'Opening', 'Can you describe the events that led up to the diagnosis of TB in your household? Who else in the family was involved?', 'Probe: symptoms, timeline, doctor visits, household contacts\' initial reactions'), ('IDI-A2', 'Contact Investigation', 'How were your family members tested/screened for TB after the diagnosis? Can you describe the process?', 'Probe: who initiated, what was done, what was explained, was assistance of index patient taken'), ('IDI-A3', 'Health Worker Interaction', 'Can you describe the visits made by health care workers to your home?', 'Probe: how many visits, who came, what information was given, whether TPT was specifically mentioned'), ('IDI-A4', 'TPT Awareness', 'What do you know about the medicine (TPT) that is given to family members to prevent TB?', 'Probe: source of information, perceived purpose, perceived benefits, myths'), ('IDI-A5', 'Decision Making', 'Why did you decide to take / not take TPT?', 'Probe: self-initiated actions, where obtained from, ease or difficulty, family discussions, provider advice'), ('IDI-A6', 'Barriers', 'What problems did you face in taking TPT?', 'Probe: cost, access, side effects, stigma, duration, lack of information, family opposition'), ('IDI-A7', 'Private Sector Specific', 'How did your private doctor guide you regarding TPT for your family members?', 'Probe: was TPT discussed, was a referral given, were drugs arranged, was NTEP involvement mentioned'), ('IDI-A8', 'Suggestions', 'What could have been done better to ensure that you and your family could access and complete TPT?', 'Probe: delivery, enrolment, testing, drug availability, counselling, follow-up support'), ] for qno, domain, question, probe in idi_questions_a: p = doc.add_paragraph() p.add_run(f'{qno} [{domain}]: ').bold = True p.add_run(question) p2 = doc.add_paragraph() p2.add_run(f'Probe: ').italic = True p2.add_run(probe).italic = True p2.runs[0].font.size = Pt(10) p2.runs[1].font.size = Pt(10) p2.paragraph_format.left_indent = Cm(1.0) doc.add_paragraph('Response: _______________________________________________').paragraph_format.left_indent = Cm(0.5) doc.add_paragraph() doc.add_paragraph() add_heading(doc, 'IDI-B: For Private Practitioners / Facility Managers', level=3) idi_questions_b = [ ('IDI-B1', 'Opening', 'How was your experience with TB case management and contact tracing in your practice?', 'Probe: frequency, challenges, team involved'), ('IDI-B2', 'Awareness of PMTPT', 'Are you aware of the PMTPT India Guidelines 2021 for TPT among household contacts? How do you implement them?', 'Probe: regimen, eligibility criteria, cascade of care, Nikshay reporting'), ('IDI-B3', 'Current Practice', 'What happens after you diagnose a TB patient? Do you systematically screen and offer TPT to household contacts?', 'Probe: who does the screening, where, what is told to contacts, how many complete TPT'), ('IDI-B4', 'Private Sector Barriers', 'What are the challenges in implementing TPT for contacts of private-sector TB patients?', 'Probe: guideline awareness, drug availability, PPSA linkage, patient willingness, cost, data entry into Nikshay'), ('IDI-B5', 'NTEP Linkage', 'How does your facility coordinate with NTEP/PPSA for contact tracing and TPT?', 'Probe: frequency of PPSA visits, data sharing, drug supply, patient referral pathway'), ('IDI-B6', 'Enablers', 'What factors help you implement TPT successfully?', 'Probe: community trust, patient motivation, PPSA support, training, drug availability'), ('IDI-B7', 'Solutions', 'From your experience, what programmatic changes would increase TPT acceptance and completion among private sector patients\' contacts?', 'Probe: training, drug supply, incentives, simplified protocols, digital tools'), ] for qno, domain, question, probe in idi_questions_b: p = doc.add_paragraph() p.add_run(f'{qno} [{domain}]: ').bold = True p.add_run(question) p2 = doc.add_paragraph() p2.add_run(f'Probe: ').italic = True p2.add_run(probe).italic = True p2.runs[0].font.size = Pt(10) p2.runs[1].font.size = Pt(10) p2.paragraph_format.left_indent = Cm(1.0) doc.add_paragraph('Response: _______________________________________________').paragraph_format.left_indent = Cm(0.5) doc.add_paragraph() doc.add_page_break() # ═══════════════════════════════════════════════════════════════════ # INSTRUMENT 4 — PROGRAMME MONITORING & SUPERVISORY CHECKLIST (for DTO/PPSA) # ═══════════════════════════════════════════════════════════════════ add_heading(doc, 'INSTRUMENT 4', level=1) add_heading(doc, 'Programme Supervisory Checklist for District TB Office / PPSA', level=2) p = doc.add_paragraph() p.add_run('Adapted from: ').bold = True p.add_run('PMTPT India 2021 - Table 14.1 (Supervisory Checklist) and Supplementary Checklist (tropicalmed-2707987)') doc.add_paragraph() add_heading(doc, 'SECTION S1: Organizational and Administrative Readiness', level=3) tbl_s1 = doc.add_table(rows=14, cols=3) tbl_s1.style = 'Table Grid' tbl_s1.columns[0].width = Cm(1.5) tbl_s1.columns[1].width = Cm(10.5) tbl_s1.columns[2].width = Cm(3.5) add_table_header(tbl_s1, ['#', 'Item', 'Status']) admin_items = [ ('S1.1', 'State/District TPT committee established?', '☐ Yes ☐ No'), ('S1.2', 'TPT implementation plan included in Annual PIP (with budget)?', '☐ Yes ☐ No ☐ Planned'), ('S1.3', 'Mapping of private facilities managing TB patients done?', '☐ Done ☐ Partial ☐ Not done'), ('S1.4', 'Line list of all HHC of notified TB patients from private sector available?', '☐ Yes ☐ No ☐ Partial'), ('S1.5', 'Directory of treatment supporters available and updated?', '☐ Yes ☐ No'), ('S1.6', 'Human resources adequate for TPT contact tracing and monitoring?', '☐ Adequate ☐ Insufficient ☐ Vacant posts present'), ('S1.7', 'Training on PMTPT 2021 guidelines completed for staff? (STS, TBHV, ASHA, CHO, Private doctors)', '☐ All trained ☐ Majority ☐ Minority ☐ Not done'), ('S1.8', 'PPSA actively involved in private sector TPT contact tracing in Rajkot?', '☐ Yes - active ☐ Yes - limited ☐ No'), ('S1.9', 'Advocacy/IEC material on TPT available and distributed?', '☐ Available and distributed ☐ Available, not distributed ☐ Not available'), ('S1.10', 'Community volunteers (TB champions, ASHAs) trained and mobilized for TPT?', '☐ Yes ☐ Partially ☐ No'), ('S1.11', 'aDSM (active Drug Safety Monitoring) system in place for TPT ADRs?', '☐ Yes ☐ No'), ('S1.12', 'Mechanism for review of TPT data (Nikshay / Prevent TB India app)?', '☐ Nikshay portal ☐ Prevent TB India App ☐ TPT register ☐ None'), ('S1.13', 'Feedback mechanism to PHC/UPHC on TPT performance in place?', '☐ Yes - regular ☐ Irregular ☐ None'), ] for i, (num, item, status) in enumerate(admin_items): row = tbl_s1.rows[i+1] row.cells[0].text = num row.cells[1].text = item row.cells[2].text = status if i % 2 == 0: for c in row.cells: shade_cell(c, 'F2F2F2') doc.add_paragraph() add_heading(doc, 'SECTION S2: Drug Supply and Diagnostics', level=3) tbl_s2 = doc.add_table(rows=10, cols=3) tbl_s2.style = 'Table Grid' tbl_s2.columns[0].width = Cm(1.5) tbl_s2.columns[1].width = Cm(10.5) tbl_s2.columns[2].width = Cm(3.5) add_table_header(tbl_s2, ['#', 'Item', 'Status']) drug_items = [ ('S2.1', 'Current stock of 6H (isoniazid) adequate for all eligible HHC?', '☐ >3 months ☐ 1–3 months ☐ <1 month ☐ Stock-out'), ('S2.2', 'Current stock of 3HP available?', '☐ >3 months ☐ 1–3 months ☐ <1 month ☐ Not available'), ('S2.3', 'Pyridoxine (Vitamin B6) available?', '☐ Yes ☐ No ☐ Insufficient'), ('S2.4', 'Storage space for TPT drugs adequate and suitable?', '☐ Yes ☐ No - space issues'), ('S2.5', 'TST (Tuberculin Skin Test) kits available / accessible?', '☐ In-house ☐ Referred out ☐ Not available'), ('S2.6', 'IGRA testing available (in-house or outsourced)?', '☐ In-house ☐ Outsourced - private lab ☐ Not available'), ('S2.7', 'CXR facilities available for HHC evaluation?', '☐ In-house ☐ Referred out ☐ Not accessible'), ('S2.8', 'Lab supplies for TB infection testing available for estimated number of HHC?', '☐ Adequate ☐ Inadequate ☐ None'), ('S2.9', 'ADR management plan documented and referral pathway to higher facility in place?', '☐ Yes ☐ No ☐ In development'), ] for i, (num, item, status) in enumerate(drug_items): row = tbl_s2.rows[i+1] row.cells[0].text = num row.cells[1].text = item row.cells[2].text = status if i % 2 == 0: for c in row.cells: shade_cell(c, 'F2F2F2') doc.add_paragraph() add_heading(doc, 'SECTION S3: TPT Care Cascade Monitoring Indicators (PMTPT 2021, Table 14.3)', level=3) tbl_s3 = doc.add_table(rows=7, cols=4) tbl_s3.style = 'Table Grid' tbl_s3.columns[0].width = Cm(5.0) tbl_s3.columns[1].width = Cm(3.5) tbl_s3.columns[2].width = Cm(3.5) tbl_s3.columns[3].width = Cm(3.5) add_table_header(tbl_s3, ['Indicator', 'Target (PMTPT)', 'Actual (Rajkot Private Sector)', 'Gap']) cascade_rows = [ ('HHC evaluated for TB disease & TBI / Total HHC of notified PTB patients (%)', '100%', '', ''), ('HHC tested for TBI / HHC evaluated (%)', '>90%', '', ''), ('HHC eligible for TPT / HHC evaluated (%)', 'As per algorithm', '', ''), ('HHC initiated on TPT / HHC eligible (%)', '>90%', '', ''), ('HHC completed TPT / HHC initiated (%)', '>90%', '', ''), ('Post-TPT follow-up at 6, 12, 18, 24 months (%)', '>90%', '', ''), ] for i, (ind, target, actual, gap) in enumerate(cascade_rows): row = tbl_s3.rows[i+1] row.cells[0].text = ind row.cells[1].text = target row.cells[2].text = actual row.cells[3].text = gap if i % 2 == 0: for c in row.cells: shade_cell(c, 'F2F2F2') doc.add_page_break() # ═══════════════════════════════════════════════════════════════════ # ANNEX: OPERATIONAL DEFINITIONS # ═══════════════════════════════════════════════════════════════════ add_heading(doc, 'ANNEX: Operational Definitions', level=1) p = doc.add_paragraph() p.add_run('(As per PMTPT India Guidelines 2021 and Supplementary Data)').italic = True definitions = [ ('Household Contact (HHC)', 'A person who shared the same enclosed living space as the index TB patient for one or more nights or for frequent/extended daytime periods during the 3 months before current TB treatment started.'), ('Index Patient', 'Bacteriologically confirmed or clinically diagnosed pulmonary TB patient notified in Nikshay from a private facility.'), ('TB Preventive Treatment (TPT)', 'Treatment offered to individuals at risk of developing TB disease, to reduce that risk. Not the same as TB treatment.'), ('Eligible for TPT', 'After ruling out active TB: (a) Child HHC ≤5 years; (b) Child HHC >5 years & adults after TBI positive (TST/IGRA) with normal/unavailable CXR; (c) PLHIV.'), ('Started on TPT', 'Eligible person without contraindications who has been initiated on a TPT regimen.'), ('Completed TPT (6H)', '≥144/180 doses taken within 239 days (133% of 6 months).'), ('Completed TPT (3HP)', '≥11/12 doses taken within 120 days.'), ('Lost to Follow-Up', 'TPT interrupted for ≥8 consecutive weeks (6H/6Lfx/4R) or ≥4 weeks (3HP), without traceability.'), ('Breakthrough TB', 'TB disease diagnosed in a contact while receiving TPT, requiring stoppage of TPT and initiation of curative TB treatment.'), ('Programmatic Management of TPT (PMTPT)', 'All coordinated activities by public and private health caregivers and community aimed at scaling up TPT to people who need it.'), ] tbl_ann = doc.add_table(rows=len(definitions)+1, cols=2) tbl_ann.style = 'Table Grid' tbl_ann.columns[0].width = Cm(5.5) tbl_ann.columns[1].width = Cm(10.0) add_table_header(tbl_ann, ['Term', 'Definition']) for i, (term, defn) in enumerate(definitions): row = tbl_ann.rows[i+1] row.cells[0].text = term row.cells[0].paragraphs[0].runs[0].bold = True row.cells[1].text = defn if i % 2 == 0: for c in row.cells: shade_cell(c, 'F2F2F2') doc.add_paragraph() # Footer / References add_heading(doc, 'References and Source Documents', level=2) refs = [ '1. Ministry of Health and Family Welfare, India. Guidelines for Programmatic Management of Tuberculosis Preventive Treatment in India (PMTPT). Central TB Division, NTEP, New Delhi; 2021.', '2. World Health Organization. WHO Consolidated Guidelines on Tuberculosis: Module 1 - Prevention: Tuberculosis Preventive Treatment, 2nd Edition. Geneva: WHO; 2024.', '3. World Health Organization. WHO Operational Handbook on Tuberculosis: Module 1 - Prevention - Infection Prevention and Control. Geneva: WHO; 2023.', '4. WHO Facility Tuberculosis Risk Assessment Tool. Annex 2 in: WHO Operational Handbook on TB Module 1 IPC (based on MSF tool).', '5. Butani Y et al. Annexure 1: In-depth interview guide for index patient/HHC. [IDI Guide - Valsad TPT study].', '6. Supplementary Checklist and Variables (Annex S1, S2, Table S1-S2). Tropical Medicine Supplementary Data (tropicalmed-2707987). Delhi Chest Clinic TPT Study.', '7. WHO TB Knowledge Sharing Platform. Identifying Populations for TB Preventive Treatment. https://tbksp.who.int', ] for ref in refs: p = doc.add_paragraph(ref, style='List Number') p.runs[0].font.size = Pt(10) # ─── SAVE ──────────────────────────────────────────────────────── output_path = '/tmp/workspace/tpt-thesis-questionnaire/TPT_Thesis_Questionnaire_Rajkot.docx' doc.save(output_path) print(f"Saved: {output_path}") PYEOF

Running Command

ls -lh /tmp/workspace/tpt-thesis-questionnaire/

Your questionnaire is ready. Here is the download link:

TPT Thesis Questionnaire Rajkot

Word Document · DOCX


What Was Built - Complete Overview

The questionnaire is a mixed-method, 4-instrument package tailored specifically for your thesis title ("Evaluation of Programmatic Management of TPT among Household Contacts of Pulmonary TB Patients in the Private Health Sector of Rajkot City"). Every section is directly grounded in your uploaded source documents.

Sources Used (from your uploaded PDFs)

SourceContribution
PMTPT India Guidelines 2021 (MoHFW/NTEP)Eligibility algorithm, regimen dosages (6H/3HP table), contraindications, cascade definitions, supervisory checklist (Table 14.1), monitoring indicators (Table 14.3), private sector engagement framework (Chapter 13), ADR management
WHO Facility TB Risk Assessment Tool (Annex 2)IPC assessment section in Instrument 2 (F4), staff protection, environmental measures, sputum collection
tropicalmed-2707987 supplementaryVariables and data sources (Table S1), TPT cascade operational definitions (Table S2), district/state/sub-district interview checklists (Annex S1), supportive supervision checklist (Annex S2)
IDI guide (Butani et al. - idi1.pdf)Qualitative IDI questions structure, probes for HHC and index patients (Instrument 3)

Four Instruments at a Glance

Instrument 1 - Semi-Structured HHC Questionnaire (Quantitative + KAP)
  • Part A: Socio-demographic profile (13 questions)
  • Part B: Index TB patient information (8 questions)
  • Part C: Contact investigation and TB screening (12 questions - includes W4SS, CXR, TST, IGRA)
  • Part D: TPT eligibility assessment and initiation (14 questions - includes pre-TPT workup, counselling, Nikshay enrolment)
  • Part E: TPT regimen details and drug availability (8 questions - regimen, cost, source)
  • Part F: Adherence, monitoring, and treatment outcomes (14 questions - TPT cascade outcomes, ADR monitoring)
  • Part G: Knowledge/Awareness scoring (15 KAP questions with scoring scale)
  • Part H: Barriers and facilitators (8 questions)
Instrument 2 - Private Facility Assessment Checklist (Observational)
  • F1: Facility profile (Nikshay registration, case load)
  • F2: Contact investigation and TPT practices (13 items)
  • F3: Staff training and NTEP/PPSA linkages (8 items)
  • F4: WHO IPC assessment (13 items from WHO Facility Risk Tool)
Instrument 3 - In-Depth Interview (IDI) Guide (Qualitative)
  • IDI-A: 8 guided questions for HHC/index patients (with structured probes)
  • IDI-B: 7 guided questions for private practitioners/facility managers
Instrument 4 - Programme Supervisory Checklist (for DTO/PPSA)
  • S1: Organizational readiness (13 items from PMTPT Table 14.1)
  • S2: Drug supply and diagnostics (9 items)
  • S3: TPT care cascade monitoring indicators table (with PMTPT targets vs. Rajkot actuals)
Annex: Operational definitions (10 terms per PMTPT 2021 + supplementary)
This is a shared conversation. Sign in to Orris to start your own chat.