Answer all these question according to there marks and this I have write in rhughs university exam
"Occupational health should aim at the promotion and maintenance of the highest degree of physical, mental and social well-being of workers in all occupations; the prevention among workers of departures from health caused by their working conditions; the protection of workers in their employment from risks resulting from factors adverse to health; the placing and maintenance of the worker in an occupational environment adapted to his physiological and psychological equipment, and the adaptation of work to man and of each man to his job."
| Type | Causative Dust | Industry | Health Effects |
|---|---|---|---|
| Silicosis | Free silica (SiO2) | Mining (coal, gold, mica), sandblasting, ceramic, pottery, metal grinding | Progressive lung fibrosis, disability, silico-TB, may lead to death |
| Anthracosis | Coal dust | Coal mines | Simple: benign; Progressive Massive Fibrosis (PMF): serious; often combined with silicosis as "anthracosilicosis" |
| Asbestosis | Asbestos fibres | Asbestos mining, insulation, ship building | Lung fibrosis, pleural plaques, mesothelioma, lung cancer |
| Byssinosis | Cotton, jute, flax dust | Textile industry | "Monday fever" - chest tightness, breathlessness, worse on first day of week |
| Bagassosis | Bagasse (sugarcane residue) dust | Sugar mills | Allergic alveolitis, breathlessness |
| Farmer's lung | Mouldy hay dust (thermophilic actinomycetes) | Agriculture | Allergic alveolitis, fever, breathlessness |
| Cancer | Causative Agent | Industry |
|---|---|---|
| Skin cancer | Polycyclic aromatic hydrocarbons, mineral oils, arsenic | Chimney sweeps, shale oil workers, coal tar workers |
| Lung cancer | Asbestos, silica, chromium, nickel, radioactive dust, arsenic | Mining, asbestos, chromate |
| Bladder cancer | Beta-naphthylamine, benzidine | Aniline dye, rubber, cable industry |
| Leukaemia | Benzene, ionizing radiation | Chemical industry, radiology |
| Mesothelioma | Asbestos | Insulation, shipbuilding |
| Nasal sinus cancer | Wood dust, nickel | Furniture, nickel refining |
| Liver angiosarcoma | Vinyl chloride | PVC manufacturing |
Can uh make pdf of all answer to theses each question according to ther marks I have to in university exams
ls /tmp/workspace/ && ls /tmp/workspace/attachments/ 2>/dev/null || echo "no attachments dir"
mkdir -p /tmp/workspace/occupational-health-exam && python3 -c " from reportlab.lib.pagesizes import A4 from reportlab.lib import colors from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import inch, cm from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable, PageBreak from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY import sys print('reportlab available') "
~/occupational-health-exam/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import inch, cm
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.pdfbase import pdfmetrics
OUTPUT = "/tmp/workspace/occupational-health-exam/Occupational_Health_Exam_Answers.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=2*cm,
leftMargin=2*cm,
topMargin=2.5*cm,
bottomMargin=2.5*cm,
title="Occupational Health – Exam Answers",
author="PSM Study Notes"
)
W, H = A4
# ── Colour palette ──────────────────────────────────────────────────────────
DARK_BLUE = colors.HexColor("#1a237e")
MID_BLUE = colors.HexColor("#283593")
LIGHT_BLUE = colors.HexColor("#e8eaf6")
ACCENT = colors.HexColor("#0d47a1")
TABLE_HDR = colors.HexColor("#283593")
TABLE_ROW1 = colors.HexColor("#e3f2fd")
TABLE_ROW2 = colors.white
GOLD = colors.HexColor("#f9a825")
DARK_TEXT = colors.HexColor("#212121")
styles = getSampleStyleSheet()
# ── Custom styles ────────────────────────────────────────────────────────────
cover_title = ParagraphStyle("CoverTitle", parent=styles["Title"],
fontSize=26, textColor=colors.white, alignment=TA_CENTER,
spaceAfter=10, fontName="Helvetica-Bold", leading=32)
cover_sub = ParagraphStyle("CoverSub", parent=styles["Normal"],
fontSize=14, textColor=GOLD, alignment=TA_CENTER,
spaceAfter=6, fontName="Helvetica-Bold")
cover_info = ParagraphStyle("CoverInfo", parent=styles["Normal"],
fontSize=11, textColor=colors.white, alignment=TA_CENTER,
spaceAfter=4, fontName="Helvetica")
q_header = ParagraphStyle("QHeader", parent=styles["Normal"],
fontSize=13, textColor=colors.white, fontName="Helvetica-Bold",
leftIndent=8, spaceAfter=4, spaceBefore=4, leading=16)
section_heading = ParagraphStyle("SectionHeading", parent=styles["Normal"],
fontSize=11, textColor=ACCENT, fontName="Helvetica-Bold",
spaceBefore=10, spaceAfter=4, leading=14)
sub_heading = ParagraphStyle("SubHeading", parent=styles["Normal"],
fontSize=10.5, textColor=MID_BLUE, fontName="Helvetica-Bold",
spaceBefore=8, spaceAfter=3, leading=13)
body = ParagraphStyle("Body", parent=styles["Normal"],
fontSize=10, textColor=DARK_TEXT, fontName="Helvetica",
spaceAfter=4, leading=14, alignment=TA_JUSTIFY)
bullet = ParagraphStyle("Bullet", parent=styles["Normal"],
fontSize=10, textColor=DARK_TEXT, fontName="Helvetica",
leftIndent=16, firstLineIndent=-10, spaceAfter=3, leading=13,
bulletIndent=6)
number_bullet = ParagraphStyle("NumBullet", parent=styles["Normal"],
fontSize=10, textColor=DARK_TEXT, fontName="Helvetica",
leftIndent=20, firstLineIndent=-14, spaceAfter=3, leading=13)
note_style = ParagraphStyle("Note", parent=styles["Normal"],
fontSize=9, textColor=colors.HexColor("#555555"), fontName="Helvetica-Oblique",
spaceAfter=4, leading=12, alignment=TA_CENTER)
# ── Helper functions ─────────────────────────────────────────────────────────
def q_box(q_num, title, marks=None):
"""Returns a coloured question header as a table row."""
marks_txt = f" [{marks} Marks]" if marks else ""
label = f"Q.{q_num} {title}{marks_txt}"
header_para = Paragraph(label, q_header)
t = Table([[header_para]], colWidths=[doc.width])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
("TOPPADDING", (0,0), (-1,-1), 7),
("BOTTOMPADDING", (0,0), (-1,-1), 7),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("BOX", (0,0), (-1,-1), 1, GOLD),
]))
return t
def section(text):
return Paragraph(text, section_heading)
def sub(text):
return Paragraph(text, sub_heading)
def para(text):
return Paragraph(text, body)
def b(text):
return Paragraph(f"• {text}", bullet)
def nb(n, text):
return Paragraph(f"{n}. {text}", number_bullet)
def sp(h=6):
return Spacer(1, h)
def hr():
return HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#bbdefb"),
spaceAfter=4, spaceBefore=4)
def make_table(headers, rows, col_widths=None):
if col_widths is None:
col_widths = [doc.width / len(headers)] * len(headers)
data = [[Paragraph(f"<b>{h}</b>", ParagraphStyle("TH", parent=styles["Normal"],
fontSize=9.5, textColor=colors.white, fontName="Helvetica-Bold",
alignment=TA_CENTER)) for h in headers]]
for i, row in enumerate(rows):
data.append([Paragraph(c, ParagraphStyle("TD", parent=styles["Normal"],
fontSize=9, textColor=DARK_TEXT,
fontName="Helvetica", alignment=TA_LEFT,
leading=12)) for c in row])
t = Table(data, colWidths=col_widths)
style = [
("BACKGROUND", (0,0), (-1,0), TABLE_HDR),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#90caf9")),
("VALIGN", (0,0), (-1,-1), "TOP"),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("ROWBACKGROUNDS",(0,1), (-1,-1), [TABLE_ROW1, TABLE_ROW2]),
]
t.setStyle(TableStyle(style))
return t
# ═══════════════════════════════════════════════════════════════════════════════
# BUILD CONTENT
# ═══════════════════════════════════════════════════════════════════════════════
story = []
# ──────────────────────── COVER PAGE ─────────────────────────────────────────
cover_bg = Table([
[Paragraph("OCCUPATIONAL HEALTH", cover_title)],
[Paragraph("Chapter 17 – Complete Exam Answers", cover_sub)],
[Spacer(1,14)],
[Paragraph("Rugh's University | FMT / PSM Examination", cover_info)],
[Paragraph("Based on: Park's Textbook of Preventive and Social Medicine", cover_info)],
[Spacer(1, 20)],
[Paragraph("Questions I – XIV | Marks-based Answers", cover_info)],
], colWidths=[doc.width])
cover_bg.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
("TOPPADDING", (0,0), (-1,-1), 18),
("BOTTOMPADDING", (0,0), (-1,-1), 18),
("LEFTPADDING", (0,0), (-1,-1), 20),
("RIGHTPADDING", (0,0), (-1,-1), 20),
("BOX", (0,0), (-1,-1), 2, GOLD),
("LINEBELOW", (0,1), (-1,1), 1.5, GOLD),
]))
story.append(cover_bg)
story.append(Spacer(1, 30))
story.append(Paragraph(
"This booklet contains model answers for all 14 questions of the Occupational Health "
"unit, written in accordance with university examination standards and marks allocation.",
ParagraphStyle("CoverNote", parent=styles["Normal"],
fontSize=10.5, textColor=colors.HexColor("#37474f"),
alignment=TA_CENTER, leading=15, fontName="Helvetica-Oblique")))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════════
# Q.I – 10 Marks
# ═══════════════════════════════════════════════════════════════════════════════
story.append(q_box("I",
"Define Occupational Health | Classify Occupational Diseases | "
"Engineering & Legislative Prevention Measures", "10"))
story.append(sp(8))
story.append(section("A. DEFINITION OF OCCUPATIONAL HEALTH"))
story.append(para(
"Occupational health is essentially <b>preventive medicine</b> applied to the workplace. "
"The Joint ILO/WHO Committee on Occupational Health (1950) defined it as:"))
story.append(sp(4))
quote_box = Table([[Paragraph(
"<i>\"Occupational health should aim at the promotion and maintenance of the highest degree "
"of physical, mental and social well-being of workers in all occupations; the prevention "
"among workers of departures from health caused by their working conditions; the protection "
"of workers in their employment from risks resulting from factors adverse to health; "
"the placing and maintenance of the worker in an occupational environment adapted to his "
"physiological and psychological equipment, and the adaptation of work to man and of each "
"man to his job.\"</i>",
ParagraphStyle("Quote", parent=styles["Normal"], fontSize=10,
textColor=DARK_TEXT, fontName="Helvetica-Oblique", leading=14,
alignment=TA_JUSTIFY))]],
colWidths=[doc.width - 20])
quote_box.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), LIGHT_BLUE),
("LEFTPADDING", (0,0),(-1,-1), 12),
("RIGHTPADDING", (0,0),(-1,-1), 12),
("TOPPADDING", (0,0),(-1,-1), 8),
("BOTTOMPADDING", (0,0),(-1,-1), 8),
("BOX", (0,0),(-1,-1), 1, ACCENT),
]))
story.append(quote_box)
story.append(sp(8))
story.append(sub("ERGONOMICS"))
story.append(para(
"<b>Ergonomics</b> (Greek: <i>ergon</i> = work, <i>nomos</i> = law) is an integral part of "
"occupational health. It means <b>\"fitting the job to the worker\"</b> – designing machines, "
"tools, equipment and manufacturing processes to achieve greater efficiency for both man and machine."))
story.append(hr())
story.append(section("B. CLASSIFICATION OF OCCUPATIONAL DISEASES"))
story.append(para("<b>I. Diseases due to Physical Agents</b>"))
for item in [
"Heat: Heat cramps, heat exhaustion, heat stroke",
"Light: Miner's nystagmus, welder's flash (arc eye)",
"Noise: Occupational deafness / Noise-Induced Hearing Loss (NIHL)",
"Vibration: Vibration white finger (Raynaud's phenomenon), joint injuries",
"Ionizing radiation: Radiation sickness, leukaemia, aplastic anaemia",
"Compressed air: Caisson disease (decompression sickness)",
]:
story.append(b(item))
story.append(sp(4))
story.append(para("<b>II. Diseases due to Chemical Agents</b>"))
for item in [
"Dust diseases (Pneumoconiosis): Silicosis, anthracosis, asbestosis, byssinosis, bagassosis, farmer's lung",
"Metals: Lead poisoning (plumbism), mercury poisoning, berylliosis, manganism, arsenic poisoning",
"Chemicals: Acids, alkalies, pesticides",
"Solvents: Carbon bisulphide, benzene, trichloroethylene",
]:
story.append(b(item))
story.append(sp(4))
story.append(para("<b>III. Diseases due to Biological Agents</b>"))
story.append(b("Brucellosis, leptospirosis, anthrax, actinomycosis, hydatidosis, psittacosis, tetanus, fungal infections"))
story.append(para("<b>IV. Occupational Cancers</b>"))
story.append(b("Cancer of skin, lungs, bladder"))
story.append(para("<b>V. Occupational Dermatoses</b>"))
story.append(b("Dermatitis, eczema"))
story.append(para("<b>VI. Diseases of Psychological Origin</b>"))
story.append(b("Industrial neurosis, hypertension, peptic ulcer"))
story.append(hr())
story.append(section("C. ENGINEERING MEASURES FOR PREVENTION"))
measures = [
("1. Substitution",
"Replace dangerous material/process with a less harmful one. "
"E.g., replace dry grinding with wet grinding; substitute white lead in paints."),
("2. Change of Process",
"Modify manufacturing method to reduce hazard generation. "
"E.g., electroplating instead of galvanizing; wet instead of dry textile processing."),
("3. Isolation (Segregation)",
"Isolate harmful process in a separate room/building. Isolation can also be temporal – "
"dangerous operations done at night in absence of regular staff."),
("4. Enclosure",
"Enclose harmful materials and processes to prevent dust/fumes from escaping into factory "
"atmosphere. Usually combined with local exhaust ventilation."),
("5. Ventilation",
"<b>General ventilation</b>: Dilutes contaminated air with fresh air. "
"<b>Local exhaust ventilation</b>: Dusts/fumes drawn into hoods placed near origin, "
"conveyed to collecting units – keeps breathing zone clean."),
("6. Wet Methods",
"Dust controlled at origin by water sprays (e.g., wet drilling of rock). Adding "
"moisture during grinding, sieving and mixing reduces dust generation significantly."),
("7. Personal Protective Equipment (PPE)",
"Respirators, gas masks, ear plugs, ear muffs, helmets, safety shoes, gloves, "
"gum boots, barrier creams, goggles, aprons."),
("8. Environmental Monitoring",
"Periodic sampling of factory atmosphere to check dust and fumes against "
"Threshold Limit Values (TLVs)."),
("9. Health Education",
"Workers educated about hazards, use of PPE, safe work practices."),
]
for title, desc in measures:
story.append(KeepTogether([
sub(title),
para(desc),
]))
story.append(hr())
story.append(section("D. LEGISLATIVE MEASURES FOR PREVENTION"))
leg = [
("The Factories Act 1948",
"Covers cleanliness, ventilation, temperature control, dust/fume suppression, "
"lighting, drinking water, latrines, first-aid, canteen, creche, machinery safety."),
("The Employees' State Insurance (ESI) Act 1948",
"Provides 7 social security benefits: Medical, Sickness, Maternity, Disablement, "
"Dependant's benefit, Funeral expenses, Rehabilitation allowance."),
("The Mines Act 1952",
"Health, safety and welfare of mine workers."),
("The Coal Mines Labour Welfare Act 1947",
"Welfare fund for coal mine workers."),
("The Workmen's Compensation Act 1923",
"Compensation for work injuries and occupational diseases."),
("The Plantation Labour Act 1951",
"Health and welfare of plantation (tea/coffee/rubber) workers."),
]
for act, desc in leg:
story.append(KeepTogether([
sub(act),
para(desc),
]))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════════
# Q.II – Pneumoconiosis
# ═══════════════════════════════════════════════════════════════════════════════
story.append(q_box("II",
"Enumerate Occupational Diseases | Pneumoconiosis – Factors, Types, Effects, Prevention"))
story.append(sp(8))
story.append(section("DEFINITION OF PNEUMOCONIOSIS"))
story.append(para(
"Dust within the size range of <b>0.5 to 3 microns</b> is a health hazard producing, "
"after a variable period of exposure, a lung disease known as <b>pneumoconiosis</b> – "
"a progressive fibrotic lung disease that gradually reduces working capacity. "
"No cure is known; prevention is the only solution."))
story.append(hr())
story.append(section("FACTORS INFLUENCING CAUSATION OF PNEUMOCONIOSIS"))
for n, item in enumerate([
"<b>Chemical composition</b> of dust – free silica (SiO₂) is the most fibrogenic",
"<b>Fineness</b> of particles – 0.5–3 microns are most hazardous (reach alveoli)",
"<b>Concentration</b> of dust in the atmosphere",
"<b>Duration of exposure</b> to the dusty environment",
"<b>Health status</b> of the exposed worker",
"<b>Superimposed infections</b> – especially tuberculosis (silico-TB drastically worsens prognosis)",
], 1):
story.append(nb(n, item))
story.append(hr())
story.append(section("TYPES OF PNEUMOCONIOSIS AND HEALTH EFFECTS"))
story.append(make_table(
["Type", "Causative Dust", "Industry", "Health Effects"],
[
["Silicosis", "Free silica (SiO₂)", "Mining, sandblasting, ceramic, pottery, metal grinding",
"Progressive fibrosis, silico-TB, disability, may be fatal"],
["Anthracosis", "Coal dust", "Coal mines",
"Simple: benign; PMF: severe disability; melanoptysis"],
["Asbestosis", "Asbestos fibres", "Asbestos mining, insulation, shipbuilding",
"Lung fibrosis, pleural plaques, mesothelioma, lung cancer"],
["Byssinosis", "Cotton/jute/flax dust", "Textile industry",
"'Monday fever' – chest tightness, breathlessness"],
["Bagassosis", "Bagasse (sugarcane residue)", "Sugar mills",
"Allergic alveolitis, fever, breathlessness"],
["Farmer's Lung", "Mouldy hay dust (thermophilic actinomycetes)", "Agriculture",
"Allergic alveolitis, fever, dyspnoea"],
],
col_widths=[2.4*cm, 3.2*cm, 4.5*cm, 5.0*cm]
))
story.append(hr())
story.append(section("PREVENTION OF PNEUMOCONIOSIS"))
for n, item in enumerate([
"<b>Substitution</b> – replace silica-containing abrasives with safer materials",
"<b>Wet methods</b> – wet drilling, wet grinding to suppress dust at source",
"<b>Local exhaust ventilation</b> – remove dust before it enters breathing zone",
"<b>Enclosure</b> of dusty machinery and processes",
"<b>Respiratory protection</b> – approved dust respirators for all workers",
"<b>Environmental monitoring</b> – regular air sampling; keep dust below TLV",
"<b>Medical surveillance</b> – pre-employment and periodic chest X-rays + spirometry; "
"remove workers with early changes from dust exposure",
"<b>Statutory provisions</b> – Mines Act and Factories Act enforcement",
], 1):
story.append(nb(n, item))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════════
# Q.III
# ═══════════════════════════════════════════════════════════════════════════════
story.append(q_box("III", "Health Problems Due to Industrialisation"))
story.append(sp(8))
problems = [
("1. Occupational Diseases",
"Pneumoconiosis, lead/mercury poisoning, occupational cancers, dermatoses – "
"directly caused by the industrial work environment."),
("2. Industrial Accidents",
"Machinery injuries, burns, falls, explosions – a major cause of mortality and disability."),
("3. Air Pollution",
"Industrial emissions cause higher incidence of chronic bronchitis and lung cancer in "
"industrial areas compared to rural areas."),
("4. Water & Soil Pollution",
"Industrial effluents contaminate water sources; chemical contamination of soil."),
("5. Noise Pollution",
"Noise-Induced Hearing Loss (NIHL) is widespread; non-auditory effects include "
"fatigue, hypertension, and reduced work efficiency."),
("6. Urbanisation Problems",
"Overcrowding, poor housing, inadequate sanitation, growth of slums around industrial centres."),
("7. Social Problems",
"Alcoholism, drug addiction, prostitution, gambling, juvenile delinquency, "
"increased crime rates, family breakdown and increased divorce rates."),
("8. Nutritional Problems",
"Malnutrition is common among low-income industrial workers; affects metabolism "
"of toxic agents and tolerance mechanisms."),
("9. Psychological/Mental Problems",
"Industrial neurosis, occupational stress, mental fatigue, anxiety, "
"monotony of repetitive work."),
("10. Vital Statistics",
"Industrial areas show higher crude death rates and higher infant mortality rates; "
"higher morbidity from specific diseases such as TB, respiratory diseases."),
]
for title, desc in problems:
story.append(KeepTogether([sub(title), para(desc)]))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════════
# Q.IV – Lead Poisoning (5 Marks)
# ═══════════════════════════════════════════════════════════════════════════════
story.append(q_box("IV",
"Lead Poisoning (Plumbism) – Causes, Clinical Features, Management & Prevention", "5"))
story.append(sp(8))
story.append(section("CAUSES / SOURCES OF EXPOSURE"))
story.append(para(
"Workers in the following industries are at risk: lead smelting, battery manufacturing, "
"lead paint, plumbing, printing, petrol (organic lead – tetraethyl lead), "
"cable manufacturing, ceramic glazing."))
story.append(para(
"<b>Normal blood lead</b>: ~25 µg/100 ml. "
"<b>Toxic level</b>: >70 µg/100 ml (clinical symptoms appear)."))
story.append(hr())
story.append(section("PATHOPHYSIOLOGY"))
story.append(para(
"95% of absorbed lead enters erythrocytes. Lead deposits in bones as a metabolically "
"inactive reservoir. Lead combines with SH-groups of enzymes involved in "
"<b>porphyrin (haem) synthesis</b> → anaemia and increased ALA in urine."))
story.append(hr())
story.append(section("CLINICAL FEATURES"))
story.append(sub("Inorganic Lead Poisoning"))
for item in [
"GIT: Abdominal colic, constipation ('lead colic'), loss of appetite",
"CNS/PNS: Peripheral neuropathy – <b>wrist drop</b> (classic), foot drop",
"Haematological: Anaemia, basophilic stippling of RBCs",
"Oral: <b>Burton's line</b> – blue-black line on gums at tooth margin",
"Renal: Lead nephropathy with chronic exposure",
]:
story.append(b(item))
story.append(sub("Organic Lead Poisoning (tetraethyl lead)"))
story.append(b("CNS predominant: Insomnia, headache, mental confusion, delirium, hallucinations"))
story.append(hr())
story.append(section("DIAGNOSIS"))
for n, item in enumerate([
"<b>History</b> of occupational lead exposure",
"<b>Clinical features</b>: colic, blue line, wrist drop, anaemia",
"<b>Laboratory</b>: (a) Coproporphyrin in urine (CPU) – screening; normal <150 µg/L; "
"(b) Amino levulinic acid in urine (ALAU) – >5 mg/L confirms absorption; "
"(c) Blood lead >70 µg/100 ml = toxic; (d) Urine lead >0.8 mg/L; "
"(e) Basophilic stippling of RBCs on peripheral blood smear",
], 1):
story.append(nb(n, item))
story.append(hr())
story.append(section("MANAGEMENT"))
for n, item in enumerate([
"<b>Chelation therapy</b>: EDTA (calcium disodium edetate) IV/IM – first choice; "
"DMSA (dimercaptosuccinic acid) oral; BAL (dimercaprol) for severe cases",
"Remove patient from further lead exposure (most important)",
"Treat symptoms – analgesics for colic, anticonvulsants if seizures",
"Iron supplementation and nutritional support for anaemia",
"Monitor blood and urine lead levels during treatment",
], 1):
story.append(nb(n, item))
story.append(hr())
story.append(section("PREVENTION"))
for n, item in enumerate([
"Substitution of lead with less toxic materials where possible",
"Isolation and enclosure of all lead-generating processes",
"Local exhaust ventilation at all points of lead dust/fume generation",
"Personal respiratory protection (approved respirators)",
"Good housekeeping – wet sweeping; no dry sweeping in lead areas",
"Working atmosphere lead concentration kept below 2.0 mg per 10 m³ (TLV)",
"Periodic medical examination with blood lead, urine lead, haemoglobin, "
"basophilic stippling and coproporphyrin testing",
"No eating, drinking or smoking in work areas",
], 1):
story.append(nb(n, item))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════════
# Q.V – Occupational Cancers
# ═══════════════════════════════════════════════════════════════════════════════
story.append(q_box("V", "Occupational Cancers"))
story.append(sp(8))
story.append(make_table(
["Cancer Site", "Causative Agent", "Industry/Occupation"],
[
["Skin", "Polycyclic aromatic hydrocarbons, mineral oils, arsenic, UV radiation",
"Chimney sweeps, shale oil workers, coal tar, outdoor workers"],
["Lung", "Asbestos, silica, chromium, nickel, radioactive dust, arsenic, radon",
"Mining, asbestos, chromate manufacturing"],
["Urinary bladder", "Beta-naphthylamine, benzidine, 4-aminobiphenyl",
"Aniline dye, rubber, cable, leather industry"],
["Leukaemia", "Benzene, ionizing radiation",
"Chemical industry, radiology, nuclear industry"],
["Mesothelioma", "Asbestos fibres",
"Asbestos mining, insulation, shipbuilding"],
["Nasal sinus", "Wood dust, nickel, chromium",
"Furniture/carpentry, nickel refining"],
["Liver (angiosarcoma)", "Vinyl chloride monomer",
"PVC (polyvinyl chloride) manufacturing"],
],
col_widths=[3.5*cm, 6.5*cm, 5.2*cm]
))
story.append(sp(8))
story.append(section("PREVENTION OF OCCUPATIONAL CANCERS"))
for n, item in enumerate([
"Identify and eliminate/substitute known carcinogens in the workplace",
"Adequate local exhaust ventilation and enclosure of carcinogen-generating processes",
"Personal protective equipment (respirators, gloves, coveralls)",
"Pre-employment and periodic medical surveillance with cancer screening",
"Biological monitoring (e.g., urine cytology for bladder cancer in dye workers)",
"Statutory regulations setting permissible exposure limits (PELs)",
"Worker education about carcinogenic risks",
], 1):
story.append(nb(n, item))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════════
# Q.VI – Prevention of Industrial Accidents
# ═══════════════════════════════════════════════════════════════════════════════
story.append(q_box("VI", "Prevention of Industrial Accidents"))
story.append(sp(8))
story.append(section("CAUSES OF INDUSTRIAL ACCIDENTS"))
story.append(sub("Human / Personal Factors"))
for item in ["Fatigue and drowsiness", "Inattention and carelessness",
"Lack of training and experience", "Emotional disturbance",
"Alcohol and drug use", "Physical or mental illness"]:
story.append(b(item))
story.append(sub("Environmental Factors"))
for item in ["Poor lighting at workstations", "Wet/slippery floors",
"Extreme temperatures", "Poor housekeeping", "Inadequate workspace"]:
story.append(b(item))
story.append(sub("Mechanical Factors"))
for item in ["Defective or poorly maintained machinery", "Unguarded moving parts (belts, gears, pulleys)",
"Faulty electrical systems"]:
story.append(b(item))
story.append(hr())
story.append(section("PREVENTIVE MEASURES"))
measures_acc = [
("Engineering Controls",
"Guarding of all moving machinery parts; safe factory layout design; "
"adequate lighting at all work areas; non-slip flooring; electrical earthing and insulation."),
("Legislative Measures",
"Factories Act 1948 mandates safety of machinery, fire precautions, adequate "
"floor space, safety inspectors; penalties for violations."),
("Administrative Measures",
"Proper induction training for new workers; clear safety signage; "
"job rotation to reduce monotony and fatigue; shift time limits; "
"hazard reporting systems."),
("Medical Measures",
"Pre-placement examination to match worker to job demands; periodic examination; "
"adequate first-aid facilities; occupational health nurse at all large factories."),
("Personal Measures",
"Mandatory use of PPE; worker safety education and awareness programmes; "
"safety committees with worker representation."),
]
for title, desc in measures_acc:
story.append(KeepTogether([sub(title), para(desc)]))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════════
# Q.VII – Sickness Absenteeism
# ═══════════════════════════════════════════════════════════════════════════════
story.append(q_box("VII",
"Sickness Absenteeism – Definition, Reasons, Significance"))
story.append(sp(8))
story.append(section("DEFINITION AND MEASUREMENT"))
story.append(para(
"<b>Absenteeism</b> is the failure of a worker to report for scheduled work. "
"<b>Sickness absenteeism rate</b> (the 'thickness' of absenteeism) is calculated as:"))
formula_box = Table([[Paragraph(
"Sickness Absenteeism Rate = (Number of man-days lost due to sickness ÷ "
"Total scheduled man-days) × 100",
ParagraphStyle("Formula", parent=styles["Normal"], fontSize=11,
textColor=DARK_BLUE, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=16))]],
colWidths=[doc.width - 20])
formula_box.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), LIGHT_BLUE),
("BOX", (0,0),(-1,-1), 1.5, ACCENT),
("TOPPADDING", (0,0),(-1,-1), 8),
("BOTTOMPADDING", (0,0),(-1,-1), 8),
]))
story.append(formula_box)
story.append(hr())
story.append(section("REASONS FOR SICKNESS ABSENTEEISM"))
story.append(sub("Medical/Personal Causes"))
for item in [
"Acute illnesses – fever, respiratory infections, diarrhoea",
"Occupational diseases – lead poisoning, pneumoconiosis",
"Chronic diseases – tuberculosis, hypertension, diabetes",
"Industrial accidents and injuries",
"Menstrual disorders and pregnancy-related issues in women",
]:
story.append(b(item))
story.append(sub("Social/Environmental Causes"))
for item in [
"Poor housing and sanitation leading to communicable diseases",
"Malnutrition and low immunity",
"Family responsibilities and domestic problems",
"Alcoholism and substance abuse",
]:
story.append(b(item))
story.append(sub("Work-Related Causes"))
for item in [
"Job dissatisfaction and poor industrial relations",
"Work fatigue due to excessive hours",
"Hazardous and unpleasant work environment",
"Low wages causing poor living conditions",
]:
story.append(b(item))
story.append(hr())
story.append(section("SIGNIFICANCE OF SICKNESS ABSENTEEISM"))
for n, item in enumerate([
"<b>Health index</b> – high sickness absenteeism rates indicate poor worker health status",
"<b>Economic impact</b> – production loss; cost of replacement workers",
"<b>Identify hazards</b> – patterns in specific departments reveal occupational hazards",
"<b>Guide health services</b> – directs resource allocation in occupational health",
"<b>ESI benefit disbursement</b> – measurement ensures proper sickness benefit payment",
"<b>Research tool</b> – helps study disease patterns in industrial populations",
"<b>Evaluates preventive measures</b> – reduction in absenteeism rates measures the success of interventions",
], 1):
story.append(nb(n, item))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════════
# Q.VIII – ESI Act 1948
# ═══════════════════════════════════════════════════════════════════════════════
story.append(q_box("VIII", "ESI Act 1948 – Benefits (Sickness/Medical)"))
story.append(sp(8))
story.append(section("OVERVIEW OF THE ESI ACT 1948"))
story.append(para(
"The <b>Employees' State Insurance Act 1948</b> is a comprehensive social security legislation "
"for Indian workers. It applies to factories and establishments employing <b>10 or more workers</b> "
"with wages up to <b>Rs. 21,000/month</b>. "
"Workers contribute <b>0.75% of wages</b>; employers contribute <b>3.25% of wages</b> "
"to the ESI Corporation."))
story.append(hr())
story.append(section("7 BENEFITS UNDER ESI ACT"))
benefits = [
("1. Medical Benefit",
"Full medical care FREE of cost for insured person and family. Covers: "
"outpatient care, specialist services, hospitalisation, drugs and dressings, "
"pathological and radiological investigations, domiciliary services, "
"antenatal/natal/postnatal care, immunisation, family planning, emergency and "
"ambulance services. Provided via ESI hospitals, dispensaries, or panel practitioners."),
("2. Sickness Benefit",
"Cash benefit at approximately 70% of daily wages during certified sickness. "
"Payable up to 91 days per year. <b>Extended sickness benefit</b>: for 34 specified "
"long-term diseases, benefit extends up to 2 years at 80% of wages."),
("3. Maternity Benefit",
"26 weeks paid maternity leave for insured women workers."),
("4. Disablement Benefit",
"<b>Temporary disablement</b>: Cash benefit from day 1 of employment injury until recovery. "
"<b>Permanent disablement</b>: Life pension proportional to assessed degree of disability."),
("5. Dependants' Benefit",
"Monthly pension to surviving dependants (widow, children, dependent parents) "
"if insured person dies due to employment injury."),
("6. Funeral Expenses",
"Lump sum payment (currently Rs. 10,000) to meet funeral expenses of insured person."),
("7. Unemployment Allowance",
"(Rajiv Gandhi Shramik Kalyan Yojana) – Cash allowance to insured persons "
"who lose employment involuntarily through closure of factory or retrenchment. "
"Payable up to 24 months."),
]
for title, desc in benefits:
story.append(KeepTogether([sub(title), para(desc), sp(2)]))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════════
# Q.IX – Occupational Hazards / Unfit Professional (3 Marks)
# ═══════════════════════════════════════════════════════════════════════════════
story.append(q_box("IX", "Occupational Hazards – The Unfit Professional", "3"))
story.append(sp(8))
story.append(make_table(
["Profession / Worker", "Specific Occupational Hazards"],
[
["Miners (coal, gold, mica)", "Silicosis, anthracosis, Caisson disease, accidents, noise-induced deafness"],
["Textile workers", "Byssinosis, noise-induced hearing loss"],
["Radiologists / X-ray technicians", "Ionizing radiation → radiation sickness, leukaemia, cataract"],
["Farmers / Agricultural workers", "Pesticide poisoning, farmer's lung, zoonoses, heat stroke"],
["Painters / Battery workers", "Lead poisoning (plumbism) – wrist drop, anaemia, colic"],
["Healthcare workers", "Bloodborne infections (Hep B, HIV), needle-stick injuries, latex allergy"],
["Computer/IT professionals", "Repetitive strain injury, visual fatigue, backache (ergonomic issues)"],
["Welders", "Pneumoconiosis (metal dust), arc eye (UV keratitis), fume inhalation"],
["Chemical industry workers", "Benzene (leukaemia), solvents (CNS effects), dermatitis"],
],
col_widths=[5.5*cm, 10.5*cm]
))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════════
# Q.X – Ergonomics
# ═══════════════════════════════════════════════════════════════════════════════
story.append(q_box("X", "Ergonomics"))
story.append(sp(8))
story.append(section("DEFINITION"))
story.append(para(
"<b>Ergonomics</b> (Greek: <i>ergon</i> = work, <i>nomos</i> = law) is the science of "
"<b>\"fitting the job to the worker.\"</b> It involves designing machines, tools, equipment, "
"manufacturing processes, and work environments to achieve greater efficiency for both man "
"and machine. The aim is to achieve the best mutual adjustment between man and his work "
"for improvement of human efficiency and well-being."))
story.append(hr())
story.append(section("APPLICATIONS OF ERGONOMICS"))
for n, item in enumerate([
"<b>Workstation design</b>: Correct chair height, desk height, monitor position to prevent "
"musculoskeletal strain",
"<b>Tool design</b>: Hand tools designed to reduce vibration and repetitive strain",
"<b>Lighting and temperature control</b>: Optimal environment for efficient work",
"<b>Task design</b>: Job rotation, rest breaks, varied tasks to prevent monotony and fatigue",
"<b>Shift work design</b>: Minimising disruption to circadian rhythm",
"<b>Industrial machinery layout</b>: Reducing unnecessary movement and effort",
], 1):
story.append(nb(n, item))
story.append(hr())
story.append(section("WORK-RELATED MUSCULOSKELETAL DISORDERS (WRMSDs)"))
story.append(para(
"The commonest consequence of poor ergonomics. Includes: neck pain, low back pain "
"(LBP), carpal tunnel syndrome, tennis elbow, rotator cuff injuries, plantar fasciitis."))
story.append(para(
"<b>Prevention</b>: Ergonomic assessment of workstations, provision of adjustable chairs/desks, "
"training in correct postures, use of anti-vibration gloves, adequate rest periods."))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════════
# Q.XI – Silicosis
# ═══════════════════════════════════════════════════════════════════════════════
story.append(q_box("XI", "Silicosis – Definition and How It Is Diagnosed"))
story.append(sp(8))
story.append(section("DEFINITION"))
story.append(para(
"Silicosis is an occupational lung disease caused by prolonged inhalation of dust containing "
"<b>free silica (silicon dioxide – SiO₂)</b>. It causes progressive, nodular, fibrotic lung "
"disease and is the <b>most important cause of permanent occupational disability and mortality</b>. "
"First reported in India from Kolar Gold Mines, Mysore, in 1947."))
story.append(hr())
story.append(section("AT-RISK OCCUPATIONS"))
for item in [
"Mining: coal, gold, silver, mica, lead, zinc, manganese",
"Sandblasting",
"Pottery and ceramic industry",
"Metal grinding and rock drilling",
"Iron and steel industry",
"Building and construction work",
]:
story.append(b(item))
story.append(hr())
story.append(section("CLINICAL TYPES"))
story.append(sub("1. Simple/Chronic Silicosis"))
story.append(para(
"Most common. Occurs after 10+ years of moderate dust exposure. "
"Often asymptomatic early; detected on X-ray."))
story.append(sub("2. Accelerated Silicosis"))
story.append(para("Develops within 5–10 years of higher dust exposure; faster progression."))
story.append(sub("3. Acute Silicosis"))
story.append(para(
"Rare; occurs after very heavy short-term exposure; rapidly progressive, "
"often fatal within 1–5 years."))
story.append(hr())
story.append(section("DIAGNOSIS"))
for n, item in enumerate([
"<b>Occupational history</b>: Duration and intensity of silica dust exposure is the most important clue",
"<b>Symptoms</b>: Progressive breathlessness (dyspnoea) on exertion, cough, chest pain, cyanosis in advanced cases",
"<b>Chest X-ray</b> (most important investigation): Small rounded opacities (0.5–5 mm) in upper lobes bilaterally; "
"'eggshell calcification' of hilar lymph nodes; in advanced cases – Progressive Massive Fibrosis (PMF)",
"<b>Pulmonary function tests (PFTs)</b>: Restrictive pattern (reduced FVC, reduced TLC); FEV₁/FVC ratio normal or elevated",
"<b>HRCT Chest</b>: More sensitive than plain X-ray; shows nodules, masses and fibrosis in detail",
"<b>Tuberculosis screening</b>: Mantoux test, sputum for AFB – essential since silicosis predisposes to TB ('silico-TB'); "
"TB risk increases 30-fold in silicosis",
], 1):
story.append(nb(n, item))
story.append(sp(6))
story.append(para(
"<b>Note</b>: No cure exists for silicosis. Treatment is supportive (bronchodilators, "
"treat TB if present, pulmonary rehabilitation). The focus must be on <b>prevention</b> "
"and <b>early removal from dust exposure</b> upon diagnosis."))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════════
# Q.XII – Anthracosis
# ═══════════════════════════════════════════════════════════════════════════════
story.append(q_box("XII", "Anthracosis (Coal Worker's Pneumoconiosis)"))
story.append(sp(8))
story.append(para(
"<b>Anthracosis</b> (Coal Worker's Pneumoconiosis – CWP) is caused by inhalation of "
"<b>coal dust</b>. When combined with silica dust (as is common in mines), it is called "
"<b>anthracosilicosis</b>, which is more severe."))
story.append(hr())
story.append(section("PATHOLOGY"))
story.append(sub("Simple CWP"))
story.append(para(
"Coal dust macules (1–5 mm) formed in upper lobes and peribronchiolar areas. "
"Relatively benign. May progress to complicated CWP."))
story.append(sub("Progressive Massive Fibrosis (PMF)"))
story.append(para(
"Large black fibrotic masses (>1 cm) in upper lobes. Severe disability; "
"cor pulmonale may develop. 'Melanoptysis' (coughing up black sputum) is characteristic."))
story.append(sub("Caplan's Syndrome"))
story.append(para(
"CWP + rheumatoid arthritis → large necrotic nodules in the lungs (Caplan's nodules). "
"Immunological basis."))
story.append(hr())
story.append(section("CLINICAL FEATURES"))
for item in [
"Simple CWP: Often asymptomatic; incidental finding on chest X-ray",
"PMF: Progressive dyspnoea, productive cough, melanoptysis (black sputum)",
"Advanced: Cyanosis, cor pulmonale (right heart failure), respiratory failure",
"Increased susceptibility to tuberculosis",
]:
story.append(b(item))
story.append(hr())
story.append(section("DIAGNOSIS"))
story.append(para(
"History of coal mining + Chest X-ray (stippled, nodular opacities in upper and mid zones, "
"progressing to large masses in PMF) + PFTs (restrictive pattern)."))
story.append(hr())
story.append(section("PREVENTION"))
for n, item in enumerate([
"Dust suppression in mines by water sprays and wet drilling",
"Adequate mine ventilation",
"Respirators for all underground workers",
"Periodic chest X-rays for all miners (annual)",
"Early removal from dust exposure for affected workers",
"Statutory enforcement of Mines Act 1952",
], 1):
story.append(nb(n, item))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════════
# Q.XIII – Agricultural Workers
# ═══════════════════════════════════════════════════════════════════════════════
story.append(q_box("XIII", "Occupational Risks to Farmers and Agricultural Workers"))
story.append(sp(8))
groups = [
("1. Chemical Hazards",
[
"<b>Pesticide poisoning</b> (organophosphates, carbamates) – most common acute occupational "
"poisoning; cholinergic toxidrome: miosis, excessive salivation, bradycardia, seizures; treat with atropine + oximes",
"Fertiliser and herbicide exposure causing skin and respiratory irritation",
"Mercury fungicide poisoning in paddy workers",
]),
("2. Biological Hazards",
[
"<b>Zoonoses</b>: Brucellosis, leptospirosis, anthrax, rabies (from cattle/dogs)",
"<b>Soil-transmitted helminths</b>: Hookworm (ancylostomiasis) – 'ground itch' through bare feet",
"Tetanus – soil contamination of wounds",
"Malaria and filariasis – vector-borne diseases in agricultural areas",
]),
("3. Dust Diseases",
[
"<b>Farmer's lung</b> – allergic alveolitis from mouldy hay (thermophilic actinomycetes)",
"<b>Bagassosis</b> – sugarcane workers (bagasse dust)",
"<b>Byssinosis</b> – cotton cultivation and processing workers",
]),
("4. Physical Hazards",
[
"Heat stroke and heat exhaustion due to prolonged outdoor sun exposure",
"Snake bites and insect stings (scorpions, wasps)",
"Injuries from farm machinery (tractors, threshers), cutting tools",
"Noise-induced hearing loss from tractors and machines",
]),
("5. Ergonomic Hazards",
[
"Low back pain from repeated bending and squatting in fields",
"Musculoskeletal injuries from repetitive motions (hand weeding, harvesting)",
"Wrist and hand strain from manual tools",
]),
]
for group, items in groups:
story.append(sub(group))
for item in items:
story.append(b(item))
story.append(sp(4))
story.append(hr())
story.append(section("PREVENTION"))
for n, item in enumerate([
"Protective clothing (gloves, covered shoes, long sleeves) while working",
"Proper storage and safe handling of pesticides; training in correct use",
"Immunisation: tetanus, rabies for exposed workers",
"Provision of respiratory protection when handling dusts (bagasse, mouldy hay)",
"Mechanisation of the most hazardous tasks where feasible",
"Regular medical check-ups including chest X-ray, blood pressure, blood glucose",
"Safe drinking water and sanitation facilities in agricultural settings",
], 1):
story.append(nb(n, item))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════════
# Q.XIV – Pre-Placement Examination
# ═══════════════════════════════════════════════════════════════════════════════
story.append(q_box("XIV", "Pre-Placement Examination and Its Importance"))
story.append(sp(8))
story.append(section("DEFINITION"))
story.append(para(
"A <b>pre-placement (pre-employment) medical examination</b> is a systematic medical assessment "
"conducted on a worker <b>before placing them in a specific job</b>. The aim is to assess "
"their physical and mental fitness for the particular demands of that occupation and to "
"establish a baseline health record."))
story.append(hr())
story.append(section("COMPONENTS OF PRE-PLACEMENT EXAMINATION"))
story.append(sub("A. History Taking"))
for item in ["Past illnesses, hospitalisations, surgeries",
"Allergies and drug sensitivities",
"Family history of hereditary diseases",
"Previous occupational exposures"]:
story.append(b(item))
story.append(sub("B. Physical Examination"))
for item in ["General examination (build, nutrition, pallor, cyanosis)",
"Systemic examination (cardiovascular, respiratory, musculoskeletal, nervous system)",
"Anthropometric measurements (height, weight, BMI)"]:
story.append(b(item))
story.append(sub("C. Special Tests (based on job type)"))
story.append(make_table(
["Job Hazard", "Specific Test"],
[
["Dusty environment", "Spirometry / Lung function tests; Chest X-ray (baseline)"],
["Noisy environment", "Audiometry (baseline hearing threshold)"],
["Lead/chemical exposure", "Blood lead, haemoglobin, liver/kidney function"],
["Physically demanding", "ECG, blood pressure, musculoskeletal assessment"],
["Visually demanding", "Visual acuity, colour vision, tonometry"],
["Food handlers", "Stool culture, skin examination, VDRL"],
],
col_widths=[5.5*cm, 10.5*cm]
))
story.append(hr())
story.append(section("IMPORTANCE OF PRE-PLACEMENT EXAMINATION"))
for n, item in enumerate([
"<b>Establishes baseline data</b> – Provides reference values for future periodic examinations; "
"any deterioration can be attributed to occupational exposure",
"<b>Job matching / fitness assessment</b> – Ensures the worker is physically and mentally fit "
"for specific job demands; prevents placing susceptible individuals in hazardous roles "
"(e.g., asthmatic worker not placed in dusty area; epileptic not placed near moving machinery)",
"<b>Detects pre-existing conditions</b> – Identifies diseases that may be worsened by occupational "
"exposure; protects both worker and employer from compensation disputes",
"<b>Medicolegal protection</b> – Establishes that a disease is occupational rather than pre-existing; "
"essential for workers' compensation and ESI claims",
"<b>Early detection of occupational disease</b> – Combined with periodic examinations, allows "
"early diagnosis and timely intervention before irreversible damage",
"<b>Facilitates rehabilitation</b> – Workers found unfit for one role can be placed in suitable "
"alternative employment",
"<b>Legal requirement</b> – Under the Factories Act, Mines Act and Plantations Labour Act, "
"pre-employment examinations are mandatory for hazardous industries",
"<b>Reduces absenteeism</b> – Properly placed workers are healthier, more productive and "
"have lower sickness absenteeism rates",
], 1):
story.append(nb(n, item))
story.append(sp(20))
story.append(hr())
story.append(Paragraph(
"Source: Park's Textbook of Preventive and Social Medicine | "
"Prepared for Rugh's University FMT/PSM Examination",
note_style))
# ═══════════════════════════════════════════════════════════════════════════════
# BUILD PDF
# ═══════════════════════════════════════════════════════════════════════════════
doc.build(story)
print(f"PDF created successfully: {OUTPUT}")
cd /tmp/workspace/occupational-health-exam && python3 generate_pdf.py 2>&1
ls -lh /tmp/workspace/occupational-health-exam/Occupational_Health_Exam_Answers.pdf
Occupational Health Exam Answers
PDF Document · PDF
| Question | Topic | Marks |
|---|---|---|
| Q.I | Define Occupational Health + Classify ODs + Engineering & Legislative Prevention | 10 |
| Q.II | Pneumoconiosis – Factors, Types (table), Health Effects, Prevention | - |
| Q.III | Health Problems due to Industrialisation | - |
| Q.IV | Lead Poisoning – Causes, Clinical Features, Diagnosis, Management, Prevention | 5 |
| Q.V | Occupational Cancers (table with agents & industries) | - |
| Q.VI | Prevention of Industrial Accidents | - |
| Q.VII | Sickness Absenteeism – Definition (with formula), Reasons, Significance | - |
| Q.VIII | ESI Act 1948 – All 7 Benefits explained | - |
| Q.IX | Occupational Hazards – Profession-wise table | 3 |
| Q.X | Ergonomics – Definition, Applications, WRMSDs | - |
| Q.XI | Silicosis – Definition, Types, Diagnosis in detail | - |
| Q.XII | Anthracosis / Coal Worker's Pneumoconiosis | - |
| Q.XIII | Occupational Risks to Farmers (all 5 categories) | - |
| Q.XIV | Pre-Placement Examination – Components + Importance | - |
I want answer of this pdf of all chapter according to marks o have to write in rguhs university exam make it 2 part and generate to pdf
cd /tmp/workspace/attachments/db9a8716-213f-4d4c-8cdd-37535435b725/ && python3 -c " import pdfplumber with pdfplumber.open('PSM .pdf') as pdf: print(f'Total pages: {len(pdf.pages)}') # Read first 3 pages to understand structure for i in range(min(5, len(pdf.pages))): print(f'--- PAGE {i+1} ---') text = pdf.pages[i].extract_text() print(text[:1500] if text else 'NO TEXT') print() "
cd /tmp/workspace/attachments/db9a8716-213f-4d4c-8cdd-37535435b725/ && python3 -c " import pdfplumber with pdfplumber.open('PSM .pdf') as pdf: # Read pages 5-22 for i in range(5, len(pdf.pages)): print(f'--- PAGE {i+1} ---') text = pdf.pages[i].extract_text() print(text[:2000] if text else 'NO TEXT') print() " 2>&1 | head -400
cd /tmp/workspace/attachments/db9a8716-213f-4d4c-8cdd-37535435b725/ && python3 -c " import pdfplumber with pdfplumber.open('PSM .pdf') as pdf: for i in range(17, len(pdf.pages)): print(f'--- PAGE {i+1} ---') text = pdf.pages[i].extract_text() print(text[:2000] if text else 'NO TEXT') print() "
~/psm-exam/generate_part1.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, PageBreak, KeepTogether)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
OUTPUT = "/tmp/workspace/psm-exam/PSM_Exam_Answers_Part1.pdf"
doc = SimpleDocTemplate(OUTPUT, pagesize=A4,
rightMargin=2*cm, leftMargin=2*cm, topMargin=2.5*cm, bottomMargin=2.5*cm,
title="PSM Exam Answers Part 1", author="RGUHS PSM")
W, H = A4
DARK_BLUE = colors.HexColor("#1a237e")
MID_BLUE = colors.HexColor("#283593")
LIGHT_BLUE = colors.HexColor("#e8eaf6")
ACCENT = colors.HexColor("#0d47a1")
TABLE_HDR = colors.HexColor("#1565c0")
TABLE_ROW1 = colors.HexColor("#e3f2fd")
GOLD = colors.HexColor("#f9a825")
DARK_TEXT = colors.HexColor("#212121")
GREEN_HDR = colors.HexColor("#1b5e20")
styles = getSampleStyleSheet()
ch_title_s = ParagraphStyle("ChTitle", parent=styles["Normal"],
fontSize=14, textColor=colors.white, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=18)
q_header_s = ParagraphStyle("QH", parent=styles["Normal"],
fontSize=11, textColor=colors.white, fontName="Helvetica-Bold",
leftIndent=8, leading=14)
sec_s = ParagraphStyle("Sec", parent=styles["Normal"],
fontSize=11, textColor=ACCENT, fontName="Helvetica-Bold",
spaceBefore=8, spaceAfter=3, leading=14)
sub_s = ParagraphStyle("Sub", parent=styles["Normal"],
fontSize=10.5, textColor=MID_BLUE, fontName="Helvetica-Bold",
spaceBefore=6, spaceAfter=2, leading=13)
body_s = ParagraphStyle("Body", parent=styles["Normal"],
fontSize=9.5, textColor=DARK_TEXT, fontName="Helvetica",
spaceAfter=3, leading=13, alignment=TA_JUSTIFY)
bullet_s = ParagraphStyle("Bul", parent=styles["Normal"],
fontSize=9.5, textColor=DARK_TEXT, fontName="Helvetica",
leftIndent=14, firstLineIndent=-10, spaceAfter=2, leading=12)
nbullet_s = ParagraphStyle("NBul", parent=styles["Normal"],
fontSize=9.5, textColor=DARK_TEXT, fontName="Helvetica",
leftIndent=18, firstLineIndent=-14, spaceAfter=2, leading=12)
note_s = ParagraphStyle("Note", parent=styles["Normal"],
fontSize=8.5, textColor=colors.HexColor("#555555"),
fontName="Helvetica-Oblique", alignment=TA_CENTER, leading=11)
cover_title_s = ParagraphStyle("CT", parent=styles["Normal"],
fontSize=28, textColor=colors.white, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=34)
cover_sub_s = ParagraphStyle("CS", parent=styles["Normal"],
fontSize=15, textColor=GOLD, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=20)
cover_info_s = ParagraphStyle("CI", parent=styles["Normal"],
fontSize=11, textColor=colors.white, fontName="Helvetica",
alignment=TA_CENTER, leading=14)
def ch_box(num, title, tag=""):
label = f"Chapter {num}: {title}"
if tag: label += f" [{tag}]"
p = Paragraph(label, ch_title_s)
t = Table([[p]], colWidths=[doc.width])
t.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1), GREEN_HDR),
("TOPPADDING",(0,0),(-1,-1),10),("BOTTOMPADDING",(0,0),(-1,-1),10),
("LEFTPADDING",(0,0),(-1,-1),12),("RIGHTPADDING",(0,0),(-1,-1),12),
("BOX",(0,0),(-1,-1),2,GOLD),
]))
return t
def q_box(qn, txt, marks=None):
ml = f" [{marks} Marks]" if marks else ""
p = Paragraph(f"Q.{qn} {txt}{ml}", q_header_s)
t = Table([[p]], colWidths=[doc.width])
t.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1), DARK_BLUE),
("TOPPADDING",(0,0),(-1,-1),6),("BOTTOMPADDING",(0,0),(-1,-1),6),
("LEFTPADDING",(0,0),(-1,-1),10),("RIGHTPADDING",(0,0),(-1,-1),10),
("BOX",(0,0),(-1,-1),1,GOLD),
]))
return t
def sec(t): return Paragraph(t, sec_s)
def sub(t): return Paragraph(t, sub_s)
def p(t): return Paragraph(t, body_s)
def b(t): return Paragraph(f"• {t}", bullet_s)
def nb(n,t):return Paragraph(f"{n}. {t}", nbullet_s)
def sp(h=6):return Spacer(1, h)
def hr(): return HRFlowable(width="100%", thickness=0.5,
color=colors.HexColor("#bbdefb"), spaceAfter=3, spaceBefore=3)
def tbl(headers, rows, widths=None):
if not widths:
widths = [doc.width/len(headers)]*len(headers)
ths = ParagraphStyle("TH",parent=styles["Normal"],fontSize=9,
textColor=colors.white,fontName="Helvetica-Bold",alignment=TA_CENTER)
tds = ParagraphStyle("TD",parent=styles["Normal"],fontSize=9,
textColor=DARK_TEXT,fontName="Helvetica",alignment=TA_LEFT,leading=12)
data = [[Paragraph(h,ths) for h in headers]]
for row in rows:
data.append([Paragraph(c,tds) for c in row])
t = Table(data, colWidths=widths)
t.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,0),TABLE_HDR),
("GRID",(0,0),(-1,-1),0.4,colors.HexColor("#90caf9")),
("VALIGN",(0,0),(-1,-1),"TOP"),
("TOPPADDING",(0,0),(-1,-1),4),("BOTTOMPADDING",(0,0),(-1,-1),4),
("LEFTPADDING",(0,0),(-1,-1),5),("RIGHTPADDING",(0,0),(-1,-1),5),
("ROWBACKGROUNDS",(0,1),(-1,-1),[TABLE_ROW1,colors.white]),
]))
return t
def quote_box(text):
qp = Paragraph(f"<i>\"{text}\"</i>",
ParagraphStyle("Q",parent=styles["Normal"],fontSize=9.5,
textColor=DARK_TEXT,fontName="Helvetica-Oblique",leading=13,alignment=TA_JUSTIFY))
t = Table([[qp]], colWidths=[doc.width-10])
t.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1),LIGHT_BLUE),
("LEFTPADDING",(0,0),(-1,-1),10),("RIGHTPADDING",(0,0),(-1,-1),10),
("TOPPADDING",(0,0),(-1,-1),7),("BOTTOMPADDING",(0,0),(-1,-1),7),
("BOX",(0,0),(-1,-1),1,ACCENT),
]))
return t
# ════════════════════════════════════════════════════════════════
story = []
# ── COVER ────────────────────────────────────────────────────────
cover = Table([
[Paragraph("PSM / FMT", cover_sub_s)],
[Paragraph("COMPLETE EXAM ANSWERS", cover_title_s)],
[Paragraph("PART 1 – Chapters 1 to 12", cover_sub_s)],
[sp(10)],
[Paragraph("RGUHS University Examination", cover_info_s)],
[Paragraph("Preventive & Social Medicine | Forensic Medicine & Toxicology", cover_info_s)],
[sp(8)],
[Paragraph("Based on: Park's Textbook of Preventive and Social Medicine", cover_info_s)],
[Paragraph("Marks-based model answers for all questions", cover_info_s)],
], colWidths=[doc.width])
cover.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1),DARK_BLUE),
("TOPPADDING",(0,0),(-1,-1),16),("BOTTOMPADDING",(0,0),(-1,-1),16),
("LEFTPADDING",(0,0),(-1,-1),20),("RIGHTPADDING",(0,0),(-1,-1),20),
("BOX",(0,0),(-1,-1),3,GOLD),
("LINEBELOW",(0,2),(-1,2),1.5,GOLD),
]))
story += [cover, sp(20),
p("This booklet covers Chapters 1–12 of the RGUHS Community Medicine / PSM curriculum. "
"All answers are written at the appropriate depth for university examinations, "
"with 10-mark, 5-mark and 3-mark questions answered accordingly."),
PageBreak()]
# ════════════════════════════════════════════════════════════════
# CH 1 – MAN & MEDICINE
# ════════════════════════════════════════════════════════════════
story += [ch_box(1,"Man & Medicine Towards Health For All","#I"), sp(8)]
story += [q_box("I","Contributions of Louis Pasteur to Community Medicine","3"), sp(6)]
story += [sec("LOUIS PASTEUR (1822–1895) – CONTRIBUTIONS")]
contribs = [
("Germ Theory of Disease",
"Pasteur proved that fermentation and putrefaction are caused by living microorganisms "
"(not spontaneous generation). This became the foundation of the Germ Theory – the "
"concept that specific microbes cause specific diseases."),
("Pasteurization",
"Developed the process of heating liquids to a specific temperature to kill pathogenic "
"organisms without destroying the liquid. Pasteurization of milk is now a cornerstone of food hygiene."),
("Vaccines",
"Developed vaccines for chicken cholera (1880), anthrax (1881) and rabies (1885). "
"Demonstrated the principle of attenuation – using weakened organisms to confer immunity."),
("Anthrax Vaccine (1881)",
"Publicly demonstrated protection of sheep from anthrax at Pouilly-le-Fort – one of the "
"first public demonstrations of a vaccine."),
("Rabies Vaccine (1885)",
"First human use of the rabies vaccine on Joseph Meister, a 9-year-old boy bitten by a rabid dog – successfully prevented rabies."),
("Aseptic Techniques",
"His work led to the adoption of sterilization and aseptic techniques in surgery (applied "
"by Joseph Lister – Listerism / antiseptic surgery)."),
("Microbiology as a discipline",
"Established microbiology as a distinct scientific discipline; paved the way for Koch's postulates and modern bacteriology."),
]
for title, desc in contribs:
story += [KeepTogether([sub(title), p(desc)]), sp(2)]
story.append(PageBreak())
# ════════════════════════════════════════════════════════════════
# CH 2 – CONCEPT OF HEALTH & DISEASE
# ════════════════════════════════════════════════════════════════
story += [ch_box(2,"Concept of Health & Disease","#I"), sp(8)]
story += [q_box("I","Define Health & Discuss Determinants of Health","10"), sp(6)]
story += [sec("DEFINITION OF HEALTH")]
story += [p("The WHO (1948) definition: <b>\"Health is a state of complete physical, mental and social "
"well-being and not merely the absence of disease or infirmity.\"</b>")]
story += [p("The WHO (1984) revised definition added: <b>\"Health is the extent to which an individual "
"or group is able to realise aspirations and satisfy needs, and to change or cope with the "
"environment.\"</b> Health is a resource for everyday life, not the objective of living.")]
story += [hr(), sec("DETERMINANTS OF HEALTH")]
story += [p("Health is determined by multiple factors:")]
dets = [
("1. Biological / Genetic Factors", "Age, sex, heredity, genetic constitution. E.g., sickle cell disease, cystic fibrosis. Congenital defects and inherited metabolic disorders."),
("2. Behavioural / Lifestyle Factors", "Smoking, alcohol, physical activity, dietary habits, sexual behaviour. These are modifiable risk factors for NCDs (heart disease, cancer, diabetes)."),
("3. Socioeconomic Factors", "Poverty, education, occupation, income, social class. Lower socioeconomic status = poor health outcomes. Alma-Ata (1978) recognized poverty as the greatest threat to health."),
("4. Environmental Factors", "Physical: air, water, soil pollution, climate, radiation. Biological: vectors, microorganisms. Social: housing, sanitation, workplace."),
("5. Health Services", "Availability, accessibility, acceptability and affordability of health services. Preventive, promotive, curative and rehabilitative services."),
("6. Social Support / Community", "Social networks, family support, community cohesion – strong social support improves health outcomes."),
("7. Cultural & Spiritual Factors", "Religious beliefs, cultural practices, traditional medicine use – can positively or negatively affect health-seeking behaviour."),
("8. Nutrition", "Adequate nutrition is essential for growth, immunity and disease resistance. Malnutrition is both a cause and consequence of ill health."),
("9. Political / Policy Factors", "Government policies on health, education, employment, environment directly influence population health."),
]
for title, desc in dets:
story += [sub(title), p(desc)]
story.append(hr())
story += [q_box("II","Natural History of Disease"), sp(6)]
story += [sec("NATURAL HISTORY OF DISEASE")]
story += [p("The natural history of disease is the <b>course of a disease from its inception to its resolution</b> "
"without any medical intervention. It has two periods:")]
story += [sub("1. Pre-pathogenesis Period (Stage of Susceptibility)")]
story += [p("The disease process has not yet begun in the host. The individual is exposed to risk factors "
"(agent, host and environment interact). Health promotion and specific protection are effective at this stage.")]
story += [sub("2. Pathogenesis Period")]
story += [b("<b>Early pathogenesis</b>: Subclinical disease; tissue changes occur but no symptoms. Screening detects disease here."),
b("<b>Discernible early disease</b>: Symptoms begin; early diagnosis and treatment can prevent complications."),
b("<b>Advanced disease</b>: Disability, serious complications. Treatment aims to limit disability."),
b("<b>Convalescence / Recovery / Death</b>: End stages.")]
story += [hr()]
story += [q_box("III","Levels of Prevention & Modes of Intervention – Apply to CHD/PEM"), sp(6)]
story += [sec("LEVELS OF PREVENTION (Leavell & Clark)")]
story += [tbl(
["Level","When Applied","Goal","Examples (CHD / PEM)"],
[
["<b>Primordial Prevention</b>","Before risk factors emerge","Prevent emergence of risk factors","Healthy eating campaigns; preventing obesity from childhood"],
["<b>Primary Prevention</b>","Pre-pathogenesis: risk factors present","Prevent disease onset","Health promotion: diet, exercise; Immunization; reduce salt/fat intake (CHD); nutrition programmes (PEM)"],
["<b>Secondary Prevention</b>","Early pathogenesis: subclinical","Early detection & treatment","Screening for hypertension, hyperlipidaemia (CHD); growth monitoring, MUAC measurement (PEM)"],
["<b>Tertiary Prevention</b>","Advanced disease","Limit disability, rehabilitation","Cardiac rehabilitation (CHD); nutritional rehabilitation centres (PEM)"],
],
widths=[3.5*cm,3.5*cm,3.5*cm,5.5*cm]
)]
story.append(hr())
story += [q_box("IV","Tridosha Theory","5"), sp(6)]
story += [sec("TRIDOSHA THEORY (Ayurveda)")]
story += [p("The Tridosha theory is the fundamental concept of Ayurvedic medicine. It states that the "
"human body is governed by three biological principles (doshas):")]
story += [
sub("1. Vata (Vayu) – Air/Space"),
p("Controls movement, circulation, nerve impulses, breathing. Governs all bodily functions related to movement."),
sub("2. Pitta (Fire/Water)"),
p("Controls metabolism, digestion, intelligence, body temperature. Governs transformation processes."),
sub("3. Kapha (Water/Earth)"),
p("Controls structure, lubrication, growth, immunity. Governs cohesion and stability."),
p("<b>Health</b> = equilibrium of all three doshas. <b>Disease</b> = imbalance (increase or decrease) of one or more doshas. "
"Treatment aims to restore balance through diet, herbs, yoga, panchakarma. This is a holistic approach addressing "
"mind-body-spirit."),
]
story.append(hr())
story += [q_box("XII","Epidemiological Triad with Examples"), sp(6)]
story += [sec("EPIDEMIOLOGICAL TRIAD")]
story += [p("The epidemiological triad consists of three components: <b>Agent, Host and Environment</b>. "
"Disease occurs when there is an imbalance among these three components.")]
story += [sub("1. Agent"), p("The causative factor: Biological (bacteria, viruses), chemical (toxins, drugs), "
"physical (radiation, heat), nutritional deficiency. Must be present in sufficient dose.")]
story += [sub("2. Host"), p("The susceptible individual: Age, sex, immunity, nutrition, genetics, behaviour all "
"determine susceptibility. A susceptible host is required for disease to occur.")]
story += [sub("3. Environment"), p("Physical (climate, geography), biological (vectors, reservoirs), socioeconomic "
"(housing, sanitation) environments influence disease occurrence.")]
story += [p("<b>Examples:</b> Tuberculosis: Agent = M. tuberculosis; Host = immunocompromised; "
"Environment = overcrowded housing. Malaria: Agent = Plasmodium; Host = non-immune; "
"Environment = stagnant water for vector breeding.")]
story.append(hr())
story += [q_box("XIII","Web of Causation"), sp(6)]
story += [p("The <b>web of causation</b> (MacMahon and Pugh, 1970) recognizes that disease is rarely "
"due to a single cause. Multiple factors interact in a complex web to produce disease. "
"E.g., for CHD: genetic predisposition + smoking + hypertension + obesity + sedentary "
"lifestyle + stress + diet all interact. Identifying any strand in the web provides an "
"opportunity for prevention.")]
story.append(hr())
story += [q_box("XV","Iceberg Phenomenon of Disease"), sp(6)]
story += [p("The <b>Iceberg phenomenon</b> states that visible (diagnosed, clinical) disease represents "
"only the 'tip of the iceberg.' Below the surface lies a large reservoir of subclinical, "
"undiagnosed and mild cases. Importance: the submerged cases continue to spread infection "
"(carriers), represent unmet need, and are detected only by screening. Examples: "
"TB, diabetes, hypertension, HIV, hepatitis B.")]
story += [q_box("XVIII","PQLI","3"), sp(6)]
story += [p("<b>Physical Quality of Life Index (PQLI)</b> was developed by Morris David Morris (1979). "
"It is a composite index of three indicators:")]
story += [nb(1,"<b>Infant Mortality Rate (IMR)</b>"),
nb(2,"<b>Life Expectancy at Age 1</b>"),
nb(3,"<b>Basic Literacy Rate</b>")]
story += [p("Each is scaled 0–100 and the PQLI = arithmetic mean of the three. "
"<b>PQLI = 0 means worst performance; PQLI = 100 means best performance.</b> "
"It is a simple, comparable tool for assessing basic human needs across countries. "
"It does not measure income (unlike GDP).")]
story.append(PageBreak())
# ════════════════════════════════════════════════════════════════
# CH 3 – EPIDEMIOLOGICAL METHODS
# ════════════════════════════════════════════════════════════════
story += [ch_box(3,"Epidemiological Methods","#I"), sp(8)]
story += [q_box("I","Define Epidemiology | Classify Epidemiological Methods | Cohort Study – Advantages & Disadvantages","10"), sp(6)]
story += [sec("DEFINITION OF EPIDEMIOLOGY")]
story += [quote_box("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 (2001)")]
story += [hr(), sec("CLASSIFICATION OF EPIDEMIOLOGICAL METHODS")]
story += [sub("A. Observational Studies")]
story += [b("<b>Descriptive studies</b>: Describe distribution of disease by Person, Place and Time. No hypothesis testing. Types: case reports, case series, ecological studies, cross-sectional studies."),
b("<b>Analytical studies</b>: Test hypotheses about cause-effect relationships.")]
story += [tbl(
["Study Type","Design","Measure","Key Feature"],
[
["Cross-sectional","One point in time","Prevalence","Quick, cheap; no causality"],
["Case-Control","Backward (cases vs controls)","Odds Ratio","Good for rare diseases"],
["Cohort","Forward (exposed vs unexposed)","Relative Risk / Incidence","Best for causality; expensive"],
],
widths=[3.5*cm,4*cm,3.5*cm,5*cm]
)]
story += [sub("B. Experimental (Interventional) Studies")]
story += [b("Randomized Controlled Trial (RCT) – gold standard"),
b("Field trials – on healthy subjects at risk"),
b("Community trials – on communities")]
story += [hr(), sec("COHORT STUDY")]
story += [p("A <b>cohort study</b> (prospective study / longitudinal study / follow-up study) follows a group of "
"exposed individuals and a comparable unexposed group forward in time to compare disease incidence.")]
story += [sub("Steps in a Cohort Study")]
for n,step in enumerate(["Define study population and exposure","Select exposed and unexposed cohorts",
"Baseline data collection","Follow-up over time","Compare disease incidence in both groups",
"Calculate Relative Risk (RR) = Incidence in exposed / Incidence in unexposed"],1):
story.append(nb(n,step))
story += [sub("Advantages")]
for a in ["Establishes temporal relationship (exposure before disease) – best evidence for causality",
"Calculates incidence rates and Relative Risk directly",
"Can study multiple outcomes of a single exposure",
"No recall bias (data collected prospectively)",
"Good for studying rare exposures"]: story.append(b(a))
story += [sub("Disadvantages")]
for d in ["Expensive and time-consuming (may take years to decades)",
"Not suitable for rare diseases (need very large cohorts)",
"Loss to follow-up is a major problem",
"Change in exposure status over time (cohort effect)",
"Inefficient for diseases with long latency periods"]: story.append(b(d))
story.append(hr())
story += [q_box("III","Types of Epidemic | Epidemic Curves | Investigation of Epidemic"), sp(6)]
story += [sec("DEFINITIONS")]
story += [b("<b>Endemic</b>: Constant presence of disease in a geographic area at an expected level. E.g., malaria in certain Indian states."),
b("<b>Epidemic</b>: Occurrence of disease in excess of normal expectancy in a defined area over a specified period."),
b("<b>Pandemic</b>: Worldwide epidemic affecting multiple countries/continents. E.g., COVID-19, influenza 1918.")]
story += [sec("TYPES OF EPIDEMIC")]
story += [sub("1. Common Source Epidemic")]
story += [p("Single source of infection; sharp rise and fall. <b>Point source</b>: all exposed at same time "
"(e.g., food poisoning at a party). <b>Continuous common source</b>: prolonged exposure "
"(e.g., contaminated water supply).")]
story += [sub("2. Propagated (Host-to-Host) Epidemic")]
story += [p("Disease spreads from person to person. Gradual rise, multiple peaks. "
"E.g., measles, chickenpox in a school.")]
story += [sec("STEPS IN INVESTIGATION OF AN EPIDEMIC")]
for n,step in enumerate(["Confirm existence of epidemic (verify diagnosis and excess cases)",
"Define the population at risk",
"Verify the diagnosis (clinical, laboratory)",
"Describe by Person, Place and Time – develop epidemic curve",
"Formulate hypothesis about source and mode of spread",
"Test hypothesis (analytical study – case-control or cohort)",
"Implement control measures",
"Evaluate effectiveness of control measures",
"Prepare and communicate report"],1):
story.append(nb(n,step))
story.append(hr())
story += [q_box("IV","Case-Control Study – Details, Odds Ratio, Advantages & Disadvantages"), sp(6)]
story += [p("A <b>case-control study</b> selects <b>cases</b> (persons with disease) and <b>controls</b> "
"(persons without disease) and compares past exposures between the two groups. It works "
"<b>backwards from effect to cause</b>.")]
story += [sub("Odds Ratio (OR)")]
story += [p("The measure of association in case-control studies. OR = (a×d) / (b×c) where a = exposed cases, "
"b = exposed controls, c = unexposed cases, d = unexposed controls.")]
story += [b("OR = 1: No association"), b("OR > 1: Positive association (risk factor)"), b("OR < 1: Negative association (protective factor)")]
story += [sub("Advantages")]
for a in ["Ideal for rare diseases","Quick and inexpensive","Requires fewer subjects than cohort",
"Can study multiple exposures for one disease","No loss to follow-up problem"]: story.append(b(a))
story += [sub("Disadvantages")]
for d in ["Cannot calculate incidence or RR directly","Susceptible to recall bias and selection bias",
"Cannot establish temporal relationship definitively","Not suitable for rare exposures"]: story.append(b(d))
story.append(hr())
story += [q_box("VIII","Primary Immunization","5"), sp(6)]
story += [sec("NATIONAL IMMUNIZATION SCHEDULE (NIS) – INDIA")]
story += [tbl(
["Age","Vaccines Given"],
[
["At birth","BCG, OPV 0, Hepatitis B 1"],
["6 weeks","OPV 1, Pentavalent 1 (DPT+HepB+Hib), IPV 1, Rotavirus 1, PCV 1"],
["10 weeks","OPV 2, Pentavalent 2, IPV 2, Rotavirus 2, PCV 2"],
["14 weeks","OPV 3, Pentavalent 3, IPV 3, Rotavirus 3, PCV 3"],
["9 months","MR 1, Vitamin A (1st dose), JE 1"],
["16-24 months","MR 2, DPT Booster 1, OPV Booster, JE 2, Vitamin A (2nd–9th doses 6-monthly)"],
["5-6 years","DPT Booster 2"],
["10 & 16 years","TT"],
["Pregnant women","TT 1 & TT 2 (or booster)"],
],
widths=[4*cm,12*cm]
)]
story.append(hr())
story += [q_box("XIII","Define Prevalence & Incidence | Differences"), sp(6)]
story += [tbl(
["Feature","Prevalence","Incidence"],
[
["Definition","All existing cases (old + new) in population at a given time","New cases occurring in disease-free population over time period"],
["Formula","Prevalence = (Total cases / Total population) × 1000","Incidence = (New cases / Population at risk) × 1000"],
["Type of rate","Point prevalence (at a point) or Period prevalence","Incidence rate (attack rate for epidemics)"],
["Best used for","Chronic diseases (DM, TB, HTN)","Acute diseases, causal research"],
["Relationship","Prevalence ≈ Incidence × Duration of disease","–"],
],
widths=[4*cm,6*cm,6*cm]
)]
story.append(hr())
story += [q_box("XVI","Relative Risk, Attributable Risk & Population Attributable Risk"), sp(6)]
story += [p("<b>Relative Risk (RR)</b> = Incidence in exposed / Incidence in unexposed. "
"Measures strength of association. RR > 1 = risk factor; RR < 1 = protective.")]
story += [p("<b>Attributable Risk (AR)</b> = Incidence in exposed − Incidence in unexposed. "
"Measures absolute excess risk due to exposure. Useful for individual risk assessment.")]
story += [p("<b>Population Attributable Risk (PAR)</b> = Incidence in total population − Incidence in unexposed. "
"Measures how much of the disease burden in the whole population is due to the exposure. "
"Key for public health policy decisions.")]
story += [q_box("XXIII","National Immunization Schedule"), sp(4)]
story += [p("(See Q.VIII above for the complete NIS table.)")]
story += [q_box("XXXI","Herd Immunity"), sp(4)]
story += [p("<b>Herd immunity</b> is the indirect protection of susceptible individuals from infection "
"when a sufficiently large proportion of the population is immune. When herd immunity "
"threshold is reached, transmission chains are broken. "
"Threshold = 1 – 1/R₀ (where R₀ = basic reproduction number). "
"Examples: Measles requires ~95% vaccination coverage; polio ~80–85%; COVID-19 ~70%.")]
story.append(PageBreak())
# ════════════════════════════════════════════════════════════════
# CH 4 – SCREENING
# ════════════════════════════════════════════════════════════════
story += [ch_box(4,"Screening for Disease","#I"), sp(8)]
story += [q_box("I","Differentiate Screening and Diagnostic Test","5"), sp(6)]
story += [tbl(
["Feature","Screening Test","Diagnostic Test"],
[
["Purpose","Identify presumptive cases in apparently healthy population","Confirm or rule out disease in symptomatic individuals"],
["Population","Applied to large populations (mass screening)","Applied to individuals with symptoms/signs"],
["Cost","Inexpensive","More expensive"],
["Complexity","Simple, rapid, easy to perform","Complex, requires expertise"],
["Accuracy","High sensitivity (few false negatives)","High specificity (few false positives)"],
["Follow-up","Positive result → further diagnostic testing","Positive result → start treatment"],
["Examples","Pap smear, BP measurement, blood glucose strip","Colposcopy + biopsy, oral glucose tolerance test"],
],
widths=[3.5*cm,6.5*cm,6*cm]
)]
story += [sp(6), q_box("III","Sensitivity and Specificity"), sp(6)]
story += [p("<b>Sensitivity</b> = True positives / (True positives + False negatives) × 100. "
"Ability of a test to correctly identify those WITH disease. A highly sensitive test has few false negatives. "
"Used for <b>screening</b> (don't miss cases).")]
story += [p("<b>Specificity</b> = True negatives / (True negatives + False positives) × 100. "
"Ability to correctly identify those WITHOUT disease. A highly specific test has few false positives. "
"Used for <b>confirmation/diagnosis</b>.")]
story += [p("<b>Positive Predictive Value (PPV)</b>: Probability that a positive test truly has disease. "
"Increases with higher disease prevalence.")]
story += [p("<b>Negative Predictive Value (NPV)</b>: Probability that a negative test truly does not have disease.")]
story.append(PageBreak())
# ════════════════════════════════════════════════════════════════
# CH 5 – COMMUNICABLE DISEASES
# ════════════════════════════════════════════════════════════════
story += [ch_box(5,"Epidemiology of Communicable Diseases","#II"), sp(8)]
story += [q_box("Measles","Epidemiology, Clinical Features, Complications & Prevention of Measles | Note on MR Vaccine","10"), sp(6)]
story += [sec("MEASLES")]
story += [sub("Epidemiology")]
story += [b("Agent: Measles virus (Paramyxovirus, RNA virus); single serotype"),
b("Source: Infected human (only reservoir); most infectious 1–2 days before rash"),
b("Transmission: Airborne droplets; most contagious of all vaccine-preventable diseases"),
b("Incubation period: 10–14 days (range 7–21 days)"),
b("Secondary attack rate: 90%+ in susceptible household contacts"),
b("Infants protected by maternal antibodies for 6–9 months")]
story += [sub("Clinical Features")]
story += [b("Prodrome (3 Cs): Coryza, Cough, Conjunctivitis + fever"),
b("Koplik's spots: Pathognomonic whitish spots on buccal mucosa (2–3 days before rash)"),
b("Rash: Maculopapular, starts behind ears/hairline → spreads downward; lasts 4–6 days"),
b("Fever subsides as rash fades")]
story += [sub("Complications")]
story += [b("Pneumonia (most common cause of death)"),
b("Diarrhoea and dehydration"),
b("Otitis media"),
b("Croup (laryngitis)"),
b("Encephalitis (1 in 1000 cases)"),
b("Sub-acute Sclerosing Pan-Encephalitis (SSPE) – rare, fatal, years later"),
b("Vitamin A deficiency and blindness (in malnourished children)")]
story += [sub("Prevention & Control")]
story += [nb(1,"MR/MMR Vaccine (Measles-Rubella): Live attenuated vaccine; given at 9 months (MR1) and 16–24 months (MR2) under NIS"),
nb(2,"Cold chain maintenance (2–8°C)"),
nb(3,"Case isolation for 5 days after rash onset"),
nb(4,"Vitamin A supplementation to all cases in developing countries"),
nb(5,"Herd immunity threshold: ~95% vaccination coverage required"),
nb(6,"Outbreak response immunisation (ORI) when cases cluster")]
story += [sub("Note on MR Vaccine")]
story += [p("Measles-Rubella (MR) vaccine is a combined live attenuated vaccine introduced in India's NIS. "
"It replaced the standalone measles vaccine. Protects against both measles and rubella "
"(important for prevention of Congenital Rubella Syndrome). Given SC at 9 months and 16–24 months. "
"India conducted a national MR campaign in 2017–2019 targeting 410 million children aged 9 months to 15 years.")]
story.append(hr())
story += [q_box("TB","Problem of TB | Epidemiology | Diagnosis | DOTS | RNTCP / NTEP","10"), sp(6)]
story += [sec("TUBERCULOSIS (TB)")]
story += [sub("Epidemiology")]
story += [b("India has the world's highest TB burden (~26% of global TB cases)"),
b("Agent: Mycobacterium tuberculosis (Koch's bacillus); acid-fast bacillus"),
b("Source: Open/sputum-positive pulmonary TB cases"),
b("Transmission: Airborne droplet nuclei (inhalation)"),
b("Incubation period: 4–12 weeks to primary infection; years to reactivation"),
b("Annual Risk of Infection (ARI): Key epidemiological index in India")]
story += [sub("Important Epidemiological Indices")]
story += [nb(1,"Annual Risk of Infection (ARI): % of population infected per year"),
nb(2,"Prevalence of infection: % positive by tuberculin test"),
nb(3,"Prevalence of disease: Cases per 100,000 population"),
nb(4,"Incidence rate: New cases per 100,000/year"),
nb(5,"Case Notification Rate (CNR)"),
nb(6,"Treatment Success Rate (TSR): Target >90%")]
story += [sub("DOTS (Directly Observed Treatment Short-course) – Components")]
for n,comp in enumerate(["Political and administrative commitment",
"Diagnosis by quality sputum smear microscopy",
"Regular uninterrupted supply of drugs",
"Directly Observed Treatment (patient takes drugs under direct observation)",
"Systematic monitoring and accountability"],1):
story.append(nb(n,comp))
story += [sub("Drug Regimen (RNTCP / NTEP)")]
story += [p("<b>New cases</b>: 2HRZE / 4HRE (2 months intensive: INH + Rifampicin + PZA + Ethambutol; "
"4 months continuation: INH + Rifampicin + Ethambutol). Now moved to <b>daily regimen</b> under NTEP.")]
story += [p("<b>Previously treated</b>: Category II or MDR-TB regimen based on DST.")]
story += [p("<b>MDR-TB</b>: Resistant to at least INH and Rifampicin → treated with fluoroquinolones + injectable agents for 18–24 months.")]
story += [sub("End TB Strategy (WHO 2015–2030)")]
story += [nb(1,"Integrated, patient-centred TB care and prevention"),
nb(2,"Bold policies and supportive systems"),
nb(3,"Intensified research and innovation")]
story += [p("Target: 90% reduction in TB deaths and 80% reduction in TB incidence by 2030 vs 2015 baseline.")]
story.append(hr())
story += [q_box("Polio","Strategies That Made India Polio-Free","10"), sp(6)]
story += [sec("POLIO ERADICATION IN INDIA")]
story += [p("India was declared <b>polio-free by the WHO on 27 March 2014</b> after 3 years without a wild poliovirus case "
"(last case reported 13 January 2011, Howrah, West Bengal).")]
story += [sub("Strategies Used")]
for n,s in enumerate([
"<b>Routine Immunization</b>: OPV given in NIS at birth (OPV 0), 6, 10, 14 weeks, and boosters. IPV added in 2015.",
"<b>Pulse Polio Immunization (PPI)</b>: National Immunization Days (NID) – all children under 5 given OPV regardless of vaccination status on specific days (usually January and February). Booth-based and house-to-house.",
"<b>Sub-National Immunization Days (SNID)</b>: High-risk districts (UP, Bihar) received additional rounds.",
"<b>Mop-up Operations</b>: Intensive door-to-door vaccination in areas around confirmed cases.",
"<b>AFP (Acute Flaccid Paralysis) Surveillance</b>: AFP rate ≥2/100,000 under-15 is the sensitivity indicator. All AFP cases investigated and stool samples sent for virus isolation.",
"<b>IPV introduction (2015)</b>: Injectable inactivated polio vaccine added to routine schedule to boost intestinal immunity.",
"<b>Switch from tOPV to bOPV (2016)</b>: Removed type 2 OPV component to prevent vaccine-derived poliovirus type 2.",
"<b>Social mobilization</b>: Celebrity ambassadors, community leaders engaged; special attention to migrant populations, nomads, religious minorities.",
"<b>Political commitment</b>: High-level government commitment; strong intersectoral collaboration.",
],1): story.append(nb(n,s))
story.append(hr())
story += [q_box("Dengue","Epidemiology & WHO Classification of Dengue | Dengue Shock Syndrome","10"), sp(6)]
story += [sec("DENGUE")]
story += [sub("Epidemiology")]
story += [b("Agent: Dengue virus (Flavivirus); 4 serotypes (DENV 1-4)"),
b("Vector: Aedes aegypti (primary); Aedes albopictus (secondary)"),
b("Transmission: Bite of infected female Aedes mosquito"),
b("Aedes breeds in clean water containers (tyres, flower pots, coolers) – peridomestic"),
b("Incubation period: 3–14 days (average 4–7 days)"),
b("Stegomyia indices used to assess vector density: House Index, Container Index, Breteau Index")]
story += [sub("WHO Classification (2009)")]
story += [tbl(
["Category","Features"],
[
["Dengue without Warning Signs","Fever + 2 of: nausea/vomiting, rash, aches, +ve tourniquet test, leukopenia"],
["Dengue with Warning Signs","Abdominal pain, persistent vomiting, fluid accumulation, mucosal bleeding, lethargy, liver >2cm, rapid rise in HCT with rapid platelet fall"],
["Severe Dengue (DHF/DSS)","Severe plasma leakage (shock/pulmonary oedema), severe bleeding, severe organ impairment"],
],
widths=[4.5*cm,11.5*cm]
)]
story += [sub("Dengue Shock Syndrome (DSS)")]
story += [b("Defined by all criteria of DHF PLUS evidence of circulatory failure"),
b("Signs: Rapid/weak pulse, narrow pulse pressure (<20 mmHg) or hypotension, cold/clammy skin"),
b("Management: IV fluid resuscitation (crystalloids), monitoring, avoid aspirin/NSAIDs")]
story += [sub("Prevention & Control")]
story += [nb(1,"Vector control: Source reduction (eliminate breeding sites), larvicidal treatment (temephos), biological control (Bacillus thuringiensis israelensis)"),
nb(2,"Anti-adult measures: Indoor residual spraying, space spraying (fogging) during outbreaks"),
nb(3,"Personal protection: Repellents, protective clothing, bed nets"),
nb(4,"No specific treatment; supportive care; dengvaxia vaccine (limited use)")]
story.append(hr())
story += [q_box("Malaria","Epidemiology of Malaria | Prevention and Control"), sp(6)]
story += [sec("MALARIA")]
story += [sub("Epidemiology")]
story += [b("Agent: Plasmodium vivax (most common in India), P. falciparum (most dangerous), P. malariae, P. ovale"),
b("Vector: Female Anopheles mosquito (bites dusk to dawn; breeds in clean/slow-moving water)"),
b("Incubation: P. vivax 10–17 days; P. falciparum 7–14 days"),
b("Annual Parasite Index (API) = (Total positive blood smears/Year / Population) × 1000")]
story += [sub("Prevention & Control")]
for n,s in enumerate(["Indoor Residual Spraying (IRS) with DDT/malathion/synthetic pyrethroids",
"Long-Lasting Insecticidal Nets (LLIN) / Insecticide-Treated Nets (ITN)",
"Environmental management: Drainage of breeding sites, intermittent irrigation",
"Biological control: Gambusia/larvivorous fish, Bacillus thuringiensis",
"Personal protection: Repellents, protective clothing",
"Chemoprophylaxis for high-risk groups and travellers",
"Early diagnosis and prompt treatment (EDPT): Rapid Diagnostic Tests (RDTs)",
"NVBDCP (National Vector Borne Disease Control Programme) in India"],1):
story.append(nb(n,s))
story.append(hr())
story += [q_box("Rabies","Post-Exposure Prophylaxis in Rabies / Dog Bite | Anti-Rabies Vaccine","5"), sp(6)]
story += [sec("POST-EXPOSURE PROPHYLAXIS (PEP) IN RABIES")]
story += [sub("Wound Categories (WHO)")]
story += [tbl(
["Category","Type of Contact","Management"],
[
["Category I","Touching/feeding animals; licks on intact skin","Wash hands; No PEP"],
["Category II","Nibbling uncovered skin; minor scratches without bleeding","Wound care + Vaccine"],
["Category III","Single/multiple transdermal bites; scratches with bleeding; licks on mucosa/broken skin; bat exposure","Wound care + Vaccine + RIG"],
],
widths=[2.5*cm,5.5*cm,8*cm]
)]
story += [sub("Wound Management")]
story += [b("Immediately wash wound with soap and running water for 15 minutes"),
b("Apply povidone-iodine or 70% alcohol"),
b("Do NOT suture wound immediately"),
b("Tetanus prophylaxis if needed")]
story += [sub("Vaccination Schedule – ESSEN Regimen (5 doses IM)")]
story += [p("Days 0, 3, 7, 14, 28. Used with cell-culture vaccine (PCEC, PVRV, HDCV). "
"Intramuscular into deltoid (or anterolateral thigh in infants).")]
story += [sub("Rabies Immunoglobulin (RIG) – Category III only")]
story += [p("Human RIG (HRIG): 20 IU/kg body weight. As much as possible infiltrated around wound; remainder IM. "
"Equine RIG (ERIG): 40 IU/kg. Less expensive; skin test before use.")]
story.append(hr())
story += [q_box("Leprosy","Treatment Strategy – Multi-Drug Therapy (MDT) in Leprosy"), sp(6)]
story += [sec("MDT IN LEPROSY (WHO Regimen)")]
story += [tbl(
["Type","Drug Regimen","Duration"],
[
["Paucibacillary (PB) – 1-5 lesions","Monthly: Rifampicin 600mg (supervised) + Dapsone 100mg (unsupervised). Daily: Dapsone 100mg","6 months"],
["Multibacillary (MB) – >5 lesions","Monthly: Rifampicin 600mg + Clofazimine 300mg (supervised). Daily: Dapsone 100mg + Clofazimine 50mg","12 months"],
["PB – Children (<14 yrs)","Rifampicin 450mg + Dapsone 50mg monthly; Dapsone 50mg daily","6 months"],
["MB – Children","Rifampicin 450mg + Clofazimine 150mg monthly; Dapsone 50mg + Clofazimine 50mg daily","12 months"],
],
widths=[4.5*cm,9*cm,2.5*cm]
)]
story += [p("<b>Objectives of MDT</b>: (1) Cure the patient, (2) Prevent disability, "
"(3) Reduce transmission, (4) Prevent drug resistance, (5) Cut the chain of infection.")]
story.append(PageBreak())
# ════════════════════════════════════════════════════════════════
# CH 6 – NCD
# ════════════════════════════════════════════════════════════════
story += [ch_box(6,"Epidemiology of Chronic Non-Communicable Diseases","#II"), sp(8)]
story += [q_box("I","Epidemiology (Risk Factors) & Prevention of Coronary Heart Disease (CHD)","10"), sp(6)]
story += [sec("CORONARY HEART DISEASE (CHD)")]
story += [sub("Epidemiology / Risk Factors")]
story += [tbl(
["Category","Risk Factors"],
[
["Non-modifiable","Age (>45M, >55F), Male sex, Family history (genetic), Race/ethnicity"],
["Modifiable – Major","Hypertension, Hyperlipidaemia (high LDL, low HDL), Cigarette smoking, Diabetes mellitus, Obesity/Overweight"],
["Modifiable – Contributing","Physical inactivity, Stress/Type A personality, Oral contraceptives, Alcohol, Diet (high saturated fat/salt)"],
["Emerging/Biochemical","High homocysteine, CRP, fibrinogen, Lp(a), triglycerides"],
],
widths=[4.5*cm,11.5*cm]
)]
story += [sub("Prevention and Control")]
story += [p("<b>Primordial</b>: Prevent risk factor development; healthy lifestyle campaigns from childhood.")]
story += [p("<b>Primary</b>: Modify risk factors – stop smoking, control HTN/DM/hyperlipidaemia, increase "
"exercise, dietary changes (reduce saturated fat, increase fibre, DASH diet), weight reduction.")]
story += [p("<b>Secondary</b>: Early detection of high-risk individuals (screening for HTN, DM, lipids); "
"Aspirin, statins, ACE inhibitors in high-risk individuals.")]
story += [p("<b>Tertiary</b>: Cardiac rehabilitation, prevent recurrence, manage complications.")]
story.append(hr())
story += [q_box("II","Classify Diabetes Mellitus | Epidemiological Factors | Levels of Prevention"), sp(6)]
story += [sec("DIABETES MELLITUS")]
story += [sub("Classification (WHO / ADA)")]
story += [nb(1,"<b>Type 1 DM</b>: Autoimmune destruction of beta cells; insulin dependent; young onset; thin; prone to ketoacidosis"),
nb(2,"<b>Type 2 DM</b>: Insulin resistance + relative insulin deficiency; >90% of DM; associated with obesity and sedentary lifestyle"),
nb(3,"<b>Gestational DM (GDM)</b>: Glucose intolerance first detected in pregnancy"),
nb(4,"<b>Other specific types</b>: MODY, secondary DM (pancreatitis, Cushing's, haemochromatosis)")]
story += [sub("Epidemiological Determinants (India)")]
story += [b("Rapid urbanisation and sedentary lifestyle"),
b("High-carbohydrate, low-fibre diet; calorie-dense food"),
b("Genetic susceptibility (South Asians have higher risk at lower BMI)"),
b("Overweight and central obesity (waist-hip ratio)"),
b("Ageing population"),
b("Stress and mental health issues")]
story += [sub("Levels of Prevention")]
story += [b("<b>Primary</b>: Diet (reduce sugar/fat, increase fibre), physical activity ≥150 min/week, weight reduction, tobacco cessation"),
b("<b>Secondary</b>: Screening (fasting blood glucose, HbA1c) in at-risk groups; early diagnosis and treatment"),
b("<b>Tertiary</b>: Prevent complications – foot care, ophthalmology screening (retinopathy), nephrology (microalbuminuria), cardiovascular risk reduction")]
story.append(hr())
story += [q_box("III","Obesity – Causes, Assessment, Health Hazards, Prevention & Control"), sp(6)]
story += [sec("OBESITY")]
story += [p("<b>BMI Classification</b>: Underweight <18.5; Normal 18.5–24.9; Overweight 25–29.9; "
"Obese ≥30 kg/m². Asian cut-off: Overweight ≥23; Obese ≥27.5.")]
story += [sub("Causes (Epidemiological Determinants)")]
story += [b("Energy imbalance: Caloric intake > expenditure"),
b("Sedentary lifestyle: Television, computers, motorised transport"),
b("Dietary changes: Fast food, sugary drinks, processed food"),
b("Genetic predisposition: Monogenic (leptin deficiency, MC4R) and polygenic"),
b("Socioeconomic: Paradox – poor nutrition education; high-calorie cheap food"),
b("Medical: Hypothyroidism, Cushing's, PCOS, medications (steroids, antipsychotics)")]
story += [sub("Health Hazards")]
story += [b("Cardiovascular: CHD, hypertension, stroke, heart failure"),
b("Metabolic: Type 2 DM, metabolic syndrome, hyperlipidaemia"),
b("Musculoskeletal: Osteoarthritis (knee, hip), back pain"),
b("Respiratory: Obstructive sleep apnoea, obesity hypoventilation syndrome"),
b("Cancers: Breast, endometrium, colon, kidney, oesophagus"),
b("Psychosocial: Depression, low self-esteem, discrimination")]
story += [sub("Prevention & Control")]
for n,s in enumerate(["Dietary counselling: Balanced diet, caloric restriction, reduce sugars and saturated fat",
"Physical activity: ≥150 min moderate activity/week; reduce screen time",
"Behaviour modification: Self-monitoring, goal setting, cognitive behavioural therapy",
"Community-level: Healthy food labelling, taxes on sugary drinks, urban planning for walkability",
"Medical: Orlistat (lipase inhibitor) for pharmacotherapy",
"Surgical: Bariatric surgery for BMI >40 or >35 with comorbidities"],1):
story.append(nb(n,s))
story.append(hr())
story += [q_box("XI","Body Mass Index (BMI) – Calculation and Interpretation"), sp(6)]
story += [p("<b>BMI = Weight (kg) / Height² (m²)</b>")]
story += [tbl(
["BMI Range","Category"],
[["<18.5","Underweight"],["18.5–24.9","Normal weight"],["25–29.9","Overweight"],
["30–34.9","Obese – Class I"],["35–39.9","Obese – Class II"],["≥40","Obese – Class III (Morbid)"]],
widths=[5*cm,11*cm]
)]
story.append(PageBreak())
# ════════════════════════════════════════════════════════════════
# CH 7 – HEALTH PROGRAMMES
# ════════════════════════════════════════════════════════════════
story += [ch_box(7,"Health Programmes in India","#II"), sp(8)]
story += [q_box("I","NVBDCP – Vector Borne Diseases, Agents, Vectors & Activities","10"), sp(6)]
story += [sec("NATIONAL VECTOR BORNE DISEASE CONTROL PROGRAMME (NVBDCP)")]
story += [tbl(
["Disease","Agent","Vector"],
[["Malaria","Plasmodium sp.","Female Anopheles mosquito"],
["Dengue","Dengue virus (Flavivirus)","Aedes aegypti"],
["Chikungunya","Togavirus","Aedes aegypti, Ae. albopictus"],
["Japanese Encephalitis (JE)","Flavivirus","Culex tritaeniorhynchus"],
["Kala-azar (Visceral Leishmaniasis)","Leishmania donovani","Phlebotomus sandfly"],
["Lymphatic Filariasis","Wuchereria bancrofti","Culex quinquefasciatus"],
["Plague","Yersinia pestis","Xenopsylla cheopis (rat flea)"],
],
widths=[4.5*cm,5.5*cm,6*cm]
)]
story += [sub("NVBDCP Activities")]
for n,a in enumerate(["Integrated vector management (IVM)",
"Indoor residual spraying (IRS)",
"Mass Drug Administration (MDA) for filariasis (DEC + Albendazole annually)",
"Long-lasting insecticidal nets (LLINs)",
"Entomological surveillance (larval surveys, adult mosquito density)",
"Epidemiological surveillance and disease monitoring",
"JE vaccination programme in endemic districts",
"Kala-azar elimination programme (target: <1/10,000 population at block level)"],1):
story.append(nb(n,a))
story.append(hr())
story += [q_box("V","NRHM Objectives and Strategies | Job Responsibilities of ASHA"), sp(6)]
story += [sec("NATIONAL RURAL HEALTH MISSION (NRHM) – 2005")]
story += [sub("Objectives")]
story += [b("Reduce IMR, MMR and Total Fertility Rate"),
b("Revitalize local health traditions"),
b("Provide integrated and accountable delivery of health services"),
b("Decentralization to district and local body levels")]
story += [sub("ASHA – Accredited Social Health Activist")]
story += [p("<b>Selection criteria</b>: Female resident of village, aged 25–45, class 8 pass (relaxed in tribal areas), "
"willing volunteer. One ASHA per 1000 population.")]
story += [sub("Job Responsibilities of ASHA")]
for n,r in enumerate(["Create awareness on health; motivate community for healthy behaviours",
"Mobilise community for health services (immunization, antenatal care, institutional delivery)",
"Accompany women to health facilities for delivery and newborn care",
"Provide basic health care – ORS for diarrhoea, iron-folic acid for pregnant women, contraceptives",
"Facilitate implementation of JSSK, JSY (Janani Suraksha Yojana)",
"Maintain records and submit reports to ANM/PHC",
"First contact between community and health system"],1):
story.append(nb(n,r))
story.append(hr())
story += [q_box("IX","Vision 2020"), sp(4)]
story += [p("<b>VISION 2020 – The Right to Sight</b> is a global initiative launched in 1999 by WHO and IAPB "
"(International Agency for the Prevention of Blindness) to eliminate avoidable blindness by the year 2020. "
"Priority diseases: Cataract, trachoma, onchocerciasis, childhood blindness (Vitamin A deficiency), refractive errors, low vision. "
"In India: implemented through National Programme for Control of Blindness (NPCB).")]
story.append(PageBreak())
# ════════════════════════════════════════════════════════════════
# CH 8 – DEMOGRAPHY & FAMILY PLANNING
# ════════════════════════════════════════════════════════════════
story += [ch_box(8,"Demography and Family Planning","#I"), sp(8)]
story += [q_box("I","Cafeteria Approach – Advantages and Disadvantages","5"), sp(6)]
story += [sec("CAFETERIA APPROACH IN FAMILY PLANNING")]
story += [p("The <b>cafeteria approach</b> means offering a <b>wide variety of contraceptive methods</b> to "
"couples who can then <b>choose freely</b> based on their individual needs, preferences and "
"health status – like choosing items from a cafeteria menu.")]
story += [sub("Advantages")]
for a in ["Freedom of choice – respects individual autonomy and rights",
"Accepts diversity – different methods suit different age groups, parity, religion",
"Increases acceptance and continuation rates",
"Reduces coercion – couples not pressured into single methods",
"More effective overall – people use methods they are comfortable with",
"Allows switching between methods"]: story.append(b(a))
story += [sub("Disadvantages")]
for d in ["Requires well-trained counsellors to explain all options",
"Needs adequate supply chain for multiple contraceptive types",
"More complex to manage logistically",
"May be confusing for poorly educated couples without proper counselling",
"Higher initial cost of maintaining diverse inventory"]: story.append(b(d))
story.append(hr())
story += [q_box("II","Demographic Cycle and Its Stages"), sp(6)]
story += [sec("DEMOGRAPHIC CYCLE (Demographic Transition)")]
story += [tbl(
["Stage","Birth Rate","Death Rate","Growth Rate","Example"],
[["Stage 1 – High Stationary","High","High","Low/Zero","Pre-industrial societies"],
["Stage 2 – Early Expanding","High","Falling","Rising","Developing countries early phase"],
["Stage 3 – Late Expanding","Falling","Low","Still rising but slowing","India currently transitioning"],
["Stage 4 – Low Stationary","Low","Low","Zero/Stable","Developed countries (UK, France)"],
["Stage 5 – Declining","Very low","Slightly rising","Negative","Some European countries"],
],
widths=[3.5*cm,2.5*cm,2.5*cm,2.5*cm,5*cm]
)]
story.append(hr())
story += [q_box("VI","IUD – Ideal Candidate, Advantages, Contraindications & Side Effects"), sp(6)]
story += [sec("INTRAUTERINE DEVICE (IUD / IUCD)")]
story += [p("Types: Copper-T 380A (most used in India); Multiload Cu-375; LNG-IUS (Mirena).")]
story += [sub("Ideal Candidate")]
story += [b("Parous women in a stable, mutually monogamous relationship"),
b("Women who want long-term but reversible contraception"),
b("Women with contraindication to hormonal methods")]
story += [sub("Advantages")]
story += [b("Highly effective (failure rate <1%)"), b("Long-acting (10 years for Cu-T 380A)"),
b("Immediately reversible"), b("No systemic hormonal effects"),
b("Cost-effective; no daily compliance needed")]
story += [sub("Contraindications")]
story += [b("Pregnancy"), b("Undiagnosed vaginal bleeding"), b("Active PID or STI"),
b("Uterine abnormalities (fibroids distorting cavity)"), b("Cervical cancer")]
story += [sub("Side Effects")]
story += [b("Increased menstrual bleeding and dysmenorrhoea (copper IUDs)"),
b("Spotting between periods"),
b("Risk of PID if inserted in presence of STI"),
b("Expulsion (2–10% in first year)"),
b("Ectopic pregnancy risk if device fails")]
story.append(hr())
story += [q_box("VII","Hormonal Contraceptives – Classification, Mode of Action, Side Effects"), sp(6)]
story += [sec("HORMONAL CONTRACEPTIVES")]
story += [tbl(
["Type","Examples","Route"],
[["Combined OCP","Low-dose COC (Mala-D, Ovral-L)","Oral, daily"],
["Progestogen-only pill (POP/Mini-pill)","Norethisterone, LNG","Oral, daily"],
["Injectable","DMPA (Depo-Provera) 150mg/3 months; NET-EN 200mg/2 months","IM injection"],
["Implants","Implanon, Nexplanon (etonogestrel)","Subdural implant"],
["Emergency contraception","Levonorgestrel 1.5mg (i-pill)","Oral within 72 hrs"],
],
widths=[4.5*cm,5.5*cm,6*cm]
)]
story += [sub("Mode of Action (Combined OCP)")]
story += [nb(1,"Inhibit ovulation (primary mechanism) – suppress LH surge"),
nb(2,"Alter cervical mucus – thick, hostile to sperm"),
nb(3,"Change endometrium – unfavourable for implantation"),
nb(4,"Alter tubal motility")]
story += [sub("Contraindications (Absolute – WHOMEC Category 4)")]
story += [b("Pregnancy"), b("Breastfeeding <6 weeks postpartum"), b("Hypertension >160/100"),
b("Smoking + age >35"), b("History of thromboembolic disease"),
b("Liver disease, hepatic adenoma"), b("Migraine with aura"), b("Breast cancer")]
story.append(PageBreak())
# ════════════════════════════════════════════════════════════════
# CH 9 – PREVENTIVE OBG, PAEDS, GERIATRICS
# ════════════════════════════════════════════════════════════════
story += [ch_box(9,"Preventive Medicine – Obstetrics, Paediatrics & Geriatrics","#II"), sp(8)]
story += [q_box("I","Maternal Mortality Rate – Causes, Determinants, Preventive Measures","10"), sp(6)]
story += [sec("MATERNAL MORTALITY RATE (MMR)")]
story += [p("<b>MMR = (Maternal deaths / Live births) × 100,000</b>. India's MMR ~97/100,000 (SRS 2018–20). "
"Sustainable Development Goal target: <70/100,000 by 2030.")]
story += [sub("Definition: Maternal Death")]
story += [p("Death of a woman during pregnancy or within 42 days of termination of pregnancy, "
"irrespective of duration or site of pregnancy, from any cause related to or aggravated by "
"the pregnancy or its management.")]
story += [sub("Causes of Maternal Mortality (3 Delays Model)")]
story += [b("<b>Direct causes (80%)</b>: Haemorrhage (25%) – most common; Hypertensive disorders/eclampsia (12%); Sepsis/infection (15%); Unsafe abortion (13%); Obstructed labour (8%); Embolism (3%)"),
b("<b>Indirect causes (20%)</b>: Anaemia, cardiac disease, hepatitis, malaria")]
story += [sub("The 3 Delays")]
story += [nb(1,"Delay in deciding to seek care (socioeconomic, cultural barriers)"),
nb(2,"Delay in reaching health facility (transport, geography)"),
nb(3,"Delay in receiving adequate care at facility (lack of skill, supplies)")]
story += [sub("Preventive and Social Measures")]
for n,m in enumerate(["Universal ANC coverage: Minimum 4 ANC visits (WHO recommends 8)","Iron-folic acid supplementation throughout pregnancy",
"Institutional delivery (JSY, JSSK schemes) – safe childbirth in facilities",
"Skilled Birth Attendant (SBA) at every delivery",
"Emergency Obstetric Care (EmOC): signal functions available 24/7 at FRUs",
"Blood transfusion services at facilities",
"Safe abortion services under MTP Act",
"Magnesium sulphate for eclampsia; oxytocin for PPH prevention",
"Postnatal care within 48 hours",
"Female education and empowerment – women with secondary education have lower MMR"],1):
story.append(nb(n,m))
story.append(hr())
story += [q_box("IV","Specific Health Protection for Antenatal Cases","5"), sp(6)]
story += [sec("ANTENATAL CARE (ANC) – SPECIFIC HEALTH PROTECTION")]
story += [tbl(
["Intervention","Details"],
[
["Iron-Folic Acid (IFA)","100mg elemental iron + 0.5mg folic acid daily from 1st trimester; prevents anaemia and neural tube defects"],
["Tetanus Toxoid (TT)","TT1 and TT2 (4-week interval); provides protection against neonatal tetanus"],
["Calcium supplementation","1g elemental calcium/day from 20 weeks; prevents pre-eclampsia"],
["Malaria prophylaxis","Chloroquine in endemic areas; ITN use"],
["Iodine supplementation","Where iodine deficiency is prevalent"],
["Immunizations","Influenza vaccine; review other vaccines"],
["Screening","Anaemia (Hb), BP (hypertension/pre-eclampsia), blood group, Rh, glucose (GDM), HIV, syphilis, hepatitis B"],
["Diet & nutrition","Protein, calorie, micronutrient rich diet; weight gain monitoring"],
["Health education","Danger signs, birth preparedness, breastfeeding, family planning"],
],
widths=[4.5*cm,11.5*cm]
)]
story.append(hr())
story += [q_box("XVII","ICDS – Organisation, Beneficiaries, Package of Services"), sp(6)]
story += [sec("INTEGRATED CHILD DEVELOPMENT SERVICES (ICDS)")]
story += [p("Launched: <b>2 October 1975</b>. World's largest child development programme.")]
story += [sub("Beneficiaries")]
story += [b("Children 0–6 years"),b("Pregnant and lactating women"),b("Adolescent girls (in select states)")]
story += [sub("Package of 6 Services")]
story += [tbl(
["Service","Provider"],
[["Supplementary nutrition","Anganwadi Worker (AWW)"],
["Immunization","ANM (Auxiliary Nurse Midwife)"],
["Health check-up","ANM / MO (Medical Officer)"],
["Referral services","ANM / AWW"],
["Pre-school non-formal education (ECCE)","AWW"],
["Nutrition & health education","AWW"],
],
widths=[8*cm,8*cm]
)]
story += [p("<b>Anganwadi Centre</b>: Unit of delivery. One per 400–800 population. Operated by <b>Anganwadi Worker (AWW)</b> assisted by <b>Anganwadi Helper (AWH)</b>.")]
story.append(PageBreak())
# ════════════════════════════════════════════════════════════════
# CH 10 – HEALTHCARE OF COMMUNITY
# ════════════════════════════════════════════════════════════════
story += [ch_box(10,"Healthcare of the Community","#II"), sp(8)]
story += [q_box("I","Three-Tier Health Care Delivery System in India","10"), sp(6)]
story += [sec("THREE-TIER HEALTH CARE DELIVERY SYSTEM (Rural)")]
story += [tbl(
["Level","Facility","Population Covered","Staff / Functions"],
[
["Level 1 – Peripheral / Primary","Sub-centre (SC)","5,000 (plains); 3,000 (hilly/tribal)","1 ANM + 1 Male MPW; Immunization, FP, MCH, basic curative care"],
["Level 2 – Secondary / Primary","Primary Health Centre (PHC)","30,000 (plains); 20,000 (hilly)","1 Medical Officer + 14 paramedical staff; OPD, MCH, immunization, FP, labs, referral"],
["Level 3 – Referral","Community Health Centre (CHC) / First Referral Unit (FRU)","1,20,000 population (one per block)","4 specialists (surgeon, physician, OBG, paediatrician) + 21 paramedical; 30-bed hospital, EmOC, surgery"],
["Level 4 – District","District Hospital","District (10–30 lakh)","Specialist care, blood bank, 100–300+ beds"],
["Level 5 – Apex","Medical College / Tertiary Hospital","Region","Super-specialist care, research, teaching"],
],
widths=[2.5*cm,3*cm,3*cm,7.5*cm]
)]
story += [sub("IPHS Norms – PHC Staffing (IPHS 2012)")]
for n,s in enumerate(["1 Medical Officer (male or female)",
"1 Pharmacist","1 Nurse-Midwife (Staff Nurse)","1 Laboratory Technician",
"1 Health Educator","1 Block Extension Educator (BEE)",
"1 Statistical Assistant","1 Upper Division Clerk","2 Lower Division Clerks",
"1 Driver","4 Grade IV (Peons/Watchmen/Sweepers)"],1):
story.append(nb(n,s))
story.append(hr())
story += [q_box("III","Primary Health Care – Elements and Principles"), sp(6)]
story += [sec("PRIMARY HEALTH CARE (Alma-Ata Declaration, 1978)")]
story += [quote_box("Primary health care is essential health care based on practical, scientifically sound and "
"socially acceptable methods and technology made universally accessible to individuals and "
"families in the community through their full participation and at a cost that the community "
"and country can afford to maintain at every stage of their development – Alma-Ata, 1978")]
story += [sub("8 Essential Elements (SHEFANCE mnemonic)")]
for n,e in enumerate(["<b>Education</b> about health problems and methods of prevention/control",
"<b>Food and nutrition</b>: promotion of adequate food supply and proper nutrition",
"<b>Safe water</b> and basic sanitation",
"<b>MCH</b> services including family planning",
"<b>Immunization</b> against major infectious diseases",
"<b>Prevention and control</b> of locally endemic diseases",
"<b>Essential drugs</b> availability",
"<b>Treatment</b> of common diseases and injuries"],1):
story.append(nb(n,e))
story += [sub("Guiding Principles")]
story += [b("Equitable distribution"), b("Community participation"),
b("Intersectoral coordination"), b("Appropriate technology"),
b("Health for all by 2000 AD (now 2030 SDG)")]
story.append(PageBreak())
# ════════════════════════════════════════════════════════════════
# CH 11 – NUTRITION
# ════════════════════════════════════════════════════════════════
story += [ch_box(11,"Nutrition and Health","#I"), sp(8)]
story += [q_box("I","Micronutrients – Role & Diseases Due to Deficiency","10"), sp(6)]
story += [sec("MICRONUTRIENTS – VITAMINS AND MINERALS")]
story += [tbl(
["Micronutrient","Role","Deficiency Disease/Manifestation"],
[
["Vitamin A (Retinol)","Vision (rhodopsin), immunity, epithelial integrity, growth","Xerophthalmia (night blindness → Bitot's spots → keratomalacia → blindness); increased infection susceptibility"],
["Vitamin D (Calciferol)","Calcium & phosphorus absorption; bone mineralisation","Rickets (children), Osteomalacia (adults), hypocalcaemia"],
["Vitamin C (Ascorbic acid)","Collagen synthesis, antioxidant, iron absorption, immunity","Scurvy: bleeding gums, petechiae, corkscrew hair, perifollicular haemorrhage, poor wound healing"],
["Vitamin B1 (Thiamine)","Carbohydrate metabolism (pyruvate decarboxylation), nerve function","Beri-beri: Wet (cardiac) – oedema, cardiac failure; Dry (neurological) – peripheral neuropathy; Wernicke-Korsakoff"],
["Vitamin B2 (Riboflavin)","Energy metabolism (FAD), mucous membrane integrity","Ariboflavinosis: Angular stomatitis, cheilosis, corneal vascularisation, magenta tongue"],
["Niacin (B3)","NAD synthesis, energy metabolism","Pellagra: 4 Ds – Dermatitis (sun-exposed), Diarrhoea, Dementia, Death"],
["Folate (B9)","DNA synthesis, cell division","Megaloblastic anaemia; Neural tube defects (anencephaly, spina bifida) in foetus"],
["Vitamin B12","Myelin synthesis, DNA synthesis (with folate)","Megaloblastic anaemia, subacute combined degeneration of spinal cord"],
["Iron","Haemoglobin synthesis, enzyme function","Iron deficiency anaemia (IDA): pallor, fatigue, koilonychia, pica"],
["Iodine","Thyroid hormone synthesis","Iodine Deficiency Disorders (IDD): Goitre, cretinism (child), hypothyroidism, increased stillbirths"],
["Zinc","Enzyme function, immunity, wound healing, growth","Growth retardation, immune deficiency, acrodermatitis enteropathica"],
["Calcium","Bone/teeth structure, muscle contraction, nerve function","Rickets, osteoporosis, tetany"],
["Fluoride","Tooth enamel strength","Dental caries (deficiency); Dental/skeletal fluorosis (excess)"],
],
widths=[3*cm,4.5*cm,8.5*cm]
)]
story.append(hr())
story += [q_box("II","Protein Energy Malnutrition (PEM) – Ecology, Classification, Prevention","10"), sp(6)]
story += [sec("PROTEIN ENERGY MALNUTRITION (PEM)")]
story += [sub("Classification")]
story += [tbl(
["Classification","Criteria","Types"],
[
["Wellcome Classification","Weight-for-age % of standard + Oedema","Kwashiorkor: 60-80% + oedema; Marasmic-Kwashiorkor: <60% + oedema; Marasmus: <60%, no oedema; Underweight: 60-80%, no oedema"],
["IAP Classification (India)","% of expected weight for age","Grade I: 71-80%; Grade II: 61-70%; Grade III: 51-60%; Grade IV: <50% (SAM)"],
["WHO (MUAC)","Mid-upper arm circumference","SAM: MUAC <11.5cm; MAM: 11.5-12.5cm; Normal: >12.5cm"],
],
widths=[4*cm,5*cm,7*cm]
)]
story += [sub("Marasmus vs Kwashiorkor")]
story += [tbl(
["Feature","Marasmus","Kwashiorkor"],
[["Cause","Deficiency of BOTH calories and protein","Primarily protein deficiency with adequate calories"],
["Age","<2 years (infants)","2-3 years (older children)"],
["Weight","<60% of expected; severe wasting","60-80% (weight may appear normal due to oedema)"],
["Oedema","Absent","Present (pitting)"],
["Hair","Thin, sparse","Flag sign, depigmented, easily pluckable"],
["Skin","Baggy, loose, 'old man' appearance","Flaky paint dermatitis, hypopigmentation"],
["Mood","Alert, hungry, irritable","Apathetic, anorexic, miserable"],
["Liver","Normal","Fatty liver (hepatomegaly)"],
],
widths=[3.5*cm,6.5*cm,6*cm]
)]
story += [sub("Prevention and Control")]
for n,s in enumerate(["Promotion of exclusive breastfeeding for 6 months",
"Appropriate complementary feeding from 6 months",
"Nutritional supplementation programmes (ICDS, MDM, POSHAN Abhiyan)",
"Vitamin A supplementation (prevents synergistic PEM-infection cycle)",
"Deworming (eliminates intestinal worm load)",
"Oral rehydration therapy (ORT) for diarrhoea",
"Growth monitoring using Road to Health Card / z-score",
"Management of SAM: F-75 and F-100 therapeutic diets; RUTF (Ready-to-Use Therapeutic Food)",
"Poverty alleviation and food security programmes"],1):
story.append(nb(n,s))
story.append(hr())
story += [q_box("V","Pellagra"), sp(4)]
story += [p("<b>Pellagra</b> is caused by deficiency of <b>Niacin (Vitamin B3)</b> or its precursor amino acid tryptophan. "
"Classic triad: <b>4 Ds</b> – Dermatitis (bilateral symmetric on sun-exposed skin; Casal's necklace on neck), "
"Diarrhoea, Dementia, Death. Common in maize-eating populations (maize lacks tryptophan; niacin in bound form). "
"Treatment: Nicotinamide 300mg/day orally; high-protein diet.")]
story += [q_box("XI","Iodine Deficiency Disorders"), sp(4)]
story += [p("<b>Iodine Deficiency Disorders (IDD)</b> are a spectrum of conditions: goitre, cretinism, "
"hypothyroidism, increased spontaneous abortion/stillbirth, impaired mental development. "
"Prevention: Universal salt iodisation (USI) – all edible salt fortified with 15 ppm iodine at consumer level; "
"30 ppm at production. National Iodine Deficiency Disorders Control Programme (NIDDCP). "
"Assessment: median urinary iodine concentration (target 100–199 µg/L in school-age children).")]
story.append(PageBreak())
# ════════════════════════════════════════════════════════════════
# CH 12 – SOCIAL SCIENCES
# ════════════════════════════════════════════════════════════════
story += [ch_box(12,"Medicine and Social Sciences","#II"), sp(8)]
story += [q_box("I","Cultural Factors Influencing Health and Disease","10"), sp(6)]
story += [sec("CULTURAL FACTORS INFLUENCING HEALTH")]
story += [p("Culture is defined as the system of shared beliefs, values, customs, and behaviours that "
"a society uses to cope with the world. Cultural factors profoundly influence health behaviour, "
"disease patterns and healthcare utilization.")]
factors = [
("1. Food Habits and Taboos",
"Cultural dietary practices affect nutrition. Taboos prevent pregnant women and children from "
"eating nutritious foods (eggs, meat, fish). Vegetarianism may lead to B12/iron deficiency. "
"Festival food overconsumption causes obesity and metabolic disorders."),
("2. Health Beliefs and Practices",
"Belief in supernatural causation of disease (evil spirits, sins) delays medical care-seeking. "
"Traditional healing practices, use of herbs, spiritual rituals may delay evidence-based treatment."),
("3. Female Subordination",
"Low status of women in many cultures leads to poor nutrition, late antenatal care, "
"institutional delivery avoidance, female infanticide, early marriage – all contributing to high MMR/IMR."),
("4. Marriage and Family Customs",
"Consanguineous marriages (common in South India) increase risk of autosomal recessive genetic disorders. "
"Child marriage leads to early childbearing and its complications."),
("5. Personal Hygiene Practices",
"Cultural norms about hand-washing, defecation in open, bathing practices affect "
"transmission of diarrhoeal diseases, helminths, and skin infections."),
("6. Religious Practices",
"Ritual scarification, circumcision, tattooing can transmit bloodborne infections (HIV, HBV). "
"Some religious groups refuse blood transfusion (Jehovah's Witnesses). "
"However, religion also promotes hygiene (ablution before prayer in Islam)."),
("7. Attitude Toward Family Planning",
"Religious opposition to contraception; preference for male children leading to repeated pregnancies; "
"cultural value placed on large families – all affect fertility rates."),
("8. Sick Role and Healthcare Utilization",
"Cultural norms define who is 'sick' and when to seek medical care. "
"Stigma around mental illness, tuberculosis, HIV prevents care-seeking."),
("9. Substance Use",
"Cultural acceptance of alcohol (in certain castes/tribes), tobacco chewing, gutka use "
"increases morbidity from liver disease, cancers, cardiovascular disease."),
("10. Migration and Urbanisation",
"Cultural adjustment problems for migrants (acculturation stress); loss of traditional support systems. "
"Adoption of urban sedentary lifestyle increases NCD risk."),
]
for title, desc in factors:
story += [KeepTogether([sub(title), p(desc)])]
story.append(hr())
story += [q_box("II","Social Security | ESI Act 1948 Benefits"), sp(6)]
story += [sec("SOCIAL SECURITY")]
story += [p("<b>Social security</b> is a system that provides protection and financial assistance to individuals "
"and families against contingencies of life such as sickness, old age, disability, death, "
"maternity and unemployment.")]
story += [sub("ESI Act 1948 – 7 Benefits")]
for n,b_text in enumerate(["<b>Medical benefit</b>: Full medical care free of cost",
"<b>Sickness benefit</b>: Cash ~70% wages for up to 91 days/year",
"<b>Maternity benefit</b>: 26 weeks paid leave",
"<b>Disablement benefit</b>: Temporary or permanent pension",
"<b>Dependants' benefit</b>: Pension to family on death from work injury",
"<b>Funeral expenses</b>: Lump sum (Rs. 10,000)",
"<b>Unemployment allowance</b>: Rajiv Gandhi Shramik Kalyan Yojana"],1):
story.append(nb(n,b_text))
story.append(hr())
story += [q_box("VIII","Social Stratification – How Social Class Affects Health"), sp(6)]
story += [p("<b>Social stratification</b> is the hierarchical ranking of individuals in society based on "
"wealth, occupation, education and prestige. Major systems: Caste, Class, Estate, Slavery.")]
story += [p("Lower social class is associated with: Higher infant and maternal mortality; higher prevalence "
"of malnutrition, TB, diarrhoeal diseases; less access to health services; more exposure to "
"occupational hazards; lower health literacy; unhealthy behaviours (smoking, alcohol). "
"This is the <b>'inverse care law'</b> – those who need care most receive least.")]
story += [sp(20), hr(),
Paragraph("Part 1 | Chapters 1–12 | Source: Park's PSM | RGUHS Exam Answers", note_s)]
doc.build(story)
print(f"Part 1 PDF built: {OUTPUT}")
mkdir -p /tmp/workspace/psm-exam && cd /tmp/workspace/psm-exam && python3 generate_part1.py 2>&1
Why did uh generate
Didn’t
| Status | |
|---|---|
| Part 1 (Ch 1–12) | ✅ Generated |
| Part 2 (Ch 13–24) | ❌ Never generated |
Where is the pdf
ls -lh /tmp/workspace/psm-exam/ 2>&1
PSM Exam Answers Part1
PDF Document · PDF
Generate Part 2 PDF (Chapters 13-24) now
~/psm-exam/generate_part2.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, PageBreak, KeepTogether)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
OUTPUT = "/tmp/workspace/psm-exam/PSM_Exam_Answers_Part2.pdf"
doc = SimpleDocTemplate(OUTPUT, pagesize=A4,
rightMargin=2*cm, leftMargin=2*cm, topMargin=2.5*cm, bottomMargin=2.5*cm,
title="PSM Exam Answers Part 2", author="RGUHS PSM")
DARK_BLUE = colors.HexColor("#1a237e")
MID_BLUE = colors.HexColor("#283593")
LIGHT_BLUE = colors.HexColor("#e8eaf6")
ACCENT = colors.HexColor("#0d47a1")
TABLE_HDR = colors.HexColor("#1565c0")
TABLE_ROW1 = colors.HexColor("#e3f2fd")
GOLD = colors.HexColor("#f9a825")
DARK_TEXT = colors.HexColor("#212121")
GREEN_HDR = colors.HexColor("#1b5e20")
styles = getSampleStyleSheet()
ch_title_s = ParagraphStyle("ChTitle", parent=styles["Normal"],
fontSize=14, textColor=colors.white, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=18)
q_header_s = ParagraphStyle("QH", parent=styles["Normal"],
fontSize=11, textColor=colors.white, fontName="Helvetica-Bold",
leftIndent=8, leading=14)
sec_s = ParagraphStyle("Sec", parent=styles["Normal"],
fontSize=11, textColor=ACCENT, fontName="Helvetica-Bold",
spaceBefore=8, spaceAfter=3, leading=14)
sub_s = ParagraphStyle("Sub", parent=styles["Normal"],
fontSize=10.5, textColor=MID_BLUE, fontName="Helvetica-Bold",
spaceBefore=6, spaceAfter=2, leading=13)
body_s = ParagraphStyle("Body", parent=styles["Normal"],
fontSize=9.5, textColor=DARK_TEXT, fontName="Helvetica",
spaceAfter=3, leading=13, alignment=TA_JUSTIFY)
bullet_s = ParagraphStyle("Bul", parent=styles["Normal"],
fontSize=9.5, textColor=DARK_TEXT, fontName="Helvetica",
leftIndent=14, firstLineIndent=-10, spaceAfter=2, leading=12)
nbullet_s = ParagraphStyle("NBul", parent=styles["Normal"],
fontSize=9.5, textColor=DARK_TEXT, fontName="Helvetica",
leftIndent=18, firstLineIndent=-14, spaceAfter=2, leading=12)
note_s = ParagraphStyle("Note", parent=styles["Normal"],
fontSize=8.5, textColor=colors.HexColor("#555555"),
fontName="Helvetica-Oblique", alignment=TA_CENTER, leading=11)
cover_title_s = ParagraphStyle("CT", parent=styles["Normal"],
fontSize=28, textColor=colors.white, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=34)
cover_sub_s = ParagraphStyle("CS", parent=styles["Normal"],
fontSize=15, textColor=GOLD, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=20)
cover_info_s = ParagraphStyle("CI", parent=styles["Normal"],
fontSize=11, textColor=colors.white, fontName="Helvetica",
alignment=TA_CENTER, leading=14)
def ch_box(num, title, tag=""):
label = f"Chapter {num}: {title}"
if tag: label += f" [{tag}]"
p = Paragraph(label, ch_title_s)
t = Table([[p]], colWidths=[doc.width])
t.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1), GREEN_HDR),
("TOPPADDING",(0,0),(-1,-1),10),("BOTTOMPADDING",(0,0),(-1,-1),10),
("LEFTPADDING",(0,0),(-1,-1),12),("RIGHTPADDING",(0,0),(-1,-1),12),
("BOX",(0,0),(-1,-1),2,GOLD),
]))
return t
def q_box(qn, txt, marks=None):
ml = f" [{marks} Marks]" if marks else ""
p = Paragraph(f"Q.{qn} {txt}{ml}", q_header_s)
t = Table([[p]], colWidths=[doc.width])
t.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1), DARK_BLUE),
("TOPPADDING",(0,0),(-1,-1),6),("BOTTOMPADDING",(0,0),(-1,-1),6),
("LEFTPADDING",(0,0),(-1,-1),10),("RIGHTPADDING",(0,0),(-1,-1),10),
("BOX",(0,0),(-1,-1),1,GOLD),
]))
return t
def sec(t): return Paragraph(t, sec_s)
def sub(t): return Paragraph(t, sub_s)
def p(t): return Paragraph(t, body_s)
def b(t): return Paragraph(f"• {t}", bullet_s)
def nb(n,t):return Paragraph(f"{n}. {t}", nbullet_s)
def sp(h=6):return Spacer(1, h)
def hr(): return HRFlowable(width="100%", thickness=0.5,
color=colors.HexColor("#bbdefb"), spaceAfter=3, spaceBefore=3)
def tbl(headers, rows, widths=None):
if not widths:
widths = [doc.width/len(headers)]*len(headers)
ths = ParagraphStyle("TH",parent=styles["Normal"],fontSize=9,
textColor=colors.white,fontName="Helvetica-Bold",alignment=TA_CENTER)
tds = ParagraphStyle("TD",parent=styles["Normal"],fontSize=9,
textColor=DARK_TEXT,fontName="Helvetica",alignment=TA_LEFT,leading=12)
data = [[Paragraph(h,ths) for h in headers]]
for row in rows:
data.append([Paragraph(c,tds) for c in row])
t = Table(data, colWidths=widths)
t.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,0),TABLE_HDR),
("GRID",(0,0),(-1,-1),0.4,colors.HexColor("#90caf9")),
("VALIGN",(0,0),(-1,-1),"TOP"),
("TOPPADDING",(0,0),(-1,-1),4),("BOTTOMPADDING",(0,0),(-1,-1),4),
("LEFTPADDING",(0,0),(-1,-1),5),("RIGHTPADDING",(0,0),(-1,-1),5),
("ROWBACKGROUNDS",(0,1),(-1,-1),[TABLE_ROW1,colors.white]),
]))
return t
def quote_box(text):
qp = Paragraph(f"<i>\"{text}\"</i>",
ParagraphStyle("Q",parent=styles["Normal"],fontSize=9.5,
textColor=DARK_TEXT,fontName="Helvetica-Oblique",leading=13,alignment=TA_JUSTIFY))
t = Table([[qp]], colWidths=[doc.width-10])
t.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1),LIGHT_BLUE),
("LEFTPADDING",(0,0),(-1,-1),10),("RIGHTPADDING",(0,0),(-1,-1),10),
("TOPPADDING",(0,0),(-1,-1),7),("BOTTOMPADDING",(0,0),(-1,-1),7),
("BOX",(0,0),(-1,-1),1,ACCENT),
]))
return t
def formula_box(text):
fp = Paragraph(text, ParagraphStyle("F",parent=styles["Normal"],fontSize=11,
textColor=DARK_BLUE,fontName="Helvetica-Bold",alignment=TA_CENTER,leading=16))
t = Table([[fp]], colWidths=[doc.width-10])
t.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1),LIGHT_BLUE),
("BOX",(0,0),(-1,-1),1.5,ACCENT),
("TOPPADDING",(0,0),(-1,-1),8),("BOTTOMPADDING",(0,0),(-1,-1),8),
]))
return t
# ══════════════════════════════════════════════════════════════════
story = []
# ── COVER ─────────────────────────────────────────────────────────
cover = Table([
[Paragraph("PSM / FMT", cover_sub_s)],
[Paragraph("COMPLETE EXAM ANSWERS", cover_title_s)],
[Paragraph("PART 2 – Chapters 13 to 24", cover_sub_s)],
[sp(10)],
[Paragraph("RGUHS University Examination", cover_info_s)],
[Paragraph("Preventive & Social Medicine | Community Medicine", cover_info_s)],
[sp(8)],
[Paragraph("Based on: Park's Textbook of Preventive and Social Medicine", cover_info_s)],
[Paragraph("Marks-based model answers for all questions", cover_info_s)],
], colWidths=[doc.width])
cover.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1),DARK_BLUE),
("TOPPADDING",(0,0),(-1,-1),16),("BOTTOMPADDING",(0,0),(-1,-1),16),
("LEFTPADDING",(0,0),(-1,-1),20),("RIGHTPADDING",(0,0),(-1,-1),20),
("BOX",(0,0),(-1,-1),3,GOLD),
("LINEBELOW",(0,2),(-1,2),1.5,GOLD),
]))
story += [cover, sp(20),
p("This booklet covers Chapters 13–24 of the RGUHS Community Medicine / PSM curriculum. "
"Includes Environment & Health, Occupational Health, Genetics, Mental Health, "
"Statistics, Health Education, Planning, International Health and more."),
PageBreak()]
# ══════════════════════════════════════════════════════════════════
# CH 13 – SUSTAINABLE DEVELOPMENT GOALS
# ══════════════════════════════════════════════════════════════════
story += [ch_box(13,"Sustainable Development Goals","#II"), sp(8)]
story += [q_box("I","Millennium Development Goals (MDGs)","5"), sp(6)]
story += [sec("MILLENNIUM DEVELOPMENT GOALS (MDGs) – 2000 to 2015")]
story += [p("The MDGs were <b>8 international development goals</b> adopted at the UN Millennium Summit "
"in September 2000, to be achieved by 2015. They were replaced by 17 SDGs in 2015.")]
story += [tbl(
["MDG","Goal"],
[["MDG 1","Eradicate extreme poverty and hunger"],
["MDG 2","Achieve universal primary education"],
["MDG 3","Promote gender equality and empower women"],
["MDG 4","Reduce child mortality (target: reduce under-5 mortality by 2/3 from 1990)"],
["MDG 5","Improve maternal health (target: reduce MMR by 3/4 from 1990)"],
["MDG 6","Combat HIV/AIDS, malaria and other diseases"],
["MDG 7","Ensure environmental sustainability"],
["MDG 8","Develop global partnership for development"],
],
widths=[2.5*cm,13.5*cm]
)]
story += [sp(6), sec("SUSTAINABLE DEVELOPMENT GOALS (SDGs) – 2015 to 2030")]
story += [p("17 SDGs adopted at UN Summit, New York, September 2015 (Agenda 2030). "
"<b>SDG 3</b>: Ensure healthy lives and promote well-being for all at all ages. "
"Targets include: End AIDS, TB, malaria epidemics; reduce NCD mortality by 1/3; "
"achieve universal health coverage (UHC); reduce MMR to <70/100,000; "
"end preventable deaths of newborns and under-5 children.")]
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════
# CH 14 – ENVIRONMENT AND HEALTH
# ══════════════════════════════════════════════════════════════════
story += [ch_box(14,"Environment and Health","#I"), sp(8)]
story += [q_box("I","Water-Borne Diseases | Purification of Water (Large Scale & Household)","10"), sp(6)]
story += [sec("WATER-BORNE DISEASES – CLASSIFICATION")]
story += [tbl(
["Category","Diseases"],
[["Water-borne (ingested)","Cholera, typhoid, hepatitis A & E, dysentery (bacillary & amoebic), polio, gastroenteritis, leptospirosis"],
["Water-washed (insufficient water)","Trachoma, scabies, skin & eye infections, diarrhoeal diseases"],
["Water-based (aquatic intermediate host)","Guinea worm (Dracunculiasis), schistosomiasis, fascioliasis"],
["Water-related (insect vector)","Malaria, dengue, filariasis, JE (mosquito breeding in water)"],
],
widths=[4.5*cm,11.5*cm]
)]
story += [hr(), sec("LARGE-SCALE WATER PURIFICATION (Municipal Treatment)")]
story += [sub("Steps in Sequential Order")]
for n,step in enumerate([
"<b>Storage / Sedimentation</b>: Raw water stored in reservoir; allows heavy particles to settle; sunlight kills some organisms",
"<b>Coagulation/Flocculation</b>: Alum (aluminium sulphate) added – forms floc that traps suspended particles, bacteria, organic matter",
"<b>Sedimentation</b>: Floc settles in sedimentation tank; removes 70-80% of turbidity and bacteria",
"<b>Filtration</b>: (a) Slow sand filter – biological purification; Schmutzdecke (bacterial film) layer; removes 99% bacteria; (b) Rapid sand filter – mechanical; preceded by coagulation; needs backwashing",
"<b>Disinfection</b>: Chlorination – most widely used; kills remaining organisms; residual chlorine 0.5 mg/L after 1 hour contact; other methods: UV, ozonation, boiling",
"<b>pH correction</b>: Lime added if needed",
"<b>Fluoridation</b>: 0.5–0.8 mg/L in endemic fluoride-deficient areas",
],1): story.append(nb(n,step))
story += [hr(), sec("HOUSEHOLD / SMALL-SCALE WATER PURIFICATION")]
story += [tbl(
["Method","Details"],
[["Boiling","Most reliable; kill all pathogens; boil for 10 min; effective but fuel-intensive"],
["Chlorination","Bleaching powder (0.5mg/L free chlorine) or chlorine tablets (PuriTab, Aquatab); cheap and effective"],
["Sand-pebble-charcoal filter","Household candle filters; remove turbidity"],
["UV treatment","UV lamps (wavelength 254nm) kill bacteria and viruses; no taste/odour change"],
["Solar disinfection (SODIS)","PET bottles exposed to sunlight for 6+ hours; inactivates pathogens"],
["Boil + chlorinate","Most effective combination for emergencies"],
["Nalgonda technique","For fluoride removal: add alum + lime, mix, settle, filter; used in India"],
],
widths=[4*cm,12*cm]
)]
story.append(hr())
story += [q_box("II","Air Pollution – Sources, Effects and Prevention & Control"), sp(6)]
story += [sec("AIR POLLUTION")]
story += [sub("Definition")]
story += [p("Presence of substances in air in concentrations that cause harm to man, animals, plants or materials.")]
story += [sub("Sources")]
story += [tbl(
["Source","Pollutants"],
[["Transport/vehicles","CO, NOx, SO2, particulate matter (PM2.5, PM10), hydrocarbons, lead"],
["Industries","SO2, NOx, CO, particulates, heavy metals, VOCs"],
["Domestic/indoor","Smoke from biomass fuels (wood, dung, coal); CO, particulates"],
["Power plants","SO2, NOx, fly ash, CO2"],
["Agriculture","Ammonia, methane, pesticide sprays"],
],
widths=[4*cm,12*cm]
)]
story += [sub("Health Effects")]
story += [b("Respiratory: Chronic bronchitis, COPD, asthma, lung cancer (PM2.5, SO2, NOx)"),
b("Cardiovascular: Myocardial infarction, stroke (PM2.5)"),
b("Neurological: Lead and mercury affect brain development in children"),
b("Eye: Conjunctival irritation, photochemical smog (ozone causes eye/throat irritation)"),
b("Carcinogenic: Benzene (leukaemia), polycyclic aromatic hydrocarbons (lung cancer)"),
b("Global effects: Acid rain (SO2+NOx), ozone depletion (CFCs), greenhouse effect (CO2)")]
story += [sub("Prevention & Control")]
for n,s in enumerate(["Source control: Switch to cleaner fuels (CNG, LPG, solar, wind)",
"Catalytic converters in vehicles; Euro emission standards",
"Industrial controls: Scrubbers, electrostatic precipitators, bag filters",
"Land-use planning: Industries away from residential areas",
"Indoor air pollution: Improved cook stoves (chulhas), LPG, biogas for households",
"National Ambient Air Quality Standards (NAAQS) monitoring",
"Air (Prevention & Control of Pollution) Act 1981"],1): story.append(nb(n,s))
story.append(hr())
story += [q_box("III","Health Effects of Global Warming | Measures to Prevent It"), sp(6)]
story += [sec("GLOBAL WARMING")]
story += [p("<b>Global warming</b> is the rise in average surface temperature of the Earth due to increased "
"concentration of greenhouse gases (CO2, CH4, N2O, CFCs, ozone) in the atmosphere. "
"The greenhouse effect traps outgoing infrared radiation. Average temperature has risen "
"~1.1°C since pre-industrial times.")]
story += [sub("Health Effects")]
story += [b("Direct: Heat stroke, heat exhaustion (increased mortality during heat waves)"),
b("Vector-borne diseases: Extended range of malaria, dengue, JE as vectors spread to new areas"),
b("Water-borne diseases: Flooding contaminates water supplies; increased cholera, typhoid"),
b("Food insecurity: Crop failures due to drought and flooding; malnutrition"),
b("Respiratory: Worsening air quality; increased ozone and pollen; exacerbates asthma"),
b("Mental health: Eco-anxiety, post-disaster PTSD, displacement stress"),
b("Sea-level rise: Coastal flooding, displacement, loss of freshwater (saltwater intrusion)"),
b("Extreme weather events: Floods, cyclones, droughts – mass casualties and displacement")]
story += [sub("Prevention Measures")]
for n,s in enumerate(["Reduce greenhouse gas emissions: Renewable energy (solar, wind, hydro)",
"Energy efficiency: Buildings, transport, industry",
"Reduce deforestation; afforestation and reforestation",
"Carbon capture and sequestration technologies",
"International agreements: Paris Agreement (2015) – limit warming to 1.5–2°C",
"Health sector: Climate-resilient health systems; early warning systems for heat waves",
"Adaptation: Flood-resistant infrastructure, drought-resistant crops"],1): story.append(nb(n,s))
story.append(hr())
story += [q_box("V","Chlorination of Water | Breakpoint Chlorination","5"), sp(6)]
story += [sec("CHLORINATION OF WATER")]
story += [p("Chlorination is the most widely used method of water disinfection. Chlorine kills bacteria, "
"viruses and cysts (Giardia). <b>Residual free chlorine of 0.5 mg/L after 1 hour contact</b> is the standard.")]
story += [sub("Principles of Chlorination")]
story += [nb(1,"Chlorine is added to water as Cl2 gas, bleaching powder, or sodium hypochlorite"),
nb(2,"Cl2 + H2O → HOCl + HCl; HOCl (hypochlorous acid) is the active germicidal agent"),
nb(3,"HOCl destroys bacterial cell membranes and inactivates enzymes"),
nb(4,"Effectiveness depends on: dose, contact time, pH (works best at pH <7.5), turbidity, temperature")]
story += [sub("Breakpoint Chlorination")]
story += [p("When chlorine is added to water, it first reacts with organic matter and reduces "
"(chlorine demand). Further addition creates combined chloramines (less effective). "
"The <b>breakpoint</b> is the point at which all chlorine demand is satisfied and "
"<b>free residual chlorine begins to appear</b>. Adding chlorine beyond this point gives "
"true free residual chlorine – this is breakpoint chlorination. "
"Advantage: Removes taste and odour; destroys chloramines; most effective disinfection.")]
story.append(hr())
story += [q_box("XII","Noise Pollution – Effects on Health, Control & NIHL"), sp(6)]
story += [sec("NOISE POLLUTION")]
story += [p("Noise is unwanted sound. Measured in decibels (dB). "
"WHO standard: 55 dB daytime, 45 dB night (residential). "
"Occupational limit: 90 dB for 8-hour exposure (TLV).")]
story += [sub("Health Effects of Noise")]
story += [b("<b>Auditory effects</b>: Noise-Induced Hearing Loss (NIHL) – initially high-frequency loss at 4000 Hz; progressive; initially reversible (TTS) then permanent (PTS)"),
b("<b>Non-auditory effects</b>: Stress response, increased cortisol and adrenaline; hypertension; sleep disturbance; irritability and fatigue; reduced work efficiency; interference with speech communication"),
b("Acoustic trauma: Sudden intense noise (explosion) causing immediate permanent damage")]
story += [sub("Noise-Induced Hearing Loss (NIHL)")]
story += [p("Occupational NIHL is caused by prolonged exposure to noise >85 dB. "
"Early loss is at <b>4000 Hz (audiometric dip at 4 kHz)</b>. "
"Diagnosis: Pure tone audiometry. Prevention: Engineering controls (noise reduction at source), "
"administrative controls (shift rotation), PPE (ear plugs – 25 dB protection; ear muffs – 30 dB), "
"periodic audiometry for workers.")]
story += [sub("Control of Noise Pollution")]
for n,s in enumerate(["Source control: Noise-absorbing materials, machine enclosures, engine silencers",
"Path control: Sound insulation, distance (noise decreases 6 dB per doubling of distance)",
"Receiver protection: Ear plugs, ear muffs",
"Legislative: Noise Pollution (Regulation and Control) Rules 2000 under Environment Protection Act"],1):
story.append(nb(n,s))
story.append(hr())
story += [q_box("XV","Solid Waste Disposal Methods",""), sp(6)]
story += [sec("SOLID WASTE DISPOSAL")]
story += [tbl(
["Method","Description","Advantages/Disadvantages"],
[["Open dumping","Waste dumped in open land","Simple/cheap; health hazard – flies, rodents, odour, leachate"],
["Sanitary landfill","Waste compacted, covered daily with soil","Reduces vectors; controlled; groundwater contamination risk"],
["Incineration","High-temperature burning (>850°C)","Reduces volume by 90%; destroys pathogens; air pollution; expensive"],
["Composting","Aerobic decomposition of organic waste into manure","Eco-friendly; produces useful fertiliser; takes time"],
["Recycling","Paper, glass, metal, plastic sorted and reused","Conserves resources; reduces volume; needs infrastructure"],
["Pyrolysis","Thermal decomposition without oxygen","Energy recovery; handles non-recyclables"],
],
widths=[3.5*cm,5*cm,7.5*cm]
)]
story += [sub("Sanitary Landfill (Details)")]
for n,s in enumerate(["Site selected away from residential areas, water bodies",
"Waste spread in thin layers (45–60 cm) and compacted by bulldozers",
"Each layer covered with 15–20 cm of soil at end of day",
"Leachate collection system installed",
"Methane gas produced can be tapped for energy",
"Site can be used as park/garden after closure"],1): story.append(nb(n,s))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════
# CH 15 – HOSPITAL WASTE MANAGEMENT
# ══════════════════════════════════════════════════════════════════
story += [ch_box(15,"Hospital Waste Management","#I"), sp(8)]
story += [q_box("I","Categories of Biomedical Waste in India","5"), sp(6)]
story += [sec("BIOMEDICAL WASTE (BMW) MANAGEMENT RULES 2016")]
story += [p("Biomedical waste is any waste generated during diagnosis, treatment or immunisation of human beings or animals, "
"or in research activities pertaining to such activities.")]
story += [tbl(
["Category / Colour Code","Waste Type","Treatment & Disposal"],
[["Yellow","Human anatomical waste, animal anatomical waste, soiled waste (blood-soaked), expired medicines, chemical waste, discarded linen","Incineration or deep burial"],
["Red","Contaminated waste (recyclable): gloves, tubing, catheters, IV sets, blood bags (without needles)","Autoclaving / microwaving → shredding → recycling"],
["White (Translucent)","Sharps: needles, syringes with fixed needles, blades, scalpels","Autoclaving + shredding / needle cutters and hub cutters; sent to authorised recyclers"],
["Blue","Glassware: broken/discarded glass, glass vials","Autoclaving / chemical treatment → disposal in secured landfill"],
],
widths=[3.5*cm,6.5*cm,6*cm]
)]
story += [sp(6), sec("HEALTH HAZARDS OF HEALTHCARE WASTE")]
for n,h in enumerate(["<b>Sharps injuries</b>: Needle-stick injuries transmit HIV, HBV, HCV to healthcare workers",
"<b>Infectious waste</b>: Pathogens in waste cause nosocomial infections if not properly disposed",
"<b>Chemical waste</b>: Cytotoxic drugs, disinfectants – carcinogenic, mutagenic, teratogenic",
"<b>Radioactive waste</b>: Radiation exposure to workers and community",
"<b>Environmental pollution</b>: Leachate from poorly managed waste contaminates groundwater",
"<b>Community health</b>: Waste pickers (rag pickers) at highest risk of injury and infection"],1):
story.append(nb(n,h))
story += [hr()]
story += [q_box("III","Genotoxic Waste","3"), sp(4)]
story += [p("<b>Genotoxic waste</b> includes substances that are carcinogenic, mutagenic or teratogenic. "
"Examples: Cytotoxic drugs (chemotherapy agents – cyclophosphamide, vincristine), "
"radioactive isotopes, certain chemicals (formaldehyde, ethylene oxide). "
"Risks: DNA damage to healthcare workers; environmental contamination. "
"Disposal: Separate collection in rigid, leak-proof, clearly labelled containers; "
"incineration at high temperature (>1000°C) in authorised incinerators only.")]
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════
# CH 16 – DISASTER MANAGEMENT
# ══════════════════════════════════════════════════════════════════
story += [ch_box(16,"Disaster Management","#II"), sp(8)]
story += [q_box("I","Disaster – Definition and Types","5"), sp(6)]
story += [sec("DEFINITION OF DISASTER")]
story += [quote_box("A disaster is a serious disruption of the functioning of a community or society involving widespread human, material, economic or environmental losses and impacts, which exceeds the ability of the affected community or society to cope using its own resources. – UNISDR")]
story += [sec("TYPES OF DISASTERS")]
story += [tbl(
["Category","Types","Examples"],
[["Natural – Meteorological","Cyclones, tornadoes, floods, droughts, blizzards","Cyclone Amphan 2020; Chennai floods 2015"],
["Natural – Geological","Earthquakes, tsunamis, volcanic eruptions, landslides","2004 Indian Ocean Tsunami; 2001 Bhuj earthquake"],
["Biological","Epidemics, pandemics, insect infestations","COVID-19; plague outbreaks"],
["Man-made – Technological","Industrial accidents, nuclear accidents, chemical spills","Bhopal gas tragedy 1984; Chernobyl 1986"],
["Man-made – Conflict","Wars, terrorism, civil unrest, refugee crises","Various armed conflicts"],
["Man-made – Transport","Road, rail, air, sea accidents","Major train disasters"],
],
widths=[4*cm,5*cm,7*cm]
)]
story.append(hr())
story += [q_box("II","Disaster Cycle"), sp(6)]
story += [sec("DISASTER MANAGEMENT CYCLE")]
story += [p("The disaster management cycle has four phases (continuous loop):")]
story += [tbl(
["Phase","Activities"],
[["<b>1. Mitigation</b> (Pre-disaster)","Reduce risk and vulnerability; land-use planning; building codes; early warning systems; public education"],
["<b>2. Preparedness</b> (Pre-disaster)","Planning, training, stockpiling, evacuation drills; establish EOC (Emergency Operations Centre); community preparedness"],
["<b>3. Response</b> (During/After)","Search and rescue; medical response; evacuation; TRIAGE; emergency shelter; food/water supply"],
["<b>4. Recovery</b> (After)","Reconstruction; rehabilitation; psychosocial support; restore normalcy; learn lessons for future"],
],
widths=[4.5*cm,11.5*cm]
)]
story.append(hr())
story += [q_box("VI","Triage – Definition and Scope in Disasters"), sp(6)]
story += [sec("TRIAGE")]
story += [p("<b>Triage</b> (French: 'to sort') is the process of sorting casualties based on urgency "
"of treatment and likelihood of survival, to make the best use of limited resources "
"during mass casualty incidents.")]
story += [sub("START Triage System (Simple Triage and Rapid Treatment)")]
story += [tbl(
["Colour","Category","Criteria","Action"],
[["<b>Red</b>","Immediate (P1)","Life-threatening but salvageable; RR >30, CRT >2 sec, altered mental status","Treat immediately"],
["<b>Yellow</b>","Delayed (P2)","Serious but stable; can wait","Treat within 30–60 min"],
["<b>Green</b>","Minor (P3)","Walking wounded; minor injuries","Self-care; treat last"],
["<b>Black</b>","Expectant/Dead","Not breathing after airway opening; unsalvageable","Comfort care only"],
],
widths=[2*cm,3.5*cm,6*cm,4.5*cm]
)]
story += [p("<b>Scope of Triage in Disasters</b>: Triage is applied at scene, at receiving facility, "
"and within hospitals. It is dynamic – patient categories can change. "
"Triage officers must be experienced clinicians. "
"In India: Mass Casualty Management (MCM) guidelines issued by NDMA.")]
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════
# CH 17 – OCCUPATIONAL HEALTH
# ══════════════════════════════════════════════════════════════════
story += [ch_box(17,"Occupational Health","#I"), sp(8)]
story += [q_box("I","Define Occupational Health | Classify ODs | Engineering & Legislative Prevention","10"), sp(6)]
story += [sec("DEFINITION (ILO/WHO 1950)")]
story += [quote_box("Occupational health should aim at the promotion and maintenance of the highest degree of "
"physical, mental and social well-being of workers in all occupations; the prevention among workers of "
"departures from health caused by their working conditions; the protection of workers in their employment "
"from risks resulting from factors adverse to health; and the adaptation of work to man and of each man to his job.")]
story += [hr(), sec("CLASSIFICATION OF OCCUPATIONAL DISEASES")]
story += [tbl(
["Category","Examples"],
[["I. Physical agents","Heat: heat cramps, heat stroke; Light: miner's nystagmus, arc eye; Noise: NIHL; Vibration: white finger; Ionizing radiation: leukaemia; Compressed air: caisson disease"],
["II. Chemical agents","Dust (pneumoconiosis): silicosis, anthracosis, asbestosis, byssinosis, bagassosis; Metals: lead, mercury, arsenic; Solvents: benzene, carbon bisulphide"],
["III. Biological agents","Brucellosis, leptospirosis, anthrax, psittacosis, tetanus, fungal infections"],
["IV. Occupational cancers","Skin, lung, bladder cancers"],
["V. Occupational dermatoses","Dermatitis, eczema"],
["VI. Psychological origin","Industrial neurosis, hypertension, peptic ulcer"],
],
widths=[4*cm,12*cm]
)]
story += [hr(), sec("ENGINEERING MEASURES")]
for n,s in enumerate(["<b>Substitution</b>: Replace hazardous materials with safer alternatives",
"<b>Change of process</b>: Modify manufacturing method (e.g., wet grinding instead of dry)",
"<b>Enclosure</b>: Enclose dusty processes; prevent escape of fumes",
"<b>Isolation</b>: Segregate hazardous processes in separate areas",
"<b>Local exhaust ventilation</b>: Capture dust/fumes at source before entering breathing zone",
"<b>Wet methods</b>: Water sprays to suppress dust at origin",
"<b>PPE</b>: Respirators, ear plugs, gloves, goggles, helmets, safety shoes",
"<b>Environmental monitoring</b>: Regular air sampling against TLV (Threshold Limit Values)"],1):
story.append(nb(n,s))
story += [hr(), sec("LEGISLATIVE MEASURES")]
for n,s in enumerate(["<b>Factories Act 1948</b>: Health, safety, welfare in factories",
"<b>ESI Act 1948</b>: 7 social security benefits for insured workers",
"<b>Mines Act 1952</b>: Safety of mine workers",
"<b>Workmen's Compensation Act 1923</b>: Compensation for work injuries",
"<b>Plantation Labour Act 1951</b>: Welfare of plantation workers"],1):
story.append(nb(n,s))
story.append(hr())
story += [q_box("II","Pneumoconiosis – Factors, Types, Health Effects, Prevention"), sp(6)]
story += [sec("PNEUMOCONIOSIS")]
story += [p("Dust of size <b>0.5–3 microns</b> causes pneumoconiosis after prolonged exposure. No cure exists.")]
story += [sub("Factors Influencing Causation")]
for n,f in enumerate(["Chemical composition (free silica most fibrogenic)",
"Fineness of dust particles (0.5–3 µm reach alveoli)",
"Concentration of dust in atmosphere",
"Duration of exposure","Health status of worker",
"Superimposed infections (especially tuberculosis)"],1): story.append(nb(n,f))
story += [sub("Types and Health Effects")]
story += [tbl(
["Type","Cause","Occupation","Effects"],
[["Silicosis","Free silica (SiO₂)","Mining, sandblasting, pottery","Progressive fibrosis, silico-TB, disability"],
["Anthracosis","Coal dust","Coal mines","Simple CWP (benign) or PMF (severe)"],
["Asbestosis","Asbestos","Insulation, shipbuilding","Fibrosis, mesothelioma, lung cancer"],
["Byssinosis","Cotton/jute dust","Textile","Monday fever, chest tightness"],
["Bagassosis","Bagasse dust","Sugar mills","Allergic alveolitis"],
["Farmer's lung","Mouldy hay","Agriculture","Allergic alveolitis"],
],
widths=[3*cm,3.5*cm,4*cm,5.5*cm]
)]
story += [sub("Prevention")]
for n,s in enumerate(["Substitution; wet methods; local exhaust ventilation; enclosure",
"Dust respirators; environmental monitoring (TLV checks)",
"Pre-employment and periodic chest X-rays and lung function tests",
"Remove workers from exposure on early detection; Factories Act enforcement"],1):
story.append(nb(n,s))
story.append(hr())
story += [q_box("IV","Lead Poisoning (Plumbism) – Causes, Clinical Features, Management, Prevention","5"), sp(6)]
story += [sec("LEAD POISONING (PLUMBISM)")]
story += [sub("Sources")]
story += [p("Lead smelting, battery manufacturing, lead paint, plumbing, printing, tetraethyl lead in petrol.")]
story += [sub("Clinical Features")]
story += [b("<b>Inorganic lead</b>: Abdominal colic, constipation, Burton's line (blue gum line), wrist drop, foot drop, anaemia, basophilic stippling of RBCs"),
b("<b>Organic lead</b>: CNS: insomnia, headache, confusion, delirium")]
story += [sub("Diagnosis")]
story += [b("Coproporphyrin in urine (CPU) – screening; normal <150 µg/L"),
b("ALAU (amino levulinic acid in urine) >5 mg/L confirms absorption"),
b("Blood lead >70 µg/100 ml = toxic; basophilic stippling of RBCs")]
story += [sub("Management")]
story += [nb(1,"Chelation: EDTA (calcium disodium edetate) IM/IV; DMSA oral; BAL for severe cases"),
nb(2,"Remove from further exposure"),
nb(3,"Symptomatic treatment; iron for anaemia")]
story += [sub("Prevention")]
story += [nb(1,"Substitute lead; enclose processes; local exhaust ventilation"),
nb(2,"PPE; wet housekeeping; TLV < 2.0 mg/10 m³"),
nb(3,"Periodic medical examination with blood lead, CPU, basophilic stippling")]
story.append(hr())
story += [q_box("XI","Silicosis – Definition and Diagnosis"), sp(6)]
story += [sec("SILICOSIS")]
story += [p("Silicosis is caused by inhalation of <b>free silica (SiO₂)</b>. Most common permanent occupational "
"disability. First reported in India: Kolar Gold Mines, 1947.")]
story += [sub("Diagnosis")]
for n,d in enumerate(["<b>History</b> of silica dust exposure (occupation, duration)",
"<b>Symptoms</b>: Progressive dyspnoea, cough, chest pain",
"<b>Chest X-ray</b>: Bilateral rounded nodular opacities in upper lobes; eggshell calcification of hilar nodes; PMF in advanced cases",
"<b>PFTs</b>: Restrictive pattern (reduced FVC, TLC)",
"<b>HRCT chest</b>: More sensitive than plain X-ray",
"<b>TB screening</b>: Mantoux test, sputum AFB (silicosis increases TB risk 30×)"],1):
story.append(nb(n,d))
story += [p("No cure; treatment is supportive. Key = prevention and early removal from exposure.")]
story.append(hr())
story += [q_box("VII","Sickness Absenteeism – Definition, Reasons, Significance"), sp(6)]
story += [sec("SICKNESS ABSENTEEISM")]
story += [formula_box("Sickness Absenteeism Rate = (Man-days lost due to sickness ÷ Total scheduled man-days) × 100")]
story += [sub("Reasons")]
story += [b("Medical: Acute illnesses, occupational diseases, chronic diseases, accidents"),
b("Social: Poor housing, malnutrition, family problems, alcoholism"),
b("Work-related: Job dissatisfaction, fatigue, hazardous environment, low wages")]
story += [sub("Significance")]
for n,s in enumerate(["Index of workers' health status",
"Economic loss to industry and nation",
"Identifies occupational hazards in specific departments",
"Guides allocation of occupational health resources",
"ESI Act: basis for sickness benefit payment",
"Research tool for disease patterns in industrial populations"],1):
story.append(nb(n,s))
story.append(hr())
story += [q_box("VIII","ESI Act 1948 – Benefits to Employees"), sp(6)]
story += [tbl(
["Benefit","Details"],
[["1. Medical","Full medical care free: OPD, specialist, hospitalisation, drugs, investigations, ANC, ambulance"],
["2. Sickness","~70% of wages for up to 91 days/year; Extended sickness benefit for 34 diseases up to 2 years"],
["3. Maternity","26 weeks paid maternity leave"],
["4. Disablement","Temporary or permanent pension proportional to disability"],
["5. Dependants'","Monthly pension to widow/children on death from work injury"],
["6. Funeral","Lump sum Rs. 10,000"],
["7. Unemployment","Rajiv Gandhi Shramik Kalyan Yojana: allowance for involuntary job loss"],
],
widths=[3.5*cm,12.5*cm]
)]
story += [p("Contribution: Workers <b>0.75%</b> of wages; Employers <b>3.25%</b>. "
"Applies to establishments with 10+ workers earning ≤Rs. 21,000/month.")]
story.append(hr())
story += [q_box("IX","Occupational Hazards of Healthcare Professionals","3"), sp(6)]
story += [tbl(
["Hazard Type","Specific Risk"],
[["Biological","Needle-stick injuries: HIV, HBV, HCV transmission; airborne TB; COVID-19"],
["Chemical","Cytotoxic drug exposure (nurses handling chemo); disinfectants (glutaraldehyde); anaesthetic gases"],
["Physical","Radiation (X-ray technicians, radiologists); noise (ENT departments)"],
["Ergonomic","Back injury from patient handling; repetitive strain (surgeons)"],
["Psychological","Burnout, compassion fatigue, PTSD, depression, suicide risk (doctors)"],
["Latex allergy","Gloves; Type I and Type IV hypersensitivity"],
],
widths=[4*cm,12*cm]
)]
story.append(hr())
story += [q_box("XIV","Pre-Placement Examination and Its Importance"), sp(6)]
story += [sec("PRE-PLACEMENT EXAMINATION")]
story += [p("<b>Definition</b>: Medical examination before placing a worker in a specific job to assess "
"fitness, establish baseline health data, and match worker to job demands.")]
story += [sub("Importance")]
for n,s in enumerate(["Establishes baseline for future comparisons",
"Job-fitness matching – prevents placing susceptible persons in hazardous jobs",
"Detects pre-existing conditions before occupational exposure begins",
"Medicolegal protection – distinguishes occupational vs pre-existing disease",
"Early detection of occupational disease when combined with periodic exams",
"Legal requirement under Factories Act and Mines Act",
"Reduces sickness absenteeism by proper job placement"],1):
story.append(nb(n,s))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════
# CH 18 – GENETICS AND HEALTH
# ══════════════════════════════════════════════════════════════════
story += [ch_box(18,"Genetics and Health","#II"), sp(8)]
story += [q_box("I","Genetic Engineering","5"), sp(6)]
story += [sec("GENETIC ENGINEERING")]
story += [p("<b>Genetic engineering</b> (recombinant DNA technology) is the direct manipulation of an "
"organism's genome using biotechnology tools to alter its genetic makeup.")]
story += [sub("Key Techniques")]
story += [nb(1,"<b>Recombinant DNA Technology</b>: Cutting DNA with restriction enzymes, inserting desired genes into vectors (plasmids), cloning in host cells (E. coli)"),
nb(2,"<b>PCR (Polymerase Chain Reaction)</b>: Amplify specific DNA sequences for diagnosis"),
nb(3,"<b>Gene therapy</b>: Introducing corrective genes into cells to treat genetic diseases"),
nb(4,"<b>CRISPR-Cas9</b>: Precise gene editing – cut and replace specific DNA sequences"),
nb(5,"<b>Transgenic organisms</b>: Organisms with foreign genes (e.g., GM crops, transgenic mice)")]
story += [sub("Applications in Medicine")]
story += [b("Production of insulin (E. coli producing human insulin – recombinant insulin)"),
b("Hepatitis B vaccine (yeast-produced HBsAg – recombinant vaccine)"),
b("Erythropoietin, growth hormone, clotting factors (Factor VIII for haemophilia)"),
b("Diagnosis: PCR for TB, COVID-19, HIV viral load"),
b("Gene therapy: ADA-SCID, haemophilia, thalassaemia (in trials)"),
b("Forensics: DNA fingerprinting")]
story.append(hr())
story += [q_box("II","Eugenics and Euthenics with Examples and Application in Medicine"), sp(6)]
story += [sec("EUGENICS")]
story += [p("<b>Eugenics</b> is the study of methods to improve the hereditary qualities of the human race "
"by selective breeding. Coined by Francis Galton (1883).")]
story += [b("<b>Positive eugenics</b>: Encourage reproduction of genetically 'fit' individuals. E.g., financial incentives for educated couples"),
b("<b>Negative eugenics</b>: Discourage reproduction of genetically 'unfit'. E.g., sterilization laws (now considered unethical)"),
b("Applications: Genetic counselling (ethical form); prenatal diagnosis and selective termination")]
story += [sec("EUTHENICS")]
story += [p("<b>Euthenics</b> is the science of improving the environment to improve the expression of "
"human genetic potential. It addresses nutrition, education, sanitation, housing, and health services. "
"Examples: Iodine supplementation prevents cretinism (expression of intellectual potential); "
"PKU diet (phenylalanine-free) prevents mental retardation in phenylketonuria. "
"Eugenics changes the genotype; euthenics improves the phenotype.")]
story.append(hr())
story += [q_box("IV","Genetic Counselling"), sp(6)]
story += [p("<b>Genetic counselling</b> is the process of helping patients and families understand "
"and adapt to medical, psychological and familial implications of genetic disorders. Steps:")]
for n,s in enumerate(["Establish diagnosis (clinical, biochemical, cytogenetic, molecular)",
"Estimate recurrence risk (Mendelian patterns: autosomal dominant/recessive, X-linked)",
"Communicate information clearly and non-directively to family",
"Discuss reproductive options (prenatal diagnosis, IVF with PGD, adoption)",
"Provide psychological and social support",
"Long-term follow-up"],1): story.append(nb(n,s))
story += [p("<b>Indications</b>: Advanced maternal age (>35), previous child with chromosomal abnormality, "
"family history of genetic disease, consanguineous marriage, recurrent miscarriages.")]
story += [hr()]
story += [q_box("V","Down Syndrome","3"), sp(6)]
story += [p("<b>Down syndrome</b> (Trisomy 21) is the most common chromosomal disorder (1 in 700 live births). "
"Karyotype: 47 chromosomes with an extra chromosome 21. "
"Clinical features: Flat face, upslanting palpebral fissures, epicanthal folds, small ears, "
"Brushfield spots (iris), single palmar crease (simian crease), short stature, hypotonia, "
"intellectual disability (IQ 25–70). "
"Associations: Congenital heart disease (40–50%), Alzheimer's disease (early onset), "
"leukaemia risk, hypothyroidism. "
"Risk increases with maternal age (1:1500 at 20y; 1:30 at 45y). "
"Diagnosis: Prenatal – triple screen + nuchal translucency + amniocentesis/CVS + karyotype. "
"Management: Special education, speech therapy, cardiac surgery if needed.")]
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════
# CH 19 – MENTAL HEALTH
# ══════════════════════════════════════════════════════════════════
story += [ch_box(19,"Mental Health","#II"), sp(8)]
story += [q_box("I","Types of Mental Illness","5"), sp(6)]
story += [sec("CLASSIFICATION OF MENTAL ILLNESS (ICD-11 / DSM-5)")]
story += [tbl(
["Category","Examples"],
[["Neurodevelopmental disorders","Intellectual disability, autism spectrum disorder (ASD), ADHD"],
["Schizophrenia spectrum & psychotic disorders","Schizophrenia, schizoaffective disorder, delusional disorder"],
["Mood (Affective) disorders","Major depressive disorder, bipolar disorder, dysthymia"],
["Anxiety disorders","GAD, panic disorder, phobias, social anxiety disorder, OCD, PTSD"],
["Substance-related and addictive disorders","Alcohol use disorder, opioid use disorder, tobacco dependence"],
["Personality disorders","Borderline PD, antisocial PD, narcissistic PD"],
["Eating disorders","Anorexia nervosa, bulimia nervosa, binge eating disorder"],
["Organic/Neurocognitive disorders","Dementia (Alzheimer's), delirium"],
],
widths=[5.5*cm,10.5*cm]
)]
story.append(hr())
story += [q_box("III","Socioeconomic Effects of Smoking & Adverse Health Effects of Smoking"), sp(6)]
story += [sec("ADVERSE HEALTH EFFECTS OF SMOKING")]
story += [tbl(
["System","Effects"],
[["Respiratory","Chronic bronchitis, emphysema, COPD, lung cancer (risk 20×), laryngeal cancer"],
["Cardiovascular","CHD, MI, stroke, peripheral vascular disease, aortic aneurysm"],
["GI/Other cancers","Oral cancer, oesophageal, stomach, pancreatic, kidney, bladder, cervical cancer"],
["Reproductive","Low birth weight, IUGR, premature birth, SIDS (sudden infant death)"],
["Other","Peptic ulcer, osteoporosis, premature skin ageing, impotence"],
],
widths=[4*cm,12*cm]
)]
story += [sub("Socioeconomic Effects")]
story += [b("Loss of productive working years due to premature death and disability"),
b("Huge healthcare costs for smoking-related diseases"),
b("Loss of income (spending on tobacco = money diverted from food/education for poor families)"),
b("Passive smoking affects non-smokers, especially children – ear infections, asthma"),
b("Environmental pollution from tobacco cultivation and cigarette butts"),
b("Industry loss from absenteeism")]
story.append(hr())
story += [q_box("V","Health Problems due to Alcoholism & Prevention of Drug Dependence"), sp(6)]
story += [sec("HEALTH PROBLEMS DUE TO ALCOHOLISM")]
story += [sub("Physical Health")]
story += [b("Liver: Fatty liver → alcoholic hepatitis → cirrhosis → hepatocellular carcinoma"),
b("GI: Gastritis, peptic ulcer, pancreatitis, oesophageal varices"),
b("Neurological: Peripheral neuropathy, Wernicke-Korsakoff syndrome, cerebellar degeneration"),
b("Cardiovascular: Cardiomyopathy, arrhythmias, hypertension"),
b("Nutritional: Thiamine, folate, B12 deficiency; malnutrition"),
b("Cancer: Oral, oesophageal, stomach, liver, colorectal, breast cancer")]
story += [sub("Mental Health")]
story += [b("Alcohol dependence syndrome, withdrawal delirium tremens, hallucinations"),
b("Depression, anxiety, suicide risk"),
b("Korsakoff's psychosis (anterograde amnesia)")]
story += [sub("Social Effects")]
story += [b("Domestic violence, marital breakdown, child abuse, poverty, crime")]
story += [sub("Prevention of Drug Dependence")]
for n,s in enumerate(["<b>Primary</b>: Public education on dangers; life skills training in schools; restrict availability; taxation; ban advertising",
"<b>Secondary</b>: Early identification of users; brief intervention; motivational interviewing",
"<b>Tertiary</b>: Deaddiction treatment (deintoxication, rehabilitation); relapse prevention; support groups (AA, NA)",
"<b>Legislative</b>: NDPS Act 1985 (Narcotic Drugs and Psychotropic Substances Act); Prohibition policies"],1):
story.append(nb(n,s))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════
# CH 20 – HEALTH INFORMATION & STATISTICS
# ══════════════════════════════════════════════════════════════════
story += [ch_box(20,"Health Information and Basic Medical Statistics","#I"), sp(8)]
story += [q_box("I","Sampling – Methods of Sampling with Examples","10"), sp(6)]
story += [sec("SAMPLING")]
story += [p("<b>Sampling</b> is the process of selecting a representative subset (sample) from a "
"larger population (universe) for study. The sample should be representative – "
"having the same characteristics as the population.")]
story += [sub("Why Sampling?")]
story += [b("Cost-effective and time-saving"), b("Practical when population is very large"),
b("More detailed study possible with smaller numbers"), b("Less effort and resources required")]
story += [sec("METHODS OF SAMPLING")]
story += [sub("A. Probability (Random) Sampling")]
story += [tbl(
["Method","Description","Example"],
[["Simple Random Sampling (SRS)","Every member has equal chance of selection; use lottery/random number table","Selecting 50 patients from 500 by random number table"],
["Systematic Random Sampling","Select every kth element after random start; k = N/n","Every 10th house in a village (k=10 if 1000 houses, n=100)"],
["Stratified Random Sampling","Divide population into strata (age, sex, socioeconomic); SRS within each stratum","Divide workers into male/female; randomly sample each group proportionally"],
["Cluster Sampling","Population divided into clusters (villages); randomly select clusters; study all in chosen clusters","Random selection of 10 villages out of 100; study all residents"],
["Multi-stage Sampling","Several stages of random selection; most practical for large surveys","NFHS: State → District → Village → Household"],
],
widths=[3.5*cm,5.5*cm,7*cm]
)]
story += [sub("B. Non-Probability Sampling")]
story += [b("<b>Convenience sampling</b>: Select most accessible subjects – fastest but biased"),
b("<b>Purposive sampling</b>: Deliberately select subjects with specific characteristics"),
b("<b>Quota sampling</b>: Pre-set quotas for each subgroup; fill quota by convenience"),
b("<b>Snowball sampling</b>: Initial subjects refer others (useful for hidden populations – drug users, sex workers)")]
story.append(hr())
story += [q_box("II","Registration of Births and Deaths","5"), sp(6)]
story += [sec("REGISTRATION OF BIRTHS AND DEATHS")]
story += [p("Governed by the <b>Registration of Births and Deaths Act 1969</b>. "
"Birth/death registration is <b>compulsory</b> within 21 days in India.")]
story += [sub("Importance")]
for n,s in enumerate(["Legal basis for identity, citizenship, inheritance, marriage",
"Provides vital statistics for health planning and policy",
"Monitors population growth, fertility and mortality trends",
"Basis for calculating health indicators (IMR, MMR, CDR, TFR)",
"Required for disease surveillance and epidemiological research"],1):
story.append(nb(n,s))
story += [sub("System in India")]
story += [b("Registrar General of India (RGI) oversees the Civil Registration System (CRS)"),
b("Chief Registrar → District Registrar → Local Registrar (Gram Panchayat/Municipal body)"),
b("Sample Registration System (SRS): Dual record system for estimating vital rates in India"),
b("Complete enumeration not achieved; SRS fills the gap with representative estimates")]
story.append(hr())
story += [q_box("VI","Measures of Central Tendency – Limitations"), sp(6)]
story += [sec("MEASURES OF CENTRAL TENDENCY")]
story += [tbl(
["Measure","Formula/Definition","Best Used For","Limitations"],
[["Mean (Arithmetic)","Sum of all values / Number of values","Normally distributed data; interval/ratio data","Affected by extreme values (outliers)"],
["Median","Middle value when data ordered; (n+1)/2 th value","Skewed data; ordinal data","Less mathematically tractable"],
["Mode","Most frequently occurring value","Nominal data; describing common category","May be multiple modes or no mode; ignores other values"],
],
widths=[2.5*cm,4*cm,4.5*cm,5*cm]
)]
story.append(hr())
story += [q_box("VII","Measures of Dispersion"), sp(6)]
story += [sec("MEASURES OF DISPERSION")]
story += [tbl(
["Measure","Definition","Use"],
[["Range","Max value – Min value","Simple but influenced by extremes"],
["Interquartile Range (IQR)","Q3 – Q1 (middle 50% of data)","Skewed data; resistant to outliers"],
["Variance","Mean of squared deviations from mean","Basis for SD; all values contribute"],
["Standard Deviation (SD)","Square root of variance","Most useful; same units as data; describes spread in normal distribution"],
["Coefficient of Variation (CV)","(SD/Mean) × 100%","Compare variability between datasets with different units/means"],
],
widths=[4*cm,5*cm,7*cm]
)]
story += [sub("Normal Distribution")]
story += [p("Bell-shaped, symmetric. Mean = Median = Mode. "
"68% values within ±1 SD; 95% within ±1.96 SD; 99.7% within ±3 SD. "
"Reference ranges in clinical medicine = Mean ±2 SD.")]
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════
# CH 21 – HEALTH EDUCATION & COMMUNICATION
# ══════════════════════════════════════════════════════════════════
story += [ch_box(21,"Communication for Health Education","#I"), sp(8)]
story += [q_box("I","Define Health Education | Models | Principles | Communication Process | Planning a Health Education Session","10"), sp(6)]
story += [sec("DEFINITION OF HEALTH EDUCATION")]
story += [quote_box("Health education is a process that informs, motivates and helps people to adopt and maintain healthy practices and lifestyles, advocates environmental changes as needed to facilitate this goal, and conducts professional training and research to the same end. – WHO")]
story += [hr(), sec("MODELS / APPROACHES")]
story += [tbl(
["Model","Description"],
[["Medical Model","Focus on disease prevention; professionals tell patients what to do; top-down"],
["Educational Model","Give information to enable informed decisions; respects autonomy"],
["Behaviour Change Model","Change specific behaviours through learning; reinforcement and feedback"],
["Social Change / Community Model","Change social environment and policies; collective action; community participation"],
["KAP Model","Knowledge → Attitude → Practice; assumes knowledge leads to behaviour change"],
],
widths=[5*cm,11*cm]
)]
story += [hr(), sec("PRINCIPLES OF HEALTH EDUCATION")]
for n,p_text in enumerate(["<b>Credibility</b>: Source must be believable and trustworthy",
"<b>Interest</b>: Content must be relevant and engaging to the audience",
"<b>Participation</b>: Active involvement of the target audience",
"<b>Motivation</b>: Must address felt needs and desires of the audience",
"<b>Comprehension</b>: Message must be understood (appropriate language and literacy level)",
"<b>Reinforcement</b>: Messages repeated through multiple channels",
"<b>Learning by doing</b>: Practical demonstration more effective than passive listening",
"<b>Known to unknown</b>: Start from what people know and build on it",
"<b>Good human relations</b>: Respect, empathy, non-judgmental approach"],1):
story.append(nb(n,p_text))
story += [hr(), sec("COMMUNICATION PROCESS")]
story += [p("Communication = Sender → Message → Channel → Receiver → Feedback")]
story += [tbl(
["Component","Explanation"],
[["Sender (Source)","Person/organization communicating the message; must have credibility"],
["Message","Content of communication; must be clear, accurate, culturally appropriate"],
["Channel (Medium)","How the message is transmitted: mass media, interpersonal, group"],
["Receiver (Audience)","Target population; their literacy, culture, needs must be considered"],
["Feedback","Response of receiver; ensures message was understood; allows correction"],
["Noise/Barriers","Anything that distorts the message: language barrier, technical jargon, cultural mismatch"],
],
widths=[4*cm,12*cm]
)]
story += [hr(), sec("STEPS IN PLANNING A HEALTH EDUCATION SESSION")]
for n,step in enumerate(["<b>Identify the target audience</b> and assess their needs (KAP survey)",
"<b>Set objectives</b>: What knowledge, attitude or behaviour change is expected?",
"<b>Select content</b>: Evidence-based, relevant, culturally appropriate",
"<b>Choose methods and media</b>: Appropriate to audience literacy and setting",
"<b>Develop materials</b>: IEC (Information-Education-Communication) materials",
"<b>Pre-test materials</b> with a small sample of the target audience",
"<b>Conduct the session</b>: Introduce, deliver, involve audience, summarise",
"<b>Evaluate</b>: Pre/post KAP test; observe behaviour change; assess impact"],1):
story.append(nb(n,step))
story.append(hr())
story += [q_box("II","Methods of Health Communication – Advantages & Disadvantages"), sp(6)]
story += [sec("METHODS OF HEALTH COMMUNICATION")]
story += [tbl(
["Method","Examples","Advantages","Disadvantages"],
[["Individual (one-to-one)","Counselling, home visit, bedside education","Personal; addresses individual needs; two-way feedback","Time-consuming; reaches few people"],
["Group methods","Lecture, discussion, demonstration, role play, symposium","Reaches more people; group dynamics useful","Less personal; needs good facilitation skills"],
["Mass media","TV, radio, newspapers, social media, posters, pamphlets","Reaches millions simultaneously; cost-effective per person","One-way; no feedback; may not suit all literacy levels"],
],
widths=[3*cm,3.5*cm,4.5*cm,5*cm]
)]
story.append(hr())
story += [q_box("III","Barriers of Health Communication and Their Prevention","5"), sp(6)]
story += [sec("BARRIERS OF HEALTH COMMUNICATION")]
story += [tbl(
["Barrier","Example","Prevention"],
[["Language barrier","Message in English to Hindi/regional language speakers","Use local language; trained interpreters"],
["Literacy barrier","Written pamphlets given to illiterate audience","Use visual aids, pictures, audio messages"],
["Cultural barrier","Health messages conflicting with cultural beliefs","Cultural sensitivity; use of community leaders"],
["Technical/Jargon","Medical terms not understood by lay public","Plain language; analogies; avoid jargon"],
["Noise (physical)","Loud background noise during talk","Proper venue; PA system"],
["Attitude barrier","Recipient is defensive or not motivated","Motivational approach; address felt needs"],
["Overload of information","Too much information at once","Prioritise key messages; reinforce over time"],
],
widths=[3*cm,4.5*cm,8.5*cm]
)]
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════
# CH 22 – HEALTH PLANNING AND MANAGEMENT
# ══════════════════════════════════════════════════════════════════
story += [ch_box(22,"Health Planning and Management","#II"), sp(8)]
story += [q_box("I","Stages of Planning Cycle","10"), sp(6)]
story += [sec("HEALTH PLANNING CYCLE")]
story += [p("Health planning is a continuous, cyclical process of identifying problems, "
"determining priorities, setting objectives and implementing solutions.")]
story += [tbl(
["Stage","Key Activities"],
[["1. Situational Analysis","Collect data on health status; identify problems; assess resources; community diagnosis"],
["2. Priority Setting","Rank problems by magnitude, severity, cost-effectiveness; use criteria: HANC (Health need, Adequacy of knowledge, Net benefit, Community concern)"],
["3. Objective Setting","SMART objectives: Specific, Measurable, Achievable, Relevant, Time-bound"],
["4. Planning Interventions","Identify evidence-based strategies; select most feasible and cost-effective approaches"],
["5. Resource Allocation","Budget, manpower, materials, equipment planning; Financial management"],
["6. Implementation","Execute the plan; supervision and monitoring; overcome barriers"],
["7. Monitoring","Ongoing tracking of inputs, processes and outputs; process indicators"],
["8. Evaluation","Assess achievement of objectives; outcome and impact indicators; lessons learned"],
["9. Feedback / Replanning","Use evaluation findings to revise and improve the next cycle"],
],
widths=[4.5*cm,11.5*cm]
)]
story.append(hr())
story += [q_box("II","Recommendations of Bhore Committee","5"), sp(6)]
story += [sec("BHORE COMMITTEE (1946)")]
story += [p("<b>Health Survey and Development Committee</b> chaired by Sir Joseph Bhore. "
"Often called the <b>'Magna Carta' of Indian health planning</b>.")]
story += [sub("Short-term Recommendations")]
for n,s in enumerate(["One primary health unit per 40,000 population with 75-bed hospital and trained staff",
"District health organisation with 650-bed hospital",
"Preventive and social medicine to be integrated with curative services"],1):
story.append(nb(n,s))
story += [sub("Long-term Recommendations")]
for n,s in enumerate(["Primary health unit: 10,000–20,000 population with 75-bed hospital",
"District hospital of 2,500 beds for 30 lakh population",
"3 times more doctors needed ('three doctors per unit' concept)",
"Broad-based social orientation of medical education",
"Establish Central Health Research Institute (became ICMR)",
"Develop public health nursing for MCH services"],1):
story.append(nb(n,s))
story.append(hr())
story += [q_box("III","Srivastava Committee 1975"), sp(6)]
story += [sec("SRIVASTAVA COMMITTEE (1975) – Group on Medical Education and Support Manpower")]
story += [p("<b>Key Recommendations</b>:")]
for n,s in enumerate(["Create a new cadre of Community Health Workers (CHW) – one per 1000 population from the community",
"These workers to be trained for 3 months to provide basic health services",
"Integrate health services with other rural development activities",
"Develop family welfare planning workers (now evolved into ASHA)",
"Strengthen referral system from village to district hospital",
"Multipurpose Health Worker (MPW) scheme – male and female MPW replacing single-purpose workers",
"This recommendation led to the <b>MPW Scheme 1977</b> and later the <b>ASHA programme under NRHM 2005</b>"],1):
story.append(nb(n,s))
story.append(hr())
story += [q_box("VI","PERT – Programme Evaluation Review Technique","3"), sp(6)]
story += [p("<b>PERT</b> is a project management tool used for planning, scheduling and controlling "
"complex programmes. Key features:")]
story += [nb(1,"Identifies all activities required for project completion"),
nb(2,"Establishes the sequence and dependencies between activities"),
nb(3,"Estimates three time values per activity: Optimistic (To), Most likely (Tm), Pessimistic (Tp)"),
nb(4,"Expected time = (To + 4Tm + Tp) / 6"),
nb(5,"Identifies the <b>Critical Path</b> – longest sequence of activities that determines minimum project duration"),
nb(6,"Activities on critical path have zero 'float' – any delay extends the whole project")]
story += [p("Used in: Vaccination campaigns, hospital construction, large health programme implementation.")]
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════
# CH 23 – INTERNATIONAL HEALTH
# ══════════════════════════════════════════════════════════════════
story += [ch_box(23,"International Health","#I"), sp(8)]
story += [q_box("I","WHO – Functions and Responsibilities","5"), sp(6)]
story += [sec("WORLD HEALTH ORGANISATION (WHO)")]
story += [p("Established: <b>7 April 1948</b> (World Health Day). Headquarters: <b>Geneva, Switzerland</b>. "
"Member states: 194. Part of United Nations system. "
"Constitution definition: <b>\"Health is a state of complete physical, mental and social well-being "
"and not merely the absence of disease or infirmity.\"</b>")]
story += [sub("Functions of WHO")]
for n,f in enumerate(["<b>Normative</b>: Setting norms and standards (e.g., IHR – International Health Regulations)",
"<b>Directing and coordinating authority</b> on international health work",
"<b>Technical assistance</b> to member countries in health programmes",
"<b>Research</b>: Promote and support health research",
"<b>Disease surveillance</b>: Global disease monitoring and early warning systems",
"<b>Capacity building</b>: Training health personnel in developing countries",
"<b>Health information</b>: Collect and disseminate health data (ICD, Global Health Observatory)",
"<b>Drug and vaccine regulation</b>: Prequalification of medicines and vaccines",
"<b>Emergency response</b>: Health Cluster coordination during disasters and outbreaks (PHEIC)",
"<b>Advocacy</b>: Health in all policies; SDG 3"],1): story.append(nb(n,f))
story += [sub("WHO Regions and Headquarters")]
story += [tbl(
["Region","Headquarters"],
[["AFRO (African Region)","Brazzaville, Congo"],
["AMRO/PAHO (Americas)","Washington D.C., USA"],
["EMRO (Eastern Mediterranean)","Cairo, Egypt"],
["EURO (European Region)","Copenhagen, Denmark"],
["SEARO (South-East Asia)","New Delhi, India"],
["WPRO (Western Pacific)","Manila, Philippines"],
],
widths=[6*cm,10*cm]
)]
story.append(hr())
story += [q_box("II","UNICEF – Activities in Child Nutrition, Child Health and Child Survival"), sp(6)]
story += [sec("UNICEF – United Nations Children's Fund")]
story += [p("Established: <b>1946</b> (initially for post-war European children; now global). "
"Headquarters: <b>New York, USA</b>. Nobel Peace Prize 1965.")]
story += [sub("Activities in Child Nutrition")]
story += [b("CMAM: Community-based Management of Acute Malnutrition"),
b("RUTF (Ready-to-Use Therapeutic Food) supply for SAM"),
b("SBCC (Social and Behaviour Change Communication) on infant feeding"),
b("Growth monitoring and promotion programmes"),
b("Salt iodisation and micronutrient supplementation programmes")]
story += [sub("Activities in Child Health")]
story += [b("Immunization: Procurement and supply of vaccines globally (GAVI partnership)"),
b("IMCI (Integrated Management of Childhood Illness) training"),
b("Diarrhoea prevention: ORS and zinc supplementation scale-up"),
b("Malaria: ITN (insecticide-treated nets) distribution"),
b("HIV/AIDS: PMTCT (prevention of mother-to-child transmission)"),
b("Child protection from violence, abuse and exploitation")]
story += [sub("Improving Child Survival")]
story += [b("GOBI-FFF strategy (Growth monitoring, ORS, Breastfeeding, Immunisation, Food supplementation, Female education, Family planning)"),
b("Emergency relief during conflicts and natural disasters"),
b("Advocacy for child rights (UN Convention on Rights of the Child)")]
story.append(hr())
story += [q_box("III","FAO"), sp(4)]
story += [p("<b>FAO – Food and Agriculture Organization</b>. Established 1945. Headquarters: Rome, Italy. "
"Functions: Eliminate hunger (Zero Hunger – SDG 2); improve agricultural productivity; "
"promote food security; technical assistance in agriculture and fisheries; "
"set food safety standards (Codex Alimentarius Commission with WHO); "
"monitor world food situation; provide policy guidance.")]
story += [hr()]
story += [q_box("V","WHO Regions and Their Headquarters","3"), sp(4)]
story += [p("(See Q.I above for the complete WHO Regions table.)")]
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════
# CH 24 – MISCELLANEOUS
# ══════════════════════════════════════════════════════════════════
story += [ch_box(24,"Miscellaneous",""), sp(8)]
story += [q_box("I","Vaccination for International Travellers","5"), sp(6)]
story += [sec("VACCINATION FOR INTERNATIONAL TRAVELLERS")]
story += [sub("Mandatory Vaccines (Required by some countries)")]
story += [tbl(
["Vaccine","Requirement","Countries / Route"],
[["Yellow Fever","Mandatory for entry","Travelling to/from endemic areas in Africa and South America; single dose; valid for life"],
["Meningococcal (ACWY)","Mandatory for Hajj/Umrah","Saudi Arabia requires ACWY vaccine for pilgrims"],
["COVID-19","Some countries require","Check destination country's current rules"],
],
widths=[4*cm,4.5*cm,7.5*cm]
)]
story += [sub("Recommended Vaccines (Based on Travel Destination)")]
story += [tbl(
["Vaccine","When to Give"],
[["Hepatitis A","Travelling to developing countries (poor sanitation)"],
["Hepatitis B","If not previously vaccinated; healthcare workers travelling abroad"],
["Typhoid","Travelling to South Asia, Africa; oral or injectable"],
["Rabies (pre-exposure)","Adventure travel, wildlife exposure, remote areas"],
["JE (Japanese Encephalitis)","Rural/agricultural areas in Asia"],
["Cholera","High-risk areas; oral cholera vaccine"],
["Influenza","Annual dose; recommended for all travellers"],
["Malaria prophylaxis","Chloroquine, doxycycline or mefloquine based on destination resistance pattern"],
],
widths=[5*cm,11*cm]
)]
story += [p("<b>Emporiatrics</b> is the branch of medicine dealing with health of travellers. "
"Advice includes: travel insurance, food and water precautions, sun protection, altitude sickness prevention, "
"insect repellent use.")]
story.append(hr())
story += [q_box("II","Focus Group Discussion (FGD)","3"), sp(6)]
story += [sec("FOCUS GROUP DISCUSSION (FGD)")]
story += [p("A <b>FGD</b> is a qualitative research method involving a <b>small group of 6–12 people</b> "
"with common characteristics, led by a <b>moderator</b>, discussing a specific topic in depth. "
"Used in: Needs assessment, formative research, programme evaluation, community diagnosis.")]
story += [sub("Key Features")]
story += [b("Homogeneous group (same age, sex, background) for free discussion"),
b("Moderator guides discussion with open-ended questions; does not direct answers"),
b("90–120 minutes duration; audio/video recorded"),
b("Note-taker records non-verbal cues"),
b("Typically 3–6 FGDs conducted on the same topic for saturation")]
story += [sub("Advantages")]
story += [b("Rich qualitative data in a short time"),
b("Group interaction generates ideas not elicited individually"),
b("Inexpensive; flexible")]
story += [sub("Disadvantages")]
story += [b("Not statistically representative"),
b("Dominant members may influence others"),
b("Moderator bias possible"),
b("Group effect – socially desirable answers")]
story.append(hr())
story += [q_box("III","Guidelines for Defining 'At-Risk' Groups"), sp(6)]
story += [sec("'AT-RISK' GROUPS – DEFINITION AND GUIDELINES")]
story += [p("An <b>'at-risk' group</b> is a subgroup of the population that has a significantly "
"higher probability of developing a specific disease or adverse health outcome compared "
"to the general population, due to specific risk factors.")]
story += [sub("Criteria for Defining 'At-Risk' Groups")]
for n,c in enumerate(["<b>Higher disease incidence or prevalence</b> compared to general population",
"<b>Exposure to specific risk factors</b> (behavioural, occupational, biological, genetic)",
"<b>Biological vulnerability</b>: Age (infants, elderly), sex, immune status, nutritional state",
"<b>Social vulnerability</b>: Poverty, marginalisation, low literacy, migrant status",
"<b>Access to healthcare</b>: Groups with poor access are at higher risk of poor outcomes",
"<b>Epidemiological evidence</b>: Clear association between group membership and outcome"],1):
story.append(nb(n,c))
story += [sub("Examples of At-Risk Groups")]
story += [tbl(
["Disease / Condition","At-Risk Groups"],
[["TB","HIV-positive, malnourished, silicosis, diabetes, healthcare workers, prisoners, homeless"],
["STI / HIV","Multiple sexual partners, sex workers, IVDU, MSM, adolescents"],
["CHD","Hypertensives, diabetics, smokers, obese, positive family history, sedentary"],
["PEM","Children <5 years, pregnant/lactating women, families in poverty"],
["Occupational diseases","Mine workers (silicosis), battery workers (lead), cotton workers (byssinosis)"],
],
widths=[4*cm,12*cm]
)]
# Footer
story += [sp(20), hr(),
Paragraph("Part 2 | Chapters 13–24 | Source: Park's PSM | RGUHS Exam Answers", note_s)]
doc.build(story)
print(f"Part 2 PDF built: {OUTPUT}")
cd /tmp/workspace/psm-exam && python3 generate_part2.py 2>&1
ls -lh /tmp/workspace/psm-exam/*.pdf
PSM Exam Answers Part1
PDF Document · PDF
PSM Exam Answers Part2
PDF Document · PDF
| Chapters | Topics | |
|---|---|---|
| Part 1 | 1–12 | Man & Medicine, Health & Disease, Epidemiology Methods, Screening, Communicable Diseases (Measles, TB, Polio, Dengue, Malaria, Rabies, Leprosy), NCDs (CHD, DM, Obesity), Health Programmes (NVBDCP, NRHM, ASHA), Demography & Family Planning, MCH/Geriatrics (ANC, ICDS, MMR), Healthcare Delivery (3-tier system, PHC), Nutrition (Micronutrients, PEM, Pellagra), Social Sciences |
| Part 2 | 13–24 | SDGs, Environment & Health (Water purification, Air pollution, Global warming, Chlorination, Noise, Solid waste), Hospital Waste BMW, Disaster Management (Triage, Disaster cycle), Occupational Health (full chapter), Genetics (Genetic engineering, Down syndrome), Mental Health (Smoking, Alcohol, Drug dependence), Statistics (Sampling, Registration, Central tendency), Health Education (Models, Principles, Barriers), Health Planning (Bhore Committee, PERT), International Health (WHO, UNICEF, FAO), Miscellaneous |