attachment
attachment
attachment
attachment
attachment
attachment
attachment
attachment
attachment
attachment
attachment
attachment
attachment
attachment
attachment
attachment
attachment
attachment

From ch2 questions wise answers according to park's textbook

Reading File
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Reading File
Reading File
Reading File
Reading File
Reading File
Reading File
Reading File
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Reading File
Reading File
Reading File
Reading File
Reading File
Reading File
Here are all Chapter 2 questions answered according to Park's Textbook of Preventive and Social Medicine:

Chapter 2: Principles of Epidemiology - Complete Question-wise Answers


PART A: EPIDEMIC / OUTBREAK INVESTIGATION QUESTIONS


Q1. Define the term "Epidemic" [2 Marks] (Tamralipto GMC)

Epidemic (from Greek: Epi = upon; demos = people):
The occurrence in a community or region of cases of an illness, specific health-related behaviour, or other health-related events clearly in excess of normal expectancy. The community or region and the period in which the cases occur must be specified precisely.
  • Epidemicity is relative to usual frequency of the same disease in the same area, among the same population, at the same season
  • A single case of a communicable disease long absent from a population or first invasion by a new disease requires immediate reporting and full field investigation
  • Two cases associated in time and place may be sufficient evidence to constitute an epidemic
Park's Textbook of Preventive and Social Medicine, p. 151

Q2. Define Outbreak. How does Outbreak differ from Epidemic? (Burdwan Medical College, IQ City, CNMC)

Outbreak: An outbreak is defined as two or more cases of a disease linked in time and place, arising from a common source or chain of transmission. The term outbreak is often used for a more limited geographic area or for a smaller number of cases.
Differences between Epidemic and Outbreak:
FeatureEpidemicOutbreak
ScaleWider geographic spread, larger population affectedLimited to a small area / institution
NumberLarger number of casesRelatively fewer cases
UsageUsed for classical widespread eventsOften preferred for food poisoning, institutional clusters
ConnotationImplies public alarmLess alarming to public
In practice, "outbreak" is used when epidemic might cause unnecessary public alarm (e.g., a cluster of cases in a school or hospital).

Q3. Describe the Steps Involved in Investigation of an Epidemic [6-8 Marks] (Tamralipto, Barasat, Midnapore, IQ City, Burdwan, CNMC)

Objectives of epidemic investigation (Park): a) To define magnitude in terms of time, place, and person b) To determine conditions and factors responsible c) To identify cause, source(s) of infection, and modes of transmission d) To make recommendations to prevent recurrence
Steps of Epidemic Investigation:
Step 1 - Verification of Diagnosis
  • Confirm that the reported illness is genuine - not a rumour or misinterpretation
  • Clinical examination of a sample of cases; send specimens for laboratory investigation
  • Laboratory confirmation must not delay epidemiological investigation
Step 2 - Confirmation of Existence of an Epidemic
  • Compare disease frequency with the same period in previous years
  • An epidemic exists when observed frequency is in excess of expected frequency
  • An arbitrary limit of 2 standard errors from endemic occurrence = epidemic threshold
Step 3 - Defining the Population at Risk
  • Obtain a map of the area
  • Count the population (denominator) by age and sex through house-to-house visits
  • This allows calculation of attack rates in various subgroups
Step 4 - Rapid Search for All Cases and Their Characteristics
  • Medical survey of defined area to identify all cases (including those who did not seek care)
  • Prepare Epidemiological Case Sheet (line listing) - collects: name, age, sex, address, date of onset, clinical features, exposure history, outcomes
  • Prepare a spot map (dot map) showing distribution of cases
Step 5 - Data Analysis - Time, Place, Person
  • Time: Construct an Epidemic Curve (histogram of cases by date/time of onset) - determines type of epidemic (point source vs. propagated), incubation period, likely time of exposure
  • Place: Spot map - identifies geographic clustering, possible source
  • Person: Attack rates by age, sex, occupation, food items consumed, water supply
Step 6 - Formulation of Hypothesis
  • Based on data analysis, formulate a hypothesis about the source, causative agent, and mode of transmission
  • For a feast-related outbreak: hypothesize which food item(s) were the vehicle
Step 7 - Testing the Hypothesis
  • Conduct an analytic study (usually case-control study for outbreak investigation)
  • Calculate food-specific attack rates, Odds Ratio, Relative Risk
  • Identify the implicated food/water source
Step 8 - Drawing Conclusions
  • Confirm the source, mode of transmission, and causative agent
  • Laboratory confirmation of suspect food/water samples and stool cultures from cases
Step 9 - Control and Prevention Measures
  • Implement control while investigation is ongoing (see below)
Step 10 - Preparation of Report
  • Submit detailed written report with findings, conclusions, and recommendations

Q4. What Immediate Control Measures are Recommended while Investigation is in Progress? [2 Marks]

For an acute gastroenteritis / diarrhoeal disease outbreak following a community feast:
  1. Treat cases - ORS, IV fluids for dehydration; hospitalize severe cases
  2. Stop the suspected vehicle - Remove implicated food/water supply immediately
  3. Safe water supply - Ensure chlorination, boiling of drinking water
  4. Sanitation measures - Proper disposal of excreta, removal of human faeces from environment
  5. Notification - Notify higher authorities (BMOH → CMOH → State)
  6. Surveillance - Set up active surveillance to detect new cases rapidly
  7. Health education - Personal hygiene, hand-washing, avoiding raw/uncooked food

Q5. Define "Attack Rate" and calculate it for a village population of 1,500 [4 Marks] (Barasat GMC)

Attack Rate: A form of incidence rate used in epidemic investigation. It represents the proportion of persons exposed to a risk factor (e.g., a food item, contaminated water) who develop the disease during a limited time period.
Formula:
Attack Rate = (Number of new cases during epidemic period / Population at risk) × 100
Example calculation:
  • Total village population = 1,500
  • Cases of acute watery diarrhoea = 45 (in the question scenario)
  • Attack Rate = (45/1500) × 100 = 3%
Food-specific attack rate = (Those who ate a food item AND got ill) / (Total who ate that food item) × 100

Q6. Draw and Interpret an Epidemic Curve [3 Marks] (IQ City)

Epidemic Curve: A histogram/bar diagram with:
  • X-axis = Date/time of onset of cases
  • Y-axis = Number of cases
Interpretation:
  • Point-source epidemic (common-source): Single sharp peak, narrow curve, all cases fall within one incubation period. Example: Food poisoning after a community feast - indicates all persons exposed at one point in time
  • Propagated epidemic (person-to-person): Multiple successive peaks at intervals of one incubation period; gradually rising then falling curve. Example: Hepatitis A, measles
  • Continuous common-source: Plateau-shaped curve; prolonged exposure (e.g., contaminated water supply)
In the case of 250 acute watery diarrhoea cases within 2 days after a feast - this represents a point-source/common-source epidemic with a single sharp peak.

Q7. Most Probable Diagnosis - Children with Fever, Jaundice, after Village Fair with Street Food (College of Medicine & Sagore Dutta)

Most Probable Diagnosis: Hepatitis A (Infectious Hepatitis)
Reasoning:
  • Children aged 5-10 years
  • Acute onset of fever, nausea, loss of appetite, jaundice (yellowish discolouration of eyes and skin)
  • 2 weeks after eating street food at a fair (jhalmuri, fuchka, velpuri - all potentially contaminated with faecal matter)
  • Incubation period of Hepatitis A = 15-50 days (average 28-30 days) - consistent with "2 weeks after fair"
  • Faecal-oral transmission; common vehicle outbreaks occur via contaminated food/water
Outbreak investigation steps: Same as general steps above (Steps 1-10) Control measures: Stop contaminated food stalls; safe water; hygiene education; passive immunization of contacts Prevention of recurrence: Food safety regulations for street vendors, safe water supply, health education, hepatitis A vaccination

PART B: EPIDEMIOLOGICAL STUDY DESIGNS


Q8. Prevalence Study of Obesity in Medical Students (3 months) - Type and Design [2+13] (Barasat GMC)

Type of Study: Cross-Sectional Study (Prevalence Study)
Justification:
  • Measures disease and exposure at the same point in time
  • Feasible within 3 months (quick, inexpensive)
  • Suitable for measuring prevalence (not incidence)
  • Appropriate for studying chronic conditions like obesity
Steps of Cross-Sectional Study:
  1. Define study population - All medical students of the institution (enumerate batch-wise)
  2. Define "obesity" - Use standard case definition: BMI ≥ 30 kg/m² (WHO) or ≥ 25 kg/m² (Asian cutoff)
  3. Sample size calculation - Using expected prevalence (~20-25% obesity), 95% CI, 10% relative error
  4. Sampling method - Stratified random sampling (by year/batch) to ensure representativeness
  5. Develop data collection tool - Validated questionnaire (dietary habits, physical activity, socioeconomic status) + physical measurements (height, weight)
  6. Ethical clearance - From Institutional Ethics Committee; informed written consent from participants
  7. Pilot testing - Pre-test questionnaire on 10-20 students; standardize anthropometric measurements
  8. Data collection - Interview + measurement (height, weight, waist circumference, BP)
  9. Data analysis - Calculate prevalence, age/sex distribution, associations using chi-square, logistic regression
  10. Reporting - Present findings to institution; recommend interventions

Q9. Study on Radiation Exposure among Nuclear Plant Workers over 5 Years - Ideal Study Design [2+8+5] (JNM Kalyani)

A) Ideal Study Design: Prospective Cohort Study
Because:
  • Exposure (radiation) is known and measurable from the start
  • Disease (health effects of radiation) develops in the future
  • Follows "cause to effect" direction
  • Allows measurement of incidence and calculation of Relative Risk
  • Appropriate for rare exposures (nuclear workers) with high expected incidence
