Surgery is one of the highest-weightage subjects in the FMGE. Based on an analysis of question patterns from the last decade, the topics listed below are consistently high-yield. They are categorized to help you prioritize your revision. ### **Core General Surgery** * **Wound Healing:** Stages of healing, types of wounds, and suture materials (absorbable vs. non-absorbable). * **Shock & Fluid Resuscitation:** Types of shock (hypovolemic, septic, cardiogenic), Parkland formula for burns, and fluid management. * **Trauma:** ATLS protocol (ABCDE), Glasgow Coma Scale (GCS), FAST ultrasound, and grading of splenic/liver trauma. * **Surgical Infections:** Principles of sterilization, surgical site infections, and conditions like necrotizing fasciitis or gas gangrene. ### **Gastrointestinal & Hepatobiliary Surgery** * **Acute Abdomen:** Appendicitis (Alvarado score), peritonitis, and intestinal obstruction (X-ray findings). * **Hernia:** Inguinal (direct vs. indirect), femoral (most common in females), umbilical, and surgical management. * **Hepatobiliary/Pancreas:** Gallstones (USG investigations), acute cholecystitis (Murphy’s sign), obstructive jaundice, and pancreatic carcinoma (Whipple procedure). * **Stomach/Esophagus:** Peptic ulcer disease (complications), Achalasia cardia, and gastric carcinoma (staging and nodes). * **Colorectal:** Hemorrhoids, fissures, fistula-in-ano, and colorectal carcinoma (Duke’s staging). ### **Oncology & Endocrine Surgery** * **Breast Surgery:** Fibroadenoma vs. fibrocystic disease, triple assessment, and carcinoma breast (staging and management). * **Thyroid:** Thyroid nodules, thyroid cancers (Papillary is most common), and management of thyroidectomy complications (recurrent laryngeal nerve injury). * **Endocrine Emergencies:** Pheochromocytoma (alpha-blocker prep) and Zollinger-Ellison syndrome. ### **Urology & Vascular Surgery** * **Urology:** BPH vs. prostate carcinoma (PSA levels), renal calculi (imaging/gold standard), and testicular torsion vs. epididymo-orchitis. * **Vascular:** DVT (Virchow’s triad), varicose veins (Trendelenburg test), and aortic aneurysms (signs of rupture). ### **Strategic Revision Tips** * **Focus on Clinical Scenarios:** FMGE frequently asks about "next best step" or "most likely diagnosis" based on patient presentation (e.g., a patient with calf pain while walking, or a post-mastectomy patient with limb swelling). * **Prioritize Repeat Themes:** Topics like the "Rule of Nines," GCS, and specific hernia anatomy appear in almost every cycle. * **Use PYQs:** Because many FMGE questions are repeated or based on recurring concepts, practicing the last 10 years of question papers is the most effective way to identify the "must-know" facts. High-Yield Surgery Topics for FMGE This video is relevant because it provides a consolidated, high-yield revision list of the most frequently asked surgery topics in the FMGE, making it an excellent tool for quick final preparation.

Asking for Preferences
Reading File
Running Command

mkdir -p /home/daytona/workspace/fmge-surgery && ls /home/daytona/workspace/fmge…

Writing File

~/fmge-surgery/build_cheatsheet.py

from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import mm
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    HRFlowable, KeepTogether
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT
from reportlab.platypus import PageBreak

OUTPUT = "/home/daytona/workspace/fmge-surgery/FMGE_Surgery_Cheatsheet.pdf"

# ── Colour palette ────────────────────────────────────────────────────────────
C_NAVY   = colors.HexColor("#1A237E")   # section headers
C_TEAL   = colors.HexColor("#00695C")   # subsection headers
C_AMBER  = colors.HexColor("#F57F17")   # highlight / key numbers
C_LTBLUE = colors.HexColor("#E3F2FD")   # table row shade 1
C_LTGRN  = colors.HexColor("#E8F5E9")   # table row shade 2
C_LTYELL = colors.HexColor("#FFFDE7")   # table row shade 3
C_WHITE  = colors.white
C_LTRED  = colors.HexColor("#FFEBEE")

# ── Document ──────────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=A4,
    leftMargin=12*mm, rightMargin=12*mm,
    topMargin=14*mm,  bottomMargin=14*mm,
    title="FMGE High-Yield Surgery Cheat Sheet",
    author="Orris Medical"
)

W, H = A4
CONTENT_W = W - 24*mm

# ── Styles ────────────────────────────────────────────────────────────────────
base = getSampleStyleSheet()

def ps(name, parent="Normal", **kw):
    return ParagraphStyle(name, parent=base[parent], **kw)

S = {
    "title"   : ps("title",   fontSize=20, textColor=C_WHITE,  alignment=TA_CENTER,
                   fontName="Helvetica-Bold", spaceAfter=0),
    "subtitle": ps("subtitle",fontSize=10, textColor=colors.HexColor("#CFD8DC"),
                   alignment=TA_CENTER, fontName="Helvetica", spaceAfter=0),
    "sec"     : ps("sec",     fontSize=11, textColor=C_WHITE,  fontName="Helvetica-Bold",
                   spaceAfter=2, spaceBefore=6),
    "subsec"  : ps("subsec",  fontSize=9,  textColor=C_TEAL,   fontName="Helvetica-Bold",
                   spaceAfter=2, spaceBefore=4),
    "body"    : ps("body",    fontSize=7.5, leading=11, spaceAfter=1),
    "bullet"  : ps("bullet",  fontSize=7.5, leading=11, leftIndent=10,
                   firstLineIndent=-8, spaceAfter=1),
    "key"     : ps("key",     fontSize=7.5, leading=11, textColor=C_AMBER,
                   fontName="Helvetica-Bold"),
    "cell"    : ps("cell",    fontSize=7,  leading=9.5),
    "cellb"   : ps("cellb",   fontSize=7,  leading=9.5, fontName="Helvetica-Bold"),
    "tip"     : ps("tip",     fontSize=7,  leading=10,  textColor=colors.HexColor("#4A148C"),
                   fontName="Helvetica-Oblique"),
}

def bullet(text, style="bullet"):
    return Paragraph(f"•  {text}", S[style])

def kv(k, v):
    return Paragraph(f"<b>{k}:</b> {v}", S["body"])

# ── Section banner ─────────────────────────────────────────────────────────────
def section_banner(title, colour=C_NAVY):
    data = [[Paragraph(title, S["sec"])]]
    t = Table(data, colWidths=[CONTENT_W])
    t.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), colour),
        ("TOPPADDING",    (0,0), (-1,-1), 4),
        ("BOTTOMPADDING", (0,0), (-1,-1), 4),
        ("LEFTPADDING",   (0,0), (-1,-1), 8),
        ("RIGHTPADDING",  (0,0), (-1,-1), 8),
        ("ROUNDEDCORNERS", [4]),
    ]))
    return t

# ── Two-column layout helper ───────────────────────────────────────────────────
def two_col(left_items, right_items, col_ratio=(1, 1)):
    cw = [CONTENT_W * col_ratio[0]/(col_ratio[0]+col_ratio[1]),
          CONTENT_W * col_ratio[1]/(col_ratio[0]+col_ratio[1])]
    data = [[left_items, right_items]]
    t = Table(data, colWidths=cw)
    t.setStyle(TableStyle([
        ("VALIGN",  (0,0), (-1,-1), "TOP"),
        ("LEFTPADDING",  (0,0), (-1,-1), 4),
        ("RIGHTPADDING", (0,0), (-1,-1), 4),
        ("TOPPADDING",   (0,0), (-1,-1), 0),
        ("BOTTOMPADDING",(0,0), (-1,-1), 0),
    ]))
    return t

