help me generate a 20 slide ppt on duodenal ulcer

Reading File
Reading File
Reading File
Finding Sources
Reading File
Reading File
Finding Sources
Reading File
Reading File
Finding Sources
Reading File
Reading File
Reading File
Reading File
Running Command

ls /home/daytona/workspace/ 2>/dev/null || echo "workspace empty"

Running Command

mkdir -p /home/daytona/workspace/duodenal-ulcer-ppt

Writing File

~/duodenal-ulcer-ppt/create_ppt.js

const pptxgen = require("pptxgenjs");

const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Duodenal Ulcer";
pres.author = "Medical Education";

// ─── COLOR PALETTE ───────────────────────────────────────────
// Dark navy dominates; accent orange/amber; light cream text
const C = {
  navyDark:  "0D1B2A",   // background dark slides
  navyMid:   "1A2F4A",   // section header bg
  navyLight: "1E3A5F",   // content bg
  amber:     "E8A020",   // accent / headings
  coral:     "E05C3A",   // secondary accent (warnings/complications)
  cream:     "F5F0E8",   // body text
  white:     "FFFFFF",
  lightBlue: "A8C8E8",   // sub-bullets
  paleGreen: "A8D5B5",   // positive points
  paleRed:   "F0A898",   // negative / risks
  grayMid:   "6C8FAA",   // muted text
};

// ─── HELPERS ─────────────────────────────────────────────────
function addBg(slide, color) {
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: "100%", h: "100%",
    fill: { color },
    line: { color, width: 0 }
  });
}

function sideBar(slide, color) {
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 0.18, h: "100%",
    fill: { color },
    line: { color, width: 0 }
  });
}

function topBar(slide, color, h = 0.08) {
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: "100%", h,
    fill: { color },
    line: { color, width: 0 }
  });
}

function slideNum(slide, n) {
  slide.addText(`${n} / 20`, {
    x: 9.2, y: 5.3, w: 0.7, h: 0.25,
    fontSize: 9, color: C.grayMid, align: "right"
  });
}

function sectionTag(slide, text) {
  slide.addShape(pres.ShapeType.rect, {
    x: 0.28, y: 0.15, w: 2.2, h: 0.32,
    fill: { color: C.amber },
    line: { color: C.amber, width: 0 },
    rounding: true
  });
  slide.addText(text, {
    x: 0.28, y: 0.15, w: 2.2, h: 0.32,
    fontSize: 9, bold: true, color: C.navyDark, align: "center", valign: "middle", margin: 0
  });
}

function slideTitle(slide, text, y = 0.55, color = C.amber) {
  slide.addText(text, {
    x: 0.28, y, w: 9.4, h: 0.55,
    fontSize: 22, bold: true, color,
    fontFace: "Calibri"
  });
}

function divider(slide, y = 1.05, color = C.amber, w = 9.4) {
  slide.addShape(pres.ShapeType.rect, {
    x: 0.28, y, w, h: 0.03,
    fill: { color },
    line: { color, width: 0 }
  });
}

function bullets(slide, items, opts = {}) {
  const defaults = { x: 0.38, y: 1.2, w: 9.2, h: 4.0, fontSize: 14, color: C.cream, fontFace: "Calibri" };
  const cfg = Object.assign({}, defaults, opts);
  const richText = items.map((item, i) => {
    const isLast = i === items.length - 1;
    if (typeof item === "string") {
      return { text: item, options: { bullet: { indent: 14 }, breakLine: !isLast, color: C.cream, fontSize: cfg.fontSize } };
    }
    // object: { text, sub, color, bold }
    const parts = [];
    parts.push({ text: item.text, options: { bullet: { indent: 14 }, breakLine: item.sub ? true : !isLast, color: item.color || C.cream, fontSize: cfg.fontSize, bold: item.bold || false } });
    if (item.sub) {
      item.sub.forEach((s, j) => {
        const subLast = j === item.sub.length - 1 && isLast;
        parts.push({ text: s, options: { bullet: { indent: 28 }, breakLine: !subLast, color: C.lightBlue, fontSize: cfg.fontSize - 1.5 } });
      });
    }
    return parts;
  });
  slide.addText(richText.flat(), { x: cfg.x, y: cfg.y, w: cfg.w, h: cfg.h, fontFace: cfg.fontFace, valign: "top" });
}

function twoCol(slide, leftItems, rightItems, opts = {}) {
  const y = opts.y || 1.2;
  const h = opts.h || 4.1;
  const fs = opts.fontSize || 13;
  // Left column
  const leftRich = leftItems.map((item, i) => {
    const isLast = i === leftItems.length - 1;
    if (typeof item === "string")
      return { text: item, options: { bullet: { indent: 14 }, breakLine: !isLast, color: C.cream, fontSize: fs } };
    const parts = [];
    parts.push({ text: item.text, options: { bullet: { indent: 14 }, breakLine: item.sub ? true : !isLast, color: item.color || C.cream, fontSize: fs, bold: item.bold || false } });
    if (item.sub) item.sub.forEach((s, j) => {
      parts.push({ text: s, options: { bullet: { indent: 28 }, breakLine: !(j === item.sub.length - 1 && isLast), color: C.lightBlue, fontSize: fs - 1.5 } });
    });
    return parts;
  });
  slide.addText(leftRich.flat(), { x: 0.38, y, w: 4.5, h, fontFace: "Calibri", valign: "top" });

  // Right column
  const rightRich = rightItems.map((item, i) => {
    const isLast = i === rightItems.length - 1;
    if (typeof item === "string")
      return { text: item, options: { bullet: { indent: 14 }, breakLine: !isLast, color: C.cream, fontSize: fs } };
    const parts = [];
    parts.push({ text: item.text, options: { bullet: { indent: 14 }, breakLine: item.sub ? true : !isLast, color: item.color || C.amber, fontSize: fs, bold: item.bold || false } });
    if (item.sub) item.sub.forEach((s, j) => {
      parts.push({ text: s, options: { bullet: { indent: 28 }, breakLine: !(j === item.sub.length - 1 && isLast), color: C.lightBlue, fontSize: fs - 1.5 } });
    });
    return parts;
  });
  slide.addText(rightRich.flat(), { x: 5.1, y, w: 4.7, h, fontFace: "Calibri", valign: "top" });

  // vertical divider
  slide.addShape(pres.ShapeType.rect, { x: 4.98, y: y - 0.05, w: 0.025, h, fill: { color: C.navyMid }, line: { color: C.navyMid, width: 0 } });
}