B) Steps in Conducting a Cohort Study (Park's Elements):
  1. Selection of study subjects - Identify exposed cohort (nuclear plant workers) and unexposed comparison group (similar workers without radiation exposure, e.g., administrative staff)
  2. Define exposure - Measure radiation levels using dosimetry; classify into high/moderate/low/unexposed categories
  3. Baseline assessment - Ensure all subjects are free of the disease at entry; record baseline data (age, sex, smoking, BMI, prior exposures)
  4. Obtain data on exposure - From dosimetry records, medical examination, environmental surveys
  5. Follow-up - Follow both cohorts over 5 years; periodic health checks; ensure completeness of follow-up (minimize attrition)
  6. Outcomes measured - Cancer, haematological disorders, reproductive outcomes, death
  7. Analysis - Calculate incidence rates in exposed vs. unexposed; compute Relative Risk (RR) and Attributable Risk (AR); statistical tests
C) Disadvantages of Cohort Study:
  1. Time-consuming and expensive
  2. Large sample size required
  3. Losses to follow-up may introduce bias
  4. Not suitable for rare diseases
  5. Exposure status may change during follow-up
  6. Ethical concerns about withholding prevention

Q10. Case-Control Study on Obesity and Osteoarthritis of Knee (35-65 years) [8+4+3] (PC Sen)

A) Design of Case-Control Study:
  1. Define "Cases" - Persons aged 35-65 years diagnosed with osteoarthritis of knee (by clinical + radiological criteria - Kellgren-Lawrence grade ≥ 2)
  2. Source of cases - Orthopaedic OPD/IPD; confirm diagnosis
  3. Select controls - Persons of similar age/sex without osteoarthritis; matched 1:1 or 1:2 (hospital controls or community controls)
  4. Matching - Match for age (± 5 years), sex, geographic area
  5. Define "Exposure" - Obesity = BMI ≥ 25 kg/m² (Asian cutoff) or ≥ 30 kg/m² (WHO)
  6. Measure exposure in both groups - Current BMI measurement; retrospective recall of weight history
  7. Analysis - Construct 2×2 table; calculate Odds Ratio (OR) as estimate of Relative Risk
    • OR > 1 suggests obesity is a risk factor for OA knee
  8. Control for confounders - Age, sex, occupation, physical activity, prior knee injury
B) Advantages of Case-Control Study:
  1. Relatively easy to carry out
  2. Rapid and inexpensive (compared to cohort)
  3. Requires comparatively few subjects
  4. Particularly suitable for rare diseases
  5. No risk to subjects
  6. Allows study of several aetiological factors
  7. No attrition problems (no follow-up required)
C) Disadvantages:
  1. Recall/memory bias - cases recall past exposure differently from controls
  2. Selection of appropriate control group is difficult
  3. Cannot measure incidence; can only estimate relative risk
  4. Does not distinguish causes from associated factors
  5. Not suited for evaluation of therapy
Biases in Case-Control Study:
  • Recall/Memory bias - cases recall past exposure (obesity) more vividly
  • Selection bias - cases/controls may not represent general population
  • Berkesonian bias - hospital-based cases and controls have different admission rates for different diseases
  • Interviewer bias - if interviewer knows who is a case, may probe more thoroughly
  • Confounding - physical activity, occupation, prior trauma are confounders; controlled by matching

Q11. Radiation Study - Retrospective Cohort (Court-Brown and Doll type) also applies to the nuclear plant scenario. The study of radiation workers over 5 years is best done as a prospective cohort (see Q9 above). An ambidirectional cohort (combining retrospective + prospective elements) is also valid.


Q12. Epidemiological Study for OCP and Breast Cancer Association [1+2+6+3+3] (ESI Joka)

Study Type: Cohort Study (Prospective)
Why?
  • Studying a causal association between an exposure (OCP use) and a disease outcome (breast cancer)
  • Exposure can be clearly defined from the start
  • Allows direct measurement of incidence and RR
  • (Note: A case-control study is also valid - depends on whether disease is rare)
Steps:
  1. Select exposed cohort (OCP users) and unexposed cohort (non-users of similar age)
  2. Ensure both groups are free of breast cancer at baseline (mammography/clinical examination)
  3. Record baseline data: age, parity, family history, duration and type of OCP
  4. Follow-up both groups for sufficient time (e.g., 10+ years)
  5. Periodic screening for breast cancer (clinical examination, mammography)
  6. Calculate incidence of breast cancer in both groups
  7. Compute RR = Incidence in exposed / Incidence in unexposed
  8. Adjust for confounders (age at menarche, parity, family history, BMI)
Advantages: Direct measurement of incidence; establishes temporal sequence; calculates RR; can study multiple outcomes Disadvantages: Time-consuming; expensive; large numbers needed; attrition; not suitable for rare diseases

Q13. Rare and Fatal Disease associated with Smoking - Study Type [2+8+5] (Bankura Sammilani)

Study Type: Case-Control Study
Why? For a rare and fatal disease, cohort study is impractical (would need enormous sample and long follow-up). Case-control is ideal because:
  • Start with cases (those who have the rare disease) and controls
  • Look backward at smoking history
  • Economical, quicker, feasible
Steps:
  1. Define cases (those with the rare disease, confirmed diagnosis)
  2. Select controls (similar persons without the disease, age/sex matched)
  3. Collect exposure history (smoking - duration, intensity, type)
  4. Analyse: Calculate OR as estimate of association
  5. Control for confounders
Advantages: Rapid, inexpensive, suitable for rare diseases, no attrition, ethical Disadvantages: Recall bias, cannot measure incidence, selection of controls is difficult, only estimates RR

Q14. Screen Time and Mental Disorders in Adolescence (College of Medicine & Sagore Dutta)

Most Appropriate Study: Cohort Study (Longitudinal/Prospective)
  • Exposure = screen time duration in early childhood
  • Outcome = mental disorders in adolescence (later in time)
  • Temporal sequence must be established (exposure precedes outcome)
  • Cohort study is ideal
Steps: Same as cohort study (selection, baseline data, follow-up, outcome measurement, analysis using RR)
Most Common Biases:
  • Attrition bias (losses to follow-up over years)
  • Information/exposure measurement bias (self-reported screen time is unreliable)
  • Confounding (parental education, socioeconomic status, pre-existing behavioural problems)
  • Detection bias (mental disorder diagnosis criteria change over time)
Methods to address:
  • Use objective measures of screen time (device logs, parental diaries)
  • Minimize losses to follow-up; impute missing data
  • Measure and control for confounders at baseline using multivariate analysis
  • Use validated diagnostic tools (DSM-5, ICD-11 criteria)

Q15. Define Epidemiology. Classify Epidemiological Studies. Steps of Cohort Study. Bias in Cohort Study [2+5+5+3] (MCK, Jagannath Gupta)

Definition of Epidemiology (Park): "Epidemiology is the study of the distribution and determinants of health-related states or events in specified populations, and the application of this study to the prevention and control of health problems." - Last (1988)
Classification of Epidemiological Studies:
EPIDEMIOLOGICAL STUDIES
├── Observational (non-experimental)
│   ├── Descriptive
│   │   ├── Case report / Case series
│   │   ├── Cross-sectional (prevalence) study
│   │   └── Ecological (correlational) study
│   └── Analytical
│       ├── Case-control study (retrospective)
│       └── Cohort study (prospective/longitudinal)
└── Experimental (Interventional)
    ├── Randomized Controlled Trial (RCT)
    ├── Field trial
    └── Community trial
Steps/Elements of Cohort Study (Park):
  1. Selection of study subjects - Exposed and unexposed cohorts, free of disease at baseline
  2. Obtaining data on exposure - Interviews, questionnaires, records, medical examinations, environmental surveys
  3. Selection of comparison group - General population OR another non-exposed cohort
  4. Follow-up - Over a defined period; record all new disease occurrences; minimize attrition
  5. Analysis - Calculate incidence rates in exposed and unexposed; compute Relative Risk (RR), Attributable Risk (AR), Population Attributable Risk
Bias in Cohort Study:
  • Attrition bias (losses to follow-up are not random)
  • Information bias (measurement of exposure or outcome is inaccurate)
  • Confounding (third variable related to both exposure and outcome)
  • Healthy worker effect (occupational cohorts tend to be healthier than general population - underestimates risk)

Q16. Framingham Study - What Type of Study? [1+5+4+5] (KPC Medical College)

Type: Prospective Cohort Study
The Framingham Heart Study (1948 onwards) is the classic example of a prospective cohort study - a group of residents of Framingham, Massachusetts have been followed since the 1950s to identify risk factors for heart disease.
Steps: (See cohort study steps Q15 above)
Advantages: Direct incidence measurement, RR calculation, temporal sequence established, multiple outcomes studied, gold standard for temporal association Disadvantages: Expensive, time-consuming, not suitable for rare diseases, attrition, exposure may change
Criteria for Judging Causal Association (Bradford Hill Criteria - Park):
  1. Strength of association - High RR/OR
  2. Consistency - Same findings in different populations/studies
  3. Specificity - One cause → one effect
  4. Temporality - Cause must precede effect (MOST IMPORTANT)
  5. Biological gradient - Dose-response relationship
  6. Plausibility - Biologically plausible mechanism
  7. Coherence - Consistent with known biology
  8. Experimental evidence - Removal of cause reduces disease
  9. Analogy - Similar known causal relationships

Q17. Obesity and Hypertension Cohort Study - Analysis (Deben Mahata GMC)

Data given:
  • 2000 obese individuals - 200 develop hypertension
  • 4000 non-obese individuals - 100 develop hypertension
  • Follow-up: 15 years
Study design: Cohort Study (follows exposed/unexposed forward to disease)
Analysis:
  • Incidence in obese = 200/2000 = 0.10 (10%)
  • Incidence in non-obese = 100/4000 = 0.025 (2.5%)
  • Relative Risk (RR) = 0.10/0.025 = 4.0
  • Attributable Risk (AR) = 0.10 - 0.025 = 0.075 (7.5%)
  • Interpretation: Obese individuals have 4 times the risk of developing hypertension compared to non-obese individuals over 15 years

