Create notes for me for neet pg of surgery from pst 10 years with road maps
NEET PG surgery high yield topics past 10 years previous year questions pattern 2014-2024
https://image.prepladder.com/content/High-Yield%20Topics%20f…
mkdir -p /home/daytona/workspace/neet-pg-surgery && ls /home/daytona/workspace/n…
~/neet-pg-surgery/create_pptx.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = 'LAYOUT_16x9';
pres.title = 'NEET PG Surgery - High Yield Notes (Past 10 Years)';
pres.author = 'Orris AI';
// ─── COLOR PALETTE ───────────────────────────────────────────────
const C = {
darkBg: "0D1B2A", // deep navy (title/section slides)
midBg: "1B2A3B", // medium navy
accent: "E8AF2C", // gold accent
accentRed:"E84040", // warning/red
accentGreen:"2ECC71", // green
cardBg: "162032", // card background
white: "FFFFFF",
lightGray:"D0D8E4",
subtleTxt:"9EB5CC",
orange: "F39C12",
teal: "1ABC9C",
purple: "9B59B6",
};
// ─── HELPERS ─────────────────────────────────────────────────────
function titleSlide(title, subtitle) {
let s = pres.addSlide();
s.background = { color: C.darkBg };
// Gold accent bar left
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: C.accent } });
// Decorative circles
s.addShape(pres.ShapeType.ellipse, { x: 8.5, y: -0.5, w: 2.8, h: 2.8, fill: { color: C.midBg }, line: { color: C.accent, width: 2 } });
s.addShape(pres.ShapeType.ellipse, { x: 9.2, y: 3.8, w: 1.8, h: 1.8, fill: { color: C.midBg }, line: { color: C.accent, width: 1 } });
// Title
s.addText(title, {
x: 0.5, y: 1.6, w: 8.5, h: 1.4,
fontSize: 36, bold: true, color: C.white, fontFace: "Calibri",
margin: 0
});
// Gold underline
s.addShape(pres.ShapeType.rect, { x: 0.5, y: 3.15, w: 6, h: 0.06, fill: { color: C.accent } });
// Subtitle
s.addText(subtitle, {
x: 0.5, y: 3.3, w: 8.5, h: 0.9,
fontSize: 16, color: C.lightGray, fontFace: "Calibri", italic: true
});
return s;
}
function sectionSlide(num, title, emoji) {
let s = pres.addSlide();
s.background = { color: C.darkBg };
// Full-width accent bar top
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.14, fill: { color: C.accent } });
// Big circle decoration
s.addShape(pres.ShapeType.ellipse, { x: 7.2, y: 0.8, w: 3.5, h: 3.5, fill: { color: C.midBg }, line: { color: C.accent, width: 2 } });
// Section number
s.addText(`${num}`, { x: 7.6, y: 1.4, w: 2.5, h: 2, fontSize: 72, bold: true, color: C.accent, align: "center", fontFace: "Calibri" });
// Title
s.addText(`${emoji} ${title}`, {
x: 0.5, y: 1.8, w: 6.8, h: 1.6,
fontSize: 34, bold: true, color: C.white, fontFace: "Calibri"
});
// Bottom label
s.addText("NEET PG SURGERY • HIGH YIELD", {
x: 0.5, y: 4.9, w: 9, h: 0.5,
fontSize: 11, color: C.subtleTxt, charSpacing: 3
});
return s;
}
function contentSlide(title, bullets, opts = {}) {
let s = pres.addSlide();
s.background = { color: C.midBg };
// Title bar
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.85, fill: { color: C.darkBg } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 0.85, w: 10, h: 0.06, fill: { color: opts.accentColor || C.accent } });
s.addText(title, {
x: 0.3, y: 0.08, w: 9.4, h: 0.7,
fontSize: 18, bold: true, color: C.white, fontFace: "Calibri", valign: "middle"
});
// NEET tag
s.addShape(pres.ShapeType.roundRect, { x: 8.5, y: 0.12, w: 1.3, h: 0.42, fill: { color: opts.accentColor || C.accent }, rectRadius: 0.05 });
s.addText("NEET PG", { x: 8.5, y: 0.12, w: 1.3, h: 0.42, fontSize: 9, bold: true, color: C.darkBg, align: "center", valign: "middle" });
// Build bullet items
const items = bullets.map((b, i) => {
if (typeof b === "string") {
return { text: b, options: { bullet: { code: "2022" }, breakLine: true, fontSize: 13.5, color: C.white, indentLevel: 0 } };
} else if (b.type === "header") {
return { text: b.text, options: { breakLine: true, fontSize: 14, bold: true, color: opts.accentColor || C.accent, indentLevel: 0 } };
} else if (b.type === "sub") {
return { text: b.text, options: { bullet: { code: "25B6" }, breakLine: true, fontSize: 12.5, color: C.lightGray, indentLevel: 1 } };
} else if (b.type === "warn") {
return { text: "⚠ " + b.text, options: { breakLine: true, fontSize: 13, bold: true, color: C.accentRed, indentLevel: 0 } };
} else if (b.type === "key") {
return { text: "★ " + b.text, options: { breakLine: true, fontSize: 13.5, bold: true, color: C.accent, indentLevel: 0 } };
}
return { text: b.text || b, options: { breakLine: true, fontSize: 13.5, color: C.white, indentLevel: 0 } };
});
s.addText(items, {
x: 0.3, y: 1.05, w: 9.4, h: 4.3,
fontFace: "Calibri", valign: "top", lineSpacingMultiple: 1.15
});
return s;
}
function roadmapSlide(title, steps, color) {
let s = pres.addSlide();
s.background = { color: C.darkBg };
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.85, fill: { color: C.cardBg } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 0.85, w: 10, h: 0.07, fill: { color: color || C.teal } });
s.addText("🗺 ROADMAP: " + title, {
x: 0.3, y: 0.1, w: 9.4, h: 0.65,
fontSize: 17, bold: true, color: C.white, fontFace: "Calibri", valign: "middle"
});
const n = steps.length;
const boxW = 9.2 / n - 0.15;
const arrowW = 0.15;
const startX = 0.3;
const boxY = 1.25;
const boxH = 3.8;
steps.forEach((step, i) => {
const x = startX + i * (boxW + arrowW);
const accent = step.color || color || C.teal;
// Card background
s.addShape(pres.ShapeType.roundRect, {
x, y: boxY, w: boxW, h: boxH,
fill: { color: C.midBg },
line: { color: accent, width: 1.5 },
rectRadius: 0.08
});
// Step number header
s.addShape(pres.ShapeType.roundRect, {
x, y: boxY, w: boxW, h: 0.55,
fill: { color: accent },
rectRadius: 0.08
});
s.addText(`STEP ${i + 1}`, {
x, y: boxY, w: boxW, h: 0.55,
fontSize: 11, bold: true, color: C.darkBg, align: "center", valign: "middle", fontFace: "Calibri"
});
// Step title
s.addText(step.title, {
x: x + 0.05, y: boxY + 0.62, w: boxW - 0.1, h: 0.55,
fontSize: 10.5, bold: true, color: accent, align: "center", fontFace: "Calibri"
});
// Body bullets
const bodyItems = step.body.map(b => ({
text: b, options: { bullet: { code: "2022" }, breakLine: true, fontSize: 10, color: C.lightGray }
}));
s.addText(bodyItems, {
x: x + 0.07, y: boxY + 1.22, w: boxW - 0.14, h: boxH - 1.3,
fontFace: "Calibri", valign: "top", lineSpacingMultiple: 1.2
});
// Arrow between cards
if (i < n - 1) {
s.addText("→", {
x: x + boxW, y: boxY + boxH / 2 - 0.25, w: arrowW, h: 0.5,
fontSize: 14, bold: true, color: accent, align: "center"
});
}
});
return s;
}
function twoColumnSlide(title, leftTitle, leftItems, rightTitle, rightItems, opts = {}) {
let s = pres.addSlide();
s.background = { color: C.midBg };
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.85, fill: { color: C.darkBg } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 0.85, w: 10, h: 0.06, fill: { color: opts.color || C.teal } });
s.addText(title, { x: 0.3, y: 0.08, w: 9.4, h: 0.7, fontSize: 18, bold: true, color: C.white, fontFace: "Calibri", valign: "middle" });
// Left column
s.addShape(pres.ShapeType.roundRect, { x: 0.2, y: 1.1, w: 4.6, h: 4.3, fill: { color: C.cardBg }, line: { color: opts.leftColor || C.teal, width: 1.5 }, rectRadius: 0.08 });
s.addShape(pres.ShapeType.rect, { x: 0.2, y: 1.1, w: 4.6, h: 0.52, fill: { color: opts.leftColor || C.teal } });
s.addText(leftTitle, { x: 0.2, y: 1.1, w: 4.6, h: 0.52, fontSize: 13, bold: true, color: C.darkBg, align: "center", valign: "middle" });
const leftBullets = leftItems.map(b => ({ text: b, options: { bullet: { code: "2022" }, breakLine: true, fontSize: 12, color: C.white } }));
s.addText(leftBullets, { x: 0.3, y: 1.72, w: 4.4, h: 3.6, fontFace: "Calibri", valign: "top", lineSpacingMultiple: 1.2 });
// Right column
s.addShape(pres.ShapeType.roundRect, { x: 5.2, y: 1.1, w: 4.6, h: 4.3, fill: { color: C.cardBg }, line: { color: opts.rightColor || C.orange, width: 1.5 }, rectRadius: 0.08 });
s.addShape(pres.ShapeType.rect, { x: 5.2, y: 1.1, w: 4.6, h: 0.52, fill: { color: opts.rightColor || C.orange } });
s.addText(rightTitle, { x: 5.2, y: 1.1, w: 4.6, h: 0.52, fontSize: 13, bold: true, color: C.darkBg, align: "center", valign: "middle" });
const rightBullets = rightItems.map(b => ({ text: b, options: { bullet: { code: "2022" }, breakLine: true, fontSize: 12, color: C.white } }));
s.addText(rightBullets, { x: 5.3, y: 1.72, w: 4.4, h: 3.6, fontFace: "Calibri", valign: "top", lineSpacingMultiple: 1.2 });
return s;
}
function weightageSlide() {
let s = pres.addSlide();
s.background = { color: C.darkBg };
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.85, fill: { color: C.cardBg } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 0.85, w: 10, h: 0.07, fill: { color: C.accent } });
s.addText("📊 NEET PG SURGERY — SUBJECT WEIGHTAGE (Past 10 Years)", {
x: 0.3, y: 0.1, w: 9.4, h: 0.65, fontSize: 16, bold: true, color: C.white, fontFace: "Calibri", valign: "middle"
});
// Bar chart visual
const bars = [
{ label: "2015", val: 18, color: C.subtleTxt },
{ label: "2016", val: 20, color: C.subtleTxt },
{ label: "2017", val: 22, color: C.subtleTxt },
{ label: "2018", val: 20, color: C.subtleTxt },
{ label: "2019", val: 23, color: C.lightGray },
{ label: "2020", val: 46, color: C.orange },
{ label: "2021", val: 32, color: C.orange },
{ label: "2022", val: 31, color: C.accent },
{ label: "2023", val: 27, color: C.accentGreen },
{ label: "2024", val: 25, color: C.teal },
];
const maxVal = 50;
const chartH = 3.2;
const chartY = 1.2;
const chartX = 0.8;
const barW = 0.62;
const gap = 0.26;
bars.forEach((b, i) => {
const bH = (b.val / maxVal) * chartH;
const bY = chartY + chartH - bH;
const bX = chartX + i * (barW + gap);
s.addShape(pres.ShapeType.roundRect, { x: bX, y: bY, w: barW, h: bH, fill: { color: b.color }, rectRadius: 0.04 });
s.addText(`${b.val}`, { x: bX, y: bY - 0.32, w: barW, h: 0.3, fontSize: 10, bold: true, color: b.color, align: "center" });
s.addText(b.label, { x: bX, y: chartY + chartH + 0.05, w: barW, h: 0.28, fontSize: 10, color: C.lightGray, align: "center" });
});
// Y-axis line
s.addShape(pres.ShapeType.line, { x: chartX - 0.05, y: chartY, w: 0, h: chartH, line: { color: C.subtleTxt, width: 1 } });
// Key insight
s.addShape(pres.ShapeType.roundRect, { x: 0.3, y: 4.7, w: 9.4, h: 0.72, fill: { color: C.cardBg }, line: { color: C.accent, width: 1.5 }, rectRadius: 0.06 });
s.addText("★ Surgery = 20–30 MCQs in NEET PG • Uptrending subject • Focus on GI, Trauma, Breast, Thyroid, Hernia", {
x: 0.4, y: 4.72, w: 9.2, h: 0.68, fontSize: 12.5, bold: true, color: C.accent, align: "center", valign: "middle", fontFace: "Calibri"
});
return s;
}
// =============================================
// SLIDE CREATION BEGINS
// =============================================
// ── SLIDE 1: Title ─────────────────────────────────
titleSlide(
"NEET PG Surgery\nHigh-Yield Notes",
"Past 10 Years Pattern • Roadmaps Included • 2015–2024 PYQ Analysis"
);
// ── SLIDE 2: About this deck ────────────────────────
{
let s = pres.addSlide();
s.background = { color: C.midBg };
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.85, fill: { color: C.darkBg } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 0.85, w: 10, h: 0.06, fill: { color: C.accent } });
s.addText("📋 HOW TO USE THIS DECK", { x: 0.3, y: 0.08, w: 9.4, h: 0.7, fontSize: 18, bold: true, color: C.white, fontFace: "Calibri", valign: "middle" });
const topics = [
"★ 14 Major Surgery Modules with roadmaps based on PYQ pattern",
"★ Each module = High-yield facts → Roadmap slide → Key recall bullets",
"★ Color coding: GOLD = must-know, ORANGE = frequently asked, GREEN = scoring, RED = danger/warning",
"★ Topics: General Surgery | GI | Trauma | Breast | Thyroid | Hernia | Hepatobiliary | Ano-rectal | Neurosurgery | Vascular | Plastic | Urology | Oncology | Pediatric Surgery",
"★ Avg NEET PG: Surgery = 20–30 questions/paper → each correct answer = ~4 marks",
];
const items = topics.map(t => ({ text: t, options: { breakLine: true, fontSize: 14, color: C.white, bold: t.startsWith("★") } }));
s.addText(items, { x: 0.4, y: 1.1, w: 9.2, h: 4.3, fontFace: "Calibri", valign: "top", lineSpacingMultiple: 1.3 });
}
// ── SLIDE 3: Weightage ──────────────────────────────
weightageSlide();
// ── SLIDE 4: Top Topics Frequency ───────────────────
{
let s = pres.addSlide();
s.background = { color: C.darkBg };
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.85, fill: { color: C.cardBg } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 0.85, w: 10, h: 0.07, fill: { color: C.teal } });
s.addText("🔥 MOST REPEATED TOPIC CLUSTERS (2015–2024)", {
x: 0.3, y: 0.1, w: 9.4, h: 0.65, fontSize: 16, bold: true, color: C.white, fontFace: "Calibri", valign: "middle"
});
const topics = [
{ name: "GI Surgery (Appendix, PUD, Obstruction, Hernia)", pct: 28, color: C.accent },
{ name: "Trauma & Emergency Surgery (ATLS, Burns, Blunt Trauma)", pct: 18, color: C.accentRed },
{ name: "Breast Surgery (Cancer, Lump Evaluation)", pct: 14, color: C.orange },
{ name: "Thyroid & Parathyroid Surgery", pct: 10, color: C.teal },
{ name: "Hepatobiliary (Gallstones, Jaundice, Pancreatitis)", pct: 10, color: C.accentGreen },
{ name: "Anorectal & Colon (Hemorrhoids, Fissure, Carcinoma)", pct: 8, color: C.purple },
{ name: "Neurosurgery (EDH/SDH, Brain Tumors)", pct: 7, color: C.lightGray },
{ name: "Vascular, Urology, Oncology, Pediatric", pct: 5, color: C.subtleTxt },
];
const barMaxW = 6.8;
const maxPct = 30;
topics.forEach((t, i) => {
const y = 1.1 + i * 0.54;
const bW = (t.pct / maxPct) * barMaxW;
s.addShape(pres.ShapeType.roundRect, { x: 0.3, y: y + 0.1, w: bW, h: 0.36, fill: { color: t.color }, rectRadius: 0.04 });
s.addText(`${t.name} (${t.pct}%)`, { x: 0.4, y: y + 0.1, w: bW + 2.5, h: 0.36, fontSize: 11, bold: true, color: C.darkBg });
});
}
// ==============================================
// MODULE 1 — GENERAL SURGERY PRINCIPLES
// ==============================================
sectionSlide("01", "General Surgery Principles", "🏥");
contentSlide("Wound Healing & Surgical Wounds", [
{ type: "header", text: "Phases of Wound Healing (NEET Favourite)" },
"Inflammatory → Proliferative → Remodeling (Maturation)",
{ type: "sub", text: "Inflammation: Days 1–4 | Proliferation: Days 4–21 | Remodeling: Week 3 → 2 years" },
{ type: "key", text: "Tensile strength returns fastest in Proliferative phase; NEVER reaches 100% (max ~80%)" },
{ type: "header", text: "Wound Classification" },
"Clean (Class I) → Clean-Contaminated (II) → Contaminated (III) → Dirty (IV)",
{ type: "sub", text: "Clean: SSI rate 1–2% | Dirty: SSI rate >27%" },
{ type: "header", text: "Keloid vs Hypertrophic Scar" },
"Hypertrophic: stays within wound margins | Keloid: extends beyond margins",
{ type: "key", text: "MC site for keloid: Ear lobe, sternum, deltoid" },
{ type: "warn", text: "Keloid most common in darkly pigmented individuals (African, South Asian)" },
], { accentColor: C.teal });
roadmapSlide("Wound Healing Phases", [
{ title: "Hemostasis", body: ["0–few hours", "Platelet plug", "Fibrin clot", "Vasoconstriction"], color: C.accentRed },
{ title: "Inflammation", body: ["Day 1–4", "Neutrophils (first)", "Macrophages (predominant Day 3+)", "Growth factors release"], color: C.orange },
{ title: "Proliferation", body: ["Day 4–21", "Fibroblasts migrate", "Collagen III → I", "Angiogenesis, Re-epithelisation"], color: C.accent },
{ title: "Remodeling", body: ["Week 3 → 2 yrs", "Collagen I replaces III", "Max tensile strength ~80%", "Wound contraction"], color: C.teal },
], C.teal);
contentSlide("Sutures & Anastomoses (High Yield)", [
{ type: "header", text: "Absorbable Sutures" },
"Catgut (plain) — absorbed in 10 days | Chromic catgut — 21 days",
{ type: "key", text: "Vicryl (polyglactin) — absorbed in 60–90 days — MOST used absorbable" },
"PDS (polydioxanone) — absorbed in 180 days",
{ type: "header", text: "Non-Absorbable Sutures" },
"Prolene (polypropylene) — vascular surgery, hernia mesh | Nylon — monofilament",
{ type: "key", text: "Strongest suture: Stainless steel wire" },
{ type: "header", text: "Anastomosis Types" },
"End-to-end | End-to-side | Side-to-side",
{ type: "warn", text: "Mattress suture = everting (horizontal) or inverting (vertical) — NEET loves to ask which everts" },
], { accentColor: C.accent });
// ==============================================
// MODULE 2 — SHOCK & FLUID MANAGEMENT
// ==============================================
sectionSlide("02", "Shock, Burns & Fluid Management", "💉");
contentSlide("Shock Classification (ATLS)", [
{ type: "header", text: "Hemorrhagic Shock — 4 Classes (ATLS)" },
"Class I: <750 ml (<15%) | Class II: 750–1500 ml (15–30%)",
"Class III: 1500–2000 ml (30–40%) | Class IV: >2000 ml (>40%)",
{ type: "key", text: "Class II: First class to show tachycardia | Class III: First class to show altered mental status" },
{ type: "key", text: "Class I & II: Crystalloid only | Class III: Crystalloid + blood | Class IV: Blood + surgery" },
{ type: "header", text: "Fluid Resuscitation" },
"Hartmann's (Ringer's Lactate) = fluid of choice in acute haemorrhage",
{ type: "sub", text: "Normal saline in head injury (avoid hypotonic fluids)" },
{ type: "warn", text: "Crystalloid rule: Give 3 ml crystalloid per 1 ml blood lost (3:1 rule)" },
{ type: "header", text: "Other Shock Types" },
"Septic: distributive — warm, vasodilated | Neurogenic: loss of sympathetic tone",
"Cardiogenic: low CO, high PCWP | Obstructive: tension pneumothorax, cardiac tamponade",
], { accentColor: C.accentRed });
roadmapSlide("Burns Management (Rule of Nines + Resuscitation)", [
{ title: "Assess BSA", body: ["Rule of Nines (adults)", "Head 9%, Each arm 9%", "Each leg 18%", "Trunk ant 18%, post 18%", "Perineum 1%"], color: C.orange },
{ title: "Calculate Fluid", body: ["Parkland Formula:", "4 ml × wt(kg) × %BSA", "First 8 hrs: half total", "Next 16 hrs: other half", "Start from time of burn"], color: C.accentRed },
{ title: "Monitoring", body: ["Urine output goal:", "Adults: 0.5 ml/kg/hr", "Children: 1 ml/kg/hr", "Insert Foley catheter", "Monitor electrolytes"], color: C.teal },
{ title: "Wound Care", body: ["Superficial: Silver sulfadiazine", "Deep/Full: Escharotomy if circumferential", "Tangential excision + grafting", "Silver-containing dressings"], color: C.accent },
], C.orange);
contentSlide("Burns — Key Facts (PYQ Favourites)", [
{ type: "key", text: "Criteria for ICU/Burn Unit admission: >20% BSA burns, facial burns, inhalation injury, circumferential burns" },
"First aid: Run cool water 20 min | Do NOT use ice (causes vasoconstriction → deeper burn)",
{ type: "header", text: "Burn Depth" },
"Superficial (1°): Erythema only, no blisters | Partial (2°): Blisters present, painful",
{ type: "key", text: "Deep partial thickness: Pale/mottled, insensate — needs grafting" },
"Full thickness (3°): Leathery, insensate, no bleeding — ALWAYS needs grafting",
{ type: "warn", text: "Most common cause of death in burns: Sepsis (not hypovolemia after resuscitation)" },
{ type: "header", text: "Inhalation Injury" },
"Suspect if: facial burns, singed eyebrows, carbonaceous sputum, hoarseness",
{ type: "key", text: "Immediate management: 100% O2 via non-rebreather → early intubation if airway edema" },
], { accentColor: C.orange });
// ==============================================
// MODULE 3 — GI SURGERY
// ==============================================
sectionSlide("03", "Gastrointestinal Surgery", "🫀");
contentSlide("Peptic Ulcer Disease & Perforation", [
{ type: "header", text: "Surgery Indications for PUD" },
"Perforation | Hemorrhage unresponsive to endoscopy | Obstruction | Malignancy",
{ type: "key", text: "MC complication of PUD: Haemorrhage | MC cause of perforation: DU (anterior wall)" },
{ type: "header", text: "Perforated DU — Management Roadmap" },
"Graham's patch (omental patch repair) = standard surgery for perforated DU",
{ type: "sub", text: "+ Helicobacter pylori eradication post-operatively" },
{ type: "header", text: "Acid Reduction Procedures (Historical but asked)" },
"Truncal vagotomy + drainage | Highly selective vagotomy (no drainage needed)",
{ type: "key", text: "Dumping syndrome: Early = osmotic; Late = reactive hypoglycemia" },
{ type: "warn", text: "Dieulafoy lesion: Large submucosal artery, MC in gastric fundus — massive GI bleed" },
], { accentColor: C.teal });
contentSlide("Intestinal Obstruction", [
{ type: "header", text: "Small Bowel Obstruction (SBO)" },
"MC cause adults: Adhesions (60%) | MC cause children: Intussusception",
"X-ray: Central, ladder-pattern air-fluid levels | No gas in colon",
{ type: "key", text: "Stepladder pattern = SBO | Inverted-U/coffee bean = sigmoid volvulus" },
{ type: "header", text: "Large Bowel Obstruction (LBO)" },
"MC cause: Carcinoma colon | X-ray: Peripheral, haustrated distension",
{ type: "warn", text: "Closed loop obstruction (sigmoid volvulus): Emergency — risk of strangulation/gangrene" },
{ type: "header", text: "Volvulus" },
"Sigmoid volvulus: Coffee bean sign, omega sign | Caecal volvulus: Right-sided distension",
{ type: "key", text: "Sigmoid volvulus Rx: Rigid sigmoidoscopy + rectal flatus tube (decompression) first" },
"Definitive: Hartmann's procedure or primary resection + anastomosis",
], { accentColor: C.accent });
roadmapSlide("Acute Appendicitis Management", [
{ title: "Clinical Dx", body: ["Periumbilical pain → RIF", "McBurney's point tenderness", "Rovsing's sign, Psoas sign", "MANTRELS score", "Temp >37.3°C"], color: C.accentRed },
{ title: "Investigations", body: ["WBC raised (neutrophilia)", "USS abdomen (first line)", "CT abdomen (gold standard)", "CRP elevated", "Exclude ectopic pregnancy (females)"], color: C.orange },
{ title: "Scoring", body: ["MANTRELS/Alvarado score", "1–4: Low risk (discharge)", "5–6: Equivocal (observe)", "7–10: High risk → OR", "Pediatric: PAS score"], color: C.accent },
{ title: "Surgery", body: ["Laparoscopic appendicectomy (gold std)", "Open: Lanz/Gridiron incision", "Perforated: IV antibiotics first", "Ochsner-Sherren for mass", "Interval appendicectomy at 6 wks"], color: C.teal },
], C.accentRed);
contentSlide("Hernia (Most Repeated Surgery Topic)", [
{ type: "header", text: "Inguinal Hernia" },
"Indirect: Through deep ring, lateral to inferior epigastric vessels — MC in males",
"Direct: Through Hesselbach's triangle, medial to inferior epigastric vessels",
{ type: "key", text: "Hasselbach's triangle: Inguinal ligament (inf) | Rectus abdominis (medial) | Inferior epigastric artery (lateral)" },
{ type: "header", text: "Femoral Hernia" },
"MC in women | Passes through femoral canal | High risk of strangulation",
{ type: "key", text: "MC complication of femoral hernia: Strangulation (not obstruction)" },
{ type: "header", text: "Hernia Repair Procedures (PYQ)" },
"Lichtenstein tension-free repair = gold standard (mesh repair)",
"Bassini's repair (no mesh) | McVay's (Cooper's ligament) for femoral hernia",
{ type: "key", text: "TAPP (Trans-Abdominal Pre-Peritoneal) vs TEP (Totally Extra-Peritoneal) = laparoscopic repairs" },
{ type: "warn", text: "Richter's hernia: Only part of bowel wall herniated — can strangulate without obstruction" },
], { accentColor: C.accent });
// ==============================================
// MODULE 4 — HEPATOBILIARY & PANCREAS
// ==============================================
sectionSlide("04", "Hepatobiliary & Pancreatitis", "🫁");
contentSlide("Gallstones & Jaundice", [
{ type: "header", text: "Gallstone Disease — Key Facts" },
"MC type: Cholesterol stones (80%) | Pure pigment = haemolytic disease",
{ type: "key", text: "Charcot's triad = RUQ pain + fever + jaundice → Cholangitis" },
"Reynold's pentad = Charcot's triad + shock + mental confusion → Suppurative cholangitis",
{ type: "header", text: "Acute Cholecystitis" },
"Murphy's sign = inspiratory arrest on deep palpation RUQ",
"USS = best initial investigation | HIDA scan = gold standard for acalculous",
{ type: "key", text: "Treatment: Laparoscopic cholecystectomy within 72 hrs of symptom onset (early lap cholecystectomy preferred)" },
{ type: "header", text: "Obstructive Jaundice Workup" },
"Dark urine + pale stools + pruritus = obstructive pattern",
"MRCP = non-invasive gold std | ERCP = therapeutic (stenting, stone removal)",
{ type: "warn", text: "Courvoisier's law: Palpable gallbladder + painless jaundice = malignancy (NOT gallstones)" },
], { accentColor: C.accentGreen });
contentSlide("Acute Pancreatitis", [
{ type: "header", text: "Causes — GET SMASHED" },
"Gallstones | EtOH | Trauma | Steroids | Mumps | Autoimmune | Scorpion | Hypercalcaemia/lipidaemia | ERCP | Drugs",
{ type: "key", text: "MC cause of acute pancreatitis: Gallstones (40–50%) | 2nd: Alcohol" },
{ type: "header", text: "Severity Scoring — Ranson's Criteria (PYQ)" },
"On admission: Age >55, WBC >16k, Glucose >11, LDH >350, AST >250",
"At 48hrs: Hct fall >10%, BUN rise >5, Ca <2, PO2 <60, Base deficit >4, Fluid sequestration >6L",
{ type: "key", text: "Score ≥3 = Severe pancreatitis | Mortality rises sharply" },
{ type: "header", text: "CECT Abdomen (Balthazar Score)" },
"Grade A-E with necrosis % → CTSI score: >6 = severe, high morbidity",
{ type: "warn", text: "Indications for surgery: Infected necrosis, abdominal compartment syndrome, failure to improve" },
], { accentColor: C.teal });
roadmapSlide("Obstructive Jaundice — Diagnostic Roadmap", [
{ title: "History & Exam", body: ["Age, risk factors", "Pain character", "Fever (Charcot's triad?)", "Weight loss (malignancy?)", "Courvoisier's law"], color: C.accent },
{ title: "LFTs + USS", body: ["Bilirubin: conjugated ↑", "ALP, GGT markedly ↑", "USS: Dilated ducts", "USS: GB stones vs GB distension", "Simple & non-invasive first"], color: C.teal },
{ title: "CT/MRCP", body: ["CT: Mass, lymph nodes", "MRCP: Bile duct anatomy", "Level of obstruction", "Pancreatic head mass?", "Hilar stricture (Klatskin)?"], color: C.orange },
{ title: "ERCP/PTC", body: ["ERCP: CBD stone → removal", "Stent for malignancy", "PTC if ERCP fails", "Biopsy if mass", "Decompression pre-op"], color: C.accentGreen },
], C.accentGreen);
// ==============================================
// MODULE 5 — ANORECTAL SURGERY
// ==============================================
sectionSlide("05", "Anorectal Conditions", "🔴");
contentSlide("Haemorrhoids, Fissure & Fistula", [
{ type: "header", text: "Haemorrhoids (Piles)" },
"Internal (above dentate line, visceral, painless) | External (below dentate, somatic, painful)",
"Grading: I (bleed) | II (prolapse, reduce spontaneously) | III (manual reduction) | IV (irreducible)",
{ type: "key", text: "Grade I–II: Conservative + rubber band ligation | Grade III–IV: Haemorrhoidectomy (Milligan-Morgan)" },
{ type: "header", text: "Fissure-in-ano" },
"MC site: Posterior midline (6 o'clock) | Anterior = rare, associated with Crohn's/pregnancy",
{ type: "key", text: "Sentinel pile (skin tag) at lower end = chronic fissure | Treatment: GTN cream, botox, or lateral sphincterotomy" },
{ type: "header", text: "Fistula-in-ano — Parks Classification" },
"Intersphincteric (MC) | Trans-sphincteric | Suprasphincteric | Extrasphincteric",
"Goodsall's Rule: Posterior fistula → curved track to posterior midline | Anterior → straight track",
{ type: "warn", text: "Horseshoe fistula: Circumferential with posterior midline opening — complex management" },
], { accentColor: C.accentRed });
contentSlide("Carcinoma Rectum & Colorectal Cancer", [
{ type: "header", text: "Colorectal Cancer Risk Factors" },
"FAP (APC gene mutation) — 100% malignant risk by 40 yrs | HNPCC (Lynch syndrome) — MMR gene",
{ type: "key", text: "MC site for CRC: Rectosigmoid (50%) | MC histology: Adenocarcinoma" },
{ type: "header", text: "Dukes Staging (classic NEET question)" },
"A: Limited to bowel wall | B: Through bowel wall, no LN | C: LN involved | D: Distant mets",
{ type: "key", text: "TNM has replaced Dukes but Dukes still commonly tested in NEET PG" },
{ type: "header", text: "Surgery" },
"Upper rectum: Anterior resection | Lower rectum: Abdominoperineal resection (APR)",
{ type: "key", text: "TME (Total Mesorectal Excision) = standard for rectal cancer — reduces local recurrence" },
{ type: "warn", text: "Hartmann's procedure: End colostomy + rectal stump — used in emergency obstruction/perforation" },
], { accentColor: C.purple });
// ==============================================
// MODULE 6 — BREAST SURGERY
// ==============================================
sectionSlide("06", "Breast Surgery", "🎗️");
contentSlide("Breast Lump Evaluation — Triple Assessment", [
{ type: "header", text: "Triple Assessment = Clinical + Imaging + Cytology/Biopsy" },
"Clinical examination | Mammography/USS | FNAC or core needle biopsy",
{ type: "key", text: "USS preferred <35 yrs | Mammography preferred ≥35 yrs | Gold std: Core biopsy (not FNAC)" },
{ type: "header", text: "Breast Cancer Staging" },
"Stage I: ≤2cm, no LN | Stage II: 2–5cm or axillary LN | Stage III: Advanced local | Stage IV: Metastatic",
{ type: "header", text: "Receptor Status" },
"ER+/PR+: Benefit from hormonal therapy (tamoxifen, aromatase inhibitors)",
"HER2+: Trastuzumab (Herceptin) | Triple negative: Chemotherapy only",
{ type: "key", text: "BRCA1 mutation → MC breast + ovarian | BRCA2 → MC male breast cancer" },
{ type: "warn", text: "Inflammatory breast cancer: Peau d'orange, NO discrete lump — highest T stage (T4d)" },
], { accentColor: C.orange });
roadmapSlide("Breast Cancer Management Roadmap", [
{ title: "Triple Assessment", body: ["Clinical exam", "Mammogram ≥35yrs", "USS <35yrs", "Core biopsy", "MRI if lobular/BRCA"], color: C.orange },
{ title: "Staging", body: ["CT chest/abdomen", "Bone scan if symptomatic", "ER/PR/HER2 status", "BRCA testing if <40yrs", "Multidisciplinary team"], color: C.accent },
{ title: "Surgery", body: ["WLE (lumpectomy) + RT", "Mastectomy ± reconstruction", "Sentinel LN biopsy", "ALND if SLN positive", "Oncoplastic techniques"], color: C.teal },
{ title: "Adjuvant Therapy", body: ["Chemo: Anthracycline-based", "Radiotherapy post WLE", "Hormone: Tamoxifen/AI", "HER2+: Trastuzumab 1yr", "Survival follow-up"], color: C.accentGreen },
], C.orange);
contentSlide("Benign Breast Conditions (PYQ)", [
{ type: "header", text: "Fibroadenoma" },
"MC breast lump in <30 yr females | Mobile, firm, non-tender ('breast mouse')",
"USS: Oval, well-circumscribed, homogeneous | Pathology: Proliferating ducts + stroma",
{ type: "key", text: "Giant fibroadenoma: >5cm — requires excision | Phyllodes tumour: Leaf-like projections, can be malignant" },
{ type: "header", text: "Fibrocystic Disease (ANDI)" },
"Aberrations of Normal Development and Involution | Most common breast disease overall",
{ type: "sub", text: "Cyclical mastalgia, nodularity, cysts — worse premenstrually" },
{ type: "header", text: "Duct Ectasia vs Intraductal Papilloma" },
"Duct ectasia: Green/brown nipple discharge, periareolar mass, older women",
"Intraductal papilloma: Serous/bloody discharge, MC cause of nipple discharge in 30–50yrs",
{ type: "warn", text: "Bloody nipple discharge → always investigate (ductogram/ductoscopy) → exclude malignancy" },
], { accentColor: C.orange });
// ==============================================
// MODULE 7 — THYROID & PARATHYROID
// ==============================================
sectionSlide("07", "Thyroid & Parathyroid Surgery", "🦋");
contentSlide("Thyroid Nodule & Thyroid Cancer", [
{ type: "header", text: "Solitary Thyroid Nodule — Approach" },
"TSH first → if low → radionuclide scan → hot/cold nodule classification",
{ type: "key", text: "Cold nodule = 15% malignant risk | Hot nodule = almost always benign" },
"FNAC = investigation of choice for thyroid nodule | USS for guided FNAC if needed",
{ type: "header", text: "Bethesda Classification (FNAC)" },
"I: Non-diagnostic | II: Benign | III: AUS/FLUS | IV: FN | V: Suspicious | VI: Malignant",
{ type: "header", text: "Thyroid Cancer Types" },
"Papillary (80%, best prognosis, Psammoma bodies, Orphan Annie eyes, nuclear grooves)",
{ type: "key", text: "Follicular thyroid CA: Spreads haematogenously (bone, lung) — unlike papillary (lymphatics)" },
"Medullary: Calcitonin-producing, C-cells, MEN2A/2B | Anaplastic: Worst prognosis",
{ type: "warn", text: "RET proto-oncogene mutation = Medullary thyroid carcinoma + MEN2" },
], { accentColor: C.teal });
roadmapSlide("Thyroid Surgery Complications", [
{ title: "Recurrent Laryngeal N", body: ["Bilateral injury: Stridor, respiratory distress", "Unilateral: Hoarseness", "Identify before ligation", "Nerve monitoring (NIM)", "MC nerve injured in thyroid sx"], color: C.accentRed },
{ title: "Hypocalcaemia", body: ["Parathyroid devascularisation", "Onset: 24–48 hrs post-op", "Chvostek's & Trousseau's", "Perioral tingling, tetany", "Calcium gluconate IV (emergency)"], color: C.orange },
{ title: "Thyroid Storm", body: ["Uncontrolled hyperthyroid post-op", "High fever, tachycardia", "Rx: Propylthiouracil, Iodine, beta-blocker, steroids, cooling", "Lugol's iodine: blocks release"], color: C.accentGreen },
{ title: "Haemorrhage", body: ["Early: Haematoma → airway compromise", "Open wound at bedside!", "Suction drain in situ", "Return to theatre", "Keep stitch cutter at bedside"], color: C.purple },
], C.teal);
// ==============================================
// MODULE 8 — TRAUMA
// ==============================================
sectionSlide("08", "Trauma & Emergency Surgery", "🚨");
contentSlide("ATLS Protocol — Primary Survey", [
{ type: "header", text: "ABCDE — Primary Survey (ATLS)" },
{ type: "key", text: "A — Airway (+ C-spine): Jaw thrust (not chin lift if C-spine injury), suction, OPA, NPA, intubation" },
"B — Breathing: Look/Listen/Feel | Tension pneumothorax → immediate needle decompression (2nd ICS MCL)",
"C — Circulation: 2 large bore IVs, crystalloid bolus 1L, blood if needed | FAST exam | Control haemorrhage",
"D — Disability: GCS, pupils, AVPU | E — Exposure: Fully expose, prevent hypothermia",
{ type: "header", text: "Life-Threatening Thoracic Injuries (Treat in Primary Survey)" },
"Tension pneumothorax | Open pneumothorax | Massive haemothorax | Flail chest | Cardiac tamponade | Aortic disruption",
{ type: "warn", text: "Cardiac tamponade: Beck's triad = hypotension + raised JVP + muffled heart sounds → Pericardiocentesis" },
{ type: "key", text: "GCS: Eyes (4) + Verbal (5) + Motor (6) = 15 max | <8 = Intubate" },
], { accentColor: C.accentRed });
contentSlide("Head Injury — EDH, SDH, SAH", [
{ type: "header", text: "Extradural Haematoma (EDH)" },
"Arterial bleed (middle meningeal artery) | Lucid interval (classic) | Biconvex/lenticular on CT",
{ type: "key", text: "EDH: Burr hole / Craniotomy within 1–2 hrs of deterioration (life-saving)" },
{ type: "header", text: "Subdural Haematoma (SDH)" },
"Venous bleed (bridging veins) | No lucid interval | Crescent-shaped on CT",
"Acute SDH: High-density crescent | Chronic SDH: Low-density (isodense if subacute)",
{ type: "key", text: "Chronic SDH: Burr hole + irrigation | Acute SDH: Craniotomy" },
{ type: "header", text: "Diffuse Axonal Injury (DAI)" },
"Rotational acceleration-deceleration | CT may be normal early | MRI better",
{ type: "warn", text: "Kernohan's notch: Contralateral hemiplegia due to tentorial notch compression of contralateral peduncle — FALSE localising sign" },
{ type: "warn", text: "Cushing's reflex = hypertension + bradycardia + irregular respiration = raised ICP (late sign)" },
], { accentColor: C.accentRed });
roadmapSlide("Blunt Abdominal Trauma", [
{ title: "Mechanism & History", body: ["RTA, fall, assault", "Seatbelt injury (Chance fracture)", "MC organ injured: Spleen", "2nd MC: Liver", "Hollow viscus: Duodenum"], color: C.accentRed },
{ title: "Primary Survey", body: ["ATLS ABCDE", "FAST ultrasound (focused)", "Free fluid in abdomen?", "Haemodynamically stable?", "Pelvis X-ray"], color: C.orange },
{ title: "Stable → CT", body: ["CT abdomen with contrast = gold std", "Organ injury grading", "Active extravasation?", "AAST grading system", "Hollow viscus injury?"], color: C.accent },
{ title: "Unstable → OR", body: ["Damage Control Surgery", "Control haemorrhage (pack)", "Temp closure (laparostomy)", "Resuscitate in ICU", "Relook at 24–48 hrs"], color: C.teal },
], C.accentRed);
// ==============================================
// MODULE 9 — VASCULAR SURGERY
// ==============================================
sectionSlide("09", "Vascular Surgery", "🩸");
contentSlide("Arterial Disease & AAA", [
{ type: "header", text: "Peripheral Arterial Disease (PAD)" },
"Fontaine classification: I (asymptomatic) → II (claudication) → III (rest pain) → IV (gangrene)",
{ type: "key", text: "ABI (ABPI): Normal >0.9 | Claudication 0.4–0.9 | Rest pain <0.4 | Incompressible >1.3 (calcified)" },
{ type: "header", text: "Acute Limb Ischaemia — 6 Ps" },
"Pain | Pallor | Pulselessness | Paraesthesia | Paralysis | Perishing cold",
{ type: "key", text: "Paralysis & paraesthesia = limb-threatening → Emergency embolectomy (Fogarty catheter)" },
{ type: "header", text: "Abdominal Aortic Aneurysm (AAA)" },
"Normal aorta <2cm | Aneurysm ≥3cm | Intervention threshold: ≥5.5cm",
{ type: "key", text: "Ruptured AAA: Classic triad = hypotension + pulsatile mass + back/flank pain → Emergency EVAR or open repair" },
{ type: "warn", text: "Berry aneurysm (intracranial) = MCC of subarachnoid haemorrhage → worst headache of life" },
], { accentColor: C.accentRed });
contentSlide("Varicose Veins & DVT", [
{ type: "header", text: "Varicose Veins" },
"Dilated, tortuous superficial veins | MC in long saphenous vein territory",
"Trendelenburg test: identifies SFJ incompetence | Tourniquet test",
{ type: "key", text: "Duplex USS = gold standard preoperative mapping | CEAP classification" },
"Treatment: EVLA (endovenous laser ablation) | Foam sclerotherapy | Surgery (high tie + stripping)",
{ type: "header", text: "DVT & Pulmonary Embolism" },
"Virchow's triad: Stasis + Endothelial injury + Hypercoagulability",
{ type: "key", text: "Wells score for DVT | D-dimer (sensitive, not specific) | Gold std: Duplex USS" },
"PE: Wells/Geneva score → CTPA (gold std) | V/Q scan if CXR normal, renal impairment",
{ type: "warn", text: "Massive PE = Haemodynamic compromise → IV Alteplase (thrombolysis)" },
{ type: "key", text: "Homan's sign = unreliable (calf tenderness on dorsiflexion) — no longer recommended in ATLS" },
], { accentColor: C.teal });
// ==============================================
// MODULE 10 — NEUROSURGERY
// ==============================================
sectionSlide("10", "Neurosurgery High Yield", "🧠");
contentSlide("Brain Tumors (PYQ)", [
{ type: "header", text: "Primary Brain Tumors — Adults" },
"MC primary brain tumour (adults): Glioblastoma Multiforme (GBM) — GradeIV, worst prognosis",
{ type: "key", text: "GBM: Butterfly glioma (crosses corpus callosum), pseudo-palisading necrosis, GFAP positive" },
"Meningioma: MC benign, WHO Grade I, extra-axial, dural tail sign on MRI",
{ type: "header", text: "Pediatric Brain Tumors" },
"MC pediatric brain tumour: Medulloblastoma (posterior fossa, cerebellum)",
{ type: "key", text: "Medulloblastoma: Homer-Wright rosettes, PNET, spreads via CSF ('drop metastases')" },
"Ependymoma: 4th ventricle | Craniopharyngioma: Suprasellar, calcified, bitemporal hemianopia",
{ type: "header", text: "Acoustic Neuroma (Vestibular Schwannoma)" },
"NF2 (bilateral) | Unilateral sensorineural hearing loss, tinnitus, facial numbness",
{ type: "key", text: "CPA angle mass on MRI | Treatment: Surgery (translabyrinthine), Stereotactic radiosurgery" },
], { accentColor: C.purple });
contentSlide("Spinal Cord & Meningocele", [
{ type: "header", text: "Neural Tube Defects (Spina Bifida)" },
"Spina bifida occulta: No protrusion, hairy patch, dermal sinus | Most common",
"Meningocele: CSF + meninges protrude | Meningomyelocele: CSF + meninges + cord elements",
{ type: "key", text: "Meningomyelocele = most common symptomatic form | Associated with Arnold-Chiari malformation + hydrocephalus" },
{ type: "key", text: "Prevention: Folic acid 400mcg preconception | Timing of repair: <24–48 hrs to prevent meningitis" },
{ type: "header", text: "Spinal Cord Syndromes (NEET PYQ)" },
"Central cord: Upper limb weakness > lower | Anterior cord: Loss of motor + pain/temp (spinothalamic), spared proprioception",
{ type: "key", text: "Brown-Sequard: Ipsilateral motor + proprioception loss; Contralateral pain + temp loss" },
{ type: "warn", text: "Cauda equina syndrome: Urinary/fecal incontinence + saddle anaesthesia = surgical emergency" },
], { accentColor: C.purple });
// ==============================================
// MODULE 11 — UROLOGY
// ==============================================
sectionSlide("11", "Urology", "🔵");
contentSlide("BPH, Testicular Torsion & Urinary Calculi", [
{ type: "header", text: "Benign Prostatic Hyperplasia (BPH)" },
"Zone: Transition zone | Histology: Stromal + epithelial hyperplasia",
"IPSS score for severity | PSA may be mildly elevated",
{ type: "key", text: "Medical Rx: Alpha-blockers (tamsulosin) for rapid relief | 5-alpha reductase inhibitors (finasteride) for large prostate" },
"Surgery: TURP (gold standard) | Complications: Retrograde ejaculation (MC), TURP syndrome",
{ type: "header", text: "Testicular Torsion" },
"Peak age: 12–18 yrs | Sudden severe pain + high-riding testis + absent cremasteric reflex",
{ type: "key", text: "Management: Clinical diagnosis → IMMEDIATE surgical exploration (do NOT wait for USS)" },
{ type: "warn", text: "Salvage rate: >90% if detorsion <6 hrs | <10% if >24 hrs" },
{ type: "header", text: "Urinary Calculi" },
"MC calculi: Calcium oxalate (80%) | Staghorn: Struvite (Mg-NH4-PO4) = infection stones",
"Uric acid stones: Radiolucent (not seen on plain X-ray) | Visible on CT",
], { accentColor: C.teal });
// ==============================================
// MODULE 12 — ONCOLOGY & SALIVARY/ORAL
// ==============================================
sectionSlide("12", "Oncology, Salivary & Oral Surgery", "🎯");
contentSlide("Salivary Gland Tumors", [
{ type: "header", text: "Salivary Gland Tumors — Key Facts" },
"MC salivary gland tumor: Pleomorphic adenoma (mixed tumor, 80%) — MC in parotid",
{ type: "key", text: "Pleomorphic adenoma: Slow growing, painless, RECURS if inadequately excised (pseudopod extensions)" },
"Warthin's tumor (cystadenoma lymphomatosum): MC bilateral | MC bilateral salivary tumor | Smokers",
"Adenoid cystic carcinoma: MC malignant salivary tumor | Perineural invasion (spreads along nerves)",
{ type: "header", text: "Parotidectomy" },
"Superficial parotidectomy: Facial nerve preserved | Total: All lobes",
{ type: "key", text: "Facial nerve landmark: Tragal pointer, posterior belly of digastric, stylomastoid foramen" },
"Frey's syndrome: Auriculotemporal nerve injury → gustatory sweating (sweating while eating)",
{ type: "warn", text: "Adenoid cystic carcinoma: Skip lesions, perineural spread, late distant mets (lung) — worst prognosis" },
], { accentColor: C.accent });
contentSlide("Carcinoma Oral Cavity", [
{ type: "header", text: "Risk Factors" },
"Tobacco (smoking + smokeless) | Alcohol | HPV-16 (oropharynx) | Betel nut (India)",
"Premalignant lesions: Leukoplakia | Erythroplakia (higher malignant potential) | Oral submucous fibrosis",
{ type: "key", text: "Erythroplakia has HIGHEST malignant transformation rate (17–50%) vs leukoplakia (1–17%)" },
{ type: "header", text: "MC Site & Type" },
"MC site in oral cavity: Lateral border of tongue | MC type: Squamous cell carcinoma (95%)",
{ type: "header", text: "Cervical LN Levels" },
"Level I: Submental/Submandibular | II: Upper jugular | III: Mid-jugular | IV: Lower jugular | V: Posterior triangle | VI: Central",
{ type: "key", text: "RND (Radical Neck Dissection): Removes all levels + SCM + IJV + CN XI" },
"MRND (Modified): Preserves one or more of: SCM, IJV, CN XI | SOHND: Levels I–III",
{ type: "warn", text: "Sentinel LN biopsy now standard for oral cavity SCC with cN0 neck (clinically node-negative)" },
], { accentColor: C.orange });
// ==============================================
// MODULE 13 — PLASTIC & TRANSPLANT
// ==============================================
sectionSlide("13", "Plastic Surgery & Transplantation", "🧩");
contentSlide("Skin Grafting & Flaps", [
{ type: "header", text: "Skin Grafts" },
"Split thickness (SSG/STSG): Epidermis + part dermis — takes better, more donor sites, contracts more",
"Full thickness (FTSG): Epidermis + full dermis — better cosmesis, less contraction, limited donor sites",
{ type: "key", text: "Graft survival: Plasmatic imbibition (0–48h) → Inosculation (48h–5d) → Neovascularisation (>5d)" },
{ type: "header", text: "Flaps" },
"Random flap: No named vessel | Axial flap: Named vessel (e.g. TRAM flap for breast reconstruction)",
{ type: "key", text: "Free flap = microsurgical anastomosis — gold standard for complex reconstruction" },
{ type: "header", text: "Marjolin's Ulcer" },
"Malignant transformation in chronic scar/wound | Slow growing SCC | No LN spread initially",
{ type: "header", text: "Skin Malignancies" },
"BCC (rodent ulcer): MC skin cancer, pearly edge, telangiectasia, sun-exposed | Rarely metastasises",
{ type: "warn", text: "Malignant Melanoma: ABCDE (Asymmetry, Border, Colour, Diameter, Evolution) | Breslow thickness = prognosis" },
], { accentColor: C.accent });
contentSlide("Transplantation Surgery", [
{ type: "header", text: "Graft Types" },
"Autograft (self) | Isograft (identical twin) | Allograft (same species) | Xenograft (different species)",
{ type: "header", text: "Graft Rejection" },
"Hyperacute: Minutes–hours | Preformed antibodies | Irreversible",
{ type: "key", text: "Acute rejection: Days–weeks | T-cell mediated | Reversible with steroids/anti-rejection meds" },
"Chronic: Months–years | Antibody + cell-mediated | Slowly progressive graft dysfunction",
{ type: "header", text: "Liver Transplant" },
"Indications: Cirrhosis (MELD ≥15), acute liver failure, HCC within Milan criteria",
{ type: "key", text: "Piggyback technique (IVC preservation) vs classical (IVC excision) — NEET PYQ" },
{ type: "header", text: "Maastricht Classification (Donation after Cardiac Death)" },
"Category I: Dead on arrival | II: Unsuccessful resuscitation | III: Awaiting cardiac arrest | IV: Cardiac arrest after brain death",
{ type: "warn", text: "Living donor liver transplant: Right lobe most commonly donated (segments V–VIII)" },
], { accentColor: C.teal });
// ==============================================
// MODULE 14 — LAPAROSCOPY & QUICK RECAP
// ==============================================
sectionSlide("14", "Laparoscopy, Bariatric & Exam Recap", "📋");
contentSlide("Laparoscopy & POEM", [
{ type: "header", text: "Pneumoperitoneum (Laparoscopy)" },
"Veress needle at umbilicus | Gas of choice: CO2 (absorbed, not combustible)",
"IAP maintained at 12–14 mmHg | Trendelenburg (head down) for pelvic, reverse Trendelenburg for upper GI",
{ type: "key", text: "Complications of laparoscopy: Gas embolism (rare, fatal), subcutaneous emphysema, visceral injury, vascular injury" },
{ type: "header", text: "Bariatric Surgery (Obesity)" },
"Indications: BMI ≥40 OR BMI ≥35 + comorbidity (T2DM, HTN, OSA)",
{ type: "key", text: "Roux-en-Y Gastric Bypass (RYGB) = gold standard | Most effective for T2DM remission" },
"Sleeve gastrectomy: Removes fundus, restrictive only | BPD/DS: Most malabsorptive",
{ type: "header", text: "POEM (Per-Oral Endoscopic Myotomy)" },
"For achalasia cardia | Via endoscopy — incisionless | Complication: GERD post-procedure",
{ type: "warn", text: "Achalasia: Absent peristalsis + failure of LES relaxation | Barium swallow: Bird beak/rat tail sign" },
], { accentColor: C.teal });
// Final recap slide
{
let s = pres.addSlide();
s.background = { color: C.darkBg };
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.14, fill: { color: C.accent } });
s.addText("🏆 MUST-KNOW MNEMONICS & QUICK RECALL", {
x: 0.3, y: 0.25, w: 9.4, h: 0.7, fontSize: 18, bold: true, color: C.accent, fontFace: "Calibri"
});
const mnemonics = [
{ t: "ATLS Primary Survey:", v: "A-B-C-D-E (Airway → Breathing → Circulation → Disability → Exposure)" },
{ t: "GET SMASHED:", v: "Causes of Pancreatitis (Gallstones, EtOH, Trauma, Steroids, Mumps, AI, Scorpion, Hyperlipid, ERCP, Drugs)" },
{ t: "Charcot's Triad:", v: "RUQ pain + Fever + Jaundice = Cholangitis" },
{ t: "Reynold's Pentad:", v: "Charcot's + Shock + Mental confusion = Suppurative cholangitis" },
{ t: "Beck's Triad:", v: "Hypotension + raised JVP + muffled heart sounds = Cardiac tamponade" },
{ t: "Cushing's Reflex:", v: "HTN + Bradycardia + Irregular breathing = Raised ICP (late sign)" },
{ t: "Virchow's Triad:", v: "Stasis + Endothelial injury + Hypercoagulability = DVT" },
{ t: "Courvoisier's Law:", v: "Palpable painless GB + jaundice = Malignancy (NOT gallstones)" },
{ t: "Goodsall's Rule:", v: "Posterior external fistula → curved track | Anterior → straight track to anal canal" },
];
const items = [];
mnemonics.forEach(m => {
items.push({ text: m.t + " ", options: { bold: true, color: C.accent, fontSize: 12, breakLine: false } });
items.push({ text: m.v, options: { bold: false, color: C.white, fontSize: 12, breakLine: true } });
});
s.addText(items, { x: 0.3, y: 1.05, w: 9.4, h: 4.35, fontFace: "Calibri", valign: "top", lineSpacingMultiple: 1.2 });
}
// Closing slide
{
let s = pres.addSlide();
s.background = { color: C.darkBg };
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: C.accent } });
s.addShape(pres.ShapeType.ellipse, { x: 7.5, y: 1.5, w: 3, h: 3, fill: { color: C.midBg }, line: { color: C.accent, width: 2 } });
s.addText("BEST OF LUCK", { x: 7.5, y: 1.7, w: 3, h: 1.0, fontSize: 14, bold: true, color: C.accent, align: "center" });
s.addText("NEET PG 2026", { x: 7.5, y: 2.8, w: 3, h: 0.8, fontSize: 18, bold: true, color: C.white, align: "center" });
s.addText("NEET PG SURGERY", { x: 0.5, y: 1.5, w: 7, h: 0.8, fontSize: 28, bold: true, color: C.white, fontFace: "Calibri" });
s.addText("High-Yield Notes", { x: 0.5, y: 2.35, w: 6, h: 0.6, fontSize: 20, color: C.accent, fontFace: "Calibri", italic: true });
s.addShape(pres.ShapeType.rect, { x: 0.5, y: 3.05, w: 5.5, h: 0.05, fill: { color: C.accent } });
s.addText("14 Modules • Roadmaps • PYQ Pattern 2015–2024", {
x: 0.5, y: 3.2, w: 7, h: 0.5, fontSize: 13, color: C.lightGray, italic: true
});
s.addText("Remember: Consistency + Active Recall = NEET PG Success", {
x: 0.5, y: 4.5, w: 8, h: 0.6, fontSize: 12, color: C.subtleTxt, italic: true
});
}
// ── WRITE FILE ──────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/neet-pg-surgery/NEET_PG_Surgery_HighYield_Notes.pptx" })
.then(() => console.log("SUCCESS: File created"))
.catch(err => { console.error("ERROR:", err); process.exit(1); });
cd /home/daytona/workspace/neet-pg-surgery && node create_pptx.js
ls -lh /home/daytona/workspace/neet-pg-surgery/NEET_PG_Surgery_HighYield_Notes.p…
NEET PG Surgery HighYield Notes
Presentation · PPTX
| Module | Topics |
|---|---|
| 01 - General Surgery | Wound healing phases, suture types, keloid vs hypertrophic scar |
| 02 - Shock & Burns | ATLS shock classification, Parkland formula, Rule of Nines, burn depth |
| 03 - GI Surgery | Peptic ulcer, intestinal obstruction, Acute appendicitis roadmap, Hernia |
| 04 - Hepatobiliary | Charcot's/Reynold's triad, Courvoisier's law, pancreatitis (Ranson's), obstructive jaundice roadmap |
| 05 - Anorectal | Piles grading, Parks classification, Goodsall's rule, colorectal cancer (Dukes staging) |
| 06 - Breast Surgery | Triple assessment, breast cancer staging, ER/HER2/BRCA, fibroadenoma, DCIS |
| 07 - Thyroid | Cold/hot nodule workup, Bethesda system, PTC vs FTC vs MTC vs Anaplastic, complication roadmap |
| 08 - Trauma | ATLS ABCDE, EDH/SDH/DAI, Blunt trauma abdomen roadmap, GCS |
| 09 - Vascular | PAD Fontaine, ABI values, 6 Ps of acute ischaemia, AAA, DVT/PE |
| 10 - Neurosurgery | GBM, medulloblastoma, meningocele, spinal cord syndromes, Cauda equina |
| 11 - Urology | BPH (TURP), testicular torsion emergency, urinary calculi types |
| 12 - Oncology/Oral | Salivary gland tumours, oral cavity cancer, cervical LN levels, RND/MRND |
| 13 - Plastic/Transplant | SSG vs FTSG, flap types, Marjolin's ulcer, melanoma, graft rejection types |
| 14 - Laparoscopy/Recap | Veress needle, bariatric criteria, POEM/achalasia, full mnemonics sheet |
Generate quick reference PDF with tables of differential diagnoses
~/neet-pg-surgery/create_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import mm, cm
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT
from reportlab.platypus import (
SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer,
HRFlowable, KeepTogether, PageBreak
)
from reportlab.platypus.flowables import BalancedColumns
from reportlab.lib.colors import HexColor
import os
# ── PALETTE ──────────────────────────────────────────────────────────────────
DARK_BG = HexColor("#0D1B2A")
MID_BG = HexColor("#1B2A3B")
ACCENT = HexColor("#E8AF2C")
ACCENT_RED = HexColor("#C0392B")
ACCENT_GRN = HexColor("#1E8449")
ACCENT_TEL = HexColor("#117A65")
ACCENT_PUR = HexColor("#6C3483")
ACCENT_ORG = HexColor("#D68910")
WHITE = colors.white
LIGHT_GRAY = HexColor("#D5D8DC")
SUBTLE = HexColor("#7F8C8D")
ROW_ALT = HexColor("#EAF2FF")
ROW_ALT2 = HexColor("#FEF9E7")
HEADER_ROW = HexColor("#154360")
HEADER_TXT = WHITE
PAGE_W, PAGE_H = A4
MARGIN = 15 * mm
# ── DOCUMENT SETUP ───────────────────────────────────────────────────────────
OUTPUT = "/home/daytona/workspace/neet-pg-surgery/NEET_PG_Surgery_DiffDx_QuickRef.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=MARGIN, leftMargin=MARGIN,
topMargin=18 * mm, bottomMargin=15 * mm,
title="NEET PG Surgery – Differential Diagnosis Quick Reference",
author="Orris AI"
)
# ── STYLES ────────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()
S = {
"cover_title": ParagraphStyle("cover_title", fontSize=28, textColor=WHITE,
fontName="Helvetica-Bold", alignment=TA_CENTER, leading=34),
"cover_sub": ParagraphStyle("cover_sub", fontSize=13, textColor=ACCENT,
fontName="Helvetica-Oblique", alignment=TA_CENTER, leading=18),
"cover_meta": ParagraphStyle("cover_meta", fontSize=10, textColor=LIGHT_GRAY,
fontName="Helvetica", alignment=TA_CENTER, leading=14),
"section": ParagraphStyle("section", fontSize=13, textColor=WHITE,
fontName="Helvetica-Bold", alignment=TA_LEFT, leading=16,
spaceAfter=4, spaceBefore=8),
"sub_section": ParagraphStyle("sub_section", fontSize=10.5, textColor=ACCENT,
fontName="Helvetica-Bold", alignment=TA_LEFT, leading=13,
spaceBefore=5, spaceAfter=3),
"th": ParagraphStyle("th", fontSize=8.5, textColor=WHITE,
fontName="Helvetica-Bold", alignment=TA_CENTER, leading=11),
"th_left": ParagraphStyle("th_left", fontSize=8.5, textColor=WHITE,
fontName="Helvetica-Bold", alignment=TA_LEFT, leading=11),
"td": ParagraphStyle("td", fontSize=8, textColor=HexColor("#1A1A2E"),
fontName="Helvetica", alignment=TA_LEFT, leading=11),
"td_bold": ParagraphStyle("td_bold", fontSize=8, textColor=DARK_BG,
fontName="Helvetica-Bold", alignment=TA_LEFT, leading=11),
"td_red": ParagraphStyle("td_red", fontSize=8, textColor=ACCENT_RED,
fontName="Helvetica-Bold", alignment=TA_LEFT, leading=11),
"td_grn": ParagraphStyle("td_grn", fontSize=8, textColor=ACCENT_GRN,
fontName="Helvetica-Bold", alignment=TA_LEFT, leading=11),
"td_c": ParagraphStyle("td_c", fontSize=8, textColor=HexColor("#1A1A2E"),
fontName="Helvetica", alignment=TA_CENTER, leading=11),
"note": ParagraphStyle("note", fontSize=7.5, textColor=SUBTLE,
fontName="Helvetica-Oblique", alignment=TA_LEFT, leading=10, spaceAfter=3),
"footer_note": ParagraphStyle("footer_note", fontSize=8, textColor=ACCENT,
fontName="Helvetica-Bold", alignment=TA_CENTER, leading=11),
}
# ── HELPERS ──────────────────────────────────────────────────────────────────
def section_banner(text, color=DARK_BG, text_color=WHITE, accent_color=ACCENT):
"""Returns a styled section header as a table."""
tbl = Table([[Paragraph(text, ParagraphStyle("sb", fontSize=12, textColor=text_color,
fontName="Helvetica-Bold", leading=15))]], colWidths=[PAGE_W - 2*MARGIN])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), color),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LINEBELOW", (0,0), (-1,-1), 2, accent_color),
]))
return tbl
def make_table(headers, rows, col_widths, header_color=HEADER_ROW, alt_color=ROW_ALT):
"""Build a formatted diff-dx table."""
header_row = [Paragraph(h, S["th"]) for h in headers]
data = [header_row]
for i, row in enumerate(rows):
styled_row = []
for j, cell in enumerate(row):
if j == 0:
styled_row.append(Paragraph(str(cell), S["td_bold"]))
else:
styled_row.append(Paragraph(str(cell), S["td"]))
data.append(styled_row)
tbl = Table(data, colWidths=col_widths, repeatRows=1)
style = [
("BACKGROUND", (0,0), (-1,0), header_color),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,0), 8.5),
("ALIGN", (0,0), (-1,0), "CENTER"),
("VALIGN", (0,0), (-1,-1), "TOP"),
("GRID", (0,0), (-1,-1), 0.4, HexColor("#BFBFBF")),
("LINEBELOW", (0,0), (-1,0), 1.2, ACCENT),
("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, alt_color]),
("LEFTPADDING", (0,0), (-1,-1), 4),
("RIGHTPADDING", (0,0), (-1,-1), 4),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("FONTNAME", (0,1), (0,-1), "Helvetica-Bold"),
]
tbl.setStyle(TableStyle(style))
return tbl
def note(text):
return Paragraph(f"★ {text}", S["note"])
def sp(h=4):
return Spacer(1, h*mm)
def hr(color=ACCENT):
return HRFlowable(width="100%", thickness=1, color=color, spaceAfter=2)
# ── CONTENT ──────────────────────────────────────────────────────────────────
story = []
W = PAGE_W - 2*MARGIN # usable width ~180mm
# ═══════════════════════════════════════════════════════════
# COVER PAGE
# ═══════════════════════════════════════════════════════════
cover_data = [[
Paragraph("NEET PG SURGERY", S["cover_title"]),
Paragraph("Differential Diagnosis Quick Reference", S["cover_sub"]),
Paragraph("Past 10 Years PYQ Pattern | 2015–2024 | 14 System Modules", S["cover_meta"]),
Paragraph("⚡ High-Yield Tables • Key Distinguishing Features • Roadmaps", S["cover_meta"]),
]]
cover_tbl = Table([[c] for c in [
Paragraph("NEET PG SURGERY", S["cover_title"]),
Paragraph("Differential Diagnosis — Quick Reference", S["cover_sub"]),
Spacer(1, 8*mm),
Paragraph("Past 10 Years PYQ Pattern | 2015–2024 | 14 System Modules", S["cover_meta"]),
Paragraph("⚡ High-Yield Tables • Key Distinguishing Features • NEET PYQ Markers", S["cover_meta"]),
]], colWidths=[W])
cover_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK_BG),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("LINEBELOW", (0,3), (-1,3), 2, ACCENT),
]))
story.append(cover_tbl)
story.append(sp(6))
# Index
index_items = [
("01", "Abdominal Pain & GI Differentials"),
("02", "Jaundice — Differentials"),
("03", "Intestinal Obstruction"),
("04", "GI Bleeding (Upper & Lower)"),
("05", "Breast Lump Differentials"),
("06", "Thyroid — Nodule & Goitre"),
("07", "Neck Swelling Differentials"),
("08", "Hernia Types Comparison"),
("09", "Anorectal Conditions"),
("10", "Shock — Type Comparison"),
("11", "Burns — Depth & Management"),
("12", "Head Injury — EDH vs SDH vs SAH"),
("13", "Arterial vs Venous vs Neuropathic Ulcer"),
("14", "Salivary Gland & Oral Tumours"),
("15", "Scrotal Swelling Differentials"),
("16", "Acute vs Chronic Pancreatitis"),
("17", "Crohn's Disease vs Ulcerative Colitis"),
("18", "Wound Healing — Hypertrophic vs Keloid"),
("19", "Premalignant Lesions — Oral Cavity"),
("20", "Suture Types — Quick Reference"),
]
index_data = [[Paragraph(f" {n}", S["td_bold"]), Paragraph(t, S["td"])] for n, t in index_items]
idx_tbl = Table(
[[Paragraph("MODULE", S["th"]), Paragraph("TOPIC", S["th"])]] + index_data,
colWidths=[18*mm, W - 18*mm]
)
idx_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), HEADER_ROW),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("GRID", (0,0), (-1,-1), 0.4, HexColor("#BFBFBF")),
("LINEBELOW", (0,0), (-1,0), 1.5, ACCENT),
("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, ROW_ALT]),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(section_banner("📋 TABLE OF CONTENTS"))
story.append(sp(2))
story.append(idx_tbl)
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════
# 01 ABDOMINAL PAIN DIFFERENTIALS
# ═══════════════════════════════════════════════════════════
story.append(section_banner("01 ABDOMINAL PAIN — DIFFERENTIAL DIAGNOSIS", DARK_BG, WHITE, ACCENT))
story.append(sp(2))
ap_headers = ["Diagnosis", "Location", "Character", "Key Signs", "Investigations", "Management"]
ap_rows = [
["Acute Appendicitis", "Periumbilical → RIF", "Colicky → constant", "McBurney's, Rovsing's, Psoas sign; fever", "WBC↑, USS, CT abdomen (gold std)", "Laparoscopic appendicectomy"],
["Peptic Ulcer (perforated)", "Epigastric → generalised", "Sudden severe; board-like rigidity", "Absent bowel sounds, guarding", "Erect CXR (free air under diaphragm)", "Graham's patch repair"],
["Acute Cholecystitis", "RUQ radiating to right shoulder", "Constant, severe", "Murphy's sign positive, fever", "USS (gallstones, wall thickening)", "Lap cholecystectomy (<72 hrs)"],
["Acute Pancreatitis", "Epigastric radiating to back", "Band-like, severe", "Cullen's / Grey Turner's signs (haemorrhagic)", "Amylase/Lipase↑↑, CECT (Balthazar)", "NBM, IVF, analgesia; surgery if infected necrosis"],
["Intestinal Obstruction", "Central / generalised", "Colicky, waves", "Tinkling bowel sounds, distension", "AXR (air-fluid levels), CT", "NG tube, IVF; surgery if strangulation"],
["Mesenteric Ischaemia", "Periumbilical", "'Pain out of proportion to signs'", "Atrial fibrillation, rapid deterioration", "CT angiography (gold std)", "Anticoagulation + embolectomy/resection"],
["Ureteric Colic", "Loin to groin", "Colicky, severe, radiating to testis", "Restless patient (cf. peritonitis)", "Non-contrast CT KUB", "Analgesia (diclofenac), urological Rx"],
["Ectopic Pregnancy", "Iliac fossa (unilateral)", "Sharp, may have shoulder tip pain", "Amenorrhoea, vaginal bleed, cervical excitation", "β-hCG, transvaginal USS", "Surgery (salpingectomy/salpingostomy)"],
["Ovarian Cyst (torsion)", "Lower quadrant", "Sudden severe, nausea/vomiting", "Adnexal tenderness, no fever early", "USS (Doppler)", "Emergency laparoscopy"],
["Aortic Dissection/AAA rupture", "Epigastric/back", "Tearing, sudden onset", "Pulsatile mass, haemodynamic collapse", "CT aorta (stable) / bedside USS (unstable)", "Emergency EVAR or open repair"],
]
story.append(make_table(ap_headers, ap_rows,
[28*mm, 22*mm, 22*mm, 32*mm, 30*mm, 42*mm]))
story.append(note("PYQ: McBurney's point = junction of lateral 1/3 and medial 2/3 of line from ASIS to umbilicus"))
story.append(note("PYQ: Cullen's sign = periumbilical bruising | Grey Turner's sign = flank bruising — both in haemorrhagic pancreatitis"))
story.append(sp(3))
# ═══════════════════════════════════════════════════════════
# 02 JAUNDICE DIFFERENTIALS
# ═══════════════════════════════════════════════════════════
story.append(section_banner("02 JAUNDICE — DIFFERENTIAL DIAGNOSIS", DARK_BG, WHITE, ACCENT))
story.append(sp(2))
jx_headers = ["Type", "Bilirubin", "Urine", "Stool", "ALP/GGT", "AST/ALT", "Key Feature"]
jx_rows = [
["Pre-hepatic (Haemolytic)", "Unconjugated↑", "Normal (urobilinogen↑, no bilirubin)", "Dark (urobilinogen↑)", "Normal", "Normal", "Anaemia, splenomegaly; Coombs test"],
["Hepatic (Hepatocellular)", "Both↑ (conjugated > unconjugated)", "Dark (bilirubin present)", "Pale (variable)", "Mild↑", "Markedly↑", "LFT derangement; hepatitis serology"],
["Post-hepatic (Obstructive)", "Conjugated↑", "Dark (bilirubin present)", "Pale/white (clay coloured)", "Markedly↑↑", "Mild↑", "Pruritus; Courvoisier's law"],
]
story.append(make_table(jx_headers, jx_rows,
[30*mm, 28*mm, 28*mm, 20*mm, 20*mm, 20*mm, 34*mm]))
story.append(sp(2))
jx2_headers = ["Cause of Obstructive Jaundice", "Age", "Pain", "GB (Palpable?)", "Weight Loss", "Investigation of Choice"]
jx2_rows = [
["CBD calculus", "Any (MC: 40-60F)", "Biliary colic / Charcot's triad", "No (Courvoisier's -ve)", "No", "USS then ERCP"],
["Carcinoma head of pancreas", "Elderly male", "Dull back pain (late)", "YES — Courvoisier's +ve", "YES — significant", "CT abdomen / ERCP / biopsy"],
["Cholangiocarcinoma (Klatskin)", "60-70 yrs", "Mild/none", "No", "Yes", "MRCP (level of obstruction)"],
["Periampullary carcinoma", "60+ yrs", "Intermittent (silver stool)", "Yes", "Yes", "ERCP + biopsy"],
["Primary Sclerosing Cholangitis", "Young males, IBD assoc.", "RUQ discomfort, pruritus", "No", "No", "MRCP (beaded bile ducts)"],
["Mirizzi Syndrome", "Middle-aged F", "RUQ colicky", "No", "No", "USS + MRCP (stone in Hartmann's pouch)"],
]
story.append(sp(2))
story.append(section_banner(" Causes of Obstructive Jaundice Compared", MID_BG, WHITE, ACCENT_GRN))
story.append(sp(1))
story.append(make_table(jx2_headers, jx2_rows,
[38*mm, 20*mm, 28*mm, 24*mm, 20*mm, 50*mm], header_color=HexColor("#1A5276"), alt_color=HexColor("#EAF7EE")))
story.append(note("PYQ: Courvoisier's law — palpable, non-tender GB + jaundice = malignancy (stones cause GB fibrosis → cannot distend)"))
story.append(sp(3))
# ═══════════════════════════════════════════════════════════
# 03 INTESTINAL OBSTRUCTION
# ═══════════════════════════════════════════════════════════
story.append(section_banner("03 INTESTINAL OBSTRUCTION — DIFFERENTIALS", DARK_BG, WHITE, ACCENT))
story.append(sp(2))
io_headers = ["Feature", "Small Bowel Obstruction", "Large Bowel Obstruction", "Sigmoid Volvulus", "Paralytic Ileus"]
io_rows = [
["MC Cause", "Adhesions (post-op)", "Carcinoma colon", "Redundant sigmoid (constipation)", "Post-operative, peritonitis"],
["Pain Character", "Colicky, central", "Colicky, lower abdominal", "Sudden severe, massive distension", "Absent pain, distension"],
["Vomiting", "Early, prominent", "Late, faeculent", "May be present", "Nausea, may vomit"],
["Distension", "Central (valvulae conniventes)", "Peripheral (haustrations)", "Massive, asymmetric", "Generalised, uniform"],
["Bowel Sounds", "High-pitched tinkling", "Absent or reduced", "Initially high-pitched then absent", "Absent"],
["AXR Finding", "Ladder-pattern air-fluid levels, central", "Peripheral haustrated loops, no gas in rectum", "Coffee bean / Omega sign", "Gaseous distension all loops including rectum"],
["Gas in Rectum", "No (diagnostic)", "No", "No", "YES"],
["Management", "NG decompression; surgery if strangulation", "Hartmann's / resection + stoma", "Rigid sigmoidoscopy + flatus tube; then elective surgery", "Treat cause; conservative (ambulation, prokinetics)"],
]
story.append(make_table(io_headers, io_rows,
[28*mm, 38*mm, 38*mm, 36*mm, 40*mm]))
story.append(note("PYQ: Coffee bean sign (sigmoid volvulus) — convexity toward RUQ | Pseudoobstruction (Ogilvie's) = dilated colon without mechanical cause — Rx: Neostigmine"))
story.append(sp(3))
# ═══════════════════════════════════════════════════════════
# 04 GI BLEEDING
# ═══════════════════════════════════════════════════════════
story.append(section_banner("04 GASTROINTESTINAL BLEEDING — DIFFERENTIALS", DARK_BG, WHITE, ACCENT))
story.append(sp(2))
gib_headers = ["Cause", "Type", "Presentation", "Age/Risk", "Endoscopy Finding", "Management"]
ugib_rows = [
["Peptic Ulcer Disease", "UGIB (80%)", "Haematemesis / melaena", "NSAIDs, H. pylori, smoking", "Ulcer ± vessel (Forrest classification)", "Endoscopic Rx (injection + clip); PPI"],
["Oesophageal Varices", "UGIB", "Massive haematemesis, shock", "Cirrhosis / portal HTN", "Column of varices, cherry-red spots", "Terlipressin + Endoscopic band ligation; Sengstaken tube if failing"],
["Mallory-Weiss Tear", "UGIB", "Post-vomiting haematemesis", "Alcoholics, bulimia", "Linear tear at OGJ", "Usually self-limiting; endoscopic Rx if persists"],
["Dieulafoy Lesion", "UGIB", "Massive haematemesis, recurrent", "Any age", "Large submucosal vessel, no ulcer", "Endoscopic (difficult to identify); angioembolisation"],
["Gastric Antral Vascular Ectasia", "UGIB (chronic)", "Iron deficiency anaemia, melaena", "Elderly, cirrhosis", "Watermelon stomach", "Argon plasma coagulation"],
]
lgib_rows = [
["Haemorrhoids", "LGIB", "Bright red blood AFTER defaecation, painless", "Young-middle aged adults", "Proctoscopy: internal haemorrhoids", "Conservative; banding; haemorrhoidectomy (Gr III-IV)"],
["Anal Fissure", "LGIB", "Fresh blood + severe anal pain during/after defaecation", "Young adults, constipation", "Proctoscopy: posterior midline tear", "GTN cream / diltiazem / lateral sphincterotomy"],
["Colorectal Carcinoma", "LGIB (altered blood + mucus)", "Change in bowel habit, weight loss", ">50 yrs; FAP, HNPCC", "Colonoscopy: mass lesion, biopsy", "Surgical resection ± chemo/RT"],
["Diverticular Disease", "LGIB (often massive, painless)", "Sudden bright/dark red per rectum, older patient", ">60 yrs, low fibre diet", "Colonoscopy / CT colonography", "Usually self-limiting; selective angioembolisation if persistent"],
["Ischaemic Colitis", "LGIB", "Bloody diarrhoea, LIF pain, 'splenic flexure' — watershed area", "Elderly, atherosclerosis, post-aortic sx", "Colonoscopy: segmental erythema, thumb-printing on AXR", "Supportive; surgery if full-thickness necrosis"],
["Intussusception", "LGIB (paediatric)", "Redcurrant jelly stool, colicky pain, sausage-shaped mass", "6 months–2 years (MC paediatric cause)", "USS: target/donut sign", "Air-enema reduction; surgery if failed"],
]
story.append(Paragraph("▶ Upper GI Bleeding (Proximal to Ligament of Treitz)", S["sub_section"]))
story.append(make_table(gib_headers, ugib_rows, [30*mm, 14*mm, 30*mm, 28*mm, 30*mm, 48*mm], header_color=ACCENT_RED, alt_color=HexColor("#FDEDEC")))
story.append(sp(2))
story.append(Paragraph("▶ Lower GI Bleeding", S["sub_section"]))
story.append(make_table(gib_headers, lgib_rows, [30*mm, 14*mm, 30*mm, 28*mm, 30*mm, 48*mm], header_color=HexColor("#117A65"), alt_color=HexColor("#E8F8F5")))
story.append(note("PYQ: Rockall score = risk stratification in UGIB | Forrest Ia (spurting vessel) = highest re-bleed risk → endoscopic Rx mandatory"))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════
# 05 BREAST LUMP
# ═══════════════════════════════════════════════════════════
story.append(section_banner("05 BREAST LUMP — DIFFERENTIAL DIAGNOSIS", DARK_BG, WHITE, ACCENT))
story.append(sp(2))
bl_headers = ["Diagnosis", "Age", "Consistency", "Mobility", "Pain", "Associated Features", "Investigation"]
bl_rows = [
["Fibroadenoma", "<30 yrs", "Firm, smooth, rubbery", "Highly mobile ('breast mouse')", "Painless", "No skin changes, well-defined", "USS → core biopsy"],
["Fibrocystic Disease (ANDI)", "30–50 yrs", "Nodular, variable", "Variable", "Cyclical mastalgia (worse premenstrual)", "Bilateral, multiple lumps", "USS / mammogram"],
["Breast Cyst", "35–55 yrs", "Fluctuant, smooth", "Mobile", "Tender, sudden appearance", "May transilluminate", "USS (anechoic) → aspiration"],
["Breast Abscess", "Lactating (periareolar: non-lactating)", "Fluctuant, warm, tender", "Fixed (if abscess)", "Severe pain, fever", "Redness, nipple discharge (pus)", "USS + aspiration/I&D"],
["Carcinoma Breast", ">35 yrs (peak 50–70)", "Hard, irregular", "Fixed (to skin or chest wall)", "Usually painless", "Peau d'orange, nipple retraction, LN", "Triple assessment: Mammo + USS + core biopsy"],
["Phyllodes Tumour", "35–55 yrs", "Firm, bosselated", "Mobile initially", "Painless", "Rapid growth, overlying skin stretched", "Core biopsy (leaf-like pattern)"],
["Fat Necrosis", "Any (post-trauma/biopsy)", "Hard, irregular (mimics Ca)", "Fixed", "Tender initially then painless", "History of trauma, biopsy", "Mammogram (oil cyst/calcification), biopsy"],
["Intraductal Papilloma", "35–55 yrs", "Subareolar, small", "Mobile", "Serous/bloody nipple discharge", "Single duct discharge", "Ductoscopy / ductogram"],
["Galactocoele", "Lactating/post-lactation", "Soft, fluctuant", "Mobile", "Usually painless", "Retention of milk", "USS (complex cystic) → aspiration (milky)"],
]
story.append(make_table(bl_headers, bl_rows,
[28*mm, 18*mm, 24*mm, 18*mm, 18*mm, 34*mm, 40*mm], alt_color=ROW_ALT2))
story.append(note("PYQ: Triple assessment = clinical + imaging + pathology. All 3 must agree (concordance) before benign diagnosis accepted"))
story.append(note("PYQ: BRCA1 = breast + ovarian Ca | BRCA2 = male breast Ca | ER+PR+ → tamoxifen | HER2+ → trastuzumab"))
story.append(sp(3))
# ═══════════════════════════════════════════════════════════
# 06 THYROID
# ═══════════════════════════════════════════════════════════
story.append(section_banner("06 THYROID — NODULE & CANCER DIFFERENTIALS", DARK_BG, WHITE, ACCENT))
story.append(sp(2))
th_headers = ["Cancer Type", "% of All Thyroid Ca", "Cell of Origin", "Spread", "Histology Marker", "Prognosis", "Special Feature"]
th_rows = [
["Papillary (PTC)", "80–85%", "Follicular cells", "Lymphatic → cervical LN", "Orphan Annie eye nuclei; Psammoma bodies; nuclear grooves", "Best (10yr survival >90%)", "Cold nodule; BRAF mutation; assoc. radiation"],
["Follicular (FTC)", "10–15%", "Follicular cells", "Haematogenous (bone, lung)", "Capsular & vascular invasion (no nuclear grooves)", "Good (10yr survival ~85%)", "FNAC CANNOT distinguish from follicular adenoma"],
["Medullary (MTC)", "5–10%", "Parafollicular C-cells", "Both lymphatic + haematogenous", "Amyloid stroma; calcitonin-positive", "Intermediate", "RET mutation; MEN2A/2B; calcitonin as tumour marker"],
["Anaplastic (ATC)", "<2%", "Follicular cells (dedifferentiated)", "Early local invasion + haematogenous", "Pleomorphic giant cells", "Worst (<6 months survival)", "Rapid onset in elderly; compressive Sx"],
["Lymphoma", "Rare", "Lymphocytes", "Lymphatic", "Large B-cell lymphoma", "Variable", "Assoc. Hashimoto's thyroiditis; rapid swelling"],
]
story.append(make_table(th_headers, th_rows,
[24*mm, 18*mm, 18*mm, 28*mm, 36*mm, 24*mm, 32*mm]))
story.append(note("PYQ: FNAC (Bethesda) cannot diagnose follicular carcinoma — requires histology (capsular invasion). Follicular = Bethesda IV (indeterminate)"))
story.append(note("PYQ: Medullary TC = only thyroid cancer where calcitonin is the tumour marker. Screen MEN2 family with RET testing"))
story.append(sp(3))
# ═══════════════════════════════════════════════════════════
# 07 NECK SWELLING
# ═══════════════════════════════════════════════════════════
story.append(section_banner("07 NECK SWELLING — DIFFERENTIALS", DARK_BG, WHITE, ACCENT))
story.append(sp(2))
neck_headers = ["Swelling", "Location", "Age", "Moves with Swallowing", "Transillumination", "Key Features", "Investigation"]
neck_rows = [
["Thyroid Goitre", "Midline / anterior", "Any", "YES", "No", "Moves on swallowing AND tongue protrusion", "TFTs, USS, FNAC"],
["Thyroglossal Cyst", "Midline, below hyoid", "Children/young adults", "YES", "May transilluminate", "Moves on tongue protrusion (attached to hyoid)", "USS; excision (Sistrunk operation)"],
["Branchial Cyst", "Anterior triangle (upper 1/3 SCM)", "15–25 yrs", "No", "Transillumination +ve", "Smooth, fluctuant, cholesterol crystals on aspiration", "USS/CT; excision"],
["Cervical Lymphadenopathy", "Various levels", "Any", "No", "No", "Single or matted nodes; fever (infective vs malignant)", "USS + FNA/core biopsy"],
["Cystic Hygroma", "Posterior triangle", "Infants (<2 yrs)", "No", "Brilliantly transilluminant", "Soft, compressible; can extend to mediastinum", "USS/MRI; sclerotherapy or surgery"],
["Carotid Body Tumour", "At carotid bifurcation", "Adults", "No", "No", "Transmitted pulsation; side-to-side mobile (Fontaine's sign); NOT up-down mobile", "Duplex USS; CT angiography"],
["Dermoid Cyst", "Midline (sublingual/submental)", "Young", "No", "May transilluminate", "Doughy consistency; no attachment to hyoid", "USS; excision"],
["Pharyngeal Pouch (Zenker's)", "Posterior (left side)", "Elderly", "No", "No", "Regurgitation of undigested food; gurgling", "Barium swallow (gold std)"],
["Lymphoma", "Cervical chains", "Young (Hodgkin's) or elderly (NHL)", "No", "No", "Rubbery, firm, non-tender; B symptoms", "Excision biopsy; CT chest/abdomen"],
]
story.append(make_table(neck_headers, neck_rows,
[28*mm, 22*mm, 16*mm, 20*mm, 18*mm, 38*mm, 38*mm]))
story.append(note("PYQ: Sistrunk's operation = thyroglossal cyst excision — includes body of hyoid to prevent recurrence"))
story.append(note("PYQ: Carotid body tumour (paraganglioma/chemodectoma) — Fontaine's sign = horizontal mobility present, vertical absent"))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════
# 08 HERNIA
# ═══════════════════════════════════════════════════════════
story.append(section_banner("08 HERNIA TYPES — COMPARISON TABLE", DARK_BG, WHITE, ACCENT))
story.append(sp(2))
h_headers = ["Hernia Type", "Location", "Relation to Inferior Epigastric", "At Risk / MC in", "Special Feature", "Surgery"]
h_rows = [
["Indirect Inguinal", "Inguinal canal — through deep ring → along canal", "LATERAL to inferior epigastric artery", "Males, young; MC hernia overall", "Passes through deep ring → superficial ring → scrotum", "Lichtenstein mesh repair"],
["Direct Inguinal", "Inguinal canal — through Hesselbach's triangle", "MEDIAL to inferior epigastric artery", "Elderly males, chronic cough/strain", "Bulge directly forward, rarely goes to scrotum", "Lichtenstein mesh repair"],
["Femoral", "Femoral canal (medial to femoral vein)", "Below and lateral to pubic tubercle", "MC in women (but inguinal still commoner overall)", "MC complication = strangulation | Richter's possible", "McVay repair / TAPP"],
["Umbilical", "Through umbilical defect", "—", "Children (para-umbilical in adults)", "Infantile = closes spontaneously by 2 yrs", "Mayo repair (vest-over-pants) in adults"],
["Para-umbilical", "Through linea alba near umbilicus", "—", "Obese middle-aged women", "Does NOT close spontaneously", "Surgical repair"],
["Epigastric", "Midline, linea alba, above umbilicus", "—", "Males 20–50 yrs", "Often small defect with pre-peritoneal fat; painful", "Simple repair"],
["Spigelian", "Lateral border of rectus at linea semilunaris", "—", "Middle-aged, often obese", "Interparietal (between muscle layers) → hard to detect", "CT/USS diagnosis; repair"],
["Obturator", "Obturator canal", "—", "Thin, elderly women ('Little old lady hernia')", "Howship-Romberg sign = medial thigh pain on hip extension | High strangulation risk", "Laparotomy/repair"],
["Gluteal / Sciatic", "Greater/lesser sciatic notch", "—", "Rare", "High strangulation risk; sciatica", "Surgical exploration"],
["Richter's Hernia", "Any hernia orifice", "—", "Femoral most common", "Only antimesenteric wall herniated — may strangulate WITHOUT obstruction", "High risk — emergency repair"],
["Maydl's Hernia", "Inguinal usually", "—", "Any", "W-loop of bowel — internal loop strangulates INSIDE abdomen while external appears viable", "Emergency repair"],
["Littre's Hernia", "Any", "—", "Any", "Contains Meckel's diverticulum as content", "Repair + Meckel's excision"],
]
story.append(make_table(h_headers, h_rows,
[28*mm, 28*mm, 26*mm, 26*mm, 38*mm, 34*mm]))
story.append(note("PYQ: Hesselbach's triangle — boundaries: Inguinal ligament (inferior), Rectus sheath (medial), Inferior epigastric artery (lateral)"))
story.append(note("PYQ: MC hernia in females = inguinal (indirect) | BUT femoral hernia is relatively more common in females than males"))
story.append(sp(3))
# ═══════════════════════════════════════════════════════════
# 09 ANORECTAL
# ═══════════════════════════════════════════════════════════
story.append(section_banner("09 ANORECTAL CONDITIONS — QUICK REFERENCE", DARK_BG, WHITE, ACCENT))
story.append(sp(2))
ar_headers = ["Condition", "Site (Relation to Dentate Line)", "Pain", "Bleeding", "Examination", "Treatment"]
ar_rows = [
["Internal Haemorrhoids", "Above dentate line (visceral)", "Painless", "Bright red, AFTER defaecation, not mixed with stool", "Proctoscopy — above dentate", "Gr I-II: Conservative + RBL; Gr III-IV: Haemorrhoidectomy"],
["External Haemorrhoids", "Below dentate line (somatic)", "Painful (thrombosed = severe)", "Less common; bruise-coloured swelling", "Perianal inspection", "Conservative; thrombectomy if acute"],
["Anal Fissure (acute)", "Below dentate line, posterior midline (90%)", "Severe tearing pain during/after defaecation", "Small amount bright red blood", "Tear at 6 o'clock; sentinel pile", "Topical GTN / Diltiazem; Botox; Lateral internal sphincterotomy (LIS)"],
["Anorectal Abscess", "Perianal / Ischiorectal / Intersphincteric", "Throbbing, constant pain", "No/minimal", "Tender, fluctuant perianal mass; fever, WBC↑", "Incision and drainage (DO NOT aspirate)"],
["Fistula-in-ano", "Track between internal opening (dentate) and external opening (perianal skin)", "Chronic discharge, variable pain", "May have blood-stained discharge", "Goodsall's rule; probe gently", "Fistulotomy (intersphincteric); seton (trans-sphincteric); LIFT procedure"],
["Pilonidal Sinus", "Postanal/natal cleft (not anal margin)", "Intermittent pain, swelling", "Seropurulent discharge", "Pit(s) in natal cleft; hair visible", "Wide excision ± primary closure or Karydakis flap"],
["Rectal Prolapse", "Full-thickness rectal wall protrusion", "Discomfort, mucus discharge", "PR bleeding, mucus", "Concentric folds of mucosa (vs radial in haemorrhoids)", "Children: conservative | Adults: Delorme's / Altemeier's procedure / Rectopexy"],
["Carcinoma Rectum", "Above dentate line (upper/middle rectum)", "Late pain; tenesmus", "Altered blood + mucus mixed with stool", "Hard, irregular mass on DRE", "TME surgery ± neoadjuvant chemoRT"],
]
story.append(make_table(ar_headers, ar_rows,
[28*mm, 28*mm, 18*mm, 24*mm, 30*mm, 52*mm]))
story.append(note("PYQ: Goodsall's rule — external openings POSTERIOR to transverse anal line → curved track to posterior midline; ANTERIOR → straight radial track"))
story.append(note("PYQ: Parks classification of fistula — Intersphincteric (MC, 70%) > Trans-sphincteric > Suprasphincteric > Extrasphincteric"))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════
# 10 SHOCK COMPARISON
# ═══════════════════════════════════════════════════════════
story.append(section_banner("10 SHOCK — TYPE COMPARISON", DARK_BG, WHITE, ACCENT))
story.append(sp(2))
shock_headers = ["Type", "CO", "SVR", "PCWP", "JVP", "Skin", "MC Cause", "Treatment"]
shock_rows = [
["Hypovolaemic", "↓↓", "↑↑", "↓", "↓", "Cold, clammy, pale", "Haemorrhage, burns, vomiting/diarrhoea", "IV fluids + blood; stop bleeding"],
["Distributive — Septic", "↑ (early) / ↓ (late)", "↓↓", "↓/normal", "↓/normal", "Warm, flushed (early); cold (late)", "Gram-neg bacteraemia", "IV antibiotics + fluids + vasopressors (noradrenaline)"],
["Distributive — Anaphylactic", "↑", "↓↓", "↓", "↓", "Warm, urticarial, flushed", "Drugs (penicillin), insect sting, food", "IM Adrenaline 0.5mg (first line) + antihistamine + steroid"],
["Distributive — Neurogenic", "↑", "↓↓", "↓", "↓", "Warm, dry, flushed (no sweating due to sympathectomy)", "Spinal cord injury (cervical/upper thoracic)", "IVF + vasopressors; avoid hypothermia/bradycardia"],
["Cardiogenic", "↓↓", "↑↑", "↑↑", "↑ (raised)", "Cold, clammy; pulmonary oedema", "MI, arrhythmia, acute valvular failure", "Inotropes (dobutamine), IABP, treat cause"],
["Obstructive — Tension PTX", "↓↓", "↑↑", "↓", "↑ (raised)", "Cold, clammy; trachea deviated away", "Positive pressure ventilation, trauma", "IMMEDIATE needle decompression (2nd ICS MCL)"],
["Obstructive — Cardiac Tamponade", "↓↓", "↑↑", "↑", "↑ (Beck's triad)", "Cold; muffled heart sounds; pulsus paradoxus", "Haemopericardium, pericarditis", "Pericardiocentesis (18G needle, subxiphoid)"],
]
story.append(make_table(shock_headers, shock_rows,
[28*mm, 14*mm, 14*mm, 16*mm, 14*mm, 28*mm, 30*mm, 36*mm], alt_color=HexColor("#FDEDEC")))
story.append(note("PYQ: Haemorrhagic shock Class III = first class to show altered consciousness | Class II = first to show tachycardia (HR >100)"))
story.append(note("PYQ: Fluid of choice in haemorrhagic shock = Ringer's Lactate (Hartmann's) | Normal saline preferred in TBI (avoid hypotonic)"))
story.append(sp(3))
# ═══════════════════════════════════════════════════════════
# 11 BURNS
# ═══════════════════════════════════════════════════════════
story.append(section_banner("11 BURNS — DEPTH CLASSIFICATION & MANAGEMENT", DARK_BG, WHITE, ACCENT))
story.append(sp(2))
burn_headers = ["Degree", "Depth", "Appearance", "Sensation", "Blisters", "Healing", "Management"]
burn_rows = [
["Superficial (1st degree)", "Epidermis only", "Red, dry, no blisters", "Painful, hyperaesthetic", "No", "3–5 days", "Analgesia, topical emollients"],
["Superficial Partial Thickness (2nd - superficial)", "Epidermis + superficial dermis", "Red, moist, blisters", "Very painful", "YES", "10–14 days (minimal scarring)", "Silver sulfadiazine cream or modern dressings (Mepitel)"],
["Deep Partial Thickness (2nd - deep)", "Epidermis + deep dermis", "Pale, mottled, fixed staining", "Insensate / reduced sensation", "YES (may be deroofed)", "21–35 days (significant scarring)", "Tangential excision + split skin graft"],
["Full Thickness (3rd degree)", "All layers of skin", "Leathery, white/black/waxy, dry", "Insensate (nerve ends destroyed)", "No (leathery eschar)", "Does NOT heal without grafting", "Excision + split thickness skin graft (within 3–5 days)"],
["4th degree", "Down to bone/tendon/muscle", "Charred, black, dry", "Completely insensate", "No", "Does NOT heal", "Amputation / flap reconstruction"],
]
story.append(make_table(burn_headers, burn_rows,
[28*mm, 22*mm, 28*mm, 20*mm, 16*mm, 22*mm, 44*mm], alt_color=HexColor("#FEF9E7")))
story.append(sp(2))
# Parkland formula box
pkland_data = [
[Paragraph("PARKLAND FORMULA — Fluid Resuscitation in Burns", ParagraphStyle("pk", fontSize=10, textColor=WHITE, fontName="Helvetica-Bold", leading=13)),
Paragraph("4 mL × Weight (kg) × % BSA burned", ParagraphStyle("pk2", fontSize=11, textColor=ACCENT, fontName="Helvetica-Bold", leading=14))],
[Paragraph("Give first HALF in initial 8 hours (from time of burn, not admission)\nGive second HALF over next 16 hours\nFluid: Ringer's Lactate (crystalloid)\nMonitor: Urine output (Adults: 0.5 mL/kg/hr | Children: 1 mL/kg/hr)", ParagraphStyle("pk3", fontSize=9, textColor=WHITE, fontName="Helvetica", leading=12)),
Paragraph("Rule of Nines (Adults):\nHead & Neck = 9% Each Arm = 9%\nAnterior Trunk = 18% Posterior Trunk = 18%\nEach Leg = 18% Perineum = 1%\nPalmar Rule: Patient's palm = 1% BSA", ParagraphStyle("pk4", fontSize=9, textColor=LIGHT_GRAY, fontName="Helvetica", leading=12))],
]
pkland_tbl = Table(pkland_data, colWidths=[W//2, W//2])
pkland_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), DARK_BG),
("BACKGROUND", (0,1), (-1,1), MID_BG),
("GRID", (0,0), (-1,-1), 0.5, ACCENT),
("LEFTPADDING", (0,0), (-1,-1), 8),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(pkland_tbl)
story.append(sp(3))
# ═══════════════════════════════════════════════════════════
# 12 HEAD INJURY
# ═══════════════════════════════════════════════════════════
story.append(section_banner("12 HEAD INJURY — EDH vs SDH vs SAH vs DAI", DARK_BG, WHITE, ACCENT))
story.append(sp(2))
hi_headers = ["Feature", "Extradural Haematoma (EDH)", "Acute Subdural Haematoma (ASDH)", "Chronic SDH", "Subarachnoid Haemorrhage (SAH)", "Diffuse Axonal Injury (DAI)"]
hi_rows = [
["Vessel", "Middle meningeal artery (arterial)", "Bridging veins (venous)", "Bridging veins", "Berry aneurysm (85%) / AVM", "Axons — no bleed"],
["Lucid Interval", "CLASSIC (30–50%)", "Absent", "Slowly progressive confusion", "Absent (sudden collapse)", "Absent — immediate coma"],
["Onset", "Rapid deterioration after brief lucid period", "Rapid deterioration", "Weeks after minor trauma", "Sudden-onset worst headache", "Immediate loss of consciousness"],
["CT Finding", "Biconvex (lenticular) hyperdense", "Crescent-shaped hyperdense (follows brain surface)", "Crescent-shaped HYPODENSE (or isodense subacute)", "Star-shaped hyperdense in cisterns/sulci", "CT may be normal; MRI shows white matter lesions"],
["Does not cross", "Suture lines", "Dural folds (falx/tentorium)", "Dural folds", "—", "—"],
["Management", "Emergency craniotomy (within 1–2 hrs)", "Emergency craniotomy (mortality high)", "Burr hole + irrigation (2 burr holes)", "Nimodipine + neurosurgery (clip or coil)", "Supportive; ICU; poor prognosis"],
["Key PYQ Fact", "Kernohan's notch = false localising; Duret haemorrhage = brainstem bleed from herniation", "GCS <9 at presentation = poor prognosis marker", "Elderly, alcoholics, anticoagulants — minor trauma", "Xanthochromia in CSF if CT negative; LP at 12 hrs", "Most common cause of persisting vegetative state post TBI"],
]
story.append(make_table(hi_headers, hi_rows,
[28*mm, 30*mm, 30*mm, 26*mm, 28*mm, 38*mm]))
story.append(note("PYQ: Cushing's reflex (triad) = Hypertension + Bradycardia + Irregular breathing = raised ICP — LATE sign, indicates brainstem herniation"))
story.append(note("PYQ: GCS scoring: Eye (4) + Verbal (5) + Motor (6) = 15 max | GCS ≤8 = Intubate | Minimum GCS = 3"))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════
# 13 ULCER TYPES
# ═══════════════════════════════════════════════════════════
story.append(section_banner("13 LOWER LIMB ULCER — ARTERIAL vs VENOUS vs NEUROPATHIC", DARK_BG, WHITE, ACCENT))
story.append(sp(2))
ul_headers = ["Feature", "Arterial (Ischaemic) Ulcer", "Venous (Varicose) Ulcer", "Neuropathic (Diabetic) Ulcer"]
ul_rows = [
["Site", "Tips of toes, heel, pressure areas, malleoli", "Medial gaiter area (medial malleolus = MC site)", "Plantar surface, pressure points (metatarsal heads, heel)"],
["Pain", "Very painful (rest pain at night, relieved by hanging foot down)", "Mild/aching; relieved by elevation", "PAINLESS (loss of protective sensation)"],
["Margin", "Punched-out ('clean' edge)", "Sloping, irregular margin", "Punched-out with callus surrounding"],
["Base", "Pale, necrotic, no granulation tissue", "Granulating (red), sloughy", "Deep, may reach bone, granulating or necrotic"],
["Surrounding Skin", "Atrophic, shiny, hairless, cold, pale/cyanotic", "Lipodermatosclerosis (woody induration), haemosiderin (brown pigmentation), eczema", "Dry, cracked skin; warm (autonomic neuropathy); callus"],
["Pulses", "ABSENT or diminished", "Normal (venous ulcer)", "Normal or diminished (if arterial component)"],
["ABI", "<0.8 (usually <0.5)", ">0.8 (normal)", "Variable (calc. errors in DM)"],
["Varicosities", "Absent", "Present (CEAP ≥C5)", "Absent (unless combined)"],
["Investigation", "Duplex USS, CT/MR angiography", "Duplex USS (venous reflux), ABPI before compression", "Monofilament testing (Semmes-Weinstein), X-ray (osteomyelitis)"],
["Treatment", "Revascularisation (angioplasty/bypass); palliation if not feasible", "Compression bandaging (4-layer); wound care; treat reflux (EVLA/surgery)", "Offloading (Total Contact Cast); wound debridement; antibiotics if infected; revascularisation"],
]
story.append(make_table(ul_headers, ul_rows,
[30*mm, 50*mm, 50*mm, 50*mm]))
story.append(note("PYQ: Marjolin's ulcer = malignant SCC arising in chronic wound/scar (eg. chronic venous ulcer, burn scar, sinuses) — slow growing, NO LN spread initially"))
story.append(sp(3))
# ═══════════════════════════════════════════════════════════
# 14 SALIVARY GLAND TUMOURS
# ═══════════════════════════════════════════════════════════
story.append(section_banner("14 SALIVARY GLAND & ORAL TUMOURS", DARK_BG, WHITE, ACCENT))
story.append(sp(2))
sg_headers = ["Tumour", "Gland (MC)", "Benign/Malignant", "Age", "Key Histology", "Key Clinical Feature", "Treatment"]
sg_rows = [
["Pleomorphic Adenoma", "Parotid (80%)", "Benign (but may malignise)", "40–60 yrs", "Epithelial + mesenchymal (myxoid) stroma; pseudopods", "MC salivary tumour; RECURS if incomplete excision (pseudopods)", "Superficial parotidectomy (with cuff of normal tissue)"],
["Warthin's Tumour (Cystadenoma lymphomatosum)", "Parotid (tail)", "Benign", "Elderly males", "Oncocytic epithelium + lymphoid stroma", "MC bilateral salivary tumour; smokers; bilateral 10%", "Excision; rarely needs surgery"],
["Adenoid Cystic Carcinoma", "Submandibular / minor salivary glands", "Malignant (MC malignant)", "40–60 yrs", "Swiss cheese / cribriform pattern; perineural invasion", "Perineural spread; facial pain/numbness; LATE distant mets (lung)", "Wide excision + RT; poor prognosis if high grade"],
["Mucoepidermoid Carcinoma", "Parotid (MC malignant in parotid)", "Malignant (low to high grade)", "Any age (MC in children)", "Mucous + epidermoid + intermediate cells", "MC malignant tumour of PAROTID; variable behaviour", "Surgery ± RT"],
["Acinic Cell Carcinoma", "Parotid", "Low-grade malignant", "Young adults", "Acinar cell differentiation (granular cytoplasm)", "Good prognosis; may recur", "Surgery"],
]
story.append(make_table(sg_headers, sg_rows,
[28*mm, 22*mm, 18*mm, 14*mm, 34*mm, 36*mm, 28*mm]))
story.append(note("PYQ: Frey's syndrome (gustatory sweating) = auriculotemporal nerve injury after parotidectomy → sweating/flushing over cheek when eating"))
story.append(note("PYQ: Facial nerve landmark in parotidectomy: Tragal pointer / Posterior belly of digastric / Stylomastoid foramen / Tympanomastoid suture"))
story.append(sp(3))
# ═══════════════════════════════════════════════════════════
# 15 SCROTAL SWELLING
# ═══════════════════════════════════════════════════════════
story.append(section_banner("15 SCROTAL SWELLING — DIFFERENTIALS", DARK_BG, WHITE, ACCENT))
story.append(sp(2))
scr_headers = ["Diagnosis", "Age", "Pain", "Transillumination", "Testis Separate?", "Key Feature", "Management"]
scr_rows = [
["Epididymo-orchitis", "Any (STI: young; UTI: old)", "Acute pain, fever", "No", "Yes (tender mass)", "Prehn's sign +ve (pain relief on elevation); USS (hyperaemia)", "Antibiotics (doxycycline if STI; ciprofloxacin if UTI)"],
["Testicular Torsion", "12–18 yrs (peak)", "ACUTE severe pain, nausea/vomiting", "No", "Yes but high-riding", "Absent cremasteric reflex; transverse lie; Prehn's sign -ve", "EMERGENCY surgical exploration — golden period 6 hrs"],
["Hydrocoele", "Infants (congenital) / adults (primary/secondary)", "Painless", "YES (brilliantly transilluminant)", "Cannot get above swelling in congenital type", "Confirm testis separate and normal; check for secondary cause", "Jaboulay's / Lord's procedure; congenital: wait until 2 yrs"],
["Varicocoele", "15–25 yrs", "Dull aching, worse standing", "No", "Yes", "Bag of worms; disappears lying down; 90% LEFT side; MC cause of male infertility", "Embolisation or surgery (Palomo/Ivanissevich)"],
["Epididymal Cyst", "30–50 yrs", "Painless", "YES", "SEPARATE from testis (above and behind)", "Spermatocoele if contains spermatozoa; smooth, fluctuant", "Reassurance; excision if bothersome"],
["Testicular Tumour", "20–35 yrs", "Painless hard lump", "No", "Inseparable from testis (arising from it)", "Solid, hard; elevated AFP (NSGCT) / β-hCG (choriocarcinoma) / LDH", "RADICAL ORCHIDECTOMY (inguinal approach — never scrotal)"],
["Inguinoscrotal Hernia", "Any", "Discomfort/pain (obstructed = severe)", "No (unless hydrocele of hernial sac)", "Cannot get above it (can get above testicular pathology)", "Reducible bowel above testis", "Lichtenstein / TAPP repair"],
["Fournier's Gangrene", "Elderly, diabetics, immunosuppressed", "SEVERE pain → rapidly painless (nerve destruction)", "No", "Necrosis obliterates anatomy", "Necrotising fasciitis of perineum; crepitus; foul odour; rapidly spreading", "Emergency wide debridement + IV antibiotics; ICU"],
]
story.append(make_table(scr_headers, scr_rows,
[26*mm, 14*mm, 14*mm, 20*mm, 20*mm, 44*mm, 42*mm]))
story.append(note("PYQ: Testicular torsion — cremasteric reflex is ABSENT (most reliable sign). Do NOT wait for USS — go directly to theatre"))
story.append(note("PYQ: Testicular tumour — ALWAYS via inguinal orchidectomy (never scrotal biopsy → avoids inguinal LN dissection being compromised)"))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════
# 16 PANCREATITIS
# ═══════════════════════════════════════════════════════════
story.append(section_banner("16 ACUTE vs CHRONIC PANCREATITIS", DARK_BG, WHITE, ACCENT))
story.append(sp(2))
pan_headers = ["Feature", "Acute Pancreatitis", "Chronic Pancreatitis"]
pan_rows = [
["Definition", "Acute inflammatory process of the pancreas with potential for systemic injury", "Progressive fibrotic destruction of pancreatic parenchyma"],
["MC Cause", "Gallstones (40–50%) then Alcohol (25–30%)", "Alcohol (70–80%) in developed world"],
["Pain", "Severe, epigastric, radiates to back, constant", "Persistent/recurrent, epigastric, radiates to back, weight loss"],
["Enzymes", "Amylase ↑↑ (>3× normal) | Lipase more specific and lasts longer", "Normal or mildly elevated (burnt-out)"],
["Imaging", "CECT: Pancreatic oedema / necrosis | Balthazar score", "X-ray / CT: Pancreatic calcification | MRCP: Ductal strictures ('chain of lakes' on ERCP)"],
["Scoring", "Ranson's criteria | APACHE II | CTSI (Balthazar)", "Cambridge classification"],
["Complications", "SIRS, ARDS, AKI, infected necrosis, pseudocyst, abscess, haemorrhage", "Steatorrhoea (exocrine failure), DM (endocrine failure), pseudocyst, bile duct stricture, malignancy"],
["Grey Turner / Cullen", "Present in haemorrhagic pancreatitis (retroperitoneal bleed)", "Absent"],
["Management", "NBM, IVF, analgesia, NG tube; ERCP if gallstone + cholangitis; surgery for infected necrosis", "Enzyme replacement (Creon), analgesia, insulin if DM, ERCP for duct stricture; surgery (Whipple/lateral pancreaticojejunostomy) for refractory pain"],
]
story.append(make_table(pan_headers, pan_rows, [28*mm, 76*mm, 76*mm], alt_color=ROW_ALT2))
story.append(note("PYQ: Ranson's criteria — on admission (5 factors) + at 48 hrs (6 factors) — score ≥3 = severe pancreatitis"))
story.append(note("PYQ: Pseudocyst = peripancreatic fluid collection >4 wks after pancreatitis — wall of reactive tissue (NOT epithelium); MC complication of chronic pancreatitis"))
story.append(sp(3))
# ═══════════════════════════════════════════════════════════
# 17 IBD
# ═══════════════════════════════════════════════════════════
story.append(section_banner("17 CROHN'S DISEASE vs ULCERATIVE COLITIS", DARK_BG, WHITE, ACCENT))
story.append(sp(2))
ibd_headers = ["Feature", "Crohn's Disease", "Ulcerative Colitis"]
ibd_rows = [
["Location", "Any part of GI tract — 'mouth to anus' (MC: terminal ileum + proximal colon)", "Colon only — ALWAYS starts in rectum and extends proximally (never skips)"],
["Distribution", "Skip lesions (areas of normal bowel between affected segments)", "Continuous (no skip lesions)"],
["Depth of Inflammation", "Transmural (all layers) → fistulas, strictures, abscesses", "Mucosal only (superficial)"],
["Rectal Involvement", "Often spared (30–50%)", "ALWAYS involved (panproctocolitis)"],
["Bloody Diarrhoea", "Less common; more abdominal mass + pain", "HALLMARK — bloody mucoid diarrhoea"],
["Endoscopy", "Cobblestone mucosa; deep ulcers; linear ulcers; aphthous ulcers", "Loss of haustrations; pseudopolyps; lead-pipe colon (late); friable mucosa"],
["Histology", "Non-caseating granulomas (60%); transmural inflammation; fissuring ulcers", "Crypt abscesses; distorted crypts; goblet cell depletion; NO granulomas"],
["Complications", "Strictures, fistulas (enterocutaneous, entero-enteric, perianal), abscess, malabsorption", "Toxic megacolon (MC cause death), perforation, haemorrhage, CRC (15–40× risk)"],
["Extra-intestinal", "Episcleritis, arthritis, erythema nodosum, PSC (less), uveitis, renal oxalate stones", "Primary Sclerosing Cholangitis (MC assoc.), pyoderma gangrenosum, arthritis"],
["Smoking", "Smoking WORSENS Crohn's", "Smoking is PROTECTIVE in UC"],
["Surgery", "Segmental resection (not curative — disease recurs); IBD surgery rates higher", "Proctocolectomy = CURATIVE (total colectomy)"],
["Cancer Risk", "Slightly increased (vs population)", "Significantly increased — pancolitis >10 yrs = highest risk"],
["p-ANCA / ASCA", "ASCA positive (anti-Saccharomyces cerevisiae)", "p-ANCA positive (perinuclear ANCA)"],
]
story.append(make_table(ibd_headers, ibd_rows, [32*mm, 74*mm, 74*mm], alt_color=ROW_ALT))
story.append(note("PYQ: Toxic megacolon — colon >6cm on AXR, systemic toxicity — emergency colectomy"))
story.append(note("PYQ: Pyoderma gangrenosum = more common in UC | PSC = more common in UC (but can occur in Crohn's)"))
story.append(sp(3))
# ═══════════════════════════════════════════════════════════
# 18 SCAR
# ═══════════════════════════════════════════════════════════
story.append(section_banner("18 HYPERTROPHIC SCAR vs KELOID", DARK_BG, WHITE, ACCENT))
story.append(sp(2))
scar_headers = ["Feature", "Hypertrophic Scar", "Keloid"]
scar_rows = [
["Definition", "Excessive scar confined within the original wound margins", "Scar that EXTENDS beyond the original wound margin ('tumour-like')"],
["Onset", "Within 4 weeks of injury", "Months to years after injury"],
["Regression", "May regress spontaneously over months", "Does NOT regress spontaneously"],
["Recurrence after excision", "Low", "High — excision alone = high recurrence"],
["Ethnicity", "Any", "MC in darkly pigmented individuals (African, South Asian)"],
["MC Sites", "Any wound site", "Ear lobe, sternum, deltoid, anterior chest, upper back"],
["Symptoms", "Pruritus, discomfort", "Pruritus, pain, cosmetic disfigurement"],
["Collagen", "Type III collagen — parallel arrangement", "Type III collagen — whorled/nodular arrangement"],
["Treatment", "Silicone gel sheeting, pressure garments, steroid injection", "Steroid injection (1st line), silicone, surgery + steroid, radiotherapy"],
["Association", "Burn wounds, surgical wounds", "Minor trauma (ear piercing), burns, acne"],
]
story.append(make_table(scar_headers, scar_rows, [32*mm, 74*mm, 74*mm], alt_color=ROW_ALT2))
story.append(sp(3))
# ═══════════════════════════════════════════════════════════
# 19 ORAL CAVITY PREMALIGNANT
# ═══════════════════════════════════════════════════════════
story.append(section_banner("19 ORAL PREMALIGNANT LESIONS — COMPARISON", DARK_BG, WHITE, ACCENT))
story.append(sp(2))
orl_headers = ["Lesion", "Appearance", "Malignant Potential", "Histology", "Management"]
orl_rows = [
["Leukoplakia", "White patch on oral mucosa; cannot be scraped off", "1–17% (higher in speckled variant)", "Hyperkeratosis; dysplasia varies (mild → severe CIS)", "Biopsy; excision if dysplasia; quit tobacco/alcohol"],
["Erythroplakia", "Bright red velvety patch", "HIGHEST — 17–50% already carcinoma at time of biopsy", "Severe dysplasia / carcinoma in situ", "URGENT biopsy + excision"],
["Speckled Erythroleukoplakia", "Mixed red-white", "Higher than pure leukoplakia (~30%)", "Variable dysplasia", "Biopsy multiple areas; excision"],
["Oral Submucous Fibrosis (OSMF)", "Fibrous bands; pale, stiff mucosa; restricted mouth opening (trismus)", "5–10% over 10 years", "Juxta-epithelial hyalinisation + fibrosis", "Cessation of betel nut; intralesional steroids; surgery for trismus"],
["Lichen Planus (erosive)", "White striae (Wickham's striae); erosive variant — red, painful", "1–3% (erosive only)", "Band-like lymphocytic infiltrate", "Corticosteroids; surveillance if erosive"],
["Actinic Keratosis (lip)", "Rough, scaly white patch on lower lip", "10–20% → SCC", "Atypical keratinocytes in lower epidermis", "Sunscreen; cryotherapy; excision"],
]
story.append(make_table(orl_headers, orl_rows, [30*mm, 38*mm, 24*mm, 34*mm, 54*mm]))
story.append(note("PYQ: Erythroplakia has the highest malignant potential of all oral premalignant lesions"))
story.append(note("PYQ: OSMF = submucosal fibrosis from areca nut (betel nut) chewing — leads to trismus (inability to open mouth)"))
story.append(sp(3))
# ═══════════════════════════════════════════════════════════
# 20 SUTURES
# ═══════════════════════════════════════════════════════════
story.append(section_banner("20 SUTURE TYPES — QUICK REFERENCE TABLE", DARK_BG, WHITE, ACCENT))
story.append(sp(2))
sut_headers = ["Suture", "Type", "Material", "Absorption Time", "Tensile Strength", "Uses", "Notes"]
sut_rows = [
["Catgut (plain)", "Absorbable, natural", "Sheep intestine collagen", "10–14 days", "Lost in 7–10 days", "Mucosal sutures, bowel (historical)", "Fastest absorbed; NOT used in presence of infection"],
["Chromic Catgut", "Absorbable, natural", "Catgut + chromium salts", "21–28 days", "Lost in 14 days", "Gynaecology, oral mucosa", "Delayed absorption vs plain catgut"],
["Vicryl (Polyglactin 910)", "Absorbable, synthetic, braided", "PGA + PLA copolymer", "60–90 days", "Maintains 50% at 3 wks", "MC used absorbable suture; deep tissues, bowel", "Braided → better handling; more infection risk than monofilament"],
["PDS (Polydioxanone)", "Absorbable, synthetic, monofilament", "Polydioxanone", "180–210 days", "Maintains 70% at 4 wks", "Abdominal wall closure, paediatric cardiac, tendon", "Longest lasting absorbable; ideal for slow-healing tissues"],
["Monocryl (Poliglecaprone)", "Absorbable, synthetic, monofilament", "Poliglecaprone 25", "91–119 days", "Lost rapidly (50% at 1 wk)", "Subcuticular skin closure", "Excellent cosmesis, low reactivity"],
["Nylon (Ethilon)", "Non-absorbable, synthetic, monofilament", "Polyamide", "Permanent", "High", "Skin, vascular surgery", "High memory (springs back); minimal tissue reactivity"],
["Prolene (Polypropylene)", "Non-absorbable, synthetic, monofilament", "Polypropylene", "Permanent", "High, stable", "Vascular anastomosis, hernia mesh, skin", "MC used in vascular surgery; blue coloured; minimal inflammatory reaction"],
["Silk", "Non-absorbable, natural, braided", "Silkworm protein", "Gradually weakens", "Good short-term", "Ligatures, oral surgery, ties", "Easy handling; MOST reactive; stimulates inflammation; NOT truly non-absorbable (loses strength over years)"],
["Steel Wire", "Non-absorbable, metallic", "Stainless steel", "Permanent", "HIGHEST tensile strength", "Sternal closure (cardiac surgery), orthopaedic", "Strongest suture material available"],
["Vicryl Rapide", "Absorbable, synthetic, braided", "PGA + PLA (faster absorbing)", "10–14 days", "Short lived", "Skin (paediatric), superficial wounds", "Alternative to prolene/nylon for skin — dissolves spontaneously"],
]
story.append(make_table(sut_headers, sut_rows,
[24*mm, 18*mm, 24*mm, 20*mm, 18*mm, 32*mm, 44*mm]))
story.append(note("PYQ: Strongest suture = Steel wire | Fastest absorbed = Plain catgut | MC used absorbable = Vicryl | MC used in vascular = Prolene"))
story.append(note("PYQ: Mattress suture — Horizontal mattress = EVERTING (used for skin edges) | Vertical mattress = EVERTING (also for skin) | Figure-of-8 = for fascial closure"))
# ─── FINAL PAGE ──────────────────────────────────────────────────────────────
story.append(PageBreak())
final_banner_data = [
[Paragraph("KEY MNEMONICS — SURGICAL QUICK RECALL", ParagraphStyle("fb", fontSize=13, textColor=WHITE, fontName="Helvetica-Bold", alignment=TA_CENTER, leading=16))],
]
fb_tbl = Table(final_banner_data, colWidths=[W])
fb_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK_BG),
("LINEBELOW", (0,0), (-1,-1), 2, ACCENT),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
]))
story.append(fb_tbl)
story.append(sp(2))
mnemonics = [
("GET SMASHED", "Gallstones | EtOH | Trauma | Steroids | Mumps | Autoimmune | Scorpion | Hyperlipidaemia/calcaemia | ERCP | Drugs → Causes of Pancreatitis"),
("ATLS ABCDE", "Airway (C-spine) | Breathing | Circulation | Disability (GCS/pupils) | Exposure — Primary Survey"),
("Beck's Triad", "Hypotension + Raised JVP + Muffled Heart Sounds → Cardiac Tamponade"),
("Charcot's Triad", "RUQ Pain + Fever + Jaundice → Cholangitis"),
("Reynold's Pentad", "Charcot's Triad + Shock + Mental confusion → Suppurative Cholangitis"),
("Courvoisier's Law", "Painless jaundice + Palpable GB (non-tender) = Malignancy (NOT gallstones — stones → fibrosed GB can't distend)"),
("Virchow's Triad", "Stasis + Endothelial Injury + Hypercoagulability → DVT"),
("Cushing's Reflex", "HTN + Bradycardia + Irregular Breathing → Raised ICP (LATE sign — impending herniation)"),
("Goodsall's Rule", "Posterior external fistula opening → curved track to posterior midline | Anterior → straight radial track to dentate"),
("MANTRELS Score", "Migration + Anorexia + Nausea + Tenderness + Rebound + Elevated temp + Leucocytosis + Shift to left → Appendicitis scoring"),
("Fontaine Classification (PAD)", "Stage I: Asymptomatic | II: Claudication | III: Rest pain | IV: Gangrene/tissue loss"),
("ABCDE Melanoma", "Asymmetry | Border irregularity | Colour variation | Diameter >6mm | Evolution → Malignant melanoma features"),
("Parks Classification (Fistula)", "Intersphincteric (MC) | Trans-sphincteric | Supra-sphincteric | Extra-sphincteric"),
("Rule of Nines (Burns)", "Head 9% | Each arm 9% | Anterior trunk 18% | Posterior trunk 18% | Each leg 18% | Perineum 1%"),
("6 Ps Acute Ischaemia", "Pain | Pallor | Pulselessness | Paraesthesia | Paralysis | Perishing cold → Limb ischaemia"),
]
mnem_data = [[Paragraph(m, ParagraphStyle("mk", fontSize=9, textColor=ACCENT, fontName="Helvetica-Bold", leading=11)),
Paragraph(d, ParagraphStyle("md", fontSize=8.5, textColor=HexColor("#1A1A2E"), fontName="Helvetica", leading=11))]
for m, d in mnemonics]
mnem_tbl = Table(
[[Paragraph("MNEMONIC", S["th"]), Paragraph("MEANING", S["th"])]] + mnem_data,
colWidths=[42*mm, W - 42*mm], repeatRows=1
)
mnem_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), DARK_BG),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("GRID", (0,0), (-1,-1), 0.4, HexColor("#BFBFBF")),
("LINEBELOW", (0,0), (-1,0), 1.5, ACCENT),
("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, ROW_ALT2]),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("VALIGN", (0,0), (-1,-1), "TOP"),
("FONTNAME", (0,1), (0,-1), "Helvetica-Bold"),
]))
story.append(mnem_tbl)
# ─── BUILD PDF ────────────────────────────────────────────────────────────────
def add_page_number(canvas, doc):
canvas.saveState()
canvas.setFont("Helvetica", 8)
canvas.setFillColor(SUBTLE)
canvas.drawString(MARGIN, 8*mm, "NEET PG Surgery — Differential Diagnosis Quick Reference | Orris AI")
canvas.drawRightString(PAGE_W - MARGIN, 8*mm, f"Page {doc.page}")
canvas.setStrokeColor(ACCENT)
canvas.setLineWidth(0.5)
canvas.line(MARGIN, 11*mm, PAGE_W - MARGIN, 11*mm)
canvas.restoreState()
doc.build(story, onFirstPage=add_page_number, onLaterPages=add_page_number)
print(f"SUCCESS: PDF created at {OUTPUT}")
print(f"Size: {os.path.getsize(OUTPUT)/1024:.1f} KB")
cd /home/daytona/workspace/neet-pg-surgery && python3 create_pdf.py
NEET PG Surgery DiffDx QuickRef
PDF Document · PDF
| # | Table | What it compares |
|---|---|---|
| 01 | Abdominal Pain | 10 causes (appendicitis, PUD, cholecystitis, AAA rupture, ectopic pregnancy, etc.) |
| 02 | Jaundice | Pre-hepatic / Hepatic / Post-hepatic + 6 causes of obstructive jaundice head-to-head |
| 03 | Intestinal Obstruction | SBO vs LBO vs Sigmoid Volvulus vs Paralytic Ileus |
| 04 | GI Bleeding | 5 UGIB causes + 6 LGIB causes with endoscopy findings and management |
| 05 | Breast Lump | 9 conditions (fibroadenoma, Ca breast, phyllodes, cyst, abscess, fat necrosis, etc.) |
| 06 | Thyroid Cancer | PTC vs FTC vs MTC vs Anaplastic vs Lymphoma — histology, spread, prognosis |
| 07 | Neck Swelling | 9 swellings — transillumination, movement, key features |
| 08 | Hernia Types | 12 hernias including Richter's, Maydl's, Littre's — full anatomical comparison |
| 09 | Anorectal Conditions | 8 conditions — pain, bleeding, relation to dentate line |
| 10 | Shock Types | 7 types — CO, SVR, PCWP, JVP, skin findings, treatment |
| 11 | Burns Depth | 1st through 4th degree + Parkland formula box with Rule of Nines |
| 12 | Head Injury | EDH vs ASDH vs Chronic SDH vs SAH vs DAI — CT findings, management |
| 13 | Leg Ulcers | Arterial vs Venous vs Neuropathic — site, pain, pulses, ABI, treatment |
| 14 | Salivary Gland Tumours | 5 tumours — pleomorphic adenoma, Warthin's, adenoid cystic, mucoepidermoid |
| 15 | Scrotal Swelling | 8 conditions including torsion, hydrocoele, varicocoele, Fournier's gangrene |
| 16 | Pancreatitis | Acute vs Chronic — causes, enzymes, complications, scoring |
| 17 | IBD | Crohn's vs UC — 13 distinguishing features (location, histology, cancer risk, serology) |
| 18 | Scar | Hypertrophic scar vs Keloid — all differentiating features |
| 19 | Oral Premalignant | Leukoplakia vs Erythroplakia vs OSMF vs Lichen Planus — malignant potential |
| 20 | Suture Types | 10 sutures — absorption time, tensile strength, clinical uses |