// ─── SLIDE 1: TITLE ──────────────────────────────────────────
{
  const s = pres.addSlide();
  addBg(s, C.navyDark);
  // Large amber accent block left
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 0.55, h: "100%", fill: { color: C.amber }, line: { color: C.amber, width: 0 } });
  // Decorative circles
  s.addShape(pres.ShapeType.ellipse, { x: 7.5, y: -0.6, w: 3.5, h: 3.5, fill: { color: C.navyMid }, line: { color: C.navyMid, width: 0 } });
  s.addShape(pres.ShapeType.ellipse, { x: 8.2, y: 3.8, w: 2.2, h: 2.2, fill: { color: "0A1520" }, line: { color: "0A1520", width: 0 } });

  s.addText("DUODENAL ULCER", {
    x: 0.85, y: 1.4, w: 8.5, h: 1.1,
    fontSize: 40, bold: true, color: C.white,
    fontFace: "Calibri", charSpacing: 3
  });
  s.addText("Pathophysiology · Diagnosis · Management · Complications", {
    x: 0.85, y: 2.6, w: 8.5, h: 0.5,
    fontSize: 16, color: C.amber, fontFace: "Calibri", italic: true
  });
  s.addShape(pres.ShapeType.rect, { x: 0.85, y: 3.2, w: 5.5, h: 0.04, fill: { color: C.amber }, line: { color: C.amber, width: 0 } });
  s.addText("A Comprehensive Clinical Overview", {
    x: 0.85, y: 3.35, w: 8.5, h: 0.4,
    fontSize: 13, color: C.grayMid, fontFace: "Calibri"
  });
  s.addText("Sources: Schwartz's Principles of Surgery · Yamada's Gastroenterology · Current Surgical Therapy · Harrison's Internal Medicine", {
    x: 0.85, y: 4.9, w: 9.0, h: 0.35,
    fontSize: 9, color: C.grayMid, fontFace: "Calibri", italic: true
  });
}

// ─── SLIDE 2: OUTLINE ────────────────────────────────────────
{
  const s = pres.addSlide();
  addBg(s, C.navyDark);
  sideBar(s, C.amber);
  slideNum(s, 2);

  s.addText("PRESENTATION OUTLINE", {
    x: 0.38, y: 0.2, w: 9.3, h: 0.5,
    fontSize: 22, bold: true, color: C.amber, fontFace: "Calibri", charSpacing: 2
  });
  divider(s, 0.72, C.amber);

  const topics = [
    ["01", "Definition & Overview"],
    ["02", "Epidemiology"],
    ["03", "Anatomy of the Duodenum"],
    ["04", "Etiology & Risk Factors"],
    ["05", "Pathophysiology"],
    ["06", "Role of H. pylori"],
    ["07", "NSAIDs & Acid Hypersecretion"],
    ["08", "Clinical Features"],
    ["09", "Diagnosis & Investigations"],
    ["10", "Differential Diagnosis"],
    ["11", "Medical Management"],
    ["12", "H. pylori Eradication Regimens"],
    ["13", "Surgical Indications"],
    ["14", "Complications - Perforation"],
    ["15", "Complications - Bleeding"],
    ["16", "Complications - Obstruction"],
    ["17", "Surgical Procedures"],
    ["18", "Prognosis & Recurrence"],
    ["19", "Prevention & Patient Education"],
    ["20", "Summary & Key Takeaways"],
  ];

  const col1 = topics.slice(0, 10);
  const col2 = topics.slice(10);

  col1.forEach((t, i) => {
    s.addShape(pres.ShapeType.rect, { x: 0.38, y: 0.88 + i * 0.42, w: 0.38, h: 0.3, fill: { color: C.amber }, line: { color: C.amber, width: 0 } });
    s.addText(t[0], { x: 0.38, y: 0.88 + i * 0.42, w: 0.38, h: 0.3, fontSize: 9, bold: true, color: C.navyDark, align: "center", valign: "middle", margin: 0 });
    s.addText(t[1], { x: 0.82, y: 0.9 + i * 0.42, w: 4.1, h: 0.28, fontSize: 12, color: C.cream, fontFace: "Calibri" });
  });

  col2.forEach((t, i) => {
    s.addShape(pres.ShapeType.rect, { x: 5.2, y: 0.88 + i * 0.42, w: 0.38, h: 0.3, fill: { color: C.coral }, line: { color: C.coral, width: 0 } });
    s.addText(t[0], { x: 5.2, y: 0.88 + i * 0.42, w: 0.38, h: 0.3, fontSize: 9, bold: true, color: C.white, align: "center", valign: "middle", margin: 0 });
    s.addText(t[1], { x: 5.64, y: 0.9 + i * 0.42, w: 4.1, h: 0.28, fontSize: 12, color: C.cream, fontFace: "Calibri" });
  });
}

// ─── SLIDE 3: DEFINITION ─────────────────────────────────────
{
  const s = pres.addSlide();
  addBg(s, C.navyDark);
  sideBar(s, C.amber);
  sectionTag(s, "DEFINITION");
  slideTitle(s, "What is a Duodenal Ulcer?");
  divider(s);
  slideNum(s, 3);

  bullets(s, [
    { text: "Peptic ulcer disease (PUD) - a breach in the mucosal lining of the gastrointestinal tract extending through the muscularis mucosae", bold: true },
    { text: "Duodenal ulcer (DU) - ulceration located in the duodenum, most commonly in the duodenal bulb (first part)", color: C.amber },
    { text: "Lifetime cumulative prevalence ~10%, peaking around age 70 years", sub: ["Prevalence approx. 2% in the US at any given time", "Costs exceed $8 billion/year in the US"] },
    { text: "More common than gastric ulcer; duodenal ulcers account for 75-80% of all peptic ulcers" },
    { text: "Final common pathway: acid-peptic injury overwhelming the gastroduodenal mucosal barrier" },
    { text: "Historically viewed as a disease of acid hypersecretion; now understood as multifactorial - H. pylori + NSAIDs + mucosal defense failure" }
  ], { y: 1.15, fontSize: 13.5 });
}

// ─── SLIDE 4: EPIDEMIOLOGY ───────────────────────────────────
{
  const s = pres.addSlide();
  addBg(s, C.navyDark);
  sideBar(s, C.amber);
  sectionTag(s, "EPIDEMIOLOGY");
  slideTitle(s, "Epidemiology");
  divider(s);
  slideNum(s, 4);

  // Stat boxes
  const stats = [
    { val: "~10%", label: "Lifetime prevalence\n(general population)" },
    { val: "~2%", label: "Point prevalence\n(US adults)" },
    { val: "70 yrs", label: "Age of peak\nincidence" },
    { val: "3.7%", label: "Mortality in\nhospitalized DU patients" },
  ];
  stats.forEach((st, i) => {
    const x = 0.38 + i * 2.38;
    s.addShape(pres.ShapeType.rect, { x, y: 1.15, w: 2.15, h: 1.35, fill: { color: C.navyMid }, line: { color: C.amber, width: 1.5 }, rounding: true });
    s.addText(st.val, { x, y: 1.2, w: 2.15, h: 0.65, fontSize: 26, bold: true, color: C.amber, align: "center", fontFace: "Calibri" });
    s.addText(st.label, { x, y: 1.82, w: 2.15, h: 0.6, fontSize: 10, color: C.cream, align: "center", fontFace: "Calibri" });
  });

  bullets(s, [
    { text: "Incidence declining since 1970s due to H. pylori eradication and better acid suppression", color: C.paleGreen },
    { text: "Emergency surgery rates remain high despite medical advances", color: C.paleRed },
    "Hospital admissions declining: age-adjusted rate 56.5/100,000 (down 21% over prior decade)",
    "Rising rates of bleeding and perforation in elderly - driven by NSAIDs/aspirin in aging populations",
    "Male predominance (DU more common in men; gastric ulcer has narrowing sex gap)",
    "H. pylori found in up to 90% of duodenal ulcer patients"
  ], { y: 2.65, fontSize: 13 });
}

