Make book like this
Medped
mkdir -p /tmp/workspace/medped-ebook && ls /tmp/workspace/medped-ebook/
~/medped-ebook/build_ebook.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm, mm
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
PageBreak, HRFlowable, KeepTogether
)
from reportlab.graphics.shapes import Drawing, Rect, String, Line, Circle, Polygon
from reportlab.graphics import renderPDF
from reportlab.platypus.flowables import Flowable
import reportlab.lib.colors as rlcolors
# ── Colour palette ──────────────────────────────────────────────────────────
NAVY = colors.HexColor("#0D1B4B")
DARK_BLUE = colors.HexColor("#1A2B6B")
GOLD = colors.HexColor("#F5A623")
RED_BADGE = colors.HexColor("#C0392B")
WHITE = colors.white
LIGHT_BG = colors.HexColor("#F0F4FF")
TEAL = colors.HexColor("#1ABC9C")
ORANGE = colors.HexColor("#E67E22")
PURPLE = colors.HexColor("#8E44AD")
W, H = A4 # 595 x 842 pt
# ── Custom Flowable: full-width coloured banner ──────────────────────────────
class Banner(Flowable):
def __init__(self, text, bg=NAVY, fg=WHITE, font_size=20, height=40):
super().__init__()
self.text = text
self.bg = bg
self.fg = fg
self.font_size = font_size
self.height = height
self.width = W - 4*cm # will be set during wrap
def wrap(self, aW, aH):
self.width = aW
return aW, self.height
def draw(self):
c = self.canv
c.setFillColor(self.bg)
c.rect(0, 0, self.width, self.height, fill=1, stroke=0)
c.setFillColor(self.fg)
c.setFont("Helvetica-Bold", self.font_size)
c.drawCentredString(self.width / 2, self.height / 2 - self.font_size * 0.35, self.text)
class SectionHeader(Flowable):
"""Left-accented section header."""
def __init__(self, text, accent=GOLD, font_size=14, height=30):
super().__init__()
self.text = text
self.accent = accent
self.font_size = font_size
self.height = height
def wrap(self, aW, aH):
self.width = aW
return aW, self.height
def draw(self):
c = self.canv
c.setFillColor(self.accent)
c.rect(0, 0, 6, self.height, fill=1, stroke=0)
c.setFillColor(NAVY)
c.setFont("Helvetica-Bold", self.font_size)
c.drawString(12, self.height / 2 - self.font_size * 0.35, self.text)
class CoverPage(Flowable):
"""Full A4 cover drawn programmatically."""
def __init__(self):
super().__init__()
def wrap(self, aW, aH):
return aW, aH
def draw(self):
c = self.canv
pw = W - 4*cm # page printable width (after margins)
ph = H - 4*cm
# ── Background gradient simulation (dark blue rectangles) ──
for i in range(30):
frac = i / 30
col = colors.linearlyInterpolatedColor(NAVY, DARK_BLUE, 0, 1, frac)
c.setFillColor(col)
c.rect(0, ph - (i+1)*(ph/30), pw, ph/30 + 1, fill=1, stroke=0)
# ECG-like decorative line
c.setStrokeColor(colors.HexColor("#1E90FF"))
c.setLineWidth(2)
c.setDash([4, 2])
c.line(0, ph * 0.38, pw, ph * 0.38)
c.setDash([])
# ── "PACKAGE" badge ──────────────────────────────────────────
badge_w, badge_h = 110, 26
c.setFillColor(GOLD)
c.roundRect(10, ph - 55, badge_w, badge_h, 4, fill=1, stroke=0)
c.setFillColor(NAVY)
c.setFont("Helvetica-Bold", 13)
c.drawCentredString(10 + badge_w/2, ph - 55 + 7, "PACKAGE")
# ── Main headline: 150+ ──────────────────────────────────────
c.setFillColor(WHITE)
c.setFont("Helvetica-Bold", 52)
c.drawString(10, ph - 110, "150+")
# OPD badge
c.setFillColor(GOLD)
c.roundRect(150, ph - 118, 80, 34, 5, fill=1, stroke=0)
c.setFillColor(NAVY)
c.setFont("Helvetica-Bold", 22)
c.drawCentredString(190, ph - 104, "OPD")
# AND
c.setFillColor(WHITE)
c.setFont("Helvetica-Bold", 16)
c.drawString(240, ph - 105, "AND")
# 80+
c.setFont("Helvetica-Bold", 52)
c.drawString(10, ph - 162, "80+")
# EMERGENCY badge
c.setFillColor(RED_BADGE)
c.roundRect(150, ph - 170, 165, 34, 5, fill=1, stroke=0)
c.setFillColor(WHITE)
c.setFont("Helvetica-Bold", 22)
c.drawCentredString(232, ph - 156, "EMERGENCY")
# CONFIDENCE
c.setFillColor(WHITE)
c.setFont("Helvetica-Bold", 40)
c.drawString(10, ph - 210, "CONFIDENCE")
# EBOOK BUNDLE label
c.setFillColor(GOLD)
c.roundRect(10, ph - 255, 230, 34, 5, fill=1, stroke=0)
c.setFillColor(NAVY)
c.setFont("Helvetica-Bold", 22)
c.drawCentredString(125, ph - 241, "EBOOK BUNDLE")
# Subtitle
c.setFillColor(WHITE)
c.setFont("Helvetica", 11)
c.drawString(10, ph - 278, "Step-by-step guides to handle")
c.drawString(10, ph - 292, "OPD & Emergency situations with confidence.")
# ── Feature icons row ────────────────────────────────────────
icons = [("300+\nTOPICS", TEAL), ("PRACTICAL\nAPPROACH", GOLD),
("ALL SPECIALTIES\nCOVERED", ORANGE), ("REAL CASE\nEXAMPLES", PURPLE),
("BUILDS\nCONFIDENCE", RED_BADGE)]
ix = 10
for label, col in icons:
c.setFillColor(col)
c.circle(ix + 20, ph - 325, 14, fill=1, stroke=0)
c.setFillColor(WHITE)
c.setFont("Helvetica-Bold", 7)
lines = label.split("\n")
for li, ln in enumerate(lines):
c.drawCentredString(ix + 20, ph - 328 + (len(lines)-1-li)*8, ln)
ix += 68
# ── Specialty list (right side) ───────────────────────────────
specialties = ["MEDICINE", "DERMA", "PEDIA", "ORTHO", "OBG", "SURGERY", "PSYCHIATRY"]
sx = pw - 155
sy_start = ph - 90
c.setFillColor(colors.HexColor("#1A2B6B"))
c.roundRect(sx - 5, sy_start - len(specialties)*22 - 5, 150, len(specialties)*22 + 15, 6, fill=1, stroke=0)
for i, sp in enumerate(specialties):
c.setFillColor(WHITE)
c.setFont("Helvetica-Bold", 11)
c.drawCentredString(sx + 70, sy_start - i*22 - 5, sp)
# ── Branding ─────────────────────────────────────────────────
c.setFillColor(WHITE)
c.setFont("Helvetica-Bold", 14)
c.drawString(10, ph - 380, "Team Medped")
c.setFont("Helvetica", 9)
c.setFillColor(GOLD)
c.drawString(10, ph - 394, "medped.in")
def build_ebook():
output_path = "/tmp/workspace/medped-ebook/Medped_OPD_Emergency_Confidence_Ebook.pdf"
doc = SimpleDocTemplate(
output_path,
pagesize=A4,
leftMargin=2*cm,
rightMargin=2*cm,
topMargin=2*cm,
bottomMargin=2*cm,
title="OPD & Emergency Confidence Ebook Bundle",
author="Team Medped",
)
styles = getSampleStyleSheet()
# Custom styles
title_style = ParagraphStyle("Title2", parent=styles["Title"],
fontSize=26, textColor=NAVY, spaceAfter=6, alignment=TA_CENTER,
fontName="Helvetica-Bold")
heading_style = ParagraphStyle("Heading2", parent=styles["Heading2"],
fontSize=15, textColor=NAVY, spaceBefore=14, spaceAfter=4,
fontName="Helvetica-Bold")
body_style = ParagraphStyle("Body2", parent=styles["Normal"],
fontSize=10.5, leading=16, spaceAfter=6, alignment=TA_JUSTIFY)
bullet_style = ParagraphStyle("Bullet", parent=styles["Normal"],
fontSize=10.5, leading=15, leftIndent=14, bulletIndent=4,
spaceAfter=4)
small_style = ParagraphStyle("Small", parent=styles["Normal"],
fontSize=9, textColor=colors.grey, leading=13)
red_heading = ParagraphStyle("RedH", parent=styles["Heading3"],
fontSize=12, textColor=RED_BADGE, spaceBefore=10, spaceAfter=4,
fontName="Helvetica-Bold")
gold_heading = ParagraphStyle("GoldH", parent=styles["Heading3"],
fontSize=12, textColor=colors.HexColor("#C07A00"), spaceBefore=10, spaceAfter=4,
fontName="Helvetica-Bold")
teal_heading = ParagraphStyle("TealH", parent=styles["Heading3"],
fontSize=12, textColor=TEAL, spaceBefore=10, spaceAfter=4,
fontName="Helvetica-Bold")
def bullet(text, icon="•"):
return Paragraph(f"<b>{icon}</b> {text}", bullet_style)
def warning_box(text):
data = [[Paragraph(f"<font color='#C0392B'><b>⚠ RED FLAG / WARNING:</b></font><br/>{text}", body_style)]]
t = Table(data, colWidths=[doc.width])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), colors.HexColor("#FFF5F5")),
("BOX", (0,0), (-1,-1), 1.5, RED_BADGE),
("LEFTPADDING",(0,0), (-1,-1), 10),
("RIGHTPADDING",(0,0),(-1,-1), 10),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING",(0,0),(-1,-1), 8),
]))
return t
def tip_box(text):
data = [[Paragraph(f"<font color='#1ABC9C'><b>✔ CLINICAL TIP:</b></font><br/>{text}", body_style)]]
t = Table(data, colWidths=[doc.width])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), colors.HexColor("#F0FFF8")),
("BOX", (0,0), (-1,-1), 1.5, TEAL),
("LEFTPADDING",(0,0), (-1,-1), 10),
("RIGHTPADDING",(0,0),(-1,-1), 10),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING",(0,0),(-1,-1), 8),
]))
return t
def case_box(title, text):
data = [[Paragraph(f"<font color='#8E44AD'><b>📋 {title}</b></font><br/>{text}", body_style)]]
t = Table(data, colWidths=[doc.width])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), colors.HexColor("#FAF5FF")),
("BOX", (0,0), (-1,-1), 1.5, PURPLE),
("LEFTPADDING",(0,0), (-1,-1), 10),
("RIGHTPADDING",(0,0),(-1,-1), 10),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING",(0,0),(-1,-1), 8),
]))
return t
# ─────────────────────────────────────────────────────────────────────────
story = []
# ── COVER ────────────────────────────────────────────────────────────────
story.append(CoverPage())
story.append(PageBreak())
# ── TABLE OF CONTENTS ────────────────────────────────────────────────────
story.append(Banner("TABLE OF CONTENTS", bg=NAVY, font_size=18, height=44))
story.append(Spacer(1, 0.4*cm))
toc_data = [
["#", "Section", "Page"],
["1", "Introduction & How to Use This Book", "4"],
["2", "MEDICINE – Common OPD & Emergency Cases", "5"],
["3", "DERMATOLOGY – Skin Conditions in OPD", "10"],
["4", "PAEDIATRICS – Child Health OPD & Emergencies", "14"],
["5", "ORTHOPAEDICS – MSK OPD & Trauma", "18"],
["6", "OBG – Obstetrics & Gynaecology", "22"],
["7", "SURGERY – Surgical OPD & Emergencies", "26"],
["8", "PSYCHIATRY – Mental Health in OPD", "30"],
["9", "Quick Reference Drug Doses", "34"],
["10","Emergency Protocols at a Glance", "36"],
]
toc_table = Table(toc_data, colWidths=[1.2*cm, 12.5*cm, 2*cm])
toc_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), NAVY),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,0), 11),
("ROWBACKGROUNDS",(0,1), (-1,-1), [colors.HexColor("#F5F8FF"), WHITE]),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("FONTSIZE", (0,1), (-1,-1), 10),
("ALIGN", (0,0), (0,-1), "CENTER"),
("ALIGN", (2,0), (2,-1), "CENTER"),
("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#CCCCCC")),
("TOPPADDING", (0,0), (-1,-1), 7),
("BOTTOMPADDING", (0,0), (-1,-1), 7),
]))
story.append(toc_table)
story.append(PageBreak())
# ── INTRODUCTION ─────────────────────────────────────────────────────────
story.append(Banner("INTRODUCTION & HOW TO USE THIS BOOK", bg=DARK_BLUE, height=40))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Welcome to the <b>Medped OPD & Emergency Confidence Ebook Bundle</b>", title_style))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph(
"This ebook bundle is designed for medical students, interns, and junior doctors who want "
"to handle OPD consultations and emergency situations with <b>real confidence</b> — from day one. "
"Each chapter follows a consistent, practical structure so you know exactly what to do, step by step.",
body_style))
story.append(Spacer(1, 0.3*cm))
story.append(SectionHeader("How Each Chapter is Organised", accent=GOLD))
story.append(Spacer(1, 0.2*cm))
features = [
("📖 Condition Overview", "Brief pathophysiology & why it matters clinically."),
("🩺 How to Approach in OPD", "History, examination, and key questions to ask."),
("⚡ Emergency Management", "Step-by-step stabilisation and treatment protocol."),
("📋 Real Case Examples", "Short cases with decision-making walkthrough."),
("⚠ Red Flags", "Critical warning signs you must never miss."),
("✔ Clinical Tips", "Pearls from experienced clinicians."),
("💊 Drug Doses", "First-line medications with adult and paediatric doses."),
]
feat_data = [[Paragraph(f"<b>{k}</b>", body_style), Paragraph(v, body_style)] for k, v in features]
feat_table = Table(feat_data, colWidths=[5.5*cm, 10.2*cm])
feat_table.setStyle(TableStyle([
("ROWBACKGROUNDS",(0,0),(-1,-1),[colors.HexColor("#EEF3FF"), WHITE]),
("GRID",(0,0),(-1,-1),0.3,colors.HexColor("#CCCCCC")),
("TOPPADDING",(0,0),(-1,-1),6),("BOTTOMPADDING",(0,0),(-1,-1),6),
("LEFTPADDING",(0,0),(-1,-1),8),("RIGHTPADDING",(0,0),(-1,-1),8),
]))
story.append(feat_table)
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# CHAPTER 1 – MEDICINE
# ═══════════════════════════════════════════════════════════════════════════
story.append(Banner("CHAPTER 1: MEDICINE", bg=NAVY, height=44, font_size=20))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Common OPD & Emergency Cases", title_style))
story.append(HRFlowable(color=GOLD, thickness=2, width="100%"))
story.append(Spacer(1, 0.3*cm))
# ── 1.1 Hypertension ──────────────────────────────────────────────────────
story.append(SectionHeader("1.1 Hypertension in OPD", accent=TEAL))
story.append(Paragraph(
"Hypertension is the most common non-communicable disease encountered in general OPD. "
"Defined as persistent BP ≥140/90 mmHg on two separate visits.",
body_style))
story.append(Paragraph("<b>OPD Approach:</b>", gold_heading))
for item in [
"Take complete history: duration, medications, family history, lifestyle.",
"Measure BP in both arms after 5 min rest (seated).",
"Look for secondary causes: renal bruit, moon face, buffalo hump.",
"Fundoscopy for hypertensive retinopathy (grade I–IV).",
"Order: RFT, Urine R/E, ECG, echo if indicated.",
]:
story.append(bullet(item))
story.append(Spacer(1, 0.2*cm))
story.append(tip_box(
"Always measure BP after the patient has rested for 5 minutes. "
"White-coat hypertension accounts for up to 20% of OPD HTN diagnoses — "
"consider 24h ABPM before starting lifelong therapy."))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("<b>First-Line Drugs (JNC 8 / Indian Guidelines):</b>", gold_heading))
drug_data = [
["Drug Class", "Example", "Adult Dose", "Notes"],
["ACE Inhibitor", "Enalapril", "5–40 mg/day", "Avoid in pregnancy, bilateral RAS"],
["ARB", "Losartan", "50–100 mg/day", "Better tolerability than ACEI"],
["CCB", "Amlodipine", "5–10 mg/day", "Good for elderly, Afro-origin"],
["Thiazide", "Hydrochlorthiazide", "12.5–25 mg/day", "Check electrolytes"],
]
drug_table = Table(drug_data, colWidths=[3.5*cm, 3.5*cm, 4*cm, 4.7*cm])
drug_table.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,0),NAVY),("TEXTCOLOR",(0,0),(-1,0),WHITE),
("FONTNAME",(0,0),(-1,0),"Helvetica-Bold"),
("ROWBACKGROUNDS",(0,1),(-1,-1),[colors.HexColor("#F5F8FF"),WHITE]),
("GRID",(0,0),(-1,-1),0.4,colors.HexColor("#AAAAAA")),
("FONTSIZE",(0,0),(-1,-1),9),
("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5),
]))
story.append(drug_table)
story.append(Spacer(1, 0.3*cm))
story.append(warning_box(
"Hypertensive Emergency: BP >180/120 + end-organ damage. "
"Admit, IV Labetalol / Sodium Nitroprusside. Target: reduce MAP by 25% in first hour. "
"Do NOT drop BP too fast — risk of stroke/MI."))
story.append(Spacer(1, 0.3*cm))
story.append(case_box("CASE 1.1",
"A 52-year-old male with BP 170/100 on two readings, no symptoms. "
"ECG shows LVH. Urine albumin 1+. Creatinine 1.3 mg/dL.<br/>"
"<b>Management:</b> Start ARB (Losartan 50 mg), low-salt diet, aerobic exercise 30 min/day. "
"Repeat RFT in 2 weeks. Target BP <130/80 (diabetic/renal)."))
story.append(PageBreak())
# ── 1.2 Diabetes Mellitus ─────────────────────────────────────────────────
story.append(SectionHeader("1.2 Diabetes Mellitus – OPD Management", accent=TEAL))
story.append(Paragraph(
"Diabetes mellitus type 2 is epidemic in India, with over 77 million diagnosed. "
"OPD management focuses on glycaemic control, screening for complications, and "
"patient education.",
body_style))
for item in [
"Check FPG, PP2h glucose, HbA1c (target <7% for most adults).",
"Annual screening: feet (neuropathy), eyes (retinopathy), urine ACR (nephropathy), BP.",
"First-line drug: Metformin 500 mg BD with meals (titrate to 2 g/day).",
"Add SGLT2 inhibitor (Empagliflozin) if CVD risk or CKD.",
"Add GLP-1 RA (Semaglutide) for obesity-driven T2DM.",
]:
story.append(bullet(item))
story.append(Spacer(1, 0.2*cm))
story.append(tip_box(
"SMBG (self-monitoring blood glucose) 4 times/day is ideal for insulin-requiring patients. "
"For those on oral agents alone, fasting + post-lunch checks are sufficient."))
story.append(Spacer(1, 0.2*cm))
story.append(warning_box(
"Hypoglycaemia Emergency: Glucose <54 mg/dL + symptoms. "
"Conscious: 15g oral glucose (3 teaspoons sugar). "
"Unconscious: IV 25% Dextrose 50 mL bolus + glucagon 1 mg IM. "
"Identify and correct the cause."))
story.append(Spacer(1, 0.3*cm))
# ── 1.3 Acute Chest Pain ──────────────────────────────────────────────────
story.append(SectionHeader("1.3 Acute Chest Pain – Emergency Protocol", accent=RED_BADGE, font_size=13))
story.append(Paragraph(
"Every chest pain patient should be triaged as <b>cardiac until proven otherwise</b>. "
"Use the MONA protocol for ACS.",
body_style))
mona = [
["M", "Morphine", "2–4 mg IV (pain relief, use with caution)"],
["O", "Oxygen", "Only if SpO2 <90%"],
["N", "Nitrates", "GTN 0.5 mg sublingual (avoid if hypotensive)"],
["A", "Aspirin", "325 mg loading dose PO immediately"],
]
mona_t = Table(mona, colWidths=[1.5*cm, 3.5*cm, 10.7*cm])
mona_t.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1),colors.HexColor("#FFF0F0")),
("FONTNAME",(0,0),(0,-1),"Helvetica-Bold"),
("TEXTCOLOR",(0,0),(0,-1),RED_BADGE),
("FONTSIZE",(0,0),(0,-1),14),
("GRID",(0,0),(-1,-1),0.4,colors.HexColor("#FFCCCC")),
("TOPPADDING",(0,0),(-1,-1),6),("BOTTOMPADDING",(0,0),(-1,-1),6),
]))
story.append(mona_t)
story.append(Spacer(1, 0.2*cm))
story.append(tip_box(
"ECG within 10 minutes of arrival is the single most important investigation. "
"ST elevation in II, III, aVF → Inferior STEMI (RCA). "
"ST elevation in V1–V4 → Anterior STEMI (LAD)."))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# CHAPTER 2 – DERMATOLOGY
# ═══════════════════════════════════════════════════════════════════════════
story.append(Banner("CHAPTER 2: DERMATOLOGY", bg=colors.HexColor("#1A5276"), height=44, font_size=20))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Skin Conditions in OPD", title_style))
story.append(HRFlowable(color=ORANGE, thickness=2, width="100%"))
story.append(Spacer(1, 0.3*cm))
story.append(SectionHeader("2.1 Urticaria (Hives)", accent=ORANGE))
story.append(Paragraph(
"Urticaria presents as intensely pruritic wheals (hives) that migrate and resolve within "
"24 hours. Acute urticaria lasts <6 weeks; chronic urticaria persists beyond 6 weeks.",
body_style))
story.append(Paragraph("<b>Common Triggers:</b>", gold_heading))
for t in ["Foods: nuts, shellfish, eggs, strawberries",
"Drugs: NSAIDs, penicillin, ACE inhibitors",
"Infections: viral URTI, parasites",
"Physical: pressure, cold, heat, exercise"]:
story.append(bullet(t))
story.append(Paragraph("<b>Treatment:</b>", gold_heading))
for t in ["Non-sedating antihistamine: Cetirizine 10 mg OD or Fexofenadine 180 mg OD",
"If no response: up to 4x dose of non-sedating AH (guideline approved)",
"Severe/angioedema: Adrenaline 0.5 mg IM (1:1000) + prednisolone 40 mg"]:
story.append(bullet(t))
story.append(Spacer(1, 0.2*cm))
story.append(warning_box(
"Angioedema of the tongue/larynx can be fatal. Give adrenaline 0.5 mg IM IMMEDIATELY "
"and prepare for emergency airway management."))
story.append(Spacer(1, 0.3*cm))
story.append(SectionHeader("2.2 Acne Vulgaris", accent=ORANGE))
story.append(Paragraph(
"Acne is a disease of pilosebaceous units, classified as comedonal, papulopustular, "
"or nodulocystic.",
body_style))
acne_data = [
["Severity", "Treatment"],
["Mild (comedonal)", "Topical retinoid (tretinoin 0.025%)"],
["Moderate (papulopustular)", "Topical retinoid + Benzoyl peroxide + Topical antibiotic"],
["Severe (nodulocystic)", "Oral isotretinoin 0.5–1 mg/kg/day for 6 months"],
]
acne_t = Table(acne_data, colWidths=[5.5*cm, 10.2*cm])
acne_t.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,0),colors.HexColor("#1A5276")),
("TEXTCOLOR",(0,0),(-1,0),WHITE),
("FONTNAME",(0,0),(-1,0),"Helvetica-Bold"),
("ROWBACKGROUNDS",(0,1),(-1,-1),[colors.HexColor("#EBF5FB"),WHITE]),
("GRID",(0,0),(-1,-1),0.4,colors.HexColor("#AAAAAA")),
("TOPPADDING",(0,0),(-1,-1),6),("BOTTOMPADDING",(0,0),(-1,-1),6),
("LEFTPADDING",(0,0),(-1,-1),8),
]))
story.append(acne_t)
story.append(Spacer(1, 0.2*cm))
story.append(tip_box("Counsel patients on isotretinoin: mandatory contraception in women "
"(teratogenic), monthly LFTs, lipids, and haemogram."))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# CHAPTER 3 – PAEDIATRICS
# ═══════════════════════════════════════════════════════════════════════════
story.append(Banner("CHAPTER 3: PAEDIATRICS", bg=colors.HexColor("#1E8449"), height=44, font_size=20))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Child Health – OPD & Emergencies", title_style))
story.append(HRFlowable(color=TEAL, thickness=2, width="100%"))
story.append(Spacer(1, 0.3*cm))
story.append(SectionHeader("3.1 Febrile Seizures", accent=TEAL))
story.append(Paragraph(
"Febrile seizures occur in children aged 6 months–5 years with fever >38°C. "
"Simple febrile seizures: generalised, <15 min, once in 24 h. "
"Complex: focal, >15 min, or recur within 24 h.",
body_style))
story.append(Paragraph("<b>Immediate Management:</b>", gold_heading))
for step in [
"Position: lateral decubitus (recovery position) to prevent aspiration.",
"Airway: suction if needed, give O₂ via mask.",
"Check glucose immediately (exclude hypoglycaemia).",
"IV/rectal diazepam 0.3 mg/kg (max 10 mg) if seizure >5 min.",
"If seizure continues: IV lorazepam 0.1 mg/kg OR midazolam buccal 0.2 mg/kg.",
"After 2 benzodiazepine doses: IV phenytoin 20 mg/kg over 20 min.",
]:
story.append(bullet(step))
story.append(Spacer(1, 0.2*cm))
story.append(warning_box(
"Status epilepticus = seizure >30 min or two seizures without recovery. "
"This is a MEDICAL EMERGENCY — proceed to RSI and ICU if refractory."))
story.append(Spacer(1, 0.3*cm))
story.append(SectionHeader("3.2 Acute Diarrhoea & Dehydration", accent=TEAL))
story.append(Paragraph(
"Dehydration assessment in children uses the DHAKA scale (or WHO classification): "
"no dehydration, some dehydration, severe dehydration.",
body_style))
deh_data = [
["Sign", "No Dehydration", "Some Dehydration", "Severe Dehydration"],
["Eyes", "Normal", "Sunken", "Very sunken"],
["Tears", "Present", "Absent", "Absent"],
["Skin pinch", "Goes back quickly", "Slow (<2s)", "Very slow (>2s)"],
["Thirst", "Normal", "Drinks eagerly", "Drinks poorly/unable"],
["Plan", "Plan A (ORS at home)", "Plan B (supervised ORS)", "Plan C (IV fluids)"],
]
deh_t = Table(deh_data, colWidths=[3.5*cm, 3.8*cm, 3.8*cm, 4.6*cm])
deh_t.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,0),colors.HexColor("#1E8449")),
("TEXTCOLOR",(0,0),(-1,0),WHITE),
("FONTNAME",(0,0),(-1,0),"Helvetica-Bold"),
("ROWBACKGROUNDS",(0,1),(-1,-1),[colors.HexColor("#EAFAF1"),WHITE]),
("GRID",(0,0),(-1,-1),0.4,colors.HexColor("#AAAAAA")),
("FONTSIZE",(0,0),(-1,-1),9),
("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5),
]))
story.append(deh_t)
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# CHAPTER 4 – ORTHOPAEDICS
# ═══════════════════════════════════════════════════════════════════════════
story.append(Banner("CHAPTER 4: ORTHOPAEDICS", bg=colors.HexColor("#7D3C98"), height=44, font_size=20))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("MSK OPD & Trauma", title_style))
story.append(HRFlowable(color=PURPLE, thickness=2, width="100%"))
story.append(Spacer(1, 0.3*cm))
story.append(SectionHeader("4.1 Fracture Management Principles", accent=PURPLE))
for item in [
"Immobilise the joint above and below the fracture.",
"Neurovascular assessment: pulse, capillary refill, sensation, motor power.",
"X-ray: minimum 2 views (AP + lateral), include joint above & below.",
"Open fracture: IV antibiotics (co-amoxiclav), tetanus, urgent ortho referral.",
"Compartment syndrome: 6 Ps — Pain, Pallor, Paraesthesia, Paralysis, Pulselessness, Pressure.",
]:
story.append(bullet(item))
story.append(Spacer(1, 0.2*cm))
story.append(warning_box(
"Compartment syndrome is a surgical emergency. Do NOT elevate the limb above heart level. "
"Emergency fasciotomy is required if compartment pressure >30 mmHg."))
story.append(Spacer(1, 0.3*cm))
story.append(SectionHeader("4.2 Low Back Pain in OPD", accent=PURPLE))
story.append(Paragraph(
"95% of low back pain is non-specific (mechanical). The key OPD skill is "
"identifying the 5% with serious pathology ('red flags').",
body_style))
story.append(Paragraph("<b>Red Flags for Serious Spinal Pathology:</b>", red_heading))
for rf in ["Age <20 or >55 with first episode",
"Trauma / significant mechanism",
"Constant, progressive, non-mechanical pain",
"Bowel/bladder dysfunction (cauda equina — EMERGENCY)",
"Bilateral leg weakness or saddle anaesthesia",
"History of malignancy, HIV, TB, steroids"]:
story.append(bullet(rf, "🔴"))
story.append(Spacer(1, 0.2*cm))
story.append(tip_box(
"Cauda equina syndrome: urinary retention + saddle anaesthesia = "
"neurosurgical emergency. MRI spine urgently and refer."))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# CHAPTER 5 – OBG
# ═══════════════════════════════════════════════════════════════════════════
story.append(Banner("CHAPTER 5: OBSTETRICS & GYNAECOLOGY (OBG)", bg=colors.HexColor("#B03A2E"), height=44, font_size=17))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("OBG – OPD & Obstetric Emergencies", title_style))
story.append(HRFlowable(color=RED_BADGE, thickness=2, width="100%"))
story.append(Spacer(1, 0.3*cm))
story.append(SectionHeader("5.1 Antepartum Haemorrhage (APH)", accent=RED_BADGE))
story.append(Paragraph(
"APH is bleeding from the genital tract after 28 weeks of gestation. "
"The two major causes are placenta praevia and abruptio placentae.",
body_style))
apb_data = [
["Feature", "Placenta Praevia", "Abruptio Placentae"],
["Pain", "Painless", "Painful (board-like abdomen)"],
["Bleeding", "Bright red, recurrent", "Dark red, may be concealed"],
["Uterus", "Soft, non-tender", "Tense, tender"],
["Fetal parts", "Malpresentation common", "Heard with difficulty"],
["Dx", "USG (low-lying placenta)", "Clinical + USG"],
]
apb_t = Table(apb_data, colWidths=[4*cm, 5.8*cm, 5.9*cm])
apb_t.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,0),colors.HexColor("#B03A2E")),
("TEXTCOLOR",(0,0),(-1,0),WHITE),
("FONTNAME",(0,0),(-1,0),"Helvetica-Bold"),
("ROWBACKGROUNDS",(0,1),(-1,-1),[colors.HexColor("#FDEDEC"),WHITE]),
("GRID",(0,0),(-1,-1),0.4,colors.HexColor("#AAAAAA")),
("FONTSIZE",(0,0),(-1,-1),9),
("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5),
]))
story.append(apb_t)
story.append(Spacer(1, 0.2*cm))
story.append(warning_box(
"NEVER do a vaginal examination in APH before an USG — in placenta praevia "
"this can cause catastrophic haemorrhage. Always USG first."))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# CHAPTER 6 – SURGERY
# ═══════════════════════════════════════════════════════════════════════════
story.append(Banner("CHAPTER 6: SURGERY", bg=colors.HexColor("#1A5276"), height=44, font_size=20))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Surgical OPD & Emergencies", title_style))
story.append(HRFlowable(color=colors.HexColor("#2980B9"), thickness=2, width="100%"))
story.append(Spacer(1, 0.3*cm))
story.append(SectionHeader("6.1 Acute Abdomen – Emergency Approach", accent=colors.HexColor("#2980B9")))
story.append(Paragraph(
"Acute abdomen refers to sudden, severe abdominal pain requiring urgent evaluation. "
"A systematic approach prevents missed diagnoses.",
body_style))
story.append(Paragraph("<b>SURGICAL SIEVE — Causes by Quadrant:</b>", gold_heading))
quad_data = [
["Right Upper Quadrant", "Right Lower Quadrant", "Left Upper Quadrant", "Left Lower Quadrant"],
["Cholecystitis, Biliary colic, Hepatitis", "Appendicitis, Ectopic (female), Psoas abscess",
"Splenic rupture, Pancreatitis", "Diverticulitis, Ectopic, Sigmoid volvulus"],
]
quad_t = Table(quad_data, colWidths=[4*cm]*4)
quad_t.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,0),colors.HexColor("#1A5276")),
("TEXTCOLOR",(0,0),(-1,0),WHITE),
("FONTNAME",(0,0),(-1,0),"Helvetica-Bold"),
("FONTSIZE",(0,0),(-1,-1),8.5),
("ROWBACKGROUNDS",(0,1),(-1,-1),[colors.HexColor("#EBF5FB")]),
("GRID",(0,0),(-1,-1),0.4,colors.HexColor("#AAAAAA")),
("TOPPADDING",(0,0),(-1,-1),6),("BOTTOMPADDING",(0,0),(-1,-1),6),
("LEFTPADDING",(0,0),(-1,-1),5),
]))
story.append(quad_t)
story.append(Spacer(1, 0.2*cm))
story.append(tip_box(
"Rovsing's sign (RLQ pain on palpation of LLQ) and Psoas sign (pain on hip extension) "
"suggest appendicitis. Alvarado score ≥7 = strong likelihood, proceed to surgical review."))
story.append(Spacer(1, 0.3*cm))
story.append(SectionHeader("6.2 Wound Management in OPD", accent=colors.HexColor("#2980B9")))
for item in [
"Irrigate: copious saline irrigation (minimum 200 mL per cm wound length).",
"Debridement: remove devitalised tissue.",
"Golden period: primary closure within 6–8 hours (facial wounds: up to 24 h).",
"Contaminated/bite wounds: secondary closure or delayed primary closure.",
"Tetanus prophylaxis: check vaccination status. Give TT if >5 years or unknown.",
"Antibiotics: only if clinically infected, bites, or immunocompromised.",
]:
story.append(bullet(item))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# CHAPTER 7 – PSYCHIATRY
# ═══════════════════════════════════════════════════════════════════════════
story.append(Banner("CHAPTER 7: PSYCHIATRY", bg=colors.HexColor("#4A235A"), height=44, font_size=20))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Mental Health in OPD", title_style))
story.append(HRFlowable(color=PURPLE, thickness=2, width="100%"))
story.append(Spacer(1, 0.3*cm))
story.append(SectionHeader("7.1 Acute Psychosis – OPD & Emergency", accent=PURPLE))
story.append(Paragraph(
"Acute psychosis presents with hallucinations, delusions, disorganised behaviour. "
"Always rule out organic causes first (delirium, drugs, metabolic).",
body_style))
story.append(Paragraph("<b>Rapid Tranquilisation (if patient is agitated/dangerous):</b>", gold_heading))
for item in [
"Haloperidol 5 mg IM + Promethazine 25–50 mg IM (Rx of choice in resource-limited settings).",
"OR Lorazepam 2 mg IM (first choice if cause unknown — less extrapyramidal effects).",
"Monitor: vital signs every 15 min for 1 hour, ECG (QTc prolongation with haloperidol).",
"Prepare for: hypotension, respiratory depression.",
]:
story.append(bullet(item))
story.append(Spacer(1, 0.2*cm))
story.append(warning_box(
"Never use haloperidol alone in benzodiazepine or alcohol withdrawal — "
"it lowers seizure threshold. Use benzodiazepines as the primary agent."))
story.append(Spacer(1, 0.3*cm))
story.append(SectionHeader("7.2 Depression – OPD Screening & Management", accent=PURPLE))
story.append(Paragraph(
"Use PHQ-9 for screening. Score ≥10 suggests moderate depression. "
"Always ask about suicidal ideation directly.",
body_style))
story.append(case_box("CASE 7.1",
"A 34-year-old woman presents with 6 weeks of low mood, poor sleep, anhedonia, "
"weight loss of 4 kg, and difficulty concentrating at work. PHQ-9 score = 16.<br/>"
"<b>Management:</b> Start SSRI (Sertraline 50 mg OD), psychotherapy referral (CBT), "
"safety plan for suicidal thoughts, follow-up in 2 weeks. "
"Review at 4 weeks for SSRI response."))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# QUICK REFERENCE – DRUG DOSES
# ═══════════════════════════════════════════════════════════════════════════
story.append(Banner("QUICK REFERENCE: EMERGENCY DRUG DOSES", bg=RED_BADGE, height=44, font_size=17))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Adult doses unless otherwise stated. Always verify locally.", small_style))
story.append(Spacer(1, 0.2*cm))
qr_data = [
["Drug", "Indication", "Dose & Route", "Notes"],
["Adrenaline (Epinephrine)", "Anaphylaxis/Cardiac arrest",
"0.5 mg IM (1:1000)\n1 mg IV (1:10000) CPR",
"Repeat every 5 min in arrest"],
["Atropine", "Bradycardia (symptomatic)",
"0.5–1 mg IV bolus (max 3 mg)", "Repeat every 3–5 min"],
["Dextrose 50%", "Hypoglycaemia",
"50 mL IV bolus", "Flush line with saline after"],
["Diazepam", "Seizure",
"0.3 mg/kg IV/rectal", "Max 10 mg; watch respiration"],
["GTN (Nitroglycerine)", "ACS / Hyp. urgency",
"0.5 mg SL; repeat x2", "Hold if SBP <90 or RV infarct"],
["Hydrocortisone", "Anaphylaxis / Adrenal crisis",
"200 mg IV bolus", "Followed by 200 mg/24h infusion"],
["Labetalol", "Hyp. emergency",
"20 mg IV bolus over 2 min; repeat", "Or 2 mg/min infusion"],
["Magnesium Sulphate", "Eclampsia",
"4 g IV loading, 1 g/h maint.", "Monitor: urine output, reflexes"],
["Morphine", "Severe pain / ACS",
"2–4 mg IV titrated", "Caution in COPD, head injury"],
["Naloxone", "Opioid overdose",
"0.4–2 mg IV/IM; repeat q2–3 min", "Short-acting — watch for re-sedation"],
["Salbutamol", "Acute asthma",
"2.5–5 mg nebulised q20 min", "Continuous neb in severe attack"],
["Sodium Bicarbonate", "Severe metabolic acidosis",
"1 mEq/kg IV slowly", "Use with caution; check ABG"],
]
qr_t = Table(qr_data, colWidths=[4*cm, 3.5*cm, 5*cm, 3.2*cm])
qr_t.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,0),RED_BADGE),
("TEXTCOLOR",(0,0),(-1,0),WHITE),
("FONTNAME",(0,0),(-1,0),"Helvetica-Bold"),
("ROWBACKGROUNDS",(0,1),(-1,-1),[colors.HexColor("#FFF5F5"),WHITE]),
("GRID",(0,0),(-1,-1),0.4,colors.HexColor("#AAAAAA")),
("FONTSIZE",(0,0),(-1,-1),8.5),
("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5),
("LEFTPADDING",(0,0),(-1,-1),5),
("VALIGN",(0,0),(-1,-1),"MIDDLE"),
]))
story.append(qr_t)
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# EMERGENCY PROTOCOLS AT A GLANCE
# ═══════════════════════════════════════════════════════════════════════════
story.append(Banner("EMERGENCY PROTOCOLS AT A GLANCE", bg=NAVY, height=44, font_size=18))
story.append(Spacer(1, 0.3*cm))
protocols = [
("BLS / CPR", TEAL, [
"Call for help + note time",
"30 chest compressions (100–120/min, 5–6 cm depth)",
"2 rescue breaths (if trained)",
"Attach AED as soon as available",
"Minimise interruptions — switch compressor every 2 minutes",
"Adrenaline 1 mg IV q3–5 min (after 3rd shock for shockable rhythm)",
]),
("Anaphylaxis", RED_BADGE, [
"Remove trigger, call for help",
"Adrenaline 0.5 mg IM (anterolateral thigh, 1:1000)",
"Lay flat + legs elevated (unless breathless)",
"High-flow O₂, IV access, fluid bolus (500 mL 0.9% NaCl)",
"Chlorphenamine 10 mg IV + Hydrocortisone 200 mg IV",
"Repeat adrenaline after 5 min if no improvement",
]),
("Acute Asthma Attack", ORANGE, [
"Salbutamol 5 mg nebulised + O₂ (keep SpO2 94–98%)",
"Ipratropium 0.5 mg nebulised (add if severe)",
"Prednisolone 40–50 mg PO or Hydrocortisone 100 mg IV",
"IV MgSO₄ 1.2–2 g over 20 min in life-threatening attack",
"Prepare for intubation if PaCO₂ rising or patient tires",
]),
("Stroke (FAST Protocol)", PURPLE, [
"Face drooping, Arm weakness, Speech difficulty, Time to call",
"Non-contrast CT head immediately (exclude haemorrhage)",
"thrombolysis with IV alteplase (0.9 mg/kg, max 90 mg) within 4.5 h if eligible",
"Thrombectomy if large vessel occlusion within 24 h",
"BP target: <185/110 before thrombolysis",
"Aspirin 300 mg ONLY after haemorrhage excluded",
]),
]
for proto_title, color, steps in protocols:
story.append(SectionHeader(proto_title, accent=color, font_size=13))
for i, step in enumerate(steps, 1):
story.append(bullet(step, f"{i}."))
story.append(Spacer(1, 0.2*cm))
story.append(Spacer(1, 0.3*cm))
story.append(HRFlowable(color=GOLD, thickness=2, width="100%"))
story.append(Spacer(1, 0.3*cm))
# ── Back cover / closing ──────────────────────────────────────────────────
story.append(Banner("Thank You for Choosing Medped", bg=GOLD, fg=NAVY, height=50, font_size=20))
story.append(Spacer(1, 0.5*cm))
story.append(Paragraph(
"This ebook bundle has been compiled by <b>Team Medped</b> to equip you with the "
"knowledge and confidence to handle real OPD and emergency situations effectively. "
"We believe that <b>every patient deserves a confident doctor</b>.",
body_style))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph(
"For updates, full video courses, and case-based learning, visit us at <b>medped.in</b>. "
"Follow us on social media for daily clinical pearls.",
body_style))
story.append(Spacer(1, 0.3*cm))
disc_data = [[Paragraph(
"<font size='8' color='grey'><b>Disclaimer:</b> This ebook is for educational purposes only. "
"Clinical decisions must always be based on individual patient assessment, local guidelines, "
"and the judgment of a qualified medical professional. Drug doses should be verified against "
"current formularies. Team Medped accepts no liability for clinical outcomes.</font>",
body_style)]]
disc_t = Table(disc_data, colWidths=[doc.width])
disc_t.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1),colors.HexColor("#F8F9FA")),
("BOX",(0,0),(-1,-1),0.5,colors.grey),
("LEFTPADDING",(0,0),(-1,-1),10),("RIGHTPADDING",(0,0),(-1,-1),10),
("TOPPADDING",(0,0),(-1,-1),8),("BOTTOMPADDING",(0,0),(-1,-1),8),
]))
story.append(disc_t)
# ── Build ─────────────────────────────────────────────────────────────────
def add_header_footer(canvas, document):
canvas.saveState()
page_num = document.page
canvas.setFont("Helvetica", 8)
canvas.setFillColor(colors.grey)
# Footer
canvas.drawString(2*cm, 1.2*cm, "© Team Medped | medped.in")
canvas.drawRightString(W - 2*cm, 1.2*cm, f"Page {page_num}")
canvas.setStrokeColor(GOLD)
canvas.setLineWidth(1)
canvas.line(2*cm, 1.6*cm, W - 2*cm, 1.6*cm)
# Header (skip cover page)
if page_num > 1:
canvas.setFont("Helvetica-Bold", 9)
canvas.setFillColor(NAVY)
canvas.drawString(2*cm, H - 1.6*cm, "Medped OPD & Emergency Confidence Ebook Bundle")
canvas.setStrokeColor(NAVY)
canvas.setLineWidth(0.5)
canvas.line(2*cm, H - 1.8*cm, W - 2*cm, H - 1.8*cm)
canvas.restoreState()
doc.build(story, onFirstPage=add_header_footer, onLaterPages=add_header_footer)
print(f"PDF built: {output_path}")
return output_path
build_ebook()
cd /tmp/workspace/medped-ebook && python build_ebook.py 2>&1
ls -lh /tmp/workspace/medped-ebook/Medped_OPD_Emergency_Confidence_Ebook.pdf
Medped OPD Emergency Confidence Ebook
PDF Document · PDF
| Section | Contents |
|---|---|
| Cover Page | Dark navy design, 150+ OPD & 80+ Emergency, gold/red badges, Medped branding |
| Table of Contents | All 7 specialties + bonus sections |
| Introduction | How to use the book, chapter structure |
| Chapter 1 - Medicine | Hypertension (drug table), Diabetes, Acute Chest Pain (MONA protocol) |
| Chapter 2 - Dermatology | Urticaria, Acne (severity-based treatment table) |
| Chapter 3 - Paediatrics | Febrile seizures (step-by-step), Diarrhoea & dehydration WHO table |
| Chapter 4 - Orthopaedics | Fracture principles, Low back pain red flags, Cauda equina |
| Chapter 5 - OBG | APH - Placenta praevia vs Abruption comparison table |
| Chapter 6 - Surgery | Acute abdomen by quadrant, Wound management |
| Chapter 7 - Psychiatry | Acute psychosis / rapid tranquilisation, Depression PHQ-9 |
| Quick Reference Drug Doses | 12 emergency drugs with doses & notes |
| Emergency Protocols | BLS/CPR, Anaphylaxis, Acute Asthma, Stroke (FAST) |
Viral fever Acute upper respiratory tract infection (URTI) Acute pharyngitis Tonsillitis Sinusitis Acute bronchitis Community-acquired pneumonia (stable) Allergic rhinitis Bronchial asthma (stable) COPD follow-up Hypertension Type 2 diabetes mellitus Dyslipidemia Hypothyroidism Hyperthyroidism Iron deficiency anemia Vitamin B12 deficiency Vitamin D deficiency GERD Gastritis Peptic ulcer disease Acute gastroenteritis Chronic diarrhea Constipation Irritable bowel syndrome Hemorrhoids Anal fissure Helminthiasis Urinary tract infection Renal stone Benign prostatic hyperplasia Osteoarthritis Rheumatoid arthritis Low back pain Cervical spondylosis Frozen shoulder Gout Migraine Tension headache Vertigo Insomnia Anxiety disorder Depression Obesity Acute conjunctivitis Stye Otitis externa Otitis media Cerumen impaction Epistaxis Dermatology (51–70) Tinea corporis Tinea cruris Tinea capitis Scabies Pediculosis Impetigo Cellulitis Eczema Contact dermatitis Psoriasis Acne vulgaris Urticaria Vitiligo Herpes zoster Herpes simplex Molluscum contagiosum Viral wart Corn Callus Drug rash Obstetrics & Gynecology (71–100) Antenatal check-up Postnatal follow-up Hyperemesis gravidarum Pregnancy-induced hypertension Gestational diabetes Threatened abortion Leucorrhoea Vulvovaginal candidiasis Bacterial vaginosis Trichomoniasis Pelvic inflammatory disease Dysmenorrhea Menorrhagia Amenorrhea PCOS Menopause symptoms Breast pain Mastitis Breast lump evaluation Family planning counseling IUCD follow-up Oral contraceptive counseling Infertility evaluation Cervicitis Cervical erosion Vaginal prolapse Urinary incontinence Postmenopausal bleeding Premenstrual syndrome Vaginal itching Pediatrics (101–125) Common cold Viral fever Acute gastroenteritis Worm infestation Malnutrition Failure to thrive Vitamin A deficiency Rickets Iron deficiency anemia Otitis media Tonsillitis Bronchiolitis Childhood asthma Pneumonia Skin rash Chickenpox Measles Mumps Hand-foot-mouth disease Diaper rash Oral thrush Teething problems Immunization visit Febrile seizure follow-up Constipation Surgery/Orthopedics/Others (126–150) Lipoma Sebaceous cyst Abscess Inguinal hernia Hydrocele Varicose veins Ingrown toenail Diabetic foot ulcer Pressure sore Minor burns Animal bite follow-up Dog bite Cat bite Human bite Finger injury Sprain Tennis elbow Trigger finger Ganglion cyst Plantar fasciitis Shoulder pain Knee pain Heel pain Follow-up dressing Suture removal 80 Emergency Cases Acute myocardial infarction (STEMI) NSTEMI Unstable angina Cardiac arrest Acute heart failure Hypertensive emergency Hypertensive urgency Acute ischemic stroke Intracerebral hemorrhage Status epilepticus First seizure Meningitis Encephalitis Syncope Head injury Polytrauma Road traffic accident Fracture femur Open fracture Shoulder dislocation Elbow dislocation Acute asthma attack Acute COPD exacerbation Tension pneumothorax Hemothorax Pulmonary edema Massive hemoptysis Anaphylaxis Septic shock Dengue shock syndrome Heat stroke Hypothermia Snake bite Scorpion sting Dog bite Organophosphate poisoning Drug overdose Kerosene poisoning Acid poisoning Corrosive ingestion Hanging Near drowning Electrocution Burns Acute gastroenteritis with severe dehydration Upper GI bleed Lower GI bleed Acute pancreatitis Acute appendicitis Intestinal obstruction Perforation peritonitis Acute cholecystitis Renal colic Acute urinary retention Pyelonephritis with sepsis Diabetic ketoacidosis (DKA) Hyperosmolar hyperglycemic state (HHS) Severe hypoglycemia Hyperkalemia Hyponatremia with seizures Acute kidney injury Urosepsis Acute liver failure Hepatic encephalopathy Obstetric hemorrhage Eclampsia Severe preeclampsia Preterm labor Obstructed labor Cord prolapse Postpartum hemorrhage Ectopic pregnancy Abortion with heavy bleeding Neonatal birth asphyxia Febrile seizure Severe pneumonia Severe malaria Scrub typhus with shock Acute psychosis with violent behavior Suicide attempt
Include all this topics and make notes like this format for each of topics
How many more time required
?
Make it fast