Iam posting some photos of previous year question papers of psm ruhs university Please provide detailed answers
Generate a PDF quick-reference guide for frequently tested PSM topics
ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "workspace ready"
mkdir -p /tmp/workspace/psm-guide && cat > /tmp/workspace/psm-guide/generate_psm_pdf.py << 'PYEOF' from reportlab.lib.pagesizes import A4 from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import cm, mm from reportlab.lib.colors import (HexColor, white, black, Color) from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable, PageBreak, KeepTogether) from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY from reportlab.platypus import BaseDocTemplate, Frame, PageTemplate from reportlab.lib import colors # ── Colour palette ───────────────────────────────────────────────────────────── DARK_BLUE = HexColor('#1a3a6b') # headings MED_BLUE = HexColor('#2563a8') # subheadings LIGHT_BLUE = HexColor('#dce8f8') # table header bg ACCENT = HexColor('#e84545') # key-point red GREEN = HexColor('#1d7a4e') YELLOW_BG = HexColor('#fffbe6') GREY_BG = HexColor('#f4f6fa') BORDER = HexColor('#b0c4de') # ── Page layout ──────────────────────────────────────────────────────────────── W, H = A4 LEFT = RIGHT = 1.8*cm TOP = BOTTOM = 1.6*cm def make_styles(): s = getSampleStyleSheet() s.add(ParagraphStyle('Cover_Title', fontName='Helvetica-Bold', fontSize=28, leading=34, textColor=white, alignment=TA_CENTER, spaceAfter=6)) s.add(ParagraphStyle('Cover_Sub', fontName='Helvetica', fontSize=13, leading=16, textColor=HexColor('#d0e8ff'), alignment=TA_CENTER, spaceAfter=4)) s.add(ParagraphStyle('Cover_Note', fontName='Helvetica-Oblique', fontSize=10, leading=13, textColor=HexColor('#c0d8f0'), alignment=TA_CENTER)) s.add(ParagraphStyle('H1', fontName='Helvetica-Bold', fontSize=14, leading=18, textColor=white, spaceBefore=4, spaceAfter=4, backColor=DARK_BLUE, leftIndent=-6, rightIndent=-6, borderPad=5)) s.add(ParagraphStyle('H2', fontName='Helvetica-Bold', fontSize=11, leading=14, textColor=DARK_BLUE, spaceBefore=8, spaceAfter=3, borderPad=2)) s.add(ParagraphStyle('H3', fontName='Helvetica-Bold', fontSize=9.5, leading=13, textColor=MED_BLUE, spaceBefore=5, spaceAfter=2)) s.add(ParagraphStyle('Body', fontName='Helvetica', fontSize=8.5, leading=12, textColor=HexColor('#1a1a2e'), spaceAfter=3)) s.add(ParagraphStyle('Bullet', fontName='Helvetica', fontSize=8.5, leading=11.5, textColor=HexColor('#1a1a2e'), leftIndent=12, bulletIndent=4, spaceAfter=1.5)) s.add(ParagraphStyle('SmallBold', fontName='Helvetica-Bold', fontSize=8, leading=11, textColor=DARK_BLUE)) s.add(ParagraphStyle('KeyFact', fontName='Helvetica-Bold', fontSize=8.5, leading=12, textColor=ACCENT, spaceAfter=2)) s.add(ParagraphStyle('Footer', fontName='Helvetica-Oblique', fontSize=7.5, textColor=HexColor('#666688'), alignment=TA_CENTER)) s.add(ParagraphStyle('TH', fontName='Helvetica-Bold', fontSize=8, leading=10, textColor=white, alignment=TA_CENTER)) s.add(ParagraphStyle('TD', fontName='Helvetica', fontSize=7.8, leading=10.5, textColor=black)) s.add(ParagraphStyle('TDB', fontName='Helvetica-Bold', fontSize=7.8, leading=10.5, textColor=DARK_BLUE)) return s S = make_styles() def h1(text): return Paragraph(f' {text}', S['H1']) def h2(text): return Paragraph(text, S['H2']) def h3(text): return Paragraph(text, S['H3']) def body(text): return Paragraph(text, S['Body']) def bullet(text): return Paragraph(f'• {text}', S['Bullet']) def key(text): return Paragraph(text, S['KeyFact']) def sp(h=4): return Spacer(1, h) def hr(): return HRFlowable(width='100%', thickness=0.6, color=BORDER, spaceAfter=4, spaceBefore=2) def two_col_table(rows, col_widths=None, header=True): usable = W - LEFT - RIGHT if col_widths is None: col_widths = [usable*0.32, usable*0.68] style = [ ('BACKGROUND', (0,0), (-1,0 if header else -1), LIGHT_BLUE if header else GREY_BG), ('TEXTCOLOR', (0,0), (-1,0), DARK_BLUE), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 8), ('LEADING', (0,0), (-1,-1), 11), ('ROWBACKGROUNDS', (0,1), (-1,-1), [white, GREY_BG]), ('GRID', (0,0), (-1,-1), 0.4, BORDER), ('VALIGN', (0,0), (-1,-1), 'TOP'), ('LEFTPADDING',(0,0), (-1,-1), 5), ('RIGHTPADDING',(0,0), (-1,-1), 5), ('TOPPADDING', (0,0), (-1,-1), 3), ('BOTTOMPADDING',(0,0), (-1,-1), 3), ] para_rows = [] for i, row in enumerate(rows): para_rows.append([ Paragraph(str(cell), S['SmallBold'] if i==0 and header else (S['TDB'] if i>0 and j==0 else S['TD'])) for j, cell in enumerate(row) ]) return Table(para_rows, colWidths=col_widths, style=TableStyle(style), hAlign='LEFT') def multi_col_table(headers, data_rows, col_widths=None): usable = W - LEFT - RIGHT n = len(headers) if col_widths is None: col_widths = [usable/n]*n all_rows = [headers] + data_rows para_rows = [] for i, row in enumerate(all_rows): para_rows.append([ Paragraph(str(cell), S['SmallBold'] if i==0 else S['TD']) for cell in row ]) style = [ ('BACKGROUND', (0,0), (-1,0), DARK_BLUE), ('TEXTCOLOR', (0,0), (-1,0), white), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 8), ('LEADING', (0,0), (-1,-1), 11), ('ROWBACKGROUNDS', (0,1), (-1,-1), [white, GREY_BG]), ('GRID', (0,0), (-1,-1), 0.4, BORDER), ('VALIGN', (0,0), (-1,-1), 'TOP'), ('LEFTPADDING',(0,0), (-1,-1), 4), ('RIGHTPADDING',(0,0), (-1,-1), 4), ('TOPPADDING', (0,0), (-1,-1), 3), ('BOTTOMPADDING',(0,0), (-1,-1), 3), ] return Table(para_rows, colWidths=col_widths, style=TableStyle(style), hAlign='LEFT') # ══════════════════════════════════════════════════════════════════════ # PAGE TEMPLATE WITH HEADER/FOOTER # ══════════════════════════════════════════════════════════════════════ page_num = [0] def on_page(canvas, doc): page_num[0] += 1 canvas.saveState() # footer line canvas.setStrokeColor(BORDER) canvas.setLineWidth(0.5) canvas.line(LEFT, BOTTOM-2, W-RIGHT, BOTTOM-2) canvas.setFont('Helvetica-Oblique', 7) canvas.setFillColor(HexColor('#556677')) canvas.drawString(LEFT, BOTTOM-10, 'PSM Quick Reference Guide — RUHS Community Medicine | Based on Park\'s PSM') canvas.drawRightString(W-RIGHT, BOTTOM-10, f'Page {page_num[0]}') canvas.restoreState() # ══════════════════════════════════════════════════════════════════════ # CONTENT BUILDER # ══════════════════════════════════════════════════════════════════════ def build_content(): story = [] usable = W - LEFT - RIGHT # ── COVER PAGE ────────────────────────────────────────────────── story.append(Spacer(1, 1.5*cm)) # Blue banner banner_data = [[Paragraph( '<font size=26><b>PSM QUICK REFERENCE GUIDE</b></font>', S['Cover_Title'])]] banner = Table(banner_data, colWidths=[usable], style=TableStyle([ ('BACKGROUND', (0,0), (-1,-1), DARK_BLUE), ('ALIGN', (0,0), (-1,-1), 'CENTER'), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('TOPPADDING', (0,0), (-1,-1), 18), ('BOTTOMPADDING',(0,0),(-1,-1), 18), ('LEFTPADDING', (0,0),(-1,-1), 10), ('ROUNDEDCORNERS', [8,8,8,8]), ])) story.append(banner) story.append(sp(10)) story.append(Paragraph('Preventive & Social Medicine', S['Cover_Sub'])) story.append(Paragraph('Frequently Tested Topics for RUHS 3rd Year MBBS', S['Cover_Note'])) story.append(sp(6)) story.append(Paragraph('Community Medicine Paper-II · New Scheme', S['Cover_Note'])) story.append(sp(8)) # TOC box toc = [ ['CONTENTS'], ['1. Nutrition & Dietetics'], ['2. Primary Health Care (PHC)'], ['3. National Health Programmes'], ['4. Epidemiology & Disease Control'], ['5. Environmental Health & Housing'], ['6. Biomedical Waste Management'], ['7. Occupational Health'], ['8. Health Education & Communication'], ['9. Health Planning & Management'], ['10. International Health Organisations'], ['11. Maternal & Child Health'], ['12. Important Numbers & Values'], ] toc_paras = [[Paragraph(r[0], S['SmallBold'] if i==0 else S['Body'])] for i,r in enumerate(toc)] toc_table = Table(toc_paras, colWidths=[usable*0.6], style=TableStyle([ ('BACKGROUND',(0,0),(-1,0), MED_BLUE), ('TEXTCOLOR', (0,0),(-1,0), white), ('BACKGROUND',(0,1),(-1,-1), GREY_BG), ('GRID', (0,0),(-1,-1), 0.4, BORDER), ('LEFTPADDING',(0,0),(-1,-1), 8), ('TOPPADDING',(0,0),(-1,-1), 4), ('BOTTOMPADDING',(0,0),(-1,-1), 4), ]), hAlign='CENTER') story.append(toc_table) story.append(PageBreak()) # ── SECTION 1: NUTRITION ───────────────────────────────────────── story.append(h1('1. NUTRITION & DIETETICS')) story.append(sp(4)) story.append(h2('1.1 Reference Protein (Egg Protein)')) story.append(key('NPU = 100 (maximum) | BV = 100 | reference for all other proteins')) story.append(two_col_table([ ['Parameter', 'Value'], ['Net Protein Utilization (NPU)', '100 (maximum possible)'], ['Biological Value (BV)', '100'], ['Digestibility', '97%'], ['Protein content per 100g egg', '~12.7 g'], ['Energy per 100g whole egg', '~150 kcal'], ['Cholesterol per 100g', '~424 mg'], ])) story.append(sp(6)) story.append(h2('1.2 Limiting Amino Acids')) story.append(two_col_table([ ['Food', 'Limiting Amino Acid'], ['Pulses / Legumes', 'Methionine (& Tryptophan)'], ['Cereals (rice, wheat)', 'Lysine'], ['Maize', 'Lysine & Tryptophan'], ['Gelatin', 'Tryptophan'], ['Cereal + Pulse mix', 'Complementation — improves quality'], ])) story.append(sp(6)) story.append(h2('1.3 Recommended Dietary Allowances (ICMR 2020) — Key Values')) story.append(multi_col_table( ['Group', 'Calcium (mg)', 'Iron (mg)', 'Vit A (µg RE)', 'Folic Acid (µg)'], [ ['Adult man (sedentary)', '800', '17', '800', '220'], ['Adult woman (sedentary)', '800', '21', '800', '180'], ['Pregnancy', '1200', '35', '900', '500'], ['Lactation', '1200', '21', '950', '300'], ['Infant 0-6m', '500', '0', '350', '25'], ['Child 1-3y', '600', '9', '400', '80'], ], col_widths=[usable*0.28, usable*0.18, usable*0.14, usable*0.20, usable*0.20] )) story.append(sp(6)) story.append(h2('1.4 Glycaemic Index (GI)')) story.append(multi_col_table( ['Category', 'GI Range', 'Examples'], [ ['High GI', '>70', 'White bread, glucose, baked potato, white rice'], ['Medium GI', '56-69', 'Brown rice, banana, orange juice, honey'], ['Low GI', '<55', 'Oats, most legumes, most fruits, milk, green vegetables'], ], col_widths=[usable*0.20, usable*0.20, usable*0.60] )) story.append(body('GI lowered by: fibre, fat, protein, acidity, less cooking | GI raised by: overcooking, pureeing, ripeness')) story.append(sp(6)) story.append(h2('1.5 Vitamin A Deficiency — WHO Xerophthalmia Grading')) story.append(multi_col_table( ['Grade', 'Sign', 'Clinical Feature'], [ ['XN', 'Night blindness', 'First symptom; inability to see in dim light'], ['X1A', 'Conjunctival xerosis', 'Dry, lusterless conjunctiva'], ['X1B', "Bitot's spots", 'Foamy/cheesy spots on bulbar conjunctiva — PATHOGNOMONIC'], ['X2', 'Corneal xerosis', 'Dry, hazy cornea'], ['X3A', 'Corneal ulcer <1/3', 'Ulceration/keratomalacia <1/3 cornea'], ['X3B', 'Keratomalacia >1/3', 'Blindness risk — URGENT'], ['XS', 'Corneal scar', 'Healed stage'], ['XF', 'Xerophthalmic fundus', 'White dots in peripheral retina'], ], col_widths=[usable*0.10, usable*0.25, usable*0.65] )) story.append(key('Treatment: 2,00,000 IU Vit A orally on Day 0, Day 1, Day 14 | Prevention: 2,00,000 IU 6-monthly (9 months – 5 years)')) story.append(sp(6)) story.append(h2('1.6 Fluorine — The Two-Edged Sword')) story.append(multi_col_table( ['Level in water', 'Effect'], [ ['< 0.5 ppm', 'Dental caries increased'], ['0.5–1.2 ppm', 'Optimal — protection from caries, no harm (India: 0.7–1.2 ppm)'], ['> 1.5 ppm', 'Dental fluorosis — mottling, staining, pitting'], ['> 3 ppm', 'Skeletal fluorosis — osteosclerosis, crippling'], ['> 5 ppm', 'Neurological complications'], ], col_widths=[usable*0.28, usable*0.72] )) story.append(sp(6)) story.append(h2('1.7 Food Additives vs Food Adulterants')) story.append(multi_col_table( ['Feature', 'Food Additives', 'Food Adulterants'], [ ['Legality', 'Legal (FSSAI approved)', 'ILLEGAL'], ['Intent', 'Benefit consumer (preservation, colour)', 'Defraud/harm consumer'], ['Safety', 'Tested, within permissible limits', 'Often toxic'], ['Examples', 'Tartrazine, sodium benzoate, BHA', 'Metanil yellow in turmeric, chalk in milk'], ['Regulation', 'FSSAI Act 2006 — Schedule', 'FSSAI Act 2006 — Offence'], ], col_widths=[usable*0.22, usable*0.39, usable*0.39] )) story.append(PageBreak()) # ── SECTION 2: PHC ──────────────────────────────────────────────── story.append(h1('2. PRIMARY HEALTH CARE (PHC)')) story.append(sp(4)) story.append(key('Alma-Ata Declaration, 1978 — USSR (Kazakhstan) | WHO–UNICEF Joint Conference | 134 countries')) story.append(sp(4)) story.append(h2('2.1 Definition')) story.append(body('"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."')) story.append(sp(5)) story.append(h2('2.2 Eight Essential Elements (Alma-Ata) — Mnemonic: MMEAIIAP')) elts = [ ['1', 'Education about prevailing health problems & prevention/control methods'], ['2', 'Promotion of food supply and proper nutrition'], ['3', 'Adequate supply of safe water and basic sanitation'], ['4', 'Maternal and child health care, including family planning'], ['5', 'Immunization against major infectious diseases'], ['6', 'Integrated prevention & control of locally endemic diseases'], ['7', 'Appropriate treatment of common diseases and injuries'], ['8', 'Provision of essential drugs'], ] story.append(multi_col_table(['#', 'Essential Element'], elts, col_widths=[usable*0.06, usable*0.94])) story.append(sp(6)) story.append(h2('2.3 Principles of PHC')) principles = [ ['Principle', 'Explanation'], ['Equitable distribution', 'Resources allocated according to need — NOT equal'], ['Community participation', 'People involved in planning & implementation'], ['Intersectoral coordination', 'Health + agriculture + education + water + housing collaborate'], ['Appropriate technology', 'Scientifically sound, affordable, adaptable, acceptable'], ['Focus on prevention & promotion', 'Not only curative care'], ['Decentralization', 'Decision-making at lowest appropriate level'], ] story.append(two_col_table(principles, col_widths=[usable*0.32, usable*0.68])) story.append(sp(6)) story.append(h2('2.4 Levels of Health Care in India')) story.append(multi_col_table( ['Level', 'Facility', 'Population Served', 'Staff'], [ ['Primary', 'Sub-Centre', '3,000–5,000', 'ANM + MPW(M)'], ['Primary', 'PHC', '20,000–30,000', 'Medical Officer + 14 staff'], ['Primary', 'CHC', '80,000–1,20,000', '4 specialists + 30 beds'], ['Secondary', 'Sub-district/District Hospital', 'District', 'Specialist care'], ['Tertiary', 'Medical college / AIIMS / PGI', 'Regional', 'Super-specialist'], ], col_widths=[usable*0.14, usable*0.28, usable*0.22, usable*0.36] )) story.append(key('Sub-Centre drug kit: Kit A (ANM) — ORS, IFA, OCP, condoms, Vit A, Paracetamol, Cotrimoxazole, MgSO4, Oxytocin')) story.append(sp(6)) story.append(h2('2.5 Ayushman Arogya Mandir (AAM) — formerly Health & Wellness Centres')) story.append(body('Renamed 2023 | Target: 1,50,000 AAMs | Staffed by Community Health Officer (CHO) | 12 CPHC package services')) story.append(sp(2)) cphc = [ ['1. Pregnancy, childbirth, newborn care', '2. Child health services', '3. Family planning'], ['4. Adolescent health', '5. Communicable disease management', '6. NCD management'], ['7. Oral health', '8. Mental health', '9. ENT conditions'], ['10. Ophthalmic care', '11. Elderly & palliative care', '12. Emergency/trauma (basic)'], ] cphc_para = [[Paragraph(cell, S['TD']) for cell in row] for row in cphc] story.append(Table(cphc_para, colWidths=[usable/3]*3, style=TableStyle([ ('GRID', (0,0),(-1,-1), 0.4, BORDER), ('BACKGROUND',(0,0),(-1,-1), GREY_BG), ('FONTSIZE',(0,0),(-1,-1), 7.8), ('TOPPADDING',(0,0),(-1,-1), 3), ('BOTTOMPADDING',(0,0),(-1,-1), 3), ('LEFTPADDING',(0,0),(-1,-1), 5), ]))) story.append(PageBreak()) # ── SECTION 3: NATIONAL HEALTH PROGRAMMES ───────────────────────── story.append(h1('3. NATIONAL HEALTH PROGRAMMES')) story.append(sp(4)) story.append(h2('3.1 Mission Indradhanush')) story.append(multi_col_table( ['Feature', 'Details'], [ ['Launch', 'December 25, 2014 | Intensified versions: IMI 2.0, 3.0, 4.0'], ['Target', 'Children < 2 yrs + pregnant women | unvaccinated/partially vaccinated'], ['Goal', '90%+ full immunization coverage'], ['Focus areas', 'Urban slums, migration areas, conflict zones, hard-to-reach areas'], ['Vaccines', 'BCG, OPV, Pentavalent (DPT+HepB+Hib), PCV, Rotavirus, MR, JE (endemic), Vit A'], ], col_widths=[usable*0.22, usable*0.78] )) story.append(sp(6)) story.append(h2('3.2 Janani Suraksha Yojana (JSY) — ASHA Incentives')) story.append(multi_col_table( ['State Category', 'Rural (ASHA)', 'Urban (ASHA)', 'Mother cash benefit'], [ ['Low Performing States (LPS)*', '₹1000', '₹600', '₹1400 (rural) / ₹1000 (urban)'], ['High Performing States (HPS)', '₹600', '₹200', '₹700 (rural) / ₹600 (urban)'], ], col_widths=[usable*0.35, usable*0.20, usable*0.20, usable*0.25] )) story.append(body('*LPS: UP, Uttarakhand, Bihar, Jharkhand, MP, Rajasthan, Orissa, J&K, Assam | JSY encourages institutional deliveries')) story.append(sp(6)) story.append(h2('3.3 Anemia Mukt Bharat (AMB) — 5×5 Strategy (2018)')) story.append(multi_col_table( ['Target Group', 'IFA Dose'], [ ['Children 6–59 months', '1 mg/kg/day elemental iron (syrup)'], ['Children 5–9 years', '1 tablet/week (45 mg iron + 400 µg folic acid)'], ['Adolescents 10–19 yrs', '1 tablet/week (same)'], ['Women 15–49 years (non-pregnant)', '1 tablet/week'], ['Pregnant women', '1 tablet/day (180 days) — 60 mg iron + 500 µg folic acid'], ], col_widths=[usable*0.40, usable*0.60] )) story.append(body('5 interventions: IFA supplementation | Deworming | SBCC | Testing & treatment | Delay marriage')) story.append(sp(6)) story.append(h2('3.4 NVBDCP — Key Disease Control Strategies')) story.append(multi_col_table( ['Disease', 'Vector', 'Key Control Measure'], [ ['Malaria', 'Anopheles mosquito', 'IRS, LLINs, IVM, early case detection + ACT treatment'], ['Dengue/Chikungunya', 'Aedes aegypti', 'Source reduction, container surveillance, fogging'], ['Filaria', 'Culex mosquito', 'Mass Drug Administration (MDA) — DEC + Albendazole'], ['Kala-Azar', 'Phlebotomus sandfly', 'IRS with DDT/Synthetic pyrethroid, early treatment'], ['JE', 'Culex mosquito', 'SA-14-14-2 vaccine, pig vaccination, vector control'], ], col_widths=[usable*0.20, usable*0.22, usable*0.58] )) story.append(sp(6)) story.append(h2('3.5 Disease Control / Elimination / Eradication')) story.append(multi_col_table( ['Term', 'Definition', 'Example'], [ ['Control', 'Reduce incidence/prevalence to locally acceptable level; ongoing measures needed', 'Malaria control in India'], ['Elimination', 'Zero incidence in defined geographic area; ongoing measures still required', 'Polio (India 2014), Neonatal Tetanus (2015), Yaws (2016)'], ['Eradication', 'Permanent worldwide zero; no further intervention needed', 'Smallpox (1980), Rinderpest (2011)'], ['Extinction', 'Pathogen no longer exists anywhere including laboratories', 'None achieved yet'], ], col_widths=[usable*0.18, usable*0.46, usable*0.36] )) story.append(PageBreak()) # ── SECTION 4: EPIDEMIOLOGY ──────────────────────────────────────── story.append(h1('4. EPIDEMIOLOGY & DISEASE CONTROL')) story.append(sp(4)) story.append(h2('4.1 Mortality Rates in Infancy & Childhood')) story.append(multi_col_table( ['Indicator', 'Formula', 'India (SRS 2020 approx.)'], [ ['Neonatal Mortality Rate (NMR)', 'Deaths 0–28 days / LB × 1000', '~16'], ['Post-neonatal Mortality Rate', 'Deaths 28d–1yr / LB × 1000', '~7'], ['Infant Mortality Rate (IMR)', 'Deaths <1 yr / LB × 1000', '~28 — MOST SENSITIVE INDICATOR'], ['Perinatal Mortality Rate', '(Stillbirths + Early NND) / (LB+SB) × 1000', '~30'], ['Under-5 Mortality Rate (U5MR)', 'Deaths <5 yr / LB × 1000', '~32'], ['Maternal Mortality Ratio (MMR)', 'Maternal deaths / LB × 1,00,000', '~97 (SRS 2018-20)'], ], col_widths=[usable*0.30, usable*0.40, usable*0.30] )) story.append(key('IMR = most sensitive indicator of health status of a community & socioeconomic development')) story.append(sp(6)) story.append(h2('4.2 Faecal-Oral Route Diseases — F-Diagram')) story.append(body('Source: Faeces → Fingers / Flies / Food / Fluids / Fields → New Host')) story.append(sp(3)) story.append(multi_col_table( ['Category', 'Diseases'], [ ['Bacterial', 'Cholera, Typhoid, Paratyphoid, Bacillary dysentery (Shigella), ETEC diarrhoea, Leptospirosis'], ['Viral', 'Hepatitis A, Hepatitis E, Polio, Rotavirus, Norovirus'], ['Protozoal', 'Amoebiasis, Giardiasis, Cryptosporidiosis'], ['Helminthic', 'Ascariasis, Hookworm, Guinea worm (dracunculiasis)'], ], col_widths=[usable*0.18, usable*0.82] )) story.append(sp(6)) story.append(h2('4.3 Water Testing — Horrocks Apparatus')) story.append(body('5 porcelain cups (A–E) with increasing bleaching powder concentrations.')) story.append(body('Starch-iodide indicator: BLUE colour = FREE chlorine present')) story.append(multi_col_table( ['Cup', 'Free Cl₂ (ppm)', 'Interpretation'], [ ['Cup A (1st)', '0', 'No chlorine'], ['Cup B (2nd)', '0.25', ''], ['Cup C (3rd)', '0.5', 'MINIMUM REQUIRED — turns blue = adequate residual'], ['Cup D (4th)', '0.75', ''], ['Cup E (5th)', '1.0', 'Maximum'], ], col_widths=[usable*0.18, usable*0.22, usable*0.60] )) story.append(key('Target: 0.5 mg/L free residual chlorine | India requirement at consumer end: 0.2 mg/L')) story.append(sp(6)) story.append(h2('4.4 Disaster Cycle Phases')) story.append(multi_col_table( ['Phase', 'Type', 'Activities'], [ ['Pre-disaster', 'Mitigation', 'Building codes, early warning systems, land use planning, flood embankments'], ['Pre-disaster', 'Preparedness', 'Disaster plans, mock drills, stockpiling, training, EOC establishment'], ['During disaster', 'Response', 'Search & rescue, triage, evacuation, first aid, emergency medical care'], ['Post-disaster', 'Recovery/Rehabilitation', 'Restore services, psychological support, epidemiological surveillance'], ['Post-disaster', 'Development', 'Build back better — reduce future vulnerability'], ], col_widths=[usable*0.18, usable*0.20, usable*0.62] )) story.append(key('NDMA: chaired by Prime Minister | SDMA: chaired by Chief Minister | DDMA: chaired by District Collector')) story.append(PageBreak()) # ── SECTION 5: ENVIRONMENTAL HEALTH ─────────────────────────────── story.append(h1('5. ENVIRONMENTAL HEALTH & HOUSING')) story.append(sp(4)) story.append(h2('5.1 Stevenson Screen')) story.append(body('A standardized louvred white wooden box housing thermometers (dry bulb, wet bulb, max-min). Purpose: measure AIR TEMPERATURE in a standardised, comparable way.')) story.append(two_col_table([ ['Instrument', 'Measures'], ['Stevenson Screen + Thermometers', 'Air temperature'], ['Kata thermometer', 'Cooling power of air (temp + wind effect combined)'], ['Anemometer', 'Air velocity / wind speed'], ['Hygrometer', 'Relative humidity'], ['Barometer', 'Atmospheric pressure'], ["Sling's Psychrometer", 'Wet & dry bulb temp → relative humidity'], ['Pyrheliometer', 'Solar radiation / sunlight'], ])) story.append(sp(6)) story.append(h2('5.2 Water Filtration — Slow vs Rapid Sand Filter')) story.append(multi_col_table( ['Feature', 'Slow Sand Filter', 'Rapid Sand Filter'], [ ['Filtration rate', '0.1–0.4 m/hour', '5–15 m/hour'], ['Schmutzdecke (biolog. layer)', 'Present — KEY to purification', 'Absent'], ['Coagulation', 'Not needed', 'Required (alum)'], ['Bacterial removal', '98–99%', '90–98%'], ['Turbidity requirement', '<60 NTU', 'Higher turbidity OK'], ['Cleaning', 'Manual scraping', 'Hydraulic backwashing'], ['Area required', 'Large', 'Smaller'], ['Best for', 'Rural / small communities', 'Urban / large-scale'], ], col_widths=[usable*0.28, usable*0.36, usable*0.36] )) story.append(sp(6)) story.append(h2('5.3 Breakpoint Chlorination')) story.append(body('Process of adding chlorine until chlorine demand is fully satisfied and free residual chlorine first appears.')) story.append(body('Steps: Chlorine added → reacts with organics/ammonia → forms chloramines (combined chlorine) → further addition breaks down chloramines → BREAKPOINT → free residual chlorine appears')) story.append(key('Goal: ≥0.5 mg/L free residual chlorine at tap | Prevents regrowth of bacteria')) story.append(sp(6)) story.append(h2('5.4 Criteria for Healthy Housing (Winslow\'s 4 Needs)')) story.append(multi_col_table( ['Need', 'Specific Requirements'], [ ['Physiological needs', 'Thermal comfort, adequate light (daylight factor ≥2% in kitchen), clean air, protection from weather'], ['Psychological needs', 'Privacy, freedom from overcrowding, aesthetic surroundings, noise control'], ['Protection from infection', 'Safe water, sewage disposal, no vectors, adequate food storage, no overcrowding'], ['Protection from accidents', 'Structural safety, fire protection, handrails on stairs, no toxic hazards'], ], col_widths=[usable*0.30, usable*0.70] )) story.append(body('Key standards: Min. floor area 9.5 m²/person | Air space 14 m³/person (India) | Window area ≥10% of floor | Overcrowding: >1.5 persons/room')) story.append(sp(6)) story.append(h2('5.5 Methods of Refuse Disposal')) story.append(multi_col_table( ['Method', 'Description', 'Remarks'], [ ['Sanitary landfill', 'Waste compacted, covered daily with soil', 'MOST SATISFACTORY — prevents vectors, odour'], ['Incineration', 'High-temperature burning', 'Best for infectious waste; 90% volume reduction'], ['Composting', 'Aerobic/anaerobic biological decomposition', 'Produces manure; eco-friendly'], ['Pulverization', 'Grinding to reduce volume', 'Used before landfilling'], ['Open dumping', 'Uncontrolled disposal', 'NOT recommended — causes fly/rodent breeding'], ], col_widths=[usable*0.22, usable*0.40, usable*0.38] )) story.append(PageBreak()) # ── SECTION 6: BIOMEDICAL WASTE ──────────────────────────────────── story.append(h1('6. BIOMEDICAL WASTE MANAGEMENT')) story.append(key('Governed by BMW Management Rules 2016 (amended 2019) | Under Environment Protection Act 1986')) story.append(sp(5)) story.append(h2('6.1 Colour-Coded Categories')) bwm_data = [ ['YELLOW', 'Pathological waste, anatomical, discarded medicines, solid chemical waste, bedpans, bags', 'Incineration or deep burial (non-plastic) / Autoclave (plastic) then shredding'], ['RED', 'Contaminated recyclable plastic: IV sets, IV bottles, catheters, urine bags, syringes (without needle)', 'Autoclave / Microwave → Shredding → Recycling'], ['WHITE (Translucent)', 'SHARPS: Needles, blades, lancets, broken glass with blood', 'Autoclave → Mutilation/shredding → Encapsulation / Cement concrete'], ['BLUE', 'Glassware, metallic implants, discarded glass', 'Autoclave → Return to vendor or recycler'], ] bwm_para = [[Paragraph(r[0], S['SmallBold']), Paragraph(r[1], S['TD']), Paragraph(r[2], S['TD'])] for r in bwm_data] col_colours = [HexColor('#fffab0'), HexColor('#ffcccc'), HexColor('#ffffff'), HexColor('#cce0ff')] bwm_table = Table( [['Colour', 'Waste Type', 'Treatment']] + bwm_data, colWidths=[usable*0.12, usable*0.48, usable*0.40], style=TableStyle([ ('BACKGROUND',(0,0),(-1,0), DARK_BLUE), ('TEXTCOLOR',(0,0),(-1,0), white), ('FONTNAME',(0,0),(-1,0), 'Helvetica-Bold'), ('FONTSIZE',(0,0),(-1,-1), 8), ('LEADING',(0,0),(-1,-1), 11), ('GRID',(0,0),(-1,-1), 0.4, BORDER), ('VALIGN',(0,0),(-1,-1), 'TOP'), ('BACKGROUND',(0,1),(-1,1), HexColor('#fffab0')), ('BACKGROUND',(0,2),(-1,2), HexColor('#ffe0e0')), ('BACKGROUND',(0,3),(-1,3), HexColor('#f8f8f8')), ('BACKGROUND',(0,4),(-1,4), HexColor('#ddeeff')), ('LEFTPADDING',(0,0),(-1,-1), 5), ('TOPPADDING',(0,0),(-1,-1), 3), ('BOTTOMPADDING',(0,0),(-1,-1), 3), ]) ) story.append(bwm_table) story.append(key('REMEMBER: Urinary catheter → RED bin | Sharps → WHITE bin | Discarded medicines → YELLOW bin')) story.append(PageBreak()) # ── SECTION 7: OCCUPATIONAL HEALTH ───────────────────────────────── story.append(h1('7. OCCUPATIONAL HEALTH')) story.append(sp(4)) story.append(h2('7.1 Occupational Cancers — Key Associations')) story.append(multi_col_table( ['Agent', 'Cancer', 'Industry/Occupation'], [ ['Asbestos', 'Mesothelioma, Lung cancer (synergistic with smoking)', 'Construction, insulation, shipbuilding'], ['Benzene', 'Leukaemia (AML)', 'Rubber, petroleum, chemical'], ['Vinyl chloride monomer', 'Hepatic angiosarcoma', 'PVC manufacture'], ['Beta-naphthylamine', 'Bladder cancer', 'Dye industry'], ['Arsenic', 'Lung, skin, bladder cancer', 'Mining, smelting, pesticide'], ['Chromium VI', 'Lung cancer, nasal cancer', 'Chrome plating, cement'], ['Coal tar / Soot / PAH', 'Scrotal cancer (first described OC — Percivall Pott, 1775)', 'Chimney sweeps'], ['Nickel compounds', 'Nasal sinus + lung cancer', 'Nickel refining'], ['Aflatoxin (Aspergillus)', 'Hepatocellular carcinoma', 'Grain/peanut handling'], ['Ionizing radiation', 'Leukaemia, thyroid, breast cancer', 'Radiology, nuclear industry'], ], col_widths=[usable*0.24, usable*0.36, usable*0.40] )) story.append(sp(6)) story.append(h2('7.2 Pneumoconioses — Dust Diseases')) story.append(multi_col_table( ['Disease', 'Causative Dust', 'Radiological Feature', 'Zone'], [ ['Silicosis', 'Crystalline SiO₂ (quartz)', 'Nodular shadows; "eggshell" hilar calcification', 'Upper'], ['Asbestosis', 'Asbestos fibres', 'Ground glass / basal fibrosis; pleural plaques; "shaggy heart"', 'Lower'], ['Coal Workers\' Pneumo.', 'Coal dust', 'Nodules → PMF (Progressive massive fibrosis)', 'Upper'], ['Byssinosis', 'Cotton/hemp/flax dust', 'Monday fever (worse on Mondays, better by Friday)', '—'], ["Farmer's Lung", 'Mouldy hay (Saccharopolyspora rectivirgula)', 'Extrinsic allergic alveolitis (EAA)', '—'], ['Bagassosis', 'Bagasse (sugar cane dust)', 'EAA / hypersensitivity pneumonitis', '—'], ], col_widths=[usable*0.22, usable*0.26, usable*0.35, usable*0.17] )) story.append(sp(6)) story.append(h2('7.3 Lead Poisoning (Plumbism) — Key Facts')) story.append(two_col_table([ ['Feature', 'Details'], ['Sources', 'Leaded paint, batteries, solder, traditional kajal/surma, contaminated water (lead pipes)'], ['Toxic blood level', '>45 µg/dL | No safe level — action at >5 µg/dL (CDC)'], ['Adults: neuropathy', 'Wrist drop (radial nerve) — extensor muscle weakness'], ['Children: most sensitive', 'Intellectual disability, learning disorders, behavioural problems — irreversible'], ['Haematological', 'Microcytic anaemia; basophilic stippling on peripheral smear; inhibits ALA dehydratase + ferrochelatase'], ['Renal', 'Fanconi syndrome, saturnine gout, nephropathy'], ['Diagnosis', 'Whole blood lead level; urinary delta-ALA; FEP (free erythrocyte protoporphyrin)'], ['Treatment', 'Remove source; Chelation: DMSA (succimer) — oral; BAL (dimercaprol) + EDTA — severe cases'], ])) story.append(sp(6)) story.append(h2('7.4 ESI Act 1948 — Key Points')) story.append(two_col_table([ ['Feature', 'Details'], ['Coverage', 'Factories ≥10 workers (power-using) or ≥20 (non-power); wage limit ≤₹21,000/month'], ['Contribution: Employee', '0.75% of wages'], ['Contribution: Employer', '3.25% of wages'], ['Medical benefit', 'Full medical care for insured + family (unlimited)'], ['Sickness benefit', '70% of wages for 91 days/year'], ['Maternity benefit', '100% wages for 26 weeks'], ['Disablement benefit', '90% wages (temporary) | Proportionate (permanent partial) | 90% for life (permanent total)'], ['Dependants benefit', '90% wages to family if worker dies from employment injury'], ['Funeral expenses', '₹15,000'], ])) story.append(PageBreak()) # ── SECTION 8: HEALTH EDUCATION & COMMUNICATION ───────────────────── story.append(h1('8. HEALTH EDUCATION & COMMUNICATION')) story.append(sp(4)) story.append(h2('8.1 Health Education vs Health Propaganda')) story.append(multi_col_table( ['Feature', 'Health Education', 'Health Propaganda'], [ ['Communication', 'Two-way, participatory', 'One-way, authoritative'], ['Goal', 'Empowerment, informed decision-making', 'Compliance / conformity'], ['Basis', 'Facts, evidence, rational information', 'May use fear/emotion/incomplete info'], ['Autonomy', 'Respects individual autonomy', 'May manipulate'], ['Outcome', 'Lasting behaviour change through understanding', 'Short-term compliance'], ], col_widths=[usable*0.22, usable*0.39, usable*0.39] )) story.append(sp(6)) story.append(h2('8.2 Models of Health Education')) story.append(multi_col_table( ['Model', 'Key Concept'], [ ['KAP Model', 'Knowledge → Attitude → Practice (linear, simplistic)'], ['Health Belief Model (Rosenstock)', 'Perceived susceptibility + severity → perceived benefits − barriers + cue to action → behaviour'], ['Precede-Proceed (Green)', 'Predisposing + Enabling + Reinforcing factors → behaviour → environment/health'], ['Stages of Change (Prochaska)', 'Pre-contemplation → Contemplation → Preparation → Action → Maintenance'], ['Social Learning Theory (Bandura)', 'Self-efficacy + observational learning → behaviour change'], ], col_widths=[usable*0.32, usable*0.68] )) story.append(sp(6)) story.append(h2('8.3 Barriers to Communication')) story.append(two_col_table([ ['Type of Barrier', 'Examples'], ['Sender', 'Poor word choice, jargon, poor articulation, information overload'], ['Channel', 'Noise, poor media selection, distortion'], ['Receiver', 'Inattention, poor listening, cultural differences, low literacy'], ['Feedback', 'No opportunity to respond, fear of expressing views'], ['Semantic', 'Different meanings of words in different contexts/cultures'], ['Psychological', 'Prejudice, stereotyping, fear, low self-esteem'], ['Environmental', 'Physical noise, uncomfortable setting, distractions'], ])) story.append(sp(6)) story.append(h2('8.4 Group Discussion as Health Education Method')) story.append(body('Group size: 8–15 | Led by a trained facilitator')) story.append(body('Advantages: Two-way communication, attitude change, peer learning, practical problem identification')) story.append(body('Process: Introduction → Open discussion → Summarization → Conclusion')) story.append(body('Compared to: Lecture (one-way), demonstration (skill-based), role play (attitude change)')) story.append(PageBreak()) # ── SECTION 9: HEALTH PLANNING & MANAGEMENT ────────────────────────── story.append(h1('9. HEALTH PLANNING & MANAGEMENT')) story.append(sp(4)) story.append(h2('9.1 Health Planning Cycle')) story.append(multi_col_table( ['Step', 'Activity'], [ ['1', 'Situational analysis — assess health status, disease burden, existing resources (FIRST STEP)'], ['2', 'Setting objectives — SMART goals (Specific, Measurable, Achievable, Relevant, Time-bound)'], ['3', 'Fixing priorities — magnitude, severity, feasibility, cost-effectiveness'], ['4', 'Formulating strategies/alternatives — identify approaches'], ['5', 'Programme planning — who, what, when, where, how much (detailed plan)'], ['6', 'Implementation — execute the plan'], ['7', 'Monitoring — ongoing tracking of inputs and processes'], ['8', 'Evaluation — outcomes and impact → FEEDBACK → new cycle'], ], col_widths=[usable*0.06, usable*0.94] )) story.append(key('Feedback = key component — enables course correction; without it planning is one-way with no learning')) story.append(sp(6)) story.append(h2('9.2 Network Analysis (PERT / CPM)')) story.append(two_col_table([ ['Feature', 'Details'], ['PERT', 'Programme Evaluation and Review Technique — for research/uncertain activities; uses 3-time estimates (optimistic, most likely, pessimistic)'], ['CPM', 'Critical Path Method — for established projects with known durations'], ['Network diagram', 'Activities represented as arrows/nodes in logical sequence'], ['Critical path', 'Longest path through network = determines minimum project duration'], ['Float / Slack', 'Time an activity can be delayed without delaying project'], ['Application', 'Health programme planning, hospital construction, complex interventions'], ])) story.append(sp(6)) story.append(h2('9.3 Management Approaches')) story.append(two_col_table([ ['Approach', 'Description'], ['MBO (Management by Objectives)', 'Qualitative — Goals set participatively; performance evaluated against goals'], ['Work sampling', 'Quantitative — Random observation of work to determine time spent on activities'], ['Input-output analysis', 'Measures resources used vs outputs produced'], ['Decision making', 'Systematic process of selecting among alternatives'], ['Programme planning', 'Logical framework approach (logframe), Gantt charts'], ])) story.append(sp(6)) story.append(h2('9.4 Triage Systems')) story.append(multi_col_table( ['Colour', 'Priority', 'Condition', 'Action'], [ ['RED', 'Immediate (P1)', 'Life-threatening but treatable', 'Treat first'], ['YELLOW', 'Delayed (P2)', 'Serious but stable — can wait', 'Treat second'], ['GREEN', 'Minor (P3)', 'Walking wounded', 'Minimal treatment / self-care'], ['BLACK', 'Expectant/Dead', 'Dead or unsurvivable injuries', 'Do not expend resources'], ], col_widths=[usable*0.12, usable*0.20, usable*0.35, usable*0.33] )) story.append(body('START triage (Simple Triage And Rapid Treatment) — used in mass casualty and disaster events')) story.append(PageBreak()) # ── SECTION 10: INTERNATIONAL HEALTH ───────────────────────────────── story.append(h1('10. INTERNATIONAL HEALTH ORGANISATIONS')) story.append(sp(4)) story.append(h2('10.1 WHO — Key Facts')) story.append(two_col_table([ ['Feature', 'Details'], ['Established', 'April 7, 1948 (World Health Day)'], ['Headquarters', 'Geneva, Switzerland'], ['Members', '194 member states'], ['India region', 'SEARO (South-East Asia Regional Office, New Delhi)'], ['Governing body', 'World Health Assembly (WHA) — meets annually in May'], ['Executive', 'Executive Board (34 members) + Director General'], ['6 Core Functions', 'Leadership | Research agenda | Norms & standards | Evidence-based policy | Technical support | Monitoring & assessment'], ['IHR 2005', 'Always notifiable: Smallpox, Wild polio, New influenza subtype, SARS; + any PHEIC'], ])) story.append(sp(6)) story.append(h2('10.2 UNICEF — Key Facts')) story.append(two_col_table([ ['Feature', 'Details'], ['Full name', 'United Nations International Children\'s Emergency Fund (now United Nations Children\'s Fund)'], ['Established', 'December 1946 | HQ: New York'], ['Mandate', 'Rights and well-being of children worldwide'], ['Key strategies', 'GOBI: Growth monitoring, ORS, Breastfeeding, Immunization'], ['FFF addition', 'Female education, Food supplements, Family spacing'], ['India focus', 'POSHAN Abhiyan, immunization, WASH, education, child protection'], ])) story.append(sp(6)) story.append(h2('10.3 Other Key International Bodies')) story.append(multi_col_table( ['Organisation', 'Founded', 'Focus / Role'], [ ['UNDP', '1965', 'United Nations Development Programme — poverty reduction, HDI'], ['UNFPA', '1969', 'United Nations Population Fund — reproductive health, family planning'], ['World Bank', '1944', 'Health financing, poverty reduction, nutrition programmes'], ['Rockefeller Foundation', '1913', 'Hookworm eradication, school of public health, green revolution, pandemic prep'], ['Bill & Melinda Gates Foundation', '2000', 'Polio, malaria, TB, nutrition, MNCH'], ['GAVI', '2000', 'Global Alliance for Vaccines & Immunisation — vaccine financing for LMICs'], ], col_widths=[usable*0.24, usable*0.12, usable*0.64] )) story.append(PageBreak()) # ── SECTION 11: MCH ──────────────────────────────────────────────── story.append(h1('11. MATERNAL & CHILD HEALTH')) story.append(sp(4)) story.append(h2('11.1 ASHA — Key Facts')) story.append(two_col_table([ ['Feature', 'Details'], ['Full form', 'Accredited Social Health Activist'], ['Launched', '2005 under NRHM (now NHM)'], ['Selection', '1 per 1000 population in villages; married/widowed/divorced; resident; 8th pass min.'], ['Training', '23 days total in 5 rounds (modules) spread over 12 months'], ['Incentive JSY (Rural LPS)', '₹1000 per institutional delivery facilitated'], ['Role', 'First port of call; HBNC; ANC facilitation; immunization; health education; referral'], ])) story.append(sp(6)) story.append(h2('11.2 Baby-Friendly Hospital Initiative (BFHI) — Ten Steps')) steps = [ ['1', 'Written breastfeeding policy communicated to all staff'], ['2', 'Train all healthcare staff in breastfeeding management skills'], ['3', 'Inform all pregnant women about benefits and management of breastfeeding'], ['4', 'Initiate breastfeeding within ONE HOUR of birth'], ['5', 'Show mothers how to breastfeed and how to maintain lactation'], ['6', 'No food/drink other than breast milk (except medically indicated)'], ['7', 'Practice rooming-in — mother and baby together 24 hours a day'], ['8', 'Encourage breastfeeding ON DEMAND'], ['9', 'No artificial teats, pacifiers, or dummies to breastfed infants'], ['10', 'Foster establishment of breastfeeding support groups'], ] story.append(multi_col_table(['Step', 'Requirement'], steps, col_widths=[usable*0.08, usable*0.92])) story.append(key('BFHI launched 1991 by WHO/UNICEF | Hospitals certified as "Baby-Friendly"')) story.append(sp(6)) story.append(h2('11.3 IMNCI Colour-Coded Classification')) story.append(multi_col_table( ['Colour', 'Classification', 'Action', 'Examples'], [ ['RED', 'Severe / Urgent', 'Refer to hospital IMMEDIATELY', 'Very Severe Disease, Severe Pneumonia, Severe Dehydration, SAM'], ['YELLOW', 'Moderate', 'Specific outpatient treatment + follow-up', 'Pneumonia (non-severe), Some dehydration, Moderate malnutrition'], ['GREEN', 'Mild / None', 'Home care + counselling only', 'Cough/cold (no pneumonia), No dehydration, Normal nutrition'], ], col_widths=[usable*0.12, usable*0.20, usable*0.32, usable*0.36] )) story.append(sp(6)) story.append(h2('11.4 Pasteurization Methods')) story.append(multi_col_table( ['Method', 'Temperature', 'Time', 'Notes'], [ ['LTLT (Holder method)', '63°C (145°F)', '30 minutes', 'Batch process; kills M. bovis, Brucella, Salmonella'], ['HTST', '72°C (161°F)', '15 seconds', 'Most widely used commercially; continuous flow'], ['UHT (Ultra High Temp)', '132°C (270°F)', '1 second', 'Sterilizes; 6 months shelf-life without refrigeration'], ], col_widths=[usable*0.28, usable*0.20, usable*0.14, usable*0.38] )) story.append(key('Phosphatase test = standard test for pasteurization adequacy | Phosphatase absent = adequate pasteurization')) story.append(body('Phosphatase + starch-iodide substrate → Blue colour = phosphatase PRESENT = INADEQUATE pasteurization')) story.append(PageBreak()) # ── SECTION 12: IMPORTANT NUMBERS ───────────────────────────────── story.append(h1('12. IMPORTANT NUMBERS & VALUES (HIGH-YIELD)')) story.append(sp(4)) story.append(h2('12.1 Emergency Contraception')) story.append(two_col_table([ ['Method', 'Time Window'], ['Levonorgestrel (Plan B)', 'Within 72 hours (3 days) — more effective the sooner taken'], ['Ulipristal acetate', 'Within 120 hours (5 days)'], ['Copper-T IUD', 'Within 5 days — MOST EFFECTIVE EC method'], ])) story.append(sp(6)) story.append(h2('12.2 Contraceptive Efficacy — Pearl Index')) story.append(body('Pearl Index = (No. of failures / Total months of exposure) × 1200')) story.append(body('Lower Pearl Index = HIGHER efficacy')) story.append(sp(6)) story.append(h2('12.3 Pasteurization Temperatures')) story.append(body('Holder method: 63°C × 30 min | HTST: 72°C × 15 sec | UHT: 132°C × 1 sec')) story.append(sp(6)) story.append(h2('12.4 Key Social Medicine Facts')) story.append(two_col_table([ ['Fact', 'Answer'], ['Term "Social Medicine" first introduced by', 'Jules Guerin (French physician, 1848)'], ['Term "Public Health" coined by', 'C.E.A. Winslow'], ['Alma-Ata Declaration', '1978, USSR — PHC'], ['World Health Day', 'April 7'], ['BMI of reference Indian male', '22 kg/m² (55 kg, 1.655 m)'], ['Cooling power of air measured by', 'Kata thermometer'], ['Travel medicine is called', 'Emporiatrics'], ['First described occupational cancer', 'Scrotal cancer in chimney sweeps — Percivall Pott, 1775'], ['Reference protein', "Whole egg (NPU = 100, BV = 100)"], ['Farmer's lung caused by inhalation of', 'Saccharopolyspora rectivirgula (from mouldy hay)'], ['Global Hunger Index measures', 'Undernourishment + Child wasting + Child stunting + Child mortality'], ['Daylight factor in kitchen (recommended)', '2% minimum'], ['Duration of ASHA training', '23 days (5 rounds) over 12 months'], ['Water chlorine: residual at tap', '0.2 mg/L (India) / 0.5 mg/L (WHO)'], ['Fluoride optimum in water', '0.7–1.2 ppm (India)'], ])) story.append(sp(6)) story.append(h2('12.5 Socioeconomic Status Scales')) story.append(multi_col_table( ['Scale', 'Used For', 'Variables'], [ ["Kuppuswamy's Scale", 'Urban India', 'Education + Occupation + Monthly family income → Score 3–29'], ["BG Prasad Classification", 'Both (most used)', 'Per capita monthly family income (adjusted for CPI annually)'], ["Udai Pareek's Scale", 'Rural India', '7 variables: education, occupation, land, house type, farm power, material possession, community participation'], ['NSSO Classification', 'National surveys', 'Household asset index / consumption expenditure'], ], col_widths=[usable*0.28, usable*0.20, usable*0.52] )) story.append(sp(6)) story.append(h2('12.6 Notifiable Diseases (India / IHR 2005)')) story.append(two_col_table([ ['Category', 'Diseases'], ['Always notifiable (IHR 2005)', 'Smallpox, Wild poliovirus, New subtype human influenza, SARS'], ['Centrally notifiable', 'Cholera, Plague, Yellow fever (IHR); + AFP, Dengue, Malaria, JE, Rabies, Viral Hepatitis, Measles'], ['State-level', 'Varies by state; includes Typhoid, Dysentery, TB, HIV (selected states)'], ])) story.append(sp(10)) story.append(hr()) story.append(Paragraph( 'This guide is compiled from Park\'s Textbook of Preventive and Social Medicine and WHO guidelines. ' 'For RUHS examination preparation — always verify current programme data with latest MoHFW/NHM circulars.', S['Footer'])) return story # ── BUILD PDF ───────────────────────────────────────────────────────── output_path = '/tmp/workspace/psm-guide/PSM_Quick_Reference_RUHS.pdf' doc = SimpleDocTemplate( output_path, pagesize=A4, leftMargin=LEFT, rightMargin=RIGHT, topMargin=TOP, bottomMargin=BOTTOM + 12, title='PSM Quick Reference Guide — RUHS', author='Orris AI | Community Medicine', subject='Preventive & Social Medicine Quick Reference' ) story = build_content() doc.build(story, onFirstPage=on_page, onLaterPages=on_page) print(f'PDF created: {output_path}') PYEOF echo "Script written"
cd /tmp/workspace/psm-guide && python generate_psm_pdf.py 2>&1
~/psm-guide/generate_psm_pdf.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/psm-guide/generate_psm_pdf.py'
cd /tmp/workspace/psm-guide && python generate_psm_pdf.py 2>&1
~/psm-guide/generate_psm_pdf.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/psm-guide/generate_psm_pdf.py'
~/psm-guide/generate_psm_pdf.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/psm-guide/generate_psm_pdf.py'
cd /tmp/workspace/psm-guide && python generate_psm_pdf.py 2>&1
ls -lh /tmp/workspace/psm-guide/PSM_Quick_Reference_RUHS.pdf
PSM Quick Reference RUHS
PDF Document · PDF
| Section | Content |
|---|---|
| 1. Nutrition & Dietetics | Reference protein, RDAs, limiting amino acids, glycaemic index, Vitamin A xerophthalmia grading, fluorine two-edged sword, food additives vs adulterants |
| 2. Primary Health Care | Alma-Ata definition, 8 essential elements, principles, levels of care in India, Ayushman Arogya Mandir (AAM) 12-package services |
| 3. National Health Programmes | Mission Indradhanush, JSY incentive table (LPS/HPS), Anemia Mukt Bharat 5×5, NVBDCP, disease control/elimination/eradication |
| 4. Epidemiology | Mortality rate formulas, F-diagram diseases, Horrocks apparatus cups, disaster cycle phases |
| 5. Environmental Health | Stevenson screen vs other instruments, slow vs rapid sand filter comparison, breakpoint chlorination, Winslow's housing criteria, refuse disposal |
| 6. Biomedical Waste | Full colour-coded bin chart (Yellow/Red/White/Blue) with waste types and treatment |
| 7. Occupational Health | Occupational cancers table, pneumoconioses comparison, lead poisoning key facts, ESI Act 1948 benefits |
| 8. Health Education | Education vs propaganda, models (KAP/HBM/Stages of Change), communication barriers, group discussion |
| 9. Health Planning | Planning cycle steps, PERT/CPM, management methods, triage colour codes |
| 10. International Organisations | WHO/UNICEF/UNDP/Rockefeller key facts |
| 11. MCH | ASHA facts, BFHI 10 steps, IMNCI colour coding, pasteurization methods + phosphatase test |
| 12. Important Numbers | Emergency contraception timing, Pearl index, social medicine dates, key numerical values for fill-in-the-blank questions |