// ─── SLIDE 5: ANATOMY ────────────────────────────────────────
{
  const s = pres.addSlide();
  addBg(s, C.navyDark);
  sideBar(s, C.amber);
  sectionTag(s, "ANATOMY");
  slideTitle(s, "Anatomy of the Duodenum");
  divider(s);
  slideNum(s, 5);

  // Left column - parts of duodenum
  s.addText("Parts of the Duodenum", { x: 0.38, y: 1.12, w: 4.5, h: 0.35, fontSize: 14, bold: true, color: C.amber, fontFace: "Calibri" });

  const parts = [
    { part: "D1 (Bulb)", detail: "Site of 95% of DUs; mobile; antrum of Py to upper border of Hd pancreas", color: C.coral },
    { part: "D2 (Descending)", detail: "Fixed; contains ampulla of Vater (hepatopancreatic ampulla); CBD & pancreatic duct open here", color: C.cream },
    { part: "D3 (Horizontal)", detail: "Crosses L3 vertebra; inferior mesenteric vessels cross anteriorly", color: C.cream },
    { part: "D4 (Ascending)", detail: "Rises to duodenojejunal flexure (ligament of Treitz) at L2", color: C.cream },
  ];

  parts.forEach((p, i) => {
    s.addShape(pres.ShapeType.rect, { x: 0.38, y: 1.55 + i * 0.82, w: 0.9, h: 0.6, fill: { color: i === 0 ? C.coral : C.navyMid }, line: { color: i === 0 ? C.coral : C.amber, width: 1 } });
    s.addText(p.part, { x: 0.38, y: 1.55 + i * 0.82, w: 0.9, h: 0.6, fontSize: 10, bold: true, color: C.white, align: "center", valign: "middle", margin: 0, fontFace: "Calibri" });
    s.addText(p.detail, { x: 1.35, y: 1.58 + i * 0.82, w: 3.5, h: 0.56, fontSize: 11, color: p.color, fontFace: "Calibri", valign: "middle" });
  });

  // Right column - clinical relevance
  s.addText("Clinical Relevance", { x: 5.1, y: 1.12, w: 4.7, h: 0.35, fontSize: 14, bold: true, color: C.amber, fontFace: "Calibri" });
  s.addShape(pres.ShapeType.rect, { x: 4.98, y: 1.1, w: 0.025, h: 4.3, fill: { color: C.navyMid }, line: { color: C.navyMid, width: 0 } });

  const rightItems = [
    "Blood supply: gastroduodenal artery (GDA) - erosion causes massive haemorrhage",
    "Posterior DU erodes GDA, causing life-threatening bleed",
    "Anterior DU more likely to perforate (free peritoneal cavity)",
    "Duodenum secretes bicarbonate to buffer gastric acid",
    "Brunner's glands (in submucosa of D1) produce mucus and bicarbonate - protective",
    "C-shaped duodenum embraces head of pancreas - surgical landmark",
    "Vagus nerve innervates parietal cells; vagotomy reduces acid secretion"
  ];
  const rightRich = rightItems.map((item, i) => ({
    text: item,
    options: { bullet: { indent: 14 }, breakLine: i < rightItems.length - 1, color: C.cream, fontSize: 12 }
  }));
  s.addText(rightRich, { x: 5.1, y: 1.55, w: 4.65, h: 4.0, fontFace: "Calibri", valign: "top" });
}

// ─── SLIDE 6: ETIOLOGY ───────────────────────────────────────
{
  const s = pres.addSlide();
  addBg(s, C.navyDark);
  sideBar(s, C.amber);
  sectionTag(s, "ETIOLOGY");
  slideTitle(s, "Etiology & Risk Factors");
  divider(s);
  slideNum(s, 6);

  // Three category boxes
  const cats = [
    {
      title: "PRIMARY CAUSES",
      color: C.coral,
      items: ["H. pylori infection (70-90% of DUs)", "NSAID / aspirin use", "Idiopathic (H. pylori-negative, NSAID-negative)"]
    },
    {
      title: "ACID HYPERSECRETORY STATES",
      color: C.amber,
      items: ["Zollinger-Ellison syndrome (gastrinoma)", "Antral G-cell hyperplasia/hyperfunction", "Systemic mastocytosis", "Multiple endocrine neoplasia type 1 (MEN-1)"]
    },
    {
      title: "MODIFYING RISK FACTORS",
      color: C.lightBlue,
      items: ["Smoking (doubles risk; impairs healing)", "Psychological stress", "Steroids (especially with NSAIDs)", "Cocaine use", "Severe physiologic stress (Curling's ulcer - burns)"]
    }
  ];

  cats.forEach((cat, i) => {
    const x = 0.38 + i * 3.15;
    s.addShape(pres.ShapeType.rect, { x, y: 1.12, w: 3.0, h: 0.38, fill: { color: cat.color }, line: { color: cat.color, width: 0 } });
    s.addText(cat.title, { x, y: 1.12, w: 3.0, h: 0.38, fontSize: 10, bold: true, color: C.navyDark, align: "center", valign: "middle", margin: 0, fontFace: "Calibri" });
    const rich = cat.items.map((item, j) => ({
      text: item,
      options: { bullet: { indent: 12 }, breakLine: j < cat.items.length - 1, color: C.cream, fontSize: 12 }
    }));
    s.addShape(pres.ShapeType.rect, { x, y: 1.5, w: 3.0, h: 3.0, fill: { color: C.navyMid }, line: { color: cat.color, width: 1 } });
    s.addText(rich, { x: x + 0.05, y: 1.6, w: 2.9, h: 2.8, fontFace: "Calibri", valign: "top" });
  });

  bullets(s, [
    { text: "90%+ of serious PUD complications in the US attributable to H. pylori, NSAIDs, and/or cigarette smoking combined", color: C.amber, bold: true },
  ], { y: 4.65, fontSize: 13 });
}