Q18. Cohort Study - Gold Standard for Temporal Association but Inappropriate for Rare Diseases (COMSDH)

Gold standard for temporal association:
  • In a cohort study, exposure is measured BEFORE disease occurs → establishes temporal sequence (cause precedes effect)
  • This is the most critical criterion for causality
Inappropriate for rare diseases because:
  • Rare disease = very low incidence rate
  • Need enormous sample size to detect enough cases (statistical power requirement)
  • Very long follow-up period needed
  • Extremely expensive and time-consuming
  • Solution for rare diseases: Use case-control study which is much more efficient (start with cases who already have the disease)
Example: Leukaemia in adolescents is rare in general population - a cohort study would need millions of participants. Better suited to case-control approach.

Q19. Two Drugs in Hypertension - Appropriate Study Design, Bias, Control [1+6+3] (IQ City)

Appropriate Study Design: Randomized Controlled Trial (RCT)
  • RCT is the gold standard for comparing treatment effects
  • Allows blinding; randomization controls both known and unknown confounders
Steps:
  1. Define eligibility criteria (hypertensive patients, stage, age, comorbidities)
  2. Recruit and obtain informed consent
  3. Randomization - Randomly allocate patients to Drug A or Drug B (sealed envelopes, computer-generated random numbers)
  4. Blinding - Double-blind (both patient and physician unaware of treatment) to prevent observer/subject bias
  5. Define outcome measures (reduction in BP, adverse effects, cardiovascular events)
  6. Follow-up both groups equally; ensure compliance
  7. Analysis: Compare outcomes using appropriate tests (t-test, chi-square); calculate Number Needed to Treat
Biases in RCT:
  • Selection bias - controlled by randomization
  • Observer bias - controlled by blinding
  • Hawthorne effect - patients behave differently when observed
  • Attrition bias - unequal dropouts in two groups
  • Compliance bias - differential compliance
Control of bias:
  • Randomization, double blinding, intention-to-treat analysis, complete follow-up
Randomization vs Blinding (Deben Mahata - not the same purpose):
  • Randomization = ensures comparable groups at baseline; controls confounding; determines who gets which treatment
  • Blinding = prevents bias in outcome assessment and reporting; does NOT determine group allocation

Q20. Research Proposal - Prevalence of Hypertension among Non-Medical Office Staff (BMCH) [1+2+7+2+3] (BMCH)

Title: Prevalence of Hypertension and its associated risk factors among non-medical office staff of Burdwan Medical College and Hospital - A Cross-sectional Study
Objectives:
  1. To determine the prevalence of hypertension among non-medical office staff
  2. To identify risk factors (obesity, physical inactivity, smoking, diet)
Methodology:
  • Study design: Cross-sectional
  • Study population: All non-medical office staff
  • Sample size: Using expected prevalence of 30%, 95% CI, 10% relative error
  • Sampling: Stratified random sampling by department
  • Data collection: Structured questionnaire + BP measurement (three readings on two occasions)
  • Hypertension defined as SBP ≥ 140 and/or DBP ≥ 90 mmHg (JNC 7) or on antihypertensive medication
Ethical Issues:
  • IEC clearance; informed written consent; confidentiality; right to withdraw; referral of cases detected
Plan of Data Analysis:
  • Prevalence with 95% CI; chi-square test for associations; logistic regression for independent risk factors

PART C: IMMUNIZATION QUESTIONS


Q21. National Immunization Schedule for Infants - Age, Dose, Route, Site (KPCMCH)

(From Park's Table - UIP/NIS India)
AgeVaccineDoseRouteSite
BirthBCG0.1 ml (0.05 ml neonates)IntradermalLeft upper arm
BirthOPV-0 (zero dose)2 dropsOralOral
BirthHepatitis B (birth dose)0.5 mlIntramuscularAnterolateral thigh
6 weeksOPV-1 + Penta-1 (DPT+HepB+Hib) + IPV-1 + RVV-1-Oral/IM/Oral-
10 weeksOPV-2 + Penta-2 + RVV-2-Oral/IM/Oral-
14 weeksOPV-3 + Penta-3 + IPV-2 + RVV-3-Oral/IM/Oral-
9-12 monthsMeasles-Rubella (MR)-1 + JE-1 (endemic areas) + Vitamin A (1st dose)0.5 mlSubcutaneousRight upper arm
16-24 monthsDPT booster-1 + OPV booster + MR-2 + JE-2 + Vitamin A (2nd dose)-IM/Oral/SC-
5-6 yearsDPT booster-2-IM-
10 years & 16 yearsTT0.5 mlIM-
Strategies for Eradication of Poliomyelitis:
  1. Routine immunization with OPV (3 doses + booster)
  2. National Immunization Days (Pulse Polio Immunization) - 2 rounds per year
  3. Surveillance for Acute Flaccid Paralysis (AFP) - target ≥ 2/100,000 children under 15
  4. Mopping-up operations in high-risk areas
  5. Introduction of Injectable Polio Vaccine (IPV) in routine schedule

Q22. OPV Administered at Birth Despite Subsequent Doses Being Scheduled [4 Marks] (Tamralipto)

Rationale for birth dose of OPV:
  1. Protection in neonatal period - Provides early mucosal immunity in the gut before exposure to wild poliovirus
  2. Seroconversion boost - Even partial gut immunity is protective; subsequent doses boost and consolidate immunity
  3. Herd immunity contribution - OPV (live attenuated) multiplies in gut and can spread to contacts, increasing community coverage
  4. High-risk window - Neonates in endemic areas face early exposure; even partial protection matters
  5. Subsequent doses needed because a single neonatal dose gives incomplete immunity (presence of maternal antibodies partially neutralizes vaccine virus); 3 additional doses are required for full seroconversion

Q23. Hepatitis B Vaccine Given within 24 Hours of Birth [4 Marks] (SANAKA, Jagannath Gupta, PC Sen)

Rationale:
  1. Prevention of vertical transmission - The most common route of HBV transmission in endemic countries is from HBsAg-positive mother to baby during delivery (perinatal transmission). The birth dose given within 24 hours (ideally within 12 hours) prevents this
  2. Immune response before exposure - After delivery, neonates are exposed to maternal blood; vaccine given immediately induces active immunity before the virus can establish infection
  3. HBV is not eliminated by maternal antibodies - Unlike OPV, maternal anti-HBs do not significantly interfere; early active immunization is essential
  4. High risk of chronicity in neonates - If infected at birth, 90% of neonates develop chronic HBV infection (vs only 5% in adults), which leads to cirrhosis and hepatocellular carcinoma
  5. Birth dose + 3 subsequent doses = complete primary immunization series
  6. In high-risk infants (HBsAg+ mother), birth dose should be combined with Hepatitis B Immunoglobulin (HBIG) for additional passive protection

Q24. HPV Vaccination - Prevention of Cervical Cancer [4-5 Marks] (PC Sen, CNMC, Midnapore, Burdwan)

HPV Vaccination started in India to prevent second most common cancer in women (Cervical Cancer):
  1. Cervical cancer burden - Second most common cancer among women in India; caused by HPV types 16 and 18 in 70% of cases
  2. Available vaccines:
    • Bivalent (Cervarix) - against HPV 16, 18
    • Quadrivalent (Gardasil) - against HPV 6, 11, 16, 18
    • Nonavalent (Gardasil-9) - against 9 types
  3. Target group - Girls aged 9-14 years (before sexual debut = maximum benefit); 15-26 years (catch-up)
  4. Schedule (India NIS): Two doses at 0 and 6 months for girls aged 9-14 years
  5. Mechanism - Vaccines contain virus-like particles (VLPs) - no live virus; induce high neutralizing antibody titres
  6. Efficacy - ~70% reduction in cervical cancer risk; nearly 100% against CIN 2/3 caused by covered types
  7. Does NOT replace Pap smear screening - Vaccinated women must still undergo regular screening

Q25. AEFI - Classification with Examples [5 Marks] (Malda, JMN)

Adverse Events Following Immunization (AEFI) - any untoward medical occurrence following immunization that does not necessarily have a causal relationship with vaccine use.
Classification (WHO/AEFI Committee):
CategoryDefinitionExamples
Vaccine product-related reactionDue to inherent properties of vaccineOPV-associated paralytic poliomyelitis (VAPP), BCG lymphadenitis
Vaccine quality defect-relatedManufacturing defectIncomplete inactivation of poliovirus in IPV
Immunization error-related (Programmatic error)Error in preparation/handling/administrationAbscess at injection site due to non-sterile technique, wrong vaccine, wrong dose
Immunization anxiety-related reactionFear of injectionVasovagal syncope, mass psychogenic illness
CoincidentalTemporal association only; not causally relatedFever from concurrent infection unrelated to vaccine
Serious vs Severe AEFI:
  • Serious = Results in death, hospitalization, disability, life-threatening event (based on outcome)
  • Severe = Intense local or systemic reaction (based on intensity/grade)
  • They are NOT interchangeable - a mild local reaction can be "severe" in grade but not "serious"

Q26. AEFI Case - Child after MR Vaccine (Anaphylaxis) [2+6+4+3] (JMN)

a) Most Probable Diagnosis in First Child: Anaphylaxis
  • Difficulty breathing, generalized rash, unconsciousness within 30 minutes of vaccination = Anaphylaxis (a vaccine product-related serious AEFI)
  • Other 4 children with local swelling/mild fever = normal immune response (immunization error unlikely; likely coincidental/vaccine-related mild reaction)
