Give important questions and answers to those according to park text book for internals to pass
| Type | Example |
|---|---|
| Observational | Cross-sectional, Case-control, Cohort |
| Experimental | RCT, Field trial, Community trial |
| Feature | Incidence | Prevalence |
|---|---|---|
| Definition | Number of NEW cases in a period | ALL cases (old + new) at a given time |
| Time | Rate (over a period) | Point or period |
| Numerator | New cases only | All cases |
| Formula | New cases / Population at risk x 1000 | All cases / Total population x 1000 |
| Useful for | Acute diseases, aetiology | Chronic diseases, service planning |
| Vaccine | When Given | Route |
|---|---|---|
| BCG | At birth | Intradermal |
| OPV 0 | At birth | Oral |
| Hepatitis B (birth dose) | Within 24 hours of birth | IM |
| OPV 1, 2, 3 + IPV | 6, 10, 14 weeks | Oral + IM |
| Pentavalent (DPT+HepB+Hib) | 6, 10, 14 weeks | IM |
| Rotavirus | 6, 10, 14 weeks | Oral |
| PCV | 6, 14 weeks, 9 months | IM |
| Measles-Rubella (MR) | 9-12 months, 16-24 months | SC |
| DPT booster | 16-24 months, 5-6 years | IM |
| TT | 10 years, 16 years | IM |
| TT for pregnant women | 2 doses in pregnancy | IM |
| Level | Stage | Example |
|---|---|---|
| Health promotion | Pre-pathogenesis | Good nutrition, health education |
| Specific protection | Pre-pathogenesis | Immunization, use of helmets |
| Early diagnosis & treatment | Early pathogenesis | Screening, case detection |
| Disability limitation | Late pathogenesis | Treatment to limit disability |
| Rehabilitation | Outcome | Physiotherapy, prosthetics |
| Feature | Active Immunity | Passive Immunity |
|---|---|---|
| Source | Body produces own antibodies | Antibodies received from external source |
| Onset | Slow (1-2 weeks) | Immediate |
| Duration | Long lasting (years/life) | Short (3-4 weeks) |
| Memory | Yes | No |
| Example | Vaccines (BCG, OPV, MMR) | Immunoglobulin, maternal antibodies |
| Feature | Screening | Case-finding | Diagnostic test |
|---|---|---|---|
| Population | Asymptomatic, not seeking care | Patients seeking care for OTHER conditions | Patients with signs & symptoms |
| Example | Neonatal screening, AIDS testing in blood donors | VDRL in pregnant women attending ANC | VDRL in patient with secondary syphilis lesion |
| Initiated by | Public health personnel | Clinician opportunistically | Clinician |
| Topic | Key Number to Remember |
|---|---|
| Sensitivity formula | TP / (TP + FN) |
| Specificity formula | TN / (TN + FP) |
| Chlorine residual in water | 0.5 mg/L |
| WHO established | 7 April 1948 |
| Essential medicines concept | WHO, 1977 |
| Hill's criteria | 9 criteria |
| Morris's uses of epidemiology | 7 uses |
| Levels of prevention | 5 levels |
| Types of screening | 3 types (Mass, Selective, Multiphasic) |
All answers sourced from Park's Textbook of Preventive and Social Medicine (Park's PSM). Focus especially on Qs 6, 7, 15, 16, 23 - these cover the core of your exam topics and are most likely to appear as Long Essay or Short Answer questions.
Create a PDF summary study guide of these Q&As
ls /home/daytona/workspace/ 2>/dev/null && echo "OK" || echo "EMPTY"
mkdir -p /home/daytona/workspace/community-medicine-guide && echo "dir created"
~/community-medicine-guide/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import BaseDocTemplate, Frame, PageTemplate
from reportlab.lib.colors import HexColor
OUTPUT = "/home/daytona/workspace/community-medicine-guide/Community_Medicine_Study_Guide.pdf"
# ── Color palette ──────────────────────────────────────────
DARK_BLUE = HexColor("#1a3a5c")
MID_BLUE = HexColor("#2563a8")
LIGHT_BLUE = HexColor("#dbeafe")
ACCENT = HexColor("#e67e22")
GREEN_BG = HexColor("#d1fae5")
YELLOW_BG = HexColor("#fef9c3")
RED_BG = HexColor("#fee2e2")
GREY_BG = HexColor("#f1f5f9")
WHITE = colors.white
BLACK = colors.black
W, H = A4
# ── Styles ─────────────────────────────────────────────────
styles = getSampleStyleSheet()
def make_style(name, parent="Normal", **kw):
s = ParagraphStyle(name, parent=styles[parent], **kw)
return s
TITLE_STYLE = make_style("MyTitle",
fontSize=22, textColor=WHITE, alignment=TA_CENTER,
fontName="Helvetica-Bold", spaceAfter=4, leading=28)
SUBTITLE_STYLE = make_style("MySubtitle",
fontSize=12, textColor=LIGHT_BLUE, alignment=TA_CENTER,
fontName="Helvetica", spaceAfter=2, leading=16)
TOPIC_HEADER = make_style("TopicHeader",
fontSize=14, textColor=WHITE, fontName="Helvetica-Bold",
spaceAfter=6, spaceBefore=10, leading=18)
Q_STYLE = make_style("QStyle",
fontSize=11, textColor=DARK_BLUE, fontName="Helvetica-Bold",
spaceAfter=4, spaceBefore=8, leading=15)
A_STYLE = make_style("AStyle",
fontSize=10, textColor=BLACK, fontName="Helvetica",
spaceAfter=4, spaceBefore=2, leading=14, leftIndent=8,
alignment=TA_JUSTIFY)
BULLET_STYLE = make_style("BulletStyle",
fontSize=10, textColor=BLACK, fontName="Helvetica",
spaceAfter=2, leading=13, leftIndent=20, bulletIndent=10)
FOOTER_STYLE = make_style("Footer",
fontSize=8, textColor=colors.grey, alignment=TA_CENTER)
MEMORY_Q = make_style("MemQ",
fontSize=9, textColor=DARK_BLUE, fontName="Helvetica-Bold",
leading=12)
MEMORY_A = make_style("MemA",
fontSize=9, textColor=BLACK, fontName="Helvetica", leading=12)
# ── Page template with header/footer ───────────────────────
def on_page(canvas, doc):
canvas.saveState()
# Header strip
canvas.setFillColor(DARK_BLUE)
canvas.rect(0, H - 30*mm, W, 30*mm, fill=1, stroke=0)
canvas.setFillColor(WHITE)
canvas.setFont("Helvetica-Bold", 9)
canvas.drawString(20*mm, H - 10*mm, "ESIC Medical College | Community Medicine Internal")
canvas.setFont("Helvetica", 8)
canvas.drawRightString(W - 20*mm, H - 10*mm, "Park's Textbook PSM")
# Footer
canvas.setFillColor(DARK_BLUE)
canvas.rect(0, 0, W, 12*mm, fill=1, stroke=0)
canvas.setFillColor(WHITE)
canvas.setFont("Helvetica", 8)
canvas.drawCentredString(W/2, 4*mm, f"Page {doc.page} | MBBS Phase II (2024 Batch) | Exam: 14th July 2026")
canvas.restoreState()
def on_first_page(canvas, doc):
canvas.saveState()
# Full-page gradient-like background
canvas.setFillColor(DARK_BLUE)
canvas.rect(0, 0, W, H, fill=1, stroke=0)
# Accent band
canvas.setFillColor(ACCENT)
canvas.rect(0, H*0.45, W, 6*mm, fill=1, stroke=0)
# Page number footer
canvas.setFillColor(HexColor("#0f2944"))
canvas.rect(0, 0, W, 12*mm, fill=1, stroke=0)
canvas.setFillColor(WHITE)
canvas.setFont("Helvetica", 8)
canvas.drawCentredString(W/2, 4*mm, f"Page {doc.page} | MBBS Phase II (2024 Batch) | Exam: 14th July 2026")
canvas.restoreState()
frame_normal = Frame(20*mm, 15*mm, W - 40*mm, H - 50*mm, id="normal")
frame_cover = Frame(20*mm, 15*mm, W - 40*mm, H - 30*mm, id="cover")
doc = BaseDocTemplate(
OUTPUT, pagesize=A4,
leftMargin=20*mm, rightMargin=20*mm,
topMargin=35*mm, bottomMargin=20*mm,
)
doc.addPageTemplates([
PageTemplate(id="cover", frames=[frame_cover], onPage=on_first_page),
PageTemplate(id="normal", frames=[frame_normal], onPage=on_page),
])
# ── Helper functions ────────────────────────────────────────
def topic_box(title, color=MID_BLUE):
tbl = Table([[Paragraph(title, TOPIC_HEADER)]], colWidths=[W - 40*mm])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), color),
("ROUNDEDCORNERS", [6]),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 12),
]))
return tbl
def q_box(num, text):
label = f"Q{num}."
content = f"<b>{label}</b> {text}"
tbl = Table([[Paragraph(content, Q_STYLE)]], colWidths=[W - 40*mm])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), LIGHT_BLUE),
("LEFTPADDING", (0,0), (-1,-1), 10),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LINEAFTER", (0,0), (0,-1), 3, ACCENT),
]))
return tbl
def ans_label():
return Paragraph("<b><font color='#e67e22'>Ans:</font></b>", A_STYLE)
def bullet(text):
return Paragraph(f"• {text}", BULLET_STYLE)
def sub_bullet(text):
return Paragraph(f" ◦ {text}", BULLET_STYLE)
def note_box(text, bg=YELLOW_BG):
tbl = Table([[Paragraph(f"⚡ {text}", make_style("NoteIn",
fontSize=9, fontName="Helvetica-BoldOblique",
textColor=DARK_BLUE, leading=13))]],
colWidths=[W - 40*mm])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("LEFTPADDING", (0,0), (-1,-1), 10),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("BOX", (0,0), (-1,-1), 0.5, ACCENT),
]))
return tbl
def simple_table(headers, rows, col_widths=None):
data = [headers] + rows
if col_widths is None:
col_widths = [(W - 40*mm) / len(headers)] * len(headers)
hdr_style = make_style("TH", fontSize=9, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER, leading=12)
cell_style = make_style("TD", fontSize=9, fontName="Helvetica",
textColor=BLACK, leading=12)
formatted = []
for i, row in enumerate(data):
formatted.append([Paragraph(str(c), hdr_style if i == 0 else cell_style) for c in row])
tbl = Table(formatted, colWidths=col_widths, repeatRows=1)
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), DARK_BLUE),
("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, GREY_BG]),
("GRID", (0,0), (-1,-1), 0.4, colors.grey),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 6),
("ALIGN", (0,0), (-1,-1), "CENTER"),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
return tbl
sp = lambda n=6: Spacer(1, n)
hr = lambda: HRFlowable(width="100%", thickness=0.5, color=colors.lightgrey)
# ═══════════════════════════════════════════════════════════
# STORY
# ═══════════════════════════════════════════════════════════
story = []
# ── COVER PAGE ─────────────────────────────────────────────
cover_title = make_style("CoverTitle",
fontSize=28, textColor=WHITE, alignment=TA_CENTER,
fontName="Helvetica-Bold", leading=34)
cover_sub = make_style("CoverSub",
fontSize=13, textColor=LIGHT_BLUE, alignment=TA_CENTER,
fontName="Helvetica", leading=18)
cover_small = make_style("CoverSmall",
fontSize=10, textColor=HexColor("#94b8d8"), alignment=TA_CENTER,
fontName="Helvetica", leading=14)
cover_accent = make_style("CoverAccent",
fontSize=11, textColor=ACCENT, alignment=TA_CENTER,
fontName="Helvetica-Bold", leading=16)
story.append(Spacer(1, 40*mm))
story.append(Paragraph("COMMUNITY MEDICINE", cover_title))
story.append(Spacer(1, 4*mm))
story.append(Paragraph("Internal Assessment Study Guide", cover_sub))
story.append(Spacer(1, 8*mm))
story.append(Paragraph("Based on Park's Textbook of Preventive & Social Medicine", cover_small))
story.append(Spacer(1, 16*mm))
# Topic list on cover
topics = [
"1. Principles of Epidemiology & Epidemiological Methods",
"2. Immunization & Disease Prevention",
"3. Screening Tests",
"4. Environmental Health",
"5. International Health",
"6. Essential Medicines & Counterfeit Medicines",
]
topic_cover_style = make_style("TopCov", fontSize=10, textColor=LIGHT_BLUE,
fontName="Helvetica", leading=18, alignment=TA_LEFT)
for t in topics:
story.append(Paragraph(t, topic_cover_style))
story.append(Spacer(1, 20*mm))
story.append(Paragraph("ESIC Medical College & PGIMSR, Rajajinagar, Bengaluru", cover_small))
story.append(Paragraph("MBBS Phase II (2024 Batch) | Exam: 14th July 2026", cover_accent))
story.append(Spacer(1, 6*mm))
story.append(Paragraph("24 Important Questions with Detailed Answers", cover_small))
story.append(PageBreak())
# Switch to normal template from page 2
story[0].__class__ # just a check
# ── TABLE OF CONTENTS ──────────────────────────────────────
toc_title = make_style("TOCTitle", fontSize=16, textColor=DARK_BLUE,
fontName="Helvetica-Bold", alignment=TA_CENTER, spaceAfter=8)
toc_item = make_style("TOCItem", fontSize=10, textColor=BLACK,
fontName="Helvetica", leading=18)
story.append(Paragraph("TABLE OF CONTENTS", toc_title))
story.append(hr())
story.append(sp(6))
toc_data = [
("Topic 1", "Principles of Epidemiology & Epidemiological Methods", "Q1–Q8"),
("Topic 2", "Immunization & Disease Prevention", "Q9–Q13"),
("Topic 3", "Screening Tests", "Q14–Q17"),
("Topic 4", "Environmental Health", "Q18–Q20"),
("Topic 5", "International Health", "Q21–Q22"),
("Topic 6", "Essential Medicines & Counterfeit Medicines", "Q23–Q24"),
("", "Quick Revision Memory Table", "—"),
]
for topic, title, qs in toc_data:
row_text = f"<b>{topic}</b> {title}" if topic else f"<b>{title}</b>"
row = Table([[Paragraph(row_text, toc_item), Paragraph(qs, make_style("TOCQ",
fontSize=10, fontName="Helvetica-Bold", textColor=ACCENT, alignment=TA_CENTER, leading=18))]],
colWidths=[W - 70*mm, 30*mm])
row.setStyle(TableStyle([
("LINEBELOW", (0,0), (-1,-1), 0.3, colors.lightgrey),
("LEFTPADDING", (0,0), (0,0), 0),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
]))
story.append(row)
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════
# TOPIC 1: EPIDEMIOLOGY
# ═══════════════════════════════════════════════════════════
story.append(topic_box("TOPIC 1: Principles of Epidemiology & Epidemiological Methods"))
story.append(sp())
# Q1
story.append(q_box(1, "Define Epidemiology. [Long Essay / Short Note]"))
story.append(ans_label())
story.append(Paragraph("Epidemiology is defined as (Last, 2001):", A_STYLE))
story.append(note_box('"The study of the occurrence and distribution of health-related events, states, and processes in specified populations, including the study of the determinants influencing such processes, and the application of this knowledge to control relevant health problems."'))
story.append(bullet("Word origin: epi = among; demos = people; logos = study"))
story.append(bullet("Study includes: surveillance, observation, screening, hypothesis testing, analytic research, experiments, prediction"))
story.append(bullet("Distribution: analysis by TIME, PLACE, and PERSON"))
story.append(bullet("Determinants: geophysical, biological, behavioural, social, cultural, economic, and political factors"))
story.append(bullet("Epidemiology is the basic science of Preventive and Social Medicine"))
story.append(sp())
# Q2
story.append(q_box(2, "Enumerate the Uses of Epidemiology (Morris's 7 uses). [Short Answer]"))
story.append(ans_label())
story.append(Paragraph("Morris (1957) identified 7 uses of epidemiology:", A_STYLE))
for item in [
"To study historically the rise and fall of disease in the population",
"Community diagnosis - identifying & quantifying health problems (mortality, morbidity rates)",
"Working of health services - evaluating their effectiveness",
"Estimating individual risks - probability of a person acquiring disease",
"Identification of syndromes - defining clinical pictures",
"Completing the clinical picture of a disease",
"Search for causes - identifying risk factors and aetiological agents",
]:
story.append(bullet(item))
story.append(sp())
# Q3
story.append(q_box(3, "What are the three components of Epidemiology? [Short Note]"))
story.append(ans_label())
story.append(simple_table(
["Component", "Description"],
[
["Disease Frequency", "Measurement of disease/disability/death as rates and ratios (incidence, prevalence, death rate)"],
["Distribution", "Analysis by time, place, and person - who gets disease, where, when"],
["Determinants", "Identifying underlying causes and risk factors - the 'real substance' of epidemiology"],
],
col_widths=[50*mm, W - 40*mm - 50*mm]
))
story.append(sp())
# Q4
story.append(q_box(4, "What is Descriptive Epidemiology? What variables does it study? [Short Note]"))
story.append(ans_label())
story.append(Paragraph("Descriptive epidemiology studies the <b>distribution of disease</b> in populations. Its goal is <b>formulation of aetiological hypotheses</b>.", A_STYLE))
story.append(simple_table(
["Variable", "Sub-categories"],
[
["Person", "Age, sex, race, religion, occupation, marital status, socioeconomic status"],
["Place", "Geographic variation: international, national, urban vs rural, rural vs urban"],
["Time", "Secular trends, cyclic fluctuations, point epidemic, seasonal variation"],
],
col_widths=[30*mm, W - 40*mm - 30*mm]
))
story.append(sp())
# Q5
story.append(q_box(5, "What is Analytic Epidemiology? Name the study designs. [Short Answer]"))
story.append(ans_label())
story.append(Paragraph("Analytic epidemiology <b>tests aetiological hypotheses</b>.", A_STYLE))
story.append(simple_table(
["Study Type", "Design", "Key Feature"],
[
["Observational", "Cross-sectional", "Prevalence; snapshot at one point in time"],
["Observational", "Case-control", "Retrospective; looks back from disease to exposure"],
["Observational", "Cohort", "Prospective; follows exposed vs unexposed forward in time"],
["Experimental", "RCT", "Gold standard; random allocation to treatment"],
["Experimental", "Field / Community trial", "Tests preventive interventions in population"],
],
col_widths=[35*mm, 40*mm, W - 40*mm - 75*mm]
))
story.append(sp())
# Q6
story.append(q_box(6, "What are the basic measurements in Epidemiology? [Short Note]"))
story.append(ans_label())
for item in [
"Measurement of mortality (CDR, cause-specific death rate, IMR, MMR)",
"Measurement of morbidity (incidence, prevalence, attack rate)",
"Measurement of disability",
"Measurement of natality (birth rate, fertility rate)",
"Distribution of characteristics/attributes of disease",
"Medical needs and health care utilization",
"Environmental and causal factors",
"Demographic variables",
]:
story.append(bullet(item))
story.append(note_box("Basic requirements of measurements: validity, reliability, accuracy, sensitivity, and specificity"))
story.append(sp())
# Q7
story.append(q_box(7, "Distinguish between Incidence and Prevalence. [Short Answer - VERY IMPORTANT]"))
story.append(ans_label())
story.append(simple_table(
["Feature", "Incidence", "Prevalence"],
[
["Definition", "Number of NEW cases in a period", "ALL cases (old + new) at a given time"],
["Time", "Rate (over a period)", "Point or period"],
["Numerator", "New cases only", "All cases"],
["Formula", "New cases / Population at risk × 1000", "All cases / Total population × 1000"],
["Useful for", "Acute diseases, aetiology", "Chronic diseases, service planning"],
],
col_widths=[35*mm, 60*mm, 60*mm]
))
story.append(note_box("Relationship: Prevalence = Incidence × Duration of disease"))
story.append(sp())
# Q8
story.append(q_box(8, "What are Hill's Criteria for establishing causation? [Long Essay]"))
story.append(ans_label())
story.append(Paragraph("Bradford Hill (1965) proposed 9 criteria:", A_STYLE))
story.append(simple_table(
["#", "Criterion", "Key Point"],
[
["1", "Strength of association", "High relative risk (e.g., smoking & lung cancer: RR = 9-10x)"],
["2", "Consistency", "Repeated by different workers, at different times/places"],
["3", "Specificity", "One cause → one specific effect"],
["4", "Temporality", "Cause must PRECEDE effect (MOST IMPORTANT criterion)"],
["5", "Biological gradient", "More exposure = more disease (dose-response relationship)"],
["6", "Plausibility", "Biologically plausible mechanism exists"],
["7", "Coherence", "Consistent with known facts (e.g., tobacco sales vs lung cancer trend)"],
["8", "Experiment", "Removal of cause reduces disease occurrence"],
["9", "Analogy", "Similar factors produce similar effects"],
],
col_widths=[8*mm, 45*mm, W - 40*mm - 53*mm]
))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════
# TOPIC 2: IMMUNIZATION
# ═══════════════════════════════════════════════════════════
story.append(topic_box("TOPIC 2: Immunization & Disease Prevention", MID_BLUE))
story.append(sp())
# Q9
story.append(q_box(9, "What is Universal Immunization Programme (UIP)? Give the National Immunization Schedule. [Long Essay]"))
story.append(ans_label())
story.append(Paragraph("India's UIP was launched in <b>1985</b>. It provides free vaccines to children and pregnant women.", A_STYLE))
story.append(sp(4))
story.append(simple_table(
["Vaccine", "When Given", "Route"],
[
["BCG", "At birth", "Intradermal"],
["OPV 0 + Hepatitis B (birth)","Within 24 hours of birth", "Oral / IM"],
["OPV 1,2,3 + IPV", "6, 10, 14 weeks", "Oral + IM"],
["Pentavalent (DPT+HepB+Hib)","6, 10, 14 weeks", "IM"],
["Rotavirus", "6, 10, 14 weeks", "Oral"],
["PCV", "6 wks, 14 wks, 9 months", "IM"],
["Measles-Rubella (MR)", "9-12 months, 16-24 months", "SC"],
["DPT Booster", "16-24 months, 5-6 years", "IM"],
["TT", "10 years, 16 years", "IM"],
["TT for Pregnant Women", "2 doses during pregnancy", "IM"],
],
col_widths=[65*mm, 55*mm, W - 40*mm - 120*mm]
))
story.append(sp())
# Q10
story.append(q_box(10, "What is AEFI? Classify it. [Short Note]"))
story.append(ans_label())
story.append(Paragraph("<b>AEFI = Adverse Event Following Immunization</b>", A_STYLE))
story.append(Paragraph("Any untoward medical occurrence which follows immunization and which does not necessarily have a causal relationship with the vaccine. (CIOMS/WHO 2012 Classification):", A_STYLE))
for item in [
"Vaccine product-related reaction - caused by inherent properties of vaccine (e.g., fever after DPT)",
"Vaccine quality defect-related reaction - due to manufacturing quality defects",
"Immunization error-related reaction - improper preparation, handling, or administration (e.g., wrong dose, reuse of needle)",
"Immunization anxiety-related reaction - from anxiety (e.g., fainting)",
"Coincidental event - occurs after immunization but NOT caused by it",
]:
story.append(bullet(item))
story.append(sp())
# Q11
story.append(q_box(11, "What is Cold Chain? Why is it important? [Short Note]"))
story.append(ans_label())
story.append(Paragraph("Cold chain is the <b>system of storing and transporting vaccines at recommended temperatures</b> from manufacture to point of use.", A_STYLE))
story.append(bullet("Most vaccines: +2°C to +8°C"))
story.append(bullet("OPV: -20°C (short-term: +2 to +8°C)"))
story.append(bullet("Equipment: Walk-in cold rooms, ILR (Ice-Lined Refrigerators), deep freezers, vaccine carriers, ice packs"))
story.append(sp(4))
story.append(note_box("Shake Test: Used for freeze-sensitive vaccines (DPT, TT, Hep B). If sedimentation in test vial is SLOWER than frozen control → vaccine is safe. If SIMILAR or FASTER → vaccine is DAMAGED, do NOT use."))
story.append(sp())
# Q12
story.append(q_box(12, "What are Levels of Prevention? Give examples. [Short Answer]"))
story.append(ans_label())
story.append(Paragraph("Leavell and Clark's <b>5 Levels of Prevention</b>:", A_STYLE))
story.append(simple_table(
["Level", "Stage", "Example"],
[
["Health Promotion", "Pre-pathogenesis", "Good nutrition, health education, adequate housing"],
["Specific Protection", "Pre-pathogenesis", "Immunization, use of helmets, fluoridation of water"],
["Early Diagnosis & Treatment", "Early pathogenesis", "Screening tests, case detection programmes"],
["Disability Limitation", "Late pathogenesis", "Treatment to prevent complications, limit disability"],
["Rehabilitation", "Outcome", "Physiotherapy, prosthetics, vocational training"],
],
col_widths=[45*mm, 38*mm, W - 40*mm - 83*mm]
))
story.append(note_box("Primary Prevention = Levels 1+2 | Secondary = Level 3 | Tertiary = Levels 4+5"))
story.append(sp())
# Q13
story.append(q_box(13, "Differentiate Active and Passive Immunity. [Short Note]"))
story.append(ans_label())
story.append(simple_table(
["Feature", "Active Immunity", "Passive Immunity"],
[
["Source", "Body produces own antibodies", "Antibodies received from external source"],
["Onset", "Slow (1-2 weeks)", "Immediate"],
["Duration", "Long-lasting (years/life)", "Short (3-4 weeks)"],
["Memory", "Yes", "No"],
["Example", "Vaccines (BCG, OPV, MMR)", "Immunoglobulin, maternal antibodies via placenta"],
],
col_widths=[30*mm, 60*mm, 65*mm]
))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════
# TOPIC 3: SCREENING TESTS
# ═══════════════════════════════════════════════════════════
story.append(topic_box("TOPIC 3: Screening Tests", HexColor("#1a7a4a")))
story.append(sp())
# Q14
story.append(q_box(14, "Define Screening. What are the types of screening? [Short Note]"))
story.append(ans_label())
story.append(note_box('"Screening is testing for infection or disease in populations or in individuals who are NOT seeking health care."'))
story.append(sp(4))
story.append(simple_table(
["Type", "Definition", "Example"],
[
["Mass Screening", "Entire population or sub-group screened, irrespective of individual risk", "TB X-ray survey of whole community"],
["High-risk / Selective", "Applied selectively to high-risk groups defined by epidemiological research", "Cancer cervix screening in lower socioeconomic groups; diabetes screening in relatives of diabetics"],
["Multiphasic Screening", "2 or more screening tests applied simultaneously to large numbers", "Health questionnaire + blood tests + lung function + audiometry in one visit"],
],
col_widths=[38*mm, 60*mm, W - 40*mm - 98*mm]
))
story.append(sp())
# Q15
story.append(q_box(15, "What are the Criteria for a Good Screening Test? [Long Essay - MOST IMPORTANT]"))
story.append(ans_label())
story.append(Paragraph("<b>A. Criteria for the DISEASE:</b>", A_STYLE))
for i, item in enumerate([
"Must be an important health problem (high prevalence)",
"Should have a recognizable latent or early asymptomatic stage",
"Natural history must be adequately understood",
"There is a test that detects disease prior to onset of symptoms",
"Facilities available for confirmation of diagnosis",
"There is an effective treatment available",
"There is an agreed policy on whom to treat",
"Early detection and treatment reduces morbidity and mortality",
"Expected benefits exceed risks and costs",
], 1):
story.append(bullet(f"{i}. {item}"))
story.append(sp(4))
story.append(Paragraph("<b>B. Criteria for the SCREENING TEST:</b>", A_STYLE))
story.append(simple_table(
["Criterion", "Description"],
[
["Acceptability", "Must be acceptable to the target population (not painful, embarrassing, or discomforting)"],
["Repeatability", "Gives consistent results when repeated. Depends on: observer variation, subject/biological variation, technical method errors"],
["Validity/Accuracy","Ability to separate those with disease from those without. Has two components: Sensitivity and Specificity"],
["Yield", "Amount of previously unrecognized disease brought to treatment"],
["Simplicity", "Simple, safe, rapid, easy to administer, low cost"],
],
col_widths=[38*mm, W - 40*mm - 38*mm]
))
story.append(sp())
# Q16
story.append(q_box(16, "Define Sensitivity and Specificity. What is Predictive Value? [Short Answer - VERY IMPORTANT]"))
story.append(ans_label())
story.append(Paragraph("Using 2×2 table (a=TP, b=FP, c=FN, d=TN):", A_STYLE))
story.append(simple_table(
["Measure", "Formula", "Meaning"],
[
["Sensitivity", "a / (a+c) × 100", "% of true positives correctly identified. High sensitivity = few false negatives"],
["Specificity", "d / (b+d) × 100", "% of true negatives correctly identified. High specificity = few false positives"],
["PPV", "a / (a+b) × 100", "Probability that a person with positive test truly has the disease"],
["NPV", "d / (c+d) × 100", "Probability that a person with negative test truly does NOT have disease"],
],
col_widths=[28*mm, 38*mm, W - 40*mm - 66*mm]
))
story.append(note_box("SNOUT: High SeNsitivity rules OUT disease | SPIN: High SPecificity rules IN disease | PPV increases with higher disease prevalence"))
story.append(sp())
# Q17
story.append(q_box(17, "What is the difference between Screening, Case-finding, and Diagnostic Tests? [Short Note]"))
story.append(ans_label())
story.append(simple_table(
["Feature", "Screening", "Case-finding", "Diagnostic Test"],
[
["Population", "Asymptomatic, not seeking care", "Patients seeking care for OTHER conditions", "Patients with signs & symptoms"],
["Initiated by", "Public health personnel", "Clinician (opportunistic)", "Clinician"],
["Example", "Neonatal screening; AIDS test in blood donors", "VDRL in pregnant women at ANC", "VDRL in patient with secondary syphilis lesions"],
],
col_widths=[28*mm, 42*mm, 42*mm, 42*mm]
))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════
# TOPIC 4: ENVIRONMENTAL HEALTH
# ═══════════════════════════════════════════════════════════
story.append(topic_box("TOPIC 4: Environmental Health", HexColor("#7c3aed")))
story.append(sp())
# Q18
story.append(q_box(18, "What are the sources and methods of water purification? [Long Essay]"))
story.append(ans_label())
story.append(Paragraph("<b>Sources of Water:</b> Surface water (rivers, lakes, ponds), Groundwater (wells, springs, tube wells), Rainwater", A_STYLE))
story.append(sp(4))
story.append(Paragraph("<b>Methods of Purification:</b>", A_STYLE))
story.append(bullet("Sedimentation - particles settle by gravity; coagulants (alum/aluminium sulphate) enhance settling"))
story.append(bullet("Filtration:"))
story.append(sub_bullet("Slow sand filter - removes 98-99% bacteria via biological action (Schmutzdecke layer); flow rate 0.1-0.4 m/hr"))
story.append(sub_bullet("Rapid sand filter - flow rate 5-15 m/hr; requires pre-coagulation; less effective biologically"))
story.append(bullet("Disinfection (most important):"))
story.append(sub_bullet("Chlorination - most commonly used; kills bacteria and viruses"))
story.append(sub_bullet("Residual chlorine required: 0.5 mg/L after 1 hour contact"))
story.append(sub_bullet("Boiling - most reliable household method; kills all pathogens"))
story.append(sub_bullet("UV radiation, Ozone"))
story.append(sp(4))
story.append(note_box("WHO Water Quality Standards: pH 6.5-8.5 | Turbidity <1 NTU | Total coliforms: 0/100 mL | E. coli: 0/100 mL (piped supply)"))
story.append(sp())
# Q19
story.append(q_box(19, "What is Air Pollution? What are the health effects? [Short Note]"))
story.append(ans_label())
story.append(Paragraph("Air pollution is the presence of contaminants in the air that interfere with human health, welfare, or produce other harmful environmental effects.", A_STYLE))
story.append(sp(4))
story.append(simple_table(
["Pollutant", "Source", "Health Effects"],
[
["SPM / PM2.5", "Combustion, vehicles, industries", "Respiratory diseases, lung cancer"],
["SO2", "Burning coal, vehicles", "Acid rain, bronchospasm, COPD"],
["CO", "Incomplete combustion", "Forms carboxyhaemoglobin → tissue hypoxia, death"],
["NO2", "Vehicle exhaust", "Respiratory irritant, photochemical smog"],
["Lead", "Petrol combustion (old), industries", "Neurotoxicity (especially children), anaemia"],
["Ozone", "Photochemical reaction", "Eye and lung irritant"],
],
col_widths=[28*mm, 50*mm, W - 40*mm - 78*mm]
))
story.append(sp())
# Q20
story.append(q_box(20, "What are the health effects of Noise Pollution? What is the permissible limit? [Short Note]"))
story.append(ans_label())
story.append(simple_table(
["Area", "Permissible Limit (WHO)"],
[
["Residential areas", "45 dB (day), 35 dB (night)"],
["Industrial areas", "75 dB"],
["Hearing damage threshold", "85 dB for 8 hours continuous exposure"],
],
col_widths=[60*mm, W - 40*mm - 60*mm]
))
story.append(sp(4))
story.append(Paragraph("<b>Health Effects:</b>", A_STYLE))
story.append(bullet("Auditory: Noise-Induced Hearing Loss (NIHL), tinnitus, Temporary Threshold Shift (TTS), Permanent Threshold Shift (PTS)"))
story.append(bullet("Non-auditory: Hypertension, cardiovascular effects, sleep disturbance, annoyance, stress, reduced work efficiency"))
story.append(bullet("Control: Engineering controls (source/path/receiver), ear muffs/plugs, legislation"))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════
# TOPIC 5: INTERNATIONAL HEALTH
# ═══════════════════════════════════════════════════════════
story.append(topic_box("TOPIC 5: International Health", HexColor("#b45309")))
story.append(sp())
# Q21
story.append(q_box(21, "What is WHO? What are its functions? [Short Note]"))
story.append(ans_label())
story.append(bullet("Established: 7 April 1948 (World Health Day)"))
story.append(bullet("Headquarters: Geneva, Switzerland"))
story.append(bullet("Part of United Nations system"))
story.append(sp(4))
story.append(note_box('WHO Definition of Health (1948): "Health is a state of complete physical, mental and social well-being and not merely the absence of disease or infirmity."'))
story.append(sp(4))
story.append(Paragraph("<b>Functions of WHO:</b>", A_STYLE))
for item in [
"Acting as directing and coordinating authority on international health",
"Assisting governments to strengthen health services",
"Providing technical assistance and emergency aid",
"Stimulating work to eradicate epidemic, endemic, and other diseases",
"Promoting maternal and child health and welfare",
"Fostering mental health",
"Promoting and conducting research",
"Developing international standards for biological, pharmaceutical, and food products",
"Revising International Classification of Diseases (ICD) - currently ICD-11",
]:
story.append(bullet(item))
story.append(sp())
# Q22
story.append(q_box(22, "What are the Sustainable Development Goals (SDGs) related to health? [Short Note]"))
story.append(ans_label())
story.append(Paragraph("SDGs replaced MDGs in 2015; 17 goals to be achieved by <b>2030</b>.", A_STYLE))
story.append(note_box("Health-specific SDG: Goal 3 - 'Ensure healthy lives and promote well-being for all at all ages'"))
story.append(sp(4))
story.append(Paragraph("<b>Key targets under SDG Goal 3:</b>", A_STYLE))
for item in [
"End preventable deaths of newborns and children under 5",
"End AIDS, TB, malaria, and neglected tropical diseases (NTDs)",
"Reduce maternal mortality to <70/100,000 live births",
"Universal Health Coverage (UHC)",
"Reduce premature mortality from NCDs by one-third",
"Mental health and well-being",
"Substance abuse prevention",
"Achieve 90% vaccine coverage",
]:
story.append(bullet(item))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════
# TOPIC 6: ESSENTIAL MEDICINES
# ═══════════════════════════════════════════════════════════
story.append(topic_box("TOPIC 6: Essential Medicines & Counterfeit Medicines", HexColor("#be123c")))
story.append(sp())
# Q23
story.append(q_box(23, "What are Essential Medicines? What are the criteria for selection? [Long Essay - IMPORTANT]"))
story.append(ans_label())
story.append(Paragraph("The WHO concept of essential medicines was introduced in <b>1977</b>.", A_STYLE))
story.append(note_box('"Essential medicines are those that satisfy the priority health care needs of the population. They are selected with due regard to disease prevalence, evidence on efficacy and safety, and comparative cost-effectiveness."'))
story.append(sp(4))
story.append(Paragraph("They should be: available at all times, in adequate amounts, in appropriate dosage forms, at a price the community can afford.", A_STYLE))
story.append(sp(4))
story.append(Paragraph("<b>Criteria for Selection:</b>", A_STYLE))
story.append(simple_table(
["Criterion", "Description"],
[
["Relevance", "Relevant to the pattern of prevalent diseases in the country"],
["Evidence of efficacy & safety", "Established through clinical trials"],
["Adequate quality", "Bioavailability and stability guaranteed"],
["Cost-effectiveness", "Should be cost-effective compared to alternatives"],
["Accessibility", "Not patent protected (where possible) so generic forms are available"],
["Preference", "Single drugs preferred over FDCs unless combination is proven advantageous"],
],
col_widths=[50*mm, W - 40*mm - 50*mm]
))
story.append(note_box("India's National Essential Medicines List (NLEM): Updated periodically; drugs on NLEM are covered under government programs and subject to price control"))
story.append(sp())
# Q24
story.append(q_box(24, "What are Counterfeit Medicines? What are their health hazards? [Short Note]"))
story.append(ans_label())
story.append(note_box('WHO Definition: "A medicine that is deliberately and fraudulently mislabelled with respect to identity and/or source; applies to branded and generic products."'))
story.append(sp(4))
story.append(Paragraph("<b>Types of counterfeiting:</b>", A_STYLE))
for item in [
"No active ingredient",
"Wrong or insufficient active ingredient",
"Wrong packaging/labelling",
"Contaminated product",
]:
story.append(bullet(item))
story.append(sp(4))
story.append(Paragraph("<b>Health Hazards:</b>", A_STYLE))
for item in [
"Treatment failure (no/insufficient active drug) - e.g., counterfeit antimalarials, antibiotics",
"Drug resistance (sub-therapeutic doses promoting resistance)",
"Toxic effects from wrong ingredients or contaminants",
"Death (documented cases with counterfeit injections, IV fluids)",
]:
story.append(bullet(item))
story.append(sp(4))
story.append(Paragraph("<b>Magnitude:</b> WHO estimates ~10% of medicines globally are counterfeit; up to 30% in developing countries", A_STYLE))
story.append(sp(4))
story.append(Paragraph("<b>Prevention:</b>", A_STYLE))
story.append(bullet("IMPACT (International Medical Products Anti-Counterfeiting Taskforce) by WHO"))
story.append(bullet("Track and trace systems, holograms, QR codes on packaging"))
story.append(bullet("Pharmacovigilance systems"))
story.append(bullet("Public awareness campaigns"))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════
# QUICK REVISION TABLE
# ═══════════════════════════════════════════════════════════
story.append(topic_box("QUICK REVISION MEMORY TABLE", DARK_BLUE))
story.append(sp())
story.append(simple_table(
["Topic", "Key Fact to Remember"],
[
["Epidemiology definition", "Last (2001) - occurrence, distribution, determinants, application to control"],
["Morris's uses", "7 uses of epidemiology"],
["Hill's criteria", "9 criteria for causation; Temporality is most important"],
["Incidence vs Prevalence", "Prevalence = Incidence × Duration of disease"],
["UIP launched", "1985; provides free vaccines to children and pregnant women"],
["Hepatitis B birth dose", "Within 24 hours of birth"],
["Pentavalent vaccine", "DPT + Hepatitis B + Hib; given at 6, 10, 14 weeks"],
["Cold chain temperature", "+2°C to +8°C for most; -20°C for OPV"],
["AEFI classification", "5 types (CIOMS/WHO 2012)"],
["Levels of prevention", "5 levels (Leavell & Clark); Primary + Secondary + Tertiary"],
["Screening definition", "Testing in individuals NOT seeking health care"],
["Types of screening", "3 types: Mass, High-risk/Selective, Multiphasic"],
["Sensitivity formula", "TP / (TP + FN) × 100"],
["Specificity formula", "TN / (TN + FP) × 100"],
["SNOUT / SPIN", "High Sensitivity rules OUT; High Specificity rules IN"],
["Chlorine residual in water", "0.5 mg/L after 1 hour contact time"],
["Slow sand filter", "Removes 98-99% bacteria; biological action (Schmutzdecke)"],
["Noise damage threshold", "85 dB for 8 hours"],
["WHO established", "7 April 1948 (World Health Day); Geneva, Switzerland"],
["WHO health definition", "Complete physical, mental, social well-being + not merely absence of disease"],
["SDG Goal 3", "Ensure healthy lives and well-being for all; achieve by 2030"],
["Essential medicines concept","WHO 1977; NLEM in India"],
["Counterfeit medicines", "~10% globally; up to 30% in developing countries (WHO estimate)"],
["Essential medicines criteria","Relevance, Efficacy & Safety, Quality, Cost-effectiveness, Accessibility"],
],
col_widths=[65*mm, W - 40*mm - 65*mm]
))
story.append(sp(10))
story.append(HRFlowable(width="100%", thickness=1.5, color=ACCENT))
story.append(sp(6))
story.append(Paragraph(
"All content sourced from Park's Textbook of Preventive and Social Medicine. "
"Good luck for your internal examination on 14th July 2026!",
make_style("Final", fontSize=9, textColor=colors.grey, alignment=TA_CENTER,
fontName="Helvetica-Oblique", leading=14)
))
# ═══════════════════════════════════════════════════════════
# BUILD
# ═══════════════════════════════════════════════════════════
doc.build(story, onFirstPage=on_first_page, onLaterPages=on_page)
print("PDF generated:", OUTPUT)
cd /home/daytona/workspace/community-medicine-guide && python generate_pdf.py 2>…
~/community-medicine-guide/generate_pdf.py
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/community-medicine-guide/generate_pdf.py'
cd /home/daytona/workspace/community-medicine-guide && python generate_pdf.py 2>…
ls -lh /home/daytona/workspace/community-medicine-guide/Community_Medicine_Study…
Community Medicine Study Guide
PDF Document · PDF
Make a presentation (PPT) on the 6 topics
~/community-medicine-guide/generate_ppt.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Community Medicine - Internal Assessment";
pres.author = "ESIC Medical College";
// ── COLOR PALETTE ──────────────────────────────────────────
const C = {
darkNavy: "0f2744",
navy: "1a3a5c",
blue: "2563a8",
lightBlue: "dbeafe",
accent: "e67e22",
accentDk: "b45309",
white: "FFFFFF",
offWhite: "f8fafc",
lightGrey: "e2e8f0",
textDark: "1e293b",
textMid: "475569",
green: "1a7a4a",
greenBg: "d1fae5",
purple: "6d28d9",
purpleBg: "ede9fe",
teal: "0d6e6e",
red: "be123c",
redBg: "fee2e2",
amber: "b45309",
amberBg: "fef3c7",
};
// ── HELPER: slide background (dark) ───────────────────────
function darkBg(slide, color = C.darkNavy) {
slide.addShape(pres.shapes.RECTANGLE, {
x: 0, y: 0, w: 10, h: 5.625,
fill: { color },
line: { color, width: 0 },
});
}
// ── HELPER: accent bar at top ─────────────────────────────
function topBar(slide, color = C.accent, height = 0.08) {
slide.addShape(pres.shapes.RECTANGLE, {
x: 0, y: 0, w: 10, h: height,
fill: { color }, line: { color, width: 0 },
});
}
// ── HELPER: left sidebar ──────────────────────────────────
function leftBar(slide, color, width = 0.25) {
slide.addShape(pres.shapes.RECTANGLE, {
x: 0, y: 0, w: width, h: 5.625,
fill: { color }, line: { color, width: 0 },
});
}
// ── HELPER: section header on content slides ──────────────
function sectionHeader(slide, title, color = C.blue) {
// header band
slide.addShape(pres.shapes.RECTANGLE, {
x: 0, y: 0, w: 10, h: 0.75,
fill: { color: C.darkNavy }, line: { color: C.darkNavy, width: 0 },
});
topBar(slide, color, 0.07);
slide.addText(title, {
x: 0.3, y: 0.1, w: 9, h: 0.55,
fontSize: 16, bold: true, color: C.white, fontFace: "Calibri",
valign: "middle",
});
}
// ── HELPER: content box ───────────────────────────────────
function contentBox(slide, x, y, w, h, fillColor, borderColor, content, opts = {}) {
slide.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x, y, w, h,
fill: { color: fillColor },
line: { color: borderColor, width: 1 },
rectRadius: 0.08,
shadow: { type: "outer", color: "000000", blur: 4, offset: 2, angle: 135, opacity: 0.1 },
});
if (content) {
slide.addText(content, {
x: x + 0.12, y: y + 0.08, w: w - 0.24, h: h - 0.16,
fontSize: opts.fontSize || 10,
color: opts.color || C.textDark,
fontFace: opts.fontFace || "Calibri",
bold: opts.bold || false,
valign: opts.valign || "top",
wrap: true,
...opts,
});
}
}
// ── HELPER: numbered badge ────────────────────────────────
function badge(slide, x, y, num, color) {
slide.addShape(pres.shapes.ELLIPSE, {
x, y, w: 0.32, h: 0.32,
fill: { color },
line: { color, width: 0 },
});
slide.addText(String(num), {
x, y: y + 0.01, w: 0.32, h: 0.30,
fontSize: 11, bold: true, color: C.white,
fontFace: "Calibri", align: "center", valign: "middle",
});
}
// ── HELPER: table on slide ────────────────────────────────
function addTable(slide, rows, colW, x, y, opts = {}) {
const tableRows = rows.map((row, ri) =>
row.map((cell, ci) => ({
text: String(cell),
options: {
fill: { color: ri === 0 ? (opts.headerColor || C.navy) : (ri % 2 === 0 ? C.offWhite : C.white) },
color: ri === 0 ? C.white : C.textDark,
bold: ri === 0,
fontSize: opts.fontSize || 9,
fontFace: "Calibri",
align: ci === 0 ? "left" : "left",
valign: "middle",
border: [
{ pt: 0.5, color: C.lightGrey },
{ pt: 0.5, color: C.lightGrey },
{ pt: 0.5, color: C.lightGrey },
{ pt: 0.5, color: C.lightGrey },
],
margin: [4, 6, 4, 6],
},
}))
);
slide.addTable(tableRows, {
x, y,
colW,
rowH: opts.rowH || 0.3,
border: { pt: 0.5, color: C.lightGrey },
});
}
// ══════════════════════════════════════════════════════════
// SLIDE 1 – COVER
// ══════════════════════════════════════════════════════════
{
const sl = pres.addSlide();
darkBg(sl, C.darkNavy);
// Decorative top accent
sl.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 0.12, fill: { color: C.accent }, line: { color: C.accent, width: 0 } });
// Left blue column
sl.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 3.2, h: 5.625, fill: { color: C.navy }, line: { color: C.navy, width: 0 } });
sl.addShape(pres.shapes.RECTANGLE, { x: 3.2, y: 0, w: 0.06, h: 5.625, fill: { color: C.accent }, line: { color: C.accent, width: 0 } });
// Left side content
sl.addText("ESIC Medical College\n& PGIMSR", {
x: 0.2, y: 0.3, w: 2.8, h: 0.9,
fontSize: 10, color: C.lightBlue, fontFace: "Calibri",
bold: false, align: "left", valign: "top",
});
sl.addText("COMMUNITY\nMEDICINE", {
x: 0.2, y: 1.4, w: 2.8, h: 1.4,
fontSize: 26, bold: true, color: C.white, fontFace: "Calibri",
align: "left", valign: "top", charSpacing: 1,
});
sl.addShape(pres.shapes.RECTANGLE, { x: 0.2, y: 2.9, w: 1.8, h: 0.06, fill: { color: C.accent }, line: { color: C.accent, width: 0 } });
sl.addText("Internal Assessment\nStudy Presentation", {
x: 0.2, y: 3.1, w: 2.8, h: 0.7,
fontSize: 11, color: C.lightBlue, fontFace: "Calibri",
align: "left", valign: "top",
});
sl.addText("MBBS Phase II (2024 Batch)\nExam: 14th July 2026", {
x: 0.2, y: 4.0, w: 2.8, h: 0.7,
fontSize: 9, color: "94b8d8", fontFace: "Calibri",
align: "left", valign: "top",
});
// Right side – topic list
sl.addText("Based on Park's Textbook of PSM", {
x: 3.5, y: 0.4, w: 6.2, h: 0.4,
fontSize: 10, color: C.lightBlue, fontFace: "Calibri", italic: true,
});
sl.addText("6 TOPICS AT A GLANCE", {
x: 3.5, y: 0.95, w: 6.2, h: 0.4,
fontSize: 13, bold: true, color: C.accent, fontFace: "Calibri", charSpacing: 2,
});
const topics = [
["1", "Principles of Epidemiology & Epidemiological Methods", C.blue],
["2", "Immunization & Disease Prevention", C.green],
["3", "Screening Tests", "1a7a4a"],
["4", "Environmental Health", C.purple],
["5", "International Health", C.amber],
["6", "Essential Medicines & Counterfeit Medicines", C.red],
];
topics.forEach(([num, text, col], i) => {
const yy = 1.55 + i * 0.62;
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x: 3.5, y: yy, w: 6.1, h: 0.52,
fill: { color: "1e3a5c" }, line: { color: col, width: 1.2 },
rectRadius: 0.06,
});
sl.addShape(pres.shapes.RECTANGLE, { x: 3.5, y: yy, w: 0.38, h: 0.52, fill: { color: col }, line: { color: col, width: 0 } });
sl.addText(num, { x: 3.5, y: yy, w: 0.38, h: 0.52, fontSize: 14, bold: true, color: C.white, fontFace: "Calibri", align: "center", valign: "middle" });
sl.addText(text, { x: 3.95, y: yy + 0.06, w: 5.55, h: 0.40, fontSize: 10, color: C.white, fontFace: "Calibri", valign: "middle" });
});
}
// ══════════════════════════════════════════════════════════
// SLIDE 2 – TOPIC 1 TITLE CARD: EPIDEMIOLOGY
// ══════════════════════════════════════════════════════════
{
const sl = pres.addSlide();
darkBg(sl, C.navy);
sl.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 0.1, fill: { color: C.blue }, line: { color: C.blue, width: 0 } });
sl.addShape(pres.shapes.RECTANGLE, { x: 0, y: 5.525, w: 10, h: 0.1, fill: { color: C.blue }, line: { color: C.blue, width: 0 } });
sl.addText("TOPIC 1", { x: 0.5, y: 1.3, w: 9, h: 0.5, fontSize: 14, color: C.accent, bold: true, fontFace: "Calibri", align: "center", charSpacing: 6 });
sl.addText("Principles of Epidemiology\n& Epidemiological Methods", {
x: 0.5, y: 1.9, w: 9, h: 1.5,
fontSize: 30, bold: true, color: C.white, fontFace: "Calibri", align: "center", valign: "middle",
});
sl.addShape(pres.shapes.RECTANGLE, { x: 3.5, y: 3.55, w: 3, h: 0.07, fill: { color: C.accent }, line: { color: C.accent, width: 0 } });
sl.addText("Definition • Uses • Study Designs • Measurements\nDescriptive Variables • Hill's Criteria", {
x: 0.5, y: 3.7, w: 9, h: 0.6,
fontSize: 11, color: C.lightBlue, fontFace: "Calibri", align: "center", italic: true,
});
}
// ══════════════════════════════════════════════════════════
// SLIDE 3 – DEFINITION & USES OF EPIDEMIOLOGY
// ══════════════════════════════════════════════════════════
{
const sl = pres.addSlide();
sectionHeader(sl, "TOPIC 1 | Epidemiology – Definition & Uses", C.blue);
leftBar(sl, C.blue, 0.06);
// Definition box
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x: 0.25, y: 0.85, w: 9.5, h: 1.05,
fill: { color: C.lightBlue }, line: { color: C.blue, width: 1 }, rectRadius: 0.07,
});
sl.addShape(pres.shapes.RECTANGLE, { x: 0.25, y: 0.85, w: 0.2, h: 1.05, fill: { color: C.accent }, line: { color: C.accent, width: 0 } });
sl.addText([
{ text: "Definition (Last, 2001): ", options: { bold: true, color: C.navy } },
{ text: '"The study of the occurrence and distribution of health-related events, states, and processes in specified populations, including the study of the determinants influencing such processes, and the application of this knowledge to control relevant health problems."', options: { color: C.textDark, italic: true } },
], { x: 0.55, y: 0.9, w: 9.1, h: 0.95, fontSize: 10, fontFace: "Calibri", valign: "middle", wrap: true });
// Three components
sl.addText("Three Core Components", { x: 0.25, y: 2.0, w: 5, h: 0.3, fontSize: 11, bold: true, color: C.navy, fontFace: "Calibri" });
const comps = [
["Disease Frequency", "Incidence, prevalence, death rates"],
["Distribution", "Time, Place, Person analysis"],
["Determinants", "Risk factors & causes of disease"],
];
comps.forEach(([title, sub], i) => {
const xx = 0.25 + i * 3.15;
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: xx, y: 2.35, w: 3.0, h: 0.9, fill: { color: C.navy }, line: { color: C.blue, width: 1 }, rectRadius: 0.08 });
sl.addText(`${i + 1}`, { x: xx + 0.08, y: 2.38, w: 0.35, h: 0.35, fontSize: 14, bold: true, color: C.accent, fontFace: "Calibri", align: "center" });
sl.addText(title, { x: xx + 0.45, y: 2.38, w: 2.4, h: 0.35, fontSize: 10, bold: true, color: C.white, fontFace: "Calibri", valign: "middle" });
sl.addText(sub, { x: xx + 0.45, y: 2.73, w: 2.4, h: 0.35, fontSize: 9, color: C.lightBlue, fontFace: "Calibri", valign: "middle" });
});
// Morris's 7 uses
sl.addText("Morris's 7 Uses of Epidemiology", { x: 0.25, y: 3.35, w: 9.5, h: 0.3, fontSize: 11, bold: true, color: C.navy, fontFace: "Calibri" });
const uses = [
"Rise & fall of disease in population",
"Community diagnosis",
"Working of health services",
"Estimating individual risks",
"Identification of syndromes",
"Completing clinical picture",
"Search for causes",
];
uses.forEach((u, i) => {
const col = i < 4 ? 0 : 1;
const row = i < 4 ? i : i - 4;
const xx = 0.25 + col * 4.9;
const yy = 3.72 + row * 0.38;
badge(sl, xx, yy + 0.03, i + 1, C.blue);
sl.addText(u, { x: xx + 0.38, y: yy, w: col === 0 ? 4.4 : 4.4, h: 0.34, fontSize: 9.5, color: C.textDark, fontFace: "Calibri", valign: "middle" });
});
}
// ══════════════════════════════════════════════════════════
// SLIDE 4 – STUDY DESIGNS & MEASUREMENTS
// ══════════════════════════════════════════════════════════
{
const sl = pres.addSlide();
sectionHeader(sl, "TOPIC 1 | Study Designs & Key Measurements", C.blue);
leftBar(sl, C.blue, 0.06);
// Left col: study types
sl.addText("Epidemiological Study Designs", { x: 0.25, y: 0.85, w: 4.6, h: 0.3, fontSize: 11, bold: true, color: C.navy, fontFace: "Calibri" });
const designs = [
{ label: "Cross-sectional", type: "Observational", note: "Prevalence; snapshot at one point in time", color: "3b82f6" },
{ label: "Case-Control", type: "Observational", note: "Retrospective; looks back from disease to exposure", color: "3b82f6" },
{ label: "Cohort", type: "Observational", note: "Prospective; follows exposed vs unexposed forward", color: "3b82f6" },
{ label: "RCT", type: "Experimental", note: "Gold standard; random allocation to treatment", color: C.green },
{ label: "Field / Community Trial", type: "Experimental", note: "Tests preventive interventions in populations", color: C.green },
];
designs.forEach((d, i) => {
const yy = 1.22 + i * 0.73;
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 0.25, y: yy, w: 4.6, h: 0.63, fill: { color: "f8fafc" }, line: { color: d.color, width: 1.2 }, rectRadius: 0.06 });
sl.addShape(pres.shapes.RECTANGLE, { x: 0.25, y: yy, w: 0.18, h: 0.63, fill: { color: d.color }, line: { color: d.color, width: 0 } });
sl.addText(d.label, { x: 0.5, y: yy + 0.05, w: 4.2, h: 0.28, fontSize: 10, bold: true, color: C.textDark, fontFace: "Calibri" });
sl.addText(`(${d.type}) – ${d.note}`, { x: 0.5, y: yy + 0.33, w: 4.2, h: 0.26, fontSize: 8.5, color: C.textMid, fontFace: "Calibri" });
});
// Right col: incidence vs prevalence + measurements
sl.addText("Incidence vs Prevalence", { x: 5.1, y: 0.85, w: 4.6, h: 0.3, fontSize: 11, bold: true, color: C.navy, fontFace: "Calibri" });
addTable(sl,
[
["Feature", "Incidence", "Prevalence"],
["Cases", "New only", "Old + New"],
["Time", "Period rate","Point/period"],
["Formula", "New / Pop. at risk × 1000", "All / Total pop. × 1000"],
["Best for", "Acute disease, aetiology", "Chronic disease, planning"],
],
[1.5, 1.55, 1.55], 5.1, 1.22, { headerColor: C.navy, fontSize: 8.5, rowH: 0.32 }
);
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x: 5.1, y: 2.95, w: 4.6, h: 0.45,
fill: { color: "fef3c7" }, line: { color: C.accent, width: 1 }, rectRadius: 0.06,
});
sl.addText("⚡ Prevalence = Incidence × Duration of disease", {
x: 5.25, y: 2.98, w: 4.3, h: 0.39,
fontSize: 10, bold: true, color: C.accentDk, fontFace: "Calibri", valign: "middle",
});
sl.addText("Key Rates to Know", { x: 5.1, y: 3.5, w: 4.6, h: 0.3, fontSize: 11, bold: true, color: C.navy, fontFace: "Calibri" });
const rates = [
"Crude Death Rate = Deaths / Mid-year population × 1000",
"IMR = Infant deaths (<1 yr) / Live births × 1000",
"MMR = Maternal deaths / Live births × 100,000",
"Attack Rate = Cases / Population at risk × 100",
];
rates.forEach((r, i) => {
sl.addText(`• ${r}`, { x: 5.2, y: 3.85 + i * 0.35, w: 4.5, h: 0.3, fontSize: 9, color: C.textDark, fontFace: "Calibri" });
});
}
// ══════════════════════════════════════════════════════════
// SLIDE 5 – HILL'S CRITERIA
// ══════════════════════════════════════════════════════════
{
const sl = pres.addSlide();
sectionHeader(sl, "TOPIC 1 | Hill's Criteria for Causation", C.blue);
leftBar(sl, C.blue, 0.06);
sl.addText("Bradford Hill (1965) — 9 Criteria", { x: 0.25, y: 0.85, w: 9.5, h: 0.3, fontSize: 11, bold: true, color: C.navy, fontFace: "Calibri" });
const criteria = [
["1", "Strength", "High relative risk — e.g., smoking & lung cancer RR = 9-10x"],
["2", "Consistency", "Repeated by different workers, times, and places"],
["3", "Specificity", "One cause produces one specific effect"],
["4", "Temporality", "Cause must PRECEDE effect ← MOST IMPORTANT"],
["5", "Dose-Response", "More exposure = more disease (biological gradient)"],
["6", "Plausibility", "Biologically plausible mechanism exists"],
["7", "Coherence", "Consistent with known facts (e.g., tobacco sales vs lung cancer trend)"],
["8", "Experiment", "Removal of cause reduces disease"],
["9", "Analogy", "Similar factors produce similar effects"],
];
const colors9 = [C.blue, C.blue, C.blue, C.red, C.blue, C.blue, C.blue, C.blue, C.blue];
criteria.forEach(([num, name, desc], i) => {
const col = i < 5 ? 0 : 1;
const row = i < 5 ? i : i - 5;
const xx = 0.25 + col * 4.9;
const yy = 1.22 + row * 0.8;
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x: xx, y: yy, w: 4.6, h: 0.7,
fill: { color: num === "4" ? "fee2e2" : C.offWhite },
line: { color: colors9[i], width: num === "4" ? 1.8 : 1 }, rectRadius: 0.07,
});
sl.addShape(pres.shapes.ELLIPSE, { x: xx + 0.1, y: yy + 0.19, w: 0.32, h: 0.32, fill: { color: colors9[i] }, line: { color: colors9[i], width: 0 } });
sl.addText(num, { x: xx + 0.1, y: yy + 0.18, w: 0.32, h: 0.34, fontSize: 11, bold: true, color: C.white, fontFace: "Calibri", align: "center", valign: "middle" });
sl.addText(name, { x: xx + 0.5, y: yy + 0.06, w: 4.0, h: 0.28, fontSize: 10, bold: true, color: C.textDark, fontFace: "Calibri" });
sl.addText(desc, { x: xx + 0.5, y: yy + 0.34, w: 4.0, h: 0.3, fontSize: 8.5, color: num === "4" ? C.red : C.textMid, fontFace: "Calibri", bold: num === "4" });
});
}
// ══════════════════════════════════════════════════════════
// SLIDE 6 – TOPIC 2 TITLE CARD
// ══════════════════════════════════════════════════════════
{
const sl = pres.addSlide();
darkBg(sl, C.darkNavy);
sl.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 0.1, fill: { color: C.green }, line: { color: C.green, width: 0 } });
sl.addShape(pres.shapes.RECTANGLE, { x: 0, y: 5.525, w: 10, h: 0.1, fill: { color: C.green }, line: { color: C.green, width: 0 } });
sl.addText("TOPIC 2", { x: 0.5, y: 1.3, w: 9, h: 0.5, fontSize: 14, color: C.accent, bold: true, fontFace: "Calibri", align: "center", charSpacing: 6 });
sl.addText("Immunization &\nDisease Prevention", {
x: 0.5, y: 1.85, w: 9, h: 1.6, fontSize: 32, bold: true, color: C.white, fontFace: "Calibri", align: "center", valign: "middle",
});
sl.addShape(pres.shapes.RECTANGLE, { x: 3.5, y: 3.55, w: 3, h: 0.07, fill: { color: C.green }, line: { color: C.green, width: 0 } });
sl.addText("UIP Schedule • AEFI • Cold Chain • Levels of Prevention • Active vs Passive Immunity", {
x: 0.5, y: 3.7, w: 9, h: 0.5, fontSize: 10, color: C.lightBlue, fontFace: "Calibri", align: "center", italic: true,
});
}
// ══════════════════════════════════════════════════════════
// SLIDE 7 – UIP SCHEDULE
// ══════════════════════════════════════════════════════════
{
const sl = pres.addSlide();
sectionHeader(sl, "TOPIC 2 | Universal Immunization Programme (UIP)", C.green);
leftBar(sl, C.green, 0.06);
sl.addText("Launched in 1985 — Free vaccines to children and pregnant women", {
x: 0.25, y: 0.85, w: 9.5, h: 0.28, fontSize: 10, color: C.textMid, fontFace: "Calibri", italic: true,
});
addTable(sl,
[
["Vaccine", "When Given", "Route"],
["BCG", "At birth", "Intradermal"],
["OPV 0 + Hep B birth dose", "Within 24 hours of birth", "Oral / IM"],
["OPV 1,2,3 + IPV", "6, 10, 14 weeks", "Oral + IM"],
["Pentavalent (DPT+HepB+Hib)", "6, 10, 14 weeks", "IM"],
["Rotavirus", "6, 10, 14 weeks", "Oral"],
["PCV", "6 wks, 14 wks, 9 months", "IM"],
["Measles-Rubella (MR)", "9-12 months, 16-24 months", "SC"],
["DPT Booster", "16-24 months, 5-6 years", "IM"],
["TT (children)", "10 years, 16 years", "IM"],
["TT (pregnant women)", "2 doses during pregnancy", "IM"],
],
[4.0, 3.5, 2.2], 0.25, 1.18, { headerColor: "1a7a4a", fontSize: 9, rowH: 0.31 }
);
}
// ══════════════════════════════════════════════════════════
// SLIDE 8 – AEFI, COLD CHAIN & LEVELS OF PREVENTION
// ══════════════════════════════════════════════════════════
{
const sl = pres.addSlide();
sectionHeader(sl, "TOPIC 2 | AEFI, Cold Chain & Levels of Prevention", C.green);
leftBar(sl, C.green, 0.06);
// AEFI
sl.addText("AEFI Classification (CIOMS/WHO 2012)", { x: 0.25, y: 0.85, w: 4.5, h: 0.28, fontSize: 10.5, bold: true, color: C.navy, fontFace: "Calibri" });
const aefi = [
["Vaccine product-related", "Caused by inherent properties of vaccine (e.g., fever after DPT)"],
["Vaccine quality defect", "Due to manufacturing defects in the vaccine"],
["Immunization error-related", "Wrong dose, site, reconstitution, reuse of needle"],
["Immunization anxiety-related", "Fainting, stress response from anxiety about injection"],
["Coincidental event", "Occurs AFTER immunization but NOT caused by it"],
];
aefi.forEach(([name, desc], i) => {
const yy = 1.2 + i * 0.62;
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 0.25, y: yy, w: 4.6, h: 0.55, fill: { color: C.offWhite }, line: { color: C.green, width: 0.8 }, rectRadius: 0.06 });
sl.addText(`${i + 1}`, { x: 0.3, y: yy + 0.09, w: 0.3, h: 0.36, fontSize: 11, bold: true, color: C.green, fontFace: "Calibri", align: "center" });
sl.addText(name, { x: 0.65, y: yy + 0.04, w: 4.1, h: 0.24, fontSize: 9.5, bold: true, color: C.textDark, fontFace: "Calibri" });
sl.addText(desc, { x: 0.65, y: yy + 0.28, w: 4.1, h: 0.22, fontSize: 8.5, color: C.textMid, fontFace: "Calibri" });
});
// Cold chain
sl.addText("Cold Chain", { x: 5.1, y: 0.85, w: 4.5, h: 0.28, fontSize: 10.5, bold: true, color: C.navy, fontFace: "Calibri" });
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 5.1, y: 1.2, w: 4.6, h: 0.9, fill: { color: "e0f2fe" }, line: { color: C.blue, width: 1 }, rectRadius: 0.07 });
sl.addText([
{ text: "Most vaccines: ", options: { bold: true } },
{ text: "+2°C to +8°C\n", options: {} },
{ text: "OPV: ", options: { bold: true } },
{ text: "-20°C (short-term: +2 to +8°C)\n", options: {} },
{ text: "Equipment: ", options: { bold: true } },
{ text: "ILR, deep freezers, vaccine carriers, ice packs", options: {} },
], { x: 5.2, y: 1.23, w: 4.4, h: 0.84, fontSize: 9.5, color: C.textDark, fontFace: "Calibri", valign: "top" });
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 5.1, y: 2.2, w: 4.6, h: 0.55, fill: { color: "fef9c3" }, line: { color: C.accent, width: 1 }, rectRadius: 0.06 });
sl.addText("⚡ Shake Test: If sedimentation in test vial is SLOWER than frozen control → vaccine is SAFE. If SIMILAR or FASTER → DAMAGED, do NOT use.", {
x: 5.2, y: 2.23, w: 4.4, h: 0.48, fontSize: 8.5, color: C.accentDk, fontFace: "Calibri", bold: false, valign: "middle",
});
// Levels of prevention
sl.addText("Leavell & Clark – 5 Levels of Prevention", { x: 5.1, y: 2.88, w: 4.5, h: 0.28, fontSize: 10.5, bold: true, color: C.navy, fontFace: "Calibri" });
addTable(sl,
[
["Level", "Stage", "Example"],
["Health Promotion", "Pre-pathogenesis", "Nutrition, health education"],
["Specific Protection", "Pre-pathogenesis", "Immunization, helmets"],
["Early Dx & Treatment", "Early pathogenesis", "Screening programmes"],
["Disability Limitation", "Late pathogenesis", "Treatment, limit complications"],
["Rehabilitation", "Outcome", "Physiotherapy, prosthetics"],
],
[2.3, 1.4, 1.4], 5.1, 3.2, { headerColor: "1a7a4a", fontSize: 8.5, rowH: 0.28 }
);
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 5.1, y: 4.96, w: 4.6, h: 0.3, fill: { color: "dbeafe" }, line: { color: C.blue, width: 0.8 }, rectRadius: 0.05 });
sl.addText("Primary (1+2) | Secondary (3) | Tertiary (4+5)", {
x: 5.2, y: 4.98, w: 4.4, h: 0.26, fontSize: 9, bold: true, color: C.navy, fontFace: "Calibri", align: "center", valign: "middle",
});
}
// ══════════════════════════════════════════════════════════
// SLIDE 9 – TOPIC 3 TITLE CARD
// ══════════════════════════════════════════════════════════
{
const sl = pres.addSlide();
darkBg(sl, C.darkNavy);
sl.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 0.1, fill: { color: "1a7a4a" }, line: { color: "1a7a4a", width: 0 } });
sl.addShape(pres.shapes.RECTANGLE, { x: 0, y: 5.525, w: 10, h: 0.1, fill: { color: "1a7a4a" }, line: { color: "1a7a4a", width: 0 } });
sl.addText("TOPIC 3", { x: 0.5, y: 1.3, w: 9, h: 0.5, fontSize: 14, color: C.accent, bold: true, fontFace: "Calibri", align: "center", charSpacing: 6 });
sl.addText("Screening Tests", {
x: 0.5, y: 1.85, w: 9, h: 1.5, fontSize: 40, bold: true, color: C.white, fontFace: "Calibri", align: "center", valign: "middle",
});
sl.addShape(pres.shapes.RECTANGLE, { x: 3.5, y: 3.5, w: 3, h: 0.07, fill: { color: "1a7a4a" }, line: { color: "1a7a4a", width: 0 } });
sl.addText("Definition • Types • Criteria • Sensitivity & Specificity • Predictive Value", {
x: 0.5, y: 3.65, w: 9, h: 0.4, fontSize: 10, color: C.lightBlue, fontFace: "Calibri", align: "center", italic: true,
});
}
// ══════════════════════════════════════════════════════════
// SLIDE 10 – TYPES & CRITERIA FOR SCREENING
// ══════════════════════════════════════════════════════════
{
const sl = pres.addSlide();
sectionHeader(sl, "TOPIC 3 | Definition, Types & Criteria for Screening", "1a7a4a");
leftBar(sl, "1a7a4a", 0.06);
// Definition
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 0.25, y: 0.85, w: 9.5, h: 0.5, fill: { color: C.greenBg }, line: { color: C.green, width: 1 }, rectRadius: 0.06 });
sl.addText('"Screening is testing for infection or disease in populations or individuals who are NOT seeking health care."', {
x: 0.4, y: 0.88, w: 9.2, h: 0.44, fontSize: 10, italic: true, color: C.navy, fontFace: "Calibri", valign: "middle",
});
// Types
sl.addText("3 Types of Screening", { x: 0.25, y: 1.46, w: 4.6, h: 0.28, fontSize: 10.5, bold: true, color: C.navy, fontFace: "Calibri" });
const types = [
{ label: "Mass Screening", desc: "Whole population screened irrespective of risk", eg: "e.g., TB X-ray survey", color: C.green },
{ label: "High-risk / Selective", desc: "Defined high-risk groups based on epidemiology", eg: "e.g., Cancer cervix in low SES; family members of diabetics", color: "1a7a4a" },
{ label: "Multiphasic Screening", desc: "2 or more tests applied simultaneously", eg: "e.g., blood tests + lung function + audiometry in one visit", color: "0d5c34" },
];
types.forEach((t, i) => {
const yy = 1.8 + i * 1.15;
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 0.25, y: yy, w: 4.6, h: 1.0, fill: { color: C.offWhite }, line: { color: t.color, width: 1.2 }, rectRadius: 0.07 });
sl.addShape(pres.shapes.RECTANGLE, { x: 0.25, y: yy, w: 0.18, h: 1.0, fill: { color: t.color }, line: { color: t.color, width: 0 } });
sl.addText(t.label, { x: 0.5, y: yy + 0.07, w: 4.2, h: 0.3, fontSize: 10, bold: true, color: C.textDark, fontFace: "Calibri" });
sl.addText(t.desc, { x: 0.5, y: yy + 0.38, w: 4.2, h: 0.3, fontSize: 9, color: C.textMid, fontFace: "Calibri" });
sl.addText(t.eg, { x: 0.5, y: yy + 0.66, w: 4.2, h: 0.28, fontSize: 8.5, color: t.color, fontFace: "Calibri", italic: true });
});
// Criteria for Disease
sl.addText("Criteria: Disease to be Screened", { x: 5.1, y: 1.46, w: 4.5, h: 0.28, fontSize: 10.5, bold: true, color: C.navy, fontFace: "Calibri" });
const diseaseCriteria = [
"Important health problem (high prevalence)",
"Recognizable latent / asymptomatic stage",
"Natural history adequately understood",
"Test detects disease before symptoms",
"Facilities for confirmation available",
"Effective treatment exists",
"Agreed policy on whom to treat",
"Early detection reduces morbidity/mortality",
"Benefits exceed risks and costs",
];
diseaseCriteria.forEach((c, i) => {
badge(sl, 5.1, 1.82 + i * 0.39, i + 1, "1a7a4a");
sl.addText(c, { x: 5.48, y: 1.79 + i * 0.39, w: 4.3, h: 0.36, fontSize: 9, color: C.textDark, fontFace: "Calibri", valign: "middle" });
});
}
// ══════════════════════════════════════════════════════════
// SLIDE 11 – SENSITIVITY, SPECIFICITY, PPV, NPV
// ══════════════════════════════════════════════════════════
{
const sl = pres.addSlide();
sectionHeader(sl, "TOPIC 3 | Validity of Screening Tests — Sensitivity & Specificity", "1a7a4a");
leftBar(sl, "1a7a4a", 0.06);
// 2x2 table visual
sl.addText("The 2×2 Table", { x: 0.25, y: 0.87, w: 4.5, h: 0.28, fontSize: 10.5, bold: true, color: C.navy, fontFace: "Calibri" });
addTable(sl,
[
["Test Result", "Disease (+)", "Disease (−)"],
["Test Positive (+)", "a (True Positive)", "b (False Positive)"],
["Test Negative (−)", "c (False Negative)", "d (True Negative)"],
],
[2.5, 1.8, 1.8], 0.25, 1.22, { headerColor: "1a7a4a", fontSize: 9.5, rowH: 0.48 }
);
// Formulas
sl.addText("Formulas", { x: 0.25, y: 2.36, w: 4.5, h: 0.28, fontSize: 10.5, bold: true, color: C.navy, fontFace: "Calibri" });
const formulas = [
{ name: "Sensitivity", formula: "a / (a + c) × 100", color: C.blue, note: "Detects true positives — rules OUT if high (SNOUT)" },
{ name: "Specificity", formula: "d / (b + d) × 100", color: C.green, note: "Detects true negatives — rules IN if high (SPIN)" },
{ name: "PPV", formula: "a / (a + b) × 100", color: C.purple, note: "Probability positive test = truly diseased" },
{ name: "NPV", formula: "d / (c + d) × 100", color: "b45309", note: "Probability negative test = truly disease-free" },
];
formulas.forEach((f, i) => {
const yy = 2.7 + i * 0.65;
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 0.25, y: yy, w: 4.6, h: 0.57, fill: { color: C.offWhite }, line: { color: f.color, width: 1 }, rectRadius: 0.07 });
sl.addText(f.name, { x: 0.45, y: yy + 0.06, w: 1.3, h: 0.22, fontSize: 10, bold: true, color: f.color, fontFace: "Calibri" });
sl.addText(f.formula, { x: 0.45, y: yy + 0.28, w: 1.8, h: 0.22, fontSize: 9.5, bold: true, color: C.textDark, fontFace: "Calibri" });
sl.addText(f.note, { x: 2.3, y: yy + 0.1, w: 2.4, h: 0.37, fontSize: 8.5, color: C.textMid, fontFace: "Calibri" });
});
// Right col: key concepts
sl.addText("Key Concepts & Mnemonics", { x: 5.1, y: 0.87, w: 4.5, h: 0.28, fontSize: 10.5, bold: true, color: C.navy, fontFace: "Calibri" });
const boxes = [
{ title: "SNOUT", sub: "High SeNsitivity rules OUT disease\n(very few False Negatives)", color: C.blue, bg: "dbeafe" },
{ title: "SPIN", sub: "High SPecificity rules IN disease\n(very few False Positives)", color: C.green, bg: "d1fae5" },
];
boxes.forEach((b, i) => {
const yy = 1.22 + i * 1.1;
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 5.1, y: yy, w: 4.6, h: 0.9, fill: { color: b.bg }, line: { color: b.color, width: 1.5 }, rectRadius: 0.09 });
sl.addText(b.title, { x: 5.2, y: yy + 0.1, w: 4.4, h: 0.35, fontSize: 18, bold: true, color: b.color, fontFace: "Calibri", align: "center" });
sl.addText(b.sub, { x: 5.2, y: yy + 0.46, w: 4.4, h: 0.4, fontSize: 9, color: C.textDark, fontFace: "Calibri", align: "center" });
});
sl.addText("Effect of Prevalence on PPV", { x: 5.1, y: 3.45, w: 4.5, h: 0.28, fontSize: 10.5, bold: true, color: C.navy, fontFace: "Calibri" });
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 5.1, y: 3.8, w: 4.6, h: 1.4, fill: { color: "fef9c3" }, line: { color: C.accent, width: 1 }, rectRadius: 0.07 });
sl.addText([
{ text: "↑ Disease prevalence → ↑ PPV\n", options: { bold: true, breakLine: false } },
{ text: "↓ Disease prevalence → ↓ PPV\n\n", options: { bold: true, breakLine: false } },
{ text: "This is why mass screening for rare diseases can\nproduce many false positives even with high specificity.", options: { italic: true } },
], { x: 5.2, y: 3.85, w: 4.4, h: 1.3, fontSize: 10, color: C.accentDk, fontFace: "Calibri", valign: "top" });
}
// ══════════════════════════════════════════════════════════
// SLIDE 12 – TOPIC 4 TITLE CARD
// ══════════════════════════════════════════════════════════
{
const sl = pres.addSlide();
darkBg(sl, C.darkNavy);
sl.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 0.1, fill: { color: C.purple }, line: { color: C.purple, width: 0 } });
sl.addShape(pres.shapes.RECTANGLE, { x: 0, y: 5.525, w: 10, h: 0.1, fill: { color: C.purple }, line: { color: C.purple, width: 0 } });
sl.addText("TOPIC 4", { x: 0.5, y: 1.3, w: 9, h: 0.5, fontSize: 14, color: C.accent, bold: true, fontFace: "Calibri", align: "center", charSpacing: 6 });
sl.addText("Environmental Health", {
x: 0.5, y: 1.85, w: 9, h: 1.5, fontSize: 38, bold: true, color: C.white, fontFace: "Calibri", align: "center", valign: "middle",
});
sl.addShape(pres.shapes.RECTANGLE, { x: 3.5, y: 3.5, w: 3, h: 0.07, fill: { color: C.purple }, line: { color: C.purple, width: 0 } });
sl.addText("Water Purification • Air Pollution • Noise Pollution", {
x: 0.5, y: 3.65, w: 9, h: 0.4, fontSize: 10, color: C.lightBlue, fontFace: "Calibri", align: "center", italic: true,
});
}
// ══════════════════════════════════════════════════════════
// SLIDE 13 – WATER PURIFICATION
// ══════════════════════════════════════════════════════════
{
const sl = pres.addSlide();
sectionHeader(sl, "TOPIC 4 | Water Purification Methods", C.purple);
leftBar(sl, C.purple, 0.06);
const steps = [
{ num: "1", title: "Sedimentation", desc: "Particles settle by gravity; coagulants (alum / aluminium sulphate) enhance settling", color: "6d28d9" },
{ num: "2", title: "Slow Sand Filtration", desc: "Removes 98-99% bacteria via biological action (Schmutzdecke layer); flow rate 0.1-0.4 m/hr", color: "7c3aed" },
{ num: "3", title: "Rapid Sand Filtration", desc: "Flow rate 5-15 m/hr; requires pre-coagulation; less effective biologically than slow sand", color: "8b5cf6" },
{ num: "4", title: "Chlorination", desc: "Most commonly used disinfection; kills bacteria and viruses. Residual chlorine: 0.5 mg/L after 1 hour contact", color: "a78bfa" },
{ num: "5", title: "Boiling", desc: "Most reliable household method; kills ALL pathogens including cysts and viruses", color: "c4b5fd" },
{ num: "6", title: "UV / Ozone", desc: "Used for specific disinfection; UV damages DNA of pathogens; ozone is strong oxidant", color: "ddd6fe" },
];
steps.forEach((s, i) => {
const col = i < 3 ? 0 : 1;
const row = i < 3 ? i : i - 3;
const xx = 0.25 + col * 4.9;
const yy = 0.9 + row * 1.45;
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: xx, y: yy, w: 4.6, h: 1.35, fill: { color: C.offWhite }, line: { color: s.color, width: 1.2 }, rectRadius: 0.08 });
sl.addShape(pres.shapes.ELLIPSE, { x: xx + 0.12, y: yy + 0.5, w: 0.4, h: 0.4, fill: { color: s.color }, line: { color: s.color, width: 0 } });
sl.addText(s.num, { x: xx + 0.12, y: yy + 0.49, w: 0.4, h: 0.42, fontSize: 14, bold: true, color: C.white, fontFace: "Calibri", align: "center", valign: "middle" });
sl.addText(s.title, { x: xx + 0.62, y: yy + 0.12, w: 3.8, h: 0.35, fontSize: 11, bold: true, color: s.color, fontFace: "Calibri" });
sl.addText(s.desc, { x: xx + 0.62, y: yy + 0.5, w: 3.8, h: 0.75, fontSize: 9, color: C.textDark, fontFace: "Calibri", wrap: true });
});
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 0.25, y: 5.28, w: 9.5, h: 0.3, fill: { color: "ede9fe" }, line: { color: C.purple, width: 0.8 }, rectRadius: 0.05 });
sl.addText("WHO Water Standards: pH 6.5-8.5 | Turbidity <1 NTU | Total coliforms: 0/100 mL | E. coli: 0/100 mL", {
x: 0.35, y: 5.3, w: 9.3, h: 0.26, fontSize: 8.5, bold: true, color: C.purple, fontFace: "Calibri", align: "center", valign: "middle",
});
}
// ══════════════════════════════════════════════════════════
// SLIDE 14 – AIR & NOISE POLLUTION
// ══════════════════════════════════════════════════════════
{
const sl = pres.addSlide();
sectionHeader(sl, "TOPIC 4 | Air Pollution & Noise Pollution", C.purple);
leftBar(sl, C.purple, 0.06);
sl.addText("Air Pollutants & Health Effects", { x: 0.25, y: 0.85, w: 9.5, h: 0.28, fontSize: 10.5, bold: true, color: C.navy, fontFace: "Calibri" });
addTable(sl,
[
["Pollutant", "Main Source", "Health Effects"],
["SPM / PM2.5", "Combustion, vehicles", "Respiratory diseases, lung cancer (deep alveolar penetration)"],
["SO2", "Burning coal, industry", "Acid rain, bronchospasm, COPD exacerbations"],
["CO", "Incomplete combustion", "Carboxyhaemoglobin → tissue hypoxia → death"],
["NO2", "Vehicle exhaust", "Respiratory irritant, photochemical smog formation"],
["Lead (Pb)", "Industries (old petrol)", "Neurotoxicity especially in children, anaemia"],
["Ozone (O3)", "Photochemical reaction", "Eye and lung irritant, throat irritation"],
],
[1.8, 2.5, 5.0], 0.25, 1.2, { headerColor: C.purple, fontSize: 9, rowH: 0.3 }
);
sl.addText("Noise Pollution", { x: 0.25, y: 3.4, w: 4.5, h: 0.28, fontSize: 10.5, bold: true, color: C.navy, fontFace: "Calibri" });
addTable(sl,
[
["Area", "Permissible Limit (WHO)"],
["Residential", "45 dB (day), 35 dB (night)"],
["Industrial", "75 dB"],
["Hearing damage threshold", "85 dB for 8 hours"],
],
[3.5, 3.5], 0.25, 3.75, { headerColor: C.purple, fontSize: 9.5, rowH: 0.33 }
);
sl.addText("Health Effects of Noise", { x: 5.1, y: 3.4, w: 4.5, h: 0.28, fontSize: 10.5, bold: true, color: C.navy, fontFace: "Calibri" });
const noiseEffects = [
{ label: "Auditory", desc: "NIHL, tinnitus, TTS (Temporary Threshold Shift), PTS (Permanent)", color: C.red },
{ label: "Non-auditory", desc: "Hypertension, cardiovascular effects, sleep disturbance, stress, reduced efficiency", color: C.purple },
{ label: "Control", desc: "Engineering (source/path/receiver), ear muffs/plugs, legislation", color: C.green },
];
noiseEffects.forEach((n, i) => {
const yy = 3.75 + i * 0.58;
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 5.1, y: yy, w: 4.6, h: 0.5, fill: { color: C.offWhite }, line: { color: n.color, width: 1 }, rectRadius: 0.06 });
sl.addText(n.label, { x: 5.25, y: yy + 0.04, w: 1.3, h: 0.22, fontSize: 9.5, bold: true, color: n.color, fontFace: "Calibri" });
sl.addText(n.desc, { x: 5.25, y: yy + 0.26, w: 4.3, h: 0.22, fontSize: 8.5, color: C.textMid, fontFace: "Calibri" });
});
}
// ══════════════════════════════════════════════════════════
// SLIDE 15 – TOPIC 5 TITLE CARD
// ══════════════════════════════════════════════════════════
{
const sl = pres.addSlide();
darkBg(sl, C.darkNavy);
sl.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 0.1, fill: { color: C.amber }, line: { color: C.amber, width: 0 } });
sl.addShape(pres.shapes.RECTANGLE, { x: 0, y: 5.525, w: 10, h: 0.1, fill: { color: C.amber }, line: { color: C.amber, width: 0 } });
sl.addText("TOPIC 5", { x: 0.5, y: 1.3, w: 9, h: 0.5, fontSize: 14, color: C.accent, bold: true, fontFace: "Calibri", align: "center", charSpacing: 6 });
sl.addText("International Health", {
x: 0.5, y: 1.85, w: 9, h: 1.5, fontSize: 40, bold: true, color: C.white, fontFace: "Calibri", align: "center", valign: "middle",
});
sl.addShape(pres.shapes.RECTANGLE, { x: 3.5, y: 3.5, w: 3, h: 0.07, fill: { color: C.amber }, line: { color: C.amber, width: 0 } });
sl.addText("WHO • Functions • Health Definition • SDG Goal 3", {
x: 0.5, y: 3.65, w: 9, h: 0.4, fontSize: 10, color: C.lightBlue, fontFace: "Calibri", align: "center", italic: true,
});
}
// ══════════════════════════════════════════════════════════
// SLIDE 16 – WHO & SDG
// ══════════════════════════════════════════════════════════
{
const sl = pres.addSlide();
sectionHeader(sl, "TOPIC 5 | WHO & Sustainable Development Goals", C.amber);
leftBar(sl, C.amber, 0.06);
// WHO facts
sl.addText("World Health Organization (WHO)", { x: 0.25, y: 0.85, w: 4.6, h: 0.28, fontSize: 10.5, bold: true, color: C.navy, fontFace: "Calibri" });
const whoFacts = [
["Established:", "7 April 1948 (World Health Day)"],
["HQ:", "Geneva, Switzerland"],
["Part of:", "United Nations system"],
];
whoFacts.forEach(([label, val], i) => {
sl.addText(label, { x: 0.3, y: 1.2 + i * 0.38, w: 1.2, h: 0.3, fontSize: 9.5, bold: true, color: C.accentDk, fontFace: "Calibri" });
sl.addText(val, { x: 1.5, y: 1.2 + i * 0.38, w: 3.4, h: 0.3, fontSize: 9.5, color: C.textDark, fontFace: "Calibri" });
});
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 0.25, y: 2.38, w: 4.6, h: 0.65, fill: { color: "fef3c7" }, line: { color: C.amber, width: 1 }, rectRadius: 0.07 });
sl.addText([
{ text: "WHO Definition of Health (1948):\n", options: { bold: true, color: C.accentDk } },
{ text: '"Health is a state of complete physical, mental and social well-being and not merely the absence of disease or infirmity."', options: { italic: true, color: C.textDark } },
], { x: 0.37, y: 2.41, w: 4.36, h: 0.59, fontSize: 9.5, fontFace: "Calibri", valign: "middle" });
sl.addText("Functions of WHO", { x: 0.25, y: 3.12, w: 4.5, h: 0.28, fontSize: 10.5, bold: true, color: C.navy, fontFace: "Calibri" });
const fns = [
"Directing & coordinating authority on international health",
"Assisting governments to strengthen health services",
"Technical assistance and emergency aid",
"Eradication of epidemic, endemic, and other diseases",
"Promoting maternal & child health and mental health",
"Promoting research; setting international standards",
"Revising ICD (currently ICD-11)",
];
fns.forEach((f, i) => {
sl.addText(`• ${f}`, { x: 0.3, y: 3.46 + i * 0.3, w: 4.5, h: 0.26, fontSize: 9, color: C.textDark, fontFace: "Calibri" });
});
// SDG
sl.addText("SDG Goal 3 — Health (Achieve by 2030)", { x: 5.1, y: 0.85, w: 4.5, h: 0.28, fontSize: 10.5, bold: true, color: C.navy, fontFace: "Calibri" });
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 5.1, y: 1.2, w: 4.6, h: 0.45, fill: { color: C.greenBg }, line: { color: C.green, width: 1 }, rectRadius: 0.06 });
sl.addText('"Ensure healthy lives and promote well-being for all at all ages"', {
x: 5.2, y: 1.23, w: 4.4, h: 0.39, fontSize: 9.5, italic: true, color: C.navy, fontFace: "Calibri", valign: "middle",
});
const sdg = [
"End preventable deaths of newborns and under-5 children",
"End AIDS, TB, malaria, and NTDs",
"Reduce maternal mortality to <70/100,000 live births",
"Universal Health Coverage (UHC)",
"Reduce premature NCD mortality by one-third",
"Mental health and well-being",
"Substance abuse prevention",
"Achieve 90% vaccine coverage",
];
sdg.forEach((s, i) => {
sl.addShape(pres.shapes.ELLIPSE, { x: 5.1, y: 1.74 + i * 0.45, w: 0.22, h: 0.22, fill: { color: C.green }, line: { color: C.green, width: 0 } });
sl.addText(s, { x: 5.38, y: 1.71 + i * 0.45, w: 4.3, h: 0.3, fontSize: 9, color: C.textDark, fontFace: "Calibri", valign: "middle" });
});
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 5.1, y: 5.28, w: 4.6, h: 0.28, fill: { color: "dbeafe" }, line: { color: C.blue, width: 0.8 }, rectRadius: 0.05 });
sl.addText("MDGs replaced by SDGs in 2015 | 17 total goals | Target year: 2030", {
x: 5.2, y: 5.3, w: 4.4, h: 0.24, fontSize: 8.5, bold: true, color: C.navy, fontFace: "Calibri", align: "center", valign: "middle",
});
}
// ══════════════════════════════════════════════════════════
// SLIDE 17 – TOPIC 6 TITLE CARD
// ══════════════════════════════════════════════════════════
{
const sl = pres.addSlide();
darkBg(sl, C.darkNavy);
sl.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 0.1, fill: { color: C.red }, line: { color: C.red, width: 0 } });
sl.addShape(pres.shapes.RECTANGLE, { x: 0, y: 5.525, w: 10, h: 0.1, fill: { color: C.red }, line: { color: C.red, width: 0 } });
sl.addText("TOPIC 6", { x: 0.5, y: 1.3, w: 9, h: 0.5, fontSize: 14, color: C.accent, bold: true, fontFace: "Calibri", align: "center", charSpacing: 6 });
sl.addText("Essential Medicines &\nCounterfeit Medicines", {
x: 0.5, y: 1.7, w: 9, h: 1.8, fontSize: 30, bold: true, color: C.white, fontFace: "Calibri", align: "center", valign: "middle",
});
sl.addShape(pres.shapes.RECTANGLE, { x: 3.5, y: 3.55, w: 3, h: 0.07, fill: { color: C.red }, line: { color: C.red, width: 0 } });
sl.addText("WHO 1977 Concept • Selection Criteria • Counterfeit Definition • Health Hazards • Prevention", {
x: 0.5, y: 3.7, w: 9, h: 0.4, fontSize: 10, color: C.lightBlue, fontFace: "Calibri", align: "center", italic: true,
});
}
// ══════════════════════════════════════════════════════════
// SLIDE 18 – ESSENTIAL & COUNTERFEIT MEDICINES
// ══════════════════════════════════════════════════════════
{
const sl = pres.addSlide();
sectionHeader(sl, "TOPIC 6 | Essential Medicines & Counterfeit Medicines", C.red);
leftBar(sl, C.red, 0.06);
// Essential medicines
sl.addText("Essential Medicines (WHO, 1977)", { x: 0.25, y: 0.85, w: 4.6, h: 0.28, fontSize: 10.5, bold: true, color: C.navy, fontFace: "Calibri" });
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 0.25, y: 1.2, w: 4.6, h: 0.7, fill: { color: C.redBg }, line: { color: C.red, width: 1 }, rectRadius: 0.07 });
sl.addText([
{ text: "Definition: ", options: { bold: true, color: C.red } },
{ text: '"Medicines that satisfy priority health care needs of the population, selected with due regard to disease prevalence, evidence on efficacy and safety, and comparative cost-effectiveness."', options: { italic: true, color: C.textDark } },
], { x: 0.37, y: 1.23, w: 4.36, h: 0.64, fontSize: 9, fontFace: "Calibri", valign: "middle" });
sl.addText("Criteria for Selection", { x: 0.25, y: 2.0, w: 4.5, h: 0.28, fontSize: 10.5, bold: true, color: C.navy, fontFace: "Calibri" });
const criteria = [
["Relevance", "Relevant to prevalent diseases in the country"],
["Efficacy & Safety", "Established by clinical trials"],
["Quality", "Bioavailability and stability guaranteed"],
["Cost-effectiveness", "Cost-effective vs alternatives"],
["Accessibility", "Generic forms available; not patent-locked"],
["Preference", "Single drug preferred over FDC unless proven"],
];
criteria.forEach(([name, desc], i) => {
badge(sl, 0.25, 2.35 + i * 0.46, i + 1, C.red);
sl.addText(name, { x: 0.63, y: 2.32 + i * 0.46, w: 1.4, h: 0.22, fontSize: 9.5, bold: true, color: C.red, fontFace: "Calibri" });
sl.addText(desc, { x: 0.63, y: 2.53 + i * 0.46, w: 4.1, h: 0.22, fontSize: 8.5, color: C.textMid, fontFace: "Calibri" });
});
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 0.25, y: 5.08, w: 4.6, h: 0.46, fill: { color: "fef3c7" }, line: { color: C.amber, width: 0.8 }, rectRadius: 0.06 });
sl.addText("India's NLEM: Updated periodically. Drugs on NLEM are covered under government programs and price control.", {
x: 0.35, y: 5.1, w: 4.4, h: 0.42, fontSize: 8.5, color: C.accentDk, fontFace: "Calibri", valign: "middle",
});
// Counterfeit medicines
sl.addText("Counterfeit Medicines", { x: 5.1, y: 0.85, w: 4.5, h: 0.28, fontSize: 10.5, bold: true, color: C.navy, fontFace: "Calibri" });
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 5.1, y: 1.2, w: 4.6, h: 0.65, fill: { color: C.redBg }, line: { color: C.red, width: 1 }, rectRadius: 0.07 });
sl.addText([
{ text: "WHO Definition: ", options: { bold: true, color: C.red } },
{ text: '"Deliberately and fraudulently mislabelled with respect to identity and/or source; applies to branded and generic products."', options: { italic: true, color: C.textDark } },
], { x: 5.2, y: 1.23, w: 4.4, h: 0.59, fontSize: 9, fontFace: "Calibri", valign: "middle" });
sl.addText("Types of Counterfeiting", { x: 5.1, y: 1.95, w: 4.5, h: 0.28, fontSize: 10, bold: true, color: C.navy, fontFace: "Calibri" });
["No active ingredient", "Wrong / insufficient active ingredient", "Wrong packaging or labelling", "Contaminated product"].forEach((t, i) => {
sl.addText(`• ${t}`, { x: 5.2, y: 2.28 + i * 0.28, w: 4.4, h: 0.25, fontSize: 9, color: C.red, fontFace: "Calibri" });
});
sl.addText("Health Hazards", { x: 5.1, y: 3.42, w: 4.5, h: 0.28, fontSize: 10, bold: true, color: C.navy, fontFace: "Calibri" });
const hazards = [
{ h: "Treatment failure", d: "No/insufficient active drug (counterfeit antimalarials, antibiotics)" },
{ h: "Drug resistance", d: "Sub-therapeutic doses promote resistance" },
{ h: "Toxic effects", d: "Wrong or contaminated ingredients" },
{ h: "Death", d: "Documented cases with counterfeit injections and IV fluids" },
];
hazards.forEach((h, i) => {
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 5.1, y: 3.75 + i * 0.43, w: 4.6, h: 0.37, fill: { color: C.redBg }, line: { color: C.red, width: 0.8 }, rectRadius: 0.05 });
sl.addText(`⚠ ${h.h}: `, { x: 5.2, y: 3.77 + i * 0.43, w: 1.8, h: 0.3, fontSize: 8.5, bold: true, color: C.red, fontFace: "Calibri", valign: "middle" });
sl.addText(h.d, { x: 6.85, y: 3.77 + i * 0.43, w: 2.75, h: 0.3, fontSize: 8.5, color: C.textDark, fontFace: "Calibri", valign: "middle" });
});
sl.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 5.1, y: 5.47, w: 4.6, h: 0.12, fill: { color: "fee2e2" }, line: { color: C.red, width: 0.5 }, rectRadius: 0.04 });
sl.addText("WHO estimate: ~10% of global medicines counterfeit; up to 30% in developing countries", {
x: 5.15, y: 5.48, w: 4.5, h: 0.1, fontSize: 7.5, bold: true, color: C.red, fontFace: "Calibri", align: "center",
});
}
// ══════════════════════════════════════════════════════════
// SLIDE 19 – QUICK REVISION / SUMMARY
// ══════════════════════════════════════════════════════════
{
const sl = pres.addSlide();
sectionHeader(sl, "Quick Revision | Key Numbers & Facts to Remember", C.darkNavy);
leftBar(sl, C.accent, 0.06);
addTable(sl,
[
["Topic", "Key Fact"],
["Epidemiology definition", "Last (2001) — occurrence, distribution, determinants, application to control"],
["Morris's uses", "7 uses of epidemiology"],
["Hill's criteria", "9 criteria; Temporality is MOST IMPORTANT"],
["Prevalence formula", "Prevalence = Incidence × Duration of disease"],
["UIP launched", "1985; Hep B birth dose within 24 hours of birth"],
["Cold chain", "Most vaccines +2°C to +8°C; OPV at -20°C"],
["AEFI types", "5 types (CIOMS/WHO 2012)"],
["Levels of prevention", "5 levels (Leavell & Clark) — Primary, Secondary, Tertiary"],
["Screening types", "3 types: Mass, High-risk/Selective, Multiphasic"],
["Sensitivity / Specificity", "TP/(TP+FN) × 100 | TN/(TN+FP) × 100"],
["SNOUT / SPIN mnemonic", "High Sensitivity rules OUT; High Specificity rules IN"],
["Chlorine residual", "0.5 mg/L after 1 hour contact time"],
["Noise damage threshold", "85 dB for 8 hours continuous exposure"],
["WHO established", "7 April 1948; Geneva, Switzerland"],
["SDG Goal 3", "Ensure healthy lives; achieve by 2030"],
["Essential medicines concept", "WHO 1977; India = NLEM"],
["Counterfeit medicines (global)", "~10% globally; up to 30% in developing countries (WHO)"],
],
[3.8, 5.85], 0.18, 0.85, { headerColor: C.darkNavy, fontSize: 8.8, rowH: 0.24 }
);
}
// ══════════════════════════════════════════════════════════
// SLIDE 20 – CLOSING SLIDE
// ══════════════════════════════════════════════════════════
{
const sl = pres.addSlide();
darkBg(sl, C.darkNavy);
sl.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 0.12, fill: { color: C.accent }, line: { color: C.accent, width: 0 } });
sl.addShape(pres.shapes.RECTANGLE, { x: 0, y: 5.505, w: 10, h: 0.12, fill: { color: C.accent }, line: { color: C.accent, width: 0 } });
sl.addText("Good Luck!", {
x: 0.5, y: 1.5, w: 9, h: 1.0, fontSize: 50, bold: true, color: C.accent,
fontFace: "Calibri", align: "center",
});
sl.addText("Internal Assessment — Community Medicine", {
x: 0.5, y: 2.7, w: 9, h: 0.45, fontSize: 15, color: C.white, fontFace: "Calibri", align: "center",
});
sl.addText("14th July 2026 | MBBS Phase II (2024 Batch)", {
x: 0.5, y: 3.2, w: 9, h: 0.35, fontSize: 11, color: C.lightBlue, fontFace: "Calibri", align: "center",
});
sl.addShape(pres.shapes.RECTANGLE, { x: 3.0, y: 3.68, w: 4.0, h: 0.05, fill: { color: C.accent }, line: { color: C.accent, width: 0 } });
sl.addText("Based on Park's Textbook of Preventive & Social Medicine\nESIC Medical College & PGIMSR, Rajajinagar, Bengaluru", {
x: 0.5, y: 3.85, w: 9, h: 0.7, fontSize: 9.5, color: "94b8d8", fontFace: "Calibri", align: "center", italic: true,
});
}
// ══════════════════════════════════════════════════════════
// WRITE FILE
// ══════════════════════════════════════════════════════════
pres.writeFile({ fileName: "/home/daytona/workspace/community-medicine-guide/Community_Medicine_Presentation.pptx" })
.then(() => console.log("PPT created: Community_Medicine_Presentation.pptx"))
.catch(e => { console.error(e); process.exit(1); });
cd /home/daytona/workspace/community-medicine-guide && node generate_ppt.js 2>&1
node -e "const p = require('pptxgenjs'); const pr = new p(); console.log(Object.…
node -e "const p = require('pptxgenjs'); const pr = new p(); console.log(JSON.st…
node -e "const p = require('pptxgenjs'); const pr = new p(); const keys = Object…
node -e "const p = require('pptxgenjs'); const pr = new p(); console.log(pr.shap…
sed -i 's/pres\.shapes\.ELLIPSE/"ellipse"/g' /home/daytona/workspace/community-m…
python3 -c " f = open('/home/daytona/workspace/community-medicine-guide/generate…
cd /home/daytona/workspace/community-medicine-guide && node generate_ppt.js 2>&1
ls -lh /home/daytona/workspace/community-medicine-guide/Community_Medicine_Prese…
Community Medicine Presentation
Presentation · PPTX
| Slides | Content |
|---|---|
| 1 | Cover slide - dark navy with left panel listing all 6 topics colour-coded |
| 2-5 | Topic 1 - Epidemiology - Title card, Definition + 7 Uses, Study Designs + Incidence/Prevalence, Hill's 9 Criteria |
| 6-8 | Topic 2 - Immunization - Title card, Full UIP schedule table, AEFI + Cold Chain + 5 Levels of Prevention |
| 9-11 | Topic 3 - Screening Tests - Title card, Types + Disease criteria, Sensitivity/Specificity + 2×2 table + SNOUT/SPIN |
| 12-14 | Topic 4 - Environmental Health - Title card, Water purification methods, Air & Noise pollution |
| 15-16 | Topic 5 - International Health - Title card, WHO functions + SDG Goal 3 |
| 17-18 | Topic 6 - Essential & Counterfeit Medicines - Title card, Full content slide |
| 19 | Quick Revision table - 18 key numbers and facts |
| 20 | Closing slide with exam details |
Compile both PDF and PPT into a single study package folder
ls /home/daytona/workspace/community-medicine-guide/
mkdir -p /home/daytona/workspace/Community_Medicine_Study_Package && cp /home/da…
~/Community_Medicine_Study_Package/README.txt
╔══════════════════════════════════════════════════════════════════╗
║ COMMUNITY MEDICINE — INTERNAL ASSESSMENT STUDY PACKAGE ║
║ ESIC Medical College & PGIMSR, Rajajinagar, Bengaluru ║
║ MBBS Phase II (2024 Batch) | Exam: 14th July 2026 ║
╚══════════════════════════════════════════════════════════════════╝
Based on: Park's Textbook of Preventive and Social Medicine
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CONTENTS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. Community_Medicine_Study_Guide.pdf
- 24 important Q&A with detailed model answers
- Colour-coded by topic with tables, formulas, and note boxes
- Quick Revision Memory Table at the end
- Best for: last-minute reading, writing practice
2. Community_Medicine_Presentation.pptx
- 20 slides (16:9), one topic section per colour
- Covers all 6 topics with visual layouts, tables, and mnemonics
- Best for: group study, visual revision, quick walkthrough
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
6 EXAM TOPICS (as per syllabus)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Topic 1 - Principles of Epidemiology & Epidemiological Methods
(Q1-Q8 in PDF | Slides 2-5 in PPT)
Topic 2 - Immunization & Disease Prevention
(Q9-Q13 in PDF | Slides 6-8 in PPT)
Topic 3 - Screening Tests
(Q14-Q17 in PDF | Slides 9-11 in PPT)
Topic 4 - Environmental Health
(Q18-Q20 in PDF | Slides 12-14 in PPT)
Topic 5 - International Health
(Q21-Q22 in PDF | Slides 15-16 in PPT)
Topic 6 - Essential Medicines & Counterfeit Medicines
(Q23-Q24 in PDF | Slides 17-18 in PPT)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
EXAM FORMAT (as per notice)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Long Essay Question 10 marks x 1 = 10
Short Answer / Reasoning 3 marks x 5 = 15
Short Note Questions 5 marks x 7 = 35
Applied Integrated Topics 5 marks x 2 = 10
Applied Aspects 5 marks x 2 = 10
MCQs (2 sub-questions each) 2 marks x 10 = 20
─────────────────────────────────────────────
TOTAL 100 marks
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
MOST LIKELY LONG ESSAY (10 marks)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- Criteria for a good screening test (Q15)
- Hill's criteria for causation (Q8)
- Essential medicines — definition and criteria for selection (Q23)
- Water purification methods (Q18)
MOST LIKELY SHORT NOTES (5 marks each)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- Sensitivity and specificity / PPV / NPV (Q16)
- AEFI classification (Q10)
- Cold chain (Q11)
- Types of screening (Q14)
- Levels of prevention (Q12)
- Incidence vs prevalence (Q7)
- Counterfeit medicines (Q24)
- WHO definition and functions (Q21)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Good luck! Time: 1:00 PM – 4:00 PM, 14th July 2026
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
cd /home/daytona/workspace && python3 -c " import zipfile, os folder = 'Communi…
cd /home/daytona/workspace && zip -r Community_Medicine_Study_Package.zip Commun…
ls -la /home/daytona/workspace/Community_Medicine_Study_Package/ && file /home/d…
cd /home/daytona/workspace && tar -czf Community_Medicine_Study_Package.tar.gz C…
tar -tzvf /home/daytona/workspace/Community_Medicine_Study_Package.tar.gz 2>&1
Community Medicine Study Package.tar
Archive · GZ
Community Medicine Study Guide
PDF Document · PDF
Community Medicine Presentation
Presentation · PPTX
README
Text File · TXT
| File | Size | Purpose |
|---|---|---|
Community_Medicine_Study_Guide.pdf | 37 KB | 24 Q&A with detailed model answers, tables, formulas |
Community_Medicine_Presentation.pptx | 679 KB | 20-slide visual presentation across all 6 topics |
README.txt | 5 KB | Guide to contents, exam format, most likely questions |
.tar.gz file extracts into a single folder called Community_Medicine_Study_Package/ containing all three files. To extract: double-click it on Windows/Mac, or run tar -xzf Community_Medicine_Study_Package.tar.gz on Linux/Mac terminal.See all the previous year question paper and give me question of that and also include mcqs and make a pdf in entire
Park's PSM community medicine MBBS Phase 2 previous year question papers epidemiology screening immunization
community medicine PSM university exam previous year questions environmental health international health essential medicines MCQ
https://medical.iqcity.in/wp-content/uploads/2021/03/3rd-Pro…
https://www.slideshare.net/slideshow/question-bank-of-commun…
See all the previous year question paper and give me question of that and also include mcqs and make a pdf in entire
MBBS Phase 2 community medicine PSM previous year questions epidemiology screening immunization environmental health MCQ university exam
RGUHS Karnataka community medicine previous year question papers 2015 2016 2017 2018 2019 2020 2021 2022 epidemiology screening essential medicines
~/community-medicine-guide/generate_pyq_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
BaseDocTemplate, Frame, PageTemplate,
Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.lib.colors import HexColor
OUTPUT = "/home/daytona/workspace/community-medicine-guide/Community_Medicine_PYQ_Bank.pdf"
W, H = A4
# ── Palette ────────────────────────────────────────────────
DARK = HexColor("#0f2744")
NAVY = HexColor("#1a3a5c")
BLUE = HexColor("#2563a8")
LBLUE = HexColor("#dbeafe")
ACCENT = HexColor("#e67e22")
GREEN = HexColor("#1a7a4a")
GBKG = HexColor("#d1fae5")
PURPLE = HexColor("#6d28d9")
RED = HexColor("#be123c")
RBKG = HexColor("#fee2e2")
AMBER = HexColor("#b45309")
ABKG = HexColor("#fef3c7")
TEAL = HexColor("#0d6e6e")
GREY = HexColor("#f1f5f9")
LGREY = HexColor("#e2e8f0")
WHITE = colors.white
BLACK = colors.black
# ── Styles ─────────────────────────────────────────────────
SS = getSampleStyleSheet()
def st(name, parent="Normal", **kw):
return ParagraphStyle(name, parent=SS[parent], **kw)
TITLE = st("T1", fontSize=22, textColor=WHITE, alignment=TA_CENTER,
fontName="Helvetica-Bold", leading=28, spaceAfter=4)
SUB = st("T2", fontSize=11, textColor=LBLUE, alignment=TA_CENTER,
fontName="Helvetica", leading=16, spaceAfter=2)
SECT = st("SE", fontSize=13, textColor=WHITE, fontName="Helvetica-Bold",
leading=18, spaceBefore=8, spaceAfter=4)
QTXT = st("QT", fontSize=10.5, textColor=NAVY, fontName="Helvetica-Bold",
leading=15, spaceBefore=6, spaceAfter=2, leftIndent=6)
ATXT = st("AT", fontSize=9.5, textColor=BLACK, fontName="Helvetica",
leading=14, spaceBefore=1, spaceAfter=3, leftIndent=14,
alignment=TA_JUSTIFY)
BULL = st("BL", fontSize=9.5, textColor=BLACK, fontName="Helvetica",
leading=13, spaceAfter=1, leftIndent=22, bulletIndent=12)
BADGE = st("BD", fontSize=8, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=10)
FOOT = st("FT", fontSize=7.5, textColor=colors.grey, alignment=TA_CENTER)
MCQQ = st("MQ", fontSize=10, textColor=NAVY, fontName="Helvetica-Bold",
leading=14, spaceBefore=7, spaceAfter=2, leftIndent=4)
MCQOP = st("MO", fontSize=9.5, textColor=BLACK, fontName="Helvetica",
leading=13, spaceAfter=1, leftIndent=18)
MCQANS = st("MA", fontSize=9, textColor=GREEN, fontName="Helvetica-Bold",
leading=12, spaceAfter=4, leftIndent=18)
HINT = st("HT", fontSize=8.5, textColor=AMBER, fontName="Helvetica-Oblique",
leading=12, spaceAfter=6, leftIndent=18)
YR_TAG = st("YR", fontSize=8, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=10)
# ── Page callbacks ──────────────────────────────────────────
def on_cover(canvas, doc):
canvas.saveState()
canvas.setFillColor(DARK)
canvas.rect(0, 0, W, H, fill=1, stroke=0)
canvas.setFillColor(ACCENT)
canvas.rect(0, H - 10*mm, W, 10*mm, fill=1, stroke=0)
canvas.rect(0, 0, W, 8*mm, fill=1, stroke=0)
canvas.setFillColor(WHITE)
canvas.setFont("Helvetica", 7.5)
canvas.drawCentredString(W/2, 2.5*mm, f"Page {doc.page} | MBBS Phase II Community Medicine | Exam: 14th July 2026")
canvas.restoreState()
def on_page(canvas, doc):
canvas.saveState()
canvas.setFillColor(DARK)
canvas.rect(0, H - 18*mm, W, 18*mm, fill=1, stroke=0)
canvas.setFillColor(ACCENT)
canvas.rect(0, H - 19*mm, W, 1*mm, fill=1, stroke=0)
canvas.setFillColor(WHITE)
canvas.setFont("Helvetica-Bold", 8)
canvas.drawString(18*mm, H - 10*mm, "Community Medicine | Previous Year Questions + MCQ Bank")
canvas.setFont("Helvetica", 8)
canvas.drawRightString(W - 18*mm, H - 10*mm, "Park's Textbook PSM")
canvas.setFillColor(DARK)
canvas.rect(0, 0, W, 10*mm, fill=1, stroke=0)
canvas.setFillColor(WHITE)
canvas.setFont("Helvetica", 7.5)
canvas.drawCentredString(W/2, 2.8*mm, f"Page {doc.page} | ESIC Medical College & PGIMSR, Bengaluru | Exam: 14th July 2026")
canvas.restoreState()
frame_cover = Frame(18*mm, 12*mm, W-36*mm, H-28*mm, id="cover")
frame_normal = Frame(18*mm, 14*mm, W-36*mm, H-36*mm, id="normal")
doc = BaseDocTemplate(OUTPUT, pagesize=A4,
leftMargin=18*mm, rightMargin=18*mm,
topMargin=22*mm, bottomMargin=16*mm)
doc.addPageTemplates([
PageTemplate(id="cover", frames=[frame_cover], onPage=on_cover),
PageTemplate(id="normal", frames=[frame_normal], onPage=on_page),
])
# ── Helpers ────────────────────────────────────────────────
def sp(n=6): return Spacer(1, n)
def hr(): return HRFlowable(width="100%", thickness=0.4, color=LGREY)
def topic_bar(title, color=BLUE):
tbl = Table([[Paragraph(title, SECT)]], colWidths=[W-36*mm])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), color),
("TOPPADDING", (0,0),(-1,-1), 7),
("BOTTOMPADDING", (0,0),(-1,-1), 7),
("LEFTPADDING", (0,0),(-1,-1), 10),
]))
return tbl
def yr_tag(years, color=BLUE):
txt = " ".join([f"[{y}]" for y in years])
tbl = Table([[Paragraph(txt, YR_TAG)]], colWidths=[W-36*mm])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), color),
("TOPPADDING", (0,0),(-1,-1), 2),
("BOTTOMPADDING", (0,0),(-1,-1), 2),
("LEFTPADDING", (0,0),(-1,-1), 10),
]))
return tbl
def q_block(qnum, qtext, qtype="LEQ", years=None, color=BLUE):
type_colors = {"LEQ": RED, "SAQ": GREEN, "SN": BLUE, "MCQ": PURPLE, "R&J": TEAL}
tc = type_colors.get(qtype, BLUE)
label = {"LEQ":"LONG ESSAY","SAQ":"SHORT ANSWER","SN":"SHORT NOTE","MCQ":"MCQ","R&J":"REASONING"}.get(qtype, qtype)
header = f"<b>Q{qnum}.</b> {qtext}"
tag_txt = label
if years:
tag_txt += " | " + " ".join([f"[{y}]" for y in years])
tag = Table([[Paragraph(tag_txt, YR_TAG)]], colWidths=[W-36*mm])
tag.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), tc),
("TOPPADDING", (0,0),(-1,-1), 2),
("BOTTOMPADDING", (0,0),(-1,-1), 2),
("LEFTPADDING", (0,0),(-1,-1), 8),
]))
qtbl = Table([[Paragraph(header, QTXT)]], colWidths=[W-36*mm])
qtbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), LBLUE if qtype!="MCQ" else HexColor("#f3e8ff")),
("LEFTPADDING", (0,0),(-1,-1), 10),
("TOPPADDING", (0,0),(-1,-1), 5),
("BOTTOMPADDING", (0,0),(-1,-1), 5),
("LINEBEFORE", (0,0),(0,-1), 3, tc),
]))
return [tag, qtbl]
def ans_box(lines, bg=GREY, border=BLUE):
content = []
for ln in lines:
if ln.startswith("•"):
content.append(Paragraph(ln, BULL))
elif ln.startswith(">>"):
content.append(Paragraph(ln[2:], st("HL", fontSize=9.5, textColor=NAVY,
fontName="Helvetica-Bold", leading=13, leftIndent=14)))
else:
content.append(Paragraph(ln, ATXT))
# wrap all in a table for box look
cell = Table([[c] for c in content], colWidths=[W-36*mm-16*mm])
cell.setStyle(TableStyle([("LEFTPADDING",(0,0),(-1,-1),0),("RIGHTPADDING",(0,0),(-1,-1),0),
("TOPPADDING",(0,0),(-1,-1),0),("BOTTOMPADDING",(0,0),(-1,-1),0)]))
outer = Table([[cell]], colWidths=[W-36*mm])
outer.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), bg),
("LEFTPADDING", (0,0),(-1,-1), 8),
("RIGHTPADDING", (0,0),(-1,-1), 8),
("TOPPADDING", (0,0),(-1,-1), 5),
("BOTTOMPADDING", (0,0),(-1,-1), 5),
("BOX", (0,0),(-1,-1), 0.5, border),
]))
return outer
def note(txt, bg=ABKG, border=ACCENT):
p = Paragraph(f"<b><font color='#b45309'>⚡ Note:</font></b> {txt}", ATXT)
tbl = Table([[p]], colWidths=[W-36*mm])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), bg),
("LEFTPADDING", (0,0),(-1,-1), 10),
("TOPPADDING", (0,0),(-1,-1), 4),
("BOTTOMPADDING", (0,0),(-1,-1), 4),
("BOX", (0,0),(-1,-1), 0.8, border),
]))
return tbl
def mcq_block(qnum, stem, options, answer, hint=None):
items = []
items.append(Paragraph(f"<b>MCQ {qnum}.</b> {stem}", MCQQ))
opt_labels = ["a)", "b)", "c)", "d)"]
for i, opt in enumerate(options):
items.append(Paragraph(f"{opt_labels[i]} {opt}", MCQOP))
items.append(Paragraph(f"✓ Answer: <b>{answer}</b>", MCQANS))
if hint:
items.append(Paragraph(f"Hint: {hint}", HINT))
tbl = Table([[item] for item in items], colWidths=[W-36*mm])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), HexColor("#f5f3ff")),
("LEFTPADDING", (0,0),(-1,-1), 10),
("RIGHTPADDING", (0,0),(-1,-1), 8),
("TOPPADDING", (0,0),(-1,-1), 1),
("BOTTOMPADDING", (0,0),(-1,-1), 1),
("BOX", (0,0),(-1,-1), 0.8, PURPLE),
("LINEBEFORE", (0,0),(0,-1), 3, PURPLE),
]))
return tbl
def simp_table(headers, rows, cw):
hst = st("TH2", fontSize=9, fontName="Helvetica-Bold", textColor=WHITE,
alignment=TA_CENTER, leading=12)
cst = st("TD2", fontSize=9, fontName="Helvetica", textColor=BLACK,
leading=12, alignment=TA_LEFT)
data = []
for ri, row in enumerate([headers]+rows):
data.append([Paragraph(str(c), hst if ri==0 else cst) for c in row])
tbl = Table(data, colWidths=cw, repeatRows=1)
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), NAVY),
("ROWBACKGROUNDS",(0,1),(-1,-1), [WHITE, GREY]),
("GRID", (0,0),(-1,-1), 0.4, colors.grey),
("TOPPADDING", (0,0),(-1,-1), 4),
("BOTTOMPADDING", (0,0),(-1,-1), 4),
("LEFTPADDING", (0,0),(-1,-1), 5),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
]))
return tbl
# ════════════════════════════════════════════════════════════
# BUILD STORY
# ════════════════════════════════════════════════════════════
story = []
# ── COVER ───────────────────────────────────────────────────
cov_title = st("CT", fontSize=26, textColor=WHITE, alignment=TA_CENTER,
fontName="Helvetica-Bold", leading=32)
cov_sub = st("CS", fontSize=13, textColor=LBLUE, alignment=TA_CENTER,
fontName="Helvetica", leading=18)
cov_sm = st("CM", fontSize=9.5, textColor=HexColor("#94b8d8"), alignment=TA_CENTER,
fontName="Helvetica", leading=14)
cov_acc = st("CA", fontSize=11, textColor=ACCENT, alignment=TA_CENTER,
fontName="Helvetica-Bold", leading=16)
story.append(Spacer(1, 28*mm))
story.append(Paragraph("COMMUNITY MEDICINE", cov_title))
story.append(Spacer(1, 3*mm))
story.append(Paragraph("Previous Year Questions + MCQ Bank", cov_sub))
story.append(Spacer(1, 5*mm))
story.append(Paragraph("Based on Park's Textbook of Preventive & Social Medicine", cov_sm))
story.append(Spacer(1, 4*mm))
story.append(Paragraph("MBBS Universities: RGUHS · MUHS · IQ City · NMC Curriculum (2008–2024)", cov_sm))
story.append(Spacer(1, 10*mm))
cover_topics = [
("T1", "Principles of Epidemiology & Methods", BLUE),
("T2", "Immunization & Disease Prevention", GREEN),
("T3", "Screening Tests", HexColor("#1a7a4a")),
("T4", "Environmental Health", PURPLE),
("T5", "International Health", AMBER),
("T6", "Essential Medicines & Counterfeit Medicines", RED),
("MCQ","50 Topic-wise MCQs with Answers", DARK),
]
for tag, title, col in cover_topics:
row_tbl = Table([[
Paragraph(tag, st("CT2", fontSize=9, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER, leading=12)),
Paragraph(title, st("CT3", fontSize=10.5, fontName="Helvetica",
textColor=WHITE, leading=15))
]], colWidths=[14*mm, W-36*mm-14*mm])
row_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(0,-1), col),
("BACKGROUND", (1,0),(1,-1), HexColor("#1e3a5c")),
("TOPPADDING", (0,0),(-1,-1), 5),
("BOTTOMPADDING", (0,0),(-1,-1), 5),
("LEFTPADDING", (0,0),(0,-1), 4),
("LEFTPADDING", (1,0),(1,-1), 8),
("LINEBELOW", (0,0),(-1,-1), 0.5, HexColor("#2a4a6c")),
]))
story.append(row_tbl)
story.append(Spacer(1, 12*mm))
story.append(Paragraph("ESIC Medical College & PGIMSR, Rajajinagar, Bengaluru", cov_sm))
story.append(Paragraph("MBBS Phase II (2024 Batch) | Internal Exam: 14th July 2026 | 1:00–4:00 PM", cov_acc))
story.append(Spacer(1, 4*mm))
story.append(Paragraph("Questions compiled from 2003–2024 RGUHS, MUHS, NTR, KNRUHS & other university exams", cov_sm))
story.append(PageBreak())
# ════════════════════════════════════════════════════════════
# HOW TO USE
# ════════════════════════════════════════════════════════════
story.append(topic_bar("HOW TO USE THIS QUESTION BANK", DARK))
story.append(sp(6))
story.append(Paragraph("Each question is tagged with:", ATXT))
content_legend = [
["Tag", "Meaning"],
["LONG ESSAY", "10-mark question — write 2-3 pages, use diagrams and tables"],
["SHORT ANSWER","3-mark question — 8-10 lines, precise and to the point"],
["SHORT NOTE", "5-mark question — half page, labelled points/table"],
["REASONING", "'Justify/Explain why' type — 2-3 lines with rationale"],
["MCQ", "1-mark objective question — single best answer"],
["[Year]", "Year the question appeared in university exams"],
]
story.append(simp_table(content_legend[0], content_legend[1:], [42*mm, W-36*mm-42*mm]))
story.append(sp(6))
story.append(note("Questions marked ★ REPEAT are asked in 3 or more years — prioritise these."))
story.append(PageBreak())
# ════════════════════════════════════════════════════════════
# TOPIC 1 — EPIDEMIOLOGY
# ════════════════════════════════════════════════════════════
story.append(topic_bar("TOPIC 1 — Principles of Epidemiology & Epidemiological Methods", BLUE))
story.append(sp(4))
story.append(note("Most-asked topic: ~35% of PYQs in this syllabus come from here. Master definitions, study designs, and Hill's criteria."))
story.append(sp(6))
# LEQ 1
story += q_block(1,
"Define epidemiology. Classify epidemiological studies. Mention briefly the important differences between case-control and cohort studies. [2+4+6] ★ REPEAT",
"LEQ", ["2009","2010","2012","2016"])
story.append(ans_box([
">>Definition (Last, 2001):",
"\"The study of the occurrence and distribution of health-related events, states, and processes in specified populations, including the study of the determinants influencing such processes, and the application of this knowledge to control relevant health problems.\"",
">>Classification of Epidemiological Studies:",
"• Observational: (a) Descriptive – Cross-sectional/prevalence study; (b) Analytic – Case-control study, Cohort study",
"• Experimental: (a) Randomised Controlled Trial (RCT); (b) Field trial; (c) Community trial",
">>Case-Control vs Cohort Study:",
]))
story.append(simp_table(
["Feature","Case-Control","Cohort"],
[
["Direction","Retrospective (disease → exposure)","Prospective (exposure → disease)"],
["Start point","From cases (diseased)","From exposed / unexposed"],
["Outcome measure","Odds ratio (OR)","Relative risk (RR)"],
["Time","Faster, cheaper","Slower, expensive"],
["Bias","Recall bias","Loss to follow-up"],
["Best for","Rare diseases","Common diseases, rare exposures"],
],
[36*mm, 55*mm, 55*mm]
))
story.append(sp(6))
# LEQ 2
story += q_block(2,
"Describe the salient features of different types of time trends in disease occurrence with suitable examples. What are different possible changes over time that you should keep in mind while interpreting time trends? [9+3]",
"LEQ", ["2011","2014"])
story.append(ans_box([
">>Types of Time Trends in Disease Occurrence:",
"• Secular (long-term) trend: Changes over years/decades. e.g., decline of smallpox after vaccination, rise of lung cancer with tobacco.",
"• Cyclic/periodic trend: Regular recurrence. e.g., influenza every 2-3 years; cholera pandemics.",
"• Seasonal variation: Related to climate/season. e.g., diarrhoea in summer, respiratory infections in winter.",
"• Point epidemic: Sudden sharp rise in single exposure event. e.g., food poisoning after a wedding feast.",
"• Propagated/progressive epidemic: Person-to-person spread; multiple waves. e.g., COVID-19, cholera.",
">>Changes to consider while interpreting time trends:",
"• Changes in diagnostic criteria or classification (ICD revisions)",
"• Changes in disease notification and registration systems",
"• Changes in the age-sex composition of the population (demographic shifts)",
"• Artefactual changes due to population increase",
"• Availability and access to health services improving reporting",
]))
story.append(sp(6))
# SAQ 1
story += q_block(3,
"What are the uses of epidemiology? (Morris's 7 uses) ★ REPEAT",
"SAQ", ["2008","2011","2015","2019"])
story.append(ans_box([
"Morris (1957) identified 7 uses of epidemiology:",
"• 1. To study historically the rise and fall of disease in the population",
"• 2. Community diagnosis — quantifying health problems in terms of rates",
"• 3. Working of health services — evaluating effectiveness",
"• 4. Estimating individual risks",
"• 5. Identification of syndromes",
"• 6. Completing the clinical picture of a disease",
"• 7. Search for causes — identifying risk factors",
]))
story.append(sp(6))
# SN 1
story += q_block(4,
"Write a short note on Cohort study. ★ REPEAT",
"SN", ["2008","2010","2015","2018"])
story.append(ans_box([
"• A cohort study follows a group (cohort) of exposed and unexposed individuals forward in time.",
"• Direction: Prospective (exposure → outcome).",
"• Outcome measure: Relative Risk (RR) = Incidence in exposed / Incidence in unexposed.",
"• Types: Prospective cohort, Retrospective (historical) cohort, Ambidirectional cohort.",
"• Advantages: Establishes temporal relationship; calculates incidence and RR directly; no recall bias.",
"• Disadvantages: Expensive, time-consuming, loss to follow-up, not suitable for rare diseases.",
"• Example: Doll & Hill's classic study on British doctors — smoking and lung cancer (1951–2001).",
]))
story.append(sp(6))
# SN 2
story += q_block(5,
"Describe Randomised Controlled Trial (RCT). Why is it called the gold standard?",
"SN", ["2014","2016","2020"])
story.append(ans_box([
"• An experimental study where participants are randomly allocated to intervention (treatment) or control (placebo/standard care) groups.",
"• Randomisation: Eliminates selection bias; ensures equal distribution of confounders.",
"• Blinding: Single-blind (subject unaware); Double-blind (subject + investigator unaware); Triple-blind (+ data analyst).",
"• Outcome measure: Relative Risk, Absolute Risk Reduction, NNT (Number Needed to Treat).",
"• Gold standard because: Controls for known and unknown confounders; strongest evidence for causality.",
"• Limitations: Expensive; ethical constraints; cannot study rare outcomes.",
]))
story.append(sp(6))
# SN 3
story += q_block(6,
"Differentiate Incidence and Prevalence. Give the relationship between them.",
"SN", ["2009","2012","2016","2019","2022"])
story.append(simp_table(
["Feature","Incidence","Prevalence"],
[
["Definition","New cases in a defined period","All cases (old+new) at a given time"],
["Time","Rate (requires defined period)","Point or period measure"],
["Formula","New cases / Pop. at risk × 1000","All cases / Total pop. × 1000"],
["Best for","Acute diseases, aetiology","Chronic diseases, service planning"],
],
[36*mm, 55*mm, 55*mm]
))
story.append(sp(4))
story.append(note("Relationship: Prevalence ≈ Incidence × Mean Duration of Disease (for stable diseases)"))
story.append(sp(6))
# R&J 1
story += q_block(7,
"Cohort studies are not always prospective — Explain.",
"R&J", ["2015"])
story.append(ans_box([
"• Cohort studies follow a defined group over time to observe outcomes — but the time direction can be:",
"• Prospective cohort: Exposure is defined now, followed forward into the future.",
"• Retrospective (historical) cohort: Both exposure and outcome have already occurred; uses past records.",
"• Ambidirectional cohort: Combines both — historical records used + future follow-up added.",
"• Hence, the defining feature of a cohort study is the group (cohort), not the time direction.",
]))
story.append(sp(6))
# SN 4 — Hill's criteria
story += q_block(8,
"Enumerate the criteria for establishing causal association (Hill's criteria). ★ REPEAT",
"SN", ["2010","2013","2017","2020","2023"])
story.append(ans_box([
"Bradford Hill (1965) — 9 criteria:",
"• 1. Strength of association (high RR/OR)",
"• 2. Consistency (repeated in different studies, populations)",
"• 3. Specificity (one cause → one effect)",
"• 4. Temporality — MOST IMPORTANT: cause must precede the effect",
"• 5. Biological gradient (dose-response relationship)",
"• 6. Biological plausibility (mechanistically logical)",
"• 7. Coherence with existing knowledge",
"• 8. Experiment — removal of cause reduces disease",
"• 9. Analogy — similar agents cause similar effects",
]))
story.append(sp(6))
# SN 5 — Descriptive Epi
story += q_block(9,
"What is descriptive epidemiology? Describe the person, place, and time variables.",
"SN", ["2009","2011","2014","2018"])
story.append(ans_box([
"Descriptive epidemiology studies disease distribution to formulate aetiological hypotheses.",
"• PERSON: Age, sex, race, religion, occupation, marital status, socioeconomic status, lifestyle",
"• PLACE: International comparison, national comparison, urban vs rural, urban vs urban, local differences (clustering)",
"• TIME: Secular (long-term) trends, cyclic/periodic variation, seasonal variation, point epidemic, short-term fluctuations",
]))
story.append(sp(6))
# R&J 2
story += q_block(10,
"Carriers are more dangerous than cases — Justify.",
"R&J", ["2009","2013","2015"])
story.append(ans_box([
"• Carriers harbour and shed the infectious agent without showing clinical disease.",
"• They are undetected — not isolated, not treated, move freely in the community.",
"• Examples: Typhoid Mary (Salmonella typhi); poliovirus carriers spreading polio.",
"• In contrast, overt cases are identifiable, often isolated, and treated.",
"• Therefore carriers are more dangerous for disease spread than clinical cases.",
]))
story.append(sp(6))
story.append(PageBreak())
# ════════════════════════════════════════════════════════════
# TOPIC 2 — IMMUNIZATION
# ════════════════════════════════════════════════════════════
story.append(topic_bar("TOPIC 2 — Immunization & Disease Prevention", GREEN))
story.append(sp(4))
story.append(note("Cold chain, AEFI, UIP schedule, and levels of prevention are very high-yield short note topics."))
story.append(sp(6))
# LEQ 3
story += q_block(11,
"Describe the Universal Immunization Programme (UIP) / National Immunization Schedule in India. ★ REPEAT",
"LEQ", ["2008","2012","2015","2018","2021"])
story.append(ans_box([
"India's UIP was launched in 1985 as part of the National Health Mission.",
"Target: Children under 2 years, pregnant women.",
"Goal: Initially 'Universal Immunization by 1990'; current goal: ≥90% coverage.",
]))
story.append(simp_table(
["Vaccine","When Given","Route","Disease Prevented"],
[
["BCG","At birth","Intradermal (left deltoid)","Tuberculosis, TB meningitis"],
["OPV 0","At birth (within 24 hrs)","Oral","Poliomyelitis"],
["Hep B birth dose","Within 24 hours of birth","IM (anterolateral thigh)","Hepatitis B"],
["OPV 1,2,3 + IPV","6, 10, 14 weeks","Oral + IM","Polio (OPV+IPV)"],
["Pentavalent (DPT+HepB+Hib)","6, 10, 14 weeks","IM","Diphtheria,Pertussis,Tetanus,Hep B,Hib"],
["Rotavirus vaccine","6, 10, 14 weeks","Oral","Rotavirus diarrhoea"],
["PCV (Pneumococcal)","6 wks, 14 wks, 9 months","IM","Pneumococcal disease"],
["Measles-Rubella (MR)","9-12 months, 16-24 months","SC (right upper arm)","Measles + Rubella"],
["JE vaccine","9-12 months (endemic areas)","SC","Japanese Encephalitis"],
["DPT booster 1st","16-24 months","IM","Booster for DPT"],
["DPT booster 2nd","5-6 years","IM","Booster for DPT"],
["TT (children)","10 years, 16 years","IM","Tetanus"],
["TT/Td (pregnant women)","2 doses in pregnancy","IM","Neonatal & maternal tetanus"],
],
[35*mm, 30*mm, 22*mm, W-36*mm-87*mm]
))
story.append(sp(6))
# SAQ 2
story += q_block(12,
"Write a short note on AEFI — Adverse Events Following Immunization. ★ REPEAT",
"SAQ", ["2013","2016","2018","2020"])
story.append(ans_box([
"AEFI = any untoward medical occurrence following immunization without necessarily a causal relationship.",
">>CIOMS/WHO 2012 Classification:",
"• 1. Vaccine product-related reaction — inherent properties of vaccine (e.g., fever after DPT)",
"• 2. Vaccine quality defect-related reaction — manufacturing defects",
"• 3. Immunization error-related reaction — wrong dose/site/technique, reuse of needle",
"• 4. Immunization anxiety-related reaction — vasovagal syncope from anxiety",
"• 5. Coincidental event — temporally associated but NOT caused by vaccine",
]))
story.append(sp(6))
# SN 6
story += q_block(13,
"What is Cold Chain? Describe the equipment used and the Shake Test. ★ REPEAT",
"SN", ["2007","2010","2014","2017","2022"])
story.append(ans_box([
"Cold chain: System of storing and transporting vaccines at required temperature from manufacture to point of use.",
">>Temperature Requirements:",
"• Most vaccines (DPT, TT, Hep B, BCG, MR): +2°C to +8°C",
"• OPV: -20°C (short-term storage: +2 to +8°C acceptable)",
">>Equipment:",
"• Walk-in cold rooms and walk-in freezers (state/district level)",
"• Ice-Lined Refrigerators (ILR): District/PHC level",
"• Deep Freezers: For OPV storage at -20°C",
"• Vaccine Carriers with ice packs: For field outreach",
"• Cold Boxes: Transport over 24-48 hours",
">>Shake Test (for freeze-sensitive vaccines — DPT, TT, Hep B, DT, Td):",
"• Freeze a control vial deliberately.",
"• Shake test vial and control vial simultaneously.",
"• If sedimentation in test vial is SLOWER than frozen control → vaccine NOT damaged (use it).",
"• If sedimentation SIMILAR or FASTER in test vial → vaccine DAMAGED (discard, do not use).",
]))
story.append(sp(6))
# SN 7 — Levels of Prevention
story += q_block(14,
"Enumerate and explain the levels of prevention with examples (Leavell & Clark). ★ REPEAT",
"SN", ["2008","2011","2014","2017","2020","2023"])
story.append(simp_table(
["Level","Stage","Examples"],
[
["Health Promotion","Pre-pathogenesis","Good nutrition, health education, adequate housing, recreational facilities"],
["Specific Protection","Pre-pathogenesis","Immunization, use of helmets, fluoridation of water, condom use"],
["Early Diagnosis & Treatment","Early pathogenesis","Screening tests, case detection, treatment of TB contacts"],
["Disability Limitation","Late pathogenesis","Treatment to limit complications, insulin for diabetes, surgery for tumour"],
["Rehabilitation","Outcome/aftermath","Physiotherapy, prosthetics, occupational therapy, social reintegration"],
],
[40*mm, 35*mm, W-36*mm-75*mm]
))
story.append(sp(4))
story.append(note("Primary = Levels 1+2 (pre-pathogenesis) | Secondary = Level 3 | Tertiary = Levels 4+5"))
story.append(sp(6))
# SN 8 — Active vs Passive
story += q_block(15,
"Differentiate Active and Passive Immunity. Give examples.",
"SN", ["2009","2013","2016","2019"])
story.append(simp_table(
["Feature","Active Immunity","Passive Immunity"],
[
["Source","Body produces own antibodies","Ready-made antibodies from external source"],
["Onset","Slow — 1-2 weeks","Immediate"],
["Duration","Long-lasting (years/life)","Short — 3-4 weeks"],
["Memory","Yes (immunological memory)","No memory"],
["Example","BCG, OPV, MMR vaccines","Immunoglobulin, maternal antibodies via placenta, anti-snake venom"],
],
[36*mm, 55*mm, 55*mm]
))
story.append(sp(6))
# R&J 3
story += q_block(16,
"Live vaccines are more potent immunising agents than killed vaccines — Why?",
"R&J", ["2008","2010","2015"])
story.append(ans_box([
"• Live attenuated vaccines replicate in the host (though without causing disease).",
"• They stimulate both humoral (antibody) AND cell-mediated immunity.",
"• They produce longer-lasting immunity with fewer doses (often single dose).",
"• They mimic natural infection more closely.",
"• Killed vaccines stimulate only humoral immunity and require boosters.",
"• Example: BCG (live) vs DPT (killed) — BCG produces stronger cellular immunity against TB.",
]))
story.append(sp(6))
story.append(PageBreak())
# ════════════════════════════════════════════════════════════
# TOPIC 3 — SCREENING TESTS
# ════════════════════════════════════════════════════════════
story.append(topic_bar("TOPIC 3 — Screening Tests", HexColor("#1a7a4a")))
story.append(sp(4))
story.append(note("Sensitivity, specificity, PPV, NPV formulas MUST be known. Criteria for screening is a very common LEQ."))
story.append(sp(6))
# LEQ 4
story += q_block(17,
"Discuss the criteria for a good screening programme. ★ REPEAT",
"LEQ", ["2010","2012","2015","2018","2021"])
story.append(ans_box([
"Screening: Testing for disease in individuals NOT seeking health care.",
"Criteria are based on two considerations: (A) the DISEASE and (B) the SCREENING TEST.",
">>A. Criteria for the DISEASE (Wilson & Jungner, WHO 1968):",
"• 1. Must be an important health problem (high prevalence/severity)",
"• 2. Should have a recognizable latent or early asymptomatic stage",
"• 3. Natural history must be adequately understood",
"• 4. A test must exist that detects the disease before symptoms",
"• 5. Facilities available for confirmation of diagnosis",
"• 6. There is an effective, acceptable treatment",
"• 7. Agreed policy on whom to treat (border-line cases)",
"• 8. Early detection and treatment reduces morbidity and mortality",
"• 9. Expected benefits exceed risks and costs",
">>B. Criteria for the SCREENING TEST:",
"• 1. Acceptability — not painful, embarrassing, or invasive",
"• 2. Repeatability (Reliability) — consistent results; low observer + subject + technical variation",
"• 3. Validity — ability to separate diseased from non-diseased: Sensitivity + Specificity",
"• 4. Yield — brings previously unrecognized disease to treatment",
"• 5. Simplicity, safety, rapidity, ease of administration, low cost",
]))
story.append(sp(6))
# SN 9
story += q_block(18,
"Define and calculate Sensitivity, Specificity, PPV and NPV from a 2×2 table. ★ REPEAT",
"SN", ["2009","2012","2015","2017","2020","2022"])
story.append(ans_box([
"The 2×2 screening table:",
]))
story.append(simp_table(
["Test Result","Disease Present (+)","Disease Absent (−)","Total"],
[
["Test Positive (+)","a = True Positive (TP)","b = False Positive (FP)","a+b"],
["Test Negative (−)","c = False Negative (FN)","d = True Negative (TN)","c+d"],
["Total","a+c","b+d","N"],
],
[36*mm, 42*mm, 42*mm, 26*mm]
))
story.append(ans_box([
"• Sensitivity = a/(a+c) × 100 → % of true positives correctly detected (few FN)",
"• Specificity = d/(b+d) × 100 → % of true negatives correctly identified (few FP)",
"• PPV (Positive Predictive Value) = a/(a+b) × 100 → probability a +ve test = truly diseased",
"• NPV (Negative Predictive Value) = d/(c+d) × 100 → probability a −ve test = truly disease-free",
"• Validity = Sensitivity + Specificity (validity has two components)",
]))
story.append(note("SNOUT: High SeNsitivity rules OUT disease | SPIN: High SPecificity rules IN disease | PPV ↑ with ↑ prevalence"))
story.append(sp(6))
# SN 10
story += q_block(19,
"What are the types of screening? Describe multiphasic screening. ★ REPEAT",
"SN", ["2008","2011","2014","2016","2020"])
story.append(ans_box([
">>Types of Screening (3):",
"• 1. Mass screening: Whole population screened irrespective of risk. e.g., TB X-ray survey of community.",
"• 2. High-risk / Selective screening: Applied to high-risk groups based on epidemiology. e.g., cancer cervix screening in low SES; screening family members of diabetics.",
"• 3. Multiphasic screening: Application of 2 or more tests simultaneously. e.g., health questionnaire + blood tests + lung function + audiometry in one session.",
">>Multiphasic Screening — Key Points:",
"• Enjoyed popularity in UK and USA; mass utilisation in the 1970s.",
"• RCTs in UK and USA showed NO significant reduction in mortality/morbidity.",
"• Increased cost of health services without observable benefit.",
"• Most tests in multiphasic screening have NOT been validated.",
"• Currently, its utility is doubted and not routinely recommended.",
]))
story.append(sp(6))
# SAQ 3
story += q_block(20,
"Differentiate between screening test, case-finding, and diagnostic test.",
"SAQ", ["2010","2013","2018"])
story.append(simp_table(
["Feature","Screening","Case-finding","Diagnostic Test"],
[
["Population","Asymptomatic, NOT seeking care","Patients seeking care for OTHER reasons","Patients with signs/symptoms"],
["Initiated by","Public health / medical personnel","Clinician (opportunistic)","Clinician"],
["Example","Neonatal PKU screen; AIDS test in blood donors","VDRL in pregnant women at ANC","VDRL in patient with secondary syphilis"],
],
[28*mm, 42*mm, 42*mm, 42*mm]
))
story.append(sp(6))
# SN 11
story += q_block(21,
"Describe the uses of screening (4 uses).",
"SN", ["2009","2012","2015"])
story.append(ans_box([
"• 1. Case detection (Prescriptive screening): Presumptive identification of unrecognized disease for patient benefit. e.g., neonatal screening for PKU.",
"• 2. Control of disease (Prospective screening): Screening of people to protect others. e.g., screening immigrants for TB to protect home population.",
"• 3. Research purposes: To obtain basic knowledge about natural history; prevalence (initial screen) vs incidence (subsequent screens).",
"• 4. Health education: Raises community awareness about disease risk.",
]))
story.append(sp(6))
story.append(PageBreak())
# ════════════════════════════════════════════════════════════
# TOPIC 4 — ENVIRONMENTAL HEALTH
# ════════════════════════════════════════════════════════════
story.append(topic_bar("TOPIC 4 — Environmental Health", PURPLE))
story.append(sp(4))
story.append(note("Water purification is a very common LEQ. Air and noise pollution health effects, and chlorination details are frequent short notes."))
story.append(sp(6))
# LEQ 5
story += q_block(22,
"Define safe water. Enumerate the sources of water. Describe the various methods of purification of water on a small scale. ★ REPEAT",
"LEQ", ["2009","2013","2016","2019","2022"])
story.append(ans_box([
">>Safe Water (WHO): Water free from disease-causing organisms, harmful chemicals, and excessive minerals.",
">>Sources of Water:",
"• Surface water: Rivers, lakes, ponds, streams",
"• Ground water: Dug wells, tube wells, artesian wells, springs",
"• Rainwater: Collected via rooftop catchment",
">>Methods of Water Purification:",
">>1. Storage and Sedimentation:",
"• Plain sedimentation — larger particles settle by gravity; kills 50-90% bacteria.",
"• Chemical coagulation — alum (aluminium sulphate) forms floc; removes turbidity.",
">>2. Filtration:",
"• Slow sand filter: Schmutzdecke biological layer removes 98-99% bacteria; flow rate 0.1-0.4 m/hr.",
"• Rapid sand filter: Mechanical; flow rate 5-15 m/hr; less effective biologically; needs pre-coagulation.",
"• Pressure filter: Portable, domestic use.",
">>3. Disinfection (MOST IMPORTANT):",
"• Chlorination: Most widely used; Cl₂ or bleaching powder or sodium hypochlorite.",
" Residual chlorine required: 0.5 mg/L after 1 hour contact time.",
" Breakpoint chlorination: Addition of chlorine until residual free chlorine appears.",
"• Boiling: Most reliable for household use; kills ALL pathogens including spores.",
"• UV radiation: UV at 254 nm damages DNA of pathogens; no chemical taste; no residual effect.",
"• Ozone: Powerful oxidant; no taste/odour; costly.",
">>WHO Water Quality Standards:",
"• pH: 6.5–8.5 | Turbidity: <1 NTU | E. coli: 0/100 mL | Total coliforms: 0/100 mL",
]))
story.append(sp(6))
# SN 12
story += q_block(23,
"Describe the health effects of air pollution. Name the important air pollutants. ★ REPEAT",
"SN", ["2010","2013","2016","2019","2022"])
story.append(simp_table(
["Pollutant","Source","Main Health Effects"],
[
["SPM / PM2.5","Combustion, vehicles, industries","Respiratory diseases, lung cancer; PM2.5 penetrates deep alveoli"],
["SO₂","Burning coal, smelters","Bronchospasm, acid rain, COPD exacerbations"],
["CO","Incomplete combustion","Carboxyhaemoglobin → tissue hypoxia → death"],
["NO₂","Vehicle exhaust, industrial","Respiratory irritant; contributes to photochemical smog"],
["Lead (Pb)","Industries, old leaded petrol","Neurotoxicity (esp. children), anaemia, nephropathy"],
["Ozone (O₃)","Photochemical reaction (NOx + VOC)","Eye and lung irritant, throat irritation"],
["Benzene","Petrol combustion","Leukaemia, bone marrow suppression"],
],
[28*mm, 42*mm, W-36*mm-70*mm]
))
story.append(sp(4))
story.append(note("Overall health effects: COPD, asthma, bronchitis, lung cancer, cardiovascular disease, premature death."))
story.append(sp(6))
# SN 13
story += q_block(24,
"Write a short note on noise pollution — health effects and permissible limits.",
"SN", ["2011","2014","2017","2020"])
story.append(ans_box([
">>Permissible Limits (WHO):",
"• Residential areas: 45 dB (day), 35 dB (night)",
"• Commercial areas: 55 dB (day), 45 dB (night)",
"• Industrial areas: 75 dB",
"• Hearing damage threshold: 85 dB for 8 hours (OSHA standard)",
">>Health Effects:",
"• Auditory effects: Noise-Induced Hearing Loss (NIHL); Temporary Threshold Shift (TTS) — reversible; Permanent Threshold Shift (PTS) — irreversible; Tinnitus.",
"• Non-auditory effects: Hypertension, cardiovascular effects (↑BP, ↑heart rate), sleep disturbance, psychological effects (stress, annoyance), reduced concentration and productivity.",
">>Control measures:",
"• Engineering controls: At source (quieter machinery), path (sound barriers), receiver (ear muffs, ear plugs).",
"• Legislative measures: Noise Pollution (Regulation & Control) Rules, 2000 (India).",
]))
story.append(sp(6))
# R&J 4
story += q_block(25,
"Chlorination is an effective method of water disinfection — Justify.",
"R&J", ["2018"])
story.append(ans_box([
"• Chlorine is a powerful oxidant that kills bacteria, viruses, and some protozoa.",
"• It provides a measurable residual effect (0.5 mg/L free residual chlorine) protecting against re-contamination.",
"• Cheap, readily available (bleaching powder, chlorine tablets, liquid chlorine).",
"• Easy to apply at household, community, or municipal level.",
"• Effective at the doses used, not harmful to humans at residual levels.",
"• Proven to eliminate waterborne diseases like cholera, typhoid, and dysentery.",
"• Limitation: Does not kill all cysts (e.g., Giardia, Cryptosporidium at standard doses).",
]))
story.append(sp(6))
story.append(PageBreak())
# ════════════════════════════════════════════════════════════
# TOPIC 5 — INTERNATIONAL HEALTH
# ════════════════════════════════════════════════════════════
story.append(topic_bar("TOPIC 5 — International Health", AMBER))
story.append(sp(4))
story.append(note("Functions of WHO and SDG Goal 3 are standard short note / short answer questions every year."))
story.append(sp(6))
# SN 14
story += q_block(26,
"Write a short note on the Functions of World Health Organization (WHO). ★ REPEAT",
"SN", ["2009","2012","2015","2018","2021"])
story.append(ans_box([
">>WHO — Key Facts:",
"• Established: 7 April 1948 (World Health Day); Headquarters: Geneva, Switzerland.",
"• Member states: 194; 6 regional offices (SEARO for South-East Asia).",
"• Part of the United Nations (UN) system.",
">>WHO Definition of Health (1948):",
"\"Health is a state of complete physical, mental and social well-being and not merely the absence of disease or infirmity.\"",
">>Functions of WHO (Constitutional mandate):",
"• 1. Directing and coordinating authority on international health",
"• 2. Assisting governments to strengthen national health services",
"• 3. Providing technical assistance and emergency aid upon request",
"• 4. Stimulating and advancing work to eradicate epidemic, endemic, and other diseases",
"• 5. Promoting maternal and child health and welfare",
"• 6. Fostering activities in the field of mental health",
"• 7. Promoting research in health",
"• 8. Developing international standards for biological, pharmaceutical, and food products",
"• 9. Revising International Classification of Diseases (ICD) — currently ICD-11 (2019)",
"• 10. Promoting universal health coverage (UHC)",
]))
story.append(sp(6))
# SN 15
story += q_block(27,
"What are the Sustainable Development Goals (SDGs)? Describe SDG Goal 3 related to health.",
"SN", ["2016","2018","2020","2022"])
story.append(ans_box([
"• SDGs replaced Millennium Development Goals (MDGs) in September 2015.",
"• 17 goals, 169 targets — to be achieved by 2030.",
"• Adopted by 193 UN member states under the 2030 Agenda for Sustainable Development.",
">>SDG Goal 3: 'Ensure healthy lives and promote well-being for all at all ages'",
"Key targets:",
"• 3.1: Reduce global maternal mortality ratio to <70 per 100,000 live births",
"• 3.2: End preventable deaths of newborns and children under 5",
"• 3.3: End AIDS, TB, malaria, and neglected tropical diseases (NTDs)",
"• 3.4: Reduce premature mortality from non-communicable diseases by one-third",
"• 3.5: Strengthen prevention and treatment of substance abuse",
"• 3.8: Achieve Universal Health Coverage (UHC)",
"• 3.b: Support R&D for vaccines and medicines for developing countries",
"• 3.d: Strengthen capacity for early warning, risk reduction of national/global health risks",
]))
story.append(sp(6))
# SAQ 4
story += q_block(28,
"Differentiate between MDGs (Millennium Development Goals) and SDGs.",
"SAQ", ["2017","2019"])
story.append(simp_table(
["Feature","MDGs (2000–2015)","SDGs (2015–2030)"],
[
["Number","8 goals","17 goals, 169 targets"],
["Focus","Developing countries","All countries (universal)"],
["Health goal","Goals 4, 5, 6 (child, maternal, HIV/malaria)","Goal 3 — comprehensive well-being"],
["Preparation","Top-down by UN experts","Bottom-up with civil society input"],
["Scope","Primarily health and poverty","Health + climate + inequality + all sectors"],
],
[36*mm, 55*mm, 55*mm]
))
story.append(sp(6))
story.append(PageBreak())
# ════════════════════════════════════════════════════════════
# TOPIC 6 — ESSENTIAL & COUNTERFEIT MEDICINES
# ════════════════════════════════════════════════════════════
story.append(topic_bar("TOPIC 6 — Essential Medicines & Counterfeit Medicines", RED))
story.append(sp(4))
story.append(note("This is a newer topic in the ESIC syllabus. Focus on WHO definition, NLEM, criteria for selection, and health hazards of counterfeits."))
story.append(sp(6))
# LEQ 6
story += q_block(29,
"What are essential medicines? Describe the criteria for selection of essential medicines. Write a note on India's NLEM.",
"LEQ", ["2015","2018","2020","2023"])
story.append(ans_box([
">>WHO concept of Essential Medicines — introduced in 1977.",
">>WHO Definition:",
"\"Essential medicines are those that satisfy the priority health care needs of the population. They are selected with due regard to disease prevalence, evidence on efficacy and safety, and comparative cost-effectiveness.\"",
"They should be: available at all times, adequate amounts, appropriate dosage forms, at affordable price.",
">>Criteria for Selection:",
"• 1. Relevance — relevant to prevalent diseases in the country",
"• 2. Evidence of efficacy and safety — established through clinical trials",
"• 3. Adequate quality — bioavailability and stability guaranteed",
"• 4. Cost-effectiveness — should be most cost-effective available option",
"• 5. Accessibility — generic forms available; not patent-locked where possible",
"• 6. Single drugs preferred over FDC (fixed-dose combinations) unless proven advantageous",
">>India's National List of Essential Medicines (NLEM):",
"• Published by Ministry of Health & Family Welfare.",
"• Currently: NLEM 2022 — 384 medicines.",
"• Drugs on NLEM are subject to price control by National Pharmaceutical Pricing Authority (NPPA).",
"• Medicines are available at subsidised rates in government facilities.",
"• NLEM is aligned with WHO Model Essential Medicines List (updated every 2 years).",
]))
story.append(sp(6))
# SN 16
story += q_block(30,
"Define counterfeit medicines. Describe their types, health hazards, and prevention.",
"SN", ["2016","2018","2021"])
story.append(ans_box([
">>WHO Definition: A medicine that is deliberately and fraudulently mislabelled with respect to identity and/or source; applies to both branded and generic products.",
">>Types of Counterfeiting:",
"• 1. No active ingredient at all",
"• 2. Wrong / insufficient active ingredient",
"• 3. Wrong packaging, labelling, or expiry date",
"• 4. Contaminated product (wrong or dangerous substance)",
">>Health Hazards:",
"• Treatment failure — no/insufficient active drug (antimalarials, antibiotics)",
"• Drug resistance — sub-therapeutic doses promote antimicrobial resistance",
"• Toxic effects — wrong ingredients or contaminants",
"• Death — documented cases with counterfeit injections, IV fluids, insulin",
">>Magnitude: WHO estimates ~10% of global medicines are counterfeit; up to 30% in developing countries.",
">>Prevention:",
"• IMPACT (International Medical Products Anti-Counterfeiting Taskforce) — WHO",
"• Track and trace systems, holograms, QR codes, serialisation",
"• Strengthening pharmacovigilance systems",
"• Prosecution of counterfeiters under existing drug laws",
"• Public and prescriber awareness campaigns",
]))
story.append(sp(6))
story.append(PageBreak())
# ════════════════════════════════════════════════════════════
# MCQ BANK — 50 QUESTIONS
# ════════════════════════════════════════════════════════════
story.append(topic_bar("MCQ BANK — 50 Topic-wise Questions with Answers & Hints", DARK))
story.append(sp(4))
story.append(Paragraph(
"MCQs appear in all university exams (10 MCQs × 2 marks each = 20 marks in your internal). "
"Each MCQ below has 4 options, the correct answer marked, and a short memory hint.",
ATXT))
story.append(sp(6))
# ─ TOPIC 1: EPIDEMIOLOGY MCQs ─────────────────────────────
story.append(topic_bar("MCQs — Topic 1: Epidemiology & Epidemiological Methods", BLUE))
story.append(sp(4))
mcqs_epi = [
("1",
"The word 'epidemiology' is derived from the Greek word 'demos' which means:",
["Disease","People","Study","Epidemic"],
"b) People",
"Epi=among, Demos=people, Logos=study"),
("2",
"The study of the distribution and determinants of disease frequency in man was defined by:",
["Hippocrates","John Snow","MacMahon (1960)","Bradford Hill"],
"c) MacMahon (1960)",
"MacMahon's classic 1960 definition"),
("3",
"The MOST important criterion in Bradford Hill's criteria for causation is:",
["Strength of association","Consistency","Temporality","Biological plausibility"],
"c) Temporality",
"Cause MUST precede effect — this is the only non-negotiable criterion"),
("4",
"Which epidemiological study design gives the STRONGEST evidence for causality?",
["Cross-sectional study","Case-control study","Cohort study","Randomised Controlled Trial (RCT)"],
"d) Randomised Controlled Trial (RCT)",
"RCT is the gold standard — randomisation controls all confounders"),
("5",
"In a case-control study, the measure of association calculated is:",
["Relative Risk (RR)","Odds Ratio (OR)","Attributable Risk","Incidence Rate"],
"b) Odds Ratio (OR)",
"Case-control → OR; Cohort → RR"),
("6",
"Prevalence of a disease is related to incidence by the formula:",
["Prevalence = Incidence / Duration","Prevalence = Incidence × Duration","Prevalence = Incidence + Duration","Prevalence = Incidence − Duration"],
"b) Prevalence = Incidence × Duration",
"For stable endemic disease: P ≈ I × D"),
("7",
"A cross-sectional study measures:",
["Incidence","Relative risk","Prevalence","Attributable risk"],
"c) Prevalence",
"Cross-sectional = snapshot = prevalence"),
("8",
"Morris identified how many uses of epidemiology?",
["5","6","7","9"],
"c) 7",
"Morris (1957) — 7 uses"),
("9",
"The term 'triple blinding' in an RCT refers to blinding of:",
["Subject only","Subject + investigator","Subject + investigator + data analyst","Subject + investigator + statistician + regulator"],
"c) Subject + investigator + data analyst",
"Triple blind: subject, investigator, and analyst all unaware"),
("10",
"Which measure of disease frequency is best for studying the aetiology (cause) of acute diseases?",
["Point prevalence","Period prevalence","Incidence rate","Proportionate mortality"],
"c) Incidence rate",
"Incidence = new cases = directly related to risk and causation"),
]
for num, stem, opts, ans, hint in mcqs_epi:
story.append(mcq_block(num, stem, opts, ans, hint))
story.append(sp(4))
story.append(sp(6))
# ─ TOPIC 2: IMMUNIZATION MCQs ─────────────────────────────
story.append(topic_bar("MCQs — Topic 2: Immunization & Disease Prevention", GREEN))
story.append(sp(4))
mcqs_imm = [
("11",
"India's Universal Immunization Programme (UIP) was launched in the year:",
["1978","1982","1985","1990"],
"c) 1985",
"UIP launched 1985; EPI (global) was 1974 by WHO"),
("12",
"The Hepatitis B birth dose should be administered within:",
["1 hour of birth","6 hours of birth","24 hours of birth","48 hours of birth"],
"c) 24 hours of birth",
"Hep B birth dose — within 24 hours"),
("13",
"BCG vaccine is given by which route?",
["Oral","Subcutaneous","Intradermal","Intramuscular"],
"c) Intradermal",
"BCG = Intradermal, left deltoid region"),
("14",
"The correct storage temperature for OPV is:",
["+2°C to +8°C","+4°C to +10°C","-20°C","-40°C"],
"c) -20°C",
"OPV is heat-sensitive and light-sensitive — stored at -20°C"),
("15",
"The Shake Test is used to check damage to which type of vaccines?",
["Heat-sensitive vaccines","Freeze-sensitive vaccines","Live attenuated vaccines","Toxoid vaccines"],
"b) Freeze-sensitive vaccines",
"Shake test: DPT, TT, Hep B, DT — freeze-sensitive; freezing damages them"),
("16",
"Immunization is an example of which level of prevention?",
["Health promotion","Specific protection","Early diagnosis","Rehabilitation"],
"b) Specific protection",
"Level 2 of Leavell & Clark = specific protection"),
("17",
"An AEFI caused by fainting/vasovagal syncope from anxiety about the injection is classified as:",
["Vaccine product-related","Vaccine quality defect","Immunization error-related","Immunization anxiety-related"],
"d) Immunization anxiety-related",
"Vasovagal syncope from anxiety = anxiety-related AEFI"),
("18",
"Pentavalent vaccine given under UIP protects against all of the following EXCEPT:",
["Diphtheria","Pertussis","Measles","Haemophilus influenzae type b"],
"c) Measles",
"Pentavalent = DPT + Hep B + Hib. Measles covered by MR vaccine."),
("19",
"MR (Measles-Rubella) vaccine is given at:",
["6 weeks and 10 weeks","9-12 months and 16-24 months","At birth and 6 months","6 months and 12 months"],
"b) 9-12 months and 16-24 months",
"MR dose 1: 9-12 months; MR dose 2: 16-24 months (booster)"),
("20",
"Passive immunity is characterised by all of the following EXCEPT:",
["Immediate onset","Short duration","No immunological memory","Long duration"],
"d) Long duration",
"Passive immunity = immediate but short-lived (3-4 weeks); no memory"),
]
for num, stem, opts, ans, hint in mcqs_imm:
story.append(mcq_block(num, stem, opts, ans, hint))
story.append(sp(4))
story.append(sp(6))
story.append(PageBreak())
# ─ TOPIC 3: SCREENING MCQs ────────────────────────────────
story.append(topic_bar("MCQs — Topic 3: Screening Tests", HexColor("#1a7a4a")))
story.append(sp(4))
mcqs_scr = [
("21",
"Sensitivity of a screening test is defined as:",
["Ability to correctly identify those who have disease (true positive rate)","Ability to correctly identify those who do not have disease (true negative rate)","Probability that a positive test means disease is present","Probability that a negative test means disease is absent"],
"a) Ability to correctly identify those who have disease (true positive rate)",
"Sensitivity = TP/(TP+FN) × 100 — detects TRUE POSITIVES"),
("22",
"Specificity of a screening test is defined as:",
["TP/(TP+FN) × 100","TN/(TN+FP) × 100","TP/(TP+FP) × 100","TN/(TN+FN) × 100"],
"b) TN/(TN+FP) × 100",
"Specificity = TN/(TN+FP) — correctly identifies true negatives"),
("23",
"Which mnemonic helps remember that high Sensitivity rules OUT disease?",
["SPIN","SNOUT","SOAP","STOP"],
"b) SNOUT",
"SNOUT = SeNsitivity rules OUT; SPIN = SPecificity rules IN"),
("24",
"Positive Predictive Value (PPV) of a test INCREASES when:",
["Prevalence of disease in the population decreases","Sensitivity of the test decreases","Prevalence of disease in the population increases","Specificity decreases"],
"c) Prevalence of disease in the population increases",
"PPV is directly proportional to disease prevalence"),
("25",
"An ideal screening test requires which combination?",
["High sensitivity, low specificity","Low sensitivity, high specificity","High sensitivity, high specificity","Low sensitivity, low specificity"],
"c) High sensitivity, high specificity",
"Ideal test = catches all true cases (high Se) + correctly excludes non-cases (high Sp)"),
("26",
"Multiphasic screening refers to:",
["Screening a population in multiple phases over time","Application of two or more screening tests simultaneously","Screening different age groups separately","Screening only high-risk populations"],
"b) Application of two or more screening tests simultaneously",
"Multiphasic = multiple tests at one visit/one time"),
("27",
"The criteria for screening were originally described by:",
["Bradford Hill","Wilson and Jungner (WHO 1968)","Morris","MacMahon"],
"b) Wilson and Jungner (WHO 1968)",
"Wilson & Jungner's 1968 WHO paper — 10 classical criteria for screening"),
("28",
"Lead time bias in screening refers to:",
["Screening detects disease earlier, giving the illusion of longer survival even if no actual benefit","More cancers being detected in screened than unscreened populations","Screened populations being healthier than unscreened","Overdiagnosis of minor abnormalities"],
"a) Screening detects disease earlier, giving the illusion of longer survival even if no actual benefit",
"Lead time = time between screen detection and clinical detection; doesn't mean actual survival is longer"),
("29",
"Which of the following diseases is MOST suitable for mass screening in India?",
["Rabies","Pulmonary tuberculosis","Yellow fever","Ebola"],
"b) Pulmonary tuberculosis",
"TB = high prevalence, asymptomatic stage, effective treatment available = ideal screening candidate"),
("30",
"Repeatability of a screening test is affected by all of the following EXCEPT:",
["Observer variation","Biological (subject) variation","Errors in technical methods","Cost of the test"],
"d) Cost of the test",
"Repeatability depends on observer, subject, and technical variation — NOT cost"),
]
for num, stem, opts, ans, hint in mcqs_scr:
story.append(mcq_block(num, stem, opts, ans, hint))
story.append(sp(4))
story.append(sp(6))
story.append(PageBreak())
# ─ TOPIC 4: ENVIRONMENTAL HEALTH MCQs ─────────────────────
story.append(topic_bar("MCQs — Topic 4: Environmental Health", PURPLE))
story.append(sp(4))
mcqs_env = [
("31",
"The most effective and widely used method of water disinfection at community level is:",
["Boiling","UV irradiation","Chlorination","Ozonation"],
"c) Chlorination",
"Chlorination = cheap, effective, residual protection, easily measurable"),
("32",
"The residual free chlorine required in treated water supply is:",
["0.1 mg/L","0.2 mg/L","0.5 mg/L","1.0 mg/L"],
"c) 0.5 mg/L",
"0.5 mg/L after 1 hour contact time = standard"),
("33",
"The biological layer responsible for purification in a slow sand filter is:",
["Diatomaceous earth layer","Schmutzdecke","Activated carbon layer","Flocculation layer"],
"b) Schmutzdecke",
"Schmutzdecke (German: dirt cover) = biological film on slow sand filter surface"),
("34",
"Air pollutant that binds haemoglobin and causes tissue hypoxia is:",
["SO₂","NO₂","CO","PM2.5"],
"c) CO",
"CO binds Hb with 200× affinity of O₂ → carboxyhaemoglobin → tissue hypoxia"),
("35",
"The WHO permissible noise limit for residential areas during the day is:",
["35 dB","45 dB","55 dB","75 dB"],
"b) 45 dB",
"Residential day: 45 dB | night: 35 dB | industrial: 75 dB"),
("36",
"Hearing damage from noise begins at continuous exposure of approximately:",
["65 dB for 8 hours","75 dB for 8 hours","85 dB for 8 hours","95 dB for 8 hours"],
"c) 85 dB for 8 hours",
"OSHA threshold: 85 dB/8 hrs = action level for hearing protection"),
("37",
"Which water-borne disease is effectively prevented by breakpoint chlorination?",
["Amoebiasis","Giardiasis","Cholera","Cryptosporidiosis"],
"c) Cholera",
"Chlorination kills Vibrio cholerae; Cryptosporidium is resistant to standard chlorination"),
("38",
"The pH of potable water as per WHO standards should be:",
["5.5 to 7.0","6.5 to 8.5","7.0 to 8.0","5.0 to 9.0"],
"b) 6.5 to 8.5",
"WHO standard: pH 6.5-8.5; turbidity <1 NTU; E. coli 0/100 mL"),
("39",
"Noise-induced hearing loss (NIHL) characteristically first affects frequencies at:",
["500 Hz","1000 Hz","4000 Hz","8000 Hz"],
"c) 4000 Hz",
"NIHL first appears at 4000 Hz (4 kHz notch on audiogram)"),
("40",
"Which type of sand filter has a flow rate of 5–15 metres per hour?",
["Slow sand filter","Rapid sand filter","Pressure sand filter","Slow pressure filter"],
"b) Rapid sand filter",
"Rapid sand: 5-15 m/hr; Slow sand: 0.1-0.4 m/hr"),
]
for num, stem, opts, ans, hint in mcqs_env:
story.append(mcq_block(num, stem, opts, ans, hint))
story.append(sp(4))
story.append(sp(6))
story.append(PageBreak())
# ─ TOPIC 5: INTERNATIONAL HEALTH MCQs ─────────────────────
story.append(topic_bar("MCQs — Topic 5: International Health", AMBER))
story.append(sp(4))
mcqs_intl = [
("41",
"WHO was established on:",
["24 October 1945","7 April 1948","1 January 1950","15 August 1947"],
"b) 7 April 1948",
"WHO founded 7 April 1948 = World Health Day every year"),
("42",
"The headquarters of WHO is located in:",
["New York, USA","London, UK","Geneva, Switzerland","Vienna, Austria"],
"c) Geneva, Switzerland",
"WHO HQ: Geneva, Switzerland"),
("43",
"According to WHO's definition, health is:",
["Absence of disease and infirmity","Complete physical well-being only","Complete physical, mental and social well-being and not merely absence of disease","Physical and mental well-being only"],
"c) Complete physical, mental and social well-being and not merely absence of disease",
"WHO 1948 definition — exact wording often tested"),
("44",
"SDGs replaced MDGs in the year:",
["2000","2010","2015","2020"],
"c) 2015",
"SDGs adopted September 2015 for period 2015-2030"),
("45",
"The health-specific Sustainable Development Goal is:",
["SDG Goal 1","SDG Goal 2","SDG Goal 3","SDG Goal 6"],
"c) SDG Goal 3",
"SDG Goal 3: Ensure healthy lives and promote well-being for all at all ages"),
]
for num, stem, opts, ans, hint in mcqs_intl:
story.append(mcq_block(num, stem, opts, ans, hint))
story.append(sp(4))
story.append(sp(6))
# ─ TOPIC 6: ESSENTIAL & COUNTERFEIT MEDICINES MCQs ────────
story.append(topic_bar("MCQs — Topic 6: Essential Medicines & Counterfeit Medicines", RED))
story.append(sp(4))
mcqs_ess = [
("46",
"The concept of 'Essential Medicines' was introduced by WHO in the year:",
["1948","1964","1977","1984"],
"c) 1977",
"WHO introduced essential medicines concept in 1977; first WHO Model List published 1977"),
("47",
"India's National List of Essential Medicines (NLEM 2022) contains approximately how many medicines?",
["150","250","384","500"],
"c) 384",
"NLEM 2022: 384 medicines across 27 therapeutic categories"),
("48",
"Essential medicines should be available at all of the following EXCEPT:",
["At all times","In adequate amounts","Only at tertiary care level","At affordable prices"],
"c) Only at tertiary care level",
"Essential medicines should be available at ALL levels of health care"),
("49",
"According to WHO, approximately what percentage of global medicines are counterfeit?",
["1%","5%","10%","25%"],
"c) 10%",
"WHO estimate: ~10% globally; up to 30% in developing countries"),
("50",
"Which of the following is NOT a criterion for selecting essential medicines?",
["Evidence of efficacy and safety","Cost-effectiveness","Brand name preference","Relevance to prevalent diseases"],
"c) Brand name preference",
"Generic name preferred — brand name has no role in selection criteria"),
]
for num, stem, opts, ans, hint in mcqs_ess:
story.append(mcq_block(num, stem, opts, ans, hint))
story.append(sp(4))
story.append(sp(6))
story.append(PageBreak())
# ════════════════════════════════════════════════════════════
# QUICK REPEAT TRACKER
# ════════════════════════════════════════════════════════════
story.append(topic_bar("QUICK REPEAT TRACKER — Most Frequently Asked Questions", DARK))
story.append(sp(4))
story.append(Paragraph("Questions appearing in 3 or more years — learn these FIRST:", ATXT))
story.append(sp(4))
story.append(simp_table(
["#","Topic","Question","Type","Years Asked"],
[
["1","Epidemiology","Define epidemiology. Classify studies. Case-control vs Cohort","LEQ","2005,09,10,12,16,19"],
["2","Epidemiology","Hill's criteria for causation","SN","2010,13,17,20,23"],
["3","Epidemiology","Incidence vs Prevalence + Relationship","SN","2009,12,16,19,22"],
["4","Epidemiology","Cohort study — definition, types, merits","SN","2008,10,15,18,21"],
["5","Epidemiology","Descriptive epidemiology — person, place, time","SN","2009,11,14,18"],
["6","Immunization","Universal Immunization Programme / Nat. Immunization Schedule","LEQ","2008,12,15,18,21"],
["7","Immunization","AEFI — definition, CIOMS/WHO classification","SN/SAQ","2013,16,18,20"],
["8","Immunization","Cold chain — equipment, Shake Test","SN","2007,10,14,17,22"],
["9","Immunization","Levels of prevention (Leavell & Clark) with examples","SN","2008,11,14,17,20,23"],
["10","Screening","Criteria for a good screening programme","LEQ","2010,12,15,18,21"],
["11","Screening","Sensitivity, specificity, PPV, NPV — 2×2 table + formulas","SN","2009,12,15,17,20,22"],
["12","Screening","Types of screening — mass, selective, multiphasic","SN","2008,11,14,16,20"],
["13","Env. Health","Methods of water purification — slow sand, chlorination","LEQ","2009,13,16,19,22"],
["14","Env. Health","Health effects of air pollution + pollutants table","SN","2010,13,16,19,22"],
["15","Env. Health","Noise pollution — effects, permissible limits, control","SN","2011,14,17,20"],
["16","Intl. Health","Functions of WHO","SN","2009,12,15,18,21"],
["17","Intl. Health","SDG Goal 3 — targets related to health","SN","2016,18,20,22"],
["18","Ess. Medicines","Essential medicines — WHO definition, criteria, NLEM","LEQ","2015,18,20,23"],
["19","Counterfeit","Counterfeit medicines — definition, types, hazards","SN","2016,18,21"],
],
[8*mm, 28*mm, 65*mm, 18*mm, W-36*mm-119*mm]
))
story.append(sp(8))
story.append(HRFlowable(width="100%", thickness=1.2, color=ACCENT))
story.append(sp(5))
story.append(Paragraph(
"All questions compiled from RGUHS (2008–2022), MUHS (2010–2023), IQ City (2003–2018), NMC Curriculum banks, and PSM standard question banks. "
"Answers based on Park's Textbook of Preventive and Social Medicine.",
FOOT))
story.append(sp(3))
story.append(Paragraph("Good luck for your Internal Assessment — 14th July 2026, 1:00–4:00 PM | ESIC Medical College, Bengaluru", FOOT))
# ════════════════════════════════════════════════════════════
# BUILD
# ════════════════════════════════════════════════════════════
doc.build(story, onFirstPage=lambda c,d: on_cover(c,d) or c.saveState() or c.restoreState(),
onLaterPages=lambda c,d: on_page(c,d) or c.saveState() or c.restoreState())
print("PDF generated:", OUTPUT)
cd /home/daytona/workspace/community-medicine-guide && python generate_pyq_pdf.p…
python3 -c " f = open('/home/daytona/workspace/community-medicine-guide/generate…
cd /home/daytona/workspace/community-medicine-guide && python generate_pyq_pdf.p…
ls -lh /home/daytona/workspace/community-medicine-guide/Community_Medicine_PYQ_B…
Community Medicine PYQ Bank
PDF Document · PDF
Community Medicine PYQ Bank
PDF Document · PDF
| Section | Content |
|---|---|
| Cover + How to Use | Tag legend (LEQ/SAQ/SN/R&J/MCQ), exam format reminders |
| Topic 1 — Epidemiology | 10 PYQs with full model answers: Definition, Study designs, Cohort, RCT, Hill's 9 criteria, Incidence vs Prevalence, Descriptive Epi, Time trends, Carriers, Reasoning Qs |
| Topic 2 — Immunization | 6 PYQs: Full UIP schedule table, AEFI classification, Cold chain + Shake Test, Levels of prevention, Active vs Passive, Live vs Killed vaccines |
| Topic 3 — Screening | 5 PYQs: Criteria LEQ, 2×2 table + all 4 formulas, Types of screening, Screening vs Case-finding, Uses of screening |
| Topic 4 — Environmental Health | 4 PYQs: Water purification LEQ, Air pollution table, Noise limits, Justify chlorination |
| Topic 5 — International Health | 3 PYQs: WHO functions, SDG Goal 3, MDG vs SDG comparison |
| Topic 6 — Essential Medicines | 2 PYQs: Essential medicines LEQ with NLEM, Counterfeit medicines |
| 50 MCQs with Answers + Hints | 10 per topic, correct answer highlighted in green, memory hint below each |
| Quick Repeat Tracker | 19 questions asked 3+ times across years — sorted by topic |