// ─── SLIDE 7: PATHOPHYSIOLOGY ────────────────────────────────
{
  const s = pres.addSlide();
  addBg(s, C.navyDark);
  sideBar(s, C.amber);
  sectionTag(s, "PATHOPHYSIOLOGY");
  slideTitle(s, "Pathophysiology");
  divider(s);
  slideNum(s, 7);

  // Balance concept
  s.addShape(pres.ShapeType.rect, { x: 0.38, y: 1.12, w: 4.1, h: 0.36, fill: { color: C.coral }, line: { color: C.coral, width: 0 } });
  s.addText("AGGRESSIVE FACTORS (Increased)", { x: 0.38, y: 1.12, w: 4.1, h: 0.36, fontSize: 11, bold: true, color: C.white, align: "center", valign: "middle", margin: 0 });

  s.addShape(pres.ShapeType.rect, { x: 5.52, y: 1.12, w: 4.2, h: 0.36, fill: { color: C.paleGreen.slice(0, 6) === "A8D5B5" ? "2E6B4A" : "2E6B4A" }, line: { color: "2E6B4A", width: 0 } });
  s.addText("DEFENSIVE FACTORS (Decreased)", { x: 5.52, y: 1.12, w: 4.2, h: 0.36, fontSize: 11, bold: true, color: C.white, align: "center", valign: "middle", margin: 0 });

  // vs symbol
  s.addShape(pres.ShapeType.ellipse, { x: 4.6, y: 1.12, w: 0.8, h: 0.8, fill: { color: C.amber }, line: { color: C.amber, width: 0 } });
  s.addText("VS", { x: 4.6, y: 1.12, w: 0.8, h: 0.8, fontSize: 14, bold: true, color: C.navyDark, align: "center", valign: "middle", margin: 0 });

  const aggr = [
    "Excess gastric acid production",
    "Elevated basal acid output (BAO) & maximal acid output (MAO)",
    "Increased parietal cell mass sensitivity to gastrin",
    "Accelerated gastric emptying (increased duodenal acid load)",
    "H. pylori-induced hypergastrinaemia",
    "NSAID-induced prostaglandin suppression",
    "Pepsin activity"
  ];
  const def = [
    "Reduced duodenal bicarbonate secretion",
    "Impaired mucus-bicarbonate barrier",
    "Decreased prostaglandin synthesis (NSAIDs)",
    "Reduced blood flow to mucosa",
    "Disrupted tight junctions (H. pylori VacA toxin)",
    "Impaired restitution and cell renewal"
  ];

  const aRich = aggr.map((t, i) => ({ text: t, options: { bullet: { indent: 12 }, breakLine: i < aggr.length - 1, color: C.cream, fontSize: 12 } }));
  s.addText(aRich, { x: 0.38, y: 1.55, w: 4.1, h: 3.6, fontFace: "Calibri", valign: "top" });

  const dRich = def.map((t, i) => ({ text: t, options: { bullet: { indent: 12 }, breakLine: i < def.length - 1, color: C.cream, fontSize: 12 } }));
  s.addText(dRich, { x: 5.52, y: 1.55, w: 4.2, h: 3.6, fontFace: "Calibri", valign: "top" });

  s.addText("Net result: acid-peptic injury overwhelms the duodenal mucosal barrier → ulceration", {
    x: 0.38, y: 5.1, w: 9.4, h: 0.35,
    fontSize: 12.5, bold: true, color: C.amber, fontFace: "Calibri", italic: true
  });
}

// ─── SLIDE 8: H. PYLORI ──────────────────────────────────────
{
  const s = pres.addSlide();
  addBg(s, C.navyDark);
  sideBar(s, C.amber);
  sectionTag(s, "H. PYLORI");
  slideTitle(s, "Role of Helicobacter pylori");
  divider(s);
  slideNum(s, 8);

  twoCol(s,
    [
      { text: "Prevalence", bold: true, color: C.amber, sub: ["Present in 70-90% of DU patients", "Global prevalence: ~50% of world population infected"] },
      { text: "Mechanism of ulceration", bold: true, color: C.amber, sub: ["Colonises antral mucosa → releases urease, VacA toxin, CagA protein", "Increases gastrin release → acid hypersecretion", "Disrupts mucus-bicarbonate barrier (VacA)", "Induces mucosal inflammation (IL-8, TNF-alpha)"] },
      { text: "Acid secretion changes", bold: true, color: C.amber, sub: ["Decreased somatostatin → disinhibited gastrin release", "DU patients: 2/3 reduction in gastric acid after H. pylori eradication"] },
    ],
    [
      { text: "Why eradication matters", bold: true, color: C.coral, sub: ["Eradication reduces DU recurrence from ~80% to <5% at 1 year", "Ranitidine alone: 80-90% recurrence; Ranitidine + antibiotics: <5%"] },
      { text: "Diagnostic tests", bold: true, color: C.coral, sub: ["Non-invasive: urea breath test (UBT), stool antigen test", "Invasive (EGD-based): rapid urease test, histology, culture, RT-PCR", "All positive patients should be treated"] },
      { text: "Eradication confirmation", bold: true, color: C.coral, sub: ["Test for cure at least 4 weeks after completing treatment", "UBT or stool antigen (not serology)", "Endoscopic biopsy if ulcer follow-up required"] },
    ],
    { y: 1.18, h: 4.2 }
  );
}

// ─── SLIDE 9: NSAIDs & ACID ──────────────────────────────────
{
  const s = pres.addSlide();
  addBg(s, C.navyDark);
  sideBar(s, C.amber);
  sectionTag(s, "ETIOLOGY");
  slideTitle(s, "NSAIDs & Acid Hypersecretion");
  divider(s);
  slideNum(s, 9);

  twoCol(s,
    [
      { text: "NSAIDs - Mechanism", bold: true, color: C.amber, sub: ["Inhibit COX-1 → decreased prostaglandin (PGE2) synthesis", "Prostaglandins are key defenders: stimulate mucus, bicarbonate, blood flow", "Direct mucosal irritation (topical effect)", "Increases risk of PUD ~5-fold; UGI bleeding risk at least 2-fold"] },
      { text: "High-risk NSAID groups", bold: true, color: C.amber, sub: ["Elderly (>65 years)", "Prior history of PUD", "Concurrent corticosteroid use", "High NSAID dose or multiple NSAIDs", "Concomitant anticoagulant/antiplatelet therapy"] },
      { text: "PPI prophylaxis mandatory for high-risk NSAID users", bold: true, color: C.coral },
    ],
    [
      { text: "Acid Hypersecretion - DU profile", bold: true, color: C.amber, sub: ["Higher mean BAO & MAO vs normal controls", "Increased sensitivity of parietal cell mass to gastrin", "Accelerated gastric emptying → increased duodenal acid load", "Reduced duodenal bicarbonate buffering capacity"] },
      { text: "Zollinger-Ellison Syndrome (ZES)", bold: true, color: C.coral, sub: ["Gastrinoma in pancreas/duodenum → extreme acid hypersecretion", "Multiple, atypical, refractory ulcers", "Diarrhoea, malabsorption common", "Fasting gastrin >1000 pg/mL diagnostic; secretin stimulation test"] },
      { text: "Other acid hypersecretory causes", bold: true, color: C.amber, sub: ["Antral G-cell hyperplasia, mastocytosis, short bowel syndrome"] },
    ],
    { y: 1.18, h: 4.3 }
  );
}