b) Field-level Investigation:
  1. Report immediately to BMOH/CMO
  2. Fill AEFI reporting form (within 24 hours for serious AEFI)
  3. Collect vaccination details: batch number, lot number, cold chain records, expiry date, syringe type, reconstitution details
  4. Examine remaining vials and syringes from the same session
  5. Check cold chain maintenance records
  6. Clinical examination of all children vaccinated in that session
  7. Send vaccine sample and used vials to designated laboratory
  8. Causality assessment by District/State AEFI committee
  9. Follow up child who developed anaphylaxis
c) Preventive Measures for Future Sessions:
  1. Keep anaphylaxis kit (adrenaline 1:1000, antihistamines, oxygen) at every immunization session
  2. Observe all vaccinees for 30 minutes after vaccination
  3. Proper cold chain maintenance
  4. Screen for known allergies before vaccination
  5. Train ANM/vaccinators in recognition and management of anaphylaxis
  6. Proper reconstitution technique; use vaccine within recommended time
d) Types of Reactions after Immunization:
  1. Local reactions - redness, swelling, pain at site
  2. Systemic reactions - fever, malaise, bodyache
  3. Allergic reactions - urticaria, anaphylaxis
  4. Vaccine-specific reactions - VAPP (OPV), BCG lymphadenitis, febrile seizures (DPT)
  5. Programmatic errors - sterile abscess, wrong vaccine

Q27. Immunization Drop-outs and Left-outs - Meaning, Reasons, Measures (Jhargram)

Drop-out: Children who started the immunization series but did not complete it (received some doses but not all) Left-out: Children who never received any dose of vaccination
Reasons:
  • Distance and access to health facilities
  • Social/religious beliefs; vaccine hesitancy
  • Health worker shortage; absenteeism
  • Poor cold chain maintenance leading to ineffective vaccines
  • Missed appointments; lack of reminders
  • Cultural barriers; lack of awareness
Measures to Improve Coverage:
  • Active outreach sessions (sub-centre level, village level)
  • Home visits by ASHA/ANM for tracking defaulters
  • Health education - mothers, community leaders, religious leaders
  • Improve cold chain at all levels
  • Village Health and Nutrition Days (VHNDs)
  • Incentives/motivation
  • Supervision and monitoring of coverage
  • National Immunization Weeks; Intensified Mission Indradhanush (IMI)

PART D: SHORT NOTES & EXPLANATIONS


Q28. Bias and Confounding are NOT Synonymous (CNMC)

FeatureBiasConfounding
DefinitionSystematic error in design, conduct, or analysis leading to incorrect estimate of associationA third variable that is related to both exposure and outcome, distorting the apparent relationship
DirectionalityCan overestimate or underestimateCan overestimate or underestimate
PreventionBy careful study design (randomization, blinding)By matching, restriction, stratification, multivariate analysis
ExamplesRecall bias, selection bias, interviewer biasSmoking as confounder in alcohol-laryngeal cancer study
Post-hoc correctionOften cannot be corrected after studyCan be adjusted statistically (e.g., Mantel-Haenszel)

Q29. RR and AR are NOT Synonymous (Midnapore, JNM Kalyani)

  • Relative Risk (RR) = Incidence in exposed / Incidence in unexposed
    • Measures strength of association between exposure and disease
    • Used for etiological/causal inference
    • Does NOT reflect public health burden
  • Attributable Risk (AR) = Excess Risk = Incidence in exposed - Incidence in unexposed
    • Measures the excess disease in the exposed group attributable to the exposure
    • Reflects public health importance - how much disease can be prevented by removing exposure
    • Has the same units as incidence rate
Example: Smokers have RR = 20 for lung cancer (very strong). But AR for cardiovascular disease in smokers may be higher in absolute numbers because CVD is much more common.

Q30. Relative Risk (RR) Calculation - Diamond Harbour GMC

Given data:
SilicosisNo SilicosisTotal
Exposed120680800
Not exposed3011701200
RR = (120/800) / (30/1200) = 0.15 / 0.025 = 6.0
Interpretation: Workers exposed to silica dust have 6 times the risk of developing silicosis compared to unexposed workers. This is a strong positive association, suggesting silica dust exposure is an important causal factor for silicosis.

Q31. Incidence is Preferred over Prevalence in Studying Disease Causation (JNM Kalyani)

  • Incidence = new cases occurring in a given time period in a population at risk
  • Prevalence = all existing cases (old + new) at a point in time
  • For disease causation, incidence is preferred because:
    1. It measures the rate at which new disease develops (dynamic process)
    2. Prevalence includes long-duration chronic cases who survived - confounds causation
    3. Factors that affect duration of disease (treatment, case fatality) affect prevalence but not incidence
    4. Temporal sequence (exposure → new case) can only be established using incidence

Q32. Cold Chain System in UIP (Malda)

The cold chain is the system of storage and transport of vaccines at recommended temperatures from manufacturer to the vaccine recipient.
Cold Chain Equipment (Walk-in coolers → ILR → Deep Freezer → Cold Box → Vaccine Carrier):
  • Walk-in Cold Room (WIC/WIF) - State/Regional level: +2 to +8°C or -15 to -25°C
  • Ice-Lined Refrigerator (ILR) - District/PHC level: +2 to +8°C
  • Deep Freezer - District/PHC: -15 to -25°C (for polio, live vaccines)
  • Cold Box - field transport: 0 to +8°C
  • Vaccine Carrier (day carrier) - outreach sessions: with ice packs
  • Vaccine Vial Monitor (VVM) - colour indicator on vial to check heat exposure
  • Shake test - for freeze-sensitive vaccines (adsorbed vaccines like DPT, Hep B, TT)

Q33. Open Vial Policy (ICARE)

  • Under the Open Vial Policy, opened multi-dose vials of certain vaccines can be used in subsequent immunization sessions (up to 4 weeks) provided:
    1. Cold chain has been maintained
    2. VVM has not reached discard point
    3. No contamination (sterile technique maintained)
    4. Expiry date not reached
  • Vaccines covered: BCG excluded (must be discarded after session). OPV, DPT, TT, Hepatitis B, Pentavalent can be reused under this policy
  • Benefit: Reduces vaccine wastage; improves coverage

Q34. Purpose of Vaccination is Not Only Individual Protection but Also to Reduce Disease Load in Community (ESI Joka)

This refers to Herd Immunity:
  • When a sufficient proportion of a population is immune to an infection, the spread of that infection is limited even in non-immune individuals
  • Vaccinating a critical proportion (herd immunity threshold) provides indirect protection to unvaccinated persons (infants, immunocompromised, those who missed vaccination)
  • Example: Polio eradication - even if not all children are vaccinated, interruption of transmission protects all
  • Herd immunity threshold varies by disease: Measles requires ~95% coverage; polio ~80-85%
  • This is why mass immunization campaigns are conducted even when individual vaccine efficacy may be less than 100%

Q35. Population Attributable Risk (PAR) (KPC Medical College)

  • PAR = Incidence in total population - Incidence in unexposed group
  • Alternatively: PAR = AR × prevalence of exposure in population
  • Meaning: Amount of disease in the total population attributable to (and preventable by eliminating) the exposure
  • PAR% = (PAR / Incidence in total population) × 100
  • PAR is useful for public health priority setting - shows how much disease burden can be reduced by a population-level intervention

All answers are based on: Park's Textbook of Preventive and Social Medicine (Park, K.), 9789382219163

Generate a PDF quick reference guide for immunization schedules and AEFI

Reading File
Running Command

ls /home/daytona/workspace/ 2>/dev/null && echo "---" && python3 -c "import repo…

Running Command

mkdir -p /home/daytona/workspace/immunization-guide && echo "dir created"

Writing File

~/immunization-guide/generate_pdf.py

#!/usr/bin/env python3
"""
Immunization Schedule & AEFI Quick Reference Guide
Based on Park's Textbook of Preventive and Social Medicine
"""

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, KeepTogether, PageBreak
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.pdfgen import canvas
from reportlab.platypus.flowables import Flowable

OUTPUT = "/home/daytona/workspace/immunization-guide/Immunization_AEFI_QuickRef.pdf"

# ── Colour Palette ──────────────────────────────────────────────────────────
C_NAVY    = colors.HexColor("#1a3a5c")
C_TEAL    = colors.HexColor("#0d7377")
C_AMBER   = colors.HexColor("#f6a623")
C_GREEN   = colors.HexColor("#2e7d32")
C_RED     = colors.HexColor("#c62828")
C_ORANGE  = colors.HexColor("#e65100")
C_PURPLE  = colors.HexColor("#4a148c")
C_LBLUE   = colors.HexColor("#e3f2fd")
C_LTEAL   = colors.HexColor("#e0f7fa")
C_LGREEN  = colors.HexColor("#e8f5e9")
C_LRED    = colors.HexColor("#ffebee")
C_LYELLOW = colors.HexColor("#fff8e1")
C_LPURPLE = colors.HexColor("#f3e5f5")
C_LGRAY   = colors.HexColor("#f5f5f5")
C_WHITE   = colors.white

# ── Styles ──────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()

def S(name, **kw):
    return ParagraphStyle(name, **kw)

sTitle = S("sTitle",
    fontName="Helvetica-Bold", fontSize=22, leading=28,
    textColor=C_WHITE, alignment=TA_CENTER, spaceAfter=4)

sSub = S("sSub",
    fontName="Helvetica", fontSize=11, leading=14,
    textColor=C_WHITE, alignment=TA_CENTER, spaceAfter=2)

sH1 = S("sH1",
    fontName="Helvetica-Bold", fontSize=13, leading=16,
    textColor=C_WHITE, spaceBefore=4, spaceAfter=4,
    leftIndent=6)

sH2 = S("sH2",
    fontName="Helvetica-Bold", fontSize=10.5, leading=13,
    textColor=C_NAVY, spaceBefore=6, spaceAfter=3)

sBody = S("sBody",
    fontName="Helvetica", fontSize=8.5, leading=12,
    textColor=colors.black, spaceAfter=2)

