mkdir -p /tmp/workspace/cm-notes && cat << 'PYEOF' > /tmp/workspace/cm-notes/make_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.lib import colors
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 ListFlowable, ListItem
OUTPUT = "/tmp/workspace/cm-notes/CM_Notes_1stMBBS_Park.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=2*cm, leftMargin=2*cm,
topMargin=2.2*cm, bottomMargin=2.2*cm,
title="CM Notes - 1st MBBS | Park's PSM",
author="MGM Medical College - Community Medicine"
)
styles = getSampleStyleSheet()
# ── Custom Styles ──────────────────────────────────────────────────────────────
NAVY = colors.HexColor("#1a2c5b")
TEAL = colors.HexColor("#007c91")
GOLD = colors.HexColor("#e8a000")
LGREY = colors.HexColor("#f4f6fb")
DKGRY = colors.HexColor("#444444")
RED = colors.HexColor("#c0392b")
GREEN = colors.HexColor("#1a7a4a")
cover_title = ParagraphStyle("CoverTitle", fontSize=26, leading=32,
textColor=NAVY, alignment=TA_CENTER, fontName="Helvetica-Bold", spaceAfter=6)
cover_sub = ParagraphStyle("CoverSub", fontSize=14, leading=18,
textColor=TEAL, alignment=TA_CENTER, fontName="Helvetica", spaceAfter=4)
cover_info = ParagraphStyle("CoverInfo", fontSize=11, leading=15,
textColor=DKGRY, alignment=TA_CENTER, fontName="Helvetica", spaceAfter=3)
h1 = ParagraphStyle("H1", fontSize=14, leading=18, textColor=colors.white,
fontName="Helvetica-Bold", spaceAfter=4, spaceBefore=14,
leftIndent=0, borderPad=6, backColor=NAVY)
h2 = ParagraphStyle("H2", fontSize=11, leading=14, textColor=TEAL,
fontName="Helvetica-Bold", spaceAfter=3, spaceBefore=8)
h3 = ParagraphStyle("H3", fontSize=10, leading=13, textColor=NAVY,
fontName="Helvetica-Bold", spaceAfter=2, spaceBefore=5)
body = ParagraphStyle("Body", fontSize=9.2, leading=13, textColor=DKGRY,
fontName="Helvetica", spaceAfter=2, alignment=TA_JUSTIFY)
bullet = ParagraphStyle("Bullet", fontSize=9.2, leading=13, textColor=DKGRY,
fontName="Helvetica", leftIndent=12, spaceAfter=1.5,
bulletIndent=4, bulletFontSize=9)
tip_style = ParagraphStyle("Tip", fontSize=9, leading=13, textColor=GREEN,
fontName="Helvetica-Bold", leftIndent=8, spaceAfter=2)
warn_style = ParagraphStyle("Warn", fontSize=9, leading=13, textColor=RED,
fontName="Helvetica-Bold", leftIndent=8, spaceAfter=2)
def H1(text):
return Paragraph(f" {text}", h1)
def H2(text):
return Paragraph(text, h2)
def H3(text):
return Paragraph(text, h3)
def B(text):
return Paragraph(text, body)
def BU(text):
return Paragraph(f"• {text}", bullet)
def SP(n=4):
return Spacer(1, n)
def HR():
return HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#cccccc"), spaceAfter=4, spaceBefore=4)
def make_table(headers, rows, col_widths=None):
data = [headers] + rows
if col_widths is None:
n = len(headers)
w = 16.5*cm / n
col_widths = [w]*n
t = Table(data, colWidths=col_widths, repeatRows=1)
style = TableStyle([
('BACKGROUND', (0,0), (-1,0), NAVY),
('TEXTCOLOR', (0,0), (-1,0), colors.white),
('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
('FONTSIZE', (0,0), (-1,0), 8.5),
('ALIGN', (0,0), (-1,-1), 'LEFT'),
('VALIGN', (0,0), (-1,-1), 'TOP'),
('FONTNAME', (0,1), (-1,-1), 'Helvetica'),
('FONTSIZE', (0,1), (-1,-1), 8),
('ROWBACKGROUNDS',(0,1),(-1,-1),[colors.white, LGREY]),
('GRID', (0,0), (-1,-1), 0.4, colors.HexColor("#d0d0d0")),
('LEFTPADDING', (0,0), (-1,-1), 5),
('RIGHTPADDING', (0,0), (-1,-1), 5),
('TOPPADDING', (0,0), (-1,-1), 3),
('BOTTOMPADDING',(0,0), (-1,-1), 3),
])
t.setStyle(style)
return t
story = []
# ═══════════════════════════════════════════════════════════════
# COVER PAGE
# ═══════════════════════════════════════════════════════════════
story += [SP(60)]
story.append(HRFlowable(width="100%", thickness=3, color=NAVY))
story += [SP(12)]
story.append(Paragraph("COMMUNITY MEDICINE NOTES", cover_title))
story.append(Paragraph("1<sup>st</sup> MBBS · Term End Exam", cover_sub))
story += [SP(6)]
story.append(HRFlowable(width="60%", thickness=1.5, color=GOLD))
story += [SP(10)]
story.append(Paragraph("Based on Park's Textbook of Preventive and Social Medicine", cover_info))
story.append(Paragraph("MGM Medical College · Dept. of Community Medicine · Navi Mumbai", cover_info))
story.append(Paragraph("All 13 Syllabus Topics Covered", cover_info))
story += [SP(10)]
story.append(HRFlowable(width="100%", thickness=3, color=NAVY))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════
# TOPIC 1
# ═══════════════════════════════════════════════════════════════
story.append(H1("TOPIC 1: MAN AND MEDICINE – TOWARDS HEALTH FOR ALL"))
story.append(H2("Phases of Medicine"))
story.append(make_table(
["Phase", "Period", "Focus"],
[
["Primitive/Ancient", "Pre-history", "Magic, spirits, herbs"],
["Scientific", "Post-Pasteur (1880s)", "Germ theory, bacteriology"],
["Curative", "1900–1950", "Treating individuals, specialization"],
["Preventive", "1920–1960", "Health promotion, vaccines"],
["Social Engineering", "1960–1980", "Social determinants, community"],
["Health for All", "1981–2000", "Primary Health Care (Alma Ata 1978)"],
],
[4.5*cm, 4.5*cm, 7.5*cm]
))
story += [SP(6)]
story.append(H2("Types of Medicine"))
for line in [
"<b>Curative</b> – Remove disease from the patient (individual focus)",
"<b>Preventive</b> – Prevent disease before it occurs (population focus)",
"<b>Social Medicine</b> – Studies health in social context; health is determined by social forces",
"<b>Community Medicine</b> – Studies health problems of defined communities and delivers care",
]:
story.append(BU(line))
story += [SP(4)]
story.append(H2("Key Milestones"))
for line in [
"Germ theory – Pasteur & Koch",
"<b>Alma Ata Declaration (1978)</b> – Primary Health Care, \"Health for All by 2000\"",
"<b>MDGs</b> (2000–2015) – 8 goals | <b>SDGs</b> (2015–2030) – 17 goals; <b>Goal 3 = Good Health</b>",
]:
story.append(BU(line))
story += [SP(4)]
story.append(H2("Primary Health Care – Essential Elements (Alma Ata 1978)"))
story.append(make_table(
["Element"],
[["Safe water & sanitation"], ["Adequate nutrition"], ["Family planning"],
["Health education"], ["MCH care"], ["Essential drugs"],
["Communicable disease control"], ["Immunization"],
["Curative care for common ailments"]],
[16.5*cm]
))
story.append(SP(4))
# ═══════════════════════════════════════════════════════════════
# TOPIC 2
# ═══════════════════════════════════════════════════════════════
story.append(H1("TOPIC 2: CONCEPT OF HEALTH AND DISEASE"))
story.append(H2("Concepts of Health (Changing)"))
for line in [
"<b>Biomedical concept</b> – Health = absence of disease (old, narrow)",
"<b>Ecological concept</b> – Health = balance between man and environment",
"<b>Psychosocial concept</b> – Health influenced by social, psychological factors",
"<b>Holistic concept</b> – Health is multi-dimensional (body, mind, society, spirit)",
]:
story.append(BU(line))
story += [SP(4)]
story.append(H2("WHO Definition of Health (1948)"))
story.append(B("<i>\"A state of complete physical, mental and social well-being and not merely the absence of disease or infirmity.\"</i>"))
story.append(B("<b>Criticism:</b> Utopian, not measurable, ignores adaptability"))
story += [SP(4)]
story.append(H2("Dimensions of Health"))
story.append(B("Physical · Mental · Social · Spiritual · Emotional · Vocational"))
story += [SP(4)]
story.append(H2("Determinants of Health (Lalonde's Model)"))
for line in [
"Human biology (genetics)", "Environment",
"Lifestyle/behaviour (MOST modifiable)", "Health care organization"
]:
story.append(BU(line))
story += [SP(4)]
story.append(H2("Levels of Prevention"))
story.append(make_table(
["Level", "Action", "Example"],
[
["Primordial", "Prevent risk factors emerging", "Healthy national policy"],
["Primary", "Prevent disease onset", "Vaccines, health education"],
["Secondary", "Early detection & treatment", "Screening, case finding"],
["Tertiary", "Limit disability, rehabilitate","Physiotherapy, prosthesis"],
],
[3.5*cm, 6.5*cm, 6.5*cm]
))
story += [SP(4)]
story.append(H2("Other Key Concepts"))
for line in [
"<b>Natural History of Disease:</b> Pre-pathogenesis → Pathogenesis → Resolution",
"<b>Epidemiological Triad:</b> Agent – Host – Environment",
"<b>Web of Causation</b> (MacMahon) – Multiple interconnected factors",
"<b>Iceberg Phenomenon</b> – Most disease is submerged (undetected/subclinical)",
"<b>Multifactorial causation</b> – Concept revived by epidemiologists from Pettenkofer (1819–1901)",
]:
story.append(BU(line))
story.append(SP(4))
# ═══════════════════════════════════════════════════════════════
# TOPIC 3
# ═══════════════════════════════════════════════════════════════
story.append(H1("TOPIC 3: NUTRITION AND HEALTH"))
story.append(H2("ICMR RDA – Indian Adult Man"))
story.append(make_table(
["Nutrient", "Recommended Amount"],
[["Energy (sedentary)", "~2320 kcal/day"], ["Energy (moderate work)", "~2730 kcal/day"],
["Protein", "60 g/day"], ["Fat (visible)", "20 g/day minimum"],
["Iron (men)", "17 mg/day"], ["Iron (women)", "21 mg/day"],
["Calcium", "600 mg/day"], ["Vitamin C", "40 mg/day"],
["Vitamin A", "600 mcg (RE)/day"]],
[8*cm, 8.5*cm]
))
story += [SP(6)]
story.append(H2("Protein Energy Malnutrition (PEM)"))
story.append(make_table(
["Type", "Deficiency", "Key Features"],
[
["Marasmus", "Calorie", "Wasting, 'old man face', no oedema, <1 year"],
["Kwashiorkor", "Protein", "Oedema, 'moon face', fatty liver, 1–3 years"],
["Marasmic Kwashiorkor", "Mixed", "Severe wasting + oedema"],
],
[4*cm, 4*cm, 8.5*cm]
))
story += [SP(6)]
story.append(H2("Nutritional Deficiency Diseases"))
story.append(make_table(
["Nutrient", "Deficiency Disease", "Clinical Features"],
[
["Vitamin A", "Xerophthalmia", "Night blindness, Bitot's spots, keratomalacia"],
["Vitamin D", "Rickets / Osteomalacia", "Bowing of legs, bone softening"],
["Vitamin C", "Scurvy", "Bleeding gums, corkscrew hair, perifollicular haemorrhage"],
["B1 (Thiamine)","Beriberi", "Wet (cardiac), Dry (neuropathy), Wernicke's"],
["B2 (Riboflavin)","Ariboflavinosis", "Angular stomatitis, cheilosis, corneal vascularization"],
["Niacin (B3)", "Pellagra", "3 Ds: Dermatitis, Diarrhoea, Dementia (+Death = 4D)"],
["Iodine", "Goitre / Cretinism", "Endemic goitre, hypothyroidism"],
["Iron", "IDA", "Pallor, fatigue, koilonychia"],
["Fluoride (excess)", "Fluorosis", "Mottled teeth, skeletal fluorosis"],
],
[3.5*cm, 4*cm, 9*cm]
))
story += [SP(6)]
story.append(H2("National Nutritional Programmes (India)"))
for line in [
"<b>ICDS</b> – Integrated Child Development Services (children <6 yrs + pregnant/lactating women)",
"<b>MDMS / PM POSHAN</b> – Mid Day Meal Scheme (cooked meal for school children)",
"<b>NIDDCP</b> – National Iodine Deficiency Disorders Control Programme",
"<b>NNAPP</b> – National Nutritional Anaemia Prophylaxis Programme",
"<b>Vitamin A Prophylaxis Programme</b> – Vitamin A every 6 months (9 months to 5 years)",
]:
story.append(BU(line))
story.append(SP(4))
# ═══════════════════════════════════════════════════════════════
# TOPIC 4
# ═══════════════════════════════════════════════════════════════
story.append(H1("TOPIC 4: ENVIRONMENT AND HEALTH"))
story.append(H2("Water"))
for line in [
"WHO standard: <1 coliform/100 mL | Indian standard (BIS): 0 coliforms/100 mL",
"Purification: Sedimentation → Coagulation → Filtration → Chlorination",
"Residual chlorine: <b>0.5 mg/L</b> after 1 hour contact time",
"Bleaching powder: ~33% available chlorine",
"<b>Waterborne diseases:</b> Cholera, Typhoid, Hep A, Dysentery, Polio, Fluorosis",
]:
story.append(BU(line))
story += [SP(4)]
story.append(H2("Air Pollution"))
for line in [
"Major pollutants: SPM, SO₂, NOₓ, CO, Pb, ozone",
"Indoor air pollution (cooking fuels, tobacco) – major problem in India",
"Effects: COPD, lung cancer, asthma, cardiovascular disease",
]:
story.append(BU(line))
story += [SP(4)]
story.append(H2("Occupational Diseases"))
story.append(make_table(
["Occupation / Exposure", "Disease"],
[["Coal miners", "Coal Workers' Pneumoconiosis (CWP)"],
["Silica exposure","Silicosis"],
["Asbestos", "Asbestosis, Mesothelioma, Lung cancer"],
["Cotton workers", "Byssinosis"],
["Lead workers", "Lead poisoning (Plumbism)"]],
[7*cm, 9.5*cm]
))
story += [SP(4)]
story.append(H2("Noise & Radiation"))
for line in [
"WHO noise standard: <55 dB daytime; <45 dB night",
"Occupational: >85 dB causes <b>NIHL</b> (Noise Induced Hearing Loss)",
"Ionizing radiation (X-rays, gamma) → carcinogenesis, teratogenesis",
"Non-ionizing radiation (UV, microwave) → skin cancer, eye damage",
]:
story.append(BU(line))
story += [SP(4)]
story.append(H2("Solid Waste"))
for line in [
"Methods: Sanitary landfill (best), incineration, composting, vermicomposting",
"Biomedical waste: Yellow, Red, Blue, White containers (colour coding)",
]:
story.append(BU(line))
story.append(SP(4))
# ═══════════════════════════════════════════════════════════════
# TOPIC 5
# ═══════════════════════════════════════════════════════════════
story.append(H1("TOPIC 5: COMMUNICATION FOR HEALTH EDUCATION"))
story.append(H2("Definition"))
story.append(B("<i>\"A process that informs, motivates, and helps people to adopt and maintain healthy practices.\"</i> – WHO"))
story += [SP(4)]
story.append(H2("Communication Process"))
story.append(B("Source → Message → Channel → Receiver → Feedback (SMCR model)"))
story += [SP(4)]
story.append(H2("Methods of Health Education"))
story.append(make_table(
["Type", "Examples"],
[["Individual", "Counselling, bedside teaching"],
["Group", "Lecture, demonstration, role play, buzz group, symposium"],
["Mass media", "TV, radio, posters, pamphlets, newspapers"]],
[4*cm, 12.5*cm]
))
story += [SP(4)]
for line in [
"<b>IEC</b> – Information, Education, Communication",
"<b>KAP Survey</b> – Knowledge, Attitude, Practice – assesses health education needs",
"<b>Barriers:</b> Physical (noise), psychological (fear), social (language, culture), semantic",
"<b>CHEB</b> – Central Health Education Bureau (apex body in India)",
]:
story.append(BU(line))
story.append(SP(4))
# ═══════════════════════════════════════════════════════════════
# TOPIC 6
# ═══════════════════════════════════════════════════════════════
story.append(H1("TOPIC 6: DEMOGRAPHY AND FAMILY PLANNING"))
story.append(H2("Demographic Indices (India)"))
story.append(make_table(
["Index", "Definition", "India Value"],
[
["CBR", "Births per 1000 population/year", "~19.7 (2020)"],
["CDR", "Deaths per 1000 population/year", "~6.0"],
["IMR", "Deaths <1 yr per 1000 live births", "28 (NFHS-5)"],
["MMR", "Maternal deaths per 1,00,000 LB", "97 (2018–20)"],
["TFR", "Avg. children per woman (repro. life)","2.0 (NFHS-5)"],
["NRR", "Net Replacement Rate", "Target = 1"],
],
[2.5*cm, 7.5*cm, 6.5*cm]
))
story += [SP(6)]
story.append(H2("Demographic Transition Theory"))
story.append(make_table(
["Stage", "CBR", "CDR", "Growth"],
[["1", "High", "High", "Stable, low"],
["2", "High", "Falling","Rapid (India was here)"],
["3", "Falling","Low", "Slow"],
["4", "Low", "Low", "Stable (developed countries)"]],
[2*cm, 3*cm, 3*cm, 8.5*cm]
))
story += [SP(6)]
story.append(H2("Contraceptive Methods – Pearl Index (failures/100 woman-years)"))
story.append(make_table(
["Method", "Pearl Index"],
[["No contraception", "80–90"],
["Condom", "2–12"],
["Combined OCP", "0.1–1"],
["Cu-T 380A (IUCD)", "0.6–0.8"],
["DMPA (Injectable)", "0.3–1"],
["Vasectomy", "0.1–0.15"],
["Tubectomy", "0.5"],
["Rhythm method", "14–47"],
["LAM", "0–2 (exclusive BF)"]],
[9*cm, 7.5*cm]
))
story += [SP(6)]
story.append(H2("Key Family Planning Facts"))
for line in [
"<b>Cu-T 380A:</b> Effective 10 years; inserted within 48 hrs postpartum or after 4 weeks",
"<b>Emergency Contraception:</b> Levonorgestrel 1.5 mg within 72 hrs (best <24 hrs)",
"<b>Cu-T as EC:</b> Most effective if inserted within 5 days",
"<b>DMPA (Antara programme):</b> 150 mg IM every 3 months",
"<b>Vasectomy vs Tubectomy:</b> NSV – safer, simpler, cheaper, more effective; under-utilized due to stigma",
"<b>NPP 2000:</b> Target NRR = 1 | TFR target = 2.1 (replacement level)",
"<b>World Population Day:</b> July 11",
]:
story.append(BU(line))
story.append(SP(4))
# ═══════════════════════════════════════════════════════════════
# TOPIC 7
# ═══════════════════════════════════════════════════════════════
story.append(H1("TOPIC 7: ROLE OF SOCIAL FACTORS IN HEALTH & DISEASE (SGT)"))
story.append(H2("Social Determinants of Health (WHO)"))
for line in [
"Income and social protection", "Education",
"Employment and working conditions", "Housing and living environment",
"Early childhood development", "Ethnicity and race",
]:
story.append(BU(line))
story += [SP(4)]
story.append(H2("Key Social Factors"))
story.append(make_table(
["Factor", "Effect on Health"],
[["Poverty", "Malnutrition, infectious disease, poor access to care"],
["Education", "Low literacy → poor health knowledge, high IMR/MMR"],
["Occupation", "Occupational diseases; stress"],
["Urbanization", "NCDs, pollution, mental illness, accidents"],
["Caste/Religion","Food habits, marriage practices, superstitions"],
["Gender", "Women disproportionately bear disease burden"]],
[4*cm, 12.5*cm]
))
story += [SP(4)]
for line in [
"<b>Health Inequities:</b> Systematic, avoidable differences in health status between social groups",
"<b>Social Capital:</b> Networks, trust, norms that facilitate collective action – positively impacts health",
"<b>SDOH Framework (WHO 2008):</b> Structural determinants → Social position → Intermediary determinants → Health outcomes",
]:
story.append(BU(line))
story.append(SP(4))
# ═══════════════════════════════════════════════════════════════
# TOPIC 8
# ═══════════════════════════════════════════════════════════════
story.append(H1("TOPIC 8: STATUS OF MCH CARE IN INDIA (SGT)"))
story.append(H2("Key Statistics – NFHS-5 (2019–21)"))
story.append(make_table(
["Indicator", "Value", "SDG Target"],
[["MMR", "97/1,00,000 live births", "<70 by 2030"],
["IMR", "28/1000 live births", "<12 by 2030"],
["NMR", "20/1000 live births", "–"],
["U5MR","32/1000 live births", "<25 by 2030"],
["Institutional deliveries", "88.6%", "–"],
["Full immunization", "76.4%", "–"],
["ANC (4+ visits)", "58.1%", "–"]],
[5.5*cm, 5.5*cm, 5.5*cm]
))
story += [SP(6)]
story.append(H2("Causes of Maternal Death"))
for line in [
"<b>Direct:</b> Haemorrhage (leading), eclampsia, sepsis, obstructed labour, unsafe abortion",
"<b>Indirect:</b> Anaemia, malaria, hepatitis",
]:
story.append(BU(line))
story += [SP(4)]
story.append(H2("Key MCH Programmes"))
story.append(make_table(
["Programme", "Purpose"],
[["JSY (Janani Suraksha Yojana)", "Cash incentive for institutional delivery (BPL women)"],
["JSSK", "Free delivery & newborn care"],
["PMSMA", "Free ANC on 9th of every month"],
["LaQshya", "Labour room quality improvement"],
["MAA Programme", "Breastfeeding promotion"],
["RBSK", "Screening children 0–18 yrs for 4 Ds (Deficiency, Disease, Disability, Developmental Delay)"],
["POSHAN Abhiyan", "Targets stunting, wasting, low birth weight, anaemia"]],
[5.5*cm, 11*cm]
))
story += [SP(4)]
story.append(H2("ANC Schedule"))
for line in [
"1st visit: <12 weeks | 2nd: 14–26 wks | 3rd: 28–34 wks | 4th: 36+ wks",
"<b>IFA:</b> 100 tablets during pregnancy (180 mg elemental iron + 0.5 mg folic acid)",
"<b>Postnatal visits:</b> 48 hours, 2 weeks, 6 weeks after delivery",
]:
story.append(BU(line))
story.append(SP(4))
# ═══════════════════════════════════════════════════════════════
# TOPIC 9
# ═══════════════════════════════════════════════════════════════
story.append(H1("TOPIC 9: OVERVIEW OF VACCINES & COLD CHAIN (SGT)"))
story.append(H2("Types of Vaccines"))
story.append(make_table(
["Type", "Examples"],
[["Live attenuated", "BCG, OPV, MMR, Varicella, Yellow fever, JE (live)"],
["Killed/Inactivated","IPV, Hepatitis A, Rabies, Cholera, Pertussis (whole cell)"],
["Toxoids", "DT, TT (toxin only – no bacteria)"],
["Recombinant/Subunit","Hepatitis B, HPV, Typhoid (Vi), Meningococcal"]],
[4.5*cm, 12*cm]
))
story += [SP(6)]
story.append(H2("Universal Immunization Programme (UIP) – India"))
story.append(make_table(
["Age", "Vaccines"],
[["Birth", "BCG, OPV-0, Hep B-1"],
["6 weeks", "OPV-1, IPV-1, Penta-1, PCV-1, ROTA-1"],
["10 weeks", "OPV-2, Penta-2, ROTA-2"],
["14 weeks", "OPV-3, IPV-2, Penta-3, PCV-2, ROTA-3"],
["9–12 months", "MR-1, PCV Booster, JE-1 (endemic), Vit A (1st dose)"],
["16–24 months", "MR-2, OPV Booster, DPT Booster1, JE-2, Vit A (2nd)"],
["5–6 years", "DPT Booster2"],
["10 & 16 years", "Td"],
["Pregnancy", "TT (2 doses or 1 booster)"]],
[4*cm, 12.5*cm]
))
story += [SP(6)]
story.append(H2("Cold Chain"))
for line in [
"Temperature range: <b>+2°C to +8°C</b> (most vaccines) | OPV: stored at -20°C",
"ILR (Ice Lined Refrigerator) at district/PHC level",
"<b>VVM (Vaccine Vial Monitor):</b> Inner square darker than outer ring = DO NOT USE",
"<b>Shake Test:</b> For freeze-sensitive vaccines (DPT, TT, Hep B, DT) – discard if frozen",
"<b>AEFI:</b> Minor (fever, local swelling) or Major (anaphylaxis, encephalopathy)",
]:
story.append(BU(line))
story.append(SP(4))
# ═══════════════════════════════════════════════════════════════
# TOPIC 10
# ═══════════════════════════════════════════════════════════════
story.append(H1("TOPIC 10: ROLE OF NUTRITION IN HEALTH & DISEASE (SGT)"))
story.append(H2("Nutritional Assessment – ABCD"))
story.append(make_table(
["Method", "Details"],
[["A – Anthropometric", "Weight, height, MUAC, skin fold thickness"],
["B – Biochemical", "Hb, serum albumin, serum retinol"],
["C – Clinical", "Signs and symptoms of deficiency"],
["D – Dietary", "24-hr recall, food frequency questionnaire"]],
[4.5*cm, 12*cm]
))
story += [SP(6)]
story.append(H2("SAM Cutoffs & Management"))
for line in [
"MUAC <12.5 cm = SAM | 12.5–13.5 cm = MAM (children 6–59 months)",
"Z-score <-3 SD = SAM | -2 to -3 SD = MAM",
"<b>F-75</b> (stabilization phase) → <b>F-100 / RUTF</b> (rehabilitation phase)",
"<b>NRC</b> – Nutrition Rehabilitation Centre (inpatient SAM management)",
]:
story.append(BU(line))
story += [SP(4)]
story.append(H2("Obesity Cutoffs"))
for line in [
"WHO: BMI ≥25 = Overweight; ≥30 = Obese",
"Asian cutoffs: BMI ≥23 = Overweight; ≥25 = Obese",
"Waist circumference >90 cm (M), >80 cm (F) = Abdominal obesity (Asian)",
]:
story.append(BU(line))
story += [SP(4)]
story.append(H2("Diet and Disease Link"))
story.append(make_table(
["Dietary Factor", "Associated Disease"],
[["High fat/cholesterol", "CHD, stroke"],
["High salt", "Hypertension"],
["Excess sugar", "Diabetes, dental caries"],
["Low fibre", "Constipation, colorectal cancer"],
["Excess alcohol", "Liver cirrhosis, pancreatitis, neurological disorders"]],
[7*cm, 9.5*cm]
))
story.append(SP(4))
# ═══════════════════════════════════════════════════════════════
# TOPIC 11
# ═══════════════════════════════════════════════════════════════
story.append(H1("TOPIC 11: COMMUNICABLE DISEASES PREVALENT IN INDIA (SGT)"))
story.append(H2("Chain of Infection"))
story.append(B("<b>Agent → Reservoir → Portal of Exit → Mode of Transmission → Portal of Entry → Susceptible Host</b>"))
story += [SP(4)]
story.append(H2("Major Communicable Diseases"))
story.append(make_table(
["Disease", "Key Points"],
[
["Tuberculosis (TB)",
"Agent: M. tuberculosis (airborne); NTEP (formerly RNTCP); DOTS; Treatment: 2HRZE+4HR; Target: Eliminate by 2025 (India)"],
["Malaria",
"Vector: Female Anopheles; P. falciparum (malignant), P. vivax (benign); NVBDCP; ACT treatment; ITNs"],
["Cholera",
"El Tor biotype; rice-water stools; ORS cornerstone; waterborne"],
["Typhoid",
"S. typhi; Widal test, blood culture (gold std); Chloramphenicol/Ciprofloxacin"],
["HIV/AIDS",
"NACP Phase IV; start ART regardless of CD4; CD4 <200 = AIDS-defining"],
["Leprosy",
"NLEP; MDT (Multi-Drug Therapy); Disability grades 0,1,2"],
["Filariasis",
"NVBDCP; MDA – DEC + Albendazole annually"],
["Kala-azar",
"Visceral leishmaniasis; target <1 case/10,000 population"],
["Dengue",
"Aedes aegypti; NS1 antigen, IgM ELISA; no vaccine in UIP"],
["Rabies",
"100% fatal; PEP with vaccine ± immunoglobulin"],
["Polio",
"India declared polio-free 2014"],
],
[3.5*cm, 13*cm]
))
story.append(SP(4))
# ═══════════════════════════════════════════════════════════════
# TOPIC 12
# ═══════════════════════════════════════════════════════════════
story.append(H1("TOPIC 12: NON-COMMUNICABLE DISEASES PREVALENT IN INDIA (SGT)"))
story.append(H2("The Big Four NCDs (WHO)"))
story.append(B("1. Cardiovascular Diseases (CVD) – leading cause of death globally"))
story.append(B("2. Cancers"))
story.append(B("3. Chronic Respiratory Diseases (COPD, Asthma)"))
story.append(B("4. Diabetes Mellitus"))
story += [SP(4)]
story.append(BU("<b>NCDs cause 63% of all deaths in India</b>"))
story.append(BU("<b>National Programme:</b> NPCDCS – Prevention and Control of Cancer, Diabetes, CVD & Stroke"))
story += [SP(4)]
story.append(H2("Key Diagnostic Criteria"))
story.append(make_table(
["Disease", "Diagnostic Criteria"],
[["Hypertension", "BP ≥140/90 mmHg; 'Silent killer'"],
["Diabetes T2DM", "FBG ≥126 mg/dL | OGTT 2-hr ≥200 mg/dL | HbA1c ≥6.5%"],
["COPD", "FEV1/FVC <0.7 (GOLD classification)"],
["Overweight", "BMI ≥25 (WHO) / ≥23 (Asian)"],
["Obese", "BMI ≥30 (WHO) / ≥25 (Asian)"]],
[4.5*cm, 12*cm]
))
story += [SP(6)]
story.append(H2("Cancer in India"))
for line in [
"Common in men: <b>Oral cavity</b> (tobacco – #1), Lung",
"Common in women: <b>Cervical</b> (HPV), Breast",
"<b>Pap smear</b> – cervical screening | <b>HPV vaccine</b> – 2 doses at 9–14 years",
"Tobacco-related cancers: Oral, lung, pharynx, oesophagus, bladder",
]:
story.append(BU(line))
story += [SP(4)]
story.append(H2("NCD Prevention Strategy"))
for line in [
"<b>Population (mass) strategy</b> – change environment for whole population",
"<b>High-risk strategy</b> – target those with risk factors",
"<b>Lifestyle modification:</b> Diet, exercise, no tobacco, no alcohol, stress management",
]:
story.append(BU(line))
story.append(SP(4))
# ═══════════════════════════════════════════════════════════════
# TOPIC 13
# ═══════════════════════════════════════════════════════════════
story.append(H1("TOPIC 13: FAMILY PLANNING METHODS TO STABILIZE POPULATION (SGT)"))
story.append(H2("Population Stabilization Targets"))
for line in [
"<b>NPP 2000</b> – Target NRR = 1 (replacement level)",
"<b>TFR target = 2.1</b>; India's TFR = 2.0 (NFHS-5)",
]:
story.append(BU(line))
story += [SP(4)]
story.append(H2("Contraceptive Methods – Detail"))
story.append(make_table(
["Category", "Method", "Key Facts"],
[
["Barrier", "Male condom", "Also prevents STIs/HIV; widely available"],
["Barrier", "Female condom", "Polyurethane; less used"],
["Barrier", "Diaphragm", "Used with spermicide"],
["IUCD", "Cu-T 380A", "10 years; failure 0.6–0.8; inserted 48 hrs postpartum"],
["IUCD", "LNG-IUS (Mirena)", "5 years; reduces menstrual flow"],
["Hormonal OCP","Combined pill", "Estrogen + Progesterone; MALA-D/N (govt); 99% effective"],
["Hormonal OCP","Mini pill (POP)", "Progesterone only; safer in BF, >35 yrs, smokers"],
["Injectable", "DMPA (Antara)", "150 mg IM every 3 months"],
["Emergency", "Levonorgestrel 1.5 mg", "Within 72 hrs (best <24 hrs); iPill"],
["Emergency", "Cu-T", "Most effective EC; within 5 days"],
["Permanent", "Tubectomy", "Minilaparotomy most common in India"],
["Permanent", "Vasectomy (NSV)", "Simpler, safer, cheaper; under-utilized due to stigma"],
["Natural", "LAM", "Exclusive BF, amenorrhoea, <6 months postpartum"],
["Natural", "Rhythm method", "Pearl Index 14–47; least reliable"],
],
[3*cm, 4.5*cm, 9*cm]
))
story += [SP(4)]
story.append(H2("Govt Schemes"))
for line in [
"<b>Antara Programme</b> – Injectable contraception (DMPA) programme",
"<b>Mission Parivar Vikas</b> – 146 high-fertility districts across 7 states",
"<b>NISHCHAY</b> – Home pregnancy test kit distribution",
"<b>World Population Day:</b> July 11",
]:
story.append(BU(line))
story.append(SP(8))
# ═══════════════════════════════════════════════════════════════
# EXAM TIPS BOX
# ═══════════════════════════════════════════════════════════════
story.append(HR())
story.append(H2("EXAM TIPS"))
tips = [
"Always quote WHO definitions – examiners love them.",
"Remember 4 Ds in Pellagra, ABCD in nutritional assessment.",
"SGT topics format: Definition → Epidemiology → Prevention → National Programme.",
"IMR, MMR, TFR are very frequently asked – use NFHS-5 values.",
"Levels of prevention + examples = guaranteed marks.",
"Pearl Index = lower is better (more effective method).",
"Shake Test only for freeze-sensitive vaccines; VVM for heat-sensitive.",
"Cu-T 380A is the most effective non-surgical contraceptive.",
"Vasectomy (NSV) is safer and more effective than tubectomy – quote both.",
"India declared polio-free in 2014 – confirmed by WHO.",
]
for tip in tips:
story.append(Paragraph(f"✓ {tip}", tip_style))
story.append(HR())
story += [SP(8)]
story.append(B("<i>Source: Park's Textbook of Preventive and Social Medicine | MGM Medical College – 1st MBBS CM Syllabus</i>"))
doc.build(story)
print(f"PDF created: {OUTPUT}")
PYEOF
python3 /tmp/workspace/cm-notes/make_pdf.py
show command