// ─── SLIDE 10: CLINICAL FEATURES ─────────────────────────────
{
  const s = pres.addSlide();
  addBg(s, C.navyDark);
  sideBar(s, C.amber);
  sectionTag(s, "CLINICAL FEATURES");
  slideTitle(s, "Clinical Features");
  divider(s);
  slideNum(s, 10);

  twoCol(s,
    [
      { text: "Classic Symptoms", bold: true, color: C.amber, sub: ["Epigastric pain/burning (61-86% of DU patients)", "Pain relieved by food and antacids (classically)", "Hunger pain, night pain (waking patient 1-3 AM)", "Pain typically 2-3 hours after meals (postprandial delay)", "Nausea, vomiting, belching"] },
      { text: "The 'Pointing Sign'", bold: true, color: C.amber, sub: ["Patient points to discrete epigastric site", "Moderately predictive of DU; LR+ 2.2", "Physical exam otherwise rarely diagnostic"] },
      { text: "IMPORTANT: Symptoms are unreliable", bold: true, color: C.coral, sub: ["Cannot reliably diagnose DU from history alone", "Cannot distinguish DU from gastric ulcer or functional dyspepsia on symptoms", "Prevalence of dyspeptic symptoms similar in patients with and without ulcers"] },
    ],
    [
      { text: "Symptom Comparison", bold: true, color: C.amber, sub: ["Pain within 30 min of food: DU 5% vs GU 20%", "Increased by food: DU 40% vs GU 20%", "Relieved by food: DU 60% vs GU 20%", "Night pain: more common in DU than GU"] },
      { text: "Alarm Features (Red Flags)", bold: true, color: C.coral, sub: ["Unintentional weight loss", "Haematemesis or melaena", "Dysphagia / odynophagia", "Persistent vomiting", "Iron deficiency anaemia", "Palpable epigastric mass", "Age >55 with new-onset dyspepsia"] },
      { text: "Asymptomatic DU", bold: true, color: C.amber, sub: ["Up to 40% of NSAID-induced ulcers are silent", "May present first with a complication (bleed, perforation)"] },
    ],
    { y: 1.18, h: 4.3 }
  );
}

// ─── SLIDE 11: DIAGNOSIS ─────────────────────────────────────
{
  const s = pres.addSlide();
  addBg(s, C.navyDark);
  sideBar(s, C.amber);
  sectionTag(s, "DIAGNOSIS");
  slideTitle(s, "Diagnosis & Investigations");
  divider(s);
  slideNum(s, 11);

  // Investigation cards
  const invx = [
    { title: "OGD / EGD", color: C.amber, detail: "Gold standard. Confirms ulcer site, size, depth. Biopsy gastric mucosa for H. pylori (duodenal biopsy not needed). Rules out malignancy." },
    { title: "H. pylori Tests", color: C.coral, detail: "UBT (urea breath), stool antigen (non-invasive). Rapid urease test, histology, culture (invasive). All positive = treat." },
    { title: "Barium Studies", color: C.lightBlue, detail: "Double-contrast barium meal: 'niche sign' or crater. Now largely replaced by EGD. Used if EGD unavailable/contraindicated." },
    { title: "Lab Tests", color: C.paleGreen, detail: "FBC (anaemia), serum gastrin (if ZES suspected). LFTs, coagulation if bleeding. Urea: elevated in upper GI bleed." },
  ];

  invx.forEach((inv, i) => {
    const x = 0.38 + (i % 2) * 4.75;
    const y = 1.1 + Math.floor(i / 2) * 2.0;
    s.addShape(pres.ShapeType.rect, { x, y, w: 4.55, h: 1.85, fill: { color: C.navyMid }, line: { color: inv.color, width: 1.5 } });
    s.addShape(pres.ShapeType.rect, { x, y, w: 4.55, h: 0.38, fill: { color: inv.color }, line: { color: inv.color, width: 0 } });
    s.addText(inv.title, { x, y, w: 4.55, h: 0.38, fontSize: 13, bold: true, color: C.navyDark, align: "center", valign: "middle", margin: 0, fontFace: "Calibri" });
    s.addText(inv.detail, { x: x + 0.1, y: y + 0.42, w: 4.35, h: 1.35, fontSize: 11.5, color: C.cream, fontFace: "Calibri", valign: "top" });
  });

  bullets(s, [
    { text: "Test-and-treat strategy: for uncomplicated dyspepsia <55y without alarm features - test for H. pylori non-invasively and treat if positive (no EGD required initially)", color: C.amber, bold: true }
  ], { y: 5.1, fontSize: 12.5 });
}

// ─── SLIDE 12: DIFFERENTIAL DIAGNOSIS ───────────────────────
{
  const s = pres.addSlide();
  addBg(s, C.navyDark);
  sideBar(s, C.amber);
  sectionTag(s, "DIFFERENTIAL");
  slideTitle(s, "Differential Diagnosis");
  divider(s);
  slideNum(s, 12);

  const diffs = [
    { dx: "Functional Dyspepsia", clue: "Most common cause of dyspepsia (60-75%). No ulcer on endoscopy. Rome IV criteria.", color: C.cream },
    { dx: "Gastric Ulcer", clue: "Pain worsened by food. Must biopsy to exclude malignancy. Helicobacter-linked but different acid profile.", color: C.cream },
    { dx: "GERD", clue: "Burning in chest/throat. Worse with lying, acid reflux. No ulcer crater unless severe oesophagitis.", color: C.cream },
    { dx: "Acute Pancreatitis", clue: "Elevated amylase/lipase. Epigastric pain radiating to back. Alcohol/gallstone history.", color: C.paleRed },
    { dx: "Biliary Colic / Cholecystitis", clue: "RUQ pain, fatty food intolerance. Murphy's sign. Ultrasound shows gallstones.", color: C.paleRed },
    { dx: "Zollinger-Ellison Syndrome", clue: "Multiple / refractory ulcers. Diarrhoea. Fasting gastrin >1000 pg/mL. Secretin test.", color: C.amber },
    { dx: "Gastric Malignancy", clue: "Weight loss, anorexia, alarm features. Age >55. Always biopsy gastric ulcer.", color: C.coral },
    { dx: "Mesenteric Ischaemia", clue: "Pain out of proportion, post-prandial, elderly with AF/atherosclerosis.", color: C.paleRed },
  ];

  diffs.forEach((d, i) => {
    const col = i % 2;
    const row = Math.floor(i / 2);
    const x = col === 0 ? 0.38 : 5.15;
    const y = 1.1 + row * 1.05;
    s.addShape(pres.ShapeType.rect, { x, y, w: 4.6, h: 0.95, fill: { color: C.navyMid }, line: { color: d.color, width: 1 }, rounding: true });
    s.addText(d.dx, { x: x + 0.1, y: y + 0.04, w: 4.4, h: 0.32, fontSize: 12, bold: true, color: d.color, fontFace: "Calibri" });
    s.addText(d.clue, { x: x + 0.1, y: y + 0.34, w: 4.4, h: 0.58, fontSize: 10.5, color: C.cream, fontFace: "Calibri", valign: "top" });
  });
}

