detailed slide show on benign prostatic hypertrophy from smith and tangos and campbell
benign prostatic hyperplasia pathology anatomy zones
TURP transurethral resection prostate surgical technique
mkdir -p /home/daytona/workspace/bph-presentation && ls /home/daytona/workspace/…
~/bph-presentation/create_bph.js
const pptxgen = require("pptxgenjs");
const { execSync } = require("child_process");
// ─── Fetch images as base64 ───────────────────────────────────────────────────
const imageUrls = [
"https://cdn.orris.care/cdss_images/Pathology_1760054422051_bdf8da5f-f6f4-414c-8056-66bd451bf4de.jpg", // gross BPH pathology - median lobe
"https://cdn.orris.care/cdss_images/pmc_clinical_VQA_bc45e5331ea4d95bf8c24ee92fdb6ca391dd8f1c31f0aeae5a12e6c5be48a8d3.jpg", // MRI T2 transition zone
"https://cdn.orris.care/cdss_images/pmc_clinical_VQA_c78264686386afece1f827a6e47c0faa5af3c485b3feb4297d5e4d020b6f7ab9.jpg", // MRI comparison normal vs BPH vs PCa
"https://cdn.orris.care/cdss_images/pmc_clinical_VQA_f238f3fce5f523afc1a5273b859cc70d35829937a85455f334c4c3382f44fa99.jpg", // TURP illustration
"https://cdn.orris.care/cdss_images/224c06eb80e45cfe4cbcf1aaa5cf4ae4d8cdf3eafc7b7dd771d7a12b5a5709b3.png", // PSA vs prostate volume chart
];
let imgs = [];
try {
const raw = execSync(
`node /home/daytona/skills/shared/scripts/fetch_images.js ` +
imageUrls.map(u => `"${u}"`).join(" "),
{ maxBuffer: 50 * 1024 * 1024 }
).toString();
imgs = JSON.parse(raw);
} catch (e) {
console.error("Image fetch failed:", e.message);
imgs = imageUrls.map(() => ({ base64: null, error: "fetch failed" }));
}
// ─── Color palette ────────────────────────────────────────────────────────────
const C = {
navy: "0D2B45", // dominant dark
teal: "1B6CA8", // supporting mid-blue
sky: "4DB6E3", // accent bright
white: "FFFFFF",
offwhite:"F2F7FA",
text: "1C2B3A",
muted: "8095A8",
yellow: "F5A623",
red: "D0021B",
green: "27AE60",
};
// ─── Presentation setup ───────────────────────────────────────────────────────
let pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Benign Prostatic Hyperplasia";
pres.subject = "Urology";
pres.author = "Smith & Tanagho / Campbell-Walsh-Wein";
// ─── Helper: dark header bar ──────────────────────────────────────────────────
function headerBar(slide, title, subtitle) {
slide.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 1.05, fill: { color: C.navy } });
slide.addShape(pres.shapes.RECTANGLE, { x: 0, y: 1.05, w: 10, h: 0.06, fill: { color: C.sky } });
slide.addText(title, {
x: 0.35, y: 0.0, w: 9.3, h: 0.75,
fontSize: 24, bold: true, color: C.white, valign: "middle", margin: 0,
});
if (subtitle) {
slide.addText(subtitle, {
x: 0.35, y: 0.72, w: 9.3, h: 0.38,
fontSize: 12, color: C.sky, valign: "top", margin: 0, italic: true,
});
}
}
// ─── Helper: footer ───────────────────────────────────────────────────────────
function footer(slide, source) {
slide.addShape(pres.shapes.RECTANGLE, { x: 0, y: 5.42, w: 10, h: 0.2, fill: { color: C.navy } });
slide.addText(source || "Smith & Tanagho's General Urology, 19e | Campbell-Walsh-Wein Urology", {
x: 0.2, y: 5.42, w: 9.6, h: 0.2,
fontSize: 7, color: C.muted, valign: "middle", margin: 0,
});
}
// ─── Helper: bullet list ──────────────────────────────────────────────────────
function makeBullets(items, opts = {}) {
return items.map((item, i) => ({
text: item,
options: {
bullet: { code: "2022" },
fontSize: opts.fontSize || 16,
color: opts.color || C.text,
paraSpaceBefore: i === 0 ? 0 : (opts.spacing || 6),
breakLine: i < items.length - 1,
},
}));
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 1 – TITLE
// ═══════════════════════════════════════════════════════════════════════════════
{
let s = pres.addSlide();
// full-slide dark gradient-like background
s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.navy } });
s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 3.8, w: 10, h: 1.825, fill: { color: "122036" } });
// Teal accent bar
s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 2.4, w: 10, h: 0.08, fill: { color: C.sky } });
s.addText("BENIGN PROSTATIC\nHYPERPLASIA", {
x: 0.6, y: 0.6, w: 8.8, h: 1.9,
fontSize: 44, bold: true, color: C.white, align: "center", valign: "middle",
charSpacing: 2,
});
s.addText("BPH — From Pathophysiology to Management", {
x: 0.6, y: 2.55, w: 8.8, h: 0.55,
fontSize: 18, color: C.sky, align: "center", italic: true, valign: "middle",
});
s.addText("Sources:", {
x: 0.6, y: 3.2, w: 8.8, h: 0.35,
fontSize: 11, color: C.muted, align: "center", bold: true,
});
s.addText("Smith & Tanagho's General Urology, 19th Edition\nCampbell-Walsh-Wein Urology, 12th Edition", {
x: 0.6, y: 3.5, w: 8.8, h: 0.8,
fontSize: 13, color: "A8C8E0", align: "center",
});
s.addText("UROLOGY", {
x: 0.6, y: 5.1, w: 8.8, h: 0.35,
fontSize: 9, color: C.muted, align: "center", charSpacing: 8,
});
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 2 – OVERVIEW / OUTLINE
// ═══════════════════════════════════════════════════════════════════════════════
{
let s = pres.addSlide();
s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.offwhite } });
headerBar(s, "Lecture Overview", "What we will cover");
footer(s);
const topics = [
["01", "Definition & Epidemiology", "Prevalence, risk factors, demographics"],
["02", "Anatomy & Zones", "McNeal's zonal anatomy, transition zone"],
["03", "Etiology & Pathogenesis", "Androgens, growth factors, stem cells"],
["04", "Pathology & Pathophysiology", "Mechanical vs dynamic obstruction, bladder changes"],
["05", "Clinical Presentation", "Obstructive & irritative symptoms, IPSS"],
["06", "Investigations", "DRE, PSA, urodynamics, imaging"],
["07", "Medical Management", "α-blockers, 5α-RI, PDE5i, combination therapy"],
["08", "Surgical Management", "TURP, HoLEP, laser, minimally invasive procedures"],
["09", "Complications", "AUR, bladder decompensation, hematuria, stones"],
];
topics.forEach(([num, title, sub], i) => {
const col = i < 5 ? 0 : 1;
const row = i < 5 ? i : i - 5;
const xOff = col === 0 ? 0.3 : 5.2;
const yOff = 1.3 + row * 0.82;
s.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x: xOff, y: yOff, w: 4.6, h: 0.66,
fill: { color: C.white },
line: { color: C.sky, pt: 1.5 },
shadow: { type: "outer", color: "000000", blur: 4, offset: 1, angle: 135, opacity: 0.08 },
rectRadius: 0.08,
});
s.addShape(pres.shapes.RECTANGLE, { x: xOff, y: yOff, w: 0.38, h: 0.66, fill: { color: C.teal }, rectRadius: 0 });
s.addText(num, { x: xOff, y: yOff, w: 0.38, h: 0.66, fontSize: 10, bold: true, color: C.white, align: "center", valign: "middle", margin: 0 });
s.addText(title, { x: xOff + 0.44, y: yOff + 0.04, w: 4.1, h: 0.3, fontSize: 12, bold: true, color: C.navy, margin: 0 });
s.addText(sub, { x: xOff + 0.44, y: yOff + 0.32, w: 4.1, h: 0.28, fontSize: 9.5, color: C.muted, margin: 0 });
});
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 3 – EPIDEMIOLOGY
// ═══════════════════════════════════════════════════════════════════════════════
{
let s = pres.addSlide();
s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.offwhite } });
headerBar(s, "Epidemiology", "Smith & Tanagho, 19e — Chapter 38");
footer(s);
// Big stat cards
const stats = [
{ val: "20%", label: "Men 41–50 yrs\nHistologic BPH" },
{ val: "50%", label: "Men 51–60 yrs\nHistologic BPH" },
{ val: "90%", label: "Men > 80 yrs\nHistologic BPH" },
{ val: "25%", label: "Age 55 yrs\nObstructive symptoms" },
{ val: "50%", label: "Age 75 yrs\nDecreased stream" },
];
stats.forEach((st, i) => {
const x = 0.3 + i * 1.88;
s.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x: x, y: 1.25, w: 1.72, h: 1.6,
fill: { color: C.navy }, rectRadius: 0.1,
});
s.addText(st.val, {
x: x, y: 1.3, w: 1.72, h: 0.8,
fontSize: 28, bold: true, color: C.sky, align: "center", valign: "middle", margin: 0,
});
s.addText(st.label, {
x: x, y: 2.1, w: 1.72, h: 0.65,
fontSize: 9.5, color: C.white, align: "center", valign: "top", margin: 0,
});
});
s.addShape(pres.shapes.RECTANGLE, { x: 0.3, y: 3.05, w: 9.4, h: 0.04, fill: { color: C.sky } });
s.addText("Key Risk Factors", { x: 0.35, y: 3.15, w: 9.3, h: 0.32, fontSize: 14, bold: true, color: C.navy });
s.addText(makeBullets([
"Age — most important, non-modifiable risk factor",
"Hereditary: ~50% of men <60 undergoing BPH surgery have heritable form; autosomal dominant trait; 4× increased relative risk in first-degree male relatives",
"Racial differences reported; androgen and estrogen levels implicated",
"Functional testes required — castration results in regression of established BPH",
], { fontSize: 13 }), { x: 0.35, y: 3.45, w: 9.3, h: 1.8, valign: "top" });
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 4 – ANATOMY & ZONES
// ═══════════════════════════════════════════════════════════════════════════════
{
let s = pres.addSlide();
s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.offwhite } });
headerBar(s, "Prostatic Zonal Anatomy", "McNeal's classification — BPH arises in the Transition Zone");
footer(s);
// Left: text
s.addText("McNeal's Zones", { x: 0.35, y: 1.2, w: 5.0, h: 0.38, fontSize: 14, bold: true, color: C.navy });
const zones = [
{ z: "Transition Zone (TZ)", pct: "5–10%", desc: "Periurethral; site of BPH", col: C.teal },
{ z: "Central Zone (CZ)", pct: "25%", desc: "Surrounds ejaculatory ducts; rarely involved in BPH", col: C.sky },
{ z: "Peripheral Zone (PZ)", pct: "70%", desc: "Bulk of posterior prostate; site of most prostate cancers", col: "27AE60" },
{ z: "Anterior Fibromuscular Stroma", pct: "—", desc: "No glandular elements; smooth muscle & fibrous tissue", col: C.yellow },
];
zones.forEach((z, i) => {
const y = 1.65 + i * 0.83;
s.addShape(pres.shapes.RECTANGLE, { x: 0.35, y: y, w: 0.22, h: 0.6, fill: { color: z.col } });
s.addText(z.z, { x: 0.65, y: y + 0.03, w: 4.5, h: 0.28, fontSize: 12, bold: true, color: C.navy, margin: 0 });
s.addText(`${z.pct} of gland — ${z.desc}`, { x: 0.65, y: y + 0.3, w: 4.5, h: 0.28, fontSize: 10, color: C.muted, margin: 0 });
});
s.addText("BPH is a hyperplastic process originating in the periurethral transition zone.\nMicroscopy shows nodular growth with variable stroma (smooth muscle, collagen) and epithelium.", {
x: 0.35, y: 5.0, w: 5.0, h: 0.5,
fontSize: 9.5, color: C.muted, italic: true,
});
// Right: MRI image
if (imgs[1] && !imgs[1].error) {
s.addImage({ data: imgs[1].base64, x: 5.6, y: 1.2, w: 4.0, h: 3.8, altText: "T2 MRI BPH transition zone" });
s.addText("T2 MRI: TZ expansion compresses peripheral zone (arrows)", {
x: 5.6, y: 5.0, w: 4.0, h: 0.45,
fontSize: 8.5, color: C.muted, italic: true, align: "center",
});
}
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 5 – ETIOLOGY & PATHOGENESIS
// ═══════════════════════════════════════════════════════════════════════════════
{
let s = pres.addSlide();
s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.offwhite } });
headerBar(s, "Etiology & Pathogenesis", "Campbell-Walsh-Wein — Chapter 144 & Smith & Tanagho Ch. 38");
footer(s);
// Central circle concept
s.addShape(pres.shapes.OVAL, { x: 3.9, y: 2.0, w: 2.2, h: 1.1, fill: { color: C.navy } });
s.addText("BPH\nPathogenesis", { x: 3.9, y: 2.0, w: 2.2, h: 1.1, fontSize: 11, bold: true, color: C.white, align: "center", valign: "middle" });
// Spokes
const factors = [
{ label: "Androgens\n(DHT via 5α-reductase)", x: 0.15, y: 1.55, w: 2.3, h: 0.75 },
{ label: "Estrogens\n(induction of AR, aging)", x: 3.6, y: 0.8, w: 2.8, h: 0.75 },
{ label: "Stromal-Epithelial\nInteractions", x: 7.4, y: 1.55, w: 2.4, h: 0.75 },
{ label: "Growth Factors\n(EGF, FGF, IGF)", x: 7.4, y: 3.0, w: 2.4, h: 0.75 },
{ label: "Impaired Apoptosis\n(bcl-2 ↑)", x: 3.6, y: 3.95, w: 2.8, h: 0.75 },
{ label: "α-Adrenergic\nNeurotransmitters", x: 0.15, y: 3.0, w: 2.3, h: 0.75 },
];
factors.forEach((f) => {
s.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x: f.x, y: f.y, w: f.w, h: f.h,
fill: { color: C.teal }, rectRadius: 0.08,
});
s.addText(f.label, {
x: f.x, y: f.y, w: f.w, h: f.h,
fontSize: 10.5, bold: true, color: C.white, align: "center", valign: "middle",
});
});
s.addText("Key concept: BPH results from both ↑ cell proliferation AND ↓ programmed cell death (apoptosis)\nCastration → regression of BPH; DHT is the key intracellular androgen", {
x: 0.3, y: 4.9, w: 9.4, h: 0.55,
fontSize: 10, color: C.navy, italic: true, align: "center",
});
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 6 – PATHOLOGY (Gross + Histology)
// ═══════════════════════════════════════════════════════════════════════════════
{
let s = pres.addSlide();
s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.offwhite } });
headerBar(s, "Pathology of BPH", "Gross & Microscopic Features");
footer(s);
// Left: gross image
if (imgs[0] && !imgs[0].error) {
s.addImage({ data: imgs[0].base64, x: 0.3, y: 1.2, w: 4.0, h: 3.5, altText: "Gross BPH pathology median lobe" });
s.addText("Gross autopsy specimen: BPH with median lobe enlargement projecting into bladder neck", {
x: 0.3, y: 4.72, w: 4.0, h: 0.55,
fontSize: 8.5, color: C.muted, italic: true, align: "center",
});
}
// Right: key points
s.addText("Gross Pathology", { x: 4.6, y: 1.2, w: 5.1, h: 0.35, fontSize: 14, bold: true, color: C.navy });
s.addText(makeBullets([
"Develops in the transition zone (periurethral)",
"Nodular enlargement — tan/brown, firm nodules",
"Median lobe protrudes into bladder neck → ball-valve obstruction",
"Prostate can weigh from normal ~20 g up to >200 g in severe BPH",
], { fontSize: 12 }), { x: 4.6, y: 1.55, w: 5.1, h: 1.6, valign: "top" });
s.addShape(pres.shapes.RECTANGLE, { x: 4.6, y: 3.2, w: 5.1, h: 0.04, fill: { color: C.sky } });
s.addText("Microscopic Pathology", { x: 4.6, y: 3.3, w: 5.1, h: 0.35, fontSize: 14, bold: true, color: C.navy });
s.addText(makeBullets([
"Hyperplasia (↑ cell number), not hypertrophy",
"Variable proportions: stroma (smooth muscle + collagen) vs epithelium",
"Smooth muscle-dominant BPH → responds to α-blockers",
"Epithelium-dominant BPH → responds to 5α-reductase inhibitors",
"Collagen-dominant BPH → poor response to medical therapy",
], { fontSize: 11.5 }), { x: 4.6, y: 3.65, w: 5.1, h: 1.8, valign: "top" });
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 7 – PATHOPHYSIOLOGY
// ═══════════════════════════════════════════════════════════════════════════════
{
let s = pres.addSlide();
s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.offwhite } });
headerBar(s, "Pathophysiology", "Mechanical vs Dynamic Obstruction — Bladder Response");
footer(s);
// Column 1
s.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 0.3, y: 1.25, w: 2.9, h: 1.9, fill: { color: C.navy }, rectRadius: 0.1 });
s.addText("MECHANICAL\nOBSTRUCTION", { x: 0.3, y: 1.25, w: 2.9, h: 0.55, fontSize: 12, bold: true, color: C.sky, align: "center", valign: "middle" });
s.addText("Enlarged prostate intrudes into urethra/bladder neck → ↑ outlet resistance\nMedian lobe enlargement not palpable on DRE (poor size-symptom correlation)", {
x: 0.4, y: 1.78, w: 2.7, h: 1.3, fontSize: 10, color: C.white, valign: "top",
});
// Column 2
s.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 3.55, y: 1.25, w: 2.9, h: 1.9, fill: { color: C.teal }, rectRadius: 0.1 });
s.addText("DYNAMIC\nOBSTRUCTION", { x: 3.55, y: 1.25, w: 2.9, h: 0.55, fontSize: 12, bold: true, color: C.white, align: "center", valign: "middle" });
s.addText("Prostatic stroma rich in α-adrenergic receptors → smooth muscle tone\nα-blockade decreases tone → reduces outlet resistance\nExplains variable, fluctuating symptoms", {
x: 3.65, y: 1.78, w: 2.7, h: 1.3, fontSize: 10, color: C.white, valign: "top",
});
// Column 3
s.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 6.8, y: 1.25, w: 2.9, h: 1.9, fill: { color: "C0392B" }, rectRadius: 0.1 });
s.addText("BLADDER\nRESPONSE", { x: 6.8, y: 1.25, w: 2.9, h: 0.55, fontSize: 12, bold: true, color: C.white, align: "center", valign: "middle" });
s.addText("Detrusor hypertrophy & hyperplasia\nCollagen deposition → ↓ compliance\nDetrusor instability (LUTS)\nTrabeculation → sacculation → diverticula", {
x: 6.9, y: 1.78, w: 2.7, h: 1.3, fontSize: 10, color: C.white, valign: "top",
});
// Arrow flow
s.addShape(pres.shapes.RIGHT_ARROW, { x: 3.2, y: 1.85, w: 0.35, h: 0.5, fill: { color: C.yellow } });
s.addShape(pres.shapes.RIGHT_ARROW, { x: 6.45, y: 1.85, w: 0.35, h: 0.5, fill: { color: C.yellow } });
// Symptoms breakdown
s.addShape(pres.shapes.RECTANGLE, { x: 0.3, y: 3.3, w: 9.4, h: 0.04, fill: { color: C.sky } });
s.addText("Resultant Symptoms", { x: 0.3, y: 3.4, w: 9.4, h: 0.32, fontSize: 13, bold: true, color: C.navy });
s.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 0.3, y: 3.8, w: 4.5, h: 1.6, fill: { color: C.white }, line: { color: C.teal, pt: 1.5 }, rectRadius: 0.08 });
s.addText("OBSTRUCTIVE (Voiding)", { x: 0.4, y: 3.83, w: 4.3, h: 0.3, fontSize: 11, bold: true, color: C.teal });
s.addText("Hesitancy · Decreased force/caliber\nSense of incomplete emptying · Double voiding\nStraining to urinate · Post-void dribbling", {
x: 0.4, y: 4.12, w: 4.3, h: 1.2, fontSize: 11, color: C.text,
});
s.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 5.2, y: 3.8, w: 4.5, h: 1.6, fill: { color: C.white }, line: { color: "C0392B", pt: 1.5 }, rectRadius: 0.08 });
s.addText("IRRITATIVE (Storage)", { x: 5.3, y: 3.83, w: 4.3, h: 0.3, fontSize: 11, bold: true, color: "C0392B" });
s.addText("Urgency · Frequency · Nocturia\nUrge incontinence (detrusor instability)\nOverflow incontinence (retention)", {
x: 5.3, y: 4.12, w: 4.3, h: 1.2, fontSize: 11, color: C.text,
});
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 8 – CLINICAL FINDINGS & IPSS
// ═══════════════════════════════════════════════════════════════════════════════
{
let s = pres.addSlide();
s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.offwhite } });
headerBar(s, "Clinical Findings & IPSS", "International Prostate Symptom Score — Gold Standard Assessment");
footer(s);
// IPSS card
s.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 0.3, y: 1.2, w: 5.4, h: 4.2, fill: { color: C.white }, line: { color: C.sky, pt: 2 }, rectRadius: 0.1,
shadow: { type: "outer", color: "000000", blur: 6, offset: 2, angle: 135, opacity: 0.1 } });
s.addShape(pres.shapes.RECTANGLE, { x: 0.3, y: 1.2, w: 5.4, h: 0.5, fill: { color: C.teal }, rectRadius: 0 });
s.addText("INTERNATIONAL PROSTATE SYMPTOM SCORE (IPSS)", {
x: 0.35, y: 1.2, w: 5.3, h: 0.5, fontSize: 10, bold: true, color: C.white, align: "center", valign: "middle",
});
const ipssRows = [
["7 Questions", "Obstructive + irritative; scored 0–5 each"],
["Score 0–7", "MILD symptoms"],
["Score 8–19", "MODERATE symptoms"],
["Score 20–35", "SEVERE symptoms"],
["+ QoL question", "Bother score (0 = delighted, 6 = terrible)"],
["Reliability", "Extensively validated, >100 languages"],
];
ipssRows.forEach(([k, v], i) => {
const y = 1.82 + i * 0.58;
const bg = i % 2 === 0 ? C.offwhite : C.white;
s.addShape(pres.shapes.RECTANGLE, { x: 0.35, y: y, w: 5.3, h: 0.55, fill: { color: bg } });
s.addText(k, { x: 0.4, y: y + 0.1, w: 1.8, h: 0.35, fontSize: 11, bold: true, color: C.navy, margin: 0 });
s.addText(v, { x: 2.2, y: y + 0.1, w: 3.3, h: 0.35, fontSize: 11, color: C.text, margin: 0 });
});
// Right column: clinical exam
s.addText("Clinical Examination", { x: 6.0, y: 1.2, w: 3.7, h: 0.35, fontSize: 14, bold: true, color: C.navy });
s.addText(makeBullets([
"Digital Rectal Exam (DRE): size, consistency, nodules — poor correlation with symptom severity",
"Focused neurologic exam: exclude neurogenic causes",
"Urinalysis: exclude infection, hematuria, glycosuria",
"Serum PSA: prostate volume predictor (log-linear), cancer screening, guides 5α-RI response",
"Serum creatinine: upper tract obstruction",
"Post-void residual (PVR) by ultrasound",
"Uroflowmetry: Qmax <10 mL/s suggests obstruction",
], { fontSize: 11 }), { x: 6.0, y: 1.65, w: 3.7, h: 3.8, valign: "top" });
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 9 – PSA & IMAGING
// ═══════════════════════════════════════════════════════════════════════════════
{
let s = pres.addSlide();
s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.offwhite } });
headerBar(s, "PSA, Imaging & Urodynamics", "Investigations in BPH — Campbell-Walsh Ch.144");
footer(s, "Campbell-Walsh-Wein Urology 12e — Chapter 144");
// PSA chart
if (imgs[4] && !imgs[4].error) {
s.addImage({ data: imgs[4].base64, x: 0.3, y: 1.2, w: 4.5, h: 3.2, altText: "PSA vs prostate volume" });
s.addText("PSA vs. Prostate Volume (log-linear relationship stratified by age)", {
x: 0.3, y: 4.4, w: 4.5, h: 0.45,
fontSize: 8.5, color: C.muted, italic: true, align: "center",
});
}
// MRI comparison image
if (imgs[2] && !imgs[2].error) {
s.addImage({ data: imgs[2].base64, x: 5.1, y: 1.2, w: 4.6, h: 2.6, altText: "MRI comparison normal BPH PCa" });
s.addText("T2-MRI comparison: Normal vs BPH (TZ expansion) vs Prostate Cancer (PZ lesion)", {
x: 5.1, y: 3.82, w: 4.6, h: 0.45,
fontSize: 8.5, color: C.muted, italic: true, align: "center",
});
}
s.addShape(pres.shapes.RECTANGLE, { x: 5.1, y: 4.35, w: 4.6, h: 0.04, fill: { color: C.sky } });
s.addText(makeBullets([
"Transrectal ultrasound (TRUS): prostate volume estimation",
"MRI: zonal anatomy, cancer staging, surgical planning",
"Urodynamics: pressure-flow studies differentiate BOO from detrusor underactivity",
"Cystoscopy: evaluate for bladder stones, diverticula, stricture",
], { fontSize: 10.5 }), { x: 5.1, y: 4.42, w: 4.6, h: 1.1, valign: "top" });
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 10 – MEDICAL MANAGEMENT (α-BLOCKERS & 5α-RI)
// ═══════════════════════════════════════════════════════════════════════════════
{
let s = pres.addSlide();
s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.offwhite } });
headerBar(s, "Medical Management — Alpha-Blockers & 5α-Reductase Inhibitors", "Smith & Tanagho Ch.38 · Campbell-Walsh Ch.145");
footer(s);
// Table: α-blockers
s.addShape(pres.shapes.RECTANGLE, { x: 0.3, y: 1.2, w: 9.4, h: 0.38, fill: { color: C.teal } });
s.addText("α₁-ADRENERGIC BLOCKERS — Mechanism: block prostatic/bladder neck α₁-receptors → ↓ smooth muscle tone → ↓ dynamic obstruction", {
x: 0.4, y: 1.22, w: 9.2, h: 0.34, fontSize: 10.5, bold: true, color: C.white, valign: "middle", margin: 0,
});
const abRows = [
["Drug", "Class", "Dose", "Notes"],
["Tamsulosin", "α₁A-selective", "0.4–0.8 mg/day", "Fewer CV effects; retrograde ejaculation; floppy iris"],
["Silodosin", "α₁A-selective", "8 mg/day", "Most uro-selective; high rates ejaculatory dysfunction"],
["Alfuzosin", "α₁-selective", "10 mg/day", "Extended release; minimal ejaculatory side effects"],
["Terazosin", "α₁, long-acting","5–10 mg/day", "Dose titration needed; useful if concurrent HTN"],
["Doxazosin", "α₁, long-acting","4–8 mg/day", "Dose titration; CV side effects (dizziness, syncope)"],
];
abRows.forEach((row, i) => {
const y = 1.6 + i * 0.37;
const bg = i === 0 ? C.navy : (i % 2 === 0 ? C.white : C.offwhite);
s.addShape(pres.shapes.RECTANGLE, { x: 0.3, y: y, w: 9.4, h: 0.35, fill: { color: bg } });
const cols = [1.0, 2.0, 1.7, 4.7];
const xs = [0.32, 1.34, 3.36, 5.08];
row.forEach((cell, ci) => {
s.addText(cell, {
x: xs[ci], y: y + 0.04, w: cols[ci], h: 0.28,
fontSize: i === 0 ? 10 : 9.5,
bold: i === 0,
color: i === 0 ? C.sky : C.text,
margin: 0,
});
});
});
// 5α-RI section
s.addShape(pres.shapes.RECTANGLE, { x: 0.3, y: 3.65, w: 9.4, h: 0.38, fill: { color: C.navy } });
s.addText("5α-REDUCTASE INHIBITORS — Block T→DHT conversion → ↓ epithelial component → prostate shrinks ~30% in 6 months", {
x: 0.4, y: 3.67, w: 9.2, h: 0.34, fontSize: 10.5, bold: true, color: C.sky, valign: "middle", margin: 0,
});
const fivRows = [
["Finasteride 5 mg/day", "Type II 5α-RI", "PSA ↓ 50%; efficacy only if prostate >40 cm³; decreased libido, ED, ↓ ejaculate"],
["Dutasteride 0.5 mg/day","Types I+II 5α-RI", "Dual inhibition; similar efficacy; AUR ↓ 57%, surgery ↓ 48% in COMBAT trial"],
];
fivRows.forEach((row, i) => {
const y = 4.1 + i * 0.6;
s.addShape(pres.shapes.RECTANGLE, { x: 0.3, y: y, w: 9.4, h: 0.55, fill: { color: i === 0 ? C.offwhite : C.white } });
s.addText(row[0], { x: 0.35, y: y + 0.08, w: 2.2, h: 0.4, fontSize: 10.5, bold: true, color: C.navy, margin: 0 });
s.addText(row[1], { x: 2.55, y: y + 0.08, w: 1.6, h: 0.4, fontSize: 10, color: C.teal, margin: 0 });
s.addText(row[2], { x: 4.15, y: y + 0.08, w: 5.5, h: 0.4, fontSize: 10, color: C.text, margin: 0 });
});
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 11 – COMBINATION & OTHER MEDICAL THERAPIES
// ═══════════════════════════════════════════════════════════════════════════════
{
let s = pres.addSlide();
s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.offwhite } });
headerBar(s, "Combination & Additional Medical Therapies", "Campbell-Walsh Ch.145 — Evidence-Based Combinations");
footer(s, "Campbell-Walsh-Wein Urology 12e — Chapter 145");
const therapies = [
{
title: "α-Blocker + 5α-RI (CombAT/MTOPS)",
color: C.teal,
points: [
"CombAT trial (dutasteride + tamsulosin): 32% ↓ AUR, 21% ↓ surgical intervention vs monotherapy",
"MTOPS (doxazosin + finasteride): 67% ↓ clinical progression vs placebo",
"Combination superior for large prostates (>30–40 g) with severe symptoms",
"Best suited for patients with BOTH storage and voiding LUTS",
]
},
{
title: "Antimuscarinics (Overactive Bladder Component)",
color: C.navy,
points: [
"Oxybutynin, tolterodine, solifenacin — target M2/M3 receptors → ↓ detrusor contractions",
"Use in men with predominant storage LUTS (urgency, frequency)",
"Risk of urinary retention; caution if PVR >200 mL or Qmax <10 mL/s",
"Combination with α-blockers reduces IPSS storage sub-scores",
]
},
{
title: "PDE5 Inhibitors (Tadalafil 5 mg/day)",
color: "27AE60",
points: [
"FDA-approved for LUTS/BPH; approved also for concurrent ED",
"↑ cGMP → smooth muscle relaxation in prostate, bladder, urethra",
"Improves IPSS ~3–5 points; does NOT improve urinary flow rate significantly",
"Preferred in men with concurrent erectile dysfunction",
]
},
];
therapies.forEach((th, i) => {
const y = 1.22 + i * 1.4;
s.addShape(pres.shapes.RECTANGLE, { x: 0.3, y: y, w: 9.4, h: 0.35, fill: { color: th.color } });
s.addText(th.title, { x: 0.4, y: y, w: 9.2, h: 0.35, fontSize: 11.5, bold: true, color: C.white, valign: "middle", margin: 0 });
s.addText(makeBullets(th.points, { fontSize: 11 }), {
x: 0.35, y: y + 0.38, w: 9.3, h: 0.96, valign: "top",
});
});
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 12 – SURGICAL MANAGEMENT
// ═══════════════════════════════════════════════════════════════════════════════
{
let s = pres.addSlide();
s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.offwhite } });
headerBar(s, "Surgical Management of BPH", "Campbell-Walsh Ch.144/145 · Smith & Tanagho Ch.38");
footer(s);
// TURP image
if (imgs[3] && !imgs[3].error) {
s.addImage({ data: imgs[3].base64, x: 0.3, y: 1.22, w: 3.5, h: 2.8, altText: "TURP resectoscope diagram" });
s.addText("TURP: resectoscope removes obstructing tissue from bladder neck to verumontanum", {
x: 0.3, y: 4.05, w: 3.5, h: 0.45,
fontSize: 8.5, color: C.muted, italic: true, align: "center",
});
}
// Indications
s.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 0.3, y: 4.55, w: 3.5, h: 0.8, fill: { color: C.navy }, rectRadius: 0.08 });
s.addText("Absolute Indications", { x: 0.4, y: 4.55, w: 3.3, h: 0.28, fontSize: 10, bold: true, color: C.sky, margin: 0 });
s.addText("AUR refractory to TWOC · Recurrent UTI · Bladder stones · Renal insufficiency from obstruction · Recurrent gross hematuria", {
x: 0.4, y: 4.82, w: 3.3, h: 0.5, fontSize: 9, color: C.white,
});
// Procedures table
const procs = [
{ name: "TURP (gold standard)", detail: "Monopolar or bipolar; resects to surgical capsule; best studied", note: "TURP syndrome (monopolar); 30-day mortality 0.77% (1990)" },
{ name: "HoLEP", detail: "Holmium laser enucleation; equivalent outcomes; for any prostate size", note: "Steep learning curve; low bleeding; catheter time ↓" },
{ name: "GreenLight PVP", detail: "KTP/LBO laser; outpatient; for anticoagulated/high-risk patients", note: "Mixed outcomes vs TURP; more expensive" },
{ name: "Simple Open/Robotic\nProstatectomy", detail: "For large glands >80–100 g; suprapubic (transvesical) or retropubic", note: "Best for bladder pathology concomitant" },
{ name: "UroLift", detail: "Implants compress lateral lobes; no thermal injury; day procedure", note: "Contraindicated: median lobe, prostate >100 g" },
{ name: "Rezum (Water Vapor)", detail: "Steam injected into TZ → convective necrosis; preserves ejaculation", note: "Symptom improvement over 3 months; can treat median lobe" },
{ name: "TUMT", detail: "Transurethral microwave thermotherapy; office-based; >45°C required", note: "Variable results; results difficult to predict" },
];
procs.forEach((p, i) => {
const y = 1.22 + i * 0.57;
const bg = i % 2 === 0 ? C.white : C.offwhite;
s.addShape(pres.shapes.RECTANGLE, { x: 4.0, y: y, w: 5.7, h: 0.54, fill: { color: bg } });
s.addText(p.name, { x: 4.05, y: y + 0.04, w: 1.6, h: 0.25, fontSize: 10, bold: true, color: C.navy, margin: 0 });
s.addText(p.detail, { x: 4.05, y: y + 0.28, w: 1.6, h: 0.22, fontSize: 8.5, color: C.muted, margin: 0 });
s.addText(p.note, { x: 5.68, y: y + 0.08, w: 4.0, h: 0.38, fontSize: 9.5, color: C.text, margin: 0 });
});
s.addShape(pres.shapes.RECTANGLE, { x: 4.0, y: 1.2, w: 5.7, h: 0.34, fill: { color: C.navy } });
s.addText("Procedure", { x: 4.05, y: 1.22, w: 1.65, h: 0.3, fontSize: 10, bold: true, color: C.sky, margin: 0 });
s.addText("Details / Evidence / Notes", { x: 5.68, y: 1.22, w: 4.0, h: 0.3, fontSize: 10, bold: true, color: C.sky, margin: 0 });
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 13 – COMPLICATIONS
// ═══════════════════════════════════════════════════════════════════════════════
{
let s = pres.addSlide();
s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.offwhite } });
headerBar(s, "Complications of BPH", "Campbell-Walsh-Wein — Chapter 144 (Complications Section)");
footer(s, "Campbell-Walsh-Wein Urology 12e — Chapter 144");
const comps = [
{ icon: "⚠", title: "Acute Urinary Retention (AUR)", col: "C0392B",
points: ["Incidence: 5–30% of indications for surgery", "TWOC (trial without catheter) success ~50–60%", "Strong indication for 5α-RI to prevent recurrence", "Risk factors: large prostate, high PSA, low Qmax, severe IPSS"] },
{ icon: "🔵", title: "Bladder Decompensation", col: C.teal,
points: ["Trabeculation → sacculation → diverticula", "↑ PVR → recurrent UTI", "Risk of irreversible detrusor damage if untreated", "Dense connective tissue deposition; fibrosis"] },
{ icon: "🔴", title: "Upper Tract Complications", col: C.navy,
points: ["Hydronephrosis, hydroureter from back-pressure", "Renal insufficiency (serum creatinine ↑)", "Prevalence of hydronephrosis 7.6–14.8% in BPH clinic patients", "Renal failure: absolute indication for surgery"] },
{ icon: "🟡", title: "Other Complications", col: "E67E22",
points: ["Bladder stones: 8× more prevalent vs controls", "Recurrent UTI from incomplete bladder emptying", "Hematuria — exclude cancer first", "Urinary incontinence (overflow or urge types)"] },
];
comps.forEach((c, i) => {
const col = i < 2 ? 0 : 1;
const row = i < 2 ? i : i - 2;
const x = col === 0 ? 0.3 : 5.2;
const y = 1.2 + row * 2.15;
s.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x: x, y: y, w: 4.6, h: 2.0,
fill: { color: C.white }, line: { color: c.col, pt: 2 }, rectRadius: 0.08,
shadow: { type: "outer", color: "000000", blur: 4, offset: 1, angle: 135, opacity: 0.08 },
});
s.addShape(pres.shapes.RECTANGLE, { x: x, y: y, w: 4.6, h: 0.42, fill: { color: c.col }, rectRadius: 0 });
s.addText(c.title, { x: x + 0.1, y: y, w: 4.4, h: 0.42, fontSize: 12, bold: true, color: C.white, valign: "middle", margin: 0 });
s.addText(makeBullets(c.points, { fontSize: 11 }), { x: x + 0.1, y: y + 0.45, w: 4.4, h: 1.5, valign: "top" });
});
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 14 – NATURAL HISTORY & WATCHFUL WAITING
// ═══════════════════════════════════════════════════════════════════════════════
{
let s = pres.addSlide();
s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.offwhite } });
headerBar(s, "Natural History & Watchful Waiting", "Campbell-Walsh Ch.144 — Evidence from Olmsted County & VA Cooperative Study");
footer(s, "Campbell-Walsh-Wein Urology 12e — Chapter 144");
// Timeline concept
s.addText("Disease Progression Timeline", { x: 0.35, y: 1.2, w: 9.3, h: 0.35, fontSize: 13, bold: true, color: C.navy });
const stages = [
{ label: "Histologic BPH\n(asymptomatic)", sub: "Starts 30s–40s", col: C.sky },
{ label: "LUTS Onset\n(moderate)", sub: "50s–60s", col: C.teal },
{ label: "Symptoms\n(severe)", sub: "60s–70s", col: "E67E22" },
{ label: "Complications\n(AUR, retention)", sub: "Variable", col: "C0392B" },
];
stages.forEach((st, i) => {
const x = 0.4 + i * 2.3;
s.addShape(pres.shapes.OVAL, { x: x, y: 1.7, w: 2.0, h: 0.9, fill: { color: st.col } });
s.addText(st.label, { x: x, y: 1.72, w: 2.0, h: 0.9, fontSize: 10, bold: true, color: C.white, align: "center", valign: "middle" });
s.addText(st.sub, { x: x, y: 2.64, w: 2.0, h: 0.3, fontSize: 9, color: C.muted, align: "center" });
if (i < 3) s.addShape(pres.shapes.RIGHT_ARROW, { x: x + 2.0, y: 2.0, w: 0.3, h: 0.35, fill: { color: C.navy } });
});
s.addShape(pres.shapes.RECTANGLE, { x: 0.3, y: 3.05, w: 9.4, h: 0.04, fill: { color: C.sky } });
s.addText("Watchful Waiting (Active Surveillance)", { x: 0.35, y: 3.15, w: 4.5, h: 0.35, fontSize: 13, bold: true, color: C.navy });
s.addText(makeBullets([
"Appropriate for mild symptoms (IPSS ≤7) or moderate symptoms with low bother",
"~40% of men improve spontaneously; ~45% remain stable over 5 years",
"VA Cooperative Study: patients crossing over later to TURP had LESS improvement than early TURP group",
"Annual reassessment: IPSS, Qmax, PVR, PSA, creatinine",
], { fontSize: 12 }), { x: 0.35, y: 3.52, w: 4.5, h: 1.9, valign: "top" });
s.addText("Treatment Decision Guide", { x: 5.1, y: 3.15, w: 4.5, h: 0.35, fontSize: 13, bold: true, color: C.navy });
const decRows = [
["IPSS 0–7", "Watchful waiting", C.green ],
["IPSS 8–19", "Medical therapy", C.teal ],
["IPSS 20–35", "Medical → Surgery", "E67E22" ],
["AUR/Stones", "Surgery (absolute)", "C0392B" ],
["Renal failure","Surgery (immediate)", "8E24AA" ],
];
decRows.forEach(([score, tx, col], i) => {
const y = 3.56 + i * 0.38;
s.addShape(pres.shapes.RECTANGLE, { x: 5.1, y: y, w: 4.5, h: 0.36, fill: { color: i % 2 === 0 ? C.offwhite : C.white } });
s.addShape(pres.shapes.RECTANGLE, { x: 5.1, y: y, w: 0.15, h: 0.36, fill: { color: col } });
s.addText(score, { x: 5.28, y: y + 0.05, w: 1.2, h: 0.26, fontSize: 10.5, bold: true, color: C.navy, margin: 0 });
s.addText(tx, { x: 6.5, y: y + 0.05, w: 3.05, h: 0.26, fontSize: 10.5, color: C.text, margin: 0 });
});
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 15 – SUMMARY
// ═══════════════════════════════════════════════════════════════════════════════
{
let s = pres.addSlide();
s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.navy } });
s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 1.08, w: 10, h: 0.06, fill: { color: C.sky } });
s.addText("KEY TAKEAWAYS", {
x: 0.5, y: 0.15, w: 9, h: 0.9, fontSize: 30, bold: true, color: C.white, align: "center", valign: "middle", charSpacing: 4,
});
const takeaways = [
["Prevalence", "Histologic BPH: 20% (40s) → 50% (50–60s) → 90% (>80s); most common benign tumour in men"],
["Pathogenesis", "Multifactorial: androgens (DHT), estrogens, growth factors, impaired apoptosis; transition zone origin"],
["Pathophysiology","Dual mechanism: mechanical + dynamic obstruction; secondary bladder changes (trabeculation, instability)"],
["Symptoms", "IPSS: 7 items; 0–7 mild, 8–19 moderate, 20–35 severe; obstructive + irritative symptoms"],
["Medical Rx", "α-blockers (rapid symptom relief) + 5α-RI (large glands, long-term prevention); combination superior"],
["Surgery", "TURP is gold standard; HoLEP equivalent for all sizes; UroLift/Rezum for selected patients"],
["Complications", "AUR (surgical indication), bladder decompensation, hydronephrosis, renal failure, bladder stones"],
];
takeaways.forEach(([heading, body], i) => {
const y = 1.3 + i * 0.6;
s.addShape(pres.shapes.RECTANGLE, { x: 0.3, y: y, w: 9.4, h: 0.56, fill: { color: i % 2 === 0 ? "0F3050" : "112840" } });
s.addShape(pres.shapes.RECTANGLE, { x: 0.3, y: y, w: 0.12, h: 0.56, fill: { color: C.sky } });
s.addText(heading, { x: 0.48, y: y + 0.1, w: 1.55, h: 0.35, fontSize: 11, bold: true, color: C.sky, margin: 0 });
s.addText(body, { x: 2.05, y: y + 0.1, w: 7.6, h: 0.38, fontSize: 11, color: C.white, margin: 0 });
});
s.addText("Smith & Tanagho's General Urology, 19e | Campbell-Walsh-Wein Urology, 12e", {
x: 0.3, y: 5.38, w: 9.4, h: 0.22,
fontSize: 8, color: C.muted, align: "center",
});
}
// ─── Write file ────────────────────────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/bph-presentation/BPH_Slideshow.pptx" })
.then(() => console.log("SUCCESS: BPH_Slideshow.pptx created"))
.catch(e => { console.error("ERROR:", e); process.exit(1); });
cd /home/daytona/workspace/bph-presentation && node create_bph.js 2>&1