sBold = S("sBold",
    fontName="Helvetica-Bold", fontSize=8.5, leading=12,
    textColor=colors.black)

sSmall = S("sSmall",
    fontName="Helvetica", fontSize=7.5, leading=10,
    textColor=colors.HexColor("#444444"))

sNote = S("sNote",
    fontName="Helvetica-Oblique", fontSize=7.5, leading=10,
    textColor=C_NAVY, spaceAfter=2)

sFooter = S("sFooter",
    fontName="Helvetica", fontSize=7, leading=9,
    textColor=colors.HexColor("#666666"), alignment=TA_CENTER)

# ── Helper: section header bar ───────────────────────────────────────────────
def section_header(title, color=C_NAVY):
    t = Table([[Paragraph(title, sH1)]], colWidths=[18.2*cm])
    t.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), color),
        ("ROUNDEDCORNERS", [4]),
        ("TOPPADDING",  (0,0), (-1,-1), 5),
        ("BOTTOMPADDING",(0,0), (-1,-1), 5),
        ("LEFTPADDING", (0,0), (-1,-1), 8),
    ]))
    return t

# ── Page numbering callback ───────────────────────────────────────────────────
def add_page_number(canvas_obj, doc):
    canvas_obj.saveState()
    canvas_obj.setFont("Helvetica", 7)
    canvas_obj.setFillColor(colors.HexColor("#888888"))
    canvas_obj.drawCentredString(A4[0]/2, 15*mm,
        f"Immunization & AEFI Quick Reference | Park's Textbook | Page {doc.page}")
    canvas_obj.restoreState()

# ── Build document ────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=A4,
    rightMargin=1.3*cm, leftMargin=1.3*cm,
    topMargin=1.5*cm, bottomMargin=2*cm,
    title="Immunization & AEFI Quick Reference Guide",
    author="Park's Textbook of Preventive and Social Medicine"
)

story = []

# ═══════════════════════════════════════════════════════════════════════
# COVER HEADER
# ═══════════════════════════════════════════════════════════════════════
cover = Table([
    [Paragraph("IMMUNIZATION SCHEDULE", sTitle)],
    [Paragraph("& AEFI Quick Reference Guide", sTitle)],
    [Spacer(1, 4)],
    [Paragraph("Based on Park's Textbook of Preventive and Social Medicine", sSub)],
    [Paragraph("Universal Immunization Programme (UIP) • National Immunization Schedule (NIS) • AEFI Classification", sSub)],
], colWidths=[18.2*cm])
cover.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,-1), C_NAVY),
    ("TOPPADDING",    (0,0), (-1,-1), 10),
    ("BOTTOMPADDING", (0,0), (-1,-1), 8),
    ("LEFTPADDING",   (0,0), (-1,-1), 10),
    ("RIGHTPADDING",  (0,0), (-1,-1), 10),
    ("ROUNDEDCORNERS", [6]),
]))
story.append(cover)
story.append(Spacer(1, 10))

# ═══════════════════════════════════════════════════════════════════════
# SECTION 1 – NATIONAL IMMUNIZATION SCHEDULE
# ═══════════════════════════════════════════════════════════════════════
story.append(section_header("1. National Immunization Schedule (NIS) — India UIP", C_TEAL))
story.append(Spacer(1, 4))

nis_headers = ["Age", "Vaccine", "Dose", "Route", "Site", "Remarks"]
nis_data = [nis_headers,
    ["Birth\n(≤24 hrs)", "BCG", "0.1 ml\n(0.05 ml\nneonate)", "Intradermal", "Left upper arm\n(deltoid region)", "Single dose; induces cell-mediated immunity"],
    ["Birth\n(≤24 hrs)", "OPV-0\n(Zero dose)", "2 drops", "Oral", "Oral", "Gut immunity; before hospital discharge"],
    ["Birth\n(≤24 hrs)", "Hepatitis B\n(Birth dose)", "0.5 ml", "Intramuscular", "Anterolateral\nthigh (R)", "Within 24 hrs to prevent vertical transmission"],
    ["6 weeks", "OPV-1\nPentavalent-1\n(DPT+HepB+Hib)\nIPV-1\nRVV-1", "2 drops\n0.5 ml\n\n0.1 ml\n5 drops", "Oral\nIM\n\nID (fractional)\nOral", "—\nAnterolateral thigh (L)\n\nRight deltoid\n—", "Fractional IPV (fIPV) 0.1 ml ID at 6 & 14 weeks"],
    ["10 weeks", "OPV-2\nPentavalent-2\nRVV-2", "2 drops\n0.5 ml\n5 drops", "Oral\nIM\nOral", "—\nAnterolateral\nthigh (R)\n—", ""],
    ["14 weeks", "OPV-3\nPentavalent-3\nIPV-2\nRVV-3", "2 drops\n0.5 ml\n0.1 ml\n5 drops", "Oral\nIM\nID\nOral", "—\nAnterolateral\nthigh (L)\nRight deltoid\n—", "Complete primary series"],
    ["9–12 months", "MR-1\nJE-1*\nVit A (1st)", "0.5 ml\n0.5 ml\n1 lakh IU", "SC\nSC\nOral", "Right upper arm\nLeft upper arm\n—", "*JE in endemic districts only\nVit A with MR-1"],
    ["16–24 months", "DPT Booster-1\nOPV Booster\nMR-2\nJE-2*\nVit A (2nd)", "0.5 ml\n2 drops\n0.5 ml\n0.5 ml\n2 lakh IU", "IM\nOral\nSC\nSC\nOral", "Anterolateral thigh\n—\nRight upper arm\nLeft upper arm\n—", "*JE in endemic districts\nVit A 6-monthly till 5 yrs"],
    ["5–6 years\n(School entry)", "DPT Booster-2", "0.5 ml", "IM", "Upper arm (deltoid)", "At school entry"],
    ["10 years\n&\n16 years", "Td\n(Tetanus-\ndiphtheria)", "0.5 ml", "IM", "Upper arm\n(deltoid)", "Td replaces TT in booster doses; dT has reduced diphtheria component"],
    ["Pregnant\nWomen", "Td-1\nTd-2\n(Td-Booster)", "0.5 ml each", "IM", "Upper arm\n(deltoid)", "Td-1: early pregnancy\nTd-2: 4 wks after Td-1\nBooster: if prev immunized within 3 yrs"],
]

col_w = [2.2*cm, 2.8*cm, 1.7*cm, 1.7*cm, 2.5*cm, 7.3*cm]
nis_table = Table(nis_data, colWidths=col_w, repeatRows=1)

row_colors = []
for i in range(1, len(nis_data)):
    bg = C_LTEAL if i % 2 == 0 else C_WHITE
    row_colors.append(("BACKGROUND", (0, i), (-1, i), bg))

nis_table.setStyle(TableStyle([
    ("BACKGROUND",    (0, 0), (-1, 0), C_TEAL),
    ("TEXTCOLOR",     (0, 0), (-1, 0), C_WHITE),
    ("FONTNAME",      (0, 0), (-1, 0), "Helvetica-Bold"),
    ("FONTSIZE",      (0, 0), (-1, 0), 8),
    ("FONTNAME",      (0, 1), (-1, -1), "Helvetica"),
    ("FONTSIZE",      (0, 1), (-1, -1), 7.5),
    ("ALIGN",         (0, 0), (-1, -1), "CENTER"),
    ("VALIGN",        (0, 0), (-1, -1), "MIDDLE"),
    ("GRID",          (0, 0), (-1, -1), 0.4, colors.HexColor("#b2dfdb")),
    ("TOPPADDING",    (0, 0), (-1, -1), 4),
    ("BOTTOMPADDING", (0, 0), (-1, -1), 4),
    ("LEFTPADDING",   (0, 0), (-1, -1), 3),
    ("RIGHTPADDING",  (0, 0), (-1, -1), 3),
    ("ROWBACKGROUNDS",(0, 1), (-1, -1), [C_WHITE, C_LTEAL]),
    ("TEXTCOLOR",     (0, 1), (-1, -1), colors.black),
    ("FONTNAME",      (0, 1), (0, -1), "Helvetica-Bold"),
]))
story.append(nis_table)
story.append(Spacer(1, 4))
story.append(Paragraph(
    "<b>Abbreviations:</b> BCG=Bacille Calmette-Guérin | OPV=Oral Polio Vaccine | IPV=Inactivated Polio Vaccine (fractional ID) | "
    "DPT=Diphtheria-Pertussis-Tetanus | Hib=Haemophilus influenzae type b | HepB=Hepatitis B | RVV=Rotavirus Vaccine | "
    "MR=Measles-Rubella | JE=Japanese Encephalitis | Td=Tetanus-diphtheria | SC=Subcutaneous | IM=Intramuscular | ID=Intradermal",
    sNote))
story.append(Spacer(1, 6))

# ═══════════════════════════════════════════════════════════════════════
# SECTION 2 – VACCINE PROPERTIES & COLD CHAIN
# ═══════════════════════════════════════════════════════════════════════
story.append(section_header("2. Vaccine Properties, Storage & Cold Chain", C_NAVY))
story.append(Spacer(1, 4))