# ── Generic mini-table ─────────────────────────────────────────────────────────
def mini_table(headers, rows, col_widths=None, row_colors=None):
    if col_widths is None:
        n = len(headers)
        col_widths = [CONTENT_W / n] * n
    data = [[Paragraph(h, S["cellb"]) for h in headers]]
    for row in rows:
        data.append([Paragraph(str(c), S["cell"]) for c in row])
    t = Table(data, colWidths=col_widths)
    style_cmds = [
        ("BACKGROUND",    (0,0), (-1,0),  C_NAVY),
        ("TEXTCOLOR",     (0,0), (-1,0),  C_WHITE),
        ("FONTNAME",      (0,0), (-1,0),  "Helvetica-Bold"),
        ("FONTSIZE",      (0,0), (-1,-1), 7),
        ("ROWBACKGROUNDS",(0,1), (-1,-1), [C_LTBLUE, C_WHITE]),
        ("GRID",          (0,0), (-1,-1), 0.3, colors.HexColor("#B0BEC5")),
        ("TOPPADDING",    (0,0), (-1,-1), 2),
        ("BOTTOMPADDING", (0,0), (-1,-1), 2),
        ("LEFTPADDING",   (0,0), (-1,-1), 3),
        ("RIGHTPADDING",  (0,0), (-1,-1), 3),
        ("VALIGN",        (0,0), (-1,-1), "TOP"),
    ]
    if row_colors:
        for ri, c in row_colors:
            style_cmds.append(("BACKGROUND", (0, ri), (-1, ri), c))
    t.setStyle(TableStyle(style_cmds))
    return t

# ═════════════════════════════════════════════════════════════════════════════
# CONTENT BUILD
# ═════════════════════════════════════════════════════════════════════════════
story = []

# ── TITLE BLOCK ───────────────────────────────────────────────────────────────
title_data = [
    [Paragraph("FMGE HIGH-YIELD SURGERY", S["title"])],
    [Paragraph("Quick-Reference Cheat Sheet  |  Last-Decade Question Pattern Analysis", S["subtitle"])],
]
title_t = Table(title_data, colWidths=[CONTENT_W])
title_t.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,-1), C_NAVY),
    ("TOPPADDING",    (0,0), (-1,-1), 8),
    ("BOTTOMPADDING", (0,0), (-1,-1), 8),
    ("ROUNDEDCORNERS", [6]),
]))
story.append(title_t)
story.append(Spacer(1, 4*mm))

# ═══════════════════════════════════════════════════════
# SECTION 1 – CORE GENERAL SURGERY
# ═══════════════════════════════════════════════════════
story.append(section_banner("SECTION 1 — CORE GENERAL SURGERY"))
story.append(Spacer(1, 2*mm))

# ── 1A WOUND HEALING ──────────────────────────────────
wound_left = [
    Paragraph("WOUND HEALING", S["subsec"]),
    kv("Phase 1 – Haemostasis", "Immediate; platelets + clot"),
    kv("Phase 2 – Inflammation", "Days 1–4; neutrophils → macrophages"),
    kv("Phase 3 – Proliferation", "Days 4–21; fibroblasts, collagen III, angiogenesis"),
    kv("Phase 4 – Remodelling", "Day 21 – 2 yr; collagen III → I; max tensile strength ~80%"),
    Spacer(1, 2*mm),
    Paragraph("Healing Types", S["subsec"]),
    bullet("<b>1° (Primary intention)</b> – clean wound, edges apposed"),
    bullet("<b>2° (Secondary intention)</b> – open wound, granulates"),
    bullet("<b>3° (Delayed 1°)</b> – contaminated; closed after 3–5 days"),
    Spacer(1, 2*mm),
    Paragraph("KEY FACTS", S["subsec"]),
    bullet("Collagen synthesis: Vitamin C dependent"),
    bullet("Tensile strength peaks at 3 months"),
    bullet("Keloid: beyond wound margin; Hypertrophic: within margin"),
]

suture_rows = [
    ["Absorbable", "Catgut (plain/chromic), Vicryl, PDS, Monocryl"],
    ["Non-absorbable", "Silk, Nylon, Prolene, Ethibond"],
    ["Longest absorption", "PDS (~180 days)"],
    ["Fastest absorption", "Plain catgut (~10–14 days)"],
    ["Monofilament NAS", "Nylon, Prolene – least infection risk"],
]
wound_right = [
    Paragraph("SUTURE MATERIALS", S["subsec"]),
    mini_table(["Type", "Examples"], suture_rows,
               col_widths=[CONTENT_W*0.18, CONTENT_W*0.37]),
    Spacer(1, 3*mm),
    Paragraph("SURGICAL SITE INFECTION (SSI)", S["subsec"]),
    bullet("Superficial incisional – skin/SQ tissue, <30 days"),
    bullet("Deep incisional – fascia/muscle, <30 days"),
    bullet("Organ/space – any anatomy opened"),
    kv("Prophylaxis", "Cefazolin 60 min before incision"),
]

story.append(two_col(wound_left, wound_right))
story.append(Spacer(1, 3*mm))
story.append(HRFlowable(width=CONTENT_W, thickness=0.5, color=colors.HexColor("#CFD8DC")))
story.append(Spacer(1, 2*mm))

# ── 1B SHOCK ──────────────────────────────────────────
story.append(Paragraph("SHOCK & FLUID RESUSCITATION", S["subsec"]))

shock_rows = [
    ["Class I",  "< 750",  "< 15%", "> 100",   "Normal",   "Normal",   "14–20",    "Anxious",       "Crystalloid"],
    ["Class II", "750–1500","15–30%","100–120", "Normal",   "Decreased","20–30",    "Agitated",      "Crystalloid"],
    ["Class III","1500–2000","30–40%","120–140","Decreased","Decreased","30–40",    "Confused",      "Crystalloid+Blood"],
    ["Class IV", "> 2000",  "> 40%", "> 140",  "Decreased","Decreased","< 5",      "Lethargic/Obtunded","Blood+Surgery"],
]
story.append(mini_table(
    ["Class", "Blood Loss (mL)", "% Vol", "HR", "SBP", "Pulse Pressure", "UO (mL/hr)", "CNS", "Fluid"],
    shock_rows,
    col_widths=[CONTENT_W*0.065, CONTENT_W*0.115, CONTENT_W*0.065, CONTENT_W*0.065,
                CONTENT_W*0.075, CONTENT_W*0.11, CONTENT_W*0.085, CONTENT_W*0.15, CONTENT_W*0.17],
))
story.append(Spacer(1, 2*mm))

shock_types_rows = [
    ["Hypovolemic",  "↓ CO, ↑ SVR, ↓ PCWP", "Crystalloid / Blood"],
    ["Septic (warm)","↑ CO, ↓ SVR, ↓ PCWP", "Fluids + Antibiotics + Noradrenaline"],
    ["Cardiogenic",  "↓ CO, ↑ SVR, ↑ PCWP", "Inotropes (Dobutamine) + treat cause"],
    ["Neurogenic",   "↓ CO, ↓ SVR, ↓ PCWP", "Vasopressors + fluids"],
    ["Obstructive",  "↓ CO, ↑ SVR (PE/tamponade)", "Treat cause (thrombolyse / pericardiocentesis)"],
]

parkland_data = [[
    Paragraph("PARKLAND FORMULA (Burns)", S["subsec"]),
    Paragraph("4 mL × kg × TBSA(%)\n½ in first 8 h from time of burn\n½ in next 16 h\nFluid: Ringer's Lactate\nChildren: add maintenance (D5RL)", S["body"]),
]]
parkland_t = Table(parkland_data, colWidths=[CONTENT_W*0.28, CONTENT_W*0.72])
parkland_t.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (0,0), C_TEAL),
    ("BACKGROUND",    (1,0), (1,0), C_LTGRN),
    ("TEXTCOLOR",     (0,0), (0,0), C_WHITE),
    ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
    ("TOPPADDING",    (0,0), (-1,-1), 4),
    ("BOTTOMPADDING", (0,0), (-1,-1), 4),
    ("LEFTPADDING",   (0,0), (-1,-1), 5),
    ("BOX",           (0,0), (-1,-1), 0.5, colors.HexColor("#80CBC4")),
]))

story.append(two_col(
    mini_table(["Type", "Haemodynamics", "Management"],
               shock_types_rows,
               col_widths=[CONTENT_W*0.15, CONTENT_W*0.3, CONTENT_W*0.27]),
    parkland_t,
    col_ratio=(75, 25)
))
story.append(Spacer(1, 3*mm))
story.append(HRFlowable(width=CONTENT_W, thickness=0.5, color=colors.HexColor("#CFD8DC")))
story.append(Spacer(1, 2*mm))