// ─── SLIDE 13: MEDICAL MANAGEMENT ───────────────────────────
{
  const s = pres.addSlide();
  addBg(s, C.navyDark);
  sideBar(s, C.amber);
  sectionTag(s, "MANAGEMENT");
  slideTitle(s, "Medical Management");
  divider(s);
  slideNum(s, 13);

  twoCol(s,
    [
      { text: "Proton Pump Inhibitors (PPIs)", bold: true, color: C.amber, sub: ["First-line acid suppression (omeprazole, lansoprazole, pantoprazole, esomeprazole)", "Standard course: 4-8 weeks", "Heal up to 95% of DUs when compliant", "Long-term: only if recurrent ulcers, cannot ensure H. pylori eradication, or ongoing NSAID/aspirin use"] },
      { text: "H2 Receptor Antagonists", bold: true, color: C.amber, sub: ["Ranitidine, famotidine (secondary role)", "Less effective than PPIs", "Useful in mild cases or cost-constrained settings"] },
      { text: "Antacids", bold: true, color: C.amber, sub: ["Symptom relief only; no role in definitive healing", "Sodium bicarbonate, aluminium hydroxide, magnesium hydroxide"] },
    ],
    [
      { text: "Adjunctive Measures", bold: true, color: C.coral, sub: ["Stop NSAIDs if possible", "Smoking cessation (slows healing, increases recurrence)", "Alcohol moderation", "Stress reduction"] },
      { text: "Cytoprotective Agents", bold: true, color: C.coral, sub: ["Sucralfate: forms protective coating; useful adjunct", "Misoprostol (PGE1 analogue): prophylaxis for NSAID ulcers; poorly tolerated (diarrhoea)", "Bismuth: adjunct in H. pylori regimens"] },
      { text: "Aspirin & Cardiovascular Prophylaxis", bold: true, color: C.coral, sub: ["Daily aspirin permissible if daily PPI co-prescribed", "Do NOT stop aspirin abruptly in high cardiovascular risk patients"] },
    ],
    { y: 1.18, h: 4.3 }
  );
}

// ─── SLIDE 14: H. PYLORI ERADICATION ────────────────────────
{
  const s = pres.addSlide();
  addBg(s, C.navyDark);
  sideBar(s, C.amber);
  sectionTag(s, "H. PYLORI TREATMENT");
  slideTitle(s, "H. pylori Eradication Regimens");
  divider(s);
  slideNum(s, 14);

  const regimens = [
    {
      name: "Triple Therapy (Clarithromycin-based)", duration: "10-14 days",
      drugs: "PPI (BD) + Clarithromycin (500mg BD) + Amoxicillin (1g BD) or Metronidazole (400mg BD)",
      note: "1st-line where clarithromycin resistance <15%", color: C.amber
    },
    {
      name: "Bismuth Quadruple Therapy", duration: "10-14 days",
      drugs: "PPI (BD) + Bismuth (4x/day) + Tetracycline (500mg QDS) + Nitroimidazole (Metronidazole/Tinidazole)",
      note: "Preferred where clarithromycin resistance high; salvage therapy", color: C.coral
    },
    {
      name: "Sequential Therapy", duration: "10-14 days",
      drugs: "Days 1-7: PPI + Amoxicillin → Days 8-14: PPI + Clarithromycin + Nitroimidazole",
      note: "Overcomes amoxicillin-clarithromycin cross-resistance", color: C.lightBlue
    },
    {
      name: "Hybrid Therapy", duration: "14 days",
      drugs: "Days 1-7: PPI + Amoxicillin → Days 8-14: PPI + Amoxicillin + Clarithromycin + Nitroimidazole",
      note: "High eradication rates; best for areas with dual resistance", color: C.paleGreen
    },
  ];

  regimens.forEach((r, i) => {
    const y = 1.1 + i * 1.08;
    s.addShape(pres.ShapeType.rect, { x: 0.38, y, w: 9.35, h: 1.0, fill: { color: C.navyMid }, line: { color: r.color, width: 1.5 }, rounding: true });
    s.addShape(pres.ShapeType.rect, { x: 0.38, y, w: 0.18, h: 1.0, fill: { color: r.color }, line: { color: r.color, width: 0 } });
    s.addText(r.name, { x: 0.65, y: y + 0.03, w: 6.2, h: 0.3, fontSize: 12, bold: true, color: r.color, fontFace: "Calibri" });
    s.addText(r.duration, { x: 8.3, y: y + 0.03, w: 1.35, h: 0.3, fontSize: 11, color: C.amber, fontFace: "Calibri", align: "right" });
    s.addText(r.drugs, { x: 0.65, y: y + 0.32, w: 7.5, h: 0.32, fontSize: 10.5, color: C.cream, fontFace: "Calibri" });
    s.addText(r.note, { x: 0.65, y: y + 0.62, w: 8.6, h: 0.28, fontSize: 10, color: C.grayMid, fontFace: "Calibri", italic: true });
  });

  s.addText("Confirm eradication with UBT or stool antigen ≥4 weeks post-treatment (avoid PPIs 2 weeks before testing)", {
    x: 0.38, y: 5.4, w: 9.35, h: 0.3,
    fontSize: 11, bold: true, color: C.amber, fontFace: "Calibri", italic: true
  });
}

// ─── SLIDE 15: SURGICAL INDICATIONS ─────────────────────────
{
  const s = pres.addSlide();
  addBg(s, C.navyDark);
  sideBar(s, C.amber);
  sectionTag(s, "SURGERY");
  slideTitle(s, "Surgical Indications");
  divider(s);
  slideNum(s, 15);

  s.addText("Indications for Surgery (in decreasing frequency)", {
    x: 0.38, y: 1.12, w: 9.3, h: 0.35,
    fontSize: 14, bold: true, color: C.amber, fontFace: "Calibri"
  });

  const indications = [
    { rank: "1st", label: "Upper GI Bleeding", detail: "Failed endoscopic haemostasis x2; haemodynamic instability; posterior ulcer eroding GDA", color: C.coral },
    { rank: "2nd", label: "Perforation", detail: "Acute abdomen; pneumoperitoneum; peritonitis; surgery within hours reduces mortality", color: C.coral },
    { rank: "3rd", label: "Obstruction (Gastric Outlet)", detail: "Pyloric stenosis from chronic scarring; persistent vomiting; balloon dilatation first-line if suitable", color: C.amber },
    { rank: "4th", label: "Intractability", detail: "Failure to heal after 3 months of maximal medical therapy; now rare with PPIs", color: C.lightBlue },
  ];

  indications.forEach((ind, i) => {
    const y = 1.55 + i * 0.92;
    s.addShape(pres.ShapeType.rect, { x: 0.38, y, w: 0.7, h: 0.72, fill: { color: ind.color }, line: { color: ind.color, width: 0 } });
    s.addText(ind.rank, { x: 0.38, y, w: 0.7, h: 0.72, fontSize: 12, bold: true, color: C.white, align: "center", valign: "middle", margin: 0, fontFace: "Calibri" });
    s.addShape(pres.ShapeType.rect, { x: 1.15, y, w: 8.55, h: 0.72, fill: { color: C.navyMid }, line: { color: ind.color, width: 0 } });
    s.addText(ind.label, { x: 1.25, y: y + 0.04, w: 3.5, h: 0.3, fontSize: 13, bold: true, color: ind.color, fontFace: "Calibri" });
    s.addText(ind.detail, { x: 1.25, y: y + 0.35, w: 8.35, h: 0.32, fontSize: 11, color: C.cream, fontFace: "Calibri" });
  });

  s.addText("Medical therapy (PPIs + H. pylori eradication) has greatly reduced elective ulcer surgery. Emergency surgery is now the dominant surgical scenario.", {
    x: 0.38, y: 5.3, w: 9.35, h: 0.35,
    fontSize: 11, bold: false, color: C.grayMid, fontFace: "Calibri", italic: true
  });
}