# 2a - Vaccine sensitivity
two_col = [
    [
        # Left: Vaccine Storage
        Table([
            [Paragraph("<b>Vaccine Temperature Sensitivity</b>", sH2)],
            [Table([
                [Paragraph("<b>Vaccine</b>", sBold), Paragraph("<b>Temp</b>", sBold), Paragraph("<b>Notes</b>", sBold)],
                [Paragraph("OPV", sSmall), Paragraph("-15 to -25°C\n(freeze)", sSmall), Paragraph("Most heat-sensitive; can store at +2 to +8°C short-term", sSmall)],
                [Paragraph("BCG, Measles/MR", sSmall), Paragraph("+2 to +8°C", sSmall), Paragraph("Light-sensitive; reconstitute just before use", sSmall)],
                [Paragraph("DPT, Hep B, TT, Td,\nPentavalent, IPV", sSmall), Paragraph("+2 to +8°C\n(DO NOT FREEZE)", sSmall), Paragraph("Freezing destroys adsorbed vaccines; do Shake Test", sSmall)],
                [Paragraph("Rotavirus (RVV)", sSmall), Paragraph("+2 to +8°C", sSmall), Paragraph("Oral; do not freeze", sSmall)],
            ], colWidths=[2.5*cm, 3.0*cm, 3.5*cm],
               style=TableStyle([
                   ("GRID", (0,0), (-1,-1), 0.3, colors.HexColor("#cccccc")),
                   ("BACKGROUND", (0,0), (-1,0), C_LBLUE),
                   ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
                   ("FONTSIZE", (0,0), (-1,-1), 7),
                   ("TOPPADDING", (0,0), (-1,-1), 3),
                   ("BOTTOMPADDING", (0,0), (-1,-1), 3),
                   ("ROWBACKGROUNDS", (0,1), (-1,-1), [C_WHITE, C_LGRAY]),
               ]))],
        ], colWidths=[9.0*cm]),

        # Right: Cold Chain Levels
        Table([
            [Paragraph("<b>Cold Chain Equipment by Level</b>", sH2)],
            [Table([
                [Paragraph("<b>Level</b>", sBold), Paragraph("<b>Equipment</b>", sBold), Paragraph("<b>Temp</b>", sBold)],
                [Paragraph("State / Region", sSmall), Paragraph("Walk-in Cold Room (WIC)\nWalk-in Freezer (WIF)", sSmall), Paragraph("+2 to +8°C\n-15 to -25°C", sSmall)],
                [Paragraph("District", sSmall), Paragraph("ILR (Ice-Lined\nRefrigerator)\nDeep Freezer", sSmall), Paragraph("+2 to +8°C\n\n-15 to -25°C", sSmall)],
                [Paragraph("PHC / Sub-Centre", sSmall), Paragraph("ILR / Cold Box", sSmall), Paragraph("+2 to +8°C", sSmall)],
                [Paragraph("Outreach Session", sSmall), Paragraph("Vaccine Carrier\n(day carrier) + ice packs", sSmall), Paragraph("0 to +8°C", sSmall)],
            ], colWidths=[2.4*cm, 3.5*cm, 2.0*cm],
               style=TableStyle([
                   ("GRID", (0,0), (-1,-1), 0.3, colors.HexColor("#cccccc")),
                   ("BACKGROUND", (0,0), (-1,0), C_LBLUE),
                   ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
                   ("FONTSIZE", (0,0), (-1,-1), 7),
                   ("TOPPADDING", (0,0), (-1,-1), 3),
                   ("BOTTOMPADDING", (0,0), (-1,-1), 3),
                   ("ROWBACKGROUNDS", (0,1), (-1,-1), [C_WHITE, C_LGRAY]),
               ]))],
        ], colWidths=[8.4*cm]),
    ]
]
two_col_table = Table(two_col, colWidths=[9.2*cm, 9.0*cm])
two_col_table.setStyle(TableStyle([
    ("VALIGN", (0,0), (-1,-1), "TOP"),
    ("LEFTPADDING", (0,0), (-1,-1), 0),
    ("RIGHTPADDING", (0,0), (-1,-1), 4),
]))
story.append(two_col_table)

# VVM + Shake Test
story.append(Spacer(1, 5))
tip_data = [
    [Paragraph("<b>VVM (Vaccine Vial Monitor)</b>", sBold),
     Paragraph("<b>Shake Test</b>", sBold),
     Paragraph("<b>Open Vial Policy</b>", sBold)],
    [Paragraph("Heat-sensitive colour indicator on vial. Inner square lighter than outer ring = USE. Inner square same or darker = DISCARD.", sSmall),
     Paragraph("For adsorbed vaccines (DPT, Hep B, TT, Td): Shake frozen + unfrozen vials; compare appearance. Frozen vial shows flocculation = DISCARD.", sSmall),
     Paragraph("Multi-dose vials of OPV, DPT, TT, Hep B, Pentavalent can be reused up to 4 weeks if: cold chain maintained, VVM valid, no contamination. BCG = discard after session.", sSmall)],
]
tip_t = Table(tip_data, colWidths=[6.0*cm, 6.0*cm, 6.2*cm])
tip_t.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), C_LBLUE),
    ("FONTNAME",   (0,0), (-1,0), "Helvetica-Bold"),
    ("GRID",       (0,0), (-1,-1), 0.3, colors.HexColor("#90caf9")),
    ("FONTSIZE",   (0,0), (-1,-1), 7.5),
    ("TOPPADDING", (0,0), (-1,-1), 4),
    ("BOTTOMPADDING",(0,0),(-1,-1), 4),
    ("VALIGN",     (0,0), (-1,-1), "TOP"),
]))
story.append(tip_t)
story.append(Spacer(1, 8))

# ═══════════════════════════════════════════════════════════════════════
# SECTION 3 – SPECIAL VACCINES
# ═══════════════════════════════════════════════════════════════════════
story.append(section_header("3. Special / High-Risk Group Vaccines", C_PURPLE))
story.append(Spacer(1, 4))

sv_data = [
    [Paragraph("<b>Disease</b>", sBold), Paragraph("<b>Vaccine / Schedule</b>", sBold), Paragraph("<b>Target Group / Notes</b>", sBold)],
    [Paragraph("Hepatitis A", sSmall), Paragraph("2 doses (0 & 6 months); IM", sSmall), Paragraph("Travellers to endemic areas; children in high-risk settings", sSmall)],
    [Paragraph("Typhoid", sSmall), Paragraph("Vi polysaccharide: 1 dose SC/IM (above 2 yrs)\nOral Ty21a: days 1,3,5", sSmall), Paragraph("Travellers; endemic areas. Protection from day 7.", sSmall)],
    [Paragraph("Meningococcal", sSmall), Paragraph("Quadrivalent (A,C,W,Y) 1 dose IM", sSmall), Paragraph("Hajj pilgrims; outbreak control; high-risk travellers", sSmall)],
    [Paragraph("Yellow Fever", sSmall), Paragraph("1 dose SC; booster ×1 after 10 yrs", sSmall), Paragraph("Mandatory for travel to endemic countries (ICVP required)", sSmall)],
    [Paragraph("Rabies (PEP)", sSmall), Paragraph("5 doses: days 0,3,7,14,28 IM deltoid\n(Zagreb: 0,7,21 — 3 doses)", sSmall), Paragraph("Post-exposure prophylaxis; with RIG for cat. III exposure", sSmall)],
    [Paragraph("Influenza", sSmall), Paragraph("Annual 1 dose IM; 2 doses in first-time vaccinees <9 yrs", sSmall), Paragraph("Elderly >65; healthcare workers; chronic disease; pregnancy", sSmall)],
    [Paragraph("HPV", sSmall), Paragraph("2 doses (0 & 6 months) for 9–14 yrs\n3 doses (0,1,6 or 0,2,6) for ≥15 yrs", sSmall), Paragraph("Girls 9–14 yrs (India NIS); prevents cervical cancer (HPV 16,18 = 70% of cases); does not replace Pap smear", sSmall)],
    [Paragraph("Varicella", sSmall), Paragraph("2 doses SC; 12–18 months & 4–6 yrs", sSmall), Paragraph("Seronegative individuals; healthcare workers; outbreaks", sSmall)],
    [Paragraph("Cholera", sSmall), Paragraph("Oral; 2 doses ≥6 weeks apart", sSmall), Paragraph("Outbreak control; travellers to epidemic areas", sSmall)],
    [Paragraph("Pneumococcal\n(PCV13 / PPSV23)", sSmall), Paragraph("PCV13: 3 doses + 1 booster (infants)\nPPSV23: 1 dose (adults >65)", sSmall), Paragraph("Under NIS in some states; elderly; asplenic; immunocompromised", sSmall)],
]
sv_t = Table(sv_data, colWidths=[3.2*cm, 7.0*cm, 8.0*cm], repeatRows=1)
sv_t.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,0), C_PURPLE),
    ("TEXTCOLOR",     (0,0), (-1,0), C_WHITE),
    ("FONTNAME",      (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTSIZE",      (0,0), (-1,-1), 7.5),
    ("GRID",          (0,0), (-1,-1), 0.3, colors.HexColor("#ce93d8")),
    ("TOPPADDING",    (0,0), (-1,-1), 4),
    ("BOTTOMPADDING", (0,0), (-1,-1), 4),
    ("VALIGN",        (0,0), (-1,-1), "TOP"),
    ("ROWBACKGROUNDS",(0,1), (-1,-1), [C_WHITE, C_LPURPLE]),
]))
story.append(sv_t)
story.append(Spacer(1, 8))

# PAGE BREAK before AEFI
story.append(PageBreak())

# ═══════════════════════════════════════════════════════════════════════
# SECTION 4 – AEFI CLASSIFICATION
# ═══════════════════════════════════════════════════════════════════════
story.append(section_header("4. AEFI — Adverse Events Following Immunization", C_RED))
story.append(Spacer(1, 4))

story.append(Paragraph(
    "<b>Definition:</b> Any untoward medical occurrence which follows immunization and which does not necessarily have a causal relationship with the usage of the vaccine. (WHO)",
    sBody))
story.append(Spacer(1, 4))