# ── 1C TRAUMA ─────────────────────────────────────────
story.append(Paragraph("TRAUMA – ATLS PROTOCOL", S["subsec"]))

atls_rows = [
    ["A – Airway",       "Protect cervical spine; jaw thrust; chin lift; OPA/NPA; RSI if needed"],
    ["B – Breathing",    "Look/listen/feel; treat tension PTX (needle decompression 2nd ICS MCL) → chest drain 5th ICS AAL"],
    ["C – Circulation",  "2 large-bore IVs; 1 L RL bolus; haemorrhage control; FAST exam"],
    ["D – Disability",   "GCS; pupils; lateralising signs; blood glucose"],
    ["E – Exposure",     "Log roll; examine back; prevent hypothermia"],
]
story.append(mini_table(["Step", "Action"], atls_rows,
             col_widths=[CONTENT_W*0.12, CONTENT_W*0.88]))
story.append(Spacer(1, 2*mm))

gcs_rows = [
    ["Eye",   "4 – Spontaneous", "3 – To voice", "2 – To pain", "1 – None", ""],
    ["Verbal","5 – Oriented",    "4 – Confused", "3 – Words",   "2 – Sounds","1 – None"],
    ["Motor", "6 – Obeys",       "5 – Localises","4 – Withdraws","3 – Abnormal flexion","2–1 Extend/None"],
]
splenic_rows = [
    ["Grade I",  "Haematoma < 10% surface; laceration < 1 cm depth"],
    ["Grade II", "Haematoma 10–50%; laceration 1–3 cm"],
    ["Grade III","Haematoma > 50% or expanding; laceration > 3 cm"],
    ["Grade IV", "Laceration involving segmental/hilar vessels"],
    ["Grade V",  "Shattered spleen / hilar devascularisation"],
]
story.append(two_col(
    [
        Paragraph("GLASGOW COMA SCALE (max 15, min 3)", S["subsec"]),
        mini_table(["Component", "5/6", "4/5", "3/4", "2/3", "1"],
                   gcs_rows,
                   col_widths=[CONTENT_W*0.07, CONTENT_W*0.13, CONTENT_W*0.12,
                                CONTENT_W*0.12, CONTENT_W*0.14, CONTENT_W*0.13]),
        Spacer(1,2*mm),
        Paragraph("Severe TBI: GCS ≤ 8 → intubate", S["key"]),
    ],
    [
        Paragraph("SPLENIC TRAUMA GRADING (AAST)", S["subsec"]),
        mini_table(["Grade","Description"], splenic_rows,
                   col_widths=[CONTENT_W*0.07, CONTENT_W*0.35]),
        kv("Mgmt", "Grade I–III → NOM if haemodynamically stable; Grade IV–V → surgery"),
    ],
    col_ratio=(62, 38)
))
story.append(Spacer(1, 3*mm))
story.append(HRFlowable(width=CONTENT_W, thickness=0.5, color=colors.HexColor("#CFD8DC")))
story.append(Spacer(1, 2*mm))

# ── 1D SURGICAL INFECTIONS ────────────────────────────
infect_left = [
    Paragraph("STERILISATION vs DISINFECTION", S["subsec"]),
    kv("Sterilisation", "Kills ALL organisms incl. spores"),
    kv("Disinfection", "Kills most pathogens, NOT spores"),
    Spacer(1,1*mm),
    Paragraph("METHODS", S["subsec"]),
    bullet("<b>Autoclave</b> – 134°C/3 min or 121°C/15 min (gold standard for instruments)"),
    bullet("<b>Dry heat</b> – 160°C/60 min (oils, powders)"),
    bullet("<b>ETO gas</b> – heat-sensitive items (scopes, plastics)"),
    bullet("<b>Glutaraldehyde</b> – 2% for endoscopes (high-level disinfection)"),
    bullet("<b>Gamma radiation</b> – single-use disposables"),
    Spacer(1,1*mm),
    Paragraph("PRION inactivation: 134°C autoclave × 18 min", S["key"]),
]

infect_right = [
    Paragraph("NECROTISING FASCIITIS (NF)", S["subsec"]),
    bullet("<b>Type I</b> – polymicrobial (Clostridium + aerobes)"),
    bullet("<b>Type II</b> – Group A Strep (GAS) → toxic shock"),
    kv("Signs", '"Dish-water" fluid, woody induration, pain disproportionate'),
    kv("Dx", "CT scan + surgical exploration"),
    kv("Rx", "Urgent surgical debridement + broad-spectrum Abx (Pip-Tazo + Clinda) + ICU"),
    Spacer(1,2*mm),
    Paragraph("GAS GANGRENE (Clostridial Myonecrosis)", S["subsec"]),
    kv("Organism", "C. perfringens (most common)"),
    kv("Signs", "Rapid spreading, gas in tissue, bronze skin, crepitus"),
    kv("Rx", "Debridement + High-dose Penicillin G + Hyperbaric O2"),
]

story.append(two_col(infect_left, infect_right))
story.append(Spacer(1, 4*mm))

# ═══════════════════════════════════════════════════════
# SECTION 2 – GASTROINTESTINAL & HEPATOBILIARY SURGERY
# ═══════════════════════════════════════════════════════
story.append(PageBreak())
story.append(section_banner("SECTION 2 — GASTROINTESTINAL & HEPATOBILIARY SURGERY", C_TEAL))
story.append(Spacer(1, 2*mm))

# ── 2A ACUTE ABDOMEN ──────────────────────────────────
story.append(Paragraph("ACUTE ABDOMEN", S["subsec"]))

alvarado_rows = [
    ["Migratory RIF pain", "1"],  ["Anorexia", "1"],  ["Nausea/Vomiting", "1"],
    ["RIF tenderness", "2"],      ["Rebound tenderness", "1"],
    ["Elevated temp (>37.3°C)", "1"],
    ["Leukocytosis (WBC > 10k)", "2"],    ["Neutrophilia (shift left)", "0"],
]
obstruction_rows = [
    ["Small bowel obstruction (SBO)", "Central/periumbilical; ladder pattern; no gas in colon"],
    ["Large bowel obstruction (LBO)", "Peripheral; inverted U frame; haustral markings"],
    ["Sigmoid volvulus", '"Coffee bean" / "bent inner tube" sign; apex at LUQ'],
    ["Caecal volvulus",  "Kidney-shaped air shadow; displaced to LUQ"],
]

story.append(two_col(
    [
        Paragraph("ALVARADO SCORE (Appendicitis) – MANTRELS", S["subsec"]),
        mini_table(["Feature", "Score"], alvarado_rows,
                   col_widths=[CONTENT_W*0.35, CONTENT_W*0.08]),
        Paragraph("Score: ≤4 Unlikely | 5–6 Possible | 7–8 Probable | ≥9 Almost certain", S["key"]),
        Spacer(1,2*mm),
        Paragraph("PERITONITIS", S["subsec"]),
        bullet("Primary – no perforation (SBP in cirrhosis; ascites PMNs > 250)"),
        bullet("Secondary – perforated viscus (PUD, appendix, diverticulitis)"),
        bullet("Tertiary – recurrent, resistant organisms post-surgery"),
    ],
    [
        Paragraph("INTESTINAL OBSTRUCTION – X-RAY SIGNS", S["subsec"]),
        mini_table(["Pattern","X-Ray Finding"], obstruction_rows,
                   col_widths=[CONTENT_W*0.22, CONTENT_W*0.38]),
        Spacer(1,2*mm),
        bullet("<b>Rigler's sign</b> – pneumoperitoneum (both sides of bowel wall visible)"),
        bullet("<b>Air under diaphragm</b> – erect CXR → perforation"),
        bullet("<b>String of pearls</b> – air trapped between plicae circulares (SBO)"),
    ],
    col_ratio=(45, 55)
))
story.append(Spacer(1, 2*mm))
story.append(HRFlowable(width=CONTENT_W, thickness=0.5, color=colors.HexColor("#CFD8DC")))
story.append(Spacer(1, 2*mm))

# ── 2B HERNIA ─────────────────────────────────────────
story.append(Paragraph("HERNIA", S["subsec"]))