// ─── SLIDE 16: PERFORATION ───────────────────────────────────
{
  const s = pres.addSlide();
  addBg(s, C.navyDark);
  sideBar(s, C.coral);
  sectionTag(s, "COMPLICATIONS");
  slideTitle(s, "Complication: Perforation", 0.55, C.coral);
  divider(s, 1.05, C.coral);
  slideNum(s, 16);

  twoCol(s,
    [
      { text: "Presentation", bold: true, color: C.coral, sub: ["Sudden-onset severe epigastric pain (patient can pinpoint onset)", "Board-like rigid abdomen, generalised peritonitis", "Tachycardia (early), hypotension (late)", "Fever and tachypnoea follow", "May or may not have prior ulcer history"] },
      { text: "Investigations", bold: true, color: C.amber, sub: ["Erect CXR: pneumoperitoneum (absent in 10-15%)", "CT abdomen (nearly always shows extraluminal air and free fluid)", "Leukocytosis; raised CRP", "'Kissing ulcers' (anterior + posterior): consider EGD intraoperatively"] },
    ],
    [
      { text: "Management", bold: true, color: C.coral, sub: ["IV fluid resuscitation + IV antibiotics URGENTLY", "NGT, urinary catheter", "Prompt surgery - delay increases mortality (up to 30% in modern series)", "Laparotomy or laparoscopy + thorough peritoneal washout (5-10 L)", "Omental patch closure (Graham patch) - most common repair", "Post-op: chronic PPI + empiric H. pylori eradication", "Advise avoid NSAIDs, aspirin, smoking"] },
      { text: "Prognosis", bold: true, color: C.amber, sub: ["Mortality up to 30% in some series", "Abdominal reintervention needed in ~25%", "Frailty, delayed presentation, sepsis worsen outcomes"] },
    ],
    { y: 1.18, h: 4.25 }
  );
}

// ─── SLIDE 17: BLEEDING ──────────────────────────────────────
{
  const s = pres.addSlide();
  addBg(s, C.navyDark);
  sideBar(s, C.coral);
  sectionTag(s, "COMPLICATIONS");
  slideTitle(s, "Complication: Upper GI Bleeding", 0.55, C.coral);
  divider(s, 1.05, C.coral);
  slideNum(s, 17);

  // Risk score boxes
  s.addText("Risk Stratification Scores", { x: 0.38, y: 1.12, w: 9.3, h: 0.32, fontSize: 14, bold: true, color: C.amber, fontFace: "Calibri" });

  const scores = [
    { name: "Glasgow-Blatchford Score", max: "Max 23", items: "BUN, Hgb, SBP, HR, melaena, syncope, hepatic disease, cardiac failure. Score 0 = can discharge.", color: C.amber },
    { name: "Rockall Score", max: "Max 11", items: "Age, shock, comorbidities + endoscopic findings (stigmata). Score ≤2 = low risk.", color: C.coral },
  ];
  scores.forEach((sc, i) => {
    const x = 0.38 + i * 4.75;
    s.addShape(pres.ShapeType.rect, { x, y: 1.48, w: 4.55, h: 1.45, fill: { color: C.navyMid }, line: { color: sc.color, width: 1.5 }, rounding: true });
    s.addText(sc.name, { x: x + 0.1, y: 1.52, w: 3.5, h: 0.3, fontSize: 12, bold: true, color: sc.color, fontFace: "Calibri" });
    s.addText(sc.max, { x: x + 3.7, y: 1.52, w: 0.8, h: 0.3, fontSize: 11, color: C.amber, fontFace: "Calibri", align: "right" });
    s.addText(sc.items, { x: x + 0.1, y: 1.82, w: 4.35, h: 1.05, fontSize: 11, color: C.cream, fontFace: "Calibri", valign: "top" });
  });

  bullets(s, [
    { text: "75% of DU bleeds stop spontaneously with IV fluids + IV PPIs (conservative management)", color: C.paleGreen, bold: true },
    { text: "25% continue or rebleed - essentially all deaths occur in this group", color: C.paleRed, bold: true },
    { text: "High-risk features: hematemesis, hypotension, >4 units transfusion, visible vessel / active bleeding on OGD" },
    { text: "Endoscopic haemostasis: epinephrine injection + electrocautery/APC + clips (haemoclips for visible vessels)" },
    { text: "Failed endoscopy x2: consider angiographic embolisation or surgery (oversewing of ulcer; posterior DU may need GDA ligation)" },
    { text: "Posterior DU bleeds erode GDA - deep, high-risk lesions; early surgery consideration warranted" }
  ], { y: 2.98, fontSize: 12.5 });
}

// ─── SLIDE 18: OBSTRUCTION ───────────────────────────────────
{
  const s = pres.addSlide();
  addBg(s, C.navyDark);
  sideBar(s, C.coral);
  sectionTag(s, "COMPLICATIONS");
  slideTitle(s, "Complication: Gastric Outlet Obstruction", 0.55, C.coral);
  divider(s, 1.05, C.coral);
  slideNum(s, 18);

  twoCol(s,
    [
      { text: "Causes", bold: true, color: C.amber, sub: ["Chronic scarring and fibrosis of pylorus/duodenal bulb", "Acute oedema and spasm during active ulceration", "Rarely: carcinoma of pylorus / proximal duodenum (must be excluded)"] },
      { text: "Clinical Features", bold: true, color: C.amber, sub: ["Persistent vomiting (large volume, foul-smelling, undigested food)", "Succussion splash", "Weight loss, dehydration", "Hypokalaemic, hypochloraemic metabolic alkalosis", "Visible gastric peristalsis"] },
      { text: "Investigations", bold: true, color: C.amber, sub: ["EGD: confirms stenosis, biopsies to exclude malignancy", "Barium meal: 'bird beak' appearance", "CT: degree of obstruction, rules out cancer", "Electrolytes (classic: low K+, low Cl-, high HCO3-, low Na+)"] },
    ],
    [
      { text: "Conservative / Endoscopic", bold: true, color: C.coral, sub: ["Nasogastric tube decompression", "IV fluids + electrolyte correction", "IV PPI + H. pylori eradication", "Endoscopic balloon dilatation: first-line for fibrotic stenosis", "Success 70-80%; restenosis common requiring repeat dilatation"] },
      { text: "Surgical Management", bold: true, color: C.coral, sub: ["Vagotomy + Antrectomy (V/A): gold standard - lowest recurrence", "Vagotomy + Gastrojejunostomy (V/GJ): simpler, laparoscopic-friendly", "Avoid gastrectomy in malnourished/thin patients", "Exclude malignancy intraoperatively (especially pyloric channel/proximal D2 cancer)"] },
    ],
    { y: 1.18, h: 4.3 }
  );
}

