Natural history of disease in k park book


| Sub-phase | Description |
|---|---|
| Early pathogenesis | Agent multiplies; tissue and physiologic changes begin (below the "clinical horizon") |
| Discernible early lesions | Pathological changes detectable but signs/symptoms may still be absent |
| Advanced disease | Recognizable signs and symptoms appear; disease is now clinically manifest |
| Convalescence | Recovery or progression to disability/death |
| Phase of Disease | Level of Prevention | Mode of Intervention |
|---|---|---|
| Pre-pathogenesis | Primary Prevention | Health Promotion + Specific Protection |
| Early Pathogenesis (below clinical horizon) | Secondary Prevention | Early Diagnosis and Treatment |
| Late Pathogenesis / Advanced Disease | Tertiary Prevention | Disability Limitation + Rehabilitation |
Please make a notes for me to easily remember
mkdir -p /tmp/workspace/natural-history-notes && ls /tmp/workspace/natural-history-notes/
~/natural-history-notes/make_notes.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, Table,
TableStyle, HRFlowable, KeepTogether)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import ListFlowable, ListItem
import urllib.request
from reportlab.platypus import Image as RLImage
import io
OUTPUT = "/tmp/workspace/natural-history-notes/Natural_History_of_Disease_Notes.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=1.8*cm, rightMargin=1.8*cm,
topMargin=1.5*cm, bottomMargin=1.5*cm
)
# ── Colour palette ──────────────────────────────────────────────────────────
MAROON = colors.HexColor("#7B1B1B")
CREAM = colors.HexColor("#FFF8F0")
LIGHT_TAN= colors.HexColor("#F5E6D3")
ACCENT = colors.HexColor("#A0522D")
DARK = colors.HexColor("#1A1A1A")
GRAY_BG = colors.HexColor("#F0F0F0")
TEAL = colors.HexColor("#1B6B7B")
GREEN = colors.HexColor("#1B7B3A")
ORANGE = colors.HexColor("#C85A00")
styles = getSampleStyleSheet()
# Custom styles
title_style = ParagraphStyle("Title", parent=styles["Normal"],
fontSize=22, textColor=MAROON, spaceAfter=4,
fontName="Helvetica-Bold", alignment=TA_CENTER)
subtitle_style = ParagraphStyle("Subtitle", parent=styles["Normal"],
fontSize=11, textColor=ACCENT, spaceAfter=2,
fontName="Helvetica-Oblique", alignment=TA_CENTER)
source_style = ParagraphStyle("Source", parent=styles["Normal"],
fontSize=8.5, textColor=colors.HexColor("#888888"),
fontName="Helvetica-Oblique", alignment=TA_CENTER, spaceAfter=6)
section_head = ParagraphStyle("SectionHead", parent=styles["Normal"],
fontSize=13, textColor=colors.white, fontName="Helvetica-Bold",
spaceAfter=4, spaceBefore=10, leftIndent=6)
sub_head = ParagraphStyle("SubHead", parent=styles["Normal"],
fontSize=11, textColor=MAROON, fontName="Helvetica-Bold",
spaceAfter=3, spaceBefore=5)
body = ParagraphStyle("Body", parent=styles["Normal"],
fontSize=9.5, textColor=DARK, fontName="Helvetica",
leading=14, spaceAfter=3, alignment=TA_JUSTIFY)
bullet_style = ParagraphStyle("Bullet", parent=styles["Normal"],
fontSize=9.5, textColor=DARK, fontName="Helvetica",
leading=13, spaceAfter=2, leftIndent=14, firstLineIndent=-10)
mnemonic_style = ParagraphStyle("Mnemonic", parent=styles["Normal"],
fontSize=10.5, textColor=MAROON, fontName="Helvetica-Bold",
leading=15, alignment=TA_CENTER, spaceAfter=2)
label_style = ParagraphStyle("Label", parent=styles["Normal"],
fontSize=9, textColor=DARK, fontName="Helvetica-Bold",
leading=12, alignment=TA_CENTER)
def section_banner(text, color=MAROON):
"""Coloured banner row acting as a section heading."""
t = Table([[Paragraph(text, section_head)]], colWidths=[17.4*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), 10),
]))
return t
def info_box(text, bg=CREAM, border=MAROON):
pstyle = ParagraphStyle("IB", parent=body, alignment=TA_LEFT)
t = Table([[Paragraph(text, pstyle)]], colWidths=[17.4*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), bg),
("BOX", (0,0),(-1,-1), 1.2, border),
("ROUNDEDCORNERS", [5]),
("TOPPADDING", (0,0),(-1,-1), 7),
("BOTTOMPADDING", (0,0),(-1,-1), 7),
("LEFTPADDING", (0,0),(-1,-1), 10),
("RIGHTPADDING", (0,0),(-1,-1), 10),
]))
return t
story = []
# ═══════════════════════════════════════════════════════════════════════════
# HEADER BANNER
# ═══════════════════════════════════════════════════════════════════════════
header_data = [[Paragraph("📖 NATURAL HISTORY OF DISEASE", title_style)],
[Paragraph("Quick Revision Notes — Park's Preventive & Social Medicine", subtitle_style)],
[Paragraph("Source: Park's Textbook of Preventive and Social Medicine (Leavell & Clark Model)", source_style)]]
header_table = Table(header_data, colWidths=[17.4*cm])
header_table.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), LIGHT_TAN),
("BOX", (0,0),(-1,-1), 2, MAROON),
("ROUNDEDCORNERS", [8]),
("TOPPADDING", (0,0),(-1,-1), 10),
("BOTTOMPADDING", (0,0),(-1,-1), 10),
]))
story.append(header_table)
story.append(Spacer(1, 0.3*cm))
# ═══════════════════════════════════════════════════════════════════════════
# DEFINITION
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_banner("📌 DEFINITION"))
story.append(Spacer(1, 0.15*cm))
story.append(info_box(
"<b>Natural History of Disease</b> = The course a disease takes from its earliest beginning to its "
"ultimate outcome <b>without any medical intervention</b>. It results from complex interaction "
"between <b>Man ↔ Agent ↔ Environment</b>.",
bg=CREAM, border=MAROON
))
story.append(Spacer(1, 0.3*cm))
# ═══════════════════════════════════════════════════════════════════════════
# TWO PHASES — side by side
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_banner("🔄 TWO PHASES OF DISEASE", color=TEAL))
story.append(Spacer(1, 0.15*cm))
phase_head_style = ParagraphStyle("PH", parent=styles["Normal"],
fontSize=11, textColor=colors.white, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=15)
phase_body_style = ParagraphStyle("PB", parent=styles["Normal"],
fontSize=9, textColor=DARK, fontName="Helvetica",
leading=13, alignment=TA_LEFT)
phase_title_style = ParagraphStyle("PT", parent=styles["Normal"],
fontSize=10, textColor=colors.white, fontName="Helvetica-Bold",
alignment=TA_CENTER)
p1_items = [
"• Before agent enters the human host",
"• Factors favouring interaction <b>already present</b>",
"• \"Man in the midst of disease\"",
"• Epidemiological TRIAD operates:",
" → AGENT + HOST + ENVIRONMENT",
"• Interaction of all 3 needed to start disease",
]
p2_items = [
"• Begins with <b>entry of agent</b> into susceptible host",
"• Sub-phases:",
" 1. Early pathogenesis (incubation in infections)",
" 2. Discernible early lesions",
" 3. Advanced disease (signs & symptoms appear)",
" 4. Convalescence",
"• Outcomes: Recovery / Disability / Chronic / Death",
]
p1_text = "<br/>".join(p1_items)
p2_text = "<br/>".join(p2_items)
phase_table = Table(
[[Paragraph("PHASE 1", phase_title_style), Paragraph("PHASE 2", phase_title_style)],
[Paragraph("PRE-PATHOGENESIS", phase_head_style), Paragraph("PATHOGENESIS", phase_head_style)],
[Paragraph(p1_text, phase_body_style), Paragraph(p2_text, phase_body_style)]],
colWidths=[8.5*cm, 8.9*cm]
)
phase_table.setStyle(TableStyle([
("BACKGROUND", (0,0),(0,1), MAROON),
("BACKGROUND", (1,0),(1,1), TEAL),
("BACKGROUND", (0,2),(0,2), CREAM),
("BACKGROUND", (1,2),(1,2), colors.HexColor("#E8F4F7")),
("BOX", (0,0),(-1,-1), 1.5, DARK),
("INNERGRID", (0,0),(-1,-1), 0.5, colors.HexColor("#AAAAAA")),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING", (0,0),(-1,-1), 6),
("LEFTPADDING", (0,0),(-1,-1), 8),
("RIGHTPADDING", (0,0),(-1,-1), 8),
("VALIGN", (0,0),(-1,-1), "TOP"),
]))
story.append(phase_table)
story.append(Spacer(1, 0.3*cm))
# ═══════════════════════════════════════════════════════════════════════════
# CLINICAL HORIZON BOX
# ═══════════════════════════════════════════════════════════════════════════
story.append(info_box(
"⚡ <b>CLINICAL HORIZON</b> — The threshold above which disease becomes clinically recognizable. "
"In <b>chronic diseases</b> (CHD, hypertension, cancer), the presymptomatic phase lies <i>below</i> "
"the clinical horizon. By the time symptoms appear, disease is already in <b>LATE pathogenesis</b>.",
bg=colors.HexColor("#FFF3CD"), border=ORANGE
))
story.append(Spacer(1, 0.3*cm))
# ═══════════════════════════════════════════════════════════════════════════
# LEVELS OF PREVENTION TABLE
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_banner("🛡️ LEVELS OF PREVENTION (Leavell & Clark)", color=colors.HexColor("#1B5E20")))
story.append(Spacer(1, 0.15*cm))
col_head = ParagraphStyle("CH", parent=styles["Normal"],
fontSize=10, textColor=colors.white, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=14)
col_body = ParagraphStyle("CB", parent=styles["Normal"],
fontSize=9, textColor=DARK, fontName="Helvetica",
alignment=TA_LEFT, leading=13)
prev_data = [
[Paragraph("LEVEL", col_head),
Paragraph("PHASE OF DISEASE", col_head),
Paragraph("MODE OF INTERVENTION", col_head),
Paragraph("EXAMPLES", col_head)],
[Paragraph("<b>PRIMARY</b>", col_body),
Paragraph("Pre-pathogenesis", col_body),
Paragraph("1. Health Promotion\n2. Specific Protection", col_body),
Paragraph("Immunization, nutrition, sanitation, health education, occupational safety", col_body)],
[Paragraph("<b>SECONDARY</b>", col_body),
Paragraph("Early Pathogenesis\n(below clinical horizon)", col_body),
Paragraph("Early Diagnosis & Treatment", col_body),
Paragraph("Screening, case-finding, prompt treatment to prevent complications/spread", col_body)],
[Paragraph("<b>TERTIARY</b>", col_body),
Paragraph("Late Pathogenesis /\nAdvanced Disease", col_body),
Paragraph("1. Disability Limitation\n2. Rehabilitation", col_body),
Paragraph("Physiotherapy, vocational rehab, social reintegration, prosthetics", col_body)],
]
prev_table = Table(prev_data, colWidths=[2.8*cm, 3.8*cm, 4.4*cm, 6.4*cm])
prev_table.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), colors.HexColor("#1B5E20")),
("BACKGROUND", (0,1),(-1,1), colors.HexColor("#E8F5E9")),
("BACKGROUND", (0,2),(-1,2), colors.HexColor("#FFF8E1")),
("BACKGROUND", (0,3),(-1,3), colors.HexColor("#FCE4EC")),
("BOX", (0,0),(-1,-1), 1.2, DARK),
("INNERGRID", (0,0),(-1,-1), 0.4, colors.HexColor("#AAAAAA")),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING", (0,0),(-1,-1), 6),
("LEFTPADDING", (0,0),(-1,-1), 7),
("RIGHTPADDING", (0,0),(-1,-1), 7),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
]))
story.append(prev_table)
story.append(Spacer(1, 0.3*cm))
# ═══════════════════════════════════════════════════════════════════════════
# DISEASE AGENT CLASSIFICATION
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_banner("🦠 DISEASE AGENT CLASSIFICATION", color=ACCENT))
story.append(Spacer(1, 0.15*cm))
agent_data = [
[Paragraph("<b>TYPE</b>", col_head), Paragraph("<b>EXAMPLES</b>", col_head), Paragraph("<b>KEY NOTE</b>", col_head)],
[Paragraph("Biological", col_body), Paragraph("Viruses, bacteria, fungi, protozoa, metazoa", col_body),
Paragraph("Infectivity → Pathogenicity → Virulence", col_body)],
[Paragraph("Nutrient", col_body), Paragraph("Proteins, fats, carbs, vitamins, minerals, water", col_body),
Paragraph("Excess OR deficiency causes disease (PEM, anaemia, obesity)", col_body)],
[Paragraph("Chemical", col_body), Paragraph("Drugs, poisons, allergens, industrial chemicals", col_body),
Paragraph("Dose-response relationship important", col_body)],
[Paragraph("Physical", col_body), Paragraph("Heat, cold, radiation, pressure, noise", col_body),
Paragraph("Environmental exposure crucial", col_body)],
[Paragraph("Genetic /\nCongenital", col_body), Paragraph("Chromosomal abnormalities, inborn errors", col_body),
Paragraph("Present from birth / conception", col_body)],
[Paragraph("Psychological", col_body), Paragraph("Stress, emotional trauma, anxiety", col_body),
Paragraph("Increasingly recognized in non-communicable diseases", col_body)],
]
agent_table = Table(agent_data, colWidths=[3*cm, 6.2*cm, 8.2*cm])
agent_table.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), ACCENT),
("ROWBACKGROUNDS", (0,1),(-1,-1), [colors.HexColor("#FFF8F0"), colors.HexColor("#F5E6D3")]),
("BOX", (0,0),(-1,-1), 1.2, DARK),
("INNERGRID", (0,0),(-1,-1), 0.4, colors.HexColor("#AAAAAA")),
("TOPPADDING", (0,0),(-1,-1), 5),
("BOTTOMPADDING", (0,0),(-1,-1), 5),
("LEFTPADDING", (0,0),(-1,-1), 7),
("RIGHTPADDING", (0,0),(-1,-1), 7),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
]))
story.append(agent_table)
story.append(Spacer(1, 0.3*cm))
# ═══════════════════════════════════════════════════════════════════════════
# BIOLOGICAL AGENT PROPERTIES — quick box
# ═══════════════════════════════════════════════════════════════════════════
story.append(KeepTogether([
info_box(
"🔬 <b>Key Properties of Biological Agents (must memorize):</b><br/>"
"1. <b>Infectivity</b> — Ability to <i>invade and multiply</i> in a host<br/>"
"2. <b>Pathogenicity</b> — Ability to produce <i>clinically apparent illness</i><br/>"
"3. <b>Virulence</b> — Proportion of clinical cases with <i>severe outcomes</i> (measured by Case Fatality Rate)",
bg=colors.HexColor("#E8F4F7"), border=TEAL
),
Spacer(1, 0.3*cm)
]))
# ═══════════════════════════════════════════════════════════════════════════
# HOST REACTION OUTCOMES
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_banner("🎯 HOST REACTIONS & OUTCOMES", color=TEAL))
story.append(Spacer(1, 0.15*cm))
outcome_data = [
[Paragraph("HOST REACTION TO INFECTION", ParagraphStyle("HH", parent=col_head, fontSize=9)),
Paragraph("FINAL OUTCOMES OF DISEASE", ParagraphStyle("HH", parent=col_head, fontSize=9))],
[Paragraph(
"• Clinical disease (typical / atypical)<br/>"
"• Subclinical / Inapparent infection<br/>"
"• Carrier state (with or without clinical disease)<br/>"
" e.g., Diphtheria, Hepatitis B",
col_body),
Paragraph(
"• <b>Recovery</b> (with immunity/resistance)<br/>"
"• <b>Disability</b> or Defect<br/>"
"• <b>Chronic state</b><br/>"
"• <b>Death</b>",
col_body)]
]
outcome_table = Table(outcome_data, colWidths=[8.5*cm, 8.9*cm])
outcome_table.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), TEAL),
("BACKGROUND", (0,1),(0,1), colors.HexColor("#E8F4F7")),
("BACKGROUND", (1,1),(1,1), colors.HexColor("#FFF8F0")),
("BOX", (0,0),(-1,-1), 1.2, DARK),
("INNERGRID", (0,0),(-1,-1), 0.5, colors.HexColor("#AAAAAA")),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING", (0,0),(-1,-1), 6),
("LEFTPADDING", (0,0),(-1,-1), 8),
("RIGHTPADDING", (0,0),(-1,-1), 8),
("VALIGN", (0,0),(-1,-1), "TOP"),
]))
story.append(outcome_table)
story.append(Spacer(1, 0.3*cm))
# ═══════════════════════════════════════════════════════════════════════════
# MNEMONICS & MEMORY AIDS
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_banner("🧠 MNEMONICS & MEMORY AIDS", color=colors.HexColor("#4A148C")))
story.append(Spacer(1, 0.15*cm))
mnem_style = ParagraphStyle("MS", parent=styles["Normal"],
fontSize=9.5, textColor=DARK, fontName="Helvetica", leading=14)
mnem_head = ParagraphStyle("MH", parent=styles["Normal"],
fontSize=10, textColor=colors.HexColor("#4A148C"), fontName="Helvetica-Bold", leading=14)
mnem_data = [
[Paragraph("PHASES", mnem_head),
Paragraph(
"<b>\"PRE-PATH\"</b><br/>"
"<b>PRE</b> = Pre-pathogenesis (before agent enters)<br/>"
"<b>PATH</b> = Pathogenesis (agent inside host → Early → Lesions → Advanced → Convalescence)",
mnem_style)],
[Paragraph("TRIAD", mnem_head),
Paragraph(
"<b>\"A-H-E\"</b> → <b>A</b>gent + <b>H</b>ost + <b>E</b>nvironment<br/>"
"Think: <i>'All Humans are Exposed'</i>",
mnem_style)],
[Paragraph("PREVENTION\nLEVELS", mnem_head),
Paragraph(
"<b>\"HP-SP / EDT / DL-R\"</b><br/>"
"Primary: <b>H</b>ealth <b>P</b>romotion + <b>S</b>pecific <b>P</b>rotection<br/>"
"Secondary: <b>E</b>arly <b>D</b>iagnosis & <b>T</b>reatment<br/>"
"Tertiary: <b>D</b>isability <b>L</b>imitation + <b>R</b>ehabilitation",
mnem_style)],
[Paragraph("BIO AGENT\nPROPERTIES", mnem_head),
Paragraph(
"<b>\"I-P-V\"</b> → <b>I</b>nfectivity → <b>P</b>athogenicity → <b>V</b>irulence<br/>"
"Think: <i>'I Patiently Vanquish'</i>",
mnem_style)],
[Paragraph("AGENT TYPES", mnem_head),
Paragraph(
"<b>\"B-N-C-P-G-Ps\"</b><br/>"
"<b>B</b>iological, <b>N</b>utrient, <b>C</b>hemical, <b>P</b>hysical, <b>G</b>enetic, <b>Ps</b>ychological",
mnem_style)],
]
mnem_table = Table(mnem_data, colWidths=[3.2*cm, 14.2*cm])
mnem_table.setStyle(TableStyle([
("ROWBACKGROUNDS", (0,0),(-1,-1), [colors.HexColor("#F3E5F5"), colors.HexColor("#EDE7F6")]),
("BOX", (0,0),(-1,-1), 1.2, colors.HexColor("#4A148C")),
("INNERGRID", (0,0),(-1,-1), 0.4, colors.HexColor("#CE93D8")),
("TOPPADDING", (0,0),(-1,-1), 7),
("BOTTOMPADDING", (0,0),(-1,-1), 7),
("LEFTPADDING", (0,0),(-1,-1), 8),
("RIGHTPADDING", (0,0),(-1,-1), 8),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
]))
story.append(mnem_table)
story.append(Spacer(1, 0.3*cm))
# ═══════════════════════════════════════════════════════════════════════════
# QUICK FIRE Q&A
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_banner("⚡ QUICK FIRE — EXAM Q&A", color=colors.HexColor("#B71C1C")))
story.append(Spacer(1, 0.15*cm))
qa_q = ParagraphStyle("QAQ", parent=styles["Normal"], fontSize=9.5,
fontName="Helvetica-Bold", textColor=MAROON, leading=14)
qa_a = ParagraphStyle("QAA", parent=styles["Normal"], fontSize=9.5,
fontName="Helvetica", textColor=DARK, leading=14)
qa_data = [
[Paragraph("Q", qa_q), Paragraph("A", qa_q)],
[Paragraph("Natural history of disease concept given by?", qa_q),
Paragraph("Leavell and Clark", qa_a)],
[Paragraph("Phase before agent enters the host?", qa_q),
Paragraph("Pre-pathogenesis phase", qa_a)],
[Paragraph("\"Man in the midst of disease\" refers to?", qa_q),
Paragraph("Pre-pathogenesis phase", qa_a)],
[Paragraph("The three factors of epidemiological triad?", qa_q),
Paragraph("Agent, Host, Environment", qa_a)],
[Paragraph("In infectious disease, early pathogenesis = ?", qa_q),
Paragraph("Incubation period", qa_a)],
[Paragraph("In chronic disease, early pathogenesis = ?", qa_q),
Paragraph("Presymptomatic phase (below clinical horizon)", qa_a)],
[Paragraph("Level of prevention targeting pre-pathogenesis?", qa_q),
Paragraph("Primary prevention (Health promotion + Specific protection)", qa_a)],
[Paragraph("Level of prevention: early diagnosis & treatment?", qa_q),
Paragraph("Secondary prevention", qa_a)],
[Paragraph("Rehabilitation falls under which level?", qa_q),
Paragraph("Tertiary prevention", qa_a)],
[Paragraph("Case fatality rate measures which property?", qa_q),
Paragraph("Virulence", qa_a)],
[Paragraph("Ability to invade and multiply in a host?", qa_q),
Paragraph("Infectivity", qa_a)],
[Paragraph("Carrier state example (2 diseases)?", qa_q),
Paragraph("Diphtheria, Hepatitis B", qa_a)],
]
qa_table = Table(qa_data, colWidths=[8.7*cm, 8.7*cm])
qa_table.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), colors.HexColor("#B71C1C")),
("ROWBACKGROUNDS", (0,1),(-1,-1), [colors.white, colors.HexColor("#FFF5F5")]),
("BOX", (0,0),(-1,-1), 1.2, DARK),
("INNERGRID", (0,0),(-1,-1), 0.4, colors.HexColor("#AAAAAA")),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING", (0,0),(-1,-1), 6),
("LEFTPADDING", (0,0),(-1,-1), 8),
("RIGHTPADDING", (0,0),(-1,-1), 8),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
("TEXTCOLOR", (0,0),(-1,0), colors.white),
]))
story.append(qa_table)
story.append(Spacer(1, 0.3*cm))
# ═══════════════════════════════════════════════════════════════════════════
# FOOTER NOTE
# ═══════════════════════════════════════════════════════════════════════════
story.append(HRFlowable(width="100%", thickness=1, color=MAROON))
story.append(Spacer(1, 0.1*cm))
story.append(Paragraph(
"Source: Park's Textbook of Preventive and Social Medicine | "
"Leavell & Clark (Preventive Medicine for the Doctor in His Community, McGraw-Hill)",
source_style
))
# ── Build ───────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF created: {OUTPUT}")
cd /tmp/workspace/natural-history-notes && python make_notes.py
Natural History of Disease Notes
PDF Document · PDF
Determination of health in community medicine k park