hernia_rows = [
    ["Indirect inguinal",   "Lateral to IEA; through deep ring", "Young males; most common overall"],
    ["Direct inguinal",     "Medial to IEA; through Hesselbach's triangle", "Older males; weakness of floor"],
    ["Femoral",             "Below & lateral to pubic tubercle; through femoral ring", "Most common in females; highest strangulation risk"],
    ["Umbilical",           "Through umbilical ring", "Infants; adults with ascites/obesity"],
    ["Paraumbilical",       "Adjacent to umbilicus", "Multiparous women"],
    ["Spigelian",           "Through spigelian fascia (lateral border rectus)", "Interparietal; difficult to diagnose"],
]
story.append(mini_table(
    ["Type", "Anatomy", "Notes"],
    hernia_rows,
    col_widths=[CONTENT_W*0.15, CONTENT_W*0.42, CONTENT_W*0.43]
))
story.append(Spacer(1, 1*mm))
story.append(Paragraph("Hesselbach's triangle: Rectus medially | IEA laterally | Inguinal ligament inferiorly", S["key"]))
story.append(Spacer(1, 1*mm))

hernia_eponyms = [
    ["Richter's", "Only part of bowel wall trapped; no obstruction but strangulation possible"],
    ["Maydl's", '"W" hernia – loop within loop in sac; middle loop strangulates intra-abdominally'],
    ["Littre's", "Meckel's diverticulum in sac"],
    ["Amyand's", "Appendix in inguinal sac"],
    ["Pantaloon", "Both direct & indirect components astride IEA"],
]
story.append(mini_table(["Eponym", "Description"], hernia_eponyms,
             col_widths=[CONTENT_W*0.12, CONTENT_W*0.88]))
story.append(Spacer(1, 2*mm))
story.append(HRFlowable(width=CONTENT_W, thickness=0.5, color=colors.HexColor("#CFD8DC")))
story.append(Spacer(1, 2*mm))

# ── 2C HEPATOBILIARY ──────────────────────────────────
hb_left = [
    Paragraph("GALLSTONES & CHOLECYSTITIS", S["subsec"]),
    kv("Imaging", "USG – gold standard (95% sensitivity for stones)"),
    kv("Murphy's sign", "Tenderness + inspiratory arrest on palpation RHC"),
    kv("Charcot's triad", "Fever + jaundice + RHC pain → cholangitis"),
    kv("Reynold's pentad", "Charcot's + shock + altered consciousness → suppurative cholangitis"),
    Spacer(1,1*mm),
    Paragraph("OBSTRUCTIVE JAUNDICE", S["subsec"]),
    bullet("Dark urine, pale stools, pruritis, steatorrhoea"),
    bullet("ALP ↑↑, GGT ↑, conjugated bilirubin ↑"),
    kv("Courvoisier's law", "Palpable GB + painless jaundice → malignant obstruction (NOT stones)"),
    Spacer(1,1*mm),
    Paragraph("PANCREATIC CARCINOMA", S["subsec"]),
    bullet("CA 19-9 – tumour marker"),
    bullet("Head (70%) → early obstructive jaundice"),
    bullet("Whipple (pancreaticoduodenectomy) – for resectable head Ca"),
    bullet("5-year survival < 5% overall"),
]

hb_right = [
    Paragraph("ACUTE PANCREATITIS – RANSON'S CRITERIA", S["subsec"]),
    Paragraph("<b>At admission:</b>", S["cellb"]),
    bullet("Age > 55"),
    bullet("WBC > 16,000"),
    bullet("Glucose > 200 mg/dL"),
    bullet("LDH > 350 IU/L"),
    bullet("AST > 250 IU/L"),
    Paragraph("<b>Within 48 hours:</b>", S["cellb"]),
    bullet("Hct fall > 10%"),
    bullet("BUN rise > 5 mg/dL"),
    bullet("Ca < 8 mg/dL"),
    bullet("PaO2 < 60 mmHg"),
    bullet("Base deficit > 4 mEq/L"),
    bullet("Fluid sequestration > 6 L"),
    Paragraph("Score ≥ 3 → severe (mortality ↑↑)", S["key"]),
    Spacer(1,1*mm),
    Paragraph("Grey-Turner (flank) & Cullen (periumbilical) signs → haemorrhagic pancreatitis", S["tip"]),
]
story.append(two_col(hb_left, hb_right))
story.append(Spacer(1, 2*mm))
story.append(HRFlowable(width=CONTENT_W, thickness=0.5, color=colors.HexColor("#CFD8DC")))
story.append(Spacer(1, 2*mm))

# ── 2D STOMACH / OESOPHAGUS ───────────────────────────
gi_left = [
    Paragraph("PEPTIC ULCER DISEASE", S["subsec"]),
    kv("DU : GU ratio", "4:1; DU – H. pylori > 95%"),
    kv("Complications", "Bleeding (MC), Perforation, Obstruction, Malignancy (GU)"),
    kv("Perforated DU", "Commonest – anterior wall; treated: Graham's patch"),
    kv("Haemorrhage", "Spurting artery – gastroduodenal artery (posterior DU)"),
    Spacer(1,2*mm),
    Paragraph("ACHALASIA CARDIA", S["subsec"]),
    bullet("Failure of LES relaxation + absent peristalsis"),
    bullet("Barium swallow: 'Bird's beak' / 'Rat-tail' appearance"),
    bullet("Manometry – gold standard; high LES pressure"),
    bullet("Rx: Heller's myotomy (surgical); Pneumatic dilatation; Botox injection"),
]
gi_right = [
    Paragraph("GASTRIC CARCINOMA", S["subsec"]),
    bullet("<b>Most common type</b>: Adenocarcinoma"),
    bullet("<b>Location</b>: Antrum > Lesser curve"),
    bullet("<b>Virchow's node</b>: Left supraclavicular LN"),
    bullet("<b>Krukenberg tumour</b>: Ovarian metastasis"),
    bullet("<b>Sister Mary Joseph nodule</b>: Umbilical metastasis"),
    bullet("<b>Blumer's shelf</b>: Pouch of Douglas metastasis"),
    Spacer(1,1*mm),
    Paragraph("COLORECTAL CANCER – DUKE'S STAGING", S["subsec"]),
    mini_table(["Stage","Description","5-yr Survival"],[
        ["A","Mucosa/submucosa only","90%+"],
        ["B","Through muscle wall","70%"],
        ["C","LN involvement","30–50%"],
        ["D","Distant metastasis","< 5%"],
    ], col_widths=[CONTENT_W*0.07, CONTENT_W*0.28, CONTENT_W*0.1]),
    Spacer(1,1*mm),
    bullet("<b>Haemorrhoids</b>: 3, 7, 11 o'clock (Lateral, Right ant, Right post)"),
    bullet("<b>Goodsall's rule</b>: Posterior fistulae → curved track; Anterior → straight"),
]
story.append(two_col(gi_left, gi_right))
story.append(Spacer(1, 4*mm))

# ═══════════════════════════════════════════════════════
# SECTION 3 – ONCOLOGY & ENDOCRINE
# ═══════════════════════════════════════════════════════
story.append(PageBreak())
story.append(section_banner("SECTION 3 — ONCOLOGY & ENDOCRINE SURGERY", colors.HexColor("#880E4F")))
story.append(Spacer(1, 2*mm))

# ── 3A BREAST ─────────────────────────────────────────
breast_left = [
    Paragraph("BREAST – TRIPLE ASSESSMENT", S["subsec"]),
    bullet("<b>1. Clinical examination</b>"),
    bullet("<b>2. Imaging</b> – USG (< 35 yr) / Mammography (≥ 35 yr)"),
    bullet("<b>3. Biopsy</b> – FNAC or Core needle biopsy (CNB preferred)"),
    Spacer(1,1*mm),
    Paragraph("FIBROADENOMA vs FIBROCYSTIC", S["subsec"]),
    mini_table(["Feature","Fibroadenoma","Fibrocystic"],[
        ["Age",          "15–35 yr",       "35–50 yr"],
        ["Consistency",  "Rubbery, firm",  "Nodular, tender"],
        ["Cyclical pain","No",             "Yes"],
        ["Malignancy Rx","Very low",       "Slightly ↑"],
    ], col_widths=[CONTENT_W*0.12, CONTENT_W*0.15, CONTENT_W*0.15]),
]