// ─── SLIDE 19: SURGICAL PROCEDURES ──────────────────────────
{
  const s = pres.addSlide();
  addBg(s, C.navyDark);
  sideBar(s, C.amber);
  sectionTag(s, "SURGERY");
  slideTitle(s, "Surgical Procedures");
  divider(s);
  slideNum(s, 19);

  const procs = [
    {
      name: "Omental Patch (Graham Patch)",
      use: "Perforated DU",
      detail: "Omentum placed over perforation; secured with interrupted Lembert sutures. Test seal with air/methylene blue via NGT. Most common repair.",
      color: C.amber
    },
    {
      name: "Oversewing of Bleeding Vessel",
      use: "Bleeding DU",
      detail: "Duodenotomy; U-sutures proximal and distal to vessel + transfix the vessel (figure-of-8). GDA ligation if posterior ulcer. Highly selective vagotomy may be added.",
      color: C.coral
    },
    {
      name: "Vagotomy + Antrectomy (V/A)",
      use: "Obstruction / Intractability",
      detail: "Gold standard for elective DU surgery. Truncal vagotomy + distal gastrectomy. Reconstruction: Billroth II (gastrojejunostomy) preferred. Lowest ulcer recurrence rate. Mortality 2%.",
      color: C.lightBlue
    },
    {
      name: "Vagotomy + Drainage (V/D)",
      use: "Perforation + Definitive",
      detail: "Truncal or posterior truncal vagotomy + pyloroplasty or gastrojejunostomy (drainage). Simpler, applicable laparoscopically. Modified Taylor procedure (post truncal + ant. highly selective) preserves gastropyloric innervation.",
      color: C.paleGreen
    },
  ];

  procs.forEach((p, i) => {
    const col = i % 2;
    const row = Math.floor(i / 2);
    const x = 0.38 + col * 4.75;
    const y = 1.1 + row * 2.1;
    s.addShape(pres.ShapeType.rect, { x, y, w: 4.55, h: 2.0, fill: { color: C.navyMid }, line: { color: p.color, width: 1.5 }, rounding: true });
    s.addShape(pres.ShapeType.rect, { x, y, w: 4.55, h: 0.4, fill: { color: p.color }, line: { color: p.color, width: 0 }, rounding: true });
    s.addText(p.name, { x: x + 0.1, y: y + 0.03, w: 4.35, h: 0.34, fontSize: 11.5, bold: true, color: C.navyDark, fontFace: "Calibri", valign: "middle" });
    s.addText("For: " + p.use, { x: x + 0.1, y: y + 0.44, w: 4.35, h: 0.28, fontSize: 10.5, bold: true, color: p.color, fontFace: "Calibri" });
    s.addText(p.detail, { x: x + 0.1, y: y + 0.72, w: 4.35, h: 1.22, fontSize: 11, color: C.cream, fontFace: "Calibri", valign: "top" });
  });
}

// ─── SLIDE 20: PROGNOSIS / PREVENTION / SUMMARY ──────────────
{
  const s = pres.addSlide();
  addBg(s, C.navyDark);
  // left bold amber bar
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 0.55, h: "100%", fill: { color: C.amber }, line: { color: C.amber, width: 0 } });
  s.addText("PROGNOSIS, PREVENTION & SUMMARY", {
    x: 0.75, y: 0.2, w: 9.0, h: 0.45,
    fontSize: 20, bold: true, color: C.amber, fontFace: "Calibri", charSpacing: 1
  });
  divider(s, 0.68, C.amber);
  slideNum(s, 20);

  // Three panels
  const panels = [
    {
      title: "Prognosis & Recurrence", color: C.amber,
      items: [
        "H. pylori eradication: recurrence drops from 80-90% to <5%",
        "With PPI alone: recurrence 15-20% per year",
        "Surgery (vagotomy): <5% recurrence but declining elective use",
        "Hospital mortality: 3.7% (DU) vs 2.1% (gastric ulcer)",
        "Perforation mortality: up to 30% in modern series",
        "Early presentation and treatment dramatically improve outcomes"
      ]
    },
    {
      title: "Prevention", color: C.paleGreen,
      items: [
        "Test and treat H. pylori in all at-risk patients",
        "PPI co-prescription with NSAIDs / long-term aspirin",
        "Smoking cessation - smoking doubles risk and impairs healing",
        "Avoid unnecessary NSAIDs; use minimum effective dose",
        "Post-hospitalization: chronic PPI + H. pylori eradication",
        "Low-dose aspirin permissible with concomitant PPI"
      ]
    },
    {
      title: "Key Takeaways", color: C.coral,
      items: [
        "H. pylori + NSAIDs cause >90% of DUs - address both",
        "PPIs are the cornerstone of acid suppression",
        "Eradicate H. pylori - confirm with UBT post-treatment",
        "Alarm features → urgent EGD",
        "Perforated DU: emergency surgery (Graham patch)",
        "Bleeding DU: endoscopic haemostasis first; surgery if failed x2",
        "Avoid gastrectomy in malnourished patients"
      ]
    }
  ];

  panels.forEach((p, i) => {
    const x = 0.75 + i * 3.12;
    s.addShape(pres.ShapeType.rect, { x, y: 0.75, w: 3.0, h: 0.38, fill: { color: p.color }, line: { color: p.color, width: 0 } });
    s.addText(p.title, { x, y: 0.75, w: 3.0, h: 0.38, fontSize: 11, bold: true, color: C.navyDark, align: "center", valign: "middle", margin: 0, fontFace: "Calibri" });
    s.addShape(pres.ShapeType.rect, { x, y: 1.13, w: 3.0, h: 4.3, fill: { color: C.navyMid }, line: { color: p.color, width: 1 } });
    const rich = p.items.map((item, j) => ({
      text: item,
      options: { bullet: { indent: 12 }, breakLine: j < p.items.length - 1, color: C.cream, fontSize: 11.5 }
    }));
    s.addText(rich, { x: x + 0.08, y: 1.18, w: 2.84, h: 4.2, fontFace: "Calibri", valign: "top" });
  });

  s.addText("Sources: Schwartz's Principles of Surgery 11e • Yamada's Textbook of Gastroenterology 7e • Current Surgical Therapy 14e • Harrison's Principles of Internal Medicine 22e", {
    x: 0.75, y: 5.38, w: 9.1, h: 0.25,
    fontSize: 8.5, color: C.grayMid, fontFace: "Calibri", italic: true
  });
}

// ─── WRITE FILE ──────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/duodenal-ulcer-ppt/Duodenal_Ulcer.pptx" })
  .then(() => console.log("SUCCESS: Duodenal_Ulcer.pptx created"))
  .catch(err => { console.error("ERROR:", err); process.exit(1); });
You've run out of free credits. Sign up for a free account to continue using Orris.
This is a shared conversation. Sign in to Orris to start your own chat.