| Sub-factor | Key Points |
|---|---|
| (i) Economic status | Per capita GNP is the most accepted measure. Determines purchasing power, standard of living, family size, pattern of disease. Ironically, affluence also causes illness (CHD, diabetes, obesity in upper socioeconomic groups). |
| (ii) Education | Especially female education. World map of illiteracy coincides with maps of poverty, malnutrition, high infant mortality. Kerala example: IMR = 10 vs all-India 34 (2016), due to 97.9% female literacy vs 68.4% national. |
| (iii) Occupation | Employment promotes health; unemployed show higher incidence of illness and death. Job loss = loss of income, status, psychological and social damage. |
| (iv) Political system | Resource allocation, manpower policy, health service accessibility are shaped by politics. WHO target: ≥5% of GNP on health. India spends ~1% of GNP on health and family welfare. Political commitment to social development is essential. |
| # | Determinant | Key Concept |
|---|---|---|
| 1 | Biological | Genes, genetic make-up, chromosomal constitution |
| 2 | Behavioural/Socio-cultural | Lifestyle, habits, culture, socialization |
| 3 | Environment | Physical, biological, psychosocial |
| 4 | Socio-economic | GNP, education, occupation, political system |
| 5 | Health services | Access, equity, coverage, quality |
| 6 | Ageing | Demographic shift, chronic disease burden |
| 7 | Gender | Differential needs, women's health |
| 8 | Others | Science, technology, ICT, intersectoral action |
Create a revision PDF of Determinants of Health with mnemonics and Q&A
~/determinants-health-notes/make_notes.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, Table,
TableStyle, HRFlowable, KeepTogether, PageBreak)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
import os
os.makedirs("/tmp/workspace/determinants-health-notes", exist_ok=True)
OUTPUT = "/tmp/workspace/determinants-health-notes/Determinants_of_Health_Notes.pdf"
doc = SimpleDocTemplate(
OUTPUT, pagesize=A4,
leftMargin=1.8*cm, rightMargin=1.8*cm,
topMargin=1.5*cm, bottomMargin=1.5*cm
)
# ── Palette ──────────────────────────────────────────────────────────────────
MAROON = colors.HexColor("#7B1B1B")
CREAM = colors.HexColor("#FFF8F0")
LIGHT_TAN= colors.HexColor("#F5E6D3")
TEAL = colors.HexColor("#1B6B7B")
GREEN = colors.HexColor("#1B5E20")
ORANGE = colors.HexColor("#C85A00")
PURPLE = colors.HexColor("#4A148C")
DARK = colors.HexColor("#1A1A1A")
BLUE = colors.HexColor("#0D47A1")
PINK = colors.HexColor("#880E4F")
styles = getSampleStyleSheet()
def ps(name, base="Normal", **kw):
return ParagraphStyle(name, parent=styles[base], **kw)
title_s = ps("T", fontSize=21, textColor=MAROON, fontName="Helvetica-Bold",
alignment=TA_CENTER, spaceAfter=3)
sub_s = ps("Su", fontSize=10.5, textColor=colors.HexColor("#7B4F2E"),
fontName="Helvetica-Oblique", alignment=TA_CENTER, spaceAfter=2)
src_s = ps("Sr", fontSize=8, textColor=colors.HexColor("#999999"),
fontName="Helvetica-Oblique", alignment=TA_CENTER, spaceAfter=4)
sec_s = ps("Sh", fontSize=12, textColor=colors.white, fontName="Helvetica-Bold",
spaceAfter=3, spaceBefore=6, leftIndent=6)
body_s = ps("B", fontSize=9.5, textColor=DARK, fontName="Helvetica",
leading=14, spaceAfter=2, alignment=TA_JUSTIFY)
bullet_s = ps("Bl", fontSize=9.5, textColor=DARK, fontName="Helvetica",
leading=13, spaceAfter=1, leftIndent=12, firstLineIndent=-10)
col_h = ps("CH", fontSize=9.5, textColor=colors.white, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=13)
col_b = ps("CB", fontSize=9, textColor=DARK, fontName="Helvetica",
alignment=TA_LEFT, leading=13)
mnem_h = ps("MH", fontSize=9.5, textColor=PURPLE, fontName="Helvetica-Bold", leading=14)
mnem_b = ps("MB", fontSize=9, textColor=DARK, fontName="Helvetica", leading=13)
qa_q = ps("QQ", fontSize=9.5, textColor=MAROON, fontName="Helvetica-Bold", leading=14)
qa_a = ps("QA", fontSize=9.5, textColor=DARK, fontName="Helvetica", leading=14)
num_s = ps("NS", fontSize=22, textColor=colors.white, fontName="Helvetica-Bold",
alignment=TA_CENTER)
def banner(text, color=MAROON):
t = Table([[Paragraph(text, sec_s)]], colWidths=[17.4*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), color),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING",(0,0),(-1,-1), 6),
("LEFTPADDING", (0,0),(-1,-1), 10),
]))
return t
def box(text, bg=CREAM, border=MAROON, style=None):
s = style or ps("BX", fontSize=9.5, textColor=DARK, fontName="Helvetica", leading=14)
t = Table([[Paragraph(text, s)]], colWidths=[17.4*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), bg),
("BOX", (0,0),(-1,-1), 1.2, border),
("TOPPADDING", (0,0),(-1,-1), 7),
("BOTTOMPADDING",(0,0),(-1,-1), 7),
("LEFTPADDING", (0,0),(-1,-1), 10),
("RIGHTPADDING", (0,0),(-1,-1), 10),
]))
return t
def sp(h=0.25):
return Spacer(1, h*cm)
# ════════════════════════════════════════════════════════════════════════════
story = []
# ── HEADER ──────────────────────────────────────────────────────────────────
hdr = Table([
[Paragraph("🏥 DETERMINANTS OF HEALTH", title_s)],
[Paragraph("Quick Revision Notes — Park's Preventive & Social Medicine", sub_s)],
[Paragraph("Source: Park's Textbook of Preventive and Social Medicine, pp. 23–25", src_s)],
], colWidths=[17.4*cm])
hdr.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), colors.HexColor("#F5E6D3")),
("BOX", (0,0),(-1,-1), 2, MAROON),
("TOPPADDING", (0,0),(-1,-1), 10),
("BOTTOMPADDING",(0,0),(-1,-1), 10),
]))
story += [hdr, sp(0.3)]
# ── DEFINITION ──────────────────────────────────────────────────────────────
story.append(banner("📌 DEFINITION"))
story.append(sp(0.15))
story.append(box(
"<b>Health is MULTIFACTORIAL.</b> The factors influencing health lie both <b>within the individual</b> "
"and <b>externally in the society</b>. Health of individuals and whole communities is the result of "
"interactions between <b>GENETIC factors</b> (internal) and <b>ENVIRONMENTAL factors</b> (external). "
"These interactions may be <i>health-promoting</i> or <i>deleterious</i>.",
bg=CREAM, border=MAROON
))
story.append(sp(0.3))
# ── MASTER MNEMONIC ─────────────────────────────────────────────────────────
story.append(banner("🧠 MASTER MNEMONIC — Remember ALL 8 Determinants", color=PURPLE))
story.append(sp(0.15))
mm_cell_s = ps("MMC", fontSize=11, textColor=DARK, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=16)
mm_word_s = ps("MMW", fontSize=18, textColor=PURPLE, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=22)
mm_exp_s = ps("MME", fontSize=9, textColor=DARK, fontName="Helvetica",
alignment=TA_CENTER, leading=12)
mnemonic_rows = [
["B", "E", "S", "H", "A", "G", "O", "I"],
["Biological", "Environment", "Socio-\neconomic", "Health\nServices",
"Ageing", "Gender", "Others\n(Science/ICT)", "Information &\nCommunication*"],
]
mm_table = Table(
[[Paragraph(c, mm_word_s) for c in mnemonic_rows[0]],
[Paragraph(c, mm_exp_s) for c in mnemonic_rows[1]]],
colWidths=[2.175*cm]*8
)
mm_table.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), colors.HexColor("#EDE7F6")),
("BACKGROUND", (0,1),(-1,1), colors.HexColor("#F3E5F5")),
("BOX", (0,0),(-1,-1), 1.5, PURPLE),
("INNERGRID", (0,0),(-1,-1), 0.5, colors.HexColor("#CE93D8")),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING",(0,0),(-1,-1), 6),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
]))
story.append(mm_table)
story.append(sp(0.1))
story.append(Paragraph(
'<i>* "Behavioural" = included under Socio-cultural conditions (determinant 2). '
'"Others" covers Science & Technology, Information & Communication, intersectoral factors.</i>',
ps("Note", fontSize=8, textColor=colors.HexColor("#777777"), fontName="Helvetica-Oblique")
))
story.append(sp(0.1))
story.append(box(
'💡 <b>Memory phrase:</b> <b>"<font color="#4A148C">B</font>ig '
'<font color="#4A148C">E</font>lephants '
'<font color="#4A148C">S</font>ometimes '
'<font color="#4A148C">H</font>elp '
'<font color="#4A148C">A</font>geing '
'<font color="#4A148C">G</font>randmas '
'<font color="#4A148C">O</font>vercome '
'<font color="#4A148C">I</font>llness"</b>',
bg=colors.HexColor("#EDE7F6"), border=PURPLE
))
story.append(sp(0.3))
# ── 8 DETERMINANTS ──────────────────────────────────────────────────────────
story.append(banner("📋 THE 8 DETERMINANTS IN DETAIL", color=TEAL))
story.append(sp(0.2))
dets = [
{
"num": "1",
"title": "BIOLOGICAL DETERMINANTS",
"color": colors.HexColor("#1565C0"),
"bg": colors.HexColor("#E3F2FD"),
"points": [
"Physical & mental traits determined by <b>genes at moment of conception</b>",
"Genetic make-up is <b>unique and CANNOT be altered</b> after conception",
"Genetic diseases: chromosomal anomalies, inborn errors of metabolism, mental retardation, some types of diabetes",
"From genetic standpoint: health = absence of defective genes + <b>normal karyotype</b>",
"WHO 'positive health' = ability to fully express <b>genetic potentialities</b> in a healthy environment",
"Role in: <b>genetic screening</b> and <b>gene therapy</b>",
],
"key": "🔑 Key fact: Only determinant that CANNOT be changed after conception"
},
{
"num": "2",
"title": "BEHAVIOURAL & SOCIO-CULTURAL CONDITIONS",
"color": colors.HexColor("#2E7D32"),
"bg": colors.HexColor("#E8F5E9"),
"points": [
"Lifestyle = 'the way people live' — cultural & behavioural patterns + lifelong personal habits",
"Lifestyle is <b>learnt</b> through: parents, peer groups, siblings, school, mass media",
"Developed countries: CHD, obesity, lung cancer, drug addiction linked to <b>unhealthy lifestyle</b>",
"Developing countries (India): risks from poor sanitation, poor nutrition, cultural patterns",
"Positive lifestyle factors: adequate nutrition, enough sleep, sufficient physical activity",
"'Health is both a <b>consequence</b> of lifestyle and a <b>factor in determining</b> it'",
],
"key": "🔑 Key fact: NOT all lifestyle factors are harmful — many promote health"
},
{
"num": "3",
"title": "ENVIRONMENT",
"color": colors.HexColor("#00695C"),
"bg": colors.HexColor("#E0F2F1"),
"points": [
"First related to disease by <b>Hippocrates</b> (climate, water, air); revived by <b>Pettenkofer</b>",
"<b>Internal</b> environment: tissues, organs, organ systems → domain of <i>internal medicine</i>",
"<b>External (macro)</b> environment: all external to the host after conception — Physical + Biological + Psychosocial",
"<b>Micro-environment</b>: personal/domestic (eating habits, smoking, drinking)",
"Also: occupational, socioeconomic, moral environments",
"Physical, biological & psychological components are <b>inextricably linked</b> — must be viewed in tototo",
],
"key": "🔑 Key fact: Hippocrates (first) → Pettenkofer (revived) the disease-environment concept"
},
{
"num": "4",
"title": "SOCIO-ECONOMIC CONDITIONS",
"color": colors.HexColor("#E65100"),
"bg": colors.HexColor("#FFF3E0"),
"points": [
"For the majority of the world's people, health is determined <b>primarily</b> by socio-economic level",
"(i) <b>Economic status</b>: Per capita GNP = most accepted measure. Affluence can also CAUSE disease (CHD, diabetes, obesity)",
"(ii) <b>Education</b>: Especially female education. Kerala IMR = <b>10</b> vs all-India <b>34</b> (2016); female literacy 97.9% vs 68.4%",
"(iii) <b>Occupation</b>: Employment promotes health; unemployment → higher illness, death, psychological damage",
"(iv) <b>Political system</b>: Shapes resource allocation, manpower, access to services. WHO target: <b>≥5% GNP on health</b>; India spends ~<b>1%</b>",
],
"key": "🔑 Key fact: Kerala example — high female literacy compensates poverty effects on health"
},
{
"num": "5",
"title": "HEALTH SERVICES",
"color": colors.HexColor("#6A1B9A"),
"bg": colors.HexColor("#F3E5F5"),
"points": [
"Health & family welfare services cover: <b>promotive, preventive, curative and rehabilitative</b> care",
"Must be <b>universally accessible, affordable, and acceptable</b>",
"Inequitable access to health services is itself a <b>determinant of poor health</b>",
"A strong health system leads to better individual and community health outcomes",
],
"key": "🔑 Key fact: 4 components — Promotive, Preventive, Curative, Rehabilitative (PPCR)"
},
{
"num": "6",
"title": "AGEING OF THE POPULATION",
"color": colors.HexColor("#558B2F"),
"bg": colors.HexColor("#F1F8E9"),
"points": [
"Global trend: increasing proportion of elderly (>60 years) in population",
"Demographic shift creates: chronic diseases, disabilities, dementia, social isolation",
"Healthy ageing requires <b>preventive strategies across the life course</b>",
"Ageing is a major emerging challenge for health systems worldwide",
],
"key": "🔑 Key fact: Ageing → Chronic disease burden (NCD epidemic)"
},
{
"num": "7",
"title": "GENDER",
"color": colors.HexColor("#AD1457"),
"bg": colors.HexColor("#FCE4EC"),
"points": [
"Women and men have <b>different health needs, exposures, and vulnerabilities</b>",
"<b>Global Commission on Women's Health</b> established in <b>1993</b>",
"Agenda for action: nutrition, reproductive health, consequences of violence, ageing, lifestyle, occupational environment",
"Policy-makers increasingly include women's health in all development plans as a <b>priority</b>",
],
"key": "🔑 Key fact: Global Commission on Women's Health — 1993"
},
{
"num": "8",
"title": "OTHER FACTORS",
"color": colors.HexColor("#37474F"),
"bg": colors.HexColor("#ECEFF1"),
"points": [
"<b>Science & technology</b>: Biomedical advances, new therapies, diagnostic tools",
"<b>Information & communication</b>: Mass media, internet → instant access to health information worldwide",
"<b>Health-related systems</b>: Food & agriculture, education, industry, social welfare, rural development",
"<b>Economic & social policies</b>: Employment, wages, prepaid medical programmes, family support",
"<b>Intersectoral action</b>: 'Medicine is NOT the sole contributor to health and well-being'",
],
"key": "🔑 Key fact: Intersectoral approach — health is influenced by ALL sectors, not just medicine"
},
]
point_s = ps("PT", fontSize=9, textColor=DARK, fontName="Helvetica", leading=13)
key_s = ps("KS", fontSize=9, textColor=colors.HexColor("#B71C1C"), fontName="Helvetica-BoldOblique", leading=13)
for d in dets:
num_cell = Table(
[[Paragraph(d["num"], ps("N", fontSize=18, textColor=colors.white,
fontName="Helvetica-Bold", alignment=TA_CENTER))]],
colWidths=[1.2*cm], rowHeights=[1.2*cm]
)
num_cell.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), d["color"]),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
]))
title_cell = Paragraph(d["title"], ps("DT", fontSize=11, textColor=colors.white,
fontName="Helvetica-Bold", leading=15))
title_bar = Table([[num_cell, title_cell]], colWidths=[1.4*cm, 16.0*cm])
title_bar.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), d["color"]),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
("TOPPADDING", (0,0),(-1,-1), 5),
("BOTTOMPADDING",(0,0),(-1,-1), 5),
("LEFTPADDING", (0,0),(-1,-1), 5),
]))
pts_text = "<br/>".join(f"• {p}" for p in d["points"])
key_text = d["key"]
content_cell = Table([
[Paragraph(pts_text, point_s)],
[Paragraph(key_text, key_s)],
], colWidths=[17.4*cm])
content_cell.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), d["bg"]),
("BACKGROUND", (0,1),(-1,1), colors.HexColor("#FFF8E1")),
("BOX", (0,0),(-1,-1), 0.8, d["color"]),
("LINEBELOW", (0,0),(-1,0), 0.5, d["color"]),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING",(0,0),(-1,-1), 6),
("LEFTPADDING", (0,0),(-1,-1), 9),
("RIGHTPADDING", (0,0),(-1,-1), 9),
]))
story.append(KeepTogether([title_bar, content_cell, sp(0.2)]))
story.append(sp(0.1))
# ── QUICK COMPARISON TABLE ──────────────────────────────────────────────────
story.append(banner("📊 SUMMARY TABLE — ALL 8 DETERMINANTS", color=BLUE))
story.append(sp(0.15))
sum_data = [
[Paragraph("#", col_h), Paragraph("DETERMINANT", col_h),
Paragraph("KEY CONCEPT", col_h), Paragraph("REMEMBER THIS", col_h)],
[Paragraph("1", col_b), Paragraph("Biological", col_b),
Paragraph("Genes, karyotype, genetic constitution", col_b),
Paragraph("Unalterable after conception", col_b)],
[Paragraph("2", col_b), Paragraph("Behavioural /\nSocio-cultural", col_b),
Paragraph("Lifestyle, habits, socialization", col_b),
Paragraph("Learnt from parents, peers, media", col_b)],
[Paragraph("3", col_b), Paragraph("Environment", col_b),
Paragraph("Physical, Biological, Psychosocial", col_b),
Paragraph("Hippocrates → Pettenkofer", col_b)],
[Paragraph("4", col_b), Paragraph("Socio-economic", col_b),
Paragraph("GNP, education, occupation, politics", col_b),
Paragraph("Kerala: IMR 10, literacy 97.9%", col_b)],
[Paragraph("5", col_b), Paragraph("Health services", col_b),
Paragraph("Promotive, Preventive, Curative, Rehab", col_b),
Paragraph("PPCR — access & equity", col_b)],
[Paragraph("6", col_b), Paragraph("Ageing", col_b),
Paragraph("Demographic shift, elderly proportion", col_b),
Paragraph("NCD & chronic disease burden", col_b)],
[Paragraph("7", col_b), Paragraph("Gender", col_b),
Paragraph("Different needs, vulnerabilities", col_b),
Paragraph("Global Commission on Women's Health — 1993", col_b)],
[Paragraph("8", col_b), Paragraph("Others", col_b),
Paragraph("Science, ICT, intersectoral action", col_b),
Paragraph("Medicine ≠ sole contributor to health", col_b)],
]
sum_table = Table(sum_data, colWidths=[0.7*cm, 3.1*cm, 6.8*cm, 6.8*cm])
sum_table.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), BLUE),
("ROWBACKGROUNDS",(0,1),(-1,-1), [colors.HexColor("#EFF6FF"), colors.white]),
("BOX", (0,0),(-1,-1), 1.2, DARK),
("INNERGRID", (0,0),(-1,-1), 0.4, colors.HexColor("#AAAAAA")),
("TOPPADDING", (0,0),(-1,-1), 5),
("BOTTOMPADDING", (0,0),(-1,-1), 5),
("LEFTPADDING", (0,0),(-1,-1), 6),
("RIGHTPADDING", (0,0),(-1,-1), 6),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
]))
story += [sum_table, sp(0.3)]
# ── MNEMONICS PAGE ──────────────────────────────────────────────────────────
story.append(banner("🧠 MNEMONICS & MEMORY AIDS", color=PURPLE))
story.append(sp(0.15))
mnem_data = [
[Paragraph("TOPIC", ps("MHH", fontSize=9.5, textColor=colors.white,
fontName="Helvetica-Bold", alignment=TA_CENTER)),
Paragraph("MNEMONIC / MEMORY AID", ps("MHH", fontSize=9.5, textColor=colors.white,
fontName="Helvetica-Bold", alignment=TA_CENTER))],
[Paragraph("All 8 Determinants", mnem_h),
Paragraph(
'<b>"B-E-S-H-A-G-O-I"</b><br/>'
'<b>B</b>ig <b>E</b>lephants <b>S</b>ometimes <b>H</b>elp <b>A</b>geing <b>G</b>randmas <b>O</b>vercome <b>I</b>llness<br/>'
'Biological | Environment | Socio-economic | Health services | Ageing | Gender | Others | Information & communication',
mnem_b)],
[Paragraph("Socio-economic\nsub-factors", mnem_h),
Paragraph(
'<b>"EEOP"</b> → <b>E</b>conomic status | <b>E</b>ducation | <b>O</b>ccupation | <b>P</b>olitical system<br/>'
'Memory: <i>"Every Educated Occupation needs Politics"</i>',
mnem_b)],
[Paragraph("Environmental\ncomponents", mnem_h),
Paragraph(
'<b>"PBP"</b> → <b>P</b>hysical | <b>B</b>iological | <b>P</b>sychosocial<br/>'
'Memory: <i>"People Build Psyches"</i>',
mnem_b)],
[Paragraph("Health services\ncomponents", mnem_h),
Paragraph(
'<b>"PPCR"</b> → <b>P</b>romotive | <b>P</b>reventive | <b>C</b>urative | <b>R</b>ehabilitativeive<br/>'
'Memory: <i>"People Prefer Complete Recovery"</i>',
mnem_b)],
[Paragraph("Biological agent\nproperties", mnem_h),
Paragraph(
'<b>"I-P-V"</b> → <b>I</b>nfectivity | <b>P</b>athogenicity | <b>V</b>irulence<br/>'
'Memory: <i>"I Patiently Vanquish"</i>',
mnem_b)],
[Paragraph("Lifestyle is LEARNT\nfrom…", mnem_h),
Paragraph(
'<b>"P-P-F-S-M"</b> → <b>P</b>arents | <b>P</b>eer groups | <b>F</b>riends & siblings | <b>S</b>chool | <b>M</b>ass media<br/>'
'Memory: <i>"Parents Prepare Future Students Majorly"</i>',
mnem_b)],
[Paragraph("Kerala example\n(key stats)", mnem_h),
Paragraph(
'<b>Kerala IMR = 10</b> (vs all-India 34) — year 2016<br/>'
'<b>Female literacy = 97.9%</b> (vs all-India 68.4%) — 2015–16<br/>'
'Concept: <i>Education compensates poverty effects on health</i>',
mnem_b)],
[Paragraph("WHO GNP target\nvs India", mnem_h),
Paragraph(
'WHO target: <b>≥5% GNP</b> on health<br/>'
'India spends: <b>~1% GNP</b> on health & family welfare<br/>'
'Memory: <i>"WHO says 5, India does 1"</i>',
mnem_b)],
[Paragraph("Who first linked\nenvironment & disease?", mnem_h),
Paragraph(
'<b>Hippocrates</b> (first) → climate, water, air<br/>'
'<b>Pettenkofer</b> (Germany) → revived the concept<br/>'
'Memory: <i>"Hip hop to Pettenkofer's pop"</i>',
mnem_b)],
]
mnem_table = Table(mnem_data, colWidths=[3.6*cm, 13.8*cm])
mnem_table.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), PURPLE),
("ROWBACKGROUNDS",(0,1),(-1,-1), [colors.HexColor("#F3E5F5"), colors.HexColor("#EDE7F6")]),
("BOX", (0,0),(-1,-1), 1.2, PURPLE),
("INNERGRID", (0,0),(-1,-1), 0.4, colors.HexColor("#CE93D8")),
("TOPPADDING", (0,0),(-1,-1), 7),
("BOTTOMPADDING", (0,0),(-1,-1), 7),
("LEFTPADDING", (0,0),(-1,-1), 8),
("RIGHTPADDING", (0,0),(-1,-1), 8),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
]))
story += [mnem_table, sp(0.3)]
# ── QUICK-FIRE Q&A ──────────────────────────────────────────────────────────
story.append(banner("⚡ QUICK-FIRE EXAM Q&A", color=colors.HexColor("#B71C1C")))
story.append(sp(0.15))
qa_pairs = [
("Health is multifactorial — what does this mean?",
"Health depends on BOTH genetic (internal) AND environmental (external) factors and their interactions"),
("Which determinant CANNOT be altered after conception?",
"Biological determinant (genetic make-up)"),
("Who first linked environment to disease?",
"Hippocrates (climate, water, air); revived later by Pettenkofer in Germany"),
("What are the 3 components of the external environment?",
"Physical, Biological, Psychosocial"),
("What is 'micro-environment'?",
"Personal/domestic environment — eating habits, smoking, drinking, personal lifestyle"),
("Name the 4 sub-factors of socio-economic conditions.",
"Economic status, Education, Occupation, Political system (EEOP)"),
("What is the WHO target for GNP expenditure on health?",
"At least 5% of GNP. India spends approximately 1% of GNP."),
("Kerala's IMR vs all-India IMR (2016)?",
"Kerala = 10; All-India = 34. Key reason: high female literacy (97.9% vs 68.4%)"),
("What is lifestyle and how is it acquired?",
"Cultural & behavioural patterns + lifelong personal habits. Learnt from parents, peers, siblings, school, and mass media"),
("Give 2 examples of lifestyle-related diseases in developed countries.",
"Coronary heart disease, obesity, lung cancer, drug addiction"),
("When was the Global Commission on Women's Health established?",
"1993"),
("What are the 4 components of health services?",
"Promotive, Preventive, Curative, Rehabilitative (PPCR)"),
("What does ageing of the population lead to?",
"Increased chronic diseases, disabilities, dementia, social isolation — NCD burden"),
("What is 'positive health' according to WHO?",
"Ability to fully express one's genetic potentialities in a healthy environment"),
("What is the principle of intersectoral action?",
"Medicine is NOT the sole contributor to health — food, education, industry, social welfare all contribute"),
("What is per capita GNP used to measure?",
"General economic performance — the most widely accepted measure of economic status"),
("Irony of affluence as a health determinant?",
"Affluence can also CAUSE disease — high rates of CHD, diabetes, obesity in upper socioeconomic groups"),
("What is the definition of lifestyle?",
"'The way people live' — reflecting a whole range of social values, attitudes and activities (Park, p.24)"),
]
qa_data = [[Paragraph("QUESTION", col_h), Paragraph("ANSWER", col_h)]]
for i, (q, a) in enumerate(qa_pairs):
bg = colors.HexColor("#FFF5F5") if i % 2 == 0 else colors.white
qa_data.append([Paragraph(q, qa_q), Paragraph(a, qa_a)])
qa_table = Table(qa_data, colWidths=[8.5*cm, 8.9*cm])
qa_table.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), colors.HexColor("#B71C1C")),
("ROWBACKGROUNDS",(0,1),(-1,-1), [colors.HexColor("#FFF5F5"), colors.white]),
("BOX", (0,0),(-1,-1), 1.2, DARK),
("INNERGRID", (0,0),(-1,-1), 0.4, colors.HexColor("#AAAAAA")),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING", (0,0),(-1,-1), 6),
("LEFTPADDING", (0,0),(-1,-1), 8),
("RIGHTPADDING", (0,0),(-1,-1), 8),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
]))
story += [qa_table, sp(0.3)]
# ── FOOTER ───────────────────────────────────────────────────────────────────
story.append(HRFlowable(width="100%", thickness=1, color=MAROON))
story.append(sp(0.1))
story.append(Paragraph(
"Source: Park's Textbook of Preventive and Social Medicine, pp. 23–25 | "
"Prepared for quick revision",
src_s
))
doc.build(story)
print(f"✅ PDF created: {OUTPUT}")
cd /tmp/workspace/determinants-health-notes && python make_notes.py 2>&1
~/determinants-health-notes/make_notes.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/determinants-health-notes/make_notes.py'
cd /tmp/workspace/determinants-health-notes && python make_notes.py 2>&1
Determinants of Health Notes
PDF Document · PDF
Create a pdf