breast_right = [
    Paragraph("BREAST CARCINOMA – TNM STAGING", S["subsec"]),
    mini_table(["Stage","Description"],[
        ["Stage 0",  "DCIS / LCIS – in situ"],
        ["Stage I",  "T ≤ 2 cm, N0, M0"],
        ["Stage II", "T 2–5 cm or N1 (mobile axillary LN)"],
        ["Stage III","T > 5 cm or N2/N3 (fixed/internal mammary LN)"],
        ["Stage IV", "Distant metastasis"],
    ], col_widths=[CONTENT_W*0.08, CONTENT_W*0.34]),
    Spacer(1,1*mm),
    Paragraph("MANAGEMENT", S["subsec"]),
    bullet("Early (I/II): BCS + Sentinel LN biopsy + Radiotherapy"),
    bullet("Locally advanced (III): Neo-adjuvant chemo → surgery"),
    bullet("Paget's disease of nipple → underlying DCIS/invasive Ca"),
    bullet("Post-mastectomy lymphoedema → Stewart-Treves syndrome (angiosarcoma)"),
    bullet("Hormone receptor +ve → Tamoxifen (pre-menopausal) / Aromatase inhibitor (post-menopausal)"),
]
story.append(two_col(breast_left, breast_right))
story.append(Spacer(1, 2*mm))
story.append(HRFlowable(width=CONTENT_W, thickness=0.5, color=colors.HexColor("#CFD8DC")))
story.append(Spacer(1, 2*mm))

# ── 3B THYROID ────────────────────────────────────────
thyroid_left = [
    Paragraph("THYROID CANCERS", S["subsec"]),
    mini_table(["Type","Frequency","Marker","Spread","Prognosis"],[
        ["Papillary",   "MC (~80%)",    "None specific",  "Lymphatics",    "Best"],
        ["Follicular",  "10–15%",       "Thyroglobulin",  "Blood (lung/bone)","Good"],
        ["Medullary",   "5%",           "Calcitonin",     "Both",          "Moderate"],
        ["Anaplastic",  "< 1%",         "None",           "Direct invasion","Worst"],
    ], col_widths=[CONTENT_W*0.1, CONTENT_W*0.1, CONTENT_W*0.15, CONTENT_W*0.14, CONTENT_W*0.1]),
    Spacer(1,1*mm),
    bullet("Papillary Ca – Orphan Annie eye nuclei; Psammoma bodies"),
    bullet("Medullary Ca – Amyloid stroma; associated with MEN 2A/2B"),
    bullet("FNAC – investigation of choice for thyroid nodule"),
    bullet("Solitary cold nodule – higher malignancy risk"),
]
thyroid_right = [
    Paragraph("THYROIDECTOMY COMPLICATIONS", S["subsec"]),
    mini_table(["Complication","Structure","Manifestation"],[
        ["RLN injury (unilateral)","Recurrent laryngeal nerve","Hoarseness"],
        ["RLN injury (bilateral)","Both RLN","Stridor → emergency airway"],
        ["Hypocalcaemia","Parathyroid glands removed/devascularised","Chvostek's + Trousseau's; tetany"],
        ["Thyroid storm","Excess T3/T4 release","Hyperpyrexia, tachycardia, AF"],
        ["External LN injury","External laryngeal nerve","Loss of high-pitched voice (cricothyroid)"],
    ], col_widths=[CONTENT_W*0.2, CONTENT_W*0.22, CONTENT_W*0.14]),
]
story.append(two_col(thyroid_left, thyroid_right))
story.append(Spacer(1, 2*mm))
story.append(HRFlowable(width=CONTENT_W, thickness=0.5, color=colors.HexColor("#CFD8DC")))
story.append(Spacer(1, 2*mm))

# ── 3C ENDOCRINE EMERGENCIES ──────────────────────────
endo_left = [
    Paragraph("PHAEOCHROMOCYTOMA", S["subsec"]),
    bullet("Tumour of adrenal medulla → excess catecholamines"),
    bullet("<b>Rule of 10</b>: 10% bilateral, 10% malignant, 10% extra-adrenal"),
    kv("Symptoms", "Paroxysmal hypertension, headache, sweating, palpitations (classic triad)"),
    kv("Investigation", "24-hr urine metanephrines + VMA; CT/MRI adrenal; MIBG scan"),
    kv("Pre-op Rx", "<b>Alpha-blocker FIRST</b> (Phenoxybenzamine × 2 wk), then beta-blocker"),
    kv("Surgery", "Laparoscopic adrenalectomy"),
    Paragraph("NEVER give beta-blocker before alpha-blocker → hypertensive crisis!", S["key"]),
]
endo_right = [
    Paragraph("ZOLLINGER-ELLISON SYNDROME (ZES)", S["subsec"]),
    bullet("Gastrin-secreting tumour (gastrinoma) in pancreas/duodenum"),
    bullet("<b>Whipple's triad</b>: Fasting hypoglycaemia + symptoms + relief with glucose (for insulinoma – not ZES)"),
    kv("ZES features", "Multiple, recurrent, atypical PUD; secretory diarrhoea; acid hypersecretion"),
    kv("Diagnosis", "Fasting serum gastrin > 1000 pg/mL + secretin stimulation test"),
    kv("Association", "MEN-1 (20–25% of ZES cases)"),
    kv("Rx", "High-dose PPI + surgical excision if localised"),
    Spacer(1,2*mm),
    Paragraph("MEN SYNDROMES AT A GLANCE", S["subsec"]),
    mini_table(["MEN","Components"],[
        ["MEN-1","3 P's: Parathyroid + Pituitary + Pancreas (ZES, insulinoma)"],
        ["MEN-2A","Phaeochromocytoma + Medullary thyroid Ca + Parathyroid hyperplasia"],
        ["MEN-2B","Phaeochromocytoma + Medullary thyroid Ca + Mucosal neuromas + Marfanoid"],
    ], col_widths=[CONTENT_W*0.06, CONTENT_W*0.5]),
]
story.append(two_col(endo_left, endo_right))
story.append(Spacer(1, 4*mm))

# ═══════════════════════════════════════════════════════
# SECTION 4 – UROLOGY & VASCULAR
# ═══════════════════════════════════════════════════════
story.append(PageBreak())
story.append(section_banner("SECTION 4 — UROLOGY & VASCULAR SURGERY", colors.HexColor("#1B5E20")))
story.append(Spacer(1, 2*mm))

# ── 4A UROLOGY ────────────────────────────────────────
uro_left = [
    Paragraph("BPH vs PROSTATE CARCINOMA", S["subsec"]),
    mini_table(["Feature","BPH","Prostate Ca"],[
        ["Age",       "50–70 yr",            "> 60 yr"],
        ["Location",  "Periurethral (transitional zone)","Peripheral zone"],
        ["PSA",       "Mildly ↑ (< 10)",     "Markedly ↑ (> 10; free PSA ↓)"],
        ["DRE",       "Smooth, rubbery",      "Hard, nodular, irregular"],
        ["Symptom",   "LUTS – obstructive",   "LUTS + haematuria + bone pain"],
        ["Met",       "None",                 "Osteoblastic bone mets (spine)"],
    ], col_widths=[CONTENT_W*0.1, CONTENT_W*0.2, CONTENT_W*0.22]),
    Spacer(1,1*mm),
    bullet("PSA < 4 – Normal; 4–10 – Grey zone; > 10 – High suspicion"),
    bullet("Gleason score – grading of prostate Ca (1–10); > 7 = aggressive"),
    bullet("TURP – gold standard Rx for BPH"),
]