# Classification table
aefi_data = [
    [Paragraph("<b>Category</b>", sBold), Paragraph("<b>Definition</b>", sBold), Paragraph("<b>Examples</b>", sBold), Paragraph("<b>Action</b>", sBold)],
    [Paragraph("1. Vaccine Product-\nRelated Reaction", sSmall),
     Paragraph("Caused by inherent properties of the vaccine, even when correctly prepared and administered", sSmall),
     Paragraph("• VAPP (OPV-associated paralytic polio)\n• BCG lymphadenitis / BCG osteitis\n• Febrile seizures (DPT whole cell)\n• Measles vaccine rash\n• Anaphylaxis (rare)", sSmall),
     Paragraph("Report; causality assessment; may need lot withdrawal", sSmall)],
    [Paragraph("2. Vaccine Quality\nDefect-Related\nReaction", sSmall),
     Paragraph("Caused by a defect in vaccine manufacturing — deviation from quality standards", sSmall),
     Paragraph("• Incomplete inactivation of virus\n• Contaminated batch\n• Wrong potency", sSmall),
     Paragraph("Lot withdrawal; notify manufacturer and regulatory authority", sSmall)],
    [Paragraph("3. Immunization\nError-Related\nReaction\n(Programmatic)", sSmall),
     Paragraph("Caused by error in vaccine preparation, handling, or administration", sSmall),
     Paragraph("• Sterile / septic abscess at injection site\n• Wrong vaccine / wrong dose\n• Wrong route of administration\n• Reconstituted with wrong diluent\n• Non-sterile technique\n• Frozen adsorbed vaccine given", sSmall),
     Paragraph("Immediate correction; supervisor review; training; cold chain audit", sSmall)],
    [Paragraph("4. Immunization\nAnxiety-Related\nReaction", sSmall),
     Paragraph("Arises from anxiety about the immunization — NOT due to vaccine itself", sSmall),
     Paragraph("• Vasovagal syncope (fainting)\n• Hyperventilation\n• Mass psychogenic illness (MPI)\n• Anxiety attacks", sSmall),
     Paragraph("Observation 30 min post-vaccination; manage anxiety; education", sSmall)],
    [Paragraph("5. Coincidental\nEvent", sSmall),
     Paragraph("Temporal association only — NOT caused by vaccination; would have occurred regardless", sSmall),
     Paragraph("• Fever from concurrent infection unrelated to vaccine\n• SIDS coinciding with DPT timing\n• Intussusception (must be assessed carefully with RVV)", sSmall),
     Paragraph("Document; investigate to rule out causal link; reassure community", sSmall)],
]

aefi_t = Table(aefi_data, colWidths=[3.4*cm, 4.5*cm, 5.8*cm, 4.5*cm], repeatRows=1)
aefi_t.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,0), C_RED),
    ("TEXTCOLOR",     (0,0), (-1,0), C_WHITE),
    ("FONTNAME",      (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTSIZE",      (0,0), (-1,-1), 7.5),
    ("GRID",          (0,0), (-1,-1), 0.3, colors.HexColor("#ef9a9a")),
    ("TOPPADDING",    (0,0), (-1,-1), 4),
    ("BOTTOMPADDING", (0,0), (-1,-1), 4),
    ("VALIGN",        (0,0), (-1,-1), "TOP"),
    ("ROWBACKGROUNDS",(0,1), (-1,-1), [C_WHITE, C_LRED]),
    ("FONTNAME",      (0,1), (0,-1), "Helvetica-Bold"),
]))
story.append(aefi_t)
story.append(Spacer(1, 6))

# ═══════════════════════════════════════════════════════════════════════
# SECTION 5 – SERIOUS vs SEVERE
# ═══════════════════════════════════════════════════════════════════════
story.append(section_header("5. 'Serious' vs 'Severe' AEFI — NOT the Same!", C_ORANGE))
story.append(Spacer(1, 4))

ss_data = [
    [Paragraph("<b>Serious AEFI</b>", sBold), Paragraph("<b>Severe AEFI</b>", sBold)],
    [Paragraph("Based on <b>OUTCOME</b>\nResults in death, hospitalization (or prolongation), disability/incapacity, life-threatening event, or congenital anomaly", sSmall),
     Paragraph("Based on <b>INTENSITY/GRADE</b> of the reaction\nA reaction that is intense or extreme but may not lead to hospitalization or death", sSmall)],
    [Paragraph("<b>Examples:</b> Anaphylaxis leading to ICU admission; VAPP causing permanent paralysis; death following immunization", sSmall),
     Paragraph("<b>Examples:</b> Grade 3 local reaction (induration >5cm, inability to use limb) — may be 'severe' but not 'serious' if no hospitalization", sSmall)],
    [Paragraph("→ ALL serious AEFIs must be reported within 24 hours to BMOH", sSmall),
     Paragraph("→ A reaction can be SEVERE but NOT SERIOUS, or SERIOUS but NOT SEVERE", sSmall)],
]

ss_t = Table(ss_data, colWidths=[9.1*cm, 9.1*cm])
ss_t.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,0), C_LYELLOW),
    ("FONTNAME",      (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTSIZE",      (0,0), (-1,-1), 7.5),
    ("GRID",          (0,0), (-1,-1), 0.4, colors.HexColor("#ffcc02")),
    ("TOPPADDING",    (0,0), (-1,-1), 5),
    ("BOTTOMPADDING", (0,0), (-1,-1), 5),
    ("VALIGN",        (0,0), (-1,-1), "TOP"),
    ("BACKGROUND",    (0,3), (-1,3), C_LYELLOW),
    ("FONTNAME",      (0,3), (-1,3), "Helvetica-Bold"),
    ("TEXTCOLOR",     (0,3), (-1,3), C_ORANGE),
]))
story.append(ss_t)
story.append(Spacer(1, 6))

# ═══════════════════════════════════════════════════════════════════════
# SECTION 6 – AEFI REPORTING & INVESTIGATION
# ═══════════════════════════════════════════════════════════════════════
story.append(section_header("6. AEFI Reporting, Investigation & Management", C_GREEN))
story.append(Spacer(1, 4))

rep_left = Table([
    [Paragraph("<b>AEFI Reporting Timeline</b>", sH2)],
    [Table([
        [Paragraph("<b>AEFI Type</b>", sBold), Paragraph("<b>Report within</b>", sBold)],
        [Paragraph("Death / Cluster / Serious AEFI", sSmall), Paragraph("24 HOURS to BMOH → CMOH → State", sSmall)],
        [Paragraph("Hospitalisation", sSmall), Paragraph("Within 24–48 hours", sSmall)],
        [Paragraph("Any AEFI (minor/moderate)", sSmall), Paragraph("Within 7 days", sSmall)],
        [Paragraph("Monthly summary", sSmall), Paragraph("Routine monthly report", sSmall)],
    ], colWidths=[4.2*cm, 4.0*cm],
       style=TableStyle([
           ("GRID", (0,0), (-1,-1), 0.3, colors.HexColor("#a5d6a7")),
           ("BACKGROUND", (0,0), (-1,0), C_LGREEN),
           ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
           ("FONTSIZE", (0,0), (-1,-1), 7),
           ("TOPPADDING", (0,0), (-1,-1), 3),
           ("BOTTOMPADDING", (0,0), (-1,-1), 3),
           ("ROWBACKGROUNDS", (0,1), (-1,-1), [C_WHITE, C_LGREEN]),
       ]))],
], colWidths=[8.5*cm])

rep_right = Table([
    [Paragraph("<b>Field Investigation Steps</b>", sH2)],
    [Paragraph(
        "1. Immediate clinical management (adrenaline for anaphylaxis)<br/>"
        "2. Fill AEFI reporting form; report to BMOH within 24 hrs<br/>"
        "3. Collect batch no., lot no., expiry date, vial details<br/>"
        "4. Examine remaining vials; preserve samples<br/>"
        "5. Check cold chain records, reconstitution details<br/>"
        "6. Examine all others vaccinated in same session<br/>"
        "7. Send vaccine samples to designated laboratory<br/>"
        "8. Causality assessment by District/State AEFI Committee<br/>"
        "9. Community communication to prevent vaccine hesitancy",
        sSmall)],
], colWidths=[9.7*cm])

rep_row = Table([[rep_left, rep_right]], colWidths=[8.7*cm, 9.5*cm])
rep_row.setStyle(TableStyle([
    ("VALIGN", (0,0), (-1,-1), "TOP"),
    ("LEFTPADDING", (0,0), (-1,-1), 0),
    ("RIGHTPADDING", (0,0), (-1,-1), 4),
]))
story.append(rep_row)
story.append(Spacer(1, 6))

# ═══════════════════════════════════════════════════════════════════════
# SECTION 7 – ANAPHYLAXIS MANAGEMENT
# ═══════════════════════════════════════════════════════════════════════
story.append(section_header("7. Anaphylaxis Management at Immunization Session", C_RED))
story.append(Spacer(1, 4))

ana_data = [
    [Paragraph("<b>Recognition</b>", sBold), Paragraph("<b>Immediate Management</b>", sBold), Paragraph("<b>Kit Contents (MUST be present)</b>", sBold)],
    [Paragraph(
        "• Onset: within 15–30 min of vaccination\n"
        "• Urticaria / angioedema\n"
        "• Bronchospasm / wheeze\n"
        "• Hypotension / collapse\n"
        "• Loss of consciousness\n"
        "• Stridor / cyanosis", sSmall),
     Paragraph(
        "1. Call for help; do not leave patient\n"
        "2. Position supine; raise legs (if BP low)\n"
        "3. Adrenaline (Epinephrine) 1:1000\n"
        "   0.01 mg/kg IM (max 0.5 mg) anterolateral thigh\n"
        "   Repeat every 5–15 min if needed\n"
        "4. Oxygen if available\n"
        "5. IV fluids for hypotension\n"
        "6. Antihistamine (chlorpheniramine) IM/IV\n"
        "7. Hydrocortisone IV (for late phase)\n"
        "8. Refer to hospital URGENTLY", sSmall),
     Paragraph(
        "• Adrenaline 1:1000 (1 mg/ml) ampoules\n"
        "• Disposable syringes (1ml, 2ml)\n"
        "• Chlorpheniramine maleate injection\n"
        "• IV fluids (normal saline)\n"
        "• IV cannula + giving set\n"
        "• Oxygen cylinder / mask\n"
        "• Hub cutter (functioning)\n"
        "• Referral documentation\n"
        "• Transport arrangement", sSmall)],
]