uro_right = [
    Paragraph("RENAL CALCULI", S["subsec"]),
    mini_table(["Type","Composition","Radio-opacity","Association"],[
        ["Calcium oxalate","Ca oxalate monohydrate","Radio-opaque (MC)","Hyperoxaluria"],
        ["Calcium phosphate","Ca phosphate","Radio-opaque","RTA type I"],
        ["Struvite","Mg-NH4-phosphate","Radio-opaque (staghorn)","Urease organisms (Proteus)"],
        ["Uric acid","Uric acid","Radiolucent","Gout, low urine pH"],
        ["Cystine","Cystine","Faintly opaque","Cystinuria (AR)"],
    ], col_widths=[CONTENT_W*0.11, CONTENT_W*0.18, CONTENT_W*0.1, CONTENT_W*0.17]),
    Spacer(1,1*mm),
    bullet("<b>Gold standard</b> – Non-contrast CT KUB"),
    bullet("USG – first-line in pregnancy / children"),
    bullet("ESWL – stones < 2 cm; PCNL – staghorn / > 2 cm"),
    Spacer(1,2*mm),
    Paragraph("TESTICULAR TORSION vs EPIDIDYMO-ORCHITIS", S["subsec"]),
    mini_table(["Feature","Torsion","Epididymo-orchitis"],[
        ["Age","Adolescents (12–18)","Adults"],
        ["Onset","Sudden (at rest/sleep)","Gradual"],
        ["Cremasteric reflex","Absent","Present"],
        ["Prehn's sign","Pain not relieved on elevation","Pain relieved on elevation"],
        ["Rx","Emergency surgical exploration < 6 hr","Antibiotics (ciprofloxacin)"],
    ], col_widths=[CONTENT_W*0.12, CONTENT_W*0.16, CONTENT_W*0.18]),
]
story.append(two_col(uro_left, uro_right))
story.append(Spacer(1, 2*mm))
story.append(HRFlowable(width=CONTENT_W, thickness=0.5, color=colors.HexColor("#CFD8DC")))
story.append(Spacer(1, 2*mm))

# ── 4B VASCULAR ───────────────────────────────────────
vasc_left = [
    Paragraph("DEEP VEIN THROMBOSIS (DVT)", S["subsec"]),
    Paragraph("<b>Virchow's Triad:</b>", S["cellb"]),
    bullet("1. Stasis (immobility, CCF, pregnancy)"),
    bullet("2. Endothelial injury (trauma, surgery, catheter)"),
    bullet("3. Hypercoagulability (malignancy, OCP, thrombophilia)"),
    Spacer(1,1*mm),
    kv("Wells score", "≥ 2 → high probability; < 2 → low probability"),
    kv("D-dimer", "High sensitivity, low specificity; useful to RULE OUT"),
    kv("Gold standard", "Duplex USG (compression USG)"),
    kv("Rx", "LMWH → transition to Warfarin (INR 2–3) OR DOAC (Rivaroxaban)"),
    kv("Provoked DVT", "3 months anticoagulation"),
    kv("Unprovoked/recurrent", "6–12 months or indefinite"),
]

vasc_right = [
    Paragraph("VARICOSE VEINS", S["subsec"]),
    bullet("Dilated, tortuous, superficial veins (GSV most common)"),
    kv("Trendelenburg test", "Tourniquet at SFJ; stand up → no filling = SFJ incompetence"),
    kv("Perthe's test", "Exercise with tourniquet; pain = deep vein obstruction"),
    kv("Complications", "Phlebitis, ulcer (gaiter area), haemorrhage, lipodermatosclerosis"),
    kv("Rx", "Surgery (saphenofemoral ligation + stripping) / EVLT / Foam sclerotherapy"),
    Spacer(1,2*mm),
    Paragraph("AORTIC ANEURYSM", S["subsec"]),
    bullet("AAA: > 3 cm diameter; repair if > 5.5 cm (males) or > 5 cm (females)"),
    bullet("Ruptured AAA: Triad – sudden severe back pain + hypotension + pulsatile abdominal mass"),
    bullet("Screening: USG in males 65–74 yr (one-time)"),
    bullet("Rx: EVAR (endovascular) or Open repair"),
    bullet("Leriche syndrome: Aortoiliac occlusion → bilateral claudication + impotence"),
]
story.append(two_col(vasc_left, vasc_right))
story.append(Spacer(1, 4*mm))

# ═══════════════════════════════════════════════════════
# SECTION 5 – MUST-KNOW MNEMONICS & RAPID FACTS
# ═══════════════════════════════════════════════════════
story.append(section_banner("SECTION 5 — MUST-KNOW MNEMONICS & RAPID FACTS", colors.HexColor("#4A148C")))
story.append(Spacer(1, 2*mm))

mnemonic_rows = [
    ["FAST FACTS", "BURNS – RULE OF NINES"],
    [
        Paragraph(
            "<b>HACEK organisms</b> (endocarditis): Haemophilus, Actinobacillus, Cardiobacterium, Eikenella, Kingella\n\n"
            "<b>Ortolani</b> – relocates dislocated hip (click OUT)\n"
            "<b>Barlow</b> – dislocates unstable hip (click IN)\n\n"
            "<b>Chvostek</b> – tapping facial nerve → facial twitch (hypocalcaemia)\n"
            "<b>Trousseau</b> – BP cuff inflation → carpal spasm (hypocalcaemia)\n\n"
            "<b>Buerger's disease</b> – young male smoker; digital ischaemia; stop smoking!\n\n"
            "<b>Battle's sign</b> – bruising mastoid (base of skull #)\n"
            "<b>Raccoon eyes</b> – periorbital bruising (anterior fossa #)\n"
            "<b>CSF rhinorrhoea</b> – halo sign on gauze; β2-transferrin confirms",
            S["body"]
        ),
        Paragraph(
            "<b>Adult Rule of Nines:</b>\n"
            "Head & Neck = 9%\n"
            "Each Arm = 9%  (total 18%)\n"
            "Chest = 9%  |  Abdomen = 9%  (Ant trunk 18%)\n"
            "Upper back = 9%  |  Lower back = 9%  (Post trunk 18%)\n"
            "Each Thigh = 9%  |  Each Lower leg = 9%  (Each leg 18%)\n"
            "Perineum = 1%\n\n"
            "<b>Children:</b> Lund & Browder chart (head is larger)\n\n"
            "<b>Burn depth:</b>\n"
            "• Superficial (1°) – erythema only; no fluid loss\n"
            "• Partial thickness (2°) – blisters; painful; re-epithelialise\n"
            "• Full thickness (3°) – leathery; painless; needs grafting\n\n"
            "<b>Inhalation injury</b> – suspect if singed nares, hoarseness, carbonaceous sputum → early intubation",
            S["body"]
        ),
    ],
]

mn_table_data = [
    [Paragraph("MNEMONICS & KEY EPONYMS", S["subsec"]),
     Paragraph("BURNS – RULE OF NINES", S["subsec"])],
    [mnemonic_rows[1][0], mnemonic_rows[1][1]],
]
mn_t = Table(mn_table_data, colWidths=[CONTENT_W*0.5, CONTENT_W*0.5])
mn_t.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#EDE7F6")),
    ("BACKGROUND", (0,1), (0,1), colors.HexColor("#F3E5F5")),
    ("BACKGROUND", (1,1), (1,1), colors.HexColor("#FFF8E1")),
    ("VALIGN",     (0,0), (-1,-1), "TOP"),
    ("TOPPADDING", (0,0), (-1,-1), 4),
    ("BOTTOMPADDING",(0,0),(-1,-1), 4),
    ("LEFTPADDING",(0,0), (-1,-1), 6),
    ("RIGHTPADDING",(0,0),(-1,-1), 6),
    ("BOX",        (0,0), (-1,-1), 0.5, colors.HexColor("#B39DDB")),
    ("INNERGRID",  (0,0), (-1,-1), 0.3, colors.HexColor("#CE93D8")),
]))
story.append(mn_t)
story.append(Spacer(1, 3*mm))

# ── STRATEGIC TIPS BOX ────────────────────────────────
tips_data = [[
    Paragraph("FMGE STRATEGIC TIPS", S["subsec"]),
    Paragraph(
        "1. <b>Next best step</b> questions: Always secure Airway first in trauma; rule out life-threats before definitive diagnosis.\n"
        "2. <b>Repeat themes</b>: GCS scoring, Rule of Nines, Alvarado score, Virchow's triad, Duke's staging – memorise numbers cold.\n"
        "3. <b>Clinical scenario approach</b>: Identify key words – 'calf pain + swelling after long flight' = DVT; 'painless jaundice + palpable GB' = malignancy (Courvoisier).\n"
        "4. <b>Investigations hierarchy</b>: USG first (gallstones, DVT, appendicitis); CT for trauma grading; Manometry for achalasia; Non-contrast CT KUB for renal stones.\n"
        "5. <b>Pre-op prep order</b>: Phaeochromocytoma → alpha-blocker FIRST, then beta-blocker. Never reverse.\n"
        "6. <b>PYQ strategy</b>: Last 10 years papers contain ~40% directly repeated questions. Focus on 2014–2024 cycle questions.",
        S["body"]
    ),
]]
tips_t = Table(tips_data, colWidths=[CONTENT_W*0.22, CONTENT_W*0.78])
tips_t.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (0,0), colors.HexColor("#0D47A1")),
    ("BACKGROUND", (1,0), (1,0), colors.HexColor("#E3F2FD")),
    ("TEXTCOLOR",  (0,0), (0,0), C_WHITE),
    ("VALIGN",     (0,0), (-1,-1), "MIDDLE"),
    ("TOPPADDING", (0,0), (-1,-1), 6),
    ("BOTTOMPADDING",(0,0),(-1,-1), 6),
    ("LEFTPADDING",(0,0), (-1,-1), 8),
    ("BOX",        (0,0), (-1,-1), 0.8, colors.HexColor("#1565C0")),
]))
story.append(tips_t)
story.append(Spacer(1, 3*mm))

# ── FOOTER NOTE ───────────────────────────────────────
footer = Paragraph(
    "Prepared by Orris Medical  |  FMGE 2026 Surgery High-Yield Revision  |  Based on last-decade question pattern analysis  |  For educational use only",
    ParagraphStyle("footer", fontSize=6, textColor=colors.HexColor("#90A4AE"), alignment=TA_CENTER)
)
story.append(HRFlowable(width=CONTENT_W, thickness=0.5, color=colors.HexColor("#B0BEC5")))
story.append(Spacer(1, 1*mm))
story.append(footer)

# ── BUILD ──────────────────────────────────────────────
doc.build(story)
print(f"PDF saved to {OUTPUT}")
Running Command

cd /home/daytona/workspace/fmge-surgery && python build_cheatsheet.py 2>&1

Running Command

ls -lh /home/daytona/workspace/fmge-surgery/FMGE_Surgery_Cheatsheet.pdf

Your cheat sheet is ready!

FMGE Surgery Cheatsheet

PDF Document · PDF


Here's what's packed into the 4-page, colour-coded PDF:
Page 1 — Core General Surgery
  • Wound healing phases with exact timelines, suture materials table (absorbable vs. non-absorbable), SSI classification
  • Haemorrhagic shock classification table (Class I–IV) with HR, SBP, UO, and fluid management
  • Parkland formula box (burns fluid resuscitation)
  • ATLS A-B-C-D-E protocol, GCS scoring table, AAST splenic trauma grading
  • Necrotising fasciitis (Type I vs II) and Gas Gangrene management