ana_t = Table(ana_data, colWidths=[5.5*cm, 7.0*cm, 5.7*cm])
ana_t.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,0), C_LRED),
    ("FONTNAME",      (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTSIZE",      (0,0), (-1,-1), 7.5),
    ("GRID",          (0,0), (-1,-1), 0.4, colors.HexColor("#ef9a9a")),
    ("TOPPADDING",    (0,0), (-1,-1), 5),
    ("BOTTOMPADDING", (0,0), (-1,-1), 5),
    ("VALIGN",        (0,0), (-1,-1), "TOP"),
    ("BACKGROUND",    (0,1), (-1,1), C_WHITE),
]))
story.append(ana_t)
story.append(Spacer(1, 6))

# ═══════════════════════════════════════════════════════════════════════
# SECTION 8 – HERD IMMUNITY & KEY CONCEPTS
# ═══════════════════════════════════════════════════════════════════════
story.append(section_header("8. Key Immunization Concepts", C_TEAL))
story.append(Spacer(1, 4))

concepts = [
    ["<b>Herd Immunity</b>", "When a sufficient proportion of a population is immune → infection spread is limited even in non-immune individuals. Indirect protection for unvaccinated.", "Threshold: Measles ~95% | Polio ~80–85% | Smallpox ~80%"],
    ["<b>Drop-out</b>", "Child who received SOME doses but did NOT complete full immunization series.", "Tracked by: Drop-out rate = (Penta-1 – MR-1) / Penta-1 × 100"],
    ["<b>Left-out</b>", "Child who received NO vaccine dose at all — completely unimmunized.", "Target: Zero left-outs; tracked via headcount surveys"],
    ["<b>Epidemiologically\nImportant Carrier</b>", "A carrier is more epidemiologically important than a case because carriers are more numerous, undetected, mobile, and spread disease longer without knowing.", "Typhoid carriers (Salmonella typhi); HBV carriers"],
    ["<b>VVM Stages</b>", "Stage 1: Inner square lighter (OK) | Stage 2: Same (USE SOON) | Stage 3: Same shade (DO NOT USE) | Stage 4: Darker (DISCARD)", ""],
    ["<b>Shake Test</b>", "Used for adsorbed vaccines (DPT, TT, Td, Hep B). Frozen vaccine shows permanent flocculation/clumping. Compare frozen vs. suspected freeze-damaged vial.", "If same appearance = DISCARD"],
    ["<b>Contraindications</b>", "True contraindications: anaphylaxis to prior dose or vaccine component. AVOID: live vaccines in immunocompromised. FALSE contraindication: mild fever, minor illness, low-grade malnutrition.", ""],
    ["<b>Simultaneous\nVaccination</b>", "Multiple vaccines can be given simultaneously at different sites. Does NOT reduce efficacy or increase reactions (except avoid 2 live injected vaccines unless given same day or 4 weeks apart).", ""],
]

c_headers = [Paragraph("<b>Concept</b>", sBold), Paragraph("<b>Explanation</b>", sBold), Paragraph("<b>Key Fact / Formula</b>", sBold)]
c_rows = [c_headers]
for row in concepts:
    c_rows.append([Paragraph(row[0], sSmall), Paragraph(row[1], sSmall), Paragraph(row[2], sSmall)])

conc_t = Table(c_rows, colWidths=[3.5*cm, 9.0*cm, 5.7*cm], repeatRows=1)
conc_t.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,0), C_TEAL),
    ("TEXTCOLOR",     (0,0), (-1,0), C_WHITE),
    ("FONTNAME",      (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTSIZE",      (0,0), (-1,-1), 7.5),
    ("GRID",          (0,0), (-1,-1), 0.3, colors.HexColor("#b2dfdb")),
    ("TOPPADDING",    (0,0), (-1,-1), 4),
    ("BOTTOMPADDING", (0,0), (-1,-1), 4),
    ("VALIGN",        (0,0), (-1,-1), "TOP"),
    ("ROWBACKGROUNDS",(0,1), (-1,-1), [C_WHITE, C_LTEAL]),
    ("FONTNAME",      (0,1), (0,-1), "Helvetica-Bold"),
]))
story.append(conc_t)
story.append(Spacer(1, 6))

# ═══════════════════════════════════════════════════════════════════════
# SECTION 9 – POLIO ERADICATION STRATEGIES
# ═══════════════════════════════════════════════════════════════════════
story.append(section_header("9. Polio Eradication & Immunization Programme Strategies", C_NAVY))
story.append(Spacer(1, 4))

polio_left = [
    Paragraph("<b>Strategies for Polio Eradication:</b>", sBold),
    Paragraph("1. Routine immunization (OPV + IPV in NIS)", sSmall),
    Paragraph("2. National Immunization Days (NIDs) — Pulse Polio: 2 rounds/year", sSmall),
    Paragraph("3. Sub-National Immunization Days (SNIDs) — high-risk areas", sSmall),
    Paragraph("4. AFP Surveillance — target ≥2 cases/100,000 children under 15 years", sSmall),
    Paragraph("5. Mop-up operations — house-to-house in high-risk/outbreak areas", sSmall),
    Paragraph("6. IPV introduction in routine schedule (2015) — eliminates VAPP risk", sSmall),
    Spacer(1,4),
    Paragraph("<b>Why OPV given at birth (zero dose)?</b>", sBold),
    Paragraph("• Early gut mucosal immunity before poliovirus exposure", sSmall),
    Paragraph("• OPV multiplies in gut → spreads to contacts → boosts herd immunity", sSmall),
    Paragraph("• Subsequent 3 doses needed for complete seroconversion (maternal antibodies partially neutralize vaccine virus)", sSmall),
]

polio_right = [
    Paragraph("<b>Intensified Mission Indradhanush (IMI):</b>", sBold),
    Paragraph("• Target: ≥90% full immunization coverage", sSmall),
    Paragraph("• Focuses on high-risk districts, missed children, urban slums", sSmall),
    Paragraph("• 7 rounds of intensive immunization in selected districts", sSmall),
    Spacer(1,4),
    Paragraph("<b>UIP Goals under Mission Indradhanush:</b>", sBold),
    Paragraph("• 7 vaccines originally → now 12 vaccines under NIS", sSmall),
    Paragraph("• Target: Full immunization of every child born in India", sSmall),
    Spacer(1,4),
    Paragraph("<b>Why Hep B given within 24 hrs of birth?</b>", sBold),
    Paragraph("• Prevents vertical (mother→child) transmission", sSmall),
    Paragraph("• 90% of perinatally infected neonates develop chronic HBV", sSmall),
    Paragraph("• Birth dose + anti-HBs immunoglobulin (HBIG) for high-risk neonates", sSmall),
]

pr_cols = [[p for p in polio_left], [p for p in polio_right]]
pr_t = Table([[
    Table([[item] for item in polio_left], colWidths=[8.5*cm]),
    Table([[item] for item in polio_right], colWidths=[8.9*cm]),
]], colWidths=[8.7*cm, 9.5*cm])
pr_t.setStyle(TableStyle([
    ("VALIGN", (0,0), (-1,-1), "TOP"),
    ("LEFTPADDING", (0,0), (-1,-1), 0),
    ("RIGHTPADDING",(0,0),(-1,-1), 4),
]))
story.append(pr_t)
story.append(Spacer(1, 8))

# ═══════════════════════════════════════════════════════════════════════
# FOOTER NOTE
# ═══════════════════════════════════════════════════════════════════════
story.append(HRFlowable(width="100%", thickness=1, color=C_NAVY))
story.append(Spacer(1, 3))
story.append(Paragraph(
    "<b>Reference:</b> Park's Textbook of Preventive and Social Medicine (Park K.), ISBN 9789382219163 | "
    "<b>NIS Source:</b> Ministry of Health & Family Welfare, Government of India | "
    "For latest updates refer to MoHFW/WHO guidelines. This guide is for exam reference purposes.",
    sFooter))

# ── Build ─────────────────────────────────────────────────────────────
doc.build(story, onFirstPage=add_page_number, onLaterPages=add_page_number)
print(f"PDF generated: {OUTPUT}")
Running Command

cd /home/daytona/workspace/immunization-guide && python3 generate_pdf.py 2>&1

Running Command

ls -lh /home/daytona/workspace/immunization-guide/Immunization_AEFI_QuickRef.pdf

Your quick reference PDF is ready! Download it here:

Immunization AEFI QuickRef

PDF Document · PDF


What's inside the 2-page guide:
SectionContent
1. NIS TableFull National Immunization Schedule - age, vaccine, dose, route, site, remarks for every antigen from birth to 16 years + pregnant women
2. Cold ChainVaccine temperature sensitivity (freeze vs. refrigerate), cold chain equipment by level (State→PHC→outreach), VVM guide, Shake Test, Open Vial Policy
3. Special VaccinesHigh-risk group vaccines - HPV, Hep A, Typhoid, Rabies PEP, Influenza, Meningococcal, Varicella, Cholera, Pneumococcal
4. AEFI ClassificationAll 5 WHO categories with definitions and examples - vaccine product-related, quality defect, immunization error, anxiety-related, coincidental
5. Serious vs SevereKey exam distinction - outcome-based (serious) vs intensity-based (severe) with examples
6. AEFI ReportingTimeline table + field investigation steps
7. AnaphylaxisRecognition, step-by-step management, kit contents (adrenaline dose included)
8. Key ConceptsHerd immunity, dropout vs left-out, VVM stages, contraindications, simultaneous vaccination
9. Polio EradicationAFP surveillance target, NIDs, Mission Indradhanush, rationale for OPV zero dose and Hep B birth dose
This is a shared conversation. Sign in to Orris to start your own chat.