Page 2 — GI & Hepatobiliary Surgery
  • Alvarado/MANTRELS score, intestinal obstruction X-ray signs (coffee bean, string of pearls, Rigler's)
  • Hernia anatomy table (direct vs indirect, femoral, spigelian) + all eponyms (Richter's, Maydl's, Littre's, Amyand's, Pantaloon)
  • Gallstones, Charcot's triad, Reynold's pentad, Courvoisier's law
  • Ranson's criteria for pancreatitis (admission + 48-hr), Duke's staging for colorectal Ca
  • Achalasia cardia, gastric carcinoma metastatic eponyms (Virchow, Krukenberg, Blumer's shelf)
Page 3 — Oncology & Endocrine Surgery
  • Breast triple assessment, fibroadenoma vs fibrocystic disease comparison, breast Ca TNM staging
  • Thyroid cancer types (frequency, marker, spread, prognosis), thyroidectomy complications table
  • Phaeochromocytoma Rule of 10, pre-op alpha-then-beta sequence, MEN syndromes
  • ZES diagnosis criteria, MEN-1/2A/2B components
Page 4 — Urology, Vascular & Rapid Facts
  • BPH vs prostate Ca comparison (PSA, DRE, zone, mets), Gleason score, renal calculi types + radio-opacity
  • Testicular torsion vs epididymo-orchitis (age, cremasteric reflex, Prehn's sign)
  • DVT - Virchow's triad, Wells score, Duplex USG as gold standard, anticoagulation duration
  • Varicose veins tests, AAA repair thresholds, Leriche syndrome
  • Rule of Nines (burns), burn depth classification, key eponyms (Battle's sign, Raccoon eyes), strategic revision tips

For FMGE surgery, the exam emphasizes clinical recognition and "next-best-step" management over complex operative techniques. Image-Based Questions (IBQs) are a major component, often appearing in clusters related to specific high-yield systems. ### **High-Yield IBQ Patterns (Must-Know)** * **Imaging:** * **X-rays:** Signs of intestinal obstruction (air-fluid levels, stack of coins), pneumoperitoneum (gas under the diaphragm), and tension pneumothorax (tracheal deviation, absent lung markings). * **CT Scans:** Epidural (lentiform/biconvex) vs. Subdural (crescentic) hematomas, and pancreatitis staging (Balthazar score). * **Ultrasound:** Gallstones (acoustic shadowing), FAST protocol images, and testicular masses (seminoma vs. other tumors). * **Clinical Signs/Instruments:** * **Instruments:** Familiarize yourself with common surgical tools (forceps, retractors, trocars). * **Signs:** Murphy’s sign (cholecystitis), McBurney’s point tenderness (appendicitis), and classic appearance of ulcers (trophic vs. venous). * **Pathology Slides:** * **Thyroid:** "Orphan Annie" nuclei (papillary CA), Psammoma bodies. * **Breast:** Features of inflammatory carcinoma (peau d'orange), Paget’s disease (nipple erosion). ### **High-Yield Surgery Topics for Repeat Questions** | Category | Priority Topics | |---|---| | **Trauma** | ATLS protocol (ABCDE), GCS scoring, fluid resuscitation (Parkland formula), and tension pneumothorax management. | | **Gastrointestinal** | Appendicitis (Alvarado score), cholecystitis (Charcot/Reynolds triad), and intestinal obstruction. | | **Oncology** | Thyroid nodules (TIRADS, management), Breast cancer (TNM staging, triple assessment), and tumor markers (CEA, AFP, CA-19.9). | | **Hernia** | Direct vs. Indirect inguinal hernia (anatomical differentiation), femoral hernia, and strangulation signs. | | **Urology** | BPH (IPSS, PSA), prostate carcinoma, and urinary stones (imaging and metabolic workup). | | **Vascular/Infection** | DVT (Wells score), Gas gangrene, Tetanus prophylaxis, and Necrotizing fasciitis. | ### **Revision Strategy for IBQs** 1. **Use Visual Databases:** Don't just read about signs; view them. Practice identifying the "classic" appearance of conditions like appendicular lumps or breast lumps. 2. **Focus on "The First Step":** Most FMGE questions ask for the *initial* investigation (e.g., USG for gallstones) versus the *gold standard* investigation (e.g., CT or MRCP for biliary pathology). 3. **Active Recall for PYQs:** Since many surgical concepts and images repeat, use your last 10 years of PYQs specifically to build an "image bank." If an X-ray or CT has appeared once, be prepared for it to return in a slightly modified clinical scenario. Surgery High-Yield Topics & IBQs for FMGE This video provides a focused review of high-yield surgical concepts and image-based patterns that are frequently tested in the FMGE, making it an excellent resource for your revision.

Asking for Preferences
Reading File
Searching Content

"FOOTER NOTE" in ~/fmge-surgery

Reading File
Editing File

~/fmge-surgery/build_cheatsheet.py

Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/fmge-surgery/build_cheatsheet.py'
Running Command

cd /home/daytona/workspace/fmge-surgery && python build_cheatsheet.py 2>&1

Running Command

ls -lh /home/daytona/workspace/fmge-surgery/FMGE_Surgery_Cheatsheet.pdf

Updated PDF is ready (grew from 29 KB to 45 KB with the new content):

FMGE Surgery Cheatsheet

PDF Document · PDF


Section 6 — IBQ Master Guide now added to your existing cheat sheet. Here's what's in it:
6A — Chest & Abdominal X-ray Classic Signs Full table: Pneumoperitoneum (Rigler's sign, football sign), Tension PTX (tracheal deviation, clinical diagnosis warning), SBO vs LBO (valvulae conniventes vs haustral markings, stack of coins vs inverted-U), Sigmoid volvulus (coffee bean / omega sign), Caecal volvulus - each with classic sign + additional finding + key management action.
6B — CT Scan IBQ Patterns Extradural (biconvex, does NOT cross sutures) vs Subdural (crescentic, CROSSES sutures), SAH (basal cisterns, thunderclap), Balthazar/CTSI pancreatitis scoring, Aortic dissection, Ruptured AAA, Liver and Splenic trauma grading with CT blush significance.
6C — Ultrasound IBQ Patterns Gallstones (acoustic shadowing, WES sign), FAST protocol (all 5 windows including eFAST for pneumothorax), Testicular masses (seminoma vs NSGCT vs epididymo-orchitis vs torsion with Doppler), TIRADS 1-5 grading for thyroid nodules.
6D — Pathology Slides Orphan Annie nuclei + psammoma bodies (papillary Ca), amyloid stroma (medullary Ca), capsular invasion (follicular Ca), peau d'orange (inflammatory breast Ca), Paget cells with clear halo, DCIS comedo necrosis, keratin pearls (SCC), peripheral palisading (BCC).
6E — Surgical Instruments 12 instruments: Kocher's, Babcock's, Allis, artery forceps, Langenbeck, Deaver, trocar/cannula, Veress needle, laparoscope, Sengstaken-Blakemore tube, Ryle's tube, Foley catheter - each with appearance and surgical use.
6F — Clinical Signs & Ulcer Types Arterial vs Venous vs Neuropathic ulcer comparison (site, edge, base, pain, pulses), plus 11 abdominal signs (Murphy's, McBurney's, Rovsing's, Psoas, Obturator, Cullen's, Grey Turner's, Courvoisier's, Carnett's, Boas's, Troisier's).
6G — Tumour Markers 12 markers: CEA, AFP, β-hCG, CA 19-9, CA 125, CA 15-3, PSA, Calcitonin, Thyroglobulin, LDH, Chromogranin A, PLAP - each with primary tumour association and key notes.
6H — IBQ Strategy Box 7 actionable exam techniques: systematic X-ray reading order, EDH vs SDH one-liner, ultrasound echo pattern rules, first-step vs gold-standard investigation matrix, psammoma body differential, instrument ID shortcuts, and clinical sign cluster recall.

Is there anything important left out for required and important for fmge if there's more then add it to the existing pdf

general-purpose

Perform a comprehensive gap analysis for FMGE (Foreign Medical Graduates Examination, India) Surgery subject. The existing cheat sheet already covers these topics: SECTION 1 - Core General Surgery: - Wound healing (phases, types, suture materials, SSI) - Shock & fluid resuscitation (haemorrhagic shock classes I-IV, shock types, Parkland formula) - Trauma (ATLS ABCDE, GCS, splenic trauma grading AAST) - Surgical infections (sterilisation, NF, gas gangrene) SECTION 2 - GI & Hepatobiliary: - Acute abdomen (Alvarado score, intestinal obstruction X-ray signs) - Hernia (all types, eponyms) - Hepatobiliary (gallstones, cholecystitis, obstructive jaundice, pancreatitis-Ranson's, Whipple) - Stomach/Oesophagus (PUD, achalasia, gastric Ca eponyms) - Colorectal (Duke's staging, haemorrhoids, Goodsall's rule) SECTION 3 - Oncology & Endocrine: - Breast (triple assessment, fibroadenoma vs fibrocystic, TNM staging, management) - Thyroid (cancer types, complications of thyroidectomy) - Endocrine emergencies (phaeochromocytoma, ZES, MEN syndromes) SECTION 4 - Urology & Vascular: - BPH vs prostate Ca, renal calculi, testicular torsion - DVT (Virchow's triad, Wells score), varicose veins, AAA SECTION 5 - Mnemonics & Rapid Facts: - Rule of Nines, burns depth, key eponyms SECTION 6 - IBQ Master Guide: - X-ray signs, CT patterns (EDH/SDH, pancreatitis Balthazar), USG (gallstones, FAST, testicular, TIRADS) - Pathology slides (thyroid, breast, appendix, skin) - Surgical instruments (12 instruments) - Clinical signs & ulcer types - Tumour markers (12 markers) - IBQ strategy tips Your task: Identify ALL important FMGE surgery topics that are MISSING or insufficiently covered in the above list. Focus on topics that: 1. Commonly appear in FMGE PYQs (previous year questions) 2. Are part of the standard MCI/NBE surgery curriculum tested in FMGE 3. Are high-yield clinical/exam topics Please research this thoroughly using web search to find FMGE surgery syllabus, PYQ analysis, and coaching resources. Then compile a precise list of missing topics organized by category, with specific details about what facts/numbers/concepts need to be included. Return a structured list of missing topics with enough detail that another agent can write the actual content for the PDF. Be specific - include the key facts, numbers, classifications, and mnemonics for each missing topic.

Searching the Web

FMGE surgery subject syllabus topics NBE MCI 2023 2024

Searching the Web

FMGE previous year questions surgery PYQ high yield topics analysis

Searching the Web

FMGE surgery important topics frequently asked questions coaching notes

Reading Web Page

https://studyfmge.com/blog/high-yield-topics-in-surgery-ever…

Searching the Web

FMGE surgery PYQ 2022 2023 2024 questions appendix amputation skin graft anastomosis

Searching the Web

FMGE surgery topics head neck salivary gland peripheral vascular disease arterial diseases frequently asked

Reading Web Page

https://www.prepladder.com/fmge-study-material/previous-year…

Searching the Web

FMGE surgery topics splenomegaly splenectomy anorectal fistula fissure pilonidal sinus high yield

Searching the Web

FMGE surgery topics pediatric surgery intussusception pyloric stenosis esophageal atresia skin grafts flaps

Searching the Web

FMGE surgery complete topic list Boyd grading peripheral vascular claudication amputation levels 2023 2024

Searching the Web

FMGE surgery important topics burns classification Baux score skin grafts types donor site recipient

Searching the Web

FMGE surgery neck swelling thyroglossal cyst branchial cyst lymphoma salivary gland parotid questions

Finding Sources
Searching the Web

FMGE surgery Fontaine classification PAD Buerger disease Leriche syndrome carotid endarterectomy PYQ

Searching the Web

FMGE surgery topics laparoscopy thoracic surgery pneumothorax empyema transplant immunosuppression frequently tested

Finding Sources
Searching the Web

FMGE surgery complete topic list 2024 appendix Meckel diverticulum spleen portal hypertension esophageal varices

Finding Sources
Reading Web Page

https://www.diginerve.com/blogs/fmge-application-form-eligib…

Finding Sources
Searching the Web

FMGE surgery high yield 2024 list craniocerebral injury head injury ICP management chest trauma hemothorax

Searching the Web

FMGE surgery frequently asked topics ulcer comparison Marjolin venous arterial neuropathic lymphedema staging

Finding Sources
Searching the Web

FMGE surgery skin grafts types STSG FTSG flap classification random axial perforator pilonidal karydakis

Finding Sources
Searching the Web

FMGE surgery IBQ image based questions commonly tested X-ray barium swallow CT abdomen endoscopy findings

Searching the Web

FMGE surgery topics appendicitis Alvarado score Rovsing Psoas signs perforated Meckel diverticulum frequently asked

Searching the Web

FMGE surgery portal hypertension caput medusae Cruveilhier Baumgarten TIPSS shunts Child Pugh score

Searching the Web

FMGE surgery topics commonly missed hand infections paronychia felon tenosynovitis spaces foot infections high yield

Searching the Web

FMGE surgery colorectal cancer HNPCC FAP IBD Crohn colitis surgical management frequently tested PYQ

Searching the Web

FMGE surgery urological topics bladder carcinoma nephroblastoma Wilms tumor priapism varicocele hydrocele orchidopexy

Searching the Web

FMGE surgery topics spleen hypersplenism indications splenectomy post-splenectomy sepsis overwhelming infection vaccines

This is a shared conversation. Sign in to Orris to start your own chat.